From 9fbfe507d0f9d90df2880e61eb4e5280206ae6b9 Mon Sep 17 00:00:00 2001 From: Peter Breitenlohner Date: Thu, 23 Feb 2012 10:27:56 +0000 Subject: poppler 0.18.4 git-svn-id: svn://tug.org/texlive/trunk@25482 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/libs/README | 4 +- Build/source/libs/poppler/ChangeLog | 5 + Build/source/libs/poppler/configure | 28 +- .../libs/poppler/poppler-0.18.0-PATCHES/ChangeLog | 38 - .../libs/poppler/poppler-0.18.0-PATCHES/TL-Changes | 24 - .../patch-01-PDF_PARSER_ONLY | 17 - .../poppler-0.18.0-PATCHES/patch-02-warnings | 86 - .../patch-03-POPPLER_VERSION | 15 - Build/source/libs/poppler/poppler-0.18.0/AUTHORS | 5 - .../libs/poppler/poppler-0.18.0/CMakeLists.txt | 580 - Build/source/libs/poppler/poppler-0.18.0/COPYING | 339 - Build/source/libs/poppler/poppler-0.18.0/ChangeLog | 37227 ------------------ .../poppler/poppler-0.18.0/ConfigureChecks.cmake | 56 - Build/source/libs/poppler/poppler-0.18.0/INSTALL | 236 - .../source/libs/poppler/poppler-0.18.0/Makefile.am | 118 - .../source/libs/poppler/poppler-0.18.0/Makefile.in | 966 - Build/source/libs/poppler/poppler-0.18.0/NEWS | 1384 - Build/source/libs/poppler/poppler-0.18.0/README | 37 - .../source/libs/poppler/poppler-0.18.0/README-XPDF | 376 - Build/source/libs/poppler/poppler-0.18.0/TODO | 40 - .../source/libs/poppler/poppler-0.18.0/aclocal.m4 | 2161 -- .../libs/poppler/poppler-0.18.0/config.h.cmake | 216 - .../source/libs/poppler/poppler-0.18.0/config.h.in | 238 - Build/source/libs/poppler/poppler-0.18.0/configure | 25602 ------------- .../libs/poppler/poppler-0.18.0/configure.ac | 669 - .../libs/poppler/poppler-0.18.0/fofi/FoFiBase.cc | 186 - .../libs/poppler/poppler-0.18.0/fofi/FoFiBase.h | 55 - .../poppler/poppler-0.18.0/fofi/FoFiEncodings.cc | 994 - .../poppler/poppler-0.18.0/fofi/FoFiEncodings.h | 34 - .../poppler/poppler-0.18.0/fofi/FoFiTrueType.cc | 2403 -- .../poppler/poppler-0.18.0/fofi/FoFiTrueType.h | 202 - .../libs/poppler/poppler-0.18.0/fofi/FoFiType1.cc | 290 - .../libs/poppler/poppler-0.18.0/fofi/FoFiType1.h | 57 - .../libs/poppler/poppler-0.18.0/fofi/FoFiType1C.cc | 2620 -- .../libs/poppler/poppler-0.18.0/fofi/FoFiType1C.h | 245 - .../libs/poppler/poppler-0.18.0/fofi/Makefile.am | 26 - .../libs/poppler/poppler-0.18.0/fofi/Makefile.in | 663 - .../libs/poppler/poppler-0.18.0/goo/FixedPoint.cc | 120 - .../libs/poppler/poppler-0.18.0/goo/FixedPoint.h | 155 - .../libs/poppler/poppler-0.18.0/goo/GooHash.cc | 380 - .../libs/poppler/poppler-0.18.0/goo/GooHash.h | 76 - .../libs/poppler/poppler-0.18.0/goo/GooLikely.h | 22 - .../libs/poppler/poppler-0.18.0/goo/GooList.cc | 97 - .../libs/poppler/poppler-0.18.0/goo/GooList.h | 94 - .../libs/poppler/poppler-0.18.0/goo/GooMutex.h | 63 - .../libs/poppler/poppler-0.18.0/goo/GooString.cc | 804 - .../libs/poppler/poppler-0.18.0/goo/GooString.h | 179 - .../libs/poppler/poppler-0.18.0/goo/GooTimer.cc | 95 - .../libs/poppler/poppler-0.18.0/goo/GooTimer.h | 57 - .../libs/poppler/poppler-0.18.0/goo/ImgWriter.cc | 15 - .../libs/poppler/poppler-0.18.0/goo/ImgWriter.h | 33 - .../libs/poppler/poppler-0.18.0/goo/JpegWriter.cc | 145 - .../libs/poppler/poppler-0.18.0/goo/JpegWriter.h | 56 - .../libs/poppler/poppler-0.18.0/goo/Makefile.am | 47 - .../libs/poppler/poppler-0.18.0/goo/Makefile.in | 690 - .../libs/poppler/poppler-0.18.0/goo/PNGWriter.cc | 175 - .../libs/poppler/poppler-0.18.0/goo/PNGWriter.h | 63 - .../libs/poppler/poppler-0.18.0/goo/TiffWriter.cc | 202 - .../libs/poppler/poppler-0.18.0/goo/TiffWriter.h | 54 - .../libs/poppler/poppler-0.18.0/goo/gfile.cc | 723 - .../source/libs/poppler/poppler-0.18.0/goo/gfile.h | 159 - .../source/libs/poppler/poppler-0.18.0/goo/gmem.cc | 326 - .../source/libs/poppler/poppler-0.18.0/goo/gmem.h | 92 - .../libs/poppler/poppler-0.18.0/goo/gmempp.cc | 32 - .../libs/poppler/poppler-0.18.0/goo/gstrtod.cc | 147 - .../libs/poppler/poppler-0.18.0/goo/gstrtod.h | 43 - .../libs/poppler/poppler-0.18.0/goo/gtypes.h | 48 - .../libs/poppler/poppler-0.18.0/goo/gtypes_p.h | 30 - .../libs/poppler/poppler-0.18.0/gtk-doc.make | 240 - .../poppler-0.18.0/poppler-cairo-uninstalled.pc.in | 6 - .../poppler/poppler-0.18.0/poppler-cairo.pc.cmake | 9 - .../poppler/poppler-0.18.0/poppler-cairo.pc.in | 9 - .../poppler-0.18.0/poppler-cpp-uninstalled.pc.in | 7 - .../poppler/poppler-0.18.0/poppler-cpp.pc.cmake | 13 - .../libs/poppler/poppler-0.18.0/poppler-cpp.pc.in | 13 - .../poppler-0.18.0/poppler-glib-uninstalled.pc.in | 7 - .../poppler/poppler-0.18.0/poppler-glib.pc.cmake | 13 - .../libs/poppler/poppler-0.18.0/poppler-glib.pc.in | 13 - .../poppler-0.18.0/poppler-qt4-uninstalled.pc.in | 7 - .../poppler/poppler-0.18.0/poppler-qt4.pc.cmake | 13 - .../libs/poppler/poppler-0.18.0/poppler-qt4.pc.in | 13 - .../poppler-splash-uninstalled.pc.in | 7 - .../poppler/poppler-0.18.0/poppler-splash.pc.cmake | 9 - .../poppler/poppler-0.18.0/poppler-splash.pc.in | 9 - .../poppler-0.18.0/poppler-uninstalled.pc.in | 6 - .../libs/poppler/poppler-0.18.0/poppler.pc.cmake | 11 - .../libs/poppler/poppler-0.18.0/poppler.pc.in | 11 - .../libs/poppler/poppler-0.18.0/poppler/Annot.cc | 5216 --- .../libs/poppler/poppler-0.18.0/poppler/Annot.h | 1267 - .../libs/poppler/poppler-0.18.0/poppler/Array.cc | 102 - .../libs/poppler/poppler-0.18.0/poppler/Array.h | 71 - .../poppler-0.18.0/poppler/ArthurOutputDev.cc | 816 - .../poppler-0.18.0/poppler/ArthurOutputDev.h | 169 - .../poppler/poppler-0.18.0/poppler/BuiltinFont.cc | 65 - .../poppler/poppler-0.18.0/poppler/BuiltinFont.h | 55 - .../poppler-0.18.0/poppler/BuiltinFontTables.cc | 4284 --- .../poppler-0.18.0/poppler/BuiltinFontTables.h | 23 - .../libs/poppler/poppler-0.18.0/poppler/CMap.cc | 469 - .../libs/poppler/poppler-0.18.0/poppler/CMap.h | 126 - .../poppler/poppler-0.18.0/poppler/CachedFile.cc | 256 - .../poppler/poppler-0.18.0/poppler/CachedFile.h | 146 - .../poppler-0.18.0/poppler/CairoFontEngine.cc | 794 - .../poppler-0.18.0/poppler/CairoFontEngine.h | 125 - .../poppler-0.18.0/poppler/CairoOutputDev.cc | 3002 -- .../poppler-0.18.0/poppler/CairoOutputDev.h | 505 - .../poppler-0.18.0/poppler/CairoRescaleBox.cc | 351 - .../poppler-0.18.0/poppler/CairoRescaleBox.h | 12 - .../libs/poppler/poppler-0.18.0/poppler/Catalog.cc | 965 - .../libs/poppler/poppler-0.18.0/poppler/Catalog.h | 227 - .../poppler-0.18.0/poppler/CharCodeToUnicode.cc | 628 - .../poppler-0.18.0/poppler/CharCodeToUnicode.h | 138 - .../poppler/poppler-0.18.0/poppler/CharTypes.h | 24 - .../poppler-0.18.0/poppler/CompactFontTables.h | 480 - .../poppler-0.18.0/poppler/CurlCachedFile.cc | 99 - .../poppler-0.18.0/poppler/CurlCachedFile.h | 40 - .../poppler-0.18.0/poppler/CurlPDFDocBuilder.cc | 47 - .../poppler-0.18.0/poppler/CurlPDFDocBuilder.h | 33 - .../poppler/poppler-0.18.0/poppler/DCTStream.cc | 243 - .../poppler/poppler-0.18.0/poppler/DCTStream.h | 87 - .../poppler/poppler-0.18.0/poppler/DateInfo.cc | 118 - .../libs/poppler/poppler-0.18.0/poppler/DateInfo.h | 35 - .../libs/poppler/poppler-0.18.0/poppler/Decrypt.cc | 811 - .../libs/poppler/poppler-0.18.0/poppler/Decrypt.h | 111 - .../libs/poppler/poppler-0.18.0/poppler/Dict.cc | 238 - .../libs/poppler/poppler-0.18.0/poppler/Dict.h | 105 - .../libs/poppler/poppler-0.18.0/poppler/Error.cc | 72 - .../libs/poppler/poppler-0.18.0/poppler/Error.h | 40 - .../poppler/poppler-0.18.0/poppler/ErrorCodes.h | 36 - .../poppler/poppler-0.18.0/poppler/FileSpec.cc | 268 - .../libs/poppler/poppler-0.18.0/poppler/FileSpec.h | 73 - .../poppler/poppler-0.18.0/poppler/FlateStream.cc | 128 - .../poppler/poppler-0.18.0/poppler/FlateStream.h | 77 - .../poppler-0.18.0/poppler/FontEncodingTables.cc | 1824 - .../poppler-0.18.0/poppler/FontEncodingTables.h | 20 - .../poppler/poppler-0.18.0/poppler/FontInfo.cc | 239 - .../libs/poppler/poppler-0.18.0/poppler/FontInfo.h | 97 - .../libs/poppler/poppler-0.18.0/poppler/Form.cc | 1463 - .../libs/poppler/poppler-0.18.0/poppler/Form.h | 549 - .../poppler/poppler-0.18.0/poppler/Function.cc | 1627 - .../libs/poppler/poppler-0.18.0/poppler/Function.h | 247 - .../libs/poppler/poppler-0.18.0/poppler/Gfx.cc | 5087 --- .../libs/poppler/poppler-0.18.0/poppler/Gfx.h | 378 - .../libs/poppler/poppler-0.18.0/poppler/GfxFont.cc | 2143 -- .../libs/poppler/poppler-0.18.0/poppler/GfxFont.h | 397 - .../poppler/poppler-0.18.0/poppler/GfxState.cc | 5907 --- .../libs/poppler/poppler-0.18.0/poppler/GfxState.h | 1530 - .../poppler-0.18.0/poppler/GfxState_helpers.h | 82 - .../poppler/poppler-0.18.0/poppler/GlobalParams.cc | 2025 - .../poppler/poppler-0.18.0/poppler/GlobalParams.h | 375 - .../poppler-0.18.0/poppler/GlobalParamsWin.cc | 291 - .../libs/poppler/poppler-0.18.0/poppler/Hints.cc | 442 - .../libs/poppler/poppler-0.18.0/poppler/Hints.h | 95 - .../poppler-0.18.0/poppler/JArithmeticDecoder.cc | 322 - .../poppler-0.18.0/poppler/JArithmeticDecoder.h | 107 - .../poppler/poppler-0.18.0/poppler/JBIG2Stream.cc | 3743 -- .../poppler/poppler-0.18.0/poppler/JBIG2Stream.h | 162 - .../poppler-0.18.0/poppler/JPEG2000Stream.cc | 191 - .../poppler-0.18.0/poppler/JPEG2000Stream.h | 72 - .../poppler/poppler-0.18.0/poppler/JPXStream.cc | 3158 -- .../poppler/poppler-0.18.0/poppler/JPXStream.h | 349 - .../libs/poppler/poppler-0.18.0/poppler/Lexer.cc | 597 - .../libs/poppler/poppler-0.18.0/poppler/Lexer.h | 105 - .../poppler-0.18.0/poppler/Linearization.cc | 222 - .../poppler/poppler-0.18.0/poppler/Linearization.h | 45 - .../libs/poppler/poppler-0.18.0/poppler/Link.cc | 921 - .../libs/poppler/poppler-0.18.0/poppler/Link.h | 488 - .../poppler-0.18.0/poppler/LocalPDFDocBuilder.cc | 46 - .../poppler-0.18.0/poppler/LocalPDFDocBuilder.h | 33 - .../poppler/poppler-0.18.0/poppler/Makefile.am | 325 - .../poppler/poppler-0.18.0/poppler/Makefile.in | 1178 - .../libs/poppler/poppler-0.18.0/poppler/Movie.cc | 285 - .../libs/poppler/poppler-0.18.0/poppler/Movie.h | 110 - .../poppler-0.18.0/poppler/NameToCharCode.cc | 116 - .../poppler-0.18.0/poppler/NameToCharCode.h | 40 - .../poppler-0.18.0/poppler/NameToUnicodeTable.h | 1115 - .../libs/poppler/poppler-0.18.0/poppler/Object.cc | 250 - .../libs/poppler/poppler-0.18.0/poppler/Object.h | 357 - .../poppler-0.18.0/poppler/OptionalContent.cc | 325 - .../poppler-0.18.0/poppler/OptionalContent.h | 93 - .../libs/poppler/poppler-0.18.0/poppler/Outline.cc | 188 - .../libs/poppler/poppler-0.18.0/poppler/Outline.h | 89 - .../poppler/poppler-0.18.0/poppler/OutputDev.cc | 183 - .../poppler/poppler-0.18.0/poppler/OutputDev.h | 322 - .../libs/poppler/poppler-0.18.0/poppler/PDFDoc.cc | 1523 - .../libs/poppler/poppler-0.18.0/poppler/PDFDoc.h | 308 - .../poppler/poppler-0.18.0/poppler/PDFDocBuilder.h | 42 - .../poppler-0.18.0/poppler/PDFDocEncoding.cc | 69 - .../poppler-0.18.0/poppler/PDFDocEncoding.h | 34 - .../poppler-0.18.0/poppler/PDFDocFactory.cc | 72 - .../poppler/poppler-0.18.0/poppler/PDFDocFactory.h | 55 - .../poppler/poppler-0.18.0/poppler/PSOutputDev.cc | 7005 ---- .../poppler/poppler-0.18.0/poppler/PSOutputDev.h | 472 - .../poppler/poppler-0.18.0/poppler/PSTokenizer.cc | 159 - .../poppler/poppler-0.18.0/poppler/PSTokenizer.h | 54 - .../libs/poppler/poppler-0.18.0/poppler/Page.cc | 715 - .../libs/poppler/poppler-0.18.0/poppler/Page.h | 255 - .../poppler-0.18.0/poppler/PageLabelInfo.cc | 389 - .../poppler/poppler-0.18.0/poppler/PageLabelInfo.h | 51 - .../poppler-0.18.0/poppler/PageTransition.cc | 137 - .../poppler-0.18.0/poppler/PageTransition.h | 104 - .../libs/poppler/poppler-0.18.0/poppler/Parser.cc | 278 - .../libs/poppler/poppler-0.18.0/poppler/Parser.h | 77 - .../poppler/poppler-0.18.0/poppler/PopplerCache.cc | 163 - .../poppler/poppler-0.18.0/poppler/PopplerCache.h | 78 - .../poppler-0.18.0/poppler/PreScanOutputDev.cc | 314 - .../poppler-0.18.0/poppler/PreScanOutputDev.h | 171 - .../poppler/poppler-0.18.0/poppler/ProfileData.cc | 44 - .../poppler/poppler-0.18.0/poppler/ProfileData.h | 41 - .../poppler/poppler-0.18.0/poppler/Rendition.cc | 400 - .../poppler/poppler-0.18.0/poppler/Rendition.h | 157 - .../poppler-0.18.0/poppler/SecurityHandler.cc | 412 - .../poppler-0.18.0/poppler/SecurityHandler.h | 162 - .../libs/poppler/poppler-0.18.0/poppler/Sound.cc | 145 - .../libs/poppler/poppler-0.18.0/poppler/Sound.h | 74 - .../poppler-0.18.0/poppler/SplashOutputDev.cc | 4048 -- .../poppler-0.18.0/poppler/SplashOutputDev.h | 440 - .../poppler-0.18.0/poppler/StdinCachedFile.cc | 47 - .../poppler-0.18.0/poppler/StdinCachedFile.h | 27 - .../poppler-0.18.0/poppler/StdinPDFDocBuilder.cc | 43 - .../poppler-0.18.0/poppler/StdinPDFDocBuilder.h | 33 - .../poppler/poppler-0.18.0/poppler/Stream-CCITT.h | 473 - .../libs/poppler/poppler-0.18.0/poppler/Stream.cc | 4969 --- .../libs/poppler/poppler-0.18.0/poppler/Stream.h | 1174 - .../poppler-0.18.0/poppler/TextOutputDev.cc | 5456 --- .../poppler/poppler-0.18.0/poppler/TextOutputDev.h | 806 - .../libs/poppler/poppler-0.18.0/poppler/UTF8.h | 84 - .../poppler-0.18.0/poppler/UnicodeCClassTables.h | 1827 - .../poppler-0.18.0/poppler/UnicodeCompTables.h | 665 - .../poppler-0.18.0/poppler/UnicodeDecompTables.h | 8526 ----- .../poppler/poppler-0.18.0/poppler/UnicodeMap.cc | 308 - .../poppler/poppler-0.18.0/poppler/UnicodeMap.h | 122 - .../poppler-0.18.0/poppler/UnicodeMapTables.h | 361 - .../poppler-0.18.0/poppler/UnicodeTypeTable.cc | 1203 - .../poppler-0.18.0/poppler/UnicodeTypeTable.h | 37 - .../poppler-0.18.0/poppler/ViewerPreferences.cc | 117 - .../poppler-0.18.0/poppler/ViewerPreferences.h | 76 - .../libs/poppler/poppler-0.18.0/poppler/XRef.cc | 1351 - .../libs/poppler/poppler-0.18.0/poppler/XRef.h | 176 - .../poppler-0.18.0/poppler/XpdfPluginAPI.cc | 276 - .../poppler/poppler-0.18.0/poppler/XpdfPluginAPI.h | 341 - .../poppler-0.18.0/poppler/gen-unicode-tables.py | 38 - .../poppler-0.18.0/poppler/poppler-config.h.cmake | 178 - .../poppler-0.18.0/poppler/poppler-config.h.in | 183 - .../poppler/poppler-0.18.0/poppler/strtok_r.cpp | 77 - .../libs/poppler/poppler-0.18.4-PATCHES/ChangeLog | 45 + .../libs/poppler/poppler-0.18.4-PATCHES/TL-Changes | 24 + .../poppler-0.18.4-PATCHES/patch-02-warnings | 86 + .../patch-03-POPPLER_VERSION | 15 + Build/source/libs/poppler/poppler-0.18.4/AUTHORS | 5 + .../libs/poppler/poppler-0.18.4/CMakeLists.txt | 581 + Build/source/libs/poppler/poppler-0.18.4/COPYING | 339 + Build/source/libs/poppler/poppler-0.18.4/ChangeLog | 38215 +++++++++++++++++++ .../poppler/poppler-0.18.4/ConfigureChecks.cmake | 56 + Build/source/libs/poppler/poppler-0.18.4/INSTALL | 236 + .../source/libs/poppler/poppler-0.18.4/Makefile.am | 118 + .../source/libs/poppler/poppler-0.18.4/Makefile.in | 971 + Build/source/libs/poppler/poppler-0.18.4/NEWS | 1469 + Build/source/libs/poppler/poppler-0.18.4/README | 37 + .../source/libs/poppler/poppler-0.18.4/README-XPDF | 376 + Build/source/libs/poppler/poppler-0.18.4/TODO | 40 + .../source/libs/poppler/poppler-0.18.4/aclocal.m4 | 2161 ++ .../libs/poppler/poppler-0.18.4/config.h.cmake | 219 + .../source/libs/poppler/poppler-0.18.4/config.h.in | 241 + Build/source/libs/poppler/poppler-0.18.4/configure | 26089 +++++++++++++ .../libs/poppler/poppler-0.18.4/configure.ac | 688 + .../libs/poppler/poppler-0.18.4/fofi/FoFiBase.cc | 186 + .../libs/poppler/poppler-0.18.4/fofi/FoFiBase.h | 55 + .../poppler/poppler-0.18.4/fofi/FoFiEncodings.cc | 994 + .../poppler/poppler-0.18.4/fofi/FoFiEncodings.h | 34 + .../poppler/poppler-0.18.4/fofi/FoFiTrueType.cc | 2403 ++ .../poppler/poppler-0.18.4/fofi/FoFiTrueType.h | 202 + .../libs/poppler/poppler-0.18.4/fofi/FoFiType1.cc | 290 + .../libs/poppler/poppler-0.18.4/fofi/FoFiType1.h | 57 + .../libs/poppler/poppler-0.18.4/fofi/FoFiType1C.cc | 2620 ++ .../libs/poppler/poppler-0.18.4/fofi/FoFiType1C.h | 245 + .../libs/poppler/poppler-0.18.4/fofi/Makefile.am | 26 + .../libs/poppler/poppler-0.18.4/fofi/Makefile.in | 668 + .../libs/poppler/poppler-0.18.4/goo/FixedPoint.cc | 120 + .../libs/poppler/poppler-0.18.4/goo/FixedPoint.h | 155 + .../libs/poppler/poppler-0.18.4/goo/GooHash.cc | 380 + .../libs/poppler/poppler-0.18.4/goo/GooHash.h | 76 + .../libs/poppler/poppler-0.18.4/goo/GooLikely.h | 22 + .../libs/poppler/poppler-0.18.4/goo/GooList.cc | 97 + .../libs/poppler/poppler-0.18.4/goo/GooList.h | 94 + .../libs/poppler/poppler-0.18.4/goo/GooMutex.h | 63 + .../libs/poppler/poppler-0.18.4/goo/GooString.cc | 807 + .../libs/poppler/poppler-0.18.4/goo/GooString.h | 179 + .../libs/poppler/poppler-0.18.4/goo/GooTimer.cc | 95 + .../libs/poppler/poppler-0.18.4/goo/GooTimer.h | 57 + .../libs/poppler/poppler-0.18.4/goo/ImgWriter.cc | 15 + .../libs/poppler/poppler-0.18.4/goo/ImgWriter.h | 33 + .../libs/poppler/poppler-0.18.4/goo/JpegWriter.cc | 147 + .../libs/poppler/poppler-0.18.4/goo/JpegWriter.h | 56 + .../libs/poppler/poppler-0.18.4/goo/Makefile.am | 47 + .../libs/poppler/poppler-0.18.4/goo/Makefile.in | 695 + .../libs/poppler/poppler-0.18.4/goo/PNGWriter.cc | 176 + .../libs/poppler/poppler-0.18.4/goo/PNGWriter.h | 63 + .../libs/poppler/poppler-0.18.4/goo/TiffWriter.cc | 202 + .../libs/poppler/poppler-0.18.4/goo/TiffWriter.h | 54 + .../libs/poppler/poppler-0.18.4/goo/gfile.cc | 723 + .../source/libs/poppler/poppler-0.18.4/goo/gfile.h | 159 + .../source/libs/poppler/poppler-0.18.4/goo/gmem.cc | 326 + .../source/libs/poppler/poppler-0.18.4/goo/gmem.h | 92 + .../libs/poppler/poppler-0.18.4/goo/gmempp.cc | 32 + .../libs/poppler/poppler-0.18.4/goo/gstrtod.cc | 147 + .../libs/poppler/poppler-0.18.4/goo/gstrtod.h | 43 + .../libs/poppler/poppler-0.18.4/goo/gtypes.h | 48 + .../libs/poppler/poppler-0.18.4/goo/gtypes_p.h | 30 + .../libs/poppler/poppler-0.18.4/gtk-doc.make | 256 + .../poppler-0.18.4/poppler-cairo-uninstalled.pc.in | 6 + .../poppler/poppler-0.18.4/poppler-cairo.pc.cmake | 9 + .../poppler/poppler-0.18.4/poppler-cairo.pc.in | 9 + .../poppler-0.18.4/poppler-cpp-uninstalled.pc.in | 7 + .../poppler/poppler-0.18.4/poppler-cpp.pc.cmake | 13 + .../libs/poppler/poppler-0.18.4/poppler-cpp.pc.in | 13 + .../poppler-0.18.4/poppler-glib-uninstalled.pc.in | 7 + .../poppler/poppler-0.18.4/poppler-glib.pc.cmake | 13 + .../libs/poppler/poppler-0.18.4/poppler-glib.pc.in | 13 + .../poppler-0.18.4/poppler-qt4-uninstalled.pc.in | 7 + .../poppler/poppler-0.18.4/poppler-qt4.pc.cmake | 13 + .../libs/poppler/poppler-0.18.4/poppler-qt4.pc.in | 13 + .../poppler-splash-uninstalled.pc.in | 7 + .../poppler/poppler-0.18.4/poppler-splash.pc.cmake | 9 + .../poppler/poppler-0.18.4/poppler-splash.pc.in | 9 + .../poppler-0.18.4/poppler-uninstalled.pc.in | 6 + .../libs/poppler/poppler-0.18.4/poppler.pc.cmake | 11 + .../libs/poppler/poppler-0.18.4/poppler.pc.in | 11 + .../libs/poppler/poppler-0.18.4/poppler/Annot.cc | 5216 +++ .../libs/poppler/poppler-0.18.4/poppler/Annot.h | 1267 + .../libs/poppler/poppler-0.18.4/poppler/Array.cc | 102 + .../libs/poppler/poppler-0.18.4/poppler/Array.h | 71 + .../poppler-0.18.4/poppler/ArthurOutputDev.cc | 816 + .../poppler-0.18.4/poppler/ArthurOutputDev.h | 169 + .../poppler/poppler-0.18.4/poppler/BuiltinFont.cc | 65 + .../poppler/poppler-0.18.4/poppler/BuiltinFont.h | 55 + .../poppler-0.18.4/poppler/BuiltinFontTables.cc | 4284 +++ .../poppler-0.18.4/poppler/BuiltinFontTables.h | 23 + .../libs/poppler/poppler-0.18.4/poppler/CMap.cc | 469 + .../libs/poppler/poppler-0.18.4/poppler/CMap.h | 126 + .../poppler/poppler-0.18.4/poppler/CachedFile.cc | 256 + .../poppler/poppler-0.18.4/poppler/CachedFile.h | 146 + .../poppler-0.18.4/poppler/CairoFontEngine.cc | 794 + .../poppler-0.18.4/poppler/CairoFontEngine.h | 125 + .../poppler-0.18.4/poppler/CairoOutputDev.cc | 3031 ++ .../poppler-0.18.4/poppler/CairoOutputDev.h | 509 + .../poppler-0.18.4/poppler/CairoRescaleBox.cc | 365 + .../poppler-0.18.4/poppler/CairoRescaleBox.h | 12 + .../libs/poppler/poppler-0.18.4/poppler/Catalog.cc | 965 + .../libs/poppler/poppler-0.18.4/poppler/Catalog.h | 227 + .../poppler-0.18.4/poppler/CharCodeToUnicode.cc | 628 + .../poppler-0.18.4/poppler/CharCodeToUnicode.h | 138 + .../poppler/poppler-0.18.4/poppler/CharTypes.h | 24 + .../poppler-0.18.4/poppler/CompactFontTables.h | 480 + .../poppler-0.18.4/poppler/CurlCachedFile.cc | 99 + .../poppler-0.18.4/poppler/CurlCachedFile.h | 40 + .../poppler-0.18.4/poppler/CurlPDFDocBuilder.cc | 47 + .../poppler-0.18.4/poppler/CurlPDFDocBuilder.h | 33 + .../poppler/poppler-0.18.4/poppler/DCTStream.cc | 243 + .../poppler/poppler-0.18.4/poppler/DCTStream.h | 87 + .../poppler/poppler-0.18.4/poppler/DateInfo.cc | 118 + .../libs/poppler/poppler-0.18.4/poppler/DateInfo.h | 35 + .../libs/poppler/poppler-0.18.4/poppler/Decrypt.cc | 811 + .../libs/poppler/poppler-0.18.4/poppler/Decrypt.h | 111 + .../libs/poppler/poppler-0.18.4/poppler/Dict.cc | 238 + .../libs/poppler/poppler-0.18.4/poppler/Dict.h | 105 + .../libs/poppler/poppler-0.18.4/poppler/Error.cc | 72 + .../libs/poppler/poppler-0.18.4/poppler/Error.h | 40 + .../poppler/poppler-0.18.4/poppler/ErrorCodes.h | 36 + .../poppler/poppler-0.18.4/poppler/FileSpec.cc | 268 + .../libs/poppler/poppler-0.18.4/poppler/FileSpec.h | 73 + .../poppler/poppler-0.18.4/poppler/FlateStream.cc | 128 + .../poppler/poppler-0.18.4/poppler/FlateStream.h | 77 + .../poppler-0.18.4/poppler/FontEncodingTables.cc | 1824 + .../poppler-0.18.4/poppler/FontEncodingTables.h | 20 + .../poppler/poppler-0.18.4/poppler/FontInfo.cc | 239 + .../libs/poppler/poppler-0.18.4/poppler/FontInfo.h | 97 + .../libs/poppler/poppler-0.18.4/poppler/Form.cc | 1463 + .../libs/poppler/poppler-0.18.4/poppler/Form.h | 549 + .../poppler/poppler-0.18.4/poppler/Function.cc | 1627 + .../libs/poppler/poppler-0.18.4/poppler/Function.h | 247 + .../libs/poppler/poppler-0.18.4/poppler/Gfx.cc | 5094 +++ .../libs/poppler/poppler-0.18.4/poppler/Gfx.h | 378 + .../libs/poppler/poppler-0.18.4/poppler/GfxFont.cc | 2144 ++ .../libs/poppler/poppler-0.18.4/poppler/GfxFont.h | 397 + .../poppler/poppler-0.18.4/poppler/GfxState.cc | 5919 +++ .../libs/poppler/poppler-0.18.4/poppler/GfxState.h | 1530 + .../poppler-0.18.4/poppler/GfxState_helpers.h | 82 + .../poppler/poppler-0.18.4/poppler/GlobalParams.cc | 2026 + .../poppler/poppler-0.18.4/poppler/GlobalParams.h | 375 + .../poppler-0.18.4/poppler/GlobalParamsWin.cc | 291 + .../libs/poppler/poppler-0.18.4/poppler/Hints.cc | 442 + .../libs/poppler/poppler-0.18.4/poppler/Hints.h | 95 + .../poppler-0.18.4/poppler/JArithmeticDecoder.cc | 322 + .../poppler-0.18.4/poppler/JArithmeticDecoder.h | 107 + .../poppler/poppler-0.18.4/poppler/JBIG2Stream.cc | 3743 ++ .../poppler/poppler-0.18.4/poppler/JBIG2Stream.h | 162 + .../poppler-0.18.4/poppler/JPEG2000Stream.cc | 196 + .../poppler-0.18.4/poppler/JPEG2000Stream.h | 72 + .../poppler/poppler-0.18.4/poppler/JPXStream.cc | 3158 ++ .../poppler/poppler-0.18.4/poppler/JPXStream.h | 349 + .../libs/poppler/poppler-0.18.4/poppler/Lexer.cc | 600 + .../libs/poppler/poppler-0.18.4/poppler/Lexer.h | 105 + .../poppler-0.18.4/poppler/Linearization.cc | 222 + .../poppler/poppler-0.18.4/poppler/Linearization.h | 45 + .../libs/poppler/poppler-0.18.4/poppler/Link.cc | 921 + .../libs/poppler/poppler-0.18.4/poppler/Link.h | 488 + .../poppler-0.18.4/poppler/LocalPDFDocBuilder.cc | 46 + .../poppler-0.18.4/poppler/LocalPDFDocBuilder.h | 33 + .../poppler/poppler-0.18.4/poppler/Makefile.am | 325 + .../poppler/poppler-0.18.4/poppler/Makefile.in | 1183 + .../libs/poppler/poppler-0.18.4/poppler/Movie.cc | 285 + .../libs/poppler/poppler-0.18.4/poppler/Movie.h | 110 + .../poppler-0.18.4/poppler/NameToCharCode.cc | 116 + .../poppler-0.18.4/poppler/NameToCharCode.h | 40 + .../poppler-0.18.4/poppler/NameToUnicodeTable.h | 1115 + .../libs/poppler/poppler-0.18.4/poppler/Object.cc | 250 + .../libs/poppler/poppler-0.18.4/poppler/Object.h | 357 + .../poppler-0.18.4/poppler/OptionalContent.cc | 325 + .../poppler-0.18.4/poppler/OptionalContent.h | 93 + .../libs/poppler/poppler-0.18.4/poppler/Outline.cc | 188 + .../libs/poppler/poppler-0.18.4/poppler/Outline.h | 89 + .../poppler/poppler-0.18.4/poppler/OutputDev.cc | 183 + .../poppler/poppler-0.18.4/poppler/OutputDev.h | 322 + .../libs/poppler/poppler-0.18.4/poppler/PDFDoc.cc | 1534 + .../libs/poppler/poppler-0.18.4/poppler/PDFDoc.h | 308 + .../poppler/poppler-0.18.4/poppler/PDFDocBuilder.h | 42 + .../poppler-0.18.4/poppler/PDFDocEncoding.cc | 69 + .../poppler-0.18.4/poppler/PDFDocEncoding.h | 34 + .../poppler-0.18.4/poppler/PDFDocFactory.cc | 72 + .../poppler/poppler-0.18.4/poppler/PDFDocFactory.h | 55 + .../poppler/poppler-0.18.4/poppler/PSOutputDev.cc | 7064 ++++ .../poppler/poppler-0.18.4/poppler/PSOutputDev.h | 473 + .../poppler/poppler-0.18.4/poppler/PSTokenizer.cc | 159 + .../poppler/poppler-0.18.4/poppler/PSTokenizer.h | 54 + .../libs/poppler/poppler-0.18.4/poppler/Page.cc | 715 + .../libs/poppler/poppler-0.18.4/poppler/Page.h | 255 + .../poppler-0.18.4/poppler/PageLabelInfo.cc | 389 + .../poppler/poppler-0.18.4/poppler/PageLabelInfo.h | 51 + .../poppler-0.18.4/poppler/PageTransition.cc | 137 + .../poppler-0.18.4/poppler/PageTransition.h | 104 + .../libs/poppler/poppler-0.18.4/poppler/Parser.cc | 278 + .../libs/poppler/poppler-0.18.4/poppler/Parser.h | 77 + .../poppler/poppler-0.18.4/poppler/PopplerCache.cc | 163 + .../poppler/poppler-0.18.4/poppler/PopplerCache.h | 78 + .../poppler-0.18.4/poppler/PreScanOutputDev.cc | 314 + .../poppler-0.18.4/poppler/PreScanOutputDev.h | 171 + .../poppler/poppler-0.18.4/poppler/ProfileData.cc | 44 + .../poppler/poppler-0.18.4/poppler/ProfileData.h | 41 + .../poppler/poppler-0.18.4/poppler/Rendition.cc | 400 + .../poppler/poppler-0.18.4/poppler/Rendition.h | 157 + .../poppler-0.18.4/poppler/SecurityHandler.cc | 412 + .../poppler-0.18.4/poppler/SecurityHandler.h | 162 + .../libs/poppler/poppler-0.18.4/poppler/Sound.cc | 145 + .../libs/poppler/poppler-0.18.4/poppler/Sound.h | 74 + .../poppler-0.18.4/poppler/SplashOutputDev.cc | 4048 ++ .../poppler-0.18.4/poppler/SplashOutputDev.h | 440 + .../poppler-0.18.4/poppler/StdinCachedFile.cc | 47 + .../poppler-0.18.4/poppler/StdinCachedFile.h | 27 + .../poppler-0.18.4/poppler/StdinPDFDocBuilder.cc | 43 + .../poppler-0.18.4/poppler/StdinPDFDocBuilder.h | 33 + .../poppler/poppler-0.18.4/poppler/Stream-CCITT.h | 473 + .../libs/poppler/poppler-0.18.4/poppler/Stream.cc | 4969 +++ .../libs/poppler/poppler-0.18.4/poppler/Stream.h | 1174 + .../poppler-0.18.4/poppler/TextOutputDev.cc | 5456 +++ .../poppler/poppler-0.18.4/poppler/TextOutputDev.h | 806 + .../libs/poppler/poppler-0.18.4/poppler/UTF8.h | 84 + .../poppler-0.18.4/poppler/UnicodeCClassTables.h | 1827 + .../poppler-0.18.4/poppler/UnicodeCompTables.h | 665 + .../poppler-0.18.4/poppler/UnicodeDecompTables.h | 8526 +++++ .../poppler/poppler-0.18.4/poppler/UnicodeMap.cc | 308 + .../poppler/poppler-0.18.4/poppler/UnicodeMap.h | 122 + .../poppler-0.18.4/poppler/UnicodeMapTables.h | 361 + .../poppler-0.18.4/poppler/UnicodeTypeTable.cc | 1203 + .../poppler-0.18.4/poppler/UnicodeTypeTable.h | 37 + .../poppler-0.18.4/poppler/ViewerPreferences.cc | 117 + .../poppler-0.18.4/poppler/ViewerPreferences.h | 76 + .../libs/poppler/poppler-0.18.4/poppler/XRef.cc | 1351 + .../libs/poppler/poppler-0.18.4/poppler/XRef.h | 176 + .../poppler-0.18.4/poppler/XpdfPluginAPI.cc | 276 + .../poppler/poppler-0.18.4/poppler/XpdfPluginAPI.h | 341 + .../poppler-0.18.4/poppler/gen-unicode-tables.py | 38 + .../poppler-0.18.4/poppler/poppler-config.h.cmake | 178 + .../poppler-0.18.4/poppler/poppler-config.h.in | 183 + .../poppler/poppler-0.18.4/poppler/strtok_r.cpp | 77 + Build/source/libs/poppler/poppler/Makefile.in | 6 +- Build/source/libs/poppler/version.ac | 4 +- 486 files changed, 196388 insertions(+), 194618 deletions(-) delete mode 100644 Build/source/libs/poppler/poppler-0.18.0-PATCHES/ChangeLog delete mode 100644 Build/source/libs/poppler/poppler-0.18.0-PATCHES/TL-Changes delete mode 100644 Build/source/libs/poppler/poppler-0.18.0-PATCHES/patch-01-PDF_PARSER_ONLY delete mode 100644 Build/source/libs/poppler/poppler-0.18.0-PATCHES/patch-02-warnings delete mode 100644 Build/source/libs/poppler/poppler-0.18.0-PATCHES/patch-03-POPPLER_VERSION delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/AUTHORS delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/CMakeLists.txt delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/COPYING delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/ChangeLog delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/ConfigureChecks.cmake delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/INSTALL delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/Makefile.am delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/Makefile.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/NEWS delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/README delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/README-XPDF delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/TODO delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/aclocal.m4 delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/config.h.cmake delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/config.h.in delete mode 100755 Build/source/libs/poppler/poppler-0.18.0/configure delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/configure.ac delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiBase.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiBase.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiEncodings.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiEncodings.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiTrueType.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiTrueType.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1C.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1C.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/fofi/Makefile.am delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/fofi/Makefile.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/FixedPoint.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/FixedPoint.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/GooHash.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/GooHash.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/GooLikely.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/GooList.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/GooList.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/GooMutex.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/GooString.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/GooString.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/GooTimer.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/GooTimer.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/ImgWriter.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/ImgWriter.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/JpegWriter.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/JpegWriter.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/Makefile.am delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/Makefile.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/PNGWriter.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/PNGWriter.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/TiffWriter.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/TiffWriter.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/gfile.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/gfile.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/gmem.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/gmem.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/gmempp.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/gstrtod.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/gstrtod.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/gtypes.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/goo/gtypes_p.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/gtk-doc.make delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-cairo-uninstalled.pc.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-cairo.pc.cmake delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-cairo.pc.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-cpp-uninstalled.pc.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-cpp.pc.cmake delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-cpp.pc.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-glib-uninstalled.pc.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-glib.pc.cmake delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-glib.pc.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-qt4-uninstalled.pc.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-qt4.pc.cmake delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-qt4.pc.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-splash-uninstalled.pc.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-splash.pc.cmake delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-splash.pc.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler-uninstalled.pc.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler.pc.cmake delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler.pc.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Annot.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Annot.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Array.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Array.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/ArthurOutputDev.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/ArthurOutputDev.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFont.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFont.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFontTables.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFontTables.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CMap.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CMap.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CachedFile.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CachedFile.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CairoFontEngine.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CairoFontEngine.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CairoOutputDev.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CairoOutputDev.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CairoRescaleBox.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CairoRescaleBox.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Catalog.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Catalog.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CharCodeToUnicode.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CharCodeToUnicode.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CharTypes.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CompactFontTables.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CurlCachedFile.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CurlCachedFile.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CurlPDFDocBuilder.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/CurlPDFDocBuilder.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/DCTStream.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/DCTStream.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/DateInfo.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/DateInfo.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Decrypt.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Decrypt.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Dict.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Dict.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Error.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Error.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/ErrorCodes.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/FileSpec.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/FileSpec.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/FlateStream.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/FlateStream.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/FontEncodingTables.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/FontEncodingTables.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/FontInfo.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/FontInfo.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Form.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Form.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Function.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Function.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Gfx.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Gfx.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/GfxFont.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/GfxFont.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/GfxState.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/GfxState.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/GfxState_helpers.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/GlobalParams.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/GlobalParams.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/GlobalParamsWin.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Hints.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Hints.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/JArithmeticDecoder.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/JArithmeticDecoder.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/JBIG2Stream.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/JBIG2Stream.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/JPEG2000Stream.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/JPEG2000Stream.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/JPXStream.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/JPXStream.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Lexer.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Lexer.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Linearization.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Linearization.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Link.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Link.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/LocalPDFDocBuilder.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/LocalPDFDocBuilder.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Makefile.am delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Makefile.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Movie.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Movie.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/NameToCharCode.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/NameToCharCode.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/NameToUnicodeTable.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Object.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Object.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/OptionalContent.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/OptionalContent.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Outline.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Outline.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/OutputDev.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/OutputDev.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDoc.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDoc.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocBuilder.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocEncoding.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocEncoding.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocFactory.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocFactory.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PSOutputDev.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PSOutputDev.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PSTokenizer.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PSTokenizer.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Page.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Page.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PageLabelInfo.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PageLabelInfo.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PageTransition.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PageTransition.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Parser.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Parser.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PopplerCache.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PopplerCache.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PreScanOutputDev.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/PreScanOutputDev.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/ProfileData.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/ProfileData.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Rendition.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Rendition.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/SecurityHandler.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/SecurityHandler.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Sound.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Sound.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/SplashOutputDev.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/SplashOutputDev.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/StdinCachedFile.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/StdinCachedFile.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/StdinPDFDocBuilder.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/StdinPDFDocBuilder.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Stream-CCITT.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Stream.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/Stream.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/TextOutputDev.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/TextOutputDev.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/UTF8.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeCClassTables.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeCompTables.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeDecompTables.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeMap.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeMap.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeMapTables.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeTypeTable.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeTypeTable.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/ViewerPreferences.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/ViewerPreferences.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/XRef.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/XRef.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/XpdfPluginAPI.cc delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/XpdfPluginAPI.h delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/gen-unicode-tables.py delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/poppler-config.h.cmake delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/poppler-config.h.in delete mode 100644 Build/source/libs/poppler/poppler-0.18.0/poppler/strtok_r.cpp create mode 100644 Build/source/libs/poppler/poppler-0.18.4-PATCHES/ChangeLog create mode 100644 Build/source/libs/poppler/poppler-0.18.4-PATCHES/TL-Changes create mode 100644 Build/source/libs/poppler/poppler-0.18.4-PATCHES/patch-02-warnings create mode 100644 Build/source/libs/poppler/poppler-0.18.4-PATCHES/patch-03-POPPLER_VERSION create mode 100644 Build/source/libs/poppler/poppler-0.18.4/AUTHORS create mode 100644 Build/source/libs/poppler/poppler-0.18.4/CMakeLists.txt create mode 100644 Build/source/libs/poppler/poppler-0.18.4/COPYING create mode 100644 Build/source/libs/poppler/poppler-0.18.4/ChangeLog create mode 100644 Build/source/libs/poppler/poppler-0.18.4/ConfigureChecks.cmake create mode 100644 Build/source/libs/poppler/poppler-0.18.4/INSTALL create mode 100644 Build/source/libs/poppler/poppler-0.18.4/Makefile.am create mode 100644 Build/source/libs/poppler/poppler-0.18.4/Makefile.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/NEWS create mode 100644 Build/source/libs/poppler/poppler-0.18.4/README create mode 100644 Build/source/libs/poppler/poppler-0.18.4/README-XPDF create mode 100644 Build/source/libs/poppler/poppler-0.18.4/TODO create mode 100644 Build/source/libs/poppler/poppler-0.18.4/aclocal.m4 create mode 100644 Build/source/libs/poppler/poppler-0.18.4/config.h.cmake create mode 100644 Build/source/libs/poppler/poppler-0.18.4/config.h.in create mode 100755 Build/source/libs/poppler/poppler-0.18.4/configure create mode 100644 Build/source/libs/poppler/poppler-0.18.4/configure.ac create mode 100644 Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiBase.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiBase.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiEncodings.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiEncodings.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiTrueType.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiTrueType.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1C.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1C.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/fofi/Makefile.am create mode 100644 Build/source/libs/poppler/poppler-0.18.4/fofi/Makefile.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/FixedPoint.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/FixedPoint.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/GooHash.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/GooHash.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/GooLikely.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/GooList.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/GooList.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/GooMutex.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/GooString.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/GooString.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/GooTimer.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/GooTimer.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/ImgWriter.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/ImgWriter.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/JpegWriter.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/JpegWriter.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/Makefile.am create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/Makefile.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/PNGWriter.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/PNGWriter.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/TiffWriter.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/TiffWriter.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/gfile.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/gfile.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/gmem.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/gmem.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/gmempp.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/gstrtod.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/gstrtod.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/gtypes.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/goo/gtypes_p.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/gtk-doc.make create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-cairo-uninstalled.pc.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-cairo.pc.cmake create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-cairo.pc.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-cpp-uninstalled.pc.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-cpp.pc.cmake create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-cpp.pc.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-glib-uninstalled.pc.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-glib.pc.cmake create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-glib.pc.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-qt4-uninstalled.pc.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-qt4.pc.cmake create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-qt4.pc.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-splash-uninstalled.pc.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-splash.pc.cmake create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-splash.pc.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler-uninstalled.pc.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler.pc.cmake create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler.pc.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Annot.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Annot.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Array.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Array.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/ArthurOutputDev.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/ArthurOutputDev.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFont.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFont.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFontTables.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFontTables.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CMap.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CMap.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CachedFile.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CachedFile.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CairoFontEngine.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CairoFontEngine.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CairoOutputDev.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CairoOutputDev.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CairoRescaleBox.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CairoRescaleBox.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Catalog.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Catalog.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CharCodeToUnicode.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CharCodeToUnicode.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CharTypes.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CompactFontTables.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CurlCachedFile.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CurlCachedFile.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CurlPDFDocBuilder.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/CurlPDFDocBuilder.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/DCTStream.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/DCTStream.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/DateInfo.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/DateInfo.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Decrypt.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Decrypt.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Dict.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Dict.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Error.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Error.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/ErrorCodes.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/FileSpec.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/FileSpec.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/FlateStream.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/FlateStream.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/FontEncodingTables.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/FontEncodingTables.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/FontInfo.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/FontInfo.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Form.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Form.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Function.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Function.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Gfx.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Gfx.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/GfxFont.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/GfxFont.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/GfxState.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/GfxState.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/GfxState_helpers.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/GlobalParams.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/GlobalParams.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/GlobalParamsWin.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Hints.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Hints.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/JArithmeticDecoder.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/JArithmeticDecoder.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/JBIG2Stream.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/JBIG2Stream.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/JPEG2000Stream.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/JPEG2000Stream.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/JPXStream.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/JPXStream.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Lexer.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Lexer.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Linearization.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Linearization.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Link.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Link.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/LocalPDFDocBuilder.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/LocalPDFDocBuilder.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Makefile.am create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Makefile.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Movie.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Movie.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/NameToCharCode.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/NameToCharCode.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/NameToUnicodeTable.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Object.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Object.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/OptionalContent.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/OptionalContent.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Outline.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Outline.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/OutputDev.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/OutputDev.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDoc.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDoc.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocBuilder.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocEncoding.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocEncoding.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocFactory.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocFactory.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PSOutputDev.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PSOutputDev.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PSTokenizer.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PSTokenizer.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Page.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Page.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PageLabelInfo.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PageLabelInfo.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PageTransition.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PageTransition.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Parser.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Parser.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PopplerCache.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PopplerCache.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PreScanOutputDev.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/PreScanOutputDev.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/ProfileData.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/ProfileData.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Rendition.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Rendition.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/SecurityHandler.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/SecurityHandler.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Sound.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Sound.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/SplashOutputDev.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/SplashOutputDev.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/StdinCachedFile.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/StdinCachedFile.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/StdinPDFDocBuilder.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/StdinPDFDocBuilder.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Stream-CCITT.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Stream.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/Stream.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/TextOutputDev.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/TextOutputDev.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/UTF8.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeCClassTables.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeCompTables.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeDecompTables.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeMap.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeMap.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeMapTables.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeTypeTable.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeTypeTable.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/ViewerPreferences.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/ViewerPreferences.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/XRef.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/XRef.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/XpdfPluginAPI.cc create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/XpdfPluginAPI.h create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/gen-unicode-tables.py create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/poppler-config.h.cmake create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/poppler-config.h.in create mode 100644 Build/source/libs/poppler/poppler-0.18.4/poppler/strtok_r.cpp (limited to 'Build') diff --git a/Build/source/libs/README b/Build/source/libs/README index 602d58d8571..2c42eafaa64 100644 --- a/Build/source/libs/README +++ b/Build/source/libs/README @@ -26,13 +26,13 @@ graphite 2.3.1 - checked 25apr11 icu 4.8.1 - http://download.icu-project.org/files/icu4c/ with modifications required for xetex, also used by bibtexu -libpng 1.5.7 - checked 20dec11 +libpng 1.5.9 - checked 23feb12 http://www.libpng.org/ - used by many http://www.libpng.org/pub/png/pngcode.html obsdcompat - used by pdftex and luatex -poppler 0.18.0 - checked 8oct11 +poppler 0.18.4 - checked 23feb12 http://poppler.freedesktop.org/ - used by luatex and xetex t1lib 5.1.2 - checked 25apr11 diff --git a/Build/source/libs/poppler/ChangeLog b/Build/source/libs/poppler/ChangeLog index 69f8bb38612..2707fb57aef 100644 --- a/Build/source/libs/poppler/ChangeLog +++ b/Build/source/libs/poppler/ChangeLog @@ -1,3 +1,8 @@ +2012-02-23 Peter Breitenlohner + + Import poppler-0.18.4. + * version.ac: Adjust. + 2012-01-13 Peter Breitenlohner * Makefile.am (AM_CPPFLAGS): Drop `-DPDF_PARSER_ONLY'. diff --git a/Build/source/libs/poppler/configure b/Build/source/libs/poppler/configure index 7a28273d6f9..b268220c4f6 100755 --- a/Build/source/libs/poppler/configure +++ b/Build/source/libs/poppler/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for poppler for TeX Live 0.18.0. +# Generated by GNU Autoconf 2.68 for poppler for TeX Live 0.18.4. # # Report bugs to . # @@ -560,12 +560,12 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='poppler for TeX Live' PACKAGE_TARNAME='poppler-for-tex-live' -PACKAGE_VERSION='0.18.0' -PACKAGE_STRING='poppler for TeX Live 0.18.0' +PACKAGE_VERSION='0.18.4' +PACKAGE_STRING='poppler for TeX Live 0.18.4' PACKAGE_BUGREPORT='tex-k@tug.org' PACKAGE_URL='' -ac_unique_file="poppler-0.18.0/poppler/Array.cc" +ac_unique_file="poppler-0.18.4/poppler/Array.cc" # Factoring default headers for most tests. ac_includes_default="\ #include @@ -1277,7 +1277,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures poppler for TeX Live 0.18.0 to adapt to many kinds of systems. +\`configure' configures poppler for TeX Live 0.18.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1344,7 +1344,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of poppler for TeX Live 0.18.0:";; + short | recursive ) echo "Configuration of poppler for TeX Live 0.18.4:";; esac cat <<\_ACEOF @@ -1452,7 +1452,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -poppler for TeX Live configure 0.18.0 +poppler for TeX Live configure 0.18.4 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -1859,7 +1859,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by poppler for TeX Live $as_me 0.18.0, which was +It was created by poppler for TeX Live $as_me 0.18.4, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -2678,7 +2678,7 @@ fi # Define the identity of the package. PACKAGE='poppler-for-tex-live' - VERSION='0.18.0' + VERSION='0.18.4' # Some tools Automake needs. @@ -5212,7 +5212,7 @@ fi ac_config_headers="$ac_config_headers config.h" -ac_config_headers="$ac_config_headers poppler/poppler-config.h:poppler-0.18.0/poppler/poppler-config.h.in" +ac_config_headers="$ac_config_headers poppler/poppler-config.h:poppler-0.18.4/poppler/poppler-config.h.in" @@ -5315,7 +5315,7 @@ fi $as_echo "#define ENABLE_ZLIB 1" >>confdefs.h -POPPLER_TREE=poppler-0.18.0 +POPPLER_TREE=poppler-0.18.4 ac_config_files="$ac_config_files Makefile poppler/Makefile goo/Makefile fofi/Makefile" @@ -5867,7 +5867,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by poppler for TeX Live $as_me 0.18.0, which was +This file was extended by poppler for TeX Live $as_me 0.18.4, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -5933,7 +5933,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -poppler for TeX Live config.status 0.18.0 +poppler for TeX Live config.status 0.18.4 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" @@ -6064,7 +6064,7 @@ do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "poppler/poppler-config.h") CONFIG_HEADERS="$CONFIG_HEADERS poppler/poppler-config.h:poppler-0.18.0/poppler/poppler-config.h.in" ;; + "poppler/poppler-config.h") CONFIG_HEADERS="$CONFIG_HEADERS poppler/poppler-config.h:poppler-0.18.4/poppler/poppler-config.h.in" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "poppler/Makefile") CONFIG_FILES="$CONFIG_FILES poppler/Makefile" ;; "goo/Makefile") CONFIG_FILES="$CONFIG_FILES goo/Makefile" ;; diff --git a/Build/source/libs/poppler/poppler-0.18.0-PATCHES/ChangeLog b/Build/source/libs/poppler/poppler-0.18.0-PATCHES/ChangeLog deleted file mode 100644 index 31926933ef4..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0-PATCHES/ChangeLog +++ /dev/null @@ -1,38 +0,0 @@ -2011-10-18 Peter Breitenlohner - - * patch-04-mingw (removed): Instead add `-lgdi32'. - -2011-10-11 Peter Breitenlohner - - * patch-04-mingw (new): Split off ... - * patch-01-PDF_PARSER_ONLY: ... from here. - -2011-10-10 Peter Breitenlohner - - * patch-03-POPPLER_VERSION: Reorg definition of POPPLER_VERSION. - -2011-10-08 Peter Breitenlohner - - Imported poppler-0.18.0 source tree from: - http://poppler.freedesktop.org/ - * patch-0[123]-*: Adapted. - -2011-04-14 Peter Breitenlohner - - * patch-01-PDF_PARSER_ONLY: Fix PDF_PARSER_ONLY for MinGW. - - * patch-03-POPPLER_VERSION (new): #define POPPLER_VERSION. - -2011-04-12 Peter Breitenlohner - - * patch-02-warnings (new): - poppler/Movie.cc: Cast -1 to Gulong. - goo/PNGWriter.h: Add newline at end of file. - -2011-04-12 Taco Hoekwater - - Imported poppler-0.12.4 source tree from: - http://poppler.freedesktop.org/ - - * patch-01-PDF_PARSER_ONLY (new): Implement PDF_PARSER_ONLY. - diff --git a/Build/source/libs/poppler/poppler-0.18.0-PATCHES/TL-Changes b/Build/source/libs/poppler/poppler-0.18.0-PATCHES/TL-Changes deleted file mode 100644 index 86309979a7a..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0-PATCHES/TL-Changes +++ /dev/null @@ -1,24 +0,0 @@ -Changes applied to the poppler-0.18.0 tree as obtained from: - http://poppler.freedesktop.org/ - -Removed: - config.guess - config.sub - depcomp - install-sh - ltmain.sh - missing - -Removed unused dirs: - cmake - cpp - glib - m4 - qt4 - splash - test - utils - -Removed execute permission: - goo/GooTimer.h - diff --git a/Build/source/libs/poppler/poppler-0.18.0-PATCHES/patch-01-PDF_PARSER_ONLY b/Build/source/libs/poppler/poppler-0.18.0-PATCHES/patch-01-PDF_PARSER_ONLY deleted file mode 100644 index 925a7f9eb31..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0-PATCHES/patch-01-PDF_PARSER_ONLY +++ /dev/null @@ -1,17 +0,0 @@ -diff -ur poppler-0.18.0.orig/poppler/Page.cc poppler-0.18.0/poppler/Page.cc ---- poppler-0.18.0.orig/poppler/Page.cc 2011-03-12 11:49:45.000000000 +0100 -+++ poppler-0.18.0/poppler/Page.cc 2011-10-07 20:07:46.000000000 +0200 -@@ -45,13 +45,11 @@ - #include "XRef.h" - #include "Link.h" - #include "OutputDev.h" --#ifndef PDF_PARSER_ONLY - #include "Gfx.h" - #include "GfxState.h" - #include "Annot.h" - #include "TextOutputDev.h" - #include "Form.h" --#endif - #include "Error.h" - #include "Page.h" - #include "Catalog.h" diff --git a/Build/source/libs/poppler/poppler-0.18.0-PATCHES/patch-02-warnings b/Build/source/libs/poppler/poppler-0.18.0-PATCHES/patch-02-warnings deleted file mode 100644 index 73c514909dd..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0-PATCHES/patch-02-warnings +++ /dev/null @@ -1,86 +0,0 @@ -diff -ur poppler-0.18.0.orig/poppler/Annot.cc poppler-0.18.0/poppler/Annot.cc ---- poppler-0.18.0.orig/poppler/Annot.cc 2011-08-25 23:25:21.000000000 +0200 -+++ poppler-0.18.0/poppler/Annot.cc 2011-10-07 20:45:57.000000000 +0200 -@@ -2643,7 +2643,7 @@ - y3 = quadrilaterals->getY3(i); - x4 = quadrilaterals->getX4(i); - y4 = quadrilaterals->getY4(i); -- h4 = abs(y1 - y3) / 4.0; -+ h4 = fabs(y1 - y3) / 4.0; - - appearBuf->appendf ("{0:.2f} {1:.2f} m\n", x3, y3); - appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", -diff -ur poppler-0.18.0.orig/poppler/GfxState.cc poppler-0.18.0/poppler/GfxState.cc ---- poppler-0.18.0.orig/poppler/GfxState.cc 2011-07-28 12:58:37.000000000 +0200 -+++ poppler-0.18.0/poppler/GfxState.cc 2011-10-07 20:52:53.000000000 +0200 -@@ -2997,7 +2997,7 @@ - - getParameterRange(&sMin, &sMax, xMin, yMin, xMax, yMax); - upperBound = ctm->norm() * getDistance(sMin, sMax); -- maxSize = ceil(upperBound); -+ maxSize = (int)ceil(upperBound); - maxSize = std::max(maxSize, 2); - - { -diff -ur poppler-0.18.0.orig/poppler/GfxState.h poppler-0.18.0/poppler/GfxState.h ---- poppler-0.18.0.orig/poppler/GfxState.h 2011-07-29 00:25:02.000000000 +0200 -+++ poppler-0.18.0/poppler/GfxState.h 2011-10-07 20:43:42.000000000 +0200 -@@ -100,7 +100,7 @@ - } - - static inline Guchar dblToByte(double x) { -- return (x * 255.0); -+ return (Guchar)(x * 255.0); - } - - static inline double byteToDbl(Guchar x) { -diff -ur poppler-0.18.0.orig/poppler/Hints.cc poppler-0.18.0/poppler/Hints.cc ---- poppler-0.18.0.orig/poppler/Hints.cc 2011-06-30 23:41:10.000000000 +0200 -+++ poppler-0.18.0/poppler/Hints.cc 2011-10-07 21:51:39.000000000 +0200 -@@ -413,7 +413,7 @@ - { - Guint bit, bits; - -- if (n < 0) return -1; -+ if (n < 0) return (Guint)-1; - if (n == 0) return 0; - - if (n == 1) -@@ -421,11 +421,11 @@ - - bit = (readBit(str) << (n-1)); - if (bit == (Guint) -1) -- return -1; -+ return (Guint)-1; - - bits = readBits(n-1, str); - if (bits == (Guint) -1) -- return -1; -+ return (Guint)-1; - - return bit | bits; - } -diff -ur poppler-0.18.0.orig/poppler/Lexer.cc poppler-0.18.0/poppler/Lexer.cc ---- poppler-0.18.0.orig/poppler/Lexer.cc 2010-07-16 00:43:51.000000000 +0200 -+++ poppler-0.18.0/poppler/Lexer.cc 2011-10-07 20:52:58.000000000 +0200 -@@ -215,7 +215,7 @@ - overflownUnsignedInteger = gTrue; - xf = xi * 10.0 + (c - '0'); - } else { -- xui = xi * 10.0 + (c - '0'); -+ xui = (unsigned int)(xi * 10.0 + (c - '0')); - } - } else { - xi = xi * 10 + (c - '0'); -diff -ur poppler-0.18.0.orig/poppler/Stream.cc poppler-0.18.0/poppler/Stream.cc ---- poppler-0.18.0.orig/poppler/Stream.cc 2011-07-19 00:17:56.000000000 +0200 -+++ poppler-0.18.0/poppler/Stream.cc 2011-10-07 20:52:50.000000000 +0200 -@@ -474,7 +474,7 @@ - } else if (nBits == 8) { - Guchar *line = imgLine; - int readChars = str->doGetChars(nVals, line); -- for ( ; readChars < nVals; readChars++) line[readChars] = EOF; -+ for ( ; readChars < nVals; readChars++) line[readChars] = (Guchar)EOF; - } else if (nBits == 16) { - // this is a hack to support 16 bits images, everywhere - // we assume a component fits in 8 bits, with this hack diff --git a/Build/source/libs/poppler/poppler-0.18.0-PATCHES/patch-03-POPPLER_VERSION b/Build/source/libs/poppler/poppler-0.18.0-PATCHES/patch-03-POPPLER_VERSION deleted file mode 100644 index c556ee45ace..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0-PATCHES/patch-03-POPPLER_VERSION +++ /dev/null @@ -1,15 +0,0 @@ -diff -ur poppler-0.18.0.orig/poppler/poppler-config.h.in poppler-0.18.0/poppler/poppler-config.h.in ---- poppler-0.18.0.orig/poppler/poppler-config.h.in 2011-09-27 00:24:08.000000000 +0200 -+++ poppler-0.18.0/poppler/poppler-config.h.in 2011-10-10 19:08:51.000000000 +0200 -@@ -14,6 +14,11 @@ - // around #undef look odd, but it's to silence warnings about - // redefining those symbols. - -+/* Define to the poppler version. */ -+#ifndef POPPLER_VERSION -+#undef POPPLER_VERSION -+#endif -+ - /* Enable multithreading support. */ - #ifndef MULTITHREADED - #undef MULTITHREADED diff --git a/Build/source/libs/poppler/poppler-0.18.0/AUTHORS b/Build/source/libs/poppler/poppler-0.18.0/AUTHORS deleted file mode 100644 index a785e403211..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/AUTHORS +++ /dev/null @@ -1,5 +0,0 @@ -xpdf is written by Derek Noonburg - -libpoppler is a fork of xpdf-3.00 - -Current Maintainer: Albert Astals Cid diff --git a/Build/source/libs/poppler/poppler-0.18.0/CMakeLists.txt b/Build/source/libs/poppler/poppler-0.18.0/CMakeLists.txt deleted file mode 100644 index 499ff23c432..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/CMakeLists.txt +++ /dev/null @@ -1,580 +0,0 @@ -project(poppler) - -cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR) - -set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules) - -include(PopplerDefaults) -include(PopplerMacros) -include(MacroOptionalFindPackage) -find_package(PkgConfig) -include(MacroEnsureVersion) -include(MacroBoolTo01) -find_package(Threads) -include(TestBigEndian) -test_big_endian(WORDS_BIGENDIAN) - -set(POPPLER_MAJOR_VERSION "0") -set(POPPLER_MINOR_VERSION "18") -set(POPPLER_MICRO_VERSION "0") -set(POPPLER_VERSION "${POPPLER_MAJOR_VERSION}.${POPPLER_MINOR_VERSION}.${POPPLER_MICRO_VERSION}") - -# command line switches -option(ENABLE_XPDF_HEADERS "Install unsupported xpdf headers." OFF) -option(BUILD_GTK_TESTS "Whether compile the GTK+ test programs." ON) -option(BUILD_QT4_TESTS "Whether compile the Qt4 test programs." ON) -option(BUILD_CPP_TESTS "Whether compile the CPP test programs." ON) -option(ENABLE_SPLASH "Build the Splash graphics backend." ON) -option(ENABLE_UTILS "Compile poppler command line utils." ON) -option(ENABLE_CPP "Compile poppler cpp wrapper." ON) -option(ENABLE_LIBOPENJPEG "Use libopenjpeg for JPX streams." ON) -option(ENABLE_LCMS "Use liblcms for color management." ON) -option(ENABLE_LIBCURL "Build libcurl based HTTP support." OFF) -option(ENABLE_ZLIB "Build with zlib (not totally safe)." OFF) -option(USE_FIXEDPOINT "Use fixed point arithmetic in the Splash backend" OFF) -option(USE_FLOAT "Use single precision arithmetic in the Splash backend" OFF) -if(WIN32) - option(ENABLE_RELOCATABLE "Hardcode the poppler library location (on Windows)." ON) -else(WIN32) - set(ENABLE_RELOCATABLE OFF) -endif(WIN32) - -set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)") - -if(WIN32) - set(_default_fontconfiguration "win32") -else(WIN32) - set(_default_fontconfiguration "fontconfig") -endif(WIN32) -set(FONT_CONFIGURATION "${_default_fontconfiguration}" CACHE STRING "The font configuration backend (win32|fontconfig).") -string(TOLOWER "${FONT_CONFIGURATION}" font_configuration) -set(WITH_FONTCONFIGURATION_WIN32 OFF) -set(WITH_FONTCONFIGURATION_FONTCONFIG OFF) -if(font_configuration STREQUAL "win32") - set(WITH_FONTCONFIGURATION_WIN32 ON) -elseif(font_configuration STREQUAL "fontconfig") - set(WITH_FONTCONFIGURATION_FONTCONFIG ON) -else(font_configuration STREQUAL "win32") - message(FATAL_ERROR "Invalid font configuration setting: ${FONT_CONFIGURATION}") -endif(font_configuration STREQUAL "win32") - -# Enable these unconditionally. -set(MULTITHREADED ON) -set(OPI_SUPPORT ON) -set(TEXTOUT_WORD_LIST ON) - -# setting the minimum required versions for some components -set(QT4_MIN_VERSION "4.4.0") -set(CAIRO_VERSION "1.10.0") -set(GLIB_REQUIRED "2.18") - -macro_bool_to_01(ENABLE_SPLASH HAVE_SPLASH) -find_package(Freetype REQUIRED) -if(WITH_FONTCONFIGURATION_FONTCONFIG) - find_package(Fontconfig REQUIRED) -endif(WITH_FONTCONFIGURATION_FONTCONFIG) -macro_optional_find_package(JPEG) -macro_optional_find_package(PNG) -macro_optional_find_package(TIFF) -if(JPEG_FOUND) - set(ENABLE_LIBJPEG ${JPEG_FOUND}) -endif(JPEG_FOUND) -macro_optional_find_package(Qt4) -macro_optional_find_package(Cairo ${CAIRO_VERSION}) -if(CAIRO_FOUND) - set(HAVE_CAIRO ${CAIRO_FOUND}) - set(CAIRO_FEATURE "#define POPPLER_HAS_CAIRO 1") - set(CAIRO_REQ "cairo") - set(POPPLER_GLIB_DISABLE_DEPRECATED "") - set(POPPLER_GLIB_DISABLE_SINGLE_INCLUDES "") - macro_optional_find_package(GLIB) - if(GLIB_FOUND) - set(ENABLE_GLIB ON) - # Check for introspection - macro_optional_find_package(GObjectIntrospection 0.9.12) - set(HAVE_INTROSPECTION ${INTROSPECTION_FOUND}) - set(GLIB_REQ "glib-2.0 >= ${GLIB_REQUIRED} gobject-2.0 >= ${GLIB_REQUIRED} cairo >= ${CAIRO_VERSION}") - set(POPPLER_GLIB_DISABLE_DEPRECATED "${POPPLER_GLIB_DISABLE_DEPRECATED} -DG_DISABLE_DEPRECATED") - set(POPPLER_GLIB_DISABLE_SINGLE_INCLUDES "${POPPLER_GLIB_DISABLE_SINGLE_INCLUDES} -DG_DISABLE_SINGLE_INCLUDES") - macro_optional_find_package(GTK) - endif(GLIB_FOUND) -else(CAIRO_FOUND) - set(CAIRO_FEATURE "#undef POPPLER_HAS_CAIRO") -endif(CAIRO_FOUND) -if(ENABLE_CPP) - macro_optional_find_package(Iconv) - set(ENABLE_CPP ${ICONV_FOUND}) - set(HAVE_ICONV ${ICONV_FOUND}) -endif(ENABLE_CPP) -if(ENABLE_ZLIB) - find_package(ZLIB) - if(ZLIB_FOUND) - set(HAVE_LIBZ ${ZLIB_FOUND}) - endif(ZLIB_FOUND) - set(ENABLE_ZLIB ${ZLIB_FOUND}) -endif(ENABLE_ZLIB) -if(ENABLE_LIBOPENJPEG) - find_package(LIBOPENJPEG) - set(ENABLE_LIBOPENJPEG ${LIBOPENJPEG_FOUND}) - set(HAVE_OPENJPEG_H ON) -endif(ENABLE_LIBOPENJPEG) -if(ENABLE_LCMS) - find_package(LCMS) - set(USE_CMS ${LCMS_FOUND}) -endif(ENABLE_LCMS) -if(ENABLE_LIBCURL) - find_package(CURL) - include_directories(${CURL_INCLUDE_DIR}) - set(POPPLER_HAS_CURL_SUPPORT ON) -endif(ENABLE_LIBCURL) - -add_definitions(-DHAVE_CONFIG_H=1) -if(FONTCONFIG_FOUND) - add_definitions(${FONTCONFIG_DEFINITIONS}) -endif(FONTCONFIG_FOUND) -if(WITH_FONTCONFIGURATION_WIN32) - if(MINGW) - # Set the minimum required Internet Explorer version to 5.0 - add_definitions(-D_WIN32_IE=0x0500) - endif(MINGW) -endif(WITH_FONTCONFIGURATION_WIN32) -include_directories( - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/fofi - ${CMAKE_CURRENT_SOURCE_DIR}/goo - ${CMAKE_CURRENT_SOURCE_DIR}/poppler - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_BINARY_DIR}/poppler - ${FREETYPE_INCLUDE_DIRS} -) -set(HAVE_FREETYPE_H ON) -if(CMAKE_USE_PTHREADS_INIT) - set(HAVE_PTHREAD ON) -endif(CMAKE_USE_PTHREADS_INIT) - -if(ENABLE_ZLIB) - include_directories(${ZLIB_INCLUDE_DIR}) -endif(ENABLE_ZLIB) -if(JPEG_FOUND) - include_directories(${JPEG_INCLUDE_DIR}) - set(ENABLE_LIBJPEG ON) -endif(JPEG_FOUND) -if(PNG_FOUND) - include_directories(${PNG_INCLUDE_DIR}) - set(ENABLE_LIBPNG ON) -endif(PNG_FOUND) -if(TIFF_FOUND) - include_directories(${TIFF_INCLUDE_DIR}) - set(ENABLE_LIBTIFF ON) -endif(TIFF_FOUND) -if(LIBOPENJPEG_FOUND) - include_directories(${LIBOPENJPEG_INCLUDE_DIR}) -endif(LIBOPENJPEG_FOUND) -if(LCMS_FOUND) - include_directories(${LCMS_INCLUDE_DIR}) -endif(LCMS_FOUND) - -if(DEFINED COMPILE_WARNINGS) -else(DEFINED COMPILE_WARNINGS) - set(COMPILE_WARNINGS "yes") -endif(DEFINED COMPILE_WARNINGS) -string(TOLOWER "${COMPILE_WARNINGS}" _comp_warnings) -if(_comp_warnings STREQUAL "no") - set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS_NO} ${CMAKE_CXX_FLAGS}") -endif(_comp_warnings STREQUAL "no") -if(_comp_warnings STREQUAL "yes") - set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS_YES} ${CMAKE_CXX_FLAGS}") -endif(_comp_warnings STREQUAL "yes") -if(_comp_warnings STREQUAL "kde") - set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS_KDE} ${CMAKE_CXX_FLAGS}") -endif(_comp_warnings STREQUAL "kde") - - -include(ConfigureChecks.cmake) -configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) -configure_file(poppler/poppler-config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h) - - -set(poppler_SRCS - goo/gfile.cc - goo/gmempp.cc - goo/GooHash.cc - goo/GooList.cc - goo/GooTimer.cc - goo/GooString.cc - goo/gmem.cc - goo/FixedPoint.cc - goo/PNGWriter.cc - goo/TiffWriter.cc - goo/JpegWriter.cc - goo/ImgWriter.cc - goo/gstrtod.cc - fofi/FoFiBase.cc - fofi/FoFiEncodings.cc - fofi/FoFiTrueType.cc - fofi/FoFiType1.cc - fofi/FoFiType1C.cc - poppler/Annot.cc - poppler/Array.cc - poppler/BuiltinFont.cc - poppler/BuiltinFontTables.cc - poppler/CachedFile.cc - poppler/Catalog.cc - poppler/CharCodeToUnicode.cc - poppler/CMap.cc - poppler/DateInfo.cc - poppler/Decrypt.cc - poppler/Dict.cc - poppler/Error.cc - poppler/FileSpec.cc - poppler/FontEncodingTables.cc - poppler/Form.cc - poppler/FontInfo.cc - poppler/Function.cc - poppler/Gfx.cc - poppler/GfxFont.cc - poppler/GfxState.cc - poppler/GlobalParams.cc - poppler/Hints.cc - poppler/JArithmeticDecoder.cc - poppler/JBIG2Stream.cc - poppler/Lexer.cc - poppler/Link.cc - poppler/Linearization.cc - poppler/LocalPDFDocBuilder.cc - poppler/NameToCharCode.cc - poppler/Object.cc - poppler/OptionalContent.cc - poppler/Outline.cc - poppler/OutputDev.cc - poppler/Page.cc - poppler/PageTransition.cc - poppler/Parser.cc - poppler/PDFDoc.cc - poppler/PDFDocEncoding.cc - poppler/PDFDocFactory.cc - poppler/PopplerCache.cc - poppler/ProfileData.cc - poppler/PreScanOutputDev.cc - poppler/PSTokenizer.cc - poppler/Stream.cc - poppler/strtok_r.cpp - poppler/UnicodeMap.cc - poppler/UnicodeTypeTable.cc - poppler/XRef.cc - poppler/PSOutputDev.cc - poppler/TextOutputDev.cc - poppler/PageLabelInfo.cc - poppler/SecurityHandler.cc - poppler/StdinCachedFile.cc - poppler/StdinPDFDocBuilder.cc - poppler/Sound.cc - poppler/ViewerPreferences.cc - poppler/XpdfPluginAPI.cc - poppler/Movie.cc - poppler/Rendition.cc -) -set(poppler_LIBS ${FREETYPE_LIBRARIES}) -if(ENABLE_SPLASH) - set(poppler_SRCS ${poppler_SRCS} - poppler/SplashOutputDev.cc - splash/Splash.cc - splash/SplashBitmap.cc - splash/SplashClip.cc - splash/SplashFTFont.cc - splash/SplashFTFontEngine.cc - splash/SplashFTFontFile.cc - splash/SplashFont.cc - splash/SplashFontEngine.cc - splash/SplashFontFile.cc - splash/SplashFontFileID.cc - splash/SplashPath.cc - splash/SplashPattern.cc - splash/SplashScreen.cc - splash/SplashState.cc - splash/SplashT1Font.cc - splash/SplashT1FontEngine.cc - splash/SplashT1FontFile.cc - splash/SplashXPath.cc - splash/SplashXPathScanner.cc - ) -endif(ENABLE_SPLASH) -if(FONTCONFIG_FOUND) - set(poppler_LIBS ${poppler_LIBS} ${FONTCONFIG_LIBRARIES}) -endif(FONTCONFIG_FOUND) -if(JPEG_FOUND) - set(poppler_SRCS ${poppler_SRCS} - poppler/DCTStream.cc - ) - set(poppler_LIBS ${poppler_LIBS} ${JPEG_LIBRARIES}) -endif(JPEG_FOUND) -if(ENABLE_ZLIB) - set(poppler_SRCS ${poppler_SRCS} - poppler/FlateStream.cc - ) - set(poppler_LIBS ${poppler_LIBS} ${ZLIB_LIBRARIES}) -endif(ENABLE_ZLIB) -if(ENABLE_LIBCURL) - set(poppler_SRCS ${poppler_SRCS} - poppler/CurlCachedFile.cc - poppler/CurlPDFDocBuilder.cc - ) - set(poppler_LIBS ${poppler_LIBS} ${CURL_LIBRARIES}) -endif(ENABLE_LIBCURL) -if(LIBOPENJPEG_FOUND) - set(poppler_SRCS ${poppler_SRCS} - poppler/JPEG2000Stream.cc - ) - set(poppler_LIBS ${poppler_LIBS} ${LIBOPENJPEG_LIBRARIES}) -else (LIBOPENJPEG_FOUND) - set(poppler_SRCS ${poppler_SRCS} - poppler/JPXStream.cc - ) -endif(LIBOPENJPEG_FOUND) -if(USE_CMS) - set(poppler_LIBS ${poppler_LIBS} ${LCMS_LIBRARIES}) -endif(USE_CMS) -if(WIN32) - # gdi32 is needed under win32 - set(poppler_LIBS ${poppler_LIBS} gdi32) -endif(WIN32) -if(PNG_FOUND) - set(poppler_LIBS ${poppler_LIBS} ${PNG_LIBRARIES}) -endif(PNG_FOUND) -if(TIFF_FOUND) - set(poppler_LIBS ${poppler_LIBS} ${TIFF_LIBRARIES}) -endif(TIFF_FOUND) - -if(MSVC) -add_definitions(-D_CRT_SECURE_NO_WARNINGS) -add_library(poppler STATIC ${poppler_SRCS}) -else(MSVC) -add_library(poppler SHARED ${poppler_SRCS}) -endif(MSVC) -set_target_properties(poppler PROPERTIES VERSION 18.0.0 SOVERSION 18) -target_link_libraries(poppler ${poppler_LIBS}) -target_link_libraries(poppler LINK_INTERFACE_LIBRARIES "") -install(TARGETS poppler RUNTIME DESTINATION bin LIBRARY DESTINATION lib${LIB_SUFFIX} ARCHIVE DESTINATION lib${LIB_SUFFIX}) - -if(ENABLE_XPDF_HEADERS) - install(FILES - poppler/Annot.h - poppler/Array.h - poppler/BuiltinFont.h - poppler/BuiltinFontTables.h - poppler/CachedFile.h - poppler/Catalog.h - poppler/CharCodeToUnicode.h - poppler/CMap.h - poppler/DateInfo.h - poppler/Decrypt.h - poppler/Dict.h - poppler/Error.h - poppler/FileSpec.h - poppler/FontEncodingTables.h - poppler/FontInfo.h - poppler/Form.h - poppler/Function.cc - poppler/Function.h - poppler/Gfx.h - poppler/GfxFont.h - poppler/GfxState.h - poppler/GfxState_helpers.h - poppler/GlobalParams.h - poppler/Hints.h - poppler/JArithmeticDecoder.h - poppler/JBIG2Stream.h - poppler/Lexer.h - poppler/Link.h - poppler/Linearization.h - poppler/LocalPDFDocBuilder.h - poppler/Movie.h - poppler/NameToCharCode.h - poppler/Object.h - poppler/OptionalContent.h - poppler/Outline.h - poppler/OutputDev.h - poppler/Page.h - poppler/PageTransition.h - poppler/Parser.h - poppler/PDFDoc.h - poppler/PDFDocBuilder.h - poppler/PDFDocEncoding.h - poppler/PDFDocFactory.h - poppler/PopplerCache.h - poppler/ProfileData.h - poppler/PreScanOutputDev.h - poppler/PSTokenizer.h - poppler/Rendition.h - poppler/Stream-CCITT.h - poppler/Stream.h - poppler/UnicodeMap.h - poppler/UnicodeMapTables.h - poppler/UnicodeTypeTable.h - poppler/UnicodeCClassTables.h - poppler/UnicodeCompTables.h - poppler/UnicodeDecompTables.h - poppler/ViewerPreferences.h - poppler/XRef.h - poppler/CharTypes.h - poppler/CompactFontTables.h - poppler/ErrorCodes.h - poppler/NameToUnicodeTable.h - poppler/PSOutputDev.h - poppler/TextOutputDev.h - poppler/SecurityHandler.h - poppler/StdinCachedFile.h - poppler/StdinPDFDocBuilder.h - poppler/UTF8.h - poppler/XpdfPluginAPI.h - poppler/Sound.h - ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h - DESTINATION include/poppler) - install(FILES - goo/GooHash.h - goo/GooList.h - goo/GooTimer.h - goo/GooMutex.h - goo/GooString.h - goo/gtypes.h - goo/gmem.h - goo/gfile.h - goo/FixedPoint.h - goo/ImgWriter.h - goo/GooLikely.h - goo/gstrtod.h - DESTINATION include/poppler/goo) - if(PNG_FOUND) - install(FILES - goo/PNGWriter.h - DESTINATION include/poppler/goo) - endif(PNG_FOUND) - if(TIFF_FOUND) - install(FILES - goo/TiffWriter.h - DESTINATION include/poppler/goo) - endif(TIFF_FOUND) - install(FILES - fofi/FoFiBase.h - fofi/FoFiEncodings.h - fofi/FoFiTrueType.h - fofi/FoFiType1.h - fofi/FoFiType1C.h - DESTINATION include/poppler/fofi) - if(ENABLE_LIBCURL) - install(FILES - poppler/CurlCachedFile.h - poppler/CurlPDFDocBuilder.h - DESTINATION include/poppler) - endif(ENABLE_LIBCURL) - if(LIBOPENJPEG_FOUND) - install(FILES - poppler/JPEG2000Stream.h - DESTINATION include/poppler) - install(FILES - goo/JpegWriter.h - DESTINATION include/poppler/goo) - else(LIBOPENJPEG_FOUND) - install(FILES - poppler/JPXStream.h - DESTINATION include/poppler) - endif(LIBOPENJPEG_FOUND) - if(ENABLE_SPLASH) - install(FILES - poppler/SplashOutputDev.h - DESTINATION include/poppler) - install(FILES - splash/Splash.h - splash/SplashBitmap.h - splash/SplashClip.h - splash/SplashErrorCodes.h - splash/SplashFTFont.h - splash/SplashFTFontEngine.h - splash/SplashFTFontFile.h - splash/SplashFont.h - splash/SplashFontEngine.h - splash/SplashFontFile.h - splash/SplashFontFileID.h - splash/SplashGlyphBitmap.h - splash/SplashMath.h - splash/SplashPath.h - splash/SplashPattern.h - splash/SplashScreen.h - splash/SplashState.h - splash/SplashT1Font.h - splash/SplashT1FontEngine.h - splash/SplashT1FontFile.h - splash/SplashTypes.h - splash/SplashXPath.h - splash/SplashXPathScanner.h - DESTINATION include/poppler/splash) - endif(ENABLE_SPLASH) -endif(ENABLE_XPDF_HEADERS) - - -if(ENABLE_UTILS) - add_subdirectory(utils) -endif(ENABLE_UTILS) -if(ENABLE_GLIB) - add_subdirectory(glib) -endif(ENABLE_GLIB) -add_subdirectory(test) -if(QT4_FOUND) - add_subdirectory(qt4) -endif(QT4_FOUND) -if(ENABLE_CPP) - add_subdirectory(cpp) -endif(ENABLE_CPP) - -set(PKG_CONFIG_VERSION_0_18 TRUE) -if(PKG_CONFIG_EXECUTABLE) - exec_program(${PKG_CONFIG_EXECUTABLE} ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _output_VAR) - macro_ensure_version("0.18" "${_output_VAR}" PKG_CONFIG_VERSION_0_18) -endif(PKG_CONFIG_EXECUTABLE) -if(PKG_CONFIG_VERSION_0_18) - set(PC_REQUIRES "") - set(PC_REQUIRES_PRIVATE "Requires.private: poppler = ${POPPLER_VERSION}") -else(PKG_CONFIG_VERSION_0_18) - set(PC_REQUIRES "poppler = ${POPPLER_VERSION}") - set(PC_REQUIRES_PRIVATE "") -endif(PKG_CONFIG_VERSION_0_18) - -poppler_create_install_pkgconfig(poppler.pc lib${LIB_SUFFIX}/pkgconfig) -if(ENABLE_SPLASH) - poppler_create_install_pkgconfig(poppler-splash.pc lib${LIB_SUFFIX}/pkgconfig) -endif(ENABLE_SPLASH) -if(QT4_FOUND) - poppler_create_install_pkgconfig(poppler-qt4.pc lib${LIB_SUFFIX}/pkgconfig) -endif(QT4_FOUND) -if(ENABLE_GLIB) - poppler_create_install_pkgconfig(poppler-glib.pc lib${LIB_SUFFIX}/pkgconfig) -endif(ENABLE_GLIB) -if(CAIRO_FOUND) - poppler_create_install_pkgconfig(poppler-cairo.pc lib${LIB_SUFFIX}/pkgconfig) -endif(CAIRO_FOUND) -if(ENABLE_CPP) - poppler_create_install_pkgconfig(poppler-cpp.pc lib${LIB_SUFFIX}/pkgconfig) -endif(ENABLE_CPP) - - -message("Building Poppler with support for:") -show_end_message("font configuration" ${font_configuration}) -show_end_message_yesno("splash output" ENABLE_SPLASH) -show_end_message_yesno("cairo output" CAIRO_FOUND) -show_end_message_yesno("qt4 wrapper" QT4_FOUND) -show_end_message_yesno("glib wrapper" ENABLE_GLIB) -show_end_message_yesno(" introspection" INTROSPECTION_FOUND) -show_end_message_yesno("cpp wrapper" ENABLE_CPP) -show_end_message("use gtk-doc" "not supported with this CMake build system") -show_end_message_yesno("use libjpeg" ENABLE_LIBJPEG) -show_end_message_yesno("use libpng" ENABLE_LIBPNG) -show_end_message_yesno("use libtiff" ENABLE_LIBTIFF) -show_end_message_yesno("use zlib" ENABLE_ZLIB) -show_end_message_yesno("use curl" ENABLE_LIBCURL) -show_end_message_yesno("use libopenjpeg" LIBOPENJPEG_FOUND) -show_end_message_yesno("use cms" USE_CMS) -show_end_message_yesno("command line utils" ENABLE_UTILS) - -if(USE_FIXEDPOINT AND USE_FLOAT) - message("Warning: Single precision and fixed point options should not be enabled at the same time") -endif(USE_FIXEDPOINT AND USE_FLOAT) diff --git a/Build/source/libs/poppler/poppler-0.18.0/COPYING b/Build/source/libs/poppler/poppler-0.18.0/COPYING deleted file mode 100644 index d511905c164..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/Build/source/libs/poppler/poppler-0.18.0/ChangeLog b/Build/source/libs/poppler/poppler-0.18.0/ChangeLog deleted file mode 100644 index e71d29c2682..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/ChangeLog +++ /dev/null @@ -1,37227 +0,0 @@ -commit 19f5db7acd64330d198f18695175df02141794d7 -Author: Albert Astals Cid -Date: Tue Sep 27 00:15:15 2011 +0200 - - Update Carlos (C) year - - poppler/Gfx.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 6d34d4af90b8b41360de4dabb000bbcc894775d0 -Author: Albert Astals Cid -Date: Tue Sep 27 00:09:54 2011 +0200 - - Rename pdfmerge and pdfextract - - To pdfunite and pdfseparate, the old names were taken - - utils/.gitignore | 4 +- - utils/CMakeLists.txt | 28 ++++---- - utils/Makefile.am | 16 ++-- - utils/pdfextract.1 | 49 -------------- - utils/pdfextract.cc | 115 -------------------------------- - utils/pdfmerge.1 | 33 --------- - utils/pdfmerge.cc | 176 - -------------------------------------------------- - utils/pdfseparate.1 | 49 ++++++++++++++ - utils/pdfseparate.cc | 115 ++++++++++++++++++++++++++++++++ - utils/pdfunite.1 | 33 +++++++++ - utils/pdfunite.cc | 176 - ++++++++++++++++++++++++++++++++++++++++++++++++++ - 11 files changed, 397 insertions(+), 397 deletions(-) - -commit baf54c2876edd476ffc68da6518598847bb7ec8a -Author: Albert Astals Cid -Date: Mon Sep 26 15:54:46 2011 +0200 - - Remove getRawStream - - Since it does exactly the same as getNextStream - - poppler/DCTStream.h | 1 - - poppler/Stream.h | 1 - - utils/HtmlOutputDev.cc | 7 ++----- - utils/ImageOutputDev.cc | 9 +++------ - 4 files changed, 5 insertions(+), 13 deletions(-) - -commit 69707f0a9b5a94c80817039db943fb4f26e743e3 -Author: Adrian Johnson -Date: Mon Sep 19 22:00:34 2011 +0930 - - Update .gitignore - - regtest/.gitignore | 1 + - utils/.gitignore | 2 ++ - 2 files changed, 3 insertions(+), 0 deletions(-) - -commit 0de477817e424078cfcfcae114e7745809f0848d -Author: Adrian Johnson -Date: Mon Sep 19 21:57:07 2011 +0930 - - utils: Add Glyph & Cog copyright to pdfmerge and pdfextract man pages - - utils/pdfextract.1 | 3 ++- - utils/pdfmerge.1 | 3 ++- - 2 files changed, 4 insertions(+), 2 deletions(-) - -commit ce7372db64ee807dc2b491e121fbe557dbf697e8 -Author: Adrian Johnson -Date: Mon Sep 19 22:04:27 2011 +0930 - - regtest: render cairo at 72ppi - - For consistency with splash. It is faster and easier to compare with - splash results. - - regtest/backends/cairo.py | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 6cf7330089c4dcc1099906d9c37c3607a2a1eeba -Author: Carlos Garcia Campos -Date: Mon Sep 19 18:42:35 2011 +0200 - - regtest: Ignore checksums of crashed, failed and stderr files - - They shouldn't have a checksum, but it might happen with md5 files - generated with previous versions. - - regtest/backends/__init__.py | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 6512bf1c5dab37058460882fec3407b396830981 -Author: Albert Astals Cid -Date: Sun Sep 18 18:38:32 2011 +0200 - - Render at 72 instead of 150, it's faster :D - - regtest/backends/splash.py | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit b828f63ed3896a22f3fe7ddbe2ec2f549d7a2c62 -Author: Albert Astals Cid -Date: Sun Sep 18 18:20:47 2011 +0200 - - install pdfextract and pdfmerge manpages - - utils/CMakeLists.txt | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 986759dfbe85998c85ee9b0825c7522395567531 -Author: Thomas Freitag -Date: Sun Sep 18 18:19:30 2011 +0200 - - pdfextract and pdfmerge man pages - - utils/Makefile.am | 2 ++ - utils/pdfextract.1 | 48 - ++++++++++++++++++++++++++++++++++++++++++++++++ - utils/pdfmerge.1 | 32 ++++++++++++++++++++++++++++++++ - 3 files changed, 82 insertions(+), 0 deletions(-) - -commit 90da1af542fd7f3cecef31b15da6971345b38209 -Author: Thomas Freitag -Date: Sun Sep 18 18:19:04 2011 +0200 - - Complain if %d is not present and it should - - utils/pdfextract.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 40e066a84ddb3a5c41805c095659af5f5704d6d8 -Author: suzuki toshiya -Date: Sun Sep 18 18:16:14 2011 +0200 - - qt_subdir is unneeded - - Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit e23f6b9cade804136bd4bb58182f4fe0b072fbf2 -Author: Carlos Garcia Campos -Date: Sun Sep 18 16:27:50 2011 +0200 - - regtest: Do not create checksums for crashed, failed and stderr files - - regtest/backends/__init__.py | 12 +++++++++++- - 1 files changed, 11 insertions(+), 1 deletions(-) - -commit 110b8be1d9f2694b42bd12dcb6af02bfca9866dd -Author: Carlos Garcia Campos -Date: Sun Sep 18 16:26:58 2011 +0200 - - Fix memory leak - - poppler/Gfx.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 12c6239ca4f1f6a5de72aebd755f9d1354ea5837 -Author: Carlos Garcia Campos -Date: Sun Sep 18 11:08:06 2011 +0200 - - regtest: Fix checksum check for tests containing spaces in filename - - regtest/backends/__init__.py | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 93ba92db0a3af35f197a4faa5a528af98ea0f624 -Author: Albert Astals Cid -Date: Wed Sep 14 00:58:44 2011 +0200 - - Make it work with Python3 - - regtest/Config.py | 4 ++-- - regtest/TestReferences.py | 8 ++++---- - regtest/TestRun.py | 32 ++++++++++++++++---------------- - regtest/Timer.py | 8 ++++---- - regtest/backends/__init__.py | 12 ++++++------ - regtest/commands/__init__.py | 6 +++--- - regtest/commands/create-refs.py | 2 +- - regtest/commands/run-tests.py | 2 +- - regtest/main.py | 2 +- - 9 files changed, 38 insertions(+), 38 deletions(-) - -commit da1b5437148e1e6317246b16f7235c8bc280be97 -Author: Carlos Garcia Campos -Date: Tue Sep 13 20:09:56 2011 +0200 - - regtest: Add a way to skip files - - A new command line option --skip has been added to give a file - with the - list of test to skip. When --skip is not used, it look for a file - named - Skipped in the tests dir. Lines starting with '#' are considered - comments and are ignored. - - regtest/TestReferences.py | 9 +++++++-- - regtest/TestRun.py | 9 +++++++-- - regtest/Utils.py | 20 ++++++++++++++++++++ - regtest/main.py | 6 +++++- - 4 files changed, 39 insertions(+), 5 deletions(-) - -commit b730b2c1d9666f62f940762663c8318e64049d61 -Author: Carlos Garcia Campos -Date: Tue Sep 13 19:04:04 2011 +0200 - - regtest: Limit the number of arguments to 1 - - It's easier to run poppler-regtest more than once if you need to run - different tests. - - regtest/commands/create-refs.py | 24 ++++++++++++------------ - regtest/commands/run-tests.py | 26 +++++++++++++------------- - regtest/main.py | 2 +- - 3 files changed, 26 insertions(+), 26 deletions(-) - -commit 5ce045d0358318859c844340c639483485b69c58 -Author: Carlos Garcia Campos -Date: Tue Sep 13 18:18:21 2011 +0200 - - regtest: Sort tests before create-refs/run-tests and show progress - - regtest/TestReferences.py | 20 ++++++++------------ - regtest/TestRun.py | 21 ++++++++++----------- - regtest/Utils.py | 35 +++++++++++++++++++++++++++++++++++ - 3 files changed, 53 insertions(+), 23 deletions(-) - -commit 10801b6faee9037af054fe74cc4a03620ea41d45 -Author: Carlos Garcia Campos -Date: Mon Sep 12 20:13:17 2011 +0200 - - Add initial poppler regressions test program - - regtest/Config.py | 32 ++++++ - regtest/TestReferences.py | 73 +++++++++++++ - regtest/TestRun.py | 156 +++++++++++++++++++++++++++ - regtest/Timer.py | 73 +++++++++++++ - regtest/backends/__init__.py | 220 - +++++++++++++++++++++++++++++++++++++++ - regtest/backends/cairo.py | 39 +++++++ - regtest/backends/postscript.py | 35 ++++++ - regtest/backends/splash.py | 39 +++++++ - regtest/backends/text.py | 48 +++++++++ - regtest/commands/__init__.py | 93 ++++++++++++++++ - regtest/commands/create-refs.py | 65 ++++++++++++ - regtest/commands/run-tests.py | 69 ++++++++++++ - regtest/main.py | 77 ++++++++++++++ - regtest/poppler-regtest | 6 + - 14 files changed, 1025 insertions(+), 0 deletions(-) - -commit 245e331a14e11a615bf47abbeb34a3561e393b41 -Author: Albert Astals Cid -Date: Mon Sep 12 13:43:49 2011 +0200 - - 0.17.4 - - CMakeLists.txt | 2 +- - NEWS | 5 +++++ - configure.ac | 2 +- - cpp/Doxyfile | 2 +- - qt4/src/Doxyfile | 2 +- - 5 files changed, 9 insertions(+), 4 deletions(-) - -commit 194b2413eb2c6a1641508aec63336aaf89ec3b51 -Author: Albert Astals Cid -Date: Mon Sep 12 13:43:35 2011 +0200 - - gir 0.18 - - glib/CMakeLists.txt | 12 ++++++------ - glib/Makefile.am | 12 ++++++------ - 2 files changed, 12 insertions(+), 12 deletions(-) - -commit bf2cb5c9c47b4a61192101f0a48771657228e383 -Author: Adrian Johnson -Date: Tue Aug 30 19:08:40 2011 +0930 - - Fix compile error with libpng >= 1.5.0 - - libpng 1.5.0 changed one of the types in the png_set_iCCP() function - prototype. - - goo/PNGWriter.cc | 9 ++++++++- - 1 files changed, 8 insertions(+), 1 deletions(-) - -commit 0ca5453fea9e5342188f772acd6f31af1778f236 -Author: Albert Astals Cid -Date: Tue Aug 30 16:20:17 2011 +0200 - - Compile when defining USE_FIXEDPOINT - - splash/Splash.cc | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit bd7a53bc2f27fc3979f8de306e2dcaca53d4570a -Author: Albert Astals Cid -Date: Tue Aug 30 16:20:08 2011 +0200 - - match function definition - - poppler/SplashOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 508517a35cb3bc5195682a9cd89fb50a801eddc2 -Author: Albert Astals Cid -Date: Mon Aug 29 23:55:42 2011 +0200 - - 0.17.3 - - CMakeLists.txt | 4 ++-- - NEWS | 32 ++++++++++++++++++++++++++++++++ - configure.ac | 2 +- - cpp/Doxyfile | 2 +- - glib/CMakeLists.txt | 2 +- - glib/Makefile.am | 2 +- - poppler/Makefile.am | 2 +- - qt4/src/CMakeLists.txt | 2 +- - qt4/src/Doxyfile | 2 +- - qt4/src/Makefile.am | 2 +- - 10 files changed, 42 insertions(+), 10 deletions(-) - -commit 1431564f3363a63a8669c8dd15970db814f4969f -Author: Thomas Freitag -Date: Mon Aug 29 22:22:02 2011 +0200 - - Add pdfextract and pdfmerge - - See "Creating PDF with poppler ?" thread for more info - - utils/CMakeLists.txt | 15 ++++ - utils/Makefile.am | 10 +++ - utils/pdfextract.cc | 111 +++++++++++++++++++++++++++++++ - utils/pdfmerge.cc | 176 - ++++++++++++++++++++++++++++++++++++++++++++++++++ - 4 files changed, 312 insertions(+), 0 deletions(-) - -commit 8ca2f41089bc6402baf9b24428af04314c037b54 -Author: Thomas Freitag -Date: Mon Aug 29 22:20:52 2011 +0200 - - Rework writing of PDF files - - Makes it more compatible with other PDF readers - See "Creating PDF with poppler ?" thread in the mailing list for - more info - - poppler/PDFDoc.cc | 389 - +++++++++++++++++++++++++++++++++++++++++++++++------ - poppler/PDFDoc.h | 30 ++++- - 2 files changed, 375 insertions(+), 44 deletions(-) - -commit 33da7e270431e8e4c500e7573b3ca0dddd9f237e -Author: suzuki toshiya -Date: Sun Aug 28 22:07:38 2011 +0200 - - Fix building static-linked pdftocairo - - utils/Makefile.am | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit 91fafce028ca6620c0eb22e370fb4c6fd3404e3c -Author: Adrian Johnson -Date: Tue Aug 23 21:02:02 2011 +0930 - - cairo: align strokes when Stroke Adjust is true and line width <= 1 - - If the stroke coordinates are not aligned, lines in cairo may be up to - 1 pixel wider than the requested width. This is most obvious when the - line width is 1 and the rendered line is 2 pixels. - - When Stroke Adjust is true, the PDF standard requires that stroke - coordinates be adjusted to ensure the stroke width is within half a - pixel of the requested width. - - If Stroke Adjust is enabled and the width is <= 1 pixel (the previous - commit adjusts the width to be at least 1 pixel), use the method - documented at http://www.cairographics.org/FAQ/#sharp_lines to align - the coordinates to ensure the rendered width is 1 pixel. - - Fixes bug #4536. - - poppler/CairoOutputDev.cc | 40 +++++++++++++++++++++++++++++++++++----- - poppler/CairoOutputDev.h | 3 +++ - 2 files changed, 38 insertions(+), 5 deletions(-) - -commit cfc67afe80b963ba662018674cadf3085466bb9f -Author: Adrian Johnson -Date: Tue Aug 23 20:46:24 2011 +0930 - - cairo: fix stroking of very thin lines - - Lines with a width less than 1.0 are almost invisible in cairo output - due to antialising. The PDF standard states that when the Stroke - Adjust graphics parameter is true, all lines must be at least one - pixel wide. - - Add a stroke_adjust flag to the CairoOuputDev. Like splash, use the - globalParam strokeAdjust setting (which defaults to true) to - initialize the flag and ignore the Stroke Adjust settng in PDF - files. This emulates Acrobat behavior. - - When stroke_adjust is true, find the line width in device pixels and - if less than 0.5 set the line width to 0.5 device pixels. The value - 0.5 pixels seems to make horizontal and vertical lines look better - because integer aligned 1.0 wide lines in cairo are rendered two - pixels wide which looks too fat. - - poppler/CairoOutputDev.cc | 20 +++++++++++++++++++- - poppler/CairoOutputDev.h | 1 + - 2 files changed, 20 insertions(+), 1 deletions(-) - -commit 7a7c932e09796b944dda69df1b339c889ee1d63a -Author: Albert Astals Cid -Date: Thu Aug 25 00:23:40 2011 +0200 - - Add a way to get the fully qualified name - - qt4/src/poppler-form.cc | 12 +++++++++++- - qt4/src/poppler-form.h | 8 +++++++- - 2 files changed, 18 insertions(+), 2 deletions(-) - -commit e001871d927f9cc86b4327d64e4c66ad00172ad0 -Author: Albert Astals Cid -Date: Wed Aug 24 23:44:18 2011 +0200 - - Clarify ownership - - qt4/src/poppler-qt4.h | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 87c48fdc175be4d852b953778f915ea93cd50194 -Author: Adrian Johnson -Date: Wed Aug 24 19:53:48 2011 +0930 - - cairo: fix unique id mime data - - The unique id string was copied before the object number was appended - resulting in all images in pdf output being the same. - - poppler/CairoOutputDev.cc | 3 +-- - 1 files changed, 1 insertions(+), 2 deletions(-) - -commit 08a2ba6f1603246651f0d5e697b88d38363d7df2 -Author: Pino Toscano -Date: Tue Aug 23 20:20:32 2011 +0200 - - pdftocairo/cmake: need to link to freetype - - utils/CMakeLists.txt | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 82496b18dc4aff66cc29f2b6607c8f894afe8b49 -Author: Albert Astals Cid -Date: Mon Aug 22 16:42:28 2011 +0200 - - Update Adrian (C) - - poppler/GfxFont.h | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 2576e3a6d9746e2272c620a775e11295932eb5f2 -Author: Adrian Johnson -Date: Mon Aug 22 21:41:36 2011 +0930 - - update SEE ALSO section of man pages - - - ensure each man page references all other utils - - sort list of utils in alphabetical order - - utils/pdffonts.1 | 8 +++++--- - utils/pdfimages.1 | 8 +++++--- - utils/pdfinfo.1 | 8 +++++--- - utils/pdftocairo.1 | 2 +- - utils/pdftohtml.1 | 8 ++++++++ - utils/pdftoppm.1 | 8 +++++--- - utils/pdftops.1 | 8 +++++--- - utils/pdftotext.1 | 9 +++++---- - 8 files changed, 39 insertions(+), 20 deletions(-) - -commit 23ec5c8d394beb632ee45f6308215646cd1a0195 -Author: Adrian Johnson -Date: Mon Aug 22 21:26:24 2011 +0930 - - cairo: only use show_text_glyphs if the surface supports it and the - font has toUnicode - - When generating pdf output, fonts that do not have toUnicode cause an - excessive number of empty text ActualText entries to be written due to - glyphs that do not have have a mapping. - - poppler/CairoOutputDev.cc | 12 ++++++++---- - poppler/CairoOutputDev.h | 1 + - poppler/GfxFont.h | 3 +++ - 3 files changed, 12 insertions(+), 4 deletions(-) - -commit 3a574f13fa22b7c31eda0d0437f4094a5a39ff34 -Author: Adrian Johnson -Date: Fri Aug 19 23:23:24 2011 +0930 - - cairo: fix stroke patterns - - Since cairo still does not yet have cairo_stroke_to_path(), this - implements a workaround for stroke patterns. In clipToStrokePath, the - stroke path and stroke parameters are saved. In tilingPatternFill and - fill (used to draw shading patterns) if a stroke path clip has been - saved, the current pattern is stroked instead of filled using the - saved stroke. - Fixes bug #11719. - - poppler/CairoOutputDev.cc | 52 - ++++++++++++++++++++++++++++++++++++++++++++- - poppler/CairoOutputDev.h | 17 +++++++++++++- - 2 files changed, 66 insertions(+), 3 deletions(-) - -commit eb740dac838d2a1e32899327ca6d25c3dca641df -Author: Carlos Garcia Campos -Date: Mon Aug 22 13:41:56 2011 +0200 - - glib-demo: Add text attributes information to text demo - - glib/demo/text.c | 103 - ++++++++++++++++++++++++++++++++++++++++++++++++++--- - 1 files changed, 97 insertions(+), 6 deletions(-) - -commit cda4aefaa136ae07778de3b1593808a5aaa2db5b -Author: Carlos Garcia Campos -Date: Mon Aug 22 13:40:49 2011 +0200 - - glib-demo: Add pgd_pixbuf_new_for_color() to utils - - To get a pixbuf for a given poppler color. - - glib/demo/annots.c | 22 +--------------------- - glib/demo/utils.c | 27 +++++++++++++++++++++++++++ - glib/demo/utils.h | 1 + - 3 files changed, 29 insertions(+), 21 deletions(-) - -commit 2a11b2963a548186654722a393db1e19d57828f1 -Author: danigm -Date: Mon Aug 22 12:51:50 2011 +0200 - - glib: Add poppler_page_get_text_attributes() - - It returns a list of text attributes that apply to a range of text as - returned by poppler_page_get_text(). Text attributes are represented - by - a PopplerTextAttributes struct that contains font name, font size, - whether text is undrlined and foreground color for a range of text. - Fixes bug #33269. - - glib/poppler-page.cc | 202 - +++++++++++++++++++++++++++++++++++ - glib/poppler-page.h | 33 ++++++ - glib/poppler.h | 1 + - glib/reference/poppler-sections.txt | 7 ++ - 4 files changed, 243 insertions(+), 0 deletions(-) - -commit 15f99157cf3900bf20cf619e204ae53085af497d -Author: Carlos Garcia Campos -Date: Mon Aug 22 12:43:12 2011 +0200 - - textoutputdev: Add TextFontInfo::matches() - - It checks whether two TextFontInfo objects contain the same font. - - poppler/TextOutputDev.cc | 4 ++++ - poppler/TextOutputDev.h | 1 + - 2 files changed, 5 insertions(+), 0 deletions(-) - -commit 5b554b39fca634c8ba58915c14522cb2920fe280 -Author: Pino Toscano -Date: Mon Aug 22 13:16:23 2011 +0200 - - pdftocairo/cmake: link to lcms library if available - - utils/CMakeLists.txt | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit f7cd236fea8740ef05635d1fd7917a778cc373f0 -Author: Albert Astals Cid -Date: Mon Aug 22 00:00:32 2011 +0200 - - Ship HtmlUtils.h - - utils/Makefile.am | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit a128a858c50287cfba74c69996276ea44370dc26 -Author: Albert Astals Cid -Date: Sun Aug 21 23:52:06 2011 +0200 - - Update Adrian's (C) - - goo/PNGWriter.cc | 2 +- - goo/PNGWriter.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit b78134314107d8344360c3313478115ed291630d -Author: Albert Astals Cid -Date: Sun Aug 21 23:46:09 2011 +0200 - - Fix copyright - - c&p is evil - - goo/gtypes_p.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit ade53277546cef4ba19d982518c0cd83a4bb9c12 -Author: Albert Astals Cid -Date: Sun Aug 21 23:42:53 2011 +0200 - - Move HAVE_STDINT_H use to a private header - - This way we do not need to expose it in poppler-config.h since - gtypes.h is a half public header - - goo/Makefile.am | 1 + - goo/gtypes.h | 18 ------------------ - goo/gtypes_p.h | 30 ++++++++++++++++++++++++++++++ - poppler/CairoOutputDev.cc | 1 + - poppler/CairoRescaleBox.cc | 1 + - utils/pdftocairo.cc | 1 + - 6 files changed, 34 insertions(+), 18 deletions(-) - -commit 6166c3a37a4d6307d4f23ee272ea07c95bbba74a -Author: Albert Astals Cid -Date: Sun Aug 21 23:31:30 2011 +0200 - - Silence silly gcc - - goo/PNGWriter.cc | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit eb5b228c4c24152e632c931b63c64ffb1e10d45d -Author: Adrian Johnson -Date: Sat Aug 20 21:13:18 2011 +0930 - - pdftocairo: fix writing to stdout for ps/pdf/svg - - utils/pdftocairo.cc | 23 ++++++++++++++++++++--- - 1 files changed, 20 insertions(+), 3 deletions(-) - -commit 1beac5896a301be68de22240017fef11e7d27d40 -Author: Adrian Johnson -Date: Sat Aug 13 00:23:23 2011 +0930 - - Add poppler version to PSOutputDev ouput - - poppler/PSOutputDev.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit b35fd3651fd3dbaa876fc64b8c5cfe77ae67335f -Author: Adrian Johnson -Date: Fri Aug 5 23:01:51 2011 +0930 - - cairo: use cairo_show_text_glyphs() when printing - - This will allow cairo to setup the correct toUnicode or glyph names to - ensure text can be extracted. - - poppler/CairoOutputDev.cc | 41 - ++++++++++++++++++++++++++++++++++++++--- - poppler/CairoOutputDev.h | 5 +++++ - 2 files changed, 43 insertions(+), 3 deletions(-) - -commit 51ade078bc1fa737e20120ae4cb3bf693a219823 -Author: Stefan Thomas -Date: Thu Jul 15 16:24:55 2010 +0100 - - pdftocairo: Added to CMake build system. - - utils/CMakeLists.txt | 20 ++++++++++++++++++++ - 1 files changed, 20 insertions(+), 0 deletions(-) - -commit 5a8745cdf428e22641937977eedfc1d605f6ff07 -Author: Adrian Johnson -Date: Fri Aug 12 23:57:01 2011 +0930 - - Add pdftocairo man page - - utils/Makefile.am | 5 +- - utils/pdftocairo.1 | 254 - ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 258 insertions(+), 1 deletions(-) - -commit b67a12b2b26692e2ccec7ff2e6df18fee05be535 -Author: Adrian Johnson -Date: Thu Aug 11 21:34:11 2011 +0930 - - pdftocairo - utility for creating png/jpeg/ps/eps/pdf/svg using - CairoOutputDev - - utils/.gitignore | 2 +- - utils/Makefile.am | 20 +- - utils/pdftocairo.cc | 970 - +++++++++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 989 insertions(+), 3 deletions(-) - -commit 4f2d774826bf7bb7b3825e02c5ca4c2928643950 -Author: Adrian Johnson -Date: Thu Aug 11 21:32:53 2011 +0930 - - png: add support for embedding ICC profile - - goo/PNGWriter.cc | 28 ++++++++++++++++++++++++++++ - goo/PNGWriter.h | 8 ++++++++ - 2 files changed, 36 insertions(+), 0 deletions(-) - -commit 1091f47310bf0fc71bac5dd4ec81dad50b2f2537 -Author: Adrian Johnson -Date: Wed Aug 10 18:48:15 2011 +0930 - - png: Add additional pixel formats - - RGBA is required for images with transparency. GRAY and MONOCHROME - allow PNGWriter write more compact PNG files when the images is known - to be all gray or monochrome. - - goo/PNGWriter.cc | 30 ++++++++++++++++++++++++++---- - goo/PNGWriter.h | 11 ++++++++++- - 2 files changed, 36 insertions(+), 5 deletions(-) - -commit c6f26915db568f12892d48005746ad2922c19000 -Author: Adrian Johnson -Date: Wed Aug 10 18:45:24 2011 +0930 - - png: use PNG_RESOLUTION_METER instead of PNG_RESOLUTION_UNKNOWN to - set resolution - - gimp does not show the correct resolution unless PNG_RESOLUTION_METER - is used - - goo/PNGWriter.cc | 3 +-- - 1 files changed, 1 insertions(+), 2 deletions(-) - -commit 2667d2a5b34e1bbf322aea42876e7e81aa06dc29 -Author: Adrian Johnson -Date: Tue Aug 9 22:05:53 2011 +0930 - - Use stdint.h instead of assuming the size of types - - configure.ac | 1 + - goo/gtypes.h | 18 ++++++++++++++++++ - poppler/CairoOutputDev.cc | 2 -- - poppler/CairoRescaleBox.cc | 2 -- - 4 files changed, 19 insertions(+), 4 deletions(-) - -commit c043f298e68bdfffcb7505ec354ec7487b5bd7b2 -Author: Adrian Johnson -Date: Fri Jul 8 21:13:36 2011 +0930 - - cairo: assume printer pixel size is 1/600" when stroking 0 width lines - - Fixes bug #39067. - - poppler/CairoOutputDev.cc | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 961adf0b767be78d3556b7315de3761d3d46b107 -Author: Adrian Johnson -Date: Thu Aug 18 17:44:35 2011 +0930 - - cairo: set mime data for soft masked images - - Fixes bug #40192. - - poppler/CairoOutputDev.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 86271e4810f714d4ba7a2a6651a9b1d04f653262 -Author: Joshua Richardson -Date: Thu Aug 18 18:48:40 2011 +0200 - - pdftohtml: Support text rotation - - Includes a few other fixlets. - See bug 38586 for more info - - utils/HtmlFonts.cc | 64 ++++++++++-------- - utils/HtmlFonts.h | 10 ++- - utils/HtmlOutputDev.cc | 170 - +++++++++++++++++++++++++++++++++--------------- - utils/HtmlOutputDev.h | 8 ++- - utils/HtmlUtils.h | 51 ++++++++++++++ - 5 files changed, 218 insertions(+), 85 deletions(-) - -commit 56248b84e2185483dd54704c13838e8f78029d49 -Author: Albert Astals Cid -Date: Thu Aug 18 12:40:51 2011 +0200 - - Only declare overprint if we are going to use it - - utils/pdftoppm.cc | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit a1093aae9f64cb6768164551d50cafaef52876c1 -Author: Albert Astals Cid -Date: Thu Aug 18 12:30:29 2011 +0200 - - Fix Adrian's (C) - - poppler/PSOutputDev.cc | 2 +- - poppler/PSOutputDev.h | 3 ++- - poppler/PreScanOutputDev.cc | 1 + - poppler/PreScanOutputDev.h | 1 + - poppler/SplashOutputDev.cc | 1 + - poppler/SplashOutputDev.h | 1 + - 6 files changed, 7 insertions(+), 2 deletions(-) - -commit 7741b24d05f50c134cf15361d52f5df7ae3c3115 -Author: Adrian Johnson -Date: Sun Aug 14 22:06:22 2011 +0930 - - ps: Avoid using /PatternType if only one instance of the pattern - is used - - this optimization makes pages print faster on my LaserJet - - poppler/PSOutputDev.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit a60e61ac64634dc59c80d8e6b0288c1269fc0154 -Author: Adrian Johnson -Date: Sun Aug 14 21:55:24 2011 +0930 - - ps: use PS Patterns for tiling fill when PS level >= 2 - - poppler/CairoOutputDev.cc | 2 +- - poppler/CairoOutputDev.h | 4 +- - poppler/Gfx.cc | 4 +- - poppler/OutputDev.h | 2 +- - poppler/PSOutputDev.cc | 59 - +++++++++++++++++++++++++++++++++++++++--- - poppler/PSOutputDev.h | 13 ++++++++- - poppler/PreScanOutputDev.cc | 2 +- - poppler/PreScanOutputDev.h | 2 +- - poppler/SplashOutputDev.cc | 2 +- - poppler/SplashOutputDev.h | 2 +- - 10 files changed, 76 insertions(+), 16 deletions(-) - -commit 9938770e737b2fcec8269147e70663517f848925 -Author: Albert Astals Cid -Date: Mon Aug 15 13:17:24 2011 +0200 - - 0.17.2 - - CMakeLists.txt | 4 ++-- - NEWS | 37 +++++++++++++++++++++++++++++++++++++ - configure.ac | 2 +- - cpp/Doxyfile | 2 +- - glib/CMakeLists.txt | 2 +- - glib/Makefile.am | 2 +- - poppler/Makefile.am | 2 +- - qt4/src/CMakeLists.txt | 2 +- - qt4/src/Doxyfile | 2 +- - qt4/src/Makefile.am | 5 +++-- - 10 files changed, 49 insertions(+), 11 deletions(-) - -commit 378fc06c574b85b5c003ca842aa743f0ffe5587e -Author: Albert Astals Cid -Date: Mon Aug 1 22:14:12 2011 +0200 - - Only assume the OC is not visible if it exists and is set to no - - Similar to commit e2def20a45c1d8307fd62fabb9769121af975abf - but in the other branch of the if, fixes bug 39637 - - poppler/OptionalContent.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 861a7bfb9431609e1e148240447f23c8e83b9d0f -Author: Thomas Freitag -Date: Fri Jul 29 00:30:58 2011 +0200 - - Implement overprint in Splash - - See the "Implementing overprint in Splash" thread in the mailing - list for more info - - goo/ImgWriter.h | 2 + - goo/JpegWriter.cc | 54 +++++++- - goo/JpegWriter.h | 7 +- - poppler/Gfx.cc | 98 +++++++++++++-- - poppler/GfxState.cc | 1 + - poppler/GfxState.h | 4 + - poppler/OutputDev.h | 1 + - poppler/SplashOutputDev.cc | 307 - ++++++++++++++++++++++++++++++++++++++------ - poppler/SplashOutputDev.h | 51 +++++++- - splash/Splash.cc | 86 +++++++++--- - splash/Splash.h | 9 +- - splash/SplashBitmap.cc | 64 +++++++++- - splash/SplashBitmap.h | 1 + - splash/SplashPattern.cc | 16 ++- - splash/SplashPattern.h | 7 + - splash/SplashState.cc | 11 ++- - splash/SplashState.h | 22 +++ - splash/SplashTypes.h | 5 +- - utils/pdftoppm.cc | 36 +++++- - 19 files changed, 686 insertions(+), 96 deletions(-) - -commit e2fa8a2ca8459d19c0f9dca445a2399b9a3d483d -Author: Koji Otani -Date: Thu Jul 28 12:43:57 2011 +0200 - - Parse the "Medium" modifier when asking fontconfig for a font - - poppler/GlobalParams.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 0a677dd8dc9c55936530ea1fee901cab831c52af -Author: Koji Otani -Date: Thu Jul 28 12:42:16 2011 +0200 - - Improve selection of CJK fonts - - Seems we need to do some more fontconfig magic for some special - fontconfig configurations - More info at bug 36474 - - poppler/GlobalParams.cc | 137 - ++++++++++++++++++++++++++++++---------------- - 1 files changed, 89 insertions(+), 48 deletions(-) - -commit e78aff6796a5d5a0a4f2fe8c7ceb33c506e2c8f5 -Author: William Bader -Date: Tue Jul 26 00:10:34 2011 +0200 - - make -level1sep write gray instead of cmyk - - If it is a gray only image - Bug 39012 - - poppler/PSOutputDev.cc | 63 - +++++++++++++++++++++++++++++++++++++++++++++-- - 1 files changed, 60 insertions(+), 3 deletions(-) - -commit ea31309487aab6ed407a086dff1f350b6e4bdbc9 -Author: Albert Astals Cid -Date: Tue Jul 26 00:09:27 2011 +0200 - - Update (C) - - poppler/PDFDoc.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit a945641497946a825dc880f94200ea1d5409332b -Author: Hib Eris -Date: Sat Jul 23 08:44:06 2011 +0200 - - Handle missing startxref properly - - Bug 38209 - - poppler/PDFDoc.cc | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit 2c1b25ef2592367f4c18e204ab5d102f15cf272f -Author: William Bader -Date: Mon Jul 25 23:43:27 2011 +0200 - - Fix a bad memory access - - When not using antialias and the character starts to the left/top - of the image - Bug 37189 - - splash/Splash.cc | 14 ++++++++++---- - 1 files changed, 10 insertions(+), 4 deletions(-) - -commit 300900afa2140141748a7571270be5d850274072 -Author: Daniel Glöckner -Date: Sat Jul 23 19:49:15 2011 +0200 - - Fix numerical overflow in libopenjpeg JPXStream::doLookChar() - - It also includes a speed optimization. Bug 39361 - - poppler/JPEG2000Stream.cc | 37 ++++++++++++++++++++++++++++++++++++- - poppler/JPEG2000Stream.h | 36 +++++++++++------------------------- - 2 files changed, 47 insertions(+), 26 deletions(-) - -commit ec6ea621b066a3b332a8099341664889d2ff3743 -Author: Axel Struebing -Date: Thu Jul 21 23:12:36 2011 +0200 - - Fix calculation of startXRefPos - - Reviewed by Hib Eris - See "another problem with saving linearized files" in the mailing - list for more info - - poppler/PDFDoc.cc | 9 ++++++--- - 1 files changed, 6 insertions(+), 3 deletions(-) - -commit ce97cfcd6373c98fb8c63e9b3ef6c51738f22a50 -Author: Albert Astals Cid -Date: Wed Jul 20 00:24:52 2011 +0200 - - Render dots for 0 length dashed lines - - Bug 34150 - - splash/Splash.cc | 13 +++++++++++++ - 1 files changed, 13 insertions(+), 0 deletions(-) - -commit 42c1b1c4af6b07f488d1b2b02a4700f19b0ab0ef -Author: Tomas Hoger -Date: Wed Jul 20 00:23:15 2011 +0200 - - Fix crash on truncated JPEG/DCT stream - - Bug 36693 - - poppler/DCTStream.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 091b570c63694e475c24bb8805638ac70c654892 -Author: Albert Astals Cid -Date: Wed Jul 20 00:19:43 2011 +0200 - - Make sure the dict is a page dict - - Fixes second part of 35925 and 39072 - - poppler/PDFDoc.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit ac566c887ffae9d384587f7587609642aef7a016 -Author: Albert Astals Cid -Date: Wed Jul 20 00:17:49 2011 +0200 - - Do not crash if can not get page 0 for some reason - - qt4/tests/test-poppler-qt4.cpp | 7 +++++-- - 1 files changed, 5 insertions(+), 2 deletions(-) - -commit 6ad95e7b8b9766aa19f01f06f02eb430e4a4a899 -Author: Albert Astals Cid -Date: Mon Jul 11 15:04:49 2011 +0100 - - Complete the list of preprocessor defines that we never define - - When using any of the two sanctioned build systems - - poppler/poppler-config.h.cmake | 6 ++++-- - poppler/poppler-config.h.in | 6 ++++-- - 2 files changed, 8 insertions(+), 4 deletions(-) - -commit edcc84ef0137a733cf3fab79b919af309d87325c -Author: Albert Astals Cid -Date: Mon Jul 11 15:00:39 2011 +0100 - - Harmonize all SPLASH_CMYK to use #if - - poppler/SplashOutputDev.cc | 24 ++++++++++++------------ - 1 files changed, 12 insertions(+), 12 deletions(-) - -commit a8fca630d592941c033ca6a380bf46b6e733a748 -Author: Albert Astals Cid -Date: Mon Jul 11 14:57:33 2011 +0100 - - Sanitize headers a big - - * Remove includes to config.h as that file does not exist - * Add to poppler-config.h all the defines we define in the - configure/cmake process and are used in headers - * Include poppker-config.h where needed - - goo/GooTimer.h | 2 + - goo/ImgWriter.h | 3 +- - goo/JpegWriter.h | 3 +- - goo/PNGWriter.h | 4 +- - goo/TiffWriter.h | 3 +- - goo/gfile.h | 3 +- - poppler/DCTStream.h | 5 +-- - poppler/FlateStream.h | 5 +-- - poppler/Gfx.h | 3 +- - poppler/GfxState.h | 2 + - poppler/Stream.h | 3 +- - poppler/poppler-config.h.cmake | 63 - ++++++++++++++++++++++++++++++++++++++++ - poppler/poppler-config.h.in | 63 - ++++++++++++++++++++++++++++++++++++++++ - splash/SplashFTFont.h | 4 ++- - splash/SplashMath.h | 4 ++- - 15 files changed, 153 insertions(+), 17 deletions(-) - -commit 214322f3c66a9aad4e2a46f6e305a3dacaa4f8b1 -Author: Albert Astals Cid -Date: Sun Jul 10 01:20:21 2011 +0100 - - And 3 years later, Ed has answered :-) - - Now all our changes are GPLv2+ - - poppler/GfxFont.cc | 3 +++ - poppler/GlobalParams.cc | 3 +++ - poppler/TextOutputDev.cc | 3 +++ - poppler/TextOutputDev.h | 3 +++ - poppler/UnicodeTypeTable.cc | 3 +++ - poppler/UnicodeTypeTable.h | 3 +++ - 6 files changed, 18 insertions(+), 0 deletions(-) - -commit 37cc1344672f480d4062aafbd2f3245ca1392279 -Author: Albert Astals Cid -Date: Sun Jul 10 01:15:44 2011 +0100 - - Fix header - - The file was modified in 2009 and README.contributors stating - everything is GPLv2+ is from 2008 - - poppler/XpdfPluginAPI.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 230ab66f52a992557464e325d18f88573ec52423 -Author: Albert Astals Cid -Date: Sun Jul 10 01:06:41 2011 +0100 - - make files easier to include by themselves - - fofi/FoFiTrueType.h | 2 ++ - splash/Splash.h | 3 ++- - splash/SplashFontEngine.h | 3 ++- - 3 files changed, 6 insertions(+), 2 deletions(-) - -commit 866c6d1b0daa8b28f259e1faba075026cf9007e0 -Author: Albert Astals Cid -Date: Sun Jul 10 00:55:25 2011 +0100 - - Name most of the classes in poppler/ includable by themselves - - poppler/Annot.h | 4 +++- - poppler/Catalog.h | 2 ++ - poppler/CharCodeToUnicode.h | 4 +++- - poppler/CompactFontTables.h | 16 ++++++++++++++++ - poppler/FontInfo.h | 6 +++++- - poppler/GfxState_helpers.h | 4 +++- - poppler/NameToUnicodeTable.h | 18 ++++++++++++++++++ - 7 files changed, 50 insertions(+), 4 deletions(-) - -commit 6b62fb7e9bd7de7f79b9b9a6fe36a5f5da099133 -Author: William Bader -Date: Mon Jun 27 19:38:52 2011 +0100 - - Remove unused variable - - poppler/PSOutputDev.cc | 5 +---- - 1 files changed, 1 insertions(+), 4 deletions(-) - -commit 4bc6c5bd3a001bb4eb9f61488e3d4f356638e391 -Author: Adrian Bunk -Date: Tue Jul 5 15:21:06 2011 +0300 - - .gitignore tests additions - - The following files were missing in .gitignore: - - cpp/tests/poppler-render - - qt4/tests/poppler-texts - - test/gtk-test - - cpp/tests/.gitignore | 1 + - qt4/tests/.gitignore | 1 + - test/.gitignore | 1 + - 3 files changed, 3 insertions(+), 0 deletions(-) - -commit 00076bc308ae320244c47777fe351c1c2bef2da8 -Author: Albert Astals Cid -Date: Fri Jun 24 22:51:55 2011 +0100 - - Forgot William's (C) here - - poppler/Stream.cc | 1 + - poppler/Stream.h | 1 + - 2 files changed, 2 insertions(+), 0 deletions(-) - -commit 7e244fde4ec03da08d81af3402b21646c803bd31 -Author: William Bader -Date: Fri Jun 24 22:39:13 2011 +0100 - - patch to make -level2sep and -level3sep write gray instead of cmyk - - If they are only gray of course :D - - poppler/PSOutputDev.cc | 34 ++++++++++++++++++++++++++++++---- - poppler/Stream.cc | 43 +++++++++++++++++++++++++++++++++++++++++++ - poppler/Stream.h | 29 +++++++++++++++++++++++++++++ - 3 files changed, 102 insertions(+), 4 deletions(-) - -commit abba8140a9972197faaca96ec590af7dc9408fb0 -Author: William Bader -Date: Fri Jun 24 22:38:33 2011 +0100 - - patch to make -level2sep and -level3sep write cmyk instead of rgb - - poppler/PSOutputDev.cc | 59 - +++++++++++++++++++++++++++++++++++++++++++---- - 1 files changed, 54 insertions(+), 5 deletions(-) - -commit 706007431325b1e8c9bf4cba35c89511b10ebf0c -Author: Albert Astals Cid -Date: Mon Jun 20 23:30:50 2011 +0100 - - (C) for Jim - - fofi/FoFiBase.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit e23384fbb3542941d2cf59ce6560913255ca2b01 -Author: Jim Meyering -Date: Mon Jun 20 11:09:01 2011 +0200 - - don't gmalloc(-1) upon ftell failure - - * fofi/FoFiBase.cc: Diagnose ftell failure. - - fofi/FoFiBase.cc | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit c5601bde9d8f3f56e558a6f63e563c9d337810eb -Author: Steven Murdoch -Date: Mon Jun 20 23:25:43 2011 +0100 - - Fix encoding of PDF document metadata in output of pdftohtml - - pdftohtml simply copies the PDF document title into the HTML - tag, which fails when the title is UCS-2 encoded, or if it contains - characters which are in pdfDocEncoding (a ISO 8859-1 superset), - but not - in ISO 8859-1. This patch fixes the problem by decoding UCS-2 or - pdfDocEncoding into Unicode, then encoding this in the desired output - encoding. HTML escaping wasn't being done either, so I have used the - existing function HtmlFont::HtmlFilter to perform both HTML escaping - and character set encoding. This static method had to be made public - to call it from pdftohtml. See bug #37900. - - utils/HtmlFonts.h | 3 ++- - utils/pdftohtml.cc | 41 ++++++++++++++++++++++++++++++++++++++--- - 2 files changed, 40 insertions(+), 4 deletions(-) - -commit d4af1c4ef46abf1f11b7215c7b144ce7bb7912eb -Author: Joshua Richardson <joshuarbox-junk1@yahoo.com> -Date: Sat Jun 18 13:39:54 2011 +0100 - - Fix vertical spacing issues in pdftohtml output. - - Bug 38019 - - utils/HtmlFonts.cc | 3 ++- - utils/HtmlOutputDev.cc | 21 +++++++++++++++++++-- - 2 files changed, 21 insertions(+), 3 deletions(-) - -commit 589933ef105b60e8d48854cce15a7548c2850116 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jun 13 21:24:39 2011 +0100 - - Forgot my (C) - - poppler/PreScanOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit f5d2ddd13d27078355dee63207671885bf9b0926 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jun 13 18:57:29 2011 +0100 - - We need to include config.h here - - Fixes crash after patch to fix bug 13518 - - poppler/PreScanOutputDev.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 147ae4bf76a85768c9ed729ca10ee3dae93b8876 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jun 8 23:36:14 2011 +0100 - - Do not crash if link does not have an action - - utils/HtmlOutputDev.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 5d9489bf566b700ef38e5e33665a2648b535e1e7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jun 4 21:46:10 2011 +0100 - - forgot to update the C - - utils/pdftotext.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 7b123bf2b11ac81f24a966186a06de739d3c8f02 -Author: Steven Murdoch <Steven.Murdoch@cl.cam.ac.uk> -Date: Sat Jun 4 20:22:52 2011 +0100 - - Fix pdftotext -htmlmeta to correctly output U+2019 in PDF metadata - - In PDF documents, right single quotation mark (U+2019) may be - encoded as - 0x90 because PDFDocEncoding uses some of the reserved characters in - ISO 8859-1. However, pdftotext -htmlmeta assumes that characters - are either - UCS-2 or ISO 8859-1. Thus when a right single quotation mark is - encoded as - 0x90, it is output as unicode 0x90 (which is a control - character). pdfinfo - does the right thing by first converting from PDFDocEncoding to - Unicode - with pdfDocEncoding[], before encoding it in the desired character - set. - This patch applies the same logic to pdftotext. pdftohtml is broken - in the - same way, but this patch does not attempt to fix it. - - Bug 37900 - - utils/pdftotext.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit db2ae1bdbb7fcb64ba4c91dfc574d9f970bebdf6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jun 4 13:23:11 2011 +0100 - - Make sure catDict is a dict - - poppler/Catalog.cc | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 58915affbdf1b5780f25d172a582c69fb2413230 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jun 4 13:20:02 2011 +0100 - - Make sure catDict is a dict before using it - - KDE Bug 274888 shows it's possible to get aborts because of that - - poppler/Catalog.cc | 26 ++++++++++++++++---------- - 1 files changed, 16 insertions(+), 10 deletions(-) - -commit 4ebc7e364409fe303e7a5729b568913e3c92e7d4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jun 4 13:19:34 2011 +0100 - - We need to free catDict on failure - - poppler/Catalog.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 335a7fc6d98f5facc1ff098a91ac968387473cb3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue May 31 23:18:26 2011 +0100 - - Make parse() private - - poppler/Catalog.h | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 311d69ef2222409859817737c44b8e741289d897 -Author: Axel Strübing <axel.struebing@freenet.de> -Date: Sun May 29 16:12:29 2011 +0100 - - Needs to be freed - - As i said in my last commit comment :D - - poppler/PDFDoc.cc | 6 ++++-- - 1 files changed, 4 insertions(+), 2 deletions(-) - -commit 66c7d0199b45bc7c81c88a9989c9515398d30d43 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat May 28 17:32:02 2011 +0100 - - No need to check for NULL - - We probably need to free obj4 but i don't have the stamina to properly - test it - - poppler/PDFDoc.cc | 21 ++++++++++----------- - 1 files changed, 10 insertions(+), 11 deletions(-) - -commit 450934619a1c5b2a58f65649f567274af8d24ea7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat May 28 12:37:08 2011 +0100 - - Parse that as unicode - - Fixes KDE Bug #274055 - - qt4/src/poppler-page.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 04dfb2c984b3c9949466e2b70e26b58029c5a7d3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat May 7 12:55:34 2011 +0200 - - Make FileSpec a class and move EmbFile from Catalog to FileSpec - - Qt and cpp frontends adapted by Pino Toscano - - cpp/poppler-document.cpp | 4 +- - cpp/poppler-embedded-file-private.h | 10 +- - cpp/poppler-embedded-file.cpp | 42 +++++++---- - glib/poppler-annot.cc | 6 +- - glib/poppler-attachment.cc | 33 +++++---- - glib/poppler-document.cc | 5 +- - glib/poppler-private.h | 3 +- - poppler/Catalog.cc | 118 - ++--------------------------- - poppler/Catalog.h | 55 +------------- - poppler/FileSpec.cc | 128 - ++++++++++++++++++++++++++++++++ - poppler/FileSpec.h | 51 ++++++++++++- - qt4/src/poppler-embeddedfile-private.h | 6 +- - qt4/src/poppler-embeddedfile.cc | 34 +++++--- - qt4/src/poppler-page.cc | 5 +- - qt4/src/poppler-private.h | 4 +- - qt4/tests/check_attachments.cpp | 12 ++-- - 16 files changed, 284 insertions(+), 232 deletions(-) - -commit 74f9befddd4b5848c4af0c1b2848a1322f8cd0a2 -Author: Pino Toscano <pino@kde.org> -Date: Wed May 25 16:46:15 2011 +0200 - - [qt4] Page needs to be a friend of EmbeddedFile, too - - qt4/src/poppler-qt4.h | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 74853614d617486b7b62e9c08be39a6e58bc7d9b -Author: Pino Toscano <pino@kde.org> -Date: Wed May 25 16:40:49 2011 +0200 - - update copyrights - - qt4/src/poppler-embeddedfile-private.h | 2 +- - qt4/src/poppler-embeddedfile.cc | 2 +- - qt4/src/poppler-qt4.h | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -commit e6b2dec502c02f9fbaed480f227cf7145249a98e -Author: Pino Toscano <pino@kde.org> -Date: Wed May 25 16:39:09 2011 +0200 - - [qt4] one more usage of the new EmbeddedFile ctor - - followup of a264e5385b2d0fee5126b3d0e57d42d34cafa45d - - qt4/src/poppler-page.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit a264e5385b2d0fee5126b3d0e57d42d34cafa45d -Author: Pino Toscano <pino@kde.org> -Date: Wed May 25 16:12:02 2011 +0200 - - [qt4] create EmbeddedFile by EmbeddedFileData only - - - create the private class and pass it to the EmbeddedFile ctor, - reducing the amount of poppler code API exposed to the outside - - turn the old private EmbeddedFile(EmbFile*) ctor in a death machine - - qt4/src/poppler-embeddedfile-private.h | 3 +++ - qt4/src/poppler-embeddedfile.cc | 21 ++++++++++++++++++--- - qt4/src/poppler-private.h | 3 ++- - qt4/src/poppler-qt4.h | 2 ++ - 4 files changed, 25 insertions(+), 4 deletions(-) - -commit 232bfa1c59013637fd7e858e22194becb636ad21 -Author: Pino Toscano <pino@kde.org> -Date: Wed May 25 15:55:48 2011 +0200 - - [Qt4] split EmbeddedFileData in an own file - - qt4/src/poppler-embeddedfile-private.h | 37 - ++++++++++++++++++++++++++++++++ - qt4/src/poppler-embeddedfile.cc | 7 +----- - 2 files changed, 38 insertions(+), 6 deletions(-) - -commit a7242b78b3c9a64cf38ac150e6a914d7abce3355 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat May 7 11:10:11 2011 +0100 - - Do not free a shallow copy of an object we'll free later - - Make sure we have our own copy we can free - Fixes KDE BUG #268816 - (cherry picked from commit dab9cdf795d6caead555326958e86e844ace067b) - - poppler/Catalog.cc | 12 +++++------- - poppler/Catalog.h | 2 +- - 2 files changed, 6 insertions(+), 8 deletions(-) - -commit 4db2452b3d345d9531987998e6b5532a59137e1d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri May 6 14:57:51 2011 +0200 - - glib: Add poppler_document_get_n_attachments() - - glib/poppler-document.cc | 34 - ++++++++++++++++++++++++---------- - glib/poppler-document.h | 1 + - glib/reference/poppler-sections.txt | 1 + - 3 files changed, 26 insertions(+), 10 deletions(-) - -commit 3e3284de3fe1916d7f8161ede7bf49c76d01f303 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri May 6 14:49:05 2011 +0200 - - glib: Update gtk-doc.make - - gtk-doc.make | 151 - +++++++++++++++++++++++++++++++++++++-------------------- - 1 files changed, 98 insertions(+), 53 deletions(-) - -commit 9a77bd7706a08d9aeabe600e3500c14493ac8519 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri May 6 14:48:38 2011 +0200 - - glib-demo: Add missing permission flags to info demo - - glib/demo/info.cc | 39 ++++++++++++++++++++++++++++++++++++--- - 1 files changed, 36 insertions(+), 3 deletions(-) - -commit 091c155f8a7bc79da84cd21877be389de1f2b1a3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri May 6 14:47:36 2011 +0200 - - glib: Add missing permissions flags to PopplerPermissions - - glib/poppler-document.cc | 6 ++++++ - glib/poppler-document.h | 10 +++++++++- - 2 files changed, 15 insertions(+), 1 deletions(-) - -commit 632d6a40ce3a5d3d8e10bf7e93e8eb578beae907 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue May 3 21:54:59 2011 +0100 - - 0.17.1 - - CMakeLists.txt | 4 ++-- - NEWS | 12 ++++++++++++ - configure.ac | 2 +- - cpp/Doxyfile | 2 +- - poppler/Makefile.am | 2 +- - qt4/src/Doxyfile | 2 +- - 6 files changed, 18 insertions(+), 6 deletions(-) - -commit ecb136b9927a454df9360a307ccd741eaea3ca93 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue May 3 21:42:45 2011 +0100 - - remove unused vars - - poppler/Annot.cc | 9 ++------- - poppler/ArthurOutputDev.cc | 12 ++---------- - 2 files changed, 4 insertions(+), 17 deletions(-) - -commit ad131763640b2e27dde75c42b514386284b6a60d -Author: Pino Toscano <pino@kde.org> -Date: Wed Apr 27 22:36:13 2011 +0200 - - [qt4/tests] turn some assignments to bool into QVERIFY checks - - qt4/tests/check_optcontent.cpp | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit be08dd69d9dd4fcb22400f2f0aea331222e88e4a -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Apr 27 20:45:36 2011 +0100 - - update copyright years - (cherry picked from commit 2fbd493197309de5700f71f09967c9d23add88d3) - - poppler/Annot.cc | 1 + - utils/pdftotext.cc | 1 + - 2 files changed, 2 insertions(+), 0 deletions(-) - -commit 39bcce0c8ed378aafb1019ffd1ae40330f6bb63f -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Apr 27 19:39:01 2011 +0100 - - Remove more variables that are set but then unused - - poppler/SplashOutputDev.cc | 11 +------ - utils/HtmlOutputDev.cc | 75 - +------------------------------------------- - 2 files changed, 2 insertions(+), 84 deletions(-) - -commit 6656cf657b62d626910a02dfae9b6a1eb77772dd -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Apr 27 08:46:37 2011 +0100 - - Remove unused vars - - poppler/TextOutputDev.cc | 6 +----- - 1 files changed, 1 insertions(+), 5 deletions(-) - -commit ce55510f4dd10dfec2fc5b1c211c4a546c6ebc98 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Apr 27 08:42:34 2011 +0100 - - Remove unused vars - - splash/Splash.cc | 5 ++--- - splash/SplashFTFontEngine.cc | 4 +--- - splash/SplashXPath.cc | 6 ++---- - 3 files changed, 5 insertions(+), 10 deletions(-) - -commit 49d199fd1ea14383638739d95d019adb33b17768 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Apr 27 08:38:17 2011 +0100 - - Fix page_transition::operator= - - cpp/poppler-page-transition.cpp | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 807c1df2bf79c7c6378390b41dc230d80533ae3f -Author: Tom Gleason <tom@buildadam.com> -Date: Tue Apr 26 17:06:07 2011 +0100 - - bbox coordinates are relative to MediaBox size, not CropBox size - - utils/pdftotext.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 813f41367a681702ae7a155d5c2f3195124a9096 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Apr 3 20:40:15 2011 +0200 - - forms: fix mem leak in case of error - - poppler/Form.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 722baf8baf42e2c7a49e1560aae5235677d1ddee -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Apr 3 20:17:57 2011 +0200 - - forms: check form field is actually terminal before creating the - widget - - poppler/Form.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 5f6f7fc569d1c891956a3c37b3e328504635ab33 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Apr 3 15:06:45 2011 +0100 - - Properly initialize pageObjectNum to 0 - - Bug 35925 - - poppler/Hints.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit d6786edc2549164214342a50782b72c2fd904b63 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Apr 3 13:11:18 2011 +0200 - - forms: Remove unused parameter - - poppler/Form.cc | 2 +- - poppler/Form.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 62692ff381f3b7907b330bfc2019416ed058ea46 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Apr 3 13:01:42 2011 +0200 - - forms: rework the way form fields tree is built - - Now we build the tree as described by the doc, without ignoring - container fields and always creating a child widget for composed - (field - + annot) dictionaries. The way check and radio buttons are set - has been - reworked too, since now it's possible to have a set of buttons where - children are not widgets, but form fields with a child widget. - - poppler/Annot.cc | 4 +- - poppler/Form.cc | 237 - +++++++++++++++++++++++++++++------------------------- - poppler/Form.h | 17 +++-- - 3 files changed, 137 insertions(+), 121 deletions(-) - -commit a6802301d9c3ab8bf68bd8821f562f8ecced8491 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 28 17:42:37 2011 +0200 - - forms: Add debug methods to print the forms tree - - poppler/Form.cc | 78 - +++++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Form.h | 25 +++++++++++++++++ - 2 files changed, 103 insertions(+), 0 deletions(-) - -commit 46f87da04700cdd1afa634f9c554e376f6f6f752 -Author: José Aliste <jaliste@src.gnome.org> -Date: Thu Mar 31 08:09:41 2011 -0400 - - Fix a memleak in AnnotScreen::initialize - - poppler/Annot.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit b64178eaa5dd01f914649d6faa870fa140ddaf9b -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Mar 30 15:17:54 2011 +0200 - - glib: docs: Add PopplerActionJavascript to poppler-sections.txt - - glib/reference/poppler-sections.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 3d777181ddee8f7ab2cc9e4684879cb5b52b065c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Mar 30 15:16:04 2011 +0200 - - glib: Use Javascript instead of JavaScript for consistency - - glib/poppler-action.h | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit c4774fecfe3d523f32d5980f50e31daa798c9692 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Mar 30 15:08:59 2011 +0200 - - glib-demo: show javascript actions in actions view - - glib/demo/utils.c | 25 +++++++++++++++++++++++++ - 1 files changed, 25 insertions(+), 0 deletions(-) - -commit 68bbbe1a3f68d242b35027ae41f5751b02a2a700 -Author: José Aliste <jaliste@src.gnome.org> -Date: Tue Mar 29 04:56:37 2011 -0400 - - glib: add JavaScript actions - - glib/poppler-action.cc | 24 ++++++++++++++++++++++++ - glib/poppler-action.h | 14 +++++++++++++- - 2 files changed, 37 insertions(+), 1 deletions(-) - -commit 3dd934088a06f246718382601030c9b093d04160 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 30 00:03:58 2011 +0100 - - Need to create the globalParams - - qt4/tests/check_optcontent.cpp | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit ce0d4278a32b3ba19c2002ed0c481c58b1854d59 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 29 23:47:33 2011 +0100 - - Long gone - - Makefile.am | 2 -- - 1 files changed, 0 insertions(+), 2 deletions(-) - -commit 12337026533aa59bb66022ce8a119f37aafd4fad -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 29 23:40:57 2011 +0100 - - increase sonames - - CMakeLists.txt | 2 +- - glib/CMakeLists.txt | 2 +- - glib/Makefile.am | 2 +- - poppler/Makefile.am | 2 +- - qt4/src/CMakeLists.txt | 2 +- - qt4/src/Makefile.am | 2 +- - 6 files changed, 6 insertions(+), 6 deletions(-) - -commit a6e613b01698c6b38deff5248fcf7c0b17d041c3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 29 23:40:38 2011 +0100 - - more typos - - NEWS | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit e3ee037ede67212836be158b935deb7ea974b7f7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 29 23:38:24 2011 +0100 - - typo - - NEWS | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 8bcd94964f0af17a3f5b6edf71127df3daa00b1a -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 29 23:30:30 2011 +0100 - - typo - - NEWS | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit a05b9dacbe5dbd4337fdbb3e7d7d364ad5fbaeab -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 29 23:28:49 2011 +0100 - - 0.17.0 version number - - CMakeLists.txt | 2 +- - configure.ac | 2 +- - cpp/Doxyfile | 2 +- - qt4/src/Doxyfile | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - -commit 4637b737b4735c70017b46a3ed6c0ee069c02c9b -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 29 23:28:41 2011 +0100 - - 0.17.0 news - - NEWS | 108 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 108 insertions(+), 0 deletions(-) - -commit a55cc5d9c67ede1d96f6e5a58179ddd9f563c53f -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 29 22:51:40 2011 +0100 - - Update years - - poppler/Catalog.cc | 2 +- - poppler/Catalog.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit d96efb6c1af621be78e998ba1a228022c3c076fc -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 29 11:13:03 2011 +0200 - - fix comment - - poppler/ViewerPreferences.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 74ec81d66d4d5bc45cccc4aa8794df1c517f2d74 -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 29 11:07:36 2011 +0200 - - viewer preferences: read PrintScaling and Duplex - - poppler/ViewerPreferences.cc | 24 ++++++++++++++++++++++++ - poppler/ViewerPreferences.h | 14 ++++++++++++++ - 2 files changed, 38 insertions(+), 0 deletions(-) - -commit b41bcd484dd7a93a339270926c57caa524059d8f -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 29 10:58:46 2011 +0200 - - free the viewerPreferences Object - - poppler/Catalog.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 1dd88d0b6b7cbfda76e81902a351c89457a061a8 -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 29 09:58:10 2011 +0200 - - read the ViewerPreferences dict once, and construct ViewerPreferences - on demand - - this way it is possible to know whether the ViewerPreferences - dictionary is present in the Catalog - - poppler/Catalog.cc | 24 +++++++++--------------- - poppler/Catalog.h | 3 ++- - 2 files changed, 11 insertions(+), 16 deletions(-) - -commit f10b0b8c88a7df83ada09f32b6cb6fd930fcb748 -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 29 09:57:46 2011 +0200 - - assume the prefDict is not null - - poppler/ViewerPreferences.cc | 4 ---- - 1 files changed, 0 insertions(+), 4 deletions(-) - -commit d4a5ea45057cad531a8979cf9861ac05cdd56613 -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 29 09:54:22 2011 +0200 - - fix variable name for DisplayDocTitle - - poppler/ViewerPreferences.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit cf84a05ae524aa9b266463cc23cccc3860ff1ba3 -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 28 23:18:02 2011 +0200 - - viewer preferences: read NonFullScreenPageMode and Direction - - poppler/ViewerPreferences.cc | 26 ++++++++++++++++++++++++++ - poppler/ViewerPreferences.h | 15 +++++++++++++++ - 2 files changed, 41 insertions(+), 0 deletions(-) - -commit 460253a6705a227ff7c36e9c31cceb93cce4d78b -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 28 22:37:54 2011 +0200 - - read some boolean viewer preferences - - - HideToolbar - - HideMenubar - - HideWindowUI - - FitWindow - - CenterWindow - - DisplayDocTitle - - poppler/ViewerPreferences.cc | 41 - +++++++++++++++++++++++++++++++++++++++++ - poppler/ViewerPreferences.h | 13 +++++++++++++ - 2 files changed, 54 insertions(+), 0 deletions(-) - -commit 9fa9ac3546674120532bb512b82af6471cbebf01 -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 28 19:58:16 2011 +0200 - - add skeleton for ViewerPreferences - - a small class for handling the ViewerPreferences dictionary of - a Catalog, - created on demand and in any occasion (so defaults are in one - place only) - - CMakeLists.txt | 2 ++ - poppler/Catalog.cc | 23 +++++++++++++++++++++++ - poppler/Catalog.h | 4 ++++ - poppler/Makefile.am | 2 ++ - poppler/ViewerPreferences.cc | 30 ++++++++++++++++++++++++++++++ - poppler/ViewerPreferences.h | 34 ++++++++++++++++++++++++++++++++++ - 6 files changed, 95 insertions(+), 0 deletions(-) - -commit c6081f0bf00d7dcdfa1d09e91e4c9a1fe5a54ad6 -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 28 19:55:00 2011 +0200 - - delete the temporary buffers created by pdfDocEncodingToUTF16() - - poppler/Form.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit d94d5056d5570e2f5cb578736eba12317ea63fa4 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 28 18:20:31 2011 +0200 - - glib-demo: show the activation action of form fields if there's one - - glib/demo/forms.c | 21 ++++++++++++++++----- - 1 files changed, 16 insertions(+), 5 deletions(-) - -commit ba0f36b76d0c2fd4ef39f3013fc125a53747c03f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 28 18:17:52 2011 +0200 - - glib: Add poppler_form_field_get_action() - - Fixes bug #33174. - - glib/poppler-form-field.cc | 34 - ++++++++++++++++++++++++++++++++++ - glib/poppler-form-field.h | 1 + - glib/poppler-private.h | 1 + - glib/reference/poppler-sections.txt | 1 + - 4 files changed, 37 insertions(+), 0 deletions(-) - -commit ae5b9cf884ce38dde409c3e5b0f6c46f7d6327d2 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 28 17:43:53 2011 +0200 - - Revert "Patch for embedding videos in to the pdf" - - This reverts commit 66575c990f379871e4b796befc899de178332670. - - It introduces new API to glib frontend that is wrong and will be - changed soon. - - glib/poppler-annot.cc | 33 ----- - glib/poppler-annot.h | 5 - - poppler/Annot.cc | 377 - ------------------------------------------------- - poppler/Annot.h | 2 - - 4 files changed, 0 insertions(+), 417 deletions(-) - -commit b7edd4c93539585652961ecf2db9c4462415c8bc -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Mar 27 12:31:19 2011 +0200 - - annot: Always create appearance streams when NeedAppearances is true - - Fixes regression in document example_054.pdf - - poppler/Annot.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit e9350899e77c28452c48b56349ad7758b3fd47ba -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Mar 24 20:09:18 2011 +0000 - - Introduce splash-friendly getRGBLine functions - - So it does not need to pack and unpack the color again and again - - poppler/GfxState.cc | 248 - +++++++++++++++++++++++++++++++++++++++++-- - poppler/GfxState.h | 22 +++- - poppler/SplashOutputDev.cc | 43 ++------ - 3 files changed, 265 insertions(+), 48 deletions(-) - -commit 7b08795a9541e9fa01836b4c7fd63f6fe295ad80 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Mar 24 12:16:07 2011 +0100 - - glib: Add g_return macros to make sure index is correct in form - field choice methods - - glib/poppler-form-field.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit f1102fccd2899bc7f97414b1e2a295c59f03da22 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Mar 24 12:15:30 2011 +0100 - - glib-demo: Fix a crash when a choice form field has no items selected - - glib/demo/forms.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit b3971ee6bca6b14b75f046c831a31ac1e5e3241e -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 22 22:08:27 2011 +0000 - - kill this TODO, n is too small - - poppler/SplashOutputDev.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 1064d75817401fe24f728c189b450e9e906beb56 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 22 20:43:05 2011 +0000 - - kill unmaintained abiword backend - - CMakeLists.txt | 16 - - configure.ac | 16 - - poppler/ABWOutputDev.cc | 1179 - ----------------------------------------------- - poppler/ABWOutputDev.h | 141 ------ - poppler/Makefile.am | 17 - - utils/CMakeLists.txt | 10 - - utils/Makefile.am | 18 +- - utils/pdftoabw.cc | 201 -------- - 8 files changed, 2 insertions(+), 1596 deletions(-) - -commit abf167af8b15e5f3b510275ce619e6fdb42edd40 -Author: Thomas Freitag <Thomas.Freitag@alfa.de> -Date: Mon Mar 21 21:34:46 2011 +0000 - - Implement tiling/patterns in SplashOutputDev - - Fixes bug 13518 - - poppler/CairoOutputDev.cc | 5 +- - poppler/CairoOutputDev.h | 10 +- - poppler/Gfx.cc | 6 +- - poppler/OutputDev.h | 6 +- - poppler/PSOutputDev.cc | 8 +- - poppler/PSOutputDev.h | 6 +- - poppler/PreScanOutputDev.cc | 22 ++++- - poppler/PreScanOutputDev.h | 16 +++- - poppler/SplashOutputDev.cc | 265 - +++++++++++++++++++++++++++++++++++++++++++ - poppler/SplashOutputDev.h | 12 ++ - 10 files changed, 334 insertions(+), 22 deletions(-) - -commit 66575c990f379871e4b796befc899de178332670 -Author: Srinivas Adicherla <srinivas.adicherla@gmail.com> -Date: Thu Mar 17 20:14:05 2011 +0000 - - Patch for embedding videos in to the pdf - - glib/poppler-annot.cc | 33 +++++ - glib/poppler-annot.h | 5 + - poppler/Annot.cc | 377 - +++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Annot.h | 2 + - 4 files changed, 417 insertions(+), 0 deletions(-) - -commit ec1917968d2f1c7a00772a0829b3fcc6957d8f3c -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Mar 14 00:13:26 2011 +0000 - - Only build gtk-test if we have to build gtk-test - - test/Makefile.am | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 1acbb01e72a22f70f00dc058ff206e3bc05bc0ab -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Mar 13 14:49:48 2011 +0000 - - (C) years - - poppler/CachedFile.cc | 2 +- - poppler/CurlCachedFile.cc | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit bc8aeb269aa92406081f749064ceff75bb3145e7 -Author: Hib Eris <hib@hiberis.nl> -Date: Sat Mar 12 23:17:59 2011 +0100 - - Check response code of libcurl call - - poppler/CachedFile.cc | 8 +++++++- - poppler/CurlCachedFile.cc | 12 +++++++++--- - 2 files changed, 16 insertions(+), 4 deletions(-) - -commit 0268cedee5b460835a4747d0ea41bbe12269310d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Mar 12 15:24:30 2011 +0100 - - cairo: Fix typo - - poppler/CairoFontEngine.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 5aa369e68e5c9f14efc888c7b26da06aa8bd2a78 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 12 13:47:34 2011 +0000 - - Remove unused variable - - poppler/CurlCachedFile.cc | 2 -- - 1 files changed, 0 insertions(+), 2 deletions(-) - -commit c0dffbe28f91b30b36310ab0b9a9b948610550ae -Author: Pino Toscano <pino@kde.org> -Date: Sat Mar 12 12:15:58 2011 +0100 - - update copyright years - - cpp/poppler-document-private.h | 2 +- - cpp/poppler-document.cpp | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit b8fab173ffdd1e62a34b530228d08bc5ec6725ac -Author: Pino Toscano <pino@kde.org> -Date: Sat Mar 12 12:13:05 2011 +0100 - - [cpp] init the globalParams early in the document loading - - introduce a small RAII class to init/deinit the globalParams, and - make document_private inherit from it - - cpp/poppler-document-private.h | 17 ++++++++---- - cpp/poppler-document.cpp | 52 - +++++++++++++++++++++------------------ - 2 files changed, 39 insertions(+), 30 deletions(-) - -commit a97a54cb22def2a9fc381fb81842dad9e5c3931f -Author: Pino Toscano <pino@kde.org> -Date: Sat Mar 12 12:12:11 2011 +0100 - - forms: delete tmp_str after being converted to GooString - - poppler/Form.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 9671fe07f8c9ade956742cb141b99518c3b12bad -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Mar 11 00:05:52 2011 +0000 - - getForm can return NULL, do not crash if that happens - - poppler/Annot.cc | 10 ++++++---- - 1 files changed, 6 insertions(+), 4 deletions(-) - -commit bd32672899f5ca4509ec9311de8092d14bec8ab1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Mar 10 23:33:15 2011 +0000 - - update copyright years - - poppler/Catalog.cc | 2 +- - qt4/src/poppler-form.cc | 1 + - 2 files changed, 2 insertions(+), 1 deletions(-) - -commit 841f3bbca37015ec2c58d7b85a73cef5681294f8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Mar 10 23:30:51 2011 +0000 - - Do not infinite loop - - poppler/Form.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit f2fcafdc2b982d9bbed3c01bc7d45c8bd0603f19 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Mar 10 23:27:41 2011 +0000 - - Create the globalParams before the pdfdoc - - qt4/src/poppler-private.cc | 5 +---- - qt4/src/poppler-private.h | 12 ++++++++---- - 2 files changed, 9 insertions(+), 8 deletions(-) - -commit f956b03604b195623ab034a06942a39547adf905 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Mar 10 00:01:18 2011 +0000 - - compile - - qt4/src/poppler-form.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit f0ec3bedc5490aa35e54563019fcf2c3f8b7647d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Mar 9 20:54:15 2011 +0100 - - forms: Remove unused method FormWidget::updateField() - - poppler/Form.cc | 22 ---------------------- - poppler/Form.h | 2 -- - 2 files changed, 0 insertions(+), 24 deletions(-) - -commit 93c25e100ae2564b9a866b95bed16d2fac619bd7 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Mar 9 20:49:32 2011 +0100 - - forms: Rename FormField::createActivationAction() to - FormField::getActivationAction() - - And use the existing action from the AnnotWidget instead of creating a - new one. - - poppler/Form.cc | 11 ++--------- - poppler/Form.h | 2 +- - qt4/src/poppler-form.cc | 3 +-- - 3 files changed, 4 insertions(+), 12 deletions(-) - -commit 59fb0489bfabfd8acccafdcd0361ce005664962a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Mar 9 20:19:24 2011 +0100 - - annots: Check whether we need to create an appearance stream in - AnnotWidget::draw() - - And never modify the AP entry since it breaks check and radio buttons - that doesn't have an appearance for the Off state. - - poppler/Annot.cc | 79 - +++++++++--------------------------------------------- - poppler/Annot.h | 1 - - 2 files changed, 13 insertions(+), 67 deletions(-) - -commit f3b00ef51ceef6d9b7a1aa7e0f19249abf8ca6f3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Mar 9 18:19:12 2011 +0100 - - annots: Add Annot::setAppearanceState() and use it from FormWidget - - This method not only updates the current appearance state, but - also the - appearance stream corresponding to the new state. - - poppler/Annot.cc | 43 ++++++++++++++++++++++++++++++++++++------- - poppler/Annot.h | 2 ++ - poppler/Form.cc | 7 +++---- - 3 files changed, 41 insertions(+), 11 deletions(-) - -commit d59561212253302d4dcb23392bb8306b8e5c68d1 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Mar 9 17:35:28 2011 +0100 - - forms: Make FormWidget use a real widget annotation instead of - duplicating code - - When creating annotations, if it's a widget annotation, look first - whether it has already been created by a FormWidget and reuse - it instead - of duplicating it. - - poppler/Annot.cc | 42 +++++++++++++-------- - poppler/Annot.h | 2 +- - poppler/Catalog.cc | 2 +- - poppler/Form.cc | 107 - ++++++++++++++++++++++++--------------------------- - poppler/Form.h | 23 +++++------ - 5 files changed, 89 insertions(+), 87 deletions(-) - -commit 2dd7e1ba09d4501adf9d10ab4cb8ee003cace74a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Mar 9 10:25:00 2011 +0100 - - forms: Move modified flag from FormWidget to FormField - - poppler/Form.cc | 16 ++++++++-------- - poppler/Form.h | 6 ++++-- - 2 files changed, 12 insertions(+), 10 deletions(-) - -commit b04f03be7e43e309af5f164ef71788e7b8915841 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Mar 9 10:17:57 2011 +0100 - - forms: Move field names handling from FormWidget to FormField - - poppler/Form.cc | 149 - ++++++++++++++++++++++++++++++------------------------- - poppler/Form.h | 20 +++++--- - 2 files changed, 95 insertions(+), 74 deletions(-) - -commit abe1e0d5a37bcdb4376901306d3adccfb33ff3b4 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Mar 8 21:39:00 2011 +0100 - - annots: Make sure no border is drawn for invalid border arrays - - Fixes regression on ClassSchedule_2091_ENGL.pdf - - poppler/Annot.cc | 8 ++++++-- - poppler/Annot.h | 2 +- - 2 files changed, 7 insertions(+), 3 deletions(-) - -commit 14d145371e86ccb92f09b1ca750ced52171b2885 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Mar 8 20:14:57 2011 +0100 - - forms: Remove loadDefaults method - - Moving the code to initialize form field stuff to form field - constructors and widget stuff to form widget constructors. Clean up an - simplify the code. - - poppler/Form.cc | 227 - +++++++++++++++++++++---------------------------------- - poppler/Form.h | 21 +---- - 2 files changed, 91 insertions(+), 157 deletions(-) - -commit 0585d7820455c93fe5b732b7a9a20d423df47075 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Mar 8 15:36:45 2011 +0100 - - forms: Handle field values (V entry) by field objects - - Rather than AnnotWidget or FormWidget, and use the form field object - from AnnotWidget to get the values. - - poppler/Annot.cc | 52 ++++---- - poppler/Form.cc | 400 - ++++++++++++++++++++++++++---------------------------- - poppler/Form.h | 21 ++-- - 3 files changed, 230 insertions(+), 243 deletions(-) - -commit dc100eb9080fb58164fc94c86bfb1728cecd21c3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 7 20:14:27 2011 +0100 - - annots: Use the field object to get MaxLen instead of parsing the - field dict - - poppler/Annot.cc | 10 ++++------ - 1 files changed, 4 insertions(+), 6 deletions(-) - -commit 7149634f184dc3f07f2a70c296aac207ef24952c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 7 19:55:45 2011 +0100 - - forms: Parse the default resources dictionary in Form - - And use it in AnnotWidget instead of parsing the dictionary again. - - poppler/Annot.cc | 65 - ++++++++++++++++++++--------------------------------- - poppler/Annot.h | 12 +++++----- - poppler/Form.cc | 16 +++++++++++++ - poppler/Form.h | 5 ++++ - 4 files changed, 52 insertions(+), 46 deletions(-) - -commit 2e73f17975811177c0b3c16b8bd97c7eb912bc44 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 7 18:41:48 2011 +0100 - - forms: Parse field variable text entries (DA, Q) in FormField() - - And use them from AnnotWidget instead of parsing the field dictionary - again. - - poppler/Annot.cc | 28 +++++----------------------- - poppler/Form.cc | 17 +++++++++++++++++ - poppler/Form.h | 9 +++++++++ - 3 files changed, 31 insertions(+), 23 deletions(-) - -commit 8677a34911563a712b2dcf0b6e411cee0bad9c44 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 7 18:24:07 2011 +0100 - - forms: Parse default variable text entries (DA, Q) on Form - construction - - And use them from AnnotWidget instead of parsing the acroForm - dictionary - again. - - poppler/Annot.cc | 99 - +++++++++++++++++++++++++---------------------------- - poppler/Form.cc | 11 ++++++ - poppler/Form.h | 12 ++++++ - 3 files changed, 70 insertions(+), 52 deletions(-) - -commit 41420bfd88685d9b1ac44dc7444ea3abee92097c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 7 09:18:25 2011 +0100 - - annots: Only parse the dash array for dashed borders - - poppler/Annot.cc | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -commit c198a3f83d8508ddaf84564871d9202ffba8096c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Mar 6 17:52:01 2011 +0100 - - annots: Use the field object to get the top index of a form field - choice - - Instead of parsing the field dictionary again. - - poppler/Annot.cc | 14 ++------------ - poppler/Annot.h | 1 - - 2 files changed, 2 insertions(+), 13 deletions(-) - -commit 5cf803ec181dbf1112f67b4f4a9c77b88d102e3b -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Mar 6 17:47:18 2011 +0100 - - forms: Add FormFieldChoice::getTopIndex() - - poppler/Form.cc | 5 +++++ - poppler/Form.h | 5 ++++- - 2 files changed, 9 insertions(+), 1 deletions(-) - -commit 1248f59e2045749ece1f5a5e579b866b8330a752 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Mar 6 17:41:33 2011 +0100 - - annots: Draw widget background using the existing appearance - characteristics - - Instead of parsing the appearance characteristics dictionary again - - poppler/Annot.cc | 23 +++++++---------------- - 1 files changed, 7 insertions(+), 16 deletions(-) - -commit dc249ad4529997001ae1f96dcfd7351766ca8e8d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Mar 6 17:34:33 2011 +0100 - - annots: Factor out generateFieldAppearance() - - Adding methods to render every form field type and using the field - object when possible instead of parsing the field dictionary again. - - poppler/Annot.cc | 312 - +++++++++++++++++++++++------------------------------- - poppler/Annot.h | 8 +- - 2 files changed, 138 insertions(+), 182 deletions(-) - -commit f98b3540db731026e0febf1f010548f0f0ef9142 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Mar 6 15:57:22 2011 +0100 - - annots: Move code to draw the border of an AnnotWidget to a new method - - And use the field object instead of parsing the field dictionary - again. - - poppler/Annot.cc | 242 - +++++++++++++++++++++++++++--------------------------- - poppler/Annot.h | 3 + - 2 files changed, 124 insertions(+), 121 deletions(-) - -commit 9854f3173f994bbe3f57d33bd1d0e045833859c2 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Mar 6 15:56:06 2011 +0100 - - annots: Add AnnotColor::adjustColor() to be able to adjust an - existing AnnotColor - - poppler/Annot.cc | 7 +++++++ - poppler/Annot.h | 2 ++ - 2 files changed, 9 insertions(+), 0 deletions(-) - -commit 2bf82f27bd9c8f97e5484ea97be661f65221163d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Mar 5 15:30:01 2011 +0100 - - annots: Remove unused class AnnotBorderStyle - - poppler/Annot.cc | 22 ---------------------- - poppler/Annot.h | 36 ------------------------------------ - 2 files changed, 0 insertions(+), 58 deletions(-) - -commit 128dcaf282f418d8c45cea4df6ad4d3167b3e39c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Mar 5 13:12:49 2011 +0100 - - annots: Add AnnotBorder::parseDashArray() to parse dash arrays - - The code was duplicated in AnnotBorderArray and AnnotBorderBS - - poppler/Annot.cc | 91 - ++++++++++++++++++----------------------------------- - poppler/Annot.h | 4 ++- - 2 files changed, 34 insertions(+), 61 deletions(-) - -commit ec2643d311e0ce55f0ff5309c0c420140d053a50 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 1 19:50:55 2011 +0000 - - fix copyright years - - poppler/Annot.cc | 2 +- - poppler/Annot.h | 2 +- - poppler/ArthurOutputDev.cc | 2 +- - poppler/ArthurOutputDev.h | 2 +- - poppler/FontInfo.cc | 1 + - poppler/Form.cc | 4 ++-- - poppler/Form.h | 3 ++- - poppler/GlobalParams.cc | 1 + - poppler/GlobalParams.h | 1 + - poppler/Link.cc | 2 +- - poppler/Link.h | 2 +- - poppler/OutputDev.h | 2 +- - poppler/PDFDoc.cc | 2 +- - poppler/Page.cc | 2 +- - poppler/Page.h | 2 +- - poppler/TextOutputDev.cc | 2 +- - poppler/TextOutputDev.h | 2 +- - qt4/src/poppler-form.cc | 2 +- - qt4/src/poppler-link-extractor-private.h | 2 +- - qt4/src/poppler-link-extractor.cc | 2 +- - qt4/src/poppler-page.cc | 2 +- - qt4/src/poppler-private.h | 2 +- - utils/HtmlOutputDev.cc | 2 +- - utils/HtmlOutputDev.h | 4 ++-- - 24 files changed, 27 insertions(+), 23 deletions(-) - -commit 900974ebfbe6ab7ae21ed151ff79f9578d2bdae2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 1 19:42:22 2011 +0000 - - Fix years - - poppler/poppler-config.h.cmake | 2 +- - poppler/poppler-config.h.in | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit c804db4d8261274b013f8c340abfc921c77bb3cf -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 1 19:22:31 2011 +0100 - - move the fontconfig.h inclusion from GlobalParams.h to GlobalParams.cc - - this avoids a dependency on the fontconfig headers to the users of - the core - - poppler/GlobalParams.cc | 4 ++++ - poppler/GlobalParams.h | 3 --- - 2 files changed, 4 insertions(+), 3 deletions(-) - -commit 2d77c7f9c41f1121354413bcdc3beded35a247f9 -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 1 16:51:04 2011 +0100 - - create the GooString on stack, not in heap - - poppler/Annot.cc | 5 ++--- - poppler/Form.cc | 5 ++--- - 2 files changed, 4 insertions(+), 6 deletions(-) - -commit 5dc2ef0e27ac48c81739cdfe8e8070ebbc410c87 -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 1 16:39:36 2011 +0100 - - annots: avoid temporary GooString's just for comparisons, just - use strcmp - - other than reducing few GooString allocations, strcmp should be much - faster than GooString::cmp - - poppler/Annot.cc | 128 - +++++++++++++++++++++++------------------------------ - 1 files changed, 56 insertions(+), 72 deletions(-) - -commit 535e48ab764ee4e377451ddd032044b51b842c4a -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 1 16:07:34 2011 +0100 - - [qt4] ignore "Widget" annotations - - they usually are forms or something else we do not support, so do - not complain about them for now - - qt4/src/poppler-page.cc | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit f0e5c36e7f1c5d0f0f51e3a6a6acd6c423f86df7 -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 1 16:02:54 2011 +0100 - - annots: avoid a temporary GooString just for comparisons, just - use strcmp - - other than reducing few GooString allocations, strcmp should be much - faster than GooString::cmp - - poppler/Annot.cc | 54 - ++++++++++++++++++++++++++---------------------------- - 1 files changed, 26 insertions(+), 28 deletions(-) - -commit 58a3b83a8fbd8b13eb98c4f677f4ed19b6ae44cd -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 1 15:35:45 2011 +0100 - - fix appendAnnot() invocation on annotations reading - - 1) check that the annot is actually a non-NULL pointer (otherwise - doing anything else is pointless) - 2) call appendAnnot() only if the annotation isOk() (that will - increase the annot refcount), but always decrement the refcount - (so valid annotation will have it at 1, while invalid will be deleted) - - poppler/Annot.cc | 8 ++++++-- - 1 files changed, 6 insertions(+), 2 deletions(-) - -commit 664865a2ddca9c20ac36a41aef52ebf12eab838d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Mar 1 10:56:40 2011 +0100 - - Merge Link and AnnotLink code - - Annotations now belong to the Page and are created only once on - demand. - Annots are now ref counted and Links is a list of AnnotLink objects, - Link object has been removed. The AnnotLink API is mostly the - same than - Link and frontends APIs are not affected. - Qt4 changes made by Pino Toscano. - - glib/poppler-document.cc | 2 +- - glib/poppler-page.cc | 29 +++---- - glib/poppler-private.h | 1 - - poppler/Annot.cc | 79 +++++++++++++------ - poppler/Annot.h | 24 ++++-- - poppler/ArthurOutputDev.cc | 4 - - poppler/ArthurOutputDev.h | 3 - - poppler/CairoOutputDev.cc | 3 - - poppler/CairoOutputDev.h | 6 -- - poppler/FontInfo.cc | 4 +- - poppler/Form.cc | 36 +++------ - poppler/Form.h | 5 +- - poppler/Link.cc | 124 - +++++------------------------- - poppler/Link.h | 43 +--------- - poppler/OutputDev.h | 4 +- - poppler/PDFDoc.cc | 4 +- - poppler/Page.cc | 63 ++++++++-------- - poppler/Page.h | 11 ++- - poppler/TextOutputDev.cc | 9 +- - poppler/TextOutputDev.h | 10 +- - qt4/src/poppler-link-extractor-private.h | 2 +- - qt4/src/poppler-link-extractor.cc | 3 +- - qt4/src/poppler-page.cc | 12 +-- - utils/HtmlOutputDev.cc | 7 +- - utils/HtmlOutputDev.h | 4 +- - 25 files changed, 188 insertions(+), 304 deletions(-) - -commit 1f6573e949aaba0eb0a4c2f9cd73d7ad45ba67be -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 27 21:53:32 2011 +0100 - - small fixes to the pdftohtml manpage - - - capitalize HTML, PDF, XML, PNG - - dont -> do not - - fix UTF-8 character - - fix hypens used as minus - - utils/pdftohtml.1 | 18 +++++++++--------- - 1 files changed, 9 insertions(+), 9 deletions(-) - -commit e927384897595f1bda5f7e41b552602f9cc8ed95 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 27 16:39:59 2011 +0100 - - [qt4] fix caption of push button fields - - instead of asking the 'onStr' of the underlying form widget, - take (if available) the 'MK' entry, i.e. the appearance - characteristics dictionary, - and use the normal caption of that - - qt4/src/poppler-form.cc | 25 +++++++++++++++++++++++-- - 1 files changed, 23 insertions(+), 2 deletions(-) - -commit 5b24ee2c934feea1b7d46c8ec423d1c547258be2 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 27 16:24:22 2011 +0100 - - annots: 'CA', 'RC' and 'AC' are strings, not names - - poppler/Annot.cc | 12 ++++++------ - 1 files changed, 6 insertions(+), 6 deletions(-) - -commit e64f6cb23e9a564b3f80daea9abcfe8bb29189eb -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 27 15:22:32 2011 +0100 - - make getOnStr() return the GooString* instead of its char* - - ... and modify its use accordingly - this way it is easier to check for a numm onStr, without the risk - of dereferencing a NULL pointer - - poppler/Form.cc | 6 +++--- - poppler/Form.h | 2 +- - qt4/src/poppler-form.cc | 7 ++----- - 3 files changed, 6 insertions(+), 9 deletions(-) - -commit f9c978fc2ab8a1f901f2136ae95deb9d41076155 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 27 14:39:52 2011 +0100 - - [qt4] directly use the dict - - qt4/src/poppler-form.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 071966e48577c515b17a424baeae85ae4fc80a20 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 27 14:21:11 2011 +0100 - - [qt4] move textAlignment() as a private function - - qt4/src/poppler-form.cc | 33 +++++++++++++++++++++++++++++++-- - qt4/src/poppler-private.h | 25 ------------------------- - 2 files changed, 31 insertions(+), 27 deletions(-) - -commit adc236771f11eeb4197064747836e8ed3fbfeba9 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 27 14:13:50 2011 +0100 - - [qt4] use FormWidget::getAlternateUiName() - - ... instead of read the value on our own - - qt4/src/poppler-form.cc | 9 ++------- - 1 files changed, 2 insertions(+), 7 deletions(-) - -commit 9f111483cf6196dedf3cee380c3e5224776203ea -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 27 14:12:16 2011 +0100 - - forms: read the TU field as alternateUiName - - poppler/Form.cc | 8 ++++++++ - poppler/Form.h | 2 ++ - 2 files changed, 10 insertions(+), 0 deletions(-) - -commit cfaadaa9e4a857fcea3b5a2cadacd352de6c469d -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 27 14:07:35 2011 +0100 - - [qt4] use FormWidget::getPartialName() - - ... instead of read the value on our own - - qt4/src/poppler-form.cc | 9 ++------- - 1 files changed, 2 insertions(+), 7 deletions(-) - -commit 2478896a0c1f6e5842f3d8b172e4cc7e6bd58cd8 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 27 13:24:09 2011 +0100 - - [qt4] use the new FormWidget::createActivationAction() - - qt4/src/poppler-form.cc | 13 +++---------- - 1 files changed, 3 insertions(+), 10 deletions(-) - -commit 1dcb683a5c2dd6a1de654e90a4394f65d63dc296 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 27 13:22:48 2011 +0100 - - add FormWidget::createActivationAction() - - used to get and create a new activation action object of a form widget - - poppler/Form.cc | 12 ++++++++++++ - poppler/Form.h | 3 +++ - 2 files changed, 15 insertions(+), 0 deletions(-) - -commit bd4cc73e438a7d4d4a10c50c69e65b5bdc63ddf2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 27 11:04:45 2011 +0000 - - Some more missing copyrights - - poppler/CairoOutputDev.cc | 2 +- - poppler/CairoOutputDev.h | 2 +- - poppler/Gfx.cc | 2 +- - poppler/OutputDev.h | 2 +- - poppler/TextOutputDev.cc | 1 + - 5 files changed, 5 insertions(+), 4 deletions(-) - -commit 6c2ed4781d8ecfffdf24e1459aafd554b3527686 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 27 10:55:22 2011 +0000 - - Add 2011 years - - poppler/Annot.cc | 2 +- - poppler/CairoFontEngine.cc | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit b297fb9de0779ac84d5b7ef68c792afefe598320 -Author: William Bader <williambader@hotmail.com> -Date: Sun Feb 27 01:48:55 2011 +0000 - - access the pixels directly - - Faster, bug 34005 - - splash/Splash.cc | 21 +++++++++++---------- - 1 files changed, 11 insertions(+), 10 deletions(-) - -commit de77e26759f1c33698abe248ad29b75c329a043c -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 27 01:39:23 2011 +0000 - - Fix crash in some pdf - - Has to be 3 and not nComps since it's a output buffer, a the input one - Bug 34357 - - poppler/GfxState.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 4f82a2e08cb2c930956c6b38030fa7b015a0de5a -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 27 01:38:33 2011 +0000 - - Implement GfxDeviceCMYKColorSpace::getRGBLine - - poppler/GfxState.cc | 22 +++++++++++++++++++++- - poppler/GfxState.h | 12 +++++++++++- - 2 files changed, 32 insertions(+), 2 deletions(-) - -commit 4980b99214281dcab8f82b5b618aadc24de371f4 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Feb 26 14:00:33 2011 +0100 - - annots: Don't assume y1 > y3 for quad points of a highlight annotation - - Fixes https://bugzilla.gnome.org/show_bug.cgi?id=643028 - - poppler/Annot.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit e6ae0f8609cd66e9e124af59adefdff9d610dcd4 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Feb 26 13:23:47 2011 +0100 - - cairo: Handle font type fontCIDType2OT when creating freetype font - - Fixes https://bugzilla.gnome.org/show_bug.cgi?id=643273 - - poppler/CairoFontEngine.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 22eb01d305ea2560d26417ca8df9c0465d4e9a82 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Feb 26 12:17:49 2011 +0100 - - cairo: Fix a crash when rendering a document with inline images - - poppler/CairoOutputDev.cc | 28 ++++++++++++++++------------ - poppler/CairoOutputDev.h | 2 +- - 2 files changed, 17 insertions(+), 13 deletions(-) - -commit a6599dd1fda37186b876b5b2de80be1731dd5946 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Feb 26 11:59:03 2011 +0100 - - glib: Add some more introspection annotations - - glib/poppler-attachment.cc | 2 +- - glib/poppler-document.cc | 4 ++-- - glib/poppler-media.cc | 2 +- - glib/poppler-page.cc | 6 +++--- - 4 files changed, 7 insertions(+), 7 deletions(-) - -commit 89c66f236c85ac5a53ae12b01cdebc30e27b78d3 -Author: Peter Ward <peteraward@gmail.com> -Date: Sat Feb 26 11:39:58 2011 +0100 - - glib: Add missing "out" annotation to poppler_page_get_size() - - glib/poppler-page.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 7a68199b342eb3f33733f7d7446ede8f94130fba -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Feb 26 11:09:27 2011 +0100 - - cairo: Check if cairo version is == 1.11.2 to use mesh gradients api - - Cairo API has changed in 1.11.3. - - poppler/CairoOutputDev.cc | 4 ++-- - poppler/CairoOutputDev.h | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - -commit 97e7ab1a4eea2160f3f0847d10f6c16f2d66ef11 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Feb 25 20:33:39 2011 +0000 - - Do not ask freetype for a font of size 0x0 - - Fixes rendering bug at 34602 - - splash/SplashFTFont.cc | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit 3590a2d38082fc705040cdb31bf0b22ff12dd3e4 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Thu Feb 24 18:47:35 2011 +0000 - - Fix rendering of some substituted fonts - - More info in bug 34522 - - poppler/GfxFont.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 384753f1f9f780687bdead99a6548ef8598b898a -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Feb 21 19:19:48 2011 +0000 - - Use gfree since we allocate with gmalloc - - Bug 34512 - - goo/GooString.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit d775420c3c6cb5a29ff74712d3fc210fcb4b4627 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 19 11:19:57 2011 +0000 - - Do not delete textOut twice when using -bbox - - utils/pdftotext.cc | 3 +-- - 1 files changed, 1 insertions(+), 2 deletions(-) - -commit e1a56d73b066e7152ccf6ccf36206def7956cb00 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Feb 16 00:06:45 2011 +0000 - - Lots of rendering improvements by Thomas and Andrea - - Function.cc: Stitching functions incorrectly reported 0 as output - size. - Function.cc: Remove cache from PostScriptFunction - Function.cc: Make PSStack stack allocated - GfxState.cc & GfxState.h: Abstract GfxSimpleShading, add Matrix::norm - method, add simple caching, parameter range computation - SplashOutputDev.cc & SplashOutputDev..h & Splash.cc & SplashPattern.h: - Improve splash rendering, implement radial and abstract simple - shadings - in splash - - And maybe something more, look at the - Followup Bug 32349 & Poppler: More shading fun ;-) - thread for more info - - poppler/Function.cc | 122 +-------- - poppler/Function.h | 3 +- - poppler/GfxState.cc | 638 - ++++++++++++++++++++++++++++++++++++++----- - poppler/GfxState.h | 90 +++++-- - poppler/SplashOutputDev.cc | 253 +++++++++++++++-- - poppler/SplashOutputDev.h | 67 ++++- - splash/Splash.cc | 126 +++++++--- - splash/SplashPattern.h | 7 +- - 8 files changed, 1008 insertions(+), 298 deletions(-) - -commit 675b3505f963a0110dac7f865654232cbb865ef5 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Feb 13 16:21:52 2011 +0100 - - tests: Merge splash and cairo tests into a single gtk-test tool - - With a command line option to use cairo or splash backends. - - test/CMakeLists.txt | 20 +-- - test/Makefile.am | 29 ++--- - test/gtk-cairo-test.cc | 190 ---------------------- - test/gtk-splash-test.cc | 311 ------------------------------------- - test/gtk-test.cc | 397 - +++++++++++++++++++++++++++++++++++++++++++++++ - 5 files changed, 412 insertions(+), 535 deletions(-) - -commit 728c022cdc1ea12aa54077d44276f9d7714930d4 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 13 13:25:51 2011 +0100 - - remove more references to the qt3 frontend - - followup of d82f98a274bfa008c218e265a080c4af7ce95131 - - Makefile.am | 3 --- - 1 files changed, 0 insertions(+), 3 deletions(-) - -commit 15e5b3f16015361754fdc14da4a0dde5af887568 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 13 13:23:06 2011 +0100 - - remove more GDK-related stuff - - followup of 149b7fec472beda9d1538e0f26607c9498d504c2 - - Makefile.am | 1 - - cmake/modules/FindGDK.cmake | 22 ---------------------- - config.h.cmake | 3 --- - glib/reference/Makefile.am | 1 - - glib/reference/poppler-sections.txt | 1 - - 5 files changed, 0 insertions(+), 28 deletions(-) - -commit 50aa15a0bd7100fc9b9243de1d6e6f4b59df1488 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 13 13:07:19 2011 +0100 - - remove GDK API here too - - followup of 149b7fec472beda9d1538e0f26607c9498d504c2 - - glib/poppler-features.h.cmake | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit f410cd11268254b9d0422201c9860d775f73fdd8 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Feb 13 12:55:37 2011 +0100 - - gtk-splash-test: Don't use GDK deprecated API - - test/gtk-splash-test.cc | 28 +++++++++++++++------------- - 1 files changed, 15 insertions(+), 13 deletions(-) - -commit a0568e449061d6b6af5485e340cd6f9d3e54ef7c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Feb 13 12:27:22 2011 +0100 - - glib: remove gdk referenes from pkg-config files - - poppler-glib-uninstalled.pc.in | 2 +- - poppler-glib.pc.cmake | 2 +- - poppler-glib.pc.in | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -commit 149b7fec472beda9d1538e0f26607c9498d504c2 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Feb 13 11:51:57 2011 +0100 - - glib: Remove deprecated GDK API - - It removes the GDK dependency so that poppler-glib now only depends on - glib and cairo. - - CMakeLists.txt | 9 -- - configure.ac | 44 +------ - glib/CMakeLists.txt | 14 +-- - glib/Makefile.am | 8 +- - glib/poppler-features.h.in | 6 - - glib/poppler-page.cc | 296 - -------------------------------------------- - glib/poppler-page.h | 34 ----- - 7 files changed, 4 insertions(+), 407 deletions(-) - -commit a5482d64472a81206dd8d0c5bb80007f6d5bb893 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Feb 13 11:40:23 2011 +0100 - - glib: Remove test-poppler-glib, poppler-glib-demo does the same - and more - - glib/CMakeLists.txt | 8 - - glib/Makefile.am | 14 - - glib/test-poppler-glib.cc | 657 - --------------------------------------------- - 3 files changed, 0 insertions(+), 679 deletions(-) - -commit cab0cf028a192772dcb5c3f4aefa0a421e73e9e7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Feb 11 19:42:34 2011 +0000 - - Do not infinite loop in some broken files - - poppler/JBIG2Stream.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 1125cc8ccf386d8e0a0679aa73614bc2cb8037b0 -Author: William Bader <williambader@hotmail.com> -Date: Tue Feb 8 20:27:16 2011 +0000 - - Allow setting the rasterization resolution - - More info at bug 34001 - - poppler/GlobalParams.cc | 15 +++++++++++++++ - poppler/GlobalParams.h | 3 +++ - poppler/PSOutputDev.cc | 7 ++++++- - utils/pdftops.1 | 6 ++++++ - utils/pdftops.cc | 6 ++++++ - 5 files changed, 36 insertions(+), 1 deletions(-) - -commit 96e169b0eca31891f3cd564365d4a2a5c6e2a2c0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Feb 8 19:58:31 2011 +0000 - - Make really sure the uMap static pointer is valid - - It might happen you are extremely unlucky and get the same - globalParams after a new delete/creation - - qt4/src/poppler-private.cc | 51 - +++++++++++++++++++++++++++++++++++++------ - qt4/src/poppler-private.h | 34 ++-------------------------- - 2 files changed, 47 insertions(+), 38 deletions(-) - -commit c3470145f95791167c19a438934a923eab8a93cf -Author: William Bader <williambader@hotmail.com> -Date: Tue Feb 8 19:54:48 2011 +0000 - - Add PS level1 non standard binary output option - - More info at bug 34003 - - poppler/GlobalParams.cc | 18 ++++- - poppler/GlobalParams.h | 5 +- - poppler/PSOutputDev.cc | 227 - +++++++++++++++++++++++++++++++++------------- - utils/pdftops.1 | 7 ++ - utils/pdftops.cc | 8 ++- - 5 files changed, 198 insertions(+), 67 deletions(-) - -commit 37077aa475d2dee81f87daa05297b201eeb99c87 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Feb 7 19:48:28 2011 +0000 - - Make sure tx is inside the bitmap - - Seems to be what the code tried to do, fixes crash in bug 33948 - depending on - the resolution you render it - - poppler/SplashOutputDev.cc | 10 +++++----- - 1 files changed, 5 insertions(+), 5 deletions(-) - -commit 5aa854f70c8f563efe56dafa8bd6b3cdd5c95451 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Feb 6 13:24:35 2011 +0100 - - cairo: Use the new cairo unique id to set the surface id when printing - - Set the unique surface id when attaching jpeg images to the surface so - that cairo can reuse the mime data even when a new surface is created - with the same mime data. This reduces the size of the output file when - printing. - - poppler/CairoOutputDev.cc | 18 ++++++++++++++++-- - poppler/CairoOutputDev.h | 2 +- - 2 files changed, 17 insertions(+), 3 deletions(-) - -commit fe7b8aa4fc78aacf3226d019db74146ceaebd63c -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Feb 2 22:35:40 2011 +0000 - - Workaround bug when converting pdf to ps with level1 - - See bug 31926 for more info - - poppler/PSOutputDev.cc | 2 +- - poppler/PreScanOutputDev.cc | 7 +++++++ - poppler/PreScanOutputDev.h | 7 +++++++ - 3 files changed, 15 insertions(+), 1 deletions(-) - -commit 5984ad081cd609f3146e0da5e22097ef073eb519 -Author: William Bader <williambader@hotmail.com> -Date: Sun Jan 30 17:02:02 2011 +0000 - - Increase precision - - Fixes some issues with pdf from bug 27482 - - poppler/PSOutputDev.cc | 200 - ++++++++++++++++++++++++------------------------ - 1 files changed, 100 insertions(+), 100 deletions(-) - -commit c60d5afbeb986c1b335357202c5f551a3c146a76 -Author: Jim Meyering <meyering@redhat.com> -Date: Mon Jan 24 15:51:20 2011 +0100 - - demo: don't use an uninitialized local variable - - * text.c (pgd_text_get_text): Before this change, when - poppler_page_get_text returned NULL, we'd use "n_recs" uninitialized. - - glib/demo/text.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit a3bdc56e2f086444419eddfcda5d2010a9a6b5c0 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jan 29 11:23:33 2011 +0100 - - glib-demo: Add a tooltip with current selected character in text demo - - To make sure that the offset of the text returned by - poppler_page_get_text() matches - the list of rectangles returned by poppler_page_get_text_layout(). - - glib/demo/text.c | 60 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 60 insertions(+), 0 deletions(-) - -commit bf2d86c8db430595fb3c55edd3f6c8d289bdaeb5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jan 28 20:34:08 2011 +0000 - - Make sure uMap is still valid before using it - - Fixes KDE bug 264667 - - qt4/src/poppler-private.cc | 6 ++++-- - 1 files changed, 4 insertions(+), 2 deletions(-) - -commit e6fb20d7b3bf8ea8aedc1bcd910e035059835b5f -Author: Axel Strübing <axel.struebing@freenet.de> -Date: Fri Jan 28 19:20:15 2011 +0000 - - Extract text of a pdf correctly - - See "[poppler] text extraction does not work" in the mailing list - for more info - - poppler/GfxFont.cc | 14 +++++++++++++- - poppler/GfxFont.h | 2 ++ - 2 files changed, 15 insertions(+), 1 deletions(-) - -commit 4829d36a3b005585db8c8115f7ee81a4e2384780 -Author: Simon Kellner <kellner@kit.edu> -Date: Wed Jan 26 22:59:49 2011 +0000 - - fix labelToIndex on multiple prefixes - - A PDF document can use page label prefixes, for example, to label - only inside a chapter ("A-1" .. "A-<n>", "B-1" .. "B-<m>" et cetera). - When calculating a page index for a given label, poppler would - disregard the page range for all preceding prefixes that do not - match the given prefix. - - poppler/PageLabelInfo.cc | 7 +++---- - 1 files changed, 3 insertions(+), 4 deletions(-) - -commit e57c75fbd95ef8399b0785500f6893465bc808c3 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Mon Jan 24 19:48:09 2011 +1030 - - cairo: Implement Type 4,5,6,7 shadings using cairo mesh gradients - - Fixes bugs #19076 and #32791. - - poppler/CairoOutputDev.cc | 139 - +++++++++++++++++++++++++++++++++++++++++++++ - poppler/CairoOutputDev.h | 12 ++++ - poppler/Gfx.cc | 10 +++- - poppler/OutputDev.h | 2 + - 4 files changed, 161 insertions(+), 2 deletions(-) - -commit 5081356fcc69012e9df95dbf1e3c36e7c1e751c4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jan 25 20:26:25 2011 +0000 - - Fix leak in SplashOutputDev::axialShadedFill - - poppler/SplashOutputDev.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 19dc283c3af597deab297341a37495c06988948b -Author: Thomas Klausner <wiz@danbala.tuwien.ac.at> -Date: Mon Jan 24 19:05:08 2011 +0000 - - Include zlib header since we use things defined there - - goo/PNGWriter.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 5056e33e01ce0f7db1a5401b7b38d30e84eedf69 -Author: Sam Liao <phyomh@gmail.com> -Date: Mon Jan 17 13:07:22 2011 +0800 - - Poppler: Fix line selection, dont check y for Line selection - - When a line is selected while the Y values of selection is - not in the y range of words, the render will render the - line with reverse color while the words does not show up. - - This fix neglect the Y vaules to make sure that the words - also displayed when line is selected. - - poppler/TextOutputDev.cc | 16 ++++++++-------- - 1 files changed, 8 insertions(+), 8 deletions(-) - -commit 88812e716c1a0c87a504118d47eb4cc6f52962fa -Author: Andreas Hartmetz <ahartmetz@gmail.com> -Date: Fri Jan 21 23:33:47 2011 +0000 - - Add Hinting API to ArthurOutputDev - - poppler/ArthurOutputDev.cc | 11 +++++++++-- - poppler/ArthurOutputDev.h | 15 ++++++++++++++- - 2 files changed, 23 insertions(+), 3 deletions(-) - -commit dc5ec4668bdfe3b6ba41f0a2e551bbc07f8839ba -Author: Andreas Hartmetz <ahartmetz@gmail.com> -Date: Fri Jan 21 23:32:50 2011 +0000 - - support slight hinting in Splash backend - - cpp/poppler-page-renderer.cpp | 2 +- - poppler/SplashOutputDev.cc | 6 +++++- - poppler/SplashOutputDev.h | 4 +++- - qt4/src/poppler-private.h | 3 ++- - qt4/src/poppler-qt4.h | 4 +++- - splash/SplashFTFont.cc | 27 ++++++++++++++++++--------- - splash/SplashFTFont.h | 2 ++ - splash/SplashFTFontEngine.cc | 10 +++++++--- - splash/SplashFTFontEngine.h | 6 ++++-- - splash/SplashFontEngine.cc | 4 +++- - splash/SplashFontEngine.h | 2 ++ - 11 files changed, 50 insertions(+), 20 deletions(-) - -commit 0c5b1bef9f3f98001cee20061b1eaf20b965c5a9 -Author: William Bader <williambader@hotmail.com> -Date: Fri Jan 21 19:01:45 2011 +0000 - - Fix rendering for some pdf with -level1sep - - Also some speed improvemensts. Bug #32365 - - poppler/PSOutputDev.cc | 207 - +++++++++++++++++++++++++++++++++++++----------- - poppler/PSOutputDev.h | 13 ++- - 2 files changed, 170 insertions(+), 50 deletions(-) - -commit 6cb8965fb8bce6da2a4460e86f592c1ea3a84a5c -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jan 21 18:43:21 2011 +0000 - - fix (C) years - - poppler/CairoOutputDev.cc | 2 +- - poppler/CairoOutputDev.h | 2 +- - qt4/src/poppler-private.cc | 2 +- - qt4/tests/check_strings.cpp | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - -commit 24f9c8924b2135da616386d0fa691fe790b4e7a4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jan 21 08:43:34 2011 +0000 - - Access the correct variable - - Fixes asert on bug 33063 - - poppler/Annot.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 07a8808c22445c421f3064da7e5227dcbf40358b -Author: Pino Toscano <pino@kde.org> -Date: Mon Jan 17 21:34:23 2011 +0100 - - fix unicodeToQString() to correctly decode the Unicode sequence - - Use a UnicodeMap to convert the sequence to UTF-8, and convert from - that to QString. - Also, ignore the last character of the Unicode sequence if it is 0x0. - - Add a couple of testcases for it. - - qt4/src/poppler-private.cc | 30 ++++++++++++++++++++++++------ - qt4/tests/check_strings.cpp | 21 +++++++++++++++++++++ - 2 files changed, 45 insertions(+), 6 deletions(-) - -commit ed367c08d788c88c49de770019bf826cfebb3e2c -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 16 17:25:02 2011 +0000 - - Don't need this either - - configure.ac | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 76ab657dc81ed0af7d9f2efaca2e68d570063001 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 16 17:22:56 2011 +0000 - - And this is the last bit of qt3 cleaning? - - configure.ac | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 9a02856c2762e65b8f03e443e728e05e5a86f65b -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 16 17:21:00 2011 +0000 - - Another qt3 unused file - - m4/qt.m4 | 16 ---------------- - 1 files changed, 0 insertions(+), 16 deletions(-) - -commit 26da7a52d31eb677ab6399de2c07140aa272b35e -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 16 17:17:59 2011 +0000 - - Yet more qt3 cleaning - - configure.ac | 2 -- - 1 files changed, 0 insertions(+), 2 deletions(-) - -commit 8dc9c693abb0033247a338d0f7d1f3f7a57c1a55 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 16 17:14:34 2011 +0000 - - Some more qt3 thigs i forgot to kill - - CMakeLists.txt | 5 - - Makefile.am | 1 - - cmake/modules/FindQt3.cmake | 319 - ------------------------------------------- - 3 files changed, 0 insertions(+), 325 deletions(-) - -commit d82f98a274bfa008c218e265a080c4af7ce95131 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 16 17:13:06 2011 +0000 - - Kill qt3 frontend - - CMakeLists.txt | 5 - - Makefile.am | 5 - - configure.ac | 18 -- - poppler-qt-uninstalled.pc.in | 7 - - poppler-qt.pc.cmake | 13 -- - poppler-qt.pc.in | 13 -- - qt/.gitignore | 7 - - qt/CMakeLists.txt | 34 ---- - qt/Makefile.am | 48 ----- - qt/poppler-document.cc | 344 - -------------------------------- - qt/poppler-fontinfo.cc | 83 -------- - qt/poppler-link-qt3.h | 188 ------------------ - qt/poppler-link.cc | 267 ------------------------- - qt/poppler-page-transition-private.h | 28 --- - qt/poppler-page-transition.cc | 95 --------- - qt/poppler-page-transition.h | 146 -------------- - qt/poppler-page.cc | 357 - ---------------------------------- - qt/poppler-private.cc | 147 -------------- - qt/poppler-private.h | 102 ---------- - qt/poppler-qt.h | 311 ----------------------------- - qt/test-poppler-qt.cpp | 122 ------------ - 21 files changed, 0 insertions(+), 2340 deletions(-) - -commit 301352e5585d4ab6e7b609b4ab79b4d8b8656092 -Author: Daiki Ueno <ueno@unixuser.org> -Date: Sun Jan 9 18:48:50 2011 +0000 - - Do not crash in case jpeg_create_decompress fails - - Bug 32890 - - poppler/DCTStream.cc | 21 ++++++++++++--------- - poppler/DCTStream.h | 8 ++++++-- - 2 files changed, 18 insertions(+), 11 deletions(-) - -commit 17baf0498485720b4ea5952bb46287f533139d0a -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jan 8 13:03:31 2011 +0000 - - Remove declaration of function without implementation - - poppler/XRef.h | 3 +-- - 1 files changed, 1 insertions(+), 2 deletions(-) - -commit a9e280508f5d669c8b6e1a6bb888b9369d868ab3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jan 8 10:39:41 2011 +0100 - - glib: Fix memory leak when calling poppler_page_get_text_layout() - for pages with no text - - glib/poppler-page.cc | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit 5d62d18941810ef7d668eafa8b001085133fb169 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jan 8 10:33:32 2011 +0100 - - glib: Use NULL instead of FALSE in g_return_val_if_fail() for - functions returning a pointer - - glib/poppler-page.cc | 12 ++++++------ - 1 files changed, 6 insertions(+), 6 deletions(-) - -commit 1324ae13f1fc2fa28951c2c7f7d63d4756537229 -Author: Pino Toscano <pino@kde.org> -Date: Thu Jan 6 01:15:30 2011 +0100 - - [cpp/apidox] advertize the 'pnm' image format - - cpp/poppler-image.cpp | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit b192363960c26111167b1b08db9910e5f39dcf8b -Author: Pino Toscano <pino@kde.org> -Date: Thu Jan 6 01:09:09 2011 +0100 - - [cpp] Add PNM (PBM/PGM/PPM) exporting to 'image'. - - Introduce a custom ImgWriter (PNMWriter) for exporting in the PNM - variants, - and use it choosing the output format matching as close as possible - the format of the image. - - cpp/CMakeLists.txt | 1 + - cpp/Makefile.am | 2 + - cpp/PNMWriter.cc | 119 - +++++++++++++++++++++++++++++++++++++++++++++++++ - cpp/PNMWriter.h | 43 ++++++++++++++++++ - cpp/poppler-image.cpp | 22 +++++++++- - 5 files changed, 186 insertions(+), 1 deletions(-) - -commit bebc530cbde7898759e1bd3629d2836ce0fb1d08 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Fri Dec 31 12:11:40 2010 +1030 - - cairo: Don't set JPX mime data if the stream specifies a colorspace - - The stream colorspace overides, and may be different to, the - colorspace in the JPX data. - - https://bugs.freedesktop.org/show_bug.cgi?id=32746 - - poppler/CairoOutputDev.cc | 46 - ++++++++++++++++++++++++++++++-------------- - poppler/CairoOutputDev.h | 1 + - 2 files changed, 32 insertions(+), 15 deletions(-) - -commit 1399b9ab14b19f25583c75af2b36f63a6a01129a -Author: Pino Toscano <pino@kde.org> -Date: Wed Dec 29 15:56:45 2010 +0100 - - [cpp] add TIFF output to 'image' - - cpp/poppler-image.cpp | 12 ++++++++++++ - 1 files changed, 12 insertions(+), 0 deletions(-) - -commit 1c7937dbc3c577ffc12cacc8de33d320e2f30ce9 -Author: William Bader <williambader@hotmail.com> -Date: Wed Dec 29 14:47:06 2010 +0000 - - Make pdftoppm be able of writing tif files - - BUG 32027 - - CMakeLists.txt | 15 ++++ - config.h.cmake | 3 + - configure.ac | 32 ++++++++ - goo/Makefile.am | 2 + - goo/TiffWriter.cc | 202 - ++++++++++++++++++++++++++++++++++++++++++++++++ - goo/TiffWriter.h | 53 +++++++++++++ - poppler/Makefile.am | 11 +++ - splash/SplashBitmap.cc | 18 ++++- - splash/SplashBitmap.h | 5 +- - splash/SplashTypes.h | 4 +- - utils/pdftoppm.1 | 6 ++ - utils/pdftoppm.cc | 14 +++- - 12 files changed, 358 insertions(+), 7 deletions(-) - -commit bae91ecb638fcfee001e5c9a86a754610da796e4 -Author: William Bader <williambader@hotmail.com> -Date: Tue Dec 28 11:53:54 2010 +0000 - - Add -singlefile option to pdftoppm - - Bug 32025 - - utils/pdftoppm.1 | 3 +++ - utils/pdftoppm.cc | 26 +++++++++++++++++++++++--- - 2 files changed, 26 insertions(+), 3 deletions(-) - -commit ff58ee66c27da09a370a3000ab55eb1a24921852 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Dec 27 20:07:21 2010 +0000 - - bump soname just in case the getPage change is not BC - - qt/CMakeLists.txt | 2 +- - qt/Makefile.am | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 453df02e195a96d0210f297c21c8ffba646659da -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Dec 27 19:51:13 2010 +0000 - - Make distcheck work - - glib/Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 6a34cec72c1a1b6576858a7836aae4a902fb5ed7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Dec 27 19:29:52 2010 +0000 - - increase core soname - - CMakeLists.txt | 2 +- - poppler/Makefile.am | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 8c11e9d68dceb609d04b3b383d22c307b5981d86 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Dec 27 19:23:29 2010 +0000 - - 0.16.0 project version increase - - CMakeLists.txt | 4 ++-- - configure.ac | 4 ++-- - cpp/Doxyfile | 2 +- - qt4/src/Doxyfile | 2 +- - 4 files changed, 6 insertions(+), 6 deletions(-) - -commit 8c1fd83c6061279af00c1172fe41cee61f19d917 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Dec 27 19:22:22 2010 +0000 - - 0.16.0 NEWS - - NEWS | 24 ++++++++++++++++++++++++ - 1 files changed, 24 insertions(+), 0 deletions(-) - -commit 0294d6e50691a3e40fad0d6e4fa9056944a91efd -Author: Thomas Freitag <Thomas.Freitag@alfa.de> -Date: Thu Dec 23 15:56:32 2010 +0000 - - Be more correct when drawing radial shadings - - Fixes 32349 - - poppler/Gfx.cc | 25 ++++++++++++++++--------- - 1 files changed, 16 insertions(+), 9 deletions(-) - -commit 3aa08e378927889b35b6fa858d6da568250ba6ec -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 19 22:36:47 2010 +0000 - - Seems to work with this version, so enable it - - CMakeLists.txt | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 93cf184b7573980bf2e56342e64f9b99c5d0b415 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 19 14:16:25 2010 +0000 - - Fix last commit - - Applying patches by hand is bad - - poppler/PDFDoc.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit ebb580d756a8321de87814f05ab572564732c15e -Author: Philip Lorenz <lorenzph+freedesktop@gmail.com> -Date: Sun Dec 19 14:08:31 2010 +0000 - - Windows fixes - - poppler/PDFDoc.cc | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit 88a4154420e016d93c5ce05b5b8e09b6bddcadc9 -Author: Philip Lorenz <lorenzph+freedesktop@gmail.com> -Date: Sun Dec 19 13:03:01 2010 +0000 - - build on newer MSVC - - qt4/src/poppler-annotation.h | 7 ++++--- - 1 files changed, 4 insertions(+), 3 deletions(-) - -commit 18cd9f6aeb48266c551952c395eb9cd662bc27f5 -Author: Thomas Freitag <Thomas.Freitag@alfa.de> -Date: Sat Dec 18 17:59:54 2010 +0000 - - compile in windows - - poppler/FontInfo.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 471102ef68b439dfa13e20e3b0f2e143f8d0dc85 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 17 00:36:36 2010 +0000 - - Remove -resolution - - Actually use -zoom that is there for a reason - - utils/pdftohtml.1 | 3 --- - utils/pdftohtml.cc | 15 ++++++--------- - 2 files changed, 6 insertions(+), 12 deletions(-) - -commit edf6c47feb5b7658e585bcce196e465245e1dc98 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Dec 16 22:56:40 2010 +0000 - - kill useless code - - utils/pdftohtml.cc | 8 -------- - 1 files changed, 0 insertions(+), 8 deletions(-) - -commit 185a2f81485e19f96393a431be5523a277747b94 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Dec 16 22:56:15 2010 +0000 - - static-ify some vars - - utils/HtmlOutputDev.cc | 9 --------- - utils/pdftohtml.cc | 8 ++++---- - 2 files changed, 4 insertions(+), 13 deletions(-) - -commit e4dfc548c57b690db9122d1db3342ed0a785c8bb -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Dec 14 19:45:46 2010 +0000 - - We need this to make the define really be defined - - config.h.cmake | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 06da4b46c442778c67b788b747f04b386b5247ac -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Tue Dec 14 09:06:57 2010 +1030 - - cairo: Use A1 instead of A8 for imagemask - - The cairo PDF surface now optimizes the case of cairo_mask() with - solid source and A1 mask to use a PDF stencil mask. - - Fixes https://bugs.launchpad.net/ubuntu/+source/libcairo/+bug/680628 - where a 65K PDF printed to PDF using poppler-cairo turns into an 8MB - PDF. - - CMakeLists.txt | 2 ++ - configure.ac | 1 + - poppler/CairoOutputDev.cc | 25 ++++++++++++++++++------- - 3 files changed, 21 insertions(+), 7 deletions(-) - -commit 6ef457dc818e7e241e5d2e264bc2d78b132ae638 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Dec 13 14:08:29 2010 +0000 - - Move -fno-exceptions -fno-check-new to default flags - - Makes sense since we decided not to support the exception path in - gmem a - while ago - - cmake/modules/PopplerMacros.cmake | 2 +- - configure.ac | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 86e469600b58ae05cb6ede1b4017fbdac99cc556 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Dec 13 14:04:00 2010 +0000 - - More gcc flags movement - - -Wchar-subscripts is part of -Wall so remove it - Move -fno-common to default options since it makes sense to use it - - cmake/modules/PopplerMacros.cmake | 4 ++-- - configure.ac | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - -commit 2b74241d8b1fd1ec9fab4f6f673bbaaa1cb3d949 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Dec 13 13:56:52 2010 +0000 - - Promote -Wcast-align to the general warnings we ask gcc to give - - cmake/modules/PopplerMacros.cmake | 2 +- - configure.ac | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 7313e0a4de6f2146c1dcb3d235f18a3c844d12d5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 12 23:28:18 2010 +0000 - - Do not return 99 (or 1) with -h, -v and -printenc - - Bug 32149 - - utils/pdffonts.cc | 2 ++ - utils/pdfimages.cc | 2 ++ - utils/pdfinfo.cc | 3 +++ - utils/pdftoppm.cc | 2 ++ - utils/pdftops.cc | 5 ++++- - utils/pdftotext.cc | 3 +++ - 6 files changed, 16 insertions(+), 1 deletions(-) - -commit 669cbfc9fd78a22d4f14b0af43143e1f5dc28cd5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Dec 11 19:04:22 2010 +0000 - - Fix the preliminary bbox/clip calculation - - Code based in code posted by Suzuki Toshiya in the freetype mailing - list - - splash/SplashFTFont.cc | 15 +++++++++------ - 1 files changed, 9 insertions(+), 6 deletions(-) - -commit 2984002a64acca7014edeadd900dd52cdf7d9eac -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Dec 11 18:57:52 2010 +0000 - - Remove the * we just need to increase the pointer - - Gives a warning with newer gcc's - - splash/Splash.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 9b45fa072198da4a5032004ac943cf2227aa97ea -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 10 12:05:58 2010 +0000 - - Make PreScanOutputDev be less agressive when deciding to rasterize - - BUG 30107 - - poppler/PreScanOutputDev.cc | 14 +++++++++++++- - poppler/PreScanOutputDev.h | 4 ++++ - 2 files changed, 17 insertions(+), 1 deletions(-) - -commit f96f6a06cdc33b4654669ac74d5abd0d546a127d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 5 12:06:21 2010 +0000 - - Adapt the zlib-base FlateStream code to API changes - - Bug 32065 - - poppler/FlateStream.cc | 9 ++++++--- - poppler/FlateStream.h | 9 +++++++++ - 2 files changed, 15 insertions(+), 3 deletions(-) - -commit 7b1f83990a1f68306daf5f7dbeabcd38f4382e3b -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Nov 29 22:27:46 2010 +0000 - - 0.15.3 - - CMakeLists.txt | 4 ++-- - NEWS | 18 ++++++++++++++++++ - configure.ac | 2 +- - cpp/Doxyfile | 2 +- - poppler/Makefile.am | 2 +- - qt4/src/Doxyfile | 2 +- - 6 files changed, 24 insertions(+), 6 deletions(-) - -commit 7c23a993193aaaa4d4b5b6d1161a0455d1e2a8c0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Nov 29 21:33:31 2010 +0000 - - Add some more isNum before calling getNum - - poppler/GfxState.cc | 48 - ++++++++++++++++++++++++++++++++---------------- - 1 files changed, 32 insertions(+), 16 deletions(-) - -commit 62ec4f591c258e702ee79b519919a931517220bf -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Nov 29 20:50:43 2010 +0000 - - pass fetchOriginatorNums in some more calls - - Fixes some more crashes in broken files - - poppler/Parser.cc | 7 ++++++- - poppler/Parser.h | 1 + - poppler/XRef.cc | 6 +++--- - 3 files changed, 10 insertions(+), 4 deletions(-) - -commit d2a0e2ca723142478858f7edfb7c98807d554578 -Author: Hib Eris <hib@hiberis.nl> -Date: Thu Nov 25 10:36:38 2010 +0000 - - Skip over loops in Pages tree - - poppler/Catalog.cc | 15 ++++++++++----- - 1 files changed, 10 insertions(+), 5 deletions(-) - -commit 7abd371364e6e4aaef932f26b0664f7f9d760c42 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 28 13:57:50 2010 +0000 - - this var is not about xobjects only anymroe - - poppler/FontInfo.cc | 6 +++--- - poppler/FontInfo.h | 2 +- - 2 files changed, 4 insertions(+), 4 deletions(-) - -commit 1ac14df61d711097837e44d80a9332f0a854b95e -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sun Nov 28 13:49:41 2010 +0000 - - find fonts inside patterns - - Bug 31948 - - poppler/FontInfo.cc | 50 - +++++++++++++++++++++++++++----------------------- - 1 files changed, 27 insertions(+), 23 deletions(-) - -commit d30dd8c6f6491beac9750447126930168394cd9f -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 28 13:25:39 2010 +0000 - - Use sets instead of arrays - - poppler/FontInfo.cc | 46 ++++++++-------------------------------------- - poppler/FontInfo.h | 11 +++-------- - 2 files changed, 11 insertions(+), 46 deletions(-) - -commit 4c20bf14c0b1d7f1d5e530ded890186487da32b5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 28 12:50:24 2010 +0000 - - Use FontInfoScanner - - No idea why we didn't do this before, duplicate code is evil and now - pdffonts doesn't crash on pdf from bug 20486 - - utils/pdffonts.cc | 185 - ++++++++--------------------------------------------- - 1 files changed, 26 insertions(+), 159 deletions(-) - -commit d915f3d5a9e9e2e5dcd6be4cf8fac1b5849a13e9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 24 21:51:46 2010 +0000 - - protect against null ref here - - poppler/Catalog.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit cf32faaa16d763561fb9dfc4469345e4b3ba2369 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 24 21:48:54 2010 +0000 - - Protect against NULL values here - - poppler/JPEG2000Stream.h | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 46a6cc5952c59504863baed3ad2870093c462f12 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 24 19:42:59 2010 +0000 - - Check the objects are numbers before using them - - Bug 31895 - - poppler/GfxState.cc | 26 ++++++++++++++++++-------- - 1 files changed, 18 insertions(+), 8 deletions(-) - -commit 52e25cca7e75a8b8eac95a3cec258f1cd9f8ecaa -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Nov 23 20:31:14 2010 +0000 - - If it is not a Page but has no Kids either let's just pretend it's - a page - - Fixes broken PDF at bug 31861 - - poppler/Catalog.cc | 2 +- - poppler/Dict.cc | 4 ++++ - poppler/Dict.h | 2 ++ - 3 files changed, 7 insertions(+), 1 deletions(-) - -commit c6127898b13311197971b1c6b1b306b91e28cf0e -Author: Hib Eris <hib@hiberis.nl> -Date: Mon Nov 22 13:08:48 2010 +0000 - - Use gmallocn_checkoverflow when parsing Hints table - - Prevents running out of memory with malicious documents. - - poppler/Hints.cc | 26 +++++++++++++------------- - 1 files changed, 13 insertions(+), 13 deletions(-) - -commit 6a17cc89eda52f08cbacbf9bfaaeda22cf041e82 -Author: Thomas Freitag <Thomas.Freitag@alfa.de> -Date: Mon Nov 22 19:20:56 2010 +0000 - - Improve rendering of radial shadings - - Improves the duck rendering in bug 22098 - - poppler/Gfx.cc | 71 - ++++++++++++++++++++++++++----------------------------- - 1 files changed, 34 insertions(+), 37 deletions(-) - -commit 9093adede4f9ad6fb2962dcefcb09c1d8c357715 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 21 23:49:12 2010 +0000 - - pedantic ; - - poppler/CurlPDFDocBuilder.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 61445f5af749510fb647059af01abf1faf664195 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Nov 20 22:19:35 2010 +0000 - - forgot to upadte year here - - poppler/Parser.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 3628837febb21bcd1b54f3fb737628ea59e5d95d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Nov 20 22:15:08 2010 +0000 - - And now generalize the previous fix - - Works for loops of more than one item as in bug 28784 - - poppler/Dict.cc | 4 ++-- - poppler/Dict.h | 2 +- - poppler/Object.cc | 4 ++-- - poppler/Object.h | 9 +++++---- - poppler/Parser.cc | 19 +++++++++++++------ - poppler/Parser.h | 7 ++++++- - poppler/XRef.cc | 30 +++++++++++++++++++++++++----- - poppler/XRef.h | 2 +- - 8 files changed, 55 insertions(+), 22 deletions(-) - -commit b0555189a7fbd7f6a899e582783b9e0df44d5d6a -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Nov 20 21:32:24 2010 +0000 - - Protect against more loops when parsing - - poppler/Dict.cc | 4 ++-- - poppler/Dict.h | 2 +- - poppler/Object.cc | 4 ++-- - poppler/Object.h | 8 ++++---- - poppler/Parser.cc | 2 +- - poppler/XRef.cc | 4 ++-- - poppler/XRef.h | 2 +- - 7 files changed, 13 insertions(+), 13 deletions(-) - -commit 555fa897b275ca7195f22a727b049c8c4f2d74cd -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Nov 20 19:14:38 2010 +0000 - - Detect loops in FormField creation - - poppler/Form.cc | 88 - +++++++++++++++++++++++++++++++----------------------- - poppler/Form.h | 14 +++++---- - 2 files changed, 58 insertions(+), 44 deletions(-) - -commit 1802ddef374cb1451975480b2427e5d23ee2c737 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Nov 20 18:58:17 2010 +0000 - - Forgot to port this away from GooVector :-S - - poppler/CurlCachedFile.cc | 3 +-- - poppler/CurlCachedFile.h | 2 +- - 2 files changed, 2 insertions(+), 3 deletions(-) - -commit 32e53c5436b8c3654e7043f1d86596a79511a4cf -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Nov 20 18:54:59 2010 +0000 - - fix spacing - - poppler/Form.cc | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit 1cb3d5d94a1d89ccded96d977bcabfbe438fb81f -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Nov 20 18:08:45 2010 +0000 - - fix the memset - - Fixes crash in broken pdf - - poppler/Hints.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 22e8cebaa15adb4b19c9556cdca43cc3e77832b7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Nov 20 17:20:34 2010 +0000 - - Ensure the obj are num before reading them - - poppler/GfxState.cc | 32 ++++++++++++++++++++++---------- - 1 files changed, 22 insertions(+), 10 deletions(-) - -commit 08b2db36db4e011ebe36d2d945cb1a0498f1c5fb -Author: Pino Toscano <pino@kde.org> -Date: Sat Nov 20 14:00:36 2010 +0100 - - add my copyright here - - poppler/Hints.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 91aa4b02aa93ffe3828479194067de42d52be465 -Author: Pino Toscano <pino@kde.org> -Date: Sat Nov 20 13:13:46 2010 +0100 - - [cpp] include <ios> for std::hex() and std::left() - - cpp/poppler-global.cpp | 1 + - cpp/tests/poppler-dump.cpp | 1 + - 2 files changed, 2 insertions(+), 0 deletions(-) - -commit 1c924412923cb01f2cb95b0943cb7bbaf7e8cfb6 -Author: Pino Toscano <pino@kde.org> -Date: Sat Nov 20 13:02:36 2010 +0100 - - [cpp] include <iterator> for std::back_inserter() - - cpp/poppler-document.cpp | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 95b551025a34f3a7bcff2852eac6d186bc8a7cb0 -Author: Pino Toscano <pino@kde.org> -Date: Sat Nov 20 12:54:21 2010 +0100 - - use a std::vector<char> instead of a var-length-array of char's - - poppler/Hints.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 4faaff893515c80cb69b02e431a0f8483274a497 -Author: Hib Eris <hib@hiberis.nl> -Date: Fri Nov 19 23:53:35 2010 +0000 - - [win32] Simplify strtok_r implementation - - The previous implementation did not compile with mingw64. - - poppler/strtok_r.cpp | 137 - +------------------------------------------------- - 1 files changed, 1 insertions(+), 136 deletions(-) - -commit 255f84927a649d980f047fe755c9c308535a3779 -Author: Hib Eris <hib@hiberis.nl> -Date: Fri Nov 19 23:45:33 2010 +0000 - - Correct parsing of linearization table - - Fixes bug #31627 - - poppler/Linearization.cc | 4 +--- - 1 files changed, 1 insertions(+), 3 deletions(-) - -commit 9d05138f0b7d15945f546564036bc67815593db0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 14 16:05:28 2010 +0000 - - 0.15.2 - - CMakeLists.txt | 4 ++-- - NEWS | 22 ++++++++++++++++++++++ - configure.ac | 2 +- - cpp/Doxyfile | 2 +- - poppler/Makefile.am | 2 +- - qt4/src/Doxyfile | 2 +- - 6 files changed, 28 insertions(+), 6 deletions(-) - -commit 2d18543bd6b3a5a9ff2dfab63339d5bfcccd0b2f -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 14 15:41:56 2010 +0000 - - This does actually work now :D - - qt4/tests/check_metadata.cpp | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit d772364b8a5858cbd98e256547d319260fa9d084 -Author: Pino Toscano <pino@kde.org> -Date: Thu Nov 11 21:52:25 2010 +0100 - - [Qt4] New function setDebugErrorFunction(). - - This new function + typedef can be useful to direct the ebug/error - messages - to a different place than the default qDebug()'s one. - - Base on an idea of Albert, added closure and polish by me. - - qt4/src/poppler-private.cc | 20 +++++++++++++++++++- - qt4/src/poppler-qt4.h | 24 ++++++++++++++++++++++++ - 2 files changed, 43 insertions(+), 1 deletions(-) - -commit ce929cf33f4b6b6421f9d327b4bb792816d47aac -Author: Jakob Voss <jakob.voss@gbv.de> -Date: Wed Nov 10 23:41:44 2010 +0000 - - Add -p flag to pdfimages - - Adds the page the image is in to the image filename - - utils/ImageOutputDev.cc | 25 ++++++++++++++++++------- - utils/ImageOutputDev.h | 19 +++++++++++++++---- - utils/pdfimages.1 | 3 +++ - utils/pdfimages.cc | 6 +++++- - 4 files changed, 41 insertions(+), 12 deletions(-) - -commit 6296c28968613aadb7ea084092945a54005eca9b -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 10 23:28:45 2010 +0000 - - Kill GooVector - - std::vector does the same and GooVector is not part of xpdf so - we don't - need to maintain it in case we ever get a new xpdf release we want to - merge with - - CMakeLists.txt | 1 - - goo/GooVector.h | 159 - -------------------------------------------- - goo/Makefile.am | 1 - - poppler/CachedFile.cc | 19 +++--- - poppler/CachedFile.h | 15 ++-- - poppler/Catalog.cc | 12 ++-- - poppler/Catalog.h | 10 ++- - poppler/Form.h | 3 +- - poppler/Gfx.h | 7 +- - poppler/Hints.cc | 5 +- - poppler/Hints.h | 6 +- - poppler/StdinCachedFile.cc | 2 +- - poppler/StdinCachedFile.h | 2 +- - poppler/Stream.h | 1 - - poppler/XRef.cc | 10 ++-- - poppler/XRef.h | 7 +- - utils/HtmlFonts.cc | 8 +- - utils/HtmlFonts.h | 12 ++-- - utils/HtmlLinks.cc | 8 +-- - utils/HtmlLinks.h | 4 +- - 20 files changed, 66 insertions(+), 226 deletions(-) - -commit 5934c320aa136c1a6e97fb9bf54bdfdccfcab521 -Author: Hib Eris <hib@hiberis.nl> -Date: Wed Nov 10 22:50:36 2010 +0000 - - Linearization improvements - - Read - http://lists.freedesktop.org/archives/poppler/2010-November/006642.html - for the detailed patch description - - CMakeLists.txt | 4 + - glib/poppler-action.cc | 4 +- - glib/poppler-document.cc | 17 +- - glib/poppler-page.cc | 1 + - poppler/CachedFile.h | 2 +- - poppler/Catalog.cc | 352 +++++++++++++++++++++----------- - poppler/Catalog.h | 14 +- - poppler/FontInfo.cc | 5 +- - poppler/Hints.cc | 439 - +++++++++++++++++++++++++++++++++++++++ - poppler/Hints.h | 95 +++++++++ - poppler/Linearization.cc | 224 ++++++++++++++++++++ - poppler/Linearization.h | 45 ++++ - poppler/Makefile.am | 4 + - poppler/PDFDoc.cc | 284 +++++++++++++++++++++---- - poppler/PDFDoc.h | 38 +++- - poppler/PSOutputDev.cc | 39 ++-- - poppler/PSOutputDev.h | 14 +- - poppler/Stream.cc | 13 +- - poppler/Stream.h | 11 +- - poppler/XRef.cc | 351 ++++++++++++++++++------------- - poppler/XRef.h | 25 ++- - qt/poppler-document.cc | 14 ++- - qt/poppler-page.cc | 19 +- - qt/poppler-private.h | 14 +- - qt/poppler-qt.h | 3 +- - qt4/src/poppler-document.cc | 12 +- - qt4/src/poppler-link.cc | 7 +- - qt4/src/poppler-page.cc | 3 +- - qt4/src/poppler-ps-converter.cc | 2 + - utils/HtmlOutputDev.cc | 2 +- - utils/HtmlOutputDev.h | 3 + - utils/pdffonts.cc | 6 +- - utils/pdfinfo.cc | 22 ++- - utils/pdftohtml.cc | 2 +- - utils/pdftops.cc | 3 +- - 35 files changed, 1690 insertions(+), 403 deletions(-) - -commit abb1313ae40ab7efb073406f47fa53bf7afe0b88 -Author: Pino Toscano <pino@kde.org> -Date: Mon Nov 8 01:54:03 2010 +0100 - - [cpp/apidox] add the minimum version of 'image' - - cpp/poppler-image.cpp | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit f559e77cb7d76c5fe6a79be9086667a29613c912 -Author: Pino Toscano <pino@kde.org> -Date: Mon Nov 8 01:52:48 2010 +0100 - - [cpp] add image::bytes_per_row() - - cpp/poppler-image.cpp | 8 ++++++++ - cpp/poppler-image.h | 1 + - 2 files changed, 9 insertions(+), 0 deletions(-) - -commit 14dea4d74698d5d7d994e687f8176652d790dba7 -Author: Pino Toscano <pino@kde.org> -Date: Sun Nov 7 22:57:31 2010 +0100 - - [arthur] use the untransformed line width, not the transformed one - - ... as the painter will do the transformation itself already; - seems to product better results - - poppler/ArthurOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit f077e82af0724be88d28c896a3c208f1d50ccff9 -Author: Pino Toscano <pino@kde.org> -Date: Sun Nov 7 21:50:48 2010 +0100 - - [qt4] New Page::renderToPainter() - - This new painter-based painting function ican be used for painting - (with Arthur only for now) without getting an image first. - Also add a new flag type for it, with a single item telling whether - do not save+restore the provided painter. - - Mostly based on a patch by Matthias Fauconneau - (matthias.fauconneau@gmail.com), thanks! - - qt4/src/poppler-page.cc | 62 - +++++++++++++++++++++++++++++++------------- - qt4/src/poppler-qt4.h | 65 - ++++++++++++++++++++++++++++++++++++++++++++++- - 2 files changed, 107 insertions(+), 20 deletions(-) - -commit df02d1fc9e65422121e5e8f493c13229552ec0e7 -Author: Pino Toscano <pino@kde.org> -Date: Sun Nov 7 19:47:56 2010 +0100 - - [arthur] remove unused 'm_image' attribute - - poppler/ArthurOutputDev.cc | 1 - - poppler/ArthurOutputDev.h | 2 +- - 2 files changed, 1 insertions(+), 2 deletions(-) - -commit b29582cd0d542a3e70dbca3fb75770daa4cc91ca -Author: Matthias Fauconneau <matthias.fauconneau@gmail.com> -Date: Sun Nov 7 19:44:11 2010 +0100 - - [arthur] small fixes and memory leaks - - - fix font rendering (transforming the glyph path and not only the - glyph origin) - - fix image rendering (alpha was set to zero) - - poppler/ArthurOutputDev.cc | 122 - +++++++++++++++++++------------------------ - 1 files changed, 54 insertions(+), 68 deletions(-) - -commit 970f075569bf9be5e5ddc3a9ad1fabec5435dfaf -Author: Pino Toscano <pino@kde.org> -Date: Sun Nov 7 16:31:02 2010 +0100 - - [cpp/tests] add a simple poppler-render test - - ... to ease testing the render capabilities of poppler-cpp. - quite minimal at the moment. - - cpp/tests/CMakeLists.txt | 3 + - cpp/tests/Makefile.am | 9 +++- - cpp/tests/poppler-render.cpp | 113 - ++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 124 insertions(+), 1 deletions(-) - -commit bfe4139c742cb0a669f5504df7e22e3e57243d9a -Author: Pino Toscano <pino@kde.org> -Date: Sun Nov 7 16:23:26 2010 +0100 - - [cpp] Add page_renderer, to render pages over images. - - This new class introduces a very simple way to render a page, using - the Splash backend, - giving an 'image' as result. - It can hold a color for the "paper" of the pages, and some hints - for the actual rendering. - - cpp/CMakeLists.txt | 2 + - cpp/Makefile.am | 2 + - cpp/poppler-page-renderer.cpp | 212 - +++++++++++++++++++++++++++++++++++++++++ - cpp/poppler-page-renderer.h | 66 +++++++++++++ - 4 files changed, 282 insertions(+), 0 deletions(-) - -commit 91e3f7b4ea42a5821fd78e1edf55e95250c9bc68 -Author: Pino Toscano <pino@kde.org> -Date: Sun Nov 7 16:19:34 2010 +0100 - - [cpp] add an internal way to get a 'page_private' of a 'page' - - useful for getting a 'page_private' in the implementation of other - cpp classes - without the need to add friends to 'page' - - cpp/poppler-page-private.h | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit fa7c41cb9c52ecd3d7c574455b1258a3021b8c75 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Nov 4 20:55:34 2010 +0000 - - Improvements to the splash backend - - Antialias and shadings. - Code by Thomas Freitag <Thomas.Freitag@alfa.de> and Christian - Feuersänger <cfeuersaenger@googlemail.com> - More info at bug 30436 - - poppler/CairoOutputDev.h | 5 +- - poppler/Function.cc | 4 +- - poppler/Function.h | 2 + - poppler/Gfx.cc | 12 +- - poppler/OutputDev.h | 16 ++- - poppler/PSOutputDev.h | 4 +- - poppler/SplashOutputDev.cc | 182 ++++++++++++++++++++- - poppler/SplashOutputDev.h | 68 ++++++++- - splash/Splash.cc | 395 - +++++++++++++++++++++++++++++++++++++++++++- - splash/Splash.h | 11 +- - splash/SplashBitmap.cc | 4 +- - splash/SplashBitmap.h | 3 + - splash/SplashPattern.cc | 17 ++- - splash/SplashPattern.h | 36 ++++- - 14 files changed, 735 insertions(+), 24 deletions(-) - -commit 0aa040163741ab8ba093a742e556bba2a5ab7edf -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 3 20:40:24 2010 +0000 - - Do not add sibling children as parents - - Fixes c2ff94b1600b8a5841a5e4627f014560ac460f1a - - poppler/Function.cc | 7 ++++--- - 1 files changed, 4 insertions(+), 3 deletions(-) - -commit c2ff94b1600b8a5841a5e4627f014560ac460f1a -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 3 00:02:02 2010 +0000 - - Do not loop forever in broken documents - - StitchingFunctions that have themselves up in the parent chain - are wrong - - poppler/Function.cc | 22 +++++++++++++++++++--- - poppler/Function.h | 6 ++++-- - 2 files changed, 23 insertions(+), 5 deletions(-) - -commit cad66a7d25abdb6aa15f3aa94a35737b119b2659 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Nov 2 19:14:34 2010 +0000 - - Fix crash in broken documents - - mapLen = (code + 256) & ~255; can wrap and you end up with mapLen - < code - that is not what you wanted - - poppler/CharCodeToUnicode.cc | 16 +++++++++++----- - 1 files changed, 11 insertions(+), 5 deletions(-) - -commit 7e5f31c1c41193c6e49355970e6d027b91d45825 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Nov 2 00:32:01 2010 +0000 - - make some more fields private - - splash/SplashFontFile.h | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit 6751eb48dc49890f7ad8b732b3fc29a2db746ec4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Nov 2 00:26:08 2010 +0000 - - Make the destructor private - - You are not supposed to call it, you should call unref - - splash/SplashFontFile.h | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit b718e821d5f21ea5b0c44c6c2b59769c9b94892a -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Oct 28 08:46:09 2010 +0100 - - Revert fdfffc9c68314d3f64dee7e0ef8617105e3198dd - - It is not a leak and makes things crash :D - - poppler/SplashOutputDev.cc | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 15b9aeac5a20c544db1aebe00113ebc2f7ba52c7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Oct 28 00:37:29 2010 +0100 - - if reallocn fails, free p - - goo/gmem.cc | 8 ++++++-- - 1 files changed, 6 insertions(+), 2 deletions(-) - -commit 561c0567a5741d7c49903c51c8020187dccaa0d9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Oct 27 22:43:51 2010 +0100 - - fix comment - - poppler/SplashOutputDev.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 4ef38cc99a879202e717447a422272cf85eeccfc -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Oct 27 22:36:07 2010 +0100 - - Fix memory leaks that can happen with broken documents - - poppler/SplashOutputDev.cc | 10 ++++++++++ - 1 files changed, 10 insertions(+), 0 deletions(-) - -commit fdfffc9c68314d3f64dee7e0ef8617105e3198dd -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Oct 27 20:40:19 2010 +0100 - - Fix memory leak - - poppler/SplashOutputDev.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 90d479d9d5c947175e60ab689f440ae9c24f0b2b -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Oct 27 20:39:48 2010 +0100 - - Do not crash if bitmap->alpha == NULL - - Happens in broken files - - splash/Splash.cc | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 6ad36277971ec46d4a4ef0c45625e60f8c5f1247 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Oct 25 18:59:49 2010 +0100 - - Initialze movie to NULL on broken pdf files - - poppler/Annot.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 2d0b6e2956a81164bca6adc9aacad0e620480957 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Oct 24 00:23:21 2010 +0100 - - Here the chars to read is the increment size not the initialSize - - Fixes crash in file provided by Robert ÅšwiÄ™cki - - poppler/Stream.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit dcb02d2100136b6035485be3be214ce3d9f1c102 -Author: Vincent Torri <vtorri@univ-evry.fr> -Date: Sat Oct 23 23:45:05 2010 +0100 - - remove -ansi flag for cywin and mingw - - configure.ac | 8 +++++++- - 1 files changed, 7 insertions(+), 1 deletions(-) - -commit 17cdc81224c72f7b58de61734c9ead337ff7b42b -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 23 23:37:59 2010 +0100 - - update my C year - - poppler/SplashOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit e09ddce7e21bbd62b384d9d59fbd1e0f14f7d05f -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 23 23:33:00 2010 +0100 - - Fix crash in malformed documents - - poppler/SplashOutputDev.cc | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 906e4e15421d8f3f0a825ca767e5eac3169853d6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 23 23:12:44 2010 +0100 - - Do not leak attrs1 - - poppler/Catalog.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit ec32bb45a57a8a839156c946fcde1270aa6019d9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 23 23:00:03 2010 +0100 - - Do not crash if n is 0 - - poppler/Function.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 9edf7e4fefb37989af9a2558aaa83d7cd4694ec6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 23 22:59:50 2010 +0100 - - add unlikely marker - - poppler/Decrypt.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit c46e863b7b94dc2f83a7d89f4afb8fe3bc8ec35c -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 23 22:55:49 2010 +0100 - - Do not divide by 0 in rc4InitKey - - poppler/Decrypt.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit bcb13ed5828e2a855efd5e38b2acd15ca37a9991 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 23 22:40:17 2010 +0100 - - Check obj2 is a num before reading it - - poppler/Gfx.cc | 8 +++++++- - 1 files changed, 7 insertions(+), 1 deletions(-) - -commit c64a49307782299cb7a950a66419f9d59707f38b -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Oct 20 22:29:29 2010 +0100 - - 0.15.1 - - CMakeLists.txt | 4 ++-- - NEWS | 46 ++++++++++++++++++++++++++++++++++++++++++++++ - configure.ac | 2 +- - cpp/Doxyfile | 2 +- - poppler/Makefile.am | 2 +- - qt4/src/Doxyfile | 2 +- - 6 files changed, 52 insertions(+), 6 deletions(-) - -commit 3b45c66de91243d7419657512cf726c9e1c26dfb -Author: Kenneth Berland <ken@hero.com> -Date: Sun Oct 17 14:24:16 2010 +0100 - - Add -bbox option to pdftotext - - utils/pdftotext.1 | 4 ++ - utils/pdftotext.cc | 125 - +++++++++++++++++++++++++++++++++++++++++----------- - 2 files changed, 103 insertions(+), 26 deletions(-) - -commit 71ec4c7a6715a40d536d1e4b911dae48d1bba7b9 -Author: Pino Toscano <pino@kde.org> -Date: Sun Oct 17 14:57:43 2010 +0200 - - [CMake] update MacroOptionalFindPackage.cmake from KDE SVN - - no radical changes, just a minor improvement for the "explicitly - disabled" case - - cmake/modules/MacroOptionalFindPackage.cmake | 40 - +++++++++++++++++++------ - 1 files changed, 30 insertions(+), 10 deletions(-) - -commit ab0049d8be5dfe1989c4aa33c2732915c62fecb2 -Author: Pino Toscano <pino@kde.org> -Date: Sun Oct 17 14:29:22 2010 +0200 - - [CMake] Cairo package: make the version check really working - - cmake/modules/FindCairo.cmake | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit 1cea33717c92631ee9c417d9f89e32b03695c75a -Author: Pino Toscano <pino@kde.org> -Date: Sun Oct 17 13:55:58 2010 +0200 - - [CMake] Bump cairo dependency to 1.10 - - followup of fc9b85894754d175af916eaf6cb127efd601df7e - - CMakeLists.txt | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit d6f49aa2da15cd2e9cf775d6b1d2d04a005c8cdd -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Oct 17 14:22:57 2010 +0200 - - [cairo] Fix a crash when redering documents with invalid type 3 fonts - - poppler/CairoFontEngine.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit e2fad550c3cbf86541730582151e1bb6470ed9c1 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Oct 17 13:47:33 2010 +0200 - - [glib-demo] Use poppler_page_get_selected_region() in selections demo - - glib/demo/selections.c | 73 - ++++++++++++++--------------------------------- - 1 files changed, 22 insertions(+), 51 deletions(-) - -commit 88013458e141de58ed801480707ae0dfe92b9aa2 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Oct 17 13:46:26 2010 +0200 - - [glib] Add poppler_page_get_selected_region() - - that returns a cairo_region_t, and deprecate - poppler_page_get_selection_region(). - - glib/poppler-page.cc | 81 - +++++++++++++++++++++++++++++++++++ - glib/poppler-page.h | 4 ++ - glib/reference/poppler-sections.txt | 1 + - 3 files changed, 86 insertions(+), 0 deletions(-) - -commit fc9b85894754d175af916eaf6cb127efd601df7e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Oct 17 12:54:18 2010 +0200 - - [configure] Bump cairo dependency to 1.10 - - configure.ac | 2 +- - poppler/CairoOutputDev.cc | 4 ---- - 2 files changed, 1 insertions(+), 5 deletions(-) - -commit dd14ef6b211ac1c8a4f16bb6094dbfd6a09cbef9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Oct 17 12:46:55 2010 +0100 - - Improve dict lookup speed for big dicts - - Based on a patch by PaweÅ‚ Wiejacha <pawel.wiejacha@gmail.com> - - poppler/Dict.cc | 98 - +++++++++++++++++++++++++++++++++++++++++++----------- - poppler/Dict.h | 2 + - 2 files changed, 80 insertions(+), 20 deletions(-) - -commit bb38a0c71434413f2728109c73278de1b8a58571 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Oct 17 12:52:01 2010 +0200 - - [glib-demo] Make glib demo program installable - - It's a useful tool for testing and debugging not only for people who - install from sources. - - glib/demo/Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit d26d0fab2ddfff853f6681a3518813a2d65a4112 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Oct 17 12:36:46 2010 +0200 - - [glib-demo] Use printing options in print demo - - glib/demo/print.c | 96 - +++++++++++++++++++++++++++++++++++++++++++++++++++-- - 1 files changed, 93 insertions(+), 3 deletions(-) - -commit 4a71dcdd350d0c0515ca349f0b875b33289d25ee -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Oct 17 12:31:41 2010 +0200 - - [glib] Add poppler_page_render_for_printing_with_options() - - It allows to print with the same options acroread has: - - - Print document - - Print document and markup - - Print document and stamps - - glib/poppler-page.cc | 77 - ++++++++++++++++++++++++++++++---- - glib/poppler-page.h | 3 + - glib/poppler.h | 19 +++++++++ - glib/reference/poppler-sections.txt | 4 ++ - 4 files changed, 94 insertions(+), 9 deletions(-) - -commit 0b3b2ebc3930bd46fb13fb2158fc695b0962f7c5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 16 15:09:05 2010 +0100 - - Add a callback to know which page has been printed - - qt4/src/poppler-ps-converter.cc | 16 ++++++++++++++-- - qt4/src/poppler-qt4.h | 10 ++++++++++ - 2 files changed, 24 insertions(+), 2 deletions(-) - -commit 4bd25223c4d15dfa91965a6e86eaa444a5a81f71 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 16 15:08:05 2010 +0100 - - Do not omit this character - - Mimics Cairo backend and Adode Reader behaviour - - splash/SplashFTFont.cc | 4 ---- - 1 files changed, 0 insertions(+), 4 deletions(-) - -commit b604a008a2a379a21e5fdfa0799886f80d893a08 -Author: Christian Feuersänger <cfeuersaenger@googlemail.com> -Date: Thu Oct 14 23:56:36 2010 +0100 - - Improve rendering of Shading Type 6 and 7 - - poppler/Gfx.cc | 212 - +++++++++++++++++++++++++++++++++++++++++---------- - poppler/Gfx.h | 9 ++- - poppler/GfxState.cc | 96 +++++++++++++++++++++++- - poppler/GfxState.h | 127 ++++++++++++++++++++++++++++++- - 4 files changed, 397 insertions(+), 47 deletions(-) - -commit c6bb63b31c268e4e842532e6839b15edb31cf25c -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Oct 14 23:33:13 2010 +0100 - - Only clip boxes to mediabox if we are at the page level - - Fixes bug 30784 - - poppler/Page.cc | 19 +++++++++++-------- - 1 files changed, 11 insertions(+), 8 deletions(-) - -commit 4a248b3f523209ec16ace587229412653b2276d0 -Author: Pino Toscano <pino@kde.org> -Date: Thu Oct 14 18:32:05 2010 +0200 - - [cpp] make it compile also when there are no image formats available - - including the ImgWirter.h is enough to get the definition of ImgWriter - - cpp/poppler-image.cpp | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit de1501d87549269f9214c9e3fba4cbf39960826e -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Oct 13 19:18:36 2010 +0100 - - remove windows eol - - poppler/Gfx.cc | 38 +++++++++++++++++++------------------- - 1 files changed, 19 insertions(+), 19 deletions(-) - -commit 12e68b49feef10b654944dd71eab0852cfeceb89 -Author: Pino Toscano <pino@kde.org> -Date: Sun Oct 10 23:04:57 2010 +0200 - - [cpp] Add a new 'image' class. - - This implicitely shared class represents the data buffer of an - "image", - with direct access to the data. - It also has a function to save to file (png/jpeg). - - Still a FIXME in the copy() method and in the save() (for mono - images only). - - cpp/CMakeLists.txt | 2 + - cpp/Makefile.am | 3 + - cpp/poppler-image-private.h | 48 +++++ - cpp/poppler-image.cpp | 431 - +++++++++++++++++++++++++++++++++++++++++++ - cpp/poppler-image.h | 70 +++++++ - 5 files changed, 554 insertions(+), 0 deletions(-) - -commit db31687ba476e272b72625a8a78b50780522ee7d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Oct 9 10:33:06 2010 +0200 - - [glib] docs: Document poppler_annot_markup_get_date() - - glib/poppler-annot.cc | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -commit a7cf8d322a4a687c9810a577cc92ff6b9725ecdc -Author: Fernando Herrera <fherrera@onirica.com> -Date: Thu Oct 7 17:28:31 2010 +0200 - - [glib] Fix introspection annotations for poppler_document_get_page*() - - Return value should be transfer full since the caller owns the only - reference. - - glib/poppler-document.cc | 6 ++---- - 1 files changed, 2 insertions(+), 4 deletions(-) - -commit d690bea929553d1a4392d42d949843e9467ba8cb -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Oct 5 22:18:22 2010 +0100 - - Make sure obj is a num before reading it - - Not sure if using a 0 is correct otherwise, but if your matrix is - broken you're probably going to get a wrong rendering anyway, so who - cares. Bug #30590 - - poppler/Gfx.cc | 6 ++++-- - 1 files changed, 4 insertions(+), 2 deletions(-) - -commit b17be2bc32cf71bac0473bf4ac16359e3027b4fc -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Oct 3 12:14:11 2010 +0200 - - [annots] Fix a crash when drawing square/circle annots without - a border - - Fixes bug #30580 - - poppler/Annot.cc | 121 - +++++++++++++++++++++++++++--------------------------- - 1 files changed, 61 insertions(+), 60 deletions(-) - -commit e3d3944c1988343704e3ba3a5d60609719466afb -Author: Tomas Hoger <thoger@redhat.com> -Date: Wed Sep 29 20:03:45 2010 +0100 - - Fix uninitialized uses on DCTScanInfo - - poppler/Stream.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit f380647f09d88339c936184bbe86c70c0d47de4b -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 29 20:02:10 2010 +0100 - - Free names - - poppler/Catalog.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit aa0fd32a8501473832bce1b8b804dd3f9a45735b -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 27 22:39:09 2010 +0100 - - Consider render value when colorizing text - - Fixes bug 2807 - - poppler/CairoOutputDev.cc | 18 +++--------------- - poppler/CairoOutputDev.h | 2 -- - poppler/Gfx.cc | 21 +++++++++++++++++---- - poppler/PSOutputDev.cc | 26 ++++++++++---------------- - poppler/PSOutputDev.h | 3 +-- - poppler/SplashOutputDev.cc | 18 +++--------------- - poppler/SplashOutputDev.h | 4 +--- - 7 files changed, 35 insertions(+), 57 deletions(-) - -commit cf710b999b510203e9348ea9f04360be1fe957b8 -Author: Pino Toscano <pino@kde.org> -Date: Fri Sep 24 00:50:37 2010 +0200 - - [Qt4] enable the generation of the QCH file - - ... usable in Qt Assistant - - qt4/src/Doxyfile | 14 +++++++------- - 1 files changed, 7 insertions(+), 7 deletions(-) - -commit be6d933071c9ab043f01f374a884472c4ce3007e -Author: Pino Toscano <pino@kde.org> -Date: Thu Sep 23 15:55:45 2010 +0200 - - update Doxyfile's for qt4 and cpp - - no changes in the actual configuration values - - cpp/Doxyfile | 155 +++++-- - qt4/src/Doxyfile | 1469 - +++++++++++++++++++++++++++++++++--------------------- - 2 files changed, 1018 insertions(+), 606 deletions(-) - -commit 721da3d542ab9b234b058f3c14ea9303d748107e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Sep 23 14:09:11 2010 +0200 - - [glib] Use g_memdup instead of g_strdup in poppler_document_get_id() - - Ids are not null-terminated strings, but fixed size byte arrays. - - glib/demo/info.cc | 8 ++++++-- - glib/poppler-document.cc | 33 ++++++++++++++------------------- - 2 files changed, 20 insertions(+), 21 deletions(-) - -commit 4ffc0ed73397e4e58f04c3577b093a3fd39c22bd -Author: Pino Toscano <pino@kde.org> -Date: Thu Sep 23 02:21:12 2010 +0200 - - [cpp] small clarification in document::load_from_data() apidox - - cpp/poppler-document.cpp | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 9491dc4a10706109d0f2b4d15f21b9a1db51d8c9 -Author: Pino Toscano <pino@kde.org> -Date: Thu Sep 23 02:18:07 2010 +0200 - - [cpp] add document::load_from_raw_data() - - ... to be able to load a document from an external data buffer, - with no need to copy the data. - - add as well a new document_private constructor to handle the new - situation, - and make sure to properly use the raw data when unlocking the document - - cpp/poppler-document-private.h | 5 ++++ - cpp/poppler-document.cpp | 53 - ++++++++++++++++++++++++++++++++++++++++ - cpp/poppler-document.h | 4 +++ - 3 files changed, 62 insertions(+), 0 deletions(-) - -commit a3c1f2d5ea1de969e9aaaa84ee38866938b4ce0c -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 22 20:14:27 2010 +0100 - - fix copyright - - poppler/Form.cc | 1 + - poppler/Form.h | 1 + - 2 files changed, 2 insertions(+), 0 deletions(-) - -commit 1aad013e353a9e59bdab8a1b4ce93f2ad7aaf4f2 -Author: Pino Toscano <pino@kde.org> -Date: Wed Sep 22 17:07:38 2010 +0200 - - update copyrights - - cpp/poppler-document.h | 2 +- - cpp/poppler-page-transition.cpp | 2 +- - cpp/poppler-private.cpp | 2 +- - cpp/poppler-rectangle.cpp | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - -commit 2d6d66ebe0215df66e33cb5974c58c324fab50b6 -Author: Pino Toscano <pino@kde.org> -Date: Wed Sep 22 17:07:13 2010 +0200 - - [cpp/tests] poppler-dump: show the PDF IDs, if available - - cpp/tests/poppler-dump.cpp | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit e39fde1b62544b90e73a2fc3609a260991db3a47 -Author: Pino Toscano <pino@kde.org> -Date: Wed Sep 22 16:52:08 2010 +0200 - - [cpp] add document::get_pdf_id() - - ... to get the IDs of a PDF document, if present. - - cpp/poppler-document.cpp | 29 +++++++++++++++++++++++++++++ - cpp/poppler-document.h | 1 + - 2 files changed, 30 insertions(+), 0 deletions(-) - -commit 299a1849a148fa0a7b3171c45ec68b9901aa93bb -Author: Pino Toscano <pino@kde.org> -Date: Wed Sep 22 16:36:30 2010 +0200 - - [Qt4] add Document::getPdfId() - - ... to get the IDs of a PDF document, if present. - - also, add two test cases for it in the metadata unit test - - qt4/src/poppler-document.cc | 16 +++++++++++++ - qt4/src/poppler-qt4.h | 14 +++++++++++ - qt4/tests/check_metadata.cpp | 50 - ++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 80 insertions(+), 0 deletions(-) - -commit dd9bcdb720ac1bf8a022635bcbb3b56e4b75bb15 -Author: Pino Toscano <pino@kde.org> -Date: Wed Sep 22 16:29:46 2010 +0200 - - Make the internal get_id() not fail because of null bytes in the ID. - - Passing the const char* of the byte string to convert is not enough - if its length must be checked, - as it might fail when the string of the ID contains null bytes. - Instead, pass the original GooString so its size is properly checked. - - Also, remove an hardcoded 16 and make it dependent on pdfIdLength, - as used elsewhere in get_id() function. - - poppler/PDFDoc.cc | 11 ++++++----- - 1 files changed, 6 insertions(+), 5 deletions(-) - -commit 9554cbc3cb4fc0cd7ad2295f5d27a18e030c6aee -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Sep 22 12:54:25 2010 +0200 - - [glib-demo] Show form field names in forms demo - - glib/demo/forms.c | 26 ++++++++++++++++++++------ - 1 files changed, 20 insertions(+), 6 deletions(-) - -commit 257634b26b682628dba5ee5f94cb0bad030bcb4f -Author: Mark Riedesel <mark@klowner.com> -Date: Wed Sep 22 12:52:49 2010 +0200 - - [glib] Add methods to get mapping, partial an fully qualified form - field names - - See bug #28780. - - glib/poppler-form-field.cc | 68 - +++++++++++++++++++++++++++++++++++ - glib/poppler-form-field.h | 3 ++ - glib/reference/poppler-sections.txt | 3 ++ - 3 files changed, 74 insertions(+), 0 deletions(-) - -commit 6db98abc59c154dcb18d69fc37e44ce804c3ccc9 -Author: Mark Riedesel <mark@klowner.com> -Date: Wed Sep 22 12:41:16 2010 +0200 - - Add getLabel method to FormWidget - - See bug #28780. - - poppler/Form.cc | 64 - +++++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Form.h | 8 +++++++ - 2 files changed, 72 insertions(+), 0 deletions(-) - -commit bcdca66fd57439735e0b9aa182ab7cfce29e9ed0 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Sep 21 11:49:37 2010 +0200 - - [glib] Fix minimum value of creation and modification date properties - - It should be -1 which means there's no date specified - - glib/poppler-document.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit d2578bd66129466b2dd114b6407c147598e09d2b -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 21 19:19:27 2010 +0100 - - Avoid loops in Form::fieldLookup - - Fixes crash in broken pdf provided by Joel Voss of Leviathan - Security Group - - poppler/Dict.h | 3 +++ - poppler/Form.cc | 27 ++++++++++++++++++++++++--- - 2 files changed, 27 insertions(+), 3 deletions(-) - -commit 2fe825deac055be82b220d0127169cb3d61387a8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 21 19:15:25 2010 +0100 - - Make sure obj1 is a num before reading it - - Fixes crash in broken pdf provided by Joel Voss of Leviathan - Security Group - - poppler/Gfx.cc | 20 ++++++++++++++++---- - 1 files changed, 16 insertions(+), 4 deletions(-) - -commit 473de6f88a055bb03470b4af5fa584be8cb5fda4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 21 19:11:42 2010 +0100 - - Fix memory leak if obj2 is not a dict - - Found thanks to PDF provided by Joel Voss of Leviathan Security Group - - poppler/Form.cc | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit 9706e28657ff7ea52aa69d9efb3f91d0cfaee70b -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 21 19:09:37 2010 +0100 - - Fix crash when idx is out of range - - Found thanks to PDF provided by Joel Voss of Leviathan Security Group - - poppler/Function.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 26a5817ffec9f05ac63db6c5cd5b1f0871d271c7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 21 19:08:54 2010 +0100 - - Fix crash when idx is out of range - - Fixes crash in broken pdf provided by Joel Voss of Leviathan - Security Group - - poppler/Function.cc | 6 +++++- - 1 files changed, 5 insertions(+), 1 deletions(-) - -commit dfdf3602bde47d1be7788a44722c258bfa0c6d6e -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 21 19:07:12 2010 +0100 - - Give a value to color.c[i] - - Might not be the better solution but it's better than having a random - value there - - Found thanks to PDF provided by Joel Voss of Leviathan Security Group - - poppler/Gfx.cc | 8 ++++++++ - 1 files changed, 8 insertions(+), 0 deletions(-) - -commit 01c85c08305bae16242f5979ab107fa5bb5f5100 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 21 19:04:37 2010 +0100 - - Forgot my (C) here - - poppler/Decrypt.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit bf2055088a3a2d3bb3d3c37d464954ec1a25771f -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 21 19:03:19 2010 +0100 - - Properly initialize stack - - Fixes crash in broken pdf provided by Joel Voss of Leviathan - Security Group - - poppler/Function.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit e853106b58d6b4b0467dbd6436c9bb1cfbd372cf -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 21 19:01:36 2010 +0100 - - Properly initialize parser - - Fixes crash in broken pdf provided by Joel Voss of Leviathan - Security Group - - poppler/Gfx.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 3422638b2a39cbdd33a114a7d7debc0a5f688501 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 21 18:58:43 2010 +0100 - - Fix crash in broken pdf (parser->getStream() is 0) - - Found thanks to PDF provided by Joel Voss of Leviathan Security Group - - poppler/Gfx.cc | 9 +++++++-- - 1 files changed, 7 insertions(+), 2 deletions(-) - -commit a2dab0238a69240dad08eca2083110b52ce488b7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 21 18:55:51 2010 +0100 - - Initialize properly charactersRead - - It is possible that there are calls to getPos before reset - Found thanks to PDF provided by Joel Voss of Leviathan Security Group - - poppler/Decrypt.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 39d140bfc0b8239bdd96d6a55842034ae5c05473 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 21 18:54:31 2010 +0100 - - Fix crash in broken pdf (code < 0) - - Found thanks to PDF provided by Joel Voss of Leviathan Security Group - - fofi/FoFiType1.cc | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit c6a091512745771894b54a71613fd6b5ca1adcb3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 21 18:50:25 2010 +0100 - - Fix memory leak - - Found thanks to PDF provided by Joel Voss of Leviathan Security Group - - poppler/Stream.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 9b6ddb68b80ef19cd2615900bd24da76374003d9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 20 19:47:47 2010 +0100 - - Fix copyright - - poppler/PDFDoc.cc | 1 + - poppler/PDFDoc.h | 1 + - 2 files changed, 2 insertions(+), 0 deletions(-) - -commit fa3abc23656204eedd022ee1c73d9e5af758cdac -Author: Pino Toscano <pino@kde.org> -Date: Fri Sep 17 22:20:09 2010 +0200 - - [cpp] More bits of API documentation. - - cpp/poppler-global.cpp | 124 - +++++++++++++++++++++++++++++++++++++++ - cpp/poppler-page-transition.cpp | 32 ++++++++++ - cpp/poppler-rectangle.cpp | 19 ++++++ - 3 files changed, 175 insertions(+), 0 deletions(-) - -commit c5f7b5becc9993c05b67a470d5a1e431806b98d6 -Author: Pino Toscano <pino@kde.org> -Date: Fri Sep 17 20:26:37 2010 +0200 - - update copyrights - - qt4/src/poppler-private.cc | 2 +- - qt4/tests/check_strings.cpp | 18 ++++++++++++++++++ - 2 files changed, 19 insertions(+), 1 deletions(-) - -commit ae517042570327b860c1db6b68f9697d5c104657 -Author: Pino Toscano <pino@kde.org> -Date: Fri Sep 17 19:39:10 2010 +0200 - - [cpp] improve a bit the Unicode* -> ustring conversion - - (although IMHO not yet solved) - - cpp/poppler-private.cpp | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit f4c6ef88f01f6763943a3e6e006e52dbea0b149c -Author: Pino Toscano <pino@kde.org> -Date: Fri Sep 17 16:07:05 2010 +0200 - - [Qt4/tests] check_strings: add a new test case for - QStringToUnicodeGooString - - not much test data at the moment though - - qt4/tests/check_strings.cpp | 37 +++++++++++++++++++++++++++++++++++++ - 1 files changed, 37 insertions(+), 0 deletions(-) - -commit ffd227b7669895325d752009d5185973cf86ce5b -Author: Pino Toscano <pino@kde.org> -Date: Fri Sep 17 14:25:57 2010 +0200 - - [Qt4] optimize UnicodeParsedString using less memory from QString - - - reserve() the right number of chars in the result string, so there - is less possibility to make it gr - ow its buffer - - do not call unicodeToQString() just to create a 1 character string, - but directly append a QChar crea - ted with the resulting unicode value (always belonging to the BMP) - - this should reduce of a very little bit the memory usage, while give - a sensible speedup of UnicodeParsedString invocations - - qt4/src/poppler-private.cc | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit 6180890008f2b1814f092f50b8f75376399905ba -Author: Pino Toscano <pino@kde.org> -Date: Fri Sep 17 13:23:25 2010 +0200 - - [Qt4/tests] check_strings: add a test case for UnicodeParsedString - - very simple test data for it, at the moment - - qt4/tests/check_strings.cpp | 48 - +++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 48 insertions(+), 0 deletions(-) - -commit c5f78d7d3953d62a746c6f5a90085ea020fe5ec7 -Author: Pino Toscano <pino@kde.org> -Date: Fri Sep 17 12:54:32 2010 +0200 - - [Qt4/tests] check_string: use a pool of GooString - - this way we can reuse the GooString in a data set even after a test - run (eg in benchmarks), - making sure they all are properly freed - - qt4/tests/check_strings.cpp | 35 ++++++++++++++++++++++++++++++----- - 1 files changed, 30 insertions(+), 5 deletions(-) - -commit 0cd5a256bdf7778c0c720941a611ad8ab56fa2e9 -Author: Pino Toscano <pino@kde.org> -Date: Fri Sep 17 00:27:53 2010 +0200 - - [Qt4/tests] first version of a unit test for strings - - this is used for testing the various string conversions: - - unicodeToQString - - UnicodeParsedString - - QStringToUnicodeGooString - - QStringToGooString - the 1st and the 4th have basic tests - - given private symbols are used, this unit test is not compiled on - windows (at least, it supposed to be so) - - qt4/tests/CMakeLists.txt | 3 + - qt4/tests/Makefile.am | 7 +++- - qt4/tests/check_strings.cpp | 101 - +++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 110 insertions(+), 1 deletions(-) - -commit c6e8b21c9829672e6ca42e6cdc0ca631a06af73f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Sep 17 13:44:38 2010 +0200 - - [glib] docs: Document PopplerDocument properties - - glib/poppler-document.cc | 380 - +++++++++++++++++++++++++++------------------- - 1 files changed, 223 insertions(+), 157 deletions(-) - -commit d4a6c17255821925906c17b79b88eebed9edfee1 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Sep 17 13:04:33 2010 +0200 - - [glib] Add accessor for all PopplerDocument properties - - PopplerDocument:linearized is now a boolean value rather than string, - so this commit breaks the API again. - - glib/demo/info.cc | 8 +- - glib/poppler-document.cc | 532 - ++++++++++++++++++++++++++++------- - glib/poppler-document.h | 74 +++-- - glib/reference/poppler-sections.txt | 16 + - 4 files changed, 498 insertions(+), 132 deletions(-) - -commit a5fec843dbb40fdd2007b926405b96789b21496d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Sep 17 10:38:14 2010 +0200 - - [glib-demo] Show permanent/update ID in document info demo - - glib/demo/info.cc | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -commit bfaf8f3cc62f28c6255d42680b9464ab9973737e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Sep 17 10:37:32 2010 +0200 - - [glib] Add poppler_document_get_id() to get the PDF file identifier - - glib/poppler-document.cc | 52 - +++++++++++++++++++++++++++++++++++ - glib/poppler-document.h | 3 ++ - glib/reference/poppler-sections.txt | 1 + - 3 files changed, 56 insertions(+), 0 deletions(-) - -commit b15641677447b2e89853a667fc34bcca1383a97a -Author: srinivas adicherla <srinivas.adicherla@gmail.com> -Date: Fri Sep 17 10:36:22 2010 +0200 - - Add a method to get the PDF file identifier - - poppler/PDFDoc.cc | 65 - +++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/PDFDoc.h | 3 ++ - 2 files changed, 68 insertions(+), 0 deletions(-) - -commit 3b4a901a4431814590449b6cd5ea418f4d6c1172 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Sep 16 23:23:03 2010 +0100 - - Add -s option - - Writes a single html file - Since git does not allow multiple authors i'm adding them here - OSSD CDAC Mumbai by Leena Chourey (leenac@cdacmumbai.in) and Onkar - Potdar (onkar@cdacmumbai.in) - - utils/HtmlFonts.cc | 11 +++++- - utils/HtmlFonts.h | 18 +++++++++- - utils/HtmlOutputDev.cc | 84 - ++++++++++++++++++++++++++++++----------------- - utils/pdftohtml.1 | 3 ++ - utils/pdftohtml.cc | 15 +++++++-- - 5 files changed, 93 insertions(+), 38 deletions(-) - -commit 2792330f6caeeb42e2996271456b562489215c4c -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 15 22:42:09 2010 +0100 - - new soversions - - CMakeLists.txt | 2 +- - cpp/CMakeLists.txt | 2 +- - cpp/Makefile.am | 2 +- - glib/CMakeLists.txt | 2 +- - glib/Makefile.am | 4 ++-- - poppler/Makefile.am | 2 +- - qt4/src/CMakeLists.txt | 2 +- - qt4/src/Makefile.am | 2 +- - 8 files changed, 9 insertions(+), 9 deletions(-) - -commit 1cf56c732b63d0a310bc45b8e4b3f3f357a42cb1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 15 20:56:42 2010 +0100 - - 0.15.0 in the versions - - CMakeLists.txt | 2 +- - configure.ac | 2 +- - cpp/Doxyfile | 2 +- - qt4/src/Doxyfile | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - -commit 4ec0be498b557c3cf631e43823c6d7004304dff3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 15 20:56:34 2010 +0100 - - 0.15.0 NEWS - - NEWS | 90 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 90 insertions(+), 0 deletions(-) - -commit c01a17745c04aef3e6f2225679c867a03e731e83 -Author: Pino Toscano <pino@kde.org> -Date: Thu Sep 16 20:55:56 2010 +0200 - - [CMake] disable the GObject introspection system - - it cannot complete the scanning propecure correctly without libtool - it seems - - CMakeLists.txt | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 9be7d3143b12f291409f88f3d725a239934b205e -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 15 19:19:30 2010 +0100 - - update copyright - - poppler/OptionalContent.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit b9333529bba43a71655fdbf1919ba515f7df9ca3 -Author: Pino Toscano <pino@kde.org> -Date: Wed Sep 15 17:23:54 2010 +0200 - - [cpp/tests] poppler-dump: convert out_ustring() to an - operator<<(std::ostream&) - - so we have a chance to better output the bytearray of a string to - the stream - - cpp/tests/poppler-dump.cpp | 26 ++++++++++++++++++-------- - 1 files changed, 18 insertions(+), 8 deletions(-) - -commit a44f711b4412332875337e9fb7509f18db806ddc -Author: Pino Toscano <pino@kde.org> -Date: Wed Sep 15 16:44:30 2010 +0200 - - [cpp/tests] poppler-dump: add a "--show-text <physical|raw>" option - - ... to show the text of a page in the specified layout - - cpp/tests/poppler-dump.cpp | 29 +++++++++++++++++++++++++++++ - 1 files changed, 29 insertions(+), 0 deletions(-) - -commit 0094c9372b5b439af2564d83d6fb7439f4bdba88 -Author: Pino Toscano <pino@kde.org> -Date: Wed Sep 15 13:19:13 2010 +0200 - - [cpp] add a new page::text() for specifying a layout mode - - add a new text_layout_enum enum for the layout mode, used by the - new text() - make the old text() implementation call the new one with the old value - (= physical) - add & adapt the apidox accordingly - - cpp/poppler-page.cpp | 27 +++++++++++++++++++++++++-- - cpp/poppler-page.h | 5 +++++ - 2 files changed, 30 insertions(+), 2 deletions(-) - -commit 4ec3e7784cdba5c0720b1992ba500e97a7e0ed2b -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Sep 15 11:24:07 2010 +0200 - - Set initial state of optional content groups based on BaseState field - - There's a test case using BaseState attached to bug #30106 - - poppler/OptionalContent.cc | 14 +++++++++----- - 1 files changed, 9 insertions(+), 5 deletions(-) - -commit f49aa86812ed8ad91d41c675bc670b3d88d3444a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Sep 13 14:37:10 2010 +0200 - - [glib] doc: Document PopplerPage:label property - - glib/poppler-page.cc | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit f41fe7ae6e374100574c49d1bb7a3ddc646786c8 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Sep 13 14:36:43 2010 +0200 - - [glib] doc: Add poppler_page_get_label to poppler-sections.txt - - glib/reference/poppler-sections.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 91b8246766a8e5d9cca385b5854667d7967a9d71 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Sep 13 14:22:56 2010 +0200 - - [glib-demo] Use poppler_page_get_label() instead of g_object_get() - - glib/demo/page.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit b82412ef86091f4d249c818cebf00e4c59bae311 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Sep 13 14:22:03 2010 +0200 - - [glib] Add poppler_page_get_label() - - It's just an accessor for the property label - - glib/poppler-page.cc | 47 - ++++++++++++++++++++++++++++++++++------------- - glib/poppler-page.h | 1 + - 2 files changed, 35 insertions(+), 13 deletions(-) - -commit ff88abf61f4bf90ad276a8593be1818d39c8ecac -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Sep 13 10:05:45 2010 +0200 - - [glib] Avoid core headers to be parsed by the g-i scanner - - glib/poppler-document.cc | 2 ++ - glib/poppler-page.cc | 2 ++ - glib/poppler-private.h | 3 +++ - 3 files changed, 7 insertions(+), 0 deletions(-) - -commit 53324502898ae5fbbb21a4fb819e4a84acdc1a64 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Sep 12 11:42:03 2010 +0200 - - [glib] Fix a crash when building layer actions - - Some layers are just the parent of others, but not actually a layer so - they don't have an optional content object. Fixes bug #30106. - - glib/poppler-action.cc | 15 +++++++++------ - 1 files changed, 9 insertions(+), 6 deletions(-) - -commit dfc6ea7877635212aa7c5f7ade07af4aa9467e96 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Sep 12 11:36:58 2010 +0200 - - [glib] Fix layers array generation when it contains multiple arrays - - Fixes layers for document attached to bug #30106. - - glib/poppler-document.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 7574912b6c0ff0421c69b6e8c6835957d5126d7d -Author: Jonathan Liu <net147@gmail.com> -Date: Thu Sep 9 20:34:03 2010 +0100 - - Fix checking whether _WIN32 is defined - - Bug 29329 - - poppler/StdinCachedFile.cc | 2 +- - utils/pdftoppm.cc | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 2fc83068c32e09fa3de03a157a420490431ea706 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Sep 5 14:26:27 2010 +0100 - - Increase the number of cached glyphs for small sizes - - Should not increase memory usage much and gives me a 17% speed - increase - in the firefox nytimes advertisment pdf - - splash/SplashFont.cc | 8 ++++++-- - 1 files changed, 6 insertions(+), 2 deletions(-) - -commit 0d96f74f31171c58a55e4ac36d492ce36dd5e7c5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Sep 5 12:31:57 2010 +0100 - - Use std::sort instead of qsort - - Gives a nice speed improvement without any real code change - Passes regression tests - Based on PaweÅ‚ Wiejacha patches - - poppler/GfxFont.cc | 17 ++++++-------- - splash/SplashXPath.cc | 48 - +++++++++++++++++++++++++++-------------- - splash/SplashXPathScanner.cc | 10 +++++--- - 3 files changed, 44 insertions(+), 31 deletions(-) - -commit 3b4816b2b8caa0e2baafbe4c0eb1e45e452d01ce -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 1 20:43:35 2010 +0100 - - forgot the file - - qt4/tests/poppler-texts.cpp | 40 - ++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 40 insertions(+), 0 deletions(-) - -commit b0db93c71a83946aa3e02bae6b396223dcca19d1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 1 20:43:14 2010 +0100 - - add since and rename enum - - qt4/src/poppler-page.cc | 2 +- - qt4/src/poppler-qt4.h | 5 ++++- - 2 files changed, 5 insertions(+), 2 deletions(-) - -commit a86f9d90be99a36c41c6932fb4d9a202c4ff6d05 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 1 20:20:48 2010 +0100 - - Clarify the ownership - - qt4/src/poppler-qt4.h | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 33ad3a17ac26879fcd6a7fad2023dd219bc5919f -Author: Suzuki Toshiya <mpsuzuki@hiroshima-u.ac.jp> -Date: Wed Sep 1 20:19:54 2010 +0100 - - Add a way to access the raw text - - poppler/TextOutputDev.cc | 23 ++++++++++++++++++++--- - qt4/src/poppler-page.cc | 11 +++++++++-- - qt4/src/poppler-qt4.h | 19 +++++++++++++++++++ - qt4/tests/CMakeLists.txt | 1 + - qt4/tests/Makefile.am | 7 ++++++- - 5 files changed, 55 insertions(+), 6 deletions(-) - -commit 46e89248b3c5b1789baa3bd9bfa012570720ddb5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 1 19:54:02 2010 +0100 - - quadding is not a GBool but an int - - poppler/Annot.cc | 2 +- - poppler/Annot.h | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -commit ae79fc504c5424be2fa21dbc5498ced4db6e5dd3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Aug 31 22:14:57 2010 +0100 - - Make GBool a bool instead of an int - - Passes the regression tests and might make things faster and use a bit - less memory - - cpp/tests/CMakeLists.txt | 2 +- - cpp/tests/Makefile.am | 2 +- - goo/gtypes.h | 7 +- - utils/CMakeLists.txt | 2 +- - utils/Makefile.am | 2 +- - utils/parseargs.c | 208 - ---------------------------------------------- - utils/parseargs.cc | 208 - ++++++++++++++++++++++++++++++++++++++++++++++ - 7 files changed, 216 insertions(+), 215 deletions(-) - -commit d3f32f2c4f9f46620c0287c44bef686f340461f3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Aug 31 18:51:17 2010 +0100 - - Read from the correct variable - - Fixes crash on KDE bug 249586 - - poppler/Movie.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 681bb38eafc720b309172ed7c650439c559663a0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Aug 26 23:55:58 2010 +0100 - - Make declaration match what there is in the .cc file - - poppler/TextOutputDev.h | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit c91e869304fc263c52f21ee484a57a6f1900f6b2 -Author: Suzuki Toshiya <mpsuzuki@hiroshima-u.ac.jp> -Date: Thu Aug 26 19:40:46 2010 +0100 - - Add -r option to pdftohtml - - Fixes bug 29551 - - utils/pdftohtml.1 | 3 +++ - utils/pdftohtml.cc | 18 +++++++++++++----- - 2 files changed, 16 insertions(+), 5 deletions(-) - -commit 9b4be586640b4ad344b1b3ed4c9cda8351257f0c -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Aug 25 19:26:30 2010 +0100 - - Use 3 not nComps - - poppler/GfxState.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 218f67c527fb41babf2703ba068d072f8326e37b -Author: PaweÅ‚ Wiejacha <pawel.wiejacha@gmail.com> -Date: Tue Aug 24 23:47:06 2010 +0100 - - Make SplashOutputDev::imageSrc faster - - By using getRGBLine when possible - - poppler/SplashOutputDev.cc | 39 ++++++++++++++++++++++++++++++--------- - 1 files changed, 30 insertions(+), 9 deletions(-) - -commit 868f4a1f22051b7978f47a0614f23fd66dbb7ca8 -Author: PaweÅ‚ Wiejacha <pawel.wiejacha@gmail.com> -Date: Tue Aug 24 23:35:21 2010 +0100 - - Make GfxICCBasedColorSpace::getRGBLine faster - - By calling doTransform less - - poppler/GfxState.cc | 15 +++++++-------- - poppler/GfxState.h | 4 +++- - 2 files changed, 10 insertions(+), 9 deletions(-) - -commit 46e37c54c6365cf37dc1e223a3c146e7b96a56af -Author: PaweÅ‚ Wiejacha <pawel.wiejacha@gmail.com> -Date: Tue Aug 24 21:23:34 2010 +0100 - - Do not call pow three times when one is enough - - poppler/GfxState.cc | 12 ++++++------ - 1 files changed, 6 insertions(+), 6 deletions(-) - -commit 8591c804598576556c6d24a66b6648de8ed1c4eb -Author: Mike Slegeir <tehpola@yahoo.com> -Date: Sun Aug 22 22:01:03 2010 +0100 - - Use splash instead of external gs invocation to render the background - - Patch in bug 19404, should fix 9746 too - - utils/pdftohtml.1 | 8 ++- - utils/pdftohtml.cc | 210 - +++++++++++++++++++++++++++++++++++++--------------- - 2 files changed, 158 insertions(+), 60 deletions(-) - -commit 7fc3c21a8c5d6cf8517100427b182887a9569ed0 -Author: Ilya Gorenbein <igorenbein@finjan.com> -Date: Fri Aug 20 20:24:31 2010 +0100 - - Fix failure to parse PDF with damaged internal structure - - Patch in bug 29189, fixes bug 3870 - - poppler/PDFDoc.cc | 24 ++++++++++++--- - poppler/XRef.cc | 80 - ++++++++++++++++++++++++++++++---------------------- - poppler/XRef.h | 5 ++- - 3 files changed, 68 insertions(+), 41 deletions(-) - -commit bedf48d4397ae412a6d28fc8fea16cc23a29f07c -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Aug 17 22:02:59 2010 +0100 - - use memset instead of a for - - splash/Splash.cc | 4 +--- - 1 files changed, 1 insertions(+), 3 deletions(-) - -commit 03ca5b4a5c9964d9c0e9913eb2061692848c4b95 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Aug 10 19:55:31 2010 +0100 - - Update copyrights - - goo/GooTimer.cc | 1 + - goo/GooTimer.h | 1 + - goo/gfile.cc | 2 +- - poppler/DCTStream.cc | 1 + - poppler/DCTStream.h | 1 + - poppler/GfxState.cc | 2 +- - poppler/Page.cc | 2 +- - qt4/src/poppler-annotation.cc | 2 +- - 8 files changed, 8 insertions(+), 4 deletions(-) - -commit 3bca8ddc10bf4291bf0c0e39c67341a05953e949 -Author: Jonathan Liu <net147@gmail.com> -Date: Tue Aug 10 19:42:40 2010 +0100 - - Tell windows we are writing/reading binary data - - Bug #29329 - - poppler/StdinCachedFile.cc | 9 +++++++++ - utils/pdftoppm.cc | 9 +++++++++ - 2 files changed, 18 insertions(+), 0 deletions(-) - -commit bdd617f2177a7836f6b6686fde892664513a32a7 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Aug 3 13:05:26 2010 +0200 - - [glib] Fix a crash when a layer doesn't have a name - - Fixes bug #28842. - - glib/poppler-layer.cc | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit e9f0646ca664cc27825f7e084f8419fe0de1fcfc -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Aug 3 13:02:52 2010 +0200 - - Catalog page array might contain NULL for some pages in invalid - documents - - Fixes a crash reproducible with gtk-splash-test when opening document - attached to bug #28842. - - poppler/PDFDoc.cc | 27 +++++++++++++++------------ - 1 files changed, 15 insertions(+), 12 deletions(-) - -commit 842209782ca3ba8c1c783cccf565372a18b3fda5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 30 19:29:12 2010 +0100 - - Do not crash when using pdftops in some files - - Fixes crash in file in kde bug 246269. The output is still wrong - though - - fofi/FoFiType1C.cc | 12 +++++++----- - 1 files changed, 7 insertions(+), 5 deletions(-) - -commit 0dd7c80b7baf2622eb4780a867c4dc6291773f3b -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jul 26 23:58:26 2010 +0100 - - Do not overwrite the rgb values - - Recommended by Koji Otani in Re: [poppler] Question about code - Passed the regression testing in my files - - poppler/GfxState.cc | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 627edf88c8f5c073a68bd05990df56e1af547292 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jul 25 13:56:03 2010 +0200 - - [annots] Fix a crash when adding a new annotation and annots object - is an array - - When annots object is an array instead of a ref, the modified - object is - actually de page object. - - poppler/Page.cc | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit 5d86f9b600b1e10de93bcaf1b925fadbc2a47522 -Author: mpsuzuki <mpsuzuki@hiroshima-u.ac.jp> -Date: Sat Jul 24 15:12:05 2010 +0100 - - reindent correctly - - poppler/TextOutputDev.cc | 34 +++++++++++++++++----------------- - 1 files changed, 17 insertions(+), 17 deletions(-) - -commit d0a6f9abdab88ec43004b6766337db304cbf6a25 -Author: Pino Toscano <pino@kde.org> -Date: Thu Jul 22 21:28:55 2010 +0200 - - [CMake] improve the way include dirs and cflags for gdk and gtk - are set - - correctly include_directories() for the include dirs, while add the - cflags which are not include dirs as definitions - - glib/CMakeLists.txt | 5 +++-- - glib/demo/CMakeLists.txt | 5 ++++- - 2 files changed, 7 insertions(+), 3 deletions(-) - -commit 02d85dd2cc154dbb6caa04a349532033d833edd1 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jul 20 13:53:56 2010 +0200 - - [glib-demo] Add support for adding annots in annot demo - - glib/demo/annots.c | 114 - ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 114 insertions(+), 0 deletions(-) - -commit 969cb850f5c2bc31de82c591b2b3210b5cfabf5f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jul 20 13:53:29 2010 +0200 - - [glib] docs: Add new symbols to poppler-sections.txt - - glib/reference/poppler-sections.txt | 18 ++++++++++++++++++ - 1 files changed, 18 insertions(+), 0 deletions(-) - -commit 251959438b6257fe71ed58e79eec60cda68a66cf -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jul 20 13:53:00 2010 +0200 - - [glib] Add poppler_page_add_annot() - - glib/poppler-document.cc | 7 ++++--- - glib/poppler-page.cc | 19 +++++++++++++++++++ - glib/poppler-page.h | 2 ++ - 3 files changed, 25 insertions(+), 3 deletions(-) - -commit 78a4f6976e708f2cc23aac49fbff0faf00e74bc3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jul 20 13:51:16 2010 +0200 - - [glib] annots: Add several setter methods - - glib/poppler-annot.cc | 278 - +++++++++++++++++++++++++++++++++++++++++++----- - glib/poppler-annot.h | 26 +++++ - glib/poppler-private.h | 6 + - 3 files changed, 285 insertions(+), 25 deletions(-) - -commit fee488c9db60ab691ce9ff5eef284be2af897aee -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jul 18 11:26:59 2010 +0200 - - [annots] Add AnnotMarkup::setOpacity - - poppler/Annot.cc | 8 ++++++++ - poppler/Annot.h | 1 + - 2 files changed, 9 insertions(+), 0 deletions(-) - -commit d15a355ede2d8510c4df847ea0b92b5357b29914 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jul 18 09:57:35 2010 +0200 - - Set the page reference (P in annot dict) when adding a new annot to - a page - - poppler/Annot.cc | 9 +++++++++ - poppler/Annot.h | 3 +++ - poppler/Page.cc | 2 ++ - 3 files changed, 14 insertions(+), 0 deletions(-) - -commit 49ffb46db3118db874d2d9830bb034762d625c61 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jul 19 16:31:54 2010 +0100 - - Remove exception support - - We don't use it and don't even support it properly - - CMakeLists.txt | 1 - - config.h.cmake | 3 -- - configure.ac | 4 --- - goo/gmem.cc | 56 - +++++++++++---------------------------- - goo/gmem.h | 38 ++++++++------------------- - poppler/poppler-config.h.cmake | 5 --- - poppler/poppler-config.h.in | 5 --- - 7 files changed, 27 insertions(+), 85 deletions(-) - -commit dd2e9399868e3dbf2fa4ede050f8d74d29ebbbb4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jul 19 16:31:43 2010 +0100 - - add uninstalled.pc to ignore - - .gitignore | 7 +++++++ - 1 files changed, 7 insertions(+), 0 deletions(-) - -commit d1033006aae381a0f075e02d54638a1af997caf3 -Author: Pino Toscano <pino@kde.org> -Date: Sat Jul 17 21:46:14 2010 +0200 - - add FindGObjectIntrospection.cmake and - GObjectIntrospectionMacros.cmake to the dist - - Makefile.am | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit ce8d03950736cc35d035a44a7d88e5f2a9defa74 -Author: Pino Toscano <pino@kde.org> -Date: Sat Jul 17 21:39:08 2010 +0200 - - [CMake/glib] add support for gobject-introspection - - other than a module to find (using pkg-config) gobject-introspection, - this adds a macro (gir_add_introspections) to add new introspections - in a directory. - its working is much similar (even the variable names used) to - the Makefile version provided by gobject-repository itself, with - the notable difference of a disabled libtool in the g-ir-scanner - invocation. - the only additional step needed is adding two custom targets, compiled - by ALL, which have the gir and the typelib files as dependencies, - to make them build with the usual `make all'. - - CMakeLists.txt | 5 +- - cmake/modules/FindGObjectIntrospection.cmake | 61 +++++++++++++++ - cmake/modules/GObjectIntrospectionMacros.cmake | 94 - ++++++++++++++++++++++++ - glib/CMakeLists.txt | 36 +++++++++ - 4 files changed, 194 insertions(+), 2 deletions(-) - -commit 78bf43d8e11aa52db9862af118c597e117d31083 -Author: Pino Toscano <pino@kde.org> -Date: Sat Jul 17 20:28:58 2010 +0200 - - [CMake] properly use the glib2 include dirs - - properly use GLIB2_INCLUDE_DIRS (pkg-config result) for the glib - include dirs, - while turn GLIB2_CFLAGS into GLIB2_CFLAGS_OTHERS to add the remaining - CFLAGS as definitions - - glib/CMakeLists.txt | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 6f3082d677bc62aa3f8124132e3e337c01be2629 -Author: Pino Toscano <pino@kde.org> -Date: Sat Jul 17 19:28:09 2010 +0200 - - [CMake] split the generated sources of poppler_glib_SRCS in an own - poppler_glib_generated_SRCS - - glib/CMakeLists.txt | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit 2a252dd9b05857bbd10dee235e873886fc74ec17 -Author: Pino Toscano <pino@kde.org> -Date: Sat Jul 17 14:57:38 2010 +0200 - - [CMake] add stub message and TODO for the gobject-introspection - support - - CMakeLists.txt | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 8a3d1794a8ef5d525bb454755fec018e3fcb3816 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 16 14:00:32 2010 +0100 - - update - - TODO | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 31ac578942b82cbd16b064abca586ccb89dfa7ce -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 15 15:05:10 2010 +0200 - - Rework ChangeLog generation to fix make distcheck - - Makefile.am | 22 +++++++++++++++++++--- - 1 files changed, 19 insertions(+), 3 deletions(-) - -commit 5da5825ecab63089a19aac694826271019a94e6d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 15 15:03:20 2010 +0200 - - [glib] docs: Add version.xml to content_files var - - glib/reference/Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit fe69b474ae63c9d5d2538db9e51e666dd6ea9fb3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jul 15 10:51:21 2010 +0100 - - Fix padding of names - - The previous method returned 2 for documents with 100 pages, which - is wrong as 100 needs 3 - characters, not 2 - - utils/pdftoppm.cc | 14 +++++++++++++- - 1 files changed, 13 insertions(+), 1 deletions(-) - -commit e265ae2d8a46df00ab1bbd863f01f652068d265f -Author: Brian Cameron <brian.cameron@oracle.com> -Date: Wed Jul 14 20:26:25 2010 +0100 - - Add uninstalled .pc file for poppler when using autoconf - - Makefile.am | 9 ++++++++- - configure.ac | 9 ++++++++- - poppler-cairo-uninstalled.pc.in | 6 ++++++ - poppler-cpp-uninstalled.pc.in | 7 +++++++ - poppler-glib-uninstalled.pc.in | 7 +++++++ - poppler-qt-uninstalled.pc.in | 7 +++++++ - poppler-qt4-uninstalled.pc.in | 7 +++++++ - poppler-splash-uninstalled.pc.in | 7 +++++++ - poppler-uninstalled.pc.in | 6 ++++++ - 9 files changed, 63 insertions(+), 2 deletions(-) - -commit 552ab99e60fe4068be8e4e415924e4be289e47cd -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jul 13 10:18:01 2010 +0200 - - Handle ColorTransform in DCT streams when using libjpeg - - Fixes bug #28873. - - poppler/DCTStream.cc | 30 ++++++++++++++++++++++++++++++ - poppler/DCTStream.h | 1 + - 2 files changed, 31 insertions(+), 0 deletions(-) - -commit 8a6697f89625106f3c373dbc7b4dc521e22502f7 -Author: Hib Eris <hib@hiberis.nl> -Date: Sat Jul 3 16:42:04 2010 +0200 - - Only define findModifier() when used - - Prevents a warning when building with win32 font backend. - - poppler/GlobalParams.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit b1fdb87a4ebb5079c731256cce1870de8c54c65d -Author: Hib Eris <hib@hiberis.nl> -Date: Fri Jul 2 10:53:20 2010 +0200 - - Fix compile warnings on auto imports for mingw compiler - - cpp/Makefile.am | 2 +- - cpp/tests/Makefile.am | 2 ++ - glib/Makefile.am | 2 ++ - poppler/Makefile.am | 2 +- - qt4/demos/Makefile.am | 2 ++ - qt4/src/Makefile.am | 2 +- - qt4/tests/Makefile.am | 2 ++ - 7 files changed, 11 insertions(+), 3 deletions(-) - -commit 9e577110134eb1e093e697b7504efca759000086 -Author: Hib Eris <hib@hiberis.nl> -Date: Fri Jul 2 10:51:24 2010 +0200 - - Check for declaration of gettimeofday() - - The function gettimeofday() is not declared in ansi mode with the - mingw compiler, even though the function exists. Therefore, - configure must - not only check with AC_CHECK_FUNC, but also with AC_CHECK_DECL. - - Also, the checks must run in a C++ context because that is where - gettimeofday() is used. - - configure.ac | 7 ++++--- - 1 files changed, 4 insertions(+), 3 deletions(-) - -commit 58c8430ac584f3ba5e97aceb148e6287bfc45f95 -Author: Hib Eris <hib@hiberis.nl> -Date: Wed Jun 30 15:06:44 2010 +0200 - - Set -ansi compiler flag early in configure.ac - - The -ansi compiler flag does not enable warnings, but turns of certain - features of GCC. To force feature tests to use this flag, it should be - set early in configure.ac - - This is important for the mingw compiler where header files refrain - from declaring certain function (e.g. gettimeofday()) when the -ansi - flag is set. - - configure.ac | 7 +++++-- - 1 files changed, 5 insertions(+), 2 deletions(-) - -commit e3663a855a9c86f0a3988a7a50fa40d37d0ea069 -Author: Hib Eris <hib@hiberis.nl> -Date: Fri Jul 2 14:45:15 2010 +0200 - - Use MAX_PATH instead of _MAX_PATH everywhere - - _MAX_PATH is compiler specific and not availble with the mingw - compiler - in ansi mode. MAX_PATH is in the Windows api and thus always available - when windows.h is included. - - goo/gfile.cc | 4 ++-- - poppler/GlobalParams.cc | 2 +- - poppler/PDFDoc.cc | 4 ++-- - 3 files changed, 5 insertions(+), 5 deletions(-) - -commit 7227c407d23a37f5d95e6c01cb7411be2f82ca85 -Author: Hib Eris <hib@hiberis.nl> -Date: Wed Jun 30 16:15:06 2010 +0200 - - Check for _WIN32 instead of _MSC_VER - - goo/GooTimer.cc | 6 +++--- - goo/GooTimer.h | 4 ++-- - 2 files changed, 5 insertions(+), 5 deletions(-) - -commit 34e727e011529be312313a1f4d4fa1ba9c545888 -Author: Hib Eris <hib@hiberis.nl> -Date: Tue Jun 29 16:43:31 2010 +0200 - - Fix cross compiling for Windows with autotools - - When cross compiling for Windows with autotools, libtool creates - libpoppler_qt4_la-poppler-optcontent.lo instead of - poppler-optcontent.lo. Thus, explicitly using poppler-optcontent.lo to - create poppler-optcontent.moc does not work well. - - qt4/src/Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 1bc2f4501ea4e56ca99ae4d94d6cf34cf33c2c7a -Author: Hib Eris <hib@hiberis.nl> -Date: Tue Jun 29 15:34:22 2010 +0200 - - define poppler_qt4_EXPORTS when building with autotools - - Lets you build the qt4 bindings for Windows with automake/autoconf. - - qt4/src/Makefile.am | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 5825114a26cc6eece2e556063f640dda53ea1e11 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jul 11 12:24:20 2010 +0100 - - Compile++ - - glib/demo/CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 5e4d8eeea0b9dba68420c164975418c76a53be85 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jul 10 15:54:28 2010 +0200 - - [pdf-inspector] Do not render for printing - - test/pdf-inspector.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit e6824972a213a888ca0185b7ae0a75fc23f75797 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jul 10 15:52:15 2010 +0200 - - [annots] Use a transparency group for markup annots without AP and - opacity != 1 - - Fixes bug #623616. - - poppler/Annot.cc | 346 - +++++++++++++++++++++++++----------------------------- - poppler/Annot.h | 3 + - poppler/Gfx.cc | 9 +-- - poppler/Gfx.h | 2 +- - 4 files changed, 165 insertions(+), 195 deletions(-) - -commit 70ce0b6ea1a0d61f5048d2ae49c639d74a643b29 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jul 9 17:04:00 2010 +0200 - - [annots] Clamp QuadPoints coords to annot rectangle instead of - ignore points - - Fixes appearance stream generation for document attached to bug - #623616. - - poppler/Annot.cc | 38 +++++++++++++++++++++----------------- - 1 files changed, 21 insertions(+), 17 deletions(-) - -commit 8a9e561bfe64f71e9f38c43e5c6be7e5069b2349 -Author: Hib Eris <hib@hiberis.nl> -Date: Fri Jul 2 21:07:53 2010 +0200 - - Nicer autogen.sh output - - autogen.sh | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit ce4d328294cea73f4b7368691dc1fed6bd45d569 -Author: Hib Eris <hib@hiberis.nl> -Date: Fri Jul 2 20:51:47 2010 +0200 - - Add option for autogen.sh to skip configure - - If you do not want to automatically run configure when calling - autogen.sh, run it with: - - $ NOCONFIGURE=1 ./autogen.sh - - This feature is modeled after gnome-autogen.sh behaviour. - - autogen.sh | 8 +++++++- - 1 files changed, 7 insertions(+), 1 deletions(-) - -commit d7ee87c5d0a35c8d4fcc88bde4b8496c49f397c6 -Author: Hib Eris <hib@hiberis.nl> -Date: Tue Jul 6 15:16:08 2010 +0100 - - warnings-=2 - - poppler/GfxFont.cc | 3 ++- - utils/HtmlOutputDev.cc | 3 ++- - 2 files changed, 4 insertions(+), 2 deletions(-) - -commit 1e7f457ca1617fd8c958feef8dd7e694476dedd9 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jul 9 12:29:14 2010 +0200 - - [cairo] Use ceil to convert double to int in tilingPatternFill() - - Fixes rendering of page 2 of document attached to bug #28954. - - poppler/CairoOutputDev.cc | 8 ++++++-- - 1 files changed, 6 insertions(+), 2 deletions(-) - -commit 91a7605eb51144f2e7dea69aa9454fff47c49bd2 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jul 9 11:42:56 2010 +0200 - - [glib] Fix build when GDK is enabled - - glib/test-poppler-glib.cc | 8 +------- - 1 files changed, 1 insertions(+), 7 deletions(-) - -commit 09e3e0e9c5134688c4ed2af5cd3a12aa2986474c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 8 18:56:38 2010 +0200 - - [glib] Fix poppler_page_find_tex() when called more than once - - Fixes bug #27927 - - glib/poppler-page.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 25427bdecb219ffe6f0592d2ac36de60c247bfd9 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 8 17:46:22 2010 +0200 - - Fix build when compiling without glib frontend - - configure.ac | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 550684731356a66753ec19f5a8ca4b572db6d2d5 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 8 17:16:02 2010 +0200 - - [glib-demo] Add selections demo - - glib/demo/Makefile.am | 2 + - glib/demo/main.c | 4 +- - glib/demo/selections.c | 687 - ++++++++++++++++++++++++++++++++++++++++++++++++ - glib/demo/selections.h | 31 +++ - 4 files changed, 723 insertions(+), 1 deletions(-) - -commit b257428150e2c13dcc24fd8f75e4ee2c679ab414 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 8 14:45:29 2010 +0200 - - [glib] Add poppler_page_get_selected_text() - - And change poppler_page_get_text() to return the text of the whole - page. For consistency with poppler_page_get_selection_region() - get_seletect_text() doesn't invert the y coords as get_text() - did. This - change breaks the API. Users of poppler_page_get_text should: - - - Use the new poppler_page_get_text() if they want the text of the - whole page - - - Use poppler_page_get_selected_text() if they want the text of the - selected area. In this case they shouldn't invert the y coords - anymore - before calling the method. - - glib/demo/text.c | 9 +------ - glib/poppler-page.cc | 43 - ++++++++++++++++++++++++++--------- - glib/poppler-page.h | 3 +- - glib/reference/poppler-sections.txt | 1 + - 4 files changed, 36 insertions(+), 20 deletions(-) - -commit bedc88225c948ad1288b69c6c106adce36233442 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jul 7 11:55:47 2010 +0200 - - [cairo] Fix warning on signed/unsigned comparison - - poppler/CairoFontEngine.cc | 12 ++++++------ - poppler/CairoFontEngine.h | 8 ++++---- - 2 files changed, 10 insertions(+), 10 deletions(-) - -commit 092aa901b9ec35a48bc1fb229ad16a3b00eef5f2 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Jul 5 11:16:49 2010 +0200 - - [glib] docs: add some more introspection annotations - - glib/poppler-attachment.cc | 4 ++-- - glib/poppler-document.cc | 12 ++++++------ - glib/poppler-media.cc | 4 ++-- - glib/poppler-page.cc | 4 ++-- - 4 files changed, 12 insertions(+), 12 deletions(-) - -commit 6c4e14fd90d5ef2d6670a980ab2476b6fab58df7 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Jul 5 10:49:59 2010 +0200 - - [glib] docs: fix POPPLER_CHECK_VERSION() docs - - glib/poppler-features.h.in | 6 ++++-- - 1 files changed, 4 insertions(+), 2 deletions(-) - -commit ed324a867ecf1f616c4b2dc575f01d5cf1b67c38 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jul 2 18:28:45 2010 +0200 - - [glib] Rename instrospection files as 0.16 instead of 0.14 - - glib/Makefile.am | 14 +++++++------- - 1 files changed, 7 insertions(+), 7 deletions(-) - -commit a55f567ff1ea0858eda13a024ed765a016f3bff0 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jul 2 18:23:03 2010 +0200 - - [glib] docs: Remove unneeded empty line in doc comment - - glib/poppler-features.h.in | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit f16015303422280eaa21c3144eca0f1a330dce8a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jul 2 18:19:13 2010 +0200 - - [glib] docs: Add GObject introspection annotations - - glib/poppler-annot.cc | 45 - ++++++++++++++++++------------------- - glib/poppler-document.cc | 8 +++--- - glib/poppler-page.cc | 23 ++++++++++++------ - glib/reference/poppler-docs.sgml | 2 + - 4 files changed, 43 insertions(+), 35 deletions(-) - -commit 60242038e4dce7f0c90f2bfa0e771120247dbc9d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jun 30 09:35:29 2010 +0200 - - [glib] Add GObject introspection support - - configure.ac | 5 +++ - glib/Makefile.am | 29 ++++++++++++++++ - m4/introspection.m4 | 94 - +++++++++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 128 insertions(+), 0 deletions(-) - -commit 3160950a7d7161457405c9084c31af230329b3f0 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jul 2 12:47:04 2010 +0200 - - [glib] docs: Add index of deprecated symbols - - glib/reference/poppler-docs.sgml | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 593db7acf6edce1267f69d12310bf4098ff24c97 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jul 2 12:44:39 2010 +0200 - - [glib] docs: deprecate GDK API - - glib/poppler-page.cc | 8 ++++++++ - 1 files changed, 8 insertions(+), 0 deletions(-) - -commit 6facefb3fa8f97a9d330545308fb2d89c7f57fa0 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 1 18:01:45 2010 +0200 - - [glib] docs: Add index of new symbols for versions 0.12, 0.14 and 0.16 - - glib/poppler-action.h | 10 +++++++--- - glib/poppler-annot.cc | 17 +++++++++++++++++ - glib/poppler-date.cc | 2 ++ - glib/poppler-document.cc | 16 +++++++++++++++- - glib/poppler-layer.cc | 12 ++++++++++++ - glib/poppler-media.cc | 14 ++++++++++++-- - glib/poppler-media.h | 3 +++ - glib/poppler-movie.cc | 6 ++++++ - glib/poppler-page.cc | 2 ++ - glib/reference/poppler-docs.sgml | 12 ++++++++++++ - 10 files changed, 88 insertions(+), 6 deletions(-) - -commit 166b78c0ce8a4536873c4f60b392c24c8a68e7aa -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 1 17:25:03 2010 +0200 - - [glib] docs: document PopplerMediaSaveFunc - - glib/poppler-media.h | 18 +++++++++++++++++- - 1 files changed, 17 insertions(+), 1 deletions(-) - -commit 5cc0a51f88580c65ac2d5c6ff02b8cf14697b70c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 1 17:20:13 2010 +0200 - - [glib] Use the same name for parameter in function prototype - - glib/poppler-media.h | 10 +++++----- - glib/poppler-movie.h | 6 +++--- - 2 files changed, 8 insertions(+), 8 deletions(-) - -commit 6793fd8fd2d33d3d58c6556b5dbe6d0497e56646 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 1 15:49:49 2010 +0200 - - [glib] docs: document some enums in poppler-action - - glib/poppler-action.h | 92 - +++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 92 insertions(+), 0 deletions(-) - -commit 8e139696dbe19f54ad54364a711b929146f11080 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 1 15:02:58 2010 +0200 - - [glib] docs: mark structures in poppler-private.h as private - - glib/poppler-private.h | 7 +++++++ - 1 files changed, 7 insertions(+), 0 deletions(-) - -commit ccae7e574047d66c638003cc36fa1edeef4d35ed -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 1 14:59:50 2010 +0200 - - [glib] docs: document PopplerDocument enums - - glib/poppler-document.h | 65 - +++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 65 insertions(+), 0 deletions(-) - -commit 4fbff172693c38cdc4ae8070a55ceb706aa213cd -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 1 14:26:53 2010 +0200 - - [glib] docs: document PopplerFontInfo - - glib/poppler-document.cc | 106 - ++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 106 insertions(+), 0 deletions(-) - -commit 465dd4897ff603a6fd96503cf4746fc808b0f827 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 1 12:59:39 2010 +0200 - - [glib] docs: document some enums - - glib/poppler.h | 55 - +++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 55 insertions(+), 0 deletions(-) - -commit de3d599ea9e948867cfe395f42ed659670110c4c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 1 12:31:10 2010 +0200 - - [glib] docs: document boxed types defined in poppler-page - - glib/poppler-page.cc | 147 - ++++++++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-page.h | 79 +++++++++++++++++++++++++++ - 2 files changed, 226 insertions(+), 0 deletions(-) - -commit 34c52190e1dbf4d3effa44b4408faa1fbae0d12d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 1 09:33:08 2010 +0200 - - [glib] Remove splash header file - - glib/poppler-page.cc | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 6910545a487f206ccd059bb295d2312228dbf2ba -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jun 30 19:03:04 2010 +0200 - - [glib] docs: Remove invalid symbol from poppler-sections.txt - - glib/reference/poppler-sections.txt | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 65ea3b636cb5a38660e526a483a4d95f5acdf8db -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jun 30 19:02:32 2010 +0200 - - [glib] docs: fix typo - - glib/poppler-form-field.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 689bfec40b5b3030c2819cb4aac42c3ab6279278 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jun 30 19:01:47 2010 +0200 - - [glib] docs: Add missing doc for parameter - - glib/poppler-document.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 0b3d77627f255a4bf3da6ee875ad8d9eb931c96e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jun 30 19:00:59 2010 +0200 - - [glib] Use the same name for parameter in function prototype - - glib/poppler-page.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 19e1944c00ac2da6b18b015721fc3a8d1898a23a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jun 30 18:01:52 2010 +0200 - - [glib] docs: Add media and movie to docs - - glib/poppler-media.cc | 6 ++++++ - glib/poppler-movie.cc | 6 ++++++ - glib/reference/poppler-docs.sgml | 3 ++- - 3 files changed, 14 insertions(+), 1 deletions(-) - -commit ca48bee07e6b4a20ea7b40b472a335e75feb4739 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jun 30 17:56:50 2010 +0200 - - [glib] docs: Add missing types to poppler.types - - glib/reference/poppler.types | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 613ccf81317a007ed5017ee788466613a6699bb5 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jun 30 17:54:22 2010 +0200 - - [glib] docs: rework poppler-sections.txt - - - Better organization of sections and contents - - Use of Standard and Private subsections - - Add missing sections - - Remove enums section - - glib/reference/poppler-sections.txt | 424 - ++++++++++++++++++++++++----------- - 1 files changed, 295 insertions(+), 129 deletions(-) - -commit b37556a32b79f8711ed7eca24abf19511872a70a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jun 30 12:01:44 2010 +0200 - - [glib] docs: Add index of symbols - - glib/reference/poppler-docs.sgml | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 7f5fa4e19b4e324a396d64261b9125c1a557ac84 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jun 30 12:00:35 2010 +0200 - - [glib] docs: Add version information - - configure.ac | 1 + - glib/reference/Makefile.am | 2 +- - glib/reference/poppler-docs.sgml | 7 ++++++- - glib/reference/version.xml.in | 1 + - 4 files changed, 9 insertions(+), 2 deletions(-) - -commit 848d5e158fa9eadd19a658db314ba3fff9d026e8 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jun 30 11:30:41 2010 +0200 - - [glib] docs: do not use gtk-doc templates - - configure.ac | 2 +- - glib/poppler-action.cc | 6 + - glib/poppler-annot.cc | 6 + - glib/poppler-attachment.cc | 6 + - glib/poppler-attachment.h | 16 + - glib/poppler-document.cc | 8 + - glib/poppler-features.h.in | 59 ++++ - glib/poppler-form-field.cc | 6 + - glib/poppler-layer.cc | 6 + - glib/poppler-page.cc | 6 + - glib/reference/tmpl/poppler-action.sgml | 216 ------------ - glib/reference/tmpl/poppler-annot.sgml | 377 -------------------- - glib/reference/tmpl/poppler-attachment.sgml | 68 ---- - glib/reference/tmpl/poppler-document.sgml | 410 - ---------------------- - glib/reference/tmpl/poppler-enums.sgml | 246 ------------- - glib/reference/tmpl/poppler-features.sgml | 83 ----- - glib/reference/tmpl/poppler-form-field.sgml | 318 ----------------- - glib/reference/tmpl/poppler-layer.sgml | 83 ----- - glib/reference/tmpl/poppler-page.sgml | 483 - -------------------------- - glib/reference/tmpl/poppler-private.sgml | 148 -------- - glib/reference/tmpl/poppler-unused.sgml | 8 - - glib/reference/tmpl/poppler.sgml | 285 --------------- - glib/reference/tmpl/stamp-poppler-enums.sgml | 22 -- - gtk-doc.make | 78 +++-- - m4/gtk-doc.m4 | 2 +- - 25 files changed, 171 insertions(+), 2777 deletions(-) - -commit 16e15ac845206217086e2adac9f220e75c0c630d -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 29 21:44:02 2010 +0100 - - bitmap can be null at this stage, check it isn't - - poppler/JBIG2Stream.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 38e5d28a184d0ca8df71a7ea910ce85d7a225e4e -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jun 21 20:38:00 2010 +0100 - - more pow 0.5 -> sqrt - - poppler/GfxState.cc | 12 ++++++------ - 1 files changed, 6 insertions(+), 6 deletions(-) - -commit 58a53ca0a4e8434e8478f8fe121067dcf05c017d -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jun 21 19:24:20 2010 +0100 - - sqrt is much faster than pow 0.5 - - poppler/GfxState.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit bf86a9fc464aca57ebec207a213dcc2cc6031940 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jun 21 19:20:47 2010 +0100 - - introduce getChars to save some method calls - - Can give us a decent speedup when we go a lot though this methods - - poppler/Catalog.cc | 12 +---- - poppler/DCTStream.cc | 51 ++++++++++++++------ - poppler/DCTStream.h | 3 + - poppler/GfxFont.cc | 22 +------- - poppler/GfxState.cc | 30 +++-------- - poppler/JPEG2000Stream.cc | 67 +++++++------------------- - poppler/JPEG2000Stream.h | 38 ++++++++++++++- - poppler/Link.cc | 14 +---- - poppler/Object.h | 4 ++ - poppler/Stream.cc | 90 +++++++++++++++++++---------------- - poppler/Stream.h | 118 - ++++++++++++++++++++++++++++++++++++++++++++- - 11 files changed, 279 insertions(+), 170 deletions(-) - -commit 65c14073a3b1035ca5fe3bd6667abd315272841e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Jun 21 17:19:22 2010 +0200 - - Reduce pow operations in GfxCalRGBColorSpace::getXYZ() - - We were doing the same pow operation 3 times!. It makes document - attached to bug #28591 render a little faster. - - poppler/GfxState.cc | 12 ++++++------ - 1 files changed, 6 insertions(+), 6 deletions(-) - -commit 9365c05c1f66b3000febf32c45cef2ffe79e041a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jun 19 10:36:39 2010 +0200 - - [glib] Fix links/annots area for rotated documents with page CropBox - not starting at 0,0 - - Fixes bug #28588. - - glib/poppler-page.cc | 25 ++++++++++--------------- - 1 files changed, 10 insertions(+), 15 deletions(-) - -commit d9504c0a288c84b68a516f715505d6bc94b911f5 -Author: Pino Toscano <pino@kde.org> -Date: Fri Jun 18 23:59:04 2010 +0200 - - [autotools] link the 'cpp' tests against libpoppler as well - - ... this way gatof() can be found correctly - should fix bug #28605 - - cpp/tests/Makefile.am | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 62975737bcaa6e0a2ecab981aa3e0c8f2ff10571 -Author: Brian Cameron <brian.cameron@oracle.com> -Date: Fri Jun 18 19:22:17 2010 +0100 - - Compile with Sun Studio - - goo/ImgWriter.h | 3 ++- - goo/JpegWriter.h | 3 ++- - poppler/SplashOutputDev.cc | 6 ++++++ - 3 files changed, 10 insertions(+), 2 deletions(-) - -commit 7cbe3d1521aea8b484efb8663e75684e05b6fb61 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jun 17 23:01:21 2010 +0100 - - Optimize Splash::compositeBackground - - Optimization takes into account the two most common cases, the - pixel not - being painted at all (alpha == 0) meaning we just copy the paperColor - and the pixel being opage meaning we have to do nothing - - splash/Splash.cc | 34 ++++++++++++++++++++++++++-------- - 1 files changed, 26 insertions(+), 8 deletions(-) - -commit f323e5e4cdcc20075ee7c722f7adc088c0772249 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jun 17 22:59:37 2010 +0100 - - Check the objects are num before reading them - - Might have caused the kde bug #241995 - - poppler/GfxState.cc | 11 +++++++---- - 1 files changed, 7 insertions(+), 4 deletions(-) - -commit 35e87d2062b1d82db0d765de5a6187122a0fa99c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jun 16 11:52:25 2010 +0200 - - [gib-demo] Add demo for poppler_page_get_text_layout() - - glib/demo/text.c | 182 - ++++++++++++++++++++++++++++++++++++++++++++++++----- - 1 files changed, 164 insertions(+), 18 deletions(-) - -commit ddcea568b3a7334e062d6214f43d0a2c2ec95be4 -Author: Daniel Garcia <danigm@yaco.es> -Date: Tue Jun 15 16:57:32 2010 +0200 - - [glib] Add poppler_page_get_text_layout() - - Returns an array of PopplerRectangle items and each Rectangle is a - text character position. - - The position in this array represent the offset in text returned by - poppler_page_get_text - - glib/poppler-page.cc | 91 - ++++++++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-page.h | 4 ++- - 2 files changed, 94 insertions(+), 1 deletions(-) - -commit 6e9fe8832c37b560ac4d0b0e32d618bde70ee117 -Author: Pino Toscano <pino@kde.org> -Date: Wed Jun 16 00:22:59 2010 +0200 - - [Qt4] and support 'Print' named action here too... - - qt4/src/poppler-annotation.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 53c003f36af5d77f50fe238eaec4c5f7c3a485c7 -Author: Pino Toscano <pino@kde.org> -Date: Wed Jun 16 00:18:13 2010 +0200 - - [CMake] install the new goo/GooLikely.h - - CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 2ba752aabc8dad4bb35a351697b1590795c54ca4 -Author: Pino Toscano <pino@kde.org> -Date: Wed Jun 16 00:06:30 2010 +0200 - - update copyrights - - qt4/src/poppler-link.h | 3 ++- - qt4/src/poppler-page.cc | 1 + - 2 files changed, 3 insertions(+), 1 deletions(-) - -commit 38bf54bbad40288be763c6a1a89d90477c9ef89d -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 15 23:05:43 2010 +0100 - - move the declaration of likely/unlikely to an own file in goo/ - - goo/GooLikely.h | 22 ++++++++++++++++++++++ - goo/Makefile.am | 1 + - poppler/Object.h | 9 +-------- - splash/Splash.cc | 4 +--- - 4 files changed, 25 insertions(+), 11 deletions(-) - -commit 9838edf8c7497858e3bac2743784a3259f61cfdd -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 15 22:54:34 2010 +0100 - - Protect us against negative y coordinates - - Happens very rarely, like in bug 28480 - - splash/Splash.cc | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 8b32c3e9826d4462fd9d16fab4200ebb23251046 -Author: Pino Toscano <pino@kde.org> -Date: Tue Jun 15 23:55:01 2010 +0200 - - [Qt4/apidox] ok, now the *proper* version for 'Print'... - - qt4/src/poppler-link.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit b54e5ac49f69bd1c906e517edcb436e042199cd5 -Author: Pino Toscano <pino@kde.org> -Date: Tue Jun 15 23:53:50 2010 +0200 - - [Qt4/apidox] add the proper version for the new 'Print' - - qt4/src/poppler-link.h | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 71ad18c3b6b73e23d71600d07ce00bdfaf0bef60 -Author: Pino Toscano <pino@kde.org> -Date: Tue Jun 15 23:51:01 2010 +0200 - - [Qt4] recognize the 'Print' named action here too - - qt4/src/poppler-annotation.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 96f60f2748ba76de0d296a9838dbd7181f506e36 -Author: Guillermo Amaral <gamaral@kdab.com> -Date: Tue Jun 15 23:47:46 2010 +0200 - - [Qt4] recognize 'Print' as name in named actions - - qt4/src/poppler-link.h | 3 ++- - qt4/src/poppler-page.cc | 2 ++ - 2 files changed, 4 insertions(+), 1 deletions(-) - -commit 25494311c5b8eb88d43df420ec91a1aedad20d05 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jun 15 17:44:23 2010 +0200 - - [glib] Add some G_UNLIKELY() - - glib/poppler-document.cc | 12 ++++++------ - glib/poppler-page.cc | 17 ++++++++++------- - 2 files changed, 16 insertions(+), 13 deletions(-) - -commit 52f133fb962256edb577b7f639c5c13221c6365d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jun 15 14:20:49 2010 +0200 - - [glib] Use g_slice for actions and destinations - - glib/poppler-action.cc | 21 +++++++++------------ - 1 files changed, 9 insertions(+), 12 deletions(-) - -commit f035c94d8b5b34c0c3bb47b8cfc2f9c720a4fc71 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jun 15 14:01:07 2010 +0200 - - [glib] Use g_slice_dup in _copy() function for iterators - - glib/poppler-document.cc | 9 +++------ - 1 files changed, 3 insertions(+), 6 deletions(-) - -commit c84f69681828c7e3b969f666f9b84f1531976c6f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jun 15 13:57:18 2010 +0200 - - [glib] Use g_slice for mappings and PopplerRectangle - - glib/poppler-page.cc | 50 - ++++++++++++++++++-------------------------------- - 1 files changed, 18 insertions(+), 32 deletions(-) - -commit e12b9ab105f3b56b47ded871693b939ed421c853 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jun 15 13:49:27 2010 +0200 - - [glib] Use poppler_image_mapping_free() instead of g_free() - - glib/poppler-page.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit fb791a15f7472042fb2174e6f5df6924dd4eeb9b -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jun 15 13:37:52 2010 +0200 - - [glib] Remove poppler_mapping_free and use poppler_link_mapping_free - instead - - glib/poppler-page.cc | 9 +-------- - 1 files changed, 1 insertions(+), 8 deletions(-) - -commit 6186d7220e545eb89597626933a10acd0cd25173 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jun 15 13:16:59 2010 +0200 - - [glib] Use _new() methods instead of g_new() to create boxed structs - - glib/poppler-page.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 44639cb7b10ab6d66122ae2b6b7f3e5745f933bd -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jun 15 10:39:00 2010 +0200 - - [glib-demo] Use poppler_rectangle_free() instead of g_free() - - glib/demo/find.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 3ca304f3837af27ae49541a5f441d8729264a945 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jun 14 19:16:41 2010 +0100 - - Add more caching to ObjectStreams - - Makes opening of file from bug 26759 ten times faster - - poppler/XRef.cc | 62 - +++++++++++++++++++++++++++++++++++++++++++++++-------- - poppler/XRef.h | 4 +- - 2 files changed, 55 insertions(+), 11 deletions(-) - -commit cc2e5f190e19ee8169f67df2541302a2816873d3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Jun 14 18:17:01 2010 +0200 - - [glib-demo] Support password protected documents - - glib/demo/main.c | 175 - ++++++++++++++++++++++++++++++++++++++++++++++++++++-- - 1 files changed, 170 insertions(+), 5 deletions(-) - -commit 34b2dbb6bbaf0189c92eea6b7924999ab2b6ad11 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Jun 14 17:41:51 2010 +0200 - - [glib-demo] Remove GLIB_CHECK_VERSION(), we already depend on - glib 2.18 - - glib/demo/attachments.c | 5 ----- - glib/demo/main.c | 32 +------------------------------- - 2 files changed, 1 insertions(+), 36 deletions(-) - -commit a52670a46c0561025d8b86cd2865603f0720c695 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 13 15:31:15 2010 +0100 - - do not distribute these two files - - they are generated on configure/cmake time and depend on the machine - - glib/Makefile.am | 7 +++---- - poppler/Makefile.am | 4 ++-- - 2 files changed, 5 insertions(+), 6 deletions(-) - -commit eb0206ba8458f1dba004ac7bef856dcbb2ccbba5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jun 9 18:56:16 2010 +0100 - - we need to ship these two files - - Bug 28458 - - Makefile.am | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 7dfdf1ee293b7d36a049a90d8a17462ed0e50f2c -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 8 21:54:52 2010 +0100 - - Typo-- - - utils/pdftoppm.1 | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 57cc04ee1a122794b338c0d9818dbdaea46a42d6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 8 21:49:40 2010 +0100 - - Add cropbox to the manpage - - utils/pdftoppm.1 | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit f9e6cb9647981f7afbb20261b3ccedaf003657d2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 8 20:43:11 2010 +0100 - - 0.14.0 - - CMakeLists.txt | 4 ++-- - NEWS | 18 ++++++++++++++++++ - configure.ac | 4 ++-- - cpp/Doxyfile | 2 +- - qt4/src/Doxyfile | 2 +- - 5 files changed, 24 insertions(+), 6 deletions(-) - -commit 963afdc39153fee69ecb939c98deeef4f64638de -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 8 20:29:58 2010 +0100 - - libpoppler-qt4.so.3.2.0 -> libpoppler-qt4.so.3.3.0 - - qt4/src/CMakeLists.txt | 2 +- - qt4/src/Makefile.am | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit c1629be8011f3bddbf619246090640d62136d521 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 8 20:23:00 2010 +0100 - - Increase soname as _PopplerActionMovie struct grew - - glib/CMakeLists.txt | 2 +- - glib/Makefile.am | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 5ef45b1e72aed88ece0905b1204edee641f3c8fc -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 8 19:35:20 2010 +0100 - - Do not exit when trying to allocate memory for the XRef fails - - See bug 28406 - - poppler/XRef.cc | 6 +++++- - 1 files changed, 5 insertions(+), 1 deletions(-) - -commit e7a5e9f70ee1283a2ca6734552d905279c97989b -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jun 4 08:46:33 2010 +0100 - - a bit of docu - - poppler/Object.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 9ff4dab2558f7c2700fd7fcaccacdad9619dbdda -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jun 4 08:44:34 2010 +0100 - - Add support for unsigned integer numbers - - So files store their P as a 32 bit unsigned instead of as a 32 bit - signed, making us to overflow our objInt parsing and rejecting to open - the file, this patch introduces objUint that only happens when the - number is not real, does not fit in a 32 bit integer but still fits - in a - 32 bit unsigned integer - - poppler/Lexer.cc | 32 +++++++++++++++++++++++++------- - poppler/Object.cc | 5 ++++- - poppler/Object.h | 14 +++++++++++--- - poppler/SecurityHandler.cc | 22 ++++++++++++++++++++++ - 4 files changed, 62 insertions(+), 11 deletions(-) - -commit 41e9af7f505dbfbda36f6ac97df90f2a42ab3160 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 1 21:40:07 2010 +0100 - - If the document is not encrypted it is ok to print - - poppler/XRef.cc | 16 ++++++++++------ - 1 files changed, 10 insertions(+), 6 deletions(-) - -commit b15c793a8a58b17a7fe7b32c1037726e1e0e1bf0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 1 20:57:16 2010 +0100 - - Check it is a stream, not that it is not none - - People is reporting aborts, e.g. KDE bug 240208 - but can not check if this really fixes it since he can not share the - document - - poppler/Lexer.h | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit a72c68117ba05f3934e2df227cdcaf53a375f0ce -Author: Pino Toscano <pino@kde.org> -Date: Fri May 28 18:11:02 2010 +0200 - - [cpp apidox] add a start of API documentation for the 'page' class - - cpp/poppler-page.cpp | 68 - ++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 68 insertions(+), 0 deletions(-) - -commit acf7729e8e270e1b4b2a552272dc280ae6d7b352 -Author: Pino Toscano <pino@kde.org> -Date: Fri May 28 17:38:35 2010 +0200 - - [cpp] fix the font_iterator current page status - - cpp/poppler-font.cpp | 8 ++++++-- - 1 files changed, 6 insertions(+), 2 deletions(-) - -commit 4e017ff24a01cbbf1b39eedc3d7697f8b180fdd9 -Author: Pino Toscano <pino@kde.org> -Date: Fri May 28 17:15:28 2010 +0200 - - [cpp apidox] add API documentation for the 'font_info' and - 'font_iterator' classes - - cpp/poppler-font.cpp | 71 - ++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 71 insertions(+), 0 deletions(-) - -commit 2ff840b62e41e2fc98e9fcff7330f40216de58a5 -Author: Pino Toscano <pino@kde.org> -Date: Fri May 28 14:34:37 2010 +0200 - - [cpp] move the actual convert_date(const char*) implementation in - the detail - - this way it is possible to call it from inside poppler-cpp without - an implicit conversion to std::string - - cpp/poppler-document.cpp | 2 +- - cpp/poppler-embedded-file.cpp | 4 ++-- - cpp/poppler-global.cpp | 23 ++--------------------- - cpp/poppler-private.cpp | 25 +++++++++++++++++++++++++ - cpp/poppler-private.h | 2 ++ - 5 files changed, 32 insertions(+), 24 deletions(-) - -commit 8112e9111313eaded4cd2e89d0e67efb0f3e29db -Author: Pino Toscano <pino@kde.org> -Date: Fri May 28 13:13:50 2010 +0200 - - [cpp] add a time_type typedef - - ... defined as unsigned int, and use it all around - (it changes nothing for client code) - - cpp/poppler-document.cpp | 8 ++++---- - cpp/poppler-document.h | 2 +- - cpp/poppler-embedded-file.cpp | 4 ++-- - cpp/poppler-embedded-file.h | 4 ++-- - cpp/poppler-global.cpp | 4 ++-- - cpp/poppler-global.h | 4 +++- - 6 files changed, 14 insertions(+), 12 deletions(-) - -commit bc5bdb43b12437e00aaddc27a74b9ac4b6498446 -Author: Pino Toscano <pino@kde.org> -Date: Fri May 28 13:01:53 2010 +0200 - - use the proper type for iterating on a GooVector - - poppler/XRef.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 87128ab0dfec6be1a034361512ee41301b078831 -Author: Maciej Mrozowski <reavertm@gmail.com> -Date: Thu May 27 17:31:00 2010 +0200 - - [CMake] Do not force -O2, preserve compiler flags instead. - - cmake/modules/PopplerMacros.cmake | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 241c338facb45641ef1a271c904355a014bbf28d -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu May 27 20:37:55 2010 +0100 - - Allow quality & progressive mode to be utilised in JpegWriter - - goo/JpegWriter.cc | 15 +++++++++++++-- - goo/JpegWriter.h | 4 ++++ - splash/SplashBitmap.cc | 18 +++++++++--------- - splash/SplashBitmap.h | 4 ++++ - 4 files changed, 30 insertions(+), 11 deletions(-) - -commit 9eda6e8aaae412a9882141d1b5b8c7bf0c823c68 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue May 25 23:44:30 2010 +0100 - - Do not follow loops blindly - - Fixes crash in pdf in bug 28172 - - poppler/XRef.cc | 21 +++++++++++++++------ - poppler/XRef.h | 7 ++++--- - 2 files changed, 19 insertions(+), 9 deletions(-) - -commit bbee6e0c8c9b181f8d19c167c867d74a765685fb -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue May 25 23:13:38 2010 +0100 - - update copyright - - poppler/JBIG2Stream.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 80b72b9f2fd70395580205b8b176e0576e132cf5 -Author: Hib Eris <hib@hiberis.nl> -Date: Wed May 26 13:07:57 2010 +0200 - - [autotools] sync autotool build with cmake build - - In addition to commit 69c2cf76cef9c190ac07726f60f1dccd3df5cb6d - - poppler/poppler-config.h.in | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 30ea3ab8a1eecafb3366aef193910098fdb7ccc8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue May 25 23:07:56 2010 +0100 - - Fix crash when parsing pdf in bug 28170 - - This code is a can of crashing worms :-7 - - poppler/JBIG2Stream.cc | 23 ++++++++++++++++------- - 1 files changed, 16 insertions(+), 7 deletions(-) - -commit b5a9021037c4e6cbbfd622433f3de693d1f47671 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue May 25 20:00:57 2010 +0100 - - 0.13.4 - - CMakeLists.txt | 2 +- - NEWS | 16 ++++++++++++++++ - configure.ac | 2 +- - cpp/Doxyfile | 2 +- - glib/reference/tmpl/poppler-action.sgml | 5 +++++ - glib/reference/tmpl/poppler-annot.sgml | 18 ++++++++++++++++++ - glib/reference/tmpl/poppler-attachment.sgml | 3 +++ - glib/reference/tmpl/poppler-document.sgml | 5 +++++ - glib/reference/tmpl/poppler-enums.sgml | 17 +++++++++++++++++ - glib/reference/tmpl/poppler-features.sgml | 3 +++ - glib/reference/tmpl/poppler-form-field.sgml | 3 +++ - glib/reference/tmpl/poppler-layer.sgml | 4 ++++ - glib/reference/tmpl/poppler-page.sgml | 13 +++++++++++++ - glib/reference/tmpl/poppler-private.sgml | 3 +++ - glib/reference/tmpl/poppler.sgml | 6 ++++++ - glib/reference/tmpl/stamp-poppler-enums.sgml | 3 +++ - qt4/src/Doxyfile | 2 +- - 17 files changed, 103 insertions(+), 4 deletions(-) - -commit 57ab0ebe993d79fe551bba58e0a70d55d32828f8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed May 12 20:49:31 2010 +0100 - - better copyright - - poppler/strtok_r.cpp | 23 +++++++++++++++++++++++ - 1 files changed, 23 insertions(+), 0 deletions(-) - -commit 69c2cf76cef9c190ac07726f60f1dccd3df5cb6d -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed May 12 20:47:25 2010 +0100 - - mingw does not provide strtok_r - - Copy the glibc implementation - - CMakeLists.txt | 1 + - poppler/Makefile.am | 1 + - poppler/poppler-config.h.cmake | 4 + - poppler/strtok_r.cpp | 189 - ++++++++++++++++++++++++++++++++++++++++ - 4 files changed, 195 insertions(+), 0 deletions(-) - -commit 9e9b5e0d87a7450bd2223538673321ecec720c36 -Author: Marek Kasik <mkasik@redhat.com> -Date: Tue May 11 12:06:17 2010 +0200 - - Better check of overlapping of table cells when selecting text - - Add check for overlapping of upper right cell with lower left cell - of assumed table (related to #3188). - - poppler/TextOutputDev.cc | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit a3e40b460b7690ef73ccf143b10da07e91d9ee7f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon May 10 17:41:04 2010 +0200 - - [annots] Adjust bbox for line annots when y1 = y2 - - Some documents like pdf_commenting_new.pdf, have y1 = y2 but - line_width > 0, acroread renders the lines in such cases even - though the - annot bbox is empty. - - poppler/Annot.cc | 10 ++++++++++ - 1 files changed, 10 insertions(+), 0 deletions(-) - -commit e30d24c506a9ff742f8af5d6c71273abeddaa265 -Author: Pino Toscano <pino@kde.org> -Date: Tue May 4 15:19:26 2010 +0200 - - [cpp] ustring::{from,to}_utf8(): fix in/out buffer sizes - - cpp/poppler-global.cpp | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit aaa19a673020e12dbfceb4d25ade0ece7875fd83 -Author: Pino Toscano <pino@kde.org> -Date: Tue May 4 12:07:43 2010 +0200 - - [cpp] make the pkg-config files really working - - poppler-cpp.pc.cmake | 6 +++++- - poppler-cpp.pc.in | 6 +++++- - 2 files changed, 10 insertions(+), 2 deletions(-) - -commit 8f963ccde41ef1faa719254fccc5bdfe75e9fa87 -Author: Patrick Spendrin <ps_ml@gmx.de> -Date: Sun May 2 18:42:10 2010 +0200 - - Windows: define strtok_r as strtok_s - - poppler/poppler-config.h.cmake | 4 ++++ - poppler/poppler-config.h.in | 4 ++++ - 2 files changed, 8 insertions(+), 0 deletions(-) - -commit c9d8df51c96e50ad72f7954baba2254259fc894c -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat May 1 19:52:51 2010 +0100 - - 2010 in these copyrights - - poppler/poppler-config.h.cmake | 2 +- - poppler/poppler-config.h.in | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 9ce71fb35fdd66c55872956432160a5c76a62080 -Author: Jakub Wilk <ubanus@users.sf.net> -Date: Sat May 1 19:50:54 2010 +0100 - - Use strtok_r instead strtok - - strtok is not thread safe - - fofi/FoFiType1.cc | 8 +++++--- - poppler/CharCodeToUnicode.cc | 6 ++++-- - poppler/GlobalParams.cc | 6 ++++-- - poppler/PDFDoc.cc | 4 +++- - poppler/UnicodeMap.cc | 21 ++++++++++++++++++--- - 5 files changed, 34 insertions(+), 11 deletions(-) - -commit 6b2983f89e87792a393880dab6dc1fedb748db2c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Apr 30 14:48:50 2010 +0200 - - [cairo] Set device offset and matrix to smask depending on the - group target - - It seems to fix all of my test cases. Fixes bug #27208. - - poppler/CairoOutputDev.cc | 21 +++++++++++++++------ - 1 files changed, 15 insertions(+), 6 deletions(-) - -commit ac32021704178721ee007a6b6831283e323e500f -Author: Pino Toscano <pino@kde.org> -Date: Fri Apr 30 01:14:14 2010 +0200 - - demote the #warning to a simple FIXME comment - - poppler/ArthurOutputDev.cc | 4 +--- - 1 files changed, 1 insertions(+), 3 deletions(-) - -commit 8c1bc17552c989c15f318d9d109607a9a594ca6b -Author: Pino Toscano <pino@kde.org> -Date: Fri Apr 30 01:12:19 2010 +0200 - - MSVC: define fmax() and fmin() - - MSVC does not provide those functions, so we need to define them to - the existing max()/mix() macros. - Thanks to Patrick Spendrin for the hint! - - poppler/poppler-config.h.cmake | 5 +++++ - poppler/poppler-config.h.in | 5 +++++ - 2 files changed, 10 insertions(+), 0 deletions(-) - -commit 71063d51a45835b0267a7e3f823ef49689cfd06f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Apr 29 20:28:07 2010 +0200 - - Make sure we are drawing text before calling endTextObject() - - This is actually the right fix for the previous commit. - - poppler/Gfx.cc | 10 +++++----- - 1 files changed, 5 insertions(+), 5 deletions(-) - -commit e909219d8e92994bd52976f9676015fa6ca9fc91 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Apr 29 18:34:22 2010 +0200 - - Set textHaveCSPattern=false again before filling the pattern in - opEndText() - - Fixes cairo backend regressions caused by commit - ccf238b32e236f69c0507a5421ac2649dfa8d865. - - poppler/Gfx.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 29572d6ac7829b60efce2d8e489473c55e370f26 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 27 23:39:23 2010 +0100 - - fabs for doubles - - poppler/TextOutputDev.cc | 24 ++++++++++++------------ - 1 files changed, 12 insertions(+), 12 deletions(-) - -commit 4905e2bd764ea601e3bf9c5195c740e5bf186af5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 27 23:34:34 2010 +0100 - - fix include - - splash/SplashBitmap.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit f9f0e4b747a1527bd6354897cdba7954d58651de -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Apr 27 14:26:23 2010 +0200 - - Fix first color stop offset of linear gradients - - Fixes bug #27837. - - poppler/Gfx.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 5b822011029f3721fbafd4a7bf01b9d6fee35d25 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 24 18:18:08 2010 +0200 - - include standard float.h instead of unportable values.h - - poppler/TextOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit dee7cb8691528293bb5b8f266970cdb6771e301b -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 24 15:39:23 2010 +0100 - - 0.13.3 - - CMakeLists.txt | 2 +- - NEWS | 31 +++++++++++++++++++++++++++++++ - configure.ac | 2 +- - cpp/Doxyfile | 2 +- - qt4/src/Doxyfile | 2 +- - 5 files changed, 35 insertions(+), 4 deletions(-) - -commit 07864c9e2a7a32b48bdbab92c8b2f79bce1d9f5b -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 24 13:07:02 2010 +0100 - - minor cleanups - - utils/HtmlLinks.cc | 15 ++------------- - utils/HtmlLinks.h | 16 ++++++++++++++-- - 2 files changed, 16 insertions(+), 15 deletions(-) - -commit e501eabb2f0775444a2bf64005a3a3f1ffa281b4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 24 13:06:12 2010 +0100 - - Do not assume the parameter will have more than 5 chars - - utils/pdftohtml.cc | 30 ++++++++++++++++++------------ - 1 files changed, 18 insertions(+), 12 deletions(-) - -commit 6cc4d571339214e9eeeb682ba48fb220cef905f9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 24 13:04:05 2010 +0100 - - Fix end() to return the correct last valid value - - goo/GooVector.h | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit 4ed53e30e735b79c46eab9d54883531c6e187b17 -Author: William Bader <williambader@hotmail.com> -Date: Fri Apr 23 22:52:24 2010 +0100 - - Silence some Illegal entry in bfrange block in ToUnicode CMap - - Fixes #27728 - - poppler/CharCodeToUnicode.cc | 7 +++++-- - 1 files changed, 5 insertions(+), 2 deletions(-) - -commit 16a004784043e2a8587c0c3c6d23889df8a80470 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Apr 22 19:39:01 2010 +0100 - - Avoid the usage of std:: - - poppler/TextOutputDev.cc | 25 +++++++++++-------------- - 1 files changed, 11 insertions(+), 14 deletions(-) - -commit a7dcb2b4ffee57b7f78529cbaeaab647ab93de86 -Author: Pino Toscano <pino@kde.org> -Date: Thu Apr 22 13:31:41 2010 +0200 - - Windows: include config.h in GlobalParamsWin.cc only if not included - already - - GlobalParamsWin.cc is not compiled standalone but only #include'd by - GlobalParams.cc (on Windows only), so config.h has already included - already - as safety check, check for PACKAGE_NAME (#define'd in config.h) - before #include'ing it again - - poppler/GlobalParamsWin.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit fba076e17af24a9c9883504282316bba119a908c -Author: Pino Toscano <pino@kde.org> -Date: Thu Apr 22 13:24:04 2010 +0200 - - avoid accidental max() macro replacement with some compilers (eg MSVC) - - defining an empty macro and using it between "max" and "(", such - compilers won't try to replace their macro max(a, b) there; in any - case, empty spaces are just fine - - poppler/TextOutputDev.cc | 11 +++++++---- - 1 files changed, 7 insertions(+), 4 deletions(-) - -commit ccf238b32e236f69c0507a5421ac2649dfa8d865 -Author: Thomas Freitag <Thomas.Freitag@alfa.de> -Date: Wed Apr 21 19:21:37 2010 +0100 - - Improve colorizing text and masks in pattern colorspace - - Bug #27482 - - poppler/Gfx.cc | 137 - +++++++++++++++++++++----------------------- - poppler/Gfx.h | 4 +- - poppler/SplashOutputDev.cc | 41 ++++++++++++- - poppler/SplashOutputDev.h | 3 +- - 4 files changed, 106 insertions(+), 79 deletions(-) - -commit 8e86dfb328d94939ecf390d34af533b831b2837b -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Apr 21 19:19:53 2010 +0100 - - Add copyright - - poppler/TextOutputDev.cc | 1 + - poppler/TextOutputDev.h | 1 + - 2 files changed, 2 insertions(+), 0 deletions(-) - -commit 6f9f3d33ff8058e28243ba45b8547e21ad0d088a -Author: Andre Klapper <a9016009@gmx.de> -Date: Wed Apr 21 19:57:15 2010 +0200 - - [glib-demo] Compile with -DGSEAL_ENABLE - - Fixes bug #27579. - - glib/demo/images.c | 2 +- - glib/demo/layers.c | 4 ++-- - glib/demo/render.c | 8 ++++---- - 3 files changed, 7 insertions(+), 7 deletions(-) - -commit 6b14c18d60cae130869f9a5c7688dfe880602224 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Apr 21 19:56:49 2010 +0200 - - [cairo] Make sure we always use a new path in doPath() - - Fixes document - http://acroeng.adobe.com/Test_Files/images/transparency/Untitled-2.pdf - when rendering with cairo backend. - - poppler/CairoOutputDev.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 4f71d64c69500ed78daf4d797c8af6cfbd3d970e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Apr 21 11:44:49 2010 +0200 - - [cairo] Fix pattern size when bbox is not at 0,0 - - poppler/CairoOutputDev.cc | 11 +++++++++-- - 1 files changed, 9 insertions(+), 2 deletions(-) - -commit 9c5612f6e013a8698eff6531ec388a7e6c1fb89a -Author: Marek Kasik <mkasik@redhat.com> -Date: Fri Feb 12 14:31:01 2010 +0100 - - Distinguish between columns and tables when selecting text - - This commit add ability to detect tables in text by checking borders - of 4 neighbouring text blocks for arrangement (to the left, to - the right, - center, ...). Detected border of whole table is then stored in - ExMin, ExMax, - EyMin and EyMax of each block together with id of detected - table. Sorting - of blocks is then performed on the these borders to be able to - distinguish - tables from columns. - Pasting of selected text was modified so that tables are pasted - correctly - (even with multi line cells). - - poppler/TextOutputDev.cc | 490 - ++++++++++++++++++++++++++++++++++++++++------ - poppler/TextOutputDev.h | 5 + - 2 files changed, 437 insertions(+), 58 deletions(-) - -commit db014ffb357e760d9397544c5a8fe747cdb497ab -Author: Brian Ewins <brian.ewins@gmail.com> -Date: Mon Nov 23 08:58:19 2009 +0000 - - Select top right to bottom left in RTL mode - - This makes pure RTL selection work. Bidi is not handled at all. - Rendering of the selection is poor and the dumped text appears - to still be in reverse order to me. - - poppler/TextOutputDev.cc | 57 - ++++++++++++++++++++++++++++++++++----------- - 1 files changed, 43 insertions(+), 14 deletions(-) - -commit b1d43fa052d9160c4f319a67415ecf3ebf2cf9b3 -Author: Brian Ewins <brian.ewins@gmail.com> -Date: Sun Nov 22 09:47:40 2009 +0000 - - Make pdftotext newlines match copy and paste - - The output of pdftotext didn't insert line breaks, - resulting in jumbled text. Change the rules to - emit a newline at the end of each line unless - a hyphenation is being supressed, and an extra - newline at the end of each flow. - - poppler/TextOutputDev.cc | 17 +++-------------- - 1 files changed, 3 insertions(+), 14 deletions(-) - -commit f83b677a8eb44d65698b77edb13a5c7de3a72c0f -Author: Brian Ewins <brian.ewins@gmail.com> -Date: Thu Nov 12 02:50:29 2009 +0000 - - Use a reading-order sort to order blocks - - This switches the block sort from XY to reading order, - using the rules from T. Breuel's "High Performance - Document Layout Analysis". - - Signed-off-by: Brian Ewins <brian.ewins@gmail.com> - - poppler/TextOutputDev.cc | 164 - ++++++++++++++++++++++++++++++++++++++++++++-- - poppler/TextOutputDev.h | 8 ++ - 2 files changed, 167 insertions(+), 5 deletions(-) - -commit a2191a4d45e0abaec97c19aacae37c4c5824bd36 -Author: Brian Ewins <brian.ewins@gmail.com> -Date: Mon Nov 9 06:24:51 2009 +0000 - - Separate flow construction from reading order - - If the blocks were already in reading order, then - constructing flows is simplified, since blocks - cannot be picked out-of-order. Make this change - first in preparation for adding a reading-order - sort. - - Signed-off-by: Brian Ewins <brian.ewins@gmail.com> - - poppler/TextOutputDev.cc | 96 - ++++++++------------------------------------- - 1 files changed, 17 insertions(+), 79 deletions(-) - -commit 345ed51af9b9e7ea53af42727b91ed68dcc52370 -Author: Brian Ewins <brian.ewins@gmail.com> -Date: Thu Oct 29 01:46:29 2009 +0000 - - Fix bug 3188, text selection across table cells - - Bug 3188. When selecting text, poppler goes across the whole - page then down, rather than across each cell, down that cell, - then across to the next cell. This leads to illegible paste - results. - - Teach TextPage to visit the selection in flow order rather than - block order. - - Signed-off-by: Brian Ewins <brian.ewins@gmail.com> - - poppler/TextOutputDev.cc | 334 - ++++++++++++++++++++++++--------------------- - 1 files changed, 178 insertions(+), 156 deletions(-) - -commit 12d83931ae1b899b70c7ea5c01f03f123b1bb9a8 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Apr 18 17:53:48 2010 +0200 - - [cairo] Check pattern status after setting matrix when rendering - images - - Fixes rendering of document attached to kde bug - http://bugs.kde.org/show_bug.cgi?id=135417. - - poppler/CairoOutputDev.cc | 34 ++++++++++++++++++++++++++++++++++ - 1 files changed, 34 insertions(+), 0 deletions(-) - -commit ff6d501a2fc887fd49a985161f756d6d6b8e6c0d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Apr 18 17:51:42 2010 +0200 - - [cairo] Fix a crash when rendering 0x0 images - - See kde bug http://bugs.kde.org/show_bug.cgi?id=135417 - - poppler/CairoOutputDev.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 84cd2186861436fbaa7c29aa691e69fcd543a1c2 -Author: Hib Eris <hib@hiberis.nl> -Date: Tue Apr 13 23:42:28 2010 +0200 - - Properly initialize variable - - poppler/CachedFile.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 24f244f486f332b0bd76c6525c5d9d03168a76e6 -Author: Hib Eris <hib@hiberis.nl> -Date: Tue Apr 13 23:54:28 2010 +0200 - - pdftops: require output filename when reading from stdin - - utils/pdftops.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 955f9f53ff225f6794a494fdd0f0fe5ee1a41d88 -Author: Hib Eris <hib@hiberis.nl> -Date: Tue Apr 13 23:47:40 2010 +0200 - - pdftotext: require output filename when reading from stdin - - utils/pdftotext.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 31388aa8b5117619878431b7fed2d033000af541 -Author: Hib Eris <hib@hiberis.nl> -Date: Tue Apr 13 23:27:20 2010 +0200 - - pdftohtml: require output filename when reading from stdin - - utils/pdftohtml.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit a8d43ec1c7f5448a7f63d9bbd9062d56ee1c7c58 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Apr 14 19:21:33 2010 +0100 - - update XOPEN_SOURCE to 600 in non standard compile options - - it seems helps compiling on some BSD - - cmake/modules/PopplerMacros.cmake | 2 +- - configure.ac | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 4cce1f14e964edf1bf2d9fb8286ee002a67dc212 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 13 21:57:16 2010 +0100 - - include strings.h on non windows platforms - - poppler/GlobalParams.cc | 2 ++ - test/perf-test.cc | 2 ++ - 2 files changed, 4 insertions(+), 0 deletions(-) - -commit 55c76069c52f9f51c6b8c60fe1aa8de499012ea8 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Apr 12 19:32:46 2010 +0200 - - [glib] Use existing cairo api when rendering to a pixbuf - - I should fix bug #5589 for the GDK api too. - - glib/poppler-page.cc | 227 - ++++++++++++++++++++----------------------------- - 1 files changed, 93 insertions(+), 134 deletions(-) - -commit 51aefe1423a068e8c119c21a8791d265aecbeaf5 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Apr 9 12:50:00 2010 +0200 - - [cairo] Implement colorizing image masks with pattern colorspace - - poppler/CairoOutputDev.cc | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -commit bd8f44289770175a17ac45e4788b0d374cc93d5a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Apr 9 12:02:38 2010 +0200 - - Partially revert "[cairo] Do not change device offset of mask surface" - - This partially reverts commit - a32f6f9ebaed3e4827b9dc6cb37e307c2798f521. - It fixed bug #27208, but it's causing regressions on other documents. - - poppler/CairoOutputDev.cc | 11 ++++++++++- - 1 files changed, 10 insertions(+), 1 deletions(-) - -commit bcb405c43fb7140f5d601d00de4d30913a0050ef -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Apr 8 12:02:48 2010 +0200 - - Pages were always created without forms by Catalog - - Use getForm() instead of form when creating a page object. - - poppler/Catalog.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit d46581c574b3088a82555cbc3b76e95e2571b9c0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Apr 7 20:25:23 2010 +0100 - - Fix destructor - - poppler/Catalog.cc | 19 +++++++------------ - poppler/Catalog.h | 3 +-- - 2 files changed, 8 insertions(+), 14 deletions(-) - -commit ab14433f8b3d7c67f279cece65dfdd40c6675ac0 -Author: Hib Eris <hib@hiberis.nl> -Date: Thu Mar 25 15:33:33 2010 +0100 - - Parse Form on demand - - poppler/Catalog.cc | 21 +++++++++++++-------- - poppler/Catalog.h | 2 +- - 2 files changed, 14 insertions(+), 9 deletions(-) - -commit c72a2c7f70b13a7b7b531b3c983d9a9bc104bac7 -Author: Hib Eris <hib@hiberis.nl> -Date: Thu Mar 25 17:33:11 2010 +0100 - - Parse Names on demand - - poppler/Catalog.cc | 112 - ++++++++++++++++++++++++++++++++++++++++++---------- - poppler/Catalog.h | 18 ++++++-- - 2 files changed, 104 insertions(+), 26 deletions(-) - -commit 32053360c93607cf9bdc092257cefad5d4df9ec5 -Author: Hib Eris <hib@hiberis.nl> -Date: Thu Mar 25 16:32:22 2010 +0100 - - Parse Dests on demand - - poppler/Catalog.cc | 27 +++++++++++++++++++++------ - poppler/Catalog.h | 2 +- - 2 files changed, 22 insertions(+), 7 deletions(-) - -commit da0f8e69eecb944e128474f62829f729eeabd189 -Author: Hib Eris <hib@hiberis.nl> -Date: Thu Mar 25 16:48:07 2010 +0100 - - Parse Outline on demand in PDFDoc - - poppler/PDFDoc.cc | 17 ++++++++++++----- - poppler/PDFDoc.h | 2 +- - 2 files changed, 13 insertions(+), 6 deletions(-) - -commit d7a69c8cad112cb6616d0192d8a4028fdaee2f73 -Author: Hib Eris <hib@hiberis.nl> -Date: Thu Mar 25 16:05:02 2010 +0100 - - Parse Outline on demand - - poppler/Catalog.cc | 23 ++++++++++++++++++++--- - poppler/Catalog.h | 2 +- - 2 files changed, 21 insertions(+), 4 deletions(-) - -commit c149e027fa76824221a78fe6d3bf9bfe953491d4 -Author: Hib Eris <hib@hiberis.nl> -Date: Thu Mar 25 15:51:51 2010 +0100 - - Parse StructTreeRoot on demand - - poppler/Catalog.cc | 22 +++++++++++++++++++--- - poppler/Catalog.h | 2 +- - 2 files changed, 20 insertions(+), 4 deletions(-) - -commit 3c6effe44d6d97f175c2ee7f3913d8c4ba34d612 -Author: Hib Eris <hib@hiberis.nl> -Date: Thu Mar 25 14:55:22 2010 +0100 - - Parse Metadata on demand - - poppler/Catalog.cc | 16 +++++++++++++--- - 1 files changed, 13 insertions(+), 3 deletions(-) - -commit 749d67ea2346a3453ef41dc37ba59d419ad900b0 -Author: Hib Eris <hib@hiberis.nl> -Date: Thu Mar 25 15:09:58 2010 +0100 - - Parse PageLabelInfo on demand - - poppler/Catalog.cc | 37 +++++++++++++++++++++++++++++-------- - poppler/Catalog.h | 3 +++ - 2 files changed, 32 insertions(+), 8 deletions(-) - -commit 78f7d106714fa489a66c39410163a6902ba24856 -Author: Hib Eris <hib@hiberis.nl> -Date: Sat Mar 27 14:43:57 2010 +0100 - - Parse PageMode and PageLayout on demand - - poppler/Catalog.cc | 109 - +++++++++++++++++++++++++++++++++++----------------- - poppler/Catalog.h | 11 +++-- - 2 files changed, 81 insertions(+), 39 deletions(-) - -commit f5dd5be64d09186ee289632c1a61979d15edd605 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Apr 7 19:48:39 2010 +0200 - - Fix saving update docs that have a compressed xref table - - - Use the original xref table size as Size field in the trailer - dictionary to make sure size = maxObjId + 1 - - - Use the right generation number for compressed objects that which - must be 0. gen field in xref entry for compressed objects is the - index of the object in the stream, not the generation number. - - Fixes bug #27450. - - poppler/PDFDoc.cc | 9 ++++----- - 1 files changed, 4 insertions(+), 5 deletions(-) - -commit 3f302fdd78cd78873bf5376af84e83741a8daadb -Author: Pino Toscano <pino@kde.org> -Date: Tue Apr 6 23:58:46 2010 +0200 - - use a GooVector<bool> instead of a non-standard variable-length-array - - poppler/CachedFile.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 425a62b5fa8e4e69bfc1c64ed126b5baac06d78a -Author: Hib Eris <hib@hiberis.nl> -Date: Tue Apr 6 10:57:30 2010 +0200 - - pdfutils: fix deleting fileName - - utils/pdfinfo.cc | 2 +- - utils/pdftoabw.cc | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 198c9d61ba93ba62ea2da44a23cd948d43556c3e -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 6 22:00:14 2010 +0100 - - Use the topleft of the Rect of text annots to draw - - Not use the full rect when we are drawing "our" notes - - poppler/Annot.cc | 9 +++++++-- - 1 files changed, 7 insertions(+), 2 deletions(-) - -commit 1422802f029483ad3e62a3a13e66b2d3990ac58f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Apr 6 12:32:12 2010 +0200 - - [cairo] Use current fill_opacity when drawing soft masked images - - Fixes GNOME Bug https://bugzilla.gnome.org/show_bug.cgi?id=614915 - - poppler/CairoOutputDev.cc | 27 ++++++++++++++++++++------- - 1 files changed, 20 insertions(+), 7 deletions(-) - -commit c152d30f879e6cde45de58bb9249035e127e84e7 -Author: Hib Eris <hib@hiberis.nl> -Date: Mon Apr 5 18:55:29 2010 +0200 - - delete fileName in utils - - utils/pdftohtml.cc | 1 + - utils/pdftops.cc | 1 + - utils/pdftotext.cc | 1 + - 3 files changed, 3 insertions(+), 0 deletions(-) - -commit f091c83414ab32a4ecf1fa2bd15f13a3cf113a86 -Author: Hib Eris <hib@hiberis.nl> -Date: Mon Apr 5 20:12:01 2010 +0100 - - add some docu - - poppler/CachedFile.h | 30 ++++++++++++++++++++++++++++++ - poppler/CurlPDFDocBuilder.h | 2 ++ - poppler/LocalPDFDocBuilder.h | 2 ++ - poppler/PDFDocBuilder.h | 9 +++++++++ - poppler/PDFDocFactory.h | 12 ++++++++++++ - poppler/StdinPDFDocBuilder.h | 2 ++ - 6 files changed, 57 insertions(+), 0 deletions(-) - -commit fc071d800cb4329a3ccf898d7bf16b4db7323ad8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Apr 5 19:11:26 2010 +0100 - - Rework DCTStream error handling, should work better now - - Fixes bug 26280 - - poppler/DCTStream.cc | 35 ++++++++++++++--------------------- - poppler/DCTStream.h | 5 +++-- - utils/HtmlOutputDev.cc | 4 ++-- - 3 files changed, 19 insertions(+), 25 deletions(-) - -commit a9d801b2db20ecb08734ee5cdb703abf11994b6e -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Apr 5 16:55:02 2010 +0100 - - Make some paremeters const & to clearly show we just read them - - poppler/CachedFile.cc | 18 ++++++++++-------- - poppler/CachedFile.h | 8 +++++--- - poppler/CurlCachedFile.cc | 9 +++++---- - poppler/CurlCachedFile.h | 3 ++- - poppler/CurlPDFDocBuilder.cc | 9 +++++---- - poppler/CurlPDFDocBuilder.h | 5 +++-- - poppler/LocalPDFDocBuilder.cc | 15 ++++++++------- - poppler/LocalPDFDocBuilder.h | 5 +++-- - poppler/PDFDocBuilder.h | 5 +++-- - poppler/PDFDocFactory.cc | 7 ++++--- - poppler/PDFDocFactory.h | 3 ++- - poppler/StdinCachedFile.cc | 3 ++- - poppler/StdinCachedFile.h | 3 ++- - poppler/StdinPDFDocBuilder.cc | 7 ++++--- - poppler/StdinPDFDocBuilder.h | 5 +++-- - utils/pdffonts.cc | 4 ++-- - utils/pdfimages.cc | 4 ++-- - utils/pdfinfo.cc | 4 ++-- - utils/pdftoabw.cc | 4 ++-- - utils/pdftohtml.cc | 4 ++-- - utils/pdftoppm.cc | 2 +- - utils/pdftops.cc | 4 ++-- - utils/pdftotext.cc | 4 ++-- - 23 files changed, 76 insertions(+), 59 deletions(-) - -commit a04ee3ea6066c97d41fc40d5d97c600a1870855a -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Apr 5 16:50:58 2010 +0100 - - forgot my (C) - - poppler/Form.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit ed723c8ac4a21a50d7d236cdcf7a635defd8dffb -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Apr 5 16:50:15 2010 +0100 - - The copy constructor of GooString never worked, so do not use it - - poppler/Form.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit a28be8e4009b86fdfd92da928def194225a736c6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Apr 5 16:49:06 2010 +0100 - - Add some const correctnes to GooString - - goo/GooString.cc | 12 ++++++------ - goo/GooString.h | 21 ++++++++++++--------- - 2 files changed, 18 insertions(+), 15 deletions(-) - -commit 46aee9e4d225b88a3dfd4afbe57259f337bb15d3 -Author: Hib Eris <hib@hiberis.nl> -Date: Mon Apr 5 14:36:09 2010 +0200 - - Use PDFDocFactory in utils - - utils/pdffonts.cc | 16 ++++++++-------- - utils/pdfimages.cc | 11 ++++++++++- - utils/pdfinfo.cc | 31 +++++++------------------------ - utils/pdftoabw.cc | 10 +++++++++- - utils/pdftohtml.cc | 10 +++++++++- - utils/pdftoppm.cc | 17 +++++++++++------ - utils/pdftops.cc | 9 ++++++++- - utils/pdftotext.cc | 14 +++++++------- - 8 files changed, 69 insertions(+), 49 deletions(-) - -commit d487a90688c4431075c9e4db040b3b02625e208f -Author: Hib Eris <hib@hiberis.nl> -Date: Mon Apr 5 14:35:52 2010 +0200 - - Add PDFDocFactory - - CMakeLists.txt | 2 + - poppler/Makefile.am | 2 + - poppler/PDFDocFactory.cc | 71 - ++++++++++++++++++++++++++++++++++++++++++++++ - poppler/PDFDocFactory.h | 42 +++++++++++++++++++++++++++ - 4 files changed, 117 insertions(+), 0 deletions(-) - -commit 869135920831fb0d15db734f3dcd7a67146cc241 -Author: Hib Eris <hib@hiberis.nl> -Date: Wed Feb 24 15:24:26 2010 +0100 - - Add CurlPDFDocBuilder - - CMakeLists.txt | 2 + - poppler/CurlPDFDocBuilder.cc | 46 - ++++++++++++++++++++++++++++++++++++++++++ - poppler/CurlPDFDocBuilder.h | 30 +++++++++++++++++++++++++++ - poppler/Makefile.am | 6 +++- - 4 files changed, 82 insertions(+), 2 deletions(-) - -commit ec5c6117a64f9cb03560091c4d7948d4287b6975 -Author: Hib Eris <hib@hiberis.nl> -Date: Thu Feb 25 11:23:28 2010 +0100 - - Add LocalPDFDocBuilder and StdinPDFDocBuilder - - CMakeLists.txt | 4 +++ - poppler/LocalPDFDocBuilder.cc | 45 - +++++++++++++++++++++++++++++++++++++++++ - poppler/LocalPDFDocBuilder.h | 30 +++++++++++++++++++++++++++ - poppler/Makefile.am | 4 +++ - poppler/StdinPDFDocBuilder.cc | 42 - ++++++++++++++++++++++++++++++++++++++ - poppler/StdinPDFDocBuilder.h | 30 +++++++++++++++++++++++++++ - 6 files changed, 155 insertions(+), 0 deletions(-) - -commit 919b735d1c0b99bf72280aff8db87ba503954498 -Author: Hib Eris <hib@hiberis.nl> -Date: Sun Apr 4 11:05:35 2010 +0200 - - Add PDFDocBuilder - - CMakeLists.txt | 1 + - poppler/Makefile.am | 1 + - poppler/PDFDocBuilder.h | 32 ++++++++++++++++++++++++++++++++ - 3 files changed, 34 insertions(+), 0 deletions(-) - -commit 1ab07faf05661d6d92186974c4b1c279b6178747 -Author: Hib Eris <hib@hiberis.nl> -Date: Sun Apr 4 11:29:53 2010 +0200 - - Add PDFDoc::ErrorPDFDoc - - poppler/PDFDoc.cc | 14 ++++++++++++++ - poppler/PDFDoc.h | 3 +++ - 2 files changed, 17 insertions(+), 0 deletions(-) - -commit efc7e5efeddd8f70b7c74573d3194aba0a7d4631 -Author: Hib Eris <hib@hiberis.nl> -Date: Sun Apr 4 11:17:37 2010 +0200 - - Cleanup PDFDoc - - poppler/PDFDoc.cc | 40 +++++++++++++++------------------------- - poppler/PDFDoc.h | 3 ++- - 2 files changed, 17 insertions(+), 26 deletions(-) - -commit 08a3435e67ebf21beac2fefcbd21ad65f9293fd1 -Author: Hib Eris <hib@hiberis.nl> -Date: Tue Feb 23 02:29:26 2010 +0100 - - Add HTTP support using libcurl - - With libcurl, poppler can handle documents over http. - - CMakeLists.txt | 18 ++++++++ - config.h.cmake | 6 +++ - configure.ac | 16 +++++++ - poppler/CurlCachedFile.cc | 95 - ++++++++++++++++++++++++++++++++++++++++ - poppler/CurlCachedFile.h | 39 ++++++++++++++++ - poppler/Makefile.am | 20 ++++++++ - poppler/poppler-config.h.cmake | 5 ++ - poppler/poppler-config.h.in | 5 ++ - utils/pdfinfo.cc | 16 ++++++- - 9 files changed, 219 insertions(+), 1 deletions(-) - -commit a87abf6ad9fb66d35a70c9412adc5d8ba2889b96 -Author: Hib Eris <hib@hiberis.nl> -Date: Wed Feb 24 14:46:59 2010 +0100 - - Use cached files to read from stdin in pdfinfo - - This fixes reading from stdin. - - utils/pdfinfo.cc | 6 +++++- - 1 files changed, 5 insertions(+), 1 deletions(-) - -commit 958b04b14baf03c07492fa1cbd225d9968b9efc1 -Author: Hib Eris <hib@hiberis.nl> -Date: Tue Feb 23 02:02:10 2010 +0100 - - Add support for reading a cached file from stdin - - CMakeLists.txt | 2 ++ - poppler/Makefile.am | 2 ++ - poppler/StdinCachedFile.cc | 37 +++++++++++++++++++++++++++++++++++++ - poppler/StdinCachedFile.h | 26 ++++++++++++++++++++++++++ - 4 files changed, 67 insertions(+), 0 deletions(-) - -commit 9539f75bd06150a3868209c5b04a75f5253722cc -Author: Hib Eris <hib@hiberis.nl> -Date: Sat Apr 3 15:08:20 2010 +0200 - - Add support for cached files - - CMakeLists.txt | 2 + - poppler/CachedFile.cc | 246 - +++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/CachedFile.h | 113 ++++++++++++++++++++++ - poppler/Makefile.am | 2 + - poppler/Stream.cc | 102 ++++++++++++++++++++ - poppler/Stream.h | 58 ++++++++++++ - 6 files changed, 523 insertions(+), 0 deletions(-) - -commit 8c6aefb8aa8929b9c47791d3062ed3ac8512626f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Apr 4 16:08:12 2010 +0200 - - [lexer] Correctly parse numbers with '+' sign - - See GNOME Bug: https://bugzilla.gnome.org/show_bug.cgi?id=614549 - - poppler/Lexer.cc | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit ab5044e451e3714d385295f0b4ce9a15c8f2562c -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Apr 4 12:32:42 2010 +0100 - - Add the -o[dd] and -e[ven] options to pdftoppm - - I've been using this patch forever and it's a pain to apply and - unapply - it each time - - utils/pdftoppm.1 | 6 ++++++ - utils/pdftoppm.cc | 8 ++++++++ - 2 files changed, 14 insertions(+), 0 deletions(-) - -commit 0e371fb628a7e7d0cc1656e6405af4c97dbebf5d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Apr 4 12:30:34 2010 +0100 - - Fix my roll optimization - - Thanks Carlos for noticing - - poppler/Function.cc | 12 +++++++----- - 1 files changed, 7 insertions(+), 5 deletions(-) - -commit a32f6f9ebaed3e4827b9dc6cb37e307c2798f521 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Mar 28 18:43:14 2010 +0200 - - [cairo] Do not change device offset of mask surface - - Also call cairo_paint() after set_source_rgb() to paint the - background. - Fixes bug #27208. - - poppler/CairoOutputDev.cc | 13 ++----------- - 1 files changed, 2 insertions(+), 11 deletions(-) - -commit efa5d9544d29252e3df36cc4e65c3d880b3c5172 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 27 22:11:49 2010 +0000 - - remove empty section - - NEWS | 2 -- - 1 files changed, 0 insertions(+), 2 deletions(-) - -commit 5722df7a5387e43ec73f659ca58d2d07b9c4be3b -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 27 22:04:43 2010 +0000 - - poppler 0.13.2 - - CMakeLists.txt | 2 +- - NEWS | 39 +++++++++++++++++++++++++++++++++++++++ - configure.ac | 2 +- - cpp/Doxyfile | 2 +- - qt4/src/Doxyfile | 2 +- - 5 files changed, 43 insertions(+), 4 deletions(-) - -commit b82fd707747b9d87ebf3c8f7ce5ab70ccdf82809 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 27 22:00:58 2010 +0000 - - gtk-doc changes - - glib/reference/tmpl/poppler-action.sgml | 7 +++---- - glib/reference/tmpl/poppler-annot.sgml | 9 --------- - glib/reference/tmpl/poppler-private.sgml | 10 ++++++++++ - glib/reference/tmpl/poppler-unused.sgml | 8 ++++++++ - glib/reference/tmpl/poppler.sgml | 10 ++++++++++ - 5 files changed, 31 insertions(+), 13 deletions(-) - -commit ed0354be4eac615b80e7a868984cc527853788b4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 27 21:44:59 2010 +0000 - - some forgotten copyrights - - qt/poppler-page.cc | 2 +- - qt4/src/poppler-document.cc | 2 +- - qt4/src/poppler-movie.cc | 3 ++- - qt4/src/poppler-page.cc | 2 +- - 4 files changed, 5 insertions(+), 4 deletions(-) - -commit 2aedeedf9ef2e2d3eb17bc36d728e68c2f7af762 -Author: Hib Eris <hib@hiberis.nl> -Date: Sat Mar 27 14:38:27 2010 +0000 - - Correctly initialize actualText - - poppler/TextOutputDev.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit b53f9b203598555d6d706c3804aba013b8566921 -Author: Jan Engelhardt <jengelh@medozas.de> -Date: Sat Mar 27 13:23:42 2010 +0000 - - make qt3 detection use pkgconfig - - m4/qt.m4 | 101 - ++++--------------------------------------------------- - qt/Makefile.am | 4 +- - 2 files changed, 10 insertions(+), 95 deletions(-) - -commit 320d4cee46e108498440179d8f9eab22cd5383d9 -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 24 21:51:58 2010 +0100 - - Revert "no more needed" - - This reverts commit 24d6bc8c78cb3148db2098ae4d69bd744340cf52. - It is actually needed. - - cpp/tests/CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit af21b5ab366bfdda203c26a77f4ae6ed0e70f64e -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 23 00:13:21 2010 +0100 - - [CMake] remove the (now) unneeded stuff from Find{GLIB,GDK,GTK}.cmake, - and search for them - - this way each bit (GLIB, GDK, and GTK) can be enabled/disabled - independently from the others - - CMakeLists.txt | 4 +++- - cmake/modules/FindGDK.cmake | 14 +------------- - cmake/modules/FindGLIB.cmake | 14 +------------- - cmake/modules/FindGTK.cmake | 14 +------------- - 4 files changed, 6 insertions(+), 40 deletions(-) - -commit 9b93ed5ce6712ec4cdf58148628e95685c289ef5 -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 23 00:02:27 2010 +0100 - - [CMake] copy FindGTK.cmake as FindGLIB.cmake and FindGDK.cmake - - this way FindGTK.cmake can be split in the various parts - - cmake/modules/FindGDK.cmake | 34 ++++++++++++++++++++++++++++++++++ - cmake/modules/FindGLIB.cmake | 34 ++++++++++++++++++++++++++++++++++ - 2 files changed, 68 insertions(+), 0 deletions(-) - -commit 0ec21cae0b4623644c3efca1d2836a9f38f25737 -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 22 22:11:04 2010 +0100 - - [Qt] add the unhandled cases for 'actionOCGState' - - qt/poppler-page.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 5211e09595135b8e6c68efd1b8b689b518092b84 -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 22 22:07:44 2010 +0100 - - [CMake/cpp] move the BUILD_CPP_TESTS option to the main CMakeLists.txt - - CMakeLists.txt | 1 + - cpp/tests/CMakeLists.txt | 3 --- - 2 files changed, 1 insertions(+), 3 deletions(-) - -commit 24d6bc8c78cb3148db2098ae4d69bd744340cf52 -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 22 22:00:55 2010 +0100 - - no more needed - - cpp/tests/CMakeLists.txt | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit a07ef8f703ab896f89ed211a5780e4a669b04fc7 -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 22 22:00:15 2010 +0100 - - [CMake] revert addition of "-Wl,--no-add-needed" to the link flags, - if available - - for now it is safer without it - - cmake/modules/PopplerMacros.cmake | 6 ------ - 1 files changed, 0 insertions(+), 6 deletions(-) - -commit 86debcc9bba28a7c86f01ca9e63bde5fcd541846 -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 22 21:49:22 2010 +0100 - - [CMake] add "-ansi" to the CXXFLAGS only on Linux - - cmake/modules/PopplerMacros.cmake | 9 +++++++-- - 1 files changed, 7 insertions(+), 2 deletions(-) - -commit 0819acd52a2ce74f0e176626d7b2233e10232d53 -Merge: c4ddbe8 92738eb -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 22 21:43:01 2010 +0100 - - Merge branch 'master' of ssh://git.freedesktop.org/git/poppler/poppler - -commit 92738ebb8a9c7cfc879aae59c2cbdf3159f03cd3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Mar 22 20:28:15 2010 +0000 - - Add a search overload that takes doubles - - QRectF is evil and is float in some arch and causes search to loop - infinitely because of double->float conversion - - qt4/src/poppler-page.cc | 22 +++++++++++++++------- - qt4/src/poppler-qt4.h | 16 ++++++++++++++-- - 2 files changed, 29 insertions(+), 9 deletions(-) - -commit 0a895f14c8125c5de7b97e8e799459c431eb51cb -Author: Thomas Freitag <Thomas.Freitag@alfa.de> -Date: Mon Mar 22 19:03:54 2010 +0000 - - correctly initialize the grayscale softmask color - - Fixes file with sha1sum e6e1576803a1bd74ad822eebbd750ee7b8357d25 - - poppler/SplashOutputDev.cc | 9 +++++++-- - 1 files changed, 7 insertions(+), 2 deletions(-) - -commit c4ddbe89df9e48343a9606728b7c182080d87ece -Author: Patrick Spendrin <ps_ml@gmx.de> -Date: Sat Mar 20 21:55:17 2010 +0100 - - [CMake] when the conf configuration backend is "win32", set the - required Internet Explorer version to 5.0 - - ... as done with autotools as well - - CMakeLists.txt | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 97da1f9d060493d9fb54a20e980c3f6e2b82c97e -Author: Pino Toscano <pino@kde.org> -Date: Sat Mar 20 17:51:07 2010 +0100 - - [CMake] check whether a link flag is supported before adding it to - the link flags - - this way we can add -Wl,--as-needed and -Wl,--no-add-needed only if - the current GCC/LD supports them - - cmake/modules/PopplerMacros.cmake | 23 ++++++++++++++++++++--- - 1 files changed, 20 insertions(+), 3 deletions(-) - -commit 223bce6d14e632f457a81b2ec091fe16369d2eb6 -Author: Pino Toscano <pino@kde.org> -Date: Sat Mar 20 14:08:58 2010 +0100 - - [CMake] with GCC, pass --as-needed and --no-add-needed to the linker - - --as-needed allows to avoid overlinking, linking only to the libraries - whose symbols are actually used - --no-add-needed makes the linker not use the NEEDED libraries - automatically, so we have to always make sure we specify all the - libraries actually used in a exe/lib - - cmake/modules/PopplerMacros.cmake | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit fc761f0d385708daaef1b95968532795b04f11b0 -Author: Pino Toscano <pino@kde.org> -Date: Sat Mar 20 14:05:59 2010 +0100 - - [CMake] poppler-dump uses parseargs.c which uses the poppler core API, - so it must link to it - - cpp/tests/CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit a210440b05d14efc53224a10e8b3ac7d508043b5 -Author: Pino Toscano <pino@kde.org> -Date: Sat Mar 20 14:04:02 2010 +0100 - - [CMake] poppler-glib uses the freetype API, so it must explicitly - link to it - - glib/CMakeLists.txt | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit f5d352666b92cee0390470d7b892ec8dcbf046a5 -Author: Pino Toscano <pino@kde.org> -Date: Sat Mar 20 14:03:19 2010 +0100 - - [CMake] pdftoabw uses the libxml2 API, so it must explicitly link - to it - - utils/CMakeLists.txt | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 3fc2c4affe825f4aabcee161ec794338bd359403 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Mar 18 13:52:52 2010 +0100 - - [glib] Use g_slice_new/free instead of g_new/free to alloc/free - iterators - - glib/poppler-document.cc | 27 +++++++++++++-------------- - 1 files changed, 13 insertions(+), 14 deletions(-) - -commit 7bd6a8558646983669ce699f83d5ed42d7fce476 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Mar 18 13:34:03 2010 +0100 - - [glib] Move find_annot_movie_for_action() from page to action - - And remove _poppler_action_movie_set_movie(). - - glib/poppler-action.cc | 93 - ++++++++++++++++++++++++++++++++++++++++++------ - glib/poppler-page.cc | 79 ---------------------------------------- - glib/poppler-private.h | 2 - - 3 files changed, 82 insertions(+), 92 deletions(-) - -commit e5e3d310aa488638431dd85ac3383a12056674bf -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Mar 18 12:20:26 2010 +0100 - - Update copyright header - - poppler/Link.cc | 2 +- - poppler/Link.h | 1 + - 2 files changed, 2 insertions(+), 1 deletions(-) - -commit c76870178a031e437de3f9ed7baa64efb96955d6 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Mar 18 12:13:36 2010 +0100 - - [glib-demo] OCG State Actions demo - - glib/demo/utils.c | 64 - +++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 64 insertions(+), 0 deletions(-) - -commit 456e42f91dfbf73b71a5dbdde13d7ccdb5637d79 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Mar 18 12:12:51 2010 +0100 - - [glib] Add support for OCG State actions - - glib/poppler-action.cc | 125 - ++++++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-action.h | 25 +++++++++- - glib/poppler.h | 1 + - 3 files changed, 150 insertions(+), 1 deletions(-) - -commit 4b109899e0732bbf65cacd875829e869e61eda48 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Mar 18 12:10:19 2010 +0100 - - [glib] Make get_layer_rbgroup() and get_layers() doc funcs public - for internal use - - glib/poppler-document.cc | 12 ++++++------ - glib/poppler-private.h | 3 +++ - 2 files changed, 9 insertions(+), 6 deletions(-) - -commit 38a55f6118debf994ce1fc41e987b0e3766047ba -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Mar 18 12:08:30 2010 +0100 - - Add support for Set-OCG-State actions - - Fixes bug #23522. - - poppler/Link.cc | 80 - +++++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Link.h | 31 +++++++++++++++++++++ - 2 files changed, 111 insertions(+), 0 deletions(-) - -commit bf398e53b0823d0a6272679858b67c5ffd704425 -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 17 23:06:44 2010 +0100 - - [CMake] fix pkg-config executable variable name - - CMakeLists.txt | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit ab1a37666704d6b15c19b694ee191327847c23da -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 17 23:04:01 2010 +0100 - - [CMake] proper way of looking for pkg-config - - cmake/modules/FindGTK.cmake | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 7f07a7dcea031f99a9a6d7c424184a2e69ee0062 -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 17 22:58:08 2010 +0100 - - [CMake] update FindFontconfig.cmake with a more recent version - - ... present in KDE (as before) - - cmake/modules/FindFontconfig.cmake | 15 +++++++++------ - 1 files changed, 9 insertions(+), 6 deletions(-) - -commit beee143ffbdc699ab19f10a01e5747200ea1927a -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 17 18:36:32 2010 +0100 - - [CMake] set the LINK_INTERFACE_LIBRARIES for the poppler and - poppler-cpp libraries - - this should reduce the libraries linked by frontends and utility - applications - - CMakeLists.txt | 1 + - cpp/CMakeLists.txt | 1 + - 2 files changed, 2 insertions(+), 0 deletions(-) - -commit 5ab791cb2a029edcde84b00a47165adfe4d98a98 -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 17 16:39:38 2010 +0100 - - [CMake] small cleanups in FindGTK.cmake - - - update the header will all the stuff found and the variables set - - add my copyright for this year - - remove no more useful UsePkgConfig inclusion - - cmake/modules/FindGTK.cmake | 17 ++++++++++++----- - 1 files changed, 12 insertions(+), 5 deletions(-) - -commit fcbc76d82e3059c8288fbdc8da117ac9b38a70f2 -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 17 16:36:41 2010 +0100 - - [CMake] switch gtk2 (gtk+, gdk-pixbuf, gthread, gio) search to use - the new pkg_check_modules() way - - cmake/modules/FindGTK.cmake | 27 ++------------------------- - 1 files changed, 2 insertions(+), 25 deletions(-) - -commit 5b8135e0899aa3578045eca40940a3495c48d895 -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 17 16:27:40 2010 +0100 - - [CMake] link poppler-glib to the gdk2 libraries, if gdk2 was found - - glib/CMakeLists.txt | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 3dc4979d72048e81ae3b2d60dab11e791ac95696 -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 17 16:26:04 2010 +0100 - - [CMake] switch gdk2 search to use the new pkg_check_modules() way - - cmake/modules/FindGTK.cmake | 13 +------------ - 1 files changed, 1 insertions(+), 12 deletions(-) - -commit 0ef3d899cb8dea75c97ae1038cac5006f97bc0d2 -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 17 16:05:07 2010 +0100 - - [CMake] switch glib2 search to use the new pkg_check_modules() way - - cmake/modules/FindGTK.cmake | 18 ++---------------- - 1 files changed, 2 insertions(+), 16 deletions(-) - -commit d2dc83cb8de481e44ea584eee77881978af920fa -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 17 15:56:16 2010 +0100 - - [CMake] rename GLIB_VERSION to GLIB_REQUIRED - - this way it matches autotools, and it is going to not conflict with - my next changes - - CMakeLists.txt | 4 ++-- - cmake/modules/FindGTK.cmake | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -commit 34accfe27305cae18e09243ab2a607287b86fa47 -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 17 13:55:09 2010 +0100 - - [CMake] set all the definitions for poppler-glib in a single place - - glib/CMakeLists.txt | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 3d93daf50c61019ca70f42e7ccf33897800b262a -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 17 13:49:22 2010 +0100 - - [CMake] no need to check for BUILD_GTK_TESTS for single tests - - poppler_add_test(... BUILD_GTK_TESTS ...) takes care of that already - - glib/CMakeLists.txt | 4 ++-- - test/CMakeLists.txt | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - -commit 946a11345d01d39538d22114e50aa3e179059883 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 20:24:25 2010 +0100 - - [build] Update cmake files - - CMakeLists.txt | 2 ++ - glib/CMakeLists.txt | 4 ++++ - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit 922c0fe392ba439453edb5b2e88b74f0caa586b3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 20:08:23 2010 +0100 - - [glib-demo] Rendition actions demo - - glib/demo/utils.c | 112 - +++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 112 insertions(+), 0 deletions(-) - -commit 163b3f79d67543bc37b64875e30dcc9b7053e1d5 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 20:08:00 2010 +0100 - - [glib] Add support for rendition actions - - glib/poppler-action.cc | 22 ++++++++++++++++++++++ - glib/poppler-action.h | 14 +++++++++++++- - 2 files changed, 35 insertions(+), 1 deletions(-) - -commit d9b1e40751beddf48a8694b20bfcc4b4cb41060a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 20:06:45 2010 +0100 - - [glib] Add PopplerMedia representing a Rendition Media Clip - - glib/Makefile.am | 2 + - glib/poppler-media.cc | 302 - ++++++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-media.h | 53 +++++++++ - glib/poppler-private.h | 2 + - glib/poppler.h | 2 + - 5 files changed, 361 insertions(+), 0 deletions(-) - -commit 0224b81c4729a98a56b7a68054422ea655018d6a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 17:54:03 2010 +0100 - - [glib-demo] Add page number to annots demo - - glib/demo/annots.c | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 0153b892c63e4fccd0819150cf7b4213857a11c5 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 17:49:51 2010 +0100 - - [glib] Add poppler_annot_get_page_index() to get the page associated - to annot - - glib/poppler-annot.cc | 19 +++++++++++++++++++ - glib/poppler-annot.h | 1 + - 2 files changed, 20 insertions(+), 0 deletions(-) - -commit b47337ea91696fea8f42a68a6fa160681ab284b2 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 17:49:17 2010 +0100 - - [annots] Checks screen annots associated with a rendition action - have a valid page ref - - poppler/Annot.cc | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 9417fd793ec8d806822669aa614193073e7dfe50 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 16:52:30 2010 +0100 - - [annots] Save page index of the page associated with the annot - - poppler/Annot.cc | 14 +++++--------- - poppler/Annot.h | 4 ++-- - 2 files changed, 7 insertions(+), 11 deletions(-) - -commit 36b76a5d01b74c6381433b6f6f7ffb9f02696a60 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 14:12:11 2010 +0100 - - Rework LinkRendition to follow the spec - - poppler/Link.cc | 68 - ++++++++++++++++++++++++++++++++++--------------------- - poppler/Link.h | 12 ++++++--- - 2 files changed, 50 insertions(+), 30 deletions(-) - -commit 7b5885ee7d2026df9a6e87327b6d02f37d79b8b2 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 12:25:12 2010 +0100 - - [glib-demo] Annot screen demo - - glib/demo/annots.c | 17 +++++++++++++++++ - 1 files changed, 17 insertions(+), 0 deletions(-) - -commit bdb76c7cb89bcb6fb139b0ef348d96b7780d57ed -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 12:24:19 2010 +0100 - - [glib] Add support for screen annotation - - Based on patch by Sam Kaplan. - - glib/poppler-annot.cc | 75 - ++++++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-annot.h | 8 +++++ - glib/poppler-page.cc | 3 ++ - glib/poppler-private.h | 1 + - glib/poppler.h | 1 + - 5 files changed, 88 insertions(+), 0 deletions(-) - -commit 54892b1375e360113432b07c6ba058f861d21fe8 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 12:21:30 2010 +0100 - - [annots] Save the action already parsed in AnnotScreen - - poppler/Annot.cc | 9 +++++++-- - poppler/Annot.h | 5 +++-- - 2 files changed, 10 insertions(+), 4 deletions(-) - -commit 5a84a2d749478f19631dbfad2be06ec4ea85038c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 11:16:17 2010 +0100 - - [glib-demo] Annot and links movie demo - - glib/demo/annots.c | 20 +++++++++ - glib/demo/utils.c | 115 - +++++++++++++++++++++++++++++++++++++++++++++++++++- - glib/demo/utils.h | 3 + - 3 files changed, 137 insertions(+), 1 deletions(-) - -commit 2cf5ee4f62089df099f78cd4d39a4eb7589d1b47 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 11:04:17 2010 +0100 - - [glib] Add support for movie actions - - Based on patch by Hugo Mercier. - - glib/poppler-action.cc | 35 ++++++++++++++++++--- - glib/poppler-action.h | 15 ++++++++- - glib/poppler-page.cc | 81 - +++++++++++++++++++++++++++++++++++++++++++++++- - glib/poppler-private.h | 2 + - 4 files changed, 125 insertions(+), 8 deletions(-) - -commit 132b6f072fefd231d42f31626f1b5009c4e8319e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 10:56:23 2010 +0100 - - [glib] Add support for movie annotations - - Based on patch by Hugo Mercier. - - glib/poppler-annot.cc | 97 - ++++++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-annot.h | 10 +++++ - glib/poppler-page.cc | 3 + - glib/poppler-private.h | 1 + - glib/poppler.h | 1 + - 5 files changed, 112 insertions(+), 0 deletions(-) - -commit aecad2bb12be44825d273e364ec6a0444dac5605 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 15 10:48:03 2010 +0100 - - [glib] Add PopplerMovie class - - glib/Makefile.am | 2 + - glib/poppler-movie.cc | 140 - ++++++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-movie.h | 42 ++++++++++++++ - glib/poppler-private.h | 2 + - glib/poppler.h | 2 + - 5 files changed, 188 insertions(+), 0 deletions(-) - -commit 5b3234a16e0d465bff2b5e277cb64b4f4b0a8dbd -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Mar 14 16:10:26 2010 +0100 - - Split Movie class into Rendition and Movie classes to follow the spec - - poppler/Annot.cc | 16 ++- - poppler/Link.cc | 10 +- - poppler/Link.h | 6 +- - poppler/Makefile.am | 2 + - poppler/Movie.cc | 438 - +++++----------------------------------------- - poppler/Movie.h | 138 +++------------ - poppler/Rendition.cc | 400 - ++++++++++++++++++++++++++++++++++++++++++ - poppler/Rendition.h | 157 +++++++++++++++++ - qt4/src/poppler-movie.cc | 9 +- - 9 files changed, 657 insertions(+), 519 deletions(-) - -commit f9c163730478e3b6d8a1e73dbae6c52c28ae1e84 -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 8 14:49:12 2010 +0100 - - [Qt4] include Object.h and Annot.h, now needed - - qt4/src/poppler-movie.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit a00532f509c19c5455e0db5068db95dd4583e8dd -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 8 14:22:53 2010 +0100 - - Check for Null instead of None to know whether a dict entry is present - - Dict::lookup returns obj->initNull() when the key is not found. - - poppler/Movie.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit b51e66c9a7e2f7f39ae1edf8bda02a7bc1ad4ebd -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 8 14:15:22 2010 +0100 - - [annots] Create appearance stream for Movie Annotations when not - defined - - See bug #23108 - - poppler/Annot.cc | 103 - +++++++++++++++++++++++++++++++++++++++++++++++++++++- - poppler/Annot.h | 4 ++- - 2 files changed, 105 insertions(+), 2 deletions(-) - -commit fae59411852e5c2c45825c5ea963318f1ed5dc6a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 8 14:07:09 2010 +0100 - - Fix handling of poster in Movie - - Poster is not always a stream, it can be a boolean too. Also, get the - reference when available instead of fetching the stream. - - poppler/Movie.cc | 25 ++++++++++++------------- - poppler/Movie.h | 6 ++++-- - 2 files changed, 16 insertions(+), 15 deletions(-) - -commit a451f83d101bf265a1e7e2a17c0b320895e70f4e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Mar 7 12:22:57 2010 +0100 - - Save width, height (aspect) in Movie object and provide getAspect() - method - - poppler/Movie.cc | 3 ++- - poppler/Movie.h | 4 ++++ - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit f88d469f860da17055fc4b98b64aef241fcf0185 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Mar 6 12:33:40 2010 +0100 - - Move Movie objects parsing code from Annot to Movie - - poppler/Annot.cc | 244 - ++------------------------------------------ - poppler/Annot.h | 73 +------------- - poppler/Link.cc | 4 +- - poppler/Movie.cc | 255 - ++++++++++++++++++++++++++++++++++++++-------- - poppler/Movie.h | 25 ++++- - qt4/src/poppler-movie.cc | 11 ++- - 6 files changed, 246 insertions(+), 366 deletions(-) - -commit ec9138b574c7226ad733880d3d43b86bb72073f4 -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 23:17:50 2010 +0100 - - [autotools] add also cpp/tests/CMakeLists.txt to the "dist files" - - Makefile.am | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit ef3258d6fc57e7a62d951cc826804e50e8e1b526 -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 23:14:12 2010 +0100 - - [autotools] fix location of poppler-config.h.cmake - - Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit fd1d9c882997ff35acd5a458e9dfeba3ad6c8b25 -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 22:42:06 2010 +0100 - - [CMake] just enable what needed each time - - CMakeLists.txt | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 476bde472a7e694afde96a04ea335fe9582d6fad -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 22:39:45 2010 +0100 - - [CMake] add small description for the zlib option - - taken from two bits in configure.ac - - CMakeLists.txt | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 1267d7e0c36e262984070a3b55fea46e7289a4b4 -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 19:34:03 2010 +0100 - - [CMake] add a note about gtk-doc not supported yet - - CMakeLists.txt | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 201b18ad0837e84d874b56e1b0469d1b2d45378b -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 19:30:36 2010 +0100 - - [CMake] sync with poppler-config.h.in: add - WITH_FONTCONFIGURATION_{FONTCONFIG,WIN32} - - poppler/poppler-config.h.cmake | 10 ++++++++++ - 1 files changed, 10 insertions(+), 0 deletions(-) - -commit 0d0044e8cc2d406f066338102ec73e1b56214cc3 -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 19:25:27 2010 +0100 - - [CMake] move poppler-config.h.cmake in the poppler subdirectory, - where poppler-config.h.in is - - CMakeLists.txt | 2 +- - poppler-config.h.cmake | 90 - ---------------------------------------- - poppler/poppler-config.h.cmake | 90 - ++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 91 insertions(+), 91 deletions(-) - -commit f785e29a901d2c76204dd26e9585446fdd817ebd -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 18:35:34 2010 +0100 - - [CMake] remove the generated poppler-enums.{c,h} in the clean target - - ie usually when doing `make clean' - - glib/CMakeLists.txt | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 369604603375dbe3516136b6f8f9d0c26e0b744f -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 18:26:45 2010 +0100 - - [CMake] use the --template option of glib-mkenums (like done with - autotools) - - glib/CMakeLists.txt | 24 ++++-------------------- - 1 files changed, 4 insertions(+), 20 deletions(-) - -commit bbcbb34fec10c90edd5960bdbcc6849bc8f39526 -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 17:34:40 2010 +0100 - - [CMake] set POPPLER_GLIB_DISABLE_DEPRECATED and - POPPLER_GLIB_DISABLE_SINGLE_INCLUDES as done with autotools - - CMakeLists.txt | 6 ++++++ - glib/CMakeLists.txt | 6 +++++- - 2 files changed, 11 insertions(+), 1 deletions(-) - -commit 190fa971c12ca1b3007f6ba349a77a7c15c47490 -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 17:24:25 2010 +0100 - - reorder to match what's in the correspondent .in - - glib/poppler-features.h.cmake | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit ff46def8b178420a86a974ec2ce767a538bba8be -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 17:23:16 2010 +0100 - - [CMake] GDK_FEATURE is no more needed here - - glib/CMakeLists.txt | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 1eb8026a3060ef61a88c535177510f7ac7e7fc25 -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 17:19:58 2010 +0100 - - [CMake] set in one place whether to build the glib frontend - - CMakeLists.txt | 11 ++++++----- - 1 files changed, 6 insertions(+), 5 deletions(-) - -commit a1a6f23e2345814e147a72211ce9139555385223 -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 17:09:58 2010 +0100 - - [CMake] correctly set the GLIB_REQ stuff - - CMakeLists.txt | 1 + - poppler-glib.pc.cmake | 2 +- - 2 files changed, 2 insertions(+), 1 deletions(-) - -commit 0f2e5d6925c5938281d9bafc297a43867c4a915b -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 17:03:21 2010 +0100 - - [CMake] move the minimum GLib version to the main CMakeLists.txt - - CMakeLists.txt | 1 + - cmake/modules/FindGTK.cmake | 2 +- - 2 files changed, 2 insertions(+), 1 deletions(-) - -commit efdffba45d15b538dbfb294403e99f3a6470b4d9 -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 16:58:27 2010 +0100 - - [CMake] align the GDK stuff (GDK_{FEATURE,REQ}) to what done with - autotools - - CMakeLists.txt | 6 +++++- - poppler-glib.pc.cmake | 2 +- - 2 files changed, 6 insertions(+), 2 deletions(-) - -commit cfecc69b7f05920f543ee7e9aafeafaa4c3506fb -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 16:49:14 2010 +0100 - - [CMake] apparently there's not a minimum version requirement for GDK, - so drop the check - - cmake/modules/FindGTK.cmake | 5 +---- - 1 files changed, 1 insertions(+), 4 deletions(-) - -commit 8ff1cf03d2607b0f13bbbbf272f2b03d8927bd24 -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 16:47:21 2010 +0100 - - [CMake] first look for Cairo, then for GLib/GDK/GTK - - this starts to align to the searches done with autotools - also, move the CAIRO_FEATURE to the main CMakeLists.txt - - CMakeLists.txt | 19 +++++++++++-------- - glib/CMakeLists.txt | 1 - - 2 files changed, 11 insertions(+), 9 deletions(-) - -commit bcaf62b8e252594530d3050761ba563cf3b1fb6e -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 16:00:03 2010 +0100 - - [CMake] enhance/rewrite a bit the FindCairo module - - make use of some features of CMake 2.6 (as we require it): - - newer pkg-config handling (aka pkg_check_modules()) - - version checking for modules (PACKAGE_FIND_VERSION*) - - find_package_handle_standard_args() - also, after the pkg-config search to win32, search for cairo again - (double-check plus real search for win32) - furthermore, introduce CAIRO_INCLUDE_DIRS with the include paths - requires (kind of "obsoletes" CAIRO_CFLAGS, left there in case it - is used again) - - apply the changes to the rest of the build system (specify the - version needed, use the correct variable for includes) - - CMakeLists.txt | 2 +- - cmake/modules/FindCairo.cmake | 64 - ++++++++++++++++++++++++++-------------- - glib/CMakeLists.txt | 2 +- - 3 files changed, 43 insertions(+), 25 deletions(-) - -commit c96aa0f5fc74ae04f483485b787aaf65f1791991 -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 02:01:13 2010 +0100 - - add Patrick's copyright notices - - cpp/poppler-global.h | 1 + - goo/gtypes.h | 14 ++++++++++++++ - poppler/GlobalParams.cc | 1 + - poppler/SplashOutputDev.cc | 1 + - 4 files changed, 17 insertions(+), 0 deletions(-) - -commit 3311bedd2eb831ef1fd553f3f50960331cf6885f -Author: Patrick Spendrin <ps_ml@gmx.de> -Date: Sun Mar 7 01:56:15 2010 +0100 - - MSVC: disable for the 'ustring' class the warning C4251 (which does - not apply) - - cpp/poppler-global.h | 8 ++++++++ - 1 files changed, 8 insertions(+), 0 deletions(-) - -commit 9efa18397bd05fbd27c7811fa6e0f34ce94012e0 -Author: Patrick Spendrin <ps_ml@gmx.de> -Date: Sun Mar 7 01:48:03 2010 +0100 - - MSVC: disable warning C4800, which is of no use for now - - goo/gtypes.h | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 3a88d1bf8d2c5a9e8014e0d46e24c9ec06556469 -Author: Patrick Spendrin <ps_ml@gmx.de> -Date: Sun Mar 7 01:26:10 2010 +0100 - - MSVC: no isfinite(), so provide it using _finite() - - poppler/SplashOutputDev.cc | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 7774912c46f832f25c51b4cfc0e9430b1cd7fa1f -Author: Patrick Spendrin <ps_ml@gmx.de> -Date: Sun Mar 7 01:22:31 2010 +0100 - - MSVC: do not force constness here, so the right overload will - be chosen - - poppler/GlobalParams.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit cf07a5d85b402b6956c9605fbdc88bddcb94a3cf -Author: Pino Toscano <pino@kde.org> -Date: Sun Mar 7 00:49:07 2010 +0100 - - [CMake] show end yes/no message about the GDK usage - - just like done with autotools - - CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 42c98f8eabe304d5e3dc8c1ebdd5b0b6c221e696 -Author: Pino Toscano <pino@kde.org> -Date: Sat Mar 6 17:18:08 2010 +0100 - - [CMake] make the font configuration backend selection take a string - (like with autotools) - - this way it is possible to set the cmake variable FONT_CONFIGURATION - to either "win32" (default on windows) or "fontconfig" (default - elsewhere) to the font backend to use - as a consequence, make fontconfig a requirement only if the font - backend chosen is "fontconfig" - - CMakeLists.txt | 39 +++++++++++++++++++++++++++++---------- - 1 files changed, 29 insertions(+), 10 deletions(-) - -commit bda6e7cd089f2970af2e9540b4415633ffcf0ebb -Author: Pino Toscano <pino@kde.org> -Date: Sat Mar 6 17:13:30 2010 +0100 - - [CMake] add a show_end_message() macro to show a generic string - as value - - make show_end_message_yesno() call it with the proper "yes" or - "no" string - - cmake/modules/PopplerMacros.cmake | 9 +++++++-- - 1 files changed, 7 insertions(+), 2 deletions(-) - -commit d313c0f508711b3b7166b84608c43ebf1f07194b -Author: Pino Toscano <pino@kde.org> -Date: Sat Mar 6 17:08:59 2010 +0100 - - [CMake] rename the show_end_message() macro to - show_end_message_yesno() - - CMakeLists.txt | 26 +++++++++++++------------- - cmake/modules/PopplerMacros.cmake | 4 ++-- - 2 files changed, 15 insertions(+), 15 deletions(-) - -commit 0425ff835fa26df5e25e628a6c56f3a180713905 -Author: Pino Toscano <pino@kde.org> -Date: Fri Mar 5 22:21:56 2010 +0100 - - update copyright - - poppler/ArthurOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit c5ea135ca58e112110be3ae10d887f3188172765 -Author: Pino Toscano <pino@kde.org> -Date: Fri Mar 5 22:14:57 2010 +0100 - - [arthur] update the miter limit - - poppler/ArthurOutputDev.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 552f344b3e3df7c796afa6946149b0a5590cc4f7 -Author: Pino Toscano <pino@kde.org> -Date: Fri Mar 5 22:04:39 2010 +0100 - - [arthur] update the line dash style - - poppler/ArthurOutputDev.cc | 12 +++++++++++- - 1 files changed, 11 insertions(+), 1 deletions(-) - -commit bc42ee05fceef0d0dd2ab0587c184dfc37cf29bf -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Mar 5 18:54:32 2010 +0000 - - fix copyright year - - poppler/CairoOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit b21461e91ed671ef29fd3cf4780fda44f82a0679 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Fri Mar 5 15:14:08 2010 +0100 - - [cairo] Close image stream before resetting it again - - poppler/CairoOutputDev.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 866bcc7edb47fe11355081045e2d316a4d530649 -Author: Pino Toscano <pino@kde.org> -Date: Thu Mar 4 14:19:50 2010 +0100 - - [Qt4] no need to save&restore on a newly created painter - - qt4/src/poppler-page.cc | 2 -- - 1 files changed, 0 insertions(+), 2 deletions(-) - -commit 654698b556eb53eab7c2d55fc6b3fdd9e35173bb -Author: Pino Toscano <pino@kde.org> -Date: Thu Mar 4 13:16:11 2010 +0100 - - [Qt4] use Arthur unconditionally - - arthur is no more tied to splash, so can be used in an occasion - - qt4/src/poppler-document.cc | 2 +- - qt4/src/poppler-page.cc | 4 +--- - 2 files changed, 2 insertions(+), 4 deletions(-) - -commit 41931b6310d2ae81e622db904246f019ceb8410d -Author: Pino Toscano <pino@kde.org> -Date: Thu Mar 4 13:13:11 2010 +0100 - - [Qt4] compile Arthur unconditionally - - as the arthur output dev does not require splash anymore, we can - always compile it with poppler-qt4 - - poppler/Makefile.am | 4 ++-- - qt4/src/CMakeLists.txt | 6 +----- - qt4/src/Makefile.am | 6 +----- - 3 files changed, 4 insertions(+), 12 deletions(-) - -commit 48a29e2bbc9aa9bd0cb2775a2365c0ffdeb6ce87 -Author: Pino Toscano <pino@kde.org> -Date: Thu Mar 4 13:11:43 2010 +0100 - - [Arthur] make ArthurOutputDev compile even with Splash disabled - - text rendering is disabled in that case for now - - poppler/ArthurOutputDev.cc | 11 ++++++++++- - 1 files changed, 10 insertions(+), 1 deletions(-) - -commit 2013a19b6457753890affad8c4049f2ce4627df7 -Author: Pino Toscano <pino@kde.org> -Date: Thu Mar 4 13:02:43 2010 +0100 - - [CMake/tests] compile gtk-splash-test only if splash is enabled - - test/CMakeLists.txt | 14 +++++++++----- - 1 files changed, 9 insertions(+), 5 deletions(-) - -commit ae740c5cfefbae13f82b750e39fa3dbbdc94858b -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 2 23:22:06 2010 +0100 - - [cpp] update the copyrights - - cpp/poppler-document-private.h | 2 +- - cpp/poppler-document.cpp | 2 +- - cpp/poppler-embedded-file.cpp | 2 +- - cpp/poppler-embedded-file.h | 2 +- - cpp/poppler-global.cpp | 3 ++- - cpp/poppler-global.h | 2 +- - cpp/poppler-page.cpp | 2 +- - cpp/poppler-page.h | 2 +- - cpp/poppler-rectangle.h | 2 +- - cpp/poppler-toc.cpp | 2 +- - cpp/poppler-version.cpp | 2 +- - cpp/tests/poppler-dump.cpp | 2 +- - 12 files changed, 13 insertions(+), 12 deletions(-) - -commit 24b1d8d0b4ae7cea9fbc331f19cd5ce3917b8b4d -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 2 23:15:56 2010 +0100 - - [cpp] {from,to}_utf_8() -> {from,to}_utf8() - - cpp/poppler-global.cpp | 4 ++-- - cpp/poppler-global.h | 4 ++-- - cpp/poppler-page.cpp | 2 +- - 3 files changed, 5 insertions(+), 5 deletions(-) - -commit 690af1bc58de1ebe710c5e599f1cb635e4838fc8 -Author: Hib Eris <hib@hiberis.nl> -Date: Tue Mar 2 16:33:04 2010 +0100 - - [cpp] define poppler_cpp_EXPORTS when building with autotools as well - - fixes building on Windows - - cpp/Makefile.am | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 7492a376e7e5ec35534276ac15485123645617b0 -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 2 22:16:07 2010 +0100 - - [cpp/tests] use gmtime() when gmtime_r() is not available - - cpp/tests/poppler-dump.cpp | 9 ++++++++- - 1 files changed, 8 insertions(+), 1 deletions(-) - -commit de013cc14a0621782c53f481ed7e559f241855a3 -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 2 22:05:25 2010 +0100 - - [cpp] include config.h _after_ the other includes - - cpp/poppler-global.cpp | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 388e5d6aebcabbfc90894c86248159c63701cb0a -Author: Hib Eris <hib@hiberis.nl> -Date: Tue Mar 2 15:51:23 2010 +0100 - - Use ICONV_CONST when necessary - - cpp/poppler-global.cpp | 10 ++++++---- - 1 files changed, 6 insertions(+), 4 deletions(-) - -commit aaa58b26733a2f7c778632da4942b588050cf33f -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 2 21:53:55 2010 +0100 - - [CMake] properly define ICONV_CONST - - CMakeLists.txt | 1 - - cmake/modules/FindIconv.cmake | 3 +++ - config.h.cmake | 2 +- - 3 files changed, 4 insertions(+), 2 deletions(-) - -commit 6304b0d8959fccf96b030c757d78e845d04757e4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 28 15:33:53 2010 +0100 - - poppler 0.13.1 - - CMakeLists.txt | 2 +- - NEWS | 33 +++++++++++++++++++++++++++++++++ - configure.ac | 2 +- - cpp/Doxyfile | 2 +- - qt4/src/Doxyfile | 2 +- - 5 files changed, 37 insertions(+), 4 deletions(-) - -commit 9eac71862915c851c07075e3ca3af82eb9e4e775 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 28 15:33:19 2010 +0100 - - Make sure the private headers end up in the tarball on make dist - - cpp/Makefile.am | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit b488172311c2921ab4c365d71ad8b1ab7f596c71 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 28 14:25:36 2010 +0100 - - Add copyright notices - - poppler/CairoFontEngine.cc | 3 ++- - poppler/CairoFontEngine.h | 2 +- - 2 files changed, 3 insertions(+), 2 deletions(-) - -commit 5453cff5b7cb47cadfdae585a58409117af8c1f1 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Feb 28 13:51:22 2010 +0100 - - [cairo] Select filter for images based on scale factor - - When rendering images and interpolate flag is disabled or missing, we - always interpolate unless scale factor is >= 400% - - See bugs #25268, #9860 - - poppler/CairoOutputDev.cc | 64 - +++++++++++++++++++++++++++++++++------------ - poppler/CairoOutputDev.h | 2 + - 2 files changed, 49 insertions(+), 17 deletions(-) - -commit e65456cbd5cae2750426aabeb2d66a10537616f0 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Feb 28 13:13:13 2010 +0100 - - [cairo] Refactor scaled size computation into a new method - - poppler/CairoOutputDev.cc | 52 - ++++++++++++++++++++++---------------------- - poppler/CairoOutputDev.h | 2 + - 2 files changed, 28 insertions(+), 26 deletions(-) - -commit 32aa9ae7d0087298661829265de00e93398272b3 -Author: Jan Kümmel <jan+freedesktop@snorc.org> -Date: Sat Feb 27 17:58:46 2010 +0100 - - [cairo] Omit writing of embedded fonts into tempary files - - Fixes bug #26694. - - poppler/CairoFontEngine.cc | 146 - ++++++++++++++++++++++++-------------------- - 1 files changed, 80 insertions(+), 66 deletions(-) - -commit 7ba52a32343ca73730a80b64c136e3f03348e7d9 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Feb 27 17:42:46 2010 +0100 - - [cairo] Remove unused 'face' from CairoFreeTypeFont class - - poppler/CairoFontEngine.cc | 6 ++---- - poppler/CairoFontEngine.h | 3 +-- - 2 files changed, 3 insertions(+), 6 deletions(-) - -commit 7c3140c88c00282e10888143fffe3c402d48fb05 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sat Feb 27 13:13:47 2010 +0100 - - Don't use '\' character in PostScript names - - poppler/PSOutputDev.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 8e354a15a1861719c00799937ad9f9bb1bb71e9f -Author: Thomas Freitag <Thomas.Freitag@alfa.de> -Date: Wed Feb 24 18:58:11 2010 +0000 - - Fix remaining part of 26243 - - Thomas says: The "gn" is colored with a shading pattern, but the - shading has a bbox, - so it is clipped to this bbox, too. But when coloring text or masks in - pattern colorspace, this is definely wrong. - - poppler/Gfx.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit fcbc571a98775b1daa8f562fc8674fb2d15b6626 -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 23 17:02:47 2010 +0100 - - [cpp] make checksum() return an array of data, instead of a string - - a checksum is a sequence of values after all, so just return it as - such instead of pretending it is a string - accordingly adapt the mini dump application - - cpp/poppler-embedded-file.cpp | 10 ++++++++-- - cpp/poppler-embedded-file.h | 2 +- - cpp/tests/poppler-dump.cpp | 4 ++-- - 3 files changed, 11 insertions(+), 5 deletions(-) - -commit fbefb9bef9f7a099d51919255a98f412d1e1d696 -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 23 16:56:47 2010 +0100 - - [cpp apidox] add API documentation for the 'embedded_file' class - - cpp/poppler-embedded-file.cpp | 43 - +++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 43 insertions(+), 0 deletions(-) - -commit 6d39cca0a035fc656d3b86ba66dedaccee532fcb -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 23 16:41:56 2010 +0100 - - [cpp apidox] add API documentation for the 'toc' and 'toc_item' - classes - - cpp/poppler-toc.cpp | 57 - +++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 57 insertions(+), 0 deletions(-) - -commit 857e4ceb26d959c48c7af6bff53ca1bfe5307236 -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 23 15:39:58 2010 +0100 - - [cpp] when the loading of the document fails, put back the data - where it was before - - cpp/poppler-document-private.h | 2 +- - cpp/poppler-document.cpp | 10 +++++++--- - 2 files changed, 8 insertions(+), 4 deletions(-) - -commit 7838b182143086192ac8dcf571da0ce1743619e2 -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 23 00:04:09 2010 +0100 - - [cpp] add the directory of the generated html apidox to the ignore - list - - cpp/.gitignore | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 71a38a23a9db5cac872c666283b7abcb1462210c -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 22 23:43:34 2010 +0100 - - [cpp] add page::text() to get the text inside a page region - - cpp/poppler-page.cpp | 16 ++++++++++++++++ - cpp/poppler-page.h | 1 + - 2 files changed, 17 insertions(+), 0 deletions(-) - -commit 4c75360233bc67f097551980a46ecce976927220 -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 22 23:05:53 2010 +0100 - - [cpp] add page::search() - - cpp/poppler-page.cpp | 51 - ++++++++++++++++++++++++++++++++++++++++++++++++++ - cpp/poppler-page.h | 8 +++++++ - 2 files changed, 59 insertions(+), 0 deletions(-) - -commit 8932c53a084083eb42d109dd17bac3ad41ce65b5 -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 22 22:39:36 2010 +0100 - - [cpp] add getters and setters for left/top/right/bottom - - cpp/poppler-rectangle.h | 18 ++++++++++++++++++ - 1 files changed, 18 insertions(+), 0 deletions(-) - -commit 8e1ea57f558fa3a1702a17d79b5aaffc486c6a56 -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 22 22:19:51 2010 +0100 - - [cpp] add a global enum for case sensitivity - - cpp/poppler-global.h | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit ae41b087de8f0a7d525320dcf1d64ff22fe982b6 -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 22 19:06:21 2010 +0100 - - [cpp apidox] doxygen configuration for poppler-cpp - - cpp/Doxyfile | 1551 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 1551 insertions(+), 0 deletions(-) - -commit 1a36a7bcc684065478a3ade2c2938f0e3672140a -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 22 19:05:49 2010 +0100 - - [cpp apidox] very small start of intro page - - cpp/Mainpage.dox | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -commit 85e052ab7a4c462143325ecf60eebba35411b790 -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 22 18:53:20 2010 +0100 - - [cpp apidox] start adding API documentation for the global 'poppler' - namespace - - ... including the 'convert_date' function and faking the 'noncopyable' - class - - cpp/poppler-global.cpp | 16 ++++++++++++++++ - 1 files changed, 16 insertions(+), 0 deletions(-) - -commit b01608f91fb6cf6e9c4fb6e6ee3cb57517a766bf -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 22 18:52:24 2010 +0100 - - [cpp apidox] exclude the 'detail' namespace from apidox extraction - - this includes also the 'noncopyable' typedef, but that will be - handled differently - - cpp/poppler-global.h | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit f17a7a8cfdeabb3ced3ba8d42c869d892c528e13 -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 22 18:51:30 2010 +0100 - - [cpp apidox] add API documentation for the version functions - - cpp/poppler-version.cpp | 12 ++++++++++++ - 1 files changed, 12 insertions(+), 0 deletions(-) - -commit f6c4bbddc7d04c0b1a6b25c41cbf6d81ae40cc0c -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 22 18:50:54 2010 +0100 - - [cpp apidox] start adding API documentation for 'document' - - cpp/poppler-document.cpp | 182 - ++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 182 insertions(+), 0 deletions(-) - -commit cbb7519904d9b6395d0128e16a79324e4b8bfcc0 -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 22 13:15:11 2010 +0100 - - [CMake] no more need to build system check for the Cairo blend modes - - followup of 880890c14e99a954b365a3a6b59deeffa5304d30 for the cmake - build system - - cmake/modules/FindCairo.cmake | 18 ------------------ - config.h.cmake | 3 --- - 2 files changed, 0 insertions(+), 21 deletions(-) - -commit 80f47bbf45faf751c661c1d0931e8e1da622b8ca -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Feb 22 12:43:06 2010 +0100 - - [cairo] Use cairo_surface_set_mime_data() when printing - - When rendering a jpeg image for printing, using - cairo_surface_set_mime_data() to attach the jpeg stream to the - surface reduces drastically the size of the output file. - - poppler/CairoOutputDev.cc | 42 - ++++++++++++++++++++++++++++++++++++++++++ - poppler/CairoOutputDev.h | 1 + - 2 files changed, 43 insertions(+), 0 deletions(-) - -commit d63293af6dbff65f160be0118b1580c03a1aab56 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Nov 27 09:52:23 2009 +0100 - - [cairo] Turn EXTEND_PAD off when printing - - poppler/CairoOutputDev.cc | 98 - ++++++++++++++++++++++++++++++-------------- - 1 files changed, 67 insertions(+), 31 deletions(-) - -commit 880890c14e99a954b365a3a6b59deeffa5304d30 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Feb 22 11:01:05 2010 +0100 - - [cairo] Use CAIRO_VERSION macros to check whether blend modes are - available - - configure.ac | 24 ------------------------ - poppler/CairoOutputDev.cc | 4 ++-- - 2 files changed, 2 insertions(+), 26 deletions(-) - -commit 5c300ce00b5c59da767ca1ffec12f96f0ebbe701 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 21 21:20:10 2010 +0100 - - [Qt4/apidox] fix typo - - qt4/src/poppler-qt4.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 3f89ccf871e2f4a14129ad3e986b8cd19cdf129c -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 21 21:06:31 2010 +0100 - - [CMake] set the CXXFLAGS in a better way - - CMakeLists.txt | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit a18dab9e53a20a76eb46fa3a868fffdd3c754ce2 -Merge: fa09892 f3862f7 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 21 19:56:38 2010 +0100 - - Merge remote branch 'origin/cpp-frontend' - - * origin/cpp-frontend: (34 commits) - [cpp/tests] poppler-dump: show a string for the font type - [cpp/tests] poppler-dump: show the orientation of the pages - [cpp/tests] poppler-dump: a bit less output in permissions lines - [cpp/tests] poppler-dump: add --show-all to show all the information - [cpp] use iconv for the utf8 <-> utf16 conversions - [cpp] add the build system stuff for iconv, mandatory for cpp - [cpp] fixup unicode GooString <-> ustring conversions - [cpp] fix installation of poppler-version.h with autotools and - builddir != srcdir - simplify - [cpp/tests] add a simple poppler-dump test - [cpp] use the correct index (instead of an uninitialized variable) - [cpp] properly delete the children of a toc item - [cpp] actually implement toc::root() - [cpp] fix the reference to the vector data - [cpp] fix the reference to the vector data - [cpp] add destructor for 'rectangle' - [cpp] add out stream operators for rect and rectf - [cpp] add namespace to namespace functiond to link properly - [cpp] add default empty parameters for the passwords of the document - loading functions - [cpp] add "human friendly" output representation for byte_array - ... - - Conflicts: - config.h.cmake - -commit fa0989297e95b6adebed71336ea206d1b279ab24 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 21 16:59:57 2010 +0000 - - Detect the need for nanosleep in solaris - - Fixes bug 26650 - - ConfigureChecks.cmake | 5 +++++ - test/CMakeLists.txt | 17 +++++++++++------ - 2 files changed, 16 insertions(+), 6 deletions(-) - -commit d074485aa9d9fac6b715382002f53e3303bbc519 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 20 10:08:33 2010 +0000 - - Do not call getPixel if we know how to access the data - - Gives a 20% speed increase in some pdf - - splash/Splash.cc | 19 ++++++++++--------- - 1 files changed, 10 insertions(+), 9 deletions(-) - -commit d4cafe357bd86feb4b56e5dfbf5b7822e237a2ee -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 20 10:07:20 2010 +0000 - - Only call getPixel when really needed - - Gives a 8% speed increase in some pdf - - splash/Splash.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit c3122cfbe090f3a4045269222f941cd5ce77c171 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 20 10:04:37 2010 +0000 - - Move test code to the header to it can be inlined - - Gives a 10% speed increase in some documents - - splash/SplashClip.cc | 40 ++++++++++++++-------------------------- - splash/SplashClip.h | 43 +++++++++++++++++++++++++++++++++++++++++-- - 2 files changed, 55 insertions(+), 28 deletions(-) - -commit d987fb9b77e6da454eb898cc6c8baaf747b7ac4f -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Feb 19 23:59:03 2010 +0000 - - implement writeImgFile for splashModeXBGR8 - - splash/SplashBitmap.cc | 25 +++++++++++++++++++++++-- - 1 files changed, 23 insertions(+), 2 deletions(-) - -commit f9425c0b5b112ac673d0499f79a743afce719593 -Author: Hib Eris <hib@hiberis.nl> -Date: Fri Feb 19 20:18:13 2010 +0000 - - use pkgconfig to detect libpng on autotools too - - configure.ac | 12 ++++-- - goo/Makefile.am | 7 +++- - m4/libpng.m4 | 99 - --------------------------------------------------- - poppler/Makefile.am | 3 ++ - 4 files changed, 17 insertions(+), 104 deletions(-) - -commit 0cb07d645527f25997f5e1b104a6be92441d8ffa -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Feb 18 23:27:20 2010 +0000 - - Only swap w with h if rotation is 90 or 270 - - utils/pdftoppm.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 35015ed11090d67cab69443e607d4d80ca03c619 -Author: Nils Höglund <nils.hoglund@gmail.com> -Date: Thu Feb 18 23:14:51 2010 +0000 - - Match the number of calls to beginMarkedContent and endMarkedContent - - poppler/Gfx.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit ee265760e6ecec93fe26fb8e02848872555daefd -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Feb 18 23:13:48 2010 +0000 - - make sure properties exists before using it - - poppler/TextOutputDev.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit eab7a55815c06525c7aeba254b66498ab147a958 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Feb 17 21:54:31 2010 +0000 - - if malloc failed return false - - splash/SplashFTFont.cc | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit e2def20a45c1d8307fd62fabb9769121af975abf -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Feb 16 23:31:05 2010 +0000 - - Only assume the OC is not visible if it exists and is set to no - - Fixes bug 26532 and a small line that was not drawn in 15899 - - poppler/OptionalContent.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 5edd175bdd0f7c2fc3aecb72384de4cb0788fc4e -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Feb 16 20:57:22 2010 +0000 - - Add and fix copyright years - - poppler/CairoOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0f0fba1b04589061449f98b9dcd8a0c4e7ad2d74 -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 16 22:00:51 2010 +0100 - - make the descriptions specify they refer to the Splash backend - - config.h.cmake | 4 ++-- - configure.ac | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - -commit 39b4699020b5cfa1a10e5ef00f0e355e27b21c9f -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 16 21:56:30 2010 +0100 - - [CMake] reflect that poppler-glib needs cairo now - - poppler-glib.pc.cmake | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 5c66c775bcd686c61ea136bcd8f261fb631c5e71 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Feb 16 20:52:15 2010 +0000 - - We don't need to pass anything to FontConfig - - Makes it much easier to manage and also fixes bug 26544 - - poppler/GlobalParams.cc | 11 +++-------- - poppler/GlobalParams.h | 6 +----- - 2 files changed, 4 insertions(+), 13 deletions(-) - -commit 582b5259b3c65ee1bef99dbdfccf00f37269b76f -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 16 16:36:24 2010 +0100 - - [CMake] find the system threads, and define in the config.h if we - have pthreads - - CMakeLists.txt | 4 ++++ - config.h.cmake | 3 +++ - 2 files changed, 7 insertions(+), 0 deletions(-) - -commit 1dff9d440556a155fb5ca7bed15fc6a1f77a1c97 -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 16 16:10:44 2010 +0100 - - [CMake] add the HAVE_LIBOPENJPEG and HAVE_OPENJPEG_H defines, to - match autotools' ones - - CMakeLists.txt | 1 + - config.h.cmake | 6 ++++++ - 2 files changed, 7 insertions(+), 0 deletions(-) - -commit 4a0bcaa83e6e6533cd48c63449a08467d51c13ea -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 16 16:01:53 2010 +0100 - - [CMake] config.h.cmake: change some comments to match autotools' ones - - config.h.cmake | 10 ++++++---- - 1 files changed, 6 insertions(+), 4 deletions(-) - -commit 9e38082c3e571d035f0152d65661e5dd97fdd5d8 -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 16 15:58:30 2010 +0100 - - [CMake] add the Win32-specific ENABLE_RELOCATABLE option, matching - autotools' one - - CMakeLists.txt | 5 +++++ - config.h.cmake | 3 +++ - 2 files changed, 8 insertions(+), 0 deletions(-) - -commit eb03020893ed591c18817d75d427a1296cb1f233 -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 16 15:49:50 2010 +0100 - - [CMake] config.h.cmake: move POPPLER_WITH_GDK in the same place of - autotools' generated one, and with the same comment - - config.h.cmake | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit ba65b3af047b758094b999b2939065c5127508dd -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Feb 10 23:08:04 2010 +0000 - - Wrap #include <jpeglib.h> in extern "C" to fix build - - Fixes bug 26351 - - goo/JpegWriter.h | 6 +++++- - 1 files changed, 5 insertions(+), 1 deletions(-) - -commit d3d2a3ee0a3505f44d1196823716b768d434ba73 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 10 23:16:27 2010 +0100 - - [CMake] fix typo: "MULTITHREAD" -> "MULTITHREADED" - - CMakeLists.txt | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0dae2294cf8a2f312d8e6504be4e1be516b34b1b -Author: Thomas Freitag <Thomas.Freitag@alfa.de> -Date: Tue Feb 9 21:44:07 2010 +0000 - - Fix regression in painting. Fixes bug 26243 - - poppler/Gfx.cc | 9 ++++++++- - 1 files changed, 8 insertions(+), 1 deletions(-) - -commit aa9c3acbc73bafb33c8a797701ed0488a4a74263 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jan 28 17:23:18 2010 +0100 - - [cairo] Add clipToStrokePath() method - - It's unimplemented, it just contains a log message to help when - debugging. - - poppler/CairoOutputDev.cc | 4 ++++ - poppler/CairoOutputDev.h | 1 + - 2 files changed, 5 insertions(+), 0 deletions(-) - -commit 41a450c8db45fd064798d15c3d8fe5ab536a7b30 -Author: David Benjamin <davidben@mit.edu> -Date: Fri Jan 22 00:26:59 2010 -0500 - - [cairo] Avoid leaving pointers to free'd memory - - Fixes potential free'd memory access introduced by - 3a94e8ce90c0a4d11c5c5aa8805c167c8a0434e5. I don't think this is - actually - possible in the current code; we push/pop before and after rendering a - PDF, so the bottom state should never have a mask. - - Still, better to clean this up. - - poppler/CairoOutputDev.cc | 5 ++--- - 1 files changed, 2 insertions(+), 3 deletions(-) - -commit 309228404710debee4337cc53c641dfef64ad86c -Author: David Benjamin <davidben@mit.edu> -Date: Wed Jan 27 22:41:16 2010 +0000 - - Allow commands to abort the current stream - - In many instances, the sensible response (and what acroread does) in - case of an error is abort the PDF stream. To avoid changing the return - value of every function and using C++ exceptions, we communicate via a - commandAborted variable. - - This patch, matching acroread's behavior aborts the current stream - when - there are too few arguments or we pop too many times. Implementation - note 39 in Appendix H of the PDF reference contradicts the former, but - hand-crafted test PDFs as well as the file in #24575 suggest - otherwise. - - Unlike all the other attempts, this patch actually fixes the PDF in - bug #24575. - - poppler/Gfx.cc | 11 +++++++++++ - poppler/Gfx.h | 1 + - 2 files changed, 12 insertions(+), 0 deletions(-) - -commit 8284008aa8230a92ba08d547864353d3290e9bf9 -Author: David Benjamin <davidben@mit.edu> -Date: Wed Jan 27 22:40:33 2010 +0000 - - Add a stack of stateGuards to Gfx - - While a stack of states is a good way to maintain graphics contexts, - if - the command stream you are interpreting is untrusted, we must place - appropriate guards to be sure that, not only do we not pop past - the end - of the stack, but we do not pop past the stack as it was when we began - rendering. - - poppler/Gfx.cc | 30 +++++++++++++++++++++++++++++- - poppler/Gfx.h | 11 +++++++++++ - 2 files changed, 40 insertions(+), 1 deletions(-) - -commit 4ae84c830f842d100cbb702b32970951a5a5769f -Author: David Benjamin <davidben@mit.edu> -Date: Wed Jan 27 22:39:20 2010 +0000 - - Maintain the height of the stack in Gfx - - Introduces a new variable Gfx::stackHeight that maintains up-to-date - information about the current height of the stack. - - poppler/Gfx.cc | 4 ++++ - poppler/Gfx.h | 1 + - 2 files changed, 5 insertions(+), 0 deletions(-) - -commit 120fe6ef673c648ae7b19ad2a7e9aef22ee25810 -Author: David Benjamin <davidben@mit.edu> -Date: Wed Jan 27 22:38:43 2010 +0000 - - Do not use objects just after deleting them - - The error condition in GfxCIDFont::GfxCIDFont references cMapName and - collection, so they should not be deleted yet. - - poppler/GfxFont.cc | 8 +++++--- - 1 files changed, 5 insertions(+), 3 deletions(-) - -commit 3375fa96c7a7dbbb98f5a7b3df9e840a5f30bc80 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 27 22:32:29 2010 +0000 - - GooVector rewrite, old version had "unknown" origins/license - - goo/GooVector.h | 237 - +++++++++++++++++++++++++++++++++---------------------- - 1 files changed, 141 insertions(+), 96 deletions(-) - -commit a945fe64e16ac9aa2577c5db05fc7f3fd4955b7b -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jan 27 16:15:40 2010 +0100 - - [cairo] Fix downscaling images when document is rotated - - Fixes bug #26264. - - poppler/CairoOutputDev.cc | 37 +++++++++++++++++++++++++++++++++++-- - 1 files changed, 35 insertions(+), 2 deletions(-) - -commit 428cc965c17f167ea00540beeaeaac5c3e426686 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jan 26 21:01:32 2010 +0000 - - Add POPPLER_WITH_GDK in cmake build system - - Bug 26247 - - glib/CMakeLists.txt | 1 + - glib/poppler-features.h.cmake | 1 + - 2 files changed, 2 insertions(+), 0 deletions(-) - -commit 0af1ae75fd4c8031343f668bed5d8ca6588ee652 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jan 26 20:49:17 2010 +0100 - - [cairo] Use the right matrix for the mask in drawMaskedImage() - - Fixes bug #16906. - - poppler/CairoOutputDev.cc | 7 +++++-- - 1 files changed, 5 insertions(+), 2 deletions(-) - -commit d8ceaff39f5b80624b6bdc703c2a180dfc3d73ee -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jan 26 11:57:06 2010 +0100 - - [cairo] Add some more LOG messages - - poppler/CairoOutputDev.cc | 18 +++++++++++++++--- - 1 files changed, 15 insertions(+), 3 deletions(-) - -commit 778e764b3cb77526260c3c8b46acf19ad06fc61d -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jan 25 22:40:20 2010 +0000 - - poppler 0.13.0 - - CMakeLists.txt | 4 +- - NEWS | 99 - +++++++++++++++++++++++++++++++++++++++++++++++++++ - configure.ac | 2 +- - poppler/Makefile.am | 2 +- - qt4/src/Doxyfile | 2 +- - 5 files changed, 104 insertions(+), 5 deletions(-) - -commit 1b5333f2685b8ab85bb1f5b899332c5a0ac99a3d -Author: Pino Toscano <pino@kde.org> -Date: Mon Jan 25 02:19:00 2010 +0100 - - [CMake] allow multiple targets with the same name - - this is needed for building the unit tests later without explicitly - having - enabling them at configure time (thus compile them on-demand) - for this, set the cmake policy 0003 as OLD (allow), and consecuently - 0011 for - setting the former from an include()d script - - cmake/modules/PopplerDefaults.cmake | 7 +++++++ - 1 files changed, 7 insertions(+), 0 deletions(-) - -commit 92e1f46866c063c370ef1d6324f6a6c01aed6680 -Author: Pino Toscano <pino@kde.org> -Date: Mon Jan 25 02:15:27 2010 +0100 - - [CMake] do not add the fake buildtests target for the MSVC IDE - - cmake/modules/PopplerMacros.cmake | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit dea5aa37de079196fa916b1db9af782cf25045f9 -Author: Maciej Mrozowski <reavertm@gmail.com> -Date: Mon Jan 25 00:51:20 2010 +0000 - - Install some more goo files - - CMakeLists.txt | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -commit 671a971c45a1e8ce8f6daade82117a9a137034d6 -Author: Maciej Mrozowski <reavertm@gmail.com> -Date: Mon Jan 25 00:48:31 2010 +0000 - - do not install a private header - - qt4/src/Makefile.am | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 54c86e53a143a8f9d196e4bef2a733c6f00f6026 -Author: Maciej Mrozowski <reavertm@gmail.com> -Date: Mon Jan 25 00:33:07 2010 +0000 - - Only build tests if told to - - test/CMakeLists.txt | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit eb082274694aadb80dd16caea65d7f0a1adf8b46 -Author: Maciej Mrozowski <reavertm@gmail.com> -Date: Mon Jan 25 00:29:55 2010 +0000 - - Only build demos and test if told so. Install poppler-layer.h - - glib/CMakeLists.txt | 9 +++++---- - 1 files changed, 5 insertions(+), 4 deletions(-) - -commit 73fcc310cd7d6ef435b453485c1c99a33f77212a -Author: Maciej Mrozowski <reavertm@gmail.com> -Date: Mon Jan 25 00:29:09 2010 +0000 - - install man pages - - utils/CMakeLists.txt | 7 +++++++ - 1 files changed, 7 insertions(+), 0 deletions(-) - -commit 8672217af4cf88d5506572c2b40fbb0d1d0dbd87 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jan 25 00:11:50 2010 +0000 - - Make the poppler object cache params be a ref - - And make sure what we was is a ref, otherwise we abort - - poppler/Gfx.cc | 14 ++++++++------ - poppler/PopplerCache.cc | 12 ++++++------ - poppler/PopplerCache.h | 6 +++--- - 3 files changed, 17 insertions(+), 15 deletions(-) - -commit 9567fd8d3d905897d0abacd77885102ae86ba8a9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 24 20:15:49 2010 +0000 - - ImgWriter is a header too - - goo/Makefile.am | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 735e8a690d0bd3ab4bec90bdad975d19ac3d4689 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 24 19:51:19 2010 +0000 - - noone maintains this either - - msvc/config.h | 62 --------------------------------- - msvc/poppler/poppler-config.h | 77 - ----------------------------------------- - 2 files changed, 0 insertions(+), 139 deletions(-) - -commit d485564f0dc86f62b996380bfbd570cf3f543e4f -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 24 19:22:33 2010 +0000 - - remove files noone maintains - - README.windows | 63 ----------------------- - makefile.vc | 150 - -------------------------------------------------------- - 2 files changed, 0 insertions(+), 213 deletions(-) - -commit 38467f2738c88f060ae1d30332e34da743a888a5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 24 19:18:44 2010 +0000 - - only compile glib frontend if cairo is found - - CMakeLists.txt | 4 ++-- - glib/CMakeLists.txt | 25 +++++++------------------ - 2 files changed, 9 insertions(+), 20 deletions(-) - -commit cf045acf46307d51fb6d9959451b53681e6cac03 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 24 19:01:52 2010 +0000 - - compile - - glib/CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 0397cf4f193015286464ae70ab202ed400110e30 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 24 19:00:09 2010 +0000 - - Add and fix copyright years - - poppler/CairoFontEngine.cc | 1 + - poppler/CairoOutputDev.cc | 2 +- - poppler/CairoOutputDev.h | 2 +- - poppler/Gfx.cc | 2 +- - poppler/Gfx.h | 2 +- - poppler/PopplerCache.cc | 1 + - poppler/PopplerCache.h | 1 + - 7 files changed, 7 insertions(+), 4 deletions(-) - -commit 9c9f18b6ceea546dfb21ef0aab29ba99733dcb52 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jan 24 19:27:29 2010 +0100 - - [glib-demo] Remove #ifdef HAVE_CAIRO macros from several demos - - glib/demo/images.c | 2 - - glib/demo/layers.c | 71 - +++------------------------------------------------- - glib/demo/render.c | 29 +++----------------- - 3 files changed, 9 insertions(+), 93 deletions(-) - -commit 4e938c1f81add2162ced0e97b24fe588f15f178d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jan 24 19:15:06 2010 +0100 - - [glib] Make glib frontend unconditionally use cairo output device - - Splash support has been removed. - - configure.ac | 74 ++++++++------- - glib/Makefile.am | 20 +--- - glib/poppler-document.cc | 9 -- - glib/poppler-page.cc | 237 - +-------------------------------------------- - glib/poppler-page.h | 7 -- - glib/poppler-private.h | 14 --- - glib/poppler.cc | 6 - - glib/test-poppler-glib.cc | 6 +- - poppler-glib.pc.in | 2 +- - 9 files changed, 51 insertions(+), 324 deletions(-) - -commit 59ff9d66fc3b0c9612b1c12fc1ae4dbb8dc85b39 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jan 24 17:57:48 2010 +0100 - - Use a small object cache in GfxResources to cache GState objects - - It drastically improves performance with some documents like page - 742 of - PDF32000_2008.pdf - - poppler/Gfx.cc | 19 +++++++++++++++++-- - poppler/Gfx.h | 2 ++ - 2 files changed, 19 insertions(+), 2 deletions(-) - -commit 880a4a9a60a10f7aa7d3dc7c2802b31b7ef01e06 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jan 24 17:56:35 2010 +0100 - - Add a generic cache to store objects by its reference - - poppler/PopplerCache.cc | 60 - +++++++++++++++++++++++++++++++++++++++++++++++ - poppler/PopplerCache.h | 16 ++++++++++++ - 2 files changed, 76 insertions(+), 0 deletions(-) - -commit 5ad492df75c0c2394719e85db4c8b43f15b52110 -Author: mpsuzuki <mpsuzuki@hiroshima-u.ac.jp> -Date: Sun Jan 24 13:34:41 2010 +0100 - - [cairo] Fix memory leak - - poppler/CairoFontEngine.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 3160464b4b70c714c36234320878acab81b866cc -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Nov 26 13:17:19 2009 +0100 - - [cairo] Use our own implementation to scale down images instead - of cairo - - This is a workaround for the low quality downscaling of pixman. - Rescaler implementation is a box filter that supports non-integer box - sizes written by Jeff Muizelaar. - Fixes bug #5589. - - poppler/CairoOutputDev.cc | 89 +++++++++++ - poppler/CairoOutputDev.h | 1 + - poppler/CairoRescaleBox.cc | 352 - ++++++++++++++++++++++++++++++++++++++++++++ - poppler/CairoRescaleBox.h | 12 ++ - poppler/Makefile.am | 4 +- - 5 files changed, 457 insertions(+), 1 deletions(-) - -commit 6825a219f0bc0ac6fd469fb8a6ebb86df774375f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jan 23 11:24:15 2010 +0100 - - [glib] Use TextOutputDev to get TextPage when we haven't rendered - the page - - glib/poppler-page.cc | 27 ++++++++++++++++++--------- - 1 files changed, 18 insertions(+), 9 deletions(-) - -commit 6c61a457e9a8ec10945bc1e0700c8e4d121faa58 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 20 21:59:05 2010 +0000 - - Fix GfxRadialShading::GfxRadialShading - - Fixes crash in KDE bug 223359 - - poppler/GfxState.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 442894d371879a6bf2adb5a39b9dd0a49e76e4ac -Author: Pino Toscano <pino@kde.org> -Date: Fri Jan 15 21:28:42 2010 +0100 - - [glib-demo/cmake] compile print.c - - followup of b64d4bd46b052feb0b143f1348773afbd93e5e33 - - glib/demo/CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit b64d4bd46b052feb0b143f1348773afbd93e5e33 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Nov 27 11:47:22 2009 +0100 - - [glib-demo] Add print demo - - glib/demo/Makefile.am | 2 + - glib/demo/main.c | 4 +- - glib/demo/print.c | 135 - +++++++++++++++++++++++++++++++++++++++++++++++++ - glib/demo/print.h | 31 +++++++++++ - 4 files changed, 171 insertions(+), 1 deletions(-) - -commit ba2c746f358a5785d8cbaaf03d8628ee3754c388 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Nov 27 09:52:50 2009 +0100 - - [glib-demo] Add render for printing option to render demo - - glib/demo/render.c | 47 ++++++++++++++++++++++++++++++++++++++--------- - 1 files changed, 38 insertions(+), 9 deletions(-) - -commit 9a478008ccb61641f09bd77eaa55033cca266c43 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jan 15 12:03:11 2010 +0100 - - Add FONTCONFIGURATION macros to poppler-config.h - - They are used in a header file (GlobalParams.h). It fixes a crash - when opening any document. - - poppler/poppler-config.h.in | 10 ++++++++++ - 1 files changed, 10 insertions(+), 0 deletions(-) - -commit 1f80f874d8e132411816302465f04bc59d404d89 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jan 14 08:43:11 2010 +0000 - - Fix Uncover and Fade to return correct values - - Bug 26034 - - poppler/PageTransition.cc | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit 350ff407e06a961f2a5b9d203cb8e78ce09313a0 -Author: Hib Eris <hib@hiberis.nl> -Date: Wed Jan 13 22:20:41 2010 +0000 - - Make poppler (optionally) relocatable on Windows - - configure.ac | 26 +++++++++++++++++++++ - poppler/GlobalParams.cc | 57 - +++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 83 insertions(+), 0 deletions(-) - -commit 36b67b002db802bfad553720e2114b76b07bb614 -Author: Hib Eris <hib@hiberis.nl> -Date: Wed Jan 13 22:17:03 2010 +0000 - - Make fontconfig optional with mingw compiler - - CMakeLists.txt | 8 +++++++- - config.h.cmake | 6 ++++++ - configure.ac | 39 ++++++++++++++++++++++++++++++++++++++- - makefile.vc | 2 +- - poppler/GlobalParams.cc | 10 +++++++--- - poppler/GlobalParams.h | 7 ++++--- - poppler/GlobalParamsWin.cc | 5 +++++ - 7 files changed, 68 insertions(+), 9 deletions(-) - -commit 9c0b20ab8c104c2f5398a5a3b8409ca554f5fa39 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jan 12 22:55:06 2010 +0000 - - Add the possibility of using float for splash variables instead - of double - - Based on a patch by Marius Vollmer marius.vollmer@nokia.com - See bug 25578 for more info - - CMakeLists.txt | 7 ++++++- - config.h.cmake | 5 ++++- - configure.ac | 10 +++++++++- - splash/SplashMath.h | 14 ++++++++++++-- - splash/SplashTypes.h | 4 +++- - 5 files changed, 34 insertions(+), 6 deletions(-) - -commit 30e5f76e372114339fa1d37c335e6bbade8b6d8a -Author: Pino Toscano <pino@kde.org> -Date: Thu Jan 7 11:18:36 2010 +0100 - - [CMake] followup recent glib/gtk+ version requirements - - - glib to 2.18, see ce9404b1999f81b3f9e5a89bcd6e715463f89024 - - gtk+ to 2.14, see e338643f2cebb1203f7ff0646f87b3dea8318757 - - cmake/modules/FindGTK.cmake | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit e338643f2cebb1203f7ff0646f87b3dea8318757 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jan 7 11:08:31 2010 +0100 - - [tests] Bump GTK+ requirements to 2.14 - - Fixes bug #22090. - - configure.ac | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit ce9404b1999f81b3f9e5a89bcd6e715463f89024 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jan 7 11:06:19 2010 +0100 - - Bump glib requirements to 2.18 - - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 526c8871cbdfbc119e013ee96887a79f65403790 -Author: Hib Eris <hib@hiberis.nl> -Date: Thu Dec 31 17:52:33 2009 +0100 - - [glib] Use PDFDoc(wchar_t *, ...) on Windows - - Fixes bug #25032 - - glib/poppler-document.cc | 22 +++++++++++++++++++--- - 1 files changed, 19 insertions(+), 3 deletions(-) - -commit e0c8188136958b853269179079efefdd3488dc22 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jan 4 18:36:01 2010 +0000 - - Require Qt 4.4 - - This updates the requirement to real requirement - - CMakeLists.txt | 2 +- - configure.ac | 8 ++++---- - 2 files changed, 5 insertions(+), 5 deletions(-) - -commit f9accdb878b23ebd2152dd05d61cfcc71d46cd03 -Author: Pino Toscano <pino@kde.org> -Date: Mon Jan 4 14:13:13 2010 +0100 - - [Qt4/tests] use getPdfVersion() instead of the deprecated pdfVersion() - - qt4/tests/stress-poppler-dir.cpp | 3 ++- - qt4/tests/stress-poppler-qt4.cpp | 3 ++- - qt4/tests/test-password-qt4.cpp | 4 +++- - qt4/tests/test-poppler-qt4.cpp | 4 +++- - 4 files changed, 10 insertions(+), 4 deletions(-) - -commit 898e939d8c0ac74cc7ee3f5d42d83083ed31036e -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sat Jan 2 02:33:58 2010 +0100 - - Make pdftoppm embed correct resolution in PNG and JPEG files - - goo/ImgWriter.h | 3 ++- - goo/JpegWriter.cc | 6 +++++- - goo/JpegWriter.h | 3 ++- - goo/PNGWriter.cc | 6 +++++- - goo/PNGWriter.h | 3 ++- - splash/SplashBitmap.cc | 9 +++++---- - splash/SplashBitmap.h | 5 +++-- - utils/HtmlOutputDev.cc | 4 +++- - utils/pdftoppm.cc | 9 +++++---- - 9 files changed, 32 insertions(+), 16 deletions(-) - -commit df569dc2fb89d7e0780bbf7a687ce2464ff5cb43 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sat Jan 2 01:19:50 2010 +0100 - - enable AM_SILENT_RULES by default - - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit f3862f7d987aae52a1fd2bb0af27d1cd803a5b84 -Author: Pino Toscano <pino@kde.org> -Date: Thu Dec 31 00:20:11 2009 +0100 - - [cpp/tests] poppler-dump: show a string for the font type - - cpp/tests/poppler-dump.cpp | 23 ++++++++++++++++++++++- - 1 files changed, 22 insertions(+), 1 deletions(-) - -commit 9c343c821593ebae51ac47b58ad007a82f198652 -Author: Pino Toscano <pino@kde.org> -Date: Thu Dec 31 00:13:09 2009 +0100 - - [cpp/tests] poppler-dump: show the orientation of the pages - - cpp/tests/poppler-dump.cpp | 16 ++++++++++++++++ - 1 files changed, 16 insertions(+), 0 deletions(-) - -commit bc91fe3824f37cd17a38aac85c817e8ada1b2f43 -Author: Pino Toscano <pino@kde.org> -Date: Wed Dec 30 23:53:31 2009 +0100 - - [cpp/tests] poppler-dump: a bit less output in permissions lines - - cpp/tests/poppler-dump.cpp | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 1199de8f097a78edb831313841ac0ed3f9ec9905 -Author: Pino Toscano <pino@kde.org> -Date: Wed Dec 30 23:50:36 2009 +0100 - - [cpp/tests] poppler-dump: add --show-all to show all the information - - cpp/tests/poppler-dump.cpp | 13 +++++++++++++ - 1 files changed, 13 insertions(+), 0 deletions(-) - -commit 9522f830b59942adfc91d5f03c274415a4737ccc -Author: Pino Toscano <pino@kde.org> -Date: Wed Dec 30 23:38:40 2009 +0100 - - [cpp] use iconv for the utf8 <-> utf16 conversions - - cpp/poppler-global.cpp | 92 - +++++++++++++++++++++++++++++++++-------------- - 1 files changed, 64 insertions(+), 28 deletions(-) - -commit b156b4031f5daf658f40db8efa2a3016d95b98b5 -Author: Pino Toscano <pino@kde.org> -Date: Wed Dec 30 23:24:23 2009 +0100 - - [cpp] add the build system stuff for iconv, mandatory for cpp - - CMakeLists.txt | 6 ++ - Makefile.am | 1 + - cmake/modules/FindIconv.cmake | 57 +++++++++++++ - config.h.cmake | 6 ++ - configure.ac | 6 ++ - cpp/CMakeLists.txt | 2 +- - cpp/Makefile.am | 3 +- - m4/iconv.m4 | 180 - +++++++++++++++++++++++++++++++++++++++++ - 8 files changed, 259 insertions(+), 2 deletions(-) - -commit a0cffb8b69e0595a2afe15ecc4928e0df1eeb063 -Author: Pino Toscano <pino@kde.org> -Date: Wed Dec 30 18:57:09 2009 +0100 - - [cpp] fixup unicode GooString <-> ustring conversions - - better make them use the "hand-made" code, it is more correct for them - - cpp/poppler-private.cpp | 44 - +++++++++++++++++++++++++++++++++++++++++--- - 1 files changed, 41 insertions(+), 3 deletions(-) - -commit 3b6e3605209d5db453725b9ce4e6e54679d9c5da -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 27 15:30:22 2009 +0100 - - Do not crop the transformation matrix at an arbitrary value - - Fixes bug 25763 and gave no regression on my test suite - - poppler/GfxState.cc | 21 --------------------- - poppler/SplashOutputDev.cc | 15 +++++++++++++++ - 2 files changed, 15 insertions(+), 21 deletions(-) - -commit ea44c60645001ffea7d297f8549aaa4f5ce5e16c -Author: Ilya Gorenbein <igorenbein@finjan.com> -Date: Sun Dec 27 15:27:00 2009 +0100 - - Try to work on streams without Length - - We have code that finds the Length if it's wrong so let that code - do its job - instead of returning a NULL stream - - poppler/Parser.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 283dd326a00c804b6332ee3ca1aaa0d86377b3f3 -Author: Pino Toscano <pino@kde.org> -Date: Sat Dec 19 12:50:10 2009 +0100 - - [cpp] fix installation of poppler-version.h with autotools and - builddir != srcdir - - cpp/Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit df0ccddb7f784b4a8564beda51b3047cb9e3611a -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 18 20:23:48 2009 +0000 - - move the retrieval of the bitmap after rendering the page as it can - change on render time - - utils/pdftoppm.cc | 6 ++++-- - 1 files changed, 4 insertions(+), 2 deletions(-) - -commit ab88a02f7efefc950a316d7a5edf88dad8f3e4d0 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Dec 17 18:24:20 2009 +0100 - - [annots] QuadPoints is required in Text Markup annotations - - Show an error message and mark annotation as invalid when it's - missing. - - poppler/Annot.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 39dc99431b3ea9e00f6f645dd7169c0319571dc9 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Dec 17 18:17:20 2009 +0100 - - [annots] Create appearance stream for Sound Annotations when not - defined - - See bug #23108. - - poppler/Annot.cc | 112 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Annot.h | 2 + - 2 files changed, 114 insertions(+), 0 deletions(-) - -commit e4f5a78a853b88b1586ef59fc8893a321ea23736 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Dec 17 17:39:39 2009 +0100 - - [annots] Add Tag and Graph icons for File Attachment annotations - - See bug #23108. - - poppler/Annot.cc | 70 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 70 insertions(+), 0 deletions(-) - -commit 752b14857cfb0669fd6d7dfef2ea73c13a2369fc -Author: Pino Toscano <pino@kde.org> -Date: Thu Dec 17 17:16:01 2009 +0100 - - simplify - - cpp/poppler-toc.cpp | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit a26e4b7903fabc667d7d16c23ca2c7a535dd05fa -Author: Pino Toscano <pino@kde.org> -Date: Thu Dec 17 17:09:35 2009 +0100 - - [cpp/tests] add a simple poppler-dump test - - this small test executable can dump various features of the document, - like the general info, permissions, metadata, toc, fonts, - embedded files, pages, etc - - also add the necessary autotools+cmake machinery to compile it - - configure.ac | 1 + - cpp/CMakeLists.txt | 2 + - cpp/Makefile.am | 1 + - cpp/tests/.gitignore | 1 + - cpp/tests/CMakeLists.txt | 24 ++++ - cpp/tests/Makefile.am | 17 +++ - cpp/tests/poppler-dump.cpp | 293 - ++++++++++++++++++++++++++++++++++++++++++++ - 7 files changed, 339 insertions(+), 0 deletions(-) - -commit 86c871cc625d00b8ee7f93dc8c0f9ef8462bba5a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Dec 17 17:05:45 2009 +0100 - - [annots] Create appearance stream for Text Markup Annotations when - not defined - - Highlight annotations are an exception, we always ignore the - appearance stream to use our own, since for most of the documents the - appearance stream provided by the annotation is not enough. That's why - it's currently broken. This is what acroread does indeed and Leonard - Rosenthol recommended us to do the same. - See bug #23108. - - poppler/Annot.cc | 199 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Annot.h | 2 + - 2 files changed, 201 insertions(+), 0 deletions(-) - -commit 904ecd929c6acbbad6d782b950c53c0a80e1f39c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Dec 17 12:49:20 2009 +0100 - - [annots] Fix memory leaks - - poppler/Annot.cc | 6 +++++- - 1 files changed, 5 insertions(+), 1 deletions(-) - -commit ef7954b86f9b1a762c4f77a48d5f42f8db4bbed7 -Author: Pino Toscano <pino@kde.org> -Date: Tue Dec 15 02:20:18 2009 +0100 - - [cpp] use the correct index (instead of an uninitialized variable) - - cpp/poppler-page.cpp | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 2547b5e53e7799cf7299838ae9bd882c21a228ae -Author: Pino Toscano <pino@kde.org> -Date: Tue Dec 15 02:14:57 2009 +0100 - - [cpp] properly delete the children of a toc item - - cpp/poppler-toc.cpp | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 771bd3594740fe16bd030dbe73928a8b1d4d113f -Author: Pino Toscano <pino@kde.org> -Date: Tue Dec 15 02:04:24 2009 +0100 - - [cpp] actually implement toc::root() - - cpp/poppler-toc.cpp | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit ca1d2ec4588b2437b58b4448ae2fc5ebd0f130d3 -Author: Pino Toscano <pino@kde.org> -Date: Tue Dec 15 00:54:29 2009 +0100 - - [cpp] fix the reference to the vector data - - cpp/poppler-global.cpp | 2 +- - cpp/poppler-private.cpp | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 16c946e7658b0e9cff701ce1d6bbf7d3828cbe08 -Author: Pino Toscano <pino@kde.org> -Date: Tue Dec 15 00:35:25 2009 +0100 - - [cpp] fix the reference to the vector data - - cpp/poppler-document.cpp | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 9bb90c99b65e0e9d9b65c7dbeb5b4d66377ceb21 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 23:43:12 2009 +0100 - - [cpp] add destructor for 'rectangle' - - cpp/poppler-rectangle.h | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 61ccdc9ab3b816174896fcae0899ff34f11eee80 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 23:40:51 2009 +0100 - - [cpp] add out stream operators for rect and rectf - - cpp/CMakeLists.txt | 1 + - cpp/Makefile.am | 1 + - cpp/poppler-rectangle.cpp | 35 +++++++++++++++++++++++++++++++++++ - cpp/poppler-rectangle.h | 5 +++++ - 4 files changed, 42 insertions(+), 0 deletions(-) - -commit 69dd51fed3de41f8b799b811ae5ee59c0d5f59c2 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 22:24:07 2009 +0100 - - [cpp] add namespace to namespace functiond to link properly - - cpp/poppler-global.cpp | 4 ++-- - cpp/poppler-version.cpp | 8 ++++---- - 2 files changed, 6 insertions(+), 6 deletions(-) - -commit 3923fa4890984d8616d86016f4f4a94e8ef3e992 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 22:23:15 2009 +0100 - - [cpp] add default empty parameters for the passwords of the document - loading functions - - cpp/poppler-document.h | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit 1d23cc677e9b0a9f61c53e0ea365537f33abe5bf -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 21:44:56 2009 +0100 - - [cpp] add "human friendly" output representation for byte_array - - cpp/poppler-global.cpp | 23 +++++++++++++++++++++++ - cpp/poppler-global.h | 3 +++ - 2 files changed, 26 insertions(+), 0 deletions(-) - -commit 82954ea5f8ba880276328765f104690a05adbd9e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Dec 7 12:05:54 2009 +0100 - - [annot] Create appearance stream for Attachment Annotations when - not defined - - See bug #23108. - - poppler/Annot.cc | 94 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Annot.h | 2 + - 2 files changed, 96 insertions(+), 0 deletions(-) - -commit c6195472326c183fcfd8a3e9da1ee7f6fa8b7c3d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Dec 6 17:09:23 2009 +0100 - - [annots] Use opacity when drawing Markup Annotations - - According to the spec: - - "The constant opacity value that shall be used in painting the - annotation. This value shall apply to all visible elements of the - annotation in its closed state (including its background and border) - but - not to the pop-up window that appears when the annotation is opened. - - The specified value shall not used if the annotation has an appearance - stream in that case, the appearance stream shall specify any - transparency. - - If no explicit appearance stream is defined for the annotation, it may - be painted by implementation-dependent means that do not necessarily - conform to the PDF imaging model; in this case, the effect of - this entry - is implementation-dependent as well." - - poppler/Annot.cc | 21 +++++++++++++++------ - poppler/Gfx.cc | 9 ++++++++- - poppler/Gfx.h | 2 +- - 3 files changed, 24 insertions(+), 8 deletions(-) - -commit a337c1d757d52c1c238229d2f0cd3a41694b0e08 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 16:18:22 2009 +0100 - - [cpp] add document metadata reading - - cpp/poppler-document.cpp | 9 +++++++++ - cpp/poppler-document.h | 1 + - 2 files changed, 10 insertions(+), 0 deletions(-) - -commit 6c4fa513e60dbdd5ab693434f239d82d95756994 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Dec 6 16:56:22 2009 +0100 - - [annot] Create appearance stream for Geometry Annotations when - not defined - - See bug #23108. - - poppler/Annot.cc | 120 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Annot.h | 2 + - 2 files changed, 122 insertions(+), 0 deletions(-) - -commit eed94b8bd2855dce1fd39b835e3280cbd0ccd1cf -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Dec 6 16:51:37 2009 +0100 - - [annot] Create appearance stream for Line Annotations when not defined - - See bug #23108. - - poppler/Annot.cc | 62 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Annot.h | 2 + - 2 files changed, 64 insertions(+), 0 deletions(-) - -commit 1c7a5f5e89c4c51e31b6de345d4862ef8dcc2bc0 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Dec 6 16:40:14 2009 +0100 - - [annot] Create appearance stream for Text Annotations when not defined - - Streams have been created by using the svg icons created by mac_v and - ulisse. See bug #23108. - - poppler/Annot.cc | 305 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Annot.h | 2 + - 2 files changed, 307 insertions(+), 0 deletions(-) - -commit c9cb6353ad5279d09615eb2c944b2b053cdf5ccc -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 15:52:25 2009 +0100 - - [cpp] add function to query for document "permissions" - - cpp/poppler-document.cpp | 23 +++++++++++++++++++++++ - cpp/poppler-document.h | 1 + - cpp/poppler-global.h | 4 ++++ - 3 files changed, 28 insertions(+), 0 deletions(-) - -commit 30e90c7c1b41c62ddc21905e7ccdea4c95547e80 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 15:33:36 2009 +0100 - - [cpp] add is_encrypted and is_linearized for document - - cpp/poppler-document.cpp | 10 ++++++++++ - cpp/poppler-document.h | 2 ++ - 2 files changed, 12 insertions(+), 0 deletions(-) - -commit 93fd588c519958a1f66231c111ea8a6b0a759be1 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 13:19:24 2009 +0100 - - [cpp] add the possibility to load a document from raw data - - cpp/poppler-document-private.h | 5 +++++ - cpp/poppler-document.cpp | 35 ++++++++++++++++++++++++++++++++++- - cpp/poppler-document.h | 3 +++ - 3 files changed, 42 insertions(+), 1 deletions(-) - -commit 53996365b159cf84adf2cac56c76b8bda8dfb12e -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 12:57:41 2009 +0100 - - [cpp] use the byte_array typedef - - cpp/poppler-embedded-file.cpp | 6 +++--- - cpp/poppler-embedded-file.h | 2 +- - 2 files changed, 4 insertions(+), 4 deletions(-) - -commit e4969c1aaed4a8eb770d8b54920f2476129bbcb7 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Dec 6 16:19:36 2009 +0100 - - [annots] Refactor Annot::setColor to receive an AnnotColor - - Removes duplicated code since color arrays are already parsed in - AnnotColor - - poppler/Annot.cc | 136 - ++++++++++++++++++++++++++++-------------------------- - poppler/Annot.h | 4 +- - 2 files changed, 73 insertions(+), 67 deletions(-) - -commit cfb4f5dfabf31de22d68aa0d5796cb7a33d8b462 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 11:06:36 2009 +0100 - - [cpp] add a byte_array typedef, and use it for utf8 string data - - cpp/poppler-global.cpp | 12 +++--------- - cpp/poppler-global.h | 5 ++++- - cpp/poppler-private.cpp | 5 ++--- - 3 files changed, 9 insertions(+), 13 deletions(-) - -commit 2d13ac31671b2007e44a90f45a82cb3adfa9c80c -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 02:30:06 2009 +0100 - - update ignore files - - .gitignore | 1 + - cpp/.gitignore | 1 + - 2 files changed, 2 insertions(+), 0 deletions(-) - -commit 01e902e40ca15acf0319e37d39a271d6875bfce9 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 02:02:47 2009 +0100 - - [cpp] add a version header+functions - - this way, it is possible to get (either at build time and at runtime) - the version of the current poppler-cpp library - - poppler-config.h is generated by the build system (autotools or cmake) - with the correct version information - - configure.ac | 2 ++ - cpp/CMakeLists.txt | 5 +++++ - cpp/Makefile.am | 6 ++++-- - cpp/poppler-version.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ - cpp/poppler-version.h.in | 39 +++++++++++++++++++++++++++++++++++++++ - 5 files changed, 91 insertions(+), 2 deletions(-) - -commit b3f5e5d60bc9109da961940f6216722f9db4a87b -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 00:56:15 2009 +0100 - - [CMake] add the configure check for the Cairo blend modes support - (as in autotools) - - cmake/modules/FindCairo.cmake | 18 ++++++++++++++++++ - config.h.cmake | 3 +++ - 2 files changed, 21 insertions(+), 0 deletions(-) - -commit f6ba877e0c22538cfe34d32d69814f660de59d2c -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 00:44:55 2009 +0100 - - [CMake] add configure check for sys/mman.h (as in autotools) - - ConfigureChecks.cmake | 1 + - config.h.cmake | 3 +++ - 2 files changed, 4 insertions(+), 0 deletions(-) - -commit e12801320ae030628fc62c073983c06b39ee13d7 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 00:42:20 2009 +0100 - - minor spello - - config.h.cmake | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 6428907ebcf33d4391673aadcfa71c3061f6d352 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 00:41:49 2009 +0100 - - [CMake] add configure check for fcntl.h (as in autotools) - - ConfigureChecks.cmake | 1 + - config.h.cmake | 3 +++ - 2 files changed, 4 insertions(+), 0 deletions(-) - -commit 916ab7163249e23bd5ba00922fdcad9caaf92c75 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 00:34:59 2009 +0100 - - [CMake] oops, those should have been '#cmakedefine' and not '#define' - - config.h.cmake | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit ea655d8c7e24e97ee710110a783ed9c209cf76e3 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 00:33:51 2009 +0100 - - [CMake] move and rename to match more the autotools output - - config.h.cmake | 21 ++++++++++++++------- - 1 files changed, 14 insertions(+), 7 deletions(-) - -commit 9f0146c5b2f9326e834104b89791f66b18f85adc -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 14 00:28:04 2009 +0100 - - [CMake] add checks for gmtime_r and localtime_r - - ConfigureChecks.cmake | 2 ++ - config.h.cmake | 6 ++++++ - 2 files changed, 8 insertions(+), 0 deletions(-) - -commit 9d0cf201e96044dd679c26bea6255d986a6cd246 -Author: Pino Toscano <pino@kde.org> -Date: Sun Dec 13 23:45:39 2009 +0100 - - [cpp] add ignore file - - cpp/.gitignore | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit d783e92b863d8b22de6ca326328115fec63193ed -Author: Pino Toscano <pino@kde.org> -Date: Sun Dec 13 23:42:33 2009 +0100 - - [cpp] don't forget the cmake stuff when packing with the autotools - - Makefile.am | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 0105caefe860e7a45fc7d3a1bd1162fe56bcfe6a -Author: Pino Toscano <pino@kde.org> -Date: Sun Dec 13 23:40:55 2009 +0100 - - [cpp] add the pkg-config stuff - - CMakeLists.txt | 3 +++ - Makefile.am | 7 +++++-- - configure.ac | 3 ++- - poppler-cpp.pc.cmake | 9 +++++++++ - poppler-cpp.pc.in | 9 +++++++++ - 5 files changed, 28 insertions(+), 3 deletions(-) - -commit d5a74f78df0dca24fd537b30424fd2ebb3efe3e2 -Author: Pino Toscano <pino@kde.org> -Date: Sun Dec 13 23:35:06 2009 +0100 - - [cpp] add the (rest of the) CMake build system for it - - CMakeLists.txt | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 0e41f937946e4e4c1b660406bd74e4afe8825b5f -Author: Pino Toscano <pino@kde.org> -Date: Sun Dec 13 23:31:46 2009 +0100 - - [cpp] add the autotools buildsystem for it - - Makefile.am | 6 +++++- - configure.ac | 15 +++++++++++++++ - cpp/Makefile.am | 32 ++++++++++++++++++++++++++++++++ - 3 files changed, 52 insertions(+), 1 deletions(-) - -commit 9727fdc0c682742335e44ddc2f32d60e4c59983a -Author: Pino Toscano <pino@kde.org> -Date: Sun Dec 13 22:55:28 2009 +0100 - - Start of a pure C++ frontend for Poppler. - - This initial version (called 'poppler-cpp') includes preliminary - support for: - - document (loading from file name, some query methods, unlocking, - font listing, embedded files) - - page (some query methods) with page transitions - - TOC - - Modelled a bit on the Qt4 API, it provides also an own "ustring" - typedef representing UTF-16 strings, - with methods to convert back/to UTF-8 and Latin 1. - - Most probably it has bugs, but nevertheless worth testing and - developing. - - cpp/CMakeLists.txt | 34 ++++ - cpp/poppler-document-private.h | 55 ++++++ - cpp/poppler-document.cpp | 316 - +++++++++++++++++++++++++++++++++++ - cpp/poppler-document.h | 92 ++++++++++ - cpp/poppler-embedded-file-private.h | 40 +++++ - cpp/poppler-embedded-file.cpp | 116 +++++++++++++ - cpp/poppler-embedded-file.h | 55 ++++++ - cpp/poppler-font.cpp | 166 ++++++++++++++++++ - cpp/poppler-font.h | 91 ++++++++++ - cpp/poppler-global.cpp | 162 ++++++++++++++++++ - cpp/poppler-global.h | 86 ++++++++++ - cpp/poppler-page-private.h | 44 +++++ - cpp/poppler-page-transition.cpp | 95 +++++++++++ - cpp/poppler-page-transition.h | 82 +++++++++ - cpp/poppler-page.cpp | 121 +++++++++++++ - cpp/poppler-page.h | 62 +++++++ - cpp/poppler-private.cpp | 70 ++++++++ - cpp/poppler-private.h | 66 ++++++++ - cpp/poppler-rectangle.h | 60 +++++++ - cpp/poppler-toc-private.h | 62 +++++++ - cpp/poppler-toc.cpp | 136 +++++++++++++++ - cpp/poppler-toc.h | 74 ++++++++ - 22 files changed, 2085 insertions(+), 0 deletions(-) - -commit 62854051f4e47028147cc93a5faac39e2fa2c9fd -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Dec 12 17:22:08 2009 +0100 - - Initialize profileCommands in Gfx constructor - - poppler/Gfx.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 4e6af25a028d16608111634c5467420e31fa399b -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Dec 9 19:45:40 2009 +0100 - - [cairo] Update font of TextPage in CairoOutputDev::updateAll() - - Fixes a crash with some documents, see Evince bug - https://bugzilla.gnome.org/show_bug.cgi?id=603934 - - poppler/CairoOutputDev.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 6798d3e52e36e91bceff3a1a96372e9d9c6f3813 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Dec 6 15:34:36 2009 +0100 - - Use fixed size array in AnnotColor - - glib/poppler-annot.cc | 2 +- - poppler/Annot.cc | 24 +++++------------------- - poppler/Annot.h | 5 ++--- - poppler/Gfx.cc | 2 +- - qt4/src/poppler-annotation.cc | 2 +- - 5 files changed, 10 insertions(+), 25 deletions(-) - -commit 92fab93bee3748a73c09429cc8a105c16f21fed0 -Author: Axel Struebing <axel.struebing@freenet.de> -Date: Sat Dec 5 22:31:29 2009 +0000 - - Add a empty space after null - - Fixes bug 25465 - - poppler/PDFDoc.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 32103f45d0193b31e95269ea9123b8011d93e994 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Dec 5 10:14:18 2009 +0100 - - [annots] Add isVisible() to check whether annot is visible before - drawing it - - It takes into account annot flags and optional content. - - poppler/Annot.cc | 29 ++++++++++++++--------------- - poppler/Annot.h | 1 + - 2 files changed, 15 insertions(+), 15 deletions(-) - -commit c14dfc7102341f5e1ed67a05c0738d55befab1ec -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Dec 5 10:07:46 2009 +0100 - - [annots] Do not check if annot is a link in Annot::draw() - - AnnotLink already implements draw() - - poppler/Annot.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit ddf85d4a51f605eed998c633857b8bb5c74ab590 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 4 14:59:41 2009 +0100 - - Make the code a bit more resilient - - By checking the GooString we are going to use really exists - - poppler/PSOutputDev.cc | 24 ++++++++++++++++-------- - 1 files changed, 16 insertions(+), 8 deletions(-) - -commit 78b4afa0a44048b8d40438d400652dbae4cb99b1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 4 14:57:10 2009 +0100 - - Accept Fontname if FontName is not present - - Fixes KDE bug 217013 - - poppler/GfxFont.cc | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -commit fee5cb0eec2ddb8d596289e9a6285cf04d97632e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Dec 4 13:26:42 2009 +0100 - - [annots] Remove redundant flags definition - - poppler/Annot.cc | 22 +++++++++------------- - 1 files changed, 9 insertions(+), 13 deletions(-) - -commit 3a94e8ce90c0a4d11c5c5aa8805c167c8a0434e5 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Nov 27 15:23:11 2009 +0100 - - [cairo] Revert commit 77c2e154c2cb57300116ecd4295f1e67b06b411f - - And fix bug #24575 jut by checking pointer is not null before - using it. - - poppler/CairoOutputDev.cc | 12 +++++------- - 1 files changed, 5 insertions(+), 7 deletions(-) - -commit a093b768e64d477ebdd5f6b519d80a6c45706e7e -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 22 20:23:49 2009 +0100 - - Add copyrights - - poppler/CairoFontEngine.cc | 2 +- - poppler/CairoOutputDev.cc | 4 ++-- - poppler/CairoOutputDev.h | 2 +- - 3 files changed, 4 insertions(+), 4 deletions(-) - -commit 77c2e154c2cb57300116ecd4295f1e67b06b411f -Author: David Benjamin <davidben@mit.edu> -Date: Sun Nov 22 20:19:29 2009 +0100 - - Do not crash on malformed files - - bug 24575 - - poppler/CairoOutputDev.cc | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 1d0cb9b2cfd4d4d9aa9b0ad83ad6408544263a09 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Nov 22 19:59:34 2009 +0100 - - [cairo] Initialize fill_color and stroke_color - - poppler/CairoOutputDev.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 32de2ac62fb87570e1a59152f37b86e571a01180 -Author: Ilya Gorenbein <igorenbein@finjan.com> -Date: Sun Nov 22 19:51:54 2009 +0100 - - Improve the reconstruction of the XRef - - Makes load a file Ilya can't share - - poppler/XRef.cc | 165 - +++++++++++++++++++++++++++++++----------------------- - 1 files changed, 95 insertions(+), 70 deletions(-) - -commit 039c6dffbfbed46a11e207048a3247d6921d6b02 -Author: Ilya Gorenbein <igorenbein@finjan.com> -Date: Sun Nov 22 15:14:20 2009 +0100 - - Correctly initialize fileName - - poppler/Link.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit b905caf1785ee207cc0480953da69be302d3d4e9 -Author: David Benjamin <davidben@mit.edu> -Date: Sat Nov 21 02:43:21 2009 +0100 - - Be more lenient with /Decode key on images - - The spec requires the field be [1 0] or [0 1]. Adobe accepts - floating point - values as well. This fixes bug #17439. - - poppler/Gfx.cc | 9 +++++++-- - 1 files changed, 7 insertions(+), 2 deletions(-) - -commit d99e7a88845a5f4b35e2c538c597316b2ad541ca -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Nov 20 22:09:44 2009 +0100 - - Check for openjpeg in the C++ part as it uses bool in the header - - Bug 25103 - - configure.ac | 61 - ++++++++++++++++++++++++++++----------------------------- - 1 files changed, 30 insertions(+), 31 deletions(-) - -commit 55261a2dc86241c8d132e590e76e7398b3ca5090 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 18 22:26:01 2009 +0100 - - replace floor with a cast to int for numbers > 0 - - bug-poppler13487.pdf gets a 15% faster rendering - - splash/SplashMath.h | 19 +++++++++++++++++-- - 1 files changed, 17 insertions(+), 2 deletions(-) - -commit 28df9fb323f14dc632c9502655abf69984b7d67e -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 18 21:57:02 2009 +0100 - - Remove unused label - - poppler/Catalog.cc | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 037979a01a6fcafc61360e758dbc4a5eb056825e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Nov 17 19:12:30 2009 +0100 - - [cairo] If there's a soft mask available when filling, apply the - mask instead of filling - - Fixes bug #8474. - - poppler/CairoOutputDev.cc | 7 ++++++- - 1 files changed, 6 insertions(+), 1 deletions(-) - -commit 46380d36f004d71dd2c2e7bc82836af248684b51 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Nov 17 20:48:22 2009 +0100 - - i didn't want to commit this - - configure.ac | 60 - ++++++++++++++++++++++++++------------------------ - splash/SplashMath.h | 5 +-- - utils/pdftoppm.cc | 8 ------ - 3 files changed, 33 insertions(+), 40 deletions(-) - -commit 1844e0927ae89824f59b2b3378bf5e00a51a251c -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Nov 17 20:34:24 2009 +0100 - - do not use setAttribute with doubles - - it is evil and locale dependant, we do NOT want that so use - QString::number - - configure.ac | 60 ++++++++++++++--------------- - qt4/src/poppler-annotation.cc | 82 - ++++++++++++++++++++-------------------- - splash/SplashMath.h | 5 +- - utils/pdftoppm.cc | 8 ++++ - 4 files changed, 81 insertions(+), 74 deletions(-) - -commit 572d79f4b8a7bf1717b88dbd2609d8fa9b036dee -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 15 20:40:56 2009 +0100 - - Only calculate the matrix when it is really needed - - That only happens when outputting to 1 bit images - Speeds out rendering on some pdf up to 40% - - splash/SplashScreen.cc | 35 +++++++++++++++++++++++++++++++++-- - splash/SplashScreen.h | 16 ++++++++++++++++ - 2 files changed, 49 insertions(+), 2 deletions(-) - -commit 1c3113361fa376093e6fedfbf48feee7dcbc46b7 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sun Nov 15 19:43:18 2009 +0100 - - Write out fixed-content portion of Type 1 fonts in PSOutputDev - - If /Length3 of a Type 1 FontFile is > 0 the fixed-content from the - FontFile should be used instead of adding the generic 512 zeros and - cleartomark. - - poppler/PSOutputDev.cc | 18 +++++++++++++----- - 1 files changed, 13 insertions(+), 5 deletions(-) - -commit 2d30dc605cd984f6c32124af9aa7b877d416d141 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Nov 15 17:31:36 2009 +0100 - - [glib-demo] Show attachment name in FileAttachment annot properties - table - - glib/demo/annots.c | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 6c8ae140256818401351a331787c83e043fdba09 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Nov 15 17:31:13 2009 +0100 - - [glib] Add poppler_annot_file_attachment_get_name() - - glib/poppler-annot.cc | 36 +++++++++++++++++++++++++++++------- - glib/poppler-annot.h | 1 + - 2 files changed, 30 insertions(+), 7 deletions(-) - -commit ecf5173eb288187a1f076fd4b116f1212fa9e203 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Nov 15 17:14:29 2009 +0100 - - [glib-demo] Add properties of FileAttachment annotations - - glib/demo/annots.c | 67 - ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 67 insertions(+), 0 deletions(-) - -commit 8f4fdd864d79e4fa83951a3eb006ea8287c3a1ba -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Nov 15 17:12:43 2009 +0100 - - [glib-demo] Add pgd_table_add_property_with_custom_widget() - - To be able to add properties to a table that are not labels - - glib/demo/utils.c | 31 +++++++++++++++++++++---------- - glib/demo/utils.h | 30 +++++++++++++++++------------- - 2 files changed, 38 insertions(+), 23 deletions(-) - -commit 061b85f7a442107cda67e385bd772ec8565a936e -Author: Thomas Viehmann <tv@beamnet.de> -Date: Sun Nov 15 17:11:43 2009 +0100 - - [glib] Add support for file attachment annotations - - glib/poppler-annot.cc | 69 - +++++++++++++++++++++++++++++++++++++++++++++--- - glib/poppler-annot.h | 8 +++++ - glib/poppler-page.cc | 3 ++ - glib/poppler-private.h | 1 + - glib/poppler.h | 49 +++++++++++++++++---------------- - 5 files changed, 102 insertions(+), 28 deletions(-) - -commit 189c45332991bce51e40bcaf65da67d2d644045a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Nov 15 16:42:21 2009 +0100 - - [glib] Remove PopplerDocument from PopplerAttachment - - Since we are duplicating the stream we don't need to hold a - reference of - PopplerDocument anymore. - - glib/poppler-attachment.cc | 13 +------------ - glib/poppler-document.cc | 2 +- - glib/poppler-private.h | 3 +-- - 3 files changed, 3 insertions(+), 15 deletions(-) - -commit e55bfeb1ddc60053c5ee5fef840c409891781ce6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Nov 13 00:55:37 2009 +0100 - - jpeg_start_decompress can fail, check it - - Fixes KDE bug #214317 - - poppler/DCTStream.cc | 6 +++++- - 1 files changed, 5 insertions(+), 1 deletions(-) - -commit c59d93061cf71d13916872a20aed37ecfbb3bfa4 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Nov 9 18:32:55 2009 +0100 - - [cairo] Do nothing when image mask is 1x1 and the pixel is 0 - - poppler/CairoOutputDev.cc | 14 ++++++++++++++ - 1 files changed, 14 insertions(+), 0 deletions(-) - -commit 448f03cfc429d33bfa5527e3dc964ef5da10ee94 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Mon Nov 9 22:52:39 2009 +1030 - - Don't render the color white in type 3 glyphs in the cairo backend - - PDF allows the "g" operator in Type 3 charprocs but cairo user fonts - will render any stroke or fill in the font color. - - As the only PDFs I've seen with "g" in the charprocs are only using - the gray values 0 or 1, a workaround is to disable strokes and fills - of the charproc when the gray level is > 0.5. - - poppler/CairoOutputDev.cc | 14 ++++++++++++++ - 1 files changed, 14 insertions(+), 0 deletions(-) - -commit 3fead2a3b53681ef95116f18f17f1a9febec6e48 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Nov 9 11:25:24 2009 +0100 - - Transitions dictionary can be a Ref too - - poppler/Page.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit ac4955d03a532cab1933698aeb667d44300e52d0 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Nov 9 11:12:48 2009 +0100 - - [glib-demo] Explicitely add gio as dependency for GTK+ tests - - configure.ac | 4 ++-- - glib/demo/main.c | 1 + - 2 files changed, 3 insertions(+), 2 deletions(-) - -commit 32ea667ec8f18311539123c7b80c7ab4767070cb -Author: Chris Wilson <chris@chris-wilson.co.uk> -Date: Tue Aug 11 19:17:52 2009 +0100 - - [cairo] Mark images dirty - - After directly manipulating the pixel values we need to mark the - surface - as dirty. This means that cairo will refresh any caches it may - have taken - of the surface will the new data. - - poppler/CairoOutputDev.cc | 8 ++++++++ - 1 files changed, 8 insertions(+), 0 deletions(-) - -commit 10a41150c4067bb3ab85e25dae76e0968a6cd586 -Author: Chris Wilson <chris@chris-wilson.co.uk> -Date: Tue Aug 11 19:17:06 2009 +0100 - - [cairo] Use colToDbl() to avoid rounding error. - - poppler/CairoOutputDev.cc | 37 +++++++++++++++++++------------------ - 1 files changed, 19 insertions(+), 18 deletions(-) - -commit c9491319689f04edd57adda7ee85f84f17fd1c47 -Author: Chris Wilson <chris@chris-wilson.co.uk> -Date: Tue Aug 11 18:07:17 2009 +0100 - - [cairo] Reduce the number of redundant pattern creations - - poppler/CairoOutputDev.cc | 92 - +++++++++++++++++++++++++++------------------ - 1 files changed, 55 insertions(+), 37 deletions(-) - -commit ead78d9f703c8b2d556c94be3c47dbae7469eda8 -Author: Reece Dunn <msclrhd@gmail.com> -Date: Thu Nov 5 22:25:14 2009 +0100 - - fontpos is never set to -1, so remove the checks in HtmlOutputDev. - - utils/HtmlOutputDev.cc | 11 +++-------- - 1 files changed, 3 insertions(+), 8 deletions(-) - -commit 55dd6024a4672a1787e8b1a8276bd78fff94e2cd -Author: Ilya Gorenbein <igorenbein@finjan.com> -Date: Wed Nov 4 22:07:18 2009 +0100 - - Do not error on files without "Count" and "Kids" - - It is not spec compliant not to have those fields but Adobe Reader and - FoxIt seems to allow it so try to behave like them. See bug 24720 - to see why one would want such file - - poppler/Catalog.cc | 10 +++++----- - 1 files changed, 5 insertions(+), 5 deletions(-) - -commit 58a1d42aed7352c008d201b8f355f6e4146f71e5 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Oct 29 18:38:22 2009 +0100 - - [cairo] Don't render patterns when using CairoImageOutputDev - - poppler/CairoOutputDev.h | 15 +++++++++++++-- - 1 files changed, 13 insertions(+), 2 deletions(-) - -commit 7670cc48dcf3ffd77e3ffa29056a3e13b2926709 -Author: Ilya Gorenbein <igorenbein@finjan.com> -Date: Wed Oct 28 19:20:41 2009 +0100 - - There are some pdf where Aspect values are reals, use getNum - - Fixes bug 24733 - - poppler/Annot.cc | 8 ++++++-- - 1 files changed, 6 insertions(+), 2 deletions(-) - -commit 4fe89e520a04a6ab6d6ec6a8294896b2f427c7da -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Oct 25 21:55:55 2009 +0100 - - do not accept negative interval lengths in the page labels tree - - See bug 24721 - - poppler/PageLabelInfo.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit b174ebd6b323c7a58a19d59c1a9e4ac4e6cba7d9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Oct 23 21:57:42 2009 +0200 - - Move the iccColorSpaceCache from a static in GfxState to a member - of Gfx - - Fixes the problem that the keys are per document but we had a static - that lived as much as the library. Now the cache only lives the - rendering - of a page so it's a bit slower but at least it's correct. Fixes - bug 24686 - - poppler/Gfx.cc | 49 +++++++++++++++++--------- - poppler/Gfx.h | 13 ++++++- - poppler/GfxState.cc | 94 - +++++++++++++++++++++++++-------------------------- - poppler/GfxState.h | 33 +++++++++--------- - poppler/Page.cc | 4 +- - 5 files changed, 107 insertions(+), 86 deletions(-) - -commit 4a9bdd30dc353865685e03eb1c1ac6093797695a -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Oct 22 21:26:29 2009 +0200 - - initialize len at 0 when reading the font fails - - See bug 24525 for more info - - poppler/GfxFont.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit c839b706092583f6b12ed3cc634bf5af34b7a2bb -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Oct 20 10:09:13 2009 +0200 - - [glib] Fix CVE-2009-3607 - - glib/poppler-page.cc | 20 ++++++++++---------- - 1 files changed, 10 insertions(+), 10 deletions(-) - -commit 44462e0ca39392e5629020226b901e4026089b46 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Oct 19 23:33:58 2009 +0200 - - fix memory leak - - poppler/PSOutputDev.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit d701aaa9eaa62567210070129f5feffe24bf1936 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Oct 18 01:22:16 2009 +0200 - - This include is needed as this file uses Ref - - poppler/OutputDev.h | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit d4202536e1b62c326c301d5088fa0e176c523e85 -Author: Pino Toscano <pino@kde.org> -Date: Sat Oct 17 01:35:11 2009 +0200 - - SplashGlyphBitmap is a struct and not a class - - poppler/ArthurOutputDev.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 654176dee7c9325aa5a24a2de3c070faa16e8a9c -Author: Michael Jansen <kde@michael-jansen.biz> -Date: Sat Oct 17 01:30:40 2009 +0200 - - CMake: add the possibility to pass LIB_SUFFIX. - - This allows to tune the installation libdir by adding a suffix for it - (making it eg lib, lib32, or lib64) - - CMakeLists.txt | 16 +++++++++------- - glib/CMakeLists.txt | 2 +- - poppler-cairo.pc.cmake | 2 +- - poppler-glib.pc.cmake | 2 +- - poppler-qt.pc.cmake | 2 +- - poppler-qt4.pc.cmake | 2 +- - poppler-splash.pc.cmake | 2 +- - poppler.pc.cmake | 2 +- - qt/CMakeLists.txt | 2 +- - qt4/src/CMakeLists.txt | 2 +- - 10 files changed, 18 insertions(+), 16 deletions(-) - -commit 43829ae4b25a88ace06f05fa6750e5732539f4be -Author: Pino Toscano <pino@kde.org> -Date: Sat Oct 17 01:21:39 2009 +0200 - - put a space so MSVC won't try to see it as comment - - poppler/GfxState.h | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit f64086ea22a4e8cb3d4e7116db2a9541ac2fb19f -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 17 00:48:58 2009 +0200 - - check the document is not locked when printing - - qt4/src/poppler-ps-converter.cc | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 85d1015480b7ab3f21cc5f78dc53d4c5efdc6e60 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 17 00:48:27 2009 +0200 - - fix file name comment - - qt4/src/poppler-ps-converter.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 270764ad1bf2cfe95aed0b6850d2347361b4268d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 17 00:47:34 2009 +0200 - - Add a way for converters to return more exact errors they had when - converting - - qt4/src/poppler-base-converter.cc | 8 +++++++- - qt4/src/poppler-converter-private.h | 3 ++- - qt4/src/poppler-pdf-converter.cc | 11 ++++++++++- - qt4/src/poppler-ps-converter.cc | 6 +++++- - qt4/src/poppler-qt4.h | 14 ++++++++++++++ - 5 files changed, 38 insertions(+), 4 deletions(-) - -commit 1082e1671afd8ab91583dabc876304008acb021c -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Oct 16 23:17:22 2009 +0200 - - Some "security" fixes based on newly released Xpdf 3.02pl4 - - poppler/Stream.cc | 4 ++++ - poppler/XRef.cc | 19 +++++++++++++++---- - splash/Splash.cc | 7 +++++++ - splash/SplashBitmap.cc | 37 ++++++++++++++++++++++++++++++------- - splash/SplashErrorCodes.h | 4 +++- - 5 files changed, 59 insertions(+), 12 deletions(-) - -commit c2458275e02f56226779b82d73c13defcbbda563 -Author: Glenn Ganz <glenn.ganz@uptime.ch> -Date: Fri Oct 16 20:54:32 2009 +0200 - - fix constructor of DCTStream - - poppler/Stream.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit fd91b79c053bb5cd01a766032b90981dbc5e5dd3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 10 14:53:42 2009 +0200 - - fix compiling with automake - - goo/Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit c3031b4318af6f85256f2478c8678dedd0d6acd1 -Author: Pino Toscano <pino@kde.org> -Date: Fri Oct 9 16:17:16 2009 +0200 - - cmake: simplify the linking to libpng - - CMakeLists.txt | 7 +++---- - 1 files changed, 3 insertions(+), 4 deletions(-) - -commit 96688dd7a091f8fa141fad2b3d05bae04b0b86fb -Author: Patrick Spendrin <ps_ml@gmx.de> -Date: Fri Oct 9 16:09:46 2009 +0200 - - MSVC: add _CRT_SECURE_NO_WARNINGS to the define's - - CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit f346c1f6b55f87ebd6bb0b0932462d5514aa40ff -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Oct 9 00:29:06 2009 +0200 - - add -ansi flag to default warnings - - cmake/modules/PopplerMacros.cmake | 2 +- - configure.ac | 2 +- - utils/parseargs.c | 30 +++++++++++++++--------------- - utils/parseargs.h | 26 +++++++++++++------------- - 4 files changed, 30 insertions(+), 30 deletions(-) - -commit 53e0016b772f1b78d998506e2f3106011d32cef3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Oct 9 00:15:52 2009 +0200 - - Add virtual destructor to ImgWriter - - CMakeLists.txt | 1 + - goo/ImgWriter.cc | 15 +++++++++++++++ - goo/ImgWriter.h | 2 ++ - goo/Makefile.am | 1 + - 4 files changed, 19 insertions(+), 0 deletions(-) - -commit 699dcacced7be05b788c414c231dc2b5c07de06e -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Oct 9 00:13:11 2009 +0200 - - Add -Wnon-virtual-dtor flag - - cmake/modules/PopplerMacros.cmake | 4 ++-- - configure.ac | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -commit d1e4fca4a8602994b010fae4f4fea5cd4df9276e -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Oct 9 00:10:03 2009 +0200 - - build on cmake too - - CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit d67511c92022121066f43003f01b955962ddcd33 -Author: Stefan Thomas <thomas@eload24.com> -Date: Fri Oct 9 00:09:23 2009 +0200 - - Add -jpeg to pdftoppm - - goo/ImgWriter.h | 28 ++++++++++++++ - goo/JpegWriter.cc | 92 - ++++++++++++++++++++++++++++++++++++++++++++++++ - goo/JpegWriter.h | 42 ++++++++++++++++++++++ - goo/Makefile.am | 2 + - goo/PNGWriter.cc | 5 ++- - goo/PNGWriter.h | 10 +++-- - splash/SplashBitmap.cc | 46 +++++++++++++++++------- - splash/SplashBitmap.h | 5 ++- - splash/SplashTypes.h | 11 ++++++ - utils/pdftoppm.1 | 3 ++ - utils/pdftoppm.cc | 22 +++++++++--- - 11 files changed, 239 insertions(+), 27 deletions(-) - -commit 388196df1fb05fb2d88ae82bd81e823a23588ec1 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Oct 7 17:11:58 2009 +0200 - - [glib-demo] Show some of the annot flags in annots treeview - - glib/demo/annots.c | 35 +++++++++++++++++++++++++++++++++-- - 1 files changed, 33 insertions(+), 2 deletions(-) - -commit 034907c6582c1f50782ec9c58a29b140c6fc0688 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Oct 6 00:52:10 2009 +0200 - - Forgot to update the year here - - qt4/src/poppler-private.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit fef89acebf5312324c104fb52e629563fbc2de76 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Oct 6 00:42:52 2009 +0200 - - Add the possibility of enabling hinting - - qt4/src/poppler-document.cc | 2 +- - qt4/src/poppler-private.h | 1 + - qt4/src/poppler-qt4.h | 3 ++- - 3 files changed, 4 insertions(+), 2 deletions(-) - -commit 485252844b5e0964ee724b74e2a7ba2b820b259e -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Oct 6 00:41:57 2009 +0200 - - rework how hinting is used in the splash backend - - Basically we default to no hinting now with the possibility to - enable it - - poppler/ArthurOutputDev.cc | 2 +- - poppler/GlobalParams.cc | 19 ------------ - poppler/GlobalParams.h | 3 -- - poppler/SplashOutputDev.cc | 8 ++++- - poppler/SplashOutputDev.h | 3 ++ - splash/SplashFTFont.cc | 64 - +++++++++-------------------------------- - splash/SplashFTFont.h | 4 +- - splash/SplashFTFontEngine.cc | 8 ++-- - splash/SplashFTFontEngine.h | 7 ++-- - splash/SplashFontEngine.cc | 5 ++- - splash/SplashFontEngine.h | 3 +- - 11 files changed, 40 insertions(+), 86 deletions(-) - -commit 8194c156cf2167834779e1690a89b5068baf8d58 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Oct 5 00:55:55 2009 +0200 - - Fix includes for those using internal headers - - goo/FixedPoint.h | 2 +- - goo/gmem.h | 2 +- - poppler/OutputDev.h | 2 +- - poppler/PSOutputDev.h | 2 +- - poppler/PageLabelInfo.h | 2 +- - utils/ImageOutputDev.h | 2 +- - 6 files changed, 6 insertions(+), 6 deletions(-) - -commit 091f68ccd59413d6890dfbfcf8911f112e690b50 -Author: Kovid Goyal <kovid@kovidgoyal.net> -Date: Mon Oct 5 00:39:36 2009 +0200 - - Use _WIN32 instead of WIN32 - - More info at http://bugs.freedesktop.org/show_bug.cgi?id=24259 - - goo/GooMutex.h | 16 +++++++++++++++- - goo/gfile.cc | 33 +++++++++++++++++---------------- - goo/gfile.h | 5 +++-- - msvc/poppler/poppler-config.h | 2 +- - poppler-config.h.cmake | 2 +- - poppler/ABWOutputDev.h | 3 ++- - poppler/FileSpec.cc | 7 ++++--- - poppler/GlobalParams.cc | 37 - +++++++++++++++++++------------------ - poppler/GlobalParams.h | 4 ++-- - poppler/Link.cc | 3 ++- - poppler/PDFDoc.cc | 4 ++-- - poppler/PDFDoc.h | 3 ++- - poppler/PSOutputDev.cc | 5 +++-- - poppler/TextOutputDev.cc | 5 +++-- - poppler/XpdfPluginAPI.cc | 13 ++++++++++++- - poppler/poppler-config.h.in | 2 +- - splash/SplashFontEngine.cc | 9 +++++---- - test/perf-test.cc | 24 ++++++++++++------------ - utils/HtmlOutputDev.h | 3 ++- - 19 files changed, 108 insertions(+), 72 deletions(-) - -commit 7fd8bdfa450db4e323e4e5d12159359fbc47f9ed -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Oct 5 00:21:15 2009 +0200 - - Remove spurious ; - - Found by -Wextra i think we should add more warnings to our default - flags - - qt4/src/poppler-annotation.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit d46f7343e446331489d3fe6711a7cf778e0bd902 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Oct 2 22:04:46 2009 +0200 - - Strings can have 0 inside so use the length - - Fixes saving some files - - poppler/PDFDoc.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 2bc2040081919340415f576ce8266356deadbfcd -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Oct 2 22:04:03 2009 +0200 - - Increase decimals from 5 to 10, a double has that precision - - Makes saving more faithful for some files - - poppler/PDFDoc.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 05eb7342d5234732f27c9c67b7fc1f9e40a4e075 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Oct 2 22:03:40 2009 +0200 - - If the stream was wrongly formed save the correct length - - Fixes saving of some files - - poppler/PDFDoc.cc | 12 ++++++++++++ - 1 files changed, 12 insertions(+), 0 deletions(-) - -commit b98faa4c162392d9416a5a93c9042b41f82d8657 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Oct 2 22:02:13 2009 +0200 - - Return the save status as program status - - test/pdf-fullrewrite.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit f73f59f2c7bb7c7d57eb70cdc1bc30b80a92d0b7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Oct 2 22:01:45 2009 +0200 - - If the Length entry of the stream is wrong, fix it - - Fixes saving some files - - poppler/Parser.cc | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 91135c7e788bc32e414e1a9c9ab43b326a07e970 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Oct 2 22:00:12 2009 +0200 - - increase the range of characters we sanitize - - Fixes saving of some files - - goo/GooString.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 9dcb3e8be2cd52a795605548e43d6bfc149b2ea5 -Author: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> -Date: Sun Sep 27 17:17:32 2009 +0200 - - Fix the linking not to use the .so directly but the lib - - Fixes check on cygwin - - m4/qt.m4 | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit ed4a6f1cfc7ccd2717d939841c092347c3307547 -Author: Kovid Goyal <kovid@kovidgoyal.net> -Date: Sat Sep 26 19:26:19 2009 +0200 - - Do not crash when saving files that come from a stream without name - - Bug 24090 - - poppler/PDFDoc.cc | 6 +++++- - 1 files changed, 5 insertions(+), 1 deletions(-) - -commit 04b232d48930af9bc614d7fef47f79ce247713a4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Sep 26 18:30:41 2009 +0200 - - Write the Info into the trailer dict if there is one - - Bug 24091 - - poppler/PDFDoc.cc | 8 +++++++- - 1 files changed, 7 insertions(+), 1 deletions(-) - -commit 343e4f9aceb935eb393ad94bbef4dbb1b1a450ee -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Sep 26 18:28:40 2009 +0200 - - Plug leak - - test/pdf-fullrewrite.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 2ea0032283c4717f1bb285fab7956fc38f375e87 -Author: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> -Date: Sat Sep 26 15:01:35 2009 +0200 - - Patch to make poppler work on Cygwin - - Bug 4195 - - configure.ac | 3 +++ - qt/Makefile.am | 2 +- - qt4/src/Makefile.am | 2 +- - 3 files changed, 5 insertions(+), 2 deletions(-) - -commit 074dc5e5e39cebc1fbe9bf6a15b2cae2391006c1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Sep 26 14:56:38 2009 +0200 - - Improve realibility for Streams with broken Length - - Fixes bug 6841 - - poppler/Parser.cc | 17 +++++++++++++---- - 1 files changed, 13 insertions(+), 4 deletions(-) - -commit b7702820245fb6cdbf77afba37c53c03d4362a25 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 21 21:58:26 2009 +0200 - - Print with a . and not with a , in all locales - - This is a regression after the removal of setting LC_NUMERIC - - poppler/PDFDoc.cc | 6 +++++- - 1 files changed, 5 insertions(+), 1 deletions(-) - -commit d31080d8195694cef740d4e77484179bb38d1f26 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Sep 20 17:21:13 2009 +0200 - - CharCodeToUnicode is not mandatory in fonts, don't crash one fonts - that do not have it - - Fixes bug #24036 - - poppler/Annot.cc | 33 ++++++++++++++++++++------------- - 1 files changed, 20 insertions(+), 13 deletions(-) - -commit a729d005a7204791fa8415de5aa0834136073ce8 -Author: Pino Toscano <pino@kde.org> -Date: Thu Sep 17 20:12:20 2009 +0200 - - Windows32/MSVC: initialize the font list once per GlobalParams, - instead of once at all - - this fixes the font list being empty at the second (and following) - GlobalParams creation - thanks for Christian Ehrlicher for reporting the bug and testing - its fix - - poppler/GlobalParams.cc | 1 + - poppler/GlobalParams.h | 1 + - poppler/GlobalParamsWin.cc | 1 - - 3 files changed, 2 insertions(+), 1 deletions(-) - -commit 68711d8494e2765c4a24ea59ce8d904981f0f917 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 9 23:24:22 2009 +0200 - - uint -> Guint - - some compilers don't know about uint - - poppler/Gfx.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 943a13c9354dec18cb023642aebbe5d3bb920ed7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 9 20:04:06 2009 +0200 - - poppler 0.12.0 - - CMakeLists.txt | 4 ++-- - NEWS | 18 ++++++++++++++++++ - configure.ac | 4 ++-- - msvc/config.h | 6 +++--- - qt4/src/Doxyfile | 2 +- - 5 files changed, 26 insertions(+), 8 deletions(-) - -commit e8ed7210346cb18f6e4588ad557f993c6d42f4a3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 9 19:21:21 2009 +0200 - - increase library to 3.2.0 - - qt4/src/CMakeLists.txt | 2 +- - qt4/src/Makefile.am | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit e950107006a3b1889646d3705323c1b3d41eaa49 -Author: David Benjamin <davidben@mit.edu> -Date: Wed Sep 9 01:19:38 2009 +0200 - - Fix infinite loop in JBIG2Decoder - - Bug 23025 - Also fixes problems in bug-poppler6881-2.pdf and bug-poppler6500.pdf - - poppler/JBIG2Stream.cc | 13 ++++++++----- - 1 files changed, 8 insertions(+), 5 deletions(-) - -commit 1cb25a4adaaf3e2da50724312a3db6928991f425 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Sep 6 10:45:56 2009 +0200 - - [glib] Ignore attachments with an invalid embedded file - - Fixes bug #10386 - - glib/poppler-document.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 842e00f3114666609ef4dec6fa613d46f330a40c -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Sep 5 15:20:35 2009 +0200 - - Add EmbeddedFile::isValid - - Also do not crash if data() is called on an invalid file - - qt4/src/poppler-embeddedfile.cc | 10 +++++++++- - qt4/src/poppler-qt4.h | 9 ++++++++- - 2 files changed, 17 insertions(+), 2 deletions(-) - -commit 9d40b268f5a9a9a0fb79da0e1627dd8eebc4db6a -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Sep 5 15:19:27 2009 +0200 - - Add EmbFile::isOk - - At the moment returns false if the object stream is not really - a stream - - poppler/Catalog.h | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 642650b6f70425c8fff2df978ae71249a5ae07f3 -Author: David Benjamin <davidben@mit.edu> -Date: Sat Sep 5 01:12:49 2009 +0200 - - Better fallback when there's a type mismatch - - Bug #17252 - - poppler/GfxFont.cc | 38 ++++++++++++++++++++++++++++++++------ - 1 files changed, 32 insertions(+), 6 deletions(-) - -commit bf5811f5331292ccf30f1b0f089fe43d351d96be -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Aug 26 00:43:46 2009 +0200 - - Improve shading color rendering - - Shading is not necessarily lineal so require another bisection to - assume all the area in between have the same color. Fixes bug #20238 - - poppler/Gfx.cc | 17 ++++++++++++++++- - 1 files changed, 16 insertions(+), 1 deletions(-) - -commit e94430b790fde6ce7b7cb163c2e0adf2d071c81d -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Aug 26 00:42:49 2009 +0200 - - Make code a bit more readable - - poppler/Gfx.cc | 23 +++++++++++------------ - 1 files changed, 11 insertions(+), 12 deletions(-) - -commit 465212780557705fd939dfe54f96913505bfc96e -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Aug 25 21:55:45 2009 +0200 - - forgot to update my copyright - - poppler/JPEG2000Stream.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 4f6016d01ced32002bef22b9b5d5426a74e55842 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Aug 25 21:10:07 2009 +0200 - - Fix format security warnings - - Don't just directly print strings of unknown content; use "%s". - - poppler/JPEG2000Stream.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 4616b23382b5d155f8b2f1942733037cf5730844 -Author: Christian Persch <chpe@gnome.org> -Date: Tue Aug 25 21:09:40 2009 +0200 - - Fix format security warnings - - Don't just directly print strings of unknown content; use "%s". - - poppler/GfxState.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 6c5c8d008456d1e4f3d60bc182209747c2a175dc -Author: Christian Persch <chpe@gnome.org> -Date: Tue Aug 25 21:03:16 2009 +0200 - - Support AM_SILENT_RULES - - When using automake 1.11, should support silent build rules. - - Makefile.am | 2 +- - configure.ac | 1 + - glib/Makefile.am | 4 ++-- - qt4/demos/Makefile.am | 2 +- - qt4/src/Makefile.am | 2 +- - qt4/tests/Makefile.am | 2 +- - 6 files changed, 7 insertions(+), 6 deletions(-) - -commit e7dd1c47b01d8f31599ee686eafbe7c54d7c023a -Author: Christian Persch <chpe@gnome.org> -Date: Tue Aug 25 21:01:13 2009 +0200 - - Fix automake check, and add automake 1.11 support - - Fix the automake checks to take the *newest* version available, - not the - oldest one. Add support for automake 1.11. FDO#23473. - - autogen.sh | 13 +++++++------ - 1 files changed, 7 insertions(+), 6 deletions(-) - -commit 493d2c5aa78a3241e70108c5d7eccba9ac72f834 -Author: Rex Dieter <rdieter@math.unl.edu> -Date: Mon Aug 24 20:08:46 2009 +0200 - - Use Requires.private if available - - The following patch minimizes pkg-config deps similar to how the - glib-related pkg-config deps are done. - - poppler-qt.pc.cmake | 3 ++- - poppler-qt.pc.in | 3 ++- - poppler-qt4.pc.cmake | 3 ++- - poppler-qt4.pc.in | 3 ++- - 4 files changed, 8 insertions(+), 4 deletions(-) - -commit 341cd3ecd08a39cd146c1c57f356b50a2881c03f -Author: Jakub Wilk <ubanus@users.sf.net> -Date: Mon Aug 24 19:51:34 2009 +0200 - - common options for pdftoabw - - The attached patch fixes command line handling for pdftoabw and - implements some - common options (e.g., --help) that are already found in other - pdftosomething - utilities. - - utils/pdftoabw.cc | 39 ++++++++++++++++++++++++++++++++------- - 1 files changed, 32 insertions(+), 7 deletions(-) - -commit 365683d5faea6e0a7570b139d1f3366c22271f8e -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Aug 18 21:18:13 2009 +0200 - - 0.11.3 - - CMakeLists.txt | 2 +- - NEWS | 22 ++++++++++++++++++++++ - configure.ac | 2 +- - msvc/config.h | 6 +++--- - qt4/src/Doxyfile | 2 +- - 5 files changed, 28 insertions(+), 6 deletions(-) - -commit cb28bc8a637d300664b3c7569263445275333878 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Aug 17 14:14:03 2009 +0200 - - [glib] Add FORMAT_MAJOR/MINOR properties to get the PDF version - - See bug #23076. - - glib/poppler-document.cc | 26 ++++++++++++++++++++++++++ - 1 files changed, 26 insertions(+), 0 deletions(-) - -commit 1b5612841b0c663f6d391d4581f65f68a2975db0 -Author: Pino Toscano <pino@kde.org> -Date: Mon Aug 17 01:04:04 2009 +0200 - - [Qt] add Document::getPdfVersion(int *major, int *minor) for the - document PDF version numbers - - This new function reads the version of the PDF specification of the - document, putting major and minor numbers in own variables. - - qt/poppler-document.cc | 8 ++++++++ - qt/poppler-qt.h | 12 ++++++++++++ - 2 files changed, 20 insertions(+), 0 deletions(-) - -commit aef8ecda1e80b921228f415a53c9c5a52df87d94 -Author: Pino Toscano <pino@kde.org> -Date: Mon Aug 17 00:57:08 2009 +0200 - - [Qt4] deprecate Document::pdfVersion() - - ... in favour of getPdfVersion() - - qt4/src/poppler-qt4.h | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit 830140f70e48e8033ad4411b6bd405d5ad7358a3 -Author: Pino Toscano <pino@kde.org> -Date: Mon Aug 17 00:51:13 2009 +0200 - - [Qt4] add Document::getPdfVersion(int *major, int *minor) for the - document PDF version numbers - - This new function reads the version of the PDF specification of the - document, putting major and minor numbers in own variables. - Add them to the relative unit test. - - qt4/src/poppler-document.cc | 8 ++++++++ - qt4/src/poppler-qt4.h | 13 +++++++++++++ - qt4/tests/check_metadata.cpp | 4 ++++ - 3 files changed, 25 insertions(+), 0 deletions(-) - -commit 5491d16dfbd73f0256c62e49d02622dc3185012e -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Aug 17 00:24:41 2009 +0200 - - Move poppler core away from using a double as PDF file version - - Frontends are yet to come - - glib/poppler-document.cc | 2 +- - poppler/PDFDoc.cc | 7 ++++--- - poppler/PDFDoc.h | 8 +++++--- - qt/poppler-document.cc | 4 ++-- - qt4/src/poppler-document.cc | 4 ++-- - utils/pdfinfo.cc | 4 ++-- - 6 files changed, 16 insertions(+), 13 deletions(-) - -commit efd5dd63a5b08249529d9a9f5906aefe806fb3aa -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Aug 17 00:21:22 2009 +0200 - - Forgot to update copyright info - - fofi/FoFiType1C.cc | 14 ++++++++++++++ - poppler/PDFDoc.cc | 2 +- - utils/parseargs.c | 2 +- - 3 files changed, 16 insertions(+), 2 deletions(-) - -commit 25ff4be0b4521cc3d2de386cdeb589beb245d435 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Aug 17 00:15:10 2009 +0200 - - No need to change the locale since we use gatof that does the - right thing - - poppler/PDFDoc.cc | 6 +----- - 1 files changed, 1 insertions(+), 5 deletions(-) - -commit a6f698b4edc42c0414dd4690e1e037088321db2c -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Aug 17 00:14:35 2009 +0200 - - Use gatof instead of atof - - fofi/FoFiType1C.cc | 3 ++- - poppler/Annot.cc | 5 +++-- - poppler/Function.cc | 3 ++- - poppler/PDFDoc.cc | 3 ++- - utils/parseargs.c | 4 +++- - 5 files changed, 12 insertions(+), 6 deletions(-) - -commit 807b121cae45832d2e5832bad19c31e77420bfec -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Aug 17 00:10:30 2009 +0200 - - Add a custom strtod that comes from libspectre - - Works over C locale integers without changing locale settings - - CMakeLists.txt | 2 + - goo/Makefile.am | 6 ++- - goo/gstrtod.cc | 147 - +++++++++++++++++++++++++++++++++++++++++++++++++++++++ - goo/gstrtod.h | 43 ++++++++++++++++ - 4 files changed, 196 insertions(+), 2 deletions(-) - -commit 914bf7677a14494b69857b1d8070092a9999fe79 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Aug 16 20:50:02 2009 +0200 - - When writing the cm matrix write 4 significant digits not 4 decimals - - This fixes bug 23332 - Maybe we want to make this the default behaviour of 'g' instead of - a new 'gs' case, but i prefer to be on the safe side for the moment - - goo/GooString.cc | 27 +++++++++++++++++++++++++-- - goo/GooString.h | 4 +++- - poppler/PSOutputDev.cc | 4 ++-- - 3 files changed, 30 insertions(+), 5 deletions(-) - -commit b7dfca1aa52b825eb3b8f1cc0470398c31615b30 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Aug 16 19:28:37 2009 +0200 - - [cairo] CairoImageOutputDev doesn't implement patterns - - poppler/CairoOutputDev.h | 13 +++++++++++++ - 1 files changed, 13 insertions(+), 0 deletions(-) - -commit d20d65111aee2ee4b8cdea2962ed1bb149122ba9 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Aug 16 17:36:14 2009 +0200 - - [cairo] Implement tiling patterns in cairo backend - - Fixes bug #13518 for the cairo backend. - - poppler/CairoOutputDev.cc | 56 - +++++++++++++++++++++++++++++++++++++++++++++ - poppler/CairoOutputDev.h | 10 ++++++++ - 2 files changed, 66 insertions(+), 0 deletions(-) - -commit e965d0686d979c775b64a93f8e2f775f81885417 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Aug 13 14:48:10 2009 +0200 - - Change OutputDev::tilingPatternFill to return a GBool - - It allows outputdevs to decide whether render the pattern or not - depending - on the parameters, like shaded patterns currently do. - - poppler/Gfx.cc | 37 +++++++++++++++++++------------------ - poppler/OutputDev.h | 11 ++++++----- - poppler/PSOutputDev.cc | 12 +++++++----- - poppler/PSOutputDev.h | 10 +++++----- - 4 files changed, 37 insertions(+), 33 deletions(-) - -commit ce70ef7d6afc800e24031dae43da301e9e542f0e -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Aug 15 17:45:57 2009 +0200 - - Fix backwards search - - qt4/src/poppler-page.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 5b7b1cdc5c3b8652d3ae583b4d7b8b6de625adc2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Aug 15 17:45:05 2009 +0200 - - Add an autotest showing previousresult fails - - qt4/tests/check_search.cpp | 51 - ++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 51 insertions(+), 0 deletions(-) - -commit 2484b0dcb8eb62f8e2c147498c58871ec04630b5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Aug 14 11:47:11 2009 +0200 - - Implement the alpha path - - I wonder if this is the correct fix why it was not implemented - but if fixes rendering of files in KDE bug 145868, KDE bug 193657, - poppler bug 17473.pdf, poppler bug 21651, poppler bug 22143 and - poppler bug 22152 and causes no regression in all the other files - i have in my test dir so i'm commiting it - - poppler/SplashOutputDev.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 03970d8b6d7624444664320470baa6d1b1299622 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Aug 11 12:01:07 2009 +0200 - - [build] Fix build with autotools - - utils/Makefile.am | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 15752b7cd5c94620e3ad3b6afd9c70ccc754c9b3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Aug 10 20:02:13 2009 +0200 - - [cairo] Add empty updateBlendMode to CairoImageOutputDev - - Fixes a crash when using CairoImageOutputDev with a document with - blend - modes. - - poppler/CairoOutputDev.h | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 45dae4e66b2b833f95656850b5f1b0ffd1d96f1d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Aug 10 20:00:04 2009 +0200 - - [cairo] Use current fill_opacity when drawing images - - Fixes launchpad bug #342282 (page 2 of the attached document) - - poppler/CairoOutputDev.cc | 16 +++++++++++++--- - 1 files changed, 13 insertions(+), 3 deletions(-) - -commit b1cd54546844f2f7cd6bf7cc14b7584c84c3fc14 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Aug 10 19:55:44 2009 +0200 - - [cairo] Do not save the font file twice for FreeType fonts - - Fixes bug #20491. - - poppler/CairoFontEngine.cc | 19 ++----------------- - 1 files changed, 2 insertions(+), 17 deletions(-) - -commit 4181a0ff11195eb7a56d76be23994b843e20b483 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Aug 10 19:58:09 2009 +0200 - - this branch is unlikely to happen - - poppler/Lexer.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 2a3025f32951ce7b7343aeef111902615d71595e -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Aug 10 19:55:40 2009 +0200 - - fix overflow calculation not to depend on the variable overflowing - - poppler/Lexer.cc | 12 ++++++++---- - 1 files changed, 8 insertions(+), 4 deletions(-) - -commit a38001f724f78231c2fdadd28e647a35b41bab74 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Aug 9 23:26:02 2009 +0200 - - Check for overflow when parsing integers - - Fixes bug 23078 - - poppler/Lexer.cc | 28 ++++++++++++++++++++++------ - 1 files changed, 22 insertions(+), 6 deletions(-) - -commit 4c4c0e44452d07bea88d98b7df0c01fadd7693cc -Author: Jakub Wilk <ubanus@users.sf.net> -Date: Sat Aug 8 17:26:14 2009 +0200 - - Silence some warnings when using internal headers and not compiling - with -Wno-write-strings - - People should not be using internal headers but it's just two lines - - poppler/Object.h | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit e2c319ba18ab473fd969db9519a9231be67538c3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Aug 8 00:48:18 2009 +0200 - - Also implement mono so that -mono in pdftoppm -png works - - Totally not optimized - - splash/SplashBitmap.cc | 23 ++++++++++++++++++++++- - 1 files changed, 22 insertions(+), 1 deletions(-) - -commit c669e7f3ca421265e78161cc3fdecd2a0c7510c9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Aug 8 00:38:50 2009 +0200 - - Support splashModeMono8 in writePNGFile - - Works though is non optimal - - splash/SplashBitmap.cc | 55 - ++++++++++++++++++++++++++++++++++-------------- - 1 files changed, 39 insertions(+), 16 deletions(-) - -commit 92744b72df9084fd2d69ba78406898378884aed8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Aug 8 00:20:52 2009 +0200 - - Add the -png flag to pdftoppm to output to PNG - - Based on a patch by Shen Liang <shenzhuxi@gmail.com> - Also factored common PNG code from HtmlOutputDev to PNGWriter - - CMakeLists.txt | 5 ++ - goo/Makefile.am | 9 +++- - goo/PNGWriter.cc | 110 - +++++++++++++++++++++++++++++++++++++++++++++ - goo/PNGWriter.h | 43 +++++++++++++++++ - poppler/Makefile.am | 8 +++ - splash/SplashBitmap.cc | 70 ++++++++++++++++++++++++++++ - splash/SplashBitmap.h | 5 ++ - splash/SplashErrorCodes.h | 4 +- - utils/CMakeLists.txt | 4 -- - utils/HtmlOutputDev.cc | 66 +++++---------------------- - utils/Makefile.am | 4 -- - utils/pdftoppm.1 | 3 + - utils/pdftoppm.cc | 21 +++++++-- - 13 files changed, 283 insertions(+), 69 deletions(-) - -commit e4439ff527bb202d0239f78e647452983b733411 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Aug 7 15:23:57 2009 +0200 - - [cairo] Don't apply masks when fill color space mode is csPattern - - In that case the mask is used for clipping when drawing images. Fixes - bug #22216. - - poppler/CairoOutputDev.cc | 59 - +++++++++++++++++++++++++++++---------------- - 1 files changed, 38 insertions(+), 21 deletions(-) - -commit 7194f59a18e4f6997ae560af3db1bd101d6f726e -Author: Chris Wilson <chris@chris-wilson.co.uk> -Date: Thu Aug 6 11:24:22 2009 +0100 - - [cairo] Use FT_New_Memory_Face() for mmapped fonts - - If we hold a mapping for the font, then we can pass that memory to - FreeType for it to use as well. This saves on FreeType having to - read the - file into a fresh block of memory. - - poppler/CairoFontEngine.cc | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit 7e2bbcf6f85111d1006b0d5bc1503cadaba83c9f -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Aug 4 00:10:58 2009 +0200 - - Set KDAB via gamaral copyright - - poppler/Form.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit ed5918e16dafebc9ecf6db8ce0186f407ecbf7d5 -Author: Pino Toscano <pino@kde.org> -Date: Sat Aug 1 20:00:22 2009 +0200 - - [Qt4 apidox] make example for FontIterator... not leak ;) - - qt4/src/poppler-qt4.h | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit f3b36d9c992491e614e88dbf1a84b5433a7647f4 -Author: Pino Toscano <pino@kde.org> -Date: Sat Aug 1 19:54:52 2009 +0200 - - [Qt4] Add color management API. - - Add few wrapper functions to get/set color profiles. - Add a function to know whether the color management functions actually - do anything (ie support compiled or not). - Add few basic API docs for the new functions. - Based on an initial patch by Hal V. Engel <hvengel@astound.net>, - heavily reindented, polished and massaged in its API by me. - - qt4/src/poppler-document.cc | 52 - +++++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-qt4.h | 50 - +++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 102 insertions(+), 0 deletions(-) - -commit 78a1969d040018c0c2bb74c94f5507f786e4666e -Author: Pino Toscano <pino@kde.org> -Date: Sat Aug 1 18:00:06 2009 +0200 - - [Qt] add unhandled cases and remove unused code - - qt/poppler-page.cc | 12 ++---------- - 1 files changed, 2 insertions(+), 10 deletions(-) - -commit bddebec0712e92e13b57d3d05d652673fe737866 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Aug 1 17:12:22 2009 +0200 - - 0.11.2 - - CMakeLists.txt | 2 +- - NEWS | 30 ++++++++++++++++++++++++++++++ - configure.ac | 2 +- - msvc/config.h | 6 +++--- - qt4/src/Doxyfile | 2 +- - 5 files changed, 36 insertions(+), 6 deletions(-) - -commit 87e2af3454348f5568d155c15af5d85268e47f1b -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Aug 1 15:48:02 2009 +0200 - - [glib-demo] Add cast to make sure the comparison is always valid - - glib/demo/attachments.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 464e95ef451103daddc9a30cd26b986291f02176 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Aug 1 15:47:25 2009 +0200 - - [glib-demo] Add missing return - - glib/demo/attachments.c | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 7f48369e4d29b2a71abffa9e1966e3a2252de895 -Author: Guillermo Antonio Amaral Bastidas <gamaral@amaral.com.mx> -Date: Sat Aug 1 15:41:34 2009 +0200 - - Call fillChildrenSiblingsID in fillChildrenSiblingsID instaed of - loadChildrenDefaults - - poppler/Form.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit e21a3e40bf6f4365064cea751ae186580d8f81f5 -Author: William Bader <williambader@hotmail.com> -Date: Sat Aug 1 15:23:03 2009 +0200 - - Add the possibility of disabling font substitution in pdftops - - Bug #23030 - - poppler/GlobalParams.cc | 17 +++++++++++++ - poppler/GlobalParams.h | 4 +++ - poppler/PSOutputDev.cc | 59 - ++++++++++++++++++++++++++-------------------- - poppler/PSOutputDev.h | 2 + - utils/pdftops.1 | 8 +++++- - utils/pdftops.cc | 7 +++++ - 6 files changed, 70 insertions(+), 27 deletions(-) - -commit bd68c90338cbf16f468e5db59722610300a629e1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Aug 1 15:19:48 2009 +0200 - - Forgot to add my copyright - - poppler/GfxState.h | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 173451730948c320f16a0f5924a58302603eca0b -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Aug 1 15:13:35 2009 +0200 - - Try to workaround some incorrect PDF - - Fixes rendering of PDF where forms/patterns have more q than Q. Fixes - rendering in splash of pdf in bugs #22835, #21899 and #16402 - - poppler/Gfx.cc | 13 +++++++++++++ - poppler/GfxState.h | 1 + - 2 files changed, 14 insertions(+), 0 deletions(-) - -commit 35c408ca49be08144bcf14aa112505fd556725d2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 31 23:27:02 2009 +0200 - - add the overloaded virtual warning also the autotools based build - - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 1c32bd2d101e5dfb37e28276ecad699f121b27b7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 31 23:22:25 2009 +0200 - - Add my copyright to files i just edited - - poppler/OutputDev.cc | 1 + - poppler/OutputDev.h | 1 + - utils/HtmlOutputDev.h | 2 +- - 3 files changed, 3 insertions(+), 1 deletions(-) - -commit 10717a48c85f1dbeff1c6bcd094006a9ecc92efc -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 31 23:22:10 2009 +0200 - - Add -Woverloaded-virtual as default CXX flag - - cmake/modules/PopplerMacros.cmake | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit db5f736655f01575ac5d7c524cbf131924ae91fa -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 31 23:12:00 2009 +0200 - - rename the function - - That way the name is different from the OutputDev function and does - not seem like a wrong overload - - utils/HtmlOutputDev.cc | 4 ++-- - utils/HtmlOutputDev.h | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -commit 4be87f87509b93c4fe4025f9bd788e9412416663 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 31 23:11:32 2009 +0200 - - Remove Outputdev::beginMarkedContent as noone uses it - - poppler/Gfx.cc | 2 -- - poppler/OutputDev.cc | 3 --- - poppler/OutputDev.h | 1 - - 3 files changed, 0 insertions(+), 6 deletions(-) - -commit 6ab2ec8a89519d2bd1576c8d62f8aec51b04479a -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 31 23:10:56 2009 +0200 - - Warning-- - - poppler/PSOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 53c3d636ad645a350b576160e1498726238a7bd1 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jul 31 18:23:57 2009 +0200 - - [cairo] Implement radialShadedFill in cairo backend using cairo - gradients - - Fixes bugs #10942, #14160 - - poppler/CairoOutputDev.cc | 28 +++++++++ - poppler/CairoOutputDev.h | 2 + - poppler/Gfx.cc | 141 - +++++++++++++++++++++++++++------------------ - poppler/OutputDev.h | 2 +- - poppler/PSOutputDev.cc | 3 +- - poppler/PSOutputDev.h | 2 +- - 6 files changed, 117 insertions(+), 61 deletions(-) - -commit 2ba937545d1a2b9fa798f04fee755ccdf0e74ec7 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jul 31 17:49:18 2009 +0200 - - [cairo] Use cairo_pattern_set_extend for linear gradients - - poppler/CairoOutputDev.cc | 9 +++++++++ - poppler/CairoOutputDev.h | 1 + - poppler/Gfx.cc | 34 ++++++++++++++++++++++++++++------ - poppler/OutputDev.h | 4 ++++ - 4 files changed, 42 insertions(+), 6 deletions(-) - -commit b054756113f0df6b59935823882f412486e96db5 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jun 17 11:10:15 2009 +0200 - - [cairo] Implement blend mdoes in cairo backend - - It requires cairo from git master to work at the moment. Fixes bugs - #22384, #12979, #13603, #17919, #22255 - - configure.ac | 27 ++++++++++++++++++++ - poppler/CairoOutputDev.cc | 59 - +++++++++++++++++++++++++++++++++++++++++++++ - poppler/CairoOutputDev.h | 1 + - 3 files changed, 87 insertions(+), 0 deletions(-) - -commit bf8964726c9311e7e82b1faf49cc2272e5c1e339 -Author: William Bader <williambader@hotmail.com> -Date: Thu Jul 30 22:08:43 2009 +0200 - - Fix some double to int warnings by explicit casting - - poppler/Gfx.cc | 7 ++++--- - 1 files changed, 4 insertions(+), 3 deletions(-) - -commit fdbd0c548e963461b2bc4bdf1beaa1577cafcea7 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 30 21:05:18 2009 +0200 - - Update gtk-doc build files - - gtk-doc.make | 102 - ++++++++++++++++++++++++++++++++++++++------------------ - m4/gtk-doc.m4 | 74 +++++++++++++++++++++++------------------ - 2 files changed, 110 insertions(+), 66 deletions(-) - -commit ae84dce5cea4d249526a6ed5b2feb2d3f241da1b -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 30 20:45:39 2009 +0200 - - Revert "Remove unneeded files from repo" - - This reverts commit 4cc9dee35e03d7b295a476f937ec0f2c43bb6592. - - See bug #22697. - - configure.ac | 2 +- - glib/reference/Makefile.am | 4 +- - gtk-doc.make | 155 - ++++++++++++++++++++++++++++++++++++++++++++ - m4/gtk-doc.m4 | 53 +++++++++++++++ - 4 files changed, 211 insertions(+), 3 deletions(-) - -commit 7e14516a78b16453c747eb92b08665632e5f6844 -Author: Sanjoy Mahajan <sanjoy@mit.edu> -Date: Mon Jul 27 23:20:50 2009 +0200 - - Fix displayPages call - - Parameters are outputdev, first, last, dpi, dpi, rotate, usemediabox, - crop, printing - and we were doing - usemediabox = !noCrop - crop = gFasle - the correct is - usemediabox = noCrop - crop = !noCrop - - utils/pdftops.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 3d53a0eb14420d54c0ebf8590e34c018b8da105d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jul 19 16:02:33 2009 +0200 - - Copy byte_lookup in copy constructor - - poppler/GfxState.cc | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 8f7271acf17c46e663cd48d90c382b04a834fba2 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jul 19 15:53:49 2009 +0200 - - Don't use byte_lookup table when color space doesn't support getLine - methods - - For color spaces that don't implement getRGBLine or getGrayLine - methods, - getRGB or getGray are called for every pixel, however we were - allocating - the byte_lookup table and converting colors in those cases - too. Instead - of falling back to generic methods in the base class, the new methods - useGetRGBLine and useGetGrayLine have been added to he base class, - so that - when they are not suopported in the current color space byte_lookup - table is - not used at all. - - Fixes bug #11027. - - poppler/GfxState.cc | 125 - ++++++++++++++++++++++++++++++--------------------- - poppler/GfxState.h | 21 +++++++- - 2 files changed, 91 insertions(+), 55 deletions(-) - -commit 1bc737796bef1c65289a101b2d4c367267b9c974 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jul 19 15:51:43 2009 +0200 - - Remove unused variable - - poppler/GfxState.h | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 512b2c654fd80c83b82e7adc828a478a18de17ab -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jul 26 19:35:06 2009 +0200 - - [cairo] Use CAIRO_EXTEND_PAD in drawImageMaskPrescaled too - - poppler/CairoOutputDev.cc | 32 +++++++++++++++----------------- - 1 files changed, 15 insertions(+), 17 deletions(-) - -commit ad26e34bede53cb6300bc463cbdcc2b5adf101c2 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jul 26 18:36:06 2009 +0200 - - [cairo] Use rectangle + clip instead of invert + tranform - - This is just for consistency of drawImage methods - - poppler/CairoOutputDev.cc | 30 ++++++++++++++---------------- - 1 files changed, 14 insertions(+), 16 deletions(-) - -commit ee6b761a55baef4c3bbe4614b0c3b3d761a3111f -Author: Chris Wilson <chris@chris-wilson.co.uk> -Date: Sun Jul 26 16:19:15 2009 +0200 - - [cairo] Apply a clip for masked drawImage - - In order to use EXTEND_PAD with a mask, we need to apply a clip (to - constrain the image to the appropriate region). The complicating - factor for - drawSoftImage() is that mask size is independent of the image size, - so we - need to compute the intersection of the mask with in the image - in userspace. - - poppler/CairoOutputDev.cc | 21 ++++++++++++++------- - 1 files changed, 14 insertions(+), 7 deletions(-) - -commit 499c6c972bac14936b5370276da723a6e98861b3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jul 26 11:30:08 2009 +0200 - - [cairo] Use CAIRO_EXTEND_PAD when drawing images - - poppler/CairoOutputDev.cc | 306 - +++++++++++++++++++++------------------------ - 1 files changed, 140 insertions(+), 166 deletions(-) - -commit f91eb7d01cef0897727c63267db309bc92297d37 -Author: Koji Otani <sho@bbr.jp> -Date: Sat Jul 25 16:34:12 2009 +0200 - - Fix generation of ps for some files - - For example fixes second pdf in bug 18908 - - poppler/PSOutputDev.cc | 68 - ++++++++++++++++++++++++++++++++++++------------ - 1 files changed, 51 insertions(+), 17 deletions(-) - -commit f93f5e17d8f23f3e2862f3411f43a95b334e6c91 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Jul 20 17:10:37 2009 +0200 - - [cairo] Improve performance when rendering one-channel images - - It implements the same idea already used in SplashOutputDev, for - one-channel (monochrome/gray/separation) images we build a lookup - table - so that we won't need to call colorMap->getRGBLine when filling the - image buffer. Fixes bug #18017. - - poppler/CairoOutputDev.cc | 36 ++++++++++++++++++++++++++++++++++-- - 1 files changed, 34 insertions(+), 2 deletions(-) - -commit e7475062b6ae5c495fa72faaf8fb3d97391f8544 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jul 14 17:22:52 2009 +0200 - - [cairo] Handle fontType1COT fonts in CairoFontEngine - - poppler/CairoFontEngine.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit d42b9425fb2f98fa79e7a60e4f71ef14f5bacfe9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jul 12 19:55:14 2009 +0200 - - glade is not used anymore - - cmake/modules/FindGTK.cmake | 9 ++++----- - 1 files changed, 4 insertions(+), 5 deletions(-) - -commit 454f7468c6a6a442a5064b5daa24d65ebf4fc6b6 -Author: Chris Wilson <chris@chris-wilson.co.uk> -Date: Thu Jul 9 10:43:00 2009 +0100 - - [cairo] Fix drawImage() for non-1x1 images - - Carlos noticed a nasty bug with converting drawImage() to use PAD - + fill, - instead of NONE + paint. That is the image was being padded out - far beyond - the correct output extents. The cause is that the caller pre-scales - the - context for the image, so the output rectangle was many times the true - image size - obliterating large amounts of the page. The temporary - fix is - to counter-act the scaling on the context. Longer term, after - fixing all - painters to use PAD correctly, we need to review the callers to remove - unnecessary pre-scaling. - - poppler/CairoOutputDev.cc | 16 ++++++++++++---- - 1 files changed, 12 insertions(+), 4 deletions(-) - -commit f8d93eae3c7b9388feabac71f2380d0b42a855e7 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jul 8 20:14:35 2009 +0200 - - Lookup UF and F entries before Unix, MAC and DOS in getFileSpec - - poppler/FileSpec.cc | 24 ++++++++++++------------ - 1 files changed, 12 insertions(+), 12 deletions(-) - -commit 767c534f5fdf6ccbccfd85a0086d72c215c278f1 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jul 8 19:13:54 2009 +0200 - - Use UF entry when present in dict in getFileSpecName() too - - poppler/FileSpec.cc | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 569627ac4d56ddd58e109ce2a37179a85e042030 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jul 8 13:02:16 2009 +0200 - - Implement axialShadedFill in cairo backend using cairo gradients - - See bug #10942. - - poppler/CairoOutputDev.cc | 29 +++++++++++++++++++++++++++++ - poppler/CairoOutputDev.h | 10 ++++++++++ - poppler/Gfx.cc | 29 ++++++++++++++++++++--------- - poppler/OutputDev.h | 6 +++++- - poppler/PSOutputDev.cc | 2 +- - poppler/PSOutputDev.h | 2 +- - 6 files changed, 66 insertions(+), 12 deletions(-) - -commit 6ae0a6c0044713affa23eb1ee6a070785ed6c2f3 -Author: Chris Wilson <chris@chris-wilson.co.uk> -Date: Wed Jul 8 16:48:26 2009 +0100 - - [cairo] premultiply image mask - - Cairo uses a premultiplied colour-space, so when creating the - image mask - in drawImage() we need to remember to multiply by the alpha. In - this case - it just requires zeroing out the masked pixels. - - poppler/CairoOutputDev.cc | 9 +++++++-- - 1 files changed, 7 insertions(+), 2 deletions(-) - -commit 646e5884e748ecce7094c673400484aa1d902bdd -Author: Chris Wilson <chris@chris-wilson.co.uk> -Date: Wed Jul 8 17:00:34 2009 +0100 - - [cairo] maskColors is an array of ints, no scaling required - - drawImage() was erroneously scaling the maskColors from what it - believed - to be [0:1] to [0:255]. However maskColors is already an integer - array, - [0:255]. - - poppler/CairoOutputDev.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit d75feb1ee84385a9f94308cf47a43f4583092ddf -Author: Chris Wilson <chris@chris-wilson.co.uk> -Date: Wed Jul 8 16:37:19 2009 +0100 - - [cairo] cleanse DrawImage() - - Just a small bit of code rearrangement to reduce repetition and - invalid checks. - - poppler/CairoOutputDev.cc | 102 - ++++++++++++++++++--------------------------- - 1 files changed, 41 insertions(+), 61 deletions(-) - -commit 52f3704fed16cfc1e9dd85f72dde7922371e4099 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jul 8 11:40:52 2009 +0200 - - [TODO] Update TODO file - - TODO | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit ef261f5f72d37a0aa2709611ee2bad7d55340ed8 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jul 7 10:57:31 2009 +0200 - - Do not use F and UF entries if Unix or DOS are present in FileSpec - dict - - poppler/FileSpec.cc | 114 - +++++++++++++++++++++++---------------------------- - 1 files changed, 51 insertions(+), 63 deletions(-) - -commit cafd4653dc6c7574214e80aa09489dcd24e347a6 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jul 1 11:41:32 2009 +0200 - - [glib-demo] Fix a typo - - glib/demo/utils.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit a3c9c6d0c0ee55dccd2d03f20d5683ae300cdc6b -Author: Pino Toscano <pino@kde.org> -Date: Wed Jul 8 02:01:39 2009 +0200 - - start updating the TODO file - - TODO file had quite some rust and dust in it, making quite "difficult" - for others to understand what can be done for helping. - First step has been removing all the items done. - Next is grouping items by areas, so it is more clear what should be - done in what area; current areas are: - - general items: for general stuff to be done, not specific to some - area; an example could have been "use littlecms for color management?" - - core: stuff which is specific to the core library - - Qt4/Qt/glib/etc frontend: stuff specific for that frontend - - new frontends: ideas for possible new frontends - - I was not sure about some items and Jeff Muizelaar's TODO, so I left - them there. - - TODO | 47 +++++++++++++++-------------------------------- - 1 files changed, 15 insertions(+), 32 deletions(-) - -commit 92ad0ef89fe7690d83854b4821178dfdb2e22897 -Author: Pino Toscano <pino@kde.org> -Date: Sat Jul 4 00:19:23 2009 +0200 - - [Qt4 demo] hopefully fix the page size on zoom change - - qt4/demos/pageview.cpp | 5 +---- - 1 files changed, 1 insertions(+), 4 deletions(-) - -commit 97094d13bc0f144b25e13c1de7a5328608ab13e3 -Author: Pino Toscano <pino@kde.org> -Date: Sat Jul 4 00:07:12 2009 +0200 - - [Qt4 demo] show a list of checked/unchecked items for the document - permissions - - qt4/demos/permissions.cpp | 25 ++++++++----------------- - qt4/demos/permissions.h | 6 +++--- - 2 files changed, 11 insertions(+), 20 deletions(-) - -commit 0d8f2ee0f03a14e7b8477c4b787c3441a758f26b -Author: Pino Toscano <pino@kde.org> -Date: Fri Jul 3 23:55:42 2009 +0200 - - [Qt4 demo] show page numbers in the toolbar as 1..n - - qt4/demos/navigationtoolbar.cpp | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit b0d48df9121c55f8162ddf0ee63832f9adebf37b -Author: Pino Toscano <pino@kde.org> -Date: Fri Jul 3 17:55:31 2009 +0200 - - [Qt4 demo] correctly use DPI values for the page sizes - - qt4/demos/pageview.cpp | 12 +++++++++--- - qt4/demos/pageview.h | 2 ++ - 2 files changed, 11 insertions(+), 3 deletions(-) - -commit dcc3c384919f1562b8f312ad3ac847e23f3e83ab -Author: Sebastien Bacher <seb128@ubuntu.com> -Date: Wed Jul 1 10:09:12 2009 +0200 - - [test] Use gtkbuilder rather than libglade - - Fixes bug #21673 - - cmake/modules/FindGTK.cmake | 1 - - configure.ac | 4 +- - test/Makefile.am | 2 +- - test/pdf-inspector.cc | 34 ++-- - test/pdf-inspector.glade | 434 - ------------------------------------------- - test/pdf-inspector.ui | 416 - +++++++++++++++++++++++++++++++++++++++++ - 6 files changed, 439 insertions(+), 452 deletions(-) - -commit 28208d1c9b8afbb769a5f4d9b0655b99fd4af16e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jul 1 09:52:12 2009 +0200 - - [glib-demo] Do not use gio if glib < 2.15 - - Fixes bug #22530. - - glib/demo/main.c | 33 +++++++++++++++++++++++++++++++-- - 1 files changed, 31 insertions(+), 2 deletions(-) - -commit 6ef83414ab55294cf46b6b05813927bb04066986 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 30 23:07:00 2009 +0200 - - Check getFileSpecNameForPlatform succeeded before using it's return - value - - Fixes crash on bug 22551 - - poppler/Annot.cc | 7 ++++--- - poppler/Link.cc | 30 +++++++++++++++++------------- - poppler/Sound.cc | 8 +++++--- - 3 files changed, 26 insertions(+), 19 deletions(-) - -commit 4b9db83841a8b97df1e0991c1b853897b7095777 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jun 30 11:24:29 2009 +0200 - - [glib-demo] Do not fill the surface before rendering - - The surface is guaranteed to be cleared - - glib/demo/render.c | 11 ++--------- - 1 files changed, 2 insertions(+), 9 deletions(-) - -commit 5deb6db5d340c08f337d2ba67aa1fd690e4eedd8 -Author: William Bader <williambader@hotmail.com> -Date: Mon Jun 29 21:55:49 2009 +0200 - - Fix interpolate parameter position - - poppler/SplashOutputDev.cc | 3 ++- - utils/ImageOutputDev.cc | 5 +++-- - 2 files changed, 5 insertions(+), 3 deletions(-) - -commit e1e9ae2826eff1665d798b4b50b5c63e8282246b -Author: Pino Toscano <pino@kde.org> -Date: Sun Jun 28 20:11:42 2009 +0200 - - [Qt4 demo] do not crash when changing the zoom with no document - - qt4/demos/pageview.cpp | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit a98de97137cb343182bd03c443fc08ff4e0fd9a5 -Author: Pino Toscano <pino@kde.org> -Date: Sun Jun 28 19:08:02 2009 +0200 - - [Qt4 demo] add a zoom combobox - - qt4/demos/navigationtoolbar.cpp | 33 ++++++++++++++++++++++++++++++++- - qt4/demos/navigationtoolbar.h | 7 ++++++- - qt4/demos/pageview.cpp | 14 ++++++++++++-- - qt4/demos/pageview.h | 6 +++++- - qt4/demos/viewer.cpp | 2 ++ - 5 files changed, 57 insertions(+), 5 deletions(-) - -commit 40002d2c765398869a3b7d8d92715f0608e39ab3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 28 16:45:19 2009 +0200 - - Make sure the array is big enough to read from it - - poppler/Gfx.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0a1b41ff6de5a41e3450ecbcb1ba754dc06c29d9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jun 26 19:31:22 2009 +0200 - - Do not crash when we can't find onStr - - Fixes crash in bug #22485 - Not sure this is the best solution, but Adobe doesn't even open - the file - - poppler/Form.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 6cb846664e57b02c99f1e6ad2b4e9128c9622e0a -Author: Ilya Gorenbein <igorenbein@finjan.com> -Date: Thu Jun 25 20:13:29 2009 +0200 - - Initilize AnnotColot properly when the Array is not correct - - poppler/Annot.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 5fdc3acb8dded2e7d08e6ef30f4c5ae1a4a11b5e -Author: Till Kamppeter <till.kamppeter@gmail.com> -Date: Mon Jun 22 21:38:23 2009 +0200 - - Only change the page size when it really changes, otherwise duplex - commands are lost - - poppler/PSOutputDev.cc | 10 +++++++++- - poppler/PSOutputDev.h | 4 ++++ - 2 files changed, 13 insertions(+), 1 deletions(-) - -commit bf69beeb257cfd750c6ddc8b68aeb859b36380b2 -Author: David Benjamin <davidben@mit.edu> -Date: Sat Jun 20 23:51:09 2009 +0200 - - Make DecryptStream return sane values for getPos() - - Many streams (notably JBIG2Stream) expect wrapped streams to return - correct - values for getPos(), i.e. increments by 1 when readChar() called, etc. - Fixes bug #19706. - - poppler/Decrypt.cc | 8 ++++++++ - poppler/Decrypt.h | 3 +++ - 2 files changed, 11 insertions(+), 0 deletions(-) - -commit 5ee4ff2aaf98e2eaa1ec2dc9f7e659b3b01ba7bf -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jun 20 15:00:16 2009 +0200 - - [glib-demo] Allow using relative paths in demo application - - glib/demo/main.c | 17 +++++------------ - 1 files changed, 5 insertions(+), 12 deletions(-) - -commit a568248d3255407fcaa7368c4925c20e95619d20 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jun 19 21:07:39 2009 +0200 - - 0.11.1 - - CMakeLists.txt | 2 +- - NEWS | 50 - ++++++++++++++++++++++++++++++++++++++++++++++++-- - configure.ac | 2 +- - msvc/config.h | 6 +++--- - qt4/src/Doxyfile | 2 +- - 5 files changed, 54 insertions(+), 8 deletions(-) - -commit ac99e239f2726db32617ff03174a6ce74361ea1b -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jun 19 21:03:29 2009 +0200 - - ship PopplerCache.h - - CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 84984d2aa25917d68c9971cefe636e626eada13d -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jun 19 20:54:15 2009 +0200 - - Ship PopplerCache.h too - - poppler/Makefile.am | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 3a52d46e5df8eb926b550d7f7a82f316dbf6808f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jun 19 17:45:44 2009 +0200 - - [glib-demo] Destroy pattern after using it - - glib/demo/render.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 2e97524e5d82a4c33a4e6410fead444681db6749 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jun 19 14:20:16 2009 +0200 - - [glib-demo] Use a transparent surface and fill it in white after - rendering - - glib/demo/render.c | 12 +++++++++--- - 1 files changed, 9 insertions(+), 3 deletions(-) - -commit 009937842d5a8bfc12394e9e3ab71b7c33340a85 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jun 19 14:10:05 2009 +0200 - - [glib-demo] Use cairo_paint instead of rectangle + fill - - glib/demo/render.c | 3 +-- - 1 files changed, 1 insertions(+), 2 deletions(-) - -commit 7248da095f67d57c3999cee7d980e62fd8a7cf49 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jun 19 09:37:02 2009 +0200 - - Use Interpolate flag to decide whether applying image interpolation - during rendering - - Fixes bug #9860 - - poppler/ArthurOutputDev.cc | 4 +- - poppler/ArthurOutputDev.h | 5 +- - poppler/CairoOutputDev.cc | 92 - +++++++++++++++++++++++++------------------ - poppler/CairoOutputDev.h | 48 +++++++++++++---------- - poppler/Gfx.cc | 49 +++++++++++++++++++--- - poppler/OutputDev.cc | 17 +++++--- - poppler/OutputDev.h | 13 ++++-- - poppler/PSOutputDev.cc | 8 ++- - poppler/PSOutputDev.h | 8 ++- - poppler/PreScanOutputDev.cc | 25 ++++++++++-- - poppler/PreScanOutputDev.h | 25 ++++++++++-- - poppler/SplashOutputDev.cc | 16 +++++-- - poppler/SplashOutputDev.h | 12 ++++-- - utils/HtmlOutputDev.cc | 16 ++++---- - utils/HtmlOutputDev.h | 7 ++- - utils/ImageOutputDev.cc | 20 +++++----- - utils/ImageOutputDev.h | 12 ++++-- - 17 files changed, 248 insertions(+), 129 deletions(-) - -commit 37e3f877ee725648734ff41e1e83870a210bcbd7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jun 19 00:37:21 2009 +0200 - - Handle Streams in CMap definitions - - Fixes bug 22334 - - poppler/CMap.cc | 50 - +++++++++++++++++++++++++++++----------------- - poppler/CMap.h | 17 +++++++++++---- - poppler/GfxFont.cc | 41 ++++++++++++++++++++++++++------------ - poppler/GlobalParams.cc | 6 ++-- - poppler/GlobalParams.h | 5 ++- - 5 files changed, 77 insertions(+), 42 deletions(-) - -commit 47de8eef46300832556ce5ed869e391e477fd843 -Author: David Benjamin <davidben@mit.edu> -Date: Fri Jun 19 00:30:35 2009 +0200 - - Fix some bugs in JBIG2Stream handling - - For more info see bug 12014 and [poppler] Bug in JBIG2Stream from - 08-June-2009 - - poppler/JBIG2Stream.cc | 88 - ++++++++++++++++++++++++++---------------------- - poppler/JBIG2Stream.h | 15 ++++++++ - 2 files changed, 63 insertions(+), 40 deletions(-) - -commit d30b1013ea3ce45b5ea942fe7357c0fd07ff47f4 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jun 2 11:44:08 2009 +0200 - - Add setOpen() and setIcon() in AnnotText - - poppler/Annot.cc | 25 +++++++++++++++++++++++++ - poppler/Annot.h | 3 +++ - 2 files changed, 28 insertions(+), 0 deletions(-) - -commit 287feffc1c1c0aa42a398fc071b489acef9ef22e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jun 2 11:26:40 2009 +0200 - - Add setLabel() and setPopup() to AnnotMarkup - - poppler/Annot.cc | 36 ++++++++++++++++++++++++++++++++++++ - poppler/Annot.h | 4 ++++ - 2 files changed, 40 insertions(+), 0 deletions(-) - -commit 2a938af5624fbc79316dd6bee5e550f2b4270a76 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jun 2 10:59:44 2009 +0200 - - Add setParent() and setOpen() to AnnotPopup - - poppler/Annot.cc | 19 +++++++++++++++++++ - poppler/Annot.h | 4 ++++ - 2 files changed, 23 insertions(+), 0 deletions(-) - -commit 0af5464352dfa51f0458c57a3590c847a45964c7 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jun 2 10:37:49 2009 +0200 - - Save parent reference of popup annotations - - poppler/Annot.cc | 16 +++++----------- - poppler/Annot.h | 4 ++-- - 2 files changed, 7 insertions(+), 13 deletions(-) - -commit fc4bc43dcd6f6871a47b9198e8c2571a5d448c3e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Jun 1 14:52:21 2009 +0200 - - Fix a crash in pdf-inspector - - test/pdf-inspector.cc | 11 +++++++++++ - 1 files changed, 11 insertions(+), 0 deletions(-) - -commit 3da7a2657892fde52b62e1f73476cb33d6c75e96 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri May 29 13:35:39 2009 +0200 - - Add Annot::setColor() - - poppler/Annot.cc | 19 ++++++++++++++++++- - poppler/Annot.h | 6 +++++- - 2 files changed, 23 insertions(+), 2 deletions(-) - -commit 3eabdf57729852205855cf74ff2d2f9d7bc03f73 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri May 29 13:23:26 2009 +0200 - - Add construtors to create AnnotColor objects directly from color - values - - poppler/Annot.cc | 26 ++++++++++++++++++++++++++ - poppler/Annot.h | 3 +++ - 2 files changed, 29 insertions(+), 0 deletions(-) - -commit 8045e7a1a84a3d54a1c9415ac63b5b9df5ecc349 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri May 29 13:06:40 2009 +0200 - - Add Page::addAnnot() to add a new annotation to the page - - poppler/Page.cc | 28 ++++++++++++++++++++++++++++ - poppler/Page.h | 2 ++ - 2 files changed, 30 insertions(+), 0 deletions(-) - -commit fe80eb84ec711b7400cef95e791a74c8fd259af7 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri May 29 13:00:19 2009 +0200 - - Add getRef() to get the annotation reference - - poppler/Annot.h | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 1c92657be72c44dba7185808ffb00dd85c5ab289 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri May 29 12:14:02 2009 +0200 - - Save page object and ref in Page class - - This is needed to be able to modify the page object. - - poppler/Catalog.cc | 2 +- - poppler/Page.cc | 6 +++++- - poppler/Page.h | 4 +++- - 3 files changed, 9 insertions(+), 3 deletions(-) - -commit 4ad2d663262008e4b97342c4ed67c686ff5abd13 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri May 29 11:43:30 2009 +0200 - - Add annot constructors to create annot objects without a dict - - This allows to create annotation objects to be added to the document. - Required fields on the annotation dictionary are constructor - arguments, - setters will be added for the other fields. - - poppler/Annot.cc | 300 - ++++++++++++++++++++++++++++++++++++++++++++++++++++- - poppler/Annot.h | 22 ++++- - 2 files changed, 315 insertions(+), 7 deletions(-) - -commit e5c4862b0c1b08a0fab47070cb9c862026e93567 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jun 10 23:28:03 2009 +0200 - - ignore++ - - m4/.gitignore | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 572779f8037763c1e0ee64c47a3dad6df0d3b693 -Author: Koji Otani <sho@bbr.jp> -Date: Wed Jun 10 22:55:26 2009 +0200 - - Fix dashed line in page 1 of bug 20011 - - poppler/Gfx.cc | 6 ++---- - 1 files changed, 2 insertions(+), 4 deletions(-) - -commit b97591672e0d9c31a3d044fe52e34cc80a491221 -Author: Koji Otani <sho@bbr.jp> -Date: Wed Jun 10 22:54:57 2009 +0200 - - Fix "Conditional jump or move depends on uninitialised value" - - When stroking with a pattern, set strokeColor with a copy of - fillColor. - This is wrong and the fillColor may be uninitialized. - See bug 20011 - - poppler/Gfx.cc | 13 +++++++++++-- - 1 files changed, 11 insertions(+), 2 deletions(-) - -commit a92b38836b1e4475d5a7a1b9cb8f3e9429cef275 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 9 22:39:19 2009 +0200 - - Correctly duplicate the cache on PostScriptFunction(PostScriptFunction - *func) - - poppler/Function.cc | 28 ++++++++++++++++++++++++++++ - poppler/PopplerCache.cc | 20 ++++++++++++++++++++ - poppler/PopplerCache.h | 14 ++++++++++++++ - 3 files changed, 62 insertions(+), 0 deletions(-) - -commit 2cecdf922f4c8178b0e55d3ddf86c31f8be3313a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jun 9 11:04:39 2009 +0200 - - [glib] Fix a crash when a destination points to an invalid page - - glib/poppler-action.cc | 21 +++++++++++++-------- - 1 files changed, 13 insertions(+), 8 deletions(-) - -commit 831288c13c3a7502bbccd1313c6e376283be367c -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 7 18:37:20 2009 +0200 - - Optimize roll() a bit - - If the number of times to roll is > than half the number of items - rotate in the reverse direction - Makes it be 33% of exec() instead of 42% - - poppler/Function.cc | 19 ++++++++++++++----- - 1 files changed, 14 insertions(+), 5 deletions(-) - -commit 3d40dcad850a2bc0e28845a15722db0c79920135 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 7 13:38:50 2009 +0200 - - Move the GfxState cache to the new poppler cache class - - poppler/GfxState.cc | 97 - ++++++++++++++++++++++++--------------------------- - poppler/GfxState.h | 19 ++-------- - 2 files changed, 49 insertions(+), 67 deletions(-) - -commit 2619e09833f421fb3d8cc68d41d15081ae6824e4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 7 13:37:40 2009 +0200 - - Implement a cache for PostscriptFunction transforms - - Makes time of rendering of bug 21562 go down from 24 to 8 seconds - - poppler/Function.cc | 76 - +++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Function.h | 2 + - 2 files changed, 78 insertions(+), 0 deletions(-) - -commit 588bfe3c14f42be492066c2a98e30482475a6926 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 7 13:36:39 2009 +0200 - - Add a code to a generic cache based on Koji's code for GfxState cache - - CMakeLists.txt | 1 + - poppler/Makefile.am | 1 + - poppler/PopplerCache.cc | 82 - +++++++++++++++++++++++++++++++++++++++++++++++ - poppler/PopplerCache.h | 47 +++++++++++++++++++++++++++ - 4 files changed, 131 insertions(+), 0 deletions(-) - -commit d09478fcc44b5c594f1803fc24654af5e10fa129 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 7 01:34:01 2009 +0200 - - Move index and pop to class definition too - - poppler/Function.cc | 32 +++++++++++++++----------------- - 1 files changed, 15 insertions(+), 17 deletions(-) - -commit 2083264e8ab0fd9976294de08a18de615d5a1168 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 7 01:21:19 2009 +0200 - - Move the implementations to the class definition - - Make gcc inline the functions and time to render a heavy PSFunction - doc goes from 28 to 20 secs - - poppler/Function.cc | 151 - ++++++++++++++++++++++++--------------------------- - 1 files changed, 71 insertions(+), 80 deletions(-) - -commit 24580fcd2be74db5f3140bdb2ebff8431b7d3f1e -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jun 6 16:17:26 2009 +0200 - - Add a debug saying how much rendering took - - qt4/tests/test-poppler-qt4.cpp | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 50cf7cffff760e41774957ad8f1f92803142438e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jun 6 16:04:54 2009 +0200 - - Use g_path_get_basename instead of g_basename in gtk-cairo-test - - Fixes bug #21361. - - test/gtk-cairo-test.cc | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit 4cc9dee35e03d7b295a476f937ec0f2c43bb6592 -Author: Christian Persch <chpe@gnome.org> -Date: Sat Jun 6 12:13:48 2009 +0200 - - Remove unneeded files from repo - - See bug #22094 - - configure.ac | 2 +- - glib/reference/Makefile.am | 4 +- - gtk-doc.make | 155 - -------------------------------------------- - m4/gtk-doc.m4 | 53 --------------- - 4 files changed, 3 insertions(+), 211 deletions(-) - -commit c94e476dbff9e527c72e52377d830f35f29ba3d6 -Author: Pino Toscano <pino@kde.org> -Date: Fri Jun 5 11:09:44 2009 +0200 - - when showing the tooltip for a text rect, show also its index in - the page text boxes list - - qt4/tests/test-poppler-qt4.cpp | 6 +++++- - 1 files changed, 5 insertions(+), 1 deletions(-) - -commit 2298acac267257b1916c802bdb902428e69e683b -Author: Pino Toscano <pino@kde.org> -Date: Fri Jun 5 11:08:51 2009 +0200 - - [Qt4 apidox] FontInterator is new in 0.12 - - qt4/src/poppler-qt4.h | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 37c48c2521c623c485841472c4a174a1841aea33 -Author: Pino Toscano <pino@kde.org> -Date: Fri Jun 5 10:54:30 2009 +0200 - - [CMake] Add poppler version defines and version check macro - - Add POPPLER_[MAJOR|MINOR|MICRO]_VERSION defines and - POPPLER_CHECK_VERSION macro. FDO bug #22091. - - CMakeLists.txt | 5 ++++- - glib/poppler-features.h.cmake | 9 +++++++++ - 2 files changed, 13 insertions(+), 1 deletions(-) - -commit 26f6fb1d79c2589829cd896d57da63d16641f307 -Author: Pino Toscano <pino@kde.org> -Date: Fri Jun 5 10:51:26 2009 +0200 - - [CMake] switch poppler-features.h.cmake to a more autotools-like - syntax - - glib/CMakeLists.txt | 2 +- - glib/poppler-features.h.cmake | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 89704635b727db42f6c72ba101091eb7eddb967a -Author: Pino Toscano <pino@kde.org> -Date: Fri Jun 5 10:39:17 2009 +0200 - - [Qt4 demo] compile the new thumbnail module with autotools as well - - qt4/demos/Makefile.am | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 291bafe64c8755fe5f85a51b184ac6e3d3170e1d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jun 5 10:07:16 2009 +0200 - - [glib] Use g_strerror instead of strerror - - Fixes bug #22095. - - glib/poppler-document.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0ca7e214fb5f9c9fb59792149bd23c1617d38cac -Author: Christian Persch <chpe@gnome.org> -Date: Thu Jun 4 22:35:40 2009 +0200 - - Add poppler version defines and version check macro - - Add POPPLER_[MAJOR|MINOR|MICRO]_VERSION defines and - POPPLER_CHECK_VERSION macro. FDO bug #22091. - - configure.ac | 11 ++++- - glib/poppler-features.h.in | 9 +++ - glib/reference/poppler-docs.sgml | 1 + - glib/reference/poppler-sections.txt | 10 ++++ - glib/reference/tmpl/poppler-features.sgml | 80 - +++++++++++++++++++++++++++++ - 5 files changed, 110 insertions(+), 1 deletions(-) - -commit 4ce04da0040e5a2626c110f94a128e2d272401b9 -Author: Matthias Drochner <M.Drochner@fz-juelich.de> -Date: Thu Jun 4 23:05:22 2009 +0200 - - Use the correct value when creating the V field - - PDF Spec says: - For items represented in the Opt array by a two-element array, - the name string is the second of the two array elements. - - poppler/Form.cc | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit 7e01e37a834bfdd75d739ea2b48e9127ca7f259e -Author: Till Kamppeter <till.kamppeter@gmail.com> -Date: Thu Jun 4 20:25:55 2009 +0200 - - Add part of fix for bug 20420, the other part was checked in with - Thomas patches - - poppler/PSOutputDev.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 50a7b4bcaa6e5f56cc25fe6936f9dc537a1b4b37 -Author: Jeremy C. Reed <reed@reedmedia.net> -Date: Thu Jun 4 20:19:03 2009 +0200 - - [glib] Hyphenate UTF-8 and UTF-16BE - - Fixes bug #21953. - - where iconv() is called to fill in a text field, use "UTF-8" and - "UTF-16BE" as encoding names rather than the less portable - "UTF8" and "UTF16BE" -- this makes it work on NetBSD. - - glib/poppler-annot.cc | 2 +- - glib/poppler-form-field.cc | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -commit 2cf9e6a2318b770ae62572944c687576d1801d31 -Author: Till Kamppeter <till.kamppeter@gmail.com> -Date: Thu Jun 4 19:48:42 2009 +0200 - - Support multiple page sizes when converting to PS - - Fixes byg #19777 - - poppler/PSOutputDev.cc | 31 +++++++++++++++++++++++++++++-- - poppler/PSOutputDev.h | 4 +++- - utils/pdftops.1 | 26 +++++++++++++++++++++----- - utils/pdftops.cc | 17 ++++++++++++----- - 4 files changed, 65 insertions(+), 13 deletions(-) - -commit 30fb7cb7e47cf6a8008c5083c8d0978fdfdf8e62 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jun 4 19:25:22 2009 +0200 - - Add missing { } - - poppler/Gfx.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 1beec21ed3a016998fee3849d460166895db9047 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jun 3 22:37:43 2009 +0200 - - Give an error when using level1sep without having CMYK support - - Fixes bug #22026 - - poppler/PSOutputDev.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit e80d645c34c7d44d1f35da0a25669d1c4cde6e7f -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jun 3 22:00:49 2009 +0200 - - Also accept tokens with to leading 00 - - Fixes bug 22025, based on a patch by William Bader - - poppler/CharCodeToUnicode.cc | 9 ++++++--- - 1 files changed, 6 insertions(+), 3 deletions(-) - -commit e521c1efaeba3f35d10e46bca3d9650dabd2d889 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Wed Jun 3 22:08:57 2009 +0930 - - Implement text in pattern colorspace for the cairo backend - - poppler/CairoOutputDev.cc | 47 - +++++++++++++++++++++++++++++++++++++++++++++ - poppler/CairoOutputDev.h | 19 ++++++++++++++++++ - 2 files changed, 66 insertions(+), 0 deletions(-) - -commit a87978b09a026b2db6b0f80271d87b44b336a121 -Author: Pino Toscano <pino@kde.org> -Date: Wed Jun 3 13:49:56 2009 +0200 - - [Qt4 demo] show the checksum for embedded files - - qt4/demos/embeddedfiles.cpp | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit db5102842494a124d813db1696bb60820db3442b -Author: Pino Toscano <pino@kde.org> -Date: Wed Jun 3 13:21:22 2009 +0200 - - [Qt4 demo] remove checks for Qt >= 4.2 - - poppler-qt4 requires Qt 4.3, so checking for 4.2 is no more needed - - qt4/demos/embeddedfiles.cpp | 2 -- - qt4/demos/fonts.cpp | 2 -- - qt4/demos/info.cpp | 2 -- - qt4/demos/optcontent.cpp | 2 -- - qt4/demos/permissions.cpp | 2 -- - qt4/demos/toc.cpp | 2 -- - 6 files changed, 0 insertions(+), 12 deletions(-) - -commit e8d897581656ee4a20e9bb87dd999425663ace3b -Author: Pino Toscano <pino@kde.org> -Date: Wed Jun 3 02:54:29 2009 +0200 - - [Qt4 demo] simplier way to change page from the thumbnail view - - qt4/demos/pageview.cpp | 5 ----- - qt4/demos/pageview.h | 3 --- - qt4/demos/thumbnails.cpp | 2 +- - qt4/demos/thumbnails.h | 3 --- - qt4/demos/viewer.cpp | 1 - - 5 files changed, 1 insertions(+), 13 deletions(-) - -commit f69a4fe47d3478cccbc03e4ac0929c7eada681c0 -Author: Pino Toscano <pino@kde.org> -Date: Wed Jun 3 01:24:21 2009 +0200 - - [Qt4 demo] Add a thumbnail dock widget - - Useful to show the embedded page thumbnails in the document, if any. - Based on a patch by Shawn Rutledge <shawn.t.rutledge@gmail.com>, - reworked by me to be a QListWidget showing the page items at their - full size. - - qt4/demos/CMakeLists.txt | 1 + - qt4/demos/thumbnails.cpp | 84 - ++++++++++++++++++++++++++++++++++++++++++++++ - qt4/demos/thumbnails.h | 51 ++++++++++++++++++++++++++++ - qt4/demos/viewer.cpp | 11 +++++- - 4 files changed, 146 insertions(+), 1 deletions(-) - -commit 2f24ac0f4bbd6de1c9f137110b3ac2bd3b23b0b9 -Author: Shawn Rutledge <shawn.t.rutledge@gmail.com> -Date: Wed Jun 3 01:22:31 2009 +0200 - - [Qt4 demo] add a public slot to set the current page - - qt4/demos/pageview.cpp | 5 +++++ - qt4/demos/pageview.h | 3 +++ - 2 files changed, 8 insertions(+), 0 deletions(-) - -commit 1f1baf186f9e37606765e51ec5b9893ddfbfa893 -Author: Shawn Rutledge <shawn.t.rutledge@gmail.com> -Date: Wed Jun 3 01:19:16 2009 +0200 - - [Qt4] Add Page::thumbnail() - - This function can be used to get the embedded thumbnail of the page, - present in the document. - Reindented by me, and avoid a memory leak because of non-freed data. - - qt4/src/poppler-page.cc | 21 ++++++++++++++++++++- - qt4/src/poppler-qt4.h | 11 +++++++++++ - 2 files changed, 31 insertions(+), 1 deletions(-) - -commit 5cc24be1e9af0a27ab88ffa719bcabc2378868e4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jun 3 00:05:54 2009 +0200 - - Remove unused variables - - poppler/SplashOutputDev.cc | 3 --- - 1 files changed, 0 insertions(+), 3 deletions(-) - -commit 45823bf8f4abacbbf257f6708264de074eda3cf4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jun 3 00:02:54 2009 +0200 - - Make it compile :-/ - - poppler/SplashOutputDev.cc | 8 ++++++-- - 1 files changed, 6 insertions(+), 2 deletions(-) - -commit f5ae14907261a46c121f3ed7aea9d7ad9b9c55de -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 2 23:52:59 2009 +0200 - - Really fix the typo - - README | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 5d4b1995cdd57db7cef3d88704850aaf66ed7fff -Author: William Bader <williambader@hotmail.com> -Date: Tue Jun 2 23:10:53 2009 +0200 - - Fix three typos in README - - README | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 104f9286ceb5fcb5f4795bca7633029142d5f6a4 -Author: Thomas Freitag <Thomas.Freitag@alfa.de> -Date: Tue Jun 2 22:59:42 2009 +0200 - - Support colorizing text in pattern colorspace - - This implements commits the final patches for bug 19670 and 19994 - Also fixes bugs 15819 and 2807 - Also implements blending for SPLASH_CMYK in Splash - It's a quite big change but i've done regression testing over my whole - pdf suite and did not fit anything that went worse, just improvements - Missing the Cairo support - - CMakeLists.txt | 1 + - poppler/Gfx.cc | 135 ++++++++++++--- - poppler/Gfx.h | 7 + - poppler/GfxState.cc | 58 +------ - poppler/GfxState_helpers.h | 80 +++++++++ - poppler/Makefile.am | 1 + - poppler/OutputDev.h | 14 ++ - poppler/PSOutputDev.cc | 285 +++++++++++++++++++------------- - poppler/PSOutputDev.h | 18 ++ - poppler/SplashOutputDev.cc | 404 - +++++++++++++++++++++++++++++++++++++------- - poppler/SplashOutputDev.h | 19 ++ - 11 files changed, 766 insertions(+), 256 deletions(-) - -commit d3e4563146cbff4cb507522783e60462461c7524 -Author: Thomas Freitag <Thomas.Freitag@alfa.de> -Date: Sun May 31 23:23:07 2009 +0200 - - Set memory to 0 after allocation, fixes problems on Sun machines, - should not hurt for others - - poppler/GfxState.cc | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 78a58931b4347ecb505bad5a51104382ef5f91c7 -Author: Thomas Freitag <Thomas.Freitag@alfa.de> -Date: Sun May 31 22:52:23 2009 +0200 - - Add splashClearColor that assigns white to the given colorptr - - splash/SplashTypes.h | 10 ++++++++++ - 1 files changed, 10 insertions(+), 0 deletions(-) - -commit 47c26747b32c242ec8ac60e7b93150a67eb22e31 -Author: Thomas Freitag <Thomas.Freitag@alfa.de> -Date: Sun May 31 22:51:22 2009 +0200 - - Fix splashColorModeNComps to correctly include all values for each - SplashColorMode - - splash/SplashState.cc | 17 +++++++++++++++++ - 1 files changed, 17 insertions(+), 0 deletions(-) - -commit 41775d8c0b44bf591d8ff5ede7fad276e8fa9eef -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Jun 1 15:24:24 2009 +0200 - - [glib-demo] Use poppler_annot_markup_has_popup() - - glib/demo/annots.c | 7 ++++--- - 1 files changed, 4 insertions(+), 3 deletions(-) - -commit f542c5294394e837298cb7e7d1d94bb336bfd09d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Jun 1 15:24:04 2009 +0200 - - [glib] Add poppler_annot_markup_has_popup() - - glib/poppler-annot.cc | 20 ++++++++++++++++++++ - glib/poppler-annot.h | 1 + - 2 files changed, 21 insertions(+), 0 deletions(-) - -commit af32d56af779edcc539b680e634755941d1bf45c -Author: Petr Gajdos <pgajdos@novell.com> -Date: Thu May 21 00:37:18 2009 +0200 - - Add the possibility of forcing no hinting of fonts - - poppler/ArthurOutputDev.cc | 2 + - poppler/GlobalParams.cc | 20 +++++++++++ - poppler/GlobalParams.h | 4 ++ - poppler/SplashOutputDev.cc | 2 + - splash/SplashFTFont.cc | 76 - ++++++++++++++++++++++++++---------------- - splash/SplashFTFont.h | 2 + - splash/SplashFTFontEngine.cc | 8 +++-- - splash/SplashFTFontEngine.h | 6 ++- - splash/SplashFontEngine.cc | 4 ++- - splash/SplashFontEngine.h | 2 + - 10 files changed, 91 insertions(+), 35 deletions(-) - -commit 1a69d9638214943b3c2278f570694d9722a5de15 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed May 20 23:58:44 2009 +0200 - - Do not create the GfxColorTransform if the lcms could not be created - - Fixes crash on pdf from bug 20108 - - poppler/GfxState.cc | 8 ++++++-- - 1 files changed, 6 insertions(+), 2 deletions(-) - -commit 95246d39c1289111a4ba3eb2ffbec50d7702e5eb -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed May 20 23:20:20 2009 +0200 - - Check Mask entries are int before using them, also if they are real - cast to int and try to use them - - Fixes bug #21841 - - poppler/Gfx.cc | 11 ++++++++++- - 1 files changed, 10 insertions(+), 1 deletions(-) - -commit 0c3517bfb4e1e1a28962f8d490ad69ec5766b6a1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed May 20 23:08:41 2009 +0200 - - Fix pdftops crash on file from KDE bug 174899 - - Still does not generate a correct ps file, but at least the program - does not crash now - - fofi/FoFiTrueType.cc | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit 548c72600b8a5e076647041660ed5031feedc7cc -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed May 20 22:43:11 2009 +0200 - - Do not exit(1) on a pdf i have lying around - - PDF is 0f03b3539a436a9f18d7e4e29d410f89 6607907.pdf - - poppler/JBIG2Stream.cc | 8 +++++++- - 1 files changed, 7 insertions(+), 1 deletions(-) - -commit f78d3a7ff5ef4b500d76d84ebc45aac3be162dab -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 18 20:44:40 2009 +0200 - - Move lcms.h include to GfxState.cc, replace lcms typedefs by void * - - poppler/GfxState.cc | 70 - ++++++++++++++++++++++++++++++++++++++++++++------ - poppler/GfxState.h | 64 ++++++++++------------------------------------ - 2 files changed, 75 insertions(+), 59 deletions(-) - -commit ec2467f9981b7e7c23d5dcd8eabf2e7c8cdf8930 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun May 17 20:00:53 2009 +0200 - - Use the lcms include dir - - CMakeLists.txt | 3 +++ - poppler/Makefile.am | 2 ++ - 2 files changed, 5 insertions(+), 0 deletions(-) - -commit e0fcf7055af480498a81a000dcd9f977a783df66 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun May 17 12:07:05 2009 +0200 - - Use pkgconfig for autotools cms check - - configure.ac | 12 +++++++----- - poppler/Makefile.am | 2 +- - 2 files changed, 8 insertions(+), 6 deletions(-) - -commit 657734c19274ab281328cba9297eca45e48777aa -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun May 17 12:06:47 2009 +0200 - - Better lcms check comming from kdelibs - - cmake/modules/FindLCMS.cmake | 95 - +++++++++++++++++++++++++++++++----------- - 1 files changed, 71 insertions(+), 24 deletions(-) - -commit 0974b7b4bfe3f8cf3a1408741ddf01c667c28044 -Author: Patrick Spendrin <ps_ml@gmx.de> -Date: Thu May 14 16:15:22 2009 +0200 - - [Win32] Build fix for MSVC. - - poppler-config.h.cmake | 2 +- - poppler/poppler-config.h.in | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit d1c0e8a6c63361304cd453bb4c51e84a1aab7efa -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu May 14 00:29:18 2009 +0200 - - Kill support for specifying extension in openTmpFile - - We don't use it and it would not work anyway, see bug #21713 - - goo/gfile.cc | 58 - +++++++++-------------------------------- - goo/gfile.h | 3 +- - poppler/CairoFontEngine.cc | 6 ++-- - splash/SplashFTFontEngine.cc | 3 +- - splash/SplashT1FontEngine.cc | 3 +- - splash/SplashT1FontFile.cc | 3 +- - 6 files changed, 24 insertions(+), 52 deletions(-) - -commit e237d8b5c2ae8805487a0790d9fb218263686712 -Author: Pino Toscano <pino@kde.org> -Date: Wed May 13 18:37:07 2009 +0200 - - [Qt4] we don't need an output device anymore (since long, even) - for resolving destinations - - qt4/src/poppler-document.cc | 3 --- - 1 files changed, 0 insertions(+), 3 deletions(-) - -commit 9a2a851da93ef1a0c291fc9523a468e808ffd08e -Author: Pino Toscano <pino@kde.org> -Date: Wed May 13 18:19:11 2009 +0200 - - [Qt4] Do not try to resolve named destinations for GoTo links pointing - to external documents. - - In such cases, the named destination is a destination in the external - document, so we would try to look up a destination which is not in - the current document (thus the look up is unuseful). - It is task of the users of poppler-qt4 detect such - situations, and resolve the named when necessary, using - Document::linkDestination(QString). - - qt4/src/poppler-document.cc | 2 +- - qt4/src/poppler-link.cc | 2 +- - qt4/src/poppler-page.cc | 6 ++++-- - qt4/src/poppler-private.cc | 4 ++-- - qt4/src/poppler-private.h | 5 +++-- - 5 files changed, 11 insertions(+), 8 deletions(-) - -commit 51f6cc26fc5fdccce1ba4d4816dec374ce85d67a -Author: Pino Toscano <pino@kde.org> -Date: Wed May 13 17:38:00 2009 +0200 - - [Qt4] start a (basic) unit test for links & destinations - - qt4/tests/CMakeLists.txt | 1 + - qt4/tests/Makefile.am | 5 ++ - qt4/tests/check_links.cpp | 96 - +++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 102 insertions(+), 0 deletions(-) - -commit 174f8087f5e09c5d1915de128b7a15acf47c1e13 -Author: Pino Toscano <pino@kde.org> -Date: Wed May 13 16:44:59 2009 +0200 - - [Qt4] set the destination name only when it is not resolved - - qt4/src/poppler-link.cc | 9 +++++---- - 1 files changed, 5 insertions(+), 4 deletions(-) - -commit fb0cb2add9443992f166acdf744fbec875faaabf -Author: Pino Toscano <pino@kde.org> -Date: Tue May 12 01:53:43 2009 +0200 - - [Qt4] Add LinkDestination::destinationName() that returns the name - of the current destination. - - qt4/src/poppler-link.cc | 10 ++++++++++ - qt4/src/poppler-link.h | 7 +++++++ - 2 files changed, 17 insertions(+), 0 deletions(-) - -commit b8bd44f1302f7b6a6923d41c98ec74c118a5abb8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 11 20:49:34 2009 +0200 - - Poppler 0.11.0 aka 0.12 Alpha 1 - - CMakeLists.txt | 4 +- - NEWS | 142 - +++++++++++++++++++++++++++++++++++++++++++++++++++ - configure.ac | 2 +- - msvc/config.h | 6 +- - poppler/Makefile.am | 2 +- - qt4/src/Doxyfile | 2 +- - 6 files changed, 150 insertions(+), 8 deletions(-) - -commit 79bcedd5602729b959f21aed222445de621e7ecb -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon May 11 19:59:57 2009 +0200 - - Update copyright headers for previous patches - - poppler/ArthurOutputDev.cc | 1 + - poppler/CairoOutputDev.cc | 2 +- - poppler/Page.cc | 2 +- - poppler/Stream.cc | 1 + - poppler/Stream.h | 1 + - utils/HtmlOutputDev.cc | 1 + - utils/ImageOutputDev.cc | 1 + - 7 files changed, 7 insertions(+), 2 deletions(-) - -commit f16e36df3a74e1adf14513a6340be2e8665f8d65 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun May 10 19:24:32 2009 +0200 - - Don't include popups annots with a parent in annots list - - poppler/Annot.cc | 13 +++++++++++++ - 1 files changed, 13 insertions(+), 0 deletions(-) - -commit 5051ebed1477ff3f7721606f79d66d56a80c1145 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun May 10 19:10:51 2009 +0200 - - Make sure ImageStream::close() is called after ImageStream::reset() - - poppler/ArthurOutputDev.cc | 1 + - poppler/CairoOutputDev.cc | 20 +++++++++++++++++--- - poppler/Page.cc | 1 + - poppler/Stream.cc | 4 ++++ - poppler/Stream.h | 3 +++ - utils/HtmlOutputDev.cc | 1 + - utils/ImageOutputDev.cc | 1 + - 7 files changed, 28 insertions(+), 3 deletions(-) - -commit 829ed964374676ddfa4a9048c940dc20a309ca47 -Author: M Joonas Pihlaja <jpihlaja@cc.helsinki.fi> -Date: Sun May 10 23:39:11 2009 +0200 - - Fix axial shading fix to ensure the painting passes by the four - edges of the bbox - - When j and teoricalj are the same, just change the value of ta[] - not the next[] ones - - poppler/Gfx.cc | 23 ++++++++++++++++------- - 1 files changed, 16 insertions(+), 7 deletions(-) - -commit 68d9644499676ed1553b2bfcdbfc9a5677c75345 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat May 9 22:25:12 2009 +0200 - - Hidden property depends on parent being hidden, not only yourself - - Fixes bug #16093 - - poppler/Gfx.cc | 8 +++++++- - 1 files changed, 7 insertions(+), 1 deletions(-) - -commit 810a71ea66f0e07d9849a5e9bf28911472482d1b -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri May 8 09:36:31 2009 +0200 - - [glib] Add poppler_annot_markup_get_popup_rectangle - - glib/demo/annots.c | 8 ++++++++ - glib/poppler-annot.cc | 35 +++++++++++++++++++++++++++++++++++ - glib/poppler-annot.h | 2 ++ - 3 files changed, 45 insertions(+), 0 deletions(-) - -commit 5d328282da4713356fbe4283bd992ac2fc9010a2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu May 7 23:11:55 2009 +0200 - - bitmap->h can be 0, move to _checkoverflow variant, code already - knows how to deal with NULL - - splash/SplashFTFont.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 5b0fb6f94d6d54b1b0c97762db61e2ab0dd07c85 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed May 6 22:59:55 2009 +0200 - - Fix format printing - - poppler/JBIG2Stream.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit c21b08a254f42f53d4b59ad4fb308c7c68c32d15 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed May 6 15:56:21 2009 +0200 - - [glib] Several fixes in poppler_annot_get_color() - - PopplerColor is compatible with GdkColor where every component is - in the - range of 0 to 65535, we were returning values between 0 and 1 but - converted to guint16. - We were also showing a warning when AnnotColor::colorTransparent is - used, but we decided to return a PopplerColor * to be able to - represent - transparent color returning NULL, so it's actually supported. - - glib/demo/annots.c | 25 +++++++++++-------------- - glib/poppler-annot.cc | 36 +++++++++++++++++++++--------------- - 2 files changed, 32 insertions(+), 29 deletions(-) - -commit 63cc40ec02498e1ec249d5f74e23f574c665872e -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat May 2 14:08:23 2009 +0200 - - Link pdftoabw to abiword libs - - Fixes bug #21520 - - utils/Makefile.am | 22 ++++++++++++---------- - 1 files changed, 12 insertions(+), 10 deletions(-) - -commit 70e06e9ae28d08bb7495a7f2eb03b0b5714a1e54 -Author: Kouhei Sutou <kou@cozmixng.org> -Date: Wed Apr 29 09:52:21 2009 +0900 - - PopplerAttachment refers its document. - - glib/poppler-attachment.cc | 41 - +++++++++++++++++++++++++++++++++++------ - 1 files changed, 35 insertions(+), 6 deletions(-) - -commit 977a13f1091700bf7e7b31859e0e6632dc323462 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Apr 25 19:07:01 2009 +0200 - - [glib] Only create checksum string for valid checksums - - glib/poppler-attachment.cc | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit fb6e7141e3008ae230ae5819e2c7a0425296d8d2 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Apr 24 10:13:53 2009 +0200 - - Update copyright headers - - glib/poppler-annot.cc | 1 + - glib/poppler-annot.h | 1 + - poppler/Annot.cc | 2 +- - poppler/Annot.h | 2 +- - poppler/DateInfo.cc | 1 + - poppler/DateInfo.h | 1 + - 6 files changed, 6 insertions(+), 2 deletions(-) - -commit fc7e52fef0317f9c85ead2c4f8a0e9b688decca3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Apr 24 09:53:41 2009 +0200 - - Fix typos in Annot::setContents() documentation - - poppler/Annot.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit df0032cf5f6e5dc44bad056c659180e4065d32e2 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Apr 23 13:19:25 2009 +0200 - - Document Annot::setContents() method - - poppler/Annot.h | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 86a37a8f3f93e3378b446f8d81d80571267c7660 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Apr 23 13:16:04 2009 +0200 - - Update the annotation last modified time when it's modified - - poppler/Annot.cc | 26 ++++++++++++++++---------- - poppler/Annot.h | 7 ++++--- - 2 files changed, 20 insertions(+), 13 deletions(-) - -commit 9662bfa2b4b2282d0fc29d2a327b62d8bde56ff2 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Apr 23 13:13:07 2009 +0200 - - Add timeToDateString() to DateInfo - - This function converts a time_t into a string in PDF date format. - - configure.ac | 1 + - poppler/DateInfo.cc | 47 - +++++++++++++++++++++++++++++++++++++++++++++++ - poppler/DateInfo.h | 7 +++++++ - 3 files changed, 55 insertions(+), 0 deletions(-) - -commit dc4cf0c29b53cda5c1c2badc5026af3429502e3a -Author: Pino Toscano <pino@kde.org> -Date: Tue Apr 21 21:51:52 2009 +0200 - - add poppler-date.{cc,h} - - glib/CMakeLists.txt | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 0750c6502faeabff571f5730b567097e793dca64 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Apr 21 20:04:27 2009 +0200 - - [glib-demo] Fix dates handling in annots demo - - glib/demo/annots.c | 69 - ++++++++++----------------------------------------- - 1 files changed, 14 insertions(+), 55 deletions(-) - -commit fe73bf9771e8294af4c8a11ec4c2891ff8f8d859 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Apr 21 20:02:25 2009 +0200 - - [glib-demo] GTime is deprecated, use time_t instead - - glib/demo/utils.c | 2 +- - glib/demo/utils.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 6d468cfa0cb89760e5d6cca43521cde6d99aa52e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Apr 21 20:00:20 2009 +0200 - - [glib-demo] Use format_date from utils and remove duplicated code - - glib/demo/info.cc | 27 ++------------------------- - 1 files changed, 2 insertions(+), 25 deletions(-) - -commit e5f5ea01d0da4c4d877b93755523dc2a7f2ec049 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Apr 21 19:57:11 2009 +0200 - - [glib] Fix poppler_annot_markup_get_date() - - Date field in Markup annots is also a PDF format date string, so it - should be parsed and the resulting time_t used to create a correct - GDate. - - glib/poppler-annot.cc | 22 +++++++++++----------- - 1 files changed, 11 insertions(+), 11 deletions(-) - -commit 876ad1bcc8a7b2f37656bf15cee7eb888fd46ed4 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Apr 21 19:36:33 2009 +0200 - - [glib] Add info about the return value in poppler_annot_get_modified() - doc - - glib/poppler-annot.cc | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit 8c54a15e1715721ee7af7e82c90b8dda3689c65f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Apr 21 19:35:14 2009 +0200 - - [glib] Fix a typo in poppler_date_parse documentation - - glib/poppler-date.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 39d09fa237d06fa93b02eb916d2c0242c4e8fe85 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Apr 21 19:29:32 2009 +0200 - - [glib] Add poppler_date_parse to parse PDF format date strings - - We need to make this public because the field M in the Annot - dictionary - might be a Date string (in PDF date format) or a text - string. According - to the PDF spec: "The preferred format is a date string as described - in - Section 3.8.3, “Dates,†but viewer applications should be - prepared to - accept and display a string in any format". The only way to know - whether - it's a PDF date string or not, is by trying to parse it. For this - reason - poppler_annot_get_modified() returns a gchar * instead of a - time_t. So, - viewers should try to parse the string in order to convert it to a - time_t, and if it fails to parse, use the date string as provided - by the - document. - - glib/Makefile.am | 2 + - glib/poppler-attachment.cc | 4 +- - glib/poppler-date.cc | 66 - ++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-date.h | 30 ++++++++++++++++++++ - glib/poppler-document.cc | 45 +++++------------------------ - glib/poppler-private.h | 2 +- - glib/poppler.h | 1 + - 7 files changed, 110 insertions(+), 40 deletions(-) - -commit 9c2714a3e1c02f445661618e24bcd27f1392b2b7 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Apr 21 18:08:06 2009 +0200 - - [glib] Implement poppler_annot_set_contents() - - glib/poppler-annot.cc | 25 +++++++++++++++++++++++++ - glib/poppler-annot.h | 2 ++ - 2 files changed, 27 insertions(+), 0 deletions(-) - -commit eec550e8b3cf96aefed9b03a78d365c2848fb8f2 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Apr 21 18:06:34 2009 +0200 - - Add setContents() to modify the annot contents - - poppler/Annot.cc | 26 +++++++++++++++++++++++++- - poppler/Annot.h | 4 ++++ - 2 files changed, 29 insertions(+), 1 deletions(-) - -commit 047a8870a8cea9b680080e0d3bf68d0685431233 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Apr 20 23:38:53 2009 +0200 - - In case of err3 or err2 in readPageTree we need to free kidRef too - - poppler/Catalog.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit cb61b555f2c4db8685dec5491ca86570c962aab6 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Apr 18 18:30:04 2009 +0200 - - Extend test-poppler-glib to show more page annotations and actions - - Based on path by Thomas Viehmann <tv@beamnet.de> - - glib/test-poppler-glib.cc | 68 - +++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 68 insertions(+), 0 deletions(-) - -commit 2221b8a9ae5e986c79ea3f6c9f3b0246d328c7ab -Author: Matthias Franz <matthias@ktug.or.kr> -Date: Sun Apr 19 23:29:18 2009 +0200 - - Fix decryption using owner password on some pdf - - See bug #21270 - - poppler/Decrypt.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit e20efbf6cc676758b8ef7d2ad607560fcdbbf89e -Author: Peter Kerzum <kerzum@yandex-team.ru> -Date: Fri Apr 17 22:14:26 2009 +0200 - - Fix typo in GfxFont.cc - - poppler/GfxFont.cc | 11 ++++++----- - 1 files changed, 6 insertions(+), 5 deletions(-) - -commit b760debea03380280d72cd39d792cbc1a380a87c -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Apr 17 21:04:26 2009 +0200 - - Fix rendering of axial shadings - - Fixes bug #19896 - - poppler/Gfx.cc | 102 - ++++++++++++++++++++++++++++++++++---------------------- - 1 files changed, 62 insertions(+), 40 deletions(-) - -commit 9f1312f3d7dfa7e536606a7c7296b7c876b11c00 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Apr 16 22:13:26 2009 +0200 - - Fix problems that happen when parsing broken JBIG2 files - - Fixes - CVE-2009-0799 xpdf OOB Read - CVE-2009-0800 xpdf Multiple Input Validation Flaws - CVE-2009-1179 xpdf Integer Overflow - CVE-2009-1180 xpdf Invalid free() - CVE-2009-1181 xpdf NULL dereference DoS - CVE-2009-1182 xpdf MMR Decoder Buffer Overflows - CVE-2009-1183 xpdf MMR Infinite Loop DoS - - Patch based on a patch by Derek Noonburg - Some files still hit the exit(1) in goo.c but at least none is - really crashing - - poppler/JBIG2Stream.cc | 447 - ++++++++++++++++++++++++++++++++++-------------- - poppler/JBIG2Stream.h | 4 + - 2 files changed, 324 insertions(+), 127 deletions(-) - -commit 284a92899602daa4a7f429e61849e794569310b5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Apr 13 21:51:12 2009 +0200 - - Did a mistake in the gmalloc -> gmallocn commit, it's a 4 here not a 3 - - poppler/SplashOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 9cf2325fb22f812b31858e519411f57747d39bd8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 11 00:31:57 2009 +0200 - - More gmalloc → gmallocn - - glib/poppler-page.cc | 2 +- - splash/Splash.cc | 8 ++++---- - splash/SplashBitmap.cc | 6 +++--- - splash/SplashFTFont.cc | 2 +- - 4 files changed, 9 insertions(+), 9 deletions(-) - -commit c399b2d512aa073b0d7cd8eb5413a4b43f0d6aef -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 11 00:26:23 2009 +0200 - - Revert part of last commit, i need more math classes :D - - poppler/JBIG2Stream.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 7b2d314a61fd0e12f47c62996cb49ec0d1ba747a -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 11 00:23:04 2009 +0200 - - Be paranoid, use gmallocn or gmallocn3 in all gmalloc with * - - poppler/ArthurOutputDev.cc | 4 ++-- - poppler/CairoOutputDev.cc | 14 +++++++------- - poppler/GfxState.cc | 8 ++++---- - poppler/JBIG2Stream.cc | 4 ++-- - poppler/PSOutputDev.cc | 6 +++--- - poppler/SplashOutputDev.cc | 20 ++++++++++---------- - 6 files changed, 28 insertions(+), 28 deletions(-) - -commit 0131f0a01cba8691d10a18de1137a4744988b346 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 11 00:20:55 2009 +0200 - - Add gmallocn3 that does the same as gmallocn but with 3 arguments - - goo/gmem.cc | 22 ++++++++++++++++++++++ - goo/gmem.h | 2 ++ - 2 files changed, 24 insertions(+), 0 deletions(-) - -commit 75c3466ba2e4980802e80b939495981240261cd5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Apr 10 18:05:54 2009 +0200 - - Make it compile in Solaris - - See bug #21080 - - poppler/CairoFontEngine.cc | 14 ++++++++++++++ - 1 files changed, 14 insertions(+), 0 deletions(-) - -commit 3210970dc1d6faf51bce59bb7ecb6b881f9c0fe6 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Apr 10 13:09:37 2009 +0200 - - [glib] Print annotations with the print flag enabled - - glib/poppler-page.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit b0b9798c85c7c6d6f336f73135a98974897b9f60 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Mar 30 23:26:39 2009 +0200 - - Fix clip test for fonts - - Fixes bug 20950 - I really don't remember why i put that -1 maybe i got mislead by - SplashClip::testRect - having a +1, but the idea of the +1 is correct because it's ints - vs floats - - splash/SplashFTFont.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 5c08f57aa80092954746d722bb13655aee3f162c -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Mar 29 23:52:31 2009 +0200 - - Forgot Ross copyright - - poppler/TextOutputDev.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit c6d3e7884010ebdcc961d81ca8c692870fc9b139 -Author: Ross Moore <ross@maths.mq.edu.au> -Date: Sun Mar 29 23:46:09 2009 +0200 - - Fix extraction of some ActualText content - - Fixes bug #20013 - - poppler/TextOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit e4b3f7cbcb6ccdfa8b18d8da5f7074f4140b776a -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 25 22:16:07 2009 +0100 - - Fix getGlyphAdvance to behave correctly on font size changes - - Fixes bug #20769 - - splash/SplashFTFont.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 4acde05ac4d0b03466c949138321cc3445a14158 -Author: Eric Toombs <ewtoombs@uwaterloo.ca> -Date: Wed Mar 25 21:11:03 2009 +0100 - - Remove case-insensitive matching of filenames in PDFDoc constructor - - poppler/PDFDoc.cc | 39 ++++++++++----------------------------- - 1 files changed, 10 insertions(+), 29 deletions(-) - -commit 120c7f6697ed1edaff6e17ae1ed202c69f03a73c -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 24 22:56:33 2009 +0100 - - declare the matrix at the beginning - - poppler/ArthurOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 441a9cd56935bfe2d8fddc5d3bc2c0104aeffaca -Author: Eric Toombs <ewtoombs@uwaterloo.ca> -Date: Sun Mar 22 22:50:14 2009 +0100 - - Improved error reporting of ErrOpenFile errors - - See bug #20660 for more information - - glib/poppler-document.cc | 14 +++++++++-- - poppler/PDFDoc.cc | 54 - +++++++++++++++++++++++++++------------------ - poppler/PDFDoc.h | 8 ++++++ - 3 files changed, 51 insertions(+), 25 deletions(-) - -commit 16af0ced4a0762f2f538135bd8dd72b469f6fdca -Author: Michael K. Johnson <a1237@danlj.org> -Date: Sat Mar 21 16:14:06 2009 +0100 - - Support rendering non-square pixels in pdftoppm - - Bug #20702 - - utils/pdftoppm.1 | 16 ++++++++++++++-- - utils/pdftoppm.cc | 37 ++++++++++++++++++++++++++++++++----- - 2 files changed, 46 insertions(+), 7 deletions(-) - -commit a103c60abd5fe4c721b099c005daf22d6350c355 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 21 15:47:12 2009 +0100 - - Update version we need of Qt4 - - CMakeLists.txt | 2 +- - configure.ac | 8 ++++---- - 2 files changed, 5 insertions(+), 5 deletions(-) - -commit c4b1754fdd3a4649551556de2655c8291daafddf -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 21 13:29:38 2009 +0100 - - Bump cairo dependency to 1.8.4 - - Cairo 1.8.4 fixes and important bug that affects the Type 3 font - rendering - - CMakeLists.txt | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 50c4ee413929e5a70133839e3cde039da738fab2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 18 22:00:05 2009 +0100 - - Add more _checkoverflow variants, rework internals - - goo/gmem.cc | 92 - +++++++++++++++++++++++++++++------------------------------ - goo/gmem.h | 4 ++- - 2 files changed, 48 insertions(+), 48 deletions(-) - -commit 121c44db0884f0d70ba1470a66aa78441257c421 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Fri Mar 20 23:25:19 2009 +1030 - - Fix cairo luminosity smask when cairo ctm != identity - - poppler/CairoOutputDev.cc | 16 +++++++++++++++- - 1 files changed, 15 insertions(+), 1 deletions(-) - -commit 3f55aff56a1d2002ba79f3efba5eb77e94575439 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Thu Mar 19 22:34:23 2009 +1030 - - Fix bug in cairo backend with nested masks - - The previous smask was not restored after a q/Q pair or form xobject. - - poppler/CairoOutputDev.cc | 18 +++++++++++++++++- - poppler/CairoOutputDev.h | 5 +++++ - 2 files changed, 22 insertions(+), 1 deletions(-) - -commit 4cc3cb8992ac554352d68e97563823b9bbd556ce -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Mar 20 12:38:28 2009 +0100 - - Bump cairo dependency to 1.8.4 - - Cairo 1.8.4 fixes and important bug that affects the Type 3 font - rendering - - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit da94fe717a1ab60fb074fae61d582d1ee7151fc2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Mar 16 22:54:27 2009 +0100 - - Fix parsing of border arrays - - Fixes 19761 - - poppler/Annot.cc | 54 - ++++++++++++++++++++++++++++++++++++------------------ - 1 files changed, 36 insertions(+), 18 deletions(-) - -commit 8df0323f1ca4548a5d5824ece8736b356ce7ca42 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Mar 12 00:09:03 2009 +0100 - - Really fix jpeg lib init order? - - poppler/DCTStream.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 12aac6774fc6f92def3d5567051117951cc32223 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 11 23:00:37 2009 +0100 - - fontCIDType2OT fonts can also have a CIDToGIDMap - - Fixes bug #20605 - - poppler/GfxFont.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 0ca9ae2848808d15e7a2b00f5eb33bb8f990c887 -Author: Vincent Torri <vtorri@univ-evry.fr> -Date: Wed Mar 11 00:39:59 2009 +0100 - - remove the fortran check during the initialisation of libtool - - configure.ac | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 710e329a3a6a9ee2eed997c9eeaea21c44237423 -Author: Vincent Torri <vtorri@univ-evry.fr> -Date: Wed Mar 11 00:37:11 2009 +0100 - - Add AC_CONFIG_MACRO_DIR([m4]) - - It is used by autoreconf to trace changes in m4 macros that are in - the m4/ subdirectory. - - configure.ac | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit d15e47158ae31909212d3875159046afb208de97 -Author: Vincent Torri <vtorri@univ-evry.fr> -Date: Wed Mar 11 00:36:27 2009 +0100 - - Better check for pkg-config - - configure.ac | 5 +---- - 1 files changed, 1 insertions(+), 4 deletions(-) - -commit b3f569f9a6c117c097acac52ae6552209fcd2101 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 11 00:25:07 2009 +0100 - - Check there is an optional content config before using it - - Fixes bug #20587 - - poppler/Gfx.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 7a5d1e57b2757c986da17f7238415b927e73127f -Author: Brian Ewins <Brian.Ewins@gmail.com> -Date: Mon Mar 9 22:54:58 2009 +0100 - - Check for pkgconfig before using it - - At the moment if pkgconfig is not installed, an unhelpful syntax - error appears when testing for freetype. Identify the problem - earlier on - - configure.ac | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 8dc9e4d57a4759de2b56a87d9bace80d5d563fef -Author: Marc Kleine-Budde <mkl@pengutronix.de> -Date: Sun Mar 8 15:29:02 2009 +0100 - - use AC_CHECK_HEADER to find headers - - The original m4/libjpeg.m4 used AC_FIND_FILE to look for jpeg - header file. - This test is not cross-compiling save. This patch uses the autoconf - function - AC_CHECK_HEADER to look for the jpeg header, which works in the - native and - the cross compiling scenaria. - Bug #20538 - - m4/libjpeg.m4 | 3 +-- - 1 files changed, 1 insertions(+), 2 deletions(-) - -commit bf2e2f056cadbc488cd3e9576b44beb34689ec81 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Mar 8 13:44:44 2009 +0100 - - Add the new croptting options explanations - - utils/pdftotext.1 | 15 +++++++++++++++ - 1 files changed, 15 insertions(+), 0 deletions(-) - -commit 663d9e5a448641421d290dd228be692a0f236b9c -Author: Jan Jockusch <jan@jockusch.de> -Date: Sun Mar 8 13:44:20 2009 +0100 - - Make pdftotext to accept cropping options like pdftoppm - - Bug #20331 - - utils/pdftotext.cc | 29 ++++++++++++++++++++++++++++- - 1 files changed, 28 insertions(+), 1 deletions(-) - -commit cc4b61f19b69c31d9a73ae7361c4b6a94345d1c2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Mar 8 12:55:45 2009 +0100 - - Fix the previous fix - - I should stop listening to people without checking that what they - say is - correct - - poppler/DCTStream.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit a4a73cd9f9ee9767d74fbb44ffe083d2057a9d61 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Mar 8 12:44:06 2009 +0100 - - I should compile before commiting :-/ - - poppler/DCTStream.cc | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 6a6b3cc91053e771a67dffa979076d130f87ff11 -Author: Ryszard Trojnacki <rysiek@menel.com> -Date: Sun Mar 8 12:38:42 2009 +0100 - - set up the error-manager before calling jpeg_create_decompress - - Bug #20484 - - poppler/DCTStream.cc | 11 +++++++---- - 1 files changed, 7 insertions(+), 4 deletions(-) - -commit 4dfa7460ddc4b5684d5ef8db17efa50b95b7b735 -Author: Nick Jones <nick.jones@network-box.com> -Date: Tue Mar 3 00:55:53 2009 +0100 - - Do not blindly follow loops parsing OutlineItem - - More details in bug 18364 - - poppler/Outline.cc | 15 ++++++++++++++- - 1 files changed, 14 insertions(+), 1 deletions(-) - -commit de3131ae38fc9442b198d4d7b0c57c6939ad66ce -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 2 15:20:07 2009 +0100 - - [Qt4] adapt to the new PDFDoc saving API - - store the error code instead of the bool - - qt4/src/poppler-pdf-converter.cc | 12 +++++++----- - 1 files changed, 7 insertions(+), 5 deletions(-) - -commit dac0542eb793603090416f1b7712ca08253f1e7f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 2 09:54:22 2009 +0100 - - [glib] Correctly handle doc->saveAs() error code. - - Fixes bug #19915. - - glib/poppler-document.cc | 37 +++++++++++++++++++++++++++++++++---- - 1 files changed, 33 insertions(+), 4 deletions(-) - -commit bfc6572614727565d883b9545d4b6665f3c2fdfe -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Feb 28 13:16:49 2009 +0100 - - Return an error code instead of a GBool when saving - - poppler/PDFDoc.cc | 22 +++++++++++----------- - poppler/PDFDoc.h | 8 ++++---- - 2 files changed, 15 insertions(+), 15 deletions(-) - -commit f7c88148fdb671736d81dd5f01a3fb68f944510c -Author: Koji Otani <sho@bbr.jp> -Date: Wed Feb 25 23:38:35 2009 +0100 - - Fix cache shifting - - poppler/GfxState.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 305af8cdb6822858e152e1f930bba2ce3904bf1b -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Feb 25 22:40:24 2009 +0100 - - Make JBIG2Stream not crash in 2009-41414141.pdf - - poppler/JBIG2Stream.cc | 151 - +++++++++++++++++++++++++++--------------------- - 1 files changed, 85 insertions(+), 66 deletions(-) - -commit 26a8217160c1eaeeadb92023b27e68f402e38dd0 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Feb 22 18:14:15 2009 +0100 - - Check if cairo_shape is not NULL before using it. - - We were checking shape instead. It fixes a crash with some documents. - See bug #17337. - - poppler/CairoOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 5e68e52da65b4d8c3817e5fbb6f1a937da321d48 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 21 18:03:15 2009 +0100 - - [Qt4] do not assume the destination file name for links is ASCII - - qt4/src/poppler-page.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 439cb397fed33df627a09c70788d72bef20dc872 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 21 18:02:36 2009 +0100 - - [Qt] do not assume the destination file name for links is ASCII - - qt/poppler-page.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 3ea5f45ad3e5a55e577a2e45f61b55932ed17013 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Feb 21 17:46:30 2009 +0100 - - [glib] Make sure filename is valid utf-8 for remote dests - - glib/poppler-action.cc | 3 +-- - 1 files changed, 1 insertions(+), 2 deletions(-) - -commit b5989e4ffece6c1831610ee163d05fd80386a001 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Feb 21 17:45:18 2009 +0100 - - Use the UF entry when present in Filespec dictionary - - poppler/FileSpec.cc | 14 +++++++------- - 1 files changed, 7 insertions(+), 7 deletions(-) - -commit 943fca42b5fa815fad650e42da4ad6e806adc3b1 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Feb 21 12:08:00 2009 +0100 - - [glib] Add a macro to define boxed types - - glib/poppler-action.cc | 26 +----------- - glib/poppler-annot.cc | 15 +------ - glib/poppler-document.cc | 44 ++++---------------- - glib/poppler-page.cc | 99 - +++++++++------------------------------------- - glib/poppler-private.h | 20 +++++++++ - 5 files changed, 53 insertions(+), 151 deletions(-) - -commit 7406337ed2d38a86308f20f8273a152538e524de -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Feb 21 11:11:20 2009 +0100 - - [glib] Use template files to create poppler-enums - - glib/Makefile.am | 43 - ++++++++++++--------------------------- - glib/poppler-enums.c.template | 44 - +++++++++++++++++++++++++++++++++++++++++ - glib/poppler-enums.h.template | 25 +++++++++++++++++++++++ - 3 files changed, 82 insertions(+), 30 deletions(-) - -commit 29bc9d1dd115b5d400975533c3924993c3adae30 -Author: Thomas Viehmann <tv@beamnet.de> -Date: Sat Jan 17 13:16:38 2009 +0100 - - glib small doc comment corrections - - glib/poppler-attachment.cc | 2 +- - glib/poppler-layer.cc | 2 ++ - glib/poppler.cc | 2 -- - 3 files changed, 3 insertions(+), 3 deletions(-) - -commit a06e715d89a99b909b8e7b73b733066c67b1ade3 -Author: Thomas Viehmann <tv@beamnet.de> -Date: Sat Jan 17 12:58:20 2009 +0100 - - Make glib API reference more complete - - glib/reference/poppler-docs.sgml | 2 + - glib/reference/poppler-sections.txt | 55 +++++ - glib/reference/tmpl/poppler-action.sgml | 9 +- - glib/reference/tmpl/poppler-annot.sgml | 368 - +++++++++++++++++++++++++++++++ - glib/reference/tmpl/poppler-layer.sgml | 79 +++++++ - 5 files changed, 511 insertions(+), 2 deletions(-) - -commit 3a21dafa46d42d86daec440a85b9d63b292a3c88 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Feb 3 21:33:00 2009 +0100 - - Fix cache shifting - - If we do - for (i = 0;i < GFX_ICCBASED_CACHE_SIZE-1 && cache[i].num > 0;i++) { - cache[i+1] = cache[i]; - what we do at the end is copy position 0 to all others so - we need to do it in the reverse order - - poppler/GfxState.cc | 10 +++++----- - 1 files changed, 5 insertions(+), 5 deletions(-) - -commit 0ed3fd52bb2d3375ed302285b18f076721b8028e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Feb 1 10:37:25 2009 +0100 - - [glib-demo] Fix a typo in format string - - glib/demo/page.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 2df6d530cd9acd8648a6196031218ef10e7b3891 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jan 29 00:51:13 2009 +0100 - - Add line that for some reason was not imported from xpdf file - - Fixes bug 19789 - - utils/ImageOutputDev.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 1fc342eadcbbb41302f190b215c5daf23c9ec9b1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 28 22:53:43 2009 +0100 - - Fix crash on unexepcted Form Opt value - - Fixes crash on bug 19790 - - poppler/Form.cc | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit b1d4efb082ac3dadd7752a557e5aeb6651e17471 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jan 27 00:26:08 2009 +0100 - - PostScriptFunction::transform optimization - - Do not create and destroy a PSStack each time - PostScriptFunction::transform is called gives a 7% speedup on heavy - PostScriptFunction::transform pdf like nytimes firefox ad - - poppler/Function.cc | 12 ++++++++---- - poppler/Function.h | 15 +++++++++++++++ - 2 files changed, 23 insertions(+), 4 deletions(-) - -commit 90f95127d8d89cfcadeb7d701437ab07ce4a8a61 -Author: Koji Otani <sho@bbr.jp> -Date: Sun Jan 25 23:17:39 2009 +0100 - - Cache last 5 GfxICCBasedColorSpace - - poppler/GfxState.cc | 60 - +++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/GfxState.h | 15 ++++++++++++ - 2 files changed, 75 insertions(+), 0 deletions(-) - -commit d3f04f537fb3e963c149a7e2d8d83c7cb19da8c0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jan 23 23:08:46 2009 +0100 - - Do not crash in some PDF we don't parse correctly - - Fixes bug 19702 - - poppler/JBIG2Stream.cc | 7 ++++++- - 1 files changed, 6 insertions(+), 1 deletions(-) - -commit 3990c9e52da7b17215506857c792c90a37ebac79 -Author: Koji Otani <sho@bbr.jp> -Date: Mon Jan 19 09:53:00 2009 +0100 - - Fix a problem in cairo backend when using a CMYK Profile - - poppler/GfxState.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 6e51ae7fe8b9dc8ad52b735f2fe056f8ea8f1dcb -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jan 15 22:33:04 2009 +0100 - - calculate the limit in a way that one does not access an invalid - index of the matrix - - poppler/DCTStream.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit ea2aa7bd1ceb0e3282398f52683e4f52ef401f74 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jan 15 22:18:48 2009 +0100 - - Forgot my copyrights - - poppler/DCTStream.cc | 2 +- - poppler/DCTStream.h | 2 +- - poppler/Stream.cc | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -commit d65dd23752ec14635d0d224afa7dd605f98a10a4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jan 15 22:17:14 2009 +0100 - - Minor optimizations - - poppler/DCTStream.cc | 17 ++++++++--------- - poppler/DCTStream.h | 3 ++- - poppler/Stream.cc | 3 ++- - 3 files changed, 12 insertions(+), 11 deletions(-) - -commit d3d2910f757dfc3e141aed62aa970136f9d7186f -Author: Pino Toscano <pino@kde.org> -Date: Sun Jan 11 00:40:46 2009 +0100 - - fix a (relatively small) memory leak when asking for a document-level - JS - - poppler/Catalog.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 869584a84eed507775ff1c3183fe484c14b6f77b -Author: Jonathan Kew <jonathan_kew@sil.org> -Date: Sat Jan 10 18:28:47 2009 +0100 - - Add the possibility of setting the datadir on runtime - - poppler/GlobalParams.cc | 27 ++++++++++++++++++++------- - poppler/GlobalParams.h | 5 ++++- - 2 files changed, 24 insertions(+), 8 deletions(-) - -commit cf112dceb1d6653beae73ce2fac6fb5eee48ff33 -Author: Koji Otani <sho@bbr.jp> -Date: Sat Jan 10 18:11:20 2009 +0100 - - Fix some problems with color management in CMYK Color Profile. - - Fixes bug 19483 - - poppler/GfxState.cc | 106 - +++++++++++++++++++++++++------------------------- - 1 files changed, 53 insertions(+), 53 deletions(-) - -commit 6dd77338d16f80760ae32ff9f3e2be9768fc0c49 -Author: Pino Toscano <pino@kde.org> -Date: Thu Jan 8 11:49:45 2009 +0100 - - [Qt4] use the cropbox for the annotations coordinates - - Fixes bug #18558. - - qt4/src/poppler-page.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 69c07c031159d36dde52609bffa6d48c3c56cef5 -Author: Pino Toscano <pino@kde.org> -Date: Thu Jan 8 00:59:19 2009 +0100 - - update Poppler copyright to 2009 - - msvc/poppler/poppler-config.h | 2 +- - poppler-config.h.cmake | 2 +- - poppler/poppler-config.h.in | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -commit 79e0eea85cf063c6323caafbec97f3d71fc04ca2 -Author: Pino Toscano <pino@kde.org> -Date: Thu Jan 8 00:57:03 2009 +0100 - - remove old cmake modules, add a new one - - Makefile.am | 3 +-- - 1 files changed, 1 insertions(+), 2 deletions(-) - -commit 0e6420ece2d6fcc046d5814b48a2754fb86771e2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 7 23:33:02 2009 +0100 - - Require cmake 2.6.0, remove two cmake files provided upstream - - CMakeLists.txt | 4 +- - cmake/modules/FindFreetype.cmake | 74 - --------------------- - cmake/modules/FindPackageHandleStandardArgs.cmake | 58 ---------------- - glib/CMakeLists.txt | 2 +- - 4 files changed, 3 insertions(+), 135 deletions(-) - -commit a69add73bf7bef17c677c735db77934ba67188a5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 7 19:06:13 2009 +0100 - - Update copyright notices - - poppler/FontInfo.cc | 1 + - poppler/FontInfo.h | 1 + - qt4/src/poppler-document.cc | 2 +- - qt4/src/poppler-fontinfo.cc | 2 +- - qt4/src/poppler-form.cc | 1 + - qt4/src/poppler-form.h | 1 + - qt4/src/poppler-private.h | 2 +- - qt4/src/poppler-qt4.h | 2 +- - 8 files changed, 8 insertions(+), 4 deletions(-) - -commit 18d584158a781fecb4f696b01fb4d17803ce7d7a -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 7 17:55:48 2009 +0100 - - Add lcms option to cmake buildsystem - - CMakeLists.txt | 9 +++++++++ - cmake/modules/FindLCMS.cmake | 37 +++++++++++++++++++++++++++++++++++++ - config.h.cmake | 3 +++ - 3 files changed, 49 insertions(+), 0 deletions(-) - -commit 140b8ed97416f9c2ec02eb749ca45ca50bd651a8 -Author: Koji Otani <sho@bbr.jp> -Date: Wed Jan 7 17:43:44 2009 +0100 - - Add initial support for color management - - configure.ac | 19 ++ - poppler/GfxState.cc | 697 - +++++++++++++++++++++++++++++++++++++++++++++++---- - poppler/GfxState.h | 74 +++++- - poppler/Makefile.am | 5 + - 4 files changed, 738 insertions(+), 57 deletions(-) - -commit bdc76dc811a6e4d5fd929bbdc8cd3300aeaea31f -Author: Pino Toscano <pino@kde.org> -Date: Tue Jan 6 15:45:37 2009 +0100 - - [Qt4] apidox improvements for the font functions of Document; mark - scanForFonts() as deprecated - - qt4/src/poppler-qt4.h | 22 ++++++++++++++++++---- - 1 files changed, 18 insertions(+), 4 deletions(-) - -commit 6630e715714161cd803fc064f5d3cf880f42b0a5 -Author: Pino Toscano <pino@kde.org> -Date: Tue Jan 6 15:36:19 2009 +0100 - - tell Doxygen to consider Q_DECL_DEPRECATED as empty - - qt4/src/Doxyfile | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit d748d430b106580b8be29ca3ec75caf05b55812e -Author: Pino Toscano <pino@kde.org> -Date: Tue Jan 6 15:24:25 2009 +0100 - - [Qt4] Add a FontIterator for iterating through the fonts of the - document, page by page. - - This new iterator class is the new preferred way for getting the - fonts of a document in a page-by-page mode. - * Document::fonts() is adapted to use it, instead of relying on - scanForFonts() - * scanForFonts() is ported to FontIterator, but keeping the old - behaviour ("i can scan the document only once") - * added unit tests for fonts(), scanForFonts() and FontIterator - - qt4/src/poppler-document.cc | 27 +++++--- - qt4/src/poppler-fontinfo.cc | 36 ++++++++++ - qt4/src/poppler-private.h | 27 +++++++- - qt4/src/poppler-qt4.h | 65 +++++++++++++++++++ - qt4/tests/check_fonts.cpp | 149 - +++++++++++++++++++++++++++++++++++++++++++ - 5 files changed, 291 insertions(+), 13 deletions(-) - -commit b9804542bb50216786dc11ca16efd84304f4b832 -Author: Pino Toscano <pino@kde.org> -Date: Tue Jan 6 15:16:53 2009 +0100 - - Add the possibility to set the first page to scan. - - The default value is 0 (= first page), so it should be compatible - with any usage so far. - - poppler/FontInfo.cc | 4 ++-- - poppler/FontInfo.h | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -commit af74fef03bfbd79334da5612c63c7793952542f9 -Author: Warren Toomey <poppler@tuhs.org> -Date: Tue Jan 6 01:36:31 2009 +0100 - - Add forgotten file to let the autotools based system build - - m4/libpng.m4 | 99 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 99 insertions(+), 0 deletions(-) - -commit ae588500f62bab5666174ff3b1564c414c5a76c5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jan 6 01:35:38 2009 +0100 - - Fix the cmake buildsystem - - CMakeLists.txt | 6 ++++++ - config.h.cmake | 3 +++ - utils/CMakeLists.txt | 4 ++++ - 3 files changed, 13 insertions(+), 0 deletions(-) - -commit 940d060a14712c09da427e2fac4ec579f7291b0f -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jan 6 01:27:06 2009 +0100 - - do not leak fName if fopen fails - - utils/HtmlOutputDev.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 7be9198adb940ad7c5fffc6db0158cf7042e1b8f -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jan 6 01:24:15 2009 +0100 - - Do not leak pgNum and imgnum if fopen fails - - utils/HtmlOutputDev.cc | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -commit dfba6c022b150553cb2b18b027e661b3b4625ce7 -Author: Warren Toomey <poppler@tuhs.org> -Date: Tue Jan 6 01:16:31 2009 +0100 - - Make pdftohtml output png images when the image stream is not a jpeg - - configure.ac | 14 +++++ - utils/HtmlOutputDev.cc | 126 - +++++++++++++++++++++++++++++++++++++++++++++-- - utils/HtmlOutputDev.h | 3 +- - utils/Makefile.am | 4 ++ - 4 files changed, 140 insertions(+), 7 deletions(-) - -commit 0963c276ba972a36c2895e4fe1c7475acd489738 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 4 16:54:32 2009 +0100 - - Fix some checked checkboxes not rendering correctly - - If we are forcing ZaDb/ZapfDingbats to correctly draw a checkmark - in the checkbox, but the file does not have such font defined we - need to create a fake one so the system really renders it - Fixes bug 19359 - - poppler/Annot.cc | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- - poppler/Annot.h | 2 ++ - poppler/Gfx.h | 7 ++++--- - 3 files changed, 53 insertions(+), 5 deletions(-) - -commit 46128cf83b322c112eb0c409c20052bdb2ea4a37 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 4 14:21:15 2009 +0100 - - Remove wrong and unused FormWidget(FormWidget *dest) contructor - - poppler/Form.cc | 11 ----------- - poppler/Form.h | 3 +-- - 2 files changed, 1 insertions(+), 13 deletions(-) - -commit 5203aefc41fa47c461812cc46f28281edd226515 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 4 14:03:16 2009 +0100 - - Plug some memory leaks - - poppler/Annot.cc | 5 ++++- - poppler/Form.cc | 4 +++- - 2 files changed, 7 insertions(+), 2 deletions(-) - -commit 5fb7ec7e6af4cfb2b256a5b9b9752e68330b4aec -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Dec 30 23:46:59 2008 +0100 - - If Length2 is zero just write until we find EOF of the stream - - Fixes exporting to PS of the two pdf i have that have fonts with - Length2 set to 0 - - poppler/PSOutputDev.cc | 26 +++++++++++++++++++++----- - 1 files changed, 21 insertions(+), 5 deletions(-) - -commit ca35fdbc7c31dae432d775b6c087a83fa9b897fc -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Dec 30 23:03:57 2008 +0100 - - We need spaces here too to satify other consumer parsers - - poppler/PDFDoc.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 3c07c73e07a9cb59ee4c23ca60d2adce92de45f7 -Author: Pino Toscano <pino@kde.org> -Date: Tue Dec 30 22:21:27 2008 +0100 - - [Qt4-demo] load a document when passed via command line - - qt4/demos/main_viewer.cpp | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit aba0aaa896d634a51fbb3a3e6eae411be462f930 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Dec 29 00:31:18 2008 +0100 - - More improvements in document writing - - Dictionary keys are names so need to be sanitized - Add a space after num gen obj - - poppler/PDFDoc.cc | 7 +++++-- - 1 files changed, 5 insertions(+), 2 deletions(-) - -commit e5b93a847ae4e20a77fecef0938da4f14dfbe3eb -Author: Hib Eris <hib@hiberis.nl> -Date: Sun Dec 28 22:59:14 2008 +0100 - - Let compiler figure out CDECL - - CDECL is a compiler specific macro to specify C calling convention. - - On Windows, some functions must be forced to use this calling - convention. - To do this, you can use the macro CDECL, which is defined in windef.h. - - Poppler should not try to be smarter than the compiler and try - to guess - the correct definition for CDECL. Instead it should rely on the - definitions in the windef.h file provided by the compiler. - - On Unix, specifying a calling convention is not nescessary, so - CDECL can - be an empty definition. - - poppler-config.h.cmake | 8 ++------ - poppler/poppler-config.h.in | 8 ++------ - 2 files changed, 4 insertions(+), 12 deletions(-) - -commit de70c0aeb37d788f595b0574796844f51ddedec1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 28 21:21:12 2008 +0100 - - [qt4] improve doc a bit - - qt4/src/poppler-form.h | 2 +- - qt4/src/poppler-qt4.h | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -commit effb32658019e09dc86c017e39154fd554fc94f8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 28 02:56:30 2008 +0100 - - Form Rects are against the cropbox, not the media box - - Fixes second pdf at kde bug 161327 - - qt4/src/poppler-form.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0f10561f3b1c90acc030d973399316bfca5f495e -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 28 01:44:25 2008 +0100 - - Fix my last commit, copy&paste is really evil - - goo/GooString.cc | 9 +++++---- - goo/GooString.h | 2 +- - 2 files changed, 6 insertions(+), 5 deletions(-) - -commit 217b46484ff56bfd5906b293ebee70b82cc0263d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 28 01:29:41 2008 +0100 - - Move PSOutputDev::filterPSName to GooString::sanitizedName so i can - use it from PDFDoc::writeObject - - goo/GooString.cc | 36 +++++++++++++++++++++++++++++++++++ - goo/GooString.h | 7 ++++++ - poppler/PDFDoc.cc | 7 +++++- - poppler/PSOutputDev.cc | 49 - ++++++++--------------------------------------- - poppler/PSOutputDev.h | 3 +- - 5 files changed, 59 insertions(+), 43 deletions(-) - -commit f41fa9ee71aef5539cf9976c79b32bf1713c8167 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 26 22:56:12 2008 +0100 - - Change the overflow check to the same used in gmem.cc, much more - easy to understand - - poppler/XRef.cc | 12 ++++++------ - 1 files changed, 6 insertions(+), 6 deletions(-) - -commit b8ae7d91dedc9a75200b6050628ec2740af84b98 -Author: Hib Eris <hib@hiberis.nl> -Date: Fri Dec 26 22:28:09 2008 +0100 - - Fix compile warnings on auto imports for mingw32 - - configure.ac | 3 +++ - glib/Makefile.am | 2 +- - glib/demo/Makefile.am | 2 ++ - test/Makefile.am | 2 ++ - utils/Makefile.am | 2 ++ - 5 files changed, 10 insertions(+), 1 deletions(-) - -commit ba47bd2ba05f883306606eda30bff17bd4a8eec6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 26 19:47:42 2008 +0100 - - BaseFile.h has never been used and it fact it's not part of xpdf - sources - - Fixes bug 19298 - - CMakeLists.txt | 1 - - poppler/BaseFile.h | 82 - --------------------------------------------------- - poppler/Makefile.am | 1 - - 3 files changed, 0 insertions(+), 84 deletions(-) - -commit 84366d9e63b0d6a5ee1aae2463648cfc2ff5e1b8 -Author: Hib Eris <hib@hiberis.nl> -Date: Wed Dec 24 19:27:19 2008 +0100 - - Let libtool build DLLs on windows too - - configure.ac | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit 08cef528f2e51cc62cff4125f179021ad9555317 -Author: Hib Eris <hib@hiberis.nl> -Date: Wed Dec 24 17:48:46 2008 +0100 - - Fix compile warning on string literal format - - test/pdf-inspector.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0606b4bba8e889204c7b7c9d376f63b659f83a4f -Author: Hib Eris <hib@hiberis.nl> -Date: Wed Dec 24 17:48:10 2008 +0100 - - Fix compile warnings on parentheses and/or - - poppler/CairoOutputDev.cc | 13 +++++++------ - 1 files changed, 7 insertions(+), 6 deletions(-) - -commit eba2232cabd5fb1e177db2a6053f0d1a0aee882b -Author: Hib Eris <hib@hiberis.nl> -Date: Wed Dec 24 17:46:32 2008 +0100 - - Fix some more warnings - - test/gtk-cairo-test.cc | 11 ----------- - test/pdf-inspector.cc | 9 +++++---- - 2 files changed, 5 insertions(+), 15 deletions(-) - -commit c80431eb1626d89e7b615e5a5149d3436b554b66 -Author: Hib Eris <hib@hiberis.nl> -Date: Mon Dec 22 09:28:47 2008 +0100 - - Fix compile warning on format type - - glib/test-poppler-glib.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit fda181c35b7c7500b6d3c6ca9d454addd54929c5 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 22 00:53:44 2008 +0100 - - group condition within brackets - - poppler/ArthurOutputDev.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit c1beeecbd6cbf82811d70c75cb24059b4b492abe -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 22 00:46:49 2008 +0100 - - [demo] use the proper format field for gsize types - - glib/demo/attachments.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit bfb975466f0ff78e9e292b6af7cac66e4c331456 -Merge: 3e27892 ea3546f -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 22 00:29:38 2008 +0100 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit 3e2789257f5fc4ae0573a0c62ea380d8e83a5bb5 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 22 00:24:23 2008 +0100 - - [Qt] deserialize also the value of 'right' - - qt/poppler-link.cc | 11 ++++++----- - 1 files changed, 6 insertions(+), 5 deletions(-) - -commit 7c053ab7623cea1ac650d3e960d2d91a1ef21557 -Author: Pino Toscano <pino@kde.org> -Date: Mon Dec 22 00:19:02 2008 +0100 - - [Qt] move in a .cc file the implementation of the QString<->GooString - functions and DocumentData::addTocChildren() - - qt/CMakeLists.txt | 1 + - qt/Makefile.am | 1 + - qt/poppler-document.cc | 10 --- - qt/poppler-page.cc | 1 + - qt/poppler-private.cc | 147 - ++++++++++++++++++++++++++++++++++++++++++++++++ - qt/poppler-private.h | 106 ++-------------------------------- - 6 files changed, 157 insertions(+), 109 deletions(-) - -commit ea3546f84c5335c58cdb2906b1a1a4656be9c8ea -Author: Hib Eris <hib@hiberis.nl> -Date: Sun Dec 21 23:33:49 2008 +0100 - - Fix compile warnings on signed/unsigned comparison - - goo/gfile.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit ca672ae51d2c1fa59a891717b418ba86b5e7345c -Author: Hib Eris <hib@hiberis.nl> -Date: Sun Dec 21 23:33:00 2008 +0100 - - Fix compile warnings on ignored pragma with mingw compiler - - poppler/Gfx.cc | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit 86cfe8ab2b4e0b600f3f6682701c2fcfbe5d0ca9 -Author: Hib Eris <hib@hiberis.nl> -Date: Sun Dec 21 23:08:56 2008 +0100 - - Fix compile warnings on signed/unsigned comparison - - poppler/GfxFont.cc | 6 ++++-- - 1 files changed, 4 insertions(+), 2 deletions(-) - -commit e34af7ffe0a4024e2eb39314bdb09eb9a662e53e -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 21 22:16:39 2008 +0100 - - Update copyright of last commits - - poppler/TextOutputDev.cc | 1 + - poppler/TextOutputDev.h | 2 +- - qt4/src/poppler-page.cc | 1 + - 3 files changed, 3 insertions(+), 1 deletions(-) - -commit f6d84dcfc9cc587c7408af79b1ee7658d456f8d8 -Author: Hib Eris <hib@hiberis.nl> -Date: Sun Dec 21 22:09:00 2008 +0100 - - Fix compile warning to suggest parentheses and/or - - poppler/TextOutputDev.cc | 14 ++++++++------ - 1 files changed, 8 insertions(+), 6 deletions(-) - -commit 15205403eaa95d6fba0e36983de993877dd3a983 -Author: Hib Eris <hib@hiberis.nl> -Date: Sun Dec 21 21:59:45 2008 +0100 - - Fix warning to suggest parentheses inside shift - - poppler/PSOutputDev.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit cc24f37e582bfc0069faf286da97a48fe4794db1 -Author: Hib Eris <hib@hiberis.nl> -Date: Sun Dec 21 21:35:29 2008 +0100 - - Fix compile warning on ambiguous else - - test/perf-test.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit a8cc4ad8c2da804f25db8cca1c85433d5a63307c -Author: Hib Eris <hib@hiberis.nl> -Date: Sun Dec 21 21:34:28 2008 +0100 - - Fix compile warning on format not a string literal - - test/perf-test.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 3cbbf8226730aa7ee6273e154e4a9d58670a3cda -Author: Hib Eris <hib@hiberis.nl> -Date: Sun Dec 21 21:30:54 2008 +0100 - - Fix compile warning about uninitialized variable - - poppler/ABWOutputDev.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit f675916277cb76cd1293225a1271f835a02148fb -Author: Pino Toscano <pino@kde.org> -Date: Sat Dec 20 23:23:10 2008 +0100 - - reset to NULL after being deleted - - found with poppler-qt4 unit tests =) - - poppler/TextOutputDev.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit c976770c64e4c991fff27e413414473583b6fd86 -Author: Pino Toscano <pino@kde.org> -Date: Sat Dec 20 22:25:55 2008 +0100 - - [Qt4] use QHash instead of QMap where applicable - - using a hash table instead of a map mapes lookup faster; - in these cases we don't need the sorting a map gives - - qt4/src/poppler-page.cc | 7 ++++--- - 1 files changed, 4 insertions(+), 3 deletions(-) - -commit 944f6049a50eb3be9fb29174d67adc4ad1d0b9fe -Author: Pino Toscano <pino@kde.org> -Date: Sat Dec 20 20:13:43 2008 +0100 - - add find.c and text.c - - glib/demo/CMakeLists.txt | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit ba91b889c3b50239e339938f3c9d31fffcd87d44 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Dec 20 19:29:40 2008 +0100 - - Make destructor private in TextPage - - poppler/TextOutputDev.h | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit 0da16537aa83f6ed6d8895c7e54266263a71c1cf -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Dec 19 19:08:21 2008 +0100 - - Refactor actual text code adding a new ActualText class - - It's used by both Text and Cairo ouput devices avoiding duplicated - code - in such classes. - - poppler/CairoOutputDev.cc | 108 +++--------------------- - poppler/CairoOutputDev.h | 7 +-- - poppler/TextOutputDev.cc | 206 - ++++++++++++++++++++++++++------------------- - poppler/TextOutputDev.h | 34 ++++++-- - 4 files changed, 160 insertions(+), 195 deletions(-) - -commit 0f8ab301c633133eea3dbd4f2254f31c50e3c4a9 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Dec 14 13:12:34 2008 +0100 - - [glib-demo] Add find demo - - glib/demo/Makefile.am | 2 + - glib/demo/find.c | 282 - +++++++++++++++++++++++++++++++++++++++++++++++++ - glib/demo/find.h | 31 ++++++ - glib/demo/main.c | 4 +- - 4 files changed, 318 insertions(+), 1 deletions(-) - -commit 88df9e9aa9adb53f0a9714ea404d46f111495df3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Dec 14 11:54:35 2008 +0100 - - [glib-demo] Add Text demo - - glib/demo/Makefile.am | 2 + - glib/demo/main.c | 4 +- - glib/demo/text.c | 175 - +++++++++++++++++++++++++++++++++++++++++++++++++ - glib/demo/text.h | 31 +++++++++ - 4 files changed, 211 insertions(+), 1 deletions(-) - -commit 5b0f2355d55a5104820fd0bf16b4e76b25959de4 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Dec 14 11:49:00 2008 +0100 - - [glib] Use TextPage instead of TextOutputDev when cairo is enabled - - glib/poppler-page.cc | 148 - +++++++++++++++++++++++++++++++++--------------- - glib/poppler-private.h | 4 + - 2 files changed, 107 insertions(+), 45 deletions(-) - -commit 3ced71fb68d62308db7b9535367eafefb55d1cde -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Dec 14 11:18:00 2008 +0100 - - Add optionally text support to CairoOutputDev - - If a TextPage is set, it'll be used when rendering so that we - don't need - to use TextOutputDev and render again. - - poppler/CairoOutputDev.cc | 144 - +++++++++++++++++++++++++++++++++++++++++++-- - poppler/CairoOutputDev.h | 19 +++++- - 2 files changed, 155 insertions(+), 8 deletions(-) - -commit 0bdad35cc4cfdb8da5acaf44678920b7a0025f99 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Dec 14 11:14:12 2008 +0100 - - Add refcount support to TextPage - - poppler/TextOutputDev.cc | 12 +++++++++++- - poppler/TextOutputDev.h | 5 +++++ - qt4/src/poppler-page.cc | 2 +- - 3 files changed, 17 insertions(+), 2 deletions(-) - -commit f86514c3fbc867fc6457feacba23451e89993524 -Author: Koji Otani <sho@bbr.jp> -Date: Wed Dec 17 00:36:39 2008 +0100 - - Fix wrong PS generation when a large image is in Patterns - - Bug 18908 - - poppler/PSOutputDev.cc | 114 - ++++++++++++++++++++++++++++++------------------ - 1 files changed, 72 insertions(+), 42 deletions(-) - -commit fc395eb90b418e43453acefb42cd04baf0b7ad40 -Author: Richard Airlie <richard.airlie@maglabs.net> -Date: Tue Dec 16 21:11:53 2008 +0100 - - Allow the use of cropbox in pdftoppm - - utils/pdftoppm.cc | 16 +++++++++++++--- - 1 files changed, 13 insertions(+), 3 deletions(-) - -commit 80f415176952635a485356cf36048eee53396c25 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Dec 16 20:37:39 2008 +0100 - - Make destructors private/protected since you are not supposed to - use them - - poppler/GfxFont.cc | 2 +- - poppler/GfxFont.h | 11 +++++------ - 2 files changed, 6 insertions(+), 7 deletions(-) - -commit dbcebda953cb36a45a125aada68e85249fb73f43 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Dec 15 20:10:31 2008 +0100 - - Do not leak on AnnotScreen destructor - - Fixes bug 19095 - - poppler/Annot.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit aaeb0d137232bf1cb11dc5e37b8b45b50c6f9c6a -Author: Pino Toscano <pino@kde.org> -Date: Fri Dec 12 00:43:19 2008 +0100 - - update the xpdf headers installation - - CMakeLists.txt | 32 +++++++++++++++++++++----------- - 1 files changed, 21 insertions(+), 11 deletions(-) - -commit 7c6527fa05389f705872aaaaff12e739b5d1577e -Author: Pino Toscano <pino@kde.org> -Date: Fri Dec 12 00:41:21 2008 +0100 - - don't install Function.cc, as it is not an header - - poppler/Makefile.am | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 0179e21b128ffccb5afd13203137ab8435197609 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 12 00:16:38 2008 +0100 - - Be more helpful with bad boys that want to use poppler core directly - - fofi/Makefile.am | 10 ++++++++++ - splash/SplashClip.h | 2 +- - splash/SplashPath.h | 2 +- - splash/SplashXPath.h | 2 +- - 4 files changed, 13 insertions(+), 3 deletions(-) - -commit 401632e4eeb4b10b1183a820f32461da77e8e4f2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 12 00:14:04 2008 +0100 - - Try harder to look for openjpeg - - cmake/modules/FindLIBOPENJPEG.cmake | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit ab539f46089702f60b96b1ba2b2bc1544173c264 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Dec 11 23:15:45 2008 +0100 - - Fix crash when reading outline - - Fixes bug 19024. Last as reference is required if the item has - children (Table 8.4) so if there is no last reference, don't try to - read children. - - poppler/Outline.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit c9a755f9fd14511f43a2ca7fcda36bdd64bb1d87 -Author: Ilya Gorenbein <igorenbein@finjan.com> -Date: Sun Dec 7 17:59:19 2008 +0100 - - Fix memory leak - - Bug 18924 - - poppler/Page.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 4cd364c179ae91ed383a8237ba1ad263952fd7aa -Author: Pino Toscano <pino@kde.org> -Date: Sun Nov 30 16:57:52 2008 +0100 - - add my copyright here - - qt4/src/poppler-private.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 6b1676deb773675d90469adc84c3de8dcdaf174c -Author: Pino Toscano <pino@kde.org> -Date: Sun Nov 30 16:56:43 2008 +0100 - - [Qt4] support URI actions for TOC items - - qt4/src/poppler-private.cc | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit b5cd58b5565055fd0c13771461245ddcd80edfcf -Author: Pino Toscano <pino@kde.org> -Date: Sun Nov 30 16:34:57 2008 +0100 - - extract the LinkAction "serialization" in an own function, and make - it more safe - - qt4/src/poppler-private.cc | 85 - ++++++++++++++++++++++++++++++------------- - 1 files changed, 59 insertions(+), 26 deletions(-) - -commit ee191363e22940ae7b06945e68c4738b17c78348 -Author: Pino Toscano <pino@kde.org> -Date: Sun Nov 30 16:17:32 2008 +0100 - - move the addTocChildren() implementation in the cpp - - qt4/src/poppler-form.cc | 1 + - qt4/src/poppler-page.cc | 1 + - qt4/src/poppler-private.cc | 65 - ++++++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-private.h | 64 - +----------------------------------------- - 4 files changed, 69 insertions(+), 62 deletions(-) - -commit f8eaabf1aa7e384619129a7509be85d0c3bfb825 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 30 13:33:12 2008 +0100 - - Update copyrights of the last commits - - poppler/TextOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 5f4fedfae6098e25644ffe5d4b1ed0bac043841d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Nov 29 19:51:27 2008 +0100 - - Use the Length specified in the Stream as initial bufSize - - This is a optimization to save a few reallocations, if the Length - value is incorrect it will still work - - poppler/JPEG2000Stream.cc | 10 ++++++++-- - 1 files changed, 8 insertions(+), 2 deletions(-) - -commit 12f6d6ba2052fbdc8ea4ba7c7c9277e75bf170a5 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Nov 23 18:20:14 2008 +0100 - - Fix a crash when the second argument of opMarkPoint is not a - dictionary - - According to the spec "If any of the values are indirect references to - objects outside the content stream, the property list dictionary must - instead be defined as a named resource. - - poppler/Gfx.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 817e123a28e9f6b7e5be23f7ac2ba3bcec5e3f3f -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sat Nov 22 21:48:37 2008 +1030 - - Don't compare print flag for non Type 3 fonts in cairo font cache - - poppler/CairoFontEngine.cc | 7 ++++++- - poppler/CairoFontEngine.h | 4 +++- - 2 files changed, 9 insertions(+), 2 deletions(-) - -commit 68f8ade28764855d4f663607c50c8202b1268296 -Author: Albert Astals Cid <tsdgeos@samsung.localdomain> -Date: Sun Nov 23 10:54:46 2008 +0100 - - Compile with -pedantic - - Thanks to Bernard Leak for notifying - - test/pdf-inspector.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 4a4fa7ed44a87e47a6078a1f7bb6f41071672ea7 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Nov 18 20:11:07 2008 +0100 - - Fix a crash when selecting text in word mode - - poppler/TextOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit a6f5032ab0d6edbf3879f39efff7916b1f7233da -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Nov 16 18:24:06 2008 +0100 - - optContentConfig is not actually stored in PDFDoc but in Catalog - - poppler/PDFDoc.h | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit b843ac34c6c4ca1580f99fa2220c59dfcd91f026 -Author: Pino Toscano <pino@kde.org> -Date: Sat Nov 15 14:49:02 2008 +0100 - - [Qt4] deserialize the value of the 'right' coordinate, too - - qt4/src/poppler-link.cc | 11 ++++++----- - 1 files changed, 6 insertions(+), 5 deletions(-) - -commit 03061fdae49842556c9ff48e61914fc88502e1d8 -Author: Tim Mooney <enchanter@users.sourceforge.net> -Date: Thu Nov 13 22:32:22 2008 +0100 - - Fix build on Solaris 10 + Sun Studio 12. - - Fixes bug 17496 - - configure.ac | 14 ++++++++++++++ - test/Makefile.am | 6 ++++-- - 2 files changed, 18 insertions(+), 2 deletions(-) - -commit 17b18be4fd25f2ca2b4ed7382d9fda50410c44f1 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Wed Nov 12 20:40:57 2008 +1030 - - Ensure cairo font matrix is invertable - - Fixes bugs #18254 and #18429 - - poppler/CairoOutputDev.cc | 15 ++++++++++++++- - 1 files changed, 14 insertions(+), 1 deletions(-) - -commit e2257e6916cd1067d43db9ed45f944413c61ed64 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 9 22:44:48 2008 +0100 - - Update copyrights of the last commits - - poppler/CairoFontEngine.cc | 1 + - poppler/CairoFontEngine.h | 1 + - poppler/Form.cc | 2 +- - poppler/Gfx.h | 1 + - poppler/OptionalContent.h | 1 + - qt4/src/poppler-optcontent.cc | 1 + - 6 files changed, 6 insertions(+), 1 deletions(-) - -commit 069f8ad9453e612e907b561aa50983c34400193d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 9 20:36:06 2008 +0100 - - MakeItBuild - - glib/CMakeLists.txt | 1 + - glib/demo/CMakeLists.txt | 1 + - 2 files changed, 2 insertions(+), 0 deletions(-) - -commit 04025c4f65bbb7e4330f6d17d917a035c0906f3d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Nov 9 17:03:20 2008 +0100 - - Fix a crash when initializing an Annot with a null catalog - - Forms crate a temp annot just to get the font size of the form field - passing a NULL catalog. - - poppler/Annot.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 471255c5a3850984997d91c7850759eb0c7e8a9c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Nov 8 20:58:57 2008 +0100 - - [glib-demo] Add Optional Content demo - - glib/demo/Makefile.am | 2 + - glib/demo/layers.c | 511 - +++++++++++++++++++++++++++++++++++++++++++++++++ - glib/demo/layers.h | 31 +++ - glib/demo/main.c | 4 +- - 4 files changed, 547 insertions(+), 1 deletions(-) - -commit 7363c25e1d83332932d9b4fe16d7fb4e364da628 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Oct 26 19:47:35 2008 +0100 - - [glib] Add Optional Content support - - glib/Makefile.am | 2 + - glib/poppler-document.cc | 377 - +++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-document.h | 12 ++ - glib/poppler-layer.cc | 201 ++++++++++++++++++++++++ - glib/poppler-layer.h | 43 +++++ - glib/poppler-private.h | 21 +++ - glib/poppler.h | 3 + - glib/test-poppler-glib.cc | 52 ++++++- - 8 files changed, 710 insertions(+), 1 deletions(-) - -commit c674566f458b54097f21aae0d4bf8637146565c5 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Oct 26 19:42:53 2008 +0100 - - Fix memory leaks in OptionalContent - - poppler/OptionalContent.cc | 13 +++---------- - poppler/OptionalContent.h | 10 ++++++---- - 2 files changed, 9 insertions(+), 14 deletions(-) - -commit 06ca313b8ecb8abb8dec3b418d118525b7bb0fdf -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Oct 26 19:11:45 2008 +0100 - - Check annotation optional content properties before drawing it - - poppler/Annot.cc | 20 ++++++++++++-------- - poppler/Annot.h | 4 ++-- - 2 files changed, 14 insertions(+), 10 deletions(-) - -commit a6d58927b048aa043cb6b6ed3ee9aeb213578924 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Nov 8 20:50:40 2008 +0100 - - Do not show hidden optional content - - Before any draw operation we first check whether we are inside an - optional marked content element that is currently hidden. - - poppler/Gfx.cc | 113 - +++++++++++++++++++++++++++++++++++++++----------------- - poppler/Gfx.h | 7 ++- - 2 files changed, 84 insertions(+), 36 deletions(-) - -commit 5f168f991477e291290350a28f4a60a565e187b9 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Oct 20 17:56:11 2008 +0200 - - [glib] Show action titles when printing the index in test program - - glib/test-poppler-glib.cc | 13 ++++++++----- - 1 files changed, 8 insertions(+), 5 deletions(-) - -commit a906d12e16748d9a40c0db4043a576fd3d004341 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Nov 8 20:20:00 2008 +0100 - - Minor code cleanup and consistency issues - - poppler/OptionalContent.cc | 22 +++++++++++----------- - poppler/OptionalContent.h | 8 ++++---- - qt4/src/poppler-optcontent.cc | 6 +++--- - qt4/tests/check_optcontent.cpp | 8 ++++---- - 4 files changed, 22 insertions(+), 22 deletions(-) - -commit e73c2ce906b7e1f06d641f7e0733aad6336b4091 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Oct 19 12:44:13 2008 +0200 - - Delete the optContent object if it's invalid - - poppler/Catalog.cc | 4 ++++ - poppler/OptionalContent.cc | 3 +++ - poppler/OptionalContent.h | 5 +++++ - 3 files changed, 12 insertions(+), 0 deletions(-) - -commit 2900e7e4c920d735d5a727e9e39f71df97bd7b93 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Nov 8 18:12:47 2008 +0100 - - A new cairo is needed - - CMakeLists.txt | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit aaaecd2e86769d3a99e21577448a193711985958 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 5 22:47:30 2008 +0100 - - Do not abort if indexHighA is 'invalid', move it to the closest - valid value and try with it - - For the bug 18374 it works and does not seem a security problem - - poppler/GfxState.cc | 7 ++++--- - 1 files changed, 4 insertions(+), 3 deletions(-) - -commit 82f4228a50efe6447c68f7f6d34a7805b7e4b75e -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 5 20:57:17 2008 +0100 - - Add myself here - - qt4/demos/viewer.cpp | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 8df7d83439f0e9ab200840f912f1c08bbf44bd6e -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 5 20:49:01 2008 +0100 - - [Qt4Demo] Fix leak - - qt4/demos/viewer.cpp | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit d3c424e0362f53bda5c4e2e415823d78ace76253 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 5 20:14:17 2008 +0100 - - Rename i to j so that code is more clear by not shadowing the - function parameter - - poppler/Catalog.cc | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit 9d12de9b59de4336eabb423f7bf0363b6a35e2a8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 5 20:00:01 2008 +0100 - - Fix crash in case indices is NULL - - Putting more than one "logical line" per "real line" is evil, we - think if will group it, but does not - - poppler/UnicodeTypeTable.cc | 7 +++++-- - 1 files changed, 5 insertions(+), 2 deletions(-) - -commit fc61dad9daa15f83802ffa5c3cd9b59d80bb310b -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 5 19:52:00 2008 +0100 - - [Qt] Fix leak - - qt/poppler-link.cc | 8 +++++++- - 1 files changed, 7 insertions(+), 1 deletions(-) - -commit 981fb857b0afb1cda7836744dcf37906285512b4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 5 19:49:18 2008 +0100 - - [Qt] Fix memory leak - - qt/poppler-document.cc | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit e925e92d5cbfc009c138ece117227a3b0894ead6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 5 19:44:40 2008 +0100 - - Do not leak uBuf in the error case - - poppler/CharCodeToUnicode.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 0741a402632ec5a8641ff11707142bf2731c1833 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sat Nov 1 22:27:48 2008 +1030 - - Restore the cairo Type3 font image prescaling funtionality - - poppler/CairoFontEngine.cc | 49 - ++++++++++++++++++++++++++------------------ - poppler/CairoFontEngine.h | 20 ++++++++++------- - poppler/CairoOutputDev.cc | 2 +- - poppler/CairoOutputDev.h | 2 +- - 4 files changed, 43 insertions(+), 30 deletions(-) - -commit 91a7c3fdd44f30b0b50ed05a3313bbb1b5c86e71 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sat Nov 1 20:57:24 2008 +1030 - - Remove cairo font matrix y flip when inside a Type 3 char - - Not sure why this was previously required but it now produces - incorrect results. - - poppler/CairoOutputDev.cc | 5 ----- - 1 files changed, 0 insertions(+), 5 deletions(-) - -commit 3bf4d7d75b455a9a0b5ee3a8c78b218e5af5185a -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sat Nov 1 20:50:07 2008 +1030 - - Transform the glyph advance by the font matrix - - poppler/CairoFontEngine.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 4aa32bad61d008a854fdc9e902d6834bb1687d7e -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sat Nov 1 20:49:04 2008 +1030 - - Use the font BBox, not the font matrix to set the Gfx BBox - - poppler/CairoFontEngine.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 987955440c7711f440c3d2b5cc8c05ec07228a77 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sat Nov 1 20:47:05 2008 +1030 - - Ensure both the font matrix and y-axis flip are in the matrix - - we use for transforming the glyph metrics. - - poppler/CairoFontEngine.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 5c051aa117477cba5d350adfc539acb4b5f2a56a -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sat Nov 1 01:59:07 2008 +1030 - - Require cairo 1.8.2 for user-font support - - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit a3edfa30680864b95a5196c5619846de42980857 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sat Nov 1 01:57:32 2008 +1030 - - Implement Type 3 fonts in cairo backend using cairo user-fonts - - poppler/CairoFontEngine.cc | 174 - ++++++++++++++++++++++++++++++++++++++++++-- - poppler/CairoFontEngine.h | 18 +++++ - poppler/CairoOutputDev.cc | 9 ++- - poppler/CairoOutputDev.h | 4 +- - 4 files changed, 194 insertions(+), 11 deletions(-) - -commit feab1e982a2ee39bb372d593633a06b6a499822f -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sat Nov 1 01:21:39 2008 +1030 - - Add CairoOutputDev functions for getting Type 3 glyph metrics - - poppler/CairoOutputDev.cc | 10 ++++++++++ - poppler/CairoOutputDev.h | 7 +++++++ - 2 files changed, 17 insertions(+), 0 deletions(-) - -commit a75efe208d899d4a23d5e2fcef200e4225721636 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sat Nov 1 00:26:40 2008 +1030 - - Make the catalog available to CairoFontEngine - - glib/poppler-document.cc | 3 ++- - poppler/CairoFontEngine.cc | 2 +- - poppler/CairoFontEngine.h | 3 ++- - poppler/CairoOutputDev.cc | 7 +++++-- - poppler/CairoOutputDev.h | 3 ++- - test/pdf-inspector.cc | 2 +- - 6 files changed, 13 insertions(+), 7 deletions(-) - -commit 941d3976c496b75a3c5a9d19b80044fc2b57bd98 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Fri Oct 31 22:44:41 2008 +1030 - - Allow multiple instances of CairoOutputDev to be created - - for the same document that shares the same CairoFontEngine. - - poppler/CairoOutputDev.cc | 16 +++++++++++----- - poppler/CairoOutputDev.h | 4 +++- - 2 files changed, 14 insertions(+), 6 deletions(-) - -commit 94cff513d8589f51b243fcb078f82cb931bb6d35 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Fri Oct 31 21:11:01 2008 +1030 - - Use correct return type in _ft_new_face - - poppler/CairoFontEngine.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0b5ee897a24ce1edfca19a3b843f9b7ee7026d07 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Fri Oct 31 20:55:14 2008 +1030 - - Refactor CairoFont - - Create a CairoFreeType subclass and move the FreeType specific code - into it. - - poppler/CairoFontEngine.cc | 197 - +++++++++++++++++++++++++------------------- - poppler/CairoFontEngine.h | 26 +++++-- - 2 files changed, 131 insertions(+), 92 deletions(-) - -commit a5865dae5b414de5f6dbda2a512101050c374e06 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Oct 28 10:30:59 2008 +0100 - - [glib] Add DISABLE_SINGLE_INCLUDES flags and fix glib-demo - - configure.ac | 4 ++++ - glib/Makefile.am | 3 ++- - glib/demo/Makefile.am | 3 ++- - glib/demo/annots.h | 2 +- - glib/demo/attachments.h | 2 +- - glib/demo/fonts.h | 2 +- - glib/demo/forms.h | 2 +- - glib/demo/images.h | 2 +- - glib/demo/info.h | 2 +- - glib/demo/links.h | 2 +- - glib/demo/outline.h | 2 +- - glib/demo/page.h | 2 +- - glib/demo/render.h | 2 +- - glib/demo/transitions.h | 2 +- - glib/demo/utils.h | 2 +- - 15 files changed, 20 insertions(+), 14 deletions(-) - -commit e07bfb54b77430e10e50c33151cf0afc9854006c -Author: Christian Persch <chpe@gnome.org> -Date: Tue Oct 28 10:29:51 2008 +0100 - - [glib] Fix build when compiling with GTK_DISABLE_SINGLE_INCLUDES - - glib/poppler-page.h | 3 +-- - 1 files changed, 1 insertions(+), 2 deletions(-) - -commit a84d272ffd2b593ac98148e71b83fba299c60fea -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Oct 28 10:01:00 2008 +0100 - - [glib] Add disable deprecated compile flags and fix compile warnings - - configure.ac | 6 ++++++ - glib/Makefile.am | 3 ++- - glib/demo/Makefile.am | 4 +++- - glib/demo/attachments.c | 4 ++-- - 4 files changed, 13 insertions(+), 4 deletions(-) - -commit 43f2b84a81625abee84c93cdced7fb92c99cd944 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Oct 21 23:00:55 2008 +0200 - - [Qt4] Small docu improvement - - qt4/src/poppler-qt4.h | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 00f9995b4960575cd1f392474c585f2140c8e587 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Oct 12 14:20:01 2008 +0200 - - Do not crash if there is not font - - See bug 18023 for more info - - poppler/TextOutputDev.cc | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit 084cc4335cfe2c0e66219eba4c1177ee7ff018c5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Oct 10 23:15:35 2008 +0200 - - obj4 should be the index 1 on the Array, not the 0, that's already - obj3 - - poppler/Form.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit d7442c90206d4b7a8ebc58f995647eb87ac35f42 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Oct 9 22:53:00 2008 +0200 - - If Name is a Ref we want to get the String it references, not the Ref - - poppler/OptionalContent.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 93f8dd9e837557bbfc0f058a664c356e3d6e82c0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Oct 9 21:28:27 2008 +0200 - - Poppler 0.10.0 - - CMakeLists.txt | 2 +- - NEWS | 16 ++++++++++++++++ - configure.ac | 2 +- - msvc/config.h | 6 +++--- - qt4/src/Doxyfile | 2 +- - 5 files changed, 22 insertions(+), 6 deletions(-) - -commit cdd9bf016de0d3f96b1d5e304c9d02f2bf71ff18 -Author: Mark Kaplan <mkaplan@finjan.com> -Date: Wed Oct 8 22:29:11 2008 +0200 - - Initialize properly OptionalContentGroup::m_name - - poppler/OptionalContent.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit c7b87f3b8cbbcca29a1974debc2233f621a2e33b -Author: Carlo Bramini <carlo.bramix@libero.it> -Date: Mon Oct 6 19:32:27 2008 +0200 - - Fix link on Mingw+Msys - - test/Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit e92255296511cae9cbbac8de800d8b26e5f681f1 -Author: Pino Toscano <pino@kde.org> -Date: Sun Oct 5 15:57:06 2008 +0200 - - [Qt4] when the PDF exporting fails, delete the file if it was - created by - the (failed) exporting - - qt4/src/poppler-pdf-converter.cc | 13 +++++++++++++ - 1 files changed, 13 insertions(+), 0 deletions(-) - -commit 360f470b852e37d400949343763a18bf598820e8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 4 20:04:44 2008 +0200 - - Remove unused var - - poppler/Annot.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit df7317f1320513b4f66cb6618d753b82042671f5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 4 19:48:57 2008 +0200 - - free the object - - poppler/PDFDoc.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 9946d9af9dd5d5b96d5c777413a3e253dfd1f291 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 4 19:39:46 2008 +0200 - - If we try saving a document that was encrypted, we break everything, - so just fail early - - poppler/PDFDoc.cc | 7 +++++++ - 1 files changed, 7 insertions(+), 0 deletions(-) - -commit 108959432af7714cb8ffe42d98d40c97f936a2e6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 4 19:39:24 2008 +0200 - - Correctly return wheter it was saved or not - - qt4/src/poppler-pdf-converter.cc | 8 +++++--- - 1 files changed, 5 insertions(+), 3 deletions(-) - -commit 4c6cb1c204d782e2ac2113b57f6d372b4716017d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 4 01:46:58 2008 +0200 - - Remove spurious // - - fofi/FoFiType1.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit e8e7809ab4b115cbe67251da12989fc024912514 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 4 01:43:02 2008 +0200 - - There are files that have more than one encoding definition per line, - make them work - - Fixes bug 17018, while at it, i've added some comments and some - error() to make things a bit clearer - - fofi/FoFiType1.cc | 28 ++++++++++++++++++++++++---- - 1 files changed, 24 insertions(+), 4 deletions(-) - -commit 7604e025038fee24c2cb3001f2100d5d1e48efe1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Oct 4 00:35:46 2008 +0200 - - Fix Poppler::Link::linkArea for rotated pages - - we suck :-( Fixes kde bug 172105 - - qt4/src/poppler-link-extractor.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 450b21e4528a8e890d3dda37ecb0a68602f8efaa -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Oct 1 00:46:29 2008 +0200 - - I've changed these files this year too, update copyright - - goo/gmem.cc | 2 +- - goo/gmem.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 98310ca24841789cf53b10d34e271ceb4e054001 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 30 23:59:43 2008 +0200 - - Fix StitchingFunction(StitchingFunction *func) and - GfxAxialShading(GfxAxialShading *shading) - - Fixes bug 17852 - - poppler/Function.cc | 2 ++ - poppler/GfxState.cc | 2 +- - 2 files changed, 3 insertions(+), 1 deletions(-) - -commit d12f5f4395eb18f8d29182e24acddd3e2b5cfe88 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 30 23:20:26 2008 +0200 - - 0.9.3 - - CMakeLists.txt | 2 +- - NEWS | 17 +++++++++++++++++ - configure.ac | 2 +- - msvc/config.h | 6 +++--- - qt4/src/Doxyfile | 2 +- - 5 files changed, 23 insertions(+), 6 deletions(-) - -commit d61e464754521555a06ed0901955f49be4def29a -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 30 19:26:17 2008 +0200 - - Timothy also agreed, now Ed Catmur is the last one missing to answer - - utils/ImageOutputDev.cc | 3 +++ - utils/ImageOutputDev.h | 3 +++ - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit 3225f54fea7cbb6b25d7223268cdeccfdd823375 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 30 00:27:49 2008 +0200 - - And Marco said yes to GPLv2+ - - Only Timothy Lee and Ed Catmur left :-) - - poppler/Catalog.cc | 3 +++ - poppler/Outline.cc | 3 +++ - poppler/Outline.h | 3 +++ - splash/Splash.cc | 3 +++ - splash/Splash.h | 3 +++ - 5 files changed, 15 insertions(+), 0 deletions(-) - -commit 268d803c9dd67b7f78f8dcdc3c7653c8b2c2d08f -Author: Warren Toomey <wkt@tuhs.org> -Date: Mon Sep 29 21:14:40 2008 +0200 - - Let HmtlOutputDev process images - - utils/HtmlOutputDev.h | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit a29984ab777c64a1cb286b667a6a91ad9b191f40 -Merge: f399afe 6865872 -Author: Pino Toscano <pino@kde.org> -Date: Sun Sep 28 23:39:08 2008 +0200 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit f399afe6f6b9c250327d0e4c5b3f2839889d7095 -Author: Pino Toscano <pino@kde.org> -Date: Sun Sep 28 23:38:34 2008 +0200 - - [Qt4] various apidox improvements - - qt4/src/Mainpage.dox | 10 +--- - qt4/src/poppler-link.h | 92 +++++++++++++++++++++++++++++++++--- - qt4/src/poppler-qt4.h | 121 - ++++++++++++++++++++++++++++++++--------------- - 3 files changed, 168 insertions(+), 55 deletions(-) - -commit 68658721583b05ebacb1165ac36e91d49735bbd9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Sep 28 19:29:06 2008 +0200 - - If tables is null, don't try to write to file as it'll crash, fixes - crash on 17811 when using cairooutputdev - - fofi/FoFiTrueType.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 3cb5b7fc5ae168ef58fd1905f61c1b9abe6cb86c -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Sep 28 19:25:53 2008 +0200 - - Introduce greallocn_checkoverflow and use it in FoFiTrueType::parse - - Fixes the other part of bug 17811 - - fofi/FoFiTrueType.cc | 4 ++-- - goo/gmem.cc | 21 +++++++++++++++++++++ - goo/gmem.h | 1 + - 3 files changed, 24 insertions(+), 2 deletions(-) - -commit aa7ef03af49f74ed558dcbab8ad4c594bb2b7d53 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Sep 28 19:24:43 2008 +0200 - - If libjpeg tells us to abort, let's abort :D - - Fixes part of bug 17811 - - poppler/DCTStream.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit e2461c9aa4d74b5511621d7222979948e31541ad -Author: Pino Toscano <pino@kde.org> -Date: Sun Sep 28 18:07:25 2008 +0200 - - [Qt4] Activate the 'printing' flag by default in the PSConverter. - - qt4/src/poppler-ps-converter.cc | 2 +- - qt4/src/poppler-qt4.h | 2 ++ - 2 files changed, 3 insertions(+), 1 deletions(-) - -commit 957d7acb66635e9748c6bc7a31cdbbcbb8da9011 -Author: Carlo Bramini <carlo.bramix@libero.it> -Date: Sat Sep 27 17:23:20 2008 +0200 - - Misc mingw fixes - - configure.ac | 2 +- - glib/Makefile.am | 2 +- - glib/demo/info.cc | 1 + - m4/libjpeg.m4 | 2 +- - 4 files changed, 4 insertions(+), 3 deletions(-) - -commit b3828203c4e594754957033ea826e8e22164fd5b -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Sep 26 23:08:14 2008 +0200 - - Carl agreed too, so CairoOutputDev.cc is done - - Only miss, Marco Pesenti Gritti, Timothy Lee and Ed Catmur - - poppler/CairoOutputDev.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit a197a07728d19abc2708979c95b4ef53e88fcb55 -Author: Carlo Bramini <carlo.bramix@libero.it> -Date: Fri Sep 26 18:42:05 2008 +0200 - - Compile where localtime_r is not available - - glib/demo/info.cc | 10 ++++++++-- - 1 files changed, 8 insertions(+), 2 deletions(-) - -commit 38884e1722ac7e15c62cece20035c5fb0020f4b3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 24 14:18:38 2008 +0200 - - Do what Jeff really want to do, mark the font as invalid if it matches - any of the known collections that Identity is not a good fallback - - Fixes pdf on KDE bug 171365 - - poppler/GfxFont.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0e080aaf44816e5d5b9008f3c2fb54868932f0ac -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 24 13:12:13 2008 +0200 - - Remove non-needed X includes - - Spotted by Carlo Bramini - - test/gtk-cairo-test.cc | 3 --- - test/pdf-inspector.cc | 3 --- - 2 files changed, 0 insertions(+), 6 deletions(-) - -commit 6888b023fdb199d3c5fb705bd928aedf68eeffdb -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 23 23:28:04 2008 +0200 - - Only do the scale to 'm' size trick on non embedded fonts as it was - meant to be - - Fixes bug 17744 - - poppler/SplashOutputDev.cc | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit 539d29f4f3b24b98c9fc5f88d3477e427fbe409d -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 23 22:39:50 2008 +0200 - - 0.9.2 - - CMakeLists.txt | 2 +- - NEWS | 19 +++++++++++++++++++ - configure.ac | 2 +- - msvc/config.h | 6 +++--- - qt4/src/Doxyfile | 2 +- - 5 files changed, 25 insertions(+), 6 deletions(-) - -commit abd070a79d8345bda3853395a39e4e2882c4ff8a -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 22 20:23:11 2008 +0200 - - Check the types here too - - Benchmarking in release mode, both in "human feel" and callgrind - the benefit/lost is almost inexistant - - poppler/Object.h | 36 ++++++++++++++++++++++-------------- - 1 files changed, 22 insertions(+), 14 deletions(-) - -commit df47e4c441e4ec79b1bb40de7044c9501f243b76 -Author: Chris Wilson <chris@chris-wilson.co.uk> -Date: Tue Sep 16 12:56:04 2008 +0100 - - Check for duplicate open fonts. - - Before creating a new FT_Face for a font, check to see if there is a - duplicate amongst the list of open fonts, kept alive by either - Poppler's - or Cairo's font cache . - - A quick example of the benefit of this check is that it reduces the - RSS of - the Poppler converter in the Cairo test suite from over 900 MiB to - just 90 - MiB. - - configure.ac | 1 + - poppler/CairoFontEngine.cc | 214 - ++++++++++++++++++++++++++++++++++++++----- - 2 files changed, 190 insertions(+), 25 deletions(-) - -commit 41d1edddcf84ca23c0fc39c5f4f3a49e408a9f1a -Author: Kouhei Sutou <kou@cozmixng.org> -Date: Sun Sep 21 16:33:33 2008 +0200 - - [glib-demo] Fix a crash in forms demo - - glib/demo/forms.c | 12 +++++++----- - 1 files changed, 7 insertions(+), 5 deletions(-) - -commit fe26075353226be9a02c8cf1a6a29586de15ce86 -Author: Pino Toscano <pino@kde.org> -Date: Sun Sep 21 12:03:21 2008 +0200 - - really use the key passed to it - - poppler/Form.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 8aa531cb478d6ae838a94f9f31e6a0bbd0dd957c -Author: Pino Toscano <pino@kde.org> -Date: Sun Sep 21 11:18:22 2008 +0200 - - Read the 'readOnly' attribute directly in the FormField constructor. - - poppler/Form.cc | 12 +++--------- - 1 files changed, 3 insertions(+), 9 deletions(-) - -commit b56f64d676bdabd4a3ebe0eb2237f4c202a3707d -Author: Pino Toscano <pino@kde.org> -Date: Sun Sep 21 00:53:54 2008 +0200 - - Handle streams as entries for the catalog JS name tree. - - poppler/Catalog.cc | 18 +++++++++++++----- - 1 files changed, 13 insertions(+), 5 deletions(-) - -commit 93386d67b3d7adbd87547e9742e4df1c10eadbc1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Sep 20 16:20:03 2008 +0200 - - Compile with -pedantic - - poppler/Form.h | 4 ++-- - qt4/src/poppler-embeddedfile.cc | 4 ++-- - qt4/src/poppler-movie.cc | 3 ++- - qt4/src/poppler-sound.cc | 3 ++- - qt4/src/poppler-textbox.cc | 2 +- - 5 files changed, 9 insertions(+), 7 deletions(-) - -commit 6961fd8efe3db6ee7077dc2ed072498696dae31a -Author: Tomas Are Haavet <tomasare@gmail.com> -Date: Sat Sep 20 16:13:37 2008 +0200 - - Remove some warnings and errors when compiling with gcc and -pedantic - - fofi/FoFiTrueType.cc | 3 ++- - glib/poppler-annot.cc | 8 ++++---- - glib/poppler-attachment.cc | 2 +- - glib/poppler-document.cc | 6 +++--- - glib/poppler-form-field.cc | 2 +- - glib/poppler-page.cc | 2 +- - poppler/Annot.h | 5 +++-- - splash/SplashTypes.h | 3 ++- - 8 files changed, 17 insertions(+), 14 deletions(-) - -commit 4e9a04da358b1527a08102e601a52f07930532f2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Sep 20 16:10:50 2008 +0200 - - Add mention of GPLv2 or later in poppler changes to all files except - Splash.cc and Splash.h, i've still no answer from Marco :-( - - splash/SplashBitmap.cc | 3 +++ - splash/SplashBitmap.h | 3 +++ - splash/SplashErrorCodes.h | 3 +++ - splash/SplashFTFont.cc | 3 +++ - splash/SplashFTFont.h | 3 +++ - splash/SplashFTFontEngine.cc | 3 +++ - splash/SplashFTFontEngine.h | 3 +++ - splash/SplashFTFontFile.cc | 3 +++ - splash/SplashFTFontFile.h | 3 +++ - splash/SplashFont.cc | 3 +++ - splash/SplashFont.h | 3 +++ - splash/SplashFontEngine.cc | 3 +++ - splash/SplashFontEngine.h | 3 +++ - splash/SplashFontFile.cc | 3 +++ - splash/SplashFontFile.h | 3 +++ - splash/SplashT1Font.cc | 3 +++ - splash/SplashT1Font.h | 3 +++ - splash/SplashT1FontEngine.cc | 3 +++ - splash/SplashT1FontFile.cc | 3 +++ - splash/SplashT1FontFile.h | 3 +++ - splash/SplashTypes.h | 3 +++ - splash/SplashXPathScanner.cc | 3 +++ - 22 files changed, 66 insertions(+), 0 deletions(-) - -commit beb87362072d5b480cf6b2c02445ec17c119ff56 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Sep 20 15:47:25 2008 +0200 - - Add Tomas' Copyright - - utils/HtmlFonts.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 8ccb1bb651b129875ef802356c4a229b2ce31973 -Author: Tomas Are Haavet <tomasare@gmail.com> -Date: Sat Sep 20 15:45:47 2008 +0200 - - Initialize pos the correct value to not have crashes - - utils/HtmlFonts.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 77bf8ec94e36fef7e120f1dc4bb1390be71cfb97 -Author: Tomas Are Haavet <tomasare@gmail.com> -Date: Sat Sep 20 14:17:06 2008 +0200 - - Fix memory leak - - utils/HtmlOutputDev.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit b22be54dc2205269974315ca748d835d0990d6da -Author: Tomas Are Haavet <tomasare@gmail.com> -Date: Sat Sep 20 14:16:26 2008 +0200 - - Fix mismatched free/delete - - utils/HtmlOutputDev.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit ac16174da1d6f19445f78e7cd7c4a18cb9524dde -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Sep 20 00:52:19 2008 +0200 - - make sure the image is setup before using it, otherwise some things - don't print correctly like PDF from bug 17645 - - poppler/PSOutputDev.cc | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit ffa4ffdf7fe83035c72addd8c4c8ee566621ba06 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 17 23:27:30 2008 +0200 - - 0.9.1 - - CMakeLists.txt | 2 +- - NEWS | 13 +++++++++++++ - configure.ac | 2 +- - msvc/config.h | 6 +++--- - qt4/src/Doxyfile | 2 +- - 5 files changed, 19 insertions(+), 6 deletions(-) - -commit f57cbe32bcde0808943b9be2456dd69fa5b6dd27 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Sep 14 22:18:38 2008 +0200 - - If when looking for an object we get objSomeNumberAfter assume it - was an int of SomeNumberAfter - - Fixes bug 17568 and i don't see how it can break existing things - because it's already on an error path - - poppler/XRef.cc | 25 +++++++++++++++++++++++++ - 1 files changed, 25 insertions(+), 0 deletions(-) - -commit 1a852064ff5a1a15bc315ddca472a0ad74292581 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Sep 13 12:11:41 2008 +0200 - - [glib-demo] Do not try to get info about remote destinations - - glib/demo/utils.c | 11 ++++++----- - 1 files changed, 6 insertions(+), 5 deletions(-) - -commit 951cffeb2cbff4e179043033b5ac7f5eb764d6dc -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Sep 12 12:05:53 2008 +0200 - - Make sure DecryptAESState::bufIdx is never bigger than 16, otherwise - we crash - - I am not sure this is the correct fix, but fixes crash on files of - bugs 13972, 16092 and 17523 and they seem to work ok - - poppler/Decrypt.cc | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 491109edbe827860e764b5fcb67456867923858d -Author: Haruyuki Kawabe <Haruyuki.Kawabe@unisys.co.jp> -Date: Wed Sep 10 23:00:32 2008 +0200 - - Generate the outline file at the same place the other files are - generated - - Fixes bug 17504 - - utils/HtmlOutputDev.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 7dfc1e4c9348d537896bda7b0f2ae591afc72866 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 10 00:03:50 2008 +0200 - - we want to distribute this file too - - qt4/src/Makefile.am | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit ddb73e8dc1ccbddf3b170e12c7153ccaf716d7cc -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 9 23:47:33 2008 +0200 - - We want to distribute cmake/modules/FindLIBOPENJPEG.cmake too - - Makefile.am | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 646ccc2bb8563d411dc25bdbab53725ae08572ba -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 9 23:22:17 2008 +0200 - - m_doc->doc->getOptContentConfig() can be null, so check for it - - qt4/src/poppler-document.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit d7f0bce67101f37f8d3e69d7d701388bcdc7200f -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 9 23:18:49 2008 +0200 - - Qt4 frontend had timezone parsing that got lost when moving to the - common function, i suck - - glib/poppler-document.cc | 6 ++++-- - poppler/DateInfo.cc | 20 ++++++++++++++------ - poppler/DateInfo.h | 2 +- - qt/poppler-document.cc | 6 ++++-- - qt4/src/poppler-document.cc | 22 +++++++++++++++++++--- - utils/pdfinfo.cc | 6 ++++-- - utils/pdftohtml.cc | 6 ++++-- - 7 files changed, 50 insertions(+), 18 deletions(-) - -commit 0af8609e6c932de2d85168cc9147854ee84b3a1b -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 9 20:55:27 2008 +0200 - - i want this packaged too - - utils/Makefile.am | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit dd0f4c1510382e17cf33d3fe163e384da1d6d289 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 9 20:48:04 2008 +0200 - - Fix includepath - - fofi/FoFiTrueType.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 16c0842c3e01608a72709af55cc5cb8b567efedf -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 9 20:36:18 2008 +0200 - - API changed, so increase soname - - glib/CMakeLists.txt | 2 +- - glib/Makefile.am | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 217c0d1f80a78713977a7bfbe680fce90f1c6b36 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 8 23:56:28 2008 +0200 - - change version to 0.9.0 - - Now only need to wait for Carlos and Iñigo's answer to a BIC change - in glib/ and we'll have 0.9.0 :-) - - CMakeLists.txt | 2 +- - configure.ac | 2 +- - msvc/config.h | 6 +++--- - qt4/src/Doxyfile | 2 +- - 4 files changed, 6 insertions(+), 6 deletions(-) - -commit e34022a8fcfb9fe211dd6b561377d855972b2087 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 8 23:36:04 2008 +0200 - - Increase soname for libpoppler, i'm almost sure we broke BC there - - CMakeLists.txt | 2 +- - poppler/Makefile.am | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit bc275049d6ef083daf71a043ccf23fd0634f5c4d -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 8 23:33:24 2008 +0200 - - soname 3.1.0 for qt4 libs, we are BC/SC but got new API - - qt4/src/CMakeLists.txt | 2 +- - qt4/src/Makefile.am | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 06743a25a73adc3fba95f7b4ad74a6dde1a54ead -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 8 23:23:06 2008 +0200 - - added news for 0.9.0 - - NEWS | 115 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 115 insertions(+), 0 deletions(-) - -commit d35ca2ce5df12d40e295873e44b1f18ea40ba897 -Author: Pino Toscano <pino@kde.org> -Date: Sun Sep 7 01:13:33 2008 +0200 - - [Qt4] apidox improvements - - qt4/src/poppler-annotation.h | 70 - +++++++++++++++++++++++++++++++++++++++-- - qt4/src/poppler-link.h | 12 +++++-- - qt4/src/poppler-qt4.h | 22 +++++++++++-- - 3 files changed, 93 insertions(+), 11 deletions(-) - -commit 796d4c002d47c85716775d173eddfb2ae8866eaf -Author: Pino Toscano <pino@kde.org> -Date: Sat Sep 6 22:48:13 2008 +0200 - - no more need for including the qt3 paths - - qt4/demos/CMakeLists.txt | 1 - - qt4/src/CMakeLists.txt | 1 - - qt4/tests/CMakeLists.txt | 1 - - 3 files changed, 0 insertions(+), 3 deletions(-) - -commit db7ee3b3ae0f42155f9245691e4bfdef98a8ed6f -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Sep 6 23:16:05 2008 +0200 - - [Qt4] Fix docu - - qt4/src/poppler-qt4.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 3366059a25611f19ab592cda18c5efe0b9359771 -Author: Pino Toscano <pino@kde.org> -Date: Sat Sep 6 16:34:58 2008 +0200 - - [Qt4] add option flags for the PS converter - - - map the 'strictMargins' and 'forceRasterize' bool options as flags - - add a flag for setting the "printing" mode - - qt4/src/poppler-ps-converter.cc | 34 ++++++++++++++++++++++++++-------- - qt4/src/poppler-qt4.h | 26 ++++++++++++++++++++++++++ - 2 files changed, 52 insertions(+), 8 deletions(-) - -commit afa26d5c9ac9feb61aad30eb65dc00c9854d7f2e -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Sep 6 15:46:12 2008 +0200 - - we are printing so pass the print flag as true - - qt/poppler-document.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit f5d1eb5eaabaf3ab4bb87b8b4b901bbf30b20b29 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Sep 6 15:43:32 2008 +0200 - - We are pringint here, so pass the printing flag as true - - Fixes KDE bug 170459, you'd wonder how many times i've made the - same mistake... - - qt4/src/poppler-ps-converter.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 58e828d732f06bae9133dd518d89fa4348f1cca8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Sep 5 18:45:23 2008 +0200 - - Only like QtTest to the tests, not to the lib itself - - configure.ac | 13 +++++++++++-- - qt4/tests/Makefile.am | 22 +++++++++++----------- - 2 files changed, 22 insertions(+), 13 deletions(-) - -commit 49b3e4560f62a9a7db350d94d50e229f5e1208bf -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Sep 5 18:17:45 2008 +0200 - - Movie filename is not a string, but a File Specification - - Fixes a crash when filename is a dictionary - - poppler/Annot.cc | 8 +++++--- - 1 files changed, 5 insertions(+), 3 deletions(-) - -commit 996d2e176057e22acbc374cff7a712ce6fd92d93 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Sep 5 18:17:25 2008 +0200 - - Unify multiple File Specification parsers - - CMakeLists.txt | 2 + - poppler/FileSpec.cc | 146 - ++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/FileSpec.h | 24 ++++++++ - poppler/Link.cc | 104 +++++----------------------------- - poppler/Link.h | 4 - - poppler/Makefile.am | 2 + - poppler/PSOutputDev.cc | 35 +----------- - poppler/PSOutputDev.h | 1 - - poppler/Sound.cc | 7 ++- - 9 files changed, 197 insertions(+), 128 deletions(-) - -commit 31f3eb2d6b43f7fbf4d978730d109b08b1563989 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 3 21:49:23 2008 +0200 - - Only set the state to true if the AS value is the same as parent's V - - Fixes bug 16121 and 15535 - - poppler/Form.cc | 8 ++++++-- - 1 files changed, 6 insertions(+), 2 deletions(-) - -commit c75abac7ba07990ef54a46fa0d429eea580a71ef -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 2 19:16:55 2008 +0200 - - Kjartan was missing and just agreed - - utils/HtmlOutputDev.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 630aa133017d15ddc7bf96c79f43c5b60fa9749a -Merge: b2bc9b3 de82255 -Author: Pino Toscano <pino@kde.org> -Date: Tue Sep 2 01:25:55 2008 +0200 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit b2bc9b3f59ef8e5fea18f0bc91b71fc9eb9a4157 -Author: Pino Toscano <pino@kde.org> -Date: Tue Sep 2 01:24:39 2008 +0200 - - [Qt4] small apidox improvements - - mostly the start of the \since marker addition, plus few other - documentation addition/improvements - - qt4/src/poppler-annotation.h | 9 ++++++ - qt4/src/poppler-form.h | 8 +++++ - qt4/src/poppler-link.h | 14 ++++++++-- - qt4/src/poppler-optcontent.h | 11 ++++++++ - qt4/src/poppler-qt4.h | 59 - ++++++++++++++++++++++++++++++++++++----- - 5 files changed, 90 insertions(+), 11 deletions(-) - -commit 6bc4881477ea15d70d420e57b5663052f2f9df76 -Author: Pino Toscano <pino@kde.org> -Date: Tue Sep 2 00:47:56 2008 +0200 - - expand the macros, extract poppler-optcontent.h - - enable the macro expansion and define POPPLER_QT4_EXPORT to be - empty, so - we don't have it in the apidox - - qt4/src/Doxyfile | 8 +++++--- - 1 files changed, 5 insertions(+), 3 deletions(-) - -commit de822554acdb1b2bc9e70c0668c43a10c0ec129a -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 1 23:50:37 2008 +0200 - - Initialize widget to null before calling initialize not after :-( - - poppler/Annot.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 1a7b7199112d97e816a099cbc1a5672c83e64156 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 1 20:42:06 2008 +0200 - - Add my copyright - - poppler/Dict.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 1fef34782a003f46fceab0d3bed36212bbf32c4c -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 1 20:35:37 2008 +0200 - - Find reverse way in Dict - - This fixes Greg Stolze - Marriage Of Virtue & Viciousness.pdf - The issue with this pdf is that has a Dict with two entries with - the same key - The pdf spec says if that happens, results are undefined, but Acroread - uses the - second key while we were using the first, searching backwards we - use the second now too and the pdf works - - poppler/Dict.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit bb7996eaaad6a70404891bb2ff530160737ea3d7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 1 20:29:25 2008 +0200 - - Do not crash on documents with no pages - - qt4/tests/test-poppler-qt4.cpp | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 0c11d390e4b0e3765ae20968359c7562c9857db7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 1 20:13:33 2008 +0200 - - All poppler commiters to these files agreed to GPLv2+ - - Still missing to answer - Marco Pesenti Gritti - Catalog.cc - Outline.cc - Outline.h - - Kjartan Maraas - HtmlOutputDev.cc - - Timothy Lee - ImageOutputDev.h - ImageOutputDev.cc - - Carl Worth - CairoOutputDev.cc - - Ed Catmur - GfxFont.cc - GlobalParams.cc - TextOutputDev.cc - TextOutputDev.h - UnicodeTypeTable.cc - UnicodeTypeTable.h - - poppler/Annot.cc | 3 +++ - poppler/Annot.h | 3 +++ - poppler/Array.cc | 3 +++ - poppler/Array.h | 3 +++ - poppler/ArthurOutputDev.cc | 3 +++ - poppler/ArthurOutputDev.h | 3 +++ - poppler/CMap.cc | 3 +++ - poppler/CMap.h | 3 +++ - poppler/CairoFontEngine.cc | 3 +++ - poppler/CairoFontEngine.h | 3 +++ - poppler/CairoOutputDev.h | 3 +++ - poppler/Catalog.h | 3 +++ - poppler/CharCodeToUnicode.cc | 3 +++ - poppler/CharCodeToUnicode.h | 3 +++ - poppler/Decrypt.cc | 3 +++ - poppler/Decrypt.h | 3 +++ - poppler/Dict.cc | 3 +++ - poppler/Dict.h | 3 +++ - poppler/Error.cc | 3 +++ - poppler/Error.h | 3 +++ - poppler/Function.cc | 3 +++ - poppler/Gfx.cc | 3 +++ - poppler/Gfx.h | 3 +++ - poppler/GfxFont.h | 3 +++ - poppler/GfxState.cc | 3 +++ - poppler/GfxState.h | 3 +++ - poppler/GlobalParams.h | 3 +++ - poppler/JBIG2Stream.cc | 3 +++ - poppler/JPXStream.cc | 3 +++ - poppler/Lexer.cc | 3 +++ - poppler/Lexer.h | 3 +++ - poppler/Link.cc | 3 +++ - poppler/Link.h | 3 +++ - poppler/Object.cc | 3 +++ - poppler/Object.h | 3 +++ - poppler/OutputDev.cc | 3 +++ - poppler/OutputDev.h | 3 +++ - poppler/PDFDoc.cc | 3 +++ - poppler/PDFDoc.h | 3 +++ - poppler/PDFDocEncoding.cc | 3 +++ - poppler/PDFDocEncoding.h | 3 +++ - poppler/PSOutputDev.cc | 3 +++ - poppler/PSOutputDev.h | 3 +++ - poppler/PSTokenizer.cc | 3 +++ - poppler/PSTokenizer.h | 3 +++ - poppler/Page.cc | 3 +++ - poppler/Page.h | 3 +++ - poppler/Parser.cc | 3 +++ - poppler/Parser.h | 3 +++ - poppler/SplashOutputDev.cc | 3 +++ - poppler/SplashOutputDev.h | 3 +++ - poppler/Stream-CCITT.h | 3 +++ - poppler/Stream.cc | 3 +++ - poppler/Stream.h | 3 +++ - poppler/UTF8.h | 3 +++ - poppler/XRef.cc | 3 +++ - poppler/XRef.h | 3 +++ - utils/HtmlFonts.cc | 3 +++ - utils/HtmlLinks.cc | 3 +++ - utils/HtmlOutputDev.h | 3 +++ - utils/parseargs.c | 3 +++ - utils/parseargs.h | 3 +++ - utils/pdffonts.cc | 3 +++ - utils/pdfimages.cc | 3 +++ - utils/pdfinfo.cc | 3 +++ - utils/pdftohtml.cc | 3 +++ - utils/pdftoppm.cc | 3 +++ - utils/pdftops.cc | 3 +++ - utils/pdftotext.cc | 3 +++ - 69 files changed, 207 insertions(+), 0 deletions(-) - -commit 8670bfed7900586725b30e3af67f6849acc6efda -Author: Vasile Gaburici <gaburici@cs.umd.edu> -Date: Sat Aug 30 12:47:13 2008 +0200 - - Fix extraction of images - - See bug 16999 for more info - - utils/ImageOutputDev.cc | 12 +++++++++++- - 1 files changed, 11 insertions(+), 1 deletions(-) - -commit 1c98f197664b1a2c06e2caf32116a8487f4054bf -Author: Vasile Gaburici <gaburici@cs.umd.edu> -Date: Sat Aug 30 12:44:02 2008 +0200 - - Read sMap reverse so CMap entries take precedence - - See bug 17321 for a more in depth explanation - - poppler/CharCodeToUnicode.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 8f1deb3f8000bdeb845a6c786a654bc7eb684f0a -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Aug 29 23:06:19 2008 +0200 - - Are we a lib or aren't we? Unify String to Date parsing so we all - behave the same way - - CMakeLists.txt | 2 + - glib/poppler-document.cc | 29 ++-------------- - poppler/DateInfo.cc | 62 - +++++++++++++++++++++++++++++++++++ - poppler/DateInfo.h | 27 +++++++++++++++ - poppler/Makefile.am | 2 + - qt/poppler-document.cc | 22 +----------- - qt4/src/poppler-annotation-helper.h | 16 +-------- - qt4/src/poppler-document.cc | 52 +++-------------------------- - utils/pdfinfo.cc | 16 ++------- - utils/pdftohtml.cc | 9 ++--- - 10 files changed, 111 insertions(+), 126 deletions(-) - -commit c39f23dca98d3efe8d094c9a3e1bd460ba57d1ce -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Aug 29 20:50:57 2008 +0200 - - Add a readme for contributors with licensing and misc info - - README.contributors | 20 ++++++++++++++++++++ - 1 files changed, 20 insertions(+), 0 deletions(-) - -commit 35a72590ffd3284e63601af79599e5fa025e567f -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Aug 28 00:58:11 2008 +0200 - - Be more protective against huge font sizes in bogus documents like - the one in http://bugs.freedesktop.org/show_bug.cgi?id=17326 - - 10 MB in size is a font of 3200x3200, huge enough to be discarted - - poppler/SplashOutputDev.cc | 20 +++++++++++++++++++- - 1 files changed, 19 insertions(+), 1 deletions(-) - -commit 33727cf6773b12d736ba245fdd146559ce93102d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Aug 24 20:36:13 2008 +0200 - - fix location of the comment - - fofi/FoFiType1.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit abe29b4fdb33f449649fdea5d7af2deeb702f0bb -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Aug 24 20:24:35 2008 +0200 - - All changes made to fofi/ files under the poppler project are by - people that accepts to license the code under GPLv2+ - - fofi/FoFiBase.cc | 3 +++ - fofi/FoFiTrueType.cc | 3 +++ - fofi/FoFiTrueType.h | 3 +++ - fofi/FoFiType1.cc | 3 +++ - fofi/FoFiType1C.h | 3 +++ - 5 files changed, 15 insertions(+), 0 deletions(-) - -commit 6346d7050a03935c71336c65d5f8f0fe2860d321 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Aug 24 20:23:50 2008 +0200 - - All changes made to goo/ files under the poppler project are by - people that accepts to license the code under GPLv2+ - - goo/GooString.cc | 3 +++ - goo/GooString.h | 3 +++ - goo/gfile.cc | 3 +++ - goo/gfile.h | 3 +++ - goo/gmem.cc | 3 +++ - goo/gmem.h | 3 +++ - 6 files changed, 18 insertions(+), 0 deletions(-) - -commit d6e1f1fb4e83527d3ece51d98fa20262713b7da1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Aug 24 20:22:06 2008 +0200 - - .cc -> .h - - poppler/FontInfo.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 9f0ac70f7ad806cadce379d4fabb90eff697ad52 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Aug 24 19:25:27 2008 +0200 - - Add missing addresses - - poppler/ABWOutputDev.cc | 4 ++-- - poppler/ABWOutputDev.h | 2 +- - poppler/FlateStream.cc | 2 +- - poppler/FlateStream.h | 2 +- - 4 files changed, 5 insertions(+), 5 deletions(-) - -commit 22f6af73961686895f207fe13022a21333455862 -Merge: 12a9e42 6d6913a -Author: Pino Toscano <pino@kde.org> -Date: Sun Aug 24 19:03:24 2008 +0200 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit 12a9e427fb487165b1797f81d52d733c27bfa2e1 -Author: Pino Toscano <pino@kde.org> -Date: Sun Aug 24 18:57:52 2008 +0200 - - [Qt4] add showControl and playMode properties of MovieObject's - - qt4/src/poppler-movie.cc | 14 ++++++++++++++ - qt4/src/poppler-qt4.h | 20 ++++++++++++++++++++ - 2 files changed, 34 insertions(+), 0 deletions(-) - -commit c444c652859b6e52160e5571e84f8eb1292d65f1 -Author: Pino Toscano <pino@kde.org> -Date: Sun Aug 24 18:47:58 2008 +0200 - - [Qt4] make the MovieObject ctor private, with only Page able to use it - - qt4/src/poppler-qt4.h | 9 +++++---- - 1 files changed, 5 insertions(+), 4 deletions(-) - -commit 6d6913a79779769ce0fe2f0b516a90a50e51b947 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Aug 24 18:45:45 2008 +0200 - - fix Jeff's entry - - poppler/DCTStream.cc | 2 +- - poppler/DCTStream.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 25bd5967f9f550a32e20eea91cd00cbeff98249e -Author: Pino Toscano <pino@kde.org> -Date: Sun Aug 24 18:45:25 2008 +0200 - - [Qt4] initialize the MovieObject from an AnnotMovie - - the annotation has all the data we need, so just init from that - - qt4/src/poppler-movie.cc | 8 ++++---- - qt4/src/poppler-page.cc | 4 +--- - qt4/src/poppler-qt4.h | 4 ++-- - 3 files changed, 7 insertions(+), 9 deletions(-) - -commit 47f54ad4de111f62a5b8c25520ef6b2bca6026d2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Aug 24 18:18:13 2008 +0200 - - Add more correct copyright statements on fofi, goo, poppler and - util directories to be more compliant with GPL that requires such - modification statements to be present. Meanwhile i did that, i did - qt and qt4 dirs too, glib is missing if someone wants to fix it, - but it's not crucial as it's not a fork of some other GPL software - - AUTHORS | 4 +++- - fofi/FoFiBase.cc | 11 +++++++++++ - fofi/FoFiTrueType.cc | 14 ++++++++++++++ - fofi/FoFiTrueType.h | 12 ++++++++++++ - fofi/FoFiType1.cc | 12 ++++++++++++ - fofi/FoFiType1C.h | 11 +++++++++++ - goo/GooString.cc | 13 +++++++++++++ - goo/GooString.h | 12 ++++++++++++ - goo/GooTimer.cc | 3 +++ - goo/GooTimer.h | 8 ++++++-- - goo/GooVector.h | 12 ++++++++++++ - goo/gfile.cc | 13 +++++++++++++ - goo/gfile.h | 11 +++++++++++ - goo/gmem.cc | 13 +++++++++++++ - goo/gmem.h | 13 +++++++++++++ - poppler/ABWOutputDev.cc | 3 ++- - poppler/ABWOutputDev.h | 2 +- - poppler/Annot.cc | 19 +++++++++++++++++++ - poppler/Annot.h | 17 +++++++++++++++++ - poppler/Array.cc | 11 +++++++++++ - poppler/Array.h | 11 +++++++++++ - poppler/ArthurOutputDev.cc | 14 +++++++++++++- - poppler/ArthurOutputDev.h | 13 ++++++++++++- - poppler/CMap.cc | 12 ++++++++++++ - poppler/CMap.h | 11 +++++++++++ - poppler/CairoFontEngine.cc | 17 +++++++++++++++++ - poppler/CairoFontEngine.h | 17 +++++++++++++++++ - poppler/CairoOutputDev.cc | 19 +++++++++++++++++++ - poppler/CairoOutputDev.h | 16 ++++++++++++++++ - poppler/Catalog.cc | 19 +++++++++++++++++++ - poppler/Catalog.h | 16 ++++++++++++++++ - poppler/CharCodeToUnicode.cc | 14 ++++++++++++++ - poppler/CharCodeToUnicode.h | 13 +++++++++++++ - poppler/DCTStream.cc | 5 ++++- - poppler/DCTStream.h | 6 +++++- - poppler/Decrypt.cc | 12 ++++++++++++ - poppler/Decrypt.h | 11 +++++++++++ - poppler/Dict.cc | 13 +++++++++++++ - poppler/Dict.h | 13 +++++++++++++ - poppler/Error.cc | 13 +++++++++++++ - poppler/Error.h | 13 +++++++++++++ - poppler/FlateStream.cc | 2 ++ - poppler/FlateStream.h | 2 ++ - poppler/FontInfo.cc | 22 ++++++++++++++++++++++ - poppler/FontInfo.h | 21 +++++++++++++++++++++ - poppler/Form.cc | 10 +++++++++- - poppler/Form.h | 6 +++++- - poppler/Function.cc | 12 ++++++++++++ - poppler/Gfx.cc | 23 +++++++++++++++++++++++ - poppler/Gfx.h | 13 +++++++++++++ - poppler/GfxFont.cc | 19 +++++++++++++++++++ - poppler/GfxFont.h | 16 ++++++++++++++++ - poppler/GfxState.cc | 14 ++++++++++++++ - poppler/GfxState.h | 13 +++++++++++++ - poppler/GlobalParams.cc | 19 +++++++++++++++++++ - poppler/GlobalParams.h | 15 +++++++++++++++ - poppler/JBIG2Stream.cc | 13 +++++++++++++ - poppler/JPXStream.cc | 11 +++++++++++ - poppler/Lexer.cc | 12 ++++++++++++ - poppler/Lexer.h | 12 ++++++++++++ - poppler/Link.cc | 14 ++++++++++++++ - poppler/Link.h | 12 ++++++++++++ - poppler/Movie.cc | 17 ++++++++++++++++- - poppler/Object.cc | 11 +++++++++++ - poppler/Object.h | 12 ++++++++++++ - poppler/OptionalContent.cc | 5 ++++- - poppler/Outline.cc | 11 +++++++++++ - poppler/Outline.h | 11 +++++++++++ - poppler/OutputDev.cc | 13 +++++++++++++ - poppler/OutputDev.h | 14 ++++++++++++++ - poppler/PDFDoc.cc | 15 +++++++++++++++ - poppler/PDFDoc.h | 15 +++++++++++++++ - poppler/PDFDocEncoding.cc | 13 ++++++++++++- - poppler/PDFDocEncoding.h | 11 +++++++++++ - poppler/PSOutputDev.cc | 15 +++++++++++++++ - poppler/PSOutputDev.h | 14 ++++++++++++++ - poppler/PSTokenizer.cc | 12 ++++++++++++ - poppler/PSTokenizer.h | 11 +++++++++++ - poppler/Page.cc | 20 ++++++++++++++++++++ - poppler/Page.h | 16 ++++++++++++++++ - poppler/PageLabelInfo.cc | 12 ++++++++++++ - poppler/PageLabelInfo.h | 12 ++++++++++++ - poppler/PageTransition.h | 18 ++++++++++++++++++ - poppler/Parser.cc | 12 ++++++++++++ - poppler/Parser.h | 11 +++++++++++ - poppler/SplashOutputDev.cc | 16 ++++++++++++++++ - poppler/SplashOutputDev.h | 11 +++++++++++ - poppler/Stream-CCITT.h | 11 +++++++++++ - poppler/Stream.cc | 14 ++++++++++++++ - poppler/Stream.h | 13 +++++++++++++ - poppler/TextOutputDev.cc | 18 ++++++++++++++++++ - poppler/TextOutputDev.h | 15 +++++++++++++++ - poppler/UTF8.h | 11 +++++++++++ - poppler/UnicodeTypeTable.cc | 13 +++++++++++++ - poppler/UnicodeTypeTable.h | 11 +++++++++++ - poppler/XRef.cc | 17 ++++++++++++++++- - poppler/XRef.h | 14 ++++++++++++++ - qt/poppler-document.cc | 3 +++ - qt/poppler-fontinfo.cc | 3 +-- - qt/poppler-page.cc | 7 ++++++- - qt/poppler-private.h | 4 ++++ - qt/poppler-qt.h | 5 ++++- - qt4/src/poppler-annotation-helper.h | 1 + - qt4/src/poppler-annotation.cc | 3 ++- - qt4/src/poppler-annotation.h | 4 +++- - qt4/src/poppler-document.cc | 4 +++- - qt4/src/poppler-embeddedfile.cc | 1 + - qt4/src/poppler-fontinfo.cc | 5 ++++- - qt4/src/poppler-form.cc | 2 +- - qt4/src/poppler-form.h | 2 +- - qt4/src/poppler-link-extractor-private.h | 2 +- - qt4/src/poppler-link-extractor.cc | 2 +- - qt4/src/poppler-link.cc | 3 ++- - qt4/src/poppler-link.h | 1 + - qt4/src/poppler-optcontent-private.h | 1 + - qt4/src/poppler-optcontent.cc | 1 + - qt4/src/poppler-optcontent.h | 1 + - qt4/src/poppler-page-private.h | 2 ++ - qt4/src/poppler-page.cc | 4 ++++ - qt4/src/poppler-private.h | 4 +++- - qt4/src/poppler-ps-converter.cc | 1 + - qt4/src/poppler-qt4.h | 5 ++++- - qt4/src/poppler-textbox.cc | 2 ++ - splash/Splash.cc | 12 ++++++++++++ - splash/Splash.h | 12 ++++++++++++ - splash/SplashBitmap.cc | 12 ++++++++++++ - splash/SplashBitmap.h | 11 +++++++++++ - splash/SplashErrorCodes.h | 11 +++++++++++ - splash/SplashFTFont.cc | 12 ++++++++++++ - splash/SplashFTFont.h | 11 +++++++++++ - splash/SplashFTFontEngine.cc | 11 +++++++++++ - splash/SplashFTFontEngine.h | 11 +++++++++++ - splash/SplashFTFontFile.cc | 11 +++++++++++ - splash/SplashFTFontFile.h | 11 +++++++++++ - splash/SplashFont.cc | 11 +++++++++++ - splash/SplashFont.h | 11 +++++++++++ - splash/SplashFontEngine.cc | 11 +++++++++++ - splash/SplashFontEngine.h | 11 +++++++++++ - splash/SplashFontFile.cc | 12 ++++++++++++ - splash/SplashFontFile.h | 12 ++++++++++++ - splash/SplashT1Font.cc | 11 +++++++++++ - splash/SplashT1Font.h | 11 +++++++++++ - splash/SplashT1FontEngine.cc | 11 +++++++++++ - splash/SplashT1FontFile.cc | 11 +++++++++++ - splash/SplashT1FontFile.h | 11 +++++++++++ - splash/SplashTypes.h | 11 +++++++++++ - splash/SplashXPathScanner.cc | 11 +++++++++++ - utils/HtmlFonts.cc | 24 ++++++++++++++++++++++++ - utils/HtmlFonts.h | 12 ++++++++++++ - utils/HtmlLinks.cc | 23 +++++++++++++++++++++++ - utils/HtmlLinks.h | 12 ++++++++++++ - utils/HtmlOutputDev.cc | 13 +++++++++++++ - utils/HtmlOutputDev.h | 11 +++++++++++ - utils/ImageOutputDev.cc | 13 +++++++++++++ - utils/ImageOutputDev.h | 12 ++++++++++++ - utils/parseargs.c | 13 +++++++++++++ - utils/parseargs.h | 11 +++++++++++ - utils/pdffonts.cc | 12 ++++++++++++ - utils/pdfimages.cc | 11 +++++++++++ - utils/pdfinfo.cc | 12 ++++++++++++ - utils/pdftoabw.cc | 26 - +++++++++++++++++++------- - utils/pdftohtml.cc | 11 +++++++++++ - utils/pdftoppm.cc | 11 +++++++++++ - utils/pdftops.cc | 12 ++++++++++++ - utils/pdftotext.cc | 12 ++++++++++++ - 165 files changed, 1795 insertions(+), 37 deletions(-) - -commit 0dfbb8996ee91aa044eb2bdf2859ef64005116f8 -Author: Loïc Minier <lool@dooz.org> -Date: Wed Aug 20 22:10:07 2008 +0200 - - Fixes escaping of hyphens in man pages - - utils/pdfinfo.1 | 2 +- - utils/pdftops.1 | 16 ++++++++-------- - 2 files changed, 9 insertions(+), 9 deletions(-) - -commit 6cfa0e598a81460e5d0a7d60d8584366d2a70165 -Author: Loïc Minier <lool@dooz.org> -Date: Wed Aug 20 19:57:42 2008 +0200 - - Fix synopsis of pdftops in man page to clarify that a PDF file is - required in all cases - - utils/pdftops.1 | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 48a73cc709a8bed9d2d0f9cbd2a9d2b6c0dad05b -Author: Pino Toscano <pino@kde.org> -Date: Sat Aug 23 19:26:01 2008 +0200 - - [Qt4] convert the title of movie annotations - - qt4/src/poppler-page.cc | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 419ec15ac825f2e0052b411462f00ac57fed030e -Author: Pino Toscano <pino@kde.org> -Date: Sat Aug 23 19:25:04 2008 +0200 - - [Qt4] get/set the title for movie annotations - - qt4/src/poppler-annotation.cc | 13 +++++++++++++ - qt4/src/poppler-annotation.h | 3 +++ - 2 files changed, 16 insertions(+), 0 deletions(-) - -commit 63bcaf113fcb5a4a9e5c120df2c3dafb2977c90a -Author: Pino Toscano <pino@kde.org> -Date: Sat Aug 23 01:58:30 2008 +0200 - - [Qt4] convert the movie annotation from the core type to the Qt4 one - - qt4/src/poppler-page.cc | 18 +++++++++++++++--- - 1 files changed, 15 insertions(+), 3 deletions(-) - -commit 5cc490de74af12726bdeb9b5a6a0f0d1d79383b5 -Author: Pino Toscano <pino@kde.org> -Date: Sat Aug 23 01:55:41 2008 +0200 - - [Qt4] first version of a MovieAnnotation - - right mow it just holds the movie object - - qt4/src/poppler-annotation.cc | 74 - +++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-annotation.h | 26 ++++++++++++++- - 2 files changed, 99 insertions(+), 1 deletions(-) - -commit 3d5c2e22d790d7c139e1cd28aebb21cfe76b8b6b -Author: Pino Toscano <pino@kde.org> -Date: Sat Aug 23 01:54:30 2008 +0200 - - compile the new poppler-movie.cc - - qt4/src/CMakeLists.txt | 1 + - qt4/src/Makefile.am | 1 + - 2 files changed, 2 insertions(+), 0 deletions(-) - -commit 599698a9b133999f1f0bb0548489111e9d7b6f05 -Author: Pino Toscano <pino@kde.org> -Date: Sat Aug 23 01:52:58 2008 +0200 - - [Qt4] first version of a MovieObject object for movies - - slightly differs from the version in core - - qt4/src/poppler-movie.cc | 73 - ++++++++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-qt4.h | 34 +++++++++++++++++++++ - 2 files changed, 107 insertions(+), 0 deletions(-) - -commit 820f15009845870701e1f4e7f4fc4fb93312ab3e -Author: Pino Toscano <pino@kde.org> -Date: Sat Aug 23 01:45:07 2008 +0200 - - fix Movie::copy() - - the default copy ctor already does the vertbatim copies, so no need to - do them on our own; what needs to be done is checking whether - an object - is valid before either doing a "smart copy" or "postprocessing" it - - poppler/Movie.cc | 14 ++++++++------ - 1 files changed, 8 insertions(+), 6 deletions(-) - -commit c3a006ae35250e9a5638c2ce713b7470380751c7 -Author: Pino Toscano <pino@kde.org> -Date: Sat Aug 23 01:04:34 2008 +0200 - - compile attachments.c in the demo with cmake as well - - glib/demo/CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit b5a7987a50b3d28fbfa219e2cef85b9e53aaf079 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Aug 21 20:40:18 2008 +0200 - - [glib-demo] Fix attachments demo with documents that don't contain - attachments - - glib/demo/attachments.c | 27 ++++++++++++++++++++------- - 1 files changed, 20 insertions(+), 7 deletions(-) - -commit a2b0aefedbdb20ce0ef8398a700202021fcf00db -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Aug 21 20:14:50 2008 +0200 - - [glib-demo] Fix typo - - glib/demo/attachments.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 9e563d6d877624b1caf82ac30c5ae30a1eb48f21 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Aug 21 20:12:33 2008 +0200 - - [glib-demo] Add checksum validation to attachments demo - - glib/demo/attachments.c | 101 - +++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 101 insertions(+), 0 deletions(-) - -commit e233325e6f13d8b232bf68a2812fe755e7fccd4d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Aug 21 19:03:32 2008 +0200 - - [glib-demo] Add demo for attachments - - glib/demo/Makefile.am | 2 + - glib/demo/attachments.c | 242 - +++++++++++++++++++++++++++++++++++++++++++++++ - glib/demo/attachments.h | 31 ++++++ - glib/demo/main.c | 4 +- - glib/demo/utils.c | 23 +++++ - glib/demo/utils.h | 1 + - 6 files changed, 302 insertions(+), 1 deletions(-) - -commit 0e2efa0fce5bf059ce85d3e3bec2293b405ec3c9 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Aug 21 19:02:24 2008 +0200 - - [glib] Make sure name and descripction are valid utf8 strings - - glib/poppler-attachment.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 15a73704ab6b009ca5e07c08f0b12d970adc387d -Author: Chris Wilson <chris@chris-wilson.co.uk> -Date: Tue Aug 19 09:18:03 2008 +0100 - - Memleak and invalid free. - - CairoOutputDev::setSoftMask() fails to free the cairo_t and mask - it uses - to draw the opaque soft mask and attempts to destroy a reference to a - surface it does not own (this bug was masked by the fact that - a reference - was still being held by the unfreed cairo_t). - - poppler/CairoOutputDev.cc | 11 ++++++++--- - 1 files changed, 8 insertions(+), 3 deletions(-) - -commit d3110e392097db54e9ee59300213e490dee39126 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Aug 19 19:19:09 2008 +0200 - - Fix include so it can be used in the unsupported way of installing - internal poppler/ headers - - Notified by Caolan McNamara <caolanm@redhat.com> - - poppler/PreScanOutputDev.h | 2 +- - poppler/SecurityHandler.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 303249e5548bfbf6823e97850e498970d802b4a0 -Author: Albert Astals Cid <tsdgeos@samsung.localdomain> -Date: Fri Aug 15 01:52:52 2008 +0200 - - Revert 123a87aff2e35b10efe6a1d715585b427e4a9afa it creates problems - with some pdf files - - poppler/Gfx.cc | 14 ++------------ - poppler/Gfx.h | 3 --- - 2 files changed, 2 insertions(+), 15 deletions(-) - -commit 27ddf3c5e839358c8553d41743faa8ee304767bf -Author: Pino Toscano <pino@kde.org> -Date: Wed Aug 13 13:55:57 2008 +0200 - - [Qt4] make sure to use the correct page width/height for form - widgets coordinates - - qt4/src/poppler-form.cc | 12 +++++++++--- - 1 files changed, 9 insertions(+), 3 deletions(-) - -commit 2e7b0eb4af8cf5938833e5659d01b77096e7b7f7 -Author: Pino Toscano <pino@kde.org> -Date: Tue Aug 12 13:49:52 2008 +0200 - - [Qt4] add a method to get the activation action of a FormField - - qt4/src/poppler-form.cc | 19 +++++++++++++++++++ - qt4/src/poppler-form.h | 8 ++++++++ - 2 files changed, 27 insertions(+), 0 deletions(-) - -commit f9e679adbd6830da26eb9909bcb16e3bdf0da6b4 -Author: Pino Toscano <pino@kde.org> -Date: Tue Aug 12 13:47:15 2008 +0200 - - create a static version of PageData::convertLinkActionToLink() - - qt4/src/poppler-page-private.h | 2 ++ - qt4/src/poppler-page.cc | 5 +++++ - 2 files changed, 7 insertions(+), 0 deletions(-) - -commit a6ecc864ea3e94d7232cff6a2e8f49919d8f24ff -Author: Albert Astals Cid <tsdgeos@samsung.localdomain> -Date: Tue Aug 12 01:23:21 2008 +0200 - - initialize widget, fixes crash on EC2006.pdf - - poppler/Annot.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 123a87aff2e35b10efe6a1d715585b427e4a9afa -Author: Albert Astals Cid <tsdgeos@samsung.localdomain> -Date: Tue Aug 12 00:37:09 2008 +0200 - - Cache the last created GfxResource, very useful because some pdf - created by pstopdf push and pop the same GfxResource all the time - - This brings us a speedup of 16 times (from 11 seconds to about 600 - msec) in kde bug 168663 - - poppler/Gfx.cc | 14 ++++++++++++-- - poppler/Gfx.h | 3 +++ - 2 files changed, 15 insertions(+), 2 deletions(-) - -commit 5ad1a12183f4b8e328f32386a74b5616e7e59070 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Aug 4 20:34:42 2008 +0200 - - Be less strict when parsing TTF tables - - With this change and freetype from CVS i can render Bug 16940 using - the splash renderer - - fofi/FoFiTrueType.cc | 8 +++++++- - 1 files changed, 7 insertions(+), 1 deletions(-) - -commit d322720428fa416b7d5f23acc72d1d4b4f74d041 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Aug 4 20:16:50 2008 +0200 - - Report an error when FoFiTrueType::load or FoFiTrueType::make fail - - poppler/SplashOutputDev.cc | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 901ebc84ff7c0872c3f9f5e6eaf418ba6400fa10 -Author: Pino Toscano <pino@kde.org> -Date: Sun Aug 3 10:54:09 2008 +0200 - - [Qt4] Make the paper color setting working as it should. - - A BGR colorspace means that colors should be set as blue,green,red, - and - not red,green,blue. - - qt4/src/poppler-private.h | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit 66b34c78943be598778a3ef438b0cefac668c6a2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Aug 2 13:54:34 2008 +0200 - - This should not be here, breaks jpeg rendering when not using libjpeg - - That was included erroneously when the file writing code was added - - poppler/Stream.cc | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit fd8d71ea8b12393201ece9c09372fd69c7573025 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Aug 1 23:47:51 2008 +0200 - - These defines are unneeded too - - msvc/poppler/poppler-config.h | 30 ------------------------------ - poppler-config.h.cmake | 30 ------------------------------ - poppler/poppler-config.h.in | 30 ------------------------------ - 3 files changed, 0 insertions(+), 90 deletions(-) - -commit 391b5d5cdd9f63fe90229f88cdad628fb63c0206 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Aug 1 23:36:09 2008 +0200 - - Get rid of more defines, say our version on command line tools, - also say our copyright - - Did not modify PSOutputDev.cc output as PS is too fragile - - msvc/poppler/poppler-config.h | 9 +-------- - poppler-config.h.cmake | 9 +-------- - poppler/PSOutputDev.cc | 2 +- - poppler/poppler-config.h.in | 9 +-------- - utils/pdffonts.cc | 3 ++- - utils/pdfimages.cc | 3 ++- - utils/pdfinfo.cc | 3 ++- - utils/pdftohtml.cc | 3 ++- - utils/pdftoppm.cc | 3 ++- - utils/pdftops.cc | 3 ++- - utils/pdftotext.cc | 3 ++- - 11 files changed, 18 insertions(+), 32 deletions(-) - -commit d14fb1513be045363f7edec21cee04fd4937ede2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Aug 1 23:14:28 2008 +0200 - - Add GooList *getEncodingNames(); - - Forgot to commit this earlier :-( - - poppler/GlobalParams.cc | 19 +++++++++++++++++++ - poppler/GlobalParams.h | 2 ++ - 2 files changed, 21 insertions(+), 0 deletions(-) - -commit 9fd34443d765ccd61864d18bceadc049d905b957 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Aug 1 23:09:39 2008 +0200 - - remove defines we don't use at all - - msvc/poppler/poppler-config.h | 4 ---- - poppler-config.h.cmake | 4 ---- - poppler/poppler-config.h.in | 4 ---- - 3 files changed, 0 insertions(+), 12 deletions(-) - -commit 0f13013dc3079915572b6b002dac8d01d2dbde04 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Aug 1 23:06:50 2008 +0200 - - xpdfrc has been dead for a while - - msvc/poppler/poppler-config.h | 25 ------------------------- - poppler-config.h.cmake | 25 ------------------------- - poppler/poppler-config.h.in | 25 ------------------------- - 3 files changed, 0 insertions(+), 75 deletions(-) - -commit 96392667d1331d2f8750f27c116e34bbf9282dca -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Aug 1 22:20:55 2008 +0200 - - Provide a default constructor for FontInfo so you can use it as - metatype for qvariant - - qt4/src/poppler-fontinfo.cc | 5 +++++ - qt4/src/poppler-private.h | 7 +++++++ - qt4/src/poppler-qt4.h | 5 +++++ - 3 files changed, 17 insertions(+), 0 deletions(-) - -commit 9fd1077e63d97a316380b8df4821bf4c9434fb52 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Aug 1 17:47:51 2008 +0200 - - Build with cmake too - - utils/CMakeLists.txt | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit d8d6a3f46620d45c279b7ca1a4a2fa3a36285cde -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Aug 1 17:44:07 2008 +0200 - - Improve manpages and add -listenc to pdfinfo and pdftotext in the way - - Our manpages listed things like xpdfrc and -cfg options we don't - support at all. - Also some options were missing from the man pages - Finally there was the -enc option you completely had to guess which - string to pass, - so i've added the -listenc option to get the user the list of - encodings he can use - - utils/Makefile.am | 2 ++ - utils/pdffonts.1 | 18 ------------------ - utils/pdfimages.1 | 14 -------------- - utils/pdfinfo.1 | 28 ++++------------------------ - utils/pdfinfo.cc | 16 ++++++++++++++-- - utils/pdftoppm.1 | 42 +++++++++++++++++++++--------------------- - utils/pdftops.1 | 41 +++-------------------------------------- - utils/pdftotext.1 | 32 ++++---------------------------- - utils/pdftotext.cc | 16 ++++++++++++++-- - utils/printencodings.cc | 34 ++++++++++++++++++++++++++++++++++ - utils/printencodings.h | 24 ++++++++++++++++++++++++ - 11 files changed, 120 insertions(+), 147 deletions(-) - -commit f5b0ca794b0879e3d239bf1d6138b15ead27d9ca -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Tue Jul 29 20:18:33 2008 +0930 - - Fix ActualText string length check in TextOutputDev.cc - - poppler/TextOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 21bbdc9d663995336900f1ce97cf294f04464e01 -Author: Boris Toloknov <tlknv@yandex.ru> -Date: Mon Jul 28 21:02:07 2008 +0200 - - make xml output valid xml - - utils/HtmlLinks.cc | 33 +++++++++++++++++- - utils/HtmlOutputDev.cc | 85 - ++++++++++++++++++++++++++++++----------------- - 2 files changed, 85 insertions(+), 33 deletions(-) - -commit dccfc4c2910b47a77cd7b6019d9365f1684ffd0c -Author: Boris Toloknov <tlknv@yandex.ru> -Date: Mon Jul 28 20:58:13 2008 +0200 - - Limit ascent and descent are to reasonable values. - - See bug 16592 to cases where this helps - - utils/HtmlOutputDev.cc | 14 ++++++++++++-- - 1 files changed, 12 insertions(+), 2 deletions(-) - -commit 0fd5a3db1ddad447d44b64eff9abfb077a7853a0 -Author: Boris Toloknov <tlknv@yandex.ru> -Date: Mon Jul 28 20:52:19 2008 +0200 - - Make html output to keep all the spaces with   - - utils/HtmlFonts.cc | 2 ++ - utils/HtmlOutputDev.cc | 2 +- - 2 files changed, 3 insertions(+), 1 deletions(-) - -commit 650c73fa0f570f699d907e33060fb23290940b42 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jul 28 20:44:13 2008 +0200 - - findDest crashes on null goostrings so rework the ifs a bit - - utils/HtmlOutputDev.cc | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -commit adee9c0e9e8b2de20309b3ae6eb8e6d6ed05cf85 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jul 26 00:04:03 2008 +0200 - - We are not storing the ctu, so decref and leak-- :-) - - poppler/Annot.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit e7b3e3ae3080bd6f239f7d96761729ad30b075ae -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 25 23:52:28 2008 +0200 - - Fix leak - - qt4/src/poppler-form.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 006b974d4faae53e6bd51a4281dd923ab1c2d4e8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 25 23:15:11 2008 +0200 - - Fix memory leak - - poppler/Annot.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 3a549d75acceedfa25dcf79074d0cdfb643c746e -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 25 23:08:21 2008 +0200 - - Free the previous modified object in case it exists - - poppler/XRef.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 040d244b97a554342061c777a286e99dbb9acabd -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 25 21:31:55 2008 +0200 - - Need this or otherwise it crashes on complete overwrite - - poppler/PDFDoc.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 11ebceeef938a7e6fa9b5437e65b5b4b822f3018 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 25 21:30:24 2008 +0200 - - Fix my last fix about saving, i think this is the correct one - - - One incremental update only write the modified entries xref, - not all - - Update gen to 0 when resizing entries - - On XRef::add correctly initialize all newly allocated entries - - poppler/PDFDoc.cc | 4 +- - poppler/XRef.cc | 57 - ++++++++++++++++++++++++++++++++++++++++++---------- - poppler/XRef.h | 2 +- - 3 files changed, 49 insertions(+), 14 deletions(-) - -commit 03d445f485f90972ab1c05d79b2999b763ab7377 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 25 20:16:54 2008 +0200 - - Fix XRef::writeToFile after my change - - poppler/XRef.cc | 10 +++------- - 1 files changed, 3 insertions(+), 7 deletions(-) - -commit 136fa97576f2df0d7a7563b34651ca222927ea57 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 25 20:12:51 2008 +0200 - - Fix XRef::add and XRef::addIndirectObject, also remove num from - XRefEntry - - Previous code was under some incorrect assumptions: - * our XRef does not maintain the free link list so if you want to - find a free entry you have to go though all of them - * our XRefEntry does not need a num because the index itself is - the num - - Conflicts: - - poppler/XRef.cc - - poppler/XRef.cc | 70 - +++++++++++++++++++----------------------------------- - poppler/XRef.h | 1 - - 2 files changed, 25 insertions(+), 46 deletions(-) - -commit 55572b77da95c47393b78f3aff804ea9c5ae17e5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jul 22 22:50:00 2008 +0200 - - Really do what the comment says and also init changeLeft, changeTop - and changeZoom - - poppler/Link.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 8dc7afaeea08183de331ecfd41ce1971e7772fd0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jul 22 21:05:03 2008 +0200 - - Some documents have loops in XObject dictionaries, make sure we - don't get in an infinite loop while traversing them - - Fixes infinite loop on http://bugs.kde.org/show_bug.cgi?id=166145 - - poppler/FontInfo.cc | 44 ++++++++++++++++++++++++++++++++++++-------- - poppler/FontInfo.h | 4 ++++ - 2 files changed, 40 insertions(+), 8 deletions(-) - -commit 9fb17c952dcff798e45280eeb9c718680147e766 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jul 20 13:47:11 2008 +0200 - - Fix condition, we want thumb to be a Stream, not to be non null - - Fixes bug 16579 - - glib/poppler-page.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 3696025977fd345b12767f75a2de6ed7e9467365 -Author: Pino Toscano <pino@kde.org> -Date: Fri Jul 18 23:32:25 2008 +0200 - - initialize pageWidgets, otherwise it can be a rubbish pointer - is Annots - is not a valid object - - poppler/Page.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 0189ff8b86de18486f7397076f7a0fbf133a1a33 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jul 1 20:16:50 2008 +0200 - - Fix condition, we want fetched_thumb to be a Stream, not to be - non null - - Fixes bug 16579 - - poppler/Page.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 5bd77dcdd5220d63934f4b3e78d85a936947a53d -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jul 1 00:49:01 2008 +0200 - - forgot about we use autofoo too - - qt4/tests/Makefile.am | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 5ed2503003d973b5461594af15485af49591451d -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jul 1 00:43:26 2008 +0200 - - unittesting about ActualText - - qt4/tests/CMakeLists.txt | 1 + - qt4/tests/check_actualtext.cpp | 33 +++++++++++++++++++++++++++++++++ - 2 files changed, 34 insertions(+), 0 deletions(-) - -commit f3bb2eb556f5248242f6db85052ef045fcb697c6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jul 1 00:41:35 2008 +0200 - - Unbreak ActualText extraction - - poppler/Gfx.cc | 10 +--------- - 1 files changed, 1 insertions(+), 9 deletions(-) - -commit 9e9543b105b39f8b0048c00fc94741e43ad615e9 -Author: Pino Toscano <pino@kde.org> -Date: Thu Jun 26 20:19:06 2008 +0200 - - use FindPackageHandleStandardArgs - - cmake/modules/FindLIBOPENJPEG.cmake | 11 ++--------- - 1 files changed, 2 insertions(+), 9 deletions(-) - -commit fec41ceddebe194f139bcc5b2f3fa74e7d1ae502 -Author: Pino Toscano <pino@kde.org> -Date: Thu Jun 26 20:18:27 2008 +0200 - - need to use LIBOPENJPEG_FOUND, as it really represents whether - libopenjpeg was found or not - - CMakeLists.txt | 18 +++++++++--------- - 1 files changed, 9 insertions(+), 9 deletions(-) - -commit 5498d93e59a0b79e5add3dc6181d5e98ba689217 -Author: Michael Vrable <mvrable@cs.ucsd.edu> -Date: Fri Jun 20 21:42:34 2008 -0700 - - Use a single global FT_Library in CairoOutputDev - - Cairo may internally keep references to the FreeType fonts loaded in - CairoFontEngine even after poppler is done with them. Commit - 42db4890e829 - ("Do not call FT_Done_Face on a live cairo_font_face_t") introduced - a fix - for one use-after-free bug, by delaying deleting an FT_Face objects - until - cairo is done with it. - - That fix doesn't correct all the bugs. An FT_Library object is - created for - each CairoOutputDev object, and deleted when the CairoOutputDev - goes away. - But the FT_Library object should not be deleted while fonts loaded - using it - are still in use. And cairo can keep references to fonts around - more or - less indefinitely. - - To more fully fix the problem, we can either: - 1. Keep a count of not-yet-deleted fonts associated with each - FT_Library, - and wait to call FT_Done_FreeType until it drops to zero. - 2. Never call FT_Done_FreeType. - - The second option is the simplest. To avoid leaking memory FT_Library - objects, use a single global FT_Library instead of a - per-CairoOutputDev - copy. - - poppler/CairoOutputDev.cc | 18 +++++++++++++++--- - poppler/CairoOutputDev.h | 4 +++- - 2 files changed, 18 insertions(+), 4 deletions(-) - -commit c75632d62a052d3c3739b96f5586f97c68baf25b -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 24 02:31:43 2008 +0200 - - Open in WriteOnly mode, fixes the fact that when writing to an - existing file, the contents beyond what we wrote were still there - - qt4/src/poppler-base-converter.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 9810fdfc54aac80aa99561a9d820d11b062e4637 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 24 02:12:21 2008 +0200 - - the entry is not updated here either, fix uninitialized variable use - - poppler/XRef.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 2da15db4751d3cb93d40b48e348dbc51f6e7a29f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jun 20 11:39:08 2008 +0200 - - Do not create an OCGs object if there isn't an OCProperties dictionary - in the Catalog - - poppler/Catalog.cc | 5 +++-- - poppler/Gfx.cc | 12 +++++++++++- - poppler/OptionalContent.cc | 25 +++++-------------------- - 3 files changed, 19 insertions(+), 23 deletions(-) - -commit d6fb5dcb7b7596961800d9744d17b6adb8d9a2ad -Author: Michael Vrable <mvrable@cs.ucsd.edu> -Date: Wed Jun 18 11:24:05 2008 -0700 - - Fix a crash in the cairo backend with Type 3 glyphs - - Commit 86b7e8a3bee7 ("Ensure cairo renders Type 3 glyphs with only - the fill - color") introduced a bug into the Cairo backend, causing evince - to crash - with the message - evince: cairo-pattern.c:679: cairo_pattern_destroy: Assertion - `((*&(&pattern->ref_count)->ref_count) > 0)' failed. - Fix this by updating reference counts to the fill and stroke - patterns when - modifying them in beginType3Char. - - Simplify the code as well by not saving the old stroke pattern before - overriding it; this is already done since beginType3Char/endType3Char - is - wrapped by calls to saveState/restoreState in Gfx::doShowText. - - poppler/CairoOutputDev.cc | 4 ++-- - poppler/CairoOutputDev.h | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -commit c3a00c83f1d24c1f88e7ed3b3f772460e578f3cc -Author: Pino Toscano <pino@kde.org> -Date: Sun Jun 15 02:39:31 2008 +0200 - - poppler-page-transition.h is here now - - qt4/src/Doxyfile | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 2affed0fc97b958ae46f531c471a3cf0b04c0f55 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jun 14 01:24:49 2008 +0200 - - Give warnings if the build configuration for stream decoders is - different from default one - - configure.ac | 20 +++++++++++++++++--- - 1 files changed, 17 insertions(+), 3 deletions(-) - -commit 8e74bc612cb4102891324ffdbfcdb47293ecb95e -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jun 14 01:13:53 2008 +0200 - - Warn the user if he does not have any enabled rendering backend - - configure.ac | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 99d2361032cbaafd69bd796170757ed6482f208d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jun 14 00:53:38 2008 +0200 - - Add a JPEG2000 decoder based on OpenJPEG - - Enabled by default since it's generally better than xpdf one - See - http://lists.freedesktop.org/archives/poppler/2008-June/003874.html - for more information - - CMakeLists.txt | 30 ++++++- - cmake/modules/FindLIBOPENJPEG.cmake | 44 +++++++++ - configure.ac | 33 +++++++ - poppler/JPEG2000Stream.cc | 181 - +++++++++++++++++++++++++++++++++++ - poppler/JPEG2000Stream.h | 48 +++++++++ - poppler/Makefile.am | 22 ++++- - poppler/Stream.cc | 7 +- - 7 files changed, 360 insertions(+), 5 deletions(-) - -commit e368838d7f9691c7b1adf7d7f62f65abed91eea7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jun 11 00:48:53 2008 +0200 - - [Qt4] Add the possibility of getting a QByteArray with the data of - an embedded font - - qt4/src/poppler-document.cc | 23 +++++++++++++++++++++++ - qt4/src/poppler-private.h | 3 +++ - qt4/src/poppler-qt4.h | 5 +++++ - 3 files changed, 31 insertions(+), 0 deletions(-) - -commit 184292ffb8fef5aa5a72bdbfcc0c95b663f452bd -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 10 23:00:11 2008 +0200 - - Make the fontRef and the embRef accessible to FontInfo users - - poppler/FontInfo.cc | 2 +- - poppler/FontInfo.h | 3 +++ - 2 files changed, 4 insertions(+), 1 deletions(-) - -commit 86b7e8a3bee74c5b89c451137cf9c2758ba6913f -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sun Jun 8 18:00:05 2008 +0930 - - Ensure cairo renders Type 3 glyphs with only the fill color - - poppler/CairoOutputDev.cc | 3 +++ - poppler/CairoOutputDev.h | 2 +- - 2 files changed, 4 insertions(+), 1 deletions(-) - -commit 99e2d95728f41c91ab59a01c62d82b19a7a2e083 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sun Jun 1 00:49:32 2008 +0930 - - glib: save/restore cairo state when rendering a page - - glib/poppler-page.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 6f40ee4af6b59f9d2c326adc8d2574e45f4d4d29 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 8 23:46:04 2008 +0200 - - Make sure we use Qt4 moc to generate moc files of the qt4 frontend - - configure.ac | 20 ++++++++++++++++++++ - qt4/demos/Makefile.am | 2 +- - qt4/src/Makefile.am | 2 +- - qt4/tests/Makefile.am | 2 +- - 4 files changed, 23 insertions(+), 3 deletions(-) - -commit 86aa8fc0708f7da4a907a8bdb1845e53d29892b7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jun 5 19:21:08 2008 +0200 - - Fix leak on ABWOutputDev.cc - - poppler/ABWOutputDev.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 979ef1cafa968d776a2b804ce555b11212212397 -Author: Koji Otani <sho@bbr.jp> -Date: Tue Jun 3 21:07:15 2008 +0200 - - Support for surrogates outside the BMP plane - - poppler/TextOutputDev.cc | 19 ++++++++++++++++++- - poppler/UTF8.h | 14 ++++++++++++++ - 2 files changed, 32 insertions(+), 1 deletions(-) - -commit 1614ab3036cf25c9b94967163996678d386ce0ac -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 1 16:32:55 2008 +0200 - - Do not limit CharCodeToUnicodeString to 8 characters - - poppler/Annot.cc | 10 ++++---- - poppler/CharCodeToUnicode.cc | 37 ++++++++++++++++++++--------------- - poppler/CharCodeToUnicode.h | 2 +- - poppler/Gfx.cc | 8 +++--- - poppler/GfxFont.cc | 43 - +++++++++++++++++++++++------------------ - poppler/GfxFont.h | 6 ++-- - poppler/PSOutputDev.cc | 4 +- - 7 files changed, 60 insertions(+), 50 deletions(-) - -commit bf95c6970dacaa62512de858cf60ff6cf0c1bf7c -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 1 00:07:11 2008 +0200 - - [Qt] Fix leak when calling Poppler::Document::scanForFonts - - qt/poppler-document.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit d21d7271fc74ab78cd157549138d0027cf179471 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat May 31 23:57:31 2008 +0200 - - Make sure file exists before printing it - - utils/HtmlOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0480a788c0f25af1bc09360b599debb37f831e10 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue May 27 23:20:32 2008 +0200 - - require gthread-2.0 - - cmake/modules/FindGTK.cmake | 9 +++++---- - 1 files changed, 5 insertions(+), 4 deletions(-) - -commit 2e40ef652eb9fca7fe947acb2adfecc96ad3c50e -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 26 22:13:38 2008 +0200 - - Do not shadow a paramer with a local variable name - - qt4/src/poppler-page.cc | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit 1fd856aa1fb48869111e5b86f263bfd94fa7af17 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 26 20:52:53 2008 +0200 - - Do not leak tSplash if transpGroupStack->blendingColorSpace is NULL - - poppler/SplashOutputDev.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 492209ec8648342a3a5447611f3f1ce63b63e8e9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 26 20:51:06 2008 +0200 - - Move variables only used inside the loop inside the loop, fix delete - of uninitialized data due to my previous patch - - poppler/Page.cc | 16 ++++++---------- - 1 files changed, 6 insertions(+), 10 deletions(-) - -commit 79ab8cceb318f3bb5ebad431824e3ae593aea340 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 26 20:38:59 2008 +0200 - - Do not leak memory if data_out is NULL - - poppler/Page.cc | 35 ++++++++++++++++++----------------- - 1 files changed, 18 insertions(+), 17 deletions(-) - -commit f44c33344d4af31ee008826179bcd92db445f35a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun May 25 19:16:12 2008 +0200 - - [glib] Init glib threads in demo app as required by g_timer - - configure.ac | 4 ++-- - glib/demo/main.c | 4 ++++ - 2 files changed, 6 insertions(+), 2 deletions(-) - -commit 58d5b7b9ab9ac245481299c4765f3bd305580d2e -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed May 21 22:18:29 2008 +0200 - - [Qt4] Fix text() method - - I'm not sure this is the real and correct fix, but it works more - than previous code so it's and improvement - - qt4/src/poppler-page.cc | 6 +----- - 1 files changed, 1 insertions(+), 5 deletions(-) - -commit e3e4113c73128f49f99289b592446d4382b5d65c -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 12 15:39:43 2008 +0200 - - Add getters to some TextBlock members. - - Needed by some reader using poppler internals, bad you! - - poppler/TextOutputDev.h | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit ff699e64bd1de78915aad4ddb79d6f529aef2b87 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun May 11 23:44:50 2008 +0200 - - Check the OC we found exists before using it - - Fixes crash http://bugs.freedesktop.org/show_bug.cgi?id=15899 - - poppler/OptionalContent.cc | 33 ++++++++++++++++++--------------- - 1 files changed, 18 insertions(+), 15 deletions(-) - -commit ac26ba5148b99a03a56e37ba201ad420b8619943 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri May 9 20:17:37 2008 +0200 - - Do not crash on unlock with wrong password - - qt/poppler-private.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 19ec5a531cb03a7bee1cfcc9c7d5c4390fbd069d -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu May 8 23:15:58 2008 +0200 - - Fix build with --enable-fixedpoint - - splash/Splash.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 1cf5f0fda542efef575a123622637d81b9c42053 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed May 7 18:49:28 2008 +0200 - - [Qt] Fix Document::unlock - - qt/poppler-document.cc | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit b5041924eb023cc095f2445935ff713cf65dacce -Author: Pino Toscano <pino@kde.org> -Date: Wed May 7 16:44:03 2008 +0200 - - do not delete the GooString owned by an Object - - poppler/Annot.cc | 4 ---- - 1 files changed, 0 insertions(+), 4 deletions(-) - -commit 546a7b700862db00240de9fd50bdba1dd347765b -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun May 4 15:26:26 2008 +0200 - - Fix leaks on error conditions - - poppler/Annot.cc | 6 ++++++ - poppler/ArthurOutputDev.cc | 1 + - poppler/JBIG2Stream.cc | 1 + - 3 files changed, 8 insertions(+), 0 deletions(-) - -commit 914f1b1d814ab3d958aa0ca21ad73ef5aed20b89 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat May 3 18:21:28 2008 +0200 - - A widget annot does not always belong to a form, so check before - accessing the widget member - - poppler/Annot.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit c907e41ab18dda10cd3c9789bd0e7fe71b6402a8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Apr 30 00:42:34 2008 +0200 - - findSegment can return NULL check for it - - poppler/JBIG2Stream.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 8b7f29b577bca3295e99fea4a5cf4a6bb7ba2617 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Apr 30 00:26:28 2008 +0200 - - new[] implies delete[] - - poppler/ABWOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 926c13825d5f7364286975db8ffa507b92f4b3ab -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 29 23:44:51 2008 +0200 - - add lost return when adding kees patch - - poppler/Object.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit ba9283f6bc78e97006e52ef5de20c958ee9e1a37 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 29 23:42:00 2008 +0200 - - make the function static - - utils/pdftoppm.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 931a8272f556ba8a35342f0c5bf53bdb57ea7a31 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 29 23:41:31 2008 +0200 - - make the variable static - - utils/pdftoabw.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 1887d2910d2006c7fc3ecc95db0150f1537e9d0a -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 29 23:35:17 2008 +0200 - - constify some static arrays - - poppler/CompactFontTables.h | 2 +- - poppler/Decrypt.cc | 8 ++++---- - poppler/Function.cc | 2 +- - poppler/GfxFont.cc | 6 +++--- - poppler/GfxState.cc | 4 ++-- - poppler/JBIG2Stream.cc | 10 +++++----- - poppler/JPXStream.cc | 4 ++-- - poppler/Lexer.cc | 2 +- - poppler/PSOutputDev.cc | 6 +++--- - poppler/PSTokenizer.cc | 2 +- - poppler/SplashOutputDev.cc | 2 +- - poppler/Stream-CCITT.h | 12 ++++++------ - poppler/Stream.cc | 10 +++++----- - poppler/UnicodeTypeTable.cc | 2 +- - 14 files changed, 36 insertions(+), 36 deletions(-) - -commit 51140e2d9490696d716f77d3225da0bfdfc212b4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 29 23:14:59 2008 +0200 - - more static markers - - poppler/Annot.cc | 2 +- - poppler/DCTStream.cc | 2 +- - poppler/Object.cc | 2 +- - poppler/SplashOutputDev.cc | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - -commit 893703cb9eee879f728db329f7ee1fc19e7f980e -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 29 23:03:51 2008 +0200 - - add static - - poppler/XRef.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 7333bc913111e56ee241b7ef2bf6e9fea68b7da2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 29 23:01:13 2008 +0200 - - add static - - poppler/JBIG2Stream.cc | 30 +++++++++++++++--------------- - 1 files changed, 15 insertions(+), 15 deletions(-) - -commit 1ea36507f9c9f163b6772268046e7560d0c00dbc -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 29 22:47:19 2008 +0200 - - make findModifier static - - poppler/GlobalParams.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit be9961571dbfabb982e6f69abd3bbc98fa971864 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 29 21:48:09 2008 +0200 - - make variables not used outside static - - utils/pdftohtml.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit b157064a85350da6ea9c4f46e965e45ebc59d227 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 29 21:43:23 2008 +0200 - - constify setPSPaperSize - - utils/pdftops.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit ee57ead8a6f34fa8de044399e5912395e0f3a425 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 29 21:37:57 2008 +0200 - - constify argDesc arrays - - Gives me binaries 2KB smaller (in total) in release build - - utils/parseargs.c | 18 +++++++++--------- - utils/parseargs.h | 4 ++-- - utils/pdffonts.cc | 2 +- - utils/pdfimages.cc | 2 +- - utils/pdfinfo.cc | 2 +- - utils/pdftoabw.cc | 2 +- - utils/pdftohtml.cc | 2 +- - utils/pdftoppm.cc | 2 +- - utils/pdftops.cc | 2 +- - utils/pdftotext.cc | 2 +- - 10 files changed, 19 insertions(+), 19 deletions(-) - -commit 9f93d9eb464877e0d23dcf205295da9162f03253 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 29 20:45:01 2008 +0200 - - make psOpNames static - - Makes my release build 64 bytes smaller - - poppler/Function.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 29e3e779c68371b7c4aadcf68ee0712046f39c6d -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 26 23:47:01 2008 +0200 - - remember to call the base implementation here - - qt4/demos/optcontent.cpp | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit a188f3cd36775d78ace5b5d62c8ab7c059b3b2b1 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 26 23:42:09 2008 +0200 - - reset the current page to 0, when closing a document - - qt4/demos/viewer.cpp | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 7eca6da6436ffc1c41cfed1a07be4dafa1172463 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 26 23:41:45 2008 +0200 - - no need to manually disconnect from the model, as it will be deleted - by the document anyway - - qt4/demos/optcontent.cpp | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 6cddda7f3c3b8ddb95e6aba1b234a27c4454c23d -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 26 22:41:59 2008 +0200 - - sync updateFont() with SplashOutputDev - - poppler/ArthurOutputDev.cc | 75 - ++++++++++++++++++++++++++++++++++--------- - 1 files changed, 59 insertions(+), 16 deletions(-) - -commit ddc7c1f8c24762bae615e7dec92e92a58c827478 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 26 18:12:51 2008 +0200 - - construct AnnotPolygon for Polygon and PolyLine annotations - - poppler/Annot.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit f9c7e8037b7165b6271ce7aea0d315053c4d66a5 -Merge: 59d33d8 f5fec4f -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 26 18:09:59 2008 +0200 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit 59d33d8e99673f73ccf2ad9a62bd25fca51f0eb8 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 26 17:56:42 2008 +0200 - - use the base implementation to update all the states - - poppler/ArthurOutputDev.cc | 11 +---------- - 1 files changed, 1 insertions(+), 10 deletions(-) - -commit 45d2a9529bf241554c59437118cb8c705554dc27 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 26 17:55:39 2008 +0200 - - Set the font antialiasing from the painter settings, instead of the - global settings. - - poppler/ArthurOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 5faa72fd70e0d85268e807a8b870d80dda9189a9 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 26 17:53:28 2008 +0200 - - Get the font and painter matrices, and reenable the font drawing. - - poppler/ArthurOutputDev.cc | 28 +++++++++++++++++++++------- - 1 files changed, 21 insertions(+), 7 deletions(-) - -commit f5fec4fdedd8d316b19968545e447e2036a1bb47 -Author: Kees Cook <kees@outflux.net> -Date: Wed Apr 23 19:53:03 2008 +0200 - - provide type-checking for union pointer accesses - - poppler/Object.h | 68 - ++++++++++++++++++++++++++++++++++------------------- - 1 files changed, 43 insertions(+), 25 deletions(-) - -commit a567c921ce538616f4ba0b7933086ef5a8ab0f55 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Tue Apr 22 23:09:10 2008 +0200 - - Little change to avoid AnnotWidget crashing when they aren't related - to FormWidgets. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 19 ++++++++++--------- - 1 files changed, 10 insertions(+), 9 deletions(-) - -commit 73798c95b8a4c0504e9246e6f73fd31f812ad6fa -Author: Albert Astals Cid <tsdgeos@bluebox.(none)> -Date: Mon Apr 21 19:56:52 2008 +0200 - - Link to pthread when needed - - Should fix bug 15625 - - configure.ac | 2 + - m4/acx_pthread.m4 | 280 - +++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Makefile.am | 4 + - 3 files changed, 286 insertions(+), 0 deletions(-) - -commit 6c248bdad77235a45402d9693a0b822cc208b6b9 -Author: Pino Toscano <pino@kde.org> -Date: Sun Apr 20 18:32:59 2008 +0200 - - the dtor should be virtual - - qt4/src/poppler-converter-private.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 68dba1a452ca70add5b05ab8e2adab838bc2cb73 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Apr 20 16:21:10 2008 +0200 - - if ncand is a Guint cand should be one too - - poppler/CMap.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0b91eb19f5a3d07b625ee5188f1fcb4b4b1544ea -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Apr 20 16:17:50 2008 +0200 - - Unused var-- - - poppler/GfxFont.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 1ed3cc40987b691319fd9f1a30296d80de5732fd -Author: Pino Toscano <pino@kde.org> -Date: Wed Apr 16 15:45:45 2008 +0200 - - fix border style conversion - - qt4/src/poppler-page.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 7c8feb4e3627bde2052a7e536d2d49d1cbbce8ee -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 15 21:57:31 2008 +0200 - - Hack to "support" 16 bits images - - Everywhere we assume a component fits in 8 bits, with this hack - we treat 16 bit images as 8 bit ones until it's fixed correctly. - Fixes http://bugs.kde.org/show_bug.cgi?id=158165 - - poppler/GfxState.cc | 6 ++++++ - poppler/Stream.cc | 9 +++++++++ - 2 files changed, 15 insertions(+), 0 deletions(-) - -commit f338a9ded5d42dd65853c5c7bbe27f6724096416 -Author: Pino Toscano <pino@kde.org> -Date: Sun Apr 13 21:41:51 2008 +0200 - - [Qt4] convert the sound annotations - - qt4/src/poppler-page.cc | 16 ++++++++++++++-- - 1 files changed, 14 insertions(+), 2 deletions(-) - -commit 733d51fca04ee682fed2242f868edd545f3755fa -Author: Pino Toscano <pino@kde.org> -Date: Sun Apr 13 21:38:25 2008 +0200 - - [Qt4] First version of a SoundAnnotation. - - qt4/src/poppler-annotation.cc | 87 - +++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-annotation.h | 30 ++++++++++++++- - 2 files changed, 116 insertions(+), 1 deletions(-) - -commit feb1ea091111bd7292879c465590acfd7671c876 -Author: Pino Toscano <pino@kde.org> -Date: Sun Apr 13 21:36:26 2008 +0200 - - First version of AnnotSound. - - poppler/Annot.cc | 37 ++++++++++++++++++++++++++++++++++++- - poppler/Annot.h | 26 ++++++++++++++++++++++++++ - 2 files changed, 62 insertions(+), 1 deletions(-) - -commit ec2cf81edf1b2c6707de4d30316ff5f5e24534d4 -Author: Pino Toscano <pino@kde.org> -Date: Sun Apr 13 18:31:21 2008 +0200 - - [Qt4] convert the file attachment annotations - - qt4/src/poppler-page.cc | 15 +++++++++++++-- - 1 files changed, 13 insertions(+), 2 deletions(-) - -commit 9fa2e96c96d365ae67859545ebd635d726784fca -Author: Pino Toscano <pino@kde.org> -Date: Sun Apr 13 18:29:00 2008 +0200 - - [Qt4] Initial version of FileAttachmentAnnotation - - qt4/src/poppler-annotation.cc | 88 - +++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-annotation.h | 29 +++++++++++++- - 2 files changed, 116 insertions(+), 1 deletions(-) - -commit 5899aff11f94e707654574e830e0757b1df558d4 -Author: Pino Toscano <pino@kde.org> -Date: Sun Apr 13 10:50:39 2008 +0200 - - [Qt4] Read the annotations from the core, instead of own parsing. - - Almost all the data are converted correctly, the results seem to be - the same. - Added TODOs in the few parts (not essential) I was not able to figure - out how to convert, yet. - Covert also the Caret annotations. - - qt4/src/poppler-annotation-helper.h | 2 +- - qt4/src/poppler-page.cc | 851 - ++++++++++++++++------------------- - 2 files changed, 393 insertions(+), 460 deletions(-) - -commit 40a12793c5ccea206d79e0c17e2f2d0cf74bb4f3 -Author: Pino Toscano <pino@kde.org> -Date: Sun Apr 13 02:21:55 2008 +0200 - - add getters for the AnnotPolygon properties - - poppler/Annot.h | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 9311f75d4c3da991efb8afd00701a0ce1cbae1b0 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sun Apr 13 01:52:36 2008 +0200 - - Almost full AnnotPolygon support. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 99 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Annot.h | 37 ++++++++++++++++++++ - 2 files changed, 136 insertions(+), 0 deletions(-) - -commit 01aa052ed761a4ada471d196985825986bb58627 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sun Apr 13 01:13:49 2008 +0200 - - Extend AnnotPath behaviour to include cooordinate array parsing. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 96 - +++++++++++++++++++++++++++++------------------------ - poppler/Annot.h | 4 ++- - 2 files changed, 55 insertions(+), 45 deletions(-) - -commit ca52830e9519ae7b778f98e5c2547daef7da5f09 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sun Apr 13 00:54:13 2008 +0200 - - Added OptionalContent support to Annots. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 9 +++------ - poppler/Annot.h | 5 +++-- - 2 files changed, 6 insertions(+), 8 deletions(-) - -commit 4b87196b7829c87d15af4e8b4138ca97548fb519 -Author: Pino Toscano <pino@kde.org> -Date: Sun Apr 13 00:18:24 2008 +0200 - - Isolate the embedded file reading logic into a new EmbFile - constructor. - - This way, it can be shared and reused in various places (Catalog, - AnnotFileAttachment, etc). - - poppler/Catalog.cc | 205 - ++++++++++++++++++++++++++++------------------------ - poppler/Catalog.h | 1 + - 2 files changed, 112 insertions(+), 94 deletions(-) - -commit 45b407e51905948690065749085a4af1cbb29a8e -Author: Pino Toscano <pino@kde.org> -Date: Sun Apr 13 00:14:38 2008 +0200 - - correctly get the FileSpec dictionary - - poppler/Annot.cc | 4 +++- - poppler/Annot.h | 2 +- - 2 files changed, 4 insertions(+), 2 deletions(-) - -commit c3aa3a97d9c553ea7976741d798901352fb5381c -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 12 22:45:57 2008 +0200 - - properly initialize an AnnotPath - - poppler/Annot.cc | 9 ++------- - 1 files changed, 2 insertions(+), 7 deletions(-) - -commit a3406fb2ace1390db1c181823a7bfc66c9174d98 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 12 22:40:42 2008 +0200 - - properly dispose the memory of the ink lists - - poppler/Annot.cc | 13 ++++++++++++- - poppler/Annot.h | 1 + - 2 files changed, 13 insertions(+), 1 deletions(-) - -commit 0dad70e2d12e8b587cab8ce2d914c81c6897a1d1 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 12 22:15:35 2008 +0200 - - make AnnotInk working. - - - get the point indexes in the correct way - - dispose with free what you allocate with malloc - - fix logic when checking for an even number of points - - poppler/Annot.cc | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit 77404e24ea1e175fc9b55097dc5b35cc34760659 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 12 21:08:54 2008 +0200 - - a length is an int - - poppler/Annot.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit bc2b2ffd2144f951c311e968fba4bc50b7c43ff3 -Merge: cd5afe6 bacc1dd -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sat Apr 12 17:40:49 2008 +0200 - - Fixed merging conflict. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - -commit cd5afe6d9eca687ee224ff7680a8cba28d81a36d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 12 00:44:08 2008 +0200 - - Do not take into account Colorspace resource subdictionary for - image XObjects - - Fixes bug 15125 - The motivation under that change is on section 4.5.2 of the spec: - Certain objects, such as image XObjects, specify a - color space as an explicit parameter, often associated with the - key ColorSpace. - In this case, the color space array or name is always defined - directly as a PDF - object, not by an entry in the ColorSpace resource - subdictionary. This conven- - tion also applies when color spaces are defined in terms of other - color spaces. - - poppler/Gfx.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit bacc1dd9f37ff19c5e54878a5b08e7d734584bbf -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 12 17:20:09 2008 +0200 - - Read the "in reply to" reference as such, without reading the - associated annotation dictionary. - - poppler/Annot.cc | 10 ++++------ - poppler/Annot.h | 4 ++-- - 2 files changed, 6 insertions(+), 8 deletions(-) - -commit ffe09454a0948a6107bcc38f23ba2068151c547d -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sat Apr 12 17:17:59 2008 +0200 - - Initial Annot3D parsing a few general improvements. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 130 - ++++++++++++++++++++++++++++++++++++++++++++++++++--- - poppler/Annot.h | 84 +++++++++++++++++++++++++++++----- - 2 files changed, 193 insertions(+), 21 deletions(-) - -commit 8757c577241dda31bc59c7d1c208c159ad428877 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sat Apr 12 10:38:07 2008 +0200 - - AnnotFileAttachment support. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 38 ++++++++++++++++++++++++++++++++++++-- - poppler/Annot.h | 25 +++++++++++++++++++++++++ - 2 files changed, 61 insertions(+), 2 deletions(-) - -commit 36989658149fc9e5e8a049ce070a102f35b7bddc -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sat Apr 12 09:55:26 2008 +0200 - - AnnotInk support. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 113 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Annot.h | 45 +++++++++++++++++++++ - 2 files changed, 158 insertions(+), 0 deletions(-) - -commit 464b171d0e9b989196c287f2ee4dfbbc14212aa9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 12 00:44:08 2008 +0200 - - Do not take into account Colorspace resource subdictionary for - image XObjects - - Fixes bug 15125 - The motivation under that change is on section 4.5.2 of the spec: - Certain objects, such as image XObjects, specify a - color space as an explicit parameter, often associated with the - key ColorSpace. - In this case, the color space array or name is always defined - directly as a PDF - object, not by an entry in the ColorSpace resource - subdictionary. This conven- - tion also applies when color spaces are defined in terms of other - color spaces. - - poppler/Gfx.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 42db4890e8295aaec5a1be12d1414fc0a9048550 -Author: Chris Wilson <chris@chris-wilson.co.uk> -Date: Thu Mar 27 10:52:22 2008 +0000 - - Do not call FT_Done_Face on a live cairo_font_face_t. - - Currently CairoFont calls FT_Done_Face on its deletion, but the - FT_Face - is usually still in use within cairo. This causes a failure later when - cairo tries to create a glyph from its cairo_font_face_t. - - From http://bugs.freedesktop.org/show_bug.cgi?id=15216: - ==13745== Invalid read of size 4 - ==13745== at 0x51BE572: FT_Load_Glyph (ftobjs.c:549) - ==13745== by 0x4A24921: _cairo_ft_scaled_glyph_init - (cairo-ft-font.c:1922) - ==13745== by 0x4A117AB: _cairo_scaled_glyph_lookup - (cairo-scaled-font.c:1674) - ==13745== by 0x4A12A5A: _cairo_scaled_font_glyph_device_extents - (cairo-scaled-font.c:1124) - ==13745== by 0x4A21ECD: _cairo_analysis_surface_show_glyphs - (cairo-analysis-surface.c:516) - ==13745== by 0x4A144DC: _cairo_surface_show_glyphs - (cairo-surface.c:2086) - ==13745== by 0x4A1FCC8: _cairo_meta_surface_replay_internal - (cairo-meta-surface.c:816) - ==13745== by 0x4A214B1: _paint_page (cairo-paginated-surface.c:299) - ==13745== by 0x4A2171E: _cairo_paginated_surface_show_page - (cairo-paginated-surface.c:445) - ==13745== by 0x4A14BDF: cairo_surface_show_page - (cairo-surface.c:1702) - ==13745== by 0x49FF661: cairo_show_page (cairo.c:2155) - ==13745== by 0xA267D97: - pdf_document_file_exporter_end_page(_EvFileExporter*) - (ev-poppler.cc:1753) - ==13745== Address 0x55c5630 is 88 bytes inside a block of size - 552 free'd - ==13745== at 0x402269C: free (vg_replace_malloc.c:326) - ==13745== by 0x51B7ABC: ft_free (ftsystem.c:158) - ==13745== by 0x51BB319: ft_mem_free (ftutil.c:171) - ==13745== by 0x51BC318: destroy_face (ftobjs.c:856) - ==13745== by 0x51BC3B2: FT_Done_Face (ftobjs.c:1972) - ==13745== by 0x4363704: CairoFont::~CairoFont() - (CairoFontEngine.cc:251) - ==13745== by 0x436401D: CairoFontEngine::getFont(GfxFont*, XRef*) - (CairoFontEngine.cc:335) - ==13745== by 0x4366915: CairoOutputDev::updateFont(GfxState*) - (CairoOutputDev.cc:318) - ==13745== by 0x5093BF1: Gfx::opShowText(Object*, int) (Gfx.cc:3073) - ==13745== by 0x508F901: Gfx::execOp(Object*, Object*, int) - (Gfx.cc:726) - ==13745== by 0x50906FF: Gfx::go(int) (Gfx.cc:594) - ==13745== by 0x5090C96: Gfx::display(Object*, int) (Gfx.cc:557) - - The solution is to release the reference to the cairo_font_face_t upon - destruction of the CairoFont, and then to release the FT_Face from the - destroy notify of the cairo_font_face_t. - - poppler/CairoFontEngine.cc | 19 +++++++++---------- - 1 files changed, 9 insertions(+), 10 deletions(-) - -commit 5f60843824582ece36d806508ec388330ddee854 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Tue Apr 8 00:30:57 2008 +0200 - - Added AnnotCoord support. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 64 +++++++++++++++++-------------------------------- - poppler/Annot.h | 69 - +++++++++++++++++++++++++----------------------------- - 2 files changed, 54 insertions(+), 79 deletions(-) - -commit a6f70f465a3e6719d63cefbe3c27bae015be43c1 -Author: Pino Toscano <pino@kde.org> -Date: Sun Apr 6 13:12:01 2008 +0200 - - add getters for the coordinates in an AnnotLine - - poppler/Annot.h | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 1d83d6edf9a843335e37a4d1e0e0dd71eb23d93b -Author: Pino Toscano <pino@kde.org> -Date: Sun Apr 6 12:24:42 2008 +0200 - - [Qt4] the caret symbol is an enum value, now - - qt4/src/poppler-annotation.cc | 35 ++++++++++++++++++++++++++++------- - qt4/src/poppler-annotation.h | 7 +++++-- - 2 files changed, 33 insertions(+), 9 deletions(-) - -commit 229d991a3258cb9b56f5e00f2deb3c976253cf68 -Author: Pino Toscano <pino@kde.org> -Date: Sun Apr 6 12:23:04 2008 +0200 - - the caret symbol does not seem to allow additional values, so convert - it to an enum - - poppler/Annot.cc | 11 +++++++---- - poppler/Annot.h | 9 +++++++-- - 2 files changed, 14 insertions(+), 6 deletions(-) - -commit fc24500ddd9182f97d23c46eaafc6be79a6721eb -Author: Pino Toscano <pino@kde.org> -Date: Sun Apr 6 11:43:49 2008 +0200 - - propetly initialise a couple of members; leak less - - poppler/ArthurOutputDev.cc | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 9409de1e7c5b3770c7ef00c01ee376953dd532a5 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sun Apr 6 01:38:25 2008 +0200 - - Changed AnnotFreeText RD field to the new parseDiffRectangle. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 35 ++--------------------------------- - 1 files changed, 2 insertions(+), 33 deletions(-) - -commit 28c5ee2e9fc2a24d2f2efb3d74d5cf882a106239 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 5 23:19:33 2008 +0200 - - typo fix - - poppler/Annot.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit ed02769688466ca72bf35d4223c3822a1245604b -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 5 19:36:21 2008 +0200 - - read the destination of a link annotation - - poppler/Annot.cc | 5 ++++- - poppler/Annot.h | 4 ++-- - 2 files changed, 6 insertions(+), 3 deletions(-) - -commit ca31bf12a9d70bac88e457f7799e9935aba58640 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 5 16:48:53 2008 +0200 - - variable forgotten in the copy&paste... - - qt4/src/poppler-annotation.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 4168daa141b76e5fcd07d046aca8dac2f3037ff9 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 5 16:34:12 2008 +0200 - - [Qt4] deserialize also CaretAnnotation's - - qt4/src/poppler-annotation.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit b55bcc2aa95825863bef23ab96364b350a49949d -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 5 16:31:31 2008 +0200 - - [Qt4] first version of a CaretAnnotation. - - qt4/src/poppler-annotation.cc | 80 - +++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-annotation.h | 25 ++++++++++++- - 2 files changed, 104 insertions(+), 1 deletions(-) - -commit 4c9a02b7e49666efe10fdc16e7a03d8d520b65ec -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 5 16:01:58 2008 +0200 - - First version of AnnotCaret. - - poppler/Annot.cc | 36 +++++++++++++++++++++++++++++++++++- - poppler/Annot.h | 22 ++++++++++++++++++++++ - 2 files changed, 57 insertions(+), 1 deletions(-) - -commit d260fe9e514c667b66969b982119429cc922eb07 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 5 15:54:29 2008 +0200 - - isolate the code for parsing a "difference rectangle" in an own - function - - poppler/Annot.cc | 54 - +++++++++++++++++++++++++++++++----------------------- - 1 files changed, 31 insertions(+), 23 deletions(-) - -commit 760833e409c122c0a61f7c87fd3133eebc10b402 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 5 15:36:43 2008 +0200 - - First version of AnnotGeometry. - - poppler/Annot.cc | 77 - ++++++++++++++++++++++++++++++++++++++++++++++++++++- - poppler/Annot.h | 24 +++++++++++++++++ - 2 files changed, 99 insertions(+), 2 deletions(-) - -commit 95d9d2362534c0524ad0448818b2d69b0909d482 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 5 03:23:00 2008 +0200 - - finally, load the QuadPoints correctly - - when checking the validity of the coordinate, do the comparison just - with the proper one (either X or Y); - free the "point" object after each iteration - - poppler/Annot.cc | 11 ++++++++--- - 1 files changed, 8 insertions(+), 3 deletions(-) - -commit af1ffcbcec1730332d11f8da4a7ddac833b22408 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 5 02:54:00 2008 +0200 - - More robust reading of QuadPoints (reset the allocated memory, - use the heap) - - poppler/Annot.cc | 7 +++---- - 1 files changed, 3 insertions(+), 4 deletions(-) - -commit 68fd98d69bac20282665cf6b824da30c3b310f0b -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 5 02:51:41 2008 +0200 - - Really implement AnnotTextMarkup. - - poppler/Annot.cc | 29 +++++++++++++++++++++++++---- - poppler/Annot.h | 2 +- - 2 files changed, 26 insertions(+), 5 deletions(-) - -commit 69a2ecfaf8f8cffd3027db5c3cc88c41413e42f1 -Author: Pino Toscano <pino@kde.org> -Date: Sat Apr 5 01:38:28 2008 +0200 - - Add the Stamp annotation type. - - poppler/Annot.cc | 28 +++++++++++++++++++++++++++- - poppler/Annot.h | 20 ++++++++++++++++++++ - 2 files changed, 47 insertions(+), 1 deletions(-) - -commit 97be4332818bcf58461816be995d88926809a4e5 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Fri Apr 4 23:49:12 2008 +0200 - - Updated glib bindings. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - glib/demo/annots.c | 32 +++++--------------------------- - glib/poppler-annot.cc | 27 +++++---------------------- - glib/poppler-annot.h | 13 +------------ - 3 files changed, 11 insertions(+), 61 deletions(-) - -commit 5caac407cdaf58621ac27e5561b31a995404ccb3 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Fri Apr 4 23:36:46 2008 +0200 - - Fixed icon name in AnnotText. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 25 ++++++------------------- - poppler/Annot.h | 15 +++------------ - 2 files changed, 9 insertions(+), 31 deletions(-) - -commit 0b714a61383da1b62daf2a60e3f6fcda09b4e9f2 -Author: Adam Batkin <adam@batkin.net> -Date: Thu Apr 3 20:02:52 2008 +0200 - - FindFirstFile returns INVALID_HANDLE_VALUE and not NULL on error - - goo/gfile.cc | 12 ++++++------ - 1 files changed, 6 insertions(+), 6 deletions(-) - -commit be765f27cc5430d9bb2a3e113eb245d67c20a376 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Mar 31 12:37:33 2008 +0200 - - [glib] Fix a crash in outline demo due to page_num == dest_page_num - - 1 - - glib/demo/utils.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit e991e9ac6fcc0b6928b96fe8326eebcf3cb720ca -Author: Albert Astals Cid <tsdgeos@localhost.(none)> -Date: Sat Mar 29 13:25:52 2008 +0100 - - Add the export macro - - qt4/src/poppler-page-transition.h | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit b70ca35dce6da6efdff254c11a63de4f44228278 -Author: Albert Astals Cid <tsdgeos@localhost.(none)> -Date: Sat Mar 29 00:30:31 2008 +0100 - - Duplicate page-transition files on qt4 - - qt4/src/CMakeLists.txt | 4 +- - qt4/src/Makefile.am | 4 +- - qt4/src/poppler-page-transition-private.h | 28 ++++++ - qt4/src/poppler-page-transition.cc | 95 +++++++++++++++++++ - qt4/src/poppler-page-transition.h | 146 - +++++++++++++++++++++++++++++ - 5 files changed, 273 insertions(+), 4 deletions(-) - -commit b5312785063235cef7584ab6a5d198fb72de0988 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Wed Mar 26 23:56:49 2008 +0100 - - Improved glib annot demo. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - glib/demo/annots.c | 314 - +++++++++++++++++++++++++++++++++++++++++++++++---- - 1 files changed, 289 insertions(+), 25 deletions(-) - -commit 7cc8fd70f68d2cdab7ab83a0ecf6c8896c971d62 -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 26 21:03:34 2008 +0100 - - remove damn error - - qt4/src/poppler-page.cc.orig | 1317 - ------------------------------------------ - 1 files changed, 0 insertions(+), 1317 deletions(-) - -commit 7a47ff3b54678a3de6964d25050e02186484f39a -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 26 21:00:32 2008 +0100 - - [Qt4] Add support for JavaScript links, and create them when present. - - qt4/src/poppler-link.cc | 36 ++ - qt4/src/poppler-link.h | 32 +- - qt4/src/poppler-page.cc | 7 + - qt4/src/poppler-page.cc.orig | 1317 - ++++++++++++++++++++++++++++++++++++++++++ - 4 files changed, 1391 insertions(+), 1 deletions(-) - -commit a6f2c10ee01ee62ae945b50f6b6eae380377fe03 -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 26 20:59:21 2008 +0100 - - [Qt4] Read the document-level JavaScript scripts. - - qt4/src/poppler-document.cc | 15 +++++++++++++++ - qt4/src/poppler-qt4.h | 8 ++++++++ - 2 files changed, 23 insertions(+), 0 deletions(-) - -commit b8a471e55b998836c09c65ff736afdef8ac55189 -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 26 20:56:01 2008 +0100 - - Add support for JavaScript actions, and read them when found. - - poppler/Link.cc | 33 +++++++++++++++++++++++++++++++++ - poppler/Link.h | 23 +++++++++++++++++++++++ - 2 files changed, 56 insertions(+), 0 deletions(-) - -commit 2fd85dc1b8b2ababadfc60e285c08a844737e4bb -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 26 20:53:42 2008 +0100 - - Read the JavaScript codes in the NameTree of the Catalog. - - poppler/Catalog.cc | 39 +++++++++++++++++++++++++++++++++++++++ - poppler/Catalog.h | 7 +++++++ - 2 files changed, 46 insertions(+), 0 deletions(-) - -commit 312f14f5b7be1f0d62620477222919423c3869e0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 26 20:05:31 2008 +0100 - - compile++ - - fofi/FoFiBase.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 5bd750062e1fb136f77a55d1f35b2d6fabaad1b3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 26 19:42:43 2008 +0100 - - update version - - CMakeLists.txt | 2 +- - configure.ac | 2 +- - msvc/config.h | 6 +++--- - qt4/src/Doxyfile | 2 +- - 4 files changed, 6 insertions(+), 6 deletions(-) - -commit 10d4a8b9aed51902157c04d9deea0e99d829c4f6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 26 19:42:36 2008 +0100 - - fill news - - NEWS | 10 ++++++++++ - 1 files changed, 10 insertions(+), 0 deletions(-) - -commit 2069826d61ebd527768b6455689276c0a8288085 -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 26 16:05:06 2008 +0100 - - missing break - - qt4/src/poppler-page.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit d6a0c6a6803a03f402c2dcde41c6195e951470ba -Author: Pino Toscano <pino@kde.org> -Date: Wed Mar 26 15:50:39 2008 +0100 - - initialize posterStream to avoid crashing later - - poppler/Movie.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 0be811b3ad86b1cb14be94a017e70c65b8e64730 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 25 22:59:22 2008 +0100 - - Don't end up in an infinite recursive loop in case resObj dict is - the same we are already in - - poppler/FontInfo.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0222c6ceb0fcf1d7c4422691a68a035a558ad614 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Mar 24 17:14:07 2008 +0100 - - fix build when using cmake, not sure it's completely ok, but at - least i can compile - - CMakeLists.txt | 1 + - cmake/modules/FindGTK.cmake | 23 ++++++++++++++++------- - config.h.cmake | 3 +++ - glib/CMakeLists.txt | 17 +++++++++++------ - glib/poppler-page.cc | 2 +- - glib/test-poppler-glib.cc | 2 +- - 6 files changed, 33 insertions(+), 15 deletions(-) - -commit 3e4164f2db69358adf07596195842dd00458b621 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Mar 24 15:10:31 2008 +0100 - - fix some cmake HAVE_foo - - CMakeLists.txt | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 22f615aee488cc363a078330861e80f389f47061 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sun Mar 23 13:22:07 2008 +0100 - - Fixed wrong functions. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - glib/poppler-annot.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit cccfe42ed9c53d27cf6a1403ae55bf34a053012d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 22 19:12:05 2008 +0100 - - Fix rm line not to error when no *moc file is present - - qt4/src/Makefile.am | 2 +- - qt4/tests/Makefile.am | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit e60d39ba0e8b9742106a0c9b1385b1c907729c3f -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 22 19:11:17 2008 +0100 - - Fix rm line not to error if no *moc file is present - - qt4/demos/Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit d9d52e622c6b28a9941168bb73839ec335ca7232 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 22 19:10:40 2008 +0100 - - Fix configure to not require gdk when we are on try mode - - configure.ac | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit 9b8809298dd16cdbffcc12b6db8e274578934063 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 22 15:49:02 2008 +0100 - - It's really only an error if < 0 - - poppler/PDFDoc.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0fb1e697cc4100ce23298141c8b5829273872423 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 22 15:46:44 2008 +0100 - - remove unneeded variable - - poppler/PDFDoc.cc | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 3404cb626ee9b4520d6fe601e07560745a4cb42a -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 22 15:44:50 2008 +0100 - - Remove OutStream::reset since noone uses it - - This way we have a fseek less to care about if worked or not - - poppler/Stream.cc | 5 ----- - poppler/Stream.h | 5 ----- - qt4/src/poppler-qiodeviceoutstream-private.h | 1 - - qt4/src/poppler-qiodeviceoutstream.cc | 5 ----- - 4 files changed, 0 insertions(+), 16 deletions(-) - -commit 066595dd06c930997d5ec65a06c822616af9baa0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 22 15:43:07 2008 +0100 - - Check the document stream is seekable when opening it - - Fixes bug 14126 - - poppler/PDFDoc.cc | 7 +++++++ - 1 files changed, 7 insertions(+), 0 deletions(-) - -commit 23b6475463f8973b5ac83bb21a6b7b6000cc435b -Author: Ed Avis <eda@waniasset.com> -Date: Sat Mar 22 13:55:59 2008 +0100 - - Check for fseek return values - - fofi/FoFiBase.cc | 14 ++++++++++++-- - poppler/GfxFont.cc | 12 ++++++++++-- - 2 files changed, 22 insertions(+), 4 deletions(-) - -commit b33bb282e45cf1a083cfbb13603ac465d386c28d -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Fri Mar 21 13:53:21 2008 +0100 - - Fixed poppler glib public api. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - glib/poppler-annot.cc | 4 ++-- - glib/poppler-annot.h | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -commit 371932f413d570d7784c668f30834d3d92d7aa80 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Mar 20 11:44:32 2008 +0100 - - [glib] Remove unused variable. - - glib/poppler-document.cc | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 21fa476ac384256c15a954b708e009f2b336b06f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Mar 20 11:42:32 2008 +0100 - - [glib] Do not cache image_dev in poppler page. - - Thanks to Kouhei Sutou who caught the problem. - - glib/poppler-page.cc | 60 - ++++++++++++++++++++++++++------------------ - glib/poppler-private.h | 3 -- - glib/test-poppler-glib.cc | 9 ++++++- - 3 files changed, 43 insertions(+), 29 deletions(-) - -commit 22cd70d8fc308fb8b19d36d0172014ba532230fb -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 19 21:52:14 2008 +0100 - - poppler_annot_markup_get_opacity returns a double so use %f - - glib/demo/annots.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit b9a5fd4671638caa91f8a389be278d993391f499 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 19 21:28:49 2008 +0100 - - updated by gtk-doc - - glib/reference/tmpl/poppler-action.sgml | 1 + - glib/reference/tmpl/poppler.sgml | 3 +++ - 2 files changed, 4 insertions(+), 0 deletions(-) - -commit b7e0b740578ea1e84ac0ef850b5a03c66b2863e3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 19 21:28:01 2008 +0100 - - Fill 0.7.3 news - - NEWS | 7 +++++++ - 1 files changed, 7 insertions(+), 0 deletions(-) - -commit 3adaff1dad8127fdd06653cf49196027ad414a08 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 19 21:27:46 2008 +0100 - - Bump version to 0.7.3 - - CMakeLists.txt | 2 +- - configure.ac | 2 +- - msvc/config.h | 6 +++--- - qt4/src/Doxyfile | 2 +- - 4 files changed, 6 insertions(+), 6 deletions(-) - -commit 52dd710b63911be2d8c960de0232c497c35ecac8 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Mar 19 18:35:35 2008 +0100 - - [glib] Update outline and links demos to the new POPPLER_ACTION_NONE - - glib/demo/utils.c | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 6a22f0a20df38156c06e8ba10649e0828a1da102 -Author: Eugen Dedu <Eugen.Dedu@pu-pm.univ-fcomte.fr> -Date: Wed Mar 19 18:32:48 2008 +0100 - - [glib] Consider no action as an action of type None instead of Unknown - - glib/poppler-action.cc | 2 +- - glib/poppler-action.h | 1 + - 2 files changed, 2 insertions(+), 1 deletions(-) - -commit 185d5818fd546f85934b041d5b0cdcdf1849b1dc -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Mar 18 20:08:21 2008 +0100 - - Improve error handling when creating a document - - glib/poppler-document.cc | 40 ++++++++++++++++++++++++++++------------ - glib/poppler.h | 5 ++++- - 2 files changed, 32 insertions(+), 13 deletions(-) - -commit 9bba2748985049515bfd9c9b44f26b92fa704078 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Mar 15 01:11:39 2008 +0100 - - Some more free - - poppler/OptionalContent.cc | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit bfc308935fa138e27c4d2ad0e1c1cad20eba8e8a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Mar 15 01:05:32 2008 +0100 - - Use error instead of printf - - poppler/OptionalContent.cc | 15 ++++++++------- - 1 files changed, 8 insertions(+), 7 deletions(-) - -commit 998b1523ee653c1585f03b4a580e0d95ba694aca -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Mar 15 01:02:31 2008 +0100 - - Some free - - poppler/OptionalContent.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit c65a66a82259f547927cbb918611bcf4a8e264b2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Mar 14 20:29:53 2008 +0100 - - xx0 is non exclusive so that should be < not <= - - Fixes several warnings about writes on bad places - - splash/SplashXPathScanner.cc | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit bd2272f3079319d1c05ca93f7fb6eb0a5370b938 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Mar 14 19:52:04 2008 +0100 - - Fix "Make sure we don't draw outside the bitmap on Splash::fillGlyph2" - when painting with no aa - - Fixes bug 15009 - - splash/Splash.cc | 12 ++++++++---- - 1 files changed, 8 insertions(+), 4 deletions(-) - -commit 5bf8d864e68854f0855e07fb67aa124e06c739cd -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 12 22:48:07 2008 +0100 - - fix build - - glib/reference/Makefile.am | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit d0be5c86dcd3310062d820b3515c31e4720af2ca -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 12 22:40:59 2008 +0100 - - Update version to 0.7.2 and fill NEWS - - CMakeLists.txt | 2 +- - NEWS | 20 ++++++++++++++++++++ - configure.ac | 2 +- - msvc/config.h | 6 +++--- - qt4/src/Doxyfile | 2 +- - 5 files changed, 26 insertions(+), 6 deletions(-) - -commit 0b2ecf39572821a99374e6acec7c1bd438911bbc -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 12 22:38:57 2008 +0100 - - update soname here too - - glib/CMakeLists.txt | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit f5065016b168e4896e2fe774cd22bbd900849b52 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Mar 12 22:06:53 2008 +0100 - - Make GDK dependency option for glib bindings - - Fixes bug #13719. - - configure.ac | 45 +++- - glib/Makefile.am | 7 +- - glib/demo/page.c | 88 ++++++- - glib/demo/render.c | 4 + - glib/poppler-action.h | 1 - - glib/poppler-annot.cc | 26 +- - glib/poppler-annot.h | 2 +- - glib/poppler-document.h | 2 - - glib/poppler-features.h.in | 1 + - glib/poppler-page.cc | 695 - ++++++++++++++++++++++++++------------------ - glib/poppler-page.h | 76 +++-- - glib/poppler.h | 2 +- - glib/test-poppler-glib.cc | 2 +- - 13 files changed, 610 insertions(+), 341 deletions(-) - -commit 46d4fab82332e71d0b68c0a8deeac78f2201ed14 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 12 20:35:33 2008 +0100 - - Increment version of libpoppler and libpoppler-qt4 - - CMakeLists.txt | 2 +- - poppler/Makefile.am | 2 +- - qt4/src/CMakeLists.txt | 2 +- - qt4/src/Makefile.am | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - -commit 550c1fc73a6d2af65728751fd0b59ccc7110fa8b -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 12 20:34:48 2008 +0100 - - Init to false updated field of XRefEntries plus indenting fixes - - poppler/XRef.cc | 11 ++++++----- - 1 files changed, 6 insertions(+), 5 deletions(-) - -commit 6a671686c6265ecdb4c48f04392de9c56d4e0936 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Wed Mar 12 21:43:12 2008 +1030 - - Fix regression in cairo output when transforming ctm - - The commit: - ec01926e5a9dc16e200060497c43e79a1623698d "Avoid setting a singular - ctm" - introduced a regression in the output when using a ctm. - - The check for an invertable matrix had the side effect of inverting - the matrix. Instead, make a copy of the matrix before testing if it is - invertable. - - poppler/CairoOutputDev.cc | 7 ++++--- - 1 files changed, 4 insertions(+), 3 deletions(-) - -commit 0b2c3bb25c908b07e760d824dbfe93c6051812aa -Merge: 362fe01 9c472f7 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Wed Mar 12 00:23:58 2008 +0100 - - Merge branch 'master' of - ssh://inigomartinez@git.freedesktop.org/git/poppler/poppler - -commit 362fe013c0d96698b52d70cf5226cddca7fe52d4 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Wed Mar 12 00:07:12 2008 +0100 - - Enabled back the AnnotWidget support. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 9c472f76d2462d0e775c851fdbac6ca2bc9812ea -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 12 00:00:20 2008 +0100 - - cmake build - - glib/demo/CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 821858f5c36786955d9475044bfee57f5060ad2f -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 11 23:58:05 2008 +0100 - - Return char bounding box instead of edge, it's much more useful for - character positioning - - qt4/src/poppler-page.cc | 8 ++++++-- - qt4/src/poppler-private.h | 3 +-- - qt4/src/poppler-qt4.h | 6 ++---- - qt4/src/poppler-textbox.cc | 4 ++-- - 4 files changed, 11 insertions(+), 10 deletions(-) - -commit d7e642732ced592362d9787bddadb7a110dcc5a5 -Merge: 3642f0c 2d6c605 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Tue Mar 11 23:41:59 2008 +0100 - - Merge branch 'master' of - ssh://inigomartinez@git.freedesktop.org/git/poppler/poppler - -commit 3642f0c48bc49cd4d698e769544c1d8604c6482f -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Tue Mar 11 23:13:33 2008 +0100 - - glib annots demo. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - glib/demo/Makefile.am | 2 + - glib/demo/annots.c | 468 - +++++++++++++++++++++++++++++++++++++++++++++++++ - glib/demo/annots.h | 31 ++++ - glib/demo/main.c | 4 +- - 4 files changed, 504 insertions(+), 1 deletions(-) - -commit 2d6c60537317bd3ac9e0582e0da09e7365729097 -Author: Pino Toscano <pino@kde.org> -Date: Tue Mar 11 22:54:44 2008 +0100 - - For now we cannot handle MovieLink's, so comment them out. - - qt4/src/poppler-annotation.cc | 2 ++ - qt4/src/poppler-link.cc | 4 ++++ - qt4/src/poppler-link.h | 2 ++ - 3 files changed, 8 insertions(+), 0 deletions(-) - -commit a354f7198c493990613a1db131c662ec27948863 -Author: Hugo Mercier <hmercier31@gmail.com> -Date: Tue Mar 11 22:49:00 2008 +0100 - - Initial Movie support (2) - - Now with the forgotten files - - poppler/Movie.cc | 443 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Movie.h | 177 ++++++++++++++++++++++ - 2 files changed, 620 insertions(+), 0 deletions(-) - -commit 43e5dd941d4bc35c4eebbad66c13235639e0c1a0 -Merge: aab1768 4fdd254 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 11 22:31:22 2008 +0100 - - Merge branch 'master' of - ssh://aacid@git.freedesktop.org/git/poppler/poppler - -commit 4fdd254370ea6055e95c8ebee51b69e06c501714 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Mar 11 22:31:00 2008 +0100 - - Fix build - - glib/poppler-page.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit aab17684dc3f21ff2b1ee6eacdc0c565d368df78 -Author: Hugo Mercier <hmercier31@gmail.com> -Date: Tue Mar 11 22:28:28 2008 +0100 - - Initial Movie support - - CMakeLists.txt | 2 + - poppler/Annot.cc | 316 - ++++++++++++++++++++++++++++++++++++++++++++++++++- - poppler/Annot.h | 125 ++++++++++++++++++++ - poppler/Link.cc | 108 +++++++++++++++--- - poppler/Link.h | 64 ++++++++++- - poppler/Makefile.am | 2 + - 6 files changed, 591 insertions(+), 26 deletions(-) - -commit 13a0d2390b9e4684af070c213f385485715353df -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 11 22:27:38 2008 +0100 - - Add poppler-annot to the cmake build system - - glib/CMakeLists.txt | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 19f0e3b40bce4d8157d8c8bd04eaf6bacbef38b8 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Tue Mar 11 22:09:04 2008 +0100 - - Add preliminary annotations support in the glib frontend - - glib/Makefile.am | 2 + - glib/poppler-annot.cc | 776 - ++++++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-annot.h | 181 +++++++++++ - glib/poppler-page.cc | 166 +++++++++++ - glib/poppler-page.h | 15 + - glib/poppler-private.h | 5 +- - glib/poppler.h | 7 + - 7 files changed, 1151 insertions(+), 1 deletions(-) - -commit 6fa3ab20fee311b4aff92be18870fd0e1730a81f -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Tue Mar 11 18:44:27 2008 +0100 - - Changed AnnotMarkup inheritance - - poppler/Annot.cc | 9 +++++---- - poppler/Annot.h | 10 +++++----- - 2 files changed, 10 insertions(+), 9 deletions(-) - -commit 3111cfe2ccb32f9680baaad0c3f0678dd5969f8b -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Mar 10 22:12:36 2008 +0100 - - And free the memory - - qt4/tests/test-poppler-qt4.cpp | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 58f88c23402ac2e678dc655f64d93d89bb1812be -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Mar 10 22:08:43 2008 +0100 - - Add the -textRects option to the test app so we can check text rects - are correct - - qt4/tests/test-poppler-qt4.cpp | 45 - +++++++++++++++++++++++++++++++++++---- - 1 files changed, 40 insertions(+), 5 deletions(-) - -commit 94ceb3cae79dc7786fa59fd889a87160780ed5df -Merge: 0f9e843 35f34bd -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Mar 9 23:34:11 2008 +0100 - - Merge branch 'master' of - ssh://aacid@git.freedesktop.org/git/poppler/poppler - -commit 0f9e84302ac2108f05bdbb10e7e57ae19ad1e9f3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Mar 9 23:33:11 2008 +0100 - - Do not force default values to fontconfig patterns as fontconfig - already fills in default values for us - - Fixes bug 14883 - - poppler/GlobalParams.cc | 17 +++++++++-------- - 1 files changed, 9 insertions(+), 8 deletions(-) - -commit 35f34bd44c74eeb76a58b30acfbb0303d7285f06 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Mar 9 17:38:54 2008 +0100 - - Fix build when compiling without cairo support - - glib/demo/images.c | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 32637db19dd80a9b8452f86eb677b10e77290627 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Mar 9 00:57:08 2008 +0100 - - proper lib64 Qt detection - - Fixes bug 14583 - - m4/qt.m4 | 15 ++++++++++++--- - 1 files changed, 12 insertions(+), 3 deletions(-) - -commit 65a88a95a5c54c890048e8a986df361585d601dd -Author: Pino Toscano <pino@kde.org> -Date: Sat Mar 8 03:11:36 2008 +0100 - - Provide the mime type for an embedded file, if known. - - Adapt the unit test for that. - - qt4/src/poppler-embeddedfile.cc | 5 +++++ - qt4/src/poppler-qt4.h | 5 +++++ - qt4/tests/check_attachments.cpp | 7 +++++++ - 3 files changed, 17 insertions(+), 0 deletions(-) - -commit 23da27a229c8b3cc2a0a0dd6354c40723934390c -Author: Pino Toscano <pino@kde.org> -Date: Sat Mar 8 03:10:58 2008 +0100 - - Optionally read the mimetype for the embedded files. - - poppler/Catalog.cc | 17 +++++++++-------- - poppler/Catalog.h | 7 ++++++- - 2 files changed, 15 insertions(+), 9 deletions(-) - -commit 42c254b978c61e2ccfda083dfeffec9fc35a5fe7 -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 3 16:56:09 2008 +0100 - - be safe about out-of-range values - - qt4/src/poppler-textbox.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 5db75df77938eb7620867d0618058be52ed2d3cb -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 3 16:53:39 2008 +0100 - - initialize nicely - - qt4/src/poppler-private.h | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 3ad0ab7e4abd37528284269c69be3cdfb8d31d2e -Author: Pino Toscano <pino@kde.org> -Date: Mon Mar 3 16:49:23 2008 +0100 - - apidox - - qt4/src/poppler-link.h | 17 +++++++++++++++++ - qt4/src/poppler-qt4.h | 23 ++++++++++++++++++++++- - 2 files changed, 39 insertions(+), 1 deletions(-) - -commit ec01926e5a9dc16e200060497c43e79a1623698d -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Mar 2 20:15:20 2008 -0500 - - Avoid setting a singular ctm - - Ignoring singular ctm's gives a better result than having - our cairo context error and turn off. Related to #14398. - - poppler/CairoOutputDev.cc | 14 ++++++++++++++ - 1 files changed, 14 insertions(+), 0 deletions(-) - -commit 4882d7a118b93fdb5c441d70757e485be7ee25d7 -Author: Pino Toscano <pino@kde.org> -Date: Thu Feb 28 15:12:23 2008 +0100 - - printf -> qDebug - - qt4/src/poppler-optcontent.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 31ce4049bf12c2716be7ec0fb8eda502d989f66e -Author: Brad Hards <bradh@saxicola.cuneata.net> -Date: Thu Feb 28 22:09:30 2008 +1100 - - Respect PageMode for optional content and embedded files. - - This makes the PDF 1.7 spec open with the embedded files showing. - - qt4/demos/embeddedfiles.cpp | 7 +++++++ - qt4/demos/embeddedfiles.h | 1 + - qt4/demos/optcontent.cpp | 8 ++++++++ - qt4/demos/optcontent.h | 1 + - 4 files changed, 17 insertions(+), 0 deletions(-) - -commit ff938c431799d49325c0f46f1e6cbe1033993a83 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Feb 27 23:12:53 2008 +0100 - - do not forget to distribute GlobalParamsWin.cc next time - - poppler/Makefile.am | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 277382b8186d137a9f2a62bc2d22e9f0cda7d923 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Feb 27 22:56:33 2008 +0100 - - fix typo - - glib/demo/images.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 5b2f8f21fca63508570a0c77c6f7221a322e6e57 -Merge: 7e65118 4254f12 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 22:10:12 2008 +0100 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit 7e651186f483976f9833de245b6c7add38e77a16 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 22:03:17 2008 +0100 - - Properly enable/disable the contents when their parents are changed. - - Now, the children maintain the "checked state" they had, when their - parent is unchecked; - but, they are really disabled, both in the possibility to be checked - and in the drawing of their associated content [applying the same - to their children, and so on]. - - qt4/src/poppler-optcontent-private.h | 8 ++++++- - qt4/src/poppler-optcontent.cc | 37 - +++++++++++++++++++++++++++++---- - 2 files changed, 39 insertions(+), 6 deletions(-) - -commit 4254f1237ebed09b8e1c85f935a20bde3d8f36ff -Merge: ed6c0c2 0569ae7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Feb 27 20:44:27 2008 +0100 - - Merge branch 'master' of - ssh://aacid@git.freedesktop.org/git/poppler/poppler - -commit 8d384c06f96ba8cb3e73c275b3c708c64da4595d -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 20:39:09 2008 +0100 - - small header cleanup - - qt4/src/poppler-optcontent-private.h | 9 +++++++-- - qt4/src/poppler-optcontent.cc | 7 ++++--- - 2 files changed, 11 insertions(+), 5 deletions(-) - -commit ed6c0c260837a0025279765ef7778b83d6ee2209 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Feb 27 20:43:45 2008 +0100 - - fix build and distcheck with autools - - qt4/demos/Makefile.am | 3 +++ - qt4/src/Makefile.am | 5 ++++- - qt4/tests/Makefile.am | 3 +++ - 3 files changed, 10 insertions(+), 1 deletions(-) - -commit 344d55539b1b6bcabec609fd828db372a07491b4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Feb 27 20:43:13 2008 +0100 - - fill the NEWS for 0.7.1 - - NEWS | 15 +++++++++++++++ - 1 files changed, 15 insertions(+), 0 deletions(-) - -commit 1c47633ba782021978fa34d41a4ab0badf3af9d3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Feb 27 20:42:55 2008 +0100 - - Increase version number to 0.7.1 - - CMakeLists.txt | 2 +- - configure.ac | 2 +- - msvc/config.h | 6 +++--- - qt4/src/Doxyfile | 2 +- - 4 files changed, 6 insertions(+), 6 deletions(-) - -commit 0569ae76b6af1723b4606af189242a23199f387d -Merge: f395531 d8eba8c -Author: Brad Hards <bradh@kde.org> -Date: Thu Feb 28 06:26:09 2008 +1100 - - Merge branch 'master' of - ssh://bradh@git.freedesktop.org/git/poppler/poppler - -commit d8eba8c10834116b4f0f295375805172f5216993 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 19:07:46 2008 +0100 - - export the OptContentModel - - qt4/src/poppler-optcontent.h | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit 0445e64a4124af7c1b84673f237022e133eb8542 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 19:04:03 2008 +0100 - - make only the Document able to create OptContentsModel's - - qt4/src/poppler-optcontent.h | 6 +++++- - 1 files changed, 5 insertions(+), 1 deletions(-) - -commit c965437b67a4f97ee8365a217bd10406fba3767a -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 18:58:31 2008 +0100 - - setRootNode() is private (and unused) API - - qt4/src/poppler-optcontent-private.h | 2 ++ - qt4/src/poppler-optcontent.cc | 8 ++++---- - qt4/src/poppler-optcontent.h | 4 ---- - 3 files changed, 6 insertions(+), 8 deletions(-) - -commit e293bfc384e2dfc4ef04582053ce18d8c0bcb7b3 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 18:50:35 2008 +0100 - - small cleanup - - qt4/src/poppler-optcontent.cc | 11 ++++------- - 1 files changed, 4 insertions(+), 7 deletions(-) - -commit f11aa0008585e845ce509172d76f72f941be497d -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 18:44:09 2008 +0100 - - adapt the tests to the new layout of the contents model - - qt4/tests/check_optcontent.cpp | 66 - ++++++++++++++-------------------------- - 1 files changed, 23 insertions(+), 43 deletions(-) - -commit 4a324484b5c77ddc348746e7bcf6051ade28e389 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 18:04:52 2008 +0100 - - free some objects (thus leak less) - - poppler/Gfx.cc | 2 ++ - poppler/OptionalContent.cc | 2 ++ - 2 files changed, 4 insertions(+), 0 deletions(-) - -commit 0f4e7791ab6884072a1aee56e9cec212d8cea263 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 15:58:21 2008 +0100 - - ignore any generated .moc here - - qt4/src/.gitignore | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 136ae44f155b17d9e8b041b67f75531d8544337c -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 15:56:09 2008 +0100 - - keep track of the items changed when toggling an item, so we can - update them properly - - qt4/src/poppler-optcontent-private.h | 4 +- - qt4/src/poppler-optcontent.cc | 38 - ++++++++++++++++++++++++++------- - 2 files changed, 32 insertions(+), 10 deletions(-) - -commit b73e2afef7e5e1b68d82a10c94bca3c201c5f8b3 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 15:52:06 2008 +0100 - - fix indexFromItem once again, and make parent() call it with the - right node - - qt4/src/poppler-optcontent-private.h | 2 +- - qt4/src/poppler-optcontent.cc | 19 +++++++++---------- - 2 files changed, 10 insertions(+), 11 deletions(-) - -commit 803787f763578320aa5f405ed49c64e6b924bad3 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 15:30:18 2008 +0100 - - compile with the autotools - - (second patch I forgot to apply with the first) - - qt4/src/Makefile.am | 9 ++++++--- - 1 files changed, 6 insertions(+), 3 deletions(-) - -commit 0b527a8ed62677bb09df4587f072a310c2959750 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 14:34:13 2008 +0100 - - Extract the OptContentItem -> QModelIndex creation in an own function. - - qt4/src/poppler-optcontent-private.h | 1 + - qt4/src/poppler-optcontent.cc | 7 ++++++- - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit c94d6cc95c6838f31e27832cb3090389bf4d8227 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 14:30:26 2008 +0100 - - Make index(), data() and setData() more safe. - - Errors spotted using ModelTest. - - qt4/src/poppler-optcontent-private.h | 2 +- - qt4/src/poppler-optcontent.cc | 15 +++++++++------ - 2 files changed, 10 insertions(+), 7 deletions(-) - -commit b8e833733d84eaa93d6bae522710feb3075ca329 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 14:05:19 2008 +0100 - - fix build with the autotools - - qt4/src/Makefile.am | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit f89ba474bae281f1cdeddb72ac8425dee1087e35 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 13:28:50 2008 +0100 - - Put the check states of the optional contents in the same column as - the name. - - This feels a bit more elegant than changing a value in a different - column. - Cleanup data()/setData() so they can be extended easily. - - qt4/src/poppler-optcontent.cc | 74 - +++++++++++++++++++++-------------------- - 1 files changed, 38 insertions(+), 36 deletions(-) - -commit defa0ecb2790402a4069fea3b3c285a50675682d -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 12:24:16 2008 +0100 - - Add a skeleton of OptContentModel::headerData(). - - It does nothing yet, but we can add stuff later on w/o breaking BC. - - qt4/src/poppler-optcontent.cc | 5 +++++ - qt4/src/poppler-optcontent.h | 2 ++ - 2 files changed, 7 insertions(+), 0 deletions(-) - -commit f395531a3e8f71a46b3c942f8f437ade1d9fdb57 -Author: Brad Hards <bradh@kde.org> -Date: Wed Feb 27 22:22:51 2008 +1100 - - Minor cleanup. - - qt4/src/poppler-optcontent.cc | 7 +++---- - 1 files changed, 3 insertions(+), 4 deletions(-) - -commit 0a19486cb4de57c0c987cc4ce2434a96bbd18338 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 12:15:44 2008 +0100 - - refresh the current page when the data of the content model change - - qt4/demos/optcontent.cpp | 8 ++++++++ - qt4/demos/optcontent.h | 3 +++ - 2 files changed, 11 insertions(+), 0 deletions(-) - -commit 09b7cc2efb7d21fa4dabd23d2d2de877cc7d86ee -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 12:15:18 2008 +0100 - - optional method to reload the current page - - qt4/demos/documentobserver.cpp | 5 +++++ - qt4/demos/documentobserver.h | 1 + - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit 39fe905be8f2ae79d9c26cd87547f3ea2608411e -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 12:00:29 2008 +0100 - - Add a dock for showing the optional content tree. - - qt4/demos/CMakeLists.txt | 1 + - qt4/demos/Makefile.am | 3 ++ - qt4/demos/optcontent.cpp | 55 - ++++++++++++++++++++++++++++++++++++++++++++++ - qt4/demos/optcontent.h | 43 ++++++++++++++++++++++++++++++++++++ - qt4/demos/viewer.cpp | 7 ++++++ - 5 files changed, 109 insertions(+), 0 deletions(-) - -commit f17dd5539501a996479b903ac9b8aceb3c4cfafe -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 11:53:32 2008 +0100 - - cleanup - - qt4/src/poppler-optcontent-private.h | 3 ++- - qt4/src/poppler-optcontent.h | 4 +--- - 2 files changed, 3 insertions(+), 4 deletions(-) - -commit f3cc894559f10dbd4277fa9f30de9931ed69dfd4 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 11:43:34 2008 +0100 - - OptContentModel::itemFromRef() and OptContentItem are private API. - - Hide them in the implementation. - - qt4/src/poppler-optcontent-private.h | 43 - ++++++++++++++++++++++++++++++++++ - qt4/src/poppler-optcontent.cc | 8 +++--- - qt4/src/poppler-optcontent.h | 42 - --------------------------------- - 3 files changed, 47 insertions(+), 46 deletions(-) - -commit 48e8b2105cf8f177ca655b969470e45e2407db82 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 11:28:16 2008 +0100 - - move all the private stuff of OptContentModel into its d-pointer - - qt4/src/poppler-optcontent-private.h | 9 +++++++-- - qt4/src/poppler-optcontent.cc | 29 +++++++++++++++-------------- - qt4/src/poppler-optcontent.h | 4 ---- - 3 files changed, 22 insertions(+), 20 deletions(-) - -commit b78a7f7a0e8d5a9c22014d34754090d863030e0d -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 27 11:06:57 2008 +0100 - - use a QPointer for the OptContentModel, so we are safe about - ownership. - - qt4/src/poppler-document.cc | 4 ++-- - qt4/src/poppler-private.h | 6 +++--- - 2 files changed, 5 insertions(+), 5 deletions(-) - -commit 48557da71adb0fe6bd4da2fb32433796a96c3576 -Author: Brad Hards <bradh@kde.org> -Date: Wed Feb 27 19:39:18 2008 +1100 - - We need to install the optional content header. - - qt4/src/CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 6e2bb03b5ef256c03a8da1cbf9bbc87c593942ad -Author: Brad Hards <bradh@kde.org> -Date: Wed Feb 27 19:23:49 2008 +1100 - - Partial d-pointer implementation. - - qt4/src/poppler-optcontent-private.h | 57 - ++++++++++++++++++++++++++++++++++ - qt4/src/poppler-optcontent.cc | 49 ++++++++++++++++++----------- - qt4/src/poppler-optcontent.h | 24 +++----------- - 3 files changed, 92 insertions(+), 38 deletions(-) - -commit c627b7aa10ae9cdceb78b751a7e826170f402af0 -Author: Brad Hards <bradh@kde.org> -Date: Wed Feb 27 16:12:38 2008 +1100 - - A couple of cleanups suggested by Pino. - - qt4/src/poppler-document.cc | 6 +++--- - qt4/src/poppler-qt4.h | 8 +++++--- - 2 files changed, 8 insertions(+), 6 deletions(-) - -commit 81891667e18fcf164af02f5f366de07f78d67c8f -Author: Brad Hards <bradh@kde.org> -Date: Wed Feb 27 15:47:03 2008 +1100 - - Add in the initial part of the optional content support. - - To see this work, compare ClarityOCGs.pdf with and - without this change. - - Right now we only handle optional content using - XObjects. Optional content using Marked Content has - infrastructure, but is not implemented. That will be - quite invasive in Gfx, and I'm not confident enough - to do it this late in the process. - - CMakeLists.txt | 1 + - poppler/Catalog.cc | 9 + - poppler/Catalog.h | 4 + - poppler/Gfx.cc | 65 +++++- - poppler/Gfx.h | 12 +- - poppler/Makefile.am | 2 + - poppler/OptionalContent.cc | 322 ++++++++++++++++++++++++++ - poppler/OptionalContent.h | 85 +++++++ - poppler/PDFDoc.h | 5 + - poppler/PSOutputDev.cc | 6 +- - poppler/Page.cc | 2 +- - qt4/src/.gitignore | 1 + - qt4/src/CMakeLists.txt | 3 + - qt4/src/Makefile.am | 6 + - qt4/src/poppler-document.cc | 13 + - qt4/src/poppler-optcontent.cc | 354 ++++++++++++++++++++++++++++ - qt4/src/poppler-optcontent.h | 122 ++++++++++ - qt4/src/poppler-private.h | 4 + - qt4/src/poppler-qt4.h | 18 ++ - qt4/tests/.gitignore | 1 + - qt4/tests/CMakeLists.txt | 1 + - qt4/tests/Makefile.am | 5 + - qt4/tests/check_optcontent.cpp | 499 - ++++++++++++++++++++++++++++++++++++++++ - 23 files changed, 1532 insertions(+), 8 deletions(-) - -commit 11b70bcda905e618c199a067db6b0246612e101d -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 26 23:01:27 2008 +0100 - - fixup the default export macro name (added by cmake); _WIN32 is - defined only on win32 (remove a plethora of warnings) - - qt4/src/poppler-export.h | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit d4d6c14cd83d04c61daa6618c3148a0bb47dc292 -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 26 22:57:02 2008 +0100 - - install the export header - - qt4/src/CMakeLists.txt | 1 + - qt4/src/Makefile.am | 1 + - 2 files changed, 2 insertions(+), 0 deletions(-) - -commit 4ba2e2d21710135656adbf93c5994cfb46502308 -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 26 22:55:30 2008 +0100 - - no need to include the export header in private headers - - qt4/src/poppler-annotation-helper.h | 1 - - qt4/src/poppler-annotation-private.h | 1 - - qt4/src/poppler-converter-private.h | 1 - - qt4/src/poppler-link-extractor-private.h | 1 - - qt4/src/poppler-page-private.h | 1 - - qt4/src/poppler-private.h | 1 - - qt4/src/poppler-qiodeviceoutstream-private.h | 1 - - 7 files changed, 0 insertions(+), 7 deletions(-) - -commit 0a466c09fb70b92f39df19bc315b6575e419ad5b -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Feb 26 22:47:31 2008 +0100 - - We also need to distribute poppler-export.h - - qt4/src/Makefile.am | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 2034d57c700049bc9a6565bbb818e1c9f4467784 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Feb 26 22:46:29 2008 +0100 - - Now for real: Add special casing in cmake buildsystem for MSVC, - also add Export markers to qt4 classes, although symbol visibility - is only used on MSVC at the moment - - CMakeLists.txt | 5 +++++ - qt4/src/CMakeLists.txt | 3 +++ - qt4/src/poppler-annotation-helper.h | 1 + - qt4/src/poppler-annotation-private.h | 1 + - qt4/src/poppler-annotation.h | 19 ++++++++++--------- - qt4/src/poppler-converter-private.h | 1 + - qt4/src/poppler-export.h | 6 +++--- - qt4/src/poppler-form.h | 9 +++++---- - qt4/src/poppler-link-extractor-private.h | 1 + - qt4/src/poppler-link.h | 17 +++++++++-------- - qt4/src/poppler-page-private.h | 1 + - qt4/src/poppler-private.h | 1 + - qt4/src/poppler-qiodeviceoutstream-private.h | 1 + - qt4/src/poppler-qt4.h | 21 +++++++++++---------- - qt4/tests/CMakeLists.txt | 6 ++++++ - 15 files changed, 59 insertions(+), 34 deletions(-) - -commit b931920f63f4276ec355118faa061bafa5ac5244 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Feb 26 22:42:16 2008 +0100 - - Add special casing in cmake buildsystem for MSVC, also add Export - markers to qt4 classes, although symbol visibility is only used on - MSVC at the moment - - qt4/src/poppler-export.h | 17 +++++++++++++++++ - 1 files changed, 17 insertions(+), 0 deletions(-) - -commit 1778fddb36d6cb2c7f7848bee06189158f69f16e -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 24 23:02:08 2008 +0100 - - Add the cmake files to EXTRA_DIST so they get added when i do make - dist to get the release tarball - - Makefile.am | 39 +++++++++++++++++++++++++++++++++++++++ - 1 files changed, 39 insertions(+), 0 deletions(-) - -commit 51f171e10a42d492c8c32a5e2578d05b73d89238 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 24 22:47:46 2008 +0100 - - ignore more - - qt4/demos/.gitignore | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit adb1ccdb9265f0583cb348c456a39efac610aff1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 24 22:46:33 2008 +0100 - - ignore - - qt4/demos/.gitignore | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 101e526c63175ffc1a75e1b68da7bb4fff9cd530 -Author: Patrick Spendrin <ps_ml@gmx.de> -Date: Sun Feb 24 20:52:41 2008 +0100 - - define snprintf to _snprintf if we are building on MSVC - - config.h.cmake | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit f7f8ab488257c3979d20e5c0690ec5d7c2cd831b -Author: Patrick Spendrin <ps_ml@gmx.de> -Date: Sun Feb 24 20:43:11 2008 +0100 - - define M_PI in case it is not defined - - poppler/Function.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit f00436b63bf9a42dcb2728a07db9c20f1f23d0bc -Author: Patrick Spendrin <ps_ml@gmx.de> -Date: Sun Feb 24 20:39:42 2008 +0100 - - Add proper dirent.h guards - - utils/pdftoabw.cc | 2 ++ - utils/pdftohtml.cc | 2 ++ - 2 files changed, 4 insertions(+), 0 deletions(-) - -commit e1463451c584181f918265438cf6ddcb408bf731 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Feb 21 20:43:56 2008 +0100 - - Code uses if USE_EXCEPTIONS, so we need to defined it to 1, not just - define it - - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 88d4bbbcf828e3247454c8ba3c2fb0fb58207b6a -Author: Michael Vrable <mvrable@cs.ucsd.edu> -Date: Thu Feb 21 19:53:03 2008 +0100 - - If a bitmap's dimensions are invalid, do not try to display it. - - poppler/Gfx.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 452ae6f5674b00b43955952961f7ca0583f73e27 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Feb 21 19:46:19 2008 +0100 - - Make sure we don't draw outside the bitmap on Splash::fillGlyph2 - - splash/Splash.cc | 76 - ++++++++++++++++++++++++++++++++++------------------- - 1 files changed, 49 insertions(+), 27 deletions(-) - -commit 7f60fa806bd6d3d28917f349a2a19b52f97f593a -Author: James Cloos <cloos@jhcloos.com> -Date: Thu Feb 21 13:00:05 2008 -0500 - - Fix typo - - Signed-off-by: James Cloos <cloos@jhcloos.com> - - qt4/demos/Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 053ecae534a4522d152b0139b6aed6da2059d760 -Author: Carl Worth <cworth@cworth.org> -Date: Wed Feb 20 17:21:27 2008 -0800 - - Keep cairo and cairo_shape consistent - - The 'cairo_shape' state was not always being modified at the same - time as 'cairo'. In some cases this led to a sequence of ever - larger matrix scale factors until things just blew up. - - poppler/CairoOutputDev.cc | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit bf6dd890994150406b4464e45355a4a99870fc60 -Author: Pino Toscano <pino@kde.org> -Date: Thu Feb 21 01:23:07 2008 +0100 - - Add a dock for showing the document metadata. - - qt4/demos/CMakeLists.txt | 1 + - qt4/demos/Makefile.am | 3 ++ - qt4/demos/metadata.cpp | 50 - ++++++++++++++++++++++++++++++++++++++++++++++ - qt4/demos/metadata.h | 43 +++++++++++++++++++++++++++++++++++++++ - qt4/demos/viewer.cpp | 7 ++++++ - 5 files changed, 104 insertions(+), 0 deletions(-) - -commit b6f0c8f83924c08be20b602b128651bf018172a3 -Author: Pino Toscano <pino@kde.org> -Date: Thu Feb 21 00:54:26 2008 +0100 - - Do not assign conflicting accelerators. - - qt4/demos/viewer.cpp | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit e0c27a968c7e7a0f6a89a050ddbfe328229f431d -Author: Pino Toscano <pino@kde.org> -Date: Thu Feb 21 00:53:24 2008 +0100 - - Apply the antialias settings w/o notify the observers. - - qt4/demos/viewer.cpp | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 2c6149abcecda15c6f73a1dee537072240ddd545 -Author: Pino Toscano <pino@kde.org> -Date: Thu Feb 21 00:51:21 2008 +0100 - - Add a settings menu to choose the render backend. - - qt4/demos/viewer.cpp | 28 ++++++++++++++++++++++++++++ - qt4/demos/viewer.h | 3 +++ - 2 files changed, 31 insertions(+), 0 deletions(-) - -commit db2b0778dca364751a1d22294be29f8c7799e2e9 -Author: Pino Toscano <pino@kde.org> -Date: Thu Feb 21 00:33:23 2008 +0100 - - Add a dock for showing the embedded files. - - TODO: show the checksum in a pretty format. - - qt4/demos/CMakeLists.txt | 1 + - qt4/demos/Makefile.am | 3 ++ - qt4/demos/embeddedfiles.cpp | 75 - +++++++++++++++++++++++++++++++++++++++++++ - qt4/demos/embeddedfiles.h | 43 ++++++++++++++++++++++++ - qt4/demos/viewer.cpp | 7 ++++ - 5 files changed, 129 insertions(+), 0 deletions(-) - -commit 51fba47ccb12a66282769fc504bac4c9f5123f75 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 17 01:49:59 2008 +0100 - - clear the page label when the document is closed - - qt4/demos/pageview.cpp | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit e964e2b9fbbe9b52b137ecd06729a06530835227 -Author: Michael Vrable <mvrable@cs.ucsd.edu> -Date: Tue Feb 19 23:22:55 2008 +0100 - - Allow grouped checkboxes to be selected individually. - - When checkboxes are in a group, they ought to behave like a - collection of - radio buttons. However, when deciding whether to draw a checkbox as - selected or not, the checkbox-drawing code was looking up the value - of the - V field in the form dictionary, which is shared among all checkboxes - in the - group. Thus, checkboxes would either all be on or off in unison. - - Instead, look up the AS (appearance state) value in each checkbox's - annotation dictionary, so that different checkboxes can be drawn - differently. - - poppler/Annot.cc | 6 ++---- - 1 files changed, 2 insertions(+), 4 deletions(-) - -commit 702fdd6c56b5369554c683d8c8e0e2c66e80886c -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Feb 19 00:18:04 2008 +0100 - - changes from gtk-doc - - glib/reference/tmpl/poppler-document.sgml | 1 + - glib/reference/tmpl/poppler-page.sgml | 2 +- - 2 files changed, 2 insertions(+), 1 deletions(-) - -commit 9e13b91ba38c20989d283588e73490a1601f5bb0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Feb 19 00:10:24 2008 +0100 - - distribute the headers too - - qt4/demos/Makefile.am | 11 ++++++++++- - 1 files changed, 10 insertions(+), 1 deletions(-) - -commit 194e0ced7c38514ec3126666531862e3b29b4b77 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Feb 18 23:34:06 2008 +0100 - - Fill NEWS and increase version number to 0.7 - - CMakeLists.txt | 2 +- - NEWS | 96 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - configure.ac | 2 +- - msvc/config.h | 6 ++-- - qt4/src/Doxyfile | 2 +- - 5 files changed, 102 insertions(+), 6 deletions(-) - -commit 3c407efe9f1f0cc3f6366d3a2b6e9b687656cc95 -Merge: 51f0cea 7f4acb8 -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 18 21:30:42 2008 +0100 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit 51f0cea0e3ba1acfc63877752e950fdd8c07e258 -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 18 21:29:41 2008 +0100 - - make the poppler_qt4viewer compile with the auto"tools" - - qt4/demos/Makefile.am | 16 ++++++++++++---- - 1 files changed, 12 insertions(+), 4 deletions(-) - -commit 7f4acb879d300e18dfaff768027c88195d7d8f1b -Author: Timothy Lee <timothy.lee@siriushk.com> -Date: Mon Feb 18 20:56:35 2008 +0100 - - Implement ImageOutputDev::drawMaskedImage and - ImageOutputDev::drawSoftMaskedImage so all images are exported when - using pdfimages - - utils/ImageOutputDev.cc | 19 +++++++++++++++++++ - utils/ImageOutputDev.h | 11 +++++++++++ - 2 files changed, 30 insertions(+), 0 deletions(-) - -commit 064b316648e35416bb49336639da1d8d288d1ecf -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Feb 18 20:17:37 2008 +0100 - - xref can be null so check for it before checking we went out of bounds - - Fixes bug 14549 - - poppler/Lexer.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit b287b611b1c7b7dd00e12518cee3a6c35044e161 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 17 01:21:07 2008 +0100 - - Really niptick: help menu with about dialog for us and Qt. - - qt4/demos/viewer.cpp | 15 +++++++++++++++ - qt4/demos/viewer.h | 2 ++ - 2 files changed, 17 insertions(+), 0 deletions(-) - -commit 6400254fdabf3d0d32f27ebd00faa6958be62019 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 17 01:12:27 2008 +0100 - - Add a title to the viewer :) - - qt4/demos/viewer.cpp | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit b363c0568c9c61e7ee8ed86d808f0eed0b93b525 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 17 01:09:57 2008 +0100 - - Add the possibility to save a copy of the file. - - qt4/demos/viewer.cpp | 29 +++++++++++++++++++++++++++++ - qt4/demos/viewer.h | 2 ++ - 2 files changed, 31 insertions(+), 0 deletions(-) - -commit 42987dcdd8d7432145f78cfc550f0c099e6e7311 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 17 00:33:01 2008 +0100 - - Add a Permissions dock. - - qt4/demos/CMakeLists.txt | 1 + - qt4/demos/Makefile.am | 1 + - qt4/demos/permissions.cpp | 77 - +++++++++++++++++++++++++++++++++++++++++++++ - qt4/demos/permissions.h | 43 +++++++++++++++++++++++++ - qt4/demos/viewer.cpp | 7 ++++ - 5 files changed, 129 insertions(+), 0 deletions(-) - -commit 9d1dda64de1d9e3f6fc81e40a0c2246a6270dfa8 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 16 23:56:17 2008 +0100 - - Add settings for antialias. - - qt4/demos/viewer.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ - qt4/demos/viewer.h | 4 ++++ - 2 files changed, 45 insertions(+), 0 deletions(-) - -commit 3abb8703d7d8b7a5fbcbb3c19d8e84d640abe88c -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 16 22:25:11 2008 +0100 - - Add a TOC info dock. - - qt4/demos/CMakeLists.txt | 1 + - qt4/demos/Makefile.am | 1 + - qt4/demos/toc.cpp | 90 - ++++++++++++++++++++++++++++++++++++++++++++++ - qt4/demos/toc.h | 43 ++++++++++++++++++++++ - qt4/demos/viewer.cpp | 7 ++++ - 5 files changed, 142 insertions(+), 0 deletions(-) - -commit 80925f06d125ebfc9909e36bdbe5d37fd0e48bdc -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 16 21:51:10 2008 +0100 - - Adapt the Fonts and Info docks to the new abstract info dock. - - qt4/demos/fonts.cpp | 10 +++------- - qt4/demos/fonts.h | 11 +++++------ - qt4/demos/info.cpp | 10 +++------- - qt4/demos/info.h | 11 +++++------ - 4 files changed, 16 insertions(+), 26 deletions(-) - -commit c03531d691e56aba2b4c6538cf9e2463e1e0aa29 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 16 21:43:19 2008 +0100 - - Introduce a base info dock for handling the "dirty" work. - - qt4/demos/CMakeLists.txt | 1 + - qt4/demos/Makefile.am | 1 + - qt4/demos/abstractinfodock.cpp | 57 - ++++++++++++++++++++++++++++++++++++++++ - qt4/demos/abstractinfodock.h | 48 +++++++++++++++++++++++++++++++++ - 4 files changed, 107 insertions(+), 0 deletions(-) - -commit 0f7d51c7fc2439ee9392c166576c341238f00f36 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 16 18:49:52 2008 +0100 - - Delete the poppler page after usage. - - qt4/demos/pageview.cpp | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit b41d069cdd1435ddb14b3de2986875069523c814 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 16 18:48:57 2008 +0100 - - Initialize the current page number correctly. - - qt4/demos/viewer.cpp | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 75e516af0e72a2e3041660300e522ad00869372b -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 16 18:43:56 2008 +0100 - - Add a side dock for showing the fonts of the document. - - qt4/demos/CMakeLists.txt | 1 + - qt4/demos/Makefile.am | 1 + - qt4/demos/fonts.cpp | 78 - ++++++++++++++++++++++++++++++++++++++++++++++ - qt4/demos/fonts.h | 44 ++++++++++++++++++++++++++ - qt4/demos/viewer.cpp | 7 ++++ - 5 files changed, 131 insertions(+), 0 deletions(-) - -commit 8e642d1cbd48d4790a6769287cbfd90c3bc9fc34 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 16 17:21:30 2008 +0100 - - Add a View menu where the dock widget toogle actions will be. - - As start, put the Info dock there. - - qt4/demos/viewer.cpp | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit c1feb7c2b5008cc04edb3c028f888072920ce4dc -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 16 17:14:00 2008 +0100 - - Add a side dock for showing the info keys. - - qt4/demos/CMakeLists.txt | 1 + - qt4/demos/Makefile.am | 1 + - qt4/demos/info.cpp | 78 - ++++++++++++++++++++++++++++++++++++++++++++++ - qt4/demos/info.h | 44 ++++++++++++++++++++++++++ - qt4/demos/viewer.cpp | 5 +++ - 5 files changed, 129 insertions(+), 0 deletions(-) - -commit abc9b00c6470f9f6b66c280455f544ad0ee3aa8c -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 16 16:09:52 2008 +0100 - - Basic work in the demo PDF viewer, open documents and navigate into - the pages. - - An observer structure was introduced, so extra components can be - easily added and made aware of the document/page changes. - Both the navigation toolbar and the page view are implemented as - observers. - - qt4/demos/CMakeLists.txt | 3 + - qt4/demos/Makefile.am | 3 + - qt4/demos/documentobserver.cpp | 45 ++++++++++++++++++ - qt4/demos/documentobserver.h | 49 +++++++++++++++++++ - qt4/demos/navigationtoolbar.cpp | 98 - +++++++++++++++++++++++++++++++++++++++ - qt4/demos/navigationtoolbar.h | 56 ++++++++++++++++++++++ - qt4/demos/pageview.cpp | 60 ++++++++++++++++++++++++ - qt4/demos/pageview.h | 44 +++++++++++++++++ - qt4/demos/viewer.cpp | 98 - +++++++++++++++++++++++++++++++++++++- - qt4/demos/viewer.h | 17 +++++++ - 10 files changed, 470 insertions(+), 3 deletions(-) - -commit 14c88853a5675f40efb72f3ef01f49eb06ab846c -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 16 00:32:30 2008 +0100 - - Compile the poppler_qt4viewer. - - qt4/demos/CMakeLists.txt | 7 +++++++ - qt4/demos/Makefile.am | 12 ++++++++++-- - 2 files changed, 17 insertions(+), 2 deletions(-) - -commit aeb591f015d5e7a2643ed75d872358d2b1256b99 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 16 00:31:46 2008 +0100 - - Add a very minimal base PDF viewer. - - So minimal that it does nothing at the moment... - - qt4/demos/main_viewer.cpp | 29 ++++++++++++++++++++++++++++ - qt4/demos/viewer.cpp | 46 - +++++++++++++++++++++++++++++++++++++++++++++ - qt4/demos/viewer.h | 45 - ++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 120 insertions(+), 0 deletions(-) - -commit 8da490b090487c4c37290b63bdc9abcfaf6d6940 -Author: Pino Toscano <pino@kde.org> -Date: Fri Feb 15 23:59:39 2008 +0100 - - Add a skeleton of directory where PopplerQt4 demos will be. - - configure.ac | 1 + - qt4/CMakeLists.txt | 1 + - qt4/Makefile.am | 2 +- - qt4/demos/CMakeLists.txt | 10 ++++++++++ - qt4/demos/Makefile.am | 20 ++++++++++++++++++++ - 5 files changed, 33 insertions(+), 1 deletions(-) - -commit e24b49d52a5c1716641695ee731dd49848a114d9 -Author: Pino Toscano <pino@kde.org> -Date: Thu Feb 14 22:21:54 2008 +0100 - - do not print it as string - - qt4/src/poppler-private.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 2316455864e9c900c08d051c59b9508eddcb7c34 -Author: Pino Toscano <pino@kde.org> -Date: Thu Feb 14 21:02:20 2008 +0100 - - Pipe the poppler error messages through the Qt debug system. - - qt4/src/poppler-private.cc | 21 +++++++++++++++++++++ - qt4/src/poppler-private.h | 8 +++++++- - 2 files changed, 28 insertions(+), 1 deletions(-) - -commit d985d3b0cdc57370137865add2a5f3a7802109c7 -Author: Pino Toscano <pino@kde.org> -Date: Thu Feb 14 14:56:18 2008 +0100 - - Use what FormWidgetText give us. - - qt4/src/poppler-form.cc | 13 +++---------- - 1 files changed, 3 insertions(+), 10 deletions(-) - -commit a69bd442e52f4495f8d6bfd3bb58b3ebd1be1a63 -Author: Michael Vrable <mvrable@cs.ucsd.edu> -Date: Thu Feb 14 12:52:22 2008 +0100 - - Provide Unicode mappings for some control characters in - PDFDocEncoding. - - Though they do not represent glyphs, values such as carriage return - can be - found in text strings in PDFDocEncoding. Provide mappings for - these bytes - to Unicode. - - Additionally, map unknown characters to U+FFFD instead of U+0000, - so that - unknown characters do not result in nulls (which can truncate strings - early, particularly if the string is later re-encoded into - null-terminated - UTF-8). - - poppler/PDFDocEncoding.cc | 23 +++++++++++++++++------ - 1 files changed, 17 insertions(+), 6 deletions(-) - -commit ce17383e0ed21770b471e88f25046a64a23e7e45 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Feb 13 20:56:39 2008 +0100 - - Yet another fix for buggy documents, do not use the cache if the - cache could not be created because it ought to be too big - - Fixes http://bugs.kde.org/show_bug.cgi?id=157777 - - splash/SplashFont.cc | 48 - ++++++++++++++++++++++++++++-------------------- - 1 files changed, 28 insertions(+), 20 deletions(-) - -commit 15a61cac718ae8cbf83911e299b4cfdd24cdf178 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 13 20:55:18 2008 +0100 - - add images.c - - glib/demo/CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 9cfe10ab7f51d329647e102e446baaef043d8cc6 -Merge: e918729 7d65b4d -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 13 20:53:43 2008 +0100 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit 7d65b4da1bc060aeb94d67c2ff26912cef48c030 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Feb 13 20:32:43 2008 +0100 - - Add images demo - - glib/demo/Makefile.am | 2 + - glib/demo/images.c | 338 - +++++++++++++++++++++++++++++++++++++++++++++++++ - glib/demo/images.h | 31 +++++ - glib/demo/main.c | 4 +- - 4 files changed, 374 insertions(+), 1 deletions(-) - -commit e9187292701e72db1020f7701d0725d83eee4b00 -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 13 19:41:57 2008 +0100 - - Do the one-time initialisation in initTestCase(). - - qt4/tests/check_dateConversion.cpp | 8 ++++++-- - 1 files changed, 6 insertions(+), 2 deletions(-) - -commit fb996c46e3c6b56a2c67819620000bcd804aacd6 -Author: Michael Vrable <mvrable@cs.ucsd.edu> -Date: Wed Feb 13 18:44:41 2008 +0100 - - Major rework of text display in form fields code. - - This adds support for UTF-16 strings as input, and will recode them - to the - appropriate character set for the font. - - The method Annot::layoutText packs a lot of functionality together, - but I - couldn't see a good way to split it apart. It will convert an - input text - string from PDFDocEncoding or UTF-16 (encoding is autodetected) to the - appropriate encoding for the font which will be used to display - the form - field. At the same time, it can compute the width of the resulting - string, - and optionally break the string at a specified width to aid in - wrapping - multi-line text. Text wrapping is integrated with encoding conversion - since wrapping is easiest with the original text (where spaces - and newlines - are easily identified), but text widths can only be computed after - re-encoding. - - Support for composite fonts is included, so long as those fonts use an - identity CMap, but this is still untested. Support for more - complex CMaps - is missing. - - The rewrite also includes a minor improvement to the formatting - of comb - fields; characters are now centered in the comb cells. - - poppler/Annot.cc | 507 - ++++++++++++++++++++++++++++++++++-------------------- - poppler/Annot.h | 9 +- - 2 files changed, 327 insertions(+), 189 deletions(-) - -commit 88c780aed4c9855f879e3c7a9f82500a859635a2 -Author: Michael Vrable <mvrable@cs.ucsd.edu> -Date: Wed Feb 13 18:42:49 2008 +0100 - - Fix what look to be a few bugs in functions for mapping to/from - Unicode. - - - Endianness fix in pdfDocEncodingToUTF16 (previously looked to - assume a - little-endian processor) - - Add support for CharCodeToUnicode::mapToCharCode for Unicode - codepoints - above 255. - - poppler/CharCodeToUnicode.cc | 4 ++-- - poppler/Form.cc | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - -commit 7574cb71f24ce5b32427f243c39b6029fb58ec81 -Merge: e798802 4e45e5c -Author: Pino Toscano <pino@kde.org> -Date: Wed Feb 13 01:07:31 2008 +0100 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit 4e45e5ca4ab0ba2a6586505d80ed81f4b3426752 -Author: Patrick Spendrin <ps_ml@gmx.de> -Date: Tue Feb 12 21:41:26 2008 +0100 - - Do the right thing with CDECL, that is, undefine it if it is defined - so we can redefine it later - - poppler-config.h.cmake | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit e798802f00bff0a24ee6d1312d6c62624395865a -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 12 20:57:56 2008 +0100 - - Apidox fix: state which checksum is returned (if available). - - qt4/src/poppler-qt4.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 4e2ba70a88c40fef6775053b1cc5fa30e622cea7 -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 12 11:25:34 2008 +0100 - - Free the Object after you use it. - - poppler/Annot.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 039545fcd2c12631c7b8aea89c35f36cb387a17a -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 12 11:13:27 2008 +0100 - - Return the siblings even for checkboxes. - - qt4/src/poppler-form.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit fe5ee75cdf3e11e314318af12edf9d5bc8986250 -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 12 11:12:01 2008 +0100 - - Initialize correctly; free your memory. - - poppler/Form.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit e0eff92c7067d43faa8e93baed1f061863111251 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Feb 11 20:32:41 2008 +0100 - - Update the field dict instead of the annot dict for non composed dicts - - We were always updating the annot dictionary, adding or updating - the V field. While this is correct for composed dicts (annot + field) - it isn't for non composed ones since the annot dictionary doesn't - contain any V field because it's a field of the form field dictionary. - In these cases the form field is not correctly updated and if the - document is saved it will be wrong. - - poppler/Form.cc | 44 +++++++++++++++++++++++++++++++------------- - poppler/Form.h | 2 ++ - 2 files changed, 33 insertions(+), 13 deletions(-) - -commit 905e6da9795fee94329022c0cafbc229055fd4f6 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Feb 10 19:22:50 2008 +0100 - - Move forms specific draw methods from Annot to AnnotWidget class - - poppler/Annot.cc | 3433 - +++++++++++++++++++++++++++--------------------------- - poppler/Annot.h | 87 +- - poppler/Form.cc | 39 +- - poppler/Form.h | 2 + - poppler/Page.cc | 9 +- - 5 files changed, 1765 insertions(+), 1805 deletions(-) - -commit 78afbc4d7819654e8742d4457c9847ad02b73bf1 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Feb 10 17:12:59 2008 +0100 - - Some code refactoring and cleanup - - - Unused 'field' attribute in FormWidget class is now used and - getField() method has been added - - Method isReadOnly() in FormWidget class is not virtual anymore - but implemented in the base class - - Unused attribute 'catalog' in Form class has been removed and - 'acroForm' has been added instead with a getObj() method to get it. - - createFieldFromDict() method is now static - - poppler/Form.cc | 128 - ++++++++++++++++++++++++++++--------------------------- - poppler/Form.h | 41 ++++++++--------- - 2 files changed, 84 insertions(+), 85 deletions(-) - -commit 5f8e2f9140ee2ede841700726b974768ec863672 -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 11 20:16:44 2008 +0100 - - Use QVarLengthArray instead of relying on gcc-ism. - - qt4/src/poppler-page.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 7499764d382366823519aa13a38e1e44781c78af -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 11 11:57:50 2008 +0100 - - Add FormFieldButton::siblings(). - - This is needed for grouping together the radio buttons. - - qt4/src/poppler-form.cc | 14 ++++++++++++++ - qt4/src/poppler-form.h | 8 ++++++++ - 2 files changed, 22 insertions(+), 0 deletions(-) - -commit 85bfa4f499a90d45b13df4d0a8760a7da6fc1532 -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 11 02:40:37 2008 +0100 - - Small apidox fix. - - qt4/src/poppler-form.h | 11 ++--------- - 1 files changed, 2 insertions(+), 9 deletions(-) - -commit ada05055c91e967dc3e2af32a2176dd12cb7fe70 -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 11 02:27:19 2008 +0100 - - Preliminary support for "button" form fields (ie, push buttons, - check boxes, and radio buttons). - - qt4/src/poppler-form.cc | 55 - +++++++++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-form.h | 54 - ++++++++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-page.cc | 6 +++++ - 3 files changed, 115 insertions(+), 0 deletions(-) - -commit 278b33f25df418ef12798100002845a3e2ceebd3 -Merge: c730b33 fdb0a4a -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 11 00:57:24 2008 +0100 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit fdb0a4a2f1d86aec7a3b0fcd4b4d48455791ecad -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Feb 10 18:47:40 2008 -0500 - - Avoid prescaling images when printing. - - Adds a function for letting the CairoOutputDev know whether it is - targetting a - screen or not. It then uses this knowledge to avoid prescaling - images. This way - cairo gets the full resolution image for use in the printed output. - - glib/poppler-page.cc | 1 + - poppler/CairoOutputDev.cc | 3 ++- - poppler/CairoOutputDev.h | 2 ++ - 3 files changed, 5 insertions(+), 1 deletions(-) - -commit c730b33f1ec2032c4b8c2660738448d954eb0f7d -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 11 00:46:20 2008 +0100 - - Keep the EmbFile object, and use this for getting the data. - - qt4/src/poppler-embeddedfile.cc | 33 +++++++++++---------------------- - qt4/src/poppler-private.h | 1 - - 2 files changed, 11 insertions(+), 23 deletions(-) - -commit 5915e57e7785370ce305cbbb3c2fedf36886689f -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 10 03:19:18 2008 +0100 - - const & in foreach - - qt4/tests/poppler-fonts.cpp | 2 +- - qt4/tests/stress-poppler-dir.cpp | 2 +- - qt4/tests/stress-poppler-qt4.cpp | 2 +- - qt4/tests/test-password-qt4.cpp | 2 +- - qt4/tests/test-poppler-qt4.cpp | 2 +- - 5 files changed, 5 insertions(+), 5 deletions(-) - -commit d8374e0c2eb3ba05be101687e20c5fcbc42c1ad0 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 10 01:32:24 2008 +0100 - - Include only what needed; remove extra includes. - - qt4/tests/poppler-attachments.cpp | 4 +++- - qt4/tests/poppler-fonts.cpp | 4 +++- - qt4/tests/stress-poppler-dir.cpp | 9 ++++++--- - qt4/tests/stress-poppler-qt4.cpp | 9 ++++++--- - qt4/tests/test-password-qt4.cpp | 10 ++++++---- - qt4/tests/test-poppler-qt4.cpp | 12 ++++++++---- - 6 files changed, 32 insertions(+), 16 deletions(-) - -commit fa01a1115c4554b18c3462b568d76860d2fbe17b -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 10 01:09:57 2008 +0100 - - Comment out unused vars. - - utils/pdftoabw.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit d3275e4263372b534c276f81d0c997ecb6675487 -Merge: c2186c1 5347a97 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 9 23:57:03 2008 +0100 - - Merge branch 'master' of - ssh://aacid@git.freedesktop.org/git/poppler/poppler - -commit c2186c1829c695c4ddb6c471ef8ad4ffa23c1b70 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 9 23:56:32 2008 +0100 - - Only check if we are out of bounds if the object we are searching - for has a known id (0 also means not known) - - Found by Michael Vrable - - poppler/Lexer.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 5347a97e39388ae38cf2ab9c67f953b0f7a02a13 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 9 18:26:41 2008 +0100 - - Add the operators for the flags we have. - - qt4/src/poppler-qt4.h | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 329ade4f936bf063539cdc887aaf9a1722a5b8e0 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 9 18:23:59 2008 +0100 - - Add options for the PDF export; add the WithChanges flag for saving - the changes to the document as well. - - qt4/src/poppler-pdf-converter.cc | 25 +++++++++++++++++++++++-- - qt4/src/poppler-qt4.h | 14 ++++++++++++++ - 2 files changed, 37 insertions(+), 2 deletions(-) - -commit afb255366d56551bdc307766199bef9c5021d3ac -Merge: 8c44b17 8cb0e75 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 9 17:58:49 2008 +0100 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit 8c44b175081983c492821858341109fee9e86b16 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 9 17:57:57 2008 +0100 - - Do not rely on GNU extensions, but at least use Qt. - - qt4/src/poppler-qiodeviceoutstream.cc | 11 ++++------- - 1 files changed, 4 insertions(+), 7 deletions(-) - -commit 8cb0e75203daa01439413d1a775482b48e784baa -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 9 17:56:13 2008 +0100 - - Domain order is x_min x_max y_min y_max and not x_min y_min x_max - y_max - - poppler/GfxState.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit c8f734ba4258059fa4521a4d364f62ca1632840b -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 9 13:37:04 2008 +0100 - - PS cos and sin input values are degrees so convert to radians so we - can use the cos and sin cmath functions - - poppler/Function.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 5fb0c9d31c1abf2e6ad306c112fbd2a7c33d8772 -Merge: 2655663 2255c85 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Feb 9 13:15:15 2008 +0100 - - Merge branch 'master' of - ssh://carlosgc@git.freedesktop.org/git/poppler/poppler - -commit 26556636e71d5abcbfdd1373f5576d1233532cf8 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Feb 9 13:14:41 2008 +0100 - - Add saveWithoutChangesAs method to be able to save the document - ignoring changes made in forms or annots - - glib/poppler-document.cc | 41 ++++++++++++++++++++++++++++++++++++++++- - glib/poppler-document.h | 3 +++ - poppler/PDFDoc.cc | 38 ++++++++++++++++++++++++++++++++------ - poppler/PDFDoc.h | 4 ++++ - 4 files changed, 79 insertions(+), 7 deletions(-) - -commit 2255c85e4939a0752083dca21984ff4398baf8d2 -Merge: 5ba9287 56c9246 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 9 12:49:45 2008 +0100 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit 5ba928762471e1ea8b81acd4644dfd3f58d18f77 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 9 12:48:04 2008 +0100 - - Fix placeholders in printf-like functions. - - glib/demo/page.c | 2 +- - glib/test-poppler-glib.cc | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 56c924609223196c5c41b9e6d9102bc248bad947 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 9 12:26:06 2008 +0100 - - atan operator must yield a degrees result between 0 and 360 - - See testcase at http://bugs.kde.org/show_bug.cgi?id=157497 - - poppler/Function.cc | 6 ++++-- - 1 files changed, 4 insertions(+), 2 deletions(-) - -commit 2a39932ae35a2716842bd2a1c3d4f9ce6b1e3dd8 -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 9 01:31:20 2008 +0100 - - Few improvements to the password test. - - - QString::fromUtf8() instead of QFile::encodeName() to correctly - pass the utf8 filenames - - QVERIFY(!foo) instead of QCOMPARE(foo, false) - - QVERIFY() also the return value of unlock() - - qt4/tests/check_password.cpp | 31 ++++++++++++++++--------------- - 1 files changed, 16 insertions(+), 15 deletions(-) - -commit cc9c124d4d859b845eebf4ca1e4397870a35fd4e -Author: Pino Toscano <pino@kde.org> -Date: Sat Feb 9 01:09:02 2008 +0100 - - Add an unit test case for few invalid dates. - - qt4/tests/check_dateConversion.cpp | 34 - ++++++++++++++++++++++++++++++++++ - 1 files changed, 34 insertions(+), 0 deletions(-) - -commit eca91761741de5b340f7a2160db5b33401feb935 -Author: Pino Toscano <pino@kde.org> -Date: Fri Feb 8 18:42:14 2008 +0100 - - Remove unneeded headers. - - qt4/src/poppler-page.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 899627505a4645fb1cc7d3599adbeec449c57041 -Author: Pino Toscano <pino@kde.org> -Date: Fri Feb 8 18:41:13 2008 +0100 - - The return value is QString, so return QString's... - - qt4/src/poppler-document.cc | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit a1606fa4ff438983e3a7f55dd2d10a66f72e6711 -Author: Pino Toscano <pino@kde.org> -Date: Fri Feb 8 17:31:32 2008 +0100 - - Move checkDocument() inside the private class. - - qt4/src/poppler-document.cc | 6 +++--- - qt4/src/poppler-private.h | 2 ++ - qt4/src/poppler-qt4.h | 2 +- - 3 files changed, 6 insertions(+), 4 deletions(-) - -commit f1ec70a83f807493dab5118761df31c0f67decad -Author: Pino Toscano <pino@kde.org> -Date: Fri Feb 8 17:26:41 2008 +0100 - - Remove C-ism. - - qt4/src/poppler-document.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 3e994e8586fa1c87ef7e7f82af1cdacf2cd36310 -Author: Pino Toscano <pino@kde.org> -Date: Fri Feb 8 12:21:56 2008 +0100 - - Add the missing font types. - - qt4/src/poppler-fontinfo.cc | 11 +++++++++-- - 1 files changed, 9 insertions(+), 2 deletions(-) - -commit ba07963f85d777a441349e23d4c2f510e45c73be -Author: Pino Toscano <pino@kde.org> -Date: Fri Feb 8 12:19:04 2008 +0100 - - Be safe against self-assignment. - - qt4/src/poppler-fontinfo.cc | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 834b86548e09f4b24cdb2f194299d053b9b55022 -Author: Pino Toscano <pino@kde.org> -Date: Fri Feb 8 12:15:16 2008 +0100 - - Small apidox fix. - - qt4/src/poppler-qt4.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 11a61eac5b8cde04bf762bbbe0deab5c0bd52951 -Author: Pino Toscano <pino@kde.org> -Date: Fri Feb 8 02:21:32 2008 +0100 - - Pack few bools together. - - qt4/src/poppler-annotation.cc | 8 ++++---- - qt4/src/poppler-link.cc | 10 +++++----- - qt4/src/poppler-private.h | 4 ++-- - 3 files changed, 11 insertions(+), 11 deletions(-) - -commit 1aeba15b5eb9b30943259824678ebc9e4f56e870 -Merge: a489063 22d10c1 -Author: Pino Toscano <pino@kde.org> -Date: Fri Feb 8 01:39:16 2008 +0100 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit a4890637a2c2ab1623311d9a6920e82131c2597c -Author: Pino Toscano <pino@kde.org> -Date: Fri Feb 8 01:36:56 2008 +0100 - - Move QStringToUnicodeGooString() and QStringToGooString() to the - private module. - - qt4/src/poppler-document.cc | 10 ---------- - qt4/src/poppler-form.cc | 15 --------------- - qt4/src/poppler-private.cc | 25 +++++++++++++++++++++++++ - qt4/src/poppler-private.h | 4 ++++ - 4 files changed, 29 insertions(+), 25 deletions(-) - -commit 5e44241c4976b819f7be6badd2d183fbfb8ee6de -Author: Pino Toscano <pino@kde.org> -Date: Fri Feb 8 01:30:07 2008 +0100 - - Move the string functions implementation in a .cc file. - - qt4/src/CMakeLists.txt | 1 + - qt4/src/Makefile.am | 1 + - qt4/src/poppler-private.cc | 70 - ++++++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-private.h | 46 ++-------------------------- - 4 files changed, 76 insertions(+), 42 deletions(-) - -commit 124d92139241ad95da559d22af48254b45ac4a2e -Author: Pino Toscano <pino@kde.org> -Date: Fri Feb 8 01:07:43 2008 +0100 - - Include own header first, remove extra includes. - - qt4/src/poppler-document.cc | 1 - - qt4/src/poppler-embeddedfile.cc | 3 ++- - qt4/src/poppler-form.cc | 4 +++- - qt4/src/poppler-link-extractor-private.h | 2 ++ - qt4/src/poppler-link-extractor.cc | 7 +++++-- - qt4/src/poppler-page-private.h | 6 +++++- - qt4/src/poppler-private.h | 4 +++- - qt4/src/poppler-qt4.h | 2 -- - qt4/src/poppler-sound.cc | 4 ++-- - 9 files changed, 22 insertions(+), 11 deletions(-) - -commit 22d10c19e232dea143bda372c92aa12b999e4921 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Feb 7 23:38:50 2008 +0100 - - PDF spec says name tokens have a maximum length of 127, but there are - some docs in the wild with more than that and they work on acroread - so increase the allowed length to 128+127 - - poppler/Lexer.cc | 25 +++++++++++++++++++++---- - 1 files changed, 21 insertions(+), 4 deletions(-) - -commit ee9f85915feb86b54ace1a403baa13bbdd7c3966 -Author: Pino Toscano <pino@kde.org> -Date: Thu Feb 7 18:07:53 2008 +0100 - - Having a PageData is mandatory. - - Just assert when constructing instead of checking for it in each - link iteration. - - qt4/src/poppler-link-extractor.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit ad4b1361f6c25359e6ddb38599bfc1e4e3e80408 -Author: Pino Toscano <pino@kde.org> -Date: Thu Feb 7 18:03:30 2008 +0100 - - Precalc stuff we don't need to recalc in each link iteration. - - qt4/src/poppler-link-extractor-private.h | 3 ++- - qt4/src/poppler-link-extractor.cc | 14 ++++++++------ - 2 files changed, 10 insertions(+), 7 deletions(-) - -commit 82432dbc62a0879f4513640c2e0f594fda9347ad -Author: Pino Toscano <pino@kde.org> -Date: Thu Feb 7 17:51:50 2008 +0100 - - Store the ::Page internally, so we don't need to get it again - everytime. - - qt4/src/poppler-page-private.h | 3 +++ - qt4/src/poppler-page.cc | 37 - ++++++++++++++----------------------- - 2 files changed, 17 insertions(+), 23 deletions(-) - -commit 8ec51f7ca518aa6a4a69f30d373722d05f50cf07 -Author: Pino Toscano <pino@kde.org> -Date: Thu Feb 7 16:48:16 2008 +0100 - - Compile the stress-poppler-dir test as well. - - qt4/tests/CMakeLists.txt | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 8a946b76ae2e7c2c5238b4e580c1c226eb457dc9 -Author: Pino Toscano <pino@kde.org> -Date: Thu Feb 7 01:07:28 2008 +0100 - - Micro-touches to the debug messages. - - qt4/src/poppler-page.cc | 26 +++++++++++++------------- - 1 files changed, 13 insertions(+), 13 deletions(-) - -commit c31990dfe50c7a0e3999e6d967699fce5ccb3339 -Merge: 7701e2a 6d58cda -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 5 00:38:00 2008 +0100 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit 7701e2a5c7d18fdaa0fa40c190e6ee0524746046 -Author: Pino Toscano <pino@kde.org> -Date: Tue Feb 5 00:37:01 2008 +0100 - - Add a AnnotColor -> QColor conversion method. - - qt4/src/poppler-annotation-helper.h | 6 ++++++ - qt4/src/poppler-annotation.cc | 31 - +++++++++++++++++++++++++++++++ - 2 files changed, 37 insertions(+), 0 deletions(-) - -commit 6d58cda82b0181f2cca6e9d95b15877793be0812 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Feb 4 23:33:51 2008 +0100 - - Protect us against weird dateString values - - qt4/src/poppler-document.cc | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit aa0435f1544fe1adcf10173e34eaeaf2a7a703c7 -Merge: b43f4e9 37600b5 -Author: Pino Toscano <pino@kde.org> -Date: Mon Feb 4 20:56:53 2008 +0100 - - Merge branch 'master' of - ssh://pino@git.freedesktop.org/git/poppler/poppler - -commit 37600b5e848386d2c92c3dff8219c9dda16b0dca -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sun Feb 3 22:42:51 2008 +0100 - - Minor changes to Annot related stuff. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 15 ++++----------- - poppler/Annot.h | 12 ++++++++++-- - poppler/Gfx.cc | 7 ++++--- - poppler/Page.cc | 9 +++++++++ - poppler/Page.h | 3 +++ - 5 files changed, 30 insertions(+), 16 deletions(-) - -commit b43f4e9a161a1fd7b827244dc21b1bd2a6df7054 -Author: Pino Toscano <pino@kde.org> -Date: Sun Feb 3 20:32:15 2008 +0100 - - Pass the DocumentData to the Page (simplify a bit some code). - - qt4/src/poppler-document.cc | 2 +- - qt4/src/poppler-link-extractor-private.h | 4 +- - qt4/src/poppler-link-extractor.cc | 8 ++-- - qt4/src/poppler-page-private.h | 4 +- - qt4/src/poppler-page.cc | 64 - +++++++++++++++--------------- - qt4/src/poppler-qt4.h | 5 +- - 6 files changed, 42 insertions(+), 45 deletions(-) - -commit 4e0bb0307fccefc21f74a4c5a3a0d7e8e687b550 -Author: Pino Toscano <pino@draco.(none)> -Date: Sat Feb 2 12:57:25 2008 +0100 - - Fix include guard. - - poppler/ArthurOutputDev.h | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 6f11ef660540fd13aad1350385beb90758ca86af -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Feb 1 23:55:37 2008 +0100 - - Fix for end condition, init ucode to 0 - - poppler/GfxFont.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 1da2091807ae7f7d4d3f446953c41b4c440d4b1b -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jan 31 23:52:20 2008 +0100 - - Ensure we don't draw outside the main bitmap on - SplashOutputDev::setSoftMask - - Fixes crash on http://bugs.kde.org/show_bug.cgi?id=157000 - - poppler/SplashOutputDev.cc | 8 ++++++-- - 1 files changed, 6 insertions(+), 2 deletions(-) - -commit ecabc9469b137e8251344e5502de1cbf875223b9 -Author: Pino Toscano <pino@kde.org> -Date: Thu Jan 31 00:20:55 2008 +0100 - - Set RelWithDebInfo as default build type, if not specified. - - cmake/modules/PopplerMacros.cmake | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 19da87a20b3906523a330e3c956903a58a3ede7f -Author: Pino Toscano <pino@kde.org> -Date: Thu Jan 31 00:11:58 2008 +0100 - - Support the different CMake build modes. - - Now you can specify (using -DCMAKE_BUILD_TYPE=type) a CMake build - type to have GCC or ICC w/ tuned C(XX)FLAGS. - The supported build types are: None (as in no type is specified on - command line), RelWithDebInfo, Release, Debug, DebugFull, Profile. - - CMakeLists.txt | 7 ------- - cmake/modules/PopplerMacros.cmake | 29 +++++++++++++++++++++++++++++ - 2 files changed, 29 insertions(+), 7 deletions(-) - -commit 37d2055137c310ceb217164a76814b188be3b1b2 -Author: Pino Toscano <pino@draco.(none)> -Date: Wed Jan 30 23:12:03 2008 +0100 - - Introduce the CMake-based build system. - - Mostly works nicely as the autotools, and it mimics (almost) all - the autotools behaviours. - Copied some scripts from the KDE cmake scripts (BSD-licensed). - TODO: gtk-doc. - - CMakeLists.txt | 390 +++++++ - ConfigureChecks.cmake | 47 + - cmake/modules/COPYING-CMAKE-SCRIPTS | 22 + - cmake/modules/FindCairo.cmake | 44 + - cmake/modules/FindFontconfig.cmake | 47 + - cmake/modules/FindFreetype.cmake | 74 ++ - cmake/modules/FindGTK.cmake | 70 ++ - cmake/modules/FindPackageHandleStandardArgs.cmake | 58 + - cmake/modules/FindQt3.cmake | 319 +++++ - cmake/modules/FindQt4.cmake | 1295 - +++++++++++++++++++++ - cmake/modules/MacroBoolTo01.cmake | 20 + - cmake/modules/MacroEnsureVersion.cmake | 117 ++ - cmake/modules/MacroOptionalFindPackage.cmake | 28 + - cmake/modules/MacroPushRequiredVars.cmake | 47 + - cmake/modules/PopplerDefaults.cmake | 10 + - cmake/modules/PopplerMacros.cmake | 83 ++ - config.h.cmake | 149 +++ - glib/CMakeLists.txt | 107 ++ - glib/demo/CMakeLists.txt | 17 + - glib/poppler-features.h.cmake | 24 + - poppler-cairo.pc.cmake | 9 + - poppler-config.h.cmake | 160 +++ - poppler-glib.pc.cmake | 13 + - poppler-qt.pc.cmake | 12 + - poppler-qt4.pc.cmake | 12 + - poppler-splash.pc.cmake | 9 + - poppler.pc.cmake | 11 + - qt/CMakeLists.txt | 33 + - qt4/CMakeLists.txt | 2 + - qt4/src/CMakeLists.txt | 43 + - qt4/tests/CMakeLists.txt | 47 + - test/CMakeLists.txt | 52 + - utils/CMakeLists.txt | 84 ++ - 33 files changed, 3455 insertions(+), 0 deletions(-) - -commit 1ea831d3eee6eda35fadfb3c75962a0c708e6c7b -Author: Pino Toscano <pino@kde.org> -Date: Wed Jan 30 22:17:38 2008 +0100 - - Preprocessor #warning is GCC-specific. - - poppler/ArthurOutputDev.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 4c738cc6bd51f9d9e23ba83949c490c5c8691345 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jan 29 23:45:52 2008 +0100 - - Scale text to match 'm' size - - Fixes bug 12304 - - poppler/SplashOutputDev.cc | 37 +++++++++++++++++++++++++++++ - splash/SplashFTFont.cc | 55 - +++++++++++++++++++++++++++++++++++++++++++- - splash/SplashFTFont.h | 4 +++ - splash/SplashFont.h | 4 +++ - splash/SplashFontFile.cc | 1 + - splash/SplashFontFile.h | 2 + - 6 files changed, 102 insertions(+), 1 deletions(-) - -commit 64f16cf6ebf2870852fe8d937b25be58869ad40a -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jan 29 23:41:15 2008 +0100 - - Enable antialias by default on the test tool - - qt4/tests/test-poppler-qt4.cpp | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 90f0e6bc1e96d9f1666cb8476a92e127f5b927d4 -Author: Jonathan Kew <jonathan_kew@sil.org> -Date: Tue Jan 29 20:23:08 2008 +0100 - - Provide gstrndup as a portable substitue of strndup - - configure.ac | 1 - - goo/gmem.cc | 7 +++++++ - goo/gmem.h | 5 +++++ - poppler/GfxFont.cc | 8 +------- - 4 files changed, 13 insertions(+), 8 deletions(-) - -commit 77b91c852ad3d5554afc03aee92a1d928f233401 -Merge: 0babb0e 0533696 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jan 28 20:44:34 2008 +0100 - - Merge branch 'master' of - ssh://aacid@git.freedesktop.org/git/poppler/poppler - -commit 0babb0eb1afa343fb12a3fd037b98d2d1c794a1c -Author: Jonathan Kew <jonathan_kew@sil.org> -Date: Mon Jan 28 20:42:44 2008 +0100 - - Introduce a check for strndup and alternative for systems without it - - configure.ac | 1 + - poppler/GfxFont.cc | 6 ++++++ - 2 files changed, 7 insertions(+), 0 deletions(-) - -commit 053369678963206a4afa88a614de1994872c7c5a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jan 27 19:36:28 2008 +0100 - - Add ok_to_fill_form permission flag - - glib/poppler-document.cc | 2 ++ - glib/poppler-document.h | 3 ++- - glib/test-poppler-glib.cc | 21 +++++++++++++++++++-- - 3 files changed, 23 insertions(+), 3 deletions(-) - -commit 3085a9495ad87a54758da0024372610fdaf88d57 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Jan 27 19:15:34 2008 +0100 - - Fix slice rendering in poppler glib demo - - glib/demo/render.c | 41 ++++++++++++++++++++++++----------------- - 1 files changed, 24 insertions(+), 17 deletions(-) - -commit 7ad6c4ba110b970516d5380444a03ae217496ddf -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jan 24 21:14:44 2008 +0100 - - Incrementing the iterator would be a good idea - - qt4/src/poppler-annotation.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 7c99ec4635a4971321bbead7d1bc723da59b755e -Author: Julien Rebetez <julien@fhtagn.net> -Date: Thu Jan 24 19:18:15 2008 +0100 - - Revert unwanted change on Dict, fix leak on writeTrailer - - poppler/Dict.cc | 2 +- - poppler/PDFDoc.cc | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -commit 2335fb6034d2e9ec304abba400119b88302b3160 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 23 23:26:20 2008 +0100 - - Draw underlined Links correctly - - See http://bugs.kde.org/show_bug.cgi?id=151359 for an example - - poppler/Gfx.cc | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit 96c532ea4b56a147de1deb965126e31f87df588b -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jan 23 13:30:12 2008 +0100 - - Fix memory leak - - poppler/Form.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 6bca64407c675ca837f83a12c0f655f975f14407 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jan 23 13:27:45 2008 +0100 - - Make sure default values are not loaded more than once for the - same widget. - - poppler/Form.cc | 18 +++++++++++++++++- - poppler/Form.h | 1 + - 2 files changed, 18 insertions(+), 1 deletions(-) - -commit eccf84b51a1cf5d478c0ec84be3fc9be8e458f4f -Author: Pino Toscano <pino@kde.org> -Date: Tue Jan 22 23:28:16 2008 +0100 - - Refactor the PSConverter and add a PDFConverter (for PDF export/save). - - Add an OutStream subclass to redirect the output to a QIODevice. - Split the PSConverter in a base class (BaseConverter) w/ d_ptr - structure. - Add a new PDFConverter that inherit BaseConverter, and do the - actual export - making use of the new QIODeviceOutStream. - The BaseConverter now handles automatically file or QIODevice output. - - qt4/src/Makefile.am | 5 + - qt4/src/poppler-base-converter.cc | 99 ++++++++++++++++ - qt4/src/poppler-converter-private.h | 48 ++++++++ - qt4/src/poppler-document.cc | 5 + - qt4/src/poppler-pdf-converter.cc | 68 +++++++++++ - qt4/src/poppler-ps-converter.cc | 162 - +++++++++++--------------- - qt4/src/poppler-qiodeviceoutstream-private.h | 47 ++++++++ - qt4/src/poppler-qiodeviceoutstream.cc | 71 +++++++++++ - qt4/src/poppler-qt4.h | 85 +++++++++++--- - 9 files changed, 483 insertions(+), 107 deletions(-) - -commit 547db8be1ab0b2987f0f06d8529eaaed2414028c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jan 22 13:22:20 2008 +0100 - - Fix a crash when createAnnot returns NULL due to invalid annot dict. - - poppler/Annot.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0d558841142587d66bd3b2025e5a9ca39f7a6159 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jan 21 21:43:39 2008 +0100 - - Fix another reversed comparison due to cmp - - poppler/Annot.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit cb6a87e39336e2e3893f3e5f577e4d176d237a9f -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Mon Jan 21 10:07:35 2008 +0100 - - Fixed a few compare issues with Annots. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 24 ++++++++++++------------ - 1 files changed, 12 insertions(+), 12 deletions(-) - -commit 7cf85dc8d7c895a211684c7d36757063ed4f469b -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Mon Jan 21 21:27:49 2008 +0100 - - The glade file needs to be distributed - - test/Makefile.am | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 46e93d31dd9b5909ecd8f7a8f8de23329444a7bc -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Sun Jan 20 19:56:51 2008 +0100 - - we need time.h if we use time() - - poppler/PDFDoc.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit a0adb006c38ea07f010a01d9c0bb07ca0f48939d -Author: Pino Toscano <pino@kde.org> -Date: Sun Jan 20 19:55:55 2008 +0100 - - Added a saveAs() overload which takes a plain OutStream - - poppler/PDFDoc.cc | 9 +++++++-- - poppler/PDFDoc.h | 2 ++ - 2 files changed, 9 insertions(+), 2 deletions(-) - -commit fcdd5c51f370d040ae57aa64801c9bd4dbe88752 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jan 19 18:00:10 2008 +0100 - - Do not render images when getting the image mapping, it can be done - later on demand. - - glib/poppler-page.cc | 81 +++++++++++++++------------ - glib/poppler-page.h | 6 ++- - poppler/CairoOutputDev.cc | 131 - ++++++++++++++++++++++++++------------------- - poppler/CairoOutputDev.h | 12 ++++- - 4 files changed, 135 insertions(+), 95 deletions(-) - -commit 37ae465775d9a53e7c06cf51aa215439214fd79c -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Sat Jan 19 14:00:31 2008 +0100 - - ignore pdf-fullrewrite binary - - test/.gitignore | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 1d160935ea4c1116b745c584ed7f1fd03fbbfb46 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sat Jan 19 13:59:46 2008 +0100 - - AnnotWidget support and few fixes - - poppler/Annot.cc | 243 - +++++++++++++++++++++++++++++++++++++++++++++++++++-- - poppler/Annot.h | 142 +++++++++++++++++++++++++++++-- - 2 files changed, 365 insertions(+), 20 deletions(-) - -commit 0e91a3973e525d65236d15930a8ea0e5bbb6a6cc -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sat Jan 19 13:59:25 2008 +0100 - - AnnotTextMarkup support and improved AnnotQuadrilaterals - - poppler/Annot.cc | 356 - +++++++++++++++++++++++++++++++++++++++++++----------- - poppler/Annot.h | 130 +++++++++++++++++--- - 2 files changed, 400 insertions(+), 86 deletions(-) - -commit c13952cd56a40bad14a1bf28699b137f65162f10 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sat Jan 19 13:59:02 2008 +0100 - - Changed AnnotQuadrilateral parsing inside AnnotLink - - poppler/Annot.cc | 246 - +++++++++++++++++++++++++++++------------------------- - poppler/Annot.h | 19 ++-- - 2 files changed, 144 insertions(+), 121 deletions(-) - -commit 2f821f10fbbba9363405201c86494cd861cec2b2 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sat Jan 19 13:49:43 2008 +0100 - - Add AnnotQuadPoints class - - poppler/Annot.cc | 16 ++++++++++++++++ - poppler/Annot.h | 23 +++++++++++++++++++++++ - 2 files changed, 39 insertions(+), 0 deletions(-) - -commit de4c8fa6607e55c199bede1dc731227692ef4f53 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sun Dec 30 21:21:56 2007 +0100 - - AnnotFreeText support. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 232 - +++++++++++++++++++++++++++++++++++++++++++++++++++++- - poppler/Annot.h | 127 +++++++++++++++++++++++++++++ - 2 files changed, 358 insertions(+), 1 deletions(-) - -commit c3504a87933ae1516b1ef05e527fd1c039091235 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Sun Dec 30 19:37:18 2007 +0100 - - Improved AnnotLink support. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 116 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Annot.h | 51 ++++++++++++++++++++++++ - 2 files changed, 167 insertions(+), 0 deletions(-) - -commit a20468cc38bb590124b2b028a08f364f90f2487f -Author: Julien Rebetez <julien@fhtagn.net> -Date: Sat Jan 19 13:02:17 2008 +0100 - - Adds a test application to test full rewrite functionnality. - - test/Makefile.am | 11 ++++++++++- - test/pdf-fullrewrite.cc | 44 - ++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 54 insertions(+), 1 deletions(-) - -commit 246294714c6011651fd0e5b3649bd65919058c72 -Author: Julien Rebetez <julien@fhtagn.net> -Date: Sat Jan 19 12:59:03 2008 +0100 - - FormWidget's 'modified' member variable is now updated correctly - each time an update is done. - - Before, only text FormWidget had their 'modified' field set to 'true' - if they had been updated. - It is now the case for the other type of FormWidgets. - - poppler/Form.cc | 7 ++++++- - 1 files changed, 6 insertions(+), 1 deletions(-) - -commit 6e0f297b8b17afb95779724b8618ca39016e664a -Author: Julien Rebetez <julien@fhtagn.net> -Date: Sat Jan 19 12:54:09 2008 +0100 - - Annot will save their generated appearance in their AP dict. - - poppler/Annot.cc | 42 ++++++++++++++++++++++++++++++++++++++---- - poppler/Annot.h | 1 + - 2 files changed, 39 insertions(+), 4 deletions(-) - -commit e20f6a8e9ac3936b4bc03710a71fe390dfc4c094 -Author: Julien Rebetez <julien@fhtagn.net> -Date: Sat Jan 19 12:52:02 2008 +0100 - - Add deep copy constructor to Dict. - - poppler/Dict.cc | 14 +++++++++++++- - poppler/Dict.h | 1 + - 2 files changed, 14 insertions(+), 1 deletions(-) - -commit e8d46cab77c7167edb0896296118daafc0f13b6d -Author: Julien Rebetez <julien@fhtagn.net> -Date: Sat Jan 19 12:51:44 2008 +0100 - - Adds the ability to save PDF using either incremental update or by - rewriting completly the PDF. - - poppler/PDFDoc.cc | 379 - ++++++++++++++++++++++++++++++++++++++++++++++++++++- - poppler/PDFDoc.h | 18 +++- - poppler/XRef.cc | 12 ++- - poppler/XRef.h | 3 +- - 4 files changed, 402 insertions(+), 10 deletions(-) - -commit 742b0c3dec01d8672b84f56d5bb0e2890b178594 -Author: Julien Rebetez <julien@fhtagn.net> -Date: Sat Jan 19 12:51:27 2008 +0100 - - Make the md5 method of Decrypt public so it can be used by other - files. - - poppler/Decrypt.cc | 5 ++--- - poppler/Decrypt.h | 1 + - 2 files changed, 3 insertions(+), 3 deletions(-) - -commit bb7867976740dea259d4110c072552fc5953910f -Author: Julien Rebetez <julien@fhtagn.net> -Date: Sat Jan 19 12:51:07 2008 +0100 - - Modify the writeToFile method of XRef so it uses OutStream instead - of a C file descriptor. - - poppler/XRef.cc | 10 +++++----- - poppler/XRef.h | 2 +- - 2 files changed, 6 insertions(+), 6 deletions(-) - -commit d80736587fdbc0e163077f27bfd21c5e3a7fa4c7 -Author: Julien Rebetez <julien@fhtagn.net> -Date: Sat Jan 19 12:50:49 2008 +0100 - - Adds addIndirectObject method to XRef. This method allow the creation - of new indirect objects. - - poppler/XRef.cc | 39 +++++++++++++++++++++++++++++++++++++++ - poppler/XRef.h | 1 + - 2 files changed, 40 insertions(+), 0 deletions(-) - -commit 8bd00dd0872191b8806e9411d9a1adc441f08a47 -Author: Julien Rebetez <julien@fhtagn.net> -Date: Sat Jan 19 12:50:16 2008 +0100 - - Add some unfiltered methods to input stream. - - With these methods, it is possible to read the raw content from the - stream, without any filtering (even not the headers). - - poppler/Stream.cc | 41 ++++++++++++++++++++++++++++------------- - poppler/Stream.h | 26 ++++++++++++++++++++++++++ - 2 files changed, 54 insertions(+), 13 deletions(-) - -commit 8bcda287ddd316f90b3e47a3a307fbe63a5c21f7 -Author: Julien Rebetez <julien@fhtagn.net> -Date: Sat Jan 19 12:46:53 2008 +0100 - - Add setNeedFree method to MemStream so it is possible to choose if - the stream should take care of deleting the buffer. - - poppler/Stream.h | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 4fbd143de7e3a8ab386dd14b057e62b3b9fe04e4 -Author: Julien Rebetez <julien@fhtagn.net> -Date: Sat Jan 19 12:45:54 2008 +0100 - - Add Outstream, a base class for output streams and FileOutStream, - which implements OutStream for output to a file. - - poppler/Stream.cc | 55 +++++++++++++++++++++++++++++++++++++++++++++ - poppler/Stream.h | 64 - +++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 119 insertions(+), 0 deletions(-) - -commit 696eaa47169fb063b7e6998c876926c578b6fbfa -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jan 17 15:56:59 2008 +0100 - - Fix a crash when editing text form fields - - poppler/Annot.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 9ec1b28dcdade12498b94b650c26483581294ee6 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jan 17 14:54:34 2008 +0100 - - Fix a crash when a form field contains reference to non existant - children - - poppler/Form.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit f7ed40c465033bad26dfda008c5984954baa0607 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jan 16 21:01:50 2008 +0100 - - Add a cast to fix build - - glib/demo/info.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 1c0aa21e598b879ec49d96700e6438ccb8ac2283 -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Fri Jan 11 20:28:49 2008 +0100 - - rename info.c to info.cc to fix bug 14024 - - glib/demo/Makefile.am | 2 +- - glib/demo/info.c | 243 - ------------------------------------------------- - glib/demo/info.cc | 243 - +++++++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 244 insertions(+), 244 deletions(-) - -commit 88f8bf850b6c41d25b9576597b5fc5bd75a122f4 -Author: Kjartan Maraas <kmaraas@gnome.org> -Date: Thu Jan 10 23:51:54 2008 +0100 - - Fix two use after free bugs in HtmlOutputDev.cc - - utils/HtmlOutputDev.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 348f4f9d9d5b0f91da6f46e0fcefec80255d4179 -Merge: 8a8a4f0 4eca2e0 -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Sat Jan 5 23:03:06 2008 +0100 - - Merge branch 'master' of - ssh://aacid@git.freedesktop.org/git/poppler/poppler - -commit 8a8a4f01272fb86898fafbda07129c0cbc03d527 -Author: Pino Toscano <pino@kde.org> -Date: Sat Jan 5 23:02:22 2008 +0100 - - Make Document::renderHints return the correct render hints - - qt4/src/poppler-document.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 4eca2e041c93349e0c4666e83ad1ca3caff91dee -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jan 1 14:34:00 2008 +0100 - - Add page transitions demo - - glib/demo/Makefile.am | 2 + - glib/demo/main.c | 16 ++- - glib/demo/transitions.c | 321 - +++++++++++++++++++++++++++++++++++++++++++++++ - glib/demo/transitions.h | 31 +++++ - 4 files changed, 363 insertions(+), 7 deletions(-) - -commit e92b50bbd3dfc8657b611e3c33129d7c5bae2319 -Author: Koji Otani <sho@bbr.jp> -Date: Wed Dec 26 18:56:01 2007 +0100 - - Use getEmbeddedFontID instead of getEmbeddedFontName to check if a - font is embedded or not - - poppler/GfxFont.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 30e9bae97e3742913015f7ea46636b2b80937612 -Author: Ed Catmur <ed@catmur.co.uk> -Date: Sat Dec 22 22:54:51 2007 +0100 - - Fixlets for Adobe Glyph Naming convention implementation - - poppler/GfxFont.cc | 94 - ++++++++++++++++++++++++++------------------------- - 1 files changed, 48 insertions(+), 46 deletions(-) - -commit 40551e616b007ceb15c9d6e3d77c24538ffec924 -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Sat Dec 22 14:31:50 2007 +0100 - - Check the destination page of the link does exist - - qt4/src/poppler-link.cc | 20 ++++++++++++-------- - 1 files changed, 12 insertions(+), 8 deletions(-) - -commit c06d6f2236d854f05e7621be280109ff27dc73b9 -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Thu Dec 20 20:13:08 2007 +0100 - - Use UnicodeParsedString that does exactly what this code does - - qt4/src/poppler-document.cc | 28 +--------------------------- - 1 files changed, 1 insertions(+), 27 deletions(-) - -commit 5f9f06a10fdb72a9d809ee1f779e1a8f549840e7 -Author: Koji Otani <sho@bbr.jp> -Date: Thu Dec 20 19:59:26 2007 +0100 - - Fix for latest CJK code - - See - http://lists.freedesktop.org/archives/poppler/2007-December/003244.html - for more information - - poppler/GfxFont.cc | 14 ++++++++++---- - 1 files changed, 10 insertions(+), 4 deletions(-) - -commit bb49e1e3909fc7392c197dc67d9b7f5312fd0dad -Author: Ed Catmur <ed@catmur.co.uk> -Date: Tue Dec 18 20:20:11 2007 +0100 - - Implement Adobe Glyph Naming convention - - poppler/GfxFont.cc | 183 - +++++++++++++++++++++++++++++++++++++++++++-------- - 1 files changed, 154 insertions(+), 29 deletions(-) - -commit 5634d63abdd64d371f2e8687a1c172f55b052008 -Author: Koji Otani <sho@bbr.jp> -Date: Mon Dec 17 20:43:41 2007 +0100 - - Allow seting some more Graphics States (Font, LW, LC, LJ, ML, D, - RI, FL) by operator 'gs' - - poppler/Gfx.cc | 67 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 67 insertions(+), 0 deletions(-) - -commit 7a9e7fc96b47b9d833300233ac38bbd60097f425 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Dec 16 21:21:08 2007 +0100 - - Add AnnotLink class so that link annots are properly recognized - - Right now, all of the annots except Text, are created using the - base class Annot which sets the type to unknown. For link annots this - causes the border never be drawn, since we are checking first - whether the - annot is a Link and it's always false. - - poppler/Annot.cc | 12 +++++++++++- - poppler/Annot.h | 10 ++++++++++ - 2 files changed, 21 insertions(+), 1 deletions(-) - -commit 796d9cb9b188a8af69d7fbf9bccbb408cbf6a71a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Dec 15 15:21:49 2007 +0100 - - Fix a crash when trying to create a temp annot with catalog = NULL - - poppler/Annot.cc | 7 +++++++ - poppler/Annot.h | 1 + - poppler/Form.cc | 6 ++---- - 3 files changed, 10 insertions(+), 4 deletions(-) - -commit 99f049f0dfbfd9c22bea56ae96253837ae421e23 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Dec 14 15:26:24 2007 +0100 - - Use the default dash array when it's not correct in AnnotBorderBS - - poppler/Annot.cc | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit cb2a997aa6f9dd5508ca8b04e63815da893497ef -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Dec 14 14:12:14 2007 +0100 - - Fix another crash due to uninitialized variables - - poppler/Annot.cc | 18 ++++++++---------- - poppler/Annot.h | 1 + - 2 files changed, 9 insertions(+), 10 deletions(-) - -commit f704e86d8c72bacbd9443c4d828cd284d3a11753 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Dec 14 12:58:12 2007 +0100 - - Fix several crashes due to uninitialized variables in Annots. - - poppler/Annot.cc | 11 +++++++---- - 1 files changed, 7 insertions(+), 4 deletions(-) - -commit 0820a93ba1c0e893681024feb9f9bd120a9eeb4d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Dec 14 12:38:58 2007 +0100 - - Check whether top and left should be changed in FitH, FitV, FitBH - and FitBV destinations - - According to the spec, if a null value is specified for top or left - parameter in such - destinations, the parameter should be retained unchanged. - - poppler/Link.cc | 36 ++++++++++++++++++++++++++++-------- - 1 files changed, 28 insertions(+), 8 deletions(-) - -commit 0fb42a2f557d5ec83b42326eb6b0be41622ca328 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Wed Dec 12 01:02:31 2007 +0100 - - Changed getters to const - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 28 ++++++++++---------- - poppler/Annot.h | 72 - +++++++++++++++++++++++++++--------------------------- - 2 files changed, 50 insertions(+), 50 deletions(-) - -commit 29d39a8ae120e6045a16a7aa0944c36560b42508 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Mon Dec 10 17:56:44 2007 +0100 - - AnnotText support. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 123 - +++++++++++++++++++++++++++++++++++++++++++++++++++++- - poppler/Annot.h | 65 ++++++++++++++++++++++++---- - 2 files changed, 177 insertions(+), 11 deletions(-) - -commit 2acecde458122bd67487cc302478befa78bf6fbe -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Mon Dec 10 16:45:46 2007 +0100 - - AnnotMarkup support. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 115 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Annot.h | 51 ++++++++++++++++++++++++ - 2 files changed, 166 insertions(+), 0 deletions(-) - -commit 1f8c1fe34e04688d2ba200f1166cfdd1ffe563f0 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Mon Dec 10 16:34:01 2007 +0100 - - AnnotPopup support. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 34 ++++++++++++++++++++++++++++++++++ - poppler/Annot.h | 21 +++++++++++++++++++++ - 2 files changed, 55 insertions(+), 0 deletions(-) - -commit 6c83e06fb2eb77d0dbefd1ebfbcac3e5f0cbb622 -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Mon Dec 10 16:24:38 2007 +0100 - - Prepare code to Annotation Subtype support. - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - glib/poppler-page.cc | 11 +--- - poppler/Annot.cc | 160 - ++++++++++++++++++++++++++++++++++++-------------- - poppler/Annot.h | 54 ++++++++++++++--- - poppler/Form.cc | 6 ++- - 4 files changed, 167 insertions(+), 64 deletions(-) - -commit fa0bb5bbea5bf2769c8b3084f78770b7781002eb -Author: Iñigo Martínez <inigomartinez@gmail.com> -Date: Mon Dec 10 15:41:38 2007 +0100 - - Various Annot improvements - - Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> - - poppler/Annot.cc | 613 - +++++++++++++++++++++++++++++++++++------------------- - poppler/Annot.h | 140 +++++++++++- - poppler/Gfx.cc | 21 ++- - poppler/Gfx.h | 5 +- - 4 files changed, 543 insertions(+), 236 deletions(-) - -commit e0f49fd5aef3c798798ad7e7dba55857bde1b4c0 -Author: Koji Otani <sho@bbr.jp> -Date: Thu Dec 13 23:40:46 2007 +0100 - - Some CJK charecters are displayed vertical glyphs incorrectly when - horizontal mode - - poppler/GfxFont.cc | 46 +++++++++++++++++++++++++--------------------- - 1 files changed, 25 insertions(+), 21 deletions(-) - -commit 85901922bf354a1268037d0b6ec5cbf14da979a1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Dec 13 23:30:59 2007 +0100 - - Yet another gmallocn to gmallocn_checkoverflow - - Fixes http://bugs.kde.org/show_bug.cgi?id=153949 - - poppler/SplashOutputDev.cc | 23 ++++++++++++++++------- - 1 files changed, 16 insertions(+), 7 deletions(-) - -commit f24259cddb9c5e02cf9d2071bfa0106f3e88bd59 -Author: Koji Otani <sho@bbr.jp> -Date: Mon Dec 10 23:24:14 2007 +0100 - - Display characters outside of unicode BMP with TT font - - fofi/FoFiTrueType.cc | 33 +++++++++++++++++++-- - fofi/FoFiTrueType.h | 2 +- - poppler/CMap.cc | 34 ++++++++++++++++++++++ - poppler/CMap.h | 4 ++ - poppler/GfxFont.cc | 75 - +++++++++++++++++++++++++++++++------------------ - 5 files changed, 115 insertions(+), 33 deletions(-) - -commit 7cbabbf378cf5a9c0411558ff02b44dec2040ea1 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Dec 10 22:00:30 2007 +0100 - - Fix a crash when marked content properties operator is not a dict. - - poppler/Gfx.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit e807f9c72c7f0c5cc0655918f676f4af54739442 -Merge: bf57117 e2ea743 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 9 18:07:30 2007 +0100 - - Merge branch 'master' of - ssh://aacid@git.freedesktop.org/git/poppler/poppler - -commit bf57117df8786778faf31e5d843533004f867ff3 -Author: Adrian Johnson <ajohnson@redneon.com> -Date: Sun Dec 9 18:07:00 2007 +0100 - - Add support for ActualText entries - - Patch by Adrian Johnson with two minor changes by me (one fordward - declaration and a leak fix) - - poppler/Form.cc | 2 +- - poppler/Gfx.cc | 2 +- - poppler/OutputDev.cc | 2 +- - poppler/OutputDev.h | 2 +- - poppler/PDFDocEncoding.h | 4 ++ - poppler/TextOutputDev.cc | 98 - +++++++++++++++++++++++++++++++++++++++++++++- - poppler/TextOutputDev.h | 11 +++++ - 7 files changed, 116 insertions(+), 5 deletions(-) - -commit e2ea7430e7d6db50cbfdac34713915e5b0942a89 -Author: Albert Astals Cid <tsdgeos@localhost.(none)> -Date: Sat Dec 8 23:21:34 2007 +0100 - - disable warnings about assigning const char * to char * - - We have them all over the place and we are not going to fix it as - that'll be too much overhead when re-merging xpdf changes - - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit acf70c666d4f534cd97de64d4378bf6399e31fd4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Dec 6 23:58:26 2007 +0100 - - Disable gtk tests if the user disabled glib frontend - - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit bb0ec68f21d355081ff75aad641bc3809141e398 -Merge: 5a34cdd b925ea2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Dec 6 18:38:54 2007 +0100 - - Merge branch 'master' of - ssh://aacid@git.freedesktop.org/git/poppler/poppler - -commit b925ea232b6ed5028712600f9aebe453f3b2ba06 -Author: Brad Hards <bradh@kde.org> -Date: Tue Dec 4 19:11:13 2007 +1100 - - Remove redundant check. - - poppler/PSOutputDev.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 275afca4ef24020273df652ccfdf76c6994e9294 -Author: Brad Hards <bradh@kde.org> -Date: Sun Dec 2 19:45:16 2007 +1100 - - Preserve PDF page labels when we output as postscript. - - Resolves bug 13338. - - poppler/PSOutputDev.cc | 81 - +++++++++++++++++++++++++++++++++++++++++++++++- - poppler/PSOutputDev.h | 2 + - 2 files changed, 82 insertions(+), 1 deletions(-) - -commit 641edb83a457083c13f3e374f6ac6c570dd54d7f -Author: Brad Hards <bradh@kde.org> -Date: Wed Nov 28 19:42:53 2007 +1100 - - Minor API documentation update - - qt4/src/poppler-annotation.h | 81 - ++++++++++++++++++++++++++++++++++++++++- - 1 files changed, 79 insertions(+), 2 deletions(-) - -commit 3635ec6fcbc89daf633c03efb644df9031b80f59 -Author: Brad Hards <bradh@kde.org> -Date: Wed Nov 28 19:42:22 2007 +1100 - - Update doxygen configuration file to version 1.5.3 - - qt4/src/Doxyfile | 185 - +++++++++++++++++++++++++++++++++++++++++------------- - 1 files changed, 141 insertions(+), 44 deletions(-) - -commit 02c7ea6e1fd3e225de1eda231813f4db0ffb9fdb -Author: Brad Hards <bradh@kde.org> -Date: Wed Nov 28 19:41:54 2007 +1100 - - Fix off-by-one in printCommands path. - - poppler/Gfx.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 74af7c1209f47ed39addf7fde3ea106a7c77a408 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Nov 24 18:12:00 2007 +0100 - - Convert passwords from utf-8 to latin-1 when needed. Fixes bug #4557 - - glib/poppler-document.cc | 16 ++++++++++++++-- - 1 files changed, 14 insertions(+), 2 deletions(-) - -commit 5a34cddf043cb484549cb411e034786a7d8688a3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Nov 23 23:13:57 2007 +0100 - - add a ignore - - glib/demo/.gitignore | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 21a58562cc1e575ec3d81b6e34bfcb21306eb67f -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Nov 23 23:12:06 2007 +0100 - - sscanf does not like null strings, so don't call it on empty qstrings - - qt/poppler-document.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 6f8451cf9d19f57f658d1568643ecb0f953e1075 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Nov 11 21:29:40 2007 -0500 - - Add support for knockout groups to the cairo backend - - This is sort of hacky because we need to keep track of shape and - opacity - seperately. It is also probably not entirely correct. However, - it should be - closer than previously. - - poppler/CairoOutputDev.cc | 309 - +++++++++++++++++++++++++++++++++++++++++++-- - poppler/CairoOutputDev.h | 8 +- - 2 files changed, 303 insertions(+), 14 deletions(-) - -commit b0fbfb0ac366434d7e4c0350a9be83ddda7b03cf -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Nov 11 16:06:16 2007 -0500 - - Track the AlphaIsShape and TextKnockout state - - Parse, store and notify the OutputDevices about these entries. - - poppler/Gfx.cc | 14 ++++++++++++++ - poppler/GfxState.h | 6 ++++++ - poppler/OutputDev.h | 2 ++ - 3 files changed, 22 insertions(+), 0 deletions(-) - -commit f6429b13a972f2deb25b3d3a9948dca024a54841 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Nov 10 14:08:09 2007 -0500 - - Fix accidental mode change. - - 0 files changed, 0 insertions(+), 0 deletions(-) - -commit 5797f50a99d1494767edc5928f9c3e9d927b946d -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Nov 10 01:52:00 2007 -0500 - - Scale text to match 'm' size - - This adds back the hack that was removed when fontconfig support - was added long - ago. It's not a great solution but lets us be at least as good as - xpdf. Fixes - #12304 with the cairo backend. The problem persists with the splash - backend. - - poppler/CairoFontEngine.cc | 56 - +++++++++++++++++++++++++++++++++++++++++-- - poppler/CairoFontEngine.h | 7 ++++- - poppler/CairoOutputDev.cc | 8 ++++- - 3 files changed, 65 insertions(+), 6 deletions(-) - -commit 551212e55127c7e46d9aff3318015fd9b5385687 -Author: Brad Hards <bradh@frogmouth.net> -Date: Sat Nov 10 11:56:15 2007 +0100 - - Fix uninitialized variable access - - Supported by Derek B. Noonburg - - poppler/GfxState.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 934a5ae45eb17bd0e2010be89f55510e8a69816b -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Nov 3 13:08:51 2007 -0400 - - Avoiding using floating point when converting to luminance. - - The code now also does proper rounding instead of just truncating. - - poppler/CairoOutputDev.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 1b3f045a25e5d172357bc87c15ba591c8e1511a7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Nov 8 23:34:07 2007 +0100 - - Move another gmallocn to gmallocn_checkoverflow. Fixes crashes on - incorrect pdf sent by Red Hat - - poppler/Stream.cc | 21 +++++++++++++++------ - 1 files changed, 15 insertions(+), 6 deletions(-) - -commit 944d327fd7036332a33b4ad6476ceca7a650ef6e -Merge: fb1d1f4 c340255 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 7 23:52:47 2007 +0100 - - Merge branch 'master' of - ssh://aacid@git.freedesktop.org/git/poppler/poppler - -commit fb1d1f459784a6c19034212a617268f7f5a90e9c -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 7 23:51:58 2007 +0100 - - merge ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl2.patch - - poppler/Stream.cc | 417 - ++++++++++++++++++++++++++++++----------------------- - poppler/Stream.h | 10 +- - 2 files changed, 245 insertions(+), 182 deletions(-) - -commit c340255f46bc95b5f850abcd3d9bcdc8594199bb -Author: Brad Hards <bradh@kde.org> -Date: Mon Nov 5 20:36:23 2007 +1100 - - Update .gitignore - - Suppress the noise a bit. - - qt4/.gitignore | 1 + - qt4/tests/.gitignore | 3 +++ - test/.gitignore | 2 ++ - 3 files changed, 6 insertions(+), 0 deletions(-) - -commit cebf770379e7d71166e729aebf771a4ca291d48b -Author: Brad Hards <bradh@kde.org> -Date: Mon Nov 5 20:31:18 2007 +1100 - - Add a new unit test, for non-ASCII searching. - - There is a bug report (bug:7063) about not being able - to find text that isn't ASCII. I think that the problem isn't - in poppler core code - this unit test shows we can find - characters as long as they are properly encoded (which the - Qt4 front end does). - - qt4/tests/Makefile.am | 7 ++++++- - qt4/tests/check_search.cpp | 40 - ++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 46 insertions(+), 1 deletions(-) - -commit 570fe464a2aae4f22d0b47cce73b8bc36b116e9f -Merge: 1c7b7a0 7875067 -Author: Brad Hards <bradh@kde.org> -Date: Mon Nov 5 15:55:39 2007 +1100 - - Merge branch 'minor-fixes' - -commit 78750679e213d7307cce38166b6af32562e871b8 -Author: Brad Hards <bradh@kde.org> -Date: Mon Nov 5 15:54:36 2007 +1100 - - Additional check for password protected documents - - We need to bail out on locked documents. In the future, - we could probably go interactive, and ask the user for - a password. - - qt4/tests/test-poppler-qt4.cpp | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 1c7b7a0c581b542945cac257202bbb819d33694c -Author: Brad Hards <bradh@kde.org> -Date: Mon Nov 5 15:49:45 2007 +1100 - - Minor Qt4 API documentation fix - - Also, this is a test of my git newbie-ness. - - qt4/src/poppler-form.h | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit b86fc565d175835cf27e9c8632da47a5e0b50237 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Nov 5 00:14:55 2007 +0100 - - Fix FSF address - - glib/demo/fonts.c | 2 +- - glib/demo/fonts.h | 2 +- - glib/demo/forms.c | 2 +- - glib/demo/forms.h | 2 +- - glib/demo/info.c | 2 +- - glib/demo/info.h | 2 +- - glib/demo/links.c | 2 +- - glib/demo/links.h | 2 +- - glib/demo/main.c | 2 +- - glib/demo/outline.c | 2 +- - glib/demo/outline.h | 2 +- - glib/demo/page.c | 2 +- - glib/demo/page.h | 2 +- - glib/demo/render.c | 2 +- - glib/demo/render.h | 2 +- - glib/demo/utils.c | 2 +- - glib/demo/utils.h | 2 +- - glib/poppler-action.cc | 2 +- - glib/poppler-action.h | 2 +- - glib/poppler-attachment.cc | 2 +- - glib/poppler-attachment.h | 2 +- - glib/poppler-document.cc | 2 +- - glib/poppler-document.h | 2 +- - glib/poppler-features.h.in | 2 +- - glib/poppler-form-field.cc | 2 +- - glib/poppler-form-field.h | 2 +- - glib/poppler-page.cc | 2 +- - glib/poppler-page.h | 2 +- - glib/poppler.cc | 2 +- - glib/poppler.h | 2 +- - poppler/PageTransition.cc | 2 +- - poppler/Sound.cc | 2 +- - poppler/Sound.h | 2 +- - qt/poppler-document.cc | 2 +- - qt/poppler-fontinfo.cc | 2 +- - qt/poppler-link-qt3.h | 2 +- - qt/poppler-link.cc | 2 +- - qt/poppler-page-transition-private.h | 2 +- - qt/poppler-page-transition.cc | 2 +- - qt/poppler-page-transition.h | 2 +- - qt/poppler-page.cc | 2 +- - qt/poppler-private.h | 2 +- - qt/poppler-qt.h | 2 +- - qt4/src/poppler-annotation-helper.h | 2 +- - qt4/src/poppler-annotation-private.h | 2 +- - qt4/src/poppler-annotation.cc | 2 +- - qt4/src/poppler-annotation.h | 2 +- - qt4/src/poppler-document.cc | 2 +- - qt4/src/poppler-embeddedfile.cc | 2 +- - qt4/src/poppler-fontinfo.cc | 2 +- - qt4/src/poppler-form.cc | 2 +- - qt4/src/poppler-form.h | 2 +- - qt4/src/poppler-link-extractor-private.h | 2 +- - qt4/src/poppler-link-extractor.cc | 2 +- - qt4/src/poppler-link.cc | 2 +- - qt4/src/poppler-link.h | 2 +- - qt4/src/poppler-page-private.h | 2 +- - qt4/src/poppler-page.cc | 2 +- - qt4/src/poppler-private.h | 2 +- - qt4/src/poppler-ps-converter.cc | 2 +- - qt4/src/poppler-qt4.h | 2 +- - qt4/src/poppler-sound.cc | 2 +- - qt4/src/poppler-textbox.cc | 2 +- - 63 files changed, 63 insertions(+), 63 deletions(-) - -commit 37776afc6f8a5733b41da6fb0f45e7ace4edf737 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Nov 5 00:03:55 2007 +0100 - - Update from http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt - - COPYING | 27 +++++++++++++-------------- - 1 files changed, 13 insertions(+), 14 deletions(-) - -commit 34a90b35998b65539cf1e8f09194d45db71064a1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 4 14:03:35 2007 +0100 - - Remove duplicate checking - - poppler/JBIG2Stream.cc | 8 -------- - 1 files changed, 0 insertions(+), 8 deletions(-) - -commit d694e1dd042fb97fbc62046b69cafe30d6f9ea58 -Merge: ba5b31c 432e657 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 4 13:26:47 2007 +0100 - - Merge branch 'master' of - ssh://aacid@git.freedesktop.org/git/poppler/poppler - -commit ba5b31c6a8b2317332bfa148f6d80f66891fb9ce -Author: Brad Hards <bradh@frogmouth.net> -Date: Sun Nov 4 13:25:12 2007 +0100 - - Require fontconfig >= 2.0 Fixes bug 9020 - - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 432e657a49cb097638a79e38c141088039572816 -Author: Jeff Muizelaar <jeff@freiheit.infidigm.net> -Date: Mon Sep 17 19:15:21 2007 -0400 - - Use realloc/free instead of new/delete when resizing GooStrings - - This allows for a large performance improvement when appending a - large number - of characters to a GooString. This is especially helpful for - TextOutputDev on - large PDFs. For example, the following code has the potential to be - O(n) instead of - O(n²) with a good implementation of realloc. - - while (n) { - string.append(character); - n--; - } - - goo/GooString.cc | 30 +++++++++++++++++------------- - 1 files changed, 17 insertions(+), 13 deletions(-) - -commit cb80112afed2c5b9642c3c43f1cc001ed88d08cb -Author: Jonathan Kew <jonathan_kew@sil.org> -Date: Thu Nov 1 20:53:05 2007 +0100 - - Do not try to parse directories when processing nameToUnicode - dir. Fixes ugly warnings on mingw32 - - poppler/GlobalParams.cc | 6 ++++-- - 1 files changed, 4 insertions(+), 2 deletions(-) - -commit ad6b888edff7b30be72df948c4052b9934a37705 -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Thu Nov 1 20:48:21 2007 +0100 - - Add some castings to make it compile - - glib/test-poppler-glib.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit a968dcc759379f48265c91bea63ca4cf987d94a9 -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Wed Oct 31 23:53:39 2007 +0100 - - Tests for passwords - - qt4/tests/Makefile.am | 13 +++++- - qt4/tests/check_password.cpp | 87 - ++++++++++++++++++++++++++++++++++++++ - qt4/tests/stress-poppler-dir.cpp | 63 +++++++++++++++++++++++++++ - qt4/tests/test-poppler-qt4.cpp | 15 ++++++- - 4 files changed, 175 insertions(+), 3 deletions(-) - -commit 7b7a08863a8278dee7aa1fe7789cf72223c26b35 -Author: Brad Hards <bradh@frogmouth.net> -Date: Wed Oct 31 23:53:27 2007 +0100 - - Improve documentation - - qt4/src/poppler-qt4.h | 64 - ++++++++++++++++++++++++++++++++++++++++++------ - 1 files changed, 56 insertions(+), 8 deletions(-) - -commit 96493c9409186a7e964e894c7f730962b6995fd7 -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Wed Oct 31 23:51:25 2007 +0100 - - remove old file - - glib/test-poppler-glib.c | 514 - ---------------------------------------------- - 1 files changed, 0 insertions(+), 514 deletions(-) - -commit 951a05f7a11af4a44e4cb85a015939d6a3e513f5 -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Sat Oct 27 12:33:22 2007 +0200 - - Remove fordward declaration of a non-existant class - - poppler/Form.h | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 289679405ab143bc2106cf269227c514a1602e56 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Thu Oct 25 22:16:10 2007 -0400 - - Avoid drawing borders unless /W and /S are specified in /BS - - Acroread doesn't sometimes doesn't draw borders when you'd - expect it to. Special case that behaviour so that we do the - same thing. - - poppler/Annot.cc | 15 ++++++++++++--- - 1 files changed, 12 insertions(+), 3 deletions(-) - -commit ab0a6c37faf9916edcd70e128d9f2654eb795ace -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Thu Oct 25 20:56:58 2007 +0200 - - Fix compilation on mingw. Bug 12493 - - Added a check for localtime_r in configure.ac - Moved test-poppler-glib.c to test-poppler-glib.cc to get the correct - compiler - - configure.ac | 1 + - glib/Makefile.am | 2 +- - glib/test-poppler-glib.cc | 520 - +++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 522 insertions(+), 1 deletions(-) - -commit 6bd637dc135045b20abf024d394538d7a3160795 -Merge: c01ab71 25b273d -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Tue Oct 23 23:27:01 2007 +0200 - - Merge branch 'master' of - ssh://aacid@git.freedesktop.org/git/poppler/poppler - -commit c01ab714ecd42e39ecb0be1c0c2504635251ac01 -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Tue Oct 23 23:26:21 2007 +0200 - - Provide setters for some methods that only had getters. Fixes - bug 12894 - - poppler/GlobalParams.cc | 49 - +++++++++++++++++++++++++++++++++++++++++++++++ - poppler/GlobalParams.h | 7 ++++++ - 2 files changed, 56 insertions(+), 0 deletions(-) - -commit 25b273db677815c8df11e52fe9df29fe857a8a88 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Mon Oct 22 23:01:37 2007 -0400 - - Unset the font if it doesn't exist or we can not load it properly - - Previously, the previous font stayed current and glyphs would be - drawn using - it. This resulted in random glyphs being chosen unless the encodings - happened - to match. Now, instead, we draw nothing which matches the behaviour of - acroread. - - poppler/Gfx.cc | 4 ++++ - poppler/GfxFont.cc | 4 ++++ - 2 files changed, 8 insertions(+), 0 deletions(-) - -commit 57331767ed5306eba1f9bf60e48fc88debdc2198 -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Mon Oct 22 23:33:59 2007 +0200 - - builddir != srcdir fixes by Christian Persch <chpe gnome org> - - autogen.sh | 7 ++++--- - glib/demo/Makefile.am | 1 + - 2 files changed, 5 insertions(+), 3 deletions(-) - -commit 2a333e5a618b5c92f3c703816b950321f25d3aab -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Mon Oct 22 22:14:43 2007 +0200 - - Splash rework, check if font is inside clip area before rendering - it to a temporary bitmap. Fixes KDE bug 150693 - - This change is not trivial. What i did is: - It is getGlyph the one that does the intersection between clip area - and rendering area of the font instead fillGlyph2 - That means some clipRes = state->clip->testRect but we win more - robustness against broken pdf that specify HUGE fonts - - splash/Splash.cc | 207 - ++++++++++++++++++++++++------------------------ - splash/Splash.h | 4 +- - splash/SplashFTFont.cc | 23 +++++- - splash/SplashFTFont.h | 4 +- - splash/SplashFont.cc | 29 ++++++-- - splash/SplashFont.h | 5 +- - splash/SplashT1Font.cc | 11 ++- - splash/SplashT1Font.h | 4 +- - 8 files changed, 162 insertions(+), 125 deletions(-) - -commit cf785cd12ae77e8dd778ed043584f8f26efe675f -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Mon Oct 22 21:59:35 2007 +0200 - - Add gmallocn_checkoverflow, it's the same as gmallocn but returns - NULL on overflow instead of doing exit() - - goo/gmem.cc | 18 ++++++++++++++++++ - goo/gmem.h | 3 +++ - 2 files changed, 21 insertions(+), 0 deletions(-) - -commit 37e16ac301a35ceca2e3535f8c6100d4cf723c82 -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Mon Oct 22 21:54:02 2007 +0200 - - exit(1) is bad in library code, use the src.abort method to describe - failure - - poppler/DCTStream.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit dbe975c129999a3efceb1c86518fa6fda74f685c -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Oct 22 11:25:37 2007 +0200 - - Fix a crash with invalid TrueType fonts - - fofi/FoFiTrueType.cc | 10 ++++++---- - 1 files changed, 6 insertions(+), 4 deletions(-) - -commit 8bfe30a48fd7021591ab307bd51f86c06ff202b9 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Oct 19 15:46:50 2007 +0200 - - Do not generate appearance stream for radio button that are not active - - poppler/Annot.cc | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 1a531dcfee1c6fc79a414c38cbe7327fbf9a59d8 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Oct 19 13:12:24 2007 +0200 - - Fix a crash with invalid embedded fonts - - poppler/CairoFontEngine.cc | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit e1740278457e512676b623bcdf9968193f0a8d7b -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Oct 19 12:21:54 2007 +0200 - - Do not draw annotations when rendering for printing - - glib/poppler-page.cc | 25 ++++++++++++++++++++++--- - poppler/Annot.h | 2 ++ - 2 files changed, 24 insertions(+), 3 deletions(-) - -commit a4d25f79dfc1a7e4998e2e113ef92312bd4af553 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Oct 16 15:24:08 2007 +0200 - - Detect form fields at any depth level - - We were ignoring non root form fields that contain only a kids - dictionary. - See evince bug: http://bugzilla.gnome.org/show_bug.cgi?id=486957 - - poppler/Form.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 03e1da99f7393fb1103643311b0b5af7b875e09c -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Oct 13 19:38:15 2007 -0400 - - Add an implementation of CairoOutputDev::startPage() - - The implementation initializes fill_pattern and stroke_pattern - to black matching SplashOutputDev. This fixes #12504. - - poppler/CairoOutputDev.cc | 9 +++++++++ - poppler/CairoOutputDev.h | 2 +- - 2 files changed, 10 insertions(+), 1 deletions(-) - -commit 825c942d46e0c3e254028441015c5dd8440cc734 -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Fri Oct 12 13:47:09 2007 +0200 - - Copy the embeddef file description string correctly - - poppler/Catalog.cc | 3 +-- - 1 files changed, 1 insertions(+), 2 deletions(-) - -commit 5e60da78695eff44cc10dbce46ef170727f682b1 -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Fri Oct 12 13:46:52 2007 +0200 - - Correctly delete the embedded file stream - - qt4/src/poppler-embeddedfile.cc | 1 + - qt4/src/poppler-private.h | 2 +- - 2 files changed, 2 insertions(+), 1 deletions(-) - -commit 1627fbbde8be01af3bdd2583f3439897a37d5215 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Oct 6 23:27:40 2007 -0400 - - Use maskWidth and maskHeight for reading from the mask image in - CairoOutputDev::drawMaskedImage() - - Previously, drawMaskedImage() was incorrectly using the image width - and height which is - wrong when width != maskWidth or heigh != maskHeight. Fixes #12668. - - poppler/CairoOutputDev.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 3156d560c5eaf6970da422d0b09fd2e95bfe6d1d -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Oct 5 11:34:01 2007 +0200 - - Fix a crash when Form Fields array contains references - to non existent objects. Fixes bug #11865 - - poppler/Form.cc | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -commit f0b5e6286e94c6153c8247b5fae63a18622c48d3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Oct 4 15:22:01 2007 +0200 - - Do not return unknown field type for signature form fields - - glib/poppler-form-field.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 498fd7fb99b01a879d07e2ad12c0b9462a8fc438 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Oct 4 12:36:39 2007 +0200 - - Add poppler_page_render_for_printing() and - poppler_page_render_to_pixbuf_for_printing() - - We were unconditionally passing printing=gFalse to displaySlice. With - these new - functions we can render to a pixbuf or cairo surface passing - printing=gTrue to - displaySlice. - - glib/poppler-page.cc | 135 - ++++++++++++++++++++++++++++++++++++++++---------- - glib/poppler-page.h | 10 ++++ - 2 files changed, 119 insertions(+), 26 deletions(-) - -commit 56af69787c78c2edbb69266e86a5a5b639ca6d3e -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Oct 3 23:02:25 2007 -0400 - - Error out if we can't find a .cidToUnicode for a known character - collection - - This situation was caused by the fixes for bug #11413. I'm not sure - it's the best thing to do, but it seems better. - - poppler/GfxFont.cc | 19 +++++++++++++++++++ - 1 files changed, 19 insertions(+), 0 deletions(-) - -commit 3d0df46908379bce1d196b9dc41153b1adb5f725 -Author: Michael Wolf <maw@ximian.com> -Date: Wed Oct 3 19:43:55 2007 +0200 - - Fix compile warning - - glib/test-poppler-glib.c | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit aba29e12528025c2cc71bf46e02e76ac4db2b193 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Sep 28 21:01:50 2007 +0200 - - Add forms demo to glib poppler demo - - glib/demo/Makefile.am | 2 + - glib/demo/forms.c | 489 - +++++++++++++++++++++++++++++++++++++++++++++++++ - glib/demo/forms.h | 31 +++ - glib/demo/main.c | 8 +- - glib/demo/utils.c | 1 - - 5 files changed, 527 insertions(+), 4 deletions(-) - -commit d0c0f26d2c95232c216e3daa15e98a3aff14ac27 -Merge: 59d55f7 38d5bb1 -Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> -Date: Tue Sep 25 03:33:52 2007 -0700 - - Merge branch 'master' of - ssh://kjk@git.freedesktop.org/git/poppler/poppler - -commit 38d5bb150a5fe883da1d4256463d1f796d201283 -Author: Krzysztof Kowalczyk <kkowalczyk@kjkubu.(none)> -Date: Tue Sep 25 16:13:51 2007 -0700 - - Silence deprecation warnings - annoying with msvc 2005. - - makefile.vc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 59d55f7371bee81c9392fa2d4174ceffaacde471 -Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> -Date: Tue Sep 25 01:21:19 2007 -0700 - - Fix misleading comment. - - goo/GooTimer.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit c36d8afc984795aca0a12a94ec7668092067db82 -Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> -Date: Tue Sep 25 00:32:29 2007 -0700 - - Revert "replace extremely confusing 'a*(int)sizeof(foo)/sizeof(foo) - != a' which, due to type promotions, if a is int, is equivalent to - a < 0; fix problems revealed by the change" - - This reverts commit 08bf7c1151d594d4c7d253a2c89f4f3a088ad8ec. - - poppler/XRef.cc | 25 +++++++++++++++++++++---- - 1 files changed, 21 insertions(+), 4 deletions(-) - -commit ff25e83abae1ca17e2e7dd6f20946026fca69fff -Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> -Date: Mon Sep 24 23:57:25 2007 -0700 - - Make perf-test compile on unix as well. - - test/Makefile.am | 16 ++++++- - test/perf-test-preview-dummy.cc | 1 + - test/perf-test.cc | 104 - ++++++++++++++++----------------------- - 3 files changed, 59 insertions(+), 62 deletions(-) - -commit 70f3bf42b3028d9a2e4aefdc2e1a458b3c77b0e7 -Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> -Date: Mon Sep 24 21:26:54 2007 -0700 - - Let perf-test.cc manage lifetime of rendered bitmap. - - test/perf-test-preview-win.cc | 7 ------- - 1 files changed, 0 insertions(+), 7 deletions(-) - -commit b622b252cba068a15eae77df5deb261dd98affaf -Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> -Date: Mon Sep 24 21:20:12 2007 -0700 - - Disable my_error for now - seems to corrupt memory. - - test/perf-test.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit bde8c9669ca6b43cb6a664bd14df164a718041ea -Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> -Date: Mon Sep 24 21:08:58 2007 -0700 - - Con't copy the file unless COPY_FILE is defined. - - test/perf-test.cc | 11 ++++++++++- - 1 files changed, 10 insertions(+), 1 deletions(-) - -commit bf9b46b012c64624818a2110af7c4b7e3b419728 -Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> -Date: Mon Sep 24 20:13:54 2007 -0700 - - Respect -loadonly cmd-line arg. - - test/perf-test.cc | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 2f664b654ca19135f0f8a0fe89872b9e0d526fa2 -Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> -Date: Mon Sep 24 19:41:45 2007 -0700 - - Fix msvc debug build. Fix bitmap leak in perf-test. - - makefile.vc | 6 ++++-- - test/perf-test.cc | 1 + - 2 files changed, 5 insertions(+), 2 deletions(-) - -commit 05d41cd5aec39b4e3c8949445a9986e5ca8b50dd -Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> -Date: Mon Sep 24 08:10:37 2007 -0700 - - Use GooTimer instead of my own timer. - - test/perf-test.cc | 98 - ++++------------------------------------------------ - 1 files changed, 8 insertions(+), 90 deletions(-) - -commit 05fbce5b6657e883ece9054c79576b25271a05a4 -Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> -Date: Mon Sep 24 08:01:11 2007 -0700 - - Make GooTimer work for Windows/msvc build. - - goo/GooTimer.cc | 69 - +++++++++++++++++++++++++++++++++++++----------------- - goo/GooTimer.h | 28 +++++++++++++-------- - poppler/Gfx.cc | 11 +------- - 3 files changed, 66 insertions(+), 42 deletions(-) - -commit 6347915085a487da08d39a859f4261fa812dab09 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Mon Sep 24 01:08:17 2007 -0700 - - Add Error.cc in msvc build and use setErrorFunction in perf-test. - - makefile.vc | 3 +-- - test/perf-test.cc | 10 +++++----- - 2 files changed, 6 insertions(+), 7 deletions(-) - -commit ed01b3965c57ce2a4eabf9c46b5319ea627d3324 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Mon Sep 24 01:03:09 2007 -0700 - - Match declaration of setErrorFunction with its definition. - - Also enable this code for Windows, since CDECL was what - was throwing msvc off. - - poppler/Error.cc | 12 +++--------- - 1 files changed, 3 insertions(+), 9 deletions(-) - -commit 71fb15f8bd131a13d8cf0f394fe601cfbb6e1772 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Mon Sep 24 00:38:29 2007 -0700 - - Even less compiler warnings. - - poppler/CairoOutputDev.cc | 6 +++--- - qt/poppler-page.cc | 3 +++ - utils/HtmlOutputDev.cc | 10 ++++++---- - 3 files changed, 12 insertions(+), 7 deletions(-) - -commit 7ba3f198a0651d2a7c91b7d9e10a5173dc3de0a3 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Mon Sep 24 00:32:37 2007 -0700 - - Even less compiler warnings. - - qt/poppler-document.cc | 8 ++++++++ - qt/poppler-private.h | 8 -------- - qt4/src/poppler-document.cc | 10 ++++++++++ - qt4/src/poppler-form.cc | 15 +++++++++++++++ - qt4/src/poppler-private.h | 25 ------------------------- - 5 files changed, 33 insertions(+), 33 deletions(-) - -commit ab1059f594cb9fccd8568ca2a535a363c7521daa -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Mon Sep 24 00:14:01 2007 -0700 - - Don't break aliasing. - - poppler/GlobalParams.cc | 40 ++++++++++++++++++---------------------- - 1 files changed, 18 insertions(+), 22 deletions(-) - -commit 71c47b30adf687a0bcece22834933267053360de -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Sun Sep 23 23:49:31 2007 -0700 - - Reduce compiler warnings. - - poppler/JBIG2Stream.cc | 16 ++++++++++++---- - 1 files changed, 12 insertions(+), 4 deletions(-) - -commit 8466d94929844c976bbad8bb7d1ea7f7f77cc196 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Sun Sep 23 23:34:52 2007 -0700 - - Reduce compiler warnings. Tabs to spaces. - - fofi/FoFiType1C.cc | 30 +++++++++++++++--------------- - 1 files changed, 15 insertions(+), 15 deletions(-) - -commit c53b8ccfba6fa4345086493f9e44212721c11d0a -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Sun Sep 23 23:23:34 2007 -0700 - - Reduce number of compiler warnings. - - poppler/CharCodeToUnicode.cc | 2 +- - poppler/Gfx.cc | 6 ++---- - poppler/PageLabelInfo.cc | 2 ++ - 3 files changed, 5 insertions(+), 5 deletions(-) - -commit abede2a06c5c9dc97b40479deda49621458f1171 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Sun Sep 23 23:03:36 2007 -0700 - - Reduce number of compiler warnings. - - glib/poppler-action.cc | 1 - - glib/poppler-document.cc | 9 ++------- - glib/poppler-page.cc | 3 +-- - qt/poppler-document.cc | 1 - - qt4/src/poppler-annotation.cc | 16 +++++++++++++--- - 5 files changed, 16 insertions(+), 14 deletions(-) - -commit 60f5bcea4a920441e25ae11d677636242aabb2db -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Sun Sep 23 22:48:06 2007 -0700 - - Remove unused variables. - - utils/pdftoppm.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 3179eee44eb0afbc642675268b9a4abb16ccdde3 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Sun Sep 23 22:47:21 2007 -0700 - - Remove unused variables. - - utils/HtmlOutputDev.cc | 23 ----------------------- - 1 files changed, 0 insertions(+), 23 deletions(-) - -commit e9dc379190aa3166870d0b11a05ccc4e9dad2706 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Sun Sep 23 22:41:59 2007 -0700 - - Remove unused variables. - - poppler/ArthurOutputDev.cc | 16 +++++----------- - 1 files changed, 5 insertions(+), 11 deletions(-) - -commit 08bf7c1151d594d4c7d253a2c89f4f3a088ad8ec -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Sun Sep 23 22:28:16 2007 -0700 - - replace extremely confusing 'a*(int)sizeof(foo)/sizeof(foo) != a' - which, due to type promotions, if a is int, is equivalent to a < 0; - fix problems revealed by the change - - poppler/XRef.cc | 25 ++++--------------------- - 1 files changed, 4 insertions(+), 21 deletions(-) - -commit 5a1f670a4d16affeed86cdf643ab22f481caa3a5 -Author: Krzysztof Kowalczyk <kkowalczyk@kjkubu.(none)> -Date: Sun Sep 23 20:42:59 2007 -0700 - - ignore *.o files - - .gitignore | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit c156aed7234f82dea4cb384c1b8a7acdd34545be -Author: Krzysztof Kowalczyk <kkowalczyk@kjkubu.(none)> -Date: Sun Sep 23 20:41:19 2007 -0700 - - remove unused variables - - poppler/ABWOutputDev.cc | 10 ++-------- - 1 files changed, 2 insertions(+), 8 deletions(-) - -commit d0bdef4752be5fa609a0766ee87aa54d51611d9a -Author: Krzysztof Kowalczyk <kkowalczyk@kjkubu.(none)> -Date: Sat Sep 22 13:38:03 2007 -0700 - - undo accidental changes to file permissions - - 0 files changed, 0 insertions(+), 0 deletions(-) - -commit 6c69473f2f4a49757614ddd249e65bb7a13c63c1 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Fri Sep 21 08:09:53 2007 -0700 - - undo accidental mode change - - 0 files changed, 0 insertions(+), 0 deletions(-) - -commit e7e386e7ce8cb8eb8a7037ebdaa601524d332ae7 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Fri Sep 21 08:08:53 2007 -0700 - - more simplification by removing unneded code - - makefile.vc | 2 +- - test/perf-test.cc | 60 - ++++++++--------------------------------------------- - 2 files changed, 10 insertions(+), 52 deletions(-) - -commit 3e10604637ec193269a3155985476d3b83dc7d62 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Fri Sep 21 07:48:38 2007 -0700 - - for portability use bool/true/false instead of BOOL/TRUE/FALSE - - test/perf-test.cc | 176 - ++++++++++++++++++++++++++--------------------------- - 1 files changed, 86 insertions(+), 90 deletions(-) - -commit 634718936f2a95fac2a9d12fcea483b3d0ca8fa6 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Fri Sep 21 07:41:14 2007 -0700 - - simplify perf-test - - test/perf-test-pdf-engine.h | 78 - ----------------------------------------- - test/perf-test-preview-win.cc | 5 +-- - test/perf-test.cc | 75 - ++++++++++++++++++++++++++++++++++++++- - 3 files changed, 75 insertions(+), 83 deletions(-) - -commit 617550199762fab42ca2e202e641e047b3efbac0 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Fri Sep 21 05:20:16 2007 -0700 - - simplify perf-test code - - test/perf-test-pdf-engine.h | 67 +++-------------------- - test/perf-test-preview-dummy.cc | 3 +- - test/perf-test-preview-win.cc | 80 +++++++++++++++++++++++---- - test/perf-test.cc | 114 - +++----------------------------------- - 4 files changed, 86 insertions(+), 178 deletions(-) - -commit fb5bf808b88992c1772a10e4ed9fe788fb618417 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Fri Sep 21 03:03:26 2007 -0700 - - more msvc build fixes - - makefile.vc | 2 +- - test/perf-test.cc | 4 ++++ - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit 60829b08a7440f36014f68ec54bee7a742412738 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Fri Sep 21 03:02:34 2007 -0700 - - msvc build fixes - - msvc/poppler/poppler-config.h | 143 - +++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 143 insertions(+), 0 deletions(-) - -commit 853c22a174bae81139edc9aeded7f26ae2655cef -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Thu Sep 20 23:21:35 2007 -0700 - - add pre-made config.h for msvc build - - msvc/config.h | 62 - +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 62 insertions(+), 0 deletions(-) - -commit 31c43b118bd4372134018be6f6693f77d1f6a39b -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Thu Sep 20 22:10:09 2007 -0700 - - remove unused variables - - poppler/CairoFontEngine.cc | 6 ++---- - poppler/CairoOutputDev.cc | 14 ++------------ - splash/SplashFTFontEngine.cc | 2 ++ - 3 files changed, 6 insertions(+), 16 deletions(-) - -commit 01b99f60e36dd955817f23911ef38947360f61f7 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Thu Sep 20 21:14:17 2007 -0700 - - remove unused variables - - poppler/GfxState.cc | 11 ++--------- - poppler/SplashOutputDev.cc | 9 +++------ - poppler/TextOutputDev.cc | 3 --- - 3 files changed, 5 insertions(+), 18 deletions(-) - -commit 7c406400532d68524a43cf963d894d3c4b269400 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Thu Sep 20 20:57:44 2007 -0700 - - remove unused variables - - poppler/Catalog.cc | 1 - - poppler/Form.cc | 5 ----- - poppler/GfxFont.cc | 6 ++---- - poppler/Page.cc | 2 +- - splash/Splash.cc | 5 ++++- - 5 files changed, 7 insertions(+), 12 deletions(-) - -commit 70f23389c97b1870b7311d97322cdd16b580a79d -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Thu Sep 20 20:23:59 2007 -0700 - - don't silence warnings about unused variables/functions to keep - programmers honest - - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit cdb6fcf98137473efd993e1374a6f010e9db67db -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Thu Sep 20 20:00:56 2007 -0700 - - Remove unused variables - - poppler/Annot.cc | 5 ++--- - 1 files changed, 2 insertions(+), 3 deletions(-) - -commit 0e76b49ac852a5a7ebae4c1f67b153e0b7c9f905 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Tue Sep 18 01:04:50 2007 -0700 - - Explain how to compile on Windows using msvc makefile. - - README.windows | 63 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 63 insertions(+), 0 deletions(-) - -commit c002b4dc75b2688ffe8a734cf3e15f5891797842 -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Tue Sep 18 00:04:47 2007 -0700 - - Add Windows/msvc makefile. - - Add native msvc windows makefile and pre-made - config.h for windows in msvc directory. - - makefile.vc | 149 - +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 149 insertions(+), 0 deletions(-) - -commit 1f33fc58201c92120c587189d2e0e819f83167da -Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> -Date: Mon Sep 17 23:53:02 2007 -0700 - - Start on a test program. - - Test program can be used for regression testing and - performance testing. It renders a page (or pages) - in a given PDF (or PDFs) and records rendering times. - For historical reasons the code is ugly and probably - only compiles on windows, but it'll get better. - - test/perf-test-pdf-engine.h | 131 ++++ - test/perf-test-preview-dummy.cc | 22 + - test/perf-test-preview-win.cc | 222 ++++++ - test/perf-test.cc | 1428 - +++++++++++++++++++++++++++++++++++++++ - 4 files changed, 1803 insertions(+), 0 deletions(-) - -commit b96db4ad27535c2666fccdfe0a3c04cc7c37792d -Author: Jeff Muizelaar <jeff@freiheit.infidigm.net> -Date: Mon Sep 17 20:28:38 2007 -0400 - - Avoid double free caused by 302 merge - - The ownership of the the string returned by getKey() changed with - the 302 merge - but this code was not updated. Found by Matthew Woehlke. - - qt4/src/poppler-document.cc | 4 +--- - 1 files changed, 1 insertions(+), 3 deletions(-) - -commit 2a495f19d4465e15fd2fa96656d904315c79a443 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Sep 17 16:52:45 2007 -0400 - - Simplify ChangeLog rule a bit. - - ChangeLog.mk | 81 - ---------------------------------------------------------- - Makefile.am | 7 +++-- - 2 files changed, 4 insertions(+), 84 deletions(-) - -commit 7d5abbeec55e4b90b139671d96cfdf58bdab70b8 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Sep 17 15:45:26 2007 -0400 - - Add dist hook to generate ChangeLog. - - Taken from cairo. It still need some tweaking. - - ChangeLog.mk | 81 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - Makefile.am | 4 +++ - configure.ac | 2 +- - 3 files changed, 86 insertions(+), 1 deletions(-) - -commit 15ad81c64cd8b1cb438d41be402daa19a239db3d -Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> -Date: Mon Sep 17 19:39:29 2007 +0200 - - Use = instead of == in qt.m4 - - m4/qt.m4 | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 70fabcb96e207b9b889bb32c0cf5ea3fc0aa08f8 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sun Sep 16 20:40:53 2007 -0400 - - Rename .cvsignore files to .gitignore and drop ChangeLog file. - - .cvsignore | 25 - - .gitignore | 25 + - ChangeLog | 4586 - --------------------------------------------- - fofi/.cvsignore | 8 - - fofi/.gitignore | 8 + - glib/.cvsignore | 11 - - glib/.gitignore | 11 + - glib/reference/.cvsignore | 18 - - glib/reference/.gitignore | 18 + - goo/.cvsignore | 8 - - goo/.gitignore | 8 + - poppler/.cvsignore | 10 - - poppler/.gitignore | 10 + - qt/.cvsignore | 7 - - qt/.gitignore | 7 + - qt4/.cvsignore | 3 - - qt4/.gitignore | 3 + - qt4/src/.cvsignore | 8 - - qt4/src/.gitignore | 8 + - qt4/tests/.cvsignore | 20 - - qt4/tests/.gitignore | 20 + - splash/.cvsignore | 8 - - splash/.gitignore | 8 + - test/.cvsignore | 11 - - test/.gitignore | 11 + - utils/.cvsignore | 12 - - utils/.gitignore | 12 + - 27 files changed, 149 insertions(+), 4735 deletions(-) - -commit c9f9403ffc5b95ae790c3c81284c7786afe33f4d -Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> -Date: Fri Sep 14 20:50:07 2007 +0000 - - Windows implementation for matching fonts that doesn't use fontconfig - - ChangeLog | 6 + - poppler/GlobalParamsWin.cc | 285 - ++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 291 insertions(+), 0 deletions(-) - -commit d18b5361a0504458da805ed6be037c9d648f9372 -Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> -Date: Fri Sep 14 20:47:11 2007 +0000 - - Update ChangeLog for previous checkin - - ChangeLog | 15 +++++++++++++++ - 1 files changed, 15 insertions(+), 0 deletions(-) - -commit 3330763ddca66b30d5ee60aab94d6fe0bbae9c8f -Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> -Date: Fri Sep 14 06:17:35 2007 +0000 - - windows/msvc compilation fixes - - poppler/DCTStream.h | 2 +- - poppler/Error.cc | 6 ++++++ - poppler/FlateStream.h | 2 +- - poppler/GlobalParams.cc | 12 ++++++++++-- - poppler/GlobalParams.h | 17 +++++++++++++++++ - poppler/Stream.cc | 2 +- - splash/SplashFTFontEngine.cc | 2 ++ - splash/SplashFontEngine.cc | 2 +- - splash/SplashFontFile.cc | 2 ++ - splash/SplashFontFile.h | 3 ++- - splash/SplashT1FontEngine.cc | 2 +- - 11 files changed, 44 insertions(+), 8 deletions(-) - -commit 6eb159ef34eb7e2fb8adcfc48afd84d5f50efbbd -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 10 17:38:05 2007 +0000 - - * autogen.sh: Support automake-1.10. - Patch by Krzysztof Kowalczyk <kkowalczyk@gmail.com> - - ChangeLog | 5 +++++ - autogen.sh | 11 ++++++----- - 2 files changed, 11 insertions(+), 5 deletions(-) - -commit 31bbc8c727cfecc79bd8da962ad8d99a0d1d3d33 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Sep 8 10:40:17 2007 +0000 - - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-ps-converter.cc: - Add PSConverter::setOutputDevice() to set a QIODevice where - writing the resulting PS. - - ChangeLog | 7 +++++ - qt4/src/poppler-ps-converter.cc | 51 - +++++++++++++++++++++++++++++++++++--- - qt4/src/poppler-qt4.h | 5 +++- - 3 files changed, 58 insertions(+), 5 deletions(-) - -commit b3d63d03c310f01cc5b23d00ffd2103c6891fef2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 5 20:22:32 2007 +0000 - - * qt4/src/poppler-ps-converter.cc: Fix Right<->Left - interchange - - ChangeLog | 1 + - qt4/src/poppler-ps-converter.cc | 4 ++-- - 2 files changed, 3 insertions(+), 2 deletions(-) - -commit 64368582d5ca4e28c236f440482c96f1dd3a8897 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 5 18:22:52 2007 +0000 - - * poppler/PSOutputDev.cc: Fix printing of second parameter - - ChangeLog | 4 ++++ - poppler/PSOutputDev.cc | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit eaf9d06cf0d08ccdc183759e0331dc2439a6f10f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Sep 5 10:57:09 2007 +0000 - - 2007-09-05 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-page.cc: - * glib/demo/render.c: Fix build with --disable-cairo-output. - - ChangeLog | 5 +++++ - glib/demo/render.c | 31 +++++++++++++++++++++++++++---- - glib/poppler-page.cc | 22 ++++++++++++---------- - 3 files changed, 44 insertions(+), 14 deletions(-) - -commit c0f488c2b0e115be3e1b7e4dc7baa38db5837498 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 4 22:04:52 2007 +0000 - - did not want to commit this - - gtk-doc.make | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 3462851b4ea342651095f1803cd488bc3b3f5749 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 4 22:02:06 2007 +0000 - - * utils/pdftoppm.cc: Fix build on Sun Studio compiler. - Patch by Brian Cameron <brian.cameron@sun.com> - - ChangeLog | 5 +++++ - gtk-doc.make | 2 +- - utils/pdftoppm.cc | 2 +- - 3 files changed, 7 insertions(+), 2 deletions(-) - -commit cdf3b9062cc54d558b8dbeefb3211a920ff2cb94 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 3 19:23:11 2007 +0000 - - write news - fix qt4 build - - NEWS | 13 +++++++++++++ - qt4/src/Makefile.am | 3 ++- - 2 files changed, 15 insertions(+), 1 deletions(-) - -commit c82208a44f3b09c27bc33831641e4f746dd4361f -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 3 18:28:44 2007 +0000 - - * configure.ac: Bump version to 0.6 - * glib/Makefile.am - * poppler/Makefile.am - * qt/Makefile.am - * qt4/src/Makefile.am: Bump sonames - - ChangeLog | 8 ++++++++ - configure.ac | 2 +- - glib/Makefile.am | 2 +- - poppler/Makefile.am | 2 +- - qt/Makefile.am | 2 +- - qt4/src/Makefile.am | 2 +- - 6 files changed, 13 insertions(+), 5 deletions(-) - -commit 2a12409ebbf96ea3ca4556b71231a45ae37cb052 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 3 17:09:01 2007 +0000 - - * poppler/JBIG2Stream.cc: - * poppler/Stream.cc: Patch by Derek B. Noonburg - <derekn@foolabs.com> - to fix some errors in CCITTFaxStream and JBIG2Stream.cc - - ChangeLog | 6 ++++++ - poppler/JBIG2Stream.cc | 7 ++++--- - poppler/Stream.cc | 2 +- - 3 files changed, 11 insertions(+), 4 deletions(-) - -commit 0b483e71ef02b4040b665935c1018c8b30b9c1ca -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Sep 3 08:54:01 2007 +0000 - - 2007-09-03 Carlos Garcia Campos <carlosgc@gnome.org> - * gtk-doc.make: - * glib/poppler-document.cc: - * glib/poppler-form-field.cc: - * glib/poppler-page.cc: - * glib/reference/poppler-docs.sgml: - * glib/reference/poppler-sections.txt: - * glib/reference/poppler.types: - * glib/reference/tmpl/poppler-action.sgml: - * glib/reference/tmpl/poppler-attachment.sgml: - * glib/reference/tmpl/poppler-document.sgml: - * glib/reference/tmpl/poppler-enums.sgml: - * glib/reference/tmpl/poppler-form-field.sgml: - * glib/reference/tmpl/poppler-page.sgml: - * glib/reference/tmpl/poppler-private.sgml: - * glib/reference/tmpl/poppler.sgml: Update glib bindings API - documentation. - - ChangeLog | 19 ++ - glib/poppler-document.cc | 10 + - glib/poppler-form-field.cc | 205 +++++++++++++++++ - glib/poppler-page.cc | 12 +- - glib/reference/poppler-docs.sgml | 2 + - glib/reference/poppler-sections.txt | 108 +++++++++- - glib/reference/poppler.types | 2 + - glib/reference/tmpl/poppler-action.sgml | 36 +++- - glib/reference/tmpl/poppler-attachment.sgml | 65 ++++++ - glib/reference/tmpl/poppler-document.sgml | 50 +++++ - glib/reference/tmpl/poppler-enums.sgml | 60 +++++ - glib/reference/tmpl/poppler-form-field.sgml | 315 - +++++++++++++++++++++++++++ - glib/reference/tmpl/poppler-page.sgml | 236 ++++++++++++++++++++- - glib/reference/tmpl/poppler-private.sgml | 6 + - glib/reference/tmpl/poppler.sgml | 49 ++++ - gtk-doc.make | 34 ++-- - 16 files changed, 1181 insertions(+), 28 deletions(-) - -commit 289e3893cda45055951bb8d3b82a45644bc0b6c6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Sep 2 17:02:55 2007 +0000 - - * poppler/GfxState.cc: Pad zeroes instead of aborting when - rendering - 1-bit images and the stream is "too short" to mimic - Acroread and - ghostscript behaviour. Patch by <darren.kenny@sun.com>. Fixes - #12208 - - ChangeLog | 3 +++ - poppler/GfxState.cc | 4 ++-- - 2 files changed, 5 insertions(+), 2 deletions(-) - -commit 6f6c2180aca2e26ea0e3c2f21f11bc8f457c19c0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Sep 2 16:31:19 2007 +0000 - - * glib/demo/Makefile.am: Add - $(top_builddir)/poppler/libpoppler.la - * poppler/TextOutputDev.cc: Patch from Ed Catmur - <ed@catmur.co.uk> to - improve matching of half strings of decomposed - characters/ligatures. - - ChangeLog | 3 +++ - glib/demo/Makefile.am | 1 + - poppler/TextOutputDev.cc | 21 +++++++++++++-------- - 3 files changed, 17 insertions(+), 8 deletions(-) - -commit be1b5a0196cdfc78f74e08a023b477cac16eb0f3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Sep 2 16:06:03 2007 +0000 - - poppler/PDFDoc.cc: Don't enforce %%EOF at the end of file - - ChangeLog | 4 ++++ - poppler/PDFDoc.cc | 3 ++- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit 500a87af9240344806c18ebbd05a89f4f4c69955 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Sep 2 00:53:42 2007 +0000 - - 2007-09-01 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: - * poppler/Error.cc: - * poppler/Error.h: Report any cairo errors when destroying - the cairo - context. - - ChangeLog | 7 +++++++ - poppler/CairoOutputDev.cc | 7 ++++++- - poppler/Error.cc | 7 +++++++ - poppler/Error.h | 1 + - 4 files changed, 21 insertions(+), 1 deletions(-) - -commit 0c22556bf70ff67eb388cdcd9784603030397785 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Sep 1 23:38:04 2007 +0000 - - 2007-09-01 Jeff Muizelaar <jeff@infidigm.net> - - * glib/demo/Makefile.am: Only build the demo app if the cflags - will be - appropriately set. - - ChangeLog | 5 +++++ - glib/demo/Makefile.am | 2 ++ - 2 files changed, 7 insertions(+), 0 deletions(-) - -commit a23d45dd6cd8a2ac4181170a9ee924fe49a9781b -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Sep 1 23:00:59 2007 +0000 - - 2007-09-01 Jeff Muizelaar <jeff@infidigm.net> - - * glib/poppler-page.cc: Add note about clipping - - ChangeLog | 4 ++++ - glib/poppler-page.cc | 2 ++ - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit bf489d5cebc467807f2b38f74f6a6e34a503a9ca -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Aug 30 18:39:51 2007 +0000 - - * poppler/Form.h: Remove unused methods. Fixes 12013 - - ChangeLog | 4 ++++ - poppler/Form.h | 3 --- - 2 files changed, 4 insertions(+), 3 deletions(-) - -commit a81cc06c855385911dffa826b9e1407d6097e8c8 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Aug 30 18:15:34 2007 +0000 - - 2007-08-30 Carlos Garcia Campos <carlosgc@gnome.org> - * poppler/TextOutputDev.cc: - * poppler/TextOutputDev.h: - * glib/poppler.h: - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/test-poppler-glib.c: Add support for word and line - selections. Based on patch by Kristian Høgsberg. - - ChangeLog | 10 ++++++ - glib/poppler-page.cc | 81 - ++++++++++++++++++++++++++++++++++++++++------ - glib/poppler-page.h | 2 + - glib/poppler.h | 4 +- - glib/test-poppler-glib.c | 2 +- - poppler/TextOutputDev.cc | 74 - +++++++++++++++++++++++++++++------------- - poppler/TextOutputDev.h | 34 +++++++++++++++---- - 7 files changed, 163 insertions(+), 44 deletions(-) - -commit 59ddb5cc8bec54305b6d256ad9975e95ecdcb935 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Aug 27 18:37:55 2007 +0000 - - * poppler/UnicodeTypeTable.cc: Fix error on the NFKC text - matching - routine. Fixes bug #11775. Patch by Ed Catmur - <ed@catmur.co.uk> - - ChangeLog | 5 +++++ - poppler/UnicodeTypeTable.cc | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit a6e46ce61670679f368e66c1a98a7d5d1c960c5b -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Aug 27 17:56:29 2007 +0000 - - * qt4/src/Doxyfile: - * qt4/src/Mainpage.dox: - * qt4/src/poppler-annotation.h: - * qt4/src/poppler-form.h: - * qt4/src/poppler-link.h: - * qt4/src/poppler-qt4.h: - A few API documentation fixes and improvements. - - ChangeLog | 10 ++++++ - qt4/src/Doxyfile | 26 +++++------------ - qt4/src/Mainpage.dox | 26 ++++++++++------ - qt4/src/poppler-annotation.h | 34 ++++++++++++++++++++++ - qt4/src/poppler-form.h | 18 ++++++------ - qt4/src/poppler-link.h | 63 - +++++++++++++++++++++++++++++++++++++++-- - qt4/src/poppler-qt4.h | 44 ++++++++++++++++++++--------- - 7 files changed, 166 insertions(+), 55 deletions(-) - -commit a7f8d92fba8c45d6ca83568c045d5e324158ee6b -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Aug 27 17:17:14 2007 +0000 - - * qt4/src/poppler-link.cc: - * qt4/src/poppler-link.h: - Initialise correctly, and missing empty destructor. - * qt4/src/poppler-annotation.cc: - Don't leak the private class. - - ChangeLog | 9 +++++++++ - qt4/src/poppler-annotation.cc | 4 ++-- - qt4/src/poppler-link.cc | 8 ++++++-- - qt4/src/poppler-link.h | 1 + - 4 files changed, 18 insertions(+), 4 deletions(-) - -commit 2b1ef8f06879eb0b79288d57540c238ea833db24 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Aug 26 21:39:22 2007 +0000 - - Fix bug 12121 - - ChangeLog | 4 ++++ - utils/ImageOutputDev.cc | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit 20bcac5ee1988befb9c590a0d16cb615f0c49901 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Aug 26 21:28:34 2007 +0000 - - forgot to cvs add - - qt4/src/poppler-annotation-private.h | 49 - ++++++++++++++++++++++++++++++++++ - 1 files changed, 49 insertions(+), 0 deletions(-) - -commit e48de657db0ef439457b4b5ca39b937da25d531e -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Aug 26 18:11:01 2007 +0000 - - * qt4/src/poppler-annotation.cc: - * qt4/src/poppler-annotation.h: - Move all the private members of the *Annotation classes into - a common - shared private. - - ChangeLog | 4 + - qt4/src/poppler-annotation.cc | 969 - ++++++++++++++++++++++++++++++++++------- - qt4/src/poppler-annotation.h | 277 ++++++++---- - qt4/src/poppler-page.cc | 249 +++++++---- - 4 files changed, 1155 insertions(+), 344 deletions(-) - -commit 392f050f909b6a1250acf1971446a1849534482c -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Aug 26 16:42:46 2007 +0000 - - * qt4/src/poppler-document.cc: - * qt4/src/poppler-embeddedfile.cc: - * qt4/src/poppler-fontinfo.cc: - * qt4/src/poppler-form.cc: - * qt4/src/poppler-form.h: - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-sound.cc: - * qt4/src/poppler-textbox.cc: - API work: remove 'const' and 'const&' from return values - with Qt - classes; make the non-copiable classes really non-copiable; - uninline a Document::page() method; other related small - changes. - * qt4/src/poppler-link.cc: - * qt4/src/poppler-link.h: - Make LinkDestination an implicitely shared class, with all - the private - members into the private class; move all the private members - of the - Link* classes into a common shared private. - - ChangeLog | 23 +++- - qt4/src/poppler-document.cc | 7 +- - qt4/src/poppler-embeddedfile.cc | 12 -- - qt4/src/poppler-fontinfo.cc | 12 +- - qt4/src/poppler-form.cc | 16 +- - qt4/src/poppler-form.h | 14 +- - qt4/src/poppler-link.cc | 373 - ++++++++++++++++++++++++++++++--------- - qt4/src/poppler-link.h | 67 +++++--- - qt4/src/poppler-qt4.h | 32 +++-- - qt4/src/poppler-sound.cc | 7 - - qt4/src/poppler-textbox.cc | 4 +- - 11 files changed, 404 insertions(+), 163 deletions(-) - -commit f215aca25fdd8fe287b717dde53f0be273d995e4 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun Aug 26 10:52:19 2007 +0000 - - 2007-08-26 Carlos Garcia Campos <carlosgc@gnome.org> - * configure.ac: - * glib/Makefile.am: - * glib/demo/Makefile.am: - * glib/demo/fonts.[ch]: - * glib/demo/info.[ch]: - * glib/demo/links.[ch]: - * glib/demo/main.c: - * glib/demo/outline.[ch]: - * glib/demo/page.[ch]: - * glib/demo/render.[ch]: - * glib/demo/utils.[ch]: Add poppler glib demo tool. - - ChangeLog | 14 ++ - configure.ac | 1 + - glib/Makefile.am | 2 +- - glib/demo/Makefile.am | 26 +++ - glib/demo/fonts.c | 276 +++++++++++++++++++++++++++ - glib/demo/fonts.h | 31 +++ - glib/demo/info.c | 243 ++++++++++++++++++++++++ - glib/demo/info.h | 31 +++ - glib/demo/links.c | 289 ++++++++++++++++++++++++++++ - glib/demo/links.h | 31 +++ - glib/demo/main.c | 205 ++++++++++++++++++++ - glib/demo/outline.c | 218 +++++++++++++++++++++ - glib/demo/outline.h | 31 +++ - glib/demo/page.c | 249 ++++++++++++++++++++++++ - glib/demo/page.h | 31 +++ - glib/demo/render.c | 498 - +++++++++++++++++++++++++++++++++++++++++++++++++ - glib/demo/render.h | 31 +++ - glib/demo/utils.c | 234 +++++++++++++++++++++++ - glib/demo/utils.h | 42 ++++ - 19 files changed, 2482 insertions(+), 1 deletions(-) - -commit 7c9529b70dc44bb001d21a3b47fc65916813dec1 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Aug 23 20:39:31 2007 +0000 - - 2007-08-23 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-page.cc: Add missing comma. - - ChangeLog | 4 ++++ - glib/poppler-page.cc | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit 3c4a85503261ee81a829a1683f1f5fa85d41f8ee -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Thu Aug 23 20:15:46 2007 +0000 - - 2007-08-23 Jeff Muizelaar <jeff@infidigm.net> - - * glib/poppler-page.cc: pass in -1 to displaySlice so that it - sets up - the slice size for us. This fixes the case of the wrong values - being - used when the pdf was rotated on its side. - Fixes #11913. - - ChangeLog | 7 +++++++ - glib/poppler-page.cc | 5 ++--- - 2 files changed, 9 insertions(+), 3 deletions(-) - -commit 3ba088d8caee3c40c2aba0cd85adcf9195ae88a3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Aug 22 21:29:32 2007 +0000 - - * splash/SplashBitmap.cc: - * splash/SplashBitmap.h: - * utils/pdftoppm.cc: Add the following features to pdftoppm - - if omitting input filename or using - for input filename - reads pdf from stdin - - if omitting output filename, prints output to stdout - - create image of a cropped rectangle of the pdf - - scale pdf to fit in a square of wanted size - Patch by Ilmari Heikkinen <ilmari.heikkinen@gmail.com> - - ChangeLog | 12 +++++ - splash/SplashBitmap.cc | 18 ++++++-- - splash/SplashBitmap.h | 2 + - utils/pdftoppm.cc | 107 - ++++++++++++++++++++++++++++++++++++++++------- - 4 files changed, 119 insertions(+), 20 deletions(-) - -commit 567e82c13aace4f40c7a555a62a3a4d223a46d92 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Aug 22 19:34:02 2007 +0000 - - 2007-08-22 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/GlobalParams.cc: Fix debug spew. Patch from Matthias - Clasen. - - ChangeLog | 4 ++++ - poppler/GlobalParams.cc | 1 - - 2 files changed, 4 insertions(+), 1 deletions(-) - -commit bc499987074d046baf29deafe4a29d57039c0c5e -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Aug 22 19:28:24 2007 +0000 - - 2007-08-22 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: Fix the computation of the padding - in the - image scaling code. - - ChangeLog | 5 +++++ - poppler/CairoOutputDev.cc | 6 ++++-- - 2 files changed, 9 insertions(+), 2 deletions(-) - -commit d9719233447cb4f85f2bf9d9ec6ef089caa21140 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Aug 19 16:20:21 2007 +0000 - - 2007-08-19 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: Avoid allocating the glyph array if - currentFont is not set in beginString. This closes a possible - memory leak. - - ChangeLog | 6 ++++++ - poppler/CairoOutputDev.cc | 3 +++ - 2 files changed, 9 insertions(+), 0 deletions(-) - -commit 099eb56896046e020f4ef0365e1ee382f85ec1ab -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Aug 15 18:52:20 2007 +0000 - - * poppler/JBIG2Stream.cc: Quick fix for bug #12014 - - ChangeLog | 4 ++++ - poppler/JBIG2Stream.cc | 16 +++++++++++----- - 2 files changed, 15 insertions(+), 5 deletions(-) - -commit 3b7e3645c85c7a3d341457f105835b58c935bd67 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Aug 15 00:04:48 2007 +0000 - - RC2 is out! (0.5.91) - - ChangeLog | 1 + - NEWS | 18 ++++++++++++++++++ - configure.ac | 2 +- - 3 files changed, 20 insertions(+), 1 deletions(-) - -commit c240daefe660ac3456dc0c5f5dc82aa53ebc3313 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Aug 14 23:10:37 2007 +0000 - - * poppler/Stream.cc: Fix CVE-2007-3387 by merging xpdf-3.02pl1.patch - - ChangeLog | 1 + - poppler/Stream.cc | 12 +++++------- - 2 files changed, 6 insertions(+), 7 deletions(-) - -commit 1ba884b6b98ac8d755c9adc9f23a7a68d8b17b54 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Aug 14 22:47:30 2007 +0000 - - * configure.ac: - * pòppler/Makefile.am: Patch by Vincent Torri - <vtorri@univ-evry.fr> to - fix linking under MinGW - - ChangeLog | 6 ++++++ - configure.ac | 13 +++++++++++++ - poppler/Makefile.am | 5 +++-- - 3 files changed, 22 insertions(+), 2 deletions(-) - -commit 3c31f923fcf1aeb361910eb1e9445cc28aa5b3ca -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Tue Aug 7 16:22:12 2007 +0000 - - 2007-08-07 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: Don't use the prescaleMethod - when we have a rotation as that case has not been tested. - Also make sure that scaledHeight is at least 1. - - ChangeLog | 6 ++++++ - poppler/CairoOutputDev.cc | 7 ++++++- - 2 files changed, 12 insertions(+), 1 deletions(-) - -commit af97e5f8e0f3beeb43acde92a0788c02d9718adf -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Aug 6 17:41:17 2007 +0000 - - 2007-08-06 Carlos Garcia Campos <carlosgc@gnome.org> - * poppler/Annot.cc: - * poppler/Annot.h: - * poppler/Form.cc: - * poppler/Form.h: - * poppler/Page.cc: Do not always regenerate appearance stream for - every form widget, but only when it's actually needed. - - ChangeLog | 9 +++++ - poppler/Annot.cc | 86 - ++++++++++++++++++++++++++++++++--------------------- - poppler/Annot.h | 8 ++-- - poppler/Form.cc | 25 ++------------- - poppler/Form.h | 4 ++- - poppler/Page.cc | 8 +---- - 6 files changed, 74 insertions(+), 66 deletions(-) - -commit 74627e71388ca0a4c0938a472c291ef87186f370 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Tue Jul 31 21:40:19 2007 +0000 - - 2007-07-31 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/GlobalParams.cc: s/GList/GooList/ some Windows code. - - ChangeLog | 4 ++++ - poppler/GlobalParams.cc | 8 ++++---- - 2 files changed, 8 insertions(+), 4 deletions(-) - -commit f421e2151345ac855b75e819e19343a90789b3bf -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Tue Jul 31 16:50:06 2007 +0000 - - 2007-07-31 Jeff Muizelaar <jeff@infidigm.net> - - * glib/poppler-document.cc: - * glib/poppler-document.h: Add poppler_fonts_iter_get_file_name. - - ChangeLog | 5 +++++ - glib/poppler-document.cc | 16 ++++++++++++++++ - glib/poppler-document.h | 1 + - 3 files changed, 22 insertions(+), 0 deletions(-) - -commit 4d57b8a12b845d5d5ac321d7a4bca980d60d429f -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Tue Jul 31 16:48:35 2007 +0000 - - 2007-07-31 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.h: Add comment about - CairoImageOutputDevice's - implementation. - - ChangeLog | 5 +++++ - poppler/CairoOutputDev.h | 1 + - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit f04a67006abdb5843ab481aa1e25b51abd1b1b64 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jul 31 11:41:53 2007 +0000 - - 2007-07-31 Carlos Garcia Campos <carlosgc@gnome.org> - * poppler/Form.cc: - * poppler/Form.h: Fix memory leak. - - ChangeLog | 5 +++++ - poppler/Form.cc | 9 +++++---- - poppler/Form.h | 4 ++-- - 3 files changed, 12 insertions(+), 6 deletions(-) - -commit ee9d556a8b413160911a535a0e9089b919ca29f5 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jul 31 11:40:22 2007 +0000 - - 2007-07-31 Carlos Garcia Campos <carlosgc@gnome.org> - * poppler/CairoOutputDev.h: Empty implementation of transparency - groups and soft masks in CairoImageOutputDev. Fixes a crash in - poppler_page_get_image_mapping. - - ChangeLog | 6 ++++++ - poppler/CairoOutputDev.h | 11 +++++++++++ - 2 files changed, 17 insertions(+), 0 deletions(-) - -commit e08779856c801b9968dc2d47e28e86abc1ec7110 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Tue Jul 31 05:29:57 2007 +0000 - - 2007-07-31 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/GfxFont.cc: Fix the case where the Encoding is - "Identity" - and ToUnicode exists. GfxCIDFont::getCodeToGIDMap makes - CIDTOGID map - from ToUnicde map, but when encoding is Identity, it should - not use - ToUnicode map to get GID. If encoding is Identity, No CIDTOGID - map is - needed. - Patch by Koji Otani. - Fixes #11413. - - ChangeLog | 10 ++++++++++ - poppler/GfxFont.cc | 1 + - 2 files changed, 11 insertions(+), 0 deletions(-) - -commit 86fc9a6f343be920f5159e745947401227e41a37 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Mon Jul 30 19:28:17 2007 +0000 - - 2007-07-30 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDev.h: Prescale image masks before giving - them - to cairo to improve the quality of the scaled image. Improves - #5589. - - ChangeLog | 6 + - poppler/CairoOutputDev.cc | 300 - +++++++++++++++++++++++++++++++++++++++++++-- - poppler/CairoOutputDev.h | 10 ++- - 3 files changed, 303 insertions(+), 13 deletions(-) - -commit f754246e47161e9bf99887201e283c1419ade4f1 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Mon Jul 30 19:07:45 2007 +0000 - - 2007-07-30 Jeff Muizelaar <jeff@infidigm.net> - - * configure.ac: Update require cairo version to 1.4 - - ChangeLog | 4 ++++ - configure.ac | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit bb20249ac676995725b617ef442f5feb01f78205 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Mon Jul 30 18:44:41 2007 +0000 - - 2007-07-30 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDev.h: Add transparency group support. - Fixes #7856. - - ChangeLog | 6 ++ - poppler/CairoOutputDev.cc | 133 - +++++++++++++++++++++++++++++++++++++++++++++ - poppler/CairoOutputDev.h | 21 +++++++- - 3 files changed, 159 insertions(+), 1 deletions(-) - -commit a85acecaeb0d122becbc52a385d918561e995eca -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Mon Jul 30 00:22:35 2007 +0000 - - 2007-07-29 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDev.h: transform the original matrix for - type3 fonts - instead of using set_matrix() - - ChangeLog | 6 ++++++ - poppler/CairoOutputDev.cc | 20 +++++++++++++++++--- - poppler/CairoOutputDev.h | 1 + - 3 files changed, 24 insertions(+), 3 deletions(-) - -commit a81a082169de32d01c36c969616a5c2279f1bac7 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Mon Jul 30 00:18:59 2007 +0000 - - 2007-07-29 Jeff Muizelaar <jeff@infidigm.net> - - * glib/test-poppler-glib.c: include <time.h> to fix compilation. - - ChangeLog | 4 ++++ - glib/test-poppler-glib.c | 1 + - 2 files changed, 5 insertions(+), 0 deletions(-) - -commit 81393cb30f6287caf5195265cdc039555f2767d3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jul 28 08:22:40 2007 +0000 - - 2007-07-28 Carlos Garcia Campos <carlosgc@gnome.org> - * poppler/Annot.cc: - * poppler/Annot.h: - * poppler/Form.cc: - * poppler/Form.h: Make fieldLookup static in Form and use it from - both Form and Annot. - - ChangeLog | 8 ++++++ - poppler/Annot.cc | 43 +++++++++------------------------- - poppler/Annot.h | 1 - - poppler/Form.cc | 66 - ++++++++++++++++++++++++++--------------------------- - poppler/Form.h | 2 + - 5 files changed, 54 insertions(+), 66 deletions(-) - -commit 81b669dcb14bf821a49c9879f8d4129075647f5f -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jul 28 08:05:11 2007 +0000 - - 2007-07-28 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-page.h: Remove unneeded declarations. Fixes bug - #11744. Patch by Kouhei Sutou <kou@cozmixng.org>. - - ChangeLog | 5 +++++ - glib/poppler-page.h | 2 -- - 2 files changed, 5 insertions(+), 2 deletions(-) - -commit f2c4e5305009f1da770c99d3e2e3371ff37c75f3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri Jul 27 09:17:40 2007 +0000 - - 2007-07-27 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-document.cc: - * glib/poppler-document.h: - * glib/poppler-private.h: - * glib/test-poppler-glib.c: Make PopplerFontInfo GObject. Patch by - Kouhei Sutou <kou@cozmixng.org>. - - ChangeLog | 8 ++++++++ - glib/poppler-document.cc | 44 - ++++++++++++++++++++++++++++++++++++++++---- - glib/poppler-document.h | 6 +++++- - glib/poppler-private.h | 1 + - glib/test-poppler-glib.c | 2 +- - 5 files changed, 55 insertions(+), 6 deletions(-) - -commit 975c7cff10d9b00359e147329ae2c7a93f8a3833 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jul 25 17:20:06 2007 +0000 - - micro optimization - - qt4/src/poppler-page.cc | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 525a7f49dd95f2644870a1c59ca15124e30026b4 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jul 24 16:45:25 2007 +0000 - - 2007-07-24 Carlos Garcia Campos <carlosgc@gnome.org> - * poppler/Annot.cc: - * poppler/Form.cc: Several fixes in forms. Generate appearance for - field buttons that don't have an AP dict. Do not remove the first - character of the second and following lines in multiline text - fields. Fix a crash with pdf documents created by ooo which have - radio buttons. Look for some inheritable attributes in the - parent when needed. - - ChangeLog | 10 +++++++ - poppler/Annot.cc | 27 ++++++++++--------- - poppler/Form.cc | 77 - +++++++++++++++++++++++++++++++++++++---------------- - 3 files changed, 78 insertions(+), 36 deletions(-) - -commit 633a1cde65f86ee6577a68f4f8d36de43d14c714 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jul 15 21:03:50 2007 +0000 - - * utils/HtmlOutputDev.cc: - * utils/HtmlOutputDev.h: Create the html files in the - correct place, - not in the invocation dir. Fixes bug #11610 - - ChangeLog | 6 ++++++ - utils/HtmlOutputDev.cc | 37 ++++++++++--------------------------- - utils/HtmlOutputDev.h | 4 ---- - 3 files changed, 16 insertions(+), 31 deletions(-) - -commit ccb2d420ca8d818aa9ba1d64f08f5e94ab313a72 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jul 15 17:09:29 2007 +0000 - - * poppler/DCTStream.cc - * poppler/DCTStream.h: Implement less evil error handling. On - a - error_exit level error we don't want to actually exit the - program. See - http://bugs.kde.org/show_bug.cgi?id=147878 for a pdf with this - problem. libjpeg was printing "Bogus Huffman table definition" - and - exiting the program. - * poppler/Stream.cc: Remove bogus #warning - - ChangeLog | 10 ++++++++++ - poppler/DCTStream.cc | 17 ++++++++++++++++- - poppler/DCTStream.h | 1 + - poppler/Stream.cc | 1 - - 4 files changed, 27 insertions(+), 2 deletions(-) - -commit f9d82dfd299ae23a1baf3e35e2c3cd351129c525 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jul 14 18:23:42 2007 +0000 - - * utils/pdftops.cc: init width/height to -1 so it is - calculated if not - specified - - ChangeLog | 5 +++++ - utils/pdftops.cc | 4 ++-- - 2 files changed, 7 insertions(+), 2 deletions(-) - -commit 1c04136e9538ccfaa2d6b968861682ca3b69ffb3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jul 14 15:23:31 2007 +0000 - - 2007-07-14 Pino Toscano <pino@kde.org> - * glib/poppler-action.h: - * glib/poppler-document.h: Remove trailing comma from the last - item of enums. - - ChangeLog | 6 ++++++ - glib/poppler-action.h | 2 +- - glib/poppler-document.h | 8 ++++---- - 3 files changed, 11 insertions(+), 5 deletions(-) - -commit b9b68cabce19a5e23911e5432ace8c13bd237391 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jul 14 15:15:57 2007 +0000 - - 2007-07-14 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-form-field.cc: - * glib/poppler-form-field.h: - * glib/test-poppler-glib.c: Make is_password a property instead of - a text form field type, since a text field could be multiline and - password at the same time. - - ChangeLog | 8 ++++++++ - glib/poppler-form-field.cc | 10 ++++++++-- - glib/poppler-form-field.h | 2 +- - glib/test-poppler-glib.c | 4 ++-- - 4 files changed, 19 insertions(+), 5 deletions(-) - -commit 14a8361039d708661b8699b2e7c4496135021a85 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 13 22:18:05 2007 +0000 - - * fofi/FoFiTrueType.cc - * fofi/FoFiTrueType.h - * poppler/CairoFontEngine.cc - * poppler/CharCodeToUnicode.cc - * poppler/CharCodeToUnicode.h - * poppler/GfxFont.cc - * poppler/GfxFont.h - * poppler/SplashOutputDev.cc: Patch by - Koji Otani <sho@bbr.jp> to fix several problems with - Japanese fonts. - Fixes bug 11413 - - ChangeLog | 13 ++ - fofi/FoFiTrueType.cc | 305 - ++++++++++++++++++++++++++++++++++++++++++ - fofi/FoFiTrueType.h | 12 ++ - poppler/CairoFontEngine.cc | 47 ++----- - poppler/CharCodeToUnicode.cc | 16 +++ - poppler/CharCodeToUnicode.h | 1 + - poppler/GfxFont.cc | 232 ++++++++++++++++++++++++++++---- - poppler/GfxFont.h | 2 + - poppler/SplashOutputDev.cc | 53 ++------ - 9 files changed, 578 insertions(+), 103 deletions(-) - -commit 8389099d8e8940e3f8920b14a83075d69bcd8e6c -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 13 18:21:02 2007 +0000 - - * poppler/FontInfo.cc: Fix the FontInfoScanner::scan method to - actually scan the number of requested pages - - ChangeLog | 6 ++++++ - poppler/FontInfo.cc | 12 ++++++------ - 2 files changed, 12 insertions(+), 6 deletions(-) - -commit 9ced4442372d08375e0ded62f79052d8a3ec9cd6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 13 18:08:44 2007 +0000 - - * poppler/GlobalParams.cc: Remove dead unused code from - Win32 ifdef - - ChangeLog | 4 ++++ - poppler/GlobalParams.cc | 6 ------ - 2 files changed, 4 insertions(+), 6 deletions(-) - -commit fb89fdb8de608ff94082e16819f042cddabf2bcc -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jul 11 18:52:12 2007 +0000 - - * poppler/PSOutputDev.cc - * poppler/PSOutputDev.h - * utils/pdftohtml.cc: Fix bug 9746. pdftohtml complex mode - had text - twice - - ChangeLog | 7 +++++++ - poppler/PSOutputDev.cc | 5 +++++ - poppler/PSOutputDev.h | 2 ++ - utils/pdftohtml.cc | 3 +-- - 4 files changed, 15 insertions(+), 2 deletions(-) - -commit 0c9fa59bf5edf3cfcca1792da51b904a7c7f7615 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jul 11 18:30:19 2007 +0000 - - 2007-07-11 Carlos Garcia Campos <carlosgc@gnome.org> - * poppler/Form.cc: - * poppler/XRef.cc: - * poppler/XRef.h: Fix memory leak. - - ChangeLog | 6 ++++++ - poppler/Form.cc | 49 ++++++++++++++++++++++++------------------------- - poppler/XRef.cc | 22 ++++++++++------------ - poppler/XRef.h | 2 +- - 4 files changed, 41 insertions(+), 38 deletions(-) - -commit 4ae7d43bd54c5b3e2f08c48441f741d3099e228f -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jul 11 18:12:26 2007 +0000 - - * goo/GooVector.h: Rename guard from _VECTOR_H to GOO_VECTOR_H - * goo/gfile.cc: GString -> GooString in Windows code - * poppler/GlobalParams.cc: GString -> GooString in Windows - code - * splash/SplashT1FontEngine.cc - * splash/SplashT1FontEngine.h - * splash/SplashT1FontFile.cc - * splash/SplashT1FontFile.h: T1 code is not supported, - but at least - make it compile :-D - - ChangeLog | 11 +++++++++++ - goo/GooVector.h | 4 ++-- - goo/gfile.cc | 6 +++--- - poppler/GlobalParams.cc | 26 +++++++++++++------------- - splash/SplashFontEngine.cc | 2 +- - splash/SplashT1FontEngine.cc | 8 ++++---- - splash/SplashT1FontEngine.h | 7 +++---- - splash/SplashT1FontFile.cc | 8 +++++--- - splash/SplashT1FontFile.h | 4 ++-- - 9 files changed, 44 insertions(+), 32 deletions(-) - -commit 7bd125ce96c603fd5cf42d7c6a29b542e82dd4ec -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jul 11 18:08:07 2007 +0000 - - 2007-07-11 Carlos Garcia Campos <carlosgc@gnome.org> - * poppler/Form.cc: - * poppler/Form.h: - * glib/poppler-form-field.cc: - * glib/poppler-form-field.h: - * glib/test-poppler-glib.c: Add a method to get the max length - allowed in text form fields. - - ChangeLog | 9 +++++++++ - glib/poppler-form-field.cc | 8 ++++++++ - glib/poppler-form-field.h | 1 + - glib/test-poppler-glib.c | 1 + - poppler/Form.cc | 11 +++++++++++ - poppler/Form.h | 4 ++++ - 6 files changed, 34 insertions(+), 0 deletions(-) - -commit 8a68855735e9d295d71685e82de39204d639ea7a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Jul 9 08:52:58 2007 +0000 - - 2007-07-09 Carlos Garcia Campos <carlosgc@gnome.org> - * poppler/Annot.cc: - * poppler/Annot.h: Render '*' instead of the actual content in - password form fields. Patch by Julien Rebetez <julien@fhtagn.net> - - ChangeLog | 6 ++++++ - poppler/Annot.cc | 52 - +++++++++++++++++++++++++++++----------------------- - poppler/Annot.h | 5 +++-- - 3 files changed, 38 insertions(+), 25 deletions(-) - -commit 53cf7d7084dc03a28239f11c94f2095bb02d6108 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jul 7 16:23:56 2007 +0000 - - 2007-07-07 Carlos Garcia Campos <carlosgc@gnome.org> - * poppler/Form.cc: - * poppler/Form.h: - * glib/poppler-form-field.cc: - * glib/poppler-form-field.h: - * glib/test-poppler-glib.c: Add a method to get the type of a Form - Field Button. - - ChangeLog | 9 +++++++++ - glib/poppler-form-field.cc | 18 ++++++++++++++++++ - glib/poppler-form-field.h | 8 ++++++++ - glib/test-poppler-glib.c | 26 +++++++++++++++++++++++--- - poppler/Form.cc | 5 +++++ - poppler/Form.h | 2 ++ - 6 files changed, 65 insertions(+), 3 deletions(-) - -commit de0a40181e5832a0dc263d40ed0a269867764623 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jul 7 15:28:29 2007 +0000 - - 2007-07-07 Carlos Garcia Campos <carlosgc@gnome.org> - * poppler/Form.cc: Fix a crash when setting state on buttons that - don't have state. - - ChangeLog | 5 +++++ - poppler/Form.cc | 3 +++ - 2 files changed, 8 insertions(+), 0 deletions(-) - -commit a33518a3283ff25aa5517bc535ddb61383b1cfdc -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 6 09:08:44 2007 +0000 - - * poppler/Form.cc: Fix a bug with FormField's destructor - which was not - checking if the FormField is terminal to determine wether - it needs to - delete children or widgets. Patch by - Julien Rebetez <julien@fhtagn.net> - - ChangeLog | 4 ++++ - poppler/Form.cc | 17 +++++++++++------ - 2 files changed, 15 insertions(+), 6 deletions(-) - -commit 43f0d5b9bb198cdcbc2f7111f294c6f947105314 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 6 08:47:11 2007 +0000 - - * goo/GooString.cc: - * poppler/ABWOutputDev.cc: Build on Sun Force compiler, - patch by - Darren Kenny <darren.kenny@sun.com> - - ChangeLog | 6 ++++++ - goo/GooString.cc | 2 +- - poppler/ABWOutputDev.cc | 4 +++- - 3 files changed, 10 insertions(+), 2 deletions(-) - -commit 4e7405071b69889362e4d49de3f881f0e3e261e3 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 5 13:04:01 2007 +0000 - - 2007-07-05 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-form-field.cc: Allow to set NULL in form fields - that can contain text. - - ChangeLog | 5 +++++ - glib/poppler-form-field.cc | 30 ++++++++++++------------------ - 2 files changed, 17 insertions(+), 18 deletions(-) - -commit 625510797c528257527003477fe28adbacfe80e7 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Thu Jul 5 08:13:51 2007 +0000 - - 2007-07-05 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-attachment.cc: - * glib/poppler-attachment.h: - * glib/test-poppler-glib.c: Rename cdate and mdate again to ctime - and mtime, since they are public attributes and we don't want to - break the API. - - ChangeLog | 8 ++++++++ - glib/poppler-attachment.cc | 4 ++-- - glib/poppler-attachment.h | 4 ++-- - glib/test-poppler-glib.c | 4 ++-- - 4 files changed, 14 insertions(+), 6 deletions(-) - -commit 9b2640f156f24b07c797d9461f84e64d550efa1a -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jul 4 13:57:31 2007 +0000 - - * qt4/src/poppler-form.cc: QStringToGooString -> - QStringToUnicodeGooString has FormWidgetText::setContent - wants to have - the unicode formated string - * qt4/src/poppler-private.h: create QStringToUnicodeGooString - - ChangeLog | 7 +++++++ - qt4/src/poppler-form.cc | 2 +- - qt4/src/poppler-private.h | 15 +++++++++++++++ - 3 files changed, 23 insertions(+), 1 deletions(-) - -commit b70115cf979b29f75c644518ae0e9c0dd9892ebf -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jul 4 13:06:38 2007 +0000 - - 2007-07-04 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-form-field.cc: Convert strings from UTF8 to UTF16BE - before setting them. - - ChangeLog | 5 +++++ - glib/poppler-form-field.cc | 34 ++++++++++++++++++++++++---------- - 2 files changed, 29 insertions(+), 10 deletions(-) - -commit d37843877a6f93a9f27502d07ad82cba79e9aa73 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Wed Jul 4 08:26:52 2007 +0000 - - 2007-07-04 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-attachment.cc: - * glib/poppler-attachment.h: Add size, creation and modification - date and checksum properties to attachments. Fix memory leaks. - * glib/test-poppler-glib.c: - * glib/poppler.h: - * glib/poppler-private.h: - * glib/poppler-document.cc: Add a function to convert a pdf date - into a GTime that is used by attachments and document - properties. Fix memory leak in attachments. - - ChangeLog | 12 ++++ - glib/poppler-attachment.cc | 25 +++++++- - glib/poppler-attachment.h | 16 +++-- - glib/poppler-document.cc | 142 - +++++++++++++++++++++++--------------------- - glib/poppler-private.h | 6 +- - glib/poppler.h | 1 + - glib/test-poppler-glib.c | 56 +++++++++++++++-- - 7 files changed, 171 insertions(+), 87 deletions(-) - -commit d933f47d4af0992059148259a189373b42499bbe -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jul 3 20:31:20 2007 +0000 - - * qt4/tests/poppler-fonts.cpp: For the sake of completeness, - add all - the enums - - ChangeLog | 2 ++ - qt4/tests/poppler-fonts.cpp | 28 ++++++++++++++++++++-------- - 2 files changed, 22 insertions(+), 8 deletions(-) - -commit d90b166cfbdc4857351baa627d158d5e0b6652b4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jul 3 16:46:51 2007 +0000 - - * poppler/Catalog.cc: Fix crash, - embeddedFileNameTree.getName(i) - returns a reference to its own data so does not have to - be deleted - * qt4/tests/poppler-attachments.cpp: Delete the doc, just - for sake of - correctness - - ChangeLog | 7 +++++++ - poppler/Catalog.cc | 1 - - qt4/tests/poppler-attachments.cpp | 1 + - 3 files changed, 8 insertions(+), 1 deletions(-) - -commit 7fa87eb2b093770271bc3a72de5b0b9dc228aa1b -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jul 3 14:01:40 2007 +0000 - - 2007-07-03 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-form-field.cc: - * glib/poppler-form-field.h: - * glib/test-poppler-glib.c: Add choice_commit_on_change function - to glib bindings. - - ChangeLog | 7 +++++++ - glib/poppler-form-field.cc | 8 ++++++++ - glib/poppler-form-field.h | 1 + - glib/test-poppler-glib.c | 2 ++ - 4 files changed, 18 insertions(+), 0 deletions(-) - -commit 8b67e0403f6eaab6770cc0b7861074ae0b6d85bb -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Tue Jul 3 13:49:18 2007 +0000 - - 2007-07-03 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-form-field.cc: - * glib/poppler-form-field.h: - * glib/test-poppler-glib.c: Fix a typo. - - ChangeLog | 6 ++++++ - glib/poppler-form-field.cc | 2 +- - glib/poppler-form-field.h | 2 +- - glib/test-poppler-glib.c | 2 +- - 4 files changed, 9 insertions(+), 3 deletions(-) - -commit 33a5765eb404a4b321b09c26af74c1ed64a5d474 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jul 3 13:22:54 2007 +0000 - - * poppler/Catalog.cc: - * poppler/Catalog.h: Add size and checksum properties to - the embeded - files - * qt4/src/poppler-embeddedfile.cc: - * qt4/src/poppler-qt4.h: Add size and checksum properties - to the qt4 - frontend - - ChangeLog | 9 +++++++++ - poppler/Catalog.cc | 19 ++++++++++++++++--- - poppler/Catalog.h | 13 +++++++++++-- - qt4/src/poppler-embeddedfile.cc | 16 ++++++++++++++++ - qt4/src/poppler-qt4.h | 14 ++++++++++++++ - 5 files changed, 66 insertions(+), 5 deletions(-) - -commit c7d21f9354bbe090cce6459124dcaadf1e46639e -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Jul 2 13:39:32 2007 +0000 - - 2007-07-02 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-form-field.cc: - * glib/poppler-form-field.h: - * glib/test-poppler-glib.c: - Use FILE_SELECT instead of FILESELECT and fix a typo. Patch by - Kouhei Sutou - - ChangeLog | 9 +++++++++ - glib/poppler-form-field.cc | 2 +- - glib/poppler-form-field.h | 2 +- - glib/test-poppler-glib.c | 2 +- - 4 files changed, 12 insertions(+), 3 deletions(-) - -commit 5e301064c62c6d58f488839d7bf804af912a3de1 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Mon Jul 2 13:34:26 2007 +0000 - - 2007-07-02 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-form-field.cc: - * glib/poppler-form-field.h: - * glib/test-poppler-glib.c: - Add poppler_form_field_is_read_only to glib bindings. Patch by - Kouhei Sutou - - ChangeLog | 9 +++++++++ - glib/poppler-form-field.cc | 8 ++++++++ - glib/poppler-form-field.h | 1 + - glib/test-poppler-glib.c | 6 +++++- - 4 files changed, 23 insertions(+), 1 deletions(-) - -commit 11875746ce28e8999bcad46167fcfea131cd267a -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jun 30 08:33:30 2007 +0000 - - 2007-06-30 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-page.cc: Use poppler_page_transition_get_type - instead of poppler_page_transition which doesn't exist. Patch by - Kouhei Sutou - - ChangeLog | 6 ++++++ - glib/poppler-page.cc | 2 +- - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit 0a5acaae3b9bfcd731bc4e072f35f9433aa773da -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jun 30 08:25:15 2007 +0000 - - 2007-06-30 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/Makefile.am: - * glib/poppler-form-field.cc: - * glib/poppler-form-field.h: - * glib/poppler-document.cc: - * glib/poppler-document.h: - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/poppler-private.h: - * glib/poppler.h: - * glib/test-poppler-glib.c: Improve forms API in the glib bindings - in order to make it more consistent with the current API and - easier to use. - - ChangeLog | 15 ++ - glib/Makefile.am | 2 + - glib/poppler-document.cc | 197 ++------------------------- - glib/poppler-document.h | 55 +-------- - glib/poppler-form-field.cc | 316 - ++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-form-field.h | 96 +++++++++++++ - glib/poppler-page.cc | 210 ++++++++++++----------------- - glib/poppler-page.h | 55 ++------- - glib/poppler-private.h | 11 +- - glib/poppler.h | 40 ++---- - glib/test-poppler-glib.c | 119 ++++++++++++++--- - 11 files changed, 662 insertions(+), 454 deletions(-) - -commit 2212874e57a6eb9db733b2e9a98f0cfcb88a8fc1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 26 21:31:07 2007 +0000 - - * poppler/Form.cc: Don't crash on documents with AcroForm - but no - AcroForm->Fields (it's mandatory but...) - - ChangeLog | 5 +++++ - poppler/Form.cc | 54 - +++++++++++++++++++++++++++++------------------------- - 2 files changed, 34 insertions(+), 25 deletions(-) - -commit e48ee9c4af6bf98b6988c51dcab9ee9ef6e3cafe -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sat Jun 23 18:06:07 2007 +0000 - - 2007-06-23 Carlos Garcia Campos <carlosgc@gnome.org> - * poppler/Annot.cc: - * poppler/Form.cc: Fix memory leaks. - - ChangeLog | 5 +++++ - poppler/Annot.cc | 2 +- - poppler/Form.cc | 13 +++++++++---- - 3 files changed, 15 insertions(+), 5 deletions(-) - -commit d874a2753e3ac51b6f539dfdf980435c8c381b4f -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jun 20 20:07:15 2007 +0000 - - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-document.cc: Allow access to a document's - metadata contents - from the qt4 binding. Based on patch by Jason Kivlighn - * qt4/tests/test-poppler-qt4.cpp: Print metadata if it exists - - ChangeLog | 5 +++++ - qt4/src/poppler-document.cc | 13 +++++++++++++ - qt4/src/poppler-qt4.h | 5 +++++ - qt4/tests/test-poppler-qt4.cpp | 1 + - 4 files changed, 24 insertions(+), 0 deletions(-) - -commit 08d4c437e735ac50a340c4ae17ee0eeccd00dc20 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jun 20 18:40:03 2007 +0000 - - * glib/poppler-document.cc: Allow access to a document's - metadata stream - through the glib binding. Patch by Jason Kivlighn - <jkivlighn@gmail.com> Approved by Carlos - - ChangeLog | 6 ++++++ - glib/poppler-document.cc | 21 +++++++++++++++++++++ - 2 files changed, 27 insertions(+), 0 deletions(-) - -commit cdd2a49dc99aa16ded674c58dbb50298f06cf18a -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jun 15 18:15:53 2007 +0000 - - * poppler/ABWOutputDev.cc: Replaces the getBiggestSeperator - function - at the ABWoutputdev with one that is easier to read/debug - and less likely to contain bugs. Some cosmetic fixes at the - functions recursiveXYC and splitnodes. Patch by - Jauco Noordzij <jauco.noordzij@gmail.com>. More info at - bug #11273 - - ChangeLog | 8 + - poppler/ABWOutputDev.cc | 384 - ++++++++++++----------------------------------- - 2 files changed, 106 insertions(+), 286 deletions(-) - -commit 7f23383197b0e2fa24be7b4925ea6f39eb95bbc1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jun 13 20:39:21 2007 +0000 - - * poppler/ABWOutputDev.cc - * poppler/ABWOutputDev.h: Remove dependency on debugxml. Patch - by - Jauco Noordzij <jauco.noordzij@gmail.com>. Fixes bug #11187 - - ChangeLog | 6 +++ - poppler/ABWOutputDev.cc | 80 - ++++++++++++++++++++++++++++++++++++++++++++++- - poppler/ABWOutputDev.h | 1 + - 3 files changed, 86 insertions(+), 1 deletions(-) - -commit 948520cd529ce47d1970aae6a0b8058128e37c30 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jun 13 18:50:40 2007 +0000 - - * goo/FixedPoint.h - * goo/gmem.h - * poppler/SecurityHandler.h - * poppler/poppler-config.h.in - * utils/ImageOutputDev.h: - Patch by Axel Howind <Axel.Howind@htp-tel.de> - - include USE_EXCEPTIONS and USE_FIXEDPOINT in - poppler-config.h.in - - fix typo (MULTITHREADED/MULTITHREADING) in - poppler.config.h.in - - change installed headers to include poppler-config.h - instead of - config.h - - use <poppler/poppler-config.h> instead of <poppler-config.h> - so that - installed headers can be used without including - .../include/poppler - in the include path - - ChangeLog | 16 ++++++++++++++++ - goo/FixedPoint.h | 2 +- - goo/gmem.h | 2 +- - poppler/SecurityHandler.h | 2 +- - poppler/poppler-config.h.in | 12 +++++++++++- - utils/ImageOutputDev.h | 2 +- - 6 files changed, 31 insertions(+), 5 deletions(-) - -commit 825461e47b05595805e87a0d2960b07197c8da8b -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jun 13 18:24:56 2007 +0000 - - configure.ac: Fix detection of glib - - ChangeLog | 4 ++++ - configure.ac | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit a67a93fc6b4812a4f892b311c5b299e59283cd47 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jun 11 21:14:22 2007 +0000 - - * poppler/CMap.h: - * poppler/CharCodeToUnicode.h: - * poppler/GlobalParams.h: - * poppler/PageLabelInfo.h: - * poppler/UnicodeMap.h: Further include cleanup. Patch by - Axel Howind - on bug #11228 - - ChangeLog | 9 +++++++++ - poppler/CMap.h | 2 +- - poppler/CharCodeToUnicode.h | 2 +- - poppler/GlobalParams.h | 2 +- - poppler/PageLabelInfo.h | 6 +++--- - poppler/UnicodeMap.h | 2 +- - 6 files changed, 16 insertions(+), 7 deletions(-) - -commit 051b31af053cac4727718169b79b25451a4bdd95 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jun 11 21:11:05 2007 +0000 - - * qt/poppler-qt.h - * qt4/src/poppler-qt4.h: Headers cleanup - - ChangeLog | 5 +++++ - qt/poppler-qt.h | 6 +++--- - qt4/src/poppler-qt4.h | 8 ++++---- - 3 files changed, 12 insertions(+), 7 deletions(-) - -commit 3e1597b80fc6750f1ec3269f9819aa8225879524 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jun 8 22:39:23 2007 +0000 - - poppler/Annot.cc: Fix leak - - ChangeLog | 4 ++++ - poppler/Annot.cc | 1 + - 2 files changed, 5 insertions(+), 0 deletions(-) - -commit 49535c20b4f71d1c1381134233e2e1449cf560c0 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Thu Jun 7 21:23:03 2007 +0000 - - 2007-06-07 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/ABWOutputDev.cc: Change "and", "or", "not" to "&&", - "||", - "!" for consistency with the rest of the code. Patch by Jens - Granseuer - - ChangeLog | 5 +++ - poppler/ABWOutputDev.cc | 93 - ++++++++++++++++++++++++----------------------- - 2 files changed, 52 insertions(+), 46 deletions(-) - -commit dd8fa975bf51dd18120369d0ef2d8f1781e04d93 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jun 2 09:18:11 2007 +0000 - - correct form of patch 11102 - - utils/HtmlFonts.cc | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit cdf70857ece0748f13b11c923ccf9626094555b4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jun 1 18:34:48 2007 +0000 - - * poppler/ArthurOutputDev.cc - * splash/SplashFTFont.cc - * splash/SplashMath.h: Make it compile with - --enable-fixedpoint. Fixes - bug 11110 - - ChangeLog | 7 +++++++ - poppler/ArthurOutputDev.cc | 8 ++++---- - splash/SplashFTFont.cc | 8 ++++---- - splash/SplashMath.h | 2 +- - 4 files changed, 16 insertions(+), 9 deletions(-) - -commit 90b1a404629a884cc32737a3a729c9a75f7a59c1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed May 30 18:33:24 2007 +0000 - - * configure.ac: Fix to check for glib-2.0 not glib that is - 1.0. Patch - came though Pardus developers and they don't remember where - they got - it from. - - ChangeLog | 6 ++++++ - configure.ac | 2 +- - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit 03d766ea1ddd4ce6d938f96b53906a7dc8bd179a -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed May 30 18:29:57 2007 +0000 - - make dist needs this - - qt4/src/Makefile.am | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit d540c04268047fdd125ad932ca05c7553a97c0fe -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed May 30 17:50:00 2007 +0000 - - * utils/HtmlFonts.cc: Make pdftohtml not pollute stdout. Patch - by - Nanning Buitenhuis <nanning@elvenkind.com> - - And some changes in glib/reference/tmpl - - ChangeLog | 5 + - glib/reference/tmpl/poppler-document.sgml | 4 + - glib/reference/tmpl/poppler-enums.sgml | 150 - +++++++++++++++++++++++++++++ - glib/reference/tmpl/poppler-page.sgml | 5 +- - glib/reference/tmpl/poppler-unused.sgml | 130 - ------------------------- - utils/HtmlFonts.cc | 2 +- - 6 files changed, 162 insertions(+), 134 deletions(-) - -commit ce414f2a36f4d97a3bddfd42baabdc1e34bf9321 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue May 29 22:01:58 2007 +0000 - - 2007-05-29 Kristian Høgsberg <krh@redhat.com> - - * poppler/gen-unicode-tables.py: Add this script to fix distcheck. - - ChangeLog | 4 ++++ - poppler/gen-unicode-tables.py | 38 - ++++++++++++++++++++++++++++++++++++++ - 2 files changed, 42 insertions(+), 0 deletions(-) - -commit 97e602752b05f3690acb1821bdca31c5771361e1 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun May 27 11:24:40 2007 +0000 - - 2007-05-27 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/test-poppler-glib.c: Add forms test - * glib/poppler-page.cc: - * glib/poppler-page.h: - Fix indentation, some code cleanups and memory leaks. - - ChangeLog | 7 ++ - glib/poppler-page.cc | 198 - +++++++++++++++++++++++++++------------------ - glib/poppler-page.h | 6 +- - glib/test-poppler-glib.c | 39 +++++++++ - 4 files changed, 168 insertions(+), 82 deletions(-) - -commit 3d31c2b1ea913fc80211f1c6fed9b3666f124049 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Sun May 27 10:12:56 2007 +0000 - - 2007-05-27 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-page.cc: - * glib/poppler-page.h: - Add missing image mapping type definition. - - ChangeLog | 6 ++++++ - glib/poppler-page.cc | 48 - +++++++++++++++++++++++++++++++++++++++++++++--- - glib/poppler-page.h | 5 +++++ - 3 files changed, 56 insertions(+), 3 deletions(-) - -commit 8284a769568322066a9d4626bd9b2cf3d18a6487 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat May 26 23:20:12 2007 +0000 - - * configure.ac: - * NEWS: Bump release to 0.5.9 (0.6 Release Candidate) - - ChangeLog | 2 ++ - NEWS | 15 +++++++++++++++ - configure.ac | 2 +- - 3 files changed, 18 insertions(+), 1 deletions(-) - -commit e6ff9e0d95e058f6aff3c72d5f4d7d7ccf661999 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat May 26 22:33:21 2007 +0000 - - * poppler-qt.pc.in: - * poppler-qt4.pc.in: - * qt/Makefile.am: - * qt4/src/Makefile.am: Install qt3 and qt4 headers in - separate dirs. - That way be can reuse poppler-page-transition.h and distros - don't get - conflicts when making separate qt3 and qt4 packages - - ChangeLog | 9 +++++++++ - poppler-qt.pc.in | 2 +- - poppler-qt4.pc.in | 2 +- - qt/Makefile.am | 2 +- - qt4/src/Makefile.am | 2 +- - 5 files changed, 13 insertions(+), 4 deletions(-) - -commit fefefe495a182c1745314186b99441b9e76ba5b4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri May 25 23:17:58 2007 +0000 - - * qt4/src/poppler-link-extractor-private.cc: - * qt4/src/poppler-link-extractor-private.h: - * qt4/src/poppler-link.cc: - * qt4/src/poppler-link.h: Return link coordinates in 0..1 - range - instead of 0..size, much more easier to do user<->dev - transformations - * qt4/src/poppler-private.h: Fix indentation - - ChangeLog | 6 ++++++ - qt4/src/poppler-link-extractor-private.h | 1 + - qt4/src/poppler-link-extractor.cc | 12 ++++++------ - qt4/src/poppler-link.cc | 25 +++++++++++++++---------- - qt4/src/poppler-link.h | 7 ++++++- - qt4/src/poppler-private.h | 15 ++++++++------- - 6 files changed, 42 insertions(+), 24 deletions(-) - -commit ecaeaa9512d1dae4a036703ea8739102a8e463f0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri May 25 22:30:20 2007 +0000 - - * qt4/src/poppler-link-extractor.cc: Use correct page box - to extract - link clickable area - - ChangeLog | 5 +++++ - qt4/src/poppler-link-extractor.cc | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit 774a9456c668ef70b2e8f17d59f8f427aa97bad5 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Fri May 25 18:43:04 2007 +0000 - - 2007-05-25 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/GfxFont.cc: - * poppler/GfxFont.h: - * poppler/GlobalParams.cc: - Don't cache DisplayFontParams by font name, instead cache them - in GfxFont. Fixes #8140. - - ChangeLog | 8 ++++++++ - poppler/GfxFont.cc | 2 ++ - poppler/GfxFont.h | 6 ++++++ - poppler/GlobalParams.cc | 4 ++-- - 4 files changed, 18 insertions(+), 2 deletions(-) - -commit a88fadf0bb9af55c83c9c4f7d08deb17d6aa9ae4 -Author: Carlos Garcia Campos <carlosgc@gnome.org> -Date: Fri May 25 17:33:37 2007 +0000 - - 2007-05-25 Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/poppler.h: - Add selection style parameter to render_selection in order - to allow - requesting selections of words and paragraphs. - - ChangeLog | 8 ++++++++ - glib/poppler-page.cc | 30 ++++++++++++++++-------------- - glib/poppler-page.h | 6 ++++-- - glib/poppler.h | 7 +++++++ - 4 files changed, 35 insertions(+), 16 deletions(-) - -commit bf195b489c22875695e202d6ca6659144ef57e61 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed May 23 21:20:58 2007 +0000 - - * qt4/src/poppler-document.cc: - * qt4/src/poppler-private.h: - Better handle the setting of the vector antialiasing for - Splash. - * qt4/src/Mainpage.dox: - * qt4/src/poppler-link.h: - * qt4/src/poppler-qt4.h: - A few of API documentation fixes and improvements. - - ChangeLog | 10 +++++++ - qt4/src/Mainpage.dox | 8 +---- - qt4/src/poppler-document.cc | 5 ++- - qt4/src/poppler-link.h | 4 ++- - qt4/src/poppler-private.h | 1 + - qt4/src/poppler-qt4.h | 57 - ++++++++++++++++++++++++++++-------------- - 6 files changed, 57 insertions(+), 28 deletions(-) - -commit 36d1fe292778ba29990a389c50a0df0d51f11913 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 21 21:42:38 2007 +0000 - - Fix assert in bug 11023 - - ChangeLog | 4 ++++ - glib/poppler-action.cc | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit 5b411246a2cce6ed3bb2d8c9e9d856227b6aba7f -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 21 21:39:08 2007 +0000 - - * glib/poppler-page.cc: - * glib/poppler-page.h: - poppler_page_render_section() for cairo. Bug 7023 - - ChangeLog | 6 +++ - glib/poppler-page.cc | 88 - ++++++++++++++++++++++++++++++++++++++++++++------ - glib/poppler-page.h | 9 +++++ - 3 files changed, 93 insertions(+), 10 deletions(-) - -commit 409f2a9cb31add29accb87011331c50dc08110cd -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 21 21:35:10 2007 +0000 - - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/poppler-private.h: - * glib/poppler.h: - * glib/test-poppler-glib.c: - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDev.h: Extend CairoOutputdev to do - image caching when rendering - - ChangeLog | 11 +++ - glib/poppler-page.cc | 161 ++++++++++++++++++++++++++++++++-- - glib/poppler-page.h | 10 ++ - glib/poppler-private.h | 3 + - glib/poppler.h | 9 +- - glib/test-poppler-glib.c | 27 ++++++- - poppler/CairoOutputDev.cc | 215 - +++++++++++++++++++++++++++++++++++++++++++++ - poppler/CairoOutputDev.h | 122 +++++++++++++++++++++++++ - 8 files changed, 545 insertions(+), 13 deletions(-) - -commit afd11ec66430dae084b5a5560333e933460fc637 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 21 21:29:09 2007 +0000 - - * poppler/Annot.cc: avoid crashing if the font for the - drawing methods - can not be found - * poppler/Form.cc: fix memory leak - * qt4/src/poppler-private.h: fix the UnicodeParsedString - function to - really work and not crash - * splash/SplashTypes.h: RGB8X mode makes max number of - components in - any SplashColor always be 4 - - ChangeLog | 11 +++++++++++ - poppler/Annot.cc | 6 ++++++ - poppler/Form.cc | 1 + - qt4/src/poppler-private.h | 5 ++++- - splash/SplashTypes.h | 6 +----- - 5 files changed, 23 insertions(+), 6 deletions(-) - -commit f019c8a8efde004e1663ea88cb48c0e46318d936 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu May 17 21:32:57 2007 +0000 - - 2007-05-17 Pino Toscano <pino@kde.org> - - * qt4/src/poppler-link.cc: - Give some default values to LinkDestination - * qt4/src/poppler-private.h: - Fix memory leak when converting QString -> GooString - - ChangeLog | 7 +++++++ - qt4/src/poppler-link.cc | 12 ++++++++++++ - qt4/src/poppler-private.h | 4 +++- - 3 files changed, 22 insertions(+), 1 deletions(-) - -commit d68a4eb44b5390b3093774f39a6805ad2e95c146 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun May 13 00:53:43 2007 +0000 - - 2007-05-12 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/Annot.cc: Only do appearance generation for text, - choice or - other fields that contain text. Patch by Julien Rebetez. - - ChangeLog | 5 +++++ - poppler/Annot.cc | 52 - ++++++++++++++++++++++++++++++++++++++++++++++------ - 2 files changed, 51 insertions(+), 6 deletions(-) - -commit 96f8731e90af1abce67d00a3febc11880c69ce62 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 7 18:41:09 2007 +0000 - - * Catalog.cc: Fix leak - * Form.cc: Fix leak, provide empty - FormPageWidgets::~FormPageWidgets - implementation - * Page.cc: Fix leak - - ChangeLog | 7 +++++++ - poppler/Catalog.cc | 1 + - poppler/Form.cc | 5 +++++ - poppler/Page.cc | 1 + - 4 files changed, 14 insertions(+), 0 deletions(-) - -commit d46553d696b2d7fe416ce8db40db54dd1d7c6733 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Apr 30 22:34:21 2007 +0000 - - * poppler/Makefile.am: Don't link cairo to all poppler, - just to - poppler_cairo so when compiling the qt frontend and the - glib frontend - the qt one does not end up depending on cairo - - ChangeLog | 6 ++++++ - poppler/Makefile.am | 1 - - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit d5c52409c532a126bcb8eb65f6f1390113a5f258 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Apr 29 17:37:38 2007 +0000 - - jeff committed this line by mistake - - ChangeLog | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 6ddc11ef4c534369ee104422bfb989603c466790 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Apr 29 17:33:58 2007 +0000 - - 2007-04-29 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/UnicodeTypeTable.cc: Make some of the unicode tables - const - which gets rid of about 20k of data. - - text data bss dec hex filename - before: 1415838 128864 8 1544710 179206 libpoppler.so - after: 1404574 140128 8 1544710 179206 libpoppler.so - - ChangeLog | 10 ++++++++++ - poppler/UnicodeTypeTable.cc | 24 ++++++++++++------------ - 2 files changed, 22 insertions(+), 12 deletions(-) - -commit c5613ab5ce65fc84eb3a5584cee1454171173fa7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 28 23:25:59 2007 +0000 - - * poppler/SplashOutputDev.cc: - * qt/poppler-private.h: - * qt4/src/poppler-private.h: - * splash/Splash.cc: - * splash/SplashBitmap.cc: - * splash/SplashTypes.h: Rename splashModeRGBX8 to - splashModeXBGR8 and - hopefully fix qt frontends image generation - - ChangeLog | 10 ++++ - poppler/SplashOutputDev.cc | 102 - ++++++++++++++++++++++++++++++++------------ - qt/poppler-private.h | 2 +- - qt4/src/poppler-private.h | 2 +- - splash/Splash.cc | 44 ++++++++++--------- - splash/SplashBitmap.cc | 16 +++--- - splash/SplashTypes.h | 4 +- - 7 files changed, 120 insertions(+), 60 deletions(-) - -commit 6479ce224f1393235ca9888dfe0710327fbfccd2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 28 22:12:22 2007 +0000 - - fix merging problems - - splash/Splash.cc | 1 + - splash/SplashBitmap.cc | 1 - - 2 files changed, 1 insertions(+), 1 deletions(-) - -commit e2ac4ada3e29139053871ff7f53772e1ccc7adc0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 28 15:39:36 2007 +0000 - - \n at the end of the printf - Although i'm not sure we want to printf this... - - poppler/GlobalParams.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 9b8133940638c95940edcb9b98126ca9a4f7b8d4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 28 12:00:38 2007 +0000 - - * qt4/src/Makefile.am: - * qt4/src/poppler-document.cc: - * qt4/src/poppler-ps-converter.cc: - * qt4/src/poppler-qt4.h: Replace Document::print function - with lots of - arguments with a helper class with lots of functions. Will - help - mantaining BC in case we decide to add more functionality - to the - printing process. - - ChangeLog | 10 ++ - qt4/src/Makefile.am | 1 + - qt4/src/poppler-document.cc | 39 +------- - qt4/src/poppler-ps-converter.cc | 190 - +++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-qt4.h | 119 +++++++++++++++++++++---- - 5 files changed, 307 insertions(+), 52 deletions(-) - -commit 26d5fefcd4c858e2ebd689d963a65773957ac808 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 28 11:35:34 2007 +0000 - - * qt4/src/poppler-page.cc: - Hopefully fix the calculation of the image size when rendering - using - ArthurOutputDev. - - ChangeLog | 6 ++++++ - qt4/src/poppler-page.cc | 2 +- - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit 218364bc4951682de8e63e1bd3f061636b08b615 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 28 11:34:14 2007 +0000 - - * glib/poppler-document.h: - * poppler/FontInfo.h: - * qt/poppler-qt.h: - * qt4/src/poppler-qt4.h: GfxFontType changed, adapt enums - of the - frontends and helper classes. Forgot to do it before merging. - - ChangeLog | 8 ++++++++ - glib/poppler-document.h | 6 +++++- - poppler/FontInfo.h | 6 +++++- - qt/poppler-qt.h | 6 +++++- - qt4/src/poppler-qt4.h | 20 ++++++++++++-------- - 5 files changed, 35 insertions(+), 11 deletions(-) - -commit c1a40d3b4e9b27e34c94c9477a0313534563a394 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 28 11:20:58 2007 +0000 - - * qt4/src/poppler-annotation.h: - Make the header clean. - - ChangeLog | 5 +++++ - qt4/src/poppler-annotation.h | 3 +++ - 2 files changed, 8 insertions(+), 0 deletions(-) - -commit 3f4bf880b95e28a1ae7a38b18b341e089860780c -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 28 11:16:49 2007 +0000 - - * qt4/src/Makefile.am: - * qt4/src/poppler-link-extractor-private.h: - * qt4/src/poppler-link-extractor.cc: - * qt4/src/poppler-page-private.h: - * qt4/src/poppler-page.cc: - * qt4/src/poppler-private.h: - * qt4/src/poppler-qt4.h: - Getting the links of a page now is not more dependant on - the current - output device, and can be done anytime; thus, the doLinks - parameter - of the Page::render() can be dropped. - - ChangeLog | 13 +++++ - qt4/src/Makefile.am | 3 +- - qt4/src/poppler-link-extractor-private.h | 55 ++++++++++++++++++++++ - qt4/src/poppler-link-extractor.cc | 74 - ++++++++++++++++++++++++++++++ - qt4/src/poppler-page-private.h | 38 +++++++++++++++ - qt4/src/poppler-page.cc | 52 +++------------------ - qt4/src/poppler-private.h | 5 ++- - qt4/src/poppler-qt4.h | 4 +- - 8 files changed, 195 insertions(+), 49 deletions(-) - -commit 7f9eec9ef4e7dc895d2a3e38014b6368cc7564b6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Apr 27 22:41:10 2007 +0000 - - 2007-04-28 Albert Astals Cid <aacid@kde.org> - - * qt4/*: Stop requyring users to declare UNSTABLE_POPPLER_QT4 - - ChangeLog | 4 ++++ - qt4/src/Doxyfile | 2 +- - qt4/src/Mainpage.dox | 3 +-- - qt4/src/poppler-document.cc | 2 -- - qt4/src/poppler-embeddedfile.cc | 2 -- - qt4/src/poppler-fontinfo.cc | 2 -- - qt4/src/poppler-form.cc | 1 - - qt4/src/poppler-link.cc | 2 -- - qt4/src/poppler-page.cc | 1 - - qt4/src/poppler-qt4.h | 3 --- - qt4/src/poppler-sound.cc | 2 -- - qt4/src/poppler-textbox.cc | 2 -- - qt4/tests/check_attachments.cpp | 1 - - qt4/tests/check_dateConversion.cpp | 1 - - qt4/tests/check_fonts.cpp | 1 - - qt4/tests/check_metadata.cpp | 1 - - qt4/tests/check_pagelayout.cpp | 1 - - qt4/tests/check_pagemode.cpp | 1 - - qt4/tests/check_permissions.cpp | 1 - - qt4/tests/poppler-attachments.cpp | 1 - - qt4/tests/poppler-fonts.cpp | 1 - - qt4/tests/stress-poppler-qt4.cpp | 1 - - qt4/tests/test-password-qt4.cpp | 1 - - qt4/tests/test-poppler-qt4.cpp | 1 - - 24 files changed, 6 insertions(+), 32 deletions(-) - -commit 45993a6faafd7646075bc6630d5d2ad7a44f7e20 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Apr 27 22:26:09 2007 +0000 - - 2007-04-28 Carlos Garcia Campos <carlosgc@gnome.org> - reviewed and some code by: Albert Astals Cid <aacid@kde.org> - - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/poppler.h: - * glib/test-poppler-glib.c: - * poppler/Makefile.am: - * poppler/PageTransition.cc: - * poppler/PageTransition.h: - * qt/poppler-page-transition.cc: - * qt/poppler-page-transition.h: Move Page Transition parsing - from qt - frontends to poppler core. Expose Page transitions on the glib - frontend. - - ChangeLog | 15 +++ - glib/poppler-page.cc | 122 +++++++++++++++++++++++++ - glib/poppler-page.h | 111 ++++++++++++++---------- - glib/poppler.h | 58 +++++++++--- - glib/test-poppler-glib.c | 60 +++++++++++++ - poppler/Makefile.am | 2 + - poppler/PageTransition.cc | 197 - +++++++++++++++-------------------------- - poppler/PageTransition.h | 86 ++++++++++++++++++ - qt/poppler-page-transition.cc | 145 ++++++------------------------- - qt/poppler-page-transition.h | 9 ++- - 10 files changed, 497 insertions(+), 308 deletions(-) - -commit 877d6b202a75eb12119b16e740f85cc8b477d589 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Apr 27 21:25:30 2007 +0000 - - * glib/poppler-page.cc: - * poppler/PSOutputDev.cc: - * poppler/PSOutputDev.h: - * qt/poppler-document.cc: - * qt4/src/poppler-document.cc: - * qt4/src/poppler-qt4.h: - * utils/pdftohtml.cc: - * utils/pdftops.cc: - Add option to force rasterizing the pages when printing them - Add functionality to output the title field on the PS file - Only Qt4 frontend exposes the functionality - - Bringing this features from KPDF 3.5.7 to poppler - Testers welcome - Patches for other frontends more than welcome - Comments and suggestions even more than welcome :-) - - ChangeLog | 14 ++++++++++++ - glib/poppler-page.cc | 3 +- - poppler/PSOutputDev.cc | 48 - +++++++++++++++++++++++++++++------------- - poppler/PSOutputDev.h | 17 +++++++++----- - qt/poppler-document.cc | 2 +- - qt4/src/poppler-document.cc | 9 ++++++- - qt4/src/poppler-qt4.h | 2 +- - utils/pdftohtml.cc | 2 +- - utils/pdftops.cc | 2 +- - 9 files changed, 71 insertions(+), 28 deletions(-) - -commit 99053be5357235c47a87775985646ef8d9880ed9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Apr 26 17:57:01 2007 +0000 - - * goo/Makefile.am: Remove duplicate gmem.h - - ChangeLog | 4 ++++ - goo/Makefile.am | 1 - - 2 files changed, 4 insertions(+), 1 deletions(-) - -commit f6adb46cd88d23b34f1918d3be31c05b68b6a443 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Apr 25 21:31:17 2007 +0000 - - ignore pdftoabw binary - - utils/.cvsignore | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit e09f231ac6c03ac2c3606f1bf20ba1bde3d85abd -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Apr 25 21:25:06 2007 +0000 - - 2007-04-25 Albert Astals Cid <aacid@kde.org> - - * qt4/src/poppler-document.cc: remove a delete[] no longer - needed - * qt4/src/poppler-private: initilize m_hints - - ChangeLog | 5 +++++ - qt4/src/poppler-document.cc | 1 - - qt4/src/poppler-private.h | 1 + - 3 files changed, 6 insertions(+), 1 deletions(-) - -commit bf7e0e980bf29994021cb1228f89f582adddf284 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Apr 25 19:59:09 2007 +0000 - - Merge xpdf302branch in HEAD as noone vetoed it. - Testing more than welcome - - ChangeLog | 140 + - configure.ac | 4 + - fofi/FoFiTrueType.cc | 458 +++- - fofi/FoFiTrueType.h | 42 +- - fofi/FoFiType1.cc | 65 +- - fofi/FoFiType1C.cc | 590 +++-- - fofi/FoFiType1C.h | 7 +- - glib/poppler-action.cc | 12 +- - glib/poppler-document.cc | 5 +- - glib/poppler-page.cc | 8 +- - goo/FixedPoint.cc | 31 +- - goo/FixedPoint.h | 5 + - goo/GooString.cc | 444 +++- - goo/GooString.h | 41 +- - goo/Makefile.am | 2 +- - goo/gfile.cc | 54 +- - goo/gmem.c | 238 -- - goo/gmem.cc | 264 ++ - goo/gmem.h | 27 +- - poppler/ABWOutputDev.cc | 1 - - poppler/ABWOutputDev.h | 1 - - poppler/Annot.cc | 1685 ++++++++++--- - poppler/Annot.h | 83 +- - poppler/ArthurOutputDev.cc | 13 +- - poppler/Catalog.cc | 79 +- - poppler/Catalog.h | 16 +- - poppler/CharCodeToUnicode.cc | 31 +- - poppler/DCTStream.cc | 2 +- - poppler/DCTStream.h | 4 +- - poppler/Decrypt.cc | 427 +++- - poppler/Decrypt.h | 54 +- - poppler/Dict.cc | 23 +- - poppler/Dict.h | 27 +- - poppler/FontInfo.cc | 1 - - poppler/Form.cc | 19 +- - poppler/Form.h | 2 +- - poppler/Function.cc | 65 +- - poppler/Function.h | 8 +- - poppler/Gfx.cc | 1247 +++++++--- - poppler/Gfx.h | 39 +- - poppler/GfxFont.cc | 45 +- - poppler/GfxFont.h | 7 +- - poppler/GfxState.cc | 209 ++- - poppler/GfxState.h | 42 +- - poppler/GlobalParams.cc | 399 +++- - poppler/GlobalParams.h | 41 +- - poppler/JBIG2Stream.cc | 96 +- - poppler/JBIG2Stream.h | 4 +- - poppler/JPXStream.cc | 246 ++- - poppler/JPXStream.h | 8 +- - poppler/Lexer.cc | 18 +- - poppler/Link.cc | 150 +- - poppler/Link.h | 49 +- - poppler/Makefile.am | 4 +- - poppler/Object.cc | 5 +- - poppler/Object.h | 29 +- - poppler/Outline.cc | 1 - - poppler/OutputDev.cc | 2 + - poppler/OutputDev.h | 62 +- - poppler/PDFDoc.cc | 100 +- - poppler/PDFDoc.h | 21 +- - poppler/PSOutputDev.cc | 2715 ++++++++++++++----- - poppler/PSOutputDev.h | 58 +- - poppler/PSTokenizer.cc | 2 +- - poppler/Page.cc | 227 ++- - poppler/Page.h | 22 +- - poppler/PageLabelInfo.cc | 1 - - poppler/Parser.cc | 66 +- - poppler/Parser.h | 11 +- - poppler/PreScanOutputDev.cc | 255 ++ - poppler/PreScanOutputDev.h | 128 + - poppler/SecurityHandler.cc | 17 +- - poppler/SecurityHandler.h | 5 + - poppler/SplashOutputDev.cc | 1480 ++++++----- - poppler/SplashOutputDev.h | 41 +- - poppler/Stream.cc | 338 ++-- - poppler/Stream.h | 39 +- - poppler/TextOutputDev.cc | 537 ++++- - poppler/TextOutputDev.h | 77 +- - poppler/UGooString.cc | 182 -- - poppler/UGooString.h | 79 - - poppler/XRef.cc | 29 +- - poppler/XRef.h | 6 +- - qt/poppler-document.cc | 15 +- - qt/poppler-page-transition.cc | 1 - - qt/poppler-page.cc | 4 +- - qt/poppler-private.h | 72 +- - qt4/src/poppler-annotation-helper.h | 38 +- - qt4/src/poppler-document.cc | 7 +- - qt4/src/poppler-embeddedfile.cc | 6 +- - qt4/src/poppler-form.cc | 12 +- - qt4/src/poppler-page.cc | 8 +- - qt4/src/poppler-private.h | 76 +- - splash/Splash.cc | 4994 - ++++++++++++++++++----------------- - splash/Splash.h | 137 +- - splash/SplashBitmap.cc | 110 +- - splash/SplashBitmap.h | 10 +- - splash/SplashClip.cc | 276 ++- - splash/SplashClip.h | 28 +- - splash/SplashFTFont.cc | 104 +- - splash/SplashFTFont.h | 5 +- - splash/SplashFTFontEngine.cc | 54 +- - splash/SplashFTFontEngine.h | 9 +- - splash/SplashFTFontFile.cc | 19 +- - splash/SplashFTFontFile.h | 9 +- - splash/SplashFont.cc | 6 +- - splash/SplashFont.h | 13 +- - splash/SplashFontEngine.cc | 72 +- - splash/SplashFontEngine.h | 11 +- - splash/SplashFontFile.cc | 1 - - splash/SplashFontFile.h | 2 +- - splash/SplashMath.h | 15 +- - splash/SplashPath.cc | 42 +- - splash/SplashPath.h | 31 +- - splash/SplashPattern.cc | 28 - - splash/SplashPattern.h | 25 - - splash/SplashScreen.cc | 304 ++- - splash/SplashScreen.h | 18 +- - splash/SplashState.cc | 63 +- - splash/SplashState.h | 14 +- - splash/SplashT1Font.cc | 101 +- - splash/SplashT1Font.h | 6 +- - splash/SplashT1FontEngine.cc | 4 +- - splash/SplashT1FontFile.cc | 9 +- - splash/SplashT1FontFile.h | 7 +- - splash/SplashTypes.h | 72 +- - splash/SplashXPath.cc | 353 ++-- - splash/SplashXPath.h | 26 +- - splash/SplashXPathScanner.cc | 143 + - splash/SplashXPathScanner.h | 13 + - utils/HtmlOutputDev.cc | 15 +- - utils/HtmlOutputDev.h | 15 +- - utils/pdffonts.cc | 15 +- - utils/pdfinfo.cc | 21 +- - utils/pdftoabw.cc | 1 - - utils/pdftohtml.cc | 3 +- - utils/pdftoppm.cc | 8 + - utils/pdftops.cc | 8 +- - utils/pdftotext.cc | 1 - - 139 files changed, 14538 insertions(+), 7039 deletions(-) - -commit ba74bb3b0632593d1937911d73709fc870480efd -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Apr 16 21:25:46 2007 +0000 - - * qt4/src/poppler-private.h: - Add the information about the open/close item in the DOM tree - of the TOC. - - ChangeLog | 7 +++++++ - qt4/src/poppler-private.h | 5 ++++- - 2 files changed, 11 insertions(+), 1 deletions(-) - -commit 6c7969f37c85f326327aca98e0346f2ebc86ffda -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 14 23:19:46 2007 +0000 - - * utils/HtmlFonts.cc: Fix rendering of text colors on - complex mode. - * utils/pdftohtml.cc: Fix rendering of links. - - ChangeLog | 5 +++++ - utils/HtmlFonts.cc | 8 ++++---- - utils/pdftohtml.cc | 2 +- - 3 files changed, 10 insertions(+), 5 deletions(-) - -commit add8515d7b3fba59c20ed1bbb058cea9e138c1a8 -Author: Brad Hards <bradh@frogmouth.net> -Date: Sat Apr 14 07:29:04 2007 +0000 - - Not sure what this was intended to do, but it triggers a lot of - problems with the unit tests (essentially, duplicate delete's). - - CCMAIL: aacid@kde.org - - qt4/src/poppler-embeddedfile.cc | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit f3ded10305f6ac682640c37c21f569db0f830756 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Apr 7 21:12:35 2007 +0000 - - 2007-04-07 Jeff Muizelaar <jeff@infidigm.net> - - * utils/pdftoabw.cc: Fixing passing the wrong type - to fprintf. Patch by Kouhei Sutou. Fixes #10554. - - ChangeLog | 5 +++++ - utils/pdftoabw.cc | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit 2fcb76df955c143153fe4b273d0388fcb7f67d8a -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Fri Apr 6 15:27:52 2007 +0000 - - 2007-04-06 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/ABWOutputDev.cc: - * utils/pdftoabw.cc: Fix a number of issues with the new - AbiWord code: - *) Allows you to save to a file other than stdout - *) Checks for error conditions when reading the PDF - doc and - writing the ABW doc - *) Removes dead code in pdftoabw.cc - *) Fixes a SEGV I encountered when converting my new - home's floor plan - *) Returns proper error conditions should the conversion - fail for any reason - Patch by Dominic Lachowicz - - ChangeLog | 12 ++++++ - poppler/ABWOutputDev.cc | 3 + - utils/pdftoabw.cc | 101 - +++++++++++++++++++++++++++------------------- - 3 files changed, 74 insertions(+), 42 deletions(-) - -commit 29da65ec48b5ba91139084e197ce457d3cff3732 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Apr 5 12:13:51 2007 +0000 - - * poppler/PSOutputDev.cc: Readd code wrongly removed when doing the - GlobalParams cleaning - - ChangeLog | 5 +++++ - poppler/PSOutputDev.cc | 5 +++++ - 2 files changed, 10 insertions(+), 0 deletions(-) - -commit 722b2bd86f58f2d7a914571cccfa195485a70c47 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Apr 4 02:42:29 2007 +0000 - - 2007-04-03 Jeff Muizelaar <jeff@infidigm.net> - - * configure.ac: - * poppler/ABWOutputDev.cc: - * poppler/ABWOutputDev.h: - * poppler/Makefile.am: - * utils/Makefile.am: - * utils/pdftoabw.cc: Add AbiWord output device and pdftoabw - program. - Patch by Jauco Noordzij. Autotools stuff by Dominic Lachowicz. - - ChangeLog | 10 + - configure.ac | 15 + - poppler/ABWOutputDev.cc | 1286 - +++++++++++++++++++++++++++++++++++++++++++++++ - poppler/ABWOutputDev.h | 140 +++++ - poppler/Makefile.am | 17 + - utils/Makefile.am | 16 +- - utils/pdftoabw.cc | 138 +++++ - 7 files changed, 1620 insertions(+), 2 deletions(-) - -commit c9b467da290476da5ebbe8dc25699cd25e589b57 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Mar 22 20:56:24 2007 +0000 - - * poppler/Gfx.cc: Accept reals for width and height of - images. Fixes - KDE bug 143322 - - ChangeLog | 5 +++++ - poppler/Gfx.cc | 14 ++++++++++---- - 2 files changed, 15 insertions(+), 4 deletions(-) - -commit ff8f8d44ef47a98f7dbdfaa4d27a720b1f37015f -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Mar 15 20:16:13 2007 +0000 - - * glib/Makefile.am: Make it build with BSD/Make. Patch by - Henry Precheur <henry@precheur.org> - - ChangeLog | 5 +++++ - glib/Makefile.am | 4 ++-- - 2 files changed, 7 insertions(+), 2 deletions(-) - -commit bbf7e78b6b2509ecdc476d7f55151ef327470d9d -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Mar 7 19:15:32 2007 +0000 - - 2007-03-07 Carlos Garcia Campos <carlosgc@gnome.org> - reviewed by: Albert Astals Cid <aacid@kde.org> - - * poppler/Page.cc: Consider 0x0 boxes as invalid. Fixes - http://bugzilla.gnome.org/show_bug.cgi?id=408682 - - 2007-03-06 Pino Toscano <pino@kde.org> - reviewed by: Albert Astals Cid <aacid@kde.org> - - * configure.ac: - * qt/Makefile.am: - * qt/poppler-link.cc: - * qt/poppler-page.cc: - * qt/poppler-private.h: - * qt4/poppler-link.cc: - Make the Qt4 frontend compilable again with no Splash. - Make the Qt3 frontend compilable with no Splash. - - ChangeLog | 18 ++++++++++++++++++ - configure.ac | 12 +----------- - poppler/Page.cc | 7 ++++++- - qt/Makefile.am | 1 - - qt/poppler-link.cc | 4 +++- - qt/poppler-page.cc | 16 +++++++++++++++- - qt/poppler-private.h | 11 ++++++++++- - qt4/src/poppler-link.cc | 10 ++++++---- - 8 files changed, 59 insertions(+), 20 deletions(-) - -commit 08dcc7121450cbfa163254001e73bb6a2670e055 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 6 22:27:18 2007 +0000 - - * poppler/Annot.cc: - * poppler/Form.cc: - Fix uninitialized variables. - Properly escape parenthesis and slash in text field - - ChangeLog | 9 ++++++++- - poppler/Annot.cc | 3 +++ - poppler/Form.cc | 1 + - 3 files changed, 12 insertions(+), 1 deletions(-) - -commit e8d3b21d08a59ec8b62503b48504fe046d746bfa -Author: Brad Hards <bradh@frogmouth.net> -Date: Sun Mar 4 07:30:31 2007 +0000 - - Switch to using pkg-config to find Qt4. - - ChangeLog | 9 +++ - configure.ac | 36 +++++------ - m4/qt.m4 | 165 - ------------------------------------------------- - poppler/Makefile.am | 2 +- - qt4/src/Makefile.am | 3 +- - qt4/tests/Makefile.am | 21 +++---- - 6 files changed, 36 insertions(+), 200 deletions(-) - -commit bd99616b9c06f96beadb68e015d2904b7fe2df1d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 25 00:34:21 2007 +0000 - - 007-02-25 Julien Rebetez <julienr@svn.gnome.org> - - reviewed by: Albert Astals Cid <aacid@kde.org> - - * poppler/Annot.cc: - * poppler/Annot.h: - * poppler/Form.cc: - * poppler/Form.h: - Fix compilation warnings. - - ChangeLog | 10 ++++++++++ - poppler/Annot.cc | 30 +++++++++++++++++------------- - poppler/Annot.h | 5 ++++- - poppler/Form.cc | 37 ++++++++++++++----------------------- - poppler/Form.h | 13 ++++++------- - 5 files changed, 51 insertions(+), 44 deletions(-) - -commit d8d23b56332618d8c7d8198f55ec6efafd24187e -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 25 00:00:20 2007 +0000 - - forgot to commit these - - qt4/src/poppler-form.cc | 284 - +++++++++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-form.h | 247 ++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 531 insertions(+), 0 deletions(-) - -commit 984ce7f919aec27d5f4225376550cd6b58d4ae52 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 24 23:58:31 2007 +0000 - - 2007-02-25 Pino Toscano <pino@kde.org> - reviewed by: Albert Astals Cid <aacid@kde.org> - - * qt4/src/Doxyfile: - * qt4/src/Makefile.am: - * qt4/src/poppler-annotation-helper.h: - * qt4/src/poppler-form.cc: - * qt4/src/poppler-form.h: - * qt4/src/poppler-page.cc: - * qt4/src/poppler-private.h: - * qt4/src/poppler-qt4.h: - Beginning of interactive forms support, first - implementation in the - Qt4 frontend. It supports text and choice fields in - a basic way. - - ChangeLog | 14 +++++++++ - qt4/src/Doxyfile | 1 + - qt4/src/Makefile.am | 2 + - qt4/src/poppler-annotation-helper.h | 18 ++++++------ - qt4/src/poppler-page.cc | 36 ++++++++++++++++++++++++ - qt4/src/poppler-private.h | 52 - ++++++++++++++++++++++++++++++++++- - qt4/src/poppler-qt4.h | 7 +++++ - 7 files changed, 120 insertions(+), 10 deletions(-) - -commit de7a90fc724de14151ec994d18f860ada3be2ac8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 24 23:43:34 2007 +0000 - - 2007-02-25 Albert Astals Cid <aacid@kde.org> - - * configure.ac: - * glib/poppler-document.cc: - * poppler/GlobalParams.cc: - * poppler/GlobalParams.h: - * poppler/PSOutputDev.cc: - * qt/poppler-document.cc: - * qt4/src/poppler-document.cc: - * qt4/src/poppler-private.h: - * qt4/src/poppler-qt4.h: - * test/gtk-splash-test.cc: - * test/pdf-inspector.cc: - * utils/pdffonts.cc: - * utils/pdfimages.cc: - * utils/pdfinfo.cc: - * utils/pdftohtml.cc: - * utils/pdftoppm.cc: - * utils/pdftops.cc: - * utils/pdftotext.cc: Remove dependency on xpdfrc file - and cleanup - GlobalParams accordingly - - ChangeLog | 22 ++ - configure.ac | 1 - - glib/poppler-document.cc | 4 +- - poppler/GlobalParams.cc | 666 - +------------------------------------------ - poppler/GlobalParams.h | 59 +---- - poppler/PSOutputDev.cc | 8 - - qt/poppler-document.cc | 4 +- - qt4/src/poppler-document.cc | 2 +- - qt4/src/poppler-private.h | 2 +- - qt4/src/poppler-qt4.h | 6 +- - test/gtk-splash-test.cc | 2 +- - test/pdf-inspector.cc | 2 +- - utils/pdffonts.cc | 5 +- - utils/pdfimages.cc | 5 +- - utils/pdfinfo.cc | 5 +- - utils/pdftohtml.cc | 2 +- - utils/pdftoppm.cc | 15 +- - utils/pdftops.cc | 50 ++-- - utils/pdftotext.cc | 5 +- - 19 files changed, 72 insertions(+), 793 deletions(-) - -commit 74e70386b759a3cd9864d11eb4ca210010136aa5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 24 23:32:22 2007 +0000 - - 2007-02-25 Julien Rebetez <julienr@svn.gnome.org> - reviewed by: <aacid@kde.org> - - * glib/poppler-document.cc: - * glib/poppler-document.h: - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/poppler-private.h: - * glib/poppler.h: - * poppler/Annot.cc: - * poppler/Annot.h: - * poppler/Catalog.cc: - * poppler/Catalog.h: - * poppler/CharCodeToUnicode.cc: - * poppler/CharCodeToUnicode.h: - * poppler/Dict.cc: - * poppler/Dict.h: - * poppler/Form.cc: - * poppler/Form.h: - * poppler/GfxFont.cc: - * poppler/GfxFont.h: - * poppler/Makefile.am: - * poppler/Object.h: - * poppler/Page.cc: - * poppler/Page.h: - * poppler/XRef.cc: - * poppler/XRef.h: - Beginning of Interactive Form support: - Add a bunch of new classes (FormWidget / FormField) - to deal with form - fields. - Add support for object modification through - XRef::setModifiedObject, as - well as a function to write the Xref to a file, - which will be used - to implement PDF writing. - Add some functions to glib wrapper to expose the - new form features. - - ChangeLog | 35 ++ - glib/poppler-document.cc | 192 +++++++ - glib/poppler-document.h | 55 ++ - glib/poppler-page.cc | 120 +++++ - glib/poppler-page.h | 55 ++ - glib/poppler-private.h | 4 + - glib/poppler.h | 15 +- - poppler/Annot.cc | 344 ++++++++++--- - poppler/Annot.h | 21 +- - poppler/Catalog.cc | 17 +- - poppler/Catalog.h | 4 + - poppler/CharCodeToUnicode.cc | 34 ++ - poppler/CharCodeToUnicode.h | 3 + - poppler/Dict.cc | 32 ++ - poppler/Dict.h | 4 + - poppler/Form.cc | 1187 - ++++++++++++++++++++++++++++++++++++++++++ - poppler/Form.h | 470 +++++++++++++++++ - poppler/GfxFont.cc | 27 + - poppler/GfxFont.h | 5 + - poppler/Makefile.am | 2 + - poppler/Object.h | 4 + - poppler/Page.cc | 11 +- - poppler/Page.h | 8 +- - poppler/XRef.cc | 87 +++ - poppler/XRef.h | 9 + - 25 files changed, 2666 insertions(+), 79 deletions(-) - -commit 5c4ea446f33248964431e79b14592b30362634fe -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 18 21:44:24 2007 +0000 - - * configure.ac: Change {datadir}/poppler to {datarootdir}/poppler so - that i get /usr/local/share/poppler in config.h - instead of - ${prefix}/poppler Better fixes are welcome. - - ChangeLog | 6 ++++++ - configure.ac | 2 +- - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit dd140dd63de661303b578863af4d515d82117cca -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 4 00:19:25 2007 +0000 - - fix date - - ChangeLog | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 3c1ed68bf4ee49b27275f7f65d49f42933b1cfa0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 4 00:16:43 2007 +0000 - - * poppler/Lexer.cc: - * poppler/Lexer.h: Patch to fix regression introduced by - optimizations - in bugzilla issue 7808 - - ChangeLog | 6 ++++++ - poppler/Lexer.cc | 30 ++++++++++++++++++++---------- - poppler/Lexer.h | 2 +- - 3 files changed, 27 insertions(+), 11 deletions(-) - -commit 672408839de0deac4c6006b54df723336ee4be2d -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 31 22:05:09 2007 +0000 - - * qt4/src/poppler-page.cc: - Patch by Pino Toscano <pino@kde.org> to remove a nonsense done - by him. - - * qt4/tests/test-poppler-qt4.cpp: - Simply a bit. Patch by Pino Toscano <pino@kde.org>. - - ChangeLog | 8 ++++++++ - qt4/src/poppler-page.cc | 2 -- - qt4/tests/test-poppler-qt4.cpp | 24 ++++++++++++------------ - 3 files changed, 20 insertions(+), 14 deletions(-) - -commit 9c64b8c754e09ff2858af56ce38ef013002bf8e4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 31 18:48:16 2007 +0000 - - * m4/qt.m4: Fix Qt4 detection on Mac. Patch by Benjamin Reed - <ranger@befunk.com> - - ChangeLog | 5 +++++ - m4/qt.m4 | 26 +++++++++++++++++++++++--- - 2 files changed, 28 insertions(+), 3 deletions(-) - -commit 1b81192ff2bb9fae4a7bbc685fafe1718f303a7b -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 28 15:55:11 2007 +0000 - - * glib/poppler-page.cc: Make link mapping coordinates - follow page - rotation. Patch by Carlos Garcia Campos <carlosgc@gnome.org> - * glib/poppler-action.cc: Fix link destination - coordinates. Patch by - Carlos Garcia Campos <carlosgc@gnome.org> - - ChangeLog | 4 ++ - glib/poppler-action.cc | 15 +++++- - glib/poppler-page.cc | 124 - ++++++++++++++++++++++++++++++----------------- - 3 files changed, 97 insertions(+), 46 deletions(-) - -commit 75dcf94f53c2d7241111f0d527ee4d3a2ef0b0cf -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 28 15:36:08 2007 +0000 - - * glib/poppler-document.cc: Plug memory leak in - poppler-document. Patch by Carlos Garcia Campos <carlosgc@gnome.org> - - ChangeLog | 5 +++++ - glib/poppler-document.cc | 30 ++++++++++++++---------------- - 2 files changed, 19 insertions(+), 16 deletions(-) - -commit 682a15fc38a2c569d9b1f9871e3e949b62b33cf8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 21 22:35:23 2007 +0000 - - * poppler-document.cc: - * poppler-page.cc: - * poppler-private.h: - * poppler-qt4.h: - No need to destroy the Splash output device to change its - paper color. - Add the possibility to set flags that affect the rendering - (some - backends supports only some of them, though). - Add a Page::label to get the label associated with a page. - Patches by Pino Toscano <pino@kde.org>. - - ChangeLog | 12 ++++++++++++ - qt4/src/poppler-document.cc | 20 ++++++++++++++++++++ - qt4/src/poppler-page.cc | 14 +++++++++++++- - qt4/src/poppler-private.h | 29 ++++++++++++++++++++++++----- - qt4/src/poppler-qt4.h | 25 +++++++++++++++++++++++++ - 5 files changed, 94 insertions(+), 6 deletions(-) - -commit 7331bc46c1cb323316501f05ae1740bea5655596 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 17 20:06:29 2007 +0000 - - * poppler/Sound.h: - * poppler/Sound.cc: - * qt4/src/poppler-sound.cc: Move most of the sound reading - code - into the Sound class, so frontends can use it easily. - Patch by Pino Toscano <pino@kde.org>. - - ChangeLog | 10 +++- - poppler/Sound.cc | 80 ++++++++++++++++++++++++- - poppler/Sound.h | 32 ++++++++++- - qt4/src/poppler-sound.cc | 144 - ++++++++++++++++----------------------------- - 4 files changed, 167 insertions(+), 99 deletions(-) - -commit 841bee94da7b6376d2e1fb3daaf8b727b90e42d8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jan 13 23:19:21 2007 +0000 - - * poppler/Stream.h: - * poppler/Stream.cc: Remove MemStream::setNeedFree method - i really did - not need it - * qt4/src/poppler-document.cc: - * qt4/src/poppler-link.cc: - * qt4/src/poppler-page.cc: - * qt4/src/poppler-private.h: Make Document::loadFromData - work on - documents with a password and don't need to do a malloc and - a memcpy. - - ChangeLog | 11 ++++++ - poppler/Stream.cc | 5 --- - poppler/Stream.h | 1 - - qt4/src/poppler-document.cc | 74 - ++++++++++++++++++++++-------------------- - qt4/src/poppler-link.cc | 4 +- - qt4/src/poppler-page.cc | 34 ++++++++++---------- - qt4/src/poppler-private.h | 24 +++++++++----- - 7 files changed, 84 insertions(+), 69 deletions(-) - -commit e1432fd7c4a6a2386789f450d39c6d954fd4e656 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jan 13 18:29:39 2007 +0000 - - * configure.ac - * poppler/Makefile.am - * qt4/src/Makefile.am - * qt4/src/poppler-document.cc - * qt4/src/poppler-link.cc - * qt4/src/poppler-page.cc - * qt4/src/poppler-private.h - * qt4/src/poppler-qt4.h: Make the Qt4 backend compilable - even with - no Splash backend. Patch by Pino Toscano <pino@kde.org>. - - ChangeLog | 12 ++++++++++++ - configure.ac | 5 ----- - poppler/Makefile.am | 5 +++-- - qt4/src/Makefile.am | 6 +++++- - qt4/src/poppler-document.cc | 16 ++++++++++++++-- - qt4/src/poppler-link.cc | 1 + - qt4/src/poppler-page.cc | 15 ++++++++++++--- - qt4/src/poppler-private.h | 8 +++++++- - qt4/src/poppler-qt4.h | 6 ++++++ - 9 files changed, 60 insertions(+), 14 deletions(-) - -commit 457038e97325720615c4390ffa075dd8283966ee -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jan 13 17:56:07 2007 +0000 - - * poppler/Stream.h: - * poppler/Stream.cc: Add MemStream::setNeedFree method - * qt4/src/poppler-document.cc: - * qt4/src/poppler-private.h: - * qt4/src/poppler-qt4.h: Add Document::loadFromData method - - ChangeLog | 8 ++++++++ - poppler/Stream.cc | 5 +++++ - poppler/Stream.h | 1 + - qt4/src/poppler-document.cc | 22 ++++++++++++++++++++++ - qt4/src/poppler-private.h | 17 +++++++++++++++-- - qt4/src/poppler-qt4.h | 16 ++++++++++++++++ - 6 files changed, 67 insertions(+), 2 deletions(-) - -commit 4e2a9c49ecab00b1f5d175570165cd490afdd31e -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jan 11 22:28:03 2007 +0000 - - goo/gmem.c: Merge change from xpdf-3.01pl2 - - ChangeLog | 4 ++++ - goo/gmem.c | 13 +++++++++++-- - 2 files changed, 15 insertions(+), 2 deletions(-) - -commit bce14b274fd788d728116950d6464a85e33a9966 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jan 11 22:12:11 2007 +0000 - - * poppler/Catalog.h: - * poppler/Catalog.cc: Limit max depth of recursive calls on - readPageTree to fix MOAB-06-01-2007 - - ChangeLog | 6 ++++++ - poppler/Catalog.cc | 20 +++++++++++++++----- - poppler/Catalog.h | 2 +- - 3 files changed, 22 insertions(+), 6 deletions(-) - -commit 3f0679a336ffaf2aff149f8526fa11f8f8cbda59 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jan 6 21:53:08 2007 +0000 - - Patch by Pino Toscano <pino@kde.org> to fix some memory leaks when - dealing with sounds. - - ChangeLog | 9 +++++++++ - poppler/Sound.cc | 1 + - qt4/src/poppler-link.cc | 5 +++++ - qt4/src/poppler-link.h | 1 + - qt4/src/poppler-page.cc | 4 ++++ - qt4/src/poppler-sound.cc | 7 ++++++- - 6 files changed, 26 insertions(+), 1 deletions(-) - -commit d41cd2f567a955031cb7498d9089e70e14df4a42 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jan 4 19:10:16 2007 +0000 - - qt4/src/poppler-private.h: gmallocn -> new[] - - ChangeLog | 4 ++++ - qt4/src/poppler-private.h | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit f8edfb6832144cbbd1b234f6b35e33325269255c -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jan 4 18:56:13 2007 +0000 - - qt/poppler-page-transition.cc: Fix memory leak. Patch by Tobias - Koenig <tokoe@kde.org> - - ChangeLog | 5 +++++ - qt/poppler-page-transition.cc | 1 + - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit 250a9f4b429344e0968c7bd0c0cebe7af373ae0a -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Dec 30 14:50:25 2006 +0000 - - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-document.cc: Add const & to some parameters. Patch - by Pino Toscano <pino@kde.org> - - ChangeLog | 6 ++++++ - qt4/src/poppler-document.cc | 4 ++-- - qt4/src/poppler-qt4.h | 4 ++-- - 3 files changed, 10 insertions(+), 4 deletions(-) - -commit 250c1f94cc9a53f980fd08364d6cce29db9fd067 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 29 14:08:35 2006 +0000 - - * poppler/UGooString.cc: Patch by Pino Toscano <pino@kde.org> so - that QStringToUGooString does not crash. - - ChangeLog | 5 +++++ - poppler/UGooString.cc | 1 + - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit 42770e5f07407b03dce31c73fd6956f9c8fc9a06 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Fri Dec 29 04:12:40 2006 +0000 - - 2006-12-28 Brad Taylor <brad@getcoded.net> - - * poppler/glib/poppler-document.h: - * poppler/glib/poppler-document.cc: Add - poppler_document_new_from_data - to allow loading PDFs out of memory. - - ChangeLog | 6 +++ - glib/poppler-document.cc | 113 - +++++++++++++++++++++++++++++++++------------ - glib/poppler-document.h | 4 ++ - 3 files changed, 93 insertions(+), 30 deletions(-) - -commit 6fedd991b584e300b5710630fa7942d357fe7aaa -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Dec 28 17:22:36 2006 +0000 - - * qt4/src/poppler-embeddedfile.cc: - * qt4/src/poppler-document.cc: - * qt/poppler-document.cc: Fix memory leaks - - ChangeLog | 6 ++++++ - qt/poppler-document.cc | 4 ++++ - qt4/src/poppler-document.cc | 4 +++- - qt4/src/poppler-embeddedfile.cc | 4 +++- - 4 files changed, 16 insertions(+), 2 deletions(-) - -commit 7da5885e45c33382060276c95d9a3bd117ae55c7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Dec 28 15:51:44 2006 +0000 - - * goo/GooString.cc - * goo/GooString.h - * goo/gmem.c - * goo/gmem.h - * poppler/Lexer.cc - * poppler/Lexer.h - * poppler/PageLabelInfo.cc - * poppler/Parser.cc - * poppler/UGooString.cc - * poppler/UGooString.h: Patch by Krzysztof Kowalczyk - <kkowalczyk@gmail.com> to improve performance. See bug 7808 for - details. - - ChangeLog | 15 ++++ - goo/GooString.cc | 186 - +++++++++++++++++++++++----------------------- - goo/GooString.h | 28 ++++++-- - goo/gmem.c | 3 +- - goo/gmem.h | 2 +- - poppler/Lexer.cc | 19 ++++- - poppler/Lexer.h | 10 +++ - poppler/PageLabelInfo.cc | 1 + - poppler/Parser.cc | 17 +++-- - poppler/UGooString.cc | 137 ++++++++++++++++++++++++++++------ - poppler/UGooString.h | 40 ++++++++-- - 11 files changed, 313 insertions(+), 145 deletions(-) - -commit fbc05a6791fc28ee26a9d9188722ea3453c65ddc -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Dec 27 23:15:06 2006 +0000 - - * poppler/Annot.cc: - * poppler/Annot.h: Add type checking to processing of "Rect". Patch - by Scott Turner <scotty1024@mac.com> - - ChangeLog | 6 ++++++ - poppler/Annot.cc | 48 +++++++++++++++++++++++++++++------------------- - poppler/Annot.h | 1 + - 3 files changed, 36 insertions(+), 19 deletions(-) - -commit dc6b372358ac629c43aa2faabd644942cb0ed98b -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Dec 27 15:23:04 2006 +0000 - - Remove , after last value of enum. Thanks to André Wöbbeking - - ChangeLog | 1 + - poppler/Catalog.h | 2 +- - 2 files changed, 2 insertions(+), 1 deletions(-) - -commit c7d19539a95927eb277966a521f13393c9e116bb -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Dec 27 12:38:58 2006 +0000 - - qt4/src/poppler-qt4.h: Remove , after last value of enum. Thanks to - André Wöbbeking - - ChangeLog | 5 +++++ - qt4/src/poppler-qt4.h | 4 ++-- - 2 files changed, 7 insertions(+), 2 deletions(-) - -commit b29429c702e6540b9f35689b0a164f30e747d5d9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Dec 26 20:07:03 2006 +0000 - - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-page.cc: Add Page::duration() function to the - qt4 frontend. - - ChangeLog | 6 ++++++ - qt4/src/poppler-page.cc | 8 ++++++++ - qt4/src/poppler-qt4.h | 9 ++++++++- - 3 files changed, 22 insertions(+), 1 deletions(-) - -commit 62dfc58903b496c4cc720c8b2c759c6fb82fb443 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Dec 26 19:56:28 2006 +0000 - - * glib/test-poppler-glib.c: - * glib/poppler-page.cc: - * glib/poppler-page.h: - * poppler/Page.cc: - * poppler/Page.h: Implement /Dur entry in page object. Patch - by Carlos - Garcia Campos <carlosgc@gnome.org> - - ChangeLog | 9 +++++++++ - glib/poppler-page.cc | 16 ++++++++++++++++ - glib/poppler-page.h | 1 + - glib/test-poppler-glib.c | 7 +++++++ - poppler/Page.cc | 13 +++++++++++++ - poppler/Page.h | 6 ++++++ - 6 files changed, 52 insertions(+), 0 deletions(-) - -commit 34e5aa62f4d3ba7a2d94a68a91c11a48277a4119 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Dec 23 13:12:13 2006 +0000 - - * poppler/PSTokenizer.cc: Enhance PSTokenizer::getToken - performance. - Patch by Scott Turner <scotty1024@mac.com>. In a random pdf - i tested - the patchs improves PSTokenizer::getToken performance by 15% - - ChangeLog | 6 ++++++ - poppler/PSTokenizer.cc | 33 +++++++++++++++++++++------------ - poppler/PSTokenizer.h | 1 + - 3 files changed, 28 insertions(+), 12 deletions(-) - -commit 1a5fa1d2ced62e7d027e085663e987cff625ce0b -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 22 23:39:41 2006 +0000 - - poppler/Page.cc: Fix memory leak when reading a wrong color map in - a thumbnail. Patch by Scott Turner <scotty1024@mac.com> - - ChangeLog | 3 +++ - poppler/Page.cc | 1 + - 2 files changed, 4 insertions(+), 0 deletions(-) - -commit dd1c134dcf085338a85188c7f205fc300396dc86 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 22 23:27:53 2006 +0000 - - qt/poppler-page.cc: Fix memory leak in Page::textList. Patch by - Jerry Epplin <jepplin@globalvelocity.com> - - ChangeLog | 5 +++++ - qt/poppler-page.cc | 4 +++- - 2 files changed, 8 insertions(+), 1 deletions(-) - -commit 87e474a018c4808d6251fd79f9e9640e0f733551 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Thu Dec 21 01:01:30 2006 +0000 - - 2006-12-20 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: Fix scaling of maskedImage - masks. They - should be scaled to the size of the image not the size of - the mask. - Fixes #9403. - - ChangeLog | 6 ++++++ - poppler/CairoOutputDev.cc | 8 ++------ - 2 files changed, 8 insertions(+), 6 deletions(-) - -commit 769a89623c680f51690db1751522b016b02b83a8 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Dec 20 19:55:55 2006 +0000 - - 2006-12-20 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/GlobalParams.cc: Try to make zero-width lines as - close to - one pixel wide as we can. Fixes #9393. - - ChangeLog | 5 +++++ - poppler/CairoOutputDev.cc | 10 ++++++++-- - 2 files changed, 13 insertions(+), 2 deletions(-) - -commit 5c4bca18373528f293bd5e080efca572977fc1ff -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Dec 19 20:27:55 2006 +0000 - - poppler/SplashOutputDev.cc: Fix gray calculation. Patch by Scott - Turner <scotty1024@mac.com> - - ChangeLog | 5 +++++ - poppler/SplashOutputDev.cc | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit fba99578f6001ae0c0df0442bb73040b55109b1d -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Tue Dec 12 05:23:59 2006 +0000 - - 2006-12-12 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: Change a cairo_set_matrix to - cairo_transform so that we don't blindly clobber the existing - matrix. - Patch by Daniel Colascione. - Fixes #9190. - - ChangeLog | 7 +++++++ - poppler/CairoOutputDev.cc | 2 +- - 2 files changed, 8 insertions(+), 1 deletions(-) - -commit 9a6ffa1c6e009f8606a055f873efdcd5829fcfa2 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Dec 10 05:24:56 2006 +0000 - - 2006-12-09 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/Function.cc: Initialize PostScriptFunction::codeString - to - NULL so that it can safely deleted if initialization fails. - Fixes #9263. - - ChangeLog | 6 ++++++ - poppler/Function.cc | 1 + - 2 files changed, 7 insertions(+), 0 deletions(-) - -commit e92d63a179ae022270156da4e396c15ff9236d89 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Nov 23 19:01:44 2006 +0000 - - * m4/libjpeg.m4: Make JPEG library header search work under - MSYS. Patch by Alexis Wilke - - ChangeLog | 5 +++++ - m4/libjpeg.m4 | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit 3913110f698fd006b394a395b5b0adfde30af31b -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 22 21:55:27 2006 +0000 - - there should not be any whitespace after the \ - - qt4/src/Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit c3ab7addec5a7990872949b813c2b727b1614d64 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 19 18:51:23 2006 +0000 - - Another leak fix on qt4/src/poppler-page.cc the previous changelog - is enough for this one ;-) - - qt4/src/poppler-page.cc | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 9e9b82da91abacb916b05302d40bf822af6ac7f1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Nov 19 12:59:48 2006 +0000 - - * qt4/src/poppler-link.cc: - * qt4/src/poppler-page.cc: - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-textbox.cc: Fix memory leaks - * splash/Splash.cc: Initialize the values of nClipRes - - ChangeLog | 8 ++++++++ - qt4/src/poppler-link.cc | 6 ++++++ - qt4/src/poppler-page.cc | 4 +++- - qt4/src/poppler-qt4.h | 1 + - qt4/src/poppler-textbox.cc | 5 +++++ - splash/Splash.cc | 2 +- - 6 files changed, 24 insertions(+), 2 deletions(-) - -commit b9faacc62182efcbc84df2471e4c5dcf2b03bda8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Nov 18 17:08:04 2006 +0000 - - * qt4/src/poppler-document.cc - * qt4/src/poppler-qt4.h: Add int marginRight, int - marginBottom, int - marginLeft, int marginTop, bool strictMargins to - Document::print() - - ChangeLog | 6 ++++++ - qt4/src/poppler-document.cc | 11 +++++++++-- - qt4/src/poppler-qt4.h | 6 +++++- - 3 files changed, 20 insertions(+), 3 deletions(-) - -commit da8e6d4c3e0afdaa031413649ae20545c8a1f845 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Nov 16 21:03:27 2006 +0000 - - really commit pino's patch :-S - - qt4/src/Doxyfile | 11 +++- - qt4/src/Mainpage.dox | 26 ++++----- - qt4/src/poppler-annotation.h | 33 +++++++----- - qt4/src/poppler-link.h | 68 +++++++++++++++++++++---- - qt4/src/poppler-qt4.h | 115 - ++++++++++++++++++++++++++--------------- - 5 files changed, 171 insertions(+), 82 deletions(-) - -commit 4f26e65096e3133a39fc0c9e82084c90cf77dda9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Nov 16 21:00:10 2006 +0000 - - * qt4/src/Mainpage.dox: - * qt4/src/Doxyfile: - * qt4/src/poppler-annotation.h: - * qt4/src/poppler-link.h: - * qt4/src/poppler-qt4.h: Improve API documentation. Patch by - Pino Toscano. - - Generated docu at http://people.freedesktop.org/~aacid/docs/qt4/ - - ChangeLog | 9 +++++++++ - qt4/src/Mainpage.dox | 2 +- - 2 files changed, 10 insertions(+), 1 deletions(-) - -commit e68b6f3f8fea1e4f036eba0f19bb7e0c423d408c -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Nov 15 21:07:50 2006 +0000 - - 2006-11-15 Albert Astals Cid <aacid@kde.org> - - * qt4/src/poppler-link.cc: - * qt4/src/poppler-page.cc: - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-document.cc: - * qt4/src/poppler-private.h: Generalize the way we render - the pages: - merge all the Page::renderTo* functions in only one that - renders on - a QImage, taking into account the currently chosen backend. - It is possible to switch rendering backend using the Document. - Patch by Pino Toscano. - - * qt4/tests/stress-poppler-qt4.cpp: - * qt4/tests/test-password-qt4.cpp: - * qt4/tests/test-poppler-qt4.cpp: Adapt the tests to the - changes in - the rendering API of Page. Patch by Pino Toscano. - - ChangeLog | 17 +++++ - qt4/src/poppler-document.cc | 14 ++++ - qt4/src/poppler-link.cc | 2 +- - qt4/src/poppler-page.cc | 125 - ++++++++++++++++++++------------------ - qt4/src/poppler-private.h | 32 +++++++--- - qt4/src/poppler-qt4.h | 75 ++++++----------------- - qt4/tests/stress-poppler-qt4.cpp | 3 +- - qt4/tests/test-password-qt4.cpp | 12 ++-- - qt4/tests/test-poppler-qt4.cpp | 17 ++--- - 9 files changed, 153 insertions(+), 144 deletions(-) - -commit 37088dd3335be6e7641c47bea9b1ddd689b07372 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Nov 13 19:16:44 2006 +0000 - - * poppler/ArthurOutputDev.cc: Small fix to get colors right - - ChangeLog | 4 ++++ - poppler/ArthurOutputDev.cc | 8 ++++---- - 2 files changed, 8 insertions(+), 4 deletions(-) - -commit 302e2cab9fd626222c69ad40f7e40be2e65d34a9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Nov 11 15:41:27 2006 +0000 - - Fix typo when outputing PS scale - - ChangeLog | 4 ++++ - poppler/PSOutputDev.cc | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit e3550fb286dae98992b30edbf4a9300fa58d2e77 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Tue Nov 7 23:53:31 2006 +0000 - - 2006-11-07 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: take horizontal scaling into account - when updating the font. Also, cleanup some unused code. Fixes - #8924. - - ChangeLog | 5 +++++ - poppler/CairoOutputDev.cc | 9 ++------- - 2 files changed, 7 insertions(+), 7 deletions(-) - -commit f020b64a72ad5c82c3e7bdcf15039bb0037b1f22 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Oct 18 18:43:59 2006 +0000 - - 2006-10-18 Albert Astals Cid <aacid@kde.org> - - * qt4/src/poppler-document.cc: - * qt4/src/poppler-private.h: Do not crash when opening a - encrypted document. Do not crash when unlocking a locked - document. - - ChangeLog | 7 +++++++ - qt4/src/poppler-document.cc | 41 - ++++++++++++++++------------------------- - qt4/src/poppler-private.h | 14 ++++++++++++++ - 3 files changed, 37 insertions(+), 25 deletions(-) - -commit 577330ee1d4d1021174cf1bd59557a83a017e06f -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Oct 11 23:09:24 2006 +0000 - - * splash/Splash.cc: - * splash/SplashErrorCodes.h: Do not crash on documents that - report a - 0x0 mask for an image, like - http://bugs.kde.org/attachment.cgi?id=18083&action=view - - ChangeLog | 7 +++++++ - splash/Splash.cc | 2 ++ - splash/SplashErrorCodes.h | 2 ++ - 3 files changed, 11 insertions(+), 0 deletions(-) - -commit 42c016c6d3c6de65fd92b51b9d6cc96d52404689 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Oct 8 20:38:47 2006 +0000 - - * poppler/Link.cc: - * poppler/Link.h: - * poppler/Makefile.am: - * poppler/Page.cc: - * poppler/Page.h: - * poppler/Sound.cc: - * poppler/Sound.h: Make poppler able to read Sound objects, - Sound - actions and Opening/Closing page actions. Patch by Pino - Toscano. - - * qt4/src/Makefile.am: - * qt4/src/poppler-link.cc: - * qt4/src/poppler-link.h: - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-page.cc: - * qt4/src/poppler-sound.cc: Support for sounds, sound links - and page - actions in the Qt4 backend. Patch by Pino Toscano. - - ChangeLog | 19 +++++ - poppler/Link.cc | 53 ++++++++++++++ - poppler/Link.h | 32 ++++++++ - poppler/Makefile.am | 2 + - poppler/Page.cc | 8 ++ - poppler/Page.h | 4 + - poppler/Sound.cc | 65 +++++++++++++++++ - poppler/Sound.h | 46 ++++++++++++ - qt4/src/Makefile.am | 1 + - qt4/src/poppler-link.cc | 35 +++++++++ - qt4/src/poppler-link.h | 26 +++++++- - qt4/src/poppler-page.cc | 32 ++++++++ - qt4/src/poppler-qt4.h | 87 ++++++++++++++++++++++ - qt4/src/poppler-sound.cc | 177 - ++++++++++++++++++++++++++++++++++++++++++++++ - 14 files changed, 586 insertions(+), 1 deletions(-) - -commit 1da064d7e7403ec7111eecb2b9613e27a2c4bb5d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Sep 30 16:28:35 2006 +0000 - - * qt4/src/poppler-page.cc: PA is optional, H is a name not a string - - ChangeLog | 4 ++++ - qt4/src/poppler-page.cc | 15 +++++++++------ - 2 files changed, 13 insertions(+), 6 deletions(-) - -commit 29366d8e470ab2207cdfdab115c2fa9618c4c74e -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 25 20:43:18 2006 +0000 - - * glib/Makefile.am - * qt/Makefile.am - * qt4/src/Makefile.am - * qt4/tests/Makefile.am - * test/Makefile.am - * utils/Makefile.am: Add FONTCONFIG_CFLAGS FONTCONFIG_LIBS - for people - that need them. Patch by morfoh@opensde.org. Fixes bug #8415 - - ChangeLog | 10 ++++++++++ - glib/Makefile.am | 2 ++ - qt/Makefile.am | 6 ++++-- - qt4/src/Makefile.am | 2 ++ - qt4/tests/Makefile.am | 2 ++ - test/Makefile.am | 6 ++++-- - utils/Makefile.am | 6 ++++-- - 7 files changed, 28 insertions(+), 6 deletions(-) - -commit 957c1e59df213a01ca87f03d067a8dab5dc09fb6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 25 20:05:28 2006 +0000 - - ignore poppler-features.h - - glib/.cvsignore | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 3158b54375bdfdc82779362cc9442aade87f84f6 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Sep 22 00:55:54 2006 +0000 - - 2006-09-21 Kristian Høgsberg <krh@redhat.com> - - * NEWS: Update list of bugs fixes, release 0.5.4. - - ChangeLog | 2 ++ - NEWS | 2 +- - 2 files changed, 3 insertions(+), 1 deletions(-) - -commit 17dd1f60f9328ae68fbe262ae0745be976ff9f95 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Sep 21 23:28:14 2006 +0000 - - 2006-09-21 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: Check for gtk+ 2.8 for the gtk+ test case, invert - help text for zlib option (#7788, #7661). - - ChangeLog | 3 +++ - configure.ac | 12 +++++------- - 2 files changed, 8 insertions(+), 7 deletions(-) - -commit ddbbd697424b9122ce1f0541ddada3fe8bb38fb1 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Sep 21 22:58:31 2006 +0000 - - 2006-09-21 Kristian Høgsberg <krh@redhat.com> - - * utils/pdftops.cc: Get duplex setting from GlobalParams. - - ChangeLog | 2 ++ - utils/pdftops.cc | 3 ++- - 2 files changed, 4 insertions(+), 1 deletions(-) - -commit 0d25592a1a5811ee8fffbd70307c7bcaaaacadf3 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Sep 21 22:40:52 2006 +0000 - - 2006-09-21 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc (_poppler_page_new): Make PopplerPage - reference its document throughout the lifetime of the page - (#7005). - - ChangeLog | 3 +++ - glib/poppler-page.cc | 5 ++++- - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit b834755c7ae45eb4020e9cdbc3852eac0151fcdc -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Sep 21 22:37:00 2006 +0000 - - 2006-09-21 Kristian Høgsberg <krh@redhat.com> - - * poppler/Gfx.cc: Remove the right out->updateAll() call. - - ChangeLog | 4 ++++ - poppler/Gfx.cc | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit 181e2af1edf2cbc3c8edadad0dce215a64a990dd -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Sep 21 01:05:23 2006 +0000 - - 2006-09-20 Kristian Høgsberg <krh@redhat.com> - - * NEWS: Sum up changes. - - * configure.ac: Bump release to 0.5.4. - - ChangeLog | 4 ++++ - NEWS | 10 ++++++++++ - configure.ac | 2 +- - 3 files changed, 15 insertions(+), 1 deletions(-) - -commit cc9c17a6730422be99ebcd69991fcf5d7b569640 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Sep 21 00:56:33 2006 +0000 - - 2006-09-20 Kristian Høgsberg <krh@redhat.com> - - * poppler/Gfx.cc: Remove last remnant of erroneous type3 commit a - while back, fixing #8182. - - ChangeLog | 5 +++++ - poppler/CairoOutputDev.cc | 1 - - poppler/Gfx.cc | 1 - - 3 files changed, 5 insertions(+), 2 deletions(-) - -commit 83be722b56d9266b89946fe994023351e47eb4fd -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Sep 20 20:22:19 2006 +0000 - - 2006-09-20 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/TextOutputDev.cc: TextFontInfo stores a copy of - a pointer - to a GfxFont but does not increment the reference count. Fix the - problem by calling incRefCnt and decRefCnt appropriately. Fixes - #4649 - - ChangeLog | 6 ++++++ - poppler/TextOutputDev.cc | 4 ++++ - 2 files changed, 10 insertions(+), 0 deletions(-) - -commit 1cf60015d7d78668c83737be6015dc880fd04ebf -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Sep 19 04:39:07 2006 +0000 - - 2006-09-19 Kristian Høgsberg <krh@redhat.com> - - * poppler/GlobalParams.cc: Add scanEncodingDirs() to automatically - scan in any encodings found under ${datadir}/poppler. - - * m4/define-dir.m4: New file, adds AC_DEFINE_DIR macro. - - ChangeLog | 7 +++ - configure.ac | 16 +------ - goo/gfile.cc | 16 +++---- - goo/gfile.h | 2 + - m4/define-dir.m4 | 34 ++++++++++++++ - poppler/GlobalParams.cc | 116 - +++++++++++++++++++++++++++++++--------------- - poppler/GlobalParams.h | 7 +++- - 7 files changed, 136 insertions(+), 62 deletions(-) - -commit 821c883f9df9cc0e5b81aa2e070727996cf3bc4e -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Sep 18 15:40:50 2006 +0000 - - 2006-09-13 Kristian Høgsberg <krh@redhat.com> - - * poppler/Makefile.am (libpoppler_la_LIBADD): Add cairo libs to - link if configured. - - ChangeLog | 3 +++ - poppler/Makefile.am | 4 ++++ - 2 files changed, 7 insertions(+), 0 deletions(-) - -commit d8ab8ebc94c32d32ad17ed54cede453de25d7dd5 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Sep 13 20:25:03 2006 +0000 - - 2006-09-13 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: Tighten glib check (#7906), add check for C++ - compiler (#8048). - - ChangeLog | 5 +++++ - configure.ac | 3 ++- - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit 7c748075e18cfe95be6a56adf09ce7f2f032b86f -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 12 19:48:47 2006 +0000 - - sorry Jeff - - ChangeLog | 7 +++++++ - 1 files changed, 7 insertions(+), 0 deletions(-) - -commit 6cdcfae0e1c6fbec07ee5273e6ad97ef04110868 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Sep 11 21:20:56 2006 +0000 - - 2006-09-11 Albert Astals Cid <aacid@kde.org> - - * qt4/src/poppler-annotation.cc: - * qt4/src/poppler-annotation.h: - * qt4/src/poppler-page.cc: Add support for - LinkAnnotation. Patch by - Pino Toscano - - ChangeLog | 10 +- - qt4/src/poppler-annotation.cc | 230 - ++++++++++++++++++++++++++++++++++++++- - qt4/src/poppler-annotation.h | 22 ++++- - qt4/src/poppler-page.cc | 237 - +++++++++++++++++++++++++---------------- - 4 files changed, 392 insertions(+), 107 deletions(-) - -commit 8335c7eea2aa62a580170f47323d8674bd89e412 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Fri Sep 8 23:28:22 2006 +0000 - - 2006-09-08 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: The work-around for 1x1 imagemasks - was not - calling cairo_set_source causing the rectangles to be drawn - the wrong - colour occasionally. Fix by moving the existing call to - cairo_set_source above the work-around. Fixes #7113. - - ChangeLog | 7 +++++++ - poppler/CairoOutputDev.cc | 8 ++++---- - 2 files changed, 11 insertions(+), 4 deletions(-) - -commit 02d505aa0176b6e5a54ee82426d8333a9ef8f000 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Thu Sep 7 04:01:39 2006 +0000 - - 2006-09-06 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: Avoid crashing in CairoOutputDev if - endString is called without a corresponding beginString. Fixes - #4515. - - ChangeLog | 5 +++++ - poppler/CairoOutputDev.cc | 8 +++++++- - 2 files changed, 12 insertions(+), 1 deletions(-) - -commit 3ea0aada0434c9f815814253dd9d1374ae6643cc -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Sep 6 23:54:30 2006 +0000 - - 2006-09-06 Jeff Muizelaar <jeff@infidigm.net> - - * configure.ac: - * poppler/FlateStream.cc: - * poppler/FlateStream.h: Fix FlateStream to not read more than it - needs. This has a performance impact because our input buffer - is now - only 1 byte large, however correctness is better than performance. - This should fix #3948. - - ChangeLog | 9 +++++++++ - configure.ac | 2 +- - poppler/FlateStream.cc | 35 +++++++++++++++++++++++++---------- - poppler/FlateStream.h | 3 ++- - 4 files changed, 37 insertions(+), 12 deletions(-) - -commit 1d2e6aedca0b8fcce6ac84ae2576ab067912886b -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Tue Sep 5 01:21:50 2006 +0000 - - 2006-09-04 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: Initialize currentFont to NULL before - use. Found by Pascal Terjan. Fixes #7924. - - ChangeLog | 5 +++++ - poppler/CairoOutputDev.cc | 1 + - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit 7905adaa21f2347346927fa567c64be60e2bc69c -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Sep 3 09:27:21 2006 +0000 - - * poppler/Dict.cc: - * poppler/Dict.h: - * poppler/Object.h: - * poppler/Parser.cc: Patch by Krzysztof Kowalczyk to increase - speed by - means of doing less copies between objects. See bug 8112 - for more - information. - - ChangeLog | 9 +++++++++ - poppler/Dict.cc | 4 ++-- - poppler/Dict.h | 11 +++++++++-- - poppler/Object.h | 12 ++++++++++++ - poppler/Parser.cc | 15 +++++++++------ - 5 files changed, 41 insertions(+), 10 deletions(-) - -commit 4da7c90a619002e54f436c4efee723b5bc42a112 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Aug 24 22:32:31 2006 +0000 - - * qt4/src/poppler-private.h: Init m_fontInfoScanner to - NULL. Discovered by - Rafael Rodríguez <rafael.rodriguez.tf@gmail.com> - - ChangeLog | 5 +++++ - qt4/src/poppler-private.h | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit 469202e117910beb4e0ad906d5c154a3bae5c98b -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Aug 16 14:35:14 2006 +0000 - - * qt/poppler-page.cc: Report correct page size. Backport from Qt4 - frontend. Patch by Wilfried Huss - - ChangeLog | 5 +++++ - qt/poppler-page.cc | 10 ++++++++-- - 2 files changed, 13 insertions(+), 2 deletions(-) - -commit b881844e4d31009c5d54c9321a6daaf0f354cf6b -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Aug 16 09:18:04 2006 +0000 - - did not want to commit that, thanks Brad for noticing! - - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit f52380e6d569280839d7c37362bd7cc59f2573c3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Aug 15 22:27:31 2006 +0000 - - add a warning how nasty zlib can be, it can come and it your pdfs - and make your readers crash when you are not looking at it, so be - aware that if you enable it you are on your own ;-) - - ChangeLog | 4 ++++ - configure.ac | 4 ++-- - 2 files changed, 6 insertions(+), 2 deletions(-) - -commit 1caba84b1024f1fa7865deebbf70379855ce078d -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Aug 11 13:12:11 2006 +0000 - - 2006-08-11 Albert Astals Cid <aacid@kde.org> - - * poppler/Catalog.cc: Fix leak - - ChangeLog | 4 ++++ - poppler/Catalog.cc | 1 + - 2 files changed, 5 insertions(+), 0 deletions(-) - -commit 9b6455f6530e273afaa5f948b67ceeec8a06f976 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Aug 10 16:08:51 2006 +0000 - - 2006-08-10 Albert Astals Cid <aacid@kde.org> - - * poppler/SplashOutputDev.cc: Try to fix refs to fonts - yet again - - ChangeLog | 4 ++++ - poppler/SplashOutputDev.cc | 4 ++-- - 2 files changed, 6 insertions(+), 2 deletions(-) - -commit 305f60e0437dcfc5babd449123a1fe4cd062a219 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Aug 5 17:10:07 2006 +0000 - - 2006-08-05 Albert Astals Cid <aacid@kde.org> - - * poppler/Catalog.cc: The name array can contain references - to strings - instead of stings themselves, or at least PDF of - https://bugs.freedesktop.org/show_bug.cgi?id=7780 does. This - makes it - work with that file - * qt4/src/poppler-embeddedfile.cc: Use UGooString for - description - - ChangeLog | 8 ++++++++ - poppler/Catalog.cc | 12 ++++++++++-- - qt4/src/poppler-embeddedfile.cc | 3 ++- - 3 files changed, 20 insertions(+), 3 deletions(-) - -commit dd8758ea3f0f44e9f8362343f15b2064f428ad64 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Aug 4 22:48:09 2006 +0000 - - 2006-08-05 Albert Astals Cid <aacid@kde.org> - - * utils/pdftotext.cc: - * utils/pdfinfo.cc: - * utils/pdffonts.cc: Add the posibility of reading a file - from stdin. - Patch by Dom Lachowicz - - ChangeLog | 7 +++++++ - utils/pdffonts.cc | 11 ++++++++++- - utils/pdfinfo.cc | 11 ++++++++++- - utils/pdftotext.cc | 11 ++++++++++- - 4 files changed, 37 insertions(+), 3 deletions(-) - -commit a418d844cf6baa797919796ceadaf21ef9b2e5b9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Aug 3 10:34:52 2006 +0000 - - * configure.ac: Use the correct variable to output the - utils status. - Patch by Dom Lachowic - - ChangeLog | 5 +++++ - configure.ac | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit 1673b895656143a8a1f1a45e07f777f39995940d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jul 30 20:31:31 2006 +0000 - - * poppler/GfxState.cc: make nGfxBlendModeNames define - return the - correct size of the gfxBlendModeNames array so it does - not access - invalid memory areas when the blend mode is not - found. Discovered by - Krzysztof Kowalczyk - - ChangeLog | 7 +++++++ - poppler/GfxState.cc | 12 +++++++----- - 2 files changed, 14 insertions(+), 5 deletions(-) - -commit e4561568d14e7b3b2aec6ecaf3cc09078bdf7a46 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jul 30 09:38:28 2006 +0000 - - * splash/SplashFontEngine.cc: - * poppler/SplashOutputDev.cc: Fix memory leak when using - embedded - fonts in the pdf file. Patch by Krzysztof Kowalczyk - - ChangeLog | 6 ++++++ - poppler/SplashOutputDev.cc | 8 ++++++-- - splash/SplashFontEngine.cc | 12 ++++++++---- - 3 files changed, 20 insertions(+), 6 deletions(-) - -commit 4a27502159a89992f54be2673b44bf7a8392b60d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jul 29 16:24:53 2006 +0000 - - push back thing i did not want to commit, sorry - - configure.ac | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit ba448afc0e97a9e779409ff228adcd4f627971f5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jul 29 16:22:52 2006 +0000 - - * configure.ac: Disable qt and qt4 frontends if splash - backend is - disabled - - ChangeLog | 5 +++++ - configure.ac | 18 ++++++++++++++---- - 2 files changed, 19 insertions(+), 4 deletions(-) - -commit 1e32d3baa5e8296caf55bd5853216a96618c74ac -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Jul 28 18:17:45 2006 +0000 - - 2006-07-28 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoOutputDev.cc: Don't set font matrix translation - (fix from Behdad Esfahbod). - - ChangeLog | 5 +++++ - poppler/CairoOutputDev.cc | 4 ++-- - 2 files changed, 7 insertions(+), 2 deletions(-) - -commit 0bc1b0f35c28cb80dd27d24110367348e52c143b -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jul 27 18:21:28 2006 +0000 - - fix date, i don't live in the past - - ChangeLog | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 2f27c3a0218608568f6cd1c718ef51b9879023a3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jul 27 18:17:50 2006 +0000 - - * poppler/Stream.cc: If you are going to test a variable, - better - initialize it first ;-) Fixes bug 7646 - - ChangeLog | 5 +++++ - poppler/Stream.cc | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit f39ab43ca824cb7e5db73137c4545b3e85134425 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jul 26 18:16:01 2006 +0000 - - 2006-07-26 Albert Astals Cid <aacid@kde.org> - - * qt/poppler-document.cc: - * qt/poppler-private.h: - * qt/poppler-qt.h: Port the QDomDocument *Document::toc() - const method - from the qt4 frontend to the qt frontend. Patch by Wilfried - Huss - - ChangeLog | 7 +++++ - qt/poppler-document.cc | 18 +++++++++++++++ - qt/poppler-private.h | 58 - ++++++++++++++++++++++++++++++++++++++++++++++++ - qt/poppler-qt.h | 16 +++++++++++++ - 4 files changed, 99 insertions(+), 0 deletions(-) - -commit c3a9fd546b853c85b6be5fc8f4e5a78d8a7e7437 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jul 25 18:39:57 2006 +0000 - - * qt4/src/poppler-document.cc: Obey kdeprint masters in that - a library - should output as much device independent PS as posible, - so disabling - duplex printing for default is a good idea. - - ChangeLog | 6 ++++++ - qt4/src/poppler-document.cc | 2 +- - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit edc0499644b8083600ced9a5087ec0b0189e615b -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Jul 24 19:49:51 2006 +0000 - - 2006-07-24 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: - * poppler/Makefile.am: Move fontconfig dependency to libpoppler. - - ChangeLog | 5 +++++ - configure.ac | 18 +++++++----------- - poppler/Makefile.am | 6 ++++-- - 3 files changed, 16 insertions(+), 13 deletions(-) - -commit 24b5a68a3f4cdba63fbcd01dc178a330b5f604a7 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Tue Jul 18 21:32:11 2006 +0000 - - 2006-07-18 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/Gfx.cc: fix opCloseStroke to match the behaviour of - a separate opClose and opStroke. Previously, opCloseStroke only - closes if there is a path however opClose closes unconditionally. - - ChangeLog | 6 ++++++ - poppler/Gfx.cc | 2 +- - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit c57ebd40fcf85432b2e5045086d158a63af12525 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Tue Jul 18 21:26:57 2006 +0000 - - 2006-07-18 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/TextOutputDev.cc: call setDefaultCTM() after start page - like in Gfx.cc. This fixes a regression caused by the fix - to #6948. - - ChangeLog | 5 +++++ - poppler/TextOutputDev.cc | 1 + - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit 640d5d5a9d9e53f3f677eb05f3d18e6bfc74e95a -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jul 16 18:22:23 2006 +0000 - - 2006-07-16 Albert Astals Cid <aacid@kde.org> - - * poppler/GfxState.cc: Do not crash when we can not - parse a GfxImageColorMap - Fixes crash on pdf that can be found at - - ChangeLog | 7 +++++++ - poppler/GfxState.cc | 4 ++++ - qt4/src/Doxyfile | 4 ++-- - 3 files changed, 13 insertions(+), 2 deletions(-) - -commit c6926d1d8ab04468f56f4687cdd3f06af206226b -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jun 28 19:23:52 2006 +0000 - - * poppler/DCTStream.cc: - * poppler/DCTStream.h: Reset jpeg structures on reset. - Fixes crash while printing pdf at - http://bugs.kde.org/attachment.cgi?id=16818&action=view - - ChangeLog | 7 +++++++ - poppler/DCTStream.cc | 25 ++++++++++++++++++------- - poppler/DCTStream.h | 2 ++ - 3 files changed, 27 insertions(+), 7 deletions(-) - -commit 96ac8dec591a0325a822c1f7b7bc7e78b867e3a0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 25 16:59:31 2006 +0000 - - Ask for paper size width and height to pass it to PSOutputDev in - both qt frontends (qt got abi mantained, qt4 changed as you still - have to define UNSTABLE_POPPLER_QT4 to be able of using it, one day - we'll have to think of removing it) - - ChangeLog | 8 ++++++++ - qt/poppler-document.cc | 9 +++++++-- - qt/poppler-qt.h | 9 +++++++++ - qt4/src/poppler-document.cc | 4 ++-- - qt4/src/poppler-qt4.h | 10 +++++++++- - 5 files changed, 35 insertions(+), 5 deletions(-) - -commit 965011f2001fb1ea36857995d5555266f82b8d96 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 25 16:20:50 2006 +0000 - - put back a change that was not meant to be commited - - qt/poppler-qt.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 4995d09c91173d34a435112828aff21a63b147e9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 25 16:19:32 2006 +0000 - - rename poppler-link.h to poppler-link-qt3.h to not get conflicts - on install - - qt/Makefile.am | 2 +- - qt/poppler-link-qt3.h | 188 +++++++++++++++++++++++++++++++++++ - qt/poppler-link.cc | 258 - +++++++++++++++++++++++++++++++++++++++++++++++++ - qt/poppler-qt.h | 4 +- - 4 files changed, 449 insertions(+), 3 deletions(-) - -commit 087921b134c2646e6d41960f471a1819c7c8790a -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 25 10:29:22 2006 +0000 - - add link support to qt3 frontend. - Patch by Wilfried Huss based on Qt4 code - - ChangeLog | 11 ++++ - qt/Makefile.am | 4 +- - qt/poppler-document.cc | 19 +++---- - qt/poppler-page.cc | 136 - +++++++++++++++++++++++++++++++++++++++++++++-- - qt/poppler-private.h | 33 +++++++++++- - qt/poppler-qt.h | 14 ++++- - 6 files changed, 196 insertions(+), 21 deletions(-) - -commit 831bd8942ef3224354b128d5e14e68fdfc57168b -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 11 16:14:32 2006 +0000 - - optimization by Mario Teijeiro Otero - - poppler/UGooString.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 1223fd4b200f6c13996f8299f3563c818af0c21d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Jun 10 22:23:19 2006 +0000 - - * poppler/UGooString.cc: When any of the chars that we - are passing to the UGooString is not pdfencodable, do not - encode the string, because we loose information if we do, - this fixes rendering of - http://publikationen.ub.uni-frankfurt.de/volltexte/2005/890/pdf/TR_abs_g.pdf - and other docs with type3 fonts and ligatures - - ChangeLog | 9 +++++++++ - poppler/UGooString.cc | 8 ++++++++ - 2 files changed, 17 insertions(+), 0 deletions(-) - -commit b85a39ddfc7de8c0621e995c114885ecd08fcdc2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jun 1 21:03:38 2006 +0000 - - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-page.cc: Add Rotation parameter that - is passed - to the respective output devs - - ChangeLog | 6 ++++++ - qt4/src/poppler-page.cc | 22 ++++++++++++++-------- - qt4/src/poppler-qt4.h | 14 +++++++++----- - 3 files changed, 29 insertions(+), 13 deletions(-) - -commit 2b5d3277f36864ff1ef44f1942f22de247d67ab6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jun 1 17:23:45 2006 +0000 - - * qt/poppler-document.cc: - * qt/poppler-qt.h: Add printing support, patch by - Stefan Kebekus <stefan.kebekus@math.uni-koeln.de> - - ChangeLog | 6 ++++++ - qt/poppler-document.cc | 18 ++++++++++++++++++ - qt/poppler-qt.h | 2 ++ - 3 files changed, 26 insertions(+), 0 deletions(-) - -commit 5380d005b7b54cc6587ce6e8c3bbb358da5cd9a5 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Thu Jun 1 06:42:25 2006 +0000 - - 2006-06-01 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/PSOutputDev.cc: - * poppler/PSOutputDev.h: Change filename parameter to PSOutputDev - constructor from char * to const char *. - - ChangeLog | 6 ++++++ - poppler/PSOutputDev.cc | 2 +- - poppler/PSOutputDev.h | 2 +- - 3 files changed, 8 insertions(+), 2 deletions(-) - -commit c2a81ea8b01f3943a2eb737cf957acc0d05f7eed -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed May 31 20:14:04 2006 +0000 - - * poppler/SplashOutputDev.cc: - * splash/Splash.cc: Fix no splashModeRGB8Qt mode, that is, - make it - show images - - I'm sorry, really, i'll try to do better - - ChangeLog | 6 ++++++ - poppler/SplashOutputDev.cc | 10 ++++++++++ - splash/Splash.cc | 3 +++ - 3 files changed, 19 insertions(+), 0 deletions(-) - -commit 643b310cf51474b6dfc077fe086ea121e807f6e1 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed May 31 19:18:28 2006 +0000 - - 2006-05-31 Jeff Muizelaar <jeff@infidigm.net> - - * TODO: Remove items's from my list that are done. - - ChangeLog | 4 ++++ - TODO | 3 --- - 2 files changed, 4 insertions(+), 3 deletions(-) - -commit 96e582721dcb15ea258b989c7c500084bff9f56d -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed May 31 17:31:49 2006 +0000 - - 2006-05-31 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDev.h: Change the cairo backend to use the - transformation in cairo instead of doing all of the - transformations in - the OutputDevice. Fixes #6948. - - ChangeLog | 7 ++ - poppler/CairoOutputDev.cc | 200 - ++++++++++++++++++++------------------------- - poppler/CairoOutputDev.h | 1 + - 3 files changed, 96 insertions(+), 112 deletions(-) - -commit 00ffb9bf50b6b3b2e8eaa8af593aaa01d4a62a34 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed May 31 04:53:27 2006 +0000 - - 2006-05-31 Kristian Høgsberg <krh@redhat.com> - - * NEWS: Sum up changes. - - * configure.ac: Bump release to 0.5.3. - - ChangeLog | 6 ++++++ - NEWS | 8 ++++++++ - configure.ac | 2 +- - 3 files changed, 15 insertions(+), 1 deletions(-) - -commit 223a4bf3a679f666b6c963a8787cf5b5ac75c4b6 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed May 31 02:02:54 2006 +0000 - - 2006-05-30 Kristian Høgsberg <krh@redhat.com> - - * poppler-glib.pc.in: - * configure.ac: Add poppler as a private requires if pkg-config - supports it. - - ChangeLog | 6 ++++++ - configure.ac | 11 +++++++++++ - poppler-glib.pc.in | 3 ++- - 3 files changed, 19 insertions(+), 1 deletions(-) - -commit 7aaa4d3fbdb8ea2534d3cb80e68b2759b2e8fd2f -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue May 30 21:46:06 2006 +0000 - - 2006-05-30 Kristian Høgsberg <krh@redhat.com> - - * test/gtk-cairo-test.cc: Add --page option to gtk-cairo-test. - - ChangeLog | 4 ++++ - test/gtk-cairo-test.cc | 21 ++++++++++++++++++--- - 2 files changed, 22 insertions(+), 3 deletions(-) - -commit f7c1d519b9695ad8adfdcf3af696de746cdcf375 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Mon May 29 18:44:17 2006 +0000 - - 2006-05-29 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoFontEngine.cc: - * poppler/CairoFontEngine.h: - * poppler/CairoOutputDev.cc: Allow CairoFont creation to fail more - gracefully. Fixes #4030. - - ChangeLog | 7 +++++++ - poppler/CairoFontEngine.cc | 27 +++++++++++++++++++++------ - poppler/CairoFontEngine.h | 4 +++- - poppler/CairoOutputDev.cc | 5 +++++ - 4 files changed, 36 insertions(+), 7 deletions(-) - -commit 84861800dad3649d4757d5c5539b9e86e2b2c644 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat May 27 17:27:37 2006 +0000 - - 2006-05-27 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDev.h: Back out the rest of krh's type3 - font work. This fixes type3 fonts in CairoOutputDevice. - - ChangeLog | 6 ++++++ - poppler/CairoOutputDev.cc | 3 +++ - poppler/CairoOutputDev.h | 2 +- - 3 files changed, 10 insertions(+), 1 deletions(-) - -commit 6f5a89a0a2cf17d45d1c31ce105829be8c7ac456 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue May 23 20:49:16 2006 +0000 - - * poppler/SplashOutputDev.cc: - * qt4/src/poppler-private.h: - * splash/Splash.cc: - * splash/SplashBitmap.cc: - * splash/SplashTypes.h: bring splashModeRGB8 back to the - old code - (before Frank's patch), create splashModeRGB8Qt that has - Frank's - codepath and is used by Qt frontends. Fixes corruption on - other programs expecting the old behaviour. - - Remember dude we are now a lib! you can not change behaviour from - one day to another! - - /me hits himself - - ChangeLog | 11 +++ - poppler/SplashOutputDev.cc | 8 ++ - qt/poppler-private.h | 2 +- - qt4/src/poppler-private.h | 2 +- - splash/Splash.cc | 169 - ++++++++++++++++++++++++++++++++++++++++++++ - splash/SplashBitmap.cc | 26 ++++++- - splash/SplashTypes.h | 2 + - 7 files changed, 216 insertions(+), 4 deletions(-) - -commit 495d592c3ba7fe81e03774f5b2ed677e5aa560c7 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue May 23 19:16:37 2006 +0000 - - 2006-05-23 Kristian Høgsberg <krh@redhat.com> - - * qt4/src/Makefile.am (libpoppler_qt4_la_SOURCES): Add missing - - ChangeLog | 5 +++++ - qt4/src/Makefile.am | 1 + - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit eecd06c86585bca05c99cd2e9a1b1ff3bbae3c72 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon May 22 20:19:35 2006 +0000 - - 2006-05-22 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: Bump release. - * NEWS: Sum up changes. - - ChangeLog | 5 +++++ - NEWS | 11 ++++++++++- - configure.ac | 2 +- - 3 files changed, 16 insertions(+), 2 deletions(-) - -commit 680f20dfd1cf0342d49516b3848a2aef5d2a3883 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon May 22 19:58:41 2006 +0000 - - 2006-05-22 Kristian Høgsberg <krh@redhat.com> - - Patch from Rainer Keller to fix the ImageOutputDev (#6984). - - * utils/ImageOutputDev.cc (drawImage): Upate to work with new - 16-bit color representation. - - * utils/ImageOutputDev.h: Return gTrue for needNonText(). - - ChangeLog | 9 +++++++++ - NEWS | 4 ++++ - utils/ImageOutputDev.cc | 6 +++--- - utils/ImageOutputDev.h | 2 +- - 4 files changed, 17 insertions(+), 4 deletions(-) - -commit e43a06bf6e953fa9af18476e2c9f27106398c09c -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sun May 21 23:26:45 2006 +0000 - - 2006-05-21 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoFontEngine.cc: - * poppler/CairoFontEngine.h: Back out type3 font work committed by - accident. - - ChangeLog | 6 + - poppler/CairoFontEngine.cc | 347 - +++++--------------------------------------- - poppler/CairoFontEngine.h | 17 +-- - 3 files changed, 47 insertions(+), 323 deletions(-) - -commit 7d4bb0533f88f06449ebd64c1220d0b75001937d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun May 21 18:14:15 2006 +0000 - - fix all is blue issue on ppc machines - - ChangeLog | 7 +++++++ - qt/poppler-page.cc | 17 +++++++++++++++++ - qt4/src/poppler-page.cc | 17 +++++++++++++++++ - 3 files changed, 41 insertions(+), 0 deletions(-) - -commit 655af1e0126ca96d75c9c718d7d8f928c898b1f6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun May 21 17:19:53 2006 +0000 - - hope to fix really Kouhei's name now - - ChangeLog | 10 +++++----- - 1 files changed, 5 insertions(+), 5 deletions(-) - -commit cc783a1ebe868ff75db5472775dabe0020ae501f -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun May 21 11:54:30 2006 +0000 - - Fix Kouhei name - - ChangeLog | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit e4b6ad3bb873a6f334934921e6d56e9d26e06a9a -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri May 19 22:55:49 2006 +0000 - - Add bug number to ChangeLog entry. - - ChangeLog | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 46f5f070cceb2c0f3b53537c8e33340b9f1bba38 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri May 19 22:26:03 2006 +0000 - - 2006-05-19 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-action.h: - * glib/poppler-action.cc: Add poppler_dest_get_type(), patch from - Kouhei Souto (#6907). - - ChangeLog | 4 ++++ - glib/poppler-action.cc | 13 +++++++++++++ - glib/poppler-action.h | 4 ++++ - 3 files changed, 21 insertions(+), 0 deletions(-) - -commit 875dc5b112dfe2d4a48a7567b1ff79257447cc0d -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri May 19 22:21:35 2006 +0000 - - 2006-05-19 Kristian Høgsberg <krh@redhat.com> - - * poppler-glib.pc.in (Requires): Add gdk-2.0 dependency, from - Kouhei Souto (#6896). - - ChangeLog | 3 +++ - poppler-glib.pc.in | 2 +- - 2 files changed, 4 insertions(+), 1 deletions(-) - -commit b66dda2640c088bbe205f698a0c4028144027922 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri May 19 22:19:21 2006 +0000 - - 2006-05-19 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-document.h (POPPLER_TYPE_INDEX_ITER) - (POPPLER_TYPE_FONTS_ITER): Add these macros, patch from Kouhei - Souto (#6897). - - ChangeLog | 4 ++++ - glib/poppler-document.h | 2 ++ - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit 095730456c0d8312067af10dd55a3b9165a83736 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri May 19 22:16:25 2006 +0000 - - 2006-05-19 Kristian Høgsberg <krh@redhat.com> - - * glib/Makefile.am (INCLUDES): Add define for G_LOG_DOMAIN, from - Kouhei Souto (#6899). - - ChangeLog | 3 +++ - glib/Makefile.am | 1 + - 2 files changed, 4 insertions(+), 0 deletions(-) - -commit b8d77633899c1dec5f3b9c9a0f075f39afa98965 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri May 19 22:12:38 2006 +0000 - - 2006-05-19 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-document.cc (poppler_document_save): Memleak patch - from Paolo Borelli (#6908). - - ChangeLog | 5 +++++ - glib/poppler-document.cc | 2 ++ - 2 files changed, 7 insertions(+), 0 deletions(-) - -commit 488f77298fee9eebbca5983c1c9fb186b3b67aa3 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri May 19 22:04:17 2006 +0000 - - 2006-05-19 Kristian Høgsberg <krh@redhat.com> - - * TextOutputDev.h: - * TextOutputDev.cc: - * UnicodeTypeTable.h: - * UnicodeTypeTable.cc: - * UnicodeCClassTables.h: - * UnicodeCompTables.h: - * UnicodeDecompTables.h: - * gen-unicode-tables.py: Patch from Ed Catmur (#2929) to convert - search string and document text to unicode NFKC (compatibility - composition) before matching so ligatures match correctly. - - ChangeLog | 13 + - poppler/Makefile.am | 5 + - poppler/TextOutputDev.cc | 41 +- - poppler/TextOutputDev.h | 3 + - poppler/UnicodeCClassTables.h | 1827 +++++++++ - poppler/UnicodeCompTables.h | 665 ++++ - poppler/UnicodeDecompTables.h | 8526 - +++++++++++++++++++++++++++++++++++++++++ - poppler/UnicodeTypeTable.cc | 235 ++ - poppler/UnicodeTypeTable.h | 3 + - 9 files changed, 11303 insertions(+), 15 deletions(-) - -commit ecb942e54a1ab0f7eded91b7d1278f0ac62e2071 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri May 19 21:42:54 2006 +0000 - - 2006-05-19 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc (poppler_page_prepare_output_dev): Fix the - rotation bug for real. - - ChangeLog | 5 +++++ - glib/poppler-page.cc | 16 +++++++++------- - 2 files changed, 14 insertions(+), 7 deletions(-) - -commit 28ae789afe0625a641525e4a0768d51fa8bd667c -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri May 19 20:54:13 2006 +0000 - - 2006-05-19 Kristian Høgsberg <krh@redhat.com> - - Patch from Kouhei Sutou (#6905). - - * glib/poppler-document.cc: - * glib/poppler-document.h: - * glib/poppler-private.h: - * glib/reference/tmpl/poppler-private.sgml: - * glib/reference/tmpl/poppler.sgml: Make PopplerPSOutput a proper - glib object. - - ChangeLog | 11 ++++++ - glib/poppler-document.cc | 51 - ++++++++++++++++++++++++----- - glib/poppler-document.h | 4 ++ - glib/poppler-private.h | 2 + - glib/reference/tmpl/poppler-private.sgml | 1 + - glib/reference/tmpl/poppler.sgml | 1 + - 6 files changed, 61 insertions(+), 9 deletions(-) - -commit 02cf7fd7df0b2d8c2b1c6f108e581bc1c7a973b1 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri May 19 20:35:43 2006 +0000 - - 2006-05-19 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc (poppler_page_prepare_output_dev): Fix - rotation bug (#6913, #6926). - - ChangeLog | 3 +++ - glib/poppler-page.cc | 12 +++++++++++- - 2 files changed, 14 insertions(+), 1 deletions(-) - -commit 78ae3efd9541d7b63ff5a2c4de3fde300806688f -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri May 19 19:21:59 2006 +0000 - - 2006-05-19 Kristian Høgsberg <krh@redhat.com> - - Memory leak patch from Carlos Garcia Campos (#6947). - - * glib/poppler-action.cc: - * glib/poppler-document.cc: - * glib/poppler-page.cc: - * poppler/CairoFontEngine.cc: - * poppler/CairoFontEngine.h: - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDev.h: - * poppler/Gfx.cc: - * poppler/TextOutputDev.cc: Fix various memory leaks. - - ChangeLog | 14 ++ - glib/poppler-action.cc | 9 +- - glib/poppler-document.cc | 31 +++- - glib/poppler-page.cc | 2 + - poppler/CairoFontEngine.cc | 347 - +++++++++++++++++++++++++++++++++++++++----- - poppler/CairoFontEngine.h | 17 ++- - poppler/CairoOutputDev.cc | 5 +- - poppler/CairoOutputDev.h | 2 +- - poppler/Gfx.cc | 1 + - poppler/TextOutputDev.cc | 9 + - 10 files changed, 381 insertions(+), 56 deletions(-) - -commit 354c1926b7181fd668f221e1d672974e04fda747 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri May 19 17:24:19 2006 +0000 - - * qt4/src/poppler-link.cc: Patch by Pino Toscano, ensure the - splashoutput is created when parsing the TOC. - - ChangeLog | 5 +++++ - qt4/src/poppler-link.cc | 5 +++-- - 2 files changed, 8 insertions(+), 2 deletions(-) - -commit 3c9a5f37704781c9a51e72edd18451870452b9a7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun May 14 16:11:54 2006 +0000 - - * poppler/FontInfo.cc: Fix possible crash, half patch - by Kouhei Sutou <kou@cozmixng.org> - - ChangeLog | 5 +++++ - poppler/FontInfo.cc | 4 ++-- - 2 files changed, 7 insertions(+), 2 deletions(-) - -commit 436f578fe762e8ceccce95a0f2003406527dde64 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat May 13 16:01:57 2006 +0000 - - * poppler/GfxState.cc: - * poppler/GfxState.h: Fix memleak, patch by - Carlos Garcia Campos <carlosgc@gnome.org> - - ChangeLog | 6 ++++++ - poppler/GfxState.cc | 8 ++++++++ - poppler/GfxState.h | 3 +-- - 3 files changed, 15 insertions(+), 2 deletions(-) - -commit 906515769097f2e38f6b2c2aff598919b9d1ee0d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat May 13 15:58:37 2006 +0000 - - * qt4/src/poppler-document.cc: leak-- - * qt4/src/poppler-private.h: Refcount globalparams - * qt4/tests/test-poppler-qt4.cpp: Some leaks less - - ChangeLog | 6 ++++++ - qt4/src/poppler-document.cc | 10 +++++----- - qt4/src/poppler-private.h | 8 ++++++++ - qt4/tests/test-poppler-qt4.cpp | 6 ++++-- - 4 files changed, 23 insertions(+), 7 deletions(-) - -commit 46fd63c44369c882d8dac473d4156001d9d4ed18 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat May 13 11:14:24 2006 +0000 - - numbers for easier casting - - qt4/src/poppler-link.h | 14 ++++++++++++-- - 1 files changed, 12 insertions(+), 2 deletions(-) - -commit 35500375e3f790c444ab7e7d0a687d270c5a66b1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri May 12 21:02:01 2006 +0000 - - fixing compile problems for some people - - qt4/src/poppler-page.cc | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 181f09829cf4831965059e3064114d83348c51b5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri May 12 20:40:05 2006 +0000 - - * qt4/src/Makefile.am - * qt4/src/poppler-annotation-helper.h - * qt4/src/poppler-annotation.cc - * qt4/src/poppler-annotation.h - * qt4/src/poppler-link.cc - * qt4/src/poppler-link.h - * qt4/src/poppler-page.cc - * qt4/src/poppler-qt4.h: Code for annotations stripped - from oKular, - it's all based on Enrico's work, so ask him for details, - the problem - is that he left KDE development a while ago. - - ChangeLog | 14 + - qt4/src/Makefile.am | 2 + - qt4/src/poppler-annotation-helper.h | 213 ++++++++++ - qt4/src/poppler-annotation.cc | 792 - +++++++++++++++++++++++++++++++++++ - qt4/src/poppler-annotation.h | 257 ++++++++++++ - qt4/src/poppler-link.cc | 4 +- - qt4/src/poppler-link.h | 2 +- - qt4/src/poppler-page.cc | 691 ++++++++++++++++++++++++++++++ - qt4/src/poppler-qt4.h | 8 +- - 9 files changed, 1980 insertions(+), 3 deletions(-) - -commit 3a48e89dfbe54af73a68ed8e917938f14ad17f01 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue May 9 20:07:06 2006 +0000 - - * qt4/src/Makefile.am: - * qt4/src/poppler-document.cc: - * qt4/src/poppler-link.cc: - * qt4/src/poppler-page.cc: - * qt4/src/poppler-private.h: - * qt4/src/poppler-qt4.h: Adding links extraction code, - should work as - it is basically stripped out from kpdf, but comments are - obviously welcome as always - - ChangeLog | 10 +++ - qt4/src/Makefile.am | 1 + - qt4/src/poppler-document.cc | 13 +-- - qt4/src/poppler-link.cc | 129 ++++++++++++++++++++++++++++++- - qt4/src/poppler-link.h | 178 - +++++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-page.cc | 139 ++++++++++++++++++++++++++++++---- - qt4/src/poppler-private.h | 9 +- - qt4/src/poppler-qt4.h | 56 +++----------- - 8 files changed, 456 insertions(+), 79 deletions(-) - -commit f628e1506e576a8553a9699c1d7f05ef55c24fa2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 8 19:03:51 2006 +0000 - - memleak-- by carlos - - ChangeLog | 5 +++++ - poppler/Catalog.cc | 5 ++++- - 2 files changed, 9 insertions(+), 1 deletions(-) - -commit 1fce6266564583d356817a21f43c6b1ad8ce3716 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat May 6 10:57:07 2006 +0000 - - fix code, i suck - - qt4/src/poppler-page.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit be913b90d59da35a347498b86fdd3edb065aef23 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri May 5 20:51:01 2006 +0000 - - * poppler/Function.cc: quick fix for KDE bug #126760 - - Better solutions are of course accepted - - ChangeLog | 4 ++++ - poppler/Function.cc | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit 2b085293bd73b4e77da848b3fe63a7e82e9ba5e5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu May 4 19:10:55 2006 +0000 - - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-page.cc: Implement search functionality - - more code to make oKular qt4popplered possible, probably not most - quickest code around, feel free to comment/optimize - - ChangeLog | 5 +++++ - qt4/src/poppler-page.cc | 43 - +++++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-qt4.h | 16 ++++++++++++++++ - 3 files changed, 64 insertions(+), 0 deletions(-) - -commit a9b0c7977aba7bc85a8673c7f95187ff17ee4173 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue May 2 04:38:39 2006 +0000 - - 2006-05-02 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc: - * poppler/Gfx.cc: - * poppler/GfxFont.cc: - * poppler/GfxFont.h: - * poppler/GfxState.cc: - * poppler/TextOutputDev.cc: Patch from Gary Coady to add reference - counting to GfxFont so we don't crash on text selection. - - ChangeLog | 10 ++++++++++ - glib/poppler-page.cc | 2 +- - poppler/Gfx.cc | 2 ++ - poppler/GfxFont.cc | 14 +++++++++++++- - poppler/GfxFont.h | 4 ++++ - poppler/GfxState.cc | 7 +++++++ - poppler/TextOutputDev.cc | 1 + - 7 files changed, 38 insertions(+), 2 deletions(-) - -commit 57af0207334ff1a407899370281ebb90fe953a32 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 1 18:33:47 2006 +0000 - - * qt4/src/poppler-page.cc: - * qt4/src/poppler-private.h: - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-textbox.cc: Add nextWord(), hasSpaceAfter() - and - edge() to TextBox - - More things to make poppler-qt4Okular nearer - - ChangeLog | 8 ++++++++ - qt4/src/poppler-page.cc | 14 ++++++++++++++ - qt4/src/poppler-private.h | 11 +++++++++++ - qt4/src/poppler-qt4.h | 8 ++++++++ - qt4/src/poppler-textbox.cc | 23 ++++++++++++++++------- - 5 files changed, 57 insertions(+), 7 deletions(-) - -commit 61b126390f764fd38c79b6a64160a7dc7870bd4a -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 1 13:41:14 2006 +0000 - - revert thing that should not have gone in - - poppler/PageLabelInfo.cc | 43 - +++++++++++++++++++++++++++++++++++++++++++ - poppler/PageLabelInfo.h | 44 - -------------------------------------------- - 2 files changed, 43 insertions(+), 44 deletions(-) - -commit f2424ef63e86d82b2be277e2b268b48aae29601e -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon May 1 13:32:31 2006 +0000 - - * qt4/src/poppler-document.cc: - * qt4/src/poppler-private.h: - * qt4/src/poppler-qt4.h: Add the possibility of setting - the paper - color - - One step more to make oKular fully use the qt4 bindings - - ChangeLog | 7 ++++++ - poppler/PageLabelInfo.cc | 43 - ------------------------------------------ - poppler/PageLabelInfo.h | 44 - +++++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-document.cc | 10 +++++++++ - qt4/src/poppler-private.h | 22 ++++++++++++++++---- - qt4/src/poppler-qt4.h | 6 +++++ - 6 files changed, 84 insertions(+), 48 deletions(-) - -commit 4147400e2b692df7f70c3772e8a4b576d4d85294 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 29 15:23:41 2006 +0000 - - Fix memory leak. Bug 6765 - - ChangeLog | 5 +++++ - poppler/JBIG2Stream.cc | 1 + - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit 960d60467d62d28f20b127d07e8de1af42eec568 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Thu Apr 27 17:26:36 2006 +0000 - - 2006-04-27 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: delete imgStr if some of the cairo - functions fail. Fixes coverty reports #2106, #2107, #2077 and - bug #6764. Patch by Kjartan Maraas. - - ChangeLog | 6 ++++++ - poppler/CairoOutputDev.cc | 34 +++++++++++++++++++++++++--------- - 2 files changed, 31 insertions(+), 9 deletions(-) - -commit 155112131c6e25bfde752cf5daa80a6c9712cfed -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Apr 23 15:50:52 2006 +0000 - - qt4/src/poppler-private.h: Protect us against a link not having - a destination or a namedDestination - - ChangeLog | 5 +++++ - qt4/src/poppler-private.h | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit c902a3a22bcceedc8ee8ca377064efcc8a9178ca -Author: Brad Hards <bradh@frogmouth.net> -Date: Fri Apr 21 12:02:19 2006 +0000 - - Add another path to search for Qt4 libs and includes. - - CCMAIL: montel@kde.org - - m4/qt.m4 | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 18f8e1f1d213dbcda27cd0ec429273801f65e208 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 18 19:11:56 2006 +0000 - - * goo/GooVector.h: Fix typo that was preventing build with MSVC8 - Discovered by Reece Dunn <msclrhd@hotmail.com> - - ChangeLog | 5 +++++ - goo/GooVector.h | 4 ++-- - 2 files changed, 7 insertions(+), 2 deletions(-) - -commit cbbb28a5959343d20dffe945ea83272c0b2e287b -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sun Apr 16 22:59:44 2006 +0000 - - 2006-04-16 Carlos Garcia Campos <carlosgc@gnome.org> - - * glib/poppler-action.cc: - * glib/poppler-action.h: - * glib/poppler-private.h: - * glib/poppler.h: - Add support for named destinations and named actions. - - * glib/poppler-document.cc: - * glib/poppler-document.h: - Allow to find named destinations in document. - - ChangeLog | 12 +++ - glib/poppler-action.cc | 152 - ++++++++++++++++++++++++----- - glib/poppler-action.h | 7 +- - glib/poppler-document.cc | 37 +++++++ - glib/poppler-document.h | 4 +- - glib/poppler-private.h | 2 + - glib/poppler.h | 1 + - glib/reference/tmpl/poppler-action.sgml | 2 + - glib/reference/tmpl/poppler-document.sgml | 4 - - 9 files changed, 189 insertions(+), 32 deletions(-) - -commit 85687a1e0e4c6be2dbfb23ba00018b9c7c7454f5 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Apr 12 06:52:07 2006 +0000 - - 2006-04-12 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDev.h: Add support for masked images to - the cairo - backend. CairoOutputDevice really should have been refactored - before - committing this, but the results were so pretty I couldn't resist. - Fixes #6174. - - ChangeLog | 8 +++ - poppler/CairoOutputDev.cc | 118 - +++++++++++++++++++++++++++++++++++++++++++++ - poppler/CairoOutputDev.h | 8 +++ - 3 files changed, 134 insertions(+), 0 deletions(-) - -commit 6039d4fc65cb25bef20efa29bc29d42086fc0854 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Apr 12 05:46:44 2006 +0000 - - 2006-04-12 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: Fix breakage by krh by only calling - cairo_destroy on non-null. - - ChangeLog | 5 +++++ - poppler/CairoOutputDev.cc | 4 +++- - 2 files changed, 8 insertions(+), 1 deletions(-) - -commit d839a0bd78361930e5e2fe889df12e1e853ffed3 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Apr 12 02:07:07 2006 +0000 - - 2006-04-11 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: - * poppler-glib.pc.in: - * glib/Makefile.am: - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/poppler.h: - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDev.h: - * glib/poppler-features.h.in: - Make the CairoOutputDev render to a cairo_t instead of a - cairo_surface_t and expose that functionality in the glib wrapper - (poppler_page_render). - - * test/Makefile.am: - * test/gtk-cairo-test.cc: - Update gtk-cairo-test to use this new interface and add a spin - button for changing page (#5951). - - * utils/Makefile.am (EXTRA_DIST): Fix warning where this was - assigned twice. - - ChangeLog | 23 ++++ - configure.ac | 8 ++ - glib/Makefile.am | 10 +- - glib/poppler-features.h.in | 24 ++++ - glib/poppler-page.cc | 63 +++++++--- - glib/poppler-page.h | 10 ++ - glib/poppler.h | 1 + - poppler-glib.pc.in | 2 +- - poppler/CairoOutputDev.cc | 23 ++-- - poppler/CairoOutputDev.h | 6 +- - test/Makefile.am | 4 +- - test/gtk-cairo-test.cc | 286 - +++++++++++++------------------------------- - utils/Makefile.am | 6 +- - 13 files changed, 221 insertions(+), 245 deletions(-) - -commit b198c9801c668014c0979c57033a0637e7e046e2 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Mon Apr 10 18:12:44 2006 +0000 - - 2006-04-10 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: take originX and originY into - account in - drawChar() to draw vertical text properly. Fixes #6551. - - ChangeLog | 5 +++++ - poppler/CairoOutputDev.cc | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit fd251f52efc7748fda91cc77fb9d3966e0f02ac8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Apr 9 11:05:51 2006 +0000 - - m4/qt.m4: Improve for systems that need -pthread to be linked when - linking Qt. Patch by Diego Pettenò - - ChangeLog | 5 +++++ - m4/qt.m4 | 28 +++++++++++++++++++++++++++- - 2 files changed, 32 insertions(+), 1 deletions(-) - -commit 36de9747153a2ea9b3cf86c41e75a521441a2e06 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 8 10:44:43 2006 +0000 - - * poppler/Makefile.am: - * qt4/src/Makefile.am: Don't link Qt4 in libpoppler when using - Qt4 frontend - Patch by Stefan Schweizer - - ChangeLog | 6 ++++++ - poppler/Makefile.am | 11 +++++------ - qt4/src/Makefile.am | 1 + - 3 files changed, 12 insertions(+), 6 deletions(-) - -commit bf7afe161d76c50fd1c480eb236607145782e59d -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Apr 5 18:20:56 2006 +0000 - - poppler/JBIG2Stream.cc: Fix for some buggy JBIG2 documents, patch - by Raj Kumar and Paul Walmsley. Fixes bug 6500 - - ChangeLog | 5 +++++ - poppler/JBIG2Stream.cc | 43 +++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 48 insertions(+), 0 deletions(-) - -commit 315f8e488d3db848f88a06c7568b6583bbf0e432 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Apr 5 17:20:56 2006 +0000 - - 2006-04-05 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: use a separate matrix for the - softmask. - fixes #6492. - - ChangeLog | 5 +++++ - poppler/CairoOutputDev.cc | 11 ++++++++++- - 2 files changed, 15 insertions(+), 1 deletions(-) - -commit 0d311518f678a479c1efeaec15011e0a34de80fc -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 4 21:01:01 2006 +0000 - - * splash/Splash.cc: - * splash/SplashBitmap.cc: Make Splashbitmap RGB8 use 32bits - internally - * qt/poppler-page.cc: - * qt4/src/poppler-page.cc: Adapt to splashbitmap change so - copying to - QImage is faster. - Patch by Frank Meerkötter slightly modified by Albert - Astals Cid - - I'll leave adapting the glib frontend for you guys, i tried to adapt - it but i got lost at gdk_pixbuf_get_n_channels (pixbuf); - - ChangeLog | 9 +++++ - qt/poppler-page.cc | 18 +++------- - qt4/src/poppler-page.cc | 15 +++----- - splash/Splash.cc | 81 - ++++++++++++++++++++++++----------------------- - splash/SplashBitmap.cc | 10 +++--- - 5 files changed, 67 insertions(+), 66 deletions(-) - -commit 888bd41b42507f0a1af55c55495d31d802ce7706 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Apr 4 20:42:08 2006 +0000 - - Fix crash when using fixedpoint math. Patch by Frank Meerkoetter - - ChangeLog | 5 +++++ - splash/SplashFTFont.cc | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit 56c98450160b639790931226a045ce4712e7d45e -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Apr 2 18:07:59 2006 +0000 - - Improvements to the Qt4 frontend, comments welcome - - ChangeLog | 7 ++ - m4/qt.m4 | 4 +- - qt4/src/Makefile.am | 1 + - qt4/src/poppler-document.cc | 85 +++++++++++++++++++++------ - qt4/src/poppler-link.cc | 138 - +++++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-page.cc | 9 +++- - qt4/src/poppler-private.h | 95 +++++++++++++++++++++++++++++- - qt4/src/poppler-qt4.h | 86 ++++++++++++++++++++++++--- - 8 files changed, 395 insertions(+), 30 deletions(-) - -commit c80ebf237e9c6232a1d0567a2688a294acfd481b -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Apr 1 11:25:57 2006 +0000 - - Fix bug 6454 - - ChangeLog | 5 +++++ - poppler/XRef.cc | 22 +++++++++++++--------- - 2 files changed, 18 insertions(+), 9 deletions(-) - -commit fe8142fbc12127682b8024673fe1af57b47bb5c9 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Tue Mar 21 04:25:53 2006 +0000 - - 2006-03-20 Jeff Muizelaar <jeff@infidigm.net> - - * glib/poppler-page.cc: Avoid strdup in poppler_page_get_property - and - make code cleaner. Combined with the memleak fix closes #6187. - Patch by chpe. - - ChangeLog | 6 ++++++ - glib/poppler-page.cc | 5 +---- - 2 files changed, 7 insertions(+), 4 deletions(-) - -commit 4f961df2e6e91a0dc0a024ae5acdefa394179a05 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Tue Mar 21 04:19:18 2006 +0000 - - 2006-03-20 Jeff Muizelaar <jeff@infidigm.net> - - * glib/poppler-page.cc: Fix memory leak in poppler_page_get_text - Patch by chpe. - - ChangeLog | 5 +++++ - glib/poppler-page.cc | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit ff4febab0a519732972c21bf76d7693c98265e0f -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Mar 20 20:07:36 2006 +0000 - - Use UGooString for dates, fixes KDE bug 123938 - - ChangeLog | 6 ++++++ - qt/poppler-document.cc | 2 +- - qt4/src/poppler-document.cc | 2 +- - 3 files changed, 8 insertions(+), 2 deletions(-) - -commit 75ac6de8cd651b1cbe2d6a7ffa4574097088041f -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Mon Mar 20 19:12:29 2006 +0000 - - 2006-03-20 Carlos Garcia Campos <calosgc@gnome.org> - - reviewed by: Jeff Muizelaar <jeff@infidigm.net> - - * glib/poppler-document.cc: Fix memory leak in - poppler_font_info_free - - ChangeLog | 6 ++++++ - glib/poppler-document.cc | 2 +- - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit 784f6d9a0888dab34c586ffe14db8e55b8a11f51 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Mon Mar 20 19:02:10 2006 +0000 - - 2006-03-20 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoFontEngine.h: remove unused variables - - ChangeLog | 4 ++++ - poppler/CairoFontEngine.h | 1 - - 2 files changed, 4 insertions(+), 1 deletions(-) - -commit 847436779d7c82b428acfd6339130228bfadca24 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Mar 19 19:19:42 2006 +0000 - - fix date - - ChangeLog | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 401bae69cc7ade676cacd89b483f0a93a653c7a1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Mar 19 17:01:05 2006 +0000 - - fix htmloutputdev - - ChangeLog | 4 ++++ - utils/HtmlOutputDev.cc | 2 +- - utils/HtmlOutputDev.h | 2 +- - 3 files changed, 6 insertions(+), 2 deletions(-) - -commit d56330e688c0a40b4e206ed3bbddd06d7f3ee66c -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Mar 16 22:04:56 2006 +0000 - - * poppler/Page.cc: Remove a #ifdef that was never defined - (nice to - have so sucky W args), probably came from gpdf (it's not - on xpdf - sources) and was causing bugs 6079 and 6167 - - Might be worth backporting to the stable branch - - ChangeLog | 8 +++++++- - poppler/Page.cc | 2 -- - 2 files changed, 7 insertions(+), 3 deletions(-) - -commit 7ed6737b00ece7ca00cee1d148752b11700370e6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Mar 16 19:21:11 2006 +0000 - - poppler/FontInfo.cc: Embedded fonts don't have a font file - - ChangeLog | 4 ++++ - poppler/FontInfo.cc | 20 ++++++++++++-------- - 2 files changed, 16 insertions(+), 8 deletions(-) - -commit a34688ee29e1cdfcbaca232cf005af55af87f796 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Mar 14 19:34:10 2006 +0000 - - * qt4/src/poppler-qt4.h: Fix compilation with gcc4.1, patch by - Michael Olbrich - - ChangeLog | 5 +++++ - qt4/src/poppler-qt4.h | 10 +++++----- - 2 files changed, 10 insertions(+), 5 deletions(-) - -commit 1a90b3aaf6be4ca3ebb47e904842b1e14a0e8dfc -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Mar 11 15:19:02 2006 +0000 - - * poppler/FontInfo.cc: - * poppler/FontInfo.h: Add getFile() function that returns - the path of the font that is beign used in the system to - represent that font - * qt4/src/poppler-document.cc: - * qt4/src/poppler-fontinfo.cc: - * qt4/src/poppler-private.h: - * qt4/src/poppler-qt4.h: Add the file() function - * qt4/tests/poppler-fonts.cpp: Show the path of the font - used to represent each font - - May be interesting to have in the other frontends - - ChangeLog | 13 +++++++++++++ - poppler/FontInfo.cc | 10 ++++++++++ - poppler/FontInfo.h | 2 ++ - qt4/src/poppler-document.cc | 14 +------------- - qt4/src/poppler-fontinfo.cc | 29 +++++++++-------------------- - qt4/src/poppler-private.h | 29 +++++++++++++++++++++++++++++ - qt4/src/poppler-qt4.h | 8 ++++++-- - qt4/tests/poppler-fonts.cpp | 5 +++-- - 8 files changed, 73 insertions(+), 37 deletions(-) - -commit 22b1618185ec70895ec644d9e590c266ff98c9db -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Mar 9 21:56:07 2006 +0000 - - Build with cairo disabled, patch by Eduardo de Barros Lima - - ChangeLog | 5 +++++ - glib/Makefile.am | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit 50ecfadab36a9769b09e4c2c1670d86448a0e1ee -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Feb 28 23:24:59 2006 +0000 - - 2006-02-28 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: Bump release to 0.5.1. - - * NEWS: Sum up 0.5.1 changes so far. - - * TextOutputDev.h: add getters for a couple of attributes. - - * glib/Makefile.am: - * poppler/Makefile.am: Move cairo link dependency to glib - bindings. - - ChangeLog | 11 +++++++++++ - NEWS | 10 ++++++++++ - configure.ac | 2 +- - glib/Makefile.am | 11 ++++++----- - poppler/Makefile.am | 19 ++++++++----------- - poppler/TextOutputDev.h | 7 +++++-- - qt/Makefile.am | 1 + - test/Makefile.am | 16 +++++++++------- - utils/Makefile.am | 29 +++++++++++++++++------------ - 9 files changed, 68 insertions(+), 38 deletions(-) - -commit b9e951ac68b9977ab7217ad0346bcf46a3fa3dfe -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Feb 28 19:59:58 2006 +0000 - - 2006-02-28 Kristian Høgsberg <krh@redhat.com> - - * goo/gmem.c: (gmalloc), (grealloc): - * poppler/JBIG2Stream.cc: - * poppler/Stream.cc: - * poppler/Stream.h: - * splash/SplashXPathScanner.cc: - - More integer overflow fixes from Derek Noonburg (#5922). - - ChangeLog | 10 ++++++++++ - goo/gmem.c | 9 +++++---- - poppler/JBIG2Stream.cc | 12 ++++++++++-- - poppler/Stream.cc | 7 +++++++ - poppler/Stream.h | 2 +- - 5 files changed, 33 insertions(+), 7 deletions(-) - -commit 46db73a142d65a0c944910388d5971debc06ecbf -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Feb 28 18:31:59 2006 +0000 - - 2006-02-28 Kristian Høgsberg <krh@redhat.com> - - * poppler/PSOutputDev.cc: Make PSOutputDev constructor respect - passed in paper size (#5946, #5749). - - ChangeLog | 5 +++++ - poppler/PSOutputDev.cc | 14 ++++++++------ - 2 files changed, 13 insertions(+), 6 deletions(-) - -commit 0f7f2182b2abe965b382937f5569b65a8828fc93 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Feb 28 18:25:00 2006 +0000 - - 2006-02-28 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-document.cc (info_dict_get_string): Refactor - _popper_goo_string_to_utf8() out into it's own function. - - * glib/poppler-page.cc (poppler_page_get_property): Use - _popper_goo_string_to_utf8() here to convert ucs2 page labels. - - * glib/poppler-page.cc (poppler_page_get_selection_region): - Add - braces to fix warning. - - * poppler/PageLabelInfo.cc: If the label prefix string has - a ucs2 - marker, append the number part of the label as ucs2 (#5952). - - ChangeLog | 14 +++ - glib/poppler-document.cc | 52 ++++++----- - glib/poppler-page.cc | 23 +++-- - glib/poppler-private.h | 3 + - glib/reference/tmpl/poppler-enums.sgml | 150 - ------------------------------- - glib/reference/tmpl/poppler-unused.sgml | 130 ++++++++++++++++++++++++++ - glib/test-poppler-glib.c | 2 +- - goo/GooString.cc | 5 + - goo/GooString.h | 4 + - poppler/PageLabelInfo.cc | 39 ++++++--- - poppler/PageLabelInfo.h | 2 +- - 11 files changed, 228 insertions(+), 196 deletions(-) - -commit 1bf83cdc8b75e1c76956ae643ee273e0b558fd08 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 25 12:30:30 2006 +0000 - - fix warning - - ChangeLog | 4 ++++ - poppler/Object.cc | 3 ++- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit eb5642f396c8772c83b2cf27da437413b692c952 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Feb 23 22:26:05 2006 +0000 - - Don't build pdftoppm when splashoutput is disabled as it does not link - - ChangeLog | 5 +++++ - utils/Makefile.am | 13 +++++++++++-- - 2 files changed, 16 insertions(+), 2 deletions(-) - -commit 7c5c1361045429a429a6f40d936f8c7c01fe0d07 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Feb 18 20:17:00 2006 +0000 - - 2006-02-18 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDev.h: - * poppler/GfxState.cc: - * poppler/GfxState.h: Add support for drawSoftMaskedImage to - CairoOutputDev. Ugly but works. - - ChangeLog | 8 ++++ - poppler/CairoOutputDev.cc | 101 - +++++++++++++++++++++++++++++++++++++++++++++ - poppler/CairoOutputDev.h | 6 +++ - poppler/GfxState.cc | 50 ++++++++++++++++++++++ - poppler/GfxState.h | 2 + - 5 files changed, 167 insertions(+), 0 deletions(-) - -commit dcb748f68112bd5f99fea8a3da06666be6cff0c5 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Thu Feb 16 19:41:17 2006 +0000 - - 2006-02-16 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: Work around cairo bug when scaling - 1x1 bitmaps. Fixes #3387. Also gives a performance improvement. - - ChangeLog | 5 +++++ - poppler/CairoOutputDev.cc | 33 ++++++++++++++++++++++++--------- - 2 files changed, 29 insertions(+), 9 deletions(-) - -commit ef1070f6ca2d1e74c5f94728f3aaae22f0990c17 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Feb 16 19:28:54 2006 +0000 - - Update soname - - ChangeLog | 8 ++++++++ - glib/Makefile.am | 2 ++ - poppler/Makefile.am | 2 ++ - qt/Makefile.am | 2 ++ - qt4/src/Makefile.am | 2 ++ - 5 files changed, 16 insertions(+), 0 deletions(-) - -commit 24b9f5c33fb00ff80a79b34444282a57288f636c -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Feb 13 23:04:54 2006 +0000 - - * poppler/ArthurOutputDev.cc: Make it compile after changing code - so we did not pass files to freetype but buffers - - ChangeLog | 5 ++++ - poppler/ArthurOutputDev.cc | 53 - +++++++++++++++---------------------------- - 2 files changed, 24 insertions(+), 34 deletions(-) - -commit 0bda90310b267d3a4963096293eb2bd29b120768 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Feb 13 22:38:44 2006 +0000 - - Probably the last of inner patches missing from kpdf - Everybody will we happy now, kpdf has been finally assimilated - - ChangeLog | 5 ++ - poppler/PSOutputDev.cc | 124 - ++++++++++++++++++++++++++++++++++++++++++++---- - poppler/PSOutputDev.h | 4 +- - 3 files changed, 123 insertions(+), 10 deletions(-) - -commit cf9867fbbee2468a955b5845016585eeedf2debe -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Feb 6 20:49:21 2006 +0000 - - Various fixes from Frank Meerkötter to enable fixedpoint arithmetic - - ChangeLog | 8 ++++++++ - configure.ac | 2 +- - goo/FixedPoint.h | 2 +- - splash/Splash.cc | 4 ++-- - splash/SplashTypes.h | 2 +- - 5 files changed, 13 insertions(+), 5 deletions(-) - -commit f04e2c4f20f821ff8cb9465a715ccbb22091d449 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Feb 6 18:50:10 2006 +0000 - - Jeff Muizelaar's improvements to my yesterday's small patches - - ChangeLog | 6 ++++++ - poppler/Annot.cc | 9 ++++----- - poppler/JBIG2Stream.cc | 2 +- - 3 files changed, 11 insertions(+), 6 deletions(-) - -commit 33e98f81cdfda0935ac7ea79a691976465ec790b -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Feb 5 15:46:10 2006 +0000 - - Some small fixes from kpdf - - ChangeLog | 8 ++++++++ - poppler/Gfx.cc | 1 + - poppler/GfxFont.cc | 1 + - poppler/JBIG2Stream.cc | 2 +- - poppler/SplashOutputDev.cc | 1 - - 5 files changed, 11 insertions(+), 2 deletions(-) - -commit 6d9e6489d24b3105204ff4233f6493136e9b5715 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Feb 4 21:10:41 2006 +0000 - - 2006-02-04 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/Gfx.cc: - * poppler/OutputDev.cc: - * poppler/OutputDev.h: Let output devices know about pdf grouping - operators. - Patch by Thorkild Stray. - - ChangeLog | 8 ++++++++ - poppler/Gfx.cc | 14 ++++++++++++++ - poppler/OutputDev.cc | 16 ++++++++++++++++ - poppler/OutputDev.h | 10 ++++++++++ - 4 files changed, 48 insertions(+), 0 deletions(-) - -commit b4e34d905cd0ca5815a450de35b4c2774f4887c9 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Feb 4 20:48:25 2006 +0000 - - 2006-02-04 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/GlobalParams.cc: Check all fonts returned by fontconfig. - Discard the ones that are not truetype or type1. Fixes #5758. - Patch by Ed Catmur. - - ChangeLog | 6 +++++ - poppler/GlobalParams.cc | 51 - +++++++++++++++++++++++++--------------------- - 2 files changed, 34 insertions(+), 23 deletions(-) - -commit fd85a0afdd7b4cafc68df400d4f94fccaea18c76 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 4 20:34:13 2006 +0000 - - Remove bug from "do not use an external file to pass fonts to - Freetype" patch, patch by Stefan Schweizer - - ChangeLog | 3 +++ - poppler/SplashOutputDev.cc | 14 ++++++++++---- - 2 files changed, 13 insertions(+), 4 deletions(-) - -commit 67ca9d01f8badcf542f60b23521c384c9840ca1b -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 4 20:31:00 2006 +0000 - - Added a DTD of the xml pdftohtml creates patch by Stefan Schweizer - - ChangeLog | 2 ++ - utils/Makefile.am | 2 ++ - utils/pdf2xml.dtd | 28 ++++++++++++++++++++++++++++ - 3 files changed, 32 insertions(+), 0 deletions(-) - -commit f4df23ca7f396883a906f16dfc8db1ebd528e04a -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 4 20:24:03 2006 +0000 - - ignore++ - - utils/.cvsignore | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 93ad488679f594e45547a67e2a7397f4c8bd2820 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Feb 4 20:07:07 2006 +0000 - - Actually create pdftoppm patch by Stefan Schweizer - - ChangeLog | 44 +++++++++++++++++++++++++------------------- - utils/Makefile.am | 10 ++++++++-- - utils/pdftoppm.cc | 9 +++++---- - 3 files changed, 38 insertions(+), 25 deletions(-) - -commit 7d2be955e6345a052590b06b29a6d2fb2111e2e6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Feb 2 23:06:20 2006 +0000 - - CVE-2006-0301 fix by Derek though KDE security team - - ChangeLog | 5 +++++ - splash/SplashXPathScanner.cc | 32 ++++++++++++++++++++------------ - 2 files changed, 25 insertions(+), 12 deletions(-) - -commit c191e7d0f13ea429017e4d4f79ce803e84c72e40 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Feb 2 22:54:27 2006 +0000 - - i should learn on which day i live - - ChangeLog | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 1ddeed60d07c3a7e011f3f594fa9299379d0b000 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Feb 2 22:50:01 2006 +0000 - - don't use files to pass fonts to freetype - - ChangeLog | 26 ++++++++++++ - fofi/FoFiTrueType.cc | 43 ++++++++++++++++--- - fofi/FoFiTrueType.h | 7 ++- - fofi/FoFiType1C.h | 2 +- - goo/gfile.cc | 8 ++++ - poppler/GfxFont.cc | 49 +++++++++++++++++++++- - poppler/GfxFont.h | 2 + - poppler/GlobalParams.cc | 1 + - poppler/GlobalParams.h | 1 + - poppler/SplashOutputDev.cc | 94 - +++++++++++++++++++++--------------------- - splash/SplashFTFontEngine.cc | 44 ++++++++++++------- - splash/SplashFTFontEngine.h | 16 +++---- - splash/SplashFTFontFile.cc | 47 +++++++++++++-------- - splash/SplashFTFontFile.h | 18 ++++---- - splash/SplashFontEngine.cc | 46 ++++++++------------ - splash/SplashFontEngine.h | 16 +++---- - splash/SplashFontFile.cc | 70 +++++++++++++++++++++++++++---- - splash/SplashFontFile.h | 25 +++++++++-- - splash/SplashT1FontEngine.cc | 29 ++++++------- - splash/SplashT1FontFile.cc | 30 +++++++++++-- - splash/SplashT1FontFile.h | 4 +- - 21 files changed, 396 insertions(+), 182 deletions(-) - -commit 34df4cfa5cd8788ccf2ea698cbedd05b209041f5 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Feb 1 03:52:12 2006 +0000 - - 2006-01-31 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/GlobalParams.cc (GlobalParams::getDisplayFont): - Allow ttc fonts to be used. - - ChangeLog | 5 +++++ - poppler/GlobalParams.cc | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit 0184e7c928ec60c0aa3f8634d96ae0cf0ad6d157 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Jan 29 05:16:31 2006 +0000 - - 2006-01-28 Jeff Muizelaar <jeff@infidigm.net> - - * glib/poppler-attachment.h: fix compile by adding <time.h> - include. - Acked-by: Jonathan Blanford <jrb@redhat.com> - - ChangeLog | 5 +++++ - glib/poppler-attachment.h | 1 + - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit c805e25f2f074640e4345f8b71eef8d7de677109 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Jan 26 19:25:07 2006 +0000 - - 2006-01-26 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoOutputDev.cc: Patch from Christian Krause; - handle - 0-width lines (#5545). - - ChangeLog | 5 +++++ - poppler/CairoOutputDev.cc | 6 +++++- - 2 files changed, 10 insertions(+), 1 deletions(-) - -commit 4f48abcd4c21460d4c5b718a7ba18cdceb30c2d1 -Author: Jonathan Blandford <jrb@redhat.com> -Date: Tue Jan 24 06:21:39 2006 +0000 - - Tue Jan 24 01:19:40 2006 Jonathan Blandford <jrb@redhat.com> - - * glib/Makefile.am: - * glib/poppler-attachment.cc: - * glib/poppler-attachment.h: - * glib/poppler-document.cc: - * glib/poppler-document.h: - * glib/poppler-page.cc: - * glib/poppler-private.h: - * glib/poppler.h: - * glib/test-poppler-glib.c: - * glib/reference/tmpl/poppler-enums.sgml: - * glib/reference/tmpl/poppler-unused.sgml: glib bindings - for the - embedded file support. It doesn't support mtime and - ctime yet, - but the rest works. - - ChangeLog | 16 +++ - glib/Makefile.am | 2 + - glib/poppler-attachment.cc | 223 - +++++++++++++++++++++++++++++++ - glib/poppler-attachment.h | 67 +++++++++ - glib/poppler-document.cc | 63 +++++++++ - glib/poppler-document.h | 6 + - glib/poppler-page.cc | 2 +- - glib/poppler-private.h | 6 +- - glib/poppler.h | 1 + - glib/reference/tmpl/poppler-enums.sgml | 150 +++++++++++++++++++++ - glib/reference/tmpl/poppler-unused.sgml | 130 ------------------ - glib/test-poppler-glib.c | 26 ++++- - 12 files changed, 559 insertions(+), 133 deletions(-) - -commit 052bf4b80c8a0dc45f6222617bfd8ae1b9c40410 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Jan 23 18:52:48 2006 +0000 - - 2006-01-23 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: - * poppler/GlobalParams.cc: - * poppler/poppler-config.h.in: - * utils/pdftohtml.cc: - * utils/pdftops.cc: Respect command line paper size settings - (#5641). - Drop the built-in paper sizes. - - ChangeLog | 9 +++++++++ - configure.ac | 1 - - poppler/GlobalParams.cc | 23 ++--------------------- - poppler/poppler-config.h.in | 5 ----- - utils/pdftohtml.cc | 4 +--- - utils/pdftops.cc | 4 +++- - 6 files changed, 15 insertions(+), 31 deletions(-) - -commit fb2054a5031d60aac3ccc9a36b3ed88a32188e33 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Jan 23 15:40:54 2006 +0000 - - 2006-01-23 Kristian Høgsberg <krh@redhat.com> - - * glib/test-poppler-glib.c (print_document_info, print_index): - Move variable declarations to top (#5692). - - * utils/*.cc: Move config.h #include to top of #include's - (#5693). - - ChangeLog | 5 +++++ - glib/test-poppler-glib.c | 5 +++-- - poppler/FontInfo.cc | 2 +- - utils/HtmlOutputDev.cc | 2 +- - utils/ImageOutputDev.cc | 2 +- - utils/pdffonts.cc | 2 +- - utils/pdfimages.cc | 2 +- - utils/pdfinfo.cc | 2 +- - utils/pdftohtml.cc | 4 ++-- - utils/pdftoppm.cc | 2 +- - utils/pdftops.cc | 2 +- - utils/pdftotext.cc | 2 +- - 12 files changed, 19 insertions(+), 13 deletions(-) - -commit 836af3529e827e25f20cb4710cbbf9ed0371a42c -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Jan 23 14:45:30 2006 +0000 - - 2006-01-23 Kristian Høgsberg <krh@redhat.com> - - * splash/SplashFTFont.cc: Don't use deprecated freetype - include - files. - - ChangeLog | 5 +++++ - splash/SplashFTFont.cc | 3 ++- - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit 60e13bf84e4f020a264811e4a5bf85d67e15d6df -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Jan 21 21:56:40 2006 +0000 - - 2006-01-21 Jeff Muizelaar <jeff@infidigm.net> - - * TODO: Add my todo list. - - ChangeLog | 4 ++++ - TODO | 10 ++++++++++ - 2 files changed, 14 insertions(+), 0 deletions(-) - -commit cebba06563d1b691a8bbb83828e47c9cc91e231a -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 18 22:40:26 2006 +0000 - - ok, ok, lasts files, i promise :-/ - - qt4/tests/check_attachments.cpp | 151 - +++++++++++++++++++++++++++++++++++++ - qt4/tests/poppler-attachments.cpp | 37 +++++++++ - 2 files changed, 188 insertions(+), 0 deletions(-) - -commit 0b12e7cce6c6633b1d07e2902a9fa13ff52079e7 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 18 22:38:59 2006 +0000 - - YAMF = Yet Another Missing File - - qt4/src/poppler-embeddedfile.cc | 106 - +++++++++++++++++++++++++++++++++++++++ - 1 files changed, 106 insertions(+), 0 deletions(-) - -commit 38c8f3a53b3eb2be1fbfa360f77285037d89b719 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 18 22:36:01 2006 +0000 - - as usual i foget some files - - poppler/UGooString.cc | 86 - +++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/UGooString.h | 55 +++++++++++++++++++++++++++++++ - 2 files changed, 141 insertions(+), 0 deletions(-) - -commit ad6e7d862c8fa6e10a7dbbb3391cbb0b6c922375 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 18 22:32:13 2006 +0000 - - Brad patch for embedded document extraction, only has Qt4 bindings - for now, needs Qt3 and glib work - - ChangeLog | 42 +++++++++++++ - glib/poppler-action.cc | 2 +- - glib/poppler-document.cc | 1 + - poppler/Annot.cc | 1 + - poppler/Catalog.cc | 133 - ++++++++++++++++++++++++++++++++++++++--- - poppler/Catalog.h | 60 +++++++++++++++++-- - poppler/Dict.cc | 17 +++--- - poppler/Dict.h | 15 +++-- - poppler/FontInfo.cc | 1 + - poppler/Function.cc | 1 + - poppler/Gfx.cc | 1 + - poppler/GfxFont.cc | 5 +- - poppler/GfxState.cc | 1 + - poppler/Link.cc | 9 ++- - poppler/Link.h | 9 ++- - poppler/Makefile.am | 2 + - poppler/Object.h | 17 +++--- - poppler/Outline.cc | 1 + - poppler/PDFDoc.cc | 1 + - poppler/PDFDoc.h | 2 +- - poppler/PSOutputDev.cc | 5 +- - poppler/Page.cc | 1 + - poppler/PageLabelInfo.cc | 1 + - poppler/Parser.cc | 2 + - poppler/SecurityHandler.cc | 1 + - poppler/Stream.cc | 1 + - poppler/XRef.cc | 1 + - qt/poppler-document.cc | 1 + - qt/poppler-page-transition.cc | 1 + - qt4/src/Makefile.am | 1 + - qt4/src/poppler-document.cc | 26 +++++++- - qt4/src/poppler-private.h | 2 + - qt4/src/poppler-qt4.h | 68 +++++++++++++++++++++ - qt4/tests/.cvsignore | 2 + - qt4/tests/Makefile.am | 16 ++++- - utils/HtmlOutputDev.cc | 1 + - utils/pdffonts.cc | 1 + - utils/pdfinfo.cc | 1 + - utils/pdftohtml.cc | 1 + - utils/pdftotext.cc | 1 + - 40 files changed, 401 insertions(+), 54 deletions(-) - -commit 550fb0b617ece7951ec39aec5fa5504cc90022fc -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 18 21:22:12 2006 +0000 - - Add some more documentation to PageTransition, patch by Stefan Kebekus - - ChangeLog | 6 ++++++ - qt/poppler-page-transition.h | 40 - +++++++++++++++++++++++++++++++++------- - qt4/src/Doxyfile | 2 +- - 3 files changed, 40 insertions(+), 8 deletions(-) - -commit d66f3647ff1c38318d4cd056cb4d4c7a32eb6603 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jan 18 18:54:12 2006 +0000 - - poppler/CharCodeToUnicode.cc: Fix check for length that was not - having into account that there could be \n or \r in tokens - an that - those do not have to be took into account. Fixes - http://bugs.kde.org/show_bug.cgi?id=120310 - - ChangeLog | 9 ++++++++- - poppler/CharCodeToUnicode.cc | 31 +++++++++++++++++++++++++++---- - 2 files changed, 35 insertions(+), 5 deletions(-) - -commit d78b670339c8f92a32ab5f0a574d0e21690806f8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jan 17 21:35:31 2006 +0000 - - When doing the parsing check with XREF we did not grow too much. Fixes - serialata10a.pdf - - ChangeLog | 10 ++++++++++ - poppler/Lexer.cc | 22 +++++++++++++++++++--- - poppler/Lexer.h | 8 +++++--- - poppler/Parser.cc | 6 +++--- - poppler/Parser.h | 2 +- - poppler/XRef.cc | 17 +++++++++++++++++ - poppler/XRef.h | 3 +++ - 7 files changed, 58 insertions(+), 10 deletions(-) - -commit f5db636af0cd6e05cd7ede37a8585001d51192a1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jan 17 20:33:08 2006 +0000 - - i suck - i suck - i suck - i suck - i suck - A file i forgot to add to make it compile :-/ - - qt/poppler-page-transition-private.h | 28 ++++++++++++++++++++++++++++ - 1 files changed, 28 insertions(+), 0 deletions(-) - -commit 9cc97908ea67ab431e58129f589e00f41f40a143 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Thu Jan 12 23:54:08 2006 +0000 - - 2006-01-12 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/GlobalParams.cc: Make buildFcPattern() static. - - ChangeLog | 4 ++++ - poppler/GlobalParams.cc | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit c7ce134fb1dadb46e2b3773d0976ea31da0a046f -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Jan 11 16:52:58 2006 +0000 - - 2006-01-11 Kristian Høgsberg <krh@redhat.com> - - * poppler/JBIG2Stream.cc: - * poppler/Stream.cc: Merge patch to fix CVE-2005-3624, - CVE-2005-3625 and CVE-2005-3627 issues. - - ChangeLog | 6 ++++++ - poppler/JBIG2Stream.cc | 32 +++++++++++++++++++++++++++++++- - poppler/Stream.cc | 8 +++++--- - 3 files changed, 42 insertions(+), 4 deletions(-) - -commit ec7fb41725c19bc7f2aad1073fe6397ea0a8da0d -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jan 10 21:57:28 2006 +0000 - - * configure.ac: - * m4/qt.m4: Fix bugs created when splitting the code from - configure.ac, take QTDIR into account when looking for - QtTestLib and - do not die if it is not found as it is not mandatory - * qt/poppler-page-transition.cc: - * qt/poppler-page.cc: - * qt/poppler-private.h: - * qt4/tests/Makefile.am: - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-page.cc: - * qt4/src/Makefile.am: Fix mess created my the moving and - renaming of - PageTransition.cc - - ChangeLog | 15 +++++++++++++++ - configure.ac | 14 ++++---------- - m4/qt.m4 | 5 +++++ - qt/poppler-page-transition.cc | 2 +- - qt/poppler-page.cc | 1 + - qt/poppler-private.h | 5 ----- - qt4/src/Makefile.am | 1 + - qt4/src/poppler-page.cc | 2 +- - qt4/src/poppler-qt4.h | 2 +- - qt4/tests/Makefile.am | 1 + - 10 files changed, 30 insertions(+), 18 deletions(-) - -commit d9bc53a741b3bbd2a202662c66fe70f49ac72a49 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Jan 10 17:59:51 2006 +0000 - - 2006-01-10 Kristian Høgsberg <krh@redhat.com> - - * splash/Makefile.am: Only install splash headers if - --enable-xpdf-headers is given. - - * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Set this here. - - ChangeLog | 7 +++++++ - Makefile.am | 1 + - splash/Makefile.am | 4 ++++ - 3 files changed, 12 insertions(+), 0 deletions(-) - -commit ea6d9b97cec6fabf8a5005c565bbdb378bed7f54 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Tue Jan 10 17:55:59 2006 +0000 - - 2006-01-10 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDev.h: - Fix the following fixme in CairoOutputDevice. - - // FIXME: This is quite right yet, we need to accumulate all - // glyphs within one text object before we clip. Right now this - // just add this one string. - - The fix uses a strategy similar to the one the Splash backend. - textClipPath is used to store the appended path from each call to - endString(). The accumulated path is clipped in endTextObject. - - ChangeLog | 14 ++++++++++++++ - poppler/CairoOutputDev.cc | 27 +++++++++++++++++++++++---- - poppler/CairoOutputDev.h | 1 + - 3 files changed, 38 insertions(+), 4 deletions(-) - -commit 9e8a655a2bd3ca8cff1a150dce0dd378aeca047b -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Jan 8 22:59:48 2006 +0000 - - 2006-01-08 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: Don't try and load type3 fonts - (#4030). - - ChangeLog | 6 +++++- - poppler/CairoOutputDev.cc | 5 ++++- - 2 files changed, 9 insertions(+), 2 deletions(-) - -commit 25fd8e1ea87c41855a4ee702fbe47f5661a54c22 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Jan 8 22:51:17 2006 +0000 - - 2006-01-08 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/Page.cc: use colToByte for reading thumbnails (#5420). - - Patch by Nickolay V. Shmyrev. - - ChangeLog | 6 ++++++ - poppler/Page.cc | 6 +++--- - 2 files changed, 9 insertions(+), 3 deletions(-) - -commit df73ee2ec4b65ccf611f0fd76fb456cc797693d4 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Jan 7 06:10:15 2006 +0000 - - 2006-01-07 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/CairoOutputDev.cc: Initialize (fill|stroke)_opacity. - - ChangeLog | 4 ++++ - poppler/CairoOutputDev.cc | 2 ++ - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit 18eb8de66749082e4aa65cc6d369a533826fab33 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Jan 6 10:05:58 2006 +0000 - - 2006-01-06 Kristian Høgsberg <krh@redhat.com> - - * qt/poppler-page.cc: - * qt/poppler-private.h: - * qt/poppler-qt.h: - * qt4/src/Makefile.am: - * qt/Makefile.am: - * poppler/Makefile.am: Move PageTransition to qt bindings, - move - contents from Private.h to qt/poppler-private.h. - - * poppler/TextOutputDev.cc (visitWord): Remove #warning. - - * utils/Makefile.am (pdfimages_SOURCES): Add ImageOutputDev.h, - use - dist_man1_MANS so we actually dist the man pages. - - * goo/Makefile.am (poppler_goo_include_HEADERS): Add - GooVector.h. - - * glib/reference/Makefile.am: DOC_SOURCE_DIR must be - relative to - $(srcdir), fix this to make distchek run. - - * m4/qt.m4: - * m4/libjpeg.m4: - * acinclude.m4: - * configure.ac: Split out Qt and libjpeg checks from - configure.ac - and acinclude.m4 to m4/qt.m4 and m4/libjpeg.m4. - - ChangeLog | 26 ++++ - acinclude.m4 | 112 ---------------- - configure.ac | 223 - +++---------------------------- - glib/reference/Makefile.am | 2 +- - glib/reference/tmpl/poppler-enums.sgml | 150 --------------------- - glib/reference/tmpl/poppler-unused.sgml | 130 ++++++++++++++++++ - goo/Makefile.am | 1 + - m4/libjpeg.m4 | 109 +++++++++++++++ - m4/qt.m4 | 206 - ++++++++++++++++++++++++++++ - poppler/Makefile.am | 1 - - poppler/PageTransition.h | 118 ---------------- - poppler/Private.h | 30 ---- - poppler/TextOutputDev.cc | 2 - - qt/Makefile.am | 8 +- - qt/poppler-page-transition.cc | 187 ++++++++++++++++++++++++++ - qt/poppler-page-transition.h | 117 ++++++++++++++++ - qt/poppler-page.cc | 1 - - qt/poppler-private.h | 9 +- - qt/poppler-qt.h | 2 +- - qt4/src/Makefile.am | 8 +- - utils/Makefile.am | 54 ++++++-- - 21 files changed, 857 insertions(+), 639 deletions(-) - -commit 93921e77115ebe4d527f98675e438de485e84507 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jan 5 23:53:33 2006 +0000 - - * poppler/DCTStream.cc: Fix handling of malformed jpeg streams like - the one at http://bugs.kde.org/show_bug.cgi?id=119569 - - Might be worth backporting to 0.4.x - - ChangeLog | 5 +++++ - poppler/DCTStream.cc | 26 ++++++++++++++++---------- - 2 files changed, 21 insertions(+), 10 deletions(-) - -commit 0dc16af02071350a0dc11af4106799378c99cdad -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jan 5 13:53:58 2006 +0000 - - Introduce variants of renderTo that return a QImage and do not use - a QPixmap so threading is possible. - - ChangeLog | 8 ++++++ - qt/poppler-page.cc | 18 +++++++++---- - qt/poppler-qt.h | 30 ++++++++++++++++++++---- - qt4/src/poppler-page.cc | 9 ++++++- - qt4/src/poppler-qt4.h | 59 - +++++++++++++++++++++++++--------------------- - 5 files changed, 85 insertions(+), 39 deletions(-) - -commit 5c2cbf5d327c6cc75c073b56c3ab1748c0d24387 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jan 2 14:24:31 2006 +0000 - - Use error() instead std::cerr in PageTranstion.cc - - ChangeLog | 4 ++++ - poppler/PageTransition.cc | 5 +++-- - 2 files changed, 7 insertions(+), 2 deletions(-) - -commit da5a4233498b56df611e1c7bca0090306cb5dbe0 -Author: Jonathan Blandford <jrb@redhat.com> -Date: Mon Jan 2 00:06:45 2006 +0000 - - Sun Jan 1 18:50:51 2006 Jonathan Blandford <jrb@redhat.com> - - * Makefile.am: - * autogen.sh: - * configure.ac: - * gtk-doc.make: - * glib/Makefile.am: enable gtk-doc support. - - ChangeLog | 8 +++ - Makefile.am | 2 + - autogen.sh | 14 +++++ - configure.ac | 4 ++ - glib/Makefile.am | 1 + - gtk-doc.make | 153 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - m4/gtk-doc.m4 | 53 +++++++++++++++++++ - 7 files changed, 235 insertions(+), 0 deletions(-) - -commit 372c34cc9728d7041bc4f6893c0bae50c9501c50 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 1 22:35:48 2006 +0000 - - * qt4/src/poppler-private.h: - * qt4/src/poppler-page.cc: - * qt4/src/poppler-document.cc: Don't create a SplashOutputDev - for - every splashRenderToPixmap - - ChangeLog | 4 ++++ - qt4/src/poppler-document.cc | 1 - - qt4/src/poppler-page.cc | 18 +++++------------- - qt4/src/poppler-private.h | 24 +++++++++++++++++++++++- - 4 files changed, 32 insertions(+), 15 deletions(-) - -commit 6ff83474ac594368015334db9c6b33d3a552079f -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jan 1 22:18:47 2006 +0000 - - * qt/poppler-page.cc: - * qt/poppler-private.h: Don't create a SplashOutputDev for every - renderToPixmap. - - ChangeLog | 6 ++++++ - qt/poppler-page.cc | 8 +------- - qt/poppler-private.h | 24 +++++++++++++++++++++++- - 3 files changed, 30 insertions(+), 8 deletions(-) - -commit 6942646d4c82327a80b021838a38aa55c1026883 -Author: Jonathan Blandford <jrb@redhat.com> -Date: Sun Jan 1 20:34:36 2006 +0000 - - Sun Jan 1 15:32:08 2006 Jonathan Blandford <jrb@redhat.com> - - * glib/reference/*: More gtk-doc work. Not enabled for - building - by default, but filled in. - - .cvsignore | 1 + - ChangeLog | 5 + - glib/reference/.cvsignore | 18 ++ - glib/reference/Makefile.am | 87 +++++++ - glib/reference/poppler-docs.sgml | 17 ++ - glib/reference/poppler-sections.txt | 151 +++++++++++ - glib/reference/poppler.types | 4 + - glib/reference/tmpl/poppler-action.sgml | 172 +++++++++++++ - glib/reference/tmpl/poppler-document.sgml | 354 - ++++++++++++++++++++++++++ - glib/reference/tmpl/poppler-enums.sgml | 169 ++++++++++++ - glib/reference/tmpl/poppler-page.sgml | 243 ++++++++++++++++++ - glib/reference/tmpl/poppler-private.sgml | 128 +++++++++ - glib/reference/tmpl/poppler.sgml | 216 ++++++++++++++++ - glib/reference/tmpl/stamp-poppler-enums.sgml | 19 ++ - 14 files changed, 1584 insertions(+), 0 deletions(-) - -commit 0fab1b711f153859e113cb3b6d734ddcb58fb87a -Author: Jonathan Blandford <jrb@redhat.com> -Date: Sat Dec 31 02:10:33 2005 +0000 - - Fri Dec 30 21:08:33 2005 Jonathan Blandford <jrb@redhat.com> - - * glib/*{cc,h}: Update inline doc comments. This is in - preparation for gtk-doc support. - - ChangeLog | 5 ++ - glib/poppler-action.cc | 14 ++++ - glib/poppler-action.h | 2 - - glib/poppler-document.cc | 151 - +++++++++++++++++++++++++++++++++++++++++++++- - glib/poppler-document.h | 4 +- - glib/poppler-page.cc | 28 +++++++++ - glib/poppler.cc | 16 +++++ - glib/test-poppler-glib.c | 29 +++++++++ - 8 files changed, 243 insertions(+), 6 deletions(-) - -commit 313530036b204eaa5ddfa150730302e855560d6a -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 30 22:54:46 2005 +0000 - - A delete that slipped from the last patch-commit - - qt4/src/poppler-page.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit cf6f8123af19aca4200b58a454652f68ce8132e2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 30 22:31:32 2005 +0000 - - Puting PageTransition implementation into poppler "core", both Qt - and Qt4 frontends use it. - - poppler/Makefile.am | 1 + - poppler/PageTransition.cc | 188 - +++++++++++++++++++++++++++++++++++++++++++++ - poppler/PageTransition.h | 118 ++++++++++++++++++++++++++++ - poppler/Private.h | 30 +++++++ - qt/Makefile.am | 2 +- - qt/poppler-page.cc | 111 +------------------------- - qt/poppler-qt.h | 72 +----------------- - qt4/src/Makefile.am | 2 +- - qt4/src/poppler-page.cc | 17 ++++- - qt4/src/poppler-qt4.h | 14 +++- - 10 files changed, 374 insertions(+), 181 deletions(-) - -commit 56035ab199ac6deb5c1e07e745d120d1121a5960 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Dec 30 21:59:58 2005 +0000 - - * utils/HtmlOutputDev.cc: - * utils/ImageOutputDev.cc: Fix build when using --disable-libjpeg - - ChangeLog | 5 +++++ - utils/HtmlOutputDev.cc | 2 ++ - utils/ImageOutputDev.cc | 2 ++ - 3 files changed, 9 insertions(+), 0 deletions(-) - -commit 8b64dafc7f1d198fb0052c0d6f0da6de97bbb48d -Author: Brad Hards <bradh@frogmouth.net> -Date: Wed Dec 28 09:23:43 2005 +0000 - - Plug a few memory leaks in the Qt4 bindings. - - ChangeLog | 25 +++++++++++++++++++ - qt4/src/poppler-document.cc | 3 ++ - qt4/src/poppler-private.h | 7 ++++- - qt4/src/poppler-qt4.h | 3 ++ - qt4/tests/check_fonts.cpp | 8 ++++++ - qt4/tests/check_metadata.cpp | 50 - +++++++++++++++++++++++++++++++++---- - qt4/tests/check_pagelayout.cpp | 6 ++++ - qt4/tests/check_pagemode.cpp | 10 +++++++ - qt4/tests/check_permissions.cpp | 2 + - qt4/tests/check_version.cpp | 22 ---------------- - qt4/tests/poppler-fonts.cpp | 1 + - qt4/tests/stress-poppler-qt4.cpp | 2 + - 12 files changed, 110 insertions(+), 29 deletions(-) - -commit 64c07a20a4ed844f3b3dd26e974f58d5877cf9fd -Author: Brad Hards <bradh@frogmouth.net> -Date: Tue Dec 27 06:10:01 2005 +0000 - - qt4/src/poppler-qt4.h and qt4/src/poppler-document.cc: add - convertDate() function that - turns char* PDF date strings into QDateTime. This version handles - the timezone conversions. Refactored the existing date() method - to use it. - - qt4/tests/check_dateConversion.cpp: unit tests for convertDate() - qt4/tests/check_metadata.cpp: update to reflect UTC. - qt4/tests/.cvsignore: suppress check_dateConversion - - ChangeLog | 9 +++ - qt4/src/poppler-document.cc | 89 ++++++++++++++++++++----------- - qt4/src/poppler-qt4.h | 5 ++ - qt4/tests/.cvsignore | 1 + - qt4/tests/Makefile.am | 11 +++- - qt4/tests/check_dateConversion.cpp | 105 - ++++++++++++++++++++++++++++++++++++ - qt4/tests/check_metadata.cpp | 4 +- - 7 files changed, 188 insertions(+), 36 deletions(-) - -commit 4b2e3b5106b75f23c830837a886cd29beb1d1d1b -Author: Brad Hards <bradh@frogmouth.net> -Date: Tue Dec 27 05:08:34 2005 +0000 - - * qt4/src/Doxyfile (JAVADOC_AUTOBRIEF): Turned on automatic - \brief mode. - - * qt4/src/poppler-qt4.h: Update API documentation. Patch from - Stefan Kebekus, with some changes. Removed \brief entries. - - ChangeLog | 8 +++++ - qt4/src/Doxyfile | 2 +- - qt4/src/poppler-qt4.h | 81 - ++++++++++++++++++++++++++++++++++++++---------- - 3 files changed, 73 insertions(+), 18 deletions(-) - -commit 8d9cf43aaa73d5012428a6a4c5d7e2cccbd3036e -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Dec 21 22:09:47 2005 +0000 - - 2005-12-21 Kristian Høgsberg <krh@redhat.com> - - * NEWS: Sum up 0.5 changes so far. - - * acinclude.m4: Split jpeg macros out into this file. - - * poppler/Stream.cc: Apply latest CVE-2005-3191 updates. - - ChangeLog | 8 ++++ - NEWS | 8 ++++ - acinclude.m4 | 112 - +++++++++++++++++++++++++++++++++++++++++++++++++ - configure.ac | 114 - -------------------------------------------------- - poppler/JPXStream.cc | 1 + - poppler/Stream.cc | 11 ++++- - 6 files changed, 137 insertions(+), 117 deletions(-) - -commit 97243286560cb4f264b875185c8768a6af09d554 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Dec 21 17:30:33 2005 +0000 - - 2005-12-21 Kristian Høgsberg <krh@redhat.com> - - * utils/Makefile.am: Add parseargs.h to sources and add - -I$(top_srcdir)/poppler to INCLUDES. - - * poppler/CairoFontEngine.cc: Apply patch from Hiroyuki - Ikezoe to - man non-embedded CJK fonts work. - - ChangeLog | 14 +++++++++-- - configure.ac | 2 +- - poppler/CairoFontEngine.cc | 52 - +++++++++++++++++++++++++++++++++++++++---- - utils/Makefile.am | 15 +++++++----- - 4 files changed, 68 insertions(+), 15 deletions(-) - -commit cf887a9a9fae7272165d3aae05c85444ff5ca604 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 18 22:03:30 2005 +0000 - - * poppler/Page.cc: Only discard cropbox sizes one by one - and not - completely. Jeff and Martin were right - - ChangeLog | 2 ++ - poppler/Page.cc | 13 ++++++++++--- - 2 files changed, 12 insertions(+), 3 deletions(-) - -commit 495890b9cef9d5d61bb47e789add1cf2c3b8f83d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 18 21:56:15 2005 +0000 - - + .cvsignore - - utils/.cvsignore | 10 ++++++++++ - 1 files changed, 10 insertions(+), 0 deletions(-) - -commit 5dca860bba6918e06fab3aa56a2c75f0ac9ecdfb -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 18 21:08:48 2005 +0000 - - Fix utils building on Slackware - - ChangeLog | 3 +++ - configure.ac | 3 +++ - utils/Makefile.am | 3 ++- - 3 files changed, 8 insertions(+), 1 deletions(-) - -commit 03e3d9164ffd71f03136b57a9941ea14fadb21aa -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 18 17:12:28 2005 +0000 - - 2005-12-18 Albert Astals Cid <aacid@kde.org> - - * configure.ac: Better jpeg detection, refer to ml PCbsd - problem - - ChangeLog | 4 ++ - configure.ac | 131 - ++++++++++++++++++++++++++++++++++++++++++++++++++-------- - 2 files changed, 118 insertions(+), 17 deletions(-) - -commit 888d76a29c9c5ea6c90cc4299b230ca0c2c2944f -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Dec 12 20:21:08 2005 +0000 - - * poppler/Page.cc: Ignore cropBox if it seems incorrect - - ChangeLog | 4 ++++ - poppler/Page.cc | 7 +++++++ - 2 files changed, 11 insertions(+), 0 deletions(-) - -commit bcc5e3afe27c8787ce7022a0701997c96eddb4fe -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Dec 12 20:15:11 2005 +0000 - - 2005-12-12 Kristian Høgsberg <krh@redhat.com> - - * Makefile.am: - * configure.ac: - * goo/GooVector.h: - * utils/HtmlFonts.cc: - * utils/HtmlFonts.h: - * utils/HtmlLinks.cc: - * utils/HtmlLinks.h: - * utils/HtmlOutputDev.cc: - * utils/HtmlOutputDev.h: - * utils/ImageOutputDev.cc: - * utils/ImageOutputDev.h: - * utils/Makefile.am: - * utils/parseargs.c: - * utils/parseargs.h: - * utils/pdffonts.1: - * utils/pdffonts.cc: - * utils/pdfimages.1: - * utils/pdfimages.cc: - * utils/pdfinfo.1: - * utils/pdfinfo.cc: - * utils/pdftohtml.1: - * utils/pdftohtml.cc: - * utils/pdftoppm.1: - * utils/pdftoppm.cc: - * utils/pdftops.1: - * utils/pdftops.cc: - * utils/pdftotext.1: - * utils/pdftotext.cc: Add command line utilities from xpdf. - - ChangeLog | 31 + - Makefile.am | 6 +- - configure.ac | 25 +- - goo/GooVector.h | 101 +++ - utils/HtmlFonts.cc | 326 ++++++++++ - utils/HtmlFonts.h | 85 +++ - utils/HtmlLinks.cc | 101 +++ - utils/HtmlLinks.h | 49 ++ - utils/HtmlOutputDev.cc | 1569 - +++++++++++++++++++++++++++++++++++++++++++++++ - utils/HtmlOutputDev.h | 302 +++++++++ - utils/ImageOutputDev.cc | 195 ++++++ - utils/ImageOutputDev.h | 76 +++ - utils/Makefile.am | 18 + - utils/parseargs.c | 190 ++++++ - utils/parseargs.h | 71 +++ - utils/pdffonts.1 | 128 ++++ - utils/pdffonts.cc | 294 +++++++++ - utils/pdfimages.1 | 96 +++ - utils/pdfimages.cc | 159 +++++ - utils/pdfinfo.1 | 157 +++++ - utils/pdfinfo.cc | 376 ++++++++++++ - utils/pdftohtml.1 | 85 +++ - utils/pdftohtml.cc | 429 +++++++++++++ - utils/pdftoppm.1 | 113 ++++ - utils/pdftoppm.cc | 189 ++++++ - utils/pdftops.1 | 224 +++++++ - utils/pdftops.cc | 336 ++++++++++ - utils/pdftotext.1 | 135 ++++ - utils/pdftotext.cc | 337 ++++++++++ - 29 files changed, 6194 insertions(+), 9 deletions(-) - -commit 5fbded32741acb5fac411189f80cb57aa11df517 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Dec 10 10:52:15 2005 +0000 - - * qt4/src/poppler-page.cc: - * qt4/src/poppler-qt4.h: - * qt4/src/tests/test-poppler-qt4.cpp: The parameters x,y,w,h to the - method splashRenderToPixmap are now used. Convenient - defaults are provided. The test has been changed accordingly. Some - added documentation. Patch by Stefan Kebekus - - ChangeLog | 9 +++++++++ - qt4/src/poppler-page.cc | 4 ++-- - qt4/src/poppler-qt4.h | 31 +++++++++++++++++++++++-------- - qt4/tests/test-poppler-qt4.cpp | 2 +- - 4 files changed, 35 insertions(+), 11 deletions(-) - -commit bc6df8c41081c0c0107655cbf70ddb8b0c493c34 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Dec 9 20:49:59 2005 +0000 - - 2005-12-09 Kristian Høgsberg <krh@redhat.com> - - * poppler/GfxState.cc: Use colToByte() for converting - GxfColorComp - to bytes (really fix #5117). - - * poppler/Stream.cc: Remove duplicated check (#5243). - - ChangeLog | 5 +++++ - poppler/GfxState.cc | 6 +++--- - poppler/Stream.cc | 4 ---- - 3 files changed, 8 insertions(+), 7 deletions(-) - -commit 8a2464122455311c6d16ae62bb9ac9a0ae365a28 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Dec 9 19:40:40 2005 +0000 - - 2005-12-09 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: - * poppler/Makefile.am (poppler_includedir): - * goo/Makefile.am (poppler_goo_include_HEADERS): Make - installation - of xpdf header files optional. - - ChangeLog | 10 +++++++++- - configure.ac | 8 ++++++++ - goo/Makefile.am | 4 ++++ - poppler/Makefile.am | 4 ++++ - 4 files changed, 25 insertions(+), 1 deletions(-) - -commit 830b61bfd1c985fe14ec4d0f6724c8f70e924fc1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Dec 8 18:17:42 2005 +0000 - - * configure.ac: Detect if gettimeofday is available, fixes - for correct - linking to Qt4 on windows - * goo/GooTimer.[cc|h]: Only build if gettimeofday is available - * poppler/Gfx.cc: Only use the timer for profiling if - gettimeofday is - available - * poppler/GlobalParams.cc: Remove extra unlockGlobalParams - that was - making windows hang - * splash/SplashFTFontEngine.cc: i need unistd.h on windows - also - * splash/SplashFontFile.cc: i need unistd.h on windows also - - ChangeLog | 12 ++++++++++++ - configure.ac | 14 +++++++++++++- - goo/GooTimer.cc | 3 +++ - goo/GooTimer.h | 4 ++++ - poppler/Gfx.cc | 6 ++++++ - poppler/GlobalParams.cc | 1 - - splash/SplashFTFontEngine.cc | 4 +--- - splash/SplashFontFile.cc | 4 +--- - 8 files changed, 40 insertions(+), 8 deletions(-) - -commit 0a1c33ed17fd7053ed455da3444856a5dab3c9b4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Dec 8 12:42:50 2005 +0000 - - Remove -DDATADIR we are not using if for anything and it shadows a - windows typedef - - ChangeLog | 8 ++++++++ - glib/Makefile.am | 3 +-- - poppler/Makefile.am | 3 +-- - qt/Makefile.am | 3 +-- - test/Makefile.am | 3 +-- - 5 files changed, 12 insertions(+), 8 deletions(-) - -commit adca042e666fd932f16213d0a4daba08b5021901 -Author: Brad Hards <bradh@frogmouth.net> -Date: Wed Dec 7 08:42:21 2005 +0000 - - Remove the version check. OK'd by krh. - - ChangeLog | 2 ++ - poppler/PDFDoc.cc | 6 +----- - 2 files changed, 3 insertions(+), 5 deletions(-) - -commit bc57f8dd73eef9a74e4a6e248ed6985c360db838 -Author: Brad Hards <bradh@frogmouth.net> -Date: Wed Dec 7 08:31:09 2005 +0000 - - Add infoKeys() - allows you to get a list of all the string names - (keys) - for the metadata. - - ChangeLog | 7 +++++++ - qt4/src/poppler-document.cc | 22 ++++++++++++++++++++++ - qt4/src/poppler-qt4.h | 7 +++++++ - qt4/tests/check_metadata.cpp | 18 ++++++++++++++++++ - 4 files changed, 54 insertions(+), 0 deletions(-) - -commit 7ec41df91e6dbf792e11676d929acc2f634bd382 -Author: Brad Hards <bradh@frogmouth.net> -Date: Tue Dec 6 09:58:04 2005 +0000 - - Add more unit tests for better coverage. - - ChangeLog | 6 ++++ - qt4/tests/check_fonts.cpp | 24 +++++++++++++++ - qt4/tests/check_metadata.cpp | 66 - ++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 96 insertions(+), 0 deletions(-) - -commit a92b10016306ac46775c9b95b52d249b233ff950 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Dec 5 20:46:22 2005 +0000 - - * poppler/CairoFontEngine.cc: Correct fix for #5149, i broke it when - merging xpdf 3.01 patches - - ChangeLog | 5 +++++ - poppler/CairoFontEngine.cc | 4 +--- - 2 files changed, 6 insertions(+), 3 deletions(-) - -commit 66096477d1a86f13fcb07ae25caff1cc02b1e7cd -Author: Brad Hards <bradh@frogmouth.net> -Date: Sun Dec 4 19:48:25 2005 +0000 - - Add checking for Type3 fonts in the unit test. - - ChangeLog | 5 +++++ - qt4/tests/check_fonts.cpp | 24 ++++++++++++++++++++++++ - 2 files changed, 29 insertions(+), 0 deletions(-) - -commit 62345b0affed8e2e37728fca7f2b750879192c43 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 4 18:53:40 2005 +0000 - - Fix error in merging CAN-2005-3193 fix. Thanks Daniel Gryniewicz - for notifying - - ChangeLog | 5 +++++ - poppler/JPXStream.cc | 2 -- - 2 files changed, 5 insertions(+), 2 deletions(-) - -commit ba4b3f88271892f197aa2ec076c80ff63a175887 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Dec 4 11:30:00 2005 +0000 - - * qt/poppler-qt.h: - * qt/poppler-fontinfo.h: - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-fontinfo.cc: Implement copy constructor of - FontInfo needed - as Q[Value]List<FontInfo> uses it when appending - - ChangeLog | 8 ++++++++ - qt/poppler-fontinfo.cc | 9 +++++++++ - qt/poppler-qt.h | 2 ++ - qt4/src/poppler-fontinfo.cc | 9 +++++++++ - qt4/src/poppler-qt4.h | 2 ++ - 5 files changed, 30 insertions(+), 0 deletions(-) - -commit e091231d98d12c19b0098ffbaec6ecda28097dff -Author: Brad Hards <bradh@frogmouth.net> -Date: Sun Dec 4 10:45:25 2005 +0000 - - Add new unit test to .cvsignore suppressions. - - ChangeLog | 2 ++ - qt4/tests/.cvsignore | 1 + - 2 files changed, 3 insertions(+), 0 deletions(-) - -commit 6a7b1eaaedbfdd3a8e6b4d899477350f2b485641 -Author: Brad Hards <bradh@frogmouth.net> -Date: Sun Dec 4 10:05:21 2005 +0000 - - * qt4/src/poppler-qt4.h: - qt4/src/fontinfo.cc: add implementation for FontInfo::typeName() - - * qt4/tests/check_fonts.cpp: - * qt4/tests/Makefile.am: add unit test for fonts - - * qt4/src/Mainpage.dox: Minor typo fixes. - - ChangeLog | 11 +++++++++++ - qt4/src/Mainpage.dox | 5 +++-- - qt4/src/poppler-fontinfo.cc | 24 ++++++++++++++++++++++++ - qt4/src/poppler-qt4.h | 14 +++++++++++++- - qt4/tests/Makefile.am | 5 +++++ - qt4/tests/check_fonts.cpp | 42 - ++++++++++++++++++++++++++++++++++++++++++ - 6 files changed, 98 insertions(+), 3 deletions(-) - -commit 31b28b4c59f7820901e9cf893197f381acbae8ce -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sun Dec 4 02:24:25 2005 +0000 - - 2005-12-03 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc (poppler_page_set_selection_alpha): Use - Nickolays original fix instead of trying to be clever with - gdk_pixbuf_fill(). - - * poppler/CairoFontEngine.cc: Fix text corruption bug (#5149), - a rerun of an old classic (#3340). - - ChangeLog | 7 +++++++ - glib/poppler-page.cc | 8 +++++++- - poppler/CairoFontEngine.cc | 2 ++ - 3 files changed, 16 insertions(+), 1 deletions(-) - -commit 4d169c5c345cdac84a39026e759b928977643417 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sun Dec 4 01:42:29 2005 +0000 - - 2005-12-03 Kristian Høgsberg <krh@redhat.com> - - * poppler/GfxState.cc: Fixing another problem with new GfxRGB - representation causing images to show up as random pixels - (#5117). - - ChangeLog | 5 +++++ - poppler/GfxState.cc | 6 +++--- - 2 files changed, 8 insertions(+), 3 deletions(-) - -commit 58de0458e17b1639ce0bcae45a4b09b2c0a56618 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sat Dec 3 23:23:53 2005 +0000 - - 2005-12-03 Kristian Høgsberg <krh@redhat.com> - - * qt/Makefile.am (noinst_PROGRAMS): Only build qt test - program if - splash is enabled. - - * poppler/CairoOutputDev.cc: Remove unused grid snapping code, - sidestepping #4507. - - * glib/poppler-document.h (PopplerPermissions): Breaking enum - definition over multiple lines confuses glib-mkenums (#4600). - - * poppler/Makefile.am (libpoppler_la_LIBADD): Add - FREETYPE_LIBS - (#4515). - - * poppler/TextOutputDev.cc: - * qt/poppler-qt.h: GCC-4.1 fixes (#5031). - - ChangeLog | 17 +++++++++++++++++ - glib/poppler-document.h | 5 +---- - poppler/CairoOutputDev.cc | 35 +++++++++-------------------------- - poppler/CairoOutputDev.h | 2 +- - poppler/Makefile.am | 3 ++- - poppler/TextOutputDev.cc | 2 +- - qt/Makefile.am | 4 ++++ - qt/poppler-qt.h | 6 +++--- - 8 files changed, 38 insertions(+), 36 deletions(-) - -commit df45483f1437d8a96519e1428d1f4b3ffc08c2cd -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Dec 3 22:39:06 2005 +0000 - - remove another chagne should not have gone in - - test/pdf-inspector.cc | 9 ++------- - 1 files changed, 2 insertions(+), 7 deletions(-) - -commit 7dfe02ee112dee51346525b62d877e6591135761 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Dec 3 22:28:46 2005 +0000 - - Add the font retrieveing on the qt3 backend also, based on a patch - by Wilfried Huss - - ChangeLog | 3 ++ - qt/poppler-fontinfo.cc | 75 - ++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 78 insertions(+), 0 deletions(-) - -commit 655b9dd195ac9faf2f7ea0255880b8c83b249a06 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Dec 3 22:26:07 2005 +0000 - - this should have not went in - - poppler/TextOutputDev.h | 10 +++++----- - 1 files changed, 5 insertions(+), 5 deletions(-) - -commit ab45eb562159d5b006e658ec66723a0a47908f65 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Dec 3 22:20:54 2005 +0000 - - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-fontinfo.cc: - * qt4/src/poppler-textbox.cc: Remove implementation of that classes - from the header, use pimpl - - ChangeLog | 9 ++++- - poppler/TextOutputDev.h | 10 +++--- - qt/Makefile.am | 1 + - qt/poppler-document.cc | 29 +++++++++++++++ - qt/poppler-private.h | 2 + - qt/poppler-qt.h | 80 - ++++++++++++++++++++++++++++++++++++++++++- - qt4/src/Makefile.am | 2 + - qt4/src/poppler-fontinfo.cc | 69 +++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-qt4.h | 43 +++++++++-------------- - qt4/src/poppler-textbox.cc | 49 ++++++++++++++++++++++++++ - test/pdf-inspector.cc | 9 ++++- - 11 files changed, 268 insertions(+), 35 deletions(-) - -commit 64079ad81caf6d2cf66b1f3a3de9454146e15c6c -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sat Dec 3 21:55:36 2005 +0000 - - 2005-12-03 Kristian Høgsberg <krh@redhat.com> - - Fixes from Nickolay V. Shmyrev: - - * poppler/TextOutputDev.cc (TextLine::visitSelection, - TextBlock::visitSelection): Fix selection crash with - zero-width - word boxes or zero-height line boxes (#4402). - - * poppler/CairoOutputDev.h: Fix wrong cairo-ft.h include - (#4413). - - * poppler/CairoOutputDev.cc (eoFill, fill): - * glib/poppler-page.cc (poppler_page_render_selection): - Update to - work with new GfxColor definition and use - cairo_pattern_create_rgba() to cache cairo_pattern_t's for the - fill and stroke colors. - - * glib/poppler-page.cc (poppler_page_set_selection_alpha): - Zero - out pixbuf first. - - ChangeLog | 21 ++++++++++++++++ - glib/poppler-page.cc | 18 ++++++++----- - poppler/CairoOutputDev.cc | 59 - ++++++++++++++++++++++++++++++++------------ - poppler/CairoOutputDev.h | 6 ++-- - poppler/TextOutputDev.cc | 8 +++--- - 5 files changed, 82 insertions(+), 30 deletions(-) - -commit f3da21a3ecdd2694290e64af86c8e35fcb61371b -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Dec 3 21:35:45 2005 +0000 - - More docs for the Qt4 frontend, patch by Stefan Kebekus - - ChangeLog | 8 ++++ - qt4/src/.cvsignore | 3 +- - qt4/src/Doxyfile | 4 +- - qt4/src/Mainpage.dox | 91 - ++++++++++++++++++++++++++++++++++++++++ - qt4/src/poppler-page.cc | 20 ++------- - qt4/src/poppler-qt4.h | 57 +++++++++++++++++------- - qt4/tests/test-poppler-qt4.cpp | 5 +- - 7 files changed, 151 insertions(+), 37 deletions(-) - -commit 7b2c6e92611db9350ca5dcaf3fd730fe5e69afea -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Dec 1 22:45:10 2005 +0000 - - Fix CAN-2005-3193 related bugs - Thanks Leonard for reporting - - ChangeLog | 6 ++++++ - poppler/JPXStream.cc | 9 ++++++++- - poppler/Stream.cc | 33 ++++++++++++++++++++++++++++++++- - poppler/Stream.h | 3 +++ - 4 files changed, 49 insertions(+), 2 deletions(-) - -commit a90f076af9ebb188895e7b223bcb7e5c3f4309c4 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Nov 28 22:50:19 2005 +0000 - - Fix QPixmap contents generation messed when doing the xpdf 3.01 - transition in qt4 frontend - Use Splash backend by default in the qt4 test, added -arthur option - to use the Arthur backend - - ChangeLog | 12 +++++++- - qt4/src/poppler-page.cc | 45 ++++++++++++++++++++++++++------- - qt4/src/poppler-qt4.h | 17 +++++++++---- - qt4/tests/test-poppler-qt4.cpp | 53 - +++++++++++++++++++++++++--------------- - 4 files changed, 90 insertions(+), 37 deletions(-) - -commit b7e4f0e7d175abde7fafb1fcc7ba129468bc8c1a -Author: Brad Hards <bradh@frogmouth.net> -Date: Sun Nov 27 01:33:51 2005 +0000 - - Convert Qt4 unit tests to use the new Qt4.1 QTestlib framework. - Add a little more API documentation - - ChangeLog | 7 +++++ - qt4/src/poppler-qt4.h | 11 +++++--- - qt4/tests/Makefile.am | 12 +++++--- - qt4/tests/check_metadata.cpp | 58 - +++++++++++++++++++------------------- - qt4/tests/check_pagelayout.cpp | 14 +++++----- - qt4/tests/check_pagemode.cpp | 22 +++++++------- - qt4/tests/check_permissions.cpp | 18 ++++++------ - 7 files changed, 78 insertions(+), 64 deletions(-) - -commit d036fa022dbb6f4421ccc8b12b8f9e4f0c8d7406 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Nov 25 22:52:56 2005 +0000 - - patch from kebekus to add to the qt4 binding the same functions we - added to the qt3 one - - ChangeLog | 5 +++++ - qt4/src/poppler-page.cc | 44 - ++++++++++++++++++++++++++++++++++++++++++-- - qt4/src/poppler-qt4.h | 22 ++++++++++++++++++++++ - 3 files changed, 69 insertions(+), 2 deletions(-) - -commit 3c9f09d76dc70e4ba766930facee8b6f30bcd2da -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Nov 22 21:50:44 2005 +0000 - - Fix page range in the inspector - - ChangeLog | 4 ++++ - test/pdf-inspector.cc | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit e64f63416dbce497cb2167272b95491664f213e8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Nov 21 22:12:15 2005 +0000 - - PAtch to add some more functions to the qt binding by Stefan Kebekus - - ChangeLog | 5 ++++ - qt/poppler-page.cc | 69 - +++++++++++++++++++++++++++++++++++++++++++++++++++- - qt/poppler-qt.h | 41 +++++++++++++++++++++++++++++++ - 3 files changed, 114 insertions(+), 1 deletions(-) - -commit 8bd8cb4160b73da69d058783750352fbface66dc -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Nov 21 19:44:09 2005 +0000 - - Fix a possible build problem - - ChangeLog | 4 ++++ - qt/Makefile.am | 1 + - 2 files changed, 5 insertions(+), 0 deletions(-) - -commit fc59b79dc375544681032a1618e96c458515d724 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sun Nov 20 23:17:32 2005 +0000 - - 2005-11-20 Kristian Høgsberg <krh@redhat.com> - - * poppler/GfxState.cc: Fix the byte_lookup initialization - broken - by the merges (#4350). Modify GfxColorSpace::getRGBLine() - to work - with new GfXColor type. - - ChangeLog | 13 ++++++++++- - poppler/GfxState.cc | 59 - ++++++++++++++++++++++++++++++-------------------- - 2 files changed, 47 insertions(+), 25 deletions(-) - -commit 6fe2cb0fcd53211143dcd0c47bf8c8c7a8c11a39 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Nov 17 21:37:34 2005 +0000 - - make it compile with freetype 2.2.0 preversions - - ChangeLog | 4 ++++ - splash/SplashFTFont.cc | 42 +++++++++++++++++++++++++++++++++++++----- - 2 files changed, 41 insertions(+), 5 deletions(-) - -commit 429d3521d788be702a3944bc290569f90ae04892 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Nov 4 19:03:55 2005 +0000 - - Make it compile using --disable-cairo-output - - ChangeLog | 4 ++++ - glib/poppler-document.cc | 6 ++++-- - glib/poppler-page.cc | 27 +++++++++++++-------------- - 3 files changed, 21 insertions(+), 16 deletions(-) - -commit b96c118eb08d478914c2981204d749a95957cbb3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Nov 1 15:29:32 2005 +0000 - - Comment some unused parameters to calm down compiler warnings when - using these heders on external projects with higher warning verbosity - - ChangeLog | 5 ++ - poppler/OutputDev.h | 125 - ++++++++++++++++++++++++++------------------------- - poppler/Stream.h | 24 +++++----- - 3 files changed, 80 insertions(+), 74 deletions(-) - -commit 51670972777510a3ec64a56649716b31167b9d0e -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Oct 30 20:29:05 2005 +0000 - - Last xpdf 3.01 merge (at least from my side) - It's very big, but noone has opposed in the 2 weeks time i gave on - the ml so either poppler is dead or people agree with the patch - - ChangeLog | 39 + - glib/poppler-page.cc | 32 +- - poppler/ArthurOutputDev.cc | 2 +- - poppler/ArthurOutputDev.h | 2 +- - poppler/CairoOutputDev.cc | 2 +- - poppler/CairoOutputDev.h | 2 +- - poppler/Gfx.cc | 645 ++++++++++-- - poppler/Gfx.h | 17 +- - poppler/GfxState.cc | 1410 +++++++++++++++++++++--- - poppler/GfxState.h | 196 +++- - poppler/OutputDev.cc | 25 + - poppler/OutputDev.h | 46 +- - poppler/PDFDoc.cc | 98 ++- - poppler/PDFDoc.h | 24 +- - poppler/PSOutputDev.cc | 1461 +++++++++++++++++++++---- - poppler/PSOutputDev.h | 48 +- - poppler/Page.cc | 115 ++- - poppler/Page.h | 23 +- - poppler/SplashOutputDev.cc | 1525 +++++++++++++++++++++++--- - poppler/SplashOutputDev.h | 59 +- - poppler/TextOutputDev.cc | 230 +++-- - poppler/TextOutputDev.h | 16 +- - qt/poppler-page.cc | 34 +- - qt4/src/poppler-page.cc | 31 +- - splash/Splash.cc | 2656 - +++++++++++++++++++++++++++++++++----------- - splash/Splash.h | 75 +- - splash/SplashBitmap.cc | 216 +++-- - splash/SplashBitmap.h | 13 +- - splash/SplashPattern.cc | 22 +- - splash/SplashPattern.h | 19 +- - splash/SplashState.cc | 11 + - splash/SplashState.h | 3 + - splash/SplashTypes.h | 145 ++- - test/gtk-cairo-test.cc | 2 +- - test/gtk-splash-test.cc | 23 +- - test/pdf-inspector.cc | 2 +- - 36 files changed, 7685 insertions(+), 1584 deletions(-) - -commit 10dfa2254dafb9de93692def2bfb3133d9a39989 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Oct 17 02:17:51 2005 +0000 - - 2005-10-05 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc (poppler_page_render_to_ps): - Fix another - off-by-one page number error (#4555). - - ChangeLog | 6 +++++- - poppler/poppler-config.h.in | 2 +- - 2 files changed, 6 insertions(+), 2 deletions(-) - -commit 9830f0ea41f09fefada740e9429c491e067a5082 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Oct 16 15:11:32 2005 +0000 - - GfxFont merges from xpdf 3.01 - - ChangeLog | 1 + - poppler/GfxFont.cc | 109 - +++++++++++++++++++++++++++++++++++----------------- - 2 files changed, 75 insertions(+), 35 deletions(-) - -commit 62b5ba221aca8c320e964916b0c0329efc8da572 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Oct 16 15:04:39 2005 +0000 - - Stream[cc|h] merges from xpdf 3.01 - - ChangeLog | 1 + - poppler/Stream.cc | 714 - ++++++++++++++++++++++++++++++++++++++++++++++++----- - poppler/Stream.h | 19 +- - 3 files changed, 658 insertions(+), 76 deletions(-) - -commit b9fab51179f38e9798b10366be672f0432c874da -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Oct 16 14:58:14 2005 +0000 - - Function.cc|h merges from xpdf 3.01 - - ChangeLog | 1 + - poppler/Function.cc | 76 - +++++++++++++++++++++++++++++---------------------- - poppler/Function.h | 42 ++++++++++++++++++++++++++++ - 3 files changed, 86 insertions(+), 33 deletions(-) - -commit c6e0242200f818c67508041763ff317e79daadd6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Oct 16 14:54:17 2005 +0000 - - Annot.[cc|h] and related merges from xpdf 3.01 - - ChangeLog | 7 ++- - poppler/Annot.cc | 234 - ++++++++++++++++++++++++++++++++++++++++++------ - poppler/Annot.h | 20 ++--- - poppler/FontInfo.cc | 2 +- - poppler/PSOutputDev.cc | 2 +- - poppler/Page.cc | 2 +- - 6 files changed, 221 insertions(+), 46 deletions(-) - -commit 65d574fdc009e45ad66d1d402d5e805e4e94f427 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Oct 16 14:30:16 2005 +0000 - - Merge SplashFTFont.cc with xpdf 3.01 changes - - ChangeLog | 1 + - splash/SplashFTFont.cc | 64 - +++++++++++++++++++++++++++++++++--------------- - 2 files changed, 45 insertions(+), 20 deletions(-) - -commit f9d208e86433b213b21a75089f82fd00dcd746fc -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Oct 16 14:25:32 2005 +0000 - - Merge SplashScreen.[cc|h] from xpdf 3.01 - - ChangeLog | 4 ++ - splash/SplashScreen.cc | 110 - +++++++++++++++++++++++++++++++---------------- - splash/SplashScreen.h | 12 +++++- - 3 files changed, 87 insertions(+), 39 deletions(-) - -commit 7d46ac000316566503a27b5e5c68621be9c081d0 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Oct 16 14:19:47 2005 +0000 - - Merging SplashXPathScanner.cc changes from xpdf 3.01 - - splash/SplashXPathScanner.cc | 80 - ++++++++++++++++++++++------------------- - 1 files changed, 43 insertions(+), 37 deletions(-) - -commit e34713a2187e05358f98e749ec2923210a40a862 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Oct 5 15:57:17 2005 +0000 - - 2005-10-05 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc (poppler_page_render_to_ps): - Fix another - off-by-one page number error (#4555). - - ChangeLog | 5 +++++ - glib/poppler-page.cc | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit fdd0934430ed251f9aeb45158b6ec95684b3e7b4 -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Mon Sep 26 19:29:45 2005 +0000 - - 2005-09-26 Marco Pesenti Gritti <mpg@redhat.com> - - * glib/poppler-action.cc: - - Initialize window title even if the action is unknown - - ChangeLog | 6 ++++++ - glib/poppler-action.cc | 5 +++-- - 2 files changed, 9 insertions(+), 2 deletions(-) - -commit e9753049ddfbdf28df7a222d35eccdbcbcbc848d -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Mon Sep 26 10:42:38 2005 +0000 - - 2005-09-26 Marco Pesenti Gritti <mpg@redhat.com> - - * glib/poppler-action.cc: - * glib/poppler-action.h: - - Implement launch action - - ChangeLog | 7 +++++++ - glib/poppler-action.cc | 11 ++++++++--- - glib/poppler-action.h | 1 + - 3 files changed, 16 insertions(+), 3 deletions(-) - -commit ab18b2cb6d1c62bb91173d105e8631fe4ef1bcfb -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 20 15:27:31 2005 +0000 - - Parser.cc merges from xpdf 3.01 - - ChangeLog | 1 + - poppler/Parser.cc | 19 +++++++++++-------- - 2 files changed, 12 insertions(+), 8 deletions(-) - -commit cf6723caaed24615c3b8965cee9c433007f80d77 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 20 15:08:52 2005 +0000 - - TextPage *TextOutpudDev::takeText() from xpdf 3.01 - - ChangeLog | 1 + - poppler/TextOutputDev.cc | 8 ++++++++ - poppler/TextOutputDev.h | 4 ++++ - 3 files changed, 13 insertions(+), 0 deletions(-) - -commit e0cbb0ca2c611ad5ac0267e46279c9d61450902a -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 20 14:59:43 2005 +0000 - - more 3.00 -> 3.01 merging - - ChangeLog | 1 + - poppler/XRef.cc | 1 - - 2 files changed, 1 insertions(+), 1 deletions(-) - -commit 9c7adb318d395ff674c6febf6406a8d47e9e5bf6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 20 14:43:15 2005 +0000 - - * poppler/UnicodeMap.cc: More grealloc -> greallocn - * poppler/UnicodeTypeTable.cc: Merge from xpdf 3.01 - - ChangeLog | 2 ++ - poppler/UnicodeMap.cc | 4 ++-- - poppler/UnicodeTypeTable.cc | 4 ++-- - 3 files changed, 6 insertions(+), 4 deletions(-) - -commit 2c4c9b855b0df1dc0836d4f44e9471215a419ea6 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 20 14:34:31 2005 +0000 - - Merge link.cc changes from xpdf 3.00 -> 3.01 - - ChangeLog | 1 + - poppler/Link.cc | 64 - ++++++++++++++++++++++++++++++++++++++++++++++++++++-- - 2 files changed, 62 insertions(+), 3 deletions(-) - -commit 4e9490c0219dd9c99ba0e5533c96663b8570a87b -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Sep 20 14:00:43 2005 +0000 - - Merge GlobalParam.* changes, they are worthless for us as poppler - but this way we are nearer to have the 3.01 sources merged, then we - can remove them if we decide we don't need this options. - Remove a setEncryption from the Xref.h marco probably forgot to - remove when merging - - ChangeLog | 3 +++ - poppler/GlobalParams.cc | 41 +++++++++++++++++++++++++++++++++++++++++ - poppler/GlobalParams.h | 22 ++++++++++++++++------ - poppler/XRef.h | 4 ---- - 4 files changed, 60 insertions(+), 10 deletions(-) - -commit 22da021bf69d83d641e3f30cc0e1bd62394e56a4 -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Tue Sep 20 13:23:08 2005 +0000 - - 2005-09-20 Marco Pesenti Gritti <mpg@redhat.com> - - * poppler/XRef.cc: - - Remove duplicated initialization - - ChangeLog | 6 ++++++ - poppler/XRef.cc | 4 ---- - 2 files changed, 6 insertions(+), 4 deletions(-) - -commit 2a8778147938e3ed2af177226a9c35655f898c95 -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Tue Sep 20 10:18:57 2005 +0000 - - 2005-09-20 Marco Pesenti Gritti <mpg@redhat.com> - - * poppler/GlobalParams.cc: - - s/G/Goo in not yet compiled plugins code - - ChangeLog | 6 ++++++ - poppler/GlobalParams.cc | 8 ++++---- - 2 files changed, 10 insertions(+), 4 deletions(-) - -commit 16f720b87cfc491db585dbdc99236cf492ffe85b -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Tue Sep 20 09:57:41 2005 +0000 - - 2005-09-20 Marco Pesenti Gritti <mpg@redhat.com> - - * poppler/Makefile.am: - - Add XPDFPlugin*. Thanks to TSDgeos that noticed this. - - * poppler/XpdfPluginAPI.cc: - - Fixup - - ChangeLog | 10 ++++++++++ - poppler/Makefile.am | 4 +++- - poppler/XpdfPluginAPI.cc | 2 +- - 3 files changed, 14 insertions(+), 2 deletions(-) - -commit 5f30791c3d87315ad1f742de64d2c1351ca70cb7 -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Fri Sep 16 19:33:28 2005 +0000 - - *** empty log message *** - - ChangeLog | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -commit db62e07fcf57f45951b21f8aab44b0d943efe5d0 -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Fri Sep 16 19:33:05 2005 +0000 - - 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> - - * poppler/PDFDoc.cc: - * poppler/PDFDoc.h: - * poppler/XRef.cc: - * poppler/XRef.h: - - Merge more from 3.01 - - poppler/PDFDoc.cc | 20 ++++++++++++++++---- - poppler/PDFDoc.h | 19 +++++++++---------- - poppler/XRef.cc | 13 +++++++++++-- - poppler/XRef.h | 7 +++++-- - 4 files changed, 41 insertions(+), 18 deletions(-) - -commit 3acc7be594712fd0ce7ac07b7188d5b38b382782 -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Fri Sep 16 19:05:00 2005 +0000 - - 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> - - * poppler/XRef.cc: - - Merge some initialization that I lost before - - ChangeLog | 6 ++++++ - poppler/XRef.cc | 4 ++++ - 2 files changed, 10 insertions(+), 0 deletions(-) - -commit 3badd82b72b2768be27e309b048cd8dcb1c80038 -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Fri Sep 16 18:46:37 2005 +0000 - - 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> - - * poppler/XRef.cc: - - Merge change from 3.01 - - ChangeLog | 6 ++++++ - poppler/XRef.cc | 8 -------- - 2 files changed, 6 insertions(+), 8 deletions(-) - -commit 5474583e20ca773befa17242d4ad7b8f81d5bf99 -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Fri Sep 16 18:38:58 2005 +0000 - - 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> - - * poppler/CharCodeToUnicode.cc: - * poppler/CharCodeToUnicode.h: - - Improvements from xpdf 3.01 - - ChangeLog | 7 +++++++ - poppler/CharCodeToUnicode.cc | 31 +++++++++++++++++++------------ - poppler/CharCodeToUnicode.h | 4 ++++ - 3 files changed, 30 insertions(+), 12 deletions(-) - -commit b2a6eab113fecd3823885c64f3302bea4f372a9f -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Fri Sep 16 18:37:29 2005 +0000 - - 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> - - * poppler/CMap.cc: - - Improvements from xpdf 3.01 - - ChangeLog | 6 ++++++ - poppler/CMap.cc | 30 +++++++++++++++++++++++++++--- - 2 files changed, 33 insertions(+), 3 deletions(-) - -commit 3f69f2158453b9dab9efc280ed1578ac3d0cebe8 -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Fri Sep 16 18:35:29 2005 +0000 - - 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> - - * poppler/NameToUnicodeTable.h: - * poppler/UnicodeTypeTable.cc: - * poppler/UnicodeTypeTable.h: - - Merge some unicode table changes from xpdf 3.01 - - ChangeLog | 8 + - poppler/NameToUnicodeTable.h | 168 +++++----- - poppler/UnicodeTypeTable.cc | 690 - ++++++++++++++++++++++++++++++++++++++++-- - poppler/UnicodeTypeTable.h | 2 + - 4 files changed, 764 insertions(+), 104 deletions(-) - -commit 6cbe76bc55d557fe5fca0f8f1b33bda95acdc0e9 -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Fri Sep 16 18:32:29 2005 +0000 - - 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> - - * poppler/SplashOutputDev.h: - * splash/Splash.cc: - * splash/Splash.h: - - Modified region support from xpdf 3.01 - - ChangeLog | 8 ++++++++ - poppler/SplashOutputDev.h | 5 +++++ - splash/Splash.cc | 31 +++++++++++++++++++++++++++++++ - splash/Splash.h | 11 +++++++++++ - 4 files changed, 55 insertions(+), 0 deletions(-) - -commit a9df3f3203c14161e5d6bc6048ec7e123536e6d3 -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Fri Sep 16 18:29:18 2005 +0000 - - 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> - - * goo/Makefile.am: - * poppler/DCTStream.h: - * poppler/Decrypt.cc: - * poppler/Decrypt.h: - * poppler/FlateStream.h: - * poppler/GlobalParams.cc: - * poppler/GlobalParams.h: - * poppler/Makefile.am: - * poppler/PDFDoc.cc: - * poppler/PDFDoc.h: - * poppler/Parser.cc: - * poppler/Parser.h: - * poppler/Stream.cc: - * poppler/Stream.h: - * poppler/XRef.cc: - * poppler/XRef.h: - * poppler/poppler-config.h.in: - - Merge security plugins support from xpdf 3.01 - - ChangeLog | 24 +++ - goo/FixedPoint.cc | 95 +++++++++++ - goo/FixedPoint.h | 150 +++++++++++++++++ - goo/Makefile.am | 6 +- - poppler/DCTStream.h | 2 - - poppler/Decrypt.cc | 23 ++- - poppler/Decrypt.h | 6 +- - poppler/FlateStream.h | 2 - - poppler/GlobalParams.cc | 229 ++++++++++++++++++++++++++ - poppler/GlobalParams.h | 16 ++ - poppler/Makefile.am | 5 +- - poppler/PDFDoc.cc | 36 ++++ - poppler/PDFDoc.h | 1 + - poppler/Parser.cc | 20 --- - poppler/Parser.h | 4 - - poppler/SecurityHandler.cc | 376 - +++++++++++++++++++++++++++++++++++++++++++ - poppler/SecurityHandler.h | 157 ++++++++++++++++++ - poppler/Stream.cc | 18 -- - poppler/Stream.h | 8 - - poppler/XRef.cc | 162 ++----------------- - poppler/XRef.h | 13 +- - poppler/XpdfPluginAPI.cc | 262 ++++++++++++++++++++++++++++++ - poppler/XpdfPluginAPI.h | 341 - +++++++++++++++++++++++++++++++++++++++ - poppler/poppler-config.h.in | 2 - - 24 files changed, 1737 insertions(+), 221 deletions(-) - -commit a777e5c26483b90d0910e85c2be666640835d0bf -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Fri Sep 16 18:21:38 2005 +0000 - - 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> - - * configure.ac: - * goo/Makefile.am: - * splash/Makefile.am: - * splash/SplashFTFont.cc: - * splash/SplashMath.h: - * splash/SplashTypes.h: - - Merge support for fixed point - - ChangeLog | 11 +++++++++++ - configure.ac | 4 ++++ - splash/Makefile.am | 1 + - splash/SplashFTFont.cc | 7 +++++++ - splash/SplashMath.h | 34 +++++++++++++++++++++++++++++++++- - splash/SplashTypes.h | 5 +++++ - 6 files changed, 61 insertions(+), 1 deletions(-) - -commit 00457c5f44a246c9f867a114a72be9f7b2dc1cf5 -Author: Marco Pesenti Gritti <mpg@redhat.com> -Date: Fri Sep 16 18:11:14 2005 +0000 - - 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> - - * poppler/ArthurOutputDev.cc: - * poppler/CairoFontEngine.cc: - * poppler/TextOutputDev.cc: - * poppler/UnicodeMap.cc: - - Use mallocn when possible - - ChangeLog | 9 +++++++++ - poppler/ArthurOutputDev.cc | 2 +- - poppler/CairoFontEngine.cc | 4 ++-- - poppler/TextOutputDev.cc | 2 +- - poppler/UnicodeMap.cc | 2 +- - 5 files changed, 14 insertions(+), 5 deletions(-) - -commit 09c9ff67ceae5753811a2f625e3ad810628c782e -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Sep 16 18:00:43 2005 +0000 - - SplashXPath.cc merges from xpdf 3.00 -> 3.01 - - ChangeLog | 3 ++ - splash/SplashXPath.cc | 81 - +++++++++++++++++++++++------------------------- - 2 files changed, 42 insertions(+), 42 deletions(-) - -commit 0555ba861d3b84d88c80da4fa247274338ff7817 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Sep 16 17:42:56 2005 +0000 - - SplashFontEngine.cc merge from xpdf 3.00 -> 3.01 - - splash/SplashFontEngine.cc | 8 ++++++++ - 1 files changed, 8 insertions(+), 0 deletions(-) - -commit ddc72bd8354168d992631d1ef8cd0939b428966c -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Sep 15 22:24:55 2005 +0000 - - Merge xpdf 3.00 -> 3.01 changes in SplashT1Font.* files - - splash/SplashT1Font.cc | 23 ++++++++++++++++++----- - splash/SplashT1Font.h | 2 ++ - 2 files changed, 20 insertions(+), 5 deletions(-) - -commit ba409db3157105f326b4bbc342ca7af859a44ce9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Sep 15 22:20:37 2005 +0000 - - Merge xpdf 3.00 -> 3.01 changes in SplashPath.* files - - splash/SplashPath.cc | 3 ++- - splash/SplashPath.h | 5 +++++ - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit 3ea00e853049d8c26ee88aaef8ea6c47c8d46956 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Sep 15 22:15:47 2005 +0000 - - Merge xpdf 3.00 -> 3.01 changes in SplashFont.* files - - splash/SplashFont.cc | 6 ++++++ - splash/SplashFont.h | 10 +++++++++- - 2 files changed, 15 insertions(+), 1 deletions(-) - -commit e571dcbfd0c77a28e41710577859f632cc989de5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Sep 15 22:09:50 2005 +0000 - - Merge the xpdf 3.01 change that uses runtime detection of freetype - version - - ChangeLog | 6 ++++++ - configure.ac | 14 +++----------- - poppler/CairoFontEngine.cc | 21 ++++++++++++++------- - poppler/CairoFontEngine.h | 3 ++- - splash/SplashFTFontEngine.cc | 19 +++++++++++-------- - splash/SplashFTFontEngine.h | 1 + - 6 files changed, 37 insertions(+), 27 deletions(-) - -commit 59fe2937db192dc7b59bf28c3f29909faf11aae3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Sep 15 21:51:16 2005 +0000 - - Merge xpdf 3.00 -> 3.01 changes for that file - - splash/SplashClip.h | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -commit b2f94635249f2c5f0c876a1005826fe4c6eb6025 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Sep 15 12:52:36 2005 +0000 - - Merge xpdf 3.00 -> xpdf 3.01 changes for Catalog.[cc|h] - - poppler/Catalog.cc | 5 ++++- - poppler/Catalog.h | 3 +++ - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit 0fc2e70576b1c48cf47a686e8aa7e202a802bc9d -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Sep 15 12:32:25 2005 +0000 - - Another small merge from xpdf 3.01 - - ChangeLog | 3 +++ - poppler/Outline.cc | 6 +++--- - 2 files changed, 6 insertions(+), 3 deletions(-) - -commit f8983ceb3c55df72c94870806d71db139c11bdeb -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Sep 15 12:28:34 2005 +0000 - - Another small xpdf 3.00 -> xpdf 3.01 merge - - poppler/Object.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 52efe9845cf3eb1dd836f90bfa203760baa2f87c -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Sep 15 11:46:56 2005 +0000 - - bradh forgot to remove the two returns when merging xpdf 3.00 -> - xpdf 3.01 changes of this file - - poppler/JPXStream.cc | 2 -- - 1 files changed, 0 insertions(+), 2 deletions(-) - -commit 4b4fc5c017bf147c9069bbce32fc14467bd2a81a -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Sep 14 21:20:36 2005 +0000 - - Merge all the fofi/ changes from xpdf 3.01, there is only one api - change that affects PSOutputDev (also has been updated the part - that uses this api not the whole file). All our fixes in that dir - are included in the upgrade. - - ChangeLog | 4 + - fofi/FoFiTrueType.cc | 406 - ++++++++++++++++++++++++++++++++++++++++++------ - fofi/FoFiTrueType.h | 15 ++- - fofi/FoFiType1.cc | 25 ++-- - fofi/FoFiType1C.cc | 134 ++++++++++++++--- - fofi/FoFiType1C.h | 6 + - poppler/PSOutputDev.cc | 7 +- - poppler/PSOutputDev.h | 3 +- - 8 files changed, 515 insertions(+), 85 deletions(-) - -commit a68e8e6330418b1f623867973b9c128a9a139c0c -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Sep 7 03:00:36 2005 +0000 - - 2005-09-06 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: Enable A4_PAPER and OPI_SUPPORT by default. - There - is no reason to not enable OPI and the paper size should be - controlled by the application. - - * test/Makefile.am (EXTRA_DIST): Add pdf-operators.c - - ChangeLog | 8 ++++++++ - configure.ac | 17 ++--------------- - test/Makefile.am | 3 +++ - 3 files changed, 13 insertions(+), 15 deletions(-) - -commit b6490944c081ff53f623acea7ab7a600c3e54816 -Author: Brad Hards <bradh@frogmouth.net> -Date: Sat Sep 3 11:53:44 2005 +0000 - - Switch the qt4/tests unittests to use QtTestLib. - - ChangeLog | 6 ++ - configure.ac | 66 ++++++++++++++++++++ - qt4/tests/.cvsignore | 17 ++---- - qt4/tests/Makefile.am | 71 +++++++--------------- - qt4/tests/README.unittest | 23 +++++++ - qt4/tests/check_author.cpp | 25 -------- - qt4/tests/check_linearised.cpp | 23 ------- - qt4/tests/check_metadata.cpp | 101 - +++++++++++++++++++++++++++++++ - qt4/tests/check_orientation.cpp | 40 ------------ - qt4/tests/check_pagelayout.cpp | 44 +++++++++++++ - qt4/tests/check_pagelayout_facing.cpp | 22 ------- - qt4/tests/check_pagelayout_none.cpp | 22 ------- - qt4/tests/check_pagelayout_single.cpp | 22 ------- - qt4/tests/check_pagemode.cpp | 64 +++++++++++++++++++ - qt4/tests/check_pagemode_attach.cpp | 22 ------- - qt4/tests/check_pagemode_fullscreen.cpp | 22 ------- - qt4/tests/check_pagemode_none.cpp | 22 ------- - qt4/tests/check_pagemode_oc.cpp | 22 ------- - qt4/tests/check_pagemode_thumbs.cpp | 22 ------- - qt4/tests/check_permissions.cpp | 60 +++++++------------ - 20 files changed, 354 insertions(+), 362 deletions(-) - -commit 3725841417871d1051772068833dc908ca70b7ce -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Sep 2 14:47:24 2005 +0000 - - 2005-09-02 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc: Apply Marcos rotation fix. - - ChangeLog | 4 ++++ - glib/poppler-page.cc | 5 ++++- - 2 files changed, 8 insertions(+), 1 deletions(-) - -commit ecf3dcadb948013cbc987e464952933daf78e4bf -Author: Brad Hards <bradh@frogmouth.net> -Date: Wed Aug 31 15:28:46 2005 +0000 - - Merge some missing parts of previous patches, and some other minor - cleanups from xpdf 3.0.1 - - poppler/Catalog.cc | 16 +-- - poppler/JPXStream.cc | 380 - ++++++++++++++++++++++++++++++++---------------- - poppler/JPXStream.h | 25 ++- - poppler/Lexer.cc | 11 ++ - poppler/Lexer.h | 3 + - poppler/PSOutputDev.cc | 31 ++-- - poppler/Stream.h | 7 + - 7 files changed, 309 insertions(+), 164 deletions(-) - -commit de78738164319b733e54a9abfb5957870facd6cd -Author: Brad Hards <bradh@frogmouth.net> -Date: Wed Aug 31 09:51:41 2005 +0000 - - poppler/JArithmeticDecoder.cc - poppler/JArithmeticDecoder.h - poppler/JBIG2Stream.cc - poppler/JBIG2Stream.h: merge in some of the JBIG2 changes from - xpdf 3.0.1. - - ChangeLog | 9 ++ - poppler/JArithmeticDecoder.cc | 42 ++++++-- - poppler/JArithmeticDecoder.h | 22 ++++- - poppler/JBIG2Stream.cc | 227 - +++++++++++++++++++++++++---------------- - poppler/JBIG2Stream.h | 4 +- - 5 files changed, 201 insertions(+), 103 deletions(-) - -commit 55952feb637e300b073691ae95d68e766521a769 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Aug 29 15:24:32 2005 +0000 - - 2005-08-29 Kristian Høgsberg <krh@redhat.com> - - * configure.ac (HAVE_FREETYPE_H): Patch from Hiroyuki - Ikezoe: Set - HAVE_FREETYPE_217_OR_OLDER to 0 if we found freetype using - pkg-config (#4223). - - ChangeLog | 6 ++++++ - configure.ac | 2 +- - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit 244e5c1f8f65da41ba6314028766dfe5973f6132 -Author: Brad Hards <bradh@frogmouth.net> -Date: Sun Aug 28 09:43:18 2005 +0000 - - Merge the Goo* improvements from xpdf 3.0.1. This change is based on - martink's work (7-xpdf-3.01-goo-improvements.patch), with some - tweaking - by me. - - ChangeLog | 13 ++++++++ - fofi/FoFiTrueType.cc | 1 + - goo/GooHash.cc | 24 ++++++++++++++ - goo/GooHash.h | 2 + - goo/GooList.cc | 5 +++ - goo/GooList.h | 5 +++ - goo/GooString.cc | 85 - +++++++++++++++++++++++++++++++++++++++++++++++++- - goo/GooString.h | 11 ++---- - goo/gmem.c | 3 ++ - poppler/Decrypt.cc | 1 + - 10 files changed, 142 insertions(+), 8 deletions(-) - -commit eb91b274245b4f5f5389bc9ddfde2c2806557665 -Author: Brad Hards <bradh@frogmouth.net> -Date: Sun Aug 28 09:31:53 2005 +0000 - - This part of my previous gmallocn merge patch was missing. - - goo/GooHash.cc | 4 ++-- - goo/GooList.cc | 8 ++++---- - 2 files changed, 6 insertions(+), 6 deletions(-) - -commit b3474fd5e0efc96b5814d86e0cdedf39387e7ae3 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Aug 28 03:26:53 2005 +0000 - - add note about related bug - - ChangeLog | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit ace2eb6ba518b970b96f30f61c4795c161e0cb79 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Aug 28 03:22:04 2005 +0000 - - 2005-08-27 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/FlateStream.cc: Fix predictor leak. - - ChangeLog | 4 ++++ - poppler/FlateStream.cc | 1 + - 2 files changed, 5 insertions(+), 0 deletions(-) - -commit 96657c5480bf2ecf445ad5a105b8e7393ae53c8b -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Aug 28 03:19:55 2005 +0000 - - 2005-08-27 Jeff Muizelaar <jeff@infidigm.net> - - * configure.ac: Disable the zlib-based decoder by default. - - ChangeLog | 4 ++++ - configure.ac | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit d1d715158223c7ca3ae279cea420a948cfdb0428 -Author: Brad Hards <bradh@frogmouth.net> -Date: Sat Aug 27 08:43:42 2005 +0000 - - Merge the gmalloc -> gmallocn changes from xpdf 3.0.1. This change is - based on martink's work (13-xpdf-3.01-goo-allocn.patch) with some - tweaking by me. There may be some residual gmallocn changes still to - be merged. - - ChangeLog | 7 +++++ - fofi/FoFiTrueType.cc | 12 ++++---- - fofi/FoFiType1.cc | 2 +- - fofi/FoFiType1C.cc | 14 +++++----- - goo/gmem.c | 22 ++++++++++++++++ - goo/gmem.h | 9 +++++++ - poppler/Annot.cc | 2 +- - poppler/Array.cc | 2 +- - poppler/BuiltinFont.cc | 2 +- - poppler/CMap.cc | 6 ++-- - poppler/Catalog.cc | 8 +++--- - poppler/CharCodeToUnicode.cc | 22 ++++++++-------- - poppler/Dict.cc | 2 +- - poppler/Function.cc | 20 +++++++------- - poppler/Gfx.cc | 2 +- - poppler/GfxFont.cc | 24 +++++++++--------- - poppler/GfxState.cc | 54 - ++++++++++++++++++++-------------------- - poppler/JArithmeticDecoder.cc | 2 +- - poppler/JBIG2Stream.cc | 30 +++++++++++----------- - poppler/Link.cc | 6 ++-- - poppler/NameToCharCode.cc | 4 +- - poppler/Outline.cc | 4 +- - poppler/SplashOutputDev.cc | 8 +++--- - poppler/Stream.cc | 12 ++++---- - poppler/TextOutputDev.cc | 48 ++++++++++++++++++------------------ - poppler/XRef.cc | 18 +++++++------- - splash/SplashClip.cc | 12 ++++---- - splash/SplashFTFontFile.cc | 2 +- - splash/SplashFont.cc | 6 ++-- - splash/SplashPath.cc | 8 +++--- - splash/SplashScreen.cc | 4 +- - splash/SplashState.cc | 4 +- - splash/SplashT1FontFile.cc | 4 +- - splash/SplashXPath.cc | 4 +- - splash/SplashXPathScanner.cc | 4 +- - 35 files changed, 214 insertions(+), 176 deletions(-) - -commit feb82c60b1f86a9d1260db57534d98c54ee615c4 -Author: Martin Kretzschmar <martink@gnome.org> -Date: Wed Aug 24 19:41:27 2005 +0000 - - * configure.ac: add /usr/include/qt4 to qt4_incdirs. That's what - Debian and Ubuntu use. Maybe we should just use pkg-config. If - it's usable with qt4. - - * test/.cvsignore: ignore pdf_inspector binary. - - ChangeLog | 8 ++++++++ - configure.ac | 2 +- - test/.cvsignore | 7 ++++--- - 3 files changed, 13 insertions(+), 4 deletions(-) - -commit 8dce80eb74f24f07ac7668905f1631e04a9c5841 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Aug 24 18:57:46 2005 +0000 - - 2005-08-24 Kristian Høgsberg <krh@redhat.com> - - * poppler/TextOutputDev.cc: Push rotation argument down to - GfxState constructor. This is still not completely - functional yet. - - * glib/poppler-page.cc (poppler_page_render_selection): Add - rotation argument so API is useful. Not yet implemented. - (poppler_page_prepare_output_dev): Patch from Marco to fix - rotation using the cairo backend. - - ChangeLog | 10 ++++++++++ - glib/poppler-page.cc | 22 ++++++++++++++++------ - glib/poppler-page.h | 1 + - poppler/TextOutputDev.cc | 11 ++++++++--- - poppler/TextOutputDev.h | 4 +++- - 5 files changed, 38 insertions(+), 10 deletions(-) - -commit b909b5ae98bc3e557ef6e658e2b9120e82951259 -Author: Jonathan Blandford <jrb@redhat.com> -Date: Wed Aug 24 03:21:20 2005 +0000 - - Tue Aug 23 17:21:02 2005 Jonathan Blandford <jrb@redhat.com> - - * test/Makefile.am (gtk_cairo_test_LDADD): add - FREETYPE_{CFLAGS,LIBS} to the cairo deps - - ChangeLog | 5 +++++ - test/Makefile.am | 4 +++- - 2 files changed, 8 insertions(+), 1 deletions(-) - -commit da3aac379f07ffedd6078707ec9923800fc0c0a5 -Author: Jonathan Blandford <jrb@redhat.com> -Date: Tue Aug 23 18:20:45 2005 +0000 - - Tue Aug 23 13:38:01 2005 Jonathan Blandford <jrb@redhat.com> - - * configure.ac: - * poppler/Gfx.cc: - * poppler/Gfx.h: - * poppler/GlobalParams.cc: - * poppler/GlobalParams.h: - * poppler/Makefile.am: - * poppler/OutputDev.cc: - * poppler/OutputDev.h: - * poppler/ProfileData.cc: - * poppler/ProfileData.h: - * test/Makefile.am: - * test/pdf-inspector.cc: - * test/pdf-inspector.glade: - * test/pdf-operators.c: Initial cut at a pdf inspector. This - should help us look at PDF files. - - ChangeLog | 18 ++ - configure.ac | 4 +- - poppler/Gfx.cc | 30 ++++ - poppler/Gfx.h | 1 + - poppler/GlobalParams.cc | 16 ++ - poppler/GlobalParams.h | 3 + - poppler/Makefile.am | 2 + - poppler/OutputDev.cc | 17 ++ - poppler/OutputDev.h | 10 +- - poppler/ProfileData.cc | 44 +++++ - poppler/ProfileData.h | 41 +++++ - test/Makefile.am | 13 ++- - test/pdf-inspector.cc | 358 ++++++++++++++++++++++++++++++++++++++ - test/pdf-inspector.glade | 434 - ++++++++++++++++++++++++++++++++++++++++++++++ - test/pdf-operators.c | 81 +++++++++ - 15 files changed, 1068 insertions(+), 4 deletions(-) - -commit 1aad886c6c19a964a3fc9e18f31acc8e115478e0 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Aug 22 18:20:12 2005 +0000 - - 2005-08-22 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/poppler-private.h: - * glib/test-poppler-glib.c: Patch from Marco to simplify - the glib - rotation API. - - ChangeLog | 8 +++ - glib/poppler-page.cc | 136 - ++++++---------------------------------------- - glib/poppler-page.h | 4 +- - glib/poppler-private.h | 1 - - glib/test-poppler-glib.c | 2 +- - 5 files changed, 28 insertions(+), 123 deletions(-) - -commit 6070b1dc4b76c236f3100fbd255c2d906e61c3c2 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sun Aug 21 23:14:04 2005 +0000 - - 2005-08-21 Kristian Høgsberg <krh@redhat.com> - - * poppler/Makefile.am (INCLUDES): Add FREETYPE_CFLAGS. - - * configure.ac: Make freetype check use pkg-config if - possible. - - ChangeLog | 6 ++++++ - configure.ac | 34 ++++++++++++++++++++++++---------- - poppler/Makefile.am | 1 + - 3 files changed, 31 insertions(+), 10 deletions(-) - -commit 2698ca6fa107ea91dc01eb8cfb0c93383fbca125 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Aug 17 16:54:01 2005 +0000 - - 2005-08-17 Kristian Høgsberg <krh@redhat.com> - - * poppler/GfxFont.cc: Add fix discussed in #3131 to only - use the - MacRoman char map if the font has one or the font dicts - specifies - /MacRoman. - - ChangeLog | 6 ++++++ - poppler/GfxFont.cc | 1 - - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit 5dc9b14b99f2efa2fe018e9267dd363d1bcd78b1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Aug 7 23:58:12 2005 +0000 - - Fix EOF checking - - ChangeLog | 4 ++++ - poppler/PDFDoc.cc | 10 +++++++++- - 2 files changed, 13 insertions(+), 1 deletions(-) - -commit 155d019d7b474f244a3e4bf64d192015f6a266c4 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sat Aug 6 18:09:51 2005 +0000 - - 2005-08-06 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc: - * glib/poppler-page.h: Use GdkColor for specifying selection - colors, we alreay depend on GDK anyway. - - ChangeLog | 6 ++++++ - glib/poppler-page.cc | 20 +++++++++----------- - glib/poppler-page.h | 5 +++-- - 3 files changed, 18 insertions(+), 13 deletions(-) - -commit c710b645c8297d356c101b13a9889bcaba691176 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Aug 6 11:58:59 2005 +0000 - - Update comment - - poppler/PDFDoc.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit de7953c8a8360d8bfc99298906c5fc1094684fc3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Sat Aug 6 11:47:37 2005 +0000 - - Increase EOF searching up to last 1024 characters - - ChangeLog | 7 +++++++ - poppler/PDFDoc.cc | 23 +++++++++++++---------- - 2 files changed, 20 insertions(+), 10 deletions(-) - -commit 5dd72618688763b50d5f5738d857c9294ef1b1c2 -Author: Brad Hards <bradh@frogmouth.net> -Date: Sat Aug 6 02:15:58 2005 +0000 - - Add password arguments to document constructor. - - ChangeLog | 4 ++++ - qt4/src/poppler-document.cc | 8 ++++++-- - qt4/src/poppler-qt4.h | 4 +++- - 3 files changed, 13 insertions(+), 3 deletions(-) - -commit edbd7957b393eb63f48df7db6b220b355d4fc461 -Author: Brad Hards <bradh@frogmouth.net> -Date: Sat Aug 6 02:07:55 2005 +0000 - - Make API extraction work again. - - ChangeLog | 3 +++ - qt4/src/Doxyfile | 2 +- - 2 files changed, 4 insertions(+), 1 deletions(-) - -commit f43a6f1d1c27c042f5736746c94430083baa4c1d -Author: Brad Hards <bradh@frogmouth.net> -Date: Sat Aug 6 01:53:06 2005 +0000 - - Add new test code for encrypted files. - - ChangeLog | 5 ++ - qt4/tests/.cvsignore | 1 + - qt4/tests/Makefile.am | 7 ++- - qt4/tests/test-password-qt4.cpp | 135 - +++++++++++++++++++++++++++++++++++++++ - 4 files changed, 147 insertions(+), 1 deletions(-) - -commit 2ec26afaf80864b023899b890b8e229448da9bed -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Aug 5 22:30:20 2005 +0000 - - 2005-08-05 Kristian Høgsberg <krh@redhat.com> - - * poppler/TextOutputDev.cc (visitLine): Round selection - coordinates in device space, so selection isn't fuzzy. - - * poppler/GfxState.cc: - * poppler/GfxState.h: Add simple Matrix class. - - ChangeLog | 8 ++++++++ - poppler/CairoOutputDev.cc | 6 +++--- - poppler/GfxState.cc | 26 ++++++++++++++++++++++++++ - poppler/GfxState.h | 10 ++++++++++ - poppler/TextOutputDev.cc | 14 ++++++++++++++ - 5 files changed, 61 insertions(+), 3 deletions(-) - -commit ccba4f0773047eea5e4ad0ac736450160dd97664 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Aug 5 19:04:36 2005 +0000 - - 2005-08-05 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc: - * glib/poppler-page.h: - * poppler/TextOutputDev.cc: - * poppler/TextOutputDev.h: Propagate selection colors to - the glib API. - - ChangeLog | 7 +++++ - glib/poppler-page.cc | 63 - ++++++++++++++++++++++++++++++++++++++++------ - glib/poppler-page.h | 4 ++- - poppler/TextOutputDev.cc | 25 ++++++++--------- - poppler/TextOutputDev.h | 7 +++- - 5 files changed, 82 insertions(+), 24 deletions(-) - -commit 43e97129393f403c41f191ceae9a54793ece005f -Author: Brad Hards <bradh@frogmouth.net> -Date: Thu Aug 4 10:15:23 2005 +0000 - - Fix problem with drawing filled objects that was introduced in - Rev 1.4. - - ChangeLog | 5 +++++ - poppler/ArthurOutputDev.cc | 13 +++++++++++-- - 2 files changed, 16 insertions(+), 2 deletions(-) - -commit a75d80333a70d2e1ac7c9032d316034eebed9dd6 -Author: Brad Hards <bradh@frogmouth.net> -Date: Wed Aug 3 11:44:55 2005 +0000 - - Implement paging ability for Qt4, more than a little based - on Albert's work for Qt3. - Up arrow -> previous page - Down arrow -> next page - q -> quit. - - What more could you want from a PDF viewer :-) - - ChangeLog | 6 +++++ - qt4/tests/test-poppler-qt4.cpp | 47 - +++++++++++++++++++++++++++++++-------- - 2 files changed, 43 insertions(+), 10 deletions(-) - -commit f3e0a163b098da1cc389c2c4f47e28358b1bec77 -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Aug 1 19:15:40 2005 +0000 - - Fix problem in the patch to fix #3299 - - ChangeLog | 4 ++++ - poppler/DCTStream.cc | 15 ++++++++++----- - poppler/DCTStream.h | 1 + - 3 files changed, 15 insertions(+), 5 deletions(-) - -commit 5f7bd81bedd8c90e3312190256488ff0c15502e1 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Aug 1 15:21:19 2005 +0000 - - 2005-08-01 Kristian Høgsberg <krh@redhat.com> - - Patch from Dan Winship <danw@novell.com> - - * glib/poppler-page.cc (poppler_page_copy_to_pixbuf): Set - alpha to - 0xff (opaque), not 0x00. - - ChangeLog | 7 +++++++ - glib/poppler-page.cc | 2 +- - 2 files changed, 8 insertions(+), 1 deletions(-) - -commit 22f509e60f60ccaea1f91d9ec1ef7ba8200bee8a -Author: Brad Hards <bradh@frogmouth.net> -Date: Mon Aug 1 08:09:00 2005 +0000 - - Fix up the fill problem with drawing text, where the "middle" - of glyphs - with a "hole" (like d, o, p, b, g) got filled. Also remove some - debugging - code. The glyphs are still ugly though. - - ChangeLog | 7 +++++++ - poppler/ArthurOutputDev.cc | 13 +------------ - 2 files changed, 8 insertions(+), 12 deletions(-) - -commit 7bf5d10c1f6edd538769c3a83a3b3d5df56d604b -Author: Brad Hards <bradh@frogmouth.net> -Date: Sun Jul 31 09:54:04 2005 +0000 - - An initial version of proper font handling, heavily based on work by - Albert Astals Cid. I changed it to stroke the glyphs based on the - SplashPath. In the longer term, Arthur should use FreeType paths - directly - hopefully that will be less ugly, and not fill everything. - - ChangeLog | 8 + - poppler/ArthurOutputDev.cc | 407 - +++++++++++++++++++++++++++++++------------ - poppler/ArthurOutputDev.h | 15 ++- - qt4/src/poppler-page.cc | 2 +- - splash/SplashPath.h | 2 + - 5 files changed, 317 insertions(+), 117 deletions(-) - -commit 8567b794628786b82e8db2a7daf75e4ad2398960 -Author: Brad Hards <bradh@frogmouth.net> -Date: Fri Jul 29 12:15:19 2005 +0000 - - Add some more test cases. - - ChangeLog | 4 ++++ - qt4/tests/.cvsignore | 4 ++++ - qt4/tests/Makefile.am | 10 +++++++++- - qt4/tests/check_pagelayout_facing.cpp | 22 ++++++++++++++++++++++ - qt4/tests/check_version.cpp | 22 ++++++++++++++++++++++ - 5 files changed, 61 insertions(+), 1 deletions(-) - -commit 59d660cf4d614fdea09d6a62b8889f7682c2b4f9 -Author: Brad Hards <bradh@frogmouth.net> -Date: Fri Jul 29 11:41:14 2005 +0000 - - Compile fix associated with last change. - - poppler/ArthurOutputDev.cc | 2 -- - 1 files changed, 0 insertions(+), 2 deletions(-) - -commit 88c57c73f57820d6a57e26825093fbc688845e67 -Author: Brad Hards <bradh@frogmouth.net> -Date: Fri Jul 29 11:24:42 2005 +0000 - - A couple of minor changes to the Arthur backend. - - ChangeLog | 9 +++++++++ - poppler/ArthurOutputDev.cc | 18 ++++++++++++++---- - 2 files changed, 23 insertions(+), 4 deletions(-) - -commit 481db9d9eae5ea16e5b382f4ad21e6e624a70dcf -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Jul 29 05:48:33 2005 +0000 - - 2005-07-29 Kristian Høgsberg <krh@redhat.com> - - * poppler/TextOutputDev.cc: Finish TextSelectionDumper - class for - extracting the text from a selection. Add - TextPage::getSelectionText() and - TextOutputDev::getSelectionText() - methods to expose the new functionality. - - * glib/poppler-page.cc (poppler_page_get_text): Use - TextOutputDev::getSelectionText() to get the text from the - selection. - - * glib/poppler-document.cc (poppler_document_new_from_file): - * glib/poppler-page.cc (_poppler_page_new): Add extra NULL to - g_object_new() constructor to silence gcc warning about - missing - sentinel. - - ChangeLog | 16 +++++ - glib/poppler-document.cc | 2 +- - glib/poppler-page.cc | 31 ++++----- - poppler/TextOutputDev.cc | 164 - ++++++++++++++++++++++++++++++++++----------- - poppler/TextOutputDev.h | 8 ++ - 5 files changed, 164 insertions(+), 57 deletions(-) - -commit ad312dbded4e8f70c3a2eac9a0964fa00ecb6b2c -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jul 28 22:56:17 2005 +0000 - - Fix memory leaks in PageLabelInfo.cc - - ChangeLog | 4 ++++ - poppler/PageLabelInfo.cc | 11 +++++++++++ - poppler/PageLabelInfo.h | 2 ++ - 3 files changed, 17 insertions(+), 0 deletions(-) - -commit b45ad9f3409d7b1ed147135a70553e5255913c61 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jul 28 20:53:36 2005 +0000 - - - delete family; - + delete[] family; - as family is new[]'ed - - When assigning family if the font had "the proper info" and family - had to be deleted, do it. - - poppler/GlobalParams.cc | 9 +++++++-- - 1 files changed, 7 insertions(+), 2 deletions(-) - -commit f93dfc5c5133e0b1bd9f4786cfe18bd796cbac2a -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jul 28 18:51:17 2005 +0000 - - Remove the debugging - - poppler/GlobalParams.cc | 5 ----- - 1 files changed, 0 insertions(+), 5 deletions(-) - -commit 8022315004e1623c0be320f7671fcd72c15c0de3 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jul 28 18:37:17 2005 +0000 - - Wonder how that slipped here - - poppler/GlobalParams.cc | 3 +-- - 1 files changed, 1 insertions(+), 2 deletions(-) - -commit 82638babe89e402c0348619ec3205059b977c7e9 -Author: Albert Astals Cid <aacid@kde.org> -Date: Thu Jul 28 17:34:19 2005 +0000 - - Fontconfig patch is here, rejoice - - ChangeLog | 15 ++- - glib/poppler-document.cc | 1 - - poppler/CairoFontEngine.cc | 95 +--------- - poppler/CairoFontEngine.h | 2 - - poppler/CairoOutputDev.cc | 4 - - poppler/GlobalParams.cc | 473 - ++++++++++++++++++++----------------------- - poppler/GlobalParams.h | 17 +-- - poppler/SplashOutputDev.cc | 132 +------------ - poppler/SplashOutputDev.h | 3 - - qt/poppler-document.cc | 1 - - qt4/src/poppler-document.cc | 1 - - test/gtk-cairo-test.cc | 1 - - test/gtk-splash-test.cc | 1 - - 13 files changed, 241 insertions(+), 505 deletions(-) - -commit e9015531b1d0e5f2c8d8ca2bc50d5f14aaf954bc -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Jul 28 06:31:57 2005 +0000 - - 2005-07-28 Kristian Høgsberg <krh@redhat.com> - - * poppler/poppler-config.h.in: Add GCC_PRINTF_FORMAT macro to - annotate printf-like functions (#3638). - - * poppler/Error.h: Add GCC_PRINTF_FORMAT to error(). - - * poppler/PSOutputDev.h: Add GCC_PRINTF_FORMAT to - PSOutputDev::writePSFmt(). - - * poppler/PSOutputDev.cc, poppler/GlobalParams.cc: Quiet new - printf warnings. - - ChangeLog | 11 +++++++++++ - poppler/Error.h | 2 +- - poppler/GlobalParams.cc | 3 ++- - poppler/PSOutputDev.cc | 3 +-- - poppler/PSOutputDev.h | 2 +- - poppler/TextOutputDev.cc | 13 ++++++++++++- - poppler/poppler-config.h.in | 12 ++++++++++++ - 7 files changed, 40 insertions(+), 6 deletions(-) - -commit 9df89c495683e229b771b3d008ed25d478465c35 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Jul 28 05:52:43 2005 +0000 - - 2005-07-28 Kristian Høgsberg <krh@redhat.com> - - * poppler/TextOutputDev.cc (TextBlock::visitSelection): Assign - start and stop coordinates in one place so we don't assign the - same point to both in some corner cases. - (TextWord::visitSelection): Initialize begin to len, not - len + 1 - to fix crash. - - (TextWord::visitSelection, TextLine::visitSelection): Change - selection trigger; now midpoint of glyph must be included in - selection area for glyph to be in selection. - - ChangeLog | 12 +++++ - poppler/CairoOutputDev.cc | 2 +- - poppler/TextOutputDev.cc | 113 - +++++++++++++++++++++----------------------- - 3 files changed, 67 insertions(+), 60 deletions(-) - -commit a3d9b5849cedf1316c6fc5859872e957f3f7b593 -Author: Martin Kretzschmar <martink@gnome.org> -Date: Wed Jul 27 19:21:08 2005 +0000 - - * poppler/PSOutputDev.cc (PSOutputDev): change the constructor to - take paper size and duplex setting parameters. - (init): add paper size and duplex parameters. - (writeDocSetup): add duplex parameter. - - * poppler/PSOutputDev.h: update declarations. - - * glib/poppler-private.h (struct _PopplerPSFile): store necessary - information to eventually construct a PSOutputDev. - - * glib/poppler-page.cc (poppler_page_render_to_ps): initialize the - output dev if it doesn't exist yet. - - * glib/poppler-document.cc (poppler_ps_file_new): don't create the - PSOutputDev here, just store filename and page range. - (poppler_ps_file_set_paper_size, poppler_ps_file_set_duplex): new - functions. - (poppler_ps_file_free): free the filename which we strdup now. - - * glib/poppler-document.h: add prototypes. - - ChangeLog | 23 +++++++++++++++++++++ - glib/poppler-document.cc | 49 - +++++++++++++++++++++++++++++++++++++++------ - glib/poppler-document.h | 15 +++++++++---- - glib/poppler-page.cc | 10 +++++++++ - glib/poppler-private.h | 6 +++++ - poppler/PSOutputDev.cc | 23 +++++++++++++-------- - poppler/PSOutputDev.h | 9 ++++++- - 7 files changed, 112 insertions(+), 23 deletions(-) - -commit 7be920ecf13698c3cf4ab8df09c8c67f1a04bfa2 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jul 26 21:52:09 2005 +0000 - - Fix mem leak in qt test app - - ChangeLog | 4 ++++ - qt/test-poppler-qt.cpp | 2 ++ - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit 2bc26dffd9f296799617d319055648c20f748c8a -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Jul 26 20:34:13 2005 +0000 - - 2005-07-26 Kristian Høgsberg <krh@redhat.com> - - * fofi/FoFiType1.cc: Make check for end of encoding array - a bit - more liberal so we don't crash on complex encoding arrays - (#3344). - - ChangeLog | 5 +++++ - fofi/FoFiType1.cc | 21 +++++++-------------- - 2 files changed, 12 insertions(+), 14 deletions(-) - -commit 07911274e4e850a628b1e587cafc2a73c05f93fe -Author: Albert Astals Cid <aacid@kde.org> -Date: Mon Jul 25 20:40:37 2005 +0000 - - Work on bad jpeg data that have garbage before the start marker. Fixes - bug #3299 - - ChangeLog | 5 +++++ - poppler/DCTStream.cc | 38 ++++++++++++++++++++++++++++++++++++++ - 2 files changed, 43 insertions(+), 0 deletions(-) - -commit a1869eca39172fcb42f036a5846b19548be53568 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 22 11:01:25 2005 +0000 - - Fix bug #3586 - - ChangeLog | 5 +++++ - poppler/CairoFontEngine.cc | 2 ++ - 2 files changed, 7 insertions(+), 0 deletions(-) - -commit 95529b41272484f08fb54393e1886bf7ff3e02c8 -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 22 10:45:19 2005 +0000 - - Make it possible to browse pages in test-poppler-qt - - ChangeLog | 13 ++++++++--- - qt/test-poppler-qt.cpp | 49 - +++++++++++++++++++++++++++++++++++++++-------- - 2 files changed, 49 insertions(+), 13 deletions(-) - -commit 2d52650864eab0e9385ed1fe8fb594daac9d8322 -Author: Martin Kretzschmar <martink@gnome.org> -Date: Fri Jul 22 10:35:56 2005 +0000 - - * glib/poppler-document.cc (poppler_fonts_iter_get_name): if the - font is a subset, strip the ABCDEF+ tag. - (poppler_fonts_iter_get_full_name): does what the old get_name did. - (poppler_fonts_iter_get_font_type, poppler_fonts_iter_is_embedded) - (poppler_fonts_iter_is_subset): new wrappers. - - * glib/poppler-document.h (PopplerFontType): new enum. - Update prototypes. - - ChangeLog | 11 +++++++++ - glib/poppler-document.cc | 54 - +++++++++++++++++++++++++++++++++++++++++++++- - glib/poppler-document.h | 38 +++++++++++++++++++++++--------- - 3 files changed, 91 insertions(+), 12 deletions(-) - -commit 43bed4aafcf1d291dc96fa5070efbd7936a6122f -Author: Albert Astals Cid <aacid@kde.org> -Date: Fri Jul 22 10:33:54 2005 +0000 - - Fix bugs #3728 and #3750 - - ChangeLog | 4 ++++ - splash/Splash.cc | 10 ++++++++++ - 2 files changed, 14 insertions(+), 0 deletions(-) - -commit c7bcef87493d354a077dd223d76f86640acc0ce3 -Author: Martin Kretzschmar <martink@gnome.org> -Date: Fri Jul 15 19:55:30 2005 +0000 - - update for 2005-06-27 change to actually display something again. - - ChangeLog | 5 +++++ - test/gtk-cairo-test.cc | 10 ++++++---- - 2 files changed, 11 insertions(+), 4 deletions(-) - -commit 6623711d2d50dc52454904ee16b25337f0aab130 -Author: Brad Hards <bradh@frogmouth.net> -Date: Sun Jul 10 09:34:03 2005 +0000 - - A general cleanup of the Arthur output renderer. - - ChangeLog | 5 ++ - poppler/ArthurOutputDev.cc | 105 - +++++++++++++++----------------------------- - 2 files changed, 41 insertions(+), 69 deletions(-) - -commit ea1cc9a7b12db9c44b89896c41d07e3ba932d054 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Jul 8 04:59:41 2005 +0000 - - 2005-07-08 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc (poppler_page_set_selection_alpha): Add - this function to initialize the alpha channel when using the - splash backend. - - * poppler/TextOutputDev.cc (visitLine): Add missing scaling of - intra-line selection edges. - - ChangeLog | 9 +++++++ - glib/poppler-page.cc | 59 - +++++++++++++++++++++++++++++++++++++++++++++- - poppler/TextOutputDev.cc | 17 +++++++----- - 3 files changed, 77 insertions(+), 8 deletions(-) - -commit 1cd915397c9532ed80b4f905b6ed9c0126aa38f2 -Author: Brad Hards <bradh@frogmouth.net> -Date: Thu Jul 7 21:15:09 2005 +0000 - - Add support for page layout to the Qt4 bindings, plus - test cases. - - ChangeLog | 8 ++++++++ - qt4/src/poppler-document.cc | 22 ++++++++++++++++++++++ - qt4/src/poppler-qt4.h | 26 ++++++++++++++++++++++++-- - qt4/tests/Makefile.am | 10 +++++++++- - qt4/tests/check_pagelayout_none.cpp | 22 ++++++++++++++++++++++ - qt4/tests/check_pagelayout_single.cpp | 22 ++++++++++++++++++++++ - 6 files changed, 107 insertions(+), 3 deletions(-) - -commit 4e050aef7ba132900f84205be221fd48808848c3 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Jul 7 17:19:36 2005 +0000 - - 2005-07-07 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc (poppler_page_prepare_output_dev): - Account - for page rotation when creating the cairo surface. - - ChangeLog | 5 +++++ - glib/poppler-page.cc | 17 +++++++++++++++-- - 2 files changed, 20 insertions(+), 2 deletions(-) - -commit 2eeab0b8afeb4897806df2de6e496889c25dda5e -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Jul 7 15:58:43 2005 +0000 - - 2005-07-06 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc (poppler_page_copy_to_pixbuf): Add - out of - bounds checking (from Marco). - - ChangeLog | 6 +++++- - glib/poppler-page.cc | 5 +++++ - 2 files changed, 10 insertions(+), 1 deletions(-) - -commit b1015f6bdbd93b2a2574a9f0e0e1cd7dbae9af78 -Author: Brad Hards <bradh@frogmouth.net> -Date: Thu Jul 7 11:13:24 2005 +0000 - - At least try to fix glib issues. If you care about glib, - then you should review this. - - ChangeLog | 4 ++++ - glib/poppler-document.cc | 2 ++ - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit 8bf787031e7a2e93b4e1202918bd1aee86675082 -Author: Brad Hards <bradh@frogmouth.net> -Date: Thu Jul 7 11:04:08 2005 +0000 - - Update for page mode - new mode from PDF-1.6, API docs fixes - and some tests. - - ChangeLog | 15 +++++++++++++++ - poppler/Catalog.cc | 2 ++ - poppler/Catalog.h | 3 ++- - qt4/src/poppler-document.cc | 2 ++ - qt4/src/poppler-qt4.h | 14 +++++++++----- - qt4/tests/Makefile.am | 22 +++++++++++++++++++++- - qt4/tests/check_pagemode_attach.cpp | 22 ++++++++++++++++++++++ - qt4/tests/check_pagemode_fullscreen.cpp | 22 ++++++++++++++++++++++ - qt4/tests/check_pagemode_none.cpp | 22 ++++++++++++++++++++++ - qt4/tests/check_pagemode_oc.cpp | 22 ++++++++++++++++++++++ - qt4/tests/check_pagemode_thumbs.cpp | 22 ++++++++++++++++++++++ - 11 files changed, 161 insertions(+), 7 deletions(-) - -commit 695e27fb4d6fcc3466e2c9c95b4f02821b07e823 -Author: Brad Hards <bradh@frogmouth.net> -Date: Thu Jul 7 11:01:27 2005 +0000 - - Suppress noise from new test files. - - qt4/tests/.cvsignore | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 8a8d57bdcf11ed2903913d938b9711053b9bb9f1 -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jul 6 17:12:36 2005 +0000 - - Extract family, stretch and weight from the font descriptor - - ChangeLog | 2 ++ - poppler/GfxFont.cc | 41 +++++++++++++++++++++++++++++++++++++++++ - poppler/GfxFont.h | 36 ++++++++++++++++++++++++++++++++++++ - 3 files changed, 79 insertions(+), 0 deletions(-) - -commit 3a1646c2f776f5a07b0e830fcb8e1b0a80efb41c -Author: Albert Astals Cid <aacid@kde.org> -Date: Wed Jul 6 13:29:00 2005 +0000 - - Add checkFooter to check the document ends with %%EOF - - ChangeLog | 5 +++++ - poppler/PDFDoc.cc | 28 ++++++++++++++++++++++++++++ - poppler/PDFDoc.h | 1 + - 3 files changed, 34 insertions(+), 0 deletions(-) - -commit 377c023d31cf74d8240aa5be9dba8e3838459a8c -Author: Brad Hards <bradh@frogmouth.net> -Date: Wed Jul 6 11:15:16 2005 +0000 - - Add unit tests for the isLinearized() property. - - ChangeLog | 4 ++++ - qt4/tests/Makefile.am | 6 +++++- - qt4/tests/check_linearised.cpp | 23 +++++++++++++++++++++++ - 3 files changed, 32 insertions(+), 1 deletions(-) - -commit 5fa869887a840a585340993718df0841010666cf -Author: Brad Hards <bradh@frogmouth.net> -Date: Wed Jul 6 09:52:30 2005 +0000 - - Remove boolean for unicode table lookup from Font - - ChangeLog | 14 ++++++++++++++ - qt4/src/poppler-document.cc | 2 -- - qt4/src/poppler-qt4.h | 14 +------------- - qt4/tests/poppler-fonts.cpp | 16 +++++++--------- - 4 files changed, 22 insertions(+), 24 deletions(-) - -commit 40469c5883e17e734f3d54872c59e76b95bc0f95 -Author: Brad Hards <bradh@frogmouth.net> -Date: Wed Jul 6 09:00:39 2005 +0000 - - Update to reflect recent changes. - - qt4/tests/.cvsignore | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 6cea437208f913085a6a8c7183b0826a107cefb5 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jul 5 21:15:48 2005 +0000 - - Don't crash with files that have fonts with no name - - ChangeLog | 7 +++++++ - qt4/src/poppler-document.cc | 13 ++++++++++--- - qt4/src/poppler-qt4.h | 2 +- - 3 files changed, 18 insertions(+), 4 deletions(-) - -commit 1323c74479848f5b87a3a13fa26e8b9e096e9f6a -Author: Brad Hards <bradh@frogmouth.net> -Date: Tue Jul 5 12:31:59 2005 +0000 - - Check in a couple more test apps - - qt4/tests/Makefile.am | 10 ++++++- - qt4/tests/check_author.cpp | 25 ++++++++++++++++ - qt4/tests/check_permissions.cpp | 59 - +++++++++++++++++++++++++++++++++++++++ - 3 files changed, 93 insertions(+), 1 deletions(-) - -commit 839a798ec3725427185de5a48c58ac448596b25d -Author: Brad Hards <bradh@frogmouth.net> -Date: Tue Jul 5 12:25:00 2005 +0000 - - Add Qt4 bindings for new user permission properties. - - ChangeLog | 4 +++ - qt4/src/poppler-document.cc | 25 +++++++++++++++++++++ - qt4/src/poppler-qt4.h | 51 - ++++++++++++++++++++++++++++++++++++++---- - 3 files changed, 75 insertions(+), 5 deletions(-) - -commit e10f6990d3339e3a7adeaa50b1754cf7ecf82f87 -Author: Brad Hards <bradh@frogmouth.net> -Date: Tue Jul 5 12:15:04 2005 +0000 - - Add some more user permissions properties - high resolution - printing, document assembly, extraction for accessibility - and form completion. - - ChangeLog | 8 +++++++ - poppler/PDFDoc.h | 9 ++++++++ - poppler/XRef.cc | 55 - ++++++++++++++++++++++++++++++++++++++++++++++++++--- - poppler/XRef.h | 4 +++ - 4 files changed, 72 insertions(+), 4 deletions(-) - -commit 3a8e1ba03cdec6412dd0b79f0cc59a4cd97dd4e7 -Author: Brad Hards <bradh@frogmouth.net> -Date: Mon Jul 4 11:38:22 2005 +0000 - - A couple more little changes. - - ChangeLog | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit a44bd0b45bb89f29ddca5d0e8986a8de50f9db39 -Author: Brad Hards <bradh@frogmouth.net> -Date: Mon Jul 4 11:37:21 2005 +0000 - - Change path to sample file to point to test module - - qt4/tests/check_orientation.cpp | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 2a7079087c35651c242d3843c94703a3199e61ca -Author: Brad Hards <bradh@frogmouth.net> -Date: Mon Jul 4 11:36:13 2005 +0000 - - Fix typo causing failure to pick up upside down pages. - - qt4/src/poppler-page.cc | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 529a548044ae721a414c5b8e768c0498b1e6830b -Author: Brad Hards <bradh@frogmouth.net> -Date: Mon Jul 4 08:30:29 2005 +0000 - - Update to reflect recent changes - - ChangeLog | 30 +++++++++++++++++++++++++++++- - qt4/tests/.cvsignore | 2 ++ - 2 files changed, 31 insertions(+), 1 deletions(-) - -commit 08cca4670f8ae65333beacda85834112e76489d1 -Author: Brad Hards <bradh@frogmouth.net> -Date: Mon Jul 4 08:21:27 2005 +0000 - - Add in a simple demo/test application, similar to the pdffonts - application in xpdf. - - qt4/tests/Makefile.am | 9 ++++- - qt4/tests/poppler-fonts.cpp | 76 - +++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 84 insertions(+), 1 deletions(-) - -commit 52af89d8303b50c45d5e4584d19ec8b7d7ebcf9b -Author: Brad Hards <bradh@frogmouth.net> -Date: Mon Jul 4 08:18:52 2005 +0000 - - Update to reflect changes to rendering API. - - qt4/tests/stress-poppler-qt4.cpp | 4 ++-- - qt4/tests/test-poppler-qt4.cpp | 3 ++- - 2 files changed, 4 insertions(+), 3 deletions(-) - -commit d42998d0fc32b1e21a2aeef1311e0baf508ade3f -Author: Brad Hards <bradh@frogmouth.net> -Date: Mon Jul 4 08:16:17 2005 +0000 - - Qt4 update. - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-document.cc complete Qt4 font metadata handling - - * qt4/src/poppler-qt4.h: - * qt4/src/poppler-page.cc: change the render API to make it more - Qt-like. - - qt4/src/poppler-document.cc | 7 +++- - qt4/src/poppler-page.cc | 5 +-- - qt4/src/poppler-qt4.h | 73 - ++++++++++++++++++++++++++++++++++++++++-- - 3 files changed, 77 insertions(+), 8 deletions(-) - -commit 5d194b926d1ed642ed4bbd3304befa073d389cd4 -Author: Brad Hards <bradh@frogmouth.net> -Date: Mon Jul 4 08:10:16 2005 +0000 - - Change FontInfo::type() to return an enumerated value, - rather than a GooString. - - poppler/FontInfo.cc | 16 ++-------------- - poppler/FontInfo.h | 16 +++++++++++++--- - 2 files changed, 15 insertions(+), 17 deletions(-) - -commit 1303020b2e97bc110ccf045cd2811daf59ec72ce -Author: Brad Hards <bradh@frogmouth.net> -Date: Mon Jul 4 07:42:32 2005 +0000 - - Fix up the unit test, now that I have a real sample - file. - - qt4/tests/check_orientation.cpp | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit 96fc0ea3fc6c9c7d933e9e0c02a622b2aeef7617 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Jul 1 04:57:49 2005 +0000 - - 2005-07-01 Kristian Høgsberg <krh@redhat.com> - - * poppler/TextOutputDev.cc: Make selection also work when - dragging - backwards in the text flow. Currently this is a big pile of - if-statements, and there is certainly room for improvement. - - ChangeLog | 6 ++ - poppler/TextOutputDev.cc | 129 - +++++++++++++++++++++++++++++++++++++--------- - 2 files changed, 111 insertions(+), 24 deletions(-) - -commit 06c49c496f28aba608101adcecd8cec34937ac78 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Jun 30 19:44:33 2005 +0000 - - 2005-06-30 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.h: * glib/poppler-page.cc - (poppler_page_copy_to_pixbuf): Fix splash compilation - (patch from - Marco). - (poppler_page_render_to_pixbuf): Drop dest_x and dest_y - coordinates from this function. This functionality can be - achieved using a sub-GdkPixbuf. - - * glib/test-poppler-glib.c (main): Update test case. - - ChangeLog | 11 +++++++++++ - NEWS | 6 ++++++ - glib/poppler-page.cc | 27 ++++++++++----------------- - glib/poppler-page.h | 4 +--- - glib/test-poppler-glib.c | 2 +- - 5 files changed, 29 insertions(+), 21 deletions(-) - -commit b126785aeda6b5576a13fc3f3853b027bd7dd306 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Jun 30 00:36:01 2005 +0000 - - 2005-06-29 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-private.h: Move TextOutputDev.h include - here from - poppler-page.cc - - ChangeLog | 5 +++++ - glib/poppler-page.cc | 1 - - glib/poppler-private.h | 1 + - 3 files changed, 6 insertions(+), 1 deletions(-) - -commit b15a8caf003d7d0631d4f78db5ab54e55a5a000a -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Jun 29 21:24:48 2005 +0000 - - 2005-06-29 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/poppler-private.h: - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDev.h: - * poppler/Page.cc: - * poppler/Page.h: - * poppler/TextOutputDev.cc: - * poppler/TextOutputDev.h: Add support for rendering real - selection (based on text flow). - - ChangeLog | 20 ++- - configure.ac | 4 +- - glib/poppler-page.cc | 224 +++++++++++++++++++------ - glib/poppler-page.h | 65 ++++--- - glib/poppler-private.h | 3 + - poppler/CairoOutputDev.cc | 13 +- - poppler/CairoOutputDev.h | 2 +- - poppler/Page.cc | 59 +++++-- - poppler/Page.h | 12 ++ - poppler/TextOutputDev.cc | 414 - ++++++++++++++++++++++++++++++++++++++++++++- - poppler/TextOutputDev.h | 38 ++++- - 11 files changed, 743 insertions(+), 111 deletions(-) - -commit 3b5e20465e482eb0e75a106697ee94d60aea2fdc -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 28 22:51:29 2005 +0000 - - Forgot assigning type on copy constructor - - poppler/FontInfo.cc | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit e512cd1832a0e6d15149e12e8e67a39d335efc86 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 28 22:49:14 2005 +0000 - - Add FontInfo::getType() - - ChangeLog | 3 +++ - poppler/FontInfo.cc | 4 ++++ - poppler/FontInfo.h | 2 ++ - 3 files changed, 9 insertions(+), 0 deletions(-) - -commit 8aeb5205f2876a9dc36eb1dc1e361bb87adf4e31 -Author: Albert Astals Cid <aacid@kde.org> -Date: Tue Jun 28 22:00:05 2005 +0000 - - use transformation matrix for image rendering in Arthur backend - - ChangeLog | 4 ++++ - poppler/ArthurOutputDev.cc | 12 +++++++----- - 2 files changed, 11 insertions(+), 5 deletions(-) - -commit a221d06fdc7b0688ca0744a1d6ad49d472c7f12c -Author: Brad Hards <bradh@frogmouth.net> -Date: Tue Jun 28 10:59:14 2005 +0000 - - Reduce cvs up noise - - .cvsignore | 1 + - ChangeLog | 7 +++++++ - qt4/.cvsignore | 3 +++ - qt4/src/.cvsignore | 7 +++++++ - qt4/tests/.cvsignore | 8 ++++++++ - 5 files changed, 26 insertions(+), 0 deletions(-) - -commit ea58a20bbcf450a1ecb8fe00e8162cfdf76105f1 -Author: Brad Hards <bradh@frogmouth.net> -Date: Tue Jun 28 10:00:09 2005 +0000 - - Initial import of Qt4 bindings, and for a Qt4 "Arthur" (QPainter) - backend renderer. - - The bindings are currently unstable - you can expect substantial - change - in both source and binary interfaces. - - The Arthur renderer currently does a reasonable job of rendering path - and fill, but the image rendering doesn't work (for reasons that - aren't - clear to me) and text rendering doesn't use the right glyphs - it just - draws with the current font. There is a lot of work to do on this - too. Help is, of coure, welcome. - - ChangeLog | 12 + - Makefile.am | 10 +- - configure.ac | 94 +++- - poppler-qt4.pc.in | 12 + - poppler/ArthurOutputDev.cc | 604 +++++++++++++++++++ - poppler/ArthurOutputDev.h | 133 +++++ - poppler/Makefile.am | 20 + - qt4/Makefile.am | 1 + - qt4/src/Doxyfile | 1212 - ++++++++++++++++++++++++++++++++++++++ - qt4/src/Makefile.am | 22 + - qt4/src/poppler-document.cc | 309 ++++++++++ - qt4/src/poppler-page.cc | 170 ++++++ - qt4/src/poppler-private.h | 36 ++ - qt4/src/poppler-qt4.h | 286 +++++++++ - qt4/tests/Makefile.am | 34 ++ - qt4/tests/check_orientation.cpp | 40 ++ - qt4/tests/stress-poppler-qt4.cpp | 70 +++ - qt4/tests/test-poppler-qt4.cpp | 121 ++++ - 18 files changed, 3183 insertions(+), 3 deletions(-) - -commit 61e9bc76eb2fcb0b4b899ebfad1cc71c59fc8274 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Jun 28 03:44:12 2005 +0000 - - 2005-06-27 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDev.h: Change CairoOutputDev to render - to a - given surface and let the user create that surface. - - * glib/poppler-document.cc: - * glib/poppler-page.cc: - * glib/poppler-private.h: Create the cairo image surface here - instead and pass it to the CairoOutputDev for rendering. - - * poppler/CairoOutputDevImage.cc: - * poppler/CairoOutputDevImage.h: - * poppler/CairoOutputDevX.cc: - * poppler/CairoOutputDevX.h: - * poppler/Makefile.am: Remove specialized cairo output - devices. - - ChangeLog | 17 +++ - glib/poppler-document.cc | 2 +- - glib/poppler-page.cc | 21 +++- - glib/poppler-private.h | 4 +- - poppler/CairoOutputDev.cc | 24 ++--- - poppler/CairoOutputDev.h | 8 +- - poppler/CairoOutputDevImage.cc | 80 --------------- - poppler/CairoOutputDevImage.h | 44 -------- - poppler/CairoOutputDevX.cc | 216 - ---------------------------------------- - poppler/CairoOutputDevX.h | 117 ---------------------- - poppler/Makefile.am | 8 +- - 11 files changed, 54 insertions(+), 487 deletions(-) - -commit 8079dce3f0ed91dd531465f45c6d3c568ab4ecd1 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Jun 27 01:04:32 2005 +0000 - - 2005-06-26 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDev.h: Switch back to using drawChar() - for - text, but utilize the beginString() and endString() hooks - so we - can use cairo_show_glyphs() efficiently. - - ChangeLog | 7 +++ - poppler/CairoOutputDev.cc | 107 - +++++++++++++-------------------------------- - poppler/CairoOutputDev.h | 12 ++++- - 3 files changed, 48 insertions(+), 78 deletions(-) - -commit 1aa48d6b7907a1d53830f0cf28085041f685368d -Author: Albert Astals Cid <aacid@kde.org> -Date: Sun Jun 26 23:35:26 2005 +0000 - - Add PageTransition class and PageTransition* Page::getTransition() - const; to the qt frontend. Code almost 100% copied from xpdf code - inside kpdf - - ChangeLog | 5 ++ - qt/poppler-page.cc | 121 - ++++++++++++++++++++++++++++++++++++++++++++++++++++ - qt/poppler-qt.h | 78 +++++++++++++++++++++++++++++++++ - 3 files changed, 204 insertions(+), 0 deletions(-) - -commit 9d4327eecd94299a3629b0814e84f981a4be1dfb -Author: Martin Kretzschmar <martink@gnome.org> -Date: Sun Jun 26 15:54:16 2005 +0000 - - add poppler-enums.[ch]. - - ChangeLog | 2 ++ - glib/.cvsignore | 8 +++++--- - 2 files changed, 7 insertions(+), 3 deletions(-) - -commit 768186514b9fc175cf330344408bb89ab4c909f3 -Author: Martin Kretzschmar <martink@gnome.org> -Date: Sun Jun 26 11:40:35 2005 +0000 - - require glib 2.4+ for g_value_take_string and G_DEFINE_TYPE. - - ChangeLog | 5 +++++ - configure.ac | 4 ++-- - 2 files changed, 7 insertions(+), 2 deletions(-) - -commit 5d40e34a367212c39af06332879f26824d6d62d2 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Jun 26 00:01:39 2005 +0000 - - 2005-06-25 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/Error.h: Maybe fix build on Solaris. - - ChangeLog | 4 ++++ - poppler/Error.h | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit c2780a3b3f4615bb28bfe394d649b388db4ccf4d -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Jun 20 21:33:09 2005 +0000 - - 2005-06-20 Kristian Høgsberg <krh@redhat.com> - - * NEWS: - * configure.ac: Bump version to 0.3.3 and sum up changes since - last release. - - * glib/poppler-page.cc (poppler_page_find_text): Initialize - xMin - and yMin to avoid referencing unintialized memory (#3582). - - ChangeLog | 9 +++++++++ - NEWS | 10 ++++++++++ - configure.ac | 2 +- - glib/poppler-page.cc | 2 ++ - 4 files changed, 22 insertions(+), 1 deletions(-) - -commit 9023891f314ac37811b5c973be2e36b6de353cf2 -Author: Martin Kretzschmar <martink@gnome.org> -Date: Mon Jun 20 18:45:41 2005 +0000 - - (info_dict_get_string): convert from PDFDocEncoding to UTF-8. - - ChangeLog | 5 +++++ - glib/poppler-document.cc | 16 +++++++++++++++- - 2 files changed, 20 insertions(+), 1 deletions(-) - -commit bbf2fe757f0fd08d0e90e3810709ab7152c779c0 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Jun 20 17:58:38 2005 +0000 - - 2005-06-20 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/poppler.h: Clean up glib rotation implementation and - add a - getter for rotation. Patch from Marco. - - ChangeLog | 7 +++++ - glib/poppler-page.cc | 69 - ++++++++++++++++++++++++++++--------------------- - glib/poppler-page.h | 57 +++++++++++++++++++++-------------------- - glib/poppler.h | 1 - - 4 files changed, 75 insertions(+), 59 deletions(-) - -commit c264d8a9f84587cd0f2ef67683a01fc8dd9395af -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Jun 20 17:38:27 2005 +0000 - - 2005-06-20 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-document.cc: - * poppler/FontInfo.cc: Fixes from Marco to handle fonts - without - name (typically type 3 fonts) and fix an iterator bug. - - ChangeLog | 6 ++++++ - glib/poppler-document.cc | 8 +++++++- - poppler/FontInfo.cc | 13 ++++++++++--- - 3 files changed, 23 insertions(+), 4 deletions(-) - -commit 4746e63a793a2881e904ac54d58b7d3e48b07dcf -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Jun 20 17:22:35 2005 +0000 - - 2005-06-20 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc (poppler_page_get_link_mapping): Adjust - link coordinates so they're relative to bounding box - lower left - corner (#3396). - - ChangeLog | 6 ++++++ - glib/poppler-page.cc | 6 ++++++ - 2 files changed, 12 insertions(+), 0 deletions(-) - -commit bada3d03583ef6ed34d2aa743de8fd9ca4a5c748 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Jun 17 05:30:56 2005 +0000 - - 2005-06-17 Kristian Høgsberg <krh@redhat.com> - - * autogen.sh: Patch from Emil Soleyman-Zomalan to enable - checks - for automake >= 1.7 (#3554). - - ChangeLog | 5 +++ - autogen.sh | 104 - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 109 insertions(+), 0 deletions(-) - -commit 25db42831ddde500697126352458e092a9b0ab9b -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Jun 15 15:02:46 2005 +0000 - - 2005-06-15 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-document.cc: - * glib/poppler-document.h: Patch from Marco to get initial - status - (open or closed) for bookmark subtrees. - ----------------------------------------------------------- - - ChangeLog | 6 ++++++ - glib/poppler-document.cc | 9 +++++++++ - glib/poppler-document.h | 1 + - 3 files changed, 16 insertions(+), 0 deletions(-) - -commit e54e306ac5d603001fefda3b9ecd81821e4bd09e -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Jun 13 17:18:32 2005 +0000 - - Forgot to add new files. - - poppler/FontInfo.cc | 197 - +++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/FontInfo.h | 51 +++++++++++++ - 2 files changed, 248 insertions(+), 0 deletions(-) - -commit 23e8ed5cbf4d7d999a8a1dcf714aaddaf339ceff -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Jun 13 16:09:33 2005 +0000 - - 2005-06-13 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-document.cc: - * glib/poppler-document.h: - * glib/poppler-private.h: - * glib/poppler.h: - * glib/test-poppler-glib.c: - * poppler/Makefile.am: Patch from Marco to extract font - info from - document. - - ChangeLog | 10 ++++ - glib/poppler-document.cc | 131 - ++++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-document.h | 13 +++++ - glib/poppler-private.h | 7 +++ - glib/poppler.h | 2 + - glib/test-poppler-glib.c | 14 +++++ - poppler/Makefile.am | 2 + - 7 files changed, 179 insertions(+), 0 deletions(-) - -commit fbb86d2983a28ad2c46b8c5d475a2df1f0f0e4b9 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Jun 8 14:35:46 2005 +0000 - - 2005-06-08 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoFontEngine.cc: Remember to delete tmpFileName. - Patch from Nikolai Weibull (#3491). - - ChangeLog | 5 +++++ - poppler/CairoFontEngine.cc | 37 +++++++++++++++++++------------------ - 2 files changed, 24 insertions(+), 18 deletions(-) - -commit 699b03025c1d38a42a49e39017097c5d0315fd6f -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Jun 7 20:25:48 2005 +0000 - - 2005-06-07 Kristian Høgsberg <krh@redhat.com> - - * qt/test-poppler-qt.cpp: Add stdlib.h include for exit(). - - ChangeLog | 4 ++++ - qt/test-poppler-qt.cpp | 1 + - 2 files changed, 5 insertions(+), 0 deletions(-) - -commit 0017b1a72c58e2d016d22451079c466abdfff15c -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Jun 2 19:14:45 2005 +0000 - - 2005-06-02 Kristian Høgsberg <krh@redhat.com> - - * poppler/TextOutputDev.h: - * qt/poppler-qt.h: Patch from Stanislav Brabec - <sbrabec@suse.cz> - to fix gcc 4.0.1 warnings on undeclared friend classes. - - * test/gtk-splash-test.cc: Fix from Martin Kretzschmar - <martink@gnome.org> to compile with OPI enabled (#2911). - - ChangeLog | 9 +++++++++ - poppler/TextOutputDev.h | 3 +++ - qt/poppler-qt.h | 2 ++ - test/gtk-splash-test.cc | 2 +- - 4 files changed, 15 insertions(+), 1 deletions(-) - -commit 47c3b4ec2c7691e44f5100b1f5956df0005467c8 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Jun 2 18:49:55 2005 +0000 - - 2005-06-02 Kristian Høgsberg <krh@redhat.com> - - Patch from Stanislav Brabec <sbrabec@suse.cz>: - - * configure.ac: - * poppler-cairo.pc.in: - * poppler-glib.pc.in: - * poppler-qt.pc.in: - * poppler-splash.pc.in: Misc fixes to pkg-config files. - - ChangeLog | 10 ++++++++++ - configure.ac | 6 ++++-- - poppler-cairo.pc.in | 3 +-- - poppler-glib.pc.in | 4 ++-- - poppler-qt.pc.in | 1 + - poppler-splash.pc.in | 3 +-- - 6 files changed, 19 insertions(+), 8 deletions(-) - -commit 9f0da96dd005defd5d82dd05b627ff1925430215 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Thu Jun 2 00:35:44 2005 +0000 - - 2005-06-01 Jeff Muizelaar <jeff@infidigm.net> - - * poppler/Error.cc: - * poppler/Error.h: Make error handling function setable through - setErrorFunction. - - Based on a patch by Albert Astals Cid. - - ChangeLog | 8 ++++++++ - poppler/Error.cc | 29 ++++++++++++++++++++--------- - poppler/Error.h | 2 ++ - 3 files changed, 30 insertions(+), 9 deletions(-) - -commit f688aa11d066f1c6f4115cbdb604ac61fb8b5146 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sun May 29 14:59:34 2005 +0000 - - 2005-05-29 Kristian Høgsberg <krh@redhat.com> - - * glib/*: Add more meta data properties to poppler document. - Patch by Emil Soleyman-Zomalan (#3359). - - ChangeLog | 5 ++ - glib/poppler-document.cc | 155 - +++++++++++++++++++++++++++++++++++++++++++++- - glib/poppler.gidl | 5 ++ - glib/test-poppler-glib.c | 46 ++++++++++---- - 4 files changed, 194 insertions(+), 17 deletions(-) - -commit 9e6eeec574d48d2341ee620e16360d3b21c40103 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu May 26 13:03:35 2005 +0000 - - 2005-05-26 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoOutputDev.cc (clip): Remove snapToGrid - so clip() - prototype matches what Gfx actually calls (fixes clipping). - - * poppler/CairoOutputDev.cc: Update fill color, stroke - color, fill - opacity and stroke opacity from GfxState on restore, - since they - aren't handled by cairo_restore() (#3362). - - * poppler/CairoOutputDev.cc: Comment out tolerance setting - until - we figure out how cairo settings relate to pdf settings. - - * poppler/CairoOutputDev.cc: Support fill and stroke opacity. - - ChangeLog | 12 ++++++++++++ - poppler/CairoOutputDev.cc | 41 - ++++++++++++++++++++++++++++++----------- - poppler/CairoOutputDev.h | 6 +++++- - 3 files changed, 47 insertions(+), 12 deletions(-) - -commit 89a633edd860e3c6ded1e468edf6f28cfcb43d0e -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu May 26 12:52:38 2005 +0000 - - 2005-05-26 Kristian Høgsberg <krh@redhat.com> - - * poppler/GfxState.cc: - * poppler/GfxState.h: Add GfxColorSpace::getRGBLine here and - implement in subclasses. - - * poppler/CairoOutputDev.cc (drawImage): Use getRGBLine here. - - ChangeLog | 8 ++ - poppler/CairoOutputDev.cc | 66 +++++++++---------- - poppler/GfxState.cc | 160 - ++++++++++++++++++++++++++++++++++++++++++++- - poppler/GfxState.h | 14 ++++ - 4 files changed, 212 insertions(+), 36 deletions(-) - -commit 4d8224819da7a85e4d99f96c9bbb047ece58130a -Author: Jonathan Blandford <jrb@redhat.com> -Date: Mon May 23 04:23:53 2005 +0000 - - Mon May 23 00:22:41 2005 Jonathan Blandford <jrb@redhat.com> - - * glib/poppler-document.h: Add a permissions flag to the glib - bindings. - - ChangeLog | 5 +++++ - glib/poppler-document.cc | 24 ++++++++++++++++++++++++ - glib/poppler-document.h | 16 +++++++++------- - 3 files changed, 38 insertions(+), 7 deletions(-) - -commit 1f677e2f60634a7d0c5e0e0d2125ab15c2722979 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sat May 21 21:33:06 2005 +0000 - - 2005-05-21 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-document.cc (poppler_ps_file_new): Fix - off-by-one - error spotted by Jürg Billeter. - ----------------------------------------------------- - - ChangeLog | 5 +++++ - glib/poppler-document.cc | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit 0bbf2f08173866cde9b097eeeb1f4218a396588d -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri May 20 20:48:52 2005 +0000 - - 2005-05-20 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoOutputDev.cc: Account for different row - vs. column - vector conventions between cairo and poppler. - - ChangeLog | 3 +++ - poppler/CairoOutputDev.cc | 18 +++++++++--------- - 2 files changed, 12 insertions(+), 9 deletions(-) - -commit da44ec7e8de58e55e55b1f780bc3f4bc8307874f -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri May 20 18:38:10 2005 +0000 - - 2005-05-20 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoFontEngine.cc: Only get the code to gid map if - we're using freetype 2.1.7 or older (#3340). - - ChangeLog | 5 +++++ - poppler/CairoFontEngine.cc | 13 ++++++++----- - 2 files changed, 13 insertions(+), 5 deletions(-) - -commit 6fe29cf0a7e54b8d294471a0f94eb9e989ad1d7f -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu May 19 05:18:04 2005 +0000 - - Add bugzilla number. - - ChangeLog | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 42de1348622cf86a87bc22941bd48bffa943dac9 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu May 19 05:16:22 2005 +0000 - - 2005-05-19 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoFontEngine.cc: Only cast to Gfx8BitFont when we - know for sure we have a truetype font. - GfxCIDFont::getCIDToGIDLen() can return 0 in which case - codeToGID - will be NULL, and we end up casting it to a Gfx8BitFont. - - ChangeLog | 7 +++++++ - poppler/CairoFontEngine.cc | 2 +- - 2 files changed, 8 insertions(+), 1 deletions(-) - -commit afc05387c94a76ff0ed69b3f5d9a69ddd1448e83 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed May 18 17:39:59 2005 +0000 - - 2005-05-18 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: Require cairo 0.5.0, bump release to 0.3.2. - - * NEWS: Sum up latest changes. - - * glib/poppler-document.cc (poppler_ps_file_new): Take a page - range here instead of just number of pages. - - ChangeLog | 9 +++++++++ - NEWS | 7 +++++++ - configure.ac | 6 +++--- - glib/poppler-document.cc | 15 ++++++++++----- - glib/poppler-document.h | 1 + - 5 files changed, 30 insertions(+), 8 deletions(-) - -commit 420134a194af9161282ccfe329d17adef8d325f2 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue May 17 23:38:27 2005 +0000 - - 2005-05-17 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoOutputDevX.cc: - * test/gtk-cairo-test.cc: Chase the cairo xlib constructor - again. - - ChangeLog | 5 +++++ - poppler/CairoOutputDevX.cc | 5 +++-- - test/gtk-cairo-test.cc | 5 +++-- - 3 files changed, 11 insertions(+), 4 deletions(-) - -commit 6fd62953a910dcfb4abd9de5ea18285b8fa5d202 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon May 16 23:16:15 2005 +0000 - - Add bug number and attribution to ChangeLog entry. - - ChangeLog | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 6d7f624c13e8a9a8251ac97388cd80e418c70250 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon May 16 21:56:31 2005 +0000 - - 2005-05-16 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: Check for glib-mkenums. - - * glib/Makefile.am (poppler-enums.h): Generate glib enums at - compile time. - - * glib/poppler-enums.c: - * glib/poppler-enums.h: Removed. - - ChangeLog | 8 ++ - configure.ac | 3 + - glib/.cvsignore | 1 + - glib/Makefile.am | 67 ++++++++++++------ - glib/poppler-enums.c | 189 - -------------------------------------------------- - glib/poppler-enums.h | 49 ------------- - 6 files changed, 57 insertions(+), 260 deletions(-) - -commit 2801b54a944fc9e1072c5dcb9f1153a0c9f42de5 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon May 16 20:27:51 2005 +0000 - - 2005-05-16 Kristian Høgsberg <krh@redhat.com> - - * test/gtk-cairo-test.cc: Update this test case also. - - ChangeLog | 2 ++ - test/gtk-cairo-test.cc | 5 +++-- - 2 files changed, 5 insertions(+), 2 deletions(-) - -commit 8753ae8ba20fcceaef3ef1dda89129f0456fccf6 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon May 16 19:06:00 2005 +0000 - - 2005-05-16 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoOutputDevX.cc: Track changes to cairo Xlib - surface - constructors. - - * poppler/CairoFontEngine.cc (cairo_font_face_destroy): - Make this - static. - - ChangeLog | 8 ++++++++ - poppler/CairoFontEngine.cc | 2 +- - poppler/CairoOutputDevX.cc | 5 +++-- - 3 files changed, 12 insertions(+), 3 deletions(-) - -commit 2e17106ef4711097104a561d5be49980f8b2f5ab -Author: Jonathan Blandford <jrb@redhat.com> -Date: Fri May 13 03:47:36 2005 +0000 - - whoops! commit the right file. - - glib/poppler.gidl | 212 - +++++++++++++++++++++++++++++++++++++++++++++++++++++ - glib/test.gidl | 23 ------ - 2 files changed, 212 insertions(+), 23 deletions(-) - -commit 19b62e1c8ea8ce042ac089defe94f756dcaf194e -Author: Jonathan Blandford <jrb@redhat.com> -Date: Fri May 13 03:25:32 2005 +0000 - - Thu May 12 23:10:45 2005 Jonathan Blandford <jrb@redhat.com> - - * glib/poppler.gidl: add metadata file. - - ChangeLog | 4 ++++ - glib/test.gidl | 23 +++++++++++++++++++++++ - 2 files changed, 27 insertions(+), 0 deletions(-) - -commit bef5a548f3b21e7220079155e9b5054fb0c6c3c7 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu May 12 21:26:25 2005 +0000 - - 2005-05-12 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoOutputDev.cc: - * poppler/CairoOutputDevX.cc: - * poppler/CairoOutputDevImage.cc: - * test/gtk-cairo-test.cc: Update to latest cairo changes, - patch - from Jens Taprogge (#3281) - - ChangeLog | 8 ++++++++ - poppler/CairoOutputDev.cc | 22 +++++++++++----------- - poppler/CairoOutputDevImage.cc | 11 ++++++----- - poppler/CairoOutputDevX.cc | 7 +++++-- - test/gtk-cairo-test.cc | 8 +++++--- - 5 files changed, 35 insertions(+), 21 deletions(-) - -commit c10ea2dd9bffaf9af023612ef196bab2b204d3e1 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed May 11 20:01:43 2005 +0000 - - 2005-05-11 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler.cc (poppler_get_backend, poppler_get_version): - Add - these functions so it's easy to tell if poppler is using - cairo or - splash and what version. - - * glib/test-poppler-glib.c (main): Print out version and - backend. - - ChangeLog | 8 ++++++++ - glib/poppler-enums.c | 26 ++++++++++++++++++++++++++ - glib/poppler-enums.h | 15 +++++++++++++++ - glib/poppler.cc | 21 +++++++++++++++++++++ - glib/poppler.h | 11 +++++++++++ - glib/test-poppler-glib.c | 9 ++++++++- - 6 files changed, 89 insertions(+), 1 deletions(-) - -commit 7d189e33cfa68e722561e9398ad85a77b538ab14 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri May 6 16:38:57 2005 +0000 - - 2005-05-06 Kristian Høgsberg <krh@redhat.com> - - * glib/Makefile.am (libpoppler_glib_la_LIBADD): Link - poppler-glib - against poppler. - - * qt/Makefile.am (libpoppler_qt_la_LIBADD): Ditto for qt. - - * poppler-glib.pc (Libs): Drop -lpoppler from link. - - * poppler-qt.pc (Libs): Ditto for qt. - - * configure.ac: Test for both libqt-mt.la and libqt-mt.so - in that - order. - - ChangeLog | 14 ++++++++++++++ - configure.ac | 8 +++++++- - glib/Makefile.am | 1 + - poppler-glib.pc.in | 2 +- - poppler-qt.pc.in | 2 +- - qt/Makefile.am | 1 + - qt/test-poppler-qt.cpp | 1 + - 7 files changed, 26 insertions(+), 3 deletions(-) - -commit c937e63f17a096b94a554103476ecb9ab1b71b90 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed May 4 20:08:41 2005 +0000 - - 2005-05-04 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoOutputDev.cc (CairoOutputDev::drawImageMask, - CairoOutputDev::drawImage): Track cairo cvs API changes; use - cairo_mask() and cairo_paint() for drawing image masks - and images. - - ChangeLog | 6 +++ - poppler/CairoOutputDev.cc | 98 - +++++++++++++++++++++++--------------------- - 2 files changed, 57 insertions(+), 47 deletions(-) - -commit c142773ad30b409d8169a53921e731305de46e50 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed May 4 19:28:07 2005 +0000 - - 2005-05-04 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoOutputDev.cc: Fix matrix convention confusion. - - ChangeLog | 4 ++++ - poppler/CairoOutputDev.cc | 4 ++-- - 2 files changed, 6 insertions(+), 2 deletions(-) - -commit 28760927d724231d0137ca7ecc66c6c2250dff0d -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed May 4 19:11:11 2005 +0000 - - 2005-05-04 Kristian Høgsberg <krh@redhat.com> - - Patches from Albert Astals Cid: - - * qt/poppler-page.cc (getText): Use QString::fromUtf8() - instead of - implicit latin1 cast constructor. - - * qt/test-poppler-qt.cpp (main): Use a QLabel for showing text - instead of qDebug. - - ChangeLog | 10 ++++++++++ - qt/poppler-page.cc | 5 ++--- - qt/test-poppler-qt.cpp | 6 +++++- - 3 files changed, 17 insertions(+), 4 deletions(-) - -commit fd36522375bcf436639b8731acb3ad22c03c03f4 -Author: Jonathan Blandford <jrb@redhat.com> -Date: Wed May 4 06:32:38 2005 +0000 - - Wed May 4 02:31:05 2005 Jonathan Blandford <jrb@redhat.com> - - * glib/poppler-document.cc: - * glib/poppler-document.h: - * glib/poppler-enums.c: (poppler_permissions_get_type): - * glib/poppler-enums.h: - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/poppler.h: - - Register a bunch of boxed types to test introspection, and for - LBs. Also, remove unused 'popper_document_save()' (-: - - ChangeLog | 13 +++++++ - glib/poppler-document.cc | 48 +++++++++++++++----------- - glib/poppler-document.h | 18 +++++++++- - glib/poppler-enums.c | 19 ++++++++++ - glib/poppler-enums.h | 2 + - glib/poppler-page.cc | 83 - ++++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-page.h | 36 ++++++++++++++------ - glib/poppler.h | 12 ++++--- - 8 files changed, 193 insertions(+), 38 deletions(-) - -commit 132647f8311c07b1f95ee4fca185e9774aae4913 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon May 2 05:39:11 2005 +0000 - - 2005-05-01 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoFontEngine.cc: - * poppler/CairoFontEngine.h: - * poppler/CairoOutputDev.cc: Back out workaround for cairo - 0.4.0 - font API and port to new cairo head. - - ChangeLog | 7 ++++ - configure.ac | 4 +- - poppler/CairoFontEngine.cc | 67 - ++++++++++++++++------------------------ - poppler/CairoFontEngine.h | 12 +++---- - poppler/CairoOutputDev.cc | 39 ++++++++++++++--------- - poppler/CairoOutputDevImage.cc | 2 +- - 6 files changed, 66 insertions(+), 65 deletions(-) - -commit 595c18c038f8dcef73fe58612fc8b93f891e65a1 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Mon May 2 00:44:26 2005 +0000 - - 2005-05-01 Jeff Muizelaar <jeff@infidigm.net> - - * splash/SplashFTFont.cc (SplashFTFont::getGlyphPath): - Use FT_LOAD_NO_BITMAP to make sure we get outlines loaded instead - of bitmaps for use in FT_Outline_Decompose. - - Patch from Albert Astals Cid. - - ChangeLog | 8 ++++++++ - splash/SplashFTFont.cc | 2 +- - 2 files changed, 9 insertions(+), 1 deletions(-) - -commit 49d89ca0ed3986bec7468f6c0ed295e84ba67239 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun May 1 21:54:55 2005 +0000 - - 2005-05-01 Jeff Muizelaar <jeff@infidigm.net> - - * goo/gmem.c: (gmalloc), (grealloc), (gfree): - * goo/gmem.h: make memory functions use size_t instead of int. - - Patch from Takashi Iwai through Albert Astals Cid. - - ChangeLog | 7 +++++++ - goo/gmem.c | 10 +++++----- - goo/gmem.h | 4 ++-- - 3 files changed, 14 insertions(+), 7 deletions(-) - -commit 14d618bece894e4c6bed0f179a8fda4db5a67c9d -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Apr 30 19:53:57 2005 +0000 - - 2005-04-30 Jeff Muizelaar <jeff@infidigm.net> - - * qt/poppler-document.cc (Document::unlock) : - * qt/poppler-qt.h (Document::unlock): - Add const to the password argument. - - Patch from Albert Astals Cid. - - ChangeLog | 8 ++++++++ - qt/poppler-document.cc | 2 +- - qt/poppler-qt.h | 2 +- - 3 files changed, 10 insertions(+), 2 deletions(-) - -commit 1e66da32964cc76c6ed3773574f422b4608cb0e1 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Apr 30 17:31:47 2005 +0000 - - 2005-04-30 Jeff Muizelaar <jeff@infidigm.net> - - * fofi/FoFiType1.cc (FoFiType1::parse): - Don't assume Encoding array of Type1 fonts end in "foo def". - http://partners.adobe.com/public/developer/en/font/T1_SPEC.PDF - says - "This sequence of assignments must be followed by an instance - of the - token def or readonly; such a token may not occur within the - sequence - of assignments." so it must end with "readonly" "def" "readonly - def" - (That is what most fonts are using and this is why it was not - crashing) - - Patch from Albert Astals Cid. - - ChangeLog | 13 +++++++++++++ - fofi/FoFiType1.cc | 14 +++++++++++--- - 2 files changed, 24 insertions(+), 3 deletions(-) - -commit 0b532db77ef41937dd5be30d15c96557d81eceb2 -Author: Jonathan Blandford <jrb@redhat.com> -Date: Fri Apr 29 19:37:07 2005 +0000 - - Fri Apr 29 14:54:44 2005 Jonathan Blandford <jrb@redhat.com> - - * goo/GooTimer.h: New class to do simple timing checks. - - * glib/poppler-document.c: Patch from Martin Kretzschmar - to really - set the PDF version correct. Third time's the charm. - - ChangeLog | 7 +++++ - glib/poppler-document.cc | 4 ++- - goo/GooTimer.cc | 63 - ++++++++++++++++++++++++++++++++++++++++++++++ - goo/GooTimer.h | 40 +++++++++++++++++++++++++++++ - goo/Makefile.am | 2 + - 5 files changed, 115 insertions(+), 1 deletions(-) - -commit 38948ea6f9ef76dae9b8a7156fe1ef32a0457380 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Apr 29 03:57:16 2005 +0000 - - 2005-04-29 Kristian Høgsberg <krh@bitplanet.net> - - * configure.ac: Bump release to 0.3.1. - - * NEWS: Write up news for 0.3.1 release. - - ChangeLog | 6 ++++++ - NEWS | 6 ++++++ - configure.ac | 2 +- - 3 files changed, 13 insertions(+), 1 deletions(-) - -commit af65146c92682a3af06e9d3147426445c78309de -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Apr 28 23:03:06 2005 +0000 - - 2005-04-28 Kristian Høgsberg <krh@redhat.com> - - Patch from Martin Kretzschmar: - - * poppler/GlobalParams.cc: use UTF-8 as the default text - encoding. - Fixes Bug 2934. - - ChangeLog | 7 +++++++ - poppler/GlobalParams.cc | 2 +- - 2 files changed, 8 insertions(+), 1 deletions(-) - -commit c2db3e1b297a9dc0accd0d8a1366970d45705c8f -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Apr 27 20:56:18 2005 +0000 - - 2005-04-27 Jeff Muizelaar <jeff@infidigm.net> - - * configure.ac: - * poppler/FlateStream.cc: - * poppler/FlateStream.h: - * poppler/Makefile.am: - * poppler/Stream.cc: - * poppler/Stream.h: Add a reimplementation of FlateStream using - zlib. - - ChangeLog | 10 ++++ - configure.ac | 29 +++++++++++++ - poppler/FlateStream.cc | 107 - ++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/FlateStream.h | 68 ++++++++++++++++++++++++++++++ - poppler/Makefile.am | 17 +++++++- - poppler/Stream.cc | 6 +++ - poppler/Stream.h | 2 + - 7 files changed, 237 insertions(+), 2 deletions(-) - -commit bc0afe524c2b87af191d83fc9e9bcdc8a6ce4042 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Apr 27 18:53:20 2005 +0000 - - 2005-04-27 Kristian Høgsberg <krh@redhat.com> - - * poppler/Catalog.cc (NameTree::lookup): Fix bsearch return - value - NULL check. Found by Albert Astals Cid. - - ChangeLog | 5 +++++ - poppler/Catalog.cc | 8 ++++---- - 2 files changed, 9 insertions(+), 4 deletions(-) - -commit 3c37dc350d54e5a1035aecfba5bfa394f931cf51 -Author: Jonathan Blandford <jrb@redhat.com> -Date: Tue Apr 26 17:17:05 2005 +0000 - - Tue Apr 26 13:13:42 2005 Jonathan Blandford <jrb@redhat.com> - - * glib/test-poppler-glib.c (main): add a quick dump-to-text - test. - - ChangeLog | 4 ++++ - glib/test-poppler-glib.c | 20 ++++++++++++++++++++ - 2 files changed, 24 insertions(+), 0 deletions(-) - -commit 44b800d520f90ffd143255d2c23835ea357c195b -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Apr 25 18:04:32 2005 +0000 - - Actually commit the qt/Makefile.am change advertised in the ChangeLog. - - qt/Makefile.am | 5 +++-- - 1 files changed, 3 insertions(+), 2 deletions(-) - -commit 437bec03dd2ab3cdf6215f9ad443b7f21ce84e18 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sun Apr 24 19:56:17 2005 +0000 - - 2005-04-24 Kristian Høgsberg <krh@redhat.com> - - * qt/Makefile.am (libpoppler_qt_la_SOURCES): Add - poppler-private.h - to SOURCES. - - ChangeLog | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 9b2b1244ed5f30a99120aaee49c72f7cb6a4f556 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sat Apr 23 20:16:02 2005 +0000 - - 2005-04-23 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoFontEngine.cc: Use the right fileName for - loading - CID fonts (#3114). - - ChangeLog | 5 +++++ - poppler/CairoFontEngine.cc | 11 +++++++++-- - 2 files changed, 14 insertions(+), 2 deletions(-) - -commit e4516d728a4d1bc85831d5d00b6d6b8d49c79308 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sat Apr 23 00:09:05 2005 +0000 - - 2005-04-22 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: Actually commit version number bump. - - ChangeLog | 4 ++++ - NEWS | 2 +- - configure.ac | 2 +- - 3 files changed, 6 insertions(+), 2 deletions(-) - -commit c20448cb26fa1c309d726f272ddf1227f5a0e6ea -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Apr 22 17:29:49 2005 +0000 - - 2005-04-22 Martin Kretzschmar <martink@gnome.org> - - * poppler/CairoFontEngine.cc: declare matrix variable - before the - first goto. Fixes build with gcc 3.3. - - ChangeLog | 5 +++++ - poppler/CairoFontEngine.cc | 3 ++- - 2 files changed, 7 insertions(+), 1 deletions(-) - -commit 42ecccf9b454893797e3d62f0f1c0a3276689e51 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Apr 22 04:09:23 2005 +0000 - - Fri Apr 22 00:01:40 2005 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoFontEngine.cc: Hack around semi-broken - cairo-0.4.0 - font API to fix the problem where some glyphs would show up - at the - wrong sizes. We now create an FT_Face for each size and font - combination we encounter, since an FT_Face can't be shared - between - several cairo_font_t. - - ChangeLog | 8 ++++ - poppler/CairoFontEngine.cc | 79 - +++++++++++++++++++------------------------ - poppler/CairoFontEngine.h | 23 +++++-------- - poppler/CairoOutputDev.cc | 18 +++++----- - 4 files changed, 61 insertions(+), 67 deletions(-) - -commit 7a703616d9497eba4d7d318da9918dae9cbe8f12 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Apr 21 19:50:45 2005 +0000 - - Thu Apr 21 15:43:52 2005 Kristian Høgsberg <krh@redhat.com> - - * poppler/Outline.cc: - * poppler/Outline.h: Implement the documented behaviour for - Outline::getItems() and OutlineItem::getKids() and make - documentation more precise (Patch from Marco). - - ChangeLog | 7 +++++++ - poppler/Outline.cc | 6 ++++++ - poppler/Outline.h | 7 ++++--- - 3 files changed, 17 insertions(+), 3 deletions(-) - -commit 5c89902c5ee2cf13536225c141768b29505815ce -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Apr 21 06:35:33 2005 +0000 - - Thu Apr 21 02:25:20 2005 Kristian Høgsberg <krh@redhat.com> - - * poppler/CairoFontEngine.cc (CairoFont::getFont): Cache - cairo_font_t's for a given CairoFont. With this patch - cairo will - recognize glyphs coming from the same font as such and - the glyph - cache will actually work. - - * glib/poppler-document.cc (poppler_document_new_from_file): - Add - output device (cairo or splash) to PopplerDocument and - initialize - it in the constructor. - - * glib/poppler-page.cc (splash_render_to_pixbuf, - cairo_render_to_pixbuf): Use output device from associated - poppler - document instead of creating a new one. - - * poppler-glib.pc.in (Requires): Add Requires: field. - - * poppler/Page.cc (loadThumb): Remove unecessary and buggy - call to - Stream::addFilters(), reported by Ryan Lortie (#3046). - - ChangeLog | 7 +++++- - NEWS | 12 ++-------- - poppler/CairoFontEngine.cc | 45 - ++++++++++++++++++++++++++++++++++++++----- - poppler/CairoFontEngine.h | 9 +++++++- - poppler/CairoOutputDev.cc | 9 +------- - 5 files changed, 57 insertions(+), 25 deletions(-) - -commit 71c1563bb0462154cb7caa4356d8f8d049073ac4 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Apr 21 05:20:24 2005 +0000 - - Thu Apr 21 00:15:30 2005 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-document.cc (poppler_document_new_from_file): - Add - output device (cairo or splash) to PopplerDocument and - initialize - it in the constructor. - - * glib/poppler-page.cc (splash_render_to_pixbuf, - cairo_render_to_pixbuf): Use output device from associated - poppler - document instead of creating a new one. - - * poppler-glib.pc.in (Requires): Add Requires: field. - - * poppler/Page.cc (loadThumb): Remove unecessary and buggy - call to - Stream::addFilters(), reported by Ryan Lortie (#3046). - - ChangeLog | 15 +++++++++++++++ - NEWS | 15 +++++++++++++++ - glib/poppler-document.cc | 10 ++++++++++ - glib/poppler-page.cc | 22 ++-------------------- - glib/poppler-private.h | 13 +++++++++++++ - poppler-glib.pc.in | 1 + - poppler/CairoFontEngine.cc | 2 +- - poppler/Page.cc | 2 -- - 8 files changed, 57 insertions(+), 23 deletions(-) - -commit c6328cbc6cea05890b52a8302f8deba443959c03 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Apr 20 22:48:52 2005 +0000 - - 2005-04-13 Jeff Muizelaar <jrmuizel@nit.ca> - - * qt/poppler-page.cc (Page::getText): - * qt/poppler-qt.h: add a getText method for getting - the text on a page - - * qt/test-poppler-qt.c (PDFDisplay::PDFDisplay): - add the option to display the text on a page - - Patch from Albert Astals Cid. - - ChangeLog | 11 +++++++++++ - qt/poppler-page.cc | 37 +++++++++++++++++++++++++++++++++++++ - qt/poppler-qt.h | 20 ++++++++++++++++++++ - qt/test-poppler-qt.cpp | 40 ++++++++++++++++++++++++++++++---------- - 4 files changed, 98 insertions(+), 10 deletions(-) - -commit 86a32b65100a5baedd18ce0135703289839a317c -Author: Jonathan Blandford <jrb@redhat.com> -Date: Tue Apr 19 21:22:26 2005 +0000 - - Tue Apr 19 17:21:19 2005 Jonathan Blandford <jrb@redhat.com> - - * glib/poppler-document.cc (poppler_document_get_property): - Use - %.2g instead. - - ChangeLog | 5 +++++ - glib/poppler-document.cc | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit 4e81624dcc2d5218f2f8bb4eaa992e724014a853 -Author: Jonathan Blandford <jrb@redhat.com> -Date: Tue Apr 19 21:13:22 2005 +0000 - - Tue Apr 19 17:11:52 2005 Jonathan Blandford <jrb@redhat.com> - - * glib/poppler-document.cc (poppler_document_get_property): - Use %g - instead of %f to avoid versioning like PDF-1.50000 - - ChangeLog | 5 +++++ - glib/poppler-document.cc | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit 6ef9d30f06be2bd8a9e1470d70f49843a7e432ac -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Apr 19 19:48:49 2005 +0000 - - Tue Apr 19 15:43:35 2005 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-action.cc (_poppler_action_new): Handle - NULL links - gracefully (fix from Jeff). - - ChangeLog | 5 +++++ - glib/poppler-action.cc | 7 ++++++- - 2 files changed, 11 insertions(+), 1 deletions(-) - -commit 770b7310ce8b07f95960c2014bf3f6040c060ac4 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Apr 19 04:28:15 2005 +0000 - - Tue Apr 19 00:20:08 2005 Kristian Høgsberg <krh@redhat.com> - - * poppler/Catalog.cc: Fix from Marco to make sure we always - initialize Catalog::pageLabelInfo. - - ChangeLog | 5 +++++ - poppler/Catalog.cc | 3 +-- - 2 files changed, 6 insertions(+), 2 deletions(-) - -commit 49c10d9f2c4e0cef031f96929e38a14d7ce5af19 -Author: Jonathan Blandford <jrb@redhat.com> -Date: Sat Apr 16 18:57:43 2005 +0000 - - Sat Apr 16 14:53:15 2005 Jonathan Blandford <jrb@redhat.com> - - * glib/Makefile.am: Create poppler-enums.[ch] - - * glib/poppler.h: - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/poppler-action.h: Try to clean up the headers a bit - - * glib/poppler-document.cc: - * glib/poppler-document.h: Add support for document data. - Implemented as a lot of GObject properties. - - * glib/poppler-enums.c: - * glib/poppler-enums.h: New autogenerated files. - - * glib/test-poppler-glib.c: Test the new document metadata. - Seems - to work nicely, other than the PDF string and View Prefs. - - * poppler/Catalog.cc: - * poppler/Catalog.h: Extend to support PageLayout. - - ChangeLog | 22 +++++ - glib/Makefile.am | 32 +++++++- - glib/poppler-action.h | 15 ++-- - glib/poppler-document.cc | 196 - +++++++++++++++++++++++++++++++++++++++++----- - glib/poppler-document.h | 43 +++++++++-- - glib/poppler-enums.c | 144 ++++++++++++++++++++++++++++++++++ - glib/poppler-enums.h | 32 ++++++++ - glib/poppler-page.cc | 3 - - glib/poppler-page.h | 1 + - glib/poppler.h | 7 ++ - glib/test-poppler-glib.c | 48 ++++++++++- - poppler/Catalog.cc | 17 ++++ - poppler/Catalog.h | 11 +++ - 13 files changed, 529 insertions(+), 42 deletions(-) - -commit f35c76cd3528f1e1de594e85e734ca23624b3a62 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Apr 15 02:25:10 2005 +0000 - - 2005-04-14 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/poppler-private.h: - * glib/poppler.h: Patch from Marco Pesenti Gritti to set page - orientaton. - - ChangeLog | 8 ++++ - glib/poppler-page.cc | 109 - ++++++++++++++++++++++++++++++++++++++++++++---- - glib/poppler-page.h | 45 ++++++++++---------- - glib/poppler-private.h | 1 + - glib/poppler.h | 9 ++++ - 5 files changed, 142 insertions(+), 30 deletions(-) - -commit 538408a8845e167cc2d796ac8b8129d0a2e6a894 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Thu Apr 14 01:34:38 2005 +0000 - - 2005-04-13 Jeff Muizelaar <jrmuizel@nit.ca> - - * poppler/CairoOutputDevImage.cc (getBitmap): remove unused - SplashBitmap. Patch from Albert Astals Cid. - - ChangeLog | 5 +++++ - poppler/CairoOutputDevImage.cc | 2 -- - 2 files changed, 5 insertions(+), 2 deletions(-) - -commit 2903530492c24f3c7cb3bf3b993500694aaa27a8 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Apr 12 15:37:39 2005 +0000 - - 2005-04-12 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: Add fontconfig to PKG_CHECK_MODULES for - the cairo - backend too, since we shouldn't depend on cairo.pc to pull - that in - for us. - - * poppler/Makefile.am (INCLUDES): Add $(splash_includes) to - INCLUDES to make sure the fontconfig include path is - added when - using the splash backend. - - ChangeLog | 10 ++++++++++ - configure.ac | 4 ++-- - poppler/Makefile.am | 1 + - 3 files changed, 13 insertions(+), 2 deletions(-) - -commit 0f7dd9a0512ff97293ee3f8a762b0049393b3cc1 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Apr 9 18:14:39 2005 +0000 - - 2005-04-09 Jeff Muizelaar <jrmuizel@nit.ca> - - * poppler-qt.h: - * poppler-document.cc (okToPrint, okToChange, okToCopy): - Patch from Albert Astals Cid adding more metadata exports - - ChangeLog | 6 ++++++ - qt/poppler-document.cc | 20 ++++++++++++++++++++ - qt/poppler-qt.h | 4 ++++ - 3 files changed, 30 insertions(+), 0 deletions(-) - -commit dee72b531dab83a29c7675ae06ffe376e4498a4e -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Apr 8 21:09:27 2005 +0000 - - 2005-04-08 Kristian Høgsberg <krh@redhat.com> - - * poppler-qt.pc.in (Libs): Add -lpoppler to Libs. - - ChangeLog | 4 ++++ - poppler-qt.pc.in | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -commit df59ce3b1d5ca8cd46aaf5f189bc78953e21e1a9 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Fri Apr 8 03:30:33 2005 +0000 - - 2005-04-07 Jeff Muizelaar <jrmuizel@nit.ca> - - * configure.ac: redo the qt tests from Albert Astals Cid - - ChangeLog | 4 +++ - configure.ac | 78 - +++++++++++++++++++++++++++++++++++----------------------- - 2 files changed, 51 insertions(+), 31 deletions(-) - -commit 3f9dde10e4778255c468895942e45d1a2637af3a -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Fri Apr 8 03:11:00 2005 +0000 - - 2005-04-07 Jeff Muizelaar <jrmuizel@nit.ca> - - * qt/poppler-document.cc: - * qt/poppler-page.cc: - * qt/poppler-qt.h: - Patch from Albert Astals Cid adding consts and exporting some more - metadata. - - ChangeLog | 8 ++++++++ - qt/poppler-document.cc | 21 ++++++++++++++++++--- - qt/poppler-page.cc | 6 +++--- - qt/poppler-qt.h | 15 +++++++++------ - 4 files changed, 38 insertions(+), 12 deletions(-) - -commit e79a8b946e0d04b32da0b4ceea1649efd203cb07 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Apr 7 22:01:51 2005 +0000 - - 2005-04-07 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-document.cc: - * glib/poppler-document.h: - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/poppler-private.h: Print to PS support from Marco - Pesenti - Gritti. - - ChangeLog | 9 +++++++++ - glib/poppler-document.cc | 45 - +++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-document.h | 8 ++++++-- - glib/poppler-page.cc | 19 +++++++++++++++++++ - glib/poppler-page.h | 40 +++++++++++++++++++++------------------- - glib/poppler-private.h | 7 +++++++ - 6 files changed, 107 insertions(+), 21 deletions(-) - -commit 7319b66eb64e735ae8b811306eb76755f088385b -Author: Jonathan Blandford <jrb@redhat.com> -Date: Thu Apr 7 16:26:15 2005 +0000 - - Thu Apr 7 12:25:39 2005 Jonathan Blandford <jrb@redhat.com> - - * configure.ac: check for qt, not glib, when enabling the qt - subdir - - ChangeLog | 5 +++++ - configure.ac | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit e258ed0cb42d524ee39451f680ad4c067e7721da -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Apr 6 20:49:19 2005 +0000 - - 2005-04-06 Jeff Muizelaar <jrmuizel@nit.ca> - - * .cvsignore, glib/.cvsignore, qt/.cvsignore: - Add more things to .cvsignore. - Patch from Martin Kretzschmar. - - .cvsignore | 2 ++ - ChangeLog | 6 ++++++ - glib/.cvsignore | 7 +++++++ - qt/.cvsignore | 7 +++++++ - 4 files changed, 22 insertions(+), 0 deletions(-) - -commit 2a5624a81aa84677a57e098d7d4045f44e3b6f3a -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Apr 6 20:35:03 2005 +0000 - - 2005-04-06 Jeff Muizelaar <jrmuizel@nit.ca> - - * poppler-page.cc (Page::Page, Page::~Page): - Construct and deconstruct the PageData object. - Patch from Albert Astals Cid. - - ChangeLog | 6 ++++++ - qt/poppler-page.cc | 6 ++++++ - qt/poppler-qt.h | 1 + - 3 files changed, 13 insertions(+), 0 deletions(-) - -commit f983e3d317660653f2bfc56f9b06e2cec675beca -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Apr 6 14:39:40 2005 +0000 - - 2005-04-06 Jeff Muizelaar <jrmuizel@nit.ca> - - * Makefile.am, configure.ac: Add configuration for qt wrapper. - - * poppler-qt.pc.in: - * qt/Makefile.am: - * qt/poppler-document.cc: - * qt/poppler-page.cc: - * qt/poppler-private.h: - * qt/poppler-qt.h: - * qt/test-poppler-qt.cpp: - New files. - - ChangeLog | 13 +++ - Makefile.am | 13 ++- - configure.ac | 64 +++++++++++++- - poppler-qt.pc.in | 11 +++ - qt/Makefile.am | 32 +++++++ - qt/poppler-document.cc | 232 - ++++++++++++++++++++++++++++++++++++++++++++++++ - qt/poppler-page.cc | 66 ++++++++++++++ - qt/poppler-private.h | 32 +++++++ - qt/poppler-qt.h | 75 ++++++++++++++++ - qt/test-poppler-qt.cpp | 63 +++++++++++++ - 10 files changed, 597 insertions(+), 4 deletions(-) - -commit d91dd69a7a0dd581c26728d2640e4d36a7ffe75f -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Apr 5 17:46:44 2005 +0000 - - 2005-04-05 Kristian Høgsberg <krh@redhat.com> - - * NEWS: Attempt to sum up changes since 0.1.2. - - * configure.ac: Bump release to 0.2.0, add AC_DEFINEs - for cairo - and splash availability. - - * poppler/CairoFontEngine.cc: Disable hinting. - - * glib/poppler-page.cc (poppler_page_render_to_pixbuf): Choose - either splash or cairo rendering, based on configure choice. - (cairo_render_to_pixbuf): New function to render using - the cairo - backend. - (splash_render_to_pixbuf): Split out the splash code to this - function. - - ChangeLog | 16 ++++ - NEWS | 6 +- - configure.ac | 16 +++- - glib/Makefile.am | 17 ++++- - glib/poppler-page.cc | 152 - ++++++++++++++++++++++++++++++++-------- - poppler/CairoFontEngine.cc | 2 +- - poppler/CairoOutputDevImage.cc | 20 ++---- - poppler/CairoOutputDevImage.h | 3 +- - 8 files changed, 179 insertions(+), 53 deletions(-) - -commit b62b0cec2335d987b31fbb0043cb33db29cc6a13 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Apr 5 02:56:32 2005 +0000 - - 2005-04-04 Kristian Høgsberg <krh@redhat.com> - - * ChangeLog: Add this entry to test commit mailer script. - - ChangeLog | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 50b494266ce197fe88468ca2917b9910d77e5f98 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Apr 5 02:49:18 2005 +0000 - - 2005-04-04 Kristian Høgsberg <krh@redhat.com> - - * TODO: Add reminder about using PDF font descriptors with - fontconfig. - - ChangeLog | 3 +++ - TODO | 2 ++ - 2 files changed, 5 insertions(+), 0 deletions(-) - -commit d3d12235bf4de48363571b3d992ea3bfc29e6529 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Apr 4 21:50:56 2005 +0000 - - 2005-04-04 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: Add checks for mkstemp() and mkstemps(). - - * glib/poppler-page.cc (poppler_page_find_text): Reverse - y-coordinates so we return PDF style coordinates. - - From Maro Pesenti Gritti <mpgritti@gmail.com>: - - * configure.ac, poppler/Makefile.am: Check for fontconfig when - we're building the splash backend. - - * glib/poppler-page.cc (poppler_page_get_text): New - function to - select text on page. - - ChangeLog | 15 +++++++++++++++ - configure.ac | 5 ++++- - glib/poppler-page.cc | 48 - +++++++++++++++++++++++++++++++++++++++++++++--- - glib/poppler-page.h | 3 +++ - poppler/Makefile.am | 4 ++++ - 5 files changed, 71 insertions(+), 4 deletions(-) - -commit 2cb9d70678e33504246cbfbe0525c33f5e3b7736 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Apr 4 05:56:29 2005 +0000 - - 2005-04-04 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc (poppler_page_find_text): Reverse - list of - matches so we get them in the right order. - - ChangeLog | 5 +++++ - glib/poppler-page.cc | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit 8c2a5ffb73c0f2d84adebcfbd43f8347ae8c8bbc -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sun Apr 3 18:17:55 2005 +0000 - - 2005-04-03 Martin Kretzschmar <martink@gnome.org> - - * poppler/DCTStream.h: Wrap #include <jpeglib.h> in extern "C" - Fixes build with unpatched libjpeg. - - ChangeLog | 5 +++++ - poppler/DCTStream.h | 2 ++ - 2 files changed, 7 insertions(+), 0 deletions(-) - -commit 1879d82d9088aa36ef5e677f4bae44c84f90caa6 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Sat Apr 2 22:16:38 2005 +0000 - - 2005-04-02 Jeff Muizelaar <jrmuizel@nit.ca> - - * poppler/Page.h: - * poppler/Page.cc (Page::Page): - Some initial infrastructure for supporting transitions. - - ChangeLog | 6 ++++++ - poppler/Page.cc | 10 ++++++++++ - poppler/Page.h | 4 ++++ - 3 files changed, 20 insertions(+), 0 deletions(-) - -commit fa4efbed51e12811070798a7cfb6b1f9e8d57abc -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Apr 1 00:32:34 2005 +0000 - - 2005-03-31 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc (poppler_page_render_to_pixbuf): Clip - output to destination pixbuf and fix RGB order. - - ChangeLog | 5 +++++ - glib/poppler-page.cc | 38 +++++++++++++++++++++++--------------- - 2 files changed, 28 insertions(+), 15 deletions(-) - -commit bb508ded0b8c5806a9db1ec73e57b14268896911 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Mar 31 22:45:05 2005 +0000 - - 2005-03-31 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc (poppler_page_find_text): New - function to - seach a page for occurrences of a given text string. - - * glib/poppler-page.cc: Add g_return_if_fail() checks to - a couple - of functions. - - ChangeLog | 8 ++++ - glib/poppler-page.cc | 82 - ++++++++++++++++++++++++++++++++++++++++------ - glib/poppler-page.h | 18 +++++++--- - glib/test-poppler-glib.c | 19 +++++++++-- - 4 files changed, 109 insertions(+), 18 deletions(-) - -commit 0b4d481e9c79cb18cf41b503970801bbf4b95b3c -Author: Jonathan Blandford <jrb@redhat.com> -Date: Thu Mar 31 05:29:42 2005 +0000 - - Thu Mar 31 00:26:20 2005 Jonathan Blandford <jrb@redhat.com> - - * glib/poppler-page.cc: - * glib/poppler-page.h (poppler_page_get_link_mapping, - poppler_page_free_link_mapping): New functions to get a - mapping of - links to locations on the current document. - :s - - ChangeLog | 7 ++++ - glib/poppler-page.cc | 85 - +++++++++++++++++++++++++++++++++++++++++++++++--- - glib/poppler-page.h | 15 +++++++++ - 3 files changed, 102 insertions(+), 5 deletions(-) - -commit c4e18f5a454794bd5e226f1106a54ccf807c6c3d -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Thu Mar 31 02:28:46 2005 +0000 - - 2005-03-30 Jeff Muizelaar <jrmuizel@nit.ca> - - * poppler/DCTStream.h: change x to unsigned int to eliminate - comparision warning - - ChangeLog | 5 +++++ - poppler/DCTStream.h | 2 +- - 2 files changed, 6 insertions(+), 1 deletions(-) - -commit e6a2a588305b4797af901599eb6854028f2be476 -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Mar 30 18:43:44 2005 +0000 - - 2005-03-30 Jeff Muizelaar <jrmuizel@nit.ca> - - * poppler/Catalog.cc: delete pageLabelInfo on deconstruction - - ChangeLog | 4 ++++ - poppler/Catalog.cc | 1 + - 2 files changed, 5 insertions(+), 0 deletions(-) - -commit a52905c0f0bf4d10d2103b80924a4de204d03836 -Author: Jonathan Blandford <jrb@redhat.com> -Date: Wed Mar 30 04:08:26 2005 +0000 - - add this - - glib/poppler-action.cc | 285 - ++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 285 insertions(+), 0 deletions(-) - -commit 9542860a74076020b5727d4b761c08cdab42d69e -Author: Jonathan Blandford <jrb@redhat.com> -Date: Wed Mar 30 04:07:57 2005 +0000 - - add these - - glib/poppler-action.h | 157 - +++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 157 insertions(+), 0 deletions(-) - -commit 07720f98eca8736695f7d0d8e98465d301e6b7cf -Author: Jonathan Blandford <jrb@redhat.com> -Date: Wed Mar 30 04:07:39 2005 +0000 - - Tue Mar 29 23:07:17 2005 Jonathan Blandford <jrb@redhat.com> - - * glib/poppler-page.h: Reformat. - - ChangeLog | 4 ++++ - glib/poppler-page.h | 34 +++++++++++++++++----------------- - 2 files changed, 21 insertions(+), 17 deletions(-) - -commit 3437b9e122aa05f4ede24664ee5a9b2d423ef9c4 -Author: Jonathan Blandford <jrb@redhat.com> -Date: Wed Mar 30 04:04:53 2005 +0000 - - Tue Mar 29 22:49:15 2005 Jonathan Blandford <jrb@redhat.com> - - * glib/poppler-action.[ch]: New item to encapsulate links. - * glib/poppler-document.[ch] (poppler_index_iter_get_action): - New - function to get the action. Also, fix some warnings. - * glib/poppler-private.h (_poppler_action_new): New function. - * glib/test-poppler-glib.c: Fix warnings. - - ChangeLog | 8 ++++++ - glib/Makefile.am | 2 + - glib/poppler-document.cc | 57 - ++++++++++----------------------------------- - glib/poppler-document.h | 7 +---- - glib/poppler-private.h | 12 ++++++++- - glib/poppler.h | 1 + - glib/test-poppler-glib.c | 4 ++- - 7 files changed, 39 insertions(+), 52 deletions(-) - -commit cab0ec4d011c34b571050a446c6e3286cc8749c8 -Author: Jonathan Blandford <jrb@redhat.com> -Date: Tue Mar 29 18:49:26 2005 +0000 - - Tue Mar 29 02:36:00 2005 Jonathan Blandford <jrb@redhat.com> - - * glib/poppler-document.[ch] (PopplerIndexIter): Add an - iter to - extract the index from the doc. Includes a bad hack, for now. - - Mon Mar 28 22:02:07 2005 Jonathan Blandford <jrb@redhat.com> - - * glib/poppler-page.cc: - * glib/poppler-page.h (poppler_page_get_thumbnail_size): New - function. - * poppler-glib.pc.in: add -lpoppler-glib to the libs line. - - ChangeLog | 12 ++++ - glib/poppler-document.cc | 160 - +++++++++++++++++++++++++++++++++++++++++++++- - glib/poppler-document.h | 15 ++++ - glib/poppler-page.cc | 48 ++++++++++++++- - glib/poppler-page.h | 3 + - poppler-glib.pc.in | 2 +- - 6 files changed, 236 insertions(+), 4 deletions(-) - -commit 2de98f3871bc4ea3e361ca4fe37f5b6561918c77 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Mar 28 07:49:54 2005 +0000 - - 2005-03-28 Kristian Høgsberg <krh@redhat.com> - - * poppler/Page.cc (loadThumb): Backend agnostic method for - extracting an embedded thumbnail iamge. - - * poppler/Dict.cc (lookupInt): New convenience method. - - * glib/poppler-page.cc (poppler_page_get_thumbnail): New glib - function for getting the embedded thumbnail image for a page. - - ChangeLog | 10 ++++ - glib/poppler-page.cc | 23 ++++++++++ - glib/poppler-page.h | 32 ++++++------- - glib/test-poppler-glib.c | 24 +++++++--- - poppler/Dict.cc | 20 ++++++++ - poppler/Dict.h | 1 + - poppler/Page.cc | 109 - ++++++++++++++++++++++++++++++++++++++++++++++ - poppler/Page.h | 1 + - 8 files changed, 196 insertions(+), 24 deletions(-) - -commit 591055d1fbcd0b9c2bb11f14040568051c5976d1 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sat Mar 26 00:34:21 2005 +0000 - - 2005-03-25 Kristian Høgsberg <krh@redhat.com> - - * glib/Makefile.am (libpoppler_glib_la_SOURCES): Add - - * configure.ac: Check for fontconfig for glib bindings. - - ChangeLog | 4 ++++ - configure.ac | 4 ++-- - glib/Makefile.am | 7 +++++-- - 3 files changed, 11 insertions(+), 4 deletions(-) - -commit 1e30abe94a96b91df05716ea079c58782d767951 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Mar 24 22:24:41 2005 +0000 - - 2005-03-24 Kristian Høgsberg <krh@redhat.com> - - * glib/Makefile.am: Use POPPLER_GLIB_CFLAGS and - POPPLER_GLIB_LIBS - instead of GTK_TEST_*. Reported by Adam Jackson - <ajax@nwnk.net>. - - ChangeLog | 5 +++++ - glib/Makefile.am | 7 +++---- - 2 files changed, 8 insertions(+), 4 deletions(-) - -commit 1d9fcaa34222b2ccd53280148561917dbb8d95d9 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Mar 23 05:53:08 2005 +0000 - - File Edit Options Buffers Tools Help - 2005-03-23 Kristian Høgsberg <krh@redhat.com> - - * poppler/Catalog.cc (indexToLabel, labelToIndex): Add - stricter - checking of incoming labels and indices. - - * glib/test-poppler-glib.c (main): Change test program to - take the - page label from the command line. - - ChangeLog | 6 ++++++ - glib/test-poppler-glib.c | 5 ++++- - poppler/Catalog.cc | 31 +++++++++++++++++++++++++++++-- - 3 files changed, 39 insertions(+), 3 deletions(-) - -commit a9bbb465a0ee6ab320f76d322a3f575327ad1148 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Mar 23 05:38:34 2005 +0000 - - 2005-03-23 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-page.cc: - * glib/poppler-page.h: Add poppler_page_get_index() and rename - popper_page_get_dimension() to popper_page_get_size() - - ChangeLog | 6 ++++++ - glib/poppler-page.cc | 12 +++++++++--- - glib/poppler-page.h | 32 +++++++++++++++++--------------- - glib/test-poppler-glib.c | 5 ++--- - 4 files changed, 34 insertions(+), 21 deletions(-) - -commit 178bff27d09d1e18d1fc00c975fa235b0e9f93d3 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Mar 23 04:14:28 2005 +0000 - - 2005-03-22 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-document.cc: Implement poppler_document_save(). - - * glib/poppler-document.h: Add prototype and format headers - properly. - - ChangeLog | 7 +++++++ - glib/poppler-document.cc | 20 ++++++++++++++++++++ - glib/poppler-document.h | 30 +++++++++++++----------------- - 3 files changed, 40 insertions(+), 17 deletions(-) - -commit e40c6f69c9466df4cc70840b959f72cb0809c777 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Mar 23 01:30:04 2005 +0000 - - 2005-03-22 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: Fix --disable-popper typo reported by Albert. - Require exactly cairo 0.4 since CVS cairo has API changes. - - ChangeLog | 5 +++++ - configure.ac | 6 +++--- - 2 files changed, 8 insertions(+), 3 deletions(-) - -commit 2a1e4f6f6dd87dc59b3579175a87215fd7350ee0 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Mar 22 22:46:37 2005 +0000 - - 2005-03-22 Kristian Høgsberg <krh@redhat.com> - - * poppler/Array.cc: - * poppler/Array.h: Add getString() convenience method. - - * poppler/Catalog.cc: - * poppler/Catalog.h: Optimize lookup of named destinations. - - ChangeLog | 8 +++ - poppler/Array.cc | 15 ++++++ - poppler/Array.h | 1 + - poppler/Catalog.cc | 142 - +++++++++++++++++++++++++++++++++------------------- - poppler/Catalog.h | 32 +++++++++++- - 5 files changed, 146 insertions(+), 52 deletions(-) - -commit 4dfe0ce4a1ca09d632943f0f6315e31135957ada -Author: Kristian Høgsberg <krh@redhat.com> -Date: Tue Mar 22 01:50:05 2005 +0000 - - 2005-03-21 Kristian Høgsberg <krh@redhat.com> - - * NEWS, TODO: Update these. - - ChangeLog | 4 ++++ - NEWS | 1 + - TODO | 29 ++++++++++++++++++++--------- - 3 files changed, 25 insertions(+), 9 deletions(-) - -commit c158de90a5a8c6514d8aa22efa0b891a1801e822 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Mar 21 07:53:19 2005 +0000 - - 2005-03-21 Kristian Høgsberg <krh@redhat.com> - - From Albert Astals Cid <tsdgeos@yahoo.es>: - - * poppler/Catalog.cc, poppler/Catalog.h: Parse PageMode - setting - from the Catalog dict and expose it through getPageMode() - method. - - ChangeLog | 10 ++++++++-- - poppler/Catalog.cc | 16 ++++++++++++++++ - poppler/Catalog.h | 12 ++++++++++++ - 3 files changed, 36 insertions(+), 2 deletions(-) - -commit 9887679ca195714d71cbedde9297e9dcea04eb13 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Mon Mar 21 07:36:11 2005 +0000 - - 2005-03-21 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-document.cc: - - * glib/poppler-document.h: Expose the documenttitle as - a GObject - property. - - * glib/poppler-page.cc: Expose the page label as a GObject - property. - - * glib/poppler-private.h: Add the page index to PopplerPage. - - * glib/test-poppler-glib.c: Print out page label and document - title. - - * poppler/Catalog.cc: - * poppler/Catalog.h: Add page label accessors. - - * poppler/PageLabelInfo.cc: - * poppler/PageLabelInfo.h: New files. - - * poppler/Makefile.am: Add new files to sources. - - ChangeLog | 23 +++ - glib/poppler-document.cc | 95 ++++++++++++- - glib/poppler-document.h | 3 + - glib/poppler-page.cc | 37 +++++- - glib/poppler-private.h | 3 +- - glib/test-poppler-glib.c | 13 ++- - poppler/Catalog.cc | 15 ++ - poppler/Catalog.h | 6 + - poppler/Makefile.am | 4 +- - poppler/PageLabelInfo.cc | 346 - ++++++++++++++++++++++++++++++++++++++++++++++ - poppler/PageLabelInfo.h | 37 +++++ - 11 files changed, 573 insertions(+), 9 deletions(-) - -commit 2cfe917de909254bc3a114a6add68a14b5885fd0 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sun Mar 20 05:44:06 2005 +0000 - - 2005-03-20 Kristian Høgsberg <krh@redhat.com> - - * glib/poppler-document.cc: - * glib/poppler-page.h: - * glib/poppler.cc: - * poppler/Array.cc: - * poppler/Array.h: - * poppler/Catalog.cc: Fix up filenames in #include statements - and - comments. - - ChangeLog | 10 ++++++++++ - glib/poppler-document.cc | 2 +- - glib/poppler-document.h | 2 +- - glib/poppler-page.cc | 2 +- - glib/poppler-page.h | 2 +- - glib/poppler.cc | 2 +- - glib/poppler.h | 2 +- - 7 files changed, 16 insertions(+), 6 deletions(-) - -commit f9b6017cfaf8f814ae2fc027927477c29f24af71 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sun Mar 20 00:35:21 2005 +0000 - - 2005-03-19 Kristian Høgsberg <krh@redhat.com> - - Land the first bits of the glib wrapper. - - * Makefile.am: - * configure.ac: Add new glib subdirectory and configure - options - for glib wrapper. - - * glib/Makefile.am: - * glib/poppler-document.cc: - * glib/poppler-document.h: - * glib/poppler-page.cc: - * glib/poppler-page.h: - * glib/poppler-private.h: - * glib/poppler.cc: - * glib/poppler.h: - * glib/test-poppler-glib.c: - * poppler-glib.pc.in: New files. - - ChangeLog | 19 +++++ - Makefile.am | 27 ++++---- - NEWS | 4 + - configure.ac | 25 ++++++- - glib/Makefile.am | 33 +++++++++ - glib/poppler-document.cc | 165 - ++++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-document.h | 52 ++++++++++++++ - glib/poppler-page.cc | 158 - ++++++++++++++++++++++++++++++++++++++++++++ - glib/poppler-page.h | 50 ++++++++++++++ - glib/poppler-private.h | 20 ++++++ - glib/poppler.cc | 29 ++++++++ - glib/poppler.h | 42 ++++++++++++ - glib/test-poppler-glib.c | 43 ++++++++++++ - poppler-glib.pc.in | 11 +++ - 14 files changed, 661 insertions(+), 17 deletions(-) - -commit 2a31446b227b5cdc8334e672a71835b6ea14713a -Author: Jeff Muizelaar <jeff@infidigm.net> -Date: Wed Mar 16 15:51:36 2005 +0000 - - 2005-03-16 Jeff Muizelaar <jrmuizel@nit.ca> - - From Dan Sheridan <dan.sheridan@postman.org.uk> - - * poppler/XRef.cc (XRef::checkEncrypted): - The key length should be 5 for revision 2 documents. - - ChangeLog | 7 +++++++ - poppler/XRef.cc | 6 ++++++ - 2 files changed, 13 insertions(+), 0 deletions(-) - -commit e632a1d4b2f685993bda407458c34ef8e6b74136 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Mar 11 22:43:29 2005 +0000 - - 2005-03-11 Kristian Høgsberg <krh@redhat.com> - - From Jeff Muizelaar <jrmuizel@nit.ca>: - - * poppler/CairoOutputDev.cc (CairoOutputDev::drawImageMask): - Use - getLine instead of getPixel. - - ChangeLog | 3 +++ - poppler/CairoOutputDev.cc | 18 ++++++++---------- - 2 files changed, 11 insertions(+), 10 deletions(-) - -commit 83e904452f205a2c0cd2723cb12b7fd4640ce342 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Mar 11 21:42:52 2005 +0000 - - 2005-03-11 Kristian Høgsberg <krh@redhat.com> - - From Jeff Muizelaar <jrmuizel@nit.ca>: - - * configure.ac: Add checks for libjpeg. - - * DCTStream.cc, DCTStream.h, Stream.cc, Stream.h, Makefile.am: - Conditionally use libjpeg instead of xpdf jpeg decoder. - - ChangeLog | 9 ++++ - configure.ac | 34 +++++++++++++++- - poppler/DCTStream.cc | 110 - ++++++++++++++++++++++++++++++++++++++++++++++++++ - poppler/DCTStream.h | 70 ++++++++++++++++++++++++++++++++ - poppler/Makefile.am | 14 ++++++- - poppler/Stream.cc | 8 ++++ - poppler/Stream.h | 2 + - 7 files changed, 245 insertions(+), 2 deletions(-) - -commit e2af71338fd89760c4ac76999985efc5eb92817f -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Mar 11 16:42:20 2005 +0000 - - 2005-03-10 Kristian Høgsberg <krh@redhat.com> - - From Jeff Muizelaar <jrmuizel@nit.ca>: - - * poppler/CairoFontEngine.cc (CairoFontEngine::getFont): - Don't print "Type 3 font!" message. - - * poppler/CairoOutputDev.cc (CairoOutputDev::drawImageMask): - Enable image mask drawing and do it properly, albeit slowly. - - * poppler/CairoOutputDev.h - (CairoOutputDev::interpretType3Chars): Return true so that - Gfx.cc turns type3 characters into calls to drawImageMask - - ChangeLog | 14 ++++++++++++++ - poppler/CairoFontEngine.cc | 1 - - poppler/CairoOutputDev.cc | 25 ++++++++++--------------- - poppler/CairoOutputDev.h | 2 +- - 4 files changed, 25 insertions(+), 17 deletions(-) - -commit 3dc52373346e448077d2539163e873eef6406ed7 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Mar 9 15:47:00 2005 +0000 - - 2005-03-09 Kristian Høgsberg <krh@redhat.com> - - * NEWS: Describe 0.1.2 (and 0.1.1) release. - - * configure.ac: Bump poppler version to 0.1.2 - - ChangeLog | 6 ++++++ - NEWS | 12 ++++++++++++ - configure.ac | 2 +- - 3 files changed, 19 insertions(+), 1 deletions(-) - -commit 5c6a2d34fc25df28ca5326e6910d7cf664f0c3d7 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Wed Mar 9 15:35:31 2005 +0000 - - 2005-03-09 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: Bump cairo requirement to 0.4. - - ChangeLog | 4 ++++ - configure.ac | 4 ++-- - 2 files changed, 6 insertions(+), 2 deletions(-) - -commit 5b2d9a61e79cefd819888c8c89231a5fafccd114 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sat Mar 5 04:57:49 2005 +0000 - - 2005-03-04 Kristian Høgsberg <krh@redhat.com> - - Patch from Jeff Muizelaar <jrmuizel@nit.ca>. Changed to - allocate - glyphs using gmalloc. - - * poppler/CairoOutputDev.cc (CairoOutputDev::drawString): - Implement drawString instead of drawChar. This change should - make clipping to a text path work and has a performance - improvement. Currently the code is a little ugly because we - can't concat matrices to cairo without losing our current - font. - - * poppler/CairoOutputDev.h (CairoOutputDev::useDrawChar): - Tell Gfx.cc that it should use drawString instead of drawChar. - - ChangeLog | 14 ++++++ - TODO | 3 + - poppler/CairoOutputDev.cc | 110 - ++++++++++++++++++++++++++++++++++----------- - poppler/CairoOutputDev.h | 7 +-- - 4 files changed, 102 insertions(+), 32 deletions(-) - -commit 60d190ef80a0dcd9cc3a67306e2c65c5dd482f24 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sat Mar 5 04:37:14 2005 +0000 - - 2005-03-04 Kristian Høgsberg <krh@redhat.com> - - * test/gtk-cairo-test.cc (view_load): - * test/gtk-splash-test.cc (view_load): Fix missing return - statement, and remove unused variables. - - * configure.ac: Add configure option to enable the default KDE - flags as described by Albert Astals Cid <tsdgeos@yahoo.es>. - - * TODO: Update with Jeff's items. - - * .cvsignore: - * */.cvsignore: Add these to silence CVS. - - ChangeLog | 9 +++++++++ - TODO | 15 +++++++++++---- - configure.ac | 21 +++++++++++++++++++++ - test/gtk-cairo-test.cc | 6 ++---- - test/gtk-splash-test.cc | 5 ++--- - 5 files changed, 45 insertions(+), 11 deletions(-) - -commit e6706e505c1675724c8870f7c58079932661db5f -Author: Kristian Høgsberg <krh@redhat.com> -Date: Sat Mar 5 02:19:50 2005 +0000 - - 2005-03-04 Kristian Høgsberg <krh@redhat.com> - - * .cvsignore: - * */.cvsignore: Add these to silence CVS. - - .cvsignore | 21 +++++++++++++++++++++ - ChangeLog | 3 +++ - fofi/.cvsignore | 8 ++++++++ - goo/.cvsignore | 8 ++++++++ - poppler/.cvsignore | 10 ++++++++++ - splash/.cvsignore | 8 ++++++++ - test/.cvsignore | 10 ++++++++++ - 7 files changed, 68 insertions(+), 0 deletions(-) - -commit 932edfc3c5c61e3b3e98957b717abbf8055e1c5e -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Mar 4 19:47:13 2005 +0000 - - 2005-03-04 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: Implement same check for gtk+-2.0 tests as for - cairo. - - ChangeLog | 5 +++++ - configure.ac | 11 ++++++++--- - 2 files changed, 13 insertions(+), 3 deletions(-) - -commit c632b35ad9345f280d78c268f84ae3fd5a3921b9 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Mar 4 16:33:43 2005 +0000 - - 2005-03-04 Kristian Høgsberg <krh@redhat.com> - - * configure.ac: Only fail hard in check for cairo if the user - specified --enable-cairo-output (from Brad Hards - <bradh@frogmouth.net>). Print summary of configure results - at the - end of configure script. - - * poppler/poppler-config.h: Remove this file (noticed by Brad - Hards <bradh@frogmouth.net>). - - ChangeLog | 5 +++++ - configure.ac | 17 ++++++++++++++--- - 2 files changed, 19 insertions(+), 3 deletions(-) - -commit 80f9c90273eb31ac349c46bf86dedff7daf21db4 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Mar 4 15:32:32 2005 +0000 - - 2005-03-04 Kristian Høgsberg <krh@redhat.com> - - * poppler/poppler-config.h: Remove this file (noticed by Brad - Hards <bradh@frogmouth.net>). - - ChangeLog | 5 ++ - poppler/poppler-config.h | 146 - ---------------------------------------------- - 2 files changed, 5 insertions(+), 146 deletions(-) - -commit 338b83b6f08a7212fdde2bbce94385e9a71a3d23 -Author: Kristian Høgsberg <krh@redhat.com> -Date: Fri Mar 4 02:46:44 2005 +0000 - - 2005-03-03 Kristian Høgsberg <krh@redhat.com> - - Patch from Jeff Muizelaar <jrmuizel@nit.ca>: - - * poppler/CairoOutputDev.cc (CairoOutputDev::drawImage, - CairoOutputDev::drawImageMask): destroy the image surface and - free the image buffer. - - ChangeLog | 10 ++++++++++ - autogen.sh | 2 +- - poppler/CairoOutputDev.cc | 8 +++++--- - 3 files changed, 16 insertions(+), 4 deletions(-) - -commit 062aa51487f539406b54458885b4c9501da3c44d -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Mar 3 20:01:14 2005 +0000 - - 2005-03-03 Kristian Høgsberg <krh@redhat.com> - - * autogen.sh: Add to CVS. - - ChangeLog | 4 ++++ - autogen.sh | 4 ++++ - 2 files changed, 8 insertions(+), 0 deletions(-) - -commit cb02d5d0e770e2a8cbe5a8ac810820a2ce5fec0c -Author: Kristian Høgsberg <krh@redhat.com> -Date: Thu Mar 3 19:45:58 2005 +0000 - - Initial revision - - AUTHORS | 3 + - COPYING | 340 ++++ - ChangeLog | 33 + - INSTALL | 236 +++ - Makefile.am | 29 + - NEWS | 4 + - README | 37 + - README-XPDF | 376 ++++ - TODO | 21 + - configure.ac | 139 ++ - fofi/FoFiBase.cc | 156 ++ - fofi/FoFiBase.h | 55 + - fofi/FoFiEncodings.cc | 994 ++++++++++ - fofi/FoFiEncodings.h | 34 + - fofi/FoFiTrueType.cc | 1438 ++++++++++++++ - fofi/FoFiTrueType.h | 131 ++ - fofi/FoFiType1.cc | 207 ++ - fofi/FoFiType1.h | 57 + - fofi/FoFiType1C.cc | 2385 ++++++++++++++++++++++ - fofi/FoFiType1C.h | 224 +++ - fofi/Makefile.am | 16 + - goo/GooHash.cc | 356 ++++ - goo/GooHash.h | 74 + - goo/GooList.cc | 92 + - goo/GooList.h | 89 + - goo/GooMutex.h | 49 + - goo/GooString.cc | 236 +++ - goo/GooString.h | 98 + - goo/Makefile.am | 20 + - goo/gfile.cc | 705 +++++++ - goo/gfile.h | 140 ++ - goo/gmem.c | 204 ++ - goo/gmem.h | 53 + - goo/gmempp.cc | 32 + - goo/gtypes.h | 29 + - poppler-cairo.pc.in | 10 + - poppler-splash.pc.in | 10 + - poppler.pc.in | 11 + - poppler/Annot.cc | 137 ++ - poppler/Annot.h | 79 + - poppler/Array.cc | 73 + - poppler/Array.h | 56 + - poppler/BaseFile.h | 82 + - poppler/BuiltinFont.cc | 65 + - poppler/BuiltinFont.h | 55 + - poppler/BuiltinFontTables.cc | 4284 - ++++++++++++++++++++++++++++++++++++++++ - poppler/BuiltinFontTables.h | 23 + - poppler/CMap.cc | 384 ++++ - poppler/CMap.h | 101 + - poppler/CairoFontEngine.cc | 367 ++++ - poppler/CairoFontEngine.h | 61 + - poppler/CairoOutputDev.cc | 569 ++++++ - poppler/CairoOutputDev.h | 146 ++ - poppler/CairoOutputDevImage.cc | 87 + - poppler/CairoOutputDevImage.h | 43 + - poppler/CairoOutputDevX.cc | 211 ++ - poppler/CairoOutputDevX.h | 117 ++ - poppler/Catalog.cc | 364 ++++ - poppler/Catalog.h | 87 + - poppler/CharCodeToUnicode.cc | 533 +++++ - poppler/CharCodeToUnicode.h | 112 ++ - poppler/CharTypes.h | 24 + - poppler/CompactFontTables.h | 464 +++++ - poppler/Decrypt.cc | 399 ++++ - poppler/Decrypt.h | 59 + - poppler/Dict.cc | 95 + - poppler/Dict.h | 75 + - poppler/Error.cc | 38 + - poppler/Error.h | 21 + - poppler/ErrorCodes.h | 36 + - poppler/FontEncodingTables.cc | 1824 +++++++++++++++++ - poppler/FontEncodingTables.h | 20 + - poppler/Function.cc | 1525 ++++++++++++++ - poppler/Function.h | 181 ++ - poppler/Gfx.cc | 3079 +++++++++++++++++++++++++++++ - poppler/Gfx.h | 279 +++ - poppler/GfxFont.cc | 1508 ++++++++++++++ - poppler/GfxFont.h | 313 +++ - poppler/GfxState.cc | 2782 ++++++++++++++++++++++++++ - poppler/GfxState.h | 1053 ++++++++++ - poppler/GlobalParams.cc | 1764 +++++++++++++++++ - poppler/GlobalParams.h | 312 +++ - poppler/JArithmeticDecoder.cc | 300 +++ - poppler/JArithmeticDecoder.h | 89 + - poppler/JBIG2Stream.cc | 3337 +++++++++++++++++++++++++++++++ - poppler/JBIG2Stream.h | 141 ++ - poppler/JPXStream.cc | 2822 ++++++++++++++++++++++++++ - poppler/JPXStream.h | 338 ++++ - poppler/Lexer.cc | 474 +++++ - poppler/Lexer.h | 75 + - poppler/Link.cc | 851 ++++++++ - poppler/Link.h | 407 ++++ - poppler/Makefile.am | 140 ++ - poppler/NameToCharCode.cc | 116 ++ - poppler/NameToCharCode.h | 40 + - poppler/NameToUnicodeTable.h | 1097 ++++++++++ - poppler/Object.cc | 231 +++ - poppler/Object.h | 301 +++ - poppler/Outline.cc | 151 ++ - poppler/Outline.h | 74 + - poppler/OutputDev.cc | 104 + - poppler/OutputDev.h | 162 ++ - poppler/PDFDoc.cc | 322 +++ - poppler/PDFDoc.h | 176 ++ - poppler/PDFDocEncoding.cc | 44 + - poppler/PDFDocEncoding.h | 16 + - poppler/PSOutputDev.cc | 3803 +++++++++++++++++++++++++++++++++++ - poppler/PSOutputDev.h | 312 +++ - poppler/PSTokenizer.cc | 135 ++ - poppler/PSTokenizer.h | 39 + - poppler/Page.cc | 370 ++++ - poppler/Page.h | 176 ++ - poppler/Parser.cc | 231 +++ - poppler/Parser.h | 58 + - poppler/SplashOutputDev.cc | 1348 +++++++++++++ - poppler/SplashOutputDev.h | 194 ++ - poppler/Stream-CCITT.h | 459 +++++ - poppler/Stream.cc | 3979 - +++++++++++++++++++++++++++++++++++++ - poppler/Stream.h | 841 ++++++++ - poppler/TextOutputDev.cc | 3529 +++++++++++++++++++++++++++++++++ - poppler/TextOutputDev.h | 569 ++++++ - poppler/UTF8.h | 56 + - poppler/UnicodeMap.cc | 293 +++ - poppler/UnicodeMap.h | 122 ++ - poppler/UnicodeMapTables.h | 361 ++++ - poppler/UnicodeTypeTable.cc | 299 +++ - poppler/UnicodeTypeTable.h | 18 + - poppler/XRef.cc | 1026 ++++++++++ - poppler/XRef.h | 133 ++ - poppler/poppler-config.h | 146 ++ - poppler/poppler-config.h.in | 145 ++ - splash/Makefile.am | 52 + - splash/Splash.cc | 1732 ++++++++++++++++ - splash/Splash.h | 174 ++ - splash/SplashBitmap.cc | 157 ++ - splash/SplashBitmap.h | 46 + - splash/SplashClip.cc | 270 +++ - splash/SplashClip.h | 86 + - splash/SplashErrorCodes.h | 30 + - splash/SplashFTFont.cc | 289 +++ - splash/SplashFTFont.h | 53 + - splash/SplashFTFontEngine.cc | 141 ++ - splash/SplashFTFontEngine.h | 58 + - splash/SplashFTFontFile.cc | 111 ++ - splash/SplashFTFontFile.h | 68 + - splash/SplashFont.cc | 166 ++ - splash/SplashFont.h | 87 + - splash/SplashFontEngine.cc | 245 +++ - splash/SplashFontEngine.h | 83 + - splash/SplashFontFile.cc | 55 + - splash/SplashFontFile.h | 58 + - splash/SplashFontFileID.cc | 23 + - splash/SplashFontFileID.h | 28 + - splash/SplashGlyphBitmap.h | 24 + - splash/SplashMath.h | 45 + - splash/SplashPath.cc | 177 ++ - splash/SplashPath.h | 105 + - splash/SplashPattern.cc | 64 + - splash/SplashPattern.h | 79 + - splash/SplashScreen.cc | 107 + - splash/SplashScreen.h | 38 + - splash/SplashState.cc | 99 + - splash/SplashState.h | 86 + - splash/SplashT1Font.cc | 251 +++ - splash/SplashT1Font.h | 49 + - splash/SplashT1FontEngine.cc | 124 ++ - splash/SplashT1FontEngine.h | 51 + - splash/SplashT1FontFile.cc | 96 + - splash/SplashT1FontFile.h | 55 + - splash/SplashTypes.h | 80 + - splash/SplashXPath.cc | 417 ++++ - splash/SplashXPath.h | 90 + - splash/SplashXPathScanner.cc | 271 +++ - splash/SplashXPathScanner.h | 72 + - test/Makefile.am | 48 + - test/gtk-cairo-test.cc | 298 +++ - test/gtk-splash-test.cc | 314 +++ - 177 files changed, 70512 insertions(+), 0 deletions(-) diff --git a/Build/source/libs/poppler/poppler-0.18.0/ConfigureChecks.cmake b/Build/source/libs/poppler/poppler-0.18.0/ConfigureChecks.cmake deleted file mode 100644 index 04de970c4e1..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/ConfigureChecks.cmake +++ /dev/null @@ -1,56 +0,0 @@ -# Copyright 2008 Pino Toscano, <pino@kde.org> -# -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - -include(CheckIncludeFile) -include(CheckIncludeFiles) -include(CheckSymbolExists) -include(CheckFunctionExists) -include(CheckLibraryExists) -include(CheckTypeSize) -include(CheckCSourceCompiles) - -check_include_files(dlfcn.h HAVE_DLFCN_H) -check_include_files(fcntl.h HAVE_FCNTL_H) -check_include_files(inttypes.h HAVE_INTTYPES_H) -check_include_files(memory.h HAVE_MEMORY_H) -check_include_files(stdint.h HAVE_STDINT_H) -check_include_files(stdlib.h HAVE_STDLIB_H) -check_include_files(strings.h HAVE_STRINGS_H) -check_include_files(string.h HAVE_STRING_H) -check_include_files(sys/mman.h HAVE_SYS_MMAN_H) -check_include_files(sys/stat.h HAVE_SYS_STAT_H) -check_include_files(sys/types.h HAVE_SYS_TYPES_H) -check_include_files(unistd.h HAVE_UNISTD_H) - -check_function_exists(fseek64 HAVE_FSEEK64) -check_function_exists(fseeko HAVE_FSEEKO) -check_function_exists(ftell64 HAVE_FTELL64) -check_function_exists(gmtime_r HAVE_GMTIME_R) -check_function_exists(gettimeofday HAVE_GETTIMEOFDAY) -check_function_exists(localtime_r HAVE_LOCALTIME_R) -check_function_exists(popen HAVE_POPEN) -check_function_exists(mkstemp HAVE_MKSTEMP) -check_function_exists(mkstemps HAVE_MKSTEMPS) - -macro(CHECK_FOR_DIR include var) - check_c_source_compiles( - "#include <${include}> - -int main(int argc, char *argv[]) -{ - DIR* d = 0; - return 0; -} -" ${var}) -endmacro(CHECK_FOR_DIR) -check_for_dir("dirent.h" HAVE_DIRENT_H) -check_for_dir("ndir.h" HAVE_NDIR_H) -check_for_dir("sys/dir.h" HAVE_SYS_DIR_H) -check_for_dir("sys/ndir.h" HAVE_SYS_NDIR_H) - -check_function_exists("nanosleep" HAVE_NANOSLEEP) -if(NOT HAVE_NANOSLEEP) - check_library_exists("rt" "nanosleep" "" LIB_RT_HAS_NANOSLEEP) -endif(NOT HAVE_NANOSLEEP) diff --git a/Build/source/libs/poppler/poppler-0.18.0/INSTALL b/Build/source/libs/poppler/poppler-0.18.0/INSTALL deleted file mode 100644 index 56b077d6a0b..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/INSTALL +++ /dev/null @@ -1,236 +0,0 @@ -Installation Instructions -************************* - -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free -Software Foundation, Inc. - -This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. - -Basic Installation -================== - -These are generic installation instructions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. (Caching is -disabled by default to prevent problems with accidental use of stale -cache files.) - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You only need -`configure.ac' if you want to change it or regenerate `configure' using -a newer version of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - -Compilers and Options -===================== - -Some systems require unusual options for compilation or linking that the -`configure' script does not know about. Run `./configure --help' for -details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - -You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - If you have to use a `make' that does not support the `VPATH' -variable, you have to compile the package for one architecture at a -time in the source code directory. After you have installed the -package for one architecture, use `make distclean' before reconfiguring -for another architecture. - -Installation Names -================== - -By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PREFIX'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PREFIX', the package will -use PREFIX as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=DIR' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - -Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Specifying the System Type -========================== - -There may be some features `configure' cannot figure out automatically, -but needs to determine by the type of machine the package will run on. -Usually, assuming the package is built to be run on the _same_ -architectures, `configure' can figure that out, but if it prints a -message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the `--target=TYPE' option to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - -If you want to set default values for `configure' scripts to share, you -can create a site shell script called `config.site' that gives default -values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - -Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -causes the specified `gcc' to be used as the C compiler (unless it is -overridden in the site shell script). Here is a another example: - - /bin/bash ./configure CONFIG_SHELL=/bin/bash - -Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent -configuration-related scripts to be executed by `/bin/bash'. - -`configure' Invocation -====================== - -`configure' recognizes the following options to control how it operates. - -`--help' -`-h' - Print a summary of the options to `configure', and exit. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. - diff --git a/Build/source/libs/poppler/poppler-0.18.0/Makefile.am b/Build/source/libs/poppler/poppler-0.18.0/Makefile.am deleted file mode 100644 index 60c82dca908..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/Makefile.am +++ /dev/null @@ -1,118 +0,0 @@ -ACLOCAL_AMFLAGS = -I m4 -DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc - -if BUILD_SPLASH_OUTPUT -splash_subdir = splash -splash_pc_file = poppler-splash.pc -endif - -if BUILD_CAIRO_OUTPUT -cairo_pc_file = poppler-cairo.pc -endif - -if BUILD_POPPLER_GLIB -glib_subdir = glib -glib_pc_file = poppler-glib.pc -endif - -if BUILD_POPPLER_QT4 -qt4_subdir = qt4 -qt4_pc_file = poppler-qt4.pc -endif - -if BUILD_POPPLER_CPP -cpp_subdir = cpp -cpp_pc_file = poppler-cpp.pc -endif - -if BUILD_UTILS -utils_subdir = utils -endif - -SUBDIRS = goo fofi $(splash_subdir) poppler $(utils_subdir) $(glib_subdir) test $(qt4_subdir) $(cpp_subdir) - -EXTRA_DIST = \ - README-XPDF \ - poppler.pc.in \ - poppler-uninstalled.pc.in \ - poppler-cairo.pc.in \ - poppler-cairo-uninstalled.pc.in \ - poppler-splash.pc.in \ - poppler-splash-uninstalled.pc.in \ - poppler-qt4.pc.in \ - poppler-qt4-uninstalled.pc.in \ - poppler-cpp.pc.in \ - poppler-cpp-uninstalled.pc.in - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = \ - poppler.pc \ - $(cairo_pc_file) \ - $(splash_pc_file) \ - $(glib_pc_file) \ - $(qt4_pc_file) \ - $(cpp_pc_file) - -# Add CMake buildsystem files here so they get added on make dist -EXTRA_DIST += \ - cpp/tests/CMakeLists.txt \ - cpp/CMakeLists.txt \ - glib/demo/CMakeLists.txt \ - glib/CMakeLists.txt \ - glib/poppler-features.h.cmake \ - qt4/src/CMakeLists.txt \ - qt4/tests/CMakeLists.txt \ - qt4/CMakeLists.txt \ - qt4/demos/CMakeLists.txt \ - test/CMakeLists.txt \ - utils/CMakeLists.txt \ - CMakeLists.txt \ - ConfigureChecks.cmake \ - cmake/modules/COPYING-CMAKE-SCRIPTS \ - cmake/modules/FindCairo.cmake \ - cmake/modules/FindFontconfig.cmake \ - cmake/modules/FindGLIB.cmake \ - cmake/modules/FindGObjectIntrospection.cmake \ - cmake/modules/FindGTK.cmake \ - cmake/modules/FindIconv.cmake \ - cmake/modules/FindLCMS.cmake \ - cmake/modules/FindQt4.cmake \ - cmake/modules/GObjectIntrospectionMacros.cmake \ - cmake/modules/MacroBoolTo01.cmake \ - cmake/modules/MacroEnsureVersion.cmake \ - cmake/modules/MacroOptionalFindPackage.cmake \ - cmake/modules/MacroPushRequiredVars.cmake \ - cmake/modules/PopplerDefaults.cmake \ - cmake/modules/PopplerMacros.cmake \ - cmake/modules/FindLIBOPENJPEG.cmake \ - config.h.cmake \ - poppler-cairo.pc.cmake \ - poppler/poppler-config.h.cmake \ - poppler-cpp.pc.cmake \ - poppler-glib.pc.cmake \ - poppler-qt4.pc.cmake \ - poppler-splash.pc.cmake \ - poppler.pc.cmake - - - -distclean-local: - if test "$(srcdir)" = "."; then :; else \ - rm -f ChangeLog; \ - fi - -ChangeLog: - $(AM_V_GEN) if test -d "$(srcdir)/.git"; then \ - (GIT_DIR=$(top_srcdir)/.git ./missing --run git log --stat) | fmt --split-only > $@.tmp \ - && mv -f $@.tmp $@ \ - || ($(RM) $@.tmp; \ - echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ - (test -f $@ || echo git log is required to generate this file >> $@)); \ - else \ - test -f $@ || \ - (echo A git checkout and git log is required to generate ChangeLog >&2 && \ - echo A git checkout and git log is required to generate this file >> $@); \ - fi - -.PHONY: ChangeLog - diff --git a/Build/source/libs/poppler/poppler-0.18.0/Makefile.in b/Build/source/libs/poppler/poppler-0.18.0/Makefile.in deleted file mode 100644 index a86154e84aa..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/Makefile.in +++ /dev/null @@ -1,966 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = . -DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(srcdir)/poppler-cairo-uninstalled.pc.in \ - $(srcdir)/poppler-cairo.pc.in \ - $(srcdir)/poppler-cpp-uninstalled.pc.in \ - $(srcdir)/poppler-cpp.pc.in \ - $(srcdir)/poppler-glib-uninstalled.pc.in \ - $(srcdir)/poppler-glib.pc.in \ - $(srcdir)/poppler-qt4-uninstalled.pc.in \ - $(srcdir)/poppler-qt4.pc.in \ - $(srcdir)/poppler-splash-uninstalled.pc.in \ - $(srcdir)/poppler-splash.pc.in \ - $(srcdir)/poppler-uninstalled.pc.in $(srcdir)/poppler.pc.in \ - $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ - TODO config.guess config.sub depcomp install-sh ltmain.sh \ - missing -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/define-dir.m4 $(top_srcdir)/m4/gtk-doc.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/introspection.m4 \ - $(top_srcdir)/m4/libjpeg.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = config.h $(top_builddir)/poppler/poppler-config.h -CONFIG_CLEAN_FILES = poppler.pc poppler-uninstalled.pc \ - poppler-cairo.pc poppler-cairo-uninstalled.pc \ - poppler-splash.pc poppler-splash-uninstalled.pc \ - poppler-glib.pc poppler-glib-uninstalled.pc poppler-qt4.pc \ - poppler-qt4-uninstalled.pc poppler-cpp.pc \ - poppler-cpp-uninstalled.pc -CONFIG_CLEAN_VPATH_FILES = -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(pkgconfigdir)" -DATA = $(pkgconfig_DATA) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir dist dist-all distcheck -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = goo fofi splash poppler utils glib test qt4 cpp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CAIRO_CFLAGS = @CAIRO_CFLAGS@ -CAIRO_FEATURE = @CAIRO_FEATURE@ -CAIRO_LIBS = @CAIRO_LIBS@ -CAIRO_REQ = @CAIRO_REQ@ -CAIRO_VERSION = @CAIRO_VERSION@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ -FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ -FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ -FREETYPE_CONFIG = @FREETYPE_CONFIG@ -FREETYPE_LIBS = @FREETYPE_LIBS@ -GLIB_MKENUMS = @GLIB_MKENUMS@ -GLIB_REQ = @GLIB_REQ@ -GREP = @GREP@ -GTKDOC_CHECK = @GTKDOC_CHECK@ -GTKDOC_MKPDF = @GTKDOC_MKPDF@ -GTKDOC_REBASE = @GTKDOC_REBASE@ -GTK_TEST_CFLAGS = @GTK_TEST_CFLAGS@ -GTK_TEST_LIBS = @GTK_TEST_LIBS@ -HTML_DIR = @HTML_DIR@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ -INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ -INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ -INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ -INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ -INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ -INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ -INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ -LCMS_CFLAGS = @LCMS_CFLAGS@ -LCMS_LIBS = @LCMS_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ -LIBCURL_LIBS = @LIBCURL_LIBS@ -LIBICONV = @LIBICONV@ -LIBJPEG_LIBS = @LIBJPEG_LIBS@ -LIBOBJS = @LIBOBJS@ -LIBOPENJPEG_LIBS = @LIBOPENJPEG_LIBS@ -LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ -LIBPNG_LIBS = @LIBPNG_LIBS@ -LIBS = @LIBS@ -LIBTIFF_LIBS = @LIBTIFF_LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -MOCQT4 = @MOCQT4@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PC_REQUIRES = @PC_REQUIRES@ -PC_REQUIRES_PRIVATE = @PC_REQUIRES_PRIVATE@ -PKG_CONFIG = @PKG_CONFIG@ -PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ -PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -POPPLER_DATADIR = @POPPLER_DATADIR@ -POPPLER_GLIB_CFLAGS = @POPPLER_GLIB_CFLAGS@ -POPPLER_GLIB_DISABLE_DEPRECATED = @POPPLER_GLIB_DISABLE_DEPRECATED@ -POPPLER_GLIB_DISABLE_SINGLE_INCLUDES = @POPPLER_GLIB_DISABLE_SINGLE_INCLUDES@ -POPPLER_GLIB_LIBS = @POPPLER_GLIB_LIBS@ -POPPLER_MAJOR_VERSION = @POPPLER_MAJOR_VERSION@ -POPPLER_MICRO_VERSION = @POPPLER_MICRO_VERSION@ -POPPLER_MINOR_VERSION = @POPPLER_MINOR_VERSION@ -POPPLER_QT4_CFLAGS = @POPPLER_QT4_CFLAGS@ -POPPLER_QT4_CXXFLAGS = @POPPLER_QT4_CXXFLAGS@ -POPPLER_QT4_LIBS = @POPPLER_QT4_LIBS@ -POPPLER_QT4_TEST_CFLAGS = @POPPLER_QT4_TEST_CFLAGS@ -POPPLER_QT4_TEST_LIBS = @POPPLER_QT4_TEST_LIBS@ -POPPLER_VERSION = @POPPLER_VERSION@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -XMKMF = @XMKMF@ -X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ -X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ -ZLIB_LIBS = @ZLIB_LIBS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -auto_import_flags = @auto_import_flags@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -create_shared_lib = @create_shared_lib@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -win32_libs = @win32_libs@ -ACLOCAL_AMFLAGS = -I m4 -DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc -@BUILD_SPLASH_OUTPUT_TRUE@splash_subdir = splash -@BUILD_SPLASH_OUTPUT_TRUE@splash_pc_file = poppler-splash.pc -@BUILD_CAIRO_OUTPUT_TRUE@cairo_pc_file = poppler-cairo.pc -@BUILD_POPPLER_GLIB_TRUE@glib_subdir = glib -@BUILD_POPPLER_GLIB_TRUE@glib_pc_file = poppler-glib.pc -@BUILD_POPPLER_QT4_TRUE@qt4_subdir = qt4 -@BUILD_POPPLER_QT4_TRUE@qt4_pc_file = poppler-qt4.pc -@BUILD_POPPLER_CPP_TRUE@cpp_subdir = cpp -@BUILD_POPPLER_CPP_TRUE@cpp_pc_file = poppler-cpp.pc -@BUILD_UTILS_TRUE@utils_subdir = utils -SUBDIRS = goo fofi $(splash_subdir) poppler $(utils_subdir) $(glib_subdir) test $(qt4_subdir) $(cpp_subdir) - -# Add CMake buildsystem files here so they get added on make dist -EXTRA_DIST = README-XPDF poppler.pc.in poppler-uninstalled.pc.in \ - poppler-cairo.pc.in poppler-cairo-uninstalled.pc.in \ - poppler-splash.pc.in poppler-splash-uninstalled.pc.in \ - poppler-qt4.pc.in poppler-qt4-uninstalled.pc.in \ - poppler-cpp.pc.in poppler-cpp-uninstalled.pc.in \ - cpp/tests/CMakeLists.txt cpp/CMakeLists.txt \ - glib/demo/CMakeLists.txt glib/CMakeLists.txt \ - glib/poppler-features.h.cmake qt4/src/CMakeLists.txt \ - qt4/tests/CMakeLists.txt qt4/CMakeLists.txt \ - qt4/demos/CMakeLists.txt test/CMakeLists.txt \ - utils/CMakeLists.txt CMakeLists.txt ConfigureChecks.cmake \ - cmake/modules/COPYING-CMAKE-SCRIPTS \ - cmake/modules/FindCairo.cmake \ - cmake/modules/FindFontconfig.cmake \ - cmake/modules/FindGLIB.cmake \ - cmake/modules/FindGObjectIntrospection.cmake \ - cmake/modules/FindGTK.cmake cmake/modules/FindIconv.cmake \ - cmake/modules/FindLCMS.cmake cmake/modules/FindQt4.cmake \ - cmake/modules/GObjectIntrospectionMacros.cmake \ - cmake/modules/MacroBoolTo01.cmake \ - cmake/modules/MacroEnsureVersion.cmake \ - cmake/modules/MacroOptionalFindPackage.cmake \ - cmake/modules/MacroPushRequiredVars.cmake \ - cmake/modules/PopplerDefaults.cmake \ - cmake/modules/PopplerMacros.cmake \ - cmake/modules/FindLIBOPENJPEG.cmake config.h.cmake \ - poppler-cairo.pc.cmake poppler/poppler-config.h.cmake \ - poppler-cpp.pc.cmake poppler-glib.pc.cmake \ - poppler-qt4.pc.cmake poppler-splash.pc.cmake poppler.pc.cmake -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = \ - poppler.pc \ - $(cairo_pc_file) \ - $(splash_pc_file) \ - $(glib_pc_file) \ - $(qt4_pc_file) \ - $(cpp_pc_file) - -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -am--refresh: - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -config.h: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ - else :; fi - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h -$(srcdir)/config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 -poppler.pc: $(top_builddir)/config.status $(srcdir)/poppler.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -poppler-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/poppler-uninstalled.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -poppler-cairo.pc: $(top_builddir)/config.status $(srcdir)/poppler-cairo.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -poppler-cairo-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/poppler-cairo-uninstalled.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -poppler-splash.pc: $(top_builddir)/config.status $(srcdir)/poppler-splash.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -poppler-splash-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/poppler-splash-uninstalled.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -poppler-glib.pc: $(top_builddir)/config.status $(srcdir)/poppler-glib.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -poppler-glib-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/poppler-glib-uninstalled.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -poppler-qt4.pc: $(top_builddir)/config.status $(srcdir)/poppler-qt4.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -poppler-qt4-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/poppler-qt4-uninstalled.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -poppler-cpp.pc: $(top_builddir)/config.status $(srcdir)/poppler-cpp.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -poppler-cpp-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/poppler-cpp-uninstalled.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: check-recursive -all-am: Makefile $(DATA) config.h -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-hdr \ - distclean-libtool distclean-local distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: install-pkgconfigDATA - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-pkgconfigDATA - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ - ctags-recursive install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-generic \ - clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ - dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ - distcheck distclean distclean-generic distclean-hdr \ - distclean-libtool distclean-local distclean-tags \ - distcleancheck distdir distuninstallcheck dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-pkgconfigDATA install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am \ - uninstall-pkgconfigDATA - - -distclean-local: - if test "$(srcdir)" = "."; then :; else \ - rm -f ChangeLog; \ - fi - -ChangeLog: - $(AM_V_GEN) if test -d "$(srcdir)/.git"; then \ - (GIT_DIR=$(top_srcdir)/.git ./missing --run git log --stat) | fmt --split-only > $@.tmp \ - && mv -f $@.tmp $@ \ - || ($(RM) $@.tmp; \ - echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ - (test -f $@ || echo git log is required to generate this file >> $@)); \ - else \ - test -f $@ || \ - (echo A git checkout and git log is required to generate ChangeLog >&2 && \ - echo A git checkout and git log is required to generate this file >> $@); \ - fi - -.PHONY: ChangeLog - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Build/source/libs/poppler/poppler-0.18.0/NEWS b/Build/source/libs/poppler/poppler-0.18.0/NEWS deleted file mode 100644 index 2df22081c48..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/NEWS +++ /dev/null @@ -1,1384 +0,0 @@ -Release 0.18.0 - core: - * Fix small memory leak when dealing with marked content - * Remove DCTStream::getRawStream since Stream::getNextStream does the same - - utils: - * Rename pdfmerge to pdfunite - * Rename pdfextract to pdfseparate - * pdfseparate: Complain if %d is not present and it should - * Add pdfseparate and pdfunite man pages - - build system: - * Minor cleanup in regarding removed qt code - -Release 0.17.4 (0.18 RC) - core: - * SplashOutputDev: Compile when defining USE_FIXEDPOINT - * PNGWriter: Compile with libpng >= 1.5.0 - -Release 0.17.3 (0.18 Beta 3) - core: - * PSOutputDev: Use Patterns for tiling fill when PS level >= 2 - * PSOutputDev: Avoid using /PatternType if only one instance of the pattern is used - * PSOutputDev: Add poppler version as comment in the file - * CairoOutputDev: Set mime data for soft masked images (Bug #40192) - * CairoOutputDev: Assume printer pixel size is 1/600" when stroking 0 width lines (Bug #39067) - * CairoOutputDev: Use cairo_show_text_glyphs() when printing - * CairoOutputDev: Fix stroke patterns (Bug #11719) - * CairoOutputDev: Fix unique id mime data - * CairoOutputDev: fix stroking of very thin lines - * CairoOutputDev: align strokes when Stroke Adjust is true and line width <= 1 (Bug #4536) - * TextOutputDev: Add TextFontInfo::matches() - * Improve PNGWriter - * Rework writing of PDF files - - utils: - * Introduce pdftocairo - utility for creating png/jpeg/ps/eps/pdf/svg using CairoOutputDev - * Introduce pdfextract - utility to extract PDF pages - * Introduce pdfmerge - utility to merge PDF files - * Fix compilation warning - * pdftohtml: Support text rotation (Bug #38586) - * Update SEE ALSO section of man pages - - glib: - * Add poppler_page_get_text_attributes() - * Add text attributes information to text demo - - qt4: - * Add a way to get the fully qualified name of a FormField - * Minor documentation improvements - -Release 0.17.2 (0.18 Beta 2) - core: - * EmbeddedFile improvements - * don't gmalloc(-1) upon ftell failure - * Fix missing content in some pages (Bug #39637) - * Improve selection of CJK fonts (Bug #36474) - * SplashOutputDev: Implement overprint - * SplashOutputDev: Render dots for 0 length dashed lines (Bug #34150) - * SplashOutputDev: Fix bad memory access when not using antialias (Bug #37189) - * PSOutputDev: Make level2sep and level3sep write cmyk instead of rgb - * PSOutputDev: Make level1sep, level2sep and level3sep write gray instead of rgb for gray images - * Fix numerical overflow in libopenjpeg JPXStream (Bug #39361) - * Fix crash on truncated JPEG/DCT stream (Bug #36693) - * Make sure the dict is a page dict (Bugs #35925 #39072) - * Fix calculation of startXRefPos - * Handle missing startxref properly (Bug #38209) - * Parse the "Medium" modifier when asking fontconfig for a font - * Header cleanup - * Include cleanup - * Define cleanup - - glib: - * Add missing permissions flags to PopplerPermissions - * Add missing permission flags to info demo - * Update gtk-doc.make - * Add poppler_document_get_n_attachments() - - utils: - * pdftohtml: Fix encoding of PDF document metadata (Bug #37900) - * pdftohtml: Fix vertical spacing issues (Bug #38019) - * pdftotext: Fix -htmlmeta to correctly output U+2019 in PDF metadata (Bug #37900) - * pdftoppm: Implement overprint - - qt4: - * Rework EmbeddedFile internals - * Fix possible crash in test - -Release 0.17.1 (0.18 Beta 1) - core: - * Rework the way form fields tree is built - * Cleanup unused parameters/variables - - glib: - * Add JavaScript actions - * demo: Show javascript actions in actions view - - qt4: - * tests: Turn some assignments to bool into QVERIFY checks - -Release 0.17.0 (0.18 Alpha) - core: - * Splash: Implement tiling patterns - * Splash: Support slight hinting - * Splash: Radial shading improvements - * Splash: General speed improvements - * Arthur: Add Hinting API - * Cairo: Implement Type 4,5,6,7 shadings using cairo mesh gradients - * Cairo: Use the new cairo unique id to set the surface id when printing - * PS: Add PS level1 non standard binary output option - * PS: Allow setting the rasterization resolution - * Form support improvements - * Annotation support improvements - * General speed improvements - * Add support for handling ViewerPreferences - * Remove abiword output device - - utils: - * pdftoppm: Add -singlefile option (Bug #32025) - * pdftoppm: Add TIFF output format support (Bug #32027) - * pdftops: Add PS level1 non standard binary output option - * pdftops: Allow setting the rasterization resolution - * pdftoabw has been removed - - glib: - * Add poppler_form_field_get_action() (Bug 33174) - * Remove GDK API - * Remove test-poppler-glib - * demo: Add a tooltip with current selected character in text demo - * demo: show the activation action of form fields if there's one - - cpp: - * Add TIFF output possibility - * Add PNM output possibility - - qt4: - * Support slight hinting - * Form support improvements - - qt3: - * The Qt3 frontend has been removed - - tests: - * Merge splash and cairo tests into a single gtk-test tool - -Release 0.16.4 - core: - * Small improvements in Annot parsing - - glib: - * Add g_return macros to make sure index is correct in form field choice methods - * Fix a crash when a choice form field has no items selected in glib-demo - - utils: - * Small fixes to the pdftohtml manpage - * Fix copyright years - - qt4: - * Fix caption of push button fields - -Release 0.16.3 - core: - * Increase precision in PS output device - * Workaround bug when converting pdf to ps with level1 (Bug #31926) - * Fix crash in Splash output device in some broken pdf - * Fix infinite loop in some broken files - * Fix rendering of some substituted fonts (Bug #34522) - * Do not ask Freetype for 0x0 fonts in Splash output device (Bug #34602) - * Don't assume y1 > y3 for points of a highlight annotation (Gnome Bug #643028) - * Handle fontCIDType2OT when creating freetype font in Cairo output device (Gnome Bug #643273) - * Fix crash in some pdf that use ICC color space (Bug #34357) - - glib: - * Don't use an uninitialized local variable in demo - * Add some introspection markers - - qt4: - * Fix crash regression in unicodeToQString (again) - - utils: - * pdftotext: Do not crash when using -bbox - -Release 0.16.2 - core: - * Fix text extraction for some files - - qt4: - * Fix crash regression in unicodeToQString - -Release 0.16.1 - core: - * Fix colorspace issues in the Cairo backend (Bug #32746) - * Remove declaration of function without implementation - * Do not crash in case jpeg_create_decompress fails (Bug #32890) - * Fix variable access mismatch (Bug #33063) - * Fix converting some pdf to ps with -level1sep (Bug #32365) - * Fix line selection, dont check y for Line selections - * Include zlib header in PNGWriter.cc - * Fix leak in Splash backend when doing axial shaded fills - * Fix label to index conversion on multiple prefixes - - glib: - * Use NULL instead of FALSE for functions returning a pointer - * Fix memory leak in poppler_page_get_text_layout() for pages with no text - - qt4: - * Fix unicodeToQString() to correctly decode the Unicode sequence - -Release 0.16.0 - - core: - * Improve the correctness of radial shadings (Bug #32349) - * Adapt the zlib-based FlateStream code to API changes (Bug #32065) - * Make PreScanOutputDev be less agressive when deciding to rasterize (Bug #30107) - * Fix some warnings in newer gcc in Splash backend - * Fix the preliminary bbox/clip calculation in Splash backend - * Use A1 instead of A8 for imagemask in the Cairo backend - * Windows compile fixes - - utils: - * Do not return 99 (or 1) with -h, -v and -printenc (Bug #32149) - * Misc style improvements to pdftohtml code - * pdftohtml: Remove the -resolution flag introduced in 0.15.0 and fix the - existing -zoom flag - - build system: - * Add more warning flags to the default gcc builds - * Enable GObject introspection support in the cmake build system - - qt4: - * Windows compile fixes - -Release 0.15.3 (0.16 RC) - - core: - * Improve rendering of radial shadings - * Open a broken file (Bug #31861) - * Correct parsing of linearization table (Bug #31627) - * Find fonts inside patterns (Bug #31948) - * [win32] Simplify strtok_r implementation - * Use a std::vector<char> instead of a var-length-array of chars - * Fix crashes in broken files - * Use sets instead of arrays for looking for duplicate fonts - - cpp: - * Include correction - - utils: - * pdffonts: Remove duplicated code - -Release 0.15.2 (0.16 Beta 2) - - core: - * Improve shadings and antialias in the Splash backend (Bug #30436) - * Linearization improvements - * Small improvements to the Arthur backend - * Fix calculation of the size of some pages (Bug #30784) - * Fix crashes in broken documents - - qt4: - * Add Page::renderToPainter() method - * Add setDebugErrorFunction() method - - cpp: - * Add the hability to render pages to an image - - utils: - * Add -p flag to pdfimages - - build system: - * Remove -ansi flag for cywin and mingw - -Release 0.15.1 (0.16 Beta 1) - - core: - * Consider render value when colorizing text (Bug #2807) - * Improve rendering of Shading Type 6 and 7 - * Improve dict lookup speed for big dicts - * Fix multiple crashes in malformed PDF files - * Fix memory leak in in malformed PDF files - * Fix memory leak in the Catalog names - * Fix uninitialized uses on DCTScanInfo - * Fix a crash when drawing square/circle annots without a border (Bug #30580) - * Only clip boxes to mediabox if we are at the page level (Bug #30784) - * Do not omit the notdef glyph in the Splash backend - * Fix a crash when redering documents with invalid type 3 fonts in the Cairo backend - * Form improvements - * Add a method to get the PDF file identifier - - glib: - * Add more printing options to the API - * Add a method to get the PDF file identifier - * Add accessor for all PopplerDocument properties - * Form improvements - * Documentation improvements - * Improvements to the demo - - qt4: - * Add a callback to know which page has been printed - * Add a method to get the PDF file identifier - * Optimize GooString to QString conversion - * Some more autotests - * Update Doxyfile (enables .qch file for assistant) - - build system: - * Require Cairo 1.10 - - utils: - * pdftohtml: Add -s option to generate a single HTML page - * pdftotext: Add -bbox option - - cpp: - * Add the possibility of loading a document from raw data - * Add a method to get the PDF file identifier - * Improve Unicode to ustring conversion - * Documentation improvements - * Update Doxyfile - -Release 0.15.0 (0.16 Alpha) - - core: - * Remove exception support - * Improve creation of Annotations - * Fix failure to parse PDF with damaged internal structure. (Bugs #29189 #3870) - * Add a way to access the raw text of a page - * Speed improvements when reading multiple characters from a given Stream - * Speed improvements in the Splash backend - * Speed improvement in gray color space calculations - * Speed improvement in ICC color space calculations - * Speed improvement when reading some fonts - * Make GBool a bool instead of an int - - glib: - * Add GObject introspection support - * Improve creation of Annotations - * Add a way to get the coordinates of each character of a page - * Add a way to get the page label - * Documentation improvements - * Support password protected documents in the demo - * Support for selection in the demo - * Support for adding annotationss in the demo - * Misc improvements in the internals - - qt4: - * Add a way to access the raw text of a page - * Recognize "Print" as named action - * Documentation improvements - - build system: - * Add option for autogen.sh to skip configure - * Nicer autogen.sh output - * Improvements when build the glib frontend with CMake - - utils: - * pdftohtml: Use splash instead of external gs invocation to render the background - * pdftohtml: Let the user specify the resolution of the background. (Bug #29551) - - cpp: - * Add a way to access the raw text of a page - -Release 0.14.3 - - core: - * Tell Windows we are writing/reading binary data from stdout/stdio (Bug #29329) - * Fix crash when parsing some Movie elements (KDE Bug #249586) - -Release 0.14.2 - - core: - * Fix rendering of some documents involving tilingPatternFill in the cairo output device - * Improve rendering of some annotations - * Handle ColorTransform in DCT streams when using libjpeg (Bug #28873) - * Fix crash in the ps output device in some files (KDE Bug #246269) - * Fix crash in some malformed files (Bug #28842) - - build system: - * Improve build on windows - * Add uninstalled .pc file support when using autoconf - - glib: - * Fix a crash when a layer doesn't have a name (Bug #28842) - - utils: - * Fix padding of names in pdftoppm - -Release 0.14.1 - - core: - * Add ObjectStream caching, makes opening some files ten times faster (Bug #26759) - * Fix crash when writing to negative coordinates (Bug #28480) - * Check objects are the type we want them to be when parsing GfxICCBasedColorSpace - * Optimize Splash::compositeBackground - * Optimize color space calculations by using sqrt instead of pow 0.5 - * Fix crash in JBIG2Stream with malformed documents - - build system: - * Make sure we ship two needed cmake files - * Do not distribute glib/poppler-features.h and poppler/poppler-config.h - * Improve compilation with Sun Studio - * Fix linking of the cpp frontend when using autotools - - glib: - * Fix links/annots area for some documents (Bug #28588) - * Fix poppler_page_find_tex() when called more than once (Bug #27927) - - utils: - * Add -cropbox to pdftoppm manual - -Release 0.14.0 - - core: - * Fix crash when parsing pdf with broken JBIG2Stream (Bug #28170) - * Do not follow loops blindly when parsing XRef (Bug #28172) - * Allow quality & progressive mode to be utilised in JpegWriter - * Fix potential assert in Lexer code (KDE bug #240208) - * Fix opening of files whose /P is stored as unsigned integer - * Do not exit() when trying to allocate memory for the XRef fails - - cpp: - * Minor bugfixes - * Documentation improvements - - build system: - * Fix build in mingw32 when using autotools - * Preserve compiler flags when using cmake - -Release 0.13.4 (0.14 RC 1) - - core: - * Include standard float.h instead of unportable values.h - * Fix first color stop offset of linear gradients. Bug #27837 - * Fix compilation if JPEG nor PNG is used - * Use fabs for doubles instead of abs - * Use strtok_r instead strtok - * Adjust bbox for line annots when y1 = y2 - * Some fixes and regressions in the cairo output device - * Better check of overlapping of table cells when selecting text - - cpp: - * Make the pkg-config files really work - * Fix in/out buffer sizes in some functions - -Release 0.13.3 (0.14 Beta 2) - - core: - * Fix roll optimization in the PS function interpreter - * Correctly parse numbers with '+' sign. Gnome bug #614549 - * Add support for cached files - * Add support for reading a cached file from stdin - * Add HTTP support using libcurl, disabled by default - * Add some const correctnes to GooString - * Rework DCTStream error handling. Bug #26280 - * Use current fill_opacity when drawing soft masked images in Cairo backend. Gnome bug #614915 - * Use the topleft of the Rect of text annots to draw - * Fix saving update docs that have a compressed xref table. Bug #27450 - * Parse varius part of the document catalog on demand - * Implement colorizing image masks with pattern colorspace in Cairo backend - * Fix a crash when rendering 0x0 images in Cairo backend - * Check pattern status after setting matrix when rendering images - * Improve text selection/extraction order. Bug #3188 - * Fix pattern size when bbox is not at 0,0 - * Improve colorizing text and masks in pattern colorspace. Bug #27482 - * Silence some Illegal entry in bfrange block in ToUnicode CMap. Bug #27728 - - utils: - * Add the -o[dd] and -e[ven] options to pdftoppm - * Allow read from stdin using the new cached files feature - * Fix crash in pdftohtml when output filename was shorter than 5 characters - - glib: - * Use existing cairo api when rendering to a pixbuf - * Compile with -DGSEAL_ENABLE. Bug #27579 - -Release 0.13.2 (0.14 Beta 1) - - core: - * Improve Movie support - * Fix experimental Arthur backend to compile when if Splash backend is disable - * Fix usage of some streams in the Cairo backend - * Small improvements in the experimental Arthur backend - * Minor annotation improvements - * Rework LinkRendition to follow the spec - * Add support for Set-OCG-State actions - * Correctly initialize the grayscale softmask color in the Splash backend - * Correctly initialize actualText in TextOutputDev when initialization fails - * Various MSVC fixes - - glib: - * Add support for Movie objects - * Add support for Screen annotations - * Add support for rendition actions - * Add support for OCG State actions - * Improvements to the demo - - qt4: - * Always compile the experimental Arthur backend - * Minor speed improvement in QPainter usage - * Add a search overload that takes doubles instead of QRectF - - cpp: - * Fix iconv usage - * use gmtime() when gmtime_r() is not available - * Fix building in autotools in windows - * {from,to}_utf_8() -> {from,to}_utf8() - - build system: - * Multiple CMake build system fixes - * Fix of some DIST targets in autotools - * Make finding of Qt3 in autotools use pkg-config - -Release 0.13.1 (0.14 Alpha 2) - - core: - * New C++ frontend to interface with Poppler using only STL - * Use the right matrix for the mask in drawMaskedImage in Cairo output device. Bug #16906 - * Fix downscaling images when document is rotated in Cairo output device. Bug #26264 - * GooVector rewrite, old version had "unknown" origins/license - * Fix use after free in a error condition - * Improve handling of broken commands. Bug #24575 - * Fix potential use after free in Cairo output device. - * Fix regression in painting. Bug #26243 - * Improve handling of FontConfig. Bug #26544 - * Only assume the OC is not visible if it exists and is set to no. Bug #26532 - * Fix a potential crash in Splash font handling on out of memory conditions - * Implement writeImgFile for splashModeXBGR8 - * Several speed increases (around 40% in some documents) in the Splash output device - * Improve printing on the Cairo output device - * Do not use '\' character in PostScript names - * Omit writing of embedded fonts into temporary files in the Cairo output device. Bug #26694 - * Improve filtering of some images in the Cairo output device. Bugs #25268, #9860 - - utils: - * pdftoppm: Only swap w with h if rotation is 90 or 270 - - build system: - * Add POPPLER_WITH_GDK in cmake build system. Bug #26247 - * Fix typo: "MULTITHREAD" -> "MULTITHREADED in cmake build system - * Wrap #include <jpeglib.h> in extern "C" to fix build. Bug #26351 - * Add the Win32-specific ENABLE_RELOCATABLE option to cmake build system - * Reflect that poppler-glib needs cairo now in cmake build system - * Use pkgconfig to detect libpng on autotools build system - * Detect the need for nanosleep in solaris in cmake build system. Bug #26650 - -Release 0.13.0 (0.14 Alpha) - - core: - * Improvements to Annotation rendering. Bug #23108 - * Do not give an error when opening files without pages. Bug #24720 - * Try to read streams without Length - * Do not crop the transformation matrix at an arbitrary value. Bug #25763 - * Make poppler (optionally) relocatable on Windows - * Use a small object cache in GfxResources to cache GState objects - * Reduce the number of redundant pattern creations in the Cairo output device - * Use colToDbl() to avoid rounding error in the Cairo output device - * Fix problems with mask handling in the Cairo output device. Bug #8474 - * Use a better scale down implementation in the Cairo output device - * Various optimizations to the Splash output device - * Add the possibility to use floats instead of doubles in the Splash output device. Bug #25578 - * Write out fixed-content portion of Type 1 fonts in the PS output device - - build system: - * Improvements to the CMake build system - * Enable AM_SILENT_RULES by default in autotools - * Require glib 2.18 - * Require GTK+ 2.14 - * Make fontconfig optional with mingw compiler - * Remove makefile.vc - - glib: - * Add support for file attachment annotations - * Improvements to the demo - * Use TextOutputDev to get TextPage when we haven't rendered the page - * Remove support for the Splash output device - - utils: - * pdftoppm can now write to jpeg - * pdftoppm embeds the correct resolution in png and jpeg files - - qt4: - * Minor improvements to the tests - -Release 0.12.3 - - core: - * Be more lenient with /Decode key on images. Bug #17439 - * Correctly initialize fileName in LinkGoToR. Bug #25221 - * Improve the reconstruction of the XRef for broken files - * [Cairo backend] Do not crash on malformed files. Bug #24575 - * Accept Fontname if FontName is not present. KDE bug #217013 - * Make PSOutputDev code a bit more resilient - * Fix writing of null objects. Bug #25465 - * [Cairo backend] Fix crash in some documents. GNOME bug #603934 - * Correctly initialize profileCommands in Gfx constructor - - build system: - * Check for openjpeg in the C++ part as it uses bool in the header. Bug #25103 - -Release 0.12.2 - - core: - * Fix a memory leak when converting to PostScript - * Fix crash when reading a font fails. Bug #24525 - * Make the ICC cache per page instead of global. Bug #24686 - * Do not accept negative interval lengths in the page labels tree. Bug #24721 - * Do not crash on files Aspect of Movie objects are reals instead of integers. Bug #24733 - * Do not render patterns when using CairoImageOutputDev - * Allow Transitions dictionary to be a Ref - * Do not crash if jpeg_start_decompress fails. KDE bug #214317 - - glib: - * Fix CVE-2009-3607 - - qt4: - * Use '.' in the annotations XML instead of the decimal separator of the current locale - -Release 0.12.1 - - core: - * Fix compilation on some compilers - * Only initialize the font list once in Windows32/MSVC - * Do not crash on fonts without CharCodeToUnicode. Bug #24036 - * Fix regression due to not setting LC_NUMERIC anymore - * Improve realibility for Streams with broken Length. Bug #6841 - * Write the Info into the trailer dict if there is one. Bug #24091 - * Do not crash when saving files that come from a stream without name. Bug #24090 - * Improve relability of the save function - * Fix the Length value if it was wrong when saving - * Fix includes for those using internal headers - * Rework how hinting is used in the splash backend. It is disabled by default now - * fix constructor of DCTStream when using internal decoder - * Security fixes based xpdf 3.02pl4 - - qt4: - * Add the possibility of setting wheter to use or not font hinting - * Add a way for converters to return more exact errors they had when converting - * Check the document is not locked when converting to PS - - build system: - * Compile on Cygwin - * Use _WIN32 instead of WIN32. Bug #24259 - * Add the possibility to pass LIB_SUFFIX when using CMake - -Release 0.12.0 - - core: - * Fix printf format security warnings - * Improve rendering of radial shadings. Bug #20238 - * Better fallback when there's a font type mismatch. Bug #17252 - * Do not crash on attachments without data stream. Bug #10386 - * Fix infinite loop in JBIG2Decoder. Bug #23025 - - build system: - * Minimizes pkg-config dependencies for Qt frontends - * Add automake 1.11 support - * Use the newest automake found and not the oldest - * Support AM_SILENT_RULES when using automake 1.11 - - utils: - * Add common options to pdftoabw - -Release 0.11.3 (0.12 RC 1) - - core: - * Optimization in the Cairo renderer for some fonts - * Do not apply masks when fill color space mode is csPattern in the Cairo renderer. Bug #22216 - * Check for overflow when parsing integers. Bug #23078 - * Do not save the font file twice for FreeType fonts in the Cairo renderer. Bug #20491 - * Use current fill_opacity when drawing images in the Cairo renderer - * Fix alpha rendering in some files in the Splash renderer. Bug #22143, #22152 - * Implement tiling patterns in the Cairo renderer - * When converting a cm matrix to PS write 4 significant digits for numbers < 1 not 4 decimals. Bug #23332 - * Fix changing of locale, now poppler no longer changes LC_NUMERIC to "C" - * Return PDF version as two integers instead of as a double - - Qt4: - * Addition of the Color Management API - * Small fix to documentation - * Fix backwards text search - - utils: - * Add the -png flag to pdftoppm to output to PNG - -Release 0.11.2 (0.12 Beta 2) - - core: - * Make DecryptStream return sane values for getPos(). Bug #19706 - * Fix bug when printing pdf with multiple page sizes in duplex mode - * Initilize AnnotColot properly when the Array is not correct - * Fix crash on some files with forms. Bug #22485 - * Fix crash in files with invalid embedded files. Bug #22551 - * Improve FileSpec attribute parsing - * Cairo output device improvements. Bugs #10942, #18017, #14160 - * Implement blend modes in cairo backend - * Handle fontType1COT fonts in CairoFontEngine - * Fix generation of PS for some files. Bug #18908 - * Don't use byte_lookup table when color space doesn't support getLine methods. Bug #11027 - * Fix rendering of PDF files with malformed patterns. Bug #22835 - * Add the possibility of disabling font substitution in pdftops. Bug #23030 - * Fix some radio buttons not being detected as such - - glib: - * Improvements to the demo - - Qt4: - * Improvements to the demo - - build system: - * Use gtkbuilder rather than libglade for some tests - - utils: - * Fix bug with noCrop parameter in pdftops - -Release 0.11.1 (0.12 Beta 1) - - core: - * Support colorizing text in pattern colorspace. Bug #19670 and #19994 - * Add the possibility of forcing no hinting of fonts in the Splash backend - * Support multiple page sizes when converting to PS. Bug #19777 - * Also tokens with leading 00 when parsing the char to unicode map. Bug #22025 - * Improvements of rendering speed in documents using PS transformations a lot. Bug #21562 - * More work on Annotations support - * Use Interpolate flag to decide whether applying image interpolation during rendering. Bug #9860 - * Handle Streams in CMap definitions. Bug #22334 - * Fix some bugs in JBIG2Stream handling - * Fix dashed line in page 1 of bug 20011 - * Fix exit(1) when rendering a file - * Fix pdftops crash on file from KDE bug #174899 - * Fix PS generation in some files. Bug #20420 - * Do not create the GfxColorTransform if the lcms could not be created. Bug #20108 - * Check Mask entries are int before using them, if they are real cast to int and try to use them. Bug #21841 - * Use the correct value when creating the V field for form combo boxes - * Give an error when using level1sep in pdftops without having CMYK support. Bug #22026 - * Don't include lcms.h in GfxState.h - * Fix splashColorModeNComps to correctly include all values for each SplashColorMode - * Add splashClearColor that assigns white to the given colorptr - * Kill support for specifying extension in openTmpFile. Bug #21713 - * Fix "Conditional jump or move depends on uninitialised value". Bug #20011 - - glib: - * Add poppler_annot_markup_has_popup() - * Hyphenate UTF-8 and UTF-16BE. Bug #21953 - * Use g_strerror instead of strerror. Bug #22095 - * Fix a crash when a destination points to an invalid page - * Improvements to the demo - - Qt4: - * Add LinkDestination::destinationName() - * Do not try to resolve named destinations for GoTo links pointing to external documents - * Add Page::thumbnail() - * Improvements to the demo - * Improvements to the documentation - - build system: - * Build fix for MSVC - * Better lcms cmake check comming from kdelibs - * Use pkgconfig for autotools lcms check - * Remove unneeded files from repo. Bug #22094 - -Release 0.11.0 (0.12 Alpha) - - core: - * Add initial support for color management - * Remove case-insensitive matching of filenames in PDFDoc constructor - * Fix extraction of some ActualText content - * More work on Annotations support - * Improve font rendering in Cairo output device - * Fix bug in cairo backend with nested masks - * Fix cairo luminosity smask rendering - * Add optionally text support to Cairo output device - * Add the possibility of setting the datadir on runtime - * Return an error code instead of a boolean when saving - * Make the font scanner more versatile - * Small opimization in documents that use PostScriptFunction transforms - * Minor optimization to Stream handling - * Fix some compile warnings - - glib: - * Optional content support - * More work on Annotations support - * Improvements to the demo - * Documentation improvements - * Fix build when compiling with GTK_DISABLE_SINGLE_INCLUDES - - Qt4: - * Support URI actions for Table Of Contents items - * Documentation improvements - * Improvements to the demo - * Add a FontIterator for iterating through the fonts of the document - - utils: - * Allow the use of cropbox in pdftoppm - * Make pdftohtml output png images when the image stream is not a jpeg - * Make pdftotext accept cropping options like pdftoppm - * Support rendering non-square pixels in pdftoppm - - build system: - * Require Cairo 1.8.4 for the Cairo output device - * Require CMake 2.6 when using the CMake build system - * Optionally require libpng for pdftohtml - * Optionally require libcms for color management - -Release 0.10.6 - - core: - * Fix problems that happen when parsing broken JBIG2 files. - CVE-2009-0799, CVE-2009-0800, CVE-2009-1179, CVE-2009-1180 - CVE-2009-1181, CVE-2009-1182, CVE-2009-1183, CVE-2009-1187, CVE-2009-1188 - * Fix parsing of incorrect border arrays. Bug #19761 - * Fix clip test for fonts. Bug #20950 - * Fix getGlyphAdvance to behave correctly on font size changes. Bug #20769 - * Misc build fixes - - build system: - * Fix the Qt4 version we need - -Release 0.10.5 - - core: - * Read the UF entry if present and prefer it over F in Filespec dictionary - * Fix typo that was making CairoOutputDev crash on some files. Bug #17337 - * Make JBIG2Stream more robust to corrupt input data - * Do not blindly follow loops parsing OutlineItem. Bug #18364 - * Set up the error manager before calling jpeg_create_decompress. Bug #20484 - * Check there is an optional content config before using it. Bug #20587 - * Fix rendering of some PDF with OpenType fonts. Bug #20605 - - build system: - * Yet more support for build on windows - * Use AC_CHECK_HEADER to find headers. Bug #20538 - * Check for pkgconfig before using it - * General autotools improvements - -Release 0.10.4 - - core: - * Fix a memory leak when asking for a document-level JS - * Do not crash in some PDF we do not parse correctly. Bug #19702 - * Fix crash on unexepcted form Opt value. Bug #19790 - - utils: - * Fix pdfimages to extract i color components per pixel jpeg images. Bug #19789 - -Release 0.10.3 - - core: - * Fix a crash on documents with malformed outline. Bug #19024 - * Fix leak on AnnotScreen destructor. Bug #19095 - * Fix wrong PS generation when a large image is in Patterns. Bug #18908 - * Remove BaseFile.h it was never used. Bug #19298 - * Improve document saving - * Fix PS generation of PDF with malformed font Length2 definition - * Fix a leak while parsing annotations - * Fix rendering of some checkboxes - - Qt4: - * Fix positioning of Form rects on PDF with cropbox - * Fix positioning of Annotation rects on PDF with cropbox. Bug #18558. - * Small documentation improvements - * Make Document::fonts() work when called more than once. Bug #19405 - - build system: - * CMake: look harder for openjpeg - * CMake: update the poppler core headers installation - * Autotools: do not install Function.cc as it's not a header - - Qt: - * Fix deserialization of links right coordinate - -Release 0.10.2 - - core: - * Fix a crash when selecting text in word mode - * Fix a crash in some malformed documents (second argument of opMarkPoint is not a dictionary) - * Ensure cairo font matrix is invertable. Fixes bugs #18254 and #18429 - * Fix a memory leak (Bug #18924) - - Qt4: - * Fix deserization of links right coordinate - - misc: - * Fix build on Solaris 10 + Sun Studio 12 - * Compile with -pedantic - -Release 0.10.1 - - core: - * Improvements in Optional Content support - * Small fix in Form support - * Fix memory leak in case of error - * Fix potential crash on text search - * Try render documents with invalid indexed color space parameters. Bug #18374 - * Fix crash on text extraction when poppler-data is not installed. Bug #18023 - - Qt: - * Fix two memory leaks - - Qt4: - * Small documentation improvement - * Fix memory leak in the demo code - -Release 0.10.0 - - core: - * Fix crashes on PDF using Stitching or Axial Shading painting - * Fix rendering of PDF with Type1 fonts that have more than - one encoding definition per line - * Do not try to save documents that have Encryption as we - do not support that and the user ended with a broken file - * Fix crash on files with OptionalContentGroup but no Name - - Qt4: - * Fix the area of the links to be correctly reported on rotated documents - - misc: - * Mingw+Msys should work - -Release 0.9.3 (0.10 RC 2) - - core: - * Fix rendering regression on some embedded fonts - * Fix rendering regression of some special fonts - * Fix crash on documents with bogus jpeg data - - Qt4: - * The printing flag defaults to true on PSConverter - * Documentation improvement - - utils: - * Fix regression that made HmtlOutputDev ignore jpeg images - - misc: - * Improve compilation on mingw - -Release 0.9.2 (0.10 RC 1) - - core: - * Fix conversion to PS some files (bug #17645) - * Small Form fixes - * Small JS fixes - * Improve memory usage of the cairo renderer - - utils: - * Fix mismatched free/delete in pdftohtml - * Fix memory leak in pdftohtml - * Fix crash in pdftohtml - - glib: - * Fix a crash in forms demo - - misc: - * Compile with -pedantic - -Release 0.9.1 (0.10 Beta 2) - - Core: - * Fix crash on some AESv2 encrypted files (bugs #13972, #16092, #17523) - * Improve parsing of broken files (bug #17568) - - glib frontend: - * Minor improvements to the demo application - - utils: - * pdftohtml: Generate the outline file in the same place - of the other generated files (bug #17504) - -Release 0.9.0 (0.10 Beta 1) - - Core: - * Initial JavaScript support - * Annotation improvements - * Improvements in the Arthur based renderer - * Improvements in the Cairo based renderer - * Added a JPEG2000 decoder based on OpenJPEG - * Small fixes in ActualText implementation - * Fix jpeg rendering when not using the libjpeg based decoder - * Movie fixes - * Do not get out of memory on documents that specify huge fonts - * Emulate Adobe Reader behaviour on documents with duplicate keys in Dictionaries - * Forms improvements - - Qt4 frontend: - * Annotation improvements - * Forms improvements - * Add the possibility of extracting embedded fonts - * Initial Movie support - * Documentation improvements - * Small improvements in the PS exporter - - glib frontend: - * Annotation improvements - * Attachment fixes - - utils: - * updated man pages - * Added -listenc to pdfinfo and pdftotext - -Release 0.8.7 - - Core: - * Fix regression in Form rendering - * Fix memory leak in the cairo backend - -Release 0.8.6 - - Core: - * Call error() when font loading fails - * Be less strict parsing TTF tables (bug #16940) - * Fix crash due to uninitialized variable - - Qt 4 frontend: - * Make the paper color setting working as it should - * Make sure to use the correct page width/height for form widgets coordinates - -Release 0.8.5 - - Core: - * Fix crash on PDF that define a page thumbnail but it's not a Stream - * Fix crash when Annots object is not of the desired type - * Fix crash when obtaining fonts in PDF where XObjects link themselves in loops - * Fix crash on documents with an IRT object - * Saving should work much better now - * Plug some memory leaks in Annotation handling - - Utils: - * pdftohtml: Don't crash on documents that specify an invalid named dest for a link - * pdftohtml: Make html output to keep all the spaces with   - * pdftohtml: Improve a bit text layout - * pdftohtml: Make xml output valid xml - -Release 0.8.4 - - Core: - * Fix leak in ABWOutputDev.cc - * Fix uninitialized variable that broke file saving in some cases - * Use a single global FT_Library in CairoOutputDev. - Fixes some crashes in CairoOutputDev. - - Qt 4 frontend: - * Fix saving over existing files - - build system: - * Make sure Qt4 moc is used to generate moc files in Qt4 frontend - -Release 0.8.3 - - Core: - * Fix crash when reading some PDF with annotations - * Fix crash on PDF that reference Optional Content elements that don't exist - * Fix leaks on error conditions - * Do not limit CharCodeToUnicodeString to 8 characters - * Support for surrogates outside the BMP plane - - Qt 3 frontend: - * Fix crash when reading PDF with password - * Fix leak when calling scanForFonts() - - Qt 4 frontend: - * Fix the text() method - - Splash renderer: - * Fix compilation with --enable-fixedpoint - -Release 0.8.2 - - core: - * Fix call broken by a fix introduced in 0.8.1 - -Release 0.8.1 - - core: - * Do not call FT_Done_Face on a live cairo_font_face_t as it might cause crashes - * Do not take into account Colorspace resource subdictionary for image XObjects - * Downsample 16 bit per component images to 8 bit per component so they render - - build system: - * Link to pthread when the system needs it - - windows: - * Fix comparing against NULL instead against INVALID_HANDLE_VALUE when calling FindFirstFile - -Release 0.8.0 - - * Fix caching of members in the glib frontend causing issues with rendering - * Change glib public api to have a correct naming - * Some better error handling on corner cases - * Check the document stream is seekable when opening it - * Build fixes with autotools and with cmake - * Fix infinite recursion on some malformed documents when consulting the fonts - * Fix possible crash when asking for Movie contents - -Release 0.7.3 (0.8 RC 2) - - * Fix regression in Splash renderer - * Fix off-by-one write in Splash - * Plug some minor leaks in Optional Content code - * Improve error handling when creating a document in the glib frontend - -Release 0.7.2 (0.8 RC 1) - - Major Changes: - * Improve font matching not forcing default values onto Fontconfig - * Add preliminary annotations support in the glib frontend - * Initial Movie support in the core - * Make GDK dependency optional in glib bindings - - Minor Changes: - * Make the core able to read mime types of embedded files - * Qt4 API for accessing mime types of embedded files - * Handle correctly check state of optional content groups - regarding parents state - * Avoid setting singular CTM matrices on the Cairo backend - * Improved Qt4 API to get character position - * Qt4 api documentation improvements - * Qt4 minor stability fixes - * Proper lib64 Qt detection - * Fix build when compiling without cairo support - -Release 0.7.1 (0.8 Beta 2) - - Major Changes: - * Really distribute CMake files as optional build tool - * Initial Optional Content support in core and in the Qt4 frontend - - Minor Changes: - * Allow grouped checkboxes to be selected individually - * Qt4 demo program improvements - * Keep cairo and cairo_shape consistent - * Safety checks on Splash renderer so that it does not draw outside the allocated bitmap - * Do not try to display bitmaps of invalid size - * Fix building with exceptions - * Improvements for building with MSVC and CMake - -Release 0.7.0 (0.8 Beta 1) - - * Saving support - * Partial annotation support - * Forms improvements - * Add support for ActualText entries - * Display characters outside of unicode BMP with TT font - * CJK rendering fixes - * Implement Adobe Glyph Naming convention for fonts - * CMake as optional build tool - * Better font scaling for non embedded fonts - * Preserve PDF page labels when we output as postscript - -Release 0.6.4 - - Qt4 frontend: - * Fix crash on links that point to a non existant page - * Make Document::renderHints return the correct render hints - * Fix infinite loop when parsing LineAnnotation - - core: - * Fix crash in the Splash renderer when T3 fonts are badly defined - * Draw underlined Links correctly - - utils: - * Fix two use after free bugs in HtmlOutputDev.cc - - build system: - * Fix build on mingw32 - - tests: - * Distribute the glade file of pdf-inspector - -Release 0.6.3 - - core: - * Fix crash in extra debug code - - glib frontend: - * Make sure passwords are passed correctly to poppler core - - Qt frontend: - * Fix crash on documents that specify an empty date - - build system: - * Disable gtk tests if the user disabled glib frontend - -Release 0.6.2 - - poppler core: - * Fix CVE-2007-4352, CVE-2007-5392 and CVE-2007-5393 - * Fix a crash on documents with wrong CCITTFaxStream - * Fix a crash in the Cairo renderer with invalid embedded fonts - * Fix a crash with invalid TrueType fonts - * Check if font is inside the clip area before rendering - it to a temporary bitmap in the Splash renderer. Fixes crashes on - incorrect documents - * Do not use exit(1) on DCTStream errors - * Detect form fields at any depth level - * Do not generate appearance stream for radio buttons that are not active - * mingw fixes - - build system: - * Require fontconfig >= 2.0 - * builddir != srcdir fixes - - Qt4 frontend: - * Improved documentation - - misc: - * Fix FSF address - -Release 0.6.1 - - poppler core: - * Fix printing with different x and y scale - * Fix crash when Form Fields array contains references to non existent objects - * Fix crash in CairoOutputDev::drawMaskedImage() - * Fix embedded file description not working on some cases - - Qt4 frontend: - * Fix printing issue - * Avoid double free - * Fix memory leak when dealing with embedded files - - glib frontend: - * Fix build with --disable-cairo-output - * Do not return unknown field type for signature form fields - - build system: - * Support automake-1.10 - * More compatible sh code in qt.m4 - - utils: - * Fix build on Sun Studio compiler - -Release 0.6 - - - CairoOutputDev fixes - - Allow pdftoppm to read/write from stdin/stdout - - API work on Qt4 frontend - - Fix pdfimages produces inverted image for black & white image - - Fix error on the NFKC text matching routine - - Add support for word and line selections - - Do not enforce %%EOF at the end of file - - Pad zeroes instead of aborting when rendering 1-bit images - and the stream is too short - - Update glib bindings documentation - -Release 0.5.91 (0.6 Release Candidate 2) - - - Various memory leaks fixed - - Compile with --enable-fixedpoint. Bug #11110 - - Header cleanup - - Remove dependency on debugxml. Bug #11187 - - Allow access to document metadata in glib and qt4 frontends - - Several glib API frontend improvements - - Fix crash on accessing embedded files - - Build on Sun Force compiler - - Render '*' instead of the actual content in password form fields - - Fix pdftohtml complex output. Bug #9746 and #11610 - - Windows build fixes - - Improve Japanese font support. Bug #11413 - - Do not exit the program on files that confuse libjpeg - - Update required cairo version to 1.4 - - Fix CVE-2007-3387 - -Release 0.5.9 (0.6 Release Candidate) - - - Merge xpdf 3.02 changes - - Qt4 frontend is not marked anymore as unstable - - Support for Sound objects - - Support for Opening/Closing page actions - - Support for page duration - - Improve PS Tokenizer performance thanks to Scott Turner - - Various speed ups by Krzysztof Kowalczyk - - Beginning of Interactive Form support by Julien Rebetez - - xpdfrc is no longer used for anything - - Add AbiWord output device and pdftoabw program by Jauco Noordzij - - Fix security issue MOAB-06-01-2007 - - Lots of bugs fixed - -Release 0.5.4 - - - Automatically read in CJK encoding files if they're - installed (#2984, #7105, #7093). This works with the new - poppler-data package. - - Speed ups by Krzysztof Kowalczyk (#8112) - - Patch from Dom Lachowicz to let the utils take input on stdin. - - Bugs fixed (#8182, #4649, #7906, #8048, #7113, #4515, #3948, - #7924, #7780, #7646, #6948, #7788, #7661, #7005) - -Release 0.5.3 - - - Add poppler as a private requires of poppler-glib. - - Allow CairoFont creation to fail more gracefully (#4030). - - Back out the rest of krh's type3 font work. - - Revert splashModeRGB8 changes. - - Add missing poppler-annotation-helper.h. - -Release 0.5.2 - - - Much improved Qt bindings (Albert Astals Cid). - - Cairo backend now supports masked images (Jeff Muizelaar, #6174). - - Patches from Kouhei Sutou to make glib bindings more - language binding friendly (#6907, #6897, #6899, #6905). - - Search now works with ligatures (Ed Catmull, #2929). - - The glib bindings now has an entry point to render to a cairo_t. - - GCC 4.1 and MSVC compilation fixes. - - Memory leaks plugged: #6908, #6947, #6765, #6764, #6187 - - Misc bug fixes: #6984, #6896, #6913, #6926, #4481, #5951, - #6551, #6500, #6492, #6454, #6079, #6167. - -Release 0.5.1 - - - Support for embedded files. - - Handle 0-width lines correctly. - - Avoid external file use when opening fonts. - - Only use vector fonts returned from fontconfig (#5758). - - Fix scaled 1x1 pixmaps use for drawing lines (#3387). - - drawSoftMaskedImage support in cairo backend. - - Misc bug fixes: #5922, #5946, #5749, #5952, #4030, #5420. - -Release 0.5.0 - - - Font matching code for non embedded fonts now use fontconfig - instead of hard coded list of fonts. - - Merge in Xpdf 3.01 changes. - - Add command line tools from Xpdf. - - Make install of Xpdf header files ./configure'able. - -Release 0.4.0 - - - Real text selection. - - API breakage in glib wrapper: dropping dest_x and dest_y - arguments from poppler_page_render_to_pixbuf(). - -Release 0.3.3 - - - New glib API to get document font information (Marco). - - More document properties available as glib properties (Emil - Soleyman-Zomalan, #3359) - - Optimize color conversion for images. - - Support for constant opacity. - - Fix problems with pkg-config files. - - Bugs fixes: #3491, #2911, #3362, #3340, #3265, #3239, #3396. - -Release 0.3.2 - - - New API to get poppler version and backend type. - - Various font fixes from Albert Astals Cid. - - Update to cairo 0.5.0 API, including better font support. - - Meta data for the glib binding. - -Release 0.3.1 - - - Add qt/poppler-private.h to SOURCES - - Jeff's path to use zlib instead of builtin decompression. - - Bug fixes: #2934, segfault on invalid links, #3114 - -Release 0.3.0 - - - First cut at qt wrapper, including a getText() method for - getting text from a page. - - More glib functionality: meta data, set page orientation, - print to PS - - Performance fixes for glib cairo - - Bug fixes - -Release 0.2.0 (Tue Apr 5 12:32:10 EDT 2005) - - - Add glib wrapper for poppler, which will use cairo rendering - if available - - Support for page labels - - configure and build fixes. - -Release 0.1.2 (Wed Mar 9 10:45:58 EST 2005) - - - cairo optimizations and fixes from Jeff Muizelaar - - Bump cairo requirement to 0.4 - - Make cairo and gtk checks fail gracefully - -Release 0.1.1 - - - Fix issues with installed header files including config.h - - Fix a couple of typos in pkg-config files - - Install splash and cairo header files when necessary - -Release 0.1 - no date yet - - - First release - - More NEWS here diff --git a/Build/source/libs/poppler/poppler-0.18.0/README b/Build/source/libs/poppler/poppler-0.18.0/README deleted file mode 100644 index e5b30a6d9ca..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/README +++ /dev/null @@ -1,37 +0,0 @@ -This is poppler, a PDF rendering library. - -Poppler is a fork of the xpdf PDF viewer developed by Derek Noonburg -of Glyph and Cog, LLC. The purpose of forking xpdf is twofold. -First, we want to provide PDF rendering functionality as a shared -library, to centralize the maintenance effort. Today a number of -applications incorporate the xpdf code base, and whenever a security -issue is discovered, all these applications exchange patches and put -out new releases. In turn, all distributions must package and release -new version of these xpdf based viewers. It's safe to say that -there's a lot of duplicated effort with the current situation. Even if -poppler in the short term introduces yet another xpdf derived code -base to the world, we hope that over time these applications will -adopt poppler. After all, we only need one application to use poppler -to break even. - -Second, we would like to move libpoppler forward in a number of areas -that don't fit within the goals of xpdf. By design, xpdf depends on -very few libraries and runs a wide range of X based platforms. This -is a strong feature and reasonable design goal. However, with poppler -we would like to replace parts of xpdf that are now available as -standard components of modern Unix desktop environments. One such -example is fontconfig, which solves the problem of matching and -locating fonts on the system, in a standardized and well understood -way. Another example is cairo, which provides high quality 2D -rendering. See the file TODO for a list of planned changes. - -Please note that xpdf, and thus poppler, is licensed under the GPL, -not the LGPL. Consequently, any application using poppler must also -be licensed under the GPL. If you want to incorporate Xpdf based PDF -rendering in a closed source product, please contact Glyph & Cog -(www.glyphandcog.com) for commercial licensing options. - - Kristian Høgsberg, Feb. 27, 2005 - - -See the README-XPDF for the original xpdf-3.00 README. diff --git a/Build/source/libs/poppler/poppler-0.18.0/README-XPDF b/Build/source/libs/poppler/poppler-0.18.0/README-XPDF deleted file mode 100644 index ff674a2a7b7..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/README-XPDF +++ /dev/null @@ -1,376 +0,0 @@ -Xpdf -==== - -version 3.00 -2004-jan-22 - -The Xpdf software and documentation are -copyright 1996-2004 Glyph & Cog, LLC. - -Email: derekn@foolabs.com -WWW: http://www.foolabs.com/xpdf/ - -The PDF data structures, operators, and specification are -copyright 1985-2003 Adobe Systems Inc. - - -What is Xpdf? -------------- - -Xpdf is an open source viewer for Portable Document Format (PDF) -files. (These are also sometimes also called 'Acrobat' files, from -the name of Adobe's PDF software.) The Xpdf project also includes a -PDF text extractor, PDF-to-PostScript converter, and various other -utilities. - -Xpdf runs under the X Window System on UNIX, VMS, and OS/2. The non-X -components (pdftops, pdftotext, etc.) also run on Win32 systems and -should run on pretty much any system with a decent C++ compiler. - -Xpdf is designed to be small and efficient. It can use Type 1 or -TrueType fonts. - - -Distribution ------------- - -Xpdf is licensed under the GNU General Public License (GPL), version -2. In my opinion, the GPL is a convoluted, confusing, ambiguous mess. -But it's also pervasive, and I'm sick of arguing. And even if it is -confusing, the basic idea is good. - -In order to cut down on the confusion a little bit, here are some -informal clarifications: - -- I don't mind if you redistribute Xpdf in source and/or binary form, - as long as you include all of the documentation: README, man pages - (or help files), and COPYING. (Note that the README file contains a - pointer to a web page with the source code.) - -- Selling a CD-ROM that contains Xpdf is fine with me, as long as it - includes the documentation. I wouldn't mind receiving a sample - copy, but it's not necessary. - -- If you make useful changes to Xpdf, please make the source code - available -- post it on a web site, email it to me, whatever. - -If you're interested in commercial licensing, please see the Glyph & -Cog web site: - - http://www.glyphandcog.com/ - - -Compatibility -------------- - -Xpdf is developed and tested on a Linux 2.4 x86 system. - -In addition, it has been compiled by others on Solaris, AIX, HP-UX, -Digital Unix, Irix, and numerous other Unix implementations, as well -as VMS and OS/2. It should work on pretty much any system which runs -X11 and has Unix-like libraries. You'll need ANSI C++ and C compilers -to compile it. - -The non-X components of Xpdf (pdftops, pdftotext, pdfinfo, pdffonts, -pdftoppm, and pdfimages) can also be compiled on Win32 systems. See -the Xpdf web page for details. - -If you compile Xpdf for a system not listed on the web page, please -let me know. If you're willing to make your binary available by ftp -or on the web, I'll be happy to add a link from the Xpdf web page. I -have decided not to host any binaries I didn't compile myself (for -disk space and support reasons). - -If you can't get Xpdf to compile on your system, send me email and -I'll try to help. - -Xpdf has been ported to the Acorn, Amiga, BeOS, and EPOC. See the -Xpdf web page for links. - - -Getting Xpdf ------------- - -The latest version is available from: - - http://www.foolabs.com/xpdf/ - -or: - - ftp://ftp.foolabs.com/pub/xpdf/ - -Source code and several precompiled executables are available. - -Announcements of new versions are posted to several newsgroups -(comp.text.pdf, comp.os.linux.announce, and others) and emailed to a -list of people. If you'd like to receive email notification of new -versions, just let me know. - - -Running Xpdf ------------- - -To run xpdf, simply type: - - xpdf file.pdf - -To generate a PostScript file, hit the "print" button in xpdf, or run -pdftops: - - pdftops file.pdf - -To generate a plain text file, run pdftotext: - - pdftotext file.pdf - -There are four additional utilities (which are fully described in -their man pages): - - pdfinfo -- dumps a PDF file's Info dictionary (plus some other - useful information) - pdffonts -- lists the fonts used in a PDF file along with various - information for each font - pdftoppm -- converts a PDF file to a series of PPM/PGM/PBM-format - bitmaps - pdfimages -- extracts the images from a PDF file - -Command line options and many other details are described in the man -pages (xpdf.1, etc.) and the VMS help files (xpdf.hlp, etc.). - - -Upgrading from Xpdf 2.xx ------------------------- - -WARNING: Xpdf 3.00 switched to a new PDF rasterizer, which no longer -uses X fonts. You'll need a set of Base-14 fonts -- the URW fonts -distributed with ghostscript can be used for this. Xpdf will search -for the URW fonts, but if you have them installed in a non-standard -directory, you'll need to set up an xpdfrc config file to point to -them. For full details, please see the xpdfrc(5) man page. - - -Compiling Xpdf --------------- - -See the separate file, INSTALL. - - -Bugs ----- - -If you find a bug in Xpdf, i.e., if it prints an error message, -crashes, or incorrectly displays a document, and you don't see that -bug listed here, please send me email, with a pointer (URL, ftp site, -etc.) to the PDF file. - - -Acknowledgments ---------------- - -Thanks to: - -* Patrick Voigt for help with the remote server code. -* Patrick Moreau, Martin P.J. Zinser, and David Mathog for the VMS - port. -* David Boldt and Rick Rodgers for sample man pages. -* Brendan Miller for the icon idea. -* Olly Betts for help testing pdftotext. -* Peter Ganten for the OS/2 port. -* Michael Richmond for the Win32 port of pdftops and pdftotext and the - xpdf/cygwin/XFree86 build instructions. -* Frank M. Siegert for improvements in the PostScript code. -* Leo Smiers for the decryption patches. -* Rainer Menzner for creating t1lib, and for helping me adapt it to - xpdf. -* Pine Tree Systems A/S for funding the OPI and EPS support in - pdftops. -* Easy Software Products for funding the "sh" operator support. -* Tom Kacvinsky for help with FreeType and for being my interface to - the FreeType team. -* Theppitak Karoonboonyanan for help with Thai support. -* Leonard Rosenthol for help and contributions on a bunch of things. -* Alexandros Diamantidis and Maria Adaloglou for help with Greek - support. -* Lawrence Lai for help with the CJK Unicode maps. - -Various people have contributed modifications made for use by the -pdftex project: - -* Han The Thanh -* Martin Schröder of ArtCom GmbH - - -References ----------- - -Adobe Systems Inc., _PDF Reference: Adobe Portable Document Format -Version 1.5_. -http://partners.adobe.com/asn/tech/pdf/specifications.jsp -[The manual for PDF version 1.5.] - -Adobe Systems Inc., _PostScript Language Reference_, 3rd ed. -Addison-Wesley, 1999, ISBN 0-201-37922-8. -[The official PostScript manual.] - -Adobe Systems, Inc., _The Type 42 Font Format Specification_, -Adobe Developer Support Technical Specification #5012. 1998. -http://partners.adobe.com/asn/developer/pdfs/tn/5012.Type42_Spec.pdf -[Type 42 is the format used to embed TrueType fonts in PostScript -files.] - -Adobe Systems, Inc., _Adobe CMap and CIDFont Files Specification_, -Adobe Developer Support Technical Specification #5014. 1995. -http://www.adobe.com/supportservice/devrelations/PDFS/TN/5014.CIDFont_Spec.pdf -[CMap file format needed for Japanese and Chinese font support.] - -Adobe Systems, Inc., _Adobe-Japan1-4 Character Collection for -CID-Keyed Fonts_, Adobe Developer Support Technical Note #5078. -2000. -http://partners.adobe.com/asn/developer/PDFS/TN/5078.CID_Glyph.pdf -[The Adobe Japanese character set.] - -Adobe Systems, Inc., _Adobe-GB1-4 Character Collection for -CID-Keyed Fonts_, Adobe Developer Support Technical Note #5079. -2000. -http://partners.adobe.com/asn/developer/pdfs/tn/5079.Adobe-GB1-4.pdf -[The Adobe Chinese GB (simplified) character set.] - -Adobe Systems, Inc., _Adobe-CNS1-3 Character Collection for -CID-Keyed Fonts_, Adobe Developer Support Technical Note #5080. -2000. -http://partners.adobe.com/asn/developer/PDFS/TN/5080.CNS_CharColl.pdf -[The Adobe Chinese CNS (traditional) character set.] - -Adobe Systems Inc., _Supporting the DCT Filters in PostScript Level -2_, Adobe Developer Support Technical Note #5116. 1992. -http://www.adobe.com/supportservice/devrelations/PDFS/TN/5116.PS2_DCT.PDF -[Description of the DCTDecode filter parameters.] - -Adobe Systems Inc., _Open Prepress Interface (OPI) Specification - -Version 2.0_, Adobe Developer Support Technical Note #5660. 2000. -http://partners.adobe.com/asn/developer/PDFS/TN/5660.OPI_2.0.pdf - -Adobe Systems Inc., CMap files. -ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/ -[The actual CMap files for the 16-bit CJK encodings.] - -Adobe Systems Inc., Unicode glyph lists. -http://partners.adobe.com/asn/developer/type/unicodegn.html -http://partners.adobe.com/asn/developer/type/glyphlist.txt -http://partners.adobe.com/asn/developer/type/corporateuse.txt -http://partners.adobe.com/asn/developer/type/zapfdingbats.txt -[Mappings between character names to Unicode.] - -Aldus Corp., _OPI: Open Prepress Interface Specification 1.3_. 1993. -http://partners.adobe.com/asn/developer/PDFS/TN/OPI_13.pdf - -Anonymous, RC4 source code. -ftp://ftp.ox.ac.uk/pub/crypto/misc/rc4.tar.gz -ftp://idea.sec.dsi.unimi.it/pub/crypt/code/rc4.tar.gz -[This is the algorithm used to encrypt PDF files.] - -T. Boutell, et al., "PNG (Portable Network Graphics) Specification, -Version 1.0. RFC 2083. -[PDF uses the PNG filter algorithms.] - -CCITT, "Information Technology - Digital Compression and Coding of -Continuous-tone Still Images - Requirements and Guidelines", CCITT -Recommendation T.81. -http://www.w3.org/Graphics/JPEG/ -[The official JPEG spec.] - -A. Chernov, "Registration of a Cyrillic Character Set". RFC 1489. -[Documentation for the KOI8-R Cyrillic encoding.] - -Roman Czyborra, "The ISO 8859 Alphabet Soup". -http://czyborra.com/charsets/iso8859.html -[Documentation on the various ISO 859 encodings.] - -L. Peter Deutsch, "ZLIB Compressed Data Format Specification version -3.3". RFC 1950. -[Information on the general format used in FlateDecode streams.] - -L. Peter Deutsch, "DEFLATE Compressed Data Format Specification -version 1.3". RFC 1951. -[The definition of the compression algorithm used in FlateDecode -streams.] - -Jim Flowers, "X Logical Font Description Conventions", Version 1.5, X -Consortium Standard, X Version 11, Release 6.1. -ftp://ftp.x.org/pub/R6.1/xc/doc/hardcopy/XLFD/xlfd.PS.Z -[The official specification of X font descriptors, including font -transformation matrices.] - -Foley, van Dam, Feiner, and Hughes, _Computer Graphics: Principles and -Practice_, 2nd ed. Addison-Wesley, 1990, ISBN 0-201-12110-7. -[Colorspace conversion functions, Bezier spline math.] - -Robert L. Hummel, _Programmer's Technical Reference: Data and Fax -Communications_. Ziff-Davis Press, 1993, ISBN 1-56276-077-7. -[CCITT Group 3 and 4 fax decoding.] - -ISO/IEC, _Information technology -- Lossy/lossless coding of bi-level -images_. ISO/IEC 14492, First edition (2001-12-15). -http://webstore.ansi.org/ -[The official JBIG2 standard. The final draft of this spec is -available from http://www.jpeg.org/jbighomepage.html.] - -ISO/IEC, _Information technology -- JPEG 2000 image coding system -- -Part 1: Core coding system_. ISO/IEC 15444-1, First edition -(2000-12-15). -http://webstore.ansi.org/ -[The official JPEG 2000 standard. The final committee draft of this -spec is available from http://www.jpeg.org/JPEG2000.html, but there -were changes made to the bitstream format between that draft and the -published spec.] - -ITU, "Standardization of Group 3 facsimile terminals for document -transmission", ITU-T Recommendation T.4, 1999. -ITU, "Facsimile coding schemes and coding control functions for Group 4 -facsimile apparatus", ITU-T Recommendation T.6, 1993. -http://www.itu.int/ -[The official Group 3 and 4 fax standards - used by the CCITTFaxDecode -stream, as well as the JBIG2Decode stream.] - -Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz, "Practical -Fast 1-D DCT Algorithms with 11 Multiplications". IEEE Intl. Conf. on -Acoustics, Speech & Signal Processing, 1989, 988-991. -[The fast IDCT algorithm used in the DCTDecode filter.] - -Microsoft, _TrueType 1.0 Font Files_, rev. 1.66. 1995. -http://www.microsoft.com/typography/tt/tt.htm -[The TrueType font spec (in MS Word format, naturally).] - -Thai Industrial Standard, "Standard for Thai Character Codes for -Computers", TIS-620-2533 (1990). -http://www.nectec.or.th/it-standards/std620/std620.htm -[The TIS-620 Thai encoding.] - -P. Peterlin, "ISO 8859-2 (Latin 2) Resources". -http://sizif.mf.uni-lj.si/linux/cee/iso8859-2.html -[This is a web page with all sorts of useful Latin-2 character set and -font information.] - -Charles Poynton, "Color FAQ". -http://www.inforamp.net/~poynton/ColorFAQ.html -[The mapping from the CIE 1931 (XYZ) color space to RGB.] - -R. Rivest, "The MD5 Message-Digest Algorithm". RFC 1321. -[MD5 is used in PDF document encryption.] - -Unicode Consortium, "Unicode Home Page". -http://www.unicode.org/ -[Online copy of the Unicode spec.] - -W3C Recommendation, "PNG (Portable Network Graphics) Specification -Version 1.0". -http://www.w3.org/Graphics/PNG/ -[Defines the PNG image predictor.] - -Gregory K. Wallace, "The JPEG Still Picture Compression Standard". -ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz -[Good description of the JPEG standard. Also published in CACM, April -1991, and submitted to IEEE Transactions on Consumer Electronics.] - -F. Yergeau, "UTF-8, a transformation format of ISO 10646". RFC 2279. -[A commonly used Unicode encoding.] diff --git a/Build/source/libs/poppler/poppler-0.18.0/TODO b/Build/source/libs/poppler/poppler-0.18.0/TODO deleted file mode 100644 index e067c2a3156..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/TODO +++ /dev/null @@ -1,40 +0,0 @@ -* general items: - - Investigate better (that is, normal) text selection. - - Use PDF font descriptors to create an FcPattern. - - Add simle performance benchmark that takes a pdf and renders - every page 100 times or so. Start keeping track of - performance. - - make color space conversion stuff more sane (right now we - hack around some of it in the cairo backend) - - move away from getChar to a more read(2) like interface - -* core: - - use libtiff for ccitt decoding? - -* Qt4 frontend: - - expose Rendition media through the MovieObject API - - use Q_GLOBAL_STATIC for GlobalParams? - - use QSettings or another system for loading/saving Document/global settings? - - expose API for lcms/color management system - - make the ArthurOutputDev optional - -* glib frontend: - - Sound/Movie actions support - - API to create annotations - -* new frontends: - - Java/JNI-based frontend for Android - -* cairo backend: - - Implement linear/radial gradients with cairo gradients - - PDF Blend Modes - - Make the cairo backend feature complete and optimize the - heck out of it. - -Jeff Muizelaar's TODO: - Short Term: - - factor out some of the color conversion code from CairoOutputDev and ArthurOutputDev. - - fix patterned text fills. - Long Term: - - use cairo glyph cache for type3 fonts. - - try to use cairo pattern support. diff --git a/Build/source/libs/poppler/poppler-0.18.0/aclocal.m4 b/Build/source/libs/poppler/poppler-0.18.0/aclocal.m4 deleted file mode 100644 index 33d6b62ddbd..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/aclocal.m4 +++ /dev/null @@ -1,2161 +0,0 @@ -# generated automatically by aclocal 1.11.1 -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, -[m4_warning([this file was generated for autoconf 2.68. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically `autoreconf'.])]) - -# lib-link.m4 serial 21 (gettext-0.18) -dnl Copyright (C) 2001-2010 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_PREREQ([2.54]) - -dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and -dnl the libraries corresponding to explicit and implicit dependencies. -dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and -dnl augments the CPPFLAGS variable. -dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname -dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. -AC_DEFUN([AC_LIB_LINKFLAGS], -[ - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - pushdef([Name],[translit([$1],[./-], [___])]) - pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) - AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ - AC_LIB_LINKFLAGS_BODY([$1], [$2]) - ac_cv_lib[]Name[]_libs="$LIB[]NAME" - ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" - ac_cv_lib[]Name[]_cppflags="$INC[]NAME" - ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" - ]) - LIB[]NAME="$ac_cv_lib[]Name[]_libs" - LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" - INC[]NAME="$ac_cv_lib[]Name[]_cppflags" - LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) - AC_SUBST([LIB]NAME) - AC_SUBST([LTLIB]NAME) - AC_SUBST([LIB]NAME[_PREFIX]) - dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the - dnl results of this search when this library appears as a dependency. - HAVE_LIB[]NAME=yes - popdef([NAME]) - popdef([Name]) -]) - -dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) -dnl searches for libname and the libraries corresponding to explicit and -dnl implicit dependencies, together with the specified include files and -dnl the ability to compile and link the specified testcode. The missing-message -dnl defaults to 'no' and may contain additional hints for the user. -dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} -dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and -dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs -dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. -dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname -dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. -AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], -[ - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - pushdef([Name],[translit([$1],[./-], [___])]) - pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) - - dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME - dnl accordingly. - AC_LIB_LINKFLAGS_BODY([$1], [$2]) - - dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, - dnl because if the user has installed lib[]Name and not disabled its use - dnl via --without-lib[]Name-prefix, he wants to use it. - ac_save_CPPFLAGS="$CPPFLAGS" - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) - - AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ - ac_save_LIBS="$LIBS" - dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, - dnl because these -l options might require -L options that are present in - dnl LIBS. -l options benefit only from the -L options listed before it. - dnl Otherwise, add it to the front of LIBS, because it may be a static - dnl library that depends on another static library that is present in LIBS. - dnl Static libraries benefit only from the static libraries listed after - dnl it. - case " $LIB[]NAME" in - *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; - *) LIBS="$LIB[]NAME $LIBS" ;; - esac - AC_TRY_LINK([$3], [$4], - [ac_cv_lib[]Name=yes], - [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) - LIBS="$ac_save_LIBS" - ]) - if test "$ac_cv_lib[]Name" = yes; then - HAVE_LIB[]NAME=yes - AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) - AC_MSG_CHECKING([how to link with lib[]$1]) - AC_MSG_RESULT([$LIB[]NAME]) - else - HAVE_LIB[]NAME=no - dnl If $LIB[]NAME didn't lead to a usable library, we don't need - dnl $INC[]NAME either. - CPPFLAGS="$ac_save_CPPFLAGS" - LIB[]NAME= - LTLIB[]NAME= - LIB[]NAME[]_PREFIX= - fi - AC_SUBST([HAVE_LIB]NAME) - AC_SUBST([LIB]NAME) - AC_SUBST([LTLIB]NAME) - AC_SUBST([LIB]NAME[_PREFIX]) - popdef([NAME]) - popdef([Name]) -]) - -dnl Determine the platform dependent parameters needed to use rpath: -dnl acl_libext, -dnl acl_shlibext, -dnl acl_hardcode_libdir_flag_spec, -dnl acl_hardcode_libdir_separator, -dnl acl_hardcode_direct, -dnl acl_hardcode_minus_L. -AC_DEFUN([AC_LIB_RPATH], -[ - dnl Tell automake >= 1.10 to complain if config.rpath is missing. - m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) - AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS - AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld - AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host - AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir - AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ - CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ - ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh - . ./conftest.sh - rm -f ./conftest.sh - acl_cv_rpath=done - ]) - wl="$acl_cv_wl" - acl_libext="$acl_cv_libext" - acl_shlibext="$acl_cv_shlibext" - acl_libname_spec="$acl_cv_libname_spec" - acl_library_names_spec="$acl_cv_library_names_spec" - acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" - acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" - acl_hardcode_direct="$acl_cv_hardcode_direct" - acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" - dnl Determine whether the user wants rpath handling at all. - AC_ARG_ENABLE([rpath], - [ --disable-rpath do not hardcode runtime library paths], - :, enable_rpath=yes) -]) - -dnl AC_LIB_FROMPACKAGE(name, package) -dnl declares that libname comes from the given package. The configure file -dnl will then not have a --with-libname-prefix option but a -dnl --with-package-prefix option. Several libraries can come from the same -dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar -dnl macro call that searches for libname. -AC_DEFUN([AC_LIB_FROMPACKAGE], -[ - pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) - define([acl_frompackage_]NAME, [$2]) - popdef([NAME]) - pushdef([PACK],[$2]) - pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) - define([acl_libsinpackage_]PACKUP, - m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1]) - popdef([PACKUP]) - popdef([PACK]) -]) - -dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and -dnl the libraries corresponding to explicit and implicit dependencies. -dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. -dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found -dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. -AC_DEFUN([AC_LIB_LINKFLAGS_BODY], -[ - AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) - pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) - pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) - pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) - pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) - dnl Autoconf >= 2.61 supports dots in --with options. - pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)]) - dnl By default, look in $includedir and $libdir. - use_additional=yes - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - AC_ARG_WITH(P_A_C_K[-prefix], -[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib - --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], -[ - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - else - additional_includedir="$withval/include" - additional_libdir="$withval/$acl_libdirstem" - if test "$acl_libdirstem2" != "$acl_libdirstem" \ - && ! test -d "$withval/$acl_libdirstem"; then - additional_libdir="$withval/$acl_libdirstem2" - fi - fi - fi -]) - dnl Search the library and its dependencies in $additional_libdir and - dnl $LDFLAGS. Using breadth-first-seach. - LIB[]NAME= - LTLIB[]NAME= - INC[]NAME= - LIB[]NAME[]_PREFIX= - dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been - dnl computed. So it has to be reset here. - HAVE_LIB[]NAME= - rpathdirs= - ltrpathdirs= - names_already_handled= - names_next_round='$1 $2' - while test -n "$names_next_round"; do - names_this_round="$names_next_round" - names_next_round= - for name in $names_this_round; do - already_handled= - for n in $names_already_handled; do - if test "$n" = "$name"; then - already_handled=yes - break - fi - done - if test -z "$already_handled"; then - names_already_handled="$names_already_handled $name" - dnl See if it was already located by an earlier AC_LIB_LINKFLAGS - dnl or AC_LIB_HAVE_LINKFLAGS call. - uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` - eval value=\"\$HAVE_LIB$uppername\" - if test -n "$value"; then - if test "$value" = yes; then - eval value=\"\$LIB$uppername\" - test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" - eval value=\"\$LTLIB$uppername\" - test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" - else - dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined - dnl that this library doesn't exist. So just drop it. - : - fi - else - dnl Search the library lib$name in $additional_libdir and $LDFLAGS - dnl and the already constructed $LIBNAME/$LTLIBNAME. - found_dir= - found_la= - found_so= - found_a= - eval libname=\"$acl_libname_spec\" # typically: libname=lib$name - if test -n "$acl_shlibext"; then - shrext=".$acl_shlibext" # typically: shrext=.so - else - shrext= - fi - if test $use_additional = yes; then - dir="$additional_libdir" - dnl The same code as in the loop below: - dnl First look for a shared library. - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" - fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then - found_dir="$dir" - found_so="$dir/$f" - break - fi - done - fi - fi - fi - dnl Then look for a static library. - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi - fi - if test "X$found_dir" = "X"; then - for x in $LDFLAGS $LTLIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - case "$x" in - -L*) - dir=`echo "X$x" | sed -e 's/^X-L//'` - dnl First look for a shared library. - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" - fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then - found_dir="$dir" - found_so="$dir/$f" - break - fi - done - fi - fi - fi - dnl Then look for a static library. - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi - ;; - esac - if test "X$found_dir" != "X"; then - break - fi - done - fi - if test "X$found_dir" != "X"; then - dnl Found the library. - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" - if test "X$found_so" != "X"; then - dnl Linking with a shared library. We attempt to hardcode its - dnl directory into the executable's runpath, unless it's the - dnl standard /usr/lib. - if test "$enable_rpath" = no \ - || test "X$found_dir" = "X/usr/$acl_libdirstem" \ - || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then - dnl No hardcoding is needed. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - dnl Use an explicit option to hardcode DIR into the resulting - dnl binary. - dnl Potentially add DIR to ltrpathdirs. - dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $found_dir" - fi - dnl The hardcoding into $LIBNAME is system dependent. - if test "$acl_hardcode_direct" = yes; then - dnl Using DIR/libNAME.so during linking hardcodes DIR into the - dnl resulting binary. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then - dnl Use an explicit option to hardcode DIR into the resulting - dnl binary. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - dnl Potentially add DIR to rpathdirs. - dnl The rpathdirs will be appended to $LIBNAME at the end. - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $found_dir" - fi - else - dnl Rely on "-L$found_dir". - dnl But don't add it if it's already contained in the LDFLAGS - dnl or the already constructed $LIBNAME - haveit= - for x in $LDFLAGS $LIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" - fi - if test "$acl_hardcode_minus_L" != no; then - dnl FIXME: Not sure whether we should use - dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" - dnl here. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH - dnl here, because this doesn't fit in flags passed to the - dnl compiler. So give up. No hardcoding. This affects only - dnl very old systems. - dnl FIXME: Not sure whether we should use - dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" - dnl here. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" - fi - fi - fi - fi - else - if test "X$found_a" != "X"; then - dnl Linking with a static library. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" - else - dnl We shouldn't come here, but anyway it's good to have a - dnl fallback. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" - fi - fi - dnl Assume the include files are nearby. - additional_includedir= - case "$found_dir" in - */$acl_libdirstem | */$acl_libdirstem/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` - if test "$name" = '$1'; then - LIB[]NAME[]_PREFIX="$basedir" - fi - additional_includedir="$basedir/include" - ;; - */$acl_libdirstem2 | */$acl_libdirstem2/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` - if test "$name" = '$1'; then - LIB[]NAME[]_PREFIX="$basedir" - fi - additional_includedir="$basedir/include" - ;; - esac - if test "X$additional_includedir" != "X"; then - dnl Potentially add $additional_includedir to $INCNAME. - dnl But don't add it - dnl 1. if it's the standard /usr/include, - dnl 2. if it's /usr/local/include and we are using GCC on Linux, - dnl 3. if it's already present in $CPPFLAGS or the already - dnl constructed $INCNAME, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - for x in $CPPFLAGS $INC[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - dnl Really add $additional_includedir to $INCNAME. - INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" - fi - fi - fi - fi - fi - dnl Look for dependencies. - if test -n "$found_la"; then - dnl Read the .la file. It defines the variables - dnl dlname, library_names, old_library, dependency_libs, current, - dnl age, revision, installed, dlopen, dlpreopen, libdir. - save_libdir="$libdir" - case "$found_la" in - */* | *\\*) . "$found_la" ;; - *) . "./$found_la" ;; - esac - libdir="$save_libdir" - dnl We use only dependency_libs. - for dep in $dependency_libs; do - case "$dep" in - -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. - dnl But don't add it - dnl 1. if it's the standard /usr/lib, - dnl 2. if it's /usr/local/lib and we are using GCC on Linux, - dnl 3. if it's already present in $LDFLAGS or the already - dnl constructed $LIBNAME, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ - && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then - haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ - || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - haveit= - for x in $LDFLAGS $LIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LIBNAME. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" - fi - fi - haveit= - for x in $LDFLAGS $LTLIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LTLIBNAME. - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" - fi - fi - fi - fi - ;; - -R*) - dir=`echo "X$dep" | sed -e 's/^X-R//'` - if test "$enable_rpath" != no; then - dnl Potentially add DIR to rpathdirs. - dnl The rpathdirs will be appended to $LIBNAME at the end. - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $dir" - fi - dnl Potentially add DIR to ltrpathdirs. - dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $dir" - fi - fi - ;; - -l*) - dnl Handle this in the next round. - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` - ;; - *.la) - dnl Handle this in the next round. Throw away the .la's - dnl directory; it is already contained in a preceding -L - dnl option. - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` - ;; - *) - dnl Most likely an immediate library name. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" - ;; - esac - done - fi - else - dnl Didn't find the library; assume it is in the system directories - dnl known to the linker and runtime loader. (All the system - dnl directories known to the linker should also be known to the - dnl runtime loader, otherwise the system is severely misconfigured.) - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" - fi - fi - fi - done - done - if test "X$rpathdirs" != "X"; then - if test -n "$acl_hardcode_libdir_separator"; then - dnl Weird platform: only the last -rpath option counts, the user must - dnl pass all path elements in one option. We can arrange that for a - dnl single library, but not when more than one $LIBNAMEs are used. - alldirs= - for found_dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" - done - dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" - else - dnl The -rpath options are cumulative. - for found_dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$found_dir" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" - done - fi - fi - if test "X$ltrpathdirs" != "X"; then - dnl When using libtool, the option that works for both libraries and - dnl executables is -R. The -R options are cumulative. - for found_dir in $ltrpathdirs; do - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" - done - fi - popdef([P_A_C_K]) - popdef([PACKLIBS]) - popdef([PACKUP]) - popdef([PACK]) - popdef([NAME]) -]) - -dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, -dnl unless already present in VAR. -dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes -dnl contains two or three consecutive elements that belong together. -AC_DEFUN([AC_LIB_APPENDTOVAR], -[ - for element in [$2]; do - haveit= - for x in $[$1]; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X$element"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - [$1]="${[$1]}${[$1]:+ }$element" - fi - done -]) - -dnl For those cases where a variable contains several -L and -l options -dnl referring to unknown libraries and directories, this macro determines the -dnl necessary additional linker options for the runtime path. -dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) -dnl sets LDADDVAR to linker options needed together with LIBSVALUE. -dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, -dnl otherwise linking without libtool is assumed. -AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], -[ - AC_REQUIRE([AC_LIB_RPATH]) - AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) - $1= - if test "$enable_rpath" != no; then - if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then - dnl Use an explicit option to hardcode directories into the resulting - dnl binary. - rpathdirs= - next= - for opt in $2; do - if test -n "$next"; then - dir="$next" - dnl No need to hardcode the standard /usr/lib. - if test "X$dir" != "X/usr/$acl_libdirstem" \ - && test "X$dir" != "X/usr/$acl_libdirstem2"; then - rpathdirs="$rpathdirs $dir" - fi - next= - else - case $opt in - -L) next=yes ;; - -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` - dnl No need to hardcode the standard /usr/lib. - if test "X$dir" != "X/usr/$acl_libdirstem" \ - && test "X$dir" != "X/usr/$acl_libdirstem2"; then - rpathdirs="$rpathdirs $dir" - fi - next= ;; - *) next= ;; - esac - fi - done - if test "X$rpathdirs" != "X"; then - if test -n ""$3""; then - dnl libtool is used for linking. Use -R options. - for dir in $rpathdirs; do - $1="${$1}${$1:+ }-R$dir" - done - else - dnl The linker is used for linking directly. - if test -n "$acl_hardcode_libdir_separator"; then - dnl Weird platform: only the last -rpath option counts, the user - dnl must pass all path elements in one option. - alldirs= - for dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" - done - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - $1="$flag" - else - dnl The -rpath options are cumulative. - for dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$dir" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - $1="${$1}${$1:+ }$flag" - done - fi - fi - fi - fi - fi - AC_SUBST([$1]) -]) - -# lib-prefix.m4 serial 7 (gettext-0.18) -dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and -dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't -dnl require excessive bracketing. -ifdef([AC_HELP_STRING], -[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], -[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) - -dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed -dnl to access previously installed libraries. The basic assumption is that -dnl a user will want packages to use other packages he previously installed -dnl with the same --prefix option. -dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate -dnl libraries, but is otherwise very convenient. -AC_DEFUN([AC_LIB_PREFIX], -[ - AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - dnl By default, look in $includedir and $libdir. - use_additional=yes - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - AC_LIB_ARG_WITH([lib-prefix], -[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib - --without-lib-prefix don't search for libraries in includedir and libdir], -[ - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - else - additional_includedir="$withval/include" - additional_libdir="$withval/$acl_libdirstem" - fi - fi -]) - if test $use_additional = yes; then - dnl Potentially add $additional_includedir to $CPPFLAGS. - dnl But don't add it - dnl 1. if it's the standard /usr/include, - dnl 2. if it's already present in $CPPFLAGS, - dnl 3. if it's /usr/local/include and we are using GCC on Linux, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - for x in $CPPFLAGS; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - dnl Really add $additional_includedir to $CPPFLAGS. - CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" - fi - fi - fi - fi - dnl Potentially add $additional_libdir to $LDFLAGS. - dnl But don't add it - dnl 1. if it's the standard /usr/lib, - dnl 2. if it's already present in $LDFLAGS, - dnl 3. if it's /usr/local/lib and we are using GCC on Linux, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then - haveit= - for x in $LDFLAGS; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then - if test -n "$GCC"; then - case $host_os in - linux*) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LDFLAGS. - LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" - fi - fi - fi - fi - fi -]) - -dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, -dnl acl_final_exec_prefix, containing the values to which $prefix and -dnl $exec_prefix will expand at the end of the configure script. -AC_DEFUN([AC_LIB_PREPARE_PREFIX], -[ - dnl Unfortunately, prefix and exec_prefix get only finally determined - dnl at the end of configure. - if test "X$prefix" = "XNONE"; then - acl_final_prefix="$ac_default_prefix" - else - acl_final_prefix="$prefix" - fi - if test "X$exec_prefix" = "XNONE"; then - acl_final_exec_prefix='${prefix}' - else - acl_final_exec_prefix="$exec_prefix" - fi - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" - prefix="$acl_save_prefix" -]) - -dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the -dnl variables prefix and exec_prefix bound to the values they will have -dnl at the end of the configure script. -AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], -[ - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - $1 - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" -]) - -dnl AC_LIB_PREPARE_MULTILIB creates -dnl - a variable acl_libdirstem, containing the basename of the libdir, either -dnl "lib" or "lib64" or "lib/64", -dnl - a variable acl_libdirstem2, as a secondary possible value for -dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or -dnl "lib/amd64". -AC_DEFUN([AC_LIB_PREPARE_MULTILIB], -[ - dnl There is no formal standard regarding lib and lib64. - dnl On glibc systems, the current practice is that on a system supporting - dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under - dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine - dnl the compiler's default mode by looking at the compiler's library search - dnl path. If at least one of its elements ends in /lib64 or points to a - dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. - dnl Otherwise we use the default, namely "lib". - dnl On Solaris systems, the current practice is that on a system supporting - dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under - dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or - dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. - AC_REQUIRE([AC_CANONICAL_HOST]) - acl_libdirstem=lib - acl_libdirstem2= - case "$host_os" in - solaris*) - dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment - dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>. - dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." - dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the - dnl symlink is missing, so we set acl_libdirstem2 too. - AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], - [AC_EGREP_CPP([sixtyfour bits], [ -#ifdef _LP64 -sixtyfour bits -#endif - ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) - ]) - if test $gl_cv_solaris_64bit = yes; then - acl_libdirstem=lib/64 - case "$host_cpu" in - sparc*) acl_libdirstem2=lib/sparcv9 ;; - i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; - esac - fi - ;; - *) - searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` - if test -n "$searchpath"; then - acl_save_IFS="${IFS= }"; IFS=":" - for searchdir in $searchpath; do - if test -d "$searchdir"; then - case "$searchdir" in - */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; - */../ | */.. ) - # Better ignore directories of this form. They are misleading. - ;; - *) searchdir=`cd "$searchdir" && pwd` - case "$searchdir" in - */lib64 ) acl_libdirstem=lib64 ;; - esac ;; - esac - fi - done - IFS="$acl_save_IFS" - fi - ;; - esac - test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" -]) - -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 1 (pkg-config-0.24) -# -# Copyright © 2004 Scott James Remnant <scott@netsplit.com>. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- -AC_DEFUN([PKG_PROG_PKG_CONFIG], -[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) -m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) -m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) -AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) -AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) -AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=m4_default([$1], [0.9.0]) - AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - PKG_CONFIG="" - fi -fi[]dnl -])# PKG_PROG_PKG_CONFIG - -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -# only at the first occurence in configure.ac, so if the first place -# it's called might be skipped (such as if it is within an "if", you -# have to call PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- -AC_DEFUN([PKG_CHECK_EXISTS], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -if test -n "$PKG_CONFIG" && \ - AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then - m4_default([$2], [:]) -m4_ifvaln([$3], [else - $3])dnl -fi]) - -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- -m4_define([_PKG_CONFIG], -[if test -n "$$1"; then - pkg_cv_[]$1="$$1" - elif test -n "$PKG_CONFIG"; then - PKG_CHECK_EXISTS([$3], - [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes ], - [pkg_failed=yes]) - else - pkg_failed=untried -fi[]dnl -])# _PKG_CONFIG - -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- -AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi[]dnl -])# _PKG_SHORT_ERRORS_SUPPORTED - - -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- -AC_DEFUN([PKG_CHECK_MODULES], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl -AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl - -pkg_failed=no -AC_MSG_CHECKING([for $1]) - -_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) -_PKG_CONFIG([$1][_LIBS], [libs], [$2]) - -m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS -and $1[]_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details.]) - -if test $pkg_failed = yes; then - AC_MSG_RESULT([no]) - _PKG_SHORT_ERRORS_SUPPORTED - if test $_pkg_short_errors_supported = yes; then - $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` - else - $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD - - m4_default([$4], [AC_MSG_ERROR( -[Package requirements ($2) were not met: - -$$1_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -_PKG_TEXT])[]dnl - ]) -elif test $pkg_failed = untried; then - AC_MSG_RESULT([no]) - m4_default([$4], [AC_MSG_FAILURE( -[The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -_PKG_TEXT - -To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl - ]) -else - $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS - $1[]_LIBS=$pkg_cv_[]$1[]_LIBS - AC_MSG_RESULT([yes]) - $3 -fi[]dnl -])# PKG_CHECK_MODULES - -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.11' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 9 - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 10 - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -#serial 5 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 8 - -# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. -AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 16 - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) - -dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST(install_sh)]) - -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 6 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_MKDIR_P -# --------------- -# Check for `mkdir -p'. -AC_DEFUN([AM_PROG_MKDIR_P], -[AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 5 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# Copyright (C) 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 1 - -# AM_SILENT_RULES([DEFAULT]) -# -------------------------- -# Enable less verbose build rules; with the default set to DEFAULT -# (`yes' being less verbose, `no' or empty being verbose). -AC_DEFUN([AM_SILENT_RULES], -[AC_ARG_ENABLE([silent-rules], -[ --enable-silent-rules less verbose build output (undo: `make V=1') - --disable-silent-rules verbose build output (undo: `make V=0')]) -case $enable_silent_rules in -yes) AM_DEFAULT_VERBOSITY=0;; -no) AM_DEFAULT_VERBOSITY=1;; -*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; -esac -AC_SUBST([AM_DEFAULT_VERBOSITY])dnl -AM_BACKSLASH='\' -AC_SUBST([AM_BACKSLASH])dnl -_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl -]) - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar <conftest.tar]) - grep GrepMe conftest.dir/file >/dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([m4/acx_pthread.m4]) -m4_include([m4/define-dir.m4]) -m4_include([m4/gtk-doc.m4]) -m4_include([m4/iconv.m4]) -m4_include([m4/introspection.m4]) -m4_include([m4/libjpeg.m4]) -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) diff --git a/Build/source/libs/poppler/poppler-0.18.0/config.h.cmake b/Build/source/libs/poppler/poppler-0.18.0/config.h.cmake deleted file mode 100644 index cae2e71f18a..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/config.h.cmake +++ /dev/null @@ -1,216 +0,0 @@ -/* config.h. Generated from config.h.cmake by cmake. */ - -/* Build against libcurl. */ -#cmakedefine ENABLE_LIBCURL 1 - -/* Use libjpeg instead of builtin jpeg decoder. */ -#cmakedefine ENABLE_LIBJPEG 1 - -/* Use libopenjpeg instead of builtin jpeg2000 decoder. */ -#cmakedefine ENABLE_LIBOPENJPEG 1 - -/* Build against libtiff. */ -#cmakedefine ENABLE_LIBTIFF 1 - -/* Build against libpng. */ -#cmakedefine ENABLE_LIBPNG 1 - -/* Do not hardcode the library location */ -#cmakedefine ENABLE_RELOCATABLE 1 - -/* Use zlib instead of builtin zlib decoder. */ -#cmakedefine ENABLE_ZLIB 1 - -/* Use cairo for rendering. */ -#cmakedefine HAVE_CAIRO 1 - -/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. - */ -#cmakedefine HAVE_DIRENT_H 1 - -/* Define to 1 if you have the <dlfcn.h> header file. */ -#cmakedefine HAVE_DLFCN_H 1 - -/* Define to 1 if you have the <fcntl.h> header file. */ -#cmakedefine HAVE_FCNTL_H 1 - -/* Have FreeType2 include files */ -#cmakedefine HAVE_FREETYPE_H 1 - -/* Define to 1 if you have the `fseek64' function. */ -#cmakedefine HAVE_FSEEK64 1 - -/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ -#cmakedefine HAVE_FSEEKO 1 - -/* Define to 1 if you have the `ftell64' function. */ -#cmakedefine HAVE_FTELL64 1 - -/* Defines if gettimeofday is available on your system */ -#cmakedefine HAVE_GETTIMEOFDAY 1 - -/* Defines if gmtime_r is available on your system */ -#cmakedefine HAVE_GMTIME_R 1 - -/* Define if you have the iconv() function and it works. */ -#cmakedefine HAVE_ICONV 1 - -/* Define to 1 if you have the <inttypes.h> header file. */ -#cmakedefine HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the `openjpeg' library (-lopenjpeg). */ -#cmakedefine HAVE_LIBOPENJPEG 1 - -/* Define to 1 if you have the `z' library (-lz). */ -#cmakedefine HAVE_LIBZ 1 - -/* Defines if localtime_r is available on your system */ -#cmakedefine HAVE_LOCALTIME_R 1 - -/* Define to 1 if you have the <memory.h> header file. */ -#cmakedefine HAVE_MEMORY_H 1 - -/* Define to 1 if you have the `mkstemp' function. */ -#cmakedefine HAVE_MKSTEMP 1 - -/* Define to 1 if you have the `mkstemps' function. */ -#cmakedefine HAVE_MKSTEMPS 1 - -/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ -#cmakedefine HAVE_NDIR_H 1 - -/* Define to 1 if you have the <openjpeg.h> header file. */ -#cmakedefine HAVE_OPENJPEG_H 1 - -/* Define to 1 if you have the `popen' function. */ -#cmakedefine HAVE_POPEN 1 - -/* Define if you have POSIX threads libraries and header files. */ -#cmakedefine HAVE_PTHREAD 1 - -/* Use splash for rendering. */ -#cmakedefine HAVE_SPLASH 1 - -/* Define to 1 if you have the <stdint.h> header file. */ -#cmakedefine HAVE_STDINT_H 1 - -/* Define to 1 if you have the <stdlib.h> header file. */ -#cmakedefine HAVE_STDLIB_H 1 - -/* Define to 1 if you have the <strings.h> header file. */ -#cmakedefine HAVE_STRINGS_H 1 - -/* Define to 1 if you have the <string.h> header file. */ -#cmakedefine HAVE_STRING_H 1 - -/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'. - */ -#cmakedefine HAVE_SYS_DIR_H 1 - -/* Define to 1 if you have the <sys/mman.h> header file. */ -#cmakedefine HAVE_SYS_MMAN_H 1 - -/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'. - */ -#cmakedefine HAVE_SYS_NDIR_H 1 - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#cmakedefine HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the <sys/types.h> header file. */ -#cmakedefine HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the <unistd.h> header file. */ -#cmakedefine HAVE_UNISTD_H 1 - -/* Define to 1 if you have the <zlib.h> header file. */ -#cmakedefine HAVE_ZLIB_H 1 - -/* Define to 1 if you have a big endian machine */ -#cmakedefine WORDS_BIGENDIAN 1 - -/* Define as const if the declaration of iconv() needs const. */ -#define ICONV_CONST ${ICONV_CONST} - -/* Enable multithreading support. */ -#cmakedefine MULTITHREADED 1 - -/* Generate OPI comments in PS output. */ -#cmakedefine OPI_SUPPORT 1 - -/* Name of package */ -#define PACKAGE "poppler" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "https://bugs.freedesktop.org/enter_bug.cgi?product=poppler" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "poppler" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "poppler ${POPPLER_VERSION}" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "poppler" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "${POPPLER_VERSION}" - -/* Poppler data dir */ -#define POPPLER_DATADIR "${CMAKE_INSTALL_PREFIX}/share/poppler" - -/* Support for curl based doc builder is compiled in. */ -#cmakedefine POPPLER_HAS_CURL_SUPPORT 1 - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Enable word list support. */ -#cmakedefine TEXTOUT_WORD_LIST 1 - -/* Defines if use cms */ -#cmakedefine USE_CMS 1 - -/* Use fixed point arithmetic in the Splash backend */ -#cmakedefine USE_FIXEDPOINT 1 - -/* Use single precision arithmetic in the Splash backend */ -#cmakedefine USE_FLOAT 1 - -/* Version number of package */ -#define VERSION "${POPPLER_VERSION}" - -/* Use fontconfig font configuration backend */ -#cmakedefine WITH_FONTCONFIGURATION_FONTCONFIG 1 - -/* Use win32 font configuration backend */ -#cmakedefine WITH_FONTCONFIGURATION_WIN32 1 - -/* Define to 1 if the X Window System is missing or not being used. */ -/* #undef X_DISPLAY_MISSING */ - -/* - * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system - * headers and I'm too lazy to write a configure test as long as only - * unixware is related - */ -#ifdef _UNIXWARE -#define HAVE_BOOLEAN -#endif - -/* MS has defined snprintf as deprecated */ -#ifdef _MSC_VER -#define snprintf _snprintf -#endif - -/* Number of bits in a file offset, on hosts where this is settable. */ -/* #undef _FILE_OFFSET_BITS */ - -/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ -/* #undef _LARGEFILE_SOURCE */ - -/* Define for large files, on AIX-style hosts. */ -/* #undef _LARGE_FILES */ diff --git a/Build/source/libs/poppler/poppler-0.18.0/config.h.in b/Build/source/libs/poppler/poppler-0.18.0/config.h.in deleted file mode 100644 index 6150ad72a08..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/config.h.in +++ /dev/null @@ -1,238 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define if building universal (internal helper macro) */ -#undef AC_APPLE_UNIVERSAL_BUILD - -/* Build against libcurl. */ -#undef ENABLE_LIBCURL - -/* Use libjpeg instead of builtin jpeg decoder. */ -#undef ENABLE_LIBJPEG - -/* Use libopenjpeg instead of builtin jpeg2000 decoder. */ -#undef ENABLE_LIBOPENJPEG - -/* Build against libpng. */ -#undef ENABLE_LIBPNG - -/* Build against libtiff. */ -#undef ENABLE_LIBTIFF - -/* Do not hardcode the library location */ -#undef ENABLE_RELOCATABLE - -/* Use zlib instead of builtin zlib decoder. */ -#undef ENABLE_ZLIB - -/* Use cairo for rendering. */ -#undef HAVE_CAIRO - -/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. - */ -#undef HAVE_DIRENT_H - -/* Define to 1 if you have the <dlfcn.h> header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the <fcntl.h> header file. */ -#undef HAVE_FCNTL_H - -/* Have FreeType2 include files */ -#undef HAVE_FREETYPE_H - -/* Define to 1 if you have the `fseek64' function. */ -#undef HAVE_FSEEK64 - -/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ -#undef HAVE_FSEEKO - -/* Define to 1 if you have the `ftell64' function. */ -#undef HAVE_FTELL64 - -/* Defines if gettimeofday is available on your system */ -#undef HAVE_GETTIMEOFDAY - -/* Defines if gmtime_r is available on your system */ -#undef HAVE_GMTIME_R - -/* Define if you have the iconv() function and it works. */ -#undef HAVE_ICONV - -/* Define to 1 if you have the <inttypes.h> header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the `openjpeg' library (-lopenjpeg). */ -#undef HAVE_LIBOPENJPEG - -/* Define to 1 if you have the `tiff' library (-ltiff). */ -#undef HAVE_LIBTIFF - -/* Define to 1 if you have the `z' library (-lz). */ -#undef HAVE_LIBZ - -/* Defines if localtime_r is available on your system */ -#undef HAVE_LOCALTIME_R - -/* Define to 1 if you have the <memory.h> header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `mkstemp' function. */ -#undef HAVE_MKSTEMP - -/* Define to 1 if you have the `mkstemps' function. */ -#undef HAVE_MKSTEMPS - -/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ -#undef HAVE_NDIR_H - -/* Define to 1 if you have the <openjpeg.h> header file. */ -#undef HAVE_OPENJPEG_H - -/* Define to 1 if you have the `popen' function. */ -#undef HAVE_POPEN - -/* Define if you have POSIX threads libraries and header files. */ -#undef HAVE_PTHREAD - -/* Use splash for rendering. */ -#undef HAVE_SPLASH - -/* Define to 1 if you have the <stdint.h> header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the <stdlib.h> header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the <strings.h> header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the <string.h> header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'. - */ -#undef HAVE_SYS_DIR_H - -/* Define to 1 if you have the <sys/mman.h> header file. */ -#undef HAVE_SYS_MMAN_H - -/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'. - */ -#undef HAVE_SYS_NDIR_H - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the <sys/types.h> header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the <tiffio.h> header file. */ -#undef HAVE_TIFFIO_H - -/* Define to 1 if you have the <unistd.h> header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if you have the <zlib.h> header file. */ -#undef HAVE_ZLIB_H - -/* Define as const if the declaration of iconv() needs const. */ -#undef ICONV_CONST - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#undef LT_OBJDIR - -/* Enable multithreading support. */ -#undef MULTITHREADED - -/* Generate OPI comments in PS output. */ -#undef OPI_SUPPORT - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Poppler data dir */ -#undef POPPLER_DATADIR - -/* Support for curl based doc builder is compiled in. */ -#undef POPPLER_HAS_CURL_SUPPORT - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -#undef PTHREAD_CREATE_JOINABLE - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Enable word list support. */ -#undef TEXTOUT_WORD_LIST - -/* Defines if use cms */ -#undef USE_CMS - -/* Use fixed point arithmetic in the Splash backend */ -#undef USE_FIXEDPOINT - -/* Use single precision arithmetic in the Splash backend */ -#undef USE_FLOAT - -/* Version number of package */ -#undef VERSION - -/* Use fontconfig font configuration backend */ -#undef WITH_FONTCONFIGURATION_FONTCONFIG - -/* Use win32 font configuration backend */ -#undef WITH_FONTCONFIGURATION_WIN32 - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -# undef WORDS_BIGENDIAN -# endif -#endif - -/* Define to 1 if the X Window System is missing or not being used. */ -#undef X_DISPLAY_MISSING - -/* - * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system - * headers and I'm too lazy to write a configure test as long as only - * unixware is related - */ -#ifdef _UNIXWARE -#define HAVE_BOOLEAN -#endif - - -/* Number of bits in a file offset, on hosts where this is settable. */ -#undef _FILE_OFFSET_BITS - -/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ -#undef _LARGEFILE_SOURCE - -/* Define for large files, on AIX-style hosts. */ -#undef _LARGE_FILES diff --git a/Build/source/libs/poppler/poppler-0.18.0/configure b/Build/source/libs/poppler/poppler-0.18.0/configure deleted file mode 100755 index 2898d089882..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/configure +++ /dev/null @@ -1,25602 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for poppler 0.18.0. -# -# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=poppler>. -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1 - - test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ - || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - # Preserve -v and -x to the replacement shell. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; - esac - exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: https://bugs.freedesktop.org/enter_bug.cgi?product=poppler -$0: about your system, including any error possibly output -$0: before this message. Then install a modern shell, or -$0: manually run the script under such a shell if you do -$0: have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - -SHELL=${CONFIG_SHELL-/bin/sh} - - -test -n "$DJDIR" || exec 7<&0 </dev/null -exec 6>&1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='poppler' -PACKAGE_TARNAME='poppler' -PACKAGE_VERSION='0.18.0' -PACKAGE_STRING='poppler 0.18.0' -PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=poppler' -PACKAGE_URL='' - -# Factoring default headers for most tests. -ac_includes_default="\ -#include <stdio.h> -#ifdef HAVE_SYS_TYPES_H -# include <sys/types.h> -#endif -#ifdef HAVE_SYS_STAT_H -# include <sys/stat.h> -#endif -#ifdef STDC_HEADERS -# include <stdlib.h> -# include <stddef.h> -#else -# ifdef HAVE_STDLIB_H -# include <stdlib.h> -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include <memory.h> -# endif -# include <string.h> -#endif -#ifdef HAVE_STRINGS_H -# include <strings.h> -#endif -#ifdef HAVE_INTTYPES_H -# include <inttypes.h> -#endif -#ifdef HAVE_STDINT_H -# include <stdint.h> -#endif -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -POPPLER_VERSION -POPPLER_MICRO_VERSION -POPPLER_MINOR_VERSION -POPPLER_MAJOR_VERSION -PC_REQUIRES_PRIVATE -PC_REQUIRES -USE_CMS_FALSE -USE_CMS_TRUE -LCMS_LIBS -LCMS_CFLAGS -BUILD_UTILS_FALSE -BUILD_UTILS_TRUE -BUILD_GTK_TEST_FALSE -BUILD_GTK_TEST_TRUE -GTK_TEST_LIBS -GTK_TEST_CFLAGS -BUILD_POPPLER_CPP_FALSE -BUILD_POPPLER_CPP_TRUE -LTLIBICONV -LIBICONV -BUILD_POPPLER_QT4_FALSE -BUILD_POPPLER_QT4_TRUE -MOCQT4 -POPPLER_QT4_CXXFLAGS -POPPLER_QT4_TEST_LIBS -POPPLER_QT4_TEST_CFLAGS -POPPLER_QT4_LIBS -POPPLER_QT4_CFLAGS -GTK_DOC_USE_REBASE_FALSE -GTK_DOC_USE_REBASE_TRUE -GTK_DOC_USE_LIBTOOL_FALSE -GTK_DOC_USE_LIBTOOL_TRUE -GTK_DOC_BUILD_PDF_FALSE -GTK_DOC_BUILD_PDF_TRUE -GTK_DOC_BUILD_HTML_FALSE -GTK_DOC_BUILD_HTML_TRUE -ENABLE_GTK_DOC_FALSE -ENABLE_GTK_DOC_TRUE -HTML_DIR -GTKDOC_MKPDF -GTKDOC_REBASE -GTKDOC_CHECK -POPPLER_GLIB_DISABLE_SINGLE_INCLUDES -POPPLER_GLIB_DISABLE_DEPRECATED -GLIB_REQ -BUILD_POPPLER_GLIB_FALSE -BUILD_POPPLER_GLIB_TRUE -GLIB_MKENUMS -HAVE_INTROSPECTION_FALSE -HAVE_INTROSPECTION_TRUE -INTROSPECTION_MAKEFILE -INTROSPECTION_LIBS -INTROSPECTION_CFLAGS -INTROSPECTION_TYPELIBDIR -INTROSPECTION_GIRDIR -INTROSPECTION_GENERATE -INTROSPECTION_COMPILER -INTROSPECTION_SCANNER -POPPLER_GLIB_LIBS -POPPLER_GLIB_CFLAGS -CAIRO_REQ -CAIRO_FEATURE -BUILD_CAIRO_OUTPUT_FALSE -BUILD_CAIRO_OUTPUT_TRUE -CAIRO_LIBS -CAIRO_CFLAGS -CAIRO_VERSION -BUILD_SPLASH_OUTPUT_FALSE -BUILD_SPLASH_OUTPUT_TRUE -BUILD_WITH_WIN32_FONTCONFIGURATION_FALSE -BUILD_WITH_WIN32_FONTCONFIGURATION_TRUE -FONTCONFIG_LIBS -FONTCONFIG_CFLAGS -FREETYPE_CONFIG -FREETYPE_LIBS -FREETYPE_CFLAGS -BUILD_LIBPNG_FALSE -BUILD_LIBPNG_TRUE -LIBPNG_LIBS -LIBPNG_CFLAGS -BUILD_LIBJPEG_FALSE -BUILD_LIBJPEG_TRUE -LIBJPEG_LIBS -BUILD_LIBCURL_FALSE -BUILD_LIBCURL_TRUE -LIBCURL_LIBS -LIBCURL_CFLAGS -BUILD_ZLIB_FALSE -BUILD_ZLIB_TRUE -ZLIB_LIBS -BUILD_LIBTIFF_FALSE -BUILD_LIBTIFF_TRUE -LIBTIFF_LIBS -BUILD_LIBOPENJPEG_FALSE -BUILD_LIBOPENJPEG_TRUE -LIBOPENJPEG_LIBS -X_EXTRA_LIBS -X_LIBS -X_PRE_LIBS -X_CFLAGS -XMKMF -POPPLER_DATADIR -ENABLE_XPDF_HEADERS_FALSE -ENABLE_XPDF_HEADERS_TRUE -PTHREAD_CFLAGS -PTHREAD_LIBS -PTHREAD_CC -acx_pthread_config -auto_import_flags -create_shared_lib -win32_libs -PKG_CONFIG_LIBDIR -PKG_CONFIG_PATH -PKG_CONFIG -CXXCPP -am__fastdepCXX_FALSE -am__fastdepCXX_TRUE -CXXDEPMODE -ac_ct_CXX -CXXFLAGS -CXX -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -MANIFEST_TOOL -RANLIB -ac_ct_AR -AR -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -SED -LIBTOOL -OBJDUMP -DLLTOOL -AS -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -EGREP -GREP -CPP -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -AM_BACKSLASH -AM_DEFAULT_VERBOSITY -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_silent_rules -enable_dependency_tracking -enable_shared -enable_static -with_pic -enable_fast_install -with_gnu_ld -with_sysroot -enable_libtool_lock -enable_xpdf_headers -enable_single_precision -enable_fixedpoint -enable_relocatable -with_x -enable_libopenjpeg -enable_libtiff -enable_largefile -enable_zlib -enable_libcurl -enable_libjpeg -enable_libpng -with_font_configuration -enable_splash_output -enable_cairo_output -enable_poppler_glib -enable_introspection -with_html_dir -enable_gtk_doc -enable_gtk_doc_html -enable_gtk_doc_pdf -enable_poppler_qt4 -enable_poppler_cpp -with_libiconv_prefix -enable_gtk_test -enable_utils -enable_compile_warnings -enable_cms -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP -CXX -CXXFLAGS -CCC -CXXCPP -PKG_CONFIG -PKG_CONFIG_PATH -PKG_CONFIG_LIBDIR -XMKMF -LIBCURL_CFLAGS -LIBCURL_LIBS -LIBPNG_CFLAGS -LIBPNG_LIBS -FREETYPE_CFLAGS -FREETYPE_LIBS -FONTCONFIG_CFLAGS -FONTCONFIG_LIBS -CAIRO_CFLAGS -CAIRO_LIBS -POPPLER_GLIB_CFLAGS -POPPLER_GLIB_LIBS -POPPLER_QT4_CFLAGS -POPPLER_QT4_LIBS -POPPLER_QT4_TEST_CFLAGS -POPPLER_QT4_TEST_LIBS -GTK_TEST_CFLAGS -GTK_TEST_LIBS -LCMS_CFLAGS -LCMS_LIBS' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures poppler 0.18.0 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/poppler] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -X features: - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of poppler 0.18.0:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-silent-rules less verbose build output (undo: `make V=1') - --disable-silent-rules verbose build output (undo: `make V=0') - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - --enable-xpdf-headers Install unsupported xpdf headers. - --enable-single-precision use single precision arithmetic (instead of double precision) in the Splash backend - --enable-fixedpoint use fixed point (instead of double precision) arithmetic in the Splash backend - --disable-relocatable Hardcode the poppler library location (on Windows). - --disable-libopenjpeg Don't build against libopenjpeg. - --disable-libtiff Don't build against libtiff. - --disable-largefile omit support for large files - --enable-zlib Build with zlib - --enable-libcurl Build with libcurl based HTTP support. - --disable-libjpeg Don't build against libjpeg. - --disable-libpng Do not build against libpng. - --disable-splash-output Don't build the Splash graphics backend. - --disable-cairo-output Don't build the cairo graphics backend. - --disable-poppler-glib Don't compile poppler glib wrapper. - --enable-introspection=[no/auto/yes] - Enable introspection for this build - --enable-gtk-doc use gtk-doc to build documentation [[default=no]] - --enable-gtk-doc-html build documentation in html format [[default=yes]] - --enable-gtk-doc-pdf build documentation in pdf format [[default=no]] - --disable-poppler-qt4 Don't compile poppler Qt4 wrapper. - --disable-poppler-cpp Don't compile poppler cpp wrapper. - --disable-gtk-test Don't compile GTK+ test program. - --disable-utils Don't compile poppler command line utils. - --enable-compile-warnings=[no/yes/kde] - Turn on compiler warnings. - - --disable-cms Don't use color management system. - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-sysroot=DIR Search for dependent libraries within DIR - (or the compiler's sysroot if not specified). - --with-x use the X Window System - --with-font-configuration=fontconfig|win32 - Select font configuration backend - --with-html-dir=PATH path to installed docs - --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib - --without-libiconv-prefix don't search for libiconv in includedir and libdir - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a - nonstandard directory <lib dir> - LIBS libraries to pass to the linker, e.g. -l<library> - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if - you have headers in a nonstandard directory <include dir> - CPP C preprocessor - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CXXCPP C++ preprocessor - PKG_CONFIG path to pkg-config utility - PKG_CONFIG_PATH - directories to add to pkg-config's search path - PKG_CONFIG_LIBDIR - path overriding pkg-config's built-in search path - XMKMF Path to xmkmf, Makefile generator for X Window System - LIBCURL_CFLAGS - C compiler flags for LIBCURL, overriding pkg-config - LIBCURL_LIBS - linker flags for LIBCURL, overriding pkg-config - LIBPNG_CFLAGS - C compiler flags for LIBPNG, overriding pkg-config - LIBPNG_LIBS linker flags for LIBPNG, overriding pkg-config - FREETYPE_CFLAGS - C compiler flags for FREETYPE, overriding pkg-config - FREETYPE_LIBS - linker flags for FREETYPE, overriding pkg-config - FONTCONFIG_CFLAGS - C compiler flags for FONTCONFIG, overriding pkg-config - FONTCONFIG_LIBS - linker flags for FONTCONFIG, overriding pkg-config - CAIRO_CFLAGS - C compiler flags for CAIRO, overriding pkg-config - CAIRO_LIBS linker flags for CAIRO, overriding pkg-config - POPPLER_GLIB_CFLAGS - C compiler flags for POPPLER_GLIB, overriding pkg-config - POPPLER_GLIB_LIBS - linker flags for POPPLER_GLIB, overriding pkg-config - POPPLER_QT4_CFLAGS - C compiler flags for POPPLER_QT4, overriding pkg-config - POPPLER_QT4_LIBS - linker flags for POPPLER_QT4, overriding pkg-config - POPPLER_QT4_TEST_CFLAGS - C compiler flags for POPPLER_QT4_TEST, overriding pkg-config - POPPLER_QT4_TEST_LIBS - linker flags for POPPLER_QT4_TEST, overriding pkg-config - GTK_TEST_CFLAGS - C compiler flags for GTK_TEST, overriding pkg-config - GTK_TEST_LIBS - linker flags for GTK_TEST, overriding pkg-config - LCMS_CFLAGS C compiler flags for LCMS, overriding pkg-config - LCMS_LIBS linker flags for LCMS, overriding pkg-config - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=poppler>. -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -poppler configure 0.18.0 -generated by GNU Autoconf 2.68 - -Copyright (C) 2010 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case <limits.h> declares $2. - For example, HP-UX 11i <limits.h> declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - <limits.h> exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_compile - -# ac_fn_cxx_try_cpp LINENO -# ------------------------ -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_cpp - -# ac_fn_cxx_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_link - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ------------------------------------------------------------------------- ## -## Report this to https://bugs.freedesktop.org/enter_bug.cgi?product=poppler ## -## ------------------------------------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel - -# ac_fn_cxx_check_decl LINENO SYMBOL VAR INCLUDES -# ----------------------------------------------- -# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. -ac_fn_cxx_check_decl () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - as_decl_name=`echo $2|sed 's/ *(.*//'` - as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -#ifndef $as_decl_name -#ifdef __cplusplus - (void) $as_decl_use; -#else - (void) $as_decl_name; -#endif -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_cxx_check_decl - -# ac_fn_cxx_check_func LINENO FUNC VAR -# ------------------------------------ -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_cxx_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case <limits.h> declares $2. - For example, HP-UX 11i <limits.h> declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - <limits.h> exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_cxx_check_func - -# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES -# --------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_cxx_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ------------------------------------------------------------------------- ## -## Report this to https://bugs.freedesktop.org/enter_bug.cgi?product=poppler ## -## ------------------------------------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_cxx_check_header_mongrel -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by poppler $as_me 0.18.0, which was -generated by GNU Autoconf 2.68. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -am__api_version='1.11' - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error $? "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='poppler' - VERSION='0.18.0' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - -# Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : - enableval=$enable_silent_rules; -fi - -case $enable_silent_rules in -yes) AM_DEFAULT_VERBOSITY=0;; -no) AM_DEFAULT_VERBOSITY=1;; -*) AM_DEFAULT_VERBOSITY=0;; -esac -AM_BACKSLASH='\' - -ac_config_headers="$ac_config_headers config.h" - -ac_config_headers="$ac_config_headers poppler/poppler-config.h" - -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdio.h> -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdarg.h> -#include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <string.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ctype.h> -#include <stdlib.h> -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if ${ac_cv_c_bigendian+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - #include <sys/param.h> - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - #include <sys/param.h> - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <limits.h> - -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <limits.h> - -int -main () -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; - -int -main () -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h -;; #( - no) - ;; #( - universal) - -$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h - - ;; #( - *) - as_fn_error $? "unknown endianness - presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; - esac - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. -set dummy ${ac_tool_prefix}as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AS+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AS"; then - ac_cv_prog_AS="$AS" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AS="${ac_tool_prefix}as" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AS=$ac_cv_prog_AS -if test -n "$AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 -$as_echo "$AS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AS"; then - ac_ct_AS=$AS - # Extract the first word of "as", so it can be a program name with args. -set dummy as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AS+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AS"; then - ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AS="as" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AS=$ac_cv_prog_ac_ct_AS -if test -n "$ac_ct_AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 -$as_echo "$ac_ct_AS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AS" = x; then - AS="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AS=$ac_ct_AS - fi -else - AS="$ac_cv_prog_AS" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - - ;; -esac - -test -z "$AS" && AS=as - - - - - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.4' -macro_revision='1.3293' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "" -} - -case "$ECHO" in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; -esac - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in - *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break - ;; - *) - test "$with_gnu_ld" != yes && break - ;; - esac - fi - done - IFS="$lt_save_ifs" -else - lt_cv_path_LD="$LD" # Let the user override the test with a path. -fi -fi - -LD="$lt_cv_path_LD" -if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 </dev/null` in -*GNU* | *'with BFD'*) - lt_cv_prog_gnu_ld=yes - ;; -*) - lt_cv_prog_gnu_ld=no - ;; -esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac - -fi - -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac - -fi - -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test "$GCC" != yes; then - reload_cmds=false - fi - ;; - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - - -if test -n "$ac_tool_prefix"; then - for ac_prog in ar - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_AR" && break -done - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -fi - -: ${AR=ar} -: ${AR_FLAGS=cru} - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ar_at_file=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -ne 0; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } - -if test "x$lt_cv_ar_at_file" = xno; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } - -# Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : - withval=$with_sysroot; -else - with_sysroot=no -fi - - -lt_sysroot= -case ${with_sysroot} in #( - yes) - if test "$GCC" = yes; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 -$as_echo "${with_sysroot}" >&6; } - as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 - ;; -esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } - - - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. -set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MANIFEST_TOOL"; then - ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL -if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_MANIFEST_TOOL"; then - ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL - # Extract the first word of "mt", so it can be a program name with args. -set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_MANIFEST_TOOL"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL -if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_MANIFEST_TOOL" = x; then - MANIFEST_TOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL - fi -else - MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" -fi - -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&5 - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test "x$lt_cv_path_mainfest_tool" != xyes; then - MANIFEST_TOOL=: -fi - - - - - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 - echo "$RANLIB libconftest.a" >&5 - $RANLIB libconftest.a 2>&5 - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&5 - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - - - -# Set options - - - - enable_dlopen=no - - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; - *) - lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - lt_prog_compiler_wl='-Xlinker ' - lt_prog_compiler_pic='-Xcompiler -fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ F* | *Sun*Fortran*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } -lt_prog_compiler_pic=$lt_cv_prog_compiler_pic - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; - *\ \(GNU\ Binutils\)\ [3-9]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - export_dynamic_flag_spec='${wl}--export-all-symbols' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - haiku*) - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - link_all_deplibs=yes - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld='-rpath $libdir' - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - fi - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - always_export_symbols=yes - file_list_spec='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, )='true' - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - old_postinstall_cmds='chmod 644 $oldlib' - postlink_cmds='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - enable_shared_with_static_runtimes=yes - ;; - esac - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - else - whole_archive_flag_spec='' - fi - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler__b=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -b" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler__b=yes - fi - else - lt_cv_prog_compiler__b=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } - -if test x"$lt_cv_prog_compiler__b" = xyes; then - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' -fi - - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo (void) { return 0; } -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_irix_exported_symbol=yes -else - lt_cv_irix_exported_symbol=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } - if test "$lt_cv_irix_exported_symbol" = yes; then - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - fi - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc=no - else - lt_cv_archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } - archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([A-Za-z]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib<name>.so - # instead of lib<name>.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include <dlfcn.h> -#endif - -#include <stdio.h> - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include <dlfcn.h> -#endif - -#include <stdio.h> - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdarg.h> -#include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CXX" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CXX_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - - - -func_stripname_cnf () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname_cnf - - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -else - _lt_caught_CXX_error=yes -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -compiler_needs_object_CXX=no -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_direct_absolute_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_flag_spec_ld_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -inherit_rpath_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -reload_flag_CXX=$reload_flag -reload_cmds_CXX=$reload_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - - # save warnings/boilerplate of simple test code - ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - - ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - compiler_CXX=$CC - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` - - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' - else - lt_prog_compiler_no_builtin_flag_CXX= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in - *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break - ;; - *) - test "$with_gnu_ld" != yes && break - ;; - esac - fi - done - IFS="$lt_save_ifs" -else - lt_cv_path_LD="$LD" # Let the user override the test with a path. -fi -fi - -LD="$lt_cv_path_LD" -if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 </dev/null` in -*GNU* | *'with BFD'*) - lt_cv_prog_gnu_ld=yes - ;; -*) - lt_cv_prog_gnu_ld=no - ;; -esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - ld_shlibs_CXX=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - file_list_spec_CXX='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec_CXX='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath__CXX -fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath__CXX -fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - fi - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_CXX=' ' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=yes - file_list_spec_CXX='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' - enable_shared_with_static_runtimes_CXX=yes - # Don't use ranlib - old_postinstall_cmds_CXX='chmod 644 $oldlib' - postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - esac - ;; - darwin* | rhapsody*) - - - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - else - whole_archive_flag_spec_CXX='' - fi - link_all_deplibs_CXX=yes - allow_undefined_flag_CXX="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - if test "$lt_cv_apple_cc_single_mod" != "yes"; then - archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi - - else - ld_shlibs_CXX=no - fi - - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - freebsd[12]*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - ld_shlibs_CXX=no - ;; - - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - - gnu*) - ;; - - haiku*) - archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - link_all_deplibs_CXX=yes - ;; - - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - interix[3-9]*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - inherit_rpath_CXX=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [1-5].* | *pgcpp\ [1-5].*) - prelink_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - old_archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - hardcode_libdir_flag_spec_CXX='-R$libdir' - whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object_CXX=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - ld_shlibs_CXX=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - hardcode_direct_absolute_CXX=yes - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - ld_shlibs_CXX=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - case $host in - osf3*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - ;; - *) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - ;; - esac - - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='${wl}-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_CXX='${wl}-z,text' - allow_undefined_flag_CXX='${wl}-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ - '"$old_archive_cmds_CXX" - reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ - '"$reload_cmds_CXX" - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } - test "$ld_shlibs_CXX" = no && can_build_shared=no - - GCC_CXX="$GXX" - LD_CXX="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - # Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= - -cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF - - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -esac - -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS - -# PORTME: override above test on systems where it is broken -case $host_os in -interix[3-9]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac - - -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - compiler_lib_search_dirs_CXX= -if test -n "${compiler_lib_search_path_CXX}"; then - compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - - - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic_CXX='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static_CXX= - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix[4-9]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-qpic' - lt_prog_compiler_static_CXX='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } -lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works_CXX=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works_CXX=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works_CXX=yes - fi - else - lt_cv_prog_compiler_static_works_CXX=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then - : -else - lt_prog_compiler_static_CXX= -fi - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - case $host_os in - aix[4-9]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - ;; - esac - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -with_gnu_ld_CXX=$with_gnu_ld - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc_CXX=no - else - lt_cv_archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } - archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib<name>.so - # instead of lib<name>.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test "X$hardcode_automatic_CXX" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } - -if test "$hardcode_action_CXX" = relink || - test "$inherit_rpath_CXX" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 -$as_echo_n "checking for library containing strerror... " >&6; } -if ${ac_cv_search_strerror+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char strerror (); -int -main () -{ -return strerror (); - ; - return 0; -} -_ACEOF -for ac_lib in '' cposix; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_strerror=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_strerror+:} false; then : - break -fi -done -if ${ac_cv_search_strerror+:} false; then : - -else - ac_cv_search_strerror=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 -$as_echo "$ac_cv_search_strerror" >&6; } -ac_res=$ac_cv_search_strerror -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - - case $ac_cv_prog_cc_stdc in #( - no) : - ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( - *) : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 -$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } -if ${ac_cv_prog_cc_c99+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdarg.h> -#include <stdbool.h> -#include <stdlib.h> -#include <wchar.h> -#include <stdio.h> - -// Check varargs macros. These examples are taken from C99 6.10.3.5. -#define debug(...) fprintf (stderr, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} - -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - your preprocessor is broken; -#endif -#if BIG_OK -#else - your preprocessor is broken; -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; - -struct incomplete_array -{ - int datasize; - double data[]; -}; - -struct named_init { - int number; - const wchar_t *name; - double average; -}; - -typedef const char *ccp; - -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\0'; ++i) - continue; - return 0; -} - -// Check varargs and va_copy. -static void -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); - - const char *str; - int number; - float fnumber; - - while (*format) - { - switch (*format++) - { - case 's': // string - str = va_arg (args_copy, const char *); - break; - case 'd': // int - number = va_arg (args_copy, int); - break; - case 'f': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); -} - -int -main () -{ - - // Check bool. - _Bool success = false; - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - test_varargs ("s, d' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' - || dynamic_array[ni.number - 1] != 543); - - ; - return 0; -} -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c99" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c99" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c99" != xno; then : - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdarg.h> -#include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 -else - ac_cv_prog_cc_stdc=no -fi - -fi - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 -$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } - if ${ac_cv_prog_cc_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -fi - - case $ac_cv_prog_cc_stdc in #( - no) : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; #( - '') : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; #( - *) : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 -$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; -esac - -#if test -z "$CXX" -a "$CC" = "gcc"; then -# CXX="gcc" -#fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CXX" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CXX_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - -if test "x$GXX" = "xyes"; then - case "$host_os" in - cygwin* | mingw*) - ;; - *) - CXXFLAGS="$CXXFLAGS -ansi" - ;; - esac -fi - - - - - - - - - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_PKG_CONFIG"; then - ac_pt_PKG_CONFIG=$PKG_CONFIG - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG -if test -n "$ac_pt_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -$as_echo "$ac_pt_PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_PKG_CONFIG" = x; then - PKG_CONFIG="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - PKG_CONFIG=$ac_pt_PKG_CONFIG - fi -else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -fi - -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=0.9.0 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 -$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - PKG_CONFIG="" - fi -fi - - -$as_echo "#define OPI_SUPPORT 1" >>confdefs.h - - -$as_echo "#define MULTITHREADED 1" >>confdefs.h - - -$as_echo "#define TEXTOUT_WORD_LIST 1" >>confdefs.h - - -win32_libs="" -create_shared_lib="" -auto_import_flags="" -case "$host_os" in - cygwin*) - create_shared_lib="-no-undefined" - ;; - mingw*) - os_win32=yes - win32_libs="-lgdi32" - create_shared_lib="-no-undefined" - auto_import_flags="-Wl,--enable-auto-import" - ;; -esac - - - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -acx_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 -$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_join (); -int -main () -{ -return pthread_join (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - acx_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 -$as_echo "$acx_pthread_ok" >&6; } - if test x"$acx_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# ... -mt is also the pthreads flag for HP/aCC -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case "${host_cpu}-${host_os}" in - *solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthreads/-mt/ - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" - ;; -esac - -if test x"$acx_pthread_ok" = xno; then -for flag in $acx_pthread_flags; do - - case $flag in - none) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 -$as_echo_n "checking whether pthreads work without any flags... " >&6; } - ;; - - -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 -$as_echo_n "checking whether pthreads work with $flag... " >&6; } - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - # Extract the first word of "pthread-config", so it can be a program name with args. -set dummy pthread-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_acx_pthread_config+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$acx_pthread_config"; then - ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_acx_pthread_config="yes" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" -fi -fi -acx_pthread_config=$ac_cv_prog_acx_pthread_config -if test -n "$acx_pthread_config"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5 -$as_echo "$acx_pthread_config" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test x"$acx_pthread_config" = xno; then continue; fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 -$as_echo_n "checking for the pthreads library -l$flag... " >&6; } - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - acx_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 -$as_echo "$acx_pthread_ok" >&6; } - if test "x$acx_pthread_ok" = xyes; then - break; - fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$acx_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 -$as_echo_n "checking for joinable pthread attribute... " >&6; } - attr_name=unknown - for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -int attr=$attr; return attr; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - attr_name=$attr; break -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 -$as_echo "$attr_name" >&6; } - if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then - -cat >>confdefs.h <<_ACEOF -#define PTHREAD_CREATE_JOINABLE $attr_name -_ACEOF - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 -$as_echo_n "checking if more special flags are required for pthreads... " >&6; } - flag=no - case "${host_cpu}-${host_os}" in - *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; - *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 -$as_echo "${flag}" >&6; } - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - # More AIX lossage: must compile with xlc_r or cc_r - if test x"$GCC" != xyes; then - for ac_prog in xlc_r cc_r -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PTHREAD_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PTHREAD_CC"; then - ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PTHREAD_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PTHREAD_CC=$ac_cv_prog_PTHREAD_CC -if test -n "$PTHREAD_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 -$as_echo "$PTHREAD_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PTHREAD_CC" && break -done -test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" - - else - PTHREAD_CC=$CC - fi -else - PTHREAD_CC="$CC" -fi - - - - - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$acx_pthread_ok" = xyes; then - -$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h - - : -else - acx_pthread_ok=no - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -# Check whether --enable-xpdf-headers was given. -if test "${enable_xpdf_headers+set}" = set; then : - enableval=$enable_xpdf_headers; enable_xpdf_headers=$enableval -else - enable_xpdf_headers="no" -fi - - if test x$enable_xpdf_headers = xyes; then - ENABLE_XPDF_HEADERS_TRUE= - ENABLE_XPDF_HEADERS_FALSE='#' -else - ENABLE_XPDF_HEADERS_TRUE='#' - ENABLE_XPDF_HEADERS_FALSE= -fi - - -# Check whether --enable-single-precision was given. -if test "${enable_single_precision+set}" = set; then : - enableval=$enable_single_precision; -$as_echo "#define USE_FLOAT 1" >>confdefs.h - -fi - - -# Check whether --enable-fixedpoint was given. -if test "${enable_fixedpoint+set}" = set; then : - enableval=$enable_fixedpoint; -$as_echo "#define USE_FIXEDPOINT 1" >>confdefs.h - -fi - - -# Check whether --enable-relocatable was given. -if test "${enable_relocatable+set}" = set; then : - enableval=$enable_relocatable; enable_relocatable=$enableval -else - if test x$os_win32 = xyes; then - # default to yes on native Windows. - enable_relocatable="yes" - else - # default to no everywhere else. - enable_relocatable="no" - fi - - -fi - - -if test x$enable_relocatable = xyes; then - if test x$os_win32 = xyes; then - -$as_echo "#define ENABLE_RELOCATABLE 1" >>confdefs.h - - else - as_fn_error $? "Invalid setting for relocatable, only supported on windows" "$LINENO" 5 - - fi -fi - - - prefix_NONE= - exec_prefix_NONE= - test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix - test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix - eval ac_define_dir="\"$"{datarootdir}/poppler"\"" - eval ac_define_dir="\"$ac_define_dir\"" - POPPLER_DATADIR="$ac_define_dir" - - -cat >>confdefs.h <<_ACEOF -#define POPPLER_DATADIR "$ac_define_dir" -_ACEOF - - test "$prefix_NONE" && prefix=NONE - test "$exec_prefix_NONE" && exec_prefix=NONE - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 -$as_echo_n "checking for X... " >&6; } - - -# Check whether --with-x was given. -if test "${with_x+set}" = set; then : - withval=$with_x; -fi - -# $have_x is `yes', `no', `disabled', or empty when we do not yet know. -if test "x$with_x" = xno; then - # The user explicitly disabled X. - have_x=disabled -else - case $x_includes,$x_libraries in #( - *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( - *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : - $as_echo_n "(cached) " >&6 -else - # One or both of the vars are not set, and there is no cached value. -ac_x_includes=no ac_x_libraries=no -rm -f -r conftest.dir -if mkdir conftest.dir; then - cd conftest.dir - cat >Imakefile <<'_ACEOF' -incroot: - @echo incroot='${INCROOT}' -usrlibdir: - @echo usrlibdir='${USRLIBDIR}' -libdir: - @echo libdir='${LIBDIR}' -_ACEOF - if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then - # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. - for ac_var in incroot usrlibdir libdir; do - eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" - done - # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. - for ac_extension in a so sl dylib la dll; do - if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && - test -f "$ac_im_libdir/libX11.$ac_extension"; then - ac_im_usrlibdir=$ac_im_libdir; break - fi - done - # Screen out bogus values from the imake configuration. They are - # bogus both because they are the default anyway, and because - # using them would break gcc on systems where it needs fixed includes. - case $ac_im_incroot in - /usr/include) ac_x_includes= ;; - *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; - esac - case $ac_im_usrlibdir in - /usr/lib | /usr/lib64 | /lib | /lib64) ;; - *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; - esac - fi - cd .. - rm -f -r conftest.dir -fi - -# Standard set of common directories for X headers. -# Check X11 before X11Rn because it is often a symlink to the current release. -ac_x_header_dirs=' -/usr/X11/include -/usr/X11R7/include -/usr/X11R6/include -/usr/X11R5/include -/usr/X11R4/include - -/usr/include/X11 -/usr/include/X11R7 -/usr/include/X11R6 -/usr/include/X11R5 -/usr/include/X11R4 - -/usr/local/X11/include -/usr/local/X11R7/include -/usr/local/X11R6/include -/usr/local/X11R5/include -/usr/local/X11R4/include - -/usr/local/include/X11 -/usr/local/include/X11R7 -/usr/local/include/X11R6 -/usr/local/include/X11R5 -/usr/local/include/X11R4 - -/usr/X386/include -/usr/x386/include -/usr/XFree86/include/X11 - -/usr/include -/usr/local/include -/usr/unsupported/include -/usr/athena/include -/usr/local/x11r5/include -/usr/lpp/Xamples/include - -/usr/openwin/include -/usr/openwin/share/include' - -if test "$ac_x_includes" = no; then - # Guess where to find include files, by looking for Xlib.h. - # First, try using that file with no special directory specified. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <X11/Xlib.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # We can compile using X headers with no special include directory. -ac_x_includes= -else - for ac_dir in $ac_x_header_dirs; do - if test -r "$ac_dir/X11/Xlib.h"; then - ac_x_includes=$ac_dir - break - fi -done -fi -rm -f conftest.err conftest.i conftest.$ac_ext -fi # $ac_x_includes = no - -if test "$ac_x_libraries" = no; then - # Check for the libraries. - # See if we find them without any special options. - # Don't add to $LIBS permanently. - ac_save_LIBS=$LIBS - LIBS="-lX11 $LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <X11/Xlib.h> -int -main () -{ -XrmInitialize () - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - LIBS=$ac_save_LIBS -# We can link X programs with no special library path. -ac_x_libraries= -else - LIBS=$ac_save_LIBS -for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` -do - # Don't even attempt the hair of trying to link an X program! - for ac_extension in a so sl dylib la dll; do - if test -r "$ac_dir/libX11.$ac_extension"; then - ac_x_libraries=$ac_dir - break 2 - fi - done -done -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi # $ac_x_libraries = no - -case $ac_x_includes,$ac_x_libraries in #( - no,* | *,no | *\'*) - # Didn't find X, or a directory has "'" in its name. - ac_cv_have_x="have_x=no";; #( - *) - # Record where we found X for the cache. - ac_cv_have_x="have_x=yes\ - ac_x_includes='$ac_x_includes'\ - ac_x_libraries='$ac_x_libraries'" -esac -fi -;; #( - *) have_x=yes;; - esac - eval "$ac_cv_have_x" -fi # $with_x != no - -if test "$have_x" != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 -$as_echo "$have_x" >&6; } - no_x=yes -else - # If each of the values was on the command line, it overrides each guess. - test "x$x_includes" = xNONE && x_includes=$ac_x_includes - test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries - # Update the cache value to reflect the command line values. - ac_cv_have_x="have_x=yes\ - ac_x_includes='$x_includes'\ - ac_x_libraries='$x_libraries'" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 -$as_echo "libraries $x_libraries, headers $x_includes" >&6; } -fi - -if test "$no_x" = yes; then - # Not all programs may use this symbol, but it does not hurt to define it. - -$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h - - X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= -else - if test -n "$x_includes"; then - X_CFLAGS="$X_CFLAGS -I$x_includes" - fi - - # It would also be nice to do this for all -L options, not just this one. - if test -n "$x_libraries"; then - X_LIBS="$X_LIBS -L$x_libraries" - # For Solaris; some versions of Sun CC require a space after -R and - # others require no space. Words are not sufficient . . . . - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 -$as_echo_n "checking whether -R must be followed by a space... " >&6; } - ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" - ac_xsave_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - X_LIBS="$X_LIBS -R$x_libraries" -else - LIBS="$ac_xsave_LIBS -R $x_libraries" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - X_LIBS="$X_LIBS -R $x_libraries" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 -$as_echo "neither works" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_c_werror_flag=$ac_xsave_c_werror_flag - LIBS=$ac_xsave_LIBS - fi - - # Check for system-dependent libraries X programs must link with. - # Do this before checking for the system-independent R6 libraries - # (-lICE), since we may need -lsocket or whatever for X linking. - - if test "$ISC" = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" - else - # Martyn Johnson says this is needed for Ultrix, if the X - # libraries were built with DECnet support. And Karl Berry says - # the Alpha needs dnet_stub (dnet does not exist). - ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char XOpenDisplay (); -int -main () -{ -return XOpenDisplay (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 -$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } -if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldnet $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dnet_ntoa (); -int -main () -{ -return dnet_ntoa (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dnet_dnet_ntoa=yes -else - ac_cv_lib_dnet_dnet_ntoa=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 -$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } -if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" -fi - - if test $ac_cv_lib_dnet_dnet_ntoa = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 -$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } -if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldnet_stub $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dnet_ntoa (); -int -main () -{ -return dnet_ntoa (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dnet_stub_dnet_ntoa=yes -else - ac_cv_lib_dnet_stub_dnet_ntoa=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 -$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } -if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" -fi - - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$ac_xsave_LIBS" - - # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, - # to get the SysV transport functions. - # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) - # needs -lnsl. - # The nsl library prevents programs from opening the X display - # on Irix 5.2, according to T.E. Dickey. - # The functions gethostbyname, getservbyname, and inet_addr are - # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. - ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" -if test "x$ac_cv_func_gethostbyname" = xyes; then : - -fi - - if test $ac_cv_func_gethostbyname = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 -$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } -if ${ac_cv_lib_nsl_gethostbyname+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnsl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_nsl_gethostbyname=yes -else - ac_cv_lib_nsl_gethostbyname=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 -$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } -if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" -fi - - if test $ac_cv_lib_nsl_gethostbyname = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 -$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } -if ${ac_cv_lib_bsd_gethostbyname+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lbsd $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_bsd_gethostbyname=yes -else - ac_cv_lib_bsd_gethostbyname=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 -$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } -if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" -fi - - fi - fi - - # lieder@skyler.mavd.honeywell.com says without -lsocket, - # socket/setsockopt and other routines are undefined under SCO ODT - # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary - # on later versions), says Simon Leinen: it contains gethostby* - # variants that don't use the name server (or something). -lsocket - # must be given before -lnsl if both are needed. We assume that - # if connect needs -lnsl, so does gethostbyname. - ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" -if test "x$ac_cv_func_connect" = xyes; then : - -fi - - if test $ac_cv_func_connect = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 -$as_echo_n "checking for connect in -lsocket... " >&6; } -if ${ac_cv_lib_socket_connect+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $X_EXTRA_LIBS $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char connect (); -int -main () -{ -return connect (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_socket_connect=yes -else - ac_cv_lib_socket_connect=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 -$as_echo "$ac_cv_lib_socket_connect" >&6; } -if test "x$ac_cv_lib_socket_connect" = xyes; then : - X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" -fi - - fi - - # Guillermo Gomez says -lposix is necessary on A/UX. - ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" -if test "x$ac_cv_func_remove" = xyes; then : - -fi - - if test $ac_cv_func_remove = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 -$as_echo_n "checking for remove in -lposix... " >&6; } -if ${ac_cv_lib_posix_remove+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lposix $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char remove (); -int -main () -{ -return remove (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_posix_remove=yes -else - ac_cv_lib_posix_remove=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 -$as_echo "$ac_cv_lib_posix_remove" >&6; } -if test "x$ac_cv_lib_posix_remove" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" -fi - - fi - - # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. - ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" -if test "x$ac_cv_func_shmat" = xyes; then : - -fi - - if test $ac_cv_func_shmat = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 -$as_echo_n "checking for shmat in -lipc... " >&6; } -if ${ac_cv_lib_ipc_shmat+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lipc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shmat (); -int -main () -{ -return shmat (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_ipc_shmat=yes -else - ac_cv_lib_ipc_shmat=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 -$as_echo "$ac_cv_lib_ipc_shmat" >&6; } -if test "x$ac_cv_lib_ipc_shmat" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" -fi - - fi - fi - - # Check for libraries that X11R6 Xt/Xaw programs need. - ac_save_LDFLAGS=$LDFLAGS - test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" - # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to - # check for ICE first), but we must link in the order -lSM -lICE or - # we get undefined symbols. So assume we have SM if we have ICE. - # These have to be linked with before -lX11, unlike the other - # libraries we check for below, so use a different variable. - # John Interrante, Karl Berry - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 -$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } -if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lICE $X_EXTRA_LIBS $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char IceConnectionNumber (); -int -main () -{ -return IceConnectionNumber (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_ICE_IceConnectionNumber=yes -else - ac_cv_lib_ICE_IceConnectionNumber=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 -$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } -if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then : - X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" -fi - - LDFLAGS=$ac_save_LDFLAGS - -fi - -ac_header_dirent=no -for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 -$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } -if eval \${$as_ac_Header+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> -#include <$ac_hdr> - -int -main () -{ -if ((DIR *) 0) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_ac_Header=yes" -else - eval "$as_ac_Header=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_ac_Header - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 -_ACEOF - -ac_header_dirent=$ac_hdr; break -fi - -done -# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. -if test $ac_header_dirent = dirent.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if ${ac_cv_search_opendir+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (); -int -main () -{ -return opendir (); - ; - return 0; -} -_ACEOF -for ac_lib in '' dir; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_opendir=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_opendir+:} false; then : - break -fi -done -if ${ac_cv_search_opendir+:} false; then : - -else - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -$as_echo "$ac_cv_search_opendir" >&6; } -ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if ${ac_cv_search_opendir+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (); -int -main () -{ -return opendir (); - ; - return 0; -} -_ACEOF -for ac_lib in '' x; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_opendir=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_opendir+:} false; then : - break -fi -done -if ${ac_cv_search_opendir+:} false; then : - -else - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -$as_echo "$ac_cv_search_opendir" >&6; } -ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -fi - -for ac_header in stdint.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" -if test "x$ac_cv_header_stdint_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STDINT_H 1 -_ACEOF - -fi - -done - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -ac_fn_cxx_check_decl "$LINENO" "gettimeofday" "ac_cv_have_decl_gettimeofday" "#include <sys/time.h> -" -if test "x$ac_cv_have_decl_gettimeofday" = xyes; then : - ac_fn_cxx_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" -if test "x$ac_cv_func_gettimeofday" = xyes; then : - -$as_echo "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h - -fi - -fi - -ac_fn_cxx_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r" -if test "x$ac_cv_func_localtime_r" = xyes; then : - -$as_echo "#define HAVE_LOCALTIME_R 1" >>confdefs.h - -fi - -ac_fn_cxx_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r" -if test "x$ac_cv_func_gmtime_r" = xyes; then : - -$as_echo "#define HAVE_GMTIME_R 1" >>confdefs.h - -fi - - -ac_fn_cxx_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" -if test "x$ac_cv_func_gethostbyname" = xyes; then : - -fi - -if test $ac_cv_func_gethostbyname = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 -$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } -if ${ac_cv_lib_bsd_gethostbyname+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lbsd $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_bsd_gethostbyname=yes -else - ac_cv_lib_bsd_gethostbyname=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 -$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } -if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" -fi - -fi - -ac_fn_cxx_check_func "$LINENO" "nanosleep" "ac_cv_func_nanosleep" -if test "x$ac_cv_func_nanosleep" = xyes; then : - -fi - -if test x$ac_cv_func_nanosleep = xno -then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nanosleep in -lrt" >&5 -$as_echo_n "checking for nanosleep in -lrt... " >&6; } -if ${ac_cv_lib_rt_nanosleep+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lrt $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char nanosleep (); -int -main () -{ -return nanosleep (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_rt_nanosleep=yes -else - ac_cv_lib_rt_nanosleep=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_nanosleep" >&5 -$as_echo "$ac_cv_lib_rt_nanosleep" >&6; } -if test "x$ac_cv_lib_rt_nanosleep" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lrt" -fi - -fi - -if test x$ac_cv_func_nanosleep = xno && test x$ac_cv_lib_rt_nanosleep = xno -then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nanosleep in -lposix4" >&5 -$as_echo_n "checking for nanosleep in -lposix4... " >&6; } -if ${ac_cv_lib_posix4_nanosleep+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lposix4 $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char nanosleep (); -int -main () -{ -return nanosleep (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_posix4_nanosleep=yes -else - ac_cv_lib_posix4_nanosleep=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_nanosleep" >&5 -$as_echo "$ac_cv_lib_posix4_nanosleep" >&6; } -if test "x$ac_cv_lib_posix4_nanosleep" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix4" -fi - -fi - - -# Check whether --enable-libopenjpeg was given. -if test "${enable_libopenjpeg+set}" = set; then : - enableval=$enable_libopenjpeg; enable_libopenjpeg=$enableval -else - enable_libopenjpeg="try" -fi - -if test x$enable_libopenjpeg = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for opj_cio_open in -lopenjpeg" >&5 -$as_echo_n "checking for opj_cio_open in -lopenjpeg... " >&6; } -if ${ac_cv_lib_openjpeg_opj_cio_open+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lopenjpeg $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opj_cio_open (); -int -main () -{ -return opj_cio_open (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_openjpeg_opj_cio_open=yes -else - ac_cv_lib_openjpeg_opj_cio_open=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_openjpeg_opj_cio_open" >&5 -$as_echo "$ac_cv_lib_openjpeg_opj_cio_open" >&6; } -if test "x$ac_cv_lib_openjpeg_opj_cio_open" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBOPENJPEG 1 -_ACEOF - - LIBS="-lopenjpeg $LIBS" - -else - as_fn_error $? "\"*** libopenjpeg library not found ***\"" "$LINENO" 5 -fi - - -for ac_header in openjpeg.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "openjpeg.h" "ac_cv_header_openjpeg_h" "$ac_includes_default" -if test "x$ac_cv_header_openjpeg_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_OPENJPEG_H 1 -_ACEOF - -else - as_fn_error $? "\"*** libopenjpeg headers not found ***\"" "$LINENO" 5 -fi - -done - -elif test x$enable_libopenjpeg = xtry; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for opj_cio_open in -lopenjpeg" >&5 -$as_echo_n "checking for opj_cio_open in -lopenjpeg... " >&6; } -if ${ac_cv_lib_openjpeg_opj_cio_open+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lopenjpeg $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opj_cio_open (); -int -main () -{ -return opj_cio_open (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_openjpeg_opj_cio_open=yes -else - ac_cv_lib_openjpeg_opj_cio_open=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_openjpeg_opj_cio_open" >&5 -$as_echo "$ac_cv_lib_openjpeg_opj_cio_open" >&6; } -if test "x$ac_cv_lib_openjpeg_opj_cio_open" = xyes; then : - enable_libopenjpeg="yes" -else - enable_libopenjpeg="no" -fi - - for ac_header in openjpeg.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "openjpeg.h" "ac_cv_header_openjpeg_h" "$ac_includes_default" -if test "x$ac_cv_header_openjpeg_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_OPENJPEG_H 1 -_ACEOF - -else - enable_libopenjpeg="no" -fi - -done - -fi - -if test x$enable_libopenjpeg = xyes; then - LIBOPENJPEG_LIBS="-lopenjpeg" - - $as_echo "#define ENABLE_LIBOPENJPEG 1" >>confdefs.h - -fi - - if test x$enable_libopenjpeg = xyes; then - BUILD_LIBOPENJPEG_TRUE= - BUILD_LIBOPENJPEG_FALSE='#' -else - BUILD_LIBOPENJPEG_TRUE='#' - BUILD_LIBOPENJPEG_FALSE= -fi - - - -# Check whether --enable-libtiff was given. -if test "${enable_libtiff+set}" = set; then : - enableval=$enable_libtiff; enable_libtiff=$enableval -else - enable_libtiff="try" -fi - - -if test x$enable_libtiff = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFOpen in -ltiff" >&5 -$as_echo_n "checking for TIFFOpen in -ltiff... " >&6; } -if ${ac_cv_lib_tiff_TIFFOpen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ltiff $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char TIFFOpen (); -int -main () -{ -return TIFFOpen (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_tiff_TIFFOpen=yes -else - ac_cv_lib_tiff_TIFFOpen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFOpen" >&5 -$as_echo "$ac_cv_lib_tiff_TIFFOpen" >&6; } -if test "x$ac_cv_lib_tiff_TIFFOpen" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBTIFF 1 -_ACEOF - - LIBS="-ltiff $LIBS" - -else - as_fn_error $? "\"*** libtiff library not found ***\"" "$LINENO" 5 -fi - - for ac_header in tiffio.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "tiffio.h" "ac_cv_header_tiffio_h" "$ac_includes_default" -if test "x$ac_cv_header_tiffio_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_TIFFIO_H 1 -_ACEOF - -else - as_fn_error $? "\"*** libtiff headers not found ***\"" "$LINENO" 5 -fi - -done - -elif test x$enable_libtiff = xtry; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFOpen in -ltiff" >&5 -$as_echo_n "checking for TIFFOpen in -ltiff... " >&6; } -if ${ac_cv_lib_tiff_TIFFOpen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ltiff $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char TIFFOpen (); -int -main () -{ -return TIFFOpen (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_tiff_TIFFOpen=yes -else - ac_cv_lib_tiff_TIFFOpen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFOpen" >&5 -$as_echo "$ac_cv_lib_tiff_TIFFOpen" >&6; } -if test "x$ac_cv_lib_tiff_TIFFOpen" = xyes; then : - enable_libtiff="yes" -else - enable_libtiff="no" -fi - - for ac_header in tiffio.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "tiffio.h" "ac_cv_header_tiffio_h" "$ac_includes_default" -if test "x$ac_cv_header_tiffio_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_TIFFIO_H 1 -_ACEOF - -else - enable_libtiff="no" -fi - -done - -fi - -if test x$enable_libtiff = xyes; then - LIBTIFF_LIBS="-ltiff" - - $as_echo "#define ENABLE_LIBTIFF 1" >>confdefs.h - -fi - - if test x$enable_libtiff = xyes; then - BUILD_LIBTIFF_TRUE= - BUILD_LIBTIFF_FALSE='#' -else - BUILD_LIBTIFF_TRUE='#' - BUILD_LIBTIFF_FALSE= -fi - - -if test x$enable_libtiff = xyes; then - -$as_echo "#define ENABLE_LIBTIFF 1" >>confdefs.h - -fi - -for ac_func in popen mkstemp mkstemps -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Check whether --enable-largefile was given. -if test "${enable_largefile+set}" = set; then : - enableval=$enable_largefile; -fi - -if test "$enable_largefile" != no; then - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -$as_echo_n "checking for special C compiler options needed for large files... " >&6; } -if ${ac_cv_sys_largefile_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF - if ac_fn_c_try_compile "$LINENO"; then : - break -fi -rm -f core conftest.err conftest.$ac_objext - CC="$CC -n32" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_largefile_CC=' -n32'; break -fi -rm -f core conftest.err conftest.$ac_objext - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -$as_echo "$ac_cv_sys_largefile_CC" >&6; } - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if ${ac_cv_sys_file_offset_bits+:} false; then : - $as_echo_n "(cached) " >&6 -else - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=64; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_file_offset_bits=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -$as_echo "$ac_cv_sys_file_offset_bits" >&6; } -case $ac_cv_sys_file_offset_bits in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits -_ACEOF -;; -esac -rm -rf conftest* - if test $ac_cv_sys_file_offset_bits = unknown; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } -if ${ac_cv_sys_large_files+:} false; then : - $as_echo_n "(cached) " >&6 -else - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _LARGE_FILES 1 -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=1; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_large_files=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -$as_echo "$ac_cv_sys_large_files" >&6; } -case $ac_cv_sys_large_files in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _LARGE_FILES $ac_cv_sys_large_files -_ACEOF -;; -esac -rm -rf conftest* - fi -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 -$as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } -if ${ac_cv_sys_largefile_source+:} false; then : - $as_echo_n "(cached) " >&6 -else - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> /* for off_t */ - #include <stdio.h> -int -main () -{ -int (*fp) (FILE *, off_t, int) = fseeko; - return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_sys_largefile_source=no; break -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _LARGEFILE_SOURCE 1 -#include <sys/types.h> /* for off_t */ - #include <stdio.h> -int -main () -{ -int (*fp) (FILE *, off_t, int) = fseeko; - return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_sys_largefile_source=1; break -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_cv_sys_largefile_source=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 -$as_echo "$ac_cv_sys_largefile_source" >&6; } -case $ac_cv_sys_largefile_source in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source -_ACEOF -;; -esac -rm -rf conftest* - -# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug -# in glibc 2.1.3, but that breaks too many other things. -# If you want fseeko and ftello with glibc, upgrade to a fixed glibc. -if test $ac_cv_sys_largefile_source != unknown; then - -$as_echo "#define HAVE_FSEEKO 1" >>confdefs.h - -fi - -for ac_func in fseek64 -do : - ac_fn_c_check_func "$LINENO" "fseek64" "ac_cv_func_fseek64" -if test "x$ac_cv_func_fseek64" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_FSEEK64 1 -_ACEOF - xpdf_cv_func_fseek64=yes -else - xpdf_cv_func_fseek64=no -fi -done - -for ac_func in ftell64 -do : - ac_fn_c_check_func "$LINENO" "ftell64" "ac_cv_func_ftell64" -if test "x$ac_cv_func_ftell64" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_FTELL64 1 -_ACEOF - xpdf_cv_func_ftell64=yes -else - xpdf_cv_func_ftell64=no -fi -done - -if test "$xpdf_cv_func_fseek64" = yes -a "$xpdf_cv_func_ftell64" = yes; then - $as_echo "#define HAVE_FSEEK64 1" >>confdefs.h - -fi - -# Check whether --enable-zlib was given. -if test "${enable_zlib+set}" = set; then : - enableval=$enable_zlib; -else - enable_zlib="no" -fi - -if test x$enable_zlib = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflate in -lz" >&5 -$as_echo_n "checking for inflate in -lz... " >&6; } -if ${ac_cv_lib_z_inflate+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lz $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char inflate (); -int -main () -{ -return inflate (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_z_inflate=yes -else - ac_cv_lib_z_inflate=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflate" >&5 -$as_echo "$ac_cv_lib_z_inflate" >&6; } -if test "x$ac_cv_lib_z_inflate" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBZ 1 -_ACEOF - - LIBS="-lz $LIBS" - -else - as_fn_error $? "\"*** zlib library not found ***\"" "$LINENO" 5 -fi - - for ac_header in zlib.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" -if test "x$ac_cv_header_zlib_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ZLIB_H 1 -_ACEOF - -else - as_fn_error $? "\"*** zlib headers not found ***\"" "$LINENO" 5 -fi - -done - -elif test x$enable_zlib = xtry; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflate in -lz" >&5 -$as_echo_n "checking for inflate in -lz... " >&6; } -if ${ac_cv_lib_z_inflate+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lz $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char inflate (); -int -main () -{ -return inflate (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_z_inflate=yes -else - ac_cv_lib_z_inflate=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflate" >&5 -$as_echo "$ac_cv_lib_z_inflate" >&6; } -if test "x$ac_cv_lib_z_inflate" = xyes; then : - enable_zlib="yes" -else - enable_zlib="no" -fi - - for ac_header in zlib.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" -if test "x$ac_cv_header_zlib_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ZLIB_H 1 -_ACEOF - -else - enable_zlib="no" -fi - -done - -fi - -if test x$enable_zlib = xyes; then - ZLIB_LIBS="-lz" - - $as_echo "#define ENABLE_ZLIB 1" >>confdefs.h - -fi - - if test x$enable_zlib = xyes; then - BUILD_ZLIB_TRUE= - BUILD_ZLIB_FALSE='#' -else - BUILD_ZLIB_TRUE='#' - BUILD_ZLIB_FALSE= -fi - - - -# Check whether --enable-libcurl was given. -if test "${enable_libcurl+set}" = set; then : - enableval=$enable_libcurl; enable_libcurl=$enableval -else - enable_libcurl="no" -fi - - -if test x$enable_libcurl = xyes; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBCURL" >&5 -$as_echo_n "checking for LIBCURL... " >&6; } - -if test -n "$LIBCURL_CFLAGS"; then - pkg_cv_LIBCURL_CFLAGS="$LIBCURL_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libcurl") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LIBCURL_CFLAGS=`$PKG_CONFIG --cflags "libcurl" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$LIBCURL_LIBS"; then - pkg_cv_LIBCURL_LIBS="$LIBCURL_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libcurl") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LIBCURL_LIBS=`$PKG_CONFIG --libs "libcurl" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - LIBCURL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libcurl" 2>&1` - else - LIBCURL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libcurl" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$LIBCURL_PKG_ERRORS" >&5 - - as_fn_error $? "Package requirements (libcurl) were not met: - -$LIBCURL_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -Alternatively, you may set the environment variables LIBCURL_CFLAGS -and LIBCURL_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details." "$LINENO" 5 -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -Alternatively, you may set the environment variables LIBCURL_CFLAGS -and LIBCURL_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details. - -To get pkg-config, see <http://pkg-config.freedesktop.org/>. -See \`config.log' for more details" "$LINENO" 5; } -else - LIBCURL_CFLAGS=$pkg_cv_LIBCURL_CFLAGS - LIBCURL_LIBS=$pkg_cv_LIBCURL_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -fi - -$as_echo "#define ENABLE_LIBCURL 1" >>confdefs.h - - -$as_echo "#define POPPLER_HAS_CURL_SUPPORT 1" >>confdefs.h - -fi - - if test x$enable_libcurl = xyes; then - BUILD_LIBCURL_TRUE= - BUILD_LIBCURL_FALSE='#' -else - BUILD_LIBCURL_TRUE='#' - BUILD_LIBCURL_FALSE= -fi - - -# Check whether --enable-libjpeg was given. -if test "${enable_libjpeg+set}" = set; then : - enableval=$enable_libjpeg; enable_libjpeg=$enableval -else - enable_libjpeg="try" -fi - -if test x$enable_libjpeg != xno; then - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libjpeg6b" >&5 -$as_echo_n "checking for libjpeg6b... " >&6; } -if ${ac_cv_lib_jpeg_6b+:} false; then : - $as_echo_n "(cached) " >&6 -else - -ac_save_LIBS="$LIBS" -LIBS="$all_libraries $USER_LDFLAGS -ljpeg6b -lm" -ac_save_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#ifdef __cplusplus -extern "C" { -#endif -void jpeg_CreateDecompress(); -#ifdef __cplusplus -} -#endif - -int -main () -{ -jpeg_CreateDecompress(); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "ac_cv_lib_jpeg_6b=-ljpeg6b" -else - eval "ac_cv_lib_jpeg_6b=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS="$ac_save_LIBS" -CFLAGS="$ac_save_CFLAGS" - -fi - - -if eval "test ! \"`echo $ac_cv_lib_jpeg_6b`\" = no"; then - enable_libjpeg=yes - LIBJPEG_LIBS="$ac_cv_lib_jpeg_6b" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_6b" >&5 -$as_echo "$ac_cv_lib_jpeg_6b" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libjpeg" >&5 -$as_echo_n "checking for libjpeg... " >&6; } -if ${ac_cv_lib_jpeg_normal+:} false; then : - $as_echo_n "(cached) " >&6 -else - -ac_save_LIBS="$LIBS" -LIBS="$all_libraries $USER_LDFLAGS -ljpeg -lm" -ac_save_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#ifdef __cplusplus -extern "C" { -#endif -void jpeg_CreateDecompress(); -#ifdef __cplusplus -} -#endif - -int -main () -{ -jpeg_CreateDecompress(); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "ac_cv_lib_jpeg_normal=-ljpeg" -else - eval "ac_cv_lib_jpeg_normal=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS="$ac_save_LIBS" -CFLAGS="$ac_save_CFLAGS" - -fi - - -if eval "test ! \"`echo $ac_cv_lib_jpeg_normal`\" = no"; then - enable_libjpeg=yes - LIBJPEG_LIBS="$ac_cv_lib_jpeg_normal" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_normal" >&5 -$as_echo "$ac_cv_lib_jpeg_normal" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - LIBJPEG_LIBS= - - -fi - - -fi - - -ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" -if test "x$ac_cv_header_jpeglib_h" = xyes; then : - jpeg_incdir=yes -else - jpeg_incdir=NO -fi - - -test "x$jpeg_incdir" = xNO && jpeg_incdir= - -if test -n "$jpeg_incdir" && test -n "$LIBJPEG_LIBS" ; then - -cat >>confdefs.h <<_ACEOF -#define ENABLE_LIBJPEG 1 -_ACEOF - -else - if test -n "$jpeg_incdir" || test -n "$LIBJPEG_LIBS" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: -There is an installation error in jpeg support. You seem to have only one -of either the headers _or_ the libraries installed. You may need to either -provide correct --with-extra-... options, or the development package of -libjpeg6b. You can get a source package of libjpeg from http://www.ijg.org/ -Disabling JPEG support. -" >&5 -$as_echo "$as_me: WARNING: -There is an installation error in jpeg support. You seem to have only one -of either the headers _or_ the libraries installed. You may need to either -provide correct --with-extra-... options, or the development package of -libjpeg6b. You can get a source package of libjpeg from http://www.ijg.org/ -Disabling JPEG support. -" >&2;} - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libjpeg not found. disable JPEG support." >&5 -$as_echo "$as_me: WARNING: libjpeg not found. disable JPEG support." >&2;} - fi - jpeg_incdir= - enable_libjpeg=no - LIBJPEG_LIBS= -fi - - - - -fi - - if test x$enable_libjpeg = xyes; then - BUILD_LIBJPEG_TRUE= - BUILD_LIBJPEG_FALSE='#' -else - BUILD_LIBJPEG_TRUE='#' - BUILD_LIBJPEG_FALSE= -fi - - - -# Check whether --enable-libpng was given. -if test "${enable_libpng+set}" = set; then : - enableval=$enable_libpng; enable_libpng=$enableval -else - enable_libpng="try" -fi - - -if test x$enable_libpng != xno; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBPNG" >&5 -$as_echo_n "checking for LIBPNG... " >&6; } - -if test -n "$LIBPNG_CFLAGS"; then - pkg_cv_LIBPNG_CFLAGS="$LIBPNG_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libpng") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LIBPNG_CFLAGS=`$PKG_CONFIG --cflags "libpng" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$LIBPNG_LIBS"; then - pkg_cv_LIBPNG_LIBS="$LIBPNG_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libpng") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LIBPNG_LIBS=`$PKG_CONFIG --libs "libpng" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - LIBPNG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libpng" 2>&1` - else - LIBPNG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libpng" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$LIBPNG_PKG_ERRORS" >&5 - - enable_libpng="no" -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - enable_libpng="no" -else - LIBPNG_CFLAGS=$pkg_cv_LIBPNG_CFLAGS - LIBPNG_LIBS=$pkg_cv_LIBPNG_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - enable_libpng="yes" -fi -fi - -if test x$enable_libpng = xyes; then - -$as_echo "#define ENABLE_LIBPNG 1" >>confdefs.h - -fi - - if test x$enable_libpng = xyes; then - BUILD_LIBPNG_TRUE= - BUILD_LIBPNG_FALSE='#' -else - BUILD_LIBPNG_TRUE='#' - BUILD_LIBPNG_FALSE= -fi - - -FREETYPE_LIBS= -FREETYPE_CFLAGS= - - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE" >&5 -$as_echo_n "checking for FREETYPE... " >&6; } - -if test -n "$FREETYPE_CFLAGS"; then - pkg_cv_FREETYPE_CFLAGS="$FREETYPE_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FREETYPE_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$FREETYPE_LIBS"; then - pkg_cv_FREETYPE_LIBS="$FREETYPE_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FREETYPE_LIBS=`$PKG_CONFIG --libs "freetype2" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - FREETYPE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "freetype2" 2>&1` - else - FREETYPE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "freetype2" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$FREETYPE_PKG_ERRORS" >&5 - - freetype_pkgconfig=no -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - freetype_pkgconfig=no -else - FREETYPE_CFLAGS=$pkg_cv_FREETYPE_CFLAGS - FREETYPE_LIBS=$pkg_cv_FREETYPE_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - freetype_pkgconfig=yes -fi - -if test "x$freetype_pkgconfig" = "xyes"; then - - -$as_echo "#define HAVE_FREETYPE_H 1" >>confdefs.h - - -else - - # Extract the first word of "freetype-config", so it can be a program name with args. -set dummy freetype-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_FREETYPE_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $FREETYPE_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_FREETYPE_CONFIG="$FREETYPE_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_FREETYPE_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_FREETYPE_CONFIG" && ac_cv_path_FREETYPE_CONFIG="no" - ;; -esac -fi -FREETYPE_CONFIG=$ac_cv_path_FREETYPE_CONFIG -if test -n "$FREETYPE_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE_CONFIG" >&5 -$as_echo "$FREETYPE_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$FREETYPE_CONFIG" != "xno" ; then - - FREETYPE_CFLAGS=`$FREETYPE_CONFIG --cflags` - FREETYPE_LIBS=`$FREETYPE_CONFIG --libs` - -$as_echo "#define HAVE_FREETYPE_H 1" >>confdefs.h - - - fi - -fi - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which font configuration to use" >&5 -$as_echo_n "checking which font configuration to use... " >&6; } - -# Check whether --with-font_configuration was given. -if test "${with_font_configuration+set}" = set; then : - withval=$with_font_configuration; -else - if test x$os_win32 = xyes; then - # default to win32 on native Windows. - with_font_configuration=win32 - else - # default to fontconig everywhere else. - with_font_configuration=fontconfig - fi - - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_font_configuration" >&5 -$as_echo "$with_font_configuration" >&6; } - -case $with_font_configuration in - win32) - -$as_echo "#define WITH_FONTCONFIGURATION_WIN32 1" >>confdefs.h - - # Set the minimum required Internet Explorer version to 5.0 - CPPFLAGS="$CPPFLAGS -D_WIN32_IE=0x0500" - ;; - fontconfig) - -$as_echo "#define WITH_FONTCONFIGURATION_FONTCONFIG 1" >>confdefs.h - - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FONTCONFIG" >&5 -$as_echo_n "checking for FONTCONFIG... " >&6; } - -if test -n "$FONTCONFIG_CFLAGS"; then - pkg_cv_FONTCONFIG_CFLAGS="$FONTCONFIG_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fontconfig >= 2.0.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "fontconfig >= 2.0.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FONTCONFIG_CFLAGS=`$PKG_CONFIG --cflags "fontconfig >= 2.0.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$FONTCONFIG_LIBS"; then - pkg_cv_FONTCONFIG_LIBS="$FONTCONFIG_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fontconfig >= 2.0.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "fontconfig >= 2.0.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FONTCONFIG_LIBS=`$PKG_CONFIG --libs "fontconfig >= 2.0.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - FONTCONFIG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "fontconfig >= 2.0.0" 2>&1` - else - FONTCONFIG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "fontconfig >= 2.0.0" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$FONTCONFIG_PKG_ERRORS" >&5 - - as_fn_error $? "Package requirements (fontconfig >= 2.0.0) were not met: - -$FONTCONFIG_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -Alternatively, you may set the environment variables FONTCONFIG_CFLAGS -and FONTCONFIG_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details." "$LINENO" 5 -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -Alternatively, you may set the environment variables FONTCONFIG_CFLAGS -and FONTCONFIG_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details. - -To get pkg-config, see <http://pkg-config.freedesktop.org/>. -See \`config.log' for more details" "$LINENO" 5; } -else - FONTCONFIG_CFLAGS=$pkg_cv_FONTCONFIG_CFLAGS - FONTCONFIG_LIBS=$pkg_cv_FONTCONFIG_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -fi - ;; - *) - as_fn_error $? "Invalid font configuration setting: $with_font_configuration" "$LINENO" 5 - ;; -esac - - if test x$with_font_configuration = xwin32; then - BUILD_WITH_WIN32_FONTCONFIGURATION_TRUE= - BUILD_WITH_WIN32_FONTCONFIGURATION_FALSE='#' -else - BUILD_WITH_WIN32_FONTCONFIGURATION_TRUE='#' - BUILD_WITH_WIN32_FONTCONFIGURATION_FALSE= -fi - - -# Check whether --enable-splash-output was given. -if test "${enable_splash_output+set}" = set; then : - enableval=$enable_splash_output; -else - enable_splash_output="yes" -fi - - if test x$enable_splash_output = xyes; then - BUILD_SPLASH_OUTPUT_TRUE= - BUILD_SPLASH_OUTPUT_FALSE='#' -else - BUILD_SPLASH_OUTPUT_TRUE='#' - BUILD_SPLASH_OUTPUT_FALSE= -fi - - -if test x$enable_splash_output = xyes; then - $as_echo "#define HAVE_SPLASH 1" >>confdefs.h - -fi - -CAIRO_VERSION="1.10.0" - -# Check whether --enable-cairo-output was given. -if test "${enable_cairo_output+set}" = set; then : - enableval=$enable_cairo_output; enable_cairo_output=$enableval -else - enable_cairo_output="try" -fi - -if test x$enable_cairo_output = xyes; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5 -$as_echo_n "checking for CAIRO... " >&6; } - -if test -n "$CAIRO_CFLAGS"; then - pkg_cv_CAIRO_CFLAGS="$CAIRO_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= \$CAIRO_VERSION\""; } >&5 - ($PKG_CONFIG --exists --print-errors "cairo >= $CAIRO_VERSION") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= $CAIRO_VERSION" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$CAIRO_LIBS"; then - pkg_cv_CAIRO_LIBS="$CAIRO_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= \$CAIRO_VERSION\""; } >&5 - ($PKG_CONFIG --exists --print-errors "cairo >= $CAIRO_VERSION") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= $CAIRO_VERSION" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - CAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "cairo >= $CAIRO_VERSION" 2>&1` - else - CAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "cairo >= $CAIRO_VERSION" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$CAIRO_PKG_ERRORS" >&5 - - as_fn_error $? "Package requirements (cairo >= $CAIRO_VERSION) were not met: - -$CAIRO_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -Alternatively, you may set the environment variables CAIRO_CFLAGS -and CAIRO_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details." "$LINENO" 5 -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -Alternatively, you may set the environment variables CAIRO_CFLAGS -and CAIRO_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details. - -To get pkg-config, see <http://pkg-config.freedesktop.org/>. -See \`config.log' for more details" "$LINENO" 5; } -else - CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS - CAIRO_LIBS=$pkg_cv_CAIRO_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -fi -elif test x$enable_cairo_output = xtry; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5 -$as_echo_n "checking for CAIRO... " >&6; } - -if test -n "$CAIRO_CFLAGS"; then - pkg_cv_CAIRO_CFLAGS="$CAIRO_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= \$CAIRO_VERSION\""; } >&5 - ($PKG_CONFIG --exists --print-errors "cairo >= $CAIRO_VERSION") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= $CAIRO_VERSION" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$CAIRO_LIBS"; then - pkg_cv_CAIRO_LIBS="$CAIRO_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= \$CAIRO_VERSION\""; } >&5 - ($PKG_CONFIG --exists --print-errors "cairo >= $CAIRO_VERSION") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= $CAIRO_VERSION" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - CAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "cairo >= $CAIRO_VERSION" 2>&1` - else - CAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "cairo >= $CAIRO_VERSION" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$CAIRO_PKG_ERRORS" >&5 - - enable_cairo_output="no" -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - enable_cairo_output="no" -else - CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS - CAIRO_LIBS=$pkg_cv_CAIRO_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - enable_cairo_output="yes" -fi -fi - - - - - if test x$enable_cairo_output = xyes; then - BUILD_CAIRO_OUTPUT_TRUE= - BUILD_CAIRO_OUTPUT_FALSE='#' -else - BUILD_CAIRO_OUTPUT_TRUE='#' - BUILD_CAIRO_OUTPUT_FALSE= -fi - - -if test x$enable_cairo_output = xyes; then - $as_echo "#define HAVE_CAIRO 1" >>confdefs.h - - CAIRO_FEATURE="#define POPPLER_HAS_CAIRO 1" - CAIRO_REQ="cairo" - for ac_header in fcntl.h sys/mman.h sys/stat.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -else - CAIRO_FEATURE="#undef POPPLER_HAS_CAIRO" - CAIRO_REQ="" -fi - - - -found_introspection=no -if test x$enable_cairo_output = xyes; then - POPPLER_GLIB_DISABLE_DEPRECATED="" - POPPLER_GLIB_DISABLE_SINGLE_INCLUDES="" - - GLIB_REQUIRED=2.18 - # Check whether --enable-poppler-glib was given. -if test "${enable_poppler_glib+set}" = set; then : - enableval=$enable_poppler_glib; enable_poppler_glib=$enableval -else - enable_poppler_glib="try" -fi - - if test x$enable_poppler_glib = xyes; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POPPLER_GLIB" >&5 -$as_echo_n "checking for POPPLER_GLIB... " >&6; } - -if test -n "$POPPLER_GLIB_CFLAGS"; then - pkg_cv_POPPLER_GLIB_CFLAGS="$POPPLER_GLIB_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= \$GLIB_REQUIRED gobject-2.0 >= \$GLIB_REQUIRED cairo >= \$CAIRO_VERSION\""; } >&5 - ($PKG_CONFIG --exists --print-errors "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_POPPLER_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$POPPLER_GLIB_LIBS"; then - pkg_cv_POPPLER_GLIB_LIBS="$POPPLER_GLIB_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= \$GLIB_REQUIRED gobject-2.0 >= \$GLIB_REQUIRED cairo >= \$CAIRO_VERSION\""; } >&5 - ($PKG_CONFIG --exists --print-errors "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_POPPLER_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - POPPLER_GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>&1` - else - POPPLER_GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$POPPLER_GLIB_PKG_ERRORS" >&5 - - as_fn_error $? "Package requirements (glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION) were not met: - -$POPPLER_GLIB_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -Alternatively, you may set the environment variables POPPLER_GLIB_CFLAGS -and POPPLER_GLIB_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details." "$LINENO" 5 -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -Alternatively, you may set the environment variables POPPLER_GLIB_CFLAGS -and POPPLER_GLIB_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details. - -To get pkg-config, see <http://pkg-config.freedesktop.org/>. -See \`config.log' for more details" "$LINENO" 5; } -else - POPPLER_GLIB_CFLAGS=$pkg_cv_POPPLER_GLIB_CFLAGS - POPPLER_GLIB_LIBS=$pkg_cv_POPPLER_GLIB_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -fi - elif test x$enable_poppler_glib = xtry; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POPPLER_GLIB" >&5 -$as_echo_n "checking for POPPLER_GLIB... " >&6; } - -if test -n "$POPPLER_GLIB_CFLAGS"; then - pkg_cv_POPPLER_GLIB_CFLAGS="$POPPLER_GLIB_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= \$GLIB_REQUIRED gobject-2.0 >= \$GLIB_REQUIRED cairo >= \$CAIRO_VERSION\""; } >&5 - ($PKG_CONFIG --exists --print-errors "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_POPPLER_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$POPPLER_GLIB_LIBS"; then - pkg_cv_POPPLER_GLIB_LIBS="$POPPLER_GLIB_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= \$GLIB_REQUIRED gobject-2.0 >= \$GLIB_REQUIRED cairo >= \$CAIRO_VERSION\""; } >&5 - ($PKG_CONFIG --exists --print-errors "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_POPPLER_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - POPPLER_GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>&1` - else - POPPLER_GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$POPPLER_GLIB_PKG_ERRORS" >&5 - - enable_poppler_glib="no" -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - enable_poppler_glib="no" -else - POPPLER_GLIB_CFLAGS=$pkg_cv_POPPLER_GLIB_CFLAGS - POPPLER_GLIB_LIBS=$pkg_cv_POPPLER_GLIB_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - enable_poppler_glib="yes" -fi - fi - if test x$enable_poppler_glib = xyes; then - # Check for introspection - - - - # Check whether --enable-introspection was given. -if test "${enable_introspection+set}" = set; then : - enableval=$enable_introspection; -else - enable_introspection=auto -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gobject-introspection" >&5 -$as_echo_n "checking for gobject-introspection... " >&6; } - - case $enable_introspection in #( - no) : - found_introspection="no (disabled, use --enable-introspection to enable)" - ;; #( - yes) : - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - : -else - as_fn_error $? "gobject-introspection-1.0 is not installed" "$LINENO" 5 -fi - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.7\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.7") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - found_introspection=yes -else - as_fn_error $? "You need to have gobject-introspection >= 0.6.7 installed to build poppler" "$LINENO" 5 -fi - ;; #( - auto) : - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.7\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.7") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - found_introspection=yes -else - found_introspection=no -fi - ;; #( - *) : - as_fn_error $? "invalid argument passed to --enable-introspection, should be one of [no/auto/yes]" "$LINENO" 5 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found_introspection" >&5 -$as_echo "$found_introspection" >&6; } - - INTROSPECTION_SCANNER= - INTROSPECTION_COMPILER= - INTROSPECTION_GENERATE= - INTROSPECTION_GIRDIR= - INTROSPECTION_TYPELIBDIR= - if test "x$found_introspection" = "xyes"; then - INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0` - INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0` - INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0` - INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0` - INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)" - INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0` - INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0` - INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection - fi - - - - - - - - - - if test "x$found_introspection" = "xyes"; then - HAVE_INTROSPECTION_TRUE= - HAVE_INTROSPECTION_FALSE='#' -else - HAVE_INTROSPECTION_TRUE='#' - HAVE_INTROSPECTION_FALSE= -fi - - - - - GLIB_REQ="glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" - # Extract the first word of "glib-mkenums", so it can be a program name with args. -set dummy glib-mkenums; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_GLIB_MKENUMS+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $GLIB_MKENUMS in - [\\/]* | ?:[\\/]*) - ac_cv_path_GLIB_MKENUMS="$GLIB_MKENUMS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_GLIB_MKENUMS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -GLIB_MKENUMS=$ac_cv_path_GLIB_MKENUMS -if test -n "$GLIB_MKENUMS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_MKENUMS" >&5 -$as_echo "$GLIB_MKENUMS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - POPPLER_GLIB_DISABLE_DEPRECATED="$POPPLER_GLIB_DISABLE_DEPRECATED -DG_DISABLE_DEPRECATED" - POPPLER_GLIB_DISABLE_SINGLE_INCLUDES="$POPPLER_GLIB_DISABLE_SINGLE_INCLUDES -DG_DISABLE_SINGLE_INCLUDES" - fi -else - if test x$enable_poppler_glib = xyes; then - as_fn_error $? "\"Cairo output is required to build glib frontend\"" "$LINENO" 5 - fi - enable_poppler_glib="no" - GLIB_REQ="" -fi - if test x$enable_poppler_glib = xyes; then - BUILD_POPPLER_GLIB_TRUE= - BUILD_POPPLER_GLIB_FALSE='#' -else - BUILD_POPPLER_GLIB_TRUE='#' - BUILD_POPPLER_GLIB_FALSE= -fi - - if test "x$found_introspection" = "xyes"; then - HAVE_INTROSPECTION_TRUE= - HAVE_INTROSPECTION_FALSE='#' -else - HAVE_INTROSPECTION_TRUE='#' - HAVE_INTROSPECTION_FALSE= -fi - - - - - - - - # Extract the first word of "gtkdoc-check", so it can be a program name with args. -set dummy gtkdoc-check; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_GTKDOC_CHECK+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $GTKDOC_CHECK in - [\\/]* | ?:[\\/]*) - ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK -if test -n "$GTKDOC_CHECK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5 -$as_echo "$GTKDOC_CHECK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - for ac_prog in gtkdoc-rebase -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_GTKDOC_REBASE+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $GTKDOC_REBASE in - [\\/]* | ?:[\\/]*) - ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_GTKDOC_REBASE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE -if test -n "$GTKDOC_REBASE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5 -$as_echo "$GTKDOC_REBASE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$GTKDOC_REBASE" && break -done -test -n "$GTKDOC_REBASE" || GTKDOC_REBASE="true" - - # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args. -set dummy gtkdoc-mkpdf; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_GTKDOC_MKPDF+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $GTKDOC_MKPDF in - [\\/]* | ?:[\\/]*) - ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_GTKDOC_MKPDF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF -if test -n "$GTKDOC_MKPDF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5 -$as_echo "$GTKDOC_MKPDF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - -# Check whether --with-html-dir was given. -if test "${with_html_dir+set}" = set; then : - withval=$with_html_dir; -else - with_html_dir='${datadir}/gtk-doc/html' -fi - - HTML_DIR="$with_html_dir" - - - # Check whether --enable-gtk-doc was given. -if test "${enable_gtk_doc+set}" = set; then : - enableval=$enable_gtk_doc; -else - enable_gtk_doc=no -fi - - - if test x$enable_gtk_doc = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.14\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.14") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - : -else - as_fn_error $? "You need to have gtk-doc >= 1.14 installed to build $PACKAGE_NAME" "$LINENO" 5 -fi - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5 -$as_echo_n "checking whether to build gtk-doc documentation... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5 -$as_echo "$enable_gtk_doc" >&6; } - - # Check whether --enable-gtk-doc-html was given. -if test "${enable_gtk_doc_html+set}" = set; then : - enableval=$enable_gtk_doc_html; -else - enable_gtk_doc_html=yes -fi - - # Check whether --enable-gtk-doc-pdf was given. -if test "${enable_gtk_doc_pdf+set}" = set; then : - enableval=$enable_gtk_doc_pdf; -else - enable_gtk_doc_pdf=no -fi - - - if test -z "$GTKDOC_MKPDF"; then - enable_gtk_doc_pdf=no - fi - - - if test x$enable_gtk_doc = xyes; then - ENABLE_GTK_DOC_TRUE= - ENABLE_GTK_DOC_FALSE='#' -else - ENABLE_GTK_DOC_TRUE='#' - ENABLE_GTK_DOC_FALSE= -fi - - if test x$enable_gtk_doc_html = xyes; then - GTK_DOC_BUILD_HTML_TRUE= - GTK_DOC_BUILD_HTML_FALSE='#' -else - GTK_DOC_BUILD_HTML_TRUE='#' - GTK_DOC_BUILD_HTML_FALSE= -fi - - if test x$enable_gtk_doc_pdf = xyes; then - GTK_DOC_BUILD_PDF_TRUE= - GTK_DOC_BUILD_PDF_FALSE='#' -else - GTK_DOC_BUILD_PDF_TRUE='#' - GTK_DOC_BUILD_PDF_FALSE= -fi - - if test -n "$LIBTOOL"; then - GTK_DOC_USE_LIBTOOL_TRUE= - GTK_DOC_USE_LIBTOOL_FALSE='#' -else - GTK_DOC_USE_LIBTOOL_TRUE='#' - GTK_DOC_USE_LIBTOOL_FALSE= -fi - - if test -n "$GTKDOC_REBASE"; then - GTK_DOC_USE_REBASE_TRUE= - GTK_DOC_USE_REBASE_FALSE='#' -else - GTK_DOC_USE_REBASE_TRUE='#' - GTK_DOC_USE_REBASE_FALSE= -fi - - - - -# Check whether --enable-poppler-qt4 was given. -if test "${enable_poppler_qt4+set}" = set; then : - enableval=$enable_poppler_qt4; enable_poppler_qt4=$enableval -else - enable_poppler_qt4="try" -fi - -if test x$enable_poppler_qt4 = xyes; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POPPLER_QT4" >&5 -$as_echo_n "checking for POPPLER_QT4... " >&6; } - -if test -n "$POPPLER_QT4_CFLAGS"; then - pkg_cv_POPPLER_QT4_CFLAGS="$POPPLER_QT4_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_POPPLER_QT4_CFLAGS=`$PKG_CONFIG --cflags "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$POPPLER_QT4_LIBS"; then - pkg_cv_POPPLER_QT4_LIBS="$POPPLER_QT4_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_POPPLER_QT4_LIBS=`$PKG_CONFIG --libs "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - POPPLER_QT4_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>&1` - else - POPPLER_QT4_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$POPPLER_QT4_PKG_ERRORS" >&5 - - as_fn_error $? "Package requirements (QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0) were not met: - -$POPPLER_QT4_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -Alternatively, you may set the environment variables POPPLER_QT4_CFLAGS -and POPPLER_QT4_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details." "$LINENO" 5 -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -Alternatively, you may set the environment variables POPPLER_QT4_CFLAGS -and POPPLER_QT4_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details. - -To get pkg-config, see <http://pkg-config.freedesktop.org/>. -See \`config.log' for more details" "$LINENO" 5; } -else - POPPLER_QT4_CFLAGS=$pkg_cv_POPPLER_QT4_CFLAGS - POPPLER_QT4_LIBS=$pkg_cv_POPPLER_QT4_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -fi - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POPPLER_QT4_TEST" >&5 -$as_echo_n "checking for POPPLER_QT4_TEST... " >&6; } - -if test -n "$POPPLER_QT4_TEST_CFLAGS"; then - pkg_cv_POPPLER_QT4_TEST_CFLAGS="$POPPLER_QT4_TEST_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtTest >= 4.4.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "QtTest >= 4.4.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_POPPLER_QT4_TEST_CFLAGS=`$PKG_CONFIG --cflags "QtTest >= 4.4.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$POPPLER_QT4_TEST_LIBS"; then - pkg_cv_POPPLER_QT4_TEST_LIBS="$POPPLER_QT4_TEST_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtTest >= 4.4.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "QtTest >= 4.4.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_POPPLER_QT4_TEST_LIBS=`$PKG_CONFIG --libs "QtTest >= 4.4.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - POPPLER_QT4_TEST_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "QtTest >= 4.4.0" 2>&1` - else - POPPLER_QT4_TEST_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "QtTest >= 4.4.0" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$POPPLER_QT4_TEST_PKG_ERRORS" >&5 - - as_fn_error $? "Package requirements (QtTest >= 4.4.0) were not met: - -$POPPLER_QT4_TEST_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -Alternatively, you may set the environment variables POPPLER_QT4_TEST_CFLAGS -and POPPLER_QT4_TEST_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details." "$LINENO" 5 -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -Alternatively, you may set the environment variables POPPLER_QT4_TEST_CFLAGS -and POPPLER_QT4_TEST_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details. - -To get pkg-config, see <http://pkg-config.freedesktop.org/>. -See \`config.log' for more details" "$LINENO" 5; } -else - POPPLER_QT4_TEST_CFLAGS=$pkg_cv_POPPLER_QT4_TEST_CFLAGS - POPPLER_QT4_TEST_LIBS=$pkg_cv_POPPLER_QT4_TEST_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -fi -elif test x$enable_poppler_qt4 = xtry; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POPPLER_QT4" >&5 -$as_echo_n "checking for POPPLER_QT4... " >&6; } - -if test -n "$POPPLER_QT4_CFLAGS"; then - pkg_cv_POPPLER_QT4_CFLAGS="$POPPLER_QT4_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_POPPLER_QT4_CFLAGS=`$PKG_CONFIG --cflags "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$POPPLER_QT4_LIBS"; then - pkg_cv_POPPLER_QT4_LIBS="$POPPLER_QT4_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_POPPLER_QT4_LIBS=`$PKG_CONFIG --libs "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - POPPLER_QT4_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>&1` - else - POPPLER_QT4_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$POPPLER_QT4_PKG_ERRORS" >&5 - - enable_poppler_qt4="no" -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - enable_poppler_qt4="no" -else - POPPLER_QT4_CFLAGS=$pkg_cv_POPPLER_QT4_CFLAGS - POPPLER_QT4_LIBS=$pkg_cv_POPPLER_QT4_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - enable_poppler_qt4="yes" -fi - if test x$enable_poppler_qt4 = xyes; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POPPLER_QT4_TEST" >&5 -$as_echo_n "checking for POPPLER_QT4_TEST... " >&6; } - -if test -n "$POPPLER_QT4_TEST_CFLAGS"; then - pkg_cv_POPPLER_QT4_TEST_CFLAGS="$POPPLER_QT4_TEST_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtTest >= 4.4.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "QtTest >= 4.4.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_POPPLER_QT4_TEST_CFLAGS=`$PKG_CONFIG --cflags "QtTest >= 4.4.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$POPPLER_QT4_TEST_LIBS"; then - pkg_cv_POPPLER_QT4_TEST_LIBS="$POPPLER_QT4_TEST_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtTest >= 4.4.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "QtTest >= 4.4.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_POPPLER_QT4_TEST_LIBS=`$PKG_CONFIG --libs "QtTest >= 4.4.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - POPPLER_QT4_TEST_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "QtTest >= 4.4.0" 2>&1` - else - POPPLER_QT4_TEST_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "QtTest >= 4.4.0" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$POPPLER_QT4_TEST_PKG_ERRORS" >&5 - - enable_poppler_qt4="no" -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - enable_poppler_qt4="no" -else - POPPLER_QT4_TEST_CFLAGS=$pkg_cv_POPPLER_QT4_TEST_CFLAGS - POPPLER_QT4_TEST_LIBS=$pkg_cv_POPPLER_QT4_TEST_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - enable_poppler_qt4="yes" -fi - fi -fi - - - - - -if test x$enable_poppler_qt4 = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt4 moc" >&5 -$as_echo_n "checking for Qt4 moc... " >&6; } - MOCQT4=`which moc` - mocversion=`$MOCQT4 -v 2>&1` - mocversiongrep=`echo $mocversion | grep "Qt 4"` - if test x"$mocversiongrep" != x"$mocversion"; then - # moc was not the qt4 one, try with moc-qt4 - MOCQT4=`which moc-qt4` - mocversion=`$MOCQT4 -v 2>&1` - mocversiongrep=`echo $mocversion | grep "Qt 4"` - if test x"$mocversiongrep" != x"$mocversion"; then - # no valid moc found - enable_poppler_qt4=no; - MOCQT4="not found" - fi - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MOCQT4" >&5 -$as_echo "$MOCQT4" >&6; } -fi - - if test "x$enable_poppler_qt4" = "xyes"; then - BUILD_POPPLER_QT4_TRUE= - BUILD_POPPLER_QT4_FALSE='#' -else - BUILD_POPPLER_QT4_TRUE='#' - BUILD_POPPLER_QT4_FALSE= -fi - - - -# Check whether --enable-poppler-cpp was given. -if test "${enable_poppler_cpp+set}" = set; then : - enableval=$enable_poppler_cpp; enable_poppler_cpp=$enableval -else - enable_poppler_cpp="yes" -fi - -if test x$enable_poppler_cpp = xyes; then - - if test "X$prefix" = "XNONE"; then - acl_final_prefix="$ac_default_prefix" - else - acl_final_prefix="$prefix" - fi - if test "X$exec_prefix" = "XNONE"; then - acl_final_exec_prefix='${prefix}' - else - acl_final_exec_prefix="$exec_prefix" - fi - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" - prefix="$acl_save_prefix" - - - - acl_libdirstem=lib - acl_libdirstem2= - case "$host_os" in - solaris*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 -$as_echo_n "checking for 64-bit host... " >&6; } -if ${gl_cv_solaris_64bit+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#ifdef _LP64 -sixtyfour bits -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "sixtyfour bits" >/dev/null 2>&1; then : - gl_cv_solaris_64bit=yes -else - gl_cv_solaris_64bit=no -fi -rm -f conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 -$as_echo "$gl_cv_solaris_64bit" >&6; } - if test $gl_cv_solaris_64bit = yes; then - acl_libdirstem=lib/64 - case "$host_cpu" in - sparc*) acl_libdirstem2=lib/sparcv9 ;; - i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; - esac - fi - ;; - *) - searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` - if test -n "$searchpath"; then - acl_save_IFS="${IFS= }"; IFS=":" - for searchdir in $searchpath; do - if test -d "$searchdir"; then - case "$searchdir" in - */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; - */../ | */.. ) - # Better ignore directories of this form. They are misleading. - ;; - *) searchdir=`cd "$searchdir" && pwd` - case "$searchdir" in - */lib64 ) acl_libdirstem=lib64 ;; - esac ;; - esac - fi - done - IFS="$acl_save_IFS" - fi - ;; - esac - test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" - - - - - - - - - - - - use_additional=yes - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - -# Check whether --with-libiconv-prefix was given. -if test "${with_libiconv_prefix+set}" = set; then : - withval=$with_libiconv_prefix; - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - else - additional_includedir="$withval/include" - additional_libdir="$withval/$acl_libdirstem" - if test "$acl_libdirstem2" != "$acl_libdirstem" \ - && ! test -d "$withval/$acl_libdirstem"; then - additional_libdir="$withval/$acl_libdirstem2" - fi - fi - fi - -fi - - LIBICONV= - LTLIBICONV= - INCICONV= - LIBICONV_PREFIX= - HAVE_LIBICONV= - rpathdirs= - ltrpathdirs= - names_already_handled= - names_next_round='iconv ' - while test -n "$names_next_round"; do - names_this_round="$names_next_round" - names_next_round= - for name in $names_this_round; do - already_handled= - for n in $names_already_handled; do - if test "$n" = "$name"; then - already_handled=yes - break - fi - done - if test -z "$already_handled"; then - names_already_handled="$names_already_handled $name" - uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` - eval value=\"\$HAVE_LIB$uppername\" - if test -n "$value"; then - if test "$value" = yes; then - eval value=\"\$LIB$uppername\" - test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" - eval value=\"\$LTLIB$uppername\" - test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" - else - : - fi - else - found_dir= - found_la= - found_so= - found_a= - eval libname=\"$acl_libname_spec\" # typically: libname=lib$name - if test -n "$acl_shlibext"; then - shrext=".$acl_shlibext" # typically: shrext=.so - else - shrext= - fi - if test $use_additional = yes; then - dir="$additional_libdir" - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" - fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then - found_dir="$dir" - found_so="$dir/$f" - break - fi - done - fi - fi - fi - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi - fi - if test "X$found_dir" = "X"; then - for x in $LDFLAGS $LTLIBICONV; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - case "$x" in - -L*) - dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" - fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then - found_dir="$dir" - found_so="$dir/$f" - break - fi - done - fi - fi - fi - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi - ;; - esac - if test "X$found_dir" != "X"; then - break - fi - done - fi - if test "X$found_dir" != "X"; then - LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" - if test "X$found_so" != "X"; then - if test "$enable_rpath" = no \ - || test "X$found_dir" = "X/usr/$acl_libdirstem" \ - || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then - LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" - else - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $found_dir" - fi - if test "$acl_hardcode_direct" = yes; then - LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" - else - if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then - LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $found_dir" - fi - else - haveit= - for x in $LDFLAGS $LIBICONV; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-L$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" - fi - if test "$acl_hardcode_minus_L" != no; then - LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" - else - LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" - fi - fi - fi - fi - else - if test "X$found_a" != "X"; then - LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" - else - LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" - fi - fi - additional_includedir= - case "$found_dir" in - */$acl_libdirstem | */$acl_libdirstem/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` - if test "$name" = 'iconv'; then - LIBICONV_PREFIX="$basedir" - fi - additional_includedir="$basedir/include" - ;; - */$acl_libdirstem2 | */$acl_libdirstem2/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` - if test "$name" = 'iconv'; then - LIBICONV_PREFIX="$basedir" - fi - additional_includedir="$basedir/include" - ;; - esac - if test "X$additional_includedir" != "X"; then - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - for x in $CPPFLAGS $INCICONV; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" - fi - fi - fi - fi - fi - if test -n "$found_la"; then - save_libdir="$libdir" - case "$found_la" in - */* | *\\*) . "$found_la" ;; - *) . "./$found_la" ;; - esac - libdir="$save_libdir" - for dep in $dependency_libs; do - case "$dep" in - -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ - && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then - haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ - || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - haveit= - for x in $LDFLAGS $LIBICONV; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" - fi - fi - haveit= - for x in $LDFLAGS $LTLIBICONV; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" - fi - fi - fi - fi - ;; - -R*) - dir=`echo "X$dep" | sed -e 's/^X-R//'` - if test "$enable_rpath" != no; then - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $dir" - fi - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $dir" - fi - fi - ;; - -l*) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` - ;; - *.la) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` - ;; - *) - LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" - LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" - ;; - esac - done - fi - else - LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" - LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" - fi - fi - fi - done - done - if test "X$rpathdirs" != "X"; then - if test -n "$acl_hardcode_libdir_separator"; then - alldirs= - for found_dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" - done - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" - else - for found_dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$found_dir" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" - done - fi - fi - if test "X$ltrpathdirs" != "X"; then - for found_dir in $ltrpathdirs; do - LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" - done - fi - - - - - - - - - - - - - am_save_CPPFLAGS="$CPPFLAGS" - - for element in $INCICONV; do - haveit= - for x in $CPPFLAGS; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X$element"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" - fi - done - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 -$as_echo_n "checking for iconv... " >&6; } -if ${am_cv_func_iconv+:} false; then : - $as_echo_n "(cached) " >&6 -else - - am_cv_func_iconv="no, consider installing GNU libiconv" - am_cv_lib_iconv=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#include <iconv.h> -int -main () -{ -iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - am_cv_func_iconv=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test "$am_cv_func_iconv" != yes; then - am_save_LIBS="$LIBS" - LIBS="$LIBS $LIBICONV" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#include <iconv.h> -int -main () -{ -iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - am_cv_lib_iconv=yes - am_cv_func_iconv=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$am_save_LIBS" - fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 -$as_echo "$am_cv_func_iconv" >&6; } - if test "$am_cv_func_iconv" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 -$as_echo_n "checking for working iconv... " >&6; } -if ${am_cv_func_iconv_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - - am_save_LIBS="$LIBS" - if test $am_cv_lib_iconv = yes; then - LIBS="$LIBS $LIBICONV" - fi - if test "$cross_compiling" = yes; then : - case "$host_os" in - aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; - *) am_cv_func_iconv_works="guessing yes" ;; - esac -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include <iconv.h> -#include <string.h> -int main () -{ - /* Test against AIX 5.1 bug: Failures are not distinguishable from successful - returns. */ - { - iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); - if (cd_utf8_to_88591 != (iconv_t)(-1)) - { - static const char input[] = "\342\202\254"; /* EURO SIGN */ - char buf[10]; - const char *inptr = input; - size_t inbytesleft = strlen (input); - char *outptr = buf; - size_t outbytesleft = sizeof (buf); - size_t res = iconv (cd_utf8_to_88591, - (char **) &inptr, &inbytesleft, - &outptr, &outbytesleft); - if (res == 0) - return 1; - } - } -#if 0 /* This bug could be worked around by the caller. */ - /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ - { - iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); - if (cd_88591_to_utf8 != (iconv_t)(-1)) - { - static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; - char buf[50]; - const char *inptr = input; - size_t inbytesleft = strlen (input); - char *outptr = buf; - size_t outbytesleft = sizeof (buf); - size_t res = iconv (cd_88591_to_utf8, - (char **) &inptr, &inbytesleft, - &outptr, &outbytesleft); - if ((int)res > 0) - return 1; - } - } -#endif - /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is - provided. */ - if (/* Try standardized names. */ - iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) - /* Try IRIX, OSF/1 names. */ - && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) - /* Try AIX names. */ - && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) - /* Try HP-UX names. */ - && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) - return 1; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - am_cv_func_iconv_works=yes -else - am_cv_func_iconv_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - LIBS="$am_save_LIBS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 -$as_echo "$am_cv_func_iconv_works" >&6; } - case "$am_cv_func_iconv_works" in - *no) am_func_iconv=no am_cv_lib_iconv=no ;; - *) am_func_iconv=yes ;; - esac - else - am_func_iconv=no am_cv_lib_iconv=no - fi - if test "$am_func_iconv" = yes; then - -$as_echo "#define HAVE_ICONV 1" >>confdefs.h - - fi - if test "$am_cv_lib_iconv" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 -$as_echo_n "checking how to link with libiconv... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 -$as_echo "$LIBICONV" >&6; } - else - CPPFLAGS="$am_save_CPPFLAGS" - LIBICONV= - LTLIBICONV= - fi - - - - if test "$am_cv_func_iconv" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 -$as_echo_n "checking for iconv declaration... " >&6; } - if ${am_cv_proto_iconv+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include <stdlib.h> -#include <iconv.h> -extern -#ifdef __cplusplus -"C" -#endif -#if defined(__STDC__) || defined(__cplusplus) -size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); -#else -size_t iconv(); -#endif - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - am_cv_proto_iconv_arg1="" -else - am_cv_proto_iconv_arg1="const" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" -fi - - am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_t:- - }$am_cv_proto_iconv" >&5 -$as_echo "${ac_t:- - }$am_cv_proto_iconv" >&6; } - -cat >>confdefs.h <<_ACEOF -#define ICONV_CONST $am_cv_proto_iconv_arg1 -_ACEOF - - fi - - if test x$am_func_iconv != xyes; then - enable_poppler_cpp=no - fi -fi - - if test "x$enable_poppler_cpp" = "xyes"; then - BUILD_POPPLER_CPP_TRUE= - BUILD_POPPLER_CPP_FALSE='#' -else - BUILD_POPPLER_CPP_TRUE='#' - BUILD_POPPLER_CPP_FALSE= -fi - - - -# Check whether --enable-gtk-test was given. -if test "${enable_gtk_test+set}" = set; then : - enableval=$enable_gtk_test; enable_gtk_test=$enableval -else - enable_gtk_test="try" -fi - -if test x$enable_gtk_test = xyes; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK_TEST" >&5 -$as_echo_n "checking for GTK_TEST... " >&6; } - -if test -n "$GTK_TEST_CFLAGS"; then - pkg_cv_GTK_TEST_CFLAGS="$GTK_TEST_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_GTK_TEST_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$GTK_TEST_LIBS"; then - pkg_cv_GTK_TEST_LIBS="$GTK_TEST_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_GTK_TEST_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - GTK_TEST_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>&1` - else - GTK_TEST_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$GTK_TEST_PKG_ERRORS" >&5 - - as_fn_error $? "Package requirements (gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0) were not met: - -$GTK_TEST_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -Alternatively, you may set the environment variables GTK_TEST_CFLAGS -and GTK_TEST_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details." "$LINENO" 5 -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -Alternatively, you may set the environment variables GTK_TEST_CFLAGS -and GTK_TEST_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details. - -To get pkg-config, see <http://pkg-config.freedesktop.org/>. -See \`config.log' for more details" "$LINENO" 5; } -else - GTK_TEST_CFLAGS=$pkg_cv_GTK_TEST_CFLAGS - GTK_TEST_LIBS=$pkg_cv_GTK_TEST_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -fi -elif test x$enable_gtk_test = xtry; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK_TEST" >&5 -$as_echo_n "checking for GTK_TEST... " >&6; } - -if test -n "$GTK_TEST_CFLAGS"; then - pkg_cv_GTK_TEST_CFLAGS="$GTK_TEST_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_GTK_TEST_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$GTK_TEST_LIBS"; then - pkg_cv_GTK_TEST_LIBS="$GTK_TEST_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_GTK_TEST_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - GTK_TEST_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>&1` - else - GTK_TEST_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$GTK_TEST_PKG_ERRORS" >&5 - - enable_gtk_test="no" -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - enable_gtk_test="no" -else - GTK_TEST_CFLAGS=$pkg_cv_GTK_TEST_CFLAGS - GTK_TEST_LIBS=$pkg_cv_GTK_TEST_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - enable_gtk_test="yes" -fi -fi - if test x$enable_gtk_test = xyes -a x$enable_poppler_glib = xyes; then - BUILD_GTK_TEST_TRUE= - BUILD_GTK_TEST_FALSE='#' -else - BUILD_GTK_TEST_TRUE='#' - BUILD_GTK_TEST_FALSE= -fi - - -# Check whether --enable-utils was given. -if test "${enable_utils+set}" = set; then : - enableval=$enable_utils; enable_utils=$enableval -else - enable_utils="yes" -fi - - if test x$enable_utils = xyes; then - BUILD_UTILS_TRUE= - BUILD_UTILS_FALSE='#' -else - BUILD_UTILS_TRUE='#' - BUILD_UTILS_FALSE= -fi - - -# Check whether --enable-compile-warnings was given. -if test "${enable_compile_warnings+set}" = set; then : - enableval=$enable_compile_warnings; -else - enable_compile_warnings="yes" -fi - - - -# Check whether --enable-cms was given. -if test "${enable_cms+set}" = set; then : - enableval=$enable_cms; enable_cms=$enableval -else - enable_cms="try" -fi - -if test x$enable_cms = xyes; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LCMS" >&5 -$as_echo_n "checking for LCMS... " >&6; } - -if test -n "$LCMS_CFLAGS"; then - pkg_cv_LCMS_CFLAGS="$LCMS_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lcms\""; } >&5 - ($PKG_CONFIG --exists --print-errors "lcms") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LCMS_CFLAGS=`$PKG_CONFIG --cflags "lcms" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$LCMS_LIBS"; then - pkg_cv_LCMS_LIBS="$LCMS_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lcms\""; } >&5 - ($PKG_CONFIG --exists --print-errors "lcms") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LCMS_LIBS=`$PKG_CONFIG --libs "lcms" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - LCMS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "lcms" 2>&1` - else - LCMS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "lcms" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$LCMS_PKG_ERRORS" >&5 - - as_fn_error $? "Package requirements (lcms) were not met: - -$LCMS_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -Alternatively, you may set the environment variables LCMS_CFLAGS -and LCMS_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details." "$LINENO" 5 -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -Alternatively, you may set the environment variables LCMS_CFLAGS -and LCMS_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details. - -To get pkg-config, see <http://pkg-config.freedesktop.org/>. -See \`config.log' for more details" "$LINENO" 5; } -else - LCMS_CFLAGS=$pkg_cv_LCMS_CFLAGS - LCMS_LIBS=$pkg_cv_LCMS_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -fi -elif test x$enable_cms = xtry; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LCMS" >&5 -$as_echo_n "checking for LCMS... " >&6; } - -if test -n "$LCMS_CFLAGS"; then - pkg_cv_LCMS_CFLAGS="$LCMS_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lcms\""; } >&5 - ($PKG_CONFIG --exists --print-errors "lcms") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LCMS_CFLAGS=`$PKG_CONFIG --cflags "lcms" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$LCMS_LIBS"; then - pkg_cv_LCMS_LIBS="$LCMS_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lcms\""; } >&5 - ($PKG_CONFIG --exists --print-errors "lcms") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LCMS_LIBS=`$PKG_CONFIG --libs "lcms" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - LCMS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "lcms" 2>&1` - else - LCMS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "lcms" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$LCMS_PKG_ERRORS" >&5 - - enable_cms=no -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - enable_cms=no -else - LCMS_CFLAGS=$pkg_cv_LCMS_CFLAGS - LCMS_LIBS=$pkg_cv_LCMS_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - enable_cms=yes -fi -fi - -if test "x$enable_cms" = "xyes"; then - -$as_echo "#define USE_CMS 1" >>confdefs.h - -fi - if test x$enable_cms = xyes; then - USE_CMS_TRUE= - USE_CMS_FALSE='#' -else - USE_CMS_TRUE='#' - USE_CMS_FALSE= -fi - - -if test "x$GCC" != xyes; then - enable_compile_warnings=no -fi -case "$enable_compile_warnings" in - no) ;; - yes) CXXFLAGS="-Wall -Wno-write-strings -Woverloaded-virtual -Wnon-virtual-dtor -Wcast-align -fno-exceptions -fno-check-new -fno-common $CXXFLAGS" ;; - kde) CXXFLAGS="-Wnon-virtual-dtor -Wno-long-long -Wundef \ - -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -Wcast-align \ - -Wconversion -Wall -W -Wpointer-arith \ - -Wwrite-strings -O2 -Wformat-security \ - -Wmissing-format-attribute -fno-exceptions -fno-check-new \ - -fno-common $CXXFLAGS" ;; -esac - -case $($PKG_CONFIG --version) in - 0.?|0.10-7) - PC_REQUIRES_PRIVATE=""; - PC_REQUIRES="poppler = $VERSION";; - *) - PC_REQUIRES_PRIVATE="Requires.private: poppler = $VERSION"; - PC_REQUIRES="";; -esac - - - - -POPPLER_MAJOR_VERSION=0 - -POPPLER_MINOR_VERSION=18 - -POPPLER_MICRO_VERSION=0 - -POPPLER_VERSION=0.18.0 - - -ac_config_files="$ac_config_files Makefile goo/Makefile fofi/Makefile splash/Makefile poppler/Makefile utils/Makefile glib/Makefile glib/poppler-features.h glib/reference/Makefile glib/reference/version.xml glib/demo/Makefile test/Makefile qt4/Makefile qt4/src/Makefile qt4/tests/Makefile qt4/demos/Makefile cpp/Makefile cpp/poppler-version.h cpp/tests/Makefile poppler.pc poppler-uninstalled.pc poppler-cairo.pc poppler-cairo-uninstalled.pc poppler-splash.pc poppler-splash-uninstalled.pc poppler-glib.pc poppler-glib-uninstalled.pc poppler-qt4.pc poppler-qt4-uninstalled.pc poppler-cpp.pc poppler-cpp-uninstalled.pc" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${ENABLE_XPDF_HEADERS_TRUE}" && test -z "${ENABLE_XPDF_HEADERS_FALSE}"; then - as_fn_error $? "conditional \"ENABLE_XPDF_HEADERS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_LIBOPENJPEG_TRUE}" && test -z "${BUILD_LIBOPENJPEG_FALSE}"; then - as_fn_error $? "conditional \"BUILD_LIBOPENJPEG\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_LIBTIFF_TRUE}" && test -z "${BUILD_LIBTIFF_FALSE}"; then - as_fn_error $? "conditional \"BUILD_LIBTIFF\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_ZLIB_TRUE}" && test -z "${BUILD_ZLIB_FALSE}"; then - as_fn_error $? "conditional \"BUILD_ZLIB\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_LIBCURL_TRUE}" && test -z "${BUILD_LIBCURL_FALSE}"; then - as_fn_error $? "conditional \"BUILD_LIBCURL\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_LIBJPEG_TRUE}" && test -z "${BUILD_LIBJPEG_FALSE}"; then - as_fn_error $? "conditional \"BUILD_LIBJPEG\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_LIBPNG_TRUE}" && test -z "${BUILD_LIBPNG_FALSE}"; then - as_fn_error $? "conditional \"BUILD_LIBPNG\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_WITH_WIN32_FONTCONFIGURATION_TRUE}" && test -z "${BUILD_WITH_WIN32_FONTCONFIGURATION_FALSE}"; then - as_fn_error $? "conditional \"BUILD_WITH_WIN32_FONTCONFIGURATION\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_SPLASH_OUTPUT_TRUE}" && test -z "${BUILD_SPLASH_OUTPUT_FALSE}"; then - as_fn_error $? "conditional \"BUILD_SPLASH_OUTPUT\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_CAIRO_OUTPUT_TRUE}" && test -z "${BUILD_CAIRO_OUTPUT_FALSE}"; then - as_fn_error $? "conditional \"BUILD_CAIRO_OUTPUT\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${HAVE_INTROSPECTION_TRUE}" && test -z "${HAVE_INTROSPECTION_FALSE}"; then - as_fn_error $? "conditional \"HAVE_INTROSPECTION\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_POPPLER_GLIB_TRUE}" && test -z "${BUILD_POPPLER_GLIB_FALSE}"; then - as_fn_error $? "conditional \"BUILD_POPPLER_GLIB\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${HAVE_INTROSPECTION_TRUE}" && test -z "${HAVE_INTROSPECTION_FALSE}"; then - as_fn_error $? "conditional \"HAVE_INTROSPECTION\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then - as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then - as_fn_error $? "conditional \"GTK_DOC_BUILD_HTML\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then - as_fn_error $? "conditional \"GTK_DOC_BUILD_PDF\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then - as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then - as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_POPPLER_QT4_TRUE}" && test -z "${BUILD_POPPLER_QT4_FALSE}"; then - as_fn_error $? "conditional \"BUILD_POPPLER_QT4\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_POPPLER_CPP_TRUE}" && test -z "${BUILD_POPPLER_CPP_FALSE}"; then - as_fn_error $? "conditional \"BUILD_POPPLER_CPP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_GTK_TEST_TRUE}" && test -z "${BUILD_GTK_TEST_FALSE}"; then - as_fn_error $? "conditional \"BUILD_GTK_TEST\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_UTILS_TRUE}" && test -z "${BUILD_UTILS_FALSE}"; then - as_fn_error $? "conditional \"BUILD_UTILS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${USE_CMS_TRUE}" && test -z "${USE_CMS_FALSE}"; then - as_fn_error $? "conditional \"USE_CMS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by poppler $as_me 0.18.0, which was -generated by GNU Autoconf 2.68. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=poppler>." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -poppler config.status 0.18.0 -configured by $0, generated by GNU Autoconf 2.68, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' -DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' -macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' -macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' -enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' -enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' -pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' -SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' -ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' -host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' -host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' -host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' -build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' -build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' -build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' -SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' -Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' -GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' -EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' -FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' -LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' -NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' -LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' -ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' -exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' -lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' -lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' -lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' -reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' -file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' -want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' -sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' -AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' -archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' -STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' -RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' -lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' -CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' -compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' -GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' -nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' -lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' -objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' -need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' -MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' -LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' -OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' -libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' -module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' -postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' -need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' -version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' -runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' -libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' -soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' -install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' -finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' -old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' -striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' -predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' -postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' -predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' -postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' -LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' -reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' -reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' -compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' -GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' -archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' -module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' -with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' -no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld_CXX='`$ECHO "$hardcode_libdir_flag_spec_ld_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' -inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' -link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' -always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' -exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' -include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' -prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' -postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' -file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' -predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' -postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' -predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' -postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in AS \ -DLLTOOL \ -OBJDUMP \ -SHELL \ -ECHO \ -SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -deplibs_check_method \ -file_magic_cmd \ -file_magic_glob \ -want_nocaseglob \ -sharedlib_from_linklib_cmd \ -AR \ -AR_FLAGS \ -archiver_list_spec \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -nm_file_list_spec \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_pic \ -lt_prog_compiler_wl \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -MANIFEST_TOOL \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ -hardcode_libdir_separator \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -install_override_mode \ -finish_eval \ -old_striplib \ -striplib \ -compiler_lib_search_dirs \ -predep_objects \ -postdep_objects \ -predeps \ -postdeps \ -compiler_lib_search_path \ -LD_CXX \ -reload_flag_CXX \ -compiler_CXX \ -lt_prog_compiler_no_builtin_flag_CXX \ -lt_prog_compiler_pic_CXX \ -lt_prog_compiler_wl_CXX \ -lt_prog_compiler_static_CXX \ -lt_cv_prog_compiler_c_o_CXX \ -export_dynamic_flag_spec_CXX \ -whole_archive_flag_spec_CXX \ -compiler_needs_object_CXX \ -with_gnu_ld_CXX \ -allow_undefined_flag_CXX \ -no_undefined_flag_CXX \ -hardcode_libdir_flag_spec_CXX \ -hardcode_libdir_flag_spec_ld_CXX \ -hardcode_libdir_separator_CXX \ -exclude_expsyms_CXX \ -include_expsyms_CXX \ -file_list_spec_CXX \ -compiler_lib_search_dirs_CXX \ -predep_objects_CXX \ -postdep_objects_CXX \ -predeps_CXX \ -postdeps_CXX \ -compiler_lib_search_path_CXX; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postlink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec \ -reload_cmds_CXX \ -old_archive_cmds_CXX \ -old_archive_from_new_cmds_CXX \ -old_archive_from_expsyms_cmds_CXX \ -archive_cmds_CXX \ -archive_expsym_cmds_CXX \ -module_cmds_CXX \ -module_expsym_cmds_CXX \ -export_symbols_cmds_CXX \ -prelink_cmds_CXX \ -postlink_cmds_CXX; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - - - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "poppler/poppler-config.h") CONFIG_HEADERS="$CONFIG_HEADERS poppler/poppler-config.h" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "goo/Makefile") CONFIG_FILES="$CONFIG_FILES goo/Makefile" ;; - "fofi/Makefile") CONFIG_FILES="$CONFIG_FILES fofi/Makefile" ;; - "splash/Makefile") CONFIG_FILES="$CONFIG_FILES splash/Makefile" ;; - "poppler/Makefile") CONFIG_FILES="$CONFIG_FILES poppler/Makefile" ;; - "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; - "glib/Makefile") CONFIG_FILES="$CONFIG_FILES glib/Makefile" ;; - "glib/poppler-features.h") CONFIG_FILES="$CONFIG_FILES glib/poppler-features.h" ;; - "glib/reference/Makefile") CONFIG_FILES="$CONFIG_FILES glib/reference/Makefile" ;; - "glib/reference/version.xml") CONFIG_FILES="$CONFIG_FILES glib/reference/version.xml" ;; - "glib/demo/Makefile") CONFIG_FILES="$CONFIG_FILES glib/demo/Makefile" ;; - "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; - "qt4/Makefile") CONFIG_FILES="$CONFIG_FILES qt4/Makefile" ;; - "qt4/src/Makefile") CONFIG_FILES="$CONFIG_FILES qt4/src/Makefile" ;; - "qt4/tests/Makefile") CONFIG_FILES="$CONFIG_FILES qt4/tests/Makefile" ;; - "qt4/demos/Makefile") CONFIG_FILES="$CONFIG_FILES qt4/demos/Makefile" ;; - "cpp/Makefile") CONFIG_FILES="$CONFIG_FILES cpp/Makefile" ;; - "cpp/poppler-version.h") CONFIG_FILES="$CONFIG_FILES cpp/poppler-version.h" ;; - "cpp/tests/Makefile") CONFIG_FILES="$CONFIG_FILES cpp/tests/Makefile" ;; - "poppler.pc") CONFIG_FILES="$CONFIG_FILES poppler.pc" ;; - "poppler-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES poppler-uninstalled.pc" ;; - "poppler-cairo.pc") CONFIG_FILES="$CONFIG_FILES poppler-cairo.pc" ;; - "poppler-cairo-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES poppler-cairo-uninstalled.pc" ;; - "poppler-splash.pc") CONFIG_FILES="$CONFIG_FILES poppler-splash.pc" ;; - "poppler-splash-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES poppler-splash-uninstalled.pc" ;; - "poppler-glib.pc") CONFIG_FILES="$CONFIG_FILES poppler-glib.pc" ;; - "poppler-glib-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES poppler-glib-uninstalled.pc" ;; - "poppler-qt4.pc") CONFIG_FILES="$CONFIG_FILES poppler-qt4.pc" ;; - "poppler-qt4-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES poppler-qt4-uninstalled.pc" ;; - "poppler-cpp.pc") CONFIG_FILES="$CONFIG_FILES poppler-cpp.pc" ;; - "poppler-cpp-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES poppler-cpp-uninstalled.pc" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' <conf$$subs.awk | sed ' -/^[^""]/{ - N - s/\n// -} -' >>$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_tt=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_tt"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' <confdefs.h | sed ' -s/'"$ac_delim"'/"\\\ -"/g' >>$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="CXX " - -# ### BEGIN LIBTOOL CONFIG - -# Assembler program. -AS=$lt_AS - -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - -# Object dumper program. -OBJDUMP=$lt_OBJDUMP - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that protects backslashes. -ECHO=$lt_ECHO - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# convert \$build file names to \$host format. -to_host_file_cmd=$lt_cv_to_host_file_cmd - -# convert \$build files to toolchain format. -to_tool_file_cmd=$lt_cv_to_tool_file_cmd - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method = "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# How to find potential files when deplibs_check_method = "file_magic". -file_magic_glob=$lt_file_magic_glob - -# Find potential files using nocaseglob when deplibs_check_method = "file_magic". -want_nocaseglob=$lt_want_nocaseglob - -# Command to associate shared and link libraries. -sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd - -# The archiver. -AR=$lt_AR - -# Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS - -# How to feed a file listing to the archiver. -archiver_list_spec=$lt_archiver_list_spec - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=$lock_old_archive_extraction - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# Specify filename containing input files for \$NM. -nm_file_list_spec=$lt_nm_file_list_spec - -# The root where to search for dependent libraries,and in which our libraries should be installed. -lt_sysroot=$lt_sysroot - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Manifest tool. -MANIFEST_TOOL=$lt_MANIFEST_TOOL - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Permission mode override for installation of shared libraries. -install_override_mode=$lt_install_override_mode - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects -postdep_objects=$lt_postdep_objects -predeps=$lt_predeps -postdeps=$lt_postdeps - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - if test x"$xsi_shell" = xyes; then - sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ -func_dirname ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_basename ()$/,/^} # func_basename /c\ -func_basename ()\ -{\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ -func_dirname_and_basename ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ -func_stripname ()\ -{\ -\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ -\ # positional parameters, so assign one to ordinary parameter first.\ -\ func_stripname_result=${3}\ -\ func_stripname_result=${func_stripname_result#"${1}"}\ -\ func_stripname_result=${func_stripname_result%"${2}"}\ -} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ -func_split_long_opt ()\ -{\ -\ func_split_long_opt_name=${1%%=*}\ -\ func_split_long_opt_arg=${1#*=}\ -} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ -func_split_short_opt ()\ -{\ -\ func_split_short_opt_arg=${1#??}\ -\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ -} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ -func_lo2o ()\ -{\ -\ case ${1} in\ -\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ -\ *) func_lo2o_result=${1} ;;\ -\ esac\ -} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_xform ()$/,/^} # func_xform /c\ -func_xform ()\ -{\ - func_xform_result=${1%.*}.lo\ -} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_arith ()$/,/^} # func_arith /c\ -func_arith ()\ -{\ - func_arith_result=$(( $* ))\ -} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_len ()$/,/^} # func_len /c\ -func_len ()\ -{\ - func_len_result=${#1}\ -} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - -fi - -if test x"$lt_shell_append" = xyes; then - sed -e '/^func_append ()$/,/^} # func_append /c\ -func_append ()\ -{\ - eval "${1}+=\\${2}"\ -} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ -func_append_quoted ()\ -{\ -\ func_quote_for_eval "${2}"\ -\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ -} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 -$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} -fi - - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - - cat <<_LT_EOF >> "$ofile" - -# ### BEGIN LIBTOOL TAG CONFIG: CXX - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# How to create reloadable object files. -reload_flag=$lt_reload_flag_CXX -reload_cmds=$lt_reload_cmds_CXX - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds_CXX - -# A language specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU compiler? -with_gcc=$GCC_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object_CXX - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld_CXX - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute_CXX - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath_CXX - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds_CXX - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds_CXX - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec_CXX - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects_CXX -postdep_objects=$lt_postdep_objects_CXX -predeps=$lt_predeps_CXX -postdeps=$lt_postdeps_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -# ### END LIBTOOL TAG CONFIG: CXX -_LT_EOF - - ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - - -echo "" -echo "Building poppler with support for:" -echo " font configuration: $with_font_configuration" -echo " splash output: $enable_splash_output" -echo " cairo output: $enable_cairo_output" -echo " qt4 wrapper: $enable_poppler_qt4" -echo " glib wrapper: $enable_poppler_glib" -echo " introspection: $found_introspection" -echo " cpp wrapper: $enable_poppler_cpp" -echo " use gtk-doc: $enable_gtk_doc" -echo " use libjpeg: $enable_libjpeg" -echo " use libpng: $enable_libpng" -echo " use libtiff: $enable_libtiff" -echo " use zlib: $enable_zlib" -echo " use libcurl: $enable_libcurl" -echo " use libopenjpeg: $enable_libopenjpeg" -echo " use cms: $enable_cms" -echo " command line utils: $enable_utils" -echo "" - -if test x$enable_splash_output = xno -a x$enable_cairo_output = xno; then - echo " Warning: There is no rendering backend enabled" -fi - -if test x$enable_single_precision = xyes -a x$enable_fixedpoint = xyes; then - echo " Warning: Single precision and fixed point options should not be enabled at the same time" -fi - -if test x$enable_libjpeg != xyes; then - echo " Warning: Using libjpeg is recommended" -fi - -if test x$enable_zlib != xno; then - echo " Warning: Using zlib is not totally safe" -fi - -if test x$enable_libopenjpeg != xyes; then - echo " Warning: Using libopenjpeg is recommended" -fi diff --git a/Build/source/libs/poppler/poppler-0.18.0/configure.ac b/Build/source/libs/poppler/poppler-0.18.0/configure.ac deleted file mode 100644 index 7293d1f4082..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/configure.ac +++ /dev/null @@ -1,669 +0,0 @@ -m4_define([poppler_version_major],[0]) -m4_define([poppler_version_minor],[18]) -m4_define([poppler_version_micro],[0]) -m4_define([poppler_version],[poppler_version_major.poppler_version_minor.poppler_version_micro]) - -AC_PREREQ(2.59) -AC_INIT([poppler],[poppler_version],[https://bugs.freedesktop.org/enter_bug.cgi?product=poppler]) -AC_CONFIG_MACRO_DIR([m4]) -AM_INIT_AUTOMAKE([foreign]) -m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) -AM_CONFIG_HEADER(config.h) -AM_CONFIG_HEADER(poppler/poppler-config.h) -AC_C_BIGENDIAN - -dnl ##### Initialize libtool. -AC_LIBTOOL_WIN32_DLL -define([AC_LIBTOOL_LANG_F77_CONFIG], [:]) -AC_PROG_LIBTOOL - -dnl ##### Checks for programs. -AC_PROG_CC -AC_PROG_CXX -AC_ISC_POSIX -AC_PROG_CC_STDC -#if test -z "$CXX" -a "$CC" = "gcc"; then -# CXX="gcc" -#fi -AC_PROG_CXX -if test "x$GXX" = "xyes"; then - case "$host_os" in - cygwin* | mingw*) - ;; - *) - CXXFLAGS="$CXXFLAGS -ansi" - ;; - esac -fi -AC_PROG_INSTALL - -dnl ##### Check for pkgconfig -PKG_PROG_PKG_CONFIG - -dnl Enable these unconditionally. -AC_DEFINE([OPI_SUPPORT], [1], [Generate OPI comments in PS output.]) -AC_DEFINE([MULTITHREADED], [1], [Enable multithreading support.]) -AC_DEFINE([TEXTOUT_WORD_LIST], [1], [Enable word list support.]) - -dnl Check for OS specific flags -win32_libs="" -create_shared_lib="" -auto_import_flags="" -case "$host_os" in - cygwin*) - create_shared_lib="-no-undefined" - ;; - mingw*) - os_win32=yes - win32_libs="-lgdi32" - create_shared_lib="-no-undefined" - auto_import_flags="-Wl,--enable-auto-import" - ;; -esac - -AC_SUBST(win32_libs) -AC_SUBST(create_shared_lib) -AC_SUBST(auto_import_flags) - -ACX_PTHREAD() - -dnl Install xpdf headers -AC_ARG_ENABLE(xpdf-headers, - AC_HELP_STRING([--enable-xpdf-headers], - [Install unsupported xpdf headers.]), - enable_xpdf_headers=$enableval, - enable_xpdf_headers="no") -AM_CONDITIONAL(ENABLE_XPDF_HEADERS, test x$enable_xpdf_headers = xyes) - -AC_ARG_ENABLE(single-precision, -[ --enable-single-precision use single precision arithmetic (instead of double precision) in the Splash backend], -AC_DEFINE(USE_FLOAT, [1], [Use single precision arithmetic in the Splash backend])) - -AC_ARG_ENABLE(fixedpoint, -[ --enable-fixedpoint use fixed point (instead of double precision) arithmetic in the Splash backend], -AC_DEFINE(USE_FIXEDPOINT, [1], [Use fixed point arithmetic in the Splash backend])) - -dnl Relocation support -AC_ARG_ENABLE(relocatable, - AC_HELP_STRING([--disable-relocatable], - [Hardcode the poppler library location (on Windows).]), - enable_relocatable=$enableval, - [if test x$os_win32 = xyes; then - # default to yes on native Windows. - enable_relocatable="yes" - else - # default to no everywhere else. - enable_relocatable="no" - fi - ] -) - -if test x$enable_relocatable = xyes; then - if test x$os_win32 = xyes; then - AC_DEFINE([ENABLE_RELOCATABLE], - [1],[Do not hardcode the library location]) - else - AC_MSG_ERROR( - [Invalid setting for relocatable, only supported on windows]) - - fi -fi - -AC_DEFINE_DIR(POPPLER_DATADIR, "{datarootdir}/poppler", [Poppler data dir]) - -dnl ##### Checks for header files. -AC_PATH_XTRA -AC_HEADER_DIRENT -AC_CHECK_HEADERS([stdint.h]) - -dnl ##### Switch over to C++. This will make the checks below a little -dnl ##### bit stricter (requiring function prototypes in include files). -dnl ##### (99% of xpdf is written in C++.) -AC_LANG_CPLUSPLUS - -AC_CHECK_DECL(gettimeofday, [AC_CHECK_FUNC(gettimeofday, AC_DEFINE(HAVE_GETTIMEOFDAY, 1, [Defines if gettimeofday is available on your system]))],[],[#include <sys/time.h>]) -AC_CHECK_FUNC(localtime_r, AC_DEFINE(HAVE_LOCALTIME_R, 1, [Defines if localtime_r is available on your system])) -AC_CHECK_FUNC(gmtime_r, AC_DEFINE(HAVE_GMTIME_R, 1, [Defines if gmtime_r is available on your system])) - -dnl ##### Check for extra libraries needed by X. (LynxOS needs this.) -AC_CHECK_FUNC(gethostbyname) -if test $ac_cv_func_gethostbyname = no; then - AC_CHECK_LIB(bsd, gethostbyname, X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd") -fi - -AC_CHECK_FUNC(nanosleep,,) -dnl try in librt if not found in current LIBS -if test x$ac_cv_func_nanosleep = xno -then - AC_CHECK_LIB(rt,nanosleep, X_EXTRA_LIBS="$X_EXTRA_LIBS -lrt") -fi - -dnl try in libposix4, if not found so far -if test x$ac_cv_func_nanosleep = xno && test x$ac_cv_lib_rt_nanosleep = xno -then - AC_CHECK_LIB(posix4,nanosleep, X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix4") -fi - - -dnl Test for libopenjpeg -AC_ARG_ENABLE(libopenjpeg, - AC_HELP_STRING([--disable-libopenjpeg], - [Don't build against libopenjpeg.]), - enable_libopenjpeg=$enableval, - enable_libopenjpeg="try") -if test x$enable_libopenjpeg = xyes; then - AC_CHECK_LIB([openjpeg], [opj_cio_open],, - AC_MSG_ERROR("*** libopenjpeg library not found ***")) - AC_CHECK_HEADERS([openjpeg.h],, - AC_MSG_ERROR("*** libopenjpeg headers not found ***")) -elif test x$enable_libopenjpeg = xtry; then - AC_CHECK_LIB([openjpeg], [opj_cio_open], - [enable_libopenjpeg="yes"], - [enable_libopenjpeg="no"]) - AC_CHECK_HEADERS([openjpeg.h],, - [enable_libopenjpeg="no"]) -fi - -if test x$enable_libopenjpeg = xyes; then - LIBOPENJPEG_LIBS="-lopenjpeg" - AC_SUBST(LIBOPENJPEG_LIBS) - AC_DEFINE(ENABLE_LIBOPENJPEG) -fi - -AM_CONDITIONAL(BUILD_LIBOPENJPEG, test x$enable_libopenjpeg = xyes) -AH_TEMPLATE([ENABLE_LIBOPENJPEG], - [Use libopenjpeg instead of builtin jpeg2000 decoder.]) - -dnl ##### Test for libtiff -AC_ARG_ENABLE(libtiff, - AC_HELP_STRING([--disable-libtiff], - [Don't build against libtiff.]), - enable_libtiff=$enableval, - enable_libtiff="try") - -if test x$enable_libtiff = xyes; then - AC_CHECK_LIB([tiff], [TIFFOpen],, - AC_MSG_ERROR("*** libtiff library not found ***")) - AC_CHECK_HEADERS([tiffio.h],, - AC_MSG_ERROR("*** libtiff headers not found ***")) -elif test x$enable_libtiff = xtry; then - AC_CHECK_LIB([tiff], [TIFFOpen], - [enable_libtiff="yes"], - [enable_libtiff="no"]) - AC_CHECK_HEADERS([tiffio.h],, - [enable_libtiff="no"]) -fi - -if test x$enable_libtiff = xyes; then - LIBTIFF_LIBS="-ltiff" - AC_SUBST(LIBTIFF_LIBS) - AC_DEFINE(ENABLE_LIBTIFF) -fi - -AM_CONDITIONAL(BUILD_LIBTIFF, test x$enable_libtiff = xyes) -AH_TEMPLATE([ENABLE_LIBTIFF], [Build against libtiff.]) -if test x$enable_libtiff = xyes; then - AC_DEFINE(ENABLE_LIBTIFF, 1, [Build against libtiff.]) -fi - -dnl ##### Checks for library functions. -AC_CHECK_FUNCS(popen mkstemp mkstemps) - -dnl ##### Back to C for the library tests. -AC_LANG_C - -dnl ##### Check for fseeko/ftello or fseek64/ftell64 -dnl The LARGEFILE and FSEEKO macros have to be called in C, not C++, mode. -AC_SYS_LARGEFILE -AC_FUNC_FSEEKO -AC_CHECK_FUNCS(fseek64, xpdf_cv_func_fseek64=yes, xpdf_cv_func_fseek64=no) -AC_CHECK_FUNCS(ftell64, xpdf_cv_func_ftell64=yes, xpdf_cv_func_ftell64=no) -if test "$xpdf_cv_func_fseek64" = yes -a "$xpdf_cv_func_ftell64" = yes; then - AC_DEFINE(HAVE_FSEEK64) -fi - -dnl Test for zlib -AC_ARG_ENABLE([zlib], - [AS_HELP_STRING([--enable-zlib],[Build with zlib])], - [],[enable_zlib="no"]) -if test x$enable_zlib = xyes; then - AC_CHECK_LIB([z], [inflate],, - AC_MSG_ERROR("*** zlib library not found ***")) - AC_CHECK_HEADERS([zlib.h],, - AC_MSG_ERROR("*** zlib headers not found ***")) -elif test x$enable_zlib = xtry; then - AC_CHECK_LIB([z], [inflate], - [enable_zlib="yes"], - [enable_zlib="no"]) - AC_CHECK_HEADERS([zlib.h],, - [enable_zlib="no"]) -fi - -if test x$enable_zlib = xyes; then - ZLIB_LIBS="-lz" - AC_SUBST(ZLIB_LIBS) - AC_DEFINE(ENABLE_ZLIB) -fi - -AM_CONDITIONAL(BUILD_ZLIB, test x$enable_zlib = xyes) -AH_TEMPLATE([ENABLE_ZLIB], - [Use zlib instead of builtin zlib decoder.]) - -dnl Test for libcurl -AC_ARG_ENABLE(libcurl, - AC_HELP_STRING([--enable-libcurl], - [Build with libcurl based HTTP support.]), - enable_libcurl=$enableval, - enable_libcurl="no") - -if test x$enable_libcurl = xyes; then - PKG_CHECK_MODULES(LIBCURL, libcurl) - AC_DEFINE(ENABLE_LIBCURL, 1, [Build against libcurl.]) - AC_DEFINE(POPPLER_HAS_CURL_SUPPORT, 1, - [Support for curl based doc builder is compiled in.]) -fi - -AM_CONDITIONAL(BUILD_LIBCURL, test x$enable_libcurl = xyes) - -dnl Test for libjpeg -AC_ARG_ENABLE(libjpeg, - AC_HELP_STRING([--disable-libjpeg], - [Don't build against libjpeg.]), - enable_libjpeg=$enableval, - enable_libjpeg="try") -if test x$enable_libjpeg != xno; then - POPPLER_FIND_JPEG -fi - -AM_CONDITIONAL(BUILD_LIBJPEG, test x$enable_libjpeg = xyes) -AH_TEMPLATE([ENABLE_LIBJPEG], - [Use libjpeg instead of builtin jpeg decoder.]) - -dnl Test for libpng -AC_ARG_ENABLE(libpng, - AC_HELP_STRING([--disable-libpng], - [Do not build against libpng.]), - enable_libpng=$enableval, - enable_libpng="try") - -if test x$enable_libpng != xno; then - PKG_CHECK_MODULES(LIBPNG, libpng, [enable_libpng="yes"], - [enable_libpng="no"]) -fi - -if test x$enable_libpng = xyes; then - AC_DEFINE(ENABLE_LIBPNG, 1, [Build against libpng.]) -fi - -AM_CONDITIONAL(BUILD_LIBPNG, test x$enable_libpng = xyes) - -dnl Check for freetype headers -FREETYPE_LIBS= -FREETYPE_CFLAGS= - -PKG_CHECK_MODULES(FREETYPE, freetype2, - [freetype_pkgconfig=yes], [freetype_pkgconfig=no]) - -if test "x$freetype_pkgconfig" = "xyes"; then - - AC_DEFINE(HAVE_FREETYPE_H, 1, [Have FreeType2 include files]) - -else - - AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no) - if test "x$FREETYPE_CONFIG" != "xno" ; then - - FREETYPE_CFLAGS=`$FREETYPE_CONFIG --cflags` - FREETYPE_LIBS=`$FREETYPE_CONFIG --libs` - AC_DEFINE(HAVE_FREETYPE_H, 1, [Have FreeType2 include files]) - - fi - -fi - -AC_SUBST(FREETYPE_CFLAGS) -AC_SUBST(FREETYPE_LIBS) - -AC_MSG_CHECKING([which font configuration to use]) -AC_ARG_WITH([font_configuration], - [AS_HELP_STRING([--with-font-configuration=fontconfig|win32], - [Select font configuration backend])], - [], - [if test x$os_win32 = xyes; then - # default to win32 on native Windows. - with_font_configuration=win32 - else - # default to fontconig everywhere else. - with_font_configuration=fontconfig - fi - ] -) -AC_MSG_RESULT([$with_font_configuration]) - -case $with_font_configuration in - win32) - AC_DEFINE([WITH_FONTCONFIGURATION_WIN32], - [1],[Use win32 font configuration backend]) - # Set the minimum required Internet Explorer version to 5.0 - CPPFLAGS="$CPPFLAGS -D_WIN32_IE=0x0500" - ;; - fontconfig) - AC_DEFINE([WITH_FONTCONFIGURATION_FONTCONFIG], - [1],[Use fontconfig font configuration backend]) - PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= 2.0.0) - ;; - *) - AC_MSG_ERROR( - [Invalid font configuration setting: $with_font_configuration]) - ;; -esac - -AM_CONDITIONAL(BUILD_WITH_WIN32_FONTCONFIGURATION, - test x$with_font_configuration = xwin32) - -AC_ARG_ENABLE(splash-output, - AC_HELP_STRING([--disable-splash-output], - [Don't build the Splash graphics backend.]),, - enable_splash_output="yes") -AM_CONDITIONAL(BUILD_SPLASH_OUTPUT, test x$enable_splash_output = xyes) -AH_TEMPLATE([HAVE_SPLASH], [Use splash for rendering.]) -if test x$enable_splash_output = xyes; then - AC_DEFINE(HAVE_SPLASH) -fi - -CAIRO_VERSION="1.10.0" -AC_SUBST(CAIRO_VERSION) -AC_ARG_ENABLE(cairo-output, - AC_HELP_STRING([--disable-cairo-output], - [Don't build the cairo graphics backend.]), - enable_cairo_output=$enableval, - enable_cairo_output="try") -if test x$enable_cairo_output = xyes; then - PKG_CHECK_MODULES(CAIRO, cairo >= $CAIRO_VERSION) -elif test x$enable_cairo_output = xtry; then - PKG_CHECK_MODULES(CAIRO, cairo >= $CAIRO_VERSION, - [enable_cairo_output="yes"], - [enable_cairo_output="no"]) -fi - -AC_SUBST(CAIRO_CFLAGS) -AC_SUBST(CAIRO_LIBS) - -AM_CONDITIONAL(BUILD_CAIRO_OUTPUT, test x$enable_cairo_output = xyes) -AH_TEMPLATE([HAVE_CAIRO], [Use cairo for rendering.]) -if test x$enable_cairo_output = xyes; then - AC_DEFINE(HAVE_CAIRO) - CAIRO_FEATURE="#define POPPLER_HAS_CAIRO 1" - CAIRO_REQ="cairo" - AC_CHECK_HEADERS(fcntl.h sys/mman.h sys/stat.h) -else - CAIRO_FEATURE="#undef POPPLER_HAS_CAIRO" - CAIRO_REQ="" -fi -AC_SUBST(CAIRO_FEATURE) -AC_SUBST(CAIRO_REQ) - -found_introspection=no -if test x$enable_cairo_output = xyes; then - POPPLER_GLIB_DISABLE_DEPRECATED="" - POPPLER_GLIB_DISABLE_SINGLE_INCLUDES="" - - GLIB_REQUIRED=2.18 - AC_ARG_ENABLE(poppler-glib, - AC_HELP_STRING([--disable-poppler-glib], - [Don't compile poppler glib wrapper.]), - enable_poppler_glib=$enableval, - enable_poppler_glib="try") - if test x$enable_poppler_glib = xyes; then - PKG_CHECK_MODULES(POPPLER_GLIB, glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION) - elif test x$enable_poppler_glib = xtry; then - PKG_CHECK_MODULES(POPPLER_GLIB, glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION, - [enable_poppler_glib="yes"], - [enable_poppler_glib="no"]) - fi - if test x$enable_poppler_glib = xyes; then - # Check for introspection - GOBJECT_INTROSPECTION_CHECK([0.6.7]) - - GLIB_REQ="glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" - AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums]) - POPPLER_GLIB_DISABLE_DEPRECATED="$POPPLER_GLIB_DISABLE_DEPRECATED -DG_DISABLE_DEPRECATED" - POPPLER_GLIB_DISABLE_SINGLE_INCLUDES="$POPPLER_GLIB_DISABLE_SINGLE_INCLUDES -DG_DISABLE_SINGLE_INCLUDES" - fi -else - if test x$enable_poppler_glib = xyes; then - AC_MSG_ERROR("Cairo output is required to build glib frontend") - fi - enable_poppler_glib="no" - GLIB_REQ="" -fi -AM_CONDITIONAL(BUILD_POPPLER_GLIB, test x$enable_poppler_glib = xyes) -AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes") -AC_SUBST(GLIB_REQ) -AC_SUBST(POPPLER_GLIB_DISABLE_DEPRECATED) -AC_SUBST(POPPLER_GLIB_DISABLE_SINGLE_INCLUDES) - -GTK_DOC_CHECK([1.14],[--flavour no-tmpl]) - -dnl -dnl Try Qt4 -dnl - -AC_ARG_ENABLE(poppler-qt4, - AC_HELP_STRING([--disable-poppler-qt4], - [Don't compile poppler Qt4 wrapper.]), - enable_poppler_qt4=$enableval, - enable_poppler_qt4="try") -if test x$enable_poppler_qt4 = xyes; then - PKG_CHECK_MODULES(POPPLER_QT4, - QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0) - PKG_CHECK_MODULES(POPPLER_QT4_TEST, - QtTest >= 4.4.0) -elif test x$enable_poppler_qt4 = xtry; then - PKG_CHECK_MODULES(POPPLER_QT4, - QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0, - [enable_poppler_qt4="yes"], - [enable_poppler_qt4="no"]) - if test x$enable_poppler_qt4 = xyes; then - PKG_CHECK_MODULES(POPPLER_QT4_TEST, - QtTest >= 4.4.0, - [enable_poppler_qt4="yes"], - [enable_poppler_qt4="no"]) - fi -fi - -AC_SUBST(POPPLER_QT4_CXXFLAGS) -AC_SUBST(POPPLER_QT4_LIBS) -AC_SUBST(POPPLER_QT4_TEST_LIBS) - -if test x$enable_poppler_qt4 = xyes; then - AC_MSG_CHECKING([for Qt4 moc]) - MOCQT4=`which moc` - mocversion=`$MOCQT4 -v 2>&1` - mocversiongrep=`echo $mocversion | grep "Qt 4"` - if test x"$mocversiongrep" != x"$mocversion"; then - # moc was not the qt4 one, try with moc-qt4 - MOCQT4=`which moc-qt4` - mocversion=`$MOCQT4 -v 2>&1` - mocversiongrep=`echo $mocversion | grep "Qt 4"` - if test x"$mocversiongrep" != x"$mocversion"; then - # no valid moc found - enable_poppler_qt4=no; - MOCQT4="not found" - fi - fi - AC_SUBST(MOCQT4) - AC_MSG_RESULT([$MOCQT4]) -fi - -AM_CONDITIONAL(BUILD_POPPLER_QT4, test "x$enable_poppler_qt4" = "xyes") - -dnl -dnl CPP frontend -dnl - -AC_ARG_ENABLE(poppler-cpp, - AC_HELP_STRING([--disable-poppler-cpp], - [Don't compile poppler cpp wrapper.]), - enable_poppler_cpp=$enableval, - enable_poppler_cpp="yes") -if test x$enable_poppler_cpp = xyes; then - AM_ICONV() - if test x$am_func_iconv != xyes; then - enable_poppler_cpp=no - fi -fi - -AM_CONDITIONAL(BUILD_POPPLER_CPP, test "x$enable_poppler_cpp" = "xyes") - - -AC_ARG_ENABLE(gtk-test, - AC_HELP_STRING([--disable-gtk-test], - [Don't compile GTK+ test program.]), - enable_gtk_test=$enableval, - enable_gtk_test="try") -if test x$enable_gtk_test = xyes; then - PKG_CHECK_MODULES(GTK_TEST, gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0) -elif test x$enable_gtk_test = xtry; then - PKG_CHECK_MODULES(GTK_TEST, gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0, - [enable_gtk_test="yes"], - [enable_gtk_test="no"]) -fi -AM_CONDITIONAL(BUILD_GTK_TEST, test x$enable_gtk_test = xyes -a x$enable_poppler_glib = xyes) - -AC_ARG_ENABLE(utils, - AC_HELP_STRING([--disable-utils], - [Don't compile poppler command line utils.]), - enable_utils=$enableval, - enable_utils="yes") -AM_CONDITIONAL(BUILD_UTILS, test x$enable_utils = xyes) - -AC_ARG_ENABLE(compile-warnings, - AC_HELP_STRING([--enable-compile-warnings=@<:@no/yes/kde@:>@] - [Turn on compiler warnings.]),, - [enable_compile_warnings="yes"]) - -dnl -dnl Color Management -dnl - -AC_ARG_ENABLE(cms, - AC_HELP_STRING([--disable-cms], - [Don't use color management system.]), - enable_cms=$enableval, - enable_cms="try") -if test x$enable_cms = xyes; then - PKG_CHECK_MODULES(LCMS, lcms) -elif test x$enable_cms = xtry; then - PKG_CHECK_MODULES(LCMS, lcms, [enable_cms=yes], [enable_cms=no]) -fi - -if test "x$enable_cms" = "xyes"; then - AC_DEFINE(USE_CMS, 1, [Defines if use cms]) -fi -AM_CONDITIONAL(USE_CMS, test x$enable_cms = xyes) - -if test "x$GCC" != xyes; then - enable_compile_warnings=no -fi -case "$enable_compile_warnings" in - no) ;; - yes) CXXFLAGS="-Wall -Wno-write-strings -Woverloaded-virtual -Wnon-virtual-dtor -Wcast-align -fno-exceptions -fno-check-new -fno-common $CXXFLAGS" ;; - kde) CXXFLAGS="-Wnon-virtual-dtor -Wno-long-long -Wundef \ - -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -Wcast-align \ - -Wconversion -Wall -W -Wpointer-arith \ - -Wwrite-strings -O2 -Wformat-security \ - -Wmissing-format-attribute -fno-exceptions -fno-check-new \ - -fno-common $CXXFLAGS" ;; -esac - -case $($PKG_CONFIG --version) in - 0.?|0.1[0-7]) - PC_REQUIRES_PRIVATE=""; - PC_REQUIRES="poppler = $VERSION";; - *) - PC_REQUIRES_PRIVATE="Requires.private: poppler = $VERSION"; - PC_REQUIRES="";; -esac - -AC_SUBST(PC_REQUIRES) -AC_SUBST(PC_REQUIRES_PRIVATE) - -AC_SUBST([POPPLER_MAJOR_VERSION],[poppler_version_major]) -AC_SUBST([POPPLER_MINOR_VERSION],[poppler_version_minor]) -AC_SUBST([POPPLER_MICRO_VERSION],[poppler_version_micro]) -AC_SUBST([POPPLER_VERSION],[poppler_version]) - -AC_OUTPUT([ -Makefile -goo/Makefile -fofi/Makefile -splash/Makefile -poppler/Makefile -utils/Makefile -glib/Makefile -glib/poppler-features.h -glib/reference/Makefile -glib/reference/version.xml -glib/demo/Makefile -test/Makefile -qt4/Makefile -qt4/src/Makefile -qt4/tests/Makefile -qt4/demos/Makefile -cpp/Makefile -cpp/poppler-version.h -cpp/tests/Makefile -poppler.pc -poppler-uninstalled.pc -poppler-cairo.pc -poppler-cairo-uninstalled.pc -poppler-splash.pc -poppler-splash-uninstalled.pc -poppler-glib.pc -poppler-glib-uninstalled.pc -poppler-qt4.pc -poppler-qt4-uninstalled.pc -poppler-cpp.pc -poppler-cpp-uninstalled.pc]) - - -echo "" -echo "Building poppler with support for:" -echo " font configuration: $with_font_configuration" -echo " splash output: $enable_splash_output" -echo " cairo output: $enable_cairo_output" -echo " qt4 wrapper: $enable_poppler_qt4" -echo " glib wrapper: $enable_poppler_glib" -echo " introspection: $found_introspection" -echo " cpp wrapper: $enable_poppler_cpp" -echo " use gtk-doc: $enable_gtk_doc" -echo " use libjpeg: $enable_libjpeg" -echo " use libpng: $enable_libpng" -echo " use libtiff: $enable_libtiff" -echo " use zlib: $enable_zlib" -echo " use libcurl: $enable_libcurl" -echo " use libopenjpeg: $enable_libopenjpeg" -echo " use cms: $enable_cms" -echo " command line utils: $enable_utils" -echo "" - -if test x$enable_splash_output = xno -a x$enable_cairo_output = xno; then - echo " Warning: There is no rendering backend enabled" -fi - -if test x$enable_single_precision = xyes -a x$enable_fixedpoint = xyes; then - echo " Warning: Single precision and fixed point options should not be enabled at the same time" -fi - -if test x$enable_libjpeg != xyes; then - echo " Warning: Using libjpeg is recommended" -fi - -if test x$enable_zlib != xno; then - echo " Warning: Using zlib is not totally safe" -fi - -if test x$enable_libopenjpeg != xyes; then - echo " Warning: Using libopenjpeg is recommended" -fi diff --git a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiBase.cc b/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiBase.cc deleted file mode 100644 index 52808386e76..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiBase.cc +++ /dev/null @@ -1,186 +0,0 @@ -//======================================================================== -// -// FoFiBase.cc -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2008 Ed Avis <eda@waniasset.com> -// Copyright (C) 2011 Jim Meyering <jim@meyering.net> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdio.h> -#include "goo/gmem.h" -#include "poppler/Error.h" -#include "FoFiBase.h" - -//------------------------------------------------------------------------ -// FoFiBase -//------------------------------------------------------------------------ - -FoFiBase::FoFiBase(char *fileA, int lenA, GBool freeFileDataA) { - fileData = file = (Guchar *)fileA; - len = lenA; - freeFileData = freeFileDataA; -} - -FoFiBase::~FoFiBase() { - if (freeFileData) { - gfree(fileData); - } -} - -char *FoFiBase::readFile(char *fileName, int *fileLen) { - FILE *f; - char *buf; - int n; - - if (!(f = fopen(fileName, "rb"))) { - error(-1, "Cannot open '%s'", fileName); - return NULL; - } - if (fseek(f, 0, SEEK_END) != 0) { - error(-1, "Cannot seek to end of '%s'", fileName); - fclose(f); - return NULL; - } - n = (int)ftell(f); - if (n < 0) { - error(-1, "Cannot determine length of '%s'", fileName); - fclose(f); - return NULL; - } - if (fseek(f, 0, SEEK_SET) != 0) { - error(-1, "Cannot seek to start of '%s'", fileName); - fclose(f); - return NULL; - } - buf = (char *)gmalloc(n); - if ((int)fread(buf, 1, n, f) != n) { - gfree(buf); - fclose(f); - return NULL; - } - fclose(f); - *fileLen = n; - return buf; -} - -int FoFiBase::getS8(int pos, GBool *ok) { - int x; - - if (pos < 0 || pos >= len) { - *ok = gFalse; - return 0; - } - x = file[pos]; - if (x & 0x80) { - x |= ~0xff; - } - return x; -} - -int FoFiBase::getU8(int pos, GBool *ok) { - if (pos < 0 || pos >= len) { - *ok = gFalse; - return 0; - } - return file[pos]; -} - -int FoFiBase::getS16BE(int pos, GBool *ok) { - int x; - - if (pos < 0 || pos+1 >= len) { - *ok = gFalse; - return 0; - } - x = file[pos]; - x = (x << 8) + file[pos+1]; - if (x & 0x8000) { - x |= ~0xffff; - } - return x; -} - -int FoFiBase::getU16BE(int pos, GBool *ok) { - int x; - - if (pos < 0 || pos+1 >= len) { - *ok = gFalse; - return 0; - } - x = file[pos]; - x = (x << 8) + file[pos+1]; - return x; -} - -int FoFiBase::getS32BE(int pos, GBool *ok) { - int x; - - if (pos < 0 || pos+3 >= len) { - *ok = gFalse; - return 0; - } - x = file[pos]; - x = (x << 8) + file[pos+1]; - x = (x << 8) + file[pos+2]; - x = (x << 8) + file[pos+3]; - if (x & 0x80000000) { - x |= ~0xffffffff; - } - return x; -} - -Guint FoFiBase::getU32BE(int pos, GBool *ok) { - Guint x; - - if (pos < 0 || pos+3 >= len) { - *ok = gFalse; - return 0; - } - x = file[pos]; - x = (x << 8) + file[pos+1]; - x = (x << 8) + file[pos+2]; - x = (x << 8) + file[pos+3]; - return x; -} - -Guint FoFiBase::getUVarBE(int pos, int size, GBool *ok) { - Guint x; - int i; - - if (pos < 0 || pos + size > len) { - *ok = gFalse; - return 0; - } - x = 0; - for (i = 0; i < size; ++i) { - x = (x << 8) + file[pos + i]; - } - return x; -} - -GBool FoFiBase::checkRegion(int pos, int size) { - return pos >= 0 && - pos + size >= pos && - pos + size <= len; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiBase.h b/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiBase.h deleted file mode 100644 index e2550017aac..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiBase.h +++ /dev/null @@ -1,55 +0,0 @@ -//======================================================================== -// -// FoFiBase.h -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef FOFIBASE_H -#define FOFIBASE_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" - -//------------------------------------------------------------------------ - -typedef void (*FoFiOutputFunc)(void *stream, char *data, int len); - -//------------------------------------------------------------------------ -// FoFiBase -//------------------------------------------------------------------------ - -class FoFiBase { -public: - - virtual ~FoFiBase(); - -protected: - - FoFiBase(char *fileA, int lenA, GBool freeFileDataA); - static char *readFile(char *fileName, int *fileLen); - - // S = signed / U = unsigned - // 8/16/32/Var = word length, in bytes - // BE = big endian - int getS8(int pos, GBool *ok); - int getU8(int pos, GBool *ok); - int getS16BE(int pos, GBool *ok); - int getU16BE(int pos, GBool *ok); - int getS32BE(int pos, GBool *ok); - Guint getU32BE(int pos, GBool *ok); - Guint getUVarBE(int pos, int size, GBool *ok); - - GBool checkRegion(int pos, int size); - - Guchar *fileData; - Guchar *file; - int len; - GBool freeFileData; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiEncodings.cc b/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiEncodings.cc deleted file mode 100644 index 946b56c19d0..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiEncodings.cc +++ /dev/null @@ -1,994 +0,0 @@ -//======================================================================== -// -// FoFiEncodings.cc -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include "FoFiEncodings.h" - -//------------------------------------------------------------------------ -// Type 1 and 1C font data -//------------------------------------------------------------------------ - -char *fofiType1StandardEncoding[256] = { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "space", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quoteright", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "quoteleft", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "bar", - "braceright", - "asciitilde", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "exclamdown", - "cent", - "sterling", - "fraction", - "yen", - "florin", - "section", - "currency", - "quotesingle", - "quotedblleft", - "guillemotleft", - "guilsinglleft", - "guilsinglright", - "fi", - "fl", - NULL, - "endash", - "dagger", - "daggerdbl", - "periodcentered", - NULL, - "paragraph", - "bullet", - "quotesinglbase", - "quotedblbase", - "quotedblright", - "guillemotright", - "ellipsis", - "perthousand", - NULL, - "questiondown", - NULL, - "grave", - "acute", - "circumflex", - "tilde", - "macron", - "breve", - "dotaccent", - "dieresis", - NULL, - "ring", - "cedilla", - NULL, - "hungarumlaut", - "ogonek", - "caron", - "emdash", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "AE", - NULL, - "ordfeminine", - NULL, - NULL, - NULL, - NULL, - "Lslash", - "Oslash", - "OE", - "ordmasculine", - NULL, - NULL, - NULL, - NULL, - NULL, - "ae", - NULL, - NULL, - NULL, - "dotlessi", - NULL, - NULL, - "lslash", - "oslash", - "oe", - "germandbls", - NULL, - NULL, - NULL, - NULL -}; - -char *fofiType1ExpertEncoding[256] = { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "space", - "exclamsmall", - "Hungarumlautsmall", - NULL, - "dollaroldstyle", - "dollarsuperior", - "ampersandsmall", - "Acutesmall", - "parenleftsuperior", - "parenrightsuperior", - "twodotenleader", - "onedotenleader", - "comma", - "hyphen", - "period", - "fraction", - "zerooldstyle", - "oneoldstyle", - "twooldstyle", - "threeoldstyle", - "fouroldstyle", - "fiveoldstyle", - "sixoldstyle", - "sevenoldstyle", - "eightoldstyle", - "nineoldstyle", - "colon", - "semicolon", - "commasuperior", - "threequartersemdash", - "periodsuperior", - "questionsmall", - NULL, - "asuperior", - "bsuperior", - "centsuperior", - "dsuperior", - "esuperior", - NULL, - NULL, - NULL, - "isuperior", - NULL, - NULL, - "lsuperior", - "msuperior", - "nsuperior", - "osuperior", - NULL, - NULL, - "rsuperior", - "ssuperior", - "tsuperior", - NULL, - "ff", - "fi", - "fl", - "ffi", - "ffl", - "parenleftinferior", - NULL, - "parenrightinferior", - "Circumflexsmall", - "hyphensuperior", - "Gravesmall", - "Asmall", - "Bsmall", - "Csmall", - "Dsmall", - "Esmall", - "Fsmall", - "Gsmall", - "Hsmall", - "Ismall", - "Jsmall", - "Ksmall", - "Lsmall", - "Msmall", - "Nsmall", - "Osmall", - "Psmall", - "Qsmall", - "Rsmall", - "Ssmall", - "Tsmall", - "Usmall", - "Vsmall", - "Wsmall", - "Xsmall", - "Ysmall", - "Zsmall", - "colonmonetary", - "onefitted", - "rupiah", - "Tildesmall", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "exclamdownsmall", - "centoldstyle", - "Lslashsmall", - NULL, - NULL, - "Scaronsmall", - "Zcaronsmall", - "Dieresissmall", - "Brevesmall", - "Caronsmall", - NULL, - "Dotaccentsmall", - NULL, - NULL, - "Macronsmall", - NULL, - NULL, - "figuredash", - "hypheninferior", - NULL, - NULL, - "Ogoneksmall", - "Ringsmall", - "Cedillasmall", - NULL, - NULL, - NULL, - "onequarter", - "onehalf", - "threequarters", - "questiondownsmall", - "oneeighth", - "threeeighths", - "fiveeighths", - "seveneighths", - "onethird", - "twothirds", - NULL, - NULL, - "zerosuperior", - "onesuperior", - "twosuperior", - "threesuperior", - "foursuperior", - "fivesuperior", - "sixsuperior", - "sevensuperior", - "eightsuperior", - "ninesuperior", - "zeroinferior", - "oneinferior", - "twoinferior", - "threeinferior", - "fourinferior", - "fiveinferior", - "sixinferior", - "seveninferior", - "eightinferior", - "nineinferior", - "centinferior", - "dollarinferior", - "periodinferior", - "commainferior", - "Agravesmall", - "Aacutesmall", - "Acircumflexsmall", - "Atildesmall", - "Adieresissmall", - "Aringsmall", - "AEsmall", - "Ccedillasmall", - "Egravesmall", - "Eacutesmall", - "Ecircumflexsmall", - "Edieresissmall", - "Igravesmall", - "Iacutesmall", - "Icircumflexsmall", - "Idieresissmall", - "Ethsmall", - "Ntildesmall", - "Ogravesmall", - "Oacutesmall", - "Ocircumflexsmall", - "Otildesmall", - "Odieresissmall", - "OEsmall", - "Oslashsmall", - "Ugravesmall", - "Uacutesmall", - "Ucircumflexsmall", - "Udieresissmall", - "Yacutesmall", - "Thornsmall", - "Ydieresissmall" -}; - -//------------------------------------------------------------------------ -// Type 1C font data -//------------------------------------------------------------------------ - -char *fofiType1CStdStrings[391] = { - ".notdef", - "space", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quoteright", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "quoteleft", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "bar", - "braceright", - "asciitilde", - "exclamdown", - "cent", - "sterling", - "fraction", - "yen", - "florin", - "section", - "currency", - "quotesingle", - "quotedblleft", - "guillemotleft", - "guilsinglleft", - "guilsinglright", - "fi", - "fl", - "endash", - "dagger", - "daggerdbl", - "periodcentered", - "paragraph", - "bullet", - "quotesinglbase", - "quotedblbase", - "quotedblright", - "guillemotright", - "ellipsis", - "perthousand", - "questiondown", - "grave", - "acute", - "circumflex", - "tilde", - "macron", - "breve", - "dotaccent", - "dieresis", - "ring", - "cedilla", - "hungarumlaut", - "ogonek", - "caron", - "emdash", - "AE", - "ordfeminine", - "Lslash", - "Oslash", - "OE", - "ordmasculine", - "ae", - "dotlessi", - "lslash", - "oslash", - "oe", - "germandbls", - "onesuperior", - "logicalnot", - "mu", - "trademark", - "Eth", - "onehalf", - "plusminus", - "Thorn", - "onequarter", - "divide", - "brokenbar", - "degree", - "thorn", - "threequarters", - "twosuperior", - "registered", - "minus", - "eth", - "multiply", - "threesuperior", - "copyright", - "Aacute", - "Acircumflex", - "Adieresis", - "Agrave", - "Aring", - "Atilde", - "Ccedilla", - "Eacute", - "Ecircumflex", - "Edieresis", - "Egrave", - "Iacute", - "Icircumflex", - "Idieresis", - "Igrave", - "Ntilde", - "Oacute", - "Ocircumflex", - "Odieresis", - "Ograve", - "Otilde", - "Scaron", - "Uacute", - "Ucircumflex", - "Udieresis", - "Ugrave", - "Yacute", - "Ydieresis", - "Zcaron", - "aacute", - "acircumflex", - "adieresis", - "agrave", - "aring", - "atilde", - "ccedilla", - "eacute", - "ecircumflex", - "edieresis", - "egrave", - "iacute", - "icircumflex", - "idieresis", - "igrave", - "ntilde", - "oacute", - "ocircumflex", - "odieresis", - "ograve", - "otilde", - "scaron", - "uacute", - "ucircumflex", - "udieresis", - "ugrave", - "yacute", - "ydieresis", - "zcaron", - "exclamsmall", - "Hungarumlautsmall", - "dollaroldstyle", - "dollarsuperior", - "ampersandsmall", - "Acutesmall", - "parenleftsuperior", - "parenrightsuperior", - "twodotenleader", - "onedotenleader", - "zerooldstyle", - "oneoldstyle", - "twooldstyle", - "threeoldstyle", - "fouroldstyle", - "fiveoldstyle", - "sixoldstyle", - "sevenoldstyle", - "eightoldstyle", - "nineoldstyle", - "commasuperior", - "threequartersemdash", - "periodsuperior", - "questionsmall", - "asuperior", - "bsuperior", - "centsuperior", - "dsuperior", - "esuperior", - "isuperior", - "lsuperior", - "msuperior", - "nsuperior", - "osuperior", - "rsuperior", - "ssuperior", - "tsuperior", - "ff", - "ffi", - "ffl", - "parenleftinferior", - "parenrightinferior", - "Circumflexsmall", - "hyphensuperior", - "Gravesmall", - "Asmall", - "Bsmall", - "Csmall", - "Dsmall", - "Esmall", - "Fsmall", - "Gsmall", - "Hsmall", - "Ismall", - "Jsmall", - "Ksmall", - "Lsmall", - "Msmall", - "Nsmall", - "Osmall", - "Psmall", - "Qsmall", - "Rsmall", - "Ssmall", - "Tsmall", - "Usmall", - "Vsmall", - "Wsmall", - "Xsmall", - "Ysmall", - "Zsmall", - "colonmonetary", - "onefitted", - "rupiah", - "Tildesmall", - "exclamdownsmall", - "centoldstyle", - "Lslashsmall", - "Scaronsmall", - "Zcaronsmall", - "Dieresissmall", - "Brevesmall", - "Caronsmall", - "Dotaccentsmall", - "Macronsmall", - "figuredash", - "hypheninferior", - "Ogoneksmall", - "Ringsmall", - "Cedillasmall", - "questiondownsmall", - "oneeighth", - "threeeighths", - "fiveeighths", - "seveneighths", - "onethird", - "twothirds", - "zerosuperior", - "foursuperior", - "fivesuperior", - "sixsuperior", - "sevensuperior", - "eightsuperior", - "ninesuperior", - "zeroinferior", - "oneinferior", - "twoinferior", - "threeinferior", - "fourinferior", - "fiveinferior", - "sixinferior", - "seveninferior", - "eightinferior", - "nineinferior", - "centinferior", - "dollarinferior", - "periodinferior", - "commainferior", - "Agravesmall", - "Aacutesmall", - "Acircumflexsmall", - "Atildesmall", - "Adieresissmall", - "Aringsmall", - "AEsmall", - "Ccedillasmall", - "Egravesmall", - "Eacutesmall", - "Ecircumflexsmall", - "Edieresissmall", - "Igravesmall", - "Iacutesmall", - "Icircumflexsmall", - "Idieresissmall", - "Ethsmall", - "Ntildesmall", - "Ogravesmall", - "Oacutesmall", - "Ocircumflexsmall", - "Otildesmall", - "Odieresissmall", - "OEsmall", - "Oslashsmall", - "Ugravesmall", - "Uacutesmall", - "Ucircumflexsmall", - "Udieresissmall", - "Yacutesmall", - "Thornsmall", - "Ydieresissmall", - "001.000", - "001.001", - "001.002", - "001.003", - "Black", - "Bold", - "Book", - "Light", - "Medium", - "Regular", - "Roman", - "Semibold" -}; - -Gushort fofiType1CISOAdobeCharset[229] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228 -}; - -Gushort fofiType1CExpertCharset[166] = { - 0, 1, 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 13, 14, 15, 99, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 27, 28, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 109, 110, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 158, 155, 163, 319, 320, 321, 322, 323, 324, 325, - 326, 150, 164, 169, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378 -}; - -Gushort fofiType1CExpertSubsetCharset[87] = { - 0, 1, 231, 232, 235, 236, 237, 238, 13, 14, - 15, 99, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 27, 28, 249, 250, 251, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 109, 110, 267, 268, 269, 270, 272, 300, 301, - 302, 305, 314, 315, 158, 155, 163, 320, 321, 322, - 323, 324, 325, 326, 150, 164, 169, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346 -}; diff --git a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiEncodings.h b/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiEncodings.h deleted file mode 100644 index fb4eca86d9f..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiEncodings.h +++ /dev/null @@ -1,34 +0,0 @@ -//======================================================================== -// -// FoFiEncodings.h -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef FOFIENCODINGS_H -#define FOFIENCODINGS_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" - -//------------------------------------------------------------------------ -// Type 1 and 1C font data -//------------------------------------------------------------------------ - -extern char *fofiType1StandardEncoding[256]; -extern char *fofiType1ExpertEncoding[256]; - -//------------------------------------------------------------------------ -// Type 1C font data -//------------------------------------------------------------------------ - -extern char *fofiType1CStdStrings[391]; -extern Gushort fofiType1CISOAdobeCharset[229]; -extern Gushort fofiType1CExpertCharset[166]; -extern Gushort fofiType1CExpertSubsetCharset[87]; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiTrueType.cc b/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiTrueType.cc deleted file mode 100644 index d716638c7ec..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiTrueType.cc +++ /dev/null @@ -1,2403 +0,0 @@ -//======================================================================== -// -// FoFiTrueType.cc -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> -// Copyright (C) 2007 Koji Otani <sho@bbr.jp> -// Copyright (C) 2007 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2008, 2009 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2008 Tomas Are Haavet <tomasare@gmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <string.h> -#include "goo/gtypes.h" -#include "goo/gmem.h" -#include "goo/GooString.h" -#include "goo/GooHash.h" -#include "FoFiType1C.h" -#include "FoFiTrueType.h" -#include "poppler/Error.h" - -// -// Terminology -// ----------- -// -// character code = number used as an element of a text string -// -// character name = glyph name = name for a particular glyph within a -// font -// -// glyph index = GID = position (within some internal table in the font) -// where the instructions to draw a particular glyph are -// stored -// -// Type 1 fonts -// ------------ -// -// Type 1 fonts contain: -// -// Encoding: array of glyph names, maps char codes to glyph names -// -// Encoding[charCode] = charName -// -// CharStrings: dictionary of instructions, keyed by character names, -// maps character name to glyph data -// -// CharStrings[charName] = glyphData -// -// TrueType fonts -// -------------- -// -// TrueType fonts contain: -// -// 'cmap' table: mapping from character code to glyph index; there may -// be multiple cmaps in a TrueType font -// -// cmap[charCode] = gid -// -// 'post' table: mapping from glyph index to glyph name -// -// post[gid] = glyphName -// -// Type 42 fonts -// ------------- -// -// Type 42 fonts contain: -// -// Encoding: array of glyph names, maps char codes to glyph names -// -// Encoding[charCode] = charName -// -// CharStrings: dictionary of glyph indexes, keyed by character names, -// maps character name to glyph index -// -// CharStrings[charName] = gid -// - -//------------------------------------------------------------------------ - -#define ttcfTag 0x74746366 - -//------------------------------------------------------------------------ - -struct TrueTypeTable { - Guint tag; - Guint checksum; - int offset; - int origOffset; - int len; -}; - -struct TrueTypeCmap { - int platform; - int encoding; - int offset; - int len; - int fmt; -}; - -struct TrueTypeLoca { - int idx; - int origOffset; - int newOffset; - int len; -}; - -#define cmapTag 0x636d6170 -#define glyfTag 0x676c7966 -#define headTag 0x68656164 -#define hheaTag 0x68686561 -#define hmtxTag 0x686d7478 -#define locaTag 0x6c6f6361 -#define nameTag 0x6e616d65 -#define os2Tag 0x4f532f32 -#define postTag 0x706f7374 -#define vrt2Tag 0x76727432 -#define vertTag 0x76657274 - -static int cmpTrueTypeLocaOffset(const void *p1, const void *p2) { - TrueTypeLoca *loca1 = (TrueTypeLoca *)p1; - TrueTypeLoca *loca2 = (TrueTypeLoca *)p2; - - if (loca1->origOffset == loca2->origOffset) { - return loca1->idx - loca2->idx; - } - return loca1->origOffset - loca2->origOffset; -} - -static int cmpTrueTypeLocaIdx(const void *p1, const void *p2) { - TrueTypeLoca *loca1 = (TrueTypeLoca *)p1; - TrueTypeLoca *loca2 = (TrueTypeLoca *)p2; - - return loca1->idx - loca2->idx; -} - -static int cmpTrueTypeTableTag(const void *p1, const void *p2) { - TrueTypeTable *tab1 = (TrueTypeTable *)p1; - TrueTypeTable *tab2 = (TrueTypeTable *)p2; - - return (int)tab1->tag - (int)tab2->tag; -} - -//------------------------------------------------------------------------ - -struct T42Table { - char *tag; // 4-byte tag - GBool required; // required by the TrueType spec? -}; - -// TrueType tables to be embedded in Type 42 fonts. -// NB: the table names must be in alphabetical order here. -#define nT42Tables 11 -static T42Table t42Tables[nT42Tables] = { - { "cvt ", gTrue }, - { "fpgm", gTrue }, - { "glyf", gTrue }, - { "head", gTrue }, - { "hhea", gTrue }, - { "hmtx", gTrue }, - { "loca", gTrue }, - { "maxp", gTrue }, - { "prep", gTrue }, - { "vhea", gFalse }, - { "vmtx", gFalse } -}; -#define t42HeadTable 3 -#define t42LocaTable 6 -#define t42GlyfTable 2 -#define t42VheaTable 9 -#define t42VmtxTable 10 - -//------------------------------------------------------------------------ - -// Glyph names in some arbitrary standard order that Apple uses for -// their TrueType fonts. -static char *macGlyphNames[258] = { - ".notdef", "null", "CR", "space", - "exclam", "quotedbl", "numbersign", "dollar", - "percent", "ampersand", "quotesingle", "parenleft", - "parenright", "asterisk", "plus", "comma", - "hyphen", "period", "slash", "zero", - "one", "two", "three", "four", - "five", "six", "seven", "eight", - "nine", "colon", "semicolon", "less", - "equal", "greater", "question", "at", - "A", "B", "C", "D", - "E", "F", "G", "H", - "I", "J", "K", "L", - "M", "N", "O", "P", - "Q", "R", "S", "T", - "U", "V", "W", "X", - "Y", "Z", "bracketleft", "backslash", - "bracketright", "asciicircum", "underscore", "grave", - "a", "b", "c", "d", - "e", "f", "g", "h", - "i", "j", "k", "l", - "m", "n", "o", "p", - "q", "r", "s", "t", - "u", "v", "w", "x", - "y", "z", "braceleft", "bar", - "braceright", "asciitilde", "Adieresis", "Aring", - "Ccedilla", "Eacute", "Ntilde", "Odieresis", - "Udieresis", "aacute", "agrave", "acircumflex", - "adieresis", "atilde", "aring", "ccedilla", - "eacute", "egrave", "ecircumflex", "edieresis", - "iacute", "igrave", "icircumflex", "idieresis", - "ntilde", "oacute", "ograve", "ocircumflex", - "odieresis", "otilde", "uacute", "ugrave", - "ucircumflex", "udieresis", "dagger", "degree", - "cent", "sterling", "section", "bullet", - "paragraph", "germandbls", "registered", "copyright", - "trademark", "acute", "dieresis", "notequal", - "AE", "Oslash", "infinity", "plusminus", - "lessequal", "greaterequal", "yen", "mu1", - "partialdiff", "summation", "product", "pi", - "integral", "ordfeminine", "ordmasculine", "Ohm", - "ae", "oslash", "questiondown", "exclamdown", - "logicalnot", "radical", "florin", "approxequal", - "increment", "guillemotleft", "guillemotright", "ellipsis", - "nbspace", "Agrave", "Atilde", "Otilde", - "OE", "oe", "endash", "emdash", - "quotedblleft", "quotedblright", "quoteleft", "quoteright", - "divide", "lozenge", "ydieresis", "Ydieresis", - "fraction", "currency", "guilsinglleft", "guilsinglright", - "fi", "fl", "daggerdbl", "periodcentered", - "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", - "Ecircumflex", "Aacute", "Edieresis", "Egrave", - "Iacute", "Icircumflex", "Idieresis", "Igrave", - "Oacute", "Ocircumflex", "applelogo", "Ograve", - "Uacute", "Ucircumflex", "Ugrave", "dotlessi", - "circumflex", "tilde", "overscore", "breve", - "dotaccent", "ring", "cedilla", "hungarumlaut", - "ogonek", "caron", "Lslash", "lslash", - "Scaron", "scaron", "Zcaron", "zcaron", - "brokenbar", "Eth", "eth", "Yacute", - "yacute", "Thorn", "thorn", "minus", - "multiply", "onesuperior", "twosuperior", "threesuperior", - "onehalf", "onequarter", "threequarters", "franc", - "Gbreve", "gbreve", "Idot", "Scedilla", - "scedilla", "Cacute", "cacute", "Ccaron", - "ccaron", "dmacron" -}; - -//------------------------------------------------------------------------ -// FoFiTrueType -//------------------------------------------------------------------------ - -FoFiTrueType *FoFiTrueType::make(char *fileA, int lenA, int faceIndexA) { - FoFiTrueType *ff; - - ff = new FoFiTrueType(fileA, lenA, gFalse, faceIndexA); - if (!ff->parsedOk) { - delete ff; - return NULL; - } - return ff; -} - -FoFiTrueType *FoFiTrueType::load(char *fileName, int faceIndexA) { - FoFiTrueType *ff; - char *fileA; - int lenA; - - if (!(fileA = FoFiBase::readFile(fileName, &lenA))) { - return NULL; - } - ff = new FoFiTrueType(fileA, lenA, gTrue, faceIndexA); - if (!ff->parsedOk) { - delete ff; - return NULL; - } - return ff; -} - -FoFiTrueType::FoFiTrueType(char *fileA, int lenA, GBool freeFileDataA, int faceIndexA): - FoFiBase(fileA, lenA, freeFileDataA) -{ - tables = NULL; - nTables = 0; - cmaps = NULL; - nCmaps = 0; - nameToGID = NULL; - parsedOk = gFalse; - faceIndex = faceIndexA; - gsubFeatureTable = 0; - gsubLookupList = 0; - - parse(); -} - -FoFiTrueType::~FoFiTrueType() { - gfree(tables); - gfree(cmaps); - if (nameToGID) { - delete nameToGID; - } -} - -int FoFiTrueType::getNumCmaps() { - return nCmaps; -} - -int FoFiTrueType::getCmapPlatform(int i) { - return cmaps[i].platform; -} - -int FoFiTrueType::getCmapEncoding(int i) { - return cmaps[i].encoding; -} - -int FoFiTrueType::findCmap(int platform, int encoding) { - int i; - - for (i = 0; i < nCmaps; ++i) { - if (cmaps[i].platform == platform && cmaps[i].encoding == encoding) { - return i; - } - } - return -1; -} - -Gushort FoFiTrueType::mapCodeToGID(int i, Guint c) { - Gushort gid; - Guint segCnt, segEnd, segStart, segDelta, segOffset; - Guint cmapFirst, cmapLen; - int pos, a, b, m; - GBool ok; - - if (i < 0 || i >= nCmaps) { - return 0; - } - ok = gTrue; - pos = cmaps[i].offset; - switch (cmaps[i].fmt) { - case 0: - if (c + 6 >= (Guint)cmaps[i].len) { - return 0; - } - gid = getU8(cmaps[i].offset + 6 + c, &ok); - break; - case 4: - segCnt = getU16BE(pos + 6, &ok) / 2; - a = -1; - b = segCnt - 1; - segEnd = getU16BE(pos + 14 + 2*b, &ok); - if (c > segEnd) { - // malformed font -- the TrueType spec requires the last segEnd - // to be 0xffff - return 0; - } - // invariant: seg[a].end < code <= seg[b].end - while (b - a > 1 && ok) { - m = (a + b) / 2; - segEnd = getU16BE(pos + 14 + 2*m, &ok); - if (segEnd < c) { - a = m; - } else { - b = m; - } - } - segStart = getU16BE(pos + 16 + 2*segCnt + 2*b, &ok); - segDelta = getU16BE(pos + 16 + 4*segCnt + 2*b, &ok); - segOffset = getU16BE(pos + 16 + 6*segCnt + 2*b, &ok); - if (c < segStart) { - return 0; - } - if (segOffset == 0) { - gid = (c + segDelta) & 0xffff; - } else { - gid = getU16BE(pos + 16 + 6*segCnt + 2*b + - segOffset + 2 * (c - segStart), &ok); - if (gid != 0) { - gid = (gid + segDelta) & 0xffff; - } - } - break; - case 6: - cmapFirst = getU16BE(pos + 6, &ok); - cmapLen = getU16BE(pos + 8, &ok); - if (c < cmapFirst || c >= cmapFirst + cmapLen) { - return 0; - } - gid = getU16BE(pos + 10 + 2 * (c - cmapFirst), &ok); - break; - case 12: - segCnt = getU32BE(pos + 12, &ok); - a = -1; - b = segCnt - 1; - segEnd = getU32BE(pos + 16 + 12*b+4, &ok); - if (c > segEnd) { - return 0; - } - // invariant: seg[a].end < code <= seg[b].end - while (b - a > 1 && ok) { - m = (a + b) / 2; - segEnd = getU32BE(pos + 16 + 12*m+4, &ok); - if (segEnd < c) { - a = m; - } else { - b = m; - } - } - segStart = getU32BE(pos + 16 + 12*b, &ok); - segDelta = getU32BE(pos + 16 + 12*b+8, &ok); - if (c < segStart) { - return 0; - } - gid = segDelta + (c-segStart); - break; - default: - return 0; - } - if (!ok) { - return 0; - } - return gid; -} - -int FoFiTrueType::mapNameToGID(char *name) { - if (!nameToGID) { - return 0; - } - return nameToGID->lookupInt(name); -} - -Gushort *FoFiTrueType::getCIDToGIDMap(int *nCIDs) { - FoFiType1C *ff; - Gushort *map; - int i; - - *nCIDs = 0; - if (!openTypeCFF) { - return NULL; - } - i = seekTable("CFF "); - if (!checkRegion(tables[i].offset, tables[i].len)) { - return NULL; - } - if (!(ff = FoFiType1C::make((char *)file + tables[i].offset, - tables[i].len))) { - return NULL; - } - map = ff->getCIDToGIDMap(nCIDs); - delete ff; - return map; -} - -int FoFiTrueType::getEmbeddingRights() { - int i, fsType; - GBool ok; - - if ((i = seekTable("OS/2")) < 0) { - return 4; - } - ok = gTrue; - fsType = getU16BE(tables[i].offset + 8, &ok); - if (!ok) { - return 4; - } - if (fsType & 0x0008) { - return 2; - } - if (fsType & 0x0004) { - return 1; - } - if (fsType & 0x0002) { - return 0; - } - return 3; -} - -void FoFiTrueType::convertToType42(char *psName, char **encoding, - Gushort *codeToGID, - FoFiOutputFunc outputFunc, - void *outputStream) { - GooString *buf; - GBool ok; - - if (openTypeCFF) { - return; - } - - // write the header - ok = gTrue; - buf = GooString::format("%!PS-TrueTypeFont-{0:2g}\n", - (double)getS32BE(0, &ok) / 65536.0); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - - // begin the font dictionary - (*outputFunc)(outputStream, "10 dict begin\n", 14); - (*outputFunc)(outputStream, "/FontName /", 11); - (*outputFunc)(outputStream, psName, strlen(psName)); - (*outputFunc)(outputStream, " def\n", 5); - (*outputFunc)(outputStream, "/FontType 42 def\n", 17); - (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); - buf = GooString::format("/FontBBox [{0:d} {1:d} {2:d} {3:d}] def\n", - bbox[0], bbox[1], bbox[2], bbox[3]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "/PaintType 0 def\n", 17); - - // write the guts of the dictionary - cvtEncoding(encoding, outputFunc, outputStream); - cvtCharStrings(encoding, codeToGID, outputFunc, outputStream); - cvtSfnts(outputFunc, outputStream, NULL, gFalse); - - // end the dictionary and define the font - (*outputFunc)(outputStream, "FontName currentdict end definefont pop\n", 40); -} - -void FoFiTrueType::convertToType1(char *psName, char **newEncoding, - GBool ascii, FoFiOutputFunc outputFunc, - void *outputStream) { - FoFiType1C *ff; - int i; - - if (!openTypeCFF) { - return; - } - i = seekTable("CFF "); - if (!checkRegion(tables[i].offset, tables[i].len)) { - return; - } - if (!(ff = FoFiType1C::make((char *)file + tables[i].offset, - tables[i].len))) { - return; - } - ff->convertToType1(psName, newEncoding, ascii, outputFunc, outputStream); - delete ff; -} - -void FoFiTrueType::convertToCIDType2(char *psName, - Gushort *cidMap, int nCIDs, - GBool needVerticalMetrics, - FoFiOutputFunc outputFunc, - void *outputStream) { - GooString *buf; - Gushort cid; - GBool ok; - int i, j, k; - - if (openTypeCFF) { - return; - } - - // write the header - ok = gTrue; - buf = GooString::format("%!PS-TrueTypeFont-{0:2g}\n", - (double)getS32BE(0, &ok) / 65536.0); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - - // begin the font dictionary - (*outputFunc)(outputStream, "20 dict begin\n", 14); - (*outputFunc)(outputStream, "/CIDFontName /", 14); - (*outputFunc)(outputStream, psName, strlen(psName)); - (*outputFunc)(outputStream, " def\n", 5); - (*outputFunc)(outputStream, "/CIDFontType 2 def\n", 19); - (*outputFunc)(outputStream, "/FontType 42 def\n", 17); - (*outputFunc)(outputStream, "/CIDSystemInfo 3 dict dup begin\n", 32); - (*outputFunc)(outputStream, " /Registry (Adobe) def\n", 24); - (*outputFunc)(outputStream, " /Ordering (Identity) def\n", 27); - (*outputFunc)(outputStream, " /Supplement 0 def\n", 20); - (*outputFunc)(outputStream, " end def\n", 10); - (*outputFunc)(outputStream, "/GDBytes 2 def\n", 15); - if (cidMap) { - buf = GooString::format("/CIDCount {0:d} def\n", nCIDs); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - if (nCIDs > 32767) { - (*outputFunc)(outputStream, "/CIDMap [", 9); - for (i = 0; i < nCIDs; i += 32768 - 16) { - (*outputFunc)(outputStream, "<\n", 2); - for (j = 0; j < 32768 - 16 && i+j < nCIDs; j += 16) { - (*outputFunc)(outputStream, " ", 2); - for (k = 0; k < 16 && i+j+k < nCIDs; ++k) { - cid = cidMap[i+j+k]; - buf = GooString::format("{0:02x}{1:02x}", - (cid >> 8) & 0xff, cid & 0xff); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "\n", 1); - } - (*outputFunc)(outputStream, " >", 3); - } - (*outputFunc)(outputStream, "\n", 1); - (*outputFunc)(outputStream, "] def\n", 6); - } else { - (*outputFunc)(outputStream, "/CIDMap <\n", 10); - for (i = 0; i < nCIDs; i += 16) { - (*outputFunc)(outputStream, " ", 2); - for (j = 0; j < 16 && i+j < nCIDs; ++j) { - cid = cidMap[i+j]; - buf = GooString::format("{0:02x}{1:02x}", - (cid >> 8) & 0xff, cid & 0xff); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "\n", 1); - } - (*outputFunc)(outputStream, "> def\n", 6); - } - } else { - // direct mapping - just fill the string(s) with s[i]=i - buf = GooString::format("/CIDCount {0:d} def\n", nGlyphs); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - if (nGlyphs > 32767) { - (*outputFunc)(outputStream, "/CIDMap [\n", 10); - for (i = 0; i < nGlyphs; i += 32767) { - j = nGlyphs - i < 32767 ? nGlyphs - i : 32767; - buf = GooString::format(" {0:d} string 0 1 {1:d} {{\n", 2 * j, j - 1); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GooString::format(" 2 copy dup 2 mul exch {0:d} add -8 bitshift put\n", - i); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GooString::format(" 1 index exch dup 2 mul 1 add exch {0:d} add" - " 255 and put\n", i); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, " } for\n", 8); - } - (*outputFunc)(outputStream, "] def\n", 6); - } else { - buf = GooString::format("/CIDMap {0:d} string\n", 2 * nGlyphs); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GooString::format(" 0 1 {0:d} {{\n", nGlyphs - 1); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, - " 2 copy dup 2 mul exch -8 bitshift put\n", 42); - (*outputFunc)(outputStream, - " 1 index exch dup 2 mul 1 add exch 255 and put\n", 50); - (*outputFunc)(outputStream, " } for\n", 8); - (*outputFunc)(outputStream, "def\n", 4); - } - } - (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); - buf = GooString::format("/FontBBox [{0:d} {1:d} {2:d} {3:d}] def\n", - bbox[0], bbox[1], bbox[2], bbox[3]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "/PaintType 0 def\n", 17); - (*outputFunc)(outputStream, "/Encoding [] readonly def\n", 26); - (*outputFunc)(outputStream, "/CharStrings 1 dict dup begin\n", 30); - (*outputFunc)(outputStream, " /.notdef 0 def\n", 17); - (*outputFunc)(outputStream, " end readonly def\n", 19); - - // write the guts of the dictionary - cvtSfnts(outputFunc, outputStream, NULL, needVerticalMetrics); - - // end the dictionary and define the font - (*outputFunc)(outputStream, - "CIDFontName currentdict end /CIDFont defineresource pop\n", - 56); -} - -void FoFiTrueType::convertToCIDType0(char *psName, - FoFiOutputFunc outputFunc, - void *outputStream) { - FoFiType1C *ff; - int i; - - if (!openTypeCFF) { - return; - } - i = seekTable("CFF "); - if (!checkRegion(tables[i].offset, tables[i].len)) { - return; - } - if (!(ff = FoFiType1C::make((char *)file + tables[i].offset, - tables[i].len))) { - return; - } - ff->convertToCIDType0(psName, outputFunc, outputStream); - delete ff; -} - -void FoFiTrueType::convertToType0(char *psName, Gushort *cidMap, int nCIDs, - GBool needVerticalMetrics, - FoFiOutputFunc outputFunc, - void *outputStream) { - GooString *buf; - GooString *sfntsName; - int n, i, j; - - if (openTypeCFF) { - return; - } - - // write the Type 42 sfnts array - sfntsName = (new GooString(psName))->append("_sfnts"); - cvtSfnts(outputFunc, outputStream, sfntsName, needVerticalMetrics); - delete sfntsName; - - // write the descendant Type 42 fonts - n = cidMap ? nCIDs : nGlyphs; - for (i = 0; i < n; i += 256) { - (*outputFunc)(outputStream, "10 dict begin\n", 14); - (*outputFunc)(outputStream, "/FontName /", 11); - (*outputFunc)(outputStream, psName, strlen(psName)); - buf = GooString::format("_{0:02x} def\n", i >> 8); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "/FontType 42 def\n", 17); - (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); - buf = GooString::format("/FontBBox [{0:d} {1:d} {2:d} {3:d}] def\n", - bbox[0], bbox[1], bbox[2], bbox[3]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "/PaintType 0 def\n", 17); - (*outputFunc)(outputStream, "/sfnts ", 7); - (*outputFunc)(outputStream, psName, strlen(psName)); - (*outputFunc)(outputStream, "_sfnts def\n", 11); - (*outputFunc)(outputStream, "/Encoding 256 array\n", 20); - for (j = 0; j < 256 && i+j < n; ++j) { - buf = GooString::format("dup {0:d} /c{1:02x} put\n", j, j); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "readonly def\n", 13); - (*outputFunc)(outputStream, "/CharStrings 257 dict dup begin\n", 32); - (*outputFunc)(outputStream, "/.notdef 0 def\n", 15); - for (j = 0; j < 256 && i+j < n; ++j) { - buf = GooString::format("/c{0:02x} {1:d} def\n", - j, cidMap ? cidMap[i+j] : i+j); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "end readonly def\n", 17); - (*outputFunc)(outputStream, - "FontName currentdict end definefont pop\n", 40); - } - - // write the Type 0 parent font - (*outputFunc)(outputStream, "16 dict begin\n", 14); - (*outputFunc)(outputStream, "/FontName /", 11); - (*outputFunc)(outputStream, psName, strlen(psName)); - (*outputFunc)(outputStream, " def\n", 5); - (*outputFunc)(outputStream, "/FontType 0 def\n", 16); - (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); - (*outputFunc)(outputStream, "/FMapType 2 def\n", 16); - (*outputFunc)(outputStream, "/Encoding [\n", 12); - for (i = 0; i < n; i += 256) { - buf = GooString::format("{0:d}\n", i >> 8); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "] def\n", 6); - (*outputFunc)(outputStream, "/FDepVector [\n", 14); - for (i = 0; i < n; i += 256) { - (*outputFunc)(outputStream, "/", 1); - (*outputFunc)(outputStream, psName, strlen(psName)); - buf = GooString::format("_{0:02x} findfont\n", i >> 8); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "] def\n", 6); - (*outputFunc)(outputStream, "FontName currentdict end definefont pop\n", 40); -} - -void FoFiTrueType::convertToType0(char *psName, - FoFiOutputFunc outputFunc, - void *outputStream) { - FoFiType1C *ff; - int i; - - if (!openTypeCFF) { - return; - } - i = seekTable("CFF "); - if (!checkRegion(tables[i].offset, tables[i].len)) { - return; - } - if (!(ff = FoFiType1C::make((char *)file + tables[i].offset, - tables[i].len))) { - return; - } - ff->convertToType0(psName, outputFunc, outputStream); - delete ff; -} - -void FoFiTrueType::writeTTF(FoFiOutputFunc outputFunc, - void *outputStream, char *name, - Gushort *codeToGID) { - // this substitute cmap table maps char codes 0000-ffff directly to - // glyphs 0000-ffff - static char cmapTab[36] = { - 0, 0, // table version number - 0, 1, // number of encoding tables - 0, 1, // platform ID - 0, 0, // encoding ID - 0, 0, 0, 12, // offset of subtable - 0, 4, // subtable format - 0, 24, // subtable length - 0, 0, // subtable version - 0, 2, // segment count * 2 - 0, 2, // 2 * 2 ^ floor(log2(segCount)) - 0, 0, // floor(log2(segCount)) - 0, 0, // 2*segCount - 2*2^floor(log2(segCount)) - (char)0xff, (char)0xff, // endCount[0] - 0, 0, // reserved - 0, 0, // startCount[0] - 0, 0, // idDelta[0] - 0, 0 // pad to a mulitple of four bytes - }; - static char nameTab[8] = { - 0, 0, // format - 0, 0, // number of name records - 0, 6, // offset to start of string storage - 0, 0 // pad to multiple of four bytes - }; - static char postTab[32] = { - 0, 1, 0, 0, // format - 0, 0, 0, 0, // italic angle - 0, 0, // underline position - 0, 0, // underline thickness - 0, 0, 0, 0, // fixed pitch - 0, 0, 0, 0, // min Type 42 memory - 0, 0, 0, 0, // max Type 42 memory - 0, 0, 0, 0, // min Type 1 memory - 0, 0, 0, 0 // max Type 1 memory - }; - static char os2Tab[86] = { - 0, 1, // version - 0, 1, // xAvgCharWidth - 0, 0, // usWeightClass - 0, 0, // usWidthClass - 0, 0, // fsType - 0, 0, // ySubscriptXSize - 0, 0, // ySubscriptYSize - 0, 0, // ySubscriptXOffset - 0, 0, // ySubscriptYOffset - 0, 0, // ySuperscriptXSize - 0, 0, // ySuperscriptYSize - 0, 0, // ySuperscriptXOffset - 0, 0, // ySuperscriptYOffset - 0, 0, // yStrikeoutSize - 0, 0, // yStrikeoutPosition - 0, 0, // sFamilyClass - 0, 0, 0, 0, 0, // panose - 0, 0, 0, 0, 0, - 0, 0, 0, 0, // ulUnicodeRange1 - 0, 0, 0, 0, // ulUnicodeRange2 - 0, 0, 0, 0, // ulUnicodeRange3 - 0, 0, 0, 0, // ulUnicodeRange4 - 0, 0, 0, 0, // achVendID - 0, 0, // fsSelection - 0, 0, // usFirstCharIndex - 0, 0, // usLastCharIndex - 0, 0, // sTypoAscender - 0, 0, // sTypoDescender - 0, 0, // sTypoLineGap - 0, 0, // usWinAscent - 0, 0, // usWinDescent - 0, 0, 0, 0, // ulCodePageRange1 - 0, 0, 0, 0 // ulCodePageRange2 - }; - GBool missingCmap, missingName, missingPost, missingOS2; - GBool unsortedLoca, badCmapLen, abbrevHMTX; - int nZeroLengthTables; - int nHMetrics, advWidth, lsb; - TrueTypeLoca *locaTable; - TrueTypeTable *newTables; - char *newNameTab, *newCmapTab, *newHHEATab, *newHMTXTab; - int nNewTables, cmapIdx, cmapLen, glyfLen, newNameLen, newCmapLen, next; - int newHHEALen, newHMTXLen; - Guint locaChecksum, glyfChecksum, fileChecksum; - char *tableDir; - char locaBuf[4], checksumBuf[4]; - GBool ok; - Guint t; - int pos, i, j, k, n; - - if (openTypeCFF) { - return; - } - - if (tables == NULL) { - return; - } - - // check for missing tables - // (Note: if the OS/2 table is missing, the Microsoft PCL5 driver - // will embed a PCL TrueType font with the pitch field set to zero, - // which apparently causes divide-by-zero errors. As far as I can - // tell, the only important field in the OS/2 table is - // xAvgCharWidth.) - missingCmap = (cmapIdx = seekTable("cmap")) < 0; - missingName = seekTable("name") < 0; - missingPost = seekTable("post") < 0; - missingOS2 = seekTable("OS/2") < 0; - - // read the loca table, check to see if it's sorted - locaTable = (TrueTypeLoca *)gmallocn(nGlyphs + 1, sizeof(TrueTypeLoca)); - unsortedLoca = gFalse; - i = seekTable("loca"); - pos = tables[i].offset; - ok = gTrue; - for (i = 0; i <= nGlyphs; ++i) { - if (locaFmt) { - locaTable[i].origOffset = (int)getU32BE(pos + i*4, &ok); - } else { - locaTable[i].origOffset = 2 * getU16BE(pos + i*2, &ok); - } - if (i > 0 && locaTable[i].origOffset < locaTable[i-1].origOffset) { - unsortedLoca = gTrue; - } - // glyph descriptions must be at least 12 bytes long (nContours, - // xMin, yMin, xMax, yMax, instructionLength - two bytes each); - // invalid glyph descriptions (even if they're never used) make - // Windows choke, so we work around that problem here (ideally, - // this would parse the glyph descriptions in the glyf table and - // remove any that were invalid, but this quick test is a decent - // start) - if (i > 0 && - locaTable[i].origOffset - locaTable[i-1].origOffset > 0 && - locaTable[i].origOffset - locaTable[i-1].origOffset < 12) { - locaTable[i-1].origOffset = locaTable[i].origOffset; - unsortedLoca = gTrue; - } - locaTable[i].idx = i; - } - - // check for zero-length tables - nZeroLengthTables = 0; - for (i = 0; i < nTables; ++i) { - if (tables[i].len == 0) { - ++nZeroLengthTables; - } - } - - // check for an incorrect cmap table length - badCmapLen = gFalse; - cmapLen = 0; // make gcc happy - if (!missingCmap) { - if (nCmaps > 0) { - cmapLen = cmaps[0].offset + cmaps[0].len; - for (i = 1; i < nCmaps; ++i) { - if (cmaps[i].offset + cmaps[i].len > cmapLen) { - cmapLen = cmaps[i].offset + cmaps[i].len; - } - } - } - cmapLen -= tables[cmapIdx].offset; - if (cmapLen > tables[cmapIdx].len) { - badCmapLen = gTrue; - } - } - - // check for an abbreviated hmtx table (this is completely legal, - // but confuses the Microsoft PCL5 printer driver, which generates - // embedded fonts with the pitch field set to zero) - i = seekTable("hhea"); - nHMetrics = getU16BE(tables[i].offset + 34, &ok); - abbrevHMTX = nHMetrics < nGlyphs; - - // if nothing is broken, just write the TTF file as is - if (!missingCmap && !missingName && !missingPost && !missingOS2 && - !unsortedLoca && !badCmapLen && !abbrevHMTX && nZeroLengthTables == 0 && - !name && !codeToGID) { - (*outputFunc)(outputStream, (char *)file, len); - goto done1; - } - - // sort the 'loca' table: some (non-compliant) fonts have - // out-of-order loca tables; in order to correctly handle the case - // where (compliant) fonts have empty entries in the middle of the - // table, cmpTrueTypeLocaOffset uses offset as its primary sort key, - // and idx as its secondary key (ensuring that adjacent entries with - // the same pos value remain in the same order) - glyfLen = 0; // make gcc happy - if (unsortedLoca) { - qsort(locaTable, nGlyphs + 1, sizeof(TrueTypeLoca), - &cmpTrueTypeLocaOffset); - for (i = 0; i < nGlyphs; ++i) { - locaTable[i].len = locaTable[i+1].origOffset - locaTable[i].origOffset; - } - locaTable[nGlyphs].len = 0; - qsort(locaTable, nGlyphs + 1, sizeof(TrueTypeLoca), - &cmpTrueTypeLocaIdx); - pos = 0; - for (i = 0; i <= nGlyphs; ++i) { - locaTable[i].newOffset = pos; - pos += locaTable[i].len; - if (pos & 3) { - pos += 4 - (pos & 3); - } - } - glyfLen = pos; - } - - // compute checksums for the loca and glyf tables - locaChecksum = glyfChecksum = 0; - if (unsortedLoca) { - if (locaFmt) { - for (j = 0; j <= nGlyphs; ++j) { - locaChecksum += locaTable[j].newOffset; - } - } else { - for (j = 0; j <= nGlyphs; j += 2) { - locaChecksum += locaTable[j].newOffset << 16; - if (j + 1 <= nGlyphs) { - locaChecksum += locaTable[j+1].newOffset; - } - } - } - pos = tables[seekTable("glyf")].offset; - for (j = 0; j < nGlyphs; ++j) { - n = locaTable[j].len; - if (n > 0) { - k = locaTable[j].origOffset; - if (checkRegion(pos + k, n)) { - glyfChecksum += computeTableChecksum(file + pos + k, n); - } - } - } - } - - // construct the new name table - if (name) { - n = strlen(name); - newNameLen = (6 + 4*12 + 2 * (3*n + 7) + 3) & ~3; - newNameTab = (char *)gmalloc(newNameLen); - memset(newNameTab, 0, newNameLen); - newNameTab[0] = 0; // format selector - newNameTab[1] = 0; - newNameTab[2] = 0; // number of name records - newNameTab[3] = 4; - newNameTab[4] = 0; // offset to start of string storage - newNameTab[5] = 6 + 4*12; - next = 0; - for (i = 0; i < 4; ++i) { - newNameTab[6 + i*12 + 0] = 0; // platform ID = Microsoft - newNameTab[6 + i*12 + 1] = 3; - newNameTab[6 + i*12 + 2] = 0; // encoding ID = Unicode - newNameTab[6 + i*12 + 3] = 1; - newNameTab[6 + i*12 + 4] = 0x04; // language ID = American English - newNameTab[6 + i*12 + 5] = 0x09; - newNameTab[6 + i*12 + 6] = 0; // name ID - newNameTab[6 + i*12 + 7] = i + 1; - newNameTab[6 + i*12 + 8] = i+1 == 2 ? 0 : ((2*n) >> 8); // string length - newNameTab[6 + i*12 + 9] = i+1 == 2 ? 14 : ((2*n) & 0xff); - newNameTab[6 + i*12 + 10] = next >> 8; // string offset - newNameTab[6 + i*12 + 11] = next & 0xff; - if (i+1 == 2) { - memcpy(newNameTab + 6 + 4*12 + next, "\0R\0e\0g\0u\0l\0a\0r", 14); - next += 14; - } else { - for (j = 0; j < n; ++j) { - newNameTab[6 + 4*12 + next + 2*j] = 0; - newNameTab[6 + 4*12 + next + 2*j + 1] = name[j]; - } - next += 2*n; - } - } - } else { - newNameLen = 0; - newNameTab = NULL; - } - - // construct the new cmap table - if (codeToGID) { - newCmapLen = 44 + 256 * 2; - newCmapTab = (char *)gmalloc(newCmapLen); - newCmapTab[0] = 0; // table version number = 0 - newCmapTab[1] = 0; - newCmapTab[2] = 0; // number of encoding tables = 1 - newCmapTab[3] = 1; - newCmapTab[4] = 0; // platform ID = Microsoft - newCmapTab[5] = 3; - newCmapTab[6] = 0; // encoding ID = Unicode - newCmapTab[7] = 1; - newCmapTab[8] = 0; // offset of subtable - newCmapTab[9] = 0; - newCmapTab[10] = 0; - newCmapTab[11] = 12; - newCmapTab[12] = 0; // subtable format = 4 - newCmapTab[13] = 4; - newCmapTab[14] = 0x02; // subtable length - newCmapTab[15] = 0x20; - newCmapTab[16] = 0; // subtable version = 0 - newCmapTab[17] = 0; - newCmapTab[18] = 0; // segment count * 2 - newCmapTab[19] = 4; - newCmapTab[20] = 0; // 2 * 2 ^ floor(log2(segCount)) - newCmapTab[21] = 4; - newCmapTab[22] = 0; // floor(log2(segCount)) - newCmapTab[23] = 1; - newCmapTab[24] = 0; // 2*segCount - 2*2^floor(log2(segCount)) - newCmapTab[25] = 0; - newCmapTab[26] = 0x00; // endCount[0] - newCmapTab[27] = (char)0xff; - newCmapTab[28] = (char)0xff; // endCount[1] - newCmapTab[29] = (char)0xff; - newCmapTab[30] = 0; // reserved - newCmapTab[31] = 0; - newCmapTab[32] = 0x00; // startCount[0] - newCmapTab[33] = 0x00; - newCmapTab[34] = (char)0xff; // startCount[1] - newCmapTab[35] = (char)0xff; - newCmapTab[36] = 0; // idDelta[0] - newCmapTab[37] = 0; - newCmapTab[38] = 0; // idDelta[1] - newCmapTab[39] = 1; - newCmapTab[40] = 0; // idRangeOffset[0] - newCmapTab[41] = 4; - newCmapTab[42] = 0; // idRangeOffset[1] - newCmapTab[43] = 0; - for (i = 0; i < 256; ++i) { - newCmapTab[44 + 2*i] = codeToGID[i] >> 8; - newCmapTab[44 + 2*i + 1] = codeToGID[i] & 0xff; - } - } else { - newCmapLen = 0; - newCmapTab = NULL; - } - - // generate the new hmtx table and the updated hhea table - if (abbrevHMTX) { - i = seekTable("hhea"); - pos = tables[i].offset; - newHHEALen = 36; - newHHEATab = (char *)gmalloc(newHHEALen); - for (i = 0; i < newHHEALen; ++i) { - newHHEATab[i] = getU8(pos++, &ok); - } - newHHEATab[34] = nGlyphs >> 8; - newHHEATab[35] = nGlyphs & 0xff; - i = seekTable("hmtx"); - pos = tables[i].offset; - newHMTXLen = 4 * nGlyphs; - newHMTXTab = (char *)gmalloc(newHMTXLen); - advWidth = 0; - for (i = 0; i < nHMetrics; ++i) { - advWidth = getU16BE(pos, &ok); - lsb = getU16BE(pos + 2, &ok); - pos += 4; - newHMTXTab[4*i ] = advWidth >> 8; - newHMTXTab[4*i + 1] = advWidth & 0xff; - newHMTXTab[4*i + 2] = lsb >> 8; - newHMTXTab[4*i + 3] = lsb & 0xff; - } - for (; i < nGlyphs; ++i) { - lsb = getU16BE(pos, &ok); - pos += 2; - newHMTXTab[4*i ] = advWidth >> 8; - newHMTXTab[4*i + 1] = advWidth & 0xff; - newHMTXTab[4*i + 2] = lsb >> 8; - newHMTXTab[4*i + 3] = lsb & 0xff; - } - } else { - newHHEATab = newHMTXTab = NULL; - newHHEALen = newHMTXLen = 0; // make gcc happy - } - - // construct the new table directory: - // - keep all original tables with non-zero length - // - fix the cmap table's length, if necessary - // - add missing tables - // - sort the table by tag - // - compute new table positions, including 4-byte alignment - // - (re)compute table checksums - nNewTables = nTables - nZeroLengthTables + - (missingCmap ? 1 : 0) + (missingName ? 1 : 0) + - (missingPost ? 1 : 0) + (missingOS2 ? 1 : 0); - newTables = (TrueTypeTable *)gmallocn(nNewTables, sizeof(TrueTypeTable)); - j = 0; - for (i = 0; i < nTables; ++i) { - if (tables[i].len > 0) { - newTables[j] = tables[i]; - newTables[j].origOffset = tables[i].offset; - if (checkRegion(tables[i].offset, newTables[i].len)) { - newTables[j].checksum = - computeTableChecksum(file + tables[i].offset, tables[i].len); - if (tables[i].tag == headTag) { - // don't include the file checksum - newTables[j].checksum -= getU32BE(tables[i].offset + 8, &ok); - } - } - if (newTables[j].tag == cmapTag && codeToGID) { - newTables[j].len = newCmapLen; - newTables[j].checksum = computeTableChecksum((Guchar *)newCmapTab, - newCmapLen); - } else if (newTables[j].tag == cmapTag && badCmapLen) { - newTables[j].len = cmapLen; - } else if (newTables[j].tag == locaTag && unsortedLoca) { - newTables[j].len = (nGlyphs + 1) * (locaFmt ? 4 : 2); - newTables[j].checksum = locaChecksum; - } else if (newTables[j].tag == glyfTag && unsortedLoca) { - newTables[j].len = glyfLen; - newTables[j].checksum = glyfChecksum; - } else if (newTables[j].tag == nameTag && name) { - newTables[j].len = newNameLen; - newTables[j].checksum = computeTableChecksum((Guchar *)newNameTab, - newNameLen); - } else if (newTables[j].tag == hheaTag && abbrevHMTX) { - newTables[j].len = newHHEALen; - newTables[j].checksum = computeTableChecksum((Guchar *)newHHEATab, - newHHEALen); - } else if (newTables[j].tag == hmtxTag && abbrevHMTX) { - newTables[j].len = newHMTXLen; - newTables[j].checksum = computeTableChecksum((Guchar *)newHMTXTab, - newHMTXLen); - } - ++j; - } - } - if (missingCmap) { - newTables[j].tag = cmapTag; - if (codeToGID) { - newTables[j].checksum = computeTableChecksum((Guchar *)newCmapTab, - newCmapLen); - newTables[j].len = newCmapLen; - } else { - newTables[j].checksum = computeTableChecksum((Guchar *)cmapTab, - sizeof(cmapTab)); - newTables[j].len = sizeof(cmapTab); - } - ++j; - } - if (missingName) { - newTables[j].tag = nameTag; - if (name) { - newTables[j].checksum = computeTableChecksum((Guchar *)newNameTab, - newNameLen); - newTables[j].len = newNameLen; - } else { - newTables[j].checksum = computeTableChecksum((Guchar *)nameTab, - sizeof(nameTab)); - newTables[j].len = sizeof(nameTab); - } - ++j; - } - if (missingPost) { - newTables[j].tag = postTag; - newTables[j].checksum = computeTableChecksum((Guchar *)postTab, - sizeof(postTab)); - newTables[j].len = sizeof(postTab); - ++j; - } - if (missingOS2) { - newTables[j].tag = os2Tag; - newTables[j].checksum = computeTableChecksum((Guchar *)os2Tab, - sizeof(os2Tab)); - newTables[j].len = sizeof(os2Tab); - ++j; - } - qsort(newTables, nNewTables, sizeof(TrueTypeTable), - &cmpTrueTypeTableTag); - pos = 12 + nNewTables * 16; - for (i = 0; i < nNewTables; ++i) { - newTables[i].offset = pos; - pos += newTables[i].len; - if (pos & 3) { - pos += 4 - (pos & 3); - } - } - - // write the table directory - tableDir = (char *)gmalloc(12 + nNewTables * 16); - tableDir[0] = 0x00; // sfnt version - tableDir[1] = 0x01; - tableDir[2] = 0x00; - tableDir[3] = 0x00; - tableDir[4] = (char)((nNewTables >> 8) & 0xff); // numTables - tableDir[5] = (char)(nNewTables & 0xff); - for (i = -1, t = (Guint)nNewTables; t; ++i, t >>= 1) ; - t = 1 << (4 + i); - tableDir[6] = (char)((t >> 8) & 0xff); // searchRange - tableDir[7] = (char)(t & 0xff); - tableDir[8] = (char)((i >> 8) & 0xff); // entrySelector - tableDir[9] = (char)(i & 0xff); - t = nNewTables * 16 - t; - tableDir[10] = (char)((t >> 8) & 0xff); // rangeShift - tableDir[11] = (char)(t & 0xff); - pos = 12; - for (i = 0; i < nNewTables; ++i) { - tableDir[pos ] = (char)(newTables[i].tag >> 24); - tableDir[pos+ 1] = (char)(newTables[i].tag >> 16); - tableDir[pos+ 2] = (char)(newTables[i].tag >> 8); - tableDir[pos+ 3] = (char) newTables[i].tag; - tableDir[pos+ 4] = (char)(newTables[i].checksum >> 24); - tableDir[pos+ 5] = (char)(newTables[i].checksum >> 16); - tableDir[pos+ 6] = (char)(newTables[i].checksum >> 8); - tableDir[pos+ 7] = (char) newTables[i].checksum; - tableDir[pos+ 8] = (char)(newTables[i].offset >> 24); - tableDir[pos+ 9] = (char)(newTables[i].offset >> 16); - tableDir[pos+10] = (char)(newTables[i].offset >> 8); - tableDir[pos+11] = (char) newTables[i].offset; - tableDir[pos+12] = (char)(newTables[i].len >> 24); - tableDir[pos+13] = (char)(newTables[i].len >> 16); - tableDir[pos+14] = (char)(newTables[i].len >> 8); - tableDir[pos+15] = (char) newTables[i].len; - pos += 16; - } - (*outputFunc)(outputStream, tableDir, 12 + nNewTables * 16); - - // compute the file checksum - fileChecksum = computeTableChecksum((Guchar *)tableDir, - 12 + nNewTables * 16); - for (i = 0; i < nNewTables; ++i) { - fileChecksum += newTables[i].checksum; - } - fileChecksum = 0xb1b0afba - fileChecksum; - - // write the tables - for (i = 0; i < nNewTables; ++i) { - if (newTables[i].tag == headTag) { - if (checkRegion(newTables[i].origOffset, newTables[i].len)) { - (*outputFunc)(outputStream, (char *)file + newTables[i].origOffset, 8); - checksumBuf[0] = fileChecksum >> 24; - checksumBuf[1] = fileChecksum >> 16; - checksumBuf[2] = fileChecksum >> 8; - checksumBuf[3] = fileChecksum; - (*outputFunc)(outputStream, checksumBuf, 4); - (*outputFunc)(outputStream, - (char *)file + newTables[i].origOffset + 12, - newTables[i].len - 12); - } else { - for (j = 0; j < newTables[i].len; ++j) { - (*outputFunc)(outputStream, "\0", 1); - } - } - } else if (newTables[i].tag == cmapTag && codeToGID) { - (*outputFunc)(outputStream, newCmapTab, newTables[i].len); - } else if (newTables[i].tag == cmapTag && missingCmap) { - (*outputFunc)(outputStream, cmapTab, newTables[i].len); - } else if (newTables[i].tag == nameTag && name) { - (*outputFunc)(outputStream, newNameTab, newTables[i].len); - } else if (newTables[i].tag == nameTag && missingName) { - (*outputFunc)(outputStream, nameTab, newTables[i].len); - } else if (newTables[i].tag == postTag && missingPost) { - (*outputFunc)(outputStream, postTab, newTables[i].len); - } else if (newTables[i].tag == os2Tag && missingOS2) { - (*outputFunc)(outputStream, os2Tab, newTables[i].len); - } else if (newTables[i].tag == hheaTag && abbrevHMTX) { - (*outputFunc)(outputStream, newHHEATab, newTables[i].len); - } else if (newTables[i].tag == hmtxTag && abbrevHMTX) { - (*outputFunc)(outputStream, newHMTXTab, newTables[i].len); - } else if (newTables[i].tag == locaTag && unsortedLoca) { - for (j = 0; j <= nGlyphs; ++j) { - if (locaFmt) { - locaBuf[0] = (char)(locaTable[j].newOffset >> 24); - locaBuf[1] = (char)(locaTable[j].newOffset >> 16); - locaBuf[2] = (char)(locaTable[j].newOffset >> 8); - locaBuf[3] = (char) locaTable[j].newOffset; - (*outputFunc)(outputStream, locaBuf, 4); - } else { - locaBuf[0] = (char)(locaTable[j].newOffset >> 9); - locaBuf[1] = (char)(locaTable[j].newOffset >> 1); - (*outputFunc)(outputStream, locaBuf, 2); - } - } - } else if (newTables[i].tag == glyfTag && unsortedLoca) { - pos = tables[seekTable("glyf")].offset; - for (j = 0; j < nGlyphs; ++j) { - n = locaTable[j].len; - if (n > 0) { - k = locaTable[j].origOffset; - if (checkRegion(pos + k, n)) { - (*outputFunc)(outputStream, (char *)file + pos + k, n); - } else { - for (k = 0; k < n; ++k) { - (*outputFunc)(outputStream, "\0", 1); - } - } - if ((k = locaTable[j].len & 3)) { - (*outputFunc)(outputStream, "\0\0\0\0", 4 - k); - } - } - } - } else { - if (checkRegion(newTables[i].origOffset, newTables[i].len)) { - (*outputFunc)(outputStream, (char *)file + newTables[i].origOffset, - newTables[i].len); - } else { - for (j = 0; j < newTables[i].len; ++j) { - (*outputFunc)(outputStream, "\0", 1); - } - } - } - if (newTables[i].len & 3) { - (*outputFunc)(outputStream, "\0\0\0", 4 - (newTables[i].len & 3)); - } - } - - gfree(newHMTXTab); - gfree(newHHEATab); - gfree(newCmapTab); - gfree(newNameTab); - gfree(tableDir); - gfree(newTables); - done1: - gfree(locaTable); -} - -void FoFiTrueType::cvtEncoding(char **encoding, - FoFiOutputFunc outputFunc, - void *outputStream) { - char *name; - GooString *buf; - int i; - - (*outputFunc)(outputStream, "/Encoding 256 array\n", 20); - if (encoding) { - for (i = 0; i < 256; ++i) { - if (!(name = encoding[i])) { - name = ".notdef"; - } - buf = GooString::format("dup {0:d} /", i); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, name, strlen(name)); - (*outputFunc)(outputStream, " put\n", 5); - } - } else { - for (i = 0; i < 256; ++i) { - buf = GooString::format("dup {0:d} /c{1:02x} put\n", i, i); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - } - (*outputFunc)(outputStream, "readonly def\n", 13); -} - -void FoFiTrueType::cvtCharStrings(char **encoding, - Gushort *codeToGID, - FoFiOutputFunc outputFunc, - void *outputStream) { - char *name; - GooString *buf; - char buf2[16]; - int i, k; - - // always define '.notdef' - (*outputFunc)(outputStream, "/CharStrings 256 dict dup begin\n", 32); - (*outputFunc)(outputStream, "/.notdef 0 def\n", 15); - - // if there's no 'cmap' table, punt - if (nCmaps == 0) { - goto err; - } - - // map char name to glyph index: - // 1. use encoding to map name to char code - // 2. use codeToGID to map char code to glyph index - // N.B. We do this in reverse order because font subsets can have - // weird encodings that use the same character name twice, and - // the first definition is probably the one we want. - k = 0; // make gcc happy - for (i = 255; i >= 0; --i) { - if (encoding) { - name = encoding[i]; - } else { - sprintf(buf2, "c%02x", i); - name = buf2; - } - if (name && strcmp(name, ".notdef")) { - k = codeToGID[i]; - // note: Distiller (maybe Adobe's PS interpreter in general) - // doesn't like TrueType fonts that have CharStrings entries - // which point to nonexistent glyphs, hence the (k < nGlyphs) - // test - if (k > 0 && k < nGlyphs) { - (*outputFunc)(outputStream, "/", 1); - (*outputFunc)(outputStream, name, strlen(name)); - buf = GooString::format(" {0:d} def\n", k); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - } - } - - err: - (*outputFunc)(outputStream, "end readonly def\n", 17); -} - -void FoFiTrueType::cvtSfnts(FoFiOutputFunc outputFunc, - void *outputStream, GooString *name, - GBool needVerticalMetrics) { - Guchar headData[54]; - TrueTypeLoca *locaTable; - Guchar *locaData; - TrueTypeTable newTables[nT42Tables]; - Guchar tableDir[12 + nT42Tables*16]; - GBool ok; - Guint checksum; - int nNewTables; - int length, pos, glyfPos, i, j, k; - Guchar vheaTab[36] = { - 0, 1, 0, 0, // table version number - 0, 0, // ascent - 0, 0, // descent - 0, 0, // reserved - 0, 0, // max advance height - 0, 0, // min top side bearing - 0, 0, // min bottom side bearing - 0, 0, // y max extent - 0, 0, // caret slope rise - 0, 1, // caret slope run - 0, 0, // caret offset - 0, 0, // reserved - 0, 0, // reserved - 0, 0, // reserved - 0, 0, // reserved - 0, 0, // metric data format - 0, 1 // number of advance heights in vmtx table - }; - Guchar *vmtxTab; - GBool needVhea, needVmtx; - int advance; - - // construct the 'head' table, zero out the font checksum - i = seekTable("head"); - if (i < 0 || i >= nTables) { - return; - } - pos = tables[i].offset; - if (!checkRegion(pos, 54)) { - return; - } - memcpy(headData, file + pos, 54); - headData[8] = headData[9] = headData[10] = headData[11] = (Guchar)0; - - // read the original 'loca' table, pad entries out to 4 bytes, and - // sort it into proper order -- some (non-compliant) fonts have - // out-of-order loca tables; in order to correctly handle the case - // where (compliant) fonts have empty entries in the middle of the - // table, cmpTrueTypeLocaPos uses offset as its primary sort key, - // and idx as its secondary key (ensuring that adjacent entries with - // the same pos value remain in the same order) - locaTable = (TrueTypeLoca *)gmallocn(nGlyphs + 1, sizeof(TrueTypeLoca)); - i = seekTable("loca"); - pos = tables[i].offset; - ok = gTrue; - for (i = 0; i <= nGlyphs; ++i) { - locaTable[i].idx = i; - if (locaFmt) { - locaTable[i].origOffset = (int)getU32BE(pos + i*4, &ok); - } else { - locaTable[i].origOffset = 2 * getU16BE(pos + i*2, &ok); - } - } - qsort(locaTable, nGlyphs + 1, sizeof(TrueTypeLoca), - &cmpTrueTypeLocaOffset); - for (i = 0; i < nGlyphs; ++i) { - locaTable[i].len = locaTable[i+1].origOffset - locaTable[i].origOffset; - } - locaTable[nGlyphs].len = 0; - qsort(locaTable, nGlyphs + 1, sizeof(TrueTypeLoca), - &cmpTrueTypeLocaIdx); - pos = 0; - for (i = 0; i <= nGlyphs; ++i) { - locaTable[i].newOffset = pos; - pos += locaTable[i].len; - if (pos & 3) { - pos += 4 - (pos & 3); - } - } - - // construct the new 'loca' table - locaData = (Guchar *)gmallocn(nGlyphs + 1, (locaFmt ? 4 : 2)); - for (i = 0; i <= nGlyphs; ++i) { - pos = locaTable[i].newOffset; - if (locaFmt) { - locaData[4*i ] = (Guchar)(pos >> 24); - locaData[4*i+1] = (Guchar)(pos >> 16); - locaData[4*i+2] = (Guchar)(pos >> 8); - locaData[4*i+3] = (Guchar) pos; - } else { - locaData[2*i ] = (Guchar)(pos >> 9); - locaData[2*i+1] = (Guchar)(pos >> 1); - } - } - - // count the number of tables - nNewTables = 0; - for (i = 0; i < nT42Tables; ++i) { - if (t42Tables[i].required || - seekTable(t42Tables[i].tag) >= 0) { - ++nNewTables; - } - } - vmtxTab = NULL; // make gcc happy - advance = 0; // make gcc happy - if (needVerticalMetrics) { - needVhea = seekTable("vhea") < 0; - needVmtx = seekTable("vmtx") < 0; - if (needVhea || needVmtx) { - i = seekTable("head"); - advance = getU16BE(tables[i].offset + 18, &ok); // units per em - if (needVhea) { - ++nNewTables; - } - if (needVmtx) { - ++nNewTables; - } - } - } - - // construct the new table headers, including table checksums - // (pad each table out to a multiple of 4 bytes) - pos = 12 + nNewTables*16; - k = 0; - for (i = 0; i < nT42Tables; ++i) { - length = -1; - checksum = 0; // make gcc happy - if (i == t42HeadTable) { - length = 54; - checksum = computeTableChecksum(headData, 54); - } else if (i == t42LocaTable) { - length = (nGlyphs + 1) * (locaFmt ? 4 : 2); - checksum = computeTableChecksum(locaData, length); - } else if (i == t42GlyfTable) { - length = 0; - checksum = 0; - glyfPos = tables[seekTable("glyf")].offset; - for (j = 0; j < nGlyphs; ++j) { - length += locaTable[j].len; - if (length & 3) { - length += 4 - (length & 3); - } - if (checkRegion(glyfPos + locaTable[j].origOffset, locaTable[j].len)) { - checksum += - computeTableChecksum(file + glyfPos + locaTable[j].origOffset, - locaTable[j].len); - } - } - } else { - if ((j = seekTable(t42Tables[i].tag)) >= 0) { - length = tables[j].len; - if (checkRegion(tables[j].offset, length)) { - checksum = computeTableChecksum(file + tables[j].offset, length); - } - } else if (needVerticalMetrics && i == t42VheaTable) { - vheaTab[10] = advance / 256; // max advance height - vheaTab[11] = advance % 256; - length = sizeof(vheaTab); - checksum = computeTableChecksum(vheaTab, length); - } else if (needVerticalMetrics && i == t42VmtxTable) { - length = 4 + (nGlyphs - 1) * 4; - vmtxTab = (Guchar *)gmalloc(length); - vmtxTab[0] = advance / 256; - vmtxTab[1] = advance % 256; - for (j = 2; j < length; j += 2) { - vmtxTab[j] = 0; - vmtxTab[j+1] = 0; - } - checksum = computeTableChecksum(vmtxTab, length); - } else if (t42Tables[i].required) { - //~ error(-1, "Embedded TrueType font is missing a required table ('%s')", - //~ t42Tables[i].tag); - length = 0; - checksum = 0; - } - } - if (length >= 0) { - newTables[k].tag = ((t42Tables[i].tag[0] & 0xff) << 24) | - ((t42Tables[i].tag[1] & 0xff) << 16) | - ((t42Tables[i].tag[2] & 0xff) << 8) | - (t42Tables[i].tag[3] & 0xff); - newTables[k].checksum = checksum; - newTables[k].offset = pos; - newTables[k].len = length; - pos += length; - if (pos & 3) { - pos += 4 - (length & 3); - } - ++k; - } - } - - // construct the table directory - tableDir[0] = 0x00; // sfnt version - tableDir[1] = 0x01; - tableDir[2] = 0x00; - tableDir[3] = 0x00; - tableDir[4] = 0; // numTables - tableDir[5] = nNewTables; - tableDir[6] = 0; // searchRange - tableDir[7] = (Guchar)128; - tableDir[8] = 0; // entrySelector - tableDir[9] = 3; - tableDir[10] = 0; // rangeShift - tableDir[11] = (Guchar)(16 * nNewTables - 128); - pos = 12; - for (i = 0; i < nNewTables; ++i) { - tableDir[pos ] = (Guchar)(newTables[i].tag >> 24); - tableDir[pos+ 1] = (Guchar)(newTables[i].tag >> 16); - tableDir[pos+ 2] = (Guchar)(newTables[i].tag >> 8); - tableDir[pos+ 3] = (Guchar) newTables[i].tag; - tableDir[pos+ 4] = (Guchar)(newTables[i].checksum >> 24); - tableDir[pos+ 5] = (Guchar)(newTables[i].checksum >> 16); - tableDir[pos+ 6] = (Guchar)(newTables[i].checksum >> 8); - tableDir[pos+ 7] = (Guchar) newTables[i].checksum; - tableDir[pos+ 8] = (Guchar)(newTables[i].offset >> 24); - tableDir[pos+ 9] = (Guchar)(newTables[i].offset >> 16); - tableDir[pos+10] = (Guchar)(newTables[i].offset >> 8); - tableDir[pos+11] = (Guchar) newTables[i].offset; - tableDir[pos+12] = (Guchar)(newTables[i].len >> 24); - tableDir[pos+13] = (Guchar)(newTables[i].len >> 16); - tableDir[pos+14] = (Guchar)(newTables[i].len >> 8); - tableDir[pos+15] = (Guchar) newTables[i].len; - pos += 16; - } - - // compute the font checksum and store it in the head table - checksum = computeTableChecksum(tableDir, 12 + nNewTables*16); - for (i = 0; i < nNewTables; ++i) { - checksum += newTables[i].checksum; - } - checksum = 0xb1b0afba - checksum; // because the TrueType spec says so - headData[ 8] = (Guchar)(checksum >> 24); - headData[ 9] = (Guchar)(checksum >> 16); - headData[10] = (Guchar)(checksum >> 8); - headData[11] = (Guchar) checksum; - - // start the sfnts array - if (name) { - (*outputFunc)(outputStream, "/", 1); - (*outputFunc)(outputStream, name->getCString(), name->getLength()); - (*outputFunc)(outputStream, " [\n", 3); - } else { - (*outputFunc)(outputStream, "/sfnts [\n", 9); - } - - // write the table directory - dumpString(tableDir, 12 + nNewTables*16, outputFunc, outputStream); - - // write the tables - for (i = 0; i < nNewTables; ++i) { - if (i == t42HeadTable) { - dumpString(headData, 54, outputFunc, outputStream); - } else if (i == t42LocaTable) { - length = (nGlyphs + 1) * (locaFmt ? 4 : 2); - dumpString(locaData, length, outputFunc, outputStream); - } else if (i == t42GlyfTable) { - glyfPos = tables[seekTable("glyf")].offset; - for (j = 0; j < nGlyphs; ++j) { - if (locaTable[j].len > 0 && - checkRegion(glyfPos + locaTable[j].origOffset, locaTable[j].len)) { - dumpString(file + glyfPos + locaTable[j].origOffset, - locaTable[j].len, outputFunc, outputStream); - } - } - } else { - // length == 0 means the table is missing and the error was - // already reported during the construction of the table - // headers - if ((length = newTables[i].len) > 0) { - if ((j = seekTable(t42Tables[i].tag)) >= 0 && - checkRegion(tables[j].offset, tables[j].len)) { - dumpString(file + tables[j].offset, tables[j].len, - outputFunc, outputStream); - } else if (needVerticalMetrics && i == t42VheaTable) { - dumpString(vheaTab, length, outputFunc, outputStream); - } else if (needVerticalMetrics && i == t42VmtxTable) { - dumpString(vmtxTab, length, outputFunc, outputStream); - gfree(vmtxTab); - } - } - } - } - - // end the sfnts array - (*outputFunc)(outputStream, "] def\n", 6); - - gfree(locaData); - gfree(locaTable); -} - -void FoFiTrueType::dumpString(Guchar *s, int length, - FoFiOutputFunc outputFunc, - void *outputStream) { - GooString *buf; - int pad, i, j; - - (*outputFunc)(outputStream, "<", 1); - for (i = 0; i < length; i += 32) { - for (j = 0; j < 32 && i+j < length; ++j) { - buf = GooString::format("{0:02x}", s[i+j] & 0xff); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (i % (65536 - 32) == 65536 - 64) { - (*outputFunc)(outputStream, ">\n<", 3); - } else if (i+32 < length) { - (*outputFunc)(outputStream, "\n", 1); - } - } - if (length & 3) { - pad = 4 - (length & 3); - for (i = 0; i < pad; ++i) { - (*outputFunc)(outputStream, "00", 2); - } - } - // add an extra zero byte because the Adobe Type 42 spec says so - (*outputFunc)(outputStream, "00>\n", 4); -} - -Guint FoFiTrueType::computeTableChecksum(Guchar *data, int length) { - Guint checksum, word; - int i; - - checksum = 0; - for (i = 0; i+3 < length; i += 4) { - word = ((data[i ] & 0xff) << 24) + - ((data[i+1] & 0xff) << 16) + - ((data[i+2] & 0xff) << 8) + - (data[i+3] & 0xff); - checksum += word; - } - if (length & 3) { - word = 0; - i = length & ~3; - switch (length & 3) { - case 3: - word |= (data[i+2] & 0xff) << 8; - case 2: - word |= (data[i+1] & 0xff) << 16; - case 1: - word |= (data[i ] & 0xff) << 24; - break; - } - checksum += word; - } - return checksum; -} - -void FoFiTrueType::parse() { - Guint topTag; - int pos, ver, i, j; - - parsedOk = gTrue; - - // look for a collection (TTC) - topTag = getU32BE(0, &parsedOk); - if (!parsedOk) { - return; - } - if (topTag == ttcfTag) { - /* TTC font */ - int dircount; - - dircount = getU32BE(8, &parsedOk); - if (!parsedOk) - return; - if (! dircount) { - parsedOk = gFalse; - return; - } - - if (faceIndex >= dircount) - faceIndex = 0; - pos = getU32BE(12 + faceIndex * 4, &parsedOk); - if (! parsedOk) - return; - } else { - pos = 0; - } - - // check the sfnt version - ver = getU32BE(pos, &parsedOk); - if (!parsedOk) { - return; - } - openTypeCFF = ver == 0x4f54544f; // 'OTTO' - - // read the table directory - nTables = getU16BE(pos + 4, &parsedOk); - if (!parsedOk) { - return; - } - tables = (TrueTypeTable *)gmallocn(nTables, sizeof(TrueTypeTable)); - pos += 12; - int wrongTables = 0; - for (i = 0; i < nTables; ++i) { - tables[i].tag = getU32BE(pos, &parsedOk); - tables[i].checksum = getU32BE(pos + 4, &parsedOk); - tables[i].offset = (int)getU32BE(pos + 8, &parsedOk); - tables[i].len = (int)getU32BE(pos + 12, &parsedOk); - if (tables[i].offset + tables[i].len < tables[i].offset || - tables[i].offset + tables[i].len > len) { - i--; - wrongTables++; - error(-1, "Found a bad table definition on true type definition, trying to continue..."); - } - pos += 16; - } - nTables -= wrongTables; - tables = (TrueTypeTable *)greallocn_checkoverflow(tables, nTables, sizeof(TrueTypeTable)); - if (!parsedOk || tables == NULL) { - return; - } - - // check for tables that are required by both the TrueType spec and - // the Type 42 spec - if (seekTable("head") < 0 || - seekTable("hhea") < 0 || - seekTable("maxp") < 0 || - seekTable("hmtx") < 0 || - (!openTypeCFF && seekTable("loca") < 0) || - (!openTypeCFF && seekTable("glyf") < 0) || - (openTypeCFF && seekTable("CFF ") < 0)) { - parsedOk = gFalse; - return; - } - - // read the cmaps - if ((i = seekTable("cmap")) >= 0) { - pos = tables[i].offset + 2; - nCmaps = getU16BE(pos, &parsedOk); - pos += 2; - if (!parsedOk) { - return; - } - cmaps = (TrueTypeCmap *)gmallocn(nCmaps, sizeof(TrueTypeCmap)); - for (j = 0; j < nCmaps; ++j) { - cmaps[j].platform = getU16BE(pos, &parsedOk); - cmaps[j].encoding = getU16BE(pos + 2, &parsedOk); - cmaps[j].offset = tables[i].offset + getU32BE(pos + 4, &parsedOk); - pos += 8; - cmaps[j].fmt = getU16BE(cmaps[j].offset, &parsedOk); - cmaps[j].len = getU16BE(cmaps[j].offset + 2, &parsedOk); - } - if (!parsedOk) { - return; - } - } else { - nCmaps = 0; - } - - // get the number of glyphs from the maxp table - i = seekTable("maxp"); - nGlyphs = getU16BE(tables[i].offset + 4, &parsedOk); - if (!parsedOk) { - return; - } - - // get the bbox and loca table format from the head table - i = seekTable("head"); - bbox[0] = getS16BE(tables[i].offset + 36, &parsedOk); - bbox[1] = getS16BE(tables[i].offset + 38, &parsedOk); - bbox[2] = getS16BE(tables[i].offset + 40, &parsedOk); - bbox[3] = getS16BE(tables[i].offset + 42, &parsedOk); - locaFmt = getS16BE(tables[i].offset + 50, &parsedOk); - if (!parsedOk) { - return; - } - - // make sure the loca table is sane (correct length and entries are - // in bounds) - if (!openTypeCFF) { - i = seekTable("loca"); - if (tables[i].len < 0) { - parsedOk = gFalse; - return; - } - if (tables[i].len < (nGlyphs + 1) * (locaFmt ? 4 : 2)) { - nGlyphs = tables[i].len / (locaFmt ? 4 : 2) - 1; - } - for (j = 0; j <= nGlyphs; ++j) { - if (locaFmt) { - pos = (int)getU32BE(tables[i].offset + j*4, &parsedOk); - } else { - pos = getU16BE(tables[i].offset + j*2, &parsedOk); - } - if (pos < 0 || pos > len) { - parsedOk = gFalse; - } - } - if (!parsedOk) { - return; - } - } - - // read the post table - readPostTable(); -} - -void FoFiTrueType::readPostTable() { - GooString *name; - int tablePos, postFmt, stringIdx, stringPos; - GBool ok; - int i, j, n, m; - - ok = gTrue; - if ((i = seekTable("post")) < 0) { - return; - } - tablePos = tables[i].offset; - postFmt = getU32BE(tablePos, &ok); - if (!ok) { - goto err; - } - if (postFmt == 0x00010000) { - nameToGID = new GooHash(gTrue); - for (i = 0; i < 258; ++i) { - nameToGID->add(new GooString(macGlyphNames[i]), i); - } - } else if (postFmt == 0x00020000) { - nameToGID = new GooHash(gTrue); - n = getU16BE(tablePos + 32, &ok); - if (!ok) { - goto err; - } - if (n > nGlyphs) { - n = nGlyphs; - } - stringIdx = 0; - stringPos = tablePos + 34 + 2*n; - for (i = 0; i < n; ++i) { - j = getU16BE(tablePos + 34 + 2*i, &ok); - if (j < 258) { - nameToGID->removeInt(macGlyphNames[j]); - nameToGID->add(new GooString(macGlyphNames[j]), i); - } else { - j -= 258; - if (j != stringIdx) { - for (stringIdx = 0, stringPos = tablePos + 34 + 2*n; - stringIdx < j; - ++stringIdx, stringPos += 1 + getU8(stringPos, &ok)) ; - if (!ok) { - goto err; - } - } - m = getU8(stringPos, &ok); - if (!ok || !checkRegion(stringPos + 1, m)) { - goto err; - } - name = new GooString((char *)&file[stringPos + 1], m); - nameToGID->removeInt(name); - nameToGID->add(name, i); - ++stringIdx; - stringPos += 1 + m; - } - } - } else if (postFmt == 0x00028000) { - nameToGID = new GooHash(gTrue); - for (i = 0; i < nGlyphs; ++i) { - j = getU8(tablePos + 32 + i, &ok); - if (!ok) { - goto err; - } - if (j < 258) { - nameToGID->removeInt(macGlyphNames[j]); - nameToGID->add(new GooString(macGlyphNames[j]), i); - } - } - } - - return; - - err: - if (nameToGID) { - delete nameToGID; - nameToGID = NULL; - } -} - -int FoFiTrueType::seekTable(char *tag) { - Guint tagI; - int i; - - tagI = ((tag[0] & 0xff) << 24) | - ((tag[1] & 0xff) << 16) | - ((tag[2] & 0xff) << 8) | - (tag[3] & 0xff); - for (i = 0; i < nTables; ++i) { - if (tables[i].tag == tagI) { - return i; - } - } - return -1; -} - -Guint FoFiTrueType::charToTag(const char *tagName) -{ - int n = strlen(tagName); - Guint tag = 0; - int i; - - if (n > 4) n = 4; - for (i = 0;i < n;i++) { - tag <<= 8; - tag |= tagName[i] & 0xff; - } - for (;i < 4;i++) { - tag <<= 8; - tag |= ' '; - } - return tag; -} - -/* - setup GSUB table data - Only supporting vertical text substitution. -*/ -int FoFiTrueType::setupGSUB(const char *tagName) -{ - Guint gsubTable; - unsigned int i; - Guint scriptList, featureList; - Guint scriptCount; - Guint tag; - Guint scriptTable = 0; - Guint langSys; - Guint featureCount; - Guint featureIndex; - Guint ftable = 0; - Guint llist; - Guint scriptTag; - int x; - Guint pos; - - if (tagName == 0) { - gsubFeatureTable = 0; - return 0; - } - scriptTag = charToTag(tagName); - /* read GSUB Header */ - if ((x = seekTable("GSUB")) < 0) { - return 0; /* GSUB table not found */ - } - gsubTable = tables[x].offset; - pos = gsubTable+4; - scriptList = getU16BE(pos,&parsedOk); - pos += 2; - featureList = getU16BE(pos,&parsedOk); - pos += 2; - llist = getU16BE(pos,&parsedOk); - - gsubLookupList = llist+gsubTable; /* change to offset from top of file */ - /* read script list table */ - pos = gsubTable+scriptList; - scriptCount = getU16BE(pos,&parsedOk); - pos += 2; - /* find script */ - for (i = 0;i < scriptCount;i++) { - tag = getU32BE(pos,&parsedOk); - pos += 4; - scriptTable = getU16BE(pos,&parsedOk); - pos += 2; - if (tag == scriptTag) { - /* found */ - break; - } - } - if (i >= scriptCount) { - /* not found */ - return 0; - } - - /* read script table */ - /* use default language system */ - pos = gsubTable+scriptList+scriptTable; - langSys = getU16BE(pos,&parsedOk);/* default language system */ - - /* read LangSys table */ - if (langSys == 0) { - /* no ldefault LangSys */ - return 0; - } - - pos = gsubTable+scriptList+scriptTable+langSys+2; - featureIndex = getU16BE(pos,&parsedOk); /* ReqFeatureIndex */ - pos += 2; - - if (featureIndex != 0xffff) { - Guint tpos; - /* read feature record */ - tpos = gsubTable+featureList; - featureCount = getU16BE(tpos,&parsedOk); - tpos = gsubTable+featureList+2+featureIndex*(4+2); - tag = getU32BE(tpos,&parsedOk); - tpos += 4; - if (tag == vrt2Tag) { - /* vrt2 is preferred, overwrite vert */ - ftable = getU16BE(tpos,&parsedOk); - /* convert to offset from file top */ - gsubFeatureTable = ftable+gsubTable+featureList; - return 0; - } else if (tag == vertTag) { - ftable = getU16BE(tpos,&parsedOk); - } - } - featureCount = getU16BE(pos,&parsedOk); - pos += 2; - /* find 'vrt2' or 'vert' feature */ - for (i = 0;i < featureCount;i++) { - Guint oldPos; - - featureIndex = getU16BE(pos,&parsedOk); - pos += 2; - oldPos = pos; /* save position */ - /* read feature record */ - pos = gsubTable+featureList+2+featureIndex*(4+2); - tag = getU32BE(pos,&parsedOk); - pos += 4; - if (tag == vrt2Tag) { - /* vrt2 is preferred, overwrite vert */ - ftable = getU16BE(pos,&parsedOk); - break; - } else if (ftable == 0 && tag == vertTag) { - ftable = getU16BE(pos,&parsedOk); - } - pos = oldPos; /* restore old position */ - } - if (ftable == 0) { - /* vert nor vrt2 are not found */ - return 0; - } - /* convert to offset from file top */ - gsubFeatureTable = ftable+gsubTable+featureList; - return 0; -} - -Guint FoFiTrueType::doMapToVertGID(Guint orgGID) -{ - Guint lookupCount; - Guint lookupListIndex; - Guint i; - Guint gid = 0; - Guint pos; - - pos = gsubFeatureTable+2; - lookupCount = getU16BE(pos,&parsedOk); - pos += 2; - for (i = 0;i < lookupCount;i++) { - lookupListIndex = getU16BE(pos,&parsedOk); - pos += 2; - if ((gid = scanLookupList(lookupListIndex,orgGID)) != 0) { - break; - } - } - return gid; -} - -Guint FoFiTrueType::mapToVertGID(Guint orgGID) -{ - Guint mapped; - - if (gsubFeatureTable == 0) return orgGID; - if ((mapped = doMapToVertGID(orgGID)) != 0) { - return mapped; - } - return orgGID; -} - -Guint FoFiTrueType::scanLookupList(Guint listIndex, Guint orgGID) -{ - Guint lookupTable; - Guint subTableCount; - Guint subTable; - Guint i; - Guint gid = 0; - Guint pos; - - if (gsubLookupList == 0) return 0; /* no lookup list */ - pos = gsubLookupList+2+listIndex*2; - lookupTable = getU16BE(pos,&parsedOk); - /* read lookup table */ - pos = gsubLookupList+lookupTable+4; - subTableCount = getU16BE(pos,&parsedOk); - pos += 2;; - for (i = 0;i < subTableCount;i++) { - subTable = getU16BE(pos,&parsedOk); - pos += 2; - if ((gid = scanLookupSubTable(gsubLookupList+lookupTable+subTable,orgGID)) - != 0) break; - } - return gid; -} - -Guint FoFiTrueType::scanLookupSubTable(Guint subTable, Guint orgGID) -{ - Guint format; - Guint coverage; - int delta; - int glyphCount; - Guint substitute; - Guint gid = 0; - int coverageIndex; - int pos; - - pos = subTable; - format = getU16BE(pos,&parsedOk); - pos += 2; - coverage = getU16BE(pos,&parsedOk); - pos += 2; - if ((coverageIndex = - checkGIDInCoverage(subTable+coverage,orgGID)) >= 0) { - switch (format) { - case 1: - /* format 1 */ - delta = getS16BE(pos,&parsedOk); - pos += 2; - gid = orgGID+delta; - break; - case 2: - /* format 2 */ - glyphCount = getS16BE(pos,&parsedOk); - pos += 2; - if (glyphCount > coverageIndex) { - pos += coverageIndex*2; - substitute = getU16BE(pos,&parsedOk); - gid = substitute; - } - break; - default: - /* unknown format */ - break; - } - } - return gid; -} - -int FoFiTrueType::checkGIDInCoverage(Guint coverage, Guint orgGID) -{ - int index = -1; - Guint format; - Guint count; - Guint i; - Guint pos; - - pos = coverage; - format = getU16BE(pos,&parsedOk); - pos += 2; - switch (format) { - case 1: - count = getU16BE(pos,&parsedOk); - pos += 2; - for (i = 0;i < count;i++) { - Guint gid; - - gid = getU16BE(pos,&parsedOk); - pos += 2; - if (gid == orgGID) { - /* found */ - index = i; - break; - } else if (gid > orgGID) { - /* not found */ - break; - } - } - break; - case 2: - count = getU16BE(pos,&parsedOk); - pos += 2; - for (i = 0;i < count;i++) { - Guint startGID, endGID; - Guint startIndex; - - startGID = getU16BE(pos,&parsedOk); - pos += 2; - endGID = getU16BE(pos,&parsedOk); - pos += 2; - startIndex = getU16BE(pos,&parsedOk); - pos += 2; - if (startGID <= orgGID && orgGID <= endGID) { - /* found */ - index = startIndex+orgGID-startGID; - break; - } else if (orgGID <= endGID) { - /* not found */ - break; - } - } - break; - default: - break; - } - return index; -} - diff --git a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiTrueType.h b/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiTrueType.h deleted file mode 100644 index 4ba9b1fe924..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiTrueType.h +++ /dev/null @@ -1,202 +0,0 @@ -//======================================================================== -// -// FoFiTrueType.h -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> -// Copyright (C) 2007 Koji Otani <sho@bbr.jp> -// Copyright (C) 2011 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef FOFITRUETYPE_H -#define FOFITRUETYPE_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "stddef.h" -#include "goo/gtypes.h" -#include "FoFiBase.h" - -class GooString; -class GooHash; -struct TrueTypeTable; -struct TrueTypeCmap; - -//------------------------------------------------------------------------ -// FoFiTrueType -//------------------------------------------------------------------------ - -class FoFiTrueType: public FoFiBase { -public: - - // Create a FoFiTrueType object from a memory buffer. - static FoFiTrueType *make(char *fileA, int lenA, int faceIndexA=0); - - // Create a FoFiTrueType object from a file on disk. - static FoFiTrueType *load(char *fileName, int faceIndexA=0); - - virtual ~FoFiTrueType(); - - // Returns true if this an OpenType font containing CFF data, false - // if it's a TrueType font (or OpenType font with TrueType data). - GBool isOpenTypeCFF() { return openTypeCFF; } - - // Return the number of cmaps defined by this font. - int getNumCmaps(); - - // Return the platform ID of the <i>th cmap. - int getCmapPlatform(int i); - - // Return the encoding ID of the <i>th cmap. - int getCmapEncoding(int i); - - // Return the index of the cmap for <platform>, <encoding>. Returns - // -1 if there is no corresponding cmap. - int findCmap(int platform, int encoding); - - // Return the GID corresponding to <c> according to the <i>th cmap. - Gushort mapCodeToGID(int i, Guint c); - - // map gid to vertical glyph gid if exist. - // if not exist return original gid - Guint mapToVertGID(Guint orgGID); - - // Returns the GID corresponding to <name> according to the post - // table. Returns 0 if there is no mapping for <name> or if the - // font does not have a post table. - int mapNameToGID(char *name); - - // Return the mapping from CIDs to GIDs, and return the number of - // CIDs in *<nCIDs>. This is only useful for CID fonts. (Only - // useful for OpenType CFF fonts.) - Gushort *getCIDToGIDMap(int *nCIDs); - - // Returns the least restrictive embedding licensing right (as - // defined by the TrueType spec): - // * 4: OS/2 table is missing or invalid - // * 3: installable embedding - // * 2: editable embedding - // * 1: preview & print embedding - // * 0: restricted license embedding - int getEmbeddingRights(); - - // Convert to a Type 42 font, suitable for embedding in a PostScript - // file. <psName> will be used as the PostScript font name (so we - // don't need to depend on the 'name' table in the font). The - // <encoding> array specifies the mapping from char codes to names. - // If <encoding> is NULL, the encoding is unknown or undefined. The - // <codeToGID> array specifies the mapping from char codes to GIDs. - // (Not useful for OpenType CFF fonts.) - void convertToType42(char *psName, char **encoding, - Gushort *codeToGID, - FoFiOutputFunc outputFunc, void *outputStream); - - // Convert to a Type 1 font, suitable for embedding in a PostScript - // file. This is only useful with 8-bit fonts. If <newEncoding> is - // not NULL, it will be used in place of the encoding in the Type 1C - // font. If <ascii> is true the eexec section will be hex-encoded, - // otherwise it will be left as binary data. If <psName> is - // non-NULL, it will be used as the PostScript font name. (Only - // useful for OpenType CFF fonts.) - void convertToType1(char *psName, char **newEncoding, GBool ascii, - FoFiOutputFunc outputFunc, void *outputStream); - - // Convert to a Type 2 CIDFont, suitable for embedding in a - // PostScript file. <psName> will be used as the PostScript font - // name (so we don't need to depend on the 'name' table in the - // font). The <cidMap> array maps CIDs to GIDs; it has <nCIDs> - // entries. (Not useful for OpenType CFF fonts.) - void convertToCIDType2(char *psName, Gushort *cidMap, int nCIDs, - GBool needVerticalMetrics, - FoFiOutputFunc outputFunc, void *outputStream); - - // Convert to a Type 0 CIDFont, suitable for embedding in a - // PostScript file. <psName> will be used as the PostScript font - // name. (Only useful for OpenType CFF fonts.) - void convertToCIDType0(char *psName, - FoFiOutputFunc outputFunc, void *outputStream); - - // Convert to a Type 0 (but non-CID) composite font, suitable for - // embedding in a PostScript file. <psName> will be used as the - // PostScript font name (so we don't need to depend on the 'name' - // table in the font). The <cidMap> array maps CIDs to GIDs; it has - // <nCIDs> entries. (Not useful for OpenType CFF fonts.) - void convertToType0(char *psName, Gushort *cidMap, int nCIDs, - GBool needVerticalMetrics, - FoFiOutputFunc outputFunc, void *outputStream); - - // Convert to a Type 0 (but non-CID) composite font, suitable for - // embedding in a PostScript file. <psName> will be used as the - // PostScript font name. (Only useful for OpenType CFF fonts.) - void convertToType0(char *psName, - FoFiOutputFunc outputFunc, void *outputStream); - - // Write a clean TTF file, filling in missing tables and correcting - // various other errors. If <name> is non-NULL, the font is renamed - // to <name>. If <codeToGID> is non-NULL, the font is re-encoded, - // using a Windows Unicode cmap. If <name> is NULL and the font is - // complete and correct, it will be written unmodified. (Not useful - // for OpenType CFF fonts.) - void writeTTF(FoFiOutputFunc outputFunc, void *outputStream, - char *name = NULL, Gushort *codeToGID = NULL); - - int setupGSUB(const char *tagName); -private: - - FoFiTrueType(char *fileA, int lenA, GBool freeFileDataA, int faceIndexA); - void cvtEncoding(char **encoding, - FoFiOutputFunc outputFunc, - void *outputStream); - void cvtCharStrings(char **encoding, - Gushort *codeToGID, - FoFiOutputFunc outputFunc, - void *outputStream); - void cvtSfnts(FoFiOutputFunc outputFunc, - void *outputStream, GooString *name, - GBool needVerticalMetrics); - void dumpString(Guchar *s, int length, - FoFiOutputFunc outputFunc, - void *outputStream); - Guint computeTableChecksum(Guchar *data, int length); - void parse(); - void readPostTable(); - int seekTable(char *tag); - Guint charToTag(const char *tagName); - Guint doMapToVertGID(Guint orgGID); - Guint scanLookupList(Guint listIndex, Guint orgGID); - Guint scanLookupSubTable(Guint subTable, Guint orgGID); - int checkGIDInCoverage(Guint coverage, Guint orgGID); - - TrueTypeTable *tables; - int nTables; - TrueTypeCmap *cmaps; - int nCmaps; - int nGlyphs; - int locaFmt; - int bbox[4]; - GooHash *nameToGID; - GBool openTypeCFF; - - GBool parsedOk; - int faceIndex; - Guint gsubFeatureTable; - Guint gsubLookupList; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1.cc b/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1.cc deleted file mode 100644 index 3fe7f4f7169..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1.cc +++ /dev/null @@ -1,290 +0,0 @@ -//======================================================================== -// -// FoFiType1.cc -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005, 2008, 2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2010 Jakub Wilk <ubanus@users.sf.net> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <string.h> -#include "goo/gmem.h" -#include "goo/GooLikely.h" -#include "FoFiEncodings.h" -#include "FoFiType1.h" -#include "poppler/Error.h" - -//------------------------------------------------------------------------ -// FoFiType1 -//------------------------------------------------------------------------ - -FoFiType1 *FoFiType1::make(char *fileA, int lenA) { - return new FoFiType1(fileA, lenA, gFalse); -} - -FoFiType1 *FoFiType1::load(char *fileName) { - char *fileA; - int lenA; - - if (!(fileA = FoFiBase::readFile(fileName, &lenA))) { - return NULL; - } - return new FoFiType1(fileA, lenA, gTrue); -} - -FoFiType1::FoFiType1(char *fileA, int lenA, GBool freeFileDataA): - FoFiBase(fileA, lenA, freeFileDataA) -{ - name = NULL; - encoding = NULL; - parsed = gFalse; -} - -FoFiType1::~FoFiType1() { - int i; - - if (name) { - gfree(name); - } - if (encoding && encoding != fofiType1StandardEncoding) { - for (i = 0; i < 256; ++i) { - gfree(encoding[i]); - } - gfree(encoding); - } -} - -char *FoFiType1::getName() { - if (!parsed) { - parse(); - } - return name; -} - -char **FoFiType1::getEncoding() { - if (!parsed) { - parse(); - } - return encoding; -} - -void FoFiType1::writeEncoded(char **newEncoding, - FoFiOutputFunc outputFunc, void *outputStream) { - char buf[512]; - char *line, *line2, *p; - int i; - - // copy everything up to the encoding - for (line = (char *)file; - line && strncmp(line, "/Encoding", 9); - line = getNextLine(line)) ; - if (!line) { - // no encoding - just copy the whole font file - (*outputFunc)(outputStream, (char *)file, len); - return; - } - (*outputFunc)(outputStream, (char *)file, line - (char *)file); - - // write the new encoding - (*outputFunc)(outputStream, "/Encoding 256 array\n", 20); - (*outputFunc)(outputStream, - "0 1 255 {1 index exch /.notdef put} for\n", 40); - for (i = 0; i < 256; ++i) { - if (newEncoding[i]) { - sprintf(buf, "dup %d /%s put\n", i, newEncoding[i]); - (*outputFunc)(outputStream, buf, strlen(buf)); - } - } - (*outputFunc)(outputStream, "readonly def\n", 13); - - // find the end of the encoding data - //~ this ought to parse PostScript tokens - if (!strncmp(line, "/Encoding StandardEncoding def", 30)) { - line = getNextLine(line); - } else { - // skip "/Encoding" + one whitespace char, - // then look for 'def' preceded by PostScript whitespace - p = line + 10; - line = NULL; - for (; p < (char *)file + len; ++p) { - if ((*p == ' ' || *p == '\t' || *p == '\x0a' || - *p == '\x0d' || *p == '\x0c' || *p == '\0') && - p + 4 <= (char *)file + len && - !strncmp(p + 1, "def", 3)) { - line = p + 4; - break; - } - } - } - - // some fonts have two /Encoding entries in their dictionary, so we - // check for a second one here - if (line) { - for (line2 = line, i = 0; - i < 20 && line2 && strncmp(line2, "/Encoding", 9); - line2 = getNextLine(line2), ++i) ; - if (i < 20 && line2) { - (*outputFunc)(outputStream, line, line2 - line); - if (!strncmp(line2, "/Encoding StandardEncoding def", 30)) { - line = getNextLine(line2); - } else { - // skip "/Encoding" + one whitespace char, - // then look for 'def' preceded by PostScript whitespace - p = line2 + 10; - line = NULL; - for (; p < (char *)file + len; ++p) { - if ((*p == ' ' || *p == '\t' || *p == '\x0a' || - *p == '\x0d' || *p == '\x0c' || *p == '\0') && - p + 4 <= (char *)file + len && - !strncmp(p + 1, "def", 3)) { - line = p + 4; - break; - } - } - } - } - - // copy everything after the encoding - if (line) { - (*outputFunc)(outputStream, line, ((char *)file + len) - line); - } - } -} - -char *FoFiType1::getNextLine(char *line) { - while (line < (char *)file + len && *line != '\x0a' && *line != '\x0d') { - ++line; - } - if (line < (char *)file + len && *line == '\x0d') { - ++line; - } - if (line < (char *)file + len && *line == '\x0a') { - ++line; - } - if (line >= (char *)file + len) { - return NULL; - } - return line; -} - -void FoFiType1::parse() { - char *line, *line1, *p, *p2; - char buf[256]; - char c; - int n, code, i, j; - char *tokptr; - - for (i = 1, line = (char *)file; - i <= 100 && line && (!name || !encoding); - ++i) { - - // get font name - if (!name && !strncmp(line, "/FontName", 9)) { - strncpy(buf, line, 255); - buf[255] = '\0'; - if ((p = strchr(buf+9, '/')) && - (p = strtok_r(p+1, " \t\n\r", &tokptr))) { - name = copyString(p); - } - line = getNextLine(line); - - // get encoding - } else if (!encoding && - !strncmp(line, "/Encoding StandardEncoding def", 30)) { - encoding = fofiType1StandardEncoding; - } else if (!encoding && - !strncmp(line, "/Encoding 256 array", 19)) { - encoding = (char **)gmallocn(256, sizeof(char *)); - for (j = 0; j < 256; ++j) { - encoding[j] = NULL; - } - for (j = 0, line = getNextLine(line); - j < 300 && line && (line1 = getNextLine(line)); - ++j, line = line1) { - if ((n = line1 - line) > 255) { - error(-1, "FoFiType1::parse a line has more than 255 characters, we don't support this"); - n = 255; - } - strncpy(buf, line, n); - buf[n] = '\0'; - for (p = buf; *p == ' ' || *p == '\t'; ++p) ; - if (!strncmp(p, "dup", 3)) { - for (p += 3; *p == ' ' || *p == '\t'; ++p) ; - for (p2 = p; *p2 >= '0' && *p2 <= '9'; ++p2) ; - if (*p2) { - c = *p2; // store it so we can recover it after atoi - *p2 = '\0'; // terminate p so atoi works - code = atoi(p); - *p2 = c; - if (code == 8 && *p2 == '#') { - code = 0; - for (++p2; *p2 >= '0' && *p2 <= '7'; ++p2) { - code = code * 8 + (*p2 - '0'); - } - } - if (likely(code < 256 && code >= 0)) { - for (p = p2; *p == ' ' || *p == '\t'; ++p) ; - if (*p == '/') { - ++p; - for (p2 = p; *p2 && *p2 != ' ' && *p2 != '\t'; ++p2) ; - c = *p2; // store it so we can recover it after copyString - *p2 = '\0'; // terminate p so copyString works - encoding[code] = copyString(p); - *p2 = c; - p = p2; - for (; *p == ' ' || *p == '\t'; ++p); // eat spaces between string and put - if (!strncmp(p, "put", 3)) { - // eat put and spaces and newlines after put - for (p += 3; *p == ' ' || *p == '\t' || *p == '\n' || *p == '\r'; ++p); - if (*p) - { - // there is still something after the definition - // there might be another definition in this line - // so move line1 to the end of our parsing - // so we start in the potential next definition in the next loop - line1 = &line[p - buf]; - } - } else { - error(-1, "FoFiType1::parse no put after dup"); - } - } - } - } - } else { - if (strtok_r(buf, " \t", &tokptr) && - (p = strtok_r(NULL, " \t\n\r", &tokptr)) && !strcmp(p, "def")) { - break; - } - } - } - //~ check for getinterval/putinterval junk - - } else { - line = getNextLine(line); - } - } - - parsed = gTrue; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1.h b/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1.h deleted file mode 100644 index 85e67b1c82b..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1.h +++ /dev/null @@ -1,57 +0,0 @@ -//======================================================================== -// -// FoFiType1.h -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef FOFITYPE1_H -#define FOFITYPE1_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include "FoFiBase.h" - -//------------------------------------------------------------------------ -// FoFiType1 -//------------------------------------------------------------------------ - -class FoFiType1: public FoFiBase { -public: - - // Create a FoFiType1 object from a memory buffer. - static FoFiType1 *make(char *fileA, int lenA); - - // Create a FoFiType1 object from a file on disk. - static FoFiType1 *load(char *fileName); - - virtual ~FoFiType1(); - - // Return the font name. - char *getName(); - - // Return the encoding, as an array of 256 names (any of which may - // be NULL). - char **getEncoding(); - - // Write a version of the Type 1 font file with a new encoding. - void writeEncoded(char **newEncoding, - FoFiOutputFunc outputFunc, void *outputStream); - -private: - - FoFiType1(char *fileA, int lenA, GBool freeFileDataA); - - char *getNextLine(char *line); - void parse(); - - char *name; - char **encoding; - GBool parsed; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1C.cc b/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1C.cc deleted file mode 100644 index 9c5b10cf433..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1C.cc +++ /dev/null @@ -1,2620 +0,0 @@ -//======================================================================== -// -// FoFiType1C.cc -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2009, 2010 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <string.h> -#include <math.h> -#include "goo/gmem.h" -#include "goo/gstrtod.h" -#include "goo/GooString.h" -#include "FoFiEncodings.h" -#include "FoFiType1C.h" - -//------------------------------------------------------------------------ - -static char hexChars[17] = "0123456789ABCDEF"; - -//------------------------------------------------------------------------ -// FoFiType1C -//------------------------------------------------------------------------ - -FoFiType1C *FoFiType1C::make(char *fileA, int lenA) { - FoFiType1C *ff; - - ff = new FoFiType1C(fileA, lenA, gFalse); - if (!ff->parse()) { - delete ff; - return NULL; - } - return ff; -} - -FoFiType1C *FoFiType1C::load(char *fileName) { - FoFiType1C *ff; - char *fileA; - int lenA; - - if (!(fileA = FoFiBase::readFile(fileName, &lenA))) { - return NULL; - } - ff = new FoFiType1C(fileA, lenA, gTrue); - if (!ff->parse()) { - delete ff; - return NULL; - } - return ff; -} - -FoFiType1C::FoFiType1C(char *fileA, int lenA, GBool freeFileDataA): - FoFiBase(fileA, lenA, freeFileDataA) -{ - name = NULL; - encoding = NULL; - privateDicts = NULL; - fdSelect = NULL; - charset = NULL; -} - -FoFiType1C::~FoFiType1C() { - int i; - - if (name) { - delete name; - } - if (encoding && - encoding != fofiType1StandardEncoding && - encoding != fofiType1ExpertEncoding) { - for (i = 0; i < 256; ++i) { - gfree(encoding[i]); - } - gfree(encoding); - } - if (privateDicts) { - gfree(privateDicts); - } - if (fdSelect) { - gfree(fdSelect); - } - if (charset && - charset != fofiType1CISOAdobeCharset && - charset != fofiType1CExpertCharset && - charset != fofiType1CExpertSubsetCharset) { - gfree(charset); - } -} - -char *FoFiType1C::getName() { - return name ? name->getCString() : (char *)NULL; -} - -char **FoFiType1C::getEncoding() { - return encoding; -} - -Gushort *FoFiType1C::getCIDToGIDMap(int *nCIDs) { - Gushort *map; - int n, i; - - // a CID font's top dict has ROS as the first operator - if (topDict.firstOp != 0x0c1e) { - *nCIDs = 0; - return NULL; - } - - // in a CID font, the charset data is the GID-to-CID mapping, so all - // we have to do is reverse it - n = 0; - for (i = 0; i < nGlyphs; ++i) { - if (charset[i] > n) { - n = charset[i]; - } - } - ++n; - map = (Gushort *)gmallocn(n, sizeof(Gushort)); - memset(map, 0, n * sizeof(Gushort)); - for (i = 0; i < nGlyphs; ++i) { - map[charset[i]] = i; - } - *nCIDs = n; - return map; -} - -void FoFiType1C::convertToType1(char *psName, char **newEncoding, GBool ascii, - FoFiOutputFunc outputFunc, - void *outputStream) { - int psNameLen; - Type1CEexecBuf eb; - Type1CIndex subrIdx; - Type1CIndexVal val; - GooString *buf; - char buf2[256]; - char **enc; - GBool ok; - int i; - - if (psName) { - psNameLen = strlen(psName); - } else { - psName = name->getCString(); - psNameLen = name->getLength(); - } - - // write header and font dictionary, up to encoding - ok = gTrue; - (*outputFunc)(outputStream, "%!FontType1-1.0: ", 17); - (*outputFunc)(outputStream, psName, psNameLen); - if (topDict.versionSID != 0) { - getString(topDict.versionSID, buf2, &ok); - (*outputFunc)(outputStream, buf2, strlen(buf2)); - } - (*outputFunc)(outputStream, "\n", 1); - // the dictionary needs room for 12 entries: the following 9, plus - // Private and CharStrings (in the eexec section) and FID (which is - // added by definefont) - (*outputFunc)(outputStream, "12 dict begin\n", 14); - (*outputFunc)(outputStream, "/FontInfo 10 dict dup begin\n", 28); - if (topDict.versionSID != 0) { - (*outputFunc)(outputStream, "/version (", 10); - (*outputFunc)(outputStream, buf2, strlen(buf2)); - (*outputFunc)(outputStream, ") readonly def\n", 15); - } - if (topDict.noticeSID != 0) { - getString(topDict.noticeSID, buf2, &ok); - (*outputFunc)(outputStream, "/Notice (", 9); - (*outputFunc)(outputStream, buf2, strlen(buf2)); - (*outputFunc)(outputStream, ") readonly def\n", 15); - } - if (topDict.copyrightSID != 0) { - getString(topDict.copyrightSID, buf2, &ok); - (*outputFunc)(outputStream, "/Copyright (", 12); - (*outputFunc)(outputStream, buf2, strlen(buf2)); - (*outputFunc)(outputStream, ") readonly def\n", 15); - } - if (topDict.fullNameSID != 0) { - getString(topDict.fullNameSID, buf2, &ok); - (*outputFunc)(outputStream, "/FullName (", 11); - (*outputFunc)(outputStream, buf2, strlen(buf2)); - (*outputFunc)(outputStream, ") readonly def\n", 15); - } - if (topDict.familyNameSID != 0) { - getString(topDict.familyNameSID, buf2, &ok); - (*outputFunc)(outputStream, "/FamilyName (", 13); - (*outputFunc)(outputStream, buf2, strlen(buf2)); - (*outputFunc)(outputStream, ") readonly def\n", 15); - } - if (topDict.weightSID != 0) { - getString(topDict.weightSID, buf2, &ok); - (*outputFunc)(outputStream, "/Weight (", 9); - (*outputFunc)(outputStream, buf2, strlen(buf2)); - (*outputFunc)(outputStream, ") readonly def\n", 15); - } - if (topDict.isFixedPitch) { - (*outputFunc)(outputStream, "/isFixedPitch true def\n", 23); - } else { - (*outputFunc)(outputStream, "/isFixedPitch false def\n", 24); - } - buf = GooString::format("/ItalicAngle {0:.4g} def\n", topDict.italicAngle); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GooString::format("/UnderlinePosition {0:.4g} def\n", - topDict.underlinePosition); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GooString::format("/UnderlineThickness {0:.4g} def\n", - topDict.underlineThickness); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "end readonly def\n", 17); - (*outputFunc)(outputStream, "/FontName /", 11); - (*outputFunc)(outputStream, psName, psNameLen); - (*outputFunc)(outputStream, " def\n", 5); - buf = GooString::format("/PaintType {0:d} def\n", topDict.paintType); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "/FontType 1 def\n", 16); - buf = GooString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] readonly def\n", - topDict.fontMatrix[0], topDict.fontMatrix[1], - topDict.fontMatrix[2], topDict.fontMatrix[3], - topDict.fontMatrix[4], topDict.fontMatrix[5]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GooString::format("/FontBBox [{0:.4g} {1:.4g} {2:.4g} {3:.4g}] readonly def\n", - topDict.fontBBox[0], topDict.fontBBox[1], - topDict.fontBBox[2], topDict.fontBBox[3]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GooString::format("/StrokeWidth {0:.4g} def\n", topDict.strokeWidth); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - if (topDict.uniqueID != 0) { - buf = GooString::format("/UniqueID {0:d} def\n", topDict.uniqueID); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - - // write the encoding - (*outputFunc)(outputStream, "/Encoding ", 10); - if (!newEncoding && encoding == fofiType1StandardEncoding) { - (*outputFunc)(outputStream, "StandardEncoding def\n", 21); - } else { - (*outputFunc)(outputStream, "256 array\n", 10); - (*outputFunc)(outputStream, - "0 1 255 {1 index exch /.notdef put} for\n", 40); - enc = newEncoding ? newEncoding : encoding; - for (i = 0; i < 256; ++i) { - if (enc[i]) { - buf = GooString::format("dup {0:d} /{1:s} put\n", i, enc[i]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - } - (*outputFunc)(outputStream, "readonly def\n", 13); - } - (*outputFunc)(outputStream, "currentdict end\n", 16); - - // start the binary section - (*outputFunc)(outputStream, "currentfile eexec\n", 18); - eb.outputFunc = outputFunc; - eb.outputStream = outputStream; - eb.ascii = ascii; - eb.r1 = 55665; - eb.line = 0; - - // write the private dictionary - eexecWrite(&eb, "\x83\xca\x73\xd5"); - eexecWrite(&eb, "dup /Private 32 dict dup begin\n"); - eexecWrite(&eb, "/RD {string currentfile exch readstring pop}" - " executeonly def\n"); - eexecWrite(&eb, "/ND {noaccess def} executeonly def\n"); - eexecWrite(&eb, "/NP {noaccess put} executeonly def\n"); - eexecWrite(&eb, "/MinFeature {16 16} def\n"); - eexecWrite(&eb, "/password 5839 def\n"); - if (privateDicts[0].nBlueValues) { - eexecWrite(&eb, "/BlueValues ["); - for (i = 0; i < privateDicts[0].nBlueValues; ++i) { - buf = GooString::format("{0:s}{1:d}", - i > 0 ? " " : "", privateDicts[0].blueValues[i]); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - eexecWrite(&eb, "] def\n"); - } - if (privateDicts[0].nOtherBlues) { - eexecWrite(&eb, "/OtherBlues ["); - for (i = 0; i < privateDicts[0].nOtherBlues; ++i) { - buf = GooString::format("{0:s}{1:d}", - i > 0 ? " " : "", privateDicts[0].otherBlues[i]); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - eexecWrite(&eb, "] def\n"); - } - if (privateDicts[0].nFamilyBlues) { - eexecWrite(&eb, "/FamilyBlues ["); - for (i = 0; i < privateDicts[0].nFamilyBlues; ++i) { - buf = GooString::format("{0:s}{1:d}", - i > 0 ? " " : "", privateDicts[0].familyBlues[i]); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - eexecWrite(&eb, "] def\n"); - } - if (privateDicts[0].nFamilyOtherBlues) { - eexecWrite(&eb, "/FamilyOtherBlues ["); - for (i = 0; i < privateDicts[0].nFamilyOtherBlues; ++i) { - buf = GooString::format("{0:s}{1:d}", i > 0 ? " " : "", - privateDicts[0].familyOtherBlues[i]); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - eexecWrite(&eb, "] def\n"); - } - if (privateDicts[0].blueScale != 0.039625) { - buf = GooString::format("/BlueScale {0:.4g} def\n", - privateDicts[0].blueScale); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].blueShift != 7) { - buf = GooString::format("/BlueShift {0:d} def\n", privateDicts[0].blueShift); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].blueFuzz != 1) { - buf = GooString::format("/BlueFuzz {0:d} def\n", privateDicts[0].blueFuzz); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].hasStdHW) { - buf = GooString::format("/StdHW [{0:.4g}] def\n", privateDicts[0].stdHW); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].hasStdVW) { - buf = GooString::format("/StdVW [{0:.4g}] def\n", privateDicts[0].stdVW); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].nStemSnapH) { - eexecWrite(&eb, "/StemSnapH ["); - for (i = 0; i < privateDicts[0].nStemSnapH; ++i) { - buf = GooString::format("{0:s}{1:.4g}", - i > 0 ? " " : "", privateDicts[0].stemSnapH[i]); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - eexecWrite(&eb, "] def\n"); - } - if (privateDicts[0].nStemSnapV) { - eexecWrite(&eb, "/StemSnapV ["); - for (i = 0; i < privateDicts[0].nStemSnapV; ++i) { - buf = GooString::format("{0:s}{1:.4g}", - i > 0 ? " " : "", privateDicts[0].stemSnapV[i]); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - eexecWrite(&eb, "] def\n"); - } - if (privateDicts[0].hasForceBold) { - buf = GooString::format("/ForceBold {0:s} def\n", - privateDicts[0].forceBold ? "true" : "false"); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].forceBoldThreshold != 0) { - buf = GooString::format("/ForceBoldThreshold {0:.4g} def\n", - privateDicts[0].forceBoldThreshold); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].languageGroup != 0) { - buf = GooString::format("/LanguageGroup {0:d} def\n", - privateDicts[0].languageGroup); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].expansionFactor != 0.06) { - buf = GooString::format("/ExpansionFactor {0:.4g} def\n", - privateDicts[0].expansionFactor); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - - // set up subroutines - ok = gTrue; - getIndex(privateDicts[0].subrsOffset, &subrIdx, &ok); - if (!ok) { - subrIdx.pos = -1; - } - - // write the CharStrings - buf = GooString::format("2 index /CharStrings {0:d} dict dup begin\n", - nGlyphs); - eexecWrite(&eb, buf->getCString()); - delete buf; - for (i = 0; i < nGlyphs; ++i) { - ok = gTrue; - getIndexVal(&charStringsIdx, i, &val, &ok); - if (ok) { - getString(charset[i], buf2, &ok); - if (ok) { - eexecCvtGlyph(&eb, buf2, val.pos, val.len, &subrIdx, &privateDicts[0]); - } - } - } - eexecWrite(&eb, "end\n"); - eexecWrite(&eb, "end\n"); - eexecWrite(&eb, "readonly put\n"); - eexecWrite(&eb, "noaccess put\n"); - eexecWrite(&eb, "dup /FontName get exch definefont pop\n"); - eexecWrite(&eb, "mark currentfile closefile\n"); - - // trailer - if (ascii && eb.line > 0) { - (*outputFunc)(outputStream, "\n", 1); - } - for (i = 0; i < 8; ++i) { - (*outputFunc)(outputStream, "0000000000000000000000000000000000000000000000000000000000000000\n", 65); - } - (*outputFunc)(outputStream, "cleartomark\n", 12); -} - -void FoFiType1C::convertToCIDType0(char *psName, - FoFiOutputFunc outputFunc, - void *outputStream) { - int *cidMap; - GooString *charStrings; - int *charStringOffsets; - Type1CIndex subrIdx; - Type1CIndexVal val; - int nCIDs, gdBytes; - GooString *buf; - char buf2[256]; - GBool ok; - int gid, offset, n, i, j, k; - - // compute the CID count and build the CID-to-GID mapping - nCIDs = 0; - for (i = 0; i < nGlyphs; ++i) { - if (charset[i] >= nCIDs) { - nCIDs = charset[i] + 1; - } - } - cidMap = (int *)gmallocn(nCIDs, sizeof(int)); - for (i = 0; i < nCIDs; ++i) { - cidMap[i] = -1; - } - for (i = 0; i < nGlyphs; ++i) { - cidMap[charset[i]] = i; - } - - // build the charstrings - charStrings = new GooString(); - charStringOffsets = (int *)gmallocn(nCIDs + 1, sizeof(int)); - for (i = 0; i < nCIDs; ++i) { - charStringOffsets[i] = charStrings->getLength(); - if ((gid = cidMap[i]) >= 0) { - ok = gTrue; - getIndexVal(&charStringsIdx, gid, &val, &ok); - if (ok) { - getIndex(privateDicts[fdSelect[gid]].subrsOffset, &subrIdx, &ok); - if (!ok) { - subrIdx.pos = -1; - } - cvtGlyph(val.pos, val.len, charStrings, - &subrIdx, &privateDicts[fdSelect[gid]], gTrue); - } - } - } - charStringOffsets[nCIDs] = charStrings->getLength(); - - // compute gdBytes = number of bytes needed for charstring offsets - // (offset size needs to account for the charstring offset table, - // with a worst case of five bytes per entry, plus the charstrings - // themselves) - i = (nCIDs + 1) * 5 + charStrings->getLength(); - if (i < 0x100) { - gdBytes = 1; - } else if (i < 0x10000) { - gdBytes = 2; - } else if (i < 0x1000000) { - gdBytes = 3; - } else { - gdBytes = 4; - } - - // begin the font dictionary - (*outputFunc)(outputStream, "/CIDInit /ProcSet findresource begin\n", 37); - (*outputFunc)(outputStream, "20 dict begin\n", 14); - (*outputFunc)(outputStream, "/CIDFontName /", 14); - (*outputFunc)(outputStream, psName, strlen(psName)); - (*outputFunc)(outputStream, " def\n", 5); - (*outputFunc)(outputStream, "/CIDFontType 0 def\n", 19); - (*outputFunc)(outputStream, "/CIDSystemInfo 3 dict dup begin\n", 32); - if (topDict.registrySID > 0 && topDict.orderingSID > 0) { - ok = gTrue; - getString(topDict.registrySID, buf2, &ok); - if (ok) { - (*outputFunc)(outputStream, " /Registry (", 13); - (*outputFunc)(outputStream, buf2, strlen(buf2)); - (*outputFunc)(outputStream, ") def\n", 6); - } - ok = gTrue; - getString(topDict.orderingSID, buf2, &ok); - if (ok) { - (*outputFunc)(outputStream, " /Ordering (", 13); - (*outputFunc)(outputStream, buf2, strlen(buf2)); - (*outputFunc)(outputStream, ") def\n", 6); - } - } else { - (*outputFunc)(outputStream, " /Registry (Adobe) def\n", 24); - (*outputFunc)(outputStream, " /Ordering (Identity) def\n", 27); - } - buf = GooString::format(" /Supplement {0:d} def\n", topDict.supplement); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "end def\n", 8); - if (topDict.hasFontMatrix) { - buf = GooString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n", - topDict.fontMatrix[0], topDict.fontMatrix[1], - topDict.fontMatrix[2], topDict.fontMatrix[3], - topDict.fontMatrix[4], topDict.fontMatrix[5]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } else if (privateDicts[0].hasFontMatrix) { - (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); - } else { - (*outputFunc)(outputStream, - "/FontMatrix [0.001 0 0 0.001 0 0] def\n", 38); - } - buf = GooString::format("/FontBBox [{0:.4g} {1:.4g} {2:.4g} {3:.4g}] def\n", - topDict.fontBBox[0], topDict.fontBBox[1], - topDict.fontBBox[2], topDict.fontBBox[3]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "/FontInfo 1 dict dup begin\n", 27); - (*outputFunc)(outputStream, " /FSType 8 def\n", 16); - (*outputFunc)(outputStream, "end def\n", 8); - - // CIDFont-specific entries - buf = GooString::format("/CIDCount {0:d} def\n", nCIDs); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "/FDBytes 1 def\n", 15); - buf = GooString::format("/GDBytes {0:d} def\n", gdBytes); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "/CIDMapOffset 0 def\n", 20); - if (topDict.paintType != 0) { - buf = GooString::format("/PaintType {0:d} def\n", topDict.paintType); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GooString::format("/StrokeWidth {0:.4g} def\n", topDict.strokeWidth); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - - // FDArray entry - buf = GooString::format("/FDArray {0:d} array\n", nFDs); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - for (i = 0; i < nFDs; ++i) { - buf = GooString::format("dup {0:d} 10 dict begin\n", i); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "/FontType 1 def\n", 16); - if (privateDicts[i].hasFontMatrix) { - buf = GooString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n", - privateDicts[i].fontMatrix[0], - privateDicts[i].fontMatrix[1], - privateDicts[i].fontMatrix[2], - privateDicts[i].fontMatrix[3], - privateDicts[i].fontMatrix[4], - privateDicts[i].fontMatrix[5]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } else { - (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); - } - buf = GooString::format("/PaintType {0:d} def\n", topDict.paintType); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "/Private 32 dict begin\n", 23); - if (privateDicts[i].nBlueValues) { - (*outputFunc)(outputStream, "/BlueValues [", 13); - for (j = 0; j < privateDicts[i].nBlueValues; ++j) { - buf = GooString::format("{0:s}{1:d}", - j > 0 ? " " : "", privateDicts[i].blueValues[j]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "] def\n", 6); - } - if (privateDicts[i].nOtherBlues) { - (*outputFunc)(outputStream, "/OtherBlues [", 13); - for (j = 0; j < privateDicts[i].nOtherBlues; ++j) { - buf = GooString::format("{0:s}{1:d}", - j > 0 ? " " : "", privateDicts[i].otherBlues[j]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "] def\n", 6); - } - if (privateDicts[i].nFamilyBlues) { - (*outputFunc)(outputStream, "/FamilyBlues [", 14); - for (j = 0; j < privateDicts[i].nFamilyBlues; ++j) { - buf = GooString::format("{0:s}{1:d}", - j > 0 ? " " : "", - privateDicts[i].familyBlues[j]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "] def\n", 6); - } - if (privateDicts[i].nFamilyOtherBlues) { - (*outputFunc)(outputStream, "/FamilyOtherBlues [", 19); - for (j = 0; j < privateDicts[i].nFamilyOtherBlues; ++j) { - buf = GooString::format("{0:s}{1:d}", j > 0 ? " " : "", - privateDicts[i].familyOtherBlues[j]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "] def\n", 6); - } - if (privateDicts[i].blueScale != 0.039625) { - buf = GooString::format("/BlueScale {0:.4g} def\n", - privateDicts[i].blueScale); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (privateDicts[i].blueShift != 7) { - buf = GooString::format("/BlueShift {0:d} def\n", - privateDicts[i].blueShift); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (privateDicts[i].blueFuzz != 1) { - buf = GooString::format("/BlueFuzz {0:d} def\n", privateDicts[i].blueFuzz); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (privateDicts[i].hasStdHW) { - buf = GooString::format("/StdHW [{0:.4g}] def\n", privateDicts[i].stdHW); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (privateDicts[i].hasStdVW) { - buf = GooString::format("/StdVW [{0:.4g}] def\n", privateDicts[i].stdVW); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (privateDicts[i].nStemSnapH) { - (*outputFunc)(outputStream, "/StemSnapH [", 12); - for (j = 0; j < privateDicts[i].nStemSnapH; ++j) { - buf = GooString::format("{0:s}{1:.4g}", - j > 0 ? " " : "", privateDicts[i].stemSnapH[j]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "] def\n", 6); - } - if (privateDicts[i].nStemSnapV) { - (*outputFunc)(outputStream, "/StemSnapV [", 12); - for (j = 0; j < privateDicts[i].nStemSnapV; ++j) { - buf = GooString::format("{0:s}{1:.4g}", - j > 0 ? " " : "", privateDicts[i].stemSnapV[j]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "] def\n", 6); - } - if (privateDicts[i].hasForceBold) { - buf = GooString::format("/ForceBold {0:s} def\n", - privateDicts[i].forceBold ? "true" : "false"); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (privateDicts[i].forceBoldThreshold != 0) { - buf = GooString::format("/ForceBoldThreshold {0:.4g} def\n", - privateDicts[i].forceBoldThreshold); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (privateDicts[i].languageGroup != 0) { - buf = GooString::format("/LanguageGroup {0:d} def\n", - privateDicts[i].languageGroup); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (privateDicts[i].expansionFactor != 0.06) { - buf = GooString::format("/ExpansionFactor {0:.4g} def\n", - privateDicts[i].expansionFactor); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "currentdict end def\n", 20); - (*outputFunc)(outputStream, "currentdict end put\n", 20); - } - (*outputFunc)(outputStream, "def\n", 4); - - // start the binary section - offset = (nCIDs + 1) * (1 + gdBytes); - buf = GooString::format("(Hex) {0:d} StartData\n", - offset + charStrings->getLength()); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - - // write the charstring offset (CIDMap) table - for (i = 0; i <= nCIDs; i += 6) { - for (j = 0; j < 6 && i+j <= nCIDs; ++j) { - if (i+j < nCIDs && cidMap[i+j] >= 0) { - buf2[0] = (char)fdSelect[cidMap[i+j]]; - } else { - buf2[0] = (char)0; - } - n = offset + charStringOffsets[i+j]; - for (k = gdBytes; k >= 1; --k) { - buf2[k] = (char)(n & 0xff); - n >>= 8; - } - for (k = 0; k <= gdBytes; ++k) { - buf = GooString::format("{0:02x}", buf2[k] & 0xff); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - } - (*outputFunc)(outputStream, "\n", 1); - } - - // write the charstring data - n = charStrings->getLength(); - for (i = 0; i < n; i += 32) { - for (j = 0; j < 32 && i+j < n; ++j) { - buf = GooString::format("{0:02x}", charStrings->getChar(i+j) & 0xff); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (i + 32 >= n) { - (*outputFunc)(outputStream, ">", 1); - } - (*outputFunc)(outputStream, "\n", 1); - } - - gfree(charStringOffsets); - delete charStrings; - gfree(cidMap); -} - -void FoFiType1C::convertToType0(char *psName, - FoFiOutputFunc outputFunc, - void *outputStream) { - int *cidMap; - Type1CIndex subrIdx; - Type1CIndexVal val; - int nCIDs; - GooString *buf; - Type1CEexecBuf eb; - GBool ok; - int fd, i, j, k; - - // compute the CID count and build the CID-to-GID mapping - nCIDs = 0; - for (i = 0; i < nGlyphs; ++i) { - if (charset[i] >= nCIDs) { - nCIDs = charset[i] + 1; - } - } - cidMap = (int *)gmallocn(nCIDs, sizeof(int)); - for (i = 0; i < nCIDs; ++i) { - cidMap[i] = -1; - } - for (i = 0; i < nGlyphs; ++i) { - cidMap[charset[i]] = i; - } - - // write the descendant Type 1 fonts - for (i = 0; i < nCIDs; i += 256) { - - //~ this assumes that all CIDs in this block have the same FD -- - //~ to handle multiple FDs correctly, need to somehow divide the - //~ font up by FD; as a kludge we ignore CID 0, which is .notdef - fd = 0; - if (fdSelect != NULL) { - for (j = i==0 ? 1 : 0; j < 256 && i+j < nCIDs; ++j) { - if (cidMap[i+j] >= 0) { - fd = fdSelect[cidMap[i+j]]; - break; - } - } - } - - // font dictionary (unencrypted section) - (*outputFunc)(outputStream, "16 dict begin\n", 14); - (*outputFunc)(outputStream, "/FontName /", 11); - (*outputFunc)(outputStream, psName, strlen(psName)); - buf = GooString::format("_{0:02x} def\n", i >> 8); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "/FontType 1 def\n", 16); - if (privateDicts[fd].hasFontMatrix) { - buf = GooString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n", - privateDicts[fd].fontMatrix[0], - privateDicts[fd].fontMatrix[1], - privateDicts[fd].fontMatrix[2], - privateDicts[fd].fontMatrix[3], - privateDicts[fd].fontMatrix[4], - privateDicts[fd].fontMatrix[5]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } else if (topDict.hasFontMatrix) { - (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); - } else { - (*outputFunc)(outputStream, - "/FontMatrix [0.001 0 0 0.001 0 0] def\n", 38); - } - buf = GooString::format("/FontBBox [{0:.4g} {1:.4g} {2:.4g} {3:.4g}] def\n", - topDict.fontBBox[0], topDict.fontBBox[1], - topDict.fontBBox[2], topDict.fontBBox[3]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GooString::format("/PaintType {0:d} def\n", topDict.paintType); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - if (topDict.paintType != 0) { - buf = GooString::format("/StrokeWidth {0:.4g} def\n", topDict.strokeWidth); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "/Encoding 256 array\n", 20); - for (j = 0; j < 256 && i+j < nCIDs; ++j) { - buf = GooString::format("dup {0:d} /c{1:02x} put\n", j, j); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (j < 256) { - buf = GooString::format("{0:d} 1 255 {{ 1 index exch /.notdef put }} for\n", - j); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "readonly def\n", 13); - (*outputFunc)(outputStream, "currentdict end\n", 16); - - // start the binary section - (*outputFunc)(outputStream, "currentfile eexec\n", 18); - eb.outputFunc = outputFunc; - eb.outputStream = outputStream; - eb.ascii = gTrue; - eb.r1 = 55665; - eb.line = 0; - - // start the private dictionary - eexecWrite(&eb, "\x83\xca\x73\xd5"); - eexecWrite(&eb, "dup /Private 32 dict dup begin\n"); - eexecWrite(&eb, "/RD {string currentfile exch readstring pop}" - " executeonly def\n"); - eexecWrite(&eb, "/ND {noaccess def} executeonly def\n"); - eexecWrite(&eb, "/NP {noaccess put} executeonly def\n"); - eexecWrite(&eb, "/MinFeature {16 16} def\n"); - eexecWrite(&eb, "/password 5839 def\n"); - if (privateDicts[fd].nBlueValues) { - eexecWrite(&eb, "/BlueValues ["); - for (k = 0; k < privateDicts[fd].nBlueValues; ++k) { - buf = GooString::format("{0:s}{1:d}", - k > 0 ? " " : "", - privateDicts[fd].blueValues[k]); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - eexecWrite(&eb, "] def\n"); - } - if (privateDicts[fd].nOtherBlues) { - eexecWrite(&eb, "/OtherBlues ["); - for (k = 0; k < privateDicts[fd].nOtherBlues; ++k) { - buf = GooString::format("{0:s}{1:d}", - k > 0 ? " " : "", - privateDicts[fd].otherBlues[k]); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - eexecWrite(&eb, "] def\n"); - } - if (privateDicts[fd].nFamilyBlues) { - eexecWrite(&eb, "/FamilyBlues ["); - for (k = 0; k < privateDicts[fd].nFamilyBlues; ++k) { - buf = GooString::format("{0:s}{1:d}", k > 0 ? " " : "", - privateDicts[fd].familyBlues[k]); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - eexecWrite(&eb, "] def\n"); - } - if (privateDicts[fd].nFamilyOtherBlues) { - eexecWrite(&eb, "/FamilyOtherBlues ["); - for (k = 0; k < privateDicts[fd].nFamilyOtherBlues; ++k) { - buf = GooString::format("{0:s}{1:d}", k > 0 ? " " : "", - privateDicts[fd].familyOtherBlues[k]); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - eexecWrite(&eb, "] def\n"); - } - if (privateDicts[fd].blueScale != 0.039625) { - buf = GooString::format("/BlueScale {0:.4g} def\n", - privateDicts[fd].blueScale); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].blueShift != 7) { - buf = GooString::format("/BlueShift {0:d} def\n", - privateDicts[fd].blueShift); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].blueFuzz != 1) { - buf = GooString::format("/BlueFuzz {0:d} def\n", - privateDicts[fd].blueFuzz); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].hasStdHW) { - buf = GooString::format("/StdHW [{0:.4g}] def\n", privateDicts[fd].stdHW); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].hasStdVW) { - buf = GooString::format("/StdVW [{0:.4g}] def\n", privateDicts[fd].stdVW); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].nStemSnapH) { - eexecWrite(&eb, "/StemSnapH ["); - for (k = 0; k < privateDicts[fd].nStemSnapH; ++k) { - buf = GooString::format("{0:s}{1:.4g}", - k > 0 ? " " : "", privateDicts[fd].stemSnapH[k]); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - eexecWrite(&eb, "] def\n"); - } - if (privateDicts[fd].nStemSnapV) { - eexecWrite(&eb, "/StemSnapV ["); - for (k = 0; k < privateDicts[fd].nStemSnapV; ++k) { - buf = GooString::format("{0:s}{1:.4g}", - k > 0 ? " " : "", privateDicts[fd].stemSnapV[k]); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - eexecWrite(&eb, "] def\n"); - } - if (privateDicts[fd].hasForceBold) { - buf = GooString::format("/ForceBold {0:s} def\n", - privateDicts[fd].forceBold ? "true" : "false"); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].forceBoldThreshold != 0) { - buf = GooString::format("/ForceBoldThreshold {0:.4g} def\n", - privateDicts[fd].forceBoldThreshold); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].languageGroup != 0) { - buf = GooString::format("/LanguageGroup {0:d} def\n", - privateDicts[fd].languageGroup); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].expansionFactor != 0.06) { - buf = GooString::format("/ExpansionFactor {0:.4g} def\n", - privateDicts[fd].expansionFactor); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - - // set up the subroutines - ok = gTrue; - getIndex(privateDicts[fd].subrsOffset, &subrIdx, &ok); - if (!ok) { - subrIdx.pos = -1; - } - - // start the CharStrings - eexecWrite(&eb, "2 index /CharStrings 256 dict dup begin\n"); - - // write the .notdef CharString - ok = gTrue; - getIndexVal(&charStringsIdx, 0, &val, &ok); - if (ok) { - eexecCvtGlyph(&eb, ".notdef", val.pos, val.len, - &subrIdx, &privateDicts[fd]); - } - - // write the CharStrings - for (j = 0; j < 256 && i+j < nCIDs; ++j) { - if (cidMap[i+j] >= 0) { - ok = gTrue; - getIndexVal(&charStringsIdx, cidMap[i+j], &val, &ok); - if (ok) { - buf = GooString::format("c{0:02x}", j); - eexecCvtGlyph(&eb, buf->getCString(), val.pos, val.len, - &subrIdx, &privateDicts[fd]); - delete buf; - } - } - } - eexecWrite(&eb, "end\n"); - eexecWrite(&eb, "end\n"); - eexecWrite(&eb, "readonly put\n"); - eexecWrite(&eb, "noaccess put\n"); - eexecWrite(&eb, "dup /FontName get exch definefont pop\n"); - eexecWrite(&eb, "mark currentfile closefile\n"); - - // trailer - if (eb.line > 0) { - (*outputFunc)(outputStream, "\n", 1); - } - for (j = 0; j < 8; ++j) { - (*outputFunc)(outputStream, "0000000000000000000000000000000000000000000000000000000000000000\n", 65); - } - (*outputFunc)(outputStream, "cleartomark\n", 12); - } - - // write the Type 0 parent font - (*outputFunc)(outputStream, "16 dict begin\n", 14); - (*outputFunc)(outputStream, "/FontName /", 11); - (*outputFunc)(outputStream, psName, strlen(psName)); - (*outputFunc)(outputStream, " def\n", 5); - (*outputFunc)(outputStream, "/FontType 0 def\n", 16); - if (topDict.hasFontMatrix) { - buf = GooString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n", - topDict.fontMatrix[0], topDict.fontMatrix[1], - topDict.fontMatrix[2], topDict.fontMatrix[3], - topDict.fontMatrix[4], topDict.fontMatrix[5]); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } else { - (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); - } - (*outputFunc)(outputStream, "/FMapType 2 def\n", 16); - (*outputFunc)(outputStream, "/Encoding [\n", 12); - for (i = 0; i < nCIDs; i += 256) { - buf = GooString::format("{0:d}\n", i >> 8); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "] def\n", 6); - (*outputFunc)(outputStream, "/FDepVector [\n", 14); - for (i = 0; i < nCIDs; i += 256) { - (*outputFunc)(outputStream, "/", 1); - (*outputFunc)(outputStream, psName, strlen(psName)); - buf = GooString::format("_{0:02x} findfont\n", i >> 8); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - (*outputFunc)(outputStream, "] def\n", 6); - (*outputFunc)(outputStream, "FontName currentdict end definefont pop\n", 40); - - gfree(cidMap); -} - -void FoFiType1C::eexecCvtGlyph(Type1CEexecBuf *eb, char *glyphName, - int offset, int nBytes, - Type1CIndex *subrIdx, - Type1CPrivateDict *pDict) { - GooString *buf; - GooString *charBuf; - - // generate the charstring - charBuf = new GooString(); - cvtGlyph(offset, nBytes, charBuf, subrIdx, pDict, gTrue); - - buf = GooString::format("/{0:s} {1:d} RD ", glyphName, charBuf->getLength()); - eexecWrite(eb, buf->getCString()); - delete buf; - eexecWriteCharstring(eb, (Guchar *)charBuf->getCString(), - charBuf->getLength()); - eexecWrite(eb, " ND\n"); - - delete charBuf; -} - -void FoFiType1C::cvtGlyph(int offset, int nBytes, GooString *charBuf, - Type1CIndex *subrIdx, Type1CPrivateDict *pDict, - GBool top) { - Type1CIndexVal val; - GBool ok, dFP; - double d, dx, dy; - Gushort r2; - Guchar byte; - int pos, subrBias, start, i, k; - - start = charBuf->getLength(); - if (top) { - charBuf->append((char)73); - charBuf->append((char)58); - charBuf->append((char)147); - charBuf->append((char)134); - nOps = 0; - nHints = 0; - firstOp = gTrue; - openPath = gFalse; - } - - pos = offset; - while (pos < offset + nBytes) { - ok = gTrue; - pos = getOp(pos, gTrue, &ok); - if (!ok) { - break; - } - if (!ops[nOps - 1].isNum) { - --nOps; // drop the operator - switch (ops[nOps].op) { - case 0x0001: // hstem - if (firstOp) { - cvtGlyphWidth(nOps & 1, charBuf, pDict); - firstOp = gFalse; - } - if (nOps & 1) { - //~ error(-1, "Wrong number of args (%d) to Type 2 hstem", nOps); - } - d = 0; - dFP = gFalse; - for (k = 0; k < nOps; k += 2) { - // convert Type 2 edge hints (-20 or -21) to Type 1 ghost hints - if (ops[k+1].num < 0) { - d += ops[k].num + ops[k+1].num; - dFP |= ops[k].isFP | ops[k+1].isFP; - cvtNum(d, dFP, charBuf); - cvtNum(-ops[k+1].num, ops[k+1].isFP, charBuf); - } else { - d += ops[k].num; - dFP |= ops[k].isFP; - cvtNum(d, dFP, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - d += ops[k+1].num; - dFP |= ops[k+1].isFP; - } - charBuf->append((char)1); - } - nHints += nOps / 2; - nOps = 0; - break; - case 0x0003: // vstem - if (firstOp) { - cvtGlyphWidth(nOps & 1, charBuf, pDict); - firstOp = gFalse; - } - if (nOps & 1) { - //~ error(-1, "Wrong number of args (%d) to Type 2 vstem", nOps); - } - d = 0; - dFP = gFalse; - for (k = 0; k < nOps; k += 2) { - // convert Type 2 edge hints (-20 or -21) to Type 1 ghost hints - if (ops[k+1].num < 0) { - d += ops[k].num + ops[k+1].num; - dFP |= ops[k].isFP | ops[k+1].isFP; - cvtNum(d, dFP, charBuf); - cvtNum(-ops[k+1].num, ops[k+1].isFP, charBuf); - } else { - d += ops[k].num; - dFP |= ops[k].isFP; - cvtNum(d, dFP, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - d += ops[k+1].num; - dFP |= ops[k+1].isFP; - } - charBuf->append((char)3); - } - nHints += nOps / 2; - nOps = 0; - break; - case 0x0004: // vmoveto - if (firstOp) { - cvtGlyphWidth(nOps == 2, charBuf, pDict); - firstOp = gFalse; - } - if (openPath) { - charBuf->append((char)9); - openPath = gFalse; - } - if (nOps != 1) { - //~ error(-1, "Wrong number of args (%d) to Type 2 vmoveto", nOps); - } - cvtNum(ops[0].num, ops[0].isFP, charBuf); - charBuf->append((char)4); - nOps = 0; - break; - case 0x0005: // rlineto - if (nOps < 2 || nOps % 2 != 0) { - //~ error(-1, "Wrong number of args (%d) to Type 2 rlineto", nOps); - } - for (k = 0; k < nOps; k += 2) { - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - charBuf->append((char)5); - } - nOps = 0; - openPath = gTrue; - break; - case 0x0006: // hlineto - if (nOps < 1) { - //~ error(-1, "Wrong number of args (%d) to Type 2 hlineto", nOps); - } - for (k = 0; k < nOps; ++k) { - cvtNum(ops[k].num, ops[k].isFP, charBuf); - charBuf->append((char)((k & 1) ? 7 : 6)); - } - nOps = 0; - openPath = gTrue; - break; - case 0x0007: // vlineto - if (nOps < 1) { - //~ error(-1, "Wrong number of args (%d) to Type 2 vlineto", nOps); - } - for (k = 0; k < nOps; ++k) { - cvtNum(ops[k].num, ops[k].isFP, charBuf); - charBuf->append((char)((k & 1) ? 6 : 7)); - } - nOps = 0; - openPath = gTrue; - break; - case 0x0008: // rrcurveto - if (nOps < 6 || nOps % 6 != 0) { - //~ error(-1, "Wrong number of args (%d) to Type 2 rrcurveto", nOps); - } - for (k = 0; k < nOps; k += 6) { - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); - cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); - cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf); - cvtNum(ops[k+5].num, ops[k+5].isFP, charBuf); - charBuf->append((char)8); - } - nOps = 0; - openPath = gTrue; - break; - case 0x000a: // callsubr - if (nOps >= 1) { - subrBias = (subrIdx->len < 1240) - ? 107 : (subrIdx->len < 33900) ? 1131 : 32768; - k = subrBias + (int)ops[nOps - 1].num; - --nOps; - ok = gTrue; - getIndexVal(subrIdx, k, &val, &ok); - if (ok) { - cvtGlyph(val.pos, val.len, charBuf, subrIdx, pDict, gFalse); - } - } else { - //~ error(-1, "Too few args to Type 2 callsubr"); - } - // don't clear the stack - break; - case 0x000b: // return - // don't clear the stack - break; - case 0x000e: // endchar / seac - if (firstOp) { - cvtGlyphWidth(nOps == 1 || nOps == 5, charBuf, pDict); - firstOp = gFalse; - } - if (openPath) { - charBuf->append((char)9); - openPath = gFalse; - } - if (nOps == 4) { - cvtNum(0, gFalse, charBuf); - cvtNum(ops[0].num, ops[0].isFP, charBuf); - cvtNum(ops[1].num, ops[1].isFP, charBuf); - cvtNum(ops[2].num, ops[2].isFP, charBuf); - cvtNum(ops[3].num, ops[3].isFP, charBuf); - charBuf->append((char)12)->append((char)6); - } else if (nOps == 0) { - charBuf->append((char)14); - } else { - //~ error(-1, "Wrong number of args (%d) to Type 2 endchar", nOps); - } - nOps = 0; - break; - case 0x000f: // (obsolete) - // this op is ignored, but we need the glyph width - if (firstOp) { - cvtGlyphWidth(nOps > 0, charBuf, pDict); - firstOp = gFalse; - } - nOps = 0; - break; - case 0x0010: // blend - //~ error(-1, "Unimplemented Type 2 charstring op: %d", file[i]); - nOps = 0; - break; - case 0x0012: // hstemhm - // ignored - if (firstOp) { - cvtGlyphWidth(nOps & 1, charBuf, pDict); - firstOp = gFalse; - } - if (nOps & 1) { - //~ error(-1, "Wrong number of args (%d) to Type 2 hstemhm", nOps); - } - nHints += nOps / 2; - nOps = 0; - break; - case 0x0013: // hintmask - // ignored - if (firstOp) { - cvtGlyphWidth(nOps & 1, charBuf, pDict); - firstOp = gFalse; - } - if (nOps > 0) { - if (nOps & 1) { - //~ error(-1, "Wrong number of args (%d) to Type 2 hintmask/vstemhm", - //~ nOps); - } - nHints += nOps / 2; - } - pos += (nHints + 7) >> 3; - nOps = 0; - break; - case 0x0014: // cntrmask - // ignored - if (firstOp) { - cvtGlyphWidth(nOps & 1, charBuf, pDict); - firstOp = gFalse; - } - if (nOps > 0) { - if (nOps & 1) { - //~ error(-1, "Wrong number of args (%d) to Type 2 cntrmask/vstemhm", - //~ nOps); - } - nHints += nOps / 2; - } - pos += (nHints + 7) >> 3; - nOps = 0; - break; - case 0x0015: // rmoveto - if (firstOp) { - cvtGlyphWidth(nOps == 3, charBuf, pDict); - firstOp = gFalse; - } - if (openPath) { - charBuf->append((char)9); - openPath = gFalse; - } - if (nOps != 2) { - //~ error(-1, "Wrong number of args (%d) to Type 2 rmoveto", nOps); - } - cvtNum(ops[0].num, ops[0].isFP, charBuf); - cvtNum(ops[1].num, ops[1].isFP, charBuf); - charBuf->append((char)21); - nOps = 0; - break; - case 0x0016: // hmoveto - if (firstOp) { - cvtGlyphWidth(nOps == 2, charBuf, pDict); - firstOp = gFalse; - } - if (openPath) { - charBuf->append((char)9); - openPath = gFalse; - } - if (nOps != 1) { - //~ error(-1, "Wrong number of args (%d) to Type 2 hmoveto", nOps); - } - cvtNum(ops[0].num, ops[0].isFP, charBuf); - charBuf->append((char)22); - nOps = 0; - break; - case 0x0017: // vstemhm - // ignored - if (firstOp) { - cvtGlyphWidth(nOps & 1, charBuf, pDict); - firstOp = gFalse; - } - if (nOps & 1) { - //~ error(-1, "Wrong number of args (%d) to Type 2 vstemhm", nOps); - } - nHints += nOps / 2; - nOps = 0; - break; - case 0x0018: // rcurveline - if (nOps < 8 || (nOps - 2) % 6 != 0) { - //~ error(-1, "Wrong number of args (%d) to Type 2 rcurveline", nOps); - } - for (k = 0; k < nOps - 2; k += 6) { - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); - cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); - cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf); - cvtNum(ops[k+5].num, ops[k+5].isFP, charBuf); - charBuf->append((char)8); - } - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(ops[k+1].num, ops[k].isFP, charBuf); - charBuf->append((char)5); - nOps = 0; - openPath = gTrue; - break; - case 0x0019: // rlinecurve - if (nOps < 8 || (nOps - 6) % 2 != 0) { - //~ error(-1, "Wrong number of args (%d) to Type 2 rlinecurve", nOps); - } - for (k = 0; k < nOps - 6; k += 2) { - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(ops[k+1].num, ops[k].isFP, charBuf); - charBuf->append((char)5); - } - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); - cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); - cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf); - cvtNum(ops[k+5].num, ops[k+5].isFP, charBuf); - charBuf->append((char)8); - nOps = 0; - openPath = gTrue; - break; - case 0x001a: // vvcurveto - if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) { - //~ error(-1, "Wrong number of args (%d) to Type 2 vvcurveto", nOps); - } - if (nOps % 2 == 1) { - cvtNum(ops[0].num, ops[0].isFP, charBuf); - cvtNum(ops[1].num, ops[1].isFP, charBuf); - cvtNum(ops[2].num, ops[2].isFP, charBuf); - cvtNum(ops[3].num, ops[3].isFP, charBuf); - cvtNum(0, gFalse, charBuf); - cvtNum(ops[4].num, ops[4].isFP, charBuf); - charBuf->append((char)8); - k = 5; - } else { - k = 0; - } - for (; k < nOps; k += 4) { - cvtNum(0, gFalse, charBuf); - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); - cvtNum(0, gFalse, charBuf); - cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); - charBuf->append((char)8); - } - nOps = 0; - openPath = gTrue; - break; - case 0x001b: // hhcurveto - if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) { - //~ error(-1, "Wrong number of args (%d) to Type 2 hhcurveto", nOps); - } - if (nOps % 2 == 1) { - cvtNum(ops[1].num, ops[1].isFP, charBuf); - cvtNum(ops[0].num, ops[0].isFP, charBuf); - cvtNum(ops[2].num, ops[2].isFP, charBuf); - cvtNum(ops[3].num, ops[3].isFP, charBuf); - cvtNum(ops[4].num, ops[4].isFP, charBuf); - cvtNum(0, gFalse, charBuf); - charBuf->append((char)8); - k = 5; - } else { - k = 0; - } - for (; k < nOps; k += 4) { - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(0, gFalse, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); - cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); - cvtNum(0, gFalse, charBuf); - charBuf->append((char)8); - } - nOps = 0; - openPath = gTrue; - break; - case 0x001d: // callgsubr - if (nOps >= 1) { - k = gsubrBias + (int)ops[nOps - 1].num; - --nOps; - ok = gTrue; - getIndexVal(&gsubrIdx, k, &val, &ok); - if (ok) { - cvtGlyph(val.pos, val.len, charBuf, subrIdx, pDict, gFalse); - } - } else { - //~ error(-1, "Too few args to Type 2 callgsubr"); - } - // don't clear the stack - break; - case 0x001e: // vhcurveto - if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) { - //~ error(-1, "Wrong number of args (%d) to Type 2 vhcurveto", nOps); - } - for (k = 0; k < nOps && k != nOps-5; k += 4) { - if (k % 8 == 0) { - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); - cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); - charBuf->append((char)30); - } else { - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); - cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); - charBuf->append((char)31); - } - } - if (k == nOps-5) { - if (k % 8 == 0) { - cvtNum(0, gFalse, charBuf); - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); - cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); - cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf); - } else { - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(0, gFalse, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); - cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf); - cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); - } - charBuf->append((char)8); - } - nOps = 0; - openPath = gTrue; - break; - case 0x001f: // hvcurveto - if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) { - //~ error(-1, "Wrong number of args (%d) to Type 2 hvcurveto", nOps); - } - for (k = 0; k < nOps && k != nOps-5; k += 4) { - if (k % 8 == 0) { - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); - cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); - charBuf->append((char)31); - } else { - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); - cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); - charBuf->append((char)30); - } - } - if (k == nOps-5) { - if (k % 8 == 0) { - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(0, gFalse, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); - cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf); - cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); - } else { - cvtNum(0, gFalse, charBuf); - cvtNum(ops[k].num, ops[k].isFP, charBuf); - cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); - cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); - cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); - cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf); - } - charBuf->append((char)8); - } - nOps = 0; - openPath = gTrue; - break; - case 0x0c00: // dotsection (should be Type 1 only?) - // ignored - nOps = 0; - break; - case 0x0c03: // and - case 0x0c04: // or - case 0x0c05: // not - case 0x0c08: // store - case 0x0c09: // abs - case 0x0c0a: // add - case 0x0c0b: // sub - case 0x0c0c: // div - case 0x0c0d: // load - case 0x0c0e: // neg - case 0x0c0f: // eq - case 0x0c12: // drop - case 0x0c14: // put - case 0x0c15: // get - case 0x0c16: // ifelse - case 0x0c17: // random - case 0x0c18: // mul - case 0x0c1a: // sqrt - case 0x0c1b: // dup - case 0x0c1c: // exch - case 0x0c1d: // index - case 0x0c1e: // roll - //~ error(-1, "Unimplemented Type 2 charstring op: 12.%d", file[i+1]); - nOps = 0; - break; - case 0x0c22: // hflex - if (nOps != 7) { - //~ error(-1, "Wrong number of args (%d) to Type 2 hflex", nOps); - } - cvtNum(ops[0].num, ops[0].isFP, charBuf); - cvtNum(0, gFalse, charBuf); - cvtNum(ops[1].num, ops[1].isFP, charBuf); - cvtNum(ops[2].num, ops[2].isFP, charBuf); - cvtNum(ops[3].num, ops[3].isFP, charBuf); - cvtNum(0, gFalse, charBuf); - charBuf->append((char)8); - cvtNum(ops[4].num, ops[4].isFP, charBuf); - cvtNum(0, gFalse, charBuf); - cvtNum(ops[5].num, ops[5].isFP, charBuf); - cvtNum(-ops[2].num, ops[2].isFP, charBuf); - cvtNum(ops[6].num, ops[6].isFP, charBuf); - cvtNum(0, gFalse, charBuf); - charBuf->append((char)8); - nOps = 0; - openPath = gTrue; - break; - case 0x0c23: // flex - if (nOps != 13) { - //~ error(-1, "Wrong number of args (%d) to Type 2 flex", nOps); - } - cvtNum(ops[0].num, ops[0].isFP, charBuf); - cvtNum(ops[1].num, ops[1].isFP, charBuf); - cvtNum(ops[2].num, ops[2].isFP, charBuf); - cvtNum(ops[3].num, ops[3].isFP, charBuf); - cvtNum(ops[4].num, ops[4].isFP, charBuf); - cvtNum(ops[5].num, ops[5].isFP, charBuf); - charBuf->append((char)8); - cvtNum(ops[6].num, ops[6].isFP, charBuf); - cvtNum(ops[7].num, ops[7].isFP, charBuf); - cvtNum(ops[8].num, ops[8].isFP, charBuf); - cvtNum(ops[9].num, ops[9].isFP, charBuf); - cvtNum(ops[10].num, ops[10].isFP, charBuf); - cvtNum(ops[11].num, ops[11].isFP, charBuf); - charBuf->append((char)8); - nOps = 0; - openPath = gTrue; - break; - case 0x0c24: // hflex1 - if (nOps != 9) { - //~ error(-1, "Wrong number of args (%d) to Type 2 hflex1", nOps); - } - cvtNum(ops[0].num, ops[0].isFP, charBuf); - cvtNum(ops[1].num, ops[1].isFP, charBuf); - cvtNum(ops[2].num, ops[2].isFP, charBuf); - cvtNum(ops[3].num, ops[3].isFP, charBuf); - cvtNum(ops[4].num, ops[4].isFP, charBuf); - cvtNum(0, gFalse, charBuf); - charBuf->append((char)8); - cvtNum(ops[5].num, ops[5].isFP, charBuf); - cvtNum(0, gFalse, charBuf); - cvtNum(ops[6].num, ops[6].isFP, charBuf); - cvtNum(ops[7].num, ops[7].isFP, charBuf); - cvtNum(ops[8].num, ops[8].isFP, charBuf); - cvtNum(-(ops[1].num + ops[3].num + ops[7].num), - ops[1].isFP | ops[3].isFP | ops[7].isFP, charBuf); - charBuf->append((char)8); - nOps = 0; - openPath = gTrue; - break; - case 0x0c25: // flex1 - if (nOps != 11) { - //~ error(-1, "Wrong number of args (%d) to Type 2 flex1", nOps); - } - cvtNum(ops[0].num, ops[0].isFP, charBuf); - cvtNum(ops[1].num, ops[1].isFP, charBuf); - cvtNum(ops[2].num, ops[2].isFP, charBuf); - cvtNum(ops[3].num, ops[3].isFP, charBuf); - cvtNum(ops[4].num, ops[4].isFP, charBuf); - cvtNum(ops[5].num, ops[5].isFP, charBuf); - charBuf->append((char)8); - cvtNum(ops[6].num, ops[6].isFP, charBuf); - cvtNum(ops[7].num, ops[7].isFP, charBuf); - cvtNum(ops[8].num, ops[8].isFP, charBuf); - cvtNum(ops[9].num, ops[9].isFP, charBuf); - dx = ops[0].num + ops[2].num + ops[4].num + ops[6].num + ops[8].num; - dy = ops[1].num + ops[3].num + ops[5].num + ops[7].num + ops[9].num; - if (fabs(dx) > fabs(dy)) { - cvtNum(ops[10].num, ops[10].isFP, charBuf); - cvtNum(-dy, ops[1].isFP | ops[3].isFP | ops[5].isFP | - ops[7].isFP | ops[9].isFP, charBuf); - } else { - cvtNum(-dx, ops[0].isFP | ops[2].isFP | ops[4].isFP | - ops[6].isFP | ops[8].isFP, charBuf); - cvtNum(ops[10].num, ops[10].isFP, charBuf); - } - charBuf->append((char)8); - nOps = 0; - openPath = gTrue; - break; - default: - //~ error(-1, "Illegal Type 2 charstring op: %04x", - //~ ops[nOps].op); - nOps = 0; - break; - } - } - } - - // charstring encryption - if (top) { - r2 = 4330; - for (i = start; i < charBuf->getLength(); ++i) { - byte = charBuf->getChar(i) ^ (r2 >> 8); - charBuf->setChar(i, byte); - r2 = (byte + r2) * 52845 + 22719; - } - } -} - -void FoFiType1C::cvtGlyphWidth(GBool useOp, GooString *charBuf, - Type1CPrivateDict *pDict) { - double w; - GBool wFP; - int i; - - if (useOp) { - w = pDict->nominalWidthX + ops[0].num; - wFP = pDict->nominalWidthXFP | ops[0].isFP; - for (i = 1; i < nOps; ++i) { - ops[i-1] = ops[i]; - } - --nOps; - } else { - w = pDict->defaultWidthX; - wFP = pDict->defaultWidthXFP; - } - cvtNum(0, gFalse, charBuf); - cvtNum(w, wFP, charBuf); - charBuf->append((char)13); -} - -void FoFiType1C::cvtNum(double x, GBool isFP, GooString *charBuf) { - Guchar buf[12]; - int y, n; - - n = 0; - if (isFP) { - if (x >= -32768 && x < 32768) { - y = (int)(x * 256.0); - buf[0] = 255; - buf[1] = (Guchar)(y >> 24); - buf[2] = (Guchar)(y >> 16); - buf[3] = (Guchar)(y >> 8); - buf[4] = (Guchar)y; - buf[5] = 255; - buf[6] = 0; - buf[7] = 0; - buf[8] = 1; - buf[9] = 0; - buf[10] = 12; - buf[11] = 12; - n = 12; - } else { - //~ error(-1, "Type 2 fixed point constant out of range"); - } - } else { - y = (int)x; - if (y >= -107 && y <= 107) { - buf[0] = (Guchar)(y + 139); - n = 1; - } else if (y > 107 && y <= 1131) { - y -= 108; - buf[0] = (Guchar)((y >> 8) + 247); - buf[1] = (Guchar)(y & 0xff); - n = 2; - } else if (y < -107 && y >= -1131) { - y = -y - 108; - buf[0] = (Guchar)((y >> 8) + 251); - buf[1] = (Guchar)(y & 0xff); - n = 2; - } else { - buf[0] = 255; - buf[1] = (Guchar)(y >> 24); - buf[2] = (Guchar)(y >> 16); - buf[3] = (Guchar)(y >> 8); - buf[4] = (Guchar)y; - n = 5; - } - } - charBuf->append((char *)buf, n); -} - -void FoFiType1C::eexecWrite(Type1CEexecBuf *eb, char *s) { - Guchar *p; - Guchar x; - - for (p = (Guchar *)s; *p; ++p) { - x = *p ^ (eb->r1 >> 8); - eb->r1 = (x + eb->r1) * 52845 + 22719; - if (eb->ascii) { - (*eb->outputFunc)(eb->outputStream, &hexChars[x >> 4], 1); - (*eb->outputFunc)(eb->outputStream, &hexChars[x & 0x0f], 1); - eb->line += 2; - if (eb->line == 64) { - (*eb->outputFunc)(eb->outputStream, "\n", 1); - eb->line = 0; - } - } else { - (*eb->outputFunc)(eb->outputStream, (char *)&x, 1); - } - } -} - -void FoFiType1C::eexecWriteCharstring(Type1CEexecBuf *eb, - Guchar *s, int n) { - Guchar x; - int i; - - // eexec encryption - for (i = 0; i < n; ++i) { - x = s[i] ^ (eb->r1 >> 8); - eb->r1 = (x + eb->r1) * 52845 + 22719; - if (eb->ascii) { - (*eb->outputFunc)(eb->outputStream, &hexChars[x >> 4], 1); - (*eb->outputFunc)(eb->outputStream, &hexChars[x & 0x0f], 1); - eb->line += 2; - if (eb->line == 64) { - (*eb->outputFunc)(eb->outputStream, "\n", 1); - eb->line = 0; - } - } else { - (*eb->outputFunc)(eb->outputStream, (char *)&x, 1); - } - } -} - -GBool FoFiType1C::parse() { - Type1CIndex fdIdx; - Type1CIndexVal val; - int i; - - parsedOk = gTrue; - - // some tools embed Type 1C fonts with an extra whitespace char at - // the beginning - if (len > 0 && file[0] != '\x01') { - ++file; - --len; - } - - // find the indexes - getIndex(getU8(2, &parsedOk), &nameIdx, &parsedOk); - getIndex(nameIdx.endPos, &topDictIdx, &parsedOk); - getIndex(topDictIdx.endPos, &stringIdx, &parsedOk); - getIndex(stringIdx.endPos, &gsubrIdx, &parsedOk); - if (!parsedOk) { - return gFalse; - } - gsubrBias = (gsubrIdx.len < 1240) ? 107 - : (gsubrIdx.len < 33900) ? 1131 : 32768; - - // read the first font name - getIndexVal(&nameIdx, 0, &val, &parsedOk); - if (!parsedOk) { - return gFalse; - } - name = new GooString((char *)&file[val.pos], val.len); - - // read the top dict for the first font - readTopDict(); - - // for CID fonts: read the FDArray dicts and private dicts - if (topDict.firstOp == 0x0c1e) { - if (topDict.fdArrayOffset == 0) { - nFDs = 1; - privateDicts = (Type1CPrivateDict *)gmalloc(sizeof(Type1CPrivateDict)); - readPrivateDict(0, 0, &privateDicts[0]); - } else { - getIndex(topDict.fdArrayOffset, &fdIdx, &parsedOk); - if (!parsedOk) { - return gFalse; - } - nFDs = fdIdx.len; - privateDicts = (Type1CPrivateDict *) - gmallocn(nFDs, sizeof(Type1CPrivateDict)); - for (i = 0; i < nFDs; ++i) { - getIndexVal(&fdIdx, i, &val, &parsedOk); - if (!parsedOk) { - return gFalse; - } - readFD(val.pos, val.len, &privateDicts[i]); - } - } - - // for 8-bit fonts: read the private dict - } else { - privateDicts = (Type1CPrivateDict *)gmalloc(sizeof(Type1CPrivateDict)); - readPrivateDict(topDict.privateOffset, topDict.privateSize, - &privateDicts[0]); - } - - // check for parse errors in the private dict(s) - if (!parsedOk) { - return gFalse; - } - - // get the charstrings index - if (topDict.charStringsOffset <= 0) { - parsedOk = gFalse; - return gFalse; - } - getIndex(topDict.charStringsOffset, &charStringsIdx, &parsedOk); - if (!parsedOk) { - return gFalse; - } - nGlyphs = charStringsIdx.len; - - // for CID fonts: read the FDSelect table - if (topDict.firstOp == 0x0c1e) { - readFDSelect(); - if (!parsedOk) { - return gFalse; - } - } - - // read the charset - if (!readCharset()) { - parsedOk = gFalse; - return gFalse; - } - - // for 8-bit fonts: build the encoding - if (topDict.firstOp != 0x0c14 && topDict.firstOp != 0x0c1e) { - buildEncoding(); - if (!parsedOk) { - return gFalse; - } - } - - return parsedOk; -} - -void FoFiType1C::readTopDict() { - Type1CIndexVal topDictPtr; - int pos; - - topDict.firstOp = -1; - topDict.versionSID = 0; - topDict.noticeSID = 0; - topDict.copyrightSID = 0; - topDict.fullNameSID = 0; - topDict.familyNameSID = 0; - topDict.weightSID = 0; - topDict.isFixedPitch = 0; - topDict.italicAngle = 0; - topDict.underlinePosition = -100; - topDict.underlineThickness = 50; - topDict.paintType = 0; - topDict.charstringType = 2; - topDict.fontMatrix[0] = 0.001; - topDict.fontMatrix[1] = 0; - topDict.fontMatrix[2] = 0; - topDict.fontMatrix[3] = 0.001; - topDict.fontMatrix[4] = 0; - topDict.fontMatrix[5] = 0; - topDict.hasFontMatrix = gFalse; - topDict.uniqueID = 0; - topDict.fontBBox[0] = 0; - topDict.fontBBox[1] = 0; - topDict.fontBBox[2] = 0; - topDict.fontBBox[3] = 0; - topDict.strokeWidth = 0; - topDict.charsetOffset = 0; - topDict.encodingOffset = 0; - topDict.charStringsOffset = 0; - topDict.privateSize = 0; - topDict.privateOffset = 0; - topDict.registrySID = 0; - topDict.orderingSID = 0; - topDict.supplement = 0; - topDict.fdArrayOffset = 0; - topDict.fdSelectOffset = 0; - - getIndexVal(&topDictIdx, 0, &topDictPtr, &parsedOk); - pos = topDictPtr.pos; - nOps = 0; - while (pos < topDictPtr.pos + topDictPtr.len) { - pos = getOp(pos, gFalse, &parsedOk); - if (!parsedOk) { - break; - } - if (!ops[nOps - 1].isNum) { - --nOps; // drop the operator - if (topDict.firstOp < 0) { - topDict.firstOp = ops[nOps].op; - } - switch (ops[nOps].op) { - case 0x0000: topDict.versionSID = (int)ops[0].num; break; - case 0x0001: topDict.noticeSID = (int)ops[0].num; break; - case 0x0c00: topDict.copyrightSID = (int)ops[0].num; break; - case 0x0002: topDict.fullNameSID = (int)ops[0].num; break; - case 0x0003: topDict.familyNameSID = (int)ops[0].num; break; - case 0x0004: topDict.weightSID = (int)ops[0].num; break; - case 0x0c01: topDict.isFixedPitch = (int)ops[0].num; break; - case 0x0c02: topDict.italicAngle = ops[0].num; break; - case 0x0c03: topDict.underlinePosition = ops[0].num; break; - case 0x0c04: topDict.underlineThickness = ops[0].num; break; - case 0x0c05: topDict.paintType = (int)ops[0].num; break; - case 0x0c06: topDict.charstringType = (int)ops[0].num; break; - case 0x0c07: topDict.fontMatrix[0] = ops[0].num; - topDict.fontMatrix[1] = ops[1].num; - topDict.fontMatrix[2] = ops[2].num; - topDict.fontMatrix[3] = ops[3].num; - topDict.fontMatrix[4] = ops[4].num; - topDict.fontMatrix[5] = ops[5].num; - topDict.hasFontMatrix = gTrue; break; - case 0x000d: topDict.uniqueID = (int)ops[0].num; break; - case 0x0005: topDict.fontBBox[0] = ops[0].num; - topDict.fontBBox[1] = ops[1].num; - topDict.fontBBox[2] = ops[2].num; - topDict.fontBBox[3] = ops[3].num; break; - case 0x0c08: topDict.strokeWidth = ops[0].num; break; - case 0x000f: topDict.charsetOffset = (int)ops[0].num; break; - case 0x0010: topDict.encodingOffset = (int)ops[0].num; break; - case 0x0011: topDict.charStringsOffset = (int)ops[0].num; break; - case 0x0012: topDict.privateSize = (int)ops[0].num; - topDict.privateOffset = (int)ops[1].num; break; - case 0x0c1e: topDict.registrySID = (int)ops[0].num; - topDict.orderingSID = (int)ops[1].num; - topDict.supplement = (int)ops[2].num; break; - case 0x0c24: topDict.fdArrayOffset = (int)ops[0].num; break; - case 0x0c25: topDict.fdSelectOffset = (int)ops[0].num; break; - } - nOps = 0; - } - } -} - -// Read a CID font dict (FD) - this pulls out the private dict -// pointer, and reads the private dict. It also pulls the FontMatrix -// (if any) out of the FD. -void FoFiType1C::readFD(int offset, int length, Type1CPrivateDict *pDict) { - int pos, pSize, pOffset; - double fontMatrix[6] = {0}; - GBool hasFontMatrix; - - hasFontMatrix = gFalse; - pSize = pOffset = 0; - pos = offset; - nOps = 0; - while (pos < offset + length) { - pos = getOp(pos, gFalse, &parsedOk); - if (!parsedOk) { - return; - } - if (!ops[nOps - 1].isNum) { - if (ops[nOps - 1].op == 0x0012) { - if (nOps < 3) { - parsedOk = gFalse; - return; - } - pSize = (int)ops[0].num; - pOffset = (int)ops[1].num; - break; - } else if (ops[nOps - 1].op == 0x0c07) { - fontMatrix[0] = ops[0].num; - fontMatrix[1] = ops[1].num; - fontMatrix[2] = ops[2].num; - fontMatrix[3] = ops[3].num; - fontMatrix[4] = ops[4].num; - fontMatrix[5] = ops[5].num; - hasFontMatrix = gTrue; - } - nOps = 0; - } - } - readPrivateDict(pOffset, pSize, pDict); - if (hasFontMatrix) { - pDict->fontMatrix[0] = fontMatrix[0]; - pDict->fontMatrix[1] = fontMatrix[1]; - pDict->fontMatrix[2] = fontMatrix[2]; - pDict->fontMatrix[3] = fontMatrix[3]; - pDict->fontMatrix[4] = fontMatrix[4]; - pDict->fontMatrix[5] = fontMatrix[5]; - pDict->hasFontMatrix = gTrue; - } -} - -void FoFiType1C::readPrivateDict(int offset, int length, - Type1CPrivateDict *pDict) { - int pos; - - pDict->hasFontMatrix = gFalse; - pDict->nBlueValues = 0; - pDict->nOtherBlues = 0; - pDict->nFamilyBlues = 0; - pDict->nFamilyOtherBlues = 0; - pDict->blueScale = 0.039625; - pDict->blueShift = 7; - pDict->blueFuzz = 1; - pDict->hasStdHW = gFalse; - pDict->hasStdVW = gFalse; - pDict->nStemSnapH = 0; - pDict->nStemSnapV = 0; - pDict->hasForceBold = gFalse; - pDict->forceBoldThreshold = 0; - pDict->languageGroup = 0; - pDict->expansionFactor = 0.06; - pDict->initialRandomSeed = 0; - pDict->subrsOffset = 0; - pDict->defaultWidthX = 0; - pDict->defaultWidthXFP = gFalse; - pDict->nominalWidthX = 0; - pDict->nominalWidthXFP = gFalse; - - // no dictionary - if (offset == 0 || length == 0) { - return; - } - - pos = offset; - nOps = 0; - while (pos < offset + length) { - pos = getOp(pos, gFalse, &parsedOk); - if (!parsedOk) { - break; - } - if (!ops[nOps - 1].isNum) { - --nOps; // drop the operator - switch (ops[nOps].op) { - case 0x0006: - pDict->nBlueValues = getDeltaIntArray(pDict->blueValues, - type1CMaxBlueValues); - break; - case 0x0007: - pDict->nOtherBlues = getDeltaIntArray(pDict->otherBlues, - type1CMaxOtherBlues); - break; - case 0x0008: - pDict->nFamilyBlues = getDeltaIntArray(pDict->familyBlues, - type1CMaxBlueValues); - break; - case 0x0009: - pDict->nFamilyOtherBlues = getDeltaIntArray(pDict->familyOtherBlues, - type1CMaxOtherBlues); - break; - case 0x0c09: - pDict->blueScale = ops[0].num; - break; - case 0x0c0a: - pDict->blueShift = (int)ops[0].num; - break; - case 0x0c0b: - pDict->blueFuzz = (int)ops[0].num; - break; - case 0x000a: - pDict->stdHW = ops[0].num; - pDict->hasStdHW = gTrue; - break; - case 0x000b: - pDict->stdVW = ops[0].num; - pDict->hasStdVW = gTrue; - break; - case 0x0c0c: - pDict->nStemSnapH = getDeltaFPArray(pDict->stemSnapH, - type1CMaxStemSnap); - break; - case 0x0c0d: - pDict->nStemSnapV = getDeltaFPArray(pDict->stemSnapV, - type1CMaxStemSnap); - break; - case 0x0c0e: - pDict->forceBold = ops[0].num != 0; - pDict->hasForceBold = gTrue; - break; - case 0x0c0f: - pDict->forceBoldThreshold = ops[0].num; - break; - case 0x0c11: - pDict->languageGroup = (int)ops[0].num; - break; - case 0x0c12: - pDict->expansionFactor = ops[0].num; - break; - case 0x0c13: - pDict->initialRandomSeed = (int)ops[0].num; - break; - case 0x0013: - pDict->subrsOffset = offset + (int)ops[0].num; - break; - case 0x0014: - pDict->defaultWidthX = ops[0].num; - pDict->defaultWidthXFP = ops[0].isFP; - break; - case 0x0015: - pDict->nominalWidthX = ops[0].num; - pDict->nominalWidthXFP = ops[0].isFP; - break; - } - nOps = 0; - } - } -} - -void FoFiType1C::readFDSelect() { - int fdSelectFmt, pos, nRanges, gid0, gid1, fd, i, j; - - fdSelect = (Guchar *)gmalloc(nGlyphs); - if (topDict.fdSelectOffset == 0) { - for (i = 0; i < nGlyphs; ++i) { - fdSelect[i] = 0; - } - } else { - pos = topDict.fdSelectOffset; - fdSelectFmt = getU8(pos++, &parsedOk); - if (!parsedOk) { - return; - } - if (fdSelectFmt == 0) { - if (!checkRegion(pos, nGlyphs)) { - parsedOk = gFalse; - return; - } - memcpy(fdSelect, file + pos, nGlyphs); - } else if (fdSelectFmt == 3) { - nRanges = getU16BE(pos, &parsedOk); - pos += 2; - gid0 = getU16BE(pos, &parsedOk); - pos += 2; - for (i = 1; i <= nRanges; ++i) { - fd = getU8(pos++, &parsedOk); - gid1 = getU16BE(pos, &parsedOk); - if (!parsedOk) { - return; - } - pos += 2; - if (gid0 > gid1 || gid1 > nGlyphs) { - //~ error(-1, "Bad FDSelect table in CID font"); - parsedOk = gFalse; - return; - } - for (j = gid0; j < gid1; ++j) { - fdSelect[j] = fd; - } - gid0 = gid1; - } - } else { - //~ error(-1, "Unknown FDSelect table format in CID font"); - for (i = 0; i < nGlyphs; ++i) { - fdSelect[i] = 0; - } - } - } -} - -void FoFiType1C::buildEncoding() { - char buf[256]; - int nCodes, nRanges, encFormat; - int pos, c, sid, nLeft, nSups, i, j; - - if (topDict.encodingOffset == 0) { - encoding = fofiType1StandardEncoding; - - } else if (topDict.encodingOffset == 1) { - encoding = fofiType1ExpertEncoding; - - } else { - encoding = (char **)gmallocn(256, sizeof(char *)); - for (i = 0; i < 256; ++i) { - encoding[i] = NULL; - } - pos = topDict.encodingOffset; - encFormat = getU8(pos++, &parsedOk); - if (!parsedOk) { - return; - } - if ((encFormat & 0x7f) == 0) { - nCodes = 1 + getU8(pos++, &parsedOk); - if (!parsedOk) { - return; - } - if (nCodes > nGlyphs) { - nCodes = nGlyphs; - } - for (i = 1; i < nCodes; ++i) { - c = getU8(pos++, &parsedOk); - if (!parsedOk) { - return; - } - if (encoding[c]) { - gfree(encoding[c]); - } - encoding[c] = copyString(getString(charset[i], buf, &parsedOk)); - } - } else if ((encFormat & 0x7f) == 1) { - nRanges = getU8(pos++, &parsedOk); - if (!parsedOk) { - return; - } - nCodes = 1; - for (i = 0; i < nRanges; ++i) { - c = getU8(pos++, &parsedOk); - nLeft = getU8(pos++, &parsedOk); - if (!parsedOk) { - return; - } - for (j = 0; j <= nLeft && nCodes < nGlyphs; ++j) { - if (c < 256) { - if (encoding[c]) { - gfree(encoding[c]); - } - encoding[c] = copyString(getString(charset[nCodes], buf, - &parsedOk)); - } - ++nCodes; - ++c; - } - } - } - if (encFormat & 0x80) { - nSups = getU8(pos++, &parsedOk); - if (!parsedOk) { - return; - } - for (i = 0; i < nSups; ++i) { - c = getU8(pos++, &parsedOk);; - if (!parsedOk) { - return;; - } - sid = getU16BE(pos, &parsedOk); - pos += 2; - if (!parsedOk) { - return; - } - if (encoding[c]) { - gfree(encoding[c]); - } - encoding[c] = copyString(getString(sid, buf, &parsedOk)); - } - } - } -} - -GBool FoFiType1C::readCharset() { - int charsetFormat, c, pos; - int nLeft, i, j; - - if (topDict.charsetOffset == 0) { - charset = fofiType1CISOAdobeCharset; - } else if (topDict.charsetOffset == 1) { - charset = fofiType1CExpertCharset; - } else if (topDict.charsetOffset == 2) { - charset = fofiType1CExpertSubsetCharset; - } else { - charset = (Gushort *)gmallocn(nGlyphs, sizeof(Gushort)); - for (i = 0; i < nGlyphs; ++i) { - charset[i] = 0; - } - pos = topDict.charsetOffset; - charsetFormat = getU8(pos++, &parsedOk); - if (charsetFormat == 0) { - for (i = 1; i < nGlyphs; ++i) { - charset[i] = (Gushort)getU16BE(pos, &parsedOk); - pos += 2; - if (!parsedOk) { - break; - } - } - } else if (charsetFormat == 1) { - i = 1; - while (i < nGlyphs) { - c = getU16BE(pos, &parsedOk); - pos += 2; - nLeft = getU8(pos++, &parsedOk); - if (!parsedOk) { - break; - } - for (j = 0; j <= nLeft && i < nGlyphs; ++j) { - charset[i++] = (Gushort)c++; - } - } - } else if (charsetFormat == 2) { - i = 1; - while (i < nGlyphs) { - c = getU16BE(pos, &parsedOk); - pos += 2; - nLeft = getU16BE(pos, &parsedOk); - pos += 2; - if (!parsedOk) { - break; - } - for (j = 0; j <= nLeft && i < nGlyphs; ++j) { - charset[i++] = (Gushort)c++; - } - } - } - if (!parsedOk) { - gfree(charset); - charset = NULL; - return gFalse; - } - } - return gTrue; -} - -int FoFiType1C::getOp(int pos, GBool charstring, GBool *ok) { - static char nybChars[16] = "0123456789.ee -"; - Type1COp op; - char buf[65]; - int b0, b1, nyb0, nyb1, x, i; - - b0 = getU8(pos++, ok); - op.isNum = gTrue; - op.isFP = gFalse; - - if (b0 == 28) { - x = getU8(pos++, ok); - x = (x << 8) | getU8(pos++, ok); - if (x & 0x8000) { - x |= ~0xffff; - } - op.num = x; - - } else if (!charstring && b0 == 29) { - x = getU8(pos++, ok); - x = (x << 8) | getU8(pos++, ok); - x = (x << 8) | getU8(pos++, ok); - x = (x << 8) | getU8(pos++, ok); - if (x & 0x80000000) { - x |= ~0xffffffff; - } - op.num = x; - - } else if (!charstring && b0 == 30) { - i = 0; - do { - b1 = getU8(pos++, ok); - nyb0 = b1 >> 4; - nyb1 = b1 & 0x0f; - if (nyb0 == 0xf) { - break; - } - buf[i++] = nybChars[nyb0]; - if (i == 64) { - break; - } - if (nyb0 == 0xc) { - buf[i++] = '-'; - } - if (i == 64) { - break; - } - if (nyb1 == 0xf) { - break; - } - buf[i++] = nybChars[nyb1]; - if (i == 64) { - break; - } - if (nyb1 == 0xc) { - buf[i++] = '-'; - } - } while (i < 64); - buf[i] = '\0'; - op.num = gatof(buf); - op.isFP = gTrue; - - } else if (b0 >= 32 && b0 <= 246) { - op.num = b0 - 139; - - } else if (b0 >= 247 && b0 <= 250) { - op.num = ((b0 - 247) << 8) + getU8(pos++, ok) + 108; - - } else if (b0 >= 251 && b0 <= 254) { - op.num = -((b0 - 251) << 8) - getU8(pos++, ok) - 108; - - } else if (charstring && b0 == 255) { - x = getU8(pos++, ok); - x = (x << 8) | getU8(pos++, ok); - x = (x << 8) | getU8(pos++, ok); - x = (x << 8) | getU8(pos++, ok); - if (x & 0x80000000) { - x |= ~0xffffffff; - } - op.num = (double)x / 65536.0; - op.isFP = gTrue; - - } else if (b0 == 12) { - op.isNum = gFalse; - op.op = 0x0c00 + getU8(pos++, ok); - - } else { - op.isNum = gFalse; - op.op = b0; - } - - if (nOps < 49) { - ops[nOps++] = op; - } - - return pos; -} - -// Convert the delta-encoded ops array to an array of ints. -int FoFiType1C::getDeltaIntArray(int *arr, int maxLen) { - int x; - int n, i; - - if ((n = nOps) > maxLen) { - n = maxLen; - } - x = 0; - for (i = 0; i < n; ++i) { - x += (int)ops[i].num; - arr[i] = x; - } - return n; -} - -// Convert the delta-encoded ops array to an array of doubles. -int FoFiType1C::getDeltaFPArray(double *arr, int maxLen) { - double x; - int n, i; - - if ((n = nOps) > maxLen) { - n = maxLen; - } - x = 0; - for (i = 0; i < n; ++i) { - x += ops[i].num; - arr[i] = x; - } - return n; -} - -void FoFiType1C::getIndex(int pos, Type1CIndex *idx, GBool *ok) { - idx->pos = pos; - idx->len = getU16BE(pos, ok); - if (idx->len == 0) { - // empty indexes are legal and contain just the length field - idx->offSize = 0; - idx->startPos = idx->endPos = pos + 2; - } else { - idx->offSize = getU8(pos + 2, ok); - if (idx->offSize < 1 || idx->offSize > 4) { - *ok = gFalse; - } - idx->startPos = pos + 3 + (idx->len + 1) * idx->offSize - 1; - if (idx->startPos < 0 || idx->startPos >= len) { - *ok = gFalse; - } - idx->endPos = idx->startPos + getUVarBE(pos + 3 + idx->len * idx->offSize, - idx->offSize, ok); - if (idx->endPos < idx->startPos || idx->endPos > len) { - *ok = gFalse; - } - } -} - -void FoFiType1C::getIndexVal(Type1CIndex *idx, int i, - Type1CIndexVal *val, GBool *ok) { - int pos0, pos1; - - if (i < 0 || i >= idx->len) { - *ok = gFalse; - return; - } - pos0 = idx->startPos + getUVarBE(idx->pos + 3 + i * idx->offSize, - idx->offSize, ok); - pos1 = idx->startPos + getUVarBE(idx->pos + 3 + (i + 1) * idx->offSize, - idx->offSize, ok); - if (pos0 < idx->startPos || pos0 > idx->endPos || - pos1 <= idx->startPos || pos1 > idx->endPos || - pos1 < pos0) { - *ok = gFalse; - } - val->pos = pos0; - val->len = pos1 - pos0; -} - -char *FoFiType1C::getString(int sid, char *buf, GBool *ok) { - Type1CIndexVal val; - int n; - - if (sid < 391) { - strcpy(buf, fofiType1CStdStrings[sid]); - } else { - sid -= 391; - getIndexVal(&stringIdx, sid, &val, ok); - if (*ok) { - if ((n = val.len) > 255) { - n = 255; - } - strncpy(buf, (char *)&file[val.pos], n); - buf[n] = '\0'; - } else { - buf[0] = '\0'; - } - } - return buf; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1C.h b/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1C.h deleted file mode 100644 index 694d5cc7a30..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/fofi/FoFiType1C.h +++ /dev/null @@ -1,245 +0,0 @@ -//======================================================================== -// -// FoFiType1C.h -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef FOFITYPE1C_H -#define FOFITYPE1C_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include "FoFiBase.h" - -class GooString; - -//------------------------------------------------------------------------ - -struct Type1CIndex { - int pos; // absolute position in file - int len; // length (number of entries) - int offSize; // offset size - int startPos; // position of start of index data - 1 - int endPos; // position one byte past end of the index -}; - -struct Type1CIndexVal { - int pos; // absolute position in file - int len; // length, in bytes -}; - -struct Type1CTopDict { - int firstOp; - - int versionSID; - int noticeSID; - int copyrightSID; - int fullNameSID; - int familyNameSID; - int weightSID; - int isFixedPitch; - double italicAngle; - double underlinePosition; - double underlineThickness; - int paintType; - int charstringType; - double fontMatrix[6]; - GBool hasFontMatrix; // CID fonts are allowed to put their - // FontMatrix in the FD instead of the - // top dict - int uniqueID; - double fontBBox[4]; - double strokeWidth; - int charsetOffset; - int encodingOffset; - int charStringsOffset; - int privateSize; - int privateOffset; - - // CIDFont entries - int registrySID; - int orderingSID; - int supplement; - int fdArrayOffset; - int fdSelectOffset; -}; - -#define type1CMaxBlueValues 14 -#define type1CMaxOtherBlues 10 -#define type1CMaxStemSnap 12 - -struct Type1CPrivateDict { - double fontMatrix[6]; - GBool hasFontMatrix; - int blueValues[type1CMaxBlueValues]; - int nBlueValues; - int otherBlues[type1CMaxOtherBlues]; - int nOtherBlues; - int familyBlues[type1CMaxBlueValues]; - int nFamilyBlues; - int familyOtherBlues[type1CMaxOtherBlues]; - int nFamilyOtherBlues; - double blueScale; - int blueShift; - int blueFuzz; - double stdHW; - GBool hasStdHW; - double stdVW; - GBool hasStdVW; - double stemSnapH[type1CMaxStemSnap]; - int nStemSnapH; - double stemSnapV[type1CMaxStemSnap]; - int nStemSnapV; - GBool forceBold; - GBool hasForceBold; - double forceBoldThreshold; - int languageGroup; - double expansionFactor; - int initialRandomSeed; - int subrsOffset; - double defaultWidthX; - GBool defaultWidthXFP; - double nominalWidthX; - GBool nominalWidthXFP; -}; - -struct Type1COp { - GBool isNum; // true -> number, false -> operator - GBool isFP; // true -> floating point number, false -> int - union { - double num; // if num is true - int op; // if num is false - }; -}; - -struct Type1CEexecBuf { - FoFiOutputFunc outputFunc; - void *outputStream; - GBool ascii; // ASCII encoding? - Gushort r1; // eexec encryption key - int line; // number of eexec chars left on current line -}; - -//------------------------------------------------------------------------ -// FoFiType1C -//------------------------------------------------------------------------ - -class FoFiType1C: public FoFiBase { -public: - - // Create a FoFiType1C object from a memory buffer. - static FoFiType1C *make(char *fileA, int lenA); - - // Create a FoFiType1C object from a file on disk. - static FoFiType1C *load(char *fileName); - - virtual ~FoFiType1C(); - - // Return the font name. - char *getName(); - - // Return the encoding, as an array of 256 names (any of which may - // be NULL). This is only useful with 8-bit fonts. - char **getEncoding(); - - // Return the mapping from CIDs to GIDs, and return the number of - // CIDs in *<nCIDs>. This is only useful for CID fonts. - Gushort *getCIDToGIDMap(int *nCIDs); - - // Convert to a Type 1 font, suitable for embedding in a PostScript - // file. This is only useful with 8-bit fonts. If <newEncoding> is - // not NULL, it will be used in place of the encoding in the Type 1C - // font. If <ascii> is true the eexec section will be hex-encoded, - // otherwise it will be left as binary data. If <psName> is non-NULL, - // it will be used as the PostScript font name. - void convertToType1(char *psName, char **newEncoding, GBool ascii, - FoFiOutputFunc outputFunc, void *outputStream); - - // Convert to a Type 0 CIDFont, suitable for embedding in a - // PostScript file. <psName> will be used as the PostScript font - // name. - void convertToCIDType0(char *psName, - FoFiOutputFunc outputFunc, void *outputStream); - - // Convert to a Type 0 (but non-CID) composite font, suitable for - // embedding in a PostScript file. <psName> will be used as the - // PostScript font name. - void convertToType0(char *psName, - FoFiOutputFunc outputFunc, void *outputStream); - -private: - - FoFiType1C(char *fileA, int lenA, GBool freeFileDataA); - void eexecCvtGlyph(Type1CEexecBuf *eb, char *glyphName, - int offset, int nBytes, - Type1CIndex *subrIdx, - Type1CPrivateDict *pDict); - void cvtGlyph(int offset, int nBytes, GooString *charBuf, - Type1CIndex *subrIdx, Type1CPrivateDict *pDict, - GBool top); - void cvtGlyphWidth(GBool useOp, GooString *charBuf, - Type1CPrivateDict *pDict); - void cvtNum(double x, GBool isFP, GooString *charBuf); - void eexecWrite(Type1CEexecBuf *eb, char *s); - void eexecWriteCharstring(Type1CEexecBuf *eb, Guchar *s, int n); - GBool parse(); - void readTopDict(); - void readFD(int offset, int length, Type1CPrivateDict *pDict); - void readPrivateDict(int offset, int length, Type1CPrivateDict *pDict); - void readFDSelect(); - void buildEncoding(); - GBool readCharset(); - int getOp(int pos, GBool charstring, GBool *ok); - int getDeltaIntArray(int *arr, int maxLen); - int getDeltaFPArray(double *arr, int maxLen); - void getIndex(int pos, Type1CIndex *idx, GBool *ok); - void getIndexVal(Type1CIndex *idx, int i, Type1CIndexVal *val, GBool *ok); - char *getString(int sid, char *buf, GBool *ok); - - GooString *name; - char **encoding; - - Type1CIndex nameIdx; - Type1CIndex topDictIdx; - Type1CIndex stringIdx; - Type1CIndex gsubrIdx; - Type1CIndex charStringsIdx; - - Type1CTopDict topDict; - Type1CPrivateDict *privateDicts; - - int nGlyphs; - int nFDs; - Guchar *fdSelect; - Gushort *charset; - int gsubrBias; - - GBool parsedOk; - - Type1COp ops[49]; // operands and operator - int nOps; // number of operands - int nHints; // number of hints for the current glyph - GBool firstOp; // true if we haven't hit the first op yet - GBool openPath; // true if there is an unclosed path -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/fofi/Makefile.am b/Build/source/libs/poppler/poppler-0.18.0/fofi/Makefile.am deleted file mode 100644 index 7a302486505..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/fofi/Makefile.am +++ /dev/null @@ -1,26 +0,0 @@ -INCLUDES = \ - -I$(top_srcdir) - -noinst_LTLIBRARIES = libfofi.la - -if ENABLE_XPDF_HEADERS -poppler_fofi_includedir = $(includedir)/poppler/fofi -poppler_fofi_include_HEADERS = \ - FoFiBase.h \ - FoFiEncodings.h \ - FoFiTrueType.h \ - FoFiType1.h \ - FoFiType1C.h -endif - -libfofi_la_SOURCES = \ - FoFiBase.cc \ - FoFiBase.h \ - FoFiEncodings.cc \ - FoFiEncodings.h \ - FoFiTrueType.cc \ - FoFiTrueType.h \ - FoFiType1.cc \ - FoFiType1.h \ - FoFiType1C.cc \ - FoFiType1C.h diff --git a/Build/source/libs/poppler/poppler-0.18.0/fofi/Makefile.in b/Build/source/libs/poppler/poppler-0.18.0/fofi/Makefile.in deleted file mode 100644 index f5e00e62c1a..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/fofi/Makefile.in +++ /dev/null @@ -1,663 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = fofi -DIST_COMMON = $(am__poppler_fofi_include_HEADERS_DIST) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/define-dir.m4 $(top_srcdir)/m4/gtk-doc.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/introspection.m4 \ - $(top_srcdir)/m4/libjpeg.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h \ - $(top_builddir)/poppler/poppler-config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libfofi_la_LIBADD = -am_libfofi_la_OBJECTS = FoFiBase.lo FoFiEncodings.lo FoFiTrueType.lo \ - FoFiType1.lo FoFiType1C.lo -libfofi_la_OBJECTS = $(am_libfofi_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/poppler -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -AM_V_CXX = $(am__v_CXX_$(V)) -am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) -am__v_CXX_0 = @echo " CXX " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CXXLD = $(am__v_CXXLD_$(V)) -am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CXXLD_0 = @echo " CXXLD " $@; -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(libfofi_la_SOURCES) -DIST_SOURCES = $(libfofi_la_SOURCES) -am__poppler_fofi_include_HEADERS_DIST = FoFiBase.h FoFiEncodings.h \ - FoFiTrueType.h FoFiType1.h FoFiType1C.h -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(poppler_fofi_includedir)" -HEADERS = $(poppler_fofi_include_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CAIRO_CFLAGS = @CAIRO_CFLAGS@ -CAIRO_FEATURE = @CAIRO_FEATURE@ -CAIRO_LIBS = @CAIRO_LIBS@ -CAIRO_REQ = @CAIRO_REQ@ -CAIRO_VERSION = @CAIRO_VERSION@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ -FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ -FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ -FREETYPE_CONFIG = @FREETYPE_CONFIG@ -FREETYPE_LIBS = @FREETYPE_LIBS@ -GLIB_MKENUMS = @GLIB_MKENUMS@ -GLIB_REQ = @GLIB_REQ@ -GREP = @GREP@ -GTKDOC_CHECK = @GTKDOC_CHECK@ -GTKDOC_MKPDF = @GTKDOC_MKPDF@ -GTKDOC_REBASE = @GTKDOC_REBASE@ -GTK_TEST_CFLAGS = @GTK_TEST_CFLAGS@ -GTK_TEST_LIBS = @GTK_TEST_LIBS@ -HTML_DIR = @HTML_DIR@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ -INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ -INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ -INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ -INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ -INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ -INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ -INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ -LCMS_CFLAGS = @LCMS_CFLAGS@ -LCMS_LIBS = @LCMS_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ -LIBCURL_LIBS = @LIBCURL_LIBS@ -LIBICONV = @LIBICONV@ -LIBJPEG_LIBS = @LIBJPEG_LIBS@ -LIBOBJS = @LIBOBJS@ -LIBOPENJPEG_LIBS = @LIBOPENJPEG_LIBS@ -LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ -LIBPNG_LIBS = @LIBPNG_LIBS@ -LIBS = @LIBS@ -LIBTIFF_LIBS = @LIBTIFF_LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -MOCQT4 = @MOCQT4@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PC_REQUIRES = @PC_REQUIRES@ -PC_REQUIRES_PRIVATE = @PC_REQUIRES_PRIVATE@ -PKG_CONFIG = @PKG_CONFIG@ -PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ -PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -POPPLER_DATADIR = @POPPLER_DATADIR@ -POPPLER_GLIB_CFLAGS = @POPPLER_GLIB_CFLAGS@ -POPPLER_GLIB_DISABLE_DEPRECATED = @POPPLER_GLIB_DISABLE_DEPRECATED@ -POPPLER_GLIB_DISABLE_SINGLE_INCLUDES = @POPPLER_GLIB_DISABLE_SINGLE_INCLUDES@ -POPPLER_GLIB_LIBS = @POPPLER_GLIB_LIBS@ -POPPLER_MAJOR_VERSION = @POPPLER_MAJOR_VERSION@ -POPPLER_MICRO_VERSION = @POPPLER_MICRO_VERSION@ -POPPLER_MINOR_VERSION = @POPPLER_MINOR_VERSION@ -POPPLER_QT4_CFLAGS = @POPPLER_QT4_CFLAGS@ -POPPLER_QT4_CXXFLAGS = @POPPLER_QT4_CXXFLAGS@ -POPPLER_QT4_LIBS = @POPPLER_QT4_LIBS@ -POPPLER_QT4_TEST_CFLAGS = @POPPLER_QT4_TEST_CFLAGS@ -POPPLER_QT4_TEST_LIBS = @POPPLER_QT4_TEST_LIBS@ -POPPLER_VERSION = @POPPLER_VERSION@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -XMKMF = @XMKMF@ -X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ -X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ -ZLIB_LIBS = @ZLIB_LIBS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -auto_import_flags = @auto_import_flags@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -create_shared_lib = @create_shared_lib@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -win32_libs = @win32_libs@ -INCLUDES = \ - -I$(top_srcdir) - -noinst_LTLIBRARIES = libfofi.la -@ENABLE_XPDF_HEADERS_TRUE@poppler_fofi_includedir = $(includedir)/poppler/fofi -@ENABLE_XPDF_HEADERS_TRUE@poppler_fofi_include_HEADERS = \ -@ENABLE_XPDF_HEADERS_TRUE@ FoFiBase.h \ -@ENABLE_XPDF_HEADERS_TRUE@ FoFiEncodings.h \ -@ENABLE_XPDF_HEADERS_TRUE@ FoFiTrueType.h \ -@ENABLE_XPDF_HEADERS_TRUE@ FoFiType1.h \ -@ENABLE_XPDF_HEADERS_TRUE@ FoFiType1C.h - -libfofi_la_SOURCES = \ - FoFiBase.cc \ - FoFiBase.h \ - FoFiEncodings.cc \ - FoFiEncodings.h \ - FoFiTrueType.cc \ - FoFiTrueType.h \ - FoFiType1.cc \ - FoFiType1.h \ - FoFiType1C.cc \ - FoFiType1C.h - -all: all-am - -.SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign fofi/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign fofi/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libfofi.la: $(libfofi_la_OBJECTS) $(libfofi_la_DEPENDENCIES) - $(AM_V_CXXLD)$(CXXLINK) $(libfofi_la_OBJECTS) $(libfofi_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FoFiBase.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FoFiEncodings.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FoFiTrueType.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FoFiType1.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FoFiType1C.Plo@am__quote@ - -.cc.o: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cc.obj: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-poppler_fofi_includeHEADERS: $(poppler_fofi_include_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(poppler_fofi_includedir)" || $(MKDIR_P) "$(DESTDIR)$(poppler_fofi_includedir)" - @list='$(poppler_fofi_include_HEADERS)'; test -n "$(poppler_fofi_includedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(poppler_fofi_includedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(poppler_fofi_includedir)" || exit $$?; \ - done - -uninstall-poppler_fofi_includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(poppler_fofi_include_HEADERS)'; test -n "$(poppler_fofi_includedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(poppler_fofi_includedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(poppler_fofi_includedir)" && rm -f $$files - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(poppler_fofi_includedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-poppler_fofi_includeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-poppler_fofi_includeHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-poppler_fofi_includeHEADERS \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am \ - uninstall-poppler_fofi_includeHEADERS - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/FixedPoint.cc b/Build/source/libs/poppler/poppler-0.18.0/goo/FixedPoint.cc deleted file mode 100644 index 79a6a9ae1f4..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/FixedPoint.cc +++ /dev/null @@ -1,120 +0,0 @@ -//======================================================================== -// -// FixedPoint.cc -// -// Fixed point type, with C++ operators. -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -#include <config.h> - -#if USE_FIXEDPOINT - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "FixedPoint.h" - -#define ln2 ((FixedPoint)0.69314718) - -#define ln2 ((FixedPoint)0.69314718) - -FixedPoint FixedPoint::sqrt(FixedPoint x) { - FixedPoint y0, y1, z; - - if (x.val <= 0) { - y1.val = 0; - } else { - y1.val = x.val == 1 ? 2 : x.val >> 1; - do { - y0.val = y1.val; - z = x / y0; - y1.val = (y0.val + z.val) >> 1; - } while (::abs(y0.val - y1.val) > 1); - } - return y1; -} - -FixedPoint FixedPoint::pow(FixedPoint x, FixedPoint y) { - FixedPoint t, t2, lnx0, lnx, z0, z; - int d, n, i; - - if (y.val <= 0) { - z.val = 0; - } else { - // y * ln(x) - t = (x - 1) / (x + 1); - t2 = t * t; - d = 1; - lnx = 0; - do { - lnx0 = lnx; - lnx += t / d; - t *= t2; - d += 2; - } while (::abs(lnx.val - lnx0.val) > 2); - lnx.val <<= 1; - t = y * lnx; - // exp(y * ln(x)) - n = floor(t / ln2); - t -= ln2 * n; - t2 = t; - d = 1; - i = 1; - z = 1; - do { - z0 = z; - z += t2 / d; - t2 *= t; - ++i; - d *= i; - } while (::abs(z.val - z0.val) > 2 && d < (1 << fixptShift)); - if (n >= 0) { - z.val <<= n; - } else if (n < 0) { - z.val >>= -n; - } - } - return z; -} - -int FixedPoint::mul(int x, int y) { -#if 1 //~tmp - return ((FixPtInt64)x * y) >> fixptShift; -#else - int ah0, ah, bh, al, bl; - ah0 = x & fixptMaskH; - ah = x >> fixptShift; - al = x - ah0; - bh = y >> fixptShift; - bl = y - (bh << fixptShift); - return ah0 * bh + ah * bl + al * bh + ((al * bl) >> fixptShift); -#endif -} - -int FixedPoint::div(int x, int y) { -#if 1 //~tmp - return ((FixPtInt64)x << fixptShift) / y; -#else -#endif -} - -GBool FixedPoint::divCheck(FixedPoint x, FixedPoint y, FixedPoint *result) { -#if 1 //~tmp - FixPtInt64 z; - - z = ((FixPtInt64)x.val << fixptShift) / y.val; - if ((z == 0 && x != 0) || - z >= ((FixPtInt64)1 << 31) || z < -((FixPtInt64)1 << 31)) { - return gFalse; - } - result->val = z; - return gTrue; -#else -#endif -} - -#endif // USE_FIXEDPOINT diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/FixedPoint.h b/Build/source/libs/poppler/poppler-0.18.0/goo/FixedPoint.h deleted file mode 100644 index 08936bc6f2a..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/FixedPoint.h +++ /dev/null @@ -1,155 +0,0 @@ -//======================================================================== -// -// FixedPoint.h -// -// Fixed point type, with C++ operators. -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef FIXEDPOINT_H -#define FIXEDPOINT_H - -#include "poppler/poppler-config.h" - -#if USE_FIXEDPOINT - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include <stdio.h> -#include <stdlib.h> -#include "gtypes.h" - -#define fixptShift 16 -#define fixptMaskL ((1 << fixptShift) - 1) -#define fixptMaskH (~fixptMaskL) - -typedef long long FixPtInt64; - -class FixedPoint { -public: - - FixedPoint() { val = 0; } - FixedPoint(const FixedPoint &x) { val = x.val; } - FixedPoint(double x) { val = (int)(x * (1 << fixptShift) + 0.5); } - FixedPoint(int x) { val = x << fixptShift; } - FixedPoint(long x) { val = x << fixptShift; } - - operator float() - { return (float) val * ((float)1 / (float)(1 << fixptShift)); } - operator double() - { return (double) val * (1.0 / (double)(1 << fixptShift)); } - operator int() - { return val >> fixptShift; } - - int getRaw() { return val; } - - FixedPoint operator =(FixedPoint x) { val = x.val; return *this; } - - int operator ==(FixedPoint x) { return val == x.val; } - int operator ==(double x) { return *this == (FixedPoint)x; } - int operator ==(int x) { return *this == (FixedPoint)x; } - int operator ==(long x) { return *this == (FixedPoint)x; } - - int operator !=(FixedPoint x) { return val != x.val; } - int operator !=(double x) { return *this != (FixedPoint)x; } - int operator !=(int x) { return *this != (FixedPoint)x; } - int operator !=(long x) { return *this != (FixedPoint)x; } - - int operator <(FixedPoint x) { return val < x.val; } - int operator <(double x) { return *this < (FixedPoint)x; } - int operator <(int x) { return *this < (FixedPoint)x; } - int operator <(long x) { return *this < (FixedPoint)x; } - - int operator <=(FixedPoint x) { return val <= x.val; } - int operator <=(double x) { return *this <= (FixedPoint)x; } - int operator <=(int x) { return *this <= (FixedPoint)x; } - int operator <=(long x) { return *this <= (FixedPoint)x; } - - int operator >(FixedPoint x) { return val > x.val; } - int operator >(double x) { return *this > (FixedPoint)x; } - int operator >(int x) { return *this > (FixedPoint)x; } - int operator >(long x) { return *this > (FixedPoint)x; } - - int operator >=(FixedPoint x) { return val >= x.val; } - int operator >=(double x) { return *this >= (FixedPoint)x; } - int operator >=(int x) { return *this >= (FixedPoint)x; } - int operator >=(long x) { return *this >= (FixedPoint)x; } - - FixedPoint operator -() { return make(-val); } - - FixedPoint operator +(FixedPoint x) { return make(val + x.val); } - FixedPoint operator +(double x) { return *this + (FixedPoint)x; } - FixedPoint operator +(int x) { return *this + (FixedPoint)x; } - FixedPoint operator +(long x) { return *this + (FixedPoint)x; } - - FixedPoint operator +=(FixedPoint x) { val = val + x.val; return *this; } - FixedPoint operator +=(double x) { return *this += (FixedPoint)x; } - FixedPoint operator +=(int x) { return *this += (FixedPoint)x; } - FixedPoint operator +=(long x) { return *this += (FixedPoint)x; } - - FixedPoint operator -(FixedPoint x) { return make(val - x.val); } - FixedPoint operator -(double x) { return *this - (FixedPoint)x; } - FixedPoint operator -(int x) { return *this - (FixedPoint)x; } - FixedPoint operator -(long x) { return *this - (FixedPoint)x; } - - FixedPoint operator -=(FixedPoint x) { val = val - x.val; return *this; } - FixedPoint operator -=(double x) { return *this -= (FixedPoint)x; } - FixedPoint operator -=(int x) { return *this -= (FixedPoint)x; } - FixedPoint operator -=(long x) { return *this -= (FixedPoint)x; } - - FixedPoint operator *(FixedPoint x) { return make(mul(val, x.val)); } - FixedPoint operator *(double x) { return *this * (FixedPoint)x; } - FixedPoint operator *(int x) { return *this * (FixedPoint)x; } - FixedPoint operator *(long x) { return *this * (FixedPoint)x; } - - FixedPoint operator *=(FixedPoint x) { val = mul(val, x.val); return *this; } - FixedPoint operator *=(double x) { return *this *= (FixedPoint)x; } - FixedPoint operator *=(int x) { return *this *= (FixedPoint)x; } - FixedPoint operator *=(long x) { return *this *= (FixedPoint)x; } - - FixedPoint operator /(FixedPoint x) { return make(div(val, x.val)); } - FixedPoint operator /(double x) { return *this / (FixedPoint)x; } - FixedPoint operator /(int x) { return *this / (FixedPoint)x; } - FixedPoint operator /(long x) { return *this / (FixedPoint)x; } - - FixedPoint operator /=(FixedPoint x) { val = div(val, x.val); return *this; } - FixedPoint operator /=(double x) { return *this /= (FixedPoint)x; } - FixedPoint operator /=(int x) { return *this /= (FixedPoint)x; } - FixedPoint operator /=(long x) { return *this /= (FixedPoint)x; } - - static FixedPoint abs(FixedPoint x) { return make(::abs(x.val)); } - - static int floor(FixedPoint x) { return x.val >> fixptShift; } - - static int ceil(FixedPoint x) - { return (x.val & fixptMaskL) ? ((x.val >> fixptShift) + 1) - : (x.val >> fixptShift); } - - static int round(FixedPoint x) - { return (x.val + (1 << (fixptShift - 1))) >> fixptShift; } - - static FixedPoint sqrt(FixedPoint x); - - static FixedPoint pow(FixedPoint x, FixedPoint y); - - // Compute *result = x/y; return false if there is an underflow or - // overflow. - static GBool divCheck(FixedPoint x, FixedPoint y, FixedPoint *result); - -private: - - static FixedPoint make(int valA) { FixedPoint x; x.val = valA; return x; } - - static int mul(int x, int y); - static int div(int x, int y); - - int val; // 16.16 fixed point -}; - -#endif // USE_FIXEDPOINT - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/GooHash.cc b/Build/source/libs/poppler/poppler-0.18.0/goo/GooHash.cc deleted file mode 100644 index 5da9d69f82c..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/GooHash.cc +++ /dev/null @@ -1,380 +0,0 @@ -//======================================================================== -// -// GooHash.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "gmem.h" -#include "GooString.h" -#include "GooHash.h" - -//------------------------------------------------------------------------ - -struct GooHashBucket { - GooString *key; - union { - void *p; - int i; - } val; - GooHashBucket *next; -}; - -struct GooHashIter { - int h; - GooHashBucket *p; -}; - -//------------------------------------------------------------------------ - -GooHash::GooHash(GBool deleteKeysA) { - int h; - - deleteKeys = deleteKeysA; - size = 7; - tab = (GooHashBucket **)gmallocn(size, sizeof(GooHashBucket *)); - for (h = 0; h < size; ++h) { - tab[h] = NULL; - } - len = 0; -} - -GooHash::~GooHash() { - GooHashBucket *p; - int h; - - for (h = 0; h < size; ++h) { - while (tab[h]) { - p = tab[h]; - tab[h] = p->next; - if (deleteKeys) { - delete p->key; - } - delete p; - } - } - gfree(tab); -} - -void GooHash::add(GooString *key, void *val) { - GooHashBucket *p; - int h; - - // expand the table if necessary - if (len >= size) { - expand(); - } - - // add the new symbol - p = new GooHashBucket; - p->key = key; - p->val.p = val; - h = hash(key); - p->next = tab[h]; - tab[h] = p; - ++len; -} - -void GooHash::add(GooString *key, int val) { - GooHashBucket *p; - int h; - - // expand the table if necessary - if (len >= size) { - expand(); - } - - // add the new symbol - p = new GooHashBucket; - p->key = key; - p->val.i = val; - h = hash(key); - p->next = tab[h]; - tab[h] = p; - ++len; -} - -void GooHash::replace(GooString *key, void *val) { - GooHashBucket *p; - int h; - - if ((p = find(key, &h))) { - p->val.p = val; - delete key; - } else { - add(key, val); - } -} - -void GooHash::replace(GooString *key, int val) { - GooHashBucket *p; - int h; - - if ((p = find(key, &h))) { - p->val.i = val; - delete key; - } else { - add(key, val); - } -} - -void *GooHash::lookup(GooString *key) { - GooHashBucket *p; - int h; - - if (!(p = find(key, &h))) { - return NULL; - } - return p->val.p; -} - -int GooHash::lookupInt(GooString *key) { - GooHashBucket *p; - int h; - - if (!(p = find(key, &h))) { - return 0; - } - return p->val.i; -} - -void *GooHash::lookup(char *key) { - GooHashBucket *p; - int h; - - if (!(p = find(key, &h))) { - return NULL; - } - return p->val.p; -} - -int GooHash::lookupInt(char *key) { - GooHashBucket *p; - int h; - - if (!(p = find(key, &h))) { - return 0; - } - return p->val.i; -} - -void *GooHash::remove(GooString *key) { - GooHashBucket *p; - GooHashBucket **q; - void *val; - int h; - - if (!(p = find(key, &h))) { - return NULL; - } - q = &tab[h]; - while (*q != p) { - q = &((*q)->next); - } - *q = p->next; - if (deleteKeys) { - delete p->key; - } - val = p->val.p; - delete p; - --len; - return val; -} - -int GooHash::removeInt(GooString *key) { - GooHashBucket *p; - GooHashBucket **q; - int val; - int h; - - if (!(p = find(key, &h))) { - return 0; - } - q = &tab[h]; - while (*q != p) { - q = &((*q)->next); - } - *q = p->next; - if (deleteKeys) { - delete p->key; - } - val = p->val.i; - delete p; - --len; - return val; -} - -void *GooHash::remove(char *key) { - GooHashBucket *p; - GooHashBucket **q; - void *val; - int h; - - if (!(p = find(key, &h))) { - return NULL; - } - q = &tab[h]; - while (*q != p) { - q = &((*q)->next); - } - *q = p->next; - if (deleteKeys) { - delete p->key; - } - val = p->val.p; - delete p; - --len; - return val; -} - -int GooHash::removeInt(char *key) { - GooHashBucket *p; - GooHashBucket **q; - int val; - int h; - - if (!(p = find(key, &h))) { - return 0; - } - q = &tab[h]; - while (*q != p) { - q = &((*q)->next); - } - *q = p->next; - if (deleteKeys) { - delete p->key; - } - val = p->val.i; - delete p; - --len; - return val; -} - -void GooHash::startIter(GooHashIter **iter) { - *iter = new GooHashIter; - (*iter)->h = -1; - (*iter)->p = NULL; -} - -GBool GooHash::getNext(GooHashIter **iter, GooString **key, void **val) { - if (!*iter) { - return gFalse; - } - if ((*iter)->p) { - (*iter)->p = (*iter)->p->next; - } - while (!(*iter)->p) { - if (++(*iter)->h == size) { - delete *iter; - *iter = NULL; - return gFalse; - } - (*iter)->p = tab[(*iter)->h]; - } - *key = (*iter)->p->key; - *val = (*iter)->p->val.p; - return gTrue; -} - -GBool GooHash::getNext(GooHashIter **iter, GooString **key, int *val) { - if (!*iter) { - return gFalse; - } - if ((*iter)->p) { - (*iter)->p = (*iter)->p->next; - } - while (!(*iter)->p) { - if (++(*iter)->h == size) { - delete *iter; - *iter = NULL; - return gFalse; - } - (*iter)->p = tab[(*iter)->h]; - } - *key = (*iter)->p->key; - *val = (*iter)->p->val.i; - return gTrue; -} - -void GooHash::killIter(GooHashIter **iter) { - delete *iter; - *iter = NULL; -} - -void GooHash::expand() { - GooHashBucket **oldTab; - GooHashBucket *p; - int oldSize, h, i; - - oldSize = size; - oldTab = tab; - size = 2*size + 1; - tab = (GooHashBucket **)gmallocn(size, sizeof(GooHashBucket *)); - for (h = 0; h < size; ++h) { - tab[h] = NULL; - } - for (i = 0; i < oldSize; ++i) { - while (oldTab[i]) { - p = oldTab[i]; - oldTab[i] = oldTab[i]->next; - h = hash(p->key); - p->next = tab[h]; - tab[h] = p; - } - } - gfree(oldTab); -} - -GooHashBucket *GooHash::find(GooString *key, int *h) { - GooHashBucket *p; - - *h = hash(key); - for (p = tab[*h]; p; p = p->next) { - if (!p->key->cmp(key)) { - return p; - } - } - return NULL; -} - -GooHashBucket *GooHash::find(char *key, int *h) { - GooHashBucket *p; - - *h = hash(key); - for (p = tab[*h]; p; p = p->next) { - if (!p->key->cmp(key)) { - return p; - } - } - return NULL; -} - -int GooHash::hash(GooString *key) { - char *p; - unsigned int h; - int i; - - h = 0; - for (p = key->getCString(), i = 0; i < key->getLength(); ++p, ++i) { - h = 17 * h + (int)(*p & 0xff); - } - return (int)(h % size); -} - -int GooHash::hash(char *key) { - char *p; - unsigned int h; - - h = 0; - for (p = key; *p; ++p) { - h = 17 * h + (int)(*p & 0xff); - } - return (int)(h % size); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/GooHash.h b/Build/source/libs/poppler/poppler-0.18.0/goo/GooHash.h deleted file mode 100644 index bdcf1c43ece..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/GooHash.h +++ /dev/null @@ -1,76 +0,0 @@ -//======================================================================== -// -// GooHash.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GHASH_H -#define GHASH_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" - -class GooString; -struct GooHashBucket; -struct GooHashIter; - -//------------------------------------------------------------------------ - -class GooHash { -public: - - GooHash(GBool deleteKeysA = gFalse); - ~GooHash(); - void add(GooString *key, void *val); - void add(GooString *key, int val); - void replace(GooString *key, void *val); - void replace(GooString *key, int val); - void *lookup(GooString *key); - int lookupInt(GooString *key); - void *lookup(char *key); - int lookupInt(char *key); - void *remove(GooString *key); - int removeInt(GooString *key); - void *remove(char *key); - int removeInt(char *key); - int getLength() { return len; } - void startIter(GooHashIter **iter); - GBool getNext(GooHashIter **iter, GooString **key, void **val); - GBool getNext(GooHashIter **iter, GooString **key, int *val); - void killIter(GooHashIter **iter); - -private: - - void expand(); - GooHashBucket *find(GooString *key, int *h); - GooHashBucket *find(char *key, int *h); - int hash(GooString *key); - int hash(char *key); - - GBool deleteKeys; // set if key strings should be deleted - int size; // number of buckets - int len; // number of entries - GooHashBucket **tab; -}; - -#define deleteGooHash(hash, T) \ - do { \ - GooHash *_hash = (hash); \ - { \ - GooHashIter *_iter; \ - GooString *_key; \ - void *_p; \ - _hash->startIter(&_iter); \ - while (_hash->getNext(&_iter, &_key, &_p)) { \ - delete (T*)_p; \ - } \ - delete _hash; \ - } \ - } while(0) - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/GooLikely.h b/Build/source/libs/poppler/poppler-0.18.0/goo/GooLikely.h deleted file mode 100644 index 724ccf00870..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/GooLikely.h +++ /dev/null @@ -1,22 +0,0 @@ -//======================================================================== -// -// GooLikely.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright (C) 2008 Kees Cook <kees@outflux.net> -// -//======================================================================== - -#ifndef GOOLIKELY_H -#define GOOLIKELY_H - -#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__) -# define likely(x) __builtin_expect((x), 1) -# define unlikely(x) __builtin_expect((x), 0) -#else -# define likely(x) (x) -# define unlikely(x) (x) -#endif - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/GooList.cc b/Build/source/libs/poppler/poppler-0.18.0/goo/GooList.cc deleted file mode 100644 index dc6e4e21e00..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/GooList.cc +++ /dev/null @@ -1,97 +0,0 @@ -//======================================================================== -// -// GooList.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <string.h> -#include "gmem.h" -#include "GooList.h" - -//------------------------------------------------------------------------ -// GooList -//------------------------------------------------------------------------ - -GooList::GooList() { - size = 8; - data = (void **)gmallocn(size, sizeof(void*)); - length = 0; - inc = 0; -} - -GooList::GooList(int sizeA) { - size = sizeA; - data = (void **)gmallocn(size, sizeof(void*)); - length = 0; - inc = 0; -} - -GooList::~GooList() { - gfree(data); -} - -void GooList::append(void *p) { - if (length >= size) { - expand(); - } - data[length++] = p; -} - -void GooList::append(GooList *list) { - int i; - - while (length + list->length > size) { - expand(); - } - for (i = 0; i < list->length; ++i) { - data[length++] = list->data[i]; - } -} - -void GooList::insert(int i, void *p) { - if (length >= size) { - expand(); - } - if (i < length) { - memmove(data+i+1, data+i, (length - i) * sizeof(void *)); - } - data[i] = p; - ++length; -} - -void *GooList::del(int i) { - void *p; - - p = data[i]; - if (i < length - 1) { - memmove(data+i, data+i+1, (length - i - 1) * sizeof(void *)); - } - --length; - if (size - length >= ((inc > 0) ? inc : size/2)) { - shrink(); - } - return p; -} - -void GooList::sort(int (*cmp)(const void *obj1, const void *obj2)) { - qsort(data, length, sizeof(void *), cmp); -} - -void GooList::expand() { - size += (inc > 0) ? inc : size; - data = (void **)greallocn(data, size, sizeof(void*)); -} - -void GooList::shrink() { - size -= (inc > 0) ? inc : size/2; - data = (void **)greallocn(data, size, sizeof(void*)); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/GooList.h b/Build/source/libs/poppler/poppler-0.18.0/goo/GooList.h deleted file mode 100644 index 576f3e8142d..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/GooList.h +++ /dev/null @@ -1,94 +0,0 @@ -//======================================================================== -// -// GooList.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GLIST_H -#define GLIST_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" - -//------------------------------------------------------------------------ -// GooList -//------------------------------------------------------------------------ - -class GooList { -public: - - // Create an empty list. - GooList(); - - // Create an empty list with space for <size1> elements. - GooList(int sizeA); - - // Destructor - does not free pointed-to objects. - ~GooList(); - - //----- general - - // Get the number of elements. - int getLength() { return length; } - - //----- ordered list support - - // Return the <i>th element. - // Assumes 0 <= i < length. - void *get(int i) { return data[i]; } - - // Append an element to the end of the list. - void append(void *p); - - // Append another list to the end of this one. - void append(GooList *list); - - // Insert an element at index <i>. - // Assumes 0 <= i <= length. - void insert(int i, void *p); - - // Deletes and returns the element at index <i>. - // Assumes 0 <= i < length. - void *del(int i); - - // Sort the list accoring to the given comparison function. - // NB: this sorts an array of pointers, so the pointer args need to - // be double-dereferenced. - void sort(int (*cmp)(const void *ptr1, const void *ptr2)); - - //----- control - - // Set allocation increment to <inc>. If inc > 0, that many - // elements will be allocated every time the list is expanded. - // If inc <= 0, the list will be doubled in size. - void setAllocIncr(int incA) { inc = incA; } - -private: - - void expand(); - void shrink(); - - void **data; // the list elements - int size; // size of data array - int length; // number of elements on list - int inc; // allocation increment -}; - -#define deleteGooList(list, T) \ - do { \ - GooList *_list = (list); \ - { \ - int _i; \ - for (_i = 0; _i < _list->getLength(); ++_i) { \ - delete (T*)_list->get(_i); \ - } \ - delete _list; \ - } \ - } while (0) - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/GooMutex.h b/Build/source/libs/poppler/poppler-0.18.0/goo/GooMutex.h deleted file mode 100644 index 3f53a626a67..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/GooMutex.h +++ /dev/null @@ -1,63 +0,0 @@ -//======================================================================== -// -// GooMutex.h -// -// Portable mutex macros. -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef GMUTEX_H -#define GMUTEX_H - -// Usage: -// -// GooMutex m; -// gInitMutex(&m); -// ... -// gLockMutex(&m); -// ... critical section ... -// gUnlockMutex(&m); -// ... -// gDestroyMutex(&m); - -#ifdef _WIN32 - -#include <windows.h> - -typedef CRITICAL_SECTION GooMutex; - -#define gInitMutex(m) InitializeCriticalSection(m) -#define gDestroyMutex(m) DeleteCriticalSection(m) -#define gLockMutex(m) EnterCriticalSection(m) -#define gUnlockMutex(m) LeaveCriticalSection(m) - -#else // assume pthreads - -#include <pthread.h> - -typedef pthread_mutex_t GooMutex; - -#define gInitMutex(m) pthread_mutex_init(m, NULL) -#define gDestroyMutex(m) pthread_mutex_destroy(m) -#define gLockMutex(m) pthread_mutex_lock(m) -#define gUnlockMutex(m) pthread_mutex_unlock(m) - -#endif - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/GooString.cc b/Build/source/libs/poppler/poppler-0.18.0/goo/GooString.cc deleted file mode 100644 index a96b792466f..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/GooString.cc +++ /dev/null @@ -1,804 +0,0 @@ -//======================================================================== -// -// GooString.cc -// -// Simple variable-length string type. -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// Copyright (C) 2007 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2008-2011 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <stddef.h> -#include <string.h> -#include <ctype.h> -#include <assert.h> -#include <math.h> -#include "gmem.h" -#include "GooString.h" - -static const int MAXIMUM_DOUBLE_PREC = 16; - -//------------------------------------------------------------------------ - -union GooStringFormatArg { - int i; - Guint ui; - long l; - Gulong ul; - double f; - char c; - char *s; - GooString *gs; -}; - -enum GooStringFormatType { - fmtIntDecimal, - fmtIntHex, - fmtIntOctal, - fmtIntBinary, - fmtUIntDecimal, - fmtUIntHex, - fmtUIntOctal, - fmtUIntBinary, - fmtLongDecimal, - fmtLongHex, - fmtLongOctal, - fmtLongBinary, - fmtULongDecimal, - fmtULongHex, - fmtULongOctal, - fmtULongBinary, - fmtDouble, - fmtDoubleTrimSmallAware, - fmtDoubleTrim, - fmtChar, - fmtString, - fmtGooString, - fmtSpace -}; - -static char *formatStrings[] = { - "d", "x", "o", "b", "ud", "ux", "uo", "ub", - "ld", "lx", "lo", "lb", "uld", "ulx", "ulo", "ulb", - "f", "gs", "g", - "c", - "s", - "t", - "w", - NULL -}; - -//------------------------------------------------------------------------ - -int inline GooString::roundedSize(int len) { - int delta; - if (len <= STR_STATIC_SIZE-1) - return STR_STATIC_SIZE; - delta = len < 256 ? 7 : 255; - return ((len + 1) + delta) & ~delta; -} - -// Make sure that the buffer is big enough to contain <newLength> characters -// plus terminating 0. -// We assume that if this is being called from the constructor, <s> was set -// to NULL and <length> was set to 0 to indicate unused string before calling us. -void inline GooString::resize(int newLength) { - char *s1 = s; - - if (!s || (roundedSize(length) != roundedSize(newLength))) { - // requires re-allocating data for string - if (newLength < STR_STATIC_SIZE) { - s1 = sStatic; - } else { - // allocate a rounded amount - if (s == sStatic) - s1 = (char*)gmalloc(roundedSize(newLength)); - else - s1 = (char*)grealloc(s, roundedSize(newLength)); - } - if (s == sStatic || s1 == sStatic) { - // copy the minimum, we only need to if are moving to or - // from sStatic. - // assert(s != s1) the roundedSize condition ensures this - if (newLength < length) { - memcpy(s1, s, newLength); - } else { - memcpy(s1, s, length); - } - } - - } - - s = s1; - length = newLength; - s[length] = '\0'; -} - -GooString* GooString::Set(const char *s1, int s1Len, const char *s2, int s2Len) -{ - int newLen = 0; - char *p; - - if (s1) { - if (CALC_STRING_LEN == s1Len) { - s1Len = strlen(s1); - } else - assert(s1Len >= 0); - newLen += s1Len; - } - - if (s2) { - if (CALC_STRING_LEN == s2Len) { - s2Len = strlen(s2); - } else - assert(s2Len >= 0); - newLen += s2Len; - } - - resize(newLen); - p = s; - if (s1) { - memcpy(p, s1, s1Len); - p += s1Len; - } - if (s2) { - memcpy(p, s2, s2Len); - p += s2Len; - } - return this; -} - -GooString::GooString() { - s = NULL; - length = 0; - Set(NULL); -} - -GooString::GooString(const char *sA) { - s = NULL; - length = 0; - Set(sA, CALC_STRING_LEN); -} - -GooString::GooString(const char *sA, int lengthA) { - s = NULL; - length = 0; - Set(sA, lengthA); -} - -GooString::GooString(GooString *str, int idx, int lengthA) { - s = NULL; - length = 0; - assert(idx + lengthA <= str->length); - Set(str->getCString() + idx, lengthA); -} - -GooString::GooString(const GooString *str) { - s = NULL; - length = 0; - Set(str->getCString(), str->length); -} - -GooString::GooString(GooString *str1, GooString *str2) { - s = NULL; - length = 0; - Set(str1->getCString(), str1->length, str2->getCString(), str2->length); -} - -GooString *GooString::fromInt(int x) { - char buf[24]; // enough space for 64-bit ints plus a little extra - char *p; - int len; - formatInt(x, buf, sizeof(buf), gFalse, 0, 10, &p, &len); - return new GooString(p, len); -} - -GooString *GooString::format(char *fmt, ...) { - va_list argList; - GooString *s; - - s = new GooString(); - va_start(argList, fmt); - s->appendfv(fmt, argList); - va_end(argList); - return s; -} - -GooString *GooString::formatv(char *fmt, va_list argList) { - GooString *s; - - s = new GooString(); - s->appendfv(fmt, argList); - return s; -} - -GooString::~GooString() { - if (s != sStatic) - gfree(s); -} - -GooString *GooString::clear() { - resize(0); - return this; -} - -GooString *GooString::append(char c) { - return append((const char*)&c, 1); -} - -GooString *GooString::append(GooString *str) { - return append(str->getCString(), str->getLength()); -} - -GooString *GooString::append(const char *str, int lengthA) { - int prevLen = length; - if (CALC_STRING_LEN == lengthA) - lengthA = strlen(str); - resize(length + lengthA); - memcpy(s + prevLen, str, lengthA); - return this; -} - -GooString *GooString::appendf(char *fmt, ...) { - va_list argList; - - va_start(argList, fmt); - appendfv(fmt, argList); - va_end(argList); - return this; -} - -GooString *GooString::appendfv(char *fmt, va_list argList) { - GooStringFormatArg *args; - int argsLen, argsSize; - GooStringFormatArg arg; - int idx, width, prec; - GBool reverseAlign, zeroFill; - GooStringFormatType ft; - char buf[65]; - int len, i; - char *p0, *p1, *str; - - argsLen = 0; - argsSize = 8; - args = (GooStringFormatArg *)gmallocn(argsSize, sizeof(GooStringFormatArg)); - - p0 = fmt; - while (*p0) { - if (*p0 == '{') { - ++p0; - if (*p0 == '{') { - ++p0; - append('{'); - } else { - - // parse the format string - if (!(*p0 >= '0' && *p0 <= '9')) { - break; - } - idx = *p0 - '0'; - for (++p0; *p0 >= '0' && *p0 <= '9'; ++p0) { - idx = 10 * idx + (*p0 - '0'); - } - if (*p0 != ':') { - break; - } - ++p0; - if (*p0 == '-') { - reverseAlign = gTrue; - ++p0; - } else { - reverseAlign = gFalse; - } - width = 0; - zeroFill = *p0 == '0'; - for (; *p0 >= '0' && *p0 <= '9'; ++p0) { - width = 10 * width + (*p0 - '0'); - } - if (*p0 == '.') { - ++p0; - prec = 0; - for (; *p0 >= '0' && *p0 <= '9'; ++p0) { - prec = 10 * prec + (*p0 - '0'); - } - } else { - prec = 0; - } - for (ft = (GooStringFormatType)0; - formatStrings[ft]; - ft = (GooStringFormatType)(ft + 1)) { - if (!strncmp(p0, formatStrings[ft], strlen(formatStrings[ft]))) { - break; - } - } - if (!formatStrings[ft]) { - break; - } - p0 += strlen(formatStrings[ft]); - if (*p0 != '}') { - break; - } - ++p0; - - // fetch the argument - if (idx > argsLen) { - break; - } - if (idx == argsLen) { - if (argsLen == argsSize) { - argsSize *= 2; - args = (GooStringFormatArg *)greallocn(args, argsSize, - sizeof(GooStringFormatArg)); - } - switch (ft) { - case fmtIntDecimal: - case fmtIntHex: - case fmtIntOctal: - case fmtIntBinary: - case fmtSpace: - args[argsLen].i = va_arg(argList, int); - break; - case fmtUIntDecimal: - case fmtUIntHex: - case fmtUIntOctal: - case fmtUIntBinary: - args[argsLen].ui = va_arg(argList, Guint); - break; - case fmtLongDecimal: - case fmtLongHex: - case fmtLongOctal: - case fmtLongBinary: - args[argsLen].l = va_arg(argList, long); - break; - case fmtULongDecimal: - case fmtULongHex: - case fmtULongOctal: - case fmtULongBinary: - args[argsLen].ul = va_arg(argList, Gulong); - break; - case fmtDouble: - case fmtDoubleTrim: - case fmtDoubleTrimSmallAware: - args[argsLen].f = va_arg(argList, double); - break; - case fmtChar: - args[argsLen].c = (char)va_arg(argList, int); - break; - case fmtString: - args[argsLen].s = va_arg(argList, char *); - break; - case fmtGooString: - args[argsLen].gs = va_arg(argList, GooString *); - break; - } - ++argsLen; - } - - // format the argument - arg = args[idx]; - switch (ft) { - case fmtIntDecimal: - formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 10, &str, &len); - break; - case fmtIntHex: - formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 16, &str, &len); - break; - case fmtIntOctal: - formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 8, &str, &len); - break; - case fmtIntBinary: - formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 2, &str, &len); - break; - case fmtUIntDecimal: - formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 10, - &str, &len); - break; - case fmtUIntHex: - formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 16, - &str, &len); - break; - case fmtUIntOctal: - formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 8, &str, &len); - break; - case fmtUIntBinary: - formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 2, &str, &len); - break; - case fmtLongDecimal: - formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 10, &str, &len); - break; - case fmtLongHex: - formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 16, &str, &len); - break; - case fmtLongOctal: - formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 8, &str, &len); - break; - case fmtLongBinary: - formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 2, &str, &len); - break; - case fmtULongDecimal: - formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 10, - &str, &len); - break; - case fmtULongHex: - formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 16, - &str, &len); - break; - case fmtULongOctal: - formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 8, &str, &len); - break; - case fmtULongBinary: - formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 2, &str, &len); - break; - case fmtDouble: - formatDouble(arg.f, buf, sizeof(buf), prec, gFalse, &str, &len); - break; - case fmtDoubleTrim: - formatDouble(arg.f, buf, sizeof(buf), prec, gTrue, &str, &len); - break; - case fmtDoubleTrimSmallAware: - formatDoubleSmallAware(arg.f, buf, sizeof(buf), prec, gTrue, &str, &len); - break; - case fmtChar: - buf[0] = arg.c; - str = buf; - len = 1; - reverseAlign = !reverseAlign; - break; - case fmtString: - str = arg.s; - len = strlen(str); - reverseAlign = !reverseAlign; - break; - case fmtGooString: - str = arg.gs->getCString(); - len = arg.gs->getLength(); - reverseAlign = !reverseAlign; - break; - case fmtSpace: - str = buf; - len = 0; - width = arg.i; - break; - } - - // append the formatted arg, handling width and alignment - if (!reverseAlign && len < width) { - for (i = len; i < width; ++i) { - append(' '); - } - } - append(str, len); - if (reverseAlign && len < width) { - for (i = len; i < width; ++i) { - append(' '); - } - } - } - - } else if (*p0 == '}') { - ++p0; - if (*p0 == '}') { - ++p0; - } - append('}'); - - } else { - for (p1 = p0 + 1; *p1 && *p1 != '{' && *p1 != '}'; ++p1) ; - append(p0, p1 - p0); - p0 = p1; - } - } - - gfree(args); - return this; -} - -void GooString::formatInt(long x, char *buf, int bufSize, - GBool zeroFill, int width, int base, - char **p, int *len) { - static char vals[17] = "0123456789abcdef"; - GBool neg; - int start, i, j; - - i = bufSize; - if ((neg = x < 0)) { - x = -x; - } - start = neg ? 1 : 0; - if (x == 0) { - buf[--i] = '0'; - } else { - while (i > start && x) { - buf[--i] = vals[x % base]; - x /= base; - } - } - if (zeroFill) { - for (j = bufSize - i; i > start && j < width - start; ++j) { - buf[--i] = '0'; - } - } - if (neg) { - buf[--i] = '-'; - } - *p = buf + i; - *len = bufSize - i; -} - -void GooString::formatUInt(Gulong x, char *buf, int bufSize, - GBool zeroFill, int width, int base, - char **p, int *len) { - static char vals[17] = "0123456789abcdef"; - int i, j; - - i = bufSize; - if (x == 0) { - buf[--i] = '0'; - } else { - while (i > 0 && x) { - buf[--i] = vals[x % base]; - x /= base; - } - } - if (zeroFill) { - for (j = bufSize - i; i > 0 && j < width; ++j) { - buf[--i] = '0'; - } - } - *p = buf + i; - *len = bufSize - i; -} - -void GooString::formatDouble(double x, char *buf, int bufSize, int prec, - GBool trim, char **p, int *len) { - GBool neg, started; - double x2; - int d, i, j; - - if ((neg = x < 0)) { - x = -x; - } - x = floor(x * pow((double)10, prec) + 0.5); - i = bufSize; - started = !trim; - for (j = 0; j < prec && i > 1; ++j) { - x2 = floor(0.1 * (x + 0.5)); - d = (int)floor(x - 10 * x2 + 0.5); - if (started || d != 0) { - buf[--i] = '0' + d; - started = gTrue; - } - x = x2; - } - if (i > 1 && started) { - buf[--i] = '.'; - } - if (i > 1) { - do { - x2 = floor(0.1 * (x + 0.5)); - d = (int)floor(x - 10 * x2 + 0.5); - buf[--i] = '0' + d; - x = x2; - } while (i > 1 && x); - } - if (neg) { - buf[--i] = '-'; - } - *p = buf + i; - *len = bufSize - i; -} - -void GooString::formatDoubleSmallAware(double x, char *buf, int bufSize, int prec, - GBool trim, char **p, int *len) -{ - double absX = fabs(x); - if (absX >= 0.1) { - formatDouble(x, buf, bufSize, prec, trim, p, len); - } else { - while (absX < 0.1 && prec < MAXIMUM_DOUBLE_PREC) - { - absX = absX * 10; - prec++; - } - formatDouble(x, buf, bufSize, prec, trim, p, len); - } -} - -GooString *GooString::insert(int i, char c) { - return insert(i, (const char*)&c, 1); -} - -GooString *GooString::insert(int i, GooString *str) { - return insert(i, str->getCString(), str->getLength()); -} - -GooString *GooString::insert(int i, const char *str, int lengthA) { - int j; - int prevLen = length; - if (CALC_STRING_LEN == lengthA) - lengthA = strlen(str); - - resize(length + lengthA); - for (j = prevLen; j >= i; --j) - s[j+lengthA] = s[j]; - memcpy(s+i, str, lengthA); - return this; -} - -GooString *GooString::del(int i, int n) { - int j; - - if (n > 0) { - if (i + n > length) { - n = length - i; - } - for (j = i; j <= length - n; ++j) { - s[j] = s[j + n]; - } - resize(length - n); - } - return this; -} - -GooString *GooString::upperCase() { - int i; - - for (i = 0; i < length; ++i) { - if (islower(s[i])) - s[i] = toupper(s[i]); - } - return this; -} - -GooString *GooString::lowerCase() { - int i; - - for (i = 0; i < length; ++i) { - if (isupper(s[i])) - s[i] = tolower(s[i]); - } - return this; -} - -int GooString::cmp(GooString *str) const { - int n1, n2, i, x; - char *p1, *p2; - - n1 = length; - n2 = str->length; - for (i = 0, p1 = s, p2 = str->s; i < n1 && i < n2; ++i, ++p1, ++p2) { - x = *p1 - *p2; - if (x != 0) { - return x; - } - } - return n1 - n2; -} - -int GooString::cmpN(GooString *str, int n) const { - int n1, n2, i, x; - char *p1, *p2; - - n1 = length; - n2 = str->length; - for (i = 0, p1 = s, p2 = str->s; - i < n1 && i < n2 && i < n; - ++i, ++p1, ++p2) { - x = *p1 - *p2; - if (x != 0) { - return x; - } - } - if (i == n) { - return 0; - } - return n1 - n2; -} - -int GooString::cmp(const char *sA) const { - int n1, i, x; - const char *p1, *p2; - - n1 = length; - for (i = 0, p1 = s, p2 = sA; i < n1 && *p2; ++i, ++p1, ++p2) { - x = *p1 - *p2; - if (x != 0) { - return x; - } - } - if (i < n1) { - return 1; - } - if (*p2) { - return -1; - } - return 0; -} - -int GooString::cmpN(const char *sA, int n) const { - int n1, i, x; - const char *p1, *p2; - - n1 = length; - for (i = 0, p1 = s, p2 = sA; i < n1 && *p2 && i < n; ++i, ++p1, ++p2) { - x = *p1 - *p2; - if (x != 0) { - return x; - } - } - if (i == n) { - return 0; - } - if (i < n1) { - return 1; - } - if (*p2) { - return -1; - } - return 0; -} - -GBool GooString::hasUnicodeMarker(void) -{ - return (s[0] & 0xff) == 0xfe && (s[1] & 0xff) == 0xff; -} - -GooString *GooString::sanitizedName(GBool psmode) -{ - GooString *name; - char buf[8]; - int i; - char c; - - name = new GooString(); - - if (psmode) - { - // ghostscript chokes on names that begin with out-of-limits - // numbers, e.g., 1e4foo is handled correctly (as a name), but - // 1e999foo generates a limitcheck error - c = getChar(0); - if (c >= '0' && c <= '9') { - name->append('f'); - } - } - - for (i = 0; i < getLength(); ++i) { - c = getChar(i); - if (c <= (char)0x20 || c >= (char)0x7f || - c == ' ' || - c == '(' || c == ')' || c == '<' || c == '>' || - c == '[' || c == ']' || c == '{' || c == '}' || - c == '/' || c == '%' || c == '#') { - sprintf(buf, "#%02x", c & 0xff); - name->append(buf); - } else { - name->append(c); - } - } - return name; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/GooString.h b/Build/source/libs/poppler/poppler-0.18.0/goo/GooString.h deleted file mode 100644 index e77308dcdf9..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/GooString.h +++ /dev/null @@ -1,179 +0,0 @@ -//======================================================================== -// -// GooString.h -// -// Simple variable-length string type. -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// Copyright (C) 2008-2010 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef GooString_H -#define GooString_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include <stdarg.h> -#include <stdlib.h> // for NULL -#include "gtypes.h" - -class GooString { -public: - - // Create an empty string. - GooString(); - - // Create a string from a C string. - explicit GooString(const char *sA); - - // Create a string from <lengthA> chars at <sA>. This string - // can contain null characters. - GooString(const char *sA, int lengthA); - - // Create a string from <lengthA> chars at <idx> in <str>. - GooString(GooString *str, int idx, int lengthA); - - // Set content of a string to concatination of <s1> and <s2>. They can both - // be NULL. if <s1Len> or <s2Len> is CALC_STRING_LEN, then length of the string - // will be calculated with strlen(). Otherwise we assume they are a valid - // length of string (or its substring) - GooString* Set(const char *s1, int s1Len=CALC_STRING_LEN, const char *s2=NULL, int s2Len=CALC_STRING_LEN); - - // Copy a string. - explicit GooString(const GooString *str); - GooString *copy() const { return new GooString(this); } - - // Concatenate two strings. - GooString(GooString *str1, GooString *str2); - - // Convert an integer to a string. - static GooString *fromInt(int x); - - // Create a formatted string. Similar to printf, but without the - // string overflow issues. Formatting elements consist of: - // {<arg>:[<width>][.<precision>]<type>} - // where: - // - <arg> is the argument number (arg 0 is the first argument - // following the format string) -- NB: args must be first used in - // order; they can be reused in any order - // - <width> is the field width -- negative to reverse the alignment; - // starting with a leading zero to zero-fill (for integers) - // - <precision> is the number of digits to the right of the decimal - // point (for floating point numbers) - // - <type> is one of: - // d, x, o, b -- int in decimal, hex, octal, binary - // ud, ux, uo, ub -- unsigned int - // ld, lx, lo, lb, uld, ulx, ulo, ulb -- long, unsigned long - // f, g -- double - // c -- char - // s -- string (char *) - // t -- GooString * - // w -- blank space; arg determines width - // To get literal curly braces, use {{ or }}. - static GooString *format(char *fmt, ...); - static GooString *formatv(char *fmt, va_list argList); - - // Destructor. - ~GooString(); - - // Get length. - int getLength() { return length; } - - // Get C string. - char *getCString() const { return s; } - - // Get <i>th character. - char getChar(int i) { return s[i]; } - - // Change <i>th character. - void setChar(int i, char c) { s[i] = c; } - - // Clear string to zero length. - GooString *clear(); - - // Append a character or string. - GooString *append(char c); - GooString *append(GooString *str); - GooString *append(const char *str, int lengthA=CALC_STRING_LEN); - - // Append a formatted string. - GooString *appendf(char *fmt, ...); - GooString *appendfv(char *fmt, va_list argList); - - // Insert a character or string. - GooString *insert(int i, char c); - GooString *insert(int i, GooString *str); - GooString *insert(int i, const char *str, int lengthA=CALC_STRING_LEN); - - // Delete a character or range of characters. - GooString *del(int i, int n = 1); - - // Convert string to all-upper/all-lower case. - GooString *upperCase(); - GooString *lowerCase(); - - // Compare two strings: -1:< 0:= +1:> - int cmp(GooString *str) const; - int cmpN(GooString *str, int n) const; - int cmp(const char *sA) const; - int cmpN(const char *sA, int n) const; - - GBool hasUnicodeMarker(void); - - // Sanitizes the string so that it does - // not contain any ( ) < > [ ] { } / % - // The postscript mode also has some more strict checks - // The caller owns the return value - GooString *sanitizedName(GBool psmode); - -private: - GooString(const GooString &other); - GooString& operator=(const GooString &other); - - // you can tweak this number for a different speed/memory usage tradeoffs. - // In libc malloc() rounding is 16 so it's best to choose a value that - // results in sizeof(GooString) be a multiple of 16. - // 24 makes sizeof(GooString) to be 32. - static const int STR_STATIC_SIZE = 24; - // a special value telling that the length of the string is not given - // so it must be calculated from the strings - static const int CALC_STRING_LEN = -1; - - int roundedSize(int len); - - char sStatic[STR_STATIC_SIZE]; - int length; - char *s; - - void resize(int newLength); - static void formatInt(long x, char *buf, int bufSize, - GBool zeroFill, int width, int base, - char **p, int *len); - static void formatUInt(Gulong x, char *buf, int bufSize, - GBool zeroFill, int width, int base, - char **p, int *len); - static void formatDouble(double x, char *buf, int bufSize, int prec, - GBool trim, char **p, int *len); - static void formatDoubleSmallAware(double x, char *buf, int bufSize, int prec, - GBool trim, char **p, int *len); -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/GooTimer.cc b/Build/source/libs/poppler/poppler-0.18.0/goo/GooTimer.cc deleted file mode 100644 index c766c6bf2e4..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/GooTimer.cc +++ /dev/null @@ -1,95 +0,0 @@ -//======================================================================== -// -// GooTimer.cc -// -// This file is licensed under GPLv2 or later -// -// Copyright 2005 Jonathan Blandford <jrb@redhat.com> -// Copyright 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Inspired by gtimer.c in glib, which is Copyright 2000 by the GLib Team -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "GooTimer.h" -#include <string.h> - -#define USEC_PER_SEC 1000000 - -//------------------------------------------------------------------------ -// GooTimer -//------------------------------------------------------------------------ - -GooTimer::GooTimer() { - start(); -} - -void GooTimer::start() { -#ifdef HAVE_GETTIMEOFDAY - gettimeofday(&start_time, NULL); -#elif defined(_WIN32) - QueryPerformanceCounter(&start_time); -#endif - active = true; -} - -void GooTimer::stop() { -#ifdef HAVE_GETTIMEOFDAY - gettimeofday(&end_time, NULL); -#elif defined(_WIN32) - QueryPerformanceCounter(&end_time); -#endif - active = false; -} - -#ifdef HAVE_GETTIMEOFDAY -double GooTimer::getElapsed() -{ - double total; - struct timeval elapsed; - - if (active) - gettimeofday(&end_time, NULL); - - if (start_time.tv_usec > end_time.tv_usec) { - end_time.tv_usec += USEC_PER_SEC; - end_time.tv_sec--; - } - - elapsed.tv_usec = end_time.tv_usec - start_time.tv_usec; - elapsed.tv_sec = end_time.tv_sec - start_time.tv_sec; - - total = elapsed.tv_sec + ((double) elapsed.tv_usec / 1e6); - if (total < 0) - total = 0; - - return total; -} -#elif defined(_WIN32) -double GooTimer::getElapsed() -{ - LARGE_INTEGER freq; - double time_in_secs; - QueryPerformanceFrequency(&freq); - - if (active) - QueryPerformanceCounter(&end_time); - - time_in_secs = (double)(end_time.QuadPart-start_time.QuadPart)/(double)freq.QuadPart; - return time_in_secs * 1000.0; - -} -#else -double GooTimer::getElapsed() -{ -#warning "no support for GooTimer" - return 0; -} -#endif - diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/GooTimer.h b/Build/source/libs/poppler/poppler-0.18.0/goo/GooTimer.h deleted file mode 100644 index d700e501c07..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/GooTimer.h +++ /dev/null @@ -1,57 +0,0 @@ -//======================================================================== -// -// GooTimer.cc -// -// This file is licensed under GPLv2 or later -// -// Copyright 2005 Jonathan Blandford <jrb@redhat.com> -// Copyright 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2011 Albert Astals cid <aacid@kde.org> -// Inspired by gtimer.c in glib, which is Copyright 2000 by the GLib Team -// -//======================================================================== - -#ifndef GOOTIMER_H -#define GOOTIMER_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "poppler/poppler-config.h" -#include "gtypes.h" -#ifdef HAVE_GETTIMEOFDAY -#include <sys/time.h> -#endif - -#ifdef _WIN32 -#include <windows.h> -#endif - -//------------------------------------------------------------------------ -// GooTimer -//------------------------------------------------------------------------ - -class GooTimer { -public: - - // Create a new timer. - GooTimer(); - - void start(); - void stop(); - double getElapsed(); - -private: -#ifdef HAVE_GETTIMEOFDAY - struct timeval start_time; - struct timeval end_time; -#elif defined(_WIN32) - LARGE_INTEGER start_time; - LARGE_INTEGER end_time; -#endif - GBool active; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/ImgWriter.cc b/Build/source/libs/poppler/poppler-0.18.0/goo/ImgWriter.cc deleted file mode 100644 index a30d26d89ad..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/ImgWriter.cc +++ /dev/null @@ -1,15 +0,0 @@ -//======================================================================== -// -// ImgWriter.cpp -// -// This file is licensed under the GPLv2 or later -// -// Copyright (C) 2009 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#include "ImgWriter.h" - -ImgWriter::~ImgWriter() -{ -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/ImgWriter.h b/Build/source/libs/poppler/poppler-0.18.0/goo/ImgWriter.h deleted file mode 100644 index 185c230ef48..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/ImgWriter.h +++ /dev/null @@ -1,33 +0,0 @@ -//======================================================================== -// -// ImgWriter.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> -// Copyright (C) 2009, 2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2010 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2010 Brian Cameron <brian.cameron@oracle.com> -// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// -//======================================================================== - -#ifndef IMGWRITER_H -#define IMGWRITER_H - -#include <stdio.h> - -class ImgWriter -{ - public: - virtual ~ImgWriter(); - virtual bool init(FILE *f, int width, int height, int hDPI, int vDPI) = 0; - - virtual bool writePointers(unsigned char **rowPointers, int rowCount) = 0; - virtual bool writeRow(unsigned char **row) = 0; - - virtual bool close() = 0; - virtual bool supportCMYK() { return false; } -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/JpegWriter.cc b/Build/source/libs/poppler/poppler-0.18.0/goo/JpegWriter.cc deleted file mode 100644 index 7ed5d524ce8..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/JpegWriter.cc +++ /dev/null @@ -1,145 +0,0 @@ -//======================================================================== -// -// JpegWriter.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> -// Copyright (C) 2010 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2010 Harry Roberts <harry.roberts@midnight-labs.org> -// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// -//======================================================================== - -#include "JpegWriter.h" - -#ifdef ENABLE_LIBJPEG - -#include "poppler/Error.h" - -void outputMessage(j_common_ptr cinfo) -{ - char buffer[JMSG_LENGTH_MAX]; - - // Create the message - (*cinfo->err->format_message) (cinfo, buffer); - - // Send it to poppler's error handler - error(-1, "%s", buffer); -} - -JpegWriter::JpegWriter(int q, bool p, J_COLOR_SPACE cm) -: progressive(p), quality(q), colorMode(cm) -{ -} - -JpegWriter::JpegWriter(J_COLOR_SPACE cm) -: progressive(false), quality(-1), colorMode(cm) -{ -} - -JpegWriter::~JpegWriter() -{ - // cleanup - jpeg_destroy_compress(&cinfo); -} - -bool JpegWriter::init(FILE *f, int width, int height, int hDPI, int vDPI) -{ - // Setup error handler - cinfo.err = jpeg_std_error(&jerr); - jerr.output_message = &outputMessage; - - // Initialize libjpeg - jpeg_create_compress(&cinfo); - - // Set destination file - jpeg_stdio_dest(&cinfo, f); - - // Set libjpeg configuration - cinfo.image_width = width; - cinfo.image_height = height; - cinfo.density_unit = 1; // dots per inch - cinfo.X_density = hDPI; - cinfo.Y_density = vDPI; - cinfo.in_color_space = colorMode; /* colorspace of input image */ - /* # of color components per pixel */ - switch (colorMode) { - case JCS_GRAYSCALE: - cinfo.input_components = 1; - break; - case JCS_RGB: - cinfo.input_components = 3; - break; - case JCS_CMYK: - cinfo.input_components = 4; - break; - default: - return false; - } - jpeg_set_defaults(&cinfo); - if (cinfo.in_color_space == JCS_CMYK) { - jpeg_set_colorspace(&cinfo, JCS_YCCK); - cinfo.write_JFIF_header = TRUE; - } - - // Set quality - if( quality >= 0 && quality <= 100 ) { - jpeg_set_quality(&cinfo, quality, true); - } - - // Use progressive mode - if( progressive) { - jpeg_simple_progression(&cinfo); - } - - // Get ready for data - jpeg_start_compress(&cinfo, TRUE); - - return true; -} - -bool JpegWriter::writePointers(unsigned char **rowPointers, int rowCount) -{ - if (colorMode == JCS_CMYK) { - for (int y = 0; y < rowCount; y++) { - unsigned char *row = rowPointers[y]; - for (unsigned int x = 0; x < cinfo.image_width; x++) { - for (int n = 0; n < 4; n++) { - *row = 0xff - *row; - row++; - } - } - } - } - // Write all rows to the file - jpeg_write_scanlines(&cinfo, rowPointers, rowCount); - - return true; -} - -bool JpegWriter::writeRow(unsigned char **rowPointer) -{ - if (colorMode == JCS_CMYK) { - unsigned char *row = rowPointer[0]; - for (unsigned int x = 0; x < cinfo.image_width; x++) { - for (int n = 0; n < 4; n++) { - *row = 0xff - *row; - row++; - } - } - } - // Write the row to the file - jpeg_write_scanlines(&cinfo, rowPointer, 1); - - return true; -} - -bool JpegWriter::close() -{ - jpeg_finish_compress(&cinfo); - - return true; -} - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/JpegWriter.h b/Build/source/libs/poppler/poppler-0.18.0/goo/JpegWriter.h deleted file mode 100644 index 7af6870f6b8..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/JpegWriter.h +++ /dev/null @@ -1,56 +0,0 @@ -//======================================================================== -// -// JpegWriter.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> -// Copyright (C) 2010 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2010 Jürg Billeter <j@bitron.ch> -// Copyright (C) 2010 Harry Roberts <harry.roberts@midnight-labs.org> -// Copyright (C) 2010 Brian Cameron <brian.cameron@oracle.com> -// Copyright (C) 2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// -//======================================================================== - -#ifndef JPEGWRITER_H -#define JPEGWRITER_H - -#include "poppler/poppler-config.h" - -#ifdef ENABLE_LIBJPEG - -#include <sys/types.h> -#include "ImgWriter.h" - -extern "C" { -#include <jpeglib.h> -} - -class JpegWriter : public ImgWriter -{ - public: - JpegWriter(int quality, bool progressive, J_COLOR_SPACE colorMode = JCS_RGB); - JpegWriter(J_COLOR_SPACE colorMode = JCS_RGB); - ~JpegWriter(); - - bool init(FILE *f, int width, int height, int hDPI, int vDPI); - - bool writePointers(unsigned char **rowPointers, int rowCount); - bool writeRow(unsigned char **row); - - bool close(); - bool supportCMYK() { return colorMode == JCS_CMYK; } - - private: - bool progressive; - int quality; - J_COLOR_SPACE colorMode; - struct jpeg_compress_struct cinfo; - struct jpeg_error_mgr jerr; -}; - -#endif - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/Makefile.am b/Build/source/libs/poppler/poppler-0.18.0/goo/Makefile.am deleted file mode 100644 index 1921b1ea4ea..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/Makefile.am +++ /dev/null @@ -1,47 +0,0 @@ -noinst_LTLIBRARIES = libgoo.la - -if ENABLE_XPDF_HEADERS - -poppler_goo_includedir = $(includedir)/poppler/goo -poppler_goo_include_HEADERS = \ - GooHash.h \ - GooList.h \ - GooTimer.h \ - GooMutex.h \ - GooString.h \ - gtypes.h \ - gmem.h \ - gfile.h \ - FixedPoint.h \ - PNGWriter.h \ - JpegWriter.h \ - TiffWriter.h \ - ImgWriter.h \ - GooLikely.h \ - gstrtod.h - -endif - -if BUILD_LIBPNG -libpng_includes = $(LIBPNG_CFLAGS) -endif - -INCLUDES = \ - -I$(top_srcdir) \ - $(libpng_includes) - -libgoo_la_SOURCES = \ - gfile.cc \ - gmempp.cc \ - GooHash.cc \ - GooList.cc \ - GooTimer.cc \ - GooString.cc \ - gmem.cc \ - FixedPoint.cc \ - PNGWriter.cc \ - JpegWriter.cc \ - TiffWriter.cc \ - ImgWriter.cc \ - gtypes_p.h \ - gstrtod.cc diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/Makefile.in b/Build/source/libs/poppler/poppler-0.18.0/goo/Makefile.in deleted file mode 100644 index 8e5464d79fc..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/Makefile.in +++ /dev/null @@ -1,690 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = goo -DIST_COMMON = $(am__poppler_goo_include_HEADERS_DIST) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/define-dir.m4 $(top_srcdir)/m4/gtk-doc.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/introspection.m4 \ - $(top_srcdir)/m4/libjpeg.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h \ - $(top_builddir)/poppler/poppler-config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libgoo_la_LIBADD = -am_libgoo_la_OBJECTS = gfile.lo gmempp.lo GooHash.lo GooList.lo \ - GooTimer.lo GooString.lo gmem.lo FixedPoint.lo PNGWriter.lo \ - JpegWriter.lo TiffWriter.lo ImgWriter.lo gstrtod.lo -libgoo_la_OBJECTS = $(am_libgoo_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/poppler -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -AM_V_CXX = $(am__v_CXX_$(V)) -am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) -am__v_CXX_0 = @echo " CXX " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CXXLD = $(am__v_CXXLD_$(V)) -am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CXXLD_0 = @echo " CXXLD " $@; -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(libgoo_la_SOURCES) -DIST_SOURCES = $(libgoo_la_SOURCES) -am__poppler_goo_include_HEADERS_DIST = GooHash.h GooList.h GooTimer.h \ - GooMutex.h GooString.h gtypes.h gmem.h gfile.h FixedPoint.h \ - PNGWriter.h JpegWriter.h TiffWriter.h ImgWriter.h GooLikely.h \ - gstrtod.h -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(poppler_goo_includedir)" -HEADERS = $(poppler_goo_include_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CAIRO_CFLAGS = @CAIRO_CFLAGS@ -CAIRO_FEATURE = @CAIRO_FEATURE@ -CAIRO_LIBS = @CAIRO_LIBS@ -CAIRO_REQ = @CAIRO_REQ@ -CAIRO_VERSION = @CAIRO_VERSION@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ -FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ -FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ -FREETYPE_CONFIG = @FREETYPE_CONFIG@ -FREETYPE_LIBS = @FREETYPE_LIBS@ -GLIB_MKENUMS = @GLIB_MKENUMS@ -GLIB_REQ = @GLIB_REQ@ -GREP = @GREP@ -GTKDOC_CHECK = @GTKDOC_CHECK@ -GTKDOC_MKPDF = @GTKDOC_MKPDF@ -GTKDOC_REBASE = @GTKDOC_REBASE@ -GTK_TEST_CFLAGS = @GTK_TEST_CFLAGS@ -GTK_TEST_LIBS = @GTK_TEST_LIBS@ -HTML_DIR = @HTML_DIR@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ -INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ -INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ -INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ -INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ -INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ -INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ -INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ -LCMS_CFLAGS = @LCMS_CFLAGS@ -LCMS_LIBS = @LCMS_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ -LIBCURL_LIBS = @LIBCURL_LIBS@ -LIBICONV = @LIBICONV@ -LIBJPEG_LIBS = @LIBJPEG_LIBS@ -LIBOBJS = @LIBOBJS@ -LIBOPENJPEG_LIBS = @LIBOPENJPEG_LIBS@ -LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ -LIBPNG_LIBS = @LIBPNG_LIBS@ -LIBS = @LIBS@ -LIBTIFF_LIBS = @LIBTIFF_LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -MOCQT4 = @MOCQT4@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PC_REQUIRES = @PC_REQUIRES@ -PC_REQUIRES_PRIVATE = @PC_REQUIRES_PRIVATE@ -PKG_CONFIG = @PKG_CONFIG@ -PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ -PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -POPPLER_DATADIR = @POPPLER_DATADIR@ -POPPLER_GLIB_CFLAGS = @POPPLER_GLIB_CFLAGS@ -POPPLER_GLIB_DISABLE_DEPRECATED = @POPPLER_GLIB_DISABLE_DEPRECATED@ -POPPLER_GLIB_DISABLE_SINGLE_INCLUDES = @POPPLER_GLIB_DISABLE_SINGLE_INCLUDES@ -POPPLER_GLIB_LIBS = @POPPLER_GLIB_LIBS@ -POPPLER_MAJOR_VERSION = @POPPLER_MAJOR_VERSION@ -POPPLER_MICRO_VERSION = @POPPLER_MICRO_VERSION@ -POPPLER_MINOR_VERSION = @POPPLER_MINOR_VERSION@ -POPPLER_QT4_CFLAGS = @POPPLER_QT4_CFLAGS@ -POPPLER_QT4_CXXFLAGS = @POPPLER_QT4_CXXFLAGS@ -POPPLER_QT4_LIBS = @POPPLER_QT4_LIBS@ -POPPLER_QT4_TEST_CFLAGS = @POPPLER_QT4_TEST_CFLAGS@ -POPPLER_QT4_TEST_LIBS = @POPPLER_QT4_TEST_LIBS@ -POPPLER_VERSION = @POPPLER_VERSION@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -XMKMF = @XMKMF@ -X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ -X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ -ZLIB_LIBS = @ZLIB_LIBS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -auto_import_flags = @auto_import_flags@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -create_shared_lib = @create_shared_lib@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -win32_libs = @win32_libs@ -noinst_LTLIBRARIES = libgoo.la -@ENABLE_XPDF_HEADERS_TRUE@poppler_goo_includedir = $(includedir)/poppler/goo -@ENABLE_XPDF_HEADERS_TRUE@poppler_goo_include_HEADERS = \ -@ENABLE_XPDF_HEADERS_TRUE@ GooHash.h \ -@ENABLE_XPDF_HEADERS_TRUE@ GooList.h \ -@ENABLE_XPDF_HEADERS_TRUE@ GooTimer.h \ -@ENABLE_XPDF_HEADERS_TRUE@ GooMutex.h \ -@ENABLE_XPDF_HEADERS_TRUE@ GooString.h \ -@ENABLE_XPDF_HEADERS_TRUE@ gtypes.h \ -@ENABLE_XPDF_HEADERS_TRUE@ gmem.h \ -@ENABLE_XPDF_HEADERS_TRUE@ gfile.h \ -@ENABLE_XPDF_HEADERS_TRUE@ FixedPoint.h \ -@ENABLE_XPDF_HEADERS_TRUE@ PNGWriter.h \ -@ENABLE_XPDF_HEADERS_TRUE@ JpegWriter.h \ -@ENABLE_XPDF_HEADERS_TRUE@ TiffWriter.h \ -@ENABLE_XPDF_HEADERS_TRUE@ ImgWriter.h \ -@ENABLE_XPDF_HEADERS_TRUE@ GooLikely.h \ -@ENABLE_XPDF_HEADERS_TRUE@ gstrtod.h - -@BUILD_LIBPNG_TRUE@libpng_includes = $(LIBPNG_CFLAGS) -INCLUDES = \ - -I$(top_srcdir) \ - $(libpng_includes) - -libgoo_la_SOURCES = \ - gfile.cc \ - gmempp.cc \ - GooHash.cc \ - GooList.cc \ - GooTimer.cc \ - GooString.cc \ - gmem.cc \ - FixedPoint.cc \ - PNGWriter.cc \ - JpegWriter.cc \ - TiffWriter.cc \ - ImgWriter.cc \ - gtypes_p.h \ - gstrtod.cc - -all: all-am - -.SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign goo/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign goo/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libgoo.la: $(libgoo_la_OBJECTS) $(libgoo_la_DEPENDENCIES) - $(AM_V_CXXLD)$(CXXLINK) $(libgoo_la_OBJECTS) $(libgoo_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FixedPoint.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GooHash.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GooList.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GooString.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GooTimer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ImgWriter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JpegWriter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PNGWriter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TiffWriter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfile.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gmem.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gmempp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstrtod.Plo@am__quote@ - -.cc.o: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cc.obj: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-poppler_goo_includeHEADERS: $(poppler_goo_include_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(poppler_goo_includedir)" || $(MKDIR_P) "$(DESTDIR)$(poppler_goo_includedir)" - @list='$(poppler_goo_include_HEADERS)'; test -n "$(poppler_goo_includedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(poppler_goo_includedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(poppler_goo_includedir)" || exit $$?; \ - done - -uninstall-poppler_goo_includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(poppler_goo_include_HEADERS)'; test -n "$(poppler_goo_includedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(poppler_goo_includedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(poppler_goo_includedir)" && rm -f $$files - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(poppler_goo_includedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-poppler_goo_includeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-poppler_goo_includeHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-poppler_goo_includeHEADERS \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am \ - uninstall-poppler_goo_includeHEADERS - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/PNGWriter.cc b/Build/source/libs/poppler/poppler-0.18.0/goo/PNGWriter.cc deleted file mode 100644 index f88c3a77a7b..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/PNGWriter.cc +++ /dev/null @@ -1,175 +0,0 @@ -//======================================================================== -// -// PNGWriter.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright (C) 2009 Warren Toomey <wkt@tuhs.org> -// Copyright (C) 2009 Shen Liang <shenzhuxi@gmail.com> -// Copyright (C) 2009 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> -// Copyright (C) 2010, 2011 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2011 Thomas Klausner <wiz@danbala.tuwien.ac.at> -// -//======================================================================== - -#include "PNGWriter.h" - -#ifdef ENABLE_LIBPNG - -#include <zlib.h> -#include <stdlib.h> - -#include "poppler/Error.h" -#include "goo/gmem.h" - -PNGWriter::PNGWriter(Format formatA) : format(formatA) -{ - icc_data = NULL; - icc_data_size = 0; - icc_name = NULL; - sRGB_profile = false; -} - -PNGWriter::~PNGWriter() -{ - /* cleanup heap allocation */ - png_destroy_write_struct(&png_ptr, &info_ptr); - if (icc_data) { - gfree(icc_data); - free(icc_name); - } -} - -void PNGWriter::setICCProfile(const char *name, unsigned char *data, int size) -{ - icc_data = (unsigned char *)gmalloc(size); - memcpy(icc_data, data, size); - icc_data_size = size; - icc_name = strdup(name); -} - -void PNGWriter::setSRGBProfile() -{ - sRGB_profile = true; -} - -bool PNGWriter::init(FILE *f, int width, int height, int hDPI, int vDPI) -{ - /* libpng changed the png_set_iCCP() prototype in 1.5.0 */ -#if PNG_LIBPNG_VER < 10500 - png_charp icc_data_ptr = (png_charp)icc_data; -#else - png_const_bytep icc_data_ptr = (png_const_bytep)icc_data; -#endif - - /* initialize stuff */ - png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!png_ptr) { - error(-1, "png_create_write_struct failed"); - return false; - } - - info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) { - error(-1, "png_create_info_struct failed"); - return false; - } - - if (setjmp(png_jmpbuf(png_ptr))) { - error(-1, "png_jmpbuf failed"); - return false; - } - - /* write header */ - png_init_io(png_ptr, f); - if (setjmp(png_jmpbuf(png_ptr))) { - error(-1, "Error during writing header"); - return false; - } - - // Set up the type of PNG image and the compression level - png_set_compression_level(png_ptr, Z_BEST_COMPRESSION); - - // Silence silly gcc - png_byte bit_depth = -1; - png_byte color_type = -1; - switch (format) { - case RGB: - bit_depth = 8; - color_type = PNG_COLOR_TYPE_RGB; - break; - case RGBA: - bit_depth = 8; - color_type = PNG_COLOR_TYPE_RGB_ALPHA; - break; - case GRAY: - bit_depth = 8; - color_type = PNG_COLOR_TYPE_GRAY; - break; - case MONOCHROME: - bit_depth = 1; - color_type = PNG_COLOR_TYPE_GRAY; - break; - } - png_byte interlace_type = PNG_INTERLACE_NONE; - - png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, color_type, interlace_type, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); - - png_set_pHYs(png_ptr, info_ptr, hDPI/0.0254, vDPI/0.0254, PNG_RESOLUTION_METER); - - if (icc_data) - png_set_iCCP(png_ptr, info_ptr, icc_name, PNG_COMPRESSION_TYPE_BASE, icc_data_ptr, icc_data_size); - else if (sRGB_profile) - png_set_sRGB(png_ptr, info_ptr, PNG_sRGB_INTENT_RELATIVE); - - png_write_info(png_ptr, info_ptr); - if (setjmp(png_jmpbuf(png_ptr))) { - error(-1, "error during writing png info bytes"); - return false; - } - - // pack 1 pixel/byte rows into 8 pixels/byte - if (format == MONOCHROME) - png_set_packing(png_ptr); - - return true; -} - -bool PNGWriter::writePointers(unsigned char **rowPointers, int rowCount) -{ - png_write_image(png_ptr, rowPointers); - /* write bytes */ - if (setjmp(png_jmpbuf(png_ptr))) { - error(-1, "Error during writing bytes"); - return false; - } - - return true; -} - -bool PNGWriter::writeRow(unsigned char **row) -{ - // Write the row to the file - png_write_rows(png_ptr, row, 1); - if (setjmp(png_jmpbuf(png_ptr))) { - error(-1, "error during png row write"); - return false; - } - - return true; -} - -bool PNGWriter::close() -{ - /* end write */ - png_write_end(png_ptr, info_ptr); - if (setjmp(png_jmpbuf(png_ptr))) { - error(-1, "Error during end of write"); - return false; - } - - return true; -} - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/PNGWriter.h b/Build/source/libs/poppler/poppler-0.18.0/goo/PNGWriter.h deleted file mode 100644 index f22495d0d00..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/PNGWriter.h +++ /dev/null @@ -1,63 +0,0 @@ -//======================================================================== -// -// PNGWriter.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright (C) 2009 Warren Toomey <wkt@tuhs.org> -// Copyright (C) 2009 Shen Liang <shenzhuxi@gmail.com> -// Copyright (C) 2009, 2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> -// Copyright (C) 2010, 2011 Adrian Johnson <ajohnson@redneon.com> -// -//======================================================================== - -#ifndef PNGWRITER_H -#define PNGWRITER_H - -#include "poppler/poppler-config.h" - -#ifdef ENABLE_LIBPNG - -#include <cstdio> -#include <png.h> -#include "ImgWriter.h" - -class PNGWriter : public ImgWriter -{ - public: - - /* RGB - 3 bytes/pixel - * RGBA - 4 bytes/pixel - * GRAY - 1 byte/pixel - * MONOCHROME - 1 byte/pixel. PNGWriter will bitpack to 8 pixels/byte - */ - enum Format { RGB, RGBA, GRAY, MONOCHROME }; - - PNGWriter(Format format = RGB); - ~PNGWriter(); - - void setICCProfile(const char *name, unsigned char *data, int size); - void setSRGBProfile(); - - - bool init(FILE *f, int width, int height, int hDPI, int vDPI); - - bool writePointers(unsigned char **rowPointers, int rowCount); - bool writeRow(unsigned char **row); - - bool close(); - - private: - Format format; - png_structp png_ptr; - png_infop info_ptr; - unsigned char *icc_data; - int icc_data_size; - char *icc_name; - bool sRGB_profile; -}; - -#endif - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/TiffWriter.cc b/Build/source/libs/poppler/poppler-0.18.0/goo/TiffWriter.cc deleted file mode 100644 index f63b2450029..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/TiffWriter.cc +++ /dev/null @@ -1,202 +0,0 @@ -//======================================================================== -// -// TiffWriter.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright (C) 2010 William Bader <williambader@hotmail.com> -// -//======================================================================== - -#include "TiffWriter.h" - -#if ENABLE_LIBTIFF - -#include <string.h> - -TiffWriter::~TiffWriter() -{ - // no cleanup needed -} - -TiffWriter::TiffWriter() -{ - f = NULL; - numRows = 0; - curRow = 0; - compressionString = NULL; - splashMode = splashModeRGB8; -} - -// Set the compression type - -void TiffWriter::setCompressionString(const char *compressionStringArg) -{ - compressionString = compressionStringArg; -} - -// Set the bitmap mode - -void TiffWriter::setSplashMode(SplashColorMode splashModeArg) -{ - splashMode = splashModeArg; -} - -// Write a TIFF file. - -bool TiffWriter::init(FILE *openedFile, int width, int height, int hDPI, int vDPI) -{ - unsigned int compression; - uint16 photometric; - uint32 rowsperstrip = (uint32) -1; - int bitspersample; - uint16 samplesperpixel; - const struct compression_name_tag { - const char *compressionName; // name of the compression option from the command line - unsigned int compressionCode; // internal libtiff code - const char *compressionDescription; // descriptive name - } compressionList[] = { - { "none", COMPRESSION_NONE, "no compression" }, - { "ccittrle", COMPRESSION_CCITTRLE, "CCITT modified Huffman RLE" }, - { "ccittfax3", COMPRESSION_CCITTFAX3,"CCITT Group 3 fax encoding" }, - { "ccittt4", COMPRESSION_CCITT_T4, "CCITT T.4 (TIFF 6 name)" }, - { "ccittfax4", COMPRESSION_CCITTFAX4, "CCITT Group 4 fax encoding" }, - { "ccittt6", COMPRESSION_CCITT_T6, "CCITT T.6 (TIFF 6 name)" }, - { "lzw", COMPRESSION_LZW, "Lempel-Ziv & Welch" }, - { "ojpeg", COMPRESSION_OJPEG, "!6.0 JPEG" }, - { "jpeg", COMPRESSION_JPEG, "%JPEG DCT compression" }, - { "next", COMPRESSION_NEXT, "NeXT 2-bit RLE" }, - { "packbits", COMPRESSION_PACKBITS, "Macintosh RLE" }, - { "ccittrlew", COMPRESSION_CCITTRLEW, "CCITT modified Huffman RLE w/ word alignment" }, - { "deflate", COMPRESSION_DEFLATE, "Deflate compression" }, - { "adeflate", COMPRESSION_ADOBE_DEFLATE, "Deflate compression, as recognized by Adobe" }, - { "dcs", COMPRESSION_DCS, "Kodak DCS encoding" }, - { "jbig", COMPRESSION_JBIG, "ISO JBIG" }, - { "jp2000", COMPRESSION_JP2000, "Leadtools JPEG2000" }, - { NULL, 0, NULL } - }; - - // Initialize - - f = NULL; - curRow = 0; - - // Store the number of rows - - numRows = height; - - // Set the compression - - compression = COMPRESSION_NONE; - - if (compressionString == NULL || strcmp(compressionString, "") == 0) { - compression = COMPRESSION_NONE; - } else { - int i; - for (i = 0; compressionList[i].compressionName != NULL; i++) { - if (strcmp(compressionString, compressionList[i].compressionName) == 0) { - compression = compressionList[i].compressionCode; - break; - } - } - if (compressionList[i].compressionName == NULL) { - fprintf(stderr, "TiffWriter: Unknown compression type '%.10s', using 'none'.\n", compressionString); - fprintf(stderr, "Known compression types (the tiff library might not support every type)\n"); - for (i = 0; compressionList[i].compressionName != NULL; i++) { - fprintf(stderr, "%10s %s\n", compressionList[i].compressionName, compressionList[i].compressionDescription); - } - } - } - - // Set bits per sample, samples per pixel, and photometric type from the splash mode - - bitspersample = (splashMode == splashModeMono1? 1: 8); - - switch (splashMode) { - - case splashModeMono1: - case splashModeMono8: - samplesperpixel = 1; - photometric = PHOTOMETRIC_MINISBLACK; - break; - - case splashModeRGB8: - case splashModeBGR8: - samplesperpixel = 3; - photometric = PHOTOMETRIC_RGB; - break; - - default: - fprintf(stderr, "TiffWriter: Mode %d not supported\n", splashMode); - return false; - } - - // Open the file - - if (openedFile == NULL) { - fprintf(stderr, "TiffWriter: No output file given.\n"); - return false; - } - - f = TIFFFdOpen(fileno(openedFile), "-", "w"); - - if (!f) { - return false; - } - - // Set TIFF tags - - TIFFSetField(f, TIFFTAG_IMAGEWIDTH, width); - TIFFSetField(f, TIFFTAG_IMAGELENGTH, height); - TIFFSetField(f, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); - TIFFSetField(f, TIFFTAG_SAMPLESPERPIXEL, samplesperpixel); - TIFFSetField(f, TIFFTAG_BITSPERSAMPLE, bitspersample); - TIFFSetField(f, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); - TIFFSetField(f, TIFFTAG_PHOTOMETRIC, photometric); - TIFFSetField(f, TIFFTAG_COMPRESSION, (uint16) compression); - TIFFSetField(f, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(f, rowsperstrip)); - TIFFSetField(f, TIFFTAG_XRESOLUTION, (double) hDPI); - TIFFSetField(f, TIFFTAG_YRESOLUTION, (double) vDPI); - TIFFSetField(f, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH); - - return true; -} - -bool TiffWriter::writePointers(unsigned char **rowPointers, int rowCount) -{ - // Write all rows to the file - - for (int row = 0; row < rowCount; row++) { - if (TIFFWriteScanline(f, rowPointers[row], row, 0) < 0) { - fprintf(stderr, "TiffWriter: Error writing tiff row %d\n", row); - return false; - } - } - - return true; -} - -bool TiffWriter::writeRow(unsigned char **rowData) -{ - // Add a single row - - if (TIFFWriteScanline(f, *rowData, curRow, 0) < 0) { - fprintf(stderr, "TiffWriter: Error writing tiff row %d\n", curRow); - return false; - } - - curRow++; - - return true; -} - -bool TiffWriter::close() -{ - // Close the file - - TIFFClose(f); - - return true; -} - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/TiffWriter.h b/Build/source/libs/poppler/poppler-0.18.0/goo/TiffWriter.h deleted file mode 100644 index b2b0ea99cf9..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/TiffWriter.h +++ /dev/null @@ -1,54 +0,0 @@ -//======================================================================== -// -// TiffWriter.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright (C) 2010 William Bader <williambader@hotmail.com> -// Copyright (C) 2011 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#ifndef TIFFWRITER_H -#define TIFFWRITER_H - -#include "poppler/poppler-config.h" - -#ifdef ENABLE_LIBTIFF - -#include <sys/types.h> -#include "ImgWriter.h" -#include "splash/SplashTypes.h" - -extern "C" { -#include "tiffio.h" -} - -class TiffWriter : public ImgWriter -{ - public: - TiffWriter(); - ~TiffWriter(); - - void setCompressionString(const char *compressionStringArg); - void setSplashMode(SplashColorMode splashModeArg); - - bool init(FILE *openedFile, int width, int height, int hDPI, int vDPI); - - bool writePointers(unsigned char **rowPointers, int rowCount); - bool writeRow(unsigned char **rowData); - - bool close(); - - private: - TIFF *f; // LibTiff file context - int numRows; // number of rows in the image - int curRow; // number of rows written - const char *compressionString; // compression type - SplashColorMode splashMode; // format of image data - -}; - -#endif - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/gfile.cc b/Build/source/libs/poppler/poppler-0.18.0/goo/gfile.cc deleted file mode 100644 index f48f9f3fbca..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/gfile.cc +++ /dev/null @@ -1,723 +0,0 @@ -//======================================================================== -// -// gfile.cc -// -// Miscellaneous file and directory name manipulation. -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> -// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2008 Adam Batkin <adam@batkin.net> -// Copyright (C) 2008, 2010 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2009 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef _WIN32 -# include <time.h> -#else -# if defined(MACOS) -# include <sys/stat.h> -# elif !defined(ACORN) -# include <sys/types.h> -# include <sys/stat.h> -# include <fcntl.h> -# endif -# include <limits.h> -# include <string.h> -# if !defined(VMS) && !defined(ACORN) && !defined(MACOS) -# include <pwd.h> -# endif -# if defined(VMS) && (__DECCXX_VER < 50200000) -# include <unixlib.h> -# endif -#endif // _WIN32 -#include "GooString.h" -#include "gfile.h" - -// Some systems don't define this, so just make it something reasonably -// large. -#ifndef PATH_MAX -#define PATH_MAX 1024 -#endif - -//------------------------------------------------------------------------ - -GooString *getHomeDir() { -#ifdef VMS - //---------- VMS ---------- - return new GooString("SYS$LOGIN:"); - -#elif defined(__EMX__) || defined(_WIN32) - //---------- OS/2+EMX and Win32 ---------- - char *s; - GooString *ret; - - if ((s = getenv("HOME"))) - ret = new GooString(s); - else - ret = new GooString("."); - return ret; - -#elif defined(ACORN) - //---------- RISCOS ---------- - return new GooString("@"); - -#elif defined(MACOS) - //---------- MacOS ---------- - return new GooString(":"); - -#else - //---------- Unix ---------- - char *s; - struct passwd *pw; - GooString *ret; - - if ((s = getenv("HOME"))) { - ret = new GooString(s); - } else { - if ((s = getenv("USER"))) - pw = getpwnam(s); - else - pw = getpwuid(getuid()); - if (pw) - ret = new GooString(pw->pw_dir); - else - ret = new GooString("."); - } - return ret; -#endif -} - -GooString *getCurrentDir() { - char buf[PATH_MAX+1]; - -#if defined(__EMX__) - if (_getcwd2(buf, sizeof(buf))) -#elif defined(_WIN32) - if (GetCurrentDirectory(sizeof(buf), buf)) -#elif defined(ACORN) - if (strcpy(buf, "@")) -#elif defined(MACOS) - if (strcpy(buf, ":")) -#else - if (getcwd(buf, sizeof(buf))) -#endif - return new GooString(buf); - return new GooString(); -} - -GooString *appendToPath(GooString *path, char *fileName) { -#if defined(VMS) - //---------- VMS ---------- - //~ this should handle everything necessary for file - //~ requesters, but it's certainly not complete - char *p0, *p1, *p2; - char *q1; - - p0 = path->getCString(); - p1 = p0 + path->getLength() - 1; - if (!strcmp(fileName, "-")) { - if (*p1 == ']') { - for (p2 = p1; p2 > p0 && *p2 != '.' && *p2 != '['; --p2) ; - if (*p2 == '[') - ++p2; - path->del(p2 - p0, p1 - p2); - } else if (*p1 == ':') { - path->append("[-]"); - } else { - path->clear(); - path->append("[-]"); - } - } else if ((q1 = strrchr(fileName, '.')) && !strncmp(q1, ".DIR;", 5)) { - if (*p1 == ']') { - path->insert(p1 - p0, '.'); - path->insert(p1 - p0 + 1, fileName, q1 - fileName); - } else if (*p1 == ':') { - path->append('['); - path->append(']'); - path->append(fileName, q1 - fileName); - } else { - path->clear(); - path->append(fileName, q1 - fileName); - } - } else { - if (*p1 != ']' && *p1 != ':') - path->clear(); - path->append(fileName); - } - return path; - -#elif defined(_WIN32) - //---------- Win32 ---------- - GooString *tmp; - char buf[256]; - char *fp; - - tmp = new GooString(path); - tmp->append('/'); - tmp->append(fileName); - GetFullPathName(tmp->getCString(), sizeof(buf), buf, &fp); - delete tmp; - path->clear(); - path->append(buf); - return path; - -#elif defined(ACORN) - //---------- RISCOS ---------- - char *p; - int i; - - path->append("."); - i = path->getLength(); - path->append(fileName); - for (p = path->getCString() + i; *p; ++p) { - if (*p == '/') { - *p = '.'; - } else if (*p == '.') { - *p = '/'; - } - } - return path; - -#elif defined(MACOS) - //---------- MacOS ---------- - char *p; - int i; - - path->append(":"); - i = path->getLength(); - path->append(fileName); - for (p = path->getCString() + i; *p; ++p) { - if (*p == '/') { - *p = ':'; - } else if (*p == '.') { - *p = ':'; - } - } - return path; - -#elif defined(__EMX__) - //---------- OS/2+EMX ---------- - int i; - - // appending "." does nothing - if (!strcmp(fileName, ".")) - return path; - - // appending ".." goes up one directory - if (!strcmp(fileName, "..")) { - for (i = path->getLength() - 2; i >= 0; --i) { - if (path->getChar(i) == '/' || path->getChar(i) == '\\' || - path->getChar(i) == ':') - break; - } - if (i <= 0) { - if (path->getChar(0) == '/' || path->getChar(0) == '\\') { - path->del(1, path->getLength() - 1); - } else if (path->getLength() >= 2 && path->getChar(1) == ':') { - path->del(2, path->getLength() - 2); - } else { - path->clear(); - path->append(".."); - } - } else { - if (path->getChar(i-1) == ':') - ++i; - path->del(i, path->getLength() - i); - } - return path; - } - - // otherwise, append "/" and new path component - if (path->getLength() > 0 && - path->getChar(path->getLength() - 1) != '/' && - path->getChar(path->getLength() - 1) != '\\') - path->append('/'); - path->append(fileName); - return path; - -#else - //---------- Unix ---------- - int i; - - // appending "." does nothing - if (!strcmp(fileName, ".")) - return path; - - // appending ".." goes up one directory - if (!strcmp(fileName, "..")) { - for (i = path->getLength() - 2; i >= 0; --i) { - if (path->getChar(i) == '/') - break; - } - if (i <= 0) { - if (path->getChar(0) == '/') { - path->del(1, path->getLength() - 1); - } else { - path->clear(); - path->append(".."); - } - } else { - path->del(i, path->getLength() - i); - } - return path; - } - - // otherwise, append "/" and new path component - if (path->getLength() > 0 && - path->getChar(path->getLength() - 1) != '/') - path->append('/'); - path->append(fileName); - return path; -#endif -} - -GooString *grabPath(char *fileName) { -#ifdef VMS - //---------- VMS ---------- - char *p; - - if ((p = strrchr(fileName, ']'))) - return new GooString(fileName, p + 1 - fileName); - if ((p = strrchr(fileName, ':'))) - return new GooString(fileName, p + 1 - fileName); - return new GooString(); - -#elif defined(__EMX__) || defined(_WIN32) - //---------- OS/2+EMX and Win32 ---------- - char *p; - - if ((p = strrchr(fileName, '/'))) - return new GooString(fileName, p - fileName); - if ((p = strrchr(fileName, '\\'))) - return new GooString(fileName, p - fileName); - if ((p = strrchr(fileName, ':'))) - return new GooString(fileName, p + 1 - fileName); - return new GooString(); - -#elif defined(ACORN) - //---------- RISCOS ---------- - char *p; - - if ((p = strrchr(fileName, '.'))) - return new GooString(fileName, p - fileName); - return new GooString(); - -#elif defined(MACOS) - //---------- MacOS ---------- - char *p; - - if ((p = strrchr(fileName, ':'))) - return new GooString(fileName, p - fileName); - return new GooString(); - -#else - //---------- Unix ---------- - char *p; - - if ((p = strrchr(fileName, '/'))) - return new GooString(fileName, p - fileName); - return new GooString(); -#endif -} - -GBool isAbsolutePath(char *path) { -#ifdef VMS - //---------- VMS ---------- - return strchr(path, ':') || - (path[0] == '[' && path[1] != '.' && path[1] != '-'); - -#elif defined(__EMX__) || defined(_WIN32) - //---------- OS/2+EMX and Win32 ---------- - return path[0] == '/' || path[0] == '\\' || path[1] == ':'; - -#elif defined(ACORN) - //---------- RISCOS ---------- - return path[0] == '$'; - -#elif defined(MACOS) - //---------- MacOS ---------- - return path[0] != ':'; - -#else - //---------- Unix ---------- - return path[0] == '/'; -#endif -} - -GooString *makePathAbsolute(GooString *path) { -#ifdef VMS - //---------- VMS ---------- - char buf[PATH_MAX+1]; - - if (!isAbsolutePath(path->getCString())) { - if (getcwd(buf, sizeof(buf))) { - path->insert(0, buf); - } - } - return path; - -#elif defined(_WIN32) - //---------- Win32 ---------- - char buf[MAX_PATH]; - char *fp; - - buf[0] = '\0'; - if (!GetFullPathName(path->getCString(), MAX_PATH, buf, &fp)) { - path->clear(); - return path; - } - path->clear(); - path->append(buf); - return path; - -#elif defined(ACORN) - //---------- RISCOS ---------- - path->insert(0, '@'); - return path; - -#elif defined(MACOS) - //---------- MacOS ---------- - path->del(0, 1); - return path; - -#else - //---------- Unix and OS/2+EMX ---------- - struct passwd *pw; - char buf[PATH_MAX+1]; - GooString *s; - char *p1, *p2; - int n; - - if (path->getChar(0) == '~') { - if (path->getChar(1) == '/' || -#ifdef __EMX__ - path->getChar(1) == '\\' || -#endif - path->getLength() == 1) { - path->del(0, 1); - s = getHomeDir(); - path->insert(0, s); - delete s; - } else { - p1 = path->getCString() + 1; -#ifdef __EMX__ - for (p2 = p1; *p2 && *p2 != '/' && *p2 != '\\'; ++p2) ; -#else - for (p2 = p1; *p2 && *p2 != '/'; ++p2) ; -#endif - if ((n = p2 - p1) > PATH_MAX) - n = PATH_MAX; - strncpy(buf, p1, n); - buf[n] = '\0'; - if ((pw = getpwnam(buf))) { - path->del(0, p2 - p1 + 1); - path->insert(0, pw->pw_dir); - } - } - } else if (!isAbsolutePath(path->getCString())) { - if (getcwd(buf, sizeof(buf))) { -#ifndef __EMX__ - path->insert(0, '/'); -#endif - path->insert(0, buf); - } - } - return path; -#endif -} - -time_t getModTime(char *fileName) { -#ifdef _WIN32 - //~ should implement this, but it's (currently) only used in xpdf - return 0; -#else - struct stat statBuf; - - if (stat(fileName, &statBuf)) { - return 0; - } - return statBuf.st_mtime; -#endif -} - -GBool openTempFile(GooString **name, FILE **f, char *mode) { -#if defined(_WIN32) - //---------- Win32 ---------- - char *tempDir; - GooString *s, *s2; - char buf[32]; - FILE *f2; - int t, i; - - // this has the standard race condition problem, but I haven't found - // a better way to generate temp file names with extensions on - // Windows - if ((tempDir = getenv("TEMP"))) { - s = new GooString(tempDir); - s->append('\\'); - } else { - s = new GooString(); - } - s->append("x"); - t = (int)time(NULL); - for (i = 0; i < 1000; ++i) { - sprintf(buf, "%d", t + i); - s2 = s->copy()->append(buf); - if (!(f2 = fopen(s2->getCString(), "r"))) { - if (!(f2 = fopen(s2->getCString(), mode))) { - delete s2; - delete s; - return gFalse; - } - *name = s2; - *f = f2; - delete s; - return gTrue; - } - fclose(f2); - delete s2; - } - delete s; - return gFalse; -#elif defined(VMS) || defined(__EMX__) || defined(ACORN) || defined(MACOS) - //---------- non-Unix ---------- - char *s; - - // There is a security hole here: an attacker can create a symlink - // with this file name after the tmpnam call and before the fopen - // call. I will happily accept fixes to this function for non-Unix - // OSs. - if (!(s = tmpnam(NULL))) { - return gFalse; - } - *name = new GooString(s); - if (!(*f = fopen((*name)->getCString(), mode))) { - delete (*name); - return gFalse; - } - return gTrue; -#else - //---------- Unix ---------- - char *s; - int fd; - -#if HAVE_MKSTEMP - if ((s = getenv("TMPDIR"))) { - *name = new GooString(s); - } else { - *name = new GooString("/tmp"); - } - (*name)->append("/XXXXXX"); - fd = mkstemp((*name)->getCString()); -#else // HAVE_MKSTEMP - if (!(s = tmpnam(NULL))) { - return gFalse; - } - *name = new GooString(s); - fd = open((*name)->getCString(), O_WRONLY | O_CREAT | O_EXCL, 0600); -#endif // HAVE_MKSTEMP - if (fd < 0 || !(*f = fdopen(fd, mode))) { - delete *name; - return gFalse; - } - return gTrue; -#endif -} - -GBool executeCommand(char *cmd) { -#ifdef VMS - return system(cmd) ? gTrue : gFalse; -#else - return system(cmd) ? gFalse : gTrue; -#endif -} - -char *getLine(char *buf, int size, FILE *f) { - int c, i; - - i = 0; - while (i < size - 1) { - if ((c = fgetc(f)) == EOF) { - break; - } - buf[i++] = (char)c; - if (c == '\x0a') { - break; - } - if (c == '\x0d') { - c = fgetc(f); - if (c == '\x0a' && i < size - 1) { - buf[i++] = (char)c; - } else if (c != EOF) { - ungetc(c, f); - } - break; - } - } - buf[i] = '\0'; - if (i == 0) { - return NULL; - } - return buf; -} - -//------------------------------------------------------------------------ -// GDir and GDirEntry -//------------------------------------------------------------------------ - -GDirEntry::GDirEntry(char *dirPath, char *nameA, GBool doStat) { -#ifdef VMS - char *p; -#elif defined(_WIN32) - DWORD fa; -#elif defined(ACORN) -#else - struct stat st; -#endif - - name = new GooString(nameA); - dir = gFalse; - fullPath = new GooString(dirPath); - appendToPath(fullPath, nameA); - if (doStat) { -#ifdef VMS - if (!strcmp(nameA, "-") || - ((p = strrchr(nameA, '.')) && !strncmp(p, ".DIR;", 5))) - dir = gTrue; -#elif defined(ACORN) -#else -#ifdef _WIN32 - fa = GetFileAttributes(fullPath->getCString()); - dir = (fa != 0xFFFFFFFF && (fa & FILE_ATTRIBUTE_DIRECTORY)); -#else - if (stat(fullPath->getCString(), &st) == 0) - dir = S_ISDIR(st.st_mode); -#endif -#endif - } -} - -GDirEntry::~GDirEntry() { - delete fullPath; - delete name; -} - -GDir::GDir(char *name, GBool doStatA) { - path = new GooString(name); - doStat = doStatA; -#if defined(_WIN32) - GooString *tmp; - - tmp = path->copy(); - tmp->append("/*.*"); - hnd = FindFirstFile(tmp->getCString(), &ffd); - delete tmp; -#elif defined(ACORN) -#elif defined(MACOS) -#else - dir = opendir(name); -#ifdef VMS - needParent = strchr(name, '[') != NULL; -#endif -#endif -} - -GDir::~GDir() { - delete path; -#if defined(_WIN32) - if (hnd != INVALID_HANDLE_VALUE) { - FindClose(hnd); - hnd = INVALID_HANDLE_VALUE; - } -#elif defined(ACORN) -#elif defined(MACOS) -#else - if (dir) - closedir(dir); -#endif -} - -GDirEntry *GDir::getNextEntry() { - GDirEntry *e; - -#if defined(_WIN32) - if (hnd != INVALID_HANDLE_VALUE) { - e = new GDirEntry(path->getCString(), ffd.cFileName, doStat); - if (!FindNextFile(hnd, &ffd)) { - FindClose(hnd); - hnd = INVALID_HANDLE_VALUE; - } - } else { - e = NULL; - } -#elif defined(ACORN) -#elif defined(MACOS) -#elif defined(VMS) - struct dirent *ent; - e = NULL; - if (dir) { - if (needParent) { - e = new GDirEntry(path->getCString(), "-", doStat); - needParent = gFalse; - return e; - } - ent = readdir(dir); - if (ent) { - e = new GDirEntry(path->getCString(), ent->d_name, doStat); - } - } -#else - struct dirent *ent; - e = NULL; - if (dir) { - do { - ent = readdir(dir); - } - while (ent && (!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, ".."))); - if (ent) { - e = new GDirEntry(path->getCString(), ent->d_name, doStat); - } - } -#endif - - return e; -} - -void GDir::rewind() { -#ifdef _WIN32 - GooString *tmp; - - if (hnd != INVALID_HANDLE_VALUE) - FindClose(hnd); - tmp = path->copy(); - tmp->append("/*.*"); - hnd = FindFirstFile(tmp->getCString(), &ffd); - delete tmp; -#elif defined(ACORN) -#elif defined(MACOS) -#else - if (dir) - rewinddir(dir); -#ifdef VMS - needParent = strchr(path->getCString(), '[') != NULL; -#endif -#endif -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/gfile.h b/Build/source/libs/poppler/poppler-0.18.0/goo/gfile.h deleted file mode 100644 index 0bc010e7b58..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/gfile.h +++ /dev/null @@ -1,159 +0,0 @@ -//======================================================================== -// -// gfile.h -// -// Miscellaneous file and directory name manipulation. -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2009, 2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef GFILE_H -#define GFILE_H - -#include "poppler/poppler-config.h" -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -extern "C" { -#if defined(_WIN32) -# include <sys/stat.h> -# ifdef FPTEX -# include <win32lib.h> -# else -# include <windows.h> -# endif -#elif defined(ACORN) -#elif defined(MACOS) -# include <ctime.h> -#else -# include <unistd.h> -# include <sys/types.h> -# ifdef VMS -# include "vms_dirent.h" -# elif HAVE_DIRENT_H -# include <dirent.h> -# define NAMLEN(d) strlen((d)->d_name) -# else -# define dirent direct -# define NAMLEN(d) (d)->d_namlen -# if HAVE_SYS_NDIR_H -# include <sys/ndir.h> -# endif -# if HAVE_SYS_DIR_H -# include <sys/dir.h> -# endif -# if HAVE_NDIR_H -# include <ndir.h> -# endif -# endif -#endif -} -#include "gtypes.h" - -class GooString; - -//------------------------------------------------------------------------ - -// Get home directory path. -extern GooString *getHomeDir(); - -// Get current directory. -extern GooString *getCurrentDir(); - -// Append a file name to a path string. <path> may be an empty -// string, denoting the current directory). Returns <path>. -extern GooString *appendToPath(GooString *path, char *fileName); - -// Grab the path from the front of the file name. If there is no -// directory component in <fileName>, returns an empty string. -extern GooString *grabPath(char *fileName); - -// Is this an absolute path or file name? -extern GBool isAbsolutePath(char *path); - -// Make this path absolute by prepending current directory (if path is -// relative) or prepending user's directory (if path starts with '~'). -extern GooString *makePathAbsolute(GooString *path); - -// Get the modification time for <fileName>. Returns 0 if there is an -// error. -extern time_t getModTime(char *fileName); - -// Create a temporary file and open it for writing. If <ext> is not -// NULL, it will be used as the file name extension. Returns both the -// name and the file pointer. For security reasons, all writing -// should be done to the returned file pointer; the file may be -// reopened later for reading, but not for writing. The <mode> string -// should be "w" or "wb". Returns true on success. -extern GBool openTempFile(GooString **name, FILE **f, char *mode); - -// Execute <command>. Returns true on success. -extern GBool executeCommand(char *cmd); - -// Just like fgets, but handles Unix, Mac, and/or DOS end-of-line -// conventions. -extern char *getLine(char *buf, int size, FILE *f); - -//------------------------------------------------------------------------ -// GDir and GDirEntry -//------------------------------------------------------------------------ - -class GDirEntry { -public: - - GDirEntry(char *dirPath, char *nameA, GBool doStat); - ~GDirEntry(); - GooString *getName() { return name; } - GooString *getFullPath() { return fullPath; } - GBool isDir() { return dir; } - -private: - - GooString *name; // dir/file name - GooString *fullPath; - GBool dir; // is it a directory? -}; - -class GDir { -public: - - GDir(char *name, GBool doStatA = gTrue); - ~GDir(); - GDirEntry *getNextEntry(); - void rewind(); - -private: - - GooString *path; // directory path - GBool doStat; // call stat() for each entry? -#if defined(_WIN32) - WIN32_FIND_DATA ffd; - HANDLE hnd; -#elif defined(ACORN) -#elif defined(MACOS) -#else - DIR *dir; // the DIR structure from opendir() -#ifdef VMS - GBool needParent; // need to return an entry for [-] -#endif -#endif -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/gmem.cc b/Build/source/libs/poppler/poppler-0.18.0/goo/gmem.cc deleted file mode 100644 index 3e9adb0582c..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/gmem.cc +++ /dev/null @@ -1,326 +0,0 @@ -/* - * gmem.c - * - * Memory routines with out-of-memory checking. - * - * Copyright 1996-2003 Glyph & Cog, LLC - */ - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Takashi Iwai <tiwai@suse.de> -// Copyright (C) 2007-2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2008 Jonathan Kew <jonathan_kew@sil.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -#include <string.h> -#include <limits.h> -#include "gmem.h" - -#ifdef DEBUG_MEM - -typedef struct _GMemHdr { - unsigned int magic; - int size; - int index; - struct _GMemHdr *next, *prev; -} GMemHdr; - -#define gMemHdrSize ((sizeof(GMemHdr) + 7) & ~7) -#define gMemTrlSize (sizeof(long)) - -#define gMemMagic 0xabcd9999 - -#if gmemTrlSize==8 -#define gMemDeadVal 0xdeadbeefdeadbeefUL -#else -#define gMemDeadVal 0xdeadbeefUL -#endif - -/* round data size so trailer will be aligned */ -#define gMemDataSize(size) \ - ((((size) + gMemTrlSize - 1) / gMemTrlSize) * gMemTrlSize) - -static GMemHdr *gMemHead = NULL; -static GMemHdr *gMemTail = NULL; - -static int gMemIndex = 0; -static int gMemAlloc = 0; -static int gMemInUse = 0; - -#endif /* DEBUG_MEM */ - -inline static void *gmalloc(size_t size, bool checkoverflow) { -#ifdef DEBUG_MEM - int size1; - char *mem; - GMemHdr *hdr; - void *data; - unsigned long *trl, *p; - - if (size <= 0) { - return NULL; - } - size1 = gMemDataSize(size); - if (!(mem = (char *)malloc(size1 + gMemHdrSize + gMemTrlSize))) { - fprintf(stderr, "Out of memory\n"); - if (checkoverflow) return NULL; - else exit(1); - } - hdr = (GMemHdr *)mem; - data = (void *)(mem + gMemHdrSize); - trl = (unsigned long *)(mem + gMemHdrSize + size1); - hdr->magic = gMemMagic; - hdr->size = size; - hdr->index = gMemIndex++; - if (gMemTail) { - gMemTail->next = hdr; - hdr->prev = gMemTail; - gMemTail = hdr; - } else { - hdr->prev = NULL; - gMemHead = gMemTail = hdr; - } - hdr->next = NULL; - ++gMemAlloc; - gMemInUse += size; - for (p = (unsigned long *)data; p <= trl; ++p) { - *p = gMemDeadVal; - } - return data; -#else - void *p; - - if (size <= 0) { - return NULL; - } - if (!(p = malloc(size))) { - fprintf(stderr, "Out of memory\n"); - if (checkoverflow) return NULL; - else exit(1); - } - return p; -#endif -} - -void *gmalloc(size_t size) { - return gmalloc(size, false); -} - -void *gmalloc_checkoverflow(size_t size) { - return gmalloc(size, true); -} - -inline static void *grealloc(void *p, size_t size, bool checkoverflow) { -#ifdef DEBUG_MEM - GMemHdr *hdr; - void *q; - int oldSize; - - if (size <= 0) { - if (p) { - gfree(p); - } - return NULL; - } - if (p) { - hdr = (GMemHdr *)((char *)p - gMemHdrSize); - oldSize = hdr->size; - q = gmalloc(size, checkoverflow); - memcpy(q, p, size < oldSize ? size : oldSize); - gfree(p); - } else { - q = gmalloc(size, checkoverflow); - } - return q; -#else - void *q; - - if (size <= 0) { - if (p) { - free(p); - } - return NULL; - } - if (p) { - q = realloc(p, size); - } else { - q = malloc(size); - } - if (!q) { - fprintf(stderr, "Out of memory\n"); - if (checkoverflow) return NULL; - else exit(1); - } - return q; -#endif -} - -void *grealloc(void *p, size_t size) { - return grealloc(p, size, false); -} - -void *grealloc_checkoverflow(void *p, size_t size) { - return grealloc(p, size, true); -} - -inline static void *gmallocn(int nObjs, int objSize, bool checkoverflow) { - int n; - - if (nObjs == 0) { - return NULL; - } - n = nObjs * objSize; - if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) { - fprintf(stderr, "Bogus memory allocation size\n"); - if (checkoverflow) return NULL; - else exit(1); - } - return gmalloc(n, checkoverflow); -} - -void *gmallocn(int nObjs, int objSize) { - return gmallocn(nObjs, objSize, false); -} - -void *gmallocn_checkoverflow(int nObjs, int objSize) { - return gmallocn(nObjs, objSize, true); -} - -inline static void *gmallocn3(int a, int b, int c, bool checkoverflow) { - int n = a * b; - if (b <= 0 || a < 0 || a >= INT_MAX / b) { - fprintf(stderr, "Bogus memory allocation size\n"); - if (checkoverflow) return NULL; - else exit(1); - } - return gmallocn(n, c, checkoverflow); -} - -void *gmallocn3(int a, int b, int c) { - return gmallocn3(a, b, c, false); -} - -void *gmallocn3_checkoverflow(int a, int b, int c) { - return gmallocn3(a, b, c, true); -} - -inline static void *greallocn(void *p, int nObjs, int objSize, bool checkoverflow) { - int n; - - if (nObjs == 0) { - if (p) { - gfree(p); - } - return NULL; - } - n = nObjs * objSize; - if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) { - fprintf(stderr, "Bogus memory allocation size\n"); - if (checkoverflow) { - gfree(p); - return NULL; - } else { - exit(1); - } - } - return grealloc(p, n, checkoverflow); -} - -void *greallocn(void *p, int nObjs, int objSize) { - return greallocn(p, nObjs, objSize, false); -} - -void *greallocn_checkoverflow(void *p, int nObjs, int objSize) { - return greallocn(p, nObjs, objSize, true); -} - -void gfree(void *p) { -#ifdef DEBUG_MEM - int size; - GMemHdr *hdr; - unsigned long *trl, *clr; - - if (p) { - hdr = (GMemHdr *)((char *)p - gMemHdrSize); - if (hdr->magic == gMemMagic && - ((hdr->prev == NULL) == (hdr == gMemHead)) && - ((hdr->next == NULL) == (hdr == gMemTail))) { - if (hdr->prev) { - hdr->prev->next = hdr->next; - } else { - gMemHead = hdr->next; - } - if (hdr->next) { - hdr->next->prev = hdr->prev; - } else { - gMemTail = hdr->prev; - } - --gMemAlloc; - gMemInUse -= hdr->size; - size = gMemDataSize(hdr->size); - trl = (unsigned long *)((char *)hdr + gMemHdrSize + size); - if (*trl != gMemDeadVal) { - fprintf(stderr, "Overwrite past end of block %d at address %p\n", - hdr->index, p); - } - for (clr = (unsigned long *)hdr; clr <= trl; ++clr) { - *clr = gMemDeadVal; - } - free(hdr); - } else { - fprintf(stderr, "Attempted to free bad address %p\n", p); - } - } -#else - if (p) { - free(p); - } -#endif -} - -#ifdef DEBUG_MEM -void gMemReport(FILE *f) { - GMemHdr *p; - - fprintf(f, "%d memory allocations in all\n", gMemIndex); - if (gMemAlloc > 0) { - fprintf(f, "%d memory blocks left allocated:\n", gMemAlloc); - fprintf(f, " index size\n"); - fprintf(f, "-------- --------\n"); - for (p = gMemHead; p; p = p->next) { - fprintf(f, "%8d %8d\n", p->index, p->size); - } - } else { - fprintf(f, "No memory blocks left allocated\n"); - } -} -#endif - -char *copyString(char *s) { - char *s1; - - s1 = (char *)gmalloc(strlen(s) + 1); - strcpy(s1, s); - return s1; -} - -char *gstrndup(const char *s, size_t n) { - char *s1 = (char*)gmalloc(n + 1); /* cannot return NULL for size > 0 */ - s1[n] = '\0'; - memcpy(s1, s, n); - return s1; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/gmem.h b/Build/source/libs/poppler/poppler-0.18.0/goo/gmem.h deleted file mode 100644 index 405c8291fd4..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/gmem.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * gmem.h - * - * Memory routines with out-of-memory checking. - * - * Copyright 1996-2003 Glyph & Cog, LLC - */ - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Takashi Iwai <tiwai@suse.de> -// Copyright (C) 2007-2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2008 Jonathan Kew <jonathan_kew@sil.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef GMEM_H -#define GMEM_H - -#include <stdio.h> -#include "poppler/poppler-config.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Same as malloc, but prints error message and exits if malloc() - * returns NULL. - */ -extern void *gmalloc(size_t size); -extern void *gmalloc_checkoverflow(size_t size); - -/* - * Same as realloc, but prints error message and exits if realloc() - * returns NULL. If <p> is NULL, calls malloc instead of realloc(). - */ -extern void *grealloc(void *p, size_t size); -extern void *grealloc_checkoverflow(size_t size); - -/* - * These are similar to gmalloc and grealloc, but take an object count - * and size. The result is similar to allocating nObjs * objSize - * bytes, but there is an additional error check that the total size - * doesn't overflow an int. - * The gmallocn_checkoverflow variant returns NULL instead of exiting - * the application if a overflow is detected - */ -extern void *gmallocn(int nObjs, int objSize); -extern void *gmallocn_checkoverflow(int nObjs, int objSize); -extern void *gmallocn3(int a, int b, int c); -extern void *gmallocn3_checkoverflow(int a, int b, int c); -extern void *greallocn(void *p, int nObjs, int objSize); -extern void *greallocn_checkoverflow(void *p, int nObjs, int objSize); - -/* - * Same as free, but checks for and ignores NULL pointers. - */ -extern void gfree(void *p); - -#ifdef DEBUG_MEM -/* - * Report on unfreed memory. - */ -extern void gMemReport(FILE *f); -#else -#define gMemReport(f) -#endif - -/* - * Allocate memory and copy a string into it. - */ -extern char *copyString(char *s); - -/* - * Allocate memory and copy a limited-length string to it. - */ -extern char *gstrndup(const char *s, size_t n); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/gmempp.cc b/Build/source/libs/poppler/poppler-0.18.0/goo/gmempp.cc deleted file mode 100644 index a70338ca3ce..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/gmempp.cc +++ /dev/null @@ -1,32 +0,0 @@ -//======================================================================== -// -// gmempp.cc -// -// Use gmalloc/gfree for C++ new/delete operators. -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include <config.h> -#include "gmem.h" - -#ifdef DEBUG_MEM - -void *operator new(size_t size) { - return gmalloc((int)size); -} - -void *operator new[](size_t size) { - return gmalloc((int)size); -} - -void operator delete(void *p) { - gfree(p); -} - -void operator delete[](void *p) { - gfree(p); -} - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/gstrtod.cc b/Build/source/libs/poppler/poppler-0.18.0/goo/gstrtod.cc deleted file mode 100644 index e6c3a00741f..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/gstrtod.cc +++ /dev/null @@ -1,147 +0,0 @@ -/* This file is part of Libspectre. - * - * Copyright (C) 2007 Albert Astals Cid <aacid@kde.org> - * Copyright (C) 2007 Carlos Garcia Campos <carlosgc@gnome.org> - * - * Libspectre is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * Libspectre is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -/* This function comes from spectre-utils from libspectre */ - -#include "gstrtod.h" - -#include <clocale> -#include <cerrno> -#include <cstdlib> -#include <cstring> - -#define ascii_isspace(c) \ - (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v') -#define ascii_isdigit(c) \ - (c >= '0' && c <= '9') - -double gatof(const char *nptr) -{ - return gstrtod(nptr, NULL); -} - -double gstrtod(const char *nptr, char **endptr) -{ - char *fail_pos; - double val; - struct lconv *locale_data; - const char *decimal_point; - int decimal_point_len; - const char *p, *decimal_point_pos; - const char *end = NULL; /* Silence gcc */ - int strtod_errno; - - fail_pos = NULL; - - locale_data = localeconv (); - decimal_point = locale_data->decimal_point; - decimal_point_len = strlen (decimal_point); - - decimal_point_pos = NULL; - end = NULL; - - if (decimal_point[0] != '.' || decimal_point[1] != 0) { - p = nptr; - /* Skip leading space */ - while (ascii_isspace (*p)) - p++; - - /* Skip leading optional sign */ - if (*p == '+' || *p == '-') - p++; - - if (ascii_isdigit (*p) || *p == '.') { - while (ascii_isdigit (*p)) - p++; - - if (*p == '.') - decimal_point_pos = p++; - - while (ascii_isdigit (*p)) - p++; - - if (*p == 'e' || *p == 'E') - p++; - if (*p == '+' || *p == '-') - p++; - while (ascii_isdigit (*p)) - p++; - - end = p; - } - /* For the other cases, we need not convert the decimal point */ - } - - if (decimal_point_pos) { - char *copy, *c; - - /* We need to convert the '.' to the locale specific decimal point */ - copy = (char *) malloc (end - nptr + 1 + decimal_point_len); - - c = copy; - memcpy (c, nptr, decimal_point_pos - nptr); - c += decimal_point_pos - nptr; - memcpy (c, decimal_point, decimal_point_len); - c += decimal_point_len; - memcpy (c, decimal_point_pos + 1, end - (decimal_point_pos + 1)); - c += end - (decimal_point_pos + 1); - *c = 0; - - errno = 0; - val = strtod (copy, &fail_pos); - strtod_errno = errno; - - if (fail_pos) { - if (fail_pos - copy > decimal_point_pos - nptr) - fail_pos = (char *)nptr + (fail_pos - copy) - (decimal_point_len - 1); - else - fail_pos = (char *)nptr + (fail_pos - copy); - } - - free (copy); - } else if (end) { - char *copy; - - copy = (char *) malloc (end - (char *)nptr + 1); - memcpy (copy, nptr, end - nptr); - *(copy + (end - (char *)nptr)) = 0; - - errno = 0; - val = strtod (copy, &fail_pos); - strtod_errno = errno; - - if (fail_pos) { - fail_pos = (char *)nptr + (fail_pos - copy); - } - - free (copy); - } else { - errno = 0; - val = strtod (nptr, &fail_pos); - strtod_errno = errno; - } - - if (endptr) - *endptr = fail_pos; - - errno = strtod_errno; - - return val; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/gstrtod.h b/Build/source/libs/poppler/poppler-0.18.0/goo/gstrtod.h deleted file mode 100644 index e8abdadf53e..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/gstrtod.h +++ /dev/null @@ -1,43 +0,0 @@ -/* This file is part of Libspectre. - * - * Copyright (C) 2007 Albert Astals Cid <aacid@kde.org> - * Copyright (C) 2007 Carlos Garcia Campos <carlosgc@gnome.org> - * - * Libspectre is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * Libspectre is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -/* This function comes from spectre-utils from libspectre */ - -#ifndef GSTRTOD_H -#define GSTRTOD_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* This function behaves like the standard atof()/(strtod() function - * does in the C locale. It does this without actually changing - * the current locale, since that would not be thread-safe. - * A limitation of the implementation is that this function - * will still accept localized versions of infinities and NANs. - */ -double gatof(const char *nptr); -double gstrtod(const char *nptr, char **endptr); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/gtypes.h b/Build/source/libs/poppler/poppler-0.18.0/goo/gtypes.h deleted file mode 100644 index b7a2dd2d268..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/gtypes.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * gtypes.h - * - * Some useful simple types. - * - * Copyright 1996-2003 Glyph & Cog, LLC - */ - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2010 Patrick Spendrin <ps_ml@gmx.de> -// Copyright (C) 2010 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef GTYPES_H -#define GTYPES_H - -/* - * These have stupid names to avoid conflicts with some (but not all) - * C++ compilers which define them. - */ -typedef bool GBool; -#define gTrue true -#define gFalse false - -#ifdef _MSC_VER -#pragma warning(disable: 4800) /* 'type' : forcing value to bool 'true' or 'false' (performance warning) */ -#endif - -/* - * These have stupid names to avoid conflicts with <sys/types.h>, - * which on various systems defines some random subset of these. - */ -typedef unsigned char Guchar; -typedef unsigned short Gushort; -typedef unsigned int Guint; -typedef unsigned long Gulong; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/goo/gtypes_p.h b/Build/source/libs/poppler/poppler-0.18.0/goo/gtypes_p.h deleted file mode 100644 index cc4866e1389..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/goo/gtypes_p.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * gtypes_p.h - * - * Some useful simple types. - * - * Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> - */ - -#ifndef GTYPES_P_H -#define GTYPES_P_H - -#include "config.h" - -/* - * Define precise integer types. - */ -#if HAVE_STDINT_H -#include <stdint.h> -#elif _MSC_VER -typedef signed __int8 int8_t; -typedef unsigned __int8 uint8_t; -typedef signed __int16 int16_t; -typedef unsigned __int16 uint16_t; -typedef signed __int32 int32_t; -typedef unsigned __int32 uint32_t; -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; -#endif - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/gtk-doc.make b/Build/source/libs/poppler/poppler-0.18.0/gtk-doc.make deleted file mode 100644 index 4450835f085..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/gtk-doc.make +++ /dev/null @@ -1,240 +0,0 @@ -# -*- mode: makefile -*- - -#################################### -# Everything below here is generic # -#################################### - -if GTK_DOC_USE_LIBTOOL -GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -GTKDOC_RUN = $(LIBTOOL) --mode=execute -else -GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -GTKDOC_RUN = -endif - -# We set GPATH here; this gives us semantics for GNU make -# which are more like other make's VPATH, when it comes to -# whether a source that is a target of one rule is then -# searched for in VPATH/GPATH. -# -GPATH = $(srcdir) - -TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) - -SETUP_FILES = \ - $(content_files) \ - $(DOC_MAIN_SGML_FILE) \ - $(DOC_MODULE)-sections.txt \ - $(DOC_MODULE)-overrides.txt - -EXTRA_DIST = \ - $(SETUP_FILES) - -DOC_STAMPS=setup-build.stamp scan-build.stamp sgml-build.stamp \ - html-build.stamp pdf-build.stamp \ - setup.stamp sgml.stamp html.stamp pdf.stamp - -SCANOBJ_FILES = \ - $(DOC_MODULE).args \ - $(DOC_MODULE).hierarchy \ - $(DOC_MODULE).interfaces \ - $(DOC_MODULE).prerequisites \ - $(DOC_MODULE).signals - -REPORT_FILES = \ - $(DOC_MODULE)-undocumented.txt \ - $(DOC_MODULE)-undeclared.txt \ - $(DOC_MODULE)-unused.txt - -CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) - -if ENABLE_GTK_DOC -if GTK_DOC_BUILD_HTML -HTML_BUILD_STAMP=html-build.stamp -else -HTML_BUILD_STAMP= -endif -if GTK_DOC_BUILD_PDF -PDF_BUILD_STAMP=pdf-build.stamp -else -PDF_BUILD_STAMP= -endif - -all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) -else -all-local: -endif - -docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) - -$(REPORT_FILES): sgml-build.stamp - -#### setup #### - -setup-build.stamp: - -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ - echo 'gtk-doc: Preparing build'; \ - files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \ - if test "x$$files" != "x" ; then \ - for file in $$files ; do \ - test -f $(abs_srcdir)/$$file && \ - cp -p $(abs_srcdir)/$$file $(abs_builddir)/; \ - done \ - fi \ - fi - @touch setup-build.stamp - - -setup.stamp: setup-build.stamp - @true - - -#### scan #### - -scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) - @echo 'gtk-doc: Scanning header files' - @_source_dir='' ; \ - for i in $(DOC_SOURCE_DIR) ; do \ - _source_dir="$${_source_dir} --source-dir=$$i" ; \ - done ; \ - gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) - @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ - CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) ; \ - else \ - for i in $(SCANOBJ_FILES) ; do \ - test -f $$i || touch $$i ; \ - done \ - fi - @touch scan-build.stamp - -$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp - @true - -#### xml #### - -sgml-build.stamp: setup.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files) - @echo 'gtk-doc: Building XML' - @_source_dir='' ; \ - for i in $(DOC_SOURCE_DIR) ; do \ - _source_dir="$${_source_dir} --source-dir=$$i" ; \ - done ; \ - gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) - @touch sgml-build.stamp - -sgml.stamp: sgml-build.stamp - @true - -#### html #### - -html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) - @echo 'gtk-doc: Building HTML' - @rm -rf html - @mkdir html - @mkhtml_options=""; \ - gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ - if test "$(?)" = "0"; then \ - mkhtml_options=--path="$(abs_srcdir)"; \ - fi; \ - cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) - -@test "x$(HTML_IMAGES)" = "x" || \ - for file in $(HTML_IMAGES) ; do \ - if test -f $(abs_srcdir)/$$file ; then \ - cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ - fi; \ - if test -f $(abs_builddir)/$$file ; then \ - cp $(abs_builddir)/$$file $(abs_builddir)/html; \ - fi; \ - done; - @echo 'gtk-doc: Fixing cross-references' - @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) - @touch html-build.stamp - -#### pdf #### - -pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) - @echo 'gtk-doc: Building PDF' - @rm -rf $(DOC_MODULE).pdf - @mkpdf_imgdirs=""; \ - if test "x$(HTML_IMAGES)" != "x"; then \ - for img in $(HTML_IMAGES); do \ - part=`dirname $$img`; \ - echo $$mkpdf_imgdirs | grep >/dev/null "\-\-imgdir=$$part "; \ - if test $$? != 0; then \ - mkpdf_imgdirs="$$mkpdf_imgdirs --imgdir=$$part"; \ - fi; \ - done; \ - fi; \ - gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_imgdirs $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) - @touch pdf-build.stamp - -############## - -clean-local: - rm -f *~ *.bak - rm -rf .libs - -distclean-local: - rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ - $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt - if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ - rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \ - fi - -maintainer-clean-local: clean - rm -rf xml html - -install-data-local: - @installfiles=`echo $(builddir)/html/*`; \ - if test "$$installfiles" = '$(srcdir)/html/*'; \ - then echo '-- Nothing to install' ; \ - else \ - if test -n "$(DOC_MODULE_VERSION)"; then \ - installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ - else \ - installdir="$(DESTDIR)$(TARGET_DIR)"; \ - fi; \ - $(mkinstalldirs) $${installdir} ; \ - for i in $$installfiles; do \ - echo '-- Installing '$$i ; \ - $(INSTALL_DATA) $$i $${installdir}; \ - done; \ - if test -n "$(DOC_MODULE_VERSION)"; then \ - mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ - $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ - mv -f $${installdir}/$(DOC_MODULE).devhelp \ - $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp; \ - fi; \ - $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ - fi - -uninstall-local: - @if test -n "$(DOC_MODULE_VERSION)"; then \ - installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ - else \ - installdir="$(DESTDIR)$(TARGET_DIR)"; \ - fi; \ - rm -rf $${installdir} - -# -# Require gtk-doc when making dist -# -if ENABLE_GTK_DOC -dist-check-gtkdoc: -else -dist-check-gtkdoc: - @echo "*** gtk-doc must be installed and enabled in order to make dist" - @false -endif - -dist-hook: dist-check-gtkdoc dist-hook-local - mkdir $(distdir)/html - cp $(builddir)/html/* $(distdir)/html - -cp $(builddir)/$(DOC_MODULE).pdf $(distdir)/ - -cp $(builddir)/$(DOC_MODULE).types $(distdir)/ - -cp $(builddir)/$(DOC_MODULE)-sections.txt $(distdir)/ - cd $(distdir) && rm -f $(DISTCLEANFILES) - $(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html - -.PHONY : dist-hook-local docs diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-cairo-uninstalled.pc.in b/Build/source/libs/poppler/poppler-0.18.0/poppler-cairo-uninstalled.pc.in deleted file mode 100644 index 2458eb20df8..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-cairo-uninstalled.pc.in +++ /dev/null @@ -1,6 +0,0 @@ -Name: poppler-cairo -Description: Cairo backend for Poppler PDF rendering library - uninstalled -Version: @VERSION@ -Requires: poppler = @VERSION@ cairo >= @CAIRO_VERSION@ - -Libs: ${pc_top_builddir}/${pcfiledir}/poppler/libpoppler-cairo.la diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-cairo.pc.cmake b/Build/source/libs/poppler/poppler-0.18.0/poppler-cairo.pc.cmake deleted file mode 100644 index b32f118314b..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-cairo.pc.cmake +++ /dev/null @@ -1,9 +0,0 @@ -prefix=@CMAKE_INSTALL_PREFIX@ -exec_prefix=${prefix} -libdir=${exec_prefix}/lib@LIB_SUFFIX@ -includedir=${prefix}/include - -Name: poppler-cairo -Description: Cairo backend for Poppler PDF rendering library -Version: @POPPLER_VERSION@ -Requires: poppler = @POPPLER_VERSION@ cairo >= @CAIRO_VERSION@ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-cairo.pc.in b/Build/source/libs/poppler/poppler-0.18.0/poppler-cairo.pc.in deleted file mode 100644 index 367a5b690bf..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-cairo.pc.in +++ /dev/null @@ -1,9 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: poppler-cairo -Description: Cairo backend for Poppler PDF rendering library -Version: @VERSION@ -Requires: poppler = @VERSION@ cairo >= @CAIRO_VERSION@ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-cpp-uninstalled.pc.in b/Build/source/libs/poppler/poppler-0.18.0/poppler-cpp-uninstalled.pc.in deleted file mode 100644 index af3640eb2c1..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-cpp-uninstalled.pc.in +++ /dev/null @@ -1,7 +0,0 @@ -Name: poppler-cpp -Description: cpp backend for Poppler PDF rendering library - uninstalled -Version: @VERSION@ -Requires: poppler = @VERSION@ - -Libs: ${pc_top_builddir}/${pcfiledir}/cpp/libpoppler-cpp.la -Cflags: -I${pc_top_builddir}/${pcfiledir}/cpp diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-cpp.pc.cmake b/Build/source/libs/poppler/poppler-0.18.0/poppler-cpp.pc.cmake deleted file mode 100644 index 3f56b3d9d90..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-cpp.pc.cmake +++ /dev/null @@ -1,13 +0,0 @@ -prefix=@CMAKE_INSTALL_PREFIX@ -exec_prefix=${prefix} -libdir=${exec_prefix}/lib@LIB_SUFFIX@ -includedir=${prefix}/include - -Name: poppler-cpp -Description: cpp backend for Poppler PDF rendering library -Version: @POPPLER_VERSION@ -Requires: @PC_REQUIRES@ -@PC_REQUIRES_PRIVATE@ - -Libs: -L${libdir} -lpoppler-cpp -Cflags: -I${includedir}/poppler/cpp diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-cpp.pc.in b/Build/source/libs/poppler/poppler-0.18.0/poppler-cpp.pc.in deleted file mode 100644 index a7e97c25dfe..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-cpp.pc.in +++ /dev/null @@ -1,13 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: poppler-cpp -Description: cpp backend for Poppler PDF rendering library -Version: @VERSION@ -Requires: @PC_REQUIRES@ -@PC_REQUIRES_PRIVATE@ - -Libs: -L${libdir} -lpoppler-cpp -Cflags: -I${includedir}/poppler/cpp diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-glib-uninstalled.pc.in b/Build/source/libs/poppler/poppler-0.18.0/poppler-glib-uninstalled.pc.in deleted file mode 100644 index d0d63f4ae6f..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-glib-uninstalled.pc.in +++ /dev/null @@ -1,7 +0,0 @@ -Name: poppler-glib -Description: GLib wrapper for poppler - uninstalled -Version: @VERSION@ -Requires: poppler-cairo = @VERSION@ @GLIB_REQ@ - -Libs: ${pc_top_builddir}/${pcfiledir}/glib/libpoppler-glib.la -Cflags: -I${pc_top_builddir}/${pcfiledir}/glib diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-glib.pc.cmake b/Build/source/libs/poppler/poppler-0.18.0/poppler-glib.pc.cmake deleted file mode 100644 index 5e940155c2d..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-glib.pc.cmake +++ /dev/null @@ -1,13 +0,0 @@ -prefix=@CMAKE_INSTALL_PREFIX@ -exec_prefix=${prefix} -libdir=${exec_prefix}/lib@LIB_SUFFIX@ -includedir=${prefix}/include - -Name: poppler-glib -Description: GLib wrapper for poppler -Version: @POPPLER_VERSION@ -Requires: poppler-cairo = @POPPLER_VERSION@ @GLIB_REQ@ -@PC_REQUIRES_PRIVATE@ - -Libs: -L${libdir} -lpoppler-glib -Cflags: -I${includedir}/poppler/glib diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-glib.pc.in b/Build/source/libs/poppler/poppler-0.18.0/poppler-glib.pc.in deleted file mode 100644 index 05b9a771914..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-glib.pc.in +++ /dev/null @@ -1,13 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: poppler-glib -Description: GLib wrapper for poppler -Version: @VERSION@ -Requires: poppler-cairo = @VERSION@ @GLIB_REQ@ -@PC_REQUIRES_PRIVATE@ - -Libs: -L${libdir} -lpoppler-glib -Cflags: -I${includedir}/poppler/glib diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-qt4-uninstalled.pc.in b/Build/source/libs/poppler/poppler-0.18.0/poppler-qt4-uninstalled.pc.in deleted file mode 100644 index 3a336c6c294..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-qt4-uninstalled.pc.in +++ /dev/null @@ -1,7 +0,0 @@ -Name: poppler-qt4 -Description: Qt4 bindings for poppler - uninstalled -Version: @VERSION@ -Requires: poppler = @VERSION@ - -Libs: ${pc_top_builddir}/${pcfiledir}/qt4/src/libpoppler-qt4.la -Cflags: -I${pc_top_builddir}/${pcfiledir}/qt4/src diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-qt4.pc.cmake b/Build/source/libs/poppler/poppler-0.18.0/poppler-qt4.pc.cmake deleted file mode 100644 index b17fd5d8453..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-qt4.pc.cmake +++ /dev/null @@ -1,13 +0,0 @@ -prefix=@CMAKE_INSTALL_PREFIX@ -exec_prefix=${prefix} -libdir=${exec_prefix}/lib@LIB_SUFFIX@ -includedir=${prefix}/include - -Name: poppler-qt4 -Description: Qt4 bindings for poppler -Version: @POPPLER_VERSION@ -Requires: @PC_REQUIRES@ -@PC_REQUIRES_PRIVATE@ - -Libs: -L${libdir} -lpoppler-qt4 -Cflags: -I${includedir}/poppler/qt4 diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-qt4.pc.in b/Build/source/libs/poppler/poppler-0.18.0/poppler-qt4.pc.in deleted file mode 100644 index 306ae46e0b0..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-qt4.pc.in +++ /dev/null @@ -1,13 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: poppler-qt4 -Description: Qt4 bindings for poppler -Version: @VERSION@ -Requires: @PC_REQUIRES@ -@PC_REQUIRES_PRIVATE@ - -Libs: -L${libdir} -lpoppler-qt4 -Cflags: -I${includedir}/poppler/qt4 diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-splash-uninstalled.pc.in b/Build/source/libs/poppler/poppler-0.18.0/poppler-splash-uninstalled.pc.in deleted file mode 100644 index 436ecdb8f1b..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-splash-uninstalled.pc.in +++ /dev/null @@ -1,7 +0,0 @@ -Name: poppler-splash -Description: Splash backend for Poppler PDF rendering library - uninstalled -Version: @VERSION@ -Requires: poppler = @VERSION@ - -Libs: ${pc_top_builddir}/${pcfiledir}/splash/libsplash.la - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-splash.pc.cmake b/Build/source/libs/poppler/poppler-0.18.0/poppler-splash.pc.cmake deleted file mode 100644 index cb95b3d2d27..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-splash.pc.cmake +++ /dev/null @@ -1,9 +0,0 @@ -prefix=@CMAKE_INSTALL_PREFIX@ -exec_prefix=${prefix} -libdir=${exec_prefix}/lib@LIB_SUFFIX@ -includedir=${prefix}/include - -Name: poppler-splash -Description: Splash backend for Poppler PDF rendering library -Version: @POPPLER_VERSION@ -Requires: poppler = @POPPLER_VERSION@ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-splash.pc.in b/Build/source/libs/poppler/poppler-0.18.0/poppler-splash.pc.in deleted file mode 100644 index cf3491fc7cf..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-splash.pc.in +++ /dev/null @@ -1,9 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: poppler-splash -Description: Splash backend for Poppler PDF rendering library -Version: @VERSION@ -Requires: poppler = @VERSION@ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler-uninstalled.pc.in b/Build/source/libs/poppler/poppler-0.18.0/poppler-uninstalled.pc.in deleted file mode 100644 index 6076e80c5b3..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler-uninstalled.pc.in +++ /dev/null @@ -1,6 +0,0 @@ -Name: poppler -Description: PDF rendering library - uninstalled -Version: @VERSION@ - -Libs: ${pc_top_builddir}/${pcfiledir}/poppler/libpoppler.la -Cflags: -I${pc_top_builddir}/${pcfiledir}/poppler diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler.pc.cmake b/Build/source/libs/poppler/poppler-0.18.0/poppler.pc.cmake deleted file mode 100644 index f1aebedbefd..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler.pc.cmake +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@CMAKE_INSTALL_PREFIX@ -exec_prefix=${prefix} -libdir=${exec_prefix}/lib@LIB_SUFFIX@ -includedir=${prefix}/include - -Name: poppler -Description: PDF rendering library -Version: @POPPLER_VERSION@ - -Libs: -L${libdir} -lpoppler -Cflags: -I${includedir}/poppler diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler.pc.in b/Build/source/libs/poppler/poppler-0.18.0/poppler.pc.in deleted file mode 100644 index 8605b28673b..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: poppler -Description: PDF rendering library -Version: @VERSION@ - -Libs: -L${libdir} -lpoppler -Cflags: -I${includedir}/poppler diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Annot.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Annot.cc deleted file mode 100644 index 664a6c16fd5..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Annot.cc +++ /dev/null @@ -1,5216 +0,0 @@ -//======================================================================== -// -// Annot.cc -// -// Copyright 2000-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006 Scott Turner <scotty1024@mac.com> -// Copyright (C) 2007, 2008 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2007-2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2007-2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2007, 2008 Iñigo Martínez <inigomartinez@gmail.com> -// Copyright (C) 2007 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2008, 2011 Pino Toscano <pino@kde.org> -// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> -// Copyright (C) 2008 Hugo Mercier <hmercier31@gmail.com> -// Copyright (C) 2009 Ilya Gorenbein <igorenbein@finjan.com> -// Copyright (C) 2011 José Aliste <jaliste@src.gnome.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <math.h> -#include <assert.h> -#include "goo/gmem.h" -#include "goo/gstrtod.h" -#include "GooList.h" -#include "Error.h" -#include "Object.h" -#include "Catalog.h" -#include "Gfx.h" -#include "Lexer.h" -#include "Page.h" -#include "Annot.h" -#include "GfxFont.h" -#include "CharCodeToUnicode.h" -#include "PDFDocEncoding.h" -#include "Form.h" -#include "Error.h" -#include "XRef.h" -#include "Movie.h" -#include "OptionalContent.h" -#include "Sound.h" -#include "FileSpec.h" -#include "DateInfo.h" -#include "Link.h" -#include <string.h> - -#define fieldFlagReadOnly 0x00000001 -#define fieldFlagRequired 0x00000002 -#define fieldFlagNoExport 0x00000004 -#define fieldFlagMultiline 0x00001000 -#define fieldFlagPassword 0x00002000 -#define fieldFlagNoToggleToOff 0x00004000 -#define fieldFlagRadio 0x00008000 -#define fieldFlagPushbutton 0x00010000 -#define fieldFlagCombo 0x00020000 -#define fieldFlagEdit 0x00040000 -#define fieldFlagSort 0x00080000 -#define fieldFlagFileSelect 0x00100000 -#define fieldFlagMultiSelect 0x00200000 -#define fieldFlagDoNotSpellCheck 0x00400000 -#define fieldFlagDoNotScroll 0x00800000 -#define fieldFlagComb 0x01000000 -#define fieldFlagRichText 0x02000000 -#define fieldFlagRadiosInUnison 0x02000000 -#define fieldFlagCommitOnSelChange 0x04000000 - -#define fieldQuadLeft 0 -#define fieldQuadCenter 1 -#define fieldQuadRight 2 - -// distance of Bezier control point from center for circle approximation -// = (4 * (sqrt(2) - 1) / 3) * r -#define bezierCircle 0.55228475 - -// Ensures that x is between the limits set by low and high. -// If low is greater than high the result is undefined. -#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x))) - -AnnotLineEndingStyle parseAnnotLineEndingStyle(GooString *string) { - if (string != NULL) { - if (!string->cmp("Square")) { - return annotLineEndingSquare; - } else if (!string->cmp("Circle")) { - return annotLineEndingCircle; - } else if (!string->cmp("Diamond")) { - return annotLineEndingDiamond; - } else if (!string->cmp("OpenArrow")) { - return annotLineEndingOpenArrow; - } else if (!string->cmp("ClosedArrow")) { - return annotLineEndingClosedArrow; - } else if (!string->cmp("Butt")) { - return annotLineEndingButt; - } else if (!string->cmp("ROpenArrow")) { - return annotLineEndingROpenArrow; - } else if (!string->cmp("RClosedArrow")) { - return annotLineEndingRClosedArrow; - } else if (!string->cmp("Slash")) { - return annotLineEndingSlash; - } else { - return annotLineEndingNone; - } - } else { - return annotLineEndingNone; - } -} - -static AnnotExternalDataType parseAnnotExternalData(Dict* dict) { - Object obj1; - AnnotExternalDataType type; - - if (dict->lookup("Subtype", &obj1)->isName()) { - const char *typeName = obj1.getName(); - - if (!strcmp(typeName, "Markup3D")) { - type = annotExternalDataMarkup3D; - } else { - type = annotExternalDataMarkupUnknown; - } - } else { - type = annotExternalDataMarkupUnknown; - } - obj1.free(); - - return type; -} - -PDFRectangle *parseDiffRectangle(Array *array, PDFRectangle *rect) { - PDFRectangle *newRect = NULL; - if (array->getLength() == 4) { - // deltas - Object obj1; - double dx1 = (array->get(0, &obj1)->isNum() ? obj1.getNum() : 0); - obj1.free(); - double dy1 = (array->get(1, &obj1)->isNum() ? obj1.getNum() : 0); - obj1.free(); - double dx2 = (array->get(2, &obj1)->isNum() ? obj1.getNum() : 0); - obj1.free(); - double dy2 = (array->get(3, &obj1)->isNum() ? obj1.getNum() : 0); - obj1.free(); - - // checking that the numbers are valid (i.e. >= 0), - // and that applying the differences still give us a valid rect - if (dx1 >= 0 && dy1 >= 0 && dx2 >= 0 && dy2 - && (rect->x2 - rect->x1 - dx1 - dx2) >= 0 - && (rect->y2 - rect->y1 - dy1 - dy2) >= 0) { - newRect = new PDFRectangle(); - newRect->x1 = rect->x1 + dx1; - newRect->y1 = rect->y1 + dy1; - newRect->x2 = rect->x2 - dx2; - newRect->y2 = rect->y2 - dy2; - } - } - return newRect; -} - -//------------------------------------------------------------------------ -// AnnotBorderEffect -//------------------------------------------------------------------------ - -AnnotBorderEffect::AnnotBorderEffect(Dict *dict) { - Object obj1; - - if (dict->lookup("S", &obj1)->isName()) { - const char *effectName = obj1.getName(); - - if (!strcmp(effectName, "C")) - effectType = borderEffectCloudy; - else - effectType = borderEffectNoEffect; - } else { - effectType = borderEffectNoEffect; - } - obj1.free(); - - if ((dict->lookup("I", &obj1)->isNum()) && effectType == borderEffectCloudy) { - intensity = obj1.getNum(); - } else { - intensity = 0; - } - obj1.free(); -} - -//------------------------------------------------------------------------ -// AnnotPath -//------------------------------------------------------------------------ - -AnnotPath::AnnotPath() { - coords = NULL; - coordsLength = 0; -} - -AnnotPath::AnnotPath(Array *array) { - coords = NULL; - coordsLength = 0; - parsePathArray(array); -} - -AnnotPath::AnnotPath(AnnotCoord **coords, int coordsLength) { - this->coords = coords; - this->coordsLength = coordsLength; -} - -AnnotPath::~AnnotPath() { - if (coords) { - for (int i = 0; i < coordsLength; ++i) - delete coords[i]; - gfree(coords); - } -} - -double AnnotPath::getX(int coord) const { - if (coord >= 0 && coord < coordsLength) - return coords[coord]->getX(); - return 0; -} - -double AnnotPath::getY(int coord) const { - if (coord >= 0 && coord < coordsLength) - return coords[coord]->getY(); - return 0; -} - -AnnotCoord *AnnotPath::getCoord(int coord) const { - if (coord >= 0 && coord < coordsLength) - return coords[coord]; - return NULL; -} - -void AnnotPath::parsePathArray(Array *array) { - int tempLength; - AnnotCoord **tempCoords; - GBool correct = gTrue; - - if (array->getLength() % 2) { - error(-1, "Bad Annot Path"); - return; - } - - tempLength = array->getLength() / 2; - tempCoords = (AnnotCoord **) gmallocn (tempLength, sizeof(AnnotCoord *)); - memset(tempCoords, 0, tempLength * sizeof(AnnotCoord *)); - for (int i = 0; i < tempLength && correct; i++) { - Object obj1; - double x = 0, y = 0; - - if (array->get(i * 2, &obj1)->isNum()) { - x = obj1.getNum(); - } else { - correct = gFalse; - } - obj1.free(); - - if (array->get((i * 2) + 1, &obj1)->isNum()) { - y = obj1.getNum(); - } else { - correct = gFalse; - } - obj1.free(); - - if (!correct) { - for (int j = i - 1; j >= 0; j--) - delete tempCoords[j]; - gfree (tempCoords); - return; - } - - tempCoords[i] = new AnnotCoord(x, y); - } - - coords = tempCoords; - coordsLength = tempLength; -} - -//------------------------------------------------------------------------ -// AnnotCalloutLine -//------------------------------------------------------------------------ - -AnnotCalloutLine::AnnotCalloutLine(double x1, double y1, double x2, double y2) - : coord1(x1, y1), coord2(x2, y2) { -} - -//------------------------------------------------------------------------ -// AnnotCalloutMultiLine -//------------------------------------------------------------------------ - -AnnotCalloutMultiLine::AnnotCalloutMultiLine(double x1, double y1, double x2, - double y2, double x3, double y3) - : AnnotCalloutLine(x1, y1, x2, y2), coord3(x3, y3) { -} - -//------------------------------------------------------------------------ -// AnnotQuadrilateral -//------------------------------------------------------------------------ - -AnnotQuadrilaterals::AnnotQuadrilaterals(Array *array, PDFRectangle *rect) { - int arrayLength = array->getLength(); - GBool correct = gTrue; - int quadsLength = 0; - AnnotQuadrilateral **quads; - double quadArray[8]; - - // default values - quadrilaterals = NULL; - quadrilateralsLength = 0; - - if ((arrayLength % 8) == 0) { - int i; - - quadsLength = arrayLength / 8; - quads = (AnnotQuadrilateral **) gmallocn - ((quadsLength), sizeof(AnnotQuadrilateral *)); - memset(quads, 0, quadsLength * sizeof(AnnotQuadrilateral *)); - - for (i = 0; i < quadsLength; i++) { - for (int j = 0; j < 8; j++) { - Object obj; - if (array->get(i * 8 + j, &obj)->isNum()) { - if (j % 2 == 1) - quadArray[j] = CLAMP (obj.getNum(), rect->y1, rect->y2); - else - quadArray[j] = CLAMP (obj.getNum(), rect->x1, rect->x2); - } else { - correct = gFalse; - obj.free(); - error (-1, "Invalid QuadPoint in annot"); - break; - } - obj.free(); - } - - if (!correct) - break; - - quads[i] = new AnnotQuadrilateral(quadArray[0], quadArray[1], - quadArray[2], quadArray[3], - quadArray[4], quadArray[5], - quadArray[6], quadArray[7]); - } - - if (correct) { - quadrilateralsLength = quadsLength; - quadrilaterals = quads; - } else { - for (int j = 0; j < i; j++) - delete quads[j]; - gfree (quads); - } - } -} - -AnnotQuadrilaterals::~AnnotQuadrilaterals() { - if (quadrilaterals) { - for(int i = 0; i < quadrilateralsLength; i++) - delete quadrilaterals[i]; - - gfree (quadrilaterals); - } -} - -double AnnotQuadrilaterals::getX1(int quadrilateral) { - if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) - return quadrilaterals[quadrilateral]->coord1.getX(); - return 0; -} - -double AnnotQuadrilaterals::getY1(int quadrilateral) { - if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) - return quadrilaterals[quadrilateral]->coord1.getY(); - return 0; -} - -double AnnotQuadrilaterals::getX2(int quadrilateral) { - if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) - return quadrilaterals[quadrilateral]->coord2.getX(); - return 0; -} - -double AnnotQuadrilaterals::getY2(int quadrilateral) { - if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) - return quadrilaterals[quadrilateral]->coord2.getY(); - return 0; -} - -double AnnotQuadrilaterals::getX3(int quadrilateral) { - if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) - return quadrilaterals[quadrilateral]->coord3.getX(); - return 0; -} - -double AnnotQuadrilaterals::getY3(int quadrilateral) { - if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) - return quadrilaterals[quadrilateral]->coord3.getY(); - return 0; -} - -double AnnotQuadrilaterals::getX4(int quadrilateral) { - if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) - return quadrilaterals[quadrilateral]->coord4.getX(); - return 0; -} - -double AnnotQuadrilaterals::getY4(int quadrilateral) { - if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) - return quadrilaterals[quadrilateral]->coord4.getY(); - return 0; -} - -AnnotQuadrilaterals::AnnotQuadrilateral::AnnotQuadrilateral(double x1, double y1, - double x2, double y2, double x3, double y3, double x4, double y4) - : coord1(x1, y1), coord2(x2, y2), coord3(x3, y3), coord4(x4, y4) { -} - -//------------------------------------------------------------------------ -// AnnotBorder -//------------------------------------------------------------------------ -AnnotBorder::AnnotBorder() { - type = typeUnknown; - width = 1; - dashLength = 0; - dash = NULL; - style = borderSolid; -} - -GBool AnnotBorder::parseDashArray(Object *dashObj) { - GBool correct = gTrue; - int tempLength = dashObj->arrayGetLength(); - double *tempDash = (double *) gmallocn (tempLength, sizeof (double)); - - // TODO: check not all zero (Line Dash Pattern Page 217 PDF 8.1) - for (int i = 0; i < tempLength && i < DASH_LIMIT && correct; i++) { - Object obj1; - - if (dashObj->arrayGet(i, &obj1)->isNum()) { - tempDash[i] = obj1.getNum(); - - correct = tempDash[i] >= 0; - obj1.free(); - } - } - - if (correct) { - dashLength = tempLength; - dash = tempDash; - style = borderDashed; - } else { - gfree (tempDash); - } - - return correct; -} - -AnnotBorder::~AnnotBorder() { - if (dash) - gfree (dash); -} - -//------------------------------------------------------------------------ -// AnnotBorderArray -//------------------------------------------------------------------------ - -AnnotBorderArray::AnnotBorderArray() { - type = typeArray; - horizontalCorner = 0; - verticalCorner = 0; -} - -AnnotBorderArray::AnnotBorderArray(Array *array) { - Object obj1; - int arrayLength = array->getLength(); - - GBool correct = gTrue; - if (arrayLength == 3 || arrayLength == 4) { - // implementation note 81 in Appendix H. - - if (array->get(0, &obj1)->isNum()) - horizontalCorner = obj1.getNum(); - else - correct = gFalse; - obj1.free(); - - if (array->get(1, &obj1)->isNum()) - verticalCorner = obj1.getNum(); - else - correct = gFalse; - obj1.free(); - - if (array->get(2, &obj1)->isNum()) - width = obj1.getNum(); - else - correct = gFalse; - obj1.free(); - - if (arrayLength == 4) { - if (array->get(3, &obj1)->isArray()) - correct = parseDashArray(&obj1); - else - correct = gFalse; - obj1.free(); - } - } else { - correct = gFalse; - } - - if (!correct) { - width = 0; - } -} - -//------------------------------------------------------------------------ -// AnnotBorderBS -//------------------------------------------------------------------------ - -AnnotBorderBS::AnnotBorderBS() { - type = typeBS; -} - -AnnotBorderBS::AnnotBorderBS(Dict *dict) { - Object obj1, obj2; - - // acroread 8 seems to need both W and S entries for - // any border to be drawn, even though the spec - // doesn't claim anything of that sort. We follow - // that behaviour by veryifying both entries exist - // otherwise we set the borderWidth to 0 - // --jrmuizel - dict->lookup("W", &obj1); - dict->lookup("S", &obj2); - if (obj1.isNum() && obj2.isName()) { - const char *styleName = obj2.getName(); - - width = obj1.getNum(); - - if (!strcmp(styleName, "S")) { - style = borderSolid; - } else if (!strcmp(styleName, "D")) { - style = borderDashed; - } else if (!strcmp(styleName, "B")) { - style = borderBeveled; - } else if (!strcmp(styleName, "I")) { - style = borderInset; - } else if (!strcmp(styleName, "U")) { - style = borderUnderlined; - } else { - style = borderSolid; - } - } else { - width = 0; - } - obj2.free(); - obj1.free(); - - if (style == borderDashed) { - if (dict->lookup("D", &obj1)->isArray()) - parseDashArray(&obj1); - obj1.free(); - - if (!dash) { - dashLength = 1; - dash = (double *) gmallocn (dashLength, sizeof (double)); - dash[0] = 3; - } - } -} - -//------------------------------------------------------------------------ -// AnnotColor -//------------------------------------------------------------------------ - -AnnotColor::AnnotColor() { - length = 0; -} - -AnnotColor::AnnotColor(double gray) { - length = 1; - - values[0] = gray; -} - -AnnotColor::AnnotColor(double r, double g, double b) { - length = 3; - - values[0] = r; - values[1] = g; - values[2] = b; -} - -AnnotColor::AnnotColor(double c, double m, double y, double k) { - length = 4; - - values[0] = c; - values[1] = m; - values[2] = y; - values[3] = k; -} - -// If <adjust> is +1, color is brightened; -// if <adjust> is -1, color is darkened; -// otherwise color is not modified. -AnnotColor::AnnotColor(Array *array, int adjust) { - int i; - - length = array->getLength(); - if (length > 4) - length = 4; - - for (i = 0; i < length; i++) { - Object obj1; - - if (array->get(i, &obj1)->isNum()) { - values[i] = obj1.getNum(); - - if (values[i] < 0 || values[i] > 1) - values[i] = 0; - } else { - values[i] = 0; - } - obj1.free(); - } - - if (adjust != 0) - adjustColor(adjust); -} - -void AnnotColor::adjustColor(int adjust) { - int i; - - if (length == 4) { - adjust = -adjust; - } - if (adjust > 0) { - for (i = 0; i < length; ++i) { - values[i] = 0.5 * values[i] + 0.5; - } - } else if (adjust < 0) { - for (i = 0; i < length; ++i) { - values[i] = 0.5 * values[i]; - } - } -} - -//------------------------------------------------------------------------ -// AnnotIconFit -//------------------------------------------------------------------------ - -AnnotIconFit::AnnotIconFit(Dict* dict) { - Object obj1; - - if (dict->lookup("SW", &obj1)->isName()) { - const char *scaleName = obj1.getName(); - - if(!strcmp(scaleName, "B")) { - scaleWhen = scaleBigger; - } else if(!strcmp(scaleName, "S")) { - scaleWhen = scaleSmaller; - } else if(!strcmp(scaleName, "N")) { - scaleWhen = scaleNever; - } else { - scaleWhen = scaleAlways; - } - } else { - scaleWhen = scaleAlways; - } - obj1.free(); - - if (dict->lookup("S", &obj1)->isName()) { - const char *scaleName = obj1.getName(); - - if(!strcmp(scaleName, "A")) { - scale = scaleAnamorphic; - } else { - scale = scaleProportional; - } - } else { - scale = scaleProportional; - } - obj1.free(); - - if (dict->lookup("A", &obj1)->isArray() && obj1.arrayGetLength() == 2) { - Object obj2; - (obj1.arrayGet(0, &obj2)->isNum() ? left = obj2.getNum() : left = 0); - obj2.free(); - (obj1.arrayGet(1, &obj2)->isNum() ? bottom = obj2.getNum() : bottom = 0); - obj2.free(); - - if (left < 0 || left > 1) - left = 0.5; - - if (bottom < 0 || bottom > 1) - bottom = 0.5; - - } else { - left = bottom = 0.5; - } - obj1.free(); - - if (dict->lookup("FB", &obj1)->isBool()) { - fullyBounds = obj1.getBool(); - } else { - fullyBounds = gFalse; - } - obj1.free(); -} - -//------------------------------------------------------------------------ -// AnnotAppearanceCharacs -//------------------------------------------------------------------------ - -AnnotAppearanceCharacs::AnnotAppearanceCharacs(Dict *dict) { - Object obj1; - - if (dict->lookup("R", &obj1)->isInt()) { - rotation = obj1.getInt(); - } else { - rotation = 0; - } - obj1.free(); - - if (dict->lookup("BC", &obj1)->isArray()) { - borderColor = new AnnotColor(obj1.getArray()); - } else { - borderColor = NULL; - } - obj1.free(); - - if (dict->lookup("BG", &obj1)->isArray()) { - backColor = new AnnotColor(obj1.getArray()); - } else { - backColor = NULL; - } - obj1.free(); - - if (dict->lookup("CA", &obj1)->isString()) { - normalCaption = new GooString(obj1.getString()); - } else { - normalCaption = NULL; - } - obj1.free(); - - if (dict->lookup("RC", &obj1)->isString()) { - rolloverCaption = new GooString(obj1.getString()); - } else { - rolloverCaption = NULL; - } - obj1.free(); - - if (dict->lookup("AC", &obj1)->isString()) { - alternateCaption = new GooString(obj1.getString()); - } else { - alternateCaption = NULL; - } - obj1.free(); - - if (dict->lookup("IF", &obj1)->isDict()) { - iconFit = new AnnotIconFit(obj1.getDict()); - } else { - iconFit = NULL; - } - obj1.free(); - - if (dict->lookup("TP", &obj1)->isInt()) { - position = (AnnotAppearanceCharacsTextPos) obj1.getInt(); - } else { - position = captionNoIcon; - } - obj1.free(); -} - -AnnotAppearanceCharacs::~AnnotAppearanceCharacs() { - if (borderColor) - delete borderColor; - - if (backColor) - delete backColor; - - if (normalCaption) - delete normalCaption; - - if (rolloverCaption) - delete rolloverCaption; - - if (alternateCaption) - delete alternateCaption; - - if (iconFit) - delete iconFit; -} - -//------------------------------------------------------------------------ -// Annot -//------------------------------------------------------------------------ - -Annot::Annot(XRef *xrefA, PDFRectangle *rectA, Catalog *catalog) { - Object obj1; - - refCnt = 1; - flags = flagUnknown; - type = typeUnknown; - - obj1.initArray (xrefA); - Object obj2; - obj1.arrayAdd (obj2.initReal (rectA->x1)); - obj1.arrayAdd (obj2.initReal (rectA->y1)); - obj1.arrayAdd (obj2.initReal (rectA->x2)); - obj1.arrayAdd (obj2.initReal (rectA->y2)); - obj2.free (); - - annotObj.initDict (xrefA); - annotObj.dictSet ("Type", obj2.initName ("Annot")); - annotObj.dictSet ("Rect", &obj1); - // obj1 is owned by the dict - - ref = xrefA->addIndirectObject (&annotObj); - - initialize (xrefA, annotObj.getDict(), catalog); -} - -Annot::Annot(XRef *xrefA, Dict *dict, Catalog* catalog) { - refCnt = 1; - hasRef = false; - flags = flagUnknown; - type = typeUnknown; - annotObj.initDict (dict); - initialize (xrefA, dict, catalog); -} - -Annot::Annot(XRef *xrefA, Dict *dict, Catalog* catalog, Object *obj) { - refCnt = 1; - if (obj->isRef()) { - hasRef = gTrue; - ref = obj->getRef(); - } else { - hasRef = gFalse; - } - flags = flagUnknown; - type = typeUnknown; - annotObj.initDict (dict); - initialize (xrefA, dict, catalog); -} - -void Annot::initialize(XRef *xrefA, Dict *dict, Catalog *catalog) { - Object asObj, obj1, obj2, obj3; - - appRef.num = 0; - appRef.gen = 65535; - ok = gTrue; - xref = xrefA; - appearBuf = NULL; - fontSize = 0; - - appearance.initNull(); - - //----- parse the rectangle - rect = new PDFRectangle(); - if (dict->lookup("Rect", &obj1)->isArray() && obj1.arrayGetLength() == 4) { - Object obj2; - (obj1.arrayGet(0, &obj2)->isNum() ? rect->x1 = obj2.getNum() : rect->x1 = 0); - obj2.free(); - (obj1.arrayGet(1, &obj2)->isNum() ? rect->y1 = obj2.getNum() : rect->y1 = 0); - obj2.free(); - (obj1.arrayGet(2, &obj2)->isNum() ? rect->x2 = obj2.getNum() : rect->x2 = 1); - obj2.free(); - (obj1.arrayGet(3, &obj2)->isNum() ? rect->y2 = obj2.getNum() : rect->y2 = 1); - obj2.free(); - - if (rect->x1 > rect->x2) { - double t = rect->x1; - rect->x1 = rect->x2; - rect->x2 = t; - } - - if (rect->y1 > rect->y2) { - double t = rect->y1; - rect->y1 = rect->y2; - rect->y2 = t; - } - } else { - rect->x1 = rect->y1 = 0; - rect->x2 = rect->y2 = 1; - error(-1, "Bad bounding box for annotation"); - ok = gFalse; - } - obj1.free(); - - if (dict->lookup("Contents", &obj1)->isString()) { - contents = obj1.getString()->copy(); - } else { - contents = NULL; - } - obj1.free(); - - if (dict->lookupNF("P", &obj1)->isRef()) { - Ref ref = obj1.getRef(); - - page = catalog ? catalog->findPage (ref.num, ref.gen) : -1; - } else { - page = 0; - } - obj1.free(); - - if (dict->lookup("NM", &obj1)->isString()) { - name = obj1.getString()->copy(); - } else { - name = NULL; - } - obj1.free(); - - if (dict->lookup("M", &obj1)->isString()) { - modified = obj1.getString()->copy(); - } else { - modified = NULL; - } - obj1.free(); - - //----- get the flags - if (dict->lookup("F", &obj1)->isInt()) { - flags |= obj1.getInt(); - } else { - flags = flagUnknown; - } - obj1.free(); - - if (dict->lookup("AP", &obj1)->isDict()) { - Object obj2; - - if (dict->lookup("AS", &obj2)->isName()) { - Object obj3; - - appearState = new GooString(obj2.getName()); - if (obj1.dictLookup("N", &obj3)->isDict()) { - Object obj4; - - if (obj3.dictLookupNF(appearState->getCString(), &obj4)->isRef()) { - obj4.copy(&appearance); - } else { - obj4.free(); - if (obj3.dictLookupNF("Off", &obj4)->isRef()) { - obj4.copy(&appearance); - } - } - obj4.free(); - } - obj3.free(); - } else { - obj2.free(); - - appearState = NULL; - if (obj1.dictLookupNF("N", &obj2)->isRef()) { - obj2.copy(&appearance); - } - } - obj2.free(); - } else { - appearState = NULL; - } - obj1.free(); - - //----- parse the border style - if (dict->lookup("BS", &obj1)->isDict()) { - border = new AnnotBorderBS(obj1.getDict()); - } else { - obj1.free(); - - if (dict->lookup("Border", &obj1)->isArray()) - border = new AnnotBorderArray(obj1.getArray()); - else - // Adobe draws no border at all if the last element is of - // the wrong type. - border = NULL; - } - obj1.free(); - - if (dict->lookup("C", &obj1)->isArray()) { - color = new AnnotColor(obj1.getArray()); - } else { - color = NULL; - } - obj1.free(); - - if (dict->lookup("StructParent", &obj1)->isInt()) { - treeKey = obj1.getInt(); - } else { - treeKey = 0; - } - obj1.free(); - - optContentConfig = catalog ? catalog->getOptContentConfig() : NULL; - dict->lookupNF("OC", &oc); - if (!oc.isRef() && !oc.isNull()) { - error (-1, "Annotation OC value not null or dict: %i", oc.getType()); - } -} - -void Annot::getRect(double *x1, double *y1, double *x2, double *y2) const { - *x1 = rect->x1; - *y1 = rect->y1; - *x2 = rect->x2; - *y2 = rect->y2; -} - -GBool Annot::inRect(double x, double y) const { - return rect->contains(x, y); -} - -void Annot::update(const char *key, Object *value) { - /* Set M to current time */ - delete modified; - modified = timeToDateString(NULL); - - Object obj1; - obj1.initString (modified->copy()); - annotObj.dictSet("M", &obj1); - - annotObj.dictSet(const_cast<char*>(key), value); - - xref->setModifiedObject(&annotObj, ref); -} - -void Annot::setContents(GooString *new_content) { - delete contents; - - if (new_content) { - contents = new GooString(new_content); - //append the unicode marker <FE FF> if needed - if (!contents->hasUnicodeMarker()) { - contents->insert(0, 0xff); - contents->insert(0, 0xfe); - } - } else { - contents = new GooString(); - } - - Object obj1; - obj1.initString(contents->copy()); - update ("Contents", &obj1); -} - -void Annot::setColor(AnnotColor *new_color) { - delete color; - - if (new_color) { - Object obj1, obj2; - const double *values = new_color->getValues(); - - obj1.initArray(xref); - for (int i = 0; i < (int)new_color->getSpace(); i++) - obj1.arrayAdd(obj2.initReal (values[i])); - update ("C", &obj1); - color = new_color; - } else { - color = NULL; - } -} - -void Annot::setPage(Ref *pageRef, int pageIndex) -{ - Object obj1; - - obj1.initRef(pageRef->num, pageRef->gen); - update("P", &obj1); - page = pageIndex; -} - -void Annot::setAppearanceState(char *state) { - if (!state) - return; - - if (appearState && appearState->cmp(state) == 0) - return; - - delete appearState; - appearState = new GooString(state); - - Object obj1; - obj1.initName(state); - update ("AS", &obj1); - - // The appearance state determines the current appearance stream - Object obj2; - if (annotObj.dictLookup("AP", &obj2)->isDict()) { - Object obj3; - - if (obj2.dictLookup("N", &obj3)->isDict()) { - Object obj4; - - appearance.free(); - if (obj3.dictLookupNF(state, &obj4)->isRef()) - obj4.copy(&appearance); - else - appearance.initNull(); - obj4.free(); - } - obj3.free(); - } - obj2.free(); -} - -double Annot::getXMin() { - return rect->x1; -} - -double Annot::getYMin() { - return rect->y1; -} - -void Annot::readArrayNum(Object *pdfArray, int key, double *value) { - Object valueObject; - - pdfArray->arrayGet(key, &valueObject); - if (valueObject.isNum()) { - *value = valueObject.getNum(); - } else { - *value = 0; - ok = gFalse; - } - valueObject.free(); -} - -void Annot::incRefCnt() { - refCnt++; -} - -void Annot::decRefCnt() { - if (--refCnt == 0) - delete this; -} - -Annot::~Annot() { - annotObj.free(); - - delete rect; - - if (contents) - delete contents; - - if (name) - delete name; - - if (modified) - delete modified; - - appearance.free(); - - if (appearState) - delete appearState; - - if (border) - delete border; - - if (color) - delete color; - - oc.free(); -} - -void Annot::setColor(AnnotColor *color, GBool fill) { - const double *values = color->getValues(); - - switch (color->getSpace()) { - case AnnotColor::colorCMYK: - appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:c}\n", - values[0], values[1], values[2], values[3], - fill ? 'k' : 'K'); - break; - case AnnotColor::colorRGB: - appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:s}\n", - values[0], values[1], values[2], - fill ? "rg" : "RG"); - break; - case AnnotColor::colorGray: - appearBuf->appendf("{0:.2f} {1:c}\n", - values[0], - fill ? 'g' : 'G'); - break; - case AnnotColor::colorTransparent: - default: - break; - } -} - -// Draw an (approximate) circle of radius <r> centered at (<cx>, <cy>). -// If <fill> is true, the circle is filled; otherwise it is stroked. -void Annot::drawCircle(double cx, double cy, double r, GBool fill) { - appearBuf->appendf("{0:.2f} {1:.2f} m\n", - cx + r, cy); - appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", - cx + r, cy + bezierCircle * r, - cx + bezierCircle * r, cy + r, - cx, cy + r); - appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", - cx - bezierCircle * r, cy + r, - cx - r, cy + bezierCircle * r, - cx - r, cy); - appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", - cx - r, cy - bezierCircle * r, - cx - bezierCircle * r, cy - r, - cx, cy - r); - appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", - cx + bezierCircle * r, cy - r, - cx + r, cy - bezierCircle * r, - cx + r, cy); - appearBuf->append(fill ? "f\n" : "s\n"); -} - -// Draw the top-left half of an (approximate) circle of radius <r> -// centered at (<cx>, <cy>). -void Annot::drawCircleTopLeft(double cx, double cy, double r) { - double r2; - - r2 = r / sqrt(2.0); - appearBuf->appendf("{0:.2f} {1:.2f} m\n", - cx + r2, cy + r2); - appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", - cx + (1 - bezierCircle) * r2, - cy + (1 + bezierCircle) * r2, - cx - (1 - bezierCircle) * r2, - cy + (1 + bezierCircle) * r2, - cx - r2, - cy + r2); - appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", - cx - (1 + bezierCircle) * r2, - cy + (1 - bezierCircle) * r2, - cx - (1 + bezierCircle) * r2, - cy - (1 - bezierCircle) * r2, - cx - r2, - cy - r2); - appearBuf->append("S\n"); -} - -// Draw the bottom-right half of an (approximate) circle of radius <r> -// centered at (<cx>, <cy>). -void Annot::drawCircleBottomRight(double cx, double cy, double r) { - double r2; - - r2 = r / sqrt(2.0); - appearBuf->appendf("{0:.2f} {1:.2f} m\n", - cx - r2, cy - r2); - appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", - cx - (1 - bezierCircle) * r2, - cy - (1 + bezierCircle) * r2, - cx + (1 - bezierCircle) * r2, - cy - (1 + bezierCircle) * r2, - cx + r2, - cy - r2); - appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", - cx + (1 + bezierCircle) * r2, - cy - (1 - bezierCircle) * r2, - cx + (1 + bezierCircle) * r2, - cy + (1 - bezierCircle) * r2, - cx + r2, - cy + r2); - appearBuf->append("S\n"); -} - -void Annot::createForm(double *bbox, GBool transparencyGroup, Object *resDict, Object *aStream) { - Object obj1, obj2; - Object appearDict; - - appearDict.initDict(xref); - appearDict.dictSet("Length", obj1.initInt(appearBuf->getLength())); - appearDict.dictSet("Subtype", obj1.initName("Form")); - obj1.initArray(xref); - obj1.arrayAdd(obj2.initReal(bbox[0])); - obj1.arrayAdd(obj2.initReal(bbox[1])); - obj1.arrayAdd(obj2.initReal(bbox[2])); - obj1.arrayAdd(obj2.initReal(bbox[3])); - appearDict.dictSet("BBox", &obj1); - if (transparencyGroup) { - Object transDict; - transDict.initDict(xref); - transDict.dictSet("S", obj1.initName("Transparency")); - appearDict.dictSet("Group", &transDict); - } - if (resDict) - appearDict.dictSet("Resources", resDict); - - MemStream *mStream = new MemStream(copyString(appearBuf->getCString()), 0, - appearBuf->getLength(), &appearDict); - mStream->setNeedFree(gTrue); - aStream->initStream(mStream); -} - -void Annot::createResourcesDict(char *formName, Object *formStream, - char *stateName, - double opacity, char *blendMode, - Object *resDict) { - Object gsDict, stateDict, formDict, obj1; - - gsDict.initDict(xref); - if (opacity != 1) { - gsDict.dictSet("CA", obj1.initReal(opacity)); - gsDict.dictSet("ca", obj1.initReal(opacity)); - } - if (blendMode) - gsDict.dictSet("BM", obj1.initName(blendMode)); - stateDict.initDict(xref); - stateDict.dictSet(stateName, &gsDict); - formDict.initDict(xref); - formDict.dictSet(formName, formStream); - - resDict->initDict(xref); - resDict->dictSet("ExtGState", &stateDict); - resDict->dictSet("XObject", &formDict); -} - -GBool Annot::isVisible(GBool printing) { - // check the flags - if ((flags & flagHidden) || - (printing && !(flags & flagPrint)) || - (!printing && (flags & flagNoView))) { - return gFalse; - } - - // check the OC - if (optContentConfig && oc.isRef()) { - if (! optContentConfig->optContentIsVisible(&oc)) - return gFalse; - } - - return gTrue; -} - -void Annot::draw(Gfx *gfx, GBool printing) { - Object obj; - - if (!isVisible (printing)) - return; - - // draw the appearance stream - appearance.fetch(xref, &obj); - gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color, - rect->x1, rect->y1, rect->x2, rect->y2); - obj.free(); -} - -//------------------------------------------------------------------------ -// AnnotPopup -//------------------------------------------------------------------------ - -AnnotPopup::AnnotPopup(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : - Annot(xrefA, rect, catalog) { - Object obj1; - - type = typePopup; - - annotObj.dictSet ("Subtype", obj1.initName ("Popup")); - initialize (xrefA, annotObj.getDict(), catalog); -} - -AnnotPopup::AnnotPopup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - Annot(xrefA, dict, catalog, obj) { - type = typePopup; - initialize(xrefA, dict, catalog); -} - -AnnotPopup::~AnnotPopup() { - parent.free(); -} - -void AnnotPopup::initialize(XRef *xrefA, Dict *dict, Catalog *catalog) { - Object obj1; - - if (!dict->lookupNF("Parent", &parent)->isRef()) { - parent.initNull(); - } - - if (dict->lookup("Open", &obj1)->isBool()) { - open = obj1.getBool(); - } else { - open = gFalse; - } - obj1.free(); -} - -void AnnotPopup::setParent(Object *parentA) { - parentA->copy(&parent); - update ("Parent", &parent); -} - -void AnnotPopup::setParent(Annot *parentA) { - Ref parentRef = parentA->getRef(); - parent.initRef(parentRef.num, parentRef.gen); - update ("Parent", &parent); -} - -void AnnotPopup::setOpen(GBool openA) { - Object obj1; - - open = openA; - obj1.initBool(open); - update ("Open", &obj1); -} - -//------------------------------------------------------------------------ -// AnnotMarkup -//------------------------------------------------------------------------ -AnnotMarkup::AnnotMarkup(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : - Annot(xrefA, rect, catalog) { - initialize(xrefA, annotObj.getDict(), catalog, &annotObj); -} - -AnnotMarkup::AnnotMarkup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - Annot(xrefA, dict, catalog, obj) { - initialize(xrefA, dict, catalog, obj); -} - -AnnotMarkup::~AnnotMarkup() { - if (label) - delete label; - - if (popup) - delete popup; - - if (date) - delete date; - - if (subject) - delete subject; -} - -void AnnotMarkup::initialize(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) { - Object obj1; - - if (dict->lookup("T", &obj1)->isString()) { - label = obj1.getString()->copy(); - } else { - label = NULL; - } - obj1.free(); - - if (dict->lookup("Popup", &obj1)->isDict()) { - popup = new AnnotPopup(xrefA, obj1.getDict(), catalog, obj); - } else { - popup = NULL; - } - obj1.free(); - - if (dict->lookup("CA", &obj1)->isNum()) { - opacity = obj1.getNum(); - } else { - opacity = 1.0; - } - obj1.free(); - - if (dict->lookup("CreationDate", &obj1)->isString()) { - date = obj1.getString()->copy(); - } else { - date = NULL; - } - obj1.free(); - - if (dict->lookupNF("IRT", &obj1)->isRef()) { - inReplyTo = obj1.getRef(); - } else { - inReplyTo.num = 0; - inReplyTo.gen = 0; - } - obj1.free(); - - if (dict->lookup("Subj", &obj1)->isString()) { - subject = obj1.getString()->copy(); - } else { - subject = NULL; - } - obj1.free(); - - if (dict->lookup("RT", &obj1)->isName()) { - const char *replyName = obj1.getName(); - - if (!strcmp(replyName, "R")) { - replyTo = replyTypeR; - } else if (!strcmp(replyName, "Group")) { - replyTo = replyTypeGroup; - } else { - replyTo = replyTypeR; - } - } else { - replyTo = replyTypeR; - } - obj1.free(); - - if (dict->lookup("ExData", &obj1)->isDict()) { - exData = parseAnnotExternalData(obj1.getDict()); - } else { - exData = annotExternalDataMarkupUnknown; - } - obj1.free(); -} - -void AnnotMarkup::setLabel(GooString *new_label) { - delete label; - - if (new_label) { - label = new GooString(new_label); - //append the unicode marker <FE FF> if needed - if (!label->hasUnicodeMarker()) { - label->insert(0, 0xff); - label->insert(0, 0xfe); - } - } else { - label = new GooString(); - } - - Object obj1; - obj1.initString(label->copy()); - update ("T", &obj1); -} - -void AnnotMarkup::setPopup(AnnotPopup *new_popup) { - delete popup; - - if (new_popup) { - Object obj1; - Ref popupRef = new_popup->getRef(); - - obj1.initRef (popupRef.num, popupRef.gen); - update ("Popup", &obj1); - - new_popup->setParent(this); - popup = new_popup; - } else { - popup = NULL; - } -} - -void AnnotMarkup::setOpacity(double opacityA) { - Object obj1; - - opacity = opacityA; - obj1.initReal(opacity); - update ("CA", &obj1); -} - -//------------------------------------------------------------------------ -// AnnotText -//------------------------------------------------------------------------ - -AnnotText::AnnotText(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : - AnnotMarkup(xrefA, rect, catalog) { - Object obj1; - - type = typeText; - flags |= flagNoZoom | flagNoRotate; - - annotObj.dictSet ("Subtype", obj1.initName ("Text")); - initialize (xrefA, catalog, annotObj.getDict()); -} - -AnnotText::AnnotText(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - AnnotMarkup(xrefA, dict, catalog, obj) { - - type = typeText; - flags |= flagNoZoom | flagNoRotate; - initialize (xrefA, catalog, dict); -} - -AnnotText::~AnnotText() { - delete icon; -} - -void AnnotText::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) { - Object obj1; - - if (dict->lookup("Open", &obj1)->isBool()) - open = obj1.getBool(); - else - open = gFalse; - obj1.free(); - - if (dict->lookup("Name", &obj1)->isName()) { - icon = new GooString(obj1.getName()); - } else { - icon = new GooString("Note"); - } - obj1.free(); - - if (dict->lookup("StateModel", &obj1)->isString()) { - Object obj2; - GooString *modelName = obj1.getString(); - - if (dict->lookup("State", &obj2)->isString()) { - GooString *stateName = obj2.getString(); - - if (!stateName->cmp("Marked")) { - state = stateMarked; - } else if (!stateName->cmp("Unmarked")) { - state = stateUnmarked; - } else if (!stateName->cmp("Accepted")) { - state = stateAccepted; - } else if (!stateName->cmp("Rejected")) { - state = stateRejected; - } else if (!stateName->cmp("Cancelled")) { - state = stateCancelled; - } else if (!stateName->cmp("Completed")) { - state = stateCompleted; - } else if (!stateName->cmp("None")) { - state = stateNone; - } else { - state = stateUnknown; - } - } else { - state = stateUnknown; - } - obj2.free(); - - if (!modelName->cmp("Marked")) { - switch (state) { - case stateUnknown: - state = stateMarked; - break; - case stateAccepted: - case stateRejected: - case stateCancelled: - case stateCompleted: - case stateNone: - state = stateUnknown; - break; - default: - break; - } - } else if (!modelName->cmp("Review")) { - switch (state) { - case stateUnknown: - state = stateNone; - break; - case stateMarked: - case stateUnmarked: - state = stateUnknown; - break; - default: - break; - } - } else { - state = stateUnknown; - } - } else { - state = stateUnknown; - } - obj1.free(); -} - -void AnnotText::setOpen(GBool openA) { - Object obj1; - - open = openA; - obj1.initBool(open); - update ("Open", &obj1); -} - -void AnnotText::setIcon(GooString *new_icon) { - if (new_icon && icon->cmp(new_icon) == 0) - return; - - delete icon; - - if (new_icon) { - icon = new GooString (new_icon); - } else { - icon = new GooString("Note"); - } - - Object obj1; - obj1.initName (icon->getCString()); - update("Name", &obj1); -} - -#define ANNOT_TEXT_AP_NOTE \ - "3.602 24 m 20.398 24 l 22.387 24 24 22.387 24 20.398 c 24 3.602 l 24\n" \ - "1.613 22.387 0 20.398 0 c 3.602 0 l 1.613 0 0 1.613 0 3.602 c 0 20.398\n" \ - "l 0 22.387 1.613 24 3.602 24 c h\n" \ - "3.602 24 m f\n" \ - "0.533333 0.541176 0.521569 RG 2 w\n" \ - "1 J\n" \ - "1 j\n" \ - "[] 0.0 d\n" \ - "4 M 9 18 m 4 18 l 4 7 4 4 6 3 c 20 3 l 18 4 18 7 18 18 c 17 18 l S\n" \ - "1.5 w\n" \ - "0 j\n" \ - "10 16 m 14 21 l S\n" \ - "1.85625 w\n" \ - "1 j\n" \ - "15.07 20.523 m 15.07 19.672 14.379 18.977 13.523 18.977 c 12.672 18.977\n" \ - "11.977 19.672 11.977 20.523 c 11.977 21.379 12.672 22.07 13.523 22.07 c\n" \ - "14.379 22.07 15.07 21.379 15.07 20.523 c h\n" \ - "15.07 20.523 m S\n" \ - "1 w\n" \ - "0 j\n" \ - "6.5 13.5 m 15.5 13.5 l S\n" \ - "6.5 10.5 m 13.5 10.5 l S\n" \ - "6.801 7.5 m 15.5 7.5 l S\n" \ - "0.729412 0.741176 0.713725 RG 2 w\n" \ - "1 j\n" \ - "9 19 m 4 19 l 4 8 4 5 6 4 c 20 4 l 18 5 18 8 18 19 c 17 19 l S\n" \ - "1.5 w\n" \ - "0 j\n" \ - "10 17 m 14 22 l S\n" \ - "1.85625 w\n" \ - "1 j\n" \ - "15.07 21.523 m 15.07 20.672 14.379 19.977 13.523 19.977 c 12.672 19.977\n" \ - "11.977 20.672 11.977 21.523 c 11.977 22.379 12.672 23.07 13.523 23.07 c\n" \ - "14.379 23.07 15.07 22.379 15.07 21.523 c h\n" \ - "15.07 21.523 m S\n" \ - "1 w\n" \ - "0 j\n" \ - "6.5 14.5 m 15.5 14.5 l S\n" \ - "6.5 11.5 m 13.5 11.5 l S\n" \ - "6.801 8.5 m 15.5 8.5 l S\n" - -#define ANNOT_TEXT_AP_COMMENT \ - "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ - "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ - "l 1 21.523 2.477 23 4.301 23 c h\n" \ - "4.301 23 m f\n" \ - "0.533333 0.541176 0.521569 RG 2 w\n" \ - "0 J\n" \ - "1 j\n" \ - "[] 0.0 d\n" \ - "4 M 8 20 m 16 20 l 18.363 20 20 18.215 20 16 c 20 13 l 20 10.785 18.363 9\n" \ - "16 9 c 13 9 l 8 3 l 8 9 l 8 9 l 5.637 9 4 10.785 4 13 c 4 16 l 4 18.215\n" \ - "5.637 20 8 20 c h\n" \ - "8 20 m S\n" \ - "0.729412 0.741176 0.713725 RG 8 21 m 16 21 l 18.363 21 20 19.215 20 17\n" \ - "c 20 14 l 20 11.785 18.363 10\n" \ - "16 10 c 13 10 l 8 4 l 8 10 l 8 10 l 5.637 10 4 11.785 4 14 c 4 17 l 4\n" \ - "19.215 5.637 21 8 21 c h\n" \ - "8 21 m S\n" - -#define ANNOT_TEXT_AP_KEY \ - "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ - "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ - "l 1 21.523 2.477 23 4.301 23 c h\n" \ - "4.301 23 m f\n" \ - "0.533333 0.541176 0.521569 RG 2 w\n" \ - "1 J\n" \ - "0 j\n" \ - "[] 0.0 d\n" \ - "4 M 11.895 18.754 m 13.926 20.625 17.09 20.496 18.961 18.465 c 20.832\n" \ - "16.434 20.699 13.27 18.668 11.398 c 17.164 10.016 15.043 9.746 13.281\n" \ - "10.516 c 12.473 9.324 l 11.281 10.078 l 9.547 8.664 l 9.008 6.496 l\n" \ - "7.059 6.059 l 6.34 4.121 l 5.543 3.668 l 3.375 4.207 l 2.938 6.156 l\n" \ - "10.57 13.457 l 9.949 15.277 10.391 17.367 11.895 18.754 c h\n" \ - "11.895 18.754 m S\n" \ - "1.5 w\n" \ - "16.059 15.586 m 16.523 15.078 17.316 15.043 17.824 15.512 c 18.332\n" \ - "15.98 18.363 16.77 17.895 17.277 c 17.43 17.785 16.637 17.816 16.129\n" \ - "17.352 c 15.621 16.883 15.59 16.094 16.059 15.586 c h\n" \ - "16.059 15.586 m S\n" \ - "0.729412 0.741176 0.713725 RG 2 w\n" \ - "11.895 19.754 m 13.926 21.625 17.09 21.496 18.961 19.465 c 20.832\n" \ - "17.434 20.699 14.27 18.668 12.398 c 17.164 11.016 15.043 10.746 13.281\n" \ - "11.516 c 12.473 10.324 l 11.281 11.078 l 9.547 9.664 l 9.008 7.496 l\n" \ - "7.059 7.059 l 6.34 5.121 l 5.543 4.668 l 3.375 5.207 l 2.938 7.156 l\n" \ - "10.57 14.457 l 9.949 16.277 10.391 18.367 11.895 19.754 c h\n" \ - "11.895 19.754 m S\n" \ - "1.5 w\n" \ - "16.059 16.586 m 16.523 16.078 17.316 16.043 17.824 16.512 c 18.332\n" \ - "16.98 18.363 17.77 17.895 18.277 c 17.43 18.785 16.637 18.816 16.129\n" \ - "18.352 c 15.621 17.883 15.59 17.094 16.059 16.586 c h\n" \ - "16.059 16.586 m S\n" - -#define ANNOT_TEXT_AP_HELP \ - "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ - "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ - "l 1 21.523 2.477 23 4.301 23 c h\n" \ - "4.301 23 m f\n" \ - "0.533333 0.541176 0.521569 RG 2.5 w\n" \ - "1 J\n" \ - "1 j\n" \ - "[] 0.0 d\n" \ - "4 M 8.289 16.488 m 8.824 17.828 10.043 18.773 11.473 18.965 c 12.902 19.156\n" \ - "14.328 18.559 15.195 17.406 c 16.062 16.254 16.242 14.723 15.664 13.398\n" \ - "c S\n" \ - "0 j\n" \ - "12 8 m 12 12 16 11 16 15 c S\n" \ - "1.539286 w\n" \ - "1 j\n" \ - "q 1 0 0 -0.999991 0 24 cm\n" \ - "12.684 20.891 m 12.473 21.258 12.004 21.395 11.629 21.196 c 11.254\n" \ - "20.992 11.105 20.531 11.297 20.149 c 11.488 19.77 11.945 19.61 12.332\n" \ - "19.789 c 12.719 19.969 12.891 20.426 12.719 20.817 c S Q\n" \ - "0.729412 0.741176 0.713725 RG 2.5 w\n" \ - "8.289 17.488 m 9.109 19.539 11.438 20.535 13.488 19.711 c 15.539 18.891\n" \ - "16.535 16.562 15.711 14.512 c 15.699 14.473 15.684 14.438 15.664 14.398\n" \ - "c S\n" \ - "0 j\n" \ - "12 9 m 12 13 16 12 16 16 c S\n" \ - "1.539286 w\n" \ - "1 j\n" \ - "q 1 0 0 -0.999991 0 24 cm\n" \ - "12.684 19.891 m 12.473 20.258 12.004 20.395 11.629 20.195 c 11.254\n" \ - "19.992 11.105 19.531 11.297 19.149 c 11.488 18.77 11.945 18.61 12.332\n" \ - "18.789 c 12.719 18.969 12.891 19.426 12.719 19.817 c S Q\n" - -#define ANNOT_TEXT_AP_NEW_PARAGRAPH \ - "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ - "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ - "l 1 21.523 2.477 23 4.301 23 c h\n" \ - "4.301 23 m f\n" \ - "0.533333 0.541176 0.521569 RG 4 w\n" \ - "0 J\n" \ - "2 j\n" \ - "[] 0.0 d\n" \ - "4 M q 1 0 0 -1 0 24 cm\n" \ - "9.211 11.988 m 8.449 12.07 7.711 11.707 7.305 11.059 c 6.898 10.41\n" \ - "6.898 9.59 7.305 8.941 c 7.711 8.293 8.449 7.93 9.211 8.012 c S Q\n" \ - "1.004413 w\n" \ - "1 J\n" \ - "1 j\n" \ - "q 1 0 0 -0.991232 0 24 cm\n" \ - "18.07 11.511 m 15.113 10.014 l 12.199 11.602 l 12.711 8.323 l 10.301\n" \ - "6.045 l 13.574 5.517 l 14.996 2.522 l 16.512 5.474 l 19.801 5.899 l\n" \ - "17.461 8.252 l 18.07 11.511 l h\n" \ - "18.07 11.511 m S Q\n" \ - "2 w\n" \ - "0 j\n" \ - "11 17 m 10 17 l 10 3 l S\n" \ - "14 3 m 14 13 l S\n" \ - "0.729412 0.741176 0.713725 RG 4 w\n" \ - "0 J\n" \ - "2 j\n" \ - "q 1 0 0 -1 0 24 cm\n" \ - "9.211 10.988 m 8.109 11.105 7.125 10.309 7.012 9.211 c 6.895 8.109\n" \ - "7.691 7.125 8.789 7.012 c 8.93 6.996 9.07 6.996 9.211 7.012 c S Q\n" \ - "1.004413 w\n" \ - "1 J\n" \ - "1 j\n" \ - "q 1 0 0 -0.991232 0 24 cm\n" \ - "18.07 10.502 m 15.113 9.005 l 12.199 10.593 l 12.711 7.314 l 10.301\n" \ - "5.036 l 13.574 4.508 l 14.996 1.513 l 16.512 4.465 l 19.801 4.891 l\n" \ - "17.461 7.243 l 18.07 10.502 l h\n" \ - "18.07 10.502 m S Q\n" \ - "2 w\n" \ - "0 j\n" \ - "11 18 m 10 18 l 10 4 l S\n" \ - "14 4 m 14 14 l S\n" - -#define ANNOT_TEXT_AP_PARAGRAPH \ - "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ - "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ - "l 1 21.523 2.477 23 4.301 23 c h\n" \ - "4.301 23 m f\n" \ - "0.533333 0.541176 0.521569 RG 2 w\n" \ - "1 J\n" \ - "1 j\n" \ - "[] 0.0 d\n" \ - "4 M 15 3 m 15 18 l 11 18 l 11 3 l S\n" \ - "4 w\n" \ - "q 1 0 0 -1 0 24 cm\n" \ - "9.777 10.988 m 8.746 10.871 7.973 9.988 8 8.949 c 8.027 7.91 8.844\n" \ - "7.066 9.879 7.004 c S Q\n" \ - "0.729412 0.741176 0.713725 RG 2 w\n" \ - "15 4 m 15 19 l 11 19 l 11 4 l S\n" \ - "4 w\n" \ - "q 1 0 0 -1 0 24 cm\n" \ - "9.777 9.988 m 8.746 9.871 7.973 8.988 8 7.949 c 8.027 6.91 8.844 6.066\n" \ - "9.879 6.004 c S Q\n" - -#define ANNOT_TEXT_AP_INSERT \ - "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ - "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ - "l 1 21.523 2.477 23 4.301 23 c h\n" \ - "4.301 23 m f\n" \ - "0.533333 0.541176 0.521569 RG 2 w\n" \ - "1 J\n" \ - "0 j\n" \ - "[] 0.0 d\n" \ - "4 M 12 18.012 m 20 18 l S\n" \ - "9 10 m 17 10 l S\n" \ - "12 14.012 m 20 14 l S\n" \ - "12 6.012 m 20 6.012 l S\n" \ - "4 12 m 6 10 l 4 8 l S\n" \ - "4 12 m 4 8 l S\n" \ - "0.729412 0.741176 0.713725 RG 12 19.012 m 20 19 l S\n" \ - "9 11 m 17 11 l S\n" \ - "12 15.012 m 20 15 l S\n" \ - "12 7.012 m 20 7.012 l S\n" \ - "4 13 m 6 11 l 4 9 l S\n" \ - "4 13 m 4 9 l S\n" - -#define ANNOT_TEXT_AP_CROSS \ - "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ - "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ - "l 1 21.523 2.477 23 4.301 23 c h\n" \ - "4.301 23 m f\n" \ - "0.533333 0.541176 0.521569 RG 2.5 w\n" \ - "1 J\n" \ - "0 j\n" \ - "[] 0.0 d\n" \ - "4 M 18 5 m 6 17 l S\n" \ - "6 5 m 18 17 l S\n" \ - "0.729412 0.741176 0.713725 RG 18 6 m 6 18 l S\n" \ - "6 6 m 18 18 l S\n" - -#define ANNOT_TEXT_AP_CIRCLE \ - "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ - "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ - "l 1 21.523 2.477 23 4.301 23 c h\n" \ - "4.301 23 m f\n" \ - "0.533333 0.541176 0.521569 RG 2.5 w\n" \ - "1 J\n" \ - "1 j\n" \ - "[] 0.0 d\n" \ - "4 M 19.5 11.5 m 19.5 7.359 16.141 4 12 4 c 7.859 4 4.5 7.359 4.5 11.5 c 4.5\n" \ - "15.641 7.859 19 12 19 c 16.141 19 19.5 15.641 19.5 11.5 c h\n" \ - "19.5 11.5 m S\n" \ - "0.729412 0.741176 0.713725 RG 19.5 12.5 m 19.5 8.359 16.141 5 12 5 c\n" \ - "7.859 5 4.5 8.359 4.5 12.5 c 4.5\n" \ - "16.641 7.859 20 12 20 c 16.141 20 19.5 16.641 19.5 12.5 c h\n" \ - "19.5 12.5 m S\n" - -void AnnotText::draw(Gfx *gfx, GBool printing) { - Object obj; - double ca = 1; - - if (!isVisible (printing)) - return; - - double rectx2 = rect->x2; - double recty2 = rect->y2; - if (appearance.isNull()) { - ca = opacity; - - appearBuf = new GooString (); - - appearBuf->append ("q\n"); - if (color) - setColor(color, gTrue); - else - appearBuf->append ("1 1 1 rg\n"); - if (!icon->cmp("Note")) - appearBuf->append (ANNOT_TEXT_AP_NOTE); - else if (!icon->cmp("Comment")) - appearBuf->append (ANNOT_TEXT_AP_COMMENT); - else if (!icon->cmp("Key")) - appearBuf->append (ANNOT_TEXT_AP_KEY); - else if (!icon->cmp("Help")) - appearBuf->append (ANNOT_TEXT_AP_HELP); - else if (!icon->cmp("NewParagraph")) - appearBuf->append (ANNOT_TEXT_AP_NEW_PARAGRAPH); - else if (!icon->cmp("Paragraph")) - appearBuf->append (ANNOT_TEXT_AP_PARAGRAPH); - else if (!icon->cmp("Insert")) - appearBuf->append (ANNOT_TEXT_AP_INSERT); - else if (!icon->cmp("Cross")) - appearBuf->append (ANNOT_TEXT_AP_CROSS); - else if (!icon->cmp("Circle")) - appearBuf->append (ANNOT_TEXT_AP_CIRCLE); - appearBuf->append ("Q\n"); - - double bbox[4]; - bbox[0] = bbox[1] = 0; - bbox[2] = bbox[3] = 24; - if (ca == 1) { - createForm(bbox, gFalse, NULL, &appearance); - } else { - Object aStream, resDict; - - createForm(bbox, gTrue, NULL, &aStream); - delete appearBuf; - - appearBuf = new GooString ("/GS0 gs\n/Fm0 Do"); - createResourcesDict("Fm0", &aStream, "GS0", ca, NULL, &resDict); - createForm(bbox, gFalse, &resDict, &appearance); - } - delete appearBuf; - - rectx2 = rect->x1 + 24; - recty2 = rect->y1 + 24; - } - - // draw the appearance stream - appearance.fetch(xref, &obj); - gfx->drawAnnot(&obj, border, color, - rect->x1, rect->y1, rectx2, recty2); - obj.free(); -} - -//------------------------------------------------------------------------ -// AnnotLink -//------------------------------------------------------------------------ -AnnotLink::AnnotLink(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : - Annot(xrefA, rect, catalog) { - Object obj1; - - type = typeLink; - annotObj.dictSet ("Subtype", obj1.initName ("Link")); - initialize (xrefA, catalog, annotObj.getDict()); -} - -AnnotLink::AnnotLink(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - Annot(xrefA, dict, catalog, obj) { - - type = typeLink; - initialize (xrefA, catalog, dict); -} - -AnnotLink::~AnnotLink() { - delete action; - /* - if (uriAction) - delete uriAction; - */ - if (quadrilaterals) - delete quadrilaterals; -} - -void AnnotLink::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) { - Object obj1; - - action = NULL; - - // look for destination - if (!dict->lookup("Dest", &obj1)->isNull()) { - action = LinkAction::parseDest(&obj1); - // look for action - } else { - obj1.free(); - if (dict->lookup("A", &obj1)->isDict()) { - action = LinkAction::parseAction(&obj1, catalog->getBaseURI()); - } - } - obj1.free(); - - if (dict->lookup("H", &obj1)->isName()) { - const char *effect = obj1.getName(); - - if (!strcmp(effect, "N")) { - linkEffect = effectNone; - } else if (!strcmp(effect, "I")) { - linkEffect = effectInvert; - } else if (!strcmp(effect, "O")) { - linkEffect = effectOutline; - } else if (!strcmp(effect, "P")) { - linkEffect = effectPush; - } else { - linkEffect = effectInvert; - } - } else { - linkEffect = effectInvert; - } - obj1.free(); - /* - if (dict->lookup("PA", &obj1)->isDict()) { - uriAction = NULL; - } else { - uriAction = NULL; - } - obj1.free(); - */ - if (dict->lookup("QuadPoints", &obj1)->isArray()) { - quadrilaterals = new AnnotQuadrilaterals(obj1.getArray(), rect); - } else { - quadrilaterals = NULL; - } - obj1.free(); -} - -void AnnotLink::draw(Gfx *gfx, GBool printing) { - Object obj; - - if (!isVisible (printing)) - return; - - // draw the appearance stream - appearance.fetch(xref, &obj); - gfx->drawAnnot(&obj, border, color, - rect->x1, rect->y1, rect->x2, rect->y2); - obj.free(); -} - -//------------------------------------------------------------------------ -// AnnotFreeText -//------------------------------------------------------------------------ -AnnotFreeText::AnnotFreeText(XRef *xrefA, PDFRectangle *rect, GooString *da, Catalog *catalog) : - AnnotMarkup(xrefA, rect, catalog) { - Object obj1; - - type = typeFreeText; - - annotObj.dictSet ("Subtype", obj1.initName ("FreeText")); - - Object obj2; - obj2.initString (da->copy()); - annotObj.dictSet("DA", &obj2); - - initialize (xrefA, catalog, annotObj.getDict()); -} - -AnnotFreeText::AnnotFreeText(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - AnnotMarkup(xrefA, dict, catalog, obj) { - type = typeFreeText; - initialize(xrefA, catalog, dict); -} - -AnnotFreeText::~AnnotFreeText() { - delete appearanceString; - - if (styleString) - delete styleString; - - if (calloutLine) - delete calloutLine; - - if (borderEffect) - delete borderEffect; - - if (rectangle) - delete rectangle; -} - -void AnnotFreeText::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) { - Object obj1; - - if (dict->lookup("DA", &obj1)->isString()) { - appearanceString = obj1.getString()->copy(); - } else { - appearanceString = new GooString(); - error(-1, "Bad appearance for annotation"); - ok = gFalse; - } - obj1.free(); - - if (dict->lookup("Q", &obj1)->isInt()) { - quadding = (AnnotFreeTextQuadding) obj1.getInt(); - } else { - quadding = quaddingLeftJustified; - } - obj1.free(); - - if (dict->lookup("DS", &obj1)->isString()) { - styleString = obj1.getString()->copy(); - } else { - styleString = NULL; - } - obj1.free(); - - if (dict->lookup("CL", &obj1)->isArray() && obj1.arrayGetLength() >= 4) { - double x1, y1, x2, y2; - Object obj2; - - (obj1.arrayGet(0, &obj2)->isNum() ? x1 = obj2.getNum() : x1 = 0); - obj2.free(); - (obj1.arrayGet(1, &obj2)->isNum() ? y1 = obj2.getNum() : y1 = 0); - obj2.free(); - (obj1.arrayGet(2, &obj2)->isNum() ? x2 = obj2.getNum() : x2 = 0); - obj2.free(); - (obj1.arrayGet(3, &obj2)->isNum() ? y2 = obj2.getNum() : y2 = 0); - obj2.free(); - - if (obj1.arrayGetLength() == 6) { - double x3, y3; - (obj1.arrayGet(4, &obj2)->isNum() ? x3 = obj2.getNum() : x3 = 0); - obj2.free(); - (obj1.arrayGet(5, &obj2)->isNum() ? y3 = obj2.getNum() : y3 = 0); - obj2.free(); - calloutLine = new AnnotCalloutMultiLine(x1, y1, x2, y2, x3, y3); - } else { - calloutLine = new AnnotCalloutLine(x1, y1, x2, y2); - } - } else { - calloutLine = NULL; - } - obj1.free(); - - if (dict->lookup("IT", &obj1)->isName()) { - const char *intentName = obj1.getName(); - - if (!strcmp(intentName, "FreeText")) { - intent = intentFreeText; - } else if (!strcmp(intentName, "FreeTextCallout")) { - intent = intentFreeTextCallout; - } else if (!strcmp(intentName, "FreeTextTypeWriter")) { - intent = intentFreeTextTypeWriter; - } else { - intent = intentFreeText; - } - } else { - intent = intentFreeText; - } - obj1.free(); - - if (dict->lookup("BE", &obj1)->isDict()) { - borderEffect = new AnnotBorderEffect(obj1.getDict()); - } else { - borderEffect = NULL; - } - obj1.free(); - - if (dict->lookup("RD", &obj1)->isArray()) { - rectangle = parseDiffRectangle(obj1.getArray(), rect); - } else { - rectangle = NULL; - } - obj1.free(); - - if (dict->lookup("LE", &obj1)->isName()) { - GooString styleName(obj1.getName()); - endStyle = parseAnnotLineEndingStyle(&styleName); - } else { - endStyle = annotLineEndingNone; - } - obj1.free(); -} - -//------------------------------------------------------------------------ -// AnnotLine -//------------------------------------------------------------------------ - -AnnotLine::AnnotLine(XRef *xrefA, PDFRectangle *rect, PDFRectangle *lRect, Catalog *catalog) : - AnnotMarkup(xrefA, rect, catalog) { - Object obj1; - - type = typeLine; - annotObj.dictSet ("Subtype", obj1.initName ("Line")); - - Object obj2, obj3; - obj2.initArray (xrefA); - obj2.arrayAdd (obj3.initReal (lRect->x1)); - obj2.arrayAdd (obj3.initReal (lRect->y1)); - obj2.arrayAdd (obj3.initReal (lRect->x2)); - obj2.arrayAdd (obj3.initReal (lRect->y2)); - annotObj.dictSet ("L", &obj2); - - initialize (xrefA, catalog, annotObj.getDict()); -} - -AnnotLine::AnnotLine(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - AnnotMarkup(xrefA, dict, catalog, obj) { - type = typeLine; - initialize(xrefA, catalog, dict); -} - -AnnotLine::~AnnotLine() { - delete coord1; - delete coord2; - - if (interiorColor) - delete interiorColor; - - if (measure) - delete measure; -} - -void AnnotLine::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) { - Object obj1; - - if (dict->lookup("L", &obj1)->isArray() && obj1.arrayGetLength() == 4) { - Object obj2; - double x1, y1, x2, y2; - - (obj1.arrayGet(0, &obj2)->isNum() ? x1 = obj2.getNum() : x1 = 0); - obj2.free(); - (obj1.arrayGet(1, &obj2)->isNum() ? y1 = obj2.getNum() : y1 = 0); - obj2.free(); - (obj1.arrayGet(2, &obj2)->isNum() ? x2 = obj2.getNum() : x2 = 0); - obj2.free(); - (obj1.arrayGet(3, &obj2)->isNum() ? y2 = obj2.getNum() : y2 = 0); - obj2.free(); - - coord1 = new AnnotCoord(x1, y1); - coord2 = new AnnotCoord(x2, y2); - } else { - coord1 = new AnnotCoord(); - coord2 = new AnnotCoord(); - } - obj1.free(); - - if (dict->lookup("LE", &obj1)->isArray() && obj1.arrayGetLength() == 2) { - Object obj2; - - if(obj1.arrayGet(0, &obj2)->isString()) - startStyle = parseAnnotLineEndingStyle(obj2.getString()); - else - startStyle = annotLineEndingNone; - obj2.free(); - - if(obj1.arrayGet(1, &obj2)->isString()) - endStyle = parseAnnotLineEndingStyle(obj2.getString()); - else - endStyle = annotLineEndingNone; - obj2.free(); - - } else { - startStyle = endStyle = annotLineEndingNone; - } - obj1.free(); - - if (dict->lookup("IC", &obj1)->isArray()) { - interiorColor = new AnnotColor(obj1.getArray()); - } else { - interiorColor = NULL; - } - obj1.free(); - - if (dict->lookup("LL", &obj1)->isNum()) { - leaderLineLength = obj1.getNum(); - } else { - leaderLineLength = 0; - } - obj1.free(); - - if (dict->lookup("LLE", &obj1)->isNum()) { - leaderLineExtension = obj1.getNum(); - - if (leaderLineExtension < 0) - leaderLineExtension = 0; - } else { - leaderLineExtension = 0; - } - obj1.free(); - - if (dict->lookup("Cap", &obj1)->isBool()) { - caption = obj1.getBool(); - } else { - caption = gFalse; - } - obj1.free(); - - if (dict->lookup("IT", &obj1)->isName()) { - const char *intentName = obj1.getName(); - - if(!strcmp(intentName, "LineArrow")) { - intent = intentLineArrow; - } else if(!strcmp(intentName, "LineDimension")) { - intent = intentLineDimension; - } else { - intent = intentLineArrow; - } - } else { - intent = intentLineArrow; - } - obj1.free(); - - if (dict->lookup("LLO", &obj1)->isNum()) { - leaderLineOffset = obj1.getNum(); - - if (leaderLineOffset < 0) - leaderLineOffset = 0; - } else { - leaderLineOffset = 0; - } - obj1.free(); - - if (dict->lookup("CP", &obj1)->isName()) { - const char *captionName = obj1.getName(); - - if(!strcmp(captionName, "Inline")) { - captionPos = captionPosInline; - } else if(!strcmp(captionName, "Top")) { - captionPos = captionPosTop; - } else { - captionPos = captionPosInline; - } - } else { - captionPos = captionPosInline; - } - obj1.free(); - - if (dict->lookup("Measure", &obj1)->isDict()) { - measure = NULL; - } else { - measure = NULL; - } - obj1.free(); - - if ((dict->lookup("CO", &obj1)->isArray()) && (obj1.arrayGetLength() == 2)) { - Object obj2; - - (obj1.arrayGet(0, &obj2)->isNum() ? captionTextHorizontal = obj2.getNum() : - captionTextHorizontal = 0); - obj2.free(); - (obj1.arrayGet(1, &obj2)->isNum() ? captionTextVertical = obj2.getNum() : - captionTextVertical = 0); - obj2.free(); - } else { - captionTextHorizontal = captionTextVertical = 0; - } - obj1.free(); -} - -void AnnotLine::draw(Gfx *gfx, GBool printing) { - Object obj; - double ca = 1; - - if (!isVisible (printing)) - return; - - /* Some documents like pdf_commenting_new.pdf, - * have y1 = y2 but line_width > 0, acroread - * renders the lines in such cases even though - * the annot bbox is empty. We adjust the bbox here - * to avoid having an empty bbox so that lines - * are rendered - */ - if (rect->y1 == rect->y2) - rect->y2 += border ? border->getWidth() : 1; - - if (appearance.isNull()) { - ca = opacity; - - appearBuf = new GooString (); - appearBuf->append ("q\n"); - if (color) - setColor(color, gFalse); - - if (border) { - int i, dashLength; - double *dash; - - switch (border->getStyle()) { - case AnnotBorder::borderDashed: - appearBuf->append("["); - dashLength = border->getDashLength(); - dash = border->getDash(); - for (i = 0; i < dashLength; ++i) - appearBuf->appendf(" {0:.2f}", dash[i]); - appearBuf->append(" ] 0 d\n"); - break; - default: - appearBuf->append("[] 0 d\n"); - break; - } - appearBuf->appendf("{0:.2f} w\n", border->getWidth()); - } - appearBuf->appendf ("{0:.2f} {1:.2f} m\n", coord1->getX() - rect->x1, coord1->getY() - rect->y1); - appearBuf->appendf ("{0:.2f} {1:.2f} l\n", coord2->getX() - rect->x1, coord2->getY() - rect->y1); - // TODO: Line ending, caption, leader lines - appearBuf->append ("S\n"); - appearBuf->append ("Q\n"); - - double bbox[4]; - bbox[0] = bbox[1] = 0; - bbox[2] = rect->x2 - rect->x1; - bbox[3] = rect->y2 - rect->y1; - if (ca == 1) { - createForm(bbox, gFalse, NULL, &appearance); - } else { - Object aStream, resDict; - - createForm(bbox, gTrue, NULL, &aStream); - delete appearBuf; - - appearBuf = new GooString ("/GS0 gs\n/Fm0 Do"); - createResourcesDict("Fm0", &aStream, "GS0", ca, NULL, &resDict); - createForm(bbox, gFalse, &resDict, &appearance); - } - delete appearBuf; - } - - // draw the appearance stream - appearance.fetch(xref, &obj); - gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color, - rect->x1, rect->y1, rect->x2, rect->y2); - obj.free(); -} - -//------------------------------------------------------------------------ -// AnnotTextMarkup -//------------------------------------------------------------------------ -AnnotTextMarkup::AnnotTextMarkup(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType, - AnnotQuadrilaterals *quadPoints, Catalog *catalog) : - AnnotMarkup(xrefA, rect, catalog) { - Object obj1; - - switch (subType) { - case typeHighlight: - annotObj.dictSet ("Subtype", obj1.initName ("Highlight")); - break; - case typeUnderline: - annotObj.dictSet ("Subtype", obj1.initName ("Underline")); - break; - case typeSquiggly: - annotObj.dictSet ("Subtype", obj1.initName ("Squiggly")); - break; - case typeStrikeOut: - annotObj.dictSet ("Subtype", obj1.initName ("StrikeOut")); - break; - default: - assert (0 && "Invalid subtype for AnnotTextMarkup\n"); - } - - Object obj2; - obj2.initArray (xrefA); - - for (int i = 0; i < quadPoints->getQuadrilateralsLength(); ++i) { - Object obj3; - - obj2.arrayAdd (obj3.initReal (quadPoints->getX1(i))); - obj2.arrayAdd (obj3.initReal (quadPoints->getY1(i))); - obj2.arrayAdd (obj3.initReal (quadPoints->getX2(i))); - obj2.arrayAdd (obj3.initReal (quadPoints->getY2(i))); - obj2.arrayAdd (obj3.initReal (quadPoints->getX3(i))); - obj2.arrayAdd (obj3.initReal (quadPoints->getY3(i))); - obj2.arrayAdd (obj3.initReal (quadPoints->getX4(i))); - obj2.arrayAdd (obj3.initReal (quadPoints->getY4(i))); - } - - annotObj.dictSet ("QuadPoints", &obj2); - - initialize(xrefA, catalog, annotObj.getDict()); -} - -AnnotTextMarkup::AnnotTextMarkup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - AnnotMarkup(xrefA, dict, catalog, obj) { - // the real type will be read in initialize() - type = typeHighlight; - initialize(xrefA, catalog, dict); -} - -void AnnotTextMarkup::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) { - Object obj1; - - if (dict->lookup("Subtype", &obj1)->isName()) { - GooString typeName(obj1.getName()); - if (!typeName.cmp("Highlight")) { - type = typeHighlight; - } else if (!typeName.cmp("Underline")) { - type = typeUnderline; - } else if (!typeName.cmp("Squiggly")) { - type = typeSquiggly; - } else if (!typeName.cmp("StrikeOut")) { - type = typeStrikeOut; - } - } - obj1.free(); - - if(dict->lookup("QuadPoints", &obj1)->isArray()) { - quadrilaterals = new AnnotQuadrilaterals(obj1.getArray(), rect); - } else { - error(-1, "Bad Annot Text Markup QuadPoints"); - quadrilaterals = NULL; - ok = gFalse; - } - obj1.free(); -} - -AnnotTextMarkup::~AnnotTextMarkup() { - if(quadrilaterals) { - delete quadrilaterals; - } -} - - - -void AnnotTextMarkup::draw(Gfx *gfx, GBool printing) { - Object obj; - double ca = 1; - int i; - Object obj1, obj2; - - if (!isVisible (printing)) - return; - - if (appearance.isNull() || type == typeHighlight) { - ca = opacity; - - appearBuf = new GooString (); - - switch (type) { - case typeUnderline: - if (color) { - setColor(color, gFalse); - setColor(color, gTrue); - } - - for (i = 0; i < quadrilaterals->getQuadrilateralsLength(); ++i) { - double x1, x2, y3; - double x, y; - - x1 = quadrilaterals->getX1(i); - x2 = quadrilaterals->getX2(i); - y3 = quadrilaterals->getY3(i); - - x = x1 - rect->x1; - y = y3 - rect->y1; - appearBuf->append ("[]0 d 2 w\n"); - appearBuf->appendf ("{0:.2f} {1:.2f} m\n", x, y); - appearBuf->appendf ("{0:.2f} {1:.2f} l\n", x + (x2 - x1), y); - appearBuf->append ("S\n"); - } - break; - case typeStrikeOut: - if (color) { - setColor(color, gFalse); - setColor(color, gTrue); - } - - for (i = 0; i < quadrilaterals->getQuadrilateralsLength(); ++i) { - double x1, y1, x2, y3; - double x, y; - double h2; - - x1 = quadrilaterals->getX1(i); - y1 = quadrilaterals->getY1(i); - x2 = quadrilaterals->getX2(i); - y3 = quadrilaterals->getY3(i); - h2 = (y1 - y3) / 2.0; - - x = x1 - rect->x1; - y = (y3 - rect->y1) + h2; - appearBuf->append ("[]0 d 2 w\n"); - appearBuf->appendf ("{0:.2f} {1:.2f} m\n", x, y); - appearBuf->appendf ("{0:.2f} {1:.2f} l\n", x + (x2 - x1), y); - appearBuf->append ("S\n"); - } - break; - case typeSquiggly: - // TODO - default: - case typeHighlight: - appearance.free(); - - if (color) - setColor(color, gTrue); - - for (i = 0; i < quadrilaterals->getQuadrilateralsLength(); ++i) { - double x1, y1, x2, y2, x3, y3, x4, y4; - double h4; - - x1 = quadrilaterals->getX1(i); - y1 = quadrilaterals->getY1(i); - x2 = quadrilaterals->getX2(i); - y2 = quadrilaterals->getY2(i); - x3 = quadrilaterals->getX3(i); - y3 = quadrilaterals->getY3(i); - x4 = quadrilaterals->getX4(i); - y4 = quadrilaterals->getY4(i); - h4 = fabs(y1 - y3) / 4.0; - - appearBuf->appendf ("{0:.2f} {1:.2f} m\n", x3, y3); - appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", - x3 - h4, y3 + h4, x1 - h4, y1 - h4, x1, y1); - appearBuf->appendf ("{0:.2f} {1:.2f} l\n", x2, y2); - appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", - x2 + h4, y2 - h4, x4 + h4, y4 + h4, x4, y4); - appearBuf->append ("f\n"); - } - - Object aStream, resDict; - double bbox[4]; - bbox[0] = rect->x1; - bbox[1] = rect->y1; - bbox[2] = rect->x2; - bbox[3] = rect->y2; - createForm(bbox, gTrue, NULL, &aStream); - delete appearBuf; - - appearBuf = new GooString ("/GS0 gs\n/Fm0 Do"); - createResourcesDict("Fm0", &aStream, "GS0", 1, "Multiply", &resDict); - if (ca == 1) { - createForm(bbox, gFalse, &resDict, &appearance); - } else { - createForm(bbox, gTrue, &resDict, &aStream); - delete appearBuf; - - appearBuf = new GooString ("/GS0 gs\n/Fm0 Do"); - createResourcesDict("Fm0", &aStream, "GS0", ca, NULL, &resDict); - createForm(bbox, gFalse, &resDict, &appearance); - } - delete appearBuf; - break; - } - } - - // draw the appearance stream - appearance.fetch(xref, &obj); - gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color, - rect->x1, rect->y1, rect->x2, rect->y2); - obj.free(); -} - -//------------------------------------------------------------------------ -// AnnotWidget -//------------------------------------------------------------------------ - -AnnotWidget::AnnotWidget(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - Annot(xrefA, dict, catalog, obj) { - type = typeWidget; - field = NULL; - initialize(xrefA, catalog, dict); -} - -AnnotWidget::AnnotWidget(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj, FormField *fieldA) : - Annot(xrefA, dict, catalog, obj) { - type = typeWidget; - field = fieldA; - initialize(xrefA, catalog, dict); -} - -AnnotWidget::~AnnotWidget() { - if (appearCharacs) - delete appearCharacs; - - if (action) - delete action; - - if (additionActions) - delete additionActions; - - if (parent) - delete parent; -} - -void AnnotWidget::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) { - Object obj1; - - form = catalog->getForm(); - - if(dict->lookup("H", &obj1)->isName()) { - const char *modeName = obj1.getName(); - - if(!strcmp(modeName, "N")) { - mode = highlightModeNone; - } else if(!strcmp(modeName, "O")) { - mode = highlightModeOutline; - } else if(!strcmp(modeName, "P") || !strcmp(modeName, "T")) { - mode = highlightModePush; - } else { - mode = highlightModeInvert; - } - } else { - mode = highlightModeInvert; - } - obj1.free(); - - if(dict->lookup("MK", &obj1)->isDict()) { - appearCharacs = new AnnotAppearanceCharacs(obj1.getDict()); - } else { - appearCharacs = NULL; - } - obj1.free(); - - action = NULL; - if(dict->lookup("A", &obj1)->isDict()) { - action = LinkAction::parseAction(&obj1, catalog->getBaseURI()); - } - obj1.free(); - - if(dict->lookup("AA", &obj1)->isDict()) { - additionActions = NULL; - } else { - additionActions = NULL; - } - obj1.free(); - - if(dict->lookup("Parent", &obj1)->isDict()) { - parent = NULL; - } else { - parent = NULL; - } - obj1.free(); -} - -// Grand unified handler for preparing text strings to be drawn into form -// fields. Takes as input a text string (in PDFDocEncoding or UTF-16). -// Converts some or all of this string to the appropriate encoding for the -// specified font, and computes the width of the text. Can optionally stop -// converting when a specified width has been reached, to perform line-breaking -// for multi-line fields. -// -// Parameters: -// text: input text string to convert -// outBuf: buffer for writing re-encoded string -// i: index at which to start converting; will be updated to point just after -// last character processed -// font: the font which will be used for display -// width: computed width (unscaled by font size) will be stored here -// widthLimit: if non-zero, stop converting to keep width under this value -// (should be scaled down by font size) -// charCount: count of number of characters will be stored here -// noReencode: if set, do not try to translate the character encoding -// (useful for Zapf Dingbats or other unusual encodings) -// can only be used with simple fonts, not CID-keyed fonts -// -// TODO: Handle surrogate pairs in UTF-16. -// Should be able to generate output for any CID-keyed font. -// Doesn't handle vertical fonts--should it? -void AnnotWidget::layoutText(GooString *text, GooString *outBuf, int *i, - GfxFont *font, double *width, double widthLimit, - int *charCount, GBool noReencode) -{ - CharCode c; - Unicode uChar, *uAux; - double w = 0.0; - int uLen, n; - double dx, dy, ox, oy; - GBool unicode = text->hasUnicodeMarker(); - GBool spacePrev; // previous character was a space - - // State for backtracking when more text has been processed than fits within - // widthLimit. We track for both input (text) and output (outBuf) the offset - // to the first character to discard. - // - // We keep track of several points: - // 1 - end of previous completed word which fits - // 2 - previous character which fit - int last_i1, last_i2, last_o1, last_o2; - - if (unicode && text->getLength() % 2 != 0) { - error(-1, "AnnotWidget::layoutText, bad unicode string"); - return; - } - - // skip Unicode marker on string if needed - if (unicode && *i == 0) - *i = 2; - - // Start decoding and copying characters, until either: - // we reach the end of the string - // we reach the maximum width - // we reach a newline character - // As we copy characters, keep track of the last full word to fit, so that we - // can backtrack if we exceed the maximum width. - last_i1 = last_i2 = *i; - last_o1 = last_o2 = 0; - spacePrev = gFalse; - outBuf->clear(); - - while (*i < text->getLength()) { - last_i2 = *i; - last_o2 = outBuf->getLength(); - - if (unicode) { - uChar = (unsigned char)(text->getChar(*i)) << 8; - uChar += (unsigned char)(text->getChar(*i + 1)); - *i += 2; - } else { - if (noReencode) - uChar = text->getChar(*i) & 0xff; - else - uChar = pdfDocEncoding[text->getChar(*i) & 0xff]; - *i += 1; - } - - // Explicit line break? - if (uChar == '\r' || uChar == '\n') { - // Treat a <CR><LF> sequence as a single line break - if (uChar == '\r' && *i < text->getLength()) { - if (unicode && text->getChar(*i) == '\0' - && text->getChar(*i + 1) == '\n') - *i += 2; - else if (!unicode && text->getChar(*i) == '\n') - *i += 1; - } - - break; - } - - if (noReencode) { - outBuf->append(uChar); - } else { - CharCodeToUnicode *ccToUnicode = font->getToUnicode(); - if (!ccToUnicode) { - // This assumes an identity CMap. - outBuf->append((uChar >> 8) & 0xff); - outBuf->append(uChar & 0xff); - } else if (ccToUnicode->mapToCharCode(&uChar, &c, 1)) { - ccToUnicode->decRefCnt(); - if (font->isCIDFont()) { - // TODO: This assumes an identity CMap. It should be extended to - // handle the general case. - outBuf->append((c >> 8) & 0xff); - outBuf->append(c & 0xff); - } else { - // 8-bit font - outBuf->append(c); - } - } else { - ccToUnicode->decRefCnt(); - fprintf(stderr, - "warning: layoutText: cannot convert U+%04X\n", uChar); - } - } - - // If we see a space, then we have a linebreak opportunity. - if (uChar == ' ') { - last_i1 = *i; - if (!spacePrev) - last_o1 = last_o2; - spacePrev = gTrue; - } else { - spacePrev = gFalse; - } - - // Compute width of character just output - if (outBuf->getLength() > last_o2) { - dx = 0.0; - font->getNextChar(outBuf->getCString() + last_o2, - outBuf->getLength() - last_o2, - &c, &uAux, &uLen, &dx, &dy, &ox, &oy); - w += dx; - } - - // Current line over-full now? - if (widthLimit > 0.0 && w > widthLimit) { - if (last_o1 > 0) { - // Back up to the previous word which fit, if there was a previous - // word. - *i = last_i1; - outBuf->del(last_o1, outBuf->getLength() - last_o1); - } else if (last_o2 > 0) { - // Otherwise, back up to the previous character (in the only word on - // this line) - *i = last_i2; - outBuf->del(last_o2, outBuf->getLength() - last_o2); - } else { - // Otherwise, we were trying to fit the first character; include it - // anyway even if it overflows the space--no updates to make. - } - break; - } - } - - // If splitting input into lines because we reached the width limit, then - // consume any remaining trailing spaces that would go on this line from the - // input. If in doing so we reach a newline, consume that also. This code - // won't run if we stopped at a newline above, since in that case w <= - // widthLimit still. - if (widthLimit > 0.0 && w > widthLimit) { - if (unicode) { - while (*i < text->getLength() - && text->getChar(*i) == '\0' && text->getChar(*i + 1) == ' ') - *i += 2; - if (*i < text->getLength() - && text->getChar(*i) == '\0' && text->getChar(*i + 1) == '\r') - *i += 2; - if (*i < text->getLength() - && text->getChar(*i) == '\0' && text->getChar(*i + 1) == '\n') - *i += 2; - } else { - while (*i < text->getLength() && text->getChar(*i) == ' ') - *i += 1; - if (*i < text->getLength() && text->getChar(*i) == '\r') - *i += 1; - if (*i < text->getLength() && text->getChar(*i) == '\n') - *i += 1; - } - } - - // Compute the actual width and character count of the final string, based on - // breakpoint, if this information is requested by the caller. - if (width != NULL || charCount != NULL) { - char *s = outBuf->getCString(); - int len = outBuf->getLength(); - - if (width != NULL) - *width = 0.0; - if (charCount != NULL) - *charCount = 0; - - while (len > 0) { - dx = 0.0; - n = font->getNextChar(s, len, &c, &uAux, &uLen, &dx, &dy, &ox, &oy); - - if (n == 0) { - break; - } - - if (width != NULL) - *width += dx; - if (charCount != NULL) - *charCount += 1; - - s += n; - len -= n; - } - } -} - -// Copy the given string to appearBuf, adding parentheses around it and -// escaping characters as appropriate. -void AnnotWidget::writeString(GooString *str, GooString *appearBuf) -{ - char c; - int i; - - appearBuf->append('('); - - for (i = 0; i < str->getLength(); ++i) { - c = str->getChar(i); - if (c == '(' || c == ')' || c == '\\') { - appearBuf->append('\\'); - appearBuf->append(c); - } else if (c < 0x20) { - appearBuf->appendf("\\{0:03o}", (unsigned char)c); - } else { - appearBuf->append(c); - } - } - - appearBuf->append(')'); -} - -// Draw the variable text or caption for a field. -void AnnotWidget::drawText(GooString *text, GooString *da, GfxResources *resources, - GBool multiline, int comb, int quadding, - GBool txField, GBool forceZapfDingbats, - GBool password) { - GooList *daToks; - GooString *tok, *convertedText; - GfxFont *font; - double fontSize, fontSize2, borderWidth, x, xPrev, y, w, wMax; - int tfPos, tmPos, i, j; - GBool freeText = gFalse; // true if text should be freed before return - GBool freeFont = gFalse; - - //~ if there is no MK entry, this should use the existing content stream, - //~ and only replace the marked content portion of it - //~ (this is only relevant for Tx fields) - - // parse the default appearance string - tfPos = tmPos = -1; - if (da) { - daToks = new GooList(); - i = 0; - while (i < da->getLength()) { - while (i < da->getLength() && Lexer::isSpace(da->getChar(i))) { - ++i; - } - if (i < da->getLength()) { - for (j = i + 1; - j < da->getLength() && !Lexer::isSpace(da->getChar(j)); - ++j) ; - daToks->append(new GooString(da, i, j - i)); - i = j; - } - } - for (i = 2; i < daToks->getLength(); ++i) { - if (i >= 2 && !((GooString *)daToks->get(i))->cmp("Tf")) { - tfPos = i - 2; - } else if (i >= 6 && !((GooString *)daToks->get(i))->cmp("Tm")) { - tmPos = i - 6; - } - } - } else { - daToks = NULL; - } - - // force ZapfDingbats - if (forceZapfDingbats) { - if (tfPos >= 0) { - tok = (GooString *)daToks->get(tfPos); - if (tok->cmp("/ZaDb")) { - tok->clear(); - tok->append("/ZaDb"); - } - } - } - // get the font and font size - font = NULL; - fontSize = 0; - if (tfPos >= 0) { - tok = (GooString *)daToks->get(tfPos); - if (tok->getLength() >= 1 && tok->getChar(0) == '/') { - if (!resources || !(font = resources->lookupFont(tok->getCString() + 1))) { - if (forceZapfDingbats) { - // We are forcing ZaDb but the font does not exist - // so create a fake one - Ref r; // dummy Ref, it's not used at all in this codepath - r.num = 0; - r.gen = 0; - Dict *d = new Dict(xref); - font = new Gfx8BitFont(xref, "ZaDb", r, new GooString("ZapfDingbats"), fontType1, d); - delete d; - freeFont = gTrue; - addDingbatsResource = gTrue; - } else { - error(-1, "Unknown font in field's DA string"); - } - } - } else { - error(-1, "Invalid font name in 'Tf' operator in field's DA string"); - } - tok = (GooString *)daToks->get(tfPos + 1); - fontSize = gatof(tok->getCString()); - } else { - error(-1, "Missing 'Tf' operator in field's DA string"); - } - if (!font) { - if (daToks) { - deleteGooList(daToks, GooString); - } - return; - } - - // get the border width - borderWidth = border ? border->getWidth() : 0; - - // for a password field, replace all characters with asterisks - if (password) { - int len; - if (text->hasUnicodeMarker()) - len = (text->getLength() - 2) / 2; - else - len = text->getLength(); - - text = new GooString; - for (i = 0; i < len; ++i) - text->append('*'); - freeText = gTrue; - } - - convertedText = new GooString; - - // setup - if (txField) { - appearBuf->append("/Tx BMC\n"); - } - appearBuf->append("q\n"); - appearBuf->append("BT\n"); - // multi-line text - if (multiline) { - // note: the comb flag is ignored in multiline mode - - wMax = rect->x2 - rect->x1 - 2 * borderWidth - 4; - - // compute font autosize - if (fontSize == 0) { - for (fontSize = 20; fontSize > 1; --fontSize) { - y = rect->y2 - rect->y1; - i = 0; - while (i < text->getLength()) { - layoutText(text, convertedText, &i, font, &w, wMax / fontSize, NULL, - forceZapfDingbats); - y -= fontSize; - } - // approximate the descender for the last line - if (y >= 0.33 * fontSize) { - break; - } - } - if (tfPos >= 0) { - tok = (GooString *)daToks->get(tfPos + 1); - tok->clear(); - tok->appendf("{0:.2f}", fontSize); - } - } - - // starting y coordinate - // (note: each line of text starts with a Td operator that moves - // down a line) - y = rect->y2 - rect->y1; - - // set the font matrix - if (tmPos >= 0) { - tok = (GooString *)daToks->get(tmPos + 4); - tok->clear(); - tok->append('0'); - tok = (GooString *)daToks->get(tmPos + 5); - tok->clear(); - tok->appendf("{0:.2f}", y); - } - - // write the DA string - if (daToks) { - for (i = 0; i < daToks->getLength(); ++i) { - appearBuf->append((GooString *)daToks->get(i))->append(' '); - } - } - - // write the font matrix (if not part of the DA string) - if (tmPos < 0) { - appearBuf->appendf("1 0 0 1 0 {0:.2f} Tm\n", y); - } - - // write a series of lines of text - i = 0; - xPrev = 0; - while (i < text->getLength()) { - layoutText(text, convertedText, &i, font, &w, wMax / fontSize, NULL, - forceZapfDingbats); - w *= fontSize; - - // compute text start position - switch (quadding) { - case quaddingLeftJustified: - default: - x = borderWidth + 2; - break; - case quaddingCentered: - x = (rect->x2 - rect->x1 - w) / 2; - break; - case quaddingRightJustified: - x = rect->x2 - rect->x1 - borderWidth - 2 - w; - break; - } - - // draw the line - appearBuf->appendf("{0:.2f} {1:.2f} Td\n", x - xPrev, -fontSize); - writeString(convertedText, appearBuf); - appearBuf->append(" Tj\n"); - - // next line - xPrev = x; - } - - // single-line text - } else { - //~ replace newlines with spaces? - what does Acrobat do? - - // comb formatting - if (comb > 0) { - int charCount; - - // compute comb spacing - w = (rect->x2 - rect->x1 - 2 * borderWidth) / comb; - - // compute font autosize - if (fontSize == 0) { - fontSize = rect->y2 - rect->y1 - 2 * borderWidth; - if (w < fontSize) { - fontSize = w; - } - fontSize = floor(fontSize); - if (tfPos >= 0) { - tok = (GooString *)daToks->get(tfPos + 1); - tok->clear(); - tok->appendf("{0:.2f}", fontSize); - } - } - - i = 0; - layoutText(text, convertedText, &i, font, NULL, 0.0, &charCount, - forceZapfDingbats); - if (charCount > comb) - charCount = comb; - - // compute starting text cell - switch (quadding) { - case quaddingLeftJustified: - default: - x = borderWidth; - break; - case quaddingCentered: - x = borderWidth + (comb - charCount) / 2 * w; - break; - case quaddingRightJustified: - x = borderWidth + (comb - charCount) * w; - break; - } - y = 0.5 * (rect->y2 - rect->y1) - 0.4 * fontSize; - - // set the font matrix - if (tmPos >= 0) { - tok = (GooString *)daToks->get(tmPos + 4); - tok->clear(); - tok->appendf("{0:.2f}", x); - tok = (GooString *)daToks->get(tmPos + 5); - tok->clear(); - tok->appendf("{0:.2f}", y); - } - - // write the DA string - if (daToks) { - for (i = 0; i < daToks->getLength(); ++i) { - appearBuf->append((GooString *)daToks->get(i))->append(' '); - } - } - - // write the font matrix (if not part of the DA string) - if (tmPos < 0) { - appearBuf->appendf("1 0 0 1 {0:.2f} {1:.2f} Tm\n", x, y); - } - - // write the text string - char *s = convertedText->getCString(); - int len = convertedText->getLength(); - i = 0; - xPrev = w; // so that first character is placed properly - while (i < comb && len > 0) { - CharCode code; - Unicode *uAux; - int uLen, n; - double dx, dy, ox, oy; - - dx = 0.0; - n = font->getNextChar(s, len, &code, &uAux, &uLen, &dx, &dy, &ox, &oy); - dx *= fontSize; - - // center each character within its cell, by advancing the text - // position the appropriate amount relative to the start of the - // previous character - x = 0.5 * (w - dx); - appearBuf->appendf("{0:.2f} 0 Td\n", x - xPrev + w); - - GooString *charBuf = new GooString(s, n); - writeString(charBuf, appearBuf); - appearBuf->append(" Tj\n"); - delete charBuf; - - i++; - s += n; - len -= n; - xPrev = x; - } - - // regular (non-comb) formatting - } else { - i = 0; - layoutText(text, convertedText, &i, font, &w, 0.0, NULL, - forceZapfDingbats); - - // compute font autosize - if (fontSize == 0) { - fontSize = rect->y2 - rect->y1 - 2 * borderWidth; - fontSize2 = (rect->x2 - rect->x1 - 4 - 2 * borderWidth) / w; - if (fontSize2 < fontSize) { - fontSize = fontSize2; - } - fontSize = floor(fontSize); - if (tfPos >= 0) { - tok = (GooString *)daToks->get(tfPos + 1); - tok->clear(); - tok->appendf("{0:.2f}", fontSize); - } - } - - // compute text start position - w *= fontSize; - switch (quadding) { - case quaddingLeftJustified: - default: - x = borderWidth + 2; - break; - case quaddingCentered: - x = (rect->x2 - rect->x1 - w) / 2; - break; - case quaddingRightJustified: - x = rect->x2 - rect->x1 - borderWidth - 2 - w; - break; - } - y = 0.5 * (rect->y2 - rect->y1) - 0.4 * fontSize; - - // set the font matrix - if (tmPos >= 0) { - tok = (GooString *)daToks->get(tmPos + 4); - tok->clear(); - tok->appendf("{0:.2f}", x); - tok = (GooString *)daToks->get(tmPos + 5); - tok->clear(); - tok->appendf("{0:.2f}", y); - } - - // write the DA string - if (daToks) { - for (i = 0; i < daToks->getLength(); ++i) { - appearBuf->append((GooString *)daToks->get(i))->append(' '); - } - } - - // write the font matrix (if not part of the DA string) - if (tmPos < 0) { - appearBuf->appendf("1 0 0 1 {0:.2f} {1:.2f} Tm\n", x, y); - } - - // write the text string - writeString(convertedText, appearBuf); - appearBuf->append(" Tj\n"); - } - } - // cleanup - appearBuf->append("ET\n"); - appearBuf->append("Q\n"); - if (txField) { - appearBuf->append("EMC\n"); - } - if (daToks) { - deleteGooList(daToks, GooString); - } - if (freeText) { - delete text; - } - delete convertedText; - if (freeFont) { - font->decRefCnt(); - } -} - -// Draw the variable text or caption for a field. -void AnnotWidget::drawListBox(FormFieldChoice *fieldChoice, - GooString *da, GfxResources *resources, int quadding) { - GooList *daToks; - GooString *tok, *convertedText; - GfxFont *font; - double fontSize, fontSize2, borderWidth, x, y, w, wMax; - int tfPos, tmPos, i, j; - - //~ if there is no MK entry, this should use the existing content stream, - //~ and only replace the marked content portion of it - //~ (this is only relevant for Tx fields) - - // parse the default appearance string - tfPos = tmPos = -1; - if (da) { - daToks = new GooList(); - i = 0; - while (i < da->getLength()) { - while (i < da->getLength() && Lexer::isSpace(da->getChar(i))) { - ++i; - } - if (i < da->getLength()) { - for (j = i + 1; - j < da->getLength() && !Lexer::isSpace(da->getChar(j)); - ++j) ; - daToks->append(new GooString(da, i, j - i)); - i = j; - } - } - for (i = 2; i < daToks->getLength(); ++i) { - if (i >= 2 && !((GooString *)daToks->get(i))->cmp("Tf")) { - tfPos = i - 2; - } else if (i >= 6 && !((GooString *)daToks->get(i))->cmp("Tm")) { - tmPos = i - 6; - } - } - } else { - daToks = NULL; - } - - // get the font and font size - font = NULL; - fontSize = 0; - if (tfPos >= 0) { - tok = (GooString *)daToks->get(tfPos); - if (tok->getLength() >= 1 && tok->getChar(0) == '/') { - if (!resources || !(font = resources->lookupFont(tok->getCString() + 1))) { - error(-1, "Unknown font in field's DA string"); - } - } else { - error(-1, "Invalid font name in 'Tf' operator in field's DA string"); - } - tok = (GooString *)daToks->get(tfPos + 1); - fontSize = gatof(tok->getCString()); - } else { - error(-1, "Missing 'Tf' operator in field's DA string"); - } - if (!font) { - if (daToks) { - deleteGooList(daToks, GooString); - } - return; - } - - convertedText = new GooString; - - // get the border width - borderWidth = border ? border->getWidth() : 0; - - // compute font autosize - if (fontSize == 0) { - wMax = 0; - for (i = 0; i < fieldChoice->getNumChoices(); ++i) { - j = 0; - layoutText(fieldChoice->getChoice(i), convertedText, &j, font, &w, 0.0, NULL, gFalse); - if (w > wMax) { - wMax = w; - } - } - fontSize = rect->y2 - rect->y1 - 2 * borderWidth; - fontSize2 = (rect->x2 - rect->x1 - 4 - 2 * borderWidth) / wMax; - if (fontSize2 < fontSize) { - fontSize = fontSize2; - } - fontSize = floor(fontSize); - if (tfPos >= 0) { - tok = (GooString *)daToks->get(tfPos + 1); - tok->clear(); - tok->appendf("{0:.2f}", fontSize); - } - } - // draw the text - y = rect->y2 - rect->y1 - 1.1 * fontSize; - for (i = fieldChoice->getTopIndex(); i < fieldChoice->getNumChoices(); ++i) { - // setup - appearBuf->append("q\n"); - - // draw the background if selected - if (fieldChoice->isSelected(i)) { - appearBuf->append("0 g f\n"); - appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} re f\n", - borderWidth, - y - 0.2 * fontSize, - rect->x2 - rect->x1 - 2 * borderWidth, - 1.1 * fontSize); - } - - // setup - appearBuf->append("BT\n"); - - // compute text width and start position - j = 0; - layoutText(fieldChoice->getChoice(i), convertedText, &j, font, &w, 0.0, NULL, gFalse); - w *= fontSize; - switch (quadding) { - case quaddingLeftJustified: - default: - x = borderWidth + 2; - break; - case quaddingCentered: - x = (rect->x2 - rect->x1 - w) / 2; - break; - case quaddingRightJustified: - x = rect->x2 - rect->x1 - borderWidth - 2 - w; - break; - } - - // set the font matrix - if (tmPos >= 0) { - tok = (GooString *)daToks->get(tmPos + 4); - tok->clear(); - tok->appendf("{0:.2f}", x); - tok = (GooString *)daToks->get(tmPos + 5); - tok->clear(); - tok->appendf("{0:.2f}", y); - } - - // write the DA string - if (daToks) { - for (j = 0; j < daToks->getLength(); ++j) { - appearBuf->append((GooString *)daToks->get(j))->append(' '); - } - } - - // write the font matrix (if not part of the DA string) - if (tmPos < 0) { - appearBuf->appendf("1 0 0 1 {0:.2f} {1:.2f} Tm\n", x, y); - } - - // change the text color if selected - if (fieldChoice->isSelected(i)) { - appearBuf->append("1 g\n"); - } - - // write the text string - writeString(convertedText, appearBuf); - appearBuf->append(" Tj\n"); - - // cleanup - appearBuf->append("ET\n"); - appearBuf->append("Q\n"); - - // next line - y -= 1.1 * fontSize; - } - - if (daToks) { - deleteGooList(daToks, GooString); - } - - delete convertedText; -} - -void AnnotWidget::drawBorder() { - int dashLength; - double *dash; - AnnotColor adjustedColor; - double w = border->getWidth(); - - AnnotColor *aColor = appearCharacs->getBorderColor(); - if (!aColor) - aColor = appearCharacs->getBackColor(); - if (!aColor) - return; - - double dx = rect->x2 - rect->x1; - double dy = rect->y2 - rect->y1; - - // radio buttons with no caption have a round border - GBool hasCaption = appearCharacs->getNormalCaption() != NULL; - if (field->getType() == formButton && - static_cast<FormFieldButton*>(field)->getButtonType() == formButtonRadio && !hasCaption) { - double r = 0.5 * (dx < dy ? dx : dy); - switch (border->getStyle()) { - case AnnotBorder::borderDashed: - appearBuf->append("["); - dashLength = border->getDashLength(); - dash = border->getDash(); - for (int i = 0; i < dashLength; ++i) { - appearBuf->appendf(" {0:.2f}", dash[i]); - } - appearBuf->append("] 0 d\n"); - // fall through to the solid case - case AnnotBorder::borderSolid: - case AnnotBorder::borderUnderlined: - appearBuf->appendf("{0:.2f} w\n", w); - setColor(aColor, gFalse); - drawCircle(0.5 * dx, 0.5 * dy, r - 0.5 * w, gFalse); - break; - case AnnotBorder::borderBeveled: - case AnnotBorder::borderInset: - appearBuf->appendf("{0:.2f} w\n", 0.5 * w); - setColor(aColor, gFalse); - drawCircle(0.5 * dx, 0.5 * dy, r - 0.25 * w, gFalse); - adjustedColor = AnnotColor(*aColor); - adjustedColor.adjustColor(border->getStyle() == AnnotBorder::borderBeveled ? 1 : -1); - setColor(&adjustedColor, gFalse); - drawCircleTopLeft(0.5 * dx, 0.5 * dy, r - 0.75 * w); - adjustedColor = AnnotColor(*aColor); - adjustedColor.adjustColor(border->getStyle() == AnnotBorder::borderBeveled ? -1 : 1); - setColor(&adjustedColor, gFalse); - drawCircleBottomRight(0.5 * dx, 0.5 * dy, r - 0.75 * w); - break; - } - } else { - switch (border->getStyle()) { - case AnnotBorder::borderDashed: - appearBuf->append("["); - dashLength = border->getDashLength(); - dash = border->getDash(); - for (int i = 0; i < dashLength; ++i) { - appearBuf->appendf(" {0:.2f}", dash[i]); - } - appearBuf->append("] 0 d\n"); - // fall through to the solid case - case AnnotBorder::borderSolid: - appearBuf->appendf("{0:.2f} w\n", w); - setColor(aColor, gFalse); - appearBuf->appendf("{0:.2f} {0:.2f} {1:.2f} {2:.2f} re s\n", - 0.5 * w, dx - w, dy - w); - break; - case AnnotBorder::borderBeveled: - case AnnotBorder::borderInset: - adjustedColor = AnnotColor(*aColor); - adjustedColor.adjustColor(border->getStyle() == AnnotBorder::borderBeveled ? 1 : -1); - setColor(&adjustedColor, gTrue); - appearBuf->append("0 0 m\n"); - appearBuf->appendf("0 {0:.2f} l\n", dy); - appearBuf->appendf("{0:.2f} {1:.2f} l\n", dx, dy); - appearBuf->appendf("{0:.2f} {1:.2f} l\n", dx - w, dy - w); - appearBuf->appendf("{0:.2f} {1:.2f} l\n", w, dy - w); - appearBuf->appendf("{0:.2f} {0:.2f} l\n", w); - appearBuf->append("f\n"); - adjustedColor = AnnotColor(*aColor); - adjustedColor.adjustColor(border->getStyle() == AnnotBorder::borderBeveled ? -1 : 1); - setColor(&adjustedColor, gTrue); - appearBuf->append("0 0 m\n"); - appearBuf->appendf("{0:.2f} 0 l\n", dx); - appearBuf->appendf("{0:.2f} {1:.2f} l\n", dx, dy); - appearBuf->appendf("{0:.2f} {1:.2f} l\n", dx - w, dy - w); - appearBuf->appendf("{0:.2f} {1:.2f} l\n", dx - w, w); - appearBuf->appendf("{0:.2f} {0:.2f} l\n", w); - appearBuf->append("f\n"); - break; - case AnnotBorder::borderUnderlined: - appearBuf->appendf("{0:.2f} w\n", w); - setColor(aColor, gFalse); - appearBuf->appendf("0 0 m {0:.2f} 0 l s\n", dx); - break; - } - - // clip to the inside of the border - appearBuf->appendf("{0:.2f} {0:.2f} {1:.2f} {2:.2f} re W n\n", - w, dx - 2 * w, dy - 2 * w); - } -} - -void AnnotWidget::drawFormFieldButton(GfxResources *resources, GooString *da) { - GooString *caption = NULL; - if (appearCharacs) - caption = appearCharacs->getNormalCaption(); - - switch (static_cast<FormFieldButton *>(field)->getButtonType()) { - case formButtonRadio: { - //~ Acrobat doesn't draw a caption if there is no AP dict (?) - if (appearState && appearState->cmp("Off") != 0) { - if (caption) { - drawText(caption, da, resources, gFalse, 0, fieldQuadCenter, - gFalse, gTrue); - } else if (appearCharacs) { - AnnotColor *aColor = appearCharacs->getBorderColor(); - if (aColor) { - double dx = rect->x2 - rect->x1; - double dy = rect->y2 - rect->y1; - setColor(aColor, gTrue); - drawCircle(0.5 * dx, 0.5 * dy, 0.2 * (dx < dy ? dx : dy), gTrue); - } - } - } - } - break; - case formButtonPush: - if (caption) - drawText(caption, da, resources, gFalse, 0, fieldQuadCenter, gFalse, gFalse); - break; - case formButtonCheck: - if (appearState && appearState->cmp("Off") != 0) { - if (!caption) { - GooString checkMark("3"); - drawText(&checkMark, da, resources, gFalse, 0, fieldQuadCenter, gFalse, gTrue); - } else { - drawText(caption, da, resources, gFalse, 0, fieldQuadCenter, gFalse, gTrue); - } - } - break; - } -} - -void AnnotWidget::drawFormFieldText(GfxResources *resources, GooString *da) { - VariableTextQuadding quadding; - GooString *contents; - FormFieldText *fieldText = static_cast<FormFieldText *>(field); - - contents = fieldText->getContent(); - if (contents) { - quadding = field->hasTextQuadding() ? field->getTextQuadding() : form->getTextQuadding(); - - int comb = 0; - if (fieldText->isComb()) - comb = fieldText->getMaxLen(); - - drawText(contents, da, resources, - fieldText->isMultiline(), comb, quadding, gTrue, gFalse, fieldText->isPassword()); - } -} - -void AnnotWidget::drawFormFieldChoice(GfxResources *resources, GooString *da) { - GooString *selected; - VariableTextQuadding quadding; - FormFieldChoice *fieldChoice = static_cast<FormFieldChoice *>(field); - - quadding = field->hasTextQuadding() ? field->getTextQuadding() : form->getTextQuadding(); - - if (fieldChoice->isCombo()) { - selected = fieldChoice->getSelectedChoice(); - if (selected) { - drawText(selected, da, resources, gFalse, 0, quadding, gTrue, gFalse); - //~ Acrobat draws a popup icon on the right side - } - // list box - } else { - drawListBox(fieldChoice, da, resources, quadding); - } -} - -void AnnotWidget::generateFieldAppearance() { - Object appearDict, obj1, obj2; - GfxResources *resources; - MemStream *appearStream; - GooString *da; - - appearBuf = new GooString (); - - // draw the background - if (appearCharacs) { - AnnotColor *aColor = appearCharacs->getBackColor(); - if (aColor) { - setColor(aColor, gTrue); - appearBuf->appendf("0 0 {0:.2f} {1:.2f} re f\n", - rect->x2 - rect->x1, rect->y2 - rect->y1); - } - } - - // draw the border - if (appearCharacs && border && border->getWidth() > 0) - drawBorder(); - - da = field->getDefaultAppearance(); - if (!da) - da = form->getDefaultAppearance(); - - resources = form->getDefaultResources(); - - // draw the field contents - switch (field->getType()) { - case formButton: - drawFormFieldButton(resources, da); - break; - case formText: - drawFormFieldText(resources, da); - break; - case formChoice: - drawFormFieldChoice(resources, da); - break; - case formSignature: - //~unimp - break; - case formUndef: - default: - error(-1, "Unknown field type"); - } - - // build the appearance stream dictionary - appearDict.initDict(xref); - appearDict.dictAdd(copyString("Length"), - obj1.initInt(appearBuf->getLength())); - appearDict.dictAdd(copyString("Subtype"), obj1.initName("Form")); - obj1.initArray(xref); - obj1.arrayAdd(obj2.initReal(0)); - obj1.arrayAdd(obj2.initReal(0)); - obj1.arrayAdd(obj2.initReal(rect->x2 - rect->x1)); - obj1.arrayAdd(obj2.initReal(rect->y2 - rect->y1)); - appearDict.dictAdd(copyString("BBox"), &obj1); - - // set the resource dictionary - Object *resDict = form->getDefaultResourcesObj(); - if (resDict->isDict()) { - appearDict.dictAdd(copyString("Resources"), resDict->copy(&obj1)); - } - - // build the appearance stream - appearStream = new MemStream(strdup(appearBuf->getCString()), 0, - appearBuf->getLength(), &appearDict); - appearance.free(); - appearance.initStream(appearStream); - delete appearBuf; - - appearStream->setNeedFree(gTrue); -} - - -void AnnotWidget::draw(Gfx *gfx, GBool printing) { - Object obj; - - if (!isVisible (printing)) - return; - - addDingbatsResource = gFalse; - - // Only construct the appearance stream when - // - annot doesn't have an AP or - // - it's a field containing text (text and choices) and - // - NeedAppearances is true or - // - widget has been modified or - if (field) { - if (appearance.isNull() || (form && form->getNeedAppearances()) || - ((field->getType() == formText || field->getType() == formChoice) && - field->isModified())) - generateFieldAppearance(); - } - - // draw the appearance stream - appearance.fetch(xref, &obj); - if (addDingbatsResource) { - // We are forcing ZaDb but the font does not exist - // so create a fake one - Object baseFontObj, subtypeObj; - baseFontObj.initName("ZapfDingbats"); - subtypeObj.initName("Type1"); - - Object fontDictObj; - Dict *fontDict = new Dict(xref); - fontDict->decRef(); - fontDict->add(copyString("BaseFont"), &baseFontObj); - fontDict->add(copyString("Subtype"), &subtypeObj); - fontDictObj.initDict(fontDict); - - Object fontsDictObj; - Dict *fontsDict = new Dict(xref); - fontsDict->decRef(); - fontsDict->add(copyString("ZaDb"), &fontDictObj); - fontsDictObj.initDict(fontsDict); - - Dict *dict = new Dict(xref); - dict->add(copyString("Font"), &fontsDictObj); - gfx->pushResources(dict); - delete dict; - } - gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color, - rect->x1, rect->y1, rect->x2, rect->y2); - if (addDingbatsResource) { - gfx->popResources(); - } - obj.free(); -} - - -//------------------------------------------------------------------------ -// AnnotMovie -//------------------------------------------------------------------------ -AnnotMovie::AnnotMovie(XRef *xrefA, PDFRectangle *rect, Movie *movieA, Catalog *catalog) : - Annot(xrefA, rect, catalog) { - Object obj1; - - type = typeMovie; - annotObj.dictSet ("Subtype", obj1.initName ("Movie")); - - movie = movieA->copy(); - // TODO: create movie dict from movieA - - initialize(xrefA, catalog, annotObj.getDict()); -} - -AnnotMovie::AnnotMovie(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - Annot(xrefA, dict, catalog, obj) { - type = typeMovie; - initialize(xrefA, catalog, dict); -} - -AnnotMovie::~AnnotMovie() { - if (title) - delete title; - delete movie; -} - -void AnnotMovie::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { - Object obj1; - - if (dict->lookup("T", &obj1)->isString()) { - title = obj1.getString()->copy(); - } else { - title = NULL; - } - obj1.free(); - - Object movieDict; - if (dict->lookup("Movie", &movieDict)->isDict()) { - Object obj2; - dict->lookup("A", &obj2); - if (obj2.isDict()) - movie = new Movie (&movieDict, &obj2); - else - movie = new Movie (&movieDict); - if (!movie->isOk()) { - delete movie; - movie = NULL; - ok = gFalse; - } - obj2.free(); - } else { - error(-1, "Bad Annot Movie"); - movie = NULL; - ok = gFalse; - } - movieDict.free(); -} - -void AnnotMovie::draw(Gfx *gfx, GBool printing) { - Object obj; - - if (!isVisible (printing)) - return; - - if (appearance.isNull() && movie->getShowPoster()) { - int width, height; - Object poster; - movie->getPoster(&poster); - movie->getAspect(&width, &height); - - if (width != -1 && height != -1 && !poster.isNone()) { - MemStream *mStream; - - appearBuf = new GooString (); - appearBuf->append ("q\n"); - appearBuf->appendf ("{0:d} 0 0 {1:d} 0 0 cm\n", width, height); - appearBuf->append ("/MImg Do\n"); - appearBuf->append ("Q\n"); - - Object imgDict; - imgDict.initDict(xref); - imgDict.dictSet ("MImg", &poster); - - Object resDict; - resDict.initDict(xref); - resDict.dictSet ("XObject", &imgDict); - - Object formDict, obj1, obj2; - formDict.initDict(xref); - formDict.dictSet("Length", obj1.initInt(appearBuf->getLength())); - formDict.dictSet("Subtype", obj1.initName("Form")); - formDict.dictSet("Name", obj1.initName("FRM")); - obj1.initArray(xref); - obj1.arrayAdd(obj2.initInt(0)); - obj1.arrayAdd(obj2.initInt(0)); - obj1.arrayAdd(obj2.initInt(width)); - obj1.arrayAdd(obj2.initInt(height)); - formDict.dictSet("BBox", &obj1); - obj1.initArray(xref); - obj1.arrayAdd(obj2.initInt(1)); - obj1.arrayAdd(obj2.initInt(0)); - obj1.arrayAdd(obj2.initInt(0)); - obj1.arrayAdd(obj2.initInt(1)); - obj1.arrayAdd(obj2.initInt(-width / 2)); - obj1.arrayAdd(obj2.initInt(-height / 2)); - formDict.dictSet("Matrix", &obj1); - formDict.dictSet("Resources", &resDict); - - Object aStream; - mStream = new MemStream(copyString(appearBuf->getCString()), 0, - appearBuf->getLength(), &formDict); - mStream->setNeedFree(gTrue); - aStream.initStream(mStream); - delete appearBuf; - - Object objDict; - objDict.initDict(xref); - objDict.dictSet ("FRM", &aStream); - - resDict.initDict(xref); - resDict.dictSet ("XObject", &objDict); - - appearBuf = new GooString (); - appearBuf->append ("q\n"); - appearBuf->appendf ("0 0 {0:d} {1:d} re W n\n", width, height); - appearBuf->append ("q\n"); - appearBuf->appendf ("0 0 {0:d} {1:d} re W n\n", width, height); - appearBuf->appendf ("1 0 0 1 {0:d} {1:d} cm\n", width / 2, height / 2); - appearBuf->append ("/FRM Do\n"); - appearBuf->append ("Q\n"); - appearBuf->append ("Q\n"); - - double bbox[4]; - bbox[0] = bbox[1] = 0; - bbox[2] = width; - bbox[3] = height; - createForm(bbox, gFalse, &resDict, &appearance); - delete appearBuf; - } - poster.free(); - } - - // draw the appearance stream - appearance.fetch(xref, &obj); - gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color, - rect->x1, rect->y1, rect->x2, rect->y2); - obj.free(); -} - -//------------------------------------------------------------------------ -// AnnotScreen -//------------------------------------------------------------------------ -AnnotScreen::AnnotScreen(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : - Annot(xrefA, rect, catalog) { - Object obj1; - - type = typeScreen; - - annotObj.dictSet ("Subtype", obj1.initName ("Screen")); - initialize(xrefA, catalog, annotObj.getDict()); -} - -AnnotScreen::AnnotScreen(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - Annot(xrefA, dict, catalog, obj) { - type = typeScreen; - initialize(xrefA, catalog, dict); -} - -AnnotScreen::~AnnotScreen() { - if (title) - delete title; - if (appearCharacs) - delete appearCharacs; - if (action) - delete action; - - additionAction.free(); -} - -void AnnotScreen::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { - Object obj1; - - title = NULL; - if (dict->lookup("T", &obj1)->isString()) { - title = obj1.getString()->copy(); - } - obj1.free(); - - action = NULL; - if (dict->lookup("A", &obj1)->isDict()) { - action = LinkAction::parseAction(&obj1, catalog->getBaseURI()); - if (action->getKind() == actionRendition && page == 0) { - error (-1, "Invalid Rendition action: associated screen annotation without P"); - delete action; - action = NULL; - ok = gFalse; - } - } - obj1.free(); - - dict->lookup("AA", &additionAction); - - appearCharacs = NULL; - if(dict->lookup("MK", &obj1)->isDict()) { - appearCharacs = new AnnotAppearanceCharacs(obj1.getDict()); - } - obj1.free(); - -} - -//------------------------------------------------------------------------ -// AnnotStamp -//------------------------------------------------------------------------ -AnnotStamp::AnnotStamp(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : - AnnotMarkup(xrefA, rect, catalog) { - Object obj1; - - type = typeStamp; - annotObj.dictSet ("Subtype", obj1.initName ("Stamp")); - initialize(xrefA, catalog, annotObj.getDict()); -} - -AnnotStamp::AnnotStamp(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - AnnotMarkup(xrefA, dict, catalog, obj) { - type = typeStamp; - initialize(xrefA, catalog, dict); -} - -AnnotStamp::~AnnotStamp() { - delete icon; -} - -void AnnotStamp::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { - Object obj1; - - if (dict->lookup("Name", &obj1)->isName()) { - icon = new GooString(obj1.getName()); - } else { - icon = new GooString("Draft"); - } - obj1.free(); - -} - -//------------------------------------------------------------------------ -// AnnotGeometry -//------------------------------------------------------------------------ -AnnotGeometry::AnnotGeometry(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType, Catalog *catalog) : - AnnotMarkup(xrefA, rect, catalog) { - Object obj1; - - switch (subType) { - case typeSquare: - annotObj.dictSet ("Subtype", obj1.initName ("Square")); - break; - case typeCircle: - annotObj.dictSet ("Subtype", obj1.initName ("Circle")); - break; - default: - assert (0 && "Invalid subtype for AnnotGeometry\n"); - } - - initialize(xrefA, catalog, annotObj.getDict()); -} - -AnnotGeometry::AnnotGeometry(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - AnnotMarkup(xrefA, dict, catalog, obj) { - // the real type will be read in initialize() - type = typeSquare; - initialize(xrefA, catalog, dict); -} - -AnnotGeometry::~AnnotGeometry() { - delete interiorColor; - delete borderEffect; - delete geometryRect; -} - -void AnnotGeometry::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { - Object obj1; - - if (dict->lookup("Subtype", &obj1)->isName()) { - GooString typeName(obj1.getName()); - if (!typeName.cmp("Square")) { - type = typeSquare; - } else if (!typeName.cmp("Circle")) { - type = typeCircle; - } - } - obj1.free(); - - if (dict->lookup("IC", &obj1)->isArray()) { - interiorColor = new AnnotColor(obj1.getArray()); - } else { - interiorColor = NULL; - } - obj1.free(); - - if (dict->lookup("BE", &obj1)->isDict()) { - borderEffect = new AnnotBorderEffect(obj1.getDict()); - } else { - borderEffect = NULL; - } - obj1.free(); - - geometryRect = NULL; - if (dict->lookup("RD", &obj1)->isArray()) { - geometryRect = parseDiffRectangle(obj1.getArray(), rect); - } - obj1.free(); - -} - -void AnnotGeometry::draw(Gfx *gfx, GBool printing) { - Object obj; - double ca = 1; - - if (!isVisible (printing)) - return; - - if (appearance.isNull()) { - ca = opacity; - - appearBuf = new GooString (); - appearBuf->append ("q\n"); - if (color) - setColor(color, gFalse); - - if (border) { - int i, dashLength; - double *dash; - double borderWidth = border->getWidth(); - - switch (border->getStyle()) { - case AnnotBorder::borderDashed: - appearBuf->append("["); - dashLength = border->getDashLength(); - dash = border->getDash(); - for (i = 0; i < dashLength; ++i) - appearBuf->appendf(" {0:.2f}", dash[i]); - appearBuf->append(" ] 0 d\n"); - break; - default: - appearBuf->append("[] 0 d\n"); - break; - } - appearBuf->appendf("{0:.2f} w\n", borderWidth); - - if (interiorColor) - setColor(interiorColor, gTrue); - - if (type == typeSquare) { - appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} re\n", - borderWidth / 2.0, borderWidth / 2.0, - (rect->x2 - rect->x1) - borderWidth, - (rect->y2 - rect->y1) - borderWidth); - } else { - double width, height; - double b; - double x1, y1, x2, y2, x3, y3; - - width = rect->x2 - rect->x1; - height = rect->y2 - rect->y1; - b = borderWidth / 2.0; - - x1 = b; - y1 = height / 2.0; - appearBuf->appendf ("{0:.2f} {1:.2f} m\n", x1, y1); - - y1 += height / 4.0; - x2 = width / 4.0; - y2 = height - b; - x3 = width / 2.0; - y3 = y2; - appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", - x1, y1, x2, y2, x3, y3); - x2 = width - b; - y2 = y1; - x1 = x3 + (width / 4.0); - y1 = y3; - x3 = x2; - y3 = height / 2.0; - appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", - x1, y1, x2, y2, x3, y3); - - x2 = x1; - y2 = b; - x1 = x3; - y1 = height / 4.0; - x3 = width / 2.0; - y3 = b; - appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", - x1, y1, x2, y2, x3, y3); - - x2 = b; - y2 = y1; - x1 = width / 4.0; - y1 = b; - x3 = b; - y3 = height / 2.0; - appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", - x1, y1, x2, y2, x3, y3); - - } - - if (interiorColor) - appearBuf->append ("b\n"); - else - appearBuf->append ("S\n"); - } - appearBuf->append ("Q\n"); - - double bbox[4]; - bbox[0] = bbox[1] = 0; - bbox[2] = rect->x2 - rect->x1; - bbox[3] = rect->y2 - rect->y1; - if (ca == 1) { - createForm(bbox, gFalse, NULL, &appearance); - } else { - Object aStream; - - createForm(bbox, gTrue, NULL, &aStream); - delete appearBuf; - - Object resDict; - appearBuf = new GooString ("/GS0 gs\n/Fm0 Do"); - createResourcesDict("Fm0", &aStream, "GS0", ca, NULL, &resDict); - createForm(bbox, gFalse, &resDict, &appearance); - } - delete appearBuf; - } - - // draw the appearance stream - appearance.fetch(xref, &obj); - gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color, - rect->x1, rect->y1, rect->x2, rect->y2); - obj.free(); -} - -//------------------------------------------------------------------------ -// AnnotPolygon -//------------------------------------------------------------------------ -AnnotPolygon::AnnotPolygon(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType, - AnnotPath *path, Catalog *catalog) : - AnnotMarkup(xrefA, rect, catalog) { - Object obj1; - - switch (subType) { - case typePolygon: - annotObj.dictSet ("Subtype", obj1.initName ("Polygon")); - break; - case typePolyLine: - annotObj.dictSet ("Subtype", obj1.initName ("PolyLine")); - break; - default: - assert (0 && "Invalid subtype for AnnotGeometry\n"); - } - - Object obj2; - obj2.initArray (xrefA); - - for (int i = 0; i < path->getCoordsLength(); ++i) { - Object obj3; - - obj2.arrayAdd (obj3.initReal (path->getX(i))); - obj2.arrayAdd (obj3.initReal (path->getY(i))); - } - - annotObj.dictSet ("Vertices", &obj2); - - initialize(xrefA, catalog, annotObj.getDict()); -} - -AnnotPolygon::AnnotPolygon(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - AnnotMarkup(xrefA, dict, catalog, obj) { - // the real type will be read in initialize() - type = typePolygon; - initialize(xrefA, catalog, dict); -} - -AnnotPolygon::~AnnotPolygon() { - delete vertices; - - if (interiorColor) - delete interiorColor; - - if (borderEffect) - delete borderEffect; -} - -void AnnotPolygon::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { - Object obj1; - - if (dict->lookup("Subtype", &obj1)->isName()) { - GooString typeName(obj1.getName()); - if (!typeName.cmp("Polygon")) { - type = typePolygon; - } else if (!typeName.cmp("PolyLine")) { - type = typePolyLine; - } - } - obj1.free(); - - if (dict->lookup("Vertices", &obj1)->isArray()) { - vertices = new AnnotPath(obj1.getArray()); - } else { - vertices = new AnnotPath(); - error(-1, "Bad Annot Polygon Vertices"); - ok = gFalse; - } - obj1.free(); - - if (dict->lookup("LE", &obj1)->isArray() && obj1.arrayGetLength() == 2) { - Object obj2; - - if(obj1.arrayGet(0, &obj2)->isString()) - startStyle = parseAnnotLineEndingStyle(obj2.getString()); - else - startStyle = annotLineEndingNone; - obj2.free(); - - if(obj1.arrayGet(1, &obj2)->isString()) - endStyle = parseAnnotLineEndingStyle(obj2.getString()); - else - endStyle = annotLineEndingNone; - obj2.free(); - - } else { - startStyle = endStyle = annotLineEndingNone; - } - obj1.free(); - - if (dict->lookup("IC", &obj1)->isArray()) { - interiorColor = new AnnotColor(obj1.getArray()); - } else { - interiorColor = NULL; - } - obj1.free(); - - if (dict->lookup("BE", &obj1)->isDict()) { - borderEffect = new AnnotBorderEffect(obj1.getDict()); - } else { - borderEffect = NULL; - } - obj1.free(); - - if (dict->lookup("IT", &obj1)->isName()) { - const char *intentName = obj1.getName(); - - if(!strcmp(intentName, "PolygonCloud")) { - intent = polygonCloud; - } else if(!strcmp(intentName, "PolyLineDimension")) { - intent = polylineDimension; - } else { - intent = polygonDimension; - } - } else { - intent = polygonCloud; - } - obj1.free(); -} - -//------------------------------------------------------------------------ -// AnnotCaret -//------------------------------------------------------------------------ -AnnotCaret::AnnotCaret(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : - AnnotMarkup(xrefA, rect, catalog) { - Object obj1; - - type = typeCaret; - - annotObj.dictSet ("Subtype", obj1.initName ("Caret")); - initialize(xrefA, catalog, annotObj.getDict()); -} - -AnnotCaret::AnnotCaret(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - AnnotMarkup(xrefA, dict, catalog, obj) { - type = typeCaret; - initialize(xrefA, catalog, dict); -} - -AnnotCaret::~AnnotCaret() { - delete caretRect; -} - -void AnnotCaret::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { - Object obj1; - - symbol = symbolNone; - if (dict->lookup("Sy", &obj1)->isName()) { - GooString typeName(obj1.getName()); - if (!typeName.cmp("P")) { - symbol = symbolP; - } else if (!typeName.cmp("None")) { - symbol = symbolNone; - } - } - obj1.free(); - - if (dict->lookup("RD", &obj1)->isArray()) { - caretRect = parseDiffRectangle(obj1.getArray(), rect); - } else { - caretRect = NULL; - } - obj1.free(); - -} - -//------------------------------------------------------------------------ -// AnnotInk -//------------------------------------------------------------------------ -AnnotInk::AnnotInk(XRef *xrefA, PDFRectangle *rect, AnnotPath **paths, int n_paths, Catalog *catalog) : - AnnotMarkup(xrefA, rect, catalog) { - Object obj1; - - type = typeInk; - - annotObj.dictSet ("Subtype", obj1.initName ("Ink")); - - Object obj2; - obj2.initArray (xrefA); - - for (int i = 0; i < n_paths; ++i) { - AnnotPath *path = paths[i]; - Object obj3; - obj3.initArray (xrefA); - - for (int j = 0; j < path->getCoordsLength(); ++j) { - Object obj4; - - obj3.arrayAdd (obj4.initReal (path->getX(j))); - obj3.arrayAdd (obj4.initReal (path->getY(j))); - } - - obj2.arrayAdd (&obj3); - } - - annotObj.dictSet ("InkList", &obj2); - - initialize(xrefA, catalog, annotObj.getDict()); -} - -AnnotInk::AnnotInk(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - AnnotMarkup(xrefA, dict, catalog, obj) { - type = typeInk; - initialize(xrefA, catalog, dict); -} - -AnnotInk::~AnnotInk() { - if (inkList) { - for (int i = 0; i < inkListLength; ++i) - delete inkList[i]; - gfree(inkList); - } -} - -void AnnotInk::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { - Object obj1; - - if (dict->lookup("InkList", &obj1)->isArray()) { - Array *array = obj1.getArray(); - inkListLength = array->getLength(); - inkList = (AnnotPath **) gmallocn ((inkListLength), sizeof(AnnotPath *)); - memset(inkList, 0, inkListLength * sizeof(AnnotPath *)); - for (int i = 0; i < inkListLength; i++) { - Object obj2; - if (array->get(i, &obj2)->isArray()) - inkList[i] = new AnnotPath(obj2.getArray()); - obj2.free(); - } - } else { - inkListLength = 0; - inkList = NULL; - error(-1, "Bad Annot Ink List"); - ok = gFalse; - } - obj1.free(); -} - -//------------------------------------------------------------------------ -// AnnotFileAttachment -//------------------------------------------------------------------------ -AnnotFileAttachment::AnnotFileAttachment(XRef *xrefA, PDFRectangle *rect, GooString *filename, Catalog *catalog) : - AnnotMarkup(xrefA, rect, catalog) { - Object obj1; - - type = typeFileAttachment; - - annotObj.dictSet ("Subtype", obj1.initName ("FileAttachment")); - - Object obj2; - obj2.initString(filename->copy()); - annotObj.dictSet ("FS", &obj2); - - initialize(xrefA, catalog, annotObj.getDict()); -} - -AnnotFileAttachment::AnnotFileAttachment(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - AnnotMarkup(xrefA, dict, catalog, obj) { - type = typeFileAttachment; - initialize(xrefA, catalog, dict); -} - -AnnotFileAttachment::~AnnotFileAttachment() { - file.free(); - - if (name) - delete name; -} - -void AnnotFileAttachment::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { - Object obj1; - - if (dict->lookup("FS", &obj1)->isDict() || dict->lookup("FS", &obj1)->isString()) { - obj1.copy(&file); - } else { - error(-1, "Bad Annot File Attachment"); - ok = gFalse; - } - obj1.free(); - - if (dict->lookup("Name", &obj1)->isName()) { - name = new GooString(obj1.getName()); - } else { - name = new GooString("PushPin"); - } - obj1.free(); -} - -#define ANNOT_FILE_ATTACHMENT_AP_PUSHPIN \ - "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ - "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ - "l 1 21.523 2.477 23 4.301 23 c h\n" \ - "4.301 23 m f\n" \ - "0.533333 0.541176 0.521569 RG 2 w\n" \ - "1 J\n" \ - "1 j\n" \ - "[] 0.0 d\n" \ - "4 M 5 4 m 6 5 l S\n" \ - "2 w\n" \ - "11 14 m 9 12 l 6 12 l 13 5 l 13 8 l 15 10 l 18 11 l 20 11 l 12 19 l 12\n" \ - "17 l 11 14 l h\n" \ - "11 14 m S\n" \ - "3 w\n" \ - "6 5 m 9 8 l S\n" \ - "0.729412 0.741176 0.713725 RG 2 w\n" \ - "5 5 m 6 6 l S\n" \ - "2 w\n" \ - "11 15 m 9 13 l 6 13 l 13 6 l 13 9 l 15 11 l 18 12 l 20 12 l 12 20 l 12\n" \ - "18 l 11 15 l h\n" \ - "11 15 m S\n" \ - "3 w\n" \ - "6 6 m 9 9 l S\n" - -#define ANNOT_FILE_ATTACHMENT_AP_PAPERCLIP \ - "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ - "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ - "l 1 21.523 2.477 23 4.301 23 c h\n" \ - "4.301 23 m f\n" \ - "0.533333 0.541176 0.521569 RG 2 w\n" \ - "1 J\n" \ - "1 j\n" \ - "[] 0.0 d\n" \ - "4 M 16.645 12.035 m 12.418 7.707 l 10.902 6.559 6.402 11.203 8.09 12.562 c\n" \ - "14.133 18.578 l 14.949 19.387 16.867 19.184 17.539 18.465 c 20.551\n" \ - "15.23 l 21.191 14.66 21.336 12.887 20.426 12.102 c 13.18 4.824 l 12.18\n" \ - "3.82 6.25 2.566 4.324 4.461 c 3 6.395 3.383 11.438 4.711 12.801 c 9.648\n" \ - "17.887 l S\n" \ - "0.729412 0.741176 0.713725 RG 16.645 13.035 m 12.418 8.707 l\n" \ - "10.902 7.559 6.402 12.203 8.09 13.562 c\n" \ - "14.133 19.578 l 14.949 20.387 16.867 20.184 17.539 19.465 c 20.551\n" \ - "16.23 l 21.191 15.66 21.336 13.887 20.426 13.102 c 13.18 5.824 l 12.18\n" \ - "4.82 6.25 3.566 4.324 5.461 c 3 7.395 3.383 12.438 4.711 13.801 c 9.648\n" \ - "18.887 l S\n" - -#define ANNOT_FILE_ATTACHMENT_AP_GRAPH \ - "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ - "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ - "l 1 21.523 2.477 23 4.301 23 c h\n" \ - "4.301 23 m f\n" \ - "0.533333 0.541176 0.521569 RG 1 w\n" \ - "1 J\n" \ - "0 j\n" \ - "[] 0.0 d\n" \ - "4 M 18.5 15.5 m 18.5 13.086 l 16.086 15.5 l 18.5 15.5 l h\n" \ - "18.5 15.5 m S\n" \ - "7 7 m 10 11 l 13 9 l 18 15 l S\n" \ - "0.729412 0.741176 0.713725 RG 7 8 m 10 12 l 13 10 l 18 16 l S\n" \ - "18.5 16.5 m 18.5 14.086 l 16.086 16.5 l 18.5 16.5 l h\n" \ - "18.5 16.5 m S\n" \ - "0.533333 0.541176 0.521569 RG 2 w\n" \ - "1 j\n" \ - "3 19 m 3 3 l 21 3 l S\n" \ - "0.729412 0.741176 0.713725 RG 3 20 m 3 4 l 21 4 l S\n" - -#define ANNOT_FILE_ATTACHMENT_AP_TAG \ - "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ - "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ - "l 1 21.523 2.477 23 4.301 23 c h\n" \ - "4.301 23 m f\n" \ - "0.533333 0.541176 0.521569 RG 0.999781 w\n" \ - "1 J\n" \ - "1 j\n" \ - "[] 0.0 d\n" \ - "4 M q 1 0 0 -1 0 24 cm\n" \ - "8.492 8.707 m 8.492 9.535 7.82 10.207 6.992 10.207 c 6.164 10.207 5.492\n" \ - "9.535 5.492 8.707 c 5.492 7.879 6.164 7.207 6.992 7.207 c 7.82 7.207\n" \ - "8.492 7.879 8.492 8.707 c h\n" \ - "8.492 8.707 m S Q\n" \ - "2 w\n" \ - "20.078 11.414 m 20.891 10.602 20.785 9.293 20.078 8.586 c 14.422 2.93 l\n" \ - "13.715 2.223 12.301 2.223 11.594 2.93 c 3.816 10.707 l 3.109 11.414\n" \ - "2.402 17.781 3.816 19.195 c 5.23 20.609 11.594 19.902 12.301 19.195 c\n" \ - "20.078 11.414 l h\n" \ - "20.078 11.414 m S\n" \ - "0.729412 0.741176 0.713725 RG 20.078 12.414 m\n" \ - "20.891 11.605 20.785 10.293 20.078 9.586 c 14.422 3.93 l\n" \ - "13.715 3.223 12.301 3.223 11.594 3.93 c 3.816 11.707 l 3.109 12.414\n" \ - "2.402 18.781 3.816 20.195 c 5.23 21.609 11.594 20.902 12.301 20.195 c\n" \ - "20.078 12.414 l h\n" \ - "20.078 12.414 m S\n" \ - "0.533333 0.541176 0.521569 RG 1 w\n" \ - "0 j\n" \ - "11.949 13.184 m 16.191 8.941 l S\n" \ - "0.729412 0.741176 0.713725 RG 11.949 14.184 m 16.191 9.941 l S\n" \ - "0.533333 0.541176 0.521569 RG 14.07 6.82 m 9.828 11.062 l S\n" \ - "0.729412 0.741176 0.713725 RG 14.07 7.82 m 9.828 12.062 l S\n" \ - "0.533333 0.541176 0.521569 RG 6.93 15.141 m 8 20 14.27 20.5 16 20.5 c\n" \ - "18.094 20.504 19.5 20 19.5 18 c 19.5 16.699 20.91 16.418 22.5 16.5 c S\n" \ - "0.729412 0.741176 0.713725 RG 0.999781 w\n" \ - "1 j\n" \ - "q 1 0 0 -1 0 24 cm\n" \ - "8.492 7.707 m 8.492 8.535 7.82 9.207 6.992 9.207 c 6.164 9.207 5.492\n" \ - "8.535 5.492 7.707 c 5.492 6.879 6.164 6.207 6.992 6.207 c 7.82 6.207\n" \ - "8.492 6.879 8.492 7.707 c h\n" \ - "8.492 7.707 m S Q\n" \ - "1 w\n" \ - "0 j\n" \ - "6.93 16.141 m 8 21 14.27 21.5 16 21.5 c 18.094 21.504 19.5 21 19.5 19 c\n" \ - "19.5 17.699 20.91 17.418 22.5 17.5 c S\n" - -void AnnotFileAttachment::draw(Gfx *gfx, GBool printing) { - Object obj; - double ca = 1; - - if (!isVisible (printing)) - return; - - if (appearance.isNull()) { - ca = opacity; - - appearBuf = new GooString (); - - appearBuf->append ("q\n"); - if (color) - setColor(color, gTrue); - else - appearBuf->append ("1 1 1 rg\n"); - if (!name->cmp("PushPin")) - appearBuf->append (ANNOT_FILE_ATTACHMENT_AP_PUSHPIN); - else if (!name->cmp("Paperclip")) - appearBuf->append (ANNOT_FILE_ATTACHMENT_AP_PAPERCLIP); - else if (!name->cmp("Graph")) - appearBuf->append (ANNOT_FILE_ATTACHMENT_AP_GRAPH); - else if (!name->cmp("Tag")) - appearBuf->append (ANNOT_FILE_ATTACHMENT_AP_TAG); - appearBuf->append ("Q\n"); - - double bbox[4]; - bbox[0] = bbox[1] = 0; - bbox[2] = bbox[3] = 24; - if (ca == 1) { - createForm (bbox, gFalse, NULL, &appearance); - } else { - Object aStream; - - createForm (bbox, gTrue, NULL, &aStream); - delete appearBuf; - - Object resDict; - appearBuf = new GooString ("/GS0 gs\n/Fm0 Do"); - createResourcesDict("Fm0", &aStream, "GS0", ca, NULL, &resDict); - createForm(bbox, gFalse, &resDict, &appearance); - } - delete appearBuf; - } - - // draw the appearance stream - appearance.fetch(xref, &obj); - gfx->drawAnnot(&obj, border, color, - rect->x1, rect->y1, rect->x2, rect->y2); - obj.free(); -} - -//------------------------------------------------------------------------ -// AnnotSound -//------------------------------------------------------------------------ -AnnotSound::AnnotSound(XRef *xrefA, PDFRectangle *rect, Sound *soundA, Catalog *catalog) : - AnnotMarkup(xrefA, rect, catalog) { - Object obj1; - - type = typeSound; - - annotObj.dictSet ("Subtype", obj1.initName ("Sound")); - - Object obj2; - Stream *str = soundA->getStream(); - obj2.initStream (str); - str->incRef(); //FIXME: initStream should do this? - annotObj.dictSet ("Sound", &obj2); - - initialize(xrefA, catalog, annotObj.getDict()); -} - -AnnotSound::AnnotSound(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - AnnotMarkup(xrefA, dict, catalog, obj) { - type = typeSound; - initialize(xrefA, catalog, dict); -} - -AnnotSound::~AnnotSound() { - delete sound; - - delete name; -} - -void AnnotSound::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { - Object obj1; - - sound = Sound::parseSound(dict->lookup("Sound", &obj1)); - if (!sound) { - error(-1, "Bad Annot Sound"); - ok = gFalse; - } - obj1.free(); - - if (dict->lookup("Name", &obj1)->isName()) { - name = new GooString(obj1.getName()); - } else { - name = new GooString("Speaker"); - } - obj1.free(); -} - -#define ANNOT_SOUND_AP_SPEAKER \ - "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ - "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ - "l 1 21.523 2.477 23 4.301 23 c h\n" \ - "4.301 23 m f\n" \ - "0.533333 0.541176 0.521569 RG 2 w\n" \ - "0 J\n" \ - "1 j\n" \ - "[] 0.0 d\n" \ - "4 M 4 14 m 4.086 8.043 l 7 8 l 11 4 l 11 18 l 7 14 l 4 14 l h\n" \ - "4 14 m S\n" \ - "1 w\n" \ - "1 J\n" \ - "0 j\n" \ - "13.699 15.398 m 14.699 13.398 14.699 9.398 13.699 7.398 c S\n" \ - "18.199 19.398 m 21.199 17.398 21.199 5.398 18.199 3.398 c S\n" \ - "16 17.398 m 18 16.398 18 7.398 16 5.398 c S\n" \ - "0.729412 0.741176 0.713725 RG 2 w\n" \ - "0 J\n" \ - "1 j\n" \ - "4 15 m 4.086 9.043 l 7 9 l 11 5 l 11 19 l 7 15 l 4 15 l h\n" \ - "4 15 m S\n" \ - "1 w\n" \ - "1 J\n" \ - "0 j\n" \ - "13.699 16 m 14.699 14 14.699 10 13.699 8 c S\n" \ - "18.199 20 m 21.199 18 21.199 6 18.199 4 c S\n" \ - "16 18 m 18 17 18 8 16 6 c S\n" - -#define ANNOT_SOUND_AP_MIC \ - "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ - "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ - "l 1 21.523 2.477 23 4.301 23 c h\n" \ - "4.301 23 m f\n" \ - "0.533333 0.541176 0.521569 RG 2 w\n" \ - "1 J\n" \ - "0 j\n" \ - "[] 0.0 d\n" \ - "4 M 12 20 m 12 20 l 13.656 20 15 18.656 15 17 c 15 13 l 15 11.344 13.656 10\n" \ - "12 10 c 12 10 l 10.344 10 9 11.344 9 13 c 9 17 l 9 18.656 10.344 20 12\n" \ - "20 c h\n" \ - "12 20 m S\n" \ - "1 w\n" \ - "17.5 14.5 m 17.5 11.973 l 17.5 8.941 15.047 6.5 12 6.5 c 8.953 6.5 6.5\n" \ - "8.941 6.5 11.973 c 6.5 14.5 l S\n" \ - "2 w\n" \ - "0 J\n" \ - "12 6.52 m 12 3 l S\n" \ - "1 J\n" \ - "8 3 m 16 3 l S\n" \ - "0.729412 0.741176 0.713725 RG 12 21 m 12 21 l 13.656 21 15 19.656 15 18 c\n" \ - "15 14 l 15 12.344 13.656 11 12 11 c 12 11 l 10.344 11 9 12.344 9 14 c\n" \ - "9 18 l 9 19.656 10.344 21 12 21 c h\n" \ - "12 21 m S\n" \ - "1 w\n" \ - "17.5 15.5 m 17.5 12.973 l 17.5 9.941 15.047 7.5 12 7.5 c 8.953 7.5 6.5\n" \ - "9.941 6.5 12.973 c 6.5 15.5 l S\n" \ - "2 w\n" \ - "0 J\n" \ - "12 7.52 m 12 4 l S\n" \ - "1 J\n" \ - "8 4 m 16 4 l S\n" - -void AnnotSound::draw(Gfx *gfx, GBool printing) { - Object obj; - double ca = 1; - - if (!isVisible (printing)) - return; - - if (appearance.isNull()) { - ca = opacity; - - appearBuf = new GooString (); - - appearBuf->append ("q\n"); - if (color) - setColor(color, gTrue); - else - appearBuf->append ("1 1 1 rg\n"); - if (!name->cmp("Speaker")) - appearBuf->append (ANNOT_SOUND_AP_SPEAKER); - else if (!name->cmp("Mic")) - appearBuf->append (ANNOT_SOUND_AP_MIC); - appearBuf->append ("Q\n"); - - double bbox[4]; - bbox[0] = bbox[1] = 0; - bbox[2] = bbox[3] = 24; - if (ca == 1) { - createForm(bbox, gFalse, NULL, &appearance); - } else { - Object aStream, resDict; - - createForm(bbox, gTrue, NULL, &aStream); - delete appearBuf; - - appearBuf = new GooString ("/GS0 gs\n/Fm0 Do"); - createResourcesDict("Fm0", &aStream, "GS0", ca, NULL, &resDict); - createForm(bbox, gFalse, &resDict, &appearance); - } - delete appearBuf; - } - - // draw the appearance stream - appearance.fetch(xref, &obj); - gfx->drawAnnot(&obj, border, color, - rect->x1, rect->y1, rect->x2, rect->y2); - obj.free(); -} - -//------------------------------------------------------------------------ -// Annot3D -//------------------------------------------------------------------------ -Annot3D::Annot3D(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : - Annot(xrefA, rect, catalog) { - Object obj1; - - type = type3D; - - annotObj.dictSet ("Subtype", obj1.initName ("3D")); - - initialize(xrefA, catalog, annotObj.getDict()); -} - -Annot3D::Annot3D(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : - Annot(xrefA, dict, catalog, obj) { - type = type3D; - initialize(xrefA, catalog, dict); -} - -Annot3D::~Annot3D() { - if (activation) - delete activation; -} - -void Annot3D::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { - Object obj1; - - if (dict->lookup("3DA", &obj1)->isDict()) { - activation = new Activation(obj1.getDict()); - } else { - activation = NULL; - } - obj1.free(); -} - -Annot3D::Activation::Activation(Dict *dict) { - Object obj1; - - if (dict->lookup("A", &obj1)->isName()) { - const char *name = obj1.getName(); - - if(!strcmp(name, "PO")) { - aTrigger = aTriggerPageOpened; - } else if(!strcmp(name, "PV")) { - aTrigger = aTriggerPageVisible; - } else if(!strcmp(name, "XA")) { - aTrigger = aTriggerUserAction; - } else { - aTrigger = aTriggerUnknown; - } - } else { - aTrigger = aTriggerUnknown; - } - obj1.free(); - - if(dict->lookup("AIS", &obj1)->isName()) { - const char *name = obj1.getName(); - - if(!strcmp(name, "I")) { - aState = aStateEnabled; - } else if(!strcmp(name, "L")) { - aState = aStateDisabled; - } else { - aState = aStateUnknown; - } - } else { - aState = aStateUnknown; - } - obj1.free(); - - if(dict->lookup("D", &obj1)->isName()) { - const char *name = obj1.getName(); - - if(!strcmp(name, "PC")) { - dTrigger = dTriggerPageClosed; - } else if(!strcmp(name, "PI")) { - dTrigger = dTriggerPageInvisible; - } else if(!strcmp(name, "XD")) { - dTrigger = dTriggerUserAction; - } else { - dTrigger = dTriggerUnknown; - } - } else { - dTrigger = dTriggerUnknown; - } - obj1.free(); - - if(dict->lookup("DIS", &obj1)->isName()) { - const char *name = obj1.getName(); - - if(!strcmp(name, "U")) { - dState = dStateUninstantiaded; - } else if(!strcmp(name, "I")) { - dState = dStateInstantiated; - } else if(!strcmp(name, "L")) { - dState = dStateLive; - } else { - dState = dStateUnknown; - } - } else { - dState = dStateUnknown; - } - obj1.free(); - - if (dict->lookup("TB", &obj1)->isBool()) { - displayToolbar = obj1.getBool(); - } else { - displayToolbar = gTrue; - } - obj1.free(); - - if (dict->lookup("NP", &obj1)->isBool()) { - displayNavigation = obj1.getBool(); - } else { - displayNavigation = gFalse; - } - obj1.free(); -} - -//------------------------------------------------------------------------ -// Annots -//------------------------------------------------------------------------ - -Annots::Annots(XRef *xref, Catalog *catalog, Object *annotsObj) { - Annot *annot; - Object obj1; - int i; - - annots = NULL; - size = 0; - nAnnots = 0; - - if (annotsObj->isArray()) { - for (i = 0; i < annotsObj->arrayGetLength(); ++i) { - //get the Ref to this annot and pass it to Annot constructor - //this way, it'll be possible for the annot to retrieve the corresponding - //form widget - Object obj2; - if (annotsObj->arrayGet(i, &obj1)->isDict()) { - annotsObj->arrayGetNF(i, &obj2); - annot = createAnnot (xref, obj1.getDict(), catalog, &obj2); - if (annot) { - if (annot->isOk()) { - appendAnnot(annot); - } - annot->decRefCnt(); - } - } - obj2.free(); - obj1.free(); - } - } -} - -void Annots::appendAnnot(Annot *annot) { - if (annot && annot->isOk()) { - if (nAnnots >= size) { - size += 16; - annots = (Annot **)greallocn(annots, size, sizeof(Annot *)); - } - annots[nAnnots++] = annot; - annot->incRefCnt(); - } -} - -Annot *Annots::createAnnot(XRef *xref, Dict* dict, Catalog *catalog, Object *obj) { - Annot *annot = NULL; - Object obj1; - - if (dict->lookup("Subtype", &obj1)->isName()) { - const char *typeName = obj1.getName(); - - if (!strcmp(typeName, "Text")) { - annot = new AnnotText(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "Link")) { - annot = new AnnotLink(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "FreeText")) { - annot = new AnnotFreeText(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "Line")) { - annot = new AnnotLine(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "Square")) { - annot = new AnnotGeometry(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "Circle")) { - annot = new AnnotGeometry(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "Polygon")) { - annot = new AnnotPolygon(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "PolyLine")) { - annot = new AnnotPolygon(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "Highlight")) { - annot = new AnnotTextMarkup(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "Underline")) { - annot = new AnnotTextMarkup(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "Squiggly")) { - annot = new AnnotTextMarkup(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "StrikeOut")) { - annot = new AnnotTextMarkup(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "Stamp")) { - annot = new AnnotStamp(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "Caret")) { - annot = new AnnotCaret(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "Ink")) { - annot = new AnnotInk(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "FileAttachment")) { - annot = new AnnotFileAttachment(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "Sound")) { - annot = new AnnotSound(xref, dict, catalog, obj); - } else if(!strcmp(typeName, "Movie")) { - annot = new AnnotMovie(xref, dict, catalog, obj); - } else if(!strcmp(typeName, "Widget")) { - // Find the annot in forms - if (obj->isRef()) { - Form *form = catalog->getForm(); - if (form) { - FormWidget *widget = form->findWidgetByRef(obj->getRef()); - if (widget) { - annot = widget->getWidgetAnnotation(); - annot->incRefCnt(); - } - } - } - if (!annot) - annot = new AnnotWidget(xref, dict, catalog, obj); - } else if(!strcmp(typeName, "Screen")) { - annot = new AnnotScreen(xref, dict, catalog, obj); - } else if(!strcmp(typeName, "PrinterMark")) { - annot = new Annot(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "TrapNet")) { - annot = new Annot(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "Watermark")) { - annot = new Annot(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "3D")) { - annot = new Annot3D(xref, dict, catalog, obj); - } else if (!strcmp(typeName, "Popup")) { - /* Popup annots are already handled by markup annots - * Here we only care about popup annots without a - * markup annotation associated - */ - Object obj2; - - if (dict->lookup("Parent", &obj2)->isNull()) - annot = new AnnotPopup(xref, dict, catalog, obj); - else - annot = NULL; - - obj2.free(); - } else { - annot = new Annot(xref, dict, catalog, obj); - } - } - obj1.free(); - - return annot; -} - -Annot *Annots::findAnnot(Ref *ref) { - int i; - - for (i = 0; i < nAnnots; ++i) { - if (annots[i]->match(ref)) { - return annots[i]; - } - } - return NULL; -} - - -Annots::~Annots() { - int i; - - for (i = 0; i < nAnnots; ++i) { - annots[i]->decRefCnt(); - } - gfree(annots); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Annot.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Annot.h deleted file mode 100644 index 59d610ba40b..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Annot.h +++ /dev/null @@ -1,1267 +0,0 @@ -//======================================================================== -// -// Annot.h -// -// Copyright 2000-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006 Scott Turner <scotty1024@mac.com> -// Copyright (C) 2007, 2008 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2007-2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2007, 2008 Iñigo Martínez <inigomartinez@gmail.com> -// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> -// Copyright (C) 2008 Hugo Mercier <hmercier31@gmail.com> -// Copyright (C) 2008 Pino Toscano <pino@kde.org> -// Copyright (C) 2008 Tomas Are Haavet <tomasare@gmail.com> -// Copyright (C) 2009-2011 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef ANNOT_H -#define ANNOT_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -class XRef; -class Gfx; -class Catalog; -class CharCodeToUnicode; -class GfxFont; -class GfxResources; -class Form; -class FormWidget; -class FormField; -class FormFieldChoice; -class PDFRectangle; -class Movie; -class LinkAction; -class OCGs; -class Sound; - -enum AnnotLineEndingStyle { - annotLineEndingSquare, // Square - annotLineEndingCircle, // Circle - annotLineEndingDiamond, // Diamond - annotLineEndingOpenArrow, // OpenArrow - annotLineEndingClosedArrow, // ClosedArrow - annotLineEndingNone, // None - annotLineEndingButt, // Butt - annotLineEndingROpenArrow, // ROpenArrow - annotLineEndingRClosedArrow, // RClosedArrow - annotLineEndingSlash // Slash -}; - -enum AnnotExternalDataType { - annotExternalDataMarkupUnknown, - annotExternalDataMarkup3D // Markup3D -}; - -//------------------------------------------------------------------------ -// AnnotCoord -//------------------------------------------------------------------------ - -class AnnotCoord { -public: - - AnnotCoord() : x(0), y(0) { } - AnnotCoord(double _x, double _y) : x(_x), y(_y) { } - - double getX() const { return x; } - double getY() const { return y; } - -protected: - - double x, y; -}; - -//------------------------------------------------------------------------ -// AnnotPath -//------------------------------------------------------------------------ - -class AnnotPath { -public: - AnnotPath(); - AnnotPath(Array *array); - AnnotPath(AnnotCoord **coords, int coordLength); - ~AnnotPath(); - - double getX(int coord) const; - double getY(int coord) const; - AnnotCoord *getCoord(int coord) const; - int getCoordsLength() const { return coordsLength; } -protected: - AnnotCoord **coords; - int coordsLength; - - void parsePathArray(Array *array); -}; - -//------------------------------------------------------------------------ -// AnnotCalloutLine -//------------------------------------------------------------------------ - -class AnnotCalloutLine { -public: - - AnnotCalloutLine(double x1, double y1, double x2, double y2); - virtual ~AnnotCalloutLine() { } - - double getX1() const { return coord1.getX(); } - double getY1() const { return coord1.getY(); } - double getX2() const { return coord2.getX(); } - double getY2() const { return coord2.getY(); } - -protected: - - AnnotCoord coord1, coord2; -}; - -//------------------------------------------------------------------------ -// AnnotCalloutMultiLine -//------------------------------------------------------------------------ - -class AnnotCalloutMultiLine: public AnnotCalloutLine { -public: - - AnnotCalloutMultiLine(double x1, double y1, double x2, double y2, - double x3, double y3); - - double getX3() const { return coord3.getX(); } - double getY3() const { return coord3.getY(); } - -protected: - - AnnotCoord coord3; -}; - -//------------------------------------------------------------------------ -// AnnotBorderEffect -//------------------------------------------------------------------------ - -class AnnotBorderEffect { -public: - - enum AnnotBorderEffectType { - borderEffectNoEffect, // S - borderEffectCloudy // C - }; - - AnnotBorderEffect(Dict *dict); - - AnnotBorderEffectType getEffectType() const { return effectType; } - double getIntensity() const { return intensity; } - -private: - - AnnotBorderEffectType effectType; // S (Default S) - double intensity; // I (Default 0) -}; - -//------------------------------------------------------------------------ -// AnnotQuadrilateral -//------------------------------------------------------------------------ - -class AnnotQuadrilaterals { - class AnnotQuadrilateral { - public: - AnnotQuadrilateral(double x1, double y1, double x2, double y2, double x3, - double y3, double x4, double y4); - - AnnotCoord coord1, coord2, coord3, coord4; - }; - -public: - - AnnotQuadrilaterals(Array *array, PDFRectangle *rect); - ~AnnotQuadrilaterals(); - - double getX1(int quadrilateral); - double getY1(int quadrilateral); - double getX2(int quadrilateral); - double getY2(int quadrilateral); - double getX3(int quadrilateral); - double getY3(int quadrilateral); - double getX4(int quadrilateral); - double getY4(int quadrilateral); - int getQuadrilateralsLength() const { return quadrilateralsLength; } -protected: - - AnnotQuadrilateral** quadrilaterals; - int quadrilateralsLength; -}; - -//------------------------------------------------------------------------ -// AnnotBorder -//------------------------------------------------------------------------ - -class AnnotBorder { -public: - enum AnnotBorderType { - typeUnknown, - typeArray, - typeBS - }; - - enum AnnotBorderStyle { - borderSolid, // Solid - borderDashed, // Dashed - borderBeveled, // Beveled - borderInset, // Inset - borderUnderlined // Underlined - }; - - AnnotBorder(); - virtual ~AnnotBorder(); - - virtual AnnotBorderType getType() const { return type; } - virtual double getWidth() const { return width; } - virtual int getDashLength() const { return dashLength; } - virtual double *getDash() const { return dash; } - virtual AnnotBorderStyle getStyle() const { return style; } - -protected: - GBool parseDashArray(Object *dashObj); - - AnnotBorderType type; - double width; - static const int DASH_LIMIT = 10; // implementation note 82 in Appendix H. - int dashLength; - double *dash; - AnnotBorderStyle style; -}; - -//------------------------------------------------------------------------ -// AnnotBorderArray -//------------------------------------------------------------------------ - -class AnnotBorderArray: public AnnotBorder { -public: - AnnotBorderArray(); - AnnotBorderArray(Array *array); - - double getHorizontalCorner() const { return horizontalCorner; } - double getVerticalCorner() const { return verticalCorner; } - -protected: - double horizontalCorner; // (Default 0) - double verticalCorner; // (Default 0) - // double width; // (Default 1) (inherited from AnnotBorder) -}; - -//------------------------------------------------------------------------ -// AnnotBorderBS -//------------------------------------------------------------------------ - -class AnnotBorderBS: public AnnotBorder { -public: - - AnnotBorderBS(); - AnnotBorderBS(Dict *dict); - -private: - // double width; // W (Default 1) (inherited from AnnotBorder) - // AnnotBorderStyle style; // S (Default S) (inherited from AnnotBorder) - // double *dash; // D (Default [3]) (inherited from AnnotBorder) -}; - -//------------------------------------------------------------------------ -// AnnotColor -//------------------------------------------------------------------------ - -class AnnotColor { -public: - - enum AnnotColorSpace { - colorTransparent = 0, - colorGray = 1, - colorRGB = 3, - colorCMYK = 4 - }; - - AnnotColor(); - AnnotColor(double gray); - AnnotColor(double r, double g, double b); - AnnotColor(double c, double m, double y, double k); - AnnotColor(Array *array, int adjust = 0); - - void adjustColor(int adjust); - - AnnotColorSpace getSpace() const { return (AnnotColorSpace) length; } - const double *getValues() const { return values; } - -private: - - double values[4]; - int length; -}; - -//------------------------------------------------------------------------ -// AnnotIconFit -//------------------------------------------------------------------------ - -class AnnotIconFit { -public: - - enum AnnotIconFitScaleWhen { - scaleAlways, // A - scaleBigger, // B - scaleSmaller, // S - scaleNever // N - }; - - enum AnnotIconFitScale { - scaleAnamorphic, // A - scaleProportional // P - }; - - AnnotIconFit(Dict *dict); - - AnnotIconFitScaleWhen getScaleWhen() { return scaleWhen; } - AnnotIconFitScale getScale() { return scale; } - double getLeft() { return left; } - double getBottom() { return bottom; } - bool getFullyBounds() { return fullyBounds; } - -protected: - - AnnotIconFitScaleWhen scaleWhen; // SW (Default A) - AnnotIconFitScale scale; // S (Default P) - double left; // A (Default [0.5 0.5] - double bottom; // Only if scale is P - bool fullyBounds; // FB (Default false) -}; - -//------------------------------------------------------------------------ -// AnnotAppearance -//------------------------------------------------------------------------ - -class AnnotAppearance { -public: - - enum AnnotAppearanceType { - appearNormal, - appearRollover, - appearDown - }; - - AnnotAppearance(Dict *dict); -}; - -//------------------------------------------------------------------------ -// AnnotAppearanceCharacs -//------------------------------------------------------------------------ - -class AnnotAppearanceCharacs { -public: - - enum AnnotAppearanceCharacsTextPos { - captionNoIcon, // 0 - captionNoCaption, // 1 - captionBelow, // 2 - captionAbove, // 3 - captionRight, // 4 - captionLeft, // 5 - captionOverlaid // 6 - }; - - AnnotAppearanceCharacs(Dict *dict); - ~AnnotAppearanceCharacs(); - - int getRotation() { return rotation; } - AnnotColor *getBorderColor() { return borderColor; } - AnnotColor *getBackColor() { return backColor; } - GooString *getNormalCaption() { return normalCaption; } - GooString *getRolloverCaption() { return rolloverCaption; } - GooString *getAlternateCaption() { return alternateCaption; } - AnnotIconFit *getIconFit() { return iconFit; } - AnnotAppearanceCharacsTextPos getPosition() { return position; } - -protected: - - int rotation; // R (Default 0) - AnnotColor *borderColor; // BC - AnnotColor *backColor; // BG - GooString *normalCaption; // CA - GooString *rolloverCaption; // RC - GooString *alternateCaption; // AC - // I - // RI - // IX - AnnotIconFit *iconFit; // IF - AnnotAppearanceCharacsTextPos position; // TP (Default 0) -}; - -//------------------------------------------------------------------------ -// Annot -//------------------------------------------------------------------------ - -class Annot { -public: - enum AnnotFlag { - flagUnknown = 0x0000, - flagInvisible = 0x0001, - flagHidden = 0x0002, - flagPrint = 0x0004, - flagNoZoom = 0x0008, - flagNoRotate = 0x0010, - flagNoView = 0x0020, - flagReadOnly = 0x0040, - flagLocked = 0x0080, - flagToggleNoView = 0x0100, - flagLockedContents = 0x0200 - }; - - enum AnnotSubtype { - typeUnknown, // 0 - typeText, // Text 1 - typeLink, // Link 2 - typeFreeText, // FreeText 3 - typeLine, // Line 4 - typeSquare, // Square 5 - typeCircle, // Circle 6 - typePolygon, // Polygon 7 - typePolyLine, // PolyLine 8 - typeHighlight, // Highlight 9 - typeUnderline, // Underline 10 - typeSquiggly, // Squiggly 11 - typeStrikeOut, // StrikeOut 12 - typeStamp, // Stamp 13 - typeCaret, // Caret 14 - typeInk, // Ink 15 - typePopup, // Popup 16 - typeFileAttachment, // FileAttachment 17 - typeSound, // Sound 18 - typeMovie, // Movie 19 - typeWidget, // Widget 20 - typeScreen, // Screen 21 - typePrinterMark, // PrinterMark 22 - typeTrapNet, // TrapNet 23 - typeWatermark, // Watermark 24 - type3D // 3D 25 - }; - - Annot(XRef *xrefA, PDFRectangle *rectA, Catalog *catalog); - Annot(XRef *xrefA, Dict *dict, Catalog *catalog); - Annot(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - GBool isOk() { return ok; } - - void incRefCnt(); - void decRefCnt(); - - virtual void draw(Gfx *gfx, GBool printing); - // Get appearance object. - Object *getAppearance(Object *obj) { return appearance.fetch(xref, obj); } - - GBool match(Ref *refA) - { return ref.num == refA->num && ref.gen == refA->gen; } - - double getXMin(); - double getYMin(); - - double getFontSize() { return fontSize; } - - // Sets the annot contents to new_content - // new_content should never be NULL - void setContents(GooString *new_content); - - // The annotation takes the ownership of - // new_color. - void setColor(AnnotColor *new_color); - - void setPage(Ref *pageRef, int pageIndex); - - void setAppearanceState(char *state); - - // getters - XRef *getXRef() const { return xref; } - GBool getHasRef() const { return hasRef; } - Ref getRef() const { return ref; } - AnnotSubtype getType() const { return type; } - PDFRectangle *getRect() const { return rect; } - void getRect(double *x1, double *y1, double *x2, double *y2) const; - GooString *getContents() const { return contents; } - int getPageNum() const { return page; } - GooString *getName() const { return name; } - GooString *getModified() const { return modified; } - Guint getFlags() const { return flags; } - /*Dict *getAppearDict() const { return appearDict; }*/ - GooString *getAppearState() const { return appearState; } - AnnotBorder *getBorder() const { return border; } - AnnotColor *getColor() const { return color; } - int getTreeKey() const { return treeKey; } - - int getId() { return ref.num; } - - // Check if point is inside the annot rectangle. - GBool inRect(double x, double y) const; - -private: - void readArrayNum(Object *pdfArray, int key, double *value); - // write vStr[i:j[ in appearBuf - - void initialize (XRef *xrefA, Dict *dict, Catalog *catalog); - - -protected: - virtual ~Annot(); - void setColor(AnnotColor *color, GBool fill); - void drawCircle(double cx, double cy, double r, GBool fill); - void drawCircleTopLeft(double cx, double cy, double r); - void drawCircleBottomRight(double cx, double cy, double r); - void createForm(double *bbox, GBool transparencyGroup, Object *resDict, Object *aStream); - void createResourcesDict(char *formName, Object *formStream, char *stateName, - double opacity, char *blendMode, Object *resDict); - GBool isVisible(GBool printing); - - // Updates the field key of the annotation dictionary - // and sets M to the current time - void update(const char *key, Object *value); - - int refCnt; - - Object annotObj; - - // required data - AnnotSubtype type; // Annotation type - PDFRectangle *rect; // Rect - - // optional data - GooString *contents; // Contents - int page; // P - GooString *name; // NM - GooString *modified; // M - Guint flags; // F (must be a 32 bit unsigned int) - //Dict *appearDict; // AP (should be correctly parsed) - Ref appRef; //the reference to the indirect appearance object in XRef - Object appearance; // a reference to the Form XObject stream - // for the normal appearance - GooString *appearState; // AS - int treeKey; // Struct Parent; - OCGs *optContentConfig; // Optional content config - Object oc; // OC - - XRef *xref; // the xref table for this PDF file - Ref ref; // object ref identifying this annotation - GooString *appearBuf; - AnnotBorder *border; // Border, BS - AnnotColor *color; // C - double fontSize; - GBool ok; - - bool hasRef; -}; - -//------------------------------------------------------------------------ -// AnnotPopup -//------------------------------------------------------------------------ - -class AnnotPopup: public Annot { -public: - AnnotPopup(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); - AnnotPopup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - ~AnnotPopup(); - - Object *getParent(Object *obj) { return parent.fetch (xref, obj); } - Object *getParentNF(Object *obj) { return &parent; } - void setParent(Object *parentA); - void setParent(Annot *parentA); - GBool getOpen() const { return open; } - void setOpen(GBool openA); - -protected: - void initialize(XRef *xrefA, Dict *dict, Catalog *catalog); - - Object parent; // Parent - GBool open; // Open -}; - -//------------------------------------------------------------------------ -// AnnotMarkup -//------------------------------------------------------------------------ - -class AnnotMarkup: public Annot { -public: - enum AnnotMarkupReplyType { - replyTypeR, // R - replyTypeGroup // Group - }; - - AnnotMarkup(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); - AnnotMarkup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - virtual ~AnnotMarkup(); - - // getters - GooString *getLabel() const { return label; } - AnnotPopup *getPopup() const { return popup; } - double getOpacity() const { return opacity; } - // getRC - GooString *getDate() const { return date; } - int getInReplyToID() const { return inReplyTo.num; } - GooString *getSubject() const { return subject; } - AnnotMarkupReplyType getReplyTo() const { return replyTo; } - AnnotExternalDataType getExData() const { return exData; } - - // The annotation takes the ownership of new_popup - void setPopup(AnnotPopup *new_popup); - void setLabel(GooString *new_label); - void setOpacity(double opacityA); - -protected: - GooString *label; // T (Default autor) - AnnotPopup *popup; // Popup - double opacity; // CA (Default 1.0) - // RC - GooString *date; // CreationDate - Ref inReplyTo; // IRT - GooString *subject; // Subj - AnnotMarkupReplyType replyTo; // RT (Default R) - // this object is overrided by the custom intent fields defined in some - // annotation types. - //GooString *intent; // IT - AnnotExternalDataType exData; // ExData - -private: - void initialize(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); -}; - -//------------------------------------------------------------------------ -// AnnotText -//------------------------------------------------------------------------ - -class AnnotText: public AnnotMarkup { -public: - enum AnnotTextState { - stateUnknown, - // Marked state model - stateMarked, // Marked - stateUnmarked, // Unmarked - // Review state model - stateAccepted, // Accepted - stateRejected, // Rejected - stateCancelled, // Cancelled - stateCompleted, // Completed - stateNone // None - }; - - AnnotText(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); - AnnotText(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - ~AnnotText(); - - virtual void draw(Gfx *gfx, GBool printing); - - // getters - GBool getOpen() const { return open; } - GooString *getIcon() const { return icon; } - AnnotTextState getState() const { return state; } - - void setOpen(GBool openA); - void setIcon(GooString *new_icon); - -private: - - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - GBool open; // Open (Default false) - GooString *icon; // Name (Default Note) - AnnotTextState state; // State (Default Umarked if - // StateModel Marked - // None if StareModel Review) -}; - -//------------------------------------------------------------------------ -// AnnotMovie -//------------------------------------------------------------------------ - - - -class AnnotMovie: public Annot { - public: - AnnotMovie(XRef *xrefA, PDFRectangle *rect, Movie *movieA, Catalog *catalog); - AnnotMovie(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - ~AnnotMovie(); - - virtual void draw(Gfx *gfx, GBool printing); - - GooString* getTitle() { return title; } - Movie* getMovie() { return movie; } - - private: - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - GooString* title; // T - Movie* movie; // Movie + A -}; - - -//------------------------------------------------------------------------ -// AnnotScreen -//------------------------------------------------------------------------ - -class AnnotScreen: public Annot { - public: - - AnnotScreen(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); - AnnotScreen(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - ~AnnotScreen(); - - GooString* getTitle() { return title; } - - AnnotAppearanceCharacs *getAppearCharacs() { return appearCharacs; } - LinkAction* getAction() { return action; } - Object* getAdditionActions() { return &additionAction; } - - private: - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - - GooString* title; // T - - AnnotAppearanceCharacs* appearCharacs; // MK - - LinkAction *action; // A - Object additionAction; // AA -}; - -//------------------------------------------------------------------------ -// AnnotLink -//------------------------------------------------------------------------ - -class AnnotLink: public Annot { -public: - - enum AnnotLinkEffect { - effectNone, // N - effectInvert, // I - effectOutline, // O - effectPush // P - }; - - AnnotLink(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); - AnnotLink(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - virtual ~AnnotLink(); - - virtual void draw(Gfx *gfx, GBool printing); - - // getters - LinkAction *getAction() const { return action; } - AnnotLinkEffect getLinkEffect() const { return linkEffect; } - Dict *getUriAction() const { return uriAction; } - AnnotQuadrilaterals *getQuadrilaterals() const { return quadrilaterals; } - -protected: - - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - LinkAction *action; // A, Dest - AnnotLinkEffect linkEffect; // H (Default I) - Dict *uriAction; // PA - - AnnotQuadrilaterals *quadrilaterals; // QuadPoints -}; - -//------------------------------------------------------------------------ -// AnnotFreeText -//------------------------------------------------------------------------ - -class AnnotFreeText: public AnnotMarkup { -public: - - enum AnnotFreeTextQuadding { - quaddingLeftJustified, // 0 - quaddingCentered, // 1 - quaddingRightJustified // 2 - }; - - enum AnnotFreeTextIntent { - intentFreeText, // FreeText - intentFreeTextCallout, // FreeTextCallout - intentFreeTextTypeWriter // FreeTextTypeWriter - }; - - AnnotFreeText(XRef *xrefA, PDFRectangle *rect, GooString *da, Catalog *catalog); - AnnotFreeText(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - ~AnnotFreeText(); - - // getters - GooString *getAppearanceString() const { return appearanceString; } - AnnotFreeTextQuadding getQuadding() const { return quadding; } - // return rc - GooString *getStyleString() const { return styleString; } - AnnotCalloutLine *getCalloutLine() const { return calloutLine; } - AnnotFreeTextIntent getIntent() const { return intent; } - AnnotBorderEffect *getBorderEffect() const { return borderEffect; } - PDFRectangle *getRectangle() const { return rectangle; } - AnnotLineEndingStyle getEndStyle() const { return endStyle; } - -protected: - - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - // required - GooString *appearanceString; // DA - - // optional - AnnotFreeTextQuadding quadding; // Q (Default 0) - // RC - GooString *styleString; // DS - AnnotCalloutLine *calloutLine; // CL - AnnotFreeTextIntent intent; // IT - AnnotBorderEffect *borderEffect; // BE - PDFRectangle *rectangle; // RD - // inherited from Annot - // AnnotBorderBS border; // BS - AnnotLineEndingStyle endStyle; // LE (Default None) -}; - -//------------------------------------------------------------------------ -// AnnotLine -//------------------------------------------------------------------------ - -class AnnotLine: public AnnotMarkup { -public: - - enum AnnotLineIntent { - intentLineArrow, // LineArrow - intentLineDimension // LineDimension - }; - - enum AnnotLineCaptionPos { - captionPosInline, // Inline - captionPosTop // Top - }; - - AnnotLine(XRef *xrefA, PDFRectangle *rect, PDFRectangle *lRect, Catalog *catalog); - AnnotLine(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - ~AnnotLine(); - - virtual void draw(Gfx *gfx, GBool printing); - - // getters - AnnotLineEndingStyle getStartStyle() const { return startStyle; } - AnnotLineEndingStyle getEndStyle() const { return endStyle; } - AnnotColor *getInteriorColor() const { return interiorColor; } - double getLeaderLineLength() const { return leaderLineLength; } - double getLeaderLineExtension() const { return leaderLineExtension; } - bool getCaption() const { return caption; } - AnnotLineIntent getIntent() const { return intent; } - double getLeaderLineOffset() const { return leaderLineOffset; } - AnnotLineCaptionPos getCaptionPos() const { return captionPos; } - Dict *getMeasure() const { return measure; } - double getCaptionTextHorizontal() const { return captionTextHorizontal; } - double getCaptionTextVertical() const { return captionTextVertical; } - double getX1() const { return coord1->getX(); } - double getY1() const { return coord1->getY(); } - double getX2() const { return coord2->getX(); } - double getY2() const { return coord2->getY(); } - -protected: - - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - // required - AnnotCoord *coord1, *coord2; - - // optional - // inherited from Annot - // AnnotBorderBS border; // BS - AnnotLineEndingStyle startStyle; // LE (Default [/None /None]) - AnnotLineEndingStyle endStyle; // - AnnotColor *interiorColor; // IC - double leaderLineLength; // LL (Default 0) - double leaderLineExtension; // LLE (Default 0) - bool caption; // Cap (Default false) - AnnotLineIntent intent; // IT - double leaderLineOffset; // LLO - AnnotLineCaptionPos captionPos; // CP (Default Inline) - Dict *measure; // Measure - double captionTextHorizontal; // CO (Default [0, 0]) - double captionTextVertical; // -}; - -//------------------------------------------------------------------------ -// AnnotTextMarkup -//------------------------------------------------------------------------ - -class AnnotTextMarkup: public AnnotMarkup { -public: - - AnnotTextMarkup(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType, - AnnotQuadrilaterals *quadPoints, Catalog *catalog); - AnnotTextMarkup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - virtual ~AnnotTextMarkup(); - - virtual void draw(Gfx *gfx, GBool printing); - - AnnotQuadrilaterals *getQuadrilaterals() const { return quadrilaterals; } - -protected: - - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - AnnotQuadrilaterals *quadrilaterals; // QuadPoints -}; - -//------------------------------------------------------------------------ -// AnnotStamp -//------------------------------------------------------------------------ - -class AnnotStamp: public AnnotMarkup { -public: - - AnnotStamp(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); - AnnotStamp(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - ~AnnotStamp(); - - // getters - GooString *getIcon() const { return icon; } - -private: - - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - GooString *icon; // Name (Default Draft) -}; - -//------------------------------------------------------------------------ -// AnnotGeometry -//------------------------------------------------------------------------ - -class AnnotGeometry: public AnnotMarkup { -public: - - AnnotGeometry(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType, Catalog *catalog); - AnnotGeometry(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - ~AnnotGeometry(); - - virtual void draw(Gfx *gfx, GBool printing); - - // getters - AnnotColor *getInteriorColor() const { return interiorColor; } - AnnotBorderEffect *getBorderEffect() const { return borderEffect; } - PDFRectangle *getGeometryRect() const { return geometryRect; } - -private: - - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - AnnotColor *interiorColor; // IC - AnnotBorderEffect *borderEffect; // BE - PDFRectangle *geometryRect; // RD (combined with Rect) -}; - -//------------------------------------------------------------------------ -// AnnotPolygon -//------------------------------------------------------------------------ - -class AnnotPolygon: public AnnotMarkup { -public: - - enum AnnotPolygonIntent { - polygonCloud, // PolygonCloud - polylineDimension, // PolyLineDimension - polygonDimension // PolygonDimension - }; - - AnnotPolygon(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType, - AnnotPath *path, Catalog *catalog); - AnnotPolygon(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - ~AnnotPolygon(); - - // getters - AnnotPath *getVertices() const { return vertices; } - AnnotLineEndingStyle getStartStyle() const { return startStyle; } - AnnotLineEndingStyle getEndStyle() const { return endStyle; } - AnnotColor *getInteriorColor() const { return interiorColor; } - AnnotBorderEffect *getBorderEffect() const { return borderEffect; } - AnnotPolygonIntent getIntent() const { return intent; } - -private: - - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - // required - AnnotPath *vertices; // Vertices - - // optional - AnnotLineEndingStyle startStyle; // LE (Default [/None /None]) - AnnotLineEndingStyle endStyle; // - // inherited from Annot - // AnnotBorderBS border; // BS - AnnotColor *interiorColor; // IC - AnnotBorderEffect *borderEffect; // BE - AnnotPolygonIntent intent; // IT - // Measure -}; - -//------------------------------------------------------------------------ -// AnnotCaret -//------------------------------------------------------------------------ - -class AnnotCaret: public AnnotMarkup { -public: - - enum AnnotCaretSymbol { - symbolNone, // None - symbolP // P - }; - - AnnotCaret(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); - AnnotCaret(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - ~AnnotCaret(); - - // getters - AnnotCaretSymbol getSymbol() const { return symbol; } - PDFRectangle *getCaretRect() const { return caretRect; } - -private: - - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - AnnotCaretSymbol symbol; // Sy (Default None) - PDFRectangle *caretRect; // RD (combined with Rect) -}; - -//------------------------------------------------------------------------ -// AnnotInk -//------------------------------------------------------------------------ - -class AnnotInk: public AnnotMarkup { -public: - - AnnotInk(XRef *xrefA, PDFRectangle *rect, AnnotPath **paths, int n_paths, Catalog *catalog); - AnnotInk(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - ~AnnotInk(); - - // getters - AnnotPath **getInkList() const { return inkList; } - int getInkListLength() const { return inkListLength; } - -private: - - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - // required - AnnotPath **inkList; // InkList - int inkListLength; - - // optional - // inherited from Annot - // AnnotBorderBS border; // BS -}; - -//------------------------------------------------------------------------ -// AnnotFileAttachment -//------------------------------------------------------------------------ - -class AnnotFileAttachment: public AnnotMarkup { -public: - - AnnotFileAttachment(XRef *xrefA, PDFRectangle *rect, GooString *filename, Catalog *catalog); - AnnotFileAttachment(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - ~AnnotFileAttachment(); - - virtual void draw(Gfx *gfx, GBool printing); - - // getters - Object *getFile() { return &file; } - GooString *getName() const { return name; } - -private: - - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - // required - Object file; // FS - - // optional - GooString *name; // Name -}; - -//------------------------------------------------------------------------ -// AnnotSound -//------------------------------------------------------------------------ - -class AnnotSound: public AnnotMarkup { -public: - - AnnotSound(XRef *xrefA, PDFRectangle *rect, Sound *soundA, Catalog *catalog); - AnnotSound(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - ~AnnotSound(); - - virtual void draw(Gfx *gfx, GBool printing); - - // getters - Sound *getSound() { return sound; } - GooString *getName() const { return name; } - -private: - - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - // required - Sound *sound; // Sound - - // optional - GooString *name; // Name -}; - -//------------------------------------------------------------------------ -// AnnotWidget -//------------------------------------------------------------------------ - -class AnnotWidget: public Annot { -public: - - enum AnnotWidgetHighlightMode { - highlightModeNone, // N - highlightModeInvert, // I - highlightModeOutline, // O - highlightModePush // P,T - }; - - AnnotWidget(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - AnnotWidget(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj, FormField *fieldA); - virtual ~AnnotWidget(); - - virtual void draw(Gfx *gfx, GBool printing); - - void drawBorder(); - void drawFormFieldButton(GfxResources *resources, GooString *da); - void drawFormFieldText(GfxResources *resources, GooString *da); - void drawFormFieldChoice(GfxResources *resources, GooString *da); - void generateFieldAppearance (); - - AnnotWidgetHighlightMode getMode() { return mode; } - AnnotAppearanceCharacs *getAppearCharacs() { return appearCharacs; } - LinkAction *getAction() { return action; } - Dict *getAdditionActions() { return additionActions; } - Dict *getParent() { return parent; } - -private: - - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - void drawText(GooString *text, GooString *da, GfxResources *resources, - GBool multiline, int comb, int quadding, - GBool txField, GBool forceZapfDingbats, - GBool password=false); - void drawListBox(FormFieldChoice *fieldChoice, - GooString *da, GfxResources *resources, int quadding); - void layoutText(GooString *text, GooString *outBuf, int *i, GfxFont *font, - double *width, double widthLimit, int *charCount, - GBool noReencode); - void writeString(GooString *str, GooString *appearBuf); - - Form *form; - FormField *field; // FormField object for this annotation - AnnotWidgetHighlightMode mode; // H (Default I) - AnnotAppearanceCharacs *appearCharacs; // MK - LinkAction *action; // A - Dict *additionActions; // AA - // inherited from Annot - // AnnotBorderBS border; // BS - Dict *parent; // Parent - GBool addDingbatsResource; -}; - -//------------------------------------------------------------------------ -// Annot3D -//------------------------------------------------------------------------ - -class Annot3D: public Annot { - class Activation { - public: - enum ActivationATrigger { - aTriggerUnknown, - aTriggerPageOpened, // PO - aTriggerPageVisible, // PV - aTriggerUserAction // XA - }; - - enum ActivationAState { - aStateUnknown, - aStateEnabled, // I - aStateDisabled // L - }; - - enum ActivationDTrigger { - dTriggerUnknown, - dTriggerPageClosed, // PC - dTriggerPageInvisible, // PI - dTriggerUserAction // XD - }; - - enum ActivationDState { - dStateUnknown, - dStateUninstantiaded, // U - dStateInstantiated, // I - dStateLive // L - }; - - Activation(Dict *dict); - private: - - ActivationATrigger aTrigger; // A (Default XA) - ActivationAState aState; // AIS (Default L) - ActivationDTrigger dTrigger; // D (Default PI) - ActivationDState dState; // DIS (Default U) - GBool displayToolbar; // TB (Default true) - GBool displayNavigation; // NP (Default false); - }; -public: - - Annot3D(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); - Annot3D(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); - ~Annot3D(); - - // getters - -private: - - void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); - - Activation *activation; // 3DA -}; - -//------------------------------------------------------------------------ -// Annots -//------------------------------------------------------------------------ - -class Annots { -public: - - // Build a list of Annot objects. - Annots(XRef *xref, Catalog *catalog, Object *annotsObj); - - ~Annots(); - - // Iterate through list of annotations. - int getNumAnnots() { return nAnnots; } - Annot *getAnnot(int i) { return annots[i]; } - void appendAnnot(Annot *annot); - -private: - Annot* createAnnot(XRef *xref, Dict* dict, Catalog *catalog, Object *obj); - Annot *findAnnot(Ref *ref); - - Annot **annots; - int nAnnots; - int size; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Array.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Array.cc deleted file mode 100644 index e7ec4e7dc5f..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Array.cc +++ /dev/null @@ -1,102 +0,0 @@ -//======================================================================== -// -// Array.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <stddef.h> -#include "goo/gmem.h" -#include "Object.h" -#include "Array.h" - -//------------------------------------------------------------------------ -// Array -//------------------------------------------------------------------------ - -Array::Array(XRef *xrefA) { - xref = xrefA; - elems = NULL; - size = length = 0; - ref = 1; -} - -Array::~Array() { - int i; - - for (i = 0; i < length; ++i) - elems[i].free(); - gfree(elems); -} - -void Array::add(Object *elem) { - if (length == size) { - if (length == 0) { - size = 8; - } else { - size *= 2; - } - elems = (Object *)greallocn(elems, size, sizeof(Object)); - } - elems[length] = *elem; - ++length; -} - -Object *Array::get(int i, Object *obj) { - if (i < 0 || i >= length) { -#ifdef DEBUG_MEM - abort(); -#else - return obj->initNull(); -#endif - } - return elems[i].fetch(xref, obj); -} - -Object *Array::getNF(int i, Object *obj) { - if (i < 0 || i >= length) { -#ifdef DEBUG_MEM - abort(); -#else - return obj->initNull(); -#endif - } - return elems[i].copy(obj); -} - -GBool Array::getString(int i, GooString *string) -{ - Object obj; - - if (getNF(i, &obj)->isString()) { - string->clear(); - string->append(obj.getString()); - obj.free(); - return gTrue; - } else { - obj.free(); - return gFalse; - } -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Array.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Array.h deleted file mode 100644 index a6aca260b9f..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Array.h +++ /dev/null @@ -1,71 +0,0 @@ -//======================================================================== -// -// Array.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef ARRAY_H -#define ARRAY_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -class XRef; - -//------------------------------------------------------------------------ -// Array -//------------------------------------------------------------------------ - -class Array { -public: - - // Constructor. - Array(XRef *xrefA); - - // Destructor. - ~Array(); - - // Reference counting. - int incRef() { return ++ref; } - int decRef() { return --ref; } - - // Get number of elements. - int getLength() { return length; } - - // Add an element. - void add(Object *elem); - - // Accessors. - Object *get(int i, Object *obj); - Object *getNF(int i, Object *obj); - GBool getString(int i, GooString *string); - -private: - - XRef *xref; // the xref table for this PDF file - Object *elems; // array of elements - int size; // size of <elems> array - int length; // number of elements in array - int ref; // reference count -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/ArthurOutputDev.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/ArthurOutputDev.cc deleted file mode 100644 index 68a1c7163da..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/ArthurOutputDev.cc +++ /dev/null @@ -1,816 +0,0 @@ -//======================================================================== -// -// ArthurOutputDev.cc -// -// Copyright 2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> -// Copyright (C) 2005-2009, 2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2008, 2010 Pino Toscano <pino@kde.org> -// Copyright (C) 2009, 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2009 Petr Gajdos <pgajdos@novell.com> -// Copyright (C) 2010 Matthias Fauconneau <matthias.fauconneau@gmail.com> -// Copyright (C) 2011 Andreas Hartmetz <ahartmetz@gmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <string.h> -#include <math.h> - -#include "goo/gfile.h" -#include "GlobalParams.h" -#include "Error.h" -#include "Object.h" -#include "GfxState.h" -#include "GfxFont.h" -#include "Link.h" -#include "CharCodeToUnicode.h" -#include "FontEncodingTables.h" -#include <fofi/FoFiTrueType.h> -#include "ArthurOutputDev.h" - -#include <QtCore/QtDebug> -#include <QtGui/QPainterPath> -//------------------------------------------------------------------------ - -#ifdef HAVE_SPLASH -#include "splash/SplashFontFileID.h" -#include "splash/SplashFontFile.h" -#include "splash/SplashFontEngine.h" -#include "splash/SplashFont.h" -#include "splash/SplashMath.h" -#include "splash/SplashPath.h" -#include "splash/SplashGlyphBitmap.h" -//------------------------------------------------------------------------ -// SplashOutFontFileID -//------------------------------------------------------------------------ - -class SplashOutFontFileID: public SplashFontFileID { -public: - - SplashOutFontFileID(Ref *rA) { r = *rA; } - - ~SplashOutFontFileID() {} - - GBool matches(SplashFontFileID *id) { - return ((SplashOutFontFileID *)id)->r.num == r.num && - ((SplashOutFontFileID *)id)->r.gen == r.gen; - } - -private: - - Ref r; -}; - -#endif - -//------------------------------------------------------------------------ -// ArthurOutputDev -//------------------------------------------------------------------------ - -ArthurOutputDev::ArthurOutputDev(QPainter *painter): - m_painter(painter), - m_fontHinting(NoHinting) -{ - m_currentBrush = QBrush(Qt::SolidPattern); - m_fontEngine = 0; - m_font = 0; -} - -ArthurOutputDev::~ArthurOutputDev() -{ -#ifdef HAVE_SPLASH - delete m_fontEngine; -#endif -} - -void ArthurOutputDev::startDoc(XRef *xrefA) { - xref = xrefA; -#ifdef HAVE_SPLASH - delete m_fontEngine; - - const bool isHintingEnabled = m_fontHinting != NoHinting; - const bool isSlightHinting = m_fontHinting == SlightHinting; - - m_fontEngine = new SplashFontEngine( -#if HAVE_T1LIB_H - globalParams->getEnableT1lib(), -#endif -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - globalParams->getEnableFreeType(), - isHintingEnabled, - isSlightHinting, -#endif - m_painter->testRenderHint(QPainter::TextAntialiasing)); -#endif -} - -void ArthurOutputDev::startPage(int pageNum, GfxState *state) -{ - // fill page with white background. - int w = static_cast<int>(state->getPageWidth()); - int h = static_cast<int>(state->getPageHeight()); - QColor fillColour(Qt::white); - QBrush fill(fillColour); - m_painter->save(); - m_painter->setPen(fillColour); - m_painter->setBrush(fill); - m_painter->drawRect(0, 0, w, h); - m_painter->restore(); -} - -void ArthurOutputDev::endPage() { -} - -void ArthurOutputDev::saveState(GfxState *state) -{ - m_painter->save(); -} - -void ArthurOutputDev::restoreState(GfxState *state) -{ - m_painter->restore(); -} - -void ArthurOutputDev::updateAll(GfxState *state) -{ - OutputDev::updateAll(state); - m_needFontUpdate = gTrue; -} - -// This looks wrong - why aren't adjusting the matrix? -void ArthurOutputDev::updateCTM(GfxState *state, double m11, double m12, - double m21, double m22, - double m31, double m32) -{ - updateLineDash(state); - updateLineJoin(state); - updateLineCap(state); - updateLineWidth(state); -} - -void ArthurOutputDev::updateLineDash(GfxState *state) -{ - double *dashPattern; - int dashLength; - double dashStart; - state->getLineDash(&dashPattern, &dashLength, &dashStart); - QVector<qreal> pattern(dashLength); - for (int i = 0; i < dashLength; ++i) { - pattern[i] = dashPattern[i]; - } - m_currentPen.setDashPattern(pattern); - m_currentPen.setDashOffset(dashStart); - m_painter->setPen(m_currentPen); -} - -void ArthurOutputDev::updateFlatness(GfxState *state) -{ - // qDebug() << "updateFlatness"; -} - -void ArthurOutputDev::updateLineJoin(GfxState *state) -{ - switch (state->getLineJoin()) { - case 0: - m_currentPen.setJoinStyle(Qt::MiterJoin); - break; - case 1: - m_currentPen.setJoinStyle(Qt::RoundJoin); - break; - case 2: - m_currentPen.setJoinStyle(Qt::BevelJoin); - break; - } - m_painter->setPen(m_currentPen); -} - -void ArthurOutputDev::updateLineCap(GfxState *state) -{ - switch (state->getLineCap()) { - case 0: - m_currentPen.setCapStyle(Qt::FlatCap); - break; - case 1: - m_currentPen.setCapStyle(Qt::RoundCap); - break; - case 2: - m_currentPen.setCapStyle(Qt::SquareCap); - break; - } - m_painter->setPen(m_currentPen); -} - -void ArthurOutputDev::updateMiterLimit(GfxState *state) -{ - m_currentPen.setMiterLimit(state->getMiterLimit()); - m_painter->setPen(m_currentPen); -} - -void ArthurOutputDev::updateLineWidth(GfxState *state) -{ - m_currentPen.setWidthF(state->getLineWidth()); - m_painter->setPen(m_currentPen); -} - -void ArthurOutputDev::updateFillColor(GfxState *state) -{ - GfxRGB rgb; - QColor brushColour = m_currentBrush.color(); - state->getFillRGB(&rgb); - brushColour.setRgbF(colToDbl(rgb.r), colToDbl(rgb.g), colToDbl(rgb.b), brushColour.alphaF()); - m_currentBrush.setColor(brushColour); -} - -void ArthurOutputDev::updateStrokeColor(GfxState *state) -{ - GfxRGB rgb; - QColor penColour = m_currentPen.color(); - state->getStrokeRGB(&rgb); - penColour.setRgbF(colToDbl(rgb.r), colToDbl(rgb.g), colToDbl(rgb.b), penColour.alphaF()); - m_currentPen.setColor(penColour); - m_painter->setPen(m_currentPen); -} - -void ArthurOutputDev::updateFillOpacity(GfxState *state) -{ - QColor brushColour= m_currentBrush.color(); - brushColour.setAlphaF(state->getFillOpacity()); - m_currentBrush.setColor(brushColour); -} - -void ArthurOutputDev::updateStrokeOpacity(GfxState *state) -{ - QColor penColour= m_currentPen.color(); - penColour.setAlphaF(state->getStrokeOpacity()); - m_currentPen.setColor(penColour); - m_painter->setPen(m_currentPen); -} - -void ArthurOutputDev::updateFont(GfxState *state) -{ -#ifdef HAVE_SPLASH - GfxFont *gfxFont; - GfxFontType fontType; - SplashOutFontFileID *id; - SplashFontFile *fontFile; - SplashFontSrc *fontsrc = NULL; - FoFiTrueType *ff; - Ref embRef; - Object refObj, strObj; - GooString *fileName; - char *tmpBuf; - int tmpBufLen; - Gushort *codeToGID; - DisplayFontParam *dfp; - double *textMat; - double m11, m12, m21, m22, fontSize; - SplashCoord mat[4]; - int n; - int faceIndex = 0; - SplashCoord matrix[6]; - - m_needFontUpdate = false; - m_font = NULL; - fileName = NULL; - tmpBuf = NULL; - - if (!(gfxFont = state->getFont())) { - goto err1; - } - fontType = gfxFont->getType(); - if (fontType == fontType3) { - goto err1; - } - - // check the font file cache - id = new SplashOutFontFileID(gfxFont->getID()); - if ((fontFile = m_fontEngine->getFontFile(id))) { - delete id; - - } else { - - // if there is an embedded font, write it to disk - if (gfxFont->getEmbeddedFontID(&embRef)) { - tmpBuf = gfxFont->readEmbFontFile(xref, &tmpBufLen); - if (! tmpBuf) - goto err2; - // if there is an external font file, use it - } else if (!(fileName = gfxFont->getExtFontFile())) { - - // look for a display font mapping or a substitute font - dfp = NULL; - if (gfxFont->getName()) { - dfp = globalParams->getDisplayFont(gfxFont); - } - if (!dfp) { - error(-1, "Couldn't find a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - switch (dfp->kind) { - case displayFontT1: - fileName = dfp->t1.fileName; - fontType = gfxFont->isCIDFont() ? fontCIDType0 : fontType1; - break; - case displayFontTT: - fileName = dfp->tt.fileName; - fontType = gfxFont->isCIDFont() ? fontCIDType2 : fontTrueType; - faceIndex = dfp->tt.faceIndex; - break; - } - } - - fontsrc = new SplashFontSrc; - if (fileName) - fontsrc->setFile(fileName, gFalse); - else - fontsrc->setBuf(tmpBuf, tmpBufLen, gTrue); - - // load the font file - switch (fontType) { - case fontType1: - if (!(fontFile = m_fontEngine->loadType1Font( - id, - fontsrc, - ((Gfx8BitFont *)gfxFont)->getEncoding()))) { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontType1C: - if (!(fontFile = m_fontEngine->loadType1CFont( - id, - fontsrc, - ((Gfx8BitFont *)gfxFont)->getEncoding()))) { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontType1COT: - if (!(fontFile = m_fontEngine->loadOpenTypeT1CFont( - id, - fontsrc, - ((Gfx8BitFont *)gfxFont)->getEncoding()))) { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontTrueType: - case fontTrueTypeOT: - if (fileName) - ff = FoFiTrueType::load(fileName->getCString()); - else - ff = FoFiTrueType::make(tmpBuf, tmpBufLen); - if (ff) { - codeToGID = ((Gfx8BitFont *)gfxFont)->getCodeToGIDMap(ff); - n = 256; - delete ff; - } else { - codeToGID = NULL; - n = 0; - } - if (!(fontFile = m_fontEngine->loadTrueTypeFont( - id, - fontsrc, - codeToGID, n))) { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontCIDType0: - case fontCIDType0C: - if (!(fontFile = m_fontEngine->loadCIDFont( - id, - fontsrc))) { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontCIDType0COT: - if (!(fontFile = m_fontEngine->loadOpenTypeCFFFont( - id, - fontsrc))) { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontCIDType2: - case fontCIDType2OT: - codeToGID = NULL; - n = 0; - if (((GfxCIDFont *)gfxFont)->getCIDToGID()) { - n = ((GfxCIDFont *)gfxFont)->getCIDToGIDLen(); - if (n) { - codeToGID = (Gushort *)gmallocn(n, sizeof(Gushort)); - memcpy(codeToGID, ((GfxCIDFont *)gfxFont)->getCIDToGID(), - n * sizeof(Gushort)); - } - } else { - if (fileName) - ff = FoFiTrueType::load(fileName->getCString()); - else - ff = FoFiTrueType::make(tmpBuf, tmpBufLen); - if (! ff) - goto err2; - codeToGID = ((GfxCIDFont *)gfxFont)->getCodeToGIDMap(ff, &n); - delete ff; - } - if (!(fontFile = m_fontEngine->loadTrueTypeFont( - id, - fontsrc, - codeToGID, n, faceIndex))) { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - default: - // this shouldn't happen - goto err2; - } - } - - // get the font matrix - textMat = state->getTextMat(); - fontSize = state->getFontSize(); - m11 = textMat[0] * fontSize * state->getHorizScaling(); - m12 = textMat[1] * fontSize * state->getHorizScaling(); - m21 = textMat[2] * fontSize; - m22 = textMat[3] * fontSize; - - { - QMatrix painterMatrix = m_painter->worldMatrix(); - matrix[0] = painterMatrix.m11(); - matrix[1] = painterMatrix.m12(); - matrix[2] = painterMatrix.m21(); - matrix[3] = painterMatrix.m22(); - matrix[4] = painterMatrix.dx(); - matrix[5] = painterMatrix.dy(); - } - - // create the scaled font - mat[0] = m11; mat[1] = -m12; - mat[2] = m21; mat[3] = -m22; - m_font = m_fontEngine->getFont(fontFile, mat, matrix); - - if (fontsrc && !fontsrc->isFile) - fontsrc->unref(); - return; - - err2: - delete id; - err1: - if (fontsrc && !fontsrc->isFile) - fontsrc->unref(); - return; -#endif -} - -static QPainterPath convertPath(GfxState *state, GfxPath *path, Qt::FillRule fillRule) -{ - GfxSubpath *subpath; - double x1, y1, x2, y2, x3, y3; - int i, j; - - QPainterPath qPath; - qPath.setFillRule(fillRule); - for (i = 0; i < path->getNumSubpaths(); ++i) { - subpath = path->getSubpath(i); - if (subpath->getNumPoints() > 0) { - state->transform(subpath->getX(0), subpath->getY(0), &x1, &y1); - qPath.moveTo(x1, y1); - j = 1; - while (j < subpath->getNumPoints()) { - if (subpath->getCurve(j)) { - state->transform(subpath->getX(j), subpath->getY(j), &x1, &y1); - state->transform(subpath->getX(j+1), subpath->getY(j+1), &x2, &y2); - state->transform(subpath->getX(j+2), subpath->getY(j+2), &x3, &y3); - qPath.cubicTo( x1, y1, x2, y2, x3, y3); - j += 3; - } else { - state->transform(subpath->getX(j), subpath->getY(j), &x1, &y1); - qPath.lineTo(x1, y1); - ++j; - } - } - if (subpath->isClosed()) { - qPath.closeSubpath(); - } - } - } - return qPath; -} - -void ArthurOutputDev::stroke(GfxState *state) -{ - m_painter->strokePath( convertPath( state, state->getPath(), Qt::OddEvenFill ), m_currentPen ); -} - -void ArthurOutputDev::fill(GfxState *state) -{ - m_painter->fillPath( convertPath( state, state->getPath(), Qt::WindingFill ), m_currentBrush ); -} - -void ArthurOutputDev::eoFill(GfxState *state) -{ - m_painter->fillPath( convertPath( state, state->getPath(), Qt::OddEvenFill ), m_currentBrush ); -} - -void ArthurOutputDev::clip(GfxState *state) -{ - m_painter->setClipPath(convertPath( state, state->getPath(), Qt::WindingFill ) ); -} - -void ArthurOutputDev::eoClip(GfxState *state) -{ - m_painter->setClipPath(convertPath( state, state->getPath(), Qt::OddEvenFill ) ); -} - -void ArthurOutputDev::drawChar(GfxState *state, double x, double y, - double dx, double dy, - double originX, double originY, - CharCode code, int nBytes, Unicode *u, int uLen) { -#ifdef HAVE_SPLASH - double x1, y1; - double x2, y2; -// SplashPath *path; - int render; - - if (m_needFontUpdate) { - updateFont(state); - } - if (!m_font) { - return; - } - - // check for invisible text -- this is used by Acrobat Capture - render = state->getRender(); - if (render == 3) { - return; - } - - x -= originX; - y -= originY; - - // fill - if (!(render & 1)) { - SplashPath * fontPath; - fontPath = m_font->getGlyphPath(code); - if (fontPath) { - QPainterPath qPath; - qPath.setFillRule(Qt::WindingFill); - for (int i = 0; i < fontPath->length; ++i) { - if (fontPath->flags[i] & splashPathFirst) { - state->transform(fontPath->pts[i].x+x, -fontPath->pts[i].y+y, &x1, &y1); - qPath.moveTo(x1,y1); - } else if (fontPath->flags[i] & splashPathCurve) { - state->transform(fontPath->pts[i].x+x, -fontPath->pts[i].y+y, &x1, &y1); - state->transform(fontPath->pts[i+1].x+x, -fontPath->pts[i+1].y+y, &x2, &y2); - qPath.quadTo(x1,y1,x2,y2); - ++i; - } - // FIXME fix this - // else if (fontPath->flags[i] & splashPathArcCW) { - // qDebug() << "Need to implement arc"; - // } - else { - state->transform(fontPath->pts[i].x+x, -fontPath->pts[i].y+y, &x1, &y1); - qPath.lineTo(x1,y1); - } - if (fontPath->flags[i] & splashPathLast) { - qPath.closeSubpath(); - } - } - GfxRGB rgb; - QColor brushColour = m_currentBrush.color(); - state->getFillRGB(&rgb); - brushColour.setRgbF(colToDbl(rgb.r), colToDbl(rgb.g), colToDbl(rgb.b), state->getFillOpacity()); - m_painter->setBrush(brushColour); - QColor penColour = m_currentPen.color(); - state->getStrokeRGB(&rgb); - penColour.setRgbF(colToDbl(rgb.r), colToDbl(rgb.g), colToDbl(rgb.b), state->getStrokeOpacity()); - m_painter->setPen(penColour); - m_painter->drawPath( qPath ); - delete fontPath; - } - } - - // stroke - if ((render & 3) == 1 || (render & 3) == 2) { - qDebug() << "no stroke"; - /* - if ((path = m_font->getGlyphPath(code))) { - path->offset((SplashCoord)x1, (SplashCoord)y1); - splash->stroke(path); - delete path; - } - */ - } - - // clip - if (render & 4) { - qDebug() << "no clip"; - /* - path = m_font->getGlyphPath(code); - path->offset((SplashCoord)x1, (SplashCoord)y1); - if (textClipPath) { - textClipPath->append(path); - delete path; - } else { - textClipPath = path; - } - */ - } -#endif -} - -GBool ArthurOutputDev::beginType3Char(GfxState *state, double x, double y, - double dx, double dy, - CharCode code, Unicode *u, int uLen) -{ - return gFalse; -} - -void ArthurOutputDev::endType3Char(GfxState *state) -{ -} - -void ArthurOutputDev::type3D0(GfxState *state, double wx, double wy) -{ -} - -void ArthurOutputDev::type3D1(GfxState *state, double wx, double wy, - double llx, double lly, double urx, double ury) -{ -} - -void ArthurOutputDev::endTextObject(GfxState *state) -{ -} - - -void ArthurOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool interpolate, GBool inlineImg) -{ - qDebug() << "drawImageMask"; -#if 0 - unsigned char *buffer; - unsigned char *dest; - cairo_surface_t *image; - cairo_pattern_t *pattern; - int x, y; - ImageStream *imgStr; - Guchar *pix; - double *ctm; - cairo_matrix_t matrix; - int invert_bit; - int row_stride; - - row_stride = (width + 3) & ~3; - buffer = (unsigned char *) malloc (height * row_stride); - if (buffer == NULL) { - error(-1, "Unable to allocate memory for image."); - return; - } - - /* TODO: Do we want to cache these? */ - imgStr = new ImageStream(str, width, 1, 1); - imgStr->reset(); - - invert_bit = invert ? 1 : 0; - - for (y = 0; y < height; y++) { - pix = imgStr->getLine(); - dest = buffer + y * row_stride; - for (x = 0; x < width; x++) { - - if (pix[x] ^ invert_bit) - *dest++ = 0; - else - *dest++ = 255; - } - } - - image = cairo_image_surface_create_for_data (buffer, CAIRO_FORMAT_A8, - width, height, row_stride); - if (image == NULL) - return; - pattern = cairo_pattern_create_for_surface (image); - if (pattern == NULL) - return; - - ctm = state->getCTM(); - LOG (printf ("drawImageMask %dx%d, matrix: %f, %f, %f, %f, %f, %f\n", - width, height, ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5])); - matrix.xx = ctm[0] / width; - matrix.xy = -ctm[2] / height; - matrix.yx = ctm[1] / width; - matrix.yy = -ctm[3] / height; - matrix.x0 = ctm[2] + ctm[4]; - matrix.y0 = ctm[3] + ctm[5]; - cairo_matrix_invert (&matrix); - cairo_pattern_set_matrix (pattern, &matrix); - - cairo_pattern_set_filter (pattern, CAIRO_FILTER_BEST); - /* FIXME: Doesn't the image mask support any colorspace? */ - cairo_set_source_rgb (cairo, fill_color.r, fill_color.g, fill_color.b); - cairo_mask (cairo, pattern); - - cairo_pattern_destroy (pattern); - cairo_surface_destroy (image); - free (buffer); - imgStr->close (); - delete imgStr; -#endif -} - -//TODO: lots more work here. -void ArthurOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, int *maskColors, GBool inlineImg) -{ - unsigned int *data; - unsigned int *line; - int x, y; - ImageStream *imgStr; - Guchar *pix; - int i; - double *ctm; - QMatrix matrix; - QImage image; - int stride; - - /* TODO: Do we want to cache these? */ - imgStr = new ImageStream(str, width, - colorMap->getNumPixelComps(), - colorMap->getBits()); - imgStr->reset(); - - image = QImage(width, height, QImage::Format_ARGB32); - data = (unsigned int *)image.bits(); - stride = image.bytesPerLine()/4; - for (y = 0; y < height; y++) { - pix = imgStr->getLine(); - line = data+y*stride; - colorMap->getRGBLine(pix, line, width); - - if (maskColors) { - for (x = 0; x < width; x++) { - for (i = 0; i < colorMap->getNumPixelComps(); ++i) { - if (pix[i] < maskColors[2*i] * 255|| - pix[i] > maskColors[2*i+1] * 255) { - *line = *line | 0xff000000; - break; - } - } - pix += colorMap->getNumPixelComps(); - line++; - } - } else { - for (x = 0; x < width; x++) { *line = *line | 0xff000000; line++; } - } - } - - ctm = state->getCTM(); - matrix.setMatrix(ctm[0] / width, ctm[1] / width, -ctm[2] / height, -ctm[3] / height, ctm[2] + ctm[4], ctm[3] + ctm[5]); - - m_painter->setMatrix(matrix, true); - m_painter->drawImage( QPoint(0,0), image ); - delete imgStr; - -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/ArthurOutputDev.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/ArthurOutputDev.h deleted file mode 100644 index ed631a053ef..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/ArthurOutputDev.h +++ /dev/null @@ -1,169 +0,0 @@ -//======================================================================== -// -// ArthurOutputDev.h -// -// Copyright 2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> -// Copyright (C) 2005 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009, 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2010 Pino Toscano <pino@kde.org> -// Copyright (C) 2011 Andreas Hartmetz <ahartmetz@gmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef ARTHUROUTPUTDEV_H -#define ARTHUROUTPUTDEV_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include "OutputDev.h" -#include "GfxState.h" - -#include <QtGui/QPainter> - -class GfxState; -class GfxPath; -class Gfx8BitFont; -struct GfxRGB; - -class SplashFont; -class SplashFontEngine; -struct SplashGlyphBitmap; - -//------------------------------------------------------------------------ -// ArthurOutputDev - Qt 4 QPainter renderer -//------------------------------------------------------------------------ - -class ArthurOutputDev: public OutputDev { -public: - /** - * Describes how fonts are distorted (aka hinted) to fit the pixel grid. - * More hinting means sharper edges and less adherence to the true letter shapes. - */ - enum FontHinting { - NoHinting = 0, ///< Font shapes are left unchanged - SlightHinting, ///< Font shapes are distorted vertically only - FullHinting ///< Font shapes are distorted horizontally and vertically - }; - - // Constructor. - ArthurOutputDev(QPainter *painter ); - - // Destructor. - virtual ~ArthurOutputDev(); - - void setFontHinting(FontHinting hinting) { m_fontHinting = hinting; } - - //----- get info about output device - - // Does this device use upside-down coordinates? - // (Upside-down means (0,0) is the top left corner of the page.) - virtual GBool upsideDown() { return gTrue; } - - // Does this device use drawChar() or drawString()? - virtual GBool useDrawChar() { return gTrue; } - - // Does this device use beginType3Char/endType3Char? Otherwise, - // text in Type 3 fonts will be drawn with drawChar/drawString. - virtual GBool interpretType3Chars() { return gTrue; } - - //----- initialization and control - - // Start a page. - virtual void startPage(int pageNum, GfxState *state); - - // End a page. - virtual void endPage(); - - //----- save/restore graphics state - virtual void saveState(GfxState *state); - virtual void restoreState(GfxState *state); - - //----- update graphics state - virtual void updateAll(GfxState *state); - virtual void updateCTM(GfxState *state, double m11, double m12, - double m21, double m22, double m31, double m32); - virtual void updateLineDash(GfxState *state); - virtual void updateFlatness(GfxState *state); - virtual void updateLineJoin(GfxState *state); - virtual void updateLineCap(GfxState *state); - virtual void updateMiterLimit(GfxState *state); - virtual void updateLineWidth(GfxState *state); - virtual void updateFillColor(GfxState *state); - virtual void updateStrokeColor(GfxState *state); - virtual void updateFillOpacity(GfxState *state); - virtual void updateStrokeOpacity(GfxState *state); - - //----- update text state - virtual void updateFont(GfxState *state); - - //----- path painting - virtual void stroke(GfxState *state); - virtual void fill(GfxState *state); - virtual void eoFill(GfxState *state); - - //----- path clipping - virtual void clip(GfxState *state); - virtual void eoClip(GfxState *state); - - //----- text drawing - // virtual void drawString(GfxState *state, GooString *s); - virtual void drawChar(GfxState *state, double x, double y, - double dx, double dy, - double originX, double originY, - CharCode code, int nBytes, Unicode *u, int uLen); - virtual GBool beginType3Char(GfxState *state, double x, double y, - double dx, double dy, - CharCode code, Unicode *u, int uLen); - virtual void endType3Char(GfxState *state); - virtual void endTextObject(GfxState *state); - - //----- image drawing - virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool interpolate, GBool inlineImg); - virtual void drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - GBool interpolate, int *maskColors, GBool inlineImg); - - //----- Type 3 font operators - virtual void type3D0(GfxState *state, double wx, double wy); - virtual void type3D1(GfxState *state, double wx, double wy, - double llx, double lly, double urx, double ury); - - //----- special access - - // Called to indicate that a new PDF document has been loaded. - void startDoc(XRef *xrefA); - - GBool isReverseVideo() { return gFalse; } - -private: - QPainter *m_painter; - FontHinting m_fontHinting; - QFont m_currentFont; - QPen m_currentPen; - QBrush m_currentBrush; - GBool m_needFontUpdate; // set when the font needs to be updated - SplashFontEngine *m_fontEngine; - SplashFont *m_font; // current font - XRef *xref; // xref table for current document -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFont.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFont.cc deleted file mode 100644 index 329ff62fc39..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFont.cc +++ /dev/null @@ -1,65 +0,0 @@ -//======================================================================== -// -// BuiltinFont.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <string.h> -#include "goo/gmem.h" -#include "FontEncodingTables.h" -#include "BuiltinFont.h" - -//------------------------------------------------------------------------ - -BuiltinFontWidths::BuiltinFontWidths(BuiltinFontWidth *widths, int sizeA) { - int i, h; - - size = sizeA; - tab = (BuiltinFontWidth **)gmallocn(size, sizeof(BuiltinFontWidth *)); - for (i = 0; i < size; ++i) { - tab[i] = NULL; - } - for (i = 0; i < sizeA; ++i) { - h = hash(widths[i].name); - widths[i].next = tab[h]; - tab[h] = &widths[i]; - } -} - -BuiltinFontWidths::~BuiltinFontWidths() { - gfree(tab); -} - -GBool BuiltinFontWidths::getWidth(char *name, Gushort *width) { - int h; - BuiltinFontWidth *p; - - h = hash(name); - for (p = tab[h]; p; p = p->next) { - if (!strcmp(p->name, name)) { - *width = p->width; - return gTrue; - } - } - return gFalse; -} - -int BuiltinFontWidths::hash(char *name) { - char *p; - unsigned int h; - - h = 0; - for (p = name; *p; ++p) { - h = 17 * h + (int)(*p & 0xff); - } - return (int)(h % size); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFont.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFont.h deleted file mode 100644 index 8652034fd63..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFont.h +++ /dev/null @@ -1,55 +0,0 @@ -//======================================================================== -// -// BuiltinFont.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef BUILTINFONT_H -#define BUILTINFONT_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" - -struct BuiltinFont; -class BuiltinFontWidths; - -//------------------------------------------------------------------------ - -struct BuiltinFont { - char *name; - char **defaultBaseEnc; - short ascent; - short descent; - short bbox[4]; - BuiltinFontWidths *widths; -}; - -//------------------------------------------------------------------------ - -struct BuiltinFontWidth { - char *name; - Gushort width; - BuiltinFontWidth *next; -}; - -class BuiltinFontWidths { -public: - - BuiltinFontWidths(BuiltinFontWidth *widths, int sizeA); - ~BuiltinFontWidths(); - GBool getWidth(char *name, Gushort *width); - -private: - - int hash(char *name); - - BuiltinFontWidth **tab; - int size; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFontTables.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFontTables.cc deleted file mode 100644 index 5115b7bcf13..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFontTables.cc +++ /dev/null @@ -1,4284 +0,0 @@ -//======================================================================== -// -// BuiltinFontTables.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include <config.h> -#include <stdlib.h> -#include "FontEncodingTables.h" -#include "BuiltinFontTables.h" - -static BuiltinFontWidth courierWidthsTab[] = { - { "Ntilde", 600, NULL }, - { "rcaron", 600, NULL }, - { "kcommaaccent", 600, NULL }, - { "Ncommaaccent", 600, NULL }, - { "Zacute", 600, NULL }, - { "comma", 600, NULL }, - { "cedilla", 600, NULL }, - { "plusminus", 600, NULL }, - { "circumflex", 600, NULL }, - { "dotaccent", 600, NULL }, - { "edotaccent", 600, NULL }, - { "asciitilde", 600, NULL }, - { "colon", 600, NULL }, - { "onehalf", 600, NULL }, - { "dollar", 600, NULL }, - { "Lcaron", 600, NULL }, - { "ntilde", 600, NULL }, - { "Aogonek", 600, NULL }, - { "ncommaaccent", 600, NULL }, - { "minus", 600, NULL }, - { "Iogonek", 600, NULL }, - { "zacute", 600, NULL }, - { "yen", 600, NULL }, - { "space", 600, NULL }, - { "Omacron", 600, NULL }, - { "questiondown", 600, NULL }, - { "emdash", 600, NULL }, - { "Agrave", 600, NULL }, - { "three", 600, NULL }, - { "numbersign", 600, NULL }, - { "lcaron", 600, NULL }, - { "A", 600, NULL }, - { "B", 600, NULL }, - { "C", 600, NULL }, - { "aogonek", 600, NULL }, - { "D", 600, NULL }, - { "E", 600, NULL }, - { "onequarter", 600, NULL }, - { "F", 600, NULL }, - { "G", 600, NULL }, - { "H", 600, NULL }, - { "I", 600, NULL }, - { "J", 600, NULL }, - { "K", 600, NULL }, - { "iogonek", 600, NULL }, - { "L", 600, NULL }, - { "backslash", 600, NULL }, - { "periodcentered", 600, NULL }, - { "M", 600, NULL }, - { "N", 600, NULL }, - { "omacron", 600, NULL }, - { "Tcommaaccent", 600, NULL }, - { "O", 600, NULL }, - { "P", 600, NULL }, - { "Q", 600, NULL }, - { "Uhungarumlaut", 600, NULL }, - { "R", 600, NULL }, - { "Aacute", 600, NULL }, - { "caron", 600, NULL }, - { "S", 600, NULL }, - { "T", 600, NULL }, - { "U", 600, NULL }, - { "agrave", 600, NULL }, - { "V", 600, NULL }, - { "W", 600, NULL }, - { "equal", 600, NULL }, - { "question", 600, NULL }, - { "X", 600, NULL }, - { "Y", 600, NULL }, - { "Z", 600, NULL }, - { "four", 600, NULL }, - { "a", 600, NULL }, - { "Gcommaaccent", 600, NULL }, - { "b", 600, NULL }, - { "c", 600, NULL }, - { "d", 600, NULL }, - { "e", 600, NULL }, - { "f", 600, NULL }, - { "g", 600, NULL }, - { "bullet", 600, NULL }, - { "h", 600, NULL }, - { "i", 600, NULL }, - { "Oslash", 600, NULL }, - { "dagger", 600, NULL }, - { "j", 600, NULL }, - { "k", 600, NULL }, - { "l", 600, NULL }, - { "m", 600, NULL }, - { "n", 600, NULL }, - { "tcommaaccent", 600, NULL }, - { "o", 600, NULL }, - { "ordfeminine", 600, NULL }, - { "ring", 600, NULL }, - { "p", 600, NULL }, - { "q", 600, NULL }, - { "uhungarumlaut", 600, NULL }, - { "r", 600, NULL }, - { "twosuperior", 600, NULL }, - { "aacute", 600, NULL }, - { "s", 600, NULL }, - { "OE", 600, NULL }, - { "t", 600, NULL }, - { "divide", 600, NULL }, - { "u", 600, NULL }, - { "Ccaron", 600, NULL }, - { "v", 600, NULL }, - { "w", 600, NULL }, - { "x", 600, NULL }, - { "y", 600, NULL }, - { "z", 600, NULL }, - { "Gbreve", 600, NULL }, - { "commaaccent", 600, NULL }, - { "hungarumlaut", 600, NULL }, - { "Idotaccent", 600, NULL }, - { "Nacute", 600, NULL }, - { "quotedbl", 600, NULL }, - { "gcommaaccent", 600, NULL }, - { "mu", 600, NULL }, - { "greaterequal", 600, NULL }, - { "Scaron", 600, NULL }, - { "Lslash", 600, NULL }, - { "semicolon", 600, NULL }, - { "oslash", 600, NULL }, - { "lessequal", 600, NULL }, - { "lozenge", 600, NULL }, - { "parenright", 600, NULL }, - { "ccaron", 600, NULL }, - { "Ecircumflex", 600, NULL }, - { "gbreve", 600, NULL }, - { "trademark", 600, NULL }, - { "daggerdbl", 600, NULL }, - { "nacute", 600, NULL }, - { "macron", 600, NULL }, - { "Otilde", 600, NULL }, - { "Emacron", 600, NULL }, - { "ellipsis", 600, NULL }, - { "scaron", 600, NULL }, - { "AE", 600, NULL }, - { "Ucircumflex", 600, NULL }, - { "lslash", 600, NULL }, - { "quotedblleft", 600, NULL }, - { "hyphen", 600, NULL }, - { "guilsinglright", 600, NULL }, - { "quotesingle", 600, NULL }, - { "eight", 600, NULL }, - { "exclamdown", 600, NULL }, - { "endash", 600, NULL }, - { "oe", 600, NULL }, - { "Abreve", 600, NULL }, - { "Umacron", 600, NULL }, - { "ecircumflex", 600, NULL }, - { "Adieresis", 600, NULL }, - { "copyright", 600, NULL }, - { "Egrave", 600, NULL }, - { "slash", 600, NULL }, - { "Edieresis", 600, NULL }, - { "otilde", 600, NULL }, - { "Idieresis", 600, NULL }, - { "parenleft", 600, NULL }, - { "one", 600, NULL }, - { "emacron", 600, NULL }, - { "Odieresis", 600, NULL }, - { "ucircumflex", 600, NULL }, - { "bracketleft", 600, NULL }, - { "Ugrave", 600, NULL }, - { "quoteright", 600, NULL }, - { "Udieresis", 600, NULL }, - { "perthousand", 600, NULL }, - { "Ydieresis", 600, NULL }, - { "umacron", 600, NULL }, - { "abreve", 600, NULL }, - { "Eacute", 600, NULL }, - { "adieresis", 600, NULL }, - { "egrave", 600, NULL }, - { "edieresis", 600, NULL }, - { "idieresis", 600, NULL }, - { "Eth", 600, NULL }, - { "ae", 600, NULL }, - { "asterisk", 600, NULL }, - { "odieresis", 600, NULL }, - { "Uacute", 600, NULL }, - { "ugrave", 600, NULL }, - { "five", 600, NULL }, - { "nine", 600, NULL }, - { "udieresis", 600, NULL }, - { "Zcaron", 600, NULL }, - { "Scommaaccent", 600, NULL }, - { "threequarters", 600, NULL }, - { "guillemotright", 600, NULL }, - { "Ccedilla", 600, NULL }, - { "ydieresis", 600, NULL }, - { "tilde", 600, NULL }, - { "at", 600, NULL }, - { "eacute", 600, NULL }, - { "underscore", 600, NULL }, - { "Euro", 600, NULL }, - { "Dcroat", 600, NULL }, - { "zero", 600, NULL }, - { "multiply", 600, NULL }, - { "eth", 600, NULL }, - { "Scedilla", 600, NULL }, - { "Racute", 600, NULL }, - { "Ograve", 600, NULL }, - { "partialdiff", 600, NULL }, - { "uacute", 600, NULL }, - { "braceleft", 600, NULL }, - { "Thorn", 600, NULL }, - { "zcaron", 600, NULL }, - { "scommaaccent", 600, NULL }, - { "ccedilla", 600, NULL }, - { "Dcaron", 600, NULL }, - { "dcroat", 600, NULL }, - { "scedilla", 600, NULL }, - { "Oacute", 600, NULL }, - { "Ocircumflex", 600, NULL }, - { "ogonek", 600, NULL }, - { "ograve", 600, NULL }, - { "racute", 600, NULL }, - { "Tcaron", 600, NULL }, - { "Eogonek", 600, NULL }, - { "thorn", 600, NULL }, - { "degree", 600, NULL }, - { "registered", 600, NULL }, - { "radical", 600, NULL }, - { "Aring", 600, NULL }, - { "percent", 600, NULL }, - { "six", 600, NULL }, - { "paragraph", 600, NULL }, - { "dcaron", 600, NULL }, - { "Uogonek", 600, NULL }, - { "two", 600, NULL }, - { "summation", 600, NULL }, - { "Igrave", 600, NULL }, - { "Lacute", 600, NULL }, - { "ocircumflex", 600, NULL }, - { "oacute", 600, NULL }, - { "Uring", 600, NULL }, - { "Lcommaaccent", 600, NULL }, - { "tcaron", 600, NULL }, - { "eogonek", 600, NULL }, - { "Delta", 600, NULL }, - { "Ohungarumlaut", 600, NULL }, - { "asciicircum", 600, NULL }, - { "aring", 600, NULL }, - { "grave", 600, NULL }, - { "uogonek", 600, NULL }, - { "bracketright", 600, NULL }, - { "ampersand", 600, NULL }, - { "Iacute", 600, NULL }, - { "lacute", 600, NULL }, - { "igrave", 600, NULL }, - { "Ncaron", 600, NULL }, - { "plus", 600, NULL }, - { "uring", 600, NULL }, - { "quotesinglbase", 600, NULL }, - { "lcommaaccent", 600, NULL }, - { "Yacute", 600, NULL }, - { "ohungarumlaut", 600, NULL }, - { "threesuperior", 600, NULL }, - { "acute", 600, NULL }, - { "section", 600, NULL }, - { "dieresis", 600, NULL }, - { "quotedblbase", 600, NULL }, - { "iacute", 600, NULL }, - { "ncaron", 600, NULL }, - { "florin", 600, NULL }, - { "yacute", 600, NULL }, - { "Rcommaaccent", 600, NULL }, - { "fi", 600, NULL }, - { "fl", 600, NULL }, - { "Acircumflex", 600, NULL }, - { "Cacute", 600, NULL }, - { "Icircumflex", 600, NULL }, - { "guillemotleft", 600, NULL }, - { "germandbls", 600, NULL }, - { "seven", 600, NULL }, - { "Amacron", 600, NULL }, - { "Sacute", 600, NULL }, - { "ordmasculine", 600, NULL }, - { "dotlessi", 600, NULL }, - { "sterling", 600, NULL }, - { "notequal", 600, NULL }, - { "Imacron", 600, NULL }, - { "rcommaaccent", 600, NULL }, - { "Zdotaccent", 600, NULL }, - { "acircumflex", 600, NULL }, - { "cacute", 600, NULL }, - { "Ecaron", 600, NULL }, - { "braceright", 600, NULL }, - { "icircumflex", 600, NULL }, - { "quotedblright", 600, NULL }, - { "amacron", 600, NULL }, - { "sacute", 600, NULL }, - { "imacron", 600, NULL }, - { "cent", 600, NULL }, - { "currency", 600, NULL }, - { "logicalnot", 600, NULL }, - { "zdotaccent", 600, NULL }, - { "Atilde", 600, NULL }, - { "breve", 600, NULL }, - { "bar", 600, NULL }, - { "fraction", 600, NULL }, - { "less", 600, NULL }, - { "ecaron", 600, NULL }, - { "guilsinglleft", 600, NULL }, - { "exclam", 600, NULL }, - { "period", 600, NULL }, - { "Rcaron", 600, NULL }, - { "Kcommaaccent", 600, NULL }, - { "greater", 600, NULL }, - { "atilde", 600, NULL }, - { "brokenbar", 600, NULL }, - { "quoteleft", 600, NULL }, - { "Edotaccent", 600, NULL }, - { "onesuperior", 600, NULL } -}; - -static BuiltinFontWidth courierBoldWidthsTab[] = { - { "Ntilde", 600, NULL }, - { "rcaron", 600, NULL }, - { "kcommaaccent", 600, NULL }, - { "Ncommaaccent", 600, NULL }, - { "Zacute", 600, NULL }, - { "comma", 600, NULL }, - { "cedilla", 600, NULL }, - { "plusminus", 600, NULL }, - { "circumflex", 600, NULL }, - { "dotaccent", 600, NULL }, - { "edotaccent", 600, NULL }, - { "asciitilde", 600, NULL }, - { "colon", 600, NULL }, - { "onehalf", 600, NULL }, - { "dollar", 600, NULL }, - { "Lcaron", 600, NULL }, - { "ntilde", 600, NULL }, - { "Aogonek", 600, NULL }, - { "ncommaaccent", 600, NULL }, - { "minus", 600, NULL }, - { "Iogonek", 600, NULL }, - { "zacute", 600, NULL }, - { "yen", 600, NULL }, - { "space", 600, NULL }, - { "Omacron", 600, NULL }, - { "questiondown", 600, NULL }, - { "emdash", 600, NULL }, - { "Agrave", 600, NULL }, - { "three", 600, NULL }, - { "numbersign", 600, NULL }, - { "lcaron", 600, NULL }, - { "A", 600, NULL }, - { "B", 600, NULL }, - { "C", 600, NULL }, - { "aogonek", 600, NULL }, - { "D", 600, NULL }, - { "E", 600, NULL }, - { "onequarter", 600, NULL }, - { "F", 600, NULL }, - { "G", 600, NULL }, - { "H", 600, NULL }, - { "I", 600, NULL }, - { "J", 600, NULL }, - { "K", 600, NULL }, - { "iogonek", 600, NULL }, - { "backslash", 600, NULL }, - { "L", 600, NULL }, - { "periodcentered", 600, NULL }, - { "M", 600, NULL }, - { "N", 600, NULL }, - { "omacron", 600, NULL }, - { "Tcommaaccent", 600, NULL }, - { "O", 600, NULL }, - { "P", 600, NULL }, - { "Q", 600, NULL }, - { "Uhungarumlaut", 600, NULL }, - { "R", 600, NULL }, - { "Aacute", 600, NULL }, - { "caron", 600, NULL }, - { "S", 600, NULL }, - { "T", 600, NULL }, - { "U", 600, NULL }, - { "agrave", 600, NULL }, - { "V", 600, NULL }, - { "W", 600, NULL }, - { "X", 600, NULL }, - { "question", 600, NULL }, - { "equal", 600, NULL }, - { "Y", 600, NULL }, - { "Z", 600, NULL }, - { "four", 600, NULL }, - { "a", 600, NULL }, - { "Gcommaaccent", 600, NULL }, - { "b", 600, NULL }, - { "c", 600, NULL }, - { "d", 600, NULL }, - { "e", 600, NULL }, - { "f", 600, NULL }, - { "g", 600, NULL }, - { "bullet", 600, NULL }, - { "h", 600, NULL }, - { "i", 600, NULL }, - { "Oslash", 600, NULL }, - { "dagger", 600, NULL }, - { "j", 600, NULL }, - { "k", 600, NULL }, - { "l", 600, NULL }, - { "m", 600, NULL }, - { "n", 600, NULL }, - { "tcommaaccent", 600, NULL }, - { "o", 600, NULL }, - { "ordfeminine", 600, NULL }, - { "ring", 600, NULL }, - { "p", 600, NULL }, - { "q", 600, NULL }, - { "uhungarumlaut", 600, NULL }, - { "r", 600, NULL }, - { "twosuperior", 600, NULL }, - { "aacute", 600, NULL }, - { "s", 600, NULL }, - { "OE", 600, NULL }, - { "t", 600, NULL }, - { "divide", 600, NULL }, - { "u", 600, NULL }, - { "Ccaron", 600, NULL }, - { "v", 600, NULL }, - { "w", 600, NULL }, - { "x", 600, NULL }, - { "y", 600, NULL }, - { "z", 600, NULL }, - { "Gbreve", 600, NULL }, - { "commaaccent", 600, NULL }, - { "hungarumlaut", 600, NULL }, - { "Idotaccent", 600, NULL }, - { "Nacute", 600, NULL }, - { "quotedbl", 600, NULL }, - { "gcommaaccent", 600, NULL }, - { "mu", 600, NULL }, - { "greaterequal", 600, NULL }, - { "Scaron", 600, NULL }, - { "Lslash", 600, NULL }, - { "semicolon", 600, NULL }, - { "oslash", 600, NULL }, - { "lessequal", 600, NULL }, - { "lozenge", 600, NULL }, - { "parenright", 600, NULL }, - { "ccaron", 600, NULL }, - { "Ecircumflex", 600, NULL }, - { "gbreve", 600, NULL }, - { "trademark", 600, NULL }, - { "daggerdbl", 600, NULL }, - { "nacute", 600, NULL }, - { "macron", 600, NULL }, - { "Otilde", 600, NULL }, - { "Emacron", 600, NULL }, - { "ellipsis", 600, NULL }, - { "scaron", 600, NULL }, - { "AE", 600, NULL }, - { "Ucircumflex", 600, NULL }, - { "lslash", 600, NULL }, - { "quotedblleft", 600, NULL }, - { "guilsinglright", 600, NULL }, - { "hyphen", 600, NULL }, - { "quotesingle", 600, NULL }, - { "eight", 600, NULL }, - { "exclamdown", 600, NULL }, - { "endash", 600, NULL }, - { "oe", 600, NULL }, - { "Abreve", 600, NULL }, - { "Umacron", 600, NULL }, - { "ecircumflex", 600, NULL }, - { "Adieresis", 600, NULL }, - { "copyright", 600, NULL }, - { "Egrave", 600, NULL }, - { "slash", 600, NULL }, - { "Edieresis", 600, NULL }, - { "otilde", 600, NULL }, - { "Idieresis", 600, NULL }, - { "parenleft", 600, NULL }, - { "one", 600, NULL }, - { "emacron", 600, NULL }, - { "Odieresis", 600, NULL }, - { "ucircumflex", 600, NULL }, - { "bracketleft", 600, NULL }, - { "Ugrave", 600, NULL }, - { "quoteright", 600, NULL }, - { "Udieresis", 600, NULL }, - { "perthousand", 600, NULL }, - { "Ydieresis", 600, NULL }, - { "umacron", 600, NULL }, - { "abreve", 600, NULL }, - { "Eacute", 600, NULL }, - { "adieresis", 600, NULL }, - { "egrave", 600, NULL }, - { "edieresis", 600, NULL }, - { "idieresis", 600, NULL }, - { "Eth", 600, NULL }, - { "ae", 600, NULL }, - { "asterisk", 600, NULL }, - { "odieresis", 600, NULL }, - { "Uacute", 600, NULL }, - { "ugrave", 600, NULL }, - { "nine", 600, NULL }, - { "five", 600, NULL }, - { "udieresis", 600, NULL }, - { "Zcaron", 600, NULL }, - { "Scommaaccent", 600, NULL }, - { "threequarters", 600, NULL }, - { "guillemotright", 600, NULL }, - { "Ccedilla", 600, NULL }, - { "ydieresis", 600, NULL }, - { "tilde", 600, NULL }, - { "at", 600, NULL }, - { "eacute", 600, NULL }, - { "underscore", 600, NULL }, - { "Euro", 600, NULL }, - { "Dcroat", 600, NULL }, - { "multiply", 600, NULL }, - { "zero", 600, NULL }, - { "eth", 600, NULL }, - { "Scedilla", 600, NULL }, - { "Ograve", 600, NULL }, - { "Racute", 600, NULL }, - { "partialdiff", 600, NULL }, - { "uacute", 600, NULL }, - { "braceleft", 600, NULL }, - { "Thorn", 600, NULL }, - { "zcaron", 600, NULL }, - { "scommaaccent", 600, NULL }, - { "ccedilla", 600, NULL }, - { "Dcaron", 600, NULL }, - { "dcroat", 600, NULL }, - { "Ocircumflex", 600, NULL }, - { "Oacute", 600, NULL }, - { "scedilla", 600, NULL }, - { "ogonek", 600, NULL }, - { "ograve", 600, NULL }, - { "racute", 600, NULL }, - { "Tcaron", 600, NULL }, - { "Eogonek", 600, NULL }, - { "thorn", 600, NULL }, - { "degree", 600, NULL }, - { "registered", 600, NULL }, - { "radical", 600, NULL }, - { "Aring", 600, NULL }, - { "percent", 600, NULL }, - { "six", 600, NULL }, - { "paragraph", 600, NULL }, - { "dcaron", 600, NULL }, - { "Uogonek", 600, NULL }, - { "two", 600, NULL }, - { "summation", 600, NULL }, - { "Igrave", 600, NULL }, - { "Lacute", 600, NULL }, - { "ocircumflex", 600, NULL }, - { "oacute", 600, NULL }, - { "Uring", 600, NULL }, - { "Lcommaaccent", 600, NULL }, - { "tcaron", 600, NULL }, - { "eogonek", 600, NULL }, - { "Delta", 600, NULL }, - { "Ohungarumlaut", 600, NULL }, - { "asciicircum", 600, NULL }, - { "aring", 600, NULL }, - { "grave", 600, NULL }, - { "uogonek", 600, NULL }, - { "bracketright", 600, NULL }, - { "Iacute", 600, NULL }, - { "ampersand", 600, NULL }, - { "igrave", 600, NULL }, - { "lacute", 600, NULL }, - { "Ncaron", 600, NULL }, - { "plus", 600, NULL }, - { "uring", 600, NULL }, - { "quotesinglbase", 600, NULL }, - { "lcommaaccent", 600, NULL }, - { "Yacute", 600, NULL }, - { "ohungarumlaut", 600, NULL }, - { "threesuperior", 600, NULL }, - { "acute", 600, NULL }, - { "section", 600, NULL }, - { "dieresis", 600, NULL }, - { "iacute", 600, NULL }, - { "quotedblbase", 600, NULL }, - { "ncaron", 600, NULL }, - { "florin", 600, NULL }, - { "yacute", 600, NULL }, - { "Rcommaaccent", 600, NULL }, - { "fi", 600, NULL }, - { "fl", 600, NULL }, - { "Acircumflex", 600, NULL }, - { "Cacute", 600, NULL }, - { "Icircumflex", 600, NULL }, - { "guillemotleft", 600, NULL }, - { "germandbls", 600, NULL }, - { "Amacron", 600, NULL }, - { "seven", 600, NULL }, - { "Sacute", 600, NULL }, - { "ordmasculine", 600, NULL }, - { "dotlessi", 600, NULL }, - { "sterling", 600, NULL }, - { "notequal", 600, NULL }, - { "Imacron", 600, NULL }, - { "rcommaaccent", 600, NULL }, - { "Zdotaccent", 600, NULL }, - { "acircumflex", 600, NULL }, - { "cacute", 600, NULL }, - { "Ecaron", 600, NULL }, - { "icircumflex", 600, NULL }, - { "braceright", 600, NULL }, - { "quotedblright", 600, NULL }, - { "amacron", 600, NULL }, - { "sacute", 600, NULL }, - { "imacron", 600, NULL }, - { "cent", 600, NULL }, - { "currency", 600, NULL }, - { "logicalnot", 600, NULL }, - { "zdotaccent", 600, NULL }, - { "Atilde", 600, NULL }, - { "breve", 600, NULL }, - { "bar", 600, NULL }, - { "fraction", 600, NULL }, - { "less", 600, NULL }, - { "ecaron", 600, NULL }, - { "guilsinglleft", 600, NULL }, - { "exclam", 600, NULL }, - { "period", 600, NULL }, - { "Rcaron", 600, NULL }, - { "Kcommaaccent", 600, NULL }, - { "greater", 600, NULL }, - { "atilde", 600, NULL }, - { "brokenbar", 600, NULL }, - { "quoteleft", 600, NULL }, - { "Edotaccent", 600, NULL }, - { "onesuperior", 600, NULL } -}; - -static BuiltinFontWidth courierBoldObliqueWidthsTab[] = { - { "Ntilde", 600, NULL }, - { "rcaron", 600, NULL }, - { "kcommaaccent", 600, NULL }, - { "Ncommaaccent", 600, NULL }, - { "Zacute", 600, NULL }, - { "comma", 600, NULL }, - { "cedilla", 600, NULL }, - { "plusminus", 600, NULL }, - { "circumflex", 600, NULL }, - { "dotaccent", 600, NULL }, - { "edotaccent", 600, NULL }, - { "asciitilde", 600, NULL }, - { "colon", 600, NULL }, - { "onehalf", 600, NULL }, - { "dollar", 600, NULL }, - { "Lcaron", 600, NULL }, - { "ntilde", 600, NULL }, - { "Aogonek", 600, NULL }, - { "ncommaaccent", 600, NULL }, - { "minus", 600, NULL }, - { "Iogonek", 600, NULL }, - { "zacute", 600, NULL }, - { "yen", 600, NULL }, - { "space", 600, NULL }, - { "Omacron", 600, NULL }, - { "questiondown", 600, NULL }, - { "emdash", 600, NULL }, - { "Agrave", 600, NULL }, - { "three", 600, NULL }, - { "numbersign", 600, NULL }, - { "lcaron", 600, NULL }, - { "A", 600, NULL }, - { "B", 600, NULL }, - { "C", 600, NULL }, - { "aogonek", 600, NULL }, - { "D", 600, NULL }, - { "E", 600, NULL }, - { "onequarter", 600, NULL }, - { "F", 600, NULL }, - { "G", 600, NULL }, - { "H", 600, NULL }, - { "I", 600, NULL }, - { "J", 600, NULL }, - { "K", 600, NULL }, - { "iogonek", 600, NULL }, - { "backslash", 600, NULL }, - { "L", 600, NULL }, - { "periodcentered", 600, NULL }, - { "M", 600, NULL }, - { "N", 600, NULL }, - { "omacron", 600, NULL }, - { "Tcommaaccent", 600, NULL }, - { "O", 600, NULL }, - { "P", 600, NULL }, - { "Q", 600, NULL }, - { "Uhungarumlaut", 600, NULL }, - { "R", 600, NULL }, - { "Aacute", 600, NULL }, - { "caron", 600, NULL }, - { "S", 600, NULL }, - { "T", 600, NULL }, - { "U", 600, NULL }, - { "agrave", 600, NULL }, - { "V", 600, NULL }, - { "W", 600, NULL }, - { "X", 600, NULL }, - { "question", 600, NULL }, - { "equal", 600, NULL }, - { "Y", 600, NULL }, - { "Z", 600, NULL }, - { "four", 600, NULL }, - { "a", 600, NULL }, - { "Gcommaaccent", 600, NULL }, - { "b", 600, NULL }, - { "c", 600, NULL }, - { "d", 600, NULL }, - { "e", 600, NULL }, - { "f", 600, NULL }, - { "g", 600, NULL }, - { "bullet", 600, NULL }, - { "h", 600, NULL }, - { "i", 600, NULL }, - { "Oslash", 600, NULL }, - { "dagger", 600, NULL }, - { "j", 600, NULL }, - { "k", 600, NULL }, - { "l", 600, NULL }, - { "m", 600, NULL }, - { "n", 600, NULL }, - { "tcommaaccent", 600, NULL }, - { "o", 600, NULL }, - { "ordfeminine", 600, NULL }, - { "ring", 600, NULL }, - { "p", 600, NULL }, - { "q", 600, NULL }, - { "uhungarumlaut", 600, NULL }, - { "r", 600, NULL }, - { "twosuperior", 600, NULL }, - { "aacute", 600, NULL }, - { "s", 600, NULL }, - { "OE", 600, NULL }, - { "t", 600, NULL }, - { "divide", 600, NULL }, - { "u", 600, NULL }, - { "Ccaron", 600, NULL }, - { "v", 600, NULL }, - { "w", 600, NULL }, - { "x", 600, NULL }, - { "y", 600, NULL }, - { "z", 600, NULL }, - { "Gbreve", 600, NULL }, - { "commaaccent", 600, NULL }, - { "hungarumlaut", 600, NULL }, - { "Idotaccent", 600, NULL }, - { "Nacute", 600, NULL }, - { "quotedbl", 600, NULL }, - { "gcommaaccent", 600, NULL }, - { "mu", 600, NULL }, - { "greaterequal", 600, NULL }, - { "Scaron", 600, NULL }, - { "Lslash", 600, NULL }, - { "semicolon", 600, NULL }, - { "oslash", 600, NULL }, - { "lessequal", 600, NULL }, - { "lozenge", 600, NULL }, - { "parenright", 600, NULL }, - { "ccaron", 600, NULL }, - { "Ecircumflex", 600, NULL }, - { "gbreve", 600, NULL }, - { "trademark", 600, NULL }, - { "daggerdbl", 600, NULL }, - { "nacute", 600, NULL }, - { "macron", 600, NULL }, - { "Otilde", 600, NULL }, - { "Emacron", 600, NULL }, - { "ellipsis", 600, NULL }, - { "scaron", 600, NULL }, - { "AE", 600, NULL }, - { "Ucircumflex", 600, NULL }, - { "lslash", 600, NULL }, - { "quotedblleft", 600, NULL }, - { "guilsinglright", 600, NULL }, - { "hyphen", 600, NULL }, - { "quotesingle", 600, NULL }, - { "eight", 600, NULL }, - { "exclamdown", 600, NULL }, - { "endash", 600, NULL }, - { "oe", 600, NULL }, - { "Abreve", 600, NULL }, - { "Umacron", 600, NULL }, - { "ecircumflex", 600, NULL }, - { "Adieresis", 600, NULL }, - { "copyright", 600, NULL }, - { "Egrave", 600, NULL }, - { "slash", 600, NULL }, - { "Edieresis", 600, NULL }, - { "otilde", 600, NULL }, - { "Idieresis", 600, NULL }, - { "parenleft", 600, NULL }, - { "one", 600, NULL }, - { "emacron", 600, NULL }, - { "Odieresis", 600, NULL }, - { "ucircumflex", 600, NULL }, - { "bracketleft", 600, NULL }, - { "Ugrave", 600, NULL }, - { "quoteright", 600, NULL }, - { "Udieresis", 600, NULL }, - { "perthousand", 600, NULL }, - { "Ydieresis", 600, NULL }, - { "umacron", 600, NULL }, - { "abreve", 600, NULL }, - { "Eacute", 600, NULL }, - { "adieresis", 600, NULL }, - { "egrave", 600, NULL }, - { "edieresis", 600, NULL }, - { "idieresis", 600, NULL }, - { "Eth", 600, NULL }, - { "ae", 600, NULL }, - { "asterisk", 600, NULL }, - { "odieresis", 600, NULL }, - { "Uacute", 600, NULL }, - { "ugrave", 600, NULL }, - { "nine", 600, NULL }, - { "five", 600, NULL }, - { "udieresis", 600, NULL }, - { "Zcaron", 600, NULL }, - { "Scommaaccent", 600, NULL }, - { "threequarters", 600, NULL }, - { "guillemotright", 600, NULL }, - { "Ccedilla", 600, NULL }, - { "ydieresis", 600, NULL }, - { "tilde", 600, NULL }, - { "at", 600, NULL }, - { "eacute", 600, NULL }, - { "underscore", 600, NULL }, - { "Euro", 600, NULL }, - { "Dcroat", 600, NULL }, - { "multiply", 600, NULL }, - { "zero", 600, NULL }, - { "eth", 600, NULL }, - { "Scedilla", 600, NULL }, - { "Ograve", 600, NULL }, - { "Racute", 600, NULL }, - { "partialdiff", 600, NULL }, - { "uacute", 600, NULL }, - { "braceleft", 600, NULL }, - { "Thorn", 600, NULL }, - { "zcaron", 600, NULL }, - { "scommaaccent", 600, NULL }, - { "ccedilla", 600, NULL }, - { "Dcaron", 600, NULL }, - { "dcroat", 600, NULL }, - { "Ocircumflex", 600, NULL }, - { "Oacute", 600, NULL }, - { "scedilla", 600, NULL }, - { "ogonek", 600, NULL }, - { "ograve", 600, NULL }, - { "racute", 600, NULL }, - { "Tcaron", 600, NULL }, - { "Eogonek", 600, NULL }, - { "thorn", 600, NULL }, - { "degree", 600, NULL }, - { "registered", 600, NULL }, - { "radical", 600, NULL }, - { "Aring", 600, NULL }, - { "percent", 600, NULL }, - { "six", 600, NULL }, - { "paragraph", 600, NULL }, - { "dcaron", 600, NULL }, - { "Uogonek", 600, NULL }, - { "two", 600, NULL }, - { "summation", 600, NULL }, - { "Igrave", 600, NULL }, - { "Lacute", 600, NULL }, - { "ocircumflex", 600, NULL }, - { "oacute", 600, NULL }, - { "Uring", 600, NULL }, - { "Lcommaaccent", 600, NULL }, - { "tcaron", 600, NULL }, - { "eogonek", 600, NULL }, - { "Delta", 600, NULL }, - { "Ohungarumlaut", 600, NULL }, - { "asciicircum", 600, NULL }, - { "aring", 600, NULL }, - { "grave", 600, NULL }, - { "uogonek", 600, NULL }, - { "bracketright", 600, NULL }, - { "Iacute", 600, NULL }, - { "ampersand", 600, NULL }, - { "igrave", 600, NULL }, - { "lacute", 600, NULL }, - { "Ncaron", 600, NULL }, - { "plus", 600, NULL }, - { "uring", 600, NULL }, - { "quotesinglbase", 600, NULL }, - { "lcommaaccent", 600, NULL }, - { "Yacute", 600, NULL }, - { "ohungarumlaut", 600, NULL }, - { "threesuperior", 600, NULL }, - { "acute", 600, NULL }, - { "section", 600, NULL }, - { "dieresis", 600, NULL }, - { "iacute", 600, NULL }, - { "quotedblbase", 600, NULL }, - { "ncaron", 600, NULL }, - { "florin", 600, NULL }, - { "yacute", 600, NULL }, - { "Rcommaaccent", 600, NULL }, - { "fi", 600, NULL }, - { "fl", 600, NULL }, - { "Acircumflex", 600, NULL }, - { "Cacute", 600, NULL }, - { "Icircumflex", 600, NULL }, - { "guillemotleft", 600, NULL }, - { "germandbls", 600, NULL }, - { "Amacron", 600, NULL }, - { "seven", 600, NULL }, - { "Sacute", 600, NULL }, - { "ordmasculine", 600, NULL }, - { "dotlessi", 600, NULL }, - { "sterling", 600, NULL }, - { "notequal", 600, NULL }, - { "Imacron", 600, NULL }, - { "rcommaaccent", 600, NULL }, - { "Zdotaccent", 600, NULL }, - { "acircumflex", 600, NULL }, - { "cacute", 600, NULL }, - { "Ecaron", 600, NULL }, - { "icircumflex", 600, NULL }, - { "braceright", 600, NULL }, - { "quotedblright", 600, NULL }, - { "amacron", 600, NULL }, - { "sacute", 600, NULL }, - { "imacron", 600, NULL }, - { "cent", 600, NULL }, - { "currency", 600, NULL }, - { "logicalnot", 600, NULL }, - { "zdotaccent", 600, NULL }, - { "Atilde", 600, NULL }, - { "breve", 600, NULL }, - { "bar", 600, NULL }, - { "fraction", 600, NULL }, - { "less", 600, NULL }, - { "ecaron", 600, NULL }, - { "guilsinglleft", 600, NULL }, - { "exclam", 600, NULL }, - { "period", 600, NULL }, - { "Rcaron", 600, NULL }, - { "Kcommaaccent", 600, NULL }, - { "greater", 600, NULL }, - { "atilde", 600, NULL }, - { "brokenbar", 600, NULL }, - { "quoteleft", 600, NULL }, - { "Edotaccent", 600, NULL }, - { "onesuperior", 600, NULL } -}; - -static BuiltinFontWidth courierObliqueWidthsTab[] = { - { "Ntilde", 600, NULL }, - { "rcaron", 600, NULL }, - { "kcommaaccent", 600, NULL }, - { "Ncommaaccent", 600, NULL }, - { "Zacute", 600, NULL }, - { "comma", 600, NULL }, - { "cedilla", 600, NULL }, - { "plusminus", 600, NULL }, - { "circumflex", 600, NULL }, - { "dotaccent", 600, NULL }, - { "edotaccent", 600, NULL }, - { "asciitilde", 600, NULL }, - { "colon", 600, NULL }, - { "onehalf", 600, NULL }, - { "dollar", 600, NULL }, - { "Lcaron", 600, NULL }, - { "ntilde", 600, NULL }, - { "Aogonek", 600, NULL }, - { "ncommaaccent", 600, NULL }, - { "minus", 600, NULL }, - { "Iogonek", 600, NULL }, - { "zacute", 600, NULL }, - { "yen", 600, NULL }, - { "space", 600, NULL }, - { "Omacron", 600, NULL }, - { "questiondown", 600, NULL }, - { "emdash", 600, NULL }, - { "Agrave", 600, NULL }, - { "three", 600, NULL }, - { "numbersign", 600, NULL }, - { "lcaron", 600, NULL }, - { "A", 600, NULL }, - { "B", 600, NULL }, - { "C", 600, NULL }, - { "aogonek", 600, NULL }, - { "D", 600, NULL }, - { "E", 600, NULL }, - { "onequarter", 600, NULL }, - { "F", 600, NULL }, - { "G", 600, NULL }, - { "H", 600, NULL }, - { "I", 600, NULL }, - { "J", 600, NULL }, - { "K", 600, NULL }, - { "iogonek", 600, NULL }, - { "backslash", 600, NULL }, - { "L", 600, NULL }, - { "periodcentered", 600, NULL }, - { "M", 600, NULL }, - { "N", 600, NULL }, - { "omacron", 600, NULL }, - { "Tcommaaccent", 600, NULL }, - { "O", 600, NULL }, - { "P", 600, NULL }, - { "Q", 600, NULL }, - { "Uhungarumlaut", 600, NULL }, - { "R", 600, NULL }, - { "Aacute", 600, NULL }, - { "caron", 600, NULL }, - { "S", 600, NULL }, - { "T", 600, NULL }, - { "U", 600, NULL }, - { "agrave", 600, NULL }, - { "V", 600, NULL }, - { "W", 600, NULL }, - { "X", 600, NULL }, - { "question", 600, NULL }, - { "equal", 600, NULL }, - { "Y", 600, NULL }, - { "Z", 600, NULL }, - { "four", 600, NULL }, - { "a", 600, NULL }, - { "Gcommaaccent", 600, NULL }, - { "b", 600, NULL }, - { "c", 600, NULL }, - { "d", 600, NULL }, - { "e", 600, NULL }, - { "f", 600, NULL }, - { "g", 600, NULL }, - { "bullet", 600, NULL }, - { "h", 600, NULL }, - { "i", 600, NULL }, - { "Oslash", 600, NULL }, - { "dagger", 600, NULL }, - { "j", 600, NULL }, - { "k", 600, NULL }, - { "l", 600, NULL }, - { "m", 600, NULL }, - { "n", 600, NULL }, - { "tcommaaccent", 600, NULL }, - { "o", 600, NULL }, - { "ordfeminine", 600, NULL }, - { "ring", 600, NULL }, - { "p", 600, NULL }, - { "q", 600, NULL }, - { "uhungarumlaut", 600, NULL }, - { "r", 600, NULL }, - { "twosuperior", 600, NULL }, - { "aacute", 600, NULL }, - { "s", 600, NULL }, - { "OE", 600, NULL }, - { "t", 600, NULL }, - { "divide", 600, NULL }, - { "u", 600, NULL }, - { "Ccaron", 600, NULL }, - { "v", 600, NULL }, - { "w", 600, NULL }, - { "x", 600, NULL }, - { "y", 600, NULL }, - { "z", 600, NULL }, - { "Gbreve", 600, NULL }, - { "commaaccent", 600, NULL }, - { "hungarumlaut", 600, NULL }, - { "Idotaccent", 600, NULL }, - { "Nacute", 600, NULL }, - { "quotedbl", 600, NULL }, - { "gcommaaccent", 600, NULL }, - { "mu", 600, NULL }, - { "greaterequal", 600, NULL }, - { "Scaron", 600, NULL }, - { "Lslash", 600, NULL }, - { "semicolon", 600, NULL }, - { "oslash", 600, NULL }, - { "lessequal", 600, NULL }, - { "lozenge", 600, NULL }, - { "parenright", 600, NULL }, - { "ccaron", 600, NULL }, - { "Ecircumflex", 600, NULL }, - { "gbreve", 600, NULL }, - { "trademark", 600, NULL }, - { "daggerdbl", 600, NULL }, - { "nacute", 600, NULL }, - { "macron", 600, NULL }, - { "Otilde", 600, NULL }, - { "Emacron", 600, NULL }, - { "ellipsis", 600, NULL }, - { "scaron", 600, NULL }, - { "AE", 600, NULL }, - { "Ucircumflex", 600, NULL }, - { "lslash", 600, NULL }, - { "quotedblleft", 600, NULL }, - { "guilsinglright", 600, NULL }, - { "hyphen", 600, NULL }, - { "quotesingle", 600, NULL }, - { "eight", 600, NULL }, - { "exclamdown", 600, NULL }, - { "endash", 600, NULL }, - { "oe", 600, NULL }, - { "Abreve", 600, NULL }, - { "Umacron", 600, NULL }, - { "ecircumflex", 600, NULL }, - { "Adieresis", 600, NULL }, - { "copyright", 600, NULL }, - { "Egrave", 600, NULL }, - { "slash", 600, NULL }, - { "Edieresis", 600, NULL }, - { "otilde", 600, NULL }, - { "Idieresis", 600, NULL }, - { "parenleft", 600, NULL }, - { "one", 600, NULL }, - { "emacron", 600, NULL }, - { "Odieresis", 600, NULL }, - { "ucircumflex", 600, NULL }, - { "bracketleft", 600, NULL }, - { "Ugrave", 600, NULL }, - { "quoteright", 600, NULL }, - { "Udieresis", 600, NULL }, - { "perthousand", 600, NULL }, - { "Ydieresis", 600, NULL }, - { "umacron", 600, NULL }, - { "abreve", 600, NULL }, - { "Eacute", 600, NULL }, - { "adieresis", 600, NULL }, - { "egrave", 600, NULL }, - { "edieresis", 600, NULL }, - { "idieresis", 600, NULL }, - { "Eth", 600, NULL }, - { "ae", 600, NULL }, - { "asterisk", 600, NULL }, - { "odieresis", 600, NULL }, - { "Uacute", 600, NULL }, - { "ugrave", 600, NULL }, - { "nine", 600, NULL }, - { "five", 600, NULL }, - { "udieresis", 600, NULL }, - { "Zcaron", 600, NULL }, - { "Scommaaccent", 600, NULL }, - { "threequarters", 600, NULL }, - { "guillemotright", 600, NULL }, - { "Ccedilla", 600, NULL }, - { "ydieresis", 600, NULL }, - { "tilde", 600, NULL }, - { "at", 600, NULL }, - { "eacute", 600, NULL }, - { "underscore", 600, NULL }, - { "Euro", 600, NULL }, - { "Dcroat", 600, NULL }, - { "multiply", 600, NULL }, - { "zero", 600, NULL }, - { "eth", 600, NULL }, - { "Scedilla", 600, NULL }, - { "Ograve", 600, NULL }, - { "Racute", 600, NULL }, - { "partialdiff", 600, NULL }, - { "uacute", 600, NULL }, - { "braceleft", 600, NULL }, - { "Thorn", 600, NULL }, - { "zcaron", 600, NULL }, - { "scommaaccent", 600, NULL }, - { "ccedilla", 600, NULL }, - { "Dcaron", 600, NULL }, - { "dcroat", 600, NULL }, - { "Ocircumflex", 600, NULL }, - { "Oacute", 600, NULL }, - { "scedilla", 600, NULL }, - { "ogonek", 600, NULL }, - { "ograve", 600, NULL }, - { "racute", 600, NULL }, - { "Tcaron", 600, NULL }, - { "Eogonek", 600, NULL }, - { "thorn", 600, NULL }, - { "degree", 600, NULL }, - { "registered", 600, NULL }, - { "radical", 600, NULL }, - { "Aring", 600, NULL }, - { "percent", 600, NULL }, - { "six", 600, NULL }, - { "paragraph", 600, NULL }, - { "dcaron", 600, NULL }, - { "Uogonek", 600, NULL }, - { "two", 600, NULL }, - { "summation", 600, NULL }, - { "Igrave", 600, NULL }, - { "Lacute", 600, NULL }, - { "ocircumflex", 600, NULL }, - { "oacute", 600, NULL }, - { "Uring", 600, NULL }, - { "Lcommaaccent", 600, NULL }, - { "tcaron", 600, NULL }, - { "eogonek", 600, NULL }, - { "Delta", 600, NULL }, - { "Ohungarumlaut", 600, NULL }, - { "asciicircum", 600, NULL }, - { "aring", 600, NULL }, - { "grave", 600, NULL }, - { "uogonek", 600, NULL }, - { "bracketright", 600, NULL }, - { "Iacute", 600, NULL }, - { "ampersand", 600, NULL }, - { "igrave", 600, NULL }, - { "lacute", 600, NULL }, - { "Ncaron", 600, NULL }, - { "plus", 600, NULL }, - { "uring", 600, NULL }, - { "quotesinglbase", 600, NULL }, - { "lcommaaccent", 600, NULL }, - { "Yacute", 600, NULL }, - { "ohungarumlaut", 600, NULL }, - { "threesuperior", 600, NULL }, - { "acute", 600, NULL }, - { "section", 600, NULL }, - { "dieresis", 600, NULL }, - { "iacute", 600, NULL }, - { "quotedblbase", 600, NULL }, - { "ncaron", 600, NULL }, - { "florin", 600, NULL }, - { "yacute", 600, NULL }, - { "Rcommaaccent", 600, NULL }, - { "fi", 600, NULL }, - { "fl", 600, NULL }, - { "Acircumflex", 600, NULL }, - { "Cacute", 600, NULL }, - { "Icircumflex", 600, NULL }, - { "guillemotleft", 600, NULL }, - { "germandbls", 600, NULL }, - { "Amacron", 600, NULL }, - { "seven", 600, NULL }, - { "Sacute", 600, NULL }, - { "ordmasculine", 600, NULL }, - { "dotlessi", 600, NULL }, - { "sterling", 600, NULL }, - { "notequal", 600, NULL }, - { "Imacron", 600, NULL }, - { "rcommaaccent", 600, NULL }, - { "Zdotaccent", 600, NULL }, - { "acircumflex", 600, NULL }, - { "cacute", 600, NULL }, - { "Ecaron", 600, NULL }, - { "icircumflex", 600, NULL }, - { "braceright", 600, NULL }, - { "quotedblright", 600, NULL }, - { "amacron", 600, NULL }, - { "sacute", 600, NULL }, - { "imacron", 600, NULL }, - { "cent", 600, NULL }, - { "currency", 600, NULL }, - { "logicalnot", 600, NULL }, - { "zdotaccent", 600, NULL }, - { "Atilde", 600, NULL }, - { "breve", 600, NULL }, - { "bar", 600, NULL }, - { "fraction", 600, NULL }, - { "less", 600, NULL }, - { "ecaron", 600, NULL }, - { "guilsinglleft", 600, NULL }, - { "exclam", 600, NULL }, - { "period", 600, NULL }, - { "Rcaron", 600, NULL }, - { "Kcommaaccent", 600, NULL }, - { "greater", 600, NULL }, - { "atilde", 600, NULL }, - { "brokenbar", 600, NULL }, - { "quoteleft", 600, NULL }, - { "Edotaccent", 600, NULL }, - { "onesuperior", 600, NULL } -}; - -static BuiltinFontWidth helveticaWidthsTab[] = { - { "Ntilde", 722, NULL }, - { "rcaron", 333, NULL }, - { "kcommaaccent", 500, NULL }, - { "Ncommaaccent", 722, NULL }, - { "Zacute", 611, NULL }, - { "comma", 278, NULL }, - { "cedilla", 333, NULL }, - { "plusminus", 584, NULL }, - { "circumflex", 333, NULL }, - { "dotaccent", 333, NULL }, - { "edotaccent", 556, NULL }, - { "asciitilde", 584, NULL }, - { "colon", 278, NULL }, - { "onehalf", 834, NULL }, - { "dollar", 556, NULL }, - { "Lcaron", 556, NULL }, - { "ntilde", 556, NULL }, - { "Aogonek", 667, NULL }, - { "ncommaaccent", 556, NULL }, - { "minus", 584, NULL }, - { "Iogonek", 278, NULL }, - { "zacute", 500, NULL }, - { "yen", 556, NULL }, - { "space", 278, NULL }, - { "Omacron", 778, NULL }, - { "questiondown", 611, NULL }, - { "emdash", 1000, NULL }, - { "Agrave", 667, NULL }, - { "three", 556, NULL }, - { "numbersign", 556, NULL }, - { "lcaron", 299, NULL }, - { "A", 667, NULL }, - { "B", 667, NULL }, - { "C", 722, NULL }, - { "aogonek", 556, NULL }, - { "D", 722, NULL }, - { "E", 667, NULL }, - { "onequarter", 834, NULL }, - { "F", 611, NULL }, - { "G", 778, NULL }, - { "H", 722, NULL }, - { "I", 278, NULL }, - { "J", 500, NULL }, - { "K", 667, NULL }, - { "iogonek", 222, NULL }, - { "backslash", 278, NULL }, - { "L", 556, NULL }, - { "periodcentered", 278, NULL }, - { "M", 833, NULL }, - { "N", 722, NULL }, - { "omacron", 556, NULL }, - { "Tcommaaccent", 611, NULL }, - { "O", 778, NULL }, - { "P", 667, NULL }, - { "Q", 778, NULL }, - { "Uhungarumlaut", 722, NULL }, - { "R", 722, NULL }, - { "Aacute", 667, NULL }, - { "caron", 333, NULL }, - { "S", 667, NULL }, - { "T", 611, NULL }, - { "U", 722, NULL }, - { "agrave", 556, NULL }, - { "V", 667, NULL }, - { "W", 944, NULL }, - { "X", 667, NULL }, - { "question", 556, NULL }, - { "equal", 584, NULL }, - { "Y", 667, NULL }, - { "Z", 611, NULL }, - { "four", 556, NULL }, - { "a", 556, NULL }, - { "Gcommaaccent", 778, NULL }, - { "b", 556, NULL }, - { "c", 500, NULL }, - { "d", 556, NULL }, - { "e", 556, NULL }, - { "f", 278, NULL }, - { "g", 556, NULL }, - { "bullet", 350, NULL }, - { "h", 556, NULL }, - { "i", 222, NULL }, - { "Oslash", 778, NULL }, - { "dagger", 556, NULL }, - { "j", 222, NULL }, - { "k", 500, NULL }, - { "l", 222, NULL }, - { "m", 833, NULL }, - { "n", 556, NULL }, - { "tcommaaccent", 278, NULL }, - { "o", 556, NULL }, - { "ordfeminine", 370, NULL }, - { "ring", 333, NULL }, - { "p", 556, NULL }, - { "q", 556, NULL }, - { "uhungarumlaut", 556, NULL }, - { "r", 333, NULL }, - { "twosuperior", 333, NULL }, - { "aacute", 556, NULL }, - { "s", 500, NULL }, - { "OE", 1000, NULL }, - { "t", 278, NULL }, - { "divide", 584, NULL }, - { "u", 556, NULL }, - { "Ccaron", 722, NULL }, - { "v", 500, NULL }, - { "w", 722, NULL }, - { "x", 500, NULL }, - { "y", 500, NULL }, - { "z", 500, NULL }, - { "Gbreve", 778, NULL }, - { "commaaccent", 250, NULL }, - { "hungarumlaut", 333, NULL }, - { "Idotaccent", 278, NULL }, - { "Nacute", 722, NULL }, - { "quotedbl", 355, NULL }, - { "gcommaaccent", 556, NULL }, - { "mu", 556, NULL }, - { "greaterequal", 549, NULL }, - { "Scaron", 667, NULL }, - { "Lslash", 556, NULL }, - { "semicolon", 278, NULL }, - { "oslash", 611, NULL }, - { "lessequal", 549, NULL }, - { "lozenge", 471, NULL }, - { "parenright", 333, NULL }, - { "ccaron", 500, NULL }, - { "Ecircumflex", 667, NULL }, - { "gbreve", 556, NULL }, - { "trademark", 1000, NULL }, - { "daggerdbl", 556, NULL }, - { "nacute", 556, NULL }, - { "macron", 333, NULL }, - { "Otilde", 778, NULL }, - { "Emacron", 667, NULL }, - { "ellipsis", 1000, NULL }, - { "scaron", 500, NULL }, - { "AE", 1000, NULL }, - { "Ucircumflex", 722, NULL }, - { "lslash", 222, NULL }, - { "quotedblleft", 333, NULL }, - { "guilsinglright", 333, NULL }, - { "hyphen", 333, NULL }, - { "quotesingle", 191, NULL }, - { "eight", 556, NULL }, - { "exclamdown", 333, NULL }, - { "endash", 556, NULL }, - { "oe", 944, NULL }, - { "Abreve", 667, NULL }, - { "Umacron", 722, NULL }, - { "ecircumflex", 556, NULL }, - { "Adieresis", 667, NULL }, - { "copyright", 737, NULL }, - { "Egrave", 667, NULL }, - { "slash", 278, NULL }, - { "Edieresis", 667, NULL }, - { "otilde", 556, NULL }, - { "Idieresis", 278, NULL }, - { "parenleft", 333, NULL }, - { "one", 556, NULL }, - { "emacron", 556, NULL }, - { "Odieresis", 778, NULL }, - { "ucircumflex", 556, NULL }, - { "bracketleft", 278, NULL }, - { "Ugrave", 722, NULL }, - { "quoteright", 222, NULL }, - { "Udieresis", 722, NULL }, - { "perthousand", 1000, NULL }, - { "Ydieresis", 667, NULL }, - { "umacron", 556, NULL }, - { "abreve", 556, NULL }, - { "Eacute", 667, NULL }, - { "adieresis", 556, NULL }, - { "egrave", 556, NULL }, - { "edieresis", 556, NULL }, - { "idieresis", 278, NULL }, - { "Eth", 722, NULL }, - { "ae", 889, NULL }, - { "asterisk", 389, NULL }, - { "odieresis", 556, NULL }, - { "Uacute", 722, NULL }, - { "ugrave", 556, NULL }, - { "nine", 556, NULL }, - { "five", 556, NULL }, - { "udieresis", 556, NULL }, - { "Zcaron", 611, NULL }, - { "Scommaaccent", 667, NULL }, - { "threequarters", 834, NULL }, - { "guillemotright", 556, NULL }, - { "Ccedilla", 722, NULL }, - { "ydieresis", 500, NULL }, - { "tilde", 333, NULL }, - { "at", 1015, NULL }, - { "eacute", 556, NULL }, - { "underscore", 556, NULL }, - { "Euro", 556, NULL }, - { "Dcroat", 722, NULL }, - { "multiply", 584, NULL }, - { "zero", 556, NULL }, - { "eth", 556, NULL }, - { "Scedilla", 667, NULL }, - { "Ograve", 778, NULL }, - { "Racute", 722, NULL }, - { "partialdiff", 476, NULL }, - { "uacute", 556, NULL }, - { "braceleft", 334, NULL }, - { "Thorn", 667, NULL }, - { "zcaron", 500, NULL }, - { "scommaaccent", 500, NULL }, - { "ccedilla", 500, NULL }, - { "Dcaron", 722, NULL }, - { "dcroat", 556, NULL }, - { "Ocircumflex", 778, NULL }, - { "Oacute", 778, NULL }, - { "scedilla", 500, NULL }, - { "ogonek", 333, NULL }, - { "ograve", 556, NULL }, - { "racute", 333, NULL }, - { "Tcaron", 611, NULL }, - { "Eogonek", 667, NULL }, - { "thorn", 556, NULL }, - { "degree", 400, NULL }, - { "registered", 737, NULL }, - { "radical", 453, NULL }, - { "Aring", 667, NULL }, - { "percent", 889, NULL }, - { "six", 556, NULL }, - { "paragraph", 537, NULL }, - { "dcaron", 643, NULL }, - { "Uogonek", 722, NULL }, - { "two", 556, NULL }, - { "summation", 600, NULL }, - { "Igrave", 278, NULL }, - { "Lacute", 556, NULL }, - { "ocircumflex", 556, NULL }, - { "oacute", 556, NULL }, - { "Uring", 722, NULL }, - { "Lcommaaccent", 556, NULL }, - { "tcaron", 317, NULL }, - { "eogonek", 556, NULL }, - { "Delta", 612, NULL }, - { "Ohungarumlaut", 778, NULL }, - { "asciicircum", 469, NULL }, - { "aring", 556, NULL }, - { "grave", 333, NULL }, - { "uogonek", 556, NULL }, - { "bracketright", 278, NULL }, - { "Iacute", 278, NULL }, - { "ampersand", 667, NULL }, - { "igrave", 278, NULL }, - { "lacute", 222, NULL }, - { "Ncaron", 722, NULL }, - { "plus", 584, NULL }, - { "uring", 556, NULL }, - { "quotesinglbase", 222, NULL }, - { "lcommaaccent", 222, NULL }, - { "Yacute", 667, NULL }, - { "ohungarumlaut", 556, NULL }, - { "threesuperior", 333, NULL }, - { "acute", 333, NULL }, - { "section", 556, NULL }, - { "dieresis", 333, NULL }, - { "iacute", 278, NULL }, - { "quotedblbase", 333, NULL }, - { "ncaron", 556, NULL }, - { "florin", 556, NULL }, - { "yacute", 500, NULL }, - { "Rcommaaccent", 722, NULL }, - { "fi", 500, NULL }, - { "fl", 500, NULL }, - { "Acircumflex", 667, NULL }, - { "Cacute", 722, NULL }, - { "Icircumflex", 278, NULL }, - { "guillemotleft", 556, NULL }, - { "germandbls", 611, NULL }, - { "Amacron", 667, NULL }, - { "seven", 556, NULL }, - { "Sacute", 667, NULL }, - { "ordmasculine", 365, NULL }, - { "dotlessi", 278, NULL }, - { "sterling", 556, NULL }, - { "notequal", 549, NULL }, - { "Imacron", 278, NULL }, - { "rcommaaccent", 333, NULL }, - { "Zdotaccent", 611, NULL }, - { "acircumflex", 556, NULL }, - { "cacute", 500, NULL }, - { "Ecaron", 667, NULL }, - { "icircumflex", 278, NULL }, - { "braceright", 334, NULL }, - { "quotedblright", 333, NULL }, - { "amacron", 556, NULL }, - { "sacute", 500, NULL }, - { "imacron", 278, NULL }, - { "cent", 556, NULL }, - { "currency", 556, NULL }, - { "logicalnot", 584, NULL }, - { "zdotaccent", 500, NULL }, - { "Atilde", 667, NULL }, - { "breve", 333, NULL }, - { "bar", 260, NULL }, - { "fraction", 167, NULL }, - { "less", 584, NULL }, - { "ecaron", 556, NULL }, - { "guilsinglleft", 333, NULL }, - { "exclam", 278, NULL }, - { "period", 278, NULL }, - { "Rcaron", 722, NULL }, - { "Kcommaaccent", 667, NULL }, - { "greater", 584, NULL }, - { "atilde", 556, NULL }, - { "brokenbar", 260, NULL }, - { "quoteleft", 222, NULL }, - { "Edotaccent", 667, NULL }, - { "onesuperior", 333, NULL } -}; - -static BuiltinFontWidth helveticaBoldWidthsTab[] = { - { "Ntilde", 722, NULL }, - { "rcaron", 389, NULL }, - { "kcommaaccent", 556, NULL }, - { "Ncommaaccent", 722, NULL }, - { "Zacute", 611, NULL }, - { "comma", 278, NULL }, - { "cedilla", 333, NULL }, - { "plusminus", 584, NULL }, - { "circumflex", 333, NULL }, - { "dotaccent", 333, NULL }, - { "edotaccent", 556, NULL }, - { "asciitilde", 584, NULL }, - { "colon", 333, NULL }, - { "onehalf", 834, NULL }, - { "dollar", 556, NULL }, - { "Lcaron", 611, NULL }, - { "ntilde", 611, NULL }, - { "Aogonek", 722, NULL }, - { "ncommaaccent", 611, NULL }, - { "minus", 584, NULL }, - { "Iogonek", 278, NULL }, - { "zacute", 500, NULL }, - { "yen", 556, NULL }, - { "space", 278, NULL }, - { "Omacron", 778, NULL }, - { "questiondown", 611, NULL }, - { "emdash", 1000, NULL }, - { "Agrave", 722, NULL }, - { "three", 556, NULL }, - { "numbersign", 556, NULL }, - { "lcaron", 400, NULL }, - { "A", 722, NULL }, - { "B", 722, NULL }, - { "C", 722, NULL }, - { "aogonek", 556, NULL }, - { "D", 722, NULL }, - { "E", 667, NULL }, - { "onequarter", 834, NULL }, - { "F", 611, NULL }, - { "G", 778, NULL }, - { "H", 722, NULL }, - { "I", 278, NULL }, - { "J", 556, NULL }, - { "K", 722, NULL }, - { "iogonek", 278, NULL }, - { "backslash", 278, NULL }, - { "L", 611, NULL }, - { "periodcentered", 278, NULL }, - { "M", 833, NULL }, - { "N", 722, NULL }, - { "omacron", 611, NULL }, - { "Tcommaaccent", 611, NULL }, - { "O", 778, NULL }, - { "P", 667, NULL }, - { "Q", 778, NULL }, - { "Uhungarumlaut", 722, NULL }, - { "R", 722, NULL }, - { "Aacute", 722, NULL }, - { "caron", 333, NULL }, - { "S", 667, NULL }, - { "T", 611, NULL }, - { "U", 722, NULL }, - { "agrave", 556, NULL }, - { "V", 667, NULL }, - { "W", 944, NULL }, - { "X", 667, NULL }, - { "question", 611, NULL }, - { "equal", 584, NULL }, - { "Y", 667, NULL }, - { "Z", 611, NULL }, - { "four", 556, NULL }, - { "a", 556, NULL }, - { "Gcommaaccent", 778, NULL }, - { "b", 611, NULL }, - { "c", 556, NULL }, - { "d", 611, NULL }, - { "e", 556, NULL }, - { "f", 333, NULL }, - { "g", 611, NULL }, - { "bullet", 350, NULL }, - { "h", 611, NULL }, - { "i", 278, NULL }, - { "Oslash", 778, NULL }, - { "dagger", 556, NULL }, - { "j", 278, NULL }, - { "k", 556, NULL }, - { "l", 278, NULL }, - { "m", 889, NULL }, - { "n", 611, NULL }, - { "tcommaaccent", 333, NULL }, - { "o", 611, NULL }, - { "ordfeminine", 370, NULL }, - { "ring", 333, NULL }, - { "p", 611, NULL }, - { "q", 611, NULL }, - { "uhungarumlaut", 611, NULL }, - { "r", 389, NULL }, - { "twosuperior", 333, NULL }, - { "aacute", 556, NULL }, - { "s", 556, NULL }, - { "OE", 1000, NULL }, - { "t", 333, NULL }, - { "divide", 584, NULL }, - { "u", 611, NULL }, - { "Ccaron", 722, NULL }, - { "v", 556, NULL }, - { "w", 778, NULL }, - { "x", 556, NULL }, - { "y", 556, NULL }, - { "z", 500, NULL }, - { "Gbreve", 778, NULL }, - { "commaaccent", 250, NULL }, - { "hungarumlaut", 333, NULL }, - { "Idotaccent", 278, NULL }, - { "Nacute", 722, NULL }, - { "quotedbl", 474, NULL }, - { "gcommaaccent", 611, NULL }, - { "mu", 611, NULL }, - { "greaterequal", 549, NULL }, - { "Scaron", 667, NULL }, - { "Lslash", 611, NULL }, - { "semicolon", 333, NULL }, - { "oslash", 611, NULL }, - { "lessequal", 549, NULL }, - { "lozenge", 494, NULL }, - { "parenright", 333, NULL }, - { "ccaron", 556, NULL }, - { "Ecircumflex", 667, NULL }, - { "gbreve", 611, NULL }, - { "trademark", 1000, NULL }, - { "daggerdbl", 556, NULL }, - { "nacute", 611, NULL }, - { "macron", 333, NULL }, - { "Otilde", 778, NULL }, - { "Emacron", 667, NULL }, - { "ellipsis", 1000, NULL }, - { "scaron", 556, NULL }, - { "AE", 1000, NULL }, - { "Ucircumflex", 722, NULL }, - { "lslash", 278, NULL }, - { "quotedblleft", 500, NULL }, - { "guilsinglright", 333, NULL }, - { "hyphen", 333, NULL }, - { "quotesingle", 238, NULL }, - { "eight", 556, NULL }, - { "exclamdown", 333, NULL }, - { "endash", 556, NULL }, - { "oe", 944, NULL }, - { "Abreve", 722, NULL }, - { "Umacron", 722, NULL }, - { "ecircumflex", 556, NULL }, - { "Adieresis", 722, NULL }, - { "copyright", 737, NULL }, - { "Egrave", 667, NULL }, - { "slash", 278, NULL }, - { "Edieresis", 667, NULL }, - { "otilde", 611, NULL }, - { "Idieresis", 278, NULL }, - { "parenleft", 333, NULL }, - { "one", 556, NULL }, - { "emacron", 556, NULL }, - { "Odieresis", 778, NULL }, - { "ucircumflex", 611, NULL }, - { "bracketleft", 333, NULL }, - { "Ugrave", 722, NULL }, - { "quoteright", 278, NULL }, - { "Udieresis", 722, NULL }, - { "perthousand", 1000, NULL }, - { "Ydieresis", 667, NULL }, - { "umacron", 611, NULL }, - { "abreve", 556, NULL }, - { "Eacute", 667, NULL }, - { "adieresis", 556, NULL }, - { "egrave", 556, NULL }, - { "edieresis", 556, NULL }, - { "idieresis", 278, NULL }, - { "Eth", 722, NULL }, - { "ae", 889, NULL }, - { "asterisk", 389, NULL }, - { "odieresis", 611, NULL }, - { "Uacute", 722, NULL }, - { "ugrave", 611, NULL }, - { "nine", 556, NULL }, - { "five", 556, NULL }, - { "udieresis", 611, NULL }, - { "Zcaron", 611, NULL }, - { "Scommaaccent", 667, NULL }, - { "threequarters", 834, NULL }, - { "guillemotright", 556, NULL }, - { "Ccedilla", 722, NULL }, - { "ydieresis", 556, NULL }, - { "tilde", 333, NULL }, - { "dbldaggerumlaut", 556, NULL }, - { "at", 975, NULL }, - { "eacute", 556, NULL }, - { "underscore", 556, NULL }, - { "Euro", 556, NULL }, - { "Dcroat", 722, NULL }, - { "multiply", 584, NULL }, - { "zero", 556, NULL }, - { "eth", 611, NULL }, - { "Scedilla", 667, NULL }, - { "Ograve", 778, NULL }, - { "Racute", 722, NULL }, - { "partialdiff", 494, NULL }, - { "uacute", 611, NULL }, - { "braceleft", 389, NULL }, - { "Thorn", 667, NULL }, - { "zcaron", 500, NULL }, - { "scommaaccent", 556, NULL }, - { "ccedilla", 556, NULL }, - { "Dcaron", 722, NULL }, - { "dcroat", 611, NULL }, - { "Ocircumflex", 778, NULL }, - { "Oacute", 778, NULL }, - { "scedilla", 556, NULL }, - { "ogonek", 333, NULL }, - { "ograve", 611, NULL }, - { "racute", 389, NULL }, - { "Tcaron", 611, NULL }, - { "Eogonek", 667, NULL }, - { "thorn", 611, NULL }, - { "degree", 400, NULL }, - { "registered", 737, NULL }, - { "radical", 549, NULL }, - { "Aring", 722, NULL }, - { "percent", 889, NULL }, - { "six", 556, NULL }, - { "paragraph", 556, NULL }, - { "dcaron", 743, NULL }, - { "Uogonek", 722, NULL }, - { "two", 556, NULL }, - { "summation", 600, NULL }, - { "Igrave", 278, NULL }, - { "Lacute", 611, NULL }, - { "ocircumflex", 611, NULL }, - { "oacute", 611, NULL }, - { "Uring", 722, NULL }, - { "Lcommaaccent", 611, NULL }, - { "tcaron", 389, NULL }, - { "eogonek", 556, NULL }, - { "Delta", 612, NULL }, - { "Ohungarumlaut", 778, NULL }, - { "asciicircum", 584, NULL }, - { "aring", 556, NULL }, - { "grave", 333, NULL }, - { "uogonek", 611, NULL }, - { "bracketright", 333, NULL }, - { "Iacute", 278, NULL }, - { "ampersand", 722, NULL }, - { "igrave", 278, NULL }, - { "lacute", 278, NULL }, - { "Ncaron", 722, NULL }, - { "plus", 584, NULL }, - { "uring", 611, NULL }, - { "quotesinglbase", 278, NULL }, - { "lcommaaccent", 278, NULL }, - { "Yacute", 667, NULL }, - { "ohungarumlaut", 611, NULL }, - { "threesuperior", 333, NULL }, - { "acute", 333, NULL }, - { "section", 556, NULL }, - { "dieresis", 333, NULL }, - { "iacute", 278, NULL }, - { "quotedblbase", 500, NULL }, - { "ncaron", 611, NULL }, - { "florin", 556, NULL }, - { "yacute", 556, NULL }, - { "Rcommaaccent", 722, NULL }, - { "fi", 611, NULL }, - { "fl", 611, NULL }, - { "Acircumflex", 722, NULL }, - { "Cacute", 722, NULL }, - { "Icircumflex", 278, NULL }, - { "guillemotleft", 556, NULL }, - { "germandbls", 611, NULL }, - { "Amacron", 722, NULL }, - { "seven", 556, NULL }, - { "Sacute", 667, NULL }, - { "ordmasculine", 365, NULL }, - { "dotlessi", 278, NULL }, - { "sterling", 556, NULL }, - { "notequal", 549, NULL }, - { "Imacron", 278, NULL }, - { "rcommaaccent", 389, NULL }, - { "Zdotaccent", 611, NULL }, - { "acircumflex", 556, NULL }, - { "cacute", 556, NULL }, - { "Ecaron", 667, NULL }, - { "icircumflex", 278, NULL }, - { "braceright", 389, NULL }, - { "quotedblright", 500, NULL }, - { "amacron", 556, NULL }, - { "sacute", 556, NULL }, - { "imacron", 278, NULL }, - { "cent", 556, NULL }, - { "currency", 556, NULL }, - { "logicalnot", 584, NULL }, - { "zdotaccent", 500, NULL }, - { "Atilde", 722, NULL }, - { "breve", 333, NULL }, - { "bar", 280, NULL }, - { "fraction", 167, NULL }, - { "less", 584, NULL }, - { "ecaron", 556, NULL }, - { "guilsinglleft", 333, NULL }, - { "exclam", 333, NULL }, - { "period", 278, NULL }, - { "Rcaron", 722, NULL }, - { "Kcommaaccent", 722, NULL }, - { "greater", 584, NULL }, - { "atilde", 556, NULL }, - { "brokenbar", 280, NULL }, - { "quoteleft", 278, NULL }, - { "Edotaccent", 667, NULL }, - { "onesuperior", 333, NULL } -}; - -static BuiltinFontWidth helveticaBoldObliqueWidthsTab[] = { - { "Ntilde", 722, NULL }, - { "rcaron", 389, NULL }, - { "kcommaaccent", 556, NULL }, - { "Ncommaaccent", 722, NULL }, - { "Zacute", 611, NULL }, - { "comma", 278, NULL }, - { "cedilla", 333, NULL }, - { "plusminus", 584, NULL }, - { "circumflex", 333, NULL }, - { "dotaccent", 333, NULL }, - { "edotaccent", 556, NULL }, - { "asciitilde", 584, NULL }, - { "colon", 333, NULL }, - { "onehalf", 834, NULL }, - { "dollar", 556, NULL }, - { "Lcaron", 611, NULL }, - { "ntilde", 611, NULL }, - { "Aogonek", 722, NULL }, - { "ncommaaccent", 611, NULL }, - { "minus", 584, NULL }, - { "Iogonek", 278, NULL }, - { "zacute", 500, NULL }, - { "yen", 556, NULL }, - { "space", 278, NULL }, - { "Omacron", 778, NULL }, - { "questiondown", 611, NULL }, - { "emdash", 1000, NULL }, - { "Agrave", 722, NULL }, - { "three", 556, NULL }, - { "numbersign", 556, NULL }, - { "lcaron", 400, NULL }, - { "A", 722, NULL }, - { "B", 722, NULL }, - { "C", 722, NULL }, - { "aogonek", 556, NULL }, - { "D", 722, NULL }, - { "E", 667, NULL }, - { "onequarter", 834, NULL }, - { "F", 611, NULL }, - { "G", 778, NULL }, - { "H", 722, NULL }, - { "I", 278, NULL }, - { "J", 556, NULL }, - { "K", 722, NULL }, - { "iogonek", 278, NULL }, - { "backslash", 278, NULL }, - { "L", 611, NULL }, - { "periodcentered", 278, NULL }, - { "M", 833, NULL }, - { "N", 722, NULL }, - { "omacron", 611, NULL }, - { "Tcommaaccent", 611, NULL }, - { "O", 778, NULL }, - { "P", 667, NULL }, - { "Q", 778, NULL }, - { "Uhungarumlaut", 722, NULL }, - { "R", 722, NULL }, - { "Aacute", 722, NULL }, - { "caron", 333, NULL }, - { "S", 667, NULL }, - { "T", 611, NULL }, - { "U", 722, NULL }, - { "agrave", 556, NULL }, - { "V", 667, NULL }, - { "W", 944, NULL }, - { "X", 667, NULL }, - { "question", 611, NULL }, - { "equal", 584, NULL }, - { "Y", 667, NULL }, - { "Z", 611, NULL }, - { "four", 556, NULL }, - { "a", 556, NULL }, - { "Gcommaaccent", 778, NULL }, - { "b", 611, NULL }, - { "c", 556, NULL }, - { "d", 611, NULL }, - { "e", 556, NULL }, - { "f", 333, NULL }, - { "g", 611, NULL }, - { "bullet", 350, NULL }, - { "h", 611, NULL }, - { "i", 278, NULL }, - { "Oslash", 778, NULL }, - { "dagger", 556, NULL }, - { "j", 278, NULL }, - { "k", 556, NULL }, - { "l", 278, NULL }, - { "m", 889, NULL }, - { "n", 611, NULL }, - { "tcommaaccent", 333, NULL }, - { "o", 611, NULL }, - { "ordfeminine", 370, NULL }, - { "ring", 333, NULL }, - { "p", 611, NULL }, - { "q", 611, NULL }, - { "uhungarumlaut", 611, NULL }, - { "r", 389, NULL }, - { "twosuperior", 333, NULL }, - { "aacute", 556, NULL }, - { "s", 556, NULL }, - { "OE", 1000, NULL }, - { "t", 333, NULL }, - { "divide", 584, NULL }, - { "u", 611, NULL }, - { "Ccaron", 722, NULL }, - { "v", 556, NULL }, - { "w", 778, NULL }, - { "x", 556, NULL }, - { "y", 556, NULL }, - { "z", 500, NULL }, - { "Gbreve", 778, NULL }, - { "commaaccent", 250, NULL }, - { "hungarumlaut", 333, NULL }, - { "Idotaccent", 278, NULL }, - { "Nacute", 722, NULL }, - { "quotedbl", 474, NULL }, - { "gcommaaccent", 611, NULL }, - { "mu", 611, NULL }, - { "greaterequal", 549, NULL }, - { "Scaron", 667, NULL }, - { "Lslash", 611, NULL }, - { "semicolon", 333, NULL }, - { "oslash", 611, NULL }, - { "lessequal", 549, NULL }, - { "lozenge", 494, NULL }, - { "parenright", 333, NULL }, - { "ccaron", 556, NULL }, - { "Ecircumflex", 667, NULL }, - { "gbreve", 611, NULL }, - { "trademark", 1000, NULL }, - { "daggerdbl", 556, NULL }, - { "nacute", 611, NULL }, - { "macron", 333, NULL }, - { "Otilde", 778, NULL }, - { "Emacron", 667, NULL }, - { "ellipsis", 1000, NULL }, - { "scaron", 556, NULL }, - { "AE", 1000, NULL }, - { "Ucircumflex", 722, NULL }, - { "lslash", 278, NULL }, - { "quotedblleft", 500, NULL }, - { "guilsinglright", 333, NULL }, - { "hyphen", 333, NULL }, - { "quotesingle", 238, NULL }, - { "eight", 556, NULL }, - { "exclamdown", 333, NULL }, - { "endash", 556, NULL }, - { "oe", 944, NULL }, - { "Abreve", 722, NULL }, - { "Umacron", 722, NULL }, - { "ecircumflex", 556, NULL }, - { "Adieresis", 722, NULL }, - { "copyright", 737, NULL }, - { "Egrave", 667, NULL }, - { "slash", 278, NULL }, - { "Edieresis", 667, NULL }, - { "otilde", 611, NULL }, - { "Idieresis", 278, NULL }, - { "parenleft", 333, NULL }, - { "one", 556, NULL }, - { "emacron", 556, NULL }, - { "Odieresis", 778, NULL }, - { "ucircumflex", 611, NULL }, - { "bracketleft", 333, NULL }, - { "Ugrave", 722, NULL }, - { "quoteright", 278, NULL }, - { "Udieresis", 722, NULL }, - { "perthousand", 1000, NULL }, - { "Ydieresis", 667, NULL }, - { "umacron", 611, NULL }, - { "abreve", 556, NULL }, - { "Eacute", 667, NULL }, - { "adieresis", 556, NULL }, - { "egrave", 556, NULL }, - { "edieresis", 556, NULL }, - { "idieresis", 278, NULL }, - { "Eth", 722, NULL }, - { "ae", 889, NULL }, - { "asterisk", 389, NULL }, - { "odieresis", 611, NULL }, - { "Uacute", 722, NULL }, - { "ugrave", 611, NULL }, - { "nine", 556, NULL }, - { "five", 556, NULL }, - { "udieresis", 611, NULL }, - { "Zcaron", 611, NULL }, - { "Scommaaccent", 667, NULL }, - { "threequarters", 834, NULL }, - { "guillemotright", 556, NULL }, - { "Ccedilla", 722, NULL }, - { "ydieresis", 556, NULL }, - { "tilde", 333, NULL }, - { "at", 975, NULL }, - { "eacute", 556, NULL }, - { "underscore", 556, NULL }, - { "Euro", 556, NULL }, - { "Dcroat", 722, NULL }, - { "multiply", 584, NULL }, - { "zero", 556, NULL }, - { "eth", 611, NULL }, - { "Scedilla", 667, NULL }, - { "Ograve", 778, NULL }, - { "Racute", 722, NULL }, - { "partialdiff", 494, NULL }, - { "uacute", 611, NULL }, - { "braceleft", 389, NULL }, - { "Thorn", 667, NULL }, - { "zcaron", 500, NULL }, - { "scommaaccent", 556, NULL }, - { "ccedilla", 556, NULL }, - { "Dcaron", 722, NULL }, - { "dcroat", 611, NULL }, - { "Ocircumflex", 778, NULL }, - { "Oacute", 778, NULL }, - { "scedilla", 556, NULL }, - { "ogonek", 333, NULL }, - { "ograve", 611, NULL }, - { "racute", 389, NULL }, - { "Tcaron", 611, NULL }, - { "Eogonek", 667, NULL }, - { "thorn", 611, NULL }, - { "degree", 400, NULL }, - { "registered", 737, NULL }, - { "radical", 549, NULL }, - { "Aring", 722, NULL }, - { "percent", 889, NULL }, - { "six", 556, NULL }, - { "paragraph", 556, NULL }, - { "dcaron", 743, NULL }, - { "Uogonek", 722, NULL }, - { "two", 556, NULL }, - { "summation", 600, NULL }, - { "Igrave", 278, NULL }, - { "Lacute", 611, NULL }, - { "ocircumflex", 611, NULL }, - { "oacute", 611, NULL }, - { "Uring", 722, NULL }, - { "Lcommaaccent", 611, NULL }, - { "tcaron", 389, NULL }, - { "eogonek", 556, NULL }, - { "Delta", 612, NULL }, - { "Ohungarumlaut", 778, NULL }, - { "asciicircum", 584, NULL }, - { "aring", 556, NULL }, - { "grave", 333, NULL }, - { "uogonek", 611, NULL }, - { "bracketright", 333, NULL }, - { "Iacute", 278, NULL }, - { "ampersand", 722, NULL }, - { "igrave", 278, NULL }, - { "lacute", 278, NULL }, - { "Ncaron", 722, NULL }, - { "plus", 584, NULL }, - { "uring", 611, NULL }, - { "quotesinglbase", 278, NULL }, - { "lcommaaccent", 278, NULL }, - { "Yacute", 667, NULL }, - { "ohungarumlaut", 611, NULL }, - { "threesuperior", 333, NULL }, - { "acute", 333, NULL }, - { "section", 556, NULL }, - { "dieresis", 333, NULL }, - { "iacute", 278, NULL }, - { "quotedblbase", 500, NULL }, - { "ncaron", 611, NULL }, - { "florin", 556, NULL }, - { "yacute", 556, NULL }, - { "Rcommaaccent", 722, NULL }, - { "fi", 611, NULL }, - { "fl", 611, NULL }, - { "Acircumflex", 722, NULL }, - { "Cacute", 722, NULL }, - { "Icircumflex", 278, NULL }, - { "guillemotleft", 556, NULL }, - { "germandbls", 611, NULL }, - { "Amacron", 722, NULL }, - { "seven", 556, NULL }, - { "Sacute", 667, NULL }, - { "ordmasculine", 365, NULL }, - { "dotlessi", 278, NULL }, - { "sterling", 556, NULL }, - { "notequal", 549, NULL }, - { "Imacron", 278, NULL }, - { "rcommaaccent", 389, NULL }, - { "Zdotaccent", 611, NULL }, - { "acircumflex", 556, NULL }, - { "cacute", 556, NULL }, - { "Ecaron", 667, NULL }, - { "icircumflex", 278, NULL }, - { "braceright", 389, NULL }, - { "quotedblright", 500, NULL }, - { "amacron", 556, NULL }, - { "sacute", 556, NULL }, - { "imacron", 278, NULL }, - { "cent", 556, NULL }, - { "currency", 556, NULL }, - { "logicalnot", 584, NULL }, - { "zdotaccent", 500, NULL }, - { "Atilde", 722, NULL }, - { "breve", 333, NULL }, - { "bar", 280, NULL }, - { "fraction", 167, NULL }, - { "less", 584, NULL }, - { "ecaron", 556, NULL }, - { "guilsinglleft", 333, NULL }, - { "exclam", 333, NULL }, - { "period", 278, NULL }, - { "Rcaron", 722, NULL }, - { "Kcommaaccent", 722, NULL }, - { "greater", 584, NULL }, - { "atilde", 556, NULL }, - { "brokenbar", 280, NULL }, - { "quoteleft", 278, NULL }, - { "Edotaccent", 667, NULL }, - { "onesuperior", 333, NULL } -}; - -static BuiltinFontWidth helveticaObliqueWidthsTab[] = { - { "Ntilde", 722, NULL }, - { "rcaron", 333, NULL }, - { "kcommaaccent", 500, NULL }, - { "Ncommaaccent", 722, NULL }, - { "Zacute", 611, NULL }, - { "comma", 278, NULL }, - { "cedilla", 333, NULL }, - { "plusminus", 584, NULL }, - { "circumflex", 333, NULL }, - { "dotaccent", 333, NULL }, - { "edotaccent", 556, NULL }, - { "asciitilde", 584, NULL }, - { "colon", 278, NULL }, - { "onehalf", 834, NULL }, - { "dollar", 556, NULL }, - { "Lcaron", 556, NULL }, - { "ntilde", 556, NULL }, - { "Aogonek", 667, NULL }, - { "ncommaaccent", 556, NULL }, - { "minus", 584, NULL }, - { "Iogonek", 278, NULL }, - { "zacute", 500, NULL }, - { "yen", 556, NULL }, - { "space", 278, NULL }, - { "Omacron", 778, NULL }, - { "questiondown", 611, NULL }, - { "emdash", 1000, NULL }, - { "Agrave", 667, NULL }, - { "three", 556, NULL }, - { "numbersign", 556, NULL }, - { "lcaron", 299, NULL }, - { "A", 667, NULL }, - { "B", 667, NULL }, - { "C", 722, NULL }, - { "aogonek", 556, NULL }, - { "D", 722, NULL }, - { "E", 667, NULL }, - { "onequarter", 834, NULL }, - { "F", 611, NULL }, - { "G", 778, NULL }, - { "H", 722, NULL }, - { "I", 278, NULL }, - { "J", 500, NULL }, - { "K", 667, NULL }, - { "iogonek", 222, NULL }, - { "backslash", 278, NULL }, - { "L", 556, NULL }, - { "periodcentered", 278, NULL }, - { "M", 833, NULL }, - { "N", 722, NULL }, - { "omacron", 556, NULL }, - { "Tcommaaccent", 611, NULL }, - { "O", 778, NULL }, - { "P", 667, NULL }, - { "Q", 778, NULL }, - { "Uhungarumlaut", 722, NULL }, - { "R", 722, NULL }, - { "Aacute", 667, NULL }, - { "caron", 333, NULL }, - { "S", 667, NULL }, - { "T", 611, NULL }, - { "U", 722, NULL }, - { "agrave", 556, NULL }, - { "V", 667, NULL }, - { "W", 944, NULL }, - { "X", 667, NULL }, - { "question", 556, NULL }, - { "equal", 584, NULL }, - { "Y", 667, NULL }, - { "Z", 611, NULL }, - { "four", 556, NULL }, - { "a", 556, NULL }, - { "Gcommaaccent", 778, NULL }, - { "b", 556, NULL }, - { "c", 500, NULL }, - { "d", 556, NULL }, - { "e", 556, NULL }, - { "f", 278, NULL }, - { "g", 556, NULL }, - { "bullet", 350, NULL }, - { "h", 556, NULL }, - { "i", 222, NULL }, - { "Oslash", 778, NULL }, - { "dagger", 556, NULL }, - { "j", 222, NULL }, - { "k", 500, NULL }, - { "l", 222, NULL }, - { "m", 833, NULL }, - { "n", 556, NULL }, - { "tcommaaccent", 278, NULL }, - { "o", 556, NULL }, - { "ordfeminine", 370, NULL }, - { "ring", 333, NULL }, - { "p", 556, NULL }, - { "q", 556, NULL }, - { "uhungarumlaut", 556, NULL }, - { "r", 333, NULL }, - { "twosuperior", 333, NULL }, - { "aacute", 556, NULL }, - { "s", 500, NULL }, - { "OE", 1000, NULL }, - { "t", 278, NULL }, - { "divide", 584, NULL }, - { "u", 556, NULL }, - { "Ccaron", 722, NULL }, - { "v", 500, NULL }, - { "w", 722, NULL }, - { "x", 500, NULL }, - { "y", 500, NULL }, - { "z", 500, NULL }, - { "Gbreve", 778, NULL }, - { "commaaccent", 250, NULL }, - { "hungarumlaut", 333, NULL }, - { "Idotaccent", 278, NULL }, - { "Nacute", 722, NULL }, - { "quotedbl", 355, NULL }, - { "gcommaaccent", 556, NULL }, - { "mu", 556, NULL }, - { "greaterequal", 549, NULL }, - { "Scaron", 667, NULL }, - { "Lslash", 556, NULL }, - { "semicolon", 278, NULL }, - { "oslash", 611, NULL }, - { "lessequal", 549, NULL }, - { "lozenge", 471, NULL }, - { "parenright", 333, NULL }, - { "ccaron", 500, NULL }, - { "Ecircumflex", 667, NULL }, - { "gbreve", 556, NULL }, - { "trademark", 1000, NULL }, - { "daggerdbl", 556, NULL }, - { "nacute", 556, NULL }, - { "macron", 333, NULL }, - { "Otilde", 778, NULL }, - { "Emacron", 667, NULL }, - { "ellipsis", 1000, NULL }, - { "scaron", 500, NULL }, - { "AE", 1000, NULL }, - { "Ucircumflex", 722, NULL }, - { "lslash", 222, NULL }, - { "quotedblleft", 333, NULL }, - { "guilsinglright", 333, NULL }, - { "hyphen", 333, NULL }, - { "quotesingle", 191, NULL }, - { "eight", 556, NULL }, - { "exclamdown", 333, NULL }, - { "endash", 556, NULL }, - { "oe", 944, NULL }, - { "Abreve", 667, NULL }, - { "Umacron", 722, NULL }, - { "ecircumflex", 556, NULL }, - { "Adieresis", 667, NULL }, - { "copyright", 737, NULL }, - { "Egrave", 667, NULL }, - { "slash", 278, NULL }, - { "Edieresis", 667, NULL }, - { "otilde", 556, NULL }, - { "Idieresis", 278, NULL }, - { "parenleft", 333, NULL }, - { "one", 556, NULL }, - { "emacron", 556, NULL }, - { "Odieresis", 778, NULL }, - { "ucircumflex", 556, NULL }, - { "bracketleft", 278, NULL }, - { "Ugrave", 722, NULL }, - { "quoteright", 222, NULL }, - { "Udieresis", 722, NULL }, - { "perthousand", 1000, NULL }, - { "Ydieresis", 667, NULL }, - { "umacron", 556, NULL }, - { "abreve", 556, NULL }, - { "Eacute", 667, NULL }, - { "adieresis", 556, NULL }, - { "egrave", 556, NULL }, - { "edieresis", 556, NULL }, - { "idieresis", 278, NULL }, - { "Eth", 722, NULL }, - { "ae", 889, NULL }, - { "asterisk", 389, NULL }, - { "odieresis", 556, NULL }, - { "Uacute", 722, NULL }, - { "ugrave", 556, NULL }, - { "nine", 556, NULL }, - { "five", 556, NULL }, - { "udieresis", 556, NULL }, - { "Zcaron", 611, NULL }, - { "Scommaaccent", 667, NULL }, - { "threequarters", 834, NULL }, - { "guillemotright", 556, NULL }, - { "Ccedilla", 722, NULL }, - { "ydieresis", 500, NULL }, - { "tilde", 333, NULL }, - { "at", 1015, NULL }, - { "eacute", 556, NULL }, - { "underscore", 556, NULL }, - { "Euro", 556, NULL }, - { "Dcroat", 722, NULL }, - { "multiply", 584, NULL }, - { "zero", 556, NULL }, - { "eth", 556, NULL }, - { "Scedilla", 667, NULL }, - { "Ograve", 778, NULL }, - { "Racute", 722, NULL }, - { "partialdiff", 476, NULL }, - { "uacute", 556, NULL }, - { "braceleft", 334, NULL }, - { "Thorn", 667, NULL }, - { "zcaron", 500, NULL }, - { "scommaaccent", 500, NULL }, - { "ccedilla", 500, NULL }, - { "Dcaron", 722, NULL }, - { "dcroat", 556, NULL }, - { "Ocircumflex", 778, NULL }, - { "Oacute", 778, NULL }, - { "scedilla", 500, NULL }, - { "ogonek", 333, NULL }, - { "ograve", 556, NULL }, - { "racute", 333, NULL }, - { "Tcaron", 611, NULL }, - { "Eogonek", 667, NULL }, - { "thorn", 556, NULL }, - { "degree", 400, NULL }, - { "registered", 737, NULL }, - { "radical", 453, NULL }, - { "Aring", 667, NULL }, - { "percent", 889, NULL }, - { "six", 556, NULL }, - { "paragraph", 537, NULL }, - { "dcaron", 643, NULL }, - { "Uogonek", 722, NULL }, - { "two", 556, NULL }, - { "summation", 600, NULL }, - { "Igrave", 278, NULL }, - { "Lacute", 556, NULL }, - { "ocircumflex", 556, NULL }, - { "oacute", 556, NULL }, - { "Uring", 722, NULL }, - { "Lcommaaccent", 556, NULL }, - { "tcaron", 317, NULL }, - { "eogonek", 556, NULL }, - { "Delta", 612, NULL }, - { "Ohungarumlaut", 778, NULL }, - { "asciicircum", 469, NULL }, - { "aring", 556, NULL }, - { "grave", 333, NULL }, - { "uogonek", 556, NULL }, - { "bracketright", 278, NULL }, - { "Iacute", 278, NULL }, - { "ampersand", 667, NULL }, - { "igrave", 278, NULL }, - { "lacute", 222, NULL }, - { "Ncaron", 722, NULL }, - { "plus", 584, NULL }, - { "uring", 556, NULL }, - { "quotesinglbase", 222, NULL }, - { "lcommaaccent", 222, NULL }, - { "Yacute", 667, NULL }, - { "ohungarumlaut", 556, NULL }, - { "threesuperior", 333, NULL }, - { "acute", 333, NULL }, - { "section", 556, NULL }, - { "dieresis", 333, NULL }, - { "iacute", 278, NULL }, - { "quotedblbase", 333, NULL }, - { "ncaron", 556, NULL }, - { "florin", 556, NULL }, - { "yacute", 500, NULL }, - { "Rcommaaccent", 722, NULL }, - { "fi", 500, NULL }, - { "fl", 500, NULL }, - { "Acircumflex", 667, NULL }, - { "Cacute", 722, NULL }, - { "Icircumflex", 278, NULL }, - { "guillemotleft", 556, NULL }, - { "germandbls", 611, NULL }, - { "Amacron", 667, NULL }, - { "seven", 556, NULL }, - { "Sacute", 667, NULL }, - { "ordmasculine", 365, NULL }, - { "dotlessi", 278, NULL }, - { "sterling", 556, NULL }, - { "notequal", 549, NULL }, - { "Imacron", 278, NULL }, - { "rcommaaccent", 333, NULL }, - { "Zdotaccent", 611, NULL }, - { "acircumflex", 556, NULL }, - { "cacute", 500, NULL }, - { "Ecaron", 667, NULL }, - { "icircumflex", 278, NULL }, - { "braceright", 334, NULL }, - { "quotedblright", 333, NULL }, - { "amacron", 556, NULL }, - { "sacute", 500, NULL }, - { "imacron", 278, NULL }, - { "cent", 556, NULL }, - { "currency", 556, NULL }, - { "logicalnot", 584, NULL }, - { "zdotaccent", 500, NULL }, - { "Atilde", 667, NULL }, - { "breve", 333, NULL }, - { "bar", 260, NULL }, - { "fraction", 167, NULL }, - { "less", 584, NULL }, - { "ecaron", 556, NULL }, - { "guilsinglleft", 333, NULL }, - { "exclam", 278, NULL }, - { "period", 278, NULL }, - { "Rcaron", 722, NULL }, - { "Kcommaaccent", 667, NULL }, - { "greater", 584, NULL }, - { "atilde", 556, NULL }, - { "brokenbar", 260, NULL }, - { "quoteleft", 222, NULL }, - { "Edotaccent", 667, NULL }, - { "onesuperior", 333, NULL } -}; - -static BuiltinFontWidth symbolWidthsTab[] = { - { "bracketleftex", 384, NULL }, - { "alpha", 631, NULL }, - { "union", 768, NULL }, - { "infinity", 713, NULL }, - { "comma", 250, NULL }, - { "copyrightsans", 790, NULL }, - { "plusminus", 549, NULL }, - { "arrowup", 603, NULL }, - { "apple", 790, NULL }, - { "parenleftbt", 384, NULL }, - { "notelement", 713, NULL }, - { "colon", 278, NULL }, - { "beta", 549, NULL }, - { "braceleftbt", 494, NULL }, - { "Lambda", 686, NULL }, - { "Phi", 763, NULL }, - { "minus", 549, NULL }, - { "space", 250, NULL }, - { "Sigma", 592, NULL }, - { "approxequal", 549, NULL }, - { "minute", 247, NULL }, - { "circleplus", 768, NULL }, - { "Omicron", 722, NULL }, - { "three", 500, NULL }, - { "numbersign", 500, NULL }, - { "lambda", 549, NULL }, - { "phi", 521, NULL }, - { "aleph", 823, NULL }, - { "Tau", 611, NULL }, - { "spade", 753, NULL }, - { "logicaland", 603, NULL }, - { "sigma", 603, NULL }, - { "propersuperset", 713, NULL }, - { "omicron", 549, NULL }, - { "question", 444, NULL }, - { "equal", 549, NULL }, - { "Epsilon", 611, NULL }, - { "emptyset", 823, NULL }, - { "diamond", 753, NULL }, - { "four", 500, NULL }, - { "Mu", 889, NULL }, - { "parenlefttp", 384, NULL }, - { "club", 753, NULL }, - { "bullet", 460, NULL }, - { "Omega", 768, NULL }, - { "tau", 439, NULL }, - { "Upsilon", 690, NULL }, - { "bracelefttp", 494, NULL }, - { "heart", 753, NULL }, - { "divide", 549, NULL }, - { "epsilon", 439, NULL }, - { "logicalor", 603, NULL }, - { "parenleftex", 384, NULL }, - { "greaterequal", 549, NULL }, - { "mu", 576, NULL }, - { "Nu", 722, NULL }, - { "therefore", 863, NULL }, - { "notsubset", 713, NULL }, - { "omega", 686, NULL }, - { "semicolon", 278, NULL }, - { "element", 713, NULL }, - { "upsilon", 576, NULL }, - { "existential", 549, NULL }, - { "integralbt", 686, NULL }, - { "lessequal", 549, NULL }, - { "phi1", 603, NULL }, - { "lozenge", 494, NULL }, - { "trademarkserif", 890, NULL }, - { "parenright", 333, NULL }, - { "reflexsuperset", 713, NULL }, - { "sigma1", 439, NULL }, - { "nu", 521, NULL }, - { "Gamma", 603, NULL }, - { "angleright", 329, NULL }, - { "ellipsis", 1000, NULL }, - { "Rho", 556, NULL }, - { "parenrightbt", 384, NULL }, - { "radicalex", 500, NULL }, - { "eight", 500, NULL }, - { "angleleft", 329, NULL }, - { "arrowdbldown", 603, NULL }, - { "congruent", 549, NULL }, - { "Theta", 741, NULL }, - { "intersection", 768, NULL }, - { "Pi", 768, NULL }, - { "slash", 278, NULL }, - { "registerserif", 790, NULL }, - { "parenleft", 333, NULL }, - { "one", 500, NULL }, - { "gamma", 411, NULL }, - { "bracketleft", 333, NULL }, - { "rho", 549, NULL }, - { "circlemultiply", 768, NULL }, - { "Chi", 722, NULL }, - { "theta", 521, NULL }, - { "pi", 549, NULL }, - { "integraltp", 686, NULL }, - { "Eta", 722, NULL }, - { "product", 823, NULL }, - { "nine", 500, NULL }, - { "five", 500, NULL }, - { "propersubset", 713, NULL }, - { "bracketrightbt", 384, NULL }, - { "trademarksans", 786, NULL }, - { "dotmath", 250, NULL }, - { "integralex", 686, NULL }, - { "chi", 549, NULL }, - { "parenrighttp", 384, NULL }, - { "eta", 603, NULL }, - { "underscore", 500, NULL }, - { "Euro", 750, NULL }, - { "multiply", 549, NULL }, - { "zero", 500, NULL }, - { "partialdiff", 494, NULL }, - { "angle", 768, NULL }, - { "arrowdblleft", 987, NULL }, - { "braceleft", 480, NULL }, - { "parenrightex", 384, NULL }, - { "Rfraktur", 795, NULL }, - { "Zeta", 611, NULL }, - { "braceex", 494, NULL }, - { "arrowdblup", 603, NULL }, - { "arrowdown", 603, NULL }, - { "Ifraktur", 686, NULL }, - { "degree", 400, NULL }, - { "Iota", 333, NULL }, - { "perpendicular", 658, NULL }, - { "radical", 549, NULL }, - { "asteriskmath", 500, NULL }, - { "percent", 833, NULL }, - { "zeta", 494, NULL }, - { "six", 500, NULL }, - { "two", 500, NULL }, - { "weierstrass", 987, NULL }, - { "summation", 713, NULL }, - { "bracketrighttp", 384, NULL }, - { "carriagereturn", 658, NULL }, - { "suchthat", 439, NULL }, - { "arrowvertex", 603, NULL }, - { "Delta", 612, NULL }, - { "iota", 329, NULL }, - { "arrowhorizex", 1000, NULL }, - { "bracketrightex", 384, NULL }, - { "bracketright", 333, NULL }, - { "ampersand", 778, NULL }, - { "plus", 549, NULL }, - { "proportional", 713, NULL }, - { "delta", 494, NULL }, - { "copyrightserif", 790, NULL }, - { "bracerightmid", 494, NULL }, - { "arrowleft", 987, NULL }, - { "second", 411, NULL }, - { "arrowdblboth", 1042, NULL }, - { "florin", 500, NULL }, - { "Psi", 795, NULL }, - { "bracerightbt", 494, NULL }, - { "bracketleftbt", 384, NULL }, - { "seven", 500, NULL }, - { "braceleftmid", 494, NULL }, - { "notequal", 549, NULL }, - { "psi", 686, NULL }, - { "equivalence", 549, NULL }, - { "universal", 713, NULL }, - { "arrowdblright", 987, NULL }, - { "braceright", 480, NULL }, - { "reflexsubset", 713, NULL }, - { "Xi", 645, NULL }, - { "theta1", 631, NULL }, - { "logicalnot", 713, NULL }, - { "Kappa", 722, NULL }, - { "similar", 549, NULL }, - { "bar", 200, NULL }, - { "fraction", 167, NULL }, - { "less", 549, NULL }, - { "registersans", 790, NULL }, - { "omega1", 713, NULL }, - { "exclam", 333, NULL }, - { "Upsilon1", 620, NULL }, - { "bracerighttp", 494, NULL }, - { "xi", 493, NULL }, - { "period", 250, NULL }, - { "Alpha", 722, NULL }, - { "arrowright", 987, NULL }, - { "greater", 549, NULL }, - { "bracketlefttp", 384, NULL }, - { "kappa", 549, NULL }, - { "gradient", 713, NULL }, - { "integral", 274, NULL }, - { "arrowboth", 1042, NULL }, - { "Beta", 667, NULL } -}; - -static BuiltinFontWidth timesBoldWidthsTab[] = { - { "Ntilde", 722, NULL }, - { "rcaron", 444, NULL }, - { "kcommaaccent", 556, NULL }, - { "Ncommaaccent", 722, NULL }, - { "Zacute", 667, NULL }, - { "comma", 250, NULL }, - { "cedilla", 333, NULL }, - { "plusminus", 570, NULL }, - { "circumflex", 333, NULL }, - { "dotaccent", 333, NULL }, - { "edotaccent", 444, NULL }, - { "asciitilde", 520, NULL }, - { "colon", 333, NULL }, - { "onehalf", 750, NULL }, - { "dollar", 500, NULL }, - { "Lcaron", 667, NULL }, - { "ntilde", 556, NULL }, - { "Aogonek", 722, NULL }, - { "ncommaaccent", 556, NULL }, - { "minus", 570, NULL }, - { "Iogonek", 389, NULL }, - { "zacute", 444, NULL }, - { "yen", 500, NULL }, - { "space", 250, NULL }, - { "Omacron", 778, NULL }, - { "questiondown", 500, NULL }, - { "emdash", 1000, NULL }, - { "Agrave", 722, NULL }, - { "three", 500, NULL }, - { "numbersign", 500, NULL }, - { "lcaron", 394, NULL }, - { "A", 722, NULL }, - { "B", 667, NULL }, - { "C", 722, NULL }, - { "aogonek", 500, NULL }, - { "D", 722, NULL }, - { "E", 667, NULL }, - { "onequarter", 750, NULL }, - { "F", 611, NULL }, - { "G", 778, NULL }, - { "H", 778, NULL }, - { "I", 389, NULL }, - { "J", 500, NULL }, - { "K", 778, NULL }, - { "iogonek", 278, NULL }, - { "backslash", 278, NULL }, - { "L", 667, NULL }, - { "periodcentered", 250, NULL }, - { "M", 944, NULL }, - { "N", 722, NULL }, - { "omacron", 500, NULL }, - { "Tcommaaccent", 667, NULL }, - { "O", 778, NULL }, - { "P", 611, NULL }, - { "Q", 778, NULL }, - { "Uhungarumlaut", 722, NULL }, - { "R", 722, NULL }, - { "Aacute", 722, NULL }, - { "caron", 333, NULL }, - { "S", 556, NULL }, - { "T", 667, NULL }, - { "U", 722, NULL }, - { "agrave", 500, NULL }, - { "V", 722, NULL }, - { "W", 1000, NULL }, - { "X", 722, NULL }, - { "question", 500, NULL }, - { "equal", 570, NULL }, - { "Y", 722, NULL }, - { "Z", 667, NULL }, - { "four", 500, NULL }, - { "a", 500, NULL }, - { "Gcommaaccent", 778, NULL }, - { "b", 556, NULL }, - { "c", 444, NULL }, - { "d", 556, NULL }, - { "e", 444, NULL }, - { "f", 333, NULL }, - { "g", 500, NULL }, - { "bullet", 350, NULL }, - { "h", 556, NULL }, - { "i", 278, NULL }, - { "Oslash", 778, NULL }, - { "dagger", 500, NULL }, - { "j", 333, NULL }, - { "k", 556, NULL }, - { "l", 278, NULL }, - { "m", 833, NULL }, - { "n", 556, NULL }, - { "tcommaaccent", 333, NULL }, - { "o", 500, NULL }, - { "ordfeminine", 300, NULL }, - { "ring", 333, NULL }, - { "p", 556, NULL }, - { "q", 556, NULL }, - { "uhungarumlaut", 556, NULL }, - { "r", 444, NULL }, - { "twosuperior", 300, NULL }, - { "aacute", 500, NULL }, - { "s", 389, NULL }, - { "OE", 1000, NULL }, - { "t", 333, NULL }, - { "divide", 570, NULL }, - { "u", 556, NULL }, - { "Ccaron", 722, NULL }, - { "v", 500, NULL }, - { "w", 722, NULL }, - { "x", 500, NULL }, - { "y", 500, NULL }, - { "z", 444, NULL }, - { "Gbreve", 778, NULL }, - { "commaaccent", 250, NULL }, - { "hungarumlaut", 333, NULL }, - { "Idotaccent", 389, NULL }, - { "Nacute", 722, NULL }, - { "quotedbl", 555, NULL }, - { "gcommaaccent", 500, NULL }, - { "mu", 556, NULL }, - { "greaterequal", 549, NULL }, - { "Scaron", 556, NULL }, - { "Lslash", 667, NULL }, - { "semicolon", 333, NULL }, - { "oslash", 500, NULL }, - { "lessequal", 549, NULL }, - { "lozenge", 494, NULL }, - { "parenright", 333, NULL }, - { "ccaron", 444, NULL }, - { "Ecircumflex", 667, NULL }, - { "gbreve", 500, NULL }, - { "trademark", 1000, NULL }, - { "daggerdbl", 500, NULL }, - { "nacute", 556, NULL }, - { "macron", 333, NULL }, - { "Otilde", 778, NULL }, - { "Emacron", 667, NULL }, - { "ellipsis", 1000, NULL }, - { "scaron", 389, NULL }, - { "AE", 1000, NULL }, - { "Ucircumflex", 722, NULL }, - { "lslash", 278, NULL }, - { "quotedblleft", 500, NULL }, - { "guilsinglright", 333, NULL }, - { "hyphen", 333, NULL }, - { "quotesingle", 278, NULL }, - { "eight", 500, NULL }, - { "exclamdown", 333, NULL }, - { "endash", 500, NULL }, - { "oe", 722, NULL }, - { "Abreve", 722, NULL }, - { "Umacron", 722, NULL }, - { "ecircumflex", 444, NULL }, - { "Adieresis", 722, NULL }, - { "copyright", 747, NULL }, - { "Egrave", 667, NULL }, - { "slash", 278, NULL }, - { "Edieresis", 667, NULL }, - { "otilde", 500, NULL }, - { "Idieresis", 389, NULL }, - { "parenleft", 333, NULL }, - { "one", 500, NULL }, - { "emacron", 444, NULL }, - { "Odieresis", 778, NULL }, - { "ucircumflex", 556, NULL }, - { "bracketleft", 333, NULL }, - { "Ugrave", 722, NULL }, - { "quoteright", 333, NULL }, - { "Udieresis", 722, NULL }, - { "perthousand", 1000, NULL }, - { "Ydieresis", 722, NULL }, - { "umacron", 556, NULL }, - { "abreve", 500, NULL }, - { "Eacute", 667, NULL }, - { "adieresis", 500, NULL }, - { "egrave", 444, NULL }, - { "edieresis", 444, NULL }, - { "idieresis", 278, NULL }, - { "Eth", 722, NULL }, - { "ae", 722, NULL }, - { "asterisk", 500, NULL }, - { "odieresis", 500, NULL }, - { "Uacute", 722, NULL }, - { "ugrave", 556, NULL }, - { "nine", 500, NULL }, - { "five", 500, NULL }, - { "udieresis", 556, NULL }, - { "Zcaron", 667, NULL }, - { "Scommaaccent", 556, NULL }, - { "threequarters", 750, NULL }, - { "guillemotright", 500, NULL }, - { "Ccedilla", 722, NULL }, - { "ydieresis", 500, NULL }, - { "tilde", 333, NULL }, - { "at", 930, NULL }, - { "eacute", 444, NULL }, - { "underscore", 500, NULL }, - { "Euro", 500, NULL }, - { "Dcroat", 722, NULL }, - { "multiply", 570, NULL }, - { "zero", 500, NULL }, - { "eth", 500, NULL }, - { "Scedilla", 556, NULL }, - { "Ograve", 778, NULL }, - { "Racute", 722, NULL }, - { "partialdiff", 494, NULL }, - { "uacute", 556, NULL }, - { "braceleft", 394, NULL }, - { "Thorn", 611, NULL }, - { "zcaron", 444, NULL }, - { "scommaaccent", 389, NULL }, - { "ccedilla", 444, NULL }, - { "Dcaron", 722, NULL }, - { "dcroat", 556, NULL }, - { "Ocircumflex", 778, NULL }, - { "Oacute", 778, NULL }, - { "scedilla", 389, NULL }, - { "ogonek", 333, NULL }, - { "ograve", 500, NULL }, - { "racute", 444, NULL }, - { "Tcaron", 667, NULL }, - { "Eogonek", 667, NULL }, - { "thorn", 556, NULL }, - { "degree", 400, NULL }, - { "registered", 747, NULL }, - { "radical", 549, NULL }, - { "Aring", 722, NULL }, - { "percent", 1000, NULL }, - { "six", 500, NULL }, - { "paragraph", 540, NULL }, - { "dcaron", 672, NULL }, - { "Uogonek", 722, NULL }, - { "two", 500, NULL }, - { "summation", 600, NULL }, - { "Igrave", 389, NULL }, - { "Lacute", 667, NULL }, - { "ocircumflex", 500, NULL }, - { "oacute", 500, NULL }, - { "Uring", 722, NULL }, - { "Lcommaaccent", 667, NULL }, - { "tcaron", 416, NULL }, - { "eogonek", 444, NULL }, - { "Delta", 612, NULL }, - { "Ohungarumlaut", 778, NULL }, - { "asciicircum", 581, NULL }, - { "aring", 500, NULL }, - { "grave", 333, NULL }, - { "uogonek", 556, NULL }, - { "bracketright", 333, NULL }, - { "Iacute", 389, NULL }, - { "ampersand", 833, NULL }, - { "igrave", 278, NULL }, - { "lacute", 278, NULL }, - { "Ncaron", 722, NULL }, - { "plus", 570, NULL }, - { "uring", 556, NULL }, - { "quotesinglbase", 333, NULL }, - { "lcommaaccent", 278, NULL }, - { "Yacute", 722, NULL }, - { "ohungarumlaut", 500, NULL }, - { "threesuperior", 300, NULL }, - { "acute", 333, NULL }, - { "section", 500, NULL }, - { "dieresis", 333, NULL }, - { "iacute", 278, NULL }, - { "quotedblbase", 500, NULL }, - { "ncaron", 556, NULL }, - { "florin", 500, NULL }, - { "yacute", 500, NULL }, - { "Rcommaaccent", 722, NULL }, - { "fi", 556, NULL }, - { "fl", 556, NULL }, - { "Acircumflex", 722, NULL }, - { "Cacute", 722, NULL }, - { "Icircumflex", 389, NULL }, - { "guillemotleft", 500, NULL }, - { "germandbls", 556, NULL }, - { "Amacron", 722, NULL }, - { "seven", 500, NULL }, - { "Sacute", 556, NULL }, - { "ordmasculine", 330, NULL }, - { "dotlessi", 278, NULL }, - { "sterling", 500, NULL }, - { "notequal", 549, NULL }, - { "Imacron", 389, NULL }, - { "rcommaaccent", 444, NULL }, - { "Zdotaccent", 667, NULL }, - { "acircumflex", 500, NULL }, - { "cacute", 444, NULL }, - { "Ecaron", 667, NULL }, - { "icircumflex", 278, NULL }, - { "braceright", 394, NULL }, - { "quotedblright", 500, NULL }, - { "amacron", 500, NULL }, - { "sacute", 389, NULL }, - { "imacron", 278, NULL }, - { "cent", 500, NULL }, - { "currency", 500, NULL }, - { "logicalnot", 570, NULL }, - { "zdotaccent", 444, NULL }, - { "Atilde", 722, NULL }, - { "breve", 333, NULL }, - { "bar", 220, NULL }, - { "fraction", 167, NULL }, - { "less", 570, NULL }, - { "ecaron", 444, NULL }, - { "guilsinglleft", 333, NULL }, - { "exclam", 333, NULL }, - { "period", 250, NULL }, - { "Rcaron", 722, NULL }, - { "Kcommaaccent", 778, NULL }, - { "greater", 570, NULL }, - { "atilde", 500, NULL }, - { "brokenbar", 220, NULL }, - { "quoteleft", 333, NULL }, - { "Edotaccent", 667, NULL }, - { "onesuperior", 300, NULL } -}; - -static BuiltinFontWidth timesBoldItalicWidthsTab[] = { - { "Ntilde", 722, NULL }, - { "rcaron", 389, NULL }, - { "kcommaaccent", 500, NULL }, - { "Ncommaaccent", 722, NULL }, - { "Zacute", 611, NULL }, - { "comma", 250, NULL }, - { "cedilla", 333, NULL }, - { "plusminus", 570, NULL }, - { "circumflex", 333, NULL }, - { "dotaccent", 333, NULL }, - { "edotaccent", 444, NULL }, - { "asciitilde", 570, NULL }, - { "colon", 333, NULL }, - { "onehalf", 750, NULL }, - { "dollar", 500, NULL }, - { "Lcaron", 611, NULL }, - { "ntilde", 556, NULL }, - { "Aogonek", 667, NULL }, - { "ncommaaccent", 556, NULL }, - { "minus", 606, NULL }, - { "Iogonek", 389, NULL }, - { "zacute", 389, NULL }, - { "yen", 500, NULL }, - { "space", 250, NULL }, - { "Omacron", 722, NULL }, - { "questiondown", 500, NULL }, - { "emdash", 1000, NULL }, - { "Agrave", 667, NULL }, - { "three", 500, NULL }, - { "numbersign", 500, NULL }, - { "lcaron", 382, NULL }, - { "A", 667, NULL }, - { "B", 667, NULL }, - { "C", 667, NULL }, - { "aogonek", 500, NULL }, - { "D", 722, NULL }, - { "E", 667, NULL }, - { "onequarter", 750, NULL }, - { "F", 667, NULL }, - { "G", 722, NULL }, - { "H", 778, NULL }, - { "I", 389, NULL }, - { "J", 500, NULL }, - { "K", 667, NULL }, - { "iogonek", 278, NULL }, - { "backslash", 278, NULL }, - { "L", 611, NULL }, - { "periodcentered", 250, NULL }, - { "M", 889, NULL }, - { "N", 722, NULL }, - { "omacron", 500, NULL }, - { "Tcommaaccent", 611, NULL }, - { "O", 722, NULL }, - { "P", 611, NULL }, - { "Q", 722, NULL }, - { "Uhungarumlaut", 722, NULL }, - { "R", 667, NULL }, - { "Aacute", 667, NULL }, - { "caron", 333, NULL }, - { "S", 556, NULL }, - { "T", 611, NULL }, - { "U", 722, NULL }, - { "agrave", 500, NULL }, - { "V", 667, NULL }, - { "W", 889, NULL }, - { "X", 667, NULL }, - { "question", 500, NULL }, - { "equal", 570, NULL }, - { "Y", 611, NULL }, - { "Z", 611, NULL }, - { "four", 500, NULL }, - { "a", 500, NULL }, - { "Gcommaaccent", 722, NULL }, - { "b", 500, NULL }, - { "c", 444, NULL }, - { "d", 500, NULL }, - { "e", 444, NULL }, - { "f", 333, NULL }, - { "g", 500, NULL }, - { "bullet", 350, NULL }, - { "h", 556, NULL }, - { "i", 278, NULL }, - { "Oslash", 722, NULL }, - { "dagger", 500, NULL }, - { "j", 278, NULL }, - { "k", 500, NULL }, - { "l", 278, NULL }, - { "m", 778, NULL }, - { "n", 556, NULL }, - { "tcommaaccent", 278, NULL }, - { "o", 500, NULL }, - { "ordfeminine", 266, NULL }, - { "ring", 333, NULL }, - { "p", 500, NULL }, - { "q", 500, NULL }, - { "uhungarumlaut", 556, NULL }, - { "r", 389, NULL }, - { "twosuperior", 300, NULL }, - { "aacute", 500, NULL }, - { "s", 389, NULL }, - { "OE", 944, NULL }, - { "t", 278, NULL }, - { "divide", 570, NULL }, - { "u", 556, NULL }, - { "Ccaron", 667, NULL }, - { "v", 444, NULL }, - { "w", 667, NULL }, - { "x", 500, NULL }, - { "y", 444, NULL }, - { "z", 389, NULL }, - { "Gbreve", 722, NULL }, - { "commaaccent", 250, NULL }, - { "hungarumlaut", 333, NULL }, - { "Idotaccent", 389, NULL }, - { "Nacute", 722, NULL }, - { "quotedbl", 555, NULL }, - { "gcommaaccent", 500, NULL }, - { "mu", 576, NULL }, - { "greaterequal", 549, NULL }, - { "Scaron", 556, NULL }, - { "Lslash", 611, NULL }, - { "semicolon", 333, NULL }, - { "oslash", 500, NULL }, - { "lessequal", 549, NULL }, - { "lozenge", 494, NULL }, - { "parenright", 333, NULL }, - { "ccaron", 444, NULL }, - { "Ecircumflex", 667, NULL }, - { "gbreve", 500, NULL }, - { "trademark", 1000, NULL }, - { "daggerdbl", 500, NULL }, - { "nacute", 556, NULL }, - { "macron", 333, NULL }, - { "Otilde", 722, NULL }, - { "Emacron", 667, NULL }, - { "ellipsis", 1000, NULL }, - { "scaron", 389, NULL }, - { "AE", 944, NULL }, - { "Ucircumflex", 722, NULL }, - { "lslash", 278, NULL }, - { "quotedblleft", 500, NULL }, - { "guilsinglright", 333, NULL }, - { "hyphen", 333, NULL }, - { "quotesingle", 278, NULL }, - { "eight", 500, NULL }, - { "exclamdown", 389, NULL }, - { "endash", 500, NULL }, - { "oe", 722, NULL }, - { "Abreve", 667, NULL }, - { "Umacron", 722, NULL }, - { "ecircumflex", 444, NULL }, - { "Adieresis", 667, NULL }, - { "copyright", 747, NULL }, - { "Egrave", 667, NULL }, - { "slash", 278, NULL }, - { "Edieresis", 667, NULL }, - { "otilde", 500, NULL }, - { "Idieresis", 389, NULL }, - { "parenleft", 333, NULL }, - { "one", 500, NULL }, - { "emacron", 444, NULL }, - { "Odieresis", 722, NULL }, - { "ucircumflex", 556, NULL }, - { "bracketleft", 333, NULL }, - { "Ugrave", 722, NULL }, - { "quoteright", 333, NULL }, - { "Udieresis", 722, NULL }, - { "perthousand", 1000, NULL }, - { "Ydieresis", 611, NULL }, - { "umacron", 556, NULL }, - { "abreve", 500, NULL }, - { "Eacute", 667, NULL }, - { "adieresis", 500, NULL }, - { "egrave", 444, NULL }, - { "edieresis", 444, NULL }, - { "idieresis", 278, NULL }, - { "Eth", 722, NULL }, - { "ae", 722, NULL }, - { "asterisk", 500, NULL }, - { "odieresis", 500, NULL }, - { "Uacute", 722, NULL }, - { "ugrave", 556, NULL }, - { "nine", 500, NULL }, - { "five", 500, NULL }, - { "udieresis", 556, NULL }, - { "Zcaron", 611, NULL }, - { "Scommaaccent", 556, NULL }, - { "threequarters", 750, NULL }, - { "guillemotright", 500, NULL }, - { "Ccedilla", 667, NULL }, - { "ydieresis", 444, NULL }, - { "tilde", 333, NULL }, - { "at", 832, NULL }, - { "eacute", 444, NULL }, - { "underscore", 500, NULL }, - { "Euro", 500, NULL }, - { "Dcroat", 722, NULL }, - { "multiply", 570, NULL }, - { "zero", 500, NULL }, - { "eth", 500, NULL }, - { "Scedilla", 556, NULL }, - { "Ograve", 722, NULL }, - { "Racute", 667, NULL }, - { "partialdiff", 494, NULL }, - { "uacute", 556, NULL }, - { "braceleft", 348, NULL }, - { "Thorn", 611, NULL }, - { "zcaron", 389, NULL }, - { "scommaaccent", 389, NULL }, - { "ccedilla", 444, NULL }, - { "Dcaron", 722, NULL }, - { "dcroat", 500, NULL }, - { "Ocircumflex", 722, NULL }, - { "Oacute", 722, NULL }, - { "scedilla", 389, NULL }, - { "ogonek", 333, NULL }, - { "ograve", 500, NULL }, - { "racute", 389, NULL }, - { "Tcaron", 611, NULL }, - { "Eogonek", 667, NULL }, - { "thorn", 500, NULL }, - { "degree", 400, NULL }, - { "registered", 747, NULL }, - { "radical", 549, NULL }, - { "Aring", 667, NULL }, - { "percent", 833, NULL }, - { "six", 500, NULL }, - { "paragraph", 500, NULL }, - { "dcaron", 608, NULL }, - { "Uogonek", 722, NULL }, - { "two", 500, NULL }, - { "summation", 600, NULL }, - { "Igrave", 389, NULL }, - { "Lacute", 611, NULL }, - { "ocircumflex", 500, NULL }, - { "oacute", 500, NULL }, - { "Uring", 722, NULL }, - { "Lcommaaccent", 611, NULL }, - { "tcaron", 366, NULL }, - { "eogonek", 444, NULL }, - { "Delta", 612, NULL }, - { "Ohungarumlaut", 722, NULL }, - { "asciicircum", 570, NULL }, - { "aring", 500, NULL }, - { "grave", 333, NULL }, - { "uogonek", 556, NULL }, - { "bracketright", 333, NULL }, - { "Iacute", 389, NULL }, - { "ampersand", 778, NULL }, - { "igrave", 278, NULL }, - { "lacute", 278, NULL }, - { "Ncaron", 722, NULL }, - { "plus", 570, NULL }, - { "uring", 556, NULL }, - { "quotesinglbase", 333, NULL }, - { "lcommaaccent", 278, NULL }, - { "Yacute", 611, NULL }, - { "ohungarumlaut", 500, NULL }, - { "threesuperior", 300, NULL }, - { "acute", 333, NULL }, - { "section", 500, NULL }, - { "dieresis", 333, NULL }, - { "iacute", 278, NULL }, - { "quotedblbase", 500, NULL }, - { "ncaron", 556, NULL }, - { "florin", 500, NULL }, - { "yacute", 444, NULL }, - { "Rcommaaccent", 667, NULL }, - { "fi", 556, NULL }, - { "fl", 556, NULL }, - { "Acircumflex", 667, NULL }, - { "Cacute", 667, NULL }, - { "Icircumflex", 389, NULL }, - { "guillemotleft", 500, NULL }, - { "germandbls", 500, NULL }, - { "Amacron", 667, NULL }, - { "seven", 500, NULL }, - { "Sacute", 556, NULL }, - { "ordmasculine", 300, NULL }, - { "dotlessi", 278, NULL }, - { "sterling", 500, NULL }, - { "notequal", 549, NULL }, - { "Imacron", 389, NULL }, - { "rcommaaccent", 389, NULL }, - { "Zdotaccent", 611, NULL }, - { "acircumflex", 500, NULL }, - { "cacute", 444, NULL }, - { "Ecaron", 667, NULL }, - { "icircumflex", 278, NULL }, - { "braceright", 348, NULL }, - { "quotedblright", 500, NULL }, - { "amacron", 500, NULL }, - { "sacute", 389, NULL }, - { "imacron", 278, NULL }, - { "cent", 500, NULL }, - { "currency", 500, NULL }, - { "logicalnot", 606, NULL }, - { "zdotaccent", 389, NULL }, - { "Atilde", 667, NULL }, - { "breve", 333, NULL }, - { "bar", 220, NULL }, - { "fraction", 167, NULL }, - { "less", 570, NULL }, - { "ecaron", 444, NULL }, - { "guilsinglleft", 333, NULL }, - { "exclam", 389, NULL }, - { "period", 250, NULL }, - { "Rcaron", 667, NULL }, - { "Kcommaaccent", 667, NULL }, - { "greater", 570, NULL }, - { "atilde", 500, NULL }, - { "brokenbar", 220, NULL }, - { "quoteleft", 333, NULL }, - { "Edotaccent", 667, NULL }, - { "onesuperior", 300, NULL } -}; - -static BuiltinFontWidth timesItalicWidthsTab[] = { - { "Ntilde", 667, NULL }, - { "rcaron", 389, NULL }, - { "kcommaaccent", 444, NULL }, - { "Ncommaaccent", 667, NULL }, - { "Zacute", 556, NULL }, - { "comma", 250, NULL }, - { "cedilla", 333, NULL }, - { "plusminus", 675, NULL }, - { "circumflex", 333, NULL }, - { "dotaccent", 333, NULL }, - { "edotaccent", 444, NULL }, - { "asciitilde", 541, NULL }, - { "colon", 333, NULL }, - { "onehalf", 750, NULL }, - { "dollar", 500, NULL }, - { "Lcaron", 611, NULL }, - { "ntilde", 500, NULL }, - { "Aogonek", 611, NULL }, - { "ncommaaccent", 500, NULL }, - { "minus", 675, NULL }, - { "Iogonek", 333, NULL }, - { "zacute", 389, NULL }, - { "yen", 500, NULL }, - { "space", 250, NULL }, - { "Omacron", 722, NULL }, - { "questiondown", 500, NULL }, - { "emdash", 889, NULL }, - { "Agrave", 611, NULL }, - { "three", 500, NULL }, - { "numbersign", 500, NULL }, - { "lcaron", 300, NULL }, - { "A", 611, NULL }, - { "B", 611, NULL }, - { "C", 667, NULL }, - { "aogonek", 500, NULL }, - { "D", 722, NULL }, - { "E", 611, NULL }, - { "onequarter", 750, NULL }, - { "F", 611, NULL }, - { "G", 722, NULL }, - { "H", 722, NULL }, - { "I", 333, NULL }, - { "J", 444, NULL }, - { "K", 667, NULL }, - { "iogonek", 278, NULL }, - { "backslash", 278, NULL }, - { "L", 556, NULL }, - { "periodcentered", 250, NULL }, - { "M", 833, NULL }, - { "N", 667, NULL }, - { "omacron", 500, NULL }, - { "Tcommaaccent", 556, NULL }, - { "O", 722, NULL }, - { "P", 611, NULL }, - { "Q", 722, NULL }, - { "Uhungarumlaut", 722, NULL }, - { "R", 611, NULL }, - { "Aacute", 611, NULL }, - { "caron", 333, NULL }, - { "S", 500, NULL }, - { "T", 556, NULL }, - { "U", 722, NULL }, - { "agrave", 500, NULL }, - { "V", 611, NULL }, - { "W", 833, NULL }, - { "X", 611, NULL }, - { "question", 500, NULL }, - { "equal", 675, NULL }, - { "Y", 556, NULL }, - { "Z", 556, NULL }, - { "four", 500, NULL }, - { "a", 500, NULL }, - { "Gcommaaccent", 722, NULL }, - { "b", 500, NULL }, - { "c", 444, NULL }, - { "d", 500, NULL }, - { "e", 444, NULL }, - { "f", 278, NULL }, - { "g", 500, NULL }, - { "bullet", 350, NULL }, - { "h", 500, NULL }, - { "i", 278, NULL }, - { "Oslash", 722, NULL }, - { "dagger", 500, NULL }, - { "j", 278, NULL }, - { "k", 444, NULL }, - { "l", 278, NULL }, - { "m", 722, NULL }, - { "n", 500, NULL }, - { "tcommaaccent", 278, NULL }, - { "o", 500, NULL }, - { "ordfeminine", 276, NULL }, - { "ring", 333, NULL }, - { "p", 500, NULL }, - { "q", 500, NULL }, - { "uhungarumlaut", 500, NULL }, - { "r", 389, NULL }, - { "twosuperior", 300, NULL }, - { "aacute", 500, NULL }, - { "s", 389, NULL }, - { "OE", 944, NULL }, - { "t", 278, NULL }, - { "divide", 675, NULL }, - { "u", 500, NULL }, - { "Ccaron", 667, NULL }, - { "v", 444, NULL }, - { "w", 667, NULL }, - { "x", 444, NULL }, - { "y", 444, NULL }, - { "z", 389, NULL }, - { "Gbreve", 722, NULL }, - { "commaaccent", 250, NULL }, - { "hungarumlaut", 333, NULL }, - { "Idotaccent", 333, NULL }, - { "Nacute", 667, NULL }, - { "quotedbl", 420, NULL }, - { "gcommaaccent", 500, NULL }, - { "mu", 500, NULL }, - { "greaterequal", 549, NULL }, - { "Scaron", 500, NULL }, - { "Lslash", 556, NULL }, - { "semicolon", 333, NULL }, - { "oslash", 500, NULL }, - { "lessequal", 549, NULL }, - { "lozenge", 471, NULL }, - { "parenright", 333, NULL }, - { "ccaron", 444, NULL }, - { "Ecircumflex", 611, NULL }, - { "gbreve", 500, NULL }, - { "trademark", 980, NULL }, - { "daggerdbl", 500, NULL }, - { "nacute", 500, NULL }, - { "macron", 333, NULL }, - { "Otilde", 722, NULL }, - { "Emacron", 611, NULL }, - { "ellipsis", 889, NULL }, - { "scaron", 389, NULL }, - { "AE", 889, NULL }, - { "Ucircumflex", 722, NULL }, - { "lslash", 278, NULL }, - { "quotedblleft", 556, NULL }, - { "guilsinglright", 333, NULL }, - { "hyphen", 333, NULL }, - { "quotesingle", 214, NULL }, - { "eight", 500, NULL }, - { "exclamdown", 389, NULL }, - { "endash", 500, NULL }, - { "oe", 667, NULL }, - { "Abreve", 611, NULL }, - { "Umacron", 722, NULL }, - { "ecircumflex", 444, NULL }, - { "Adieresis", 611, NULL }, - { "copyright", 760, NULL }, - { "Egrave", 611, NULL }, - { "slash", 278, NULL }, - { "Edieresis", 611, NULL }, - { "otilde", 500, NULL }, - { "Idieresis", 333, NULL }, - { "parenleft", 333, NULL }, - { "one", 500, NULL }, - { "emacron", 444, NULL }, - { "Odieresis", 722, NULL }, - { "ucircumflex", 500, NULL }, - { "bracketleft", 389, NULL }, - { "Ugrave", 722, NULL }, - { "quoteright", 333, NULL }, - { "Udieresis", 722, NULL }, - { "perthousand", 1000, NULL }, - { "Ydieresis", 556, NULL }, - { "umacron", 500, NULL }, - { "abreve", 500, NULL }, - { "Eacute", 611, NULL }, - { "adieresis", 500, NULL }, - { "egrave", 444, NULL }, - { "edieresis", 444, NULL }, - { "idieresis", 278, NULL }, - { "Eth", 722, NULL }, - { "ae", 667, NULL }, - { "asterisk", 500, NULL }, - { "odieresis", 500, NULL }, - { "Uacute", 722, NULL }, - { "ugrave", 500, NULL }, - { "nine", 500, NULL }, - { "five", 500, NULL }, - { "udieresis", 500, NULL }, - { "Zcaron", 556, NULL }, - { "Scommaaccent", 500, NULL }, - { "threequarters", 750, NULL }, - { "guillemotright", 500, NULL }, - { "Ccedilla", 667, NULL }, - { "ydieresis", 444, NULL }, - { "tilde", 333, NULL }, - { "at", 920, NULL }, - { "eacute", 444, NULL }, - { "underscore", 500, NULL }, - { "Euro", 500, NULL }, - { "Dcroat", 722, NULL }, - { "multiply", 675, NULL }, - { "zero", 500, NULL }, - { "eth", 500, NULL }, - { "Scedilla", 500, NULL }, - { "Ograve", 722, NULL }, - { "Racute", 611, NULL }, - { "partialdiff", 476, NULL }, - { "uacute", 500, NULL }, - { "braceleft", 400, NULL }, - { "Thorn", 611, NULL }, - { "zcaron", 389, NULL }, - { "scommaaccent", 389, NULL }, - { "ccedilla", 444, NULL }, - { "Dcaron", 722, NULL }, - { "dcroat", 500, NULL }, - { "Ocircumflex", 722, NULL }, - { "Oacute", 722, NULL }, - { "scedilla", 389, NULL }, - { "ogonek", 333, NULL }, - { "ograve", 500, NULL }, - { "racute", 389, NULL }, - { "Tcaron", 556, NULL }, - { "Eogonek", 611, NULL }, - { "thorn", 500, NULL }, - { "degree", 400, NULL }, - { "registered", 760, NULL }, - { "radical", 453, NULL }, - { "Aring", 611, NULL }, - { "percent", 833, NULL }, - { "six", 500, NULL }, - { "paragraph", 523, NULL }, - { "dcaron", 544, NULL }, - { "Uogonek", 722, NULL }, - { "two", 500, NULL }, - { "summation", 600, NULL }, - { "Igrave", 333, NULL }, - { "Lacute", 556, NULL }, - { "ocircumflex", 500, NULL }, - { "oacute", 500, NULL }, - { "Uring", 722, NULL }, - { "Lcommaaccent", 556, NULL }, - { "tcaron", 300, NULL }, - { "eogonek", 444, NULL }, - { "Delta", 612, NULL }, - { "Ohungarumlaut", 722, NULL }, - { "asciicircum", 422, NULL }, - { "aring", 500, NULL }, - { "grave", 333, NULL }, - { "uogonek", 500, NULL }, - { "bracketright", 389, NULL }, - { "Iacute", 333, NULL }, - { "ampersand", 778, NULL }, - { "igrave", 278, NULL }, - { "lacute", 278, NULL }, - { "Ncaron", 667, NULL }, - { "plus", 675, NULL }, - { "uring", 500, NULL }, - { "quotesinglbase", 333, NULL }, - { "lcommaaccent", 278, NULL }, - { "Yacute", 556, NULL }, - { "ohungarumlaut", 500, NULL }, - { "threesuperior", 300, NULL }, - { "acute", 333, NULL }, - { "section", 500, NULL }, - { "dieresis", 333, NULL }, - { "iacute", 278, NULL }, - { "quotedblbase", 556, NULL }, - { "ncaron", 500, NULL }, - { "florin", 500, NULL }, - { "yacute", 444, NULL }, - { "Rcommaaccent", 611, NULL }, - { "fi", 500, NULL }, - { "fl", 500, NULL }, - { "Acircumflex", 611, NULL }, - { "Cacute", 667, NULL }, - { "Icircumflex", 333, NULL }, - { "guillemotleft", 500, NULL }, - { "germandbls", 500, NULL }, - { "Amacron", 611, NULL }, - { "seven", 500, NULL }, - { "Sacute", 500, NULL }, - { "ordmasculine", 310, NULL }, - { "dotlessi", 278, NULL }, - { "sterling", 500, NULL }, - { "notequal", 549, NULL }, - { "Imacron", 333, NULL }, - { "rcommaaccent", 389, NULL }, - { "Zdotaccent", 556, NULL }, - { "acircumflex", 500, NULL }, - { "cacute", 444, NULL }, - { "Ecaron", 611, NULL }, - { "icircumflex", 278, NULL }, - { "braceright", 400, NULL }, - { "quotedblright", 556, NULL }, - { "amacron", 500, NULL }, - { "sacute", 389, NULL }, - { "imacron", 278, NULL }, - { "cent", 500, NULL }, - { "currency", 500, NULL }, - { "logicalnot", 675, NULL }, - { "zdotaccent", 389, NULL }, - { "Atilde", 611, NULL }, - { "breve", 333, NULL }, - { "bar", 275, NULL }, - { "fraction", 167, NULL }, - { "less", 675, NULL }, - { "ecaron", 444, NULL }, - { "guilsinglleft", 333, NULL }, - { "exclam", 333, NULL }, - { "period", 250, NULL }, - { "Rcaron", 611, NULL }, - { "Kcommaaccent", 667, NULL }, - { "greater", 675, NULL }, - { "atilde", 500, NULL }, - { "brokenbar", 275, NULL }, - { "quoteleft", 333, NULL }, - { "Edotaccent", 611, NULL }, - { "onesuperior", 300, NULL } -}; - -static BuiltinFontWidth timesRomanWidthsTab[] = { - { "Ntilde", 722, NULL }, - { "rcaron", 333, NULL }, - { "kcommaaccent", 500, NULL }, - { "Ncommaaccent", 722, NULL }, - { "Zacute", 611, NULL }, - { "comma", 250, NULL }, - { "cedilla", 333, NULL }, - { "plusminus", 564, NULL }, - { "circumflex", 333, NULL }, - { "dotaccent", 333, NULL }, - { "edotaccent", 444, NULL }, - { "asciitilde", 541, NULL }, - { "colon", 278, NULL }, - { "onehalf", 750, NULL }, - { "dollar", 500, NULL }, - { "Lcaron", 611, NULL }, - { "ntilde", 500, NULL }, - { "Aogonek", 722, NULL }, - { "ncommaaccent", 500, NULL }, - { "minus", 564, NULL }, - { "Iogonek", 333, NULL }, - { "zacute", 444, NULL }, - { "yen", 500, NULL }, - { "space", 250, NULL }, - { "Omacron", 722, NULL }, - { "questiondown", 444, NULL }, - { "emdash", 1000, NULL }, - { "Agrave", 722, NULL }, - { "three", 500, NULL }, - { "numbersign", 500, NULL }, - { "lcaron", 344, NULL }, - { "A", 722, NULL }, - { "B", 667, NULL }, - { "C", 667, NULL }, - { "aogonek", 444, NULL }, - { "D", 722, NULL }, - { "E", 611, NULL }, - { "onequarter", 750, NULL }, - { "F", 556, NULL }, - { "G", 722, NULL }, - { "H", 722, NULL }, - { "I", 333, NULL }, - { "J", 389, NULL }, - { "K", 722, NULL }, - { "iogonek", 278, NULL }, - { "backslash", 278, NULL }, - { "L", 611, NULL }, - { "periodcentered", 250, NULL }, - { "M", 889, NULL }, - { "N", 722, NULL }, - { "omacron", 500, NULL }, - { "Tcommaaccent", 611, NULL }, - { "O", 722, NULL }, - { "P", 556, NULL }, - { "Q", 722, NULL }, - { "Uhungarumlaut", 722, NULL }, - { "R", 667, NULL }, - { "Aacute", 722, NULL }, - { "caron", 333, NULL }, - { "S", 556, NULL }, - { "T", 611, NULL }, - { "U", 722, NULL }, - { "agrave", 444, NULL }, - { "V", 722, NULL }, - { "W", 944, NULL }, - { "X", 722, NULL }, - { "question", 444, NULL }, - { "equal", 564, NULL }, - { "Y", 722, NULL }, - { "Z", 611, NULL }, - { "four", 500, NULL }, - { "a", 444, NULL }, - { "Gcommaaccent", 722, NULL }, - { "b", 500, NULL }, - { "c", 444, NULL }, - { "d", 500, NULL }, - { "e", 444, NULL }, - { "f", 333, NULL }, - { "g", 500, NULL }, - { "bullet", 350, NULL }, - { "h", 500, NULL }, - { "i", 278, NULL }, - { "Oslash", 722, NULL }, - { "dagger", 500, NULL }, - { "j", 278, NULL }, - { "k", 500, NULL }, - { "l", 278, NULL }, - { "m", 778, NULL }, - { "n", 500, NULL }, - { "tcommaaccent", 278, NULL }, - { "o", 500, NULL }, - { "ordfeminine", 276, NULL }, - { "ring", 333, NULL }, - { "p", 500, NULL }, - { "q", 500, NULL }, - { "uhungarumlaut", 500, NULL }, - { "r", 333, NULL }, - { "twosuperior", 300, NULL }, - { "aacute", 444, NULL }, - { "s", 389, NULL }, - { "OE", 889, NULL }, - { "t", 278, NULL }, - { "divide", 564, NULL }, - { "u", 500, NULL }, - { "Ccaron", 667, NULL }, - { "v", 500, NULL }, - { "w", 722, NULL }, - { "x", 500, NULL }, - { "y", 500, NULL }, - { "z", 444, NULL }, - { "Gbreve", 722, NULL }, - { "commaaccent", 250, NULL }, - { "hungarumlaut", 333, NULL }, - { "Idotaccent", 333, NULL }, - { "Nacute", 722, NULL }, - { "quotedbl", 408, NULL }, - { "gcommaaccent", 500, NULL }, - { "mu", 500, NULL }, - { "greaterequal", 549, NULL }, - { "Scaron", 556, NULL }, - { "Lslash", 611, NULL }, - { "semicolon", 278, NULL }, - { "oslash", 500, NULL }, - { "lessequal", 549, NULL }, - { "lozenge", 471, NULL }, - { "parenright", 333, NULL }, - { "ccaron", 444, NULL }, - { "Ecircumflex", 611, NULL }, - { "gbreve", 500, NULL }, - { "trademark", 980, NULL }, - { "daggerdbl", 500, NULL }, - { "nacute", 500, NULL }, - { "macron", 333, NULL }, - { "Otilde", 722, NULL }, - { "Emacron", 611, NULL }, - { "ellipsis", 1000, NULL }, - { "scaron", 389, NULL }, - { "AE", 889, NULL }, - { "Ucircumflex", 722, NULL }, - { "lslash", 278, NULL }, - { "quotedblleft", 444, NULL }, - { "guilsinglright", 333, NULL }, - { "hyphen", 333, NULL }, - { "quotesingle", 180, NULL }, - { "eight", 500, NULL }, - { "exclamdown", 333, NULL }, - { "endash", 500, NULL }, - { "oe", 722, NULL }, - { "Abreve", 722, NULL }, - { "Umacron", 722, NULL }, - { "ecircumflex", 444, NULL }, - { "Adieresis", 722, NULL }, - { "copyright", 760, NULL }, - { "Egrave", 611, NULL }, - { "slash", 278, NULL }, - { "Edieresis", 611, NULL }, - { "otilde", 500, NULL }, - { "Idieresis", 333, NULL }, - { "parenleft", 333, NULL }, - { "one", 500, NULL }, - { "emacron", 444, NULL }, - { "Odieresis", 722, NULL }, - { "ucircumflex", 500, NULL }, - { "bracketleft", 333, NULL }, - { "Ugrave", 722, NULL }, - { "quoteright", 333, NULL }, - { "Udieresis", 722, NULL }, - { "perthousand", 1000, NULL }, - { "Ydieresis", 722, NULL }, - { "umacron", 500, NULL }, - { "abreve", 444, NULL }, - { "Eacute", 611, NULL }, - { "adieresis", 444, NULL }, - { "egrave", 444, NULL }, - { "edieresis", 444, NULL }, - { "idieresis", 278, NULL }, - { "Eth", 722, NULL }, - { "ae", 667, NULL }, - { "asterisk", 500, NULL }, - { "odieresis", 500, NULL }, - { "Uacute", 722, NULL }, - { "ugrave", 500, NULL }, - { "nine", 500, NULL }, - { "five", 500, NULL }, - { "udieresis", 500, NULL }, - { "Zcaron", 611, NULL }, - { "Scommaaccent", 556, NULL }, - { "threequarters", 750, NULL }, - { "guillemotright", 500, NULL }, - { "Ccedilla", 667, NULL }, - { "ydieresis", 500, NULL }, - { "tilde", 333, NULL }, - { "at", 921, NULL }, - { "eacute", 444, NULL }, - { "underscore", 500, NULL }, - { "Euro", 500, NULL }, - { "Dcroat", 722, NULL }, - { "multiply", 564, NULL }, - { "zero", 500, NULL }, - { "eth", 500, NULL }, - { "Scedilla", 556, NULL }, - { "Ograve", 722, NULL }, - { "Racute", 667, NULL }, - { "partialdiff", 476, NULL }, - { "uacute", 500, NULL }, - { "braceleft", 480, NULL }, - { "Thorn", 556, NULL }, - { "zcaron", 444, NULL }, - { "scommaaccent", 389, NULL }, - { "ccedilla", 444, NULL }, - { "Dcaron", 722, NULL }, - { "dcroat", 500, NULL }, - { "Ocircumflex", 722, NULL }, - { "Oacute", 722, NULL }, - { "scedilla", 389, NULL }, - { "ogonek", 333, NULL }, - { "ograve", 500, NULL }, - { "racute", 333, NULL }, - { "Tcaron", 611, NULL }, - { "Eogonek", 611, NULL }, - { "thorn", 500, NULL }, - { "degree", 400, NULL }, - { "registered", 760, NULL }, - { "radical", 453, NULL }, - { "Aring", 722, NULL }, - { "percent", 833, NULL }, - { "six", 500, NULL }, - { "paragraph", 453, NULL }, - { "dcaron", 588, NULL }, - { "Uogonek", 722, NULL }, - { "two", 500, NULL }, - { "summation", 600, NULL }, - { "Igrave", 333, NULL }, - { "Lacute", 611, NULL }, - { "ocircumflex", 500, NULL }, - { "oacute", 500, NULL }, - { "Uring", 722, NULL }, - { "Lcommaaccent", 611, NULL }, - { "tcaron", 326, NULL }, - { "eogonek", 444, NULL }, - { "Delta", 612, NULL }, - { "Ohungarumlaut", 722, NULL }, - { "asciicircum", 469, NULL }, - { "aring", 444, NULL }, - { "grave", 333, NULL }, - { "uogonek", 500, NULL }, - { "bracketright", 333, NULL }, - { "Iacute", 333, NULL }, - { "ampersand", 778, NULL }, - { "igrave", 278, NULL }, - { "lacute", 278, NULL }, - { "Ncaron", 722, NULL }, - { "plus", 564, NULL }, - { "uring", 500, NULL }, - { "quotesinglbase", 333, NULL }, - { "lcommaaccent", 278, NULL }, - { "Yacute", 722, NULL }, - { "ohungarumlaut", 500, NULL }, - { "threesuperior", 300, NULL }, - { "acute", 333, NULL }, - { "section", 500, NULL }, - { "dieresis", 333, NULL }, - { "iacute", 278, NULL }, - { "quotedblbase", 444, NULL }, - { "ncaron", 500, NULL }, - { "florin", 500, NULL }, - { "yacute", 500, NULL }, - { "Rcommaaccent", 667, NULL }, - { "fi", 556, NULL }, - { "fl", 556, NULL }, - { "Acircumflex", 722, NULL }, - { "Cacute", 667, NULL }, - { "Icircumflex", 333, NULL }, - { "guillemotleft", 500, NULL }, - { "germandbls", 500, NULL }, - { "Amacron", 722, NULL }, - { "seven", 500, NULL }, - { "Sacute", 556, NULL }, - { "ordmasculine", 310, NULL }, - { "dotlessi", 278, NULL }, - { "sterling", 500, NULL }, - { "notequal", 549, NULL }, - { "Imacron", 333, NULL }, - { "rcommaaccent", 333, NULL }, - { "Zdotaccent", 611, NULL }, - { "acircumflex", 444, NULL }, - { "cacute", 444, NULL }, - { "Ecaron", 611, NULL }, - { "icircumflex", 278, NULL }, - { "braceright", 480, NULL }, - { "quotedblright", 444, NULL }, - { "amacron", 444, NULL }, - { "sacute", 389, NULL }, - { "imacron", 278, NULL }, - { "cent", 500, NULL }, - { "currency", 500, NULL }, - { "logicalnot", 564, NULL }, - { "zdotaccent", 444, NULL }, - { "Atilde", 722, NULL }, - { "breve", 333, NULL }, - { "bar", 200, NULL }, - { "fraction", 167, NULL }, - { "less", 564, NULL }, - { "ecaron", 444, NULL }, - { "guilsinglleft", 333, NULL }, - { "exclam", 333, NULL }, - { "period", 250, NULL }, - { "Rcaron", 667, NULL }, - { "Kcommaaccent", 722, NULL }, - { "greater", 564, NULL }, - { "atilde", 444, NULL }, - { "brokenbar", 200, NULL }, - { "quoteleft", 333, NULL }, - { "Edotaccent", 611, NULL }, - { "onesuperior", 300, NULL } -}; - -static BuiltinFontWidth zapfDingbatsWidthsTab[] = { - { "a81", 438, NULL }, - { "a82", 138, NULL }, - { "a83", 277, NULL }, - { "a84", 415, NULL }, - { "a85", 509, NULL }, - { "a86", 410, NULL }, - { "a87", 234, NULL }, - { "a88", 234, NULL }, - { "a89", 390, NULL }, - { "a140", 788, NULL }, - { "a141", 788, NULL }, - { "a142", 788, NULL }, - { "a143", 788, NULL }, - { "a144", 788, NULL }, - { "a145", 788, NULL }, - { "a146", 788, NULL }, - { "a147", 788, NULL }, - { "a148", 788, NULL }, - { "a149", 788, NULL }, - { "a90", 390, NULL }, - { "a91", 276, NULL }, - { "a92", 276, NULL }, - { "space", 278, NULL }, - { "a93", 317, NULL }, - { "a94", 317, NULL }, - { "a95", 334, NULL }, - { "a96", 334, NULL }, - { "a97", 392, NULL }, - { "a98", 392, NULL }, - { "a99", 668, NULL }, - { "a150", 788, NULL }, - { "a151", 788, NULL }, - { "a152", 788, NULL }, - { "a153", 788, NULL }, - { "a154", 788, NULL }, - { "a155", 788, NULL }, - { "a156", 788, NULL }, - { "a157", 788, NULL }, - { "a158", 788, NULL }, - { "a159", 788, NULL }, - { "a160", 894, NULL }, - { "a161", 838, NULL }, - { "a162", 924, NULL }, - { "a163", 1016, NULL }, - { "a164", 458, NULL }, - { "a165", 924, NULL }, - { "a166", 918, NULL }, - { "a167", 927, NULL }, - { "a168", 928, NULL }, - { "a169", 928, NULL }, - { "a170", 834, NULL }, - { "a171", 873, NULL }, - { "a172", 828, NULL }, - { "a173", 924, NULL }, - { "a174", 917, NULL }, - { "a175", 930, NULL }, - { "a176", 931, NULL }, - { "a177", 463, NULL }, - { "a178", 883, NULL }, - { "a179", 836, NULL }, - { "a180", 867, NULL }, - { "a181", 696, NULL }, - { "a182", 874, NULL }, - { "a183", 760, NULL }, - { "a184", 946, NULL }, - { "a185", 865, NULL }, - { "a186", 967, NULL }, - { "a187", 831, NULL }, - { "a188", 873, NULL }, - { "a189", 927, NULL }, - { "a1", 974, NULL }, - { "a2", 961, NULL }, - { "a3", 980, NULL }, - { "a4", 719, NULL }, - { "a5", 789, NULL }, - { "a6", 494, NULL }, - { "a7", 552, NULL }, - { "a8", 537, NULL }, - { "a9", 577, NULL }, - { "a190", 970, NULL }, - { "a191", 918, NULL }, - { "a192", 748, NULL }, - { "a193", 836, NULL }, - { "a194", 771, NULL }, - { "a195", 888, NULL }, - { "a196", 748, NULL }, - { "a197", 771, NULL }, - { "a198", 888, NULL }, - { "a199", 867, NULL }, - { "a10", 692, NULL }, - { "a11", 960, NULL }, - { "a12", 939, NULL }, - { "a13", 549, NULL }, - { "a14", 855, NULL }, - { "a15", 911, NULL }, - { "a16", 933, NULL }, - { "a17", 945, NULL }, - { "a18", 974, NULL }, - { "a19", 755, NULL }, - { "a20", 846, NULL }, - { "a21", 762, NULL }, - { "a22", 761, NULL }, - { "a23", 571, NULL }, - { "a24", 677, NULL }, - { "a25", 763, NULL }, - { "a26", 760, NULL }, - { "a27", 759, NULL }, - { "a28", 754, NULL }, - { "a29", 786, NULL }, - { "a30", 788, NULL }, - { "a31", 788, NULL }, - { "a32", 790, NULL }, - { "a33", 793, NULL }, - { "a34", 794, NULL }, - { "a35", 816, NULL }, - { "a36", 823, NULL }, - { "a37", 789, NULL }, - { "a38", 841, NULL }, - { "a39", 823, NULL }, - { "a40", 833, NULL }, - { "a41", 816, NULL }, - { "a42", 831, NULL }, - { "a43", 923, NULL }, - { "a44", 744, NULL }, - { "a45", 723, NULL }, - { "a46", 749, NULL }, - { "a47", 790, NULL }, - { "a48", 792, NULL }, - { "a49", 695, NULL }, - { "a100", 668, NULL }, - { "a101", 732, NULL }, - { "a102", 544, NULL }, - { "a103", 544, NULL }, - { "a104", 910, NULL }, - { "a105", 911, NULL }, - { "a106", 667, NULL }, - { "a107", 760, NULL }, - { "a108", 760, NULL }, - { "a109", 626, NULL }, - { "a50", 776, NULL }, - { "a51", 768, NULL }, - { "a52", 792, NULL }, - { "a53", 759, NULL }, - { "a54", 707, NULL }, - { "a55", 708, NULL }, - { "a56", 682, NULL }, - { "a57", 701, NULL }, - { "a58", 826, NULL }, - { "a59", 815, NULL }, - { "a110", 694, NULL }, - { "a111", 595, NULL }, - { "a112", 776, NULL }, - { "a117", 690, NULL }, - { "a118", 791, NULL }, - { "a119", 790, NULL }, - { "a60", 789, NULL }, - { "a61", 789, NULL }, - { "a62", 707, NULL }, - { "a63", 687, NULL }, - { "a64", 696, NULL }, - { "a65", 689, NULL }, - { "a66", 786, NULL }, - { "a67", 787, NULL }, - { "a68", 713, NULL }, - { "a69", 791, NULL }, - { "a200", 696, NULL }, - { "a201", 874, NULL }, - { "a120", 788, NULL }, - { "a121", 788, NULL }, - { "a202", 974, NULL }, - { "a122", 788, NULL }, - { "a203", 762, NULL }, - { "a123", 788, NULL }, - { "a204", 759, NULL }, - { "a124", 788, NULL }, - { "a205", 509, NULL }, - { "a125", 788, NULL }, - { "a206", 410, NULL }, - { "a126", 788, NULL }, - { "a127", 788, NULL }, - { "a128", 788, NULL }, - { "a129", 788, NULL }, - { "a70", 785, NULL }, - { "a71", 791, NULL }, - { "a72", 873, NULL }, - { "a73", 761, NULL }, - { "a74", 762, NULL }, - { "a75", 759, NULL }, - { "a76", 892, NULL }, - { "a77", 892, NULL }, - { "a78", 788, NULL }, - { "a79", 784, NULL }, - { "a130", 788, NULL }, - { "a131", 788, NULL }, - { "a132", 788, NULL }, - { "a133", 788, NULL }, - { "a134", 788, NULL }, - { "a135", 788, NULL }, - { "a136", 788, NULL }, - { "a137", 788, NULL }, - { "a138", 788, NULL }, - { "a139", 788, NULL } -}; - -BuiltinFont builtinFonts[] = { - { "Courier", standardEncoding, 629, -157, { -23, -250, 715, 805}, NULL }, - { "Courier-Bold", standardEncoding, 629, -157, {-113, -250, 749, 801}, NULL }, - { "Courier-BoldOblique", standardEncoding, 629, -157, { -57, -250, 869, 801}, NULL }, - { "Courier-Oblique", standardEncoding, 629, -157, { -27, -250, 849, 805}, NULL }, - { "Helvetica", standardEncoding, 718, -207, {-166, -225, 1000, 931}, NULL }, - { "Helvetica-Bold", standardEncoding, 718, -207, {-170, -228, 1003, 962}, NULL }, - { "Helvetica-BoldOblique", standardEncoding, 718, -207, {-174, -228, 1114, 962}, NULL }, - { "Helvetica-Oblique", standardEncoding, 718, -207, {-170, -225, 1116, 931}, NULL }, - { "Symbol", symbolEncoding, 1010, -293, {-180, -293, 1090, 1010}, NULL }, - { "Times-Bold", standardEncoding, 683, -217, {-168, -218, 1000, 935}, NULL }, - { "Times-BoldItalic", standardEncoding, 683, -217, {-200, -218, 996, 921}, NULL }, - { "Times-Italic", standardEncoding, 683, -217, {-169, -217, 1010, 883}, NULL }, - { "Times-Roman", standardEncoding, 683, -217, {-168, -218, 1000, 898}, NULL }, - { "ZapfDingbats", zapfDingbatsEncoding, 820, -143, { -1, -143, 981, 820}, NULL } -}; - -BuiltinFont *builtinFontSubst[] = { - &builtinFonts[0], - &builtinFonts[3], - &builtinFonts[1], - &builtinFonts[2], - &builtinFonts[4], - &builtinFonts[7], - &builtinFonts[5], - &builtinFonts[6], - &builtinFonts[12], - &builtinFonts[11], - &builtinFonts[9], - &builtinFonts[10] -}; - -void initBuiltinFontTables() { - builtinFonts[0].widths = new BuiltinFontWidths(courierWidthsTab, 315); - builtinFonts[1].widths = new BuiltinFontWidths(courierBoldWidthsTab, 315); - builtinFonts[2].widths = new BuiltinFontWidths(courierBoldObliqueWidthsTab, 315); - builtinFonts[3].widths = new BuiltinFontWidths(courierObliqueWidthsTab, 315); - builtinFonts[4].widths = new BuiltinFontWidths(helveticaWidthsTab, 315); - builtinFonts[5].widths = new BuiltinFontWidths(helveticaBoldWidthsTab, 316); - builtinFonts[6].widths = new BuiltinFontWidths(helveticaBoldObliqueWidthsTab, 315); - builtinFonts[7].widths = new BuiltinFontWidths(helveticaObliqueWidthsTab, 315); - builtinFonts[8].widths = new BuiltinFontWidths(symbolWidthsTab, 190); - builtinFonts[9].widths = new BuiltinFontWidths(timesBoldWidthsTab, 315); - builtinFonts[10].widths = new BuiltinFontWidths(timesBoldItalicWidthsTab, 315); - builtinFonts[11].widths = new BuiltinFontWidths(timesItalicWidthsTab, 315); - builtinFonts[12].widths = new BuiltinFontWidths(timesRomanWidthsTab, 315); - builtinFonts[13].widths = new BuiltinFontWidths(zapfDingbatsWidthsTab, 202); -} - -void freeBuiltinFontTables() { - int i; - - for (i = 0; i < 14; ++i) { - delete builtinFonts[i].widths; - } -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFontTables.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFontTables.h deleted file mode 100644 index eb45549efd2..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/BuiltinFontTables.h +++ /dev/null @@ -1,23 +0,0 @@ -//======================================================================== -// -// BuiltinFontTables.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef BUILTINFONTTABLES_H -#define BUILTINFONTTABLES_H - -#include "BuiltinFont.h" - -#define nBuiltinFonts 14 -#define nBuiltinFontSubsts 12 - -extern BuiltinFont builtinFonts[nBuiltinFonts]; -extern BuiltinFont *builtinFontSubst[nBuiltinFontSubsts]; - -extern void initBuiltinFontTables(); -extern void freeBuiltinFontTables(); - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CMap.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/CMap.cc deleted file mode 100644 index 0e861c017f8..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CMap.cc +++ /dev/null @@ -1,469 +0,0 @@ -//======================================================================== -// -// CMap.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2008 Koji Otani <sho@bbr.jp> -// Copyright (C) 2008, 2009 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include "goo/gmem.h" -#include "goo/gfile.h" -#include "goo/GooString.h" -#include "Error.h" -#include "GlobalParams.h" -#include "PSTokenizer.h" -#include "CMap.h" -#include "Object.h" - -//------------------------------------------------------------------------ - -struct CMapVectorEntry { - GBool isVector; - union { - CMapVectorEntry *vector; - CID cid; - }; -}; - -//------------------------------------------------------------------------ - -static int getCharFromFile(void *data) { - return fgetc((FILE *)data); -} - -static int getCharFromStream(void *data) { - return ((Stream *)data)->getChar(); -} - -//------------------------------------------------------------------------ - -CMap *CMap::parse(CMapCache *cache, GooString *collectionA, - GooString *cMapNameA, Stream *stream) { - FILE *f = NULL; - CMap *cmap; - PSTokenizer *pst; - char tok1[256], tok2[256], tok3[256]; - int n1, n2, n3; - Guint start, end, code; - - if (stream) { - stream->reset(); - pst = new PSTokenizer(&getCharFromStream, stream); - } else { - if (!(f = globalParams->findCMapFile(collectionA, cMapNameA))) { - - // Check for an identity CMap. - if (!cMapNameA->cmp("Identity") || !cMapNameA->cmp("Identity-H")) { - return new CMap(collectionA->copy(), cMapNameA->copy(), 0); - } - if (!cMapNameA->cmp("Identity-V")) { - return new CMap(collectionA->copy(), cMapNameA->copy(), 1); - } - - error(-1, "Couldn't find '%s' CMap file for '%s' collection", - cMapNameA->getCString(), collectionA->getCString()); - return NULL; - } - pst = new PSTokenizer(&getCharFromFile, f); - } - - cmap = new CMap(collectionA->copy(), cMapNameA->copy()); - - pst->getToken(tok1, sizeof(tok1), &n1); - while (pst->getToken(tok2, sizeof(tok2), &n2)) { - if (!strcmp(tok2, "usecmap")) { - if (tok1[0] == '/') { - cmap->useCMap(cache, tok1 + 1); - } - pst->getToken(tok1, sizeof(tok1), &n1); - } else if (!strcmp(tok1, "/WMode")) { - cmap->wMode = atoi(tok2); - pst->getToken(tok1, sizeof(tok1), &n1); - } else if (!strcmp(tok2, "begincodespacerange")) { - while (pst->getToken(tok1, sizeof(tok1), &n1)) { - if (!strcmp(tok1, "endcodespacerange")) { - break; - } - if (!pst->getToken(tok2, sizeof(tok2), &n2) || - !strcmp(tok2, "endcodespacerange")) { - error(-1, "Illegal entry in codespacerange block in CMap"); - break; - } - if (tok1[0] == '<' && tok2[0] == '<' && - n1 == n2 && n1 >= 4 && (n1 & 1) == 0) { - tok1[n1 - 1] = tok2[n1 - 1] = '\0'; - sscanf(tok1 + 1, "%x", &start); - sscanf(tok2 + 1, "%x", &end); - n1 = (n1 - 2) / 2; - cmap->addCodeSpace(cmap->vector, start, end, n1); - } - } - pst->getToken(tok1, sizeof(tok1), &n1); - } else if (!strcmp(tok2, "begincidchar")) { - while (pst->getToken(tok1, sizeof(tok1), &n1)) { - if (!strcmp(tok1, "endcidchar")) { - break; - } - if (!pst->getToken(tok2, sizeof(tok2), &n2) || - !strcmp(tok2, "endcidchar")) { - error(-1, "Illegal entry in cidchar block in CMap"); - break; - } - if (!(tok1[0] == '<' && tok1[n1 - 1] == '>' && - n1 >= 4 && (n1 & 1) == 0)) { - error(-1, "Illegal entry in cidchar block in CMap"); - continue; - } - tok1[n1 - 1] = '\0'; - if (sscanf(tok1 + 1, "%x", &code) != 1) { - error(-1, "Illegal entry in cidchar block in CMap"); - continue; - } - n1 = (n1 - 2) / 2; - cmap->addCIDs(code, code, n1, (CID)atoi(tok2)); - } - pst->getToken(tok1, sizeof(tok1), &n1); - } else if (!strcmp(tok2, "begincidrange")) { - while (pst->getToken(tok1, sizeof(tok1), &n1)) { - if (!strcmp(tok1, "endcidrange")) { - break; - } - if (!pst->getToken(tok2, sizeof(tok2), &n2) || - !strcmp(tok2, "endcidrange") || - !pst->getToken(tok3, sizeof(tok3), &n3) || - !strcmp(tok3, "endcidrange")) { - error(-1, "Illegal entry in cidrange block in CMap"); - break; - } - if (tok1[0] == '<' && tok2[0] == '<' && - n1 == n2 && n1 >= 4 && (n1 & 1) == 0) { - tok1[n1 - 1] = tok2[n1 - 1] = '\0'; - sscanf(tok1 + 1, "%x", &start); - sscanf(tok2 + 1, "%x", &end); - n1 = (n1 - 2) / 2; - cmap->addCIDs(start, end, n1, (CID)atoi(tok3)); - } - } - pst->getToken(tok1, sizeof(tok1), &n1); - } else { - strcpy(tok1, tok2); - } - } - delete pst; - - if (f) { - fclose(f); - } - - return cmap; -} - -CMap::CMap(GooString *collectionA, GooString *cMapNameA) { - int i; - - collection = collectionA; - cMapName = cMapNameA; - wMode = 0; - vector = (CMapVectorEntry *)gmallocn(256, sizeof(CMapVectorEntry)); - for (i = 0; i < 256; ++i) { - vector[i].isVector = gFalse; - vector[i].cid = 0; - } - refCnt = 1; -#if MULTITHREADED - gInitMutex(&mutex); -#endif -} - -CMap::CMap(GooString *collectionA, GooString *cMapNameA, int wModeA) { - collection = collectionA; - cMapName = cMapNameA; - wMode = wModeA; - vector = NULL; - refCnt = 1; -#if MULTITHREADED - gInitMutex(&mutex); -#endif -} - -void CMap::useCMap(CMapCache *cache, char *useName) { - GooString *useNameStr; - CMap *subCMap; - - useNameStr = new GooString(useName); - subCMap = cache->getCMap(collection, useNameStr, NULL); - delete useNameStr; - if (!subCMap) { - return; - } - copyVector(vector, subCMap->vector); - subCMap->decRefCnt(); -} - -void CMap::copyVector(CMapVectorEntry *dest, CMapVectorEntry *src) { - int i, j; - - for (i = 0; i < 256; ++i) { - if (src[i].isVector) { - if (!dest[i].isVector) { - dest[i].isVector = gTrue; - dest[i].vector = - (CMapVectorEntry *)gmallocn(256, sizeof(CMapVectorEntry)); - for (j = 0; j < 256; ++j) { - dest[i].vector[j].isVector = gFalse; - dest[i].vector[j].cid = 0; - } - } - copyVector(dest[i].vector, src[i].vector); - } else { - if (dest[i].isVector) { - error(-1, "Collision in usecmap"); - } else { - dest[i].cid = src[i].cid; - } - } - } -} - -void CMap::addCodeSpace(CMapVectorEntry *vec, Guint start, Guint end, - Guint nBytes) { - Guint start2, end2; - int startByte, endByte, i, j; - - if (nBytes > 1) { - startByte = (start >> (8 * (nBytes - 1))) & 0xff; - endByte = (end >> (8 * (nBytes - 1))) & 0xff; - start2 = start & ((1 << (8 * (nBytes - 1))) - 1); - end2 = end & ((1 << (8 * (nBytes - 1))) - 1); - for (i = startByte; i <= endByte; ++i) { - if (!vec[i].isVector) { - vec[i].isVector = gTrue; - vec[i].vector = - (CMapVectorEntry *)gmallocn(256, sizeof(CMapVectorEntry)); - for (j = 0; j < 256; ++j) { - vec[i].vector[j].isVector = gFalse; - vec[i].vector[j].cid = 0; - } - } - addCodeSpace(vec[i].vector, start2, end2, nBytes - 1); - } - } -} - -void CMap::addCIDs(Guint start, Guint end, Guint nBytes, CID firstCID) { - CMapVectorEntry *vec; - CID cid; - int byte; - Guint i; - - vec = vector; - for (i = nBytes - 1; i >= 1; --i) { - byte = (start >> (8 * i)) & 0xff; - if (!vec[byte].isVector) { - error(-1, "Invalid CID (%0*x - %0*x) in CMap", - 2*nBytes, start, 2*nBytes, end); - return; - } - vec = vec[byte].vector; - } - cid = firstCID; - for (byte = (int)(start & 0xff); byte <= (int)(end & 0xff); ++byte) { - if (vec[byte].isVector) { - error(-1, "Invalid CID (%0*x - %0*x) in CMap", - 2*nBytes, start, 2*nBytes, end); - } else { - vec[byte].cid = cid; - } - ++cid; - } -} - -CMap::~CMap() { - delete collection; - delete cMapName; - if (vector) { - freeCMapVector(vector); - } -#if MULTITHREADED - gDestroyMutex(&mutex); -#endif -} - -void CMap::freeCMapVector(CMapVectorEntry *vec) { - int i; - - for (i = 0; i < 256; ++i) { - if (vec[i].isVector) { - freeCMapVector(vec[i].vector); - } - } - gfree(vec); -} - -void CMap::incRefCnt() { -#if MULTITHREADED - gLockMutex(&mutex); -#endif - ++refCnt; -#if MULTITHREADED - gUnlockMutex(&mutex); -#endif -} - -void CMap::decRefCnt() { - GBool done; - -#if MULTITHREADED - gLockMutex(&mutex); -#endif - done = --refCnt == 0; -#if MULTITHREADED - gUnlockMutex(&mutex); -#endif - if (done) { - delete this; - } -} - -GBool CMap::match(GooString *collectionA, GooString *cMapNameA) { - return !collection->cmp(collectionA) && !cMapName->cmp(cMapNameA); -} - -CID CMap::getCID(char *s, int len, int *nUsed) { - CMapVectorEntry *vec; - int n, i; - - if (!(vec = vector)) { - // identity CMap - *nUsed = 2; - if (len < 2) { - return 0; - } - return ((s[0] & 0xff) << 8) + (s[1] & 0xff); - } - n = 0; - while (1) { - if (n >= len) { - *nUsed = n; - return 0; - } - i = s[n++] & 0xff; - if (!vec[i].isVector) { - *nUsed = n; - return vec[i].cid; - } - vec = vec[i].vector; - } -} - -void CMap::setReverseMapVector(Guint startCode, CMapVectorEntry *vec, - Guint *rmap, Guint rmapSize, Guint ncand) { - int i; - - if (vec == 0) return; - for (i = 0;i < 256;i++) { - if (vec[i].isVector) { - setReverseMapVector((startCode+i) << 8, - vec[i].vector,rmap,rmapSize,ncand); - } else { - Guint cid = vec[i].cid; - - if (cid < rmapSize) { - Guint cand; - - for (cand = 0;cand < ncand;cand++) { - Guint code = startCode+i; - Guint idx = cid*ncand+cand; - if (rmap[idx] == 0) { - rmap[idx] = code; - break; - } else if (rmap[idx] == code) { - break; - } - } - } - } - } -} - -void CMap::setReverseMap(Guint *rmap, Guint rmapSize, Guint ncand) { - setReverseMapVector(0,vector,rmap,rmapSize,ncand); -} - -//------------------------------------------------------------------------ - -CMapCache::CMapCache() { - int i; - - for (i = 0; i < cMapCacheSize; ++i) { - cache[i] = NULL; - } -} - -CMapCache::~CMapCache() { - int i; - - for (i = 0; i < cMapCacheSize; ++i) { - if (cache[i]) { - cache[i]->decRefCnt(); - } - } -} - -CMap *CMapCache::getCMap(GooString *collection, GooString *cMapName, Stream *stream) { - CMap *cmap; - int i, j; - - if (cache[0] && cache[0]->match(collection, cMapName)) { - cache[0]->incRefCnt(); - return cache[0]; - } - for (i = 1; i < cMapCacheSize; ++i) { - if (cache[i] && cache[i]->match(collection, cMapName)) { - cmap = cache[i]; - for (j = i; j >= 1; --j) { - cache[j] = cache[j - 1]; - } - cache[0] = cmap; - cmap->incRefCnt(); - return cmap; - } - } - if ((cmap = CMap::parse(this, collection, cMapName, stream))) { - if (cache[cMapCacheSize - 1]) { - cache[cMapCacheSize - 1]->decRefCnt(); - } - for (j = cMapCacheSize - 1; j >= 1; --j) { - cache[j] = cache[j - 1]; - } - cache[0] = cmap; - cmap->incRefCnt(); - return cmap; - } - return NULL; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CMap.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/CMap.h deleted file mode 100644 index 9de0a8702c9..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CMap.h +++ /dev/null @@ -1,126 +0,0 @@ -//======================================================================== -// -// CMap.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2008 Koji Otani <sho@bbr.jp> -// Copyright (C) 2009 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef CMAP_H -#define CMAP_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "poppler-config.h" -#include "goo/gtypes.h" -#include "CharTypes.h" - -#if MULTITHREADED -#include "goo/GooMutex.h" -#endif - -class GooString; -struct CMapVectorEntry; -class CMapCache; -class Stream; - -//------------------------------------------------------------------------ - -class CMap { -public: - - // Create the CMap specified by <collection> and <cMapName>. Sets - // the initial reference count to 1. - // Stream is a stream containing the CMap, can be NULL and - // this means the CMap will be searched in the CMap files - // Returns NULL on failure. - static CMap *parse(CMapCache *cache, GooString *collectionA, - GooString *cMapNameA, Stream *stream); - - ~CMap(); - - void incRefCnt(); - void decRefCnt(); - - // Return collection name (<registry>-<ordering>). - GooString *getCollection() { return collection; } - - // Return true if this CMap matches the specified <collectionA>, and - // <cMapNameA>. - GBool match(GooString *collectionA, GooString *cMapNameA); - - // Return the CID corresponding to the character code starting at - // <s>, which contains <len> bytes. Sets *<nUsed> to the number of - // bytes used by the char code. - CID getCID(char *s, int len, int *nUsed); - - // Return the writing mode (0=horizontal, 1=vertical). - int getWMode() { return wMode; } - - void setReverseMap(Guint *rmap, Guint rmapSize, Guint ncand); - -private: - - CMap(GooString *collectionA, GooString *cMapNameA); - CMap(GooString *collectionA, GooString *cMapNameA, int wModeA); - void useCMap(CMapCache *cache, char *useName); - void copyVector(CMapVectorEntry *dest, CMapVectorEntry *src); - void addCodeSpace(CMapVectorEntry *vec, Guint start, Guint end, - Guint nBytes); - void addCIDs(Guint start, Guint end, Guint nBytes, CID firstCID); - void freeCMapVector(CMapVectorEntry *vec); - void setReverseMapVector(Guint startCode, CMapVectorEntry *vec, - Guint *rmap, Guint rmapSize, Guint ncand); - - GooString *collection; - GooString *cMapName; - int wMode; // writing mode (0=horizontal, 1=vertical) - CMapVectorEntry *vector; // vector for first byte (NULL for - // identity CMap) - int refCnt; -#if MULTITHREADED - GooMutex mutex; -#endif -}; - -//------------------------------------------------------------------------ - -#define cMapCacheSize 4 - -class CMapCache { -public: - - CMapCache(); - ~CMapCache(); - - // Get the <cMapName> CMap for the specified character collection. - // Increments its reference count; there will be one reference for - // the cache plus one for the caller of this function. - // Stream is a stream containing the CMap, can be NULL and - // this means the CMap will be searched in the CMap files - // Returns NULL on failure. - CMap *getCMap(GooString *collection, GooString *cMapName, Stream *stream); - -private: - - CMap *cache[cMapCacheSize]; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CachedFile.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/CachedFile.cc deleted file mode 100644 index 393383006b0..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CachedFile.cc +++ /dev/null @@ -1,256 +0,0 @@ -//======================================================================== -// -// CachedFile.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2009 Stefan Thomas <thomas@eload24.com> -// Copyright 2010, 2011 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#include <config.h> -#include "CachedFile.h" - -//------------------------------------------------------------------------ -// CachedFile -//------------------------------------------------------------------------ - -CachedFile::CachedFile(CachedFileLoader *cachedFileLoaderA, GooString *uriA) -{ - uri = uriA; - loader = cachedFileLoaderA; - - streamPos = 0; - chunks = new std::vector<Chunk>(); - length = 0; - - length = loader->init(uri, this); - refCnt = 1; - - if (length != ((size_t) -1)) { - chunks->resize(length/CachedFileChunkSize + 1); - } - else { - error(-1, "Failed to initialize file cache for '%s'.", uri->getCString()); - chunks->resize(0); - } -} - -CachedFile::~CachedFile() -{ - delete uri; - delete loader; - delete chunks; -} - -void CachedFile::incRefCnt() { - refCnt++; -} - -void CachedFile::decRefCnt() { - if (--refCnt == 0) - delete this; -} - -long int CachedFile::tell() { - return streamPos; -} - -int CachedFile::seek(long int offset, int origin) -{ - if (origin == SEEK_SET) { - streamPos = offset; - } else if (origin == SEEK_CUR) { - streamPos += offset; - } else { - streamPos = length + offset; - } - - if (streamPos > length) { - streamPos = 0; - return 1; - } - - return 0; -} - -int CachedFile::cache(const std::vector<ByteRange> &origRanges) -{ - std::vector<int> loadChunks; - int numChunks = length/CachedFileChunkSize + 1; - std::vector<bool> chunkNeeded(numChunks); - int startChunk, endChunk; - std::vector<ByteRange> chunk_ranges, all; - ByteRange range; - const std::vector<ByteRange> *ranges = &origRanges; - - if (ranges->empty()) { - range.offset = 0; - range.length = length; - all.push_back(range); - ranges = &all; - } - - for (int i = 0; i < numChunks; ++i) - chunkNeeded[i] = false; - for (size_t i = 0; i < ranges->size(); i++) { - - if ((*ranges)[i].length == 0) continue; - if ((*ranges)[i].offset >= length) continue; - - size_t start = (*ranges)[i].offset; - size_t end = start + (*ranges)[i].length - 1; - if (end >= length) end = length - 1; - - startChunk = start / CachedFileChunkSize; - endChunk = end / CachedFileChunkSize; - for (int chunk = startChunk; chunk <= endChunk; chunk++) { - if ((*chunks)[chunk].state == chunkStateNew) { - chunkNeeded[chunk] = true; - } - } - } - - int chunk = 0; - while (chunk < numChunks) { - while (!chunkNeeded[chunk] && (++chunk != numChunks)) ; - if (chunk == numChunks) break; - startChunk = chunk; - loadChunks.push_back(chunk); - - while ((++chunk != numChunks) && chunkNeeded[chunk]) { - loadChunks.push_back(chunk); - } - endChunk = chunk - 1; - - range.offset = startChunk * CachedFileChunkSize; - range.length = (endChunk - startChunk + 1) * CachedFileChunkSize; - - chunk_ranges.push_back(range); - } - - if (chunk_ranges.size() > 0) { - CachedFileWriter writer = - CachedFileWriter(this, &loadChunks); - return loader->load(chunk_ranges, &writer); - } - - return 0; -} - -size_t CachedFile::read(void *ptr, size_t unitsize, size_t count) -{ - size_t bytes = unitsize*count; - if (length < (streamPos + bytes)) { - bytes = length - streamPos; - } - - if (bytes == 0) return 0; - - // Load data - if (cache(streamPos, bytes) != 0) return 0; - - // Copy data to buffer - size_t toCopy = bytes; - while (toCopy) { - int chunk = streamPos / CachedFileChunkSize; - int offset = streamPos % CachedFileChunkSize; - size_t len = CachedFileChunkSize-offset; - - if (len > toCopy) - len = toCopy; - - memcpy(ptr, (*chunks)[chunk].data + offset, len); - streamPos += len; - toCopy -= len; - ptr = (char*)ptr + len; - } - - return bytes; -} - -int CachedFile::cache(size_t offset, size_t length) -{ - std::vector<ByteRange> r; - ByteRange range; - range.offset = offset; - range.length = length; - r.push_back(range); - return cache(r); -} - -//------------------------------------------------------------------------ -// CachedFileWriter -//------------------------------------------------------------------------ - -CachedFileWriter::CachedFileWriter(CachedFile *cachedFileA, std::vector<int> *chunksA) -{ - cachedFile = cachedFileA; - chunks = chunksA; - - if (chunks) { - offset = 0; - it = (*chunks).begin(); - } -} - -CachedFileWriter::~CachedFileWriter() -{ -} - -size_t CachedFileWriter::write(const char *ptr, size_t size) -{ - const char *cp = ptr; - size_t len = size; - size_t nfree, ncopy; - size_t written = 0; - size_t chunk; - - if (!len) return 0; - - while (len) { - if (chunks) { - if (offset == CachedFileChunkSize) { - it++; - if (it == (*chunks).end()) return written; - offset = 0; - } - chunk = *it; - } else { - offset = cachedFile->length % CachedFileChunkSize; - chunk = cachedFile->length / CachedFileChunkSize; - } - - if (chunk >= cachedFile->chunks->size()) { - cachedFile->chunks->resize(chunk + 1); - } - - nfree = CachedFileChunkSize - offset; - ncopy = (len >= nfree) ? nfree : len; - memcpy(&((*cachedFile->chunks)[chunk].data[offset]), cp, ncopy); - len -= ncopy; - cp += ncopy; - offset += ncopy; - written += ncopy; - - if (!chunks) { - cachedFile->length += ncopy; - } - - if (offset == CachedFileChunkSize) { - (*cachedFile->chunks)[chunk].state = CachedFile::chunkStateLoaded; - } - } - - if ((chunk == (cachedFile->length / CachedFileChunkSize)) && - (offset == (cachedFile->length % CachedFileChunkSize))) { - (*cachedFile->chunks)[chunk].state = CachedFile::chunkStateLoaded; - } - - return written; -} - -//------------------------------------------------------------------------ - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CachedFile.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/CachedFile.h deleted file mode 100644 index b99ea1ecad4..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CachedFile.h +++ /dev/null @@ -1,146 +0,0 @@ -//======================================================================== -// -// CachedFile.h -// -// Caching files support. -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2009 Stefan Thomas <thomas@eload24.com> -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#ifndef CACHEDFILE_H -#define CACHEDFILE_H - -#include "poppler-config.h" - -#include "goo/gtypes.h" -#include "Object.h" -#include "Stream.h" - -#include <vector> - -//------------------------------------------------------------------------ - -#define CachedFileChunkSize 8192 // This should be a multiple of cachedStreamBufSize - -class GooString; -class CachedFileLoader; - -//------------------------------------------------------------------------ -// CachedFile -// -// CachedFile gives FILE-like access to a document at a specified URI. -// In the constructor, you specify a CachedFileLoader that handles loading -// the data from the document. The CachedFile requests no more data then it -// needs from the CachedFileLoader. -//------------------------------------------------------------------------ - -class CachedFile { - -friend class CachedFileWriter; - -public: - - CachedFile(CachedFileLoader *cacheLoader, GooString *uri); - - Guint getLength() { return length; } - long int tell(); - int seek(long int offset, int origin); - size_t read(void * ptr, size_t unitsize, size_t count); - size_t write(const char *ptr, size_t size, size_t fromByte); - int cache(const std::vector<ByteRange> &ranges); - - // Reference counting. - void incRefCnt(); - void decRefCnt(); - -private: - - ~CachedFile(); - - enum ChunkState { - chunkStateNew = 0, - chunkStateLoaded - }; - - typedef struct { - ChunkState state; - char data[CachedFileChunkSize]; - } Chunk; - - int cache(size_t offset, size_t length); - - CachedFileLoader *loader; - GooString *uri; - - size_t length; - size_t streamPos; - - std::vector<Chunk> *chunks; - - int refCnt; // reference count - -}; - -//------------------------------------------------------------------------ -// CachedFileWriter -// -// CachedFileWriter handles sequential writes to a CachedFile. -// On construction, you specify the CachedFile and the chunks of it to which data -// should be written. -//------------------------------------------------------------------------ - -class CachedFileWriter { - -public: - - // Construct a CachedFile Writer. - // The caller is responsible for deleting the cachedFile and chunksA. - CachedFileWriter(CachedFile *cachedFile, std::vector<int> *chunksA); - - ~CachedFileWriter(); - - // Writes size bytes from ptr to cachedFile, returns number of bytes written. - size_t write(const char *ptr, size_t size); - -private: - - CachedFile *cachedFile; - std::vector<int> *chunks; - std::vector<int>::iterator it; - size_t offset; - -}; - -//------------------------------------------------------------------------ -// CachedFileLoader -// -// CachedFileLoader is an abstact class that specifies the interface for -// loadng data from an URI into a CachedFile. -//------------------------------------------------------------------------ - -class CachedFileLoader { - -public: - - virtual ~CachedFileLoader() {}; - - // Initializes the file load. - // Returns the length of the file. - // The caller is responsible for deleting uri and cachedFile. - virtual size_t init(GooString *uri, CachedFile *cachedFile) = 0; - - // Loads speficified byte ranges and passes it to the writer to store them. - // Returns 0 on success, Anything but 0 on failure. - // The caller is responsible for deleting the writer. - virtual int load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer) = 0; - -}; - -//------------------------------------------------------------------------ - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoFontEngine.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoFontEngine.cc deleted file mode 100644 index 95ac60d1a36..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoFontEngine.cc +++ /dev/null @@ -1,794 +0,0 @@ -//======================================================================== -// -// CairoFontEngine.cc -// -// Copyright 2003 Glyph & Cog, LLC -// Copyright 2004 Red Hat, Inc -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005-2007 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005 Martin Kretzschmar <martink@gnome.org> -// Copyright (C) 2005, 2009 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2006, 2007, 2010, 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2007 Koji Otani <sho@bbr.jp> -// Copyright (C) 2008, 2009 Chris Wilson <chris@chris-wilson.co.uk> -// Copyright (C) 2008 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2009 Darren Kenny <darren.kenny@sun.com> -// Copyright (C) 2010 Suzuki Toshiya <mpsuzuki@hiroshima-u.ac.jp> -// Copyright (C) 2010 Jan Kümmel <jan+freedesktop@snorc.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#include "config.h" -#include <string.h> -#include "CairoFontEngine.h" -#include "CairoOutputDev.h" -#include "CharCodeToUnicode.h" -#include "GlobalParams.h" -#include <fofi/FoFiTrueType.h> -#include <fofi/FoFiType1C.h> -#include "goo/gfile.h" -#include "Error.h" -#include "XRef.h" -#include "Gfx.h" -#include "Page.h" - -#if HAVE_FCNTL_H && HAVE_SYS_MMAN_H && HAVE_SYS_STAT_H -#include <fcntl.h> -#include <sys/stat.h> -#include <sys/mman.h> -#define CAN_CHECK_OPEN_FACES 1 -#endif - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - - -//------------------------------------------------------------------------ -// CairoFont -//------------------------------------------------------------------------ - -CairoFont::CairoFont(Ref ref, - cairo_font_face_t *cairo_font_face, - Gushort *codeToGID, - Guint codeToGIDLen, - GBool substitute, - GBool printing) : ref(ref), - cairo_font_face(cairo_font_face), - codeToGID(codeToGID), - codeToGIDLen(codeToGIDLen), - substitute(substitute), - printing(printing) { } - -CairoFont::~CairoFont() { - cairo_font_face_destroy (cairo_font_face); - gfree(codeToGID); -} - -GBool -CairoFont::matches(Ref &other, GBool printingA) { - return (other.num == ref.num && other.gen == ref.gen); -} - -cairo_font_face_t * -CairoFont::getFontFace(void) { - return cairo_font_face; -} - -unsigned long -CairoFont::getGlyph(CharCode code, - Unicode *u, int uLen) { - FT_UInt gid; - - if (codeToGID && code < codeToGIDLen) { - gid = (FT_UInt)codeToGID[code]; - } else { - gid = (FT_UInt)code; - } - return gid; -} - -double -CairoFont::getSubstitutionCorrection(GfxFont *gfxFont) -{ - double w1, w2,w3; - CharCode code; - char *name; - - // for substituted fonts: adjust the font matrix -- compare the - // width of 'm' in the original font and the substituted font - if (isSubstitute() && !gfxFont->isCIDFont()) { - for (code = 0; code < 256; ++code) { - if ((name = ((Gfx8BitFont *)gfxFont)->getCharName(code)) && - name[0] == 'm' && name[1] == '\0') { - break; - } - } - if (code < 256) { - w1 = ((Gfx8BitFont *)gfxFont)->getWidth(code); - { - cairo_matrix_t m; - cairo_matrix_init_identity(&m); - cairo_font_options_t *options = cairo_font_options_create(); - cairo_font_options_set_hint_style(options, CAIRO_HINT_STYLE_NONE); - cairo_font_options_set_hint_metrics(options, CAIRO_HINT_METRICS_OFF); - cairo_scaled_font_t *scaled_font = cairo_scaled_font_create(cairo_font_face, &m, &m, options); - - cairo_text_extents_t extents; - cairo_scaled_font_text_extents(scaled_font, "m", &extents); - - cairo_scaled_font_destroy(scaled_font); - cairo_font_options_destroy(options); - w3 = extents.width; - w2 = extents.x_advance; - } - if (!gfxFont->isSymbolic()) { - // if real font is substantially narrower than substituted - // font, reduce the font size accordingly - if (w1 > 0.01 && w1 < 0.9 * w2) { - w1 /= w2; - return w1; - } - } - } - } - return 1.0; -} - -//------------------------------------------------------------------------ -// CairoFreeTypeFont -//------------------------------------------------------------------------ - -static cairo_user_data_key_t _ft_cairo_key; - -static void -_ft_done_face_uncached (void *closure) -{ - FT_Face face = (FT_Face) closure; - FT_Done_Face (face); -} - -static GBool -_ft_new_face_uncached (FT_Library lib, - const char *filename, - char *font_data, - int font_data_len, - FT_Face *face_out, - cairo_font_face_t **font_face_out) -{ - FT_Face face; - cairo_font_face_t *font_face; - - if (font_data == NULL) { - if (FT_New_Face (lib, filename, 0, &face)) - return gFalse; - } else { - if (FT_New_Memory_Face (lib, (unsigned char *)font_data, font_data_len, 0, &face)) - return gFalse; - } - - font_face = cairo_ft_font_face_create_for_ft_face (face, - FT_LOAD_NO_HINTING | - FT_LOAD_NO_BITMAP); - if (cairo_font_face_set_user_data (font_face, - &_ft_cairo_key, - face, - _ft_done_face_uncached)) - { - _ft_done_face_uncached (face); - cairo_font_face_destroy (font_face); - return gFalse; - } - - *face_out = face; - *font_face_out = font_face; - return gTrue; -} - -#if CAN_CHECK_OPEN_FACES -static struct _ft_face_data { - struct _ft_face_data *prev, *next, **head; - - int fd; - unsigned long hash; - size_t size; - unsigned char *bytes; - - FT_Library lib; - FT_Face face; - cairo_font_face_t *font_face; -} *_ft_open_faces; - -static unsigned long -_djb_hash (const unsigned char *bytes, size_t len) -{ - unsigned long hash = 5381; - while (len--) { - unsigned char c = *bytes++; - hash *= 33; - hash ^= c; - } - return hash; -} - -static GBool -_ft_face_data_equal (struct _ft_face_data *a, struct _ft_face_data *b) -{ - if (a->lib != b->lib) - return gFalse; - if (a->size != b->size) - return gFalse; - if (a->hash != b->hash) - return gFalse; - - return memcmp (a->bytes, b->bytes, a->size) == 0; -} - -static void -_ft_done_face (void *closure) -{ - struct _ft_face_data *data = (struct _ft_face_data *) closure; - - if (data->next) - data->next->prev = data->prev; - if (data->prev) - data->prev->next = data->next; - else - _ft_open_faces = data->next; - -#if defined(__SUNPRO_CC) && defined(__sun) && defined(__SVR4) - munmap ((char*)data->bytes, data->size); -#else - munmap (data->bytes, data->size); -#endif - close (data->fd); - - FT_Done_Face (data->face); - gfree (data); -} - -static GBool -_ft_new_face (FT_Library lib, - const char *filename, - char *font_data, - int font_data_len, - FT_Face *face_out, - cairo_font_face_t **font_face_out) -{ - struct _ft_face_data *l; - struct stat st; - struct _ft_face_data tmpl; - - tmpl.fd = -1; - - if (font_data == NULL) { - /* if we fail to mmap the file, just pass it to FreeType instead */ - tmpl.fd = open (filename, O_RDONLY); - if (tmpl.fd == -1) - return _ft_new_face_uncached (lib, filename, font_data, font_data_len, face_out, font_face_out); - - if (fstat (tmpl.fd, &st) == -1) { - close (tmpl.fd); - return _ft_new_face_uncached (lib, filename, font_data, font_data_len, face_out, font_face_out); - } - - tmpl.bytes = (unsigned char *) mmap (NULL, st.st_size, - PROT_READ, MAP_PRIVATE, - tmpl.fd, 0); - if (tmpl.bytes == MAP_FAILED) { - close (tmpl.fd); - return _ft_new_face_uncached (lib, filename, font_data, font_data_len, face_out, font_face_out); - } - tmpl.size = st.st_size; - } else { - tmpl.bytes = (unsigned char*) font_data; - tmpl.size = font_data_len; - } - - /* check to see if this is a duplicate of any of the currently open fonts */ - tmpl.lib = lib; - tmpl.hash = _djb_hash (tmpl.bytes, tmpl.size); - - for (l = _ft_open_faces; l; l = l->next) { - if (_ft_face_data_equal (l, &tmpl)) { - if (tmpl.fd != -1) { -#if defined(__SUNPRO_CC) && defined(__sun) && defined(__SVR4) - munmap ((char*)tmpl.bytes, tmpl.size); -#else - munmap (tmpl.bytes, tmpl.size); -#endif - close (tmpl.fd); - } - *face_out = l->face; - *font_face_out = cairo_font_face_reference (l->font_face); - return gTrue; - } - } - - /* not a dup, open and insert into list */ - if (FT_New_Memory_Face (lib, - (FT_Byte *) tmpl.bytes, tmpl.size, - 0, &tmpl.face)) - { - if (tmpl.fd != -1) { -#if defined(__SUNPRO_CC) && defined(__sun) && defined(__SVR4) - munmap ((char*)tmpl.bytes, tmpl.size); -#else - munmap (tmpl.bytes, tmpl.size); -#endif - - close (tmpl.fd); - } - return gFalse; - } - - l = (struct _ft_face_data *) gmallocn (1, sizeof (struct _ft_face_data)); - *l = tmpl; - l->prev = NULL; - l->next = _ft_open_faces; - if (_ft_open_faces) - _ft_open_faces->prev = l; - _ft_open_faces = l; - - l->font_face = cairo_ft_font_face_create_for_ft_face (tmpl.face, - FT_LOAD_NO_HINTING | - FT_LOAD_NO_BITMAP); - if (cairo_font_face_set_user_data (l->font_face, - &_ft_cairo_key, - l, - _ft_done_face)) - { - cairo_font_face_destroy (l->font_face); - _ft_done_face (l); - return gFalse; - } - - *face_out = l->face; - *font_face_out = l->font_face; - return gTrue; -} -#else -#define _ft_new_face _ft_new_face_uncached -#endif - -CairoFreeTypeFont::CairoFreeTypeFont(Ref ref, - cairo_font_face_t *cairo_font_face, - Gushort *codeToGID, - Guint codeToGIDLen, - GBool substitute) : CairoFont(ref, - cairo_font_face, - codeToGID, - codeToGIDLen, - substitute, - gTrue) { } - -CairoFreeTypeFont::~CairoFreeTypeFont() { } - -CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, - FT_Library lib, GBool useCIDs) { - Ref embRef; - Object refObj, strObj; - GooString *fileName; - char *fileNameC; - char *font_data; - int font_data_len; - DisplayFontParam *dfp; - int i, n; - GfxFontType fontType; - char **enc; - char *name; - FoFiTrueType *ff; - FoFiType1C *ff1c; - Ref ref; - FT_Face face; - cairo_font_face_t *font_face; - - Gushort *codeToGID; - Guint codeToGIDLen; - - dfp = NULL; - codeToGID = NULL; - codeToGIDLen = 0; - font_data = NULL; - font_data_len = 0; - fileName = NULL; - fileNameC = NULL; - - GBool substitute = gFalse; - - ref = *gfxFont->getID(); - fontType = gfxFont->getType(); - - if (gfxFont->getEmbeddedFontID(&embRef)) { - font_data = gfxFont->readEmbFontFile(xref, &font_data_len); - if (NULL == font_data) - goto err2; - } else if (!(fileName = gfxFont->getExtFontFile())) { - // look for a display font mapping or a substitute font - dfp = NULL; - if (gfxFont->getName()) { - dfp = globalParams->getDisplayFont(gfxFont); - } - if (!dfp) { - error(-1, "Couldn't find a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - switch (dfp->kind) { - case displayFontT1: - fileName = dfp->t1.fileName; - fontType = gfxFont->isCIDFont() ? fontCIDType0 : fontType1; - break; - case displayFontTT: - fileName = dfp->tt.fileName; - fontType = gfxFont->isCIDFont() ? fontCIDType2 : fontTrueType; - break; - } - substitute = gTrue; - } - - if (fileName != NULL) { - fileNameC = fileName->getCString(); - } - - switch (fontType) { - case fontType1: - case fontType1C: - case fontType1COT: - if (! _ft_new_face (lib, fileNameC, font_data, font_data_len, &face, &font_face)) { - error(-1, "could not create type1 face"); - goto err2; - } - - enc = ((Gfx8BitFont *)gfxFont)->getEncoding(); - - codeToGID = (Gushort *)gmallocn(256, sizeof(int)); - codeToGIDLen = 256; - for (i = 0; i < 256; ++i) { - codeToGID[i] = 0; - if ((name = enc[i])) { - codeToGID[i] = (Gushort)FT_Get_Name_Index(face, name); - } - } - break; - case fontCIDType2: - case fontCIDType2OT: - codeToGID = NULL; - n = 0; - if (((GfxCIDFont *)gfxFont)->getCIDToGID()) { - n = ((GfxCIDFont *)gfxFont)->getCIDToGIDLen(); - if (n) { - codeToGID = (Gushort *)gmallocn(n, sizeof(Gushort)); - memcpy(codeToGID, ((GfxCIDFont *)gfxFont)->getCIDToGID(), - n * sizeof(Gushort)); - } - } else { - if (font_data != NULL) { - ff = FoFiTrueType::make(font_data, font_data_len); - } else { - ff = FoFiTrueType::load(fileNameC); - } - if (! ff) - goto err2; - codeToGID = ((GfxCIDFont *)gfxFont)->getCodeToGIDMap(ff, &n); - delete ff; - } - codeToGIDLen = n; - /* Fall through */ - case fontTrueType: - if (font_data != NULL) { - ff = FoFiTrueType::make(font_data, font_data_len); - } else { - ff = FoFiTrueType::load(fileNameC); - } - if (! ff) { - error(-1, "failed to load truetype font\n"); - goto err2; - } - /* This might be set already for the CIDType2 case */ - if (fontType == fontTrueType) { - codeToGID = ((Gfx8BitFont *)gfxFont)->getCodeToGIDMap(ff); - codeToGIDLen = 256; - } - delete ff; - if (! _ft_new_face (lib, fileNameC, font_data, font_data_len, &face, &font_face)) { - error(-1, "could not create truetype face\n"); - goto err2; - } - break; - - case fontCIDType0: - case fontCIDType0C: - - codeToGID = NULL; - codeToGIDLen = 0; - - if (!useCIDs) - { - if (font_data != NULL) { - ff1c = FoFiType1C::make(font_data, font_data_len); - } else { - ff1c = FoFiType1C::load(fileNameC); - } - if (ff1c) { - codeToGID = ff1c->getCIDToGIDMap((int *)&codeToGIDLen); - delete ff1c; - } - } - - if (! _ft_new_face (lib, fileNameC, font_data, font_data_len, &face, &font_face)) { - gfree(codeToGID); - codeToGID = NULL; - error(-1, "could not create cid face\n"); - goto err2; - } - break; - - default: - fprintf (stderr, "font type %d not handled\n", (int)fontType); - goto err2; - break; - } - - return new CairoFreeTypeFont(ref, - font_face, - codeToGID, codeToGIDLen, - substitute); - - err2: - /* hmm? */ - fprintf (stderr, "some font thing failed\n"); - return NULL; -} - -//------------------------------------------------------------------------ -// CairoType3Font -//------------------------------------------------------------------------ - -static const cairo_user_data_key_t type3_font_key = {0}; - -typedef struct _type3_font_info { - GfxFont *font; - XRef *xref; - Catalog *catalog; - CairoFontEngine *fontEngine; - GBool printing; -} type3_font_info_t; - -static void -_free_type3_font_info(void *closure) -{ - type3_font_info_t *info = (type3_font_info_t *) closure; - - info->font->decRefCnt(); - free (info); -} - -static cairo_status_t -_render_type3_glyph (cairo_scaled_font_t *scaled_font, - unsigned long glyph, - cairo_t *cr, - cairo_text_extents_t *metrics) -{ - Dict *charProcs; - Object charProc; - CairoOutputDev *output_dev; - cairo_matrix_t matrix, invert_y_axis; - double *mat; - double wx, wy; - PDFRectangle box; - type3_font_info_t *info; - GfxFont *font; - Dict *resDict; - Gfx *gfx; - - info = (type3_font_info_t *) - cairo_font_face_get_user_data (cairo_scaled_font_get_font_face (scaled_font), - &type3_font_key); - - font = info->font; - resDict = ((Gfx8BitFont *)font)->getResources(); - charProcs = ((Gfx8BitFont *)(info->font))->getCharProcs(); - if (!charProcs) - return CAIRO_STATUS_USER_FONT_ERROR; - - if ((int)glyph >= charProcs->getLength()) - return CAIRO_STATUS_USER_FONT_ERROR; - - mat = font->getFontMatrix(); - matrix.xx = mat[0]; - matrix.yx = mat[1]; - matrix.xy = mat[2]; - matrix.yy = mat[3]; - matrix.x0 = mat[4]; - matrix.y0 = mat[5]; - cairo_matrix_init_scale (&invert_y_axis, 1, -1); - cairo_matrix_multiply (&matrix, &matrix, &invert_y_axis); - cairo_transform (cr, &matrix); - - output_dev = new CairoOutputDev(); - output_dev->setCairo(cr); - output_dev->setPrinting(info->printing); - - mat = font->getFontBBox(); - box.x1 = mat[0]; - box.y1 = mat[1]; - box.x2 = mat[2]; - box.y2 = mat[3]; - gfx = new Gfx(info->xref, output_dev, resDict, info->catalog, &box, NULL); - output_dev->startDoc(info->xref, info->catalog, info->fontEngine); - output_dev->startPage (1, gfx->getState()); - output_dev->setInType3Char(gTrue); - gfx->display(charProcs->getVal(glyph, &charProc)); - - output_dev->getType3GlyphWidth (&wx, &wy); - cairo_matrix_transform_distance (&matrix, &wx, &wy); - metrics->x_advance = wx; - metrics->y_advance = wy; - if (output_dev->hasType3GlyphBBox()) { - double *bbox = output_dev->getType3GlyphBBox(); - - cairo_matrix_transform_point (&matrix, &bbox[0], &bbox[1]); - cairo_matrix_transform_point (&matrix, &bbox[2], &bbox[3]); - metrics->x_bearing = bbox[0]; - metrics->y_bearing = bbox[1]; - metrics->width = bbox[2] - bbox[0]; - metrics->height = bbox[3] - bbox[1]; - } - - delete gfx; - delete output_dev; - charProc.free(); - - return CAIRO_STATUS_SUCCESS; -} - - -CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, XRef *xref, - Catalog *catalog, CairoFontEngine *fontEngine, - GBool printing) { - Object refObj, strObj; - type3_font_info_t *info; - cairo_font_face_t *font_face; - Ref ref; - Gushort *codeToGID; - Guint codeToGIDLen; - int i, j; - char **enc; - Dict *charProcs; - char *name; - - charProcs = ((Gfx8BitFont *)gfxFont)->getCharProcs(); - info = (type3_font_info_t *) malloc(sizeof(*info)); - ref = *gfxFont->getID(); - font_face = cairo_user_font_face_create(); - cairo_user_font_face_set_render_glyph_func (font_face, _render_type3_glyph); - gfxFont->incRefCnt(); - info->font = gfxFont; - info->xref = xref; - info->catalog = catalog; - info->fontEngine = fontEngine; - info->printing = printing; - - cairo_font_face_set_user_data (font_face, &type3_font_key, (void *) info, _free_type3_font_info); - - enc = ((Gfx8BitFont *)gfxFont)->getEncoding(); - codeToGID = (Gushort *)gmallocn(256, sizeof(int)); - codeToGIDLen = 256; - for (i = 0; i < 256; ++i) { - codeToGID[i] = 0; - if (charProcs && (name = enc[i])) { - for (j = 0; j < charProcs->getLength(); j++) { - if (strcmp(name, charProcs->getKey(j)) == 0) { - codeToGID[i] = (Gushort) j; - } - } - } - } - - return new CairoType3Font(ref, xref, catalog, font_face, codeToGID, codeToGIDLen, printing); -} - -CairoType3Font::CairoType3Font(Ref ref, - XRef *xref, - Catalog *catalog, - cairo_font_face_t *cairo_font_face, - Gushort *codeToGID, - Guint codeToGIDLen, - GBool printing) : CairoFont(ref, - cairo_font_face, - codeToGID, - codeToGIDLen, - gFalse, - printing), - xref(xref), - catalog(catalog) { } - -CairoType3Font::~CairoType3Font() { } - -GBool -CairoType3Font::matches(Ref &other, GBool printingA) { - return (other.num == ref.num && other.gen == ref.gen && printing == printingA); -} - - -//------------------------------------------------------------------------ -// CairoFontEngine -//------------------------------------------------------------------------ - -CairoFontEngine::CairoFontEngine(FT_Library libA) { - int i; - - lib = libA; - for (i = 0; i < cairoFontCacheSize; ++i) { - fontCache[i] = NULL; - } - - FT_Int major, minor, patch; - // as of FT 2.1.8, CID fonts are indexed by CID instead of GID - FT_Library_Version(lib, &major, &minor, &patch); - useCIDs = major > 2 || - (major == 2 && (minor > 1 || (minor == 1 && patch > 7))); -} - -CairoFontEngine::~CairoFontEngine() { - int i; - - for (i = 0; i < cairoFontCacheSize; ++i) { - if (fontCache[i]) - delete fontCache[i]; - } -} - -CairoFont * -CairoFontEngine::getFont(GfxFont *gfxFont, XRef *xref, Catalog *catalog, GBool printing) { - int i, j; - Ref ref; - CairoFont *font; - GfxFontType fontType; - - ref = *gfxFont->getID(); - - for (i = 0; i < cairoFontCacheSize; ++i) { - font = fontCache[i]; - if (font && font->matches(ref, printing)) { - for (j = i; j > 0; --j) { - fontCache[j] = fontCache[j-1]; - } - fontCache[0] = font; - return font; - } - } - - fontType = gfxFont->getType(); - if (fontType == fontType3) - font = CairoType3Font::create (gfxFont, xref, catalog, this, printing); - else - font = CairoFreeTypeFont::create (gfxFont, xref, lib, useCIDs); - - //XXX: if font is null should we still insert it into the cache? - if (fontCache[cairoFontCacheSize - 1]) { - delete fontCache[cairoFontCacheSize - 1]; - } - for (j = cairoFontCacheSize - 1; j > 0; --j) { - fontCache[j] = fontCache[j-1]; - } - fontCache[0] = font; - return font; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoFontEngine.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoFontEngine.h deleted file mode 100644 index 552b5e649fa..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoFontEngine.h +++ /dev/null @@ -1,125 +0,0 @@ -//======================================================================== -// -// CairoFontEngine.h -// -// Copyright 2003 Glyph & Cog, LLC -// Copyright 2004 Red Hat, Inc -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2006, 2007 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2006, 2010 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2008 Adrian Johnson <ajohnson@redneon.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef CAIROFONTENGINE_H -#define CAIROFONTENGINE_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include <cairo-ft.h> - -#include "GfxFont.h" -#include "Catalog.h" - -class CairoFontEngine; - -class CairoFont { -public: - CairoFont(Ref ref, - cairo_font_face_t *face, - Gushort *codeToGID, - Guint codeToGIDLen, - GBool substitute, - GBool printing); - virtual ~CairoFont(); - - virtual GBool matches(Ref &other, GBool printing); - cairo_font_face_t *getFontFace(void); - unsigned long getGlyph(CharCode code, Unicode *u, int uLen); - double getSubstitutionCorrection(GfxFont *gfxFont); - - GBool isSubstitute() { return substitute; } -protected: - Ref ref; - cairo_font_face_t *cairo_font_face; - - Gushort *codeToGID; - Guint codeToGIDLen; - - GBool substitute; - GBool printing; -}; - -//------------------------------------------------------------------------ - -class CairoFreeTypeFont : public CairoFont { -public: - static CairoFreeTypeFont *create(GfxFont *gfxFont, XRef *xref, FT_Library lib, GBool useCIDs); - virtual ~CairoFreeTypeFont(); - -private: - CairoFreeTypeFont(Ref ref, cairo_font_face_t *cairo_font_face, - Gushort *codeToGID, Guint codeToGIDLen, GBool substitute); -}; - -//------------------------------------------------------------------------ - -class CairoType3Font : public CairoFont { -public: - static CairoType3Font *create(GfxFont *gfxFont, XRef *xref, - Catalog *catalog, CairoFontEngine *fontEngine, - GBool printing); - virtual ~CairoType3Font(); - - virtual GBool matches(Ref &other, GBool printing); - -private: - CairoType3Font(Ref ref, XRef *xref, Catalog *catalog, - cairo_font_face_t *cairo_font_face, - Gushort *codeToGID, Guint codeToGIDLen, - GBool printing); - XRef *xref; - Catalog *catalog; -}; - -//------------------------------------------------------------------------ - -#define cairoFontCacheSize 64 - -//------------------------------------------------------------------------ -// CairoFontEngine -//------------------------------------------------------------------------ - -class CairoFontEngine { -public: - - // Create a font engine. - CairoFontEngine(FT_Library libA); - ~CairoFontEngine(); - - CairoFont *getFont(GfxFont *gfxFont, XRef *xref, Catalog *catalog, GBool printing); - -private: - CairoFont *fontCache[cairoFontCacheSize]; - FT_Library lib; - GBool useCIDs; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoOutputDev.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoOutputDev.cc deleted file mode 100644 index 30c69f12451..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoOutputDev.cc +++ /dev/null @@ -1,3002 +0,0 @@ -//======================================================================== -// -// CairoOutputDev.cc -// -// Copyright 2003 Glyph & Cog, LLC -// Copyright 2004 Red Hat, Inc -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005-2008 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005, 2009 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2005 Nickolay V. Shmyrev <nshmyrev@yandex.ru> -// Copyright (C) 2006-2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2008 Carl Worth <cworth@cworth.org> -// Copyright (C) 2008-2011 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> -// Copyright (C) 2008, 2009 Chris Wilson <chris@chris-wilson.co.uk> -// Copyright (C) 2008 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2009, 2010 David Benjamin <davidben@mit.edu> -// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <string.h> -#include <math.h> -#include <assert.h> -#include <cairo.h> - -#include "goo/gfile.h" -#include "goo/gtypes_p.h" -#include "GlobalParams.h" -#include "Error.h" -#include "Object.h" -#include "Gfx.h" -#include "GfxState.h" -#include "GfxFont.h" -#include "Page.h" -#include "Link.h" -#include "CharCodeToUnicode.h" -#include "FontEncodingTables.h" -#include "PDFDocEncoding.h" -#include <fofi/FoFiTrueType.h> -#include <splash/SplashBitmap.h> -#include "CairoOutputDev.h" -#include "CairoFontEngine.h" -#include "CairoRescaleBox.h" -#include "UTF8.h" -//------------------------------------------------------------------------ - -// #define LOG_CAIRO - -#ifdef LOG_CAIRO -#define LOG(x) (x) -#else -#define LOG(x) -#endif - -static inline void printMatrix(cairo_matrix_t *matrix){ - printf("%f %f, %f %f (%f %f)\n", matrix->xx, matrix->yx, - matrix->xy, matrix->yy, - matrix->x0, matrix->y0); -} - -//------------------------------------------------------------------------ -// CairoImage -//------------------------------------------------------------------------ - -CairoImage::CairoImage (double x1, double y1, double x2, double y2) { - this->image = NULL; - this->x1 = x1; - this->y1 = y1; - this->x2 = x2; - this->y2 = y2; -} - -CairoImage::~CairoImage () { - if (image) - cairo_surface_destroy (image); -} - -void CairoImage::setImage (cairo_surface_t *image) { - if (this->image) - cairo_surface_destroy (this->image); - this->image = cairo_surface_reference (image); -} - -//------------------------------------------------------------------------ -// CairoOutputDev -//------------------------------------------------------------------------ - -// We cannot tie the lifetime of an FT_Library object to that of -// CairoOutputDev, since any FT_Faces created with it may end up with a -// reference by Cairo which can be held long after the CairoOutputDev is -// deleted. The simplest way to avoid problems is to never tear down the -// FT_Library instance; to avoid leaks, just use a single global instance -// initialized the first time it is needed. -FT_Library CairoOutputDev::ft_lib; -GBool CairoOutputDev::ft_lib_initialized = gFalse; - -CairoOutputDev::CairoOutputDev() { - xref = NULL; - catalog = NULL; - - if (!ft_lib_initialized) { - FT_Init_FreeType(&ft_lib); - ft_lib_initialized = gTrue; - } - - fontEngine = NULL; - fontEngine_owner = gFalse; - glyphs = NULL; - fill_pattern = NULL; - fill_color.r = fill_color.g = fill_color.b = 0; - stroke_pattern = NULL; - stroke_color.r = stroke_color.g = stroke_color.b = 0; - stroke_opacity = 1.0; - fill_opacity = 1.0; - textClipPath = NULL; - strokePathClip = NULL; - haveCSPattern = gFalse; - cairo = NULL; - currentFont = NULL; - prescaleImages = gTrue; - printing = gTrue; - use_show_text_glyphs = gFalse; - inType3Char = gFalse; - t3_glyph_has_bbox = gFalse; - - groupColorSpaceStack = NULL; - maskStack = NULL; - group = NULL; - mask = NULL; - shape = NULL; - cairo_shape = NULL; - knockoutCount = 0; - - text = NULL; - actualText = NULL; - - // the SA parameter supposedly defaults to false, but Acrobat - // apparently hardwires it to true - stroke_adjust = globalParams->getStrokeAdjust(); - align_stroke_coords = gFalse; - adjusted_stroke_width = gFalse; -} - -CairoOutputDev::~CairoOutputDev() { - if (fontEngine_owner && fontEngine) { - delete fontEngine; - } - - if (cairo) - cairo_destroy (cairo); - cairo_pattern_destroy (stroke_pattern); - cairo_pattern_destroy (fill_pattern); - if (group) - cairo_pattern_destroy (group); - if (mask) - cairo_pattern_destroy (mask); - if (shape) - cairo_pattern_destroy (shape); - if (text) - text->decRefCnt(); - if (actualText) - delete actualText; -} - -void CairoOutputDev::setCairo(cairo_t *cairo) -{ - if (this->cairo != NULL) { - cairo_status_t status = cairo_status (this->cairo); - if (status) { - warning("cairo context error: %s\n", cairo_status_to_string(status)); - } - cairo_destroy (this->cairo); - assert(!cairo_shape); - } - if (cairo != NULL) { - this->cairo = cairo_reference (cairo); - /* save the initial matrix so that we can use it for type3 fonts. */ - //XXX: is this sufficient? could we miss changes to the matrix somehow? - cairo_get_matrix(cairo, &orig_matrix); - } else { - this->cairo = NULL; - this->cairo_shape = NULL; - } -} - -void CairoOutputDev::setTextPage(TextPage *text) -{ - if (this->text) - this->text->decRefCnt(); - if (actualText) - delete actualText; - if (text) { - this->text = text; - this->text->incRefCnt(); - actualText = new ActualText(text); - } else { - this->text = NULL; - actualText = NULL; - } -} - -void CairoOutputDev::startDoc(XRef *xrefA, Catalog *catalogA, - CairoFontEngine *parentFontEngine) { - xref = xrefA; - catalog = catalogA; - if (parentFontEngine) { - fontEngine = parentFontEngine; - } else { - if (fontEngine) { - delete fontEngine; - } - fontEngine = new CairoFontEngine(ft_lib); - fontEngine_owner = gTrue; - } -} - -void CairoOutputDev::startPage(int pageNum, GfxState *state) { - /* set up some per page defaults */ - cairo_pattern_destroy(fill_pattern); - cairo_pattern_destroy(stroke_pattern); - - fill_pattern = cairo_pattern_create_rgb(0., 0., 0.); - stroke_pattern = cairo_pattern_reference(fill_pattern); - - if (text) - text->startPage(state); -} - -void CairoOutputDev::endPage() { - if (text) { - text->endPage(); - text->coalesce(gTrue, gFalse); - } -} - -void CairoOutputDev::saveState(GfxState *state) { - LOG(printf ("save\n")); - cairo_save (cairo); - if (cairo_shape) - cairo_save (cairo_shape); - - MaskStack *ms = new MaskStack; - ms->mask = cairo_pattern_reference(mask); - ms->next = maskStack; - maskStack = ms; -} - -void CairoOutputDev::restoreState(GfxState *state) { - LOG(printf ("restore\n")); - cairo_restore (cairo); - if (cairo_shape) - cairo_restore (cairo_shape); - - /* These aren't restored by cairo_restore() since we keep them in - * the output device. */ - updateFillColor(state); - updateStrokeColor(state); - updateFillOpacity(state); - updateStrokeOpacity(state); - updateBlendMode(state); - - MaskStack* ms = maskStack; - if (ms) { - if (mask) - cairo_pattern_destroy(mask); - mask = ms->mask; - maskStack = ms->next; - delete ms; - } -} - -void CairoOutputDev::updateAll(GfxState *state) { - updateLineDash(state); - updateLineJoin(state); - updateLineCap(state); - updateLineWidth(state); - updateFlatness(state); - updateMiterLimit(state); - updateFillColor(state); - updateStrokeColor(state); - updateFillOpacity(state); - updateStrokeOpacity(state); - updateBlendMode(state); - needFontUpdate = gTrue; - if (text) - text->updateFont(state); -} - -void CairoOutputDev::setDefaultCTM(double *ctm) { - cairo_matrix_t matrix; - matrix.xx = ctm[0]; - matrix.yx = ctm[1]; - matrix.xy = ctm[2]; - matrix.yy = ctm[3]; - matrix.x0 = ctm[4]; - matrix.y0 = ctm[5]; - - cairo_transform (cairo, &matrix); - if (cairo_shape) - cairo_transform (cairo_shape, &matrix); - - OutputDev::setDefaultCTM(ctm); -} - -void CairoOutputDev::updateCTM(GfxState *state, double m11, double m12, - double m21, double m22, - double m31, double m32) { - cairo_matrix_t matrix, invert_matrix; - matrix.xx = m11; - matrix.yx = m12; - matrix.xy = m21; - matrix.yy = m22; - matrix.x0 = m31; - matrix.y0 = m32; - - /* Make sure the matrix is invertible before setting it. - * cairo will blow up if we give it a matrix that's not - * invertible, so we need to check before passing it - * to cairo_transform. Ignoring it is likely to give better - * results than not rendering anything at all. See #14398 - * - * Ideally, we could do the cairo_transform - * and then check if anything went wrong and fix it then - * instead of having to invert the matrix. */ - invert_matrix = matrix; - if (cairo_matrix_invert(&invert_matrix)) { - warning("matrix not invertible\n"); - return; - } - - cairo_transform (cairo, &matrix); - if (cairo_shape) - cairo_transform (cairo_shape, &matrix); - updateLineDash(state); - updateLineJoin(state); - updateLineCap(state); - updateLineWidth(state); -} - -void CairoOutputDev::updateLineDash(GfxState *state) { - double *dashPattern; - int dashLength; - double dashStart; - - state->getLineDash(&dashPattern, &dashLength, &dashStart); - cairo_set_dash (cairo, dashPattern, dashLength, dashStart); - if (cairo_shape) - cairo_set_dash (cairo_shape, dashPattern, dashLength, dashStart); -} - -void CairoOutputDev::updateFlatness(GfxState *state) { - // cairo_set_tolerance (cairo, state->getFlatness()); -} - -void CairoOutputDev::updateLineJoin(GfxState *state) { - switch (state->getLineJoin()) { - case 0: - cairo_set_line_join (cairo, CAIRO_LINE_JOIN_MITER); - break; - case 1: - cairo_set_line_join (cairo, CAIRO_LINE_JOIN_ROUND); - break; - case 2: - cairo_set_line_join (cairo, CAIRO_LINE_JOIN_BEVEL); - break; - } - if (cairo_shape) - cairo_set_line_join (cairo_shape, cairo_get_line_join(cairo)); -} - -void CairoOutputDev::updateLineCap(GfxState *state) { - switch (state->getLineCap()) { - case 0: - cairo_set_line_cap (cairo, CAIRO_LINE_CAP_BUTT); - break; - case 1: - cairo_set_line_cap (cairo, CAIRO_LINE_CAP_ROUND); - break; - case 2: - cairo_set_line_cap (cairo, CAIRO_LINE_CAP_SQUARE); - break; - } - if (cairo_shape) - cairo_set_line_cap (cairo_shape, cairo_get_line_cap(cairo)); -} - -void CairoOutputDev::updateMiterLimit(GfxState *state) { - cairo_set_miter_limit (cairo, state->getMiterLimit()); - if (cairo_shape) - cairo_set_miter_limit (cairo_shape, state->getMiterLimit()); -} - -#define MIN(a,b) (((a) < (b)) ? (a) : (b)) - -void CairoOutputDev::updateLineWidth(GfxState *state) { - LOG(printf ("line width: %f\n", state->getLineWidth())); - adjusted_stroke_width = gFalse; - if (state->getLineWidth() == 0.0) { - /* find out how big pixels (device unit) are in the x and y directions - * choose the smaller of the two as our line width */ - double x = 1.0, y = 1.0; - if (printing) { - // assume printer pixel size is 1/600 inch - x = 72.0/600; - y = 72.0/600; - } - cairo_device_to_user_distance(cairo, &x, &y); - cairo_set_line_width (cairo, MIN(fabs(x),fabs(y))); - } else { - double width = state->getLineWidth(); - if (stroke_adjust && !printing) { - double x, y; - x = y = width; - - /* find out line width in device units */ - cairo_user_to_device_distance(cairo, &x, &y); - if (x <= 1.0 && y <= 1.0) { - /* adjust width to at least one device pixel */ - x = y = 1.0; - cairo_device_to_user_distance(cairo, &x, &y); - width = MIN(fabs(x),fabs(y)); - adjusted_stroke_width = gTrue; - } - } - cairo_set_line_width (cairo, width); - } - if (cairo_shape) - cairo_set_line_width (cairo_shape, cairo_get_line_width (cairo)); -} - -void CairoOutputDev::updateFillColor(GfxState *state) { - GfxRGB color = fill_color; - - state->getFillRGB(&fill_color); - if (color.r != fill_color.r || - color.g != fill_color.g || - color.b != fill_color.b) - { - cairo_pattern_destroy(fill_pattern); - fill_pattern = cairo_pattern_create_rgba(colToDbl(fill_color.r), - colToDbl(fill_color.g), - colToDbl(fill_color.b), - fill_opacity); - - LOG(printf ("fill color: %d %d %d\n", - fill_color.r, fill_color.g, fill_color.b)); - } -} - -void CairoOutputDev::updateStrokeColor(GfxState *state) { - GfxRGB color = stroke_color; - - state->getStrokeRGB(&stroke_color); - if (color.r != stroke_color.r || - color.g != stroke_color.g || - color.b != stroke_color.b) - { - cairo_pattern_destroy(stroke_pattern); - stroke_pattern = cairo_pattern_create_rgba(colToDbl(stroke_color.r), - colToDbl(stroke_color.g), - colToDbl(stroke_color.b), - stroke_opacity); - - LOG(printf ("stroke color: %d %d %d\n", - stroke_color.r, stroke_color.g, stroke_color.b)); - } -} - -void CairoOutputDev::updateFillOpacity(GfxState *state) { - double opacity = fill_opacity; - - fill_opacity = state->getFillOpacity(); - if (opacity != fill_opacity) { - cairo_pattern_destroy(fill_pattern); - fill_pattern = cairo_pattern_create_rgba(colToDbl(fill_color.r), - colToDbl(fill_color.g), - colToDbl(fill_color.b), - fill_opacity); - - LOG(printf ("fill opacity: %f\n", fill_opacity)); - } -} - -void CairoOutputDev::updateStrokeOpacity(GfxState *state) { - double opacity = stroke_opacity; - - stroke_opacity = state->getStrokeOpacity(); - if (opacity != stroke_opacity) { - cairo_pattern_destroy(stroke_pattern); - stroke_pattern = cairo_pattern_create_rgba(colToDbl(stroke_color.r), - colToDbl(stroke_color.g), - colToDbl(stroke_color.b), - stroke_opacity); - - LOG(printf ("stroke opacity: %f\n", stroke_opacity)); - } -} - -void CairoOutputDev::updateFillColorStop(GfxState *state, double offset) { - state->getFillRGB(&fill_color); - - cairo_pattern_add_color_stop_rgba(fill_pattern, offset, - colToDbl(fill_color.r), - colToDbl(fill_color.g), - colToDbl(fill_color.b), - fill_opacity); - LOG(printf ("fill color stop: %f (%d, %d, %d)\n", - offset, fill_color.r, fill_color.g, fill_color.b)); -} - -void CairoOutputDev::updateBlendMode(GfxState *state) { - switch (state->getBlendMode()) { - default: - case gfxBlendNormal: - cairo_set_operator (cairo, CAIRO_OPERATOR_OVER); - break; - case gfxBlendMultiply: - cairo_set_operator (cairo, CAIRO_OPERATOR_MULTIPLY); - break; - case gfxBlendScreen: - cairo_set_operator (cairo, CAIRO_OPERATOR_SCREEN); - break; - case gfxBlendOverlay: - cairo_set_operator (cairo, CAIRO_OPERATOR_OVERLAY); - break; - case gfxBlendDarken: - cairo_set_operator (cairo, CAIRO_OPERATOR_DARKEN); - break; - case gfxBlendLighten: - cairo_set_operator (cairo, CAIRO_OPERATOR_LIGHTEN); - break; - case gfxBlendColorDodge: - cairo_set_operator (cairo, CAIRO_OPERATOR_COLOR_DODGE); - break; - case gfxBlendColorBurn: - cairo_set_operator (cairo, CAIRO_OPERATOR_COLOR_BURN); - break; - case gfxBlendHardLight: - cairo_set_operator (cairo, CAIRO_OPERATOR_HARD_LIGHT); - break; - case gfxBlendSoftLight: - cairo_set_operator (cairo, CAIRO_OPERATOR_SOFT_LIGHT); - break; - case gfxBlendDifference: - cairo_set_operator (cairo, CAIRO_OPERATOR_DIFFERENCE); - break; - case gfxBlendExclusion: - cairo_set_operator (cairo, CAIRO_OPERATOR_EXCLUSION); - break; - case gfxBlendHue: - cairo_set_operator (cairo, CAIRO_OPERATOR_HSL_HUE); - break; - case gfxBlendSaturation: - cairo_set_operator (cairo, CAIRO_OPERATOR_HSL_SATURATION); - break; - case gfxBlendColor: - cairo_set_operator (cairo, CAIRO_OPERATOR_HSL_COLOR); - break; - case gfxBlendLuminosity: - cairo_set_operator (cairo, CAIRO_OPERATOR_HSL_LUMINOSITY); - break; - } - LOG(printf ("blend mode: %d\n", (int)state->getBlendMode())); -} - -void CairoOutputDev::updateFont(GfxState *state) { - cairo_font_face_t *font_face; - cairo_matrix_t matrix, invert_matrix; - - LOG(printf ("updateFont() font=%s\n", state->getFont()->getName()->getCString())); - - needFontUpdate = gFalse; - - //FIXME: use cairo font engine? - if (text) - text->updateFont(state); - - currentFont = fontEngine->getFont (state->getFont(), xref, catalog, printing); - - if (!currentFont) - return; - - font_face = currentFont->getFontFace(); - cairo_set_font_face (cairo, font_face); - - use_show_text_glyphs = state->getFont()->hasToUnicodeCMap() && - cairo_surface_has_show_text_glyphs (cairo_get_target (cairo)); - - double fontSize = state->getFontSize(); - double *m = state->getTextMat(); - /* NOTE: adjusting by a constant is hack. The correct solution - * is probably to use user-fonts and compute the scale on a per - * glyph basis instead of for the entire font */ - double w = currentFont->getSubstitutionCorrection(state->getFont()); - matrix.xx = m[0] * fontSize * state->getHorizScaling() * w; - matrix.yx = m[1] * fontSize * state->getHorizScaling() * w; - matrix.xy = -m[2] * fontSize; - matrix.yy = -m[3] * fontSize; - matrix.x0 = 0; - matrix.y0 = 0; - - LOG(printf ("font matrix: %f %f %f %f\n", matrix.xx, matrix.yx, matrix.xy, matrix.yy)); - - /* Make sure the font matrix is invertible before setting it. cairo - * will blow up if we give it a matrix that's not invertible, so we - * need to check before passing it to cairo_set_font_matrix. Ignoring it - * is likely to give better results than not rendering anything at - * all. See #18254. - */ - invert_matrix = matrix; - if (cairo_matrix_invert(&invert_matrix)) { - warning("font matrix not invertible\n"); - return; - } - - cairo_set_font_matrix (cairo, &matrix); -} - -void CairoOutputDev::alignStrokeCoords(double *x, double *y) -{ - /* see http://www.cairographics.org/FAQ/#sharp_lines */ - cairo_user_to_device (cairo, x, y); - *x = floor(*x) + 0.5; - *y = floor(*y) + 0.5; - cairo_device_to_user (cairo, x, y); -} - -void CairoOutputDev::doPath(cairo_t *cairo, GfxState *state, GfxPath *path) { - GfxSubpath *subpath; - int i, j; - cairo_new_path (cairo); - for (i = 0; i < path->getNumSubpaths(); ++i) { - subpath = path->getSubpath(i); - if (subpath->getNumPoints() > 0) { - if (align_stroke_coords) { - double x = subpath->getX(0); - double y = subpath->getY(0); - alignStrokeCoords(&x, &y); - cairo_move_to (cairo, x, y); - } else { - cairo_move_to (cairo, subpath->getX(0), subpath->getY(0)); - } - j = 1; - while (j < subpath->getNumPoints()) { - if (subpath->getCurve(j)) { - cairo_curve_to( cairo, - subpath->getX(j), subpath->getY(j), - subpath->getX(j+1), subpath->getY(j+1), - subpath->getX(j+2), subpath->getY(j+2)); - - j += 3; - } else { - if (align_stroke_coords) { - double x = subpath->getX(j); - double y = subpath->getY(j); - alignStrokeCoords(&x, &y); - cairo_line_to (cairo, x, y); - } else { - cairo_line_to (cairo, subpath->getX(j), subpath->getY(j)); - } - ++j; - } - } - if (subpath->isClosed()) { - LOG (printf ("close\n")); - cairo_close_path (cairo); - } - } - } -} - -void CairoOutputDev::stroke(GfxState *state) { - if (inType3Char) { - GfxGray gray; - state->getFillGray(&gray); - if (colToDbl(gray) > 0.5) - return; - } - - if (adjusted_stroke_width) - align_stroke_coords = gTrue; - doPath (cairo, state, state->getPath()); - align_stroke_coords = gFalse; - cairo_set_source (cairo, stroke_pattern); - LOG(printf ("stroke\n")); - cairo_stroke (cairo); - if (cairo_shape) { - doPath (cairo_shape, state, state->getPath()); - cairo_stroke (cairo_shape); - } -} - -void CairoOutputDev::fill(GfxState *state) { - if (inType3Char) { - GfxGray gray; - state->getFillGray(&gray); - if (colToDbl(gray) > 0.5) - return; - } - - doPath (cairo, state, state->getPath()); - cairo_set_fill_rule (cairo, CAIRO_FILL_RULE_WINDING); - cairo_set_source (cairo, fill_pattern); - LOG(printf ("fill\n")); - //XXX: how do we get the path - if (mask) { - cairo_clip (cairo); - cairo_mask (cairo, mask); - } else if (strokePathClip) { - fillToStrokePathClip(); - } else { - cairo_fill (cairo); - } - if (cairo_shape) { - cairo_set_fill_rule (cairo_shape, CAIRO_FILL_RULE_WINDING); - doPath (cairo_shape, state, state->getPath()); - cairo_fill (cairo_shape); - } -} - -void CairoOutputDev::eoFill(GfxState *state) { - doPath (cairo, state, state->getPath()); - cairo_set_fill_rule (cairo, CAIRO_FILL_RULE_EVEN_ODD); - cairo_set_source (cairo, fill_pattern); - LOG(printf ("fill-eo\n")); - cairo_fill (cairo); - - if (cairo_shape) { - cairo_set_fill_rule (cairo_shape, CAIRO_FILL_RULE_EVEN_ODD); - doPath (cairo_shape, state, state->getPath()); - cairo_fill (cairo_shape); - } - -} - -GBool CairoOutputDev::tilingPatternFill(GfxState *state, Catalog *cat, Object *str, - double *pmat, int paintType, int /*tilingType*/, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep) -{ - PDFRectangle box; - Gfx *gfx; - cairo_pattern_t *pattern; - cairo_surface_t *surface; - cairo_matrix_t matrix; - cairo_t *old_cairo; - double xMin, yMin, xMax, yMax; - double width, height; - int surface_width, surface_height; - StrokePathClip *strokePathTmp; - - width = bbox[2] - bbox[0]; - height = bbox[3] - bbox[1]; - - if (xStep != width || yStep != height) - return gFalse; - /* TODO: implement the other cases here too */ - - surface_width = (int) ceil (width); - surface_height = (int) ceil (height); - - surface = cairo_surface_create_similar (cairo_get_target (cairo), - CAIRO_CONTENT_COLOR_ALPHA, - surface_width, surface_height); - if (cairo_surface_status (surface)) - return gFalse; - - old_cairo = cairo; - cairo = cairo_create (surface); - cairo_surface_destroy (surface); - - box.x1 = bbox[0]; box.y1 = bbox[1]; - box.x2 = bbox[2]; box.y2 = bbox[3]; - strokePathTmp = strokePathClip; - strokePathClip = NULL; - gfx = new Gfx(xref, this, resDict, catalog, &box, NULL); - gfx->display(str); - delete gfx; - strokePathClip = strokePathTmp; - - pattern = cairo_pattern_create_for_surface (cairo_get_target (cairo)); - cairo_destroy (cairo); - cairo = old_cairo; - if (cairo_pattern_status (pattern)) - return gFalse; - - state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); - cairo_rectangle (cairo, xMin, yMin, xMax - xMin, yMax - yMin); - - cairo_matrix_init_scale (&matrix, surface_width / width, surface_height / height); - cairo_pattern_set_matrix (pattern, &matrix); - - cairo_matrix_init (&matrix, mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]); - cairo_transform (cairo, &matrix); - cairo_set_source (cairo, pattern); - cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT); - if (strokePathClip) { - fillToStrokePathClip(); - } else { - cairo_fill (cairo); - } - - cairo_pattern_destroy (pattern); - - return gTrue; -} - -GBool CairoOutputDev::axialShadedFill(GfxState *state, GfxAxialShading *shading, double tMin, double tMax) { - double x0, y0, x1, y1; - double dx, dy; - - shading->getCoords(&x0, &y0, &x1, &y1); - dx = x1 - x0; - dy = y1 - y0; - - cairo_pattern_destroy(fill_pattern); - fill_pattern = cairo_pattern_create_linear (x0 + tMin * dx, y0 + tMin * dy, - x0 + tMax * dx, y0 + tMax * dy); - if (!shading->getExtend0() && !shading->getExtend1()) - cairo_pattern_set_extend (fill_pattern, CAIRO_EXTEND_NONE); - else - cairo_pattern_set_extend (fill_pattern, CAIRO_EXTEND_PAD); - - LOG (printf ("axial-sh\n")); - - // TODO: use the actual stops in the shading in the case - // of linear interpolation (Type 2 Exponential functions with N=1) - return gFalse; -} - -GBool CairoOutputDev::axialShadedSupportExtend(GfxState *state, GfxAxialShading *shading) -{ - return (shading->getExtend0() == shading->getExtend1()); -} - -GBool CairoOutputDev::radialShadedFill(GfxState *state, GfxRadialShading *shading, double sMin, double sMax) { - double x0, y0, r0, x1, y1, r1; - double dx, dy, dr; - - shading->getCoords(&x0, &y0, &r0, &x1, &y1, &r1); - dx = x1 - x0; - dy = y1 - y0; - dr = r1 - r0; - cairo_pattern_destroy(fill_pattern); - fill_pattern = cairo_pattern_create_radial (x0 + sMin * dx, - y0 + sMin * dy, - r0 + sMin * dr, - x0 + sMax * dx, - y0 + sMax * dy, - r0 + sMax * dr); - if (shading->getExtend0() && shading->getExtend1()) - cairo_pattern_set_extend (fill_pattern, CAIRO_EXTEND_PAD); - else - cairo_pattern_set_extend (fill_pattern, CAIRO_EXTEND_NONE); - - LOG (printf ("radial-sh\n")); - - return gFalse; -} - -GBool CairoOutputDev::radialShadedSupportExtend(GfxState *state, GfxRadialShading *shading) -{ - return (shading->getExtend0() == shading->getExtend1()); -} - -#if CAIRO_VERSION == CAIRO_VERSION_ENCODE(1, 11, 2) -GBool CairoOutputDev::gouraudTriangleShadedFill(GfxState *state, GfxGouraudTriangleShading *shading) -{ - double x0, y0, x1, y1, x2, y2; - GfxColor color[3]; - int i, j; - GfxRGB rgb; - - cairo_pattern_destroy(fill_pattern); - fill_pattern = cairo_pattern_create_mesh (); - - for (i = 0; i < shading->getNTriangles(); i++) { - shading->getTriangle(i, - &x0, &y0, &color[0], - &x1, &y1, &color[1], - &x2, &y2, &color[2]); - - cairo_pattern_mesh_begin_patch (fill_pattern); - - cairo_pattern_mesh_move_to (fill_pattern, x0, y0); - cairo_pattern_mesh_line_to (fill_pattern, x1, y1); - cairo_pattern_mesh_line_to (fill_pattern, x2, y2); - - for (j = 0; j < 3; j++) { - shading->getColorSpace()->getRGB(&color[j], &rgb); - cairo_pattern_mesh_set_corner_color_rgb (fill_pattern, j, - colToDbl(rgb.r), - colToDbl(rgb.g), - colToDbl(rgb.b)); - } - - cairo_pattern_mesh_end_patch (fill_pattern); - } - - double xMin, yMin, xMax, yMax; - // get the clip region bbox - state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); - state->moveTo(xMin, yMin); - state->lineTo(xMin, yMax); - state->lineTo(xMax, yMax); - state->lineTo(xMax, yMin); - state->closePath(); - fill(state); - state->clearPath(); - - return gTrue; -} - -GBool CairoOutputDev::patchMeshShadedFill(GfxState *state, GfxPatchMeshShading *shading) -{ - int i, j, k; - - cairo_pattern_destroy(fill_pattern); - fill_pattern = cairo_pattern_create_mesh (); - - for (i = 0; i < shading->getNPatches(); i++) { - GfxPatch *patch = shading->getPatch(i); - GfxColor color; - GfxRGB rgb; - - cairo_pattern_mesh_begin_patch (fill_pattern); - - cairo_pattern_mesh_move_to (fill_pattern, patch->x[0][0], patch->y[0][0]); - cairo_pattern_mesh_curve_to (fill_pattern, - patch->x[0][1], patch->y[0][1], - patch->x[0][2], patch->y[0][2], - patch->x[0][3], patch->y[0][3]); - - cairo_pattern_mesh_curve_to (fill_pattern, - patch->x[1][3], patch->y[1][3], - patch->x[2][3], patch->y[2][3], - patch->x[3][3], patch->y[3][3]); - - cairo_pattern_mesh_curve_to (fill_pattern, - patch->x[3][2], patch->y[3][2], - patch->x[3][1], patch->y[3][1], - patch->x[3][0], patch->y[3][0]); - - cairo_pattern_mesh_curve_to (fill_pattern, - patch->x[2][0], patch->y[2][0], - patch->x[1][0], patch->y[1][0], - patch->x[0][0], patch->y[0][0]); - - cairo_pattern_mesh_set_control_point (fill_pattern, 0, patch->x[1][1], patch->y[1][1]); - cairo_pattern_mesh_set_control_point (fill_pattern, 1, patch->x[1][2], patch->y[1][2]); - cairo_pattern_mesh_set_control_point (fill_pattern, 2, patch->x[2][2], patch->y[2][2]); - cairo_pattern_mesh_set_control_point (fill_pattern, 3, patch->x[2][1], patch->y[2][1]); - - for (j = 0; j < 4; j++) { - int u, v; - - switch (j) { - case 0: - u = 0; v = 0; - break; - case 1: - u = 0; v = 1; - break; - case 2: - u = 1; v = 1; - break; - case 3: - u = 1; v = 0; - break; - } - - if (shading->isParameterized()) { - shading->getParameterizedColor (patch->color[u][v].c[0], &color); - } else { - for (k = 0; k < shading->getColorSpace()->getNComps(); k++) { - // simply cast to the desired type; that's all what is needed. - color.c[k] = GfxColorComp (patch->color[u][v].c[k]); - } - } - - shading->getColorSpace()->getRGB(&color, &rgb); - cairo_pattern_mesh_set_corner_color_rgb (fill_pattern, j, - colToDbl(rgb.r), - colToDbl(rgb.g), - colToDbl(rgb.b)); - } - cairo_pattern_mesh_end_patch (fill_pattern); - } - - double xMin, yMin, xMax, yMax; - // get the clip region bbox - state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); - state->moveTo(xMin, yMin); - state->lineTo(xMin, yMax); - state->lineTo(xMax, yMax); - state->lineTo(xMax, yMin); - state->closePath(); - fill(state); - state->clearPath(); - - return gTrue; -} -#endif /* CAIRO_VERSION == CAIRO_VERSION_ENCODE(1, 11, 2) */ - -void CairoOutputDev::clip(GfxState *state) { - doPath (cairo, state, state->getPath()); - cairo_set_fill_rule (cairo, CAIRO_FILL_RULE_WINDING); - cairo_clip (cairo); - LOG (printf ("clip\n")); - if (cairo_shape) { - doPath (cairo_shape, state, state->getPath()); - cairo_set_fill_rule (cairo_shape, CAIRO_FILL_RULE_WINDING); - cairo_clip (cairo_shape); - } -} - -void CairoOutputDev::eoClip(GfxState *state) { - doPath (cairo, state, state->getPath()); - cairo_set_fill_rule (cairo, CAIRO_FILL_RULE_EVEN_ODD); - cairo_clip (cairo); - LOG (printf ("clip-eo\n")); - if (cairo_shape) { - doPath (cairo_shape, state, state->getPath()); - cairo_set_fill_rule (cairo_shape, CAIRO_FILL_RULE_EVEN_ODD); - cairo_clip (cairo_shape); - } - -} - -void CairoOutputDev::clipToStrokePath(GfxState *state) { - LOG(printf("clip-to-stroke-path\n")); - strokePathClip = (StrokePathClip*)gmalloc (sizeof(*strokePathClip)); - doPath (cairo, state, state->getPath()); - strokePathClip->path = cairo_copy_path (cairo); - cairo_get_matrix (cairo, &strokePathClip->ctm); - strokePathClip->line_width = cairo_get_line_width (cairo); - strokePathClip->dash_count = cairo_get_dash_count (cairo); - if (strokePathClip->dash_count) { - strokePathClip->dashes = (double*) gmallocn (sizeof(double), strokePathClip->dash_count); - cairo_get_dash (cairo, strokePathClip->dashes, &strokePathClip->dash_offset); - } else { - strokePathClip->dashes = NULL; - } - strokePathClip->cap = cairo_get_line_cap (cairo); - strokePathClip->join = cairo_get_line_join (cairo); - strokePathClip->miter = cairo_get_miter_limit (cairo); -} - -void CairoOutputDev::fillToStrokePathClip() { - cairo_save (cairo); - - cairo_set_matrix (cairo, &strokePathClip->ctm); - cairo_set_line_width (cairo, strokePathClip->line_width); - strokePathClip->dash_count = cairo_get_dash_count (cairo); - cairo_set_dash (cairo, strokePathClip->dashes, strokePathClip->dash_count, strokePathClip->dash_offset); - cairo_set_line_cap (cairo, strokePathClip->cap); - cairo_set_line_join (cairo, strokePathClip->join); - cairo_set_miter_limit (cairo, strokePathClip->miter); - - cairo_new_path (cairo); - cairo_append_path (cairo, strokePathClip->path); - cairo_stroke (cairo); - - cairo_restore (cairo); - - cairo_path_destroy (strokePathClip->path); - if (strokePathClip->dashes) - gfree (strokePathClip->dashes); - gfree (strokePathClip); - strokePathClip = NULL; -} - -void CairoOutputDev::beginString(GfxState *state, GooString *s) -{ - int len = s->getLength(); - - if (needFontUpdate) - updateFont(state); - - if (!currentFont) - return; - - glyphs = (cairo_glyph_t *) gmallocn (len, sizeof (cairo_glyph_t)); - glyphCount = 0; - if (use_show_text_glyphs) { - clusters = (cairo_text_cluster_t *) gmallocn (len, sizeof (cairo_text_cluster_t)); - clusterCount = 0; - utf8Max = len*2; // start with twice the number of glyphs. we will realloc if we need more. - utf8 = (char *) gmalloc (utf8Max); - utf8Count = 0; - } -} - -void CairoOutputDev::drawChar(GfxState *state, double x, double y, - double dx, double dy, - double originX, double originY, - CharCode code, int nBytes, Unicode *u, int uLen) -{ - if (currentFont) { - glyphs[glyphCount].index = currentFont->getGlyph (code, u, uLen); - glyphs[glyphCount].x = x - originX; - glyphs[glyphCount].y = y - originY; - glyphCount++; - if (use_show_text_glyphs) { - if (utf8Max - utf8Count < uLen*6) { - // utf8 encoded characters can be up to 6 bytes - if (utf8Max > uLen*6) - utf8Max *= 2; - else - utf8Max += 2*uLen*6; - utf8 = (char *) grealloc (utf8, utf8Max); - } - clusters[clusterCount].num_bytes = 0; - for (int i = 0; i < uLen; i++) { - int size = mapUTF8 (u[i], utf8 + utf8Count, utf8Max - utf8Count); - utf8Count += size; - clusters[clusterCount].num_bytes += size; - } - clusters[clusterCount].num_glyphs = 1; - clusterCount++; - } - } - - if (!text) - return; - actualText->addChar (state, x, y, dx, dy, code, nBytes, u, uLen); -} - -void CairoOutputDev::endString(GfxState *state) -{ - int render; - - if (!currentFont) - return; - - // endString can be called without a corresponding beginString. If this - // happens glyphs will be null so don't draw anything, just return. - // XXX: OutputDevs should probably not have to deal with this... - if (!glyphs) - return; - - // ignore empty strings and invisible text -- this is used by - // Acrobat Capture - render = state->getRender(); - if (render == 3 || glyphCount == 0) { - gfree(glyphs); - glyphs = NULL; - return; - } - - if (!(render & 1) && !haveCSPattern) { - LOG (printf ("fill string\n")); - cairo_set_source (cairo, fill_pattern); - if (use_show_text_glyphs) - cairo_show_text_glyphs (cairo, utf8, utf8Count, glyphs, glyphCount, clusters, clusterCount, (cairo_text_cluster_flags_t)0); - else - cairo_show_glyphs (cairo, glyphs, glyphCount); - if (cairo_shape) - cairo_show_glyphs (cairo_shape, glyphs, glyphCount); - } - - // stroke - if ((render & 3) == 1 || (render & 3) == 2) { - LOG (printf ("stroke string\n")); - cairo_set_source (cairo, stroke_pattern); - cairo_glyph_path (cairo, glyphs, glyphCount); - cairo_stroke (cairo); - if (cairo_shape) { - cairo_glyph_path (cairo_shape, glyphs, glyphCount); - cairo_stroke (cairo_shape); - } - } - - // clip - if (haveCSPattern || (render & 4)) { - LOG (printf ("clip string\n")); - // append the glyph path to textClipPath. - - // set textClipPath as the currentPath - if (textClipPath) { - cairo_append_path (cairo, textClipPath); - if (cairo_shape) { - cairo_append_path (cairo_shape, textClipPath); - } - cairo_path_destroy (textClipPath); - } - - // append the glyph path - cairo_glyph_path (cairo, glyphs, glyphCount); - - // move the path back into textClipPath - // and clear the current path - textClipPath = cairo_copy_path (cairo); - cairo_new_path (cairo); - if (cairo_shape) { - cairo_new_path (cairo_shape); - } - } - - gfree (glyphs); - glyphs = NULL; - if (use_show_text_glyphs) { - gfree (clusters); - clusters = NULL; - gfree (utf8); - utf8 = NULL; - } -} - - -GBool CairoOutputDev::beginType3Char(GfxState *state, double x, double y, - double dx, double dy, - CharCode code, Unicode *u, int uLen) { - - cairo_save (cairo); - double *ctm; - cairo_matrix_t matrix; - - ctm = state->getCTM(); - matrix.xx = ctm[0]; - matrix.yx = ctm[1]; - matrix.xy = ctm[2]; - matrix.yy = ctm[3]; - matrix.x0 = ctm[4]; - matrix.y0 = ctm[5]; - /* Restore the original matrix and then transform to matrix needed for the - * type3 font. This is ugly but seems to work. Perhaps there is a better way to do it?*/ - cairo_set_matrix(cairo, &orig_matrix); - cairo_transform(cairo, &matrix); - if (cairo_shape) { - cairo_save (cairo_shape); - cairo_set_matrix(cairo_shape, &orig_matrix); - cairo_transform(cairo_shape, &matrix); - } - cairo_pattern_destroy(stroke_pattern); - cairo_pattern_reference(fill_pattern); - stroke_pattern = fill_pattern; - return gFalse; -} - -void CairoOutputDev::endType3Char(GfxState *state) { - cairo_restore (cairo); - if (cairo_shape) { - cairo_restore (cairo_shape); - } -} - -void CairoOutputDev::type3D0(GfxState *state, double wx, double wy) { - t3_glyph_wx = wx; - t3_glyph_wy = wy; -} - -void CairoOutputDev::type3D1(GfxState *state, double wx, double wy, - double llx, double lly, double urx, double ury) { - t3_glyph_wx = wx; - t3_glyph_wy = wy; - t3_glyph_bbox[0] = llx; - t3_glyph_bbox[1] = lly; - t3_glyph_bbox[2] = urx; - t3_glyph_bbox[3] = ury; - t3_glyph_has_bbox = gTrue; -} - -void CairoOutputDev::beginTextObject(GfxState *state) { - if (!(state->getRender() & 4) && state->getFillColorSpace()->getMode() == csPattern) { - haveCSPattern = gTrue; - saveState(state); - } -} - -void CairoOutputDev::endTextObject(GfxState *state) { - if (haveCSPattern) { - haveCSPattern = gFalse; - if (state->getFillColorSpace()->getMode() != csPattern) { - if (textClipPath) { - cairo_new_path (cairo); - cairo_append_path (cairo, textClipPath); - cairo_set_fill_rule (cairo, CAIRO_FILL_RULE_WINDING); - cairo_set_source (cairo, fill_pattern); - cairo_fill (cairo); - if (cairo_shape) { - cairo_new_path (cairo_shape); - cairo_append_path (cairo_shape, textClipPath); - cairo_set_fill_rule (cairo_shape, CAIRO_FILL_RULE_WINDING); - cairo_fill (cairo_shape); - } - cairo_path_destroy (textClipPath); - textClipPath = NULL; - } - restoreState(state); - updateFillColor(state); - } - } - - if (textClipPath) { - // clip the accumulated text path - cairo_append_path (cairo, textClipPath); - cairo_clip (cairo); - if (cairo_shape) { - cairo_append_path (cairo_shape, textClipPath); - cairo_clip (cairo_shape); - } - cairo_path_destroy (textClipPath); - textClipPath = NULL; - } -} - -void CairoOutputDev::beginMarkedContent(char *name, Dict *properties) -{ - if (text) - actualText->beginMC(properties); -} - -void CairoOutputDev::endMarkedContent(GfxState *state) -{ - if (text) - actualText->endMC(state); -} - -static inline int splashRound(SplashCoord x) { - return (int)floor(x + 0.5); -} - -static inline int splashCeil(SplashCoord x) { - return (int)ceil(x); -} - -static inline int splashFloor(SplashCoord x) { - return (int)floor(x); -} - -static -cairo_surface_t *cairo_surface_create_similar_clip (cairo_t *cairo, cairo_content_t content) -{ - double x1, y1, x2, y2; - int width, height; - cairo_clip_extents (cairo, &x1, &y1, &x2, &y2); - cairo_matrix_t matrix; - cairo_get_matrix (cairo, &matrix); - //cairo_matrix_transform_point(&matrix, &x1, &y1); - //cairo_matrix_transform_point(&matrix, &x2, &y2);*/ - cairo_user_to_device(cairo, &x1, &y1); - cairo_user_to_device(cairo, &x2, &y2); - width = splashCeil(x2) - splashFloor(x1); - //XXX: negative matrix - ////height = splashCeil(y2) - splashFloor(y1); - height = splashFloor(y1) - splashCeil(y2); - cairo_surface_t *target = cairo_get_target (cairo); - cairo_surface_t *result; - - result = cairo_surface_create_similar (target, content, width, height); - double x_offset, y_offset; - cairo_surface_get_device_offset(target, &x_offset, &y_offset); - cairo_surface_set_device_offset(result, x_offset, y_offset); - - - return result; -} - - - -void CairoOutputDev::beginTransparencyGroup(GfxState * /*state*/, double * /*bbox*/, - GfxColorSpace * blendingColorSpace, - GBool /*isolated*/, GBool knockout, - GBool forSoftMask) { - /* push color space */ - ColorSpaceStack* css = new ColorSpaceStack; - css->cs = blendingColorSpace; - css->knockout = knockout; - css->next = groupColorSpaceStack; - groupColorSpaceStack = css; - - LOG(printf ("begin transparency group. knockout: %s\n", knockout ? "yes":"no")); - - if (knockout) { - knockoutCount++; - if (!cairo_shape) { - /* create a surface for tracking the shape */ - cairo_surface_t *cairo_shape_surface = cairo_surface_create_similar_clip (cairo, CAIRO_CONTENT_ALPHA); - cairo_shape = cairo_create (cairo_shape_surface); - cairo_surface_destroy (cairo_shape_surface); - - /* the color doesn't matter as long as it is opaque */ - cairo_set_source_rgb (cairo_shape, 0, 0, 0); - cairo_matrix_t matrix; - cairo_get_matrix (cairo, &matrix); - //printMatrix(&matrix); - cairo_set_matrix (cairo_shape, &matrix); - } else { - cairo_reference (cairo_shape); - } - } - if (groupColorSpaceStack->next && groupColorSpaceStack->next->knockout) { - /* we need to track the shape */ - cairo_push_group (cairo_shape); - } - if (0 && forSoftMask) - cairo_push_group_with_content (cairo, CAIRO_CONTENT_ALPHA); - else - cairo_push_group (cairo); - - /* push_group has an implicit cairo_save() */ - if (knockout) { - /*XXX: let's hope this matches the semantics needed */ - cairo_set_operator(cairo, CAIRO_OPERATOR_SOURCE); - } else { - cairo_set_operator(cairo, CAIRO_OPERATOR_OVER); - } -} - -void CairoOutputDev::endTransparencyGroup(GfxState * /*state*/) { - if (group) - cairo_pattern_destroy(group); - group = cairo_pop_group (cairo); - - LOG(printf ("end transparency group\n")); - - if (groupColorSpaceStack->next && groupColorSpaceStack->next->knockout) { - if (shape) - cairo_pattern_destroy(shape); - shape = cairo_pop_group (cairo_shape); - } -} - -void CairoOutputDev::paintTransparencyGroup(GfxState * /*state*/, double * /*bbox*/) { - cairo_set_source (cairo, group); - - LOG(printf ("paint transparency group\n")); - - if (!mask) { - //XXX: deal with mask && shape case - if (shape) { - cairo_save (cairo); - - /* OPERATOR_SOURCE w/ a mask is defined as (src IN mask) ADD (dest OUT mask) - * however our source has already been clipped to mask so we only need to - * do ADD and OUT */ - - /* clear the shape mask */ - cairo_set_source (cairo, shape); - cairo_set_operator (cairo, CAIRO_OPERATOR_DEST_OUT); - cairo_paint (cairo); - - cairo_set_operator (cairo, CAIRO_OPERATOR_ADD); - cairo_set_source (cairo, group); - cairo_paint (cairo); - - cairo_restore (cairo); - - cairo_pattern_destroy (shape); - shape = NULL; - } else { - cairo_paint_with_alpha (cairo, fill_opacity); - } - cairo_status_t status = cairo_status(cairo); - if (status) - printf("BAD status: %s\n", cairo_status_to_string(status)); - } else { - cairo_mask(cairo, mask); - - cairo_pattern_destroy(mask); - mask = NULL; - } - - popTransparencyGroup(); -} - -static uint32_t luminocity(uint32_t x) -{ - int r = (x >> 16) & 0xff; - int g = (x >> 8) & 0xff; - int b = (x >> 0) & 0xff; - // an arbitrary integer approximation of .3*r + .59*g + .11*b - int y = (r*19661+g*38666+b*7209 + 32829)>>16; - return y << 24; -} - - -/* XXX: do we need to deal with shape here? */ -void CairoOutputDev::setSoftMask(GfxState * state, double * bbox, GBool alpha, - Function * transferFunc, GfxColor * backdropColor) { - cairo_pattern_destroy(mask); - - LOG(printf ("set softMask\n")); - - if (alpha == false) { - /* We need to mask according to the luminocity of the group. - * So we paint the group to an image surface convert it to a luminocity map - * and then use that as the mask. */ - - double x1, y1, x2, y2, tmp; - cairo_clip_extents(cairo, &x1, &y1, &x2, &y2); - cairo_user_to_device(cairo, &x1, &y1); - cairo_user_to_device(cairo, &x2, &y2); - if (x1 > x2) { - tmp = x1; - x1 = x2; - x2 = tmp; - } - - if (y1 > y2) { - tmp = y1; - y1 = y2; - y2 = tmp; - } - - int width = (int)(ceil(x2) - floor(x1)); - int height = (int)(ceil(y2) - floor(y1)); - - cairo_surface_t *source = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height); - cairo_t *maskCtx = cairo_create(source); - - //XXX: hopefully this uses the correct color space */ - GfxRGB backdropColorRGB; - groupColorSpaceStack->cs->getRGB(backdropColor, &backdropColorRGB); - /* paint the backdrop */ - cairo_set_source_rgb(maskCtx, - colToDbl(backdropColorRGB.r), - colToDbl(backdropColorRGB.g), - colToDbl(backdropColorRGB.b)); - cairo_paint(maskCtx); - - cairo_matrix_t mat; - cairo_get_matrix(cairo, &mat); - cairo_set_matrix(maskCtx, &mat); - - /* make the device offset of the new mask match that of the group */ - double x_offset, y_offset; - if (cairo_get_group_target(cairo) == cairo_get_target(cairo)) { - cairo_surface_get_device_offset(cairo_get_group_target(cairo), &x_offset, &y_offset); - } else { - cairo_surface_t *pats; - cairo_pattern_get_surface(group, &pats); - cairo_surface_get_device_offset(pats, &x_offset, &y_offset); - } - cairo_surface_set_device_offset(source, x_offset, y_offset); - - /* paint the group */ - cairo_set_source(maskCtx, group); - cairo_paint(maskCtx); - - /* XXX status = cairo_status(maskCtx); */ - cairo_destroy(maskCtx); - - /* convert to a luminocity map */ - uint32_t *source_data = (uint32_t*)cairo_image_surface_get_data(source); - /* get stride in units of 32 bits */ - int stride = cairo_image_surface_get_stride(source)/4; - for (int y=0; y<height; y++) { - for (int x=0; x<width; x++) { - source_data[y*stride + x] = luminocity(source_data[y*stride + x]); - -#if 0 - here is how splash deals with the transferfunction we should deal with this - at some point - if (transferFunc) { - transferFunc->transform(&lum, &lum2); - } else { - lum2 = lum; - } - p[x] = (int)(lum2 * 255.0 + 0.5); -#endif - - } - } - cairo_surface_mark_dirty (source); - - /* setup the new mask pattern */ - mask = cairo_pattern_create_for_surface(source); - - if (cairo_get_group_target(cairo) == cairo_get_target(cairo)) { - cairo_pattern_set_matrix(mask, &mat); - } else { - cairo_matrix_t patMatrix; - cairo_pattern_get_matrix(group, &patMatrix); - cairo_pattern_set_matrix(mask, &patMatrix); - } - - cairo_surface_destroy(source); - } else { - mask = cairo_pattern_reference(group); - } - - popTransparencyGroup(); -} - -void CairoOutputDev::popTransparencyGroup() { - /* pop color space */ - ColorSpaceStack *css = groupColorSpaceStack; - if (css->knockout) { - knockoutCount--; - if (!knockoutCount) { - /* we don't need to track the shape anymore because - * we are not above any knockout groups */ - cairo_destroy(cairo_shape); - cairo_shape = NULL; - } - } - groupColorSpaceStack = css->next; - delete css; -} - - -void CairoOutputDev::clearSoftMask(GfxState * /*state*/) { - if (mask) - cairo_pattern_destroy(mask); - mask = NULL; -} - -void CairoOutputDev::endMaskClip(GfxState *state) { - clearSoftMask(state); -} - -/* Taken from cairo/doc/tutorial/src/singular.c */ -static void -get_singular_values (const cairo_matrix_t *matrix, - double *major, - double *minor) -{ - double xx = matrix->xx, xy = matrix->xy; - double yx = matrix->yx, yy = matrix->yy; - - double a = xx*xx+yx*yx; - double b = xy*xy+yy*yy; - double k = xx*xy+yx*yy; - - double f = (a+b) * .5; - double g = (a-b) * .5; - double delta = sqrt (g*g + k*k); - - if (major) - *major = sqrt (f + delta); - if (minor) - *minor = sqrt (f - delta); -} - -void CairoOutputDev::getScaledSize(int orig_width, - int orig_height, - int *scaledWidth, - int *scaledHeight) { - cairo_matrix_t matrix; - cairo_get_matrix(cairo, &matrix); - - double xScale; - double yScale; - if (orig_width > orig_height) - get_singular_values (&matrix, &xScale, &yScale); - else - get_singular_values (&matrix, &yScale, &xScale); - - int tx, tx2, ty, ty2; /* the integer co-oridinates of the resulting image */ - if (xScale >= 0) { - tx = splashRound(matrix.x0 - 0.01); - tx2 = splashRound(matrix.x0 + xScale + 0.01) - 1; - } else { - tx = splashRound(matrix.x0 + 0.01) - 1; - tx2 = splashRound(matrix.x0 + xScale - 0.01); - } - *scaledWidth = abs(tx2 - tx) + 1; - //scaledWidth = splashRound(fabs(xScale)); - if (*scaledWidth == 0) { - // technically, this should draw nothing, but it generally seems - // better to draw a one-pixel-wide stripe rather than throwing it - // away - *scaledWidth = 1; - } - if (yScale >= 0) { - ty = splashFloor(matrix.y0 + 0.01); - ty2 = splashCeil(matrix.y0 + yScale - 0.01); - } else { - ty = splashCeil(matrix.y0 - 0.01); - ty2 = splashFloor(matrix.y0 + yScale + 0.01); - } - *scaledHeight = abs(ty2 - ty); - if (*scaledHeight == 0) { - *scaledHeight = 1; - } -} - -cairo_surface_t *CairoOutputDev::downscaleSurface(cairo_surface_t *orig_surface) { - cairo_surface_t *dest_surface; - unsigned char *dest_buffer; - int dest_stride; - unsigned char *orig_buffer; - int orig_width, orig_height; - int orig_stride; - int scaledHeight; - int scaledWidth; - GBool res; - - if (printing) - return NULL; - - orig_width = cairo_image_surface_get_width (orig_surface); - orig_height = cairo_image_surface_get_height (orig_surface); - getScaledSize (orig_width, orig_height, &scaledWidth, &scaledHeight); - if (scaledWidth >= orig_width || scaledHeight >= orig_height) - return NULL; - - dest_surface = cairo_surface_create_similar (orig_surface, - cairo_surface_get_content (orig_surface), - scaledWidth, scaledHeight); - dest_buffer = cairo_image_surface_get_data (dest_surface); - dest_stride = cairo_image_surface_get_stride (dest_surface); - - orig_buffer = cairo_image_surface_get_data (orig_surface); - orig_stride = cairo_image_surface_get_stride (orig_surface); - - res = downscale_box_filter((uint32_t *)orig_buffer, - orig_stride, orig_width, orig_height, - scaledWidth, scaledHeight, 0, 0, - scaledWidth, scaledHeight, - (uint32_t *)dest_buffer, dest_stride); - if (!res) { - cairo_surface_destroy (dest_surface); - return NULL; - } - - return dest_surface; - -} - -cairo_filter_t -CairoOutputDev::getFilterForSurface(cairo_surface_t *image, - GBool interpolate) -{ - if (interpolate) - return CAIRO_FILTER_BILINEAR; - - int orig_width = cairo_image_surface_get_width (image); - int orig_height = cairo_image_surface_get_height (image); - if (orig_width == 0 || orig_height == 0) - return CAIRO_FILTER_NEAREST; - - int scaled_width, scaled_height; - getScaledSize (orig_width, orig_height, &scaled_width, &scaled_height); - - /* When scale factor is >= 400% we don't interpolate. See bugs #25268, #9860 */ - if (scaled_width / orig_width >= 4 || scaled_height / orig_height >= 4) - return CAIRO_FILTER_NEAREST; - - return CAIRO_FILTER_BILINEAR; -} - -void CairoOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool interpolate, GBool inlineImg) { - - /* FIXME: Doesn't the image mask support any colorspace? */ - cairo_set_source (cairo, fill_pattern); - - /* work around a cairo bug when scaling 1x1 surfaces */ - if (width == 1 && height == 1) { - ImageStream *imgStr; - Guchar pix; - int invert_bit; - - imgStr = new ImageStream(str, width, 1, 1); - imgStr->reset(); - imgStr->getPixel(&pix); - imgStr->close(); - delete imgStr; - - invert_bit = invert ? 1 : 0; - if (pix ^ invert_bit) - return; - - cairo_save (cairo); - cairo_rectangle (cairo, 0., 0., width, height); - cairo_fill (cairo); - cairo_restore (cairo); - if (cairo_shape) { - cairo_save (cairo_shape); - cairo_rectangle (cairo_shape, 0., 0., width, height); - cairo_fill (cairo_shape); - cairo_restore (cairo_shape); - } - return; - } - - if (state->getFillColorSpace()->getMode() == csPattern) - cairo_push_group_with_content (cairo, CAIRO_CONTENT_ALPHA); - - /* shape is 1.0 for painted areas, 0.0 for unpainted ones */ - - cairo_matrix_t matrix; - cairo_get_matrix (cairo, &matrix); - //XXX: it is possible that we should only do sub pixel positioning if - // we are rendering fonts */ - if (!printing && prescaleImages && matrix.xy == 0.0 && matrix.yx == 0.0) { - drawImageMaskPrescaled(state, ref, str, width, height, invert, interpolate, inlineImg); - } else { - drawImageMaskRegular(state, ref, str, width, height, invert, interpolate, inlineImg); - } - - if (state->getFillColorSpace()->getMode() == csPattern) { - if (mask) - cairo_pattern_destroy (mask); - mask = cairo_pop_group (cairo); - } -} - -void CairoOutputDev::drawImageMaskRegular(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool interpolate, GBool inlineImg) { - unsigned char *buffer; - unsigned char *dest; - cairo_surface_t *image; - cairo_pattern_t *pattern; - int x, y, i, bit; - ImageStream *imgStr; - Guchar *pix; - cairo_matrix_t matrix; - int invert_bit; - int row_stride; - cairo_filter_t filter; - - /* TODO: Do we want to cache these? */ - imgStr = new ImageStream(str, width, 1, 1); - imgStr->reset(); - - image = cairo_image_surface_create (CAIRO_FORMAT_A1, width, height); - if (cairo_surface_status (image)) - goto cleanup; - - buffer = cairo_image_surface_get_data (image); - row_stride = cairo_image_surface_get_stride (image); - - invert_bit = invert ? 1 : 0; - - for (y = 0; y < height; y++) { - pix = imgStr->getLine(); - dest = buffer + y * row_stride; - i = 0; - bit = 0; - for (x = 0; x < width; x++) { - if (bit == 0) - dest[i] = 0; - if (!(pix[x] ^ invert_bit)) { -#ifdef WORDS_BIGENDIAN - dest[i] |= (1 << (7 - bit)); -#else - dest[i] |= (1 << bit); -#endif - } - bit++; - if (bit > 7) { - bit = 0; - i++; - } - } - } - - filter = getFilterForSurface (image, interpolate); - - cairo_surface_mark_dirty (image); - pattern = cairo_pattern_create_for_surface (image); - cairo_surface_destroy (image); - if (cairo_pattern_status (pattern)) - goto cleanup; - - LOG (printf ("drawImageMask %dx%d\n", width, height)); - - cairo_pattern_set_filter (pattern, filter); - - if (!printing) - cairo_pattern_set_extend (pattern, CAIRO_EXTEND_PAD); - - cairo_matrix_init_translate (&matrix, 0, height); - cairo_matrix_scale (&matrix, width, -height); - cairo_pattern_set_matrix (pattern, &matrix); - if (cairo_pattern_status (pattern)) { - cairo_pattern_destroy (pattern); - goto cleanup; - } - - if (state->getFillColorSpace()->getMode() == csPattern) { - mask = cairo_pattern_reference (pattern); - } else if (!printing) { - cairo_save (cairo); - cairo_rectangle (cairo, 0., 0., 1., 1.); - cairo_clip (cairo); - cairo_mask (cairo, pattern); - cairo_restore (cairo); - } else { - cairo_mask (cairo, pattern); - } - - if (cairo_shape) { - cairo_save (cairo_shape); - cairo_set_source (cairo_shape, pattern); - if (!printing) { - cairo_rectangle (cairo_shape, 0., 0., 1., 1.); - cairo_fill (cairo_shape); - } else { - cairo_mask (cairo_shape, pattern); - } - cairo_restore (cairo_shape); - } - - cairo_pattern_destroy (pattern); - -cleanup: - imgStr->close(); - delete imgStr; -} - - -void CairoOutputDev::drawImageMaskPrescaled(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool interpolate, GBool inlineImg) { - unsigned char *buffer; - cairo_surface_t *image; - cairo_pattern_t *pattern; - ImageStream *imgStr; - Guchar *pix; - cairo_matrix_t matrix; - int invert_bit; - int row_stride; - - /* cairo does a very poor job of scaling down images so we scale them ourselves */ - - /* this scaling code is adopted from the splash image scaling code */ - cairo_get_matrix(cairo, &matrix); -#if 0 - printf("[%f %f], [%f %f], %f %f\n", matrix.xx, matrix.xy, matrix.yx, matrix.yy, matrix.x0, matrix.y0); -#endif - /* this whole computation should be factored out */ - double xScale = matrix.xx; - double yScale = matrix.yy; - int tx, tx2, ty, ty2; /* the integer co-oridinates of the resulting image */ - int scaledHeight; - int scaledWidth; - if (xScale >= 0) { - tx = splashRound(matrix.x0 - 0.01); - tx2 = splashRound(matrix.x0 + xScale + 0.01) - 1; - } else { - tx = splashRound(matrix.x0 + 0.01) - 1; - tx2 = splashRound(matrix.x0 + xScale - 0.01); - } - scaledWidth = abs(tx2 - tx) + 1; - //scaledWidth = splashRound(fabs(xScale)); - if (scaledWidth == 0) { - // technically, this should draw nothing, but it generally seems - // better to draw a one-pixel-wide stripe rather than throwing it - // away - scaledWidth = 1; - } - if (yScale >= 0) { - ty = splashFloor(matrix.y0 + 0.01); - ty2 = splashCeil(matrix.y0 + yScale - 0.01); - } else { - ty = splashCeil(matrix.y0 - 0.01); - ty2 = splashFloor(matrix.y0 + yScale + 0.01); - } - scaledHeight = abs(ty2 - ty); - if (scaledHeight == 0) { - scaledHeight = 1; - } -#if 0 - printf("xscale: %g, yscale: %g\n", xScale, yScale); - printf("width: %d, height: %d\n", width, height); - printf("scaledWidth: %d, scaledHeight: %d\n", scaledWidth, scaledHeight); -#endif - - /* compute the required padding */ - /* Padding is used to preserve the aspect ratio. - We compute total_pad to make (height+total_pad)/scaledHeight as close to height/yScale as possible */ - int head_pad = 0; - int tail_pad = 0; - int total_pad = splashRound(height*(scaledHeight/fabs(yScale)) - height); - - /* compute the two pieces of padding */ - if (total_pad > 0) { - //XXX: i'm not positive fabs() is correct - float tail_error = fabs(matrix.y0 - ty); - float head_error = fabs(ty2 - (matrix.y0 + yScale)); - float tail_fraction = tail_error/(tail_error + head_error); - tail_pad = splashRound(total_pad*tail_fraction); - head_pad = total_pad - tail_pad; - } else { - tail_pad = 0; - head_pad = 0; - } - int origHeight = height; - height += tail_pad; - height += head_pad; -#if 0 - printf("head_pad: %d tail_pad: %d\n", head_pad, tail_pad); - printf("origHeight: %d height: %d\n", origHeight, height); - printf("ty: %d, ty2: %d\n", ty, ty2); -#endif - - /* TODO: Do we want to cache these? */ - imgStr = new ImageStream(str, width, 1, 1); - imgStr->reset(); - - invert_bit = invert ? 1 : 0; - - image = cairo_image_surface_create (CAIRO_FORMAT_A8, scaledWidth, scaledHeight); - if (cairo_surface_status (image)) { - imgStr->close(); - delete imgStr; - return; - } - - buffer = cairo_image_surface_get_data (image); - row_stride = cairo_image_surface_get_stride (image); - - int yp = height / scaledHeight; - int yq = height % scaledHeight; - int xp = width / scaledWidth; - int xq = width % scaledWidth; - int yt = 0; - int origHeight_c = origHeight; - /* use MIN() because yp might be > origHeight because of padding */ - unsigned char *pixBuf = (unsigned char *)malloc(MIN(yp+1, origHeight)*width); - int lastYStep = 1; - int total = 0; - for (int y = 0; y < scaledHeight; y++) { - // y scale Bresenham - int yStep = yp; - yt += yq; - - if (yt >= scaledHeight) { - yt -= scaledHeight; - ++yStep; - } - - // read row (s) from image ignoring the padding as appropriate - { - int n = (yp > 0) ? yStep : lastYStep; - total += n; - if (n > 0) { - unsigned char *p = pixBuf; - int head_pad_count = head_pad; - int origHeight_count = origHeight; - int tail_pad_count = tail_pad; - for (int i=0; i<n; i++) { - // get row - if (head_pad_count) { - head_pad_count--; - } else if (origHeight_count) { - pix = imgStr->getLine(); - for (int j=0; j<width; j++) { - if (pix[j] ^ invert_bit) - p[j] = 0; - else - p[j] = 255; - } - origHeight_count--; - p += width; - } else if (tail_pad_count) { - tail_pad_count--; - } else { - printf("%d %d\n", n, total); - assert(0 && "over run\n"); - } - } - } - } - - lastYStep = yStep; - int k1 = y; - - int xt = 0; - int xSrc = 0; - int x1 = k1; - int n = yStep > 0 ? yStep : 1; - int origN = n; - - /* compute the size of padding and pixels that will be used for this row */ - int head_pad_size = MIN(n, head_pad); - n -= head_pad_size; - head_pad -= MIN(head_pad_size, yStep); - - int pix_size = MIN(n, origHeight); - n -= pix_size; - origHeight -= MIN(pix_size, yStep); - - int tail_pad_size = MIN(n, tail_pad); - n -= tail_pad_size; - tail_pad -= MIN(tail_pad_size, yStep); - if (n != 0) { - printf("n = %d (%d %d %d)\n", n, head_pad_size, pix_size, tail_pad_size); - assert(n == 0); - } - - for (int x = 0; x < scaledWidth; ++x) { - int xStep = xp; - xt += xq; - if (xt >= scaledWidth) { - xt -= scaledWidth; - ++xStep; - } - int m = xStep > 0 ? xStep : 1; - float pixAcc0 = 0; - /* could m * head_pad_size * tail_pad_size overflow? */ - if (invert_bit) { - pixAcc0 += m * head_pad_size * tail_pad_size * 255; - } else { - pixAcc0 += m * head_pad_size * tail_pad_size * 0; - } - /* Accumulate all of the source pixels for the destination pixel */ - for (int i = 0; i < pix_size; ++i) { - for (int j = 0; j< m; ++j) { - if (xSrc + i*width + j > MIN(yp + 1, origHeight_c)*width) { - printf("%d > %d (%d %d %d %d) (%d %d %d)\n", xSrc + i*width + j, MIN(yp + 1, origHeight_c)*width, xSrc, i , width, j, yp, origHeight_c, width); - printf("%d %d %d\n", head_pad_size, pix_size, tail_pad_size); - assert(0 && "bad access\n"); - } - pixAcc0 += pixBuf[xSrc + i*width + j]; - } - } - buffer[y * row_stride + x] = splashFloor(pixAcc0 / (origN*m)); - xSrc += xStep; - x1 += 1; - } - - } - free(pixBuf); - - cairo_surface_mark_dirty (image); - pattern = cairo_pattern_create_for_surface (image); - cairo_surface_destroy (image); - if (cairo_pattern_status (pattern)) { - imgStr->close(); - delete imgStr; - return; - } - - /* we should actually be using CAIRO_FILTER_NEAREST here. However, - * cairo doesn't yet do minifaction filtering causing scaled down - * images with CAIRO_FILTER_NEAREST to look really bad */ - cairo_pattern_set_filter (pattern, - interpolate ? CAIRO_FILTER_BEST : CAIRO_FILTER_FAST); - cairo_pattern_set_extend (pattern, CAIRO_EXTEND_PAD); - - if (state->getFillColorSpace()->getMode() == csPattern) { - cairo_matrix_init_translate (&matrix, 0, scaledHeight); - cairo_matrix_scale (&matrix, scaledWidth, -scaledHeight); - cairo_pattern_set_matrix (pattern, &matrix); - if (cairo_pattern_status (pattern)) { - cairo_pattern_destroy (pattern); - imgStr->close(); - delete imgStr; - return; - } - - mask = cairo_pattern_reference (pattern); - } else { - cairo_save (cairo); - - /* modify our current transformation so that the prescaled image - * goes where it is supposed to */ - cairo_get_matrix(cairo, &matrix); - cairo_scale(cairo, 1.0/matrix.xx, 1.0/matrix.yy); - // get integer co-ords - cairo_translate (cairo, tx - matrix.x0, ty2 - matrix.y0); - if (yScale > 0) - cairo_scale(cairo, 1, -1); - - cairo_rectangle (cairo, 0., 0., scaledWidth, scaledHeight); - cairo_clip (cairo); - cairo_mask (cairo, pattern); - - //cairo_get_matrix(cairo, &matrix); - //printf("mask at: [%f %f], [%f %f], %f %f\n\n", matrix.xx, matrix.xy, matrix.yx, matrix.yy, matrix.x0, matrix.y0); - cairo_restore(cairo); - } - - if (cairo_shape) { - cairo_save (cairo_shape); - - /* modify our current transformation so that the prescaled image - * goes where it is supposed to */ - cairo_get_matrix(cairo_shape, &matrix); - cairo_scale(cairo_shape, 1.0/matrix.xx, 1.0/matrix.yy); - // get integer co-ords - cairo_translate (cairo_shape, tx - matrix.x0, ty2 - matrix.y0); - if (yScale > 0) - cairo_scale(cairo_shape, 1, -1); - - cairo_rectangle (cairo_shape, 0., 0., scaledWidth, scaledHeight); - cairo_fill (cairo_shape); - - cairo_restore(cairo_shape); - } - - cairo_pattern_destroy (pattern); - - imgStr->close(); - delete imgStr; -} - -void CairoOutputDev::drawMaskedImage(GfxState *state, Object *ref, - Stream *str, int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, int maskWidth, - int maskHeight, GBool maskInvert, - GBool maskInterpolate) -{ - ImageStream *maskImgStr, *imgStr; - int row_stride; - unsigned char *maskBuffer, *buffer; - unsigned char *maskDest; - unsigned int *dest; - cairo_surface_t *maskImage, *image; - cairo_pattern_t *maskPattern, *pattern; - cairo_matrix_t matrix; - cairo_matrix_t maskMatrix; - Guchar *pix; - int x, y; - int invert_bit; - cairo_filter_t filter; - cairo_filter_t maskFilter; - - maskImgStr = new ImageStream(maskStr, maskWidth, 1, 1); - maskImgStr->reset(); - - maskImage = cairo_image_surface_create (CAIRO_FORMAT_A8, maskWidth, maskHeight); - if (cairo_surface_status (maskImage)) { - maskImgStr->close(); - delete maskImgStr; - return; - } - - maskBuffer = cairo_image_surface_get_data (maskImage); - row_stride = cairo_image_surface_get_stride (maskImage); - - invert_bit = maskInvert ? 1 : 0; - - for (y = 0; y < maskHeight; y++) { - pix = maskImgStr->getLine(); - maskDest = maskBuffer + y * row_stride; - for (x = 0; x < maskWidth; x++) { - if (pix[x] ^ invert_bit) - *maskDest++ = 0; - else - *maskDest++ = 255; - } - } - - maskImgStr->close(); - delete maskImgStr; - - maskFilter = getFilterForSurface (maskImage, maskInterpolate); - - cairo_surface_mark_dirty (maskImage); - maskPattern = cairo_pattern_create_for_surface (maskImage); - cairo_surface_destroy (maskImage); - if (cairo_pattern_status (maskPattern)) - return; - -#if 0 - /* ICCBased color space doesn't do any color correction - * so check its underlying color space as well */ - int is_identity_transform; - is_identity_transform = colorMap->getColorSpace()->getMode() == csDeviceRGB || - (colorMap->getColorSpace()->getMode() == csICCBased && - ((GfxICCBasedColorSpace*)colorMap->getColorSpace())->getAlt()->getMode() == csDeviceRGB); -#endif - - /* TODO: Do we want to cache these? */ - imgStr = new ImageStream(str, width, - colorMap->getNumPixelComps(), - colorMap->getBits()); - imgStr->reset(); - - image = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height); - if (cairo_surface_status (image)) - goto cleanup; - - buffer = cairo_image_surface_get_data (image); - row_stride = cairo_image_surface_get_stride (image); - for (y = 0; y < height; y++) { - dest = (unsigned int *) (buffer + y * row_stride); - pix = imgStr->getLine(); - colorMap->getRGBLine (pix, dest, width); - } - - filter = getFilterForSurface (image, interpolate); - - cairo_surface_mark_dirty (image); - pattern = cairo_pattern_create_for_surface (image); - cairo_surface_destroy (image); - if (cairo_pattern_status (pattern)) - goto cleanup; - - LOG (printf ("drawMaskedImage %dx%d\n", width, height)); - - cairo_pattern_set_filter (pattern, filter); - cairo_pattern_set_filter (maskPattern, maskFilter); - - if (!printing) { - cairo_pattern_set_extend (pattern, CAIRO_EXTEND_PAD); - cairo_pattern_set_extend (maskPattern, CAIRO_EXTEND_PAD); - } - - cairo_matrix_init_translate (&matrix, 0, height); - cairo_matrix_scale (&matrix, width, -height); - cairo_pattern_set_matrix (pattern, &matrix); - if (cairo_pattern_status (pattern)) { - cairo_pattern_destroy (pattern); - cairo_pattern_destroy (maskPattern); - goto cleanup; - } - - cairo_matrix_init_translate (&maskMatrix, 0, maskHeight); - cairo_matrix_scale (&maskMatrix, maskWidth, -maskHeight); - cairo_pattern_set_matrix (maskPattern, &maskMatrix); - if (cairo_pattern_status (maskPattern)) { - cairo_pattern_destroy (maskPattern); - cairo_pattern_destroy (pattern); - goto cleanup; - } - - if (!printing) { - cairo_save (cairo); - cairo_set_source (cairo, pattern); - cairo_rectangle (cairo, 0., 0., 1., 1.); - cairo_clip (cairo); - cairo_mask (cairo, maskPattern); - cairo_restore (cairo); - } else { - cairo_set_source (cairo, pattern); - cairo_mask (cairo, maskPattern); - } - - if (cairo_shape) { - cairo_save (cairo_shape); - cairo_set_source (cairo_shape, pattern); - if (!printing) { - cairo_rectangle (cairo_shape, 0., 0., 1., 1.); - cairo_fill (cairo_shape); - } else { - cairo_mask (cairo_shape, pattern); - } - cairo_restore (cairo_shape); - } - - cairo_pattern_destroy (maskPattern); - cairo_pattern_destroy (pattern); - -cleanup: - imgStr->close(); - delete imgStr; -} - - -//XXX: is this affect by AIS(alpha is shape)? -void CairoOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap, - GBool maskInterpolate) -{ - ImageStream *maskImgStr, *imgStr; - int row_stride; - unsigned char *maskBuffer, *buffer; - unsigned char *maskDest; - unsigned int *dest; - cairo_surface_t *maskImage, *image; - cairo_pattern_t *maskPattern, *pattern; - cairo_matrix_t maskMatrix, matrix; - Guchar *pix; - int y; - cairo_filter_t filter; - cairo_filter_t maskFilter; - - maskImgStr = new ImageStream(maskStr, maskWidth, - maskColorMap->getNumPixelComps(), - maskColorMap->getBits()); - maskImgStr->reset(); - - maskImage = cairo_image_surface_create (CAIRO_FORMAT_A8, maskWidth, maskHeight); - if (cairo_surface_status (maskImage)) { - maskImgStr->close(); - delete maskImgStr; - return; - } - - maskBuffer = cairo_image_surface_get_data (maskImage); - row_stride = cairo_image_surface_get_stride (maskImage); - for (y = 0; y < maskHeight; y++) { - maskDest = (unsigned char *) (maskBuffer + y * row_stride); - pix = maskImgStr->getLine(); - maskColorMap->getGrayLine (pix, maskDest, maskWidth); - } - - maskImgStr->close(); - delete maskImgStr; - - maskFilter = getFilterForSurface (maskImage, maskInterpolate); - - cairo_surface_mark_dirty (maskImage); - maskPattern = cairo_pattern_create_for_surface (maskImage); - cairo_surface_destroy (maskImage); - if (cairo_pattern_status (maskPattern)) - return; - -#if 0 - /* ICCBased color space doesn't do any color correction - * so check its underlying color space as well */ - int is_identity_transform; - is_identity_transform = colorMap->getColorSpace()->getMode() == csDeviceRGB || - (colorMap->getColorSpace()->getMode() == csICCBased && - ((GfxICCBasedColorSpace*)colorMap->getColorSpace())->getAlt()->getMode() == csDeviceRGB); -#endif - - /* TODO: Do we want to cache these? */ - imgStr = new ImageStream(str, width, - colorMap->getNumPixelComps(), - colorMap->getBits()); - imgStr->reset(); - - image = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height); - if (cairo_surface_status (image)) - goto cleanup; - - buffer = cairo_image_surface_get_data (image); - row_stride = cairo_image_surface_get_stride (image); - for (y = 0; y < height; y++) { - dest = (unsigned int *) (buffer + y * row_stride); - pix = imgStr->getLine(); - colorMap->getRGBLine (pix, dest, width); - } - - filter = getFilterForSurface (image, interpolate); - - cairo_surface_mark_dirty (image); - - setMimeData(str, ref, image); - - pattern = cairo_pattern_create_for_surface (image); - cairo_surface_destroy (image); - if (cairo_pattern_status (pattern)) - goto cleanup; - - LOG (printf ("drawSoftMaskedImage %dx%d\n", width, height)); - - cairo_pattern_set_filter (pattern, filter); - cairo_pattern_set_filter (maskPattern, maskFilter); - - if (!printing) { - cairo_pattern_set_extend (pattern, CAIRO_EXTEND_PAD); - cairo_pattern_set_extend (maskPattern, CAIRO_EXTEND_PAD); - } - - cairo_matrix_init_translate (&matrix, 0, height); - cairo_matrix_scale (&matrix, width, -height); - cairo_pattern_set_matrix (pattern, &matrix); - if (cairo_pattern_status (pattern)) { - cairo_pattern_destroy (pattern); - cairo_pattern_destroy (maskPattern); - goto cleanup; - } - - cairo_matrix_init_translate (&maskMatrix, 0, maskHeight); - cairo_matrix_scale (&maskMatrix, maskWidth, -maskHeight); - cairo_pattern_set_matrix (maskPattern, &maskMatrix); - if (cairo_pattern_status (maskPattern)) { - cairo_pattern_destroy (maskPattern); - cairo_pattern_destroy (pattern); - goto cleanup; - } - - if (fill_opacity != 1.0) - cairo_push_group (cairo); - else - cairo_save (cairo); - - cairo_set_source (cairo, pattern); - if (!printing) { - cairo_rectangle (cairo, 0., 0., - MIN (width, maskWidth) / (double)width, - MIN (height, maskHeight) / (double)height); - cairo_clip (cairo); - } - cairo_mask (cairo, maskPattern); - - if (fill_opacity != 1.0) { - cairo_pop_group_to_source (cairo); - cairo_save (cairo); - if (!printing) { - cairo_rectangle (cairo, 0., 0., - MIN (width, maskWidth) / (double)width, - MIN (height, maskHeight) / (double)height); - cairo_clip (cairo); - } - cairo_paint_with_alpha (cairo, fill_opacity); - } - cairo_restore (cairo); - - if (cairo_shape) { - cairo_save (cairo_shape); - cairo_set_source (cairo_shape, pattern); - if (!printing) { - cairo_rectangle (cairo_shape, 0., 0., - MIN (width, maskWidth) / (double)width, - MIN (height, maskHeight) / (double)height); - cairo_fill (cairo_shape); - } else { - cairo_mask (cairo_shape, pattern); - } - cairo_restore (cairo_shape); - } - - cairo_pattern_destroy (maskPattern); - cairo_pattern_destroy (pattern); - -cleanup: - imgStr->close(); - delete imgStr; -} - -GBool CairoOutputDev::getStreamData (Stream *str, char **buffer, int *length) -{ - int len, i; - char *strBuffer; - - len = 0; - str->close(); - str->reset(); - while (str->getChar() != EOF) len++; - if (len == 0) - return gFalse; - - strBuffer = (char *)gmalloc (len); - - str->close(); - str->reset(); - for (i = 0; i < len; ++i) - strBuffer[i] = str->getChar(); - - *buffer = strBuffer; - *length = len; - - return gTrue; -} - -void CairoOutputDev::setMimeData(Stream *str, Object *ref, cairo_surface_t *image) -{ - char *strBuffer; - int len; - Object obj; - - if (!printing || !(str->getKind() == strDCT || str->getKind() == strJPX)) - return; - - // colorspace in stream dict may be different from colorspace in jpx - // data - if (str->getKind() == strJPX) { - GBool hasColorSpace = !str->getDict()->lookup("ColorSpace", &obj)->isNull(); - obj.free(); - if (hasColorSpace) - return; - } - - if (getStreamData (str->getNextStream(), &strBuffer, &len)) { - cairo_status_t st; - -#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 11, 2) - if (ref && ref->isRef()) { - Ref imgRef = ref->getRef(); - GooString *surfaceId = new GooString("poppler-surface-"); - surfaceId->appendf("{0:d}-{1:d}", imgRef.gen, imgRef.num); - char *idBuffer = copyString(surfaceId->getCString()); - st = cairo_surface_set_mime_data (image, CAIRO_MIME_TYPE_UNIQUE_ID, - (const unsigned char *)idBuffer, - surfaceId->getLength(), - gfree, idBuffer); - if (st) - gfree(idBuffer); - delete surfaceId; - } -#endif - - st = cairo_surface_set_mime_data (image, - str->getKind() == strDCT ? - CAIRO_MIME_TYPE_JPEG : CAIRO_MIME_TYPE_JP2, - (const unsigned char *)strBuffer, len, - gfree, strBuffer); - if (st) - gfree (strBuffer); - } -} - -void CairoOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - int *maskColors, GBool inlineImg) -{ - cairo_surface_t *image; - cairo_pattern_t *pattern, *maskPattern; - ImageStream *imgStr; - cairo_matrix_t matrix; - unsigned char *buffer; - int stride, i; - GfxRGB *lookup = NULL; - cairo_filter_t filter = CAIRO_FILTER_BILINEAR; - - /* TODO: Do we want to cache these? */ - imgStr = new ImageStream(str, width, - colorMap->getNumPixelComps(), - colorMap->getBits()); - imgStr->reset(); - -#if 0 - /* ICCBased color space doesn't do any color correction - * so check its underlying color space as well */ - int is_identity_transform; - is_identity_transform = colorMap->getColorSpace()->getMode() == csDeviceRGB || - (colorMap->getColorSpace()->getMode() == csICCBased && - ((GfxICCBasedColorSpace*)colorMap->getColorSpace())->getAlt()->getMode() == csDeviceRGB); -#endif - - image = cairo_image_surface_create (maskColors ? - CAIRO_FORMAT_ARGB32 : - CAIRO_FORMAT_RGB24, - width, height); - if (cairo_surface_status (image)) - goto cleanup; - - // special case for one-channel (monochrome/gray/separation) images: - // build a lookup table here - if (colorMap->getNumPixelComps() == 1) { - int n; - Guchar pix; - - n = 1 << colorMap->getBits(); - lookup = (GfxRGB *)gmallocn(n, sizeof(GfxRGB)); - for (i = 0; i < n; ++i) { - pix = (Guchar)i; - - colorMap->getRGB(&pix, &lookup[i]); - } - } - - buffer = cairo_image_surface_get_data (image); - stride = cairo_image_surface_get_stride (image); - for (int y = 0; y < height; y++) { - uint32_t *dest = (uint32_t *) (buffer + y * stride); - Guchar *pix = imgStr->getLine(); - - if (lookup) { - Guchar *p = pix; - GfxRGB rgb; - - for (i = 0; i < width; i++) { - rgb = lookup[*p]; - dest[i] = - ((int) colToByte(rgb.r) << 16) | - ((int) colToByte(rgb.g) << 8) | - ((int) colToByte(rgb.b) << 0); - p++; - } - } else { - colorMap->getRGBLine (pix, dest, width); - } - - if (maskColors) { - for (int x = 0; x < width; x++) { - bool is_opaque = false; - for (int i = 0; i < colorMap->getNumPixelComps(); ++i) { - if (pix[i] < maskColors[2*i] || - pix[i] > maskColors[2*i+1]) { - is_opaque = true; - break; - } - } - if (is_opaque) - *dest |= 0xff000000; - else - *dest = 0; - dest++; - pix += colorMap->getNumPixelComps(); - } - } - } - gfree(lookup); - - LOG (printf ("drawImage %dx%d\n", width, height)); - - cairo_surface_t *scaled_surface; - - scaled_surface = downscaleSurface (image); - if (scaled_surface) { - if (cairo_surface_status (scaled_surface)) - goto cleanup; - cairo_surface_destroy (image); - image = scaled_surface; - width = cairo_image_surface_get_width (image); - height = cairo_image_surface_get_height (image); - } else { - filter = getFilterForSurface (image, interpolate); - } - - cairo_surface_mark_dirty (image); - - setMimeData(str, ref, image); - - pattern = cairo_pattern_create_for_surface (image); - cairo_surface_destroy (image); - if (cairo_pattern_status (pattern)) - goto cleanup; - - cairo_pattern_set_filter (pattern, filter); - - if (!printing) - cairo_pattern_set_extend (pattern, CAIRO_EXTEND_PAD); - - cairo_matrix_init_translate (&matrix, 0, height); - cairo_matrix_scale (&matrix, width, -height); - cairo_pattern_set_matrix (pattern, &matrix); - if (cairo_pattern_status (pattern)) { - cairo_pattern_destroy (pattern); - goto cleanup; - } - - if (!mask && fill_opacity != 1.0) { - maskPattern = cairo_pattern_create_rgba (1., 1., 1., fill_opacity); - } else if (mask) { - maskPattern = cairo_pattern_reference (mask); - } else { - maskPattern = NULL; - } - - cairo_save (cairo); - cairo_set_source (cairo, pattern); - if (printing) - cairo_rectangle (cairo, 0., 0., width, height); - else - cairo_rectangle (cairo, 0., 0., 1., 1.); - if (maskPattern) { - cairo_clip (cairo); - cairo_mask (cairo, maskPattern); - } else { - cairo_fill (cairo); - } - cairo_restore (cairo); - - cairo_pattern_destroy (maskPattern); - - if (cairo_shape) { - cairo_save (cairo_shape); - cairo_set_source (cairo_shape, pattern); - if (printing) - cairo_rectangle (cairo_shape, 0., 0., width, height); - else - cairo_rectangle (cairo_shape, 0., 0., 1., 1.); - cairo_fill (cairo_shape); - cairo_restore (cairo_shape); - } - - cairo_pattern_destroy (pattern); - -cleanup: - imgStr->close(); - delete imgStr; -} - - -//------------------------------------------------------------------------ -// ImageOutputDev -//------------------------------------------------------------------------ - -CairoImageOutputDev::CairoImageOutputDev() -{ - images = NULL; - numImages = 0; - size = 0; - imgDrawCbk = NULL; - imgDrawCbkData = NULL; -} - -CairoImageOutputDev::~CairoImageOutputDev() -{ - int i; - - for (i = 0; i < numImages; i++) - delete images[i]; - gfree (images); -} - -void CairoImageOutputDev::saveImage(CairoImage *image) -{ - if (numImages >= size) { - size += 16; - images = (CairoImage **) greallocn (images, size, sizeof (CairoImage *)); - } - images[numImages++] = image; -} - -void CairoImageOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool interpolate, GBool inlineImg) -{ - cairo_t *cr; - cairo_surface_t *surface; - double x1, y1, x2, y2; - double *ctm; - double mat[6]; - CairoImage *image; - - ctm = state->getCTM(); - - mat[0] = ctm[0]; - mat[1] = ctm[1]; - mat[2] = -ctm[2]; - mat[3] = -ctm[3]; - mat[4] = ctm[2] + ctm[4]; - mat[5] = ctm[3] + ctm[5]; - x1 = mat[4]; - y1 = mat[5]; - x2 = x1 + width; - y2 = y1 + height; - - image = new CairoImage (x1, y1, x2, y2); - saveImage (image); - - if (imgDrawCbk && imgDrawCbk (numImages - 1, imgDrawCbkData)) { - surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); - cr = cairo_create (surface); - setCairo (cr); - cairo_translate (cr, 0, height); - cairo_scale (cr, width, -height); - - CairoOutputDev::drawImageMask(state, ref, str, width, height, invert, interpolate, inlineImg); - image->setImage (surface); - - setCairo (NULL); - cairo_surface_destroy (surface); - cairo_destroy (cr); - } -} - -void CairoImageOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - GBool interpolate, int *maskColors, GBool inlineImg) -{ - cairo_t *cr; - cairo_surface_t *surface; - double x1, y1, x2, y2; - double *ctm; - double mat[6]; - CairoImage *image; - - ctm = state->getCTM(); - - mat[0] = ctm[0]; - mat[1] = ctm[1]; - mat[2] = -ctm[2]; - mat[3] = -ctm[3]; - mat[4] = ctm[2] + ctm[4]; - mat[5] = ctm[3] + ctm[5]; - x1 = mat[4]; - y1 = mat[5]; - x2 = x1 + width; - y2 = y1 + height; - - image = new CairoImage (x1, y1, x2, y2); - saveImage (image); - - if (imgDrawCbk && imgDrawCbk (numImages - 1, imgDrawCbkData)) { - surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); - cr = cairo_create (surface); - setCairo (cr); - cairo_translate (cr, 0, height); - cairo_scale (cr, width, -height); - - CairoOutputDev::drawImage(state, ref, str, width, height, colorMap, interpolate, maskColors, inlineImg); - image->setImage (surface); - - setCairo (NULL); - cairo_surface_destroy (surface); - cairo_destroy (cr); - } -} - -void CairoImageOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap, - GBool maskInterpolate) -{ - cairo_t *cr; - cairo_surface_t *surface; - double x1, y1, x2, y2; - double *ctm; - double mat[6]; - CairoImage *image; - - ctm = state->getCTM(); - - mat[0] = ctm[0]; - mat[1] = ctm[1]; - mat[2] = -ctm[2]; - mat[3] = -ctm[3]; - mat[4] = ctm[2] + ctm[4]; - mat[5] = ctm[3] + ctm[5]; - x1 = mat[4]; - y1 = mat[5]; - x2 = x1 + width; - y2 = y1 + height; - - image = new CairoImage (x1, y1, x2, y2); - saveImage (image); - - if (imgDrawCbk && imgDrawCbk (numImages - 1, imgDrawCbkData)) { - surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); - cr = cairo_create (surface); - setCairo (cr); - cairo_translate (cr, 0, height); - cairo_scale (cr, width, -height); - - CairoOutputDev::drawSoftMaskedImage(state, ref, str, width, height, colorMap, interpolate, - maskStr, maskWidth, maskHeight, maskColorMap, maskInterpolate); - image->setImage (surface); - - setCairo (NULL); - cairo_surface_destroy (surface); - cairo_destroy (cr); - } -} - -void CairoImageOutputDev::drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, - int maskWidth, int maskHeight, - GBool maskInvert, GBool maskInterpolate) -{ - cairo_t *cr; - cairo_surface_t *surface; - double x1, y1, x2, y2; - double *ctm; - double mat[6]; - CairoImage *image; - - ctm = state->getCTM(); - - mat[0] = ctm[0]; - mat[1] = ctm[1]; - mat[2] = -ctm[2]; - mat[3] = -ctm[3]; - mat[4] = ctm[2] + ctm[4]; - mat[5] = ctm[3] + ctm[5]; - x1 = mat[4]; - y1 = mat[5]; - x2 = x1 + width; - y2 = y1 + height; - - image = new CairoImage (x1, y1, x2, y2); - saveImage (image); - - if (imgDrawCbk && imgDrawCbk (numImages - 1, imgDrawCbkData)) { - surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); - cr = cairo_create (surface); - setCairo (cr); - cairo_translate (cr, 0, height); - cairo_scale (cr, width, -height); - - CairoOutputDev::drawMaskedImage(state, ref, str, width, height, colorMap, interpolate, - maskStr, maskWidth, maskHeight, maskInvert, maskInterpolate); - image->setImage (surface); - - setCairo (NULL); - cairo_surface_destroy (surface); - cairo_destroy (cr); - } -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoOutputDev.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoOutputDev.h deleted file mode 100644 index effa9ddd856..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoOutputDev.h +++ /dev/null @@ -1,505 +0,0 @@ -//======================================================================== -// -// CairoOutputDev.h -// -// Copyright 2003 Glyph & Cog, LLC -// Copyright 2004 Red Hat, INC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005-2008 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005 Nickolay V. Shmyrev <nshmyrev@yandex.ru> -// Copyright (C) 2006-2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2008, 2009, 2011 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> -// Copyright (C) 2010, 2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef CAIROOUTPUTDEV_H -#define CAIROOUTPUTDEV_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include <cairo-ft.h> -#include "OutputDev.h" -#include "TextOutputDev.h" -#include "GfxState.h" - -class GfxState; -class GfxPath; -class Gfx8BitFont; -struct GfxRGB; -class CairoFontEngine; -class CairoFont; - -//------------------------------------------------------------------------ - -//------------------------------------------------------------------------ -// CairoImage -//------------------------------------------------------------------------ -class CairoImage { -public: - // Constructor. - CairoImage (double x1, double y1, double x2, double y2); - - // Destructor. - ~CairoImage (); - - // Set the image cairo surface - void setImage (cairo_surface_t *image); - - // Get the image cairo surface - cairo_surface_t *getImage () const { return image; } - - // Get the image rectangle - void getRect (double *xa1, double *ya1, double *xa2, double *ya2) - { *xa1 = x1; *ya1 = y1; *xa2 = x2; *ya2 = y2; } - -private: - cairo_surface_t *image; // image cairo surface - double x1, y1; // upper left corner - double x2, y2; // lower right corner -}; - - -//------------------------------------------------------------------------ -// CairoOutputDev -//------------------------------------------------------------------------ - -class CairoOutputDev: public OutputDev { -public: - - // Constructor. - CairoOutputDev(); - - // Destructor. - virtual ~CairoOutputDev(); - - //----- get info about output device - - // Does this device use upside-down coordinates? - // (Upside-down means (0,0) is the top left corner of the page.) - virtual GBool upsideDown() { return gTrue; } - - // Does this device use drawChar() or drawString()? - virtual GBool useDrawChar() { return gTrue; } - - // Does this device use tilingPatternFill()? If this returns false, - // tiling pattern fills will be reduced to a series of other drawing - // operations. - virtual GBool useTilingPatternFill() { return gTrue; } - - // Does this device use functionShadedFill(), axialShadedFill(), and - // radialShadedFill()? If this returns false, these shaded fills - // will be reduced to a series of other drawing operations. -#if CAIRO_VERSION == CAIRO_VERSION_ENCODE(1, 11, 2) - virtual GBool useShadedFills(int type) { return type <= 7; } -#else - virtual GBool useShadedFills(int type) { return type < 4; } -#endif - - // Does this device use FillColorStop()? - virtual GBool useFillColorStop() { return gTrue; } - - // Does this device use beginType3Char/endType3Char? Otherwise, - // text in Type 3 fonts will be drawn with drawChar/drawString. - virtual GBool interpretType3Chars() { return gFalse; } - - //----- initialization and control - - // Start a page. - virtual void startPage(int pageNum, GfxState *state); - - // End a page. - virtual void endPage(); - - //----- save/restore graphics state - virtual void saveState(GfxState *state); - virtual void restoreState(GfxState *state); - - //----- update graphics state - virtual void updateAll(GfxState *state); - virtual void setDefaultCTM(double *ctm); - virtual void updateCTM(GfxState *state, double m11, double m12, - double m21, double m22, double m31, double m32); - virtual void updateLineDash(GfxState *state); - virtual void updateFlatness(GfxState *state); - virtual void updateLineJoin(GfxState *state); - virtual void updateLineCap(GfxState *state); - virtual void updateMiterLimit(GfxState *state); - virtual void updateLineWidth(GfxState *state); - virtual void updateFillColor(GfxState *state); - virtual void updateStrokeColor(GfxState *state); - virtual void updateFillOpacity(GfxState *state); - virtual void updateStrokeOpacity(GfxState *state); - virtual void updateFillColorStop(GfxState *state, double offset); - virtual void updateBlendMode(GfxState *state); - - //----- update text state - virtual void updateFont(GfxState *state); - - //----- path painting - virtual void stroke(GfxState *state); - virtual void fill(GfxState *state); - virtual void eoFill(GfxState *state); - virtual void clipToStrokePath(GfxState *state); - virtual GBool tilingPatternFill(GfxState *state, Catalog *cat, Object *str, - double *pmat, int paintType, int tilingType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep); - virtual GBool axialShadedFill(GfxState *state, GfxAxialShading *shading, double tMin, double tMax); - virtual GBool axialShadedSupportExtend(GfxState *state, GfxAxialShading *shading); - virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *shading, double sMin, double sMax); - virtual GBool radialShadedSupportExtend(GfxState *state, GfxRadialShading *shading); -#if CAIRO_VERSION == CAIRO_VERSION_ENCODE(1, 11, 2) - virtual GBool gouraudTriangleShadedFill(GfxState *state, GfxGouraudTriangleShading *shading); - virtual GBool patchMeshShadedFill(GfxState *state, GfxPatchMeshShading *shading); -#endif - - //----- path clipping - virtual void clip(GfxState *state); - virtual void eoClip(GfxState *state); - - //----- text drawing - void beginString(GfxState *state, GooString *s); - void endString(GfxState *state); - void drawChar(GfxState *state, double x, double y, - double dx, double dy, - double originX, double originY, - CharCode code, int nBytes, Unicode *u, int uLen); - - virtual GBool beginType3Char(GfxState *state, double x, double y, - double dx, double dy, - CharCode code, Unicode *u, int uLen); - virtual void endType3Char(GfxState *state); - virtual void beginTextObject(GfxState *state); - virtual GBool deviceHasTextClip(GfxState *state) { return textClipPath && haveCSPattern; } - virtual void endTextObject(GfxState *state); - - // If current colorspace is pattern, - // does this device support text in pattern colorspace? - virtual GBool supportTextCSPattern(GfxState *state) { - return state->getFillColorSpace()->getMode() == csPattern; } - - // If current colorspace is pattern, - // need this device special handling for masks in pattern colorspace? - virtual GBool fillMaskCSPattern(GfxState * state) { - return state->getFillColorSpace()->getMode() == csPattern; } - - virtual void endMaskClip(GfxState *state); - - //----- grouping operators - virtual void beginMarkedContent(char *name, Dict *properties); - virtual void endMarkedContent(GfxState *state); - - //----- image drawing - virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, GBool interpolate, - GBool inlineImg); - void drawImageMaskPrescaled(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, GBool interpolate, - GBool inlineImg); - void drawImageMaskRegular(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, GBool interpolate, - GBool inlineImg); - - virtual void drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - GBool interpolate, int *maskColors, GBool inlineImg); - virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap, - GBool maskInterpolate); - - virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, - int maskWidth, int maskHeight, - GBool maskInvert, GBool maskInterpolate); - - //----- transparency groups and soft masks - virtual void beginTransparencyGroup(GfxState * /*state*/, double * /*bbox*/, - GfxColorSpace * /*blendingColorSpace*/, - GBool /*isolated*/, GBool /*knockout*/, - GBool /*forSoftMask*/); - virtual void endTransparencyGroup(GfxState * /*state*/); - void popTransparencyGroup(); - virtual void paintTransparencyGroup(GfxState * /*state*/, double * /*bbox*/); - virtual void setSoftMask(GfxState * /*state*/, double * /*bbox*/, GBool /*alpha*/, - Function * /*transferFunc*/, GfxColor * /*backdropColor*/); - virtual void clearSoftMask(GfxState * /*state*/); - - //----- Type 3 font operators - virtual void type3D0(GfxState *state, double wx, double wy); - virtual void type3D1(GfxState *state, double wx, double wy, - double llx, double lly, double urx, double ury); - - //----- special access - - // Called to indicate that a new PDF document has been loaded. - void startDoc(XRef *xrefA, Catalog *catalogA, CairoFontEngine *fontEngine = NULL); - - GBool isReverseVideo() { return gFalse; } - - void setCairo (cairo_t *cr); - void setTextPage (TextPage *text); - void setPrinting (GBool printing) { this->printing = printing; needFontUpdate = gTrue; } - - void setInType3Char(GBool inType3Char) { this->inType3Char = inType3Char; } - void getType3GlyphWidth (double *wx, double *wy) { *wx = t3_glyph_wx; *wy = t3_glyph_wy; } - GBool hasType3GlyphBBox () { return t3_glyph_has_bbox; } - double *getType3GlyphBBox () { return t3_glyph_bbox; } - -protected: - void doPath(cairo_t *cairo, GfxState *state, GfxPath *path); - cairo_surface_t *downscaleSurface(cairo_surface_t *orig_surface); - void getScaledSize(int orig_width, int orig_height, - int *scaledWidth, int *scaledHeight); - cairo_filter_t getFilterForSurface(cairo_surface_t *image, - GBool interpolate); - GBool getStreamData (Stream *str, char **buffer, int *length); - void setMimeData(Stream *str, Object *ref, cairo_surface_t *image); - void fillToStrokePathClip(); - void alignStrokeCoords(double *x, double *y); - - GfxRGB fill_color, stroke_color; - cairo_pattern_t *fill_pattern, *stroke_pattern; - double fill_opacity; - double stroke_opacity; - GBool stroke_adjust; - GBool adjusted_stroke_width; - GBool align_stroke_coords; - CairoFont *currentFont; - - struct StrokePathClip { - cairo_path_t *path; - cairo_matrix_t ctm; - double line_width; - double *dashes; - int dash_count; - double dash_offset; - cairo_line_cap_t cap; - cairo_line_join_t join; - double miter; - } *strokePathClip; - - XRef *xref; // xref table for current document - Catalog *catalog; - - static FT_Library ft_lib; - static GBool ft_lib_initialized; - - CairoFontEngine *fontEngine; - GBool fontEngine_owner; - - cairo_t *cairo; - cairo_matrix_t orig_matrix; - GBool needFontUpdate; // set when the font needs to be updated - GBool printing; - GBool use_show_text_glyphs; - cairo_surface_t *surface; - cairo_glyph_t *glyphs; - int glyphCount; - cairo_text_cluster_t *clusters; - int clusterCount; - char *utf8; - int utf8Count; - int utf8Max; - cairo_path_t *textClipPath; - GBool inType3Char; // inside a Type 3 CharProc - double t3_glyph_wx, t3_glyph_wy; - GBool t3_glyph_has_bbox; - double t3_glyph_bbox[4]; - - GBool prescaleImages; - - TextPage *text; // text for the current page - ActualText *actualText; - - cairo_pattern_t *group; - cairo_pattern_t *shape; - cairo_pattern_t *mask; - cairo_surface_t *cairo_shape_surface; - cairo_t *cairo_shape; - int knockoutCount; - struct ColorSpaceStack { - GBool knockout; - GfxColorSpace *cs; - struct ColorSpaceStack *next; - } * groupColorSpaceStack; - - struct MaskStack { - cairo_pattern_t *mask; - struct MaskStack *next; - } *maskStack; - - GBool haveCSPattern; // set if text has been drawn with a - // clipping render mode because of pattern colorspace -}; - -//------------------------------------------------------------------------ -// CairoImageOutputDev -//------------------------------------------------------------------------ - -//XXX: this should ideally not inherit from CairoOutputDev but use it instead perhaps -class CairoImageOutputDev: public CairoOutputDev { -public: - - // Constructor. - CairoImageOutputDev(); - - // Destructor. - virtual ~CairoImageOutputDev(); - - //----- get info about output device - - // Does this device use upside-down coordinates? - // (Upside-down means (0,0) is the top left corner of the page.) - virtual GBool upsideDown() { return gTrue; } - - // Does this device use drawChar() or drawString()? - virtual GBool useDrawChar() { return gFalse; } - - // Does this device use tilingPatternFill()? If this returns false, - // tiling pattern fills will be reduced to a series of other drawing - // operations. - virtual GBool useTilingPatternFill() { return gTrue; } - - // Does this device use functionShadedFill(), axialShadedFill(), and - // radialShadedFill()? If this returns false, these shaded fills - // will be reduced to a series of other drawing operations. -#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 11, 2) - virtual GBool useShadedFills(int type) { return type <= 7; } -#else - virtual GBool useShadedFills(int type) { return type < 4; } -#endif - - // Does this device use FillColorStop()? - virtual GBool useFillColorStop() { return gFalse; } - - // Does this device use beginType3Char/endType3Char? Otherwise, - // text in Type 3 fonts will be drawn with drawChar/drawString. - virtual GBool interpretType3Chars() { return gFalse; } - - // Does this device need non-text content? - virtual GBool needNonText() { return gTrue; } - - //----- save/restore graphics state - virtual void saveState(GfxState *state) { } - virtual void restoreState(GfxState *state) { } - - //----- update graphics state - virtual void updateAll(GfxState *state) { } - virtual void setDefaultCTM(double *ctm) { } - virtual void updateCTM(GfxState *state, double m11, double m12, - double m21, double m22, double m31, double m32) { } - virtual void updateLineDash(GfxState *state) { } - virtual void updateFlatness(GfxState *state) { } - virtual void updateLineJoin(GfxState *state) { } - virtual void updateLineCap(GfxState *state) { } - virtual void updateMiterLimit(GfxState *state) { } - virtual void updateLineWidth(GfxState *state) { } - virtual void updateFillColor(GfxState *state) { } - virtual void updateStrokeColor(GfxState *state) { } - virtual void updateFillOpacity(GfxState *state) { } - virtual void updateStrokeOpacity(GfxState *state) { } - virtual void updateBlendMode(GfxState *state) { } - - //----- update text state - virtual void updateFont(GfxState *state) { } - - //----- path painting - virtual void stroke(GfxState *state) { } - virtual void fill(GfxState *state) { } - virtual void eoFill(GfxState *state) { } - virtual GBool tilingPatternFill(GfxState *state, Catalog *cat, Object *str, - double *pmat, int paintType, int tilingType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep) { return gTrue; } - virtual GBool axialShadedFill(GfxState *state, - GfxAxialShading *shading, - double tMin, double tMax) { return gTrue; } - virtual GBool radialShadedFill(GfxState *state, - GfxRadialShading *shading, - double sMin, double sMax) { return gTrue; } - - //----- path clipping - virtual void clip(GfxState *state) { } - virtual void eoClip(GfxState *state) { } - - //----- image drawing - virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool interpolate, GBool inlineImg); - virtual void drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - GBool interpolate, int *maskColors, GBool inlineImg); - virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap, - GBool maskInterpolate); - virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, - int maskWidth, int maskHeight, - GBool maskInvert, GBool maskInterpolate); - - //----- transparency groups and soft masks - virtual void beginTransparencyGroup(GfxState * /*state*/, double * /*bbox*/, - GfxColorSpace * /*blendingColorSpace*/, - GBool /*isolated*/, GBool /*knockout*/, - GBool /*forSoftMask*/) {} - virtual void endTransparencyGroup(GfxState * /*state*/) {} - virtual void paintTransparencyGroup(GfxState * /*state*/, double * /*bbox*/) {} - virtual void setSoftMask(GfxState * /*state*/, double * /*bbox*/, GBool /*alpha*/, - Function * /*transferFunc*/, GfxColor * /*backdropColor*/) {} - virtual void clearSoftMask(GfxState * /*state*/) {} - - //----- Image list - // By default images are not rendred - void setImageDrawDecideCbk(GBool (*cbk)(int img_id, void *data), - void *data) { imgDrawCbk = cbk; imgDrawCbkData = data; } - // Iterate through list of images. - int getNumImages() const { return numImages; } - CairoImage *getImage(int i) const { return images[i]; } - -private: - void saveImage(CairoImage *image); - - CairoImage **images; - int numImages; - int size; - GBool (*imgDrawCbk)(int img_id, void *data); - void *imgDrawCbkData; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoRescaleBox.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoRescaleBox.cc deleted file mode 100644 index 234322ad85a..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoRescaleBox.cc +++ /dev/null @@ -1,351 +0,0 @@ -/* -*- Mode: c; c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t; -*- */ -/* - * Copyright © 2009 Mozilla Corporation - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Mozilla Corporation not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Mozilla Corporation makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * MOZILLA CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT - * SHALL MOZILLA CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - * - * Author: Jeff Muizelaar, Mozilla Corp. - */ - -/* This implements a box filter that supports non-integer box sizes */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <stdint.h> -#include <stdio.h> -#include <assert.h> -#include <stdlib.h> -#include <math.h> -#include "goo/gmem.h" -#include "goo/gtypes_p.h" -#include "CairoRescaleBox.h" - - -/* we work in fixed point where 1. == 1 << 24 */ -#define FIXED_SHIFT 24 - -static void downsample_row_box_filter ( - int start, int width, - uint32_t *src, uint32_t *dest, - int coverage[], int pixel_coverage) -{ - /* we need an array of the pixel contribution of each destination pixel on the boundaries. - * we invert the value to get the value on the other size of the box */ - /* - - value = a * contribution * 1/box_size - value += a * 1/box_size - value += a * 1/box_size - value += a * 1/box_size - value += a * (1 - contribution) * 1/box_size - a * (1/box_size - contribution * 1/box_size) - - box size is constant - - - value = a * contribtion_a * 1/box_size + b * contribution_b * 1/box_size - contribution_b = (1 - contribution_a) - = (1 - contribution_a_next) - */ - - /* box size = ceil(src_width/dest_width) */ - int x = 0; - - /* skip to start */ - /* XXX: it might be possible to do this directly instead of iteratively, however - * the iterative solution is simple */ - while (x < start) - { - int box = 1 << FIXED_SHIFT; - int start_coverage = coverage[x]; - box -= start_coverage; - src++; - while (box >= pixel_coverage) - { - src++; - box -= pixel_coverage; - } - x++; - } - - while (x < start + width) - { - uint32_t a = 0; - uint32_t r = 0; - uint32_t g = 0; - uint32_t b = 0; - int box = 1 << FIXED_SHIFT; - int start_coverage = coverage[x]; - - a = ((*src >> 24) & 0xff) * start_coverage; - r = ((*src >> 16) & 0xff) * start_coverage; - g = ((*src >> 8) & 0xff) * start_coverage; - b = ((*src >> 0) & 0xff) * start_coverage; - src++; - x++; - box -= start_coverage; - - while (box >= pixel_coverage) - { - a += ((*src >> 24) & 0xff) * pixel_coverage; - r += ((*src >> 16) & 0xff) * pixel_coverage; - g += ((*src >> 8) & 0xff) * pixel_coverage; - b += ((*src >> 0) & 0xff) * pixel_coverage; - src++; - - box -= pixel_coverage; - } - - /* multiply by whatever is leftover - * this ensures that we don't bias down. - * i.e. start_coverage + n*pixel_coverage + box == 1 << 24 */ - if (box > 0) - { - a += ((*src >> 24) & 0xff) * box; - r += ((*src >> 16) & 0xff) * box; - g += ((*src >> 8) & 0xff) * box; - b += ((*src >> 0) & 0xff) * box; - } - - a >>= FIXED_SHIFT; - r >>= FIXED_SHIFT; - g >>= FIXED_SHIFT; - b >>= FIXED_SHIFT; - - *dest = (a << 24) | (r << 16) | (g << 8) | b; - dest++; - } -} - -static void downsample_columns_box_filter ( - int n, - int start_coverage, - int pixel_coverage, - uint32_t *src, uint32_t *dest) -{ - int stride = n; - while (n--) { - uint32_t a = 0; - uint32_t r = 0; - uint32_t g = 0; - uint32_t b = 0; - uint32_t *column_src = src; - int box = 1 << FIXED_SHIFT; - - a = ((*column_src >> 24) & 0xff) * start_coverage; - r = ((*column_src >> 16) & 0xff) * start_coverage; - g = ((*column_src >> 8) & 0xff) * start_coverage; - b = ((*column_src >> 0) & 0xff) * start_coverage; - column_src += stride; - box -= start_coverage; - - while (box >= pixel_coverage) - { - a += ((*column_src >> 24) & 0xff) * pixel_coverage; - r += ((*column_src >> 16) & 0xff) * pixel_coverage; - g += ((*column_src >> 8) & 0xff) * pixel_coverage; - b += ((*column_src >> 0) & 0xff) * pixel_coverage; - column_src += stride; - box -= pixel_coverage; - } - - if (box > 0) { - a += ((*column_src >> 24) & 0xff) * box; - r += ((*column_src >> 16) & 0xff) * box; - g += ((*column_src >> 8) & 0xff) * box; - b += ((*column_src >> 0) & 0xff) * box; - } - - a >>= FIXED_SHIFT; - r >>= FIXED_SHIFT; - g >>= FIXED_SHIFT; - b >>= FIXED_SHIFT; - - *dest = (a << 24) | (r << 16) | (g << 8) | b; - dest++; - src++; - } -} - -static int compute_coverage (int coverage[], int src_length, int dest_length) -{ - int i; - /* num = src_length/dest_length - total = sum(pixel) / num - - pixel * 1/num == pixel * dest_length / src_length - */ - /* the average contribution of each source pixel */ - int ratio = ((1 << 24)*(long long int)dest_length)/src_length; - /* because ((1 << 24)*(long long int)dest_length) won't always be divisible by src_length - * we'll need someplace to put the other bits. - * - * We want to ensure a + n*ratio < 1<<24 - * - * 1<<24 - * */ - - double scale = (double)src_length/dest_length; - - /* for each destination pixel compute the coverage of the left most pixel included in the box */ - /* I have a proof of this, which this margin is too narrow to contain */ - for (i=0; i<dest_length; i++) - { - float left_side = i*scale; - float right_side = (i+1)*scale; - float right_fract = right_side - floor (right_side); - float left_fract = ceil (left_side) - left_side; - int overage; - /* find out how many source pixels will be used to fill the box */ - int count = floor (right_side) - ceil (left_side); - /* what's the maximum value this expression can become? - floor((i+1)*scale) - ceil(i*scale) - - (i+1)*scale - i*scale == scale - - since floor((i+1)*scale) <= (i+1)*scale - and ceil(i*scale) >= i*scale - - floor((i+1)*scale) - ceil(i*scale) <= scale - - further since: floor((i+1)*scale) - ceil(i*scale) is an integer - - therefore: - floor((i+1)*scale) - ceil(i*scale) <= floor(scale) - */ - - if (left_fract == 0.) - count--; - - /* compute how much the right-most pixel contributes */ - overage = ratio*(right_fract); - - /* the remainder is the the amount that the left-most pixel - * contributes */ - coverage[i] = (1<<24) - (count * ratio + overage); - } - - return ratio; -} - -GBool downscale_box_filter(uint32_t *orig, int orig_stride, unsigned orig_width, unsigned orig_height, - signed scaled_width, signed scaled_height, - uint16_t start_column, uint16_t start_row, - uint16_t width, uint16_t height, - uint32_t *dest, int dst_stride) -{ - int pixel_coverage_x, pixel_coverage_y; - int dest_y; - int src_y = 0; - uint32_t *scanline = orig; - int *x_coverage = NULL; - int *y_coverage = NULL; - uint32_t *temp_buf = NULL; - GBool retval = gFalse; - - x_coverage = (int *)gmallocn3 (orig_width, 1, sizeof(int)); - y_coverage = (int *)gmallocn3 (orig_height, 1, sizeof(int)); - - /* we need to allocate enough room for ceil(src_height/dest_height)+1 - Example: - src_height = 140 - dest_height = 50 - src_height/dest_height = 2.8 - - |-------------| 2.8 pixels - |----|----|----|----| 4 pixels - need to sample 3 pixels - - |-------------| 2.8 pixels - |----|----|----|----| 4 pixels - need to sample 4 pixels - */ - - temp_buf = (uint32_t *)gmallocn3 ((orig_height + scaled_height-1)/scaled_height+1, scaled_width, sizeof(uint32_t)); - - if (!x_coverage || !y_coverage || !scanline || !temp_buf) - goto cleanup; - - pixel_coverage_x = compute_coverage (x_coverage, orig_width, scaled_width); - pixel_coverage_y = compute_coverage (y_coverage, orig_height, scaled_height); - - assert (width + start_column <= scaled_width); - - /* skip the rows at the beginning */ - for (dest_y = 0; dest_y < start_row; dest_y++) - { - int box = 1 << FIXED_SHIFT; - int start_coverage_y = y_coverage[dest_y]; - box -= start_coverage_y; - src_y++; - while (box >= pixel_coverage_y) - { - box -= pixel_coverage_y; - src_y++; - } - } - - for (; dest_y < start_row + height; dest_y++) - { - int columns = 0; - int box = 1 << FIXED_SHIFT; - int start_coverage_y = y_coverage[dest_y]; - - scanline = orig + src_y * orig_stride / 4; - downsample_row_box_filter (start_column, width, scanline, temp_buf + width * columns, x_coverage, pixel_coverage_x); - columns++; - src_y++; - box -= start_coverage_y; - - while (box >= pixel_coverage_y) - { - scanline = orig + src_y * orig_stride / 4; - downsample_row_box_filter (start_column, width, scanline, temp_buf + width * columns, x_coverage, pixel_coverage_x); - columns++; - src_y++; - box -= pixel_coverage_y; - } - - /* downsample any leftovers */ - if (box > 0) - { - scanline = orig + src_y * orig_stride / 4; - downsample_row_box_filter (start_column, width, scanline, temp_buf + width * columns, x_coverage, pixel_coverage_x); - columns++; - } - - /* now scale the rows we just downsampled in the y direction */ - downsample_columns_box_filter (width, start_coverage_y, pixel_coverage_y, temp_buf, dest); - dest += dst_stride / 4; - -// assert(width*columns <= ((orig_height + scaled_height-1)/scaled_height+1) * width); - } -// assert (src_y<=orig_height); - - retval = gTrue; - -cleanup: - free (x_coverage); - free (y_coverage); - free (temp_buf); - - return gTrue; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoRescaleBox.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoRescaleBox.h deleted file mode 100644 index 5349c87f306..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CairoRescaleBox.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef CAIRO_RESCALE_BOX_H -#define CAIRO_RESCALE_BOX_H - -#include "goo/gtypes.h" - -GBool downscale_box_filter(unsigned int *orig, int orig_stride, unsigned orig_width, unsigned orig_height, - signed scaled_width, signed scaled_height, - unsigned short int start_column, unsigned short int start_row, - unsigned short int width, unsigned short int height, - unsigned int *dest, int dst_stride); - -#endif /* CAIRO_RESCALE_BOX_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Catalog.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Catalog.cc deleted file mode 100644 index a8c2e39621b..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Catalog.cc +++ /dev/null @@ -1,965 +0,0 @@ -//======================================================================== -// -// Catalog.cc -// -// Copyright 1996-2007 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005-2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2005 Jeff Muizelaar <jrmuizel@nit.ca> -// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> -// Copyright (C) 2005 Marco Pesenti Gritti <mpg@redhat.com> -// Copyright (C) 2005, 2006, 2008 Brad Hards <bradh@frogmouth.net> -// Copyright (C) 2006, 2008, 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2008, 2011 Pino Toscano <pino@kde.org> -// Copyright (C) 2009 Ilya Gorenbein <igorenbein@finjan.com> -// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stddef.h> -#include <stdlib.h> -#include "goo/gmem.h" -#include "Object.h" -#include "XRef.h" -#include "Array.h" -#include "Dict.h" -#include "Page.h" -#include "Error.h" -#include "Link.h" -#include "PageLabelInfo.h" -#include "Catalog.h" -#include "Form.h" -#include "OptionalContent.h" -#include "ViewerPreferences.h" -#include "FileSpec.h" - -//------------------------------------------------------------------------ -// Catalog -//------------------------------------------------------------------------ - -Catalog::Catalog(XRef *xrefA) { - Object catDict, pagesDict, pagesDictRef; - Object obj, obj2; - Object optContentProps; - - ok = gTrue; - xref = xrefA; - pages = NULL; - pageRefs = NULL; - numPages = -1; - pagesSize = 0; - baseURI = NULL; - pageLabelInfo = NULL; - form = NULL; - optContent = NULL; - pageMode = pageModeNull; - pageLayout = pageLayoutNull; - destNameTree = NULL; - embeddedFileNameTree = NULL; - jsNameTree = NULL; - viewerPrefs = NULL; - - pagesList = NULL; - pagesRefList = NULL; - attrsList = NULL; - kidsIdxList = NULL; - lastCachedPage = 0; - - xref->getCatalog(&catDict); - if (!catDict.isDict()) { - error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); - goto err1; - } - // get the AcroForm dictionary - catDict.dictLookup("AcroForm", &acroForm); - - // read base URI - if (catDict.dictLookup("URI", &obj)->isDict()) { - if (obj.dictLookup("Base", &obj2)->isString()) { - baseURI = obj2.getString()->copy(); - } - obj2.free(); - } - obj.free(); - - // get the Optional Content dictionary - if (catDict.dictLookup("OCProperties", &optContentProps)->isDict()) { - optContent = new OCGs(&optContentProps, xref); - if (!optContent->isOk ()) { - delete optContent; - optContent = NULL; - } - } - optContentProps.free(); - - // get the ViewerPreferences dictionary - catDict.dictLookup("ViewerPreferences", &viewerPreferences); - - // perform form-related loading after all widgets have been loaded - if (getForm()) - getForm()->postWidgetsLoad(this); - - catDict.free(); - return; - - err1: - catDict.free(); - ok = gFalse; -} - -Catalog::~Catalog() { - delete kidsIdxList; - if (attrsList) { - std::vector<PageAttrs *>::iterator it; - for (it = attrsList->begin() ; it < attrsList->end(); it++ ) { - delete *it; - } - delete attrsList; - } - delete pagesRefList; - if (pagesList) { - std::vector<Dict *>::iterator it; - for (it = pagesList->begin() ; it < pagesList->end(); it++ ) { - if (!(*it)->decRef()) { - delete *it; - } - } - delete pagesList; - } - if (pages) { - for (int i = 0; i < pagesSize; ++i) { - if (pages[i]) { - delete pages[i]; - } - } - gfree(pages); - gfree(pageRefs); - } - names.free(); - dests.free(); - delete destNameTree; - delete embeddedFileNameTree; - delete jsNameTree; - if (baseURI) { - delete baseURI; - } - delete pageLabelInfo; - delete form; - delete optContent; - delete viewerPrefs; - metadata.free(); - structTreeRoot.free(); - outline.free(); - acroForm.free(); - viewerPreferences.free(); -} - -GooString *Catalog::readMetadata() { - GooString *s; - Dict *dict; - Object obj; - - if (metadata.isNone()) { - Object catDict; - - xref->getCatalog(&catDict); - if (catDict.isDict()) { - catDict.dictLookup("Metadata", &metadata); - } else { - error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); - metadata.initNull(); - } - catDict.free(); - } - - if (!metadata.isStream()) { - return NULL; - } - dict = metadata.streamGetDict(); - if (!dict->lookup("Subtype", &obj)->isName("XML")) { - error(-1, "Unknown Metadata type: '%s'", - obj.isName() ? obj.getName() : "???"); - } - obj.free(); - s = new GooString(); - metadata.getStream()->fillGooString(s); - metadata.streamClose(); - return s; -} - -Page *Catalog::getPage(int i) -{ - if (i < 1) return NULL; - - if (i > lastCachedPage) { - if (cachePageTree(i) == gFalse) return NULL; - } - return pages[i-1]; -} - -Ref *Catalog::getPageRef(int i) -{ - if (i < 1) return NULL; - - if (i > lastCachedPage) { - if (cachePageTree(i) == gFalse) return NULL; - } - return &pageRefs[i-1]; -} - -GBool Catalog::cachePageTree(int page) -{ - Dict *pagesDict; - - if (pagesList == NULL) { - - Object catDict; - Ref pagesRef; - - xref->getCatalog(&catDict); - - if (catDict.isDict()) { - Object pagesDictRef; - if (catDict.dictLookupNF("Pages", &pagesDictRef)->isRef() && - pagesDictRef.getRefNum() >= 0 && - pagesDictRef.getRefNum() < xref->getNumObjects()) { - pagesRef = pagesDictRef.getRef(); - pagesDictRef.free(); - } else { - error(-1, "Catalog dictionary does not contain a valid \"Pages\" entry"); - pagesDictRef.free(); - catDict.free(); - return gFalse; - } - } else { - error(-1, "Could not find catalog dictionary"); - catDict.free(); - return gFalse; - } - - Object obj; - catDict.dictLookup("Pages", &obj); - catDict.free(); - // This should really be isDict("Pages"), but I've seen at least one - // PDF file where the /Type entry is missing. - if (obj.isDict()) { - obj.getDict()->incRef(); - pagesDict = obj.getDict(); - obj.free(); - } - else { - error(-1, "Top-level pages object is wrong type (%s)", obj.getTypeName()); - obj.free(); - return gFalse; - } - - pagesSize = getNumPages(); - pages = (Page **)gmallocn(pagesSize, sizeof(Page *)); - pageRefs = (Ref *)gmallocn(pagesSize, sizeof(Ref)); - for (int i = 0; i < pagesSize; ++i) { - pages[i] = NULL; - pageRefs[i].num = -1; - pageRefs[i].gen = -1; - } - - pagesList = new std::vector<Dict *>(); - pagesList->push_back(pagesDict); - pagesRefList = new std::vector<Ref>(); - pagesRefList->push_back(pagesRef); - attrsList = new std::vector<PageAttrs *>(); - attrsList->push_back(new PageAttrs(NULL, pagesDict)); - kidsIdxList = new std::vector<int>(); - kidsIdxList->push_back(0); - lastCachedPage = 0; - - } - - while(1) { - - if (page <= lastCachedPage) return gTrue; - - if (pagesList->empty()) return gFalse; - - pagesDict = pagesList->back(); - Object kids; - pagesDict->lookup("Kids", &kids); - if (!kids.isArray()) { - error(-1, "Kids object (page %d) is wrong type (%s)", - lastCachedPage+1, kids.getTypeName()); - kids.free(); - return gFalse; - } - - int kidsIdx = kidsIdxList->back(); - if (kidsIdx >= kids.arrayGetLength()) { - if (!pagesList->back()->decRef()) { - delete pagesList->back(); - } - pagesList->pop_back(); - pagesRefList->pop_back(); - delete attrsList->back(); - attrsList->pop_back(); - kidsIdxList->pop_back(); - if (!kidsIdxList->empty()) kidsIdxList->back()++; - kids.free(); - continue; - } - - Object kidRef; - kids.arrayGetNF(kidsIdx, &kidRef); - if (!kidRef.isRef()) { - error(-1, "Kid object (page %d) is not an indirect reference (%s)", - lastCachedPage+1, kidRef.getTypeName()); - kidRef.free(); - kids.free(); - return gFalse; - } - - GBool loop = gFalse;; - for (size_t i = 0; i < pagesRefList->size(); i++) { - if (((*pagesRefList)[i]).num == kidRef.getRefNum()) { - loop = gTrue; - break; - } - } - if (loop) { - error(-1, "Loop in Pages tree"); - kidRef.free(); - kids.free(); - kidsIdxList->back()++; - continue; - } - - Object kid; - kids.arrayGet(kidsIdx, &kid); - kids.free(); - if (kid.isDict("Page") || (kid.isDict() && !kid.getDict()->hasKey("Kids"))) { - PageAttrs *attrs = new PageAttrs(attrsList->back(), kid.getDict()); - Page *p = new Page(xref, lastCachedPage+1, kid.getDict(), - kidRef.getRef(), attrs, form); - if (!p->isOk()) { - error(-1, "Failed to create page (page %d)", lastCachedPage+1); - delete p; - kidRef.free(); - kid.free(); - return gFalse; - } - - if (lastCachedPage >= numPages) { - error(-1, "Page count in top-level pages object is incorrect"); - kidRef.free(); - kid.free(); - return gFalse; - } - - pages[lastCachedPage] = p; - pageRefs[lastCachedPage].num = kidRef.getRefNum(); - pageRefs[lastCachedPage].gen = kidRef.getRefGen(); - - lastCachedPage++; - kidsIdxList->back()++; - - // This should really be isDict("Pages"), but I've seen at least one - // PDF file where the /Type entry is missing. - } else if (kid.isDict()) { - attrsList->push_back(new PageAttrs(attrsList->back(), kid.getDict())); - pagesRefList->push_back(kidRef.getRef()); - kid.getDict()->incRef(); - pagesList->push_back(kid.getDict()); - kidsIdxList->push_back(0); - } else { - error(-1, "Kid object (page %d) is wrong type (%s)", - lastCachedPage+1, kid.getTypeName()); - kidsIdxList->back()++; - } - kidRef.free(); - kid.free(); - - } - - return gFalse; -} - -int Catalog::findPage(int num, int gen) { - int i; - - for (i = 0; i < getNumPages(); ++i) { - Ref *ref = getPageRef(i+1); - if (ref != NULL && ref->num == num && ref->gen == gen) - return i + 1; - } - return 0; -} - -LinkDest *Catalog::findDest(GooString *name) { - LinkDest *dest; - Object obj1, obj2; - GBool found; - - // try named destination dictionary then name tree - found = gFalse; - if (getDests()->isDict()) { - if (!getDests()->dictLookup(name->getCString(), &obj1)->isNull()) - found = gTrue; - else - obj1.free(); - } - if (!found) { - if (getDestNameTree()->lookup(name, &obj1)) - found = gTrue; - else - obj1.free(); - } - if (!found) - return NULL; - - // construct LinkDest - dest = NULL; - if (obj1.isArray()) { - dest = new LinkDest(obj1.getArray()); - } else if (obj1.isDict()) { - if (obj1.dictLookup("D", &obj2)->isArray()) - dest = new LinkDest(obj2.getArray()); - else - error(-1, "Bad named destination value"); - obj2.free(); - } else { - error(-1, "Bad named destination value"); - } - obj1.free(); - if (dest && !dest->isOk()) { - delete dest; - dest = NULL; - } - - return dest; -} - -FileSpec *Catalog::embeddedFile(int i) -{ - Object efDict; - Object obj; - obj = getEmbeddedFileNameTree()->getValue(i); - FileSpec *embeddedFile = 0; - if (obj.isRef()) { - Object fsDict; - embeddedFile = new FileSpec(obj.fetch(xref, &fsDict)); - fsDict.free(); - } else { - Object null; - embeddedFile = new FileSpec(&null); - } - return embeddedFile; -} - -GooString *Catalog::getJS(int i) -{ - Object obj; - // getJSNameTree()->getValue(i) returns a shallow copy of the object so we - // do not need to free it - getJSNameTree()->getValue(i).fetch(xref, &obj); - - if (!obj.isDict()) { - obj.free(); - return 0; - } - Object obj2; - if (!obj.dictLookup("S", &obj2)->isName()) { - obj2.free(); - obj.free(); - return 0; - } - if (strcmp(obj2.getName(), "JavaScript")) { - obj2.free(); - obj.free(); - return 0; - } - obj2.free(); - obj.dictLookup("JS", &obj2); - GooString *js = 0; - if (obj2.isString()) { - js = new GooString(obj2.getString()); - } - else if (obj2.isStream()) { - Stream *stream = obj2.getStream(); - js = new GooString(); - stream->fillGooString(js); - } - obj2.free(); - obj.free(); - return js; -} - -Catalog::PageMode Catalog::getPageMode() { - - if (pageMode == pageModeNull) { - - Object catDict, obj; - - pageMode = pageModeNone; - - xref->getCatalog(&catDict); - if (!catDict.isDict()) { - error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); - catDict.free(); - return pageMode; - } - - if (catDict.dictLookup("PageMode", &obj)->isName()) { - if (obj.isName("UseNone")) - pageMode = pageModeNone; - else if (obj.isName("UseOutlines")) - pageMode = pageModeOutlines; - else if (obj.isName("UseThumbs")) - pageMode = pageModeThumbs; - else if (obj.isName("FullScreen")) - pageMode = pageModeFullScreen; - else if (obj.isName("UseOC")) - pageMode = pageModeOC; - else if (obj.isName("UseAttachments")) - pageMode = pageModeAttach; - } - obj.free(); - catDict.free(); - } - return pageMode; -} - -Catalog::PageLayout Catalog::getPageLayout() { - - if (pageLayout == pageLayoutNull) { - - Object catDict, obj; - - pageLayout = pageLayoutNone; - - xref->getCatalog(&catDict); - if (!catDict.isDict()) { - error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); - catDict.free(); - return pageLayout; - } - - pageLayout = pageLayoutNone; - if (catDict.dictLookup("PageLayout", &obj)->isName()) { - if (obj.isName("SinglePage")) - pageLayout = pageLayoutSinglePage; - if (obj.isName("OneColumn")) - pageLayout = pageLayoutOneColumn; - if (obj.isName("TwoColumnLeft")) - pageLayout = pageLayoutTwoColumnLeft; - if (obj.isName("TwoColumnRight")) - pageLayout = pageLayoutTwoColumnRight; - if (obj.isName("TwoPageLeft")) - pageLayout = pageLayoutTwoPageLeft; - if (obj.isName("TwoPageRight")) - pageLayout = pageLayoutTwoPageRight; - } - obj.free(); - catDict.free(); - } - return pageLayout; -} - -NameTree::NameTree() -{ - size = 0; - length = 0; - entries = NULL; -} - -NameTree::~NameTree() -{ - int i; - - for (i = 0; i < length; i++) - delete entries[i]; - - gfree(entries); -} - -NameTree::Entry::Entry(Array *array, int index) { - if (!array->getString(index, &name) || !array->getNF(index + 1, &value)) { - Object aux; - array->get(index, &aux); - if (aux.isString() && array->getNF(index + 1, &value) ) - { - name.append(aux.getString()); - } - else - error(-1, "Invalid page tree"); - } -} - -NameTree::Entry::~Entry() { - value.free(); -} - -void NameTree::addEntry(Entry *entry) -{ - if (length == size) { - if (length == 0) { - size = 8; - } else { - size *= 2; - } - entries = (Entry **) grealloc (entries, sizeof (Entry *) * size); - } - - entries[length] = entry; - ++length; -} - -void NameTree::init(XRef *xrefA, Object *tree) { - xref = xrefA; - parse(tree); -} - -void NameTree::parse(Object *tree) { - Object names; - Object kids, kid; - int i; - - if (!tree->isDict()) - return; - - // leaf node - if (tree->dictLookup("Names", &names)->isArray()) { - for (i = 0; i < names.arrayGetLength(); i += 2) { - NameTree::Entry *entry; - - entry = new Entry(names.getArray(), i); - addEntry(entry); - } - } - names.free(); - - // root or intermediate node - if (tree->dictLookup("Kids", &kids)->isArray()) { - for (i = 0; i < kids.arrayGetLength(); ++i) { - if (kids.arrayGet(i, &kid)->isDict()) - parse(&kid); - kid.free(); - } - } - kids.free(); -} - -int NameTree::Entry::cmp(const void *voidKey, const void *voidEntry) -{ - GooString *key = (GooString *) voidKey; - Entry *entry = *(NameTree::Entry **) voidEntry; - - return key->cmp(&entry->name); -} - -GBool NameTree::lookup(GooString *name, Object *obj) -{ - Entry **entry; - - entry = (Entry **) bsearch(name, entries, - length, sizeof(Entry *), Entry::cmp); - if (entry != NULL) { - (*entry)->value.fetch(xref, obj); - return gTrue; - } else { - printf("failed to look up %s\n", name->getCString()); - obj->initNull(); - return gFalse; - } -} - -Object NameTree::getValue(int index) -{ - if (index < length) { - return entries[index]->value; - } else { - return Object(); - } -} - -GooString *NameTree::getName(int index) -{ - if (index < length) { - return &entries[index]->name; - } else { - return NULL; - } -} - -GBool Catalog::labelToIndex(GooString *label, int *index) -{ - char *end; - - PageLabelInfo *pli = getPageLabelInfo(); - if (pli != NULL) { - if (!pli->labelToIndex(label, index)) - return gFalse; - } else { - *index = strtol(label->getCString(), &end, 10) - 1; - if (*end != '\0') - return gFalse; - } - - if (*index < 0 || *index >= getNumPages()) - return gFalse; - - return gTrue; -} - -GBool Catalog::indexToLabel(int index, GooString *label) -{ - char buffer[32]; - - if (index < 0 || index >= getNumPages()) - return gFalse; - - PageLabelInfo *pli = getPageLabelInfo(); - if (pli != NULL) { - return pli->indexToLabel(index, label); - } else { - snprintf(buffer, sizeof (buffer), "%d", index + 1); - label->append(buffer); - return gTrue; - } -} - -int Catalog::getNumPages() -{ - if (numPages == -1) - { - Object catDict, pagesDict, obj; - - xref->getCatalog(&catDict); - if (!catDict.isDict()) { - error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); - catDict.free(); - return 0; - } - catDict.dictLookup("Pages", &pagesDict); - catDict.free(); - - // This should really be isDict("Pages"), but I've seen at least one - // PDF file where the /Type entry is missing. - if (!pagesDict.isDict()) { - error(-1, "Top-level pages object is wrong type (%s)", - pagesDict.getTypeName()); - pagesDict.free(); - return 0; - } - - pagesDict.dictLookup("Count", &obj); - // some PDF files actually use real numbers here ("/Count 9.0") - if (!obj.isNum()) { - error(-1, "Page count in top-level pages object is wrong type (%s)", - obj.getTypeName()); - numPages = 0; - } else { - numPages = (int)obj.getNum(); - } - - obj.free(); - pagesDict.free(); - } - - return numPages; -} - -PageLabelInfo *Catalog::getPageLabelInfo() -{ - if (!pageLabelInfo) { - Object catDict; - Object obj; - - xref->getCatalog(&catDict); - if (!catDict.isDict()) { - error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); - catDict.free(); - return NULL; - } - - if (catDict.dictLookup("PageLabels", &obj)->isDict()) { - pageLabelInfo = new PageLabelInfo(&obj, getNumPages()); - } - obj.free(); - catDict.free(); - } - - return pageLabelInfo; -} - -Object *Catalog::getStructTreeRoot() -{ - if (structTreeRoot.isNone()) - { - Object catDict; - - xref->getCatalog(&catDict); - if (catDict.isDict()) { - catDict.dictLookup("StructTreeRoot", &structTreeRoot); - } else { - error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); - structTreeRoot.initNull(); - } - catDict.free(); - } - - return &structTreeRoot; -} - -Object *Catalog::getOutline() -{ - if (outline.isNone()) - { - Object catDict; - - xref->getCatalog(&catDict); - if (catDict.isDict()) { - catDict.dictLookup("Outlines", &outline); - } else { - error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); - outline.initNull(); - } - catDict.free(); - } - - return &outline; -} - -Object *Catalog::getDests() -{ - if (dests.isNone()) - { - Object catDict; - - xref->getCatalog(&catDict); - if (catDict.isDict()) { - catDict.dictLookup("Dests", &dests); - } else { - error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); - dests.initNull(); - } - catDict.free(); - } - - return &dests; -} - -Form *Catalog::getForm() -{ - if (!form) { - if (acroForm.isDict()) { - form = new Form(xref,&acroForm); - } - } - - return form; -} - -ViewerPreferences *Catalog::getViewerPreferences() -{ - if (!viewerPrefs) { - if (viewerPreferences.isDict()) { - viewerPrefs = new ViewerPreferences(viewerPreferences.getDict()); - } - } - - return viewerPrefs; -} - -Object *Catalog::getNames() -{ - if (names.isNone()) - { - Object catDict; - - xref->getCatalog(&catDict); - if (catDict.isDict()) { - catDict.dictLookup("Names", &names); - } else { - error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); - names.initNull(); - } - catDict.free(); - } - - return &names; -} - -NameTree *Catalog::getDestNameTree() -{ - if (!destNameTree) { - - destNameTree = new NameTree(); - - if (getNames()->isDict()) { - Object obj; - - getNames()->dictLookup("Dests", &obj); - destNameTree->init(xref, &obj); - obj.free(); - } - - } - - return destNameTree; -} - -NameTree *Catalog::getEmbeddedFileNameTree() -{ - if (!embeddedFileNameTree) { - - embeddedFileNameTree = new NameTree(); - - if (getNames()->isDict()) { - Object obj; - - getNames()->dictLookup("EmbeddedFiles", &obj); - embeddedFileNameTree->init(xref, &obj); - obj.free(); - } - - } - - return embeddedFileNameTree; -} - -NameTree *Catalog::getJSNameTree() -{ - if (!jsNameTree) { - - jsNameTree = new NameTree(); - - if (getNames()->isDict()) { - Object obj; - - getNames()->dictLookup("JavaScript", &obj); - jsNameTree->init(xref, &obj); - obj.free(); - } - - } - - return jsNameTree; -} - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Catalog.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Catalog.h deleted file mode 100644 index 41be3b6fc8a..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Catalog.h +++ /dev/null @@ -1,227 +0,0 @@ -//======================================================================== -// -// Catalog.h -// -// Copyright 1996-2007 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005, 2007, 2009-2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> -// Copyright (C) 2005, 2006, 2008 Brad Hards <bradh@frogmouth.net> -// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2008, 2011 Pino Toscano <pino@kde.org> -// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef CATALOG_H -#define CATALOG_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -#include <vector> - -class XRef; -class Object; -class Page; -class PageAttrs; -struct Ref; -class LinkDest; -class PageLabelInfo; -class Form; -class OCGs; -class ViewerPreferences; -class FileSpec; - -//------------------------------------------------------------------------ -// NameTree -//------------------------------------------------------------------------ - -class NameTree { -public: - NameTree(); - ~NameTree(); - void init(XRef *xref, Object *tree); - GBool lookup(GooString *name, Object *obj); - int numEntries() { return length; }; - // iterator accessor, note it returns a shallow copy, do not free the object - Object getValue(int i); - GooString *getName(int i); - -private: - struct Entry { - Entry(Array *array, int index); - ~Entry(); - GooString name; - Object value; - void free(); - static int cmp(const void *key, const void *entry); - }; - - void parse(Object *tree); - void addEntry(Entry *entry); - - XRef *xref; - Object *root; - Entry **entries; - int size, length; // size is the number of entries in - // the array of Entry* - // length is the number of real Entry -}; - -//------------------------------------------------------------------------ -// Catalog -//------------------------------------------------------------------------ - -class Catalog { -public: - - // Constructor. - Catalog(XRef *xrefA); - - // Destructor. - ~Catalog(); - - // Is catalog valid? - GBool isOk() { return ok; } - - // Get number of pages. - int getNumPages(); - - // Get a page. - Page *getPage(int i); - - // Get the reference for a page object. - Ref *getPageRef(int i); - - // Return base URI, or NULL if none. - GooString *getBaseURI() { return baseURI; } - - // Return the contents of the metadata stream, or NULL if there is - // no metadata. - GooString *readMetadata(); - - // Return the structure tree root object. - Object *getStructTreeRoot(); - - // Find a page, given its object ID. Returns page number, or 0 if - // not found. - int findPage(int num, int gen); - - // Find a named destination. Returns the link destination, or - // NULL if <name> is not a destination. - LinkDest *findDest(GooString *name); - - Object *getDests(); - - // Get the number of embedded files - int numEmbeddedFiles() { return getEmbeddedFileNameTree()->numEntries(); } - - // Get the i'th file embedded (at the Document level) in the document - FileSpec *embeddedFile(int i); - - // Get the number of javascript scripts - int numJS() { return getJSNameTree()->numEntries(); } - - // Get the i'th JavaScript script (at the Document level) in the document - GooString *getJS(int i); - - // Convert between page indices and page labels. - GBool labelToIndex(GooString *label, int *index); - GBool indexToLabel(int index, GooString *label); - - Object *getOutline(); - - Object *getAcroForm() { return &acroForm; } - - OCGs *getOptContentConfig() { return optContent; } - - Form* getForm(); - - ViewerPreferences *getViewerPreferences(); - - enum PageMode { - pageModeNone, - pageModeOutlines, - pageModeThumbs, - pageModeFullScreen, - pageModeOC, - pageModeAttach, - pageModeNull - }; - enum PageLayout { - pageLayoutNone, - pageLayoutSinglePage, - pageLayoutOneColumn, - pageLayoutTwoColumnLeft, - pageLayoutTwoColumnRight, - pageLayoutTwoPageLeft, - pageLayoutTwoPageRight, - pageLayoutNull - }; - - // Returns the page mode. - PageMode getPageMode(); - PageLayout getPageLayout(); - -private: - - // Get page label info. - PageLabelInfo *getPageLabelInfo(); - - XRef *xref; // the xref table for this PDF file - Page **pages; // array of pages - Ref *pageRefs; // object ID for each page - int lastCachedPage; - std::vector<Dict *> *pagesList; - std::vector<Ref> *pagesRefList; - std::vector<PageAttrs *> *attrsList; - std::vector<int> *kidsIdxList; - Form *form; - ViewerPreferences *viewerPrefs; - int numPages; // number of pages - int pagesSize; // size of pages array - Object dests; // named destination dictionary - Object names; // named names dictionary - NameTree *destNameTree; // named destination name-tree - NameTree *embeddedFileNameTree; // embedded file name-tree - NameTree *jsNameTree; // Java Script name-tree - GooString *baseURI; // base URI for URI-type links - Object metadata; // metadata stream - Object structTreeRoot; // structure tree root dictionary - Object outline; // outline dictionary - Object acroForm; // AcroForm dictionary - Object viewerPreferences; // ViewerPreference dictionary - OCGs *optContent; // Optional Content groups - GBool ok; // true if catalog is valid - PageLabelInfo *pageLabelInfo; // info about page labels - PageMode pageMode; // page mode - PageLayout pageLayout; // page layout - - GBool cachePageTree(int page); // Cache first <page> pages. - Object *findDestInTree(Object *tree, GooString *name, Object *obj); - - Object *getNames(); - NameTree *getDestNameTree(); - NameTree *getEmbeddedFileNameTree(); - NameTree *getJSNameTree(); - -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CharCodeToUnicode.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/CharCodeToUnicode.cc deleted file mode 100644 index 3cfa4020b50..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CharCodeToUnicode.cc +++ /dev/null @@ -1,628 +0,0 @@ -//======================================================================== -// -// CharCodeToUnicode.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006, 2008-2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2007 Koji Otani <sho@bbr.jp> -// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> -// Copyright (C) 2008 Vasile Gaburici <gaburici@cs.umd.edu> -// Copyright (C) 2010 William Bader <williambader@hotmail.com> -// Copyright (C) 2010 Jakub Wilk <ubanus@users.sf.net> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdio.h> -#include <string.h> -#include "goo/gmem.h" -#include "goo/gfile.h" -#include "goo/GooLikely.h" -#include "goo/GooString.h" -#include "Error.h" -#include "GlobalParams.h" -#include "PSTokenizer.h" -#include "CharCodeToUnicode.h" - -//------------------------------------------------------------------------ - -struct CharCodeToUnicodeString { - CharCode c; - Unicode *u; - int len; -}; - -//------------------------------------------------------------------------ - -static int getCharFromString(void *data) { - char *p; - int c; - - p = *(char **)data; - if (*p) { - c = *p++; - *(char **)data = p; - } else { - c = EOF; - } - return c; -} - -static int getCharFromFile(void *data) { - return fgetc((FILE *)data); -} - -//------------------------------------------------------------------------ - -CharCodeToUnicode *CharCodeToUnicode::parseCIDToUnicode(GooString *fileName, - GooString *collection) { - FILE *f; - Unicode *mapA; - CharCode size, mapLenA; - char buf[64]; - Unicode u; - CharCodeToUnicode *ctu; - - if (!(f = fopen(fileName->getCString(), "r"))) { - error(-1, "Couldn't open cidToUnicode file '%s'", - fileName->getCString()); - return NULL; - } - - size = 32768; - mapA = (Unicode *)gmallocn(size, sizeof(Unicode)); - mapLenA = 0; - - while (getLine(buf, sizeof(buf), f)) { - if (mapLenA == size) { - size *= 2; - mapA = (Unicode *)greallocn(mapA, size, sizeof(Unicode)); - } - if (sscanf(buf, "%x", &u) == 1) { - mapA[mapLenA] = u; - } else { - error(-1, "Bad line (%d) in cidToUnicode file '%s'", - (int)(mapLenA + 1), fileName->getCString()); - mapA[mapLenA] = 0; - } - ++mapLenA; - } - fclose(f); - - ctu = new CharCodeToUnicode(collection->copy(), mapA, mapLenA, gTrue, - NULL, 0, 0); - gfree(mapA); - return ctu; -} - -CharCodeToUnicode *CharCodeToUnicode::parseUnicodeToUnicode( - GooString *fileName) { - FILE *f; - Unicode *mapA; - CharCodeToUnicodeString *sMapA; - CharCode size, oldSize, len, sMapSizeA, sMapLenA; - char buf[256]; - char *tok; - Unicode u0; - int uBufSize = 8; - Unicode *uBuf = (Unicode *)gmallocn(uBufSize, sizeof(Unicode)); - CharCodeToUnicode *ctu; - int line, n, i; - char *tokptr; - - if (!(f = fopen(fileName->getCString(), "r"))) { - gfree(uBuf); - error(-1, "Couldn't open unicodeToUnicode file '%s'", - fileName->getCString()); - return NULL; - } - - size = 4096; - mapA = (Unicode *)gmallocn(size, sizeof(Unicode)); - memset(mapA, 0, size * sizeof(Unicode)); - len = 0; - sMapA = NULL; - sMapSizeA = sMapLenA = 0; - - line = 0; - while (getLine(buf, sizeof(buf), f)) { - ++line; - if (!(tok = strtok_r(buf, " \t\r\n", &tokptr)) || - sscanf(tok, "%x", &u0) != 1) { - error(-1, "Bad line (%d) in unicodeToUnicode file '%s'", - line, fileName->getCString()); - continue; - } - n = 0; - while ((tok = strtok_r(NULL, " \t\r\n", &tokptr))) { - if (n >= uBufSize) - { - uBufSize += 8; - uBuf = (Unicode *)greallocn(uBuf, uBufSize, sizeof(Unicode)); - } - if (sscanf(tok, "%x", &uBuf[n]) != 1) { - error(-1, "Bad line (%d) in unicodeToUnicode file '%s'", - line, fileName->getCString()); - break; - } - ++n; - } - if (n < 1) { - error(-1, "Bad line (%d) in unicodeToUnicode file '%s'", - line, fileName->getCString()); - continue; - } - if (u0 >= size) { - oldSize = size; - while (u0 >= size) { - size *= 2; - } - mapA = (Unicode *)greallocn(mapA, size, sizeof(Unicode)); - memset(mapA + oldSize, 0, (size - oldSize) * sizeof(Unicode)); - } - if (n == 1) { - mapA[u0] = uBuf[0]; - } else { - mapA[u0] = 0; - if (sMapLenA == sMapSizeA) { - sMapSizeA += 16; - sMapA = (CharCodeToUnicodeString *) - greallocn(sMapA, sMapSizeA, sizeof(CharCodeToUnicodeString)); - } - sMapA[sMapLenA].c = u0; - sMapA[sMapLenA].u = (Unicode*)gmallocn(n, sizeof(Unicode)); - for (i = 0; i < n; ++i) { - sMapA[sMapLenA].u[i] = uBuf[i]; - } - sMapA[sMapLenA].len = n; - ++sMapLenA; - } - if (u0 >= len) { - len = u0 + 1; - } - } - fclose(f); - - ctu = new CharCodeToUnicode(fileName->copy(), mapA, len, gTrue, - sMapA, sMapLenA, sMapSizeA); - gfree(mapA); - gfree(uBuf); - return ctu; -} - -CharCodeToUnicode *CharCodeToUnicode::make8BitToUnicode(Unicode *toUnicode) { - return new CharCodeToUnicode(NULL, toUnicode, 256, gTrue, NULL, 0, 0); -} - -CharCodeToUnicode *CharCodeToUnicode::parseCMap(GooString *buf, int nBits) { - CharCodeToUnicode *ctu; - char *p; - - ctu = new CharCodeToUnicode(NULL); - p = buf->getCString(); - ctu->parseCMap1(&getCharFromString, &p, nBits); - return ctu; -} - -CharCodeToUnicode *CharCodeToUnicode::parseCMapFromFile(GooString *fileName, - int nBits) { - CharCodeToUnicode *ctu; - FILE *f; - - ctu = new CharCodeToUnicode(NULL); - if ((f = globalParams->findToUnicodeFile(fileName))) { - ctu->parseCMap1(&getCharFromFile, f, nBits); - fclose(f); - } else { - error(-1, "Couldn't find ToUnicode CMap file for '%s'", - fileName->getCString()); - } - return ctu; -} - -void CharCodeToUnicode::mergeCMap(GooString *buf, int nBits) { - char *p; - - p = buf->getCString(); - parseCMap1(&getCharFromString, &p, nBits); -} - -void CharCodeToUnicode::parseCMap1(int (*getCharFunc)(void *), void *data, - int nBits) { - PSTokenizer *pst; - char tok1[256], tok2[256], tok3[256]; - int nDigits, n1, n2, n3; - CharCode i; - CharCode code1, code2; - GooString *name; - FILE *f; - - nDigits = nBits / 4; - pst = new PSTokenizer(getCharFunc, data); - pst->getToken(tok1, sizeof(tok1), &n1); - while (pst->getToken(tok2, sizeof(tok2), &n2)) { - if (!strcmp(tok2, "usecmap")) { - if (tok1[0] == '/') { - name = new GooString(tok1 + 1); - if ((f = globalParams->findToUnicodeFile(name))) { - parseCMap1(&getCharFromFile, f, nBits); - fclose(f); - } else { - error(-1, "Couldn't find ToUnicode CMap file for '%s'", - name->getCString()); - } - delete name; - } - pst->getToken(tok1, sizeof(tok1), &n1); - } else if (!strcmp(tok2, "beginbfchar")) { - while (pst->getToken(tok1, sizeof(tok1), &n1)) { - if (!strcmp(tok1, "endbfchar")) { - break; - } - if (!pst->getToken(tok2, sizeof(tok2), &n2) || - !strcmp(tok2, "endbfchar")) { - error(-1, "Illegal entry in bfchar block in ToUnicode CMap"); - break; - } - if (!(n1 == 2 + nDigits && tok1[0] == '<' && tok1[n1 - 1] == '>' && - tok2[0] == '<' && tok2[n2 - 1] == '>')) { - if (!(n1 == 4 + nDigits && tok1[0] == '<' && tok1[n1 - 1] == '>' && tok1[1] == '0' && tok1[2] == '0' && - tok2[0] == '<' && tok2[n2 - 1] == '>')) { - error(-1, "Illegal entry in bfchar block in ToUnicode CMap"); - continue; - } - } - tok1[n1 - 1] = tok2[n2 - 1] = '\0'; - if (sscanf(tok1 + 1, "%x", &code1) != 1) { - error(-1, "Illegal entry in bfchar block in ToUnicode CMap"); - continue; - } - addMapping(code1, tok2 + 1, n2 - 2, 0); - } - pst->getToken(tok1, sizeof(tok1), &n1); - } else if (!strcmp(tok2, "beginbfrange")) { - while (pst->getToken(tok1, sizeof(tok1), &n1)) { - if (!strcmp(tok1, "endbfrange")) { - break; - } - if (!pst->getToken(tok2, sizeof(tok2), &n2) || - !strcmp(tok2, "endbfrange") || - !pst->getToken(tok3, sizeof(tok3), &n3) || - !strcmp(tok3, "endbfrange")) { - error(-1, "Illegal entry in bfrange block in ToUnicode CMap"); - break; - } - if (!(((n1 == 2 + nDigits && tok1[0] == '<' && tok1[n1 - 1] == '>') || - (n1 == 4 + nDigits && tok1[0] == '<' && tok1[n1 - 1] == '>' && tok1[1] == '0' && tok1[2] == '0')) && - ((n2 == 2 + nDigits && tok2[0] == '<' && tok2[n2 - 1] == '>') || - (n2 == 4 + nDigits && tok2[0] == '<' && tok2[n2 - 1] == '>' && tok1[1] == '0' && tok1[2] == '0')))) { - error(-1, "Illegal entry in bfrange block in ToUnicode CMap"); - continue; - } - tok1[n1 - 1] = tok2[n2 - 1] = '\0'; - if (sscanf(tok1 + 1, "%x", &code1) != 1 || - sscanf(tok2 + 1, "%x", &code2) != 1) { - error(-1, "Illegal entry in bfrange block in ToUnicode CMap"); - continue; - } - if (!strcmp(tok3, "[")) { - i = 0; - while (pst->getToken(tok1, sizeof(tok1), &n1) && - code1 + i <= code2) { - if (!strcmp(tok1, "]")) { - break; - } - if (tok1[0] == '<' && tok1[n1 - 1] == '>') { - tok1[n1 - 1] = '\0'; - addMapping(code1 + i, tok1 + 1, n1 - 2, 0); - } else { - error(-1, "Illegal entry in bfrange block in ToUnicode CMap"); - } - ++i; - } - } else if (tok3[0] == '<' && tok3[n3 - 1] == '>') { - tok3[n3 - 1] = '\0'; - for (i = 0; code1 <= code2; ++code1, ++i) { - addMapping(code1, tok3 + 1, n3 - 2, i); - } - - } else { - error(-1, "Illegal entry in bfrange block in ToUnicode CMap"); - } - } - pst->getToken(tok1, sizeof(tok1), &n1); - } else { - strcpy(tok1, tok2); - } - } - delete pst; -} - -void CharCodeToUnicode::addMapping(CharCode code, char *uStr, int n, - int offset) { - CharCode oldLen, i; - Unicode u; - char uHex[5]; - int j; - - if (code >= mapLen) { - oldLen = mapLen; - mapLen = (code + 256) & ~255; - if (unlikely(code >= mapLen)) { - error(-1, "Illegal code value in CharCodeToUnicode::addMapping"); - return; - } else { - map = (Unicode *)greallocn(map, mapLen, sizeof(Unicode)); - for (i = oldLen; i < mapLen; ++i) { - map[i] = 0; - } - } - } - if (n <= 4) { - if (sscanf(uStr, "%x", &u) != 1) { - error(-1, "Illegal entry in ToUnicode CMap"); - return; - } - map[code] = u + offset; - } else { - if (sMapLen >= sMapSize) { - sMapSize = sMapSize + 16; - sMap = (CharCodeToUnicodeString *) - greallocn(sMap, sMapSize, sizeof(CharCodeToUnicodeString)); - } - map[code] = 0; - sMap[sMapLen].c = code; - sMap[sMapLen].len = n / 4; - sMap[sMapLen].u = (Unicode*)gmallocn(sMap[sMapLen].len, sizeof(Unicode)); - for (j = 0; j < sMap[sMapLen].len; ++j) { - strncpy(uHex, uStr + j*4, 4); - uHex[4] = '\0'; - if (sscanf(uHex, "%x", &sMap[sMapLen].u[j]) != 1) { - error(-1, "Illegal entry in ToUnicode CMap"); - } - } - sMap[sMapLen].u[sMap[sMapLen].len - 1] += offset; - ++sMapLen; - } -} - -CharCodeToUnicode::CharCodeToUnicode(GooString *tagA) { - CharCode i; - - tag = tagA; - mapLen = 256; - map = (Unicode *)gmallocn(mapLen, sizeof(Unicode)); - for (i = 0; i < mapLen; ++i) { - map[i] = 0; - } - sMap = NULL; - sMapLen = sMapSize = 0; - refCnt = 1; -#if MULTITHREADED - gInitMutex(&mutex); -#endif -} - -CharCodeToUnicode::CharCodeToUnicode(GooString *tagA, Unicode *mapA, - CharCode mapLenA, GBool copyMap, - CharCodeToUnicodeString *sMapA, - int sMapLenA, int sMapSizeA) { - tag = tagA; - mapLen = mapLenA; - if (copyMap) { - map = (Unicode *)gmallocn(mapLen, sizeof(Unicode)); - memcpy(map, mapA, mapLen * sizeof(Unicode)); - } else { - map = mapA; - } - sMap = sMapA; - sMapLen = sMapLenA; - sMapSize = sMapSizeA; - refCnt = 1; -#if MULTITHREADED - gInitMutex(&mutex); -#endif -} - -CharCodeToUnicode::~CharCodeToUnicode() { - if (tag) { - delete tag; - } - gfree(map); - if (sMap) { - for (int i = 0; i < sMapLen; ++i) gfree(sMap[i].u); - gfree(sMap); - } -#if MULTITHREADED - gDestroyMutex(&mutex); -#endif -} - -void CharCodeToUnicode::incRefCnt() { -#if MULTITHREADED - gLockMutex(&mutex); -#endif - ++refCnt; -#if MULTITHREADED - gUnlockMutex(&mutex); -#endif -} - -void CharCodeToUnicode::decRefCnt() { - GBool done; - -#if MULTITHREADED - gLockMutex(&mutex); -#endif - done = --refCnt == 0; -#if MULTITHREADED - gUnlockMutex(&mutex); -#endif - if (done) { - delete this; - } -} - -GBool CharCodeToUnicode::match(GooString *tagA) { - return tag && !tag->cmp(tagA); -} - -void CharCodeToUnicode::setMapping(CharCode c, Unicode *u, int len) { - int i, j; - - if (len == 1) { - map[c] = u[0]; - } else { - for (i = 0; i < sMapLen; ++i) { - if (sMap[i].c == c) { - gfree(sMap[i].u); - break; - } - } - if (i == sMapLen) { - if (sMapLen == sMapSize) { - sMapSize += 8; - sMap = (CharCodeToUnicodeString *) - greallocn(sMap, sMapSize, sizeof(CharCodeToUnicodeString)); - } - ++sMapLen; - } - map[c] = 0; - sMap[i].c = c; - sMap[i].len = len; - sMap[i].u = (Unicode*)gmallocn(len, sizeof(Unicode)); - for (j = 0; j < len; ++j) { - sMap[i].u[j] = u[j]; - } - } -} - -int CharCodeToUnicode::mapToUnicode(CharCode c, Unicode **u) { - int i; - - if (c >= mapLen) { - return 0; - } - if (map[c]) { - *u = &map[c]; - return 1; - } - for (i = sMapLen - 1; i >= 0; --i) { // in reverse so CMap takes precedence - if (sMap[i].c == c) { - *u = sMap[i].u; - return sMap[i].len; - } - } - return 0; -} - -int CharCodeToUnicode::mapToCharCode(Unicode* u, CharCode *c, int usize) { - //look for charcode in map - if (usize == 1) { - for (CharCode i=0; i<mapLen; i++) { - if (map[i] == *u) { - *c = i; - return 1; - } - } - *c = 'x'; - } else { - int i, j; - //for each entry in the sMap - for (i=0; i<sMapLen; i++) { - //if the entry's unicode length isn't the same are usize, the strings - // are obviously differents - if (sMap[i].len != usize) continue; - //compare the string char by char - for (j=0; j<sMap[i].len; j++) { - if (sMap[i].u[j] != u[j]) { - continue; - } - } - - //we have the same strings - if (j==sMap[i].len) { - *c = sMap[i].c; - return 1; - } - } - } - return 0; -} - -//------------------------------------------------------------------------ - -CharCodeToUnicodeCache::CharCodeToUnicodeCache(int sizeA) { - int i; - - size = sizeA; - cache = (CharCodeToUnicode **)gmallocn(size, sizeof(CharCodeToUnicode *)); - for (i = 0; i < size; ++i) { - cache[i] = NULL; - } -} - -CharCodeToUnicodeCache::~CharCodeToUnicodeCache() { - int i; - - for (i = 0; i < size; ++i) { - if (cache[i]) { - cache[i]->decRefCnt(); - } - } - gfree(cache); -} - -CharCodeToUnicode *CharCodeToUnicodeCache::getCharCodeToUnicode(GooString *tag) { - CharCodeToUnicode *ctu; - int i, j; - - if (cache[0] && cache[0]->match(tag)) { - cache[0]->incRefCnt(); - return cache[0]; - } - for (i = 1; i < size; ++i) { - if (cache[i] && cache[i]->match(tag)) { - ctu = cache[i]; - for (j = i; j >= 1; --j) { - cache[j] = cache[j - 1]; - } - cache[0] = ctu; - ctu->incRefCnt(); - return ctu; - } - } - return NULL; -} - -void CharCodeToUnicodeCache::add(CharCodeToUnicode *ctu) { - int i; - - if (cache[size - 1]) { - cache[size - 1]->decRefCnt(); - } - for (i = size - 1; i >= 1; --i) { - cache[i] = cache[i - 1]; - } - cache[0] = ctu; - ctu->incRefCnt(); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CharCodeToUnicode.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/CharCodeToUnicode.h deleted file mode 100644 index 3fdbf0f7216..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CharCodeToUnicode.h +++ /dev/null @@ -1,138 +0,0 @@ -//======================================================================== -// -// CharCodeToUnicode.h -// -// Mapping from character codes to Unicode. -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2007 Koji Otani <sho@bbr.jp> -// Copyright (C) 2008, 2011 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef CHARCODETOUNICODE_H -#define CHARCODETOUNICODE_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "poppler-config.h" -#include "CharTypes.h" -#include "goo/gtypes.h" - -#if MULTITHREADED -#include "goo/GooMutex.h" -#endif - -struct CharCodeToUnicodeString; -class GooString; - -//------------------------------------------------------------------------ - -class CharCodeToUnicode { -friend class UnicodeToCharCode; -public: - - // Read the CID-to-Unicode mapping for <collection> from the file - // specified by <fileName>. Sets the initial reference count to 1. - // Returns NULL on failure. - static CharCodeToUnicode *parseCIDToUnicode(GooString *fileName, - GooString *collection); - - // Create a Unicode-to-Unicode mapping from the file specified by - // <fileName>. Sets the initial reference count to 1. Returns NULL - // on failure. - static CharCodeToUnicode *parseUnicodeToUnicode(GooString *fileName); - - // Create the CharCode-to-Unicode mapping for an 8-bit font. - // <toUnicode> is an array of 256 Unicode indexes. Sets the initial - // reference count to 1. - static CharCodeToUnicode *make8BitToUnicode(Unicode *toUnicode); - - // Parse a ToUnicode CMap for an 8- or 16-bit font. - static CharCodeToUnicode *parseCMap(GooString *buf, int nBits); - static CharCodeToUnicode *parseCMapFromFile(GooString *fileName, int nBits); - - // Parse a ToUnicode CMap for an 8- or 16-bit font, merging it into - // <this>. - void mergeCMap(GooString *buf, int nBits); - - ~CharCodeToUnicode(); - - void incRefCnt(); - void decRefCnt(); - - // Return true if this mapping matches the specified <tagA>. - GBool match(GooString *tagA); - - // Set the mapping for <c>. - void setMapping(CharCode c, Unicode *u, int len); - - // Map a CharCode to Unicode. - int mapToUnicode(CharCode c, Unicode **u); - - int mapToCharCode(Unicode* u, CharCode *c, int usize); - - // Return the mapping's length, i.e., one more than the max char - // code supported by the mapping. - CharCode getLength() { return mapLen; } - -private: - - void parseCMap1(int (*getCharFunc)(void *), void *data, int nBits); - void addMapping(CharCode code, char *uStr, int n, int offset); - CharCodeToUnicode(GooString *tagA); - CharCodeToUnicode(GooString *tagA, Unicode *mapA, - CharCode mapLenA, GBool copyMap, - CharCodeToUnicodeString *sMapA, - int sMapLenA, int sMapSizeA); - - GooString *tag; - Unicode *map; - CharCode mapLen; - CharCodeToUnicodeString *sMap; - int sMapLen, sMapSize; - int refCnt; -#if MULTITHREADED - GooMutex mutex; -#endif -}; - -//------------------------------------------------------------------------ - -class CharCodeToUnicodeCache { -public: - - CharCodeToUnicodeCache(int sizeA); - ~CharCodeToUnicodeCache(); - - // Get the CharCodeToUnicode object for <tag>. Increments its - // reference count; there will be one reference for the cache plus - // one for the caller of this function. Returns NULL on failure. - CharCodeToUnicode *getCharCodeToUnicode(GooString *tag); - - // Insert <ctu> into the cache, in the most-recently-used position. - void add(CharCodeToUnicode *ctu); - -private: - - CharCodeToUnicode **cache; - int size; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CharTypes.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/CharTypes.h deleted file mode 100644 index d0df630d0c9..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CharTypes.h +++ /dev/null @@ -1,24 +0,0 @@ -//======================================================================== -// -// CharTypes.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef CHARTYPES_H -#define CHARTYPES_H - -// Unicode character. -typedef unsigned int Unicode; - -// Character ID for CID character collections. -typedef unsigned int CID; - -// This is large enough to hold any of the following: -// - 8-bit char code -// - 16-bit CID -// - Unicode -typedef unsigned int CharCode; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CompactFontTables.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/CompactFontTables.h deleted file mode 100644 index cfbfdaf5752..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CompactFontTables.h +++ /dev/null @@ -1,480 +0,0 @@ -//======================================================================== -// -// CompactFontTables.h -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2011 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef COMPACTFONTINFO_H -#define COMPACTFONTINFO_H - -#include "goo/gtypes.h" - -static char *type1CStdStrings[391] = { - ".notdef", - "space", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quoteright", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "quoteleft", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "bar", - "braceright", - "asciitilde", - "exclamdown", - "cent", - "sterling", - "fraction", - "yen", - "florin", - "section", - "currency", - "quotesingle", - "quotedblleft", - "guillemotleft", - "guilsinglleft", - "guilsinglright", - "fi", - "fl", - "endash", - "dagger", - "daggerdbl", - "periodcentered", - "paragraph", - "bullet", - "quotesinglbase", - "quotedblbase", - "quotedblright", - "guillemotright", - "ellipsis", - "perthousand", - "questiondown", - "grave", - "acute", - "circumflex", - "tilde", - "macron", - "breve", - "dotaccent", - "dieresis", - "ring", - "cedilla", - "hungarumlaut", - "ogonek", - "caron", - "emdash", - "AE", - "ordfeminine", - "Lslash", - "Oslash", - "OE", - "ordmasculine", - "ae", - "dotlessi", - "lslash", - "oslash", - "oe", - "germandbls", - "onesuperior", - "logicalnot", - "mu", - "trademark", - "Eth", - "onehalf", - "plusminus", - "Thorn", - "onequarter", - "divide", - "brokenbar", - "degree", - "thorn", - "threequarters", - "twosuperior", - "registered", - "minus", - "eth", - "multiply", - "threesuperior", - "copyright", - "Aacute", - "Acircumflex", - "Adieresis", - "Agrave", - "Aring", - "Atilde", - "Ccedilla", - "Eacute", - "Ecircumflex", - "Edieresis", - "Egrave", - "Iacute", - "Icircumflex", - "Idieresis", - "Igrave", - "Ntilde", - "Oacute", - "Ocircumflex", - "Odieresis", - "Ograve", - "Otilde", - "Scaron", - "Uacute", - "Ucircumflex", - "Udieresis", - "Ugrave", - "Yacute", - "Ydieresis", - "Zcaron", - "aacute", - "acircumflex", - "adieresis", - "agrave", - "aring", - "atilde", - "ccedilla", - "eacute", - "ecircumflex", - "edieresis", - "egrave", - "iacute", - "icircumflex", - "idieresis", - "igrave", - "ntilde", - "oacute", - "ocircumflex", - "odieresis", - "ograve", - "otilde", - "scaron", - "uacute", - "ucircumflex", - "udieresis", - "ugrave", - "yacute", - "ydieresis", - "zcaron", - "exclamsmall", - "Hungarumlautsmall", - "dollaroldstyle", - "dollarsuperior", - "ampersandsmall", - "Acutesmall", - "parenleftsuperior", - "parenrightsuperior", - "twodotenleader", - "onedotenleader", - "zerooldstyle", - "oneoldstyle", - "twooldstyle", - "threeoldstyle", - "fouroldstyle", - "fiveoldstyle", - "sixoldstyle", - "sevenoldstyle", - "eightoldstyle", - "nineoldstyle", - "commasuperior", - "threequartersemdash", - "periodsuperior", - "questionsmall", - "asuperior", - "bsuperior", - "centsuperior", - "dsuperior", - "esuperior", - "isuperior", - "lsuperior", - "msuperior", - "nsuperior", - "osuperior", - "rsuperior", - "ssuperior", - "tsuperior", - "ff", - "ffi", - "ffl", - "parenleftinferior", - "parenrightinferior", - "Circumflexsmall", - "hyphensuperior", - "Gravesmall", - "Asmall", - "Bsmall", - "Csmall", - "Dsmall", - "Esmall", - "Fsmall", - "Gsmall", - "Hsmall", - "Ismall", - "Jsmall", - "Ksmall", - "Lsmall", - "Msmall", - "Nsmall", - "Osmall", - "Psmall", - "Qsmall", - "Rsmall", - "Ssmall", - "Tsmall", - "Usmall", - "Vsmall", - "Wsmall", - "Xsmall", - "Ysmall", - "Zsmall", - "colonmonetary", - "onefitted", - "rupiah", - "Tildesmall", - "exclamdownsmall", - "centoldstyle", - "Lslashsmall", - "Scaronsmall", - "Zcaronsmall", - "Dieresissmall", - "Brevesmall", - "Caronsmall", - "Dotaccentsmall", - "Macronsmall", - "figuredash", - "hypheninferior", - "Ogoneksmall", - "Ringsmall", - "Cedillasmall", - "questiondownsmall", - "oneeighth", - "threeeighths", - "fiveeighths", - "seveneighths", - "onethird", - "twothirds", - "zerosuperior", - "foursuperior", - "fivesuperior", - "sixsuperior", - "sevensuperior", - "eightsuperior", - "ninesuperior", - "zeroinferior", - "oneinferior", - "twoinferior", - "threeinferior", - "fourinferior", - "fiveinferior", - "sixinferior", - "seveninferior", - "eightinferior", - "nineinferior", - "centinferior", - "dollarinferior", - "periodinferior", - "commainferior", - "Agravesmall", - "Aacutesmall", - "Acircumflexsmall", - "Atildesmall", - "Adieresissmall", - "Aringsmall", - "AEsmall", - "Ccedillasmall", - "Egravesmall", - "Eacutesmall", - "Ecircumflexsmall", - "Edieresissmall", - "Igravesmall", - "Iacutesmall", - "Icircumflexsmall", - "Idieresissmall", - "Ethsmall", - "Ntildesmall", - "Ogravesmall", - "Oacutesmall", - "Ocircumflexsmall", - "Otildesmall", - "Odieresissmall", - "OEsmall", - "Oslashsmall", - "Ugravesmall", - "Uacutesmall", - "Ucircumflexsmall", - "Udieresissmall", - "Yacutesmall", - "Thornsmall", - "Ydieresissmall", - "001.000", - "001.001", - "001.002", - "001.003", - "Black", - "Bold", - "Book", - "Light", - "Medium", - "Regular", - "Roman", - "Semibold" -}; - -static Gushort type1CISOAdobeCharset[229] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228 -}; - -static const Gushort type1CExpertCharset[166] = { - 0, 1, 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 13, 14, 15, 99, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 27, 28, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 109, 110, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 158, 155, 163, 319, 320, 321, 322, 323, 324, 325, - 326, 150, 164, 169, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378 -}; - -static Gushort type1CExpertSubsetCharset[87] = { - 0, 1, 231, 232, 235, 236, 237, 238, 13, 14, - 15, 99, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 27, 28, 249, 250, 251, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 109, 110, 267, 268, 269, 270, 272, 300, 301, - 302, 305, 314, 315, 158, 155, 163, 320, 321, 322, - 323, 324, 325, 326, 150, 164, 169, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346 -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CurlCachedFile.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/CurlCachedFile.cc deleted file mode 100644 index 26e59e396b7..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CurlCachedFile.cc +++ /dev/null @@ -1,99 +0,0 @@ -//======================================================================== -// -// CurlCachedFile.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2009 Stefan Thomas <thomas@eload24.com> -// Copyright 2010, 2011 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#include <config.h> - -#include "CurlCachedFile.h" - -#include "goo/GooString.h" - -//------------------------------------------------------------------------ - -CurlCachedFileLoader::CurlCachedFileLoader() -{ - url = NULL; - cachedFile = NULL; - curl = NULL; -} - -CurlCachedFileLoader::~CurlCachedFileLoader() { - curl_easy_cleanup(curl); -} - -static size_t -noop_cb(char *ptr, size_t size, size_t nmemb, void *ptr2) -{ - return size*nmemb; -} - -size_t -CurlCachedFileLoader::init(GooString *urlA, CachedFile *cachedFileA) -{ - double contentLength = -1; - long code = 0; - size_t size; - - url = urlA; - cachedFile = cachedFileA; - curl = curl_easy_init(); - - curl_easy_setopt(curl, CURLOPT_URL, url->getCString()); - curl_easy_setopt(curl, CURLOPT_HEADER, 1); - curl_easy_setopt(curl, CURLOPT_NOBODY, 1); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &noop_cb); - curl_easy_perform(curl); - curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code); - if (code) { - curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &contentLength); - size = contentLength; - } else { - error(-1, "Failed to get size of '%s'.", url->getCString()); - size = -1; - } - curl_easy_reset(curl); - - return size; -} - -static -size_t load_cb(const char *ptr, size_t size, size_t nmemb, void *data) -{ - CachedFileWriter *writer = (CachedFileWriter *) data; - return (writer->write) (ptr, size*nmemb); -} - -int CurlCachedFileLoader::load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer) -{ - CURLcode r = CURLE_OK; - size_t fromByte, toByte; - for (size_t i = 0; i < ranges.size(); i++) { - - fromByte = ranges[i].offset; - toByte = fromByte + ranges[i].length - 1; - GooString *range = GooString::format("{0:ud}-{1:ud}", fromByte, toByte); - - curl_easy_setopt(curl, CURLOPT_URL, url->getCString()); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, load_cb); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, writer); - curl_easy_setopt(curl, CURLOPT_RANGE, range->getCString()); - r = curl_easy_perform(curl); - curl_easy_reset(curl); - - delete range; - - if (r != CURLE_OK) break; - } - return r; -} - -//------------------------------------------------------------------------ - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CurlCachedFile.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/CurlCachedFile.h deleted file mode 100644 index 49882aba8ac..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CurlCachedFile.h +++ /dev/null @@ -1,40 +0,0 @@ -//======================================================================== -// -// CurlCachedFile.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#ifndef CURLCACHELOADER_H -#define CURLCACHELOADER_H - -#include "poppler-config.h" -#include "CachedFile.h" - -#include <curl/curl.h> - -//------------------------------------------------------------------------ - -class CurlCachedFileLoader : public CachedFileLoader { - -public: - - CurlCachedFileLoader(); - ~CurlCachedFileLoader(); - size_t init(GooString *url, CachedFile* cachedFile); - int load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer); - -private: - - GooString *url; - CachedFile *cachedFile; - CURL *curl; - -}; - -#endif - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CurlPDFDocBuilder.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/CurlPDFDocBuilder.cc deleted file mode 100644 index 5b02b14a784..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CurlPDFDocBuilder.cc +++ /dev/null @@ -1,47 +0,0 @@ -//======================================================================== -// -// CurlPDFDocBuilder.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#include <config.h> - -#include "CurlPDFDocBuilder.h" - -#include "CachedFile.h" -#include "CurlCachedFile.h" - -//------------------------------------------------------------------------ -// CurlPDFDocBuilder -//------------------------------------------------------------------------ - -PDFDoc * -CurlPDFDocBuilder::buildPDFDoc(const GooString &uri, - GooString *ownerPassword, GooString *userPassword, void *guiDataA) -{ - Object obj; - - CachedFile *cachedFile = new CachedFile( - new CurlCachedFileLoader(), uri.copy()); - - obj.initNull(); - BaseStream *str = new CachedFileStream( - cachedFile, 0, gFalse, cachedFile->getLength(), &obj); - - return new PDFDoc(str, ownerPassword, userPassword, guiDataA); -} - -GBool CurlPDFDocBuilder::supports(const GooString &uri) -{ - if (uri.cmpN("http://", 7) == 0 || uri.cmpN("https://", 8) == 0) { - return gTrue; - } else { - return gFalse; - } -} - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/CurlPDFDocBuilder.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/CurlPDFDocBuilder.h deleted file mode 100644 index fb34862057c..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/CurlPDFDocBuilder.h +++ /dev/null @@ -1,33 +0,0 @@ -//======================================================================== -// -// CurlPDFDocBuilder.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#ifndef CURLPDFDOCBUILDER_H -#define CURLPDFDOCBUILDER_H - -#include "PDFDocBuilder.h" - -//------------------------------------------------------------------------ -// CurlPDFDocBuilder -// -// The CurlPDFDocBuilder implements a PDFDocBuilder for 'http(s)://'. -//------------------------------------------------------------------------ - -class CurlPDFDocBuilder : public PDFDocBuilder { - -public: - - PDFDoc *buildPDFDoc(const GooString &uri, GooString *ownerPassword = NULL, - GooString *userPassword = NULL, void *guiDataA = NULL); - GBool supports(const GooString &uri); - -}; - -#endif /* CURLPDFDOCBUILDER_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/DCTStream.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/DCTStream.cc deleted file mode 100644 index c0ef81df2f4..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/DCTStream.cc +++ /dev/null @@ -1,243 +0,0 @@ -//======================================================================== -// -// DCTStream.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2005 Jeff Muizelaar <jeff@infidigm.net> -// Copyright 2005-2010 Albert Astals Cid <aacid@kde.org> -// Copyright 2009 Ryszard Trojnacki <rysiek@menel.com> -// Copyright 2010 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright 2011 Daiki Ueno <ueno@unixuser.org> -// Copyright 2011 Tomas Hoger <thoger@redhat.com> -// -//======================================================================== - -#include "DCTStream.h" - -static void str_init_source(j_decompress_ptr cinfo) -{ -} - -static boolean str_fill_input_buffer(j_decompress_ptr cinfo) -{ - int c; - struct str_src_mgr * src = (struct str_src_mgr *)cinfo->src; - if (src->index == 0) { - c = 0xFF; - src->index++; - } - else if (src->index == 1) { - c = 0xD8; - src->index++; - } - else c = src->str->getChar(); - if (c != EOF) - { - src->buffer = c; - src->pub.next_input_byte = &src->buffer; - src->pub.bytes_in_buffer = 1; - return TRUE; - } - else return FALSE; -} - -static void str_skip_input_data(j_decompress_ptr cinfo, long num_bytes) -{ - struct str_src_mgr * src = (struct str_src_mgr *)cinfo->src; - if (num_bytes > 0) { - while (num_bytes > (long) src->pub.bytes_in_buffer) { - num_bytes -= (long) src->pub.bytes_in_buffer; - str_fill_input_buffer(cinfo); - } - src->pub.next_input_byte += (size_t) num_bytes; - src->pub.bytes_in_buffer -= (size_t) num_bytes; - } -} - -static void str_term_source(j_decompress_ptr cinfo) -{ -} - -DCTStream::DCTStream(Stream *strA, int colorXformA) : - FilterStream(strA) { - colorXform = colorXformA; - init(); -} - -DCTStream::~DCTStream() { - jpeg_destroy_decompress(&cinfo); - delete str; -} - -static void exitErrorHandler(jpeg_common_struct *error) { - j_decompress_ptr cinfo = (j_decompress_ptr)error; - str_error_mgr * err = (struct str_error_mgr *)cinfo->err; - longjmp(err->setjmp_buffer, 1); -} - -void DCTStream::init() -{ - jpeg_std_error(&err.pub); - err.pub.error_exit = &exitErrorHandler; - src.pub.init_source = str_init_source; - src.pub.fill_input_buffer = str_fill_input_buffer; - src.pub.skip_input_data = str_skip_input_data; - src.pub.resync_to_restart = jpeg_resync_to_restart; - src.pub.term_source = str_term_source; - src.pub.bytes_in_buffer = 0; - src.pub.next_input_byte = NULL; - src.str = str; - src.index = 0; - current = NULL; - limit = NULL; - - cinfo.err = &err.pub; - if (!setjmp(err.setjmp_buffer)) { - jpeg_create_decompress(&cinfo); - cinfo.src = (jpeg_source_mgr *)&src; - } - row_buffer = NULL; -} - -void DCTStream::reset() { - int row_stride; - - str->reset(); - - if (row_buffer) - { - jpeg_destroy_decompress(&cinfo); - init(); - } - - // JPEG data has to start with 0xFF 0xD8 - // but some pdf like the one on - // https://bugs.freedesktop.org/show_bug.cgi?id=3299 - // does have some garbage before that this seeks for - // the start marker... - bool startFound = false; - int c = 0, c2 = 0; - while (!startFound) - { - if (!c) - { - c = str->getChar(); - if (c == -1) - { - error(-1, "Could not find start of jpeg data"); - return; - } - if (c != 0xFF) c = 0; - } - else - { - c2 = str->getChar(); - if (c2 != 0xD8) - { - c = 0; - c2 = 0; - } - else startFound = true; - } - } - - if (!setjmp(err.setjmp_buffer) && jpeg_read_header(&cinfo, TRUE) != JPEG_SUSPENDED) - { - // figure out color transform - if (colorXform == -1 && !cinfo.saw_Adobe_marker) { - if (cinfo.num_components == 3) { - if (cinfo.saw_JFIF_marker) { - colorXform = 1; - } else if (cinfo.cur_comp_info[0]->component_id == 82 && - cinfo.cur_comp_info[1]->component_id == 71 && - cinfo.cur_comp_info[2]->component_id == 66) { // ASCII "RGB" - colorXform = 0; - } else { - colorXform = 1; - } - } else { - colorXform = 0; - } - } else if (cinfo.saw_Adobe_marker) { - colorXform = cinfo.Adobe_transform; - } - - switch (cinfo.num_components) { - case 3: - cinfo.jpeg_color_space = colorXform ? JCS_YCbCr : JCS_RGB; - break; - case 4: - cinfo.jpeg_color_space = colorXform ? JCS_YCCK : JCS_CMYK; - break; - } - - jpeg_start_decompress(&cinfo); - - row_stride = cinfo.output_width * cinfo.output_components; - row_buffer = cinfo.mem->alloc_sarray((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); - } -} - -// we can not go with inline since gcc -// refuses to inline because of setjmp -#define DO_GET_CHAR \ - if (current == limit) { \ - if (cinfo.output_scanline < cinfo.output_height) \ - { \ - if (!setjmp(err.setjmp_buffer)) \ - { \ - if (!jpeg_read_scanlines(&cinfo, row_buffer, 1)) c = EOF; \ - else { \ - current = &row_buffer[0][0]; \ - limit = &row_buffer[0][(cinfo.output_width - 1) * cinfo.output_components] + cinfo.output_components; \ - c = *current; \ - ++current; \ - } \ - } \ - else c = EOF; \ - } \ - else c = EOF; \ - } else { \ - c = *current; \ - ++current; \ - } \ - -int DCTStream::getChar() { - int c; - - DO_GET_CHAR - - return c; -} - -int DCTStream::getChars(int nChars, Guchar *buffer) { - int c; - for (int i = 0; i < nChars; ++i) { - DO_GET_CHAR - if (likely(c != EOF)) buffer[i] = c; - else return i; - } - return nChars; -} - -int DCTStream::lookChar() { - return *current; -} - -GooString *DCTStream::getPSFilter(int psLevel, char *indent) { - GooString *s; - - if (psLevel < 2) { - return NULL; - } - if (!(s = str->getPSFilter(psLevel, indent))) { - return NULL; - } - s->append(indent)->append("<< >> /DCTDecode filter\n"); - return s; -} - -GBool DCTStream::isBinary(GBool last) { - return str->isBinary(gTrue); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/DCTStream.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/DCTStream.h deleted file mode 100644 index ad864cadd52..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/DCTStream.h +++ /dev/null @@ -1,87 +0,0 @@ -//======================================================================== -// -// DCTStream.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2005 Jeff Muizelaar <jeff@infidigm.net> -// Copyright 2005 Martin Kretzschmar <martink@gnome.org> -// Copyright 2005-2007, 2009-2011 Albert Astals Cid <aacid@kde.org> -// Copyright 2010 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright 2011 Daiki Ueno <ueno@unixuser.org> -// -//======================================================================== - -#ifndef DCTSTREAM_H -#define DCTSTREAM_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "poppler-config.h" -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -#include <setjmp.h> -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif -#include <string.h> -#include <ctype.h> -#include "goo/gmem.h" -#include "goo/gfile.h" -#include "Error.h" -#include "Object.h" -#include "Decrypt.h" -#include "Stream.h" - -extern "C" { -#include <jpeglib.h> -} - -struct str_src_mgr { - struct jpeg_source_mgr pub; - JOCTET buffer; - Stream *str; - int index; -}; - -struct str_error_mgr { - struct jpeg_error_mgr pub; - jmp_buf setjmp_buffer; -}; - -class DCTStream: public FilterStream { -public: - - DCTStream(Stream *strA, int colorXformA); - virtual ~DCTStream(); - virtual StreamKind getKind() { return strDCT; } - virtual void reset(); - virtual int getChar(); - virtual int lookChar(); - virtual GooString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - -private: - void init(); - - virtual GBool hasGetChars() { return true; } - virtual int getChars(int nChars, Guchar *buffer); - - int colorXform; - JSAMPLE *current; - JSAMPLE *limit; - struct jpeg_decompress_struct cinfo; - struct str_error_mgr err; - struct str_src_mgr src; - JSAMPARRAY row_buffer; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/DateInfo.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/DateInfo.cc deleted file mode 100644 index 563204a1743..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/DateInfo.cc +++ /dev/null @@ -1,118 +0,0 @@ -//======================================================================== -// -// DateInfo.cc -// -// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -//======================================================================== -// -// Based on code from pdfinfo.cc -// -// Copyright 1998-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include <config.h> - -#include "DateInfo.h" - -#include <stdio.h> -#include <string.h> - -/* See PDF Reference 1.3, Section 3.8.2 for PDF Date representation */ -GBool parseDateString(const char *dateString, int *year, int *month, int *day, int *hour, int *minute, int *second, char *tz, int *tzHour, int *tzMinute) -{ - if ( dateString == NULL ) return gFalse; - if ( strlen(dateString) < 2 ) return gFalse; - - if ( dateString[0] == 'D' && dateString[1] == ':' ) - dateString += 2; - - *month = 1; - *day = 1; - *hour = 0; - *minute = 0; - *second = 0; - *tz = 0x00; - *tzHour = 0; - *tzMinute = 0; - - if ( sscanf( dateString, - "%4d%2d%2d%2d%2d%2d%c%2d%*c%2d", - year, month, day, hour, minute, second, - tz, tzHour, tzMinute ) > 0 ) { - /* Workaround for y2k bug in Distiller 3 stolen from gpdf, hoping that it won't - * be used after y2.2k */ - if ( *year < 1930 && strlen (dateString) > 14) - { - int century, years_since_1900; - if ( sscanf( dateString, - "%2d%3d%2d%2d%2d%2d%2d", - ¢ury, &years_since_1900, month, day, hour, minute, second) == 7 ) - { - *year = century * 100 + years_since_1900; - } - else - { - return gFalse; - } - } - - if (*year <= 0) return gFalse; - - return gTrue; - } - - return gFalse; -} - - -GooString *timeToDateString(time_t *timet) { - GooString *dateString; - char s[5]; - struct tm *gt; - size_t len; - time_t timep = timet ? *timet : time(NULL); - -#ifdef HAVE_GMTIME_R - struct tm t; - gt = gmtime_r (&timep, &t); -#else - gt = gmtime (&timep); -#endif - - dateString = new GooString ("D:"); - - /* Year YYYY */ - len = strftime (s, sizeof(s), "%Y", gt); - dateString->append (s, len); - - /* Month MM */ - len = strftime (s, sizeof(s), "%m", gt); - dateString->append (s, len); - - /* Day DD */ - len = strftime (s, sizeof(s), "%d", gt); - dateString->append (s, len); - - /* Hour HH */ - len = strftime (s, sizeof(s), "%H", gt); - dateString->append (s, len); - - /* Minute mm */ - len = strftime (s, sizeof(s), "%M", gt); - dateString->append (s, len); - - /* Second SS */ - len = strftime (s, sizeof(s), "%S", gt); - dateString->append (s, len); - - return dateString; -} - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/DateInfo.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/DateInfo.h deleted file mode 100644 index 116350f4134..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/DateInfo.h +++ /dev/null @@ -1,35 +0,0 @@ -//======================================================================== -// -// DateInfo.h -// -// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -//======================================================================== -// -// Based on code from pdfinfo.cc -// -// Copyright 1998-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef DATE_INFO_H -#define DATE_INFO_H - -#include "goo/gtypes.h" -#include "goo/GooString.h" -#include <time.h> - -GBool parseDateString(const char *string, int *year, int *month, int *day, int *hour, int *minute, int *second, char *tz, int *tzHour, int *tzMinute); - -/* Converts the time_t into a PDF Date format string. - * If timet is NULL, current time is used. - */ -GooString *timeToDateString(time_t *timet); - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Decrypt.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Decrypt.cc deleted file mode 100644 index 2373a66abf0..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Decrypt.cc +++ /dev/null @@ -1,811 +0,0 @@ -//======================================================================== -// -// Decrypt.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2008 Julien Rebetez <julien@fhtagn.net> -// Copyright (C) 2008, 2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009 Matthias Franz <matthias@ktug.or.kr> -// Copyright (C) 2009 David Benjamin <davidben@mit.edu> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <string.h> -#include "goo/gmem.h" -#include "Decrypt.h" -#include "Error.h" - -static void rc4InitKey(Guchar *key, int keyLen, Guchar *state); -static Guchar rc4DecryptByte(Guchar *state, Guchar *x, Guchar *y, Guchar c); -static void aesKeyExpansion(DecryptAESState *s, - Guchar *objKey, int objKeyLen); -static void aesDecryptBlock(DecryptAESState *s, Guchar *in, GBool last); - -static const Guchar passwordPad[32] = { - 0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, - 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, - 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, - 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a -}; - -//------------------------------------------------------------------------ -// Decrypt -//------------------------------------------------------------------------ - -GBool Decrypt::makeFileKey(int encVersion, int encRevision, int keyLength, - GooString *ownerKey, GooString *userKey, - int permissions, GooString *fileID, - GooString *ownerPassword, GooString *userPassword, - Guchar *fileKey, GBool encryptMetadata, - GBool *ownerPasswordOk) { - Guchar test[32], test2[32]; - GooString *userPassword2; - Guchar fState[256]; - Guchar tmpKey[16]; - Guchar fx, fy; - int len, i, j; - - // try using the supplied owner password to generate the user password - *ownerPasswordOk = gFalse; - if (ownerPassword) { - len = ownerPassword->getLength(); - if (len < 32) { - memcpy(test, ownerPassword->getCString(), len); - memcpy(test + len, passwordPad, 32 - len); - } else { - memcpy(test, ownerPassword->getCString(), 32); - } - md5(test, 32, test); - if (encRevision == 3) { - for (i = 0; i < 50; ++i) { - md5(test, keyLength, test); - } - } - if (encRevision == 2) { - rc4InitKey(test, keyLength, fState); - fx = fy = 0; - for (i = 0; i < 32; ++i) { - test2[i] = rc4DecryptByte(fState, &fx, &fy, ownerKey->getChar(i)); - } - } else { - memcpy(test2, ownerKey->getCString(), 32); - for (i = 19; i >= 0; --i) { - for (j = 0; j < keyLength; ++j) { - tmpKey[j] = test[j] ^ i; - } - rc4InitKey(tmpKey, keyLength, fState); - fx = fy = 0; - for (j = 0; j < 32; ++j) { - test2[j] = rc4DecryptByte(fState, &fx, &fy, test2[j]); - } - } - } - userPassword2 = new GooString((char *)test2, 32); - if (makeFileKey2(encVersion, encRevision, keyLength, ownerKey, userKey, - permissions, fileID, userPassword2, fileKey, - encryptMetadata)) { - *ownerPasswordOk = gTrue; - delete userPassword2; - return gTrue; - } - delete userPassword2; - } - - // try using the supplied user password - return makeFileKey2(encVersion, encRevision, keyLength, ownerKey, userKey, - permissions, fileID, userPassword, fileKey, - encryptMetadata); -} - -GBool Decrypt::makeFileKey2(int encVersion, int encRevision, int keyLength, - GooString *ownerKey, GooString *userKey, - int permissions, GooString *fileID, - GooString *userPassword, Guchar *fileKey, - GBool encryptMetadata) { - Guchar *buf; - Guchar test[32]; - Guchar fState[256]; - Guchar tmpKey[16]; - Guchar fx, fy; - int len, i, j; - GBool ok; - - // generate file key - buf = (Guchar *)gmalloc(72 + fileID->getLength()); - if (userPassword) { - len = userPassword->getLength(); - if (len < 32) { - memcpy(buf, userPassword->getCString(), len); - memcpy(buf + len, passwordPad, 32 - len); - } else { - memcpy(buf, userPassword->getCString(), 32); - } - } else { - memcpy(buf, passwordPad, 32); - } - memcpy(buf + 32, ownerKey->getCString(), 32); - buf[64] = permissions & 0xff; - buf[65] = (permissions >> 8) & 0xff; - buf[66] = (permissions >> 16) & 0xff; - buf[67] = (permissions >> 24) & 0xff; - memcpy(buf + 68, fileID->getCString(), fileID->getLength()); - len = 68 + fileID->getLength(); - if (!encryptMetadata) { - buf[len++] = 0xff; - buf[len++] = 0xff; - buf[len++] = 0xff; - buf[len++] = 0xff; - } - md5(buf, len, fileKey); - if (encRevision == 3) { - for (i = 0; i < 50; ++i) { - md5(fileKey, keyLength, fileKey); - } - } - - // test user password - if (encRevision == 2) { - rc4InitKey(fileKey, keyLength, fState); - fx = fy = 0; - for (i = 0; i < 32; ++i) { - test[i] = rc4DecryptByte(fState, &fx, &fy, userKey->getChar(i)); - } - ok = memcmp(test, passwordPad, 32) == 0; - } else if (encRevision == 3) { - memcpy(test, userKey->getCString(), 32); - for (i = 19; i >= 0; --i) { - for (j = 0; j < keyLength; ++j) { - tmpKey[j] = fileKey[j] ^ i; - } - rc4InitKey(tmpKey, keyLength, fState); - fx = fy = 0; - for (j = 0; j < 32; ++j) { - test[j] = rc4DecryptByte(fState, &fx, &fy, test[j]); - } - } - memcpy(buf, passwordPad, 32); - memcpy(buf + 32, fileID->getCString(), fileID->getLength()); - md5(buf, 32 + fileID->getLength(), buf); - ok = memcmp(test, buf, 16) == 0; - } else { - ok = gFalse; - } - - gfree(buf); - return ok; -} - -//------------------------------------------------------------------------ -// DecryptStream -//------------------------------------------------------------------------ - -DecryptStream::DecryptStream(Stream *strA, Guchar *fileKey, - CryptAlgorithm algoA, int keyLength, - int objNum, int objGen): - FilterStream(strA) -{ - int n, i; - - algo = algoA; - - // construct object key - for (i = 0; i < keyLength; ++i) { - objKey[i] = fileKey[i]; - } - objKey[keyLength] = objNum & 0xff; - objKey[keyLength + 1] = (objNum >> 8) & 0xff; - objKey[keyLength + 2] = (objNum >> 16) & 0xff; - objKey[keyLength + 3] = objGen & 0xff; - objKey[keyLength + 4] = (objGen >> 8) & 0xff; - if (algo == cryptAES) { - objKey[keyLength + 5] = 0x73; // 's' - objKey[keyLength + 6] = 0x41; // 'A' - objKey[keyLength + 7] = 0x6c; // 'l' - objKey[keyLength + 8] = 0x54; // 'T' - n = keyLength + 9; - } else { - n = keyLength + 5; - } - Decrypt::md5(objKey, n, objKey); - if ((objKeyLength = keyLength + 5) > 16) { - objKeyLength = 16; - } - - charactersRead = 0; -} - -DecryptStream::~DecryptStream() { - delete str; -} - -void DecryptStream::reset() { - int i; - - charactersRead = 0; - str->reset(); - switch (algo) { - case cryptRC4: - state.rc4.x = state.rc4.y = 0; - rc4InitKey(objKey, objKeyLength, state.rc4.state); - state.rc4.buf = EOF; - break; - case cryptAES: - aesKeyExpansion(&state.aes, objKey, objKeyLength); - for (i = 0; i < 16; ++i) { - state.aes.cbc[i] = str->getChar(); - } - state.aes.bufIdx = 16; - break; - } -} - -int DecryptStream::getPos() { - return charactersRead; -} - -int DecryptStream::getChar() { - Guchar in[16]; - int c, i; - - c = EOF; // make gcc happy - switch (algo) { - case cryptRC4: - if (state.rc4.buf == EOF) { - c = str->getChar(); - if (c != EOF) { - state.rc4.buf = rc4DecryptByte(state.rc4.state, &state.rc4.x, - &state.rc4.y, (Guchar)c); - } - } - c = state.rc4.buf; - state.rc4.buf = EOF; - break; - case cryptAES: - if (state.aes.bufIdx == 16) { - for (i = 0; i < 16; ++i) { - if ((c = str->getChar()) == EOF) { - return EOF; - } - in[i] = (Guchar)c; - } - aesDecryptBlock(&state.aes, in, str->lookChar() == EOF); - } - if (state.aes.bufIdx == 16) { - c = EOF; - } else { - c = state.aes.buf[state.aes.bufIdx++]; - } - break; - } - if (c != EOF) - charactersRead++; - return c; -} - -int DecryptStream::lookChar() { - Guchar in[16]; - int c, i; - - c = EOF; // make gcc happy - switch (algo) { - case cryptRC4: - if (state.rc4.buf == EOF) { - c = str->getChar(); - if (c != EOF) { - state.rc4.buf = rc4DecryptByte(state.rc4.state, &state.rc4.x, - &state.rc4.y, (Guchar)c); - } - } - c = state.rc4.buf; - break; - case cryptAES: - if (state.aes.bufIdx == 16) { - for (i = 0; i < 16; ++i) { - if ((c = str->getChar()) == EOF) { - return EOF; - } - in[i] = c; - } - aesDecryptBlock(&state.aes, in, str->lookChar() == EOF); - } - if (state.aes.bufIdx == 16) { - c = EOF; - } else { - c = state.aes.buf[state.aes.bufIdx]; - } - break; - } - return c; -} - -GBool DecryptStream::isBinary(GBool last) { - return str->isBinary(last); -} - -//------------------------------------------------------------------------ -// RC4-compatible decryption -//------------------------------------------------------------------------ - -static void rc4InitKey(Guchar *key, int keyLen, Guchar *state) { - Guchar index1, index2; - Guchar t; - int i; - - for (i = 0; i < 256; ++i) - state[i] = i; - - if (unlikely(keyLen == 0)) - return; - - index1 = index2 = 0; - for (i = 0; i < 256; ++i) { - index2 = (key[index1] + state[i] + index2) % 256; - t = state[i]; - state[i] = state[index2]; - state[index2] = t; - index1 = (index1 + 1) % keyLen; - } -} - -static Guchar rc4DecryptByte(Guchar *state, Guchar *x, Guchar *y, Guchar c) { - Guchar x1, y1, tx, ty; - - x1 = *x = (*x + 1) % 256; - y1 = *y = (state[*x] + *y) % 256; - tx = state[x1]; - ty = state[y1]; - state[x1] = ty; - state[y1] = tx; - return c ^ state[(tx + ty) % 256]; -} - -//------------------------------------------------------------------------ -// AES decryption -//------------------------------------------------------------------------ - -static const Guchar sbox[256] = { - 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, - 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, - 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, - 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, - 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, - 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, - 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, - 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, - 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, - 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, - 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, - 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, - 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, - 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, - 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, - 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 -}; - -static const Guchar invSbox[256] = { - 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, - 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, - 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, - 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, - 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, - 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, - 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, - 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, - 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, - 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, - 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, - 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, - 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, - 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, - 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, - 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d -}; - -static const Guint rcon[11] = { - 0x00000000, // unused - 0x01000000, - 0x02000000, - 0x04000000, - 0x08000000, - 0x10000000, - 0x20000000, - 0x40000000, - 0x80000000, - 0x1b000000, - 0x36000000 -}; - -static inline Guint subWord(Guint x) { - return (sbox[x >> 24] << 24) - | (sbox[(x >> 16) & 0xff] << 16) - | (sbox[(x >> 8) & 0xff] << 8) - | sbox[x & 0xff]; -} - -static inline Guint rotWord(Guint x) { - return ((x << 8) & 0xffffffff) | (x >> 24); -} - -static inline void invSubBytes(Guchar *state) { - int i; - - for (i = 0; i < 16; ++i) { - state[i] = invSbox[state[i]]; - } -} - -static inline void invShiftRows(Guchar *state) { - Guchar t; - - t = state[7]; - state[7] = state[6]; - state[6] = state[5]; - state[5] = state[4]; - state[4] = t; - - t = state[8]; - state[8] = state[10]; - state[10] = t; - t = state[9]; - state[9] = state[11]; - state[11] = t; - - t = state[12]; - state[12] = state[13]; - state[13] = state[14]; - state[14] = state[15]; - state[15] = t; -} - -// {09} \cdot s -static inline Guchar mul09(Guchar s) { - Guchar s2, s4, s8; - - s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1); - s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1); - s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1); - return s ^ s8; -} - -// {0b} \cdot s -static inline Guchar mul0b(Guchar s) { - Guchar s2, s4, s8; - - s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1); - s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1); - s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1); - return s ^ s2 ^ s8; -} - -// {0d} \cdot s -static inline Guchar mul0d(Guchar s) { - Guchar s2, s4, s8; - - s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1); - s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1); - s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1); - return s ^ s4 ^ s8; -} - -// {0e} \cdot s -static inline Guchar mul0e(Guchar s) { - Guchar s2, s4, s8; - - s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1); - s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1); - s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1); - return s2 ^ s4 ^ s8; -} - -static inline void invMixColumns(Guchar *state) { - int c; - Guchar s0, s1, s2, s3; - - for (c = 0; c < 4; ++c) { - s0 = state[c]; - s1 = state[4+c]; - s2 = state[8+c]; - s3 = state[12+c]; - state[c] = mul0e(s0) ^ mul0b(s1) ^ mul0d(s2) ^ mul09(s3); - state[4+c] = mul09(s0) ^ mul0e(s1) ^ mul0b(s2) ^ mul0d(s3); - state[8+c] = mul0d(s0) ^ mul09(s1) ^ mul0e(s2) ^ mul0b(s3); - state[12+c] = mul0b(s0) ^ mul0d(s1) ^ mul09(s2) ^ mul0e(s3); - } -} - -static inline void invMixColumnsW(Guint *w) { - int c; - Guchar s0, s1, s2, s3; - - for (c = 0; c < 4; ++c) { - s0 = w[c] >> 24; - s1 = w[c] >> 16; - s2 = w[c] >> 8; - s3 = w[c]; - w[c] = ((mul0e(s0) ^ mul0b(s1) ^ mul0d(s2) ^ mul09(s3)) << 24) - | ((mul09(s0) ^ mul0e(s1) ^ mul0b(s2) ^ mul0d(s3)) << 16) - | ((mul0d(s0) ^ mul09(s1) ^ mul0e(s2) ^ mul0b(s3)) << 8) - | (mul0b(s0) ^ mul0d(s1) ^ mul09(s2) ^ mul0e(s3)); - } -} - -static inline void addRoundKey(Guchar *state, Guint *w) { - int c; - - for (c = 0; c < 4; ++c) { - state[c] ^= w[c] >> 24; - state[4+c] ^= w[c] >> 16; - state[8+c] ^= w[c] >> 8; - state[12+c] ^= w[c]; - } -} - -static void aesKeyExpansion(DecryptAESState *s, - Guchar *objKey, int /*objKeyLen*/) { - Guint temp; - int i, round; - - //~ this assumes objKeyLen == 16 - - for (i = 0; i < 4; ++i) { - s->w[i] = (objKey[4*i] << 24) + (objKey[4*i+1] << 16) + - (objKey[4*i+2] << 8) + objKey[4*i+3]; - } - for (i = 4; i < 44; ++i) { - temp = s->w[i-1]; - if (!(i & 3)) { - temp = subWord(rotWord(temp)) ^ rcon[i/4]; - } - s->w[i] = s->w[i-4] ^ temp; - } - for (round = 1; round <= 9; ++round) { - invMixColumnsW(&s->w[round * 4]); - } -} - -static void aesDecryptBlock(DecryptAESState *s, Guchar *in, GBool last) { - int c, round, n, i; - - // initial state - for (c = 0; c < 4; ++c) { - s->state[c] = in[4*c]; - s->state[4+c] = in[4*c+1]; - s->state[8+c] = in[4*c+2]; - s->state[12+c] = in[4*c+3]; - } - - // round 0 - addRoundKey(s->state, &s->w[10 * 4]); - - // rounds 1-9 - for (round = 9; round >= 1; --round) { - invSubBytes(s->state); - invShiftRows(s->state); - invMixColumns(s->state); - addRoundKey(s->state, &s->w[round * 4]); - } - - // round 10 - invSubBytes(s->state); - invShiftRows(s->state); - addRoundKey(s->state, &s->w[0]); - - // CBC - for (c = 0; c < 4; ++c) { - s->buf[4*c] = s->state[c] ^ s->cbc[4*c]; - s->buf[4*c+1] = s->state[4+c] ^ s->cbc[4*c+1]; - s->buf[4*c+2] = s->state[8+c] ^ s->cbc[4*c+2]; - s->buf[4*c+3] = s->state[12+c] ^ s->cbc[4*c+3]; - } - - // save the input block for the next CBC - for (i = 0; i < 16; ++i) { - s->cbc[i] = in[i]; - } - - // remove padding - s->bufIdx = 0; - if (last) { - n = s->buf[15]; - for (i = 15; i >= n; --i) { - s->buf[i] = s->buf[i-n]; - } - s->bufIdx = n; - if (n > 16) - { - error(-1, "Reducing bufIdx from %d to 16 to not crash", n); - s->bufIdx = 16; - } - } -} - -//------------------------------------------------------------------------ -// MD5 message digest -//------------------------------------------------------------------------ - -// this works around a bug in older Sun compilers -static inline Gulong rotateLeft(Gulong x, int r) { - x &= 0xffffffff; - return ((x << r) | (x >> (32 - r))) & 0xffffffff; -} - -static inline Gulong md5Round1(Gulong a, Gulong b, Gulong c, Gulong d, - Gulong Xk, Gulong s, Gulong Ti) { - return b + rotateLeft((a + ((b & c) | (~b & d)) + Xk + Ti), s); -} - -static inline Gulong md5Round2(Gulong a, Gulong b, Gulong c, Gulong d, - Gulong Xk, Gulong s, Gulong Ti) { - return b + rotateLeft((a + ((b & d) | (c & ~d)) + Xk + Ti), s); -} - -static inline Gulong md5Round3(Gulong a, Gulong b, Gulong c, Gulong d, - Gulong Xk, Gulong s, Gulong Ti) { - return b + rotateLeft((a + (b ^ c ^ d) + Xk + Ti), s); -} - -static inline Gulong md5Round4(Gulong a, Gulong b, Gulong c, Gulong d, - Gulong Xk, Gulong s, Gulong Ti) { - return b + rotateLeft((a + (c ^ (b | ~d)) + Xk + Ti), s); -} - -void Decrypt::md5(Guchar *msg, int msgLen, Guchar *digest) { - Gulong x[16]; - Gulong a, b, c, d, aa, bb, cc, dd; - int n64; - int i, j, k; - - // compute number of 64-byte blocks - // (length + pad byte (0x80) + 8 bytes for length) - n64 = (msgLen + 1 + 8 + 63) / 64; - - // initialize a, b, c, d - a = 0x67452301; - b = 0xefcdab89; - c = 0x98badcfe; - d = 0x10325476; - - // loop through blocks - k = 0; - for (i = 0; i < n64; ++i) { - - // grab a 64-byte block - for (j = 0; j < 16 && k < msgLen - 3; ++j, k += 4) - x[j] = (((((msg[k+3] << 8) + msg[k+2]) << 8) + msg[k+1]) << 8) + msg[k]; - if (i == n64 - 1) { - if (k == msgLen - 3) - x[j] = 0x80000000 + (((msg[k+2] << 8) + msg[k+1]) << 8) + msg[k]; - else if (k == msgLen - 2) - x[j] = 0x800000 + (msg[k+1] << 8) + msg[k]; - else if (k == msgLen - 1) - x[j] = 0x8000 + msg[k]; - else - x[j] = 0x80; - ++j; - while (j < 16) - x[j++] = 0; - x[14] = msgLen << 3; - } - - // save a, b, c, d - aa = a; - bb = b; - cc = c; - dd = d; - - // round 1 - a = md5Round1(a, b, c, d, x[0], 7, 0xd76aa478); - d = md5Round1(d, a, b, c, x[1], 12, 0xe8c7b756); - c = md5Round1(c, d, a, b, x[2], 17, 0x242070db); - b = md5Round1(b, c, d, a, x[3], 22, 0xc1bdceee); - a = md5Round1(a, b, c, d, x[4], 7, 0xf57c0faf); - d = md5Round1(d, a, b, c, x[5], 12, 0x4787c62a); - c = md5Round1(c, d, a, b, x[6], 17, 0xa8304613); - b = md5Round1(b, c, d, a, x[7], 22, 0xfd469501); - a = md5Round1(a, b, c, d, x[8], 7, 0x698098d8); - d = md5Round1(d, a, b, c, x[9], 12, 0x8b44f7af); - c = md5Round1(c, d, a, b, x[10], 17, 0xffff5bb1); - b = md5Round1(b, c, d, a, x[11], 22, 0x895cd7be); - a = md5Round1(a, b, c, d, x[12], 7, 0x6b901122); - d = md5Round1(d, a, b, c, x[13], 12, 0xfd987193); - c = md5Round1(c, d, a, b, x[14], 17, 0xa679438e); - b = md5Round1(b, c, d, a, x[15], 22, 0x49b40821); - - // round 2 - a = md5Round2(a, b, c, d, x[1], 5, 0xf61e2562); - d = md5Round2(d, a, b, c, x[6], 9, 0xc040b340); - c = md5Round2(c, d, a, b, x[11], 14, 0x265e5a51); - b = md5Round2(b, c, d, a, x[0], 20, 0xe9b6c7aa); - a = md5Round2(a, b, c, d, x[5], 5, 0xd62f105d); - d = md5Round2(d, a, b, c, x[10], 9, 0x02441453); - c = md5Round2(c, d, a, b, x[15], 14, 0xd8a1e681); - b = md5Round2(b, c, d, a, x[4], 20, 0xe7d3fbc8); - a = md5Round2(a, b, c, d, x[9], 5, 0x21e1cde6); - d = md5Round2(d, a, b, c, x[14], 9, 0xc33707d6); - c = md5Round2(c, d, a, b, x[3], 14, 0xf4d50d87); - b = md5Round2(b, c, d, a, x[8], 20, 0x455a14ed); - a = md5Round2(a, b, c, d, x[13], 5, 0xa9e3e905); - d = md5Round2(d, a, b, c, x[2], 9, 0xfcefa3f8); - c = md5Round2(c, d, a, b, x[7], 14, 0x676f02d9); - b = md5Round2(b, c, d, a, x[12], 20, 0x8d2a4c8a); - - // round 3 - a = md5Round3(a, b, c, d, x[5], 4, 0xfffa3942); - d = md5Round3(d, a, b, c, x[8], 11, 0x8771f681); - c = md5Round3(c, d, a, b, x[11], 16, 0x6d9d6122); - b = md5Round3(b, c, d, a, x[14], 23, 0xfde5380c); - a = md5Round3(a, b, c, d, x[1], 4, 0xa4beea44); - d = md5Round3(d, a, b, c, x[4], 11, 0x4bdecfa9); - c = md5Round3(c, d, a, b, x[7], 16, 0xf6bb4b60); - b = md5Round3(b, c, d, a, x[10], 23, 0xbebfbc70); - a = md5Round3(a, b, c, d, x[13], 4, 0x289b7ec6); - d = md5Round3(d, a, b, c, x[0], 11, 0xeaa127fa); - c = md5Round3(c, d, a, b, x[3], 16, 0xd4ef3085); - b = md5Round3(b, c, d, a, x[6], 23, 0x04881d05); - a = md5Round3(a, b, c, d, x[9], 4, 0xd9d4d039); - d = md5Round3(d, a, b, c, x[12], 11, 0xe6db99e5); - c = md5Round3(c, d, a, b, x[15], 16, 0x1fa27cf8); - b = md5Round3(b, c, d, a, x[2], 23, 0xc4ac5665); - - // round 4 - a = md5Round4(a, b, c, d, x[0], 6, 0xf4292244); - d = md5Round4(d, a, b, c, x[7], 10, 0x432aff97); - c = md5Round4(c, d, a, b, x[14], 15, 0xab9423a7); - b = md5Round4(b, c, d, a, x[5], 21, 0xfc93a039); - a = md5Round4(a, b, c, d, x[12], 6, 0x655b59c3); - d = md5Round4(d, a, b, c, x[3], 10, 0x8f0ccc92); - c = md5Round4(c, d, a, b, x[10], 15, 0xffeff47d); - b = md5Round4(b, c, d, a, x[1], 21, 0x85845dd1); - a = md5Round4(a, b, c, d, x[8], 6, 0x6fa87e4f); - d = md5Round4(d, a, b, c, x[15], 10, 0xfe2ce6e0); - c = md5Round4(c, d, a, b, x[6], 15, 0xa3014314); - b = md5Round4(b, c, d, a, x[13], 21, 0x4e0811a1); - a = md5Round4(a, b, c, d, x[4], 6, 0xf7537e82); - d = md5Round4(d, a, b, c, x[11], 10, 0xbd3af235); - c = md5Round4(c, d, a, b, x[2], 15, 0x2ad7d2bb); - b = md5Round4(b, c, d, a, x[9], 21, 0xeb86d391); - - // increment a, b, c, d - a += aa; - b += bb; - c += cc; - d += dd; - } - - // break digest into bytes - digest[0] = (Guchar)(a & 0xff); - digest[1] = (Guchar)((a >>= 8) & 0xff); - digest[2] = (Guchar)((a >>= 8) & 0xff); - digest[3] = (Guchar)((a >>= 8) & 0xff); - digest[4] = (Guchar)(b & 0xff); - digest[5] = (Guchar)((b >>= 8) & 0xff); - digest[6] = (Guchar)((b >>= 8) & 0xff); - digest[7] = (Guchar)((b >>= 8) & 0xff); - digest[8] = (Guchar)(c & 0xff); - digest[9] = (Guchar)((c >>= 8) & 0xff); - digest[10] = (Guchar)((c >>= 8) & 0xff); - digest[11] = (Guchar)((c >>= 8) & 0xff); - digest[12] = (Guchar)(d & 0xff); - digest[13] = (Guchar)((d >>= 8) & 0xff); - digest[14] = (Guchar)((d >>= 8) & 0xff); - digest[15] = (Guchar)((d >>= 8) & 0xff); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Decrypt.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Decrypt.h deleted file mode 100644 index feb701444e2..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Decrypt.h +++ /dev/null @@ -1,111 +0,0 @@ -//======================================================================== -// -// Decrypt.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2008 Julien Rebetez <julien@fhtagn.net> -// Copyright (C) 2009 David Benjamin <davidben@mit.edu> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef DECRYPT_H -#define DECRYPT_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include "goo/GooString.h" -#include "Object.h" -#include "Stream.h" - -//------------------------------------------------------------------------ -// Decrypt -//------------------------------------------------------------------------ - -class Decrypt { -public: - static void md5(Guchar *msg, int msgLen, Guchar *digest); - - // Generate a file key. The <fileKey> buffer must have space for at - // least 16 bytes. Checks <ownerPassword> and then <userPassword> - // and returns true if either is correct. Sets <ownerPasswordOk> if - // the owner password was correct. Either or both of the passwords - // may be NULL, which is treated as an empty string. - static GBool makeFileKey(int encVersion, int encRevision, int keyLength, - GooString *ownerKey, GooString *userKey, - int permissions, GooString *fileID, - GooString *ownerPassword, GooString *userPassword, - Guchar *fileKey, GBool encryptMetadata, - GBool *ownerPasswordOk); - -private: - - static GBool makeFileKey2(int encVersion, int encRevision, int keyLength, - GooString *ownerKey, GooString *userKey, - int permissions, GooString *fileID, - GooString *userPassword, Guchar *fileKey, - GBool encryptMetadata); -}; - -//------------------------------------------------------------------------ -// DecryptStream -//------------------------------------------------------------------------ - -struct DecryptRC4State { - Guchar state[256]; - Guchar x, y; - int buf; -}; - -struct DecryptAESState { - Guint w[44]; - Guchar state[16]; - Guchar cbc[16]; - Guchar buf[16]; - int bufIdx; -}; - -class DecryptStream: public FilterStream { -public: - - DecryptStream(Stream *strA, Guchar *fileKey, - CryptAlgorithm algoA, int keyLength, - int objNum, int objGen); - virtual ~DecryptStream(); - virtual StreamKind getKind() { return strWeird; } - virtual void reset(); - virtual int getChar(); - virtual int lookChar(); - virtual int getPos(); - virtual GBool isBinary(GBool last); - virtual Stream *getUndecodedStream() { return this; } - -private: - - CryptAlgorithm algo; - int objKeyLength; - Guchar objKey[16 + 9]; - int charactersRead; // so that getPos() can be correct - - union { - DecryptRC4State rc4; - DecryptAESState aes; - } state; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Dict.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Dict.cc deleted file mode 100644 index 1428113b7ed..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Dict.cc +++ /dev/null @@ -1,238 +0,0 @@ -//======================================================================== -// -// Dict.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// Copyright (C) 2007-2008 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2008, 2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2010 PaweÅ‚ Wiejacha <pawel.wiejacha@gmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <algorithm> -#include <stddef.h> -#include <string.h> -#include "goo/gmem.h" -#include "Object.h" -#include "XRef.h" -#include "Dict.h" - -//------------------------------------------------------------------------ -// Dict -//------------------------------------------------------------------------ - -static const int SORT_LENGTH_LOWER_LIMIT = 32; - -static inline bool cmpDictEntries(const DictEntry &e1, const DictEntry &e2) -{ - return strcmp(e1.key, e2.key) < 0; -} - -static int binarySearch(const char *key, DictEntry *entries, int length) -{ - int first = 0; - int end = length - 1; - while (first <= end) { - const int middle = (first + end) / 2; - const int res = strcmp(key, entries[middle].key); - if (res == 0) { - return middle; - } else if (res < 0) { - end = middle - 1; - } else { - first = middle + 1; - } - } - return -1; -} - -Dict::Dict(XRef *xrefA) { - xref = xrefA; - entries = NULL; - size = length = 0; - ref = 1; - sorted = gFalse; -} - -Dict::Dict(Dict* dictA) { - xref = dictA->xref; - size = length = dictA->length; - ref = 1; - - sorted = dictA->sorted; - entries = (DictEntry *)gmallocn(size, sizeof(DictEntry)); - for (int i=0; i<length; i++) { - entries[i].key = strdup(dictA->entries[i].key); - dictA->entries[i].val.copy(&entries[i].val); - } -} - -Dict::~Dict() { - int i; - - for (i = 0; i < length; ++i) { - gfree(entries[i].key); - entries[i].val.free(); - } - gfree(entries); -} - -void Dict::add(char *key, Object *val) { - if (sorted) { - // We use add on very few occasions so - // virtually this will never be hit - sorted = gFalse; - } - - if (length == size) { - if (length == 0) { - size = 8; - } else { - size *= 2; - } - entries = (DictEntry *)greallocn(entries, size, sizeof(DictEntry)); - } - entries[length].key = key; - entries[length].val = *val; - ++length; -} - -inline DictEntry *Dict::find(char *key) { - if (!sorted && length >= SORT_LENGTH_LOWER_LIMIT) - { - sorted = gTrue; - std::sort(entries, entries+length, cmpDictEntries); - } - - if (sorted) { - const int pos = binarySearch(key, entries, length); - if (pos != -1) { - return &entries[pos]; - } - } else { - int i; - - for (i = length - 1; i >=0; --i) { - if (!strcmp(key, entries[i].key)) - return &entries[i]; - } - } - return NULL; -} - -GBool Dict::hasKey(char *key) { - return find(key) != NULL; -} - -void Dict::remove(char *key) { - if (sorted) { - const int pos = binarySearch(key, entries, length); - if (pos != -1) { - length -= 1; - if (pos != length) { - memmove(&entries[pos], &entries[pos + 1], (length - pos) * sizeof(DictEntry)); - } - } - } else { - int i; - bool found = false; - DictEntry tmp; - if(length == 0) return; - - for(i=0; i<length; i++) { - if (!strcmp(key, entries[i].key)) { - found = true; - break; - } - } - if(!found) return; - //replace the deleted entry with the last entry - length -= 1; - tmp = entries[length]; - if (i!=length) //don't copy the last entry if it is deleted - entries[i] = tmp; - } -} - -void Dict::set(char *key, Object *val) { - DictEntry *e; - e = find (key); - if (e) { - e->val.free(); - e->val = *val; - } else { - add (copyString(key), val); - } -} - - -GBool Dict::is(char *type) { - DictEntry *e; - - return (e = find("Type")) && e->val.isName(type); -} - -Object *Dict::lookup(char *key, Object *obj, std::set<int> *fetchOriginatorNums) { - DictEntry *e; - - return (e = find(key)) ? e->val.fetch(xref, obj, fetchOriginatorNums) : obj->initNull(); -} - -Object *Dict::lookupNF(char *key, Object *obj) { - DictEntry *e; - - return (e = find(key)) ? e->val.copy(obj) : obj->initNull(); -} - -GBool Dict::lookupInt(const char *key, const char *alt_key, int *value) -{ - Object obj1; - GBool success = gFalse; - - lookup ((char *) key, &obj1); - if (obj1.isNull () && alt_key != NULL) { - obj1.free (); - lookup ((char *) alt_key, &obj1); - } - if (obj1.isInt ()) { - *value = obj1.getInt (); - success = gTrue; - } - - obj1.free (); - - return success; -} - -char *Dict::getKey(int i) { - return entries[i].key; -} - -Object *Dict::getVal(int i, Object *obj) { - return entries[i].val.fetch(xref, obj); -} - -Object *Dict::getValNF(int i, Object *obj) { - return entries[i].val.copy(obj); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Dict.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Dict.h deleted file mode 100644 index f4ed64a5dbf..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Dict.h +++ /dev/null @@ -1,105 +0,0 @@ -//======================================================================== -// -// Dict.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// Copyright (C) 2007-2008 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2010 PaweÅ‚ Wiejacha <pawel.wiejacha@gmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef DICT_H -#define DICT_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -//------------------------------------------------------------------------ -// Dict -//------------------------------------------------------------------------ - -struct DictEntry { - char *key; - Object val; -}; - -class Dict { -public: - - // Constructor. - Dict(XRef *xrefA); - Dict(Dict* dictA); - - // Destructor. - ~Dict(); - - // Reference counting. - int incRef() { return ++ref; } - int decRef() { return --ref; } - - // Get number of entries. - int getLength() { return length; } - - // Add an entry. NB: does not copy key. - void add(char *key, Object *val); - - // Update the value of an existing entry, otherwise create it - void set(char *key, Object *val); - // Remove an entry. This invalidate indexes - void remove(char *key); - - // Check if dictionary is of specified type. - GBool is(char *type); - - // Look up an entry and return the value. Returns a null object - // if <key> is not in the dictionary. - Object *lookup(char *key, Object *obj, std::set<int> *fetchOriginatorNums = NULL); - Object *lookupNF(char *key, Object *obj); - GBool lookupInt(const char *key, const char *alt_key, int *value); - - // Iterative accessors. - char *getKey(int i); - Object *getVal(int i, Object *obj); - Object *getValNF(int i, Object *obj); - - // Set the xref pointer. This is only used in one special case: the - // trailer dictionary, which is read before the xref table is - // parsed. - void setXRef(XRef *xrefA) { xref = xrefA; } - - XRef *getXRef() { return xref; } - - GBool hasKey(char *key); - -private: - - GBool sorted; - XRef *xref; // the xref table for this PDF file - DictEntry *entries; // array of entries - int size; // size of <entries> array - int length; // number of entries in dictionary - int ref; // reference count - - DictEntry *find(char *key); -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Error.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Error.cc deleted file mode 100644 index fc2bef4371c..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Error.cc +++ /dev/null @@ -1,72 +0,0 @@ -//======================================================================== -// -// Error.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005, 2007 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2005 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdio.h> -#include <stddef.h> -#include <stdarg.h> -#include "GlobalParams.h" -#include "Error.h" - -static void defaultErrorFunction(int pos, char *msg, va_list args) -{ - if (pos >= 0) { - fprintf(stderr, "Error (%d): ", pos); - } else { - fprintf(stderr, "Error: "); - } - vfprintf(stderr, msg, args); - fprintf(stderr, "\n"); - fflush(stderr); -} - -static void (*errorFunction)(int, char *, va_list args) = defaultErrorFunction; - -void setErrorFunction(void (* f)(int, char *, va_list args)) -{ - errorFunction = f; -} - -void CDECL error(int pos, char *msg, ...) { - va_list args; - // NB: this can be called before the globalParams object is created - if (globalParams && globalParams->getErrQuiet()) { - return; - } - va_start(args, msg); - (*errorFunction)(pos, msg, args); - va_end(args); -} - -void warning(char *msg, ...) { - va_list args; - va_start(args, msg); - vprintf(msg, args); - va_end(args); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Error.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Error.h deleted file mode 100644 index 07f3d1f92ad..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Error.h +++ /dev/null @@ -1,40 +0,0 @@ -//======================================================================== -// -// Error.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005, 2007 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2005 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef ERROR_H -#define ERROR_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include <stdarg.h> -#include "poppler-config.h" - -extern void CDECL error(int pos, char *msg, ...) GCC_PRINTF_FORMAT (2, 3); -void warning(char *msg, ...) GCC_PRINTF_FORMAT (1, 2); - -void setErrorFunction(void (* f)(int , char *, va_list args)); - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/ErrorCodes.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/ErrorCodes.h deleted file mode 100644 index b28528df564..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/ErrorCodes.h +++ /dev/null @@ -1,36 +0,0 @@ -//======================================================================== -// -// ErrorCodes.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef ERRORCODES_H -#define ERRORCODES_H - -#define errNone 0 // no error - -#define errOpenFile 1 // couldn't open the PDF file - -#define errBadCatalog 2 // couldn't read the page catalog - -#define errDamaged 3 // PDF file was damaged and couldn't be - // repaired - -#define errEncrypted 4 // file was encrypted and password was - // incorrect or not supplied - -#define errHighlightFile 5 // nonexistent or invalid highlight file - -#define errBadPrinter 6 // invalid printer - -#define errPrinting 7 // error during printing - -#define errPermission 8 // PDF file doesn't allow that operation - -#define errBadPageNum 9 // invalid page number - -#define errFileIO 10 // file I/O error - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/FileSpec.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/FileSpec.cc deleted file mode 100644 index 7807864b295..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/FileSpec.cc +++ /dev/null @@ -1,268 +0,0 @@ -//======================================================================== -// -// FileSpec.cc -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2008-2009 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -//======================================================================== -// -// Most of the code from Link.cc and PSOutputDev.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include <config.h> - -#include "FileSpec.h" - -EmbFile::EmbFile(Object *efStream) -{ - m_size = -1; - m_createDate = NULL; - m_modDate = NULL; - m_checksum = NULL; - m_mimetype = NULL; - - efStream->copy(&m_objStr); - - if (efStream->isStream()) { - // dataDict corresponds to Table 3.41 in the PDF1.6 spec. - Dict *dataDict = efStream->streamGetDict(); - - // subtype is normally the mimetype - Object subtypeName; - if (dataDict->lookup("Subtype", &subtypeName)->isName()) { - m_mimetype = new GooString(subtypeName.getName()); - } - subtypeName.free(); - - // paramDict corresponds to Table 3.42 in the PDF1.6 spec - Object paramDict; - if (dataDict->lookup("Params", ¶mDict)->isDict()) { - Object paramObj; - if (paramDict.dictLookup("ModDate", ¶mObj)->isString()) - m_modDate = new GooString(paramObj.getString()); - paramObj.free(); - - if (paramDict.dictLookup("CreationDate", ¶mObj)->isString()) - m_createDate = new GooString(paramObj.getString()); - paramObj.free(); - - if (paramDict.dictLookup("Size", ¶mObj)->isInt()) - m_size = paramObj.getInt(); - paramObj.free(); - - if (paramDict.dictLookup("CheckSum", ¶mObj)->isString()) - m_checksum = new GooString(paramObj.getString()); - paramObj.free(); - } - paramDict.free(); - } -} - -EmbFile::~EmbFile() -{ - delete m_createDate; - delete m_modDate; - delete m_checksum; - delete m_mimetype; - m_objStr.free(); -} - -FileSpec::FileSpec(Object *fileSpecA) -{ - ok = gTrue; - fileName = NULL; - platformFileName = NULL; - embFile = NULL; - desc = NULL; - fileSpecA->copy(&fileSpec); - - Object obj1; - if (!getFileSpecName(fileSpecA, &obj1)) { - ok = gFalse; - obj1.free(); - error(-1, "Invalid FileSpec"); - return; - } - - fileName = obj1.getString()->copy(); - obj1.free(); - - if (fileSpec.isDict()) { - if (fileSpec.dictLookup("EF", &obj1)->isDict()) { - if (!obj1.dictLookupNF("F", &fileStream)->isRef()) { - ok = gFalse; - fileStream.free(); - error(-1, "Invalid FileSpec: Embedded file stream is not an indirect reference"); - obj1.free(); - return; - } - } - obj1.free(); - } - - if (fileSpec.dictLookup("Desc", &obj1)->isString()) - desc = obj1.getString()->copy(); - obj1.free(); -} - -FileSpec::~FileSpec() -{ - fileSpec.free(); - fileStream.free(); - delete fileName; - delete platformFileName; - delete embFile; - delete desc; -} - -EmbFile *FileSpec::getEmbeddedFile() -{ - if (embFile) - return embFile; - - Object obj1; - XRef *xref = fileSpec.getDict()->getXRef(); - embFile = new EmbFile(fileStream.fetch(xref, &obj1)); - obj1.free(); - - return embFile; -} - -GooString *FileSpec::getFileNameForPlatform() -{ - if (platformFileName) - return platformFileName; - - Object obj1; - if (getFileSpecNameForPlatform(&fileSpec, &obj1)) - platformFileName = obj1.getString()->copy(); - obj1.free(); - - return platformFileName; -} - -GBool getFileSpecName (Object *fileSpec, Object *fileName) -{ - if (fileSpec->isString()) { - fileSpec->copy(fileName); - return gTrue; - } - - if (fileSpec->isDict()) { - fileSpec->dictLookup("UF", fileName); - if (fileName->isString()) { - return gTrue; - } - fileName->free(); - fileSpec->dictLookup("F", fileName); - if (fileName->isString()) { - return gTrue; - } - fileName->free(); - fileSpec->dictLookup("DOS", fileName); - if (fileName->isString()) { - return gTrue; - } - fileName->free(); - fileSpec->dictLookup("Mac", fileName); - if (fileName->isString()) { - return gTrue; - } - fileName->free(); - fileSpec->dictLookup("Unix", fileName); - if (fileName->isString()) { - return gTrue; - } - fileName->free(); - } - return gFalse; -} - -GBool getFileSpecNameForPlatform (Object *fileSpec, Object *fileName) -{ - if (fileSpec->isString()) { - fileSpec->copy(fileName); - return gTrue; - } - - if (fileSpec->isDict()) { - if (!fileSpec->dictLookup("UF", fileName)->isString ()) { - fileName->free(); - if (!fileSpec->dictLookup("F", fileName)->isString ()) { - fileName->free(); -#ifdef _WIN32 - char *platform = "DOS"; -#else - char *platform = "Unix"; -#endif - if (!fileSpec->dictLookup(platform, fileName)->isString ()) { - fileName->free(); - error(-1, "Illegal file spec"); - return gFalse; - } - } - } - } else { - error(-1, "Illegal file spec"); - return gFalse; - } - - // system-dependent path manipulation -#ifdef _WIN32 - int i, j; - GooString *name = fileName->getString(); - // "//...." --> "\...." - // "/x/...." --> "x:\...." - // "/server/share/...." --> "\\server\share\...." - // convert escaped slashes to slashes and unescaped slashes to backslashes - i = 0; - if (name->getChar(0) == '/') { - if (name->getLength() >= 2 && name->getChar(1) == '/') { - name->del(0); - i = 0; - } else if (name->getLength() >= 2 && - ((name->getChar(1) >= 'a' && name->getChar(1) <= 'z') || - (name->getChar(1) >= 'A' && name->getChar(1) <= 'Z')) && - (name->getLength() == 2 || name->getChar(2) == '/')) { - name->setChar(0, name->getChar(1)); - name->setChar(1, ':'); - i = 2; - } else { - for (j = 2; j < name->getLength(); ++j) { - if (name->getChar(j-1) != '\\' && - name->getChar(j) == '/') { - break; - } - } - if (j < name->getLength()) { - name->setChar(0, '\\'); - name->insert(0, '\\'); - i = 2; - } - } - } - for (; i < name->getLength(); ++i) { - if (name->getChar(i) == '/') { - name->setChar(i, '\\'); - } else if (name->getChar(i) == '\\' && - i+1 < name->getLength() && - name->getChar(i+1) == '/') { - name->del(i); - } - } -#endif /* _WIN32 */ - - return gTrue; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/FileSpec.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/FileSpec.h deleted file mode 100644 index e26cdcf8b0a..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/FileSpec.h +++ /dev/null @@ -1,73 +0,0 @@ -//======================================================================== -// -// FileSpec.h -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2008 Carlos Garcia Campos <carlosgc@gnome.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef FILE_SPEC_H -#define FILE_SPEC_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -class EmbFile { -public: - EmbFile(Object *efStream); - ~EmbFile(); - - int size() { return m_size; } - GooString *modDate() { return m_modDate; } - GooString *createDate() { return m_createDate; } - GooString *checksum() { return m_checksum; } - GooString *mimeType() { return m_mimetype; } - Stream *stream() { return isOk() ? m_objStr.getStream() : NULL; } - GBool isOk() { return m_objStr.isStream(); } - -private: - int m_size; - GooString *m_createDate; - GooString *m_modDate; - GooString *m_checksum; - GooString *m_mimetype; - Object m_objStr; -}; - -class FileSpec { -public: - FileSpec(Object *fileSpec); - ~FileSpec(); - - GBool isOk() { return ok; } - - GooString *getFileName() const { return fileName; } - GooString *getFileNameForPlatform(); - GooString *getDescription() const { return desc; } - EmbFile *getEmbeddedFile(); - -private: - GBool ok; - - Object fileSpec; - - GooString *fileName; // F, UF, DOS, Mac, Unix - GooString *platformFileName; - Object fileStream; // Ref to F entry in UF - EmbFile *embFile; - GooString *desc; // Desc -}; - -GBool getFileSpecName (Object *fileSpec, Object *fileName); -GBool getFileSpecNameForPlatform (Object *fileSpec, Object *fileName); - -#endif /* FILE_SPEC_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/FlateStream.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/FlateStream.cc deleted file mode 100644 index ef477b36077..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/FlateStream.cc +++ /dev/null @@ -1,128 +0,0 @@ -//======================================================================== -// -// FlateStream.cc -// -// Copyright (C) 2005, Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2010, Albert Astals Cid <aacid@kde.org> -// -// This file is under the GPLv2 or later license -// -//======================================================================== -#include "FlateStream.h" -FlateStream::FlateStream(Stream *strA, int predictor, int columns, int colors, int bits) : - FilterStream(strA) -{ - if (predictor != 1) { - pred = new StreamPredictor(this, predictor, columns, colors, bits); - } else { - pred = NULL; - } - out_pos = 0; - memset(&d_stream, 0, sizeof(d_stream)); - inflateInit(&d_stream); -} - -FlateStream::~FlateStream() { - inflateEnd(&d_stream); - delete pred; - delete str; -} - -void FlateStream::reset() { - //FIXME: what are the semantics of reset? - //i.e. how much intialization has to happen in the constructor? - - /* reinitialize zlib */ - inflateEnd(&d_stream); - memset(&d_stream, 0, sizeof(d_stream)); - inflateInit(&d_stream); - - str->reset(); - d_stream.avail_in = 0; - status = Z_OK; - out_pos = 0; - out_buf_len = 0; -} - -int FlateStream::getRawChar() { - return doGetRawChar(); -} - -void FlateStream::getRawChars(int nChars, int *buffer) { - for (int i = 0; i < nChars; ++i) - buffer[i] = doGetRawChar(); -} - -int FlateStream::getChar() { - if (pred) - return pred->getChar(); - else - return getRawChar(); -} - -int FlateStream::lookChar() { - if (pred) - return pred->lookChar(); - - if (fill_buffer()) - return EOF; - - return out_buf[out_pos]; -} - -int FlateStream::fill_buffer() { - /* only fill the buffer if it has all been used */ - if (out_pos >= out_buf_len) { - /* check if the flatestream has been exhausted */ - if (status == Z_STREAM_END) { - return -1; - } - - /* set to the begining of out_buf */ - d_stream.avail_out = sizeof(out_buf); - d_stream.next_out = out_buf; - out_pos = 0; - - while (1) { - /* buffer is empty so we need to fill it */ - if (d_stream.avail_in == 0) { - int c; - /* read from the source stream */ - while (d_stream.avail_in < sizeof(in_buf) && (c = str->getChar()) != EOF) { - in_buf[d_stream.avail_in++] = c; - } - d_stream.next_in = in_buf; - } - - /* keep decompressing until we can't anymore */ - if (d_stream.avail_out == 0 || d_stream.avail_in == 0 || (status != Z_OK && status != Z_BUF_ERROR)) - break; - status = inflate(&d_stream, Z_SYNC_FLUSH); - } - - out_buf_len = sizeof(out_buf) - d_stream.avail_out; - if (status != Z_OK && status != Z_STREAM_END) - return -1; - if (!out_buf_len) - return -1; - } - - return 0; -} - -GooString *FlateStream::getPSFilter(int psLevel, char *indent) { - GooString *s; - - if (psLevel < 3 || pred) { - return NULL; - } - if (!(s = str->getPSFilter(psLevel, indent))) { - return NULL; - } - s->append(indent)->append("<< >> /FlateDecode filter\n"); - return s; -} - -GBool FlateStream::isBinary(GBool last) { - return str->isBinary(gTrue); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/FlateStream.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/FlateStream.h deleted file mode 100644 index dba00d0a89a..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/FlateStream.h +++ /dev/null @@ -1,77 +0,0 @@ -//======================================================================== -// -// FlateStream.h -// -// Copyright (C) 2005, Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2010, 2011, Albert Astals Cid <aacid@kde.org> -// -// This file is under the GPLv2 or later license -// -//======================================================================== - -#ifndef FLATESTREAM_H -#define FLATESTREAM_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "poppler-config.h" -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif -#include <string.h> -#include <ctype.h> -#include "goo/gmem.h" -#include "goo/gfile.h" -#include "Error.h" -#include "Object.h" -#include "Decrypt.h" -#include "Stream.h" - -extern "C" { -#include <zlib.h> -} - -class FlateStream: public FilterStream { -public: - - FlateStream(Stream *strA, int predictor, int columns, int colors, int bits); - virtual ~FlateStream(); - virtual StreamKind getKind() { return strFlate; } - virtual void reset(); - virtual int getChar(); - virtual int lookChar(); - virtual int getRawChar(); - virtual void getRawChars(int nChars, int *buffer); - virtual GooString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - -private: - inline int doGetRawChar() { - if (fill_buffer()) - return EOF; - - return out_buf[out_pos++]; - } - - int fill_buffer(void); - z_stream d_stream; - StreamPredictor *pred; - int status; - /* in_buf currently needs to be 1 or we over read from EmbedStreams */ - unsigned char in_buf[1]; - unsigned char out_buf[4096]; - int out_pos; - int out_buf_len; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/FontEncodingTables.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/FontEncodingTables.cc deleted file mode 100644 index cd8d8926542..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/FontEncodingTables.cc +++ /dev/null @@ -1,1824 +0,0 @@ -//======================================================================== -// -// FontEncodingTables.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include <config.h> -#include <stdlib.h> -#include "FontEncodingTables.h" - -char *macRomanEncoding[256] = { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "space", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quotesingle", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "grave", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "bar", - "braceright", - "asciitilde", - NULL, - "Adieresis", - "Aring", - "Ccedilla", - "Eacute", - "Ntilde", - "Odieresis", - "Udieresis", - "aacute", - "agrave", - "acircumflex", - "adieresis", - "atilde", - "aring", - "ccedilla", - "eacute", - "egrave", - "ecircumflex", - "edieresis", - "iacute", - "igrave", - "icircumflex", - "idieresis", - "ntilde", - "oacute", - "ograve", - "ocircumflex", - "odieresis", - "otilde", - "uacute", - "ugrave", - "ucircumflex", - "udieresis", - "dagger", - "degree", - "cent", - "sterling", - "section", - "bullet", - "paragraph", - "germandbls", - "registered", - "copyright", - "trademark", - "acute", - "dieresis", - "notequal", - "AE", - "Oslash", - "infinity", - "plusminus", - "lessequal", - "greaterequal", - "yen", - "mu", - "partialdiff", - "summation", - "product", - "pi", - "integral", - "ordfeminine", - "ordmasculine", - "Omega", - "ae", - "oslash", - "questiondown", - "exclamdown", - "logicalnot", - "radical", - "florin", - "approxequal", - "Delta", - "guillemotleft", - "guillemotright", - "ellipsis", - "space", - "Agrave", - "Atilde", - "Otilde", - "OE", - "oe", - "endash", - "emdash", - "quotedblleft", - "quotedblright", - "quoteleft", - "quoteright", - "divide", - "lozenge", - "ydieresis", - "Ydieresis", - "fraction", - "currency", - "guilsinglleft", - "guilsinglright", - "fi", - "fl", - "daggerdbl", - "periodcentered", - "quotesinglbase", - "quotedblbase", - "perthousand", - "Acircumflex", - "Ecircumflex", - "Aacute", - "Edieresis", - "Egrave", - "Iacute", - "Icircumflex", - "Idieresis", - "Igrave", - "Oacute", - "Ocircumflex", - "apple", - "Ograve", - "Uacute", - "Ucircumflex", - "Ugrave", - "dotlessi", - "circumflex", - "tilde", - "macron", - "breve", - "dotaccent", - "ring", - "cedilla", - "hungarumlaut", - "ogonek", - "caron" -}; - -char *macExpertEncoding[256] = { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "space", - "exclamsmall", - "Hungarumlautsmall", - "centoldstyle", - "dollaroldstyle", - "dollarsuperior", - "ampersandsmall", - "Acutesmall", - "parenleftsuperior", - "parenrightsuperior", - "twodotenleader", - "onedotenleader", - "comma", - "hyphen", - "period", - "fraction", - "zerooldstyle", - "oneoldstyle", - "twooldstyle", - "threeoldstyle", - "fouroldstyle", - "fiveoldstyle", - "sixoldstyle", - "sevenoldstyle", - "eightoldstyle", - "nineoldstyle", - "colon", - "semicolon", - NULL, - "threequartersemdash", - NULL, - "questionsmall", - NULL, - NULL, - NULL, - NULL, - "Ethsmall", - NULL, - NULL, - "onequarter", - "onehalf", - "threequarters", - "oneeighth", - "threeeighths", - "fiveeighths", - "seveneighths", - "onethird", - "twothirds", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "ff", - "fi", - "fl", - "ffi", - "ffl", - "parenleftinferior", - NULL, - "parenrightinferior", - "Circumflexsmall", - "hypheninferior", - "Gravesmall", - "Asmall", - "Bsmall", - "Csmall", - "Dsmall", - "Esmall", - "Fsmall", - "Gsmall", - "Hsmall", - "Ismall", - "Jsmall", - "Ksmall", - "Lsmall", - "Msmall", - "Nsmall", - "Osmall", - "Psmall", - "Qsmall", - "Rsmall", - "Ssmall", - "Tsmall", - "Usmall", - "Vsmall", - "Wsmall", - "Xsmall", - "Ysmall", - "Zsmall", - "colonmonetary", - "onefitted", - "rupiah", - "Tildesmall", - NULL, - NULL, - "asuperior", - "centsuperior", - NULL, - NULL, - NULL, - NULL, - "Aacutesmall", - "Agravesmall", - "Acircumflexsmall", - "Adieresissmall", - "Atildesmall", - "Aringsmall", - "Ccedillasmall", - "Eacutesmall", - "Egravesmall", - "Ecircumflexsmall", - "Edieresissmall", - "Iacutesmall", - "Igravesmall", - "Icircumflexsmall", - "Idieresissmall", - "Ntildesmall", - "Oacutesmall", - "Ogravesmall", - "Ocircumflexsmall", - "Odieresissmall", - "Otildesmall", - "Uacutesmall", - "Ugravesmall", - "Ucircumflexsmall", - "Udieresissmall", - NULL, - "eightsuperior", - "fourinferior", - "threeinferior", - "sixinferior", - "eightinferior", - "seveninferior", - "Scaronsmall", - NULL, - "centinferior", - "twoinferior", - NULL, - "Dieresissmall", - NULL, - "Caronsmall", - "osuperior", - "fiveinferior", - NULL, - "commainferior", - "periodinferior", - "Yacutesmall", - NULL, - "dollarinferior", - NULL, - NULL, - "Thornsmall", - NULL, - "nineinferior", - "zeroinferior", - "Zcaronsmall", - "AEsmall", - "Oslashsmall", - "questiondownsmall", - "oneinferior", - "Lslashsmall", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "Cedillasmall", - NULL, - NULL, - NULL, - NULL, - NULL, - "OEsmall", - "figuredash", - "hyphensuperior", - NULL, - NULL, - NULL, - NULL, - "exclamdownsmall", - NULL, - "Ydieresissmall", - NULL, - "onesuperior", - "twosuperior", - "threesuperior", - "foursuperior", - "fivesuperior", - "sixsuperior", - "sevensuperior", - "ninesuperior", - "zerosuperior", - NULL, - "esuperior", - "rsuperior", - "tsuperior", - NULL, - NULL, - "isuperior", - "ssuperior", - "dsuperior", - NULL, - NULL, - NULL, - NULL, - NULL, - "lsuperior", - "Ogoneksmall", - "Brevesmall", - "Macronsmall", - "bsuperior", - "nsuperior", - "msuperior", - "commasuperior", - "periodsuperior", - "Dotaccentsmall", - "Ringsmall", - NULL, - NULL, - NULL, - NULL -}; - -char *winAnsiEncoding[256] = { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "space", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quotesingle", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "grave", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "bar", - "braceright", - "asciitilde", - "bullet", - "Euro", - "bullet", - "quotesinglbase", - "florin", - "quotedblbase", - "ellipsis", - "dagger", - "daggerdbl", - "circumflex", - "perthousand", - "Scaron", - "guilsinglleft", - "OE", - "bullet", - "Zcaron", - "bullet", - "bullet", - "quoteleft", - "quoteright", - "quotedblleft", - "quotedblright", - "bullet", - "endash", - "emdash", - "tilde", - "trademark", - "scaron", - "guilsinglright", - "oe", - "bullet", - "zcaron", - "Ydieresis", - "space", - "exclamdown", - "cent", - "sterling", - "currency", - "yen", - "brokenbar", - "section", - "dieresis", - "copyright", - "ordfeminine", - "guillemotleft", - "logicalnot", - "hyphen", - "registered", - "macron", - "degree", - "plusminus", - "twosuperior", - "threesuperior", - "acute", - "mu", - "paragraph", - "periodcentered", - "cedilla", - "onesuperior", - "ordmasculine", - "guillemotright", - "onequarter", - "onehalf", - "threequarters", - "questiondown", - "Agrave", - "Aacute", - "Acircumflex", - "Atilde", - "Adieresis", - "Aring", - "AE", - "Ccedilla", - "Egrave", - "Eacute", - "Ecircumflex", - "Edieresis", - "Igrave", - "Iacute", - "Icircumflex", - "Idieresis", - "Eth", - "Ntilde", - "Ograve", - "Oacute", - "Ocircumflex", - "Otilde", - "Odieresis", - "multiply", - "Oslash", - "Ugrave", - "Uacute", - "Ucircumflex", - "Udieresis", - "Yacute", - "Thorn", - "germandbls", - "agrave", - "aacute", - "acircumflex", - "atilde", - "adieresis", - "aring", - "ae", - "ccedilla", - "egrave", - "eacute", - "ecircumflex", - "edieresis", - "igrave", - "iacute", - "icircumflex", - "idieresis", - "eth", - "ntilde", - "ograve", - "oacute", - "ocircumflex", - "otilde", - "odieresis", - "divide", - "oslash", - "ugrave", - "uacute", - "ucircumflex", - "udieresis", - "yacute", - "thorn", - "ydieresis" -}; - -char *standardEncoding[256] = { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "space", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quoteright", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "quoteleft", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "bar", - "braceright", - "asciitilde", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "exclamdown", - "cent", - "sterling", - "fraction", - "yen", - "florin", - "section", - "currency", - "quotesingle", - "quotedblleft", - "guillemotleft", - "guilsinglleft", - "guilsinglright", - "fi", - "fl", - NULL, - "endash", - "dagger", - "daggerdbl", - "periodcentered", - NULL, - "paragraph", - "bullet", - "quotesinglbase", - "quotedblbase", - "quotedblright", - "guillemotright", - "ellipsis", - "perthousand", - NULL, - "questiondown", - NULL, - "grave", - "acute", - "circumflex", - "tilde", - "macron", - "breve", - "dotaccent", - "dieresis", - NULL, - "ring", - "cedilla", - NULL, - "hungarumlaut", - "ogonek", - "caron", - "emdash", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "AE", - NULL, - "ordfeminine", - NULL, - NULL, - NULL, - NULL, - "Lslash", - "Oslash", - "OE", - "ordmasculine", - NULL, - NULL, - NULL, - NULL, - NULL, - "ae", - NULL, - NULL, - NULL, - "dotlessi", - NULL, - NULL, - "lslash", - "oslash", - "oe", - "germandbls", - NULL, - NULL, - NULL, - NULL -}; - -char *expertEncoding[256] = { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "space", - "exclamsmall", - "Hungarumlautsmall", - NULL, - "dollaroldstyle", - "dollarsuperior", - "ampersandsmall", - "Acutesmall", - "parenleftsuperior", - "parenrightsuperior", - "twodotenleader", - "onedotenleader", - "comma", - "hyphen", - "period", - "fraction", - "zerooldstyle", - "oneoldstyle", - "twooldstyle", - "threeoldstyle", - "fouroldstyle", - "fiveoldstyle", - "sixoldstyle", - "sevenoldstyle", - "eightoldstyle", - "nineoldstyle", - "colon", - "semicolon", - "commasuperior", - "threequartersemdash", - "periodsuperior", - "questionsmall", - NULL, - "asuperior", - "bsuperior", - "centsuperior", - "dsuperior", - "esuperior", - NULL, - NULL, - NULL, - "isuperior", - NULL, - NULL, - "lsuperior", - "msuperior", - "nsuperior", - "osuperior", - NULL, - NULL, - "rsuperior", - "ssuperior", - "tsuperior", - NULL, - "ff", - "fi", - "fl", - "ffi", - "ffl", - "parenleftinferior", - NULL, - "parenrightinferior", - "Circumflexsmall", - "hyphensuperior", - "Gravesmall", - "Asmall", - "Bsmall", - "Csmall", - "Dsmall", - "Esmall", - "Fsmall", - "Gsmall", - "Hsmall", - "Ismall", - "Jsmall", - "Ksmall", - "Lsmall", - "Msmall", - "Nsmall", - "Osmall", - "Psmall", - "Qsmall", - "Rsmall", - "Ssmall", - "Tsmall", - "Usmall", - "Vsmall", - "Wsmall", - "Xsmall", - "Ysmall", - "Zsmall", - "colonmonetary", - "onefitted", - "rupiah", - "Tildesmall", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "exclamdownsmall", - "centoldstyle", - "Lslashsmall", - NULL, - NULL, - "Scaronsmall", - "Zcaronsmall", - "Dieresissmall", - "Brevesmall", - "Caronsmall", - NULL, - "Dotaccentsmall", - NULL, - NULL, - "Macronsmall", - NULL, - NULL, - "figuredash", - "hypheninferior", - NULL, - NULL, - "Ogoneksmall", - "Ringsmall", - "Cedillasmall", - NULL, - NULL, - NULL, - "onequarter", - "onehalf", - "threequarters", - "questiondownsmall", - "oneeighth", - "threeeighths", - "fiveeighths", - "seveneighths", - "onethird", - "twothirds", - NULL, - NULL, - "zerosuperior", - "onesuperior", - "twosuperior", - "threesuperior", - "foursuperior", - "fivesuperior", - "sixsuperior", - "sevensuperior", - "eightsuperior", - "ninesuperior", - "zeroinferior", - "oneinferior", - "twoinferior", - "threeinferior", - "fourinferior", - "fiveinferior", - "sixinferior", - "seveninferior", - "eightinferior", - "nineinferior", - "centinferior", - "dollarinferior", - "periodinferior", - "commainferior", - "Agravesmall", - "Aacutesmall", - "Acircumflexsmall", - "Atildesmall", - "Adieresissmall", - "Aringsmall", - "AEsmall", - "Ccedillasmall", - "Egravesmall", - "Eacutesmall", - "Ecircumflexsmall", - "Edieresissmall", - "Igravesmall", - "Iacutesmall", - "Icircumflexsmall", - "Idieresissmall", - "Ethsmall", - "Ntildesmall", - "Ogravesmall", - "Oacutesmall", - "Ocircumflexsmall", - "Otildesmall", - "Odieresissmall", - "OEsmall", - "Oslashsmall", - "Ugravesmall", - "Uacutesmall", - "Ucircumflexsmall", - "Udieresissmall", - "Yacutesmall", - "Thornsmall", - "Ydieresissmall" -}; - -char *symbolEncoding[256] = { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "space", - "exclam", - "universal", - "numbersign", - "existential", - "percent", - "ampersand", - "suchthat", - "parenleft", - "parenright", - "asteriskmath", - "plus", - "comma", - "minus", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "congruent", - "Alpha", - "Beta", - "Chi", - "Delta", - "Epsilon", - "Phi", - "Gamma", - "Eta", - "Iota", - "theta1", - "Kappa", - "Lambda", - "Mu", - "Nu", - "Omicron", - "Pi", - "Theta", - "Rho", - "Sigma", - "Tau", - "Upsilon", - "sigma1", - "Omega", - "Xi", - "Psi", - "Zeta", - "bracketleft", - "therefore", - "bracketright", - "perpendicular", - "underscore", - "radicalex", - "alpha", - "beta", - "chi", - "delta", - "epsilon", - "phi", - "gamma", - "eta", - "iota", - "phi1", - "kappa", - "lambda", - "mu", - "nu", - "omicron", - "pi", - "theta", - "rho", - "sigma", - "tau", - "upsilon", - "omega1", - "omega", - "xi", - "psi", - "zeta", - "braceleft", - "bar", - "braceright", - "similar", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "Upsilon1", - "minute", - "lessequal", - "fraction", - "infinity", - "florin", - "club", - "diamond", - "heart", - "spade", - "arrowboth", - "arrowleft", - "arrowup", - "arrowright", - "arrowdown", - "degree", - "plusminus", - "second", - "greaterequal", - "multiply", - "proportional", - "partialdiff", - "bullet", - "divide", - "notequal", - "equivalence", - "approxequal", - "ellipsis", - "arrowvertex", - "arrowhorizex", - "carriagereturn", - "aleph", - "Ifraktur", - "Rfraktur", - "weierstrass", - "circlemultiply", - "circleplus", - "emptyset", - "intersection", - "union", - "propersuperset", - "reflexsuperset", - "notsubset", - "propersubset", - "reflexsubset", - "element", - "notelement", - "angle", - "gradient", - "registerserif", - "copyrightserif", - "trademarkserif", - "product", - "radical", - "dotmath", - "logicalnot", - "logicaland", - "logicalor", - "arrowdblboth", - "arrowdblleft", - "arrowdblup", - "arrowdblright", - "arrowdbldown", - "lozenge", - "angleleft", - "registersans", - "copyrightsans", - "trademarksans", - "summation", - "parenlefttp", - "parenleftex", - "parenleftbt", - "bracketlefttp", - "bracketleftex", - "bracketleftbt", - "bracelefttp", - "braceleftmid", - "braceleftbt", - "braceex", - NULL, - "angleright", - "integral", - "integraltp", - "integralex", - "integralbt", - "parenrighttp", - "parenrightex", - "parenrightbt", - "bracketrighttp", - "bracketrightex", - "bracketrightbt", - "bracerighttp", - "bracerightmid", - "bracerightbt", - NULL -}; - -char *zapfDingbatsEncoding[256] = { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "space", - "a1", - "a2", - "a202", - "a3", - "a4", - "a5", - "a119", - "a118", - "a117", - "a11", - "a12", - "a13", - "a14", - "a15", - "a16", - "a105", - "a17", - "a18", - "a19", - "a20", - "a21", - "a22", - "a23", - "a24", - "a25", - "a26", - "a27", - "a28", - "a6", - "a7", - "a8", - "a9", - "a10", - "a29", - "a30", - "a31", - "a32", - "a33", - "a34", - "a35", - "a36", - "a37", - "a38", - "a39", - "a40", - "a41", - "a42", - "a43", - "a44", - "a45", - "a46", - "a47", - "a48", - "a49", - "a50", - "a51", - "a52", - "a53", - "a54", - "a55", - "a56", - "a57", - "a58", - "a59", - "a60", - "a61", - "a62", - "a63", - "a64", - "a65", - "a66", - "a67", - "a68", - "a69", - "a70", - "a71", - "a72", - "a73", - "a74", - "a203", - "a75", - "a204", - "a76", - "a77", - "a78", - "a79", - "a81", - "a82", - "a83", - "a84", - "a97", - "a98", - "a99", - "a100", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "a101", - "a102", - "a103", - "a104", - "a106", - "a107", - "a108", - "a112", - "a111", - "a110", - "a109", - "a120", - "a121", - "a122", - "a123", - "a124", - "a125", - "a126", - "a127", - "a128", - "a129", - "a130", - "a131", - "a132", - "a133", - "a134", - "a135", - "a136", - "a137", - "a138", - "a139", - "a140", - "a141", - "a142", - "a143", - "a144", - "a145", - "a146", - "a147", - "a148", - "a149", - "a150", - "a151", - "a152", - "a153", - "a154", - "a155", - "a156", - "a157", - "a158", - "a159", - "a160", - "a161", - "a163", - "a164", - "a196", - "a165", - "a192", - "a166", - "a167", - "a168", - "a169", - "a170", - "a171", - "a172", - "a173", - "a162", - "a174", - "a175", - "a176", - "a177", - "a178", - "a179", - "a193", - "a180", - "a199", - "a181", - "a200", - "a182", - NULL, - "a201", - "a183", - "a184", - "a197", - "a185", - "a194", - "a198", - "a186", - "a195", - "a187", - "a188", - "a189", - "a190", - "a191", - NULL -}; diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/FontEncodingTables.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/FontEncodingTables.h deleted file mode 100644 index 8b0a1e7e993..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/FontEncodingTables.h +++ /dev/null @@ -1,20 +0,0 @@ -//======================================================================== -// -// FontEncodingTables.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef FONTENCODINGTABLES_H -#define FONTENCODINGTABLES_H - -extern char *macRomanEncoding[]; -extern char *macExpertEncoding[]; -extern char *winAnsiEncoding[]; -extern char *standardEncoding[]; -extern char *expertEncoding[]; -extern char *symbolEncoding[]; -extern char *zapfDingbatsEncoding[]; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/FontInfo.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/FontInfo.cc deleted file mode 100644 index 440e6f5aee9..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/FontInfo.cc +++ /dev/null @@ -1,239 +0,0 @@ -//======================================================================== -// -// FontInfo.cc -// -// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005-2008, 2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> -// Copyright (C) 2006 Kouhei Sutou <kou@cozmixng.org> -// Copyright (C) 2009 Pino Toscano <pino@kde.org> -// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2010 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2010 Thomas Freitag <Thomas.Freitag@alfa.de> -// Copyright (C) 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -//======================================================================== -// -// Based on code from pdffonts.cc -// -// Copyright 2001-2007 Glyph & Cog, LLC -// -//======================================================================== - -#include "config.h" -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -#include <string.h> -#include <math.h> -#include "GlobalParams.h" -#include "Error.h" -#include "Object.h" -#include "Dict.h" -#include "GfxFont.h" -#include "Annot.h" -#include "PDFDoc.h" -#include "FontInfo.h" - -FontInfoScanner::FontInfoScanner(PDFDoc *docA, int firstPage) { - doc = docA; - currentPage = firstPage + 1; -} - -FontInfoScanner::~FontInfoScanner() { -} - -GooList *FontInfoScanner::scan(int nPages) { - GooList *result; - Page *page; - Dict *resDict; - Annots *annots; - Object obj1, obj2; - int lastPage; - - if (currentPage > doc->getNumPages()) { - return NULL; - } - - result = new GooList(); - - lastPage = currentPage + nPages; - if (lastPage > doc->getNumPages() + 1) { - lastPage = doc->getNumPages() + 1; - } - - for (int pg = currentPage; pg < lastPage; ++pg) { - page = doc->getPage(pg); - if (!page) continue; - - if ((resDict = page->getResourceDict())) { - scanFonts(resDict, result); - } - annots = page->getAnnots(doc->getCatalog()); - for (int i = 0; i < annots->getNumAnnots(); ++i) { - if (annots->getAnnot(i)->getAppearance(&obj1)->isStream()) { - obj1.streamGetDict()->lookup("Resources", &obj2); - if (obj2.isDict()) { - scanFonts(obj2.getDict(), result); - } - obj2.free(); - } - obj1.free(); - } - } - - currentPage = lastPage; - - return result; -} - -void FontInfoScanner::scanFonts(Dict *resDict, GooList *fontsList) { - Object obj1, obj2, objDict, resObj; - Ref r; - GfxFontDict *gfxFontDict; - GfxFont *font; - int i; - - // scan the fonts in this resource dictionary - gfxFontDict = NULL; - resDict->lookupNF("Font", &obj1); - if (obj1.isRef()) { - obj1.fetch(doc->getXRef(), &obj2); - if (obj2.isDict()) { - r = obj1.getRef(); - gfxFontDict = new GfxFontDict(doc->getXRef(), &r, obj2.getDict()); - } - obj2.free(); - } else if (obj1.isDict()) { - gfxFontDict = new GfxFontDict(doc->getXRef(), NULL, obj1.getDict()); - } - if (gfxFontDict) { - for (i = 0; i < gfxFontDict->getNumFonts(); ++i) { - if ((font = gfxFontDict->getFont(i))) { - Ref fontRef = *font->getID(); - - // add this font to the list if not already found - if (fonts.find(fontRef.num) == fonts.end()) { - fontsList->append(new FontInfo(font, doc)); - fonts.insert(fontRef.num); - } - } - } - delete gfxFontDict; - } - obj1.free(); - - // recursively scan any resource dictionaries in objects in this - // resource dictionary - char *resTypes[] = { "XObject", "Pattern" }; - for (Guint resType = 0; resType < sizeof(resTypes) / sizeof(resTypes[0]); ++resType) { - resDict->lookup(resTypes[resType], &objDict); - if (objDict.isDict()) { - for (i = 0; i < objDict.dictGetLength(); ++i) { - objDict.dictGetValNF(i, &obj1); - if (obj1.isRef()) { - // check for an already-seen object - const Ref r = obj1.getRef(); - if (visitedObjects.find(r.num) != visitedObjects.end()) { - obj1.free(); - continue; - } - - visitedObjects.insert(r.num); - } - - obj1.fetch(doc->getXRef(), &obj2); - - if (obj2.isStream()) { - obj2.streamGetDict()->lookup("Resources", &resObj); - if (resObj.isDict() && resObj.getDict() != resDict) { - scanFonts(resObj.getDict(), fontsList); - } - resObj.free(); - } - obj1.free(); - obj2.free(); - } - } - objDict.free(); - } -} - -FontInfo::FontInfo(GfxFont *font, PDFDoc *doc) { - GooString *origName; - Object fontObj, toUnicodeObj; - int i; - - fontRef = *font->getID(); - - // font name - origName = font->getOrigName(); - if (origName != NULL) { - name = font->getOrigName()->copy(); - } else { - name = NULL; - } - - // font type - type = (FontInfo::Type)font->getType(); - - // check for an embedded font - if (font->getType() == fontType3) { - emb = gTrue; - } else { - emb = font->getEmbeddedFontID(&embRef); - } - - if (!emb) - { - DisplayFontParam *dfp = globalParams->getDisplayFont(font); - if (dfp) - { - if (dfp->kind == displayFontT1) file = dfp->t1.fileName->copy(); - else file = dfp->tt.fileName->copy(); - } - else file = NULL; - } - else file = NULL; - - // look for a ToUnicode map - hasToUnicode = gFalse; - if (doc->getXRef()->fetch(fontRef.num, fontRef.gen, &fontObj)->isDict()) { - hasToUnicode = fontObj.dictLookup("ToUnicode", &toUnicodeObj)->isStream(); - toUnicodeObj.free(); - } - fontObj.free(); - - // check for a font subset name: capital letters followed by a '+' - // sign - subset = gFalse; - if (name) { - for (i = 0; i < name->getLength(); ++i) { - if (name->getChar(i) < 'A' || name->getChar(i) > 'Z') { - break; - } - } - subset = i > 0 && i < name->getLength() && name->getChar(i) == '+'; - } -} - -FontInfo::FontInfo(FontInfo& f) { - name = f.name ? f.name->copy() : NULL; - file = f.file ? f.file->copy() : NULL; - type = f.type; - emb = f.emb; - subset = f.subset; - hasToUnicode = f.hasToUnicode; - fontRef = f.fontRef; - embRef = f.embRef; -} - -FontInfo::~FontInfo() { - delete name; - delete file; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/FontInfo.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/FontInfo.h deleted file mode 100644 index 733194db6a3..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/FontInfo.h +++ /dev/null @@ -1,97 +0,0 @@ -//======================================================================== -// -// FontInfo.h -// -// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005-2008, 2010, 2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> -// Copyright (C) 2009 Pino Toscano <pino@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -//======================================================================== -// -// Based on code from pdffonts.cc -// -// Copyright 2001-2007 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef FONT_INFO_H -#define FONT_INFO_H - -#include "Object.h" -#include "goo/gtypes.h" -#include "goo/GooList.h" - -class GfxFont; -class PDFDoc; - -class FontInfo { -public: - enum Type { - unknown, - Type1, - Type1C, - Type1COT, - Type3, - TrueType, - TrueTypeOT, - CIDType0, - CIDType0C, - CIDType0COT, - CIDTrueType, - CIDTrueTypeOT - }; - - // Constructor. - FontInfo(GfxFont *fontA, PDFDoc *doc); - // Copy constructor - FontInfo(FontInfo& f); - // Destructor. - ~FontInfo(); - - GooString *getName() { return name; }; - GooString *getFile() { return file; }; - Type getType() { return type; }; - GBool getEmbedded() { return emb; }; - GBool getSubset() { return subset; }; - GBool getToUnicode() { return hasToUnicode; }; - Ref getRef() { return fontRef; }; - Ref getEmbRef() { return embRef; }; - -private: - GooString *name; - GooString *file; - Type type; - GBool emb; - GBool subset; - GBool hasToUnicode; - Ref fontRef; - Ref embRef; -}; - -class FontInfoScanner { -public: - - // Constructor. - FontInfoScanner(PDFDoc *doc, int firstPage = 0); - // Destructor. - ~FontInfoScanner(); - - GooList *scan(int nPages); - -private: - - PDFDoc *doc; - int currentPage; - std::set<int> fonts; - std::set<int> visitedObjects; - - void scanFonts(Dict *resDict, GooList *fontsList); -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Form.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Form.cc deleted file mode 100644 index 1f8b064b807..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Form.cc +++ /dev/null @@ -1,1463 +0,0 @@ -//======================================================================== -// -// Form.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2006-2008 Julien Rebetez <julienr@svn.gnome.org> -// Copyright 2007-2011 Albert Astals Cid <aacid@kde.org> -// Copyright 2007-2008, 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright 2007 Adrian Johnson <ajohnson@redneon.com> -// Copyright 2007 Iñigo Martínez <inigomartinez@gmail.com> -// Copyright 2008, 2011 Pino Toscano <pino@kde.org> -// Copyright 2008 Michael Vrable <mvrable@cs.ucsd.edu> -// Copyright 2009 Matthias Drochner <M.Drochner@fz-juelich.de> -// Copyright 2009 KDAB via Guillermo Amaral <gamaral@amaral.com.mx> -// Copyright 2010 Mark Riedesel <mark@klowner.com> -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <set> -#include <stddef.h> -#include <string.h> -#include "goo/gmem.h" -#include "goo/GooString.h" -#include "Error.h" -#include "Object.h" -#include "Array.h" -#include "Dict.h" -#include "Gfx.h" -#include "Form.h" -#include "XRef.h" -#include "PDFDocEncoding.h" -#include "Annot.h" -#include "Catalog.h" -#include "Link.h" - -//return a newly allocated char* containing an UTF16BE string of size length -char* pdfDocEncodingToUTF16 (GooString* orig, int* length) -{ - //double size, a unicode char takes 2 char, add 2 for the unicode marker - *length = 2+2*orig->getLength(); - char *result = new char[(*length)]; - char *cstring = orig->getCString(); - //unicode marker - result[0] = 0xfe; - result[1] = 0xff; - //convert to utf16 - for(int i=2,j=0; i<(*length); i+=2,j++) { - Unicode u = pdfDocEncoding[(unsigned int)((unsigned char)cstring[j])]&0xffff; - result[i] = (u >> 8) & 0xff; - result[i+1] = u & 0xff; - } - return result; -} - - - -FormWidget::FormWidget(XRef *xrefA, Object *aobj, unsigned num, Ref aref, FormField *fieldA) -{ - ref = aref; - ID = 0; - childNum = num; - xref = xrefA; - aobj->copy(&obj); - type = formUndef; - field = fieldA; - widget = NULL; -} - -FormWidget::~FormWidget() -{ - if (widget) - widget->decRefCnt(); - obj.free (); -} - -#ifdef DEBUG_FORMS -void FormWidget::print(int indent) { - printf ("%*s+ (%d %d): [widget]\n", indent, "", ref.num, ref.gen); -} -#endif - -void FormWidget::createWidgetAnnotation(Catalog *catalog) { - if (widget) - return; - - Object obj1; - obj1.initRef(ref.num, ref.gen); - widget = new AnnotWidget(xref, obj.getDict(), catalog, &obj1, field); - obj1.free(); -} - -GBool FormWidget::inRect(double x, double y) const { - return widget ? widget->inRect(x, y) : gFalse; -} - -void FormWidget::getRect(double *x1, double *y1, double *x2, double *y2) const { - if (widget) - widget->getRect(x1, y1, x2, y2); -} - -double FormWidget::getFontSize() const { - return widget ? widget->getFontSize() : 0.; -} - -bool FormWidget::isReadOnly() const -{ - return field->isReadOnly(); -} - -GBool FormWidget::isModified() const { - return field->isModified(); -} - -int FormWidget::encodeID (unsigned pageNum, unsigned fieldNum) -{ - return (pageNum << 4*sizeof(unsigned)) + fieldNum; -} - -void FormWidget::decodeID (unsigned id, unsigned* pageNum, unsigned* fieldNum) -{ - *pageNum = id >> 4*sizeof(unsigned); - *fieldNum = (id << 4*sizeof(unsigned)) >> 4*sizeof(unsigned); -} - -GooString *FormWidget::getPartialName() const { - return field->getPartialName(); -} - -GooString *FormWidget::getAlternateUiName() const { - return field->getAlternateUiName(); -} - -GooString *FormWidget::getMappingName() const { - return field->getMappingName(); -} - -GooString *FormWidget::getFullyQualifiedName() { - return field->getFullyQualifiedName(); -} - -LinkAction *FormWidget::getActivationAction() { - return widget ? widget->getAction() : NULL; -} - -FormWidgetButton::FormWidgetButton (XRef *xrefA, Object *aobj, unsigned num, Ref ref, FormField *p) : - FormWidget(xrefA, aobj, num, ref, p) -{ - type = formButton; - parent = static_cast<FormFieldButton*>(field); - onStr = NULL; - siblingsID = NULL; - numSiblingsID = 0; - - Object obj1, obj2; - - // Find the name of the ON state in the AP dictionnary - // The reference say the Off state, if it existe, _must_ be stored in the AP dict under the name /Off - // The "on" state may be stored under any other name - if (obj.dictLookup("AP", &obj1)->isDict()) { - if (obj1.dictLookup("N", &obj2)->isDict()) { - for (int i = 0; i < obj2.dictGetLength(); i++) { - char *key = obj2.dictGetKey(i); - if (strcmp (key, "Off") != 0) { - onStr = new GooString (key); - break; - } - } - } - obj2.free(); - } - obj1.free(); -} - -char *FormWidgetButton::getOnStr() { - if (onStr) - return onStr->getCString(); - - // 12.7.4.2.3 Check Boxes - // Yes should be used as the name for the on state - return parent->getButtonType() == formButtonCheck ? (char *)"Yes" : NULL; -} - -FormWidgetButton::~FormWidgetButton () -{ - if (siblingsID) - gfree(siblingsID); - delete onStr; -} - -FormButtonType FormWidgetButton::getButtonType () const -{ - return parent->getButtonType (); -} - -void FormWidgetButton::setAppearanceState(char *state) { - if (!widget) - return; - widget->setAppearanceState(state); -} - -void FormWidgetButton::setState (GBool astate) -{ - //pushButtons don't have state - if (parent->getButtonType() == formButtonPush) - return; - - // Silently return if can't set ON state - if (astate && !onStr) - return; - - parent->setState(astate ? onStr->getCString() : (char *)"Off"); - // Parent will call setAppearanceState() -} - -GBool FormWidgetButton::getState () -{ - return onStr ? parent->getState(onStr->getCString()) : gFalse; -} - -void FormWidgetButton::setNumSiblingsID (int i) -{ - numSiblingsID = i; - siblingsID = (unsigned*)greallocn(siblingsID, numSiblingsID, sizeof(unsigned)); -} - - -FormWidgetText::FormWidgetText (XRef *xrefA, Object *aobj, unsigned num, Ref ref, FormField *p) : - FormWidget(xrefA, aobj, num, ref, p) -{ - type = formText; - parent = static_cast<FormFieldText*>(field); -} - -GooString* FormWidgetText::getContent () -{ - return parent->getContent(); -} - -GooString* FormWidgetText::getContentCopy () -{ - return parent->getContentCopy(); -} - -bool FormWidgetText::isMultiline () const -{ - return parent->isMultiline(); -} - -bool FormWidgetText::isPassword () const -{ - return parent->isPassword(); -} - -bool FormWidgetText::isFileSelect () const -{ - return parent->isFileSelect(); -} - -bool FormWidgetText::noSpellCheck () const -{ - return parent->noSpellCheck(); -} - -bool FormWidgetText::noScroll () const -{ - return parent->noScroll(); -} - -bool FormWidgetText::isComb () const -{ - return parent->isComb(); -} - -bool FormWidgetText::isRichText () const -{ - return parent->isRichText(); -} - -int FormWidgetText::getMaxLen () const -{ - return parent->getMaxLen (); -} - -void FormWidgetText::setContent(GooString* new_content) -{ - if (isReadOnly()) { - error(-1, "FormWidgetText::setContentCopy called on a read only field\n"); - return; - } - - parent->setContentCopy(new_content); -} - -FormWidgetChoice::FormWidgetChoice(XRef *xrefA, Object *aobj, unsigned num, Ref ref, FormField *p) : - FormWidget(xrefA, aobj, num, ref, p) -{ - type = formChoice; - parent = static_cast<FormFieldChoice*>(field); -} - -FormWidgetChoice::~FormWidgetChoice() -{ -} - -bool FormWidgetChoice::_checkRange (int i) -{ - if (i < 0 || i >= parent->getNumChoices()) { - error(-1, "FormWidgetChoice::_checkRange i out of range : %i", i); - return false; - } - return true; -} - -void FormWidgetChoice::select (int i) -{ - if (isReadOnly()) { - error(-1, "FormWidgetChoice::select called on a read only field\n"); - return; - } - if (!_checkRange(i)) return; - parent->select(i); -} - -void FormWidgetChoice::toggle (int i) -{ - if (isReadOnly()) { - error(-1, "FormWidgetChoice::toggle called on a read only field\n"); - return; - } - if (!_checkRange(i)) return; - parent->toggle(i); -} - -void FormWidgetChoice::deselectAll () -{ - if (isReadOnly()) { - error(-1, "FormWidgetChoice::deselectAll called on a read only field\n"); - return; - } - parent->deselectAll(); -} - -GooString* FormWidgetChoice::getEditChoice () -{ - if (!hasEdit()) { - error(-1, "FormFieldChoice::getEditChoice called on a non-editable choice\n"); - return NULL; - } - return parent->getEditChoice(); -} - -bool FormWidgetChoice::isSelected (int i) -{ - if (!_checkRange(i)) return false; - return parent->isSelected(i); -} - -void FormWidgetChoice::setEditChoice (GooString* new_content) -{ - if (isReadOnly()) { - error(-1, "FormWidgetText::setEditChoice called on a read only field\n"); - return; - } - if (!hasEdit()) { - error(-1, "FormFieldChoice::setEditChoice : trying to edit an non-editable choice\n"); - return; - } - - parent->setEditChoice(new_content); -} - -int FormWidgetChoice::getNumChoices() -{ - return parent->getNumChoices(); -} - -GooString* FormWidgetChoice::getChoice(int i) -{ - return parent->getChoice(i); -} - -bool FormWidgetChoice::isCombo () const -{ - return parent->isCombo(); -} - -bool FormWidgetChoice::hasEdit () const -{ - return parent->hasEdit(); -} - -bool FormWidgetChoice::isMultiSelect () const -{ - return parent->isMultiSelect(); -} - -bool FormWidgetChoice::noSpellCheck () const -{ - return parent->noSpellCheck(); -} - -bool FormWidgetChoice::commitOnSelChange () const -{ - return parent->commitOnSelChange(); -} - -bool FormWidgetChoice::isListBox () const -{ - return parent->isListBox(); -} - -FormWidgetSignature::FormWidgetSignature(XRef *xrefA, Object *aobj, unsigned num, Ref ref, FormField *p) : - FormWidget(xrefA, aobj, num, ref, p) -{ - type = formSignature; - parent = static_cast<FormFieldSignature*>(field); -} - - -//======================================================================== -// FormField -//======================================================================== - -FormField::FormField(XRef* xrefA, Object *aobj, const Ref& aref, FormField *parentA, std::set<int> *usedParents, FormFieldType ty) -{ - xref = xrefA; - aobj->copy(&obj); - Dict* dict = obj.getDict(); - ref.num = ref.gen = 0; - type = ty; - parent = parentA; - numChildren = 0; - children = NULL; - terminal = false; - widgets = NULL; - readOnly = false; - defaultAppearance = NULL; - fullyQualifiedName = NULL; - quadding = quaddingLeftJustified; - hasQuadding = gFalse; - modified = gFalse; - - ref = aref; - - Object obj1; - //childs - if (dict->lookup("Kids", &obj1)->isArray()) { - // Load children - for (int i = 0 ; i < obj1.arrayGetLength(); i++) { - Object childRef, childObj; - - if (!obj1.arrayGetNF(i, &childRef)->isRef()) { - error (-1, "Invalid form field renference"); - childRef.free(); - continue; - } - if (!obj1.arrayGet(i, &childObj)->isDict()) { - error (-1, "Form field child is not a dictionary"); - childObj.free(); - childRef.free(); - continue; - } - - const Ref ref = childRef.getRef(); - if (usedParents->find(ref.num) == usedParents->end()) { - Object obj2, obj3; - // Field child: it could be a form field or a widget or composed dict - if (childObj.dictLookupNF("Parent", &obj2)->isRef() || childObj.dictLookup("Parent", &obj3)->isDict()) { - // Child is a form field or composed dict - // We create the field, if it's composed - // it will create the widget as a child - std::set<int> usedParentsAux = *usedParents; - usedParentsAux.insert(ref.num); - obj2.free(); - obj3.free(); - - if (terminal) { - error(-1, "Field can't have both Widget AND Field as kids\n"); - continue; - } - - numChildren++; - children = (FormField**)greallocn(children, numChildren, sizeof(FormField*)); - children[numChildren - 1] = Form::createFieldFromDict(&childObj, xref, ref, this, &usedParentsAux); - } else if (childObj.dictLookup("Subtype", &obj2)->isName("Widget")) { - // Child is a widget annotation - if (!terminal && numChildren > 0) { - error(-1, "Field can't have both Widget AND Field as kids\n"); - obj2.free(); - obj3.free(); - continue; - } - _createWidget(&childObj, ref); - } - obj2.free(); - obj3.free(); - } - childObj.free(); - childRef.free(); - } - } else { - // No children, if it's a composed dict, create the child widget - obj1.free(); - if (dict->lookup("Subtype", &obj1)->isName("Widget")) - _createWidget(&obj, ref); - obj1.free(); - } - - //flags - if (Form::fieldLookup(dict, "Ff", &obj1)->isInt()) { - int flags = obj1.getInt(); - if (flags & 0x1) { // 1 -> ReadOnly - readOnly = true; - } - if (flags & 0x2) { // 2 -> Required - //TODO - } - if (flags & 0x4) { // 3 -> NoExport - //TODO - } - } - obj1.free(); - - // Variable Text - if (Form::fieldLookup(dict, "DA", &obj1)->isString()) - defaultAppearance = obj1.getString()->copy(); - obj1.free(); - - if (Form::fieldLookup(dict, "Q", &obj1)->isInt()) { - quadding = static_cast<VariableTextQuadding>(obj1.getInt()); - hasQuadding = gTrue; - } - obj1.free(); - - if (dict->lookup("T", &obj1)->isString()) { - partialName = obj1.getString()->copy(); - } else { - partialName = NULL; - } - obj1.free(); - - if (dict->lookup("TU", &obj1)->isString()) { - alternateUiName = obj1.getString()->copy(); - } else { - alternateUiName = NULL; - } - obj1.free(); - - if(dict->lookup("TM", &obj1)->isString()) { - mappingName = obj1.getString()->copy(); - } else { - mappingName = NULL; - } - obj1.free(); -} - -FormField::~FormField() -{ - if (!terminal) { - if(children) { - for (int i=0; i<numChildren; i++) - delete children[i]; - gfree(children); - } - } else { - for (int i = 0; i < numChildren; ++i) - delete widgets[i]; - gfree (widgets); - } - obj.free(); - - delete defaultAppearance; - delete partialName; - delete alternateUiName; - delete mappingName; - delete fullyQualifiedName; -} - -#ifdef DEBUG_FORMS -void FormField::print(int indent) -{ - printf ("%*s- (%d %d): [container] terminal: %s children: %d\n", indent, "", ref.num, ref.gen, - terminal ? "Yes" : "No", numChildren); -} - -void FormField::printTree(int indent) -{ - print(indent); - if (terminal) { - for (int i = 0; i < numChildren; i++) - widgets[i]->print(indent + 4); - } else { - for (int i = 0; i < numChildren; i++) - children[i]->printTree(indent + 4); - } -} -#endif - -void FormField::fillChildrenSiblingsID() -{ - if (terminal) - return; - for (int i = 0; i < numChildren; i++) { - children[i]->fillChildrenSiblingsID(); - } -} - -void FormField::createWidgetAnnotations(Catalog *catalog) { - if (terminal) { - for (int i = 0; i < numChildren; i++) - widgets[i]->createWidgetAnnotation(catalog); - } else { - for (int i = 0; i < numChildren; i++) - children[i]->createWidgetAnnotations(catalog); - } -} - -GBool FormField::isModified() const { - return modified ? gTrue : parent ? parent->isModified() : gFalse; -} - -void FormField::_createWidget (Object *obj, Ref aref) -{ - terminal = true; - numChildren++; - widgets = (FormWidget**)greallocn(widgets, numChildren, sizeof(FormWidget*)); - //ID = index in "widgets" table - switch (type) { - case formButton: - widgets[numChildren-1] = new FormWidgetButton(xref, obj, numChildren-1, aref, this); - break; - case formText: - widgets[numChildren-1] = new FormWidgetText(xref, obj, numChildren-1, aref, this); - break; - case formChoice: - widgets[numChildren-1] = new FormWidgetChoice(xref, obj, numChildren-1, aref, this); - break; - case formSignature: - widgets[numChildren-1] = new FormWidgetSignature(xref, obj, numChildren-1, aref, this); - break; - default: - error(-1, "SubType on non-terminal field, invalid document?"); - numChildren--; - terminal = false; - } -} - -FormWidget* FormField::findWidgetByRef (Ref aref) -{ - if (terminal) { - for(int i=0; i<numChildren; i++) { - if (widgets[i]->getRef().num == aref.num - && widgets[i]->getRef().gen == aref.gen) - return widgets[i]; - } - } else { - for(int i=0; i<numChildren; i++) { - FormWidget* result = children[i]->findWidgetByRef(aref); - if(result) return result; - } - } - return NULL; -} - -GooString* FormField::getFullyQualifiedName() { - Object obj1, obj2; - Object parent; - GooString *parent_name; - GooString *full_name; - - if (fullyQualifiedName) - return fullyQualifiedName; - - full_name = new GooString(); - - obj.copy(&obj1); - while (obj1.dictLookup("Parent", &parent)->isDict()) { - if (parent.dictLookup("T", &obj2)->isString()) { - parent_name = obj2.getString(); - - if (parent_name->hasUnicodeMarker()) { - parent_name->del(0, 2); // Remove the unicode BOM - full_name->insert(0, "\0.", 2); // 2-byte unicode period - } else { - full_name->insert(0, '.'); // 1-byte ascii period - } - - full_name->insert(0, parent_name); - obj2.free(); - } - obj1.free(); - parent.copy(&obj1); - parent.free(); - } - obj1.free(); - parent.free(); - - if (partialName) { - full_name->append(partialName); - } else { - int len = full_name->getLength(); - // Remove the last period - if (len > 0) - full_name->del(len - 1, 1); - } - - fullyQualifiedName = full_name; - return fullyQualifiedName; -} - -//------------------------------------------------------------------------ -// FormFieldButton -//------------------------------------------------------------------------ -FormFieldButton::FormFieldButton(XRef *xrefA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents) - : FormField(xrefA, aobj, ref, parent, usedParents, formButton) -{ - Dict* dict = obj.getDict(); - active_child = -1; - noAllOff = false; - appearanceState.initNull(); - - Object obj1; - btype = formButtonCheck; - if (Form::fieldLookup(dict, "Ff", &obj1)->isInt()) { - int flags = obj1.getInt(); - - if (flags & 0x10000) { // 17 -> push button - btype = formButtonPush; - } else if (flags & 0x8000) { // 16 -> radio button - btype = formButtonRadio; - if (flags & 0x4000) { // 15 -> noToggleToOff - noAllOff = true; - } - } - if (flags & 0x1000000) { // 26 -> radiosInUnison - error(-1, "FormFieldButton:: radiosInUnison flag unimplemented, please report a bug with a testcase\n"); - } - } - - if (btype != formButtonPush) { - // Even though V is inheritable we are interested in the value of this - // field, if not present it's probably because it's a button in a set. - dict->lookup("V", &appearanceState); - } -} - -#ifdef DEBUG_FORMS -static char *_getButtonType(FormButtonType type) -{ - switch (type) { - case formButtonPush: - return "push"; - case formButtonCheck: - return "check"; - case formButtonRadio: - return "radio"; - default: - break; - } - return "unknown"; -} - -void FormFieldButton::print(int indent) -{ - printf ("%*s- (%d %d): [%s] terminal: %s children: %d\n", indent, "", ref.num, ref.gen, - _getButtonType(btype), terminal ? "Yes" : "No", numChildren); -} -#endif - -void FormFieldButton::fillChildrenSiblingsID() -{ - if (!terminal) { - for(int i=0; i<numChildren; i++) { - children[i]->fillChildrenSiblingsID(); - } - } else { - for(int i=0; i<numChildren; i++) { - FormWidgetButton *btn = static_cast<FormWidgetButton*>(widgets[i]); - btn->setNumSiblingsID(numChildren-1); - for(int j=0, counter=0; j<numChildren; j++) { - if (i == j) continue; - btn->setSiblingsID(counter, widgets[j]->getID()); - counter++; - } - } - } -} - -GBool FormFieldButton::setState(char *state) -{ - if (readOnly) { - error(-1, "FormFieldButton::setState called on a readOnly field\n"); - return gFalse; - } - - // A check button could behave as a radio button - // when it's in a set of more than 1 buttons - if (btype != formButtonRadio && btype != formButtonCheck) - return gFalse; - - if (terminal && parent && parent->getType() == formButton && appearanceState.isNull()) { - // It's button in a set, set state on parent - if (static_cast<FormFieldButton*>(parent)->setState(state)) { - modified = gTrue; - return gTrue; - } - return gFalse; - } - - GBool isOn = strcmp(state, "Off") != 0; - - if (!isOn && noAllOff) - return gFalse; // Don't allow to set all radio to off - - char *current = getAppearanceState(); - GBool currentFound = gFalse, newFound = gFalse; - - for (int i = 0; i < numChildren; i++) { - FormWidgetButton *widget; - - // If radio button is a terminal field we want the widget at i, but - // if it's not terminal, the child widget is a composed dict, so - // we want the ony child widget of the children at i - if (terminal) - widget = static_cast<FormWidgetButton*>(widgets[i]); - else - widget = static_cast<FormWidgetButton*>(children[i]->getWidget(0)); - - if (!widget->getOnStr()) - continue; - - char *onStr = widget->getOnStr(); - if (current && strcmp(current, onStr) == 0) { - widget->setAppearanceState("Off"); - if (!isOn) - break; - currentFound = gTrue; - } - - if (isOn && strcmp(state, onStr) == 0) { - widget->setAppearanceState(state); - newFound = gTrue; - } - - if (currentFound && newFound) - break; - } - - updateState(state); - modified = gTrue; - - return gTrue; -} - -GBool FormFieldButton::getState(char *state) { - if (appearanceState.isName(state)) - return gTrue; - - return (parent && parent->getType() == formButton) ? static_cast<FormFieldButton*>(parent)->getState(state) : gFalse; -} - -void FormFieldButton::updateState(char *state) { - Object obj1; - - appearanceState.free(); - appearanceState.initName(state); - - appearanceState.copy(&obj1); - obj.getDict()->set("V", &obj1); - xref->setModifiedObject(&obj, ref); -} - -FormFieldButton::~FormFieldButton() -{ - appearanceState.free(); -} - -//------------------------------------------------------------------------ -// FormFieldText -//------------------------------------------------------------------------ -FormFieldText::FormFieldText(XRef *xrefA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents) - : FormField(xrefA, aobj, ref, parent, usedParents, formText) -{ - Dict* dict = obj.getDict(); - Object obj1; - content = NULL; - multiline = password = fileSelect = doNotSpellCheck = doNotScroll = comb = richText = false; - maxLen = 0; - - if (Form::fieldLookup(dict, "Ff", &obj1)->isInt()) { - int flags = obj1.getInt(); - if (flags & 0x1000) // 13 -> Multiline - multiline = true; - if (flags & 0x2000) // 14 -> Password - password = true; - if (flags & 0x100000) // 21 -> FileSelect - fileSelect = true; - if (flags & 0x400000)// 23 -> DoNotSpellCheck - doNotSpellCheck = true; - if (flags & 0x800000) // 24 -> DoNotScroll - doNotScroll = true; - if (flags & 0x1000000) // 25 -> Comb - comb = true; - if (flags & 0x2000000)// 26 -> RichText - richText = true; - } - obj1.free(); - - if (Form::fieldLookup(dict, "MaxLen", &obj1)->isInt()) { - maxLen = obj1.getInt(); - } - obj1.free(); - - if (Form::fieldLookup(dict, "V", &obj1)->isString()) { - if (obj1.getString()->hasUnicodeMarker()) { - if (obj1.getString()->getLength() > 2) - content = obj1.getString()->copy(); - } else if (obj1.getString()->getLength() > 0) { - //non-unicode string -- assume pdfDocEncoding and try to convert to UTF16BE - int tmp_length; - char* tmp_str = pdfDocEncodingToUTF16(obj1.getString(), &tmp_length); - content = new GooString(tmp_str, tmp_length); - delete [] tmp_str; - } - } - obj1.free(); -} - -#ifdef DEBUG_FORMS -void FormFieldText::print(int indent) -{ - printf ("%*s- (%d %d): [text] terminal: %s children: %d\n", indent, "", ref.num, ref.gen, - terminal ? "Yes" : "No", numChildren); -} -#endif - -GooString* FormFieldText::getContentCopy () -{ - if (!content) return NULL; - return new GooString(content); -} - -void FormFieldText::setContentCopy (GooString* new_content) -{ - delete content; - content = NULL; - - if (new_content) { - content = new_content->copy(); - - //append the unicode marker <FE FF> if needed - if (!content->hasUnicodeMarker()) { - content->insert(0, 0xff); - content->insert(0, 0xfe); - } - } - - Object obj1; - obj1.initString(content ? content->copy() : new GooString("")); - obj.getDict()->set("V", &obj1); - xref->setModifiedObject(&obj, ref); - modified = gTrue; -} - -FormFieldText::~FormFieldText() -{ - delete content; -} - - -//------------------------------------------------------------------------ -// FormFieldChoice -//------------------------------------------------------------------------ -FormFieldChoice::FormFieldChoice(XRef *xrefA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents) - : FormField(xrefA, aobj, ref, parent, usedParents, formChoice) -{ - numChoices = 0; - choices = NULL; - editedChoice = NULL; - topIdx = 0; - - Dict* dict = obj.getDict(); - Object obj1; - - combo = edit = multiselect = doNotSpellCheck = doCommitOnSelChange = false; - - if (Form::fieldLookup(dict, "Ff", &obj1)->isInt()) { - int flags = obj1.getInt(); - if (flags & 0x20000) // 18 -> Combo - combo = true; - if (flags & 0x40000) // 19 -> Edit - edit = true; - if (flags & 0x200000) // 22 -> MultiSelect - multiselect = true; - if (flags & 0x400000) // 23 -> DoNotSpellCheck - doNotSpellCheck = true; - if (flags & 0x4000000) // 27 -> CommitOnSelChange - doCommitOnSelChange = true; - } - obj1.free(); - - if (dict->lookup("TI", &obj1)->isInt()) - topIdx = obj1.getInt(); - obj1.free(); - - if (dict->lookup("Opt", &obj1)->isArray()) { - Object obj2; - - numChoices = obj1.arrayGetLength(); - choices = new ChoiceOpt[numChoices]; - memset(choices, 0, sizeof(ChoiceOpt) * numChoices); - - for (int i = 0; i < numChoices; i++) { - if (obj1.arrayGet(i, &obj2)->isString()) { - choices[i].optionName = obj2.getString()->copy(); - } else if (obj2.isArray()) { // [Export_value, Displayed_text] - Object obj3; - - if (obj2.arrayGetLength() < 2) { - error(-1, "FormWidgetChoice:: invalid Opt entry -- array's length < 2\n"); - continue; - } - if (obj2.arrayGet(0, &obj3)->isString()) - choices[i].exportVal = obj3.getString()->copy(); - else - error(-1, "FormWidgetChoice:: invalid Opt entry -- exported value not a string\n"); - obj3.free(); - - if (obj2.arrayGet(1, &obj3)->isString()) - choices[i].optionName = obj3.getString()->copy(); - else - error(-1, "FormWidgetChoice:: invalid Opt entry -- choice name not a string\n"); - obj3.free(); - } else { - error(-1, "FormWidgetChoice:: invalid %d Opt entry\n", i); - } - obj2.free(); - } - } else { - //empty choice - } - obj1.free(); - - // find selected items and convert choice's human readable strings to UTF16 - if (Form::fieldLookup(dict, "V", &obj1)->isString()) { - for (int i = 0; i < numChoices; i++) { - if (!choices[i].optionName) - continue; - - if (choices[i].optionName->cmp(obj1.getString()) == 0) - choices[i].selected = true; - - if (!choices[i].optionName->hasUnicodeMarker()) { - int len; - char* buffer = pdfDocEncodingToUTF16(choices[i].optionName, &len); - choices[i].optionName->Set(buffer, len); - delete [] buffer; - } - } - } else if (obj1.isArray()) { - for (int i = 0; i < numChoices; i++) { - if (!choices[i].optionName) - continue; - - for (int j = 0; j < obj1.arrayGetLength(); j++) { - Object obj2; - - obj1.arrayGet(i, &obj2); - if (choices[i].optionName->cmp(obj2.getString()) == 0) { - choices[i].selected = true; - obj2.free(); - break; - } - obj2.free(); - } - - if (!choices[i].optionName->hasUnicodeMarker()) { - int len; - char* buffer = pdfDocEncodingToUTF16(choices[i].optionName, &len); - choices[i].optionName->Set(buffer, len); - delete [] buffer; - } - } - } - obj1.free(); -} - -FormFieldChoice::~FormFieldChoice() -{ - for (int i = 0; i < numChoices; i++) { - delete choices[i].exportVal; - delete choices[i].optionName; - } - delete [] choices; - delete editedChoice; -} - -#ifdef DEBUG_FORMS -void FormFieldChoice::print(int indent) -{ - printf ("%*s- (%d %d): [choice] terminal: %s children: %d\n", indent, "", ref.num, ref.gen, - terminal ? "Yes" : "No", numChildren); -} -#endif - -void FormFieldChoice::updateSelection() { - Object obj1; - - //this is an editable combo-box with user-entered text - if (edit && editedChoice) { - obj1.initString(editedChoice->copy()); - } else { - int numSelected = getNumSelected(); - if (numSelected == 0) { - obj1.initString(new GooString("")); - } else if (numSelected == 1) { - for (int i = 0; numChoices; i++) { - if (choices[i].optionName && choices[i].selected) { - obj1.initString(choices[i].optionName->copy()); - break; - } - } - } else { - obj1.initArray(xref); - for (int i = 0; i < numChoices; i++) { - if (choices[i].optionName && choices[i].selected) { - Object obj2; - obj2.initString(choices[i].optionName->copy()); - obj1.arrayAdd(&obj2); - } - } - } - } - - obj.getDict()->set("V", &obj1); - xref->setModifiedObject(&obj, ref); - modified = gTrue; -} - -void FormFieldChoice::unselectAll () -{ - for (int i = 0; i < numChoices; i++) { - choices[i].selected = false; - } -} - -void FormFieldChoice::deselectAll () { - unselectAll(); - updateSelection(); -} - -void FormFieldChoice::toggle (int i) -{ - choices[i].selected = !choices[i].selected; - updateSelection(); -} - -void FormFieldChoice::select (int i) -{ - if (!multiselect) - unselectAll(); - choices[i].selected = true; - updateSelection(); -} - -void FormFieldChoice::setEditChoice (GooString* new_content) -{ - delete editedChoice; - editedChoice = NULL; - - unselectAll(); - - if (new_content) { - editedChoice = new_content->copy(); - - //append the unicode marker <FE FF> if needed - if (!editedChoice->hasUnicodeMarker()) { - editedChoice->insert(0, 0xff); - editedChoice->insert(0, 0xfe); - } - } - updateSelection(); -} - -GooString* FormFieldChoice::getEditChoice () -{ - return editedChoice; -} - -int FormFieldChoice::getNumSelected () -{ - int cnt = 0; - for(int i=0; i<numChoices; i++) { - if (choices[i].selected) - cnt++; - } - return cnt; -} - -GooString *FormFieldChoice::getSelectedChoice() { - if (edit && editedChoice) - return editedChoice; - - for (int i = 0; i < numChoices; i++) { - if (choices[i].optionName && choices[i].selected) - return choices[i].optionName; - } - - return NULL; -} - -//------------------------------------------------------------------------ -// FormFieldSignature -//------------------------------------------------------------------------ -FormFieldSignature::FormFieldSignature(XRef *xrefA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents) - : FormField(xrefA, dict, ref, parent, usedParents, formSignature) -{ -} - -FormFieldSignature::~FormFieldSignature() -{ - -} - -#ifdef DEBUG_FORMS -void FormFieldSignature::print(int indent) -{ - printf ("%*s- (%d %d): [signature] terminal: %s children: %d\n", indent, "", ref.num, ref.gen, - terminal ? "Yes" : "No", numChildren); -} -#endif - -//------------------------------------------------------------------------ -// Form -//------------------------------------------------------------------------ - -Form::Form(XRef *xrefA, Object* acroFormA) -{ - Object obj1; - - xref = xrefA; - acroForm = acroFormA; - - size = 0; - numFields = 0; - rootFields = NULL; - quadding = quaddingLeftJustified; - defaultAppearance = NULL; - defaultResources = NULL; - - acroForm->dictLookup("NeedAppearances", &obj1); - needAppearances = (obj1.isBool() && obj1.getBool()); - obj1.free(); - - if (acroForm->dictLookup("DA", &obj1)->isString()) - defaultAppearance = obj1.getString()->copy(); - obj1.free(); - - if (acroForm->dictLookup("Q", &obj1)->isInt()) - quadding = static_cast<VariableTextQuadding>(obj1.getInt()); - obj1.free(); - - acroForm->dictLookup("DR", &resDict); - if (resDict.isDict()) { - // At a minimum, this dictionary shall contain a Font entry - if (resDict.dictLookup("Font", &obj1)->isDict()) - defaultResources = new GfxResources(xref, resDict.getDict(), NULL); - obj1.free(); - } - if (!defaultResources) { - resDict.free(); - resDict.initNull(); - } - - acroForm->dictLookup("Fields", &obj1); - if (obj1.isArray()) { - Array *array = obj1.getArray(); - Object obj2; - - for(int i=0; i<array->getLength(); i++) { - Object oref; - array->get(i, &obj2); - array->getNF(i, &oref); - if (!oref.isRef()) { - error(-1, "Direct object in rootFields"); - obj2.free(); - oref.free(); - continue; - } - - if (!obj2.isDict()) { - error(-1, "Reference in Fields array to an invalid or non existant object"); - obj2.free(); - oref.free(); - continue; - } - - if (numFields >= size) { - size += 16; - rootFields = (FormField**)greallocn(rootFields,size,sizeof(FormField*)); - } - - std::set<int> usedParents; - rootFields[numFields++] = createFieldFromDict (&obj2, xrefA, oref.getRef(), NULL, &usedParents); - - obj2.free(); - oref.free(); - } - } else { - error(-1, "Can't get Fields array\n"); - } - obj1.free (); - -#ifdef DEBUG_FORMS - for (int i = 0; i < numFields; i++) - rootFields[i]->printTree(); -#endif -} - -Form::~Form() { - int i; - for(i = 0; i< numFields; ++i) - delete rootFields[i]; - gfree (rootFields); - delete defaultAppearance; - delete defaultResources; - resDict.free(); -} - -// Look up an inheritable field dictionary entry. -static Object *fieldLookup(Dict *field, char *key, Object *obj, std::set<int> *usedParents) { - Dict *dict; - Object parent; - - dict = field; - if (!dict->lookup(key, obj)->isNull()) { - return obj; - } - obj->free(); - dict->lookupNF("Parent", &parent); - if (parent.isRef()) { - const Ref ref = parent.getRef(); - if (usedParents->find(ref.num) == usedParents->end()) { - usedParents->insert(ref.num); - - Object obj2; - parent.fetch(dict->getXRef(), &obj2); - if (obj2.isDict()) { - fieldLookup(obj2.getDict(), key, obj, usedParents); - } else { - obj->initNull(); - } - obj2.free(); - } - } else if (parent.isDict()) { - fieldLookup(parent.getDict(), key, obj, usedParents); - } else { - obj->initNull(); - } - parent.free(); - return obj; -} - -Object *Form::fieldLookup(Dict *field, char *key, Object *obj) { - std::set<int> usedParents; - return ::fieldLookup(field, key, obj, &usedParents); -} - -FormField *Form::createFieldFromDict (Object* obj, XRef *xrefA, const Ref& pref, FormField *parent, std::set<int> *usedParents) -{ - Object obj2; - FormField *field; - - if (Form::fieldLookup(obj->getDict (), "FT", &obj2)->isName("Btn")) { - field = new FormFieldButton(xrefA, obj, pref, parent, usedParents); - } else if (obj2.isName("Tx")) { - field = new FormFieldText(xrefA, obj, pref, parent, usedParents); - } else if (obj2.isName("Ch")) { - field = new FormFieldChoice(xrefA, obj, pref, parent, usedParents); - } else if (obj2.isName("Sig")) { - field = new FormFieldSignature(xrefA, obj, pref, parent, usedParents); - } else { //we don't have an FT entry => non-terminal field - field = new FormField(xrefA, obj, pref, parent, usedParents); - } - obj2.free(); - - return field; -} - -void Form::postWidgetsLoad (Catalog *catalog) -{ - // We create the widget annotations associated to - // every form widget here, because the AnnotWidget constructor - // needs the form object that gets from the catalog. When constructing - // a FormWidget the Catalog is still creating the form object - for (int i = 0; i < numFields; i++) { - rootFields[i]->fillChildrenSiblingsID(); - rootFields[i]->createWidgetAnnotations(catalog); - } -} - -FormWidget* Form::findWidgetByRef (Ref aref) -{ - for(int i=0; i<numFields; i++) { - FormWidget *result = rootFields[i]->findWidgetByRef(aref); - if(result) return result; - } - return NULL; -} - -//------------------------------------------------------------------------ -// FormPageWidgets -//------------------------------------------------------------------------ - -FormPageWidgets::FormPageWidgets (Annots *annots, unsigned int page, Form *form) -{ - numWidgets = 0; - widgets = NULL; - - if (annots && annots->getNumAnnots() > 0 && form) { - size = annots->getNumAnnots(); - widgets = (FormWidget**)greallocn(widgets, size, sizeof(FormWidget*)); - - /* For each entry in the page 'Annots' dict, try to find - a matching form field */ - for (int i = 0; i < size; ++i) { - Annot *annot = annots->getAnnot(i); - - if (annot->getType() != Annot::typeWidget) - continue; - - if (!annot->getHasRef()) { - /* Since all entry in a form field's kid dict needs to be - indirect references, if this annot isn't indirect, it isn't - related to a form field */ - continue; - } - - Ref r = annot->getRef(); - - /* Try to find a form field which either has this Annot in its Kids entry - or is merged with this Annot */ - FormWidget* tmp = form->findWidgetByRef(r); - if (tmp) { - // We've found a corresponding form field, link it - tmp->setID(FormWidget::encodeID(page, numWidgets)); - widgets[numWidgets++] = tmp; - } - } - } -} - -FormPageWidgets::~FormPageWidgets() -{ - gfree (widgets); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Form.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Form.h deleted file mode 100644 index 0cfc95bd722..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Form.h +++ /dev/null @@ -1,549 +0,0 @@ -//======================================================================== -// -// Form.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2006 Julien Rebetez <julienr@svn.gnome.org> -// Copyright 2007, 2008, 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright 2007-2010 Albert Astals Cid <aacid@kde.org> -// Copyright 2010 Mark Riedesel <mark@klowner.com> -// Copyright 2011 Pino Toscano <pino@kde.org> -// -//======================================================================== - -#ifndef FORM_H -#define FORM_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -#include <set> - -class GooString; -class Array; -class Dict; -class Annot; -class AnnotWidget; -class Annots; -class Catalog; -class LinkAction; -class GfxResources; - -enum FormFieldType { - formButton, - formText, - formChoice, - formSignature, - formUndef -}; - -enum FormButtonType { - formButtonCheck, - formButtonPush, - formButtonRadio -}; - -enum VariableTextQuadding { - quaddingLeftJustified, - quaddingCentered, - quaddingRightJustified -}; - -class Form; -class FormField; -class FormFieldButton; -class FormFieldText; -class FormFieldSignature; -class FormFieldChoice; - -//------------------------------------------------------------------------ -// FormWidget -// A FormWidget represents the graphical part of a field and is "attached" -// to a page. -//------------------------------------------------------------------------ - -class FormWidget { -public: - virtual ~FormWidget(); - - // Check if point is inside the field bounding rect - GBool inRect(double x, double y) const; - - // Get the field bounding rect - void getRect(double *x1, double *y1, double *x2, double *y2) const; - - unsigned getID () { return ID; } - void setID (unsigned int i) { ID=i; } - - FormField *getField () { return field; } - FormFieldType getType() { return type; } - - Object* getObj() { return &obj; } - Ref getRef() { return ref; } - - void setChildNum (unsigned i) { childNum = i; } - unsigned getChildNum () { return childNum; } - - double getFontSize() const; - - GooString *getPartialName() const; - GooString *getAlternateUiName() const; - GooString *getMappingName() const; - GooString *getFullyQualifiedName(); - - GBool isModified () const; - - bool isReadOnly() const; - - LinkAction *getActivationAction(); - - // return the unique ID corresponding to pageNum/fieldNum - static int encodeID (unsigned pageNum, unsigned fieldNum); - // decode id and retrieve pageNum and fieldNum - static void decodeID (unsigned id, unsigned* pageNum, unsigned* fieldNum); - - void createWidgetAnnotation(Catalog *catalog); - AnnotWidget *getWidgetAnnotation() const { return widget; } - -#ifdef DEBUG_FORMS - void print(int indent = 0); -#endif - -protected: - FormWidget(XRef *xrefA, Object *aobj, unsigned num, Ref aref, FormField *fieldA); - - AnnotWidget *widget; - FormField* field; - FormFieldType type; - Object obj; - Ref ref; - XRef *xref; - - //index of this field in the parent's child list - unsigned childNum; - - /* - Field ID is an (unsigned) integer, calculated as follow : - the first sizeof/2 bits are the field number, relative to the page - the last sizeof/2 bits are the page number - [page number | field number] - (encoding) id = (pageNum << 4*sizeof(unsigned)) + fieldNum; - (decoding) pageNum = id >> 4*sizeof(unsigned); fieldNum = (id << 4*sizeof(unsigned)) >> 4*sizeof(unsigned); - */ - unsigned ID; -}; - -//------------------------------------------------------------------------ -// FormWidgetButton -//------------------------------------------------------------------------ - -class FormWidgetButton: public FormWidget { -public: - FormWidgetButton(XRef *xrefA, Object *dict, unsigned num, Ref ref, FormField *p); - ~FormWidgetButton (); - - FormButtonType getButtonType() const; - - void setState (GBool state); - GBool getState (); - - char* getOnStr(); - void setAppearanceState(char *state); - - void setNumSiblingsID (int i); - void setSiblingsID (int i, unsigned id) { siblingsID[i] = id; } - - //For radio buttons, return the IDs of the other radio buttons in the same group - unsigned* getSiblingsID () const { return siblingsID; } - int getNumSiblingsID () const { return numSiblingsID; } - -protected: - unsigned* siblingsID; // IDs of dependent buttons (each button of a radio field has all the others buttons - // of the same field in this array) - int numSiblingsID; - GooString *onStr; - FormFieldButton *parent; -}; - -//------------------------------------------------------------------------ -// FormWidgetText -//------------------------------------------------------------------------ - -class FormWidgetText: public FormWidget { -public: - FormWidgetText(XRef *xrefA, Object *dict, unsigned num, Ref ref, FormField *p); - //return the field's content (UTF16BE) - GooString* getContent() ; - //return a copy of the field's content (UTF16BE) - GooString* getContentCopy(); - - //except a UTF16BE string - void setContent(GooString* new_content); - - bool isMultiline () const; - bool isPassword () const; - bool isFileSelect () const; - bool noSpellCheck () const; - bool noScroll () const; - bool isComb () const; - bool isRichText () const; - int getMaxLen () const; -protected: - FormFieldText *parent; -}; - -//------------------------------------------------------------------------ -// FormWidgetChoice -//------------------------------------------------------------------------ - -class FormWidgetChoice: public FormWidget { -public: - FormWidgetChoice(XRef *xrefA, Object *dict, unsigned num, Ref ref, FormField *p); - ~FormWidgetChoice(); - - int getNumChoices(); - //return the display name of the i-th choice (UTF16BE) - GooString* getChoice(int i); - //select the i-th choice - void select (int i); - - //toggle selection of the i-th choice - void toggle (int i); - - //deselect everything - void deselectAll (); - - //except a UTF16BE string - //only work for editable combo box, set the user-entered text as the current choice - void setEditChoice(GooString* new_content); - - GooString* getEditChoice (); - - bool isSelected (int i); - - bool isCombo () const; - bool hasEdit () const; - bool isMultiSelect () const; - bool noSpellCheck () const; - bool commitOnSelChange () const; - bool isListBox () const; -protected: - bool _checkRange (int i); - FormFieldChoice *parent; -}; - -//------------------------------------------------------------------------ -// FormWidgetSignature -//------------------------------------------------------------------------ - -class FormWidgetSignature: public FormWidget { -public: - FormWidgetSignature(XRef *xrefA, Object *dict, unsigned num, Ref ref, FormField *p); -protected: - FormFieldSignature *parent; -}; - -//------------------------------------------------------------------------ -// FormField -// A FormField implements the logical side of a field and is "attached" to -// the Catalog. This is an internal class and client applications should -// only interact with FormWidgets. -//------------------------------------------------------------------------ - -class FormField { -public: - FormField(XRef* xrefa, Object *aobj, const Ref& aref, FormField *parent, std::set<int> *usedParents, FormFieldType t=formUndef); - - virtual ~FormField(); - - // Accessors. - FormFieldType getType() { return type; } - Object* getObj() { return &obj; } - Ref getRef() { return ref; } - - void setReadOnly (bool b) { readOnly = b; } - bool isReadOnly () const { return readOnly; } - - GBool isModified () const; - - GooString* getDefaultAppearance() const { return defaultAppearance; } - GBool hasTextQuadding() const { return hasQuadding; } - VariableTextQuadding getTextQuadding() const { return quadding; } - - GooString *getPartialName() const { return partialName; } - GooString *getAlternateUiName() const { return alternateUiName; } - GooString *getMappingName() const { return mappingName; } - GooString *getFullyQualifiedName(); - - FormWidget* findWidgetByRef (Ref aref); - FormWidget *getWidget(int i) { return terminal ? widgets[i] : NULL; } - - // only implemented in FormFieldButton - virtual void fillChildrenSiblingsID (); - - void createWidgetAnnotations(Catalog *catalog); - -#ifdef DEBUG_FORMS - void printTree(int indent = 0); - virtual void print(int indent = 0); -#endif - - - protected: - void _createWidget (Object *obj, Ref aref); - void createChildren(std::set<int> *usedParents); - - FormFieldType type; // field type - Ref ref; - bool terminal; - Object obj; - XRef *xref; - FormField **children; - FormField *parent; - int numChildren; - FormWidget **widgets; - bool readOnly; - GBool modified; - - GooString *partialName; // T field - GooString *alternateUiName; // TU field - GooString *mappingName; // TM field - GooString *fullyQualifiedName; - - // Variable Text - GooString *defaultAppearance; - GBool hasQuadding; - VariableTextQuadding quadding; - -private: - FormField() {} -}; - - -//------------------------------------------------------------------------ -// FormFieldButton -//------------------------------------------------------------------------ - -class FormFieldButton: public FormField { -public: - FormFieldButton(XRef *xrefA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents); - - FormButtonType getButtonType () { return btype; } - - bool noToggleToOff () const { return noAllOff; } - - // returns gTrue if the state modification is accepted - GBool setState (char *state); - GBool getState(char *state); - - char *getAppearanceState() { return appearanceState.isName() ? appearanceState.getName() : NULL; } - - void fillChildrenSiblingsID (); - -#ifdef DEBUG_FORMS - void print(int indent = 0); -#endif - - virtual ~FormFieldButton(); -protected: - void updateState(char *state); - - FormButtonType btype; - int size; - int active_child; //only used for combo box - bool noAllOff; - Object appearanceState; // V -}; - -//------------------------------------------------------------------------ -// FormFieldText -//------------------------------------------------------------------------ - -class FormFieldText: public FormField { -public: - FormFieldText(XRef *xrefA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents); - - GooString* getContent () { return content; } - GooString* getContentCopy (); - void setContentCopy (GooString* new_content); - virtual ~FormFieldText(); - - bool isMultiline () const { return multiline; } - bool isPassword () const { return password; } - bool isFileSelect () const { return fileSelect; } - bool noSpellCheck () const { return doNotSpellCheck; } - bool noScroll () const { return doNotScroll; } - bool isComb () const { return comb; } - bool isRichText () const { return richText; } - - int getMaxLen () const { return maxLen; } - -#ifdef DEBUG_FORMS - void print(int indent = 0); -#endif -protected: - GooString* content; - bool multiline; - bool password; - bool fileSelect; - bool doNotSpellCheck; - bool doNotScroll; - bool comb; - bool richText; - int maxLen; -}; - -//------------------------------------------------------------------------ -// FormFieldChoice -//------------------------------------------------------------------------ - -class FormFieldChoice: public FormField { -public: - FormFieldChoice(XRef *xrefA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents); - - virtual ~FormFieldChoice(); - - int getNumChoices() { return numChoices; } - GooString* getChoice(int i) { return choices ? choices[i].optionName : NULL; } - GooString* getExportVal (int i) { return choices ? choices[i].exportVal : NULL; } - // For multi-select choices it returns the first one - GooString* getSelectedChoice(); - - //select the i-th choice - void select (int i); - - //toggle selection of the i-th choice - void toggle (int i); - - //deselect everything - void deselectAll (); - - //only work for editable combo box, set the user-entered text as the current choice - void setEditChoice(GooString* new_content); - - GooString* getEditChoice (); - - bool isSelected (int i) { return choices[i].selected; } - - int getNumSelected (); - - bool isCombo () const { return combo; } - bool hasEdit () const { return edit; } - bool isMultiSelect () const { return multiselect; } - bool noSpellCheck () const { return doNotSpellCheck; } - bool commitOnSelChange () const { return doCommitOnSelChange; } - bool isListBox () const { return !combo; } - - int getTopIndex() const { return topIdx; } - -#ifdef DEBUG_FORMS - void print(int indent = 0); -#endif - -protected: - void unselectAll(); - void updateSelection(); - - bool combo; - bool edit; - bool multiselect; - bool doNotSpellCheck; - bool doCommitOnSelChange; - - struct ChoiceOpt { - GooString* exportVal; //the export value ("internal" name) - GooString* optionName; //displayed name - bool selected; //if this choice is selected - }; - - int numChoices; - ChoiceOpt* choices; - GooString* editedChoice; - int topIdx; // TI -}; - -//------------------------------------------------------------------------ -// FormFieldSignature -//------------------------------------------------------------------------ - -class FormFieldSignature: public FormField { -public: - FormFieldSignature(XRef *xrefA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents); - - virtual ~FormFieldSignature(); - -#ifdef DEBUG_FORMS - void print(int indent = 0); -#endif -}; - -//------------------------------------------------------------------------ -// Form -// This class handle the document-wide part of Form (things in the acroForm -// Catalog entry). -//------------------------------------------------------------------------ - -class Form { -public: - Form(XRef *xrefA, Object* acroForm); - - ~Form(); - - // Look up an inheritable field dictionary entry. - static Object *fieldLookup(Dict *field, char *key, Object *obj); - - /* Creates a new Field of the type specified in obj's dict. - used in Form::Form and FormField::FormField */ - static FormField *createFieldFromDict (Object* obj, XRef *xref, const Ref& aref, FormField *parent, std::set<int> *usedParents); - - Object *getObj () const { return acroForm; } - GBool getNeedAppearances () const { return needAppearances; } - int getNumFields() const { return numFields; } - FormField* getRootField(int i) const { return rootFields[i]; } - GooString* getDefaultAppearance() const { return defaultAppearance; } - VariableTextQuadding getTextQuadding() const { return quadding; } - GfxResources* getDefaultResources() const { return defaultResources; } - Object* getDefaultResourcesObj() { return &resDict; } - - FormWidget* findWidgetByRef (Ref aref); - - void postWidgetsLoad(Catalog *catalog); -private: - FormField** rootFields; - int numFields; - int size; - XRef* xref; - Object *acroForm; - GBool needAppearances; - GfxResources *defaultResources; - Object resDict; - - // Variable Text - GooString *defaultAppearance; - VariableTextQuadding quadding; -}; - -//------------------------------------------------------------------------ -// FormPageWidgets -//------------------------------------------------------------------------ - -class FormPageWidgets { -public: - FormPageWidgets (Annots* annots, unsigned int page, Form *form); - ~FormPageWidgets(); - - int getNumWidgets() const { return numWidgets; } - FormWidget* getWidget(int i) const { return widgets[i]; } - -private: - FormWidget** widgets; - int numWidgets; - int size; -}; - -#endif - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Function.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Function.cc deleted file mode 100644 index b63ae8180a9..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Function.cc +++ /dev/null @@ -1,1627 +0,0 @@ -//======================================================================== -// -// Function.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006, 2008-2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2006 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> -// Copyright (C) 2011 Andrea Canciani <ranma42@gmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include <math.h> -#include "goo/gmem.h" -#include "goo/gstrtod.h" -#include "Object.h" -#include "Dict.h" -#include "Stream.h" -#include "Error.h" -#include "Function.h" - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -//------------------------------------------------------------------------ -// Function -//------------------------------------------------------------------------ - -Function::Function() { -} - -Function::~Function() { -} - -Function *Function::parse(Object *funcObj) { - std::set<int> usedParents; - return parse(funcObj, &usedParents); -} - -Function *Function::parse(Object *funcObj, std::set<int> *usedParents) { - Function *func; - Dict *dict; - int funcType; - Object obj1; - - if (funcObj->isStream()) { - dict = funcObj->streamGetDict(); - } else if (funcObj->isDict()) { - dict = funcObj->getDict(); - } else if (funcObj->isName("Identity")) { - return new IdentityFunction(); - } else { - error(-1, "Expected function dictionary or stream"); - return NULL; - } - - if (!dict->lookup("FunctionType", &obj1)->isInt()) { - error(-1, "Function type is missing or wrong type"); - obj1.free(); - return NULL; - } - funcType = obj1.getInt(); - obj1.free(); - - if (funcType == 0) { - func = new SampledFunction(funcObj, dict); - } else if (funcType == 2) { - func = new ExponentialFunction(funcObj, dict); - } else if (funcType == 3) { - func = new StitchingFunction(funcObj, dict, usedParents); - } else if (funcType == 4) { - func = new PostScriptFunction(funcObj, dict); - } else { - error(-1, "Unimplemented function type (%d)", funcType); - return NULL; - } - if (!func->isOk()) { - delete func; - return NULL; - } - - return func; -} - -GBool Function::init(Dict *dict) { - Object obj1, obj2; - int i; - - //----- Domain - if (!dict->lookup("Domain", &obj1)->isArray()) { - error(-1, "Function is missing domain"); - goto err2; - } - m = obj1.arrayGetLength() / 2; - if (m > funcMaxInputs) { - error(-1, "Functions with more than %d inputs are unsupported", - funcMaxInputs); - goto err2; - } - for (i = 0; i < m; ++i) { - obj1.arrayGet(2*i, &obj2); - if (!obj2.isNum()) { - error(-1, "Illegal value in function domain array"); - goto err1; - } - domain[i][0] = obj2.getNum(); - obj2.free(); - obj1.arrayGet(2*i+1, &obj2); - if (!obj2.isNum()) { - error(-1, "Illegal value in function domain array"); - goto err1; - } - domain[i][1] = obj2.getNum(); - obj2.free(); - } - obj1.free(); - - //----- Range - hasRange = gFalse; - n = 0; - if (dict->lookup("Range", &obj1)->isArray()) { - hasRange = gTrue; - n = obj1.arrayGetLength() / 2; - if (n > funcMaxOutputs) { - error(-1, "Functions with more than %d outputs are unsupported", - funcMaxOutputs); - goto err2; - } - for (i = 0; i < n; ++i) { - obj1.arrayGet(2*i, &obj2); - if (!obj2.isNum()) { - error(-1, "Illegal value in function range array"); - goto err1; - } - range[i][0] = obj2.getNum(); - obj2.free(); - obj1.arrayGet(2*i+1, &obj2); - if (!obj2.isNum()) { - error(-1, "Illegal value in function range array"); - goto err1; - } - range[i][1] = obj2.getNum(); - obj2.free(); - } - } - obj1.free(); - - return gTrue; - - err1: - obj2.free(); - err2: - obj1.free(); - return gFalse; -} - -//------------------------------------------------------------------------ -// IdentityFunction -//------------------------------------------------------------------------ - -IdentityFunction::IdentityFunction() { - int i; - - // fill these in with arbitrary values just in case they get used - // somewhere - m = funcMaxInputs; - n = funcMaxOutputs; - for (i = 0; i < funcMaxInputs; ++i) { - domain[i][0] = 0; - domain[i][1] = 1; - } - hasRange = gFalse; -} - -IdentityFunction::~IdentityFunction() { -} - -void IdentityFunction::transform(double *in, double *out) { - int i; - - for (i = 0; i < funcMaxOutputs; ++i) { - out[i] = in[i]; - } -} - -//------------------------------------------------------------------------ -// SampledFunction -//------------------------------------------------------------------------ - -SampledFunction::SampledFunction(Object *funcObj, Dict *dict) { - Stream *str; - int sampleBits; - double sampleMul; - Object obj1, obj2; - Guint buf, bitMask; - int bits; - Guint s; - int i; - - samples = NULL; - sBuf = NULL; - ok = gFalse; - - //----- initialize the generic stuff - if (!init(dict)) { - goto err1; - } - if (!hasRange) { - error(-1, "Type 0 function is missing range"); - goto err1; - } - if (m > sampledFuncMaxInputs) { - error(-1, "Sampled functions with more than %d inputs are unsupported", - sampledFuncMaxInputs); - goto err1; - } - - //----- buffer - sBuf = (double *)gmallocn(1 << m, sizeof(double)); - - //----- get the stream - if (!funcObj->isStream()) { - error(-1, "Type 0 function isn't a stream"); - goto err1; - } - str = funcObj->getStream(); - - //----- Size - if (!dict->lookup("Size", &obj1)->isArray() || - obj1.arrayGetLength() != m) { - error(-1, "Function has missing or invalid size array"); - goto err2; - } - for (i = 0; i < m; ++i) { - obj1.arrayGet(i, &obj2); - if (!obj2.isInt()) { - error(-1, "Illegal value in function size array"); - goto err3; - } - sampleSize[i] = obj2.getInt(); - obj2.free(); - } - obj1.free(); - idxMul[0] = n; - for (i = 1; i < m; ++i) { - idxMul[i] = idxMul[i-1] * sampleSize[i-1]; - } - - //----- BitsPerSample - if (!dict->lookup("BitsPerSample", &obj1)->isInt()) { - error(-1, "Function has missing or invalid BitsPerSample"); - goto err2; - } - sampleBits = obj1.getInt(); - sampleMul = 1.0 / (pow(2.0, (double)sampleBits) - 1); - obj1.free(); - - //----- Encode - if (dict->lookup("Encode", &obj1)->isArray() && - obj1.arrayGetLength() == 2*m) { - for (i = 0; i < m; ++i) { - obj1.arrayGet(2*i, &obj2); - if (!obj2.isNum()) { - error(-1, "Illegal value in function encode array"); - goto err3; - } - encode[i][0] = obj2.getNum(); - obj2.free(); - obj1.arrayGet(2*i+1, &obj2); - if (!obj2.isNum()) { - error(-1, "Illegal value in function encode array"); - goto err3; - } - encode[i][1] = obj2.getNum(); - obj2.free(); - } - } else { - for (i = 0; i < m; ++i) { - encode[i][0] = 0; - encode[i][1] = sampleSize[i] - 1; - } - } - obj1.free(); - for (i = 0; i < m; ++i) { - inputMul[i] = (encode[i][1] - encode[i][0]) / - (domain[i][1] - domain[i][0]); - } - - //----- Decode - if (dict->lookup("Decode", &obj1)->isArray() && - obj1.arrayGetLength() == 2*n) { - for (i = 0; i < n; ++i) { - obj1.arrayGet(2*i, &obj2); - if (!obj2.isNum()) { - error(-1, "Illegal value in function decode array"); - goto err3; - } - decode[i][0] = obj2.getNum(); - obj2.free(); - obj1.arrayGet(2*i+1, &obj2); - if (!obj2.isNum()) { - error(-1, "Illegal value in function decode array"); - goto err3; - } - decode[i][1] = obj2.getNum(); - obj2.free(); - } - } else { - for (i = 0; i < n; ++i) { - decode[i][0] = range[i][0]; - decode[i][1] = range[i][1]; - } - } - obj1.free(); - - //----- samples - nSamples = n; - for (i = 0; i < m; ++i) - nSamples *= sampleSize[i]; - samples = (double *)gmallocn(nSamples, sizeof(double)); - buf = 0; - bits = 0; - bitMask = (1 << sampleBits) - 1; - str->reset(); - for (i = 0; i < nSamples; ++i) { - if (sampleBits == 8) { - s = str->getChar(); - } else if (sampleBits == 16) { - s = str->getChar(); - s = (s << 8) + str->getChar(); - } else if (sampleBits == 32) { - s = str->getChar(); - s = (s << 8) + str->getChar(); - s = (s << 8) + str->getChar(); - s = (s << 8) + str->getChar(); - } else { - while (bits < sampleBits) { - buf = (buf << 8) | (str->getChar() & 0xff); - bits += 8; - } - s = (buf >> (bits - sampleBits)) & bitMask; - bits -= sampleBits; - } - samples[i] = (double)s * sampleMul; - } - str->close(); - - ok = gTrue; - return; - - err3: - obj2.free(); - err2: - obj1.free(); - err1: - return; -} - -SampledFunction::~SampledFunction() { - if (samples) { - gfree(samples); - } - if (sBuf) { - gfree(sBuf); - } -} - -SampledFunction::SampledFunction(SampledFunction *func) { - memcpy(this, func, sizeof(SampledFunction)); - samples = (double *)gmallocn(nSamples, sizeof(double)); - memcpy(samples, func->samples, nSamples * sizeof(double)); - sBuf = (double *)gmallocn(1 << m, sizeof(double)); -} - -void SampledFunction::transform(double *in, double *out) { - double x; - int e[funcMaxInputs][2]; - double efrac0[funcMaxInputs]; - double efrac1[funcMaxInputs]; - int i, j, k, idx, t; - - // map input values into sample array - for (i = 0; i < m; ++i) { - x = (in[i] - domain[i][0]) * inputMul[i] + encode[i][0]; - if (x < 0) { - x = 0; - } else if (x > sampleSize[i] - 1) { - x = sampleSize[i] - 1; - } - e[i][0] = (int)x; - if ((e[i][1] = e[i][0] + 1) >= sampleSize[i]) { - // this happens if in[i] = domain[i][1] - e[i][1] = e[i][0]; - } - efrac1[i] = x - e[i][0]; - efrac0[i] = 1 - efrac1[i]; - } - - // for each output, do m-linear interpolation - for (i = 0; i < n; ++i) { - - // pull 2^m values out of the sample array - for (j = 0; j < (1<<m); ++j) { - idx = i; - for (k = 0, t = j; k < m; ++k, t >>= 1) { - idx += idxMul[k] * (e[k][t & 1]); - } - if (likely(idx >= 0 && idx < nSamples)) { - sBuf[j] = samples[idx]; - } else { - sBuf[j] = 0; // TODO Investigate if this is what Adobe does - } - } - - // do m sets of interpolations - for (j = 0, t = (1<<m); j < m; ++j, t >>= 1) { - for (k = 0; k < t; k += 2) { - sBuf[k >> 1] = efrac0[j] * sBuf[k] + efrac1[j] * sBuf[k+1]; - } - } - - // map output value to range - out[i] = sBuf[0] * (decode[i][1] - decode[i][0]) + decode[i][0]; - if (out[i] < range[i][0]) { - out[i] = range[i][0]; - } else if (out[i] > range[i][1]) { - out[i] = range[i][1]; - } - } -} - -//------------------------------------------------------------------------ -// ExponentialFunction -//------------------------------------------------------------------------ - -ExponentialFunction::ExponentialFunction(Object *funcObj, Dict *dict) { - Object obj1, obj2; - int i; - - ok = gFalse; - - //----- initialize the generic stuff - if (!init(dict)) { - goto err1; - } - if (m != 1) { - error(-1, "Exponential function with more than one input"); - goto err1; - } - - //----- C0 - if (dict->lookup("C0", &obj1)->isArray()) { - if (hasRange && obj1.arrayGetLength() != n) { - error(-1, "Function's C0 array is wrong length"); - goto err2; - } - n = obj1.arrayGetLength(); - for (i = 0; i < n; ++i) { - obj1.arrayGet(i, &obj2); - if (!obj2.isNum()) { - error(-1, "Illegal value in function C0 array"); - goto err3; - } - c0[i] = obj2.getNum(); - obj2.free(); - } - } else { - if (hasRange && n != 1) { - error(-1, "Function's C0 array is wrong length"); - goto err2; - } - n = 1; - c0[0] = 0; - } - obj1.free(); - - //----- C1 - if (dict->lookup("C1", &obj1)->isArray()) { - if (obj1.arrayGetLength() != n) { - error(-1, "Function's C1 array is wrong length"); - goto err2; - } - for (i = 0; i < n; ++i) { - obj1.arrayGet(i, &obj2); - if (!obj2.isNum()) { - error(-1, "Illegal value in function C1 array"); - goto err3; - } - c1[i] = obj2.getNum(); - obj2.free(); - } - } else { - if (n != 1) { - error(-1, "Function's C1 array is wrong length"); - goto err2; - } - c1[0] = 1; - } - obj1.free(); - - //----- N (exponent) - if (!dict->lookup("N", &obj1)->isNum()) { - error(-1, "Function has missing or invalid N"); - goto err2; - } - e = obj1.getNum(); - obj1.free(); - - isLinear = fabs(e-1.) < 1e-10; - ok = gTrue; - return; - - err3: - obj2.free(); - err2: - obj1.free(); - err1: - return; -} - -ExponentialFunction::~ExponentialFunction() { -} - -ExponentialFunction::ExponentialFunction(ExponentialFunction *func) { - memcpy(this, func, sizeof(ExponentialFunction)); -} - -void ExponentialFunction::transform(double *in, double *out) { - double x; - int i; - - if (in[0] < domain[0][0]) { - x = domain[0][0]; - } else if (in[0] > domain[0][1]) { - x = domain[0][1]; - } else { - x = in[0]; - } - for (i = 0; i < n; ++i) { - out[i] = c0[i] + (isLinear ? x : pow(x, e)) * (c1[i] - c0[i]); - if (hasRange) { - if (out[i] < range[i][0]) { - out[i] = range[i][0]; - } else if (out[i] > range[i][1]) { - out[i] = range[i][1]; - } - } - } - return; -} - -//------------------------------------------------------------------------ -// StitchingFunction -//------------------------------------------------------------------------ - -StitchingFunction::StitchingFunction(Object *funcObj, Dict *dict, std::set<int> *usedParents) { - Object obj1, obj2; - int i; - - ok = gFalse; - funcs = NULL; - bounds = NULL; - encode = NULL; - scale = NULL; - - //----- initialize the generic stuff - if (!init(dict)) { - goto err1; - } - if (m != 1) { - error(-1, "Stitching function with more than one input"); - goto err1; - } - - //----- Functions - if (!dict->lookup("Functions", &obj1)->isArray()) { - error(-1, "Missing 'Functions' entry in stitching function"); - goto err1; - } - k = obj1.arrayGetLength(); - funcs = (Function **)gmallocn(k, sizeof(Function *)); - bounds = (double *)gmallocn(k + 1, sizeof(double)); - encode = (double *)gmallocn(2 * k, sizeof(double)); - scale = (double *)gmallocn(k, sizeof(double)); - for (i = 0; i < k; ++i) { - funcs[i] = NULL; - } - for (i = 0; i < k; ++i) { - std::set<int> usedParentsAux = *usedParents; - obj1.arrayGetNF(i, &obj2); - if (obj2.isRef()) { - const Ref ref = obj2.getRef(); - if (usedParentsAux.find(ref.num) == usedParentsAux.end()) { - usedParentsAux.insert(ref.num); - obj2.free(); - obj1.arrayGet(i, &obj2); - } else { - goto err2; - } - } - if (!(funcs[i] = Function::parse(&obj2, &usedParentsAux))) { - goto err2; - } - if (i > 0 && (funcs[i]->getInputSize() != 1 || - funcs[i]->getOutputSize() != funcs[0]->getOutputSize())) { - error(-1, "Incompatible subfunctions in stitching function"); - goto err2; - } - obj2.free(); - } - obj1.free(); - - //----- Bounds - if (!dict->lookup("Bounds", &obj1)->isArray() || - obj1.arrayGetLength() != k - 1) { - error(-1, "Missing or invalid 'Bounds' entry in stitching function"); - goto err1; - } - bounds[0] = domain[0][0]; - for (i = 1; i < k; ++i) { - if (!obj1.arrayGet(i - 1, &obj2)->isNum()) { - error(-1, "Invalid type in 'Bounds' array in stitching function"); - goto err2; - } - bounds[i] = obj2.getNum(); - obj2.free(); - } - bounds[k] = domain[0][1]; - obj1.free(); - - //----- Encode - if (!dict->lookup("Encode", &obj1)->isArray() || - obj1.arrayGetLength() != 2 * k) { - error(-1, "Missing or invalid 'Encode' entry in stitching function"); - goto err1; - } - for (i = 0; i < 2 * k; ++i) { - if (!obj1.arrayGet(i, &obj2)->isNum()) { - error(-1, "Invalid type in 'Encode' array in stitching function"); - goto err2; - } - encode[i] = obj2.getNum(); - obj2.free(); - } - obj1.free(); - - //----- pre-compute the scale factors - for (i = 0; i < k; ++i) { - if (bounds[i] == bounds[i+1]) { - // avoid a divide-by-zero -- in this situation, function i will - // never be used anyway - scale[i] = 0; - } else { - scale[i] = (encode[2*i+1] - encode[2*i]) / (bounds[i+1] - bounds[i]); - } - } - - n = funcs[0]->getOutputSize(); - ok = gTrue; - return; - - err2: - obj2.free(); - err1: - obj1.free(); -} - -StitchingFunction::StitchingFunction(StitchingFunction *func) { - int i; - - memcpy(this, func, sizeof(StitchingFunction)); - - k = func->k; - funcs = (Function **)gmallocn(k, sizeof(Function *)); - for (i = 0; i < k; ++i) { - funcs[i] = func->funcs[i]->copy(); - } - bounds = (double *)gmallocn(k + 1, sizeof(double)); - memcpy(bounds, func->bounds, (k + 1) * sizeof(double)); - encode = (double *)gmallocn(2 * k, sizeof(double)); - memcpy(encode, func->encode, 2 * k * sizeof(double)); - scale = (double *)gmallocn(k, sizeof(double)); - memcpy(scale, func->scale, k * sizeof(double)); - ok = gTrue; -} - -StitchingFunction::~StitchingFunction() { - int i; - - if (funcs) { - for (i = 0; i < k; ++i) { - if (funcs[i]) { - delete funcs[i]; - } - } - } - gfree(funcs); - gfree(bounds); - gfree(encode); - gfree(scale); -} - -void StitchingFunction::transform(double *in, double *out) { - double x; - int i; - - if (in[0] < domain[0][0]) { - x = domain[0][0]; - } else if (in[0] > domain[0][1]) { - x = domain[0][1]; - } else { - x = in[0]; - } - for (i = 0; i < k - 1; ++i) { - if (x < bounds[i+1]) { - break; - } - } - x = encode[2*i] + (x - bounds[i]) * scale[i]; - funcs[i]->transform(&x, out); -} - -//------------------------------------------------------------------------ -// PostScriptFunction -//------------------------------------------------------------------------ - -enum PSOp { - psOpAbs, - psOpAdd, - psOpAnd, - psOpAtan, - psOpBitshift, - psOpCeiling, - psOpCopy, - psOpCos, - psOpCvi, - psOpCvr, - psOpDiv, - psOpDup, - psOpEq, - psOpExch, - psOpExp, - psOpFalse, - psOpFloor, - psOpGe, - psOpGt, - psOpIdiv, - psOpIndex, - psOpLe, - psOpLn, - psOpLog, - psOpLt, - psOpMod, - psOpMul, - psOpNe, - psOpNeg, - psOpNot, - psOpOr, - psOpPop, - psOpRoll, - psOpRound, - psOpSin, - psOpSqrt, - psOpSub, - psOpTrue, - psOpTruncate, - psOpXor, - psOpIf, - psOpIfelse, - psOpReturn -}; - -// Note: 'if' and 'ifelse' are parsed separately. -// The rest are listed here in alphabetical order. -// The index in this table is equivalent to the entry in PSOp. -static const char *psOpNames[] = { - "abs", - "add", - "and", - "atan", - "bitshift", - "ceiling", - "copy", - "cos", - "cvi", - "cvr", - "div", - "dup", - "eq", - "exch", - "exp", - "false", - "floor", - "ge", - "gt", - "idiv", - "index", - "le", - "ln", - "log", - "lt", - "mod", - "mul", - "ne", - "neg", - "not", - "or", - "pop", - "roll", - "round", - "sin", - "sqrt", - "sub", - "true", - "truncate", - "xor" -}; - -#define nPSOps (sizeof(psOpNames) / sizeof(char *)) - -enum PSObjectType { - psBool, - psInt, - psReal, - psOperator, - psBlock -}; - -// In the code array, 'if'/'ifelse' operators take up three slots -// plus space for the code in the subclause(s). -// -// +---------------------------------+ -// | psOperator: psOpIf / psOpIfelse | -// +---------------------------------+ -// | psBlock: ptr=<A> | -// +---------------------------------+ -// | psBlock: ptr=<B> | -// +---------------------------------+ -// | if clause | -// | ... | -// | psOperator: psOpReturn | -// +---------------------------------+ -// <A> | else clause | -// | ... | -// | psOperator: psOpReturn | -// +---------------------------------+ -// <B> | ... | -// -// For 'if', pointer <A> is present in the code stream but unused. - -struct PSObject { - PSObjectType type; - union { - GBool booln; // boolean (stack only) - int intg; // integer (stack and code) - double real; // real (stack and code) - PSOp op; // operator (code only) - int blk; // if/ifelse block pointer (code only) - }; -}; - -#define psStackSize 100 - -class PSStack { -public: - - PSStack() {sp = psStackSize; } - void clear() { sp = psStackSize; } - void pushBool(GBool booln) - { - if (checkOverflow()) { - stack[--sp].type = psBool; - stack[sp].booln = booln; - } - } - void pushInt(int intg) - { - if (checkOverflow()) { - stack[--sp].type = psInt; - stack[sp].intg = intg; - } - } - void pushReal(double real) - { - if (checkOverflow()) { - stack[--sp].type = psReal; - stack[sp].real = real; - } - } - GBool popBool() - { - if (checkUnderflow() && checkType(psBool, psBool)) { - return stack[sp++].booln; - } - return gFalse; - } - int popInt() - { - if (checkUnderflow() && checkType(psInt, psInt)) { - return stack[sp++].intg; - } - return 0; - } - double popNum() - { - double ret; - - if (checkUnderflow() && checkType(psInt, psReal)) { - ret = (stack[sp].type == psInt) ? (double)stack[sp].intg : stack[sp].real; - ++sp; - return ret; - } - return 0; - } - GBool empty() { return sp == psStackSize; } - GBool topIsInt() { return sp < psStackSize && stack[sp].type == psInt; } - GBool topTwoAreInts() - { return sp < psStackSize - 1 && - stack[sp].type == psInt && - stack[sp+1].type == psInt; } - GBool topIsReal() { return sp < psStackSize && stack[sp].type == psReal; } - GBool topTwoAreNums() - { return sp < psStackSize - 1 && - (stack[sp].type == psInt || stack[sp].type == psReal) && - (stack[sp+1].type == psInt || stack[sp+1].type == psReal); } - void copy(int n); - void roll(int n, int j); - void index(int i) - { - if (!checkOverflow()) { - return; - } - --sp; - stack[sp] = stack[sp + 1 + i]; - } - void pop() - { - if (!checkUnderflow()) { - return; - } - ++sp; - } - -private: - - GBool checkOverflow(int n = 1) - { - if (sp - n < 0) { - error(-1, "Stack overflow in PostScript function"); - return gFalse; - } - return gTrue; - } - GBool checkUnderflow() - { - if (sp == psStackSize) { - error(-1, "Stack underflow in PostScript function"); - return gFalse; - } - return gTrue; - } - GBool checkType(PSObjectType t1, PSObjectType t2) - { - if (stack[sp].type != t1 && stack[sp].type != t2) { - error(-1, "Type mismatch in PostScript function"); - return gFalse; - } - return gTrue; - } - PSObject stack[psStackSize]; - int sp; -}; - - -void PSStack::copy(int n) { - int i; - - if (sp + n > psStackSize) { - error(-1, "Stack underflow in PostScript function"); - return; - } - if (!checkOverflow(n)) { - return; - } - for (i = sp + n - 1; i >= sp; --i) { - stack[i - n] = stack[i]; - } - sp -= n; -} - -void PSStack::roll(int n, int j) { - PSObject obj; - int i, k; - - if (unlikely(n == 0)) { - return; - } - if (j >= 0) { - j %= n; - } else { - j = -j % n; - if (j != 0) { - j = n - j; - } - } - if (n <= 0 || j == 0) { - return; - } - if (j <= n / 2) { - for (i = 0; i < j; ++i) { - obj = stack[sp]; - for (k = sp; k < sp + n - 1; ++k) { - stack[k] = stack[k+1]; - } - stack[sp + n - 1] = obj; - } - } else { - j = n - j; - for (i = 0; i < j; ++i) { - obj = stack[sp + n - 1]; - for (k = sp + n - 1; k > sp; --k) { - stack[k] = stack[k-1]; - } - stack[sp] = obj; - } - } -} - -PostScriptFunction::PostScriptFunction(Object *funcObj, Dict *dict) { - Stream *str; - int codePtr; - GooString *tok; - - code = NULL; - codeString = NULL; - codeSize = 0; - ok = gFalse; - - //----- initialize the generic stuff - if (!init(dict)) { - goto err1; - } - if (!hasRange) { - error(-1, "Type 4 function is missing range"); - goto err1; - } - - //----- get the stream - if (!funcObj->isStream()) { - error(-1, "Type 4 function isn't a stream"); - goto err1; - } - str = funcObj->getStream(); - - //----- parse the function - codeString = new GooString(); - str->reset(); - if (!(tok = getToken(str)) || tok->cmp("{")) { - error(-1, "Expected '{' at start of PostScript function"); - if (tok) { - delete tok; - } - goto err1; - } - delete tok; - codePtr = 0; - if (!parseCode(str, &codePtr)) { - goto err2; - } - str->close(); - - ok = gTrue; - - err2: - str->close(); - err1: - return; -} - -PostScriptFunction::PostScriptFunction(PostScriptFunction *func) { - memcpy(this, func, sizeof(PostScriptFunction)); - code = (PSObject *)gmallocn(codeSize, sizeof(PSObject)); - memcpy(code, func->code, codeSize * sizeof(PSObject)); - codeString = func->codeString->copy(); -} - -PostScriptFunction::~PostScriptFunction() { - gfree(code); - delete codeString; -} - -void PostScriptFunction::transform(double *in, double *out) { - PSStack stack; - int i; - - for (i = 0; i < m; ++i) { - //~ may need to check for integers here - stack.pushReal(in[i]); - } - exec(&stack, 0); - for (i = n - 1; i >= 0; --i) { - out[i] = stack.popNum(); - if (out[i] < range[i][0]) { - out[i] = range[i][0]; - } else if (out[i] > range[i][1]) { - out[i] = range[i][1]; - } - } - stack.clear(); - - // if (!stack.empty()) { - // error(-1, "Extra values on stack at end of PostScript function"); - // } -} - -GBool PostScriptFunction::parseCode(Stream *str, int *codePtr) { - GooString *tok; - char *p; - GBool isReal; - int opPtr, elsePtr; - int a, b, mid, cmp; - - while (1) { - if (!(tok = getToken(str))) { - error(-1, "Unexpected end of PostScript function stream"); - return gFalse; - } - p = tok->getCString(); - if (isdigit(*p) || *p == '.' || *p == '-') { - isReal = gFalse; - for (++p; *p; ++p) { - if (*p == '.') { - isReal = gTrue; - break; - } - } - resizeCode(*codePtr); - if (isReal) { - code[*codePtr].type = psReal; - code[*codePtr].real = gatof(tok->getCString()); - } else { - code[*codePtr].type = psInt; - code[*codePtr].intg = atoi(tok->getCString()); - } - ++*codePtr; - delete tok; - } else if (!tok->cmp("{")) { - delete tok; - opPtr = *codePtr; - *codePtr += 3; - resizeCode(opPtr + 2); - if (!parseCode(str, codePtr)) { - return gFalse; - } - if (!(tok = getToken(str))) { - error(-1, "Unexpected end of PostScript function stream"); - return gFalse; - } - if (!tok->cmp("{")) { - elsePtr = *codePtr; - if (!parseCode(str, codePtr)) { - return gFalse; - } - delete tok; - if (!(tok = getToken(str))) { - error(-1, "Unexpected end of PostScript function stream"); - return gFalse; - } - } else { - elsePtr = -1; - } - if (!tok->cmp("if")) { - if (elsePtr >= 0) { - error(-1, "Got 'if' operator with two blocks in PostScript function"); - return gFalse; - } - code[opPtr].type = psOperator; - code[opPtr].op = psOpIf; - code[opPtr+2].type = psBlock; - code[opPtr+2].blk = *codePtr; - } else if (!tok->cmp("ifelse")) { - if (elsePtr < 0) { - error(-1, "Got 'ifelse' operator with one blocks in PostScript function"); - return gFalse; - } - code[opPtr].type = psOperator; - code[opPtr].op = psOpIfelse; - code[opPtr+1].type = psBlock; - code[opPtr+1].blk = elsePtr; - code[opPtr+2].type = psBlock; - code[opPtr+2].blk = *codePtr; - } else { - error(-1, "Expected if/ifelse operator in PostScript function"); - delete tok; - return gFalse; - } - delete tok; - } else if (!tok->cmp("}")) { - delete tok; - resizeCode(*codePtr); - code[*codePtr].type = psOperator; - code[*codePtr].op = psOpReturn; - ++*codePtr; - break; - } else { - a = -1; - b = nPSOps; - // invariant: psOpNames[a] < tok < psOpNames[b] - while (b - a > 1) { - mid = (a + b) / 2; - cmp = tok->cmp(psOpNames[mid]); - if (cmp > 0) { - a = mid; - } else if (cmp < 0) { - b = mid; - } else { - a = b = mid; - } - } - if (cmp != 0) { - error(-1, "Unknown operator '%s' in PostScript function", - tok->getCString()); - delete tok; - return gFalse; - } - delete tok; - resizeCode(*codePtr); - code[*codePtr].type = psOperator; - code[*codePtr].op = (PSOp)a; - ++*codePtr; - } - } - return gTrue; -} - -GooString *PostScriptFunction::getToken(Stream *str) { - GooString *s; - int c; - GBool comment; - - s = new GooString(); - comment = gFalse; - while (1) { - if ((c = str->getChar()) == EOF) { - break; - } - codeString->append(c); - if (comment) { - if (c == '\x0a' || c == '\x0d') { - comment = gFalse; - } - } else if (c == '%') { - comment = gTrue; - } else if (!isspace(c)) { - break; - } - } - if (c == '{' || c == '}') { - s->append((char)c); - } else if (isdigit(c) || c == '.' || c == '-') { - while (1) { - s->append((char)c); - c = str->lookChar(); - if (c == EOF || !(isdigit(c) || c == '.' || c == '-')) { - break; - } - str->getChar(); - codeString->append(c); - } - } else { - while (1) { - s->append((char)c); - c = str->lookChar(); - if (c == EOF || !isalnum(c)) { - break; - } - str->getChar(); - codeString->append(c); - } - } - return s; -} - -void PostScriptFunction::resizeCode(int newSize) { - if (newSize >= codeSize) { - codeSize += 64; - code = (PSObject *)greallocn(code, codeSize, sizeof(PSObject)); - } -} - -void PostScriptFunction::exec(PSStack *stack, int codePtr) { - int i1, i2; - double r1, r2, result; - GBool b1, b2; - - while (1) { - switch (code[codePtr].type) { - case psInt: - stack->pushInt(code[codePtr++].intg); - break; - case psReal: - stack->pushReal(code[codePtr++].real); - break; - case psOperator: - switch (code[codePtr++].op) { - case psOpAbs: - if (stack->topIsInt()) { - stack->pushInt(abs(stack->popInt())); - } else { - stack->pushReal(fabs(stack->popNum())); - } - break; - case psOpAdd: - if (stack->topTwoAreInts()) { - i2 = stack->popInt(); - i1 = stack->popInt(); - stack->pushInt(i1 + i2); - } else { - r2 = stack->popNum(); - r1 = stack->popNum(); - stack->pushReal(r1 + r2); - } - break; - case psOpAnd: - if (stack->topTwoAreInts()) { - i2 = stack->popInt(); - i1 = stack->popInt(); - stack->pushInt(i1 & i2); - } else { - b2 = stack->popBool(); - b1 = stack->popBool(); - stack->pushBool(b1 && b2); - } - break; - case psOpAtan: - r2 = stack->popNum(); - r1 = stack->popNum(); - result = atan2(r1, r2) * 180.0 / M_PI; - if (result < 0) result += 360.0; - stack->pushReal(result); - break; - case psOpBitshift: - i2 = stack->popInt(); - i1 = stack->popInt(); - if (i2 > 0) { - stack->pushInt(i1 << i2); - } else if (i2 < 0) { - stack->pushInt((int)((Guint)i1 >> i2)); - } else { - stack->pushInt(i1); - } - break; - case psOpCeiling: - if (!stack->topIsInt()) { - stack->pushReal(ceil(stack->popNum())); - } - break; - case psOpCopy: - stack->copy(stack->popInt()); - break; - case psOpCos: - stack->pushReal(cos(stack->popNum() * M_PI / 180.0)); - break; - case psOpCvi: - if (!stack->topIsInt()) { - stack->pushInt((int)stack->popNum()); - } - break; - case psOpCvr: - if (!stack->topIsReal()) { - stack->pushReal(stack->popNum()); - } - break; - case psOpDiv: - r2 = stack->popNum(); - r1 = stack->popNum(); - stack->pushReal(r1 / r2); - break; - case psOpDup: - stack->copy(1); - break; - case psOpEq: - if (stack->topTwoAreInts()) { - i2 = stack->popInt(); - i1 = stack->popInt(); - stack->pushBool(i1 == i2); - } else if (stack->topTwoAreNums()) { - r2 = stack->popNum(); - r1 = stack->popNum(); - stack->pushBool(r1 == r2); - } else { - b2 = stack->popBool(); - b1 = stack->popBool(); - stack->pushBool(b1 == b2); - } - break; - case psOpExch: - stack->roll(2, 1); - break; - case psOpExp: - r2 = stack->popNum(); - r1 = stack->popNum(); - stack->pushReal(pow(r1, r2)); - break; - case psOpFalse: - stack->pushBool(gFalse); - break; - case psOpFloor: - if (!stack->topIsInt()) { - stack->pushReal(floor(stack->popNum())); - } - break; - case psOpGe: - if (stack->topTwoAreInts()) { - i2 = stack->popInt(); - i1 = stack->popInt(); - stack->pushBool(i1 >= i2); - } else { - r2 = stack->popNum(); - r1 = stack->popNum(); - stack->pushBool(r1 >= r2); - } - break; - case psOpGt: - if (stack->topTwoAreInts()) { - i2 = stack->popInt(); - i1 = stack->popInt(); - stack->pushBool(i1 > i2); - } else { - r2 = stack->popNum(); - r1 = stack->popNum(); - stack->pushBool(r1 > r2); - } - break; - case psOpIdiv: - i2 = stack->popInt(); - i1 = stack->popInt(); - stack->pushInt(i1 / i2); - break; - case psOpIndex: - stack->index(stack->popInt()); - break; - case psOpLe: - if (stack->topTwoAreInts()) { - i2 = stack->popInt(); - i1 = stack->popInt(); - stack->pushBool(i1 <= i2); - } else { - r2 = stack->popNum(); - r1 = stack->popNum(); - stack->pushBool(r1 <= r2); - } - break; - case psOpLn: - stack->pushReal(log(stack->popNum())); - break; - case psOpLog: - stack->pushReal(log10(stack->popNum())); - break; - case psOpLt: - if (stack->topTwoAreInts()) { - i2 = stack->popInt(); - i1 = stack->popInt(); - stack->pushBool(i1 < i2); - } else { - r2 = stack->popNum(); - r1 = stack->popNum(); - stack->pushBool(r1 < r2); - } - break; - case psOpMod: - i2 = stack->popInt(); - i1 = stack->popInt(); - stack->pushInt(i1 % i2); - break; - case psOpMul: - if (stack->topTwoAreInts()) { - i2 = stack->popInt(); - i1 = stack->popInt(); - //~ should check for out-of-range, and push a real instead - stack->pushInt(i1 * i2); - } else { - r2 = stack->popNum(); - r1 = stack->popNum(); - stack->pushReal(r1 * r2); - } - break; - case psOpNe: - if (stack->topTwoAreInts()) { - i2 = stack->popInt(); - i1 = stack->popInt(); - stack->pushBool(i1 != i2); - } else if (stack->topTwoAreNums()) { - r2 = stack->popNum(); - r1 = stack->popNum(); - stack->pushBool(r1 != r2); - } else { - b2 = stack->popBool(); - b1 = stack->popBool(); - stack->pushBool(b1 != b2); - } - break; - case psOpNeg: - if (stack->topIsInt()) { - stack->pushInt(-stack->popInt()); - } else { - stack->pushReal(-stack->popNum()); - } - break; - case psOpNot: - if (stack->topIsInt()) { - stack->pushInt(~stack->popInt()); - } else { - stack->pushBool(!stack->popBool()); - } - break; - case psOpOr: - if (stack->topTwoAreInts()) { - i2 = stack->popInt(); - i1 = stack->popInt(); - stack->pushInt(i1 | i2); - } else { - b2 = stack->popBool(); - b1 = stack->popBool(); - stack->pushBool(b1 || b2); - } - break; - case psOpPop: - stack->pop(); - break; - case psOpRoll: - i2 = stack->popInt(); - i1 = stack->popInt(); - stack->roll(i1, i2); - break; - case psOpRound: - if (!stack->topIsInt()) { - r1 = stack->popNum(); - stack->pushReal((r1 >= 0) ? floor(r1 + 0.5) : ceil(r1 - 0.5)); - } - break; - case psOpSin: - stack->pushReal(sin(stack->popNum() * M_PI / 180.0)); - break; - case psOpSqrt: - stack->pushReal(sqrt(stack->popNum())); - break; - case psOpSub: - if (stack->topTwoAreInts()) { - i2 = stack->popInt(); - i1 = stack->popInt(); - stack->pushInt(i1 - i2); - } else { - r2 = stack->popNum(); - r1 = stack->popNum(); - stack->pushReal(r1 - r2); - } - break; - case psOpTrue: - stack->pushBool(gTrue); - break; - case psOpTruncate: - if (!stack->topIsInt()) { - r1 = stack->popNum(); - stack->pushReal((r1 >= 0) ? floor(r1) : ceil(r1)); - } - break; - case psOpXor: - if (stack->topTwoAreInts()) { - i2 = stack->popInt(); - i1 = stack->popInt(); - stack->pushInt(i1 ^ i2); - } else { - b2 = stack->popBool(); - b1 = stack->popBool(); - stack->pushBool(b1 ^ b2); - } - break; - case psOpIf: - b1 = stack->popBool(); - if (b1) { - exec(stack, codePtr + 2); - } - codePtr = code[codePtr + 1].blk; - break; - case psOpIfelse: - b1 = stack->popBool(); - if (b1) { - exec(stack, codePtr + 2); - } else { - exec(stack, code[codePtr].blk); - } - codePtr = code[codePtr + 1].blk; - break; - case psOpReturn: - return; - } - break; - default: - error(-1, "Internal: bad object in PostScript function code"); - break; - } - } -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Function.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Function.h deleted file mode 100644 index d6ac893e494..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Function.h +++ /dev/null @@ -1,247 +0,0 @@ -//======================================================================== -// -// Function.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2009, 2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> -// Copyright (C) 2011 Andrea Canciani <ranma42@gmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef FUNCTION_H -#define FUNCTION_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include "Object.h" -#include <set> - -class Dict; -class Stream; -struct PSObject; -class PSStack; -class PopplerCache; - -//------------------------------------------------------------------------ -// Function -//------------------------------------------------------------------------ - -#define funcMaxInputs 32 -#define funcMaxOutputs 32 -#define sampledFuncMaxInputs 16 - -class Function { -public: - - Function(); - - virtual ~Function(); - - // Construct a function. Returns NULL if unsuccessful. - static Function *parse(Object *funcObj); - - // Initialize the entries common to all function types. - GBool init(Dict *dict); - - virtual Function *copy() = 0; - - // Return the function type: - // -1 : identity - // 0 : sampled - // 2 : exponential - // 3 : stitching - // 4 : PostScript - virtual int getType() = 0; - - // Return size of input and output tuples. - int getInputSize() { return m; } - int getOutputSize() { return n; } - - double getDomainMin(int i) { return domain[i][0]; } - double getDomainMax(int i) { return domain[i][1]; } - double getRangeMin(int i) { return range[i][0]; } - double getRangeMax(int i) { return range[i][1]; } - GBool getHasRange() { return hasRange; } - - // Transform an input tuple into an output tuple. - virtual void transform(double *in, double *out) = 0; - - virtual GBool isOk() = 0; - -protected: - static Function *parse(Object *funcObj, std::set<int> *usedParents); - - int m, n; // size of input and output tuples - double // min and max values for function domain - domain[funcMaxInputs][2]; - double // min and max values for function range - range[funcMaxOutputs][2]; - GBool hasRange; // set if range is defined -}; - -//------------------------------------------------------------------------ -// IdentityFunction -//------------------------------------------------------------------------ - -class IdentityFunction: public Function { -public: - - IdentityFunction(); - virtual ~IdentityFunction(); - virtual Function *copy() { return new IdentityFunction(); } - virtual int getType() { return -1; } - virtual void transform(double *in, double *out); - virtual GBool isOk() { return gTrue; } - -private: -}; - -//------------------------------------------------------------------------ -// SampledFunction -//------------------------------------------------------------------------ - -class SampledFunction: public Function { -public: - - SampledFunction(Object *funcObj, Dict *dict); - virtual ~SampledFunction(); - virtual Function *copy() { return new SampledFunction(this); } - virtual int getType() { return 0; } - virtual void transform(double *in, double *out); - virtual GBool isOk() { return ok; } - - int getSampleSize(int i) { return sampleSize[i]; } - double getEncodeMin(int i) { return encode[i][0]; } - double getEncodeMax(int i) { return encode[i][1]; } - double getDecodeMin(int i) { return decode[i][0]; } - double getDecodeMax(int i) { return decode[i][1]; } - double *getSamples() { return samples; } - -private: - - SampledFunction(SampledFunction *func); - - int // number of samples for each domain element - sampleSize[funcMaxInputs]; - double // min and max values for domain encoder - encode[funcMaxInputs][2]; - double // min and max values for range decoder - decode[funcMaxOutputs][2]; - double // input multipliers - inputMul[funcMaxInputs]; - int idxMul[funcMaxInputs]; // sample array index multipliers - double *samples; // the samples - int nSamples; // size of the samples array - double *sBuf; // buffer for the transform function - GBool ok; -}; - -//------------------------------------------------------------------------ -// ExponentialFunction -//------------------------------------------------------------------------ - -class ExponentialFunction: public Function { -public: - - ExponentialFunction(Object *funcObj, Dict *dict); - virtual ~ExponentialFunction(); - virtual Function *copy() { return new ExponentialFunction(this); } - virtual int getType() { return 2; } - virtual void transform(double *in, double *out); - virtual GBool isOk() { return ok; } - - double *getC0() { return c0; } - double *getC1() { return c1; } - double getE() { return e; } - -private: - - ExponentialFunction(ExponentialFunction *func); - - double c0[funcMaxOutputs]; - double c1[funcMaxOutputs]; - double e; - bool isLinear; - GBool ok; -}; - -//------------------------------------------------------------------------ -// StitchingFunction -//------------------------------------------------------------------------ - -class StitchingFunction: public Function { -public: - - StitchingFunction(Object *funcObj, Dict *dict, std::set<int> *usedParents); - virtual ~StitchingFunction(); - virtual Function *copy() { return new StitchingFunction(this); } - virtual int getType() { return 3; } - virtual void transform(double *in, double *out); - virtual GBool isOk() { return ok; } - - int getNumFuncs() { return k; } - Function *getFunc(int i) { return funcs[i]; } - double *getBounds() { return bounds; } - double *getEncode() { return encode; } - double *getScale() { return scale; } - -private: - - StitchingFunction(StitchingFunction *func); - - int k; - Function **funcs; - double *bounds; - double *encode; - double *scale; - GBool ok; -}; - -//------------------------------------------------------------------------ -// PostScriptFunction -//------------------------------------------------------------------------ - -class PostScriptFunction: public Function { -public: - - PostScriptFunction(Object *funcObj, Dict *dict); - virtual ~PostScriptFunction(); - virtual Function *copy() { return new PostScriptFunction(this); } - virtual int getType() { return 4; } - virtual void transform(double *in, double *out); - virtual GBool isOk() { return ok; } - - GooString *getCodeString() { return codeString; } - -private: - - PostScriptFunction(PostScriptFunction *func); - GBool parseCode(Stream *str, int *codePtr); - GooString *getToken(Stream *str); - void resizeCode(int newSize); - void exec(PSStack *stack, int codePtr); - - GooString *codeString; - PSObject *code; - int codeSize; - GBool ok; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Gfx.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Gfx.cc deleted file mode 100644 index bca60e2f45f..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Gfx.cc +++ /dev/null @@ -1,5087 +0,0 @@ -//======================================================================== -// -// Gfx.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> -// Copyright (C) 2005-2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2006 Thorkild Stray <thorkild@ifi.uio.no> -// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2006-2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2006, 2007 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2007, 2008 Brad Hards <bradh@kde.org> -// Copyright (C) 2007, 2011 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2007, 2008 Iñigo Martínez <inigomartinez@gmail.com> -// Copyright (C) 2007 Koji Otani <sho@bbr.jp> -// Copyright (C) 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// Copyright (C) 2008 Pino Toscano <pino@kde.org> -// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> -// Copyright (C) 2008 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2009 M Joonas Pihlaja <jpihlaja@cc.helsinki.fi> -// Copyright (C) 2009-2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// Copyright (C) 2009 William Bader <williambader@hotmail.com> -// Copyright (C) 2009, 2010 David Benjamin <davidben@mit.edu> -// Copyright (C) 2010 Nils Höglund <nils.hoglund@gmail.com> -// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <stdio.h> -#include <stddef.h> -#include <string.h> -#include <math.h> -#include "goo/gmem.h" -#include "goo/GooTimer.h" -#include "goo/GooHash.h" -#include "GlobalParams.h" -#include "CharTypes.h" -#include "Object.h" -#include "Array.h" -#include "Dict.h" -#include "Stream.h" -#include "Lexer.h" -#include "Parser.h" -#include "GfxFont.h" -#include "GfxState.h" -#include "OutputDev.h" -#include "Page.h" -#include "Annot.h" -#include "Error.h" -#include "Gfx.h" -#include "ProfileData.h" -#include "Catalog.h" -#include "OptionalContent.h" - -// the MSVC math.h doesn't define this -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -//------------------------------------------------------------------------ -// constants -//------------------------------------------------------------------------ - -// Max recursive depth for a function shading fill. -#define functionMaxDepth 6 - -// Max delta allowed in any color component for a function shading fill. -#define functionColorDelta (dblToCol(1 / 256.0)) - -// Max number of splits along the t axis for an axial shading fill. -#define axialMaxSplits 256 - -// Max delta allowed in any color component for an axial shading fill. -#define axialColorDelta (dblToCol(1 / 256.0)) - -// Max number of splits along the t axis for a radial shading fill. -#define radialMaxSplits 256 - -// Max delta allowed in any color component for a radial shading fill. -#define radialColorDelta (dblToCol(1 / 256.0)) - -// Max recursive depth for a Gouraud triangle shading fill. -// -// Triangles will be split at most gouraudMaxDepth times (each time into 4 -// smaller ones). That makes pow(4,gouraudMaxDepth) many triangles for -// every triangle. -#define gouraudMaxDepth 6 - -// Max delta allowed in any color component for a Gouraud triangle -// shading fill. -#define gouraudColorDelta (dblToCol(3. / 256.0)) - -// Gouraud triangle: if the three color parameters differ by at more than this percend of -// the total color parameter range, the triangle will be refined -#define gouraudParameterizedColorDelta 5e-3 - -// Max recursive depth for a patch mesh shading fill. -#define patchMaxDepth 6 - -// Max delta allowed in any color component for a patch mesh shading -// fill. -#define patchColorDelta (dblToCol((3. / 256.0))) - -//------------------------------------------------------------------------ -// Operator table -//------------------------------------------------------------------------ - -#ifdef _MSC_VER // this works around a bug in the VC7 compiler -# pragma optimize("",off) -#endif - -Operator Gfx::opTab[] = { - {"\"", 3, {tchkNum, tchkNum, tchkString}, - &Gfx::opMoveSetShowText}, - {"'", 1, {tchkString}, - &Gfx::opMoveShowText}, - {"B", 0, {tchkNone}, - &Gfx::opFillStroke}, - {"B*", 0, {tchkNone}, - &Gfx::opEOFillStroke}, - {"BDC", 2, {tchkName, tchkProps}, - &Gfx::opBeginMarkedContent}, - {"BI", 0, {tchkNone}, - &Gfx::opBeginImage}, - {"BMC", 1, {tchkName}, - &Gfx::opBeginMarkedContent}, - {"BT", 0, {tchkNone}, - &Gfx::opBeginText}, - {"BX", 0, {tchkNone}, - &Gfx::opBeginIgnoreUndef}, - {"CS", 1, {tchkName}, - &Gfx::opSetStrokeColorSpace}, - {"DP", 2, {tchkName, tchkProps}, - &Gfx::opMarkPoint}, - {"Do", 1, {tchkName}, - &Gfx::opXObject}, - {"EI", 0, {tchkNone}, - &Gfx::opEndImage}, - {"EMC", 0, {tchkNone}, - &Gfx::opEndMarkedContent}, - {"ET", 0, {tchkNone}, - &Gfx::opEndText}, - {"EX", 0, {tchkNone}, - &Gfx::opEndIgnoreUndef}, - {"F", 0, {tchkNone}, - &Gfx::opFill}, - {"G", 1, {tchkNum}, - &Gfx::opSetStrokeGray}, - {"ID", 0, {tchkNone}, - &Gfx::opImageData}, - {"J", 1, {tchkInt}, - &Gfx::opSetLineCap}, - {"K", 4, {tchkNum, tchkNum, tchkNum, tchkNum}, - &Gfx::opSetStrokeCMYKColor}, - {"M", 1, {tchkNum}, - &Gfx::opSetMiterLimit}, - {"MP", 1, {tchkName}, - &Gfx::opMarkPoint}, - {"Q", 0, {tchkNone}, - &Gfx::opRestore}, - {"RG", 3, {tchkNum, tchkNum, tchkNum}, - &Gfx::opSetStrokeRGBColor}, - {"S", 0, {tchkNone}, - &Gfx::opStroke}, - {"SC", -4, {tchkNum, tchkNum, tchkNum, tchkNum}, - &Gfx::opSetStrokeColor}, - {"SCN", -33, {tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN}, - &Gfx::opSetStrokeColorN}, - {"T*", 0, {tchkNone}, - &Gfx::opTextNextLine}, - {"TD", 2, {tchkNum, tchkNum}, - &Gfx::opTextMoveSet}, - {"TJ", 1, {tchkArray}, - &Gfx::opShowSpaceText}, - {"TL", 1, {tchkNum}, - &Gfx::opSetTextLeading}, - {"Tc", 1, {tchkNum}, - &Gfx::opSetCharSpacing}, - {"Td", 2, {tchkNum, tchkNum}, - &Gfx::opTextMove}, - {"Tf", 2, {tchkName, tchkNum}, - &Gfx::opSetFont}, - {"Tj", 1, {tchkString}, - &Gfx::opShowText}, - {"Tm", 6, {tchkNum, tchkNum, tchkNum, tchkNum, - tchkNum, tchkNum}, - &Gfx::opSetTextMatrix}, - {"Tr", 1, {tchkInt}, - &Gfx::opSetTextRender}, - {"Ts", 1, {tchkNum}, - &Gfx::opSetTextRise}, - {"Tw", 1, {tchkNum}, - &Gfx::opSetWordSpacing}, - {"Tz", 1, {tchkNum}, - &Gfx::opSetHorizScaling}, - {"W", 0, {tchkNone}, - &Gfx::opClip}, - {"W*", 0, {tchkNone}, - &Gfx::opEOClip}, - {"b", 0, {tchkNone}, - &Gfx::opCloseFillStroke}, - {"b*", 0, {tchkNone}, - &Gfx::opCloseEOFillStroke}, - {"c", 6, {tchkNum, tchkNum, tchkNum, tchkNum, - tchkNum, tchkNum}, - &Gfx::opCurveTo}, - {"cm", 6, {tchkNum, tchkNum, tchkNum, tchkNum, - tchkNum, tchkNum}, - &Gfx::opConcat}, - {"cs", 1, {tchkName}, - &Gfx::opSetFillColorSpace}, - {"d", 2, {tchkArray, tchkNum}, - &Gfx::opSetDash}, - {"d0", 2, {tchkNum, tchkNum}, - &Gfx::opSetCharWidth}, - {"d1", 6, {tchkNum, tchkNum, tchkNum, tchkNum, - tchkNum, tchkNum}, - &Gfx::opSetCacheDevice}, - {"f", 0, {tchkNone}, - &Gfx::opFill}, - {"f*", 0, {tchkNone}, - &Gfx::opEOFill}, - {"g", 1, {tchkNum}, - &Gfx::opSetFillGray}, - {"gs", 1, {tchkName}, - &Gfx::opSetExtGState}, - {"h", 0, {tchkNone}, - &Gfx::opClosePath}, - {"i", 1, {tchkNum}, - &Gfx::opSetFlat}, - {"j", 1, {tchkInt}, - &Gfx::opSetLineJoin}, - {"k", 4, {tchkNum, tchkNum, tchkNum, tchkNum}, - &Gfx::opSetFillCMYKColor}, - {"l", 2, {tchkNum, tchkNum}, - &Gfx::opLineTo}, - {"m", 2, {tchkNum, tchkNum}, - &Gfx::opMoveTo}, - {"n", 0, {tchkNone}, - &Gfx::opEndPath}, - {"q", 0, {tchkNone}, - &Gfx::opSave}, - {"re", 4, {tchkNum, tchkNum, tchkNum, tchkNum}, - &Gfx::opRectangle}, - {"rg", 3, {tchkNum, tchkNum, tchkNum}, - &Gfx::opSetFillRGBColor}, - {"ri", 1, {tchkName}, - &Gfx::opSetRenderingIntent}, - {"s", 0, {tchkNone}, - &Gfx::opCloseStroke}, - {"sc", -4, {tchkNum, tchkNum, tchkNum, tchkNum}, - &Gfx::opSetFillColor}, - {"scn", -33, {tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN, tchkSCN, tchkSCN, tchkSCN, - tchkSCN}, - &Gfx::opSetFillColorN}, - {"sh", 1, {tchkName}, - &Gfx::opShFill}, - {"v", 4, {tchkNum, tchkNum, tchkNum, tchkNum}, - &Gfx::opCurveTo1}, - {"w", 1, {tchkNum}, - &Gfx::opSetLineWidth}, - {"y", 4, {tchkNum, tchkNum, tchkNum, tchkNum}, - &Gfx::opCurveTo2}, -}; - -#ifdef _MSC_VER // this works around a bug in the VC7 compiler -# pragma optimize("",on) -#endif - -#define numOps (sizeof(opTab) / sizeof(Operator)) - -static inline GBool isSameGfxColor(const GfxColor &colorA, const GfxColor &colorB, Guint nComps, double delta) { - for (Guint k = 0; k < nComps; ++k) { - if (abs(colorA.c[k] - colorB.c[k]) > delta) { - return false; - } - } - return true; -} - -//------------------------------------------------------------------------ -// GfxResources -//------------------------------------------------------------------------ - -GfxResources::GfxResources(XRef *xref, Dict *resDict, GfxResources *nextA) : - gStateCache(2, xref) { - Object obj1, obj2; - Ref r; - - if (resDict) { - - // build font dictionary - fonts = NULL; - resDict->lookupNF("Font", &obj1); - if (obj1.isRef()) { - obj1.fetch(xref, &obj2); - if (obj2.isDict()) { - r = obj1.getRef(); - fonts = new GfxFontDict(xref, &r, obj2.getDict()); - } - obj2.free(); - } else if (obj1.isDict()) { - fonts = new GfxFontDict(xref, NULL, obj1.getDict()); - } - obj1.free(); - - // get XObject dictionary - resDict->lookup("XObject", &xObjDict); - - // get color space dictionary - resDict->lookup("ColorSpace", &colorSpaceDict); - - // get pattern dictionary - resDict->lookup("Pattern", &patternDict); - - // get shading dictionary - resDict->lookup("Shading", &shadingDict); - - // get graphics state parameter dictionary - resDict->lookup("ExtGState", &gStateDict); - - // get properties dictionary - resDict->lookup("Properties", &propertiesDict); - - } else { - fonts = NULL; - xObjDict.initNull(); - colorSpaceDict.initNull(); - patternDict.initNull(); - shadingDict.initNull(); - gStateDict.initNull(); - propertiesDict.initNull(); - } - - next = nextA; -} - -GfxResources::~GfxResources() { - if (fonts) { - delete fonts; - } - xObjDict.free(); - colorSpaceDict.free(); - patternDict.free(); - shadingDict.free(); - gStateDict.free(); - propertiesDict.free(); -} - -GfxFont *GfxResources::lookupFont(char *name) { - GfxFont *font; - GfxResources *resPtr; - - for (resPtr = this; resPtr; resPtr = resPtr->next) { - if (resPtr->fonts) { - if ((font = resPtr->fonts->lookup(name))) - return font; - } - } - error(-1, "Unknown font tag '%s'", name); - return NULL; -} - -GBool GfxResources::lookupXObject(char *name, Object *obj) { - GfxResources *resPtr; - - for (resPtr = this; resPtr; resPtr = resPtr->next) { - if (resPtr->xObjDict.isDict()) { - if (!resPtr->xObjDict.dictLookup(name, obj)->isNull()) - return gTrue; - obj->free(); - } - } - error(-1, "XObject '%s' is unknown", name); - return gFalse; -} - -GBool GfxResources::lookupXObjectNF(char *name, Object *obj) { - GfxResources *resPtr; - - for (resPtr = this; resPtr; resPtr = resPtr->next) { - if (resPtr->xObjDict.isDict()) { - if (!resPtr->xObjDict.dictLookupNF(name, obj)->isNull()) - return gTrue; - obj->free(); - } - } - error(-1, "XObject '%s' is unknown", name); - return gFalse; -} - -GBool GfxResources::lookupMarkedContentNF(char *name, Object *obj) { - GfxResources *resPtr; - - for (resPtr = this; resPtr; resPtr = resPtr->next) { - if (resPtr->propertiesDict.isDict()) { - if (!resPtr->propertiesDict.dictLookupNF(name, obj)->isNull()) - return gTrue; - obj->free(); - } - } - error(-1, "Marked Content '%s' is unknown", name); - return gFalse; -} - -void GfxResources::lookupColorSpace(char *name, Object *obj) { - GfxResources *resPtr; - - for (resPtr = this; resPtr; resPtr = resPtr->next) { - if (resPtr->colorSpaceDict.isDict()) { - if (!resPtr->colorSpaceDict.dictLookup(name, obj)->isNull()) { - return; - } - obj->free(); - } - } - obj->initNull(); -} - -GfxPattern *GfxResources::lookupPattern(char *name, Gfx *gfx) { - GfxResources *resPtr; - GfxPattern *pattern; - Object obj; - - for (resPtr = this; resPtr; resPtr = resPtr->next) { - if (resPtr->patternDict.isDict()) { - if (!resPtr->patternDict.dictLookup(name, &obj)->isNull()) { - pattern = GfxPattern::parse(&obj, gfx); - obj.free(); - return pattern; - } - obj.free(); - } - } - error(-1, "Unknown pattern '%s'", name); - return NULL; -} - -GfxShading *GfxResources::lookupShading(char *name, Gfx *gfx) { - GfxResources *resPtr; - GfxShading *shading; - Object obj; - - for (resPtr = this; resPtr; resPtr = resPtr->next) { - if (resPtr->shadingDict.isDict()) { - if (!resPtr->shadingDict.dictLookup(name, &obj)->isNull()) { - shading = GfxShading::parse(&obj, gfx); - obj.free(); - return shading; - } - obj.free(); - } - } - error(-1, "Unknown shading '%s'", name); - return NULL; -} - -GBool GfxResources::lookupGState(char *name, Object *obj) { - if (!lookupGStateNF(name, obj)) - return gFalse; - - if (!obj->isRef()) - return gTrue; - - const Ref ref = obj->getRef(); - if (!gStateCache.lookup(ref, obj)->isNull()) - return gTrue; - obj->free(); - - gStateCache.put(ref)->copy(obj); - return gTrue; -} - -GBool GfxResources::lookupGStateNF(char *name, Object *obj) { - GfxResources *resPtr; - - for (resPtr = this; resPtr; resPtr = resPtr->next) { - if (resPtr->gStateDict.isDict()) { - if (!resPtr->gStateDict.dictLookupNF(name, obj)->isNull()) { - return gTrue; - } - obj->free(); - } - } - error(-1, "ExtGState '%s' is unknown", name); - return gFalse; -} - -//------------------------------------------------------------------------ -// Gfx -//------------------------------------------------------------------------ - -Gfx::Gfx(XRef *xrefA, OutputDev *outA, int pageNum, Dict *resDict, Catalog *catalogA, - double hDPI, double vDPI, PDFRectangle *box, - PDFRectangle *cropBox, int rotate, - GBool (*abortCheckCbkA)(void *data), - void *abortCheckCbkDataA) -#ifdef USE_CMS - : iccColorSpaceCache(5) -#endif -{ - int i; - - xref = xrefA; - catalog = catalogA; - subPage = gFalse; - printCommands = globalParams->getPrintCommands(); - profileCommands = globalParams->getProfileCommands(); - textHaveCSPattern = gFalse; - drawText = gFalse; - maskHaveCSPattern = gFalse; - mcStack = NULL; - parser = NULL; - - // start the resource stack - res = new GfxResources(xref, resDict, NULL); - - // initialize - out = outA; - state = new GfxState(hDPI, vDPI, box, rotate, out->upsideDown()); - stackHeight = 1; - pushStateGuard(); - fontChanged = gFalse; - clip = clipNone; - ignoreUndef = 0; - out->startPage(pageNum, state); - out->setDefaultCTM(state->getCTM()); - out->updateAll(state); - for (i = 0; i < 6; ++i) { - baseMatrix[i] = state->getCTM()[i]; - } - formDepth = 0; - abortCheckCbk = abortCheckCbkA; - abortCheckCbkData = abortCheckCbkDataA; - - // set crop box - if (cropBox) { - state->moveTo(cropBox->x1, cropBox->y1); - state->lineTo(cropBox->x2, cropBox->y1); - state->lineTo(cropBox->x2, cropBox->y2); - state->lineTo(cropBox->x1, cropBox->y2); - state->closePath(); - state->clip(); - out->clip(state); - state->clearPath(); - } -} - -Gfx::Gfx(XRef *xrefA, OutputDev *outA, Dict *resDict, Catalog *catalogA, - PDFRectangle *box, PDFRectangle *cropBox, - GBool (*abortCheckCbkA)(void *data), - void *abortCheckCbkDataA) - #ifdef USE_CMS - : iccColorSpaceCache(5) -#endif -{ - int i; - - xref = xrefA; - catalog = catalogA; - subPage = gTrue; - printCommands = globalParams->getPrintCommands(); - profileCommands = globalParams->getProfileCommands(); - textHaveCSPattern = gFalse; - drawText = gFalse; - maskHaveCSPattern = gFalse; - mcStack = NULL; - parser = NULL; - - // start the resource stack - res = new GfxResources(xref, resDict, NULL); - - // initialize - out = outA; - state = new GfxState(72, 72, box, 0, gFalse); - stackHeight = 1; - pushStateGuard(); - fontChanged = gFalse; - clip = clipNone; - ignoreUndef = 0; - for (i = 0; i < 6; ++i) { - baseMatrix[i] = state->getCTM()[i]; - } - formDepth = 0; - abortCheckCbk = abortCheckCbkA; - abortCheckCbkData = abortCheckCbkDataA; - - // set crop box - if (cropBox) { - state->moveTo(cropBox->x1, cropBox->y1); - state->lineTo(cropBox->x2, cropBox->y1); - state->lineTo(cropBox->x2, cropBox->y2); - state->lineTo(cropBox->x1, cropBox->y2); - state->closePath(); - state->clip(); - out->clip(state); - state->clearPath(); - } -} - -Gfx::~Gfx() { - while (stateGuards.size()) { - popStateGuard(); - } - // There shouldn't be more saves, but pop them if there were any - while (state->hasSaves()) { - error(-1, "Found state under last state guard. Popping."); - restoreState(); - } - if (!subPage) { - out->endPage(); - } - while (res) { - popResources(); - } - if (state) { - delete state; - } - while (mcStack) { - popMarkedContent(); - } -} - -void Gfx::display(Object *obj, GBool topLevel) { - Object obj2; - int i; - - if (obj->isArray()) { - for (i = 0; i < obj->arrayGetLength(); ++i) { - obj->arrayGet(i, &obj2); - if (!obj2.isStream()) { - error(-1, "Weird page contents"); - obj2.free(); - return; - } - obj2.free(); - } - } else if (!obj->isStream()) { - error(-1, "Weird page contents"); - return; - } - parser = new Parser(xref, new Lexer(xref, obj), gFalse); - go(topLevel); - delete parser; - parser = NULL; -} - -void Gfx::go(GBool topLevel) { - Object obj; - Object args[maxArgs]; - int numArgs, i; - int lastAbortCheck; - - // scan a sequence of objects - pushStateGuard(); - updateLevel = lastAbortCheck = 0; - numArgs = 0; - parser->getObj(&obj); - while (!obj.isEOF()) { - commandAborted = gFalse; - - // got a command - execute it - if (obj.isCmd()) { - if (printCommands) { - obj.print(stdout); - for (i = 0; i < numArgs; ++i) { - printf(" "); - args[i].print(stdout); - } - printf("\n"); - fflush(stdout); - } - GooTimer timer; - - // Run the operation - execOp(&obj, args, numArgs); - - // Update the profile information - if (profileCommands) { - GooHash *hash; - - hash = out->getProfileHash (); - if (hash) { - GooString *cmd_g; - ProfileData *data_p; - - cmd_g = new GooString (obj.getCmd()); - data_p = (ProfileData *)hash->lookup (cmd_g); - if (data_p == NULL) { - data_p = new ProfileData(); - hash->add (cmd_g, data_p); - } - - data_p->addElement(timer.getElapsed ()); - } - } - obj.free(); - for (i = 0; i < numArgs; ++i) - args[i].free(); - numArgs = 0; - - // periodically update display - if (++updateLevel >= 20000) { - out->dump(); - updateLevel = 0; - } - - // did the command throw an exception - if (commandAborted) { - // don't propogate; recursive drawing comes from Form XObjects which - // should probably be drawn in a separate context anyway for caching - commandAborted = gFalse; - break; - } - - // check for an abort - if (abortCheckCbk) { - if (updateLevel - lastAbortCheck > 10) { - if ((*abortCheckCbk)(abortCheckCbkData)) { - break; - } - lastAbortCheck = updateLevel; - } - } - - // got an argument - save it - } else if (numArgs < maxArgs) { - args[numArgs++] = obj; - - // too many arguments - something is wrong - } else { - error(getPos(), "Too many args in content stream"); - if (printCommands) { - printf("throwing away arg: "); - obj.print(stdout); - printf("\n"); - fflush(stdout); - } - obj.free(); - } - - // grab the next object - parser->getObj(&obj); - } - obj.free(); - - // args at end with no command - if (numArgs > 0) { - error(getPos(), "Leftover args in content stream"); - if (printCommands) { - printf("%d leftovers:", numArgs); - for (i = 0; i < numArgs; ++i) { - printf(" "); - args[i].print(stdout); - } - printf("\n"); - fflush(stdout); - } - for (i = 0; i < numArgs; ++i) - args[i].free(); - } - - popStateGuard(); - - // update display - if (topLevel && updateLevel > 0) { - out->dump(); - } -} - -void Gfx::execOp(Object *cmd, Object args[], int numArgs) { - Operator *op; - char *name; - Object *argPtr; - int i; - - // find operator - name = cmd->getCmd(); - if (!(op = findOp(name))) { - if (ignoreUndef == 0) - error(getPos(), "Unknown operator '%s'", name); - return; - } - - // type check args - argPtr = args; - if (op->numArgs >= 0) { - if (numArgs < op->numArgs) { - error(getPos(), "Too few (%d) args to '%s' operator", numArgs, name); - commandAborted = gTrue; - return; - } - if (numArgs > op->numArgs) { -#if 0 - error(getPos(), "Too many (%d) args to '%s' operator", numArgs, name); -#endif - argPtr += numArgs - op->numArgs; - numArgs = op->numArgs; - } - } else { - if (numArgs > -op->numArgs) { - error(getPos(), "Too many (%d) args to '%s' operator", - numArgs, name); - return; - } - } - for (i = 0; i < numArgs; ++i) { - if (!checkArg(&argPtr[i], op->tchk[i])) { - error(getPos(), "Arg #%d to '%s' operator is wrong type (%s)", - i, name, argPtr[i].getTypeName()); - return; - } - } - - // do it - (this->*op->func)(argPtr, numArgs); -} - -Operator *Gfx::findOp(char *name) { - int a, b, m, cmp; - - a = -1; - b = numOps; - // invariant: opTab[a] < name < opTab[b] - while (b - a > 1) { - m = (a + b) / 2; - cmp = strcmp(opTab[m].name, name); - if (cmp < 0) - a = m; - else if (cmp > 0) - b = m; - else - a = b = m; - } - if (cmp != 0) - return NULL; - return &opTab[a]; -} - -GBool Gfx::checkArg(Object *arg, TchkType type) { - switch (type) { - case tchkBool: return arg->isBool(); - case tchkInt: return arg->isInt(); - case tchkNum: return arg->isNum(); - case tchkString: return arg->isString(); - case tchkName: return arg->isName(); - case tchkArray: return arg->isArray(); - case tchkProps: return arg->isDict() || arg->isName(); - case tchkSCN: return arg->isNum() || arg->isName(); - case tchkNone: return gFalse; - } - return gFalse; -} - -int Gfx::getPos() { - return parser ? parser->getPos() : -1; -} - -//------------------------------------------------------------------------ -// graphics state operators -//------------------------------------------------------------------------ - -void Gfx::opSave(Object args[], int numArgs) { - saveState(); -} - -void Gfx::opRestore(Object args[], int numArgs) { - restoreState(); -} - -void Gfx::opConcat(Object args[], int numArgs) { - state->concatCTM(args[0].getNum(), args[1].getNum(), - args[2].getNum(), args[3].getNum(), - args[4].getNum(), args[5].getNum()); - out->updateCTM(state, args[0].getNum(), args[1].getNum(), - args[2].getNum(), args[3].getNum(), - args[4].getNum(), args[5].getNum()); - fontChanged = gTrue; -} - -void Gfx::opSetDash(Object args[], int numArgs) { - Array *a; - int length; - Object obj; - double *dash; - int i; - - a = args[0].getArray(); - length = a->getLength(); - if (length == 0) { - dash = NULL; - } else { - dash = (double *)gmallocn(length, sizeof(double)); - for (i = 0; i < length; ++i) { - dash[i] = a->get(i, &obj)->getNum(); - obj.free(); - } - } - state->setLineDash(dash, length, args[1].getNum()); - out->updateLineDash(state); -} - -void Gfx::opSetFlat(Object args[], int numArgs) { - state->setFlatness((int)args[0].getNum()); - out->updateFlatness(state); -} - -void Gfx::opSetLineJoin(Object args[], int numArgs) { - state->setLineJoin(args[0].getInt()); - out->updateLineJoin(state); -} - -void Gfx::opSetLineCap(Object args[], int numArgs) { - state->setLineCap(args[0].getInt()); - out->updateLineCap(state); -} - -void Gfx::opSetMiterLimit(Object args[], int numArgs) { - state->setMiterLimit(args[0].getNum()); - out->updateMiterLimit(state); -} - -void Gfx::opSetLineWidth(Object args[], int numArgs) { - state->setLineWidth(args[0].getNum()); - out->updateLineWidth(state); -} - -void Gfx::opSetExtGState(Object args[], int numArgs) { - Object obj1, obj2, obj3, obj4, obj5; - GfxBlendMode mode; - GBool haveFillOP; - Function *funcs[4]; - GfxColor backdropColor; - GBool haveBackdropColor; - GfxColorSpace *blendingColorSpace; - GBool alpha, isolated, knockout; - int i; - - if (!res->lookupGState(args[0].getName(), &obj1)) { - return; - } - if (!obj1.isDict()) { - error(getPos(), "ExtGState '%s' is wrong type", args[0].getName()); - obj1.free(); - return; - } - if (printCommands) { - printf(" gfx state dict: "); - obj1.print(); - printf("\n"); - } - - // transparency support: blend mode, fill/stroke opacity - if (!obj1.dictLookup("BM", &obj2)->isNull()) { - if (state->parseBlendMode(&obj2, &mode)) { - state->setBlendMode(mode); - out->updateBlendMode(state); - } else { - error(getPos(), "Invalid blend mode in ExtGState"); - } - } - obj2.free(); - if (obj1.dictLookup("ca", &obj2)->isNum()) { - state->setFillOpacity(obj2.getNum()); - out->updateFillOpacity(state); - } - obj2.free(); - if (obj1.dictLookup("CA", &obj2)->isNum()) { - state->setStrokeOpacity(obj2.getNum()); - out->updateStrokeOpacity(state); - } - obj2.free(); - - // fill/stroke overprint - if ((haveFillOP = (obj1.dictLookup("op", &obj2)->isBool()))) { - state->setFillOverprint(obj2.getBool()); - out->updateFillOverprint(state); - } - obj2.free(); - if (obj1.dictLookup("OP", &obj2)->isBool()) { - state->setStrokeOverprint(obj2.getBool()); - out->updateStrokeOverprint(state); - if (!haveFillOP) { - state->setFillOverprint(obj2.getBool()); - out->updateFillOverprint(state); - } - } - obj2.free(); - if (obj1.dictLookup("OPM", &obj2)->isInt()) { - state->setOverprintMode(obj2.getInt()); - out->updateOverprintMode(state); - } - obj2.free(); - - // stroke adjust - if (obj1.dictLookup("SA", &obj2)->isBool()) { - state->setStrokeAdjust(obj2.getBool()); - out->updateStrokeAdjust(state); - } - obj2.free(); - - // transfer function - if (obj1.dictLookup("TR2", &obj2)->isNull()) { - obj2.free(); - obj1.dictLookup("TR", &obj2); - } - if (obj2.isName("Default") || - obj2.isName("Identity")) { - funcs[0] = funcs[1] = funcs[2] = funcs[3] = NULL; - state->setTransfer(funcs); - out->updateTransfer(state); - } else if (obj2.isArray() && obj2.arrayGetLength() == 4) { - for (i = 0; i < 4; ++i) { - obj2.arrayGet(i, &obj3); - funcs[i] = Function::parse(&obj3); - obj3.free(); - if (!funcs[i]) { - break; - } - } - if (i == 4) { - state->setTransfer(funcs); - out->updateTransfer(state); - } - } else if (obj2.isName() || obj2.isDict() || obj2.isStream()) { - if ((funcs[0] = Function::parse(&obj2))) { - funcs[1] = funcs[2] = funcs[3] = NULL; - state->setTransfer(funcs); - out->updateTransfer(state); - } - } else if (!obj2.isNull()) { - error(getPos(), "Invalid transfer function in ExtGState"); - } - obj2.free(); - - // alpha is shape - if (obj1.dictLookup("AIS", &obj2)->isBool()) { - state->setAlphaIsShape(obj2.getBool()); - out->updateAlphaIsShape(state); - } - obj2.free(); - - // text knockout - if (obj1.dictLookup("TK", &obj2)->isBool()) { - state->setTextKnockout(obj2.getBool()); - out->updateTextKnockout(state); - } - obj2.free(); - - // soft mask - if (!obj1.dictLookup("SMask", &obj2)->isNull()) { - if (obj2.isName("None")) { - out->clearSoftMask(state); - } else if (obj2.isDict()) { - if (obj2.dictLookup("S", &obj3)->isName("Alpha")) { - alpha = gTrue; - } else { // "Luminosity" - alpha = gFalse; - } - obj3.free(); - funcs[0] = NULL; - if (!obj2.dictLookup("TR", &obj3)->isNull()) { - funcs[0] = Function::parse(&obj3); - if (funcs[0]->getInputSize() != 1 || - funcs[0]->getOutputSize() != 1) { - error(getPos(), - "Invalid transfer function in soft mask in ExtGState"); - delete funcs[0]; - funcs[0] = NULL; - } - } - obj3.free(); - if ((haveBackdropColor = obj2.dictLookup("BC", &obj3)->isArray())) { - for (i = 0; i < gfxColorMaxComps; ++i) { - backdropColor.c[i] = 0; - } - for (i = 0; i < obj3.arrayGetLength() && i < gfxColorMaxComps; ++i) { - obj3.arrayGet(i, &obj4); - if (obj4.isNum()) { - backdropColor.c[i] = dblToCol(obj4.getNum()); - } - obj4.free(); - } - } - obj3.free(); - if (obj2.dictLookup("G", &obj3)->isStream()) { - if (obj3.streamGetDict()->lookup("Group", &obj4)->isDict()) { - blendingColorSpace = NULL; - isolated = knockout = gFalse; - if (!obj4.dictLookup("CS", &obj5)->isNull()) { - blendingColorSpace = GfxColorSpace::parse(&obj5, this); - } - obj5.free(); - if (obj4.dictLookup("I", &obj5)->isBool()) { - isolated = obj5.getBool(); - } - obj5.free(); - if (obj4.dictLookup("K", &obj5)->isBool()) { - knockout = obj5.getBool(); - } - obj5.free(); - if (!haveBackdropColor) { - if (blendingColorSpace) { - blendingColorSpace->getDefaultColor(&backdropColor); - } else { - //~ need to get the parent or default color space (?) - for (i = 0; i < gfxColorMaxComps; ++i) { - backdropColor.c[i] = 0; - } - } - } - doSoftMask(&obj3, alpha, blendingColorSpace, - isolated, knockout, funcs[0], &backdropColor); - if (funcs[0]) { - delete funcs[0]; - } - } else { - error(getPos(), "Invalid soft mask in ExtGState - missing group"); - } - obj4.free(); - } else { - error(getPos(), "Invalid soft mask in ExtGState - missing group"); - } - obj3.free(); - } else if (!obj2.isNull()) { - error(getPos(), "Invalid soft mask in ExtGState"); - } - } - obj2.free(); - if (obj1.dictLookup("Font", &obj2)->isArray()) { - GfxFont *font; - if (obj2.arrayGetLength() == 2) { - Object fargs0, fargs1; - - obj2.arrayGetNF(0,&fargs0); - obj2.arrayGet(1,&fargs1); - if (fargs0.isRef() && fargs1.isNum()) { - Object fobj; - Ref r; - - fargs0.fetch(xref, &fobj); - if (fobj.isDict()) { - r = fargs0.getRef(); - font = GfxFont::makeFont(xref,args[0].getName(),r,fobj.getDict()); - state->setFont(font,fargs1.getNum()); - fontChanged = gTrue; - } - fobj.free(); - } - fargs0.free(); - fargs1.free(); - } else { - error(getPos(), "Number of args mismatch for /Font in ExtGState"); - } - } - obj2.free(); - if (obj1.dictLookup("LW", &obj2)->isNum()) { - opSetLineWidth(&obj2,1); - } - obj2.free(); - if (obj1.dictLookup("LC", &obj2)->isInt()) { - opSetLineCap(&obj2,1); - } - obj2.free(); - if (obj1.dictLookup("LJ", &obj2)->isInt()) { - opSetLineJoin(&obj2,1); - } - obj2.free(); - if (obj1.dictLookup("ML", &obj2)->isNum()) { - opSetMiterLimit(&obj2,1); - } - obj2.free(); - if (obj1.dictLookup("D", &obj2)->isArray()) { - if (obj2.arrayGetLength() == 2) { - Object dargs[2]; - - obj2.arrayGetNF(0,&dargs[0]); - obj2.arrayGet(1,&dargs[1]); - if (dargs[0].isArray() && dargs[1].isInt()) { - opSetDash(dargs,2); - } - dargs[0].free(); - dargs[1].free(); - } else { - error(getPos(), "Number of args mismatch for /D in ExtGState"); - } - } - obj2.free(); - if (obj1.dictLookup("RI", &obj2)->isName()) { - opSetRenderingIntent(&obj2,1); - } - obj2.free(); - if (obj1.dictLookup("FL", &obj2)->isNum()) { - opSetFlat(&obj2,1); - } - obj2.free(); - - obj1.free(); -} - -void Gfx::doSoftMask(Object *str, GBool alpha, - GfxColorSpace *blendingColorSpace, - GBool isolated, GBool knockout, - Function *transferFunc, GfxColor *backdropColor) { - Dict *dict, *resDict; - double m[6], bbox[4]; - Object obj1, obj2; - int i; - - // check for excessive recursion - if (formDepth > 20) { - return; - } - - // get stream dict - dict = str->streamGetDict(); - - // check form type - dict->lookup("FormType", &obj1); - if (!(obj1.isNull() || (obj1.isInt() && obj1.getInt() == 1))) { - error(getPos(), "Unknown form type"); - } - obj1.free(); - - // get bounding box - dict->lookup("BBox", &obj1); - if (!obj1.isArray()) { - obj1.free(); - error(getPos(), "Bad form bounding box"); - return; - } - for (i = 0; i < 4; ++i) { - obj1.arrayGet(i, &obj2); - if (likely(obj2.isNum())) bbox[i] = obj2.getNum(); - else { - obj2.free(); - obj1.free(); - error(getPos(), "Bad form bounding box (non number)"); - return; - } - obj2.free(); - } - obj1.free(); - - // get matrix - dict->lookup("Matrix", &obj1); - if (obj1.isArray()) { - for (i = 0; i < 6; ++i) { - obj1.arrayGet(i, &obj2); - if (likely(obj2.isNum())) m[i] = obj2.getNum(); - else m[i] = 0; - obj2.free(); - } - } else { - m[0] = 1; m[1] = 0; - m[2] = 0; m[3] = 1; - m[4] = 0; m[5] = 0; - } - obj1.free(); - - // get resources - dict->lookup("Resources", &obj1); - resDict = obj1.isDict() ? obj1.getDict() : (Dict *)NULL; - - // draw it - ++formDepth; - doForm1(str, resDict, m, bbox, gTrue, gTrue, - blendingColorSpace, isolated, knockout, - alpha, transferFunc, backdropColor); - --formDepth; - - if (blendingColorSpace) { - delete blendingColorSpace; - } - obj1.free(); -} - -void Gfx::opSetRenderingIntent(Object args[], int numArgs) { -} - -//------------------------------------------------------------------------ -// color operators -//------------------------------------------------------------------------ - -void Gfx::opSetFillGray(Object args[], int numArgs) { - GfxColor color; - GfxColorSpace *colorSpace; - Object obj; - - if (textHaveCSPattern && drawText) { - GBool needFill = out->deviceHasTextClip(state); - out->endTextObject(state); - if (needFill) { - doPatternFill(gTrue); - } - out->restoreState(state); - } - state->setFillPattern(NULL); - res->lookupColorSpace("DefaultGray", &obj); - if (obj.isNull()) { - colorSpace = new GfxDeviceGrayColorSpace(); - } else { - colorSpace = GfxColorSpace::parse(&obj, this); - } - obj.free(); - state->setFillColorSpace(colorSpace); - out->updateFillColorSpace(state); - color.c[0] = dblToCol(args[0].getNum()); - state->setFillColor(&color); - out->updateFillColor(state); - if (textHaveCSPattern) { - out->beginTextObject(state); - out->updateRender(state); - out->updateTextMat(state); - out->updateTextPos(state); - textHaveCSPattern = gFalse; - } -} - -void Gfx::opSetStrokeGray(Object args[], int numArgs) { - GfxColor color; - GfxColorSpace *colorSpace; - Object obj; - - state->setStrokePattern(NULL); - res->lookupColorSpace("DefaultGray", &obj); - if (obj.isNull()) { - colorSpace = new GfxDeviceGrayColorSpace(); - } else { - colorSpace = GfxColorSpace::parse(&obj, this); - } - obj.free(); - state->setStrokeColorSpace(colorSpace); - out->updateStrokeColorSpace(state); - color.c[0] = dblToCol(args[0].getNum()); - state->setStrokeColor(&color); - out->updateStrokeColor(state); -} - -void Gfx::opSetFillCMYKColor(Object args[], int numArgs) { - GfxColor color; - GfxColorSpace *colorSpace; - Object obj; - int i; - - if (textHaveCSPattern && drawText) { - GBool needFill = out->deviceHasTextClip(state); - out->endTextObject(state); - if (needFill) { - doPatternFill(gTrue); - } - out->restoreState(state); - } - res->lookupColorSpace("DefaultCMYK", &obj); - if (obj.isNull()) { - colorSpace = new GfxDeviceCMYKColorSpace(); - } else { - colorSpace = GfxColorSpace::parse(&obj, this); - } - obj.free(); - state->setFillPattern(NULL); - state->setFillColorSpace(colorSpace); - out->updateFillColorSpace(state); - for (i = 0; i < 4; ++i) { - color.c[i] = dblToCol(args[i].getNum()); - } - state->setFillColor(&color); - out->updateFillColor(state); - if (textHaveCSPattern) { - out->beginTextObject(state); - out->updateRender(state); - out->updateTextMat(state); - out->updateTextPos(state); - textHaveCSPattern = gFalse; - } -} - -void Gfx::opSetStrokeCMYKColor(Object args[], int numArgs) { - GfxColor color; - GfxColorSpace *colorSpace; - Object obj; - int i; - - state->setStrokePattern(NULL); - res->lookupColorSpace("DefaultCMYK", &obj); - if (obj.isNull()) { - colorSpace = new GfxDeviceCMYKColorSpace(); - } else { - colorSpace = GfxColorSpace::parse(&obj, this); - } - obj.free(); - state->setStrokeColorSpace(colorSpace); - out->updateStrokeColorSpace(state); - for (i = 0; i < 4; ++i) { - color.c[i] = dblToCol(args[i].getNum()); - } - state->setStrokeColor(&color); - out->updateStrokeColor(state); -} - -void Gfx::opSetFillRGBColor(Object args[], int numArgs) { - Object obj; - GfxColorSpace *colorSpace; - GfxColor color; - int i; - - if (textHaveCSPattern && drawText) { - GBool needFill = out->deviceHasTextClip(state); - out->endTextObject(state); - if (needFill) { - doPatternFill(gTrue); - } - out->restoreState(state); - } - state->setFillPattern(NULL); - res->lookupColorSpace("DefaultRGB", &obj); - if (obj.isNull()) { - colorSpace = new GfxDeviceRGBColorSpace(); - } else { - colorSpace = GfxColorSpace::parse(&obj, this); - } - obj.free(); - state->setFillColorSpace(colorSpace); - out->updateFillColorSpace(state); - for (i = 0; i < 3; ++i) { - color.c[i] = dblToCol(args[i].getNum()); - } - state->setFillColor(&color); - out->updateFillColor(state); - if (textHaveCSPattern) { - out->beginTextObject(state); - out->updateRender(state); - out->updateTextMat(state); - out->updateTextPos(state); - textHaveCSPattern = gFalse; - } -} - -void Gfx::opSetStrokeRGBColor(Object args[], int numArgs) { - Object obj; - GfxColorSpace *colorSpace; - GfxColor color; - int i; - - state->setStrokePattern(NULL); - res->lookupColorSpace("DefaultRGB", &obj); - if (obj.isNull()) { - colorSpace = new GfxDeviceRGBColorSpace(); - } else { - colorSpace = GfxColorSpace::parse(&obj, this); - } - obj.free(); - state->setStrokeColorSpace(colorSpace); - out->updateStrokeColorSpace(state); - for (i = 0; i < 3; ++i) { - color.c[i] = dblToCol(args[i].getNum()); - } - state->setStrokeColor(&color); - out->updateStrokeColor(state); -} - -void Gfx::opSetFillColorSpace(Object args[], int numArgs) { - Object obj; - GfxColorSpace *colorSpace; - GfxColor color; - - res->lookupColorSpace(args[0].getName(), &obj); - if (obj.isNull()) { - colorSpace = GfxColorSpace::parse(&args[0], this); - } else { - colorSpace = GfxColorSpace::parse(&obj, this); - } - obj.free(); - if (colorSpace) { - if (textHaveCSPattern && drawText) { - GBool needFill = out->deviceHasTextClip(state); - out->endTextObject(state); - if (needFill) { - doPatternFill(gTrue); - } - out->restoreState(state); - } - state->setFillPattern(NULL); - state->setFillColorSpace(colorSpace); - out->updateFillColorSpace(state); - colorSpace->getDefaultColor(&color); - state->setFillColor(&color); - out->updateFillColor(state); - if (textHaveCSPattern) { - out->beginTextObject(state); - out->updateRender(state); - out->updateTextMat(state); - out->updateTextPos(state); - textHaveCSPattern = colorSpace->getMode() == csPattern; - } else if (drawText && out->supportTextCSPattern(state)) { - out->beginTextObject(state); - textHaveCSPattern = gTrue; - } - } else { - error(getPos(), "Bad color space (fill)"); - } -} - -void Gfx::opSetStrokeColorSpace(Object args[], int numArgs) { - Object obj; - GfxColorSpace *colorSpace; - GfxColor color; - - state->setStrokePattern(NULL); - res->lookupColorSpace(args[0].getName(), &obj); - if (obj.isNull()) { - colorSpace = GfxColorSpace::parse(&args[0], this); - } else { - colorSpace = GfxColorSpace::parse(&obj, this); - } - obj.free(); - if (colorSpace) { - state->setStrokeColorSpace(colorSpace); - out->updateStrokeColorSpace(state); - colorSpace->getDefaultColor(&color); - state->setStrokeColor(&color); - out->updateStrokeColor(state); - } else { - error(getPos(), "Bad color space (stroke)"); - } -} - -void Gfx::opSetFillColor(Object args[], int numArgs) { - GfxColor color; - int i; - - if (numArgs != state->getFillColorSpace()->getNComps()) { - error(getPos(), "Incorrect number of arguments in 'sc' command"); - return; - } - state->setFillPattern(NULL); - for (i = 0; i < numArgs; ++i) { - color.c[i] = dblToCol(args[i].getNum()); - } - state->setFillColor(&color); - out->updateFillColor(state); -} - -void Gfx::opSetStrokeColor(Object args[], int numArgs) { - GfxColor color; - int i; - - if (numArgs != state->getStrokeColorSpace()->getNComps()) { - error(getPos(), "Incorrect number of arguments in 'SC' command"); - return; - } - state->setStrokePattern(NULL); - for (i = 0; i < numArgs; ++i) { - color.c[i] = dblToCol(args[i].getNum()); - } - state->setStrokeColor(&color); - out->updateStrokeColor(state); -} - -void Gfx::opSetFillColorN(Object args[], int numArgs) { - GfxColor color; - GfxPattern *pattern; - int i; - - if (state->getFillColorSpace()->getMode() == csPattern) { - if (numArgs > 1) { - if (!((GfxPatternColorSpace *)state->getFillColorSpace())->getUnder() || - numArgs - 1 != ((GfxPatternColorSpace *)state->getFillColorSpace()) - ->getUnder()->getNComps()) { - error(getPos(), "Incorrect number of arguments in 'scn' command"); - return; - } - for (i = 0; i < numArgs - 1 && i < gfxColorMaxComps; ++i) { - if (args[i].isNum()) { - color.c[i] = dblToCol(args[i].getNum()); - } else { - color.c[i] = 0; // TODO Investigate if this is what Adobe does - } - } - state->setFillColor(&color); - out->updateFillColor(state); - } - if (args[numArgs-1].isName() && - (pattern = res->lookupPattern(args[numArgs-1].getName(), this))) { - state->setFillPattern(pattern); - } - - } else { - if (numArgs != state->getFillColorSpace()->getNComps()) { - error(getPos(), "Incorrect number of arguments in 'scn' command"); - return; - } - state->setFillPattern(NULL); - for (i = 0; i < numArgs && i < gfxColorMaxComps; ++i) { - if (args[i].isNum()) { - color.c[i] = dblToCol(args[i].getNum()); - } else { - color.c[i] = 0; // TODO Investigate if this is what Adobe does - } - } - state->setFillColor(&color); - out->updateFillColor(state); - } -} - -void Gfx::opSetStrokeColorN(Object args[], int numArgs) { - GfxColor color; - GfxPattern *pattern; - int i; - - if (state->getStrokeColorSpace()->getMode() == csPattern) { - if (numArgs > 1) { - if (!((GfxPatternColorSpace *)state->getStrokeColorSpace()) - ->getUnder() || - numArgs - 1 != ((GfxPatternColorSpace *)state->getStrokeColorSpace()) - ->getUnder()->getNComps()) { - error(getPos(), "Incorrect number of arguments in 'SCN' command"); - return; - } - for (i = 0; i < numArgs - 1 && i < gfxColorMaxComps; ++i) { - if (args[i].isNum()) { - color.c[i] = dblToCol(args[i].getNum()); - } else { - color.c[i] = 0; // TODO Investigate if this is what Adobe does - } - } - state->setStrokeColor(&color); - out->updateStrokeColor(state); - } - if (args[numArgs-1].isName() && - (pattern = res->lookupPattern(args[numArgs-1].getName(), this))) { - state->setStrokePattern(pattern); - } - - } else { - if (numArgs != state->getStrokeColorSpace()->getNComps()) { - error(getPos(), "Incorrect number of arguments in 'SCN' command"); - return; - } - state->setStrokePattern(NULL); - for (i = 0; i < numArgs && i < gfxColorMaxComps; ++i) { - if (args[i].isNum()) { - color.c[i] = dblToCol(args[i].getNum()); - } else { - color.c[i] = 0; // TODO Investigate if this is what Adobe does - } - } - state->setStrokeColor(&color); - out->updateStrokeColor(state); - } -} - -//------------------------------------------------------------------------ -// path segment operators -//------------------------------------------------------------------------ - -void Gfx::opMoveTo(Object args[], int numArgs) { - state->moveTo(args[0].getNum(), args[1].getNum()); -} - -void Gfx::opLineTo(Object args[], int numArgs) { - if (!state->isCurPt()) { - error(getPos(), "No current point in lineto"); - return; - } - state->lineTo(args[0].getNum(), args[1].getNum()); -} - -void Gfx::opCurveTo(Object args[], int numArgs) { - double x1, y1, x2, y2, x3, y3; - - if (!state->isCurPt()) { - error(getPos(), "No current point in curveto"); - return; - } - x1 = args[0].getNum(); - y1 = args[1].getNum(); - x2 = args[2].getNum(); - y2 = args[3].getNum(); - x3 = args[4].getNum(); - y3 = args[5].getNum(); - state->curveTo(x1, y1, x2, y2, x3, y3); -} - -void Gfx::opCurveTo1(Object args[], int numArgs) { - double x1, y1, x2, y2, x3, y3; - - if (!state->isCurPt()) { - error(getPos(), "No current point in curveto1"); - return; - } - x1 = state->getCurX(); - y1 = state->getCurY(); - x2 = args[0].getNum(); - y2 = args[1].getNum(); - x3 = args[2].getNum(); - y3 = args[3].getNum(); - state->curveTo(x1, y1, x2, y2, x3, y3); -} - -void Gfx::opCurveTo2(Object args[], int numArgs) { - double x1, y1, x2, y2, x3, y3; - - if (!state->isCurPt()) { - error(getPos(), "No current point in curveto2"); - return; - } - x1 = args[0].getNum(); - y1 = args[1].getNum(); - x2 = args[2].getNum(); - y2 = args[3].getNum(); - x3 = x2; - y3 = y2; - state->curveTo(x1, y1, x2, y2, x3, y3); -} - -void Gfx::opRectangle(Object args[], int numArgs) { - double x, y, w, h; - - x = args[0].getNum(); - y = args[1].getNum(); - w = args[2].getNum(); - h = args[3].getNum(); - state->moveTo(x, y); - state->lineTo(x + w, y); - state->lineTo(x + w, y + h); - state->lineTo(x, y + h); - state->closePath(); -} - -void Gfx::opClosePath(Object args[], int numArgs) { - if (!state->isCurPt()) { - error(getPos(), "No current point in closepath"); - return; - } - state->closePath(); -} - -//------------------------------------------------------------------------ -// path painting operators -//------------------------------------------------------------------------ - -void Gfx::opEndPath(Object args[], int numArgs) { - doEndPath(); -} - -void Gfx::opStroke(Object args[], int numArgs) { - if (!state->isCurPt()) { - //error(getPos(), "No path in stroke"); - return; - } - if (state->isPath() && !contentIsHidden()) { - if (state->getStrokeColorSpace()->getMode() == csPattern) { - doPatternStroke(); - } else { - out->stroke(state); - } - } - doEndPath(); -} - -void Gfx::opCloseStroke(Object * /*args[]*/, int /*numArgs*/) { - if (!state->isCurPt()) { - //error(getPos(), "No path in closepath/stroke"); - return; - } - state->closePath(); - if (state->isPath() && !contentIsHidden()) { - if (state->getStrokeColorSpace()->getMode() == csPattern) { - doPatternStroke(); - } else { - out->stroke(state); - } - } - doEndPath(); -} - -void Gfx::opFill(Object args[], int numArgs) { - if (!state->isCurPt()) { - //error(getPos(), "No path in fill"); - return; - } - if (state->isPath() && !contentIsHidden()) { - if (state->getFillColorSpace()->getMode() == csPattern) { - doPatternFill(gFalse); - } else { - out->fill(state); - } - } - doEndPath(); -} - -void Gfx::opEOFill(Object args[], int numArgs) { - if (!state->isCurPt()) { - //error(getPos(), "No path in eofill"); - return; - } - if (state->isPath() && !contentIsHidden()) { - if (state->getFillColorSpace()->getMode() == csPattern) { - doPatternFill(gTrue); - } else { - out->eoFill(state); - } - } - doEndPath(); -} - -void Gfx::opFillStroke(Object args[], int numArgs) { - if (!state->isCurPt()) { - //error(getPos(), "No path in fill/stroke"); - return; - } - if (state->isPath() && !contentIsHidden()) { - if (state->getFillColorSpace()->getMode() == csPattern) { - doPatternFill(gFalse); - } else { - out->fill(state); - } - if (state->getStrokeColorSpace()->getMode() == csPattern) { - doPatternStroke(); - } else { - out->stroke(state); - } - } - doEndPath(); -} - -void Gfx::opCloseFillStroke(Object args[], int numArgs) { - if (!state->isCurPt()) { - //error(getPos(), "No path in closepath/fill/stroke"); - return; - } - if (state->isPath() && !contentIsHidden()) { - state->closePath(); - if (state->getFillColorSpace()->getMode() == csPattern) { - doPatternFill(gFalse); - } else { - out->fill(state); - } - if (state->getStrokeColorSpace()->getMode() == csPattern) { - doPatternStroke(); - } else { - out->stroke(state); - } - } - doEndPath(); -} - -void Gfx::opEOFillStroke(Object args[], int numArgs) { - if (!state->isCurPt()) { - //error(getPos(), "No path in eofill/stroke"); - return; - } - if (state->isPath() && !contentIsHidden()) { - if (state->getFillColorSpace()->getMode() == csPattern) { - doPatternFill(gTrue); - } else { - out->eoFill(state); - } - if (state->getStrokeColorSpace()->getMode() == csPattern) { - doPatternStroke(); - } else { - out->stroke(state); - } - } - doEndPath(); -} - -void Gfx::opCloseEOFillStroke(Object args[], int numArgs) { - if (!state->isCurPt()) { - //error(getPos(), "No path in closepath/eofill/stroke"); - return; - } - if (state->isPath() && !contentIsHidden()) { - state->closePath(); - if (state->getFillColorSpace()->getMode() == csPattern) { - doPatternFill(gTrue); - } else { - out->eoFill(state); - } - if (state->getStrokeColorSpace()->getMode() == csPattern) { - doPatternStroke(); - } else { - out->stroke(state); - } - } - doEndPath(); -} - -void Gfx::doPatternFill(GBool eoFill) { - GfxPattern *pattern; - - // this is a bit of a kludge -- patterns can be really slow, so we - // skip them if we're only doing text extraction, since they almost - // certainly don't contain any text - if (!out->needNonText()) { - return; - } - - if (!(pattern = state->getFillPattern())) { - return; - } - switch (pattern->getType()) { - case 1: - doTilingPatternFill((GfxTilingPattern *)pattern, gFalse, eoFill); - break; - case 2: - doShadingPatternFill((GfxShadingPattern *)pattern, gFalse, eoFill); - break; - default: - error(getPos(), "Unimplemented pattern type (%d) in fill", - pattern->getType()); - break; - } -} - -void Gfx::doPatternStroke() { - GfxPattern *pattern; - - // this is a bit of a kludge -- patterns can be really slow, so we - // skip them if we're only doing text extraction, since they almost - // certainly don't contain any text - if (!out->needNonText()) { - return; - } - - if (!(pattern = state->getStrokePattern())) { - return; - } - switch (pattern->getType()) { - case 1: - doTilingPatternFill((GfxTilingPattern *)pattern, gTrue, gFalse); - break; - case 2: - doShadingPatternFill((GfxShadingPattern *)pattern, gTrue, gFalse); - break; - default: - error(getPos(), "Unimplemented pattern type (%d) in stroke", - pattern->getType()); - break; - } -} - -void Gfx::doTilingPatternFill(GfxTilingPattern *tPat, - GBool stroke, GBool eoFill) { - GfxPatternColorSpace *patCS; - GfxColorSpace *cs; - GfxColor color; - GfxPath *savedPath; - double xMin, yMin, xMax, yMax, x, y, x1, y1; - double cxMin, cyMin, cxMax, cyMax; - int xi0, yi0, xi1, yi1, xi, yi; - double *ctm, *btm, *ptm; - double m[6], ictm[6], m1[6], imb[6]; - double det; - double xstep, ystep; - int i; - - // get color space - patCS = (GfxPatternColorSpace *)(stroke ? state->getStrokeColorSpace() - : state->getFillColorSpace()); - - // construct a (pattern space) -> (current space) transform matrix - ctm = state->getCTM(); - btm = baseMatrix; - ptm = tPat->getMatrix(); - // iCTM = invert CTM - det = 1 / (ctm[0] * ctm[3] - ctm[1] * ctm[2]); - ictm[0] = ctm[3] * det; - ictm[1] = -ctm[1] * det; - ictm[2] = -ctm[2] * det; - ictm[3] = ctm[0] * det; - ictm[4] = (ctm[2] * ctm[5] - ctm[3] * ctm[4]) * det; - ictm[5] = (ctm[1] * ctm[4] - ctm[0] * ctm[5]) * det; - // m1 = PTM * BTM = PTM * base transform matrix - m1[0] = ptm[0] * btm[0] + ptm[1] * btm[2]; - m1[1] = ptm[0] * btm[1] + ptm[1] * btm[3]; - m1[2] = ptm[2] * btm[0] + ptm[3] * btm[2]; - m1[3] = ptm[2] * btm[1] + ptm[3] * btm[3]; - m1[4] = ptm[4] * btm[0] + ptm[5] * btm[2] + btm[4]; - m1[5] = ptm[4] * btm[1] + ptm[5] * btm[3] + btm[5]; - // m = m1 * iCTM = (PTM * BTM) * (iCTM) - m[0] = m1[0] * ictm[0] + m1[1] * ictm[2]; - m[1] = m1[0] * ictm[1] + m1[1] * ictm[3]; - m[2] = m1[2] * ictm[0] + m1[3] * ictm[2]; - m[3] = m1[2] * ictm[1] + m1[3] * ictm[3]; - m[4] = m1[4] * ictm[0] + m1[5] * ictm[2] + ictm[4]; - m[5] = m1[4] * ictm[1] + m1[5] * ictm[3] + ictm[5]; - - // construct a (device space) -> (pattern space) transform matrix - det = 1 / (m1[0] * m1[3] - m1[1] * m1[2]); - imb[0] = m1[3] * det; - imb[1] = -m1[1] * det; - imb[2] = -m1[2] * det; - imb[3] = m1[0] * det; - imb[4] = (m1[2] * m1[5] - m1[3] * m1[4]) * det; - imb[5] = (m1[1] * m1[4] - m1[0] * m1[5]) * det; - - // save current graphics state - savedPath = state->getPath()->copy(); - saveState(); - - // set underlying color space (for uncolored tiling patterns); set - // various other parameters (stroke color, line width) to match - // Adobe's behavior - if (tPat->getPaintType() == 2 && (cs = patCS->getUnder())) { - state->setFillColorSpace(cs->copy()); - out->updateFillColorSpace(state); - state->setStrokeColorSpace(cs->copy()); - out->updateStrokeColorSpace(state); - if (stroke) { - state->setFillColor(state->getStrokeColor()); - } else { - state->setStrokeColor(state->getFillColor()); - } - } else { - cs = new GfxDeviceGrayColorSpace(); - state->setFillColorSpace(cs); - cs->getDefaultColor(&color); - state->setFillColor(&color); - out->updateFillColorSpace(state); - state->setStrokeColorSpace(new GfxDeviceGrayColorSpace()); - state->setStrokeColor(&color); - out->updateStrokeColorSpace(state); - } - state->setFillPattern(NULL); - out->updateFillColor(state); - state->setStrokePattern(NULL); - out->updateStrokeColor(state); - - // clip to current path - if (stroke) { - state->clipToStrokePath(); - out->clipToStrokePath(state); - } else if (!textHaveCSPattern && !maskHaveCSPattern) { - state->clip(); - if (eoFill) { - out->eoClip(state); - } else { - out->clip(state); - } - } - state->clearPath(); - state->setLineWidth(0); - out->updateLineWidth(state); - - // get the clip region, check for empty - state->getClipBBox(&cxMin, &cyMin, &cxMax, &cyMax); - if (cxMin > cxMax || cyMin > cyMax) { - goto restore; - } - - // transform clip region bbox to pattern space - xMin = xMax = cxMin * imb[0] + cyMin * imb[2] + imb[4]; - yMin = yMax = cxMin * imb[1] + cyMin * imb[3] + imb[5]; - x1 = cxMin * imb[0] + cyMax * imb[2] + imb[4]; - y1 = cxMin * imb[1] + cyMax * imb[3] + imb[5]; - if (x1 < xMin) { - xMin = x1; - } else if (x1 > xMax) { - xMax = x1; - } - if (y1 < yMin) { - yMin = y1; - } else if (y1 > yMax) { - yMax = y1; - } - x1 = cxMax * imb[0] + cyMin * imb[2] + imb[4]; - y1 = cxMax * imb[1] + cyMin * imb[3] + imb[5]; - if (x1 < xMin) { - xMin = x1; - } else if (x1 > xMax) { - xMax = x1; - } - if (y1 < yMin) { - yMin = y1; - } else if (y1 > yMax) { - yMax = y1; - } - x1 = cxMax * imb[0] + cyMax * imb[2] + imb[4]; - y1 = cxMax * imb[1] + cyMax * imb[3] + imb[5]; - if (x1 < xMin) { - xMin = x1; - } else if (x1 > xMax) { - xMax = x1; - } - if (y1 < yMin) { - yMin = y1; - } else if (y1 > yMax) { - yMax = y1; - } - - // draw the pattern - //~ this should treat negative steps differently -- start at right/top - //~ edge instead of left/bottom (?) - xstep = fabs(tPat->getXStep()); - ystep = fabs(tPat->getYStep()); - xi0 = (int)ceil((xMin - tPat->getBBox()[2]) / xstep); - xi1 = (int)floor((xMax - tPat->getBBox()[0]) / xstep) + 1; - yi0 = (int)ceil((yMin - tPat->getBBox()[3]) / ystep); - yi1 = (int)floor((yMax - tPat->getBBox()[1]) / ystep) + 1; - for (i = 0; i < 4; ++i) { - m1[i] = m[i]; - } - if (!contentIsHidden()) { - m1[4] = m[4]; - m1[5] = m[5]; - if (out->useTilingPatternFill() && - out->tilingPatternFill(state, catalog, tPat->getContentStream(), - tPat->getMatrix(), tPat->getPaintType(), tPat->getTilingType(), - tPat->getResDict(), m1, tPat->getBBox(), - xi0, yi0, xi1, yi1, xstep, ystep)) { - goto restore; - } else { - for (yi = yi0; yi < yi1; ++yi) { - for (xi = xi0; xi < xi1; ++xi) { - x = xi * xstep; - y = yi * ystep; - m1[4] = x * m[0] + y * m[2] + m[4]; - m1[5] = x * m[1] + y * m[3] + m[5]; - doForm1(tPat->getContentStream(), tPat->getResDict(), - m1, tPat->getBBox()); - } - } - } - } - - // restore graphics state - restore: - restoreState(); - state->setPath(savedPath); -} - -void Gfx::doShadingPatternFill(GfxShadingPattern *sPat, - GBool stroke, GBool eoFill) { - GfxShading *shading; - GfxPath *savedPath; - double *ctm, *btm, *ptm; - double m[6], ictm[6], m1[6]; - double xMin, yMin, xMax, yMax; - double det; - - shading = sPat->getShading(); - - // save current graphics state - savedPath = state->getPath()->copy(); - saveState(); - - // clip to bbox - if (shading->getHasBBox()) { - shading->getBBox(&xMin, &yMin, &xMax, &yMax); - state->moveTo(xMin, yMin); - state->lineTo(xMax, yMin); - state->lineTo(xMax, yMax); - state->lineTo(xMin, yMax); - state->closePath(); - state->clip(); - if (!textHaveCSPattern && !maskHaveCSPattern) - out->clip(state); - state->setPath(savedPath->copy()); - } - - // clip to current path - if (stroke) { - state->clipToStrokePath(); - out->clipToStrokePath(state); - } else if (!textHaveCSPattern && !maskHaveCSPattern) { - state->clip(); - if (eoFill) { - out->eoClip(state); - } else { - out->clip(state); - } - } - - // set the color space - state->setFillColorSpace(shading->getColorSpace()->copy()); - out->updateFillColorSpace(state); - - // background color fill - if (shading->getHasBackground()) { - state->setFillColor(shading->getBackground()); - out->updateFillColor(state); - if (!contentIsHidden()) - out->fill(state); - } - state->clearPath(); - - // construct a (pattern space) -> (current space) transform matrix - ctm = state->getCTM(); - btm = baseMatrix; - ptm = sPat->getMatrix(); - // iCTM = invert CTM - det = 1 / (ctm[0] * ctm[3] - ctm[1] * ctm[2]); - ictm[0] = ctm[3] * det; - ictm[1] = -ctm[1] * det; - ictm[2] = -ctm[2] * det; - ictm[3] = ctm[0] * det; - ictm[4] = (ctm[2] * ctm[5] - ctm[3] * ctm[4]) * det; - ictm[5] = (ctm[1] * ctm[4] - ctm[0] * ctm[5]) * det; - // m1 = PTM * BTM = PTM * base transform matrix - m1[0] = ptm[0] * btm[0] + ptm[1] * btm[2]; - m1[1] = ptm[0] * btm[1] + ptm[1] * btm[3]; - m1[2] = ptm[2] * btm[0] + ptm[3] * btm[2]; - m1[3] = ptm[2] * btm[1] + ptm[3] * btm[3]; - m1[4] = ptm[4] * btm[0] + ptm[5] * btm[2] + btm[4]; - m1[5] = ptm[4] * btm[1] + ptm[5] * btm[3] + btm[5]; - // m = m1 * iCTM = (PTM * BTM) * (iCTM) - m[0] = m1[0] * ictm[0] + m1[1] * ictm[2]; - m[1] = m1[0] * ictm[1] + m1[1] * ictm[3]; - m[2] = m1[2] * ictm[0] + m1[3] * ictm[2]; - m[3] = m1[2] * ictm[1] + m1[3] * ictm[3]; - m[4] = m1[4] * ictm[0] + m1[5] * ictm[2] + ictm[4]; - m[5] = m1[4] * ictm[1] + m1[5] * ictm[3] + ictm[5]; - - // set the new matrix - state->concatCTM(m[0], m[1], m[2], m[3], m[4], m[5]); - out->updateCTM(state, m[0], m[1], m[2], m[3], m[4], m[5]); - -#if 1 //~tmp: turn off anti-aliasing temporarily - GBool vaa = out->getVectorAntialias(); - if (vaa) { - out->setVectorAntialias(gFalse); - } -#endif - - // do shading type-specific operations - switch (shading->getType()) { - case 1: - doFunctionShFill((GfxFunctionShading *)shading); - break; - case 2: - doAxialShFill((GfxAxialShading *)shading); - break; - case 3: - doRadialShFill((GfxRadialShading *)shading); - break; - case 4: - case 5: - doGouraudTriangleShFill((GfxGouraudTriangleShading *)shading); - break; - case 6: - case 7: - doPatchMeshShFill((GfxPatchMeshShading *)shading); - break; - } - -#if 1 //~tmp: turn off anti-aliasing temporarily - if (vaa) { - out->setVectorAntialias(gTrue); - } -#endif - - // restore graphics state - restoreState(); - state->setPath(savedPath); -} - -void Gfx::opShFill(Object args[], int numArgs) { - GfxShading *shading; - GfxPath *savedPath; - double xMin, yMin, xMax, yMax; - - if (!(shading = res->lookupShading(args[0].getName(), this))) { - return; - } - - // save current graphics state - savedPath = state->getPath()->copy(); - saveState(); - - // clip to bbox - if (shading->getHasBBox()) { - shading->getBBox(&xMin, &yMin, &xMax, &yMax); - state->moveTo(xMin, yMin); - state->lineTo(xMax, yMin); - state->lineTo(xMax, yMax); - state->lineTo(xMin, yMax); - state->closePath(); - state->clip(); - out->clip(state); - state->clearPath(); - } - - // set the color space - state->setFillColorSpace(shading->getColorSpace()->copy()); - out->updateFillColorSpace(state); - -#if 1 //~tmp: turn off anti-aliasing temporarily - GBool vaa = out->getVectorAntialias(); - if (vaa) { - out->setVectorAntialias(gFalse); - } -#endif - - // do shading type-specific operations - switch (shading->getType()) { - case 1: - doFunctionShFill((GfxFunctionShading *)shading); - break; - case 2: - doAxialShFill((GfxAxialShading *)shading); - break; - case 3: - doRadialShFill((GfxRadialShading *)shading); - break; - case 4: - case 5: - doGouraudTriangleShFill((GfxGouraudTriangleShading *)shading); - break; - case 6: - case 7: - doPatchMeshShFill((GfxPatchMeshShading *)shading); - break; - } - -#if 1 //~tmp: turn off anti-aliasing temporarily - if (vaa) { - out->setVectorAntialias(gTrue); - } -#endif - - // restore graphics state - restoreState(); - state->setPath(savedPath); - - delete shading; -} - -void Gfx::doFunctionShFill(GfxFunctionShading *shading) { - double x0, y0, x1, y1; - GfxColor colors[4]; - - if (out->useShadedFills( shading->getType() ) && - out->functionShadedFill(state, shading)) { - return; - } - - shading->getDomain(&x0, &y0, &x1, &y1); - shading->getColor(x0, y0, &colors[0]); - shading->getColor(x0, y1, &colors[1]); - shading->getColor(x1, y0, &colors[2]); - shading->getColor(x1, y1, &colors[3]); - doFunctionShFill1(shading, x0, y0, x1, y1, colors, 0); -} - -void Gfx::doFunctionShFill1(GfxFunctionShading *shading, - double x0, double y0, - double x1, double y1, - GfxColor *colors, int depth) { - GfxColor fillColor; - GfxColor color0M, color1M, colorM0, colorM1, colorMM; - GfxColor colors2[4]; - double *matrix; - double xM, yM; - int nComps, i, j; - - nComps = shading->getColorSpace()->getNComps(); - matrix = shading->getMatrix(); - - // compare the four corner colors - for (i = 0; i < 4; ++i) { - for (j = 0; j < nComps; ++j) { - if (abs(colors[i].c[j] - colors[(i+1)&3].c[j]) > functionColorDelta) { - break; - } - } - if (j < nComps) { - break; - } - } - - // center of the rectangle - xM = 0.5 * (x0 + x1); - yM = 0.5 * (y0 + y1); - - // the four corner colors are close (or we hit the recursive limit) - // -- fill the rectangle; but require at least one subdivision - // (depth==0) to avoid problems when the four outer corners of the - // shaded region are the same color - if ((i == 4 && depth > 0) || depth == functionMaxDepth) { - - // use the center color - shading->getColor(xM, yM, &fillColor); - state->setFillColor(&fillColor); - out->updateFillColor(state); - - // fill the rectangle - state->moveTo(x0 * matrix[0] + y0 * matrix[2] + matrix[4], - x0 * matrix[1] + y0 * matrix[3] + matrix[5]); - state->lineTo(x1 * matrix[0] + y0 * matrix[2] + matrix[4], - x1 * matrix[1] + y0 * matrix[3] + matrix[5]); - state->lineTo(x1 * matrix[0] + y1 * matrix[2] + matrix[4], - x1 * matrix[1] + y1 * matrix[3] + matrix[5]); - state->lineTo(x0 * matrix[0] + y1 * matrix[2] + matrix[4], - x0 * matrix[1] + y1 * matrix[3] + matrix[5]); - state->closePath(); - if (!contentIsHidden()) - out->fill(state); - state->clearPath(); - - // the four corner colors are not close enough -- subdivide the - // rectangle - } else { - - // colors[0] colorM0 colors[2] - // (x0,y0) (xM,y0) (x1,y0) - // +----------+----------+ - // | | | - // | UL | UR | - // color0M | colorMM | color1M - // (x0,yM) +----------+----------+ (x1,yM) - // | (xM,yM) | - // | LL | LR | - // | | | - // +----------+----------+ - // colors[1] colorM1 colors[3] - // (x0,y1) (xM,y1) (x1,y1) - - shading->getColor(x0, yM, &color0M); - shading->getColor(x1, yM, &color1M); - shading->getColor(xM, y0, &colorM0); - shading->getColor(xM, y1, &colorM1); - shading->getColor(xM, yM, &colorMM); - - // upper-left sub-rectangle - colors2[0] = colors[0]; - colors2[1] = color0M; - colors2[2] = colorM0; - colors2[3] = colorMM; - doFunctionShFill1(shading, x0, y0, xM, yM, colors2, depth + 1); - - // lower-left sub-rectangle - colors2[0] = color0M; - colors2[1] = colors[1]; - colors2[2] = colorMM; - colors2[3] = colorM1; - doFunctionShFill1(shading, x0, yM, xM, y1, colors2, depth + 1); - - // upper-right sub-rectangle - colors2[0] = colorM0; - colors2[1] = colorMM; - colors2[2] = colors[2]; - colors2[3] = color1M; - doFunctionShFill1(shading, xM, y0, x1, yM, colors2, depth + 1); - - // lower-right sub-rectangle - colors2[0] = colorMM; - colors2[1] = colorM1; - colors2[2] = color1M; - colors2[3] = colors[3]; - doFunctionShFill1(shading, xM, yM, x1, y1, colors2, depth + 1); - } -} - -static void bubbleSort(double array[]) -{ - for (int j = 0; j < 3; ++j) { - int kk = j; - for (int k = j + 1; k < 4; ++k) { - if (array[k] < array[kk]) { - kk = k; - } - } - double tmp = array[j]; - array[j] = array[kk]; - array[kk] = tmp; - } -} - -void Gfx::doAxialShFill(GfxAxialShading *shading) { - double xMin, yMin, xMax, yMax; - double x0, y0, x1, y1; - double dx, dy, mul; - GBool dxZero, dyZero; - double bboxIntersections[4]; - double tMin, tMax, tx, ty; - double s[4], sMin, sMax, tmp; - double ux0, uy0, ux1, uy1, vx0, vy0, vx1, vy1; - double t0, t1, tt; - double ta[axialMaxSplits + 1]; - int next[axialMaxSplits + 1]; - GfxColor color0, color1; - int nComps; - int i, j, k; - GBool needExtend = gTrue; - - // get the clip region bbox - state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); - - // compute min and max t values, based on the four corners of the - // clip region bbox - shading->getCoords(&x0, &y0, &x1, &y1); - dx = x1 - x0; - dy = y1 - y0; - dxZero = fabs(dx) < 0.01; - dyZero = fabs(dy) < 0.01; - if (dxZero && dyZero) { - tMin = tMax = 0; - } else { - mul = 1 / (dx * dx + dy * dy); - bboxIntersections[0] = ((xMin - x0) * dx + (yMin - y0) * dy) * mul; - bboxIntersections[1] = ((xMin - x0) * dx + (yMax - y0) * dy) * mul; - bboxIntersections[2] = ((xMax - x0) * dx + (yMin - y0) * dy) * mul; - bboxIntersections[3] = ((xMax - x0) * dx + (yMax - y0) * dy) * mul; - bubbleSort(bboxIntersections); - tMin = bboxIntersections[0]; - tMax = bboxIntersections[3]; - if (tMin < 0 && !shading->getExtend0()) { - tMin = 0; - } - if (tMax > 1 && !shading->getExtend1()) { - tMax = 1; - } - } - - if (out->useShadedFills( shading->getType() ) && - out->axialShadedFill(state, shading, tMin, tMax)) { - return; - } - - // get the function domain - t0 = shading->getDomain0(); - t1 = shading->getDomain1(); - - // Traverse the t axis and do the shading. - // - // For each point (tx, ty) on the t axis, consider a line through - // that point perpendicular to the t axis: - // - // x(s) = tx + s * -dy --> s = (x - tx) / -dy - // y(s) = ty + s * dx --> s = (y - ty) / dx - // - // Then look at the intersection of this line with the bounding box - // (xMin, yMin, xMax, yMax). In the general case, there are four - // intersection points: - // - // s0 = (xMin - tx) / -dy - // s1 = (xMax - tx) / -dy - // s2 = (yMin - ty) / dx - // s3 = (yMax - ty) / dx - // - // and we want the middle two s values. - // - // In the case where dx = 0, take s0 and s1; in the case where dy = - // 0, take s2 and s3. - // - // Each filled polygon is bounded by two of these line segments - // perpdendicular to the t axis. - // - // The t axis is bisected into smaller regions until the color - // difference across a region is small enough, and then the region - // is painted with a single color. - - // set up: require at least one split to avoid problems when the two - // ends of the t axis have the same color - nComps = shading->getColorSpace()->getNComps(); - ta[0] = tMin; - next[0] = axialMaxSplits / 2; - ta[axialMaxSplits / 2] = 0.5 * (tMin + tMax); - next[axialMaxSplits / 2] = axialMaxSplits; - ta[axialMaxSplits] = tMax; - - // compute the color at t = tMin - if (tMin < 0) { - tt = t0; - } else if (tMin > 1) { - tt = t1; - } else { - tt = t0 + (t1 - t0) * tMin; - } - shading->getColor(tt, &color0); - - if (out->useFillColorStop()) { - // make sure we add stop color when t = tMin - state->setFillColor(&color0); - out->updateFillColorStop(state, 0); - } - - // compute the coordinates of the point on the t axis at t = tMin; - // then compute the intersection of the perpendicular line with the - // bounding box - tx = x0 + tMin * dx; - ty = y0 + tMin * dy; - if (dxZero && dyZero) { - sMin = sMax = 0; - } else if (dxZero) { - sMin = (xMin - tx) / -dy; - sMax = (xMax - tx) / -dy; - if (sMin > sMax) { tmp = sMin; sMin = sMax; sMax = tmp; } - } else if (dyZero) { - sMin = (yMin - ty) / dx; - sMax = (yMax - ty) / dx; - if (sMin > sMax) { tmp = sMin; sMin = sMax; sMax = tmp; } - } else { - s[0] = (yMin - ty) / dx; - s[1] = (yMax - ty) / dx; - s[2] = (xMin - tx) / -dy; - s[3] = (xMax - tx) / -dy; - bubbleSort(s); - sMin = s[1]; - sMax = s[2]; - } - ux0 = tx - sMin * dy; - uy0 = ty + sMin * dx; - vx0 = tx - sMax * dy; - vy0 = ty + sMax * dx; - - i = 0; - bool doneBBox1, doneBBox2; - if (dxZero && dyZero) { - doneBBox1 = doneBBox2 = true; - } else { - doneBBox1 = bboxIntersections[1] < tMin; - doneBBox2 = bboxIntersections[2] > tMax; - } - - // If output device doesn't support the extended mode required - // we have to do it here - needExtend = !out->axialShadedSupportExtend(state, shading); - - while (i < axialMaxSplits) { - - // bisect until color difference is small enough or we hit the - // bisection limit - j = next[i]; - while (j > i + 1) { - if (ta[j] < 0) { - tt = t0; - } else if (ta[j] > 1) { - tt = t1; - } else { - tt = t0 + (t1 - t0) * ta[j]; - } - shading->getColor(tt, &color1); - if (isSameGfxColor(color1, color0, nComps, axialColorDelta)) { - // in these two if what we guarantee is that if we are skipping lots of - // positions because the colors are the same, we still create a region - // with vertexs passing by bboxIntersections[1] and bboxIntersections[2] - // otherwise we can have empty regions that should really be painted - // like happened in bug 19896 - // What we do to ensure that we pass a line through this points - // is making sure use the exact bboxIntersections[] value as one of the used ta[] values - if (!doneBBox1 && ta[i] < bboxIntersections[1] && ta[j] > bboxIntersections[1]) { - int teoricalj = (int) ((bboxIntersections[1] - tMin) * axialMaxSplits / (tMax - tMin)); - if (teoricalj <= i) teoricalj = i + 1; - if (teoricalj < j) { - next[i] = teoricalj; - next[teoricalj] = j; - } - else { - teoricalj = j; - } - ta[teoricalj] = bboxIntersections[1]; - j = teoricalj; - doneBBox1 = true; - } - if (!doneBBox2 && ta[i] < bboxIntersections[2] && ta[j] > bboxIntersections[2]) { - int teoricalj = (int) ((bboxIntersections[2] - tMin) * axialMaxSplits / (tMax - tMin)); - if (teoricalj <= i) teoricalj = i + 1; - if (teoricalj < j) { - next[i] = teoricalj; - next[teoricalj] = j; - } - else { - teoricalj = j; - } - ta[teoricalj] = bboxIntersections[2]; - j = teoricalj; - doneBBox2 = true; - } - break; - } - k = (i + j) / 2; - ta[k] = 0.5 * (ta[i] + ta[j]); - next[i] = k; - next[k] = j; - j = k; - } - - // use the average of the colors of the two sides of the region - for (k = 0; k < nComps; ++k) { - color0.c[k] = (color0.c[k] + color1.c[k]) / 2; - } - - // compute the coordinates of the point on the t axis; then - // compute the intersection of the perpendicular line with the - // bounding box - tx = x0 + ta[j] * dx; - ty = y0 + ta[j] * dy; - if (dxZero && dyZero) { - sMin = sMax = 0; - } else if (dxZero) { - sMin = (xMin - tx) / -dy; - sMax = (xMax - tx) / -dy; - if (sMin > sMax) { tmp = sMin; sMin = sMax; sMax = tmp; } - } else if (dyZero) { - sMin = (yMin - ty) / dx; - sMax = (yMax - ty) / dx; - if (sMin > sMax) { tmp = sMin; sMin = sMax; sMax = tmp; } - } else { - s[0] = (yMin - ty) / dx; - s[1] = (yMax - ty) / dx; - s[2] = (xMin - tx) / -dy; - s[3] = (xMax - tx) / -dy; - bubbleSort(s); - sMin = s[1]; - sMax = s[2]; - } - ux1 = tx - sMin * dy; - uy1 = ty + sMin * dx; - vx1 = tx - sMax * dy; - vy1 = ty + sMax * dx; - - // set the color - state->setFillColor(&color0); - if (out->useFillColorStop()) - out->updateFillColorStop(state, (ta[j] - tMin)/(tMax - tMin)); - else - out->updateFillColor(state); - - if (needExtend) { - // fill the region - state->moveTo(ux0, uy0); - state->lineTo(vx0, vy0); - state->lineTo(vx1, vy1); - state->lineTo(ux1, uy1); - state->closePath(); - } - - if (!out->useFillColorStop()) { - if (!contentIsHidden()) - out->fill(state); - state->clearPath(); - } - - // set up for next region - ux0 = ux1; - uy0 = uy1; - vx0 = vx1; - vy0 = vy1; - color0 = color1; - i = next[i]; - } - - if (out->useFillColorStop()) { - if (!needExtend) { - state->moveTo(xMin, yMin); - state->lineTo(xMin, yMax); - state->lineTo(xMax, yMax); - state->lineTo(xMax, yMin); - state->closePath(); - } - if (!contentIsHidden()) - out->fill(state); - state->clearPath(); - } -} - -static inline void getShadingColorRadialHelper(double t0, double t1, double t, GfxRadialShading *shading, GfxColor *color) -{ - if (t0 < t1) { - if (t < t0) { - shading->getColor(t0, color); - } else if (t > t1) { - shading->getColor(t1, color); - } else { - shading->getColor(t, color); - } - } else { - if (t > t0) { - shading->getColor(t0, color); - } else if (t < t1) { - shading->getColor(t1, color); - } else { - shading->getColor(t, color); - } - } -} - -void Gfx::doRadialShFill(GfxRadialShading *shading) { - double xMin, yMin, xMax, yMax; - double x0, y0, r0, x1, y1, r1, t0, t1; - int nComps; - GfxColor colorA, colorB; - double xa, ya, xb, yb, ra, rb; - double ta, tb, sa, sb; - double sz, xz, yz, sMin, sMax; - GBool enclosed; - int ia, ib, k, n; - double *ctm; - double theta, alpha, angle, t; - GBool needExtend = gTrue; - - // get the shading info - shading->getCoords(&x0, &y0, &r0, &x1, &y1, &r1); - t0 = shading->getDomain0(); - t1 = shading->getDomain1(); - nComps = shading->getColorSpace()->getNComps(); - - // Compute the point at which r(s) = 0; check for the enclosed - // circles case; and compute the angles for the tangent lines. - if (x0 == x1 && y0 == y1) { - enclosed = gTrue; - theta = 0; // make gcc happy - sz = 0; // make gcc happy - } else if (r0 == r1) { - enclosed = gFalse; - theta = 0; - sz = 0; // make gcc happy - } else { - sz = (r1 > r0) ? -r0 / (r1 - r0) : -r1 / (r0 - r1); - xz = x0 + sz * (x1 - x0); - yz = y0 + sz * (y1 - y0); - enclosed = (xz - x0) * (xz - x0) + (yz - y0) * (yz - y0) <= r0 * r0; - theta = asin(r0 / sqrt((x0 - xz) * (x0 - xz) + (y0 - yz) * (y0 - yz))); - if (r0 > r1) { - theta = -theta; - } - } - if (enclosed) { - alpha = 0; - } else { - alpha = atan2(y1 - y0, x1 - x0); - } - - // compute the (possibly extended) s range - state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); - if (enclosed) { - sMin = 0; - sMax = 1; - } else { - sMin = 1; - sMax = 0; - // solve for x(s) + r(s) = xMin - if ((x1 + r1) - (x0 + r0) != 0) { - sa = (xMin - (x0 + r0)) / ((x1 + r1) - (x0 + r0)); - if (sa < sMin) { - sMin = sa; - } else if (sa > sMax) { - sMax = sa; - } - } - // solve for x(s) - r(s) = xMax - if ((x1 - r1) - (x0 - r0) != 0) { - sa = (xMax - (x0 - r0)) / ((x1 - r1) - (x0 - r0)); - if (sa < sMin) { - sMin = sa; - } else if (sa > sMax) { - sMax = sa; - } - } - // solve for y(s) + r(s) = yMin - if ((y1 + r1) - (y0 + r0) != 0) { - sa = (yMin - (y0 + r0)) / ((y1 + r1) - (y0 + r0)); - if (sa < sMin) { - sMin = sa; - } else if (sa > sMax) { - sMax = sa; - } - } - // solve for y(s) - r(s) = yMax - if ((y1 - r1) - (y0 - r0) != 0) { - sa = (yMax - (y0 - r0)) / ((y1 - r1) - (y0 - r0)); - if (sa < sMin) { - sMin = sa; - } else if (sa > sMax) { - sMax = sa; - } - } - // check against sz - if (r0 < r1) { - if (sMin < sz) { - sMin = sz; - } - } else if (r0 > r1) { - if (sMax > sz) { - sMax = sz; - } - } - // check the 'extend' flags - if (!shading->getExtend0() && sMin < 0) { - sMin = 0; - } - if (!shading->getExtend1() && sMax > 1) { - sMax = 1; - } - } - - if (out->useShadedFills( shading->getType() ) && - out->radialShadedFill(state, shading, sMin, sMax)) { - return; - } - - // compute the number of steps into which circles must be divided to - // achieve a curve flatness of 0.1 pixel in device space for the - // largest circle (note that "device space" is 72 dpi when generating - // PostScript, hence the relatively small 0.1 pixel accuracy) - ctm = state->getCTM(); - t = fabs(ctm[0]); - if (fabs(ctm[1]) > t) { - t = fabs(ctm[1]); - } - if (fabs(ctm[2]) > t) { - t = fabs(ctm[2]); - } - if (fabs(ctm[3]) > t) { - t = fabs(ctm[3]); - } - if (r0 > r1) { - t *= r0; - } else { - t *= r1; - } - if (t < 1) { - n = 3; - } else { - n = (int)(M_PI / acos(1 - 0.1 / t)); - if (n < 3) { - n = 3; - } else if (n > 200) { - n = 200; - } - } - - // setup for the start circle - ia = 0; - sa = sMin; - ta = t0 + sa * (t1 - t0); - xa = x0 + sa * (x1 - x0); - ya = y0 + sa * (y1 - y0); - ra = r0 + sa * (r1 - r0); - getShadingColorRadialHelper(t0, t1, ta, shading, &colorA); - - needExtend = !out->radialShadedSupportExtend(state, shading); - - // fill the circles - while (ia < radialMaxSplits) { - - // go as far along the t axis (toward t1) as we can, such that the - // color difference is within the tolerance (radialColorDelta) -- - // this uses bisection (between the current value, t, and t1), - // limited to radialMaxSplits points along the t axis; require at - // least one split to avoid problems when the innermost and - // outermost colors are the same - ib = radialMaxSplits; - sb = sMax; - tb = t0 + sb * (t1 - t0); - getShadingColorRadialHelper(t0, t1, tb, shading, &colorB); - while (ib - ia > 1) { - if (isSameGfxColor(colorB, colorA, nComps, radialColorDelta)) { - // The shading is not necessarily lineal so having two points with the - // same color does not mean all the areas in between have the same color too - int ic = ia + 1; - for (; ic <= ib; ic++) { - GfxColor colorC; - const double sc = sMin + ((double)ic / (double)radialMaxSplits) * (sMax - sMin); - const double tc = t0 + sc * (t1 - t0); - getShadingColorRadialHelper(t0, t1, tc, shading, &colorC); - if (!isSameGfxColor(colorC, colorA, nComps, radialColorDelta)) { - break; - } - } - ib = (ic > ia + 1) ? ic - 1 : ia + 1; - sb = sMin + ((double)ib / (double)radialMaxSplits) * (sMax - sMin); - tb = t0 + sb * (t1 - t0); - getShadingColorRadialHelper(t0, t1, tb, shading, &colorB); - break; - } - ib = (ia + ib) / 2; - sb = sMin + ((double)ib / (double)radialMaxSplits) * (sMax - sMin); - tb = t0 + sb * (t1 - t0); - getShadingColorRadialHelper(t0, t1, tb, shading, &colorB); - } - - // compute center and radius of the circle - xb = x0 + sb * (x1 - x0); - yb = y0 + sb * (y1 - y0); - rb = r0 + sb * (r1 - r0); - - // use the average of the colors at the two circles - for (k = 0; k < nComps; ++k) { - colorA.c[k] = (colorA.c[k] + colorB.c[k]) / 2; - } - state->setFillColor(&colorA); - if (out->useFillColorStop()) - out->updateFillColorStop(state, (sa - sMin)/(sMax - sMin)); - else - out->updateFillColor(state); - - if (needExtend) { - if (enclosed) { - // construct path for first circle (counterclockwise) - state->moveTo(xa + ra, ya); - for (k = 1; k < n; ++k) { - angle = ((double)k / (double)n) * 2 * M_PI; - state->lineTo(xa + ra * cos(angle), ya + ra * sin(angle)); - } - state->closePath(); - - // construct and append path for second circle (clockwise) - state->moveTo(xb + rb, yb); - for (k = 1; k < n; ++k) { - angle = -((double)k / (double)n) * 2 * M_PI; - state->lineTo(xb + rb * cos(angle), yb + rb * sin(angle)); - } - state->closePath(); - } else { - // construct the first subpath (clockwise) - state->moveTo(xa + ra * cos(alpha + theta + 0.5 * M_PI), - ya + ra * sin(alpha + theta + 0.5 * M_PI)); - for (k = 0; k < n; ++k) { - angle = alpha + theta + 0.5 * M_PI - - ((double)k / (double)n) * (2 * theta + M_PI); - state->lineTo(xb + rb * cos(angle), yb + rb * sin(angle)); - } - for (k = 0; k < n; ++k) { - angle = alpha - theta - 0.5 * M_PI - + ((double)k / (double)n) * (2 * theta - M_PI); - state->lineTo(xa + ra * cos(angle), ya + ra * sin(angle)); - } - state->closePath(); - - // construct the second subpath (counterclockwise) - state->moveTo(xa + ra * cos(alpha + theta + 0.5 * M_PI), - ya + ra * sin(alpha + theta + 0.5 * M_PI)); - for (k = 0; k < n; ++k) { - angle = alpha + theta + 0.5 * M_PI - + ((double)k / (double)n) * (-2 * theta + M_PI); - state->lineTo(xb + rb * cos(angle), yb + rb * sin(angle)); - } - for (k = 0; k < n; ++k) { - angle = alpha - theta - 0.5 * M_PI - + ((double)k / (double)n) * (2 * theta + M_PI); - state->lineTo(xa + ra * cos(angle), ya + ra * sin(angle)); - } - state->closePath(); - } - } - - if (!out->useFillColorStop()) { - // fill the path - if (!contentIsHidden()) - out->fill(state); - state->clearPath(); - } - - // step to the next value of t - ia = ib; - sa = sb; - ta = tb; - xa = xb; - ya = yb; - ra = rb; - colorA = colorB; - } - - if (out->useFillColorStop()) { - // make sure we add stop color when sb = sMax - state->setFillColor(&colorA); - out->updateFillColorStop(state, (sb - sMin)/(sMax - sMin)); - - // fill the path - state->moveTo(xMin, yMin); - state->lineTo(xMin, yMax); - state->lineTo(xMax, yMax); - state->lineTo(xMax, yMin); - state->closePath(); - - if (!contentIsHidden()) - out->fill(state); - state->clearPath(); - } - - if (!needExtend) - return; - - if (enclosed) { - // extend the smaller circle - if ((shading->getExtend0() && r0 <= r1) || - (shading->getExtend1() && r1 < r0)) { - if (r0 <= r1) { - ta = t0; - ra = r0; - xa = x0; - ya = y0; - } else { - ta = t1; - ra = r1; - xa = x1; - ya = y1; - } - shading->getColor(ta, &colorA); - state->setFillColor(&colorA); - out->updateFillColor(state); - state->moveTo(xa + ra, ya); - for (k = 1; k < n; ++k) { - angle = ((double)k / (double)n) * 2 * M_PI; - state->lineTo(xa + ra * cos(angle), ya + ra * sin(angle)); - } - state->closePath(); - if (!contentIsHidden()) - out->fill(state); - state->clearPath(); - } - - // extend the larger circle - if ((shading->getExtend0() && r0 > r1) || - (shading->getExtend1() && r1 >= r0)) { - if (r0 > r1) { - ta = t0; - ra = r0; - xa = x0; - ya = y0; - } else { - ta = t1; - ra = r1; - xa = x1; - ya = y1; - } - shading->getColor(ta, &colorA); - state->setFillColor(&colorA); - out->updateFillColor(state); - state->moveTo(xMin, yMin); - state->lineTo(xMin, yMax); - state->lineTo(xMax, yMax); - state->lineTo(xMax, yMin); - state->closePath(); - state->moveTo(xa + ra, ya); - for (k = 1; k < n; ++k) { - angle = ((double)k / (double)n) * 2 * M_PI; - state->lineTo(xa + ra * cos(angle), ya + ra * sin(angle)); - } - state->closePath(); - if (!contentIsHidden()) - out->fill(state); - state->clearPath(); - } - } -} - -void Gfx::doGouraudTriangleShFill(GfxGouraudTriangleShading *shading) { - double x0, y0, x1, y1, x2, y2; - int i; - - if (out->useShadedFills( shading->getType()) && !contentIsHidden()) { - if (out->gouraudTriangleShadedFill( state, shading)) - return; - } - - // preallocate a path (speed improvements) - state->moveTo(0., 0.); - state->lineTo(1., 0.); - state->lineTo(0., 1.); - state->closePath(); - - GfxState::ReusablePathIterator *reusablePath = state->getReusablePath(); - - if (shading->isParameterized()) { - // work with parameterized values: - double color0, color1, color2; - // a relative threshold: - const double refineColorThreshold = gouraudParameterizedColorDelta * - (shading->getParameterDomainMax() - shading->getParameterDomainMin()); - for (i = 0; i < shading->getNTriangles(); ++i) { - shading->getTriangle(i, &x0, &y0, &color0, - &x1, &y1, &color1, - &x2, &y2, &color2); - gouraudFillTriangle(x0, y0, color0, x1, y1, color1, x2, y2, color2, refineColorThreshold, 0, shading, reusablePath); - } - - } else { - // this always produces output -- even for parameterized ranges. - // But it ignores the parameterized color map (the function). - // - // Note that using this code in for parameterized shadings might be - // correct in circumstances (namely if the function is linear in the actual - // triangle), but in general, it will simply be wrong. - GfxColor color0, color1, color2; - for (i = 0; i < shading->getNTriangles(); ++i) { - shading->getTriangle(i, &x0, &y0, &color0, - &x1, &y1, &color1, - &x2, &y2, &color2); - gouraudFillTriangle(x0, y0, &color0, x1, y1, &color1, x2, y2, &color2, shading->getColorSpace()->getNComps(), 0, reusablePath); - } - } - - delete reusablePath; -} - -void Gfx::gouraudFillTriangle(double x0, double y0, GfxColor *color0, - double x1, double y1, GfxColor *color1, - double x2, double y2, GfxColor *color2, - int nComps, int depth, GfxState::ReusablePathIterator *path) { - double x01, y01, x12, y12, x20, y20; - GfxColor color01, color12, color20; - int i; - - for (i = 0; i < nComps; ++i) { - if (abs(color0->c[i] - color1->c[i]) > gouraudColorDelta || - abs(color1->c[i] - color2->c[i]) > gouraudColorDelta) { - break; - } - } - if (i == nComps || depth == gouraudMaxDepth) { - state->setFillColor(color0); - out->updateFillColor(state); - - path->reset(); assert(!path->isEnd()); - path->setCoord(x0,y0); path->next(); assert(!path->isEnd()); - path->setCoord(x1,y1); path->next(); assert(!path->isEnd()); - path->setCoord(x2,y2); path->next(); assert(!path->isEnd()); - path->setCoord(x0,y0); path->next(); assert( path->isEnd()); - - if (!contentIsHidden()) - out->fill(state); - } else { - x01 = 0.5 * (x0 + x1); - y01 = 0.5 * (y0 + y1); - x12 = 0.5 * (x1 + x2); - y12 = 0.5 * (y1 + y2); - x20 = 0.5 * (x2 + x0); - y20 = 0.5 * (y2 + y0); - for (i = 0; i < nComps; ++i) { - color01.c[i] = (color0->c[i] + color1->c[i]) / 2; - color12.c[i] = (color1->c[i] + color2->c[i]) / 2; - color20.c[i] = (color2->c[i] + color0->c[i]) / 2; - } - gouraudFillTriangle(x0, y0, color0, x01, y01, &color01, - x20, y20, &color20, nComps, depth + 1, path); - gouraudFillTriangle(x01, y01, &color01, x1, y1, color1, - x12, y12, &color12, nComps, depth + 1, path); - gouraudFillTriangle(x01, y01, &color01, x12, y12, &color12, - x20, y20, &color20, nComps, depth + 1, path); - gouraudFillTriangle(x20, y20, &color20, x12, y12, &color12, - x2, y2, color2, nComps, depth + 1, path); - } -} -void Gfx::gouraudFillTriangle(double x0, double y0, double color0, - double x1, double y1, double color1, - double x2, double y2, double color2, - double refineColorThreshold, int depth, GfxGouraudTriangleShading *shading, GfxState::ReusablePathIterator *path) { - const double meanColor = (color0 + color1 + color2) / 3; - - const bool isFineEnough = - fabs(color0 - meanColor) < refineColorThreshold && - fabs(color1 - meanColor) < refineColorThreshold && - fabs(color2 - meanColor) < refineColorThreshold; - - if (isFineEnough || depth == gouraudMaxDepth) { - GfxColor color; - - shading->getParameterizedColor(meanColor, &color); - state->setFillColor(&color); - out->updateFillColor(state); - - path->reset(); assert(!path->isEnd()); - path->setCoord(x0,y0); path->next(); assert(!path->isEnd()); - path->setCoord(x1,y1); path->next(); assert(!path->isEnd()); - path->setCoord(x2,y2); path->next(); assert(!path->isEnd()); - path->setCoord(x0,y0); path->next(); assert( path->isEnd()); - - if (!contentIsHidden()) - out->fill(state); - } else { - const double x01 = 0.5 * (x0 + x1); - const double y01 = 0.5 * (y0 + y1); - const double x12 = 0.5 * (x1 + x2); - const double y12 = 0.5 * (y1 + y2); - const double x20 = 0.5 * (x2 + x0); - const double y20 = 0.5 * (y2 + y0); - const double color01 = (color0 + color1) / 2.; - const double color12 = (color1 + color2) / 2.; - const double color20 = (color2 + color0) / 2.; - ++depth; - gouraudFillTriangle(x0, y0, color0, - x01, y01, color01, - x20, y20, color20, - refineColorThreshold, depth, shading, path); - gouraudFillTriangle(x01, y01, color01, - x1, y1, color1, - x12, y12, color12, - refineColorThreshold, depth, shading, path); - gouraudFillTriangle(x01, y01, color01, - x12, y12, color12, - x20, y20, color20, - refineColorThreshold, depth, shading, path); - gouraudFillTriangle(x20, y20, color20, - x12, y12, color12, - x2, y2, color2, - refineColorThreshold, depth, shading, path); - } -} - -void Gfx::doPatchMeshShFill(GfxPatchMeshShading *shading) { - int start, i; - - if (out->useShadedFills( shading->getType()) && !contentIsHidden()) { - if (out->patchMeshShadedFill( state, shading)) - return; - } - - if (shading->getNPatches() > 128) { - start = 3; - } else if (shading->getNPatches() > 64) { - start = 2; - } else if (shading->getNPatches() > 16) { - start = 1; - } else { - start = 0; - } - /* - * Parameterized shadings take one parameter [t_0,t_e] - * and map it into the color space. - * - * Consequently, all color values are stored as doubles. - * - * These color values are interpreted as parameters for parameterized - * shadings and as colorspace entities otherwise. - * - * The only difference is that color space entities are stored into - * DOUBLE arrays, not into arrays of type GfxColorComp. - */ - const int colorComps = shading->getColorSpace()->getNComps(); - double refineColorThreshold; - if( shading->isParameterized() ) { - refineColorThreshold = gouraudParameterizedColorDelta * - (shading->getParameterDomainMax() - shading->getParameterDomainMin()); - - } else { - refineColorThreshold = patchColorDelta; - } - - for (i = 0; i < shading->getNPatches(); ++i) { - fillPatch(shading->getPatch(i), - colorComps, - shading->isParameterized() ? 1 : colorComps, - refineColorThreshold, - start, - shading); - } -} - - -void Gfx::fillPatch(GfxPatch *patch, int colorComps, int patchColorComps, double refineColorThreshold, int depth, GfxPatchMeshShading *shading) { - GfxPatch patch00, patch01, patch10, patch11; - double xx[4][8], yy[4][8]; - double xxm, yym; - int i; - - for (i = 0; i < patchColorComps; ++i) { - // these comparisons are done in double arithmetics. - // - // For non-parameterized shadings, they are done in color space - // components. - if (fabs(patch->color[0][0].c[i] - patch->color[0][1].c[i]) > refineColorThreshold || - fabs(patch->color[0][1].c[i] - patch->color[1][1].c[i]) > refineColorThreshold || - fabs(patch->color[1][1].c[i] - patch->color[1][0].c[i]) > refineColorThreshold || - fabs(patch->color[1][0].c[i] - patch->color[0][0].c[i]) > refineColorThreshold) { - break; - } - } - if (i == patchColorComps || depth == patchMaxDepth) { - GfxColor flatColor; - if( shading->isParameterized() ) { - shading->getParameterizedColor( patch->color[0][0].c[0], &flatColor ); - } else { - for( i = 0; i<colorComps; ++i ) { - // simply cast to the desired type; that's all what is needed. - flatColor.c[i] = GfxColorComp(patch->color[0][0].c[i]); - } - } - state->setFillColor(&flatColor); - out->updateFillColor(state); - state->moveTo(patch->x[0][0], patch->y[0][0]); - state->curveTo(patch->x[0][1], patch->y[0][1], - patch->x[0][2], patch->y[0][2], - patch->x[0][3], patch->y[0][3]); - state->curveTo(patch->x[1][3], patch->y[1][3], - patch->x[2][3], patch->y[2][3], - patch->x[3][3], patch->y[3][3]); - state->curveTo(patch->x[3][2], patch->y[3][2], - patch->x[3][1], patch->y[3][1], - patch->x[3][0], patch->y[3][0]); - state->curveTo(patch->x[2][0], patch->y[2][0], - patch->x[1][0], patch->y[1][0], - patch->x[0][0], patch->y[0][0]); - state->closePath(); - if (!contentIsHidden()) - out->fill(state); - state->clearPath(); - } else { - for (i = 0; i < 4; ++i) { - xx[i][0] = patch->x[i][0]; - yy[i][0] = patch->y[i][0]; - xx[i][1] = 0.5 * (patch->x[i][0] + patch->x[i][1]); - yy[i][1] = 0.5 * (patch->y[i][0] + patch->y[i][1]); - xxm = 0.5 * (patch->x[i][1] + patch->x[i][2]); - yym = 0.5 * (patch->y[i][1] + patch->y[i][2]); - xx[i][6] = 0.5 * (patch->x[i][2] + patch->x[i][3]); - yy[i][6] = 0.5 * (patch->y[i][2] + patch->y[i][3]); - xx[i][2] = 0.5 * (xx[i][1] + xxm); - yy[i][2] = 0.5 * (yy[i][1] + yym); - xx[i][5] = 0.5 * (xxm + xx[i][6]); - yy[i][5] = 0.5 * (yym + yy[i][6]); - xx[i][3] = xx[i][4] = 0.5 * (xx[i][2] + xx[i][5]); - yy[i][3] = yy[i][4] = 0.5 * (yy[i][2] + yy[i][5]); - xx[i][7] = patch->x[i][3]; - yy[i][7] = patch->y[i][3]; - } - for (i = 0; i < 4; ++i) { - patch00.x[0][i] = xx[0][i]; - patch00.y[0][i] = yy[0][i]; - patch00.x[1][i] = 0.5 * (xx[0][i] + xx[1][i]); - patch00.y[1][i] = 0.5 * (yy[0][i] + yy[1][i]); - xxm = 0.5 * (xx[1][i] + xx[2][i]); - yym = 0.5 * (yy[1][i] + yy[2][i]); - patch10.x[2][i] = 0.5 * (xx[2][i] + xx[3][i]); - patch10.y[2][i] = 0.5 * (yy[2][i] + yy[3][i]); - patch00.x[2][i] = 0.5 * (patch00.x[1][i] + xxm); - patch00.y[2][i] = 0.5 * (patch00.y[1][i] + yym); - patch10.x[1][i] = 0.5 * (xxm + patch10.x[2][i]); - patch10.y[1][i] = 0.5 * (yym + patch10.y[2][i]); - patch00.x[3][i] = 0.5 * (patch00.x[2][i] + patch10.x[1][i]); - patch00.y[3][i] = 0.5 * (patch00.y[2][i] + patch10.y[1][i]); - patch10.x[0][i] = patch00.x[3][i]; - patch10.y[0][i] = patch00.y[3][i]; - patch10.x[3][i] = xx[3][i]; - patch10.y[3][i] = yy[3][i]; - } - for (i = 4; i < 8; ++i) { - patch01.x[0][i-4] = xx[0][i]; - patch01.y[0][i-4] = yy[0][i]; - patch01.x[1][i-4] = 0.5 * (xx[0][i] + xx[1][i]); - patch01.y[1][i-4] = 0.5 * (yy[0][i] + yy[1][i]); - xxm = 0.5 * (xx[1][i] + xx[2][i]); - yym = 0.5 * (yy[1][i] + yy[2][i]); - patch11.x[2][i-4] = 0.5 * (xx[2][i] + xx[3][i]); - patch11.y[2][i-4] = 0.5 * (yy[2][i] + yy[3][i]); - patch01.x[2][i-4] = 0.5 * (patch01.x[1][i-4] + xxm); - patch01.y[2][i-4] = 0.5 * (patch01.y[1][i-4] + yym); - patch11.x[1][i-4] = 0.5 * (xxm + patch11.x[2][i-4]); - patch11.y[1][i-4] = 0.5 * (yym + patch11.y[2][i-4]); - patch01.x[3][i-4] = 0.5 * (patch01.x[2][i-4] + patch11.x[1][i-4]); - patch01.y[3][i-4] = 0.5 * (patch01.y[2][i-4] + patch11.y[1][i-4]); - patch11.x[0][i-4] = patch01.x[3][i-4]; - patch11.y[0][i-4] = patch01.y[3][i-4]; - patch11.x[3][i-4] = xx[3][i]; - patch11.y[3][i-4] = yy[3][i]; - } - for (i = 0; i < patchColorComps; ++i) { - patch00.color[0][0].c[i] = patch->color[0][0].c[i]; - patch00.color[0][1].c[i] = (patch->color[0][0].c[i] + - patch->color[0][1].c[i]) / 2; - patch01.color[0][0].c[i] = patch00.color[0][1].c[i]; - patch01.color[0][1].c[i] = patch->color[0][1].c[i]; - patch01.color[1][1].c[i] = (patch->color[0][1].c[i] + - patch->color[1][1].c[i]) / 2; - patch11.color[0][1].c[i] = patch01.color[1][1].c[i]; - patch11.color[1][1].c[i] = patch->color[1][1].c[i]; - patch11.color[1][0].c[i] = (patch->color[1][1].c[i] + - patch->color[1][0].c[i]) / 2; - patch10.color[1][1].c[i] = patch11.color[1][0].c[i]; - patch10.color[1][0].c[i] = patch->color[1][0].c[i]; - patch10.color[0][0].c[i] = (patch->color[1][0].c[i] + - patch->color[0][0].c[i]) / 2; - patch00.color[1][0].c[i] = patch10.color[0][0].c[i]; - patch00.color[1][1].c[i] = (patch00.color[1][0].c[i] + - patch01.color[1][1].c[i]) / 2; - patch01.color[1][0].c[i] = patch00.color[1][1].c[i]; - patch11.color[0][0].c[i] = patch00.color[1][1].c[i]; - patch10.color[0][1].c[i] = patch00.color[1][1].c[i]; - } - fillPatch(&patch00, colorComps, patchColorComps, refineColorThreshold, depth + 1, shading); - fillPatch(&patch10, colorComps, patchColorComps, refineColorThreshold, depth + 1, shading); - fillPatch(&patch01, colorComps, patchColorComps, refineColorThreshold, depth + 1, shading); - fillPatch(&patch11, colorComps, patchColorComps, refineColorThreshold, depth + 1, shading); - } -} - -void Gfx::doEndPath() { - if (state->isCurPt() && clip != clipNone) { - state->clip(); - if (clip == clipNormal) { - out->clip(state); - } else { - out->eoClip(state); - } - } - clip = clipNone; - state->clearPath(); -} - -//------------------------------------------------------------------------ -// path clipping operators -//------------------------------------------------------------------------ - -void Gfx::opClip(Object args[], int numArgs) { - clip = clipNormal; -} - -void Gfx::opEOClip(Object args[], int numArgs) { - clip = clipEO; -} - -//------------------------------------------------------------------------ -// text object operators -//------------------------------------------------------------------------ - -void Gfx::opBeginText(Object args[], int numArgs) { - out->beginTextObject(state); - drawText = gTrue; - state->setTextMat(1, 0, 0, 1, 0, 0); - state->textMoveTo(0, 0); - out->updateTextMat(state); - out->updateTextPos(state); - fontChanged = gTrue; - if (!(state->getRender() & 4) && out->supportTextCSPattern(state)) { - textHaveCSPattern = gTrue; - } -} - -void Gfx::opEndText(Object args[], int numArgs) { - GBool needFill = out->deviceHasTextClip(state); - out->endTextObject(state); - drawText = gFalse; - if (textHaveCSPattern) { - if (needFill) { - doPatternFill(gTrue); - } - out->restoreState(state); - } - textHaveCSPattern = gFalse; -} - -//------------------------------------------------------------------------ -// text state operators -//------------------------------------------------------------------------ - -void Gfx::opSetCharSpacing(Object args[], int numArgs) { - state->setCharSpace(args[0].getNum()); - out->updateCharSpace(state); -} - -void Gfx::opSetFont(Object args[], int numArgs) { - GfxFont *font; - - if (!(font = res->lookupFont(args[0].getName()))) { - // unsetting the font (drawing no text) is better than using the - // previous one and drawing random glyphs from it - state->setFont(NULL, args[1].getNum()); - fontChanged = gTrue; - return; - } - if (printCommands) { - printf(" font: tag=%s name='%s' %g\n", - font->getTag()->getCString(), - font->getName() ? font->getName()->getCString() : "???", - args[1].getNum()); - fflush(stdout); - } - - font->incRefCnt(); - state->setFont(font, args[1].getNum()); - fontChanged = gTrue; -} - -void Gfx::opSetTextLeading(Object args[], int numArgs) { - state->setLeading(args[0].getNum()); -} - -void Gfx::opSetTextRender(Object args[], int numArgs) { - int rm = state->getRender(); - state->setRender(args[0].getInt()); - if ((args[0].getInt() & 4) && textHaveCSPattern && drawText) { - GBool needFill = out->deviceHasTextClip(state); - out->endTextObject(state); - if (needFill) { - doPatternFill(gTrue); - } - out->restoreState(state); - out->beginTextObject(state); - out->updateTextMat(state); - out->updateTextPos(state); - textHaveCSPattern = gFalse; - } else if ((rm & 4) && !(args[0].getInt() & 4) && out->supportTextCSPattern(state) && drawText) { - out->beginTextObject(state); - textHaveCSPattern = gTrue; - } - out->updateRender(state); -} - -void Gfx::opSetTextRise(Object args[], int numArgs) { - state->setRise(args[0].getNum()); - out->updateRise(state); -} - -void Gfx::opSetWordSpacing(Object args[], int numArgs) { - state->setWordSpace(args[0].getNum()); - out->updateWordSpace(state); -} - -void Gfx::opSetHorizScaling(Object args[], int numArgs) { - state->setHorizScaling(args[0].getNum()); - out->updateHorizScaling(state); - fontChanged = gTrue; -} - -//------------------------------------------------------------------------ -// text positioning operators -//------------------------------------------------------------------------ - -void Gfx::opTextMove(Object args[], int numArgs) { - double tx, ty; - - tx = state->getLineX() + args[0].getNum(); - ty = state->getLineY() + args[1].getNum(); - state->textMoveTo(tx, ty); - out->updateTextPos(state); -} - -void Gfx::opTextMoveSet(Object args[], int numArgs) { - double tx, ty; - - tx = state->getLineX() + args[0].getNum(); - ty = args[1].getNum(); - state->setLeading(-ty); - ty += state->getLineY(); - state->textMoveTo(tx, ty); - out->updateTextPos(state); -} - -void Gfx::opSetTextMatrix(Object args[], int numArgs) { - state->setTextMat(args[0].getNum(), args[1].getNum(), - args[2].getNum(), args[3].getNum(), - args[4].getNum(), args[5].getNum()); - state->textMoveTo(0, 0); - out->updateTextMat(state); - out->updateTextPos(state); - fontChanged = gTrue; -} - -void Gfx::opTextNextLine(Object args[], int numArgs) { - double tx, ty; - - tx = state->getLineX(); - ty = state->getLineY() - state->getLeading(); - state->textMoveTo(tx, ty); - out->updateTextPos(state); -} - -//------------------------------------------------------------------------ -// text string operators -//------------------------------------------------------------------------ - -void Gfx::opShowText(Object args[], int numArgs) { - if (!state->getFont()) { - error(getPos(), "No font in show"); - return; - } - if (fontChanged) { - out->updateFont(state); - fontChanged = gFalse; - } - out->beginStringOp(state); - doShowText(args[0].getString()); - out->endStringOp(state); -} - -void Gfx::opMoveShowText(Object args[], int numArgs) { - double tx, ty; - - if (!state->getFont()) { - error(getPos(), "No font in move/show"); - return; - } - if (fontChanged) { - out->updateFont(state); - fontChanged = gFalse; - } - tx = state->getLineX(); - ty = state->getLineY() - state->getLeading(); - state->textMoveTo(tx, ty); - out->updateTextPos(state); - out->beginStringOp(state); - doShowText(args[0].getString()); - out->endStringOp(state); -} - -void Gfx::opMoveSetShowText(Object args[], int numArgs) { - double tx, ty; - - if (!state->getFont()) { - error(getPos(), "No font in move/set/show"); - return; - } - if (fontChanged) { - out->updateFont(state); - fontChanged = gFalse; - } - state->setWordSpace(args[0].getNum()); - state->setCharSpace(args[1].getNum()); - tx = state->getLineX(); - ty = state->getLineY() - state->getLeading(); - state->textMoveTo(tx, ty); - out->updateWordSpace(state); - out->updateCharSpace(state); - out->updateTextPos(state); - out->beginStringOp(state); - doShowText(args[2].getString()); - out->endStringOp(state); -} - -void Gfx::opShowSpaceText(Object args[], int numArgs) { - Array *a; - Object obj; - int wMode; - int i; - - if (!state->getFont()) { - error(getPos(), "No font in show/space"); - return; - } - if (fontChanged) { - out->updateFont(state); - fontChanged = gFalse; - } - out->beginStringOp(state); - wMode = state->getFont()->getWMode(); - a = args[0].getArray(); - for (i = 0; i < a->getLength(); ++i) { - a->get(i, &obj); - if (obj.isNum()) { - // this uses the absolute value of the font size to match - // Acrobat's behavior - if (wMode) { - state->textShift(0, -obj.getNum() * 0.001 * - fabs(state->getFontSize())); - } else { - state->textShift(-obj.getNum() * 0.001 * - fabs(state->getFontSize()), 0); - } - out->updateTextShift(state, obj.getNum()); - } else if (obj.isString()) { - doShowText(obj.getString()); - } else { - error(getPos(), "Element of show/space array must be number or string"); - } - obj.free(); - } - out->endStringOp(state); -} - -void Gfx::doShowText(GooString *s) { - GfxFont *font; - int wMode; - double riseX, riseY; - CharCode code; - Unicode *u = NULL; - double x, y, dx, dy, dx2, dy2, curX, curY, tdx, tdy, lineX, lineY; - double originX, originY, tOriginX, tOriginY; - double oldCTM[6], newCTM[6]; - double *mat; - Object charProc; - Dict *resDict; - Parser *oldParser; - char *p; - int len, n, uLen, nChars, nSpaces, i; - - font = state->getFont(); - wMode = font->getWMode(); - - if (out->useDrawChar()) { - out->beginString(state, s); - } - - // handle a Type 3 char - if (font->getType() == fontType3 && out->interpretType3Chars()) { - mat = state->getCTM(); - for (i = 0; i < 6; ++i) { - oldCTM[i] = mat[i]; - } - mat = state->getTextMat(); - newCTM[0] = mat[0] * oldCTM[0] + mat[1] * oldCTM[2]; - newCTM[1] = mat[0] * oldCTM[1] + mat[1] * oldCTM[3]; - newCTM[2] = mat[2] * oldCTM[0] + mat[3] * oldCTM[2]; - newCTM[3] = mat[2] * oldCTM[1] + mat[3] * oldCTM[3]; - mat = font->getFontMatrix(); - newCTM[0] = mat[0] * newCTM[0] + mat[1] * newCTM[2]; - newCTM[1] = mat[0] * newCTM[1] + mat[1] * newCTM[3]; - newCTM[2] = mat[2] * newCTM[0] + mat[3] * newCTM[2]; - newCTM[3] = mat[2] * newCTM[1] + mat[3] * newCTM[3]; - newCTM[0] *= state->getFontSize(); - newCTM[1] *= state->getFontSize(); - newCTM[2] *= state->getFontSize(); - newCTM[3] *= state->getFontSize(); - newCTM[0] *= state->getHorizScaling(); - newCTM[2] *= state->getHorizScaling(); - state->textTransformDelta(0, state->getRise(), &riseX, &riseY); - curX = state->getCurX(); - curY = state->getCurY(); - lineX = state->getLineX(); - lineY = state->getLineY(); - oldParser = parser; - p = s->getCString(); - len = s->getLength(); - while (len > 0) { - n = font->getNextChar(p, len, &code, - &u, &uLen, - &dx, &dy, &originX, &originY); - dx = dx * state->getFontSize() + state->getCharSpace(); - if (n == 1 && *p == ' ') { - dx += state->getWordSpace(); - } - dx *= state->getHorizScaling(); - dy *= state->getFontSize(); - state->textTransformDelta(dx, dy, &tdx, &tdy); - state->transform(curX + riseX, curY + riseY, &x, &y); - saveState(); - state->setCTM(newCTM[0], newCTM[1], newCTM[2], newCTM[3], x, y); - //~ the CTM concat values here are wrong (but never used) - out->updateCTM(state, 1, 0, 0, 1, 0, 0); - if (!out->beginType3Char(state, curX + riseX, curY + riseY, tdx, tdy, - code, u, uLen)) { - ((Gfx8BitFont *)font)->getCharProc(code, &charProc); - if ((resDict = ((Gfx8BitFont *)font)->getResources())) { - pushResources(resDict); - } - if (charProc.isStream()) { - display(&charProc, gFalse); - } else { - error(getPos(), "Missing or bad Type3 CharProc entry"); - } - out->endType3Char(state); - if (resDict) { - popResources(); - } - charProc.free(); - } - restoreState(); - // GfxState::restore() does *not* restore the current position, - // so we deal with it here using (curX, curY) and (lineX, lineY) - curX += tdx; - curY += tdy; - state->moveTo(curX, curY); - state->textSetPos(lineX, lineY); - p += n; - len -= n; - } - parser = oldParser; - - } else if (out->useDrawChar()) { - state->textTransformDelta(0, state->getRise(), &riseX, &riseY); - p = s->getCString(); - len = s->getLength(); - while (len > 0) { - n = font->getNextChar(p, len, &code, - &u, &uLen, - &dx, &dy, &originX, &originY); - if (wMode) { - dx *= state->getFontSize(); - dy = dy * state->getFontSize() + state->getCharSpace(); - if (n == 1 && *p == ' ') { - dy += state->getWordSpace(); - } - } else { - dx = dx * state->getFontSize() + state->getCharSpace(); - if (n == 1 && *p == ' ') { - dx += state->getWordSpace(); - } - dx *= state->getHorizScaling(); - dy *= state->getFontSize(); - } - state->textTransformDelta(dx, dy, &tdx, &tdy); - originX *= state->getFontSize(); - originY *= state->getFontSize(); - state->textTransformDelta(originX, originY, &tOriginX, &tOriginY); - if (!contentIsHidden()) { - out->drawChar(state, state->getCurX() + riseX, state->getCurY() + riseY, - tdx, tdy, tOriginX, tOriginY, code, n, u, uLen); - } - state->shift(tdx, tdy); - p += n; - len -= n; - } - - } else { - dx = dy = 0; - p = s->getCString(); - len = s->getLength(); - nChars = nSpaces = 0; - while (len > 0) { - n = font->getNextChar(p, len, &code, - &u, &uLen, - &dx2, &dy2, &originX, &originY); - dx += dx2; - dy += dy2; - if (n == 1 && *p == ' ') { - ++nSpaces; - } - ++nChars; - p += n; - len -= n; - } - if (wMode) { - dx *= state->getFontSize(); - dy = dy * state->getFontSize() - + nChars * state->getCharSpace() - + nSpaces * state->getWordSpace(); - } else { - dx = dx * state->getFontSize() - + nChars * state->getCharSpace() - + nSpaces * state->getWordSpace(); - dx *= state->getHorizScaling(); - dy *= state->getFontSize(); - } - state->textTransformDelta(dx, dy, &tdx, &tdy); - if (!contentIsHidden()) - out->drawString(state, s); - state->shift(tdx, tdy); - } - - if (out->useDrawChar()) { - out->endString(state); - } - - updateLevel += 10 * s->getLength(); -} - -//------------------------------------------------------------------------ -// XObject operators -//------------------------------------------------------------------------ - -void Gfx::opXObject(Object args[], int numArgs) { - char *name; - Object obj1, obj2, obj3, refObj; -#if OPI_SUPPORT - Object opiDict; -#endif - - name = args[0].getName(); - if (!res->lookupXObject(name, &obj1)) { - return; - } - if (!obj1.isStream()) { - error(getPos(), "XObject '%s' is wrong type", name); - obj1.free(); - return; - } - - obj1.streamGetDict()->lookupNF("OC", &obj2); - if (obj2.isNull()) { - // No OC entry - so we proceed as normal - } else if (obj2.isRef()) { - if ( catalog->getOptContentConfig() && ! catalog->getOptContentConfig()->optContentIsVisible( &obj2 ) ) { - obj2.free(); - obj1.free(); - return; - } - } else { - error(getPos(), "XObject OC value not null or dict: %i", obj2.getType()); - } - obj2.free(); - -#if OPI_SUPPORT - obj1.streamGetDict()->lookup("OPI", &opiDict); - if (opiDict.isDict()) { - out->opiBegin(state, opiDict.getDict()); - } -#endif - obj1.streamGetDict()->lookup("Subtype", &obj2); - if (obj2.isName("Image")) { - if (out->needNonText()) { - res->lookupXObjectNF(name, &refObj); - doImage(&refObj, obj1.getStream(), gFalse); - refObj.free(); - } - } else if (obj2.isName("Form")) { - res->lookupXObjectNF(name, &refObj); - if (out->useDrawForm() && refObj.isRef()) { - out->drawForm(refObj.getRef()); - } else { - doForm(&obj1); - } - refObj.free(); - } else if (obj2.isName("PS")) { - obj1.streamGetDict()->lookup("Level1", &obj3); - out->psXObject(obj1.getStream(), - obj3.isStream() ? obj3.getStream() : (Stream *)NULL); - } else if (obj2.isName()) { - error(getPos(), "Unknown XObject subtype '%s'", obj2.getName()); - } else { - error(getPos(), "XObject subtype is missing or wrong type"); - } - obj2.free(); -#if OPI_SUPPORT - if (opiDict.isDict()) { - out->opiEnd(state, opiDict.getDict()); - } - opiDict.free(); -#endif - obj1.free(); -} - -void Gfx::doImage(Object *ref, Stream *str, GBool inlineImg) { - Dict *dict, *maskDict; - int width, height; - int bits, maskBits; - GBool interpolate; - StreamColorSpaceMode csMode; - GBool mask; - GBool invert; - GfxColorSpace *colorSpace, *maskColorSpace; - GfxImageColorMap *colorMap, *maskColorMap; - Object maskObj, smaskObj; - GBool haveColorKeyMask, haveExplicitMask, haveSoftMask; - int maskColors[2*gfxColorMaxComps]; - int maskWidth, maskHeight; - GBool maskInvert; - GBool maskInterpolate; - Stream *maskStr; - Object obj1, obj2; - int i; - - // get info from the stream - bits = 0; - csMode = streamCSNone; - str->getImageParams(&bits, &csMode); - - // get stream dict - dict = str->getDict(); - - // get size - dict->lookup("Width", &obj1); - if (obj1.isNull()) { - obj1.free(); - dict->lookup("W", &obj1); - } - if (obj1.isInt()) - width = obj1.getInt(); - else if (obj1.isReal()) - width = (int)obj1.getReal(); - else - goto err2; - obj1.free(); - dict->lookup("Height", &obj1); - if (obj1.isNull()) { - obj1.free(); - dict->lookup("H", &obj1); - } - if (obj1.isInt()) - height = obj1.getInt(); - else if (obj1.isReal()) - height = (int)obj1.getReal(); - else - goto err2; - obj1.free(); - - if (width < 1 || height < 1) - goto err1; - - // image interpolation - dict->lookup("Interpolate", &obj1); - if (obj1.isNull()) { - obj1.free(); - dict->lookup("I", &obj1); - } - if (obj1.isBool()) - interpolate = obj1.getBool(); - else - interpolate = gFalse; - obj1.free(); - maskInterpolate = gFalse; - - // image or mask? - dict->lookup("ImageMask", &obj1); - if (obj1.isNull()) { - obj1.free(); - dict->lookup("IM", &obj1); - } - mask = gFalse; - if (obj1.isBool()) - mask = obj1.getBool(); - else if (!obj1.isNull()) - goto err2; - obj1.free(); - - // bit depth - if (bits == 0) { - dict->lookup("BitsPerComponent", &obj1); - if (obj1.isNull()) { - obj1.free(); - dict->lookup("BPC", &obj1); - } - if (obj1.isInt()) { - bits = obj1.getInt(); - } else if (mask) { - bits = 1; - } else { - goto err2; - } - obj1.free(); - } - - // display a mask - if (mask) { - - // check for inverted mask - if (bits != 1) - goto err1; - invert = gFalse; - dict->lookup("Decode", &obj1); - if (obj1.isNull()) { - obj1.free(); - dict->lookup("D", &obj1); - } - if (obj1.isArray()) { - obj1.arrayGet(0, &obj2); - // Table 4.39 says /Decode must be [1 0] or [0 1]. Adobe - // accepts [1.0 0.0] as well. - if (obj2.isNum() && obj2.getNum() >= 0.9) - invert = gTrue; - obj2.free(); - } else if (!obj1.isNull()) { - goto err2; - } - obj1.free(); - - // draw it - if (!contentIsHidden()) { - out->drawImageMask(state, ref, str, width, height, invert, interpolate, inlineImg); - if (out->fillMaskCSPattern(state)) { - maskHaveCSPattern = gTrue; - doPatternFill(gTrue); - out->endMaskClip(state); - maskHaveCSPattern = gFalse; - } - } - } else { - - // get color space and color map - dict->lookup("ColorSpace", &obj1); - if (obj1.isNull()) { - obj1.free(); - dict->lookup("CS", &obj1); - } - if (obj1.isName() && inlineImg) { - res->lookupColorSpace(obj1.getName(), &obj2); - if (!obj2.isNull()) { - obj1.free(); - obj1 = obj2; - } else { - obj2.free(); - } - } - if (!obj1.isNull()) { - colorSpace = GfxColorSpace::parse(&obj1, this); - } else if (csMode == streamCSDeviceGray) { - Object objCS; - res->lookupColorSpace("DefaultGray", &objCS); - if (objCS.isNull()) { - colorSpace = new GfxDeviceGrayColorSpace(); - } else { - colorSpace = GfxColorSpace::parse(&objCS, this); - } - objCS.free(); - } else if (csMode == streamCSDeviceRGB) { - Object objCS; - res->lookupColorSpace("DefaultRGB", &objCS); - if (objCS.isNull()) { - colorSpace = new GfxDeviceRGBColorSpace(); - } else { - colorSpace = GfxColorSpace::parse(&objCS, this); - } - objCS.free(); - } else if (csMode == streamCSDeviceCMYK) { - Object objCS; - res->lookupColorSpace("DefaultCMYK", &objCS); - if (objCS.isNull()) { - colorSpace = new GfxDeviceCMYKColorSpace(); - } else { - colorSpace = GfxColorSpace::parse(&objCS, this); - } - objCS.free(); - } else { - colorSpace = NULL; - } - obj1.free(); - if (!colorSpace) { - goto err1; - } - dict->lookup("Decode", &obj1); - if (obj1.isNull()) { - obj1.free(); - dict->lookup("D", &obj1); - } - colorMap = new GfxImageColorMap(bits, &obj1, colorSpace); - obj1.free(); - if (!colorMap->isOk()) { - delete colorMap; - goto err1; - } - - // get the mask - haveColorKeyMask = haveExplicitMask = haveSoftMask = gFalse; - maskStr = NULL; // make gcc happy - maskWidth = maskHeight = 0; // make gcc happy - maskInvert = gFalse; // make gcc happy - maskColorMap = NULL; // make gcc happy - dict->lookup("Mask", &maskObj); - dict->lookup("SMask", &smaskObj); - if (smaskObj.isStream()) { - // soft mask - if (inlineImg) { - goto err1; - } - maskStr = smaskObj.getStream(); - maskDict = smaskObj.streamGetDict(); - maskDict->lookup("Width", &obj1); - if (obj1.isNull()) { - obj1.free(); - maskDict->lookup("W", &obj1); - } - if (!obj1.isInt()) { - goto err2; - } - maskWidth = obj1.getInt(); - obj1.free(); - maskDict->lookup("Height", &obj1); - if (obj1.isNull()) { - obj1.free(); - maskDict->lookup("H", &obj1); - } - if (!obj1.isInt()) { - goto err2; - } - maskHeight = obj1.getInt(); - obj1.free(); - maskDict->lookup("Interpolate", &obj1); - if (obj1.isNull()) { - obj1.free(); - maskDict->lookup("I", &obj1); - } - if (obj1.isBool()) - maskInterpolate = obj1.getBool(); - else - maskInterpolate = gFalse; - obj1.free(); - maskDict->lookup("BitsPerComponent", &obj1); - if (obj1.isNull()) { - obj1.free(); - maskDict->lookup("BPC", &obj1); - } - if (!obj1.isInt()) { - goto err2; - } - maskBits = obj1.getInt(); - obj1.free(); - maskDict->lookup("ColorSpace", &obj1); - if (obj1.isNull()) { - obj1.free(); - maskDict->lookup("CS", &obj1); - } - if (obj1.isName()) { - res->lookupColorSpace(obj1.getName(), &obj2); - if (!obj2.isNull()) { - obj1.free(); - obj1 = obj2; - } else { - obj2.free(); - } - } - maskColorSpace = GfxColorSpace::parse(&obj1, this); - obj1.free(); - if (!maskColorSpace || maskColorSpace->getMode() != csDeviceGray) { - goto err1; - } - maskDict->lookup("Decode", &obj1); - if (obj1.isNull()) { - obj1.free(); - maskDict->lookup("D", &obj1); - } - maskColorMap = new GfxImageColorMap(maskBits, &obj1, maskColorSpace); - obj1.free(); - if (!maskColorMap->isOk()) { - delete maskColorMap; - goto err1; - } - //~ handle the Matte entry - haveSoftMask = gTrue; - } else if (maskObj.isArray()) { - // color key mask - for (i = 0; - i < maskObj.arrayGetLength() && i < 2*gfxColorMaxComps; - ++i) { - maskObj.arrayGet(i, &obj1); - if (obj1.isInt()) { - maskColors[i] = obj1.getInt(); - } else if (obj1.isReal()) { - error(-1, "Mask entry should be an integer but it's a real, trying to use it"); - maskColors[i] = (int) obj1.getReal(); - } else { - error(-1, "Mask entry should be an integer but it's of type %d", obj1.getType()); - obj1.free(); - goto err1; - } - obj1.free(); - } - haveColorKeyMask = gTrue; - } else if (maskObj.isStream()) { - // explicit mask - if (inlineImg) { - goto err1; - } - maskStr = maskObj.getStream(); - maskDict = maskObj.streamGetDict(); - maskDict->lookup("Width", &obj1); - if (obj1.isNull()) { - obj1.free(); - maskDict->lookup("W", &obj1); - } - if (!obj1.isInt()) { - goto err2; - } - maskWidth = obj1.getInt(); - obj1.free(); - maskDict->lookup("Height", &obj1); - if (obj1.isNull()) { - obj1.free(); - maskDict->lookup("H", &obj1); - } - if (!obj1.isInt()) { - goto err2; - } - maskHeight = obj1.getInt(); - obj1.free(); - maskDict->lookup("Interpolate", &obj1); - if (obj1.isNull()) { - obj1.free(); - maskDict->lookup("I", &obj1); - } - if (obj1.isBool()) - maskInterpolate = obj1.getBool(); - else - maskInterpolate = gFalse; - obj1.free(); - maskDict->lookup("ImageMask", &obj1); - if (obj1.isNull()) { - obj1.free(); - maskDict->lookup("IM", &obj1); - } - if (!obj1.isBool() || !obj1.getBool()) { - goto err2; - } - obj1.free(); - maskInvert = gFalse; - maskDict->lookup("Decode", &obj1); - if (obj1.isNull()) { - obj1.free(); - maskDict->lookup("D", &obj1); - } - if (obj1.isArray()) { - obj1.arrayGet(0, &obj2); - // Table 4.39 says /Decode must be [1 0] or [0 1]. Adobe - // accepts [1.0 0.0] as well. - if (obj2.isNum() && obj2.getNum() >= 0.9) { - maskInvert = gTrue; - } - obj2.free(); - } else if (!obj1.isNull()) { - goto err2; - } - obj1.free(); - haveExplicitMask = gTrue; - } - - // draw it - if (haveSoftMask) { - if (!contentIsHidden()) { - out->drawSoftMaskedImage(state, ref, str, width, height, colorMap, interpolate, - maskStr, maskWidth, maskHeight, maskColorMap, maskInterpolate); - } - delete maskColorMap; - } else if (haveExplicitMask && !contentIsHidden ()) { - out->drawMaskedImage(state, ref, str, width, height, colorMap, interpolate, - maskStr, maskWidth, maskHeight, maskInvert, maskInterpolate); - } else if (!contentIsHidden()) { - out->drawImage(state, ref, str, width, height, colorMap, interpolate, - haveColorKeyMask ? maskColors : (int *)NULL, inlineImg); - } - delete colorMap; - - maskObj.free(); - smaskObj.free(); - } - - if ((i = width * height) > 1000) { - i = 1000; - } - updateLevel += i; - - return; - - err2: - obj1.free(); - err1: - error(getPos(), "Bad image parameters"); -} - -void Gfx::doForm(Object *str) { - Dict *dict; - GBool transpGroup, isolated, knockout; - GfxColorSpace *blendingColorSpace; - Object matrixObj, bboxObj; - double m[6], bbox[4]; - Object resObj; - Dict *resDict; - Object obj1, obj2, obj3; - int i; - - // check for excessive recursion - if (formDepth > 20) { - return; - } - - // get stream dict - dict = str->streamGetDict(); - - // check form type - dict->lookup("FormType", &obj1); - if (!(obj1.isNull() || (obj1.isInt() && obj1.getInt() == 1))) { - error(getPos(), "Unknown form type"); - } - obj1.free(); - - // get bounding box - dict->lookup("BBox", &bboxObj); - if (!bboxObj.isArray()) { - bboxObj.free(); - error(getPos(), "Bad form bounding box"); - return; - } - for (i = 0; i < 4; ++i) { - bboxObj.arrayGet(i, &obj1); - if (likely(obj1.isNum())) { - bbox[i] = obj1.getNum(); - obj1.free(); - } else { - obj1.free(); - error(getPos(), "Bad form bounding box value"); - return; - } - } - bboxObj.free(); - - // get matrix - dict->lookup("Matrix", &matrixObj); - if (matrixObj.isArray()) { - for (i = 0; i < 6; ++i) { - matrixObj.arrayGet(i, &obj1); - if (likely(obj1.isNum())) m[i] = obj1.getNum(); - else m[i] = 0; - obj1.free(); - } - } else { - m[0] = 1; m[1] = 0; - m[2] = 0; m[3] = 1; - m[4] = 0; m[5] = 0; - } - matrixObj.free(); - - // get resources - dict->lookup("Resources", &resObj); - resDict = resObj.isDict() ? resObj.getDict() : (Dict *)NULL; - - // check for a transparency group - transpGroup = isolated = knockout = gFalse; - blendingColorSpace = NULL; - if (dict->lookup("Group", &obj1)->isDict()) { - if (obj1.dictLookup("S", &obj2)->isName("Transparency")) { - transpGroup = gTrue; - if (!obj1.dictLookup("CS", &obj3)->isNull()) { - blendingColorSpace = GfxColorSpace::parse(&obj3, this); - } - obj3.free(); - if (obj1.dictLookup("I", &obj3)->isBool()) { - isolated = obj3.getBool(); - } - obj3.free(); - if (obj1.dictLookup("K", &obj3)->isBool()) { - knockout = obj3.getBool(); - } - obj3.free(); - } - obj2.free(); - } - obj1.free(); - - // draw it - ++formDepth; - doForm1(str, resDict, m, bbox, - transpGroup, gFalse, blendingColorSpace, isolated, knockout); - --formDepth; - - if (blendingColorSpace) { - delete blendingColorSpace; - } - resObj.free(); -} - -void Gfx::doForm1(Object *str, Dict *resDict, double *matrix, double *bbox, - GBool transpGroup, GBool softMask, - GfxColorSpace *blendingColorSpace, - GBool isolated, GBool knockout, - GBool alpha, Function *transferFunc, - GfxColor *backdropColor) { - Parser *oldParser; - double oldBaseMatrix[6]; - int i; - - // push new resources on stack - pushResources(resDict); - - // save current graphics state - saveState(); - - // kill any pre-existing path - state->clearPath(); - - // save current parser - oldParser = parser; - - // set form transformation matrix - state->concatCTM(matrix[0], matrix[1], matrix[2], - matrix[3], matrix[4], matrix[5]); - out->updateCTM(state, matrix[0], matrix[1], matrix[2], - matrix[3], matrix[4], matrix[5]); - - // set form bounding box - state->moveTo(bbox[0], bbox[1]); - state->lineTo(bbox[2], bbox[1]); - state->lineTo(bbox[2], bbox[3]); - state->lineTo(bbox[0], bbox[3]); - state->closePath(); - state->clip(); - out->clip(state); - state->clearPath(); - - if (softMask || transpGroup) { - if (state->getBlendMode() != gfxBlendNormal) { - state->setBlendMode(gfxBlendNormal); - out->updateBlendMode(state); - } - if (state->getFillOpacity() != 1) { - state->setFillOpacity(1); - out->updateFillOpacity(state); - } - if (state->getStrokeOpacity() != 1) { - state->setStrokeOpacity(1); - out->updateStrokeOpacity(state); - } - out->clearSoftMask(state); - out->beginTransparencyGroup(state, bbox, blendingColorSpace, - isolated, knockout, softMask); - } - - // set new base matrix - for (i = 0; i < 6; ++i) { - oldBaseMatrix[i] = baseMatrix[i]; - baseMatrix[i] = state->getCTM()[i]; - } - - GfxState *stateBefore = state; - - // draw the form - display(str, gFalse); - - if (stateBefore != state) { - if (state->isParentState(stateBefore)) { - error(-1, "There's a form with more q than Q, trying to fix"); - while (stateBefore != state) { - restoreState(); - } - } else { - error(-1, "There's a form with more Q than q"); - } - } - - if (softMask || transpGroup) { - out->endTransparencyGroup(state); - } - - // restore base matrix - for (i = 0; i < 6; ++i) { - baseMatrix[i] = oldBaseMatrix[i]; - } - - // restore parser - parser = oldParser; - - // restore graphics state - restoreState(); - - // pop resource stack - popResources(); - - if (softMask) { - out->setSoftMask(state, bbox, alpha, transferFunc, backdropColor); - } else if (transpGroup) { - out->paintTransparencyGroup(state, bbox); - } - - return; -} - -//------------------------------------------------------------------------ -// in-line image operators -//------------------------------------------------------------------------ - -void Gfx::opBeginImage(Object args[], int numArgs) { - Stream *str; - int c1, c2; - - // build dict/stream - str = buildImageStream(); - - // display the image - if (str) { - doImage(NULL, str, gTrue); - - // skip 'EI' tag - c1 = str->getUndecodedStream()->getChar(); - c2 = str->getUndecodedStream()->getChar(); - while (!(c1 == 'E' && c2 == 'I') && c2 != EOF) { - c1 = c2; - c2 = str->getUndecodedStream()->getChar(); - } - delete str; - } -} - -Stream *Gfx::buildImageStream() { - Object dict; - Object obj; - char *key; - Stream *str; - - // build dictionary - dict.initDict(xref); - parser->getObj(&obj); - while (!obj.isCmd("ID") && !obj.isEOF()) { - if (!obj.isName()) { - error(getPos(), "Inline image dictionary key must be a name object"); - obj.free(); - } else { - key = copyString(obj.getName()); - obj.free(); - parser->getObj(&obj); - if (obj.isEOF() || obj.isError()) { - gfree(key); - break; - } - dict.dictAdd(key, &obj); - } - parser->getObj(&obj); - } - if (obj.isEOF()) { - error(getPos(), "End of file in inline image"); - obj.free(); - dict.free(); - return NULL; - } - obj.free(); - - // make stream - if (parser->getStream()) { - str = new EmbedStream(parser->getStream(), &dict, gFalse, 0); - str = str->addFilters(&dict); - } else { - str = NULL; - dict.free(); - } - - return str; -} - -void Gfx::opImageData(Object args[], int numArgs) { - error(getPos(), "Internal: got 'ID' operator"); -} - -void Gfx::opEndImage(Object args[], int numArgs) { - error(getPos(), "Internal: got 'EI' operator"); -} - -//------------------------------------------------------------------------ -// type 3 font operators -//------------------------------------------------------------------------ - -void Gfx::opSetCharWidth(Object args[], int numArgs) { - out->type3D0(state, args[0].getNum(), args[1].getNum()); -} - -void Gfx::opSetCacheDevice(Object args[], int numArgs) { - out->type3D1(state, args[0].getNum(), args[1].getNum(), - args[2].getNum(), args[3].getNum(), - args[4].getNum(), args[5].getNum()); -} - -//------------------------------------------------------------------------ -// compatibility operators -//------------------------------------------------------------------------ - -void Gfx::opBeginIgnoreUndef(Object args[], int numArgs) { - ++ignoreUndef; -} - -void Gfx::opEndIgnoreUndef(Object args[], int numArgs) { - if (ignoreUndef > 0) - --ignoreUndef; -} - -//------------------------------------------------------------------------ -// marked content operators -//------------------------------------------------------------------------ - -struct MarkedContentStack { - GBool ocSuppressed; // are we ignoring content based on OptionalContent? - MarkedContentStack *next; // next object on stack -}; - -void Gfx::popMarkedContent() { - MarkedContentStack *mc = mcStack; - mcStack = mc->next; - delete mc; -} - -void Gfx::pushMarkedContent() { - MarkedContentStack *mc = new MarkedContentStack(); - mc->ocSuppressed = gFalse; - mc->next = mcStack; - mcStack = mc; -} - -GBool Gfx::contentIsHidden() { - MarkedContentStack *mc = mcStack; - bool hidden = mc && mc->ocSuppressed; - while (!hidden && mc && mc->next) { - mc = mc->next; - hidden = mc->ocSuppressed; - } - return hidden; -} - -void Gfx::opBeginMarkedContent(Object args[], int numArgs) { - // push a new stack entry - pushMarkedContent(); - - OCGs *contentConfig = catalog->getOptContentConfig(); - char* name0 = args[0].getName(); - if ( strncmp( name0, "OC", 2) == 0 && contentConfig) { - if ( numArgs >= 2 ) { - if (!args[1].isName()) { - error(getPos(), "Unexpected MC Type: %i", args[1].getType()); - } - char* name1 = args[1].getName(); - Object markedContent; - if ( res->lookupMarkedContentNF( name1, &markedContent ) ) { - if ( markedContent.isRef() ) { - bool visible = contentConfig->optContentIsVisible( &markedContent ); - MarkedContentStack *mc = mcStack; - mc->ocSuppressed = !(visible); - } - markedContent.free(); - } else { - error(getPos(), "DID NOT find %s", name1); - } - } else { - error(getPos(), "insufficient arguments for Marked Content"); - } - } - - if (printCommands) { - printf(" marked content: %s ", args[0].getName()); - if (numArgs == 2) - args[1].print(stdout); - printf("\n"); - fflush(stdout); - } - - if(numArgs == 2 && args[1].isDict ()) { - out->beginMarkedContent(args[0].getName(),args[1].getDict()); - } else if(numArgs == 1) { - out->beginMarkedContent(args[0].getName(),NULL); - } -} - -void Gfx::opEndMarkedContent(Object args[], int numArgs) { - // pop the stack - if (mcStack) - popMarkedContent(); - out->endMarkedContent(state); -} - -void Gfx::opMarkPoint(Object args[], int numArgs) { - if (printCommands) { - printf(" mark point: %s ", args[0].getName()); - if (numArgs == 2) - args[1].print(stdout); - printf("\n"); - fflush(stdout); - } - - if(numArgs == 2 && args[1].isDict()) { - out->markPoint(args[0].getName(),args[1].getDict()); - } else { - out->markPoint(args[0].getName()); - } - -} - -//------------------------------------------------------------------------ -// misc -//------------------------------------------------------------------------ - -void Gfx::drawAnnot(Object *str, AnnotBorder *border, AnnotColor *aColor, - double xMin, double yMin, double xMax, double yMax) { - Dict *dict, *resDict; - Object matrixObj, bboxObj, resObj; - Object obj1; - double m[6], bbox[4], ictm[6]; - double *ctm; - double formX0, formY0, formX1, formY1; - double annotX0, annotY0, annotX1, annotY1; - double det, x, y, sx, sy; - double r, g, b; - GfxColor color; - double *dash, *dash2; - int dashLength; - int i; - - //~ can we assume that we're in default user space? - //~ (i.e., baseMatrix = ctm) - - // transform the annotation bbox from default user space to user - // space: (bbox * baseMatrix) * iCTM - ctm = state->getCTM(); - det = 1 / (ctm[0] * ctm[3] - ctm[1] * ctm[2]); - ictm[0] = ctm[3] * det; - ictm[1] = -ctm[1] * det; - ictm[2] = -ctm[2] * det; - ictm[3] = ctm[0] * det; - ictm[4] = (ctm[2] * ctm[5] - ctm[3] * ctm[4]) * det; - ictm[5] = (ctm[1] * ctm[4] - ctm[0] * ctm[5]) * det; - x = baseMatrix[0] * xMin + baseMatrix[2] * yMin + baseMatrix[4]; - y = baseMatrix[1] * xMin + baseMatrix[3] * yMin + baseMatrix[5]; - annotX0 = ictm[0] * x + ictm[2] * y + ictm[4]; - annotY0 = ictm[1] * x + ictm[3] * y + ictm[5]; - x = baseMatrix[0] * xMax + baseMatrix[2] * yMax + baseMatrix[4]; - y = baseMatrix[1] * xMax + baseMatrix[3] * yMax + baseMatrix[5]; - annotX1 = ictm[0] * x + ictm[2] * y + ictm[4]; - annotY1 = ictm[1] * x + ictm[3] * y + ictm[5]; - if (annotX0 > annotX1) { - x = annotX0; annotX0 = annotX1; annotX1 = x; - } - if (annotY0 > annotY1) { - y = annotY0; annotY0 = annotY1; annotY1 = y; - } - - // draw the appearance stream (if there is one) - if (str->isStream()) { - - // get stream dict - dict = str->streamGetDict(); - - // get the form bounding box - dict->lookup("BBox", &bboxObj); - if (!bboxObj.isArray()) { - bboxObj.free(); - error(getPos(), "Bad form bounding box"); - return; - } - for (i = 0; i < 4; ++i) { - bboxObj.arrayGet(i, &obj1); - if (likely(obj1.isNum())) { - bbox[i] = obj1.getNum(); - obj1.free(); - } else { - obj1.free(); - error(getPos(), "Bad form bounding box value"); - return; - } - } - bboxObj.free(); - - // get the form matrix - dict->lookup("Matrix", &matrixObj); - if (matrixObj.isArray() && matrixObj.arrayGetLength() >= 6) { - for (i = 0; i < 6; ++i) { - matrixObj.arrayGet(i, &obj1); - m[i] = obj1.getNum(); - obj1.free(); - } - } else { - m[0] = 1; m[1] = 0; - m[2] = 0; m[3] = 1; - m[4] = 0; m[5] = 0; - } - matrixObj.free(); - - // transform the form bbox from form space to user space - formX0 = bbox[0] * m[0] + bbox[1] * m[2] + m[4]; - formY0 = bbox[0] * m[1] + bbox[1] * m[3] + m[5]; - formX1 = bbox[2] * m[0] + bbox[3] * m[2] + m[4]; - formY1 = bbox[2] * m[1] + bbox[3] * m[3] + m[5]; - if (formX0 > formX1) { - x = formX0; formX0 = formX1; formX1 = x; - } - if (formY0 > formY1) { - y = formY0; formY0 = formY1; formY1 = y; - } - - // scale the form to fit the annotation bbox - if (formX1 == formX0) { - // this shouldn't happen - sx = 1; - } else { - sx = (annotX1 - annotX0) / (formX1 - formX0); - } - if (formY1 == formY0) { - // this shouldn't happen - sy = 1; - } else { - sy = (annotY1 - annotY0) / (formY1 - formY0); - } - m[0] *= sx; - m[2] *= sx; - m[4] = (m[4] - formX0) * sx + annotX0; - m[1] *= sy; - m[3] *= sy; - m[5] = (m[5] - formY0) * sy + annotY0; - - // get resources - dict->lookup("Resources", &resObj); - resDict = resObj.isDict() ? resObj.getDict() : (Dict *)NULL; - - // draw it - doForm1(str, resDict, m, bbox); - - resObj.free(); - } - - // draw the border - if (border && border->getWidth() > 0) { - if (state->getStrokeColorSpace()->getMode() != csDeviceRGB) { - state->setStrokePattern(NULL); - state->setStrokeColorSpace(new GfxDeviceRGBColorSpace()); - out->updateStrokeColorSpace(state); - } - if (aColor && (aColor->getSpace() == AnnotColor::colorRGB)) { - const double *values = aColor->getValues(); - r = values[0]; - g = values[1]; - b = values[2]; - } else { - r = g = b = 0; - }; - color.c[0] = dblToCol(r); - color.c[1] = dblToCol(g); - color.c[2] = dblToCol(b); - state->setStrokeColor(&color); - out->updateStrokeColor(state); - // compute the width scale factor when going from default user - // space to user space - x = (baseMatrix[0] + baseMatrix[2]) * ictm[0] + - (baseMatrix[1] + baseMatrix[3]) * ictm[2]; - y = (baseMatrix[0] + baseMatrix[2]) * ictm[1] + - (baseMatrix[1] + baseMatrix[3]) * ictm[3]; - x = sqrt(0.5 * (x * x + y * y)); - state->setLineWidth(x * border->getWidth()); - out->updateLineWidth(state); - dashLength = border->getDashLength(); - dash = border->getDash(); - if (border->getStyle() == AnnotBorder::borderDashed && dashLength > 0) { - dash2 = (double *)gmallocn(dashLength, sizeof(double)); - for (i = 0; i < dashLength; ++i) { - dash2[i] = x * dash[i]; - } - state->setLineDash(dash2, dashLength, 0); - out->updateLineDash(state); - } - //~ this doesn't currently handle the beveled and engraved styles - state->clearPath(); - state->moveTo(annotX0, out->upsideDown() ? annotY0 : annotY1); - state->lineTo(annotX1, out->upsideDown() ? annotY0 : annotY1); - if (border->getStyle() != AnnotBorder::borderUnderlined) { - state->lineTo(annotX1, out->upsideDown() ? annotY1 : annotY0); - state->lineTo(annotX0, out->upsideDown() ? annotY1 : annotY0); - state->closePath(); - } - out->stroke(state); - } -} - -int Gfx::bottomGuard() { - return stateGuards[stateGuards.size()-1]; -} - -void Gfx::pushStateGuard() { - stateGuards.push_back(stackHeight); -} - -void Gfx::popStateGuard() { - while (stackHeight > bottomGuard() && state->hasSaves()) - restoreState(); - stateGuards.pop_back(); -} - -void Gfx::saveState() { - out->saveState(state); - state = state->save(); - stackHeight++; -} - -void Gfx::restoreState() { - if (stackHeight <= bottomGuard() || !state->hasSaves()) { - error(-1, "Restoring state when no valid states to pop"); - commandAborted = gTrue; - return; - } - state = state->restore(); - out->restoreState(state); - stackHeight--; -} - -void Gfx::pushResources(Dict *resDict) { - res = new GfxResources(xref, resDict, res); -} - -void Gfx::popResources() { - GfxResources *resPtr; - - resPtr = res->getNext(); - delete res; - res = resPtr; -} - -#ifdef USE_CMS -PopplerCache *Gfx::getIccColorSpaceCache() -{ - return &iccColorSpaceCache; -} -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Gfx.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Gfx.h deleted file mode 100644 index ce7b2d87260..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Gfx.h +++ /dev/null @@ -1,378 +0,0 @@ -//======================================================================== -// -// Gfx.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> -// Copyright (C) 2007 Iñigo Martínez <inigomartinez@gmail.com> -// Copyright (C) 2008 Brad Hards <bradh@kde.org> -// Copyright (C) 2008, 2010 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2009-2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009, 2010 Thomas Freitag <Thomas.Freitag@alfa.de> -// Copyright (C) 2010 David Benjamin <davidben@mit.edu> -// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef GFX_H -#define GFX_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "poppler-config.h" -#include "goo/gtypes.h" -#include "goo/GooList.h" -#include "GfxState.h" -#include "Object.h" -#include "PopplerCache.h" - -#include <vector> - -class GooString; -class XRef; -class Array; -class Stream; -class Parser; -class Dict; -class Function; -class OutputDev; -class GfxFontDict; -class GfxFont; -class GfxPattern; -class GfxTilingPattern; -class GfxShadingPattern; -class GfxShading; -class GfxFunctionShading; -class GfxAxialShading; -class GfxRadialShading; -class GfxGouraudTriangleShading; -class GfxPatchMeshShading; -struct GfxPatch; -class GfxState; -struct GfxColor; -class GfxColorSpace; -class Gfx; -class PDFRectangle; -class AnnotBorder; -class AnnotColor; -class Catalog; -struct MarkedContentStack; - -//------------------------------------------------------------------------ - -enum GfxClipType { - clipNone, - clipNormal, - clipEO -}; - -enum TchkType { - tchkBool, // boolean - tchkInt, // integer - tchkNum, // number (integer or real) - tchkString, // string - tchkName, // name - tchkArray, // array - tchkProps, // properties (dictionary or name) - tchkSCN, // scn/SCN args (number of name) - tchkNone // used to avoid empty initializer lists -}; - -#define maxArgs 33 - -struct Operator { - char name[4]; - int numArgs; - TchkType tchk[maxArgs]; - void (Gfx::*func)(Object args[], int numArgs); -}; - -//------------------------------------------------------------------------ - -class GfxResources { -public: - - GfxResources(XRef *xref, Dict *resDict, GfxResources *nextA); - ~GfxResources(); - - GfxFont *lookupFont(char *name); - GBool lookupXObject(char *name, Object *obj); - GBool lookupXObjectNF(char *name, Object *obj); - GBool lookupMarkedContentNF(char *name, Object *obj); - void lookupColorSpace(char *name, Object *obj); - GfxPattern *lookupPattern(char *name, Gfx *gfx); - GfxShading *lookupShading(char *name, Gfx *gfx); - GBool lookupGState(char *name, Object *obj); - GBool lookupGStateNF(char *name, Object *obj); - - GfxResources *getNext() { return next; } - -private: - - GfxFontDict *fonts; - Object xObjDict; - Object colorSpaceDict; - Object patternDict; - Object shadingDict; - Object gStateDict; - PopplerObjectCache gStateCache; - Object propertiesDict; - GfxResources *next; -}; - -//------------------------------------------------------------------------ -// Gfx -//------------------------------------------------------------------------ - -class Gfx { -public: - - // Constructor for regular output. - Gfx(XRef *xrefA, OutputDev *outA, int pageNum, Dict *resDict, Catalog *catalog, - double hDPI, double vDPI, PDFRectangle *box, - PDFRectangle *cropBox, int rotate, - GBool (*abortCheckCbkA)(void *data) = NULL, - void *abortCheckCbkDataA = NULL); - - // Constructor for a sub-page object. - Gfx(XRef *xrefA, OutputDev *outA, Dict *resDict, Catalog *catalog, - PDFRectangle *box, PDFRectangle *cropBox, - GBool (*abortCheckCbkA)(void *data) = NULL, - void *abortCheckCbkDataA = NULL); - - ~Gfx(); - - // Interpret a stream or array of streams. - void display(Object *obj, GBool topLevel = gTrue); - - // Display an annotation, given its appearance (a Form XObject), - // border style, and bounding box (in default user space). - void drawAnnot(Object *str, AnnotBorder *border, AnnotColor *aColor, - double xMin, double yMin, double xMax, double yMax); - - // Save graphics state. - void saveState(); - - // Push a new state guard - void pushStateGuard(); - - // Restore graphics state. - void restoreState(); - - // Pop to state guard and pop guard - void popStateGuard(); - - // Get the current graphics state object. - GfxState *getState() { return state; } - - void pushResources(Dict *resDict); - void popResources(); - -#ifdef USE_CMS - PopplerCache *getIccColorSpaceCache(); -#endif - -private: - - XRef *xref; // the xref table for this PDF file - Catalog *catalog; // the Catalog for this PDF file - OutputDev *out; // output device - GBool subPage; // is this a sub-page object? - GBool printCommands; // print the drawing commands (for debugging) - GBool profileCommands; // profile the drawing commands (for debugging) - GBool textHaveCSPattern; // in text drawing and text has pattern colorspace - GBool drawText; // in text drawing - GBool maskHaveCSPattern; // in mask drawing and mask has pattern colorspace - GBool commandAborted; // did the previous command abort the drawing? - GfxResources *res; // resource stack - int updateLevel; - - GfxState *state; // current graphics state - int stackHeight; // the height of the current graphics stack - std::vector<int> stateGuards; // a stack of state limits; to guard against unmatched pops - GBool fontChanged; // set if font or text matrix has changed - GfxClipType clip; // do a clip? - int ignoreUndef; // current BX/EX nesting level - double baseMatrix[6]; // default matrix for most recent - // page/form/pattern - int formDepth; - - MarkedContentStack *mcStack; // current BMC/EMC stack - - Parser *parser; // parser for page content stream(s) - -#ifdef USE_CMS - PopplerCache iccColorSpaceCache; -#endif - - GBool // callback to check for an abort - (*abortCheckCbk)(void *data); - void *abortCheckCbkData; - - static Operator opTab[]; // table of operators - - void go(GBool topLevel); - void execOp(Object *cmd, Object args[], int numArgs); - Operator *findOp(char *name); - GBool checkArg(Object *arg, TchkType type); - int getPos(); - - int bottomGuard(); - - // graphics state operators - void opSave(Object args[], int numArgs); - void opRestore(Object args[], int numArgs); - void opConcat(Object args[], int numArgs); - void opSetDash(Object args[], int numArgs); - void opSetFlat(Object args[], int numArgs); - void opSetLineJoin(Object args[], int numArgs); - void opSetLineCap(Object args[], int numArgs); - void opSetMiterLimit(Object args[], int numArgs); - void opSetLineWidth(Object args[], int numArgs); - void opSetExtGState(Object args[], int numArgs); - void doSoftMask(Object *str, GBool alpha, - GfxColorSpace *blendingColorSpace, - GBool isolated, GBool knockout, - Function *transferFunc, GfxColor *backdropColor); - void opSetRenderingIntent(Object args[], int numArgs); - - // color operators - void opSetFillGray(Object args[], int numArgs); - void opSetStrokeGray(Object args[], int numArgs); - void opSetFillCMYKColor(Object args[], int numArgs); - void opSetStrokeCMYKColor(Object args[], int numArgs); - void opSetFillRGBColor(Object args[], int numArgs); - void opSetStrokeRGBColor(Object args[], int numArgs); - void opSetFillColorSpace(Object args[], int numArgs); - void opSetStrokeColorSpace(Object args[], int numArgs); - void opSetFillColor(Object args[], int numArgs); - void opSetStrokeColor(Object args[], int numArgs); - void opSetFillColorN(Object args[], int numArgs); - void opSetStrokeColorN(Object args[], int numArgs); - - // path segment operators - void opMoveTo(Object args[], int numArgs); - void opLineTo(Object args[], int numArgs); - void opCurveTo(Object args[], int numArgs); - void opCurveTo1(Object args[], int numArgs); - void opCurveTo2(Object args[], int numArgs); - void opRectangle(Object args[], int numArgs); - void opClosePath(Object args[], int numArgs); - - // path painting operators - void opEndPath(Object args[], int numArgs); - void opStroke(Object args[], int numArgs); - void opCloseStroke(Object args[], int numArgs); - void opFill(Object args[], int numArgs); - void opEOFill(Object args[], int numArgs); - void opFillStroke(Object args[], int numArgs); - void opCloseFillStroke(Object args[], int numArgs); - void opEOFillStroke(Object args[], int numArgs); - void opCloseEOFillStroke(Object args[], int numArgs); - void doPatternFill(GBool eoFill); - void doPatternStroke(); - void doTilingPatternFill(GfxTilingPattern *tPat, - GBool stroke, GBool eoFill); - void doShadingPatternFill(GfxShadingPattern *sPat, - GBool stroke, GBool eoFill); - void opShFill(Object args[], int numArgs); - void doFunctionShFill(GfxFunctionShading *shading); - void doFunctionShFill1(GfxFunctionShading *shading, - double x0, double y0, - double x1, double y1, - GfxColor *colors, int depth); - void doAxialShFill(GfxAxialShading *shading); - void doRadialShFill(GfxRadialShading *shading); - void doGouraudTriangleShFill(GfxGouraudTriangleShading *shading); - void gouraudFillTriangle(double x0, double y0, GfxColor *color0, - double x1, double y1, GfxColor *color1, - double x2, double y2, GfxColor *color2, - int nComps, int depth, GfxState::ReusablePathIterator *path); - void gouraudFillTriangle(double x0, double y0, double color0, - double x1, double y1, double color1, - double x2, double y2, double color2, - double refineColorThreshold, int depth, GfxGouraudTriangleShading *shading, GfxState::ReusablePathIterator *path); - void doPatchMeshShFill(GfxPatchMeshShading *shading); - void fillPatch(GfxPatch *patch, int colorComps, int patchColorComps, double refineColorThreshold, int depth, GfxPatchMeshShading *shading); - void doEndPath(); - - // path clipping operators - void opClip(Object args[], int numArgs); - void opEOClip(Object args[], int numArgs); - - // text object operators - void opBeginText(Object args[], int numArgs); - void opEndText(Object args[], int numArgs); - - // text state operators - void opSetCharSpacing(Object args[], int numArgs); - void opSetFont(Object args[], int numArgs); - void opSetTextLeading(Object args[], int numArgs); - void opSetTextRender(Object args[], int numArgs); - void opSetTextRise(Object args[], int numArgs); - void opSetWordSpacing(Object args[], int numArgs); - void opSetHorizScaling(Object args[], int numArgs); - - // text positioning operators - void opTextMove(Object args[], int numArgs); - void opTextMoveSet(Object args[], int numArgs); - void opSetTextMatrix(Object args[], int numArgs); - void opTextNextLine(Object args[], int numArgs); - - // text string operators - void opShowText(Object args[], int numArgs); - void opMoveShowText(Object args[], int numArgs); - void opMoveSetShowText(Object args[], int numArgs); - void opShowSpaceText(Object args[], int numArgs); - void doShowText(GooString *s); - - // XObject operators - void opXObject(Object args[], int numArgs); - void doImage(Object *ref, Stream *str, GBool inlineImg); - void doForm(Object *str); - void doForm1(Object *str, Dict *resDict, double *matrix, double *bbox, - GBool transpGroup = gFalse, GBool softMask = gFalse, - GfxColorSpace *blendingColorSpace = NULL, - GBool isolated = gFalse, GBool knockout = gFalse, - GBool alpha = gFalse, Function *transferFunc = NULL, - GfxColor *backdropColor = NULL); - - // in-line image operators - void opBeginImage(Object args[], int numArgs); - Stream *buildImageStream(); - void opImageData(Object args[], int numArgs); - void opEndImage(Object args[], int numArgs); - - // type 3 font operators - void opSetCharWidth(Object args[], int numArgs); - void opSetCacheDevice(Object args[], int numArgs); - - // compatibility operators - void opBeginIgnoreUndef(Object args[], int numArgs); - void opEndIgnoreUndef(Object args[], int numArgs); - - // marked content operators - void opBeginMarkedContent(Object args[], int numArgs); - void opEndMarkedContent(Object args[], int numArgs); - void opMarkPoint(Object args[], int numArgs); - GBool contentIsHidden(); - void pushMarkedContent(); - void popMarkedContent(); -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxFont.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxFont.cc deleted file mode 100644 index 114c7971d80..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxFont.cc +++ /dev/null @@ -1,2143 +0,0 @@ -//======================================================================== -// -// GfxFont.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005, 2006, 2008-2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> -// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2007 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2007 Koji Otani <sho@bbr.jp> -// Copyright (C) 2007 Ed Catmur <ed@catmur.co.uk> -// Copyright (C) 2008 Jonathan Kew <jonathan_kew@sil.org> -// Copyright (C) 2008 Ed Avis <eda@waniasset.com> -// Copyright (C) 2008, 2010 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2009 Peter Kerzum <kerzum@yandex-team.ru> -// Copyright (C) 2009, 2010 David Benjamin <davidben@mit.edu> -// Copyright (C) 2011 Axel Strübing <axel.struebing@freenet.de> -// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include <algorithm> -#include "goo/gmem.h" -#include "Error.h" -#include "Object.h" -#include "Dict.h" -#include "GlobalParams.h" -#include "CMap.h" -#include "CharCodeToUnicode.h" -#include "FontEncodingTables.h" -#include "BuiltinFontTables.h" -#include <fofi/FoFiType1.h> -#include <fofi/FoFiType1C.h> -#include <fofi/FoFiTrueType.h> -#include "GfxFont.h" - -//------------------------------------------------------------------------ - -struct StdFontMapEntry { - char *altName; - char *properName; -}; - -// Acrobat 4.0 and earlier substituted Base14-compatible fonts without -// providing Widths and a FontDescriptor, so we munge the names into -// the proper Base14 names. This table is from implementation note 44 -// in the PDF 1.4 spec, with some additions based on empirical -// evidence. -static const StdFontMapEntry stdFontMap[] = { - { "Arial", "Helvetica" }, - { "Arial,Bold", "Helvetica-Bold" }, - { "Arial,BoldItalic", "Helvetica-BoldOblique" }, - { "Arial,Italic", "Helvetica-Oblique" }, - { "Arial-Bold", "Helvetica-Bold" }, - { "Arial-BoldItalic", "Helvetica-BoldOblique" }, - { "Arial-BoldItalicMT", "Helvetica-BoldOblique" }, - { "Arial-BoldMT", "Helvetica-Bold" }, - { "Arial-Italic", "Helvetica-Oblique" }, - { "Arial-ItalicMT", "Helvetica-Oblique" }, - { "ArialMT", "Helvetica" }, - { "Courier,Bold", "Courier-Bold" }, - { "Courier,BoldItalic", "Courier-BoldOblique" }, - { "Courier,Italic", "Courier-Oblique" }, - { "CourierNew", "Courier" }, - { "CourierNew,Bold", "Courier-Bold" }, - { "CourierNew,BoldItalic", "Courier-BoldOblique" }, - { "CourierNew,Italic", "Courier-Oblique" }, - { "CourierNew-Bold", "Courier-Bold" }, - { "CourierNew-BoldItalic", "Courier-BoldOblique" }, - { "CourierNew-Italic", "Courier-Oblique" }, - { "CourierNewPS-BoldItalicMT", "Courier-BoldOblique" }, - { "CourierNewPS-BoldMT", "Courier-Bold" }, - { "CourierNewPS-ItalicMT", "Courier-Oblique" }, - { "CourierNewPSMT", "Courier" }, - { "Helvetica,Bold", "Helvetica-Bold" }, - { "Helvetica,BoldItalic", "Helvetica-BoldOblique" }, - { "Helvetica,Italic", "Helvetica-Oblique" }, - { "Helvetica-BoldItalic", "Helvetica-BoldOblique" }, - { "Helvetica-Italic", "Helvetica-Oblique" }, - { "Symbol,Bold", "Symbol" }, - { "Symbol,BoldItalic", "Symbol" }, - { "Symbol,Italic", "Symbol" }, - { "TimesNewRoman", "Times-Roman" }, - { "TimesNewRoman,Bold", "Times-Bold" }, - { "TimesNewRoman,BoldItalic", "Times-BoldItalic" }, - { "TimesNewRoman,Italic", "Times-Italic" }, - { "TimesNewRoman-Bold", "Times-Bold" }, - { "TimesNewRoman-BoldItalic", "Times-BoldItalic" }, - { "TimesNewRoman-Italic", "Times-Italic" }, - { "TimesNewRomanPS", "Times-Roman" }, - { "TimesNewRomanPS-Bold", "Times-Bold" }, - { "TimesNewRomanPS-BoldItalic", "Times-BoldItalic" }, - { "TimesNewRomanPS-BoldItalicMT", "Times-BoldItalic" }, - { "TimesNewRomanPS-BoldMT", "Times-Bold" }, - { "TimesNewRomanPS-Italic", "Times-Italic" }, - { "TimesNewRomanPS-ItalicMT", "Times-Italic" }, - { "TimesNewRomanPSMT", "Times-Roman" }, - { "TimesNewRomanPSMT,Bold", "Times-Bold" }, - { "TimesNewRomanPSMT,BoldItalic", "Times-BoldItalic" }, - { "TimesNewRomanPSMT,Italic", "Times-Italic" } -}; - -static int parseCharName(char *charName, Unicode *uBuf, int uLen, - GBool names, GBool ligatures, - GBool numeric, GBool hex, GBool variants); - -//------------------------------------------------------------------------ -// GfxFont -//------------------------------------------------------------------------ - -GfxFont *GfxFont::makeFont(XRef *xref, char *tagA, Ref idA, Dict *fontDict) { - GooString *nameA; - GfxFont *font; - Object obj1; - - // get base font name - nameA = NULL; - fontDict->lookup("BaseFont", &obj1); - if (obj1.isName()) { - nameA = new GooString(obj1.getName()); - } - obj1.free(); - - // get font type - font = NULL; - fontDict->lookup("Subtype", &obj1); - if (obj1.isName("Type1") || obj1.isName("MMType1")) { - font = new Gfx8BitFont(xref, tagA, idA, nameA, fontType1, fontDict); - } else if (obj1.isName("Type1C")) { - font = new Gfx8BitFont(xref, tagA, idA, nameA, fontType1C, fontDict); - } else if (obj1.isName("Type3")) { - font = new Gfx8BitFont(xref, tagA, idA, nameA, fontType3, fontDict); - } else if (obj1.isName("TrueType")) { - font = new Gfx8BitFont(xref, tagA, idA, nameA, fontTrueType, fontDict); - } else if (obj1.isName("Type0")) { - font = new GfxCIDFont(xref, tagA, idA, nameA, fontDict); - } else { - error(-1, "Unknown font type: '%s'", - obj1.isName() ? obj1.getName() : "???"); - font = new Gfx8BitFont(xref, tagA, idA, nameA, fontUnknownType, fontDict); - } - obj1.free(); - - return font; -} - -GfxFont::GfxFont(char *tagA, Ref idA, GooString *nameA) { - ok = gFalse; - tag = new GooString(tagA); - id = idA; - name = nameA; - origName = nameA; - embFontName = NULL; - extFontFile = NULL; - family = NULL; - stretch = StretchNotDefined; - weight = WeightNotDefined; - refCnt = 1; - dfp = NULL; - hasToUnicode = gFalse; -} - -GfxFont::~GfxFont() { - delete tag; - delete family; - if (origName && origName != name) { - delete origName; - } - if (name) { - delete name; - } - if (embFontName) { - delete embFontName; - } - if (extFontFile) { - delete extFontFile; - } - delete dfp; -} - -void GfxFont::incRefCnt() { - refCnt++; -} - -void GfxFont::decRefCnt() { - if (--refCnt == 0) - delete this; -} - -void GfxFont::readFontDescriptor(XRef *xref, Dict *fontDict) { - Object obj1, obj2, obj3, obj4; - double t; - int i; - - // assume Times-Roman by default (for substitution purposes) - flags = fontSerif; - - embFontID.num = -1; - embFontID.gen = -1; - missingWidth = 0; - - if (fontDict->lookup("FontDescriptor", &obj1)->isDict()) { - - // get flags - if (obj1.dictLookup("Flags", &obj2)->isInt()) { - flags = obj2.getInt(); - } - obj2.free(); - - // get name - obj1.dictLookup("FontName", &obj2); - if (obj2.isName()) { - embFontName = new GooString(obj2.getName()); - } - obj2.free(); - if (embFontName == NULL) { - // get name with typo - obj1.dictLookup("Fontname", &obj2); - if (obj2.isName()) { - embFontName = new GooString(obj2.getName()); - error(-1, "The file uses Fontname instead of FontName please notify the creator that the file is broken"); - } - obj2.free(); - } - - // get family - obj1.dictLookup("FontFamily", &obj2); - if (obj2.isString()) family = new GooString(obj2.getString()); - obj2.free(); - - // get stretch - obj1.dictLookup("FontStretch", &obj2); - if (obj2.isName()) { - if (strcmp(obj2.getName(), "UltraCondensed") == 0) stretch = UltraCondensed; - else if (strcmp(obj2.getName(), "ExtraCondensed") == 0) stretch = ExtraCondensed; - else if (strcmp(obj2.getName(), "Condensed") == 0) stretch = Condensed; - else if (strcmp(obj2.getName(), "SemiCondensed") == 0) stretch = SemiCondensed; - else if (strcmp(obj2.getName(), "Normal") == 0) stretch = Normal; - else if (strcmp(obj2.getName(), "SemiExpanded") == 0) stretch = SemiExpanded; - else if (strcmp(obj2.getName(), "Expanded") == 0) stretch = Expanded; - else if (strcmp(obj2.getName(), "ExtraExpanded") == 0) stretch = ExtraExpanded; - else if (strcmp(obj2.getName(), "UltraExpanded") == 0) stretch = UltraExpanded; - else error(-1, "Invalid Font Stretch"); - } - obj2.free(); - - // get weight - obj1.dictLookup("FontWeight", &obj2); - if (obj2.isNum()) { - if (obj2.getNum() == 100) weight = W100; - else if (obj2.getNum() == 200) weight = W200; - else if (obj2.getNum() == 300) weight = W300; - else if (obj2.getNum() == 400) weight = W400; - else if (obj2.getNum() == 500) weight = W500; - else if (obj2.getNum() == 600) weight = W600; - else if (obj2.getNum() == 700) weight = W700; - else if (obj2.getNum() == 800) weight = W800; - else if (obj2.getNum() == 900) weight = W900; - else error(-1, "Invalid Font Weight"); - } - obj2.free(); - - // look for embedded font file - if (obj1.dictLookupNF("FontFile", &obj2)->isRef()) { - embFontID = obj2.getRef(); - if (type != fontType1) { - error(-1, "Mismatch between font type and embedded font file"); - if (isCIDFont()) { - error(-1, "CID font has FontFile attribute; assuming CIDType0"); - type = fontCIDType0; - } else { - type = fontType1; - } - } - } - obj2.free(); - if (embFontID.num == -1 && - obj1.dictLookupNF("FontFile2", &obj2)->isRef()) { - embFontID = obj2.getRef(); - if (type != fontTrueType && type != fontCIDType2) { - error(-1, "Mismatch between font type and embedded font file"); - type = isCIDFont() ? fontCIDType2 : fontTrueType; - } - } - obj2.free(); - if (embFontID.num == -1 && - obj1.dictLookupNF("FontFile3", &obj2)->isRef()) { - if (obj2.fetch(xref, &obj3)->isStream()) { - obj3.streamGetDict()->lookup("Subtype", &obj4); - if (obj4.isName("Type1")) { - embFontID = obj2.getRef(); - if (type != fontType1) { - error(-1, "Mismatch between font type and embedded font file"); - if (isCIDFont()) { - error(-1, "Embedded CID font has type Type1; assuming CIDType0"); - type = fontCIDType0; - } else { - type = fontType1; - } - } - } else if (obj4.isName("Type1C")) { - embFontID = obj2.getRef(); - if (type != fontType1 && type != fontType1C) { - error(-1, "Mismatch between font type and embedded font file"); - } - if (isCIDFont()) { - error(-1, "Embedded CID font has type Type1C; assuming CIDType0C"); - type = fontCIDType0C; - } else { - type = fontType1C; - } - } else if (obj4.isName("TrueType")) { - embFontID = obj2.getRef(); - if (type != fontTrueType) { - error(-1, "Mismatch between font type and embedded font file"); - if (isCIDFont()) { - error(-1, "Embedded CID font has type TrueType; assuming CIDType2"); - type = fontCIDType2; - } else { - type = fontTrueType; - } - } - } else if (obj4.isName("CIDFontType0C")) { - embFontID = obj2.getRef(); - if (type != fontCIDType0) { - error(-1, "Mismatch between font type and embedded font file"); - } - if (isCIDFont()) { - type = fontCIDType0C; - } else { - error(-1, "Embedded non-CID font has type CIDFontType0c; assuming Type1C"); - type = fontType1C; - } - } else if (obj4.isName("OpenType")) { - embFontID = obj2.getRef(); - if (type == fontTrueType) { - type = fontTrueTypeOT; - } else if (type == fontType1) { - type = fontType1COT; - } else if (type == fontCIDType0) { - type = fontCIDType0COT; - } else if (type == fontCIDType2) { - type = fontCIDType2OT; - } else { - error(-1, "Mismatch between font type and embedded font file"); - } - } else { - error(-1, "Unknown embedded font type '%s'", - obj4.isName() ? obj4.getName() : "???"); - } - obj4.free(); - } - obj3.free(); - } - obj2.free(); - - // look for MissingWidth - obj1.dictLookup("MissingWidth", &obj2); - if (obj2.isNum()) { - missingWidth = obj2.getNum(); - } - obj2.free(); - - // get Ascent and Descent - obj1.dictLookup("Ascent", &obj2); - if (obj2.isNum()) { - t = 0.001 * obj2.getNum(); - // some broken font descriptors set ascent and descent to 0 - if (t != 0) { - ascent = t; - } - } - obj2.free(); - obj1.dictLookup("Descent", &obj2); - if (obj2.isNum()) { - t = 0.001 * obj2.getNum(); - // some broken font descriptors set ascent and descent to 0 - if (t != 0) { - descent = t; - } - // some broken font descriptors specify a positive descent - if (descent > 0) { - descent = -descent; - } - } - obj2.free(); - - // font FontBBox - if (obj1.dictLookup("FontBBox", &obj2)->isArray()) { - for (i = 0; i < 4 && i < obj2.arrayGetLength(); ++i) { - if (obj2.arrayGet(i, &obj3)->isNum()) { - fontBBox[i] = 0.001 * obj3.getNum(); - } - obj3.free(); - } - } - obj2.free(); - - } - obj1.free(); -} - -CharCodeToUnicode *GfxFont::readToUnicodeCMap(Dict *fontDict, int nBits, - CharCodeToUnicode *ctu) { - GooString *buf; - Object obj1; - - if (!fontDict->lookup("ToUnicode", &obj1)->isStream()) { - obj1.free(); - return NULL; - } - buf = new GooString(); - obj1.getStream()->fillGooString(buf); - obj1.streamClose(); - obj1.free(); - if (ctu) { - ctu->mergeCMap(buf, nBits); - } else { - ctu = CharCodeToUnicode::parseCMap(buf, nBits); - } - hasToUnicode = gTrue; - delete buf; - return ctu; -} - -void GfxFont::findExtFontFile() { - static char *type1Exts[] = { ".pfa", ".pfb", ".ps", "", NULL }; - static char *ttExts[] = { ".ttf", ".ttc", NULL }; - - if (name) { - if (type == fontType1) { - extFontFile = globalParams->findFontFile(name, type1Exts); - } else if (type == fontTrueType) { - extFontFile = globalParams->findFontFile(name, ttExts); - } - } -} - -char *GfxFont::readExtFontFile(int *len) { - FILE *f; - char *buf; - - if (!(f = fopen(extFontFile->getCString(), "rb"))) { - error(-1, "External font file '%s' vanished", extFontFile->getCString()); - return NULL; - } - if (fseek(f, 0, SEEK_END) != 0) { - error(-1, "Cannot seek to end of '%s'", extFontFile->getCString()); - fclose(f); - return NULL; - } - *len = (int)ftell(f); - if (fseek(f, 0, SEEK_SET) != 0) { - error(-1, "Cannot seek to start of '%s'", extFontFile->getCString()); - fclose(f); - return NULL; - } - buf = (char *)gmalloc(*len); - if ((int)fread(buf, 1, *len, f) != *len) { - error(-1, "Error reading external font file '%s'", - extFontFile->getCString()); - } - fclose(f); - return buf; -} - -char *GfxFont::readEmbFontFile(XRef *xref, int *len) { - char *buf; - Object obj1, obj2; - Stream *str; - - obj1.initRef(embFontID.num, embFontID.gen); - obj1.fetch(xref, &obj2); - if (!obj2.isStream()) { - error(-1, "Embedded font file is not a stream"); - obj2.free(); - obj1.free(); - embFontID.num = -1; - *len = 0; - return NULL; - } - str = obj2.getStream(); - - buf = (char*)str->toUnsignedChars(len); - str->close(); - - obj2.free(); - obj1.free(); - - return buf; -} - -//------------------------------------------------------------------------ -// Gfx8BitFont -//------------------------------------------------------------------------ - -Gfx8BitFont::Gfx8BitFont(XRef *xref, char *tagA, Ref idA, GooString *nameA, - GfxFontType typeA, Dict *fontDict): - GfxFont(tagA, idA, nameA) -{ - GooString *name2; - BuiltinFont *builtinFont; - char **baseEnc; - GBool baseEncFromFontFile; - char *buf; - int len; - FoFiType1 *ffT1; - FoFiType1C *ffT1C; - int code; - char *charName; - GBool missing, hex; - Unicode toUnicode[256]; - CharCodeToUnicode *utu, *ctu2; - Unicode uBuf[8]; - double mul; - int firstChar, lastChar; - Gushort w; - Object obj1, obj2, obj3; - int n, i, a, b, m; - - refCnt = 1; - type = typeA; - ctu = NULL; - - // do font name substitution for various aliases of the Base 14 font - // names - if (name) { - name2 = name->copy(); - i = 0; - while (i < name2->getLength()) { - if (name2->getChar(i) == ' ') { - name2->del(i); - } else { - ++i; - } - } - a = 0; - b = sizeof(stdFontMap) / sizeof(StdFontMapEntry); - // invariant: stdFontMap[a].altName <= name2 < stdFontMap[b].altName - while (b - a > 1) { - m = (a + b) / 2; - if (name2->cmp(stdFontMap[m].altName) >= 0) { - a = m; - } else { - b = m; - } - } - if (!name2->cmp(stdFontMap[a].altName)) { - name = new GooString(stdFontMap[a].properName); - } - delete name2; - } - - // is it a built-in font? - builtinFont = NULL; - if (name) { - for (i = 0; i < nBuiltinFonts; ++i) { - if (!name->cmp(builtinFonts[i].name)) { - builtinFont = &builtinFonts[i]; - break; - } - } - } - - // default ascent/descent values - if (builtinFont) { - ascent = 0.001 * builtinFont->ascent; - descent = 0.001 * builtinFont->descent; - fontBBox[0] = 0.001 * builtinFont->bbox[0]; - fontBBox[1] = 0.001 * builtinFont->bbox[1]; - fontBBox[2] = 0.001 * builtinFont->bbox[2]; - fontBBox[3] = 0.001 * builtinFont->bbox[3]; - } else { - ascent = 0.95; - descent = -0.35; - fontBBox[0] = fontBBox[1] = fontBBox[2] = fontBBox[3] = 0; - } - - // get info from font descriptor - readFontDescriptor(xref, fontDict); - - // for non-embedded fonts, don't trust the ascent/descent/bbox - // values from the font descriptor - if (builtinFont && embFontID.num < 0) { - ascent = 0.001 * builtinFont->ascent; - descent = 0.001 * builtinFont->descent; - fontBBox[0] = 0.001 * builtinFont->bbox[0]; - fontBBox[1] = 0.001 * builtinFont->bbox[1]; - fontBBox[2] = 0.001 * builtinFont->bbox[2]; - fontBBox[3] = 0.001 * builtinFont->bbox[3]; - } - - // look for an external font file - findExtFontFile(); - - // get font matrix - fontMat[0] = fontMat[3] = 1; - fontMat[1] = fontMat[2] = fontMat[4] = fontMat[5] = 0; - if (fontDict->lookup("FontMatrix", &obj1)->isArray()) { - for (i = 0; i < 6 && i < obj1.arrayGetLength(); ++i) { - if (obj1.arrayGet(i, &obj2)->isNum()) { - fontMat[i] = obj2.getNum(); - } - obj2.free(); - } - } - obj1.free(); - - // get Type 3 bounding box, font definition, and resources - if (type == fontType3) { - if (fontDict->lookup("FontBBox", &obj1)->isArray()) { - for (i = 0; i < 4 && i < obj1.arrayGetLength(); ++i) { - if (obj1.arrayGet(i, &obj2)->isNum()) { - fontBBox[i] = obj2.getNum(); - } - obj2.free(); - } - } - obj1.free(); - if (!fontDict->lookup("CharProcs", &charProcs)->isDict()) { - error(-1, "Missing or invalid CharProcs dictionary in Type 3 font"); - charProcs.free(); - } - if (!fontDict->lookup("Resources", &resources)->isDict()) { - resources.free(); - } - } - - //----- build the font encoding ----- - - // Encodings start with a base encoding, which can come from - // (in order of priority): - // 1. FontDict.Encoding or FontDict.Encoding.BaseEncoding - // - MacRoman / MacExpert / WinAnsi / Standard - // 2. embedded or external font file - // 3. default: - // - builtin --> builtin encoding - // - TrueType --> WinAnsiEncoding - // - others --> StandardEncoding - // and then add a list of differences (if any) from - // FontDict.Encoding.Differences. - - // check FontDict for base encoding - hasEncoding = gFalse; - usesMacRomanEnc = gFalse; - baseEnc = NULL; - baseEncFromFontFile = gFalse; - fontDict->lookup("Encoding", &obj1); - if (obj1.isDict()) { - obj1.dictLookup("BaseEncoding", &obj2); - if (obj2.isName("MacRomanEncoding")) { - hasEncoding = gTrue; - usesMacRomanEnc = gTrue; - baseEnc = macRomanEncoding; - } else if (obj2.isName("MacExpertEncoding")) { - hasEncoding = gTrue; - baseEnc = macExpertEncoding; - } else if (obj2.isName("WinAnsiEncoding")) { - hasEncoding = gTrue; - baseEnc = winAnsiEncoding; - } - obj2.free(); - } else if (obj1.isName("MacRomanEncoding")) { - hasEncoding = gTrue; - usesMacRomanEnc = gTrue; - baseEnc = macRomanEncoding; - } else if (obj1.isName("MacExpertEncoding")) { - hasEncoding = gTrue; - baseEnc = macExpertEncoding; - } else if (obj1.isName("WinAnsiEncoding")) { - hasEncoding = gTrue; - baseEnc = winAnsiEncoding; - } - - // check embedded or external font file for base encoding - // (only for Type 1 fonts - trying to get an encoding out of a - // TrueType font is a losing proposition) - ffT1 = NULL; - ffT1C = NULL; - buf = NULL; - if (type == fontType1 && (extFontFile || embFontID.num >= 0)) { - if (extFontFile) { - ffT1 = FoFiType1::load(extFontFile->getCString()); - } else { - buf = readEmbFontFile(xref, &len); - ffT1 = FoFiType1::make(buf, len); - } - if (ffT1) { - if (ffT1->getName()) { - if (embFontName) { - delete embFontName; - } - embFontName = new GooString(ffT1->getName()); - } - if (!baseEnc) { - baseEnc = ffT1->getEncoding(); - baseEncFromFontFile = gTrue; - } - } - } else if (type == fontType1C && (extFontFile || embFontID.num >= 0)) { - if (extFontFile) { - ffT1C = FoFiType1C::load(extFontFile->getCString()); - } else { - buf = readEmbFontFile(xref, &len); - ffT1C = FoFiType1C::make(buf, len); - } - if (ffT1C) { - if (ffT1C->getName()) { - if (embFontName) { - delete embFontName; - } - embFontName = new GooString(ffT1C->getName()); - } - if (!baseEnc) { - baseEnc = ffT1C->getEncoding(); - baseEncFromFontFile = gTrue; - } - } - } - if (buf) { - gfree(buf); - } - - // get default base encoding - if (!baseEnc) { - if (builtinFont && embFontID.num < 0) { - baseEnc = builtinFont->defaultBaseEnc; - hasEncoding = gTrue; - } else if (type == fontTrueType) { - baseEnc = winAnsiEncoding; - } else { - baseEnc = standardEncoding; - } - } - - // copy the base encoding - for (i = 0; i < 256; ++i) { - enc[i] = baseEnc[i]; - if ((encFree[i] = baseEncFromFontFile) && enc[i]) { - enc[i] = copyString(baseEnc[i]); - } - } - - // some Type 1C font files have empty encodings, which can break the - // T1C->T1 conversion (since the 'seac' operator depends on having - // the accents in the encoding), so we fill in any gaps from - // StandardEncoding - if (type == fontType1C && (extFontFile || embFontID.num >= 0) && - baseEncFromFontFile) { - for (i = 0; i < 256; ++i) { - if (!enc[i] && standardEncoding[i]) { - enc[i] = standardEncoding[i]; - encFree[i] = gFalse; - } - } - } - - // merge differences into encoding - if (obj1.isDict()) { - obj1.dictLookup("Differences", &obj2); - if (obj2.isArray()) { - hasEncoding = gTrue; - code = 0; - for (i = 0; i < obj2.arrayGetLength(); ++i) { - obj2.arrayGet(i, &obj3); - if (obj3.isInt()) { - code = obj3.getInt(); - } else if (obj3.isName()) { - if (code >= 0 && code < 256) { - if (encFree[code]) { - gfree(enc[code]); - } - enc[code] = copyString(obj3.getName()); - encFree[code] = gTrue; - } - ++code; - } else { - error(-1, "Wrong type in font encoding resource differences (%s)", - obj3.getTypeName()); - } - obj3.free(); - } - } - obj2.free(); - } - obj1.free(); - if (ffT1) { - delete ffT1; - } - if (ffT1C) { - delete ffT1C; - } - - //----- build the mapping to Unicode ----- - - // pass 1: use the name-to-Unicode mapping table - missing = hex = gFalse; - for (code = 0; code < 256; ++code) { - if ((charName = enc[code])) { - if (!(toUnicode[code] = globalParams->mapNameToUnicode(charName)) && - strcmp(charName, ".notdef")) { - // if it wasn't in the name-to-Unicode table, check for a - // name that looks like 'Axx' or 'xx', where 'A' is any letter - // and 'xx' is two hex digits - if ((strlen(charName) == 3 && - isalpha(charName[0]) && - isxdigit(charName[1]) && isxdigit(charName[2]) && - ((charName[1] >= 'a' && charName[1] <= 'f') || - (charName[1] >= 'A' && charName[1] <= 'F') || - (charName[2] >= 'a' && charName[2] <= 'f') || - (charName[2] >= 'A' && charName[2] <= 'F'))) || - (strlen(charName) == 2 && - isxdigit(charName[0]) && isxdigit(charName[1]) && - ((charName[0] >= 'a' && charName[0] <= 'f') || - (charName[0] >= 'A' && charName[0] <= 'F') || - (charName[1] >= 'a' && charName[1] <= 'f') || - (charName[1] >= 'A' && charName[1] <= 'F')))) { - hex = gTrue; - } - missing = gTrue; - } - } else { - toUnicode[code] = 0; - } - } - - // construct the char code -> Unicode mapping object - ctu = CharCodeToUnicode::make8BitToUnicode(toUnicode); - - // pass 2: try to fill in the missing chars, looking for ligatures, numeric - // references and variants - if (missing) { - for (code = 0; code < 256; ++code) { - if (!toUnicode[code]) { - if ((charName = enc[code]) && strcmp(charName, ".notdef") - && (n = parseCharName(charName, uBuf, sizeof(uBuf)/sizeof(*uBuf), - gFalse, // don't check simple names (pass 1) - gTrue, // do check ligatures - globalParams->getMapNumericCharNames(), - hex, - gTrue))) { // do check variants - ctu->setMapping((CharCode)code, uBuf, n); - } else if (globalParams->getMapUnknownCharNames()) { - // if the 'mapUnknownCharNames' flag is set, do a simple pass-through - // mapping for unknown character names - if (charName && charName[0]) { - for (n = 0; n < (int)(sizeof(uBuf)/sizeof(*uBuf)); ++n) - if (!(uBuf[n] = charName[n])) - break; - ctu->setMapping((CharCode)code, uBuf, n); - } else { - uBuf[0] = code; - ctu->setMapping((CharCode)code, uBuf, 1); - } - } - } - } - } - - // merge in a ToUnicode CMap, if there is one -- this overwrites - // existing entries in ctu, i.e., the ToUnicode CMap takes - // precedence, but the other encoding info is allowed to fill in any - // holes - readToUnicodeCMap(fontDict, 8, ctu); - - // look for a Unicode-to-Unicode mapping - if (name && (utu = globalParams->getUnicodeToUnicode(name))) { - Unicode *uAux; - for (i = 0; i < 256; ++i) { - toUnicode[i] = 0; - } - ctu2 = CharCodeToUnicode::make8BitToUnicode(toUnicode); - for (i = 0; i < 256; ++i) { - n = ctu->mapToUnicode((CharCode)i, &uAux); - if (n >= 1) { - n = utu->mapToUnicode((CharCode)uAux[0], &uAux); - if (n >= 1) { - ctu2->setMapping((CharCode)i, uAux, n); - } - } - } - utu->decRefCnt(); - delete ctu; - ctu = ctu2; - } - - //----- get the character widths ----- - - // initialize all widths - for (code = 0; code < 256; ++code) { - widths[code] = missingWidth * 0.001; - } - - // use widths from font dict, if present - fontDict->lookup("FirstChar", &obj1); - firstChar = obj1.isInt() ? obj1.getInt() : 0; - obj1.free(); - if (firstChar < 0 || firstChar > 255) { - firstChar = 0; - } - fontDict->lookup("LastChar", &obj1); - lastChar = obj1.isInt() ? obj1.getInt() : 255; - obj1.free(); - if (lastChar < 0 || lastChar > 255) { - lastChar = 255; - } - mul = (type == fontType3) ? fontMat[0] : 0.001; - fontDict->lookup("Widths", &obj1); - if (obj1.isArray()) { - flags |= fontFixedWidth; - if (obj1.arrayGetLength() < lastChar - firstChar + 1) { - lastChar = firstChar + obj1.arrayGetLength() - 1; - } - for (code = firstChar; code <= lastChar; ++code) { - obj1.arrayGet(code - firstChar, &obj2); - if (obj2.isNum()) { - widths[code] = obj2.getNum() * mul; - if (widths[code] != widths[firstChar]) { - flags &= ~fontFixedWidth; - } - } - obj2.free(); - } - - // use widths from built-in font - } else if (builtinFont) { - // this is a kludge for broken PDF files that encode char 32 - // as .notdef - if (builtinFont->widths->getWidth("space", &w)) { - widths[32] = 0.001 * w; - } - for (code = 0; code < 256; ++code) { - if (enc[code] && builtinFont->widths->getWidth(enc[code], &w)) { - widths[code] = 0.001 * w; - } - } - - // couldn't find widths -- use defaults - } else { - // this is technically an error -- the Widths entry is required - // for all but the Base-14 fonts -- but certain PDF generators - // apparently don't include widths for Arial and TimesNewRoman - if (isFixedWidth()) { - i = 0; - } else if (isSerif()) { - i = 8; - } else { - i = 4; - } - if (isBold()) { - i += 2; - } - if (isItalic()) { - i += 1; - } - builtinFont = builtinFontSubst[i]; - // this is a kludge for broken PDF files that encode char 32 - // as .notdef - if (builtinFont->widths->getWidth("space", &w)) { - widths[32] = 0.001 * w; - } - for (code = 0; code < 256; ++code) { - if (enc[code] && builtinFont->widths->getWidth(enc[code], &w)) { - widths[code] = 0.001 * w; - } - } - } - obj1.free(); - - ok = gTrue; -} - -Gfx8BitFont::~Gfx8BitFont() { - int i; - - for (i = 0; i < 256; ++i) { - if (encFree[i] && enc[i]) { - gfree(enc[i]); - } - } - ctu->decRefCnt(); - if (charProcs.isDict()) { - charProcs.free(); - } - if (resources.isDict()) { - resources.free(); - } -} - -// This function is in part a derived work of the Adobe Glyph Mapping -// Convention: http://www.adobe.com/devnet/opentype/archives/glyph.html -// Algorithmic comments are excerpted from that document to aid -// maintainability. -static int parseCharName(char *charName, Unicode *uBuf, int uLen, - GBool names, GBool ligatures, - GBool numeric, GBool hex, GBool variants) -{ - if (uLen <= 0) { - error(-1, "Zero-length output buffer (recursion overflow?) in " - "parseCharName, component \"%s\"", charName); - return 0; - } - // Step 1: drop all the characters from the glyph name starting with the - // first occurrence of a period (U+002E FULL STOP), if any. - if (variants) { - char *var_part = strchr(charName, '.'); - if (var_part == charName) { - return 0; // .notdef or similar - } else if (var_part != NULL) { - // parse names of the form 7.oldstyle, P.swash, s.sc, etc. - char *main_part = gstrndup(charName, var_part - charName); - GBool namesRecurse = gTrue, variantsRecurse = gFalse; - int n = parseCharName(main_part, uBuf, uLen, namesRecurse, ligatures, - numeric, hex, variantsRecurse); - gfree(main_part); - return n; - } - } - // Step 2: split the remaining string into a sequence of components, using - // underscore (U+005F LOW LINE) as the delimiter. - if (ligatures && strchr(charName, '_')) { - // parse names of the form A_a (e.g. f_i, T_h, l_quotesingle) - char *lig_part, *lig_end, *lig_copy; - int n = 0, m; - lig_part = lig_copy = copyString(charName); - do { - if ((lig_end = strchr(lig_part, '_'))) - *lig_end = '\0'; - if (lig_part[0] != '\0') { - GBool namesRecurse = gTrue, ligaturesRecurse = gFalse; - if ((m = parseCharName(lig_part, uBuf + n, uLen - n, namesRecurse, - ligaturesRecurse, numeric, hex, variants))) - n += m; - else - error(-1, "Could not parse ligature component \"%s\" of \"%s\" in " - "parseCharName", lig_part, charName); - } - lig_part = lig_end + 1; - } while (lig_end && n < uLen); - gfree(lig_copy); - return n; - } - // Step 3: map each component to a character string according to the - // procedure below, and concatenate those strings; the result is the - // character string to which the glyph name is mapped. - // 3.1. if the font is Zapf Dingbats (PostScript FontName ZapfDingbats), and - // the component is in the ZapfDingbats list, then map it to the - // corresponding character in that list. - // 3.2. otherwise, if the component is in the Adobe Glyph List, then map it - // to the corresponding character in that list. - if (names && (uBuf[0] = globalParams->mapNameToUnicode(charName))) { - return 1; - } - if (numeric) { - unsigned int n = strlen(charName); - // 3.3. otherwise, if the component is of the form "uni" (U+0075 U+006E - // U+0069) followed by a sequence of uppercase hexadecimal digits (0 .. 9, - // A .. F, i.e. U+0030 .. U+0039, U+0041 .. U+0046), the length of that - // sequence is a multiple of four, and each group of four digits represents - // a number in the set {0x0000 .. 0xD7FF, 0xE000 .. 0xFFFF}, then interpret - // each such number as a Unicode scalar value and map the component to the - // string made of those scalar values. Note that the range and digit length - // restrictions mean that the "uni" prefix can be used only with Unicode - // values from the Basic Multilingual Plane (BMP). - if (n >= 7 && (n % 4) == 3 && !strncmp(charName, "uni", 3)) { - int i; - unsigned int m; - for (i = 0, m = 3; i < uLen && m < n; m += 4) { - if (isxdigit(charName[m]) && isxdigit(charName[m + 1]) && - isxdigit(charName[m + 2]) && isxdigit(charName[m + 3])) { - unsigned int u; - sscanf(charName + m, "%4x", &u); - if (u <= 0xD7FF || (0xE000 <= u && u <= 0xFFFF)) { - uBuf[i++] = u; - } - } - } - return i; - } - // 3.4. otherwise, if the component is of the form "u" (U+0075) followed by - // a sequence of four to six uppercase hexadecimal digits {0 .. 9, A .. F} - // (U+0030 .. U+0039, U+0041 .. U+0046), and those digits represent a - // number in {0x0000 .. 0xD7FF, 0xE000 .. 0x10FFFF}, then interpret this - // number as a Unicode scalar value and map the component to the string - // made of this scalar value. - if (n >= 5 && n <= 7 && charName[0] == 'u' && isxdigit(charName[1]) && - isxdigit(charName[2]) && isxdigit(charName[3]) && isxdigit(charName[4]) - && (n <= 5 || isxdigit(charName[5])) - && (n <= 6 || isxdigit(charName[6]))) { - unsigned int u; - sscanf(charName + 1, "%x", &u); - if (u <= 0xD7FF || (0xE000 <= u && u <= 0x10FFFF)) { - uBuf[0] = u; - return 1; - } - } - // Not in Adobe Glyph Mapping convention: look for names of the form 'Axx', - // 'xx', 'Ann', 'ABnn', or 'nn', where 'A' and 'B' are any letters, 'xx' is - // two hex digits, and 'nn' is 2-4 decimal digits - if (hex && n == 3 && isalpha(charName[0]) && - isxdigit(charName[1]) && isxdigit(charName[2])) { - sscanf(charName+1, "%x", (unsigned int *)uBuf); - return 1; - } else if (hex && n == 2 && - isxdigit(charName[0]) && isxdigit(charName[1])) { - sscanf(charName, "%x", (unsigned int *)uBuf); - return 1; - } else if (!hex && n >= 2 && n <= 4 && - isdigit(charName[0]) && isdigit(charName[1])) { - uBuf[0] = (Unicode)atoi(charName); - return 1; - } else if (n >= 3 && n <= 5 && - isdigit(charName[1]) && isdigit(charName[2])) { - uBuf[0] = (Unicode)atoi(charName+1); - return 1; - } else if (n >= 4 && n <= 6 && - isdigit(charName[2]) && isdigit(charName[3])) { - uBuf[0] = (Unicode)atoi(charName+2); - return 1; - } - } - // 3.5. otherwise, map the component to the empty string - return 0; -} - -int Gfx8BitFont::getNextChar(char *s, int len, CharCode *code, - Unicode **u, int *uLen, - double *dx, double *dy, double *ox, double *oy) { - CharCode c; - - *code = c = (CharCode)(*s & 0xff); - *uLen = ctu->mapToUnicode(c, u); - *dx = widths[c]; - *dy = *ox = *oy = 0; - return 1; -} - -CharCodeToUnicode *Gfx8BitFont::getToUnicode() { - ctu->incRefCnt(); - return ctu; -} - -Gushort *Gfx8BitFont::getCodeToGIDMap(FoFiTrueType *ff) { - Gushort *map; - int cmapPlatform, cmapEncoding; - int unicodeCmap, macRomanCmap, msSymbolCmap, cmap; - GBool useMacRoman, useUnicode; - char *charName; - Unicode u; - int code, i, n; - - map = (Gushort *)gmallocn(256, sizeof(Gushort)); - for (i = 0; i < 256; ++i) { - map[i] = 0; - } - - // To match up with the Adobe-defined behaviour, we choose a cmap - // like this: - // 1. If the PDF font has an encoding: - // 1a. If the PDF font specified MacRomanEncoding and the - // TrueType font has a Macintosh Roman cmap, use it, and - // reverse map the char names through MacRomanEncoding to - // get char codes. - // 1b. If the TrueType font has a Microsoft Unicode cmap or a - // non-Microsoft Unicode cmap, use it, and use the Unicode - // indexes, not the char codes. - // 1c. If the PDF font is symbolic and the TrueType font has a - // Microsoft Symbol cmap, use it, and use char codes - // directly (possibly with an offset of 0xf000). - // 1d. If the TrueType font has a Macintosh Roman cmap, use it, - // as in case 1a. - // 2. If the PDF font does not have an encoding or the PDF font is - // symbolic: - // 2a. If the TrueType font has a Macintosh Roman cmap, use it, - // and use char codes directly (possibly with an offset of - // 0xf000). - // 2b. If the TrueType font has a Microsoft Symbol cmap, use it, - // and use char codes directly (possible with an offset of - // 0xf000). - // 3. If none of these rules apply, use the first cmap and hope for - // the best (this shouldn't happen). - unicodeCmap = macRomanCmap = msSymbolCmap = -1; - for (i = 0; i < ff->getNumCmaps(); ++i) { - cmapPlatform = ff->getCmapPlatform(i); - cmapEncoding = ff->getCmapEncoding(i); - if ((cmapPlatform == 3 && cmapEncoding == 1) || - cmapPlatform == 0) { - unicodeCmap = i; - } else if (cmapPlatform == 1 && cmapEncoding == 0) { - macRomanCmap = i; - } else if (cmapPlatform == 3 && cmapEncoding == 0) { - msSymbolCmap = i; - } - } - cmap = 0; - useMacRoman = gFalse; - useUnicode = gFalse; - if (hasEncoding || type == fontType1) { - if (usesMacRomanEnc && macRomanCmap >= 0) { - cmap = macRomanCmap; - useMacRoman = gTrue; - } else if (unicodeCmap >= 0) { - cmap = unicodeCmap; - useUnicode = gTrue; - } else if ((flags & fontSymbolic) && msSymbolCmap >= 0) { - cmap = msSymbolCmap; - } else if ((flags & fontSymbolic) && macRomanCmap >= 0) { - cmap = macRomanCmap; - } else if (macRomanCmap >= 0) { - cmap = macRomanCmap; - useMacRoman = gTrue; - } - } else { - if (msSymbolCmap >= 0) { - cmap = msSymbolCmap; - } else if (macRomanCmap >= 0) { - cmap = macRomanCmap; - } - } - - // reverse map the char names through MacRomanEncoding, then map the - // char codes through the cmap - if (useMacRoman) { - for (i = 0; i < 256; ++i) { - if ((charName = enc[i])) { - if ((code = globalParams->getMacRomanCharCode(charName))) { - map[i] = ff->mapCodeToGID(cmap, code); - } - } - } - - // map Unicode through the cmap - } else if (useUnicode) { - Unicode *uAux; - for (i = 0; i < 256; ++i) { - if (((charName = enc[i]) && (u = globalParams->mapNameToUnicode(charName)))) - map[i] = ff->mapCodeToGID(cmap, u); - else - { - n = ctu->mapToUnicode((CharCode)i, &uAux); - if (n > 0) map[i] = ff->mapCodeToGID(cmap, uAux[0]); - } - } - - // map the char codes through the cmap, possibly with an offset of - // 0xf000 - } else { - for (i = 0; i < 256; ++i) { - if (!(map[i] = ff->mapCodeToGID(cmap, i))) { - map[i] = ff->mapCodeToGID(cmap, 0xf000 + i); - } - } - } - - // try the TrueType 'post' table to handle any unmapped characters - for (i = 0; i < 256; ++i) { - if (!map[i] && (charName = enc[i])) { - map[i] = (Gushort)(int)ff->mapNameToGID(charName); - } - } - - return map; -} - -Dict *Gfx8BitFont::getCharProcs() { - return charProcs.isDict() ? charProcs.getDict() : (Dict *)NULL; -} - -Object *Gfx8BitFont::getCharProc(int code, Object *proc) { - if (enc[code] && charProcs.isDict()) { - charProcs.dictLookup(enc[code], proc); - } else { - proc->initNull(); - } - return proc; -} - -Dict *Gfx8BitFont::getResources() { - return resources.isDict() ? resources.getDict() : (Dict *)NULL; -} - -//------------------------------------------------------------------------ -// GfxCIDFont -//------------------------------------------------------------------------ - -static bool cmpWidthExcep(const GfxFontCIDWidthExcep &w1, const GfxFontCIDWidthExcep &w2) { - return w1.first < w2.first; -} - -static bool cmpWidthExcepV(const GfxFontCIDWidthExcepV &w1, const GfxFontCIDWidthExcepV &w2) { - return w1.first < w2.first; -} - -GfxCIDFont::GfxCIDFont(XRef *xref, char *tagA, Ref idA, GooString *nameA, - Dict *fontDict): - GfxFont(tagA, idA, nameA) -{ - Dict *desFontDict; - GooString *collection, *cMapName; - Object desFontDictObj; - Object obj1, obj2, obj3, obj4, obj5, obj6; - CharCodeToUnicode *utu; - CharCode c; - Unicode *uBuf; - int c1, c2; - int excepsSize, i, j, k, n; - - refCnt = 1; - ascent = 0.95; - descent = -0.35; - fontBBox[0] = fontBBox[1] = fontBBox[2] = fontBBox[3] = 0; - cMap = NULL; - cMapName = NULL; - ctu = NULL; - widths.defWidth = 1.0; - widths.defHeight = -1.0; - widths.defVY = 0.880; - widths.exceps = NULL; - widths.nExceps = 0; - widths.excepsV = NULL; - widths.nExcepsV = 0; - cidToGID = NULL; - cidToGIDLen = 0; - - // get the descendant font - if (!fontDict->lookup("DescendantFonts", &obj1)->isArray()) { - error(-1, "Missing DescendantFonts entry in Type 0 font"); - obj1.free(); - goto err1; - } - if (!obj1.arrayGet(0, &desFontDictObj)->isDict()) { - error(-1, "Bad descendant font in Type 0 font"); - goto err3; - } - obj1.free(); - desFontDict = desFontDictObj.getDict(); - - // font type - if (!desFontDict->lookup("Subtype", &obj1)) { - error(-1, "Missing Subtype entry in Type 0 descendant font"); - goto err3; - } - if (obj1.isName("CIDFontType0")) { - type = fontCIDType0; - } else if (obj1.isName("CIDFontType2")) { - type = fontCIDType2; - } else { - error(-1, "Unknown Type 0 descendant font type '%s'", - obj1.isName() ? obj1.getName() : "???"); - goto err3; - } - obj1.free(); - - // get info from font descriptor - readFontDescriptor(xref, desFontDict); - - // look for an external font file - findExtFontFile(); - - //----- encoding info ----- - - // char collection - if (!desFontDict->lookup("CIDSystemInfo", &obj1)->isDict()) { - error(-1, "Missing CIDSystemInfo dictionary in Type 0 descendant font"); - goto err3; - } - obj1.dictLookup("Registry", &obj2); - obj1.dictLookup("Ordering", &obj3); - if (!obj2.isString() || !obj3.isString()) { - error(-1, "Invalid CIDSystemInfo dictionary in Type 0 descendant font"); - goto err4; - } - collection = obj2.getString()->copy()->append('-')->append(obj3.getString()); - obj3.free(); - obj2.free(); - obj1.free(); - - // look for a ToUnicode CMap - if (!(ctu = readToUnicodeCMap(fontDict, 16, NULL))) { - - // the "Adobe-Identity" and "Adobe-UCS" collections don't have - // cidToUnicode files - if (collection->cmp("Adobe-Identity") && - collection->cmp("Adobe-UCS")) { - - // look for a user-supplied .cidToUnicode file - if (!(ctu = globalParams->getCIDToUnicode(collection))) { - // I'm not completely sure that this is the best thing to do - // but it seems to produce better results when the .cidToUnicode - // files from the poppler-data package are missing. At least - // we know that assuming the Identity mapping is definitely wrong. - // -- jrmuizel - static const char * knownCollections [] = { - "Adobe-CNS1", - "Adobe-GB1", - "Adobe-Japan1", - "Adobe-Japan2", - "Adobe-Korea1", - }; - for (size_t i = 0; i < sizeof(knownCollections)/sizeof(knownCollections[0]); i++) { - if (collection->cmp(knownCollections[i]) == 0) { - error(-1, "Missing language pack for '%s' mapping", collection->getCString()); - delete collection; - goto err2; - } - } - error(-1, "Unknown character collection '%s'", - collection->getCString()); - // fall-through, assuming the Identity mapping -- this appears - // to match Adobe's behavior - } - } - } - - // look for a Unicode-to-Unicode mapping - if (name && (utu = globalParams->getUnicodeToUnicode(name))) { - if (ctu) { - for (c = 0; c < ctu->getLength(); ++c) { - n = ctu->mapToUnicode(c, &uBuf); - if (n >= 1) { - n = utu->mapToUnicode((CharCode)uBuf[0], &uBuf); - if (n >= 1) { - ctu->setMapping(c, uBuf, n); - } - } - } - utu->decRefCnt(); - } else { - ctu = utu; - } - } - - // encoding (i.e., CMap) - //~ also need to deal with the UseCMap entry in the stream dict - if (!fontDict->lookup("Encoding", &obj1)->isName()) { - GBool success = gFalse; - if (obj1.isStream()) { - Object objName; - Stream *s = obj1.getStream(); - s->getDict()->lookup("CMapName", &objName); - if (objName.isName()) - { - cMapName = new GooString(objName.getName()); - cMap = globalParams->getCMap(collection, cMapName, s); - success = gTrue; - } - objName.free(); - } - - if (!success) { - error(-1, "Missing or invalid Encoding entry in Type 0 font"); - delete collection; - goto err3; - } - } else { - cMapName = new GooString(obj1.getName()); - cMap = globalParams->getCMap(collection, cMapName); - } - if (!cMap) { - error(-1, "Unknown CMap '%s' for character collection '%s'", - cMapName->getCString(), collection->getCString()); - delete collection; - delete cMapName; - goto err2; - } - delete collection; - delete cMapName; - obj1.free(); - - // CIDToGIDMap (for embedded TrueType fonts) - if (type == fontCIDType2 || type == fontCIDType2OT) { - desFontDict->lookup("CIDToGIDMap", &obj1); - if (obj1.isStream()) { - cidToGIDLen = 0; - i = 64; - cidToGID = (Gushort *)gmallocn(i, sizeof(Gushort)); - obj1.streamReset(); - while ((c1 = obj1.streamGetChar()) != EOF && - (c2 = obj1.streamGetChar()) != EOF) { - if (cidToGIDLen == i) { - i *= 2; - cidToGID = (Gushort *)greallocn(cidToGID, i, sizeof(Gushort)); - } - cidToGID[cidToGIDLen++] = (Gushort)((c1 << 8) + c2); - } - } else if (!obj1.isName("Identity") && !obj1.isNull()) { - error(-1, "Invalid CIDToGIDMap entry in CID font"); - } - obj1.free(); - } - - //----- character metrics ----- - - // default char width - if (desFontDict->lookup("DW", &obj1)->isInt()) { - widths.defWidth = obj1.getInt() * 0.001; - } - obj1.free(); - - // char width exceptions - if (desFontDict->lookup("W", &obj1)->isArray()) { - excepsSize = 0; - i = 0; - while (i + 1 < obj1.arrayGetLength()) { - obj1.arrayGet(i, &obj2); - obj1.arrayGet(i + 1, &obj3); - if (obj2.isInt() && obj3.isInt() && i + 2 < obj1.arrayGetLength()) { - if (obj1.arrayGet(i + 2, &obj4)->isNum()) { - if (widths.nExceps == excepsSize) { - excepsSize += 16; - widths.exceps = (GfxFontCIDWidthExcep *) - greallocn(widths.exceps, - excepsSize, sizeof(GfxFontCIDWidthExcep)); - } - widths.exceps[widths.nExceps].first = obj2.getInt(); - widths.exceps[widths.nExceps].last = obj3.getInt(); - widths.exceps[widths.nExceps].width = obj4.getNum() * 0.001; - ++widths.nExceps; - } else { - error(-1, "Bad widths array in Type 0 font"); - } - obj4.free(); - i += 3; - } else if (obj2.isInt() && obj3.isArray()) { - if (widths.nExceps + obj3.arrayGetLength() > excepsSize) { - excepsSize = (widths.nExceps + obj3.arrayGetLength() + 15) & ~15; - widths.exceps = (GfxFontCIDWidthExcep *) - greallocn(widths.exceps, - excepsSize, sizeof(GfxFontCIDWidthExcep)); - } - j = obj2.getInt(); - for (k = 0; k < obj3.arrayGetLength(); ++k) { - if (obj3.arrayGet(k, &obj4)->isNum()) { - widths.exceps[widths.nExceps].first = j; - widths.exceps[widths.nExceps].last = j; - widths.exceps[widths.nExceps].width = obj4.getNum() * 0.001; - ++j; - ++widths.nExceps; - } else { - error(-1, "Bad widths array in Type 0 font"); - } - obj4.free(); - } - i += 2; - } else { - error(-1, "Bad widths array in Type 0 font"); - ++i; - } - obj3.free(); - obj2.free(); - } - std::sort(widths.exceps, widths.exceps + widths.nExceps, &cmpWidthExcep); - } - obj1.free(); - - // default metrics for vertical font - if (desFontDict->lookup("DW2", &obj1)->isArray() && - obj1.arrayGetLength() == 2) { - if (obj1.arrayGet(0, &obj2)->isNum()) { - widths.defVY = obj2.getNum() * 0.001; - } - obj2.free(); - if (obj1.arrayGet(1, &obj2)->isNum()) { - widths.defHeight = obj2.getNum() * 0.001; - } - obj2.free(); - } - obj1.free(); - - // char metric exceptions for vertical font - if (desFontDict->lookup("W2", &obj1)->isArray()) { - excepsSize = 0; - i = 0; - while (i + 1 < obj1.arrayGetLength()) { - obj1.arrayGet(i, &obj2); - obj1.arrayGet(i+ 1, &obj3); - if (obj2.isInt() && obj3.isInt() && i + 4 < obj1.arrayGetLength()) { - if (obj1.arrayGet(i + 2, &obj4)->isNum() && - obj1.arrayGet(i + 3, &obj5)->isNum() && - obj1.arrayGet(i + 4, &obj6)->isNum()) { - if (widths.nExcepsV == excepsSize) { - excepsSize += 16; - widths.excepsV = (GfxFontCIDWidthExcepV *) - greallocn(widths.excepsV, - excepsSize, sizeof(GfxFontCIDWidthExcepV)); - } - widths.excepsV[widths.nExcepsV].first = obj2.getInt(); - widths.excepsV[widths.nExcepsV].last = obj3.getInt(); - widths.excepsV[widths.nExcepsV].height = obj4.getNum() * 0.001; - widths.excepsV[widths.nExcepsV].vx = obj5.getNum() * 0.001; - widths.excepsV[widths.nExcepsV].vy = obj6.getNum() * 0.001; - ++widths.nExcepsV; - } else { - error(-1, "Bad widths (W2) array in Type 0 font"); - } - obj6.free(); - obj5.free(); - obj4.free(); - i += 5; - } else if (obj2.isInt() && obj3.isArray()) { - if (widths.nExcepsV + obj3.arrayGetLength() / 3 > excepsSize) { - excepsSize = - (widths.nExcepsV + obj3.arrayGetLength() / 3 + 15) & ~15; - widths.excepsV = (GfxFontCIDWidthExcepV *) - greallocn(widths.excepsV, - excepsSize, sizeof(GfxFontCIDWidthExcepV)); - } - j = obj2.getInt(); - for (k = 0; k < obj3.arrayGetLength(); k += 3) { - if (obj3.arrayGet(k, &obj4)->isNum() && - obj3.arrayGet(k+1, &obj5)->isNum() && - obj3.arrayGet(k+2, &obj6)->isNum()) { - widths.excepsV[widths.nExcepsV].first = j; - widths.excepsV[widths.nExcepsV].last = j; - widths.excepsV[widths.nExcepsV].height = obj4.getNum() * 0.001; - widths.excepsV[widths.nExcepsV].vx = obj5.getNum() * 0.001; - widths.excepsV[widths.nExcepsV].vy = obj6.getNum() * 0.001; - ++j; - ++widths.nExcepsV; - } else { - error(-1, "Bad widths (W2) array in Type 0 font"); - } - obj6.free(); - obj5.free(); - obj4.free(); - } - i += 2; - } else { - error(-1, "Bad widths (W2) array in Type 0 font"); - ++i; - } - obj3.free(); - obj2.free(); - } - std::sort(widths.excepsV, widths.excepsV + widths.nExcepsV, &cmpWidthExcepV); - } - obj1.free(); - - desFontDictObj.free(); - ok = gTrue; - return; - - err4: - obj3.free(); - obj2.free(); - err3: - obj1.free(); - err2: - desFontDictObj.free(); - err1:; -} - -GfxCIDFont::~GfxCIDFont() { - if (cMap) { - cMap->decRefCnt(); - } - if (ctu) { - ctu->decRefCnt(); - } - gfree(widths.exceps); - gfree(widths.excepsV); - if (cidToGID) { - gfree(cidToGID); - } -} - -int GfxCIDFont::getNextChar(char *s, int len, CharCode *code, - Unicode **u, int *uLen, - double *dx, double *dy, double *ox, double *oy) { - CID cid; - double w, h, vx, vy; - int n, a, b, m; - - if (!cMap) { - *code = 0; - *uLen = 0; - *dx = *dy = 0; - return 1; - } - - *code = (CharCode)(cid = cMap->getCID(s, len, &n)); - if (ctu) { - if (hasToUnicode) { - int i = 0, c = 0; - while (i < n) { - c = (c << 8 ) + (s[i] & 0xff); - ++i; - } - *uLen = ctu->mapToUnicode(c, u); - } else { - *uLen = ctu->mapToUnicode(cid, u); - } - } else { - *uLen = 0; - } - - // horizontal - if (cMap->getWMode() == 0) { - w = widths.defWidth; - h = vx = vy = 0; - if (widths.nExceps > 0 && cid >= widths.exceps[0].first) { - a = 0; - b = widths.nExceps; - // invariant: widths.exceps[a].first <= cid < widths.exceps[b].first - while (b - a > 1) { - m = (a + b) / 2; - if (widths.exceps[m].first <= cid) { - a = m; - } else { - b = m; - } - } - if (cid <= widths.exceps[a].last) { - w = widths.exceps[a].width; - } - } - - // vertical - } else { - w = 0; - h = widths.defHeight; - vx = widths.defWidth / 2; - vy = widths.defVY; - if (widths.nExcepsV > 0 && cid >= widths.excepsV[0].first) { - a = 0; - b = widths.nExcepsV; - // invariant: widths.excepsV[a].first <= cid < widths.excepsV[b].first - while (b - a > 1) { - m = (a + b) / 2; - if (widths.excepsV[m].last <= cid) { - a = m; - } else { - b = m; - } - } - if (cid <= widths.excepsV[a].last) { - h = widths.excepsV[a].height; - vx = widths.excepsV[a].vx; - vy = widths.excepsV[a].vy; - } - } - } - - *dx = w; - *dy = h; - *ox = vx; - *oy = vy; - - return n; -} - -int GfxCIDFont::getWMode() { - return cMap ? cMap->getWMode() : 0; -} - -CharCodeToUnicode *GfxCIDFont::getToUnicode() { - if (ctu) { - ctu->incRefCnt(); - } - return ctu; -} - -GooString *GfxCIDFont::getCollection() { - return cMap ? cMap->getCollection() : (GooString *)NULL; -} - -Gushort GfxCIDFont::mapCodeToGID(FoFiTrueType *ff, int cmapi, - Unicode unicode, GBool wmode) { - Gushort gid = ff->mapCodeToGID(cmapi,unicode); - if (wmode) { - Gushort vgid = ff->mapToVertGID(gid); - if (vgid != 0) gid = vgid; - } - return gid; -} - -Gushort *GfxCIDFont::getCodeToGIDMap(FoFiTrueType *ff, int *mapsizep) { -#define N_UCS_CANDIDATES 2 - /* space characters */ - static const unsigned long spaces[] = { - 0x2000,0x2001,0x2002,0x2003,0x2004,0x2005,0x2006,0x2007, - 0x2008,0x2009,0x200A,0x00A0,0x200B,0x2060,0x3000,0xFEFF, - 0 - }; - static char *adobe_cns1_cmaps[] = { - "UniCNS-UTF32-V", - "UniCNS-UCS2-V", - "UniCNS-UTF32-H", - "UniCNS-UCS2-H", - 0 - }; - static char *adobe_gb1_cmaps[] = { - "UniGB-UTF32-V", - "UniGB-UCS2-V", - "UniGB-UTF32-H", - "UniGB-UCS2-H", - 0 - }; - static char *adobe_japan1_cmaps[] = { - "UniJIS-UTF32-V", - "UniJIS-UCS2-V", - "UniJIS-UTF32-H", - "UniJIS-UCS2-H", - 0 - }; - static char *adobe_japan2_cmaps[] = { - "UniHojo-UTF32-V", - "UniHojo-UCS2-V", - "UniHojo-UTF32-H", - "UniHojo-UCS2-H", - 0 - }; - static char *adobe_korea1_cmaps[] = { - "UniKS-UTF32-V", - "UniKS-UCS2-V", - "UniKS-UTF32-H", - "UniKS-UCS2-H", - 0 - }; - static struct CMapListEntry { - char *collection; - char *scriptTag; - char *toUnicodeMap; - char **CMaps; - } CMapList[] = { - { - "Adobe-CNS1", - "kana", - "Adobe-CNS1-UCS2", - adobe_cns1_cmaps, - }, - { - "Adobe-GB1", - "kana", - "Adobe-GB1-UCS2", - adobe_gb1_cmaps, - }, - { - "Adobe-Japan1", - "kana", - "Adobe-Japan1-UCS2", - adobe_japan1_cmaps, - }, - { - "Adobe-Japan2", - "kana", - "Adobe-Japan2-UCS2", - adobe_japan2_cmaps, - }, - { - "Adobe-Korea1", - "kana", - "Adobe-Korea1-UCS2", - adobe_korea1_cmaps, - }, - {0, 0, 0, 0} - }; - Unicode *humap = 0; - Unicode *vumap = 0; - Unicode *tumap = 0; - Gushort *codeToGID = 0; - unsigned long n; - int i; - unsigned long code; - int wmode; - char **cmapName; - CMap *cMap; - CMapListEntry *lp; - int cmap; - int cmapPlatform, cmapEncoding; - Ref embID; - - *mapsizep = 0; - if (!ctu) return NULL; - if (getCollection()->cmp("Adobe-Identity") == 0) return NULL; - if (getEmbeddedFontID(&embID)) { - /* if this font is embedded font, - * CIDToGIDMap should be embedded in PDF file - * and already set. So return it. - */ - *mapsizep = getCIDToGIDLen(); - return getCIDToGID(); - } - - /* we use only unicode cmap */ - cmap = -1; - for (i = 0; i < ff->getNumCmaps(); ++i) { - cmapPlatform = ff->getCmapPlatform(i); - cmapEncoding = ff->getCmapEncoding(i); - if (cmapPlatform == 3 && cmapEncoding == 10) { - /* UCS-4 */ - cmap = i; - /* use UCS-4 cmap */ - break; - } else if (cmapPlatform == 3 && cmapEncoding == 1) { - /* Unicode */ - cmap = i; - } else if (cmapPlatform == 0 && cmap < 0) { - cmap = i; - } - } - if (cmap < 0) - return NULL; - - wmode = getWMode(); - for (lp = CMapList;lp->collection != 0;lp++) { - if (strcmp(lp->collection,getCollection()->getCString()) == 0) { - break; - } - } - n = 65536; - tumap = new Unicode[n]; - humap = new Unicode[n*N_UCS_CANDIDATES]; - memset(humap,0,sizeof(Unicode)*n*N_UCS_CANDIDATES); - if (lp->collection != 0) { - CharCodeToUnicode *tctu; - GooString tname(lp->toUnicodeMap); - - if ((tctu = CharCodeToUnicode::parseCMapFromFile(&tname,16)) != 0) { - CharCode cid; - for (cid = 0;cid < n ;cid++) { - int len; - Unicode *ucodes; - - len = tctu->mapToUnicode(cid,&ucodes); - if (len == 1) { - tumap[cid] = ucodes[0]; - } else { - /* if not single character, ignore it */ - tumap[cid] = 0; - } - } - delete tctu; - } - vumap = new Unicode[n]; - memset(vumap,0,sizeof(Unicode)*n); - for (cmapName = lp->CMaps;*cmapName != 0;cmapName++) { - GooString cname(*cmapName); - - if ((cMap = globalParams->getCMap(getCollection(),&cname)) - != 0) { - if (cMap->getWMode()) { - cMap->setReverseMap(vumap,n,1); - } else { - cMap->setReverseMap(humap,n,N_UCS_CANDIDATES); - } - cMap->decRefCnt(); - } - } - ff->setupGSUB(lp->scriptTag); - } else { - error(-1,"Unknown character collection %s\n", - getCollection()->getCString()); - if ((ctu = getToUnicode()) != 0) { - CharCode cid; - for (cid = 0;cid < n ;cid++) { - Unicode *ucode; - - if (ctu->mapToUnicode(cid, &ucode)) - humap[cid*N_UCS_CANDIDATES] = ucode[0]; - else - humap[cid*N_UCS_CANDIDATES] = 0; - for (i = 1;i < N_UCS_CANDIDATES;i++) { - humap[cid*N_UCS_CANDIDATES+i] = 0; - } - } - ctu->decRefCnt(); - } - } - // map CID -> Unicode -> GID - codeToGID = (Gushort *)gmallocn(n, sizeof(Gushort)); - for (code = 0; code < n; ++code) { - Unicode unicode; - unsigned long gid; - - unicode = 0; - gid = 0; - if (humap != 0) { - for (i = 0;i < N_UCS_CANDIDATES - && gid == 0 && (unicode = humap[code*N_UCS_CANDIDATES+i]) != 0;i++) { - gid = mapCodeToGID(ff,cmap,unicode,gFalse); - } - } - if (gid == 0 && vumap != 0) { - unicode = vumap[code]; - if (unicode != 0) { - gid = mapCodeToGID(ff,cmap,unicode,gTrue); - if (gid == 0 && tumap != 0) { - if ((unicode = tumap[code]) != 0) { - gid = mapCodeToGID(ff,cmap,unicode,gTrue); - } - } - } - } - if (gid == 0 && tumap != 0) { - if ((unicode = tumap[code]) != 0) { - gid = mapCodeToGID(ff,cmap,unicode,gFalse); - } - } - if (gid == 0) { - /* special handling space characters */ - const unsigned long *p; - - if (humap != 0) unicode = humap[code]; - if (unicode != 0) { - /* check if code is space character , so map code to 0x0020 */ - for (p = spaces;*p != 0;p++) { - if (*p == unicode) { - unicode = 0x20; - gid = mapCodeToGID(ff,cmap,unicode,wmode); - break; - } - } - } - } - codeToGID[code] = gid; - } - *mapsizep = n; - if (humap != 0) delete[] humap; - if (tumap != 0) delete[] tumap; - if (vumap != 0) delete[] vumap; - return codeToGID; -} - -double GfxCIDFont::getWidth (char* s, int len) { - int nUsed; - double w; - int a, b, m; - - CID cid = cMap->getCID(s, len, &nUsed); - - w = widths.defWidth; - if (widths.nExceps > 0 && cid >= widths.exceps[0].first) { - a = 0; - b = widths.nExceps; - // invariant: widths.exceps[a].first <= cid < widths.exceps[b].first - while (b - a > 1) { - m = (a + b) / 2; - if (widths.exceps[m].first <= cid) { - a = m; - } else { - b = m; - } - } - if (cid <= widths.exceps[a].last) { - w = widths.exceps[a].width; - } - } - return w; -} - -//------------------------------------------------------------------------ -// GfxFontDict -//------------------------------------------------------------------------ - -GfxFontDict::GfxFontDict(XRef *xref, Ref *fontDictRef, Dict *fontDict) { - int i; - Object obj1, obj2; - Ref r; - - numFonts = fontDict->getLength(); - fonts = (GfxFont **)gmallocn(numFonts, sizeof(GfxFont *)); - for (i = 0; i < numFonts; ++i) { - fontDict->getValNF(i, &obj1); - obj1.fetch(xref, &obj2); - if (obj2.isDict()) { - if (obj1.isRef()) { - r = obj1.getRef(); - } else { - // no indirect reference for this font, so invent a unique one - // (legal generation numbers are five digits, so any 6-digit - // number would be safe) - r.num = i; - if (fontDictRef) { - r.gen = 100000 + fontDictRef->num; - } else { - r.gen = 999999; - } - } - fonts[i] = GfxFont::makeFont(xref, fontDict->getKey(i), - r, obj2.getDict()); - if (fonts[i] && !fonts[i]->isOk()) { - // XXX: it may be meaningful to distinguish between - // NULL and !isOk() so that when we do lookups - // we can tell the difference between a missing font - // and a font that is just !isOk() - fonts[i]->decRefCnt(); - fonts[i] = NULL; - } - } else { - error(-1, "font resource is not a dictionary"); - fonts[i] = NULL; - } - obj1.free(); - obj2.free(); - } -} - -GfxFontDict::~GfxFontDict() { - int i; - - for (i = 0; i < numFonts; ++i) { - if (fonts[i]) { - fonts[i]->decRefCnt(); - } - } - gfree(fonts); -} - -GfxFont *GfxFontDict::lookup(char *tag) { - int i; - - for (i = 0; i < numFonts; ++i) { - if (fonts[i] && fonts[i]->matches(tag)) { - return fonts[i]; - } - } - return NULL; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxFont.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxFont.h deleted file mode 100644 index fe4f7ea5027..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxFont.h +++ /dev/null @@ -1,397 +0,0 @@ -//======================================================================== -// -// GfxFont.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005, 2008 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> -// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2007 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2007 Koji Otani <sho@bbr.jp> -// Copyright (C) 2011 Axel Strübing <axel.struebing@freenet.de> -// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef GFXFONT_H -#define GFXFONT_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include "goo/GooString.h" -#include "Object.h" -#include "CharTypes.h" - -class Dict; -class CMap; -class CharCodeToUnicode; -class FoFiTrueType; -class DisplayFontParam; -struct GfxFontCIDWidths; - -//------------------------------------------------------------------------ -// GfxFontType -//------------------------------------------------------------------------ - -enum GfxFontType { - //----- Gfx8BitFont - fontUnknownType, - fontType1, - fontType1C, - fontType1COT, - fontType3, - fontTrueType, - fontTrueTypeOT, - //----- GfxCIDFont - fontCIDType0, - fontCIDType0C, - fontCIDType0COT, - fontCIDType2, - fontCIDType2OT -}; - -//------------------------------------------------------------------------ -// GfxFontCIDWidths -//------------------------------------------------------------------------ - -struct GfxFontCIDWidthExcep { - CID first; // this record applies to - CID last; // CIDs <first>..<last> - double width; // char width -}; - -struct GfxFontCIDWidthExcepV { - CID first; // this record applies to - CID last; // CIDs <first>..<last> - double height; // char height - double vx, vy; // origin position -}; - -struct GfxFontCIDWidths { - double defWidth; // default char width - double defHeight; // default char height - double defVY; // default origin position - GfxFontCIDWidthExcep *exceps; // exceptions - int nExceps; // number of valid entries in exceps - GfxFontCIDWidthExcepV * // exceptions for vertical font - excepsV; - int nExcepsV; // number of valid entries in excepsV -}; - -//------------------------------------------------------------------------ -// GfxFont -//------------------------------------------------------------------------ - -#define fontFixedWidth (1 << 0) -#define fontSerif (1 << 1) -#define fontSymbolic (1 << 2) -#define fontItalic (1 << 6) -#define fontBold (1 << 18) - -class GfxFont { -public: - - enum Stretch { - StretchNotDefined, - UltraCondensed, - ExtraCondensed, - Condensed, - SemiCondensed, - Normal, - SemiExpanded, - Expanded, - ExtraExpanded, - UltraExpanded }; - - enum Weight { - WeightNotDefined, - W100, - W200, - W300, - W400, // Normal - W500, - W600, - W700, // Bold - W800, - W900 }; - - // Build a GfxFont object. - static GfxFont *makeFont(XRef *xref, char *tagA, Ref idA, Dict *fontDict); - - GfxFont(char *tagA, Ref idA, GooString *nameA); - - GBool isOk() { return ok; } - - void incRefCnt(); - void decRefCnt(); - - // Get font tag. - GooString *getTag() { return tag; } - - // Get font dictionary ID. - Ref *getID() { return &id; } - - // Does this font match the tag? - GBool matches(char *tagA) { return !tag->cmp(tagA); } - - // Get base font name. - GooString *getName() { return name; } - - // Get font family name. - GooString *getFamily() { return family; } - - // Get font stretch. - Stretch getStretch() { return stretch; } - - // Get font weight. - Weight getWeight() { return weight; } - - // Get the original font name (ignornig any munging that might have - // been done to map to a canonical Base-14 font name). - GooString *getOrigName() { return origName; } - - // Get font type. - GfxFontType getType() { return type; } - virtual GBool isCIDFont() { return gFalse; } - - // Get embedded font ID, i.e., a ref for the font file stream. - // Returns false if there is no embedded font. - GBool getEmbeddedFontID(Ref *embID) - { *embID = embFontID; return embFontID.num >= 0; } - - // Get the PostScript font name for the embedded font. Returns - // NULL if there is no embedded font. - GooString *getEmbeddedFontName() { return embFontName; } - - // Get the name of the external font file. Returns NULL if there - // is no external font file. - GooString *getExtFontFile() { return extFontFile; } - - // Get font descriptor flags. - int getFlags() { return flags; } - GBool isFixedWidth() { return flags & fontFixedWidth; } - GBool isSerif() { return flags & fontSerif; } - GBool isSymbolic() { return flags & fontSymbolic; } - GBool isItalic() { return flags & fontItalic; } - GBool isBold() { return flags & fontBold; } - - // Return the Unicode map. - virtual CharCodeToUnicode *getToUnicode() = 0; - - // Return the font matrix. - double *getFontMatrix() { return fontMat; } - - // Return the font bounding box. - double *getFontBBox() { return fontBBox; } - - // Return the ascent and descent values. - double getAscent() { return ascent; } - double getDescent() { return descent; } - - // Return the writing mode (0=horizontal, 1=vertical). - virtual int getWMode() { return 0; } - - // Read an external or embedded font file into a buffer. - char *readExtFontFile(int *len); - char *readEmbFontFile(XRef *xref, int *len); - - // Get the next char from a string <s> of <len> bytes, returning the - // char <code>, its Unicode mapping <u>, its displacement vector - // (<dx>, <dy>), and its origin offset vector (<ox>, <oy>). <uSize> - // is the number of entries available in <u>, and <uLen> is set to - // the number actually used. Returns the number of bytes used by - // the char code. - virtual int getNextChar(char *s, int len, CharCode *code, - Unicode **u, int *uLen, - double *dx, double *dy, double *ox, double *oy) = 0; - - // Does this font have a toUnicode map? - GBool hasToUnicodeCMap() { return hasToUnicode; } - - /* XXX: dfp shouldn't be public, however the font finding code is currently in - * GlobalParams. Instead it should be inside the GfxFont class. However, - * getDisplayFont currently uses FCcfg so moving it is not as simple. */ - /* XXX: related to this is the fact that all of the extFontFile stuff is dead */ - DisplayFontParam *dfp; -protected: - - virtual ~GfxFont(); - - void readFontDescriptor(XRef *xref, Dict *fontDict); - CharCodeToUnicode *readToUnicodeCMap(Dict *fontDict, int nBits, - CharCodeToUnicode *ctu); - void findExtFontFile(); - - GooString *tag; // PDF font tag - Ref id; // reference (used as unique ID) - GooString *name; // font name - GooString *family; // font family - Stretch stretch; // font stretch - Weight weight; // font weight - GooString *origName; // original font name - GfxFontType type; // type of font - int flags; // font descriptor flags - GooString *embFontName; // name of embedded font - Ref embFontID; // ref to embedded font file stream - GooString *extFontFile; // external font file name - double fontMat[6]; // font matrix (Type 3 only) - double fontBBox[4]; // font bounding box (Type 3 only) - double missingWidth; // "default" width - double ascent; // max height above baseline - double descent; // max depth below baseline - int refCnt; - GBool ok; - GBool hasToUnicode; -}; - -//------------------------------------------------------------------------ -// Gfx8BitFont -//------------------------------------------------------------------------ - -class Gfx8BitFont: public GfxFont { -public: - - Gfx8BitFont(XRef *xref, char *tagA, Ref idA, GooString *nameA, - GfxFontType typeA, Dict *fontDict); - - virtual int getNextChar(char *s, int len, CharCode *code, - Unicode **u, int *uLen, - double *dx, double *dy, double *ox, double *oy); - - // Return the encoding. - char **getEncoding() { return enc; } - - // Return the Unicode map. - CharCodeToUnicode *getToUnicode(); - - // Return the character name associated with <code>. - char *getCharName(int code) { return enc[code]; } - - // Returns true if the PDF font specified an encoding. - GBool getHasEncoding() { return hasEncoding; } - - // Returns true if the PDF font specified MacRomanEncoding. - GBool getUsesMacRomanEnc() { return usesMacRomanEnc; } - - // Get width of a character. - double getWidth(Guchar c) { return widths[c]; } - - // Return a char code-to-GID mapping for the provided font file. - // (This is only useful for TrueType fonts.) - Gushort *getCodeToGIDMap(FoFiTrueType *ff); - - // Return the Type 3 CharProc dictionary, or NULL if none. - Dict *getCharProcs(); - - // Return the Type 3 CharProc for the character associated with <code>. - Object *getCharProc(int code, Object *proc); - - // Return the Type 3 Resources dictionary, or NULL if none. - Dict *getResources(); - -private: - virtual ~Gfx8BitFont(); - - char *enc[256]; // char code --> char name - char encFree[256]; // boolean for each char name: if set, - // the string is malloc'ed - CharCodeToUnicode *ctu; // char code --> Unicode - GBool hasEncoding; - GBool usesMacRomanEnc; - double widths[256]; // character widths - Object charProcs; // Type 3 CharProcs dictionary - Object resources; // Type 3 Resources dictionary -}; - -//------------------------------------------------------------------------ -// GfxCIDFont -//------------------------------------------------------------------------ - -class GfxCIDFont: public GfxFont { -public: - - GfxCIDFont(XRef *xref, char *tagA, Ref idA, GooString *nameA, - Dict *fontDict); - - virtual GBool isCIDFont() { return gTrue; } - - virtual int getNextChar(char *s, int len, CharCode *code, - Unicode **u, int *uLen, - double *dx, double *dy, double *ox, double *oy); - - // Return the writing mode (0=horizontal, 1=vertical). - virtual int getWMode(); - - // Return the Unicode map. - CharCodeToUnicode *getToUnicode(); - - // Get the collection name (<registry>-<ordering>). - GooString *getCollection(); - - // Return the CID-to-GID mapping table. These should only be called - // if type is fontCIDType2. - Gushort *getCIDToGID() { return cidToGID; } - int getCIDToGIDLen() { return cidToGIDLen; } - - Gushort *getCodeToGIDMap(FoFiTrueType *ff, int *length); - - double getWidth(char* s, int len); - -private: - virtual ~GfxCIDFont(); - - Gushort mapCodeToGID(FoFiTrueType *ff, int cmapi, - Unicode unicode, GBool wmode); - - CMap *cMap; // char code --> CID - CharCodeToUnicode *ctu; // CID --> Unicode - GfxFontCIDWidths widths; // character widths - Gushort *cidToGID; // CID --> GID mapping (for embedded - // TrueType fonts) - int cidToGIDLen; -}; - -//------------------------------------------------------------------------ -// GfxFontDict -//------------------------------------------------------------------------ - -class GfxFontDict { -public: - - // Build the font dictionary, given the PDF font dictionary. - GfxFontDict(XRef *xref, Ref *fontDictRef, Dict *fontDict); - - // Destructor. - ~GfxFontDict(); - - // Get the specified font. - GfxFont *lookup(char *tag); - - // Iterative access. - int getNumFonts() { return numFonts; } - GfxFont *getFont(int i) { return fonts[i]; } - -private: - - GfxFont **fonts; // list of fonts - int numFonts; // number of fonts -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxState.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxState.cc deleted file mode 100644 index 78951c316a2..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxState.cc +++ /dev/null @@ -1,5907 +0,0 @@ -//======================================================================== -// -// GfxState.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2006, 2007 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2006, 2010 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2006-2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009 Koji Otani <sho@bbr.jp> -// Copyright (C) 2009, 2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// Copyright (C) 2009 Christian Persch <chpe@gnome.org> -// Copyright (C) 2010 PaweÅ‚ Wiejacha <pawel.wiejacha@gmail.com> -// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> -// Copyright (C) 2011 Andrea Canciani <ranma42@gmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <algorithm> -#include <stddef.h> -#include <math.h> -#include <string.h> -#include "goo/gmem.h" -#include "Error.h" -#include "Object.h" -#include "Array.h" -#include "Page.h" -#include "Gfx.h" -#include "GfxState.h" -#include "GfxState_helpers.h" -#include "GfxFont.h" -#include "GlobalParams.h" -#include "PopplerCache.h" - -//------------------------------------------------------------------------ - -GBool Matrix::invertTo(Matrix *other) const -{ - double det; - - det = 1 / determinant(); - other->m[0] = m[3] * det; - other->m[1] = -m[1] * det; - other->m[2] = -m[2] * det; - other->m[3] = m[0] * det; - other->m[4] = (m[2] * m[5] - m[3] * m[4]) * det; - other->m[5] = (m[1] * m[4] - m[0] * m[5]) * det; - - return gTrue; -} - -void Matrix::transform(double x, double y, double *tx, double *ty) const -{ - double temp_x, temp_y; - - temp_x = m[0] * x + m[2] * y + m[4]; - temp_y = m[1] * x + m[3] * y + m[5]; - - *tx = temp_x; - *ty = temp_y; -} - -// Matrix norm, taken from _cairo_matrix_transformed_circle_major_axis -double Matrix::norm() const -{ - double f, g, h, i, j; - - i = m[0]*m[0] + m[1]*m[1]; - j = m[2]*m[2] + m[3]*m[3]; - - f = 0.5 * (i + j); - g = 0.5 * (i - j); - h = m[0]*m[2] + m[1]*m[3]; - - return sqrt (f + hypot (g, h)); -} - -//------------------------------------------------------------------------ - -struct GfxBlendModeInfo { - char *name; - GfxBlendMode mode; -}; - -static const GfxBlendModeInfo gfxBlendModeNames[] = { - { "Normal", gfxBlendNormal }, - { "Compatible", gfxBlendNormal }, - { "Multiply", gfxBlendMultiply }, - { "Screen", gfxBlendScreen }, - { "Overlay", gfxBlendOverlay }, - { "Darken", gfxBlendDarken }, - { "Lighten", gfxBlendLighten }, - { "ColorDodge", gfxBlendColorDodge }, - { "ColorBurn", gfxBlendColorBurn }, - { "HardLight", gfxBlendHardLight }, - { "SoftLight", gfxBlendSoftLight }, - { "Difference", gfxBlendDifference }, - { "Exclusion", gfxBlendExclusion }, - { "Hue", gfxBlendHue }, - { "Saturation", gfxBlendSaturation }, - { "Color", gfxBlendColor }, - { "Luminosity", gfxBlendLuminosity } -}; - -#define nGfxBlendModeNames \ - ((int)((sizeof(gfxBlendModeNames) / sizeof(GfxBlendModeInfo)))) - -//------------------------------------------------------------------------ -// -// NB: This must match the GfxColorSpaceMode enum defined in -// GfxState.h -static char *gfxColorSpaceModeNames[] = { - "DeviceGray", - "CalGray", - "DeviceRGB", - "CalRGB", - "DeviceCMYK", - "Lab", - "ICCBased", - "Indexed", - "Separation", - "DeviceN", - "Pattern" -}; - -#define nGfxColorSpaceModes ((sizeof(gfxColorSpaceModeNames) / sizeof(char *))) - -#ifdef USE_CMS - -#include <lcms.h> - -#define COLOR_PROFILE_DIR "/ColorProfiles/" -#define GLOBAL_COLOR_PROFILE_DIR POPPLER_DATADIR COLOR_PROFILE_DIR - -void GfxColorTransform::doTransform(void *in, void *out, unsigned int size) { - cmsDoTransform(transform, in, out, size); -} - -// transformA should be a cmsHTRANSFORM -GfxColorTransform::GfxColorTransform(void *transformA) { - transform = transformA; - refCount = 1; -} - -GfxColorTransform::~GfxColorTransform() { - cmsDeleteTransform(transform); -} - -void GfxColorTransform::ref() { - refCount++; -} - -unsigned int GfxColorTransform::unref() { - return --refCount; -} - -static cmsHPROFILE RGBProfile = NULL; -static GooString *displayProfileName = NULL; // display profile file Name -static cmsHPROFILE displayProfile = NULL; // display profile -static unsigned int displayPixelType = 0; -static GfxColorTransform *XYZ2DisplayTransform = NULL; - -// convert color space signature to cmsColor type -static unsigned int getCMSColorSpaceType(icColorSpaceSignature cs); -static unsigned int getCMSNChannels(icColorSpaceSignature cs); -static cmsHPROFILE loadColorProfile(const char *fileName); - -void GfxColorSpace::setDisplayProfile(void *displayProfileA) { - displayProfile = displayProfileA; -} - -void GfxColorSpace::setDisplayProfileName(GooString *name) { - displayProfileName = name->copy(); -} - -cmsHPROFILE GfxColorSpace::getRGBProfile() { - return RGBProfile; -} - -cmsHPROFILE GfxColorSpace::getDisplayProfile() { - return displayProfile; -} - -#endif - -//------------------------------------------------------------------------ -// GfxColorSpace -//------------------------------------------------------------------------ - -GfxColorSpace::GfxColorSpace() { -} - -GfxColorSpace::~GfxColorSpace() { -} - -GfxColorSpace *GfxColorSpace::parse(Object *csObj, Gfx *gfx) { - GfxColorSpace *cs; - Object obj1; - - cs = NULL; - if (csObj->isName()) { - if (csObj->isName("DeviceGray") || csObj->isName("G")) { - cs = new GfxDeviceGrayColorSpace(); - } else if (csObj->isName("DeviceRGB") || csObj->isName("RGB")) { - cs = new GfxDeviceRGBColorSpace(); - } else if (csObj->isName("DeviceCMYK") || csObj->isName("CMYK")) { - cs = new GfxDeviceCMYKColorSpace(); - } else if (csObj->isName("Pattern")) { - cs = new GfxPatternColorSpace(NULL); - } else { - error(-1, "Bad color space '%s'", csObj->getName()); - } - } else if (csObj->isArray()) { - csObj->arrayGet(0, &obj1); - if (obj1.isName("DeviceGray") || obj1.isName("G")) { - cs = new GfxDeviceGrayColorSpace(); - } else if (obj1.isName("DeviceRGB") || obj1.isName("RGB")) { - cs = new GfxDeviceRGBColorSpace(); - } else if (obj1.isName("DeviceCMYK") || obj1.isName("CMYK")) { - cs = new GfxDeviceCMYKColorSpace(); - } else if (obj1.isName("CalGray")) { - cs = GfxCalGrayColorSpace::parse(csObj->getArray()); - } else if (obj1.isName("CalRGB")) { - cs = GfxCalRGBColorSpace::parse(csObj->getArray()); - } else if (obj1.isName("Lab")) { - cs = GfxLabColorSpace::parse(csObj->getArray()); - } else if (obj1.isName("ICCBased")) { - cs = GfxICCBasedColorSpace::parse(csObj->getArray(), gfx); - } else if (obj1.isName("Indexed") || obj1.isName("I")) { - cs = GfxIndexedColorSpace::parse(csObj->getArray(), gfx); - } else if (obj1.isName("Separation")) { - cs = GfxSeparationColorSpace::parse(csObj->getArray(), gfx); - } else if (obj1.isName("DeviceN")) { - cs = GfxDeviceNColorSpace::parse(csObj->getArray(), gfx); - } else if (obj1.isName("Pattern")) { - cs = GfxPatternColorSpace::parse(csObj->getArray(), gfx); - } else { - error(-1, "Bad color space"); - } - obj1.free(); - } else { - error(-1, "Bad color space - expected name or array"); - } - return cs; -} - -void GfxColorSpace::getDefaultRanges(double *decodeLow, double *decodeRange, - int maxImgPixel) { - int i; - - for (i = 0; i < getNComps(); ++i) { - decodeLow[i] = 0; - decodeRange[i] = 1; - } -} - -int GfxColorSpace::getNumColorSpaceModes() { - return nGfxColorSpaceModes; -} - -char *GfxColorSpace::getColorSpaceModeName(int idx) { - return gfxColorSpaceModeNames[idx]; -} - -#ifdef USE_CMS -cmsHPROFILE loadColorProfile(const char *fileName) -{ - cmsHPROFILE hp = NULL; - FILE *fp; - - if (fileName[0] == '/') { - // full path - // check if open the file - if ((fp = fopen(fileName,"r")) != NULL) { - fclose(fp); - hp = cmsOpenProfileFromFile(fileName,"r"); - } - return hp; - } - // try to load from user directory - GooString *path = globalParams->getBaseDir(); - path->append(COLOR_PROFILE_DIR); - path->append(fileName); - // check if open the file - if ((fp = fopen(path->getCString(),"r")) != NULL) { - fclose(fp); - hp = cmsOpenProfileFromFile(path->getCString(),"r"); - } - delete path; - if (hp == NULL) { - // load from global directory - path = new GooString(GLOBAL_COLOR_PROFILE_DIR); - path->append(fileName); - // check if open the file - if ((fp = fopen(path->getCString(),"r")) != NULL) { - fclose(fp); - hp = cmsOpenProfileFromFile(path->getCString(),"r"); - } - delete path; - } - return hp; -} - -static int CMSError(int ecode, const char *msg) -{ - error(-1, "%s", msg); - return 1; -} - -int GfxColorSpace::setupColorProfiles() -{ - static GBool initialized = gFalse; - cmsHTRANSFORM transform; - unsigned int nChannels; - - // do only once - if (initialized) return 0; - initialized = gTrue; - - // set error handlor - cmsSetErrorHandler(CMSError); - - if (displayProfile == NULL) { - // load display profile if it was not already loaded. - if (displayProfileName == NULL) { - displayProfile = loadColorProfile("display.icc"); - } else if (displayProfileName->getLength() > 0) { - displayProfile = loadColorProfile(displayProfileName->getCString()); - } - } - // load RGB profile - RGBProfile = loadColorProfile("RGB.icc"); - if (RGBProfile == NULL) { - /* use built in sRGB profile */ - RGBProfile = cmsCreate_sRGBProfile(); - } - // create transforms - if (displayProfile != NULL) { - displayPixelType = getCMSColorSpaceType(cmsGetColorSpace(displayProfile)); - nChannels = getCMSNChannels(cmsGetColorSpace(displayProfile)); - // create transform from XYZ - cmsHPROFILE XYZProfile = cmsCreateXYZProfile(); - if ((transform = cmsCreateTransform(XYZProfile, TYPE_XYZ_DBL, - displayProfile, - COLORSPACE_SH(displayPixelType) | - CHANNELS_SH(nChannels) | BYTES_SH(1), - INTENT_RELATIVE_COLORIMETRIC,0)) == 0) { - error(-1, "Can't create Lab transform"); - } else { - XYZ2DisplayTransform = new GfxColorTransform(transform); - } - cmsCloseProfile(XYZProfile); - } - return 0; -} - -unsigned int getCMSColorSpaceType(icColorSpaceSignature cs) -{ - switch (cs) { - case icSigXYZData: - return PT_XYZ; - break; - case icSigLabData: - return PT_Lab; - break; - case icSigLuvData: - return PT_YUV; - break; - case icSigYCbCrData: - return PT_YCbCr; - break; - case icSigYxyData: - return PT_Yxy; - break; - case icSigRgbData: - return PT_RGB; - break; - case icSigGrayData: - return PT_GRAY; - break; - case icSigHsvData: - return PT_HSV; - break; - case icSigHlsData: - return PT_HLS; - break; - case icSigCmykData: - return PT_CMYK; - break; - case icSigCmyData: - return PT_CMY; - break; - case icSig2colorData: - case icSig3colorData: - case icSig4colorData: - case icSig5colorData: - case icSig6colorData: - case icSig7colorData: - case icSig8colorData: - case icSig9colorData: - case icSig10colorData: - case icSig11colorData: - case icSig12colorData: - case icSig13colorData: - case icSig14colorData: - case icSig15colorData: - default: - break; - } - return PT_RGB; -} - -unsigned int getCMSNChannels(icColorSpaceSignature cs) -{ - switch (cs) { - case icSigXYZData: - case icSigLuvData: - case icSigLabData: - case icSigYCbCrData: - case icSigYxyData: - case icSigRgbData: - case icSigHsvData: - case icSigHlsData: - case icSigCmyData: - case icSig3colorData: - return 3; - break; - case icSigGrayData: - return 1; - break; - case icSigCmykData: - case icSig4colorData: - return 4; - break; - case icSig2colorData: - return 2; - break; - case icSig5colorData: - return 5; - break; - case icSig6colorData: - return 6; - break; - case icSig7colorData: - return 7; - break; - case icSig8colorData: - return 8; - break; - case icSig9colorData: - return 9; - break; - case icSig10colorData: - return 10; - break; - case icSig11colorData: - return 11; - break; - case icSig12colorData: - return 12; - break; - case icSig13colorData: - return 13; - break; - case icSig14colorData: - return 14; - break; - case icSig15colorData: - return 15; - default: - break; - } - return 3; -} - -#endif - -//------------------------------------------------------------------------ -// GfxDeviceGrayColorSpace -//------------------------------------------------------------------------ - -GfxDeviceGrayColorSpace::GfxDeviceGrayColorSpace() { -} - -GfxDeviceGrayColorSpace::~GfxDeviceGrayColorSpace() { -} - -GfxColorSpace *GfxDeviceGrayColorSpace::copy() { - return new GfxDeviceGrayColorSpace(); -} - -void GfxDeviceGrayColorSpace::getGray(GfxColor *color, GfxGray *gray) { - *gray = clip01(color->c[0]); -} - -void GfxDeviceGrayColorSpace::getGrayLine(Guchar *in, Guchar *out, int length) { - memcpy (out, in, length); -} - -void GfxDeviceGrayColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - rgb->r = rgb->g = rgb->b = clip01(color->c[0]); -} - -void GfxDeviceGrayColorSpace::getRGBLine(Guchar *in, unsigned int *out, - int length) { - int i; - - for (i = 0; i < length; i++) - out[i] = (in[i] << 16) | (in[i] << 8) | (in[i] << 0); -} - -void GfxDeviceGrayColorSpace::getRGBLine(Guchar *in, Guchar *out, int length) { - for (int i = 0; i < length; i++) { - *out++ = in[i]; - *out++ = in[i]; - *out++ = in[i]; - } -} - -void GfxDeviceGrayColorSpace::getRGBXLine(Guchar *in, Guchar *out, int length) { - for (int i = 0; i < length; i++) { - *out++ = in[i]; - *out++ = in[i]; - *out++ = in[i]; - *out++ = 255; - } -} - -void GfxDeviceGrayColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { - cmyk->c = cmyk->m = cmyk->y = 0; - cmyk->k = clip01(gfxColorComp1 - color->c[0]); -} - -void GfxDeviceGrayColorSpace::getDefaultColor(GfxColor *color) { - color->c[0] = 0; -} - -//------------------------------------------------------------------------ -// GfxCalGrayColorSpace -//------------------------------------------------------------------------ - -GfxCalGrayColorSpace::GfxCalGrayColorSpace() { - whiteX = whiteY = whiteZ = 1; - blackX = blackY = blackZ = 0; - gamma = 1; -} - -GfxCalGrayColorSpace::~GfxCalGrayColorSpace() { -} - -GfxColorSpace *GfxCalGrayColorSpace::copy() { - GfxCalGrayColorSpace *cs; - - cs = new GfxCalGrayColorSpace(); - cs->whiteX = whiteX; - cs->whiteY = whiteY; - cs->whiteZ = whiteZ; - cs->blackX = blackX; - cs->blackY = blackY; - cs->blackZ = blackZ; - cs->gamma = gamma; - return cs; -} - -// This is the inverse of MatrixLMN in Example 4.10 from the PostScript -// Language Reference, Third Edition. -static const double xyzrgb[3][3] = { - { 3.240449, -1.537136, -0.498531 }, - { -0.969265, 1.876011, 0.041556 }, - { 0.055643, -0.204026, 1.057229 } -}; - -GfxColorSpace *GfxCalGrayColorSpace::parse(Array *arr) { - GfxCalGrayColorSpace *cs; - Object obj1, obj2, obj3; - - arr->get(1, &obj1); - if (!obj1.isDict()) { - error(-1, "Bad CalGray color space"); - obj1.free(); - return NULL; - } - cs = new GfxCalGrayColorSpace(); - if (obj1.dictLookup("WhitePoint", &obj2)->isArray() && - obj2.arrayGetLength() == 3) { - obj2.arrayGet(0, &obj3); - if (likely(obj3.isNum())) - cs->whiteX = obj3.getNum(); - obj3.free(); - obj2.arrayGet(1, &obj3); - if (likely(obj3.isNum())) - cs->whiteY = obj3.getNum(); - obj3.free(); - obj2.arrayGet(2, &obj3); - if (likely(obj3.isNum())) - cs->whiteZ = obj3.getNum(); - obj3.free(); - } - obj2.free(); - if (obj1.dictLookup("BlackPoint", &obj2)->isArray() && - obj2.arrayGetLength() == 3) { - obj2.arrayGet(0, &obj3); - if (likely(obj3.isNum())) - cs->blackX = obj3.getNum(); - obj3.free(); - obj2.arrayGet(1, &obj3); - if (likely(obj3.isNum())) - cs->blackY = obj3.getNum(); - obj3.free(); - obj2.arrayGet(2, &obj3); - if (likely(obj3.isNum())) - cs->blackZ = obj3.getNum(); - obj3.free(); - } - obj2.free(); - if (obj1.dictLookup("Gamma", &obj2)->isNum()) { - cs->gamma = obj2.getNum(); - } - obj2.free(); - obj1.free(); - - cs->kr = 1 / (xyzrgb[0][0] * cs->whiteX + - xyzrgb[0][1] * cs->whiteY + - xyzrgb[0][2] * cs->whiteZ); - cs->kg = 1 / (xyzrgb[1][0] * cs->whiteX + - xyzrgb[1][1] * cs->whiteY + - xyzrgb[1][2] * cs->whiteZ); - cs->kb = 1 / (xyzrgb[2][0] * cs->whiteX + - xyzrgb[2][1] * cs->whiteY + - xyzrgb[2][2] * cs->whiteZ); - - return cs; -} - -// convert CalGray to media XYZ color space -// (not multiply by the white point) -void GfxCalGrayColorSpace::getXYZ(GfxColor *color, - double *pX, double *pY, double *pZ) { - const double A = colToDbl(color->c[0]); - const double xyzColor = pow(A,gamma); - *pX = xyzColor; - *pY = xyzColor; - *pZ = xyzColor; -} - -void GfxCalGrayColorSpace::getGray(GfxColor *color, GfxGray *gray) { - GfxRGB rgb; - -#ifdef USE_CMS - if (XYZ2DisplayTransform != NULL && displayPixelType == PT_GRAY) { - Guchar out[gfxColorMaxComps]; - double in[gfxColorMaxComps]; - double X, Y, Z; - - getXYZ(color,&X,&Y,&Z); - in[0] = clip01(X); - in[1] = clip01(Y); - in[2] = clip01(Z); - XYZ2DisplayTransform->doTransform(in,out,1); - *gray = byteToCol(out[0]); - return; - } -#endif - getRGB(color, &rgb); - *gray = clip01((GfxColorComp)(0.299 * rgb.r + - 0.587 * rgb.g + - 0.114 * rgb.b + 0.5)); -} - -void GfxCalGrayColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - double X, Y, Z; - double r, g, b; - - getXYZ(color,&X,&Y,&Z); -#ifdef USE_CMS - if (XYZ2DisplayTransform != NULL && displayPixelType == PT_RGB) { - Guchar out[gfxColorMaxComps]; - double in[gfxColorMaxComps]; - - in[0] = clip01(X); - in[1] = clip01(Y); - in[2] = clip01(Z); - XYZ2DisplayTransform->doTransform(in,out,1); - rgb->r = byteToCol(out[0]); - rgb->g = byteToCol(out[1]); - rgb->b = byteToCol(out[2]); - return; - } -#endif - X *= whiteX; - Y *= whiteY; - Z *= whiteZ; - // convert XYZ to RGB, including gamut mapping and gamma correction - r = xyzrgb[0][0] * X + xyzrgb[0][1] * Y + xyzrgb[0][2] * Z; - g = xyzrgb[1][0] * X + xyzrgb[1][1] * Y + xyzrgb[1][2] * Z; - b = xyzrgb[2][0] * X + xyzrgb[2][1] * Y + xyzrgb[2][2] * Z; - rgb->r = dblToCol(sqrt(clip01(r * kr))); - rgb->g = dblToCol(sqrt(clip01(g * kg))); - rgb->b = dblToCol(sqrt(clip01(b * kb))); -} - -void GfxCalGrayColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { - GfxRGB rgb; - GfxColorComp c, m, y, k; - -#ifdef USE_CMS - if (XYZ2DisplayTransform != NULL && displayPixelType == PT_CMYK) { - double in[gfxColorMaxComps]; - Guchar out[gfxColorMaxComps]; - double X, Y, Z; - - getXYZ(color,&X,&Y,&Z); - in[0] = clip01(X); - in[1] = clip01(Y); - in[2] = clip01(Z); - - XYZ2DisplayTransform->doTransform(in,out,1); - cmyk->c = byteToCol(out[0]); - cmyk->m = byteToCol(out[1]); - cmyk->y = byteToCol(out[2]); - cmyk->k = byteToCol(out[3]); - return; - } -#endif - getRGB(color, &rgb); - c = clip01(gfxColorComp1 - rgb.r); - m = clip01(gfxColorComp1 - rgb.g); - y = clip01(gfxColorComp1 - rgb.b); - k = c; - if (m < k) { - k = m; - } - if (y < k) { - k = y; - } - cmyk->c = c - k; - cmyk->m = m - k; - cmyk->y = y - k; - cmyk->k = k; -} - -void GfxCalGrayColorSpace::getDefaultColor(GfxColor *color) { - color->c[0] = 0; -} - -//------------------------------------------------------------------------ -// GfxDeviceRGBColorSpace -//------------------------------------------------------------------------ - -GfxDeviceRGBColorSpace::GfxDeviceRGBColorSpace() { -} - -GfxDeviceRGBColorSpace::~GfxDeviceRGBColorSpace() { -} - -GfxColorSpace *GfxDeviceRGBColorSpace::copy() { - return new GfxDeviceRGBColorSpace(); -} - -void GfxDeviceRGBColorSpace::getGray(GfxColor *color, GfxGray *gray) { - *gray = clip01((GfxColorComp)(0.3 * color->c[0] + - 0.59 * color->c[1] + - 0.11 * color->c[2] + 0.5)); -} - -void GfxDeviceRGBColorSpace::getGrayLine(Guchar *in, Guchar *out, int length) { - int i; - - for (i = 0; i < length; i++) { - out[i] = - (in[i * 3 + 0] * 19595 + - in[i * 3 + 1] * 38469 + - in[i * 3 + 2] * 7472) / 65536; - } -} - -void GfxDeviceRGBColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - rgb->r = clip01(color->c[0]); - rgb->g = clip01(color->c[1]); - rgb->b = clip01(color->c[2]); -} - -void GfxDeviceRGBColorSpace::getRGBLine(Guchar *in, unsigned int *out, - int length) { - Guchar *p; - int i; - - for (i = 0, p = in; i < length; i++, p += 3) - out[i] = (p[0] << 16) | (p[1] << 8) | (p[2] << 0); -} - -void GfxDeviceRGBColorSpace::getRGBLine(Guchar *in, Guchar *out, int length) { - for (int i = 0; i < length; i++) { - *out++ = *in++; - *out++ = *in++; - *out++ = *in++; - } -} - -void GfxDeviceRGBColorSpace::getRGBXLine(Guchar *in, Guchar *out, int length) { - for (int i = 0; i < length; i++) { - *out++ = *in++; - *out++ = *in++; - *out++ = *in++; - *out++ = 255; - } -} -void GfxDeviceRGBColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { - GfxColorComp c, m, y, k; - - c = clip01(gfxColorComp1 - color->c[0]); - m = clip01(gfxColorComp1 - color->c[1]); - y = clip01(gfxColorComp1 - color->c[2]); - k = c; - if (m < k) { - k = m; - } - if (y < k) { - k = y; - } - cmyk->c = c - k; - cmyk->m = m - k; - cmyk->y = y - k; - cmyk->k = k; -} - -void GfxDeviceRGBColorSpace::getDefaultColor(GfxColor *color) { - color->c[0] = 0; - color->c[1] = 0; - color->c[2] = 0; -} - -//------------------------------------------------------------------------ -// GfxCalRGBColorSpace -//------------------------------------------------------------------------ - -GfxCalRGBColorSpace::GfxCalRGBColorSpace() { - whiteX = whiteY = whiteZ = 1; - blackX = blackY = blackZ = 0; - gammaR = gammaG = gammaB = 1; - mat[0] = 1; mat[1] = 0; mat[2] = 0; - mat[3] = 0; mat[4] = 1; mat[5] = 0; - mat[6] = 0; mat[7] = 0; mat[8] = 1; -} - -GfxCalRGBColorSpace::~GfxCalRGBColorSpace() { -} - -GfxColorSpace *GfxCalRGBColorSpace::copy() { - GfxCalRGBColorSpace *cs; - int i; - - cs = new GfxCalRGBColorSpace(); - cs->whiteX = whiteX; - cs->whiteY = whiteY; - cs->whiteZ = whiteZ; - cs->blackX = blackX; - cs->blackY = blackY; - cs->blackZ = blackZ; - cs->gammaR = gammaR; - cs->gammaG = gammaG; - cs->gammaB = gammaB; - for (i = 0; i < 9; ++i) { - cs->mat[i] = mat[i]; - } - return cs; -} - -GfxColorSpace *GfxCalRGBColorSpace::parse(Array *arr) { - GfxCalRGBColorSpace *cs; - Object obj1, obj2, obj3; - int i; - - arr->get(1, &obj1); - if (!obj1.isDict()) { - error(-1, "Bad CalRGB color space"); - obj1.free(); - return NULL; - } - cs = new GfxCalRGBColorSpace(); - if (obj1.dictLookup("WhitePoint", &obj2)->isArray() && - obj2.arrayGetLength() == 3) { - obj2.arrayGet(0, &obj3); - if (likely(obj3.isNum())) - cs->whiteX = obj3.getNum(); - obj3.free(); - obj2.arrayGet(1, &obj3); - if (likely(obj3.isNum())) - cs->whiteY = obj3.getNum(); - obj3.free(); - obj2.arrayGet(2, &obj3); - if (likely(obj3.isNum())) - cs->whiteZ = obj3.getNum(); - obj3.free(); - } - obj2.free(); - if (obj1.dictLookup("BlackPoint", &obj2)->isArray() && - obj2.arrayGetLength() == 3) { - obj2.arrayGet(0, &obj3); - if (likely(obj3.isNum())) - cs->blackX = obj3.getNum(); - obj3.free(); - obj2.arrayGet(1, &obj3); - if (likely(obj3.isNum())) - cs->blackY = obj3.getNum(); - obj3.free(); - obj2.arrayGet(2, &obj3); - if (likely(obj3.isNum())) - cs->blackZ = obj3.getNum(); - obj3.free(); - } - obj2.free(); - if (obj1.dictLookup("Gamma", &obj2)->isArray() && - obj2.arrayGetLength() == 3) { - obj2.arrayGet(0, &obj3); - if (likely(obj3.isNum())) - cs->gammaR = obj3.getNum(); - obj3.free(); - obj2.arrayGet(1, &obj3); - if (likely(obj3.isNum())) - cs->gammaG = obj3.getNum(); - obj3.free(); - obj2.arrayGet(2, &obj3); - if (likely(obj3.isNum())) - cs->gammaB = obj3.getNum(); - obj3.free(); - } - obj2.free(); - if (obj1.dictLookup("Matrix", &obj2)->isArray() && - obj2.arrayGetLength() == 9) { - for (i = 0; i < 9; ++i) { - obj2.arrayGet(i, &obj3); - if (likely(obj3.isNum())) - cs->mat[i] = obj3.getNum(); - obj3.free(); - } - } - obj2.free(); - obj1.free(); - - cs->kr = 1 / (xyzrgb[0][0] * cs->whiteX + - xyzrgb[0][1] * cs->whiteY + - xyzrgb[0][2] * cs->whiteZ); - cs->kg = 1 / (xyzrgb[1][0] * cs->whiteX + - xyzrgb[1][1] * cs->whiteY + - xyzrgb[1][2] * cs->whiteZ); - cs->kb = 1 / (xyzrgb[2][0] * cs->whiteX + - xyzrgb[2][1] * cs->whiteY + - xyzrgb[2][2] * cs->whiteZ); - - return cs; -} - -// convert CalRGB to XYZ color space -void GfxCalRGBColorSpace::getXYZ(GfxColor *color, - double *pX, double *pY, double *pZ) { - double A, B, C; - - A = pow(colToDbl(color->c[0]), gammaR); - B = pow(colToDbl(color->c[1]), gammaG); - C = pow(colToDbl(color->c[2]), gammaB); - *pX = mat[0] * A + mat[3] * B + mat[6] * C; - *pY = mat[1] * A + mat[4] * B + mat[7] * C; - *pZ = mat[2] * A + mat[5] * B + mat[8] * C; -} - -void GfxCalRGBColorSpace::getGray(GfxColor *color, GfxGray *gray) { - GfxRGB rgb; - -#ifdef USE_CMS - if (XYZ2DisplayTransform != NULL && displayPixelType == PT_GRAY) { - Guchar out[gfxColorMaxComps]; - double in[gfxColorMaxComps]; - double X, Y, Z; - - getXYZ(color,&X,&Y,&Z); - in[0] = clip01(X); - in[1] = clip01(Y); - in[2] = clip01(Z); - XYZ2DisplayTransform->doTransform(in,out,1); - *gray = byteToCol(out[0]); - return; - } -#endif - getRGB(color, &rgb); - *gray = clip01((GfxColorComp)(0.299 * rgb.r + - 0.587 * rgb.g + - 0.114 * rgb.b + 0.5)); -} - -void GfxCalRGBColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - double X, Y, Z; - double r, g, b; - - getXYZ(color,&X,&Y,&Z); -#ifdef USE_CMS - if (XYZ2DisplayTransform != NULL && displayPixelType == PT_RGB) { - Guchar out[gfxColorMaxComps]; - double in[gfxColorMaxComps]; - - in[0] = clip01(X/whiteX); - in[1] = clip01(Y/whiteY); - in[2] = clip01(Z/whiteZ); - XYZ2DisplayTransform->doTransform(in,out,1); - rgb->r = byteToCol(out[0]); - rgb->g = byteToCol(out[1]); - rgb->b = byteToCol(out[2]); - return; - } -#endif - // convert XYZ to RGB, including gamut mapping and gamma correction - r = xyzrgb[0][0] * X + xyzrgb[0][1] * Y + xyzrgb[0][2] * Z; - g = xyzrgb[1][0] * X + xyzrgb[1][1] * Y + xyzrgb[1][2] * Z; - b = xyzrgb[2][0] * X + xyzrgb[2][1] * Y + xyzrgb[2][2] * Z; - rgb->r = dblToCol(sqrt(clip01(r))); - rgb->g = dblToCol(sqrt(clip01(g))); - rgb->b = dblToCol(sqrt(clip01(b))); -} - -void GfxCalRGBColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { - GfxRGB rgb; - GfxColorComp c, m, y, k; - -#ifdef USE_CMS - if (XYZ2DisplayTransform != NULL && displayPixelType == PT_CMYK) { - double in[gfxColorMaxComps]; - Guchar out[gfxColorMaxComps]; - double X, Y, Z; - - getXYZ(color,&X,&Y,&Z); - in[0] = clip01(X); - in[1] = clip01(Y); - in[2] = clip01(Z); - XYZ2DisplayTransform->doTransform(in,out,1); - cmyk->c = byteToCol(out[0]); - cmyk->m = byteToCol(out[1]); - cmyk->y = byteToCol(out[2]); - cmyk->k = byteToCol(out[3]); - return; - } -#endif - getRGB(color, &rgb); - c = clip01(gfxColorComp1 - rgb.r); - m = clip01(gfxColorComp1 - rgb.g); - y = clip01(gfxColorComp1 - rgb.b); - k = c; - if (m < k) { - k = m; - } - if (y < k) { - k = y; - } - cmyk->c = c - k; - cmyk->m = m - k; - cmyk->y = y - k; - cmyk->k = k; -} - -void GfxCalRGBColorSpace::getDefaultColor(GfxColor *color) { - color->c[0] = 0; - color->c[1] = 0; - color->c[2] = 0; -} - -//------------------------------------------------------------------------ -// GfxDeviceCMYKColorSpace -//------------------------------------------------------------------------ - -GfxDeviceCMYKColorSpace::GfxDeviceCMYKColorSpace() { -} - -GfxDeviceCMYKColorSpace::~GfxDeviceCMYKColorSpace() { -} - -GfxColorSpace *GfxDeviceCMYKColorSpace::copy() { - return new GfxDeviceCMYKColorSpace(); -} - -void GfxDeviceCMYKColorSpace::getGray(GfxColor *color, GfxGray *gray) { - *gray = clip01((GfxColorComp)(gfxColorComp1 - color->c[3] - - 0.3 * color->c[0] - - 0.59 * color->c[1] - - 0.11 * color->c[2] + 0.5)); -} - -void GfxDeviceCMYKColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - double c, m, y, k, c1, m1, y1, k1, r, g, b; - - c = colToDbl(color->c[0]); - m = colToDbl(color->c[1]); - y = colToDbl(color->c[2]); - k = colToDbl(color->c[3]); - c1 = 1 - c; - m1 = 1 - m; - y1 = 1 - y; - k1 = 1 - k; - cmykToRGBMatrixMultiplication(c, m, y, k, c1, m1, y1, k1, r, g, b); - rgb->r = clip01(dblToCol(r)); - rgb->g = clip01(dblToCol(g)); - rgb->b = clip01(dblToCol(b)); -} - -static inline void GfxDeviceCMYKColorSpacegetRGBLineHelper(Guchar *&in, double &r, double &g, double &b) -{ - double c, m, y, k, c1, m1, y1, k1; - - c = byteToDbl(*in++); - m = byteToDbl(*in++); - y = byteToDbl(*in++); - k = byteToDbl(*in++); - c1 = 1 - c; - m1 = 1 - m; - y1 = 1 - y; - k1 = 1 - k; - cmykToRGBMatrixMultiplication(c, m, y, k, c1, m1, y1, k1, r, g, b); -} - -void GfxDeviceCMYKColorSpace::getRGBLine(Guchar *in, unsigned int *out, int length) -{ - double r, g, b; - for (int i = 0; i < length; i++) { - GfxDeviceCMYKColorSpacegetRGBLineHelper(in, r, g, b); - *out++ = (dblToByte(clip01(r)) << 16) | (dblToByte(clip01(g)) << 8) | dblToByte(clip01(b)); - } -} - -void GfxDeviceCMYKColorSpace::getRGBLine(Guchar *in, Guchar *out, int length) -{ - double r, g, b; - - for (int i = 0; i < length; i++) { - GfxDeviceCMYKColorSpacegetRGBLineHelper(in, r, g, b); - *out++ = dblToByte(clip01(r)); - *out++ = dblToByte(clip01(g)); - *out++ = dblToByte(clip01(b)); - } -} - -void GfxDeviceCMYKColorSpace::getRGBXLine(Guchar *in, Guchar *out, int length) -{ - double r, g, b; - - for (int i = 0; i < length; i++) { - GfxDeviceCMYKColorSpacegetRGBLineHelper(in, r, g, b); - *out++ = dblToByte(clip01(r)); - *out++ = dblToByte(clip01(g)); - *out++ = dblToByte(clip01(b)); - *out++ = 255; - } -} - -void GfxDeviceCMYKColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { - cmyk->c = clip01(color->c[0]); - cmyk->m = clip01(color->c[1]); - cmyk->y = clip01(color->c[2]); - cmyk->k = clip01(color->c[3]); -} - -void GfxDeviceCMYKColorSpace::getDefaultColor(GfxColor *color) { - color->c[0] = 0; - color->c[1] = 0; - color->c[2] = 0; - color->c[3] = gfxColorComp1; -} - -//------------------------------------------------------------------------ -// GfxLabColorSpace -//------------------------------------------------------------------------ - -GfxLabColorSpace::GfxLabColorSpace() { - whiteX = whiteY = whiteZ = 1; - blackX = blackY = blackZ = 0; - aMin = bMin = -100; - aMax = bMax = 100; -} - -GfxLabColorSpace::~GfxLabColorSpace() { -} - -GfxColorSpace *GfxLabColorSpace::copy() { - GfxLabColorSpace *cs; - - cs = new GfxLabColorSpace(); - cs->whiteX = whiteX; - cs->whiteY = whiteY; - cs->whiteZ = whiteZ; - cs->blackX = blackX; - cs->blackY = blackY; - cs->blackZ = blackZ; - cs->aMin = aMin; - cs->aMax = aMax; - cs->bMin = bMin; - cs->bMax = bMax; - cs->kr = kr; - cs->kg = kg; - cs->kb = kb; - return cs; -} - -GfxColorSpace *GfxLabColorSpace::parse(Array *arr) { - GfxLabColorSpace *cs; - Object obj1, obj2, obj3; - - arr->get(1, &obj1); - if (!obj1.isDict()) { - error(-1, "Bad Lab color space"); - obj1.free(); - return NULL; - } - cs = new GfxLabColorSpace(); - if (obj1.dictLookup("WhitePoint", &obj2)->isArray() && - obj2.arrayGetLength() == 3) { - obj2.arrayGet(0, &obj3); - cs->whiteX = obj3.getNum(); - obj3.free(); - obj2.arrayGet(1, &obj3); - cs->whiteY = obj3.getNum(); - obj3.free(); - obj2.arrayGet(2, &obj3); - cs->whiteZ = obj3.getNum(); - obj3.free(); - } - obj2.free(); - if (obj1.dictLookup("BlackPoint", &obj2)->isArray() && - obj2.arrayGetLength() == 3) { - obj2.arrayGet(0, &obj3); - cs->blackX = obj3.getNum(); - obj3.free(); - obj2.arrayGet(1, &obj3); - cs->blackY = obj3.getNum(); - obj3.free(); - obj2.arrayGet(2, &obj3); - cs->blackZ = obj3.getNum(); - obj3.free(); - } - obj2.free(); - if (obj1.dictLookup("Range", &obj2)->isArray() && - obj2.arrayGetLength() == 4) { - obj2.arrayGet(0, &obj3); - cs->aMin = obj3.getNum(); - obj3.free(); - obj2.arrayGet(1, &obj3); - cs->aMax = obj3.getNum(); - obj3.free(); - obj2.arrayGet(2, &obj3); - cs->bMin = obj3.getNum(); - obj3.free(); - obj2.arrayGet(3, &obj3); - cs->bMax = obj3.getNum(); - obj3.free(); - } - obj2.free(); - obj1.free(); - - cs->kr = 1 / (xyzrgb[0][0] * cs->whiteX + - xyzrgb[0][1] * cs->whiteY + - xyzrgb[0][2] * cs->whiteZ); - cs->kg = 1 / (xyzrgb[1][0] * cs->whiteX + - xyzrgb[1][1] * cs->whiteY + - xyzrgb[1][2] * cs->whiteZ); - cs->kb = 1 / (xyzrgb[2][0] * cs->whiteX + - xyzrgb[2][1] * cs->whiteY + - xyzrgb[2][2] * cs->whiteZ); - - return cs; -} - -void GfxLabColorSpace::getGray(GfxColor *color, GfxGray *gray) { - GfxRGB rgb; - -#ifdef USE_CMS - if (XYZ2DisplayTransform != NULL && displayPixelType == PT_GRAY) { - Guchar out[gfxColorMaxComps]; - double in[gfxColorMaxComps]; - - getXYZ(color, &in[0], &in[1], &in[2]); - XYZ2DisplayTransform->doTransform(in,out,1); - *gray = byteToCol(out[0]); - return; - } -#endif - getRGB(color, &rgb); - *gray = clip01((GfxColorComp)(0.299 * rgb.r + - 0.587 * rgb.g + - 0.114 * rgb.b + 0.5)); -} - -// convert L*a*b* to media XYZ color space -// (not multiply by the white point) -void GfxLabColorSpace::getXYZ(GfxColor *color, - double *pX, double *pY, double *pZ) { - double X, Y, Z; - double t1, t2; - - t1 = (colToDbl(color->c[0]) + 16) / 116; - t2 = t1 + colToDbl(color->c[1]) / 500; - if (t2 >= (6.0 / 29.0)) { - X = t2 * t2 * t2; - } else { - X = (108.0 / 841.0) * (t2 - (4.0 / 29.0)); - } - if (t1 >= (6.0 / 29.0)) { - Y = t1 * t1 * t1; - } else { - Y = (108.0 / 841.0) * (t1 - (4.0 / 29.0)); - } - t2 = t1 - colToDbl(color->c[2]) / 200; - if (t2 >= (6.0 / 29.0)) { - Z = t2 * t2 * t2; - } else { - Z = (108.0 / 841.0) * (t2 - (4.0 / 29.0)); - } - *pX = X; - *pY = Y; - *pZ = Z; -} - -void GfxLabColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - double X, Y, Z; - double r, g, b; - - getXYZ(color, &X, &Y, &Z); -#ifdef USE_CMS - if (XYZ2DisplayTransform != NULL && displayPixelType == PT_RGB) { - Guchar out[gfxColorMaxComps]; - double in[gfxColorMaxComps]; - - in[0] = clip01(X); - in[1] = clip01(Y); - in[2] = clip01(Z); - XYZ2DisplayTransform->doTransform(in,out,1); - rgb->r = byteToCol(out[0]); - rgb->g = byteToCol(out[1]); - rgb->b = byteToCol(out[2]); - return; - } -#endif - X *= whiteX; - Y *= whiteY; - Z *= whiteZ; - // convert XYZ to RGB, including gamut mapping and gamma correction - r = xyzrgb[0][0] * X + xyzrgb[0][1] * Y + xyzrgb[0][2] * Z; - g = xyzrgb[1][0] * X + xyzrgb[1][1] * Y + xyzrgb[1][2] * Z; - b = xyzrgb[2][0] * X + xyzrgb[2][1] * Y + xyzrgb[2][2] * Z; - rgb->r = dblToCol(sqrt(clip01(r * kr))); - rgb->g = dblToCol(sqrt(clip01(g * kg))); - rgb->b = dblToCol(sqrt(clip01(b * kb))); -} - -void GfxLabColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { - GfxRGB rgb; - GfxColorComp c, m, y, k; - -#ifdef USE_CMS - if (XYZ2DisplayTransform != NULL && displayPixelType == PT_CMYK) { - double in[gfxColorMaxComps]; - Guchar out[gfxColorMaxComps]; - - getXYZ(color, &in[0], &in[1], &in[2]); - XYZ2DisplayTransform->doTransform(in,out,1); - cmyk->c = byteToCol(out[0]); - cmyk->m = byteToCol(out[1]); - cmyk->y = byteToCol(out[2]); - cmyk->k = byteToCol(out[3]); - return; - } -#endif - getRGB(color, &rgb); - c = clip01(gfxColorComp1 - rgb.r); - m = clip01(gfxColorComp1 - rgb.g); - y = clip01(gfxColorComp1 - rgb.b); - k = c; - if (m < k) { - k = m; - } - if (y < k) { - k = y; - } - cmyk->c = c - k; - cmyk->m = m - k; - cmyk->y = y - k; - cmyk->k = k; -} - -void GfxLabColorSpace::getDefaultColor(GfxColor *color) { - color->c[0] = 0; - if (aMin > 0) { - color->c[1] = dblToCol(aMin); - } else if (aMax < 0) { - color->c[1] = dblToCol(aMax); - } else { - color->c[1] = 0; - } - if (bMin > 0) { - color->c[2] = dblToCol(bMin); - } else if (bMax < 0) { - color->c[2] = dblToCol(bMax); - } else { - color->c[2] = 0; - } -} - -void GfxLabColorSpace::getDefaultRanges(double *decodeLow, double *decodeRange, - int maxImgPixel) { - decodeLow[0] = 0; - decodeRange[0] = 100; - decodeLow[1] = aMin; - decodeRange[1] = aMax - aMin; - decodeLow[2] = bMin; - decodeRange[2] = bMax - bMin; -} - -//------------------------------------------------------------------------ -// GfxICCBasedColorSpace -//------------------------------------------------------------------------ - -class GfxICCBasedColorSpaceKey : public PopplerCacheKey -{ - public: - GfxICCBasedColorSpaceKey(int numA, int genA) : num(numA), gen(genA) - { - } - - bool operator==(const PopplerCacheKey &key) const - { - const GfxICCBasedColorSpaceKey *k = static_cast<const GfxICCBasedColorSpaceKey*>(&key); - return k->num == num && k->gen == gen; - } - - int num, gen; -}; - -class GfxICCBasedColorSpaceItem : public PopplerCacheItem -{ - public: - GfxICCBasedColorSpaceItem(GfxICCBasedColorSpace *csA) - { - cs = static_cast<GfxICCBasedColorSpace*>(csA->copy()); - } - - ~GfxICCBasedColorSpaceItem() - { - delete cs; - } - - GfxICCBasedColorSpace *cs; -}; - -GfxICCBasedColorSpace::GfxICCBasedColorSpace(int nCompsA, GfxColorSpace *altA, - Ref *iccProfileStreamA) { - nComps = nCompsA; - alt = altA; - iccProfileStream = *iccProfileStreamA; - rangeMin[0] = rangeMin[1] = rangeMin[2] = rangeMin[3] = 0; - rangeMax[0] = rangeMax[1] = rangeMax[2] = rangeMax[3] = 1; -#ifdef USE_CMS - transform = NULL; - lineTransform = NULL; -#endif -} - -GfxICCBasedColorSpace::~GfxICCBasedColorSpace() { - delete alt; -#ifdef USE_CMS - if (transform != NULL) { - if (transform->unref() == 0) delete transform; - } - if (lineTransform != NULL) { - if (lineTransform->unref() == 0) delete lineTransform; - } -#endif -} - -GfxColorSpace *GfxICCBasedColorSpace::copy() { - GfxICCBasedColorSpace *cs; - int i; - - cs = new GfxICCBasedColorSpace(nComps, alt->copy(), &iccProfileStream); - for (i = 0; i < 4; ++i) { - cs->rangeMin[i] = rangeMin[i]; - cs->rangeMax[i] = rangeMax[i]; - } -#ifdef USE_CMS - cs->transform = transform; - if (transform != NULL) transform->ref(); - cs->lineTransform = lineTransform; - if (lineTransform != NULL) lineTransform->ref(); -#endif - return cs; -} - -GfxColorSpace *GfxICCBasedColorSpace::parse(Array *arr, Gfx *gfx) { - GfxICCBasedColorSpace *cs; - Ref iccProfileStreamA; - int nCompsA; - GfxColorSpace *altA; - Dict *dict; - Object obj1, obj2, obj3; - int i; - - arr->getNF(1, &obj1); - if (obj1.isRef()) { - iccProfileStreamA = obj1.getRef(); - } else { - iccProfileStreamA.num = 0; - iccProfileStreamA.gen = 0; - } - obj1.free(); -#ifdef USE_CMS - // check cache - if (gfx && iccProfileStreamA.num > 0) { - GfxICCBasedColorSpaceKey k(iccProfileStreamA.num, iccProfileStreamA.gen); - GfxICCBasedColorSpaceItem *item = static_cast<GfxICCBasedColorSpaceItem *>(gfx->getIccColorSpaceCache()->lookup(k)); - if (item != NULL) - { - cs = static_cast<GfxICCBasedColorSpace*>(item->cs->copy()); - return cs; - } - } -#endif - arr->get(1, &obj1); - if (!obj1.isStream()) { - error(-1, "Bad ICCBased color space (stream)"); - obj1.free(); - return NULL; - } - dict = obj1.streamGetDict(); - if (!dict->lookup("N", &obj2)->isInt()) { - error(-1, "Bad ICCBased color space (N)"); - obj2.free(); - obj1.free(); - return NULL; - } - nCompsA = obj2.getInt(); - obj2.free(); - if (nCompsA > gfxColorMaxComps) { - error(-1, "ICCBased color space with too many (%d > %d) components", - nCompsA, gfxColorMaxComps); - nCompsA = gfxColorMaxComps; - } - if (dict->lookup("Alternate", &obj2)->isNull() || - !(altA = GfxColorSpace::parse(&obj2, gfx))) { - switch (nCompsA) { - case 1: - altA = new GfxDeviceGrayColorSpace(); - break; - case 3: - altA = new GfxDeviceRGBColorSpace(); - break; - case 4: - altA = new GfxDeviceCMYKColorSpace(); - break; - default: - error(-1, "Bad ICCBased color space - invalid N"); - obj2.free(); - obj1.free(); - return NULL; - } - } - obj2.free(); - cs = new GfxICCBasedColorSpace(nCompsA, altA, &iccProfileStreamA); - if (dict->lookup("Range", &obj2)->isArray() && - obj2.arrayGetLength() == 2 * nCompsA) { - Object obj4; - for (i = 0; i < nCompsA; ++i) { - obj2.arrayGet(2*i, &obj3); - obj2.arrayGet(2*i+1, &obj4); - if (obj3.isNum() && obj4.isNum()) { - cs->rangeMin[i] = obj3.getNum(); - cs->rangeMax[i] = obj4.getNum(); - } - obj3.free(); - obj4.free(); - } - } - obj2.free(); - obj1.free(); - -#ifdef USE_CMS - arr->get(1, &obj1); - dict = obj1.streamGetDict(); - Guchar *profBuf; - Stream *iccStream = obj1.getStream(); - int length = 0; - - profBuf = iccStream->toUnsignedChars(&length, 65536, 65536); - cmsHPROFILE hp = cmsOpenProfileFromMem(profBuf,length); - gfree(profBuf); - if (hp == 0) { - error(-1, "read ICCBased color space profile error"); - } else { - cmsHPROFILE dhp = displayProfile; - if (dhp == NULL) dhp = RGBProfile; - unsigned int cst = getCMSColorSpaceType(cmsGetColorSpace(hp)); - unsigned int dNChannels = getCMSNChannels(cmsGetColorSpace(dhp)); - unsigned int dcst = getCMSColorSpaceType(cmsGetColorSpace(dhp)); - cmsHTRANSFORM transform; - if ((transform = cmsCreateTransform(hp, - COLORSPACE_SH(cst) |CHANNELS_SH(nCompsA) | BYTES_SH(1), - dhp, - COLORSPACE_SH(dcst) | - CHANNELS_SH(dNChannels) | BYTES_SH(1), - INTENT_RELATIVE_COLORIMETRIC,0)) == 0) { - error(-1, "Can't create transform"); - cs->transform = NULL; - } else { - cs->transform = new GfxColorTransform(transform); - } - if (dcst == PT_RGB) { - // create line transform only when the display is RGB type color space - if ((transform = cmsCreateTransform(hp, - CHANNELS_SH(nCompsA) | BYTES_SH(1),dhp, - TYPE_RGB_8,INTENT_RELATIVE_COLORIMETRIC,0)) == 0) { - error(-1, "Can't create transform"); - cs->lineTransform = NULL; - } else { - cs->lineTransform = new GfxColorTransform(transform); - } - } - cmsCloseProfile(hp); - } - obj1.free(); - // put this colorSpace into cache - if (gfx && iccProfileStreamA.num > 0) { - GfxICCBasedColorSpaceKey *k = new GfxICCBasedColorSpaceKey(iccProfileStreamA.num, iccProfileStreamA.gen); - GfxICCBasedColorSpaceItem *item = new GfxICCBasedColorSpaceItem(cs); - gfx->getIccColorSpaceCache()->put(k, item); - } -#endif - return cs; -} - -void GfxICCBasedColorSpace::getGray(GfxColor *color, GfxGray *gray) { -#ifdef USE_CMS - if (transform != 0 && displayPixelType == PT_GRAY) { - Guchar in[gfxColorMaxComps]; - Guchar out[gfxColorMaxComps]; - - for (int i = 0;i < nComps;i++) { - in[i] = colToByte(color->c[i]); - } - transform->doTransform(in,out,1); - *gray = byteToCol(out[0]); - } else { - GfxRGB rgb; - getRGB(color,&rgb); - *gray = clip01((GfxColorComp)(0.3 * rgb.r + - 0.59 * rgb.g + - 0.11 * rgb.b + 0.5)); - } -#else - alt->getGray(color, gray); -#endif -} - -void GfxICCBasedColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { -#ifdef USE_CMS - if (transform != 0 - && (displayProfile == NULL || displayPixelType == PT_RGB)) { - Guchar in[gfxColorMaxComps]; - Guchar out[gfxColorMaxComps]; - - for (int i = 0;i < nComps;i++) { - in[i] = colToByte(color->c[i]); - } - transform->doTransform(in,out,1); - rgb->r = byteToCol(out[0]); - rgb->g = byteToCol(out[1]); - rgb->b = byteToCol(out[2]); - } else { - alt->getRGB(color, rgb); - } -#else - alt->getRGB(color, rgb); -#endif -} - -void GfxICCBasedColorSpace::getRGBLine(Guchar *in, unsigned int *out, - int length) { -#ifdef USE_CMS - if (lineTransform != 0) { - Guchar* tmp = (Guchar *)gmallocn(3 * length, sizeof(Guchar)); - lineTransform->doTransform(in, tmp, length); - for (int i = 0; i < length; ++i) { - Guchar *current = tmp + (i * 3); - out[i] = (current[0] << 16) | (current[1] << 8) | current[2]; - } - gfree(tmp); - } else { - alt->getRGBLine(in, out, length); - } -#else - alt->getRGBLine(in, out, length); -#endif -} - -void GfxICCBasedColorSpace::getRGBLine(Guchar *in, Guchar *out, int length) { -#ifdef USE_CMS - if (lineTransform != 0) { - Guchar* tmp = (Guchar *)gmallocn(3 * length, sizeof(Guchar)); - lineTransform->doTransform(in, tmp, length); - Guchar *current = tmp; - for (int i = 0; i < length; ++i) { - *out++ = *current++; - *out++ = *current++; - *out++ = *current++; - } - gfree(tmp); - } else { - alt->getRGBLine(in, out, length); - } -#else - alt->getRGBLine(in, out, length); -#endif -} - -void GfxICCBasedColorSpace::getRGBXLine(Guchar *in, Guchar *out, int length) { -#ifdef USE_CMS - if (lineTransform != 0) { - Guchar* tmp = (Guchar *)gmallocn(3 * length, sizeof(Guchar)); - lineTransform->doTransform(in, tmp, length); - Guchar *current = tmp; - for (int i = 0; i < length; ++i) { - *out++ = *current++; - *out++ = *current++; - *out++ = *current++; - *out++ = 255; - } - gfree(tmp); - } else { - alt->getRGBXLine(in, out, length); - } -#else - alt->getRGBXLine(in, out, length); -#endif -} - -void GfxICCBasedColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { -#ifdef USE_CMS - if (transform != NULL && displayPixelType == PT_CMYK) { - Guchar in[gfxColorMaxComps]; - Guchar out[gfxColorMaxComps]; - - for (int i = 0;i < nComps;i++) { - in[i] = colToByte(color->c[i]); - } - transform->doTransform(in,out,1); - cmyk->c = byteToCol(out[0]); - cmyk->m = byteToCol(out[1]); - cmyk->y = byteToCol(out[2]); - cmyk->k = byteToCol(out[3]); - } else { - GfxRGB rgb; - GfxColorComp c, m, y, k; - - getRGB(color,&rgb); - c = clip01(gfxColorComp1 - rgb.r); - m = clip01(gfxColorComp1 - rgb.g); - y = clip01(gfxColorComp1 - rgb.b); - k = c; - if (m < k) { - k = m; - } - if (y < k) { - k = y; - } - cmyk->c = c - k; - cmyk->m = m - k; - cmyk->y = y - k; - cmyk->k = k; - } -#else - alt->getCMYK(color, cmyk); -#endif -} - -GBool GfxICCBasedColorSpace::useGetRGBLine() { -#ifdef USE_CMS - return lineTransform != NULL || alt->useGetRGBLine(); -#else - return alt->useGetRGBLine(); -#endif -} - -void GfxICCBasedColorSpace::getDefaultColor(GfxColor *color) { - int i; - - for (i = 0; i < nComps; ++i) { - if (rangeMin[i] > 0) { - color->c[i] = dblToCol(rangeMin[i]); - } else if (rangeMax[i] < 0) { - color->c[i] = dblToCol(rangeMax[i]); - } else { - color->c[i] = 0; - } - } -} - -void GfxICCBasedColorSpace::getDefaultRanges(double *decodeLow, - double *decodeRange, - int maxImgPixel) { - alt->getDefaultRanges(decodeLow, decodeRange, maxImgPixel); - -#if 0 - // this is nominally correct, but some PDF files don't set the - // correct ranges in the ICCBased dict - int i; - - for (i = 0; i < nComps; ++i) { - decodeLow[i] = rangeMin[i]; - decodeRange[i] = rangeMax[i] - rangeMin[i]; - } -#endif -} - -//------------------------------------------------------------------------ -// GfxIndexedColorSpace -//------------------------------------------------------------------------ - -GfxIndexedColorSpace::GfxIndexedColorSpace(GfxColorSpace *baseA, - int indexHighA) { - base = baseA; - indexHigh = indexHighA; - lookup = (Guchar *)gmallocn((indexHigh + 1) * base->getNComps(), - sizeof(Guchar)); -} - -GfxIndexedColorSpace::~GfxIndexedColorSpace() { - delete base; - gfree(lookup); -} - -GfxColorSpace *GfxIndexedColorSpace::copy() { - GfxIndexedColorSpace *cs; - - cs = new GfxIndexedColorSpace(base->copy(), indexHigh); - memcpy(cs->lookup, lookup, - (indexHigh + 1) * base->getNComps() * sizeof(Guchar)); - return cs; -} - -GfxColorSpace *GfxIndexedColorSpace::parse(Array *arr, Gfx *gfx) { - GfxIndexedColorSpace *cs; - GfxColorSpace *baseA; - int indexHighA; - Object obj1; - char *s; - int n, i, j; - - if (arr->getLength() != 4) { - error(-1, "Bad Indexed color space"); - goto err1; - } - arr->get(1, &obj1); - if (!(baseA = GfxColorSpace::parse(&obj1, gfx))) { - error(-1, "Bad Indexed color space (base color space)"); - goto err2; - } - obj1.free(); - if (!arr->get(2, &obj1)->isInt()) { - error(-1, "Bad Indexed color space (hival)"); - delete baseA; - goto err2; - } - indexHighA = obj1.getInt(); - if (indexHighA < 0 || indexHighA > 255) { - // the PDF spec requires indexHigh to be in [0,255] -- allowing - // values larger than 255 creates a security hole: if nComps * - // indexHigh is greater than 2^31, the loop below may overwrite - // past the end of the array - int previousValue = indexHighA; - if (indexHighA < 0) indexHighA = 0; - else indexHighA = 255; - error(-1, "Bad Indexed color space (invalid indexHigh value, was %d using %d to try to recover)", previousValue, indexHighA); - } - obj1.free(); - cs = new GfxIndexedColorSpace(baseA, indexHighA); - arr->get(3, &obj1); - n = baseA->getNComps(); - if (obj1.isStream()) { - obj1.streamReset(); - for (i = 0; i <= indexHighA; ++i) { - const int readChars = obj1.streamGetChars(n, &cs->lookup[i*n]); - for (j = readChars; j < n; ++j) { - error(-1, "Bad Indexed color space (lookup table stream too short) padding with zeroes"); - cs->lookup[i*n + j] = 0; - } - } - obj1.streamClose(); - } else if (obj1.isString()) { - if (obj1.getString()->getLength() < (indexHighA + 1) * n) { - error(-1, "Bad Indexed color space (lookup table string too short)"); - goto err3; - } - s = obj1.getString()->getCString(); - for (i = 0; i <= indexHighA; ++i) { - for (j = 0; j < n; ++j) { - cs->lookup[i*n + j] = (Guchar)*s++; - } - } - } else { - error(-1, "Bad Indexed color space (lookup table)"); - goto err3; - } - obj1.free(); - return cs; - - err3: - delete cs; - err2: - obj1.free(); - err1: - return NULL; -} - -GfxColor *GfxIndexedColorSpace::mapColorToBase(GfxColor *color, - GfxColor *baseColor) { - Guchar *p; - double low[gfxColorMaxComps], range[gfxColorMaxComps]; - int n, i; - - n = base->getNComps(); - base->getDefaultRanges(low, range, indexHigh); - p = &lookup[(int)(colToDbl(color->c[0]) + 0.5) * n]; - for (i = 0; i < n; ++i) { - baseColor->c[i] = dblToCol(low[i] + (p[i] / 255.0) * range[i]); - } - return baseColor; -} - -void GfxIndexedColorSpace::getGray(GfxColor *color, GfxGray *gray) { - GfxColor color2; - - base->getGray(mapColorToBase(color, &color2), gray); -} - -void GfxIndexedColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - GfxColor color2; - - base->getRGB(mapColorToBase(color, &color2), rgb); -} - -void GfxIndexedColorSpace::getRGBLine(Guchar *in, unsigned int *out, int length) { - Guchar *line; - int i, j, n; - - n = base->getNComps(); - line = (Guchar *) gmallocn (length, n); - for (i = 0; i < length; i++) - for (j = 0; j < n; j++) - line[i * n + j] = lookup[in[i] * n + j]; - - base->getRGBLine(line, out, length); - - gfree (line); -} - -void GfxIndexedColorSpace::getRGBLine(Guchar *in, Guchar *out, int length) -{ - Guchar *line; - int i, j, n; - - n = base->getNComps(); - line = (Guchar *) gmallocn (length, n); - for (i = 0; i < length; i++) - for (j = 0; j < n; j++) - line[i * n + j] = lookup[in[i] * n + j]; - - base->getRGBLine(line, out, length); - - gfree (line); -} - -void GfxIndexedColorSpace::getRGBXLine(Guchar *in, Guchar *out, int length) -{ - Guchar *line; - int i, j, n; - - n = base->getNComps(); - line = (Guchar *) gmallocn (length, n); - for (i = 0; i < length; i++) - for (j = 0; j < n; j++) - line[i * n + j] = lookup[in[i] * n + j]; - - base->getRGBXLine(line, out, length); - - gfree (line); -} - -void GfxIndexedColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { - GfxColor color2; - - base->getCMYK(mapColorToBase(color, &color2), cmyk); -} - -void GfxIndexedColorSpace::getDefaultColor(GfxColor *color) { - color->c[0] = 0; -} - -void GfxIndexedColorSpace::getDefaultRanges(double *decodeLow, - double *decodeRange, - int maxImgPixel) { - decodeLow[0] = 0; - decodeRange[0] = maxImgPixel; -} - -//------------------------------------------------------------------------ -// GfxSeparationColorSpace -//------------------------------------------------------------------------ - -GfxSeparationColorSpace::GfxSeparationColorSpace(GooString *nameA, - GfxColorSpace *altA, - Function *funcA) { - name = nameA; - alt = altA; - func = funcA; - nonMarking = !name->cmp("None"); -} - -GfxSeparationColorSpace::~GfxSeparationColorSpace() { - delete name; - delete alt; - delete func; -} - -GfxColorSpace *GfxSeparationColorSpace::copy() { - return new GfxSeparationColorSpace(name->copy(), alt->copy(), func->copy()); -} - -//~ handle the 'All' and 'None' colorants -GfxColorSpace *GfxSeparationColorSpace::parse(Array *arr, Gfx *gfx) { - GfxSeparationColorSpace *cs; - GooString *nameA; - GfxColorSpace *altA; - Function *funcA; - Object obj1; - - if (arr->getLength() != 4) { - error(-1, "Bad Separation color space"); - goto err1; - } - if (!arr->get(1, &obj1)->isName()) { - error(-1, "Bad Separation color space (name)"); - goto err2; - } - nameA = new GooString(obj1.getName()); - obj1.free(); - arr->get(2, &obj1); - if (!(altA = GfxColorSpace::parse(&obj1, gfx))) { - error(-1, "Bad Separation color space (alternate color space)"); - goto err3; - } - obj1.free(); - arr->get(3, &obj1); - if (!(funcA = Function::parse(&obj1))) { - goto err4; - } - obj1.free(); - cs = new GfxSeparationColorSpace(nameA, altA, funcA); - return cs; - - err4: - delete altA; - err3: - delete nameA; - err2: - obj1.free(); - err1: - return NULL; -} - -void GfxSeparationColorSpace::getGray(GfxColor *color, GfxGray *gray) { - double x; - double c[gfxColorMaxComps]; - GfxColor color2; - int i; - - x = colToDbl(color->c[0]); - func->transform(&x, c); - for (i = 0; i < alt->getNComps(); ++i) { - color2.c[i] = dblToCol(c[i]); - } - alt->getGray(&color2, gray); -} - -void GfxSeparationColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - double x; - double c[gfxColorMaxComps]; - GfxColor color2; - int i; - - x = colToDbl(color->c[0]); - func->transform(&x, c); - for (i = 0; i < alt->getNComps(); ++i) { - color2.c[i] = dblToCol(c[i]); - } - alt->getRGB(&color2, rgb); -} - -void GfxSeparationColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { - double x; - double c[gfxColorMaxComps]; - GfxColor color2; - int i; - - x = colToDbl(color->c[0]); - func->transform(&x, c); - for (i = 0; i < alt->getNComps(); ++i) { - color2.c[i] = dblToCol(c[i]); - } - alt->getCMYK(&color2, cmyk); -} - -void GfxSeparationColorSpace::getDefaultColor(GfxColor *color) { - color->c[0] = gfxColorComp1; -} - -//------------------------------------------------------------------------ -// GfxDeviceNColorSpace -//------------------------------------------------------------------------ - -GfxDeviceNColorSpace::GfxDeviceNColorSpace(int nCompsA, - GfxColorSpace *altA, - Function *funcA) { - nComps = nCompsA; - alt = altA; - func = funcA; - nonMarking = gFalse; -} - -GfxDeviceNColorSpace::~GfxDeviceNColorSpace() { - int i; - - for (i = 0; i < nComps; ++i) { - delete names[i]; - } - delete alt; - delete func; -} - -GfxColorSpace *GfxDeviceNColorSpace::copy() { - GfxDeviceNColorSpace *cs; - int i; - - cs = new GfxDeviceNColorSpace(nComps, alt->copy(), func->copy()); - for (i = 0; i < nComps; ++i) { - cs->names[i] = names[i]->copy(); - } - cs->nonMarking = nonMarking; - return cs; -} - -//~ handle the 'None' colorant -GfxColorSpace *GfxDeviceNColorSpace::parse(Array *arr, Gfx *gfx) { - GfxDeviceNColorSpace *cs; - int nCompsA; - GooString *namesA[gfxColorMaxComps]; - GfxColorSpace *altA; - Function *funcA; - Object obj1, obj2; - int i; - - if (arr->getLength() != 4 && arr->getLength() != 5) { - error(-1, "Bad DeviceN color space"); - goto err1; - } - if (!arr->get(1, &obj1)->isArray()) { - error(-1, "Bad DeviceN color space (names)"); - goto err2; - } - nCompsA = obj1.arrayGetLength(); - if (nCompsA > gfxColorMaxComps) { - error(-1, "DeviceN color space with too many (%d > %d) components", - nCompsA, gfxColorMaxComps); - nCompsA = gfxColorMaxComps; - } - for (i = 0; i < nCompsA; ++i) { - if (!obj1.arrayGet(i, &obj2)->isName()) { - error(-1, "Bad DeviceN color space (names)"); - obj2.free(); - goto err2; - } - namesA[i] = new GooString(obj2.getName()); - obj2.free(); - } - obj1.free(); - arr->get(2, &obj1); - if (!(altA = GfxColorSpace::parse(&obj1, gfx))) { - error(-1, "Bad DeviceN color space (alternate color space)"); - goto err3; - } - obj1.free(); - arr->get(3, &obj1); - if (!(funcA = Function::parse(&obj1))) { - goto err4; - } - obj1.free(); - cs = new GfxDeviceNColorSpace(nCompsA, altA, funcA); - cs->nonMarking = gTrue; - for (i = 0; i < nCompsA; ++i) { - cs->names[i] = namesA[i]; - if (namesA[i]->cmp("None")) { - cs->nonMarking = gFalse; - } - } - return cs; - - err4: - delete altA; - err3: - for (i = 0; i < nCompsA; ++i) { - delete namesA[i]; - } - err2: - obj1.free(); - err1: - return NULL; -} - -void GfxDeviceNColorSpace::getGray(GfxColor *color, GfxGray *gray) { - double x[gfxColorMaxComps], c[gfxColorMaxComps]; - GfxColor color2; - int i; - - for (i = 0; i < nComps; ++i) { - x[i] = colToDbl(color->c[i]); - } - func->transform(x, c); - for (i = 0; i < alt->getNComps(); ++i) { - color2.c[i] = dblToCol(c[i]); - } - alt->getGray(&color2, gray); -} - -void GfxDeviceNColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - double x[gfxColorMaxComps], c[gfxColorMaxComps]; - GfxColor color2; - int i; - - for (i = 0; i < nComps; ++i) { - x[i] = colToDbl(color->c[i]); - } - func->transform(x, c); - for (i = 0; i < alt->getNComps(); ++i) { - color2.c[i] = dblToCol(c[i]); - } - alt->getRGB(&color2, rgb); -} - -void GfxDeviceNColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { - double x[gfxColorMaxComps], c[gfxColorMaxComps]; - GfxColor color2; - int i; - - for (i = 0; i < nComps; ++i) { - x[i] = colToDbl(color->c[i]); - } - func->transform(x, c); - for (i = 0; i < alt->getNComps(); ++i) { - color2.c[i] = dblToCol(c[i]); - } - alt->getCMYK(&color2, cmyk); -} - -void GfxDeviceNColorSpace::getDefaultColor(GfxColor *color) { - int i; - - for (i = 0; i < nComps; ++i) { - color->c[i] = gfxColorComp1; - } -} - -//------------------------------------------------------------------------ -// GfxPatternColorSpace -//------------------------------------------------------------------------ - -GfxPatternColorSpace::GfxPatternColorSpace(GfxColorSpace *underA) { - under = underA; -} - -GfxPatternColorSpace::~GfxPatternColorSpace() { - if (under) { - delete under; - } -} - -GfxColorSpace *GfxPatternColorSpace::copy() { - return new GfxPatternColorSpace(under ? under->copy() : - (GfxColorSpace *)NULL); -} - -GfxColorSpace *GfxPatternColorSpace::parse(Array *arr, Gfx *gfx) { - GfxPatternColorSpace *cs; - GfxColorSpace *underA; - Object obj1; - - if (arr->getLength() != 1 && arr->getLength() != 2) { - error(-1, "Bad Pattern color space"); - return NULL; - } - underA = NULL; - if (arr->getLength() == 2) { - arr->get(1, &obj1); - if (!(underA = GfxColorSpace::parse(&obj1, gfx))) { - error(-1, "Bad Pattern color space (underlying color space)"); - obj1.free(); - return NULL; - } - obj1.free(); - } - cs = new GfxPatternColorSpace(underA); - return cs; -} - -void GfxPatternColorSpace::getGray(GfxColor *color, GfxGray *gray) { - *gray = 0; -} - -void GfxPatternColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - rgb->r = rgb->g = rgb->b = 0; -} - -void GfxPatternColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { - cmyk->c = cmyk->m = cmyk->y = 0; - cmyk->k = 1; -} - -void GfxPatternColorSpace::getDefaultColor(GfxColor *color) { - color->c[0]=0; -} - -//------------------------------------------------------------------------ -// Pattern -//------------------------------------------------------------------------ - -GfxPattern::GfxPattern(int typeA) { - type = typeA; -} - -GfxPattern::~GfxPattern() { -} - -GfxPattern *GfxPattern::parse(Object *obj, Gfx *gfx) { - GfxPattern *pattern; - Object obj1; - - if (obj->isDict()) { - obj->dictLookup("PatternType", &obj1); - } else if (obj->isStream()) { - obj->streamGetDict()->lookup("PatternType", &obj1); - } else { - return NULL; - } - pattern = NULL; - if (obj1.isInt() && obj1.getInt() == 1) { - pattern = GfxTilingPattern::parse(obj); - } else if (obj1.isInt() && obj1.getInt() == 2) { - pattern = GfxShadingPattern::parse(obj, gfx); - } - obj1.free(); - return pattern; -} - -//------------------------------------------------------------------------ -// GfxTilingPattern -//------------------------------------------------------------------------ - -GfxTilingPattern *GfxTilingPattern::parse(Object *patObj) { - GfxTilingPattern *pat; - Dict *dict; - int paintTypeA, tilingTypeA; - double bboxA[4], matrixA[6]; - double xStepA, yStepA; - Object resDictA; - Object obj1, obj2; - int i; - - if (!patObj->isStream()) { - return NULL; - } - dict = patObj->streamGetDict(); - - if (dict->lookup("PaintType", &obj1)->isInt()) { - paintTypeA = obj1.getInt(); - } else { - paintTypeA = 1; - error(-1, "Invalid or missing PaintType in pattern"); - } - obj1.free(); - if (dict->lookup("TilingType", &obj1)->isInt()) { - tilingTypeA = obj1.getInt(); - } else { - tilingTypeA = 1; - error(-1, "Invalid or missing TilingType in pattern"); - } - obj1.free(); - bboxA[0] = bboxA[1] = 0; - bboxA[2] = bboxA[3] = 1; - if (dict->lookup("BBox", &obj1)->isArray() && - obj1.arrayGetLength() == 4) { - for (i = 0; i < 4; ++i) { - if (obj1.arrayGet(i, &obj2)->isNum()) { - bboxA[i] = obj2.getNum(); - } - obj2.free(); - } - } else { - error(-1, "Invalid or missing BBox in pattern"); - } - obj1.free(); - if (dict->lookup("XStep", &obj1)->isNum()) { - xStepA = obj1.getNum(); - } else { - xStepA = 1; - error(-1, "Invalid or missing XStep in pattern"); - } - obj1.free(); - if (dict->lookup("YStep", &obj1)->isNum()) { - yStepA = obj1.getNum(); - } else { - yStepA = 1; - error(-1, "Invalid or missing YStep in pattern"); - } - obj1.free(); - if (!dict->lookup("Resources", &resDictA)->isDict()) { - resDictA.free(); - resDictA.initNull(); - error(-1, "Invalid or missing Resources in pattern"); - } - matrixA[0] = 1; matrixA[1] = 0; - matrixA[2] = 0; matrixA[3] = 1; - matrixA[4] = 0; matrixA[5] = 0; - if (dict->lookup("Matrix", &obj1)->isArray() && - obj1.arrayGetLength() == 6) { - for (i = 0; i < 6; ++i) { - if (obj1.arrayGet(i, &obj2)->isNum()) { - matrixA[i] = obj2.getNum(); - } - obj2.free(); - } - } - obj1.free(); - - pat = new GfxTilingPattern(paintTypeA, tilingTypeA, bboxA, xStepA, yStepA, - &resDictA, matrixA, patObj); - resDictA.free(); - return pat; -} - -GfxTilingPattern::GfxTilingPattern(int paintTypeA, int tilingTypeA, - double *bboxA, double xStepA, double yStepA, - Object *resDictA, double *matrixA, - Object *contentStreamA): - GfxPattern(1) -{ - int i; - - paintType = paintTypeA; - tilingType = tilingTypeA; - for (i = 0; i < 4; ++i) { - bbox[i] = bboxA[i]; - } - xStep = xStepA; - yStep = yStepA; - resDictA->copy(&resDict); - for (i = 0; i < 6; ++i) { - matrix[i] = matrixA[i]; - } - contentStreamA->copy(&contentStream); -} - -GfxTilingPattern::~GfxTilingPattern() { - resDict.free(); - contentStream.free(); -} - -GfxPattern *GfxTilingPattern::copy() { - return new GfxTilingPattern(paintType, tilingType, bbox, xStep, yStep, - &resDict, matrix, &contentStream); -} - -//------------------------------------------------------------------------ -// GfxShadingPattern -//------------------------------------------------------------------------ - -GfxShadingPattern *GfxShadingPattern::parse(Object *patObj, Gfx *gfx) { - Dict *dict; - GfxShading *shadingA; - double matrixA[6]; - Object obj1, obj2; - int i; - - if (!patObj->isDict()) { - return NULL; - } - dict = patObj->getDict(); - - dict->lookup("Shading", &obj1); - shadingA = GfxShading::parse(&obj1, gfx); - obj1.free(); - if (!shadingA) { - return NULL; - } - - matrixA[0] = 1; matrixA[1] = 0; - matrixA[2] = 0; matrixA[3] = 1; - matrixA[4] = 0; matrixA[5] = 0; - if (dict->lookup("Matrix", &obj1)->isArray() && - obj1.arrayGetLength() == 6) { - for (i = 0; i < 6; ++i) { - if (obj1.arrayGet(i, &obj2)->isNum()) { - matrixA[i] = obj2.getNum(); - } - obj2.free(); - } - } - obj1.free(); - - return new GfxShadingPattern(shadingA, matrixA); -} - -GfxShadingPattern::GfxShadingPattern(GfxShading *shadingA, double *matrixA): - GfxPattern(2) -{ - int i; - - shading = shadingA; - for (i = 0; i < 6; ++i) { - matrix[i] = matrixA[i]; - } -} - -GfxShadingPattern::~GfxShadingPattern() { - delete shading; -} - -GfxPattern *GfxShadingPattern::copy() { - return new GfxShadingPattern(shading->copy(), matrix); -} - -//------------------------------------------------------------------------ -// GfxShading -//------------------------------------------------------------------------ - -GfxShading::GfxShading(int typeA) { - type = typeA; - colorSpace = NULL; -} - -GfxShading::GfxShading(GfxShading *shading) { - int i; - - type = shading->type; - colorSpace = shading->colorSpace->copy(); - for (i = 0; i < gfxColorMaxComps; ++i) { - background.c[i] = shading->background.c[i]; - } - hasBackground = shading->hasBackground; - xMin = shading->xMin; - yMin = shading->yMin; - xMax = shading->xMax; - yMax = shading->yMax; - hasBBox = shading->hasBBox; -} - -GfxShading::~GfxShading() { - if (colorSpace) { - delete colorSpace; - } -} - -GfxShading *GfxShading::parse(Object *obj, Gfx *gfx) { - GfxShading *shading; - Dict *dict; - int typeA; - Object obj1; - - if (obj->isDict()) { - dict = obj->getDict(); - } else if (obj->isStream()) { - dict = obj->streamGetDict(); - } else { - return NULL; - } - - if (!dict->lookup("ShadingType", &obj1)->isInt()) { - error(-1, "Invalid ShadingType in shading dictionary"); - obj1.free(); - return NULL; - } - typeA = obj1.getInt(); - obj1.free(); - - switch (typeA) { - case 1: - shading = GfxFunctionShading::parse(dict, gfx); - break; - case 2: - shading = GfxAxialShading::parse(dict, gfx); - break; - case 3: - shading = GfxRadialShading::parse(dict, gfx); - break; - case 4: - if (obj->isStream()) { - shading = GfxGouraudTriangleShading::parse(4, dict, obj->getStream(), gfx); - } else { - error(-1, "Invalid Type 4 shading object"); - goto err1; - } - break; - case 5: - if (obj->isStream()) { - shading = GfxGouraudTriangleShading::parse(5, dict, obj->getStream(), gfx); - } else { - error(-1, "Invalid Type 5 shading object"); - goto err1; - } - break; - case 6: - if (obj->isStream()) { - shading = GfxPatchMeshShading::parse(6, dict, obj->getStream(), gfx); - } else { - error(-1, "Invalid Type 6 shading object"); - goto err1; - } - break; - case 7: - if (obj->isStream()) { - shading = GfxPatchMeshShading::parse(7, dict, obj->getStream(), gfx); - } else { - error(-1, "Invalid Type 7 shading object"); - goto err1; - } - break; - default: - error(-1, "Unimplemented shading type %d", typeA); - goto err1; - } - - return shading; - - err1: - return NULL; -} - -GBool GfxShading::init(Dict *dict, Gfx *gfx) { - Object obj1, obj2; - int i; - - dict->lookup("ColorSpace", &obj1); - if (!(colorSpace = GfxColorSpace::parse(&obj1, gfx))) { - error(-1, "Bad color space in shading dictionary"); - obj1.free(); - return gFalse; - } - obj1.free(); - - for (i = 0; i < gfxColorMaxComps; ++i) { - background.c[i] = 0; - } - hasBackground = gFalse; - if (dict->lookup("Background", &obj1)->isArray()) { - if (obj1.arrayGetLength() == colorSpace->getNComps()) { - hasBackground = gTrue; - for (i = 0; i < colorSpace->getNComps(); ++i) { - background.c[i] = dblToCol(obj1.arrayGet(i, &obj2)->getNum()); - obj2.free(); - } - } else { - error(-1, "Bad Background in shading dictionary"); - } - } - obj1.free(); - - xMin = yMin = xMax = yMax = 0; - hasBBox = gFalse; - if (dict->lookup("BBox", &obj1)->isArray()) { - if (obj1.arrayGetLength() == 4) { - Object obj3, obj4, obj5; - obj1.arrayGet(0, &obj2); - obj1.arrayGet(1, &obj3); - obj1.arrayGet(2, &obj4); - obj1.arrayGet(3, &obj5); - if (obj2.isNum() && obj3.isNum() && obj4.isNum() && obj5.isNum()) - { - hasBBox = gTrue; - xMin = obj2.getNum(); - yMin = obj3.getNum(); - xMax = obj4.getNum(); - yMax = obj5.getNum(); - } else { - error(-1, "Bad BBox in shading dictionary (Values not numbers)"); - } - obj2.free(); - obj3.free(); - obj4.free(); - obj5.free(); - } else { - error(-1, "Bad BBox in shading dictionary"); - } - } - obj1.free(); - - return gTrue; -} - -//------------------------------------------------------------------------ -// GfxFunctionShading -//------------------------------------------------------------------------ - -GfxFunctionShading::GfxFunctionShading(double x0A, double y0A, - double x1A, double y1A, - double *matrixA, - Function **funcsA, int nFuncsA): - GfxShading(1) -{ - int i; - - x0 = x0A; - y0 = y0A; - x1 = x1A; - y1 = y1A; - for (i = 0; i < 6; ++i) { - matrix[i] = matrixA[i]; - } - nFuncs = nFuncsA; - for (i = 0; i < nFuncs; ++i) { - funcs[i] = funcsA[i]; - } -} - -GfxFunctionShading::GfxFunctionShading(GfxFunctionShading *shading): - GfxShading(shading) -{ - int i; - - x0 = shading->x0; - y0 = shading->y0; - x1 = shading->x1; - y1 = shading->y1; - for (i = 0; i < 6; ++i) { - matrix[i] = shading->matrix[i]; - } - nFuncs = shading->nFuncs; - for (i = 0; i < nFuncs; ++i) { - funcs[i] = shading->funcs[i]->copy(); - } -} - -GfxFunctionShading::~GfxFunctionShading() { - int i; - - for (i = 0; i < nFuncs; ++i) { - delete funcs[i]; - } -} - -GfxFunctionShading *GfxFunctionShading::parse(Dict *dict, Gfx *gfx) { - GfxFunctionShading *shading; - double x0A, y0A, x1A, y1A; - double matrixA[6]; - Function *funcsA[gfxColorMaxComps]; - int nFuncsA; - Object obj1, obj2; - int i; - - x0A = y0A = 0; - x1A = y1A = 1; - if (dict->lookup("Domain", &obj1)->isArray() && - obj1.arrayGetLength() == 4) { - x0A = obj1.arrayGet(0, &obj2)->getNum(); - obj2.free(); - x1A = obj1.arrayGet(1, &obj2)->getNum(); - obj2.free(); - y0A = obj1.arrayGet(2, &obj2)->getNum(); - obj2.free(); - y1A = obj1.arrayGet(3, &obj2)->getNum(); - obj2.free(); - } - obj1.free(); - - matrixA[0] = 1; matrixA[1] = 0; - matrixA[2] = 0; matrixA[3] = 1; - matrixA[4] = 0; matrixA[5] = 0; - if (dict->lookup("Matrix", &obj1)->isArray() && - obj1.arrayGetLength() == 6) { - matrixA[0] = obj1.arrayGet(0, &obj2)->getNum(); - obj2.free(); - matrixA[1] = obj1.arrayGet(1, &obj2)->getNum(); - obj2.free(); - matrixA[2] = obj1.arrayGet(2, &obj2)->getNum(); - obj2.free(); - matrixA[3] = obj1.arrayGet(3, &obj2)->getNum(); - obj2.free(); - matrixA[4] = obj1.arrayGet(4, &obj2)->getNum(); - obj2.free(); - matrixA[5] = obj1.arrayGet(5, &obj2)->getNum(); - obj2.free(); - } - obj1.free(); - - dict->lookup("Function", &obj1); - if (obj1.isArray()) { - nFuncsA = obj1.arrayGetLength(); - if (nFuncsA > gfxColorMaxComps) { - error(-1, "Invalid Function array in shading dictionary"); - goto err1; - } - for (i = 0; i < nFuncsA; ++i) { - obj1.arrayGet(i, &obj2); - if (!(funcsA[i] = Function::parse(&obj2))) { - goto err2; - } - obj2.free(); - } - } else { - nFuncsA = 1; - if (!(funcsA[0] = Function::parse(&obj1))) { - goto err1; - } - } - obj1.free(); - - shading = new GfxFunctionShading(x0A, y0A, x1A, y1A, matrixA, - funcsA, nFuncsA); - if (!shading->init(dict, gfx)) { - delete shading; - return NULL; - } - return shading; - - err2: - obj2.free(); - err1: - obj1.free(); - return NULL; -} - -GfxShading *GfxFunctionShading::copy() { - return new GfxFunctionShading(this); -} - -void GfxFunctionShading::getColor(double x, double y, GfxColor *color) { - double in[2], out[gfxColorMaxComps]; - int i; - - // NB: there can be one function with n outputs or n functions with - // one output each (where n = number of color components) - for (i = 0; i < gfxColorMaxComps; ++i) { - out[i] = 0; - } - in[0] = x; - in[1] = y; - for (i = 0; i < nFuncs; ++i) { - funcs[i]->transform(in, &out[i]); - } - for (i = 0; i < gfxColorMaxComps; ++i) { - color->c[i] = dblToCol(out[i]); - } -} - -//------------------------------------------------------------------------ -// GfxUnivariateShading -//------------------------------------------------------------------------ - -GfxUnivariateShading::GfxUnivariateShading(int typeA, - double t0A, double t1A, - Function **funcsA, int nFuncsA, - GBool extend0A, GBool extend1A): - GfxShading(typeA) -{ - int i; - - t0 = t0A; - t1 = t1A; - nFuncs = nFuncsA; - for (i = 0; i < nFuncs; ++i) { - funcs[i] = funcsA[i]; - } - extend0 = extend0A; - extend1 = extend1A; - - cacheSize = 0; - lastMatch = 0; - cacheBounds = NULL; - cacheCoeff = NULL; - cacheValues = NULL; -} - -GfxUnivariateShading::GfxUnivariateShading(GfxUnivariateShading *shading): - GfxShading(shading) -{ - int i; - - t0 = shading->t0; - t1 = shading->t1; - nFuncs = shading->nFuncs; - for (i = 0; i < nFuncs; ++i) { - funcs[i] = shading->funcs[i]->copy(); - } - extend0 = shading->extend0; - extend1 = shading->extend1; - - cacheSize = 0; - lastMatch = 0; - cacheBounds = NULL; - cacheCoeff = NULL; - cacheValues = NULL; -} - -GfxUnivariateShading::~GfxUnivariateShading() { - int i; - - for (i = 0; i < nFuncs; ++i) { - delete funcs[i]; - } - - gfree (cacheBounds); -} - -void GfxUnivariateShading::getColor(double t, GfxColor *color) { - double out[gfxColorMaxComps]; - int i, nComps; - - // NB: there can be one function with n outputs or n functions with - // one output each (where n = number of color components) - nComps = nFuncs * funcs[0]->getOutputSize(); - - if (cacheSize > 0) { - double x, ix, *l, *u, *upper; - - if (cacheBounds[lastMatch - 1] >= t) { - upper = std::lower_bound (cacheBounds, cacheBounds + lastMatch - 1, t); - lastMatch = upper - cacheBounds; - lastMatch = std::min<int>(std::max<int>(1, lastMatch), cacheSize - 1); - } else if (cacheBounds[lastMatch] < t) { - upper = std::lower_bound (cacheBounds + lastMatch + 1, cacheBounds + cacheSize, t); - lastMatch = upper - cacheBounds; - lastMatch = std::min<int>(std::max<int>(1, lastMatch), cacheSize - 1); - } - - x = (t - cacheBounds[lastMatch-1]) * cacheCoeff[lastMatch]; - ix = 1.0 - x; - u = cacheValues + lastMatch * nComps; - l = u - nComps; - - for (i = 0; i < nComps; ++i) { - out[i] = ix * l[i] + x * u[i]; - } - } else { - for (i = 0; i < nComps; ++i) { - out[i] = 0; - } - for (i = 0; i < nFuncs; ++i) { - funcs[i]->transform(&t, &out[i]); - } - } - - for (i = 0; i < nComps; ++i) { - color->c[i] = dblToCol(out[i]); - } -} - -void GfxUnivariateShading::setupCache(const Matrix *ctm, - double xMin, double yMin, - double xMax, double yMax) { - double sMin, sMax, tMin, tMax, upperBound; - int i, j, nComps, maxSize; - - gfree (cacheBounds); - cacheBounds = NULL; - cacheSize = 0; - - // NB: there can be one function with n outputs or n functions with - // one output each (where n = number of color components) - nComps = nFuncs * funcs[0]->getOutputSize(); - - getParameterRange(&sMin, &sMax, xMin, yMin, xMax, yMax); - upperBound = ctm->norm() * getDistance(sMin, sMax); - maxSize = (int)ceil(upperBound); - maxSize = std::max<int>(maxSize, 2); - - { - double x[4], y[4]; - - ctm->transform(xMin, yMin, &x[0], &y[0]); - ctm->transform(xMax, yMin, &x[1], &y[1]); - ctm->transform(xMin, yMax, &x[2], &y[2]); - ctm->transform(xMax, yMax, &x[3], &y[3]); - - xMin = xMax = x[0]; - yMin = yMax = y[0]; - for (i = 1; i < 4; i++) { - xMin = std::min<double>(xMin, x[i]); - yMin = std::min<double>(yMin, y[i]); - xMax = std::max<double>(xMax, x[i]); - yMax = std::max<double>(yMax, y[i]); - } - } - - if (maxSize > (xMax-xMin) * (yMax-yMin)) { - return; - } - - if (t0 < t1) { - tMin = t0 + sMin * (t1 - t0); - tMax = t0 + sMax * (t1 - t0); - } else { - tMin = t0 + sMax * (t1 - t0); - tMax = t0 + sMin * (t1 - t0); - } - - cacheBounds = (double *)gmallocn(maxSize, sizeof(double) * (nComps + 2)); - cacheCoeff = cacheBounds + maxSize; - cacheValues = cacheCoeff + maxSize; - - if (cacheSize != 0) { - for (j = 0; j < cacheSize; ++j) { - cacheCoeff[j] = 1 / (cacheBounds[j+1] - cacheBounds[j]); - } - } else if (tMax != tMin) { - double step = (tMax - tMin) / (maxSize - 1); - double coeff = (maxSize - 1) / (tMax - tMin); - - cacheSize = maxSize; - - for (j = 0; j < cacheSize; ++j) { - cacheBounds[j] = tMin + j * step; - cacheCoeff[j] = coeff; - - for (i = 0; i < nComps; ++i) { - cacheValues[j*nComps + i] = 0; - } - for (i = 0; i < nFuncs; ++i) { - funcs[i]->transform(&cacheBounds[j], &cacheValues[j*nComps + i]); - } - } - } - - lastMatch = 1; -} - - -//------------------------------------------------------------------------ -// GfxAxialShading -//------------------------------------------------------------------------ - -GfxAxialShading::GfxAxialShading(double x0A, double y0A, - double x1A, double y1A, - double t0A, double t1A, - Function **funcsA, int nFuncsA, - GBool extend0A, GBool extend1A): - GfxUnivariateShading(2, t0A, t1A, funcsA, nFuncsA, extend0A, extend1A) -{ - x0 = x0A; - y0 = y0A; - x1 = x1A; - y1 = y1A; -} - -GfxAxialShading::GfxAxialShading(GfxAxialShading *shading): - GfxUnivariateShading(shading) -{ - x0 = shading->x0; - y0 = shading->y0; - x1 = shading->x1; - y1 = shading->y1; -} - -GfxAxialShading::~GfxAxialShading() { -} - -GfxAxialShading *GfxAxialShading::parse(Dict *dict, Gfx *gfx) { - GfxAxialShading *shading; - double x0A, y0A, x1A, y1A; - double t0A, t1A; - Function *funcsA[gfxColorMaxComps]; - int nFuncsA; - GBool extend0A, extend1A; - Object obj1, obj2; - int i; - - x0A = y0A = x1A = y1A = 0; - if (dict->lookup("Coords", &obj1)->isArray() && - obj1.arrayGetLength() == 4) { - Object obj3, obj4, obj5; - obj1.arrayGet(0, &obj2); - obj1.arrayGet(1, &obj3); - obj1.arrayGet(2, &obj4); - obj1.arrayGet(3, &obj5); - if (obj2.isNum() && obj3.isNum() && obj4.isNum() && obj5.isNum()) { - x0A = obj2.getNum(); - y0A = obj3.getNum(); - x1A = obj4.getNum(); - y1A = obj5.getNum(); - } - obj2.free(); - obj3.free(); - obj4.free(); - obj5.free(); - } else { - error(-1, "Missing or invalid Coords in shading dictionary"); - goto err1; - } - obj1.free(); - - t0A = 0; - t1A = 1; - if (dict->lookup("Domain", &obj1)->isArray() && - obj1.arrayGetLength() == 2) { - Object obj3; - obj1.arrayGet(0, &obj2); - obj1.arrayGet(1, &obj3); - if (obj2.isNum() && obj3.isNum()) { - t0A = obj2.getNum(); - t1A = obj3.getNum(); - } - obj2.free(); - obj3.free(); - } - obj1.free(); - - dict->lookup("Function", &obj1); - if (obj1.isArray()) { - nFuncsA = obj1.arrayGetLength(); - if (nFuncsA > gfxColorMaxComps) { - error(-1, "Invalid Function array in shading dictionary"); - goto err1; - } - for (i = 0; i < nFuncsA; ++i) { - obj1.arrayGet(i, &obj2); - if (!(funcsA[i] = Function::parse(&obj2))) { - obj1.free(); - obj2.free(); - goto err1; - } - obj2.free(); - } - } else { - nFuncsA = 1; - if (!(funcsA[0] = Function::parse(&obj1))) { - obj1.free(); - goto err1; - } - } - obj1.free(); - - extend0A = extend1A = gFalse; - if (dict->lookup("Extend", &obj1)->isArray() && - obj1.arrayGetLength() == 2) { - extend0A = obj1.arrayGet(0, &obj2)->getBool(); - obj2.free(); - extend1A = obj1.arrayGet(1, &obj2)->getBool(); - obj2.free(); - } - obj1.free(); - - shading = new GfxAxialShading(x0A, y0A, x1A, y1A, t0A, t1A, - funcsA, nFuncsA, extend0A, extend1A); - if (!shading->init(dict, gfx)) { - delete shading; - return NULL; - } - return shading; - - err1: - return NULL; -} - -GfxShading *GfxAxialShading::copy() { - return new GfxAxialShading(this); -} - -double GfxAxialShading::getDistance(double sMin, double sMax) { - double xMin, yMin, xMax, yMax; - - xMin = x0 + sMin * (x1 - x0); - yMin = y0 + sMin * (y1 - y0); - xMax = x0 + sMax * (x1 - x0); - yMax = y0 + sMax * (y1 - y0); - - return hypot(xMax-xMin, yMax-yMin); -} - -void GfxAxialShading::getParameterRange(double *lower, double *upper, - double xMin, double yMin, - double xMax, double yMax) { - double pdx, pdy, invsqnorm, tdx, tdy, t, range[2]; - - // Linear gradients are orthogonal to the line passing through their - // extremes. Because of convexity, the parameter range can be - // computed as the convex hull (one the real line) of the parameter - // values of the 4 corners of the box. - // - // The parameter value t for a point (x,y) can be computed as: - // - // t = (p2 - p1) . (x,y) / |p2 - p1|^2 - // - // t0 is the t value for the top left corner - // tdx is the difference between left and right corners - // tdy is the difference between top and bottom corners - - pdx = x1 - x0; - pdy = y1 - y0; - invsqnorm = 1.0 / (pdx * pdx + pdy * pdy); - pdx *= invsqnorm; - pdy *= invsqnorm; - - t = (xMin - x0) * pdx + (yMin - y0) * pdy; - tdx = (xMax - xMin) * pdx; - tdy = (yMax - yMin) * pdy; - - // Because of the linearity of the t value, tdx can simply be added - // the t0 to move along the top edge. After this, *lower and *upper - // represent the parameter range for the top edge, so extending it - // to include the whole box simply requires adding tdy to the - // correct extreme. - - range[0] = range[1] = t; - if (tdx < 0) - range[0] += tdx; - else - range[1] += tdx; - - if (tdy < 0) - range[0] += tdy; - else - range[1] += tdy; - - *lower = std::max<double>(0., std::min<double>(1., range[0])); - *upper = std::max<double>(0., std::min<double>(1., range[1])); -} - -//------------------------------------------------------------------------ -// GfxRadialShading -//------------------------------------------------------------------------ - -#ifndef RADIAL_EPSILON -#define RADIAL_EPSILON (1. / 1024 / 1024) -#endif - -GfxRadialShading::GfxRadialShading(double x0A, double y0A, double r0A, - double x1A, double y1A, double r1A, - double t0A, double t1A, - Function **funcsA, int nFuncsA, - GBool extend0A, GBool extend1A): - GfxUnivariateShading(3, t0A, t1A, funcsA, nFuncsA, extend0A, extend1A) -{ - x0 = x0A; - y0 = y0A; - r0 = r0A; - x1 = x1A; - y1 = y1A; - r1 = r1A; -} - -GfxRadialShading::GfxRadialShading(GfxRadialShading *shading): - GfxUnivariateShading(shading) -{ - x0 = shading->x0; - y0 = shading->y0; - r0 = shading->r0; - x1 = shading->x1; - y1 = shading->y1; - r1 = shading->r1; -} - -GfxRadialShading::~GfxRadialShading() { -} - -GfxRadialShading *GfxRadialShading::parse(Dict *dict, Gfx *gfx) { - GfxRadialShading *shading; - double x0A, y0A, r0A, x1A, y1A, r1A; - double t0A, t1A; - Function *funcsA[gfxColorMaxComps]; - int nFuncsA; - GBool extend0A, extend1A; - Object obj1, obj2; - int i; - - x0A = y0A = r0A = x1A = y1A = r1A = 0; - if (dict->lookup("Coords", &obj1)->isArray() && - obj1.arrayGetLength() == 6) { - x0A = obj1.arrayGet(0, &obj2)->getNum(); - obj2.free(); - y0A = obj1.arrayGet(1, &obj2)->getNum(); - obj2.free(); - r0A = obj1.arrayGet(2, &obj2)->getNum(); - obj2.free(); - x1A = obj1.arrayGet(3, &obj2)->getNum(); - obj2.free(); - y1A = obj1.arrayGet(4, &obj2)->getNum(); - obj2.free(); - r1A = obj1.arrayGet(5, &obj2)->getNum(); - obj2.free(); - } else { - error(-1, "Missing or invalid Coords in shading dictionary"); - goto err1; - } - obj1.free(); - - t0A = 0; - t1A = 1; - if (dict->lookup("Domain", &obj1)->isArray() && - obj1.arrayGetLength() == 2) { - t0A = obj1.arrayGet(0, &obj2)->getNum(); - obj2.free(); - t1A = obj1.arrayGet(1, &obj2)->getNum(); - obj2.free(); - } - obj1.free(); - - dict->lookup("Function", &obj1); - if (obj1.isArray()) { - nFuncsA = obj1.arrayGetLength(); - if (nFuncsA > gfxColorMaxComps) { - error(-1, "Invalid Function array in shading dictionary"); - goto err1; - } - for (i = 0; i < nFuncsA; ++i) { - obj1.arrayGet(i, &obj2); - if (!(funcsA[i] = Function::parse(&obj2))) { - obj1.free(); - obj2.free(); - goto err1; - } - obj2.free(); - } - } else { - nFuncsA = 1; - if (!(funcsA[0] = Function::parse(&obj1))) { - obj1.free(); - goto err1; - } - } - obj1.free(); - - extend0A = extend1A = gFalse; - if (dict->lookup("Extend", &obj1)->isArray() && - obj1.arrayGetLength() == 2) { - extend0A = obj1.arrayGet(0, &obj2)->getBool(); - obj2.free(); - extend1A = obj1.arrayGet(1, &obj2)->getBool(); - obj2.free(); - } - obj1.free(); - - shading = new GfxRadialShading(x0A, y0A, r0A, x1A, y1A, r1A, t0A, t1A, - funcsA, nFuncsA, extend0A, extend1A); - if (!shading->init(dict, gfx)) { - delete shading; - return NULL; - } - return shading; - - err1: - return NULL; -} - -GfxShading *GfxRadialShading::copy() { - return new GfxRadialShading(this); -} - -double GfxRadialShading::getDistance(double sMin, double sMax) { - double xMin, yMin, rMin, xMax, yMax, rMax; - - xMin = x0 + sMin * (x1 - x0); - yMin = y0 + sMin * (y1 - y0); - rMin = r0 + sMin * (r1 - r0); - - xMax = x0 + sMax * (x1 - x0); - yMax = y0 + sMax * (y1 - y0); - rMax = r0 + sMax * (r1 - r0); - - return hypot(xMax-xMin, yMax-yMin) + fabs(rMax-rMin); -} - -// extend range, adapted from cairo, radialExtendRange -static GBool -radialExtendRange (double range[2], double value, GBool valid) -{ - if (!valid) - range[0] = range[1] = value; - else if (value < range[0]) - range[0] = value; - else if (value > range[1]) - range[1] = value; - - return gTrue; -} - -inline void radialEdge(double num, double den, double delta, double lower, double upper, - double dr, double mindr, GBool &valid, double *range) -{ - if (fabs (den) >= RADIAL_EPSILON) { - double t_edge, v; - t_edge = (num) / (den); - v = t_edge * (delta); - if (t_edge * dr >= mindr && (lower) <= v && v <= (upper)) - valid = radialExtendRange (range, t_edge, valid); - } -} - -inline void radialCorner1(double x, double y, double &b, double dx, double dy, double cr, - double dr, double mindr, GBool &valid, double *range) -{ - b = (x) * dx + (y) * dy + cr * dr; - if (fabs (b) >= RADIAL_EPSILON) { - double t_corner; - double x2 = (x) * (x); - double y2 = (y) * (y); - double cr2 = (cr) * (cr); - double c = x2 + y2 - cr2; - - t_corner = 0.5 * c / b; - if (t_corner * dr >= mindr) - valid = radialExtendRange (range, t_corner, valid); - } -} - -inline void radialCorner2(double x, double y, double a, double &b, double &c, double &d, double dx, double dy, double cr, - double inva, double dr, double mindr, GBool &valid, double *range) -{ - b = (x) * dx + (y) * dy + cr * dr; - c = (x) * (x) + (y) * (y) - cr * cr; - d = b * b - a * c; - if (d >= 0) { - double t_corner; - - d = sqrt (d); - t_corner = (b + d) * inva; - if (t_corner * dr >= mindr) - valid = radialExtendRange (range, t_corner, valid); - t_corner = (b - d) * inva; - if (t_corner * dr >= mindr) - valid = radialExtendRange (range, t_corner, valid); - } -} -void GfxRadialShading::getParameterRange(double *lower, double *upper, - double xMin, double yMin, - double xMax, double yMax) { - double cx, cy, cr, dx, dy, dr; - double a, x_focus, y_focus; - double mindr, minx, miny, maxx, maxy; - double range[2]; - GBool valid; - - // A radial pattern is considered degenerate if it can be - // represented as a solid or clear pattern. This corresponds to one - // of the two cases: - // - // 1) The radii are both very small: - // |dr| < FLT_EPSILON && min (r0, r1) < FLT_EPSILON - // - // 2) The two circles have about the same radius and are very - // close to each other (approximately a cylinder gradient that - // doesn't move with the parameter): - // |dr| < FLT_EPSILON && max (|dx|, |dy|) < 2 * FLT_EPSILON - - if (xMin >= xMax || yMin >=yMax || - (fabs (r0 - r1) < RADIAL_EPSILON && - (std::min<double>(r0, r1) < RADIAL_EPSILON || - std::max<double>(fabs (x0 - x1), fabs (y0 - y1)) < 2 * RADIAL_EPSILON))) { - *lower = *upper = 0; - return; - } - - range[0] = range[1] = 0; - valid = gFalse; - - x_focus = y_focus = 0; // silence gcc - - cx = x0; - cy = y0; - cr = r0; - dx = x1 - cx; - dy = y1 - cy; - dr = r1 - cr; - - // translate by -(cx, cy) to simplify computations - xMin -= cx; - yMin -= cy; - xMax -= cx; - yMax -= cy; - - // enlarge boundaries slightly to avoid rounding problems in the - // parameter range computation - xMin -= RADIAL_EPSILON; - yMin -= RADIAL_EPSILON; - xMax += RADIAL_EPSILON; - yMax += RADIAL_EPSILON; - - // enlarge boundaries even more to avoid rounding problems when - // testing if a point belongs to the box - minx = xMin - RADIAL_EPSILON; - miny = yMin - RADIAL_EPSILON; - maxx = xMax + RADIAL_EPSILON; - maxy = yMax + RADIAL_EPSILON; - - // we dont' allow negative radiuses, so we will be checking that - // t*dr >= mindr to consider t valid - mindr = -(cr + RADIAL_EPSILON); - - // After the previous transformations, the start circle is centered - // in the origin and has radius cr. A 1-unit change in the t - // parameter corresponds to dx,dy,dr changes in the x,y,r of the - // circle (center coordinates, radius). - // - // To compute the minimum range needed to correctly draw the - // pattern, we start with an empty range and extend it to include - // the circles touching the bounding box or within it. - - // Focus, the point where the circle has radius == 0. - // - // r = cr + t * dr = 0 - // t = -cr / dr - // - // If the radius is constant (dr == 0) there is no focus (the - // gradient represents a cylinder instead of a cone). - if (fabs (dr) >= RADIAL_EPSILON) { - double t_focus; - - t_focus = -cr / dr; - x_focus = t_focus * dx; - y_focus = t_focus * dy; - if (minx <= x_focus && x_focus <= maxx && - miny <= y_focus && y_focus <= maxy) - { - valid = radialExtendRange (range, t_focus, valid); - } - } - - // Circles externally tangent to box edges. - // - // All circles have center in (dx, dy) * t - // - // If the circle is tangent to the line defined by the edge of the - // box, then at least one of the following holds true: - // - // (dx*t) + (cr + dr*t) == x0 (left edge) - // (dx*t) - (cr + dr*t) == x1 (right edge) - // (dy*t) + (cr + dr*t) == y0 (top edge) - // (dy*t) - (cr + dr*t) == y1 (bottom edge) - // - // The solution is only valid if the tangent point is actually on - // the edge, i.e. if its y coordinate is in [y0,y1] for left/right - // edges and if its x coordinate is in [x0,x1] for top/bottom edges. - // - // For the first equation: - // - // (dx + dr) * t = x0 - cr - // t = (x0 - cr) / (dx + dr) - // y = dy * t - // - // in the code this becomes: - // - // t_edge = (num) / (den) - // v = (delta) * t_edge - // - // If the denominator in t is 0, the pattern is tangent to a line - // parallel to the edge under examination. The corner-case where the - // boundary line is the same as the edge is handled by the focus - // point case and/or by the a==0 case. - - // circles tangent (externally) to left/right/top/bottom edge - radialEdge(xMin - cr, dx + dr, dy, miny, maxy, dr, mindr, valid, range); - radialEdge(xMax + cr, dx - dr, dy, miny, maxy, dr, mindr, valid, range); - radialEdge(yMin - cr, dy + dr, dx, minx, maxx, dr, mindr, valid, range); - radialEdge(yMax + cr, dy - dr, dx, minx, maxx, dr, mindr, valid, range); - - // Circles passing through a corner. - // - // A circle passing through the point (x,y) satisfies: - // - // (x-t*dx)^2 + (y-t*dy)^2 == (cr + t*dr)^2 - // - // If we set: - // a = dx^2 + dy^2 - dr^2 - // b = x*dx + y*dy + cr*dr - // c = x^2 + y^2 - cr^2 - // we have: - // a*t^2 - 2*b*t + c == 0 - - a = dx * dx + dy * dy - dr * dr; - if (fabs (a) < RADIAL_EPSILON * RADIAL_EPSILON) { - double b; - - // Ensure that gradients with both a and dr small are - // considered degenerate. - // The floating point version of the degeneracy test implemented - // in _radial_pattern_is_degenerate() is: - // - // 1) The circles are practically the same size: - // |dr| < RADIAL_EPSILON - // AND - // 2a) The circles are both very small: - // min (r0, r1) < RADIAL_EPSILON - // OR - // 2b) The circles are very close to each other: - // max (|dx|, |dy|) < 2 * RADIAL_EPSILON - // - // Assuming that the gradient is not degenerate, we want to - // show that |a| < RADIAL_EPSILON^2 implies |dr| >= RADIAL_EPSILON. - // - // If the gradient is not degenerate yet it has |dr| < - // RADIAL_EPSILON, (2b) is false, thus: - // - // max (|dx|, |dy|) >= 2*RADIAL_EPSILON - // which implies: - // 4*RADIAL_EPSILON^2 <= max (|dx|, |dy|)^2 <= dx^2 + dy^2 - // - // From the definition of a, we get: - // a = dx^2 + dy^2 - dr^2 < RADIAL_EPSILON^2 - // dx^2 + dy^2 - RADIAL_EPSILON^2 < dr^2 - // 3*RADIAL_EPSILON^2 < dr^2 - // - // which is inconsistent with the hypotheses, thus |dr| < - // RADIAL_EPSILON is false or the gradient is degenerate. - - assert (fabs (dr) >= RADIAL_EPSILON); - - // If a == 0, all the circles are tangent to a line in the - // focus point. If this line is within the box extents, we - // should add the circle with infinite radius, but this would - // make the range unbounded. We will be limiting the range to - // [0,1] anyway, so we simply add the biggest legitimate - // circle (it happens for 0 or for 1). - if (dr < 0) { - valid = radialExtendRange (range, 0, valid); - } else { - valid = radialExtendRange (range, 1, valid); - } - - // Nondegenerate, nonlimit circles passing through the corners. - // - // a == 0 && a*t^2 - 2*b*t + c == 0 - // - // t = c / (2*b) - // - // The b == 0 case has just been handled, so we only have to - // compute this if b != 0. - - // circles touching each corner - radialCorner1(xMin, yMin, b, dx, dy, cr, dr, mindr, valid, range); - radialCorner1(xMin, yMax, b, dx, dy, cr, dr, mindr, valid, range); - radialCorner1(xMax, yMin, b, dx, dy, cr, dr, mindr, valid, range); - radialCorner1(xMax, yMax, b, dx, dy, cr, dr, mindr, valid, range); - } else { - double inva, b, c, d; - - inva = 1 / a; - - // Nondegenerate, nonlimit circles passing through the corners. - // - // a != 0 && a*t^2 - 2*b*t + c == 0 - // - // t = (b +- sqrt (b*b - a*c)) / a - // - // If the argument of sqrt() is negative, then no circle - // passes through the corner. - - // circles touching each corner - radialCorner2(xMin, yMin, a, b, c, d, dx, dy, cr, inva, dr, mindr, valid, range); - radialCorner2(xMin, yMax, a, b, c, d, dx, dy, cr, inva, dr, mindr, valid, range); - radialCorner2(xMax, yMin, a, b, c, d, dx, dy, cr, inva, dr, mindr, valid, range); - radialCorner2(xMax, yMax, a, b, c, d, dx, dy, cr, inva, dr, mindr, valid, range); - } - - *lower = std::max<double>(0., std::min<double>(1., range[0])); - *upper = std::max<double>(0., std::min<double>(1., range[1])); -} - -//------------------------------------------------------------------------ -// GfxShadingBitBuf -//------------------------------------------------------------------------ - -class GfxShadingBitBuf { -public: - - GfxShadingBitBuf(Stream *strA); - ~GfxShadingBitBuf(); - GBool getBits(int n, Guint *val); - void flushBits(); - -private: - - Stream *str; - int bitBuf; - int nBits; -}; - -GfxShadingBitBuf::GfxShadingBitBuf(Stream *strA) { - str = strA; - str->reset(); - bitBuf = 0; - nBits = 0; -} - -GfxShadingBitBuf::~GfxShadingBitBuf() { - str->close(); -} - -GBool GfxShadingBitBuf::getBits(int n, Guint *val) { - int x; - - if (nBits >= n) { - x = (bitBuf >> (nBits - n)) & ((1 << n) - 1); - nBits -= n; - } else { - x = 0; - if (nBits > 0) { - x = bitBuf & ((1 << nBits) - 1); - n -= nBits; - nBits = 0; - } - while (n > 0) { - if ((bitBuf = str->getChar()) == EOF) { - nBits = 0; - return gFalse; - } - if (n >= 8) { - x = (x << 8) | bitBuf; - n -= 8; - } else { - x = (x << n) | (bitBuf >> (8 - n)); - nBits = 8 - n; - n = 0; - } - } - } - *val = x; - return gTrue; -} - -void GfxShadingBitBuf::flushBits() { - bitBuf = 0; - nBits = 0; -} - -//------------------------------------------------------------------------ -// GfxGouraudTriangleShading -//------------------------------------------------------------------------ - -GfxGouraudTriangleShading::GfxGouraudTriangleShading( - int typeA, - GfxGouraudVertex *verticesA, int nVerticesA, - int (*trianglesA)[3], int nTrianglesA, - Function **funcsA, int nFuncsA): - GfxShading(typeA) -{ - int i; - - vertices = verticesA; - nVertices = nVerticesA; - triangles = trianglesA; - nTriangles = nTrianglesA; - nFuncs = nFuncsA; - for (i = 0; i < nFuncs; ++i) { - funcs[i] = funcsA[i]; - } -} - -GfxGouraudTriangleShading::GfxGouraudTriangleShading( - GfxGouraudTriangleShading *shading): - GfxShading(shading) -{ - int i; - - nVertices = shading->nVertices; - vertices = (GfxGouraudVertex *)gmallocn(nVertices, sizeof(GfxGouraudVertex)); - memcpy(vertices, shading->vertices, nVertices * sizeof(GfxGouraudVertex)); - nTriangles = shading->nTriangles; - triangles = (int (*)[3])gmallocn(nTriangles * 3, sizeof(int)); - memcpy(triangles, shading->triangles, nTriangles * 3 * sizeof(int)); - nFuncs = shading->nFuncs; - for (i = 0; i < nFuncs; ++i) { - funcs[i] = shading->funcs[i]->copy(); - } -} - -GfxGouraudTriangleShading::~GfxGouraudTriangleShading() { - int i; - - gfree(vertices); - gfree(triangles); - for (i = 0; i < nFuncs; ++i) { - delete funcs[i]; - } -} - -GfxGouraudTriangleShading *GfxGouraudTriangleShading::parse(int typeA, - Dict *dict, - Stream *str, - Gfx *gfx) { - GfxGouraudTriangleShading *shading; - Function *funcsA[gfxColorMaxComps]; - int nFuncsA; - int coordBits, compBits, flagBits, vertsPerRow, nRows; - double xMin, xMax, yMin, yMax; - double cMin[gfxColorMaxComps], cMax[gfxColorMaxComps]; - double xMul, yMul; - double cMul[gfxColorMaxComps]; - GfxGouraudVertex *verticesA; - int (*trianglesA)[3]; - int nComps, nVerticesA, nTrianglesA, vertSize, triSize; - Guint x, y, flag; - Guint c[gfxColorMaxComps]; - GfxShadingBitBuf *bitBuf; - Object obj1, obj2; - int i, j, k, state; - - if (dict->lookup("BitsPerCoordinate", &obj1)->isInt()) { - coordBits = obj1.getInt(); - } else { - error(-1, "Missing or invalid BitsPerCoordinate in shading dictionary"); - goto err2; - } - obj1.free(); - if (dict->lookup("BitsPerComponent", &obj1)->isInt()) { - compBits = obj1.getInt(); - } else { - error(-1, "Missing or invalid BitsPerComponent in shading dictionary"); - goto err2; - } - obj1.free(); - flagBits = vertsPerRow = 0; // make gcc happy - if (typeA == 4) { - if (dict->lookup("BitsPerFlag", &obj1)->isInt()) { - flagBits = obj1.getInt(); - } else { - error(-1, "Missing or invalid BitsPerFlag in shading dictionary"); - goto err2; - } - obj1.free(); - } else { - if (dict->lookup("VerticesPerRow", &obj1)->isInt()) { - vertsPerRow = obj1.getInt(); - } else { - error(-1, "Missing or invalid VerticesPerRow in shading dictionary"); - goto err2; - } - obj1.free(); - } - if (dict->lookup("Decode", &obj1)->isArray() && - obj1.arrayGetLength() >= 6) { - xMin = obj1.arrayGet(0, &obj2)->getNum(); - obj2.free(); - xMax = obj1.arrayGet(1, &obj2)->getNum(); - obj2.free(); - xMul = (xMax - xMin) / (pow(2.0, coordBits) - 1); - yMin = obj1.arrayGet(2, &obj2)->getNum(); - obj2.free(); - yMax = obj1.arrayGet(3, &obj2)->getNum(); - obj2.free(); - yMul = (yMax - yMin) / (pow(2.0, coordBits) - 1); - for (i = 0; 5 + 2*i < obj1.arrayGetLength() && i < gfxColorMaxComps; ++i) { - cMin[i] = obj1.arrayGet(4 + 2*i, &obj2)->getNum(); - obj2.free(); - cMax[i] = obj1.arrayGet(5 + 2*i, &obj2)->getNum(); - obj2.free(); - cMul[i] = (cMax[i] - cMin[i]) / (double)((1 << compBits) - 1); - } - nComps = i; - } else { - error(-1, "Missing or invalid Decode array in shading dictionary"); - goto err2; - } - obj1.free(); - - if (!dict->lookup("Function", &obj1)->isNull()) { - if (obj1.isArray()) { - nFuncsA = obj1.arrayGetLength(); - if (nFuncsA > gfxColorMaxComps) { - error(-1, "Invalid Function array in shading dictionary"); - goto err1; - } - for (i = 0; i < nFuncsA; ++i) { - obj1.arrayGet(i, &obj2); - if (!(funcsA[i] = Function::parse(&obj2))) { - obj1.free(); - obj2.free(); - goto err1; - } - obj2.free(); - } - } else { - nFuncsA = 1; - if (!(funcsA[0] = Function::parse(&obj1))) { - obj1.free(); - goto err1; - } - } - } else { - nFuncsA = 0; - } - obj1.free(); - - nVerticesA = nTrianglesA = 0; - verticesA = NULL; - trianglesA = NULL; - vertSize = triSize = 0; - state = 0; - flag = 0; // make gcc happy - bitBuf = new GfxShadingBitBuf(str); - while (1) { - if (typeA == 4) { - if (!bitBuf->getBits(flagBits, &flag)) { - break; - } - } - if (!bitBuf->getBits(coordBits, &x) || - !bitBuf->getBits(coordBits, &y)) { - break; - } - for (i = 0; i < nComps; ++i) { - if (!bitBuf->getBits(compBits, &c[i])) { - break; - } - } - if (i < nComps) { - break; - } - if (nVerticesA == vertSize) { - int oldVertSize = vertSize; - vertSize = (vertSize == 0) ? 16 : 2 * vertSize; - verticesA = (GfxGouraudVertex *) - greallocn(verticesA, vertSize, sizeof(GfxGouraudVertex)); - memset(verticesA + oldVertSize, 0, (vertSize - oldVertSize) * sizeof(GfxGouraudVertex)); - } - verticesA[nVerticesA].x = xMin + xMul * (double)x; - verticesA[nVerticesA].y = yMin + yMul * (double)y; - for (i = 0; i < nComps; ++i) { - verticesA[nVerticesA].color.c[i] = - dblToCol(cMin[i] + cMul[i] * (double)c[i]); - } - ++nVerticesA; - bitBuf->flushBits(); - if (typeA == 4) { - if (state == 0 || state == 1) { - ++state; - } else if (state == 2 || flag > 0) { - if (nTrianglesA == triSize) { - triSize = (triSize == 0) ? 16 : 2 * triSize; - trianglesA = (int (*)[3]) - greallocn(trianglesA, triSize * 3, sizeof(int)); - } - if (state == 2) { - trianglesA[nTrianglesA][0] = nVerticesA - 3; - trianglesA[nTrianglesA][1] = nVerticesA - 2; - trianglesA[nTrianglesA][2] = nVerticesA - 1; - ++state; - } else if (flag == 1) { - trianglesA[nTrianglesA][0] = trianglesA[nTrianglesA - 1][1]; - trianglesA[nTrianglesA][1] = trianglesA[nTrianglesA - 1][2]; - trianglesA[nTrianglesA][2] = nVerticesA - 1; - } else { // flag == 2 - trianglesA[nTrianglesA][0] = trianglesA[nTrianglesA - 1][0]; - trianglesA[nTrianglesA][1] = trianglesA[nTrianglesA - 1][2]; - trianglesA[nTrianglesA][2] = nVerticesA - 1; - } - ++nTrianglesA; - } else { // state == 3 && flag == 0 - state = 1; - } - } - } - delete bitBuf; - if (typeA == 5) { - nRows = nVerticesA / vertsPerRow; - nTrianglesA = (nRows - 1) * 2 * (vertsPerRow - 1); - trianglesA = (int (*)[3])gmallocn(nTrianglesA * 3, sizeof(int)); - k = 0; - for (i = 0; i < nRows - 1; ++i) { - for (j = 0; j < vertsPerRow - 1; ++j) { - trianglesA[k][0] = i * vertsPerRow + j; - trianglesA[k][1] = i * vertsPerRow + j+1; - trianglesA[k][2] = (i+1) * vertsPerRow + j; - ++k; - trianglesA[k][0] = i * vertsPerRow + j+1; - trianglesA[k][1] = (i+1) * vertsPerRow + j; - trianglesA[k][2] = (i+1) * vertsPerRow + j+1; - ++k; - } - } - } - - shading = new GfxGouraudTriangleShading(typeA, verticesA, nVerticesA, - trianglesA, nTrianglesA, - funcsA, nFuncsA); - if (!shading->init(dict, gfx)) { - delete shading; - return NULL; - } - return shading; - - err2: - obj1.free(); - err1: - return NULL; -} - -GfxShading *GfxGouraudTriangleShading::copy() { - return new GfxGouraudTriangleShading(this); -} - -void GfxGouraudTriangleShading::getTriangle( - int i, - double *x0, double *y0, GfxColor *color0, - double *x1, double *y1, GfxColor *color1, - double *x2, double *y2, GfxColor *color2) { - double in; - double out[gfxColorMaxComps]; - int v, j; - - assert(!isParameterized()); - - v = triangles[i][0]; - *x0 = vertices[v].x; - *y0 = vertices[v].y; - if (nFuncs > 0) { - in = colToDbl(vertices[v].color.c[0]); - for (j = 0; j < nFuncs; ++j) { - funcs[j]->transform(&in, &out[j]); - } - for (j = 0; j < gfxColorMaxComps; ++j) { - color0->c[j] = dblToCol(out[j]); - } - } else { - *color0 = vertices[v].color; - } - v = triangles[i][1]; - *x1 = vertices[v].x; - *y1 = vertices[v].y; - if (nFuncs > 0) { - in = colToDbl(vertices[v].color.c[0]); - for (j = 0; j < nFuncs; ++j) { - funcs[j]->transform(&in, &out[j]); - } - for (j = 0; j < gfxColorMaxComps; ++j) { - color1->c[j] = dblToCol(out[j]); - } - } else { - *color1 = vertices[v].color; - } - v = triangles[i][2]; - *x2 = vertices[v].x; - *y2 = vertices[v].y; - if (nFuncs > 0) { - in = colToDbl(vertices[v].color.c[0]); - for (j = 0; j < nFuncs; ++j) { - funcs[j]->transform(&in, &out[j]); - } - for (j = 0; j < gfxColorMaxComps; ++j) { - color2->c[j] = dblToCol(out[j]); - } - } else { - *color2 = vertices[v].color; - } -} - -void GfxGouraudTriangleShading::getParameterizedColor(double t, GfxColor *color) { - double out[gfxColorMaxComps]; - - for (int j = 0; j < nFuncs; ++j) { - funcs[j]->transform(&t, &out[j]); - } - for (int j = 0; j < gfxColorMaxComps; ++j) { - color->c[j] = dblToCol(out[j]); - } -} - -void GfxGouraudTriangleShading::getTriangle(int i, - double *x0, double *y0, double *color0, - double *x1, double *y1, double *color1, - double *x2, double *y2, double *color2) { - int v; - - assert(isParameterized()); - - v = triangles[i][0]; - *x0 = vertices[v].x; - *y0 = vertices[v].y; - *color0 = colToDbl(vertices[v].color.c[0]); - v = triangles[i][1]; - *x1 = vertices[v].x; - *y1 = vertices[v].y; - *color1 = colToDbl(vertices[v].color.c[0]); - v = triangles[i][2]; - *x2 = vertices[v].x; - *y2 = vertices[v].y; - *color2 = colToDbl(vertices[v].color.c[0]); -} - -//------------------------------------------------------------------------ -// GfxPatchMeshShading -//------------------------------------------------------------------------ - -GfxPatchMeshShading::GfxPatchMeshShading(int typeA, - GfxPatch *patchesA, int nPatchesA, - Function **funcsA, int nFuncsA): - GfxShading(typeA) -{ - int i; - - patches = patchesA; - nPatches = nPatchesA; - nFuncs = nFuncsA; - for (i = 0; i < nFuncs; ++i) { - funcs[i] = funcsA[i]; - } -} - -GfxPatchMeshShading::GfxPatchMeshShading(GfxPatchMeshShading *shading): - GfxShading(shading) -{ - int i; - - nPatches = shading->nPatches; - patches = (GfxPatch *)gmallocn(nPatches, sizeof(GfxPatch)); - memcpy(patches, shading->patches, nPatches * sizeof(GfxPatch)); - nFuncs = shading->nFuncs; - for (i = 0; i < nFuncs; ++i) { - funcs[i] = shading->funcs[i]->copy(); - } -} - -GfxPatchMeshShading::~GfxPatchMeshShading() { - int i; - - gfree(patches); - for (i = 0; i < nFuncs; ++i) { - delete funcs[i]; - } -} - -GfxPatchMeshShading *GfxPatchMeshShading::parse(int typeA, Dict *dict, - Stream *str, Gfx *gfx) { - GfxPatchMeshShading *shading; - Function *funcsA[gfxColorMaxComps]; - int nFuncsA; - int coordBits, compBits, flagBits; - double xMin, xMax, yMin, yMax; - double cMin[gfxColorMaxComps], cMax[gfxColorMaxComps]; - double xMul, yMul; - double cMul[gfxColorMaxComps]; - GfxPatch *patchesA, *p; - int nComps, nPatchesA, patchesSize, nPts, nColors; - Guint flag; - double x[16], y[16]; - Guint xi, yi; - double c[4][gfxColorMaxComps]; - Guint ci[4]; - GfxShadingBitBuf *bitBuf; - Object obj1, obj2; - int i, j; - - if (dict->lookup("BitsPerCoordinate", &obj1)->isInt()) { - coordBits = obj1.getInt(); - } else { - error(-1, "Missing or invalid BitsPerCoordinate in shading dictionary"); - goto err2; - } - obj1.free(); - if (dict->lookup("BitsPerComponent", &obj1)->isInt()) { - compBits = obj1.getInt(); - } else { - error(-1, "Missing or invalid BitsPerComponent in shading dictionary"); - goto err2; - } - obj1.free(); - if (dict->lookup("BitsPerFlag", &obj1)->isInt()) { - flagBits = obj1.getInt(); - } else { - error(-1, "Missing or invalid BitsPerFlag in shading dictionary"); - goto err2; - } - obj1.free(); - if (dict->lookup("Decode", &obj1)->isArray() && - obj1.arrayGetLength() >= 6) { - xMin = obj1.arrayGet(0, &obj2)->getNum(); - obj2.free(); - xMax = obj1.arrayGet(1, &obj2)->getNum(); - obj2.free(); - xMul = (xMax - xMin) / (pow(2.0, coordBits) - 1); - yMin = obj1.arrayGet(2, &obj2)->getNum(); - obj2.free(); - yMax = obj1.arrayGet(3, &obj2)->getNum(); - obj2.free(); - yMul = (yMax - yMin) / (pow(2.0, coordBits) - 1); - for (i = 0; 5 + 2*i < obj1.arrayGetLength() && i < gfxColorMaxComps; ++i) { - cMin[i] = obj1.arrayGet(4 + 2*i, &obj2)->getNum(); - obj2.free(); - cMax[i] = obj1.arrayGet(5 + 2*i, &obj2)->getNum(); - obj2.free(); - cMul[i] = (cMax[i] - cMin[i]) / (double)((1 << compBits) - 1); - } - nComps = i; - } else { - error(-1, "Missing or invalid Decode array in shading dictionary"); - goto err2; - } - obj1.free(); - - if (!dict->lookup("Function", &obj1)->isNull()) { - if (obj1.isArray()) { - nFuncsA = obj1.arrayGetLength(); - if (nFuncsA > gfxColorMaxComps) { - error(-1, "Invalid Function array in shading dictionary"); - goto err1; - } - for (i = 0; i < nFuncsA; ++i) { - obj1.arrayGet(i, &obj2); - if (!(funcsA[i] = Function::parse(&obj2))) { - obj1.free(); - obj2.free(); - goto err1; - } - obj2.free(); - } - } else { - nFuncsA = 1; - if (!(funcsA[0] = Function::parse(&obj1))) { - obj1.free(); - goto err1; - } - } - } else { - nFuncsA = 0; - } - obj1.free(); - - nPatchesA = 0; - patchesA = NULL; - patchesSize = 0; - bitBuf = new GfxShadingBitBuf(str); - while (1) { - if (!bitBuf->getBits(flagBits, &flag)) { - break; - } - if (typeA == 6) { - switch (flag) { - case 0: nPts = 12; nColors = 4; break; - case 1: - case 2: - case 3: - default: nPts = 8; nColors = 2; break; - } - } else { - switch (flag) { - case 0: nPts = 16; nColors = 4; break; - case 1: - case 2: - case 3: - default: nPts = 12; nColors = 2; break; - } - } - for (i = 0; i < nPts; ++i) { - if (!bitBuf->getBits(coordBits, &xi) || - !bitBuf->getBits(coordBits, &yi)) { - break; - } - x[i] = xMin + xMul * (double)xi; - y[i] = yMin + yMul * (double)yi; - } - if (i < nPts) { - break; - } - for (i = 0; i < nColors; ++i) { - for (j = 0; j < nComps; ++j) { - if (!bitBuf->getBits(compBits, &ci[j])) { - break; - } - c[i][j] = cMin[j] + cMul[j] * (double)ci[j]; - if( nFuncsA == 0 ) { - // ... and colorspace values can also be stored into doubles. - // They will be casted later. - c[i][j] = dblToCol(c[i][j]); - } - } - if (j < nComps) { - break; - } - } - if (i < nColors) { - break; - } - if (nPatchesA == patchesSize) { - int oldPatchesSize = patchesSize; - patchesSize = (patchesSize == 0) ? 16 : 2 * patchesSize; - patchesA = (GfxPatch *)greallocn(patchesA, - patchesSize, sizeof(GfxPatch)); - memset(patchesA + oldPatchesSize, 0, (patchesSize - oldPatchesSize) * sizeof(GfxPatch)); - } - p = &patchesA[nPatchesA]; - if (typeA == 6) { - switch (flag) { - case 0: - p->x[0][0] = x[0]; - p->y[0][0] = y[0]; - p->x[0][1] = x[1]; - p->y[0][1] = y[1]; - p->x[0][2] = x[2]; - p->y[0][2] = y[2]; - p->x[0][3] = x[3]; - p->y[0][3] = y[3]; - p->x[1][3] = x[4]; - p->y[1][3] = y[4]; - p->x[2][3] = x[5]; - p->y[2][3] = y[5]; - p->x[3][3] = x[6]; - p->y[3][3] = y[6]; - p->x[3][2] = x[7]; - p->y[3][2] = y[7]; - p->x[3][1] = x[8]; - p->y[3][1] = y[8]; - p->x[3][0] = x[9]; - p->y[3][0] = y[9]; - p->x[2][0] = x[10]; - p->y[2][0] = y[10]; - p->x[1][0] = x[11]; - p->y[1][0] = y[11]; - for (j = 0; j < nComps; ++j) { - p->color[0][0].c[j] = c[0][j]; - p->color[0][1].c[j] = c[1][j]; - p->color[1][1].c[j] = c[2][j]; - p->color[1][0].c[j] = c[3][j]; - } - break; - case 1: - p->x[0][0] = patchesA[nPatchesA-1].x[0][3]; - p->y[0][0] = patchesA[nPatchesA-1].y[0][3]; - p->x[0][1] = patchesA[nPatchesA-1].x[1][3]; - p->y[0][1] = patchesA[nPatchesA-1].y[1][3]; - p->x[0][2] = patchesA[nPatchesA-1].x[2][3]; - p->y[0][2] = patchesA[nPatchesA-1].y[2][3]; - p->x[0][3] = patchesA[nPatchesA-1].x[3][3]; - p->y[0][3] = patchesA[nPatchesA-1].y[3][3]; - p->x[1][3] = x[0]; - p->y[1][3] = y[0]; - p->x[2][3] = x[1]; - p->y[2][3] = y[1]; - p->x[3][3] = x[2]; - p->y[3][3] = y[2]; - p->x[3][2] = x[3]; - p->y[3][2] = y[3]; - p->x[3][1] = x[4]; - p->y[3][1] = y[4]; - p->x[3][0] = x[5]; - p->y[3][0] = y[5]; - p->x[2][0] = x[6]; - p->y[2][0] = y[6]; - p->x[1][0] = x[7]; - p->y[1][0] = y[7]; - for (j = 0; j < nComps; ++j) { - p->color[0][0].c[j] = patchesA[nPatchesA-1].color[0][1].c[j]; - p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][1].c[j]; - p->color[1][1].c[j] = c[0][j]; - p->color[1][0].c[j] = c[1][j]; - } - break; - case 2: - p->x[0][0] = patchesA[nPatchesA-1].x[3][3]; - p->y[0][0] = patchesA[nPatchesA-1].y[3][3]; - p->x[0][1] = patchesA[nPatchesA-1].x[3][2]; - p->y[0][1] = patchesA[nPatchesA-1].y[3][2]; - p->x[0][2] = patchesA[nPatchesA-1].x[3][1]; - p->y[0][2] = patchesA[nPatchesA-1].y[3][1]; - p->x[0][3] = patchesA[nPatchesA-1].x[3][0]; - p->y[0][3] = patchesA[nPatchesA-1].y[3][0]; - p->x[1][3] = x[0]; - p->y[1][3] = y[0]; - p->x[2][3] = x[1]; - p->y[2][3] = y[1]; - p->x[3][3] = x[2]; - p->y[3][3] = y[2]; - p->x[3][2] = x[3]; - p->y[3][2] = y[3]; - p->x[3][1] = x[4]; - p->y[3][1] = y[4]; - p->x[3][0] = x[5]; - p->y[3][0] = y[5]; - p->x[2][0] = x[6]; - p->y[2][0] = y[6]; - p->x[1][0] = x[7]; - p->y[1][0] = y[7]; - for (j = 0; j < nComps; ++j) { - p->color[0][0].c[j] = patchesA[nPatchesA-1].color[1][1].c[j]; - p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][0].c[j]; - p->color[1][1].c[j] = c[0][j]; - p->color[1][0].c[j] = c[1][j]; - } - break; - case 3: - p->x[0][0] = patchesA[nPatchesA-1].x[3][0]; - p->y[0][0] = patchesA[nPatchesA-1].y[3][0]; - p->x[0][1] = patchesA[nPatchesA-1].x[2][0]; - p->y[0][1] = patchesA[nPatchesA-1].y[2][0]; - p->x[0][2] = patchesA[nPatchesA-1].x[1][0]; - p->y[0][2] = patchesA[nPatchesA-1].y[1][0]; - p->x[0][3] = patchesA[nPatchesA-1].x[0][0]; - p->y[0][3] = patchesA[nPatchesA-1].y[0][0]; - p->x[1][3] = x[0]; - p->y[1][3] = y[0]; - p->x[2][3] = x[1]; - p->y[2][3] = y[1]; - p->x[3][3] = x[2]; - p->y[3][3] = y[2]; - p->x[3][2] = x[3]; - p->y[3][2] = y[3]; - p->x[3][1] = x[4]; - p->y[3][1] = y[4]; - p->x[3][0] = x[5]; - p->y[3][0] = y[5]; - p->x[2][0] = x[6]; - p->y[2][0] = y[6]; - p->x[1][0] = x[7]; - p->y[1][0] = y[7]; - for (j = 0; j < nComps; ++j) { - p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][0].c[j]; - p->color[0][1].c[j] = patchesA[nPatchesA-1].color[0][0].c[j]; - p->color[1][1].c[j] = c[0][j]; - p->color[1][0].c[j] = c[1][j]; - } - break; - } - } else { - switch (flag) { - case 0: - p->x[0][0] = x[0]; - p->y[0][0] = y[0]; - p->x[0][1] = x[1]; - p->y[0][1] = y[1]; - p->x[0][2] = x[2]; - p->y[0][2] = y[2]; - p->x[0][3] = x[3]; - p->y[0][3] = y[3]; - p->x[1][3] = x[4]; - p->y[1][3] = y[4]; - p->x[2][3] = x[5]; - p->y[2][3] = y[5]; - p->x[3][3] = x[6]; - p->y[3][3] = y[6]; - p->x[3][2] = x[7]; - p->y[3][2] = y[7]; - p->x[3][1] = x[8]; - p->y[3][1] = y[8]; - p->x[3][0] = x[9]; - p->y[3][0] = y[9]; - p->x[2][0] = x[10]; - p->y[2][0] = y[10]; - p->x[1][0] = x[11]; - p->y[1][0] = y[11]; - p->x[1][1] = x[12]; - p->y[1][1] = y[12]; - p->x[1][2] = x[13]; - p->y[1][2] = y[13]; - p->x[2][2] = x[14]; - p->y[2][2] = y[14]; - p->x[2][1] = x[15]; - p->y[2][1] = y[15]; - for (j = 0; j < nComps; ++j) { - p->color[0][0].c[j] = c[0][j]; - p->color[0][1].c[j] = c[1][j]; - p->color[1][1].c[j] = c[2][j]; - p->color[1][0].c[j] = c[3][j]; - } - break; - case 1: - p->x[0][0] = patchesA[nPatchesA-1].x[0][3]; - p->y[0][0] = patchesA[nPatchesA-1].y[0][3]; - p->x[0][1] = patchesA[nPatchesA-1].x[1][3]; - p->y[0][1] = patchesA[nPatchesA-1].y[1][3]; - p->x[0][2] = patchesA[nPatchesA-1].x[2][3]; - p->y[0][2] = patchesA[nPatchesA-1].y[2][3]; - p->x[0][3] = patchesA[nPatchesA-1].x[3][3]; - p->y[0][3] = patchesA[nPatchesA-1].y[3][3]; - p->x[1][3] = x[0]; - p->y[1][3] = y[0]; - p->x[2][3] = x[1]; - p->y[2][3] = y[1]; - p->x[3][3] = x[2]; - p->y[3][3] = y[2]; - p->x[3][2] = x[3]; - p->y[3][2] = y[3]; - p->x[3][1] = x[4]; - p->y[3][1] = y[4]; - p->x[3][0] = x[5]; - p->y[3][0] = y[5]; - p->x[2][0] = x[6]; - p->y[2][0] = y[6]; - p->x[1][0] = x[7]; - p->y[1][0] = y[7]; - p->x[1][1] = x[8]; - p->y[1][1] = y[8]; - p->x[1][2] = x[9]; - p->y[1][2] = y[9]; - p->x[2][2] = x[10]; - p->y[2][2] = y[10]; - p->x[2][1] = x[11]; - p->y[2][1] = y[11]; - for (j = 0; j < nComps; ++j) { - p->color[0][0].c[j] = patchesA[nPatchesA-1].color[0][1].c[j]; - p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][1].c[j]; - p->color[1][1].c[j] = c[0][j]; - p->color[1][0].c[j] = c[1][j]; - } - break; - case 2: - p->x[0][0] = patchesA[nPatchesA-1].x[3][3]; - p->y[0][0] = patchesA[nPatchesA-1].y[3][3]; - p->x[0][1] = patchesA[nPatchesA-1].x[3][2]; - p->y[0][1] = patchesA[nPatchesA-1].y[3][2]; - p->x[0][2] = patchesA[nPatchesA-1].x[3][1]; - p->y[0][2] = patchesA[nPatchesA-1].y[3][1]; - p->x[0][3] = patchesA[nPatchesA-1].x[3][0]; - p->y[0][3] = patchesA[nPatchesA-1].y[3][0]; - p->x[1][3] = x[0]; - p->y[1][3] = y[0]; - p->x[2][3] = x[1]; - p->y[2][3] = y[1]; - p->x[3][3] = x[2]; - p->y[3][3] = y[2]; - p->x[3][2] = x[3]; - p->y[3][2] = y[3]; - p->x[3][1] = x[4]; - p->y[3][1] = y[4]; - p->x[3][0] = x[5]; - p->y[3][0] = y[5]; - p->x[2][0] = x[6]; - p->y[2][0] = y[6]; - p->x[1][0] = x[7]; - p->y[1][0] = y[7]; - p->x[1][1] = x[8]; - p->y[1][1] = y[8]; - p->x[1][2] = x[9]; - p->y[1][2] = y[9]; - p->x[2][2] = x[10]; - p->y[2][2] = y[10]; - p->x[2][1] = x[11]; - p->y[2][1] = y[11]; - for (j = 0; j < nComps; ++j) { - p->color[0][0].c[j] = patchesA[nPatchesA-1].color[1][1].c[j]; - p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][0].c[j]; - p->color[1][1].c[j] = c[0][j]; - p->color[1][0].c[j] = c[1][j]; - } - break; - case 3: - p->x[0][0] = patchesA[nPatchesA-1].x[3][0]; - p->y[0][0] = patchesA[nPatchesA-1].y[3][0]; - p->x[0][1] = patchesA[nPatchesA-1].x[2][0]; - p->y[0][1] = patchesA[nPatchesA-1].y[2][0]; - p->x[0][2] = patchesA[nPatchesA-1].x[1][0]; - p->y[0][2] = patchesA[nPatchesA-1].y[1][0]; - p->x[0][3] = patchesA[nPatchesA-1].x[0][0]; - p->y[0][3] = patchesA[nPatchesA-1].y[0][0]; - p->x[1][3] = x[0]; - p->y[1][3] = y[0]; - p->x[2][3] = x[1]; - p->y[2][3] = y[1]; - p->x[3][3] = x[2]; - p->y[3][3] = y[2]; - p->x[3][2] = x[3]; - p->y[3][2] = y[3]; - p->x[3][1] = x[4]; - p->y[3][1] = y[4]; - p->x[3][0] = x[5]; - p->y[3][0] = y[5]; - p->x[2][0] = x[6]; - p->y[2][0] = y[6]; - p->x[1][0] = x[7]; - p->y[1][0] = y[7]; - p->x[1][1] = x[8]; - p->y[1][1] = y[8]; - p->x[1][2] = x[9]; - p->y[1][2] = y[9]; - p->x[2][2] = x[10]; - p->y[2][2] = y[10]; - p->x[2][1] = x[11]; - p->y[2][1] = y[11]; - for (j = 0; j < nComps; ++j) { - p->color[0][0].c[j] = patchesA[nPatchesA-1].color[1][0].c[j]; - p->color[0][1].c[j] = patchesA[nPatchesA-1].color[0][0].c[j]; - p->color[1][1].c[j] = c[0][j]; - p->color[1][0].c[j] = c[1][j]; - } - break; - } - } - ++nPatchesA; - bitBuf->flushBits(); - } - delete bitBuf; - - if (typeA == 6) { - for (i = 0; i < nPatchesA; ++i) { - p = &patchesA[i]; - p->x[1][1] = (-4 * p->x[0][0] - +6 * (p->x[0][1] + p->x[1][0]) - -2 * (p->x[0][3] + p->x[3][0]) - +3 * (p->x[3][1] + p->x[1][3]) - - p->x[3][3]) / 9; - p->y[1][1] = (-4 * p->y[0][0] - +6 * (p->y[0][1] + p->y[1][0]) - -2 * (p->y[0][3] + p->y[3][0]) - +3 * (p->y[3][1] + p->y[1][3]) - - p->y[3][3]) / 9; - p->x[1][2] = (-4 * p->x[0][3] - +6 * (p->x[0][2] + p->x[1][3]) - -2 * (p->x[0][0] + p->x[3][3]) - +3 * (p->x[3][2] + p->x[1][0]) - - p->x[3][0]) / 9; - p->y[1][2] = (-4 * p->y[0][3] - +6 * (p->y[0][2] + p->y[1][3]) - -2 * (p->y[0][0] + p->y[3][3]) - +3 * (p->y[3][2] + p->y[1][0]) - - p->y[3][0]) / 9; - p->x[2][1] = (-4 * p->x[3][0] - +6 * (p->x[3][1] + p->x[2][0]) - -2 * (p->x[3][3] + p->x[0][0]) - +3 * (p->x[0][1] + p->x[2][3]) - - p->x[0][3]) / 9; - p->y[2][1] = (-4 * p->y[3][0] - +6 * (p->y[3][1] + p->y[2][0]) - -2 * (p->y[3][3] + p->y[0][0]) - +3 * (p->y[0][1] + p->y[2][3]) - - p->y[0][3]) / 9; - p->x[2][2] = (-4 * p->x[3][3] - +6 * (p->x[3][2] + p->x[2][3]) - -2 * (p->x[3][0] + p->x[0][3]) - +3 * (p->x[0][2] + p->x[2][0]) - - p->x[0][0]) / 9; - p->y[2][2] = (-4 * p->y[3][3] - +6 * (p->y[3][2] + p->y[2][3]) - -2 * (p->y[3][0] + p->y[0][3]) - +3 * (p->y[0][2] + p->y[2][0]) - - p->y[0][0]) / 9; - } - } - - shading = new GfxPatchMeshShading(typeA, patchesA, nPatchesA, - funcsA, nFuncsA); - if (!shading->init(dict, gfx)) { - delete shading; - return NULL; - } - return shading; - - err2: - obj1.free(); - err1: - return NULL; -} - -void GfxPatchMeshShading::getParameterizedColor(double t, GfxColor *color) { - double out[gfxColorMaxComps]; - - for (int j = 0; j < nFuncs; ++j) { - funcs[j]->transform(&t, &out[j]); - } - for (int j = 0; j < gfxColorMaxComps; ++j) { - color->c[j] = dblToCol(out[j]); - } -} - -GfxShading *GfxPatchMeshShading::copy() { - return new GfxPatchMeshShading(this); -} - -//------------------------------------------------------------------------ -// GfxImageColorMap -//------------------------------------------------------------------------ - -GfxImageColorMap::GfxImageColorMap(int bitsA, Object *decode, - GfxColorSpace *colorSpaceA) { - GfxIndexedColorSpace *indexedCS; - GfxSeparationColorSpace *sepCS; - int maxPixel, indexHigh; - Guchar *lookup2; - Function *sepFunc; - Object obj; - double x[gfxColorMaxComps]; - double y[gfxColorMaxComps]; - int i, j, k; - double mapped; - GBool useByteLookup; - - ok = gTrue; - - // bits per component and color space - bits = bitsA; - maxPixel = (1 << bits) - 1; - colorSpace = colorSpaceA; - - // this is a hack to support 16 bits images, everywhere - // we assume a component fits in 8 bits, with this hack - // we treat 16 bit images as 8 bit ones until it's fixed correctly. - // The hack has another part on ImageStream::getLine - if (maxPixel > 255) maxPixel = 255; - - // initialize - for (k = 0; k < gfxColorMaxComps; ++k) { - lookup[k] = NULL; - } - byte_lookup = NULL; - - // get decode map - if (decode->isNull()) { - nComps = colorSpace->getNComps(); - colorSpace->getDefaultRanges(decodeLow, decodeRange, maxPixel); - } else if (decode->isArray()) { - nComps = decode->arrayGetLength() / 2; - if (nComps != colorSpace->getNComps()) { - goto err1; - } - for (i = 0; i < nComps; ++i) { - decode->arrayGet(2*i, &obj); - if (!obj.isNum()) { - goto err2; - } - decodeLow[i] = obj.getNum(); - obj.free(); - decode->arrayGet(2*i+1, &obj); - if (!obj.isNum()) { - goto err2; - } - decodeRange[i] = obj.getNum() - decodeLow[i]; - obj.free(); - } - } else { - goto err1; - } - - // Construct a lookup table -- this stores pre-computed decoded - // values for each component, i.e., the result of applying the - // decode mapping to each possible image pixel component value. - // - // Optimization: for Indexed and Separation color spaces (which have - // only one component), we store color values in the lookup table - // rather than component values. - colorSpace2 = NULL; - nComps2 = 0; - useByteLookup = gFalse; - switch (colorSpace->getMode()) { - case csIndexed: - // Note that indexHigh may not be the same as maxPixel -- - // Distiller will remove unused palette entries, resulting in - // indexHigh < maxPixel. - indexedCS = (GfxIndexedColorSpace *)colorSpace; - colorSpace2 = indexedCS->getBase(); - indexHigh = indexedCS->getIndexHigh(); - nComps2 = colorSpace2->getNComps(); - lookup2 = indexedCS->getLookup(); - colorSpace2->getDefaultRanges(x, y, indexHigh); - if (colorSpace2->useGetGrayLine() || colorSpace2->useGetRGBLine()) { - byte_lookup = (Guchar *)gmallocn ((maxPixel + 1), nComps2); - useByteLookup = gTrue; - } - for (k = 0; k < nComps2; ++k) { - lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1, - sizeof(GfxColorComp)); - for (i = 0; i <= maxPixel; ++i) { - j = (int)(decodeLow[0] + (i * decodeRange[0]) / maxPixel + 0.5); - if (j < 0) { - j = 0; - } else if (j > indexHigh) { - j = indexHigh; - } - - mapped = x[k] + (lookup2[j*nComps2 + k] / 255.0) * y[k]; - lookup[k][i] = dblToCol(mapped); - if (useByteLookup) - byte_lookup[i * nComps2 + k] = (Guchar) (mapped * 255); - } - } - break; - case csSeparation: - sepCS = (GfxSeparationColorSpace *)colorSpace; - colorSpace2 = sepCS->getAlt(); - nComps2 = colorSpace2->getNComps(); - sepFunc = sepCS->getFunc(); - if (colorSpace2->useGetGrayLine() || colorSpace2->useGetRGBLine()) { - byte_lookup = (Guchar *)gmallocn ((maxPixel + 1), nComps2); - useByteLookup = gTrue; - } - for (k = 0; k < nComps2; ++k) { - lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1, - sizeof(GfxColorComp)); - for (i = 0; i <= maxPixel; ++i) { - x[0] = decodeLow[0] + (i * decodeRange[0]) / maxPixel; - sepFunc->transform(x, y); - lookup[k][i] = dblToCol(y[k]); - if (useByteLookup) - byte_lookup[i*nComps2 + k] = (Guchar) (y[k] * 255); - } - } - break; - default: - if (colorSpace->useGetGrayLine() || colorSpace->useGetRGBLine()) { - byte_lookup = (Guchar *)gmallocn ((maxPixel + 1), nComps); - useByteLookup = gTrue; - } - for (k = 0; k < nComps; ++k) { - lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1, - sizeof(GfxColorComp)); - for (i = 0; i <= maxPixel; ++i) { - mapped = decodeLow[k] + (i * decodeRange[k]) / maxPixel; - lookup[k][i] = dblToCol(mapped); - if (useByteLookup) { - int byte; - - byte = (int) (mapped * 255.0 + 0.5); - if (byte < 0) - byte = 0; - else if (byte > 255) - byte = 255; - byte_lookup[i * nComps + k] = byte; - } - } - } - } - - return; - - err2: - obj.free(); - err1: - ok = gFalse; -} - -GfxImageColorMap::GfxImageColorMap(GfxImageColorMap *colorMap) { - int n, i, k; - - colorSpace = colorMap->colorSpace->copy(); - bits = colorMap->bits; - nComps = colorMap->nComps; - nComps2 = colorMap->nComps2; - colorSpace2 = NULL; - for (k = 0; k < gfxColorMaxComps; ++k) { - lookup[k] = NULL; - } - n = 1 << bits; - if (colorSpace->getMode() == csIndexed) { - colorSpace2 = ((GfxIndexedColorSpace *)colorSpace)->getBase(); - for (k = 0; k < nComps2; ++k) { - lookup[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp)); - memcpy(lookup[k], colorMap->lookup[k], n * sizeof(GfxColorComp)); - } - } else if (colorSpace->getMode() == csSeparation) { - colorSpace2 = ((GfxSeparationColorSpace *)colorSpace)->getAlt(); - for (k = 0; k < nComps2; ++k) { - lookup[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp)); - memcpy(lookup[k], colorMap->lookup[k], n * sizeof(GfxColorComp)); - } - } else { - for (k = 0; k < nComps; ++k) { - lookup[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp)); - memcpy(lookup[k], colorMap->lookup[k], n * sizeof(GfxColorComp)); - } - } - if (colorMap->byte_lookup) { - int nc = colorSpace2 ? nComps2 : nComps; - - byte_lookup = (Guchar *)gmallocn (n, nc); - memcpy(byte_lookup, colorMap->byte_lookup, n * nc); - } - for (i = 0; i < nComps; ++i) { - decodeLow[i] = colorMap->decodeLow[i]; - decodeRange[i] = colorMap->decodeRange[i]; - } - ok = gTrue; -} - -GfxImageColorMap::~GfxImageColorMap() { - int i; - - delete colorSpace; - for (i = 0; i < gfxColorMaxComps; ++i) { - gfree(lookup[i]); - } - gfree(byte_lookup); -} - -void GfxImageColorMap::getGray(Guchar *x, GfxGray *gray) { - GfxColor color; - int i; - - if (colorSpace2) { - for (i = 0; i < nComps2; ++i) { - color.c[i] = lookup[i][x[0]]; - } - colorSpace2->getGray(&color, gray); - } else { - for (i = 0; i < nComps; ++i) { - color.c[i] = lookup[i][x[i]]; - } - colorSpace->getGray(&color, gray); - } -} - -void GfxImageColorMap::getRGB(Guchar *x, GfxRGB *rgb) { - GfxColor color; - int i; - - if (colorSpace2) { - for (i = 0; i < nComps2; ++i) { - color.c[i] = lookup[i][x[0]]; - } - colorSpace2->getRGB(&color, rgb); - } else { - for (i = 0; i < nComps; ++i) { - color.c[i] = lookup[i][x[i]]; - } - colorSpace->getRGB(&color, rgb); - } -} - -void GfxImageColorMap::getGrayLine(Guchar *in, Guchar *out, int length) { - int i, j; - Guchar *inp, *tmp_line; - - if ((colorSpace2 && !colorSpace2->useGetGrayLine ()) || - (!colorSpace2 && !colorSpace->useGetGrayLine ())) { - GfxGray gray; - - inp = in; - for (i = 0; i < length; i++) { - getGray (inp, &gray); - out[i] = colToByte(gray); - inp += nComps; - } - return; - } - - switch (colorSpace->getMode()) { - case csIndexed: - case csSeparation: - tmp_line = (Guchar *) gmallocn (length, nComps2); - for (i = 0; i < length; i++) { - for (j = 0; j < nComps2; j++) { - tmp_line[i * nComps2 + j] = byte_lookup[in[i] * nComps2 + j]; - } - } - colorSpace2->getGrayLine(tmp_line, out, length); - gfree (tmp_line); - break; - - default: - inp = in; - for (j = 0; j < length; j++) - for (i = 0; i < nComps; i++) { - *inp = byte_lookup[*inp * nComps + i]; - inp++; - } - colorSpace->getGrayLine(in, out, length); - break; - } - -} - -void GfxImageColorMap::getRGBLine(Guchar *in, unsigned int *out, int length) { - int i, j; - Guchar *inp, *tmp_line; - - if (!useRGBLine()) { - GfxRGB rgb; - - inp = in; - for (i = 0; i < length; i++) { - getRGB (inp, &rgb); - out[i] = - ((int) colToByte(rgb.r) << 16) | - ((int) colToByte(rgb.g) << 8) | - ((int) colToByte(rgb.b) << 0); - inp += nComps; - } - return; - } - - switch (colorSpace->getMode()) { - case csIndexed: - case csSeparation: - tmp_line = (Guchar *) gmallocn (length, nComps2); - for (i = 0; i < length; i++) { - for (j = 0; j < nComps2; j++) { - tmp_line[i * nComps2 + j] = byte_lookup[in[i] * nComps2 + j]; - } - } - colorSpace2->getRGBLine(tmp_line, out, length); - gfree (tmp_line); - break; - - default: - inp = in; - for (j = 0; j < length; j++) - for (i = 0; i < nComps; i++) { - *inp = byte_lookup[*inp * nComps + i]; - inp++; - } - colorSpace->getRGBLine(in, out, length); - break; - } - -} - -void GfxImageColorMap::getRGBLine(Guchar *in, Guchar *out, int length) { - int i, j; - Guchar *inp, *tmp_line; - - if (!useRGBLine()) { - GfxRGB rgb; - - inp = in; - for (i = 0; i < length; i++) { - getRGB (inp, &rgb); - *out++ = colToByte(rgb.r); - *out++ = colToByte(rgb.g); - *out++ = colToByte(rgb.b); - inp += nComps; - } - return; - } - - switch (colorSpace->getMode()) { - case csIndexed: - case csSeparation: - tmp_line = (Guchar *) gmallocn (length, nComps2); - for (i = 0; i < length; i++) { - for (j = 0; j < nComps2; j++) { - tmp_line[i * nComps2 + j] = byte_lookup[in[i] * nComps2 + j]; - } - } - colorSpace2->getRGBLine(tmp_line, out, length); - gfree (tmp_line); - break; - - default: - inp = in; - for (j = 0; j < length; j++) - for (i = 0; i < nComps; i++) { - *inp = byte_lookup[*inp * nComps + i]; - inp++; - } - colorSpace->getRGBLine(in, out, length); - break; - } - -} - -void GfxImageColorMap::getRGBXLine(Guchar *in, Guchar *out, int length) { - int i, j; - Guchar *inp, *tmp_line; - - if (!useRGBLine()) { - GfxRGB rgb; - - inp = in; - for (i = 0; i < length; i++) { - getRGB (inp, &rgb); - *out++ = colToByte(rgb.r); - *out++ = colToByte(rgb.g); - *out++ = colToByte(rgb.b); - *out++ = 255; - inp += nComps; - } - return; - } - - switch (colorSpace->getMode()) { - case csIndexed: - case csSeparation: - tmp_line = (Guchar *) gmallocn (length, nComps2); - for (i = 0; i < length; i++) { - for (j = 0; j < nComps2; j++) { - tmp_line[i * nComps2 + j] = byte_lookup[in[i] * nComps2 + j]; - } - } - colorSpace2->getRGBXLine(tmp_line, out, length); - gfree (tmp_line); - break; - - default: - inp = in; - for (j = 0; j < length; j++) - for (i = 0; i < nComps; i++) { - *inp = byte_lookup[*inp * nComps + i]; - inp++; - } - colorSpace->getRGBXLine(in, out, length); - break; - } - -} - -void GfxImageColorMap::getCMYK(Guchar *x, GfxCMYK *cmyk) { - GfxColor color; - int i; - - if (colorSpace2) { - for (i = 0; i < nComps2; ++i) { - color.c[i] = lookup[i][x[0]]; - } - colorSpace2->getCMYK(&color, cmyk); - } else { - for (i = 0; i < nComps; ++i) { - color.c[i] = lookup[i][x[i]]; - } - colorSpace->getCMYK(&color, cmyk); - } -} - -void GfxImageColorMap::getColor(Guchar *x, GfxColor *color) { - int maxPixel, i; - - maxPixel = (1 << bits) - 1; - for (i = 0; i < nComps; ++i) { - color->c[i] = dblToCol(decodeLow[i] + (x[i] * decodeRange[i]) / maxPixel); - } -} - -//------------------------------------------------------------------------ -// GfxSubpath and GfxPath -//------------------------------------------------------------------------ - -GfxSubpath::GfxSubpath(double x1, double y1) { - size = 16; - x = (double *)gmallocn(size, sizeof(double)); - y = (double *)gmallocn(size, sizeof(double)); - curve = (GBool *)gmallocn(size, sizeof(GBool)); - n = 1; - x[0] = x1; - y[0] = y1; - curve[0] = gFalse; - closed = gFalse; -} - -GfxSubpath::~GfxSubpath() { - gfree(x); - gfree(y); - gfree(curve); -} - -// Used for copy(). -GfxSubpath::GfxSubpath(GfxSubpath *subpath) { - size = subpath->size; - n = subpath->n; - x = (double *)gmallocn(size, sizeof(double)); - y = (double *)gmallocn(size, sizeof(double)); - curve = (GBool *)gmallocn(size, sizeof(GBool)); - memcpy(x, subpath->x, n * sizeof(double)); - memcpy(y, subpath->y, n * sizeof(double)); - memcpy(curve, subpath->curve, n * sizeof(GBool)); - closed = subpath->closed; -} - -void GfxSubpath::lineTo(double x1, double y1) { - if (n >= size) { - size += 16; - x = (double *)greallocn(x, size, sizeof(double)); - y = (double *)greallocn(y, size, sizeof(double)); - curve = (GBool *)greallocn(curve, size, sizeof(GBool)); - } - x[n] = x1; - y[n] = y1; - curve[n] = gFalse; - ++n; -} - -void GfxSubpath::curveTo(double x1, double y1, double x2, double y2, - double x3, double y3) { - if (n+3 > size) { - size += 16; - x = (double *)greallocn(x, size, sizeof(double)); - y = (double *)greallocn(y, size, sizeof(double)); - curve = (GBool *)greallocn(curve, size, sizeof(GBool)); - } - x[n] = x1; - y[n] = y1; - x[n+1] = x2; - y[n+1] = y2; - x[n+2] = x3; - y[n+2] = y3; - curve[n] = curve[n+1] = gTrue; - curve[n+2] = gFalse; - n += 3; -} - -void GfxSubpath::close() { - if (x[n-1] != x[0] || y[n-1] != y[0]) { - lineTo(x[0], y[0]); - } - closed = gTrue; -} - -void GfxSubpath::offset(double dx, double dy) { - int i; - - for (i = 0; i < n; ++i) { - x[i] += dx; - y[i] += dy; - } -} - -GfxPath::GfxPath() { - justMoved = gFalse; - size = 16; - n = 0; - firstX = firstY = 0; - subpaths = (GfxSubpath **)gmallocn(size, sizeof(GfxSubpath *)); -} - -GfxPath::~GfxPath() { - int i; - - for (i = 0; i < n; ++i) - delete subpaths[i]; - gfree(subpaths); -} - -// Used for copy(). -GfxPath::GfxPath(GBool justMoved1, double firstX1, double firstY1, - GfxSubpath **subpaths1, int n1, int size1) { - int i; - - justMoved = justMoved1; - firstX = firstX1; - firstY = firstY1; - size = size1; - n = n1; - subpaths = (GfxSubpath **)gmallocn(size, sizeof(GfxSubpath *)); - for (i = 0; i < n; ++i) - subpaths[i] = subpaths1[i]->copy(); -} - -void GfxPath::moveTo(double x, double y) { - justMoved = gTrue; - firstX = x; - firstY = y; -} - -void GfxPath::lineTo(double x, double y) { - if (justMoved) { - if (n >= size) { - size += 16; - subpaths = (GfxSubpath **) - greallocn(subpaths, size, sizeof(GfxSubpath *)); - } - subpaths[n] = new GfxSubpath(firstX, firstY); - ++n; - justMoved = gFalse; - } - subpaths[n-1]->lineTo(x, y); -} - -void GfxPath::curveTo(double x1, double y1, double x2, double y2, - double x3, double y3) { - if (justMoved) { - if (n >= size) { - size += 16; - subpaths = (GfxSubpath **) - greallocn(subpaths, size, sizeof(GfxSubpath *)); - } - subpaths[n] = new GfxSubpath(firstX, firstY); - ++n; - justMoved = gFalse; - } - subpaths[n-1]->curveTo(x1, y1, x2, y2, x3, y3); -} - -void GfxPath::close() { - // this is necessary to handle the pathological case of - // moveto/closepath/clip, which defines an empty clipping region - if (justMoved) { - if (n >= size) { - size += 16; - subpaths = (GfxSubpath **) - greallocn(subpaths, size, sizeof(GfxSubpath *)); - } - subpaths[n] = new GfxSubpath(firstX, firstY); - ++n; - justMoved = gFalse; - } - subpaths[n-1]->close(); -} - -void GfxPath::append(GfxPath *path) { - int i; - - if (n + path->n > size) { - size = n + path->n; - subpaths = (GfxSubpath **) - greallocn(subpaths, size, sizeof(GfxSubpath *)); - } - for (i = 0; i < path->n; ++i) { - subpaths[n++] = path->subpaths[i]->copy(); - } - justMoved = gFalse; -} - -void GfxPath::offset(double dx, double dy) { - int i; - - for (i = 0; i < n; ++i) { - subpaths[i]->offset(dx, dy); - } -} - -//------------------------------------------------------------------------ -// GfxState -//------------------------------------------------------------------------ -GfxState::ReusablePathIterator::ReusablePathIterator(GfxPath *path) - : path(path), - subPathOff(0), - coordOff(0), - numCoords(0), - curSubPath(NULL) -{ - if( path->getNumSubpaths() ) { - curSubPath = path->getSubpath(subPathOff); - numCoords = curSubPath->getNumPoints(); - } -} - -bool GfxState::ReusablePathIterator::isEnd() const { - return coordOff >= numCoords; -} - -void GfxState::ReusablePathIterator::next() { - ++coordOff; - if (coordOff == numCoords) { - ++subPathOff; - if (subPathOff < path->getNumSubpaths()) { - coordOff = 0; - curSubPath = path->getSubpath(subPathOff); - numCoords = curSubPath->getNumPoints(); - } - } -} - -void GfxState::ReusablePathIterator::setCoord(double x, double y) { - curSubPath->setX(coordOff, x); - curSubPath->setY(coordOff, y); -} - -void GfxState::ReusablePathIterator::reset() { - coordOff = 0; - subPathOff = 0; - curSubPath = path->getSubpath(0); - numCoords = curSubPath->getNumPoints(); -} - -GfxState::GfxState(double hDPIA, double vDPIA, PDFRectangle *pageBox, - int rotateA, GBool upsideDown) { - double kx, ky; - - hDPI = hDPIA; - vDPI = vDPIA; - rotate = rotateA; - px1 = pageBox->x1; - py1 = pageBox->y1; - px2 = pageBox->x2; - py2 = pageBox->y2; - kx = hDPI / 72.0; - ky = vDPI / 72.0; - if (rotate == 90) { - ctm[0] = 0; - ctm[1] = upsideDown ? ky : -ky; - ctm[2] = kx; - ctm[3] = 0; - ctm[4] = -kx * py1; - ctm[5] = ky * (upsideDown ? -px1 : px2); - pageWidth = kx * (py2 - py1); - pageHeight = ky * (px2 - px1); - } else if (rotate == 180) { - ctm[0] = -kx; - ctm[1] = 0; - ctm[2] = 0; - ctm[3] = upsideDown ? ky : -ky; - ctm[4] = kx * px2; - ctm[5] = ky * (upsideDown ? -py1 : py2); - pageWidth = kx * (px2 - px1); - pageHeight = ky * (py2 - py1); - } else if (rotate == 270) { - ctm[0] = 0; - ctm[1] = upsideDown ? -ky : ky; - ctm[2] = -kx; - ctm[3] = 0; - ctm[4] = kx * py2; - ctm[5] = ky * (upsideDown ? px2 : -px1); - pageWidth = kx * (py2 - py1); - pageHeight = ky * (px2 - px1); - } else { - ctm[0] = kx; - ctm[1] = 0; - ctm[2] = 0; - ctm[3] = upsideDown ? -ky : ky; - ctm[4] = -kx * px1; - ctm[5] = ky * (upsideDown ? py2 : -py1); - pageWidth = kx * (px2 - px1); - pageHeight = ky * (py2 - py1); - } - - fillColorSpace = new GfxDeviceGrayColorSpace(); - strokeColorSpace = new GfxDeviceGrayColorSpace(); - fillColor.c[0] = 0; - strokeColor.c[0] = 0; - fillPattern = NULL; - strokePattern = NULL; - blendMode = gfxBlendNormal; - fillOpacity = 1; - strokeOpacity = 1; - fillOverprint = gFalse; - strokeOverprint = gFalse; - overprintMode = 0; - transfer[0] = transfer[1] = transfer[2] = transfer[3] = NULL; - - lineWidth = 1; - lineDash = NULL; - lineDashLength = 0; - lineDashStart = 0; - flatness = 1; - lineJoin = 0; - lineCap = 0; - miterLimit = 10; - strokeAdjust = gFalse; - - font = NULL; - fontSize = 0; - textMat[0] = 1; textMat[1] = 0; - textMat[2] = 0; textMat[3] = 1; - textMat[4] = 0; textMat[5] = 0; - charSpace = 0; - wordSpace = 0; - horizScaling = 1; - leading = 0; - rise = 0; - render = 0; - - path = new GfxPath(); - curX = curY = 0; - lineX = lineY = 0; - - clipXMin = 0; - clipYMin = 0; - clipXMax = pageWidth; - clipYMax = pageHeight; - - saved = NULL; -#ifdef USE_CMS - GfxColorSpace::setupColorProfiles(); -#endif -} - -GfxState::~GfxState() { - int i; - - if (fillColorSpace) { - delete fillColorSpace; - } - if (strokeColorSpace) { - delete strokeColorSpace; - } - if (fillPattern) { - delete fillPattern; - } - if (strokePattern) { - delete strokePattern; - } - for (i = 0; i < 4; ++i) { - if (transfer[i]) { - delete transfer[i]; - } - } - gfree(lineDash); - if (path) { - // this gets set to NULL by restore() - delete path; - } - if (saved) { - delete saved; - } - if (font) { - font->decRefCnt(); - } -} - -// Used for copy(); -GfxState::GfxState(GfxState *state) { - int i; - - memcpy(this, state, sizeof(GfxState)); - if (fillColorSpace) { - fillColorSpace = state->fillColorSpace->copy(); - } - if (strokeColorSpace) { - strokeColorSpace = state->strokeColorSpace->copy(); - } - if (fillPattern) { - fillPattern = state->fillPattern->copy(); - } - if (strokePattern) { - strokePattern = state->strokePattern->copy(); - } - for (i = 0; i < 4; ++i) { - if (transfer[i]) { - transfer[i] = state->transfer[i]->copy(); - } - } - if (lineDashLength > 0) { - lineDash = (double *)gmallocn(lineDashLength, sizeof(double)); - memcpy(lineDash, state->lineDash, lineDashLength * sizeof(double)); - } - if (font) - font->incRefCnt(); - - saved = NULL; -} - -void GfxState::setPath(GfxPath *pathA) { - delete path; - path = pathA; -} - -void GfxState::getUserClipBBox(double *xMin, double *yMin, - double *xMax, double *yMax) { - double ictm[6]; - double xMin1, yMin1, xMax1, yMax1, det, tx, ty; - - // invert the CTM - det = 1 / (ctm[0] * ctm[3] - ctm[1] * ctm[2]); - ictm[0] = ctm[3] * det; - ictm[1] = -ctm[1] * det; - ictm[2] = -ctm[2] * det; - ictm[3] = ctm[0] * det; - ictm[4] = (ctm[2] * ctm[5] - ctm[3] * ctm[4]) * det; - ictm[5] = (ctm[1] * ctm[4] - ctm[0] * ctm[5]) * det; - - // transform all four corners of the clip bbox; find the min and max - // x and y values - xMin1 = xMax1 = clipXMin * ictm[0] + clipYMin * ictm[2] + ictm[4]; - yMin1 = yMax1 = clipXMin * ictm[1] + clipYMin * ictm[3] + ictm[5]; - tx = clipXMin * ictm[0] + clipYMax * ictm[2] + ictm[4]; - ty = clipXMin * ictm[1] + clipYMax * ictm[3] + ictm[5]; - if (tx < xMin1) { - xMin1 = tx; - } else if (tx > xMax1) { - xMax1 = tx; - } - if (ty < yMin1) { - yMin1 = ty; - } else if (ty > yMax1) { - yMax1 = ty; - } - tx = clipXMax * ictm[0] + clipYMin * ictm[2] + ictm[4]; - ty = clipXMax * ictm[1] + clipYMin * ictm[3] + ictm[5]; - if (tx < xMin1) { - xMin1 = tx; - } else if (tx > xMax1) { - xMax1 = tx; - } - if (ty < yMin1) { - yMin1 = ty; - } else if (ty > yMax1) { - yMax1 = ty; - } - tx = clipXMax * ictm[0] + clipYMax * ictm[2] + ictm[4]; - ty = clipXMax * ictm[1] + clipYMax * ictm[3] + ictm[5]; - if (tx < xMin1) { - xMin1 = tx; - } else if (tx > xMax1) { - xMax1 = tx; - } - if (ty < yMin1) { - yMin1 = ty; - } else if (ty > yMax1) { - yMax1 = ty; - } - - *xMin = xMin1; - *yMin = yMin1; - *xMax = xMax1; - *yMax = yMax1; -} - -double GfxState::transformWidth(double w) { - double x, y; - - x = ctm[0] + ctm[2]; - y = ctm[1] + ctm[3]; - return w * sqrt(0.5 * (x * x + y * y)); -} - -double GfxState::getTransformedFontSize() { - double x1, y1, x2, y2; - - x1 = textMat[2] * fontSize; - y1 = textMat[3] * fontSize; - x2 = ctm[0] * x1 + ctm[2] * y1; - y2 = ctm[1] * x1 + ctm[3] * y1; - return sqrt(x2 * x2 + y2 * y2); -} - -void GfxState::getFontTransMat(double *m11, double *m12, - double *m21, double *m22) { - *m11 = (textMat[0] * ctm[0] + textMat[1] * ctm[2]) * fontSize; - *m12 = (textMat[0] * ctm[1] + textMat[1] * ctm[3]) * fontSize; - *m21 = (textMat[2] * ctm[0] + textMat[3] * ctm[2]) * fontSize; - *m22 = (textMat[2] * ctm[1] + textMat[3] * ctm[3]) * fontSize; -} - -void GfxState::setCTM(double a, double b, double c, - double d, double e, double f) { - ctm[0] = a; - ctm[1] = b; - ctm[2] = c; - ctm[3] = d; - ctm[4] = e; - ctm[5] = f; -} - -void GfxState::concatCTM(double a, double b, double c, - double d, double e, double f) { - double a1 = ctm[0]; - double b1 = ctm[1]; - double c1 = ctm[2]; - double d1 = ctm[3]; - - ctm[0] = a * a1 + b * c1; - ctm[1] = a * b1 + b * d1; - ctm[2] = c * a1 + d * c1; - ctm[3] = c * b1 + d * d1; - ctm[4] = e * a1 + f * c1 + ctm[4]; - ctm[5] = e * b1 + f * d1 + ctm[5]; -} - -void GfxState::shiftCTM(double tx, double ty) { - ctm[4] += tx; - ctm[5] += ty; - clipXMin += tx; - clipYMin += ty; - clipXMax += tx; - clipYMax += ty; -} - -void GfxState::setFillColorSpace(GfxColorSpace *colorSpace) { - if (fillColorSpace) { - delete fillColorSpace; - } - fillColorSpace = colorSpace; -} - -void GfxState::setStrokeColorSpace(GfxColorSpace *colorSpace) { - if (strokeColorSpace) { - delete strokeColorSpace; - } - strokeColorSpace = colorSpace; -} - -void GfxState::setFillPattern(GfxPattern *pattern) { - if (fillPattern) { - delete fillPattern; - } - fillPattern = pattern; -} - -void GfxState::setStrokePattern(GfxPattern *pattern) { - if (strokePattern) { - delete strokePattern; - } - strokePattern = pattern; -} - -void GfxState::setFont(GfxFont *fontA, double fontSizeA) { - if (font) - font->decRefCnt(); - - font = fontA; - fontSize = fontSizeA; -} - -void GfxState::setTransfer(Function **funcs) { - int i; - - for (i = 0; i < 4; ++i) { - if (transfer[i]) { - delete transfer[i]; - } - transfer[i] = funcs[i]; - } -} - -void GfxState::setLineDash(double *dash, int length, double start) { - if (lineDash) - gfree(lineDash); - lineDash = dash; - lineDashLength = length; - lineDashStart = start; -} - -void GfxState::clearPath() { - delete path; - path = new GfxPath(); -} - -void GfxState::clip() { - double xMin, yMin, xMax, yMax, x, y; - GfxSubpath *subpath; - int i, j; - - xMin = xMax = yMin = yMax = 0; // make gcc happy - for (i = 0; i < path->getNumSubpaths(); ++i) { - subpath = path->getSubpath(i); - for (j = 0; j < subpath->getNumPoints(); ++j) { - transform(subpath->getX(j), subpath->getY(j), &x, &y); - if (i == 0 && j == 0) { - xMin = xMax = x; - yMin = yMax = y; - } else { - if (x < xMin) { - xMin = x; - } else if (x > xMax) { - xMax = x; - } - if (y < yMin) { - yMin = y; - } else if (y > yMax) { - yMax = y; - } - } - } - } - if (xMin > clipXMin) { - clipXMin = xMin; - } - if (yMin > clipYMin) { - clipYMin = yMin; - } - if (xMax < clipXMax) { - clipXMax = xMax; - } - if (yMax < clipYMax) { - clipYMax = yMax; - } -} - -void GfxState::clipToStrokePath() { - double xMin, yMin, xMax, yMax, x, y, t0, t1; - GfxSubpath *subpath; - int i, j; - - xMin = xMax = yMin = yMax = 0; // make gcc happy - for (i = 0; i < path->getNumSubpaths(); ++i) { - subpath = path->getSubpath(i); - for (j = 0; j < subpath->getNumPoints(); ++j) { - transform(subpath->getX(j), subpath->getY(j), &x, &y); - if (i == 0 && j == 0) { - xMin = xMax = x; - yMin = yMax = y; - } else { - if (x < xMin) { - xMin = x; - } else if (x > xMax) { - xMax = x; - } - if (y < yMin) { - yMin = y; - } else if (y > yMax) { - yMax = y; - } - } - } - } - - // allow for the line width - //~ miter joins can extend farther than this - t0 = fabs(ctm[0]); - t1 = fabs(ctm[2]); - if (t0 > t1) { - xMin -= 0.5 * lineWidth * t0; - xMax += 0.5 * lineWidth * t0; - } else { - xMin -= 0.5 * lineWidth * t1; - xMax += 0.5 * lineWidth * t1; - } - t0 = fabs(ctm[0]); - t1 = fabs(ctm[3]); - if (t0 > t1) { - yMin -= 0.5 * lineWidth * t0; - yMax += 0.5 * lineWidth * t0; - } else { - yMin -= 0.5 * lineWidth * t1; - yMax += 0.5 * lineWidth * t1; - } - - if (xMin > clipXMin) { - clipXMin = xMin; - } - if (yMin > clipYMin) { - clipYMin = yMin; - } - if (xMax < clipXMax) { - clipXMax = xMax; - } - if (yMax < clipYMax) { - clipYMax = yMax; - } -} - -void GfxState::textShift(double tx, double ty) { - double dx, dy; - - textTransformDelta(tx, ty, &dx, &dy); - curX += dx; - curY += dy; -} - -void GfxState::shift(double dx, double dy) { - curX += dx; - curY += dy; -} - -GfxState *GfxState::save() { - GfxState *newState; - - newState = copy(); - newState->saved = this; - return newState; -} - -GfxState *GfxState::restore() { - GfxState *oldState; - - if (saved) { - oldState = saved; - - // these attributes aren't saved/restored by the q/Q operators - oldState->path = path; - oldState->curX = curX; - oldState->curY = curY; - oldState->lineX = lineX; - oldState->lineY = lineY; - - path = NULL; - saved = NULL; - delete this; - - } else { - oldState = this; - } - - return oldState; -} - -GBool GfxState::parseBlendMode(Object *obj, GfxBlendMode *mode) { - Object obj2; - int i, j; - - if (obj->isName()) { - for (i = 0; i < nGfxBlendModeNames; ++i) { - if (!strcmp(obj->getName(), gfxBlendModeNames[i].name)) { - *mode = gfxBlendModeNames[i].mode; - return gTrue; - } - } - return gFalse; - } else if (obj->isArray()) { - for (i = 0; i < obj->arrayGetLength(); ++i) { - obj->arrayGet(i, &obj2); - if (!obj2.isName()) { - obj2.free(); - return gFalse; - } - for (j = 0; j < nGfxBlendModeNames; ++j) { - if (!strcmp(obj2.getName(), gfxBlendModeNames[j].name)) { - obj2.free(); - *mode = gfxBlendModeNames[j].mode; - return gTrue; - } - } - obj2.free(); - } - *mode = gfxBlendNormal; - return gTrue; - } else { - return gFalse; - } -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxState.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxState.h deleted file mode 100644 index d8f0972ef7b..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxState.h +++ /dev/null @@ -1,1530 +0,0 @@ -//======================================================================== -// -// GfxState.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2006, 2007 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2006 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2009 Koji Otani <sho@bbr.jp> -// Copyright (C) 2009-2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> -// Copyright (C) 2011 Andrea Canciani <ranma42@gmail.com> -// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef GFXSTATE_H -#define GFXSTATE_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "poppler-config.h" - -#include "goo/gtypes.h" -#include "Object.h" -#include "Function.h" - -#include <assert.h> - -class Array; -class Gfx; -class GfxFont; -class PDFRectangle; -class GfxShading; -class PopplerCache; - -class Matrix { -public: - double m[6]; - - GBool invertTo(Matrix *other) const; - void transform(double x, double y, double *tx, double *ty) const; - double determinant() const { return m[0] * m[3] - m[1] * m[2]; } - double norm() const; -}; - -//------------------------------------------------------------------------ -// GfxBlendMode -//------------------------------------------------------------------------ - -enum GfxBlendMode { - gfxBlendNormal, - gfxBlendMultiply, - gfxBlendScreen, - gfxBlendOverlay, - gfxBlendDarken, - gfxBlendLighten, - gfxBlendColorDodge, - gfxBlendColorBurn, - gfxBlendHardLight, - gfxBlendSoftLight, - gfxBlendDifference, - gfxBlendExclusion, - gfxBlendHue, - gfxBlendSaturation, - gfxBlendColor, - gfxBlendLuminosity -}; - -//------------------------------------------------------------------------ -// GfxColorComp -//------------------------------------------------------------------------ - -// 16.16 fixed point color component -typedef int GfxColorComp; - -#define gfxColorComp1 0x10000 - -static inline GfxColorComp dblToCol(double x) { - return (GfxColorComp)(x * gfxColorComp1); -} - -static inline double colToDbl(GfxColorComp x) { - return (double)x / (double)gfxColorComp1; -} - -static inline Guchar dblToByte(double x) { - return (Guchar)(x * 255.0); -} - -static inline double byteToDbl(Guchar x) { - return (double)x / (double)255.0; -} - -static inline GfxColorComp byteToCol(Guchar x) { - // (x / 255) << 16 = (0.0000000100000001... * x) << 16 - // = ((x << 8) + (x) + (x >> 8) + ...) << 16 - // = (x << 8) + (x) + (x >> 7) - // [for rounding] - return (GfxColorComp)((x << 8) + x + (x >> 7)); -} - -static inline Guchar colToByte(GfxColorComp x) { - // 255 * x + 0.5 = 256 * x - x + 0x8000 - return (Guchar)(((x << 8) - x + 0x8000) >> 16); -} - -//------------------------------------------------------------------------ -// GfxColor -//------------------------------------------------------------------------ - -#define gfxColorMaxComps funcMaxOutputs - -struct GfxColor { - GfxColorComp c[gfxColorMaxComps]; -}; - -//------------------------------------------------------------------------ -// GfxGray -//------------------------------------------------------------------------ - -typedef GfxColorComp GfxGray; - -//------------------------------------------------------------------------ -// GfxRGB -//------------------------------------------------------------------------ - -struct GfxRGB { - GfxColorComp r, g, b; -}; - -//------------------------------------------------------------------------ -// GfxCMYK -//------------------------------------------------------------------------ - -struct GfxCMYK { - GfxColorComp c, m, y, k; -}; - -//------------------------------------------------------------------------ -// GfxColorSpace -//------------------------------------------------------------------------ - -// NB: The nGfxColorSpaceModes constant and the gfxColorSpaceModeNames -// array defined in GfxState.cc must match this enum. -enum GfxColorSpaceMode { - csDeviceGray, - csCalGray, - csDeviceRGB, - csCalRGB, - csDeviceCMYK, - csLab, - csICCBased, - csIndexed, - csSeparation, - csDeviceN, - csPattern -}; - -// wrapper of cmsHTRANSFORM to copy -class GfxColorTransform { -public: - void doTransform(void *in, void *out, unsigned int size); - // transformA should be a cmsHTRANSFORM - GfxColorTransform(void *transformA); - ~GfxColorTransform(); - void ref(); - unsigned int unref(); -private: - GfxColorTransform() {} - void *transform; - unsigned int refCount; -}; - -class GfxColorSpace { -public: - - GfxColorSpace(); - virtual ~GfxColorSpace(); - virtual GfxColorSpace *copy() = 0; - virtual GfxColorSpaceMode getMode() = 0; - - // Construct a color space. Returns NULL if unsuccessful. - static GfxColorSpace *parse(Object *csObj, Gfx *gfx); - - // Convert to gray, RGB, or CMYK. - virtual void getGray(GfxColor *color, GfxGray *gray) = 0; - virtual void getRGB(GfxColor *color, GfxRGB *rgb) = 0; - virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk) = 0; - virtual void getGrayLine(Guchar * /*in*/, Guchar * /*out*/, int /*length*/) { error(-1, "GfxColorSpace::getGrayLine this should not happen"); } - virtual void getRGBLine(Guchar * /*in*/, unsigned int * /*out*/, int /*length*/) { error(-1, "GfxColorSpace::getRGBLine (first variant) this should not happen"); } - virtual void getRGBLine(Guchar * /*in*/, Guchar * /*out*/, int /*length*/) { error(-1, "GfxColorSpace::getRGBLine (second variant) this should not happen"); } - virtual void getRGBXLine(Guchar * /*in*/, Guchar * /*out*/, int /*length*/) { error(-1, "GfxColorSpace::getRGBXLine this should not happen"); } - - // Does this ColorSpace support getRGBLine? - virtual GBool useGetRGBLine() { return gFalse; } - // Does this ColorSpace support getGrayLine? - virtual GBool useGetGrayLine() { return gFalse; } - - // Return the number of color components. - virtual int getNComps() = 0; - - // Get this color space's default color. - virtual void getDefaultColor(GfxColor *color) = 0; - - // Return the default ranges for each component, assuming an image - // with a max pixel value of <maxImgPixel>. - virtual void getDefaultRanges(double *decodeLow, double *decodeRange, - int maxImgPixel); - - // Returns true if painting operations in this color space never - // mark the page (e.g., the "None" colorant). - virtual GBool isNonMarking() { return gFalse; } - - // Return the number of color space modes - static int getNumColorSpaceModes(); - - // Return the name of the <idx>th color space mode. - static char *getColorSpaceModeName(int idx); - -#ifdef USE_CMS - static int setupColorProfiles(); - // displayProfileA should be a cmsHPROFILE - static void setDisplayProfile(void *displayProfileA); - static void setDisplayProfileName(GooString *name); - // result will be a cmsHPROFILE - static void *getRGBProfile(); - // result will be a cmsHPROFILE - static void *getDisplayProfile(); -#endif -}; - -//------------------------------------------------------------------------ -// GfxDeviceGrayColorSpace -//------------------------------------------------------------------------ - -class GfxDeviceGrayColorSpace: public GfxColorSpace { -public: - - GfxDeviceGrayColorSpace(); - virtual ~GfxDeviceGrayColorSpace(); - virtual GfxColorSpace *copy(); - virtual GfxColorSpaceMode getMode() { return csDeviceGray; } - - virtual void getGray(GfxColor *color, GfxGray *gray); - virtual void getRGB(GfxColor *color, GfxRGB *rgb); - virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); - virtual void getGrayLine(Guchar *in, Guchar *out, int length); - virtual void getRGBLine(Guchar *in, unsigned int *out, int length); - virtual void getRGBLine(Guchar *in, Guchar *out, int length); - virtual void getRGBXLine(Guchar *in, Guchar *out, int length); - - virtual GBool useGetRGBLine() { return gTrue; } - virtual GBool useGetGrayLine() { return gTrue; } - - virtual int getNComps() { return 1; } - virtual void getDefaultColor(GfxColor *color); - -private: -}; - -//------------------------------------------------------------------------ -// GfxCalGrayColorSpace -//------------------------------------------------------------------------ - -class GfxCalGrayColorSpace: public GfxColorSpace { -public: - - GfxCalGrayColorSpace(); - virtual ~GfxCalGrayColorSpace(); - virtual GfxColorSpace *copy(); - virtual GfxColorSpaceMode getMode() { return csCalGray; } - - // Construct a CalGray color space. Returns NULL if unsuccessful. - static GfxColorSpace *parse(Array *arr); - - virtual void getGray(GfxColor *color, GfxGray *gray); - virtual void getRGB(GfxColor *color, GfxRGB *rgb); - virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); - - virtual int getNComps() { return 1; } - virtual void getDefaultColor(GfxColor *color); - - // CalGray-specific access. - double getWhiteX() { return whiteX; } - double getWhiteY() { return whiteY; } - double getWhiteZ() { return whiteZ; } - double getBlackX() { return blackX; } - double getBlackY() { return blackY; } - double getBlackZ() { return blackZ; } - double getGamma() { return gamma; } - -private: - - double whiteX, whiteY, whiteZ; // white point - double blackX, blackY, blackZ; // black point - double gamma; // gamma value - double kr, kg, kb; // gamut mapping mulitpliers - void getXYZ(GfxColor *color, double *pX, double *pY, double *pZ); -}; - -//------------------------------------------------------------------------ -// GfxDeviceRGBColorSpace -//------------------------------------------------------------------------ - -class GfxDeviceRGBColorSpace: public GfxColorSpace { -public: - - GfxDeviceRGBColorSpace(); - virtual ~GfxDeviceRGBColorSpace(); - virtual GfxColorSpace *copy(); - virtual GfxColorSpaceMode getMode() { return csDeviceRGB; } - - virtual void getGray(GfxColor *color, GfxGray *gray); - virtual void getRGB(GfxColor *color, GfxRGB *rgb); - virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); - virtual void getGrayLine(Guchar *in, Guchar *out, int length); - virtual void getRGBLine(Guchar *in, unsigned int *out, int length); - virtual void getRGBLine(Guchar *in, Guchar *out, int length); - virtual void getRGBXLine(Guchar *in, Guchar *out, int length); - - virtual GBool useGetRGBLine() { return gTrue; } - virtual GBool useGetGrayLine() { return gTrue; } - - virtual int getNComps() { return 3; } - virtual void getDefaultColor(GfxColor *color); - -private: -}; - -//------------------------------------------------------------------------ -// GfxCalRGBColorSpace -//------------------------------------------------------------------------ - -class GfxCalRGBColorSpace: public GfxColorSpace { -public: - - GfxCalRGBColorSpace(); - virtual ~GfxCalRGBColorSpace(); - virtual GfxColorSpace *copy(); - virtual GfxColorSpaceMode getMode() { return csCalRGB; } - - // Construct a CalRGB color space. Returns NULL if unsuccessful. - static GfxColorSpace *parse(Array *arr); - - virtual void getGray(GfxColor *color, GfxGray *gray); - virtual void getRGB(GfxColor *color, GfxRGB *rgb); - virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); - - virtual int getNComps() { return 3; } - virtual void getDefaultColor(GfxColor *color); - - // CalRGB-specific access. - double getWhiteX() { return whiteX; } - double getWhiteY() { return whiteY; } - double getWhiteZ() { return whiteZ; } - double getBlackX() { return blackX; } - double getBlackY() { return blackY; } - double getBlackZ() { return blackZ; } - double getGammaR() { return gammaR; } - double getGammaG() { return gammaG; } - double getGammaB() { return gammaB; } - double *getMatrix() { return mat; } - -private: - - double whiteX, whiteY, whiteZ; // white point - double blackX, blackY, blackZ; // black point - double gammaR, gammaG, gammaB; // gamma values - double mat[9]; // ABC -> XYZ transform matrix - double kr, kg, kb; // gamut mapping mulitpliers - void getXYZ(GfxColor *color, double *pX, double *pY, double *pZ); -}; - -//------------------------------------------------------------------------ -// GfxDeviceCMYKColorSpace -//------------------------------------------------------------------------ - -class GfxDeviceCMYKColorSpace: public GfxColorSpace { -public: - - GfxDeviceCMYKColorSpace(); - virtual ~GfxDeviceCMYKColorSpace(); - virtual GfxColorSpace *copy(); - virtual GfxColorSpaceMode getMode() { return csDeviceCMYK; } - - virtual void getGray(GfxColor *color, GfxGray *gray); - virtual void getRGB(GfxColor *color, GfxRGB *rgb); - virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); - virtual void getRGBLine(Guchar *in, unsigned int *out, int length); - virtual void getRGBLine(Guchar *, Guchar *out, int length); - virtual void getRGBXLine(Guchar *in, Guchar *out, int length); - virtual GBool useGetRGBLine() { return gTrue; } - - virtual int getNComps() { return 4; } - virtual void getDefaultColor(GfxColor *color); - -private: -}; - -//------------------------------------------------------------------------ -// GfxLabColorSpace -//------------------------------------------------------------------------ - -class GfxLabColorSpace: public GfxColorSpace { -public: - - GfxLabColorSpace(); - virtual ~GfxLabColorSpace(); - virtual GfxColorSpace *copy(); - virtual GfxColorSpaceMode getMode() { return csLab; } - - // Construct a Lab color space. Returns NULL if unsuccessful. - static GfxColorSpace *parse(Array *arr); - - virtual void getGray(GfxColor *color, GfxGray *gray); - virtual void getRGB(GfxColor *color, GfxRGB *rgb); - virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); - - virtual int getNComps() { return 3; } - virtual void getDefaultColor(GfxColor *color); - - virtual void getDefaultRanges(double *decodeLow, double *decodeRange, - int maxImgPixel); - - // Lab-specific access. - double getWhiteX() { return whiteX; } - double getWhiteY() { return whiteY; } - double getWhiteZ() { return whiteZ; } - double getBlackX() { return blackX; } - double getBlackY() { return blackY; } - double getBlackZ() { return blackZ; } - double getAMin() { return aMin; } - double getAMax() { return aMax; } - double getBMin() { return bMin; } - double getBMax() { return bMax; } - -private: - - double whiteX, whiteY, whiteZ; // white point - double blackX, blackY, blackZ; // black point - double aMin, aMax, bMin, bMax; // range for the a and b components - double kr, kg, kb; // gamut mapping mulitpliers - void getXYZ(GfxColor *color, double *pX, double *pY, double *pZ); -}; - -//------------------------------------------------------------------------ -// GfxICCBasedColorSpace -//------------------------------------------------------------------------ - -class GfxICCBasedColorSpace: public GfxColorSpace { -public: - - GfxICCBasedColorSpace(int nCompsA, GfxColorSpace *altA, - Ref *iccProfileStreamA); - virtual ~GfxICCBasedColorSpace(); - virtual GfxColorSpace *copy(); - virtual GfxColorSpaceMode getMode() { return csICCBased; } - - // Construct an ICCBased color space. Returns NULL if unsuccessful. - static GfxColorSpace *parse(Array *arr, Gfx *gfx); - - virtual void getGray(GfxColor *color, GfxGray *gray); - virtual void getRGB(GfxColor *color, GfxRGB *rgb); - virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); - virtual void getRGBLine(Guchar *in, unsigned int *out, int length); - virtual void getRGBLine(Guchar *in, Guchar *out, int length); - virtual void getRGBXLine(Guchar *in, Guchar *out, int length); - - virtual GBool useGetRGBLine(); - - virtual int getNComps() { return nComps; } - virtual void getDefaultColor(GfxColor *color); - - virtual void getDefaultRanges(double *decodeLow, double *decodeRange, - int maxImgPixel); - - // ICCBased-specific access. - GfxColorSpace *getAlt() { return alt; } - -private: - - int nComps; // number of color components (1, 3, or 4) - GfxColorSpace *alt; // alternate color space - double rangeMin[4]; // min values for each component - double rangeMax[4]; // max values for each component - Ref iccProfileStream; // the ICC profile -#ifdef USE_CMS - GfxColorTransform *transform; - GfxColorTransform *lineTransform; // color transform for line -#endif -}; -//------------------------------------------------------------------------ -// GfxIndexedColorSpace -//------------------------------------------------------------------------ - -class GfxIndexedColorSpace: public GfxColorSpace { -public: - - GfxIndexedColorSpace(GfxColorSpace *baseA, int indexHighA); - virtual ~GfxIndexedColorSpace(); - virtual GfxColorSpace *copy(); - virtual GfxColorSpaceMode getMode() { return csIndexed; } - - // Construct a Lab color space. Returns NULL if unsuccessful. - static GfxColorSpace *parse(Array *arr, Gfx *gfx); - - virtual void getGray(GfxColor *color, GfxGray *gray); - virtual void getRGB(GfxColor *color, GfxRGB *rgb); - virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); - virtual void getRGBLine(Guchar *in, unsigned int *out, int length); - virtual void getRGBLine(Guchar *in, Guchar *out, int length); - virtual void getRGBXLine(Guchar *in, Guchar *out, int length); - - virtual GBool useGetRGBLine() { return gTrue; } - - virtual int getNComps() { return 1; } - virtual void getDefaultColor(GfxColor *color); - - virtual void getDefaultRanges(double *decodeLow, double *decodeRange, - int maxImgPixel); - - // Indexed-specific access. - GfxColorSpace *getBase() { return base; } - int getIndexHigh() { return indexHigh; } - Guchar *getLookup() { return lookup; } - GfxColor *mapColorToBase(GfxColor *color, GfxColor *baseColor); - -private: - - GfxColorSpace *base; // base color space - int indexHigh; // max pixel value - Guchar *lookup; // lookup table -}; - -//------------------------------------------------------------------------ -// GfxSeparationColorSpace -//------------------------------------------------------------------------ - -class GfxSeparationColorSpace: public GfxColorSpace { -public: - - GfxSeparationColorSpace(GooString *nameA, GfxColorSpace *altA, - Function *funcA); - virtual ~GfxSeparationColorSpace(); - virtual GfxColorSpace *copy(); - virtual GfxColorSpaceMode getMode() { return csSeparation; } - - // Construct a Separation color space. Returns NULL if unsuccessful. - static GfxColorSpace *parse(Array *arr, Gfx *gfx); - - virtual void getGray(GfxColor *color, GfxGray *gray); - virtual void getRGB(GfxColor *color, GfxRGB *rgb); - virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); - - virtual int getNComps() { return 1; } - virtual void getDefaultColor(GfxColor *color); - - virtual GBool isNonMarking() { return nonMarking; } - - // Separation-specific access. - GooString *getName() { return name; } - GfxColorSpace *getAlt() { return alt; } - Function *getFunc() { return func; } - -private: - - GooString *name; // colorant name - GfxColorSpace *alt; // alternate color space - Function *func; // tint transform (into alternate color space) - GBool nonMarking; -}; - -//------------------------------------------------------------------------ -// GfxDeviceNColorSpace -//------------------------------------------------------------------------ - -class GfxDeviceNColorSpace: public GfxColorSpace { -public: - - GfxDeviceNColorSpace(int nCompsA, GfxColorSpace *alt, Function *func); - virtual ~GfxDeviceNColorSpace(); - virtual GfxColorSpace *copy(); - virtual GfxColorSpaceMode getMode() { return csDeviceN; } - - // Construct a DeviceN color space. Returns NULL if unsuccessful. - static GfxColorSpace *parse(Array *arr, Gfx *gfx); - - virtual void getGray(GfxColor *color, GfxGray *gray); - virtual void getRGB(GfxColor *color, GfxRGB *rgb); - virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); - - virtual int getNComps() { return nComps; } - virtual void getDefaultColor(GfxColor *color); - - virtual GBool isNonMarking() { return nonMarking; } - - // DeviceN-specific access. - GooString *getColorantName(int i) { return names[i]; } - GfxColorSpace *getAlt() { return alt; } - Function *getTintTransformFunc() { return func; } - -private: - - int nComps; // number of components - GooString // colorant names - *names[gfxColorMaxComps]; - GfxColorSpace *alt; // alternate color space - Function *func; // tint transform (into alternate color space) - GBool nonMarking; -}; - -//------------------------------------------------------------------------ -// GfxPatternColorSpace -//------------------------------------------------------------------------ - -class GfxPatternColorSpace: public GfxColorSpace { -public: - - GfxPatternColorSpace(GfxColorSpace *underA); - virtual ~GfxPatternColorSpace(); - virtual GfxColorSpace *copy(); - virtual GfxColorSpaceMode getMode() { return csPattern; } - - // Construct a Pattern color space. Returns NULL if unsuccessful. - static GfxColorSpace *parse(Array *arr, Gfx *gfx); - - virtual void getGray(GfxColor *color, GfxGray *gray); - virtual void getRGB(GfxColor *color, GfxRGB *rgb); - virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); - - virtual int getNComps() { return 0; } - virtual void getDefaultColor(GfxColor *color); - - // Pattern-specific access. - GfxColorSpace *getUnder() { return under; } - -private: - - GfxColorSpace *under; // underlying color space (for uncolored - // patterns) -}; - -//------------------------------------------------------------------------ -// GfxPattern -//------------------------------------------------------------------------ - -class GfxPattern { -public: - - GfxPattern(int typeA); - virtual ~GfxPattern(); - - static GfxPattern *parse(Object *obj, Gfx *gfx); - - virtual GfxPattern *copy() = 0; - - int getType() { return type; } - -private: - - int type; -}; - -//------------------------------------------------------------------------ -// GfxTilingPattern -//------------------------------------------------------------------------ - -class GfxTilingPattern: public GfxPattern { -public: - - static GfxTilingPattern *parse(Object *patObj); - virtual ~GfxTilingPattern(); - - virtual GfxPattern *copy(); - - int getPaintType() { return paintType; } - int getTilingType() { return tilingType; } - double *getBBox() { return bbox; } - double getXStep() { return xStep; } - double getYStep() { return yStep; } - Dict *getResDict() - { return resDict.isDict() ? resDict.getDict() : (Dict *)NULL; } - double *getMatrix() { return matrix; } - Object *getContentStream() { return &contentStream; } - -private: - - GfxTilingPattern(int paintTypeA, int tilingTypeA, - double *bboxA, double xStepA, double yStepA, - Object *resDictA, double *matrixA, - Object *contentStreamA); - - int paintType; - int tilingType; - double bbox[4]; - double xStep, yStep; - Object resDict; - double matrix[6]; - Object contentStream; -}; - -//------------------------------------------------------------------------ -// GfxShadingPattern -//------------------------------------------------------------------------ - -class GfxShadingPattern: public GfxPattern { -public: - - static GfxShadingPattern *parse(Object *patObj, Gfx *gfx); - virtual ~GfxShadingPattern(); - - virtual GfxPattern *copy(); - - GfxShading *getShading() { return shading; } - double *getMatrix() { return matrix; } - -private: - - GfxShadingPattern(GfxShading *shadingA, double *matrixA); - - GfxShading *shading; - double matrix[6]; -}; - -//------------------------------------------------------------------------ -// GfxShading -//------------------------------------------------------------------------ - -class GfxShading { -public: - - GfxShading(int typeA); - GfxShading(GfxShading *shading); - virtual ~GfxShading(); - - static GfxShading *parse(Object *obj, Gfx *gfx); - - virtual GfxShading *copy() = 0; - - int getType() { return type; } - GfxColorSpace *getColorSpace() { return colorSpace; } - GfxColor *getBackground() { return &background; } - GBool getHasBackground() { return hasBackground; } - void getBBox(double *xMinA, double *yMinA, double *xMaxA, double *yMaxA) - { *xMinA = xMin; *yMinA = yMin; *xMaxA = xMax; *yMaxA = yMax; } - GBool getHasBBox() { return hasBBox; } - -protected: - - GBool init(Dict *dict, Gfx *gfx); - - int type; - GfxColorSpace *colorSpace; - GfxColor background; - GBool hasBackground; - double xMin, yMin, xMax, yMax; - GBool hasBBox; -}; - -//------------------------------------------------------------------------ -// GfxUnivariateShading -//------------------------------------------------------------------------ - -class GfxUnivariateShading: public GfxShading { -public: - - GfxUnivariateShading(int typeA, - double t0A, double t1A, - Function **funcsA, int nFuncsA, - GBool extend0A, GBool extend1A); - GfxUnivariateShading(GfxUnivariateShading *shading); - virtual ~GfxUnivariateShading(); - - double getDomain0() { return t0; } - double getDomain1() { return t1; } - GBool getExtend0() { return extend0; } - GBool getExtend1() { return extend1; } - int getNFuncs() { return nFuncs; } - Function *getFunc(int i) { return funcs[i]; } - void getColor(double t, GfxColor *color); - - void setupCache(const Matrix *ctm, - double xMin, double yMin, - double xMax, double yMax); - - virtual void getParameterRange(double *lower, double *upper, - double xMin, double yMin, - double xMax, double yMax) = 0; - - virtual double getDistance(double tMin, double tMax) = 0; - -private: - - double t0, t1; - Function *funcs[gfxColorMaxComps]; - int nFuncs; - GBool extend0, extend1; - - int cacheSize, lastMatch; - double *cacheBounds; - double *cacheCoeff; - double *cacheValues; -}; - -//------------------------------------------------------------------------ -// GfxFunctionShading -//------------------------------------------------------------------------ - -class GfxFunctionShading: public GfxShading { -public: - - GfxFunctionShading(double x0A, double y0A, - double x1A, double y1A, - double *matrixA, - Function **funcsA, int nFuncsA); - GfxFunctionShading(GfxFunctionShading *shading); - virtual ~GfxFunctionShading(); - - static GfxFunctionShading *parse(Dict *dict, Gfx *gfx); - - virtual GfxShading *copy(); - - void getDomain(double *x0A, double *y0A, double *x1A, double *y1A) - { *x0A = x0; *y0A = y0; *x1A = x1; *y1A = y1; } - double *getMatrix() { return matrix; } - int getNFuncs() { return nFuncs; } - Function *getFunc(int i) { return funcs[i]; } - void getColor(double x, double y, GfxColor *color); - -private: - - double x0, y0, x1, y1; - double matrix[6]; - Function *funcs[gfxColorMaxComps]; - int nFuncs; -}; - -//------------------------------------------------------------------------ -// GfxAxialShading -//------------------------------------------------------------------------ - -class GfxAxialShading: public GfxUnivariateShading { -public: - - GfxAxialShading(double x0A, double y0A, - double x1A, double y1A, - double t0A, double t1A, - Function **funcsA, int nFuncsA, - GBool extend0A, GBool extend1A); - GfxAxialShading(GfxAxialShading *shading); - virtual ~GfxAxialShading(); - - static GfxAxialShading *parse(Dict *dict, Gfx *gfx); - - virtual GfxShading *copy(); - - void getCoords(double *x0A, double *y0A, double *x1A, double *y1A) - { *x0A = x0; *y0A = y0; *x1A = x1; *y1A = y1; } - - virtual void getParameterRange(double *lower, double *upper, - double xMin, double yMin, - double xMax, double yMax); - - virtual double getDistance(double tMin, double tMax); - -private: - - double x0, y0, x1, y1; -}; - -//------------------------------------------------------------------------ -// GfxRadialShading -//------------------------------------------------------------------------ - -class GfxRadialShading: public GfxUnivariateShading { -public: - - GfxRadialShading(double x0A, double y0A, double r0A, - double x1A, double y1A, double r1A, - double t0A, double t1A, - Function **funcsA, int nFuncsA, - GBool extend0A, GBool extend1A); - GfxRadialShading(GfxRadialShading *shading); - virtual ~GfxRadialShading(); - - static GfxRadialShading *parse(Dict *dict, Gfx *gfx); - - virtual GfxShading *copy(); - - void getCoords(double *x0A, double *y0A, double *r0A, - double *x1A, double *y1A, double *r1A) - { *x0A = x0; *y0A = y0; *r0A = r0; *x1A = x1; *y1A = y1; *r1A = r1; } - - virtual void getParameterRange(double *lower, double *upper, - double xMin, double yMin, - double xMax, double yMax); - - virtual double getDistance(double tMin, double tMax); - -private: - - double x0, y0, r0, x1, y1, r1; -}; - -//------------------------------------------------------------------------ -// GfxGouraudTriangleShading -//------------------------------------------------------------------------ - -struct GfxGouraudVertex { - double x, y; - GfxColor color; -}; - -class GfxGouraudTriangleShading: public GfxShading { -public: - - GfxGouraudTriangleShading(int typeA, - GfxGouraudVertex *verticesA, int nVerticesA, - int (*trianglesA)[3], int nTrianglesA, - Function **funcsA, int nFuncsA); - GfxGouraudTriangleShading(GfxGouraudTriangleShading *shading); - virtual ~GfxGouraudTriangleShading(); - - static GfxGouraudTriangleShading *parse(int typeA, Dict *dict, Stream *str, Gfx *gfx); - - virtual GfxShading *copy(); - - int getNTriangles() { return nTriangles; } - - bool isParameterized() const { return nFuncs > 0; } - - /** - * @precondition isParameterized() == true - */ - double getParameterDomainMin() const { assert(isParameterized()); return funcs[0]->getDomainMin(0); } - - /** - * @precondition isParameterized() == true - */ - double getParameterDomainMax() const { assert(isParameterized()); return funcs[0]->getDomainMax(0); } - - /** - * @precondition isParameterized() == false - */ - void getTriangle(int i, double *x0, double *y0, GfxColor *color0, - double *x1, double *y1, GfxColor *color1, - double *x2, double *y2, GfxColor *color2); - - /** - * Variant for functions. - * - * @precondition isParameterized() == true - */ - void getTriangle(int i, double *x0, double *y0, double *color0, - double *x1, double *y1, double *color1, - double *x2, double *y2, double *color2); - - void getParameterizedColor(double t, GfxColor *color); - -private: - - GfxGouraudVertex *vertices; - int nVertices; - int (*triangles)[3]; - int nTriangles; - Function *funcs[gfxColorMaxComps]; - int nFuncs; -}; - -//------------------------------------------------------------------------ -// GfxPatchMeshShading -//------------------------------------------------------------------------ - -/** - * A tensor product cubic bezier patch consisting of 4x4 points and 4 color - * values. - * - * See the Shading Type 7 specifications. Note that Shading Type 6 is also - * represented using GfxPatch. - */ -struct GfxPatch { - /** - * Represents a single color value for the patch. - */ - struct ColorValue { - /** - * For parameterized patches, only element 0 is valid; it contains - * the single parameter. - * - * For non-parameterized patches, c contains all color components - * as decoded from the input stream. In this case, you will need to - * use dblToCol() before assigning them to GfxColor. - */ - double c[gfxColorMaxComps]; - }; - - double x[4][4]; - double y[4][4]; - ColorValue color[2][2]; -}; - -class GfxPatchMeshShading: public GfxShading { -public: - - GfxPatchMeshShading(int typeA, GfxPatch *patchesA, int nPatchesA, - Function **funcsA, int nFuncsA); - GfxPatchMeshShading(GfxPatchMeshShading *shading); - virtual ~GfxPatchMeshShading(); - - static GfxPatchMeshShading *parse(int typeA, Dict *dict, Stream *str, Gfx *gfx); - - virtual GfxShading *copy(); - - int getNPatches() { return nPatches; } - GfxPatch *getPatch(int i) { return &patches[i]; } - - bool isParameterized() const { return nFuncs > 0; } - - /** - * @precondition isParameterized() == true - */ - double getParameterDomainMin() const { assert(isParameterized()); return funcs[0]->getDomainMin(0); } - - /** - * @precondition isParameterized() == true - */ - double getParameterDomainMax() const { assert(isParameterized()); return funcs[0]->getDomainMax(0); } - - void getParameterizedColor(double t, GfxColor *color); - -private: - - GfxPatch *patches; - int nPatches; - Function *funcs[gfxColorMaxComps]; - int nFuncs; -}; - -//------------------------------------------------------------------------ -// GfxImageColorMap -//------------------------------------------------------------------------ - -class GfxImageColorMap { -public: - - // Constructor. - GfxImageColorMap(int bitsA, Object *decode, GfxColorSpace *colorSpaceA); - - // Destructor. - ~GfxImageColorMap(); - - // Return a copy of this color map. - GfxImageColorMap *copy() { return new GfxImageColorMap(this); } - - // Is color map valid? - GBool isOk() { return ok; } - - // Get the color space. - GfxColorSpace *getColorSpace() { return colorSpace; } - - // Get stream decoding info. - int getNumPixelComps() { return nComps; } - int getBits() { return bits; } - - // Get decode table. - double getDecodeLow(int i) { return decodeLow[i]; } - double getDecodeHigh(int i) { return decodeLow[i] + decodeRange[i]; } - - bool useRGBLine() { return (colorSpace2 && colorSpace2->useGetRGBLine ()) || (!colorSpace2 && colorSpace->useGetRGBLine ()); } - - // Convert an image pixel to a color. - void getGray(Guchar *x, GfxGray *gray); - void getRGB(Guchar *x, GfxRGB *rgb); - void getRGBLine(Guchar *in, unsigned int *out, int length); - void getRGBLine(Guchar *in, Guchar *out, int length); - void getRGBXLine(Guchar *in, Guchar *out, int length); - void getGrayLine(Guchar *in, Guchar *out, int length); - void getCMYK(Guchar *x, GfxCMYK *cmyk); - void getColor(Guchar *x, GfxColor *color); - -private: - - GfxImageColorMap(GfxImageColorMap *colorMap); - - GfxColorSpace *colorSpace; // the image color space - int bits; // bits per component - int nComps; // number of components in a pixel - GfxColorSpace *colorSpace2; // secondary color space - int nComps2; // number of components in colorSpace2 - GfxColorComp * // lookup table - lookup[gfxColorMaxComps]; - Guchar *byte_lookup; - double // minimum values for each component - decodeLow[gfxColorMaxComps]; - double // max - min value for each component - decodeRange[gfxColorMaxComps]; - GBool ok; -}; - -//------------------------------------------------------------------------ -// GfxSubpath and GfxPath -//------------------------------------------------------------------------ - -class GfxSubpath { -public: - - // Constructor. - GfxSubpath(double x1, double y1); - - // Destructor. - ~GfxSubpath(); - - // Copy. - GfxSubpath *copy() { return new GfxSubpath(this); } - - // Get points. - int getNumPoints() { return n; } - double getX(int i) { return x[i]; } - double getY(int i) { return y[i]; } - GBool getCurve(int i) { return curve[i]; } - - void setX(int i, double a) { x[i] = a; } - void setY(int i, double a) { y[i] = a; } - - // Get last point. - double getLastX() { return x[n-1]; } - double getLastY() { return y[n-1]; } - - // Add a line segment. - void lineTo(double x1, double y1); - - // Add a Bezier curve. - void curveTo(double x1, double y1, double x2, double y2, - double x3, double y3); - - // Close the subpath. - void close(); - GBool isClosed() { return closed; } - - // Add (<dx>, <dy>) to each point in the subpath. - void offset(double dx, double dy); - -private: - - double *x, *y; // points - GBool *curve; // curve[i] => point i is a control point - // for a Bezier curve - int n; // number of points - int size; // size of x/y arrays - GBool closed; // set if path is closed - - GfxSubpath(GfxSubpath *subpath); -}; - -class GfxPath { -public: - - // Constructor. - GfxPath(); - - // Destructor. - ~GfxPath(); - - // Copy. - GfxPath *copy() - { return new GfxPath(justMoved, firstX, firstY, subpaths, n, size); } - - // Is there a current point? - GBool isCurPt() { return n > 0 || justMoved; } - - // Is the path non-empty, i.e., is there at least one segment? - GBool isPath() { return n > 0; } - - // Get subpaths. - int getNumSubpaths() { return n; } - GfxSubpath *getSubpath(int i) { return subpaths[i]; } - - // Get last point on last subpath. - double getLastX() { return subpaths[n-1]->getLastX(); } - double getLastY() { return subpaths[n-1]->getLastY(); } - - // Move the current point. - void moveTo(double x, double y); - - // Add a segment to the last subpath. - void lineTo(double x, double y); - - // Add a Bezier curve to the last subpath - void curveTo(double x1, double y1, double x2, double y2, - double x3, double y3); - - // Close the last subpath. - void close(); - - // Append <path> to <this>. - void append(GfxPath *path); - - // Add (<dx>, <dy>) to each point in the path. - void offset(double dx, double dy); - -private: - - GBool justMoved; // set if a new subpath was just started - double firstX, firstY; // first point in new subpath - GfxSubpath **subpaths; // subpaths - int n; // number of subpaths - int size; // size of subpaths array - - GfxPath(GBool justMoved1, double firstX1, double firstY1, - GfxSubpath **subpaths1, int n1, int size1); -}; - -//------------------------------------------------------------------------ -// GfxState -//------------------------------------------------------------------------ - -class GfxState { -public: - /** - * When GfxState::getReusablePath() is invoked, the currently active - * path is taken per reference and its coordinates can be re-edited. - * - * A ReusablePathIterator is intented to reduce overhead when the same - * path type is used a lot of times, only with different coordinates. It - * allows just to update the coordinates (occuring in the same order as - * in the original path). - */ - class ReusablePathIterator { - public: - /** - * Creates the ReusablePathIterator. This should only be done from - * GfxState::getReusablePath(). - * - * @param path the path as it is used so far. Changing this path, - * deleting it or starting a new path from scratch will most likely - * invalidate the iterator (and may cause serious problems). Make - * sure the path's memory structure is not changed during the - * lifetime of the ReusablePathIterator. - */ - ReusablePathIterator( GfxPath* path ); - - /** - * Returns true if and only if the current iterator position is - * beyond the last valid point. - * - * A call to setCoord() will be undefined. - */ - bool isEnd() const; - - /** - * Advances the iterator. - */ - void next(); - - /** - * Updates the coordinates associated to the current iterator - * position. - */ - void setCoord( double x, double y ); - - /** - * Resets the iterator. - */ - void reset(); - private: - GfxPath *path; - int subPathOff; - - int coordOff; - int numCoords; - - GfxSubpath *curSubPath; - }; - - // Construct a default GfxState, for a device with resolution <hDPI> - // x <vDPI>, page box <pageBox>, page rotation <rotateA>, and - // coordinate system specified by <upsideDown>. - GfxState(double hDPIA, double vDPIA, PDFRectangle *pageBox, - int rotateA, GBool upsideDown); - - // Destructor. - ~GfxState(); - - // Copy. - GfxState *copy() { return new GfxState(this); } - - // Accessors. - double getHDPI() { return hDPI; } - double getVDPI() { return vDPI; } - double *getCTM() { return ctm; } - void getCTM(Matrix *m) { memcpy (m->m, ctm, sizeof m->m); } - double getX1() { return px1; } - double getY1() { return py1; } - double getX2() { return px2; } - double getY2() { return py2; } - double getPageWidth() { return pageWidth; } - double getPageHeight() { return pageHeight; } - int getRotate() { return rotate; } - GfxColor *getFillColor() { return &fillColor; } - GfxColor *getStrokeColor() { return &strokeColor; } - void getFillGray(GfxGray *gray) - { fillColorSpace->getGray(&fillColor, gray); } - void getStrokeGray(GfxGray *gray) - { strokeColorSpace->getGray(&strokeColor, gray); } - void getFillRGB(GfxRGB *rgb) - { fillColorSpace->getRGB(&fillColor, rgb); } - void getStrokeRGB(GfxRGB *rgb) - { strokeColorSpace->getRGB(&strokeColor, rgb); } - void getFillCMYK(GfxCMYK *cmyk) - { fillColorSpace->getCMYK(&fillColor, cmyk); } - void getStrokeCMYK(GfxCMYK *cmyk) - { strokeColorSpace->getCMYK(&strokeColor, cmyk); } - GfxColorSpace *getFillColorSpace() { return fillColorSpace; } - GfxColorSpace *getStrokeColorSpace() { return strokeColorSpace; } - GfxPattern *getFillPattern() { return fillPattern; } - GfxPattern *getStrokePattern() { return strokePattern; } - GfxBlendMode getBlendMode() { return blendMode; } - double getFillOpacity() { return fillOpacity; } - double getStrokeOpacity() { return strokeOpacity; } - GBool getFillOverprint() { return fillOverprint; } - GBool getStrokeOverprint() { return strokeOverprint; } - int getOverprintMode() { return overprintMode; } - Function **getTransfer() { return transfer; } - double getLineWidth() { return lineWidth; } - void getLineDash(double **dash, int *length, double *start) - { *dash = lineDash; *length = lineDashLength; *start = lineDashStart; } - int getFlatness() { return flatness; } - int getLineJoin() { return lineJoin; } - int getLineCap() { return lineCap; } - double getMiterLimit() { return miterLimit; } - GBool getStrokeAdjust() { return strokeAdjust; } - GBool getAlphaIsShape() { return alphaIsShape; } - GBool getTextKnockout() { return textKnockout; } - GfxFont *getFont() { return font; } - double getFontSize() { return fontSize; } - double *getTextMat() { return textMat; } - double getCharSpace() { return charSpace; } - double getWordSpace() { return wordSpace; } - double getHorizScaling() { return horizScaling; } - double getLeading() { return leading; } - double getRise() { return rise; } - int getRender() { return render; } - GfxPath *getPath() { return path; } - void setPath(GfxPath *pathA); - double getCurX() { return curX; } - double getCurY() { return curY; } - void getClipBBox(double *xMin, double *yMin, double *xMax, double *yMax) - { *xMin = clipXMin; *yMin = clipYMin; *xMax = clipXMax; *yMax = clipYMax; } - void getUserClipBBox(double *xMin, double *yMin, double *xMax, double *yMax); - double getLineX() { return lineX; } - double getLineY() { return lineY; } - - // Is there a current point/path? - GBool isCurPt() { return path->isCurPt(); } - GBool isPath() { return path->isPath(); } - - // Transforms. - void transform(double x1, double y1, double *x2, double *y2) - { *x2 = ctm[0] * x1 + ctm[2] * y1 + ctm[4]; - *y2 = ctm[1] * x1 + ctm[3] * y1 + ctm[5]; } - void transformDelta(double x1, double y1, double *x2, double *y2) - { *x2 = ctm[0] * x1 + ctm[2] * y1; - *y2 = ctm[1] * x1 + ctm[3] * y1; } - void textTransform(double x1, double y1, double *x2, double *y2) - { *x2 = textMat[0] * x1 + textMat[2] * y1 + textMat[4]; - *y2 = textMat[1] * x1 + textMat[3] * y1 + textMat[5]; } - void textTransformDelta(double x1, double y1, double *x2, double *y2) - { *x2 = textMat[0] * x1 + textMat[2] * y1; - *y2 = textMat[1] * x1 + textMat[3] * y1; } - double transformWidth(double w); - double getTransformedLineWidth() - { return transformWidth(lineWidth); } - double getTransformedFontSize(); - void getFontTransMat(double *m11, double *m12, double *m21, double *m22); - - // Change state parameters. - void setCTM(double a, double b, double c, - double d, double e, double f); - void concatCTM(double a, double b, double c, - double d, double e, double f); - void shiftCTM(double tx, double ty); - void setFillColorSpace(GfxColorSpace *colorSpace); - void setStrokeColorSpace(GfxColorSpace *colorSpace); - void setFillColor(GfxColor *color) { fillColor = *color; } - void setStrokeColor(GfxColor *color) { strokeColor = *color; } - void setFillPattern(GfxPattern *pattern); - void setStrokePattern(GfxPattern *pattern); - void setBlendMode(GfxBlendMode mode) { blendMode = mode; } - void setFillOpacity(double opac) { fillOpacity = opac; } - void setStrokeOpacity(double opac) { strokeOpacity = opac; } - void setFillOverprint(GBool op) { fillOverprint = op; } - void setStrokeOverprint(GBool op) { strokeOverprint = op; } - void setOverprintMode(int op) { overprintMode = op; } - void setTransfer(Function **funcs); - void setLineWidth(double width) { lineWidth = width; } - void setLineDash(double *dash, int length, double start); - void setFlatness(int flatness1) { flatness = flatness1; } - void setLineJoin(int lineJoin1) { lineJoin = lineJoin1; } - void setLineCap(int lineCap1) { lineCap = lineCap1; } - void setMiterLimit(double limit) { miterLimit = limit; } - void setStrokeAdjust(GBool sa) { strokeAdjust = sa; } - void setAlphaIsShape(GBool ais) { alphaIsShape = ais; } - void setTextKnockout(GBool tk) { textKnockout = tk; } - void setFont(GfxFont *fontA, double fontSizeA); - void setTextMat(double a, double b, double c, - double d, double e, double f) - { textMat[0] = a; textMat[1] = b; textMat[2] = c; - textMat[3] = d; textMat[4] = e; textMat[5] = f; } - void setCharSpace(double space) - { charSpace = space; } - void setWordSpace(double space) - { wordSpace = space; } - void setHorizScaling(double scale) - { horizScaling = 0.01 * scale; } - void setLeading(double leadingA) - { leading = leadingA; } - void setRise(double riseA) - { rise = riseA; } - void setRender(int renderA) - { render = renderA; } - - // Add to path. - void moveTo(double x, double y) - { path->moveTo(curX = x, curY = y); } - void lineTo(double x, double y) - { path->lineTo(curX = x, curY = y); } - void curveTo(double x1, double y1, double x2, double y2, - double x3, double y3) - { path->curveTo(x1, y1, x2, y2, curX = x3, curY = y3); } - void closePath() - { path->close(); curX = path->getLastX(); curY = path->getLastY(); } - void clearPath(); - - // Update clip region. - void clip(); - void clipToStrokePath(); - - // Text position. - void textSetPos(double tx, double ty) { lineX = tx; lineY = ty; } - void textMoveTo(double tx, double ty) - { lineX = tx; lineY = ty; textTransform(tx, ty, &curX, &curY); } - void textShift(double tx, double ty); - void shift(double dx, double dy); - - // Push/pop GfxState on/off stack. - GfxState *save(); - GfxState *restore(); - GBool hasSaves() { return saved != NULL; } - GBool isParentState(GfxState *state) { return saved == state || (saved && saved->isParentState(state)); } - - // Misc - GBool parseBlendMode(Object *obj, GfxBlendMode *mode); - - ReusablePathIterator *getReusablePath() { return new ReusablePathIterator(path); } -private: - - double hDPI, vDPI; // resolution - double ctm[6]; // coord transform matrix - double px1, py1, px2, py2; // page corners (user coords) - double pageWidth, pageHeight; // page size (pixels) - int rotate; // page rotation angle - - GfxColorSpace *fillColorSpace; // fill color space - GfxColorSpace *strokeColorSpace; // stroke color space - GfxColor fillColor; // fill color - GfxColor strokeColor; // stroke color - GfxPattern *fillPattern; // fill pattern - GfxPattern *strokePattern; // stroke pattern - GfxBlendMode blendMode; // transparency blend mode - double fillOpacity; // fill opacity - double strokeOpacity; // stroke opacity - GBool fillOverprint; // fill overprint - GBool strokeOverprint; // stroke overprint - int overprintMode; // overprint mode - Function *transfer[4]; // transfer function (entries may be: all - // NULL = identity; last three NULL = - // single function; all four non-NULL = - // R,G,B,gray functions) - - double lineWidth; // line width - double *lineDash; // line dash - int lineDashLength; - double lineDashStart; - int flatness; // curve flatness - int lineJoin; // line join style - int lineCap; // line cap style - double miterLimit; // line miter limit - GBool strokeAdjust; // stroke adjustment - GBool alphaIsShape; // alpha is shape - GBool textKnockout; // text knockout - - GfxFont *font; // font - double fontSize; // font size - double textMat[6]; // text matrix - double charSpace; // character spacing - double wordSpace; // word spacing - double horizScaling; // horizontal scaling - double leading; // text leading - double rise; // text rise - int render; // text rendering mode - - GfxPath *path; // array of path elements - double curX, curY; // current point (user coords) - double lineX, lineY; // start of current text line (text coords) - - double clipXMin, clipYMin, // bounding box for clip region - clipXMax, clipYMax; - - GfxState *saved; // next GfxState on stack - - GfxState(GfxState *state); -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxState_helpers.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxState_helpers.h deleted file mode 100644 index bc0024edd79..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/GfxState_helpers.h +++ /dev/null @@ -1,82 +0,0 @@ -//======================================================================== -// -// GfxState.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2009, 2011 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include "GfxState.h" - -static inline GfxColorComp clip01(GfxColorComp x) { - return (x < 0) ? 0 : (x > gfxColorComp1) ? gfxColorComp1 : x; -} - -static inline double clip01(double x) { - return (x < 0) ? 0 : (x > 1) ? 1 : x; -} - -static inline void cmykToRGBMatrixMultiplication(const double &c, const double &m, const double &y, const double &k, const double &c1, const double &m1, const double &y1, const double &k1, double &r, double &g, double &b) -{ - double x; - // this is a matrix multiplication, unrolled for performance - // C M Y K - x = c1 * m1 * y1 * k1; // 0 0 0 0 - r = g = b = x; - x = c1 * m1 * y1 * k; // 0 0 0 1 - r += 0.1373 * x; - g += 0.1216 * x; - b += 0.1255 * x; - x = c1 * m1 * y * k1; // 0 0 1 0 - r += x; - g += 0.9490 * x; - x = c1 * m1 * y * k; // 0 0 1 1 - r += 0.1098 * x; - g += 0.1020 * x; - x = c1 * m * y1 * k1; // 0 1 0 0 - r += 0.9255 * x; - b += 0.5490 * x; - x = c1 * m * y1 * k; // 0 1 0 1 - r += 0.1412 * x; - x = c1 * m * y * k1; // 0 1 1 0 - r += 0.9294 * x; - g += 0.1098 * x; - b += 0.1412 * x; - x = c1 * m * y * k; // 0 1 1 1 - r += 0.1333 * x; - x = c * m1 * y1 * k1; // 1 0 0 0 - g += 0.6784 * x; - b += 0.9373 * x; - x = c * m1 * y1 * k; // 1 0 0 1 - g += 0.0588 * x; - b += 0.1412 * x; - x = c * m1 * y * k1; // 1 0 1 0 - g += 0.6510 * x; - b += 0.3137 * x; - x = c * m1 * y * k; // 1 0 1 1 - g += 0.0745 * x; - x = c * m * y1 * k1; // 1 1 0 0 - r += 0.1804 * x; - g += 0.1922 * x; - b += 0.5725 * x; - x = c * m * y1 * k; // 1 1 0 1 - b += 0.0078 * x; - x = c * m * y * k1; // 1 1 1 0 - r += 0.2118 * x; - g += 0.2119 * x; - b += 0.2235 * x; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/GlobalParams.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/GlobalParams.cc deleted file mode 100644 index 2e11bb08c11..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/GlobalParams.cc +++ /dev/null @@ -1,2025 +0,0 @@ -//======================================================================== -// -// GlobalParams.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Martin Kretzschmar <martink@gnome.org> -// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005, 2007-2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> -// Copyright (C) 2006, 2007 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> -// Copyright (C) 2006 Ed Catmur <ed@catmur.co.uk> -// Copyright (C) 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// Copyright (C) 2007, 2009 Jonathan Kew <jonathan_kew@sil.org> -// Copyright (C) 2009 Petr Gajdos <pgajdos@novell.com> -// Copyright (C) 2009, 2011 William Bader <williambader@hotmail.com> -// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> -// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2010 Patrick Spendrin <ps_ml@gmx.de> -// Copyright (C) 2010 Jakub Wilk <ubanus@users.sf.net> -// Copyright (C) 2011 Pino Toscano <pino@kde.org> -// Copyright (C) 2011 Koji Otani <sho@bbr.jp> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <string.h> -#include <stdio.h> -#include <ctype.h> -#ifdef ENABLE_PLUGINS -# ifndef _WIN32 -# include <dlfcn.h> -# endif -#endif -#ifdef _WIN32 -# include <shlobj.h> -# include <mbstring.h> -#endif -#include "goo/gmem.h" -#include "goo/GooString.h" -#include "goo/GooList.h" -#include "goo/GooHash.h" -#include "goo/gfile.h" -#include "Error.h" -#include "NameToCharCode.h" -#include "CharCodeToUnicode.h" -#include "UnicodeMap.h" -#include "CMap.h" -#include "BuiltinFontTables.h" -#include "FontEncodingTables.h" -#ifdef ENABLE_PLUGINS -# include "XpdfPluginAPI.h" -#endif -#include "GlobalParams.h" -#include "GfxFont.h" - -#if WITH_FONTCONFIGURATION_FONTCONFIG -#include <fontconfig/fontconfig.h> -#endif - -#ifdef _WIN32 -# define strcasecmp stricmp -#else -# include <strings.h> -#endif - -#if MULTITHREADED -# define lockGlobalParams gLockMutex(&mutex) -# define lockUnicodeMapCache gLockMutex(&unicodeMapCacheMutex) -# define lockCMapCache gLockMutex(&cMapCacheMutex) -# define unlockGlobalParams gUnlockMutex(&mutex) -# define unlockUnicodeMapCache gUnlockMutex(&unicodeMapCacheMutex) -# define unlockCMapCache gUnlockMutex(&cMapCacheMutex) -#else -# define lockGlobalParams -# define lockUnicodeMapCache -# define lockCMapCache -# define unlockGlobalParams -# define unlockUnicodeMapCache -# define unlockCMapCache -#endif - -#ifndef FC_WEIGHT_BOOK -#define FC_WEIGHT_BOOK 75 -#endif - -#include "NameToUnicodeTable.h" -#include "UnicodeMapTables.h" -#include "UTF8.h" - -#ifdef ENABLE_PLUGINS -# ifdef _WIN32 -extern XpdfPluginVecTable xpdfPluginVecTable; -# endif -#endif - -//------------------------------------------------------------------------ - -#define cidToUnicodeCacheSize 4 -#define unicodeToUnicodeCacheSize 4 - -//------------------------------------------------------------------------ - -GlobalParams *globalParams = NULL; - -//------------------------------------------------------------------------ -// DisplayFontParam -//------------------------------------------------------------------------ - -DisplayFontParam::DisplayFontParam(GooString *nameA, - DisplayFontParamKind kindA) { - name = nameA; - kind = kindA; - switch (kind) { - case displayFontT1: - t1.fileName = NULL; - break; - case displayFontTT: - tt.fileName = NULL; - break; - } -} - -DisplayFontParam::~DisplayFontParam() { - delete name; - switch (kind) { - case displayFontT1: - if (t1.fileName) { - delete t1.fileName; - } - break; - case displayFontTT: - if (tt.fileName) { - delete tt.fileName; - } - break; - } -} - -#if ENABLE_RELOCATABLE && defined(_WIN32) - -/* search for data relative to where we are installed */ - -static HMODULE hmodule; - -extern "C" { -BOOL WINAPI -DllMain (HINSTANCE hinstDLL, - DWORD fdwReason, - LPVOID lpvReserved) -{ - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - hmodule = hinstDLL; - break; - } - - return TRUE; -} -} - -static char * -get_poppler_datadir (void) -{ - static char retval[MAX_PATH]; - static int beenhere = 0; - - unsigned char *p; - - if (beenhere) - return retval; - - if (!GetModuleFileName (hmodule, (CHAR *) retval, sizeof(retval) - 20)) - return POPPLER_DATADIR; - - p = _mbsrchr ((unsigned char *) retval, '\\'); - *p = '\0'; - p = _mbsrchr ((unsigned char *) retval, '\\'); - if (p) { - if (stricmp ((const char *) (p+1), "bin") == 0) - *p = '\0'; - } - strcat (retval, "\\share\\poppler"); - - beenhere = 1; - - return retval; -} - -#undef POPPLER_DATADIR -#define POPPLER_DATADIR get_poppler_datadir () - -#endif - -#ifdef _WIN32 - -//------------------------------------------------------------------------ -// WinFontInfo -//------------------------------------------------------------------------ - -class WinFontInfo: public DisplayFontParam { -public: - - GBool bold, italic; - - static WinFontInfo *make(GooString *nameA, GBool boldA, GBool italicA, - HKEY regKey, char *winFontDir); - WinFontInfo(GooString *nameA, GBool boldA, GBool italicA, - GooString *fileNameA); - virtual ~WinFontInfo(); - GBool equals(WinFontInfo *fi); -}; - -WinFontInfo *WinFontInfo::make(GooString *nameA, GBool boldA, GBool italicA, - HKEY regKey, char *winFontDir) { - GooString *regName; - GooString *fileNameA; - char buf[MAX_PATH]; - DWORD n; - char c; - int i; - - //----- find the font file - fileNameA = NULL; - regName = nameA->copy(); - if (boldA) { - regName->append(" Bold"); - } - if (italicA) { - regName->append(" Italic"); - } - regName->append(" (TrueType)"); - n = sizeof(buf); - if (RegQueryValueEx(regKey, regName->getCString(), NULL, NULL, - (LPBYTE)buf, &n) == ERROR_SUCCESS) { - fileNameA = new GooString(winFontDir); - fileNameA->append('\\')->append(buf); - } - delete regName; - if (!fileNameA) { - delete nameA; - return NULL; - } - - //----- normalize the font name - i = 0; - while (i < nameA->getLength()) { - c = nameA->getChar(i); - if (c == ' ' || c == ',' || c == '-') { - nameA->del(i); - } else { - ++i; - } - } - - return new WinFontInfo(nameA, boldA, italicA, fileNameA); -} - -WinFontInfo::WinFontInfo(GooString *nameA, GBool boldA, GBool italicA, - GooString *fileNameA): - DisplayFontParam(nameA, displayFontTT) -{ - bold = boldA; - italic = italicA; - tt.fileName = fileNameA; -} - -WinFontInfo::~WinFontInfo() { -} - -GBool WinFontInfo::equals(WinFontInfo *fi) { - return !name->cmp(fi->name) && bold == fi->bold && italic == fi->italic; -} - -//------------------------------------------------------------------------ -// WinFontList -//------------------------------------------------------------------------ - -class WinFontList { -public: - - WinFontList(char *winFontDirA); - ~WinFontList(); - WinFontInfo *find(GooString *font); - -private: - - void add(WinFontInfo *fi); - static int CALLBACK enumFunc1(CONST LOGFONT *font, - CONST TEXTMETRIC *metrics, - DWORD type, LPARAM data); - static int CALLBACK enumFunc2(CONST LOGFONT *font, - CONST TEXTMETRIC *metrics, - DWORD type, LPARAM data); - - GooList *fonts; // [WinFontInfo] - HDC dc; // (only used during enumeration) - HKEY regKey; // (only used during enumeration) - char *winFontDir; // (only used during enumeration) -}; - -WinFontList::WinFontList(char *winFontDirA) { - OSVERSIONINFO version; - char *path; - - fonts = new GooList(); - dc = GetDC(NULL); - winFontDir = winFontDirA; - version.dwOSVersionInfoSize = sizeof(version); - GetVersionEx(&version); - if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) { - path = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts\\"; - } else { - path = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Fonts\\"; - } - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, path, 0, - KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS, - ®Key) == ERROR_SUCCESS) { - EnumFonts(dc, NULL, &WinFontList::enumFunc1, (LPARAM)this); - RegCloseKey(regKey); - } - ReleaseDC(NULL, dc); -} - -WinFontList::~WinFontList() { - deleteGooList(fonts, WinFontInfo); -} - -void WinFontList::add(WinFontInfo *fi) { - int i; - - for (i = 0; i < fonts->getLength(); ++i) { - if (((WinFontInfo *)fonts->get(i))->equals(fi)) { - delete fi; - return; - } - } - fonts->append(fi); -} - -WinFontInfo *WinFontList::find(GooString *font) { - GooString *name; - GBool bold, italic; - WinFontInfo *fi; - char c; - int n, i; - - name = font->copy(); - - // remove space, comma, dash chars - i = 0; - while (i < name->getLength()) { - c = name->getChar(i); - if (c == ' ' || c == ',' || c == '-') { - name->del(i); - } else { - ++i; - } - } - n = name->getLength(); - - // remove trailing "MT" (Foo-MT, Foo-BoldMT, etc.) - if (!strcmp(name->getCString() + n - 2, "MT")) { - name->del(n - 2, 2); - n -= 2; - } - - // look for "Italic" - if (!strcmp(name->getCString() + n - 6, "Italic")) { - name->del(n - 6, 6); - italic = gTrue; - n -= 6; - } else { - italic = gFalse; - } - - // look for "Bold" - if (!strcmp(name->getCString() + n - 4, "Bold")) { - name->del(n - 4, 4); - bold = gTrue; - n -= 4; - } else { - bold = gFalse; - } - - // remove trailing "MT" (FooMT-Bold, etc.) - if (!strcmp(name->getCString() + n - 2, "MT")) { - name->del(n - 2, 2); - n -= 2; - } - - // remove trailing "PS" - if (!strcmp(name->getCString() + n - 2, "PS")) { - name->del(n - 2, 2); - n -= 2; - } - - // search for the font - fi = NULL; - for (i = 0; i < fonts->getLength(); ++i) { - fi = (WinFontInfo *)fonts->get(i); - if (!fi->name->cmp(name) && fi->bold == bold && fi->italic == italic) { - break; - } - fi = NULL; - } - - delete name; - return fi; -} - -int CALLBACK WinFontList::enumFunc1(CONST LOGFONT *font, - CONST TEXTMETRIC *metrics, - DWORD type, LPARAM data) { - WinFontList *fl = (WinFontList *)data; - - EnumFonts(fl->dc, font->lfFaceName, &WinFontList::enumFunc2, (LPARAM)fl); - return 1; -} - -int CALLBACK WinFontList::enumFunc2(CONST LOGFONT *font, - CONST TEXTMETRIC *metrics, - DWORD type, LPARAM data) { - WinFontList *fl = (WinFontList *)data; - WinFontInfo *fi; - - if (type & TRUETYPE_FONTTYPE) { - if ((fi = WinFontInfo::make(new GooString(font->lfFaceName), - font->lfWeight >= 600, - font->lfItalic ? gTrue : gFalse, - fl->regKey, fl->winFontDir))) { - fl->add(fi); - } - } - return 1; -} - -#endif // _WIN32 - -//------------------------------------------------------------------------ -// PSFontParam -//------------------------------------------------------------------------ - -PSFontParam::PSFontParam(GooString *pdfFontNameA, int wModeA, - GooString *psFontNameA, GooString *encodingA) { - pdfFontName = pdfFontNameA; - wMode = wModeA; - psFontName = psFontNameA; - encoding = encodingA; -} - -PSFontParam::~PSFontParam() { - delete pdfFontName; - delete psFontName; - if (encoding) { - delete encoding; - } -} - -#ifdef ENABLE_PLUGINS -//------------------------------------------------------------------------ -// Plugin -//------------------------------------------------------------------------ - -class Plugin { -public: - - static Plugin *load(char *type, char *name); - ~Plugin(); - -private: - -#ifdef _WIN32 - Plugin(HMODULE libA); - HMODULE lib; -#else - Plugin(void *dlA); - void *dl; -#endif -}; - -Plugin *Plugin::load(char *type, char *name) { - GooString *path; - Plugin *plugin; - XpdfPluginVecTable *vt; - XpdfBool (*xpdfInitPlugin)(void); -#ifdef _WIN32 - HMODULE libA; -#else - void *dlA; -#endif - - path = globalParams->getBaseDir(); - appendToPath(path, "plugins"); - appendToPath(path, type); - appendToPath(path, name); - -#ifdef _WIN32 - path->append(".dll"); - if (!(libA = LoadLibrary(path->getCString()))) { - error(-1, "Failed to load plugin '%s'", - path->getCString()); - goto err1; - } - if (!(vt = (XpdfPluginVecTable *) - GetProcAddress(libA, "xpdfPluginVecTable"))) { - error(-1, "Failed to find xpdfPluginVecTable in plugin '%s'", - path->getCString()); - goto err2; - } -#else - //~ need to deal with other extensions here - path->append(".so"); - if (!(dlA = dlopen(path->getCString(), RTLD_NOW))) { - error(-1, "Failed to load plugin '%s': %s", - path->getCString(), dlerror()); - goto err1; - } - if (!(vt = (XpdfPluginVecTable *)dlsym(dlA, "xpdfPluginVecTable"))) { - error(-1, "Failed to find xpdfPluginVecTable in plugin '%s'", - path->getCString()); - goto err2; - } -#endif - - if (vt->version != xpdfPluginVecTable.version) { - error(-1, "Plugin '%s' is wrong version", path->getCString()); - goto err2; - } - memcpy(vt, &xpdfPluginVecTable, sizeof(xpdfPluginVecTable)); - -#ifdef _WIN32 - if (!(xpdfInitPlugin = (XpdfBool (*)(void)) - GetProcAddress(libA, "xpdfInitPlugin"))) { - error(-1, "Failed to find xpdfInitPlugin in plugin '%s'", - path->getCString()); - goto err2; - } -#else - if (!(xpdfInitPlugin = (XpdfBool (*)(void))dlsym(dlA, "xpdfInitPlugin"))) { - error(-1, "Failed to find xpdfInitPlugin in plugin '%s'", - path->getCString()); - goto err2; - } -#endif - - if (!(*xpdfInitPlugin)()) { - error(-1, "Initialization of plugin '%s' failed", - path->getCString()); - goto err2; - } - -#ifdef _WIN32 - plugin = new Plugin(libA); -#else - plugin = new Plugin(dlA); -#endif - - delete path; - return plugin; - - err2: -#ifdef _WIN32 - FreeLibrary(libA); -#else - dlclose(dlA); -#endif - err1: - delete path; - return NULL; -} - -#ifdef _WIN32 -Plugin::Plugin(HMODULE libA) { - lib = libA; -} -#else -Plugin::Plugin(void *dlA) { - dl = dlA; -} -#endif - -Plugin::~Plugin() { - void (*xpdfFreePlugin)(void); - -#ifdef _WIN32 - if ((xpdfFreePlugin = (void (*)(void)) - GetProcAddress(lib, "xpdfFreePlugin"))) { - (*xpdfFreePlugin)(); - } - FreeLibrary(lib); -#else - if ((xpdfFreePlugin = (void (*)(void))dlsym(dl, "xpdfFreePlugin"))) { - (*xpdfFreePlugin)(); - } - dlclose(dl); -#endif -} - -#endif // ENABLE_PLUGINS - -//------------------------------------------------------------------------ -// parsing -//------------------------------------------------------------------------ - -GlobalParams::GlobalParams(const char *customPopplerDataDir) - : popplerDataDir(customPopplerDataDir) -{ - UnicodeMap *map; - int i; - -#if MULTITHREADED - gInitMutex(&mutex); - gInitMutex(&unicodeMapCacheMutex); - gInitMutex(&cMapCacheMutex); -#endif - - initBuiltinFontTables(); - - // scan the encoding in reverse because we want the lowest-numbered - // index for each char name ('space' is encoded twice) - macRomanReverseMap = new NameToCharCode(); - for (i = 255; i >= 0; --i) { - if (macRomanEncoding[i]) { - macRomanReverseMap->add(macRomanEncoding[i], (CharCode)i); - } - } - -#ifdef _WIN32 - // baseDir will be set by a call to setBaseDir - baseDir = new GooString(); -#else - baseDir = appendToPath(getHomeDir(), ".xpdf"); -#endif - nameToUnicode = new NameToCharCode(); - cidToUnicodes = new GooHash(gTrue); - unicodeToUnicodes = new GooHash(gTrue); - residentUnicodeMaps = new GooHash(); - unicodeMaps = new GooHash(gTrue); - cMapDirs = new GooHash(gTrue); - toUnicodeDirs = new GooList(); - displayFonts = new GooHash(); - psExpandSmaller = gFalse; - psShrinkLarger = gTrue; - psCenter = gTrue; - psLevel = psLevel2; - psFonts = new GooHash(); - psNamedFonts16 = new GooList(); - psFonts16 = new GooList(); - psEmbedType1 = gTrue; - psEmbedTrueType = gTrue; - psEmbedCIDPostScript = gTrue; - psEmbedCIDTrueType = gTrue; - psSubstFonts = gTrue; - psPreload = gFalse; - psOPI = gFalse; - psASCIIHex = gFalse; - psBinary = gFalse; - textEncoding = new GooString("UTF-8"); -#if defined(_WIN32) - textEOL = eolDOS; -#elif defined(MACOS) - textEOL = eolMac; -#else - textEOL = eolUnix; -#endif - textPageBreaks = gTrue; - textKeepTinyChars = gFalse; - fontDirs = new GooList(); - enableFreeType = gTrue; - antialias = gTrue; - vectorAntialias = gTrue; - strokeAdjust = gTrue; - screenType = screenUnset; - screenSize = -1; - screenDotRadius = -1; - screenGamma = 1.0; - screenBlackThreshold = 0.0; - screenWhiteThreshold = 1.0; - mapNumericCharNames = gTrue; - mapUnknownCharNames = gFalse; - printCommands = gFalse; - profileCommands = gFalse; - errQuiet = gFalse; - splashResolution = 0.0; - - cidToUnicodeCache = new CharCodeToUnicodeCache(cidToUnicodeCacheSize); - unicodeToUnicodeCache = - new CharCodeToUnicodeCache(unicodeToUnicodeCacheSize); - unicodeMapCache = new UnicodeMapCache(); - cMapCache = new CMapCache(); - -#ifdef _WIN32 - baseFontsInitialized = gFalse; - winFontList = NULL; -#endif - -#ifdef ENABLE_PLUGINS - plugins = new GooList(); - securityHandlers = new GooList(); -#endif - - // set up the initial nameToUnicode table - for (i = 0; nameToUnicodeTab[i].name; ++i) { - nameToUnicode->add(nameToUnicodeTab[i].name, nameToUnicodeTab[i].u); - } - - // set up the residentUnicodeMaps table - map = new UnicodeMap("Latin1", gFalse, - latin1UnicodeMapRanges, latin1UnicodeMapLen); - residentUnicodeMaps->add(map->getEncodingName(), map); - map = new UnicodeMap("ASCII7", gFalse, - ascii7UnicodeMapRanges, ascii7UnicodeMapLen); - residentUnicodeMaps->add(map->getEncodingName(), map); - map = new UnicodeMap("Symbol", gFalse, - symbolUnicodeMapRanges, symbolUnicodeMapLen); - residentUnicodeMaps->add(map->getEncodingName(), map); - map = new UnicodeMap("ZapfDingbats", gFalse, zapfDingbatsUnicodeMapRanges, - zapfDingbatsUnicodeMapLen); - residentUnicodeMaps->add(map->getEncodingName(), map); - map = new UnicodeMap("UTF-8", gTrue, &mapUTF8); - residentUnicodeMaps->add(map->getEncodingName(), map); - map = new UnicodeMap("UCS-2", gTrue, &mapUCS2); - residentUnicodeMaps->add(map->getEncodingName(), map); - - scanEncodingDirs(); -} - -void GlobalParams::scanEncodingDirs() { - GDir *dir; - GDirEntry *entry; - const char *dataRoot = popplerDataDir ? popplerDataDir : POPPLER_DATADIR; - - // allocate buffer large enough to append "/nameToUnicode" - size_t bufSize = strlen(dataRoot) + strlen("/nameToUnicode") + 1; - char *dataPathBuffer = new char[bufSize]; - - snprintf(dataPathBuffer, bufSize, "%s/nameToUnicode", dataRoot); - dir = new GDir(dataPathBuffer, gTrue); - while (entry = dir->getNextEntry(), entry != NULL) { - if (!entry->isDir()) { - parseNameToUnicode(entry->getFullPath()); - } - delete entry; - } - delete dir; - - snprintf(dataPathBuffer, bufSize, "%s/cidToUnicode", dataRoot); - dir = new GDir(dataPathBuffer, gFalse); - while (entry = dir->getNextEntry(), entry != NULL) { - addCIDToUnicode(entry->getName(), entry->getFullPath()); - delete entry; - } - delete dir; - - snprintf(dataPathBuffer, bufSize, "%s/unicodeMap", dataRoot); - dir = new GDir(dataPathBuffer, gFalse); - while (entry = dir->getNextEntry(), entry != NULL) { - addUnicodeMap(entry->getName(), entry->getFullPath()); - delete entry; - } - delete dir; - - snprintf(dataPathBuffer, bufSize, "%s/cMap", dataRoot); - dir = new GDir(dataPathBuffer, gFalse); - while (entry = dir->getNextEntry(), entry != NULL) { - addCMapDir(entry->getName(), entry->getFullPath()); - toUnicodeDirs->append(entry->getFullPath()->copy()); - delete entry; - } - delete dir; - - delete[] dataPathBuffer; -} - -void GlobalParams::parseNameToUnicode(GooString *name) { - char *tok1, *tok2; - FILE *f; - char buf[256]; - int line; - Unicode u; - char *tokptr; - - if (!(f = fopen(name->getCString(), "r"))) { - error(-1, "Couldn't open 'nameToUnicode' file '%s'", - name->getCString()); - return; - } - line = 1; - while (getLine(buf, sizeof(buf), f)) { - tok1 = strtok_r(buf, " \t\r\n", &tokptr); - tok2 = strtok_r(NULL, " \t\r\n", &tokptr); - if (tok1 && tok2) { - sscanf(tok1, "%x", &u); - nameToUnicode->add(tok2, u); - } else { - error(-1, "Bad line in 'nameToUnicode' file (%s:%d)", - name->getCString(), line); - } - ++line; - } - fclose(f); -} - -void GlobalParams::addCIDToUnicode(GooString *collection, - GooString *fileName) { - GooString *old; - - if ((old = (GooString *)cidToUnicodes->remove(collection))) { - delete old; - } - cidToUnicodes->add(collection->copy(), fileName->copy()); -} - -void GlobalParams::addUnicodeMap(GooString *encodingName, GooString *fileName) -{ - GooString *old; - - if ((old = (GooString *)unicodeMaps->remove(encodingName))) { - delete old; - } - unicodeMaps->add(encodingName->copy(), fileName->copy()); -} - -void GlobalParams::addCMapDir(GooString *collection, GooString *dir) { - GooList *list; - - if (!(list = (GooList *)cMapDirs->lookup(collection))) { - list = new GooList(); - cMapDirs->add(collection->copy(), list); - } - list->append(dir->copy()); -} - -GBool GlobalParams::parseYesNo2(char *token, GBool *flag) { - if (!strcmp(token, "yes")) { - *flag = gTrue; - } else if (!strcmp(token, "no")) { - *flag = gFalse; - } else { - return gFalse; - } - return gTrue; -} - -GlobalParams::~GlobalParams() { - freeBuiltinFontTables(); - - delete macRomanReverseMap; - - delete baseDir; - delete nameToUnicode; - deleteGooHash(cidToUnicodes, GooString); - deleteGooHash(unicodeToUnicodes, GooString); - deleteGooHash(residentUnicodeMaps, UnicodeMap); - deleteGooHash(unicodeMaps, GooString); - deleteGooList(toUnicodeDirs, GooString); - deleteGooHash(displayFonts, DisplayFontParam); -#ifdef _WIN32 - delete winFontList; -#endif - deleteGooHash(psFonts, PSFontParam); - deleteGooList(psNamedFonts16, PSFontParam); - deleteGooList(psFonts16, PSFontParam); - delete textEncoding; - deleteGooList(fontDirs, GooString); - - GooHashIter *iter; - GooString *key; - cMapDirs->startIter(&iter); - void *val; - while (cMapDirs->getNext(&iter, &key, &val)) { - GooList* list = (GooList*)val; - deleteGooList(list, GooString); - } - delete cMapDirs; - - delete cidToUnicodeCache; - delete unicodeToUnicodeCache; - delete unicodeMapCache; - delete cMapCache; - -#ifdef ENABLE_PLUGINS - delete securityHandlers; - deleteGooList(plugins, Plugin); -#endif - -#if MULTITHREADED - gDestroyMutex(&mutex); - gDestroyMutex(&unicodeMapCacheMutex); - gDestroyMutex(&cMapCacheMutex); -#endif -} - -//------------------------------------------------------------------------ - -void GlobalParams::setBaseDir(char *dir) { - delete baseDir; - baseDir = new GooString(dir); -} - -//------------------------------------------------------------------------ -// accessors -//------------------------------------------------------------------------ - -CharCode GlobalParams::getMacRomanCharCode(char *charName) { - // no need to lock - macRomanReverseMap is constant - return macRomanReverseMap->lookup(charName); -} - -GooString *GlobalParams::getBaseDir() { - GooString *s; - - lockGlobalParams; - s = baseDir->copy(); - unlockGlobalParams; - return s; -} - -Unicode GlobalParams::mapNameToUnicode(char *charName) { - // no need to lock - nameToUnicode is constant - return nameToUnicode->lookup(charName); -} - -UnicodeMap *GlobalParams::getResidentUnicodeMap(GooString *encodingName) { - UnicodeMap *map; - - lockGlobalParams; - map = (UnicodeMap *)residentUnicodeMaps->lookup(encodingName); - unlockGlobalParams; - if (map) { - map->incRefCnt(); - } - return map; -} - -FILE *GlobalParams::getUnicodeMapFile(GooString *encodingName) { - GooString *fileName; - FILE *f; - - lockGlobalParams; - if ((fileName = (GooString *)unicodeMaps->lookup(encodingName))) { - f = fopen(fileName->getCString(), "r"); - } else { - f = NULL; - } - unlockGlobalParams; - return f; -} - -FILE *GlobalParams::findCMapFile(GooString *collection, GooString *cMapName) { - GooList *list; - GooString *dir; - GooString *fileName; - FILE *f; - int i; - - lockGlobalParams; - if (!(list = (GooList *)cMapDirs->lookup(collection))) { - unlockGlobalParams; - return NULL; - } - for (i = 0; i < list->getLength(); ++i) { - dir = (GooString *)list->get(i); - fileName = appendToPath(dir->copy(), cMapName->getCString()); - f = fopen(fileName->getCString(), "r"); - delete fileName; - if (f) { - unlockGlobalParams; - return f; - } - } - unlockGlobalParams; - return NULL; -} - -FILE *GlobalParams::findToUnicodeFile(GooString *name) { - GooString *dir, *fileName; - FILE *f; - int i; - - lockGlobalParams; - for (i = 0; i < toUnicodeDirs->getLength(); ++i) { - dir = (GooString *)toUnicodeDirs->get(i); - fileName = appendToPath(dir->copy(), name->getCString()); - f = fopen(fileName->getCString(), "r"); - delete fileName; - if (f) { - unlockGlobalParams; - return f; - } - } - unlockGlobalParams; - return NULL; -} - -#if WITH_FONTCONFIGURATION_FONTCONFIG -static GBool findModifier(const char *name, const char *modifier, const char **start) -{ - const char *match; - - if (name == NULL) - return gFalse; - - match = strstr(name, modifier); - if (match) { - if (*start == NULL || match < *start) - *start = match; - return gTrue; - } - else { - return gFalse; - } -} - -static char *getFontLang(GfxFont *font) -{ - char *lang; - - // find the language we want the font to support - if (font->isCIDFont()) - { - GooString *collection = ((GfxCIDFont *)font)->getCollection(); - if (collection) - { - if (strcmp(collection->getCString(), "Adobe-GB1") == 0) - lang = "zh-cn"; // Simplified Chinese - else if (strcmp(collection->getCString(), "Adobe-CNS1") == 0) - lang = "zh-tw"; // Traditional Chinese - else if (strcmp(collection->getCString(), "Adobe-Japan1") == 0) - lang = "ja"; // Japanese - else if (strcmp(collection->getCString(), "Adobe-Japan2") == 0) - lang = "ja"; // Japanese - else if (strcmp(collection->getCString(), "Adobe-Korea1") == 0) - lang = "ko"; // Korean - else if (strcmp(collection->getCString(), "Adobe-UCS") == 0) - lang = "xx"; - else if (strcmp(collection->getCString(), "Adobe-Identity") == 0) - lang = "xx"; - else - { - error(-1, "Unknown CID font collection, please report to poppler bugzilla."); - lang = "xx"; - } - } - else lang = "xx"; - } - else lang = "xx"; - return lang; -} - -static FcPattern *buildFcPattern(GfxFont *font) -{ - int weight = -1, - slant = -1, - width = -1, - spacing = -1; - bool deleteFamily = false; - char *family, *name, *lang, *modifiers; - const char *start; - FcPattern *p; - - // this is all heuristics will be overwritten if font had proper info - name = font->getName()->getCString(); - - modifiers = strchr (name, ','); - if (modifiers == NULL) - modifiers = strchr (name, '-'); - - // remove the - from the names, for some reason, Fontconfig does not - // understand "MS-Mincho" but does with "MS Mincho" - int len = strlen(name); - for (int i = 0; i < len; i++) - name[i] = (name[i] == '-' ? ' ' : name[i]); - - start = NULL; - findModifier(modifiers, "Regular", &start); - findModifier(modifiers, "Roman", &start); - - if (findModifier(modifiers, "Oblique", &start)) - slant = FC_SLANT_OBLIQUE; - if (findModifier(modifiers, "Italic", &start)) - slant = FC_SLANT_ITALIC; - if (findModifier(modifiers, "Bold", &start)) - weight = FC_WEIGHT_BOLD; - if (findModifier(modifiers, "Light", &start)) - weight = FC_WEIGHT_LIGHT; - if (findModifier(modifiers, "Medium", &start)) - weight = FC_WEIGHT_MEDIUM; - if (findModifier(modifiers, "Condensed", &start)) - width = FC_WIDTH_CONDENSED; - - if (start) { - // There have been "modifiers" in the name, crop them to obtain - // the family name - family = new char[len+1]; - strcpy(family, name); - int pos = (modifiers - name); - family[pos] = '\0'; - deleteFamily = true; - } - else { - family = name; - } - - // use font flags - if (font->isFixedWidth()) - spacing = FC_MONO; - if (font->isBold()) - weight = FC_WEIGHT_BOLD; - if (font->isItalic()) - slant = FC_SLANT_ITALIC; - - // if the FontDescriptor specified a family name use it - if (font->getFamily()) { - if (deleteFamily) { - delete[] family; - deleteFamily = false; - } - family = font->getFamily()->getCString(); - } - - // if the FontDescriptor specified a weight use it - switch (font -> getWeight()) - { - case GfxFont::W100: weight = FC_WEIGHT_EXTRALIGHT; break; - case GfxFont::W200: weight = FC_WEIGHT_LIGHT; break; - case GfxFont::W300: weight = FC_WEIGHT_BOOK; break; - case GfxFont::W400: weight = FC_WEIGHT_NORMAL; break; - case GfxFont::W500: weight = FC_WEIGHT_MEDIUM; break; - case GfxFont::W600: weight = FC_WEIGHT_DEMIBOLD; break; - case GfxFont::W700: weight = FC_WEIGHT_BOLD; break; - case GfxFont::W800: weight = FC_WEIGHT_EXTRABOLD; break; - case GfxFont::W900: weight = FC_WEIGHT_BLACK; break; - default: break; - } - - // if the FontDescriptor specified a width use it - switch (font -> getStretch()) - { - case GfxFont::UltraCondensed: width = FC_WIDTH_ULTRACONDENSED; break; - case GfxFont::ExtraCondensed: width = FC_WIDTH_EXTRACONDENSED; break; - case GfxFont::Condensed: width = FC_WIDTH_CONDENSED; break; - case GfxFont::SemiCondensed: width = FC_WIDTH_SEMICONDENSED; break; - case GfxFont::Normal: width = FC_WIDTH_NORMAL; break; - case GfxFont::SemiExpanded: width = FC_WIDTH_SEMIEXPANDED; break; - case GfxFont::Expanded: width = FC_WIDTH_EXPANDED; break; - case GfxFont::ExtraExpanded: width = FC_WIDTH_EXTRAEXPANDED; break; - case GfxFont::UltraExpanded: width = FC_WIDTH_ULTRAEXPANDED; break; - default: break; - } - - lang = getFontLang(font); - - p = FcPatternBuild(NULL, - FC_FAMILY, FcTypeString, family, - FC_LANG, FcTypeString, lang, - NULL); - if (slant != -1) FcPatternAddInteger(p, FC_SLANT, slant); - if (weight != -1) FcPatternAddInteger(p, FC_WEIGHT, weight); - if (width != -1) FcPatternAddInteger(p, FC_WIDTH, width); - if (spacing != -1) FcPatternAddInteger(p, FC_SPACING, spacing); - - if (deleteFamily) - delete[] family; - return p; -} -#endif - -/* if you can't or don't want to use Fontconfig, you need to implement - this function for your platform. For Windows, it's in GlobalParamsWin.cc -*/ -#if WITH_FONTCONFIGURATION_FONTCONFIG -DisplayFontParam *GlobalParams::getDisplayFont(GfxFont *font) { - DisplayFontParam *dfp; - FcPattern *p=0; - - GooString *fontName = font->getName(); - if (!fontName) return NULL; - - lockGlobalParams; - dfp = font->dfp; - if (!dfp) - { - FcChar8* s; - char * ext; - FcResult res; - FcFontSet *set; - int i; - FcLangSet *lb = NULL; - char *lang; - p = buildFcPattern(font); - - if (!p) - goto fin; - FcConfigSubstitute(NULL, p, FcMatchPattern); - FcDefaultSubstitute(p); - set = FcFontSort(NULL, p, FcFalse, NULL, &res); - if (!set) - goto fin; - - // find the language we want the font to support - lang = getFontLang(font); - if (strcmp(lang,"xx") != 0) { - lb = FcLangSetCreate(); - FcLangSetAdd(lb,(FcChar8 *)lang); - } - - /* - scan twice. - first: fonts support the language - second: all fonts (fall back) - */ - while (dfp == NULL) - { - for (i = 0; i < set->nfont; ++i) - { - res = FcPatternGetString(set->fonts[i], FC_FILE, 0, &s); - if (res != FcResultMatch || !s) - continue; - if (lb != NULL) { - FcLangSet *l; - res = FcPatternGetLangSet(set->fonts[i], FC_LANG, 0, &l); - if (res != FcResultMatch || !FcLangSetContains(l,lb)) { - continue; - } - } - ext = strrchr((char*)s,'.'); - if (!ext) - continue; - if (!strncasecmp(ext,".ttf",4) || !strncasecmp(ext, ".ttc", 4)) - { - dfp = new DisplayFontParam(fontName->copy(), displayFontTT); - dfp->tt.fileName = new GooString((char*)s); - FcPatternGetInteger(set->fonts[i], FC_INDEX, 0, &(dfp->tt.faceIndex)); - } - else if (!strncasecmp(ext,".pfa",4) || !strncasecmp(ext,".pfb",4)) - { - dfp = new DisplayFontParam(fontName->copy(), displayFontT1); - dfp->t1.fileName = new GooString((char*)s); - } - else - continue; - font->dfp = dfp; - break; - } - if (lb != NULL) { - FcLangSetDestroy(lb); - lb = NULL; - } else { - /* scan all fonts of the list */ - break; - } - } - FcFontSetDestroy(set); - } -fin: - if (p) - FcPatternDestroy(p); - - unlockGlobalParams; - return dfp; -} -#endif -#if WITH_FONTCONFIGURATION_WIN32 -#include "GlobalParamsWin.cc" -#endif - -GBool GlobalParams::getPSExpandSmaller() { - GBool f; - - lockGlobalParams; - f = psExpandSmaller; - unlockGlobalParams; - return f; -} - -GBool GlobalParams::getPSShrinkLarger() { - GBool f; - - lockGlobalParams; - f = psShrinkLarger; - unlockGlobalParams; - return f; -} - -GBool GlobalParams::getPSCenter() { - GBool f; - - lockGlobalParams; - f = psCenter; - unlockGlobalParams; - return f; -} - -PSLevel GlobalParams::getPSLevel() { - PSLevel level; - - lockGlobalParams; - level = psLevel; - unlockGlobalParams; - return level; -} - -PSFontParam *GlobalParams::getPSFont(GooString *fontName) { - PSFontParam *p; - - lockGlobalParams; - p = (PSFontParam *)psFonts->lookup(fontName); - unlockGlobalParams; - return p; -} - -PSFontParam *GlobalParams::getPSFont16(GooString *fontName, - GooString *collection, int wMode) { - PSFontParam *p; - int i; - - lockGlobalParams; - p = NULL; - if (fontName) { - for (i = 0; i < psNamedFonts16->getLength(); ++i) { - p = (PSFontParam *)psNamedFonts16->get(i); - if (!p->pdfFontName->cmp(fontName) && - p->wMode == wMode) { - break; - } - p = NULL; - } - } - if (!p && collection) { - for (i = 0; i < psFonts16->getLength(); ++i) { - p = (PSFontParam *)psFonts16->get(i); - if (!p->pdfFontName->cmp(collection) && - p->wMode == wMode) { - break; - } - p = NULL; - } - } - unlockGlobalParams; - return p; -} - -GBool GlobalParams::getPSEmbedType1() { - GBool e; - - lockGlobalParams; - e = psEmbedType1; - unlockGlobalParams; - return e; -} - -GBool GlobalParams::getPSEmbedTrueType() { - GBool e; - - lockGlobalParams; - e = psEmbedTrueType; - unlockGlobalParams; - return e; -} - -GBool GlobalParams::getPSEmbedCIDPostScript() { - GBool e; - - lockGlobalParams; - e = psEmbedCIDPostScript; - unlockGlobalParams; - return e; -} - -GBool GlobalParams::getPSEmbedCIDTrueType() { - GBool e; - - lockGlobalParams; - e = psEmbedCIDTrueType; - unlockGlobalParams; - return e; -} - -GBool GlobalParams::getPSSubstFonts() { - GBool e; - - lockGlobalParams; - e = psSubstFonts; - unlockGlobalParams; - return e; -} - -GBool GlobalParams::getPSPreload() { - GBool preload; - - lockGlobalParams; - preload = psPreload; - unlockGlobalParams; - return preload; -} - -GBool GlobalParams::getPSOPI() { - GBool opi; - - lockGlobalParams; - opi = psOPI; - unlockGlobalParams; - return opi; -} - -GBool GlobalParams::getPSASCIIHex() { - GBool ah; - - lockGlobalParams; - ah = psASCIIHex; - unlockGlobalParams; - return ah; -} - -GBool GlobalParams::getPSBinary() { - GBool binary; - - lockGlobalParams; - binary = psBinary; - unlockGlobalParams; - return binary; -} - -GooString *GlobalParams::getTextEncodingName() { - GooString *s; - - lockGlobalParams; - s = textEncoding->copy(); - unlockGlobalParams; - return s; -} - -EndOfLineKind GlobalParams::getTextEOL() { - EndOfLineKind eol; - - lockGlobalParams; - eol = textEOL; - unlockGlobalParams; - return eol; -} - -GBool GlobalParams::getTextPageBreaks() { - GBool pageBreaks; - - lockGlobalParams; - pageBreaks = textPageBreaks; - unlockGlobalParams; - return pageBreaks; -} - -GBool GlobalParams::getTextKeepTinyChars() { - GBool tiny; - - lockGlobalParams; - tiny = textKeepTinyChars; - unlockGlobalParams; - return tiny; -} - -GooString *GlobalParams::findFontFile(GooString *fontName, char **exts) { - GooString *dir, *fileName; - char **ext; - FILE *f; - int i; - - lockGlobalParams; - for (i = 0; i < fontDirs->getLength(); ++i) { - dir = (GooString *)fontDirs->get(i); - for (ext = exts; *ext; ++ext) { - fileName = appendToPath(dir->copy(), fontName->getCString()); - fileName->append(*ext); - if ((f = fopen(fileName->getCString(), "rb"))) { - fclose(f); - unlockGlobalParams; - return fileName; - } - delete fileName; - } - } - unlockGlobalParams; - return NULL; -} - -GBool GlobalParams::getEnableFreeType() { - GBool f; - - lockGlobalParams; - f = enableFreeType; - unlockGlobalParams; - return f; -} - - -GBool GlobalParams::getAntialias() { - GBool f; - - lockGlobalParams; - f = antialias; - unlockGlobalParams; - return f; -} - -GBool GlobalParams::getVectorAntialias() { - GBool f; - - lockGlobalParams; - f = vectorAntialias; - unlockGlobalParams; - return f; -} - -GBool GlobalParams::getStrokeAdjust() { - GBool f; - - lockGlobalParams; - f = strokeAdjust; - unlockGlobalParams; - return f; -} - -ScreenType GlobalParams::getScreenType() { - ScreenType t; - - lockGlobalParams; - t = screenType; - unlockGlobalParams; - return t; -} - -int GlobalParams::getScreenSize() { - int size; - - lockGlobalParams; - size = screenSize; - unlockGlobalParams; - return size; -} - -int GlobalParams::getScreenDotRadius() { - int r; - - lockGlobalParams; - r = screenDotRadius; - unlockGlobalParams; - return r; -} - -double GlobalParams::getScreenGamma() { - double gamma; - - lockGlobalParams; - gamma = screenGamma; - unlockGlobalParams; - return gamma; -} - -double GlobalParams::getScreenBlackThreshold() { - double thresh; - - lockGlobalParams; - thresh = screenBlackThreshold; - unlockGlobalParams; - return thresh; -} - -double GlobalParams::getScreenWhiteThreshold() { - double thresh; - - lockGlobalParams; - thresh = screenWhiteThreshold; - unlockGlobalParams; - return thresh; -} - -GBool GlobalParams::getMapNumericCharNames() { - GBool map; - - lockGlobalParams; - map = mapNumericCharNames; - unlockGlobalParams; - return map; -} - -GBool GlobalParams::getMapUnknownCharNames() { - GBool map; - - lockGlobalParams; - map = mapUnknownCharNames; - unlockGlobalParams; - return map; -} - -GBool GlobalParams::getPrintCommands() { - GBool p; - - lockGlobalParams; - p = printCommands; - unlockGlobalParams; - return p; -} - -GBool GlobalParams::getProfileCommands() { - GBool p; - - lockGlobalParams; - p = profileCommands; - unlockGlobalParams; - return p; -} - -GBool GlobalParams::getErrQuiet() { - // no locking -- this function may get called from inside a locked - // section - return errQuiet; -} - -double GlobalParams::getSplashResolution() { - double r; - lockGlobalParams; - r = splashResolution; - unlockGlobalParams; - return r; -} - -CharCodeToUnicode *GlobalParams::getCIDToUnicode(GooString *collection) { - GooString *fileName; - CharCodeToUnicode *ctu; - - lockGlobalParams; - if (!(ctu = cidToUnicodeCache->getCharCodeToUnicode(collection))) { - if ((fileName = (GooString *)cidToUnicodes->lookup(collection)) && - (ctu = CharCodeToUnicode::parseCIDToUnicode(fileName, collection))) { - cidToUnicodeCache->add(ctu); - } - } - unlockGlobalParams; - return ctu; -} - -CharCodeToUnicode *GlobalParams::getUnicodeToUnicode(GooString *fontName) { - lockGlobalParams; - GooHashIter *iter; - unicodeToUnicodes->startIter(&iter); - GooString *fileName = NULL; - GooString *fontPattern; - void *val; - while (!fileName && unicodeToUnicodes->getNext(&iter, &fontPattern, &val)) { - if (strstr(fontName->getCString(), fontPattern->getCString())) { - unicodeToUnicodes->killIter(&iter); - fileName = (GooString*)val; - } - } - CharCodeToUnicode *ctu = NULL; - if (fileName) { - ctu = unicodeToUnicodeCache->getCharCodeToUnicode(fileName); - if (!ctu) { - ctu = CharCodeToUnicode::parseUnicodeToUnicode(fileName); - if (ctu) - unicodeToUnicodeCache->add(ctu); - } - } - unlockGlobalParams; - return ctu; -} - -UnicodeMap *GlobalParams::getUnicodeMap(GooString *encodingName) { - return getUnicodeMap2(encodingName); -} - -UnicodeMap *GlobalParams::getUnicodeMap2(GooString *encodingName) { - UnicodeMap *map; - - if (!(map = getResidentUnicodeMap(encodingName))) { - lockUnicodeMapCache; - map = unicodeMapCache->getUnicodeMap(encodingName); - unlockUnicodeMapCache; - } - return map; -} - -CMap *GlobalParams::getCMap(GooString *collection, GooString *cMapName, Stream *stream) { - CMap *cMap; - - lockCMapCache; - cMap = cMapCache->getCMap(collection, cMapName, stream); - unlockCMapCache; - return cMap; -} - -UnicodeMap *GlobalParams::getTextEncoding() { - return getUnicodeMap2(textEncoding); -} - -GooList *GlobalParams::getEncodingNames() -{ - GooList *result = new GooList; - GooHashIter *iter; - GooString *key; - void *val; - residentUnicodeMaps->startIter(&iter); - while (residentUnicodeMaps->getNext(&iter, &key, &val)) { - result->append(key); - } - residentUnicodeMaps->killIter(&iter); - unicodeMaps->startIter(&iter); - while (unicodeMaps->getNext(&iter, &key, &val)) { - result->append(key); - } - unicodeMaps->killIter(&iter); - return result; -} - -//------------------------------------------------------------------------ -// functions to set parameters -//------------------------------------------------------------------------ - -void GlobalParams::setPSExpandSmaller(GBool expand) { - lockGlobalParams; - psExpandSmaller = expand; - unlockGlobalParams; -} - -void GlobalParams::setPSShrinkLarger(GBool shrink) { - lockGlobalParams; - psShrinkLarger = shrink; - unlockGlobalParams; -} - -void GlobalParams::setPSCenter(GBool center) { - lockGlobalParams; - psCenter = center; - unlockGlobalParams; -} - -void GlobalParams::setPSLevel(PSLevel level) { - lockGlobalParams; - psLevel = level; - unlockGlobalParams; -} - -void GlobalParams::setPSEmbedType1(GBool embed) { - lockGlobalParams; - psEmbedType1 = embed; - unlockGlobalParams; -} - -void GlobalParams::setPSEmbedTrueType(GBool embed) { - lockGlobalParams; - psEmbedTrueType = embed; - unlockGlobalParams; -} - -void GlobalParams::setPSEmbedCIDPostScript(GBool embed) { - lockGlobalParams; - psEmbedCIDPostScript = embed; - unlockGlobalParams; -} - -void GlobalParams::setPSEmbedCIDTrueType(GBool embed) { - lockGlobalParams; - psEmbedCIDTrueType = embed; - unlockGlobalParams; -} - -void GlobalParams::setPSSubstFonts(GBool substFonts) { - lockGlobalParams; - psSubstFonts = substFonts; - unlockGlobalParams; -} - -void GlobalParams::setPSPreload(GBool preload) { - lockGlobalParams; - psPreload = preload; - unlockGlobalParams; -} - -void GlobalParams::setPSOPI(GBool opi) { - lockGlobalParams; - psOPI = opi; - unlockGlobalParams; -} - -void GlobalParams::setPSASCIIHex(GBool hex) { - lockGlobalParams; - psASCIIHex = hex; - unlockGlobalParams; -} - -void GlobalParams::setPSBinary(GBool binary) { - lockGlobalParams; - psBinary = binary; - unlockGlobalParams; -} - -void GlobalParams::setTextEncoding(char *encodingName) { - lockGlobalParams; - delete textEncoding; - textEncoding = new GooString(encodingName); - unlockGlobalParams; -} - -GBool GlobalParams::setTextEOL(char *s) { - lockGlobalParams; - if (!strcmp(s, "unix")) { - textEOL = eolUnix; - } else if (!strcmp(s, "dos")) { - textEOL = eolDOS; - } else if (!strcmp(s, "mac")) { - textEOL = eolMac; - } else { - unlockGlobalParams; - return gFalse; - } - unlockGlobalParams; - return gTrue; -} - -void GlobalParams::setTextPageBreaks(GBool pageBreaks) { - lockGlobalParams; - textPageBreaks = pageBreaks; - unlockGlobalParams; -} - -void GlobalParams::setTextKeepTinyChars(GBool keep) { - lockGlobalParams; - textKeepTinyChars = keep; - unlockGlobalParams; -} - -GBool GlobalParams::setEnableFreeType(char *s) { - GBool ok; - - lockGlobalParams; - ok = parseYesNo2(s, &enableFreeType); - unlockGlobalParams; - return ok; -} - - -GBool GlobalParams::setAntialias(char *s) { - GBool ok; - - lockGlobalParams; - ok = parseYesNo2(s, &antialias); - unlockGlobalParams; - return ok; -} - -GBool GlobalParams::setVectorAntialias(char *s) { - GBool ok; - - lockGlobalParams; - ok = parseYesNo2(s, &vectorAntialias); - unlockGlobalParams; - return ok; -} - -void GlobalParams::setStrokeAdjust(GBool adjust) -{ - lockGlobalParams; - strokeAdjust = adjust; - unlockGlobalParams; -} - -void GlobalParams::setScreenType(ScreenType st) -{ - lockGlobalParams; - screenType = st; - unlockGlobalParams; -} - -void GlobalParams::setScreenSize(int size) -{ - lockGlobalParams; - screenSize = size; - unlockGlobalParams; -} - -void GlobalParams::setScreenDotRadius(int radius) -{ - lockGlobalParams; - screenDotRadius = radius; - unlockGlobalParams; -} - -void GlobalParams::setScreenGamma(double gamma) -{ - lockGlobalParams; - screenGamma = gamma; - unlockGlobalParams; -} - -void GlobalParams::setScreenBlackThreshold(double blackThreshold) -{ - lockGlobalParams; - screenBlackThreshold = blackThreshold; - unlockGlobalParams; -} - -void GlobalParams::setScreenWhiteThreshold(double whiteThreshold) -{ - lockGlobalParams; - screenWhiteThreshold = whiteThreshold; - unlockGlobalParams; -} - -void GlobalParams::setMapNumericCharNames(GBool map) { - lockGlobalParams; - mapNumericCharNames = map; - unlockGlobalParams; -} - -void GlobalParams::setMapUnknownCharNames(GBool map) { - lockGlobalParams; - mapUnknownCharNames = map; - unlockGlobalParams; -} - -void GlobalParams::setPrintCommands(GBool printCommandsA) { - lockGlobalParams; - printCommands = printCommandsA; - unlockGlobalParams; -} - -void GlobalParams::setProfileCommands(GBool profileCommandsA) { - lockGlobalParams; - profileCommands = profileCommandsA; - unlockGlobalParams; -} - -void GlobalParams::setErrQuiet(GBool errQuietA) { - lockGlobalParams; - errQuiet = errQuietA; - unlockGlobalParams; -} - -void GlobalParams::setSplashResolution(double SplashResolutionA) { - lockGlobalParams; - splashResolution = SplashResolutionA; - unlockGlobalParams; -} - -void GlobalParams::addSecurityHandler(XpdfSecurityHandler *handler) { -#ifdef ENABLE_PLUGINS - lockGlobalParams; - securityHandlers->append(handler); - unlockGlobalParams; -#endif -} - -XpdfSecurityHandler *GlobalParams::getSecurityHandler(char *name) { -#ifdef ENABLE_PLUGINS - XpdfSecurityHandler *hdlr; - int i; - - lockGlobalParams; - for (i = 0; i < securityHandlers->getLength(); ++i) { - hdlr = (XpdfSecurityHandler *)securityHandlers->get(i); - if (!strcasecmp(hdlr->name, name)) { - unlockGlobalParams; - return hdlr; - } - } - unlockGlobalParams; - - if (!loadPlugin("security", name)) { - return NULL; - } - deleteGooList(keyBindings, KeyBinding); - - lockGlobalParams; - for (i = 0; i < securityHandlers->getLength(); ++i) { - hdlr = (XpdfSecurityHandler *)securityHandlers->get(i); - if (!strcmp(hdlr->name, name)) { - unlockGlobalParams; - return hdlr; - } - } - unlockGlobalParams; -#else - (void)name; -#endif - - return NULL; -} - -#ifdef ENABLE_PLUGINS -//------------------------------------------------------------------------ -// plugins -//------------------------------------------------------------------------ - -GBool GlobalParams::loadPlugin(char *type, char *name) { - Plugin *plugin; - - if (!(plugin = Plugin::load(type, name))) { - return gFalse; - } - lockGlobalParams; - plugins->append(plugin); - unlockGlobalParams; - return gTrue; -} - -#endif // ENABLE_PLUGINS diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/GlobalParams.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/GlobalParams.h deleted file mode 100644 index 5fff49d5553..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/GlobalParams.h +++ /dev/null @@ -1,375 +0,0 @@ -//======================================================================== -// -// GlobalParams.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005, 2007-2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> -// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> -// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// Copyright (C) 2009 Jonathan Kew <jonathan_kew@sil.org> -// Copyright (C) 2009 Petr Gajdos <pgajdos@novell.com> -// Copyright (C) 2009, 2011 William Bader <williambader@hotmail.com> -// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2011 Pino Toscano <pino@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef GLOBALPARAMS_H -#define GLOBALPARAMS_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include <assert.h> -#include "poppler-config.h" -#include <stdio.h> -#include "goo/gtypes.h" -#include "CharTypes.h" - -#if MULTITHREADED -#include "goo/GooMutex.h" -#endif - -class GooString; -class GooList; -class GooHash; -class NameToCharCode; -class CharCodeToUnicode; -class CharCodeToUnicodeCache; -class UnicodeMap; -class UnicodeMapCache; -class CMap; -class CMapCache; -struct XpdfSecurityHandler; -class GlobalParams; -class GfxFont; -class Stream; -#ifdef _WIN32 -class WinFontList; -#endif - -//------------------------------------------------------------------------ - -// The global parameters object. -extern GlobalParams *globalParams; - -//------------------------------------------------------------------------ - -enum DisplayFontParamKind { - displayFontT1, - displayFontTT -}; - -struct DisplayFontParamT1 { - GooString *fileName; -}; - -struct DisplayFontParamTT { - GooString *fileName; - int faceIndex; -}; - -class DisplayFontParam { -public: - - GooString *name; // font name for 8-bit fonts and named - // CID fonts; collection name for - // generic CID fonts - DisplayFontParamKind kind; - union { - DisplayFontParamT1 t1; - DisplayFontParamTT tt; - }; - - DisplayFontParam(GooString *nameA, DisplayFontParamKind kindA); - void setFileName(GooString *fileNameA) { - if (displayFontT1 == kind) - t1.fileName = fileNameA; - else { - assert(displayFontTT == kind); - tt.fileName = fileNameA; - } - } - virtual ~DisplayFontParam(); -}; - -//------------------------------------------------------------------------ - -class PSFontParam { -public: - - GooString *pdfFontName; // PDF font name for 8-bit fonts and - // named 16-bit fonts; char collection - // name for generic 16-bit fonts - int wMode; // writing mode (0=horiz, 1=vert) for - // 16-bit fonts - GooString *psFontName; // PostScript font name - GooString *encoding; // encoding, for 16-bit fonts only - - PSFontParam(GooString *pdfFontNameA, int wModeA, - GooString *psFontNameA, GooString *encodingA); - ~PSFontParam(); -}; - -//------------------------------------------------------------------------ - -enum PSLevel { - psLevel1, - psLevel1Sep, - psLevel2, - psLevel2Sep, - psLevel3, - psLevel3Sep -}; - -//------------------------------------------------------------------------ - -enum EndOfLineKind { - eolUnix, // LF - eolDOS, // CR+LF - eolMac // CR -}; - -//------------------------------------------------------------------------ - -enum ScreenType { - screenUnset, - screenDispersed, - screenClustered, - screenStochasticClustered -}; - -//------------------------------------------------------------------------ - -class GlobalParams { -public: - - // Initialize the global parameters by attempting to read a config - // file. - GlobalParams(const char *customPopplerDataDir = NULL); - - ~GlobalParams(); - - void setBaseDir(char *dir); - -#if WITH_FONTCONFIGURATION_WIN32 - void setupBaseFonts(char *dir); -#endif - - //----- accessors - - CharCode getMacRomanCharCode(char *charName); - - GooString *getBaseDir(); - Unicode mapNameToUnicode(char *charName); - UnicodeMap *getResidentUnicodeMap(GooString *encodingName); - FILE *getUnicodeMapFile(GooString *encodingName); - FILE *findCMapFile(GooString *collection, GooString *cMapName); - FILE *findToUnicodeFile(GooString *name); - DisplayFontParam *getDisplayFont(GfxFont *font); - GBool getPSExpandSmaller(); - GBool getPSShrinkLarger(); - GBool getPSCenter(); - PSLevel getPSLevel(); - PSFontParam *getPSFont(GooString *fontName); - PSFontParam *getPSFont16(GooString *fontName, GooString *collection, int wMode); - GBool getPSEmbedType1(); - GBool getPSEmbedTrueType(); - GBool getPSEmbedCIDPostScript(); - GBool getPSEmbedCIDTrueType(); - GBool getPSSubstFonts(); - GBool getPSPreload(); - GBool getPSOPI(); - GBool getPSASCIIHex(); - GBool getPSBinary(); - GooString *getTextEncodingName(); - EndOfLineKind getTextEOL(); - GBool getTextPageBreaks(); - GBool getTextKeepTinyChars(); - GooString *findFontFile(GooString *fontName, char **exts); - GBool getEnableFreeType(); - GBool getAntialias(); - GBool getVectorAntialias(); - GBool getStrokeAdjust(); - ScreenType getScreenType(); - int getScreenSize(); - int getScreenDotRadius(); - double getScreenGamma(); - double getScreenBlackThreshold(); - double getScreenWhiteThreshold(); - GBool getMapNumericCharNames(); - GBool getMapUnknownCharNames(); - GBool getPrintCommands(); - GBool getProfileCommands(); - GBool getErrQuiet(); - double getSplashResolution(); - - CharCodeToUnicode *getCIDToUnicode(GooString *collection); - CharCodeToUnicode *getUnicodeToUnicode(GooString *fontName); - UnicodeMap *getUnicodeMap(GooString *encodingName); - CMap *getCMap(GooString *collection, GooString *cMapName, Stream *stream = NULL); - UnicodeMap *getTextEncoding(); -#ifdef ENABLE_PLUGINS - GBool loadPlugin(char *type, char *name); -#endif - - GooList *getEncodingNames(); - - //----- functions to set parameters - void setPSExpandSmaller(GBool expand); - void setPSShrinkLarger(GBool shrink); - void setPSCenter(GBool center); - void setPSLevel(PSLevel level); - void setPSEmbedType1(GBool embed); - void setPSEmbedTrueType(GBool embed); - void setPSEmbedCIDPostScript(GBool embed); - void setPSEmbedCIDTrueType(GBool embed); - void setPSSubstFonts(GBool substFonts); - void setPSPreload(GBool preload); - void setPSOPI(GBool opi); - void setPSASCIIHex(GBool hex); - void setPSBinary(GBool binary); - void setTextEncoding(char *encodingName); - GBool setTextEOL(char *s); - void setTextPageBreaks(GBool pageBreaks); - void setTextKeepTinyChars(GBool keep); - GBool setEnableFreeType(char *s); - GBool setAntialias(char *s); - GBool setVectorAntialias(char *s); - void setStrokeAdjust(GBool strokeAdjust); - void setScreenType(ScreenType st); - void setScreenSize(int size); - void setScreenDotRadius(int radius); - void setScreenGamma(double gamma); - void setScreenBlackThreshold(double blackThreshold); - void setScreenWhiteThreshold(double whiteThreshold); - void setMapNumericCharNames(GBool map); - void setMapUnknownCharNames(GBool map); - void setPrintCommands(GBool printCommandsA); - void setProfileCommands(GBool profileCommandsA); - void setErrQuiet(GBool errQuietA); - void setSplashResolution(double splashResolutionA); - - //----- security handlers - - void addSecurityHandler(XpdfSecurityHandler *handler); - XpdfSecurityHandler *getSecurityHandler(char *name); - -private: - - void parseNameToUnicode(GooString *name); - GBool parseYesNo2(char *token, GBool *flag); - UnicodeMap *getUnicodeMap2(GooString *encodingName); - - void scanEncodingDirs(); - void addCIDToUnicode(GooString *collection, GooString *fileName); - void addUnicodeMap(GooString *encodingName, GooString *fileName); - void addCMapDir(GooString *collection, GooString *dir); - - //----- static tables - - NameToCharCode * // mapping from char name to - macRomanReverseMap; // MacRomanEncoding index - - //----- user-modifiable settings - - GooString *baseDir; // base directory - for plugins, etc. - NameToCharCode * // mapping from char name to Unicode - nameToUnicode; - GooHash *cidToUnicodes; // files for mappings from char collections - // to Unicode, indexed by collection name - // [GooString] - GooHash *unicodeToUnicodes; // files for Unicode-to-Unicode mappings, - // indexed by font name pattern [GooString] - GooHash *residentUnicodeMaps; // mappings from Unicode to char codes, - // indexed by encoding name [UnicodeMap] - GooHash *unicodeMaps; // files for mappings from Unicode to char - // codes, indexed by encoding name [GooString] - GooHash *cMapDirs; // list of CMap dirs, indexed by collection - // name [GooList[GooString]] - GooList *toUnicodeDirs; // list of ToUnicode CMap dirs [GooString] - GooHash *displayFonts; // display font info, indexed by font name - // [DisplayFontParam] -#ifdef _WIN32 - GBool baseFontsInitialized; - WinFontList *winFontList; // system TrueType fonts -#endif - GBool psExpandSmaller; // expand smaller pages to fill paper - GBool psShrinkLarger; // shrink larger pages to fit paper - GBool psCenter; // center pages on the paper - PSLevel psLevel; // PostScript level to generate - GooHash *psFonts; // PostScript font info, indexed by PDF - // font name [PSFontParam] - GooList *psNamedFonts16; // named 16-bit fonts [PSFontParam] - GooList *psFonts16; // generic 16-bit fonts [PSFontParam] - GBool psEmbedType1; // embed Type 1 fonts? - GBool psEmbedTrueType; // embed TrueType fonts? - GBool psEmbedCIDPostScript; // embed CID PostScript fonts? - GBool psEmbedCIDTrueType; // embed CID TrueType fonts? - GBool psSubstFonts; // substitute missing fonts? - GBool psPreload; // preload PostScript images and forms into - // memory - GBool psOPI; // generate PostScript OPI comments? - GBool psASCIIHex; // use ASCIIHex instead of ASCII85? - GBool psBinary; // use binary instead of hex - GooString *textEncoding; // encoding (unicodeMap) to use for text - // output - EndOfLineKind textEOL; // type of EOL marker to use for text - // output - GBool textPageBreaks; // insert end-of-page markers? - GBool textKeepTinyChars; // keep all characters in text output - GooList *fontDirs; // list of font dirs [GooString] - GBool enableFreeType; // FreeType enable flag - GBool antialias; // anti-aliasing enable flag - GBool vectorAntialias; // vector anti-aliasing enable flag - GBool strokeAdjust; // stroke adjustment enable flag - ScreenType screenType; // halftone screen type - int screenSize; // screen matrix size - int screenDotRadius; // screen dot radius - double screenGamma; // screen gamma correction - double screenBlackThreshold; // screen black clamping threshold - double screenWhiteThreshold; // screen white clamping threshold - GBool mapNumericCharNames; // map numeric char names (from font subsets)? - GBool mapUnknownCharNames; // map unknown char names? - GBool printCommands; // print the drawing commands - GBool profileCommands; // profile the drawing commands - GBool errQuiet; // suppress error messages? - double splashResolution; // resolution when rasterizing images - - CharCodeToUnicodeCache *cidToUnicodeCache; - CharCodeToUnicodeCache *unicodeToUnicodeCache; - UnicodeMapCache *unicodeMapCache; - CMapCache *cMapCache; - -#ifdef ENABLE_PLUGINS - GList *plugins; // list of plugins [Plugin] - GList *securityHandlers; // list of loaded security handlers - // [XpdfSecurityHandler] -#endif - -#if MULTITHREADED - GooMutex mutex; - GooMutex unicodeMapCacheMutex; - GooMutex cMapCacheMutex; -#endif - - const char *popplerDataDir; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/GlobalParamsWin.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/GlobalParamsWin.cc deleted file mode 100644 index f989fb89434..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/GlobalParamsWin.cc +++ /dev/null @@ -1,291 +0,0 @@ -/* Written by Krzysztof Kowalczyk (http://blog.kowalczyk.info) - but mostly based on xpdf code. - - // Copyright (C) 2010 Hib Eris <hib@hiberis.nl> - -TODO: instead of a fixed mapping defined in displayFontTab, it could -scan the whole fonts directory, parse TTF files and build font -description for all fonts available in Windows. That's how MuPDF works. -*/ - -#ifndef PACKAGE_NAME -#include <config.h> -#endif - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <windows.h> -#if !(_WIN32_IE >= 0x0500) -#error "_WIN32_IE must be defined >= 0x0500 for SHGFP_TYPE_CURRENT from shlobj.h" -#endif -#include <shlobj.h> -#include <string.h> -#include <stdio.h> -#include <ctype.h> -#include <assert.h> - -#include "goo/gmem.h" -#include "goo/GooString.h" -#include "goo/GooList.h" -#include "goo/GooHash.h" -#include "goo/gfile.h" -#include "Error.h" -#include "NameToCharCode.h" -#include "CharCodeToUnicode.h" -#include "UnicodeMap.h" -#include "CMap.h" -#include "BuiltinFontTables.h" -#include "FontEncodingTables.h" -#include "GlobalParams.h" -#include "GfxFont.h" - -#if MULTITHREADED -# define lockGlobalParams gLockMutex(&mutex) -# define lockUnicodeMapCache gLockMutex(&unicodeMapCacheMutex) -# define lockCMapCache gLockMutex(&cMapCacheMutex) -# define unlockGlobalParams gUnlockMutex(&mutex) -# define unlockUnicodeMapCache gUnlockMutex(&unicodeMapCacheMutex) -# define unlockCMapCache gUnlockMutex(&cMapCacheMutex) -#else -# define lockGlobalParams -# define lockUnicodeMapCache -# define lockCMapCache -# define unlockGlobalParams -# define unlockUnicodeMapCache -# define unlockCMapCache -#endif - -#define DEFAULT_SUBSTITUTE_FONT "Helvetica" - -static struct { - char *name; - char *t1FileName; - char *ttFileName; -} displayFontTab[] = { - {"Courier", "n022003l.pfb", "cour.ttf"}, - {"Courier-Bold", "n022004l.pfb", "courbd.ttf"}, - {"Courier-BoldOblique", "n022024l.pfb", "courbi.ttf"}, - {"Courier-Oblique", "n022023l.pfb", "couri.ttf"}, - {"Helvetica", "n019003l.pfb", "arial.ttf"}, - {"Helvetica-Bold", "n019004l.pfb", "arialbd.ttf"}, - {"Helvetica-BoldOblique", "n019024l.pfb", "arialbi.ttf"}, - {"Helvetica-Oblique", "n019023l.pfb", "ariali.ttf"}, - // TODO: not sure if "symbol.ttf" is right - {"Symbol", "s050000l.pfb", "symbol.ttf"}, - {"Times-Bold", "n021004l.pfb", "timesbd.ttf"}, - {"Times-BoldItalic", "n021024l.pfb", "timesbi.ttf"}, - {"Times-Italic", "n021023l.pfb", "timesi.ttf"}, - {"Times-Roman", "n021003l.pfb", "times.ttf"}, - // TODO: not sure if "wingding.ttf" is right - {"ZapfDingbats", "d050000l.pfb", "wingding.ttf"}, - - // those seem to be frequently accessed by PDF files and I kind of guess - // which font file do the refer to - {"Palatino", NULL, "pala.ttf"}, - {"Palatino-Roman", NULL, "pala.ttf"}, - {"Palatino-Bold", NULL, "palab.ttf"}, - {"Palatino-Italic", NULL, "palai.ttf"}, - {"Palatino,Italic", NULL, "palai.ttf"}, - {"Palatino-BoldItalic", NULL, "palabi.ttf"}, - - {"ArialBlack", NULL, "arialbd.ttf"}, - - {"ArialNarrow", NULL, "arialn.ttf"}, - {"ArialNarrow,Bold", NULL, "arialnb.ttf"}, - {"ArialNarrow,Italic", NULL, "arialni.ttf"}, - {"ArialNarrow,BoldItalic", NULL, "arialnbi.ttf"}, - {"ArialNarrow-Bold", NULL, "arialnb.ttf"}, - {"ArialNarrow-Italic", NULL, "arialni.ttf"}, - {"ArialNarrow-BoldItalic", NULL, "arialnbi.ttf"}, - - {"HelveticaNarrow", NULL, "arialn.ttf"}, - {"HelveticaNarrow,Bold", NULL, "arialnb.ttf"}, - {"HelveticaNarrow,Italic", NULL, "arialni.ttf"}, - {"HelveticaNarrow,BoldItalic", NULL, "arialnbi.ttf"}, - {"HelveticaNarrow-Bold", NULL, "arialnb.ttf"}, - {"HelveticaNarrow-Italic", NULL, "arialni.ttf"}, - {"HelveticaNarrow-BoldItalic", NULL, "arialnbi.ttf"}, - - {"BookAntiqua", NULL, "bkant.ttf"}, - {"BookAntiqua,Bold", NULL, "bkant.ttf"}, - {"BookAntiqua,Italic", NULL, "bkant.ttf"}, - {"BookAntiqua,BoldItalic", NULL, "bkant.ttf"}, - {"BookAntiqua-Bold", NULL, "bkant.ttf"}, - {"BookAntiqua-Italic", NULL, "bkant.ttf"}, - {"BookAntiqua-BoldItalic", NULL, "bkant.ttf"}, - - {"Verdana", NULL, "verdana.ttf"}, - {"Verdana,Bold", NULL, "verdanab.ttf"}, - {"Verdana,Italic", NULL, "verdanai.ttf"}, - {"Verdana,BoldItalic", NULL, "verdanaz.ttf"}, - {"Verdana-Bold", NULL, "verdanab.ttf"}, - {"Verdana-Italic", NULL, "verdanai.ttf"}, - {"Verdana-BoldItalic", NULL, "verdanaz.ttf"}, - - {"Tahoma", NULL, "tahoma.ttf"}, - {"Tahoma,Bold", NULL, "tahomabd.ttf"}, - {"Tahoma,Italic", NULL, "tahoma.ttf"}, - {"Tahoma,BoldItalic", NULL, "tahomabd.ttf"}, - {"Tahoma-Bold", NULL, "tahomabd.ttf"}, - {"Tahoma-Italic", NULL, "tahoma.ttf"}, - {"Tahoma-BoldItalic", NULL, "tahomabd.ttf"}, - - {"CCRIKH+Verdana", NULL, "verdana.ttf"}, - {"CCRIKH+Verdana,Bold", NULL, "verdanab.ttf"}, - {"CCRIKH+Verdana,Italic", NULL, "verdanai.ttf"}, - {"CCRIKH+Verdana,BoldItalic", NULL, "verdanaz.ttf"}, - {"CCRIKH+Verdana-Bold", NULL, "verdanab.ttf"}, - {"CCRIKH+Verdana-Italic", NULL, "verdanai.ttf"}, - {"CCRIKH+Verdana-BoldItalic", NULL, "verdanaz.ttf"}, - - {"Georgia", NULL, "georgia.ttf"}, - {"Georgia,Bold", NULL, "georgiab.ttf"}, - {"Georgia,Italic", NULL, "georgiai.ttf"}, - {"Georgia,BoldItalic", NULL, "georgiaz.ttf"}, - {"Georgia-Bold", NULL, "georgiab.ttf"}, - {"Georgia-Italic", NULL, "georgiai.ttf"}, - {"Georgia-BoldItalic", NULL, "georgiaz.ttf"}, - - {NULL} -}; - -#define FONTS_SUBDIR "\\fonts" - -static void GetWindowsFontDir(char *winFontDir, int cbWinFontDirLen) -{ - BOOL (__stdcall *SHGetSpecialFolderPathFunc)(HWND hwndOwner, - LPTSTR lpszPath, - int nFolder, - BOOL fCreate); - HRESULT (__stdcall *SHGetFolderPathFunc)(HWND hwndOwner, - int nFolder, - HANDLE hToken, - DWORD dwFlags, - LPTSTR pszPath); - - // SHGetSpecialFolderPath isn't available in older versions of shell32.dll (Win95 and - // WinNT4), so do a dynamic load of ANSI versions. - winFontDir[0] = '\0'; - - HMODULE hLib = LoadLibrary("shell32.dll"); - if (hLib) { - SHGetFolderPathFunc = (HRESULT (__stdcall *)(HWND, int, HANDLE, DWORD, LPTSTR)) - GetProcAddress(hLib, "SHGetFolderPathA"); - if (SHGetFolderPathFunc) - (*SHGetFolderPathFunc)(NULL, CSIDL_FONTS, NULL, SHGFP_TYPE_CURRENT, winFontDir); - - if (!winFontDir[0]) { - // Try an older function - SHGetSpecialFolderPathFunc = (BOOL (__stdcall *)(HWND, LPTSTR, int, BOOL)) - GetProcAddress(hLib, "SHGetSpecialFolderPathA"); - if (SHGetSpecialFolderPathFunc) - (*SHGetSpecialFolderPathFunc)(NULL, winFontDir, CSIDL_FONTS, FALSE); - } - FreeLibrary(hLib); - } - if (winFontDir[0]) - return; - - // Try older DLL - hLib = LoadLibrary("SHFolder.dll"); - if (hLib) { - SHGetFolderPathFunc = (HRESULT (__stdcall *)(HWND, int, HANDLE, DWORD, LPTSTR)) - GetProcAddress(hLib, "SHGetFolderPathA"); - if (SHGetFolderPathFunc) - (*SHGetFolderPathFunc)(NULL, CSIDL_FONTS, NULL, SHGFP_TYPE_CURRENT, winFontDir); - FreeLibrary(hLib); - } - if (winFontDir[0]) - return; - - // Everything else failed so the standard fonts directory. - GetWindowsDirectory(winFontDir, cbWinFontDirLen); - if (winFontDir[0]) { - strncat(winFontDir, FONTS_SUBDIR, cbWinFontDirLen); - winFontDir[cbWinFontDirLen-1] = 0; - } -} - -static bool FileExists(const char *path) -{ - FILE * f = fopen(path, "rb"); - if (f) { - fclose(f); - return true; - } - return false; -} - -static void AddFont(GooHash *displayFonts, char *fontName, GooString *fontPath, DisplayFontParamKind kind) -{ - DisplayFontParam *dfp = new DisplayFontParam(new GooString(fontName), kind); - dfp->setFileName(fontPath); - displayFonts->add(dfp->name, dfp); -} - -void GlobalParams::setupBaseFonts(char * dir) -{ - if (baseFontsInitialized) - return; - baseFontsInitialized = true; - - char winFontDir[MAX_PATH]; - GetWindowsFontDir(winFontDir, sizeof(winFontDir)); - - for (int i = 0; displayFontTab[i].name; ++i) { - char *fontName = displayFontTab[i].name; - if (displayFonts->lookup(fontName)) - continue; - - if (dir) { - GooString *fontPath = appendToPath(new GooString(dir), displayFontTab[i].t1FileName); - if (FileExists(fontPath->getCString())) { - AddFont(displayFonts, fontName, fontPath, displayFontT1); - continue; - } - delete fontPath; - } - - if (winFontDir[0] && displayFontTab[i].ttFileName) { - GooString *fontPath = appendToPath(new GooString(winFontDir), displayFontTab[i].ttFileName); - if (FileExists(fontPath->getCString())) { - AddFont(displayFonts, fontName, fontPath, displayFontTT); - continue; - } - delete fontPath; - } - - error(-1, "No display font for '%s'", fontName); - } -} - -static char *findSubstituteName(const char *origName) -{ - assert(origName); - if (!origName) return NULL; - /* TODO: try to at least guess bold/italic/bolditalic from the name */ - return DEFAULT_SUBSTITUTE_FONT; -} - -/* Windows implementation of external font matching code */ -DisplayFontParam *GlobalParams::getDisplayFont(GfxFont *font) { - DisplayFontParam * dfp; - GooString * fontName = font->getName(); - char * substFontName = NULL; - - if (!fontName) return NULL; - lockGlobalParams; - setupBaseFonts(NULL); - dfp = (DisplayFontParam *)displayFonts->lookup(fontName); - if (!dfp) { - substFontName = findSubstituteName(fontName->getCString()); - error(-1, "Couldn't find a font for '%s', subst is '%s'", fontName->getCString(), substFontName); - dfp = (DisplayFontParam *)displayFonts->lookup(substFontName); - assert(dfp); - } - unlockGlobalParams; - return dfp; -} - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Hints.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Hints.cc deleted file mode 100644 index 7a1e4ee9968..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Hints.cc +++ /dev/null @@ -1,442 +0,0 @@ -//======================================================================== -// -// Hints.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010, 2011 Albert Astals Cid <aacid@kde.org> -// Copyright 2010 Pino Toscano <pino@kde.org> -// -//======================================================================== - -#include <config.h> - -#include "Hints.h" - -#include "Linearization.h" -#include "Object.h" -#include "Stream.h" -#include "XRef.h" -#include "Parser.h" -#include "Lexer.h" -#include "SecurityHandler.h" - -#include <limits.h> - -//------------------------------------------------------------------------ -// Hints -//------------------------------------------------------------------------ - -Hints::Hints(BaseStream *str, Linearization *linearization, XRef *xref, SecurityHandler *secHdlr) -{ - mainXRefEntriesOffset = linearization->getMainXRefEntriesOffset(); - nPages = linearization->getNumPages(); - pageFirst = linearization->getPageFirst(); - pageEndFirst = linearization->getEndFirst(); - pageObjectFirst = linearization->getObjectNumberFirst(); - if (pageObjectFirst < 0 || pageObjectFirst >= xref->getNumObjects()) { - error(-1, - "Invalid reference for first page object (%d) in linearization table ", - pageObjectFirst); - pageObjectFirst = 0; - } - pageOffsetFirst = xref->getEntry(pageObjectFirst)->offset; - - if (nPages >= INT_MAX / (int)sizeof(Guint)) { - error(-1, "Invalid number of pages (%d) for hints table", nPages); - nPages = 0; - } - nObjects = (Guint *) gmallocn_checkoverflow(nPages, sizeof(Guint)); - pageObjectNum = (int *) gmallocn_checkoverflow(nPages, sizeof(int)); - xRefOffset = (Guint *) gmallocn_checkoverflow(nPages, sizeof(Guint)); - pageLength = (Guint *) gmallocn_checkoverflow(nPages, sizeof(Guint)); - pageOffset = (Guint *) gmallocn_checkoverflow(nPages, sizeof(Guint)); - numSharedObject = (Guint *) gmallocn_checkoverflow(nPages, sizeof(Guint)); - sharedObjectId = (Guint **) gmallocn_checkoverflow(nPages, sizeof(Guint*)); - if (!nObjects || !pageObjectNum || !xRefOffset || !pageLength || !pageOffset || - !numSharedObject || !sharedObjectId) { - error(-1, "Failed to allocate memory for hints tabel"); - nPages = 0; - } - - memset(numSharedObject, 0, nPages * sizeof(Guint)); - memset(pageObjectNum, 0, nPages * sizeof(int)); - - nSharedGroups = 0; - groupLength = NULL; - groupOffset = NULL; - groupHasSignature = NULL; - groupNumObjects = NULL; - groupXRefOffset = NULL; - - readTables(str, linearization, xref, secHdlr); -} - -Hints::~Hints() -{ - gfree(nObjects); - gfree(pageObjectNum); - gfree(xRefOffset); - gfree(pageLength); - gfree(pageOffset); - for (int i=0; i< nPages; i++) { - if (numSharedObject[i]) { - gfree(sharedObjectId[i]); - } - } - gfree(sharedObjectId); - gfree(numSharedObject); - - gfree(groupLength); - gfree(groupOffset); - gfree(groupHasSignature); - gfree(groupNumObjects); - gfree(groupXRefOffset); -} - -void Hints::readTables(BaseStream *str, Linearization *linearization, XRef *xref, SecurityHandler *secHdlr) -{ - hintsOffset = linearization->getHintsOffset(); - hintsLength = linearization->getHintsLength(); - hintsOffset2 = linearization->getHintsOffset2(); - hintsLength2 = linearization->getHintsLength2(); - - Parser *parser; - Object obj; - - int bufLength = hintsLength + hintsLength2; - - std::vector<char> buf(bufLength); - char *p = &buf[0]; - - obj.initNull(); - Stream *s = str->makeSubStream(hintsOffset, gFalse, hintsLength, &obj); - s->reset(); - for (Guint i=0; i < hintsLength; i++) { *p++ = s->getChar(); } - delete s; - - if (hintsOffset2 && hintsLength2) { - obj.initNull(); - s = str->makeSubStream(hintsOffset2, gFalse, hintsLength2, &obj); - s->reset(); - for (Guint i=0; i < hintsLength2; i++) { *p++ = s->getChar(); } - delete s; - } - - obj.initNull(); - MemStream *memStream = new MemStream (&buf[0], 0, bufLength, &obj); - - obj.initNull(); - parser = new Parser(xref, new Lexer(xref, memStream), gTrue); - - int num, gen; - if (parser->getObj(&obj)->isInt() && - (num = obj.getInt(), obj.free(), parser->getObj(&obj)->isInt()) && - (gen = obj.getInt(), obj.free(), parser->getObj(&obj)->isCmd("obj")) && - (obj.free(), parser->getObj(&obj, - secHdlr ? secHdlr->getFileKey() : (Guchar *)NULL, - secHdlr ? secHdlr->getEncAlgorithm() : cryptRC4, - secHdlr ? secHdlr->getFileKeyLength() : 0, - num, gen)->isStream())) { - Stream *hintsStream = obj.getStream(); - Dict *hintsDict = obj.streamGetDict(); - - int sharedStreamOffset = 0; - if (hintsDict->lookupInt("S", NULL, &sharedStreamOffset) && - sharedStreamOffset > 0) { - - hintsStream->reset(); - readPageOffsetTable(hintsStream); - - hintsStream->reset(); - for (int i=0; i<sharedStreamOffset; i++) hintsStream->getChar(); - readSharedObjectsTable(hintsStream); - } else { - error(-1, "Invalid shared object hint table offset"); - } - } else { - error(-1, "Failed parsing hints table object"); - } - obj.free(); - - delete parser; -} - -void Hints::readPageOffsetTable(Stream *str) -{ - if (nPages < 1) { - error(-1, "Invalid number of pages reading page offset hints table"); - return; - } - - inputBits = 0; // reset on byte boundary. - - nObjectLeast = readBits(32, str); - - objectOffsetFirst = readBits(32, str); - if (objectOffsetFirst >= hintsOffset) objectOffsetFirst += hintsLength; - - nBitsDiffObjects = readBits(16, str); - - pageLengthLeast = readBits(32, str); - - nBitsDiffPageLength = readBits(16, str); - - OffsetStreamLeast = readBits(32, str); - - nBitsOffsetStream = readBits(16, str); - - lengthStreamLeast = readBits(32, str); - - nBitsLengthStream = readBits(16, str); - - nBitsNumShared = readBits(16, str); - - nBitsShared = readBits(16, str); - - nBitsNumerator = readBits(16, str); - - denominator = readBits(16, str); - - for (int i=0; i<nPages; i++) { - nObjects[i] = nObjectLeast + readBits(nBitsDiffObjects, str); - } - - nObjects[0] = 0; - xRefOffset[0] = mainXRefEntriesOffset + 20; - for (int i=1; i<nPages; i++) { - xRefOffset[i] = xRefOffset[i-1] + 20*nObjects[i-1]; - } - - pageObjectNum[0] = 1; - for (int i=1; i<nPages; i++) { - pageObjectNum[i] = pageObjectNum[i-1] + nObjects[i-1]; - } - pageObjectNum[0] = pageObjectFirst; - - inputBits = 0; // reset on byte boundary. Not in specs! - for (int i=0; i<nPages; i++) { - pageLength[i] = pageLengthLeast + readBits(nBitsDiffPageLength, str); - } - - inputBits = 0; // reset on byte boundary. Not in specs! - numSharedObject[0] = readBits(nBitsNumShared, str); - numSharedObject[0] = 0; // Do not trust the read value to be 0. - sharedObjectId[0] = NULL; - for (int i=1; i<nPages; i++) { - numSharedObject[i] = readBits(nBitsNumShared, str); - if (numSharedObject[i] >= INT_MAX / (int)sizeof(Guint)) { - error(-1, "Invalid number of shared objects"); - numSharedObject[i] = 0; - return; - } - sharedObjectId[i] = (Guint *) gmallocn_checkoverflow(numSharedObject[i], sizeof(Guint)); - if (numSharedObject[i] && !sharedObjectId[i]) { - error(-1, "Failed to allocate memory for shared object IDs"); - numSharedObject[i] = 0; - return; - } - } - - inputBits = 0; // reset on byte boundary. Not in specs! - for (int i=1; i<nPages; i++) { - for (Guint j=0; j < numSharedObject[i]; j++) { - sharedObjectId[i][j] = readBits(nBitsShared, str); - } - } - - pageOffset[0] = pageOffsetFirst; - // find pageOffsets. - for (int i=1; i<nPages; i++) { - pageOffset[i] = pageOffset[i-1] + pageLength[i-1]; - } - -} - -void Hints::readSharedObjectsTable(Stream *str) -{ - inputBits = 0; // reset on byte boundary. - - Guint firstSharedObjectNumber = readBits(32, str); - - Guint firstSharedObjectOffset = readBits(32, str); - firstSharedObjectOffset += hintsLength; - - Guint nSharedGroupsFirst = readBits(32, str); - - Guint nSharedGroups = readBits(32, str); - - Guint nBitsNumObjects = readBits(16, str); - - Guint groupLengthLeast = readBits(32, str); - - Guint nBitsDiffGroupLength = readBits(16, str); - - if ((!nSharedGroups) || (nSharedGroups >= INT_MAX / (int)sizeof(Guint))) { - error(-1, "Invalid number of shared object groups"); - nSharedGroups = 0; - return; - } - if ((!nSharedGroupsFirst) || (nSharedGroupsFirst > nSharedGroups)) { - error(-1, "Invalid number of first page shared object groups"); - nSharedGroupsFirst = nSharedGroups; - } - - groupLength = (Guint *) gmallocn_checkoverflow(nSharedGroups, sizeof(Guint)); - groupOffset = (Guint *) gmallocn_checkoverflow(nSharedGroups, sizeof(Guint)); - groupHasSignature = (Guint *) gmallocn_checkoverflow(nSharedGroups, sizeof(Guint)); - groupNumObjects = (Guint *) gmallocn_checkoverflow(nSharedGroups, sizeof(Guint)); - groupXRefOffset = (Guint *) gmallocn_checkoverflow(nSharedGroups, sizeof(Guint)); - if (!groupLength || !groupOffset || !groupHasSignature || - !groupNumObjects || !groupXRefOffset) { - error(-1, "Failed to allocate memory for shared object groups"); - nSharedGroups = 0; - return; - } - - inputBits = 0; // reset on byte boundary. Not in specs! - for (Guint i=0; i<nSharedGroups; i++) { - groupLength[i] = groupLengthLeast + readBits(nBitsDiffGroupLength, str); - } - - groupOffset[0] = objectOffsetFirst; - for (Guint i=1; i<nSharedGroupsFirst; i++) { - groupOffset[i] = groupOffset[i-1] + groupLength[i-1]; - } - if (nSharedGroups > nSharedGroupsFirst ) { - groupOffset[nSharedGroupsFirst] = firstSharedObjectOffset; - for (Guint i=nSharedGroupsFirst+1; i<nSharedGroups; i++) { - groupOffset[i] = groupOffset[i-1] + groupLength[i-1]; - } - } - - inputBits = 0; // reset on byte boundary. Not in specs! - for (Guint i=0; i<nSharedGroups; i++) { - groupHasSignature[i] = readBits(1, str); - } - - inputBits = 0; // reset on byte boundary. Not in specs! - for (Guint i=0; i<nSharedGroups; i++) { - if (groupHasSignature[i]) { - readBits(128, str); - } - } - - inputBits = 0; // reset on byte boundary. Not in specs! - for (Guint i=0; i<nSharedGroups; i++) { - groupNumObjects[i] = - nBitsNumObjects ? 1 + readBits(nBitsNumObjects, str) : 1; - } - - for (Guint i=0; i<nSharedGroupsFirst; i++) { - groupNumObjects[i] = 0; - groupXRefOffset[i] = 0; - } - if (nSharedGroups > nSharedGroupsFirst ) { - groupXRefOffset[nSharedGroupsFirst] = - mainXRefEntriesOffset + 20*firstSharedObjectNumber; - for (Guint i=nSharedGroupsFirst+1; i<nSharedGroups; i++) { - groupXRefOffset[i] = groupXRefOffset[i-1] + 20*groupNumObjects[i-1]; - } - } -} - -Guint Hints::getPageOffset(int page) -{ - if ((page < 1) || (page > nPages)) return 0; - - if (page-1 > pageFirst) - return pageOffset[page-1]; - else if (page-1 < pageFirst) - return pageOffset[page]; - else - return pageOffset[0]; -} - -std::vector<ByteRange>* Hints::getPageRanges(int page) -{ - if ((page < 1) || (page > nPages)) return NULL; - - int idx; - if (page-1 > pageFirst) - idx = page-1; - else if (page-1 < pageFirst) - idx = page; - else - idx = 0; - - ByteRange pageRange; - std::vector<ByteRange> *v = new std::vector<ByteRange>; - - pageRange.offset = pageOffset[idx]; - pageRange.length = pageLength[idx]; - v->push_back(pageRange); - - pageRange.offset = xRefOffset[idx]; - pageRange.length = 20*nObjects[idx]; - v->push_back(pageRange); - - for (Guint j=0; j<numSharedObject[idx]; j++) { - Guint k = sharedObjectId[idx][j]; - - pageRange.offset = groupOffset[k]; - pageRange.length = groupLength[k]; - v->push_back(pageRange); - - pageRange.offset = groupXRefOffset[k]; - pageRange.length = 20*groupNumObjects[k]; - v->push_back(pageRange); - } - - return v; -} - -Guint Hints::readBit(Stream *str) -{ - Guint bit; - int c; - - if (inputBits == 0) { - if ((c = str->getChar()) == EOF) { - return (Guint) -1; - } - bitsBuffer = c; - inputBits = 8; - } - bit = (bitsBuffer >> (inputBits - 1)) & 1; - --inputBits; - return bit; -} - -Guint Hints::readBits(int n, Stream *str) -{ - Guint bit, bits; - - if (n < 0) return (Guint)-1; - if (n == 0) return 0; - - if (n == 1) - return readBit(str); - - bit = (readBit(str) << (n-1)); - if (bit == (Guint) -1) - return (Guint)-1; - - bits = readBits(n-1, str); - if (bits == (Guint) -1) - return (Guint)-1; - - return bit | bits; -} - -int Hints::getPageObjectNum(int page) { - if ((page < 1) || (page > nPages)) return 0; - - if (page-1 > pageFirst) - return pageObjectNum[page-1]; - else if (page-1 < pageFirst) - return pageObjectNum[page]; - else - return pageObjectNum[0]; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Hints.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Hints.h deleted file mode 100644 index d598e796beb..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Hints.h +++ /dev/null @@ -1,95 +0,0 @@ -//======================================================================== -// -// Hints.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#ifndef HINTS_H -#define HINTS_H - -#include <string.h> -#include "goo/gtypes.h" -#include <vector> -#include "PDFDoc.h" - -class Stream; -class BaseStream; -class Linearization; -class XRef; - -//------------------------------------------------------------------------ -// Hints -//------------------------------------------------------------------------ - -class Hints { -public: - - Hints(BaseStream *str, Linearization *linearization, XRef *xref, SecurityHandler *secHdlr); - ~Hints(); - - int getPageObjectNum(int page); - Guint getPageOffset(int page); - std::vector<ByteRange>* getPageRanges(int page); - -private: - - void readTables(BaseStream *str, Linearization *linearization, XRef *xref, SecurityHandler *secHdlr); - void readPageOffsetTable(Stream *str); - void readSharedObjectsTable(Stream *str); - - Guint readBit(Stream *str); - Guint readBits(int n, Stream *str); - - Guint hintsOffset; - Guint hintsLength; - Guint hintsOffset2; - Guint hintsLength2; - Guint mainXRefEntriesOffset; - - int nPages; - int pageFirst; - int pageObjectFirst; - Guint pageOffsetFirst; - Guint pageEndFirst; - int objectNumberFirst; - - Guint nObjectLeast; - Guint objectOffsetFirst; - Guint nBitsDiffObjects; - Guint pageLengthLeast; - Guint nBitsDiffPageLength; - Guint OffsetStreamLeast; - Guint nBitsOffsetStream; - Guint lengthStreamLeast; - Guint nBitsLengthStream; - Guint nBitsNumShared; - Guint nBitsShared; - Guint nBitsNumerator; - Guint denominator; - - Guint *nObjects; - int *pageObjectNum; - Guint *xRefOffset; - Guint *pageLength; - Guint *pageOffset; - Guint *numSharedObject; - Guint **sharedObjectId; - - Guint nSharedGroups; - Guint *groupLength; - Guint *groupOffset; - Guint *groupHasSignature; - Guint *groupNumObjects; - Guint *groupXRefOffset; - - int inputBits; - char bitsBuffer; - -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/JArithmeticDecoder.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/JArithmeticDecoder.cc deleted file mode 100644 index ec0778e64f4..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/JArithmeticDecoder.cc +++ /dev/null @@ -1,322 +0,0 @@ -//======================================================================== -// -// JArithmeticDecoder.cc -// -// Copyright 2002-2004 Glyph & Cog, LLC -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "Object.h" -#include "Stream.h" -#include "JArithmeticDecoder.h" - -//------------------------------------------------------------------------ -// JArithmeticDecoderStates -//------------------------------------------------------------------------ - -JArithmeticDecoderStats::JArithmeticDecoderStats(int contextSizeA) { - contextSize = contextSizeA; - cxTab = (Guchar *)gmallocn(contextSize, sizeof(Guchar)); - reset(); -} - -JArithmeticDecoderStats::~JArithmeticDecoderStats() { - gfree(cxTab); -} - -JArithmeticDecoderStats *JArithmeticDecoderStats::copy() { - JArithmeticDecoderStats *stats; - - stats = new JArithmeticDecoderStats(contextSize); - memcpy(stats->cxTab, cxTab, contextSize); - return stats; -} - -void JArithmeticDecoderStats::reset() { - memset(cxTab, 0, contextSize); -} - -void JArithmeticDecoderStats::copyFrom(JArithmeticDecoderStats *stats) { - memcpy(cxTab, stats->cxTab, contextSize); -} - -void JArithmeticDecoderStats::setEntry(Guint cx, int i, int mps) { - cxTab[cx] = (i << 1) + mps; -} - -//------------------------------------------------------------------------ -// JArithmeticDecoder -//------------------------------------------------------------------------ - -Guint JArithmeticDecoder::qeTab[47] = { - 0x56010000, 0x34010000, 0x18010000, 0x0AC10000, - 0x05210000, 0x02210000, 0x56010000, 0x54010000, - 0x48010000, 0x38010000, 0x30010000, 0x24010000, - 0x1C010000, 0x16010000, 0x56010000, 0x54010000, - 0x51010000, 0x48010000, 0x38010000, 0x34010000, - 0x30010000, 0x28010000, 0x24010000, 0x22010000, - 0x1C010000, 0x18010000, 0x16010000, 0x14010000, - 0x12010000, 0x11010000, 0x0AC10000, 0x09C10000, - 0x08A10000, 0x05210000, 0x04410000, 0x02A10000, - 0x02210000, 0x01410000, 0x01110000, 0x00850000, - 0x00490000, 0x00250000, 0x00150000, 0x00090000, - 0x00050000, 0x00010000, 0x56010000 -}; - -int JArithmeticDecoder::nmpsTab[47] = { - 1, 2, 3, 4, 5, 38, 7, 8, 9, 10, 11, 12, 13, 29, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 45, 46 -}; - -int JArithmeticDecoder::nlpsTab[47] = { - 1, 6, 9, 12, 29, 33, 6, 14, 14, 14, 17, 18, 20, 21, 14, 14, - 15, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 46 -}; - -int JArithmeticDecoder::switchTab[47] = { - 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -JArithmeticDecoder::JArithmeticDecoder() { - str = NULL; - dataLen = 0; - limitStream = gFalse; -} - -inline Guint JArithmeticDecoder::readByte() { - if (limitStream) { - --dataLen; - if (dataLen < 0) { - return 0xff; - } - } - return (Guint)str->getChar() & 0xff; -} - -JArithmeticDecoder::~JArithmeticDecoder() { - cleanup(); -} - -void JArithmeticDecoder::start() { - buf0 = readByte(); - buf1 = readByte(); - - // INITDEC - c = (buf0 ^ 0xff) << 16; - byteIn(); - c <<= 7; - ct -= 7; - a = 0x80000000; -} - -void JArithmeticDecoder::restart(int dataLenA) { - int oldDataLen; - - oldDataLen = dataLen; - dataLen = dataLenA; - if (oldDataLen == -1) { - buf1 = readByte(); - } else if (oldDataLen <= -2) { - buf0 = readByte(); - buf1 = readByte(); - } -} - -void JArithmeticDecoder::cleanup() { - if (limitStream) { - while (dataLen > 0) { - buf0 = buf1; - buf1 = readByte(); - } - } -} - -int JArithmeticDecoder::decodeBit(Guint context, - JArithmeticDecoderStats *stats) { - int bit; - Guint qe; - int iCX, mpsCX; - - iCX = stats->cxTab[context] >> 1; - mpsCX = stats->cxTab[context] & 1; - qe = qeTab[iCX]; - a -= qe; - if (c < a) { - if (a & 0x80000000) { - bit = mpsCX; - } else { - // MPS_EXCHANGE - if (a < qe) { - bit = 1 - mpsCX; - if (switchTab[iCX]) { - stats->cxTab[context] = (nlpsTab[iCX] << 1) | (1 - mpsCX); - } else { - stats->cxTab[context] = (nlpsTab[iCX] << 1) | mpsCX; - } - } else { - bit = mpsCX; - stats->cxTab[context] = (nmpsTab[iCX] << 1) | mpsCX; - } - // RENORMD - do { - if (ct == 0) { - byteIn(); - } - a <<= 1; - c <<= 1; - --ct; - } while (!(a & 0x80000000)); - } - } else { - c -= a; - // LPS_EXCHANGE - if (a < qe) { - bit = mpsCX; - stats->cxTab[context] = (nmpsTab[iCX] << 1) | mpsCX; - } else { - bit = 1 - mpsCX; - if (switchTab[iCX]) { - stats->cxTab[context] = (nlpsTab[iCX] << 1) | (1 - mpsCX); - } else { - stats->cxTab[context] = (nlpsTab[iCX] << 1) | mpsCX; - } - } - a = qe; - // RENORMD - do { - if (ct == 0) { - byteIn(); - } - a <<= 1; - c <<= 1; - --ct; - } while (!(a & 0x80000000)); - } - return bit; -} - -int JArithmeticDecoder::decodeByte(Guint context, - JArithmeticDecoderStats *stats) { - int byte; - int i; - - byte = 0; - for (i = 0; i < 8; ++i) { - byte = (byte << 1) | decodeBit(context, stats); - } - return byte; -} - -GBool JArithmeticDecoder::decodeInt(int *x, JArithmeticDecoderStats *stats) { - int s; - Guint v; - int i; - - prev = 1; - s = decodeIntBit(stats); - if (decodeIntBit(stats)) { - if (decodeIntBit(stats)) { - if (decodeIntBit(stats)) { - if (decodeIntBit(stats)) { - if (decodeIntBit(stats)) { - v = 0; - for (i = 0; i < 32; ++i) { - v = (v << 1) | decodeIntBit(stats); - } - v += 4436; - } else { - v = 0; - for (i = 0; i < 12; ++i) { - v = (v << 1) | decodeIntBit(stats); - } - v += 340; - } - } else { - v = 0; - for (i = 0; i < 8; ++i) { - v = (v << 1) | decodeIntBit(stats); - } - v += 84; - } - } else { - v = 0; - for (i = 0; i < 6; ++i) { - v = (v << 1) | decodeIntBit(stats); - } - v += 20; - } - } else { - v = decodeIntBit(stats); - v = (v << 1) | decodeIntBit(stats); - v = (v << 1) | decodeIntBit(stats); - v = (v << 1) | decodeIntBit(stats); - v += 4; - } - } else { - v = decodeIntBit(stats); - v = (v << 1) | decodeIntBit(stats); - } - - if (s) { - if (v == 0) { - return gFalse; - } - *x = -(int)v; - } else { - *x = (int)v; - } - return gTrue; -} - -int JArithmeticDecoder::decodeIntBit(JArithmeticDecoderStats *stats) { - int bit; - - bit = decodeBit(prev, stats); - if (prev < 0x100) { - prev = (prev << 1) | bit; - } else { - prev = (((prev << 1) | bit) & 0x1ff) | 0x100; - } - return bit; -} - -Guint JArithmeticDecoder::decodeIAID(Guint codeLen, - JArithmeticDecoderStats *stats) { - Guint i; - int bit; - - prev = 1; - for (i = 0; i < codeLen; ++i) { - bit = decodeBit(prev, stats); - prev = (prev << 1) | bit; - } - return prev - (1 << codeLen); -} - -void JArithmeticDecoder::byteIn() { - if (buf0 == 0xff) { - if (buf1 > 0x8f) { - ct = 8; - } else { - buf0 = buf1; - buf1 = readByte(); - c = c + 0xfe00 - (buf0 << 9); - ct = 7; - } - } else { - buf0 = buf1; - buf1 = readByte(); - c = c + 0xff00 - (buf0 << 8); - ct = 8; - } -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/JArithmeticDecoder.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/JArithmeticDecoder.h deleted file mode 100644 index 0f091b7bd84..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/JArithmeticDecoder.h +++ /dev/null @@ -1,107 +0,0 @@ -//======================================================================== -// -// JArithmeticDecoder.h -// -// Arithmetic decoder used by the JBIG2 and JPEG2000 decoders. -// -// Copyright 2002-2004 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef JARITHMETICDECODER_H -#define JARITHMETICDECODER_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" - -class Stream; - -//------------------------------------------------------------------------ -// JArithmeticDecoderStats -//------------------------------------------------------------------------ - -class JArithmeticDecoderStats { -public: - - JArithmeticDecoderStats(int contextSizeA); - ~JArithmeticDecoderStats(); - JArithmeticDecoderStats *copy(); - void reset(); - int getContextSize() { return contextSize; } - void copyFrom(JArithmeticDecoderStats *stats); - void setEntry(Guint cx, int i, int mps); - -private: - - Guchar *cxTab; // cxTab[cx] = (i[cx] << 1) + mps[cx] - int contextSize; - - friend class JArithmeticDecoder; -}; - -//------------------------------------------------------------------------ -// JArithmeticDecoder -//------------------------------------------------------------------------ - -class JArithmeticDecoder { -public: - - JArithmeticDecoder(); - ~JArithmeticDecoder(); - - void setStream(Stream *strA) - { str = strA; dataLen = 0; limitStream = gFalse; } - void setStream(Stream *strA, int dataLenA) - { str = strA; dataLen = dataLenA; limitStream = gTrue; } - - // Start decoding on a new stream. This fills the byte buffers and - // runs INITDEC. - void start(); - - // Restart decoding on an interrupted stream. This refills the - // buffers if needed, but does not run INITDEC. (This is used in - // JPEG 2000 streams when codeblock data is split across multiple - // packets/layers.) - void restart(int dataLenA); - - // Read any leftover data in the stream. - void cleanup(); - - // Decode one bit. - int decodeBit(Guint context, JArithmeticDecoderStats *stats); - - // Decode eight bits. - int decodeByte(Guint context, JArithmeticDecoderStats *stats); - - // Returns false for OOB, otherwise sets *<x> and returns true. - GBool decodeInt(int *x, JArithmeticDecoderStats *stats); - - Guint decodeIAID(Guint codeLen, - JArithmeticDecoderStats *stats); - -private: - - Guint readByte(); - int decodeIntBit(JArithmeticDecoderStats *stats); - void byteIn(); - - static Guint qeTab[47]; - static int nmpsTab[47]; - static int nlpsTab[47]; - static int switchTab[47]; - - Guint buf0, buf1; - Guint c, a; - int ct; - - Guint prev; // for the integer decoder - - Stream *str; - int dataLen; - GBool limitStream; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/JBIG2Stream.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/JBIG2Stream.cc deleted file mode 100644 index bfb1994ed9d..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/JBIG2Stream.cc +++ /dev/null @@ -1,3743 +0,0 @@ -//======================================================================== -// -// JBIG2Stream.cc -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006 Raj Kumar <rkumar@archive.org> -// Copyright (C) 2006 Paul Walmsley <paul@booyaka.com> -// Copyright (C) 2006-2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009 David Benjamin <davidben@mit.edu> -// Copyright (C) 2011 Edward Jiang <ejiang@google.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <limits.h> -#include "goo/GooList.h" -#include "Error.h" -#include "JArithmeticDecoder.h" -#include "JBIG2Stream.h" - -//~ share these tables -#include "Stream-CCITT.h" - -//------------------------------------------------------------------------ - -static const int contextSize[4] = { 16, 13, 10, 10 }; -static const int refContextSize[2] = { 13, 10 }; - -//------------------------------------------------------------------------ -// JBIG2HuffmanTable -//------------------------------------------------------------------------ - -#define jbig2HuffmanLOW 0xfffffffd -#define jbig2HuffmanOOB 0xfffffffe -#define jbig2HuffmanEOT 0xffffffff - -struct JBIG2HuffmanTable { - int val; - Guint prefixLen; - Guint rangeLen; // can also be LOW, OOB, or EOT - Guint prefix; -}; - -static JBIG2HuffmanTable huffTableA[] = { - { 0, 1, 4, 0x000 }, - { 16, 2, 8, 0x002 }, - { 272, 3, 16, 0x006 }, - { 65808, 3, 32, 0x007 }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -static JBIG2HuffmanTable huffTableB[] = { - { 0, 1, 0, 0x000 }, - { 1, 2, 0, 0x002 }, - { 2, 3, 0, 0x006 }, - { 3, 4, 3, 0x00e }, - { 11, 5, 6, 0x01e }, - { 75, 6, 32, 0x03e }, - { 0, 6, jbig2HuffmanOOB, 0x03f }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -static JBIG2HuffmanTable huffTableC[] = { - { 0, 1, 0, 0x000 }, - { 1, 2, 0, 0x002 }, - { 2, 3, 0, 0x006 }, - { 3, 4, 3, 0x00e }, - { 11, 5, 6, 0x01e }, - { 0, 6, jbig2HuffmanOOB, 0x03e }, - { 75, 7, 32, 0x0fe }, - { -256, 8, 8, 0x0fe }, - { -257, 8, jbig2HuffmanLOW, 0x0ff }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -static JBIG2HuffmanTable huffTableD[] = { - { 1, 1, 0, 0x000 }, - { 2, 2, 0, 0x002 }, - { 3, 3, 0, 0x006 }, - { 4, 4, 3, 0x00e }, - { 12, 5, 6, 0x01e }, - { 76, 5, 32, 0x01f }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -static JBIG2HuffmanTable huffTableE[] = { - { 1, 1, 0, 0x000 }, - { 2, 2, 0, 0x002 }, - { 3, 3, 0, 0x006 }, - { 4, 4, 3, 0x00e }, - { 12, 5, 6, 0x01e }, - { 76, 6, 32, 0x03e }, - { -255, 7, 8, 0x07e }, - { -256, 7, jbig2HuffmanLOW, 0x07f }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -static JBIG2HuffmanTable huffTableF[] = { - { 0, 2, 7, 0x000 }, - { 128, 3, 7, 0x002 }, - { 256, 3, 8, 0x003 }, - { -1024, 4, 9, 0x008 }, - { -512, 4, 8, 0x009 }, - { -256, 4, 7, 0x00a }, - { -32, 4, 5, 0x00b }, - { 512, 4, 9, 0x00c }, - { 1024, 4, 10, 0x00d }, - { -2048, 5, 10, 0x01c }, - { -128, 5, 6, 0x01d }, - { -64, 5, 5, 0x01e }, - { -2049, 6, jbig2HuffmanLOW, 0x03e }, - { 2048, 6, 32, 0x03f }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -static JBIG2HuffmanTable huffTableG[] = { - { -512, 3, 8, 0x000 }, - { 256, 3, 8, 0x001 }, - { 512, 3, 9, 0x002 }, - { 1024, 3, 10, 0x003 }, - { -1024, 4, 9, 0x008 }, - { -256, 4, 7, 0x009 }, - { -32, 4, 5, 0x00a }, - { 0, 4, 5, 0x00b }, - { 128, 4, 7, 0x00c }, - { -128, 5, 6, 0x01a }, - { -64, 5, 5, 0x01b }, - { 32, 5, 5, 0x01c }, - { 64, 5, 6, 0x01d }, - { -1025, 5, jbig2HuffmanLOW, 0x01e }, - { 2048, 5, 32, 0x01f }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -static JBIG2HuffmanTable huffTableH[] = { - { 0, 2, 1, 0x000 }, - { 0, 2, jbig2HuffmanOOB, 0x001 }, - { 4, 3, 4, 0x004 }, - { -1, 4, 0, 0x00a }, - { 22, 4, 4, 0x00b }, - { 38, 4, 5, 0x00c }, - { 2, 5, 0, 0x01a }, - { 70, 5, 6, 0x01b }, - { 134, 5, 7, 0x01c }, - { 3, 6, 0, 0x03a }, - { 20, 6, 1, 0x03b }, - { 262, 6, 7, 0x03c }, - { 646, 6, 10, 0x03d }, - { -2, 7, 0, 0x07c }, - { 390, 7, 8, 0x07d }, - { -15, 8, 3, 0x0fc }, - { -5, 8, 1, 0x0fd }, - { -7, 9, 1, 0x1fc }, - { -3, 9, 0, 0x1fd }, - { -16, 9, jbig2HuffmanLOW, 0x1fe }, - { 1670, 9, 32, 0x1ff }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -static JBIG2HuffmanTable huffTableI[] = { - { 0, 2, jbig2HuffmanOOB, 0x000 }, - { -1, 3, 1, 0x002 }, - { 1, 3, 1, 0x003 }, - { 7, 3, 5, 0x004 }, - { -3, 4, 1, 0x00a }, - { 43, 4, 5, 0x00b }, - { 75, 4, 6, 0x00c }, - { 3, 5, 1, 0x01a }, - { 139, 5, 7, 0x01b }, - { 267, 5, 8, 0x01c }, - { 5, 6, 1, 0x03a }, - { 39, 6, 2, 0x03b }, - { 523, 6, 8, 0x03c }, - { 1291, 6, 11, 0x03d }, - { -5, 7, 1, 0x07c }, - { 779, 7, 9, 0x07d }, - { -31, 8, 4, 0x0fc }, - { -11, 8, 2, 0x0fd }, - { -15, 9, 2, 0x1fc }, - { -7, 9, 1, 0x1fd }, - { -32, 9, jbig2HuffmanLOW, 0x1fe }, - { 3339, 9, 32, 0x1ff }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -static JBIG2HuffmanTable huffTableJ[] = { - { -2, 2, 2, 0x000 }, - { 6, 2, 6, 0x001 }, - { 0, 2, jbig2HuffmanOOB, 0x002 }, - { -3, 5, 0, 0x018 }, - { 2, 5, 0, 0x019 }, - { 70, 5, 5, 0x01a }, - { 3, 6, 0, 0x036 }, - { 102, 6, 5, 0x037 }, - { 134, 6, 6, 0x038 }, - { 198, 6, 7, 0x039 }, - { 326, 6, 8, 0x03a }, - { 582, 6, 9, 0x03b }, - { 1094, 6, 10, 0x03c }, - { -21, 7, 4, 0x07a }, - { -4, 7, 0, 0x07b }, - { 4, 7, 0, 0x07c }, - { 2118, 7, 11, 0x07d }, - { -5, 8, 0, 0x0fc }, - { 5, 8, 0, 0x0fd }, - { -22, 8, jbig2HuffmanLOW, 0x0fe }, - { 4166, 8, 32, 0x0ff }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -static JBIG2HuffmanTable huffTableK[] = { - { 1, 1, 0, 0x000 }, - { 2, 2, 1, 0x002 }, - { 4, 4, 0, 0x00c }, - { 5, 4, 1, 0x00d }, - { 7, 5, 1, 0x01c }, - { 9, 5, 2, 0x01d }, - { 13, 6, 2, 0x03c }, - { 17, 7, 2, 0x07a }, - { 21, 7, 3, 0x07b }, - { 29, 7, 4, 0x07c }, - { 45, 7, 5, 0x07d }, - { 77, 7, 6, 0x07e }, - { 141, 7, 32, 0x07f }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -static JBIG2HuffmanTable huffTableL[] = { - { 1, 1, 0, 0x000 }, - { 2, 2, 0, 0x002 }, - { 3, 3, 1, 0x006 }, - { 5, 5, 0, 0x01c }, - { 6, 5, 1, 0x01d }, - { 8, 6, 1, 0x03c }, - { 10, 7, 0, 0x07a }, - { 11, 7, 1, 0x07b }, - { 13, 7, 2, 0x07c }, - { 17, 7, 3, 0x07d }, - { 25, 7, 4, 0x07e }, - { 41, 8, 5, 0x0fe }, - { 73, 8, 32, 0x0ff }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -static JBIG2HuffmanTable huffTableM[] = { - { 1, 1, 0, 0x000 }, - { 2, 3, 0, 0x004 }, - { 7, 3, 3, 0x005 }, - { 3, 4, 0, 0x00c }, - { 5, 4, 1, 0x00d }, - { 4, 5, 0, 0x01c }, - { 15, 6, 1, 0x03a }, - { 17, 6, 2, 0x03b }, - { 21, 6, 3, 0x03c }, - { 29, 6, 4, 0x03d }, - { 45, 6, 5, 0x03e }, - { 77, 7, 6, 0x07e }, - { 141, 7, 32, 0x07f }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -static JBIG2HuffmanTable huffTableN[] = { - { 0, 1, 0, 0x000 }, - { -2, 3, 0, 0x004 }, - { -1, 3, 0, 0x005 }, - { 1, 3, 0, 0x006 }, - { 2, 3, 0, 0x007 }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -static JBIG2HuffmanTable huffTableO[] = { - { 0, 1, 0, 0x000 }, - { -1, 3, 0, 0x004 }, - { 1, 3, 0, 0x005 }, - { -2, 4, 0, 0x00c }, - { 2, 4, 0, 0x00d }, - { -4, 5, 1, 0x01c }, - { 3, 5, 1, 0x01d }, - { -8, 6, 2, 0x03c }, - { 5, 6, 2, 0x03d }, - { -24, 7, 4, 0x07c }, - { 9, 7, 4, 0x07d }, - { -25, 7, jbig2HuffmanLOW, 0x07e }, - { 25, 7, 32, 0x07f }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -//------------------------------------------------------------------------ -// JBIG2HuffmanDecoder -//------------------------------------------------------------------------ - -class JBIG2HuffmanDecoder { -public: - - JBIG2HuffmanDecoder(); - ~JBIG2HuffmanDecoder(); - void setStream(Stream *strA) { str = strA; } - - void reset(); - - // Returns false for OOB, otherwise sets *<x> and returns true. - GBool decodeInt(int *x, JBIG2HuffmanTable *table); - - Guint readBits(Guint n); - Guint readBit(); - - // Sort the table by prefix length and assign prefix values. - void buildTable(JBIG2HuffmanTable *table, Guint len); - -private: - - Stream *str; - Guint buf; - Guint bufLen; -}; - -JBIG2HuffmanDecoder::JBIG2HuffmanDecoder() { - str = NULL; - reset(); -} - -JBIG2HuffmanDecoder::~JBIG2HuffmanDecoder() { -} - -void JBIG2HuffmanDecoder::reset() { - buf = 0; - bufLen = 0; -} - -//~ optimize this -GBool JBIG2HuffmanDecoder::decodeInt(int *x, JBIG2HuffmanTable *table) { - Guint i, len, prefix; - - i = 0; - len = 0; - prefix = 0; - while (table[i].rangeLen != jbig2HuffmanEOT) { - while (len < table[i].prefixLen) { - prefix = (prefix << 1) | readBit(); - ++len; - } - if (prefix == table[i].prefix) { - if (table[i].rangeLen == jbig2HuffmanOOB) { - return gFalse; - } - if (table[i].rangeLen == jbig2HuffmanLOW) { - *x = table[i].val - readBits(32); - } else if (table[i].rangeLen > 0) { - *x = table[i].val + readBits(table[i].rangeLen); - } else { - *x = table[i].val; - } - return gTrue; - } - ++i; - } - return gFalse; -} - -Guint JBIG2HuffmanDecoder::readBits(Guint n) { - Guint x, mask, nLeft; - - mask = (n == 32) ? 0xffffffff : ((1 << n) - 1); - if (bufLen >= n) { - x = (buf >> (bufLen - n)) & mask; - bufLen -= n; - } else { - x = buf & ((1 << bufLen) - 1); - nLeft = n - bufLen; - bufLen = 0; - while (nLeft >= 8) { - x = (x << 8) | (str->getChar() & 0xff); - nLeft -= 8; - } - if (nLeft > 0) { - buf = str->getChar(); - bufLen = 8 - nLeft; - x = (x << nLeft) | ((buf >> bufLen) & ((1 << nLeft) - 1)); - } - } - return x; -} - -Guint JBIG2HuffmanDecoder::readBit() { - if (bufLen == 0) { - buf = str->getChar(); - bufLen = 8; - } - --bufLen; - return (buf >> bufLen) & 1; -} - -void JBIG2HuffmanDecoder::buildTable(JBIG2HuffmanTable *table, Guint len) { - Guint i, j, k, prefix; - JBIG2HuffmanTable tab; - - // stable selection sort: - // - entries with prefixLen > 0, in ascending prefixLen order - // - entry with prefixLen = 0, rangeLen = EOT - // - all other entries with prefixLen = 0 - // (on entry, table[len] has prefixLen = 0, rangeLen = EOT) - for (i = 0; i < len; ++i) { - for (j = i; j < len && table[j].prefixLen == 0; ++j) ; - if (j == len) { - break; - } - for (k = j + 1; k < len; ++k) { - if (table[k].prefixLen > 0 && - table[k].prefixLen < table[j].prefixLen) { - j = k; - } - } - if (j != i) { - tab = table[j]; - for (k = j; k > i; --k) { - table[k] = table[k - 1]; - } - table[i] = tab; - } - } - table[i] = table[len]; - - // assign prefixes - if (table[0].rangeLen != jbig2HuffmanEOT) { - i = 0; - prefix = 0; - table[i++].prefix = prefix++; - for (; table[i].rangeLen != jbig2HuffmanEOT; ++i) { - prefix <<= table[i].prefixLen - table[i-1].prefixLen; - table[i].prefix = prefix++; - } - } -} - -//------------------------------------------------------------------------ -// JBIG2MMRDecoder -//------------------------------------------------------------------------ - -class JBIG2MMRDecoder { -public: - - JBIG2MMRDecoder(); - ~JBIG2MMRDecoder(); - void setStream(Stream *strA) { str = strA; } - void reset(); - int get2DCode(); - int getBlackCode(); - int getWhiteCode(); - Guint get24Bits(); - void skipTo(Guint length); - -private: - - Stream *str; - Guint buf; - Guint bufLen; - Guint nBytesRead; -}; - -JBIG2MMRDecoder::JBIG2MMRDecoder() { - str = NULL; - reset(); -} - -JBIG2MMRDecoder::~JBIG2MMRDecoder() { -} - -void JBIG2MMRDecoder::reset() { - buf = 0; - bufLen = 0; - nBytesRead = 0; -} - -int JBIG2MMRDecoder::get2DCode() { - const CCITTCode *p; - - if (bufLen == 0) { - buf = str->getChar() & 0xff; - bufLen = 8; - ++nBytesRead; - p = &twoDimTab1[(buf >> 1) & 0x7f]; - } else if (bufLen == 8) { - p = &twoDimTab1[(buf >> 1) & 0x7f]; - } else { - p = &twoDimTab1[(buf << (7 - bufLen)) & 0x7f]; - if (p->bits < 0 || p->bits > (int)bufLen) { - buf = (buf << 8) | (str->getChar() & 0xff); - bufLen += 8; - ++nBytesRead; - p = &twoDimTab1[(buf >> (bufLen - 7)) & 0x7f]; - } - } - if (p->bits < 0) { - error(str->getPos(), "Bad two dim code in JBIG2 MMR stream"); - return EOF; - } - bufLen -= p->bits; - return p->n; -} - -int JBIG2MMRDecoder::getWhiteCode() { - const CCITTCode *p; - Guint code; - - if (bufLen == 0) { - buf = str->getChar() & 0xff; - bufLen = 8; - ++nBytesRead; - } - while (1) { - if (bufLen >= 11 && ((buf >> (bufLen - 7)) & 0x7f) == 0) { - if (bufLen <= 12) { - code = buf << (12 - bufLen); - } else { - code = buf >> (bufLen - 12); - } - p = &whiteTab1[code & 0x1f]; - } else { - if (bufLen <= 9) { - code = buf << (9 - bufLen); - } else { - code = buf >> (bufLen - 9); - } - p = &whiteTab2[code & 0x1ff]; - } - if (p->bits > 0 && p->bits <= (int)bufLen) { - bufLen -= p->bits; - return p->n; - } - if (bufLen >= 12) { - break; - } - buf = (buf << 8) | (str->getChar() & 0xff); - bufLen += 8; - ++nBytesRead; - } - error(str->getPos(), "Bad white code in JBIG2 MMR stream"); - // eat a bit and return a positive number so that the caller doesn't - // go into an infinite loop - --bufLen; - return 1; -} - -int JBIG2MMRDecoder::getBlackCode() { - const CCITTCode *p; - Guint code; - - if (bufLen == 0) { - buf = str->getChar() & 0xff; - bufLen = 8; - ++nBytesRead; - } - while (1) { - if (bufLen >= 10 && ((buf >> (bufLen - 6)) & 0x3f) == 0) { - if (bufLen <= 13) { - code = buf << (13 - bufLen); - } else { - code = buf >> (bufLen - 13); - } - p = &blackTab1[code & 0x7f]; - } else if (bufLen >= 7 && ((buf >> (bufLen - 4)) & 0x0f) == 0 && - ((buf >> (bufLen - 6)) & 0x03) != 0) { - if (bufLen <= 12) { - code = buf << (12 - bufLen); - } else { - code = buf >> (bufLen - 12); - } - p = &blackTab2[(code & 0xff) - 64]; - } else { - if (bufLen <= 6) { - code = buf << (6 - bufLen); - } else { - code = buf >> (bufLen - 6); - } - p = &blackTab3[code & 0x3f]; - } - if (p->bits > 0 && p->bits <= (int)bufLen) { - bufLen -= p->bits; - return p->n; - } - if (bufLen >= 13) { - break; - } - buf = (buf << 8) | (str->getChar() & 0xff); - bufLen += 8; - ++nBytesRead; - } - error(str->getPos(), "Bad black code in JBIG2 MMR stream"); - // eat a bit and return a positive number so that the caller doesn't - // go into an infinite loop - --bufLen; - return 1; -} - -Guint JBIG2MMRDecoder::get24Bits() { - while (bufLen < 24) { - buf = (buf << 8) | (str->getChar() & 0xff); - bufLen += 8; - ++nBytesRead; - } - return (buf >> (bufLen - 24)) & 0xffffff; -} - -void JBIG2MMRDecoder::skipTo(Guint length) { - while (nBytesRead < length) { - str->getChar(); - ++nBytesRead; - } -} - -//------------------------------------------------------------------------ -// JBIG2Segment -//------------------------------------------------------------------------ - -enum JBIG2SegmentType { - jbig2SegBitmap, - jbig2SegSymbolDict, - jbig2SegPatternDict, - jbig2SegCodeTable -}; - -class JBIG2Segment { -public: - - JBIG2Segment(Guint segNumA) { segNum = segNumA; } - virtual ~JBIG2Segment() {} - void setSegNum(Guint segNumA) { segNum = segNumA; } - Guint getSegNum() { return segNum; } - virtual JBIG2SegmentType getType() = 0; - -private: - - Guint segNum; -}; - -//------------------------------------------------------------------------ -// JBIG2Bitmap -//------------------------------------------------------------------------ - -struct JBIG2BitmapPtr { - Guchar *p; - int shift; - int x; -}; - -class JBIG2Bitmap: public JBIG2Segment { -public: - - JBIG2Bitmap(Guint segNumA, int wA, int hA); - virtual ~JBIG2Bitmap(); - virtual JBIG2SegmentType getType() { return jbig2SegBitmap; } - JBIG2Bitmap *copy() { return new JBIG2Bitmap(0, this); } - JBIG2Bitmap *getSlice(Guint x, Guint y, Guint wA, Guint hA); - void expand(int newH, Guint pixel); - void clearToZero(); - void clearToOne(); - int getWidth() { return w; } - int getHeight() { return h; } - int getPixel(int x, int y) - { return (x < 0 || x >= w || y < 0 || y >= h) ? 0 : - (data[y * line + (x >> 3)] >> (7 - (x & 7))) & 1; } - void setPixel(int x, int y) - { data[y * line + (x >> 3)] |= 1 << (7 - (x & 7)); } - void clearPixel(int x, int y) - { data[y * line + (x >> 3)] &= 0x7f7f >> (x & 7); } - void getPixelPtr(int x, int y, JBIG2BitmapPtr *ptr); - int nextPixel(JBIG2BitmapPtr *ptr); - void duplicateRow(int yDest, int ySrc); - void combine(JBIG2Bitmap *bitmap, int x, int y, Guint combOp); - Guchar *getDataPtr() { return data; } - int getDataSize() { return h * line; } - GBool isOk() { return data != NULL; } - -private: - - JBIG2Bitmap(Guint segNumA, JBIG2Bitmap *bitmap); - - int w, h, line; - Guchar *data; -}; - -JBIG2Bitmap::JBIG2Bitmap(Guint segNumA, int wA, int hA): - JBIG2Segment(segNumA) -{ - w = wA; - h = hA; - line = (wA + 7) >> 3; - - if (w <= 0 || h <= 0 || line <= 0 || h >= (INT_MAX - 1) / line) { - error(-1, "invalid width/height"); - data = NULL; - return; - } - // need to allocate one extra guard byte for use in combine() - data = (Guchar *)gmalloc(h * line + 1); - data[h * line] = 0; -} - -JBIG2Bitmap::JBIG2Bitmap(Guint segNumA, JBIG2Bitmap *bitmap): - JBIG2Segment(segNumA) -{ - w = bitmap->w; - h = bitmap->h; - line = bitmap->line; - - if (w <= 0 || h <= 0 || line <= 0 || h >= (INT_MAX - 1) / line) { - error(-1, "invalid width/height"); - data = NULL; - return; - } - // need to allocate one extra guard byte for use in combine() - data = (Guchar *)gmalloc(h * line + 1); - memcpy(data, bitmap->data, h * line); - data[h * line] = 0; -} - -JBIG2Bitmap::~JBIG2Bitmap() { - gfree(data); -} - -//~ optimize this -JBIG2Bitmap *JBIG2Bitmap::getSlice(Guint x, Guint y, Guint wA, Guint hA) { - JBIG2Bitmap *slice; - Guint xx, yy; - - slice = new JBIG2Bitmap(0, wA, hA); - if (slice->isOk()) { - slice->clearToZero(); - for (yy = 0; yy < hA; ++yy) { - for (xx = 0; xx < wA; ++xx) { - if (getPixel(x + xx, y + yy)) { - slice->setPixel(xx, yy); - } - } - } - } else { - delete slice; - slice = NULL; - } - return slice; -} - -void JBIG2Bitmap::expand(int newH, Guint pixel) { - if (newH <= h || line <= 0 || newH >= (INT_MAX - 1) / line) { - error(-1, "invalid width/height"); - gfree(data); - data = NULL; - return; - } - // need to allocate one extra guard byte for use in combine() - data = (Guchar *)grealloc(data, newH * line + 1); - if (pixel) { - memset(data + h * line, 0xff, (newH - h) * line); - } else { - memset(data + h * line, 0x00, (newH - h) * line); - } - h = newH; - data[h * line] = 0; -} - -void JBIG2Bitmap::clearToZero() { - memset(data, 0, h * line); -} - -void JBIG2Bitmap::clearToOne() { - memset(data, 0xff, h * line); -} - -inline void JBIG2Bitmap::getPixelPtr(int x, int y, JBIG2BitmapPtr *ptr) { - if (y < 0 || y >= h || x >= w) { - ptr->p = NULL; - ptr->shift = 0; // make gcc happy - ptr->x = 0; // make gcc happy - } else if (x < 0) { - ptr->p = &data[y * line]; - ptr->shift = 7; - ptr->x = x; - } else { - ptr->p = &data[y * line + (x >> 3)]; - ptr->shift = 7 - (x & 7); - ptr->x = x; - } -} - -inline int JBIG2Bitmap::nextPixel(JBIG2BitmapPtr *ptr) { - int pix; - - if (!ptr->p) { - pix = 0; - } else if (ptr->x < 0) { - ++ptr->x; - pix = 0; - } else { - pix = (*ptr->p >> ptr->shift) & 1; - if (++ptr->x == w) { - ptr->p = NULL; - } else if (ptr->shift == 0) { - ++ptr->p; - ptr->shift = 7; - } else { - --ptr->shift; - } - } - return pix; -} - -void JBIG2Bitmap::duplicateRow(int yDest, int ySrc) { - memcpy(data + yDest * line, data + ySrc * line, line); -} - -void JBIG2Bitmap::combine(JBIG2Bitmap *bitmap, int x, int y, - Guint combOp) { - int x0, x1, y0, y1, xx, yy; - Guchar *srcPtr, *destPtr; - Guint src0, src1, src, dest, s1, s2, m1, m2, m3; - GBool oneByte; - - // check for the pathological case where y = -2^31 - if (y < -0x7fffffff) { - return; - } - if (y < 0) { - y0 = -y; - } else { - y0 = 0; - } - if (y + bitmap->h > h) { - y1 = h - y; - } else { - y1 = bitmap->h; - } - if (y0 >= y1) { - return; - } - - if (x >= 0) { - x0 = x & ~7; - } else { - x0 = 0; - } - x1 = x + bitmap->w; - if (x1 > w) { - x1 = w; - } - if (x0 >= x1) { - return; - } - - s1 = x & 7; - s2 = 8 - s1; - m1 = 0xff >> (x1 & 7); - m2 = 0xff << (((x1 & 7) == 0) ? 0 : 8 - (x1 & 7)); - m3 = (0xff >> s1) & m2; - - oneByte = x0 == ((x1 - 1) & ~7); - - for (yy = y0; yy < y1; ++yy) { - - // one byte per line -- need to mask both left and right side - if (oneByte) { - if (x >= 0) { - destPtr = data + (y + yy) * line + (x >> 3); - srcPtr = bitmap->data + yy * bitmap->line; - dest = *destPtr; - src1 = *srcPtr; - switch (combOp) { - case 0: // or - dest |= (src1 >> s1) & m2; - break; - case 1: // and - dest &= ((0xff00 | src1) >> s1) | m1; - break; - case 2: // xor - dest ^= (src1 >> s1) & m2; - break; - case 3: // xnor - dest ^= ((src1 ^ 0xff) >> s1) & m2; - break; - case 4: // replace - dest = (dest & ~m3) | ((src1 >> s1) & m3); - break; - } - *destPtr = dest; - } else { - destPtr = data + (y + yy) * line; - srcPtr = bitmap->data + yy * bitmap->line + (-x >> 3); - dest = *destPtr; - src1 = *srcPtr; - switch (combOp) { - case 0: // or - dest |= src1 & m2; - break; - case 1: // and - dest &= src1 | m1; - break; - case 2: // xor - dest ^= src1 & m2; - break; - case 3: // xnor - dest ^= (src1 ^ 0xff) & m2; - break; - case 4: // replace - dest = (src1 & m2) | (dest & m1); - break; - } - *destPtr = dest; - } - - // multiple bytes per line -- need to mask left side of left-most - // byte and right side of right-most byte - } else { - - // left-most byte - if (x >= 0) { - destPtr = data + (y + yy) * line + (x >> 3); - srcPtr = bitmap->data + yy * bitmap->line; - src1 = *srcPtr++; - dest = *destPtr; - switch (combOp) { - case 0: // or - dest |= src1 >> s1; - break; - case 1: // and - dest &= (0xff00 | src1) >> s1; - break; - case 2: // xor - dest ^= src1 >> s1; - break; - case 3: // xnor - dest ^= (src1 ^ 0xff) >> s1; - break; - case 4: // replace - dest = (dest & (0xff << s2)) | (src1 >> s1); - break; - } - *destPtr++ = dest; - xx = x0 + 8; - } else { - destPtr = data + (y + yy) * line; - srcPtr = bitmap->data + yy * bitmap->line + (-x >> 3); - src1 = *srcPtr++; - xx = x0; - } - - // middle bytes - for (; xx < x1 - 8; xx += 8) { - dest = *destPtr; - src0 = src1; - src1 = *srcPtr++; - src = (((src0 << 8) | src1) >> s1) & 0xff; - switch (combOp) { - case 0: // or - dest |= src; - break; - case 1: // and - dest &= src; - break; - case 2: // xor - dest ^= src; - break; - case 3: // xnor - dest ^= src ^ 0xff; - break; - case 4: // replace - dest = src; - break; - } - *destPtr++ = dest; - } - - // right-most byte - // note: this last byte (src1) may not actually be used, depending - // on the values of s1, m1, and m2 - and in fact, it may be off - // the edge of the source bitmap, which means we need to allocate - // one extra guard byte at the end of each bitmap - dest = *destPtr; - src0 = src1; - src1 = *srcPtr++; - src = (((src0 << 8) | src1) >> s1) & 0xff; - switch (combOp) { - case 0: // or - dest |= src & m2; - break; - case 1: // and - dest &= src | m1; - break; - case 2: // xor - dest ^= src & m2; - break; - case 3: // xnor - dest ^= (src ^ 0xff) & m2; - break; - case 4: // replace - dest = (src & m2) | (dest & m1); - break; - } - *destPtr = dest; - } - } -} - -//------------------------------------------------------------------------ -// JBIG2SymbolDict -//------------------------------------------------------------------------ - -class JBIG2SymbolDict: public JBIG2Segment { -public: - - JBIG2SymbolDict(Guint segNumA, Guint sizeA); - virtual ~JBIG2SymbolDict(); - virtual JBIG2SegmentType getType() { return jbig2SegSymbolDict; } - Guint getSize() { return size; } - void setBitmap(Guint idx, JBIG2Bitmap *bitmap) { bitmaps[idx] = bitmap; } - JBIG2Bitmap *getBitmap(Guint idx) { return bitmaps[idx]; } - GBool isOk() { return bitmaps != NULL; } - void setGenericRegionStats(JArithmeticDecoderStats *stats) - { genericRegionStats = stats; } - void setRefinementRegionStats(JArithmeticDecoderStats *stats) - { refinementRegionStats = stats; } - JArithmeticDecoderStats *getGenericRegionStats() - { return genericRegionStats; } - JArithmeticDecoderStats *getRefinementRegionStats() - { return refinementRegionStats; } - -private: - - Guint size; - JBIG2Bitmap **bitmaps; - JArithmeticDecoderStats *genericRegionStats; - JArithmeticDecoderStats *refinementRegionStats; -}; - -JBIG2SymbolDict::JBIG2SymbolDict(Guint segNumA, Guint sizeA): - JBIG2Segment(segNumA) -{ - size = sizeA; - bitmaps = (JBIG2Bitmap **)gmallocn_checkoverflow(size, sizeof(JBIG2Bitmap *)); - if (!bitmaps) size = 0; - genericRegionStats = NULL; - refinementRegionStats = NULL; -} - -JBIG2SymbolDict::~JBIG2SymbolDict() { - Guint i; - - for (i = 0; i < size; ++i) { - delete bitmaps[i]; - } - gfree(bitmaps); - if (genericRegionStats) { - delete genericRegionStats; - } - if (refinementRegionStats) { - delete refinementRegionStats; - } -} - -//------------------------------------------------------------------------ -// JBIG2PatternDict -//------------------------------------------------------------------------ - -class JBIG2PatternDict: public JBIG2Segment { -public: - - JBIG2PatternDict(Guint segNumA, Guint sizeA); - virtual ~JBIG2PatternDict(); - virtual JBIG2SegmentType getType() { return jbig2SegPatternDict; } - Guint getSize() { return size; } - void setBitmap(Guint idx, JBIG2Bitmap *bitmap) { bitmaps[idx] = bitmap; } - JBIG2Bitmap *getBitmap(Guint idx) { return bitmaps[idx]; } - -private: - - Guint size; - JBIG2Bitmap **bitmaps; -}; - -JBIG2PatternDict::JBIG2PatternDict(Guint segNumA, Guint sizeA): - JBIG2Segment(segNumA) -{ - size = sizeA; - bitmaps = (JBIG2Bitmap **)gmallocn(size, sizeof(JBIG2Bitmap *)); -} - -JBIG2PatternDict::~JBIG2PatternDict() { - Guint i; - - for (i = 0; i < size; ++i) { - delete bitmaps[i]; - } - gfree(bitmaps); -} - -//------------------------------------------------------------------------ -// JBIG2CodeTable -//------------------------------------------------------------------------ - -class JBIG2CodeTable: public JBIG2Segment { -public: - - JBIG2CodeTable(Guint segNumA, JBIG2HuffmanTable *tableA); - virtual ~JBIG2CodeTable(); - virtual JBIG2SegmentType getType() { return jbig2SegCodeTable; } - JBIG2HuffmanTable *getHuffTable() { return table; } - -private: - - JBIG2HuffmanTable *table; -}; - -JBIG2CodeTable::JBIG2CodeTable(Guint segNumA, JBIG2HuffmanTable *tableA): - JBIG2Segment(segNumA) -{ - table = tableA; -} - -JBIG2CodeTable::~JBIG2CodeTable() { - gfree(table); -} - -//------------------------------------------------------------------------ -// JBIG2Stream -//------------------------------------------------------------------------ - -JBIG2Stream::JBIG2Stream(Stream *strA, Object *globalsStreamA): - FilterStream(strA) -{ - pageBitmap = NULL; - - arithDecoder = new JArithmeticDecoder(); - genericRegionStats = new JArithmeticDecoderStats(1 << 1); - refinementRegionStats = new JArithmeticDecoderStats(1 << 1); - iadhStats = new JArithmeticDecoderStats(1 << 9); - iadwStats = new JArithmeticDecoderStats(1 << 9); - iaexStats = new JArithmeticDecoderStats(1 << 9); - iaaiStats = new JArithmeticDecoderStats(1 << 9); - iadtStats = new JArithmeticDecoderStats(1 << 9); - iaitStats = new JArithmeticDecoderStats(1 << 9); - iafsStats = new JArithmeticDecoderStats(1 << 9); - iadsStats = new JArithmeticDecoderStats(1 << 9); - iardxStats = new JArithmeticDecoderStats(1 << 9); - iardyStats = new JArithmeticDecoderStats(1 << 9); - iardwStats = new JArithmeticDecoderStats(1 << 9); - iardhStats = new JArithmeticDecoderStats(1 << 9); - iariStats = new JArithmeticDecoderStats(1 << 9); - iaidStats = new JArithmeticDecoderStats(1 << 1); - huffDecoder = new JBIG2HuffmanDecoder(); - mmrDecoder = new JBIG2MMRDecoder(); - - globalsStreamA->copy(&globalsStream); - segments = globalSegments = NULL; - curStr = NULL; - dataPtr = dataEnd = NULL; -} - -JBIG2Stream::~JBIG2Stream() { - close(); - globalsStream.free(); - delete arithDecoder; - delete genericRegionStats; - delete refinementRegionStats; - delete iadhStats; - delete iadwStats; - delete iaexStats; - delete iaaiStats; - delete iadtStats; - delete iaitStats; - delete iafsStats; - delete iadsStats; - delete iardxStats; - delete iardyStats; - delete iardwStats; - delete iardhStats; - delete iariStats; - delete iaidStats; - delete huffDecoder; - delete mmrDecoder; - delete str; -} - -void JBIG2Stream::reset() { - // read the globals stream - globalSegments = new GooList(); - if (globalsStream.isStream()) { - segments = globalSegments; - curStr = globalsStream.getStream(); - curStr->reset(); - arithDecoder->setStream(curStr); - huffDecoder->setStream(curStr); - mmrDecoder->setStream(curStr); - readSegments(); - curStr->close(); - } - - // read the main stream - segments = new GooList(); - curStr = str; - curStr->reset(); - arithDecoder->setStream(curStr); - huffDecoder->setStream(curStr); - mmrDecoder->setStream(curStr); - readSegments(); - - if (pageBitmap) { - dataPtr = pageBitmap->getDataPtr(); - dataEnd = dataPtr + pageBitmap->getDataSize(); - } else { - dataPtr = dataEnd = NULL; - } -} - -void JBIG2Stream::close() { - if (pageBitmap) { - delete pageBitmap; - pageBitmap = NULL; - } - if (segments) { - deleteGooList(segments, JBIG2Segment); - segments = NULL; - } - if (globalSegments) { - deleteGooList(globalSegments, JBIG2Segment); - globalSegments = NULL; - } - dataPtr = dataEnd = NULL; - FilterStream::close(); -} - -int JBIG2Stream::getChar() { - if (dataPtr && dataPtr < dataEnd) { - return (*dataPtr++ ^ 0xff) & 0xff; - } - return EOF; -} - -int JBIG2Stream::lookChar() { - if (dataPtr && dataPtr < dataEnd) { - return (*dataPtr ^ 0xff) & 0xff; - } - return EOF; -} - -int JBIG2Stream::getPos() { - if (pageBitmap == NULL) { - return 0; - } - return dataPtr - pageBitmap->getDataPtr(); -} - -GooString *JBIG2Stream::getPSFilter(int psLevel, char *indent) { - return NULL; -} - -GBool JBIG2Stream::isBinary(GBool last) { - return str->isBinary(gTrue); -} - -void JBIG2Stream::readSegments() { - Guint segNum, segFlags, segType, page, segLength; - Guint refFlags, nRefSegs; - Guint *refSegs; - int segDataPos; - int c1, c2, c3; - Guint i; - - while (readULong(&segNum)) { - - // segment header flags - if (!readUByte(&segFlags)) { - goto eofError1; - } - segType = segFlags & 0x3f; - - // referred-to segment count and retention flags - if (!readUByte(&refFlags)) { - goto eofError1; - } - nRefSegs = refFlags >> 5; - if (nRefSegs == 7) { - if ((c1 = curStr->getChar()) == EOF || - (c2 = curStr->getChar()) == EOF || - (c3 = curStr->getChar()) == EOF) { - goto eofError1; - } - refFlags = (refFlags << 24) | (c1 << 16) | (c2 << 8) | c3; - nRefSegs = refFlags & 0x1fffffff; - for (i = 0; i < (nRefSegs + 9) >> 3; ++i) { - c1 = curStr->getChar(); - } - } - - // referred-to segment numbers - refSegs = (Guint *)gmallocn(nRefSegs, sizeof(Guint)); - if (segNum <= 256) { - for (i = 0; i < nRefSegs; ++i) { - if (!readUByte(&refSegs[i])) { - goto eofError2; - } - } - } else if (segNum <= 65536) { - for (i = 0; i < nRefSegs; ++i) { - if (!readUWord(&refSegs[i])) { - goto eofError2; - } - } - } else { - for (i = 0; i < nRefSegs; ++i) { - if (!readULong(&refSegs[i])) { - goto eofError2; - } - } - } - - // segment page association - if (segFlags & 0x40) { - if (!readULong(&page)) { - goto eofError2; - } - } else { - if (!readUByte(&page)) { - goto eofError2; - } - } - - // segment data length - if (!readULong(&segLength)) { - goto eofError2; - } - - // keep track of the start of the segment data - segDataPos = curStr->getPos(); - - // check for missing page information segment - if (!pageBitmap && ((segType >= 4 && segType <= 7) || - (segType >= 20 && segType <= 43))) { - error(curStr->getPos(), "First JBIG2 segment associated with a page must be a page information segment"); - goto syntaxError; - } - - // read the segment data - switch (segType) { - case 0: - if (!readSymbolDictSeg(segNum, segLength, refSegs, nRefSegs)) { - goto syntaxError; - } - break; - case 4: - readTextRegionSeg(segNum, gFalse, gFalse, segLength, refSegs, nRefSegs); - break; - case 6: - readTextRegionSeg(segNum, gTrue, gFalse, segLength, refSegs, nRefSegs); - break; - case 7: - readTextRegionSeg(segNum, gTrue, gTrue, segLength, refSegs, nRefSegs); - break; - case 16: - readPatternDictSeg(segNum, segLength); - break; - case 20: - readHalftoneRegionSeg(segNum, gFalse, gFalse, segLength, - refSegs, nRefSegs); - break; - case 22: - readHalftoneRegionSeg(segNum, gTrue, gFalse, segLength, - refSegs, nRefSegs); - break; - case 23: - readHalftoneRegionSeg(segNum, gTrue, gTrue, segLength, - refSegs, nRefSegs); - break; - case 36: - readGenericRegionSeg(segNum, gFalse, gFalse, segLength); - break; - case 38: - readGenericRegionSeg(segNum, gTrue, gFalse, segLength); - break; - case 39: - readGenericRegionSeg(segNum, gTrue, gTrue, segLength); - break; - case 40: - readGenericRefinementRegionSeg(segNum, gFalse, gFalse, segLength, - refSegs, nRefSegs); - break; - case 42: - readGenericRefinementRegionSeg(segNum, gTrue, gFalse, segLength, - refSegs, nRefSegs); - break; - case 43: - readGenericRefinementRegionSeg(segNum, gTrue, gTrue, segLength, - refSegs, nRefSegs); - break; - case 48: - readPageInfoSeg(segLength); - break; - case 50: - readEndOfStripeSeg(segLength); - break; - case 52: - readProfilesSeg(segLength); - break; - case 53: - readCodeTableSeg(segNum, segLength); - break; - case 62: - readExtensionSeg(segLength); - break; - default: - error(curStr->getPos(), "Unknown segment type in JBIG2 stream"); - for (i = 0; i < segLength; ++i) { - if ((c1 = curStr->getChar()) == EOF) { - goto eofError2; - } - } - break; - } - - // Make sure the segment handler read all of the bytes in the - // segment data, unless this segment is marked as having an - // unknown length (section 7.2.7 of the JBIG2 Final Committee Draft) - - if (segLength != 0xffffffff) { - - int segExtraBytes = segDataPos + segLength - curStr->getPos(); - if (segExtraBytes > 0) { - - // If we didn't read all of the bytes in the segment data, - // indicate an error, and throw away the rest of the data. - - // v.3.1.01.13 of the LuraTech PDF Compressor Server will - // sometimes generate an extraneous NULL byte at the end of - // arithmetic-coded symbol dictionary segments when numNewSyms - // == 0. Segments like this often occur for blank pages. - - error(curStr->getPos(), "%d extraneous byte%s after segment", - segExtraBytes, (segExtraBytes > 1) ? "s" : ""); - - // Burn through the remaining bytes -- inefficient, but - // hopefully we're not doing this much - - int trash; - for (int i = segExtraBytes; i > 0; i--) { - readByte(&trash); - } - - } else if (segExtraBytes < 0) { - - // If we read more bytes than we should have, according to the - // segment length field, note an error. - - error(curStr->getPos(), "Previous segment handler read too many bytes"); - - } - - } - - gfree(refSegs); - } - - return; - - syntaxError: - gfree(refSegs); - return; - - eofError2: - gfree(refSegs); - eofError1: - error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); -} - -GBool JBIG2Stream::readSymbolDictSeg(Guint segNum, Guint length, - Guint *refSegs, Guint nRefSegs) { - JBIG2SymbolDict *symbolDict; - JBIG2HuffmanTable *huffDHTable, *huffDWTable; - JBIG2HuffmanTable *huffBMSizeTable, *huffAggInstTable; - JBIG2Segment *seg; - GooList *codeTables; - JBIG2SymbolDict *inputSymbolDict; - Guint flags, sdTemplate, sdrTemplate, huff, refAgg; - Guint huffDH, huffDW, huffBMSize, huffAggInst; - Guint contextUsed, contextRetained; - int sdATX[4], sdATY[4], sdrATX[2], sdrATY[2]; - Guint numExSyms, numNewSyms, numInputSyms, symCodeLen; - JBIG2Bitmap **bitmaps; - JBIG2Bitmap *collBitmap, *refBitmap; - Guint *symWidths; - Guint symHeight, symWidth, totalWidth, x, symID; - int dh, dw, refAggNum, refDX, refDY, bmSize; - GBool ex; - int run, cnt; - Guint i, j, k; - Guchar *p; - - symWidths = NULL; - - // symbol dictionary flags - if (!readUWord(&flags)) { - goto eofError; - } - sdTemplate = (flags >> 10) & 3; - sdrTemplate = (flags >> 12) & 1; - huff = flags & 1; - refAgg = (flags >> 1) & 1; - huffDH = (flags >> 2) & 3; - huffDW = (flags >> 4) & 3; - huffBMSize = (flags >> 6) & 1; - huffAggInst = (flags >> 7) & 1; - contextUsed = (flags >> 8) & 1; - contextRetained = (flags >> 9) & 1; - - // symbol dictionary AT flags - if (!huff) { - if (sdTemplate == 0) { - if (!readByte(&sdATX[0]) || - !readByte(&sdATY[0]) || - !readByte(&sdATX[1]) || - !readByte(&sdATY[1]) || - !readByte(&sdATX[2]) || - !readByte(&sdATY[2]) || - !readByte(&sdATX[3]) || - !readByte(&sdATY[3])) { - goto eofError; - } - } else { - if (!readByte(&sdATX[0]) || - !readByte(&sdATY[0])) { - goto eofError; - } - } - } - - // symbol dictionary refinement AT flags - if (refAgg && !sdrTemplate) { - if (!readByte(&sdrATX[0]) || - !readByte(&sdrATY[0]) || - !readByte(&sdrATX[1]) || - !readByte(&sdrATY[1])) { - goto eofError; - } - } - - // SDNUMEXSYMS and SDNUMNEWSYMS - if (!readULong(&numExSyms) || !readULong(&numNewSyms)) { - goto eofError; - } - - // get referenced segments: input symbol dictionaries and code tables - codeTables = new GooList(); - numInputSyms = 0; - for (i = 0; i < nRefSegs; ++i) { - // This is need by bug 12014, returning gFalse makes it not crash - // but we end up with a empty page while acroread is able to render - // part of it - if ((seg = findSegment(refSegs[i]))) { - if (seg->getType() == jbig2SegSymbolDict) { - j = ((JBIG2SymbolDict *)seg)->getSize(); - if (numInputSyms > UINT_MAX - j) { - error(curStr->getPos(), "Too many input symbols in JBIG2 symbol dictionary"); - delete codeTables; - goto eofError; - } - numInputSyms += j; - } else if (seg->getType() == jbig2SegCodeTable) { - codeTables->append(seg); - } - } else { - delete codeTables; - return gFalse; - } - } - if (numInputSyms > UINT_MAX - numNewSyms) { - error(curStr->getPos(), "Too many input symbols in JBIG2 symbol dictionary"); - delete codeTables; - goto eofError; - } - - // compute symbol code length, per 6.5.8.2.3 - // symCodeLen = ceil( log2( numInputSyms + numNewSyms ) ) - symCodeLen = 1; - if (likely(numInputSyms + numNewSyms > 0)) { // don't fail too badly if the sum is 0 - i = (numInputSyms + numNewSyms - 1) >> 1; - while (i) { - ++symCodeLen; - i >>= 1; - } - } - - // get the input symbol bitmaps - bitmaps = (JBIG2Bitmap **)gmallocn(numInputSyms + numNewSyms, - sizeof(JBIG2Bitmap *)); - for (i = 0; i < numInputSyms + numNewSyms; ++i) { - bitmaps[i] = NULL; - } - k = 0; - inputSymbolDict = NULL; - for (i = 0; i < nRefSegs; ++i) { - seg = findSegment(refSegs[i]); - if (seg != NULL && seg->getType() == jbig2SegSymbolDict) { - inputSymbolDict = (JBIG2SymbolDict *)seg; - for (j = 0; j < inputSymbolDict->getSize(); ++j) { - bitmaps[k++] = inputSymbolDict->getBitmap(j); - } - } - } - - // get the Huffman tables - huffDHTable = huffDWTable = NULL; // make gcc happy - huffBMSizeTable = huffAggInstTable = NULL; // make gcc happy - i = 0; - if (huff) { - if (huffDH == 0) { - huffDHTable = huffTableD; - } else if (huffDH == 1) { - huffDHTable = huffTableE; - } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } - huffDHTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); - } - if (huffDW == 0) { - huffDWTable = huffTableB; - } else if (huffDW == 1) { - huffDWTable = huffTableC; - } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } - huffDWTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); - } - if (huffBMSize == 0) { - huffBMSizeTable = huffTableA; - } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } - huffBMSizeTable = - ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); - } - if (huffAggInst == 0) { - huffAggInstTable = huffTableA; - } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } - huffAggInstTable = - ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); - } - } - delete codeTables; - - // set up the Huffman decoder - if (huff) { - huffDecoder->reset(); - - // set up the arithmetic decoder - } else { - if (contextUsed && inputSymbolDict) { - resetGenericStats(sdTemplate, inputSymbolDict->getGenericRegionStats()); - } else { - resetGenericStats(sdTemplate, NULL); - } - resetIntStats(symCodeLen); - arithDecoder->start(); - } - - // set up the arithmetic decoder for refinement/aggregation - if (refAgg) { - if (contextUsed && inputSymbolDict) { - resetRefinementStats(sdrTemplate, - inputSymbolDict->getRefinementRegionStats()); - } else { - resetRefinementStats(sdrTemplate, NULL); - } - } - - // allocate symbol widths storage - if (huff && !refAgg) { - symWidths = (Guint *)gmallocn(numNewSyms, sizeof(Guint)); - } - - symHeight = 0; - i = 0; - while (i < numNewSyms) { - - // read the height class delta height - if (huff) { - huffDecoder->decodeInt(&dh, huffDHTable); - } else { - arithDecoder->decodeInt(&dh, iadhStats); - } - if (dh < 0 && (Guint)-dh >= symHeight) { - error(curStr->getPos(), "Bad delta-height value in JBIG2 symbol dictionary"); - goto syntaxError; - } - symHeight += dh; - symWidth = 0; - totalWidth = 0; - j = i; - - // read the symbols in this height class - while (1) { - - // read the delta width - if (huff) { - if (!huffDecoder->decodeInt(&dw, huffDWTable)) { - break; - } - } else { - if (!arithDecoder->decodeInt(&dw, iadwStats)) { - break; - } - } - if (dw < 0 && (Guint)-dw >= symWidth) { - error(curStr->getPos(), "Bad delta-height value in JBIG2 symbol dictionary"); - goto syntaxError; - } - symWidth += dw; - if (i >= numNewSyms) { - error(curStr->getPos(), "Too many symbols in JBIG2 symbol dictionary"); - goto syntaxError; - } - - // using a collective bitmap, so don't read a bitmap here - if (huff && !refAgg) { - symWidths[i] = symWidth; - totalWidth += symWidth; - - // refinement/aggregate coding - } else if (refAgg) { - if (huff) { - if (!huffDecoder->decodeInt(&refAggNum, huffAggInstTable)) { - break; - } - } else { - if (!arithDecoder->decodeInt(&refAggNum, iaaiStats)) { - break; - } - } -#if 0 //~ This special case was added about a year before the final draft - //~ of the JBIG2 spec was released. I have encountered some old - //~ JBIG2 images that predate it. - if (0) { -#else - if (refAggNum == 1) { -#endif - if (huff) { - symID = huffDecoder->readBits(symCodeLen); - huffDecoder->decodeInt(&refDX, huffTableO); - huffDecoder->decodeInt(&refDY, huffTableO); - huffDecoder->decodeInt(&bmSize, huffTableA); - huffDecoder->reset(); - arithDecoder->start(); - } else { - symID = arithDecoder->decodeIAID(symCodeLen, iaidStats); - arithDecoder->decodeInt(&refDX, iardxStats); - arithDecoder->decodeInt(&refDY, iardyStats); - } - if (symID >= numInputSyms + i) { - error(curStr->getPos(), "Invalid symbol ID in JBIG2 symbol dictionary"); - goto syntaxError; - } - refBitmap = bitmaps[symID]; - bitmaps[numInputSyms + i] = - readGenericRefinementRegion(symWidth, symHeight, - sdrTemplate, gFalse, - refBitmap, refDX, refDY, - sdrATX, sdrATY); - //~ do we need to use the bmSize value here (in Huffman mode)? - } else { - bitmaps[numInputSyms + i] = - readTextRegion(huff, gTrue, symWidth, symHeight, - refAggNum, 0, numInputSyms + i, NULL, - symCodeLen, bitmaps, 0, 0, 0, 1, 0, - huffTableF, huffTableH, huffTableK, huffTableO, - huffTableO, huffTableO, huffTableO, huffTableA, - sdrTemplate, sdrATX, sdrATY); - } - - // non-ref/agg coding - } else { - bitmaps[numInputSyms + i] = - readGenericBitmap(gFalse, symWidth, symHeight, - sdTemplate, gFalse, gFalse, NULL, - sdATX, sdATY, 0); - } - - ++i; - } - - // read the collective bitmap - if (huff && !refAgg) { - huffDecoder->decodeInt(&bmSize, huffBMSizeTable); - huffDecoder->reset(); - if (bmSize == 0) { - collBitmap = new JBIG2Bitmap(0, totalWidth, symHeight); - bmSize = symHeight * ((totalWidth + 7) >> 3); - p = collBitmap->getDataPtr(); - for (k = 0; k < (Guint)bmSize; ++k) { - *p++ = curStr->getChar(); - } - } else { - collBitmap = readGenericBitmap(gTrue, totalWidth, symHeight, - 0, gFalse, gFalse, NULL, NULL, NULL, - bmSize); - } - x = 0; - for (; j < i; ++j) { - bitmaps[numInputSyms + j] = - collBitmap->getSlice(x, 0, symWidths[j], symHeight); - x += symWidths[j]; - } - delete collBitmap; - } - } - - // create the symbol dict object - symbolDict = new JBIG2SymbolDict(segNum, numExSyms); - if (!symbolDict->isOk()) { - delete symbolDict; - goto syntaxError; - } - - // exported symbol list - i = j = 0; - ex = gFalse; - while (i < numInputSyms + numNewSyms) { - if (huff) { - huffDecoder->decodeInt(&run, huffTableA); - } else { - arithDecoder->decodeInt(&run, iaexStats); - } - if (i + run > numInputSyms + numNewSyms || - (ex && j + run > numExSyms)) { - error(curStr->getPos(), "Too many exported symbols in JBIG2 symbol dictionary"); - for ( ; j < numExSyms; ++j) symbolDict->setBitmap(j, NULL); - delete symbolDict; - goto syntaxError; - } - if (ex) { - for (cnt = 0; cnt < run; ++cnt) { - symbolDict->setBitmap(j++, bitmaps[i++]->copy()); - } - } else { - i += run; - } - ex = !ex; - } - if (j != numExSyms) { - error(curStr->getPos(), "Too few symbols in JBIG2 symbol dictionary"); - for ( ; j < numExSyms; ++j) symbolDict->setBitmap(j, NULL); - delete symbolDict; - goto syntaxError; - } - - for (i = 0; i < numNewSyms; ++i) { - delete bitmaps[numInputSyms + i]; - } - gfree(bitmaps); - if (symWidths) { - gfree(symWidths); - } - - // save the arithmetic decoder stats - if (!huff && contextRetained) { - symbolDict->setGenericRegionStats(genericRegionStats->copy()); - if (refAgg) { - symbolDict->setRefinementRegionStats(refinementRegionStats->copy()); - } - } - - // store the new symbol dict - segments->append(symbolDict); - - return gTrue; - - codeTableError: - error(curStr->getPos(), "Missing code table in JBIG2 symbol dictionary"); - delete codeTables; - - syntaxError: - for (i = 0; i < numNewSyms; ++i) { - if (bitmaps[numInputSyms + i]) { - delete bitmaps[numInputSyms + i]; - } - } - gfree(bitmaps); - if (symWidths) { - gfree(symWidths); - } - return gFalse; - - eofError: - error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); - return gFalse; -} - -void JBIG2Stream::readTextRegionSeg(Guint segNum, GBool imm, - GBool lossless, Guint length, - Guint *refSegs, Guint nRefSegs) { - JBIG2Bitmap *bitmap; - JBIG2HuffmanTable runLengthTab[36]; - JBIG2HuffmanTable *symCodeTab; - JBIG2HuffmanTable *huffFSTable, *huffDSTable, *huffDTTable; - JBIG2HuffmanTable *huffRDWTable, *huffRDHTable; - JBIG2HuffmanTable *huffRDXTable, *huffRDYTable, *huffRSizeTable; - JBIG2Segment *seg; - GooList *codeTables; - JBIG2SymbolDict *symbolDict; - JBIG2Bitmap **syms; - Guint w, h, x, y, segInfoFlags, extCombOp; - Guint flags, huff, refine, logStrips, refCorner, transposed; - Guint combOp, defPixel, templ; - int sOffset; - Guint huffFlags, huffFS, huffDS, huffDT; - Guint huffRDW, huffRDH, huffRDX, huffRDY, huffRSize; - Guint numInstances, numSyms, symCodeLen; - int atx[2], aty[2]; - Guint i, k, kk; - int j; - - // region segment info field - if (!readULong(&w) || !readULong(&h) || - !readULong(&x) || !readULong(&y) || - !readUByte(&segInfoFlags)) { - goto eofError; - } - extCombOp = segInfoFlags & 7; - - // rest of the text region header - if (!readUWord(&flags)) { - goto eofError; - } - huff = flags & 1; - refine = (flags >> 1) & 1; - logStrips = (flags >> 2) & 3; - refCorner = (flags >> 4) & 3; - transposed = (flags >> 6) & 1; - combOp = (flags >> 7) & 3; - defPixel = (flags >> 9) & 1; - sOffset = (flags >> 10) & 0x1f; - if (sOffset & 0x10) { - sOffset |= -1 - 0x0f; - } - templ = (flags >> 15) & 1; - huffFS = huffDS = huffDT = 0; // make gcc happy - huffRDW = huffRDH = huffRDX = huffRDY = huffRSize = 0; // make gcc happy - if (huff) { - if (!readUWord(&huffFlags)) { - goto eofError; - } - huffFS = huffFlags & 3; - huffDS = (huffFlags >> 2) & 3; - huffDT = (huffFlags >> 4) & 3; - huffRDW = (huffFlags >> 6) & 3; - huffRDH = (huffFlags >> 8) & 3; - huffRDX = (huffFlags >> 10) & 3; - huffRDY = (huffFlags >> 12) & 3; - huffRSize = (huffFlags >> 14) & 1; - } - if (refine && templ == 0) { - if (!readByte(&atx[0]) || !readByte(&aty[0]) || - !readByte(&atx[1]) || !readByte(&aty[1])) { - goto eofError; - } - } - if (!readULong(&numInstances)) { - goto eofError; - } - - // get symbol dictionaries and tables - codeTables = new GooList(); - numSyms = 0; - for (i = 0; i < nRefSegs; ++i) { - if ((seg = findSegment(refSegs[i]))) { - if (seg->getType() == jbig2SegSymbolDict) { - numSyms += ((JBIG2SymbolDict *)seg)->getSize(); - } else if (seg->getType() == jbig2SegCodeTable) { - codeTables->append(seg); - } - } else { - error(curStr->getPos(), "Invalid segment reference in JBIG2 text region"); - delete codeTables; - return; - } - } - symCodeLen = 0; - i = 1; - while (i < numSyms) { - ++symCodeLen; - i <<= 1; - } - - // get the symbol bitmaps - syms = (JBIG2Bitmap **)gmallocn(numSyms, sizeof(JBIG2Bitmap *)); - kk = 0; - for (i = 0; i < nRefSegs; ++i) { - if ((seg = findSegment(refSegs[i]))) { - if (seg->getType() == jbig2SegSymbolDict) { - symbolDict = (JBIG2SymbolDict *)seg; - for (k = 0; k < symbolDict->getSize(); ++k) { - syms[kk++] = symbolDict->getBitmap(k); - } - } - } - } - - // get the Huffman tables - huffFSTable = huffDSTable = huffDTTable = NULL; // make gcc happy - huffRDWTable = huffRDHTable = NULL; // make gcc happy - huffRDXTable = huffRDYTable = huffRSizeTable = NULL; // make gcc happy - i = 0; - if (huff) { - if (huffFS == 0) { - huffFSTable = huffTableF; - } else if (huffFS == 1) { - huffFSTable = huffTableG; - } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } - huffFSTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); - } - if (huffDS == 0) { - huffDSTable = huffTableH; - } else if (huffDS == 1) { - huffDSTable = huffTableI; - } else if (huffDS == 2) { - huffDSTable = huffTableJ; - } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } - huffDSTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); - } - if (huffDT == 0) { - huffDTTable = huffTableK; - } else if (huffDT == 1) { - huffDTTable = huffTableL; - } else if (huffDT == 2) { - huffDTTable = huffTableM; - } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } - huffDTTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); - } - if (huffRDW == 0) { - huffRDWTable = huffTableN; - } else if (huffRDW == 1) { - huffRDWTable = huffTableO; - } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } - huffRDWTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); - } - if (huffRDH == 0) { - huffRDHTable = huffTableN; - } else if (huffRDH == 1) { - huffRDHTable = huffTableO; - } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } - huffRDHTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); - } - if (huffRDX == 0) { - huffRDXTable = huffTableN; - } else if (huffRDX == 1) { - huffRDXTable = huffTableO; - } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } - huffRDXTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); - } - if (huffRDY == 0) { - huffRDYTable = huffTableN; - } else if (huffRDY == 1) { - huffRDYTable = huffTableO; - } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } - huffRDYTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); - } - if (huffRSize == 0) { - huffRSizeTable = huffTableA; - } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } - huffRSizeTable = - ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); - } - } - delete codeTables; - - // symbol ID Huffman decoding table - if (huff) { - huffDecoder->reset(); - for (i = 0; i < 32; ++i) { - runLengthTab[i].val = i; - runLengthTab[i].prefixLen = huffDecoder->readBits(4); - runLengthTab[i].rangeLen = 0; - } - runLengthTab[32].val = 0x103; - runLengthTab[32].prefixLen = huffDecoder->readBits(4); - runLengthTab[32].rangeLen = 2; - runLengthTab[33].val = 0x203; - runLengthTab[33].prefixLen = huffDecoder->readBits(4); - runLengthTab[33].rangeLen = 3; - runLengthTab[34].val = 0x20b; - runLengthTab[34].prefixLen = huffDecoder->readBits(4); - runLengthTab[34].rangeLen = 7; - runLengthTab[35].prefixLen = 0; - runLengthTab[35].rangeLen = jbig2HuffmanEOT; - huffDecoder->buildTable(runLengthTab, 35); - symCodeTab = (JBIG2HuffmanTable *)gmallocn(numSyms + 1, - sizeof(JBIG2HuffmanTable)); - for (i = 0; i < numSyms; ++i) { - symCodeTab[i].val = i; - symCodeTab[i].rangeLen = 0; - } - i = 0; - while (i < numSyms) { - huffDecoder->decodeInt(&j, runLengthTab); - if (j > 0x200) { - for (j -= 0x200; j && i < numSyms; --j) { - symCodeTab[i++].prefixLen = 0; - } - } else if (j > 0x100) { - for (j -= 0x100; j && i < numSyms; --j) { - symCodeTab[i].prefixLen = symCodeTab[i-1].prefixLen; - ++i; - } - } else { - symCodeTab[i++].prefixLen = j; - } - } - symCodeTab[numSyms].prefixLen = 0; - symCodeTab[numSyms].rangeLen = jbig2HuffmanEOT; - huffDecoder->buildTable(symCodeTab, numSyms); - huffDecoder->reset(); - - // set up the arithmetic decoder - } else { - symCodeTab = NULL; - resetIntStats(symCodeLen); - arithDecoder->start(); - } - if (refine) { - resetRefinementStats(templ, NULL); - } - - bitmap = readTextRegion(huff, refine, w, h, numInstances, - logStrips, numSyms, symCodeTab, symCodeLen, syms, - defPixel, combOp, transposed, refCorner, sOffset, - huffFSTable, huffDSTable, huffDTTable, - huffRDWTable, huffRDHTable, - huffRDXTable, huffRDYTable, huffRSizeTable, - templ, atx, aty); - - gfree(syms); - - if (bitmap) { - // combine the region bitmap into the page bitmap - if (imm) { - if (pageH == 0xffffffff && y + h > curPageH) { - pageBitmap->expand(y + h, pageDefPixel); - } - pageBitmap->combine(bitmap, x, y, extCombOp); - delete bitmap; - - // store the region bitmap - } else { - bitmap->setSegNum(segNum); - segments->append(bitmap); - } - } - - // clean up the Huffman decoder - if (huff) { - gfree(symCodeTab); - } - - return; - - codeTableError: - error(curStr->getPos(), "Missing code table in JBIG2 text region"); - gfree(codeTables); - delete syms; - return; - - eofError: - error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); - return; -} - -JBIG2Bitmap *JBIG2Stream::readTextRegion(GBool huff, GBool refine, - int w, int h, - Guint numInstances, - Guint logStrips, - int numSyms, - JBIG2HuffmanTable *symCodeTab, - Guint symCodeLen, - JBIG2Bitmap **syms, - Guint defPixel, Guint combOp, - Guint transposed, Guint refCorner, - int sOffset, - JBIG2HuffmanTable *huffFSTable, - JBIG2HuffmanTable *huffDSTable, - JBIG2HuffmanTable *huffDTTable, - JBIG2HuffmanTable *huffRDWTable, - JBIG2HuffmanTable *huffRDHTable, - JBIG2HuffmanTable *huffRDXTable, - JBIG2HuffmanTable *huffRDYTable, - JBIG2HuffmanTable *huffRSizeTable, - Guint templ, - int *atx, int *aty) { - JBIG2Bitmap *bitmap; - JBIG2Bitmap *symbolBitmap; - Guint strips; - int t, dt, tt, s, ds, sFirst, j; - int rdw, rdh, rdx, rdy, ri, refDX, refDY, bmSize; - Guint symID, inst, bw, bh; - - strips = 1 << logStrips; - - // allocate the bitmap - bitmap = new JBIG2Bitmap(0, w, h); - if (!bitmap->isOk()) { - delete bitmap; - return NULL; - } - if (defPixel) { - bitmap->clearToOne(); - } else { - bitmap->clearToZero(); - } - - // decode initial T value - if (huff) { - huffDecoder->decodeInt(&t, huffDTTable); - } else { - arithDecoder->decodeInt(&t, iadtStats); - } - t *= -(int)strips; - - inst = 0; - sFirst = 0; - while (inst < numInstances) { - - // decode delta-T - if (huff) { - huffDecoder->decodeInt(&dt, huffDTTable); - } else { - arithDecoder->decodeInt(&dt, iadtStats); - } - t += dt * strips; - - // first S value - if (huff) { - huffDecoder->decodeInt(&ds, huffFSTable); - } else { - arithDecoder->decodeInt(&ds, iafsStats); - } - sFirst += ds; - s = sFirst; - - // read the instances - while (inst < numInstances) { - - // T value - if (strips == 1) { - dt = 0; - } else if (huff) { - dt = huffDecoder->readBits(logStrips); - } else { - arithDecoder->decodeInt(&dt, iaitStats); - } - tt = t + dt; - - // symbol ID - if (huff) { - if (symCodeTab) { - huffDecoder->decodeInt(&j, symCodeTab); - symID = (Guint)j; - } else { - symID = huffDecoder->readBits(symCodeLen); - } - } else { - symID = arithDecoder->decodeIAID(symCodeLen, iaidStats); - } - - if (symID >= (Guint)numSyms) { - error(curStr->getPos(), "Invalid symbol number in JBIG2 text region"); - } else { - - // get the symbol bitmap - symbolBitmap = NULL; - if (refine) { - if (huff) { - ri = (int)huffDecoder->readBit(); - } else { - arithDecoder->decodeInt(&ri, iariStats); - } - } else { - ri = 0; - } - if (ri) { - GBool decodeSuccess; - if (huff) { - decodeSuccess = huffDecoder->decodeInt(&rdw, huffRDWTable); - decodeSuccess = decodeSuccess && huffDecoder->decodeInt(&rdh, huffRDHTable); - decodeSuccess = decodeSuccess && huffDecoder->decodeInt(&rdx, huffRDXTable); - decodeSuccess = decodeSuccess && huffDecoder->decodeInt(&rdy, huffRDYTable); - decodeSuccess = decodeSuccess && huffDecoder->decodeInt(&bmSize, huffRSizeTable); - huffDecoder->reset(); - arithDecoder->start(); - } else { - decodeSuccess = arithDecoder->decodeInt(&rdw, iardwStats); - decodeSuccess = decodeSuccess && arithDecoder->decodeInt(&rdh, iardhStats); - decodeSuccess = decodeSuccess && arithDecoder->decodeInt(&rdx, iardxStats); - decodeSuccess = decodeSuccess && arithDecoder->decodeInt(&rdy, iardyStats); - } - - if (decodeSuccess && syms[symID]) - { - refDX = ((rdw >= 0) ? rdw : rdw - 1) / 2 + rdx; - refDY = ((rdh >= 0) ? rdh : rdh - 1) / 2 + rdy; - - symbolBitmap = - readGenericRefinementRegion(rdw + syms[symID]->getWidth(), - rdh + syms[symID]->getHeight(), - templ, gFalse, syms[symID], - refDX, refDY, atx, aty); - } - //~ do we need to use the bmSize value here (in Huffman mode)? - } else { - symbolBitmap = syms[symID]; - } - - if (symbolBitmap) { - // combine the symbol bitmap into the region bitmap - //~ something is wrong here - refCorner shouldn't degenerate into - //~ two cases - bw = symbolBitmap->getWidth() - 1; - bh = symbolBitmap->getHeight() - 1; - if (transposed) { - switch (refCorner) { - case 0: // bottom left - bitmap->combine(symbolBitmap, tt, s, combOp); - break; - case 1: // top left - bitmap->combine(symbolBitmap, tt, s, combOp); - break; - case 2: // bottom right - bitmap->combine(symbolBitmap, tt - bw, s, combOp); - break; - case 3: // top right - bitmap->combine(symbolBitmap, tt - bw, s, combOp); - break; - } - s += bh; - } else { - switch (refCorner) { - case 0: // bottom left - bitmap->combine(symbolBitmap, s, tt - bh, combOp); - break; - case 1: // top left - bitmap->combine(symbolBitmap, s, tt, combOp); - break; - case 2: // bottom right - bitmap->combine(symbolBitmap, s, tt - bh, combOp); - break; - case 3: // top right - bitmap->combine(symbolBitmap, s, tt, combOp); - break; - } - s += bw; - } - if (ri) { - delete symbolBitmap; - } - } else { - // NULL symbolBitmap only happens on error - delete bitmap; - return NULL; - } - } - - // next instance - ++inst; - - // next S value - if (huff) { - if (!huffDecoder->decodeInt(&ds, huffDSTable)) { - break; - } - } else { - if (!arithDecoder->decodeInt(&ds, iadsStats)) { - break; - } - } - s += sOffset + ds; - } - } - - return bitmap; -} - -void JBIG2Stream::readPatternDictSeg(Guint segNum, Guint length) { - JBIG2PatternDict *patternDict; - JBIG2Bitmap *bitmap; - Guint flags, patternW, patternH, grayMax, templ, mmr; - int atx[4], aty[4]; - Guint i, x; - - // halftone dictionary flags, pattern width and height, max gray value - if (!readUByte(&flags) || - !readUByte(&patternW) || - !readUByte(&patternH) || - !readULong(&grayMax)) { - goto eofError; - } - templ = (flags >> 1) & 3; - mmr = flags & 1; - - // set up the arithmetic decoder - if (!mmr) { - resetGenericStats(templ, NULL); - arithDecoder->start(); - } - - // read the bitmap - atx[0] = -(int)patternW; aty[0] = 0; - atx[1] = -3; aty[1] = -1; - atx[2] = 2; aty[2] = -2; - atx[3] = -2; aty[3] = -2; - bitmap = readGenericBitmap(mmr, (grayMax + 1) * patternW, patternH, - templ, gFalse, gFalse, NULL, - atx, aty, length - 7); - - if (!bitmap) - return; - - // create the pattern dict object - patternDict = new JBIG2PatternDict(segNum, grayMax + 1); - - // split up the bitmap - x = 0; - for (i = 0; i <= grayMax; ++i) { - patternDict->setBitmap(i, bitmap->getSlice(x, 0, patternW, patternH)); - x += patternW; - } - - // free memory - delete bitmap; - - // store the new pattern dict - segments->append(patternDict); - - return; - - eofError: - error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); -} - -void JBIG2Stream::readHalftoneRegionSeg(Guint segNum, GBool imm, - GBool lossless, Guint length, - Guint *refSegs, Guint nRefSegs) { - JBIG2Bitmap *bitmap; - JBIG2Segment *seg; - JBIG2PatternDict *patternDict; - JBIG2Bitmap *skipBitmap; - Guint *grayImg; - JBIG2Bitmap *grayBitmap; - JBIG2Bitmap *patternBitmap; - Guint w, h, x, y, segInfoFlags, extCombOp; - Guint flags, mmr, templ, enableSkip, combOp; - Guint gridW, gridH, stepX, stepY, patW, patH; - int atx[4], aty[4]; - int gridX, gridY, xx, yy, bit, j; - Guint bpp, m, n, i; - - // region segment info field - if (!readULong(&w) || !readULong(&h) || - !readULong(&x) || !readULong(&y) || - !readUByte(&segInfoFlags)) { - goto eofError; - } - extCombOp = segInfoFlags & 7; - - // rest of the halftone region header - if (!readUByte(&flags)) { - goto eofError; - } - mmr = flags & 1; - templ = (flags >> 1) & 3; - enableSkip = (flags >> 3) & 1; - combOp = (flags >> 4) & 7; - if (!readULong(&gridW) || !readULong(&gridH) || - !readLong(&gridX) || !readLong(&gridY) || - !readUWord(&stepX) || !readUWord(&stepY)) { - goto eofError; - } - if (w == 0 || h == 0 || w >= INT_MAX / h) { - error(curStr->getPos(), "Bad bitmap size in JBIG2 halftone segment"); - return; - } - if (gridH == 0 || gridW >= INT_MAX / gridH) { - error(curStr->getPos(), "Bad grid size in JBIG2 halftone segment"); - return; - } - - // get pattern dictionary - if (nRefSegs != 1) { - error(curStr->getPos(), "Bad symbol dictionary reference in JBIG2 halftone segment"); - return; - } - seg = findSegment(refSegs[0]); - if (seg == NULL || seg->getType() != jbig2SegPatternDict) { - error(curStr->getPos(), "Bad symbol dictionary reference in JBIG2 halftone segment"); - return; - } - - patternDict = (JBIG2PatternDict *)seg; - bpp = 0; - i = 1; - while (i < patternDict->getSize()) { - ++bpp; - i <<= 1; - } - patW = patternDict->getBitmap(0)->getWidth(); - patH = patternDict->getBitmap(0)->getHeight(); - - // set up the arithmetic decoder - if (!mmr) { - resetGenericStats(templ, NULL); - arithDecoder->start(); - } - - // allocate the bitmap - bitmap = new JBIG2Bitmap(segNum, w, h); - if (flags & 0x80) { // HDEFPIXEL - bitmap->clearToOne(); - } else { - bitmap->clearToZero(); - } - - // compute the skip bitmap - skipBitmap = NULL; - if (enableSkip) { - skipBitmap = new JBIG2Bitmap(0, gridW, gridH); - skipBitmap->clearToZero(); - for (m = 0; m < gridH; ++m) { - for (n = 0; n < gridW; ++n) { - xx = gridX + m * stepY + n * stepX; - yy = gridY + m * stepX - n * stepY; - if (((xx + (int)patW) >> 8) <= 0 || (xx >> 8) >= (int)w || - ((yy + (int)patH) >> 8) <= 0 || (yy >> 8) >= (int)h) { - skipBitmap->setPixel(n, m); - } - } - } - } - - // read the gray-scale image - grayImg = (Guint *)gmallocn(gridW * gridH, sizeof(Guint)); - memset(grayImg, 0, gridW * gridH * sizeof(Guint)); - atx[0] = templ <= 1 ? 3 : 2; aty[0] = -1; - atx[1] = -3; aty[1] = -1; - atx[2] = 2; aty[2] = -2; - atx[3] = -2; aty[3] = -2; - for (j = bpp - 1; j >= 0; --j) { - grayBitmap = readGenericBitmap(mmr, gridW, gridH, templ, gFalse, - enableSkip, skipBitmap, atx, aty, -1); - i = 0; - for (m = 0; m < gridH; ++m) { - for (n = 0; n < gridW; ++n) { - bit = grayBitmap->getPixel(n, m) ^ (grayImg[i] & 1); - grayImg[i] = (grayImg[i] << 1) | bit; - ++i; - } - } - delete grayBitmap; - } - - // decode the image - i = 0; - for (m = 0; m < gridH; ++m) { - xx = gridX + m * stepY; - yy = gridY + m * stepX; - for (n = 0; n < gridW; ++n) { - if (!(enableSkip && skipBitmap->getPixel(n, m))) { - patternBitmap = patternDict->getBitmap(grayImg[i]); - bitmap->combine(patternBitmap, xx >> 8, yy >> 8, combOp); - } - xx += stepX; - yy -= stepY; - ++i; - } - } - - gfree(grayImg); - if (skipBitmap) { - delete skipBitmap; - } - - // combine the region bitmap into the page bitmap - if (imm) { - if (pageH == 0xffffffff && y + h > curPageH) { - pageBitmap->expand(y + h, pageDefPixel); - } - pageBitmap->combine(bitmap, x, y, extCombOp); - delete bitmap; - - // store the region bitmap - } else { - segments->append(bitmap); - } - - return; - - eofError: - error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); -} - -void JBIG2Stream::readGenericRegionSeg(Guint segNum, GBool imm, - GBool lossless, Guint length) { - JBIG2Bitmap *bitmap; - Guint w, h, x, y, segInfoFlags, extCombOp; - Guint flags, mmr, templ, tpgdOn; - int atx[4], aty[4]; - - // region segment info field - if (!readULong(&w) || !readULong(&h) || - !readULong(&x) || !readULong(&y) || - !readUByte(&segInfoFlags)) { - goto eofError; - } - extCombOp = segInfoFlags & 7; - - // rest of the generic region segment header - if (!readUByte(&flags)) { - goto eofError; - } - mmr = flags & 1; - templ = (flags >> 1) & 3; - tpgdOn = (flags >> 3) & 1; - - // AT flags - if (!mmr) { - if (templ == 0) { - if (!readByte(&atx[0]) || - !readByte(&aty[0]) || - !readByte(&atx[1]) || - !readByte(&aty[1]) || - !readByte(&atx[2]) || - !readByte(&aty[2]) || - !readByte(&atx[3]) || - !readByte(&aty[3])) { - goto eofError; - } - } else { - if (!readByte(&atx[0]) || - !readByte(&aty[0])) { - goto eofError; - } - } - } - - // set up the arithmetic decoder - if (!mmr) { - resetGenericStats(templ, NULL); - arithDecoder->start(); - } - - // read the bitmap - bitmap = readGenericBitmap(mmr, w, h, templ, tpgdOn, gFalse, - NULL, atx, aty, mmr ? length - 18 : 0); - if (!bitmap) - return; - - // combine the region bitmap into the page bitmap - if (imm) { - if (pageH == 0xffffffff && y + h > curPageH) { - pageBitmap->expand(y + h, pageDefPixel); - } - pageBitmap->combine(bitmap, x, y, extCombOp); - delete bitmap; - - // store the region bitmap - } else { - bitmap->setSegNum(segNum); - segments->append(bitmap); - } - - return; - - eofError: - error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); -} - -inline void JBIG2Stream::mmrAddPixels(int a1, int blackPixels, - int *codingLine, int *a0i, int w) { - if (a1 > codingLine[*a0i]) { - if (a1 > w) { - error(curStr->getPos(), "JBIG2 MMR row is wrong length (%d)", a1); - a1 = w; - } - if ((*a0i & 1) ^ blackPixels) { - ++*a0i; - } - codingLine[*a0i] = a1; - } -} - -inline void JBIG2Stream::mmrAddPixelsNeg(int a1, int blackPixels, - int *codingLine, int *a0i, int w) { - if (a1 > codingLine[*a0i]) { - if (a1 > w) { - error(curStr->getPos(), "JBIG2 MMR row is wrong length (%d)", a1); - a1 = w; - } - if ((*a0i & 1) ^ blackPixels) { - ++*a0i; - } - codingLine[*a0i] = a1; - } else if (a1 < codingLine[*a0i]) { - if (a1 < 0) { - error(curStr->getPos(), "Invalid JBIG2 MMR code"); - a1 = 0; - } - while (*a0i > 0 && a1 <= codingLine[*a0i - 1]) { - --*a0i; - } - codingLine[*a0i] = a1; - } -} - -JBIG2Bitmap *JBIG2Stream::readGenericBitmap(GBool mmr, int w, int h, - int templ, GBool tpgdOn, - GBool useSkip, JBIG2Bitmap *skip, - int *atx, int *aty, - int mmrDataLength) { - JBIG2Bitmap *bitmap; - GBool ltp; - Guint ltpCX, cx, cx0, cx1, cx2; - JBIG2BitmapPtr cxPtr0 = {0}, cxPtr1 = {0}; - JBIG2BitmapPtr atPtr0 = {0}, atPtr1 = {0}, atPtr2 = {0}, atPtr3 = {0}; - int *refLine, *codingLine; - int code1, code2, code3; - int x, y, a0i, b1i, blackPixels, pix, i; - - bitmap = new JBIG2Bitmap(0, w, h); - if (!bitmap->isOk()) { - delete bitmap; - return NULL; - } - bitmap->clearToZero(); - - //----- MMR decode - - if (mmr) { - - mmrDecoder->reset(); - if (w > INT_MAX - 2) { - error(curStr->getPos(), "Bad width in JBIG2 generic bitmap"); - // force a call to gmalloc(-1), which will throw an exception - w = -3; - } - // 0 <= codingLine[0] < codingLine[1] < ... < codingLine[n] = w - // ---> max codingLine size = w + 1 - // refLine has one extra guard entry at the end - // ---> max refLine size = w + 2 - codingLine = (int *)gmallocn(w + 1, sizeof(int)); - refLine = (int *)gmallocn(w + 2, sizeof(int)); - for (i = 0; i < w + 1; ++i) codingLine[i] = w; - - for (y = 0; y < h; ++y) { - - // copy coding line to ref line - for (i = 0; codingLine[i] < w; ++i) { - refLine[i] = codingLine[i]; - } - refLine[i++] = w; - refLine[i] = w; - - // decode a line - codingLine[0] = 0; - a0i = 0; - b1i = 0; - blackPixels = 0; - // invariant: - // refLine[b1i-1] <= codingLine[a0i] < refLine[b1i] < refLine[b1i+1] <= w - // exception at left edge: - // codingLine[a0i = 0] = refLine[b1i = 0] = 0 is possible - // exception at right edge: - // refLine[b1i] = refLine[b1i+1] = w is possible - while (codingLine[a0i] < w) { - code1 = mmrDecoder->get2DCode(); - switch (code1) { - case twoDimPass: - mmrAddPixels(refLine[b1i + 1], blackPixels, codingLine, &a0i, w); - if (refLine[b1i + 1] < w) { - b1i += 2; - } - break; - case twoDimHoriz: - code1 = code2 = 0; - if (blackPixels) { - do { - code1 += code3 = mmrDecoder->getBlackCode(); - } while (code3 >= 64); - do { - code2 += code3 = mmrDecoder->getWhiteCode(); - } while (code3 >= 64); - } else { - do { - code1 += code3 = mmrDecoder->getWhiteCode(); - } while (code3 >= 64); - do { - code2 += code3 = mmrDecoder->getBlackCode(); - } while (code3 >= 64); - } - mmrAddPixels(codingLine[a0i] + code1, blackPixels, - codingLine, &a0i, w); - if (codingLine[a0i] < w) { - mmrAddPixels(codingLine[a0i] + code2, blackPixels ^ 1, - codingLine, &a0i, w); - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - break; - case twoDimVertR3: - mmrAddPixels(refLine[b1i] + 3, blackPixels, codingLine, &a0i, w); - blackPixels ^= 1; - if (codingLine[a0i] < w) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - } - break; - case twoDimVertR2: - mmrAddPixels(refLine[b1i] + 2, blackPixels, codingLine, &a0i, w); - blackPixels ^= 1; - if (codingLine[a0i] < w) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - } - break; - case twoDimVertR1: - mmrAddPixels(refLine[b1i] + 1, blackPixels, codingLine, &a0i, w); - blackPixels ^= 1; - if (codingLine[a0i] < w) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - } - break; - case twoDimVert0: - mmrAddPixels(refLine[b1i], blackPixels, codingLine, &a0i, w); - blackPixels ^= 1; - if (codingLine[a0i] < w) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - } - break; - case twoDimVertL3: - mmrAddPixelsNeg(refLine[b1i] - 3, blackPixels, codingLine, &a0i, w); - blackPixels ^= 1; - if (codingLine[a0i] < w) { - if (b1i > 0) { - --b1i; - } else { - ++b1i; - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - } - break; - case twoDimVertL2: - mmrAddPixelsNeg(refLine[b1i] - 2, blackPixels, codingLine, &a0i, w); - blackPixels ^= 1; - if (codingLine[a0i] < w) { - if (b1i > 0) { - --b1i; - } else { - ++b1i; - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - } - break; - case twoDimVertL1: - mmrAddPixelsNeg(refLine[b1i] - 1, blackPixels, codingLine, &a0i, w); - blackPixels ^= 1; - if (codingLine[a0i] < w) { - if (b1i > 0) { - --b1i; - } else { - ++b1i; - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - } - break; - case EOF: - mmrAddPixels(w, 0, codingLine, &a0i, w); - break; - default: - error(curStr->getPos(), "Illegal code in JBIG2 MMR bitmap data"); - mmrAddPixels(w, 0, codingLine, &a0i, w); - break; - } - } - - // convert the run lengths to a bitmap line - i = 0; - while (1) { - for (x = codingLine[i]; x < codingLine[i+1]; ++x) { - bitmap->setPixel(x, y); - } - if (codingLine[i+1] >= w || codingLine[i+2] >= w) { - break; - } - i += 2; - } - } - - if (mmrDataLength >= 0) { - mmrDecoder->skipTo(mmrDataLength); - } else { - if (mmrDecoder->get24Bits() != 0x001001) { - error(curStr->getPos(), "Missing EOFB in JBIG2 MMR bitmap data"); - } - } - - gfree(refLine); - gfree(codingLine); - - //----- arithmetic decode - - } else { - // set up the typical row context - ltpCX = 0; // make gcc happy - if (tpgdOn) { - switch (templ) { - case 0: - ltpCX = 0x3953; // 001 11001 0101 0011 - break; - case 1: - ltpCX = 0x079a; // 0011 11001 101 0 - break; - case 2: - ltpCX = 0x0e3; // 001 1100 01 1 - break; - case 3: - ltpCX = 0x18a; // 01100 0101 1 - break; - } - } - - ltp = 0; - cx = cx0 = cx1 = cx2 = 0; // make gcc happy - for (y = 0; y < h; ++y) { - - // check for a "typical" (duplicate) row - if (tpgdOn) { - if (arithDecoder->decodeBit(ltpCX, genericRegionStats)) { - ltp = !ltp; - } - if (ltp) { - if (y > 0) { - bitmap->duplicateRow(y, y-1); - } - continue; - } - } - - switch (templ) { - case 0: - - // set up the context - bitmap->getPixelPtr(0, y-2, &cxPtr0); - cx0 = bitmap->nextPixel(&cxPtr0); - cx0 = (cx0 << 1) | bitmap->nextPixel(&cxPtr0); - bitmap->getPixelPtr(0, y-1, &cxPtr1); - cx1 = bitmap->nextPixel(&cxPtr1); - cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1); - cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1); - cx2 = 0; - bitmap->getPixelPtr(atx[0], y + aty[0], &atPtr0); - bitmap->getPixelPtr(atx[1], y + aty[1], &atPtr1); - bitmap->getPixelPtr(atx[2], y + aty[2], &atPtr2); - bitmap->getPixelPtr(atx[3], y + aty[3], &atPtr3); - - // decode the row - for (x = 0; x < w; ++x) { - - // build the context - cx = (cx0 << 13) | (cx1 << 8) | (cx2 << 4) | - (bitmap->nextPixel(&atPtr0) << 3) | - (bitmap->nextPixel(&atPtr1) << 2) | - (bitmap->nextPixel(&atPtr2) << 1) | - bitmap->nextPixel(&atPtr3); - - // check for a skipped pixel - if (useSkip && skip->getPixel(x, y)) { - pix = 0; - - // decode the pixel - } else if ((pix = arithDecoder->decodeBit(cx, genericRegionStats))) { - bitmap->setPixel(x, y); - } - - // update the context - cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 0x07; - cx1 = ((cx1 << 1) | bitmap->nextPixel(&cxPtr1)) & 0x1f; - cx2 = ((cx2 << 1) | pix) & 0x0f; - } - break; - - case 1: - - // set up the context - bitmap->getPixelPtr(0, y-2, &cxPtr0); - cx0 = bitmap->nextPixel(&cxPtr0); - cx0 = (cx0 << 1) | bitmap->nextPixel(&cxPtr0); - cx0 = (cx0 << 1) | bitmap->nextPixel(&cxPtr0); - bitmap->getPixelPtr(0, y-1, &cxPtr1); - cx1 = bitmap->nextPixel(&cxPtr1); - cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1); - cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1); - cx2 = 0; - bitmap->getPixelPtr(atx[0], y + aty[0], &atPtr0); - - // decode the row - for (x = 0; x < w; ++x) { - - // build the context - cx = (cx0 << 9) | (cx1 << 4) | (cx2 << 1) | - bitmap->nextPixel(&atPtr0); - - // check for a skipped pixel - if (useSkip && skip->getPixel(x, y)) { - pix = 0; - - // decode the pixel - } else if ((pix = arithDecoder->decodeBit(cx, genericRegionStats))) { - bitmap->setPixel(x, y); - } - - // update the context - cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 0x0f; - cx1 = ((cx1 << 1) | bitmap->nextPixel(&cxPtr1)) & 0x1f; - cx2 = ((cx2 << 1) | pix) & 0x07; - } - break; - - case 2: - - // set up the context - bitmap->getPixelPtr(0, y-2, &cxPtr0); - cx0 = bitmap->nextPixel(&cxPtr0); - cx0 = (cx0 << 1) | bitmap->nextPixel(&cxPtr0); - bitmap->getPixelPtr(0, y-1, &cxPtr1); - cx1 = bitmap->nextPixel(&cxPtr1); - cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1); - cx2 = 0; - bitmap->getPixelPtr(atx[0], y + aty[0], &atPtr0); - - // decode the row - for (x = 0; x < w; ++x) { - - // build the context - cx = (cx0 << 7) | (cx1 << 3) | (cx2 << 1) | - bitmap->nextPixel(&atPtr0); - - // check for a skipped pixel - if (useSkip && skip->getPixel(x, y)) { - pix = 0; - - // decode the pixel - } else if ((pix = arithDecoder->decodeBit(cx, genericRegionStats))) { - bitmap->setPixel(x, y); - } - - // update the context - cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 0x07; - cx1 = ((cx1 << 1) | bitmap->nextPixel(&cxPtr1)) & 0x0f; - cx2 = ((cx2 << 1) | pix) & 0x03; - } - break; - - case 3: - - // set up the context - bitmap->getPixelPtr(0, y-1, &cxPtr1); - cx1 = bitmap->nextPixel(&cxPtr1); - cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1); - cx2 = 0; - bitmap->getPixelPtr(atx[0], y + aty[0], &atPtr0); - - // decode the row - for (x = 0; x < w; ++x) { - - // build the context - cx = (cx1 << 5) | (cx2 << 1) | - bitmap->nextPixel(&atPtr0); - - // check for a skipped pixel - if (useSkip && skip->getPixel(x, y)) { - pix = 0; - - // decode the pixel - } else if ((pix = arithDecoder->decodeBit(cx, genericRegionStats))) { - bitmap->setPixel(x, y); - } - - // update the context - cx1 = ((cx1 << 1) | bitmap->nextPixel(&cxPtr1)) & 0x1f; - cx2 = ((cx2 << 1) | pix) & 0x0f; - } - break; - } - } - } - - return bitmap; -} - -void JBIG2Stream::readGenericRefinementRegionSeg(Guint segNum, GBool imm, - GBool lossless, Guint length, - Guint *refSegs, - Guint nRefSegs) { - JBIG2Bitmap *bitmap, *refBitmap; - Guint w, h, x, y, segInfoFlags, extCombOp; - Guint flags, templ, tpgrOn; - int atx[2], aty[2]; - JBIG2Segment *seg; - - // region segment info field - if (!readULong(&w) || !readULong(&h) || - !readULong(&x) || !readULong(&y) || - !readUByte(&segInfoFlags)) { - goto eofError; - } - extCombOp = segInfoFlags & 7; - - // rest of the generic refinement region segment header - if (!readUByte(&flags)) { - goto eofError; - } - templ = flags & 1; - tpgrOn = (flags >> 1) & 1; - - // AT flags - if (!templ) { - if (!readByte(&atx[0]) || !readByte(&aty[0]) || - !readByte(&atx[1]) || !readByte(&aty[1])) { - goto eofError; - } - } - - // resize the page bitmap if needed - if (nRefSegs == 0 || imm) { - if (pageH == 0xffffffff && y + h > curPageH) { - pageBitmap->expand(y + h, pageDefPixel); - } - } - - // get referenced bitmap - if (nRefSegs > 1) { - error(curStr->getPos(), "Bad reference in JBIG2 generic refinement segment"); - return; - } - if (nRefSegs == 1) { - seg = findSegment(refSegs[0]); - if (seg == NULL || seg->getType() != jbig2SegBitmap) { - error(curStr->getPos(), "Bad bitmap reference in JBIG2 generic refinement segment"); - return; - } - refBitmap = (JBIG2Bitmap *)seg; - } else { - refBitmap = pageBitmap->getSlice(x, y, w, h); - } - - // set up the arithmetic decoder - resetRefinementStats(templ, NULL); - arithDecoder->start(); - - // read - bitmap = readGenericRefinementRegion(w, h, templ, tpgrOn, - refBitmap, 0, 0, atx, aty); - - // combine the region bitmap into the page bitmap - if (imm) { - pageBitmap->combine(bitmap, x, y, extCombOp); - delete bitmap; - - // store the region bitmap - } else { - if (bitmap) { - bitmap->setSegNum(segNum); - segments->append(bitmap); - } else { - error(curStr->getPos(), "readGenericRefinementRegionSeg with null bitmap"); - } - } - - // delete the referenced bitmap - if (nRefSegs == 1) { - discardSegment(refSegs[0]); - } else { - delete refBitmap; - } - - return; - - eofError: - error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); -} - -JBIG2Bitmap *JBIG2Stream::readGenericRefinementRegion(int w, int h, - int templ, GBool tpgrOn, - JBIG2Bitmap *refBitmap, - int refDX, int refDY, - int *atx, int *aty) { - JBIG2Bitmap *bitmap; - GBool ltp; - Guint ltpCX, cx, cx0, cx2, cx3, cx4, tpgrCX0, tpgrCX1, tpgrCX2; - JBIG2BitmapPtr cxPtr0 = {0}; - JBIG2BitmapPtr cxPtr1 = {0}; - JBIG2BitmapPtr cxPtr2 = {0}; - JBIG2BitmapPtr cxPtr3 = {0}; - JBIG2BitmapPtr cxPtr4 = {0}; - JBIG2BitmapPtr cxPtr5 = {0}; - JBIG2BitmapPtr cxPtr6 = {0}; - JBIG2BitmapPtr tpgrCXPtr0 = {0}; - JBIG2BitmapPtr tpgrCXPtr1 = {0}; - JBIG2BitmapPtr tpgrCXPtr2 = {0}; - int x, y, pix; - - bitmap = new JBIG2Bitmap(0, w, h); - if (!bitmap->isOk()) - { - delete bitmap; - return NULL; - } - bitmap->clearToZero(); - - // set up the typical row context - if (templ) { - ltpCX = 0x008; - } else { - ltpCX = 0x0010; - } - - ltp = 0; - for (y = 0; y < h; ++y) { - - if (templ) { - - // set up the context - bitmap->getPixelPtr(0, y-1, &cxPtr0); - cx0 = bitmap->nextPixel(&cxPtr0); - bitmap->getPixelPtr(-1, y, &cxPtr1); - refBitmap->getPixelPtr(-refDX, y-1-refDY, &cxPtr2); - refBitmap->getPixelPtr(-1-refDX, y-refDY, &cxPtr3); - cx3 = refBitmap->nextPixel(&cxPtr3); - cx3 = (cx3 << 1) | refBitmap->nextPixel(&cxPtr3); - refBitmap->getPixelPtr(-refDX, y+1-refDY, &cxPtr4); - cx4 = refBitmap->nextPixel(&cxPtr4); - - // set up the typical prediction context - tpgrCX0 = tpgrCX1 = tpgrCX2 = 0; // make gcc happy - if (tpgrOn) { - refBitmap->getPixelPtr(-1-refDX, y-1-refDY, &tpgrCXPtr0); - tpgrCX0 = refBitmap->nextPixel(&tpgrCXPtr0); - tpgrCX0 = (tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0); - tpgrCX0 = (tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0); - refBitmap->getPixelPtr(-1-refDX, y-refDY, &tpgrCXPtr1); - tpgrCX1 = refBitmap->nextPixel(&tpgrCXPtr1); - tpgrCX1 = (tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1); - tpgrCX1 = (tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1); - refBitmap->getPixelPtr(-1-refDX, y+1-refDY, &tpgrCXPtr2); - tpgrCX2 = refBitmap->nextPixel(&tpgrCXPtr2); - tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); - tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); - } else { - tpgrCXPtr0.p = tpgrCXPtr1.p = tpgrCXPtr2.p = NULL; // make gcc happy - tpgrCXPtr0.shift = tpgrCXPtr1.shift = tpgrCXPtr2.shift = 0; - tpgrCXPtr0.x = tpgrCXPtr1.x = tpgrCXPtr2.x = 0; - } - - for (x = 0; x < w; ++x) { - - // update the context - cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 7; - cx3 = ((cx3 << 1) | refBitmap->nextPixel(&cxPtr3)) & 7; - cx4 = ((cx4 << 1) | refBitmap->nextPixel(&cxPtr4)) & 3; - - if (tpgrOn) { - // update the typical predictor context - tpgrCX0 = ((tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0)) & 7; - tpgrCX1 = ((tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1)) & 7; - tpgrCX2 = ((tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2)) & 7; - - // check for a "typical" pixel - if (arithDecoder->decodeBit(ltpCX, refinementRegionStats)) { - ltp = !ltp; - } - if (tpgrCX0 == 0 && tpgrCX1 == 0 && tpgrCX2 == 0) { - bitmap->clearPixel(x, y); - continue; - } else if (tpgrCX0 == 7 && tpgrCX1 == 7 && tpgrCX2 == 7) { - bitmap->setPixel(x, y); - continue; - } - } - - // build the context - cx = (cx0 << 7) | (bitmap->nextPixel(&cxPtr1) << 6) | - (refBitmap->nextPixel(&cxPtr2) << 5) | - (cx3 << 2) | cx4; - - // decode the pixel - if ((pix = arithDecoder->decodeBit(cx, refinementRegionStats))) { - bitmap->setPixel(x, y); - } - } - - } else { - - // set up the context - bitmap->getPixelPtr(0, y-1, &cxPtr0); - cx0 = bitmap->nextPixel(&cxPtr0); - bitmap->getPixelPtr(-1, y, &cxPtr1); - refBitmap->getPixelPtr(-refDX, y-1-refDY, &cxPtr2); - cx2 = refBitmap->nextPixel(&cxPtr2); - refBitmap->getPixelPtr(-1-refDX, y-refDY, &cxPtr3); - cx3 = refBitmap->nextPixel(&cxPtr3); - cx3 = (cx3 << 1) | refBitmap->nextPixel(&cxPtr3); - refBitmap->getPixelPtr(-1-refDX, y+1-refDY, &cxPtr4); - cx4 = refBitmap->nextPixel(&cxPtr4); - cx4 = (cx4 << 1) | refBitmap->nextPixel(&cxPtr4); - bitmap->getPixelPtr(atx[0], y+aty[0], &cxPtr5); - refBitmap->getPixelPtr(atx[1]-refDX, y+aty[1]-refDY, &cxPtr6); - - // set up the typical prediction context - tpgrCX0 = tpgrCX1 = tpgrCX2 = 0; // make gcc happy - if (tpgrOn) { - refBitmap->getPixelPtr(-1-refDX, y-1-refDY, &tpgrCXPtr0); - tpgrCX0 = refBitmap->nextPixel(&tpgrCXPtr0); - tpgrCX0 = (tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0); - tpgrCX0 = (tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0); - refBitmap->getPixelPtr(-1-refDX, y-refDY, &tpgrCXPtr1); - tpgrCX1 = refBitmap->nextPixel(&tpgrCXPtr1); - tpgrCX1 = (tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1); - tpgrCX1 = (tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1); - refBitmap->getPixelPtr(-1-refDX, y+1-refDY, &tpgrCXPtr2); - tpgrCX2 = refBitmap->nextPixel(&tpgrCXPtr2); - tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); - tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); - } else { - tpgrCXPtr0.p = tpgrCXPtr1.p = tpgrCXPtr2.p = NULL; // make gcc happy - tpgrCXPtr0.shift = tpgrCXPtr1.shift = tpgrCXPtr2.shift = 0; - tpgrCXPtr0.x = tpgrCXPtr1.x = tpgrCXPtr2.x = 0; - } - - for (x = 0; x < w; ++x) { - - // update the context - cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 3; - cx2 = ((cx2 << 1) | refBitmap->nextPixel(&cxPtr2)) & 3; - cx3 = ((cx3 << 1) | refBitmap->nextPixel(&cxPtr3)) & 7; - cx4 = ((cx4 << 1) | refBitmap->nextPixel(&cxPtr4)) & 7; - - if (tpgrOn) { - // update the typical predictor context - tpgrCX0 = ((tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0)) & 7; - tpgrCX1 = ((tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1)) & 7; - tpgrCX2 = ((tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2)) & 7; - - // check for a "typical" pixel - if (arithDecoder->decodeBit(ltpCX, refinementRegionStats)) { - ltp = !ltp; - } - if (tpgrCX0 == 0 && tpgrCX1 == 0 && tpgrCX2 == 0) { - bitmap->clearPixel(x, y); - continue; - } else if (tpgrCX0 == 7 && tpgrCX1 == 7 && tpgrCX2 == 7) { - bitmap->setPixel(x, y); - continue; - } - } - - // build the context - cx = (cx0 << 11) | (bitmap->nextPixel(&cxPtr1) << 10) | - (cx2 << 8) | (cx3 << 5) | (cx4 << 2) | - (bitmap->nextPixel(&cxPtr5) << 1) | - refBitmap->nextPixel(&cxPtr6); - - // decode the pixel - if ((pix = arithDecoder->decodeBit(cx, refinementRegionStats))) { - bitmap->setPixel(x, y); - } - } - } - } - - return bitmap; -} - -void JBIG2Stream::readPageInfoSeg(Guint length) { - Guint xRes, yRes, flags, striping; - - if (!readULong(&pageW) || !readULong(&pageH) || - !readULong(&xRes) || !readULong(&yRes) || - !readUByte(&flags) || !readUWord(&striping)) { - goto eofError; - } - pageDefPixel = (flags >> 2) & 1; - defCombOp = (flags >> 3) & 3; - - // allocate the page bitmap - if (pageH == 0xffffffff) { - curPageH = striping & 0x7fff; - } else { - curPageH = pageH; - } - pageBitmap = new JBIG2Bitmap(0, pageW, curPageH); - - if (!pageBitmap->isOk()) { - delete pageBitmap; - pageBitmap = NULL; - return; - } - - // default pixel value - if (pageDefPixel) { - pageBitmap->clearToOne(); - } else { - pageBitmap->clearToZero(); - } - - return; - - eofError: - error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); -} - -void JBIG2Stream::readEndOfStripeSeg(Guint length) { - Guint i; - - // skip the segment - for (i = 0; i < length; ++i) { - curStr->getChar(); - } -} - -void JBIG2Stream::readProfilesSeg(Guint length) { - Guint i; - - // skip the segment - for (i = 0; i < length; ++i) { - curStr->getChar(); - } -} - -void JBIG2Stream::readCodeTableSeg(Guint segNum, Guint length) { - JBIG2HuffmanTable *huffTab; - Guint flags, oob, prefixBits, rangeBits; - int lowVal, highVal, val; - Guint huffTabSize, i; - - if (!readUByte(&flags) || !readLong(&lowVal) || !readLong(&highVal)) { - goto eofError; - } - oob = flags & 1; - prefixBits = ((flags >> 1) & 7) + 1; - rangeBits = ((flags >> 4) & 7) + 1; - - huffDecoder->reset(); - huffTabSize = 8; - huffTab = (JBIG2HuffmanTable *) - gmallocn(huffTabSize, sizeof(JBIG2HuffmanTable)); - i = 0; - val = lowVal; - while (val < highVal) { - if (i == huffTabSize) { - huffTabSize *= 2; - huffTab = (JBIG2HuffmanTable *) - greallocn(huffTab, huffTabSize, sizeof(JBIG2HuffmanTable)); - } - huffTab[i].val = val; - huffTab[i].prefixLen = huffDecoder->readBits(prefixBits); - huffTab[i].rangeLen = huffDecoder->readBits(rangeBits); - val += 1 << huffTab[i].rangeLen; - ++i; - } - if (i + oob + 3 > huffTabSize) { - huffTabSize = i + oob + 3; - huffTab = (JBIG2HuffmanTable *) - greallocn(huffTab, huffTabSize, sizeof(JBIG2HuffmanTable)); - } - huffTab[i].val = lowVal - 1; - huffTab[i].prefixLen = huffDecoder->readBits(prefixBits); - huffTab[i].rangeLen = jbig2HuffmanLOW; - ++i; - huffTab[i].val = highVal; - huffTab[i].prefixLen = huffDecoder->readBits(prefixBits); - huffTab[i].rangeLen = 32; - ++i; - if (oob) { - huffTab[i].val = 0; - huffTab[i].prefixLen = huffDecoder->readBits(prefixBits); - huffTab[i].rangeLen = jbig2HuffmanOOB; - ++i; - } - huffTab[i].val = 0; - huffTab[i].prefixLen = 0; - huffTab[i].rangeLen = jbig2HuffmanEOT; - huffDecoder->buildTable(huffTab, i); - - // create and store the new table segment - segments->append(new JBIG2CodeTable(segNum, huffTab)); - - return; - - eofError: - error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); -} - -void JBIG2Stream::readExtensionSeg(Guint length) { - Guint i; - - // skip the segment - for (i = 0; i < length; ++i) { - curStr->getChar(); - } -} - -JBIG2Segment *JBIG2Stream::findSegment(Guint segNum) { - JBIG2Segment *seg; - int i; - - for (i = 0; i < globalSegments->getLength(); ++i) { - seg = (JBIG2Segment *)globalSegments->get(i); - if (seg->getSegNum() == segNum) { - return seg; - } - } - for (i = 0; i < segments->getLength(); ++i) { - seg = (JBIG2Segment *)segments->get(i); - if (seg->getSegNum() == segNum) { - return seg; - } - } - return NULL; -} - -void JBIG2Stream::discardSegment(Guint segNum) { - JBIG2Segment *seg; - int i; - - for (i = 0; i < globalSegments->getLength(); ++i) { - seg = (JBIG2Segment *)globalSegments->get(i); - if (seg->getSegNum() == segNum) { - globalSegments->del(i); - return; - } - } - for (i = 0; i < segments->getLength(); ++i) { - seg = (JBIG2Segment *)segments->get(i); - if (seg->getSegNum() == segNum) { - segments->del(i); - return; - } - } -} - -void JBIG2Stream::resetGenericStats(Guint templ, - JArithmeticDecoderStats *prevStats) { - int size; - - size = contextSize[templ]; - if (prevStats && prevStats->getContextSize() == size) { - if (genericRegionStats->getContextSize() == size) { - genericRegionStats->copyFrom(prevStats); - } else { - delete genericRegionStats; - genericRegionStats = prevStats->copy(); - } - } else { - if (genericRegionStats->getContextSize() == size) { - genericRegionStats->reset(); - } else { - delete genericRegionStats; - genericRegionStats = new JArithmeticDecoderStats(1 << size); - } - } -} - -void JBIG2Stream::resetRefinementStats(Guint templ, - JArithmeticDecoderStats *prevStats) { - int size; - - size = refContextSize[templ]; - if (prevStats && prevStats->getContextSize() == size) { - if (refinementRegionStats->getContextSize() == size) { - refinementRegionStats->copyFrom(prevStats); - } else { - delete refinementRegionStats; - refinementRegionStats = prevStats->copy(); - } - } else { - if (refinementRegionStats->getContextSize() == size) { - refinementRegionStats->reset(); - } else { - delete refinementRegionStats; - refinementRegionStats = new JArithmeticDecoderStats(1 << size); - } - } -} - -void JBIG2Stream::resetIntStats(int symCodeLen) { - iadhStats->reset(); - iadwStats->reset(); - iaexStats->reset(); - iaaiStats->reset(); - iadtStats->reset(); - iaitStats->reset(); - iafsStats->reset(); - iadsStats->reset(); - iardxStats->reset(); - iardyStats->reset(); - iardwStats->reset(); - iardhStats->reset(); - iariStats->reset(); - if (iaidStats->getContextSize() == 1 << (symCodeLen + 1)) { - iaidStats->reset(); - } else { - delete iaidStats; - iaidStats = new JArithmeticDecoderStats(1 << (symCodeLen + 1)); - } -} - -GBool JBIG2Stream::readUByte(Guint *x) { - int c0; - - if ((c0 = curStr->getChar()) == EOF) { - return gFalse; - } - *x = (Guint)c0; - return gTrue; -} - -GBool JBIG2Stream::readByte(int *x) { - int c0; - - if ((c0 = curStr->getChar()) == EOF) { - return gFalse; - } - *x = c0; - if (c0 & 0x80) { - *x |= -1 - 0xff; - } - return gTrue; -} - -GBool JBIG2Stream::readUWord(Guint *x) { - int c0, c1; - - if ((c0 = curStr->getChar()) == EOF || - (c1 = curStr->getChar()) == EOF) { - return gFalse; - } - *x = (Guint)((c0 << 8) | c1); - return gTrue; -} - -GBool JBIG2Stream::readULong(Guint *x) { - int c0, c1, c2, c3; - - if ((c0 = curStr->getChar()) == EOF || - (c1 = curStr->getChar()) == EOF || - (c2 = curStr->getChar()) == EOF || - (c3 = curStr->getChar()) == EOF) { - return gFalse; - } - *x = (Guint)((c0 << 24) | (c1 << 16) | (c2 << 8) | c3); - return gTrue; -} - -GBool JBIG2Stream::readLong(int *x) { - int c0, c1, c2, c3; - - if ((c0 = curStr->getChar()) == EOF || - (c1 = curStr->getChar()) == EOF || - (c2 = curStr->getChar()) == EOF || - (c3 = curStr->getChar()) == EOF) { - return gFalse; - } - *x = ((c0 << 24) | (c1 << 16) | (c2 << 8) | c3); - if (c0 & 0x80) { - *x |= -1 - (int)0xffffffff; - } - return gTrue; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/JBIG2Stream.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/JBIG2Stream.h deleted file mode 100644 index 23d3d92d961..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/JBIG2Stream.h +++ /dev/null @@ -1,162 +0,0 @@ -//======================================================================== -// -// JBIG2Stream.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2009 David Benjamin <davidben@mit.edu> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef JBIG2STREAM_H -#define JBIG2STREAM_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include "Object.h" -#include "Stream.h" - -class GooList; -class JBIG2Segment; -class JBIG2Bitmap; -class JArithmeticDecoder; -class JArithmeticDecoderStats; -class JBIG2HuffmanDecoder; -struct JBIG2HuffmanTable; -class JBIG2MMRDecoder; - -//------------------------------------------------------------------------ - -class JBIG2Stream: public FilterStream { -public: - - JBIG2Stream(Stream *strA, Object *globalsStreamA); - virtual ~JBIG2Stream(); - virtual StreamKind getKind() { return strJBIG2; } - virtual void reset(); - virtual void close(); - virtual int getPos(); - virtual int getChar(); - virtual int lookChar(); - virtual GooString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - -private: - - void readSegments(); - GBool readSymbolDictSeg(Guint segNum, Guint length, - Guint *refSegs, Guint nRefSegs); - void readTextRegionSeg(Guint segNum, GBool imm, - GBool lossless, Guint length, - Guint *refSegs, Guint nRefSegs); - JBIG2Bitmap *readTextRegion(GBool huff, GBool refine, - int w, int h, - Guint numInstances, - Guint logStrips, - int numSyms, - JBIG2HuffmanTable *symCodeTab, - Guint symCodeLen, - JBIG2Bitmap **syms, - Guint defPixel, Guint combOp, - Guint transposed, Guint refCorner, - int sOffset, - JBIG2HuffmanTable *huffFSTable, - JBIG2HuffmanTable *huffDSTable, - JBIG2HuffmanTable *huffDTTable, - JBIG2HuffmanTable *huffRDWTable, - JBIG2HuffmanTable *huffRDHTable, - JBIG2HuffmanTable *huffRDXTable, - JBIG2HuffmanTable *huffRDYTable, - JBIG2HuffmanTable *huffRSizeTable, - Guint templ, - int *atx, int *aty); - void readPatternDictSeg(Guint segNum, Guint length); - void readHalftoneRegionSeg(Guint segNum, GBool imm, - GBool lossless, Guint length, - Guint *refSegs, Guint nRefSegs); - void readGenericRegionSeg(Guint segNum, GBool imm, - GBool lossless, Guint length); - void mmrAddPixels(int a1, int blackPixels, - int *codingLine, int *a0i, int w); - void mmrAddPixelsNeg(int a1, int blackPixels, - int *codingLine, int *a0i, int w); - JBIG2Bitmap *readGenericBitmap(GBool mmr, int w, int h, - int templ, GBool tpgdOn, - GBool useSkip, JBIG2Bitmap *skip, - int *atx, int *aty, - int mmrDataLength); - void readGenericRefinementRegionSeg(Guint segNum, GBool imm, - GBool lossless, Guint length, - Guint *refSegs, - Guint nRefSegs); - JBIG2Bitmap *readGenericRefinementRegion(int w, int h, - int templ, GBool tpgrOn, - JBIG2Bitmap *refBitmap, - int refDX, int refDY, - int *atx, int *aty); - void readPageInfoSeg(Guint length); - void readEndOfStripeSeg(Guint length); - void readProfilesSeg(Guint length); - void readCodeTableSeg(Guint segNum, Guint length); - void readExtensionSeg(Guint length); - JBIG2Segment *findSegment(Guint segNum); - void discardSegment(Guint segNum); - void resetGenericStats(Guint templ, - JArithmeticDecoderStats *prevStats); - void resetRefinementStats(Guint templ, - JArithmeticDecoderStats *prevStats); - void resetIntStats(int symCodeLen); - GBool readUByte(Guint *x); - GBool readByte(int *x); - GBool readUWord(Guint *x); - GBool readULong(Guint *x); - GBool readLong(int *x); - - Object globalsStream; - Guint pageW, pageH, curPageH; - Guint pageDefPixel; - JBIG2Bitmap *pageBitmap; - Guint defCombOp; - GooList *segments; // [JBIG2Segment] - GooList *globalSegments; // [JBIG2Segment] - Stream *curStr; - Guchar *dataPtr; - Guchar *dataEnd; - - JArithmeticDecoder *arithDecoder; - JArithmeticDecoderStats *genericRegionStats; - JArithmeticDecoderStats *refinementRegionStats; - JArithmeticDecoderStats *iadhStats; - JArithmeticDecoderStats *iadwStats; - JArithmeticDecoderStats *iaexStats; - JArithmeticDecoderStats *iaaiStats; - JArithmeticDecoderStats *iadtStats; - JArithmeticDecoderStats *iaitStats; - JArithmeticDecoderStats *iafsStats; - JArithmeticDecoderStats *iadsStats; - JArithmeticDecoderStats *iardxStats; - JArithmeticDecoderStats *iardyStats; - JArithmeticDecoderStats *iardwStats; - JArithmeticDecoderStats *iardhStats; - JArithmeticDecoderStats *iariStats; - JArithmeticDecoderStats *iaidStats; - JBIG2HuffmanDecoder *huffDecoder; - JBIG2MMRDecoder *mmrDecoder; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/JPEG2000Stream.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/JPEG2000Stream.cc deleted file mode 100644 index b7a29bf2285..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/JPEG2000Stream.cc +++ /dev/null @@ -1,191 +0,0 @@ -//======================================================================== -// -// JPEG2000Stream.cc -// -// A JPX stream decoder using OpenJPEG -// -// Copyright 2008-2010 Albert Astals Cid <aacid@kde.org> -// Copyright 2011 Daniel Glöckner <daniel-gl@gmx.net> -// -// Licensed under GPLv2 or later -// -//======================================================================== - -#include "JPEG2000Stream.h" - -JPXStream::JPXStream(Stream *strA) : FilterStream(strA) -{ - inited = gFalse; - image = NULL; - dinfo = NULL; - npixels = 0; - ncomps = 0; -} - -JPXStream::~JPXStream() { - delete str; - close(); -} - -void JPXStream::reset() { - counter = 0; - ccounter = 0; -} - -void JPXStream::close() { - if (image != NULL) { - opj_image_destroy(image); - image = NULL; - npixels = 0; - } - if (dinfo != NULL) { - opj_destroy_decompress(dinfo); - dinfo = NULL; - } -} - -int JPXStream::getPos() { - return counter * ncomps + ccounter; -} - -int JPXStream::getChars(int nChars, Guchar *buffer) { - for (int i = 0; i < nChars; ++i) { - const int c = doGetChar(); - if (likely(c != EOF)) buffer[i] = c; - else return i; - } - return nChars; -} - -int JPXStream::getChar() { - return doGetChar(); -} - -#define BUFFER_INITIAL_SIZE 4096 - -void JPXStream::init() -{ - Object oLen; - if (getDict()) getDict()->lookup("Length", &oLen); - - int bufSize = BUFFER_INITIAL_SIZE; - if (oLen.isInt()) bufSize = oLen.getInt(); - oLen.free(); - - - int length = 0; - unsigned char *buf = str->toUnsignedChars(&length, bufSize); - init2(buf, length, CODEC_JP2); - free(buf); - - if (image) { - npixels = image->comps[0].w * image->comps[0].h; - ncomps = image->numcomps; - for (int component = 0; component < ncomps; component++) { - if (image->comps[component].data == NULL) { - close(); - break; - } - unsigned char *cdata = (unsigned char *)image->comps[component].data; - int adjust = 0; - if (image->comps[component].prec > 8) - adjust = image->comps[component].prec - 8; - int sgndcorr = 0; - if (image->comps[component].sgnd) - sgndcorr = 1 << (image->comps[0].prec - 1); - for (int i = 0; i < npixels; i++) { - int r = image->comps[component].data[i]; - r += sgndcorr; - if (adjust) { - r = (r >> adjust)+((r >> (adjust-1))%2); - if (unlikely(r > 255)) - r = 255; - } - *(cdata++) = r; - } - } - } else - npixels = 0; - - counter = 0; - ccounter = 0; - inited = gTrue; -} - -static void libopenjpeg_error_callback(const char *msg, void * /*client_data*/) { - error(-1, "%s", msg); -} - -static void libopenjpeg_warning_callback(const char *msg, void * /*client_data*/) { - error(-1, "%s", msg); -} - -void JPXStream::init2(unsigned char *buf, int bufLen, OPJ_CODEC_FORMAT format) -{ - opj_cio_t *cio = NULL; - - /* Use default decompression parameters */ - opj_dparameters_t parameters; - opj_set_default_decoder_parameters(¶meters); - - /* Configure the event manager to receive errors and warnings */ - opj_event_mgr_t event_mgr; - memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); - event_mgr.error_handler = libopenjpeg_error_callback; - event_mgr.warning_handler = libopenjpeg_warning_callback; - - /* Get the decoder handle of the format */ - dinfo = opj_create_decompress(format); - if (dinfo == NULL) goto error; - - /* Catch events using our callbacks */ - opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, NULL); - - /* Setup the decoder decoding parameters */ - opj_setup_decoder(dinfo, ¶meters); - - /* Open a byte stream */ - cio = opj_cio_open((opj_common_ptr)dinfo, buf, bufLen); - if (cio == NULL) goto error; - - /* Decode the stream and fill the image structure */ - image = opj_decode(dinfo, cio); - - /* Close the byte stream */ - opj_cio_close(cio); - - if (image == NULL) goto error; - else return; - -error: - if (format == CODEC_JP2) { - error(-1, "Did no succeed opening JPX Stream as JP2, trying as J2K."); - init2(buf, bufLen, CODEC_J2K); - } else if (format == CODEC_J2K) { - error(-1, "Did no succeed opening JPX Stream as J2K, trying as JPT."); - init2(buf, bufLen, CODEC_JPT); - } else { - error(-1, "Did no succeed opening JPX Stream."); - } -} - -int JPXStream::lookChar() { - return doLookChar(); -} - -GooString *JPXStream::getPSFilter(int psLevel, char *indent) { - return NULL; -} - -GBool JPXStream::isBinary(GBool last) { - return str->isBinary(gTrue); -} - -void JPXStream::getImageParams(int *bitsPerComponent, StreamColorSpaceMode *csMode) { - if (inited == gFalse) init(); - - *bitsPerComponent = 8; - if (image && image->numcomps == 3) *csMode = streamCSDeviceRGB; - else *csMode = streamCSDeviceGray; -} - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/JPEG2000Stream.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/JPEG2000Stream.h deleted file mode 100644 index bb4085a63f7..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/JPEG2000Stream.h +++ /dev/null @@ -1,72 +0,0 @@ -//======================================================================== -// -// JPEG2000Stream.h -// -// A JPX stream decoder using OpenJPEG -// -// Copyright 2008, 2010 Albert Astals Cid <aacid@kde.org> -// Copyright 2011 Daniel Glöckner <daniel-gl@gmx.net> -// -// Licensed under GPLv2 or later -// -//======================================================================== - - -#ifndef JPEG2000STREAM_H -#define JPEG2000STREAM_H - -#include <openjpeg.h> - -#include "goo/gtypes.h" -#include "Object.h" -#include "Stream.h" - -class JPXStream: public FilterStream { -public: - - JPXStream(Stream *strA); - virtual ~JPXStream(); - virtual StreamKind getKind() { return strJPX; } - virtual void reset(); - virtual void close(); - virtual int getPos(); - virtual int getChar(); - virtual int lookChar(); - virtual GooString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - virtual void getImageParams(int *bitsPerComponent, StreamColorSpaceMode *csMode); - -private: - void init(); - void init2(unsigned char *buf, int bufLen, OPJ_CODEC_FORMAT format); - - virtual GBool hasGetChars() { return true; } - virtual int getChars(int nChars, Guchar *buffer); - - inline int doGetChar() { - int result = doLookChar(); - if (++ccounter == ncomps) { - ccounter = 0; - ++counter; - } - return result; - } - - inline int doLookChar() { - if (unlikely(inited == gFalse)) init(); - - if (unlikely(counter >= npixels)) return EOF; - - return ((unsigned char *)image->comps[ccounter].data)[counter]; - } - - opj_image_t *image; - opj_dinfo_t *dinfo; - int counter; - int ccounter; - int npixels; - int ncomps; - GBool inited; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/JPXStream.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/JPXStream.cc deleted file mode 100644 index 3b8c05d27b0..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/JPXStream.cc +++ /dev/null @@ -1,3158 +0,0 @@ -//======================================================================== -// -// JPXStream.cc -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> -#include <limits.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "goo/gmem.h" -#include "Error.h" -#include "JArithmeticDecoder.h" -#include "JPXStream.h" - -//~ to do: -// - precincts -// - ROI -// - progression order changes -// - packed packet headers -// - support for palettes, channel maps, etc. -// - make sure all needed JP2/JPX subboxes are parsed (readBoxes) -// - can we assume that QCC segments must come after the QCD segment? -// - skip EPH markers (readTilePartData) -// - handle tilePartToEOC in readTilePartData -// - deal with multiple codeword segments (readTilePartData, -// readCodeBlockData) -// - progression orders 2, 3, and 4 -// - in coefficient decoding (readCodeBlockData): -// - termination pattern: terminate after every coding pass -// - error resilience segmentation symbol -// - selective arithmetic coding bypass -// - vertically causal context formation -// - coeffs longer than 31 bits (should just ignore the extra bits?) -// - handle boxes larger than 2^32 bytes -// - the fixed-point arithmetic won't handle 16-bit pixels - -//------------------------------------------------------------------------ - -// number of contexts for the arithmetic decoder -#define jpxNContexts 19 - -#define jpxContextSigProp 0 // 0 - 8: significance prop and cleanup -#define jpxContextSign 9 // 9 - 13: sign -#define jpxContextMagRef 14 // 14 -16: magnitude refinement -#define jpxContextRunLength 17 // cleanup: run length -#define jpxContextUniform 18 // cleanup: first signif coeff - -//------------------------------------------------------------------------ - -#define jpxPassSigProp 0 -#define jpxPassMagRef 1 -#define jpxPassCleanup 2 - -//------------------------------------------------------------------------ - -// arithmetic decoder context for the significance propagation and -// cleanup passes: -// [horiz][vert][diag][subband] -// where subband = 0 for HL -// = 1 for LH and LL -// = 2 for HH -static const Guint sigPropContext[3][3][5][3] = { - {{{ 0, 0, 0 }, // horiz=0, vert=0, diag=0 - { 1, 1, 3 }, // horiz=0, vert=0, diag=1 - { 2, 2, 6 }, // horiz=0, vert=0, diag=2 - { 2, 2, 8 }, // horiz=0, vert=0, diag=3 - { 2, 2, 8 }}, // horiz=0, vert=0, diag=4 - {{ 5, 3, 1 }, // horiz=0, vert=1, diag=0 - { 6, 3, 4 }, // horiz=0, vert=1, diag=1 - { 6, 3, 7 }, // horiz=0, vert=1, diag=2 - { 6, 3, 8 }, // horiz=0, vert=1, diag=3 - { 6, 3, 8 }}, // horiz=0, vert=1, diag=4 - {{ 8, 4, 2 }, // horiz=0, vert=2, diag=0 - { 8, 4, 5 }, // horiz=0, vert=2, diag=1 - { 8, 4, 7 }, // horiz=0, vert=2, diag=2 - { 8, 4, 8 }, // horiz=0, vert=2, diag=3 - { 8, 4, 8 }}}, // horiz=0, vert=2, diag=4 - {{{ 3, 5, 1 }, // horiz=1, vert=0, diag=0 - { 3, 6, 4 }, // horiz=1, vert=0, diag=1 - { 3, 6, 7 }, // horiz=1, vert=0, diag=2 - { 3, 6, 8 }, // horiz=1, vert=0, diag=3 - { 3, 6, 8 }}, // horiz=1, vert=0, diag=4 - {{ 7, 7, 2 }, // horiz=1, vert=1, diag=0 - { 7, 7, 5 }, // horiz=1, vert=1, diag=1 - { 7, 7, 7 }, // horiz=1, vert=1, diag=2 - { 7, 7, 8 }, // horiz=1, vert=1, diag=3 - { 7, 7, 8 }}, // horiz=1, vert=1, diag=4 - {{ 8, 7, 2 }, // horiz=1, vert=2, diag=0 - { 8, 7, 5 }, // horiz=1, vert=2, diag=1 - { 8, 7, 7 }, // horiz=1, vert=2, diag=2 - { 8, 7, 8 }, // horiz=1, vert=2, diag=3 - { 8, 7, 8 }}}, // horiz=1, vert=2, diag=4 - {{{ 4, 8, 2 }, // horiz=2, vert=0, diag=0 - { 4, 8, 5 }, // horiz=2, vert=0, diag=1 - { 4, 8, 7 }, // horiz=2, vert=0, diag=2 - { 4, 8, 8 }, // horiz=2, vert=0, diag=3 - { 4, 8, 8 }}, // horiz=2, vert=0, diag=4 - {{ 7, 8, 2 }, // horiz=2, vert=1, diag=0 - { 7, 8, 5 }, // horiz=2, vert=1, diag=1 - { 7, 8, 7 }, // horiz=2, vert=1, diag=2 - { 7, 8, 8 }, // horiz=2, vert=1, diag=3 - { 7, 8, 8 }}, // horiz=2, vert=1, diag=4 - {{ 8, 8, 2 }, // horiz=2, vert=2, diag=0 - { 8, 8, 5 }, // horiz=2, vert=2, diag=1 - { 8, 8, 7 }, // horiz=2, vert=2, diag=2 - { 8, 8, 8 }, // horiz=2, vert=2, diag=3 - { 8, 8, 8 }}} // horiz=2, vert=2, diag=4 -}; - -// arithmetic decoder context and xor bit for the sign bit in the -// significance propagation pass: -// [horiz][vert][k] -// where horiz/vert are offset by 2 (i.e., range is -2 .. 2) -// and k = 0 for the context -// = 1 for the xor bit -static const Guint signContext[5][5][2] = { - {{ 13, 1 }, // horiz=-2, vert=-2 - { 13, 1 }, // horiz=-2, vert=-1 - { 12, 1 }, // horiz=-2, vert= 0 - { 11, 1 }, // horiz=-2, vert=+1 - { 11, 1 }}, // horiz=-2, vert=+2 - {{ 13, 1 }, // horiz=-1, vert=-2 - { 13, 1 }, // horiz=-1, vert=-1 - { 12, 1 }, // horiz=-1, vert= 0 - { 11, 1 }, // horiz=-1, vert=+1 - { 11, 1 }}, // horiz=-1, vert=+2 - {{ 10, 1 }, // horiz= 0, vert=-2 - { 10, 1 }, // horiz= 0, vert=-1 - { 9, 0 }, // horiz= 0, vert= 0 - { 10, 0 }, // horiz= 0, vert=+1 - { 10, 0 }}, // horiz= 0, vert=+2 - {{ 11, 0 }, // horiz=+1, vert=-2 - { 11, 0 }, // horiz=+1, vert=-1 - { 12, 0 }, // horiz=+1, vert= 0 - { 13, 0 }, // horiz=+1, vert=+1 - { 13, 0 }}, // horiz=+1, vert=+2 - {{ 11, 0 }, // horiz=+2, vert=-2 - { 11, 0 }, // horiz=+2, vert=-1 - { 12, 0 }, // horiz=+2, vert= 0 - { 13, 0 }, // horiz=+2, vert=+1 - { 13, 0 }}, // horiz=+2, vert=+2 -}; - -//------------------------------------------------------------------------ - -// constants used in the IDWT -#define idwtAlpha -1.586134342059924 -#define idwtBeta -0.052980118572961 -#define idwtGamma 0.882911075530934 -#define idwtDelta 0.443506852043971 -#define idwtKappa 1.230174104914001 -#define idwtIKappa (1.0 / idwtKappa) - -// number of bits to the right of the decimal point for the fixed -// point arithmetic used in the IDWT -#define fracBits 16 - -//------------------------------------------------------------------------ - -// floor(x / y) -#define jpxFloorDiv(x, y) ((x) / (y)) - -// floor(x / 2^y) -#define jpxFloorDivPow2(x, y) ((x) >> (y)) - -// ceil(x / y) -#define jpxCeilDiv(x, y) (((x) + (y) - 1) / (y)) - -// ceil(x / 2^y) -#define jpxCeilDivPow2(x, y) (((x) + (1 << (y)) - 1) >> (y)) - -//------------------------------------------------------------------------ - -#if 1 //----- disable coverage tracking - -#define cover(idx) - -#else //----- enable coverage tracking - -class JPXCover { -public: - - JPXCover(int sizeA); - ~JPXCover(); - void incr(int idx); - -private: - - int size, used; - int *data; -}; - -JPXCover::JPXCover(int sizeA) { - size = sizeA; - used = -1; - data = (int *)gmallocn(size, sizeof(int)); - memset(data, 0, size * sizeof(int)); -} - -JPXCover::~JPXCover() { - int i; - - printf("JPX coverage:\n"); - for (i = 0; i <= used; ++i) { - printf(" %4d: %8d\n", i, data[i]); - } - gfree(data); -} - -void JPXCover::incr(int idx) { - if (idx < size) { - ++data[idx]; - if (idx > used) { - used = idx; - } - } -} - -JPXCover jpxCover(150); - -#define cover(idx) jpxCover.incr(idx) - -#endif //----- coverage tracking - -//------------------------------------------------------------------------ - -JPXStream::JPXStream(Stream *strA): - FilterStream(strA) -{ - nComps = 0; - bpc = NULL; - width = height = 0; - haveCS = gFalse; - havePalette = gFalse; - haveCompMap = gFalse; - haveChannelDefn = gFalse; - - img.tiles = NULL; - bitBuf = 0; - bitBufLen = 0; - bitBufSkip = gFalse; - byteCount = 0; -} - -JPXStream::~JPXStream() { - close(); - delete str; -} - -void JPXStream::reset() { - str->reset(); - if (readBoxes()) { - curY = img.yOffset; - } else { - // readBoxes reported an error, so we go immediately to EOF - curY = img.ySize; - } - curX = img.xOffset; - curComp = 0; - readBufLen = 0; -} - -void JPXStream::close() { - JPXTile *tile; - JPXTileComp *tileComp; - JPXResLevel *resLevel; - JPXPrecinct *precinct; - JPXSubband *subband; - JPXCodeBlock *cb; - Guint comp, i, k, r, pre, sb; - - gfree(bpc); - bpc = NULL; - if (havePalette) { - gfree(palette.bpc); - gfree(palette.c); - havePalette = gFalse; - } - if (haveCompMap) { - gfree(compMap.comp); - gfree(compMap.type); - gfree(compMap.pComp); - haveCompMap = gFalse; - } - if (haveChannelDefn) { - gfree(channelDefn.idx); - gfree(channelDefn.type); - gfree(channelDefn.assoc); - haveChannelDefn = gFalse; - } - - if (img.tiles) { - for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { - tile = &img.tiles[i]; - if (tile->tileComps) { - for (comp = 0; comp < img.nComps; ++comp) { - tileComp = &tile->tileComps[comp]; - gfree(tileComp->quantSteps); - gfree(tileComp->data); - gfree(tileComp->buf); - if (tileComp->resLevels) { - for (r = 0; r <= tileComp->nDecompLevels; ++r) { - resLevel = &tileComp->resLevels[r]; - if (resLevel->precincts) { - for (pre = 0; pre < 1; ++pre) { - precinct = &resLevel->precincts[pre]; - if (precinct->subbands) { - for (sb = 0; sb < (Guint)(r == 0 ? 1 : 3); ++sb) { - subband = &precinct->subbands[sb]; - gfree(subband->inclusion); - gfree(subband->zeroBitPlane); - if (subband->cbs) { - for (k = 0; k < subband->nXCBs * subband->nYCBs; ++k) { - cb = &subband->cbs[k]; - gfree(cb->coeffs); - if (cb->arithDecoder) { - delete cb->arithDecoder; - } - if (cb->stats) { - delete cb->stats; - } - } - gfree(subband->cbs); - } - } - gfree(precinct->subbands); - } - } - gfree(img.tiles[i].tileComps[comp].resLevels[r].precincts); - } - } - gfree(img.tiles[i].tileComps[comp].resLevels); - } - } - gfree(img.tiles[i].tileComps); - } - } - gfree(img.tiles); - img.tiles = NULL; - } - FilterStream::close(); -} - -int JPXStream::getChar() { - int c; - - if (readBufLen < 8) { - fillReadBuf(); - } - if (readBufLen == 8) { - c = readBuf & 0xff; - readBufLen = 0; - } else if (readBufLen > 8) { - c = (readBuf >> (readBufLen - 8)) & 0xff; - readBufLen -= 8; - } else if (readBufLen == 0) { - c = EOF; - } else { - c = (readBuf << (8 - readBufLen)) & 0xff; - readBufLen = 0; - } - return c; -} - -int JPXStream::lookChar() { - int c; - - if (readBufLen < 8) { - fillReadBuf(); - } - if (readBufLen == 8) { - c = readBuf & 0xff; - } else if (readBufLen > 8) { - c = (readBuf >> (readBufLen - 8)) & 0xff; - } else if (readBufLen == 0) { - c = EOF; - } else { - c = (readBuf << (8 - readBufLen)) & 0xff; - } - return c; -} - -void JPXStream::fillReadBuf() { - JPXTileComp *tileComp; - Guint tileIdx, tx, ty; - int pix, pixBits; - - do { - if (curY >= img.ySize) { - return; - } - tileIdx = ((curY - img.yTileOffset) / img.yTileSize) * img.nXTiles - + (curX - img.xTileOffset) / img.xTileSize; -#if 1 //~ ignore the palette, assume the PDF ColorSpace object is valid - tileComp = &img.tiles[tileIdx].tileComps[curComp]; -#else - tileComp = &img.tiles[tileIdx].tileComps[havePalette ? 0 : curComp]; -#endif - tx = jpxCeilDiv((curX - img.xTileOffset) % img.xTileSize, tileComp->hSep); - ty = jpxCeilDiv((curY - img.yTileOffset) % img.yTileSize, tileComp->vSep); - pix = (int)tileComp->data[ty * (tileComp->x1 - tileComp->x0) + tx]; - pixBits = tileComp->prec; -#if 1 //~ ignore the palette, assume the PDF ColorSpace object is valid - if (++curComp == img.nComps) { -#else - if (havePalette) { - if (pix >= 0 && pix < palette.nEntries) { - pix = palette.c[pix * palette.nComps + curComp]; - } else { - pix = - pixBits = palette.bpc[curComp]; - } - if (++curComp == (Guint)(havePalette ? palette.nComps : img.nComps)) { -#endif - curComp = 0; - if (++curX == img.xSize) { - curX = img.xOffset; - ++curY; - } - } - if (pixBits == 8) { - readBuf = (readBuf << 8) | (pix & 0xff); - } else { - readBuf = (readBuf << pixBits) | (pix & ((1 << pixBits) - 1)); - } - readBufLen += pixBits; - } while (readBufLen < 8); -} - -GooString *JPXStream::getPSFilter(int psLevel, char *indent) { - return NULL; -} - -GBool JPXStream::isBinary(GBool last) { - return str->isBinary(gTrue); -} - -void JPXStream::getImageParams(int *bitsPerComponent, - StreamColorSpaceMode *csMode) { - Guint boxType, boxLen, dataLen, csEnum; - Guint bpc1, dummy, i; - int csMeth, csPrec, csPrec1, dummy2; - StreamColorSpaceMode csMode1; - GBool haveBPC, haveCSMode; - - csPrec = 0; // make gcc happy - haveBPC = haveCSMode = gFalse; - str->reset(); - if (str->lookChar() == 0xff) { - getImageParams2(bitsPerComponent, csMode); - } else { - while (readBoxHdr(&boxType, &boxLen, &dataLen)) { - if (boxType == 0x6a703268) { // JP2 header - cover(0); - // skip the superbox - } else if (boxType == 0x69686472) { // image header - cover(1); - if (readULong(&dummy) && - readULong(&dummy) && - readUWord(&dummy) && - readUByte(&bpc1) && - readUByte(&dummy) && - readUByte(&dummy) && - readUByte(&dummy)) { - *bitsPerComponent = bpc1 + 1; - haveBPC = gTrue; - } - } else if (boxType == 0x636F6C72) { // color specification - cover(2); - if (readByte(&csMeth) && - readByte(&csPrec1) && - readByte(&dummy2)) { - if (csMeth == 1) { - if (readULong(&csEnum)) { - csMode1 = streamCSNone; - if (csEnum == jpxCSBiLevel || - csEnum == jpxCSGrayscale) { - csMode1 = streamCSDeviceGray; - } else if (csEnum == jpxCSCMYK) { - csMode1 = streamCSDeviceCMYK; - } else if (csEnum == jpxCSsRGB || - csEnum == jpxCSCISesRGB || - csEnum == jpxCSROMMRGB) { - csMode1 = streamCSDeviceRGB; - } - if (csMode1 != streamCSNone && - (!haveCSMode || csPrec1 > csPrec)) { - *csMode = csMode1; - csPrec = csPrec1; - haveCSMode = gTrue; - } - for (i = 0; i < dataLen - 7; ++i) { - str->getChar(); - } - } - } else { - for (i = 0; i < dataLen - 3; ++i) { - str->getChar(); - } - } - } - } else if (boxType == 0x6A703263) { // codestream - cover(3); - if (!(haveBPC && haveCSMode)) { - getImageParams2(bitsPerComponent, csMode); - } - break; - } else { - cover(4); - for (i = 0; i < dataLen; ++i) { - str->getChar(); - } - } - } - } - str->close(); -} - -// Get image parameters from the codestream. -void JPXStream::getImageParams2(int *bitsPerComponent, - StreamColorSpaceMode *csMode) { - int segType; - Guint segLen, nComps1, bpc1, dummy, i; - - while (readMarkerHdr(&segType, &segLen)) { - if (segType == 0x51) { // SIZ - image and tile size - cover(5); - if (readUWord(&dummy) && - readULong(&dummy) && - readULong(&dummy) && - readULong(&dummy) && - readULong(&dummy) && - readULong(&dummy) && - readULong(&dummy) && - readULong(&dummy) && - readULong(&dummy) && - readUWord(&nComps1) && - readUByte(&bpc1)) { - *bitsPerComponent = (bpc1 & 0x7f) + 1; - // if there's no color space info, take a guess - if (nComps1 == 1) { - *csMode = streamCSDeviceGray; - } else if (nComps1 == 3) { - *csMode = streamCSDeviceRGB; - } else if (nComps1 == 4) { - *csMode = streamCSDeviceCMYK; - } - } - break; - } else { - cover(6); - if (segLen > 2) { - for (i = 0; i < segLen - 2; ++i) { - str->getChar(); - } - } - } - } -} - -GBool JPXStream::readBoxes() { - Guint boxType, boxLen, dataLen; - Guint bpc1, compression, unknownColorspace, ipr; - Guint i, j; - - haveImgHdr = gFalse; - - // check for a naked JPEG 2000 codestream (without the JP2/JPX - // wrapper) -- this appears to be a violation of the PDF spec, but - // Acrobat allows it - if (str->lookChar() == 0xff) { - cover(7); - error(getPos(), "Naked JPEG 2000 codestream, missing JP2/JPX wrapper"); - readCodestream(0); - nComps = img.nComps; - bpc = (Guint *)gmallocn(nComps, sizeof(Guint)); - for (i = 0; i < nComps; ++i) { - bpc[i] = img.tiles[0].tileComps[i].prec; - } - width = img.xSize - img.xOffset; - height = img.ySize - img.yOffset; - return gTrue; - } - - while (readBoxHdr(&boxType, &boxLen, &dataLen)) { - switch (boxType) { - case 0x6a703268: // JP2 header - // this is a grouping box ('superbox') which has no real - // contents and doesn't appear to be used consistently, i.e., - // some things which should be subboxes of the JP2 header box - // show up outside of it - so we simply ignore the JP2 header - // box - cover(8); - break; - case 0x69686472: // image header - cover(9); - if (!readULong(&height) || - !readULong(&width) || - !readUWord(&nComps) || - !readUByte(&bpc1) || - !readUByte(&compression) || - !readUByte(&unknownColorspace) || - !readUByte(&ipr)) { - error(getPos(), "Unexpected EOF in JPX stream"); - return gFalse; - } - if (compression != 7) { - error(getPos(), "Unknown compression type in JPX stream"); - return gFalse; - } - bpc = (Guint *)gmallocn(nComps, sizeof(Guint)); - for (i = 0; i < nComps; ++i) { - bpc[i] = bpc1; - } - haveImgHdr = gTrue; - break; - case 0x62706363: // bits per component - cover(10); - if (!haveImgHdr) { - error(getPos(), "Found bits per component box before image header box in JPX stream"); - return gFalse; - } - if (dataLen != nComps) { - error(getPos(), "Invalid bits per component box in JPX stream"); - return gFalse; - } - for (i = 0; i < nComps; ++i) { - if (!readUByte(&bpc[i])) { - error(getPos(), "Unexpected EOF in JPX stream"); - return gFalse; - } - } - break; - case 0x636F6C72: // color specification - cover(11); - if (!readColorSpecBox(dataLen)) { - return gFalse; - } - break; - case 0x70636c72: // palette - cover(12); - if (!readUWord(&palette.nEntries) || - !readUByte(&palette.nComps)) { - error(getPos(), "Unexpected EOF in JPX stream"); - return gFalse; - } - palette.bpc = (Guint *)gmallocn(palette.nComps, sizeof(Guint)); - palette.c = - (int *)gmallocn(palette.nEntries * palette.nComps, sizeof(int)); - for (i = 0; i < palette.nComps; ++i) { - if (!readUByte(&palette.bpc[i])) { - error(getPos(), "Unexpected EOF in JPX stream"); - return gFalse; - } - ++palette.bpc[i]; - } - for (i = 0; i < palette.nEntries; ++i) { - for (j = 0; j < palette.nComps; ++j) { - if (!readNBytes(((palette.bpc[j] & 0x7f) + 7) >> 3, - (palette.bpc[j] & 0x80) ? gTrue : gFalse, - &palette.c[i * palette.nComps + j])) { - error(getPos(), "Unexpected EOF in JPX stream"); - return gFalse; - } - } - } - havePalette = gTrue; - break; - case 0x636d6170: // component mapping - cover(13); - compMap.nChannels = dataLen / 4; - compMap.comp = (Guint *)gmallocn(compMap.nChannels, sizeof(Guint)); - compMap.type = (Guint *)gmallocn(compMap.nChannels, sizeof(Guint)); - compMap.pComp = (Guint *)gmallocn(compMap.nChannels, sizeof(Guint)); - for (i = 0; i < compMap.nChannels; ++i) { - if (!readUWord(&compMap.comp[i]) || - !readUByte(&compMap.type[i]) || - !readUByte(&compMap.pComp[i])) { - error(getPos(), "Unexpected EOF in JPX stream"); - return gFalse; - } - } - haveCompMap = gTrue; - break; - case 0x63646566: // channel definition - cover(14); - if (!readUWord(&channelDefn.nChannels)) { - error(getPos(), "Unexpected EOF in JPX stream"); - return gFalse; - } - channelDefn.idx = - (Guint *)gmallocn(channelDefn.nChannels, sizeof(Guint)); - channelDefn.type = - (Guint *)gmallocn(channelDefn.nChannels, sizeof(Guint)); - channelDefn.assoc = - (Guint *)gmallocn(channelDefn.nChannels, sizeof(Guint)); - for (i = 0; i < channelDefn.nChannels; ++i) { - if (!readUWord(&channelDefn.idx[i]) || - !readUWord(&channelDefn.type[i]) || - !readUWord(&channelDefn.assoc[i])) { - error(getPos(), "Unexpected EOF in JPX stream"); - return gFalse; - } - } - haveChannelDefn = gTrue; - break; - case 0x6A703263: // contiguous codestream - cover(15); - if (!bpc) { - error(getPos(), "JPX stream is missing the image header box"); - } - if (!haveCS) { - error(getPos(), "JPX stream has no supported color spec"); - } - if (!readCodestream(dataLen)) { - return gFalse; - } - break; - default: - cover(16); - for (i = 0; i < dataLen; ++i) { - if (str->getChar() == EOF) { - error(getPos(), "Unexpected EOF in JPX stream"); - return gFalse; - } - } - break; - } - } - return gTrue; -} - -GBool JPXStream::readColorSpecBox(Guint dataLen) { - JPXColorSpec newCS; - Guint csApprox, csEnum; - Guint i; - GBool ok; - - ok = gFalse; - if (!readUByte(&newCS.meth) || - !readByte(&newCS.prec) || - !readUByte(&csApprox)) { - goto err; - } - switch (newCS.meth) { - case 1: // enumerated colorspace - cover(17); - if (!readULong(&csEnum)) { - goto err; - } - newCS.enumerated.type = (JPXColorSpaceType)csEnum; - switch (newCS.enumerated.type) { - case jpxCSBiLevel: - ok = gTrue; - break; - case jpxCSYCbCr1: - ok = gTrue; - break; - case jpxCSYCbCr2: - ok = gTrue; - break; - case jpxCSYCBCr3: - ok = gTrue; - break; - case jpxCSPhotoYCC: - ok = gTrue; - break; - case jpxCSCMY: - ok = gTrue; - break; - case jpxCSCMYK: - ok = gTrue; - break; - case jpxCSYCCK: - ok = gTrue; - break; - case jpxCSCIELab: - if (dataLen == 7 + 7*4) { - if (!readULong(&newCS.enumerated.cieLab.rl) || - !readULong(&newCS.enumerated.cieLab.ol) || - !readULong(&newCS.enumerated.cieLab.ra) || - !readULong(&newCS.enumerated.cieLab.oa) || - !readULong(&newCS.enumerated.cieLab.rb) || - !readULong(&newCS.enumerated.cieLab.ob) || - !readULong(&newCS.enumerated.cieLab.il)) { - goto err; - } - } else if (dataLen == 7) { - //~ this assumes the 8-bit case - cover(92); - newCS.enumerated.cieLab.rl = 100; - newCS.enumerated.cieLab.ol = 0; - newCS.enumerated.cieLab.ra = 255; - newCS.enumerated.cieLab.oa = 128; - newCS.enumerated.cieLab.rb = 255; - newCS.enumerated.cieLab.ob = 96; - newCS.enumerated.cieLab.il = 0x00443530; - } else { - goto err; - } - ok = gTrue; - break; - case jpxCSsRGB: - ok = gTrue; - break; - case jpxCSGrayscale: - ok = gTrue; - break; - case jpxCSBiLevel2: - ok = gTrue; - break; - case jpxCSCIEJab: - // not allowed in PDF - goto err; - case jpxCSCISesRGB: - ok = gTrue; - break; - case jpxCSROMMRGB: - ok = gTrue; - break; - case jpxCSsRGBYCbCr: - ok = gTrue; - break; - case jpxCSYPbPr1125: - ok = gTrue; - break; - case jpxCSYPbPr1250: - ok = gTrue; - break; - default: - goto err; - } - break; - case 2: // restricted ICC profile - case 3: // any ICC profile (JPX) - case 4: // vendor color (JPX) - cover(18); - for (i = 0; i < dataLen - 3; ++i) { - if (str->getChar() == EOF) { - goto err; - } - } - break; - } - - if (ok && (!haveCS || newCS.prec > cs.prec)) { - cs = newCS; - haveCS = gTrue; - } - - return gTrue; - - err: - error(getPos(), "Error in JPX color spec"); - return gFalse; -} - -GBool JPXStream::readCodestream(Guint len) { - JPXTile *tile; - JPXTileComp *tileComp; - int segType; - GBool haveSIZ, haveCOD, haveQCD, haveSOT; - Guint precinctSize, style; - Guint segLen, capabilities, comp, i, j, r; - - //----- main header - haveSIZ = haveCOD = haveQCD = haveSOT = gFalse; - do { - if (!readMarkerHdr(&segType, &segLen)) { - error(getPos(), "Error in JPX codestream"); - return gFalse; - } - switch (segType) { - case 0x4f: // SOC - start of codestream - // marker only - cover(19); - break; - case 0x51: // SIZ - image and tile size - cover(20); - if (!readUWord(&capabilities) || - !readULong(&img.xSize) || - !readULong(&img.ySize) || - !readULong(&img.xOffset) || - !readULong(&img.yOffset) || - !readULong(&img.xTileSize) || - !readULong(&img.yTileSize) || - !readULong(&img.xTileOffset) || - !readULong(&img.yTileOffset) || - !readUWord(&img.nComps)) { - error(getPos(), "Error in JPX SIZ marker segment"); - return gFalse; - } - if (haveImgHdr && img.nComps != nComps) { - error(getPos(), "Different number of components in JPX SIZ marker segment"); - return gFalse; - } - img.nXTiles = (img.xSize - img.xTileOffset + img.xTileSize - 1) - / img.xTileSize; - img.nYTiles = (img.ySize - img.yTileOffset + img.yTileSize - 1) - / img.yTileSize; - // check for overflow before allocating memory - if (img.nXTiles <= 0 || img.nYTiles <= 0 || - img.nXTiles >= INT_MAX / img.nYTiles) { - error(getPos(), "Bad tile count in JPX SIZ marker segment"); - return gFalse; - } - img.tiles = (JPXTile *)gmallocn(img.nXTiles * img.nYTiles, - sizeof(JPXTile)); - for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { - img.tiles[i].tileComps = (JPXTileComp *)gmallocn(img.nComps, - sizeof(JPXTileComp)); - for (comp = 0; comp < img.nComps; ++comp) { - img.tiles[i].tileComps[comp].quantSteps = NULL; - img.tiles[i].tileComps[comp].data = NULL; - img.tiles[i].tileComps[comp].buf = NULL; - img.tiles[i].tileComps[comp].resLevels = NULL; - } - } - for (comp = 0; comp < img.nComps; ++comp) { - if (!readUByte(&img.tiles[0].tileComps[comp].prec) || - !readUByte(&img.tiles[0].tileComps[comp].hSep) || - !readUByte(&img.tiles[0].tileComps[comp].vSep)) { - error(getPos(), "Error in JPX SIZ marker segment"); - return gFalse; - } - img.tiles[0].tileComps[comp].sgned = - (img.tiles[0].tileComps[comp].prec & 0x80) ? gTrue : gFalse; - img.tiles[0].tileComps[comp].prec = - (img.tiles[0].tileComps[comp].prec & 0x7f) + 1; - for (i = 1; i < img.nXTiles * img.nYTiles; ++i) { - img.tiles[i].tileComps[comp] = img.tiles[0].tileComps[comp]; - } - } - haveSIZ = gTrue; - break; - case 0x52: // COD - coding style default - cover(21); - if (!readUByte(&img.tiles[0].tileComps[0].style) || - !readUByte(&img.tiles[0].progOrder) || - !readUWord(&img.tiles[0].nLayers) || - !readUByte(&img.tiles[0].multiComp) || - !readUByte(&img.tiles[0].tileComps[0].nDecompLevels) || - !readUByte(&img.tiles[0].tileComps[0].codeBlockW) || - !readUByte(&img.tiles[0].tileComps[0].codeBlockH) || - !readUByte(&img.tiles[0].tileComps[0].codeBlockStyle) || - !readUByte(&img.tiles[0].tileComps[0].transform)) { - error(getPos(), "Error in JPX COD marker segment"); - return gFalse; - } - img.tiles[0].tileComps[0].codeBlockW += 2; - img.tiles[0].tileComps[0].codeBlockH += 2; - for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { - if (i != 0) { - img.tiles[i].progOrder = img.tiles[0].progOrder; - img.tiles[i].nLayers = img.tiles[0].nLayers; - img.tiles[i].multiComp = img.tiles[0].multiComp; - } - for (comp = 0; comp < img.nComps; ++comp) { - if (!(i == 0 && comp == 0)) { - img.tiles[i].tileComps[comp].style = - img.tiles[0].tileComps[0].style; - img.tiles[i].tileComps[comp].nDecompLevels = - img.tiles[0].tileComps[0].nDecompLevels; - img.tiles[i].tileComps[comp].codeBlockW = - img.tiles[0].tileComps[0].codeBlockW; - img.tiles[i].tileComps[comp].codeBlockH = - img.tiles[0].tileComps[0].codeBlockH; - img.tiles[i].tileComps[comp].codeBlockStyle = - img.tiles[0].tileComps[0].codeBlockStyle; - img.tiles[i].tileComps[comp].transform = - img.tiles[0].tileComps[0].transform; - } - img.tiles[i].tileComps[comp].resLevels = - (JPXResLevel *)gmallocn( - (img.tiles[i].tileComps[comp].nDecompLevels + 1), - sizeof(JPXResLevel)); - for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) { - img.tiles[i].tileComps[comp].resLevels[r].precincts = NULL; - } - } - } - for (r = 0; r <= img.tiles[0].tileComps[0].nDecompLevels; ++r) { - if (img.tiles[0].tileComps[0].style & 0x01) { - cover(91); - if (!readUByte(&precinctSize)) { - error(getPos(), "Error in JPX COD marker segment"); - return gFalse; - } - img.tiles[0].tileComps[0].resLevels[r].precinctWidth = - precinctSize & 0x0f; - img.tiles[0].tileComps[0].resLevels[r].precinctHeight = - (precinctSize >> 4) & 0x0f; - } else { - img.tiles[0].tileComps[0].resLevels[r].precinctWidth = 15; - img.tiles[0].tileComps[0].resLevels[r].precinctHeight = 15; - } - } - for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { - for (comp = 0; comp < img.nComps; ++comp) { - if (!(i == 0 && comp == 0)) { - for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) { - img.tiles[i].tileComps[comp].resLevels[r].precinctWidth = - img.tiles[0].tileComps[0].resLevels[r].precinctWidth; - img.tiles[i].tileComps[comp].resLevels[r].precinctHeight = - img.tiles[0].tileComps[0].resLevels[r].precinctHeight; - } - } - } - } - haveCOD = gTrue; - break; - case 0x53: // COC - coding style component - cover(22); - if (!haveCOD) { - error(getPos(), "JPX COC marker segment before COD segment"); - return gFalse; - } - if ((img.nComps > 256 && !readUWord(&comp)) || - (img.nComps <= 256 && !readUByte(&comp)) || - comp >= img.nComps || - !readUByte(&style) || - !readUByte(&img.tiles[0].tileComps[comp].nDecompLevels) || - !readUByte(&img.tiles[0].tileComps[comp].codeBlockW) || - !readUByte(&img.tiles[0].tileComps[comp].codeBlockH) || - !readUByte(&img.tiles[0].tileComps[comp].codeBlockStyle) || - !readUByte(&img.tiles[0].tileComps[comp].transform)) { - error(getPos(), "Error in JPX COC marker segment"); - return gFalse; - } - img.tiles[0].tileComps[comp].style = - (img.tiles[0].tileComps[comp].style & ~1) | (style & 1); - img.tiles[0].tileComps[comp].codeBlockW += 2; - img.tiles[0].tileComps[comp].codeBlockH += 2; - for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { - if (i != 0) { - img.tiles[i].tileComps[comp].style = - img.tiles[0].tileComps[comp].style; - img.tiles[i].tileComps[comp].nDecompLevels = - img.tiles[0].tileComps[comp].nDecompLevels; - img.tiles[i].tileComps[comp].codeBlockW = - img.tiles[0].tileComps[comp].codeBlockW; - img.tiles[i].tileComps[comp].codeBlockH = - img.tiles[0].tileComps[comp].codeBlockH; - img.tiles[i].tileComps[comp].codeBlockStyle = - img.tiles[0].tileComps[comp].codeBlockStyle; - img.tiles[i].tileComps[comp].transform = - img.tiles[0].tileComps[comp].transform; - } - img.tiles[i].tileComps[comp].resLevels = - (JPXResLevel *)greallocn( - img.tiles[i].tileComps[comp].resLevels, - (img.tiles[i].tileComps[comp].nDecompLevels + 1), - sizeof(JPXResLevel)); - for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) { - img.tiles[i].tileComps[comp].resLevels[r].precincts = NULL; - } - } - for (r = 0; r <= img.tiles[0].tileComps[comp].nDecompLevels; ++r) { - if (img.tiles[0].tileComps[comp].style & 0x01) { - if (!readUByte(&precinctSize)) { - error(getPos(), "Error in JPX COD marker segment"); - return gFalse; - } - img.tiles[0].tileComps[comp].resLevels[r].precinctWidth = - precinctSize & 0x0f; - img.tiles[0].tileComps[comp].resLevels[r].precinctHeight = - (precinctSize >> 4) & 0x0f; - } else { - img.tiles[0].tileComps[comp].resLevels[r].precinctWidth = 15; - img.tiles[0].tileComps[comp].resLevels[r].precinctHeight = 15; - } - } - for (i = 1; i < img.nXTiles * img.nYTiles; ++i) { - for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) { - img.tiles[i].tileComps[comp].resLevels[r].precinctWidth = - img.tiles[0].tileComps[comp].resLevels[r].precinctWidth; - img.tiles[i].tileComps[comp].resLevels[r].precinctHeight = - img.tiles[0].tileComps[comp].resLevels[r].precinctHeight; - } - } - break; - case 0x5c: // QCD - quantization default - cover(23); - if (!readUByte(&img.tiles[0].tileComps[0].quantStyle)) { - error(getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - if ((img.tiles[0].tileComps[0].quantStyle & 0x1f) == 0x00) { - img.tiles[0].tileComps[0].nQuantSteps = segLen - 3; - img.tiles[0].tileComps[0].quantSteps = - (Guint *)greallocn(img.tiles[0].tileComps[0].quantSteps, - img.tiles[0].tileComps[0].nQuantSteps, - sizeof(Guint)); - for (i = 0; i < img.tiles[0].tileComps[0].nQuantSteps; ++i) { - if (!readUByte(&img.tiles[0].tileComps[0].quantSteps[i])) { - error(getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - } - } else if ((img.tiles[0].tileComps[0].quantStyle & 0x1f) == 0x01) { - img.tiles[0].tileComps[0].nQuantSteps = 1; - img.tiles[0].tileComps[0].quantSteps = - (Guint *)greallocn(img.tiles[0].tileComps[0].quantSteps, - img.tiles[0].tileComps[0].nQuantSteps, - sizeof(Guint)); - if (!readUWord(&img.tiles[0].tileComps[0].quantSteps[0])) { - error(getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - } else if ((img.tiles[0].tileComps[0].quantStyle & 0x1f) == 0x02) { - img.tiles[0].tileComps[0].nQuantSteps = (segLen - 3) / 2; - img.tiles[0].tileComps[0].quantSteps = - (Guint *)greallocn(img.tiles[0].tileComps[0].quantSteps, - img.tiles[0].tileComps[0].nQuantSteps, - sizeof(Guint)); - for (i = 0; i < img.tiles[0].tileComps[0].nQuantSteps; ++i) { - if (!readUWord(&img.tiles[0].tileComps[0].quantSteps[i])) { - error(getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - } - } else { - error(getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { - for (comp = 0; comp < img.nComps; ++comp) { - if (!(i == 0 && comp == 0)) { - img.tiles[i].tileComps[comp].quantStyle = - img.tiles[0].tileComps[0].quantStyle; - img.tiles[i].tileComps[comp].nQuantSteps = - img.tiles[0].tileComps[0].nQuantSteps; - img.tiles[i].tileComps[comp].quantSteps = - (Guint *)greallocn(img.tiles[i].tileComps[comp].quantSteps, - img.tiles[0].tileComps[0].nQuantSteps, - sizeof(Guint)); - for (j = 0; j < img.tiles[0].tileComps[0].nQuantSteps; ++j) { - img.tiles[i].tileComps[comp].quantSteps[j] = - img.tiles[0].tileComps[0].quantSteps[j]; - } - } - } - } - haveQCD = gTrue; - break; - case 0x5d: // QCC - quantization component - cover(24); - if (!haveQCD) { - error(getPos(), "JPX QCC marker segment before QCD segment"); - return gFalse; - } - if ((img.nComps > 256 && !readUWord(&comp)) || - (img.nComps <= 256 && !readUByte(&comp)) || - comp >= img.nComps || - !readUByte(&img.tiles[0].tileComps[comp].quantStyle)) { - error(getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - if ((img.tiles[0].tileComps[comp].quantStyle & 0x1f) == 0x00) { - img.tiles[0].tileComps[comp].nQuantSteps = - segLen - (img.nComps > 256 ? 5 : 4); - img.tiles[0].tileComps[comp].quantSteps = - (Guint *)greallocn(img.tiles[0].tileComps[comp].quantSteps, - img.tiles[0].tileComps[comp].nQuantSteps, - sizeof(Guint)); - for (i = 0; i < img.tiles[0].tileComps[comp].nQuantSteps; ++i) { - if (!readUByte(&img.tiles[0].tileComps[comp].quantSteps[i])) { - error(getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - } - } else if ((img.tiles[0].tileComps[comp].quantStyle & 0x1f) == 0x01) { - img.tiles[0].tileComps[comp].nQuantSteps = 1; - img.tiles[0].tileComps[comp].quantSteps = - (Guint *)greallocn(img.tiles[0].tileComps[comp].quantSteps, - img.tiles[0].tileComps[comp].nQuantSteps, - sizeof(Guint)); - if (!readUWord(&img.tiles[0].tileComps[comp].quantSteps[0])) { - error(getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - } else if ((img.tiles[0].tileComps[comp].quantStyle & 0x1f) == 0x02) { - img.tiles[0].tileComps[comp].nQuantSteps = - (segLen - (img.nComps > 256 ? 5 : 4)) / 2; - img.tiles[0].tileComps[comp].quantSteps = - (Guint *)greallocn(img.tiles[0].tileComps[comp].quantSteps, - img.tiles[0].tileComps[comp].nQuantSteps, - sizeof(Guint)); - for (i = 0; i < img.tiles[0].tileComps[comp].nQuantSteps; ++i) { - if (!readUWord(&img.tiles[0].tileComps[comp].quantSteps[i])) { - error(getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - } - } else { - error(getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - for (i = 1; i < img.nXTiles * img.nYTiles; ++i) { - img.tiles[i].tileComps[comp].quantStyle = - img.tiles[0].tileComps[comp].quantStyle; - img.tiles[i].tileComps[comp].nQuantSteps = - img.tiles[0].tileComps[comp].nQuantSteps; - img.tiles[i].tileComps[comp].quantSteps = - (Guint *)greallocn(img.tiles[i].tileComps[comp].quantSteps, - img.tiles[0].tileComps[comp].nQuantSteps, - sizeof(Guint)); - for (j = 0; j < img.tiles[0].tileComps[comp].nQuantSteps; ++j) { - img.tiles[i].tileComps[comp].quantSteps[j] = - img.tiles[0].tileComps[comp].quantSteps[j]; - } - } - break; - case 0x5e: // RGN - region of interest - cover(25); -#if 1 //~ ROI is unimplemented - fprintf(stderr, "RGN\n"); - for (i = 0; i < segLen - 2; ++i) { - if (str->getChar() == EOF) { - error(getPos(), "Error in JPX PPM marker segment"); - return gFalse; - } - } -#else - if ((img.nComps > 256 && !readUWord(&comp)) || - (img.nComps <= 256 && !readUByte(&comp)) || - comp >= img.nComps || - !readUByte(&compInfo[comp].defROI.style) || - !readUByte(&compInfo[comp].defROI.shift)) { - error(getPos(), "Error in JPX RGN marker segment"); - return gFalse; - } -#endif - break; - case 0x5f: // POC - progression order change - cover(26); -#if 1 //~ progression order changes are unimplemented - fprintf(stderr, "POC\n"); - for (i = 0; i < segLen - 2; ++i) { - if (str->getChar() == EOF) { - error(getPos(), "Error in JPX PPM marker segment"); - return gFalse; - } - } -#else - nProgs = (segLen - 2) / (img.nComps > 256 ? 9 : 7); - progs = (JPXProgOrder *)gmallocn(nProgs, sizeof(JPXProgOrder)); - for (i = 0; i < nProgs; ++i) { - if (!readUByte(&progs[i].startRes) || - !(img.nComps > 256 && readUWord(&progs[i].startComp)) || - !(img.nComps <= 256 && readUByte(&progs[i].startComp)) || - !readUWord(&progs[i].endLayer) || - !readUByte(&progs[i].endRes) || - !(img.nComps > 256 && readUWord(&progs[i].endComp)) || - !(img.nComps <= 256 && readUByte(&progs[i].endComp)) || - !readUByte(&progs[i].progOrder)) { - error(getPos(), "Error in JPX POC marker segment"); - return gFalse; - } - } -#endif - break; - case 0x60: // PPM - packed packet headers, main header - cover(27); -#if 1 //~ packed packet headers are unimplemented - fprintf(stderr, "PPM\n"); - for (i = 0; i < segLen - 2; ++i) { - if (str->getChar() == EOF) { - error(getPos(), "Error in JPX PPM marker segment"); - return gFalse; - } - } -#endif - break; - case 0x55: // TLM - tile-part lengths - // skipped - cover(28); - for (i = 0; i < segLen - 2; ++i) { - if (str->getChar() == EOF) { - error(getPos(), "Error in JPX TLM marker segment"); - return gFalse; - } - } - break; - case 0x57: // PLM - packet length, main header - // skipped - cover(29); - for (i = 0; i < segLen - 2; ++i) { - if (str->getChar() == EOF) { - error(getPos(), "Error in JPX PLM marker segment"); - return gFalse; - } - } - break; - case 0x63: // CRG - component registration - // skipped - cover(30); - for (i = 0; i < segLen - 2; ++i) { - if (str->getChar() == EOF) { - error(getPos(), "Error in JPX CRG marker segment"); - return gFalse; - } - } - break; - case 0x64: // COM - comment - // skipped - cover(31); - for (i = 0; i < segLen - 2; ++i) { - if (str->getChar() == EOF) { - error(getPos(), "Error in JPX COM marker segment"); - return gFalse; - } - } - break; - case 0x90: // SOT - start of tile - cover(32); - haveSOT = gTrue; - break; - default: - cover(33); - error(getPos(), "Unknown marker segment %02x in JPX stream", segType); - for (i = 0; i < segLen - 2; ++i) { - if (str->getChar() == EOF) { - break; - } - } - break; - } - } while (!haveSOT); - - if (!haveSIZ) { - error(getPos(), "Missing SIZ marker segment in JPX stream"); - return gFalse; - } - if (!haveCOD) { - error(getPos(), "Missing COD marker segment in JPX stream"); - return gFalse; - } - if (!haveQCD) { - error(getPos(), "Missing QCD marker segment in JPX stream"); - return gFalse; - } - - //----- read the tile-parts - while (1) { - if (!readTilePart()) { - return gFalse; - } - if (!readMarkerHdr(&segType, &segLen)) { - error(getPos(), "Error in JPX codestream"); - return gFalse; - } - if (segType != 0x90) { // SOT - start of tile - break; - } - } - - if (segType != 0xd9) { // EOC - end of codestream - error(getPos(), "Missing EOC marker in JPX codestream"); - return gFalse; - } - - //----- finish decoding the image - for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { - tile = &img.tiles[i]; - for (comp = 0; comp < img.nComps; ++comp) { - tileComp = &tile->tileComps[comp]; - inverseTransform(tileComp); - } - if (!inverseMultiCompAndDC(tile)) { - return gFalse; - } - } - - //~ can free memory below tileComps here, and also tileComp.buf - - return gTrue; -} - -GBool JPXStream::readTilePart() { - JPXTile *tile; - JPXTileComp *tileComp; - JPXResLevel *resLevel; - JPXPrecinct *precinct; - JPXSubband *subband; - JPXCodeBlock *cb; - GBool haveSOD; - Guint tileIdx, tilePartLen, tilePartIdx, nTileParts; - GBool tilePartToEOC; - Guint precinctSize, style; - Guint n, nSBs, nx, ny, sbx0, sby0, comp, segLen; - Guint i, j, k, cbX, cbY, r, pre, sb, cbi; - int segType, level; - - // process the SOT marker segment - if (!readUWord(&tileIdx) || - !readULong(&tilePartLen) || - !readUByte(&tilePartIdx) || - !readUByte(&nTileParts)) { - error(getPos(), "Error in JPX SOT marker segment"); - return gFalse; - } - - if (tileIdx >= img.nXTiles * img.nYTiles) { - error(getPos(), "Weird tile index in JPX stream"); - return gFalse; - } - - tilePartToEOC = tilePartLen == 0; - tilePartLen -= 12; // subtract size of SOT segment - - haveSOD = gFalse; - do { - if (!readMarkerHdr(&segType, &segLen)) { - error(getPos(), "Error in JPX tile-part codestream"); - return gFalse; - } - tilePartLen -= 2 + segLen; - switch (segType) { - case 0x52: // COD - coding style default - cover(34); - if (!readUByte(&img.tiles[tileIdx].tileComps[0].style) || - !readUByte(&img.tiles[tileIdx].progOrder) || - !readUWord(&img.tiles[tileIdx].nLayers) || - !readUByte(&img.tiles[tileIdx].multiComp) || - !readUByte(&img.tiles[tileIdx].tileComps[0].nDecompLevels) || - !readUByte(&img.tiles[tileIdx].tileComps[0].codeBlockW) || - !readUByte(&img.tiles[tileIdx].tileComps[0].codeBlockH) || - !readUByte(&img.tiles[tileIdx].tileComps[0].codeBlockStyle) || - !readUByte(&img.tiles[tileIdx].tileComps[0].transform)) { - error(getPos(), "Error in JPX COD marker segment"); - return gFalse; - } - img.tiles[tileIdx].tileComps[0].codeBlockW += 2; - img.tiles[tileIdx].tileComps[0].codeBlockH += 2; - for (comp = 0; comp < img.nComps; ++comp) { - if (comp != 0) { - img.tiles[tileIdx].tileComps[comp].style = - img.tiles[tileIdx].tileComps[0].style; - img.tiles[tileIdx].tileComps[comp].nDecompLevels = - img.tiles[tileIdx].tileComps[0].nDecompLevels; - img.tiles[tileIdx].tileComps[comp].codeBlockW = - img.tiles[tileIdx].tileComps[0].codeBlockW; - img.tiles[tileIdx].tileComps[comp].codeBlockH = - img.tiles[tileIdx].tileComps[0].codeBlockH; - img.tiles[tileIdx].tileComps[comp].codeBlockStyle = - img.tiles[tileIdx].tileComps[0].codeBlockStyle; - img.tiles[tileIdx].tileComps[comp].transform = - img.tiles[tileIdx].tileComps[0].transform; - } - img.tiles[tileIdx].tileComps[comp].resLevels = - (JPXResLevel *)greallocn( - img.tiles[tileIdx].tileComps[comp].resLevels, - (img.tiles[tileIdx].tileComps[comp].nDecompLevels + 1), - sizeof(JPXResLevel)); - for (r = 0; - r <= img.tiles[tileIdx].tileComps[comp].nDecompLevels; - ++r) { - img.tiles[tileIdx].tileComps[comp].resLevels[r].precincts = NULL; - } - } - for (r = 0; r <= img.tiles[tileIdx].tileComps[0].nDecompLevels; ++r) { - if (img.tiles[tileIdx].tileComps[0].style & 0x01) { - if (!readUByte(&precinctSize)) { - error(getPos(), "Error in JPX COD marker segment"); - return gFalse; - } - img.tiles[tileIdx].tileComps[0].resLevels[r].precinctWidth = - precinctSize & 0x0f; - img.tiles[tileIdx].tileComps[0].resLevels[r].precinctHeight = - (precinctSize >> 4) & 0x0f; - } else { - img.tiles[tileIdx].tileComps[0].resLevels[r].precinctWidth = 15; - img.tiles[tileIdx].tileComps[0].resLevels[r].precinctHeight = 15; - } - } - for (comp = 1; comp < img.nComps; ++comp) { - for (r = 0; - r <= img.tiles[tileIdx].tileComps[comp].nDecompLevels; - ++r) { - img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctWidth = - img.tiles[tileIdx].tileComps[0].resLevels[r].precinctWidth; - img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctHeight = - img.tiles[tileIdx].tileComps[0].resLevels[r].precinctHeight; - } - } - break; - case 0x53: // COC - coding style component - cover(35); - if ((img.nComps > 256 && !readUWord(&comp)) || - (img.nComps <= 256 && !readUByte(&comp)) || - comp >= img.nComps || - !readUByte(&style) || - !readUByte(&img.tiles[tileIdx].tileComps[comp].nDecompLevels) || - !readUByte(&img.tiles[tileIdx].tileComps[comp].codeBlockW) || - !readUByte(&img.tiles[tileIdx].tileComps[comp].codeBlockH) || - !readUByte(&img.tiles[tileIdx].tileComps[comp].codeBlockStyle) || - !readUByte(&img.tiles[tileIdx].tileComps[comp].transform)) { - error(getPos(), "Error in JPX COC marker segment"); - return gFalse; - } - img.tiles[tileIdx].tileComps[comp].style = - (img.tiles[tileIdx].tileComps[comp].style & ~1) | (style & 1); - img.tiles[tileIdx].tileComps[comp].codeBlockW += 2; - img.tiles[tileIdx].tileComps[comp].codeBlockH += 2; - img.tiles[tileIdx].tileComps[comp].resLevels = - (JPXResLevel *)greallocn( - img.tiles[tileIdx].tileComps[comp].resLevels, - (img.tiles[tileIdx].tileComps[comp].nDecompLevels + 1), - sizeof(JPXResLevel)); - for (r = 0; r <= img.tiles[tileIdx].tileComps[comp].nDecompLevels; ++r) { - img.tiles[tileIdx].tileComps[comp].resLevels[r].precincts = NULL; - } - for (r = 0; r <= img.tiles[tileIdx].tileComps[comp].nDecompLevels; ++r) { - if (img.tiles[tileIdx].tileComps[comp].style & 0x01) { - if (!readUByte(&precinctSize)) { - error(getPos(), "Error in JPX COD marker segment"); - return gFalse; - } - img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctWidth = - precinctSize & 0x0f; - img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctHeight = - (precinctSize >> 4) & 0x0f; - } else { - img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctWidth = 15; - img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctHeight = 15; - } - } - break; - case 0x5c: // QCD - quantization default - cover(36); - if (!readUByte(&img.tiles[tileIdx].tileComps[0].quantStyle)) { - error(getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - if ((img.tiles[tileIdx].tileComps[0].quantStyle & 0x1f) == 0x00) { - img.tiles[tileIdx].tileComps[0].nQuantSteps = - segLen - 3; - img.tiles[tileIdx].tileComps[0].quantSteps = - (Guint *)greallocn(img.tiles[tileIdx].tileComps[0].quantSteps, - img.tiles[tileIdx].tileComps[0].nQuantSteps, - sizeof(Guint)); - for (i = 0; i < img.tiles[tileIdx].tileComps[0].nQuantSteps; ++i) { - if (!readUByte(&img.tiles[tileIdx].tileComps[0].quantSteps[i])) { - error(getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - } - } else if ((img.tiles[tileIdx].tileComps[0].quantStyle & 0x1f) == 0x01) { - img.tiles[tileIdx].tileComps[0].nQuantSteps = 1; - img.tiles[tileIdx].tileComps[0].quantSteps = - (Guint *)greallocn(img.tiles[tileIdx].tileComps[0].quantSteps, - img.tiles[tileIdx].tileComps[0].nQuantSteps, - sizeof(Guint)); - if (!readUWord(&img.tiles[tileIdx].tileComps[0].quantSteps[0])) { - error(getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - } else if ((img.tiles[tileIdx].tileComps[0].quantStyle & 0x1f) == 0x02) { - img.tiles[tileIdx].tileComps[0].nQuantSteps = (segLen - 3) / 2; - img.tiles[tileIdx].tileComps[0].quantSteps = - (Guint *)greallocn(img.tiles[tileIdx].tileComps[0].quantSteps, - img.tiles[tileIdx].tileComps[0].nQuantSteps, - sizeof(Guint)); - for (i = 0; i < img.tiles[tileIdx].tileComps[0].nQuantSteps; ++i) { - if (!readUWord(&img.tiles[tileIdx].tileComps[0].quantSteps[i])) { - error(getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - } - } else { - error(getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - for (comp = 1; comp < img.nComps; ++comp) { - img.tiles[tileIdx].tileComps[comp].quantStyle = - img.tiles[tileIdx].tileComps[0].quantStyle; - img.tiles[tileIdx].tileComps[comp].nQuantSteps = - img.tiles[tileIdx].tileComps[0].nQuantSteps; - img.tiles[tileIdx].tileComps[comp].quantSteps = - (Guint *)greallocn(img.tiles[tileIdx].tileComps[comp].quantSteps, - img.tiles[tileIdx].tileComps[0].nQuantSteps, - sizeof(Guint)); - for (j = 0; j < img.tiles[tileIdx].tileComps[0].nQuantSteps; ++j) { - img.tiles[tileIdx].tileComps[comp].quantSteps[j] = - img.tiles[tileIdx].tileComps[0].quantSteps[j]; - } - } - break; - case 0x5d: // QCC - quantization component - cover(37); - if ((img.nComps > 256 && !readUWord(&comp)) || - (img.nComps <= 256 && !readUByte(&comp)) || - comp >= img.nComps || - !readUByte(&img.tiles[tileIdx].tileComps[comp].quantStyle)) { - error(getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - if ((img.tiles[tileIdx].tileComps[comp].quantStyle & 0x1f) == 0x00) { - img.tiles[tileIdx].tileComps[comp].nQuantSteps = - segLen - (img.nComps > 256 ? 5 : 4); - img.tiles[tileIdx].tileComps[comp].quantSteps = - (Guint *)greallocn(img.tiles[tileIdx].tileComps[comp].quantSteps, - img.tiles[tileIdx].tileComps[comp].nQuantSteps, - sizeof(Guint)); - for (i = 0; i < img.tiles[tileIdx].tileComps[comp].nQuantSteps; ++i) { - if (!readUByte(&img.tiles[tileIdx].tileComps[comp].quantSteps[i])) { - error(getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - } - } else if ((img.tiles[tileIdx].tileComps[comp].quantStyle & 0x1f) - == 0x01) { - img.tiles[tileIdx].tileComps[comp].nQuantSteps = 1; - img.tiles[tileIdx].tileComps[comp].quantSteps = - (Guint *)greallocn(img.tiles[tileIdx].tileComps[comp].quantSteps, - img.tiles[tileIdx].tileComps[comp].nQuantSteps, - sizeof(Guint)); - if (!readUWord(&img.tiles[tileIdx].tileComps[comp].quantSteps[0])) { - error(getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - } else if ((img.tiles[tileIdx].tileComps[comp].quantStyle & 0x1f) - == 0x02) { - img.tiles[tileIdx].tileComps[comp].nQuantSteps = - (segLen - (img.nComps > 256 ? 5 : 4)) / 2; - img.tiles[tileIdx].tileComps[comp].quantSteps = - (Guint *)greallocn(img.tiles[tileIdx].tileComps[comp].quantSteps, - img.tiles[tileIdx].tileComps[comp].nQuantSteps, - sizeof(Guint)); - for (i = 0; i < img.tiles[tileIdx].tileComps[comp].nQuantSteps; ++i) { - if (!readUWord(&img.tiles[tileIdx].tileComps[comp].quantSteps[i])) { - error(getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - } - } else { - error(getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - break; - case 0x5e: // RGN - region of interest - cover(38); -#if 1 //~ ROI is unimplemented - fprintf(stderr, "RGN\n"); - for (i = 0; i < segLen - 2; ++i) { - if (str->getChar() == EOF) { - error(getPos(), "Error in JPX PPM marker segment"); - return gFalse; - } - } -#else - if ((img.nComps > 256 && !readUWord(&comp)) || - (img.nComps <= 256 && !readUByte(&comp)) || - comp >= img.nComps || - !readUByte(&compInfo[comp].roi.style) || - !readUByte(&compInfo[comp].roi.shift)) { - error(getPos(), "Error in JPX RGN marker segment"); - return gFalse; - } -#endif - break; - case 0x5f: // POC - progression order change - cover(39); -#if 1 //~ progression order changes are unimplemented - fprintf(stderr, "POC\n"); - for (i = 0; i < segLen - 2; ++i) { - if (str->getChar() == EOF) { - error(getPos(), "Error in JPX PPM marker segment"); - return gFalse; - } - } -#else - nTileProgs = (segLen - 2) / (img.nComps > 256 ? 9 : 7); - tileProgs = (JPXProgOrder *)gmallocn(nTileProgs, sizeof(JPXProgOrder)); - for (i = 0; i < nTileProgs; ++i) { - if (!readUByte(&tileProgs[i].startRes) || - !(img.nComps > 256 && readUWord(&tileProgs[i].startComp)) || - !(img.nComps <= 256 && readUByte(&tileProgs[i].startComp)) || - !readUWord(&tileProgs[i].endLayer) || - !readUByte(&tileProgs[i].endRes) || - !(img.nComps > 256 && readUWord(&tileProgs[i].endComp)) || - !(img.nComps <= 256 && readUByte(&tileProgs[i].endComp)) || - !readUByte(&tileProgs[i].progOrder)) { - error(getPos(), "Error in JPX POC marker segment"); - return gFalse; - } - } -#endif - break; - case 0x61: // PPT - packed packet headers, tile-part hdr - cover(40); -#if 1 //~ packed packet headers are unimplemented - fprintf(stderr, "PPT\n"); - for (i = 0; i < segLen - 2; ++i) { - if (str->getChar() == EOF) { - error(getPos(), "Error in JPX PPT marker segment"); - return gFalse; - } - } -#endif - case 0x58: // PLT - packet length, tile-part header - // skipped - cover(41); - for (i = 0; i < segLen - 2; ++i) { - if (str->getChar() == EOF) { - error(getPos(), "Error in JPX PLT marker segment"); - return gFalse; - } - } - break; - case 0x64: // COM - comment - // skipped - cover(42); - for (i = 0; i < segLen - 2; ++i) { - if (str->getChar() == EOF) { - error(getPos(), "Error in JPX COM marker segment"); - return gFalse; - } - } - break; - case 0x93: // SOD - start of data - cover(43); - haveSOD = gTrue; - break; - default: - cover(44); - error(getPos(), "Unknown marker segment %02x in JPX tile-part stream", - segType); - for (i = 0; i < segLen - 2; ++i) { - if (str->getChar() == EOF) { - break; - } - } - break; - } - } while (!haveSOD); - - //----- initialize the tile, precincts, and code-blocks - if (tilePartIdx == 0) { - tile = &img.tiles[tileIdx]; - i = tileIdx / img.nXTiles; - j = tileIdx % img.nXTiles; - if ((tile->x0 = img.xTileOffset + j * img.xTileSize) < img.xOffset) { - tile->x0 = img.xOffset; - } - if ((tile->y0 = img.yTileOffset + i * img.yTileSize) < img.yOffset) { - tile->y0 = img.yOffset; - } - if ((tile->x1 = img.xTileOffset + (j + 1) * img.xTileSize) > img.xSize) { - tile->x1 = img.xSize; - } - if ((tile->y1 = img.yTileOffset + (i + 1) * img.yTileSize) > img.ySize) { - tile->y1 = img.ySize; - } - tile->comp = 0; - tile->res = 0; - tile->precinct = 0; - tile->layer = 0; - tile->maxNDecompLevels = 0; - for (comp = 0; comp < img.nComps; ++comp) { - tileComp = &tile->tileComps[comp]; - if (tileComp->nDecompLevels > tile->maxNDecompLevels) { - tile->maxNDecompLevels = tileComp->nDecompLevels; - } - tileComp->x0 = jpxCeilDiv(tile->x0, tileComp->hSep); - tileComp->y0 = jpxCeilDiv(tile->y0, tileComp->hSep); - tileComp->x1 = jpxCeilDiv(tile->x1, tileComp->hSep); - tileComp->y1 = jpxCeilDiv(tile->y1, tileComp->hSep); - tileComp->cbW = 1 << tileComp->codeBlockW; - tileComp->cbH = 1 << tileComp->codeBlockH; - tileComp->data = (int *)gmallocn((tileComp->x1 - tileComp->x0) * - (tileComp->y1 - tileComp->y0), - sizeof(int)); - if (tileComp->x1 - tileComp->x0 > tileComp->y1 - tileComp->y0) { - n = tileComp->x1 - tileComp->x0; - } else { - n = tileComp->y1 - tileComp->y0; - } - tileComp->buf = (int *)gmallocn(n + 8, sizeof(int)); - for (r = 0; r <= tileComp->nDecompLevels; ++r) { - resLevel = &tileComp->resLevels[r]; - k = r == 0 ? tileComp->nDecompLevels - : tileComp->nDecompLevels - r + 1; - resLevel->x0 = jpxCeilDivPow2(tileComp->x0, k); - resLevel->y0 = jpxCeilDivPow2(tileComp->y0, k); - resLevel->x1 = jpxCeilDivPow2(tileComp->x1, k); - resLevel->y1 = jpxCeilDivPow2(tileComp->y1, k); - if (r == 0) { - resLevel->bx0[0] = resLevel->x0; - resLevel->by0[0] = resLevel->y0; - resLevel->bx1[0] = resLevel->x1; - resLevel->by1[0] = resLevel->y1; - } else { - resLevel->bx0[0] = jpxCeilDivPow2(tileComp->x0 - (1 << (k-1)), k); - resLevel->by0[0] = resLevel->y0; - resLevel->bx1[0] = jpxCeilDivPow2(tileComp->x1 - (1 << (k-1)), k); - resLevel->by1[0] = resLevel->y1; - resLevel->bx0[1] = resLevel->x0; - resLevel->by0[1] = jpxCeilDivPow2(tileComp->y0 - (1 << (k-1)), k); - resLevel->bx1[1] = resLevel->x1; - resLevel->by1[1] = jpxCeilDivPow2(tileComp->y1 - (1 << (k-1)), k); - resLevel->bx0[2] = jpxCeilDivPow2(tileComp->x0 - (1 << (k-1)), k); - resLevel->by0[2] = jpxCeilDivPow2(tileComp->y0 - (1 << (k-1)), k); - resLevel->bx1[2] = jpxCeilDivPow2(tileComp->x1 - (1 << (k-1)), k); - resLevel->by1[2] = jpxCeilDivPow2(tileComp->y1 - (1 << (k-1)), k); - } - resLevel->precincts = (JPXPrecinct *)gmallocn(1, sizeof(JPXPrecinct)); - for (pre = 0; pre < 1; ++pre) { - precinct = &resLevel->precincts[pre]; - precinct->x0 = resLevel->x0; - precinct->y0 = resLevel->y0; - precinct->x1 = resLevel->x1; - precinct->y1 = resLevel->y1; - nSBs = r == 0 ? 1 : 3; - precinct->subbands = - (JPXSubband *)gmallocn(nSBs, sizeof(JPXSubband)); - for (sb = 0; sb < nSBs; ++sb) { - subband = &precinct->subbands[sb]; - subband->x0 = resLevel->bx0[sb]; - subband->y0 = resLevel->by0[sb]; - subband->x1 = resLevel->bx1[sb]; - subband->y1 = resLevel->by1[sb]; - subband->nXCBs = jpxCeilDivPow2(subband->x1, - tileComp->codeBlockW) - - jpxFloorDivPow2(subband->x0, - tileComp->codeBlockW); - subband->nYCBs = jpxCeilDivPow2(subband->y1, - tileComp->codeBlockH) - - jpxFloorDivPow2(subband->y0, - tileComp->codeBlockH); - n = subband->nXCBs > subband->nYCBs ? subband->nXCBs - : subband->nYCBs; - for (subband->maxTTLevel = 0, --n; - n; - ++subband->maxTTLevel, n >>= 1) ; - n = 0; - for (level = subband->maxTTLevel; level >= 0; --level) { - nx = jpxCeilDivPow2(subband->nXCBs, level); - ny = jpxCeilDivPow2(subband->nYCBs, level); - n += nx * ny; - } - subband->inclusion = - (JPXTagTreeNode *)gmallocn(n, sizeof(JPXTagTreeNode)); - subband->zeroBitPlane = - (JPXTagTreeNode *)gmallocn(n, sizeof(JPXTagTreeNode)); - for (k = 0; k < n; ++k) { - subband->inclusion[k].finished = gFalse; - subband->inclusion[k].val = 0; - subband->zeroBitPlane[k].finished = gFalse; - subband->zeroBitPlane[k].val = 0; - } - subband->cbs = (JPXCodeBlock *)gmallocn(subband->nXCBs * - subband->nYCBs, - sizeof(JPXCodeBlock)); - sbx0 = jpxFloorDivPow2(subband->x0, tileComp->codeBlockW); - sby0 = jpxFloorDivPow2(subband->y0, tileComp->codeBlockH); - cb = subband->cbs; - for (cbY = 0; cbY < subband->nYCBs; ++cbY) { - for (cbX = 0; cbX < subband->nXCBs; ++cbX) { - cb->x0 = (sbx0 + cbX) << tileComp->codeBlockW; - cb->x1 = cb->x0 + tileComp->cbW; - if (subband->x0 > cb->x0) { - cb->x0 = subband->x0; - } - if (subband->x1 < cb->x1) { - cb->x1 = subband->x1; - } - cb->y0 = (sby0 + cbY) << tileComp->codeBlockH; - cb->y1 = cb->y0 + tileComp->cbH; - if (subband->y0 > cb->y0) { - cb->y0 = subband->y0; - } - if (subband->y1 < cb->y1) { - cb->y1 = subband->y1; - } - cb->seen = gFalse; - cb->lBlock = 3; - cb->nextPass = jpxPassCleanup; - cb->nZeroBitPlanes = 0; - cb->coeffs = - (JPXCoeff *)gmallocn((1 << (tileComp->codeBlockW - + tileComp->codeBlockH)), - sizeof(JPXCoeff)); - for (cbi = 0; - cbi < (Guint)(1 << (tileComp->codeBlockW - + tileComp->codeBlockH)); - ++cbi) { - cb->coeffs[cbi].flags = 0; - cb->coeffs[cbi].len = 0; - cb->coeffs[cbi].mag = 0; - } - cb->arithDecoder = NULL; - cb->stats = NULL; - ++cb; - } - } - } - } - } - } - } - - return readTilePartData(tileIdx, tilePartLen, tilePartToEOC); -} - -GBool JPXStream::readTilePartData(Guint tileIdx, - Guint tilePartLen, GBool tilePartToEOC) { - JPXTile *tile; - JPXTileComp *tileComp; - JPXResLevel *resLevel; - JPXPrecinct *precinct; - JPXSubband *subband; - JPXCodeBlock *cb; - Guint ttVal; - Guint bits, cbX, cbY, nx, ny, i, j, n, sb; - int level; - - tile = &img.tiles[tileIdx]; - - // read all packets from this tile-part - while (1) { - if (tilePartToEOC) { - //~ peek for an EOC marker - cover(93); - } else if (tilePartLen == 0) { - break; - } - - tileComp = &tile->tileComps[tile->comp]; - resLevel = &tileComp->resLevels[tile->res]; - precinct = &resLevel->precincts[tile->precinct]; - - //----- packet header - - // setup - startBitBuf(tilePartLen); - - // zero-length flag - if (!readBits(1, &bits)) { - goto err; - } - if (!bits) { - // packet is empty -- clear all code-block inclusion flags - cover(45); - for (sb = 0; sb < (Guint)(tile->res == 0 ? 1 : 3); ++sb) { - subband = &precinct->subbands[sb]; - for (cbY = 0; cbY < subband->nYCBs; ++cbY) { - for (cbX = 0; cbX < subband->nXCBs; ++cbX) { - cb = &subband->cbs[cbY * subband->nXCBs + cbX]; - cb->included = gFalse; - } - } - } - } else { - - for (sb = 0; sb < (Guint)(tile->res == 0 ? 1 : 3); ++sb) { - subband = &precinct->subbands[sb]; - for (cbY = 0; cbY < subband->nYCBs; ++cbY) { - for (cbX = 0; cbX < subband->nXCBs; ++cbX) { - cb = &subband->cbs[cbY * subband->nXCBs + cbX]; - - // skip code-blocks with no coefficients - if (cb->x0 >= cb->x1 || cb->y0 >= cb->y1) { - cover(46); - cb->included = gFalse; - continue; - } - - // code-block inclusion - if (cb->seen) { - cover(47); - if (!readBits(1, &cb->included)) { - goto err; - } - } else { - cover(48); - ttVal = 0; - i = 0; - for (level = subband->maxTTLevel; level >= 0; --level) { - nx = jpxCeilDivPow2(subband->nXCBs, level); - ny = jpxCeilDivPow2(subband->nYCBs, level); - j = i + (cbY >> level) * nx + (cbX >> level); - if (!subband->inclusion[j].finished && - !subband->inclusion[j].val) { - subband->inclusion[j].val = ttVal; - } else { - ttVal = subband->inclusion[j].val; - } - while (!subband->inclusion[j].finished && - ttVal <= tile->layer) { - if (!readBits(1, &bits)) { - goto err; - } - if (bits == 1) { - subband->inclusion[j].finished = gTrue; - } else { - ++ttVal; - } - } - subband->inclusion[j].val = ttVal; - if (ttVal > tile->layer) { - break; - } - i += nx * ny; - } - cb->included = level < 0; - } - - if (cb->included) { - cover(49); - - // zero bit-plane count - if (!cb->seen) { - cover(50); - ttVal = 0; - i = 0; - for (level = subband->maxTTLevel; level >= 0; --level) { - nx = jpxCeilDivPow2(subband->nXCBs, level); - ny = jpxCeilDivPow2(subband->nYCBs, level); - j = i + (cbY >> level) * nx + (cbX >> level); - if (!subband->zeroBitPlane[j].finished && - !subband->zeroBitPlane[j].val) { - subband->zeroBitPlane[j].val = ttVal; - } else { - ttVal = subband->zeroBitPlane[j].val; - } - while (!subband->zeroBitPlane[j].finished) { - if (!readBits(1, &bits)) { - goto err; - } - if (bits == 1) { - subband->zeroBitPlane[j].finished = gTrue; - } else { - ++ttVal; - } - } - subband->zeroBitPlane[j].val = ttVal; - i += nx * ny; - } - cb->nZeroBitPlanes = ttVal; - } - - // number of coding passes - if (!readBits(1, &bits)) { - goto err; - } - if (bits == 0) { - cover(51); - cb->nCodingPasses = 1; - } else { - if (!readBits(1, &bits)) { - goto err; - } - if (bits == 0) { - cover(52); - cb->nCodingPasses = 2; - } else { - cover(53); - if (!readBits(2, &bits)) { - goto err; - } - if (bits < 3) { - cover(54); - cb->nCodingPasses = 3 + bits; - } else { - cover(55); - if (!readBits(5, &bits)) { - goto err; - } - if (bits < 31) { - cover(56); - cb->nCodingPasses = 6 + bits; - } else { - cover(57); - if (!readBits(7, &bits)) { - goto err; - } - cb->nCodingPasses = 37 + bits; - } - } - } - } - - // update Lblock - while (1) { - if (!readBits(1, &bits)) { - goto err; - } - if (!bits) { - break; - } - ++cb->lBlock; - } - - // length of compressed data - //~ deal with multiple codeword segments - for (n = cb->lBlock, i = cb->nCodingPasses >> 1; - i; - ++n, i >>= 1) ; - if (!readBits(n, &cb->dataLen)) { - goto err; - } - } - } - } - } - } - tilePartLen = finishBitBuf(); - - //----- packet data - - for (sb = 0; sb < (Guint)(tile->res == 0 ? 1 : 3); ++sb) { - subband = &precinct->subbands[sb]; - for (cbY = 0; cbY < subband->nYCBs; ++cbY) { - for (cbX = 0; cbX < subband->nXCBs; ++cbX) { - cb = &subband->cbs[cbY * subband->nXCBs + cbX]; - if (cb->included) { - if (!readCodeBlockData(tileComp, resLevel, precinct, subband, - tile->res, sb, cb)) { - return gFalse; - } - tilePartLen -= cb->dataLen; - cb->seen = gTrue; - } - } - } - } - - //----- next packet - - switch (tile->progOrder) { - case 0: // layer, resolution level, component, precinct - cover(58); - if (++tile->comp == img.nComps) { - tile->comp = 0; - if (++tile->res == tile->maxNDecompLevels + 1) { - tile->res = 0; - if (++tile->layer == tile->nLayers) { - tile->layer = 0; - } - } - } - break; - case 1: // resolution level, layer, component, precinct - cover(59); - if (++tile->comp == img.nComps) { - tile->comp = 0; - if (++tile->layer == tile->nLayers) { - tile->layer = 0; - if (++tile->res == tile->maxNDecompLevels + 1) { - tile->res = 0; - } - } - } - break; - case 2: // resolution level, precinct, component, layer - //~ this isn't correct -- see B.12.1.3 - cover(60); - if (++tile->layer == tile->nLayers) { - tile->layer = 0; - if (++tile->comp == img.nComps) { - tile->comp = 0; - if (++tile->res == tile->maxNDecompLevels + 1) { - tile->res = 0; - } - } - } - break; - case 3: // precinct, component, resolution level, layer - //~ this isn't correct -- see B.12.1.4 - cover(61); - if (++tile->layer == tile->nLayers) { - tile->layer = 0; - if (++tile->res == tile->maxNDecompLevels + 1) { - tile->res = 0; - if (++tile->comp == img.nComps) { - tile->comp = 0; - } - } - } - break; - case 4: // component, precinct, resolution level, layer - //~ this isn't correct -- see B.12.1.5 - cover(62); - if (++tile->layer == tile->nLayers) { - tile->layer = 0; - if (++tile->res == tile->maxNDecompLevels + 1) { - tile->res = 0; - if (++tile->comp == img.nComps) { - tile->comp = 0; - } - } - } - break; - } - } - - return gTrue; - - err: - error(getPos(), "Error in JPX stream"); - return gFalse; -} - -GBool JPXStream::readCodeBlockData(JPXTileComp *tileComp, - JPXResLevel *resLevel, - JPXPrecinct *precinct, - JPXSubband *subband, - Guint res, Guint sb, - JPXCodeBlock *cb) { - JPXCoeff *coeff0, *coeff1, *coeff; - Guint horiz, vert, diag, all, cx, xorBit; - int horizSign, vertSign; - Guint i, x, y0, y1, y2; - - if (cb->arithDecoder) { - cover(63); - cb->arithDecoder->restart(cb->dataLen); - } else { - cover(64); - cb->arithDecoder = new JArithmeticDecoder(); - cb->arithDecoder->setStream(str, cb->dataLen); - cb->arithDecoder->start(); - cb->stats = new JArithmeticDecoderStats(jpxNContexts); - cb->stats->setEntry(jpxContextSigProp, 4, 0); - cb->stats->setEntry(jpxContextRunLength, 3, 0); - cb->stats->setEntry(jpxContextUniform, 46, 0); - } - - for (i = 0; i < cb->nCodingPasses; ++i) { - switch (cb->nextPass) { - - //----- significance propagation pass - case jpxPassSigProp: - cover(65); - for (y0 = cb->y0, coeff0 = cb->coeffs; - y0 < cb->y1; - y0 += 4, coeff0 += 4 << tileComp->codeBlockW) { - for (x = cb->x0, coeff1 = coeff0; - x < cb->x1; - ++x, ++coeff1) { - for (y1 = 0, coeff = coeff1; - y1 < 4 && y0+y1 < cb->y1; - ++y1, coeff += tileComp->cbW) { - if (!(coeff->flags & jpxCoeffSignificant)) { - horiz = vert = diag = 0; - horizSign = vertSign = 2; - if (x > cb->x0) { - if (coeff[-1].flags & jpxCoeffSignificant) { - ++horiz; - horizSign += (coeff[-1].flags & jpxCoeffSign) ? -1 : 1; - } - if (y0+y1 > cb->y0) { - diag += (coeff[-(int)tileComp->cbW - 1].flags - >> jpxCoeffSignificantB) & 1; - } - if (y0+y1 < cb->y1 - 1) { - diag += (coeff[tileComp->cbW - 1].flags - >> jpxCoeffSignificantB) & 1; - } - } - if (x < cb->x1 - 1) { - if (coeff[1].flags & jpxCoeffSignificant) { - ++horiz; - horizSign += (coeff[1].flags & jpxCoeffSign) ? -1 : 1; - } - if (y0+y1 > cb->y0) { - diag += (coeff[-(int)tileComp->cbW + 1].flags - >> jpxCoeffSignificantB) & 1; - } - if (y0+y1 < cb->y1 - 1) { - diag += (coeff[tileComp->cbW + 1].flags - >> jpxCoeffSignificantB) & 1; - } - } - if (y0+y1 > cb->y0) { - if (coeff[-(int)tileComp->cbW].flags & jpxCoeffSignificant) { - ++vert; - vertSign += (coeff[-(int)tileComp->cbW].flags & jpxCoeffSign) - ? -1 : 1; - } - } - if (y0+y1 < cb->y1 - 1) { - if (coeff[tileComp->cbW].flags & jpxCoeffSignificant) { - ++vert; - vertSign += (coeff[tileComp->cbW].flags & jpxCoeffSign) - ? -1 : 1; - } - } - cx = sigPropContext[horiz][vert][diag][res == 0 ? 1 : sb]; - if (cx != 0) { - if (cb->arithDecoder->decodeBit(cx, cb->stats)) { - coeff->flags |= jpxCoeffSignificant | jpxCoeffFirstMagRef; - coeff->mag = (coeff->mag << 1) | 1; - cx = signContext[horizSign][vertSign][0]; - xorBit = signContext[horizSign][vertSign][1]; - if (cb->arithDecoder->decodeBit(cx, cb->stats) ^ xorBit) { - coeff->flags |= jpxCoeffSign; - } - } - ++coeff->len; - coeff->flags |= jpxCoeffTouched; - } - } - } - } - } - ++cb->nextPass; - break; - - //----- magnitude refinement pass - case jpxPassMagRef: - cover(66); - for (y0 = cb->y0, coeff0 = cb->coeffs; - y0 < cb->y1; - y0 += 4, coeff0 += 4 << tileComp->codeBlockW) { - for (x = cb->x0, coeff1 = coeff0; - x < cb->x1; - ++x, ++coeff1) { - for (y1 = 0, coeff = coeff1; - y1 < 4 && y0+y1 < cb->y1; - ++y1, coeff += tileComp->cbW) { - if ((coeff->flags & jpxCoeffSignificant) && - !(coeff->flags & jpxCoeffTouched)) { - if (coeff->flags & jpxCoeffFirstMagRef) { - all = 0; - if (x > cb->x0) { - all += (coeff[-1].flags >> jpxCoeffSignificantB) & 1; - if (y0+y1 > cb->y0) { - all += (coeff[-(int)tileComp->cbW - 1].flags - >> jpxCoeffSignificantB) & 1; - } - if (y0+y1 < cb->y1 - 1) { - all += (coeff[tileComp->cbW - 1].flags - >> jpxCoeffSignificantB) & 1; - } - } - if (x < cb->x1 - 1) { - all += (coeff[1].flags >> jpxCoeffSignificantB) & 1; - if (y0+y1 > cb->y0) { - all += (coeff[-(int)tileComp->cbW + 1].flags - >> jpxCoeffSignificantB) & 1; - } - if (y0+y1 < cb->y1 - 1) { - all += (coeff[tileComp->cbW + 1].flags - >> jpxCoeffSignificantB) & 1; - } - } - if (y0+y1 > cb->y0) { - all += (coeff[-(int)tileComp->cbW].flags - >> jpxCoeffSignificantB) & 1; - } - if (y0+y1 < cb->y1 - 1) { - all += (coeff[tileComp->cbW].flags - >> jpxCoeffSignificantB) & 1; - } - cx = all ? 15 : 14; - } else { - cx = 16; - } - coeff->mag = (coeff->mag << 1) | - cb->arithDecoder->decodeBit(cx, cb->stats); - ++coeff->len; - coeff->flags |= jpxCoeffTouched; - coeff->flags &= ~jpxCoeffFirstMagRef; - } - } - } - } - ++cb->nextPass; - break; - - //----- cleanup pass - case jpxPassCleanup: - cover(67); - for (y0 = cb->y0, coeff0 = cb->coeffs; - y0 < cb->y1; - y0 += 4, coeff0 += 4 << tileComp->codeBlockW) { - for (x = cb->x0, coeff1 = coeff0; - x < cb->x1; - ++x, ++coeff1) { - y1 = 0; - if (y0 + 3 < cb->y1 && - !(coeff1->flags & jpxCoeffTouched) && - !(coeff1[tileComp->cbW].flags & jpxCoeffTouched) && - !(coeff1[2 * tileComp->cbW].flags & jpxCoeffTouched) && - !(coeff1[3 * tileComp->cbW].flags & jpxCoeffTouched) && - (x == cb->x0 || y0 == cb->y0 || - !(coeff1[-(int)tileComp->cbW - 1].flags - & jpxCoeffSignificant)) && - (y0 == cb->y0 || - !(coeff1[-(int)tileComp->cbW].flags - & jpxCoeffSignificant)) && - (x == cb->x1 - 1 || y0 == cb->y0 || - !(coeff1[-(int)tileComp->cbW + 1].flags - & jpxCoeffSignificant)) && - (x == cb->x0 || - (!(coeff1[-1].flags & jpxCoeffSignificant) && - !(coeff1[tileComp->cbW - 1].flags - & jpxCoeffSignificant) && - !(coeff1[2 * tileComp->cbW - 1].flags - & jpxCoeffSignificant) && - !(coeff1[3 * tileComp->cbW - 1].flags - & jpxCoeffSignificant))) && - (x == cb->x1 - 1 || - (!(coeff1[1].flags & jpxCoeffSignificant) && - !(coeff1[tileComp->cbW + 1].flags - & jpxCoeffSignificant) && - !(coeff1[2 * tileComp->cbW + 1].flags - & jpxCoeffSignificant) && - !(coeff1[3 * tileComp->cbW + 1].flags - & jpxCoeffSignificant))) && - (x == cb->x0 || y0+4 == cb->y1 || - !(coeff1[4 * tileComp->cbW - 1].flags & jpxCoeffSignificant)) && - (y0+4 == cb->y1 || - !(coeff1[4 * tileComp->cbW].flags & jpxCoeffSignificant)) && - (x == cb->x1 - 1 || y0+4 == cb->y1 || - !(coeff1[4 * tileComp->cbW + 1].flags - & jpxCoeffSignificant))) { - if (cb->arithDecoder->decodeBit(jpxContextRunLength, cb->stats)) { - y1 = cb->arithDecoder->decodeBit(jpxContextUniform, cb->stats); - y1 = (y1 << 1) | - cb->arithDecoder->decodeBit(jpxContextUniform, cb->stats); - for (y2 = 0, coeff = coeff1; - y2 < y1; - ++y2, coeff += tileComp->cbW) { - ++coeff->len; - } - coeff->flags |= jpxCoeffSignificant | jpxCoeffFirstMagRef; - coeff->mag = (coeff->mag << 1) | 1; - ++coeff->len; - cx = signContext[2][2][0]; - xorBit = signContext[2][2][1]; - if (cb->arithDecoder->decodeBit(cx, cb->stats) ^ xorBit) { - coeff->flags |= jpxCoeffSign; - } - ++y1; - } else { - for (y1 = 0, coeff = coeff1; - y1 < 4; - ++y1, coeff += tileComp->cbW) { - ++coeff->len; - } - y1 = 4; - } - } - for (coeff = &coeff1[y1 << tileComp->codeBlockW]; - y1 < 4 && y0 + y1 < cb->y1; - ++y1, coeff += tileComp->cbW) { - if (!(coeff->flags & jpxCoeffTouched)) { - horiz = vert = diag = 0; - horizSign = vertSign = 2; - if (x > cb->x0) { - if (coeff[-1].flags & jpxCoeffSignificant) { - ++horiz; - horizSign += (coeff[-1].flags & jpxCoeffSign) ? -1 : 1; - } - if (y0+y1 > cb->y0) { - diag += (coeff[-(int)tileComp->cbW - 1].flags - >> jpxCoeffSignificantB) & 1; - } - if (y0+y1 < cb->y1 - 1) { - diag += (coeff[tileComp->cbW - 1].flags - >> jpxCoeffSignificantB) & 1; - } - } - if (x < cb->x1 - 1) { - if (coeff[1].flags & jpxCoeffSignificant) { - ++horiz; - horizSign += (coeff[1].flags & jpxCoeffSign) ? -1 : 1; - } - if (y0+y1 > cb->y0) { - diag += (coeff[-(int)tileComp->cbW + 1].flags - >> jpxCoeffSignificantB) & 1; - } - if (y0+y1 < cb->y1 - 1) { - diag += (coeff[tileComp->cbW + 1].flags - >> jpxCoeffSignificantB) & 1; - } - } - if (y0+y1 > cb->y0) { - if (coeff[-(int)tileComp->cbW].flags & jpxCoeffSignificant) { - ++vert; - vertSign += (coeff[-(int)tileComp->cbW].flags & jpxCoeffSign) - ? -1 : 1; - } - } - if (y0+y1 < cb->y1 - 1) { - if (coeff[tileComp->cbW].flags & jpxCoeffSignificant) { - ++vert; - vertSign += (coeff[tileComp->cbW].flags & jpxCoeffSign) - ? -1 : 1; - } - } - cx = sigPropContext[horiz][vert][diag][res == 0 ? 1 : sb]; - if (cb->arithDecoder->decodeBit(cx, cb->stats)) { - coeff->flags |= jpxCoeffSignificant | jpxCoeffFirstMagRef; - coeff->mag = (coeff->mag << 1) | 1; - cx = signContext[horizSign][vertSign][0]; - xorBit = signContext[horizSign][vertSign][1]; - if (cb->arithDecoder->decodeBit(cx, cb->stats) ^ xorBit) { - coeff->flags |= jpxCoeffSign; - } - } - ++coeff->len; - } else { - coeff->flags &= ~jpxCoeffTouched; - } - } - } - } - cb->nextPass = jpxPassSigProp; - break; - } - } - - cb->arithDecoder->cleanup(); - return gTrue; -} - -// Inverse quantization, and wavelet transform (IDWT). This also does -// the initial shift to convert to fixed point format. -void JPXStream::inverseTransform(JPXTileComp *tileComp) { - JPXResLevel *resLevel; - JPXPrecinct *precinct; - JPXSubband *subband; - JPXCodeBlock *cb; - JPXCoeff *coeff0, *coeff; - Guint qStyle, guard, eps, shift; - int shift2; - double mu; - int val; - int *dataPtr; - Guint nx0, ny0, nx1, ny1; - Guint r, cbX, cbY, x, y; - - cover(68); - - //----- (NL)LL subband (resolution level 0) - - resLevel = &tileComp->resLevels[0]; - precinct = &resLevel->precincts[0]; - subband = &precinct->subbands[0]; - - // i-quant parameters - qStyle = tileComp->quantStyle & 0x1f; - guard = (tileComp->quantStyle >> 5) & 7; - if (qStyle == 0) { - cover(69); - eps = (tileComp->quantSteps[0] >> 3) & 0x1f; - shift = guard + eps - 1; - mu = 0; // make gcc happy - } else { - cover(70); - shift = guard - 1 + tileComp->prec; - mu = (double)(0x800 + (tileComp->quantSteps[0] & 0x7ff)) / 2048.0; - } - if (tileComp->transform == 0) { - cover(71); - shift += fracBits; - } - - // copy (NL)LL into the upper-left corner of the data array, doing - // the fixed point adjustment and dequantization along the way - cb = subband->cbs; - for (cbY = 0; cbY < subband->nYCBs; ++cbY) { - for (cbX = 0; cbX < subband->nXCBs; ++cbX) { - for (y = cb->y0, coeff0 = cb->coeffs; - y < cb->y1; - ++y, coeff0 += tileComp->cbW) { - dataPtr = &tileComp->data[(y - subband->y0) - * (tileComp->x1 - tileComp->x0) - + (cb->x0 - subband->x0)]; - for (x = cb->x0, coeff = coeff0; x < cb->x1; ++x, ++coeff) { - val = (int)coeff->mag; - if (val != 0) { - shift2 = shift - (cb->nZeroBitPlanes + coeff->len); - if (shift2 > 0) { - cover(94); - val = (val << shift2) + (1 << (shift2 - 1)); - } else { - cover(95); - val >>= -shift2; - } - if (qStyle == 0) { - cover(96); - if (tileComp->transform == 0) { - cover(97); - val &= -1 << fracBits; - } - } else { - cover(98); - val = (int)((double)val * mu); - } - if (coeff->flags & jpxCoeffSign) { - cover(99); - val = -val; - } - } - *dataPtr++ = val; - } - } - ++cb; - } - } - - //----- IDWT for each level - - for (r = 1; r <= tileComp->nDecompLevels; ++r) { - resLevel = &tileComp->resLevels[r]; - - // (n)LL is already in the upper-left corner of the - // tile-component data array -- interleave with (n)HL/LH/HH - // and inverse transform to get (n-1)LL, which will be stored - // in the upper-left corner of the tile-component data array - if (r == tileComp->nDecompLevels) { - cover(72); - nx0 = tileComp->x0; - ny0 = tileComp->y0; - nx1 = tileComp->x1; - ny1 = tileComp->y1; - } else { - cover(73); - nx0 = tileComp->resLevels[r+1].x0; - ny0 = tileComp->resLevels[r+1].y0; - nx1 = tileComp->resLevels[r+1].x1; - ny1 = tileComp->resLevels[r+1].y1; - } - inverseTransformLevel(tileComp, r, resLevel, nx0, ny0, nx1, ny1); - } -} - -// Do one level of the inverse transform: -// - take (n)LL from the tile-component data array -// - take (n)HL/LH/HH from <resLevel> -// - leave the resulting (n-1)LL in the tile-component data array -void JPXStream::inverseTransformLevel(JPXTileComp *tileComp, - Guint r, JPXResLevel *resLevel, - Guint nx0, Guint ny0, - Guint nx1, Guint ny1) { - JPXPrecinct *precinct; - JPXSubband *subband; - JPXCodeBlock *cb; - JPXCoeff *coeff0, *coeff; - Guint qStyle, guard, eps, shift, t; - int shift2; - double mu; - int val; - int *dataPtr; - Guint xo, yo; - Guint x, y, sb, cbX, cbY; - int xx, yy; - - //----- interleave - - // spread out LL - for (yy = resLevel->y1 - 1; yy >= (int)resLevel->y0; --yy) { - for (xx = resLevel->x1 - 1; xx >= (int)resLevel->x0; --xx) { - tileComp->data[(2 * yy - ny0) * (tileComp->x1 - tileComp->x0) - + (2 * xx - nx0)] = - tileComp->data[(yy - resLevel->y0) * (tileComp->x1 - tileComp->x0) - + (xx - resLevel->x0)]; - } - } - - // i-quant parameters - qStyle = tileComp->quantStyle & 0x1f; - guard = (tileComp->quantStyle >> 5) & 7; - - // interleave HL/LH/HH - precinct = &resLevel->precincts[0]; - for (sb = 0; sb < 3; ++sb) { - - // i-quant parameters - if (qStyle == 0) { - cover(100); - eps = (tileComp->quantSteps[3*r - 2 + sb] >> 3) & 0x1f; - shift = guard + eps - 1; - mu = 0; // make gcc happy - } else { - cover(101); - shift = guard + tileComp->prec; - if (sb == 2) { - cover(102); - ++shift; - } - t = tileComp->quantSteps[qStyle == 1 ? 0 : (3*r - 2 + sb)]; - mu = (double)(0x800 + (t & 0x7ff)) / 2048.0; - } - if (tileComp->transform == 0) { - cover(103); - shift += fracBits; - } - - // copy the subband coefficients into the data array, doing the - // fixed point adjustment and dequantization along the way - xo = (sb & 1) ? 0 : 1; - yo = (sb > 0) ? 1 : 0; - subband = &precinct->subbands[sb]; - cb = subband->cbs; - for (cbY = 0; cbY < subband->nYCBs; ++cbY) { - for (cbX = 0; cbX < subband->nXCBs; ++cbX) { - for (y = cb->y0, coeff0 = cb->coeffs; - y < cb->y1; - ++y, coeff0 += tileComp->cbW) { - dataPtr = &tileComp->data[(2 * y + yo - ny0) - * (tileComp->x1 - tileComp->x0) - + (2 * cb->x0 + xo - nx0)]; - for (x = cb->x0, coeff = coeff0; x < cb->x1; ++x, ++coeff) { - val = (int)coeff->mag; - if (val != 0) { - shift2 = shift - (cb->nZeroBitPlanes + coeff->len); - if (shift2 > 0) { - cover(74); - val = (val << shift2) + (1 << (shift2 - 1)); - } else { - cover(75); - val >>= -shift2; - } - if (qStyle == 0) { - cover(76); - if (tileComp->transform == 0) { - val &= -1 << fracBits; - } - } else { - cover(77); - val = (int)((double)val * mu); - } - if (coeff->flags & jpxCoeffSign) { - cover(78); - val = -val; - } - } - *dataPtr = val; - dataPtr += 2; - } - } - ++cb; - } - } - } - - //----- horizontal (row) transforms - dataPtr = tileComp->data; - for (y = 0; y < ny1 - ny0; ++y) { - inverseTransform1D(tileComp, dataPtr, 1, nx0, nx1); - dataPtr += tileComp->x1 - tileComp->x0; - } - - //----- vertical (column) transforms - dataPtr = tileComp->data; - for (x = 0; x < nx1 - nx0; ++x) { - inverseTransform1D(tileComp, dataPtr, - tileComp->x1 - tileComp->x0, ny0, ny1); - ++dataPtr; - } -} - -void JPXStream::inverseTransform1D(JPXTileComp *tileComp, - int *data, Guint stride, - Guint i0, Guint i1) { - int *buf; - Guint offset, end, i; - - //----- special case for length = 1 - if (i1 - i0 == 1) { - cover(79); - if (i0 & 1) { - cover(104); - *data >>= 1; - } - - } else { - cover(80); - - // choose an offset: this makes even buf[] indexes correspond to - // odd values of i, and vice versa - offset = 3 + (i0 & 1); - end = offset + i1 - i0; - - //----- gather - buf = tileComp->buf; - for (i = 0; i < i1 - i0; ++i) { - buf[offset + i] = data[i * stride]; - } - - //----- extend right - buf[end] = buf[end - 2]; - if (i1 - i0 == 2) { - cover(81); - buf[end+1] = buf[offset + 1]; - buf[end+2] = buf[offset]; - buf[end+3] = buf[offset + 1]; - } else { - cover(82); - buf[end+1] = buf[end - 3]; - if (i1 - i0 == 3) { - cover(105); - buf[end+2] = buf[offset + 1]; - buf[end+3] = buf[offset + 2]; - } else { - cover(106); - buf[end+2] = buf[end - 4]; - if (i1 - i0 == 4) { - cover(107); - buf[end+3] = buf[offset + 1]; - } else { - cover(108); - buf[end+3] = buf[end - 5]; - } - } - } - - //----- extend left - buf[offset - 1] = buf[offset + 1]; - buf[offset - 2] = buf[offset + 2]; - buf[offset - 3] = buf[offset + 3]; - if (offset == 4) { - cover(83); - buf[0] = buf[offset + 4]; - } - - //----- 9-7 irreversible filter - - if (tileComp->transform == 0) { - cover(84); - // step 1 (even) - for (i = 1; i <= end + 2; i += 2) { - buf[i] = (int)(idwtKappa * buf[i]); - } - // step 2 (odd) - for (i = 0; i <= end + 3; i += 2) { - buf[i] = (int)(idwtIKappa * buf[i]); - } - // step 3 (even) - for (i = 1; i <= end + 2; i += 2) { - buf[i] = (int)(buf[i] - idwtDelta * (buf[i-1] + buf[i+1])); - } - // step 4 (odd) - for (i = 2; i <= end + 1; i += 2) { - buf[i] = (int)(buf[i] - idwtGamma * (buf[i-1] + buf[i+1])); - } - // step 5 (even) - for (i = 3; i <= end; i += 2) { - buf[i] = (int)(buf[i] - idwtBeta * (buf[i-1] + buf[i+1])); - } - // step 6 (odd) - for (i = 4; i <= end - 1; i += 2) { - buf[i] = (int)(buf[i] - idwtAlpha * (buf[i-1] + buf[i+1])); - } - - //----- 5-3 reversible filter - - } else { - cover(85); - // step 1 (even) - for (i = 3; i <= end; i += 2) { - buf[i] -= (buf[i-1] + buf[i+1] + 2) >> 2; - } - // step 2 (odd) - for (i = 4; i < end; i += 2) { - buf[i] += (buf[i-1] + buf[i+1]) >> 1; - } - } - - //----- scatter - for (i = 0; i < i1 - i0; ++i) { - data[i * stride] = buf[offset + i]; - } - } -} - -// Inverse multi-component transform and DC level shift. This also -// converts fixed point samples back to integers. -GBool JPXStream::inverseMultiCompAndDC(JPXTile *tile) { - JPXTileComp *tileComp; - int coeff, d0, d1, d2, t, minVal, maxVal, zeroVal; - int *dataPtr; - Guint j, comp, x, y; - - //----- inverse multi-component transform - - if (tile->multiComp == 1) { - cover(86); - if (img.nComps < 3 || - tile->tileComps[0].hSep != tile->tileComps[1].hSep || - tile->tileComps[0].vSep != tile->tileComps[1].vSep || - tile->tileComps[1].hSep != tile->tileComps[2].hSep || - tile->tileComps[1].vSep != tile->tileComps[2].vSep) { - return gFalse; - } - - // inverse irreversible multiple component transform - if (tile->tileComps[0].transform == 0) { - cover(87); - j = 0; - for (y = 0; y < tile->tileComps[0].y1 - tile->tileComps[0].y0; ++y) { - for (x = 0; x < tile->tileComps[0].x1 - tile->tileComps[0].x0; ++x) { - d0 = tile->tileComps[0].data[j]; - d1 = tile->tileComps[1].data[j]; - d2 = tile->tileComps[2].data[j]; - tile->tileComps[0].data[j] = (int)(d0 + 1.402 * d2 + 0.5); - tile->tileComps[1].data[j] = - (int)(d0 - 0.34413 * d1 - 0.71414 * d2 + 0.5); - tile->tileComps[2].data[j] = (int)(d0 + 1.772 * d1 + 0.5); - ++j; - } - } - - // inverse reversible multiple component transform - } else { - cover(88); - j = 0; - for (y = 0; y < tile->tileComps[0].y1 - tile->tileComps[0].y0; ++y) { - for (x = 0; x < tile->tileComps[0].x1 - tile->tileComps[0].x0; ++x) { - d0 = tile->tileComps[0].data[j]; - d1 = tile->tileComps[1].data[j]; - d2 = tile->tileComps[2].data[j]; - tile->tileComps[1].data[j] = t = d0 - ((d2 + d1) >> 2); - tile->tileComps[0].data[j] = d2 + t; - tile->tileComps[2].data[j] = d1 + t; - ++j; - } - } - } - } - - //----- DC level shift - for (comp = 0; comp < img.nComps; ++comp) { - tileComp = &tile->tileComps[comp]; - - // signed: clip - if (tileComp->sgned) { - cover(89); - minVal = -(1 << (tileComp->prec - 1)); - maxVal = (1 << (tileComp->prec - 1)) - 1; - dataPtr = tileComp->data; - for (y = 0; y < tileComp->y1 - tileComp->y0; ++y) { - for (x = 0; x < tileComp->x1 - tileComp->x0; ++x) { - coeff = *dataPtr; - if (tileComp->transform == 0) { - cover(109); - coeff >>= fracBits; - } - if (coeff < minVal) { - cover(110); - coeff = minVal; - } else if (coeff > maxVal) { - cover(111); - coeff = maxVal; - } - *dataPtr++ = coeff; - } - } - - // unsigned: inverse DC level shift and clip - } else { - cover(90); - maxVal = (1 << tileComp->prec) - 1; - zeroVal = 1 << (tileComp->prec - 1); - dataPtr = tileComp->data; - for (y = 0; y < tileComp->y1 - tileComp->y0; ++y) { - for (x = 0; x < tileComp->x1 - tileComp->x0; ++x) { - coeff = *dataPtr; - if (tileComp->transform == 0) { - cover(112); - coeff >>= fracBits; - } - coeff += zeroVal; - if (coeff < 0) { - cover(113); - coeff = 0; - } else if (coeff > maxVal) { - cover(114); - coeff = maxVal; - } - *dataPtr++ = coeff; - } - } - } - } - - return gTrue; -} - -GBool JPXStream::readBoxHdr(Guint *boxType, Guint *boxLen, Guint *dataLen) { - Guint len, lenH; - - if (!readULong(&len) || - !readULong(boxType)) { - return gFalse; - } - if (len == 1) { - if (!readULong(&lenH) || !readULong(&len)) { - return gFalse; - } - if (lenH) { - error(getPos(), "JPX stream contains a box larger than 2^32 bytes"); - return gFalse; - } - *boxLen = len; - *dataLen = len - 16; - } else if (len == 0) { - *boxLen = 0; - *dataLen = 0; - } else { - *boxLen = len; - *dataLen = len - 8; - } - return gTrue; -} - -int JPXStream::readMarkerHdr(int *segType, Guint *segLen) { - int c; - - do { - do { - if ((c = str->getChar()) == EOF) { - return gFalse; - } - } while (c != 0xff); - do { - if ((c = str->getChar()) == EOF) { - return gFalse; - } - } while (c == 0xff); - } while (c == 0x00); - *segType = c; - if ((c >= 0x30 && c <= 0x3f) || - c == 0x4f || c == 0x92 || c == 0x93 || c == 0xd9) { - *segLen = 0; - return gTrue; - } - return readUWord(segLen); -} - -GBool JPXStream::readUByte(Guint *x) { - int c0; - - if ((c0 = str->getChar()) == EOF) { - return gFalse; - } - *x = (Guint)c0; - return gTrue; -} - -GBool JPXStream::readByte(int *x) { - int c0; - - if ((c0 = str->getChar()) == EOF) { - return gFalse; - } - *x = c0; - if (c0 & 0x80) { - *x |= -1 - 0xff; - } - return gTrue; -} - -GBool JPXStream::readUWord(Guint *x) { - int c0, c1; - - if ((c0 = str->getChar()) == EOF || - (c1 = str->getChar()) == EOF) { - return gFalse; - } - *x = (Guint)((c0 << 8) | c1); - return gTrue; -} - -GBool JPXStream::readULong(Guint *x) { - int c0, c1, c2, c3; - - if ((c0 = str->getChar()) == EOF || - (c1 = str->getChar()) == EOF || - (c2 = str->getChar()) == EOF || - (c3 = str->getChar()) == EOF) { - return gFalse; - } - *x = (Guint)((c0 << 24) | (c1 << 16) | (c2 << 8) | c3); - return gTrue; -} - -GBool JPXStream::readNBytes(int nBytes, GBool signd, int *x) { - int y, c, i; - - y = 0; - for (i = 0; i < nBytes; ++i) { - if ((c = str->getChar()) == EOF) { - return gFalse; - } - y = (y << 8) + c; - } - if (signd) { - if (y & (1 << (8 * nBytes - 1))) { - y |= -1 << (8 * nBytes); - } - } - *x = y; - return gTrue; -} - -GBool JPXStream::readBits(int nBits, Guint *x) { - int c; - - while (bitBufLen < nBits) { - if (byteCount == 0 || (c = str->getChar()) == EOF) { - return gFalse; - } - --byteCount; - if (bitBufSkip) { - bitBuf = (bitBuf << 7) | (c & 0x7f); - bitBufLen += 7; - } else { - bitBuf = (bitBuf << 8) | (c & 0xff); - bitBufLen += 8; - } - bitBufSkip = c == 0xff; - } - *x = (bitBuf >> (bitBufLen - nBits)) & ((1 << nBits) - 1); - bitBufLen -= nBits; - return gTrue; -} - -void JPXStream::startBitBuf(Guint byteCountA) { - bitBufLen = 0; - bitBufSkip = gFalse; - byteCount = byteCountA; -} - -Guint JPXStream::finishBitBuf() { - if (bitBufSkip) { - str->getChar(); - --byteCount; - } - return byteCount; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/JPXStream.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/JPXStream.h deleted file mode 100644 index 2e0bda32eb3..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/JPXStream.h +++ /dev/null @@ -1,349 +0,0 @@ -//======================================================================== -// -// JPXStream.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef JPXSTREAM_H -#define JPXSTREAM_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include "Object.h" -#include "Stream.h" - -class JArithmeticDecoder; -class JArithmeticDecoderStats; - -//------------------------------------------------------------------------ - -enum JPXColorSpaceType { - jpxCSBiLevel = 0, - jpxCSYCbCr1 = 1, - jpxCSYCbCr2 = 3, - jpxCSYCBCr3 = 4, - jpxCSPhotoYCC = 9, - jpxCSCMY = 11, - jpxCSCMYK = 12, - jpxCSYCCK = 13, - jpxCSCIELab = 14, - jpxCSsRGB = 16, - jpxCSGrayscale = 17, - jpxCSBiLevel2 = 18, - jpxCSCIEJab = 19, - jpxCSCISesRGB = 20, - jpxCSROMMRGB = 21, - jpxCSsRGBYCbCr = 22, - jpxCSYPbPr1125 = 23, - jpxCSYPbPr1250 = 24 -}; - -struct JPXColorSpecCIELab { - Guint rl, ol, ra, oa, rb, ob, il; -}; - -struct JPXColorSpecEnumerated { - JPXColorSpaceType type; // color space type - union { - JPXColorSpecCIELab cieLab; - }; -}; - -struct JPXColorSpec { - Guint meth; // method - int prec; // precedence - union { - JPXColorSpecEnumerated enumerated; - }; -}; - -//------------------------------------------------------------------------ - -struct JPXPalette { - Guint nEntries; // number of entries in the palette - Guint nComps; // number of components in each entry - Guint *bpc; // bits per component, for each component - int *c; // color data: - // c[i*nComps+j] = entry i, component j -}; - -//------------------------------------------------------------------------ - -struct JPXCompMap { - Guint nChannels; // number of channels - Guint *comp; // codestream components mapped to each channel - Guint *type; // 0 for direct use, 1 for palette mapping - Guint *pComp; // palette components to use -}; - -//------------------------------------------------------------------------ - -struct JPXChannelDefn { - Guint nChannels; // number of channels - Guint *idx; // channel indexes - Guint *type; // channel types - Guint *assoc; // channel associations -}; - -//------------------------------------------------------------------------ - -struct JPXTagTreeNode { - GBool finished; // true if this node is finished - Guint val; // current value -}; - -//------------------------------------------------------------------------ - -struct JPXCoeff { - Gushort flags; // flag bits - Gushort len; // number of significant bits in mag - Guint mag; // magnitude value -}; - -// coefficient flags -#define jpxCoeffSignificantB 0 -#define jpxCoeffTouchedB 1 -#define jpxCoeffFirstMagRefB 2 -#define jpxCoeffSignB 7 -#define jpxCoeffSignificant (1 << jpxCoeffSignificantB) -#define jpxCoeffTouched (1 << jpxCoeffTouchedB) -#define jpxCoeffFirstMagRef (1 << jpxCoeffFirstMagRefB) -#define jpxCoeffSign (1 << jpxCoeffSignB) - -//------------------------------------------------------------------------ - -struct JPXCodeBlock { - //----- size - Guint x0, y0, x1, y1; // bounds - - //----- persistent state - GBool seen; // true if this code-block has already - // been seen - Guint lBlock; // base number of bits used for pkt data length - Guint nextPass; // next coding pass - - //---- info from first packet - Guint nZeroBitPlanes; // number of zero bit planes - - //----- info for the current packet - Guint included; // code-block inclusion in this packet: - // 0=not included, 1=included - Guint nCodingPasses; // number of coding passes in this pkt - Guint dataLen; // pkt data length - - //----- coefficient data - JPXCoeff *coeffs; // the coefficients - JArithmeticDecoder // arithmetic decoder - *arithDecoder; - JArithmeticDecoderStats // arithmetic decoder stats - *stats; -}; - -//------------------------------------------------------------------------ - -struct JPXSubband { - //----- computed - Guint x0, y0, x1, y1; // bounds - Guint nXCBs, nYCBs; // number of code-blocks in the x and y - // directions - - //----- tag trees - Guint maxTTLevel; // max tag tree level - JPXTagTreeNode *inclusion; // inclusion tag tree for each subband - JPXTagTreeNode *zeroBitPlane; // zero-bit plane tag tree for each - // subband - - //----- children - JPXCodeBlock *cbs; // the code-blocks (len = nXCBs * nYCBs) -}; - -//------------------------------------------------------------------------ - -struct JPXPrecinct { - //----- computed - Guint x0, y0, x1, y1; // bounds of the precinct - - //----- children - JPXSubband *subbands; // the subbands -}; - -//------------------------------------------------------------------------ - -struct JPXResLevel { - //----- from the COD and COC segments (main and tile) - Guint precinctWidth; // log2(precinct width) - Guint precinctHeight; // log2(precinct height) - - //----- computed - Guint x0, y0, x1, y1; // bounds of the tile-comp (for this res level) - Guint bx0[3], by0[3], // subband bounds - bx1[3], by1[3]; - - //---- children - JPXPrecinct *precincts; // the precincts -}; - -//------------------------------------------------------------------------ - -struct JPXTileComp { - //----- from the SIZ segment - GBool sgned; // 1 for signed, 0 for unsigned - Guint prec; // precision, in bits - Guint hSep; // horizontal separation of samples - Guint vSep; // vertical separation of samples - - //----- from the COD and COC segments (main and tile) - Guint style; // coding style parameter (Scod / Scoc) - Guint nDecompLevels; // number of decomposition levels - Guint codeBlockW; // log2(code-block width) - Guint codeBlockH; // log2(code-block height) - Guint codeBlockStyle; // code-block style - Guint transform; // wavelet transformation - - //----- from the QCD and QCC segments (main and tile) - Guint quantStyle; // quantization style - Guint *quantSteps; // quantization step size for each subband - Guint nQuantSteps; // number of entries in quantSteps - - //----- computed - Guint x0, y0, x1, y1; // bounds of the tile-comp, in ref coords - Guint cbW; // code-block width - Guint cbH; // code-block height - - //----- image data - int *data; // the decoded image data - int *buf; // intermediate buffer for the inverse - // transform - - //----- children - JPXResLevel *resLevels; // the resolution levels - // (len = nDecompLevels + 1) -}; - -//------------------------------------------------------------------------ - -struct JPXTile { - //----- from the COD segments (main and tile) - Guint progOrder; // progression order - Guint nLayers; // number of layers - Guint multiComp; // multiple component transformation - - //----- computed - Guint x0, y0, x1, y1; // bounds of the tile, in ref coords - Guint maxNDecompLevels; // max number of decomposition levels used - // in any component in this tile - - //----- progression order loop counters - Guint comp; // component - Guint res; // resolution level - Guint precinct; // precinct - Guint layer; // layer - - //----- children - JPXTileComp *tileComps; // the tile-components (len = JPXImage.nComps) -}; - -//------------------------------------------------------------------------ - -struct JPXImage { - //----- from the SIZ segment - Guint xSize, ySize; // size of reference grid - Guint xOffset, yOffset; // image offset - Guint xTileSize, yTileSize; // size of tiles - Guint xTileOffset, // offset of first tile - yTileOffset; - Guint nComps; // number of components - - //----- computed - Guint nXTiles; // number of tiles in x direction - Guint nYTiles; // number of tiles in y direction - - //----- children - JPXTile *tiles; // the tiles (len = nXTiles * nYTiles) -}; - -//------------------------------------------------------------------------ - -class JPXStream: public FilterStream { -public: - - JPXStream(Stream *strA); - virtual ~JPXStream(); - virtual StreamKind getKind() { return strJPX; } - virtual void reset(); - virtual void close(); - virtual int getChar(); - virtual int lookChar(); - virtual GooString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - virtual void getImageParams(int *bitsPerComponent, - StreamColorSpaceMode *csMode); - -private: - - void fillReadBuf(); - void getImageParams2(int *bitsPerComponent, StreamColorSpaceMode *csMode); - GBool readBoxes(); - GBool readColorSpecBox(Guint dataLen); - GBool readCodestream(Guint len); - GBool readTilePart(); - GBool readTilePartData(Guint tileIdx, - Guint tilePartLen, GBool tilePartToEOC); - GBool readCodeBlockData(JPXTileComp *tileComp, - JPXResLevel *resLevel, - JPXPrecinct *precinct, - JPXSubband *subband, - Guint res, Guint sb, - JPXCodeBlock *cb); - void inverseTransform(JPXTileComp *tileComp); - void inverseTransformLevel(JPXTileComp *tileComp, - Guint r, JPXResLevel *resLevel, - Guint nx0, Guint ny0, - Guint nx1, Guint ny1); - void inverseTransform1D(JPXTileComp *tileComp, - int *data, Guint stride, - Guint i0, Guint i1); - GBool inverseMultiCompAndDC(JPXTile *tile); - GBool readBoxHdr(Guint *boxType, Guint *boxLen, Guint *dataLen); - int readMarkerHdr(int *segType, Guint *segLen); - GBool readUByte(Guint *x); - GBool readByte(int *x); - GBool readUWord(Guint *x); - GBool readULong(Guint *x); - GBool readNBytes(int nBytes, GBool signd, int *x); - GBool readBits(int nBits, Guint *x); - void startBitBuf(Guint byteCountA); - Guint finishBitBuf(); - - Guint nComps; // number of components - Guint *bpc; // bits per component, for each component - Guint width, height; // image size - GBool haveImgHdr; // set if a JP2/JPX image header has been - // found - JPXColorSpec cs; // color specification - GBool haveCS; // set if a color spec has been found - JPXPalette palette; // the palette - GBool havePalette; // set if a palette has been found - JPXCompMap compMap; // the component mapping - GBool haveCompMap; // set if a component mapping has been found - JPXChannelDefn channelDefn; // channel definition - GBool haveChannelDefn; // set if a channel defn has been found - - JPXImage img; // JPEG2000 decoder data - Guint bitBuf; // buffer for bit reads - int bitBufLen; // number of bits in bitBuf - GBool bitBufSkip; // true if next bit should be skipped - // (for bit stuffing) - Guint byteCount; // number of available bytes left - - Guint curX, curY, curComp; // current position for lookChar/getChar - Guint readBuf; // read buffer - Guint readBufLen; // number of valid bits in readBuf -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Lexer.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Lexer.cc deleted file mode 100644 index bdc6d08861c..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Lexer.cc +++ /dev/null @@ -1,597 +0,0 @@ -//======================================================================== -// -// Lexer.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006-2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// Copyright (C) 2010 Carlos Garcia Campos <carlosgc@gnome.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <stddef.h> -#include <string.h> -#include <limits.h> -#include <ctype.h> -#include "Lexer.h" -#include "Error.h" -#include "XRef.h" - -//------------------------------------------------------------------------ - -// A '1' in this array means the character is white space. A '1' or -// '2' means the character ends a name or command. -static const char specialChars[256] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, // 0x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1x - 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, // 2x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, // 3x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 5x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 7x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ax - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // bx - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // cx - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // dx - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ex - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // fx -}; - -static const int IntegerSafeLimit = (INT_MAX - 9) / 10; - -//------------------------------------------------------------------------ -// Lexer -//------------------------------------------------------------------------ - -Lexer::Lexer(XRef *xrefA, Stream *str) { - Object obj; - - lookCharLastValueCached = LOOK_VALUE_NOT_CACHED; - xref = xrefA; - - curStr.initStream(str); - streams = new Array(xref); - streams->add(curStr.copy(&obj)); - strPtr = 0; - freeArray = gTrue; - curStr.streamReset(); -} - -Lexer::Lexer(XRef *xrefA, Object *obj) { - Object obj2; - - lookCharLastValueCached = LOOK_VALUE_NOT_CACHED; - xref = xrefA; - - if (obj->isStream()) { - streams = new Array(xref); - freeArray = gTrue; - streams->add(obj->copy(&obj2)); - } else { - streams = obj->getArray(); - freeArray = gFalse; - } - strPtr = 0; - if (streams->getLength() > 0) { - streams->get(strPtr, &curStr); - curStr.streamReset(); - } -} - -Lexer::~Lexer() { - if (!curStr.isNone()) { - curStr.streamClose(); - curStr.free(); - } - if (freeArray) { - delete streams; - } -} - -int Lexer::getChar(GBool comesFromLook) { - int c; - - if (LOOK_VALUE_NOT_CACHED != lookCharLastValueCached) { - c = lookCharLastValueCached; - lookCharLastValueCached = LOOK_VALUE_NOT_CACHED; - return c; - } - - c = EOF; - while (!curStr.isNone() && (c = curStr.streamGetChar()) == EOF) { - if (comesFromLook == gTrue) { - return EOF; - } else { - curStr.streamClose(); - curStr.free(); - ++strPtr; - if (strPtr < streams->getLength()) { - streams->get(strPtr, &curStr); - curStr.streamReset(); - } - } - } - return c; -} - -int Lexer::lookChar() { - - if (LOOK_VALUE_NOT_CACHED != lookCharLastValueCached) { - return lookCharLastValueCached; - } - lookCharLastValueCached = getChar(gTrue); - if (lookCharLastValueCached == EOF) { - lookCharLastValueCached = LOOK_VALUE_NOT_CACHED; - return EOF; - } else { - return lookCharLastValueCached; - } -} - -Object *Lexer::getObj(Object *obj, int objNum) { - char *p; - int c, c2; - GBool comment, neg, done, overflownInteger, overflownUnsignedInteger; - int numParen; - int xi; - unsigned int xui = 0; - double xf = 0, scale; - GooString *s; - int n, m; - - // skip whitespace and comments - comment = gFalse; - while (1) { - if ((c = getChar()) == EOF) { - return obj->initEOF(); - } - if (comment) { - if (c == '\r' || c == '\n') - comment = gFalse; - } else if (c == '%') { - comment = gTrue; - } else if (specialChars[c] != 1) { - break; - } - } - - // start reading token - switch (c) { - - // number - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - case '+': case '-': case '.': - overflownInteger = gFalse; - overflownUnsignedInteger = gFalse; - neg = gFalse; - xi = 0; - if (c == '-') { - neg = gTrue; - } else if (c == '.') { - goto doReal; - } else if (c != '+') { - xi = c - '0'; - } - while (1) { - c = lookChar(); - if (isdigit(c)) { - getChar(); - if (unlikely(overflownInteger)) { - if (overflownUnsignedInteger) { - xf = xf * 10.0 + (c - '0'); - } else { - overflownUnsignedInteger = gTrue; - xf = xui * 10.0 + (c - '0'); - } - } else { - if (unlikely(xi > IntegerSafeLimit) && - (xi > (INT_MAX - (c - '0')) / 10.0)) { - overflownInteger = gTrue; - if (xi > (UINT_MAX - (c - '0')) / 10.0) { - overflownUnsignedInteger = gTrue; - xf = xi * 10.0 + (c - '0'); - } else { - xui = (unsigned int)(xi * 10.0 + (c - '0')); - } - } else { - xi = xi * 10 + (c - '0'); - } - } - } else if (c == '.') { - getChar(); - goto doReal; - } else { - break; - } - } - if (neg) - xi = -xi; - if (unlikely(overflownInteger)) { - if (overflownUnsignedInteger) { - obj->initError(); - } else { - obj->initUint(xui); - } - } else { - obj->initInt(xi); - } - break; - doReal: - if (likely(!overflownInteger)) { - xf = xi; - } else if (!overflownUnsignedInteger) { - xf = xui; - } - scale = 0.1; - while (1) { - c = lookChar(); - if (c == '-') { - // ignore minus signs in the middle of numbers to match - // Adobe's behavior - error(getPos(), "Badly formatted number"); - getChar(); - continue; - } - if (!isdigit(c)) { - break; - } - getChar(); - xf = xf + scale * (c - '0'); - scale *= 0.1; - } - if (neg) - xf = -xf; - obj->initReal(xf); - break; - - // string - case '(': - p = tokBuf; - n = 0; - numParen = 1; - done = gFalse; - s = NULL; - do { - c2 = EOF; - switch (c = getChar()) { - - case EOF: -#if 0 - // This breaks some PDF files, e.g., ones from Photoshop. - case '\r': - case '\n': -#endif - error(getPos(), "Unterminated string"); - done = gTrue; - break; - - case '(': - ++numParen; - c2 = c; - break; - - case ')': - if (--numParen == 0) { - done = gTrue; - } else { - c2 = c; - } - break; - - case '\\': - switch (c = getChar()) { - case 'n': - c2 = '\n'; - break; - case 'r': - c2 = '\r'; - break; - case 't': - c2 = '\t'; - break; - case 'b': - c2 = '\b'; - break; - case 'f': - c2 = '\f'; - break; - case '\\': - case '(': - case ')': - c2 = c; - break; - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - c2 = c - '0'; - c = lookChar(); - if (c >= '0' && c <= '7') { - getChar(); - c2 = (c2 << 3) + (c - '0'); - c = lookChar(); - if (c >= '0' && c <= '7') { - getChar(); - c2 = (c2 << 3) + (c - '0'); - } - } - break; - case '\r': - c = lookChar(); - if (c == '\n') { - getChar(); - } - break; - case '\n': - break; - case EOF: - error(getPos(), "Unterminated string"); - done = gTrue; - break; - default: - c2 = c; - break; - } - break; - - default: - c2 = c; - break; - } - - if (c2 != EOF) { - if (n == tokBufSize) { - if (!s) - s = new GooString(tokBuf, tokBufSize); - else - s->append(tokBuf, tokBufSize); - p = tokBuf; - n = 0; - - // we are growing see if the document is not malformed and we are growing too much - if (objNum > 0 && xref != NULL) - { - int newObjNum = xref->getNumEntry(curStr.streamGetPos()); - if (newObjNum != objNum) - { - error(getPos(), "Unterminated string"); - done = gTrue; - delete s; - n = -2; - } - } - } - *p++ = (char)c2; - ++n; - } - } while (!done); - if (n >= 0) { - if (!s) - s = new GooString(tokBuf, n); - else - s->append(tokBuf, n); - obj->initString(s); - } else { - obj->initEOF(); - } - break; - - // name - case '/': - p = tokBuf; - n = 0; - s = NULL; - while ((c = lookChar()) != EOF && !specialChars[c]) { - getChar(); - if (c == '#') { - c2 = lookChar(); - if (c2 >= '0' && c2 <= '9') { - c = c2 - '0'; - } else if (c2 >= 'A' && c2 <= 'F') { - c = c2 - 'A' + 10; - } else if (c2 >= 'a' && c2 <= 'f') { - c = c2 - 'a' + 10; - } else { - goto notEscChar; - } - getChar(); - c <<= 4; - c2 = getChar(); - if (c2 >= '0' && c2 <= '9') { - c += c2 - '0'; - } else if (c2 >= 'A' && c2 <= 'F') { - c += c2 - 'A' + 10; - } else if (c2 >= 'a' && c2 <= 'f') { - c += c2 - 'a' + 10; - } else { - error(getPos(), "Illegal digit in hex char in name"); - } - } - notEscChar: - if (n == tokBufSize) { - if (!s) - { - error(getPos(), "Warning: name token is longer than what the specification says it can be"); - s = new GooString(tokBuf, tokBufSize); - } - else - { - // the spec says 127 is the maximum, we are already at 256 so bail out - error(getPos(), "Name token too long"); - break; - } - p = tokBuf; - n = 0; - } - *p++ = c; - ++n; - } - *p = '\0'; - if (s) { - s->append(tokBuf, n); - obj->initName(s->getCString()); - delete s; - } else obj->initName(tokBuf); - break; - - // array punctuation - case '[': - case ']': - tokBuf[0] = c; - tokBuf[1] = '\0'; - obj->initCmd(tokBuf); - break; - - // hex string or dict punctuation - case '<': - c = lookChar(); - - // dict punctuation - if (c == '<') { - getChar(); - tokBuf[0] = tokBuf[1] = '<'; - tokBuf[2] = '\0'; - obj->initCmd(tokBuf); - - // hex string - } else { - p = tokBuf; - m = n = 0; - c2 = 0; - s = NULL; - while (1) { - c = getChar(); - if (c == '>') { - break; - } else if (c == EOF) { - error(getPos(), "Unterminated hex string"); - break; - } else if (specialChars[c] != 1) { - c2 = c2 << 4; - if (c >= '0' && c <= '9') - c2 += c - '0'; - else if (c >= 'A' && c <= 'F') - c2 += c - 'A' + 10; - else if (c >= 'a' && c <= 'f') - c2 += c - 'a' + 10; - else - error(getPos(), "Illegal character <%02x> in hex string", c); - if (++m == 2) { - if (n == tokBufSize) { - if (!s) - s = new GooString(tokBuf, tokBufSize); - else - s->append(tokBuf, tokBufSize); - p = tokBuf; - n = 0; - } - *p++ = (char)c2; - ++n; - c2 = 0; - m = 0; - } - } - } - if (!s) - s = new GooString(tokBuf, n); - else - s->append(tokBuf, n); - if (m == 1) - s->append((char)(c2 << 4)); - obj->initString(s); - } - break; - - // dict punctuation - case '>': - c = lookChar(); - if (c == '>') { - getChar(); - tokBuf[0] = tokBuf[1] = '>'; - tokBuf[2] = '\0'; - obj->initCmd(tokBuf); - } else { - error(getPos(), "Illegal character '>'"); - obj->initError(); - } - break; - - // error - case ')': - case '{': - case '}': - error(getPos(), "Illegal character '%c'", c); - obj->initError(); - break; - - // command - default: - p = tokBuf; - *p++ = c; - n = 1; - while ((c = lookChar()) != EOF && !specialChars[c]) { - getChar(); - if (++n == tokBufSize) { - error(getPos(), "Command token too long"); - break; - } - *p++ = c; - } - *p = '\0'; - if (tokBuf[0] == 't' && !strcmp(tokBuf, "true")) { - obj->initBool(gTrue); - } else if (tokBuf[0] == 'f' && !strcmp(tokBuf, "false")) { - obj->initBool(gFalse); - } else if (tokBuf[0] == 'n' && !strcmp(tokBuf, "null")) { - obj->initNull(); - } else { - obj->initCmd(tokBuf); - } - break; - } - - return obj; -} - -void Lexer::skipToNextLine() { - int c; - - while (1) { - c = getChar(); - if (c == EOF || c == '\n') { - return; - } - if (c == '\r') { - if ((c = lookChar()) == '\n') { - getChar(); - } - return; - } - } -} - -GBool Lexer::isSpace(int c) { - return c >= 0 && c <= 0xff && specialChars[c] == 1; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Lexer.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Lexer.h deleted file mode 100644 index 284479dfbfa..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Lexer.h +++ /dev/null @@ -1,105 +0,0 @@ -//======================================================================== -// -// Lexer.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006, 2007, 2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef LEXER_H -#define LEXER_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" -#include "Stream.h" - -class XRef; - -#define tokBufSize 128 // size of token buffer - -//------------------------------------------------------------------------ -// Lexer -//------------------------------------------------------------------------ - -class Lexer { -public: - - // Construct a lexer for a single stream. Deletes the stream when - // lexer is deleted. - Lexer(XRef *xrefA, Stream *str); - - // Construct a lexer for a stream or array of streams (assumes obj - // is either a stream or array of streams). - Lexer(XRef *xrefA, Object *obj); - - // Destructor. - ~Lexer(); - - // Get the next object from the input stream. - Object *getObj(Object *obj, int objNum = -1); - - // Skip to the beginning of the next line in the input stream. - void skipToNextLine(); - - // Skip over one character. - void skipChar() { getChar(); } - - // Get stream. - Stream *getStream() - { return curStr.isStream() ? curStr.getStream() : (Stream *)NULL; } - - // Get current position in file. This is only used for error - // messages, so it returns an int instead of a Guint. - int getPos() - { return curStr.isStream() ? (int)curStr.streamGetPos() : -1; } - - // Set position in file. - void setPos(Guint pos, int dir = 0) - { if (curStr.isStream()) curStr.streamSetPos(pos, dir); } - - // Returns true if <c> is a whitespace character. - static GBool isSpace(int c); - - - // often (e.g. ~30% on PDF Refernce 1.6 pdf file from Adobe site) getChar - // is called right after lookChar. In order to avoid expensive re-doing - // getChar() of underlying stream, we cache the last value found by - // lookChar() in lookCharLastValueCached. A special value - // LOOK_VALUE_NOT_CACHED that should never be part of stream indicates - // that no value was cached - static const int LOOK_VALUE_NOT_CACHED = -3; - int lookCharLastValueCached; - -private: - - int getChar(GBool comesFromLook = gFalse); - int lookChar(); - - Array *streams; // array of input streams - int strPtr; // index of current stream - Object curStr; // current stream - GBool freeArray; // should lexer free the streams array? - char tokBuf[tokBufSize]; // temporary token buffer - - XRef *xref; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Linearization.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Linearization.cc deleted file mode 100644 index 73dc5adc3b3..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Linearization.cc +++ /dev/null @@ -1,222 +0,0 @@ -//======================================================================== -// -// Linearization.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// -//======================================================================== - -#include "Linearization.h" -#include "Parser.h" -#include "Lexer.h" - -//------------------------------------------------------------------------ -// Linearization -//------------------------------------------------------------------------ - -Linearization::Linearization (BaseStream *str) -{ - Parser *parser; - Object obj1, obj2, obj3, obj5; - - linDict.initNull(); - - str->reset(); - obj1.initNull(); - parser = new Parser(NULL, - new Lexer(NULL, str->makeSubStream(str->getStart(), gFalse, 0, &obj1)), - gFalse); - parser->getObj(&obj1); - parser->getObj(&obj2); - parser->getObj(&obj3); - parser->getObj(&linDict); - if (obj1.isInt() && obj2.isInt() && obj3.isCmd("obj") && linDict.isDict()) { - linDict.dictLookup("Linearized", &obj5); - if (!(obj5.isNum() && obj5.getNum() > 0)) { - linDict.free(); - linDict.initNull(); - } - obj5.free(); - } - obj3.free(); - obj2.free(); - obj1.free(); - delete parser; -} - -Linearization:: ~Linearization() -{ - linDict.free(); -} - -Guint Linearization::getLength() -{ - if (!linDict.isDict()) return 0; - - int length; - if (linDict.getDict()->lookupInt("L", NULL, &length) && - length > 0) { - return length; - } else { - error(-1, "Length in linearization table is invalid"); - return 0; - } -} - -Guint Linearization::getHintsOffset() -{ - int hintsOffset; - - Object obj1, obj2; - if (linDict.isDict() && - linDict.dictLookup("H", &obj1)->isArray() && - obj1.arrayGetLength()>=2 && - obj1.arrayGet(0, &obj2)->isInt() && - obj2.getInt() > 0) { - hintsOffset = obj2.getInt(); - } else { - error(-1, "Hints table offset in linearization table is invalid"); - hintsOffset = 0; - } - obj2.free(); - obj1.free(); - - return hintsOffset; -} - -Guint Linearization::getHintsLength() -{ - int hintsLength; - - Object obj1, obj2; - if (linDict.isDict() && - linDict.dictLookup("H", &obj1)->isArray() && - obj1.arrayGetLength()>=2 && - obj1.arrayGet(1, &obj2)->isInt() && - obj2.getInt() > 0) { - hintsLength = obj2.getInt(); - } else { - error(-1, "Hints table length in linearization table is invalid"); - hintsLength = 0; - } - obj2.free(); - obj1.free(); - - return hintsLength; -} - -Guint Linearization::getHintsOffset2() -{ - int hintsOffset2 = 0; // default to 0 - - Object obj1, obj2; - if (linDict.isDict() && - linDict.dictLookup("H", &obj1)->isArray() && - obj1.arrayGetLength()>=4) { - if (obj1.arrayGet(2, &obj2)->isInt() && - obj2.getInt() > 0) { - hintsOffset2 = obj2.getInt(); - } else { - error(-1, "Second hints table offset in linearization table is invalid"); - hintsOffset2 = 0; - } - } - obj2.free(); - obj1.free(); - - return hintsOffset2; -} - -Guint Linearization::getHintsLength2() -{ - int hintsLength2 = 0; // default to 0 - - Object obj1, obj2; - if (linDict.isDict() && - linDict.dictLookup("H", &obj1)->isArray() && - obj1.arrayGetLength()>=4) { - if (obj1.arrayGet(3, &obj2)->isInt() && - obj2.getInt() > 0) { - hintsLength2 = obj2.getInt(); - } else { - error(-1, "Second hints table length in linearization table is invalid"); - hintsLength2 = 0; - } - } - obj2.free(); - obj1.free(); - - return hintsLength2; -} - -int Linearization::getObjectNumberFirst() -{ - int objectNumberFirst = 0; - if (linDict.isDict() && - linDict.getDict()->lookupInt("O", NULL, &objectNumberFirst) && - objectNumberFirst > 0) { - return objectNumberFirst; - } else { - error(-1, "Object number of first page in linearization table is invalid"); - return 0; - } -} - -Guint Linearization::getEndFirst() -{ - int pageEndFirst = 0; - if (linDict.isDict() && - linDict.getDict()->lookupInt("E", NULL, &pageEndFirst) && - pageEndFirst > 0) { - return pageEndFirst; - } else { - error(-1, "First page end offset in linearization table is invalid"); - return 0; - } -} - -int Linearization::getNumPages() -{ - int numPages = 0; - if (linDict.isDict() && - linDict.getDict()->lookupInt("N", NULL, &numPages) && - numPages > 0) { - return numPages; - } else { - error(-1, "Page count in linearization table is invalid"); - return 0; - } -} - -Guint Linearization::getMainXRefEntriesOffset() -{ - int mainXRefEntriesOffset = 0; - if (linDict.isDict() && - linDict.getDict()->lookupInt("T", NULL, &mainXRefEntriesOffset) && - mainXRefEntriesOffset > 0) { - return mainXRefEntriesOffset; - } else { - error(-1, "Main Xref offset in linearization table is invalid"); - return 0; - } -} - -int Linearization::getPageFirst() -{ - int pageFirst = 0; // Optional, defaults to 0. - - if (linDict.isDict()) { - linDict.getDict()->lookupInt("P", NULL, &pageFirst); - } - - if (pageFirst < 0) { - error(-1, "First page in linearization table is invalid"); - return 0; - } - - return pageFirst; -} - - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Linearization.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Linearization.h deleted file mode 100644 index 6728a750aba..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Linearization.h +++ /dev/null @@ -1,45 +0,0 @@ -//======================================================================== -// -// Linearization.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// -//======================================================================== - -#ifndef LINEARIZATION_H -#define LINEARIZATION_H - -#include "goo/gtypes.h" -#include "Object.h" -class BaseStream; - -//------------------------------------------------------------------------ -// Linearization -//------------------------------------------------------------------------ - -class Linearization { -public: - - Linearization(BaseStream *str); - ~Linearization(); - - Guint getLength(); - Guint getHintsOffset(); - Guint getHintsLength(); - Guint getHintsOffset2(); - Guint getHintsLength2(); - int getObjectNumberFirst(); - Guint getEndFirst(); - int getNumPages(); - Guint getMainXRefEntriesOffset(); - int getPageFirst(); - -private: - - Object linDict; - -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Link.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Link.cc deleted file mode 100644 index 971accf2810..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Link.cc +++ /dev/null @@ -1,921 +0,0 @@ -//======================================================================== -// -// Link.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006, 2008 Pino Toscano <pino@kde.org> -// Copyright (C) 2007, 2010, 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2008 Hugo Mercier <hmercier31@gmail.com> -// Copyright (C) 2008-2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> -// Copyright (C) 2009 Ilya Gorenbein <igorenbein@finjan.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stddef.h> -#include <string.h> -#include "goo/gmem.h" -#include "goo/GooString.h" -#include "goo/GooList.h" -#include "Error.h" -#include "Object.h" -#include "Array.h" -#include "Dict.h" -#include "Link.h" -#include "Sound.h" -#include "FileSpec.h" -#include "Rendition.h" -#include "Annot.h" - -//------------------------------------------------------------------------ -// LinkAction -//------------------------------------------------------------------------ - -LinkAction *LinkAction::parseDest(Object *obj) { - LinkAction *action; - - action = new LinkGoTo(obj); - if (!action->isOk()) { - delete action; - return NULL; - } - return action; -} - -LinkAction *LinkAction::parseAction(Object *obj, GooString *baseURI) { - LinkAction *action; - Object obj2, obj3, obj4; - - if (!obj->isDict()) { - error(-1, "parseAction: Bad annotation action for URI '%s'", - baseURI ? baseURI->getCString() : "NULL"); - return NULL; - } - - obj->dictLookup("S", &obj2); - - // GoTo action - if (obj2.isName("GoTo")) { - obj->dictLookup("D", &obj3); - action = new LinkGoTo(&obj3); - obj3.free(); - - // GoToR action - } else if (obj2.isName("GoToR")) { - obj->dictLookup("F", &obj3); - obj->dictLookup("D", &obj4); - action = new LinkGoToR(&obj3, &obj4); - obj3.free(); - obj4.free(); - - // Launch action - } else if (obj2.isName("Launch")) { - action = new LinkLaunch(obj); - - // URI action - } else if (obj2.isName("URI")) { - obj->dictLookup("URI", &obj3); - action = new LinkURI(&obj3, baseURI); - obj3.free(); - - // Named action - } else if (obj2.isName("Named")) { - obj->dictLookup("N", &obj3); - action = new LinkNamed(&obj3); - obj3.free(); - - // Movie action - } else if (obj2.isName("Movie")) { - action = new LinkMovie(obj); - - // Rendition action - } else if (obj2.isName("Rendition")) { - action = new LinkRendition(obj); - - // Sound action - } else if (obj2.isName("Sound")) { - action = new LinkSound(obj); - - // JavaScript action - } else if (obj2.isName("JavaScript")) { - obj->dictLookup("JS", &obj3); - action = new LinkJavaScript(&obj3); - obj3.free(); - - // Set-OCG-State action - } else if (obj2.isName("SetOCGState")) { - action = new LinkOCGState(obj); - - // unknown action - } else if (obj2.isName()) { - action = new LinkUnknown(obj2.getName()); - - // action is missing or wrong type - } else { - error(-1, "parseAction: Unknown annotation action object: URI = '%s'", - baseURI ? baseURI->getCString() : "NULL"); - action = NULL; - } - - obj2.free(); - - if (action && !action->isOk()) { - delete action; - return NULL; - } - return action; -} - -//------------------------------------------------------------------------ -// LinkDest -//------------------------------------------------------------------------ - -LinkDest::LinkDest(Array *a) { - Object obj1, obj2; - - // initialize fields - left = bottom = right = top = zoom = 0; - changeLeft = changeTop = changeZoom = gFalse; - ok = gFalse; - - // get page - if (a->getLength() < 2) { - error(-1, "Annotation destination array is too short"); - return; - } - a->getNF(0, &obj1); - if (obj1.isInt()) { - pageNum = obj1.getInt() + 1; - pageIsRef = gFalse; - } else if (obj1.isRef()) { - pageRef.num = obj1.getRefNum(); - pageRef.gen = obj1.getRefGen(); - pageIsRef = gTrue; - } else { - error(-1, "Bad annotation destination"); - goto err2; - } - obj1.free(); - - // get destination type - a->get(1, &obj1); - - // XYZ link - if (obj1.isName("XYZ")) { - kind = destXYZ; - if (a->getLength() < 3) { - changeLeft = gFalse; - } else { - a->get(2, &obj2); - if (obj2.isNull()) { - changeLeft = gFalse; - } else if (obj2.isNum()) { - changeLeft = gTrue; - left = obj2.getNum(); - } else { - error(-1, "Bad annotation destination position"); - goto err1; - } - obj2.free(); - } - if (a->getLength() < 4) { - changeTop = gFalse; - } else { - a->get(3, &obj2); - if (obj2.isNull()) { - changeTop = gFalse; - } else if (obj2.isNum()) { - changeTop = gTrue; - top = obj2.getNum(); - } else { - error(-1, "Bad annotation destination position"); - goto err1; - } - obj2.free(); - } - if (a->getLength() < 5) { - changeZoom = gFalse; - } else { - a->get(4, &obj2); - if (obj2.isNull()) { - changeZoom = gFalse; - } else if (obj2.isNum()) { - changeZoom = gTrue; - zoom = obj2.getNum(); - } else { - error(-1, "Bad annotation destination position"); - goto err1; - } - obj2.free(); - } - - // Fit link - } else if (obj1.isName("Fit")) { - if (a->getLength() < 2) { - error(-1, "Annotation destination array is too short"); - goto err2; - } - kind = destFit; - - // FitH link - } else if (obj1.isName("FitH")) { - if (a->getLength() < 3) { - error(-1, "Annotation destination array is too short"); - goto err2; - } - kind = destFitH; - a->get(2, &obj2); - if (obj2.isNull()) { - changeTop = gFalse; - } else if (obj2.isNum()) { - changeTop = gTrue; - top = obj2.getNum(); - } else { - error(-1, "Bad annotation destination position"); - kind = destFit; - } - obj2.free(); - - // FitV link - } else if (obj1.isName("FitV")) { - if (a->getLength() < 3) { - error(-1, "Annotation destination array is too short"); - goto err2; - } - kind = destFitV; - a->get(2, &obj2); - if (obj2.isNull()) { - changeLeft = gFalse; - } else if (obj2.isNum()) { - changeLeft = gTrue; - left = obj2.getNum(); - } else { - error(-1, "Bad annotation destination position"); - kind = destFit; - } - obj2.free(); - - // FitR link - } else if (obj1.isName("FitR")) { - if (a->getLength() < 6) { - error(-1, "Annotation destination array is too short"); - goto err2; - } - kind = destFitR; - if (!a->get(2, &obj2)->isNum()) { - error(-1, "Bad annotation destination position"); - kind = destFit; - } - left = obj2.getNum(); - obj2.free(); - if (!a->get(3, &obj2)->isNum()) { - error(-1, "Bad annotation destination position"); - kind = destFit; - } - bottom = obj2.getNum(); - obj2.free(); - if (!a->get(4, &obj2)->isNum()) { - error(-1, "Bad annotation destination position"); - kind = destFit; - } - right = obj2.getNum(); - obj2.free(); - if (!a->get(5, &obj2)->isNum()) { - error(-1, "Bad annotation destination position"); - kind = destFit; - } - top = obj2.getNum(); - obj2.free(); - - // FitB link - } else if (obj1.isName("FitB")) { - if (a->getLength() < 2) { - error(-1, "Annotation destination array is too short"); - goto err2; - } - kind = destFitB; - - // FitBH link - } else if (obj1.isName("FitBH")) { - if (a->getLength() < 3) { - error(-1, "Annotation destination array is too short"); - goto err2; - } - kind = destFitBH; - a->get(2, &obj2); - if (obj2.isNull()) { - changeTop = gFalse; - } else if (obj2.isNum()) { - changeTop = gTrue; - top = obj2.getNum(); - } else { - error(-1, "Bad annotation destination position"); - kind = destFit; - } - obj2.free(); - - // FitBV link - } else if (obj1.isName("FitBV")) { - if (a->getLength() < 3) { - error(-1, "Annotation destination array is too short"); - goto err2; - } - kind = destFitBV; - a->get(2, &obj2); - if (obj2.isNull()) { - changeLeft = gFalse; - } else if (obj2.isNum()) { - changeLeft = gTrue; - left = obj2.getNum(); - } else { - error(-1, "Bad annotation destination position"); - kind = destFit; - } - obj2.free(); - - // unknown link kind - } else { - error(-1, "Unknown annotation destination type"); - goto err2; - } - - obj1.free(); - ok = gTrue; - return; - - err1: - obj2.free(); - err2: - obj1.free(); -} - -LinkDest::LinkDest(LinkDest *dest) { - kind = dest->kind; - pageIsRef = dest->pageIsRef; - if (pageIsRef) - pageRef = dest->pageRef; - else - pageNum = dest->pageNum; - left = dest->left; - bottom = dest->bottom; - right = dest->right; - top = dest->top; - zoom = dest->zoom; - changeLeft = dest->changeLeft; - changeTop = dest->changeTop; - changeZoom = dest->changeZoom; - ok = gTrue; -} - -//------------------------------------------------------------------------ -// LinkGoTo -//------------------------------------------------------------------------ - -LinkGoTo::LinkGoTo(Object *destObj) { - dest = NULL; - namedDest = NULL; - - // named destination - if (destObj->isName()) { - namedDest = new GooString(destObj->getName()); - } else if (destObj->isString()) { - namedDest = destObj->getString()->copy(); - - // destination dictionary - } else if (destObj->isArray()) { - dest = new LinkDest(destObj->getArray()); - if (!dest->isOk()) { - delete dest; - dest = NULL; - } - - // error - } else { - error(-1, "Illegal annotation destination"); - } -} - -LinkGoTo::~LinkGoTo() { - if (dest) - delete dest; - if (namedDest) - delete namedDest; -} - -//------------------------------------------------------------------------ -// LinkGoToR -//------------------------------------------------------------------------ - -LinkGoToR::LinkGoToR(Object *fileSpecObj, Object *destObj) { - fileName = NULL; - dest = NULL; - namedDest = NULL; - - // get file name - Object obj1; - if (getFileSpecNameForPlatform (fileSpecObj, &obj1)) { - fileName = obj1.getString()->copy(); - obj1.free(); - } - - // named destination - if (destObj->isName()) { - namedDest = new GooString(destObj->getName()); - } else if (destObj->isString()) { - namedDest = destObj->getString()->copy(); - - // destination dictionary - } else if (destObj->isArray()) { - dest = new LinkDest(destObj->getArray()); - if (!dest->isOk()) { - delete dest; - dest = NULL; - } - - // error - } else { - error(-1, "Illegal annotation destination"); - } -} - -LinkGoToR::~LinkGoToR() { - if (fileName) - delete fileName; - if (dest) - delete dest; - if (namedDest) - delete namedDest; -} - - -//------------------------------------------------------------------------ -// LinkLaunch -//------------------------------------------------------------------------ - -LinkLaunch::LinkLaunch(Object *actionObj) { - Object obj1, obj2, obj3; - - fileName = NULL; - params = NULL; - - if (actionObj->isDict()) { - if (!actionObj->dictLookup("F", &obj1)->isNull()) { - if (getFileSpecNameForPlatform (&obj1, &obj3)) { - fileName = obj3.getString()->copy(); - obj3.free(); - } - } else { - obj1.free(); -#ifdef _WIN32 - if (actionObj->dictLookup("Win", &obj1)->isDict()) { - obj1.dictLookup("F", &obj2); - if (getFileSpecNameForPlatform (&obj2, &obj3)) { - fileName = obj3.getString()->copy(); - obj3.free(); - } - obj2.free(); - if (obj1.dictLookup("P", &obj2)->isString()) { - params = obj2.getString()->copy(); - } - obj2.free(); - } else { - error(-1, "Bad launch-type link action"); - } -#else - //~ This hasn't been defined by Adobe yet, so assume it looks - //~ just like the Win dictionary until they say otherwise. - if (actionObj->dictLookup("Unix", &obj1)->isDict()) { - obj1.dictLookup("F", &obj2); - if (getFileSpecNameForPlatform (&obj2, &obj3)) { - fileName = obj3.getString()->copy(); - obj3.free(); - } - obj2.free(); - if (obj1.dictLookup("P", &obj2)->isString()) { - params = obj2.getString()->copy(); - } - obj2.free(); - } else { - error(-1, "Bad launch-type link action"); - } -#endif - } - obj1.free(); - } -} - -LinkLaunch::~LinkLaunch() { - if (fileName) - delete fileName; - if (params) - delete params; -} - -//------------------------------------------------------------------------ -// LinkURI -//------------------------------------------------------------------------ - -LinkURI::LinkURI(Object *uriObj, GooString *baseURI) { - GooString *uri2; - int n; - char c; - - uri = NULL; - if (uriObj->isString()) { - uri2 = uriObj->getString()->copy(); - if (baseURI && baseURI->getLength() > 0) { - n = strcspn(uri2->getCString(), "/:"); - if (n == uri2->getLength() || uri2->getChar(n) == '/') { - uri = baseURI->copy(); - c = uri->getChar(uri->getLength() - 1); - if (c == '/' || c == '?') { - if (uri2->getChar(0) == '/') { - uri2->del(0); - } - } else { - if (uri2->getChar(0) != '/') { - uri->append('/'); - } - } - uri->append(uri2); - delete uri2; - } else { - uri = uri2; - } - } else { - uri = uri2; - } - } else { - error(-1, "Illegal URI-type link"); - } -} - -LinkURI::~LinkURI() { - if (uri) - delete uri; -} - -//------------------------------------------------------------------------ -// LinkNamed -//------------------------------------------------------------------------ - -LinkNamed::LinkNamed(Object *nameObj) { - name = NULL; - if (nameObj->isName()) { - name = new GooString(nameObj->getName()); - } -} - -LinkNamed::~LinkNamed() { - if (name) { - delete name; - } -} - -//------------------------------------------------------------------------ -// LinkMovie -//------------------------------------------------------------------------ - -LinkMovie::LinkMovie(Object *obj) { - annotRef.num = -1; - annotTitle = NULL; - - Object tmp; - if (obj->dictLookupNF("Annotation", &tmp)->isRef()) { - annotRef = tmp.getRef(); - } - tmp.free(); - - if (obj->dictLookup("T", &tmp)->isString()) { - annotTitle = tmp.getString()->copy(); - } - tmp.free(); - - if ((annotTitle == NULL) && (annotRef.num == -1)) { - error(-1, "Movie action is missing both the Annot and T keys"); - } - - if (obj->dictLookup("Operation", &tmp)->isName()) { - char *name = tmp.getName(); - - if (!strcmp(name, "Play")) { - operation = operationTypePlay; - } - else if (!strcmp(name, "Stop")) { - operation = operationTypeStop; - } - else if (!strcmp(name, "Pause")) { - operation = operationTypePause; - } - else if (!strcmp(name, "Resume")) { - operation = operationTypeResume; - } - } - tmp.free(); -} - -LinkMovie::~LinkMovie() { - if (annotTitle) { - delete annotTitle; - } -} - -//------------------------------------------------------------------------ -// LinkSound -//------------------------------------------------------------------------ - -LinkSound::LinkSound(Object *soundObj) { - volume = 1.0; - sync = gFalse; - repeat = gFalse; - mix = gFalse; - sound = NULL; - if (soundObj->isDict()) - { - Object tmp; - // volume - soundObj->dictLookup("Volume", &tmp); - if (tmp.isNum()) { - volume = tmp.getNum(); - } - tmp.free(); - // sync - soundObj->dictLookup("Synchronous", &tmp); - if (tmp.isBool()) { - sync = tmp.getBool(); - } - tmp.free(); - // repeat - soundObj->dictLookup("Repeat", &tmp); - if (tmp.isBool()) { - repeat = tmp.getBool(); - } - tmp.free(); - // mix - soundObj->dictLookup("Mix", &tmp); - if (tmp.isBool()) { - mix = tmp.getBool(); - } - tmp.free(); - // 'Sound' object - soundObj->dictLookup("Sound", &tmp); - sound = Sound::parseSound(&tmp); - tmp.free(); - } -} - -LinkSound::~LinkSound() { - delete sound; -} - -//------------------------------------------------------------------------ -// LinkRendition -//------------------------------------------------------------------------ - -LinkRendition::LinkRendition(Object *obj) { - operation = -1; - media = NULL; - js = NULL; - - if (obj->isDict()) { - Object tmp; - - if (!obj->dictLookup("JS", &tmp)->isNull()) { - if (tmp.isString()) { - js = new GooString(tmp.getString()); - } else if (tmp.isStream()) { - Stream *stream = tmp.getStream(); - js = new GooString(); - stream->fillGooString(js); - } else { - error(-1, "Invalid Rendition Action: JS not string or stream"); - } - } - tmp.free(); - - if (obj->dictLookup("OP", &tmp)->isInt()) { - operation = tmp.getInt(); - if (!js && (operation < 0 || operation > 4)) { - error (-1, "Invalid Rendition Action: unrecognized operation valued: %d", operation); - } else { - Object obj1; - - // retrieve rendition object - if (obj->dictLookup("R", &renditionObj)->isDict()) { - media = new MediaRendition(&renditionObj); - } else if (operation == 0 || operation == 4) { - error (-1, "Invalid Rendition Action: no R field with op = %d", operation); - renditionObj.free(); - } - - if (!obj->dictLookupNF("AN", &screenRef)->isRef() && operation >= 0 && operation <= 4) { - error (-1, "Invalid Rendition Action: no AN field with op = %d", operation); - screenRef.free(); - } - } - } else if (!js) { - error(-1, "Invalid Rendition action: no OP or JS field defined"); - } - tmp.free(); - } -} - -LinkRendition::~LinkRendition() { - renditionObj.free(); - screenRef.free(); - - if (js) - delete js; - if (media) - delete media; -} - - -//------------------------------------------------------------------------ -// LinkJavaScript -//------------------------------------------------------------------------ - -LinkJavaScript::LinkJavaScript(Object *jsObj) { - js = NULL; - - if (jsObj->isString()) { - js = new GooString(jsObj->getString()); - } - else if (jsObj->isStream()) { - Stream *stream = jsObj->getStream(); - js = new GooString(); - stream->fillGooString(js); - } -} - -LinkJavaScript::~LinkJavaScript() { - if (js) { - delete js; - } -} - -//------------------------------------------------------------------------ -// LinkOCGState -//------------------------------------------------------------------------ -LinkOCGState::LinkOCGState(Object *obj) { - Object obj1; - - stateList = new GooList(); - preserveRB = gTrue; - - if (obj->dictLookup("State", &obj1)->isArray()) { - StateList *stList = NULL; - - for (int i = 0; i < obj1.arrayGetLength(); ++i) { - Object obj2; - - obj1.arrayGetNF(i, &obj2); - if (obj2.isName()) { - if (stList) - stateList->append(stList); - - char *name = obj2.getName(); - stList = new StateList(); - stList->list = new GooList(); - if (!strcmp (name, "ON")) { - stList->st = On; - } else if (!strcmp (name, "OFF")) { - stList->st = Off; - } else if (!strcmp (name, "Toggle")) { - stList->st = Toggle; - } else { - error (-1, "Invalid name '%s' in OCG Action state array", name); - delete stList; - stList = NULL; - } - } else if (obj2.isRef()) { - if (stList) { - Ref ocgRef = obj2.getRef(); - Ref *item = new Ref(); - item->num = ocgRef.num; - item->gen = ocgRef.gen; - stList->list->append(item); - } else { - error (-1, "Invalid OCG Action State array, expected name instead of ref"); - } - } else { - error (-1, "Invalid item in OCG Action State array"); - } - obj2.free(); - } - // Add the last group - if (stList) - stateList->append(stList); - } else { - error (-1, "Invalid OCGState action"); - delete stateList; - stateList = NULL; - } - obj1.free(); - - if (obj->dictLookup("PreserveRB", &obj1)->isBool()) { - preserveRB = obj1.getBool(); - } - obj1.free(); -} - -LinkOCGState::~LinkOCGState() { - if (stateList) - deleteGooList(stateList, StateList); -} - -LinkOCGState::StateList::~StateList() { - if (list) - deleteGooList(list, Ref); -} - -//------------------------------------------------------------------------ -// LinkUnknown -//------------------------------------------------------------------------ - -LinkUnknown::LinkUnknown(char *actionA) { - action = new GooString(actionA); -} - -LinkUnknown::~LinkUnknown() { - delete action; -} - -//------------------------------------------------------------------------ -// Links -//------------------------------------------------------------------------ - -Links::Links(Annots *annots) { - int size; - int i; - - links = NULL; - size = 0; - numLinks = 0; - - if (!annots) - return; - - for (i = 0; i < annots->getNumAnnots(); ++i) { - Annot *annot = annots->getAnnot(i); - - if (annot->getType() != Annot::typeLink) - continue; - - if (numLinks >= size) { - size += 16; - links = (AnnotLink **)greallocn(links, size, sizeof(AnnotLink *)); - } - annot->incRefCnt(); - links[numLinks++] = static_cast<AnnotLink *>(annot); - } -} - -Links::~Links() { - int i; - - for (i = 0; i < numLinks; ++i) - links[i]->decRefCnt(); - - gfree(links); -} - -LinkAction *Links::find(double x, double y) const { - int i; - - for (i = numLinks - 1; i >= 0; --i) { - if (links[i]->inRect(x, y)) { - return links[i]->getAction(); - } - } - return NULL; -} - -GBool Links::onLink(double x, double y) const { - int i; - - for (i = 0; i < numLinks; ++i) { - if (links[i]->inRect(x, y)) - return gTrue; - } - return gFalse; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Link.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Link.h deleted file mode 100644 index 84e58018554..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Link.h +++ /dev/null @@ -1,488 +0,0 @@ -//======================================================================== -// -// Link.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006, 2008 Pino Toscano <pino@kde.org> -// Copyright (C) 2008 Hugo Mercier <hmercier31@gmail.com> -// Copyright (C) 2010, 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef LINK_H -#define LINK_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -class GooString; -class GooList; -class Array; -class Dict; -class Sound; -class MediaRendition; -class AnnotLink; -class Annots; - -//------------------------------------------------------------------------ -// LinkAction -//------------------------------------------------------------------------ - -enum LinkActionKind { - actionGoTo, // go to destination - actionGoToR, // go to destination in new file - actionLaunch, // launch app (or open document) - actionURI, // URI - actionNamed, // named action - actionMovie, // movie action - actionRendition, - actionSound, // sound action - actionJavaScript, // JavaScript action - actionOCGState, // Set-OCG-State action - actionUnknown // anything else -}; - -class LinkAction { -public: - - // Destructor. - virtual ~LinkAction() {} - - // Was the LinkAction created successfully? - virtual GBool isOk() = 0; - - // Check link action type. - virtual LinkActionKind getKind() = 0; - - // Parse a destination (old-style action) name, string, or array. - static LinkAction *parseDest(Object *obj); - - // Parse an action dictionary. - static LinkAction *parseAction(Object *obj, GooString *baseURI = NULL); -}; - -//------------------------------------------------------------------------ -// LinkDest -//------------------------------------------------------------------------ - -enum LinkDestKind { - destXYZ, - destFit, - destFitH, - destFitV, - destFitR, - destFitB, - destFitBH, - destFitBV -}; - -class LinkDest { -public: - - // Build a LinkDest from the array. - LinkDest(Array *a); - - // Copy a LinkDest. - LinkDest *copy() { return new LinkDest(this); } - - // Was the LinkDest created successfully? - GBool isOk() { return ok; } - - // Accessors. - LinkDestKind getKind() { return kind; } - GBool isPageRef() { return pageIsRef; } - int getPageNum() { return pageNum; } - Ref getPageRef() { return pageRef; } - double getLeft() { return left; } - double getBottom() { return bottom; } - double getRight() { return right; } - double getTop() { return top; } - double getZoom() { return zoom; } - GBool getChangeLeft() { return changeLeft; } - GBool getChangeTop() { return changeTop; } - GBool getChangeZoom() { return changeZoom; } - -private: - - LinkDestKind kind; // destination type - GBool pageIsRef; // is the page a reference or number? - union { - Ref pageRef; // reference to page - int pageNum; // one-relative page number - }; - double left, bottom; // position - double right, top; - double zoom; // zoom factor - GBool changeLeft, changeTop; // for destXYZ links, which position - GBool changeZoom; // components to change - GBool ok; // set if created successfully - - LinkDest(LinkDest *dest); -}; - -//------------------------------------------------------------------------ -// LinkGoTo -//------------------------------------------------------------------------ - -class LinkGoTo: public LinkAction { -public: - - // Build a LinkGoTo from a destination (dictionary, name, or string). - LinkGoTo(Object *destObj); - - // Destructor. - virtual ~LinkGoTo(); - - // Was the LinkGoTo created successfully? - virtual GBool isOk() { return dest || namedDest; } - - // Accessors. - virtual LinkActionKind getKind() { return actionGoTo; } - LinkDest *getDest() { return dest; } - GooString *getNamedDest() { return namedDest; } - -private: - - LinkDest *dest; // regular destination (NULL for remote - // link with bad destination) - GooString *namedDest; // named destination (only one of dest and - // and namedDest may be non-NULL) -}; - -//------------------------------------------------------------------------ -// LinkGoToR -//------------------------------------------------------------------------ - -class LinkGoToR: public LinkAction { -public: - - // Build a LinkGoToR from a file spec (dictionary) and destination - // (dictionary, name, or string). - LinkGoToR(Object *fileSpecObj, Object *destObj); - - // Destructor. - virtual ~LinkGoToR(); - - // Was the LinkGoToR created successfully? - virtual GBool isOk() { return fileName && (dest || namedDest); } - - // Accessors. - virtual LinkActionKind getKind() { return actionGoToR; } - GooString *getFileName() { return fileName; } - LinkDest *getDest() { return dest; } - GooString *getNamedDest() { return namedDest; } - -private: - - GooString *fileName; // file name - LinkDest *dest; // regular destination (NULL for remote - // link with bad destination) - GooString *namedDest; // named destination (only one of dest and - // and namedDest may be non-NULL) -}; - -//------------------------------------------------------------------------ -// LinkLaunch -//------------------------------------------------------------------------ - -class LinkLaunch: public LinkAction { -public: - - // Build a LinkLaunch from an action dictionary. - LinkLaunch(Object *actionObj); - - // Destructor. - virtual ~LinkLaunch(); - - // Was the LinkLaunch created successfully? - virtual GBool isOk() { return fileName != NULL; } - - // Accessors. - virtual LinkActionKind getKind() { return actionLaunch; } - GooString *getFileName() { return fileName; } - GooString *getParams() { return params; } - -private: - - GooString *fileName; // file name - GooString *params; // parameters -}; - -//------------------------------------------------------------------------ -// LinkURI -//------------------------------------------------------------------------ - -class LinkURI: public LinkAction { -public: - - // Build a LinkURI given the URI (string) and base URI. - LinkURI(Object *uriObj, GooString *baseURI); - - // Destructor. - virtual ~LinkURI(); - - // Was the LinkURI created successfully? - virtual GBool isOk() { return uri != NULL; } - - // Accessors. - virtual LinkActionKind getKind() { return actionURI; } - GooString *getURI() { return uri; } - -private: - - GooString *uri; // the URI -}; - -//------------------------------------------------------------------------ -// LinkNamed -//------------------------------------------------------------------------ - -class LinkNamed: public LinkAction { -public: - - // Build a LinkNamed given the action name. - LinkNamed(Object *nameObj); - - virtual ~LinkNamed(); - - virtual GBool isOk() { return name != NULL; } - - virtual LinkActionKind getKind() { return actionNamed; } - GooString *getName() { return name; } - -private: - - GooString *name; -}; - - -//------------------------------------------------------------------------ -// LinkMovie -//------------------------------------------------------------------------ - -class LinkMovie: public LinkAction { -public: - - enum OperationType { - operationTypePlay, - operationTypePause, - operationTypeResume, - operationTypeStop - }; - - LinkMovie(Object *obj); - virtual ~LinkMovie(); - - virtual GBool isOk() { return annotRef.num >= 0 || annotTitle != NULL; } - virtual LinkActionKind getKind() { return actionMovie; } - - // a movie action stores either an indirect reference to a movie annotation - // or the movie annotation title - - GBool hasAnnotRef() { return annotRef.num >= 0; } - GBool hasAnnotTitle() { return annotTitle != NULL; } - Ref *getAnnotRef() { return &annotRef; } - GooString *getAnnotTitle() { return annotTitle; } - - OperationType getOperation() { return operation; } - -private: - - Ref annotRef; // Annotation - GooString *annotTitle; // T - - OperationType operation; // Operation -}; - - -//------------------------------------------------------------------------ -// LinkRendition -//------------------------------------------------------------------------ - -class LinkRendition: public LinkAction { -public: - - LinkRendition(Object *Obj); - - virtual ~LinkRendition(); - - virtual GBool isOk() { return true; } - - virtual LinkActionKind getKind() { return actionRendition; } - - GBool hasRenditionObject() { return renditionObj.isDict(); } - Object* getRenditionObject() { return &renditionObj; } - - GBool hasScreenAnnot() { return screenRef.isRef(); } - Ref getScreenAnnot() { return screenRef.getRef(); } - - int getOperation() { return operation; } - - MediaRendition* getMedia() { return media; } - - GooString *getScript() { return js; } - -private: - - Object screenRef; - Object renditionObj; - int operation; - - MediaRendition* media; - - GooString *js; -}; - -//------------------------------------------------------------------------ -// LinkSound -//------------------------------------------------------------------------ - -class LinkSound: public LinkAction { -public: - - LinkSound(Object *soundObj); - - virtual ~LinkSound(); - - virtual GBool isOk() { return sound != NULL; } - - virtual LinkActionKind getKind() { return actionSound; } - - double getVolume() { return volume; } - GBool getSynchronous() { return sync; } - GBool getRepeat() { return repeat; } - GBool getMix() { return mix; } - Sound *getSound() { return sound; } - -private: - - double volume; - GBool sync; - GBool repeat; - GBool mix; - Sound *sound; -}; - -//------------------------------------------------------------------------ -// LinkJavaScript -//------------------------------------------------------------------------ - -class LinkJavaScript: public LinkAction { -public: - - // Build a LinkJavaScript given the action name. - LinkJavaScript(Object *jsObj); - - virtual ~LinkJavaScript(); - - virtual GBool isOk() { return js != NULL; } - - virtual LinkActionKind getKind() { return actionJavaScript; } - GooString *getScript() { return js; } - -private: - - GooString *js; -}; - -//------------------------------------------------------------------------ -// LinkOCGState -//------------------------------------------------------------------------ -class LinkOCGState: public LinkAction { -public: - LinkOCGState(Object *obj); - - virtual ~LinkOCGState(); - - virtual GBool isOk() { return stateList != NULL; } - - virtual LinkActionKind getKind() { return actionOCGState; } - - enum State { On, Off, Toggle}; - struct StateList { - StateList() { list = NULL; } - ~StateList(); - State st; - GooList *list; - }; - - GooList *getStateList() { return stateList; } - GBool getPreserveRB() { return preserveRB; } - -private: - GooList *stateList; - GBool preserveRB; -}; - -//------------------------------------------------------------------------ -// LinkUnknown -//------------------------------------------------------------------------ - -class LinkUnknown: public LinkAction { -public: - - // Build a LinkUnknown with the specified action type. - LinkUnknown(char *actionA); - - // Destructor. - virtual ~LinkUnknown(); - - // Was the LinkUnknown create successfully? - virtual GBool isOk() { return action != NULL; } - - // Accessors. - virtual LinkActionKind getKind() { return actionUnknown; } - GooString *getAction() { return action; } - -private: - - GooString *action; // action subtype -}; - -//------------------------------------------------------------------------ -// Links -//------------------------------------------------------------------------ - -class Links { -public: - - // Extract links from array of annotations. - Links(Annots *annots); - - // Destructor. - ~Links(); - - // Iterate through list of links. - int getNumLinks() const { return numLinks; } - AnnotLink *getLink(int i) const { return links[i]; } - - // If point <x>,<y> is in a link, return the associated action; - // else return NULL. - LinkAction *find(double x, double y) const; - - // Return true if <x>,<y> is in a link. - GBool onLink(double x, double y) const; - -private: - - AnnotLink **links; - int numLinks; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/LocalPDFDocBuilder.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/LocalPDFDocBuilder.cc deleted file mode 100644 index 6f6f1fca9f7..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/LocalPDFDocBuilder.cc +++ /dev/null @@ -1,46 +0,0 @@ -//======================================================================== -// -// LocalPDFDocBuilder.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#include <config.h> - -#include "LocalPDFDocBuilder.h" - -//------------------------------------------------------------------------ -// LocalPDFDocBuilder -//------------------------------------------------------------------------ - -PDFDoc * -LocalPDFDocBuilder::buildPDFDoc( - const GooString &uri, GooString *ownerPassword, GooString - *userPassword, void *guiDataA) -{ - if (uri.cmpN("file://", 7) == 0) { - GooString *fileName = uri.copy(); - fileName->del(0, 7); - return new PDFDoc(fileName, ownerPassword, userPassword, guiDataA); - } else { - GooString *fileName = uri.copy(); - return new PDFDoc(fileName, ownerPassword, userPassword, guiDataA); - } -} - -GBool LocalPDFDocBuilder::supports(const GooString &uri) -{ - if (uri.cmpN("file://", 7) == 0) { - return gTrue; - } else if (!strstr(uri.getCString(), "://")) { - return gTrue; - } else { - return gFalse; - } -} - - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/LocalPDFDocBuilder.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/LocalPDFDocBuilder.h deleted file mode 100644 index c2b1d903885..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/LocalPDFDocBuilder.h +++ /dev/null @@ -1,33 +0,0 @@ -//======================================================================== -// -// LocalPDFDocBuilder.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#ifndef LOCALPDFDOCBUILDER_H -#define LOCALPDFDOCBUILDER_H - -#include "PDFDocBuilder.h" - -//------------------------------------------------------------------------ -// LocalPDFDocBuilder -// -// The LocalPDFDocBuilder implements a PDFDocBuilder for local files. -//------------------------------------------------------------------------ - -class LocalPDFDocBuilder : public PDFDocBuilder { - -public: - - PDFDoc *buildPDFDoc(const GooString &uri, GooString *ownerPassword = NULL, - GooString *userPassword = NULL, void *guiDataA = NULL); - GBool supports(const GooString &uri); - -}; - -#endif /* LOCALPDFDOCBUILDER_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Makefile.am b/Build/source/libs/poppler/poppler-0.18.0/poppler/Makefile.am deleted file mode 100644 index 37fbb1b5f18..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Makefile.am +++ /dev/null @@ -1,325 +0,0 @@ -if BUILD_SPLASH_OUTPUT - -splash_sources = \ - SplashOutputDev.cc - -splash_headers = \ - SplashOutputDev.h - -splash_includes = \ - $(SPLASH_CFLAGS) - -splash_libs = \ - $(SPLASH_LIBS) \ - $(top_builddir)/splash/libsplash.la - -endif - -if BUILD_POPPLER_QT4 - -poppler_arthur = libpoppler-arthur.la - -libpoppler_arthur_la_SOURCES = \ - ArthurOutputDev.h \ - ArthurOutputDev.cc - -arthur_includes = \ - $(POPPLER_QT4_CFLAGS) - -arthur_libs = \ - $(POPPLER_QT4_LIBS) - -endif - - - -if BUILD_CAIRO_OUTPUT - -poppler_cairo = libpoppler-cairo.la - -cairo_includes = \ - $(CAIRO_CFLAGS) - -cairo_libs = \ - $(CAIRO_LIBS) - -libpoppler_cairo_la_SOURCES = \ - CairoFontEngine.cc \ - CairoFontEngine.h \ - CairoOutputDev.cc \ - CairoOutputDev.h \ - CairoRescaleBox.cc \ - CairoRescaleBox.h - -endif - -if BUILD_LIBJPEG - -libjpeg_sources = \ - DCTStream.h \ - DCTStream.cc - -libjpeg_libs = \ - $(LIBJPEG_LIBS) - -endif - -if BUILD_LIBPNG - -libpng_libs = \ - $(LIBPNG_LIBS) -libpng_includes = \ - $(LIBPNG_CFLAGS) - -endif - -if BUILD_LIBTIFF - -libtiff_libs = \ - $(LIBTIFF_LIBS) -libtiff_includes = \ - $(LIBTIFF_CFLAGS) - -endif - -if BUILD_LIBOPENJPEG - -libjpeg2000_sources = \ - JPEG2000Stream.h \ - JPEG2000Stream.cc - -libjpeg2000_libs = \ - $(LIBOPENJPEG_LIBS) - -else - -libjpeg2000_sources = \ - JPXStream.h \ - JPXStream.cc - -endif - - -if BUILD_ZLIB - -zlib_sources = \ - FlateStream.h \ - FlateStream.cc - -zlib_libs = \ - $(ZLIB_LIBS) - -endif - -if BUILD_LIBCURL - -libcurl_libs = \ - $(LIBCURL_LIBS) - -libcurl_includes = \ - $(LIBCURL_CFLAGS) - -curl_headers = \ - CurlCachedFile.h \ - CurlPDFDocBuilder.h - -curl_sources = \ - CurlCachedFile.cc \ - CurlPDFDocBuilder.cc - -endif - -if USE_CMS -cms_includes = $(LCMS_CFLAGS) -cms_libs = $(LCMS_LIBS) -endif - -INCLUDES = \ - -I$(top_srcdir) \ - -I$(top_srcdir)/goo \ - $(cms_includes) \ - $(splash_includes) \ - $(cairo_includes) \ - $(arthur_includes) \ - $(libtiff_includes) \ - $(libpng_includes) \ - $(libcurl_includes) \ - $(FREETYPE_CFLAGS) \ - $(FONTCONFIG_CFLAGS) - -lib_LTLIBRARIES = libpoppler.la - -noinst_LTLIBRARIES = $(poppler_cairo) \ - $(poppler_arthur) - -CFLAGS+=$(PTHREAD_CFLAGS) -CXXFLAGS+=$(PTHREAD_CFLAGS) - -libpoppler_la_LIBADD = \ - $(top_builddir)/goo/libgoo.la \ - $(top_builddir)/fofi/libfofi.la \ - $(cms_libs) \ - $(splash_libs) \ - $(libtiff_libs) \ - $(libjpeg_libs) \ - $(libpng_libs) \ - $(zlib_libs) \ - $(libcurl_libs) \ - $(libjpeg2000_libs) \ - $(FREETYPE_LIBS) \ - $(FONTCONFIG_LIBS) \ - $(PTHREAD_LIBS) \ - $(win32_libs) - -libpoppler_la_LDFLAGS = -version-info 18:0:0 @create_shared_lib@ @auto_import_flags@ - -if ENABLE_XPDF_HEADERS - -poppler_includedir = $(includedir)/poppler -poppler_include_HEADERS = \ - $(splash_headers) \ - $(curl_headers) \ - Annot.h \ - Array.h \ - BuiltinFont.h \ - BuiltinFontTables.h \ - CachedFile.h \ - Catalog.h \ - CharCodeToUnicode.h \ - CMap.h \ - DateInfo.h \ - Decrypt.h \ - Dict.h \ - Error.h \ - FileSpec.h \ - FontEncodingTables.h \ - FontInfo.h \ - Form.h \ - Function.h \ - Gfx.h \ - GfxFont.h \ - GfxState.h \ - GfxState_helpers.h \ - GlobalParams.h \ - Hints.h \ - JArithmeticDecoder.h \ - JBIG2Stream.h \ - Lexer.h \ - Linearization.h \ - Link.h \ - LocalPDFDocBuilder.h \ - Movie.h \ - NameToCharCode.h \ - Object.h \ - OptionalContent.h \ - Outline.h \ - OutputDev.h \ - Page.h \ - PageTransition.h \ - Parser.h \ - PDFDoc.h \ - PDFDocBuilder.h \ - PDFDocEncoding.h \ - PDFDocFactory.h \ - PopplerCache.h \ - ProfileData.h \ - PreScanOutputDev.h \ - PSTokenizer.h \ - Rendition.h \ - StdinCachedFile.h \ - StdinPDFDocBuilder.h \ - Stream-CCITT.h \ - Stream.h \ - UnicodeMap.h \ - UnicodeMapTables.h \ - UnicodeTypeTable.h \ - UnicodeCClassTables.h \ - UnicodeCompTables.h \ - UnicodeDecompTables.h \ - ViewerPreferences.h \ - XRef.h \ - CharTypes.h \ - CompactFontTables.h \ - ErrorCodes.h \ - NameToUnicodeTable.h \ - PSOutputDev.h \ - TextOutputDev.h \ - SecurityHandler.h \ - UTF8.h \ - XpdfPluginAPI.h \ - Sound.h -nodist_poppler_include_HEADERS = poppler-config.h - -endif - -libpoppler_la_SOURCES = \ - $(splash_sources) \ - $(cairo_sources) \ - $(arthur_sources) \ - $(libjpeg_sources) \ - $(zlib_sources) \ - $(libjpeg2000_sources) \ - $(curl_sources) \ - Annot.cc \ - Array.cc \ - BuiltinFont.cc \ - BuiltinFontTables.cc \ - CachedFile.cc \ - Catalog.cc \ - CharCodeToUnicode.cc \ - CMap.cc \ - DateInfo.cc \ - Decrypt.cc \ - Dict.cc \ - Error.cc \ - FileSpec.cc \ - FontEncodingTables.cc \ - Form.cc \ - FontInfo.cc \ - Function.cc \ - Gfx.cc \ - GfxFont.cc \ - GfxState.cc \ - GlobalParams.cc \ - Hints.cc \ - JArithmeticDecoder.cc \ - JBIG2Stream.cc \ - Lexer.cc \ - Linearization.cc \ - Link.cc \ - LocalPDFDocBuilder.cc \ - Movie.cc \ - NameToCharCode.cc \ - Object.cc \ - OptionalContent.cc \ - Outline.cc \ - OutputDev.cc \ - Page.cc \ - PageTransition.cc \ - Parser.cc \ - PDFDoc.cc \ - PDFDocEncoding.cc \ - PDFDocFactory.cc \ - PopplerCache.cc \ - ProfileData.cc \ - PreScanOutputDev.cc \ - PSTokenizer.cc \ - Rendition.cc \ - StdinCachedFile.cc \ - StdinPDFDocBuilder.cc \ - Stream.cc \ - strtok_r.cpp \ - UnicodeMap.cc \ - UnicodeTypeTable.cc \ - ViewerPreferences.cc \ - XRef.cc \ - PSOutputDev.cc \ - TextOutputDev.cc \ - PageLabelInfo.h \ - PageLabelInfo.cc \ - SecurityHandler.cc \ - Sound.cc \ - XpdfPluginAPI.cc - -EXTRA_DIST = gen-unicode-tables.py \ - GlobalParamsWin.cc diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Makefile.in b/Build/source/libs/poppler/poppler-0.18.0/poppler/Makefile.in deleted file mode 100644 index 2ef494f0aac..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Makefile.in +++ /dev/null @@ -1,1178 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = poppler -DIST_COMMON = $(am__poppler_include_HEADERS_DIST) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/poppler-config.h.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/define-dir.m4 $(top_srcdir)/m4/gtk-doc.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/introspection.m4 \ - $(top_srcdir)/m4/libjpeg.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h poppler-config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(libdir)" \ - "$(DESTDIR)$(poppler_includedir)" \ - "$(DESTDIR)$(poppler_includedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) -libpoppler_arthur_la_LIBADD = -am__libpoppler_arthur_la_SOURCES_DIST = ArthurOutputDev.h \ - ArthurOutputDev.cc -@BUILD_POPPLER_QT4_TRUE@am_libpoppler_arthur_la_OBJECTS = \ -@BUILD_POPPLER_QT4_TRUE@ ArthurOutputDev.lo -libpoppler_arthur_la_OBJECTS = $(am_libpoppler_arthur_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -@BUILD_POPPLER_QT4_TRUE@am_libpoppler_arthur_la_rpath = -libpoppler_cairo_la_LIBADD = -am__libpoppler_cairo_la_SOURCES_DIST = CairoFontEngine.cc \ - CairoFontEngine.h CairoOutputDev.cc CairoOutputDev.h \ - CairoRescaleBox.cc CairoRescaleBox.h -@BUILD_CAIRO_OUTPUT_TRUE@am_libpoppler_cairo_la_OBJECTS = \ -@BUILD_CAIRO_OUTPUT_TRUE@ CairoFontEngine.lo CairoOutputDev.lo \ -@BUILD_CAIRO_OUTPUT_TRUE@ CairoRescaleBox.lo -libpoppler_cairo_la_OBJECTS = $(am_libpoppler_cairo_la_OBJECTS) -@BUILD_CAIRO_OUTPUT_TRUE@am_libpoppler_cairo_la_rpath = -am__DEPENDENCIES_1 = -@USE_CMS_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) -@BUILD_SPLASH_OUTPUT_TRUE@am__DEPENDENCIES_3 = \ -@BUILD_SPLASH_OUTPUT_TRUE@ $(top_builddir)/splash/libsplash.la -@BUILD_LIBTIFF_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) -@BUILD_LIBJPEG_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1) -@BUILD_LIBPNG_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1) -@BUILD_ZLIB_TRUE@am__DEPENDENCIES_7 = $(am__DEPENDENCIES_1) -@BUILD_LIBCURL_TRUE@am__DEPENDENCIES_8 = $(am__DEPENDENCIES_1) -@BUILD_LIBOPENJPEG_TRUE@am__DEPENDENCIES_9 = $(am__DEPENDENCIES_1) -libpoppler_la_DEPENDENCIES = $(top_builddir)/goo/libgoo.la \ - $(top_builddir)/fofi/libfofi.la $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ - $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_6) \ - $(am__DEPENDENCIES_7) $(am__DEPENDENCIES_8) \ - $(am__DEPENDENCIES_9) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) -am__libpoppler_la_SOURCES_DIST = SplashOutputDev.cc DCTStream.h \ - DCTStream.cc FlateStream.h FlateStream.cc JPXStream.h \ - JPXStream.cc JPEG2000Stream.h JPEG2000Stream.cc \ - CurlCachedFile.cc CurlPDFDocBuilder.cc Annot.cc Array.cc \ - BuiltinFont.cc BuiltinFontTables.cc CachedFile.cc Catalog.cc \ - CharCodeToUnicode.cc CMap.cc DateInfo.cc Decrypt.cc Dict.cc \ - Error.cc FileSpec.cc FontEncodingTables.cc Form.cc FontInfo.cc \ - Function.cc Gfx.cc GfxFont.cc GfxState.cc GlobalParams.cc \ - Hints.cc JArithmeticDecoder.cc JBIG2Stream.cc Lexer.cc \ - Linearization.cc Link.cc LocalPDFDocBuilder.cc Movie.cc \ - NameToCharCode.cc Object.cc OptionalContent.cc Outline.cc \ - OutputDev.cc Page.cc PageTransition.cc Parser.cc PDFDoc.cc \ - PDFDocEncoding.cc PDFDocFactory.cc PopplerCache.cc \ - ProfileData.cc PreScanOutputDev.cc PSTokenizer.cc Rendition.cc \ - StdinCachedFile.cc StdinPDFDocBuilder.cc Stream.cc \ - strtok_r.cpp UnicodeMap.cc UnicodeTypeTable.cc \ - ViewerPreferences.cc XRef.cc PSOutputDev.cc TextOutputDev.cc \ - PageLabelInfo.h PageLabelInfo.cc SecurityHandler.cc Sound.cc \ - XpdfPluginAPI.cc -@BUILD_SPLASH_OUTPUT_TRUE@am__objects_1 = SplashOutputDev.lo -@BUILD_LIBJPEG_TRUE@am__objects_2 = DCTStream.lo -@BUILD_ZLIB_TRUE@am__objects_3 = FlateStream.lo -@BUILD_LIBOPENJPEG_FALSE@am__objects_4 = JPXStream.lo -@BUILD_LIBOPENJPEG_TRUE@am__objects_4 = JPEG2000Stream.lo -@BUILD_LIBCURL_TRUE@am__objects_5 = CurlCachedFile.lo \ -@BUILD_LIBCURL_TRUE@ CurlPDFDocBuilder.lo -am_libpoppler_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ - $(am__objects_3) $(am__objects_4) $(am__objects_5) Annot.lo \ - Array.lo BuiltinFont.lo BuiltinFontTables.lo CachedFile.lo \ - Catalog.lo CharCodeToUnicode.lo CMap.lo DateInfo.lo Decrypt.lo \ - Dict.lo Error.lo FileSpec.lo FontEncodingTables.lo Form.lo \ - FontInfo.lo Function.lo Gfx.lo GfxFont.lo GfxState.lo \ - GlobalParams.lo Hints.lo JArithmeticDecoder.lo JBIG2Stream.lo \ - Lexer.lo Linearization.lo Link.lo LocalPDFDocBuilder.lo \ - Movie.lo NameToCharCode.lo Object.lo OptionalContent.lo \ - Outline.lo OutputDev.lo Page.lo PageTransition.lo Parser.lo \ - PDFDoc.lo PDFDocEncoding.lo PDFDocFactory.lo PopplerCache.lo \ - ProfileData.lo PreScanOutputDev.lo PSTokenizer.lo Rendition.lo \ - StdinCachedFile.lo StdinPDFDocBuilder.lo Stream.lo strtok_r.lo \ - UnicodeMap.lo UnicodeTypeTable.lo ViewerPreferences.lo XRef.lo \ - PSOutputDev.lo TextOutputDev.lo PageLabelInfo.lo \ - SecurityHandler.lo Sound.lo XpdfPluginAPI.lo -libpoppler_la_OBJECTS = $(am_libpoppler_la_OBJECTS) -libpoppler_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ - $(AM_CXXFLAGS) $(CXXFLAGS) $(libpoppler_la_LDFLAGS) $(LDFLAGS) \ - -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -AM_V_CXX = $(am__v_CXX_$(V)) -am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) -am__v_CXX_0 = @echo " CXX " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CXXLD = $(am__v_CXXLD_$(V)) -am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CXXLD_0 = @echo " CXXLD " $@; -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(libpoppler_arthur_la_SOURCES) \ - $(libpoppler_cairo_la_SOURCES) $(libpoppler_la_SOURCES) -DIST_SOURCES = $(am__libpoppler_arthur_la_SOURCES_DIST) \ - $(am__libpoppler_cairo_la_SOURCES_DIST) \ - $(am__libpoppler_la_SOURCES_DIST) -am__poppler_include_HEADERS_DIST = SplashOutputDev.h CurlCachedFile.h \ - CurlPDFDocBuilder.h Annot.h Array.h BuiltinFont.h \ - BuiltinFontTables.h CachedFile.h Catalog.h CharCodeToUnicode.h \ - CMap.h DateInfo.h Decrypt.h Dict.h Error.h FileSpec.h \ - FontEncodingTables.h FontInfo.h Form.h Function.h Gfx.h \ - GfxFont.h GfxState.h GfxState_helpers.h GlobalParams.h Hints.h \ - JArithmeticDecoder.h JBIG2Stream.h Lexer.h Linearization.h \ - Link.h LocalPDFDocBuilder.h Movie.h NameToCharCode.h Object.h \ - OptionalContent.h Outline.h OutputDev.h Page.h \ - PageTransition.h Parser.h PDFDoc.h PDFDocBuilder.h \ - PDFDocEncoding.h PDFDocFactory.h PopplerCache.h ProfileData.h \ - PreScanOutputDev.h PSTokenizer.h Rendition.h StdinCachedFile.h \ - StdinPDFDocBuilder.h Stream-CCITT.h Stream.h UnicodeMap.h \ - UnicodeMapTables.h UnicodeTypeTable.h UnicodeCClassTables.h \ - UnicodeCompTables.h UnicodeDecompTables.h ViewerPreferences.h \ - XRef.h CharTypes.h CompactFontTables.h ErrorCodes.h \ - NameToUnicodeTable.h PSOutputDev.h TextOutputDev.h \ - SecurityHandler.h UTF8.h XpdfPluginAPI.h Sound.h -HEADERS = $(nodist_poppler_include_HEADERS) $(poppler_include_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CAIRO_CFLAGS = @CAIRO_CFLAGS@ -CAIRO_FEATURE = @CAIRO_FEATURE@ -CAIRO_LIBS = @CAIRO_LIBS@ -CAIRO_REQ = @CAIRO_REQ@ -CAIRO_VERSION = @CAIRO_VERSION@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ $(PTHREAD_CFLAGS) -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ $(PTHREAD_CFLAGS) -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ -FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ -FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ -FREETYPE_CONFIG = @FREETYPE_CONFIG@ -FREETYPE_LIBS = @FREETYPE_LIBS@ -GLIB_MKENUMS = @GLIB_MKENUMS@ -GLIB_REQ = @GLIB_REQ@ -GREP = @GREP@ -GTKDOC_CHECK = @GTKDOC_CHECK@ -GTKDOC_MKPDF = @GTKDOC_MKPDF@ -GTKDOC_REBASE = @GTKDOC_REBASE@ -GTK_TEST_CFLAGS = @GTK_TEST_CFLAGS@ -GTK_TEST_LIBS = @GTK_TEST_LIBS@ -HTML_DIR = @HTML_DIR@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ -INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ -INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ -INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ -INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ -INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ -INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ -INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ -LCMS_CFLAGS = @LCMS_CFLAGS@ -LCMS_LIBS = @LCMS_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ -LIBCURL_LIBS = @LIBCURL_LIBS@ -LIBICONV = @LIBICONV@ -LIBJPEG_LIBS = @LIBJPEG_LIBS@ -LIBOBJS = @LIBOBJS@ -LIBOPENJPEG_LIBS = @LIBOPENJPEG_LIBS@ -LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ -LIBPNG_LIBS = @LIBPNG_LIBS@ -LIBS = @LIBS@ -LIBTIFF_LIBS = @LIBTIFF_LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -MOCQT4 = @MOCQT4@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PC_REQUIRES = @PC_REQUIRES@ -PC_REQUIRES_PRIVATE = @PC_REQUIRES_PRIVATE@ -PKG_CONFIG = @PKG_CONFIG@ -PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ -PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -POPPLER_DATADIR = @POPPLER_DATADIR@ -POPPLER_GLIB_CFLAGS = @POPPLER_GLIB_CFLAGS@ -POPPLER_GLIB_DISABLE_DEPRECATED = @POPPLER_GLIB_DISABLE_DEPRECATED@ -POPPLER_GLIB_DISABLE_SINGLE_INCLUDES = @POPPLER_GLIB_DISABLE_SINGLE_INCLUDES@ -POPPLER_GLIB_LIBS = @POPPLER_GLIB_LIBS@ -POPPLER_MAJOR_VERSION = @POPPLER_MAJOR_VERSION@ -POPPLER_MICRO_VERSION = @POPPLER_MICRO_VERSION@ -POPPLER_MINOR_VERSION = @POPPLER_MINOR_VERSION@ -POPPLER_QT4_CFLAGS = @POPPLER_QT4_CFLAGS@ -POPPLER_QT4_CXXFLAGS = @POPPLER_QT4_CXXFLAGS@ -POPPLER_QT4_LIBS = @POPPLER_QT4_LIBS@ -POPPLER_QT4_TEST_CFLAGS = @POPPLER_QT4_TEST_CFLAGS@ -POPPLER_QT4_TEST_LIBS = @POPPLER_QT4_TEST_LIBS@ -POPPLER_VERSION = @POPPLER_VERSION@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -XMKMF = @XMKMF@ -X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ -X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ -ZLIB_LIBS = @ZLIB_LIBS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -auto_import_flags = @auto_import_flags@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -create_shared_lib = @create_shared_lib@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -win32_libs = @win32_libs@ -@BUILD_SPLASH_OUTPUT_TRUE@splash_sources = \ -@BUILD_SPLASH_OUTPUT_TRUE@ SplashOutputDev.cc - -@BUILD_SPLASH_OUTPUT_TRUE@splash_headers = \ -@BUILD_SPLASH_OUTPUT_TRUE@ SplashOutputDev.h - -@BUILD_SPLASH_OUTPUT_TRUE@splash_includes = \ -@BUILD_SPLASH_OUTPUT_TRUE@ $(SPLASH_CFLAGS) - -@BUILD_SPLASH_OUTPUT_TRUE@splash_libs = \ -@BUILD_SPLASH_OUTPUT_TRUE@ $(SPLASH_LIBS) \ -@BUILD_SPLASH_OUTPUT_TRUE@ $(top_builddir)/splash/libsplash.la - -@BUILD_POPPLER_QT4_TRUE@poppler_arthur = libpoppler-arthur.la -@BUILD_POPPLER_QT4_TRUE@libpoppler_arthur_la_SOURCES = \ -@BUILD_POPPLER_QT4_TRUE@ ArthurOutputDev.h \ -@BUILD_POPPLER_QT4_TRUE@ ArthurOutputDev.cc - -@BUILD_POPPLER_QT4_TRUE@arthur_includes = \ -@BUILD_POPPLER_QT4_TRUE@ $(POPPLER_QT4_CFLAGS) - -@BUILD_POPPLER_QT4_TRUE@arthur_libs = \ -@BUILD_POPPLER_QT4_TRUE@ $(POPPLER_QT4_LIBS) - -@BUILD_CAIRO_OUTPUT_TRUE@poppler_cairo = libpoppler-cairo.la -@BUILD_CAIRO_OUTPUT_TRUE@cairo_includes = \ -@BUILD_CAIRO_OUTPUT_TRUE@ $(CAIRO_CFLAGS) - -@BUILD_CAIRO_OUTPUT_TRUE@cairo_libs = \ -@BUILD_CAIRO_OUTPUT_TRUE@ $(CAIRO_LIBS) - -@BUILD_CAIRO_OUTPUT_TRUE@libpoppler_cairo_la_SOURCES = \ -@BUILD_CAIRO_OUTPUT_TRUE@ CairoFontEngine.cc \ -@BUILD_CAIRO_OUTPUT_TRUE@ CairoFontEngine.h \ -@BUILD_CAIRO_OUTPUT_TRUE@ CairoOutputDev.cc \ -@BUILD_CAIRO_OUTPUT_TRUE@ CairoOutputDev.h \ -@BUILD_CAIRO_OUTPUT_TRUE@ CairoRescaleBox.cc \ -@BUILD_CAIRO_OUTPUT_TRUE@ CairoRescaleBox.h - -@BUILD_LIBJPEG_TRUE@libjpeg_sources = \ -@BUILD_LIBJPEG_TRUE@ DCTStream.h \ -@BUILD_LIBJPEG_TRUE@ DCTStream.cc - -@BUILD_LIBJPEG_TRUE@libjpeg_libs = \ -@BUILD_LIBJPEG_TRUE@ $(LIBJPEG_LIBS) - -@BUILD_LIBPNG_TRUE@libpng_libs = \ -@BUILD_LIBPNG_TRUE@ $(LIBPNG_LIBS) - -@BUILD_LIBPNG_TRUE@libpng_includes = \ -@BUILD_LIBPNG_TRUE@ $(LIBPNG_CFLAGS) - -@BUILD_LIBTIFF_TRUE@libtiff_libs = \ -@BUILD_LIBTIFF_TRUE@ $(LIBTIFF_LIBS) - -@BUILD_LIBTIFF_TRUE@libtiff_includes = \ -@BUILD_LIBTIFF_TRUE@ $(LIBTIFF_CFLAGS) - -@BUILD_LIBOPENJPEG_FALSE@libjpeg2000_sources = \ -@BUILD_LIBOPENJPEG_FALSE@ JPXStream.h \ -@BUILD_LIBOPENJPEG_FALSE@ JPXStream.cc - -@BUILD_LIBOPENJPEG_TRUE@libjpeg2000_sources = \ -@BUILD_LIBOPENJPEG_TRUE@ JPEG2000Stream.h \ -@BUILD_LIBOPENJPEG_TRUE@ JPEG2000Stream.cc - -@BUILD_LIBOPENJPEG_TRUE@libjpeg2000_libs = \ -@BUILD_LIBOPENJPEG_TRUE@ $(LIBOPENJPEG_LIBS) - -@BUILD_ZLIB_TRUE@zlib_sources = \ -@BUILD_ZLIB_TRUE@ FlateStream.h \ -@BUILD_ZLIB_TRUE@ FlateStream.cc - -@BUILD_ZLIB_TRUE@zlib_libs = \ -@BUILD_ZLIB_TRUE@ $(ZLIB_LIBS) - -@BUILD_LIBCURL_TRUE@libcurl_libs = \ -@BUILD_LIBCURL_TRUE@ $(LIBCURL_LIBS) - -@BUILD_LIBCURL_TRUE@libcurl_includes = \ -@BUILD_LIBCURL_TRUE@ $(LIBCURL_CFLAGS) - -@BUILD_LIBCURL_TRUE@curl_headers = \ -@BUILD_LIBCURL_TRUE@ CurlCachedFile.h \ -@BUILD_LIBCURL_TRUE@ CurlPDFDocBuilder.h - -@BUILD_LIBCURL_TRUE@curl_sources = \ -@BUILD_LIBCURL_TRUE@ CurlCachedFile.cc \ -@BUILD_LIBCURL_TRUE@ CurlPDFDocBuilder.cc - -@USE_CMS_TRUE@cms_includes = $(LCMS_CFLAGS) -@USE_CMS_TRUE@cms_libs = $(LCMS_LIBS) -INCLUDES = \ - -I$(top_srcdir) \ - -I$(top_srcdir)/goo \ - $(cms_includes) \ - $(splash_includes) \ - $(cairo_includes) \ - $(arthur_includes) \ - $(libtiff_includes) \ - $(libpng_includes) \ - $(libcurl_includes) \ - $(FREETYPE_CFLAGS) \ - $(FONTCONFIG_CFLAGS) - -lib_LTLIBRARIES = libpoppler.la -noinst_LTLIBRARIES = $(poppler_cairo) \ - $(poppler_arthur) - -libpoppler_la_LIBADD = \ - $(top_builddir)/goo/libgoo.la \ - $(top_builddir)/fofi/libfofi.la \ - $(cms_libs) \ - $(splash_libs) \ - $(libtiff_libs) \ - $(libjpeg_libs) \ - $(libpng_libs) \ - $(zlib_libs) \ - $(libcurl_libs) \ - $(libjpeg2000_libs) \ - $(FREETYPE_LIBS) \ - $(FONTCONFIG_LIBS) \ - $(PTHREAD_LIBS) \ - $(win32_libs) - -libpoppler_la_LDFLAGS = -version-info 18:0:0 @create_shared_lib@ @auto_import_flags@ -@ENABLE_XPDF_HEADERS_TRUE@poppler_includedir = $(includedir)/poppler -@ENABLE_XPDF_HEADERS_TRUE@poppler_include_HEADERS = \ -@ENABLE_XPDF_HEADERS_TRUE@ $(splash_headers) \ -@ENABLE_XPDF_HEADERS_TRUE@ $(curl_headers) \ -@ENABLE_XPDF_HEADERS_TRUE@ Annot.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Array.h \ -@ENABLE_XPDF_HEADERS_TRUE@ BuiltinFont.h \ -@ENABLE_XPDF_HEADERS_TRUE@ BuiltinFontTables.h \ -@ENABLE_XPDF_HEADERS_TRUE@ CachedFile.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Catalog.h \ -@ENABLE_XPDF_HEADERS_TRUE@ CharCodeToUnicode.h \ -@ENABLE_XPDF_HEADERS_TRUE@ CMap.h \ -@ENABLE_XPDF_HEADERS_TRUE@ DateInfo.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Decrypt.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Dict.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Error.h \ -@ENABLE_XPDF_HEADERS_TRUE@ FileSpec.h \ -@ENABLE_XPDF_HEADERS_TRUE@ FontEncodingTables.h \ -@ENABLE_XPDF_HEADERS_TRUE@ FontInfo.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Form.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Function.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Gfx.h \ -@ENABLE_XPDF_HEADERS_TRUE@ GfxFont.h \ -@ENABLE_XPDF_HEADERS_TRUE@ GfxState.h \ -@ENABLE_XPDF_HEADERS_TRUE@ GfxState_helpers.h \ -@ENABLE_XPDF_HEADERS_TRUE@ GlobalParams.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Hints.h \ -@ENABLE_XPDF_HEADERS_TRUE@ JArithmeticDecoder.h \ -@ENABLE_XPDF_HEADERS_TRUE@ JBIG2Stream.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Lexer.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Linearization.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Link.h \ -@ENABLE_XPDF_HEADERS_TRUE@ LocalPDFDocBuilder.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Movie.h \ -@ENABLE_XPDF_HEADERS_TRUE@ NameToCharCode.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Object.h \ -@ENABLE_XPDF_HEADERS_TRUE@ OptionalContent.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Outline.h \ -@ENABLE_XPDF_HEADERS_TRUE@ OutputDev.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Page.h \ -@ENABLE_XPDF_HEADERS_TRUE@ PageTransition.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Parser.h \ -@ENABLE_XPDF_HEADERS_TRUE@ PDFDoc.h \ -@ENABLE_XPDF_HEADERS_TRUE@ PDFDocBuilder.h \ -@ENABLE_XPDF_HEADERS_TRUE@ PDFDocEncoding.h \ -@ENABLE_XPDF_HEADERS_TRUE@ PDFDocFactory.h \ -@ENABLE_XPDF_HEADERS_TRUE@ PopplerCache.h \ -@ENABLE_XPDF_HEADERS_TRUE@ ProfileData.h \ -@ENABLE_XPDF_HEADERS_TRUE@ PreScanOutputDev.h \ -@ENABLE_XPDF_HEADERS_TRUE@ PSTokenizer.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Rendition.h \ -@ENABLE_XPDF_HEADERS_TRUE@ StdinCachedFile.h \ -@ENABLE_XPDF_HEADERS_TRUE@ StdinPDFDocBuilder.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Stream-CCITT.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Stream.h \ -@ENABLE_XPDF_HEADERS_TRUE@ UnicodeMap.h \ -@ENABLE_XPDF_HEADERS_TRUE@ UnicodeMapTables.h \ -@ENABLE_XPDF_HEADERS_TRUE@ UnicodeTypeTable.h \ -@ENABLE_XPDF_HEADERS_TRUE@ UnicodeCClassTables.h \ -@ENABLE_XPDF_HEADERS_TRUE@ UnicodeCompTables.h \ -@ENABLE_XPDF_HEADERS_TRUE@ UnicodeDecompTables.h \ -@ENABLE_XPDF_HEADERS_TRUE@ ViewerPreferences.h \ -@ENABLE_XPDF_HEADERS_TRUE@ XRef.h \ -@ENABLE_XPDF_HEADERS_TRUE@ CharTypes.h \ -@ENABLE_XPDF_HEADERS_TRUE@ CompactFontTables.h \ -@ENABLE_XPDF_HEADERS_TRUE@ ErrorCodes.h \ -@ENABLE_XPDF_HEADERS_TRUE@ NameToUnicodeTable.h \ -@ENABLE_XPDF_HEADERS_TRUE@ PSOutputDev.h \ -@ENABLE_XPDF_HEADERS_TRUE@ TextOutputDev.h \ -@ENABLE_XPDF_HEADERS_TRUE@ SecurityHandler.h \ -@ENABLE_XPDF_HEADERS_TRUE@ UTF8.h \ -@ENABLE_XPDF_HEADERS_TRUE@ XpdfPluginAPI.h \ -@ENABLE_XPDF_HEADERS_TRUE@ Sound.h - -@ENABLE_XPDF_HEADERS_TRUE@nodist_poppler_include_HEADERS = poppler-config.h -libpoppler_la_SOURCES = \ - $(splash_sources) \ - $(cairo_sources) \ - $(arthur_sources) \ - $(libjpeg_sources) \ - $(zlib_sources) \ - $(libjpeg2000_sources) \ - $(curl_sources) \ - Annot.cc \ - Array.cc \ - BuiltinFont.cc \ - BuiltinFontTables.cc \ - CachedFile.cc \ - Catalog.cc \ - CharCodeToUnicode.cc \ - CMap.cc \ - DateInfo.cc \ - Decrypt.cc \ - Dict.cc \ - Error.cc \ - FileSpec.cc \ - FontEncodingTables.cc \ - Form.cc \ - FontInfo.cc \ - Function.cc \ - Gfx.cc \ - GfxFont.cc \ - GfxState.cc \ - GlobalParams.cc \ - Hints.cc \ - JArithmeticDecoder.cc \ - JBIG2Stream.cc \ - Lexer.cc \ - Linearization.cc \ - Link.cc \ - LocalPDFDocBuilder.cc \ - Movie.cc \ - NameToCharCode.cc \ - Object.cc \ - OptionalContent.cc \ - Outline.cc \ - OutputDev.cc \ - Page.cc \ - PageTransition.cc \ - Parser.cc \ - PDFDoc.cc \ - PDFDocEncoding.cc \ - PDFDocFactory.cc \ - PopplerCache.cc \ - ProfileData.cc \ - PreScanOutputDev.cc \ - PSTokenizer.cc \ - Rendition.cc \ - StdinCachedFile.cc \ - StdinPDFDocBuilder.cc \ - Stream.cc \ - strtok_r.cpp \ - UnicodeMap.cc \ - UnicodeTypeTable.cc \ - ViewerPreferences.cc \ - XRef.cc \ - PSOutputDev.cc \ - TextOutputDev.cc \ - PageLabelInfo.h \ - PageLabelInfo.cc \ - SecurityHandler.cc \ - Sound.cc \ - XpdfPluginAPI.cc - -EXTRA_DIST = gen-unicode-tables.py \ - GlobalParamsWin.cc - -all: poppler-config.h - $(MAKE) $(AM_MAKEFLAGS) all-am - -.SUFFIXES: -.SUFFIXES: .cc .cpp .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign poppler/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign poppler/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -poppler-config.h: stamp-h2 - @if test ! -f $@; then \ - rm -f stamp-h2; \ - $(MAKE) $(AM_MAKEFLAGS) stamp-h2; \ - else :; fi - -stamp-h2: $(srcdir)/poppler-config.h.in $(top_builddir)/config.status - @rm -f stamp-h2 - cd $(top_builddir) && $(SHELL) ./config.status poppler/poppler-config.h -$(srcdir)/poppler-config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h2 - touch $@ - -distclean-hdr: - -rm -f poppler-config.h stamp-h2 -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libpoppler-arthur.la: $(libpoppler_arthur_la_OBJECTS) $(libpoppler_arthur_la_DEPENDENCIES) - $(AM_V_CXXLD)$(CXXLINK) $(am_libpoppler_arthur_la_rpath) $(libpoppler_arthur_la_OBJECTS) $(libpoppler_arthur_la_LIBADD) $(LIBS) -libpoppler-cairo.la: $(libpoppler_cairo_la_OBJECTS) $(libpoppler_cairo_la_DEPENDENCIES) - $(AM_V_CXXLD)$(CXXLINK) $(am_libpoppler_cairo_la_rpath) $(libpoppler_cairo_la_OBJECTS) $(libpoppler_cairo_la_LIBADD) $(LIBS) -libpoppler.la: $(libpoppler_la_OBJECTS) $(libpoppler_la_DEPENDENCIES) - $(AM_V_CXXLD)$(libpoppler_la_LINK) -rpath $(libdir) $(libpoppler_la_OBJECTS) $(libpoppler_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Annot.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Array.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ArthurOutputDev.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BuiltinFont.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BuiltinFontTables.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMap.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CachedFile.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CairoFontEngine.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CairoOutputDev.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CairoRescaleBox.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Catalog.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CharCodeToUnicode.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CurlCachedFile.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CurlPDFDocBuilder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DCTStream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DateInfo.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Decrypt.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Dict.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Error.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileSpec.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FlateStream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontEncodingTables.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontInfo.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Form.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Function.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Gfx.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GfxFont.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GfxState.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GlobalParams.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Hints.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JArithmeticDecoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JBIG2Stream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JPEG2000Stream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JPXStream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Lexer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Linearization.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Link.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LocalPDFDocBuilder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Movie.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NameToCharCode.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Object.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OptionalContent.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Outline.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OutputDev.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PDFDoc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PDFDocEncoding.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PDFDocFactory.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSOutputDev.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSTokenizer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Page.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PageLabelInfo.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PageTransition.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Parser.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PopplerCache.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreScanOutputDev.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProfileData.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Rendition.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SecurityHandler.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Sound.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SplashOutputDev.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StdinCachedFile.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StdinPDFDocBuilder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Stream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TextOutputDev.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnicodeMap.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnicodeTypeTable.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ViewerPreferences.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XRef.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XpdfPluginAPI.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtok_r.Plo@am__quote@ - -.cc.o: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cc.obj: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< - -.cpp.o: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cpp.obj: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cpp.lo: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-nodist_poppler_includeHEADERS: $(nodist_poppler_include_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(poppler_includedir)" || $(MKDIR_P) "$(DESTDIR)$(poppler_includedir)" - @list='$(nodist_poppler_include_HEADERS)'; test -n "$(poppler_includedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(poppler_includedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(poppler_includedir)" || exit $$?; \ - done - -uninstall-nodist_poppler_includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(nodist_poppler_include_HEADERS)'; test -n "$(poppler_includedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(poppler_includedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(poppler_includedir)" && rm -f $$files -install-poppler_includeHEADERS: $(poppler_include_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(poppler_includedir)" || $(MKDIR_P) "$(DESTDIR)$(poppler_includedir)" - @list='$(poppler_include_HEADERS)'; test -n "$(poppler_includedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(poppler_includedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(poppler_includedir)" || exit $$?; \ - done - -uninstall-poppler_includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(poppler_include_HEADERS)'; test -n "$(poppler_includedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(poppler_includedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(poppler_includedir)" && rm -f $$files - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) poppler-config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) poppler-config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) poppler-config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) poppler-config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) poppler-config.h -installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(poppler_includedir)" "$(DESTDIR)$(poppler_includedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstLTLIBRARIES mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-nodist_poppler_includeHEADERS \ - install-poppler_includeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libLTLIBRARIES \ - uninstall-nodist_poppler_includeHEADERS \ - uninstall-poppler_includeHEADERS - -.MAKE: all install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ - ctags distclean distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-libLTLIBRARIES \ - install-man install-nodist_poppler_includeHEADERS install-pdf \ - install-pdf-am install-poppler_includeHEADERS install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-libLTLIBRARIES \ - uninstall-nodist_poppler_includeHEADERS \ - uninstall-poppler_includeHEADERS - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Movie.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Movie.cc deleted file mode 100644 index 3e764ac1590..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Movie.cc +++ /dev/null @@ -1,285 +0,0 @@ -//********************************************************************************* -// Movie.cc -//--------------------------------------------------------------------------------- -// -//--------------------------------------------------------------------------------- -// Hugo Mercier <hmercier31[at]gmail.com> (c) 2008 -// Pino Toscano <pino@kde.org> (c) 2008 -// Carlos Garcia Campos <carlosgc@gnome.org> (c) 2010 -// Albert Astals Cid <aacid@kde.org> (c) 2010 -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -//********************************************************************************* - -#include <math.h> -#include "Movie.h" -#include "FileSpec.h" - -MovieActivationParameters::MovieActivationParameters() { - // default values - floatingWindow = gFalse; - xPosition = 0.5; - yPosition = 0.5; - rate = 1.0; - volume = 100; - showControls = gFalse; - synchronousPlay = gFalse; - repeatMode = repeatModeOnce; - start.units = 0; - duration.units = 0; - znum = 1; - zdenum = 1; -} - -MovieActivationParameters::~MovieActivationParameters() { -} - -void MovieActivationParameters::parseMovieActivation(Object* aDict) { - Object obj1; - - if (!aDict->dictLookup("Start", &obj1)->isNull()) { - if (obj1.isInt()) { - // If it is representable as an integer (subject to the implementation limit for - // integers, as described in Appendix C), it should be specified as such. - - start.units = obj1.getInt(); - } else if (obj1.isString()) { - // If it is not representable as an integer, it should be specified as an 8-byte - // string representing a 64-bit twos-complement integer, most significant - // byte first. - - // UNSUPPORTED - } else if (obj1.isArray()) { - Array* a = obj1.getArray(); - - Object tmp; - a->get(0, &tmp); - if (tmp.isInt()) { - start.units = tmp.getInt(); - } - if (tmp.isString()) { - // UNSUPPORTED - } - tmp.free(); - - a->get(1, &tmp); - if (tmp.isInt()) { - start.units_per_second = tmp.getInt(); - } - tmp.free(); - } - } - obj1.free(); - - if (!aDict->dictLookup("Duration", &obj1)->isNull()) { - if (obj1.isInt()) { - duration.units = obj1.getInt(); - } else if (obj1.isString()) { - // UNSUPPORTED - } else if (obj1.isArray()) { - Array* a = obj1.getArray(); - - Object tmp; - a->get(0, &tmp); - if (tmp.isInt()) { - duration.units = tmp.getInt(); - } - if (tmp.isString()) { - // UNSUPPORTED - } - tmp.free(); - - a->get(1, &tmp); - if (tmp.isInt()) { - duration.units_per_second = tmp.getInt(); - } - tmp.free(); - } - } - obj1.free(); - - if (aDict->dictLookup("Rate", &obj1)->isNum()) { - rate = obj1.getNum(); - } - obj1.free(); - - if (aDict->dictLookup("Volume", &obj1)->isNum()) { - // convert volume to [0 100] - volume = int((obj1.getNum() + 1.0) * 50); - } - obj1.free(); - - if (aDict->dictLookup("ShowControls", &obj1)->isBool()) { - showControls = obj1.getBool(); - } - obj1.free(); - - if (aDict->dictLookup("Synchronous", &obj1)->isBool()) { - synchronousPlay = obj1.getBool(); - } - obj1.free(); - - if (aDict->dictLookup("Mode", &obj1)->isName()) { - char* name = obj1.getName(); - if (!strcmp(name, "Once")) { - repeatMode = repeatModeOnce; - } else if (!strcmp(name, "Open")) { - repeatMode = repeatModeOpen; - } else if (!strcmp(name, "Repeat")) { - repeatMode = repeatModeRepeat; - } else if (!strcmp(name,"Palindrome")) { - repeatMode = repeatModePalindrome; - } - } - obj1.free(); - - if (aDict->dictLookup("FWScale", &obj1)->isArray()) { - // the presence of that entry implies that the movie is to be played - // in a floating window - floatingWindow = gTrue; - - Array* scale = obj1.getArray(); - if (scale->getLength() >= 2) { - Object tmp; - if (scale->get(0, &tmp)->isInt()) { - znum = tmp.getInt(); - } - tmp.free(); - if (scale->get(1, &tmp)->isInt()) { - zdenum = tmp.getInt(); - } - tmp.free(); - } - } - obj1.free(); - - if (aDict->dictLookup("FWPosition", &obj1)->isArray()) { - Array* pos = obj1.getArray(); - if (pos->getLength() >= 2) { - Object tmp; - if (pos->get(0, &tmp)->isNum()) { - xPosition = tmp.getNum(); - } - tmp.free(); - if (pos->get(1, &tmp)->isNum()) { - yPosition = tmp.getNum(); - } - tmp.free(); - } - } - obj1.free(); -} - -void Movie::parseMovie (Object *movieDict) { - fileName = NULL; - rotationAngle = 0; - width = -1; - height = -1; - showPoster = gFalse; - - Object obj1, obj2; - if (getFileSpecNameForPlatform(movieDict->dictLookup("F", &obj1), &obj2)) { - fileName = obj2.getString()->copy(); - obj2.free(); - } else { - error (-1, "Invalid Movie"); - ok = gFalse; - obj1.free(); - return; - } - obj1.free(); - - if (movieDict->dictLookup("Aspect", &obj1)->isArray()) { - Array* aspect = obj1.getArray(); - if (aspect->getLength() >= 2) { - Object tmp; - if( aspect->get(0, &tmp)->isNum() ) { - width = (int)floor( aspect->get(0, &tmp)->getNum() + 0.5 ); - } - tmp.free(); - if( aspect->get(1, &tmp)->isNum() ) { - height = (int)floor( aspect->get(1, &tmp)->getNum() + 0.5 ); - } - tmp.free(); - } - } - obj1.free(); - - if (movieDict->dictLookup("Rotate", &obj1)->isInt()) { - // round up to 90° - rotationAngle = (((obj1.getInt() + 360) % 360) % 90) * 90; - } - obj1.free(); - - // - // movie poster - // - if (!movieDict->dictLookupNF("Poster", &poster)->isNull()) { - if (poster.isRef() || poster.isStream()) { - showPoster = gTrue; - } else if (poster.isBool()) { - showPoster = poster.getBool(); - poster.free(); - } else { - poster.free(); - } - } -} - -Movie::~Movie() { - if (fileName) - delete fileName; - poster.free(); -} - -Movie::Movie(Object *movieDict) { - ok = gTrue; - - if (movieDict->isDict()) - parseMovie(movieDict); - else - ok = gFalse; -} - -Movie::Movie(Object *movieDict, Object *aDict) { - ok = gTrue; - - if (movieDict->isDict()) { - parseMovie(movieDict); - if (aDict->isDict()) - MA.parseMovieActivation(aDict); - } else { - ok = gFalse; - } -} - -void Movie::getFloatingWindowSize(int *widthA, int *heightA) -{ - *widthA = int(width * double(MA.znum) / MA.zdenum); - *heightA = int(height * double(MA.znum) / MA.zdenum); -} - -Movie* Movie::copy() { - - // call default copy constructor - Movie* new_movie = new Movie(*this); - - if (fileName) - new_movie->fileName = fileName->copy(); - - poster.copy(&new_movie->poster); - - return new_movie; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Movie.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Movie.h deleted file mode 100644 index 1a162659179..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Movie.h +++ /dev/null @@ -1,110 +0,0 @@ -//********************************************************************************* -// Movie.h -//--------------------------------------------------------------------------------- -// -//--------------------------------------------------------------------------------- -// Hugo Mercier <hmercier31[at]gmail.com> (c) 2008 -// Carlos Garcia Campos <carlosgc@gnome.org> (c) 2010 -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -//********************************************************************************* - -#ifndef _MOVIE_H_ -#define _MOVIE_H_ - -#include "Object.h" - -struct MovieActivationParameters { - - MovieActivationParameters(); - ~MovieActivationParameters(); - - // parse from a "Movie Activation" dictionary - void parseMovieActivation(Object* actObj); - - enum MovieRepeatMode { - repeatModeOnce, - repeatModeOpen, - repeatModeRepeat, - repeatModePalindrome - }; - - struct MovieTime { - MovieTime() { units_per_second = 0; } - Gulong units; - int units_per_second; // 0 : defined by movie - }; - - MovieTime start; // 0 - MovieTime duration; // 0 - - double rate; // 1.0 - - int volume; // 100 - - GBool showControls; // false - - GBool synchronousPlay; // false - MovieRepeatMode repeatMode; // repeatModeOnce - - // floating window position - GBool floatingWindow; - double xPosition; // 0.5 - double yPosition; // 0.5 - int znum; // 1 - int zdenum; // 1 -}; - -class Movie { - public: - Movie(Object *objMovie, Object *objAct); - Movie(Object *objMovie); - ~Movie(); - - GBool isOk() { return ok; } - MovieActivationParameters* getActivationParameters() { return &MA; } - - GooString* getFileName() { return fileName; } - - Gushort getRotationAngle() { return rotationAngle; } - void getAspect (int *widthA, int *heightA) { *widthA = width; *heightA = height; } - - Object *getPoster(Object *obj) { return poster.copy(obj); } - GBool getShowPoster() { return showPoster; } - - GBool getUseFloatingWindow() { return MA.floatingWindow; } - void getFloatingWindowSize(int *width, int *height); - - Movie* copy(); - - private: - void parseMovie (Object *movieDict); - - GBool ok; - - Gushort rotationAngle; // 0 - int width; // Aspect - int height; // Aspect - - Object poster; - GBool showPoster; - - GooString* fileName; - - MovieActivationParameters MA; -}; - -#endif - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/NameToCharCode.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/NameToCharCode.cc deleted file mode 100644 index efe1c4de0bd..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/NameToCharCode.cc +++ /dev/null @@ -1,116 +0,0 @@ -//======================================================================== -// -// NameToCharCode.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <string.h> -#include "goo/gmem.h" -#include "NameToCharCode.h" - -//------------------------------------------------------------------------ - -struct NameToCharCodeEntry { - char *name; - CharCode c; -}; - -//------------------------------------------------------------------------ - -NameToCharCode::NameToCharCode() { - int i; - - size = 31; - len = 0; - tab = (NameToCharCodeEntry *)gmallocn(size, sizeof(NameToCharCodeEntry)); - for (i = 0; i < size; ++i) { - tab[i].name = NULL; - } -} - -NameToCharCode::~NameToCharCode() { - int i; - - for (i = 0; i < size; ++i) { - if (tab[i].name) { - gfree(tab[i].name); - } - } - gfree(tab); -} - -void NameToCharCode::add(char *name, CharCode c) { - NameToCharCodeEntry *oldTab; - int h, i, oldSize; - - // expand the table if necessary - if (len >= size / 2) { - oldSize = size; - oldTab = tab; - size = 2*size + 1; - tab = (NameToCharCodeEntry *)gmallocn(size, sizeof(NameToCharCodeEntry)); - for (h = 0; h < size; ++h) { - tab[h].name = NULL; - } - for (i = 0; i < oldSize; ++i) { - if (oldTab[i].name) { - h = hash(oldTab[i].name); - while (tab[h].name) { - if (++h == size) { - h = 0; - } - } - tab[h] = oldTab[i]; - } - } - gfree(oldTab); - } - - // add the new name - h = hash(name); - while (tab[h].name && strcmp(tab[h].name, name)) { - if (++h == size) { - h = 0; - } - } - if (!tab[h].name) { - tab[h].name = copyString(name); - } - tab[h].c = c; - - ++len; -} - -CharCode NameToCharCode::lookup(char *name) { - int h; - - h = hash(name); - while (tab[h].name) { - if (!strcmp(tab[h].name, name)) { - return tab[h].c; - } - if (++h == size) { - h = 0; - } - } - return 0; -} - -int NameToCharCode::hash(char *name) { - char *p; - unsigned int h; - - h = 0; - for (p = name; *p; ++p) { - h = 17 * h + (int)(*p & 0xff); - } - return (int)(h % size); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/NameToCharCode.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/NameToCharCode.h deleted file mode 100644 index bc57c3736c1..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/NameToCharCode.h +++ /dev/null @@ -1,40 +0,0 @@ -//======================================================================== -// -// NameToCharCode.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef NAMETOCHARCODE_H -#define NAMETOCHARCODE_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "CharTypes.h" - -struct NameToCharCodeEntry; - -//------------------------------------------------------------------------ - -class NameToCharCode { -public: - - NameToCharCode(); - ~NameToCharCode(); - - void add(char *name, CharCode c); - CharCode lookup(char *name); - -private: - - int hash(char *name); - - NameToCharCodeEntry *tab; - int size; - int len; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/NameToUnicodeTable.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/NameToUnicodeTable.h deleted file mode 100644 index 650f62ea88d..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/NameToUnicodeTable.h +++ /dev/null @@ -1,1115 +0,0 @@ -//======================================================================== -// -// NameToUnicodeTable.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2011 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include "CharTypes.h" - -#include <stddef.h> - -static struct { - Unicode u; - char *name; -} nameToUnicodeTab[] = { - {0x0021, "!"}, - {0x0023, "#"}, - {0x0024, "$"}, - {0x0025, "%"}, - {0x0026, "&"}, - {0x0027, "'"}, - {0x0028, "("}, - {0x0029, ")"}, - {0x002a, "*"}, - {0x002b, "+"}, - {0x002c, ","}, - {0x002d, "-"}, - {0x002e, "."}, - {0x002f, "/"}, - {0x0030, "0"}, - {0x0031, "1"}, - {0x0032, "2"}, - {0x0033, "3"}, - {0x0034, "4"}, - {0x0035, "5"}, - {0x0036, "6"}, - {0x0037, "7"}, - {0x0038, "8"}, - {0x0039, "9"}, - {0x003a, ":"}, - {0x003b, ";"}, - {0x003c, "<"}, - {0x003d, "="}, - {0x003e, ">"}, - {0x003f, "?"}, - {0x0040, "@"}, - {0x0041, "A"}, - {0x00c6, "AE"}, - {0x01fc, "AEacute"}, - {0xf7e6, "AEsmall"}, - {0x00c1, "Aacute"}, - {0xf7e1, "Aacutesmall"}, - {0x0102, "Abreve"}, - {0x00c2, "Acircumflex"}, - {0xf7e2, "Acircumflexsmall"}, - {0xf6c9, "Acute"}, - {0xf7b4, "Acutesmall"}, - {0x00c4, "Adieresis"}, - {0xf7e4, "Adieresissmall"}, - {0x00c0, "Agrave"}, - {0xf7e0, "Agravesmall"}, - {0x0391, "Alpha"}, - {0x0386, "Alphatonos"}, - {0x0100, "Amacron"}, - {0x0104, "Aogonek"}, - {0x00c5, "Aring"}, - {0x01fa, "Aringacute"}, - {0xf7e5, "Aringsmall"}, - {0xf761, "Asmall"}, - {0x00c3, "Atilde"}, - {0xf7e3, "Atildesmall"}, - {0x0042, "B"}, - {0x0392, "Beta"}, - {0xf6f4, "Brevesmall"}, - {0xf762, "Bsmall"}, - {0x0043, "C"}, - {0x0106, "Cacute"}, - {0xf6ca, "Caron"}, - {0xf6f5, "Caronsmall"}, - {0x010c, "Ccaron"}, - {0x00c7, "Ccedilla"}, - {0xf7e7, "Ccedillasmall"}, - {0x0108, "Ccircumflex"}, - {0x010a, "Cdotaccent"}, - {0xf7b8, "Cedillasmall"}, - {0x03a7, "Chi"}, - {0xf6f6, "Circumflexsmall"}, - {0xf763, "Csmall"}, - {0x0044, "D"}, - {0x010e, "Dcaron"}, - {0x0110, "Dcroat"}, - {0x2206, "Delta"}, - {0xf6cb, "Dieresis"}, - {0xf6cc, "DieresisAcute"}, - {0xf6cd, "DieresisGrave"}, - {0xf7a8, "Dieresissmall"}, - {0xf6f7, "Dotaccentsmall"}, - {0xf764, "Dsmall"}, - {0x0045, "E"}, - {0x00c9, "Eacute"}, - {0xf7e9, "Eacutesmall"}, - {0x0114, "Ebreve"}, - {0x011a, "Ecaron"}, - {0x00ca, "Ecircumflex"}, - {0xf7ea, "Ecircumflexsmall"}, - {0x00cb, "Edieresis"}, - {0xf7eb, "Edieresissmall"}, - {0x0116, "Edotaccent"}, - {0x00c8, "Egrave"}, - {0xf7e8, "Egravesmall"}, - {0x0112, "Emacron"}, - {0x014a, "Eng"}, - {0x0118, "Eogonek"}, - {0x0395, "Epsilon"}, - {0x0388, "Epsilontonos"}, - {0xf765, "Esmall"}, - {0x0397, "Eta"}, - {0x0389, "Etatonos"}, - {0x00d0, "Eth"}, - {0xf7f0, "Ethsmall"}, - {0x20ac, "Euro"}, - {0x0046, "F"}, - {0xf766, "Fsmall"}, - {0x0047, "G"}, - {0x0393, "Gamma"}, - {0x011e, "Gbreve"}, - {0x01e6, "Gcaron"}, - {0x011c, "Gcircumflex"}, - {0x0122, "Gcommaaccent"}, - {0x0120, "Gdotaccent"}, - {0xf6ce, "Grave"}, - {0xf760, "Gravesmall"}, - {0xf767, "Gsmall"}, - {0x0048, "H"}, - {0x25cf, "H18533"}, - {0x25aa, "H18543"}, - {0x25ab, "H18551"}, - {0x25a1, "H22073"}, - {0x0126, "Hbar"}, - {0x0124, "Hcircumflex"}, - {0xf768, "Hsmall"}, - {0xf6cf, "Hungarumlaut"}, - {0xf6f8, "Hungarumlautsmall"}, - {0x0049, "I"}, - {0x0132, "IJ"}, - {0x00cd, "Iacute"}, - {0xf7ed, "Iacutesmall"}, - {0x012c, "Ibreve"}, - {0x00ce, "Icircumflex"}, - {0xf7ee, "Icircumflexsmall"}, - {0x00cf, "Idieresis"}, - {0xf7ef, "Idieresissmall"}, - {0x0130, "Idotaccent"}, - {0x2111, "Ifraktur"}, - {0x00cc, "Igrave"}, - {0xf7ec, "Igravesmall"}, - {0x012a, "Imacron"}, - {0x012e, "Iogonek"}, - {0x0399, "Iota"}, - {0x03aa, "Iotadieresis"}, - {0x038a, "Iotatonos"}, - {0xf769, "Ismall"}, - {0x0128, "Itilde"}, - {0x004a, "J"}, - {0x0134, "Jcircumflex"}, - {0xf76a, "Jsmall"}, - {0x004b, "K"}, - {0x039a, "Kappa"}, - {0x0136, "Kcommaaccent"}, - {0xf76b, "Ksmall"}, - {0x004c, "L"}, - {0xf6bf, "LL"}, - {0x0139, "Lacute"}, - {0x039b, "Lambda"}, - {0x013d, "Lcaron"}, - {0x013b, "Lcommaaccent"}, - {0x013f, "Ldot"}, - {0x0141, "Lslash"}, - {0xf6f9, "Lslashsmall"}, - {0xf76c, "Lsmall"}, - {0x004d, "M"}, - {0xf6d0, "Macron"}, - {0xf7af, "Macronsmall"}, - {0xf76d, "Msmall"}, - {0x039c, "Mu"}, - {0x004e, "N"}, - {0x0143, "Nacute"}, - {0x0147, "Ncaron"}, - {0x0145, "Ncommaaccent"}, - {0xf76e, "Nsmall"}, - {0x00d1, "Ntilde"}, - {0xf7f1, "Ntildesmall"}, - {0x039d, "Nu"}, - {0x004f, "O"}, - {0x0152, "OE"}, - {0xf6fa, "OEsmall"}, - {0x00d3, "Oacute"}, - {0xf7f3, "Oacutesmall"}, - {0x014e, "Obreve"}, - {0x00d4, "Ocircumflex"}, - {0xf7f4, "Ocircumflexsmall"}, - {0x00d6, "Odieresis"}, - {0xf7f6, "Odieresissmall"}, - {0xf6fb, "Ogoneksmall"}, - {0x00d2, "Ograve"}, - {0xf7f2, "Ogravesmall"}, - {0x01a0, "Ohorn"}, - {0x0150, "Ohungarumlaut"}, - {0x014c, "Omacron"}, - {0x2126, "Omega"}, - {0x038f, "Omegatonos"}, - {0x039f, "Omicron"}, - {0x038c, "Omicrontonos"}, - {0x00d8, "Oslash"}, - {0x01fe, "Oslashacute"}, - {0xf7f8, "Oslashsmall"}, - {0xf76f, "Osmall"}, - {0x00d5, "Otilde"}, - {0xf7f5, "Otildesmall"}, - {0x0050, "P"}, - {0x03a6, "Phi"}, - {0x03a0, "Pi"}, - {0x03a8, "Psi"}, - {0xf770, "Psmall"}, - {0x0051, "Q"}, - {0xf771, "Qsmall"}, - {0x0052, "R"}, - {0x0154, "Racute"}, - {0x0158, "Rcaron"}, - {0x0156, "Rcommaaccent"}, - {0x211c, "Rfraktur"}, - {0x03a1, "Rho"}, - {0xf6fc, "Ringsmall"}, - {0xf772, "Rsmall"}, - {0x0053, "S"}, - {0x250c, "SF010000"}, - {0x2514, "SF020000"}, - {0x2510, "SF030000"}, - {0x2518, "SF040000"}, - {0x253c, "SF050000"}, - {0x252c, "SF060000"}, - {0x2534, "SF070000"}, - {0x251c, "SF080000"}, - {0x2524, "SF090000"}, - {0x2500, "SF100000"}, - {0x2502, "SF110000"}, - {0x2561, "SF190000"}, - {0x2562, "SF200000"}, - {0x2556, "SF210000"}, - {0x2555, "SF220000"}, - {0x2563, "SF230000"}, - {0x2551, "SF240000"}, - {0x2557, "SF250000"}, - {0x255d, "SF260000"}, - {0x255c, "SF270000"}, - {0x255b, "SF280000"}, - {0x255e, "SF360000"}, - {0x255f, "SF370000"}, - {0x255a, "SF380000"}, - {0x2554, "SF390000"}, - {0x2569, "SF400000"}, - {0x2566, "SF410000"}, - {0x2560, "SF420000"}, - {0x2550, "SF430000"}, - {0x256c, "SF440000"}, - {0x2567, "SF450000"}, - {0x2568, "SF460000"}, - {0x2564, "SF470000"}, - {0x2565, "SF480000"}, - {0x2559, "SF490000"}, - {0x2558, "SF500000"}, - {0x2552, "SF510000"}, - {0x2553, "SF520000"}, - {0x256b, "SF530000"}, - {0x256a, "SF540000"}, - {0x015a, "Sacute"}, - {0x0160, "Scaron"}, - {0xf6fd, "Scaronsmall"}, - {0x015e, "Scedilla"}, - {0x015c, "Scircumflex"}, - {0x0218, "Scommaaccent"}, - {0x03a3, "Sigma"}, - {0xf773, "Ssmall"}, - {0x0054, "T"}, - {0x03a4, "Tau"}, - {0x0166, "Tbar"}, - {0x0164, "Tcaron"}, - {0x0162, "Tcommaaccent"}, - {0x0398, "Theta"}, - {0x00de, "Thorn"}, - {0xf7fe, "Thornsmall"}, - {0xf6fe, "Tildesmall"}, - {0xf774, "Tsmall"}, - {0x0055, "U"}, - {0x00da, "Uacute"}, - {0xf7fa, "Uacutesmall"}, - {0x016c, "Ubreve"}, - {0x00db, "Ucircumflex"}, - {0xf7fb, "Ucircumflexsmall"}, - {0x00dc, "Udieresis"}, - {0xf7fc, "Udieresissmall"}, - {0x00d9, "Ugrave"}, - {0xf7f9, "Ugravesmall"}, - {0x01af, "Uhorn"}, - {0x0170, "Uhungarumlaut"}, - {0x016a, "Umacron"}, - {0x0172, "Uogonek"}, - {0x03a5, "Upsilon"}, - {0x03d2, "Upsilon1"}, - {0x03ab, "Upsilondieresis"}, - {0x038e, "Upsilontonos"}, - {0x016e, "Uring"}, - {0xf775, "Usmall"}, - {0x0168, "Utilde"}, - {0x0056, "V"}, - {0xf776, "Vsmall"}, - {0x0057, "W"}, - {0x1e82, "Wacute"}, - {0x0174, "Wcircumflex"}, - {0x1e84, "Wdieresis"}, - {0x1e80, "Wgrave"}, - {0xf777, "Wsmall"}, - {0x0058, "X"}, - {0x039e, "Xi"}, - {0xf778, "Xsmall"}, - {0x0059, "Y"}, - {0x00dd, "Yacute"}, - {0xf7fd, "Yacutesmall"}, - {0x0176, "Ycircumflex"}, - {0x0178, "Ydieresis"}, - {0xf7ff, "Ydieresissmall"}, - {0x1ef2, "Ygrave"}, - {0xf779, "Ysmall"}, - {0x005a, "Z"}, - {0x0179, "Zacute"}, - {0x017d, "Zcaron"}, - {0xf6ff, "Zcaronsmall"}, - {0x017b, "Zdotaccent"}, - {0x0396, "Zeta"}, - {0xf77a, "Zsmall"}, - {0x0022, "\""}, - {0x005c, "\\"}, - {0x005d, "]"}, - {0x005e, "^"}, - {0x005f, "_"}, - {0x0060, "`"}, - {0x0061, "a"}, - {0x00e1, "aacute"}, - {0x0103, "abreve"}, - {0x00e2, "acircumflex"}, - {0x00b4, "acute"}, - {0x0301, "acutecomb"}, - {0x00e4, "adieresis"}, - {0x00e6, "ae"}, - {0x01fd, "aeacute"}, - {0x2015, "afii00208"}, - {0x0410, "afii10017"}, - {0x0411, "afii10018"}, - {0x0412, "afii10019"}, - {0x0413, "afii10020"}, - {0x0414, "afii10021"}, - {0x0415, "afii10022"}, - {0x0401, "afii10023"}, - {0x0416, "afii10024"}, - {0x0417, "afii10025"}, - {0x0418, "afii10026"}, - {0x0419, "afii10027"}, - {0x041a, "afii10028"}, - {0x041b, "afii10029"}, - {0x041c, "afii10030"}, - {0x041d, "afii10031"}, - {0x041e, "afii10032"}, - {0x041f, "afii10033"}, - {0x0420, "afii10034"}, - {0x0421, "afii10035"}, - {0x0422, "afii10036"}, - {0x0423, "afii10037"}, - {0x0424, "afii10038"}, - {0x0425, "afii10039"}, - {0x0426, "afii10040"}, - {0x0427, "afii10041"}, - {0x0428, "afii10042"}, - {0x0429, "afii10043"}, - {0x042a, "afii10044"}, - {0x042b, "afii10045"}, - {0x042c, "afii10046"}, - {0x042d, "afii10047"}, - {0x042e, "afii10048"}, - {0x042f, "afii10049"}, - {0x0490, "afii10050"}, - {0x0402, "afii10051"}, - {0x0403, "afii10052"}, - {0x0404, "afii10053"}, - {0x0405, "afii10054"}, - {0x0406, "afii10055"}, - {0x0407, "afii10056"}, - {0x0408, "afii10057"}, - {0x0409, "afii10058"}, - {0x040a, "afii10059"}, - {0x040b, "afii10060"}, - {0x040c, "afii10061"}, - {0x040e, "afii10062"}, - {0xf6c4, "afii10063"}, - {0xf6c5, "afii10064"}, - {0x0430, "afii10065"}, - {0x0431, "afii10066"}, - {0x0432, "afii10067"}, - {0x0433, "afii10068"}, - {0x0434, "afii10069"}, - {0x0435, "afii10070"}, - {0x0451, "afii10071"}, - {0x0436, "afii10072"}, - {0x0437, "afii10073"}, - {0x0438, "afii10074"}, - {0x0439, "afii10075"}, - {0x043a, "afii10076"}, - {0x043b, "afii10077"}, - {0x043c, "afii10078"}, - {0x043d, "afii10079"}, - {0x043e, "afii10080"}, - {0x043f, "afii10081"}, - {0x0440, "afii10082"}, - {0x0441, "afii10083"}, - {0x0442, "afii10084"}, - {0x0443, "afii10085"}, - {0x0444, "afii10086"}, - {0x0445, "afii10087"}, - {0x0446, "afii10088"}, - {0x0447, "afii10089"}, - {0x0448, "afii10090"}, - {0x0449, "afii10091"}, - {0x044a, "afii10092"}, - {0x044b, "afii10093"}, - {0x044c, "afii10094"}, - {0x044d, "afii10095"}, - {0x044e, "afii10096"}, - {0x044f, "afii10097"}, - {0x0491, "afii10098"}, - {0x0452, "afii10099"}, - {0x0453, "afii10100"}, - {0x0454, "afii10101"}, - {0x0455, "afii10102"}, - {0x0456, "afii10103"}, - {0x0457, "afii10104"}, - {0x0458, "afii10105"}, - {0x0459, "afii10106"}, - {0x045a, "afii10107"}, - {0x045b, "afii10108"}, - {0x045c, "afii10109"}, - {0x045e, "afii10110"}, - {0x040f, "afii10145"}, - {0x0462, "afii10146"}, - {0x0472, "afii10147"}, - {0x0474, "afii10148"}, - {0xf6c6, "afii10192"}, - {0x045f, "afii10193"}, - {0x0463, "afii10194"}, - {0x0473, "afii10195"}, - {0x0475, "afii10196"}, - {0xf6c7, "afii10831"}, - {0xf6c8, "afii10832"}, - {0x04d9, "afii10846"}, - {0x200e, "afii299"}, - {0x200f, "afii300"}, - {0x200d, "afii301"}, - {0x066a, "afii57381"}, - {0x060c, "afii57388"}, - {0x0660, "afii57392"}, - {0x0661, "afii57393"}, - {0x0662, "afii57394"}, - {0x0663, "afii57395"}, - {0x0664, "afii57396"}, - {0x0665, "afii57397"}, - {0x0666, "afii57398"}, - {0x0667, "afii57399"}, - {0x0668, "afii57400"}, - {0x0669, "afii57401"}, - {0x061b, "afii57403"}, - {0x061f, "afii57407"}, - {0x0621, "afii57409"}, - {0x0622, "afii57410"}, - {0x0623, "afii57411"}, - {0x0624, "afii57412"}, - {0x0625, "afii57413"}, - {0x0626, "afii57414"}, - {0x0627, "afii57415"}, - {0x0628, "afii57416"}, - {0x0629, "afii57417"}, - {0x062a, "afii57418"}, - {0x062b, "afii57419"}, - {0x062c, "afii57420"}, - {0x062d, "afii57421"}, - {0x062e, "afii57422"}, - {0x062f, "afii57423"}, - {0x0630, "afii57424"}, - {0x0631, "afii57425"}, - {0x0632, "afii57426"}, - {0x0633, "afii57427"}, - {0x0634, "afii57428"}, - {0x0635, "afii57429"}, - {0x0636, "afii57430"}, - {0x0637, "afii57431"}, - {0x0638, "afii57432"}, - {0x0639, "afii57433"}, - {0x063a, "afii57434"}, - {0x0640, "afii57440"}, - {0x0641, "afii57441"}, - {0x0642, "afii57442"}, - {0x0643, "afii57443"}, - {0x0644, "afii57444"}, - {0x0645, "afii57445"}, - {0x0646, "afii57446"}, - {0x0648, "afii57448"}, - {0x0649, "afii57449"}, - {0x064a, "afii57450"}, - {0x064b, "afii57451"}, - {0x064c, "afii57452"}, - {0x064d, "afii57453"}, - {0x064e, "afii57454"}, - {0x064f, "afii57455"}, - {0x0650, "afii57456"}, - {0x0651, "afii57457"}, - {0x0652, "afii57458"}, - {0x0647, "afii57470"}, - {0x06a4, "afii57505"}, - {0x067e, "afii57506"}, - {0x0686, "afii57507"}, - {0x0698, "afii57508"}, - {0x06af, "afii57509"}, - {0x0679, "afii57511"}, - {0x0688, "afii57512"}, - {0x0691, "afii57513"}, - {0x06ba, "afii57514"}, - {0x06d2, "afii57519"}, - {0x06d5, "afii57534"}, - {0x20aa, "afii57636"}, - {0x05be, "afii57645"}, - {0x05c3, "afii57658"}, - {0x05d0, "afii57664"}, - {0x05d1, "afii57665"}, - {0x05d2, "afii57666"}, - {0x05d3, "afii57667"}, - {0x05d4, "afii57668"}, - {0x05d5, "afii57669"}, - {0x05d6, "afii57670"}, - {0x05d7, "afii57671"}, - {0x05d8, "afii57672"}, - {0x05d9, "afii57673"}, - {0x05da, "afii57674"}, - {0x05db, "afii57675"}, - {0x05dc, "afii57676"}, - {0x05dd, "afii57677"}, - {0x05de, "afii57678"}, - {0x05df, "afii57679"}, - {0x05e0, "afii57680"}, - {0x05e1, "afii57681"}, - {0x05e2, "afii57682"}, - {0x05e3, "afii57683"}, - {0x05e4, "afii57684"}, - {0x05e5, "afii57685"}, - {0x05e6, "afii57686"}, - {0x05e7, "afii57687"}, - {0x05e8, "afii57688"}, - {0x05e9, "afii57689"}, - {0x05ea, "afii57690"}, - {0xfb2a, "afii57694"}, - {0xfb2b, "afii57695"}, - {0xfb4b, "afii57700"}, - {0xfb1f, "afii57705"}, - {0x05f0, "afii57716"}, - {0x05f1, "afii57717"}, - {0x05f2, "afii57718"}, - {0xfb35, "afii57723"}, - {0x05b4, "afii57793"}, - {0x05b5, "afii57794"}, - {0x05b6, "afii57795"}, - {0x05bb, "afii57796"}, - {0x05b8, "afii57797"}, - {0x05b7, "afii57798"}, - {0x05b0, "afii57799"}, - {0x05b2, "afii57800"}, - {0x05b1, "afii57801"}, - {0x05b3, "afii57802"}, - {0x05c2, "afii57803"}, - {0x05c1, "afii57804"}, - {0x05b9, "afii57806"}, - {0x05bc, "afii57807"}, - {0x05bd, "afii57839"}, - {0x05bf, "afii57841"}, - {0x05c0, "afii57842"}, - {0x02bc, "afii57929"}, - {0x2105, "afii61248"}, - {0x2113, "afii61289"}, - {0x2116, "afii61352"}, - {0x202c, "afii61573"}, - {0x202d, "afii61574"}, - {0x202e, "afii61575"}, - {0x200c, "afii61664"}, - {0x066d, "afii63167"}, - {0x02bd, "afii64937"}, - {0x00e0, "agrave"}, - {0x2135, "aleph"}, - {0x03b1, "alpha"}, - {0x03ac, "alphatonos"}, - {0x0101, "amacron"}, - {0x0026, "ampersand"}, - {0xf726, "ampersandsmall"}, - {0x2220, "angle"}, - {0x2329, "angleleft"}, - {0x232a, "angleright"}, - {0x0387, "anoteleia"}, - {0x0105, "aogonek"}, - {0x2248, "approxequal"}, - {0x00e5, "aring"}, - {0x01fb, "aringacute"}, - {0x2194, "arrowboth"}, - {0x21d4, "arrowdblboth"}, - {0x21d3, "arrowdbldown"}, - {0x21d0, "arrowdblleft"}, - {0x21d2, "arrowdblright"}, - {0x21d1, "arrowdblup"}, - {0x2193, "arrowdown"}, - {0xf8e7, "arrowhorizex"}, - {0x2190, "arrowleft"}, - {0x2192, "arrowright"}, - {0x2191, "arrowup"}, - {0x2195, "arrowupdn"}, - {0x21a8, "arrowupdnbse"}, - {0xf8e6, "arrowvertex"}, - {0x005e, "asciicircum"}, - {0x007e, "asciitilde"}, - {0x002a, "asterisk"}, - {0x2217, "asteriskmath"}, - {0xf6e9, "asuperior"}, - {0x0040, "at"}, - {0x00e3, "atilde"}, - {0x0062, "b"}, - {0x005c, "backslash"}, - {0x007c, "bar"}, - {0x03b2, "beta"}, - {0x2588, "block"}, - {0xf8f4, "braceex"}, - {0x007b, "braceleft"}, - {0xf8f3, "braceleftbt"}, - {0xf8f2, "braceleftmid"}, - {0xf8f1, "bracelefttp"}, - {0x007d, "braceright"}, - {0xf8fe, "bracerightbt"}, - {0xf8fd, "bracerightmid"}, - {0xf8fc, "bracerighttp"}, - {0x005b, "bracketleft"}, - {0xf8f0, "bracketleftbt"}, - {0xf8ef, "bracketleftex"}, - {0xf8ee, "bracketlefttp"}, - {0x005d, "bracketright"}, - {0xf8fb, "bracketrightbt"}, - {0xf8fa, "bracketrightex"}, - {0xf8f9, "bracketrighttp"}, - {0x02d8, "breve"}, - {0x00a6, "brokenbar"}, - {0xf6ea, "bsuperior"}, - {0x2022, "bullet"}, - {0x0063, "c"}, - {0x0107, "cacute"}, - {0x02c7, "caron"}, - {0x21b5, "carriagereturn"}, - {0x010d, "ccaron"}, - {0x00e7, "ccedilla"}, - {0x0109, "ccircumflex"}, - {0x010b, "cdotaccent"}, - {0x00b8, "cedilla"}, - {0x00a2, "cent"}, - {0xf6df, "centinferior"}, - {0xf7a2, "centoldstyle"}, - {0xf6e0, "centsuperior"}, - {0x03c7, "chi"}, - {0x25cb, "circle"}, - {0x2297, "circlemultiply"}, - {0x2295, "circleplus"}, - {0x02c6, "circumflex"}, - {0x2663, "club"}, - {0x003a, "colon"}, - {0x20a1, "colonmonetary"}, - {0x002c, "comma"}, - {0xf6c3, "commaaccent"}, - {0xf6e1, "commainferior"}, - {0xf6e2, "commasuperior"}, - {0x2245, "congruent"}, - {0x00a9, "copyright"}, - {0x00a9, "copyrightsans"}, - {0x00a9, "copyrightserif"}, - {0x00a4, "currency"}, - {0xf6d1, "cyrBreve"}, - {0xf6d2, "cyrFlex"}, - {0xf6d4, "cyrbreve"}, - {0xf6d5, "cyrflex"}, - {0x0064, "d"}, - {0x2020, "dagger"}, - {0x2021, "daggerdbl"}, - {0xf6d3, "dblGrave"}, - {0xf6d6, "dblgrave"}, - {0x010f, "dcaron"}, - {0x0111, "dcroat"}, - {0x00b0, "degree"}, - {0x03b4, "delta"}, - {0x2666, "diamond"}, - {0x00a8, "dieresis"}, - {0xf6d7, "dieresisacute"}, - {0xf6d8, "dieresisgrave"}, - {0x0385, "dieresistonos"}, - {0x00f7, "divide"}, - {0x2593, "dkshade"}, - {0x2584, "dnblock"}, - {0x0024, "dollar"}, - {0xf6e3, "dollarinferior"}, - {0xf724, "dollaroldstyle"}, - {0xf6e4, "dollarsuperior"}, - {0x20ab, "dong"}, - {0x02d9, "dotaccent"}, - {0x0323, "dotbelowcomb"}, - {0x0131, "dotlessi"}, - {0xf6be, "dotlessj"}, - {0x22c5, "dotmath"}, - {0xf6eb, "dsuperior"}, - {0x0065, "e"}, - {0x00e9, "eacute"}, - {0x0115, "ebreve"}, - {0x011b, "ecaron"}, - {0x00ea, "ecircumflex"}, - {0x00eb, "edieresis"}, - {0x0117, "edotaccent"}, - {0x00e8, "egrave"}, - {0x0038, "eight"}, - {0x2088, "eightinferior"}, - {0xf738, "eightoldstyle"}, - {0x2078, "eightsuperior"}, - {0x2208, "element"}, - {0x2026, "ellipsis"}, - {0x0113, "emacron"}, - {0x2014, "emdash"}, - {0x2205, "emptyset"}, - {0x2013, "endash"}, - {0x014b, "eng"}, - {0x0119, "eogonek"}, - {0x03b5, "epsilon"}, - {0x03ad, "epsilontonos"}, - {0x003d, "equal"}, - {0x2261, "equivalence"}, - {0x212e, "estimated"}, - {0xf6ec, "esuperior"}, - {0x03b7, "eta"}, - {0x03ae, "etatonos"}, - {0x00f0, "eth"}, - {0x0021, "exclam"}, - {0x203c, "exclamdbl"}, - {0x00a1, "exclamdown"}, - {0xf7a1, "exclamdownsmall"}, - {0x0021, "exclamleft"}, - {0xf721, "exclamsmall"}, - {0x2203, "existential"}, - {0x0066, "f"}, - {0x2640, "female"}, - {0xfb00, "ff"}, - {0xfb03, "ffi"}, - {0xfb04, "ffl"}, - {0xfb01, "fi"}, - {0x2012, "figuredash"}, - {0x25a0, "filledbox"}, - {0x25ac, "filledrect"}, - {0x0035, "five"}, - {0x215d, "fiveeighths"}, - {0x2085, "fiveinferior"}, - {0xf735, "fiveoldstyle"}, - {0x2075, "fivesuperior"}, - {0xfb02, "fl"}, - {0x0192, "florin"}, - {0x0034, "four"}, - {0x2084, "fourinferior"}, - {0xf734, "fouroldstyle"}, - {0x2074, "foursuperior"}, - {0x2044, "fraction"}, - {0x20a3, "franc"}, - {0x0067, "g"}, - {0x03b3, "gamma"}, - {0x011f, "gbreve"}, - {0x01e7, "gcaron"}, - {0x011d, "gcircumflex"}, - {0x0123, "gcommaaccent"}, - {0x0121, "gdotaccent"}, - {0x00df, "germandbls"}, - {0x2207, "gradient"}, - {0x0060, "grave"}, - {0x0300, "gravecomb"}, - {0x003e, "greater"}, - {0x2265, "greaterequal"}, - {0x00ab, "guillemotleft"}, - {0x00bb, "guillemotright"}, - {0x2039, "guilsinglleft"}, - {0x203a, "guilsinglright"}, - {0x0068, "h"}, - {0x0127, "hbar"}, - {0x0125, "hcircumflex"}, - {0x2665, "heart"}, - {0x0309, "hookabovecomb"}, - {0x2302, "house"}, - {0x02dd, "hungarumlaut"}, - {0x002d, "hyphen"}, - {0xf6e5, "hypheninferior"}, - {0xf6e6, "hyphensuperior"}, - {0x0069, "i"}, - {0x00ed, "iacute"}, - {0x012d, "ibreve"}, - {0x00ee, "icircumflex"}, - {0x00ef, "idieresis"}, - {0x00ec, "igrave"}, - {0x0133, "ij"}, - {0x012b, "imacron"}, - {0x221e, "infinity"}, - {0x222b, "integral"}, - {0x2321, "integralbt"}, - {0xf8f5, "integralex"}, - {0x2320, "integraltp"}, - {0x2229, "intersection"}, - {0x25d8, "invbullet"}, - {0x25d9, "invcircle"}, - {0x263b, "invsmileface"}, - {0x012f, "iogonek"}, - {0x03b9, "iota"}, - {0x03ca, "iotadieresis"}, - {0x0390, "iotadieresistonos"}, - {0x03af, "iotatonos"}, - {0xf6ed, "isuperior"}, - {0x0129, "itilde"}, - {0x006a, "j"}, - {0x0135, "jcircumflex"}, - {0x006b, "k"}, - {0x03ba, "kappa"}, - {0x0137, "kcommaaccent"}, - {0x0138, "kgreenlandic"}, - {0x006c, "l"}, - {0x013a, "lacute"}, - {0x03bb, "lambda"}, - {0x013e, "lcaron"}, - {0x013c, "lcommaaccent"}, - {0x0140, "ldot"}, - {0x003c, "less"}, - {0x2264, "lessequal"}, - {0x258c, "lfblock"}, - {0x20a4, "lira"}, - {0xf6c0, "ll"}, - {0x2227, "logicaland"}, - {0x00ac, "logicalnot"}, - {0x2228, "logicalor"}, - {0x017f, "longs"}, - {0x25ca, "lozenge"}, - {0x0142, "lslash"}, - {0xf6ee, "lsuperior"}, - {0x2591, "ltshade"}, - {0x006d, "m"}, - {0x00af, "macron"}, - {0x2642, "male"}, - {0x2212, "minus"}, - {0x2032, "minute"}, - {0xf6ef, "msuperior"}, - {0x00b5, "mu"}, - {0x00d7, "multiply"}, - {0x266a, "musicalnote"}, - {0x266b, "musicalnotedbl"}, - {0x006e, "n"}, - {0x0144, "nacute"}, - {0x0149, "napostrophe"}, - {0x00a0, "nbspace"}, - {0x0148, "ncaron"}, - {0x0146, "ncommaaccent"}, - {0x0039, "nine"}, - {0x2089, "nineinferior"}, - {0xf739, "nineoldstyle"}, - {0x2079, "ninesuperior"}, - {0x00a0, "nonbreakingspace"}, - {0x2209, "notelement"}, - {0x2260, "notequal"}, - {0x2284, "notsubset"}, - {0x207f, "nsuperior"}, - {0x00f1, "ntilde"}, - {0x03bd, "nu"}, - {0x0023, "numbersign"}, - {0x006f, "o"}, - {0x00f3, "oacute"}, - {0x014f, "obreve"}, - {0x00f4, "ocircumflex"}, - {0x00f6, "odieresis"}, - {0x0153, "oe"}, - {0x02db, "ogonek"}, - {0x00f2, "ograve"}, - {0x01a1, "ohorn"}, - {0x0151, "ohungarumlaut"}, - {0x014d, "omacron"}, - {0x03c9, "omega"}, - {0x03d6, "omega1"}, - {0x03ce, "omegatonos"}, - {0x03bf, "omicron"}, - {0x03cc, "omicrontonos"}, - {0x0031, "one"}, - {0x2024, "onedotenleader"}, - {0x215b, "oneeighth"}, - {0xf6dc, "onefitted"}, - {0x00bd, "onehalf"}, - {0x2081, "oneinferior"}, - {0xf731, "oneoldstyle"}, - {0x00bc, "onequarter"}, - {0x00b9, "onesuperior"}, - {0x2153, "onethird"}, - {0x25e6, "openbullet"}, - {0x00aa, "ordfeminine"}, - {0x00ba, "ordmasculine"}, - {0x221f, "orthogonal"}, - {0x00f8, "oslash"}, - {0x01ff, "oslashacute"}, - {0xf6f0, "osuperior"}, - {0x00f5, "otilde"}, - {0x0070, "p"}, - {0x00b6, "paragraph"}, - {0x0028, "parenleft"}, - {0xf8ed, "parenleftbt"}, - {0xf8ec, "parenleftex"}, - {0x208d, "parenleftinferior"}, - {0x207d, "parenleftsuperior"}, - {0xf8eb, "parenlefttp"}, - {0x0029, "parenright"}, - {0xf8f8, "parenrightbt"}, - {0xf8f7, "parenrightex"}, - {0x208e, "parenrightinferior"}, - {0x207e, "parenrightsuperior"}, - {0xf8f6, "parenrighttp"}, - {0x2202, "partialdiff"}, - {0x0025, "percent"}, - {0x002e, "period"}, - {0x00b7, "periodcentered"}, - {0xf6e7, "periodinferior"}, - {0xf6e8, "periodsuperior"}, - {0x22a5, "perpendicular"}, - {0x2030, "perthousand"}, - {0x20a7, "peseta"}, - {0x03c6, "phi"}, - {0x03d5, "phi1"}, - {0x03c0, "pi"}, - {0x002b, "plus"}, - {0x00b1, "plusminus"}, - {0x211e, "prescription"}, - {0x220f, "product"}, - {0x2282, "propersubset"}, - {0x2283, "propersuperset"}, - {0x221d, "proportional"}, - {0x03c8, "psi"}, - {0x0071, "q"}, - {0x003f, "question"}, - {0x00bf, "questiondown"}, - {0xf7bf, "questiondownsmall"}, - {0xf73f, "questionsmall"}, - {0x0022, "quotedbl"}, - {0x201e, "quotedblbase"}, - {0x201c, "quotedblleft"}, - {0x201d, "quotedblright"}, - {0x2018, "quoteleft"}, - {0x201b, "quotereversed"}, - {0x2019, "quoteright"}, - {0x201a, "quotesinglbase"}, - {0x0027, "quotesingle"}, - {0x0072, "r"}, - {0x0155, "racute"}, - {0x221a, "radical"}, - {0xf8e5, "radicalex"}, - {0x0159, "rcaron"}, - {0x0157, "rcommaaccent"}, - {0x2286, "reflexsubset"}, - {0x2287, "reflexsuperset"}, - {0x00ae, "registered"}, - {0x00ae, "registersans"}, - {0x00ae, "registerserif"}, - {0x2310, "revlogicalnot"}, - {0x03c1, "rho"}, - {0x02da, "ring"}, - {0xf6f1, "rsuperior"}, - {0x2590, "rtblock"}, - {0xf6dd, "rupiah"}, - {0x0073, "s"}, - {0x015b, "sacute"}, - {0x0161, "scaron"}, - {0x015f, "scedilla"}, - {0x015d, "scircumflex"}, - {0x0219, "scommaaccent"}, - {0x2033, "second"}, - {0x00a7, "section"}, - {0x003b, "semicolon"}, - {0x0037, "seven"}, - {0x215e, "seveneighths"}, - {0x2087, "seveninferior"}, - {0xf737, "sevenoldstyle"}, - {0x2077, "sevensuperior"}, - {0x2592, "shade"}, - {0x03c3, "sigma"}, - {0x03c2, "sigma1"}, - {0x223c, "similar"}, - {0x0036, "six"}, - {0x2086, "sixinferior"}, - {0xf736, "sixoldstyle"}, - {0x2076, "sixsuperior"}, - {0x002f, "slash"}, - {0x263a, "smileface"}, - {0x0020, "space"}, - {0x2660, "spade"}, - {0xf6f2, "ssuperior"}, - {0x00a3, "sterling"}, - {0x220b, "suchthat"}, - {0x2211, "summation"}, - {0x263c, "sun"}, - {0x0074, "t"}, - {0x03c4, "tau"}, - {0x0167, "tbar"}, - {0x0165, "tcaron"}, - {0x0163, "tcommaaccent"}, - {0x2234, "therefore"}, - {0x03b8, "theta"}, - {0x03d1, "theta1"}, - {0x00fe, "thorn"}, - {0x0033, "three"}, - {0x215c, "threeeighths"}, - {0x2083, "threeinferior"}, - {0xf733, "threeoldstyle"}, - {0x00be, "threequarters"}, - {0xf6de, "threequartersemdash"}, - {0x00b3, "threesuperior"}, - {0x02dc, "tilde"}, - {0x0303, "tildecomb"}, - {0x0384, "tonos"}, - {0x2122, "trademark"}, - {0x2122, "trademarksans"}, - {0x2122, "trademarkserif"}, - {0x25bc, "triagdn"}, - {0x25c4, "triaglf"}, - {0x25ba, "triagrt"}, - {0x25b2, "triagup"}, - {0xf6f3, "tsuperior"}, - {0x0032, "two"}, - {0x2025, "twodotenleader"}, - {0x2082, "twoinferior"}, - {0xf732, "twooldstyle"}, - {0x00b2, "twosuperior"}, - {0x2154, "twothirds"}, - {0x0075, "u"}, - {0x00fa, "uacute"}, - {0x016d, "ubreve"}, - {0x00fb, "ucircumflex"}, - {0x00fc, "udieresis"}, - {0x00f9, "ugrave"}, - {0x01b0, "uhorn"}, - {0x0171, "uhungarumlaut"}, - {0x016b, "umacron"}, - {0x005f, "underscore"}, - {0x2017, "underscoredbl"}, - {0x222a, "union"}, - {0x2200, "universal"}, - {0x0173, "uogonek"}, - {0x2580, "upblock"}, - {0x03c5, "upsilon"}, - {0x03cb, "upsilondieresis"}, - {0x03b0, "upsilondieresistonos"}, - {0x03cd, "upsilontonos"}, - {0x016f, "uring"}, - {0x0169, "utilde"}, - {0x0076, "v"}, - {0x0077, "w"}, - {0x1e83, "wacute"}, - {0x0175, "wcircumflex"}, - {0x1e85, "wdieresis"}, - {0x2118, "weierstrass"}, - {0x1e81, "wgrave"}, - {0x0078, "x"}, - {0x03be, "xi"}, - {0x0079, "y"}, - {0x00fd, "yacute"}, - {0x0177, "ycircumflex"}, - {0x00ff, "ydieresis"}, - {0x00a5, "yen"}, - {0x1ef3, "ygrave"}, - {0x007a, "z"}, - {0x017a, "zacute"}, - {0x017e, "zcaron"}, - {0x017c, "zdotaccent"}, - {0x0030, "zero"}, - {0x2080, "zeroinferior"}, - {0xf730, "zerooldstyle"}, - {0x2070, "zerosuperior"}, - {0x03b6, "zeta"}, - {0x007b, "{"}, - {0x007c, "|"}, - {0x007d, "}"}, - {0x007e, "~"}, - { 0, NULL } -}; diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Object.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Object.cc deleted file mode 100644 index 4f7da80ecac..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Object.cc +++ /dev/null @@ -1,250 +0,0 @@ -//======================================================================== -// -// Object.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2008, 2010 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stddef.h> -#include "Object.h" -#include "Array.h" -#include "Dict.h" -#include "Error.h" -#include "Stream.h" -#include "XRef.h" - -//------------------------------------------------------------------------ -// Object -//------------------------------------------------------------------------ - -static char *objTypeNames[numObjTypes] = { - "boolean", - "integer", - "real", - "string", - "name", - "null", - "array", - "dictionary", - "stream", - "ref", - "cmd", - "error", - "eof", - "none" -}; - -#ifdef DEBUG_MEM -int Object::numAlloc[numObjTypes] = - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -#endif - -Object *Object::initArray(XRef *xref) { - initObj(objArray); - array = new Array(xref); - return this; -} - -Object *Object::initDict(XRef *xref) { - initObj(objDict); - dict = new Dict(xref); - return this; -} - -Object *Object::initDict(Dict *dictA) { - initObj(objDict); - dict = dictA; - dict->incRef(); - return this; -} - -Object *Object::initStream(Stream *streamA) { - initObj(objStream); - stream = streamA; - return this; -} - -Object *Object::copy(Object *obj) { - *obj = *this; - switch (type) { - case objString: - obj->string = string->copy(); - break; - case objName: - obj->name = copyString(name); - break; - case objArray: - array->incRef(); - break; - case objDict: - dict->incRef(); - break; - case objStream: - stream->incRef(); - break; - case objCmd: - obj->cmd = copyString(cmd); - break; - default: - break; - } -#ifdef DEBUG_MEM - ++numAlloc[type]; -#endif - return obj; -} - -Object *Object::fetch(XRef *xref, Object *obj, std::set<int> *fetchOriginatorNums) { - return (type == objRef && xref) ? - xref->fetch(ref.num, ref.gen, obj, fetchOriginatorNums) : copy(obj); -} - -void Object::free() { - switch (type) { - case objString: - delete string; - break; - case objName: - gfree(name); - break; - case objArray: - if (!array->decRef()) { - delete array; - } - break; - case objDict: - if (!dict->decRef()) { - delete dict; - } - break; - case objStream: - if (!stream->decRef()) { - delete stream; - } - break; - case objCmd: - gfree(cmd); - break; - default: - break; - } -#ifdef DEBUG_MEM - --numAlloc[type]; -#endif - type = objNone; -} - -char *Object::getTypeName() { - return objTypeNames[type]; -} - -void Object::print(FILE *f) { - Object obj; - int i; - - switch (type) { - case objBool: - fprintf(f, "%s", booln ? "true" : "false"); - break; - case objInt: - fprintf(f, "%d", intg); - break; - case objReal: - fprintf(f, "%g", real); - break; - case objString: - fprintf(f, "("); - fwrite(string->getCString(), 1, string->getLength(), f); - fprintf(f, ")"); - break; - case objName: - fprintf(f, "/%s", name); - break; - case objNull: - fprintf(f, "null"); - break; - case objArray: - fprintf(f, "["); - for (i = 0; i < arrayGetLength(); ++i) { - if (i > 0) - fprintf(f, " "); - arrayGetNF(i, &obj); - obj.print(f); - obj.free(); - } - fprintf(f, "]"); - break; - case objDict: - fprintf(f, "<<"); - for (i = 0; i < dictGetLength(); ++i) { - fprintf(f, " /%s ", dictGetKey(i)); - dictGetValNF(i, &obj); - obj.print(f); - obj.free(); - } - fprintf(f, " >>"); - break; - case objStream: - fprintf(f, "<stream>"); - break; - case objRef: - fprintf(f, "%d %d R", ref.num, ref.gen); - break; - case objCmd: - fprintf(f, "%s", cmd); - break; - case objError: - fprintf(f, "<error>"); - break; - case objEOF: - fprintf(f, "<EOF>"); - break; - case objNone: - fprintf(f, "<none>"); - break; - case objUint: - fprintf(f, "%u", uintg); - break; - } -} - -void Object::memCheck(FILE *f) { -#ifdef DEBUG_MEM - int i; - int t; - - t = 0; - for (i = 0; i < numObjTypes; ++i) - t += numAlloc[i]; - if (t > 0) { - fprintf(f, "Allocated objects:\n"); - for (i = 0; i < numObjTypes; ++i) { - if (numAlloc[i] > 0) - fprintf(f, " %-20s: %6d\n", objTypeNames[i], numAlloc[i]); - } - } -#else - (void)f; -#endif -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Object.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Object.h deleted file mode 100644 index 72ff667858b..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Object.h +++ /dev/null @@ -1,357 +0,0 @@ -//======================================================================== -// -// Object.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2008 Kees Cook <kees@outflux.net> -// Copyright (C) 2008, 2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009 Jakub Wilk <ubanus@users.sf.net> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef OBJECT_H -#define OBJECT_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include <set> -#include <stdio.h> -#include <string.h> -#include "goo/gtypes.h" -#include "goo/gmem.h" -#include "goo/GooString.h" -#include "goo/GooLikely.h" -#include "Error.h" - -#define OBJECT_TYPE_CHECK(wanted_type) \ - if (unlikely(type != wanted_type)) { \ - error(0, (char *) "Call to Object where the object was type %d, " \ - "not the expected type %d", type, wanted_type); \ - abort(); \ - } - -#define OBJECT_2TYPES_CHECK(wanted_type1, wanted_type2) \ - if (unlikely(type != wanted_type1) && unlikely(type != wanted_type2)) { \ - error(0, (char *) "Call to Object where the object was type %d, " \ - "not the expected type %d or %d", type, wanted_type1, wanted_type2); \ - abort(); \ - } - -class XRef; -class Array; -class Dict; -class Stream; - -//------------------------------------------------------------------------ -// Ref -//------------------------------------------------------------------------ - -struct Ref { - int num; // object number - int gen; // generation number -}; - -//------------------------------------------------------------------------ -// object types -//------------------------------------------------------------------------ - -enum ObjType { - // simple objects - objBool, // boolean - objInt, // integer - objReal, // real - objString, // string - objName, // name - objNull, // null - - // complex objects - objArray, // array - objDict, // dictionary - objStream, // stream - objRef, // indirect reference - - // special objects - objCmd, // command name - objError, // error return from Lexer - objEOF, // end of file return from Lexer - objNone, // uninitialized object - - // poppler-only objects - objUint // overflown integer that still fits in a unsigned integer -}; - -#define numObjTypes 15 // total number of object types - -//------------------------------------------------------------------------ -// Object -//------------------------------------------------------------------------ - -#ifdef DEBUG_MEM -#define initObj(t) zeroUnion(); ++numAlloc[type = t] -#else -#define initObj(t) zeroUnion(); type = t -#endif - -class Object { -public: - // clear the anonymous union as best we can -- clear at least a pointer - void zeroUnion() { this->name = NULL; } - - // Default constructor. - Object(): - type(objNone) { zeroUnion(); } - - // Initialize an object. - Object *initBool(GBool boolnA) - { initObj(objBool); booln = boolnA; return this; } - Object *initInt(int intgA) - { initObj(objInt); intg = intgA; return this; } - Object *initReal(double realA) - { initObj(objReal); real = realA; return this; } - Object *initString(GooString *stringA) - { initObj(objString); string = stringA; return this; } - Object *initName(char *nameA) - { initObj(objName); name = copyString(nameA); return this; } - Object *initNull() - { initObj(objNull); return this; } - Object *initArray(XRef *xref); - Object *initDict(XRef *xref); - Object *initDict(Dict *dictA); - Object *initStream(Stream *streamA); - Object *initRef(int numA, int genA) - { initObj(objRef); ref.num = numA; ref.gen = genA; return this; } - Object *initCmd(char *cmdA) - { initObj(objCmd); cmd = copyString(cmdA); return this; } - Object *initError() - { initObj(objError); return this; } - Object *initEOF() - { initObj(objEOF); return this; } - Object *initUint(unsigned int uintgA) - { initObj(objUint); uintg = uintgA; return this; } - - // Copy an object. - Object *copy(Object *obj); - Object *shallowCopy(Object *obj) { - *obj = *this; - return obj; - } - - // If object is a Ref, fetch and return the referenced object. - // Otherwise, return a copy of the object. - Object *fetch(XRef *xref, Object *obj, std::set<int> *fetchOriginatorNums = NULL); - - // Free object contents. - void free(); - - // Type checking. - ObjType getType() { return type; } - GBool isBool() { return type == objBool; } - GBool isInt() { return type == objInt; } - GBool isReal() { return type == objReal; } - GBool isNum() { return type == objInt || type == objReal; } - GBool isString() { return type == objString; } - GBool isName() { return type == objName; } - GBool isNull() { return type == objNull; } - GBool isArray() { return type == objArray; } - GBool isDict() { return type == objDict; } - GBool isStream() { return type == objStream; } - GBool isRef() { return type == objRef; } - GBool isCmd() { return type == objCmd; } - GBool isError() { return type == objError; } - GBool isEOF() { return type == objEOF; } - GBool isNone() { return type == objNone; } - GBool isUint() { return type == objUint; } - - // Special type checking. - GBool isName(char *nameA) - { return type == objName && !strcmp(name, nameA); } - GBool isDict(char *dictType); - GBool isStream(char *dictType); - GBool isCmd(char *cmdA) - { return type == objCmd && !strcmp(cmd, cmdA); } - - // Accessors. - GBool getBool() { OBJECT_TYPE_CHECK(objBool); return booln; } - int getInt() { OBJECT_TYPE_CHECK(objInt); return intg; } - double getReal() { OBJECT_TYPE_CHECK(objReal); return real; } - double getNum() { OBJECT_2TYPES_CHECK(objInt, objReal); return type == objInt ? (double)intg : real; } - GooString *getString() { OBJECT_TYPE_CHECK(objString); return string; } - char *getName() { OBJECT_TYPE_CHECK(objName); return name; } - Array *getArray() { OBJECT_TYPE_CHECK(objArray); return array; } - Dict *getDict() { OBJECT_TYPE_CHECK(objDict); return dict; } - Stream *getStream() { OBJECT_TYPE_CHECK(objStream); return stream; } - Ref getRef() { OBJECT_TYPE_CHECK(objRef); return ref; } - int getRefNum() { OBJECT_TYPE_CHECK(objRef); return ref.num; } - int getRefGen() { OBJECT_TYPE_CHECK(objRef); return ref.gen; } - char *getCmd() { OBJECT_TYPE_CHECK(objCmd); return cmd; } - unsigned int getUint() { OBJECT_TYPE_CHECK(objUint); return uintg; } - - // Array accessors. - int arrayGetLength(); - void arrayAdd(Object *elem); - Object *arrayGet(int i, Object *obj); - Object *arrayGetNF(int i, Object *obj); - - // Dict accessors. - int dictGetLength(); - void dictAdd(char *key, Object *val); - void dictSet(char *key, Object *val); - GBool dictIs(char *dictType); - Object *dictLookup(char *key, Object *obj, std::set<int> *fetchOriginatorNums = NULL); - Object *dictLookupNF(char *key, Object *obj); - char *dictGetKey(int i); - Object *dictGetVal(int i, Object *obj); - Object *dictGetValNF(int i, Object *obj); - - // Stream accessors. - GBool streamIs(char *dictType); - void streamReset(); - void streamClose(); - int streamGetChar(); - int streamGetChars(int nChars, Guchar *buffer); - int streamLookChar(); - char *streamGetLine(char *buf, int size); - Guint streamGetPos(); - void streamSetPos(Guint pos, int dir = 0); - Dict *streamGetDict(); - - // Output. - char *getTypeName(); - void print(FILE *f = stdout); - - // Memory testing. - static void memCheck(FILE *f); - -private: - - ObjType type; // object type - union { // value for each type: - GBool booln; // boolean - int intg; // integer - unsigned int uintg; // unsigned integer - double real; // real - GooString *string; // string - char *name; // name - Array *array; // array - Dict *dict; // dictionary - Stream *stream; // stream - Ref ref; // indirect reference - char *cmd; // command - }; - -#ifdef DEBUG_MEM - static int // number of each type of object - numAlloc[numObjTypes]; // currently allocated -#endif -}; - -//------------------------------------------------------------------------ -// Array accessors. -//------------------------------------------------------------------------ - -#include "Array.h" - -inline int Object::arrayGetLength() - { OBJECT_TYPE_CHECK(objArray); return array->getLength(); } - -inline void Object::arrayAdd(Object *elem) - { OBJECT_TYPE_CHECK(objArray); array->add(elem); } - -inline Object *Object::arrayGet(int i, Object *obj) - { OBJECT_TYPE_CHECK(objArray); return array->get(i, obj); } - -inline Object *Object::arrayGetNF(int i, Object *obj) - { OBJECT_TYPE_CHECK(objArray); return array->getNF(i, obj); } - -//------------------------------------------------------------------------ -// Dict accessors. -//------------------------------------------------------------------------ - -#include "Dict.h" - -inline int Object::dictGetLength() - { OBJECT_TYPE_CHECK(objDict); return dict->getLength(); } - -inline void Object::dictAdd(char *key, Object *val) - { OBJECT_TYPE_CHECK(objDict); dict->add(key, val); } - -inline void Object::dictSet(char *key, Object *val) - { OBJECT_TYPE_CHECK(objDict); dict->set(key, val); } - -inline GBool Object::dictIs(char *dictType) - { OBJECT_TYPE_CHECK(objDict); return dict->is(dictType); } - -inline GBool Object::isDict(char *dictType) - { return type == objDict && dictIs(dictType); } - -inline Object *Object::dictLookup(char *key, Object *obj, std::set<int> *fetchOriginatorNums) - { OBJECT_TYPE_CHECK(objDict); return dict->lookup(key, obj, fetchOriginatorNums); } - -inline Object *Object::dictLookupNF(char *key, Object *obj) - { OBJECT_TYPE_CHECK(objDict); return dict->lookupNF(key, obj); } - -inline char *Object::dictGetKey(int i) - { OBJECT_TYPE_CHECK(objDict); return dict->getKey(i); } - -inline Object *Object::dictGetVal(int i, Object *obj) - { OBJECT_TYPE_CHECK(objDict); return dict->getVal(i, obj); } - -inline Object *Object::dictGetValNF(int i, Object *obj) - { OBJECT_TYPE_CHECK(objDict); return dict->getValNF(i, obj); } - -//------------------------------------------------------------------------ -// Stream accessors. -//------------------------------------------------------------------------ - -#include "Stream.h" - -inline GBool Object::streamIs(char *dictType) - { OBJECT_TYPE_CHECK(objStream); return stream->getDict()->is(dictType); } - -inline GBool Object::isStream(char *dictType) - { return type == objStream && streamIs(dictType); } - -inline void Object::streamReset() - { OBJECT_TYPE_CHECK(objStream); stream->reset(); } - -inline void Object::streamClose() - { OBJECT_TYPE_CHECK(objStream); stream->close(); } - -inline int Object::streamGetChar() - { OBJECT_TYPE_CHECK(objStream); return stream->getChar(); } - -inline int Object::streamGetChars(int nChars, Guchar *buffer) - { OBJECT_TYPE_CHECK(objStream); return stream->doGetChars(nChars, buffer); } - -inline int Object::streamLookChar() - { OBJECT_TYPE_CHECK(objStream); return stream->lookChar(); } - -inline char *Object::streamGetLine(char *buf, int size) - { OBJECT_TYPE_CHECK(objStream); return stream->getLine(buf, size); } - -inline Guint Object::streamGetPos() - { OBJECT_TYPE_CHECK(objStream); return stream->getPos(); } - -inline void Object::streamSetPos(Guint pos, int dir) - { OBJECT_TYPE_CHECK(objStream); stream->setPos(pos, dir); } - -inline Dict *Object::streamGetDict() - { OBJECT_TYPE_CHECK(objStream); return stream->getDict(); } - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/OptionalContent.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/OptionalContent.cc deleted file mode 100644 index c8b5c97222b..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/OptionalContent.cc +++ /dev/null @@ -1,325 +0,0 @@ -//======================================================================== -// -// OptionalContent.cc -// -// Copyright 2007 Brad Hards <bradh@kde.org> -// Copyright 2008 Pino Toscano <pino@kde.org> -// Copyright 2008, 2010 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright 2008, 2010, 2011 Albert Astals Cid <aacid@kde.org> -// Copyright 2008 Mark Kaplan <mkaplan@finjan.com> -// -// Released under the GPL (version 2, or later, at your option) -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "goo/gmem.h" -#include "goo/GooString.h" -#include "goo/GooList.h" -#include "Error.h" -// #include "PDFDocEncoding.h" -#include "OptionalContent.h" - -//------------------------------------------------------------------------ - -OCGs::OCGs(Object *ocgObject, XRef *xref) : - m_xref(xref) -{ - // we need to parse the dictionary here, and build optionalContentGroups - ok = gTrue; - optionalContentGroups = new GooList(); - - Object ocgList; - ocgObject->dictLookup("OCGs", &ocgList); - if (!ocgList.isArray()) { - error(-1, "Expected the optional content group list, but wasn't able to find it, or it isn't an Array"); - ocgList.free(); - ok = gFalse; - return; - } - - // we now enumerate over the ocgList, and build up the optionalContentGroups list. - for(int i = 0; i < ocgList.arrayGetLength(); ++i) { - Object ocg; - ocgList.arrayGet(i, &ocg); - if (!ocg.isDict()) { - ocg.free(); - break; - } - OptionalContentGroup *thisOptionalContentGroup = new OptionalContentGroup(ocg.getDict()); - ocg.free(); - ocgList.arrayGetNF(i, &ocg); - // TODO: we should create a lookup map from Ref to the OptionalContentGroup - thisOptionalContentGroup->setRef( ocg.getRef() ); - ocg.free(); - // the default is ON - we change state later, depending on BaseState, ON and OFF - thisOptionalContentGroup->setState(OptionalContentGroup::On); - optionalContentGroups->append(thisOptionalContentGroup); - } - - Object defaultOcgConfig; - ocgObject->dictLookup("D", &defaultOcgConfig); - if (!defaultOcgConfig.isDict()) { - error(-1, "Expected the default config, but wasn't able to find it, or it isn't a Dictionary"); - defaultOcgConfig.free(); - ocgList.free(); - ok = gFalse; - return; - } - - Object baseState; - defaultOcgConfig.dictLookup("BaseState", &baseState); - if (baseState.isName("OFF")) { - for (int i = 0; i < optionalContentGroups->getLength(); ++i) { - OptionalContentGroup *group; - - group = (OptionalContentGroup *)optionalContentGroups->get(i); - group->setState(OptionalContentGroup::Off); - } - } - baseState.free(); - - Object on; - defaultOcgConfig.dictLookup("ON", &on); - if (on.isArray()) { - // ON is an optional element - for (int i = 0; i < on.arrayGetLength(); ++i) { - Object reference; - on.arrayGetNF(i, &reference); - if (!reference.isRef()) { - // there can be null entries - reference.free(); - break; - } - OptionalContentGroup *group = findOcgByRef( reference.getRef() ); - reference.free(); - if (!group) { - error(-1, "Couldn't find group for reference"); - break; - } - group->setState(OptionalContentGroup::On); - } - } - on.free(); - - Object off; - defaultOcgConfig.dictLookup("OFF", &off); - if (off.isArray()) { - // OFF is an optional element - for (int i = 0; i < off.arrayGetLength(); ++i) { - Object reference; - off.arrayGetNF(i, &reference); - if (!reference.isRef()) { - // there can be null entries - reference.free(); - break; - } - OptionalContentGroup *group = findOcgByRef( reference.getRef() ); - reference.free(); - if (!group) { - error(-1, "Couldn't find group for reference to set OFF"); - break; - } - group->setState(OptionalContentGroup::Off); - } - } - off.free(); - - defaultOcgConfig.dictLookup("Order", &order); - defaultOcgConfig.dictLookup("RBGroups", &rbgroups); - - ocgList.free(); - defaultOcgConfig.free(); -} - -OCGs::~OCGs() -{ - deleteGooList(optionalContentGroups, OptionalContentGroup); - order.free(); - rbgroups.free(); -} - - -bool OCGs::hasOCGs() -{ - return ( optionalContentGroups->getLength() > 0 ); -} - -OptionalContentGroup* OCGs::findOcgByRef( const Ref &ref) -{ - //TODO: make this more efficient - OptionalContentGroup *ocg = NULL; - for (int i=0; i < optionalContentGroups->getLength(); ++i) { - ocg = (OptionalContentGroup*)optionalContentGroups->get(i); - if ( (ocg->getRef().num == ref.num) && (ocg->getRef().gen == ref.gen) ) { - return ocg; - } - } - - error(-1, "Could not find a OCG with Ref (%d:%d)", ref.num, ref.gen); - - // not found - return NULL; -} - -bool OCGs::optContentIsVisible( Object *dictRef ) -{ - Object dictObj; - Dict *dict; - Object dictType; - Object ocg; - Object policy; - bool result = true; - dictRef->fetch( m_xref, &dictObj ); - if ( ! dictObj.isDict() ) { - error(-1, "Unexpected oc reference target: %i", dictObj.getType() ); - dictObj.free(); - return result; - } - dict = dictObj.getDict(); - // printf("checking if optContent is visible\n"); - dict->lookup("Type", &dictType); - if (dictType.isName("OCMD")) { - // If we supported Visibility Expressions, we'd check - // for a VE entry, and then call out to the parser here... - // printf("found OCMD dict\n"); - dict->lookup("P", &policy); - dict->lookupNF("OCGs", &ocg); - if (ocg.isArray()) { - if (policy.isName("AllOn")) { - result = allOn( ocg.getArray() ); - } else if (policy.isName("AllOff")) { - result = allOff( ocg.getArray() ); - } else if (policy.isName("AnyOff")) { - result = anyOff( ocg.getArray() ); - } else if ( (!policy.isName()) || (policy.isName("AnyOn") ) ) { - // this is the default - result = anyOn( ocg.getArray() ); - } - } else if (ocg.isRef()) { - OptionalContentGroup* oc = findOcgByRef( ocg.getRef() ); - if ( oc && oc->getState() == OptionalContentGroup::Off ) { - result = false; - } else { - result = true ; - } - } - ocg.free(); - policy.free(); - } else if ( dictType.isName("OCG") ) { - OptionalContentGroup* oc = findOcgByRef( dictRef->getRef() ); - if ( oc && oc->getState() == OptionalContentGroup::Off ) { - result=false; - } - } - dictType.free(); - dictObj.free(); - // printf("visibility: %s\n", result? "on" : "off"); - return result; -} - -bool OCGs::allOn( Array *ocgArray ) -{ - for (int i = 0; i < ocgArray->getLength(); ++i) { - Object ocgItem; - ocgArray->getNF(i, &ocgItem); - if (ocgItem.isRef()) { - OptionalContentGroup* oc = findOcgByRef( ocgItem.getRef() ); - if ( oc && oc->getState() == OptionalContentGroup::Off ) { - return false; - } - } - } - return true; -} - -bool OCGs::allOff( Array *ocgArray ) -{ - for (int i = 0; i < ocgArray->getLength(); ++i) { - Object ocgItem; - ocgArray->getNF(i, &ocgItem); - if (ocgItem.isRef()) { - OptionalContentGroup* oc = findOcgByRef( ocgItem.getRef() ); - if ( oc && oc->getState() == OptionalContentGroup::On ) { - return false; - } - } - } - return true; -} - -bool OCGs::anyOn( Array *ocgArray ) -{ - for (int i = 0; i < ocgArray->getLength(); ++i) { - Object ocgItem; - ocgArray->getNF(i, &ocgItem); - if (ocgItem.isRef()) { - OptionalContentGroup* oc = findOcgByRef( ocgItem.getRef() ); - if ( oc && oc->getState() == OptionalContentGroup::On ) { - return true; - } - } - } - return false; -} - -bool OCGs::anyOff( Array *ocgArray ) -{ - for (int i = 0; i < ocgArray->getLength(); ++i) { - Object ocgItem; - ocgArray->getNF(i, &ocgItem); - if (ocgItem.isRef()) { - OptionalContentGroup* oc = findOcgByRef( ocgItem.getRef() ); - if ( oc && oc->getState() == OptionalContentGroup::Off ) { - return true; - } - } - } - return false; -} - -//------------------------------------------------------------------------ - -OptionalContentGroup::OptionalContentGroup(Dict *ocgDict) : m_name(NULL) -{ - Object ocgName; - ocgDict->lookup("Name", &ocgName); - if (!ocgName.isString()) { - error(-1, "Expected the name of the OCG, but wasn't able to find it, or it isn't a String"); - } else { - m_name = new GooString( ocgName.getString() ); - } - ocgName.free(); -} - -OptionalContentGroup::OptionalContentGroup(GooString *label) -{ - m_name = label; - m_state = On; -} - -GooString* OptionalContentGroup::getName() const -{ - return m_name; -} - -void OptionalContentGroup::setRef(const Ref ref) -{ - m_ref = ref; -} - -Ref OptionalContentGroup::getRef() const -{ - return m_ref; -} - -OptionalContentGroup::~OptionalContentGroup() -{ - delete m_name; -} - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/OptionalContent.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/OptionalContent.h deleted file mode 100644 index 7add4a3c11e..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/OptionalContent.h +++ /dev/null @@ -1,93 +0,0 @@ -//======================================================================== -// -// OptionalContent.h -// -// Copyright 2007 Brad Hards <bradh@kde.org> -// Copyright 2008 Carlos Garcia Campos <carlosgc@gnome.org> -// -// Released under the GPL (version 2, or later, at your option) -// -//======================================================================== - -#ifndef OPTIONALCONTENT_H -#define OPTIONALCONTENT_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" -#include "CharTypes.h" - -class GooString; -class GooList; -class XRef; - -class OptionalContentGroup; - -//------------------------------------------------------------------------ - -class OCGs { -public: - - OCGs(Object *ocgObject, XRef *xref); - ~OCGs(); - - // Is OCGS valid? - GBool isOk() { return ok; } - - bool hasOCGs(); - GooList *getOCGs() const { return optionalContentGroups; } - - OptionalContentGroup* findOcgByRef( const Ref &ref); - - Array* getOrderArray() - { return (order.isArray() && order.arrayGetLength() > 0) ? order.getArray() : NULL; } - Array* getRBGroupsArray() - { return (rbgroups.isArray() && rbgroups.arrayGetLength()) ? rbgroups.getArray() : NULL; } - - bool optContentIsVisible( Object *dictRef ); - -private: - GBool ok; - - bool allOn( Array *ocgArray ); - bool allOff( Array *ocgArray ); - bool anyOn( Array *ocgArray ); - bool anyOff( Array *ocgArray ); - - GooList *optionalContentGroups; - - Object order; - Object rbgroups; - XRef *m_xref; -}; - -//------------------------------------------------------------------------ - -class OptionalContentGroup { -public: - enum State { On, Off }; - - OptionalContentGroup(Dict *dict); - - OptionalContentGroup(GooString *label); - - ~OptionalContentGroup(); - - GooString* getName() const; - - Ref getRef() const; - void setRef(const Ref ref); - - State getState() { return m_state; }; - void setState(State state) { m_state = state; }; - -private: - XRef *xref; - GooString *m_name; - Ref m_ref; - State m_state; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Outline.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Outline.cc deleted file mode 100644 index bd4e6d01b6d..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Outline.cc +++ /dev/null @@ -1,188 +0,0 @@ -//======================================================================== -// -// Outline.cc -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Marco Pesenti Gritti <mpg@redhat.com> -// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009 Nick Jones <nick.jones@network-box.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "goo/gmem.h" -#include "goo/GooString.h" -#include "goo/GooList.h" -#include "XRef.h" -#include "Link.h" -#include "PDFDocEncoding.h" -#include "Outline.h" - -//------------------------------------------------------------------------ - -Outline::Outline(Object *outlineObj, XRef *xref) { - Object first, last; - - items = NULL; - if (!outlineObj->isDict()) { - return; - } - items = OutlineItem::readItemList(outlineObj->dictLookupNF("First", &first), - outlineObj->dictLookupNF("Last", &last), - xref); - first.free(); - last.free(); -} - -Outline::~Outline() { - if (items) { - deleteGooList(items, OutlineItem); - } -} - -//------------------------------------------------------------------------ - -OutlineItem::OutlineItem(Dict *dict, XRef *xrefA) { - Object obj1; - GooString *s; - int i; - - xref = xrefA; - title = NULL; - action = NULL; - kids = NULL; - - if (dict->lookup("Title", &obj1)->isString()) { - s = obj1.getString(); - if ((s->getChar(0) & 0xff) == 0xfe && - (s->getChar(1) & 0xff) == 0xff) { - titleLen = (s->getLength() - 2) / 2; - title = (Unicode *)gmallocn(titleLen, sizeof(Unicode)); - for (i = 0; i < titleLen; ++i) { - title[i] = ((s->getChar(2 + 2*i) & 0xff) << 8) | - (s->getChar(3 + 2*i) & 0xff); - } - } else { - titleLen = s->getLength(); - title = (Unicode *)gmallocn(titleLen, sizeof(Unicode)); - for (i = 0; i < titleLen; ++i) { - title[i] = pdfDocEncoding[s->getChar(i) & 0xff]; - } - } - } else { - titleLen = 0; - } - obj1.free(); - - if (!dict->lookup("Dest", &obj1)->isNull()) { - action = LinkAction::parseDest(&obj1); - } else { - obj1.free(); - if (!dict->lookup("A", &obj1)->isNull()) { - action = LinkAction::parseAction(&obj1); - } - } - obj1.free(); - - dict->lookupNF("First", &firstRef); - dict->lookupNF("Last", &lastRef); - dict->lookupNF("Next", &nextRef); - - startsOpen = gFalse; - if (dict->lookup("Count", &obj1)->isInt()) { - if (obj1.getInt() > 0) { - startsOpen = gTrue; - } - } - obj1.free(); -} - -OutlineItem::~OutlineItem() { - close(); - if (title) { - gfree(title); - } - if (action) { - delete action; - } - firstRef.free(); - lastRef.free(); - nextRef.free(); -} - -GooList *OutlineItem::readItemList(Object *firstItemRef, Object *lastItemRef, - XRef *xrefA) { - GooList *items; - char* alreadyRead; - OutlineItem *item; - Object obj; - Object *p; - - if (!lastItemRef->isRef()) - return NULL; - - items = new GooList(); - - alreadyRead = (char *)gmalloc(xrefA->getNumObjects()); - memset(alreadyRead, 0, xrefA->getNumObjects()); - - p = firstItemRef; - while (p->isRef() && - (p->getRefNum() >= 0) && - (p->getRefNum() < xrefA->getNumObjects()) && - !alreadyRead[p->getRefNum()]) { - if (!p->fetch(xrefA, &obj)->isDict()) { - obj.free(); - break; - } - alreadyRead[p->getRefNum()] = 1; - item = new OutlineItem(obj.getDict(), xrefA); - obj.free(); - items->append(item); - if (p->getRef().num == lastItemRef->getRef().num && - p->getRef().gen == lastItemRef->getRef().gen) { - break; - } - p = &item->nextRef; - } - - gfree(alreadyRead); - - if (!items->getLength()) { - delete items; - items = NULL; - } - - return items; -} - -void OutlineItem::open() { - if (!kids) { - kids = readItemList(&firstRef, &lastRef, xref); - } -} - -void OutlineItem::close() { - if (kids) { - deleteGooList(kids, OutlineItem); - kids = NULL; - } -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Outline.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Outline.h deleted file mode 100644 index 90190e69280..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Outline.h +++ /dev/null @@ -1,89 +0,0 @@ -//======================================================================== -// -// Outline.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Marco Pesenti Gritti <mpg@redhat.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef OUTLINE_H -#define OUTLINE_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" -#include "CharTypes.h" - -class GooString; -class GooList; -class XRef; -class LinkAction; - -//------------------------------------------------------------------------ - -class Outline { -public: - - Outline(Object *outlineObj, XRef *xref); - ~Outline(); - - GooList *getItems() { return items; } - -private: - - GooList *items; // NULL if document has no outline, - // otherwise, a list of OutlineItem -}; - -//------------------------------------------------------------------------ - -class OutlineItem { -public: - - OutlineItem(Dict *dict, XRef *xrefA); - ~OutlineItem(); - - static GooList *readItemList(Object *firstItemRef, Object *lastItemRef, - XRef *xrefA); - - void open(); - void close(); - - Unicode *getTitle() { return title; } - int getTitleLength() { return titleLen; } - LinkAction *getAction() { return action; } - GBool isOpen() { return startsOpen; } - GBool hasKids() { return firstRef.isRef(); } - GooList *getKids() { return kids; } - -private: - - XRef *xref; - Unicode *title; - int titleLen; - LinkAction *action; - Object firstRef; - Object lastRef; - Object nextRef; - GBool startsOpen; - GooList *kids; // NULL if this item is closed or has no kids, - // otherwise a list of OutlineItem -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/OutputDev.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/OutputDev.cc deleted file mode 100644 index 5adc7b87c4c..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/OutputDev.cc +++ /dev/null @@ -1,183 +0,0 @@ -//======================================================================== -// -// OutputDev.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> -// Copyright (C) 2006 Thorkild Stray <thorkild@ifi.uio.no> -// Copyright (C) 2007 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2009 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stddef.h> -#include "Object.h" -#include "Stream.h" -#include "GfxState.h" -#include "OutputDev.h" -#include "goo/GooHash.h" - -//------------------------------------------------------------------------ -// OutputDev -//------------------------------------------------------------------------ - -void OutputDev::setDefaultCTM(double *ctm) { - int i; - double det; - - for (i = 0; i < 6; ++i) { - defCTM[i] = ctm[i]; - } - det = 1 / (defCTM[0] * defCTM[3] - defCTM[1] * defCTM[2]); - defICTM[0] = defCTM[3] * det; - defICTM[1] = -defCTM[1] * det; - defICTM[2] = -defCTM[2] * det; - defICTM[3] = defCTM[0] * det; - defICTM[4] = (defCTM[2] * defCTM[5] - defCTM[3] * defCTM[4]) * det; - defICTM[5] = (defCTM[1] * defCTM[4] - defCTM[0] * defCTM[5]) * det; -} - -void OutputDev::cvtDevToUser(double dx, double dy, double *ux, double *uy) { - *ux = defICTM[0] * dx + defICTM[2] * dy + defICTM[4]; - *uy = defICTM[1] * dx + defICTM[3] * dy + defICTM[5]; -} - -void OutputDev::cvtUserToDev(double ux, double uy, int *dx, int *dy) { - *dx = (int)(defCTM[0] * ux + defCTM[2] * uy + defCTM[4] + 0.5); - *dy = (int)(defCTM[1] * ux + defCTM[3] * uy + defCTM[5] + 0.5); -} - -void OutputDev::updateAll(GfxState *state) { - updateLineDash(state); - updateFlatness(state); - updateLineJoin(state); - updateLineCap(state); - updateMiterLimit(state); - updateLineWidth(state); - updateStrokeAdjust(state); - updateFillColorSpace(state); - updateFillColor(state); - updateStrokeColorSpace(state); - updateStrokeColor(state); - updateBlendMode(state); - updateFillOpacity(state); - updateStrokeOpacity(state); - updateFillOverprint(state); - updateStrokeOverprint(state); - updateTransfer(state); - updateFont(state); -} - -GBool OutputDev::beginType3Char(GfxState *state, double x, double y, - double dx, double dy, - CharCode code, Unicode *u, int uLen) { - return gFalse; -} - -void OutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool interpolate, GBool inlineImg) { - int i, j; - - if (inlineImg) { - str->reset(); - j = height * ((width + 7) / 8); - for (i = 0; i < j; ++i) - str->getChar(); - str->close(); - } -} - -void OutputDev::drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - GBool interpolate, int *maskColors, GBool inlineImg) { - int i, j; - - if (inlineImg) { - str->reset(); - j = height * ((width * colorMap->getNumPixelComps() * - colorMap->getBits() + 7) / 8); - for (i = 0; i < j; ++i) - str->getChar(); - str->close(); - } -} - -void OutputDev::drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, - int maskWidth, int maskHeight, - GBool maskInvert, - GBool maskInterpolate) { - drawImage(state, ref, str, width, height, colorMap, interpolate, NULL, gFalse); -} - -void OutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap, - GBool maskInterpolate) { - drawImage(state, ref, str, width, height, colorMap, interpolate, NULL, gFalse); -} - -void OutputDev::endMarkedContent(GfxState *state) { -} - -void OutputDev::beginMarkedContent(char *name, Dict *properties) { -} - -void OutputDev::markPoint(char *name) { -} - -void OutputDev::markPoint(char *name, Dict *properties) { -} - - -#if OPI_SUPPORT -void OutputDev::opiBegin(GfxState *state, Dict *opiDict) { -} - -void OutputDev::opiEnd(GfxState *state, Dict *opiDict) { -} -#endif - -void OutputDev::startProfile() { - if (profileHash) - delete profileHash; - - profileHash = new GooHash (true); -} - -GooHash *OutputDev::endProfile() { - GooHash *profile = profileHash; - - profileHash = NULL; - - return profile; -} - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/OutputDev.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/OutputDev.h deleted file mode 100644 index bf984fc31ab..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/OutputDev.h +++ /dev/null @@ -1,322 +0,0 @@ -//======================================================================== -// -// OutputDev.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> -// Copyright (C) 2006 Thorkild Stray <thorkild@ifi.uio.no> -// Copyright (C) 2007 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2007, 2011 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2009-2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// Copyright (C) 2009, 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2009 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef OUTPUTDEV_H -#define OUTPUTDEV_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "poppler-config.h" -#include "goo/gtypes.h" -#include "CharTypes.h" -#include "Object.h" - -class Dict; -class GooHash; -class GooString; -class GfxState; -struct GfxColor; -class GfxColorSpace; -class GfxImageColorMap; -class GfxFunctionShading; -class GfxAxialShading; -class GfxGouraudTriangleShading; -class GfxPatchMeshShading; -class GfxRadialShading; -class GfxGouraudTriangleShading; -class GfxPatchMeshShading; -class Stream; -class Links; -class AnnotLink; -class Catalog; -class Page; -class Function; - -//------------------------------------------------------------------------ -// OutputDev -//------------------------------------------------------------------------ - -class OutputDev { -public: - - // Constructor. - OutputDev() { profileHash = NULL; } - - // Destructor. - virtual ~OutputDev() {} - - //----- get info about output device - - // Does this device use upside-down coordinates? - // (Upside-down means (0,0) is the top left corner of the page.) - virtual GBool upsideDown() = 0; - - // Does this device use drawChar() or drawString()? - virtual GBool useDrawChar() = 0; - - // Does this device use tilingPatternFill()? If this returns false, - // tiling pattern fills will be reduced to a series of other drawing - // operations. - virtual GBool useTilingPatternFill() { return gFalse; } - - // Does this device support specific shading types? - // see gouraudTriangleShadedFill() and patchMeshShadedFill() - virtual GBool useShadedFills(int type) { return gFalse; } - - // Does this device use FillColorStop()? - virtual GBool useFillColorStop() { return gFalse; } - - // Does this device use drawForm()? If this returns false, - // form-type XObjects will be interpreted (i.e., unrolled). - virtual GBool useDrawForm() { return gFalse; } - - // Does this device use beginType3Char/endType3Char? Otherwise, - // text in Type 3 fonts will be drawn with drawChar/drawString. - virtual GBool interpretType3Chars() = 0; - - // Does this device need non-text content? - virtual GBool needNonText() { return gTrue; } - - // If current colorspace ist pattern, - // does this device support text in pattern colorspace? - // Default is false - virtual GBool supportTextCSPattern(GfxState * /*state*/) { return gFalse; } - - // If current colorspace ist pattern, - // need this device special handling for masks in pattern colorspace? - // Default is false - virtual GBool fillMaskCSPattern(GfxState * /*state*/) { return gFalse; } - virtual void endMaskClip(GfxState * /*state*/) {} - - //----- initialization and control - - // Set default transform matrix. - virtual void setDefaultCTM(double *ctm); - - // Check to see if a page slice should be displayed. If this - // returns false, the page display is aborted. Typically, an - // OutputDev will use some alternate means to display the page - // before returning false. - virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool crop, - int sliceX, int sliceY, int sliceW, int sliceH, - GBool printing, Catalog * catalog, - GBool (* abortCheckCbk)(void *data) = NULL, - void * abortCheckCbkData = NULL) - { return gTrue; } - - // Start a page. - virtual void startPage(int pageNum, GfxState *state) {} - - // End a page. - virtual void endPage() {} - - // Dump page contents to display. - virtual void dump() {} - - //----- coordinate conversion - - // Convert between device and user coordinates. - virtual void cvtDevToUser(double dx, double dy, double *ux, double *uy); - virtual void cvtUserToDev(double ux, double uy, int *dx, int *dy); - - double *getDefCTM() { return defCTM; } - double *getDefICTM() { return defICTM; } - - //----- save/restore graphics state - virtual void saveState(GfxState * /*state*/) {} - virtual void restoreState(GfxState * /*state*/) {} - - //----- update graphics state - virtual void updateAll(GfxState *state); - virtual void updateCTM(GfxState * /*state*/, double /*m11*/, double /*m12*/, - double /*m21*/, double /*m22*/, double /*m31*/, double /*m32*/) {} - virtual void updateLineDash(GfxState * /*state*/) {} - virtual void updateFlatness(GfxState * /*state*/) {} - virtual void updateLineJoin(GfxState * /*state*/) {} - virtual void updateLineCap(GfxState * /*state*/) {} - virtual void updateMiterLimit(GfxState * /*state*/) {} - virtual void updateLineWidth(GfxState * /*state*/) {} - virtual void updateStrokeAdjust(GfxState * /*state*/) {} - virtual void updateAlphaIsShape(GfxState * /*state*/) {} - virtual void updateTextKnockout(GfxState * /*state*/) {} - virtual void updateFillColorSpace(GfxState * /*state*/) {} - virtual void updateStrokeColorSpace(GfxState * /*state*/) {} - virtual void updateFillColor(GfxState * /*state*/) {} - virtual void updateStrokeColor(GfxState * /*state*/) {} - virtual void updateBlendMode(GfxState * /*state*/) {} - virtual void updateFillOpacity(GfxState * /*state*/) {} - virtual void updateStrokeOpacity(GfxState * /*state*/) {} - virtual void updateFillOverprint(GfxState * /*state*/) {} - virtual void updateStrokeOverprint(GfxState * /*state*/) {} - virtual void updateOverprintMode(GfxState * /*state*/) {} - virtual void updateTransfer(GfxState * /*state*/) {} - virtual void updateFillColorStop(GfxState * /*state*/, double /*offset*/) {} - - //----- update text state - virtual void updateFont(GfxState * /*state*/) {} - virtual void updateTextMat(GfxState * /*state*/) {} - virtual void updateCharSpace(GfxState * /*state*/) {} - virtual void updateRender(GfxState * /*state*/) {} - virtual void updateRise(GfxState * /*state*/) {} - virtual void updateWordSpace(GfxState * /*state*/) {} - virtual void updateHorizScaling(GfxState * /*state*/) {} - virtual void updateTextPos(GfxState * /*state*/) {} - virtual void updateTextShift(GfxState * /*state*/, double /*shift*/) {} - - //----- path painting - virtual void stroke(GfxState * /*state*/) {} - virtual void fill(GfxState * /*state*/) {} - virtual void eoFill(GfxState * /*state*/) {} - virtual GBool tilingPatternFill(GfxState * /*state*/, Catalog * /*cat*/, Object * /*str*/, - double * /*pmat*/, int /*paintType*/, int /*tilingType*/, Dict * /*resDict*/, - double * /*mat*/, double * /*bbox*/, - int /*x0*/, int /*y0*/, int /*x1*/, int /*y1*/, - double /*xStep*/, double /*yStep*/) - { return gFalse; } - virtual GBool functionShadedFill(GfxState * /*state*/, - GfxFunctionShading * /*shading*/) - { return gFalse; } - virtual GBool axialShadedFill(GfxState * /*state*/, GfxAxialShading * /*shading*/, double /*tMin*/, double /*tMax*/) - { return gFalse; } - virtual GBool axialShadedSupportExtend(GfxState * /*state*/, GfxAxialShading * /*shading*/) - { return gFalse; } - virtual GBool radialShadedFill(GfxState * /*state*/, GfxRadialShading * /*shading*/, double /*sMin*/, double /*sMax*/) - { return gFalse; } - virtual GBool radialShadedSupportExtend(GfxState * /*state*/, GfxRadialShading * /*shading*/) - { return gFalse; } - virtual GBool gouraudTriangleShadedFill(GfxState *state, GfxGouraudTriangleShading *shading) - { return gFalse; } - virtual GBool patchMeshShadedFill(GfxState *state, GfxPatchMeshShading *shading) - { return gFalse; } - - //----- path clipping - virtual void clip(GfxState * /*state*/) {} - virtual void eoClip(GfxState * /*state*/) {} - virtual void clipToStrokePath(GfxState * /*state*/) {} - - //----- text drawing - virtual void beginStringOp(GfxState * /*state*/) {} - virtual void endStringOp(GfxState * /*state*/) {} - virtual void beginString(GfxState * /*state*/, GooString * /*s*/) {} - virtual void endString(GfxState * /*state*/) {} - virtual void drawChar(GfxState * /*state*/, double /*x*/, double /*y*/, - double /*dx*/, double /*dy*/, - double /*originX*/, double /*originY*/, - CharCode /*code*/, int /*nBytes*/, Unicode * /*u*/, int /*uLen*/) {} - virtual void drawString(GfxState * /*state*/, GooString * /*s*/) {} - virtual GBool beginType3Char(GfxState * /*state*/, double /*x*/, double /*y*/, - double /*dx*/, double /*dy*/, - CharCode /*code*/, Unicode * /*u*/, int /*uLen*/); - virtual void endType3Char(GfxState * /*state*/) {} - virtual void beginTextObject(GfxState * /*state*/) {} - virtual GBool deviceHasTextClip(GfxState * /*state*/) { return gFalse; } - virtual void endTextObject(GfxState * /*state*/) {} - - //----- image drawing - virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, GBool interpolate, - GBool inlineImg); - virtual void drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - GBool interpolate, int *maskColors, GBool inlineImg); - virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, GBool interpolate, - Stream *maskStr, int maskWidth, int maskHeight, - GBool maskInvert, GBool maskInterpolate); - virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap, - GBool maskInterpolate); - - //----- grouping operators - - virtual void endMarkedContent(GfxState *state); - virtual void beginMarkedContent(char *name, Dict *properties); - virtual void markPoint(char *name); - virtual void markPoint(char *name, Dict *properties); - - - -#if OPI_SUPPORT - //----- OPI functions - virtual void opiBegin(GfxState *state, Dict *opiDict); - virtual void opiEnd(GfxState *state, Dict *opiDict); -#endif - - //----- Type 3 font operators - virtual void type3D0(GfxState * /*state*/, double /*wx*/, double /*wy*/) {} - virtual void type3D1(GfxState * /*state*/, double /*wx*/, double /*wy*/, - double /*llx*/, double /*lly*/, double /*urx*/, double /*ury*/) {} - - //----- form XObjects - virtual void drawForm(Ref /*id*/) {} - - //----- PostScript XObjects - virtual void psXObject(Stream * /*psStream*/, Stream * /*level1Stream*/) {} - - //----- Profiling - virtual void startProfile(); - virtual GooHash *getProfileHash() {return profileHash; } - virtual GooHash *endProfile(); - - //----- transparency groups and soft masks - virtual void beginTransparencyGroup(GfxState * /*state*/, double * /*bbox*/, - GfxColorSpace * /*blendingColorSpace*/, - GBool /*isolated*/, GBool /*knockout*/, - GBool /*forSoftMask*/) {} - virtual void endTransparencyGroup(GfxState * /*state*/) {} - virtual void paintTransparencyGroup(GfxState * /*state*/, double * /*bbox*/) {} - virtual void setSoftMask(GfxState * /*state*/, double * /*bbox*/, GBool /*alpha*/, - Function * /*transferFunc*/, GfxColor * /*backdropColor*/) {} - virtual void clearSoftMask(GfxState * /*state*/) {} - - //----- links - virtual void processLink(AnnotLink * /*link*/, Catalog * /*catalog*/) {} - -#if 1 //~tmp: turn off anti-aliasing temporarily - virtual GBool getVectorAntialias() { return gFalse; } - virtual void setVectorAntialias(GBool /*vaa*/) {} -#endif - -private: - - double defCTM[6]; // default coordinate transform matrix - double defICTM[6]; // inverse of default CTM - GooHash *profileHash; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDoc.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDoc.cc deleted file mode 100644 index 01d2759a193..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDoc.cc +++ /dev/null @@ -1,1523 +0,0 @@ -//======================================================================== -// -// PDFDoc.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005, 2006, 2008 Brad Hards <bradh@frogmouth.net> -// Copyright (C) 2005, 2007-2009, 2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2008 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2008, 2010 Pino Toscano <pino@kde.org> -// Copyright (C) 2008, 2010, 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2009 Eric Toombs <ewtoombs@uwaterloo.ca> -// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> -// Copyright (C) 2009, 2011 Axel Struebing <axel.struebing@freenet.de> -// Copyright (C) 2010, 2011 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2010 Jakub Wilk <ubanus@users.sf.net> -// Copyright (C) 2010 Ilya Gorenbein <igorenbein@finjan.com> -// Copyright (C) 2010 Srinivas Adicherla <srinivas.adicherla@geodesic.com> -// Copyright (C) 2010 Philip Lorenz <lorenzph+freedesktop@gmail.com> -// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <ctype.h> -#include <locale.h> -#include <stdio.h> -#include <errno.h> -#include <stdlib.h> -#include <stddef.h> -#include <string.h> -#include <time.h> -#ifdef _WIN32 -# include <windows.h> -#endif -#include <sys/stat.h> -#include "goo/gstrtod.h" -#include "goo/GooString.h" -#include "poppler-config.h" -#include "GlobalParams.h" -#include "Page.h" -#include "Catalog.h" -#include "Stream.h" -#include "XRef.h" -#include "Linearization.h" -#include "Link.h" -#include "OutputDev.h" -#include "Error.h" -#include "ErrorCodes.h" -#include "Lexer.h" -#include "Parser.h" -#include "SecurityHandler.h" -#include "Decrypt.h" -#ifndef DISABLE_OUTLINE -#include "Outline.h" -#endif -#include "PDFDoc.h" -#include "Hints.h" - -//------------------------------------------------------------------------ - -#define headerSearchSize 1024 // read this many bytes at beginning of - // file to look for '%PDF' -#define pdfIdLength 32 // PDF Document IDs (PermanentId, UpdateId) length - -#define linearizationSearchSize 1024 // read this many bytes at beginning of - // file to look for linearization - // dictionary - -#define xrefSearchSize 1024 // read this many bytes at end of file - // to look for 'startxref' - -//------------------------------------------------------------------------ -// PDFDoc -//------------------------------------------------------------------------ - -void PDFDoc::init() -{ - ok = gFalse; - errCode = errNone; - fileName = NULL; - file = NULL; - str = NULL; - xref = NULL; - linearization = NULL; - catalog = NULL; - hints = NULL; -#ifndef DISABLE_OUTLINE - outline = NULL; -#endif - startXRefPos = ~(Guint)0; - secHdlr = NULL; - pageCache = NULL; -} - -PDFDoc::PDFDoc() -{ - init(); -} - -PDFDoc::PDFDoc(GooString *fileNameA, GooString *ownerPassword, - GooString *userPassword, void *guiDataA) { - Object obj; - int size = 0; - - init(); - - fileName = fileNameA; - guiData = guiDataA; - - struct stat buf; - if (stat(fileName->getCString(), &buf) == 0) { - size = buf.st_size; - } - - // try to open file -#ifdef VMS - file = fopen(fileName->getCString(), "rb", "ctx=stm"); -#else - file = fopen(fileName->getCString(), "rb"); -#endif - if (file == NULL) { - // fopen() has failed. - // Keep a copy of the errno returned by fopen so that it can be - // referred to later. - fopenErrno = errno; - error(-1, "Couldn't open file '%s': %s.", fileName->getCString(), - strerror(errno)); - errCode = errOpenFile; - return; - } - - // create stream - obj.initNull(); - str = new FileStream(file, 0, gFalse, size, &obj); - - ok = setup(ownerPassword, userPassword); -} - -#ifdef _WIN32 -PDFDoc::PDFDoc(wchar_t *fileNameA, int fileNameLen, GooString *ownerPassword, - GooString *userPassword, void *guiDataA) { - OSVERSIONINFO version; - wchar_t fileName2[MAX_PATH + 1]; - Object obj; - int i; - - init(); - - guiData = guiDataA; - - //~ file name should be stored in Unicode (?) - fileName = new GooString(); - for (i = 0; i < fileNameLen; ++i) { - fileName->append((char)fileNameA[i]); - } - - // zero-terminate the file name string - for (i = 0; i < fileNameLen && i < MAX_PATH; ++i) { - fileName2[i] = fileNameA[i]; - } - fileName2[i] = 0; - - // try to open file - // NB: _wfopen is only available in NT - struct _stat buf; - int size; - version.dwOSVersionInfoSize = sizeof(version); - GetVersionEx(&version); - if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) { - if (_wstat(fileName2, &buf) == 0) { - size = buf.st_size; - } - file = _wfopen(fileName2, L"rb"); - } else { - if (_stat(fileName->getCString(), &buf) == 0) { - size = buf.st_size; - } - file = fopen(fileName->getCString(), "rb"); - } - if (!file) { - error(-1, "Couldn't open file '%s'", fileName->getCString()); - errCode = errOpenFile; - return; - } - - // create stream - obj.initNull(); - str = new FileStream(file, 0, gFalse, size, &obj); - - ok = setup(ownerPassword, userPassword); -} -#endif - -PDFDoc::PDFDoc(BaseStream *strA, GooString *ownerPassword, - GooString *userPassword, void *guiDataA) { - - init(); - guiData = guiDataA; - if (strA->getFileName()) { - fileName = strA->getFileName()->copy(); - } else { - fileName = NULL; - } - str = strA; - ok = setup(ownerPassword, userPassword); -} - -GBool PDFDoc::setup(GooString *ownerPassword, GooString *userPassword) { - str->setPos(0, -1); - if (str->getPos() < 0) - { - error(-1, "Document base stream is not seekable"); - return gFalse; - } - - str->reset(); - - // check footer - // Adobe does not seem to enforce %%EOF, so we do the same -// if (!checkFooter()) return gFalse; - - // check header - checkHeader(); - - GBool wasReconstructed = false; - - // read xref table - xref = new XRef(str, getStartXRef(), getMainXRefEntriesOffset(), &wasReconstructed); - if (!xref->isOk()) { - error(-1, "Couldn't read xref table"); - errCode = xref->getErrorCode(); - return gFalse; - } - - // check for encryption - if (!checkEncryption(ownerPassword, userPassword)) { - errCode = errEncrypted; - return gFalse; - } - - // read catalog - catalog = new Catalog(xref); - if (catalog && !catalog->isOk()) { - if (!wasReconstructed) - { - // try one more time to contruct the Catalog, maybe the problem is damaged XRef - delete catalog; - delete xref; - xref = new XRef(str, 0, 0, NULL, true); - catalog = new Catalog(xref); - } - - if (catalog && !catalog->isOk()) { - error(-1, "Couldn't read page catalog"); - errCode = errBadCatalog; - return gFalse; - } - } - - // done - return gTrue; -} - -PDFDoc::~PDFDoc() { - if (pageCache) { - for (int i = 0; i < getNumPages(); i++) { - if (pageCache[i]) { - delete pageCache[i]; - } - } - gfree(pageCache); - } - delete secHdlr; -#ifndef DISABLE_OUTLINE - if (outline) { - delete outline; - } -#endif - if (catalog) { - delete catalog; - } - if (xref) { - delete xref; - } - if (hints) { - delete hints; - } - if (linearization) { - delete linearization; - } - if (str) { - delete str; - } - if (file) { - fclose(file); - } - if (fileName) { - delete fileName; - } -} - - -// Check for a %%EOF at the end of this stream -GBool PDFDoc::checkFooter() { - // we look in the last 1024 chars because Adobe does the same - char *eof = new char[1025]; - int pos = str->getPos(); - str->setPos(1024, -1); - int i, ch; - for (i = 0; i < 1024; i++) - { - ch = str->getChar(); - if (ch == EOF) - break; - eof[i] = ch; - } - eof[i] = '\0'; - - bool found = false; - for (i = i - 5; i >= 0; i--) { - if (strncmp (&eof[i], "%%EOF", 5) == 0) { - found = true; - break; - } - } - if (!found) - { - error(-1, "Document has not the mandatory ending %%EOF"); - errCode = errDamaged; - delete[] eof; - return gFalse; - } - delete[] eof; - str->setPos(pos); - return gTrue; -} - -// Check for a PDF header on this stream. Skip past some garbage -// if necessary. -void PDFDoc::checkHeader() { - char hdrBuf[headerSearchSize+1]; - char *p; - char *tokptr; - int i; - - pdfMajorVersion = 0; - pdfMinorVersion = 0; - for (i = 0; i < headerSearchSize; ++i) { - hdrBuf[i] = str->getChar(); - } - hdrBuf[headerSearchSize] = '\0'; - for (i = 0; i < headerSearchSize - 5; ++i) { - if (!strncmp(&hdrBuf[i], "%PDF-", 5)) { - break; - } - } - if (i >= headerSearchSize - 5) { - error(-1, "May not be a PDF file (continuing anyway)"); - return; - } - str->moveStart(i); - if (!(p = strtok_r(&hdrBuf[i+5], " \t\n\r", &tokptr))) { - error(-1, "May not be a PDF file (continuing anyway)"); - return; - } - sscanf(p, "%d.%d", &pdfMajorVersion, &pdfMinorVersion); - // We don't do the version check. Don't add it back in. -} - -GBool PDFDoc::checkEncryption(GooString *ownerPassword, GooString *userPassword) { - Object encrypt; - GBool encrypted; - GBool ret; - - xref->getTrailerDict()->dictLookup("Encrypt", &encrypt); - if ((encrypted = encrypt.isDict())) { - if ((secHdlr = SecurityHandler::make(this, &encrypt))) { - if (secHdlr->checkEncryption(ownerPassword, userPassword)) { - // authorization succeeded - xref->setEncryption(secHdlr->getPermissionFlags(), - secHdlr->getOwnerPasswordOk(), - secHdlr->getFileKey(), - secHdlr->getFileKeyLength(), - secHdlr->getEncVersion(), - secHdlr->getEncRevision(), - secHdlr->getEncAlgorithm()); - ret = gTrue; - } else { - // authorization failed - ret = gFalse; - } - } else { - // couldn't find the matching security handler - ret = gFalse; - } - } else { - // document is not encrypted - ret = gTrue; - } - encrypt.free(); - return ret; -} - -void PDFDoc::displayPage(OutputDev *out, int page, - double hDPI, double vDPI, int rotate, - GBool useMediaBox, GBool crop, GBool printing, - GBool (*abortCheckCbk)(void *data), - void *abortCheckCbkData, - GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), - void *annotDisplayDecideCbkData) { - if (globalParams->getPrintCommands()) { - printf("***** page %d *****\n", page); - } - - if (getPage(page)) - getPage(page)->display(out, hDPI, vDPI, - rotate, useMediaBox, crop, printing, catalog, - abortCheckCbk, abortCheckCbkData, - annotDisplayDecideCbk, annotDisplayDecideCbkData); - -} - -void PDFDoc::displayPages(OutputDev *out, int firstPage, int lastPage, - double hDPI, double vDPI, int rotate, - GBool useMediaBox, GBool crop, GBool printing, - GBool (*abortCheckCbk)(void *data), - void *abortCheckCbkData, - GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), - void *annotDisplayDecideCbkData) { - int page; - - for (page = firstPage; page <= lastPage; ++page) { - displayPage(out, page, hDPI, vDPI, rotate, useMediaBox, crop, printing, - abortCheckCbk, abortCheckCbkData, - annotDisplayDecideCbk, annotDisplayDecideCbkData); - } -} - -void PDFDoc::displayPageSlice(OutputDev *out, int page, - double hDPI, double vDPI, int rotate, - GBool useMediaBox, GBool crop, GBool printing, - int sliceX, int sliceY, int sliceW, int sliceH, - GBool (*abortCheckCbk)(void *data), - void *abortCheckCbkData, - GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), - void *annotDisplayDecideCbkData) { - if (getPage(page)) - getPage(page)->displaySlice(out, hDPI, vDPI, - rotate, useMediaBox, crop, - sliceX, sliceY, sliceW, sliceH, - printing, catalog, - abortCheckCbk, abortCheckCbkData, - annotDisplayDecideCbk, annotDisplayDecideCbkData); -} - -Links *PDFDoc::getLinks(int page) { - Page *p = getPage(page); - if (!p) { - return new Links (NULL); - } - return p->getLinks(catalog); -} - -void PDFDoc::processLinks(OutputDev *out, int page) { - if (getPage(page)) - getPage(page)->processLinks(out, catalog); -} - -Linearization *PDFDoc::getLinearization() -{ - if (!linearization) { - linearization = new Linearization(str); - } - return linearization; -} - -GBool PDFDoc::isLinearized() { - if ((str->getLength()) && - (getLinearization()->getLength() == str->getLength())) - return gTrue; - else - return gFalse; -} - -static GBool -get_id (GooString *encodedidstring, GooString *id) { - const char *encodedid = encodedidstring->getCString(); - char pdfid[pdfIdLength + 1]; - int n; - - if (encodedidstring->getLength() != pdfIdLength / 2) - return gFalse; - - n = sprintf(pdfid, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", - encodedid[0] & 0xff, encodedid[1] & 0xff, encodedid[2] & 0xff, encodedid[3] & 0xff, - encodedid[4] & 0xff, encodedid[5] & 0xff, encodedid[6] & 0xff, encodedid[7] & 0xff, - encodedid[8] & 0xff, encodedid[9] & 0xff, encodedid[10] & 0xff, encodedid[11] & 0xff, - encodedid[12] & 0xff, encodedid[13] & 0xff, encodedid[14] & 0xff, encodedid[15] & 0xff); - if (n != pdfIdLength) - return gFalse; - - id->Set(pdfid, pdfIdLength); - return gTrue; -} - -GBool PDFDoc::getID(GooString *permanent_id, GooString *update_id) { - Object obj; - xref->getTrailerDict()->dictLookup ("ID", &obj); - - if (obj.isArray() && obj.arrayGetLength() == 2) { - Object obj2; - - if (permanent_id) { - if (obj.arrayGet(0, &obj2)->isString()) { - if (!get_id (obj2.getString(), permanent_id)) { - obj2.free(); - return gFalse; - } - } else { - error(-1, "Invalid permanent ID"); - obj2.free(); - return gFalse; - } - obj2.free(); - } - - if (update_id) { - if (obj.arrayGet(1, &obj2)->isString()) { - if (!get_id (obj2.getString(), update_id)) { - obj2.free(); - return gFalse; - } - } else { - error(-1, "Invalid update ID"); - obj2.free(); - return gFalse; - } - obj2.free(); - } - - obj.free(); - - return gTrue; - } - obj.free(); - - return gFalse; -} - -Hints *PDFDoc::getHints() -{ - if (!hints && isLinearized()) { - hints = new Hints(str, getLinearization(), getXRef(), secHdlr); - } - - return hints; -} - -int PDFDoc::savePageAs(GooString *name, int pageNo) -{ - FILE *f; - OutStream *outStr; - XRef *yRef, *countRef; - int rootNum = getXRef()->getSize() + 1; - - if (pageNo < 1 || pageNo > getNumPages()) { - error(-1, "Illegal pageNo: %d(%d)", pageNo, getNumPages() ); - return errOpenFile; - } - PDFRectangle *cropBox = NULL; - if (getCatalog()->getPage(pageNo)->isCropped()) { - cropBox = getCatalog()->getPage(pageNo)->getCropBox(); - } - replacePageDict(pageNo, - getCatalog()->getPage(pageNo)->getRotate(), - getCatalog()->getPage(pageNo)->getMediaBox(), - cropBox, NULL); - Ref *refPage = getCatalog()->getPageRef(pageNo); - Object page; - getXRef()->fetch(refPage->num, refPage->gen, &page); - - if (!(f = fopen(name->getCString(), "wb"))) { - error(-1, "Couldn't open file '%s'", name->getCString()); - return errOpenFile; - } - outStr = new FileOutStream(f,0); - - yRef = new XRef(); - countRef = new XRef(); - yRef->add(0, 65535, 0, gFalse); - writeHeader(outStr, getPDFMajorVersion(), getPDFMinorVersion()); - - // get and mark optional content groups - OCGs *ocgs = getCatalog()->getOptContentConfig(); - if (ocgs != NULL) { - Object catDict, optContentProps; - getXRef()->getCatalog(&catDict); - catDict.dictLookup("OCProperties", &optContentProps); - Dict *pageDict = optContentProps.getDict(); - markPageObjects(pageDict, yRef, countRef, 0); - catDict.free(); - optContentProps.free(); - } - - Dict *pageDict = page.getDict(); - markPageObjects(pageDict, yRef, countRef, 0); - Guint objectsCount = writePageObjects(outStr, yRef, 0); - - yRef->add(rootNum,0,outStr->getPos(),gTrue); - outStr->printf("%d 0 obj\n", rootNum); - outStr->printf("<< /Type /Catalog /Pages %d 0 R", rootNum + 1); - if (ocgs != NULL) { - Object catDict, optContentProps; - getXRef()->getCatalog(&catDict); - catDict.dictLookup("OCProperties", &optContentProps); - outStr->printf(" /OCProperties <<"); - Dict *pageDict = optContentProps.getDict(); - for (int n = 0; n < pageDict->getLength(); n++) { - if (n > 0) outStr->printf(" "); - const char *key = pageDict->getKey(n); - Object value; pageDict->getValNF(n, &value); - outStr->printf("/%s ", key); - writeObject(&value, NULL, outStr, getXRef(), 0); - value.free(); - } - outStr->printf(" >> "); - catDict.free(); - optContentProps.free(); - } - outStr->printf(">>\nendobj\n"); - objectsCount++; - - yRef->add(rootNum + 1,0,outStr->getPos(),gTrue); - outStr->printf("%d 0 obj\n", rootNum + 1); - outStr->printf("<< /Type /Pages /Kids [ %d 0 R ] /Count 1 >>\n", rootNum + 2); - outStr->printf("endobj\n"); - objectsCount++; - - yRef->add(rootNum + 2,0,outStr->getPos(),gTrue); - outStr->printf("%d 0 obj\n", rootNum + 2); - outStr->printf("<< "); - for (int n = 0; n < pageDict->getLength(); n++) { - if (n > 0) outStr->printf(" "); - const char *key = pageDict->getKey(n); - Object value; pageDict->getValNF(n, &value); - if (strcmp(key, "Parent") == 0) { - outStr->printf("/Parent %d 0 R", rootNum + 1); - } else { - outStr->printf("/%s ", key); - writeObject(&value, NULL, outStr, getXRef(), 0); - } - value.free(); - } - outStr->printf(" >>\nendobj\n"); - objectsCount++; - page.free(); - - Guint uxrefOffset = outStr->getPos(); - yRef->writeToFile(outStr, gFalse /* do not write unnecessary entries */); - - Ref ref; - ref.num = rootNum; - ref.gen = 0; - writeTrailer(uxrefOffset, objectsCount, outStr, gFalse, 0, &ref, getXRef(), name->getCString(), outStr->getPos()); - - outStr->close(); - fclose(f); - delete yRef; - delete countRef; - - return errNone; -} - -int PDFDoc::saveAs(GooString *name, PDFWriteMode mode) { - FILE *f; - OutStream *outStr; - int res; - - if (!(f = fopen(name->getCString(), "wb"))) { - error(-1, "Couldn't open file '%s'", name->getCString()); - return errOpenFile; - } - outStr = new FileOutStream(f,0); - res = saveAs(outStr, mode); - delete outStr; - fclose(f); - return res; -} - -int PDFDoc::saveAs(OutStream *outStr, PDFWriteMode mode) { - - // we don't support files with Encrypt at the moment - Object obj; - xref->getTrailerDict()->getDict()->lookupNF("Encrypt", &obj); - if (!obj.isNull()) - { - obj.free(); - return errEncrypted; - } - obj.free(); - - if (mode == writeForceRewrite) { - saveCompleteRewrite(outStr); - } else if (mode == writeForceIncremental) { - saveIncrementalUpdate(outStr); - } else { // let poppler decide - // find if we have updated objects - GBool updated = gFalse; - for(int i=0; i<xref->getNumObjects(); i++) { - if (xref->getEntry(i)->updated) { - updated = gTrue; - break; - } - } - if(updated) { - saveIncrementalUpdate(outStr); - } else { - // simply copy the original file - saveWithoutChangesAs (outStr); - } - } - - return errNone; -} - -int PDFDoc::saveWithoutChangesAs(GooString *name) { - FILE *f; - OutStream *outStr; - int res; - - if (!(f = fopen(name->getCString(), "wb"))) { - error(-1, "Couldn't open file '%s'", name->getCString()); - return errOpenFile; - } - - outStr = new FileOutStream(f,0); - res = saveWithoutChangesAs(outStr); - delete outStr; - - fclose(f); - - return res; -} - -int PDFDoc::saveWithoutChangesAs(OutStream *outStr) { - int c; - - str->reset(); - while ((c = str->getChar()) != EOF) { - outStr->put(c); - } - str->close(); - - return errNone; -} - -void PDFDoc::saveIncrementalUpdate (OutStream* outStr) -{ - XRef *uxref; - int c; - //copy the original file - str->reset(); - while ((c = str->getChar()) != EOF) { - outStr->put(c); - } - str->close(); - - uxref = new XRef(); - uxref->add(0, 65535, 0, gFalse); - for(int i=0; i<xref->getNumObjects(); i++) { - if ((xref->getEntry(i)->type == xrefEntryFree) && - (xref->getEntry(i)->gen == 0)) //we skip the irrelevant free objects - continue; - - if (xref->getEntry(i)->updated) { //we have an updated object - Object obj1; - Ref ref; - ref.num = i; - ref.gen = xref->getEntry(i)->type == xrefEntryCompressed ? 0 : xref->getEntry(i)->gen; - xref->fetch(ref.num, ref.gen, &obj1); - Guint offset = writeObject(&obj1, &ref, outStr); - uxref->add(ref.num, ref.gen, offset, gTrue); - obj1.free(); - } - } - if (uxref->getSize() == 0) { //we have nothing to update - delete uxref; - return; - } - - Guint uxrefOffset = outStr->getPos(); - uxref->writeToFile(outStr, gFalse /* do not write unnecessary entries */); - - writeTrailer(uxrefOffset, xref->getSize(), outStr, gTrue); - - delete uxref; -} - -void PDFDoc::saveCompleteRewrite (OutStream* outStr) -{ - outStr->printf("%%PDF-%d.%d\r\n",pdfMajorVersion,pdfMinorVersion); - XRef *uxref = new XRef(); - uxref->add(0, 65535, 0, gFalse); - for(int i=0; i<xref->getNumObjects(); i++) { - Object obj1; - Ref ref; - XRefEntryType type = xref->getEntry(i)->type; - if (type == xrefEntryFree) { - ref.num = i; - ref.gen = xref->getEntry(i)->gen; - /* the XRef class adds a lot of irrelevant free entries, we only want the significant one - and we don't want the one with num=0 because it has already been added (gen = 65535)*/ - if (ref.gen > 0 && ref.num > 0) - uxref->add(ref.num, ref.gen, 0, gFalse); - } else if (type == xrefEntryUncompressed){ - ref.num = i; - ref.gen = xref->getEntry(i)->gen; - xref->fetch(ref.num, ref.gen, &obj1); - Guint offset = writeObject(&obj1, &ref, outStr); - uxref->add(ref.num, ref.gen, offset, gTrue); - obj1.free(); - } else if (type == xrefEntryCompressed) { - ref.num = i; - ref.gen = 0; //compressed entries have gen == 0 - xref->fetch(ref.num, ref.gen, &obj1); - Guint offset = writeObject(&obj1, &ref, outStr); - uxref->add(ref.num, ref.gen, offset, gTrue); - obj1.free(); - } - } - Guint uxrefOffset = outStr->getPos(); - uxref->writeToFile(outStr, gTrue /* write all entries */); - - writeTrailer(uxrefOffset, uxref->getSize(), outStr, gFalse); - - - delete uxref; - -} - -void PDFDoc::writeDictionnary (Dict* dict, OutStream* outStr, XRef *xRef, Guint numOffset) -{ - Object obj1; - outStr->printf("<<"); - for (int i=0; i<dict->getLength(); i++) { - GooString keyName(dict->getKey(i)); - GooString *keyNameToPrint = keyName.sanitizedName(gFalse /* non ps mode */); - outStr->printf("/%s ", keyNameToPrint->getCString()); - delete keyNameToPrint; - writeObject(dict->getValNF(i, &obj1), NULL, outStr, xRef, numOffset); - obj1.free(); - } - outStr->printf(">> "); -} - -void PDFDoc::writeStream (Stream* str, OutStream* outStr) -{ - outStr->printf("stream\r\n"); - str->reset(); - for (int c=str->getChar(); c!= EOF; c=str->getChar()) { - outStr->printf("%c", c); - } - outStr->printf("\r\nendstream\r\n"); -} - -void PDFDoc::writeRawStream (Stream* str, OutStream* outStr) -{ - Object obj1; - str->getDict()->lookup("Length", &obj1); - if (!obj1.isInt()) { - error (-1, "PDFDoc::writeRawStream, no Length in stream dict"); - return; - } - - const int length = obj1.getInt(); - obj1.free(); - - outStr->printf("stream\r\n"); - str->unfilteredReset(); - for (int i=0; i<length; i++) { - int c = str->getUnfilteredChar(); - outStr->printf("%c", c); - } - str->reset(); - outStr->printf("\r\nendstream\r\n"); -} - -void PDFDoc::writeString (GooString* s, OutStream* outStr) -{ - if (s->hasUnicodeMarker()) { - //unicode string don't necessary end with \0 - const char* c = s->getCString(); - outStr->printf("("); - for(int i=0; i<s->getLength(); i++) { - char unescaped = *(c+i)&0x000000ff; - //escape if needed - if (unescaped == '(' || unescaped == ')' || unescaped == '\\') - outStr->printf("%c", '\\'); - outStr->printf("%c", unescaped); - } - outStr->printf(") "); - } else { - const char* c = s->getCString(); - outStr->printf("("); - for(int i=0; i<s->getLength(); i++) { - char unescaped = *(c+i)&0x000000ff; - //escape if needed - if (unescaped == '\r') - outStr->printf("\\r"); - else if (unescaped == '\n') - outStr->printf("\\n"); - else { - if (unescaped == '(' || unescaped == ')' || unescaped == '\\') { - outStr->printf("%c", '\\'); - } - outStr->printf("%c", unescaped); - } - } - outStr->printf(") "); - } -} - -Guint PDFDoc::writeObject (Object* obj, Ref* ref, OutStream* outStr, XRef *xRef, Guint numOffset) -{ - Array *array; - Object obj1; - Guint offset = outStr->getPos(); - int tmp; - - if(ref) - outStr->printf("%i %i obj ", ref->num, ref->gen); - - switch (obj->getType()) { - case objBool: - outStr->printf("%s ", obj->getBool()?"true":"false"); - break; - case objInt: - outStr->printf("%i ", obj->getInt()); - break; - case objReal: - { - GooString s; - s.appendf("{0:.10g}", obj->getReal()); - outStr->printf("%s ", s.getCString()); - break; - } - case objString: - writeString(obj->getString(), outStr); - break; - case objName: - { - GooString name(obj->getName()); - GooString *nameToPrint = name.sanitizedName(gFalse /* non ps mode */); - outStr->printf("/%s ", nameToPrint->getCString()); - delete nameToPrint; - break; - } - case objNull: - outStr->printf( "null "); - break; - case objArray: - array = obj->getArray(); - outStr->printf("["); - for (int i=0; i<array->getLength(); i++) { - writeObject(array->getNF(i, &obj1), NULL,outStr, xRef, numOffset); - obj1.free(); - } - outStr->printf("] "); - break; - case objDict: - writeDictionnary (obj->getDict(),outStr, xRef, numOffset); - break; - case objStream: - { - //We can't modify stream with the current implementation (no write functions in Stream API) - // => the only type of streams which that have been modified are internal streams (=strWeird) - Stream *stream = obj->getStream(); - if (stream->getKind() == strWeird) { - //we write the stream unencoded => TODO: write stream encoder - stream->reset(); - //recalculate stream length - tmp = 0; - for (int c=stream->getChar(); c!=EOF; c=stream->getChar()) { - tmp++; - } - obj1.initInt(tmp); - stream->getDict()->set("Length", &obj1); - - //Remove Stream encoding - stream->getDict()->remove("Filter"); - stream->getDict()->remove("DecodeParms"); - - writeDictionnary (stream->getDict(),outStr, xRef, numOffset); - writeStream (stream,outStr); - obj1.free(); - } else { - //raw stream copy - FilterStream *fs = dynamic_cast<FilterStream*>(stream); - if (fs) { - BaseStream *bs = fs->getBaseStream(); - if (bs) { - Guint streamEnd; - if (xRef->getStreamEnd(bs->getStart(), &streamEnd)) { - Object val; - val.initInt(streamEnd - bs->getStart()); - stream->getDict()->set("Length", &val); - } - } - } - writeDictionnary (stream->getDict(), outStr, xRef, numOffset); - writeRawStream (stream, outStr); - } - break; - } - case objRef: - outStr->printf("%i %i R ", obj->getRef().num + numOffset, obj->getRef().gen); - break; - case objCmd: - outStr->printf("%s\n", obj->getCmd()); - break; - case objError: - outStr->printf("error\r\n"); - break; - case objEOF: - outStr->printf("eof\r\n"); - break; - case objNone: - outStr->printf("none\r\n"); - break; - default: - error(-1,"Unhandled objType : %i, please report a bug with a testcase\r\n", obj->getType()); - break; - } - if (ref) - outStr->printf("endobj\r\n"); - return offset; -} - -void PDFDoc::writeTrailer(Guint uxrefOffset, int uxrefSize, - OutStream* outStr, GBool incrUpdate, - Guint startxRef, Ref *root, XRef *xRef, const char *fileName, - Guint fileSize) -{ - Dict *trailerDict = new Dict(xRef); - Object obj1; - obj1.initInt(uxrefSize); - trailerDict->set("Size", &obj1); - obj1.free(); - - - //build a new ID, as recommended in the reference, uses: - // - current time - // - file name - // - file size - // - values of entry in information dictionnary - GooString message; - char buffer[256]; - sprintf(buffer, "%i", (int)time(NULL)); - message.append(buffer); - message.append(fileName); - - sprintf(buffer, "%i", fileSize); - message.append(buffer); - - //info dict -- only use text string - if (!xRef->getTrailerDict()->isNone() && xRef->getDocInfo(&obj1)->isDict()) { - for(int i=0; i<obj1.getDict()->getLength(); i++) { - Object obj2; - obj1.getDict()->getVal(i, &obj2); - if (obj2.isString()) { - message.append(obj2.getString()); - } - obj2.free(); - } - } - obj1.free(); - - //calculate md5 digest - Guchar digest[16]; - Decrypt::md5((Guchar*)message.getCString(), message.getLength(), digest); - obj1.initString(new GooString((const char*)digest, 16)); - - //create ID array - Object obj2,obj3,obj5; - obj2.initArray(xRef); - - if (incrUpdate) { - Object obj4; - //only update the second part of the array - xRef->getTrailerDict()->getDict()->lookup("ID", &obj4); - if (!obj4.isArray()) { - error(-1, "PDFDoc::writeTrailer original file's ID entry isn't an array. Trying to continue"); - } else { - //Get the first part of the ID - obj4.arrayGet(0,&obj3); - - obj2.arrayAdd(&obj3); - obj2.arrayAdd(&obj1); - trailerDict->set("ID", &obj2); - } - obj4.free(); - } else { - //new file => same values for the two identifiers - obj2.arrayAdd(&obj1); - obj1.initString(new GooString((const char*)digest, 16)); - obj2.arrayAdd(&obj1); - trailerDict->set("ID", &obj2); - } - - obj1.initRef(root->num, root->gen); - trailerDict->set("Root", &obj1); - - if (incrUpdate) { - obj1.initInt(startxRef); - trailerDict->set("Prev", &obj1); - } - - if (!xRef->getTrailerDict()->isNone()) { - xRef->getDocInfoNF(&obj5); - if (!obj5.isNull()) { - trailerDict->set("Info", &obj5); - } - } - - outStr->printf( "trailer\r\n"); - writeDictionnary(trailerDict, outStr, xRef, 0); - outStr->printf( "\r\nstartxref\r\n"); - outStr->printf( "%i\r\n", uxrefOffset); - outStr->printf( "%%%%EOF\r\n"); - - delete trailerDict; -} - -void PDFDoc::writeTrailer(Guint uxrefOffset, int uxrefSize, OutStream* outStr, GBool incrUpdate) -{ - char *fileNameA; - if (fileName) - fileNameA = fileName->getCString(); - else - fileNameA = "streamwithoutfilename.pdf"; - // file size - unsigned int fileSize = 0; - int c; - str->reset(); - while ((c = str->getChar()) != EOF) { - fileSize++; - } - str->close(); - Ref ref; - ref.num = getXRef()->getRootNum(); - ref.gen = getXRef()->getRootGen(); - writeTrailer(uxrefOffset, uxrefSize, outStr, incrUpdate, getStartXRef(), &ref, getXRef(), fileNameA, fileSize); -} - -void PDFDoc::writeHeader(OutStream *outStr, int major, int minor) -{ - outStr->printf("%%PDF-%d.%d\n", major, minor); - outStr->printf("%%\xE2\xE3\xCF\xD3\n"); -} - -void PDFDoc::markDictionnary (Dict* dict, XRef * xRef, XRef *countRef, Guint numOffset) -{ - Object obj1; - for (int i=0; i<dict->getLength(); i++) { - markObject(dict->getValNF(i, &obj1), xRef, countRef, numOffset); - obj1.free(); - } -} - -void PDFDoc::markObject (Object* obj, XRef *xRef, XRef *countRef, Guint numOffset) -{ - Array *array; - Object obj1; - - switch (obj->getType()) { - case objArray: - array = obj->getArray(); - for (int i=0; i<array->getLength(); i++) { - markObject(array->getNF(i, &obj1), xRef, countRef, numOffset); - obj1.free(); - } - break; - case objDict: - markDictionnary (obj->getDict(), xRef, countRef, numOffset); - break; - case objStream: - { - Stream *stream = obj->getStream(); - markDictionnary (stream->getDict(), xRef, countRef, numOffset); - } - break; - case objRef: - { - if (obj->getRef().num + (int) numOffset >= xRef->getNumObjects() || xRef->getEntry(obj->getRef().num + numOffset)->type == xrefEntryFree) { - if (getXRef()->getEntry(obj->getRef().num)->type == xrefEntryFree) { - return; // already marked as free => should be replaced - } - xRef->add(obj->getRef().num + numOffset, obj->getRef().gen, 0, gTrue); - if (getXRef()->getEntry(obj->getRef().num)->type == xrefEntryCompressed) { - xRef->getEntry(obj->getRef().num + numOffset)->type = xrefEntryCompressed; - } - } - if (obj->getRef().num + (int) numOffset >= countRef->getNumObjects() || - countRef->getEntry(obj->getRef().num + numOffset)->type == xrefEntryFree) - { - countRef->add(obj->getRef().num + numOffset, 1, 0, gTrue); - } else { - XRefEntry *entry = countRef->getEntry(obj->getRef().num + numOffset); - entry->gen++; - } - Object obj1; - getXRef()->fetch(obj->getRef().num, obj->getRef().gen, &obj1); - markObject(&obj1, xRef, countRef, numOffset); - obj1.free(); - } - break; - default: - break; - } -} - -void PDFDoc::replacePageDict(int pageNo, int rotate, - PDFRectangle *mediaBox, - PDFRectangle *cropBox, Object *pageCTM) -{ - Ref *refPage = getCatalog()->getPageRef(pageNo); - Object page; - getXRef()->fetch(refPage->num, refPage->gen, &page); - Dict *pageDict = page.getDict(); - pageDict->remove("MediaBox"); - pageDict->remove("CropBox"); - pageDict->remove("ArtBox"); - pageDict->remove("BleedBox"); - pageDict->remove("TrimBox"); - pageDict->remove("Rotate"); - Object *mediaBoxObj = new Object(); - mediaBoxObj->initArray(getXRef()); - Object *murx = new Object(); - murx->initReal(mediaBox->x1); - Object *mury = new Object(); - mury->initReal(mediaBox->y1); - Object *mllx = new Object(); - mllx->initReal(mediaBox->x2); - Object *mlly = new Object(); - mlly->initReal(mediaBox->y2); - mediaBoxObj->arrayAdd(murx); - mediaBoxObj->arrayAdd(mury); - mediaBoxObj->arrayAdd(mllx); - mediaBoxObj->arrayAdd(mlly); - pageDict->add(copyString("MediaBox"), mediaBoxObj); - if (cropBox != NULL) { - Object *cropBoxObj = new Object(); - cropBoxObj->initArray(getXRef()); - Object *curx = new Object(); - curx->initReal(cropBox->x1); - Object *cury = new Object(); - cury->initReal(cropBox->y1); - Object *cllx = new Object(); - cllx->initReal(cropBox->x2); - Object *clly = new Object(); - clly->initReal(cropBox->y2); - cropBoxObj->arrayAdd(curx); - cropBoxObj->arrayAdd(cury); - cropBoxObj->arrayAdd(cllx); - cropBoxObj->arrayAdd(clly); - pageDict->add(copyString("CropBox"), cropBoxObj); - } - Object *rotateObj = new Object(); - rotateObj->initInt(rotate); - pageDict->add(copyString("Rotate"), rotateObj); - if (pageCTM != NULL) { - Object *contents = new Object(); - Ref cmRef = getXRef()->addIndirectObject(pageCTM); - Object *ref = new Object(); - ref->initRef(cmRef.num, cmRef.gen); - pageDict->lookupNF("Contents", contents); - Object *newContents = new Object(); - newContents->initArray(getXRef()); - if (contents->getType() == objRef) { - newContents->arrayAdd(ref); - newContents->arrayAdd(contents); - } else { - newContents->arrayAdd(ref); - for (int i = 0; i < contents->arrayGetLength(); i++) { - Object *contentEle = new Object(); - contents->arrayGetNF(i, contentEle); - newContents->arrayAdd(contentEle); - } - } - pageDict->remove("Contents"); - pageDict->add(copyString("Contents"), newContents); - } - getXRef()->setModifiedObject(&page, *refPage); - page.free(); -} - -void PDFDoc::markPageObjects(Dict *pageDict, XRef *xRef, XRef *countRef, Guint numOffset) -{ - for (int n = 0; n < pageDict->getLength(); n++) { - const char *key = pageDict->getKey(n); - Object value; pageDict->getValNF(n, &value); - if (strcmp(key, "Parent") != 0) { - markObject(&value, xRef, countRef, numOffset); - } - value.free(); - } -} - -Guint PDFDoc::writePageObjects(OutStream *outStr, XRef *xRef, Guint numOffset) -{ - Guint objectsCount = 0; //count the number of objects in the XRef(s) - - for (int n = numOffset; n < xRef->getNumObjects(); n++) { - if (xRef->getEntry(n)->type != xrefEntryFree) { - Object obj; - Ref ref; - ref.num = n; - ref.gen = xRef->getEntry(n)->gen; - objectsCount++; - getXRef()->fetch(ref.num - numOffset, ref.gen, &obj); - Guint offset = writeObject(&obj, &ref, outStr, xRef, numOffset); - xRef->add(ref.num, ref.gen, offset, gTrue); - obj.free(); - } - } - return objectsCount; -} - -#ifndef DISABLE_OUTLINE -Outline *PDFDoc::getOutline() -{ - if (!outline) { - // read outline - outline = new Outline(catalog->getOutline(), xref); - } - - return outline; -} -#endif - -PDFDoc *PDFDoc::ErrorPDFDoc(int errorCode, GooString *fileNameA) -{ - PDFDoc *doc = new PDFDoc(); - doc->errCode = errorCode; - doc->fileName = fileNameA; - - return doc; -} - -Guint PDFDoc::strToUnsigned(char *s) { - Guint x; - char *p; - int i; - - x = 0; - for (p = s, i = 0; *p && isdigit(*p) && i < 10; ++p, ++i) { - x = 10 * x + (*p - '0'); - } - return x; -} - -// Read the 'startxref' position. -Guint PDFDoc::getStartXRef() -{ - if (startXRefPos == ~(Guint)0) { - - if (isLinearized()) { - char buf[linearizationSearchSize+1]; - int c, n, i; - - str->setPos(0); - for (n = 0; n < linearizationSearchSize; ++n) { - if ((c = str->getChar()) == EOF) { - break; - } - buf[n] = c; - } - buf[n] = '\0'; - - // find end of first obj (linearization dictionary) - startXRefPos = 0; - for (i = 0; i < n; i++) { - if (!strncmp("endobj", &buf[i], 6)) { - i += 6; - //skip whitespace - while (buf[i] && Lexer::isSpace(buf[i])) ++i; - startXRefPos = i; - break; - } - } - } else { - char buf[xrefSearchSize+1]; - char *p; - int c, n, i; - - // read last xrefSearchSize bytes - str->setPos(xrefSearchSize, -1); - for (n = 0; n < xrefSearchSize; ++n) { - if ((c = str->getChar()) == EOF) { - break; - } - buf[n] = c; - } - buf[n] = '\0'; - - // find startxref - for (i = n - 9; i >= 0; --i) { - if (!strncmp(&buf[i], "startxref", 9)) { - break; - } - } - if (i < 0) { - startXRefPos = 0; - } else { - for (p = &buf[i+9]; isspace(*p); ++p) ; - startXRefPos = strToUnsigned(p); - } - } - - } - - return startXRefPos; -} - -Guint PDFDoc::getMainXRefEntriesOffset() -{ - Guint mainXRefEntriesOffset = 0; - - if (isLinearized()) { - mainXRefEntriesOffset = getLinearization()->getMainXRefEntriesOffset(); - } - - return mainXRefEntriesOffset; -} - -int PDFDoc::getNumPages() -{ - if (isLinearized()) { - int n; - if ((n = getLinearization()->getNumPages())) { - return n; - } - } - - return catalog->getNumPages(); -} - -Page *PDFDoc::parsePage(int page) -{ - Page *p = NULL; - Object obj; - Ref pageRef; - Dict *pageDict; - - pageRef.num = getHints()->getPageObjectNum(page); - if (!pageRef.num) { - error(-1, "Failed to get object num from hint tables for page %d", page); - return NULL; - } - - // check for bogus ref - this can happen in corrupted PDF files - if (pageRef.num < 0 || pageRef.num >= xref->getNumObjects()) { - error(-1, "Invalid object num (%d) for page %d", pageRef.num, page); - return NULL; - } - - pageRef.gen = xref->getEntry(pageRef.num)->gen; - xref->fetch(pageRef.num, pageRef.gen, &obj); - if (!obj.isDict("Page")) { - obj.free(); - error(-1, "Object (%d %d) is not a pageDict", pageRef.num, pageRef.gen); - return NULL; - } - pageDict = obj.getDict(); - - p = new Page(xref, page, pageDict, pageRef, - new PageAttrs(NULL, pageDict), catalog->getForm()); - obj.free(); - - return p; -} - -Page *PDFDoc::getPage(int page) -{ - if ((page < 1) || page > getNumPages()) return NULL; - - if (isLinearized()) { - if (!pageCache) { - pageCache = (Page **) gmallocn(getNumPages(), sizeof(Page *)); - for (int i = 0; i < getNumPages(); i++) { - pageCache[i] = NULL; - } - } - if (!pageCache[page-1]) { - pageCache[page-1] = parsePage(page); - } - if (pageCache[page-1]) { - return pageCache[page-1]; - } else { - error(-1, "Failed parsing page %d using hint tables", page); - } - } - - return catalog->getPage(page); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDoc.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDoc.h deleted file mode 100644 index 92cee78c5f2..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDoc.h +++ /dev/null @@ -1,308 +0,0 @@ -//======================================================================== -// -// PDFDoc.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005, 2006, 2008 Brad Hards <bradh@frogmouth.net> -// Copyright (C) 2005, 2009 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2008 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2008 Pino Toscano <pino@kde.org> -// Copyright (C) 2008 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2009 Eric Toombs <ewtoombs@uwaterloo.ca> -// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> -// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2010 Srinivas Adicherla <srinivas.adicherla@geodesic.com> -// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef PDFDOC_H -#define PDFDOC_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include <stdio.h> -#include "XRef.h" -#include "Catalog.h" -#include "Page.h" -#include "Annot.h" -#include "OptionalContent.h" - -class GooString; -class BaseStream; -class OutputDev; -class Links; -class LinkAction; -class LinkDest; -class Outline; -class Linearization; -class SecurityHandler; -class Hints; - -enum PDFWriteMode { - writeStandard, - writeForceRewrite, - writeForceIncremental -}; - -//------------------------------------------------------------------------ -// PDFDoc -//------------------------------------------------------------------------ - -class PDFDoc { -public: - - PDFDoc(GooString *fileNameA, GooString *ownerPassword = NULL, - GooString *userPassword = NULL, void *guiDataA = NULL); - -#ifdef _WIN32 - PDFDoc(wchar_t *fileNameA, int fileNameLen, GooString *ownerPassword = NULL, - GooString *userPassword = NULL, void *guiDataA = NULL); -#endif - - PDFDoc(BaseStream *strA, GooString *ownerPassword = NULL, - GooString *userPassword = NULL, void *guiDataA = NULL); - ~PDFDoc(); - - static PDFDoc *ErrorPDFDoc(int errorCode, GooString *fileNameA = NULL); - - // Was PDF document successfully opened? - GBool isOk() { return ok; } - - // Get the error code (if isOk() returns false). - int getErrorCode() { return errCode; } - - // Get the error code returned by fopen() (if getErrorCode() == - // errOpenFile). - int getFopenErrno() { return fopenErrno; } - - // Get file name. - GooString *getFileName() { return fileName; } - - // Get the linearization table. - Linearization *getLinearization(); - - // Get the xref table. - XRef *getXRef() { return xref; } - - // Get catalog. - Catalog *getCatalog() { return catalog; } - - // Get optional content configuration - OCGs *getOptContentConfig() { return catalog->getOptContentConfig(); } - - // Get base stream. - BaseStream *getBaseStream() { return str; } - - // Get page parameters. - double getPageMediaWidth(int page) - { return getPage(page) ? getPage(page)->getMediaWidth() : 0.0 ; } - double getPageMediaHeight(int page) - { return getPage(page) ? getPage(page)->getMediaHeight() : 0.0 ; } - double getPageCropWidth(int page) - { return getPage(page) ? getPage(page)->getCropWidth() : 0.0 ; } - double getPageCropHeight(int page) - { return getPage(page) ? getPage(page)->getCropHeight() : 0.0 ; } - int getPageRotate(int page) - { return getPage(page) ? getPage(page)->getRotate() : 0 ; } - - // Get number of pages. - int getNumPages(); - - // Return the contents of the metadata stream, or NULL if there is - // no metadata. - GooString *readMetadata() { return catalog->readMetadata(); } - - // Return the structure tree root object. - Object *getStructTreeRoot() { return catalog->getStructTreeRoot(); } - - // Get page. - Page *getPage(int page); - - // Display a page. - void displayPage(OutputDev *out, int page, - double hDPI, double vDPI, int rotate, - GBool useMediaBox, GBool crop, GBool printing, - GBool (*abortCheckCbk)(void *data) = NULL, - void *abortCheckCbkData = NULL, - GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL, - void *annotDisplayDecideCbkData = NULL); - - // Display a range of pages. - void displayPages(OutputDev *out, int firstPage, int lastPage, - double hDPI, double vDPI, int rotate, - GBool useMediaBox, GBool crop, GBool printing, - GBool (*abortCheckCbk)(void *data) = NULL, - void *abortCheckCbkData = NULL, - GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL, - void *annotDisplayDecideCbkData = NULL); - - // Display part of a page. - void displayPageSlice(OutputDev *out, int page, - double hDPI, double vDPI, int rotate, - GBool useMediaBox, GBool crop, GBool printing, - int sliceX, int sliceY, int sliceW, int sliceH, - GBool (*abortCheckCbk)(void *data) = NULL, - void *abortCheckCbkData = NULL, - GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL, - void *annotDisplayDecideCbkData = NULL); - - // Find a page, given its object ID. Returns page number, or 0 if - // not found. - int findPage(int num, int gen) { return catalog->findPage(num, gen); } - - // Returns the links for the current page, transferring ownership to - // the caller. - Links *getLinks(int page); - - // Find a named destination. Returns the link destination, or - // NULL if <name> is not a destination. - LinkDest *findDest(GooString *name) - { return catalog->findDest(name); } - - // Process the links for a page. - void processLinks(OutputDev *out, int page); - - -#ifndef DISABLE_OUTLINE - // Return the outline object. - Outline *getOutline(); -#endif - - // Is the file encrypted? - GBool isEncrypted() { return xref->isEncrypted(); } - - // Check various permissions. - GBool okToPrint(GBool ignoreOwnerPW = gFalse) - { return xref->okToPrint(ignoreOwnerPW); } - GBool okToPrintHighRes(GBool ignoreOwnerPW = gFalse) - { return xref->okToPrintHighRes(ignoreOwnerPW); } - GBool okToChange(GBool ignoreOwnerPW = gFalse) - { return xref->okToChange(ignoreOwnerPW); } - GBool okToCopy(GBool ignoreOwnerPW = gFalse) - { return xref->okToCopy(ignoreOwnerPW); } - GBool okToAddNotes(GBool ignoreOwnerPW = gFalse) - { return xref->okToAddNotes(ignoreOwnerPW); } - GBool okToFillForm(GBool ignoreOwnerPW = gFalse) - { return xref->okToFillForm(ignoreOwnerPW); } - GBool okToAccessibility(GBool ignoreOwnerPW = gFalse) - { return xref->okToAccessibility(ignoreOwnerPW); } - GBool okToAssemble(GBool ignoreOwnerPW = gFalse) - { return xref->okToAssemble(ignoreOwnerPW); } - - - // Is this document linearized? - GBool isLinearized(); - - // Return the document's Info dictionary (if any). - Object *getDocInfo(Object *obj) { return xref->getDocInfo(obj); } - Object *getDocInfoNF(Object *obj) { return xref->getDocInfoNF(obj); } - - // Return the PDF version specified by the file. - int getPDFMajorVersion() { return pdfMajorVersion; } - int getPDFMinorVersion() { return pdfMinorVersion; } - - //Return the PDF ID in the trailer dictionary (if any). - GBool getID(GooString *permanent_id, GooString *update_id); - - // Save one page with another name. - int savePageAs(GooString *name, int pageNo); - // Save this file with another name. - int saveAs(GooString *name, PDFWriteMode mode=writeStandard); - // Save this file in the given output stream. - int saveAs(OutStream *outStr, PDFWriteMode mode=writeStandard); - // Save this file with another name without saving changes - int saveWithoutChangesAs(GooString *name); - // Save this file in the given output stream without saving changes - int saveWithoutChangesAs(OutStream *outStr); - - // Return a pointer to the GUI (XPDFCore or WinPDFCore object). - void *getGUIData() { return guiData; } - - // rewrite pageDict with MediaBox, CropBox and new page CTM - void replacePageDict(int pageNo, int rotate, PDFRectangle *mediaBox, PDFRectangle *cropBox, Object *pageCTM); - void markPageObjects(Dict *pageDict, XRef *xRef, XRef *countRef, Guint numOffset); - // write all objects used by pageDict to outStr - Guint writePageObjects(OutStream *outStr, XRef *xRef, Guint numOffset); - static Guint writeObject (Object *obj, Ref *ref, OutStream* outStr, XRef *xref, Guint numOffset); - static void writeHeader(OutStream *outStr, int major, int minor); - static void writeTrailer (Guint uxrefOffset, int uxrefSize, OutStream* outStr, GBool incrUpdate, - Guint startxRef, Ref *root, XRef *xRef, const char *fileName, Guint fileSize); - -private: - // insert referenced objects in XRef - void markDictionnary (Dict* dict, XRef *xRef, XRef *countRef, Guint numOffset); - void markObject (Object *obj, XRef *xRef, XRef *countRef, Guint numOffset); - static void writeDictionnary (Dict* dict, OutStream* outStr, XRef *xRef, Guint numOffset); - - // Add object to current file stream and return the offset of the beginning of the object - Guint writeObject (Object *obj, Ref *ref, OutStream* outStr) - { return writeObject(obj, ref, outStr, getXRef(), 0); } - void writeDictionnary (Dict* dict, OutStream* outStr) - { writeDictionnary(dict, outStr, getXRef(), 0); } - static void writeStream (Stream* str, OutStream* outStr); - static void writeRawStream (Stream* str, OutStream* outStr); - void writeTrailer (Guint uxrefOffset, int uxrefSize, OutStream* outStr, GBool incrUpdate); - static void writeString (GooString* s, OutStream* outStr); - void saveIncrementalUpdate (OutStream* outStr); - void saveCompleteRewrite (OutStream* outStr); - - Page *parsePage(int page); - - // Get hints. - Hints *getHints(); - - PDFDoc(); - void init(); - GBool setup(GooString *ownerPassword, GooString *userPassword); - GBool checkFooter(); - void checkHeader(); - GBool checkEncryption(GooString *ownerPassword, GooString *userPassword); - // Get the offset of the start xref table. - Guint getStartXRef(); - // Get the offset of the entries in the main XRef table of a - // linearized document (0 for non linearized documents). - Guint getMainXRefEntriesOffset(); - Guint strToUnsigned(char *s); - - GooString *fileName; - FILE *file; - BaseStream *str; - void *guiData; - int pdfMajorVersion; - int pdfMinorVersion; - Linearization *linearization; - XRef *xref; - SecurityHandler *secHdlr; - Catalog *catalog; - Hints *hints; -#ifndef DISABLE_OUTLINE - Outline *outline; -#endif - Page **pageCache; - - GBool ok; - int errCode; - //If there is an error opening the PDF file with fopen() in the constructor, - //then the POSIX errno will be here. - int fopenErrno; - - Guint startXRefPos; // offset of last xref table -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocBuilder.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocBuilder.h deleted file mode 100644 index d6eccf5487a..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocBuilder.h +++ /dev/null @@ -1,42 +0,0 @@ -//======================================================================== -// -// PDFDocBuilder.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#ifndef PDFDOCBUILDER_H -#define PDFDOCBUILDER_H - -#include "PDFDoc.h" -class GooString; - -//------------------------------------------------------------------------ -// PDFDocBuilder -// -// PDFDocBuilder is an abstract class that specifies the interface for -// constructing PDFDocs. -//------------------------------------------------------------------------ - -class PDFDocBuilder { - -public: - - virtual ~PDFDocBuilder() {}; - - // Builds a new PDFDoc. Returns a PDFDoc. You should check this PDFDoc - // with PDFDoc::isOk() for failures. - // The caller is responsible for deleting ownerPassword, userPassWord and guiData. - virtual PDFDoc *buildPDFDoc(const GooString &uri, GooString *ownerPassword = NULL, - GooString *userPassword = NULL, void *guiDataA = NULL) = 0; - - // Returns gTrue if the builder supports building a PDFDoc from the URI. - virtual GBool supports(const GooString &uri) = 0; - -}; - -#endif /* PDFDOCBUILDER_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocEncoding.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocEncoding.cc deleted file mode 100644 index 628d3666d09..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocEncoding.cc +++ /dev/null @@ -1,69 +0,0 @@ -//======================================================================== -// -// PDFDocEncoding.cc -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include "PDFDocEncoding.h" - -// Mapping of PDFDocEncoding (used to represent text values such as document -// metadata or annotation text) to Unicode codepoints. Not all 8-bit values in -// PDFDocEncoding are defined; undefined bytes are mapped to U+FFFD (Unicode -// replacement character). -// -// PDFDocEncoding is only directly defined for printable characters, but some -// control characters such as carriage return will still be used. We define -// mappings of the standard whitespace control characters (tabs, newlines) to -// the corresponding Unicode values. Other control characters are left -// undefined. - -Unicode pdfDocEncoding[256] = { - 0x0000, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, // 00 - 0xfffd, 0x0009, 0x000a, 0xfffd, 0x000c, 0x000d, 0xfffd, 0xfffd, - 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, // 10 - 0x02d8, 0x02c7, 0x02c6, 0x02d9, 0x02dd, 0x02db, 0x02da, 0x02dc, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, // 20 - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, // 30 - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, // 40 - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, // 50 - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, // 60 - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, // 70 - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0xfffd, - 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x0192, 0x2044, // 80 - 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, - 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x0141, 0x0152, 0x0160, // 90 - 0x0178, 0x017d, 0x0131, 0x0142, 0x0153, 0x0161, 0x017e, 0xfffd, - 0x20ac, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, // a0 - 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0xfffd, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, // b0 - 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, // c0 - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, // d0 - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, // e0 - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, // f0 - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff -}; diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocEncoding.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocEncoding.h deleted file mode 100644 index 4f0840bb28a..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocEncoding.h +++ /dev/null @@ -1,34 +0,0 @@ -//======================================================================== -// -// PDFDocEncoding.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2007 Adrian Johnson <ajohnson@redneon.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef PDFDOCENCODING_H -#define PDFDOCENCODING_H - -#include "CharTypes.h" - -class GooString; - -extern Unicode pdfDocEncoding[256]; - -char* pdfDocEncodingToUTF16 (GooString* orig, int* length); - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocFactory.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocFactory.cc deleted file mode 100644 index 7829b3e9958..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocFactory.cc +++ /dev/null @@ -1,72 +0,0 @@ -//======================================================================== -// -// PDFDocFactory.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#include <config.h> - -#include "PDFDocFactory.h" - -#include "goo/GooList.h" -#include "goo/GooString.h" -#include "PDFDoc.h" -#include "LocalPDFDocBuilder.h" -#include "StdinPDFDocBuilder.h" -#if ENABLE_LIBCURL -#include "CurlPDFDocBuilder.h" -#endif -#include "ErrorCodes.h" - -//------------------------------------------------------------------------ -// PDFDocFactory -//------------------------------------------------------------------------ - -PDFDocFactory::PDFDocFactory(GooList *pdfDocBuilders) -{ - if (pdfDocBuilders) { - builders = pdfDocBuilders; - } else { - builders = new GooList(); - } -#if ENABLE_LIBCURL - builders->insert(0, new CurlPDFDocBuilder()); -#endif - builders->insert(0, new StdinPDFDocBuilder()); - builders->insert(0, new LocalPDFDocBuilder()); -} - -PDFDocFactory::~PDFDocFactory() -{ - if (builders) { - deleteGooList(builders, PDFDocBuilder); - } -} - -PDFDoc * -PDFDocFactory::createPDFDoc(const GooString &uri, GooString *ownerPassword, - GooString *userPassword, void *guiDataA) -{ - for (int i = builders->getLength() - 1; i >= 0 ; i--) { - PDFDocBuilder *builder = (PDFDocBuilder *) builders->get(i); - if (builder->supports(uri)) { - return builder->buildPDFDoc(uri, ownerPassword, userPassword, guiDataA); - } - } - - error(-1, "Cannot handle URI '%s'.", uri.getCString()); - GooString *fileName = uri.copy(); - return PDFDoc::ErrorPDFDoc(errOpenFile, fileName); -} - -void PDFDocFactory::registerPDFDocBuilder(PDFDocBuilder *pdfDocBuilder) -{ - builders->append(pdfDocBuilder); -} - - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocFactory.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocFactory.h deleted file mode 100644 index dbceaa567ee..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PDFDocFactory.h +++ /dev/null @@ -1,55 +0,0 @@ -//======================================================================== -// -// PDFDocFactory.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#ifndef PDFDOCFACTORY_H -#define PDFDOCFACTORY_H - -#include "PDFDoc.h" - -class GooList; -class GooString; -class PDFDocBuilder; - -//------------------------------------------------------------------------ -// PDFDocFactory -// -// PDFDocFactory allows the construction of PDFDocs from different URIs. -// -// By default, it supports local files, 'file://' and 'fd:0' (stdin). When -// compiled with libcurl, it also supports 'http://' and 'https://'. -// -// You can extend the supported URIs by giving a list of PDFDocBuilders to -// the constructor, or by registering a new PDFDocBuilder afterwards. -//------------------------------------------------------------------------ - -class PDFDocFactory { - -public: - - PDFDocFactory(GooList *pdfDocBuilders = NULL); - ~PDFDocFactory(); - - // Create a PDFDoc. Returns a PDFDoc. You should check this PDFDoc - // with PDFDoc::isOk() for failures. - // The caller is responsible for deleting ownerPassword, userPassWord and guiData. - PDFDoc *createPDFDoc(const GooString &uri, GooString *ownerPassword = NULL, - GooString *userPassword = NULL, void *guiDataA = NULL); - - // Extend supported URIs with the ones from the PDFDocBuilder. - void registerPDFDocBuilder(PDFDocBuilder *pdfDocBuilder); - -private: - - GooList *builders; - -}; - -#endif /* PDFDOCFACTORY_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PSOutputDev.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/PSOutputDev.cc deleted file mode 100644 index 3e5cf081934..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PSOutputDev.cc +++ /dev/null @@ -1,7005 +0,0 @@ -//======================================================================== -// -// PSOutputDev.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Martin Kretzschmar <martink@gnome.org> -// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2006-2009 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2006 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2007, 2008 Brad Hards <bradh@kde.org> -// Copyright (C) 2008, 2009 Koji Otani <sho@bbr.jp> -// Copyright (C) 2008, 2010 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2009-2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// Copyright (C) 2009 Till Kamppeter <till.kamppeter@gmail.com> -// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2009, 2011 William Bader <williambader@hotmail.com> -// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> -// Copyright (C) 2009-2011 Adrian Johnson <ajohnson@redneon.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdio.h> -#include <stddef.h> -#include <stdarg.h> -#include <signal.h> -#include <math.h> -#include <limits.h> -#include "goo/GooString.h" -#include "goo/GooList.h" -#include "poppler-config.h" -#include "GlobalParams.h" -#include "Object.h" -#include "Error.h" -#include "Function.h" -#include "Gfx.h" -#include "GfxState.h" -#include "GfxFont.h" -#include "UnicodeMap.h" -#include <fofi/FoFiType1C.h> -#include <fofi/FoFiTrueType.h> -#include "Catalog.h" -#include "Page.h" -#include "Stream.h" -#include "Annot.h" -#include "XRef.h" -#include "PreScanOutputDev.h" -#include "FileSpec.h" -#if HAVE_SPLASH -# include "splash/Splash.h" -# include "splash/SplashBitmap.h" -# include "SplashOutputDev.h" -#endif -#include "PSOutputDev.h" -#include "PDFDoc.h" - -#ifdef MACOS -// needed for setting type/creator of MacOS files -#include "ICSupport.h" -#endif - -// the MSVC math.h doesn't define this -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -//------------------------------------------------------------------------ - -// Resolution at which pages with transparency will be rasterized. -#define defaultSplashDPI 300 - -//------------------------------------------------------------------------ -// PostScript prolog and setup -//------------------------------------------------------------------------ - -// The '~' escapes mark prolog code that is emitted only in certain -// levels: -// -// ~[123][sn] -// ^ ^----- s=psLevel*Sep, n=psLevel* -// +----- 1=psLevel1*, 2=psLevel2*, 3=psLevel3* - -static char *prolog[] = { - "/xpdf 75 dict def xpdf begin", - "% PDF special state", - "/pdfDictSize 15 def", - "~1sn", - "/pdfStates 64 array def", - " 0 1 63 {", - " pdfStates exch pdfDictSize dict", - " dup /pdfStateIdx 3 index put", - " put", - " } for", - "~123sn", - "/pdfSetup {", - " 3 1 roll 2 array astore", - " /setpagedevice where {", - " pop 3 dict begin", - " /PageSize exch def", - " /ImagingBBox null def", - " /Policies 1 dict dup begin /PageSize 3 def end def", - " { /Duplex true def } if", - " currentdict end setpagedevice", - " } {", - " pop pop", - " } ifelse", - "} def", - "~1sn", - "/pdfOpNames [", - " /pdfFill /pdfStroke /pdfLastFill /pdfLastStroke", - " /pdfTextMat /pdfFontSize /pdfCharSpacing /pdfTextRender /pdfPatternCS", - " /pdfTextRise /pdfWordSpacing /pdfHorizScaling /pdfTextClipPath", - "] def", - "~123sn", - "/pdfStartPage {", - "~1sn", - " pdfStates 0 get begin", - "~23sn", - " pdfDictSize dict begin", - "~23n", - " /pdfFillCS [] def", - " /pdfFillXform {} def", - " /pdfStrokeCS [] def", - " /pdfStrokeXform {} def", - "~1n", - " /pdfFill 0 def", - " /pdfStroke 0 def", - "~1s", - " /pdfFill [0 0 0 1] def", - " /pdfStroke [0 0 0 1] def", - "~23sn", - " /pdfFill [0] def", - " /pdfStroke [0] def", - " /pdfFillOP false def", - " /pdfStrokeOP false def", - "~123sn", - " /pdfLastFill false def", - " /pdfLastStroke false def", - " /pdfTextMat [1 0 0 1 0 0] def", - " /pdfFontSize 0 def", - " /pdfCharSpacing 0 def", - " /pdfTextRender 0 def", - " /pdfPatternCS false def", - " /pdfTextRise 0 def", - " /pdfWordSpacing 0 def", - " /pdfHorizScaling 1 def", - " /pdfTextClipPath [] def", - "} def", - "/pdfEndPage { end } def", - "~23s", - "% separation convention operators", - "/findcmykcustomcolor where {", - " pop", - "}{", - " /findcmykcustomcolor { 5 array astore } def", - "} ifelse", - "/setcustomcolor where {", - " pop", - "}{", - " /setcustomcolor {", - " exch", - " [ exch /Separation exch dup 4 get exch /DeviceCMYK exch", - " 0 4 getinterval cvx", - " [ exch /dup load exch { mul exch dup } /forall load", - " /pop load dup ] cvx", - " ] setcolorspace setcolor", - " } def", - "} ifelse", - "/customcolorimage where {", - " pop", - "}{", - " /customcolorimage {", - " gsave", - " [ exch /Separation exch dup 4 get exch /DeviceCMYK exch", - " 0 4 getinterval", - " [ exch /dup load exch { mul exch dup } /forall load", - " /pop load dup ] cvx", - " ] setcolorspace", - " 10 dict begin", - " /ImageType 1 def", - " /DataSource exch def", - " /ImageMatrix exch def", - " /BitsPerComponent exch def", - " /Height exch def", - " /Width exch def", - " /Decode [1 0] def", - " currentdict end", - " image", - " grestore", - " } def", - "} ifelse", - "~123sn", - "% PDF color state", - "~1n", - "/g { dup /pdfFill exch def setgray", - " /pdfLastFill true def /pdfLastStroke false def } def", - "/G { dup /pdfStroke exch def setgray", - " /pdfLastStroke true def /pdfLastFill false def } def", - "/fCol {", - " pdfLastFill not {", - " pdfFill setgray", - " /pdfLastFill true def /pdfLastStroke false def", - " } if", - "} def", - "/sCol {", - " pdfLastStroke not {", - " pdfStroke setgray", - " /pdfLastStroke true def /pdfLastFill false def", - " } if", - "} def", - "~1s", - "/k { 4 copy 4 array astore /pdfFill exch def setcmykcolor", - " /pdfLastFill true def /pdfLastStroke false def } def", - "/K { 4 copy 4 array astore /pdfStroke exch def setcmykcolor", - " /pdfLastStroke true def /pdfLastFill false def } def", - "/fCol {", - " pdfLastFill not {", - " pdfFill aload pop setcmykcolor", - " /pdfLastFill true def /pdfLastStroke false def", - " } if", - "} def", - "/sCol {", - " pdfLastStroke not {", - " pdfStroke aload pop setcmykcolor", - " /pdfLastStroke true def /pdfLastFill false def", - " } if", - "} def", - "~23n", - "/cs { /pdfFillXform exch def dup /pdfFillCS exch def", - " setcolorspace } def", - "/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def", - " setcolorspace } def", - "/sc { pdfLastFill not { pdfFillCS setcolorspace } if", - " dup /pdfFill exch def aload pop pdfFillXform setcolor", - " /pdfLastFill true def /pdfLastStroke false def } def", - "/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if", - " dup /pdfStroke exch def aload pop pdfStrokeXform setcolor", - " /pdfLastStroke true def /pdfLastFill false def } def", - "/op { /pdfFillOP exch def", - " pdfLastFill { pdfFillOP setoverprint } if } def", - "/OP { /pdfStrokeOP exch def", - " pdfLastStroke { pdfStrokeOP setoverprint } if } def", - "/fCol {", - " pdfLastFill not {", - " pdfFillCS setcolorspace", - " pdfFill aload pop pdfFillXform setcolor", - " pdfFillOP setoverprint", - " /pdfLastFill true def /pdfLastStroke false def", - " } if", - "} def", - "/sCol {", - " pdfLastStroke not {", - " pdfStrokeCS setcolorspace", - " pdfStroke aload pop pdfStrokeXform setcolor", - " pdfStrokeOP setoverprint", - " /pdfLastStroke true def /pdfLastFill false def", - " } if", - "} def", - "~23s", - "/k { 4 copy 4 array astore /pdfFill exch def setcmykcolor", - " /pdfLastFill true def /pdfLastStroke false def } def", - "/K { 4 copy 4 array astore /pdfStroke exch def setcmykcolor", - " /pdfLastStroke true def /pdfLastFill false def } def", - "/ck { 6 copy 6 array astore /pdfFill exch def", - " findcmykcustomcolor exch setcustomcolor", - " /pdfLastFill true def /pdfLastStroke false def } def", - "/CK { 6 copy 6 array astore /pdfStroke exch def", - " findcmykcustomcolor exch setcustomcolor", - " /pdfLastStroke true def /pdfLastFill false def } def", - "/op { /pdfFillOP exch def", - " pdfLastFill { pdfFillOP setoverprint } if } def", - "/OP { /pdfStrokeOP exch def", - " pdfLastStroke { pdfStrokeOP setoverprint } if } def", - "/fCol {", - " pdfLastFill not {", - " pdfFill aload length 4 eq {", - " setcmykcolor", - " }{", - " findcmykcustomcolor exch setcustomcolor", - " } ifelse", - " pdfFillOP setoverprint", - " /pdfLastFill true def /pdfLastStroke false def", - " } if", - "} def", - "/sCol {", - " pdfLastStroke not {", - " pdfStroke aload length 4 eq {", - " setcmykcolor", - " }{", - " findcmykcustomcolor exch setcustomcolor", - " } ifelse", - " pdfStrokeOP setoverprint", - " /pdfLastStroke true def /pdfLastFill false def", - " } if", - "} def", - "~123sn", - "% build a font", - "/pdfMakeFont {", - " 4 3 roll findfont", - " 4 2 roll matrix scale makefont", - " dup length dict begin", - " { 1 index /FID ne { def } { pop pop } ifelse } forall", - " /Encoding exch def", - " currentdict", - " end", - " definefont pop", - "} def", - "/pdfMakeFont16 {", - " exch findfont", - " dup length dict begin", - " { 1 index /FID ne { def } { pop pop } ifelse } forall", - " /WMode exch def", - " currentdict", - " end", - " definefont pop", - "} def", - "~3sn", - "/pdfMakeFont16L3 {", - " 1 index /CIDFont resourcestatus {", - " pop pop 1 index /CIDFont findresource /CIDFontType known", - " } {", - " false", - " } ifelse", - " {", - " 0 eq { /Identity-H } { /Identity-V } ifelse", - " exch 1 array astore composefont pop", - " } {", - " pdfMakeFont16", - " } ifelse", - "} def", - "~123sn", - "% graphics state operators", - "~1sn", - "/q {", - " gsave", - " pdfOpNames length 1 sub -1 0 { pdfOpNames exch get load } for", - " pdfStates pdfStateIdx 1 add get begin", - " pdfOpNames { exch def } forall", - "} def", - "/Q { end grestore } def", - "~23sn", - "/q { gsave pdfDictSize dict begin } def", - "/Q {", - " end grestore", - " /pdfLastFill where {", - " pop", - " pdfLastFill {", - " pdfFillOP setoverprint", - " } {", - " pdfStrokeOP setoverprint", - " } ifelse", - " } if", - "} def", - "~123sn", - "/cm { concat } def", - "/d { setdash } def", - "/i { setflat } def", - "/j { setlinejoin } def", - "/J { setlinecap } def", - "/M { setmiterlimit } def", - "/w { setlinewidth } def", - "% path segment operators", - "/m { moveto } def", - "/l { lineto } def", - "/c { curveto } def", - "/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto", - " neg 0 rlineto closepath } def", - "/h { closepath } def", - "% path painting operators", - "/S { sCol stroke } def", - "/Sf { fCol stroke } def", - "/f { fCol fill } def", - "/f* { fCol eofill } def", - "% clipping operators", - "/W { clip newpath } def", - "/W* { eoclip newpath } def", - "/Ws { strokepath clip newpath } def", - "% text state operators", - "/Tc { /pdfCharSpacing exch def } def", - "/Tf { dup /pdfFontSize exch def", - " dup pdfHorizScaling mul exch matrix scale", - " pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put", - " exch findfont exch makefont setfont } def", - "/Tr { /pdfTextRender exch def } def", - "/Tp { /pdfPatternCS exch def } def", - "/Ts { /pdfTextRise exch def } def", - "/Tw { /pdfWordSpacing exch def } def", - "/Tz { /pdfHorizScaling exch def } def", - "% text positioning operators", - "/Td { pdfTextMat transform moveto } def", - "/Tm { /pdfTextMat exch def } def", - "% text string operators", - "/cshow where {", - " pop", - " /cshow2 {", - " dup {", - " pop pop", - " 1 string dup 0 3 index put 3 index exec", - " } exch cshow", - " pop pop", - " } def", - "}{", - " /cshow2 {", - " currentfont /FontType get 0 eq {", - " 0 2 2 index length 1 sub {", - " 2 copy get exch 1 add 2 index exch get", - " 2 copy exch 256 mul add", - " 2 string dup 0 6 5 roll put dup 1 5 4 roll put", - " 3 index exec", - " } for", - " } {", - " dup {", - " 1 string dup 0 3 index put 3 index exec", - " } forall", - " } ifelse", - " pop pop", - " } def", - "} ifelse", - "/awcp {", // awidthcharpath - " exch {", - " false charpath", - " 5 index 5 index rmoveto", - " 6 index eq { 7 index 7 index rmoveto } if", - " } exch cshow2", - " 6 {pop} repeat", - "} def", - "/Tj {", - " fCol", // because stringwidth has to draw Type 3 chars - " 1 index stringwidth pdfTextMat idtransform pop", - " sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse", - " pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32", - " 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0", - " pdfTextMat dtransform", - " 6 5 roll Tj1", - "} def", - "/Tj16 {", - " fCol", // because stringwidth has to draw Type 3 chars - " 2 index stringwidth pdfTextMat idtransform pop", - " sub exch div", - " pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32", - " 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0", - " pdfTextMat dtransform", - " 6 5 roll Tj1", - "} def", - "/Tj16V {", - " fCol", // because stringwidth has to draw Type 3 chars - " 2 index stringwidth pdfTextMat idtransform exch pop", - " sub exch div", - " 0 pdfWordSpacing pdfTextMat dtransform 32", - " 4 3 roll pdfCharSpacing add 0 exch", - " pdfTextMat dtransform", - " 6 5 roll Tj1", - "} def", - "/Tj1 {", - " 0 pdfTextRise pdfTextMat dtransform rmoveto", - " currentpoint 8 2 roll", - " pdfTextRender 1 and 0 eq pdfPatternCS not and {", - " 6 copy awidthshow", - " } if", - " pdfTextRender 3 and dup 1 eq exch 2 eq or {", - " 7 index 7 index moveto", - " 6 copy", - " currentfont /FontType get 3 eq { fCol } { sCol } ifelse", - " false awcp currentpoint stroke moveto", - " } if", - " pdfTextRender 4 and 0 ne pdfPatternCS or {", - " 8 6 roll moveto", - " false awcp", - " /pdfTextClipPath [ pdfTextClipPath aload pop", - " {/moveto cvx}", - " {/lineto cvx}", - " {/curveto cvx}", - " {/closepath cvx}", - " pathforall ] def", - " currentpoint newpath moveto", - " } {", - " 8 {pop} repeat", - " } ifelse", - " 0 pdfTextRise neg pdfTextMat dtransform rmoveto", - "} def", - "/TJm { pdfFontSize 0.001 mul mul neg 0", - " pdfTextMat dtransform rmoveto } def", - "/TJmV { pdfFontSize 0.001 mul mul neg 0 exch", - " pdfTextMat dtransform rmoveto } def", - "/Tclip { pdfTextClipPath cvx exec clip newpath", - " /pdfTextClipPath [] def } def", - "/Tclip* { pdfTextClipPath cvx exec eoclip newpath", - " /pdfTextClipPath [] def } def", - "~1ns", - "% Level 1 image operators", - "/pdfIm1 {", - " /pdfImBuf1 4 index string def", - " { currentfile pdfImBuf1 readhexstring pop } image", - "} def", - "/pdfIm1Bin {", - " /pdfImBuf1 4 index string def", - " { currentfile pdfImBuf1 readstring pop } image", - "} def", - "~1s", - "/pdfIm1Sep {", - " /pdfImBuf1 4 index string def", - " /pdfImBuf2 4 index string def", - " /pdfImBuf3 4 index string def", - " /pdfImBuf4 4 index string def", - " { currentfile pdfImBuf1 readhexstring pop }", - " { currentfile pdfImBuf2 readhexstring pop }", - " { currentfile pdfImBuf3 readhexstring pop }", - " { currentfile pdfImBuf4 readhexstring pop }", - " true 4 colorimage", - "} def", - "/pdfIm1SepBin {", - " /pdfImBuf1 4 index string def", - " /pdfImBuf2 4 index string def", - " /pdfImBuf3 4 index string def", - " /pdfImBuf4 4 index string def", - " { currentfile pdfImBuf1 readstring pop }", - " { currentfile pdfImBuf2 readstring pop }", - " { currentfile pdfImBuf3 readstring pop }", - " { currentfile pdfImBuf4 readstring pop }", - " true 4 colorimage", - "} def", - "~1ns", - "/pdfImM1 {", - " fCol /pdfImBuf1 4 index 7 add 8 idiv string def", - " { currentfile pdfImBuf1 readhexstring pop } imagemask", - "} def", - "/pdfImM1Bin {", - " fCol /pdfImBuf1 4 index 7 add 8 idiv string def", - " { currentfile pdfImBuf1 readstring pop } imagemask", - "} def", - "/pdfImM1a {", - " { 2 copy get exch 1 add exch } imagemask", - " pop pop", - "} def", - "~23sn", - "% Level 2 image operators", - "/pdfImBuf 100 string def", - "/pdfIm {", - " image", - " { currentfile pdfImBuf readline", - " not { pop exit } if", - " (%-EOD-) eq { exit } if } loop", - "} def", - "~23s", - "/pdfImSep {", - " findcmykcustomcolor exch", - " dup /Width get /pdfImBuf1 exch string def", - " dup /Decode get aload pop 1 index sub /pdfImDecodeRange exch def", - " /pdfImDecodeLow exch def", - " begin Width Height BitsPerComponent ImageMatrix DataSource end", - " /pdfImData exch def", - " { pdfImData pdfImBuf1 readstring pop", - " 0 1 2 index length 1 sub {", - " 1 index exch 2 copy get", - " pdfImDecodeRange mul 255 div pdfImDecodeLow add round cvi", - " 255 exch sub put", - " } for }", - " 6 5 roll customcolorimage", - " { currentfile pdfImBuf readline", - " not { pop exit } if", - " (%-EOD-) eq { exit } if } loop", - "} def", - "~23sn", - "/pdfImM {", - " fCol imagemask", - " { currentfile pdfImBuf readline", - " not { pop exit } if", - " (%-EOD-) eq { exit } if } loop", - "} def", - "~123sn", - "/pr { 2 index 2 index 3 2 roll putinterval 4 add } def", - "/pdfImClip {", - " gsave", - " 0 2 4 index length 1 sub {", - " dup 4 index exch 2 copy", - " get 5 index div put", - " 1 add 3 index exch 2 copy", - " get 3 index div put", - " } for", - " pop pop rectclip", - "} def", - "/pdfImClipEnd { grestore } def", - "~23sn", - "% shading operators", - "/colordelta {", - " false 0 1 3 index length 1 sub {", - " dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {", - " pop true", - " } if", - " } for", - " exch pop exch pop", - "} def", - "/funcCol { func n array astore } def", - "/funcSH {", - " dup 0 eq {", - " true", - " } {", - " dup 6 eq {", - " false", - " } {", - " 4 index 4 index funcCol dup", - " 6 index 4 index funcCol dup", - " 3 1 roll colordelta 3 1 roll", - " 5 index 5 index funcCol dup", - " 3 1 roll colordelta 3 1 roll", - " 6 index 8 index funcCol dup", - " 3 1 roll colordelta 3 1 roll", - " colordelta or or or", - " } ifelse", - " } ifelse", - " {", - " 1 add", - " 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch", - " 6 index 6 index 4 index 4 index 4 index funcSH", - " 2 index 6 index 6 index 4 index 4 index funcSH", - " 6 index 2 index 4 index 6 index 4 index funcSH", - " 5 3 roll 3 2 roll funcSH pop pop", - " } {", - " pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul", - "~23n", - " funcCol sc", - "~23s", - " funcCol aload pop k", - "~23sn", - " dup 4 index exch mat transform m", - " 3 index 3 index mat transform l", - " 1 index 3 index mat transform l", - " mat transform l pop pop h f*", - " } ifelse", - "} def", - "/axialCol {", - " dup 0 lt {", - " pop t0", - " } {", - " dup 1 gt {", - " pop t1", - " } {", - " dt mul t0 add", - " } ifelse", - " } ifelse", - " func n array astore", - "} def", - "/axialSH {", - " dup 0 eq {", - " true", - " } {", - " dup 8 eq {", - " false", - " } {", - " 2 index axialCol 2 index axialCol colordelta", - " } ifelse", - " } ifelse", - " {", - " 1 add 3 1 roll 2 copy add 0.5 mul", - " dup 4 3 roll exch 4 index axialSH", - " exch 3 2 roll axialSH", - " } {", - " pop 2 copy add 0.5 mul", - "~23n", - " axialCol sc", - "~23s", - " axialCol aload pop k", - "~23sn", - " exch dup dx mul x0 add exch dy mul y0 add", - " 3 2 roll dup dx mul x0 add exch dy mul y0 add", - " dx abs dy abs ge {", - " 2 copy yMin sub dy mul dx div add yMin m", - " yMax sub dy mul dx div add yMax l", - " 2 copy yMax sub dy mul dx div add yMax l", - " yMin sub dy mul dx div add yMin l", - " h f*", - " } {", - " exch 2 copy xMin sub dx mul dy div add xMin exch m", - " xMax sub dx mul dy div add xMax exch l", - " exch 2 copy xMax sub dx mul dy div add xMax exch l", - " xMin sub dx mul dy div add xMin exch l", - " h f*", - " } ifelse", - " } ifelse", - "} def", - "/radialCol {", - " dup t0 lt {", - " pop t0", - " } {", - " dup t1 gt {", - " pop t1", - " } if", - " } ifelse", - " func n array astore", - "} def", - "/radialSH {", - " dup 0 eq {", - " true", - " } {", - " dup 8 eq {", - " false", - " } {", - " 2 index dt mul t0 add radialCol", - " 2 index dt mul t0 add radialCol colordelta", - " } ifelse", - " } ifelse", - " {", - " 1 add 3 1 roll 2 copy add 0.5 mul", - " dup 4 3 roll exch 4 index radialSH", - " exch 3 2 roll radialSH", - " } {", - " pop 2 copy add 0.5 mul dt mul t0 add", - "~23n", - " radialCol sc", - "~23s", - " radialCol aload pop k", - "~23sn", - " encl {", - " exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add", - " 0 360 arc h", - " dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add", - " 360 0 arcn h f", - " } {", - " 2 copy", - " dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add", - " a1 a2 arcn", - " dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add", - " a2 a1 arcn h", - " dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add", - " a1 a2 arc", - " dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add", - " a2 a1 arc h f", - " } ifelse", - " } ifelse", - "} def", - "~123sn", - "end", - NULL -}; - -static char *cmapProlog[] = { - "/CIDInit /ProcSet findresource begin", - "10 dict begin", - " begincmap", - " /CMapType 1 def", - " /CMapName /Identity-H def", - " /CIDSystemInfo 3 dict dup begin", - " /Registry (Adobe) def", - " /Ordering (Identity) def", - " /Supplement 0 def", - " end def", - " 1 begincodespacerange", - " <0000> <ffff>", - " endcodespacerange", - " 0 usefont", - " 1 begincidrange", - " <0000> <ffff> 0", - " endcidrange", - " endcmap", - " currentdict CMapName exch /CMap defineresource pop", - "end", - "10 dict begin", - " begincmap", - " /CMapType 1 def", - " /CMapName /Identity-V def", - " /CIDSystemInfo 3 dict dup begin", - " /Registry (Adobe) def", - " /Ordering (Identity) def", - " /Supplement 0 def", - " end def", - " /WMode 1 def", - " 1 begincodespacerange", - " <0000> <ffff>", - " endcodespacerange", - " 0 usefont", - " 1 begincidrange", - " <0000> <ffff> 0", - " endcidrange", - " endcmap", - " currentdict CMapName exch /CMap defineresource pop", - "end", - "end", - NULL -}; - -//------------------------------------------------------------------------ -// Fonts -//------------------------------------------------------------------------ - -struct PSSubstFont { - char *psName; // PostScript name - double mWidth; // width of 'm' character -}; - -static const char *psFonts[] = { - "Courier", - "Courier-Bold", - "Courier-Oblique", - "Courier-BoldOblique", - "Helvetica", - "Helvetica-Bold", - "Helvetica-Oblique", - "Helvetica-BoldOblique", - "Symbol", - "Times-Roman", - "Times-Bold", - "Times-Italic", - "Times-BoldItalic", - "ZapfDingbats", - NULL -}; - -static const PSSubstFont psSubstFonts[] = { - {"Helvetica", 0.833}, - {"Helvetica-Oblique", 0.833}, - {"Helvetica-Bold", 0.889}, - {"Helvetica-BoldOblique", 0.889}, - {"Times-Roman", 0.788}, - {"Times-Italic", 0.722}, - {"Times-Bold", 0.833}, - {"Times-BoldItalic", 0.778}, - {"Courier", 0.600}, - {"Courier-Oblique", 0.600}, - {"Courier-Bold", 0.600}, - {"Courier-BoldOblique", 0.600} -}; - -// Info for 8-bit fonts -struct PSFont8Info { - Ref fontID; - Gushort *codeToGID; // code-to-GID mapping for TrueType fonts -}; - -// Encoding info for substitute 16-bit font -struct PSFont16Enc { - Ref fontID; - GooString *enc; -}; - -//------------------------------------------------------------------------ -// process colors -//------------------------------------------------------------------------ - -#define psProcessCyan 1 -#define psProcessMagenta 2 -#define psProcessYellow 4 -#define psProcessBlack 8 -#define psProcessCMYK 15 - -//------------------------------------------------------------------------ -// PSOutCustomColor -//------------------------------------------------------------------------ - -class PSOutCustomColor { -public: - - PSOutCustomColor(double cA, double mA, - double yA, double kA, GooString *nameA); - ~PSOutCustomColor(); - - double c, m, y, k; - GooString *name; - PSOutCustomColor *next; -}; - -PSOutCustomColor::PSOutCustomColor(double cA, double mA, - double yA, double kA, GooString *nameA) { - c = cA; - m = mA; - y = yA; - k = kA; - name = nameA; - next = NULL; -} - -PSOutCustomColor::~PSOutCustomColor() { - delete name; -} - -//------------------------------------------------------------------------ - -struct PSOutImgClipRect { - int x0, x1, y0, y1; -}; - -//------------------------------------------------------------------------ -// DeviceNRecoder -//------------------------------------------------------------------------ - -class DeviceNRecoder: public FilterStream { -public: - - DeviceNRecoder(Stream *strA, int widthA, int heightA, - GfxImageColorMap *colorMapA); - virtual ~DeviceNRecoder(); - virtual StreamKind getKind() { return strWeird; } - virtual void reset(); - virtual int getChar() - { return (bufIdx >= bufSize && !fillBuf()) ? EOF : buf[bufIdx++]; } - virtual int lookChar() - { return (bufIdx >= bufSize && !fillBuf()) ? EOF : buf[bufIdx]; } - virtual GooString *getPSFilter(int psLevel, char *indent) { return NULL; } - virtual GBool isBinary(GBool last = gTrue) { return gTrue; } - virtual GBool isEncoder() { return gTrue; } - -private: - - GBool fillBuf(); - - int width, height; - GfxImageColorMap *colorMap; - Function *func; - ImageStream *imgStr; - int buf[gfxColorMaxComps]; - int pixelIdx; - int bufIdx; - int bufSize; -}; - -DeviceNRecoder::DeviceNRecoder(Stream *strA, int widthA, int heightA, - GfxImageColorMap *colorMapA): - FilterStream(strA) { - width = widthA; - height = heightA; - colorMap = colorMapA; - imgStr = NULL; - pixelIdx = 0; - bufIdx = gfxColorMaxComps; - bufSize = ((GfxDeviceNColorSpace *)colorMap->getColorSpace())-> - getAlt()->getNComps(); - func = ((GfxDeviceNColorSpace *)colorMap->getColorSpace())-> - getTintTransformFunc(); -} - -DeviceNRecoder::~DeviceNRecoder() { - if (imgStr) { - delete imgStr; - } -} - -void DeviceNRecoder::reset() { - imgStr = new ImageStream(str, width, colorMap->getNumPixelComps(), - colorMap->getBits()); - imgStr->reset(); -} - -GBool DeviceNRecoder::fillBuf() { - Guchar pixBuf[gfxColorMaxComps]; - GfxColor color; - double x[gfxColorMaxComps], y[gfxColorMaxComps]; - int i; - - if (pixelIdx >= width * height) { - return gFalse; - } - imgStr->getPixel(pixBuf); - colorMap->getColor(pixBuf, &color); - for (i = 0; - i < ((GfxDeviceNColorSpace *)colorMap->getColorSpace())->getNComps(); - ++i) { - x[i] = colToDbl(color.c[i]); - } - func->transform(x, y); - for (i = 0; i < bufSize; ++i) { - buf[i] = (int)(y[i] * 255 + 0.5); - } - bufIdx = 0; - ++pixelIdx; - return gTrue; -} - -//------------------------------------------------------------------------ -// PSOutputDev -//------------------------------------------------------------------------ - -extern "C" { -typedef void (*SignalFunc)(int); -} - -static void outputToFile(void *stream, char *data, int len) { - fwrite(data, 1, len, (FILE *)stream); -} - -PSOutputDev::PSOutputDev(const char *fileName, PDFDoc *doc, XRef *xrefA, Catalog *catalog, - char *psTitle, - int firstPage, int lastPage, PSOutMode modeA, - int paperWidthA, int paperHeightA, GBool duplexA, - int imgLLXA, int imgLLYA, int imgURXA, int imgURYA, - GBool forceRasterizeA, - GBool manualCtrlA) { - FILE *f; - PSFileType fileTypeA; - - underlayCbk = NULL; - underlayCbkData = NULL; - overlayCbk = NULL; - overlayCbkData = NULL; - - fontIDs = NULL; - fontFileIDs = NULL; - fontFileNames = NULL; - font8Info = NULL; - font16Enc = NULL; - imgIDs = NULL; - formIDs = NULL; - xobjStack = NULL; - embFontList = NULL; - customColors = NULL; - haveTextClip = gFalse; - haveCSPattern = gFalse; - t3String = NULL; - - forceRasterize = forceRasterizeA; - - // open file or pipe - if (!strcmp(fileName, "-")) { - fileTypeA = psStdout; - f = stdout; - } else if (fileName[0] == '|') { - fileTypeA = psPipe; -#ifdef HAVE_POPEN -#ifndef _WIN32 - signal(SIGPIPE, (SignalFunc)SIG_IGN); -#endif - if (!(f = popen(fileName + 1, "w"))) { - error(-1, "Couldn't run print command '%s'", fileName); - ok = gFalse; - return; - } -#else - error(-1, "Print commands are not supported ('%s')", fileName); - ok = gFalse; - return; -#endif - } else { - fileTypeA = psFile; - if (!(f = fopen(fileName, "w"))) { - error(-1, "Couldn't open PostScript file '%s'", fileName); - ok = gFalse; - return; - } - } - - init(outputToFile, f, fileTypeA, psTitle, - doc, xrefA, catalog, firstPage, lastPage, modeA, - imgLLXA, imgLLYA, imgURXA, imgURYA, manualCtrlA, - paperWidthA, paperHeightA, duplexA); -} - -PSOutputDev::PSOutputDev(PSOutputFunc outputFuncA, void *outputStreamA, - char *psTitle, - PDFDoc *doc, - XRef *xrefA, Catalog *catalog, - int firstPage, int lastPage, PSOutMode modeA, - int paperWidthA, int paperHeightA, GBool duplexA, - int imgLLXA, int imgLLYA, int imgURXA, int imgURYA, - GBool forceRasterizeA, - GBool manualCtrlA) { - underlayCbk = NULL; - underlayCbkData = NULL; - overlayCbk = NULL; - overlayCbkData = NULL; - - fontIDs = NULL; - fontFileIDs = NULL; - fontFileNames = NULL; - font8Info = NULL; - font16Enc = NULL; - imgIDs = NULL; - formIDs = NULL; - xobjStack = NULL; - embFontList = NULL; - customColors = NULL; - haveTextClip = gFalse; - haveCSPattern = gFalse; - t3String = NULL; - - forceRasterize = forceRasterizeA; - - init(outputFuncA, outputStreamA, psGeneric, psTitle, - doc, xrefA, catalog, firstPage, lastPage, modeA, - imgLLXA, imgLLYA, imgURXA, imgURYA, manualCtrlA, - paperWidthA, paperHeightA, duplexA); -} - -void PSOutputDev::init(PSOutputFunc outputFuncA, void *outputStreamA, - PSFileType fileTypeA, char *pstitle, PDFDoc *doc, XRef *xrefA, Catalog *catalog, - int firstPage, int lastPage, PSOutMode modeA, - int imgLLXA, int imgLLYA, int imgURXA, int imgURYA, - GBool manualCtrlA, int paperWidthA, int paperHeightA, - GBool duplexA) { - PDFRectangle *box; - - // initialize - displayText = gTrue; - ok = gTrue; - outputFunc = outputFuncA; - outputStream = outputStreamA; - fileType = fileTypeA; - m_catalog = catalog; - xref = xrefA; - level = globalParams->getPSLevel(); - mode = modeA; - paperWidth = paperWidthA; - paperHeight = paperHeightA; - imgLLX = imgLLXA; - imgLLY = imgLLYA; - imgURX = imgURXA; - imgURY = imgURYA; - if (paperWidth < 0 || paperHeight < 0) { - Page *page; - if ((page = doc->getPage(firstPage))) { - paperWidth = (int)ceil(page->getMediaWidth()); - paperHeight = (int)ceil(page->getMediaHeight()); - } else { - error(-1, "Invalid page %d", firstPage); - paperWidth = 1; - paperHeight = 1; - } - } - substFonts = globalParams->getPSSubstFonts(); - preload = globalParams->getPSPreload(); - if (imgLLX == 0 && imgURX == 0 && imgLLY == 0 && imgURY == 0) { - imgLLX = imgLLY = 0; - imgURX = paperWidth; - imgURY = paperHeight; - } - if (imgLLX == 0 && imgURX == 0 && imgLLY == 0 && imgURY == 0) { - imgLLX = imgLLY = 0; - imgURX = paperWidth; - imgURY = paperHeight; - } - manualCtrl = manualCtrlA; - if (mode == psModeForm) { - lastPage = firstPage; - } - processColors = 0; - inType3Char = gFalse; - -#if OPI_SUPPORT - // initialize OPI nesting levels - opi13Nest = 0; - opi20Nest = 0; -#endif - - tx0 = ty0 = -1; - xScale0 = yScale0 = 0; - rotate0 = -1; - clipLLX0 = clipLLY0 = 0; - clipURX0 = clipURY0 = -1; - - // initialize fontIDs, fontFileIDs, and fontFileNames lists - fontIDSize = 64; - fontIDLen = 0; - fontIDs = (Ref *)gmallocn(fontIDSize, sizeof(Ref)); - fontFileIDSize = 64; - fontFileIDLen = 0; - fontFileIDs = (Ref *)gmallocn(fontFileIDSize, sizeof(Ref)); - fontFileNameSize = 64; - fontFileNameLen = 0; - fontFileNames = (GooString **)gmallocn(fontFileNameSize, sizeof(GooString *)); - psFileNames = (GooString **)gmallocn(fontFileNameSize, sizeof(GooString *)); - nextTrueTypeNum = 0; - font8InfoLen = 0; - font8InfoSize = 0; - font16EncLen = 0; - font16EncSize = 0; - imgIDLen = 0; - imgIDSize = 0; - formIDLen = 0; - formIDSize = 0; - - xobjStack = new GooList(); - numSaves = 0; - numTilingPatterns = 0; - nextFunc = 0; - - // initialize embedded font resource comment list - embFontList = new GooString(); - - if (!manualCtrl) { - Page *page; - // this check is needed in case the document has zero pages - if ((page = doc->getPage(firstPage))) { - writeHeader(firstPage, lastPage, - page->getMediaBox(), - page->getCropBox(), - page->getRotate(), - pstitle); - } else { - error(-1, "Invalid page %d", firstPage); - box = new PDFRectangle(0, 0, 1, 1); - writeHeader(firstPage, lastPage, box, box, 0, pstitle); - delete box; - } - if (mode != psModeForm) { - writePS("%%BeginProlog\n"); - } - writeXpdfProcset(); - if (mode != psModeForm) { - writePS("%%EndProlog\n"); - writePS("%%BeginSetup\n"); - } - writeDocSetup(doc, catalog, firstPage, lastPage, duplexA); - if (mode != psModeForm) { - writePS("%%EndSetup\n"); - } - } - - // initialize sequential page number - seqPage = 1; -} - -PSOutputDev::~PSOutputDev() { - PSOutCustomColor *cc; - int i; - - if (ok) { - if (!manualCtrl) { - writePS("%%Trailer\n"); - writeTrailer(); - if (mode != psModeForm) { - writePS("%%EOF\n"); - } - } - if (fileType == psFile) { -#ifdef MACOS - ICS_MapRefNumAndAssign((short)((FILE *)outputStream)->handle); -#endif - fclose((FILE *)outputStream); - } -#ifdef HAVE_POPEN - else if (fileType == psPipe) { - pclose((FILE *)outputStream); -#ifndef _WIN32 - signal(SIGPIPE, (SignalFunc)SIG_DFL); -#endif - } -#endif - } - if (embFontList) { - delete embFontList; - } - if (fontIDs) { - gfree(fontIDs); - } - if (fontFileIDs) { - gfree(fontFileIDs); - } - if (fontFileNames) { - for (i = 0; i < fontFileNameLen; ++i) { - delete fontFileNames[i]; - } - gfree(fontFileNames); - } - if (font8Info) { - for (i = 0; i < font8InfoLen; ++i) { - gfree(font8Info[i].codeToGID); - } - gfree(font8Info); - } - if (psFileNames) { - for (i = 0; i < fontFileNameLen; ++i) { - if (psFileNames[i]) - delete psFileNames[i]; - } - gfree(psFileNames); - } - if (font16Enc) { - for (i = 0; i < font16EncLen; ++i) { - delete font16Enc[i].enc; - } - gfree(font16Enc); - } - gfree(imgIDs); - gfree(formIDs); - if (xobjStack) { - delete xobjStack; - } - while (customColors) { - cc = customColors; - customColors = cc->next; - delete cc; - } -} - -void PSOutputDev::writeHeader(int firstPage, int lastPage, - PDFRectangle *mediaBox, PDFRectangle *cropBox, - int pageRotate, char *psTitle) { - double x1, y1, x2, y2; - Object info, obj1; - - switch (mode) { - case psModePSOrigPageSizes: - case psModePS: - writePS("%!PS-Adobe-3.0\n"); - break; - case psModeEPS: - writePS("%!PS-Adobe-3.0 EPSF-3.0\n"); - break; - case psModeForm: - writePS("%!PS-Adobe-3.0 Resource-Form\n"); - break; - } - writePSFmt("% Produced by poppler pdftops version: {0:s} (http://poppler.freedesktop.org)\n", PACKAGE_VERSION); - xref->getDocInfo(&info); - if (info.isDict() && info.dictLookup("Creator", &obj1)->isString()) { - writePS("%%Creator: "); - writePSTextLine(obj1.getString()); - } - obj1.free(); - info.free(); - if(psTitle) { - writePSFmt("%%Title: {0:s}\n", psTitle); - } - writePSFmt("%%LanguageLevel: {0:d}\n", - (level == psLevel1 || level == psLevel1Sep) ? 1 : - (level == psLevel2 || level == psLevel2Sep) ? 2 : 3); - if (level == psLevel1Sep || level == psLevel2Sep || level == psLevel3Sep) { - writePS("%%DocumentProcessColors: (atend)\n"); - writePS("%%DocumentCustomColors: (atend)\n"); - } - writePS("%%DocumentSuppliedResources: (atend)\n"); - if ((level == psLevel1 || level == psLevel1Sep) && globalParams->getPSBinary()) { - writePS("%%DocumentData: Binary\n"); - } - - switch (mode) { - case psModePSOrigPageSizes: - prevWidth = 0; - prevHeight = 0; - case psModePS: - writePSFmt("%%DocumentMedia: plain {0:d} {1:d} 0 () ()\n", - paperWidth, paperHeight); - writePSFmt("%%BoundingBox: 0 0 {0:d} {1:d}\n", paperWidth, paperHeight); - writePSFmt("%%Pages: {0:d}\n", lastPage - firstPage + 1); - writePS("%%EndComments\n"); - writePS("%%BeginDefaults\n"); - writePS("%%PageMedia: plain\n"); - writePS("%%EndDefaults\n"); - break; - case psModeEPS: - epsX1 = cropBox->x1; - epsY1 = cropBox->y1; - epsX2 = cropBox->x2; - epsY2 = cropBox->y2; - if (pageRotate == 0 || pageRotate == 180) { - x1 = epsX1; - y1 = epsY1; - x2 = epsX2; - y2 = epsY2; - } else { // pageRotate == 90 || pageRotate == 270 - x1 = 0; - y1 = 0; - x2 = epsY2 - epsY1; - y2 = epsX2 - epsX1; - } - writePSFmt("%%BoundingBox: {0:d} {1:d} {2:d} {3:d}\n", - (int)floor(x1), (int)floor(y1), (int)ceil(x2), (int)ceil(y2)); - if (floor(x1) != ceil(x1) || floor(y1) != ceil(y1) || - floor(x2) != ceil(x2) || floor(y2) != ceil(y2)) { - writePSFmt("%%HiResBoundingBox: {0:.6g} {1:.6g} {2:.6g} {3:.6g}\n", - x1, y1, x2, y2); - } - writePS("%%DocumentSuppliedResources: (atend)\n"); - writePS("%%EndComments\n"); - break; - case psModeForm: - writePS("%%EndComments\n"); - writePS("32 dict dup begin\n"); - writePSFmt("/BBox [{0:d} {1:d} {2:d} {3:d}] def\n", - (int)floor(mediaBox->x1), (int)floor(mediaBox->y1), - (int)ceil(mediaBox->x2), (int)ceil(mediaBox->y2)); - writePS("/FormType 1 def\n"); - writePS("/Matrix [1 0 0 1 0 0] def\n"); - break; - } -} - -void PSOutputDev::writeXpdfProcset() { - GBool lev1, lev2, lev3, sep, nonSep; - char **p; - char *q; - - writePSFmt("%%BeginResource: procset xpdf {0:s} 0\n", "3.00"); - writePSFmt("%%Copyright: {0:s}\n", xpdfCopyright); - lev1 = lev2 = lev3 = sep = nonSep = gTrue; - for (p = prolog; *p; ++p) { - if ((*p)[0] == '~') { - lev1 = lev2 = lev3 = sep = nonSep = gFalse; - for (q = *p + 1; *q; ++q) { - switch (*q) { - case '1': lev1 = gTrue; break; - case '2': lev2 = gTrue; break; - case '3': lev3 = gTrue; break; - case 's': sep = gTrue; break; - case 'n': nonSep = gTrue; break; - } - } - } else if ((level == psLevel1 && lev1 && nonSep) || - (level == psLevel1Sep && lev1 && sep) || - (level == psLevel2 && lev2 && nonSep) || - (level == psLevel2Sep && lev2 && sep) || - (level == psLevel3 && lev3 && nonSep) || - (level == psLevel3Sep && lev3 && sep)) { - writePSFmt("{0:s}\n", *p); - } - } - writePS("%%EndResource\n"); - - if (level >= psLevel3) { - for (p = cmapProlog; *p; ++p) { - writePSFmt("{0:s}\n", *p); - } - } -} - -void PSOutputDev::writeDocSetup(PDFDoc *doc, Catalog *catalog, - int firstPage, int lastPage, - GBool duplexA) { - Page *page; - Dict *resDict; - Annots *annots; - Object obj1, obj2; - int pg, i; - - if (mode == psModeForm) { - // swap the form and xpdf dicts - writePS("xpdf end begin dup begin\n"); - } else { - writePS("xpdf begin\n"); - } - for (pg = firstPage; pg <= lastPage; ++pg) { - page = doc->getPage(pg); - if (!page) { - error(-1, "Failed writing resources for page %d", pg); - continue; - } - if ((resDict = page->getResourceDict())) { - setupResources(resDict); - } - annots = new Annots(xref, catalog, page->getAnnots(&obj1)); - obj1.free(); - for (i = 0; i < annots->getNumAnnots(); ++i) { - if (annots->getAnnot(i)->getAppearance(&obj1)->isStream()) { - obj1.streamGetDict()->lookup("Resources", &obj2); - if (obj2.isDict()) { - setupResources(obj2.getDict()); - } - obj2.free(); - } - obj1.free(); - } - delete annots; - } - if (mode != psModeForm) { - if (mode != psModeEPS && !manualCtrl) { - writePSFmt("{0:d} {1:d} {2:s} pdfSetup\n", - paperWidth, paperHeight, duplexA ? "true" : "false"); - } -#if OPI_SUPPORT - if (globalParams->getPSOPI()) { - writePS("/opiMatrix matrix currentmatrix def\n"); - } -#endif - } -} - -void PSOutputDev::writePageTrailer() { - if (mode != psModeForm) { - writePS("pdfEndPage\n"); - } -} - -void PSOutputDev::writeTrailer() { - PSOutCustomColor *cc; - - if (mode == psModeForm) { - writePS("/Foo exch /Form defineresource pop\n"); - } else { - writePS("end\n"); - writePS("%%DocumentSuppliedResources:\n"); - writePS(embFontList->getCString()); - if (level == psLevel1Sep || level == psLevel2Sep || - level == psLevel3Sep) { - writePS("%%DocumentProcessColors:"); - if (processColors & psProcessCyan) { - writePS(" Cyan"); - } - if (processColors & psProcessMagenta) { - writePS(" Magenta"); - } - if (processColors & psProcessYellow) { - writePS(" Yellow"); - } - if (processColors & psProcessBlack) { - writePS(" Black"); - } - writePS("\n"); - writePS("%%DocumentCustomColors:"); - for (cc = customColors; cc; cc = cc->next) { - writePSFmt(" ({0:s})", cc->name->getCString()); - } - writePS("\n"); - writePS("%%CMYKCustomColor:\n"); - for (cc = customColors; cc; cc = cc->next) { - writePSFmt("%%+ {0:.4g} {1:.4g} {2:.4g} {3:.4g} ({4:t})\n", - cc->c, cc->m, cc->y, cc->k, cc->name); - } - } - } -} - -void PSOutputDev::setupResources(Dict *resDict) { - Object xObjDict, xObjRef, xObj, patDict, patRef, pat, resObj; - Ref ref0, ref1; - GBool skip; - int i, j; - - setupFonts(resDict); - setupImages(resDict); - setupForms(resDict); - - //----- recursively scan XObjects - resDict->lookup("XObject", &xObjDict); - if (xObjDict.isDict()) { - for (i = 0; i < xObjDict.dictGetLength(); ++i) { - - // avoid infinite recursion on XObjects - skip = gFalse; - if ((xObjDict.dictGetValNF(i, &xObjRef)->isRef())) { - ref0 = xObjRef.getRef(); - for (j = 0; j < xobjStack->getLength(); ++j) { - ref1 = *(Ref *)xobjStack->get(j); - if (ref1.num == ref0.num && ref1.gen == ref0.gen) { - skip = gTrue; - break; - } - } - if (!skip) { - xobjStack->append(&ref0); - } - } - if (!skip) { - - // process the XObject's resource dictionary - xObjDict.dictGetVal(i, &xObj); - if (xObj.isStream()) { - xObj.streamGetDict()->lookup("Resources", &resObj); - if (resObj.isDict()) { - setupResources(resObj.getDict()); - } - resObj.free(); - } - xObj.free(); - } - - if (xObjRef.isRef() && !skip) { - xobjStack->del(xobjStack->getLength() - 1); - } - xObjRef.free(); - } - } - xObjDict.free(); - - //----- recursively scan Patterns - resDict->lookup("Pattern", &patDict); - if (patDict.isDict()) { - inType3Char = gTrue; - for (i = 0; i < patDict.dictGetLength(); ++i) { - - // avoid infinite recursion on Patterns - skip = gFalse; - if ((patDict.dictGetValNF(i, &patRef)->isRef())) { - ref0 = patRef.getRef(); - for (j = 0; j < xobjStack->getLength(); ++j) { - ref1 = *(Ref *)xobjStack->get(j); - if (ref1.num == ref0.num && ref1.gen == ref0.gen) { - skip = gTrue; - break; - } - } - if (!skip) { - xobjStack->append(&ref0); - } - } - if (!skip) { - - // process the Pattern's resource dictionary - patDict.dictGetVal(i, &pat); - if (pat.isStream()) { - pat.streamGetDict()->lookup("Resources", &resObj); - if (resObj.isDict()) { - setupResources(resObj.getDict()); - } - resObj.free(); - } - pat.free(); - } - - if (patRef.isRef() && !skip) { - xobjStack->del(xobjStack->getLength() - 1); - } - patRef.free(); - } - inType3Char = gFalse; - } - patDict.free(); -} - -void PSOutputDev::setupFonts(Dict *resDict) { - Object obj1, obj2; - Ref r; - GfxFontDict *gfxFontDict; - GfxFont *font; - int i; - - if (forceRasterize) return; - - gfxFontDict = NULL; - resDict->lookupNF("Font", &obj1); - if (obj1.isRef()) { - obj1.fetch(xref, &obj2); - if (obj2.isDict()) { - r = obj1.getRef(); - gfxFontDict = new GfxFontDict(xref, &r, obj2.getDict()); - } - obj2.free(); - } else if (obj1.isDict()) { - gfxFontDict = new GfxFontDict(xref, NULL, obj1.getDict()); - } - if (gfxFontDict) { - for (i = 0; i < gfxFontDict->getNumFonts(); ++i) { - if ((font = gfxFontDict->getFont(i))) { - setupFont(font, resDict); - } - } - delete gfxFontDict; - } - obj1.free(); -} - -void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) { - Ref fontFileID; - GooString *name; - PSFontParam *fontParam; - GooString *psName; - char buf[16]; - GBool subst; - UnicodeMap *uMap; - char *charName; - double xs, ys; - int code; - double w1, w2; - double *fm; - int i, j; - DisplayFontParam *dfp; - - // check if font is already set up - for (i = 0; i < fontIDLen; ++i) { - if (fontIDs[i].num == font->getID()->num && - fontIDs[i].gen == font->getID()->gen) { - return; - } - } - - // add entry to fontIDs list - if (fontIDLen >= fontIDSize) { - fontIDSize += 64; - fontIDs = (Ref *)greallocn(fontIDs, fontIDSize, sizeof(Ref)); - } - fontIDs[fontIDLen++] = *font->getID(); - - xs = ys = 1; - subst = gFalse; - - // check for resident 8-bit font - if (font->getName() && - (fontParam = globalParams->getPSFont(font->getName()))) { - psName = new GooString(fontParam->psFontName->getCString()); - - // check for embedded Type 1 font - } else if (globalParams->getPSEmbedType1() && - font->getType() == fontType1 && - font->getEmbeddedFontID(&fontFileID) && - font->getEmbeddedFontName()) { - psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); - setupEmbeddedType1Font(&fontFileID, psName); - - // check for embedded Type 1C font - } else if (globalParams->getPSEmbedType1() && - font->getType() == fontType1C && - font->getEmbeddedFontID(&fontFileID) && - font->getOrigName()) { - // use the PDF font name because the embedded font name might - // not include the subset prefix - psName = font->getOrigName()->sanitizedName(gTrue /* ps mode */); - setupEmbeddedType1CFont(font, &fontFileID, psName); - - // check for embedded OpenType - Type 1C font - } else if (globalParams->getPSEmbedType1() && - font->getType() == fontType1COT && - font->getEmbeddedFontID(&fontFileID) && - font->getOrigName()) { - // use the PDF font name because the embedded font name might - // not include the subset prefix - psName = font->getOrigName()->sanitizedName(gTrue /* ps mode */); - setupEmbeddedOpenTypeT1CFont(font, &fontFileID, psName); - - // check for external Type 1 font file - } else if (globalParams->getPSEmbedType1() && - font->getType() == fontType1 && - font->getExtFontFile() && - font->getName()) { - // this assumes that the PS font name matches the PDF font name - psName = font->getName()->copy(); - setupExternalType1Font(font->getExtFontFile(), psName); - - // check for embedded TrueType font - } else if (globalParams->getPSEmbedTrueType() && - (font->getType() == fontTrueType || - font->getType() == fontTrueTypeOT) && - font->getEmbeddedFontID(&fontFileID) && - font->getEmbeddedFontName()) { - psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); - setupEmbeddedTrueTypeFont(font, &fontFileID, psName); - - // check for external TrueType font file - } else if (globalParams->getPSEmbedTrueType() && - font->getType() == fontTrueType && - font->getExtFontFile()) { - psName = setupExternalTrueTypeFont(font); - - // check for embedded CID PostScript font - } else if (globalParams->getPSEmbedCIDPostScript() && - font->getType() == fontCIDType0C && - font->getEmbeddedFontID(&fontFileID) && - font->getEmbeddedFontName()) { - psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); - setupEmbeddedCIDType0Font(font, &fontFileID, psName); - - // check for embedded CID TrueType font - } else if (globalParams->getPSEmbedCIDTrueType() && - (font->getType() == fontCIDType2 || - font->getType() == fontCIDType2OT) && - font->getEmbeddedFontID(&fontFileID) && - font->getEmbeddedFontName()) { - psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); - setupEmbeddedCIDTrueTypeFont(font, &fontFileID, psName, gTrue); - - // check for embedded OpenType - CID CFF font - } else if (globalParams->getPSEmbedCIDPostScript() && - font->getType() == fontCIDType0COT && - font->getEmbeddedFontID(&fontFileID) && - font->getEmbeddedFontName()) { - psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); - setupEmbeddedOpenTypeCFFFont(font, &fontFileID, psName); - - // check for Type 3 font - } else if (font->getType() == fontType3) { - psName = GooString::format("T3_{0:d}_{1:d}", - font->getID()->num, font->getID()->gen); - setupType3Font(font, psName, parentResDict); - - // check for external CID TrueType font file - } else if (globalParams->getPSEmbedCIDTrueType() && - font->getType() == fontCIDType2 && - font->getExtFontFile()) { - psName = setupExternalCIDTrueTypeFont(font, font->getExtFontFile()); - - // do 8-bit font substitution - } else if (!font->isCIDFont()) { - subst = gTrue; - name = font->getName(); - psName = NULL; - if (name) { - for (i = 0; psFonts[i]; ++i) { - if (name->cmp(psFonts[i]) == 0) { - psName = new GooString(psFonts[i]); - break; - } - } - } - if (!psName) { - if (substFonts) { - if (font->isFixedWidth()) { - i = 8; - } else if (font->isSerif()) { - i = 4; - } else { - i = 0; - } - if (font->isBold()) { - i += 2; - } - if (font->isItalic()) { - i += 1; - } - psName = new GooString(psSubstFonts[i].psName); - for (code = 0; code < 256; ++code) { - if ((charName = ((Gfx8BitFont *)font)->getCharName(code)) && - charName[0] == 'm' && charName[1] == '\0') { - break; - } - } - if (code < 256) { - w1 = ((Gfx8BitFont *)font)->getWidth(code); - } else { - w1 = 0; - } - w2 = psSubstFonts[i].mWidth; - xs = w1 / w2; - if (xs < 0.1) { - xs = 1; - } - } else { - psName = new GooString(name); - xs = 1; - } - if (font->getType() == fontType3) { - // This is a hack which makes it possible to substitute for some - // Type 3 fonts. The problem is that it's impossible to know what - // the base coordinate system used in the font is without actually - // rendering the font. - ys = xs; - fm = font->getFontMatrix(); - if (fm[0] != 0) { - ys *= fm[3] / fm[0]; - } - } else { - ys = 1; - } - } - - // do 16-bit font substitution - } else if ((fontParam = globalParams-> - getPSFont16(font->getName(), - ((GfxCIDFont *)font)->getCollection(), - font->getWMode()))) { - subst = gTrue; - psName = fontParam->psFontName->copy(); - if (font16EncLen >= font16EncSize) { - font16EncSize += 16; - font16Enc = (PSFont16Enc *)greallocn(font16Enc, - font16EncSize, sizeof(PSFont16Enc)); - } - font16Enc[font16EncLen].fontID = *font->getID(); - font16Enc[font16EncLen].enc = fontParam->encoding->copy(); - if ((uMap = globalParams->getUnicodeMap(font16Enc[font16EncLen].enc))) { - uMap->decRefCnt(); - ++font16EncLen; - } else { - error(-1, "Couldn't find Unicode map for 16-bit font encoding '%s'", - font16Enc[font16EncLen].enc->getCString()); - } - - // try the display font for embedding - } else if (globalParams->getPSEmbedCIDTrueType() && - ((GfxCIDFont *)font)->getCollection() && - (dfp = globalParams-> - getDisplayFont(font)) && - dfp->kind == displayFontTT) { - psName = setupExternalCIDTrueTypeFont(font, dfp->tt.fileName, dfp->tt.faceIndex); - - // give up - can't do anything with this font - } else { - error(-1, "Couldn't find a font to substitute for '%s' ('%s' character collection)", - font->getName() ? font->getName()->getCString() : "(unnamed)", - ((GfxCIDFont *)font)->getCollection() - ? ((GfxCIDFont *)font)->getCollection()->getCString() - : "(unknown)"); - return; - } - - // generate PostScript code to set up the font - if (font->isCIDFont()) { - if (level == psLevel3 || level == psLevel3Sep) { - writePSFmt("/F{0:d}_{1:d} /{2:t} {3:d} pdfMakeFont16L3\n", - font->getID()->num, font->getID()->gen, psName, - font->getWMode()); - } else { - writePSFmt("/F{0:d}_{1:d} /{2:t} {3:d} pdfMakeFont16\n", - font->getID()->num, font->getID()->gen, psName, - font->getWMode()); - } - } else { - writePSFmt("/F{0:d}_{1:d} /{2:t} {3:.6g} {4:.6g}\n", - font->getID()->num, font->getID()->gen, psName, xs, ys); - for (i = 0; i < 256; i += 8) { - writePS((char *)((i == 0) ? "[ " : " ")); - for (j = 0; j < 8; ++j) { - if (font->getType() == fontTrueType && - !subst && - !((Gfx8BitFont *)font)->getHasEncoding()) { - sprintf(buf, "c%02x", i+j); - charName = buf; - } else { - charName = ((Gfx8BitFont *)font)->getCharName(i+j); - // this is a kludge for broken PDF files that encode char 32 - // as .notdef - if (i+j == 32 && charName && !strcmp(charName, ".notdef")) { - charName = "space"; - } - } - writePS("/"); - writePSName(charName ? charName : (char *)".notdef"); - // the empty name is legal in PDF and PostScript, but PostScript - // uses a double-slash (//...) for "immediately evaluated names", - // so we need to add a space character here - if (charName && !charName[0]) { - writePS(" "); - } - } - writePS((i == 256-8) ? (char *)"]\n" : (char *)"\n"); - } - writePS("pdfMakeFont\n"); - } - - delete psName; -} - -void PSOutputDev::setupEmbeddedType1Font(Ref *id, GooString *psName) { - static const char hexChar[17] = "0123456789abcdef"; - Object refObj, strObj, obj1, obj2, obj3; - Dict *dict; - int length1, length2, length3; - int c; - int start[4]; - GBool binMode; - GBool writePadding = gTrue; - int i; - - // check if font is already embedded - for (i = 0; i < fontFileIDLen; ++i) { - if (fontFileIDs[i].num == id->num && - fontFileIDs[i].gen == id->gen) - return; - } - - // add entry to fontFileIDs list - if (fontFileIDLen >= fontFileIDSize) { - fontFileIDSize += 64; - fontFileIDs = (Ref *)greallocn(fontFileIDs, fontFileIDSize, sizeof(Ref)); - } - fontFileIDs[fontFileIDLen++] = *id; - - // get the font stream and info - refObj.initRef(id->num, id->gen); - refObj.fetch(xref, &strObj); - refObj.free(); - if (!strObj.isStream()) { - error(-1, "Embedded font file object is not a stream"); - goto err1; - } - if (!(dict = strObj.streamGetDict())) { - error(-1, "Embedded font stream is missing its dictionary"); - goto err1; - } - dict->lookup("Length1", &obj1); - dict->lookup("Length2", &obj2); - dict->lookup("Length3", &obj3); - if (!obj1.isInt() || !obj2.isInt() || !obj3.isInt()) { - error(-1, "Missing length fields in embedded font stream dictionary"); - obj1.free(); - obj2.free(); - obj3.free(); - goto err1; - } - length1 = obj1.getInt(); - length2 = obj2.getInt(); - length3 = obj3.getInt(); - obj1.free(); - obj2.free(); - obj3.free(); - - // beginning comment - writePSFmt("%%BeginResource: font {0:t}\n", psName); - embFontList->append("%%+ font "); - embFontList->append(psName->getCString()); - embFontList->append("\n"); - - // copy ASCII portion of font - strObj.streamReset(); - for (i = 0; i < length1 && (c = strObj.streamGetChar()) != EOF; ++i) { - writePSChar(c); - } - - // figure out if encrypted portion is binary or ASCII - binMode = gFalse; - for (i = 0; i < 4; ++i) { - start[i] = strObj.streamGetChar(); - if (start[i] == EOF) { - error(-1, "Unexpected end of file in embedded font stream"); - goto err1; - } - if (!((start[i] >= '0' && start[i] <= '9') || - (start[i] >= 'A' && start[i] <= 'F') || - (start[i] >= 'a' && start[i] <= 'f'))) - binMode = gTrue; - } - - if (length2 == 0) - { - // length2 == 0 is an error - // trying to solve it by just piping all - // the stream data - error(-1, "Font has length2 as 0, trying to overcome the problem reading the stream until the end"); - length2 = INT_MAX; - writePadding = gFalse; - } - - - // convert binary data to ASCII - if (binMode) { - for (i = 0; i < 4; ++i) { - writePSChar(hexChar[(start[i] >> 4) & 0x0f]); - writePSChar(hexChar[start[i] & 0x0f]); - } -#if 0 // this causes trouble for various PostScript printers - // if Length2 is incorrect (too small), font data gets chopped, so - // we take a few extra characters from the trailer just in case - length2 += length3 >= 8 ? 8 : length3; -#endif - while (i < length2) { - if ((c = strObj.streamGetChar()) == EOF) { - break; - } - writePSChar(hexChar[(c >> 4) & 0x0f]); - writePSChar(hexChar[c & 0x0f]); - if (++i % 32 == 0) { - writePSChar('\n'); - } - } - if (i % 32 > 0) { - writePSChar('\n'); - } - - // already in ASCII format -- just copy it - } else { - for (i = 0; i < 4; ++i) { - writePSChar(start[i]); - } - for (i = 4; i < length2; ++i) { - if ((c = strObj.streamGetChar()) == EOF) { - break; - } - writePSChar(c); - } - } - - if (writePadding) - { - if (length3 > 0) { - // write fixed-content portion - while ((c = strObj.streamGetChar()) != EOF) { - writePSChar(c); - } - } else { - // write padding and "cleartomark" - for (i = 0; i < 8; ++i) { - writePS("00000000000000000000000000000000" - "00000000000000000000000000000000\n"); - } - writePS("cleartomark\n"); - } - } - - // ending comment - writePS("%%EndResource\n"); - - err1: - strObj.streamClose(); - strObj.free(); -} - -//~ This doesn't handle .pfb files or binary eexec data (which only -//~ happens in pfb files?). -void PSOutputDev::setupExternalType1Font(GooString *fileName, GooString *psName) { - FILE *fontFile; - int c; - int i; - - // check if font is already embedded - for (i = 0; i < fontFileNameLen; ++i) { - if (!fontFileNames[i]->cmp(fileName)) { - return; - } - } - - // add entry to fontFileNames list - if (fontFileNameLen >= fontFileNameSize) { - fontFileNameSize += 64; - fontFileNames = (GooString **)greallocn(fontFileNames, - fontFileNameSize, sizeof(GooString *)); - psFileNames = (GooString **)greallocn(psFileNames, - fontFileNameSize, sizeof(GooString *)); - } - fontFileNames[fontFileNameLen] = fileName->copy(); - psFileNames[fontFileNameLen] = psName->copy(); - fontFileNameLen++; - - // beginning comment - writePSFmt("%%BeginResource: font {0:t}\n", psName); - embFontList->append("%%+ font "); - embFontList->append(psName->getCString()); - embFontList->append("\n"); - - // copy the font file - if (!(fontFile = fopen(fileName->getCString(), "rb"))) { - error(-1, "Couldn't open external font file"); - return; - } - while ((c = fgetc(fontFile)) != EOF) { - writePSChar(c); - } - fclose(fontFile); - - // ending comment - writePS("%%EndResource\n"); -} - -void PSOutputDev::setupEmbeddedType1CFont(GfxFont *font, Ref *id, - GooString *psName) { - char *fontBuf; - int fontLen; - FoFiType1C *ffT1C; - int i; - - // check if font is already embedded - for (i = 0; i < fontFileIDLen; ++i) { - if (fontFileIDs[i].num == id->num && - fontFileIDs[i].gen == id->gen) - return; - } - - // add entry to fontFileIDs list - if (fontFileIDLen >= fontFileIDSize) { - fontFileIDSize += 64; - fontFileIDs = (Ref *)greallocn(fontFileIDs, fontFileIDSize, sizeof(Ref)); - } - fontFileIDs[fontFileIDLen++] = *id; - - // beginning comment - writePSFmt("%%BeginResource: font {0:t}\n", psName); - embFontList->append("%%+ font "); - embFontList->append(psName->getCString()); - embFontList->append("\n"); - - // convert it to a Type 1 font - fontBuf = font->readEmbFontFile(xref, &fontLen); - if ((ffT1C = FoFiType1C::make(fontBuf, fontLen))) { - ffT1C->convertToType1(psName->getCString(), NULL, gTrue, - outputFunc, outputStream); - delete ffT1C; - } - gfree(fontBuf); - - // ending comment - writePS("%%EndResource\n"); -} - -void PSOutputDev::setupEmbeddedOpenTypeT1CFont(GfxFont *font, Ref *id, - GooString *psName) { - char *fontBuf; - int fontLen; - FoFiTrueType *ffTT; - int i; - - // check if font is already embedded - for (i = 0; i < fontFileIDLen; ++i) { - if (fontFileIDs[i].num == id->num && - fontFileIDs[i].gen == id->gen) - return; - } - - // add entry to fontFileIDs list - if (fontFileIDLen >= fontFileIDSize) { - fontFileIDSize += 64; - fontFileIDs = (Ref *)greallocn(fontFileIDs, fontFileIDSize, sizeof(Ref)); - } - fontFileIDs[fontFileIDLen++] = *id; - - // beginning comment - writePSFmt("%%BeginResource: font {0:t}\n", psName); - embFontList->append("%%+ font "); - embFontList->append(psName->getCString()); - embFontList->append("\n"); - - // convert it to a Type 1 font - fontBuf = font->readEmbFontFile(xref, &fontLen); - if ((ffTT = FoFiTrueType::make(fontBuf, fontLen))) { - if (ffTT->isOpenTypeCFF()) { - ffTT->convertToType1(psName->getCString(), NULL, gTrue, - outputFunc, outputStream); - } - delete ffTT; - } - gfree(fontBuf); - - // ending comment - writePS("%%EndResource\n"); -} - -void PSOutputDev::setupEmbeddedTrueTypeFont(GfxFont *font, Ref *id, - GooString *psName) { - char *fontBuf; - int fontLen; - FoFiTrueType *ffTT; - Gushort *codeToGID; - int i; - - // check if font is already embedded - for (i = 0; i < fontFileIDLen; ++i) { - if (fontFileIDs[i].num == id->num && - fontFileIDs[i].gen == id->gen) { - psName->appendf("_{0:d}", nextTrueTypeNum++); - break; - } - } - - // add entry to fontFileIDs list - if (i == fontFileIDLen) { - if (fontFileIDLen >= fontFileIDSize) { - fontFileIDSize += 64; - fontFileIDs = (Ref *)greallocn(fontFileIDs, fontFileIDSize, sizeof(Ref)); - } - fontFileIDs[fontFileIDLen++] = *id; - } - - // beginning comment - writePSFmt("%%BeginResource: font {0:t}\n", psName); - embFontList->append("%%+ font "); - embFontList->append(psName->getCString()); - embFontList->append("\n"); - - // convert it to a Type 42 font - fontBuf = font->readEmbFontFile(xref, &fontLen); - if ((ffTT = FoFiTrueType::make(fontBuf, fontLen))) { - codeToGID = ((Gfx8BitFont *)font)->getCodeToGIDMap(ffTT); - ffTT->convertToType42(psName->getCString(), - ((Gfx8BitFont *)font)->getHasEncoding() - ? ((Gfx8BitFont *)font)->getEncoding() - : (char **)NULL, - codeToGID, outputFunc, outputStream); - if (codeToGID) { - if (font8InfoLen >= font8InfoSize) { - font8InfoSize += 16; - font8Info = (PSFont8Info *)greallocn(font8Info, - font8InfoSize, - sizeof(PSFont8Info)); - } - font8Info[font8InfoLen].fontID = *font->getID(); - font8Info[font8InfoLen].codeToGID = codeToGID; - ++font8InfoLen; - } - delete ffTT; - } - gfree(fontBuf); - - // ending comment - writePS("%%EndResource\n"); -} - -GooString *PSOutputDev::setupExternalTrueTypeFont(GfxFont *font) { - GooString *fileName; - char *fontBuf; - int fontLen; - FoFiTrueType *ffTT; - Gushort *codeToGID; - GooString *psName; - int i; - - // check if font is already embedded - fileName = font->getExtFontFile(); - for (i = 0; i < fontFileNameLen; ++i) { - if (!fontFileNames[i]->cmp(fileName)) { - return psFileNames[i]->copy(); - } - } - - psName = font->getName()->sanitizedName(gTrue /* ps mode */); - // add entry to fontFileNames list - if (i == fontFileNameLen) { - if (fontFileNameLen >= fontFileNameSize) { - fontFileNameSize += 64; - fontFileNames = - (GooString **)greallocn(fontFileNames, - fontFileNameSize, sizeof(GooString *)); - psFileNames = - (GooString **)greallocn(psFileNames, - fontFileNameSize, sizeof(GooString *)); - } - fontFileNames[fontFileNameLen] = fileName->copy(); - psFileNames[fontFileNameLen] = psName->copy(); - fontFileNameLen++; - } - - // beginning comment - writePSFmt("%%BeginResource: font {0:t}\n", psName); - embFontList->append("%%+ font "); - embFontList->append(psName->getCString()); - embFontList->append("\n"); - - // convert it to a Type 42 font - fontBuf = font->readExtFontFile(&fontLen); - if ((ffTT = FoFiTrueType::make(fontBuf, fontLen))) { - codeToGID = ((Gfx8BitFont *)font)->getCodeToGIDMap(ffTT); - ffTT->convertToType42(psName->getCString(), - ((Gfx8BitFont *)font)->getHasEncoding() - ? ((Gfx8BitFont *)font)->getEncoding() - : (char **)NULL, - codeToGID, outputFunc, outputStream); - if (codeToGID) { - if (font8InfoLen >= font8InfoSize) { - font8InfoSize += 16; - font8Info = (PSFont8Info *)greallocn(font8Info, - font8InfoSize, - sizeof(PSFont8Info)); - } - font8Info[font8InfoLen].fontID = *font->getID(); - font8Info[font8InfoLen].codeToGID = codeToGID; - ++font8InfoLen; - } - delete ffTT; - } - gfree(fontBuf); - - // ending comment - writePS("%%EndResource\n"); - return psName; -} - -GooString *PSOutputDev::setupExternalCIDTrueTypeFont(GfxFont *font, GooString *fileName, int faceIndex) { - FoFiTrueType *ffTT; - Gushort *codeToGID; - GooString *psName; - int i; - GooString *myFileName; - - myFileName = fileName->copy(); - if (faceIndex > 0) { - char tmp[32]; - sprintf(tmp, ",%d", faceIndex); - myFileName->append(tmp); - } - // check if font is already embedded - for (i = 0; i < fontFileNameLen; ++i) { - if (!fontFileNames[i]->cmp(myFileName)) { - delete myFileName; - return psFileNames[i]->copy(); - } - } - - psName = font->getName()->sanitizedName(gTrue /* ps mode */); - // add entry to fontFileNames list - if (i == fontFileNameLen) { - if (fontFileNameLen >= fontFileNameSize) { - fontFileNameSize += 64; - fontFileNames = - (GooString **)grealloc(fontFileNames, - fontFileNameSize * sizeof(GooString *)); - psFileNames = - (GooString **)grealloc(psFileNames, - fontFileNameSize * sizeof(GooString *)); - } - } - fontFileNames[fontFileNameLen] = myFileName; - psFileNames[fontFileNameLen] = psName->copy(); - fontFileNameLen++; - - // beginning comment - writePSFmt("%%BeginResource: font {0:t}\n", psName); - embFontList->append("%%+ font "); - embFontList->append(psName->getCString()); - embFontList->append("\n"); - - // convert it to a CID type2 font - if ((ffTT = FoFiTrueType::load(fileName->getCString(), faceIndex))) { - int n = ((GfxCIDFont *)font)->getCIDToGIDLen(); - if (n) { - codeToGID = (Gushort *)gmallocn(n, sizeof(Gushort)); - memcpy(codeToGID, ((GfxCIDFont *)font)->getCIDToGID(), n * sizeof(Gushort)); - } else { - codeToGID = ((GfxCIDFont *)font)->getCodeToGIDMap(ffTT, &n); - } - if (globalParams->getPSLevel() >= psLevel3) { - // Level 3: use a CID font - ffTT->convertToCIDType2(psName->getCString(), - codeToGID, n, gTrue, - outputFunc, outputStream); - } else { - // otherwise: use a non-CID composite font - ffTT->convertToType0(psName->getCString(), - codeToGID, n, gTrue, - outputFunc, outputStream); - } - gfree(codeToGID); - delete ffTT; - } - - // ending comment - writePS("%%EndResource\n"); - return psName; -} - -void PSOutputDev::setupEmbeddedCIDType0Font(GfxFont *font, Ref *id, - GooString *psName) { - char *fontBuf; - int fontLen; - FoFiType1C *ffT1C; - int i; - - // check if font is already embedded - for (i = 0; i < fontFileIDLen; ++i) { - if (fontFileIDs[i].num == id->num && - fontFileIDs[i].gen == id->gen) - return; - } - - // add entry to fontFileIDs list - if (fontFileIDLen >= fontFileIDSize) { - fontFileIDSize += 64; - fontFileIDs = (Ref *)greallocn(fontFileIDs, fontFileIDSize, sizeof(Ref)); - } - fontFileIDs[fontFileIDLen++] = *id; - - // beginning comment - writePSFmt("%%BeginResource: font {0:t}\n", psName); - embFontList->append("%%+ font "); - embFontList->append(psName->getCString()); - embFontList->append("\n"); - - // convert it to a Type 0 font - fontBuf = font->readEmbFontFile(xref, &fontLen); - if ((ffT1C = FoFiType1C::make(fontBuf, fontLen))) { - if (globalParams->getPSLevel() >= psLevel3) { - // Level 3: use a CID font - ffT1C->convertToCIDType0(psName->getCString(), outputFunc, outputStream); - } else { - // otherwise: use a non-CID composite font - ffT1C->convertToType0(psName->getCString(), outputFunc, outputStream); - } - delete ffT1C; - } - gfree(fontBuf); - - // ending comment - writePS("%%EndResource\n"); -} - -void PSOutputDev::setupEmbeddedCIDTrueTypeFont(GfxFont *font, Ref *id, - GooString *psName, - GBool needVerticalMetrics) { - char *fontBuf; - int fontLen; - FoFiTrueType *ffTT; - int i; - - // check if font is already embedded - for (i = 0; i < fontFileIDLen; ++i) { - if (fontFileIDs[i].num == id->num && - fontFileIDs[i].gen == id->gen) { - psName->appendf("_{0:d}", nextTrueTypeNum++); - break; - } - } - - // add entry to fontFileIDs list - if (fontFileIDLen >= fontFileIDSize) { - fontFileIDSize += 64; - fontFileIDs = (Ref *)greallocn(fontFileIDs, fontFileIDSize, sizeof(Ref)); - } - fontFileIDs[fontFileIDLen++] = *id; - - // beginning comment - writePSFmt("%%BeginResource: font {0:t}\n", psName); - embFontList->append("%%+ font "); - embFontList->append(psName->getCString()); - embFontList->append("\n"); - - // convert it to a Type 0 font - fontBuf = font->readEmbFontFile(xref, &fontLen); - if ((ffTT = FoFiTrueType::make(fontBuf, fontLen))) { - if (globalParams->getPSLevel() >= psLevel3) { - // Level 3: use a CID font - ffTT->convertToCIDType2(psName->getCString(), - ((GfxCIDFont *)font)->getCIDToGID(), - ((GfxCIDFont *)font)->getCIDToGIDLen(), - needVerticalMetrics, - outputFunc, outputStream); - } else { - // otherwise: use a non-CID composite font - ffTT->convertToType0(psName->getCString(), - ((GfxCIDFont *)font)->getCIDToGID(), - ((GfxCIDFont *)font)->getCIDToGIDLen(), - needVerticalMetrics, - outputFunc, outputStream); - } - delete ffTT; - } - gfree(fontBuf); - - // ending comment - writePS("%%EndResource\n"); -} - -void PSOutputDev::setupEmbeddedOpenTypeCFFFont(GfxFont *font, Ref *id, - GooString *psName) { - char *fontBuf; - int fontLen; - FoFiTrueType *ffTT; - int i; - - // check if font is already embedded - for (i = 0; i < fontFileIDLen; ++i) { - if (fontFileIDs[i].num == id->num && - fontFileIDs[i].gen == id->gen) - return; - } - - // add entry to fontFileIDs list - if (fontFileIDLen >= fontFileIDSize) { - fontFileIDSize += 64; - fontFileIDs = (Ref *)greallocn(fontFileIDs, fontFileIDSize, sizeof(Ref)); - } - fontFileIDs[fontFileIDLen++] = *id; - - // beginning comment - writePSFmt("%%BeginResource: font {0:t}\n", psName); - embFontList->append("%%+ font "); - embFontList->append(psName->getCString()); - embFontList->append("\n"); - - // convert it to a Type 0 font - fontBuf = font->readEmbFontFile(xref, &fontLen); - if ((ffTT = FoFiTrueType::make(fontBuf, fontLen))) { - if (ffTT->isOpenTypeCFF()) { - if (globalParams->getPSLevel() >= psLevel3) { - // Level 3: use a CID font - ffTT->convertToCIDType0(psName->getCString(), - outputFunc, outputStream); - } else { - // otherwise: use a non-CID composite font - ffTT->convertToType0(psName->getCString(), outputFunc, outputStream); - } - } - delete ffTT; - } - gfree(fontBuf); - - // ending comment - writePS("%%EndResource\n"); -} - -void PSOutputDev::setupType3Font(GfxFont *font, GooString *psName, - Dict *parentResDict) { - Dict *resDict; - Dict *charProcs; - Object charProc; - Gfx *gfx; - PDFRectangle box; - double *m; - GooString *buf; - int i; - - // set up resources used by font - if ((resDict = ((Gfx8BitFont *)font)->getResources())) { - inType3Char = gTrue; - setupResources(resDict); - inType3Char = gFalse; - } else { - resDict = parentResDict; - } - - // beginning comment - writePSFmt("%%BeginResource: font {0:t}\n", psName); - embFontList->append("%%+ font "); - embFontList->append(psName->getCString()); - embFontList->append("\n"); - - // font dictionary - writePS("8 dict begin\n"); - writePS("/FontType 3 def\n"); - m = font->getFontMatrix(); - writePSFmt("/FontMatrix [{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] def\n", - m[0], m[1], m[2], m[3], m[4], m[5]); - m = font->getFontBBox(); - writePSFmt("/FontBBox [{0:.6g} {1:.6g} {2:.6g} {3:.6g}] def\n", - m[0], m[1], m[2], m[3]); - writePS("/Encoding 256 array def\n"); - writePS(" 0 1 255 { Encoding exch /.notdef put } for\n"); - writePS("/BuildGlyph {\n"); - writePS(" exch /CharProcs get exch\n"); - writePS(" 2 copy known not { pop /.notdef } if\n"); - writePS(" get exec\n"); - writePS("} bind def\n"); - writePS("/BuildChar {\n"); - writePS(" 1 index /Encoding get exch get\n"); - writePS(" 1 index /BuildGlyph get exec\n"); - writePS("} bind def\n"); - if ((charProcs = ((Gfx8BitFont *)font)->getCharProcs())) { - writePSFmt("/CharProcs {0:d} dict def\n", charProcs->getLength()); - writePS("CharProcs begin\n"); - box.x1 = m[0]; - box.y1 = m[1]; - box.x2 = m[2]; - box.y2 = m[3]; - gfx = new Gfx(xref, this, resDict, m_catalog, &box, NULL); - inType3Char = gTrue; - for (i = 0; i < charProcs->getLength(); ++i) { - t3Cacheable = gFalse; - t3NeedsRestore = gFalse; - writePS("/"); - writePSName(charProcs->getKey(i)); - writePS(" {\n"); - gfx->display(charProcs->getVal(i, &charProc)); - charProc.free(); - if (t3String) { - if (t3Cacheable) { - buf = GooString::format("{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g} setcachedevice\n", - t3WX, t3WY, t3LLX, t3LLY, t3URX, t3URY); - } else { - buf = GooString::format("{0:.6g} {1:.6g} setcharwidth\n", t3WX, t3WY); - } - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, t3String->getCString(), - t3String->getLength()); - delete t3String; - t3String = NULL; - } - if (t3NeedsRestore) { - (*outputFunc)(outputStream, "Q\n", 2); - } - writePS("} def\n"); - } - inType3Char = gFalse; - delete gfx; - writePS("end\n"); - } - writePS("currentdict end\n"); - writePSFmt("/{0:t} exch definefont pop\n", psName); - - // ending comment - writePS("%%EndResource\n"); -} - -void PSOutputDev::setupImages(Dict *resDict) { - Object xObjDict, xObj, xObjRef, subtypeObj; - int i; - - if (!(mode == psModeForm || inType3Char || preload)) { - return; - } - - //----- recursively scan XObjects - resDict->lookup("XObject", &xObjDict); - if (xObjDict.isDict()) { - for (i = 0; i < xObjDict.dictGetLength(); ++i) { - xObjDict.dictGetValNF(i, &xObjRef); - xObjDict.dictGetVal(i, &xObj); - if (xObj.isStream()) { - xObj.streamGetDict()->lookup("Subtype", &subtypeObj); - if (subtypeObj.isName("Image")) { - if (xObjRef.isRef()) { - setupImage(xObjRef.getRef(), xObj.getStream()); - } else { - error(-1, "Image in resource dict is not an indirect reference"); - } - } - subtypeObj.free(); - } - xObj.free(); - xObjRef.free(); - } - } - xObjDict.free(); -} - -void PSOutputDev::setupImage(Ref id, Stream *str) { - GBool useRLE, useCompressed, useASCIIHex; - GooString *s; - int c; - int size, line, col, i; - int outerSize, outer; - - // check if image is already setup - for (i = 0; i < imgIDLen; ++i) { - if (imgIDs[i].num == id.num && imgIDs[i].gen == id.gen) { - return; - } - } - - // add entry to imgIDs list - if (imgIDLen >= imgIDSize) { - if (imgIDSize == 0) { - imgIDSize = 64; - } else { - imgIDSize *= 2; - } - imgIDs = (Ref *)greallocn(imgIDs, imgIDSize, sizeof(Ref)); - } - imgIDs[imgIDLen++] = id; - - // filters - //~ this does not correctly handle the DeviceN color space - //~ -- need to use DeviceNRecoder - if (level < psLevel2) { - useRLE = gFalse; - useCompressed = gFalse; - useASCIIHex = gTrue; - } else { - s = str->getPSFilter(level < psLevel3 ? 2 : 3, ""); - if (s) { - useRLE = gFalse; - useCompressed = gTrue; - delete s; - } else { - useRLE = gTrue; - useCompressed = gFalse; - } - useASCIIHex = level == psLevel1 || level == psLevel1Sep || - globalParams->getPSASCIIHex(); - } - if (useCompressed) { - str = str->getUndecodedStream(); - } - if (useRLE) { - str = new RunLengthEncoder(str); - } - if (useASCIIHex) { - str = new ASCIIHexEncoder(str); - } else { - str = new ASCII85Encoder(str); - } - - // compute image data size - str->reset(); - col = size = 0; - do { - do { - c = str->getChar(); - } while (c == '\n' || c == '\r'); - if (c == (useASCIIHex ? '>' : '~') || c == EOF) { - break; - } - if (c == 'z') { - ++col; - } else { - ++col; - for (i = 1; i <= (useASCIIHex ? 1 : 4); ++i) { - do { - c = str->getChar(); - } while (c == '\n' || c == '\r'); - if (c == (useASCIIHex ? '>' : '~') || c == EOF) { - break; - } - ++col; - } - if (c == (useASCIIHex ? '>' : '~') || c == EOF) { - break; - } - } - if (col > 225) { - ++size; - col = 0; - } - } while (c != (useASCIIHex ? '>' : '~') && c != EOF); - // add one entry for the final line of data; add another entry - // because the RunLengthDecode filter may read past the end - ++size; - if (useRLE) { - ++size; - } - outerSize = size/65535 + 1; - - writePSFmt("{0:d} array dup /ImData_{1:d}_{2:d} exch def\n", - outerSize, id.num, id.gen); - str->close(); - - // write the data into the array - str->reset(); - for (outer = 0;outer < outerSize;outer++) { - int innerSize = size > 65535 ? 65535 : size; - - // put the inner array into the outer array - writePSFmt("{0:d} array 1 index {1:d} 2 index put\n", - innerSize, outer); - line = col = 0; - writePS((char *)(useASCIIHex ? "dup 0 <" : "dup 0 <~")); - for (;;) { - do { - c = str->getChar(); - } while (c == '\n' || c == '\r'); - if (c == (useASCIIHex ? '>' : '~') || c == EOF) { - break; - } - if (c == 'z') { - writePSChar(c); - ++col; - } else { - writePSChar(c); - ++col; - for (i = 1; i <= (useASCIIHex ? 1 : 4); ++i) { - do { - c = str->getChar(); - } while (c == '\n' || c == '\r'); - if (c == (useASCIIHex ? '>' : '~') || c == EOF) { - break; - } - writePSChar(c); - ++col; - } - } - if (c == (useASCIIHex ? '>' : '~') || c == EOF) { - break; - } - // each line is: "dup nnnnn <~...data...~> put<eol>" - // so max data length = 255 - 20 = 235 - // chunks are 1 or 4 bytes each, so we have to stop at 232 - // but make it 225 just to be safe - if (col > 225) { - writePS((char *)(useASCIIHex ? "> put\n" : "~> put\n")); - ++line; - if (line >= innerSize) break; - writePSFmt((char *)(useASCIIHex ? "dup {0:d} <" : "dup {0:d} <~"), line); - col = 0; - } - } - if (c == (useASCIIHex ? '>' : '~') || c == EOF) { - writePS((char *)(useASCIIHex ? "> put\n" : "~> put\n")); - if (useRLE) { - ++line; - writePSFmt("{0:d} <> put\n", line); - } else { - writePS("pop\n"); - } - break; - } - writePS("pop\n"); - size -= innerSize; - } - writePS("pop\n"); - str->close(); - - delete str; -} - -void PSOutputDev::setupForms(Dict *resDict) { - Object xObjDict, xObj, xObjRef, subtypeObj; - int i; - - if (!preload) { - return; - } - - resDict->lookup("XObject", &xObjDict); - if (xObjDict.isDict()) { - for (i = 0; i < xObjDict.dictGetLength(); ++i) { - xObjDict.dictGetValNF(i, &xObjRef); - xObjDict.dictGetVal(i, &xObj); - if (xObj.isStream()) { - xObj.streamGetDict()->lookup("Subtype", &subtypeObj); - if (subtypeObj.isName("Form")) { - if (xObjRef.isRef()) { - setupForm(xObjRef.getRef(), &xObj); - } else { - error(-1, "Form in resource dict is not an indirect reference"); - } - } - subtypeObj.free(); - } - xObj.free(); - xObjRef.free(); - } - } - xObjDict.free(); -} - -void PSOutputDev::setupForm(Ref id, Object *strObj) { - Dict *dict, *resDict; - Object matrixObj, bboxObj, resObj, obj1; - double m[6], bbox[4]; - PDFRectangle box; - Gfx *gfx; - int i; - - // check if form is already defined - for (i = 0; i < formIDLen; ++i) { - if (formIDs[i].num == id.num && formIDs[i].gen == id.gen) { - return; - } - } - - // add entry to formIDs list - if (formIDLen >= formIDSize) { - if (formIDSize == 0) { - formIDSize = 64; - } else { - formIDSize *= 2; - } - formIDs = (Ref *)greallocn(formIDs, formIDSize, sizeof(Ref)); - } - formIDs[formIDLen++] = id; - - dict = strObj->streamGetDict(); - - // get bounding box - dict->lookup("BBox", &bboxObj); - if (!bboxObj.isArray()) { - bboxObj.free(); - error(-1, "Bad form bounding box"); - return; - } - for (i = 0; i < 4; ++i) { - bboxObj.arrayGet(i, &obj1); - bbox[i] = obj1.getNum(); - obj1.free(); - } - bboxObj.free(); - - // get matrix - dict->lookup("Matrix", &matrixObj); - if (matrixObj.isArray()) { - for (i = 0; i < 6; ++i) { - matrixObj.arrayGet(i, &obj1); - m[i] = obj1.getNum(); - obj1.free(); - } - } else { - m[0] = 1; m[1] = 0; - m[2] = 0; m[3] = 1; - m[4] = 0; m[5] = 0; - } - matrixObj.free(); - - // get resources - dict->lookup("Resources", &resObj); - resDict = resObj.isDict() ? resObj.getDict() : (Dict *)NULL; - - writePSFmt("/f_{0:d}_{1:d} {{\n", id.num, id.gen); - writePS("q\n"); - writePSFmt("[{0:.6gs} {1:.6gs} {2:.6gs} {3:.6gs} {4:.6gs} {5:.6gs}] cm\n", - m[0], m[1], m[2], m[3], m[4], m[5]); - - box.x1 = bbox[0]; - box.y1 = bbox[1]; - box.x2 = bbox[2]; - box.y2 = bbox[3]; - gfx = new Gfx(xref, this, resDict, m_catalog, &box, &box); - gfx->display(strObj); - delete gfx; - - writePS("Q\n"); - writePS("} def\n"); - - resObj.free(); -} - -GBool PSOutputDev::checkPageSlice(Page *page, double /*hDPI*/, double /*vDPI*/, - int rotateA, GBool useMediaBox, GBool crop, - int sliceX, int sliceY, - int sliceW, int sliceH, - GBool printing, Catalog *catalog, - GBool (*abortCheckCbk)(void *data), - void *abortCheckCbkData) { -#if HAVE_SPLASH - PreScanOutputDev *scan; - GBool rasterize; - SplashOutputDev *splashOut; - SplashColor paperColor; - PDFRectangle box; - GfxState *state; - SplashBitmap *bitmap; - Stream *str0, *str; - Object obj; - Guchar *p; - Guchar col[4]; - double m0, m1, m2, m3, m4, m5; - int c, w, h, x, y, comp, i; - double splashDPI; - char hexBuf[32*2 + 2]; // 32 values X 2 chars/value + line ending + null - Guchar digit; - GBool useBinary; - GBool isGray; - int compCyan; - - if (!forceRasterize) { - scan = new PreScanOutputDev(xref); - page->displaySlice(scan, 72, 72, rotateA, useMediaBox, crop, - sliceX, sliceY, sliceW, sliceH, - printing, catalog, abortCheckCbk, abortCheckCbkData); - rasterize = scan->usesTransparency() || scan->hasLevel1PSBug(); - delete scan; - } else { - rasterize = gTrue; - } - if (!rasterize) { - return gTrue; - } - - // rasterize the page - if (level == psLevel1) { - paperColor[0] = 0xff; - splashOut = new SplashOutputDev(splashModeMono8, 1, gFalse, - paperColor, gTrue, gFalse); -#if SPLASH_CMYK - } else if (level == psLevel1Sep || level == psLevel2Sep || level == psLevel3Sep) { - paperColor[0] = paperColor[1] = paperColor[2] = paperColor[3] = 0; - splashOut = new SplashOutputDev(splashModeCMYK8, 1, gFalse, - paperColor, gTrue, gFalse); -#else - } else if (level == psLevel1Sep || level == psLevel2Sep || level == psLevel3Sep) { - error(-1, "pdftops was built without CMYK support, levelnsep needs it to work in this file"); - return gFalse; -#endif - } else { - paperColor[0] = paperColor[1] = paperColor[2] = 0xff; - splashOut = new SplashOutputDev(splashModeRGB8, 1, gFalse, - paperColor, gTrue, gFalse); - } - splashOut->startDoc(xref); - splashDPI = globalParams->getSplashResolution(); - if (splashDPI < 1.0) { - splashDPI = defaultSplashDPI; - } - page->displaySlice(splashOut, splashDPI, splashDPI, rotateA, - useMediaBox, crop, - sliceX, sliceY, sliceW, sliceH, - printing, catalog, abortCheckCbk, abortCheckCbkData); - - // start the PS page - page->makeBox(splashDPI, splashDPI, rotateA, useMediaBox, gFalse, - sliceX, sliceY, sliceW, sliceH, &box, &crop); - rotateA += page->getRotate(); - if (rotateA >= 360) { - rotateA -= 360; - } else if (rotateA < 0) { - rotateA += 360; - } - state = new GfxState(splashDPI, splashDPI, &box, rotateA, gFalse); - startPage(page->getNum(), state); - delete state; - switch (rotateA) { - case 0: - default: // this should never happen - m0 = box.x2 - box.x1; - m1 = 0; - m2 = 0; - m3 = box.y2 - box.y1; - m4 = box.x1; - m5 = box.y1; - break; - case 90: - m0 = 0; - m1 = box.y2 - box.y1; - m2 = -(box.x2 - box.x1); - m3 = 0; - m4 = box.x2; - m5 = box.y1; - break; - case 180: - m0 = -(box.x2 - box.x1); - m1 = 0; - m2 = 0; - m3 = -(box.y2 - box.y1); - m4 = box.x2; - m5 = box.y2; - break; - case 270: - m0 = 0; - m1 = -(box.y2 - box.y1); - m2 = box.x2 - box.x1; - m3 = 0; - m4 = box.x1; - m5 = box.y2; - break; - } - - //~ need to add the process colors - - // draw the rasterized image - bitmap = splashOut->getBitmap(); - w = bitmap->getWidth(); - h = bitmap->getHeight(); - writePS("gsave\n"); - writePSFmt("[{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] concat\n", - m0, m1, m2, m3, m4, m5); - switch (level) { - case psLevel1: - useBinary = globalParams->getPSBinary(); - writePSFmt("{0:d} {1:d} 8 [{2:d} 0 0 {3:d} 0 {4:d}] pdfIm1{5:s}\n", - w, h, w, -h, h, - useBinary ? "Bin" : ""); - p = bitmap->getDataPtr(); - i = 0; - if (useBinary) { - for (y = 0; y < h; ++y) { - for (x = 0; x < w; ++x) { - hexBuf[i++] = *p++; - if (i >= 64) { - writePSBuf(hexBuf, i); - i = 0; - } - } - } - } else { - for (y = 0; y < h; ++y) { - for (x = 0; x < w; ++x) { - digit = *p / 16; - hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); - digit = *p++ % 16; - hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); - if (i >= 64) { - hexBuf[i++] = '\n'; - writePSBuf(hexBuf, i); - i = 0; - } - } - } - } - if (i != 0) { - if (!useBinary) { - hexBuf[i++] = '\n'; - } - writePSBuf(hexBuf, i); - } - break; - case psLevel1Sep: - useBinary = globalParams->getPSBinary(); - p = bitmap->getDataPtr(); - isGray = gTrue; - for (y = 0; y < h; ++y) { - for (x = 0; x < w; ++x) { - if (p[4*x] != p[4*x + 1] || p[4*x] != p[4*x + 2]) { - isGray = gFalse; - y = h; - break; - } - } - p += bitmap->getRowSize(); - } - writePSFmt("{0:d} {1:d} 8 [{2:d} 0 0 {3:d} 0 {4:d}] pdfIm1{5:s}{6:s}\n", - w, h, w, -h, h, - isGray ? "" : "Sep", - useBinary ? "Bin" : ""); - p = bitmap->getDataPtr(); - i = 0; - col[0] = col[1] = col[2] = col[3] = 0; - if (isGray) { - int g; - if ((psProcessBlack & processColors) == 0) { - for (y = 0; y < h; ++y) { - for (x = 0; x < w; ++x) { - if (p[4*x] > 0 || p[4*x + 3] > 0) { - col[3] = 1; - y = h; - break; - } - } - p += bitmap->getRowSize(); - } - p = bitmap->getDataPtr(); - } - for (y = 0; y < h; ++y) { - if (useBinary) { - for (x = 0; x < w; ++x) { - g = p[4*x] + p[4*x + 3]; - g = 255 - g; - if (g < 0) g = 0; - hexBuf[i++] = (Guchar) g; - if (i >= 64) { - writePSBuf(hexBuf, i); - i = 0; - } - } - } else { - for (x = 0; x < w; ++x) { - g = p[4*x] + p[4*x + 3]; - g = 255 - g; - if (g < 0) g = 0; - digit = g / 16; - hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); - digit = g % 16; - hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); - if (i >= 64) { - hexBuf[i++] = '\n'; - writePSBuf(hexBuf, i); - i = 0; - } - } - } - p += bitmap->getRowSize(); - } - } else if (((psProcessCyan | psProcessMagenta | psProcessYellow | psProcessBlack) & ~processColors) != 0) { - for (y = 0; y < h; ++y) { - for (comp = 0; comp < 4; ++comp) { - if (useBinary) { - for (x = 0; x < w; ++x) { - col[comp] |= p[4*x + comp]; - hexBuf[i++] = p[4*x + comp]; - if (i >= 64) { - writePSBuf(hexBuf, i); - i = 0; - } - } - } else { - for (x = 0; x < w; ++x) { - col[comp] |= p[4*x + comp]; - digit = p[4*x + comp] / 16; - hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); - digit = p[4*x + comp] % 16; - hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); - if (i >= 64) { - hexBuf[i++] = '\n'; - writePSBuf(hexBuf, i); - i = 0; - } - } - } - } - p += bitmap->getRowSize(); - } - } else { - for (y = 0; y < h; ++y) { - for (comp = 0; comp < 4; ++comp) { - if (useBinary) { - for (x = 0; x < w; ++x) { - hexBuf[i++] = p[4*x + comp]; - if (i >= 64) { - writePSBuf(hexBuf, i); - i = 0; - } - } - } else { - for (x = 0; x < w; ++x) { - digit = p[4*x + comp] / 16; - hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); - digit = p[4*x + comp] % 16; - hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); - if (i >= 64) { - hexBuf[i++] = '\n'; - writePSBuf(hexBuf, i); - i = 0; - } - } - } - } - p += bitmap->getRowSize(); - } - } - if (i != 0) { - if (!useBinary) { - hexBuf[i++] = '\n'; - } - writePSBuf(hexBuf, i); - } - if (col[0]) { - processColors |= psProcessCyan; - } - if (col[1]) { - processColors |= psProcessMagenta; - } - if (col[2]) { - processColors |= psProcessYellow; - } - if (col[3]) { - processColors |= psProcessBlack; - } - break; - case psLevel2Sep: - case psLevel3Sep: - obj.initNull(); - str0 = new MemStream((char *)bitmap->getDataPtr(), 0, w * h * 4, &obj); - isGray = gTrue; - while ((compCyan = str0->getChar()) != EOF) { - if (str0->getChar() != compCyan || - str0->getChar() != compCyan) { - isGray = gFalse; - break; - } - str0->getChar(); - } - str0->reset(); - if (isGray) { - writePS("/DeviceGray setcolorspace\n"); - str = new RunLengthEncoder(new CMKYGrayEncoder(str0)); - } else { - processColors |= psProcessCMYK; - writePS("/DeviceCMYK setcolorspace\n"); - str = new RunLengthEncoder(str0); - } - writePS("<<\n /ImageType 1\n"); - writePSFmt(" /Width {0:d}\n", bitmap->getWidth()); - writePSFmt(" /Height {0:d}\n", bitmap->getHeight()); - writePSFmt(" /ImageMatrix [{0:d} 0 0 {1:d} 0 {2:d}]\n", w, -h, h); - writePS(" /BitsPerComponent 8\n"); - if (isGray) { - writePS(" /Decode [1 0]\n"); - } else { - writePS(" /Decode [0 1 0 1 0 1 0 1]\n"); - } - writePS(" /DataSource currentfile\n"); - useBinary = globalParams->getPSBinary(); - if (useBinary) { - /* nothing to do */; - } else if (globalParams->getPSASCIIHex()) { - writePS(" /ASCIIHexDecode filter\n"); - } else { - writePS(" /ASCII85Decode filter\n"); - } - writePS(" /RunLengthDecode filter\n"); - writePS(">>\n"); - if (useBinary) { - /* nothing to do */; - } else if (globalParams->getPSASCIIHex()) { - str = new ASCIIHexEncoder(str); - } else { - str = new ASCII85Encoder(str); - } - str->reset(); - if (useBinary) { - int len = 0; - while (str->getChar() != EOF) { - len++; - } - str->reset(); - writePSFmt("%%BeginData: {0:d} Binary Bytes\n", len+6+1); - } - writePS("image\n"); - while ((c = str->getChar()) != EOF) { - writePSChar(c); - } - if (useBinary) { - writePS("\n%%EndData\n"); - } else if (isGray) { - writePSChar('\n'); - } - str->close(); - delete str; - delete str0; - break; - case psLevel2: - case psLevel3: - writePS("/DeviceRGB setcolorspace\n"); - writePS("<<\n /ImageType 1\n"); - writePSFmt(" /Width {0:d}\n", bitmap->getWidth()); - writePSFmt(" /Height {0:d}\n", bitmap->getHeight()); - writePSFmt(" /ImageMatrix [{0:d} 0 0 {1:d} 0 {2:d}]\n", w, -h, h); - writePS(" /BitsPerComponent 8\n"); - writePS(" /Decode [0 1 0 1 0 1]\n"); - writePS(" /DataSource currentfile\n"); - if (globalParams->getPSASCIIHex()) { - writePS(" /ASCIIHexDecode filter\n"); - } else { - writePS(" /ASCII85Decode filter\n"); - } - writePS(" /RunLengthDecode filter\n"); - writePS(">>\n"); - writePS("image\n"); - obj.initNull(); - str0 = new MemStream((char *)bitmap->getDataPtr(), 0, w * h * 3, &obj); - str = new RunLengthEncoder(str0); - if (globalParams->getPSASCIIHex()) { - str = new ASCIIHexEncoder(str); - } else { - str = new ASCII85Encoder(str); - } - str->reset(); - while ((c = str->getChar()) != EOF) { - writePSChar(c); - } - str->close(); - delete str; - delete str0; - processColors |= psProcessCMYK; - break; - } - delete splashOut; - writePS("grestore\n"); - - // finish the PS page - endPage(); - - return gFalse; -#else - return gTrue; -#endif -} - -void PSOutputDev::startPage(int pageNum, GfxState *state) { - int x1, y1, x2, y2, width, height; - int imgWidth, imgHeight, imgWidth2, imgHeight2; - GBool landscape; - - - if (mode == psModePS || mode == psModePSOrigPageSizes) { - GooString pageLabel; - const GBool gotLabel = m_catalog->indexToLabel(pageNum -1, &pageLabel); - if (gotLabel) { - // See bug13338 for why we try to avoid parentheses... - GBool needParens; - GooString *filteredString = filterPSLabel(&pageLabel, &needParens); - if (needParens) { - writePSFmt("%%Page: ({0:t}) {1:d}\n", filteredString, seqPage); - } else { - writePSFmt("%%Page: {0:t} {1:d}\n", filteredString, seqPage); - } - delete filteredString; - } else { - writePSFmt("%%Page: {0:d} {1:d}\n", pageNum, seqPage); - } - if (mode != psModePSOrigPageSizes) - writePS("%%BeginPageSetup\n"); - } - - // underlays - if (underlayCbk) { - (*underlayCbk)(this, underlayCbkData); - } - if (overlayCbk) { - saveState(NULL); - } - - switch (mode) { - - case psModePSOrigPageSizes: - x1 = (int)floor(state->getX1()); - y1 = (int)floor(state->getY1()); - x2 = (int)ceil(state->getX2()); - y2 = (int)ceil(state->getY2()); - width = x2 - x1; - height = y2 - y1; - if (width > height) { - landscape = gTrue; - } else { - landscape = gFalse; - } - writePSFmt("%%PageBoundingBox: {0:d} {1:d} {2:d} {3:d}\n", x1, y1, x2 - x1, y2 - y1); - writePS("%%BeginPageSetup\n"); - writePSFmt("%%PageOrientation: {0:s}\n", - landscape ? "Landscape" : "Portrait"); - if ((width != prevWidth) || (height != prevHeight)) { - // Set page size only when it actually changes, as otherwise Duplex - // printing does not work - writePSFmt("<</PageSize [{0:d} {1:d}]>> setpagedevice\n", width, height); - prevWidth = width; - prevHeight = height; - } - writePS("pdfStartPage\n"); - writePSFmt("{0:d} {1:d} {2:d} {3:d} re W\n", x1, y1, x2 - x1, y2 - y1); - writePS("%%EndPageSetup\n"); - ++seqPage; - break; - - case psModePS: - // rotate, translate, and scale page - imgWidth = imgURX - imgLLX; - imgHeight = imgURY - imgLLY; - x1 = (int)floor(state->getX1()); - y1 = (int)floor(state->getY1()); - x2 = (int)ceil(state->getX2()); - y2 = (int)ceil(state->getY2()); - width = x2 - x1; - height = y2 - y1; - tx = ty = 0; - // rotation and portrait/landscape mode - if (rotate0 >= 0) { - rotate = (360 - rotate0) % 360; - landscape = gFalse; - } else { - rotate = (360 - state->getRotate()) % 360; - if (rotate == 0 || rotate == 180) { - if (width > height && width > imgWidth) { - rotate += 90; - landscape = gTrue; - } else { - landscape = gFalse; - } - } else { // rotate == 90 || rotate == 270 - if (height > width && height > imgWidth) { - rotate = 270 - rotate; - landscape = gTrue; - } else { - landscape = gFalse; - } - } - } - writePSFmt("%%PageOrientation: {0:s}\n", - landscape ? "Landscape" : "Portrait"); - writePS("pdfStartPage\n"); - if (rotate == 0) { - imgWidth2 = imgWidth; - imgHeight2 = imgHeight; - } else if (rotate == 90) { - writePS("90 rotate\n"); - ty = -imgWidth; - imgWidth2 = imgHeight; - imgHeight2 = imgWidth; - } else if (rotate == 180) { - writePS("180 rotate\n"); - imgWidth2 = imgWidth; - imgHeight2 = imgHeight; - tx = -imgWidth; - ty = -imgHeight; - } else { // rotate == 270 - writePS("270 rotate\n"); - tx = -imgHeight; - imgWidth2 = imgHeight; - imgHeight2 = imgWidth; - } - // shrink or expand - if (xScale0 > 0 && yScale0 > 0) { - xScale = xScale0; - yScale = yScale0; - } else if ((globalParams->getPSShrinkLarger() && - (width > imgWidth2 || height > imgHeight2)) || - (globalParams->getPSExpandSmaller() && - (width < imgWidth2 && height < imgHeight2))) { - xScale = (double)imgWidth2 / (double)width; - yScale = (double)imgHeight2 / (double)height; - if (yScale < xScale) { - xScale = yScale; - } else { - yScale = xScale; - } - } else { - xScale = yScale = 1; - } - // deal with odd bounding boxes or clipping - if (clipLLX0 < clipURX0 && clipLLY0 < clipURY0) { - tx -= xScale * clipLLX0; - ty -= yScale * clipLLY0; - } else { - tx -= xScale * x1; - ty -= yScale * y1; - } - // center - if (tx0 >= 0 && ty0 >= 0) { - tx += rotate == 0 ? tx0 : ty0; - ty += rotate == 0 ? ty0 : -tx0; - } else if (globalParams->getPSCenter()) { - if (clipLLX0 < clipURX0 && clipLLY0 < clipURY0) { - tx += (imgWidth2 - xScale * (clipURX0 - clipLLX0)) / 2; - ty += (imgHeight2 - yScale * (clipURY0 - clipLLY0)) / 2; - } else { - tx += (imgWidth2 - xScale * width) / 2; - ty += (imgHeight2 - yScale * height) / 2; - } - } - tx += rotate == 0 ? imgLLX : imgLLY; - ty += rotate == 0 ? imgLLY : -imgLLX; - if (tx != 0 || ty != 0) { - writePSFmt("{0:.6g} {1:.6g} translate\n", tx, ty); - } - if (xScale != 1 || yScale != 1) { - writePSFmt("{0:.6f} {1:.6f} scale\n", xScale, yScale); - } - if (clipLLX0 < clipURX0 && clipLLY0 < clipURY0) { - writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re W\n", - clipLLX0, clipLLY0, clipURX0 - clipLLX0, clipURY0 - clipLLY0); - } else { - writePSFmt("{0:d} {1:d} {2:d} {3:d} re W\n", x1, y1, x2 - x1, y2 - y1); - } - - writePS("%%EndPageSetup\n"); - ++seqPage; - break; - - case psModeEPS: - writePS("pdfStartPage\n"); - tx = ty = 0; - rotate = (360 - state->getRotate()) % 360; - if (rotate == 0) { - } else if (rotate == 90) { - writePS("90 rotate\n"); - tx = -epsX1; - ty = -epsY2; - } else if (rotate == 180) { - writePS("180 rotate\n"); - tx = -(epsX1 + epsX2); - ty = -(epsY1 + epsY2); - } else { // rotate == 270 - writePS("270 rotate\n"); - tx = -epsX2; - ty = -epsY1; - } - if (tx != 0 || ty != 0) { - writePSFmt("{0:.6g} {1:.6g} translate\n", tx, ty); - } - xScale = yScale = 1; - break; - - case psModeForm: - writePS("/PaintProc {\n"); - writePS("begin xpdf begin\n"); - writePS("pdfStartPage\n"); - tx = ty = 0; - xScale = yScale = 1; - rotate = 0; - break; - } -} - -void PSOutputDev::endPage() { - if (overlayCbk) { - restoreState(NULL); - (*overlayCbk)(this, overlayCbkData); - } - - - if (mode == psModeForm) { - writePS("pdfEndPage\n"); - writePS("end end\n"); - writePS("} def\n"); - writePS("end end\n"); - } else { - if (!manualCtrl) { - writePS("showpage\n"); - } - writePS("%%PageTrailer\n"); - writePageTrailer(); - } -} - -void PSOutputDev::saveState(GfxState *state) { - writePS("q\n"); - ++numSaves; -} - -void PSOutputDev::restoreState(GfxState *state) { - writePS("Q\n"); - --numSaves; -} - -void PSOutputDev::updateCTM(GfxState *state, double m11, double m12, - double m21, double m22, double m31, double m32) { - writePSFmt("[{0:.6gs} {1:.6gs} {2:.6gs} {3:.6gs} {4:.6gs} {5:.6gs}] cm\n", - m11, m12, m21, m22, m31, m32); -} - -void PSOutputDev::updateLineDash(GfxState *state) { - double *dash; - double start; - int length, i; - - state->getLineDash(&dash, &length, &start); - writePS("["); - for (i = 0; i < length; ++i) { - writePSFmt("{0:.6g}{1:w}", - dash[i] < 0 ? 0 : dash[i], - (i == length-1) ? 0 : 1); - } - writePSFmt("] {0:.6g} d\n", start); -} - -void PSOutputDev::updateFlatness(GfxState *state) { - writePSFmt("{0:d} i\n", state->getFlatness()); -} - -void PSOutputDev::updateLineJoin(GfxState *state) { - writePSFmt("{0:d} j\n", state->getLineJoin()); -} - -void PSOutputDev::updateLineCap(GfxState *state) { - writePSFmt("{0:d} J\n", state->getLineCap()); -} - -void PSOutputDev::updateMiterLimit(GfxState *state) { - writePSFmt("{0:.6g} M\n", state->getMiterLimit()); -} - -void PSOutputDev::updateLineWidth(GfxState *state) { - writePSFmt("{0:.6g} w\n", state->getLineWidth()); -} - -void PSOutputDev::updateFillColorSpace(GfxState *state) { - switch (level) { - case psLevel1: - case psLevel1Sep: - break; - case psLevel2: - case psLevel3: - if (state->getFillColorSpace()->getMode() != csPattern) { - dumpColorSpaceL2(state->getFillColorSpace(), gTrue, gFalse, gFalse); - writePS(" cs\n"); - } - break; - case psLevel2Sep: - case psLevel3Sep: - break; - } -} - -void PSOutputDev::updateStrokeColorSpace(GfxState *state) { - switch (level) { - case psLevel1: - case psLevel1Sep: - break; - case psLevel2: - case psLevel3: - if (state->getStrokeColorSpace()->getMode() != csPattern) { - dumpColorSpaceL2(state->getStrokeColorSpace(), gTrue, gFalse, gFalse); - writePS(" CS\n"); - } - break; - case psLevel2Sep: - case psLevel3Sep: - break; - } -} - -void PSOutputDev::updateFillColor(GfxState *state) { - GfxColor color; - GfxColor *colorPtr; - GfxGray gray; - GfxCMYK cmyk; - GfxSeparationColorSpace *sepCS; - double c, m, y, k; - int i; - - switch (level) { - case psLevel1: - state->getFillGray(&gray); - writePSFmt("{0:.4g} g\n", colToDbl(gray)); - break; - case psLevel1Sep: - state->getFillCMYK(&cmyk); - c = colToDbl(cmyk.c); - m = colToDbl(cmyk.m); - y = colToDbl(cmyk.y); - k = colToDbl(cmyk.k); - writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} k\n", c, m, y, k); - addProcessColor(c, m, y, k); - break; - case psLevel2: - case psLevel3: - if (state->getFillColorSpace()->getMode() != csPattern) { - colorPtr = state->getFillColor(); - writePS("["); - for (i = 0; i < state->getFillColorSpace()->getNComps(); ++i) { - if (i > 0) { - writePS(" "); - } - writePSFmt("{0:.4g}", colToDbl(colorPtr->c[i])); - } - writePS("] sc\n"); - } - break; - case psLevel2Sep: - case psLevel3Sep: - if (state->getFillColorSpace()->getMode() == csSeparation) { - sepCS = (GfxSeparationColorSpace *)state->getFillColorSpace(); - color.c[0] = gfxColorComp1; - sepCS->getCMYK(&color, &cmyk); - writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} {4:.4g} ({5:t}) ck\n", - colToDbl(state->getFillColor()->c[0]), - colToDbl(cmyk.c), colToDbl(cmyk.m), - colToDbl(cmyk.y), colToDbl(cmyk.k), - sepCS->getName()); - addCustomColor(sepCS); - } else { - state->getFillCMYK(&cmyk); - c = colToDbl(cmyk.c); - m = colToDbl(cmyk.m); - y = colToDbl(cmyk.y); - k = colToDbl(cmyk.k); - writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} k\n", c, m, y, k); - addProcessColor(c, m, y, k); - } - break; - } - t3Cacheable = gFalse; -} - -void PSOutputDev::updateStrokeColor(GfxState *state) { - GfxColor color; - GfxColor *colorPtr; - GfxGray gray; - GfxCMYK cmyk; - GfxSeparationColorSpace *sepCS; - double c, m, y, k; - int i; - - switch (level) { - case psLevel1: - state->getStrokeGray(&gray); - writePSFmt("{0:.4g} G\n", colToDbl(gray)); - break; - case psLevel1Sep: - state->getStrokeCMYK(&cmyk); - c = colToDbl(cmyk.c); - m = colToDbl(cmyk.m); - y = colToDbl(cmyk.y); - k = colToDbl(cmyk.k); - writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} K\n", c, m, y, k); - addProcessColor(c, m, y, k); - break; - case psLevel2: - case psLevel3: - if (state->getStrokeColorSpace()->getMode() != csPattern) { - colorPtr = state->getStrokeColor(); - writePS("["); - for (i = 0; i < state->getStrokeColorSpace()->getNComps(); ++i) { - if (i > 0) { - writePS(" "); - } - writePSFmt("{0:.4g}", colToDbl(colorPtr->c[i])); - } - writePS("] SC\n"); - } - break; - case psLevel2Sep: - case psLevel3Sep: - if (state->getStrokeColorSpace()->getMode() == csSeparation) { - sepCS = (GfxSeparationColorSpace *)state->getStrokeColorSpace(); - color.c[0] = gfxColorComp1; - sepCS->getCMYK(&color, &cmyk); - writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} {4:.4g} ({5:t}) CK\n", - colToDbl(state->getStrokeColor()->c[0]), - colToDbl(cmyk.c), colToDbl(cmyk.m), - colToDbl(cmyk.y), colToDbl(cmyk.k), - sepCS->getName()); - addCustomColor(sepCS); - } else { - state->getStrokeCMYK(&cmyk); - c = colToDbl(cmyk.c); - m = colToDbl(cmyk.m); - y = colToDbl(cmyk.y); - k = colToDbl(cmyk.k); - writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} K\n", c, m, y, k); - addProcessColor(c, m, y, k); - } - break; - } - t3Cacheable = gFalse; -} - -void PSOutputDev::addProcessColor(double c, double m, double y, double k) { - if (c > 0) { - processColors |= psProcessCyan; - } - if (m > 0) { - processColors |= psProcessMagenta; - } - if (y > 0) { - processColors |= psProcessYellow; - } - if (k > 0) { - processColors |= psProcessBlack; - } -} - -void PSOutputDev::addCustomColor(GfxSeparationColorSpace *sepCS) { - PSOutCustomColor *cc; - GfxColor color; - GfxCMYK cmyk; - - for (cc = customColors; cc; cc = cc->next) { - if (!cc->name->cmp(sepCS->getName())) { - return; - } - } - color.c[0] = gfxColorComp1; - sepCS->getCMYK(&color, &cmyk); - cc = new PSOutCustomColor(colToDbl(cmyk.c), colToDbl(cmyk.m), - colToDbl(cmyk.y), colToDbl(cmyk.k), - sepCS->getName()->copy()); - cc->next = customColors; - customColors = cc; -} - -void PSOutputDev::updateFillOverprint(GfxState *state) { - if (level >= psLevel2) { - writePSFmt("{0:s} op\n", state->getFillOverprint() ? "true" : "false"); - } -} - -void PSOutputDev::updateStrokeOverprint(GfxState *state) { - if (level >= psLevel2) { - writePSFmt("{0:s} OP\n", state->getStrokeOverprint() ? "true" : "false"); - } -} - -void PSOutputDev::updateTransfer(GfxState *state) { - Function **funcs; - int i; - - funcs = state->getTransfer(); - if (funcs[0] && funcs[1] && funcs[2] && funcs[3]) { - if (level >= psLevel2) { - for (i = 0; i < 4; ++i) { - cvtFunction(funcs[i]); - } - writePS("setcolortransfer\n"); - } else { - cvtFunction(funcs[3]); - writePS("settransfer\n"); - } - } else if (funcs[0]) { - cvtFunction(funcs[0]); - writePS("settransfer\n"); - } else { - writePS("{} settransfer\n"); - } -} - -void PSOutputDev::updateFont(GfxState *state) { - if (state->getFont()) { - writePSFmt("/F{0:d}_{1:d} {2:.6g} Tf\n", - state->getFont()->getID()->num, state->getFont()->getID()->gen, - fabs(state->getFontSize()) < 0.00001 ? 0.00001 - : state->getFontSize()); - } -} - -void PSOutputDev::updateTextMat(GfxState *state) { - double *mat; - - mat = state->getTextMat(); - if (fabs(mat[0] * mat[3] - mat[1] * mat[2]) < 0.00001) { - // avoid a singular (or close-to-singular) matrix - writePSFmt("[0.00001 0 0 0.00001 {0:.6g} {1:.6g}] Tm\n", mat[4], mat[5]); - } else { - writePSFmt("[{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] Tm\n", - mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]); - } -} - -void PSOutputDev::updateCharSpace(GfxState *state) { - writePSFmt("{0:.6g} Tc\n", state->getCharSpace()); -} - -void PSOutputDev::updateRender(GfxState *state) { - int rm; - - rm = state->getRender(); - writePSFmt("{0:d} Tr\n", rm); - rm &= 3; - if (rm != 0 && rm != 3) { - t3Cacheable = gFalse; - } -} - -void PSOutputDev::updateRise(GfxState *state) { - writePSFmt("{0:.6g} Ts\n", state->getRise()); -} - -void PSOutputDev::updateWordSpace(GfxState *state) { - writePSFmt("{0:.6g} Tw\n", state->getWordSpace()); -} - -void PSOutputDev::updateHorizScaling(GfxState *state) { - double h; - - h = state->getHorizScaling(); - if (fabs(h) < 0.01) { - h = 0.01; - } - writePSFmt("{0:.6g} Tz\n", h); -} - -void PSOutputDev::updateTextPos(GfxState *state) { - writePSFmt("{0:.6g} {1:.6g} Td\n", state->getLineX(), state->getLineY()); -} - -void PSOutputDev::updateTextShift(GfxState *state, double shift) { - if (state->getFont()->getWMode()) { - writePSFmt("{0:.6g} TJmV\n", shift); - } else { - writePSFmt("{0:.6g} TJm\n", shift); - } -} - -void PSOutputDev::stroke(GfxState *state) { - doPath(state->getPath()); - if (t3String) { - // if we're construct a cacheable Type 3 glyph, we need to do - // everything in the fill color - writePS("Sf\n"); - } else { - writePS("S\n"); - } -} - -void PSOutputDev::fill(GfxState *state) { - doPath(state->getPath()); - writePS("f\n"); -} - -void PSOutputDev::eoFill(GfxState *state) { - doPath(state->getPath()); - writePS("f*\n"); -} - -GBool PSOutputDev::tilingPatternFillL1(GfxState *state, Catalog *cat, Object *str, - double *pmat, int paintType, int tilingType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep) { - PDFRectangle box; - Gfx *gfx; - - // define a Type 3 font - writePS("8 dict begin\n"); - writePS("/FontType 3 def\n"); - writePS("/FontMatrix [1 0 0 1 0 0] def\n"); - writePSFmt("/FontBBox [{0:.6g} {1:.6g} {2:.6g} {3:.6g}] def\n", - bbox[0], bbox[1], bbox[2], bbox[3]); - writePS("/Encoding 256 array def\n"); - writePS(" 0 1 255 { Encoding exch /.notdef put } for\n"); - writePS(" Encoding 120 /x put\n"); - writePS("/BuildGlyph {\n"); - writePS(" exch /CharProcs get exch\n"); - writePS(" 2 copy known not { pop /.notdef } if\n"); - writePS(" get exec\n"); - writePS("} bind def\n"); - writePS("/BuildChar {\n"); - writePS(" 1 index /Encoding get exch get\n"); - writePS(" 1 index /BuildGlyph get exec\n"); - writePS("} bind def\n"); - writePS("/CharProcs 1 dict def\n"); - writePS("CharProcs begin\n"); - box.x1 = bbox[0]; - box.y1 = bbox[1]; - box.x2 = bbox[2]; - box.y2 = bbox[3]; - gfx = new Gfx(xref, this, resDict, m_catalog, &box, NULL); - writePS("/x {\n"); - if (paintType == 2) { - writePSFmt("{0:.6g} 0 {1:.6g} {2:.6g} {3:.6g} {4:.6g} setcachedevice\n", - xStep, bbox[0], bbox[1], bbox[2], bbox[3]); - } else - { - if (x1 - 1 <= x0) { - writePS("1 0 setcharwidth\n"); - } else { - writePSFmt("{0:.6g} 0 setcharwidth\n", xStep); - } - } - inType3Char = gTrue; - ++numTilingPatterns; - gfx->display(str); - --numTilingPatterns; - inType3Char = gFalse; - writePS("} def\n"); - delete gfx; - writePS("end\n"); - writePS("currentdict end\n"); - writePSFmt("/xpdfTile{0:d} exch definefont pop\n", numTilingPatterns); - - // draw the tiles - writePSFmt("/xpdfTile{0:d} findfont setfont\n", numTilingPatterns); - writePSFmt("gsave [{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] concat\n", - mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]); - writePSFmt("{0:d} 1 {1:d} {{ {2:.6g} exch {3:.6g} mul m {4:d} 1 {5:d} {{ pop (x) show }} for }} for\n", - y0, y1 - 1, x0 * xStep, yStep, x0, x1 - 1); - writePS("grestore\n"); - - return gTrue; -} - -GBool PSOutputDev::tilingPatternFillL2(GfxState *state, Catalog *cat, Object *str, - double *pmat, int paintType, int tilingType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep) { - PDFRectangle box; - Gfx *gfx; - double cxMin, cyMin, cxMax, cyMax; - - writePS("<<\n /PatternType 1\n"); - writePSFmt(" /PaintType {0:d}\n", paintType); - writePSFmt(" /TilingType {0:d}\n", tilingType); - writePSFmt(" /BBox [{0:.6g} {1:.6g} {2:.6g} {3:.6g}]\n", bbox[0], bbox[1], bbox[2], bbox[3]); - writePSFmt(" /XStep {0:.6g}\n", xStep); - writePSFmt(" /YStep {0:.6g}\n", yStep); - writePS(" /PaintProc { \n"); - box.x1 = bbox[0]; - box.y1 = bbox[1]; - box.x2 = bbox[2]; - box.y2 = bbox[3]; - gfx = new Gfx(xref, this, resDict, m_catalog, &box, NULL); - inType3Char = gTrue; - gfx->display(str); - inType3Char = gFalse; - delete gfx; - writePS(" }\n"); - writePS(">>\n"); - writePSFmt("[{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}]\n", pmat[0], pmat[1], pmat[2], pmat[3], pmat[4], pmat[5]); - writePS("makepattern setpattern\n"); - state->getClipBBox(&cxMin, &cyMin, &cxMax, &cyMax); - writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} rectfill\n", cxMin, cyMin, cxMax - cxMin, cyMax - cyMin); - - return gTrue; -} - -GBool PSOutputDev::tilingPatternFill(GfxState *state, Catalog *cat, Object *str, - double *pmat, int paintType, int tilingType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep) { - if (x1 - x0 == 1 && y1 - y0 == 1) - return gFalse; // Don't need to use patterns if only one instance of the pattern is used - - if (level == psLevel1 || level == psLevel1Sep) { - return tilingPatternFillL1(state, cat, str, pmat, paintType, tilingType, resDict, - mat, bbox, x0, y0, x1, y1, xStep, yStep); - } else { - return tilingPatternFillL2(state, cat, str, pmat, paintType, tilingType, resDict, - mat, bbox, x0, y0, x1, y1, xStep, yStep); - } -} - -GBool PSOutputDev::functionShadedFill(GfxState *state, - GfxFunctionShading *shading) { - double x0, y0, x1, y1; - double *mat; - int i; - - if (level == psLevel2Sep || level == psLevel3Sep) { - if (shading->getColorSpace()->getMode() != csDeviceCMYK) { - return gFalse; - } - processColors |= psProcessCMYK; - } - - shading->getDomain(&x0, &y0, &x1, &y1); - mat = shading->getMatrix(); - writePSFmt("/mat [{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] def\n", - mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]); - writePSFmt("/n {0:d} def\n", shading->getColorSpace()->getNComps()); - if (shading->getNFuncs() == 1) { - writePS("/func "); - cvtFunction(shading->getFunc(0)); - writePS("def\n"); - } else { - writePS("/func {\n"); - for (i = 0; i < shading->getNFuncs(); ++i) { - if (i < shading->getNFuncs() - 1) { - writePS("2 copy\n"); - } - cvtFunction(shading->getFunc(i)); - writePS("exec\n"); - if (i < shading->getNFuncs() - 1) { - writePS("3 1 roll\n"); - } - } - writePS("} def\n"); - } - writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} 0 funcSH\n", x0, y0, x1, y1); - - return gTrue; -} - -GBool PSOutputDev::axialShadedFill(GfxState *state, GfxAxialShading *shading, double /*tMin*/, double /*tMax*/) { - double xMin, yMin, xMax, yMax; - double x0, y0, x1, y1, dx, dy, mul; - double tMin, tMax, t, t0, t1; - int i; - - if (level == psLevel2Sep || level == psLevel3Sep) { - if (shading->getColorSpace()->getMode() != csDeviceCMYK) { - return gFalse; - } - processColors |= psProcessCMYK; - } - - // get the clip region bbox - state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); - - // compute min and max t values, based on the four corners of the - // clip region bbox - shading->getCoords(&x0, &y0, &x1, &y1); - dx = x1 - x0; - dy = y1 - y0; - if (fabs(dx) < 0.01 && fabs(dy) < 0.01) { - return gTrue; - } else { - mul = 1 / (dx * dx + dy * dy); - tMin = tMax = ((xMin - x0) * dx + (yMin - y0) * dy) * mul; - t = ((xMin - x0) * dx + (yMax - y0) * dy) * mul; - if (t < tMin) { - tMin = t; - } else if (t > tMax) { - tMax = t; - } - t = ((xMax - x0) * dx + (yMin - y0) * dy) * mul; - if (t < tMin) { - tMin = t; - } else if (t > tMax) { - tMax = t; - } - t = ((xMax - x0) * dx + (yMax - y0) * dy) * mul; - if (t < tMin) { - tMin = t; - } else if (t > tMax) { - tMax = t; - } - if (tMin < 0 && !shading->getExtend0()) { - tMin = 0; - } - if (tMax > 1 && !shading->getExtend1()) { - tMax = 1; - } - } - - // get the function domain - t0 = shading->getDomain0(); - t1 = shading->getDomain1(); - - // generate the PS code - writePSFmt("/t0 {0:.6g} def\n", t0); - writePSFmt("/t1 {0:.6g} def\n", t1); - writePSFmt("/dt {0:.6g} def\n", t1 - t0); - writePSFmt("/x0 {0:.6g} def\n", x0); - writePSFmt("/y0 {0:.6g} def\n", y0); - writePSFmt("/dx {0:.6g} def\n", x1 - x0); - writePSFmt("/x1 {0:.6g} def\n", x1); - writePSFmt("/y1 {0:.6g} def\n", y1); - writePSFmt("/dy {0:.6g} def\n", y1 - y0); - writePSFmt("/xMin {0:.6g} def\n", xMin); - writePSFmt("/yMin {0:.6g} def\n", yMin); - writePSFmt("/xMax {0:.6g} def\n", xMax); - writePSFmt("/yMax {0:.6g} def\n", yMax); - writePSFmt("/n {0:d} def\n", shading->getColorSpace()->getNComps()); - if (shading->getNFuncs() == 1) { - writePS("/func "); - cvtFunction(shading->getFunc(0)); - writePS("def\n"); - } else { - writePS("/func {\n"); - for (i = 0; i < shading->getNFuncs(); ++i) { - if (i < shading->getNFuncs() - 1) { - writePS("dup\n"); - } - cvtFunction(shading->getFunc(i)); - writePS("exec\n"); - if (i < shading->getNFuncs() - 1) { - writePS("exch\n"); - } - } - writePS("} def\n"); - } - writePSFmt("{0:.6g} {1:.6g} 0 axialSH\n", tMin, tMax); - - return gTrue; -} - -GBool PSOutputDev::radialShadedFill(GfxState *state, GfxRadialShading *shading, double /*sMin*/, double /*sMax*/) { - double xMin, yMin, xMax, yMax; - double x0, y0, r0, x1, y1, r1, t0, t1; - double xa, ya, ra; - double sz, xz, yz, sMin, sMax, sa, ta; - double theta, alpha, a1, a2; - GBool enclosed; - int i; - - if (level == psLevel2Sep || level == psLevel3Sep) { - if (shading->getColorSpace()->getMode() != csDeviceCMYK) { - return gFalse; - } - processColors |= psProcessCMYK; - } - - // get the shading info - shading->getCoords(&x0, &y0, &r0, &x1, &y1, &r1); - t0 = shading->getDomain0(); - t1 = shading->getDomain1(); - - // Compute the point at which r(s) = 0; check for the enclosed - // circles case; and compute the angles for the tangent lines. - if (r0 == r1) { - enclosed = x0 == x1 && y0 == y1; - theta = 0; - sz = 0; // make gcc happy - } else { - sz = -r0 / (r1 - r0); - xz = x0 + sz * (x1 - x0); - yz = y0 + sz * (y1 - y0); - enclosed = (xz - x0) * (xz - x0) + (yz - y0) * (yz - y0) <= r0 * r0; - theta = asin(r0 / sqrt((x0 - xz) * (x0 - xz) + (y0 - yz) * (y0 - yz))); - if (r0 > r1) { - theta = -theta; - } - } - if (enclosed) { - a1 = 0; - a2 = 360; - } else { - alpha = atan2(y1 - y0, x1 - x0); - a1 = (180 / M_PI) * (alpha + theta) + 90; - a2 = (180 / M_PI) * (alpha - theta) - 90; - while (a2 < a1) { - a2 += 360; - } - } - - // compute the (possibly extended) s range - state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); - if (enclosed) { - sMin = 0; - sMax = 1; - } else { - sMin = 1; - sMax = 0; - // solve for x(s) + r(s) = xMin - if ((x1 + r1) - (x0 + r0) != 0) { - sa = (xMin - (x0 + r0)) / ((x1 + r1) - (x0 + r0)); - if (sa < sMin) { - sMin = sa; - } else if (sa > sMax) { - sMax = sa; - } - } - // solve for x(s) - r(s) = xMax - if ((x1 - r1) - (x0 - r0) != 0) { - sa = (xMax - (x0 - r0)) / ((x1 - r1) - (x0 - r0)); - if (sa < sMin) { - sMin = sa; - } else if (sa > sMax) { - sMax = sa; - } - } - // solve for y(s) + r(s) = yMin - if ((y1 + r1) - (y0 + r0) != 0) { - sa = (yMin - (y0 + r0)) / ((y1 + r1) - (y0 + r0)); - if (sa < sMin) { - sMin = sa; - } else if (sa > sMax) { - sMax = sa; - } - } - // solve for y(s) - r(s) = yMax - if ((y1 - r1) - (y0 - r0) != 0) { - sa = (yMax - (y0 - r0)) / ((y1 - r1) - (y0 - r0)); - if (sa < sMin) { - sMin = sa; - } else if (sa > sMax) { - sMax = sa; - } - } - // check against sz - if (r0 < r1) { - if (sMin < sz) { - sMin = sz; - } - } else if (r0 > r1) { - if (sMax > sz) { - sMax = sz; - } - } - // check the 'extend' flags - if (!shading->getExtend0() && sMin < 0) { - sMin = 0; - } - if (!shading->getExtend1() && sMax > 1) { - sMax = 1; - } - } - - // generate the PS code - writePSFmt("/x0 {0:.6g} def\n", x0); - writePSFmt("/x1 {0:.6g} def\n", x1); - writePSFmt("/dx {0:.6g} def\n", x1 - x0); - writePSFmt("/y0 {0:.6g} def\n", y0); - writePSFmt("/y1 {0:.6g} def\n", y1); - writePSFmt("/dy {0:.6g} def\n", y1 - y0); - writePSFmt("/r0 {0:.6g} def\n", r0); - writePSFmt("/r1 {0:.6g} def\n", r1); - writePSFmt("/dr {0:.6g} def\n", r1 - r0); - writePSFmt("/t0 {0:.6g} def\n", t0); - writePSFmt("/t1 {0:.6g} def\n", t1); - writePSFmt("/dt {0:.6g} def\n", t1 - t0); - writePSFmt("/n {0:d} def\n", shading->getColorSpace()->getNComps()); - writePSFmt("/encl {0:s} def\n", enclosed ? "true" : "false"); - writePSFmt("/a1 {0:.6g} def\n", a1); - writePSFmt("/a2 {0:.6g} def\n", a2); - if (shading->getNFuncs() == 1) { - writePS("/func "); - cvtFunction(shading->getFunc(0)); - writePS("def\n"); - } else { - writePS("/func {\n"); - for (i = 0; i < shading->getNFuncs(); ++i) { - if (i < shading->getNFuncs() - 1) { - writePS("dup\n"); - } - cvtFunction(shading->getFunc(i)); - writePS("exec\n"); - if (i < shading->getNFuncs() - 1) { - writePS("exch\n"); - } - } - writePS("} def\n"); - } - writePSFmt("{0:.6g} {1:.6g} 0 radialSH\n", sMin, sMax); - - // extend the 'enclosed' case - if (enclosed) { - // extend the smaller circle - if ((shading->getExtend0() && r0 <= r1) || - (shading->getExtend1() && r1 < r0)) { - if (r0 <= r1) { - ta = t0; - ra = r0; - xa = x0; - ya = y0; - } else { - ta = t1; - ra = r1; - xa = x1; - ya = y1; - } - if (level == psLevel2Sep || level == psLevel3Sep) { - writePSFmt("{0:.6g} radialCol aload pop k\n", ta); - } else { - writePSFmt("{0:.6g} radialCol sc\n", ta); - } - writePSFmt("{0:.6g} {1:.6g} {2:.6g} 0 360 arc h f*\n", xa, ya, ra); - } - - // extend the larger circle - if ((shading->getExtend0() && r0 > r1) || - (shading->getExtend1() && r1 >= r0)) { - if (r0 > r1) { - ta = t0; - ra = r0; - xa = x0; - ya = y0; - } else { - ta = t1; - ra = r1; - xa = x1; - ya = y1; - } - if (level == psLevel2Sep || level == psLevel3Sep) { - writePSFmt("{0:.6g} radialCol aload pop k\n", ta); - } else { - writePSFmt("{0:.6g} radialCol sc\n", ta); - } - writePSFmt("{0:.6g} {1:.6g} {2:.6g} 0 360 arc h\n", xa, ya, ra); - writePSFmt("{0:.6g} {1:.6g} m {2:.6g} {3:.6g} l {4:.6g} {5:.6g} l {6:.6g} {7:.6g} l h f*\n", - xMin, yMin, xMin, yMax, xMax, yMax, xMax, yMin); - } - } - - return gTrue; -} - -void PSOutputDev::clip(GfxState *state) { - doPath(state->getPath()); - writePS("W\n"); -} - -void PSOutputDev::eoClip(GfxState *state) { - doPath(state->getPath()); - writePS("W*\n"); -} - -void PSOutputDev::clipToStrokePath(GfxState *state) { - doPath(state->getPath()); - writePS("Ws\n"); -} - -void PSOutputDev::doPath(GfxPath *path) { - GfxSubpath *subpath; - double x0, y0, x1, y1, x2, y2, x3, y3, x4, y4; - int n, m, i, j; - - n = path->getNumSubpaths(); - - if (n == 1 && path->getSubpath(0)->getNumPoints() == 5) { - subpath = path->getSubpath(0); - x0 = subpath->getX(0); - y0 = subpath->getY(0); - x4 = subpath->getX(4); - y4 = subpath->getY(4); - if (x4 == x0 && y4 == y0) { - x1 = subpath->getX(1); - y1 = subpath->getY(1); - x2 = subpath->getX(2); - y2 = subpath->getY(2); - x3 = subpath->getX(3); - y3 = subpath->getY(3); - if (x0 == x1 && x2 == x3 && y0 == y3 && y1 == y2) { - writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n", - x0 < x2 ? x0 : x2, y0 < y1 ? y0 : y1, - fabs(x2 - x0), fabs(y1 - y0)); - return; - } else if (x0 == x3 && x1 == x2 && y0 == y1 && y2 == y3) { - writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n", - x0 < x1 ? x0 : x1, y0 < y2 ? y0 : y2, - fabs(x1 - x0), fabs(y2 - y0)); - return; - } - } - } - - for (i = 0; i < n; ++i) { - subpath = path->getSubpath(i); - m = subpath->getNumPoints(); - writePSFmt("{0:.6g} {1:.6g} m\n", subpath->getX(0), subpath->getY(0)); - j = 1; - while (j < m) { - if (subpath->getCurve(j)) { - writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g} c\n", - subpath->getX(j), subpath->getY(j), - subpath->getX(j+1), subpath->getY(j+1), - subpath->getX(j+2), subpath->getY(j+2)); - j += 3; - } else { - writePSFmt("{0:.6g} {1:.6g} l\n", subpath->getX(j), subpath->getY(j)); - ++j; - } - } - if (subpath->isClosed()) { - writePS("h\n"); - } - } -} - -void PSOutputDev::drawString(GfxState *state, GooString *s) { - GfxFont *font; - int wMode; - Gushort *codeToGID; - GooString *s2; - double dx, dy, dx2, dy2, originX, originY; - char *p; - UnicodeMap *uMap; - CharCode code; - Unicode *u; - char buf[8]; - int len, nChars, uLen, n, m, i, j; - - // for pdftohtml, output PS without text - if( displayText == gFalse ) - return; - - // check for invisible text -- this is used by Acrobat Capture - if (state->getRender() == 3) { - return; - } - - // ignore empty strings - if (s->getLength() == 0) { - return; - } - - // get the font - if (!(font = state->getFont())) { - return; - } - wMode = font->getWMode(); - - // check for a subtitute 16-bit font - uMap = NULL; - codeToGID = NULL; - if (font->isCIDFont()) { - for (i = 0; i < font16EncLen; ++i) { - if (font->getID()->num == font16Enc[i].fontID.num && - font->getID()->gen == font16Enc[i].fontID.gen) { - uMap = globalParams->getUnicodeMap(font16Enc[i].enc); - break; - } - } - - // check for a code-to-GID map - } else { - for (i = 0; i < font8InfoLen; ++i) { - if (font->getID()->num == font8Info[i].fontID.num && - font->getID()->gen == font8Info[i].fontID.gen) { - codeToGID = font8Info[i].codeToGID; - break; - } - } - } - - // compute width of chars in string, ignoring char spacing and word - // spacing -- the Tj operator will adjust for the metrics of the - // font that's actually used - dx = dy = 0; - nChars = 0; - p = s->getCString(); - len = s->getLength(); - s2 = new GooString(); - while (len > 0) { - n = font->getNextChar(p, len, &code, - &u, &uLen, - &dx2, &dy2, &originX, &originY); - if (font->isCIDFont()) { - if (uMap) { - for (i = 0; i < uLen; ++i) { - m = uMap->mapUnicode(u[i], buf, (int)sizeof(buf)); - for (j = 0; j < m; ++j) { - s2->append(buf[j]); - } - } - //~ this really needs to get the number of chars in the target - //~ encoding - which may be more than the number of Unicode - //~ chars - nChars += uLen; - } else { - s2->append((char)((code >> 8) & 0xff)); - s2->append((char)(code & 0xff)); - ++nChars; - } - } else { - if (!codeToGID || codeToGID[code]) { - s2->append((char)code); - } - } - dx += dx2; - dy += dy2; - p += n; - len -= n; - } - dx *= state->getFontSize() * state->getHorizScaling(); - dy *= state->getFontSize(); - if (uMap) { - uMap->decRefCnt(); - } - - if (s2->getLength() > 0) { - writePSString(s2); - if (font->isCIDFont()) { - if (wMode) { - writePSFmt(" {0:d} {1:.6g} Tj16V\n", nChars, dy); - } else { - writePSFmt(" {0:d} {1:.6g} Tj16\n", nChars, dx); - } - } else { - writePSFmt(" {0:.6g} Tj\n", dx); - } - } - delete s2; - - if (state->getRender() & 4 || haveCSPattern) { - haveTextClip = gTrue; - } -} - -void PSOutputDev::beginTextObject(GfxState *state) { - if (state->getFillColorSpace()->getMode() == csPattern) { - saveState(state); - haveCSPattern = gTrue; - writePS("true Tp\n"); - } -} - -void PSOutputDev::endTextObject(GfxState *state) { - if (haveCSPattern) { - if (haveTextClip) { - writePS("Tclip*\n"); - haveTextClip = gFalse; - if (state->getFillColorSpace()->getMode() != csPattern) { - double cxMin, cyMin, cxMax, cyMax; - state->getClipBBox(&cxMin, &cyMin, &cxMax, &cyMax); - writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n", - cxMin, cyMin, - cxMax, cyMax); - writePS("f*\n"); - restoreState(state); - updateFillColor(state); - } - } - haveCSPattern = gFalse; - } else if (haveTextClip) { - writePS("Tclip\n"); - haveTextClip = gFalse; - } -} - -void PSOutputDev::endMaskClip(GfxState * state) { - writePS("pdfImClipEnd\n"); -} - -void PSOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool interpolate, GBool inlineImg) { - int len; - - len = height * ((width + 7) / 8); - if (state->getFillColorSpace()->getMode() == csPattern && (level != psLevel1 && level != psLevel1Sep)) { - maskToClippingPath(str, width, height, invert); - } else { - switch (level) { - case psLevel1: - case psLevel1Sep: - doImageL1(ref, NULL, invert, inlineImg, str, width, height, len, - NULL, NULL, 0, 0, gFalse); - break; - case psLevel2: - case psLevel2Sep: - doImageL2(ref, NULL, invert, inlineImg, str, width, height, len, - NULL, NULL, 0, 0, gFalse); - break; - case psLevel3: - case psLevel3Sep: - doImageL3(ref, NULL, invert, inlineImg, str, width, height, len, - NULL, NULL, 0, 0, gFalse); - break; - } - } -} - -void PSOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - GBool interpolate, int *maskColors, GBool inlineImg) { - int len; - - len = height * ((width * colorMap->getNumPixelComps() * - colorMap->getBits() + 7) / 8); - switch (level) { - case psLevel1: - doImageL1(ref, colorMap, gFalse, inlineImg, str, - width, height, len, maskColors, NULL, 0, 0, gFalse); - break; - case psLevel1Sep: - //~ handle indexed, separation, ... color spaces - doImageL1Sep(ref, colorMap, gFalse, inlineImg, str, - width, height, len, maskColors, NULL, 0, 0, gFalse); - break; - case psLevel2: - case psLevel2Sep: - doImageL2(ref, colorMap, gFalse, inlineImg, str, - width, height, len, maskColors, NULL, 0, 0, gFalse); - break; - case psLevel3: - case psLevel3Sep: - doImageL3(ref, colorMap, gFalse, inlineImg, str, - width, height, len, maskColors, NULL, 0, 0, gFalse); - break; - } - t3Cacheable = gFalse; -} - -void PSOutputDev::drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, - int maskWidth, int maskHeight, - GBool maskInvert, GBool maskInterpolate) { - int len; - - len = height * ((width * colorMap->getNumPixelComps() * - colorMap->getBits() + 7) / 8); - switch (level) { - case psLevel1: - doImageL1(ref, colorMap, gFalse, gFalse, str, width, height, len, - NULL, maskStr, maskWidth, maskHeight, maskInvert); - break; - case psLevel1Sep: - //~ handle indexed, separation, ... color spaces - doImageL1Sep(ref, colorMap, gFalse, gFalse, str, width, height, len, - NULL, maskStr, maskWidth, maskHeight, maskInvert); - break; - case psLevel2: - case psLevel2Sep: - doImageL2(ref, colorMap, gFalse, gFalse, str, width, height, len, - NULL, maskStr, maskWidth, maskHeight, maskInvert); - break; - case psLevel3: - case psLevel3Sep: - doImageL3(ref, colorMap, gFalse, gFalse, str, width, height, len, - NULL, maskStr, maskWidth, maskHeight, maskInvert); - break; - } - t3Cacheable = gFalse; -} - -void PSOutputDev::doImageL1(Object *ref, GfxImageColorMap *colorMap, - GBool invert, GBool inlineImg, - Stream *str, int width, int height, int len, - int *maskColors, Stream *maskStr, - int maskWidth, int maskHeight, GBool maskInvert) { - ImageStream *imgStr; - Guchar pixBuf[gfxColorMaxComps]; - GfxGray gray; - int col, x, y, c, i; - char hexBuf[32*2 + 2]; // 32 values X 2 chars/value + line ending + null - Guchar digit, grayValue; - const GBool useBinary = globalParams->getPSBinary(); - - // explicit masking - if (maskStr && !(maskColors && colorMap)) { - maskToClippingPath(maskStr, maskWidth, maskHeight, maskInvert); - } - - if ((inType3Char || preload) && !colorMap) { - if (inlineImg) { - // create an array - str = new FixedLengthEncoder(str, len); - str = new ASCIIHexEncoder(str); - str->reset(); - col = 0; - writePS("[<"); - do { - do { - c = str->getChar(); - } while (c == '\n' || c == '\r'); - if (c == '>' || c == EOF) { - break; - } - writePSChar(c); - ++col; - // each line is: "<...data...><eol>" - // so max data length = 255 - 4 = 251 - // but make it 240 just to be safe - // chunks are 2 bytes each, so we need to stop on an even col number - if (col == 240) { - writePS(">\n<"); - col = 0; - } - } while (c != '>' && c != EOF); - writePS(">]\n"); - writePS("0\n"); - str->close(); - delete str; - } else { - // make sure the image is setup, it sometimes is not like on bug #17645 - setupImage(ref->getRef(), str); - // set up to use the array already created by setupImages() - writePSFmt("ImData_{0:d}_{1:d} 0 0\n", ref->getRefNum(), ref->getRefGen()); - } - } - - // image/imagemask command - if ((inType3Char || preload) && !colorMap) { - writePSFmt("{0:d} {1:d} {2:s} [{3:d} 0 0 {4:d} 0 {5:d}] pdfImM1a\n", - width, height, invert ? "true" : "false", - width, -height, height); - } else if (colorMap) { - writePSFmt("{0:d} {1:d} 8 [{2:d} 0 0 {3:d} 0 {4:d}] pdfIm1{5:s}\n", - width, height, - width, -height, height, - useBinary ? "Bin" : ""); - } else { - writePSFmt("{0:d} {1:d} {2:s} [{3:d} 0 0 {4:d} 0 {5:d}] pdfImM1{6:s}\n", - width, height, invert ? "true" : "false", - width, -height, height, - useBinary ? "Bin" : ""); - } - - // image data - if (!((inType3Char || preload) && !colorMap)) { - - if (colorMap) { - - // set up to process the data stream - imgStr = new ImageStream(str, width, colorMap->getNumPixelComps(), - colorMap->getBits()); - imgStr->reset(); - - // process the data stream - i = 0; - for (y = 0; y < height; ++y) { - - // write the line - for (x = 0; x < width; ++x) { - imgStr->getPixel(pixBuf); - colorMap->getGray(pixBuf, &gray); - grayValue = colToByte(gray); - if (useBinary) { - hexBuf[i++] = grayValue; - } else { - digit = grayValue / 16; - hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); - digit = grayValue % 16; - hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); - } - if (i >= 64) { - if (!useBinary) { - hexBuf[i++] = '\n'; - } - writePSBuf(hexBuf, i); - i = 0; - } - } - } - if (i != 0) { - if (!useBinary) { - hexBuf[i++] = '\n'; - } - writePSBuf(hexBuf, i); - } - str->close(); - delete imgStr; - - // imagemask - } else { - str->reset(); - i = 0; - for (y = 0; y < height; ++y) { - for (x = 0; x < width; x += 8) { - grayValue = str->getChar(); - if (useBinary) { - hexBuf[i++] = grayValue; - } else { - digit = grayValue / 16; - hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); - digit = grayValue % 16; - hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); - } - if (i >= 64) { - if (!useBinary) { - hexBuf[i++] = '\n'; - } - writePSBuf(hexBuf, i); - i = 0; - } - } - } - if (i != 0) { - if (!useBinary) { - hexBuf[i++] = '\n'; - } - writePSBuf(hexBuf, i); - } - str->close(); - } - } - - if (maskStr && !(maskColors && colorMap)) { - writePS("pdfImClipEnd\n"); - } -} - -void PSOutputDev::doImageL1Sep(Object *ref, GfxImageColorMap *colorMap, - GBool invert, GBool inlineImg, - Stream *str, int width, int height, int len, - int *maskColors, Stream *maskStr, - int maskWidth, int maskHeight, GBool maskInvert) { - ImageStream *imgStr; - Guchar *lineBuf; - Guchar pixBuf[gfxColorMaxComps]; - GfxCMYK cmyk; - int x, y, i, comp; - GBool checkProcessColor; - char hexBuf[32*2 + 2]; // 32 values X 2 chars/value + line ending + null - Guchar digit; - const GBool useBinary = globalParams->getPSBinary(); - - // explicit masking - if (maskStr && !(maskColors && colorMap)) { - maskToClippingPath(maskStr, maskWidth, maskHeight, maskInvert); - } - - // width, height, matrix, bits per component - writePSFmt("{0:d} {1:d} 8 [{2:d} 0 0 {3:d} 0 {4:d}] pdfIm1Sep{5:s}\n", - width, height, - width, -height, height, - useBinary ? "Bin" : ""); - - // allocate a line buffer - lineBuf = (Guchar *)gmallocn(width, 4); - - // set up to process the data stream - imgStr = new ImageStream(str, width, colorMap->getNumPixelComps(), - colorMap->getBits()); - imgStr->reset(); - - // process the data stream - checkProcessColor = gTrue; - i = 0; - for (y = 0; y < height; ++y) { - - // read the line - if (checkProcessColor) { - checkProcessColor = (((psProcessCyan | psProcessMagenta | psProcessYellow | psProcessBlack) & ~processColors) != 0); - } - if (checkProcessColor) { - for (x = 0; x < width; ++x) { - imgStr->getPixel(pixBuf); - colorMap->getCMYK(pixBuf, &cmyk); - lineBuf[4*x+0] = colToByte(cmyk.c); - lineBuf[4*x+1] = colToByte(cmyk.m); - lineBuf[4*x+2] = colToByte(cmyk.y); - lineBuf[4*x+3] = colToByte(cmyk.k); - addProcessColor(colToDbl(cmyk.c), colToDbl(cmyk.m), - colToDbl(cmyk.y), colToDbl(cmyk.k)); - } - } else { - for (x = 0; x < width; ++x) { - imgStr->getPixel(pixBuf); - colorMap->getCMYK(pixBuf, &cmyk); - lineBuf[4*x+0] = colToByte(cmyk.c); - lineBuf[4*x+1] = colToByte(cmyk.m); - lineBuf[4*x+2] = colToByte(cmyk.y); - lineBuf[4*x+3] = colToByte(cmyk.k); - } - } - - // write one line of each color component - if (useBinary) { - for (comp = 0; comp < 4; ++comp) { - for (x = 0; x < width; ++x) { - hexBuf[i++] = lineBuf[4*x + comp]; - if (i >= 64) { - writePSBuf(hexBuf, i); - i = 0; - } - } - } - } else { - for (comp = 0; comp < 4; ++comp) { - for (x = 0; x < width; ++x) { - digit = lineBuf[4*x + comp] / 16; - hexBuf[i++] = digit + ((digit >= 10)? 'a'-10: '0'); - digit = lineBuf[4*x + comp] % 16; - hexBuf[i++] = digit + ((digit >= 10)? 'a'-10: '0'); - if (i >= 64) { - hexBuf[i++] = '\n'; - writePSBuf(hexBuf, i); - i = 0; - } - } - } - } - } - - if (i != 0) { - if (!useBinary) { - hexBuf[i++] = '\n'; - } - writePSBuf(hexBuf, i); - } - - str->close(); - delete imgStr; - gfree(lineBuf); - - if (maskStr && !(maskColors && colorMap)) { - writePS("pdfImClipEnd\n"); - } -} - -void PSOutputDev::maskToClippingPath(Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert) { - ImageStream *imgStr; - Guchar *line; - PSOutImgClipRect *rects0, *rects1, *rectsTmp, *rectsOut; - int rects0Len, rects1Len, rectsSize, rectsOutLen, rectsOutSize; - GBool emitRect, addRect, extendRect; - int i, x0, x1, y, maskXor; - - imgStr = new ImageStream(maskStr, maskWidth, 1, 1); - imgStr->reset(); - rects0Len = rects1Len = rectsOutLen = 0; - rectsSize = rectsOutSize = 64; - rects0 = (PSOutImgClipRect *)gmallocn(rectsSize, sizeof(PSOutImgClipRect)); - rects1 = (PSOutImgClipRect *)gmallocn(rectsSize, sizeof(PSOutImgClipRect)); - rectsOut = (PSOutImgClipRect *)gmallocn(rectsOutSize, sizeof(PSOutImgClipRect)); - maskXor = maskInvert ? 1 : 0; - for (y = 0; y < maskHeight; ++y) { - if (!(line = imgStr->getLine())) { - break; - } - i = 0; - rects1Len = 0; - for (x0 = 0; x0 < maskWidth && (line[x0] ^ maskXor); ++x0) ; - for (x1 = x0; x1 < maskWidth && !(line[x1] ^ maskXor); ++x1) ; - while (x0 < maskWidth || i < rects0Len) { - emitRect = addRect = extendRect = gFalse; - if (x0 >= maskWidth) { - emitRect = gTrue; - } else if (i >= rects0Len) { - addRect = gTrue; - } else if (rects0[i].x0 < x0) { - emitRect = gTrue; - } else if (x0 < rects0[i].x0) { - addRect = gTrue; - } else if (rects0[i].x1 == x1) { - extendRect = gTrue; - } else { - emitRect = addRect = gTrue; - } - if (emitRect) { - if (rectsOutLen == rectsOutSize) { - rectsOutSize *= 2; - rectsOut = (PSOutImgClipRect *)greallocn(rectsOut, rectsOutSize, sizeof(PSOutImgClipRect)); - } - rectsOut[rectsOutLen].x0 = rects0[i].x0; - rectsOut[rectsOutLen].x1 = rects0[i].x1; - rectsOut[rectsOutLen].y0 = maskHeight - y - 1; - rectsOut[rectsOutLen].y1 = maskHeight - rects0[i].y0 - 1; - ++rectsOutLen; - ++i; - } - if (addRect || extendRect) { - if (rects1Len == rectsSize) { - rectsSize *= 2; - rects0 = (PSOutImgClipRect *)greallocn(rects0, rectsSize, sizeof(PSOutImgClipRect)); - rects1 = (PSOutImgClipRect *)greallocn(rects1, rectsSize, sizeof(PSOutImgClipRect)); - } - rects1[rects1Len].x0 = x0; - rects1[rects1Len].x1 = x1; - if (addRect) { - rects1[rects1Len].y0 = y; - } - if (extendRect) { - rects1[rects1Len].y0 = rects0[i].y0; - ++i; - } - ++rects1Len; - for (x0 = x1; x0 < maskWidth && (line[x0] ^ maskXor); ++x0) ; - for (x1 = x0; x1 < maskWidth && !(line[x1] ^ maskXor); ++x1) ; - } - } - rectsTmp = rects0; - rects0 = rects1; - rects1 = rectsTmp; - i = rects0Len; - rects0Len = rects1Len; - rects1Len = i; - } - for (i = 0; i < rects0Len; ++i) { - if (rectsOutLen == rectsOutSize) { - rectsOutSize *= 2; - rectsOut = (PSOutImgClipRect *)greallocn(rectsOut, rectsOutSize, sizeof(PSOutImgClipRect)); - } - rectsOut[rectsOutLen].x0 = rects0[i].x0; - rectsOut[rectsOutLen].x1 = rects0[i].x1; - rectsOut[rectsOutLen].y0 = maskHeight - y - 1; - rectsOut[rectsOutLen].y1 = maskHeight - rects0[i].y0 - 1; - ++rectsOutLen; - } - if (rectsOutLen < 65536/4) { - writePSFmt("{0:d} array 0\n", rectsOutLen * 4); - for (i = 0; i < rectsOutLen; ++i) { - writePSFmt("[{0:d} {1:d} {2:d} {3:d}] pr\n", - rectsOut[i].x0, rectsOut[i].y0, - rectsOut[i].x1 - rectsOut[i].x0, - rectsOut[i].y1 - rectsOut[i].y0); - } - writePSFmt("pop {0:d} {1:d} pdfImClip\n", maskWidth, maskHeight); - } else { - // would be over the limit of array size. - // make each rectangle path and clip. - writePS("gsave newpath\n"); - for (i = 0; i < rectsOutLen; ++i) { - writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n", - ((double)rectsOut[i].x0)/maskWidth, - ((double)rectsOut[i].y0)/maskHeight, - ((double)(rectsOut[i].x1 - rectsOut[i].x0))/maskWidth, - ((double)(rectsOut[i].y1 - rectsOut[i].y0))/maskHeight); - } - writePS("clip\n"); - } - gfree(rectsOut); - gfree(rects0); - gfree(rects1); - delete imgStr; - maskStr->close(); -} - -void PSOutputDev::doImageL2(Object *ref, GfxImageColorMap *colorMap, - GBool invert, GBool inlineImg, - Stream *str, int width, int height, int len, - int *maskColors, Stream *maskStr, - int maskWidth, int maskHeight, GBool maskInvert) { - Stream *str2; - ImageStream *imgStr; - Guchar *line; - PSOutImgClipRect *rects0, *rects1, *rectsTmp, *rectsOut; - int rects0Len, rects1Len, rectsSize, rectsOutLen, rectsOutSize; - GBool emitRect, addRect, extendRect; - GooString *s; - int n, numComps; - GBool useRLE, useASCII, useASCIIHex, useCompressed; - GfxSeparationColorSpace *sepCS; - GfxColor color; - GfxCMYK cmyk; - int c; - int col, i, j, x0, x1, y; - char dataBuf[4096]; - - rectsOutLen = 0; - - // color key masking - if (maskColors && colorMap && !inlineImg) { - // can't read the stream twice for inline images -- but masking - // isn't allowed with inline images anyway - numComps = colorMap->getNumPixelComps(); - imgStr = new ImageStream(str, width, numComps, colorMap->getBits()); - imgStr->reset(); - rects0Len = rects1Len = 0; - rectsSize = rectsOutSize = 64; - rects0 = (PSOutImgClipRect *)gmallocn(rectsSize, sizeof(PSOutImgClipRect)); - rects1 = (PSOutImgClipRect *)gmallocn(rectsSize, sizeof(PSOutImgClipRect)); - rectsOut = (PSOutImgClipRect *)gmallocn(rectsOutSize, - sizeof(PSOutImgClipRect)); - for (y = 0; y < height; ++y) { - if (!(line = imgStr->getLine())) { - break; - } - i = 0; - rects1Len = 0; - for (x0 = 0; x0 < width; ++x0) { - for (j = 0; j < numComps; ++j) { - if (line[x0*numComps+j] < maskColors[2*j] || - line[x0*numComps+j] > maskColors[2*j+1]) { - break; - } - } - if (j < numComps) { - break; - } - } - for (x1 = x0; x1 < width; ++x1) { - for (j = 0; j < numComps; ++j) { - if (line[x1*numComps+j] < maskColors[2*j] || - line[x1*numComps+j] > maskColors[2*j+1]) { - break; - } - } - if (j == numComps) { - break; - } - } - while (x0 < width || i < rects0Len) { - emitRect = addRect = extendRect = gFalse; - if (x0 >= width) { - emitRect = gTrue; - } else if (i >= rects0Len) { - addRect = gTrue; - } else if (rects0[i].x0 < x0) { - emitRect = gTrue; - } else if (x0 < rects0[i].x0) { - addRect = gTrue; - } else if (rects0[i].x1 == x1) { - extendRect = gTrue; - } else { - emitRect = addRect = gTrue; - } - if (emitRect) { - if (rectsOutLen == rectsOutSize) { - rectsOutSize *= 2; - rectsOut = (PSOutImgClipRect *)greallocn(rectsOut, rectsOutSize, - sizeof(PSOutImgClipRect)); - } - rectsOut[rectsOutLen].x0 = rects0[i].x0; - rectsOut[rectsOutLen].x1 = rects0[i].x1; - rectsOut[rectsOutLen].y0 = height - y - 1; - rectsOut[rectsOutLen].y1 = height - rects0[i].y0 - 1; - ++rectsOutLen; - ++i; - } - if (addRect || extendRect) { - if (rects1Len == rectsSize) { - rectsSize *= 2; - rects0 = (PSOutImgClipRect *)greallocn(rects0, rectsSize, - sizeof(PSOutImgClipRect)); - rects1 = (PSOutImgClipRect *)greallocn(rects1, rectsSize, - sizeof(PSOutImgClipRect)); - } - rects1[rects1Len].x0 = x0; - rects1[rects1Len].x1 = x1; - if (addRect) { - rects1[rects1Len].y0 = y; - } - if (extendRect) { - rects1[rects1Len].y0 = rects0[i].y0; - ++i; - } - ++rects1Len; - for (x0 = x1; x0 < width; ++x0) { - for (j = 0; j < numComps; ++j) { - if (line[x0*numComps+j] < maskColors[2*j] || - line[x0*numComps+j] > maskColors[2*j+1]) { - break; - } - } - if (j < numComps) { - break; - } - } - for (x1 = x0; x1 < width; ++x1) { - for (j = 0; j < numComps; ++j) { - if (line[x1*numComps+j] < maskColors[2*j] || - line[x1*numComps+j] > maskColors[2*j+1]) { - break; - } - } - if (j == numComps) { - break; - } - } - } - } - rectsTmp = rects0; - rects0 = rects1; - rects1 = rectsTmp; - i = rects0Len; - rects0Len = rects1Len; - rects1Len = i; - } - for (i = 0; i < rects0Len; ++i) { - if (rectsOutLen == rectsOutSize) { - rectsOutSize *= 2; - rectsOut = (PSOutImgClipRect *)greallocn(rectsOut, rectsOutSize, - sizeof(PSOutImgClipRect)); - } - rectsOut[rectsOutLen].x0 = rects0[i].x0; - rectsOut[rectsOutLen].x1 = rects0[i].x1; - rectsOut[rectsOutLen].y0 = height - y - 1; - rectsOut[rectsOutLen].y1 = height - rects0[i].y0 - 1; - ++rectsOutLen; - } - if (rectsOutLen < 65536/4) { - writePSFmt("{0:d} array 0\n", rectsOutLen * 4); - for (i = 0; i < rectsOutLen; ++i) { - writePSFmt("[{0:d} {1:d} {2:d} {3:d}] pr\n", - rectsOut[i].x0, rectsOut[i].y0, - rectsOut[i].x1 - rectsOut[i].x0, - rectsOut[i].y1 - rectsOut[i].y0); - } - writePSFmt("pop {0:d} {1:d} pdfImClip\n", width, height); - } else { - // would be over the limit of array size. - // make each rectangle path and clip. - writePS("gsave newpath\n"); - for (i = 0; i < rectsOutLen; ++i) { - writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n", - ((double)rectsOut[i].x0)/width, - ((double)rectsOut[i].y0)/height, - ((double)(rectsOut[i].x1 - rectsOut[i].x0))/width, - ((double)(rectsOut[i].y1 - rectsOut[i].y0))/height); - } - writePS("clip\n"); - } - gfree(rectsOut); - gfree(rects0); - gfree(rects1); - delete imgStr; - str->close(); - - // explicit masking - } else if (maskStr) { - maskToClippingPath(maskStr, maskWidth, maskHeight, maskInvert); - } - - // color space - if (colorMap) { - dumpColorSpaceL2(colorMap->getColorSpace(), gFalse, gTrue, gFalse); - writePS(" setcolorspace\n"); - } - - useASCIIHex = globalParams->getPSASCIIHex(); - - // set up the image data - if (mode == psModeForm || inType3Char || preload) { - if (inlineImg) { - // create an array - str2 = new FixedLengthEncoder(str, len); - str2 = new RunLengthEncoder(str2); - if (useASCIIHex) { - str2 = new ASCIIHexEncoder(str2); - } else { - str2 = new ASCII85Encoder(str2); - } - str2->reset(); - col = 0; - writePS((char *)(useASCIIHex ? "[<" : "[<~")); - do { - do { - c = str2->getChar(); - } while (c == '\n' || c == '\r'); - if (c == (useASCIIHex ? '>' : '~') || c == EOF) { - break; - } - if (c == 'z') { - writePSChar(c); - ++col; - } else { - writePSChar(c); - ++col; - for (i = 1; i <= (useASCIIHex ? 1 : 4); ++i) { - do { - c = str2->getChar(); - } while (c == '\n' || c == '\r'); - if (c == (useASCIIHex ? '>' : '~') || c == EOF) { - break; - } - writePSChar(c); - ++col; - } - } - // each line is: "<~...data...~><eol>" - // so max data length = 255 - 6 = 249 - // chunks are 1 or 5 bytes each, so we have to stop at 245 - // but make it 240 just to be safe - if (col > 240) { - writePS((char *)(useASCIIHex ? ">\n<" : "~>\n<~")); - col = 0; - } - } while (c != (useASCIIHex ? '>' : '~') && c != EOF); - writePS((char *)(useASCIIHex ? ">\n" : "~>\n")); - // add an extra entry because the RunLengthDecode filter may - // read past the end - writePS("<>]\n"); - writePS("0\n"); - str2->close(); - delete str2; - } else { - // make sure the image is setup, it sometimes is not like on bug #17645 - setupImage(ref->getRef(), str); - // set up to use the array already created by setupImages() - writePSFmt("ImData_{0:d}_{1:d} 0 0\n",ref->getRefNum(), ref->getRefGen()); - } - } - - // image dictionary - writePS("<<\n /ImageType 1\n"); - - // width, height, matrix, bits per component - writePSFmt(" /Width {0:d}\n", width); - writePSFmt(" /Height {0:d}\n", height); - writePSFmt(" /ImageMatrix [{0:d} 0 0 {1:d} 0 {2:d}]\n", - width, -height, height); - if (colorMap && colorMap->getColorSpace()->getMode() == csDeviceN) { - writePS(" /BitsPerComponent 8\n"); - } else { - writePSFmt(" /BitsPerComponent {0:d}\n", - colorMap ? colorMap->getBits() : 1); - } - - // decode - if (colorMap) { - writePS(" /Decode ["); - if ((level == psLevel2Sep || level == psLevel3Sep) && - colorMap->getColorSpace()->getMode() == csSeparation) { - // this matches up with the code in the pdfImSep operator - n = (1 << colorMap->getBits()) - 1; - writePSFmt("{0:.4g} {1:.4g}", colorMap->getDecodeLow(0) * n, - colorMap->getDecodeHigh(0) * n); - } else if (colorMap->getColorSpace()->getMode() == csDeviceN) { - numComps = ((GfxDeviceNColorSpace *)colorMap->getColorSpace())-> - getAlt()->getNComps(); - for (i = 0; i < numComps; ++i) { - if (i > 0) { - writePS(" "); - } - writePS("0 1"); - } - } else { - numComps = colorMap->getNumPixelComps(); - for (i = 0; i < numComps; ++i) { - if (i > 0) { - writePS(" "); - } - writePSFmt("{0:.4g} {1:.4g}", - colorMap->getDecodeLow(i), colorMap->getDecodeHigh(i)); - } - } - writePS("]\n"); - } else { - writePSFmt(" /Decode [{0:d} {1:d}]\n", invert ? 1 : 0, invert ? 0 : 1); - } - - // data source - if (mode == psModeForm || inType3Char || preload) { - if (inlineImg) { - writePS(" /DataSource { 2 copy get exch 1 add exch }\n"); - } else { - writePS(" /DataSource { dup 65535 ge { pop 1 add 0 } if 2 index 2" - " index get 1 index get exch 1 add exch }\n"); - } - } else { - writePS(" /DataSource currentfile\n"); - } - - // filters - s = str->getPSFilter(level < psLevel2 ? 1 : level < psLevel3 ? 2 : 3, - " "); - if ((colorMap && colorMap->getColorSpace()->getMode() == csDeviceN) || - inlineImg || !s) { - useRLE = gTrue; - useASCII = !(mode == psModeForm || inType3Char || preload); - useCompressed = gFalse; - } else { - useRLE = gFalse; - useASCII = str->isBinary() && - !(mode == psModeForm || inType3Char || preload); - useCompressed = gTrue; - } - if (useASCII) { - writePSFmt(" /ASCII{0:s}Decode filter\n", - useASCIIHex ? "Hex" : "85"); - } - if (useRLE) { - writePS(" /RunLengthDecode filter\n"); - } - if (useCompressed) { - writePS(s->getCString()); - } - if (s) { - delete s; - } - - if (mode == psModeForm || inType3Char || preload) { - - // end of image dictionary - writePSFmt(">>\n{0:s}\n", colorMap ? "image" : "imagemask"); - - // get rid of the array and index - if (!inlineImg) writePS("pop "); - writePS("pop pop\n"); - - } else { - - // cut off inline image streams at appropriate length - if (inlineImg) { - str = new FixedLengthEncoder(str, len); - } else if (useCompressed) { - str = str->getUndecodedStream(); - } - - // recode DeviceN data - if (colorMap && colorMap->getColorSpace()->getMode() == csDeviceN) { - str = new DeviceNRecoder(str, width, height, colorMap); - } - - // add RunLengthEncode and ASCIIHex/85 encode filters - if (useRLE) { - str = new RunLengthEncoder(str); - } - if (useASCII) { - if (useASCIIHex) { - str = new ASCIIHexEncoder(str); - } else { - str = new ASCII85Encoder(str); - } - } - - // end of image dictionary - writePS(">>\n"); -#if OPI_SUPPORT - if (opi13Nest) { - if (inlineImg) { - // this can't happen -- OPI dictionaries are in XObjects - error(-1, "Internal: OPI in inline image"); - n = 0; - } else { - // need to read the stream to count characters -- the length - // is data-dependent (because of ASCII and RLE filters) - str->reset(); - n = 0; - while ((c = str->getChar()) != EOF) { - ++n; - } - str->close(); - } - // +6/7 for "pdfIm\n" / "pdfImM\n" - // +8 for newline + trailer - n += colorMap ? 14 : 15; - writePSFmt("%%BeginData: {0:d} Hex Bytes\n", n); - } -#endif - if ((level == psLevel2Sep || level == psLevel3Sep) && colorMap && - colorMap->getColorSpace()->getMode() == csSeparation) { - color.c[0] = gfxColorComp1; - sepCS = (GfxSeparationColorSpace *)colorMap->getColorSpace(); - sepCS->getCMYK(&color, &cmyk); - writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} ({4:t}) pdfImSep\n", - colToDbl(cmyk.c), colToDbl(cmyk.m), - colToDbl(cmyk.y), colToDbl(cmyk.k), - sepCS->getName()); - } else { - writePSFmt("{0:s}\n", colorMap ? "pdfIm" : "pdfImM"); - } - - // copy the stream data - str->reset(); - i = 0; - while ((c = str->getChar()) != EOF) { - dataBuf[i++] = c; - if (i >= (int)sizeof(dataBuf)) { - writePSBuf(dataBuf, i); - i = 0; - } - } - if (i > 0) { - writePSBuf(dataBuf, i); - } - str->close(); - - // add newline and trailer to the end - writePSChar('\n'); - writePS("%-EOD-\n"); -#if OPI_SUPPORT - if (opi13Nest) { - writePS("%%EndData\n"); - } -#endif - - // delete encoders - if (useRLE || useASCII || inlineImg) { - delete str; - } - } - - if ((maskColors && colorMap && !inlineImg) || maskStr) { - if (rectsOutLen < 65536/4) { - writePS("pdfImClipEnd\n"); - } else { - writePS("grestore\n"); - } - } -} - -//~ this doesn't currently support OPI -void PSOutputDev::doImageL3(Object *ref, GfxImageColorMap *colorMap, - GBool invert, GBool inlineImg, - Stream *str, int width, int height, int len, - int *maskColors, Stream *maskStr, - int maskWidth, int maskHeight, GBool maskInvert) { - Stream *str2; - GooString *s; - int n, numComps; - GBool useRLE, useASCII, useASCIIHex, useCompressed; - GBool maskUseRLE, maskUseASCII, maskUseCompressed; - GfxSeparationColorSpace *sepCS; - GfxColor color; - GfxCMYK cmyk; - int c; - int col, i; - - useASCIIHex = globalParams->getPSASCIIHex(); - useRLE = useASCII = useCompressed = gFalse; // make gcc happy - maskUseRLE = maskUseASCII = maskUseCompressed = gFalse; // make gcc happy - - // color space - if (colorMap) { - dumpColorSpaceL2(colorMap->getColorSpace(), gFalse, gTrue, gFalse); - writePS(" setcolorspace\n"); - } - - // set up the image data - if (mode == psModeForm || inType3Char || preload) { - if (inlineImg) { - // create an array - str2 = new FixedLengthEncoder(str, len); - str2 = new RunLengthEncoder(str2); - if (useASCIIHex) { - str2 = new ASCIIHexEncoder(str2); - } else { - str2 = new ASCII85Encoder(str2); - } - str2->reset(); - col = 0; - writePS((char *)(useASCIIHex ? "[<" : "[<~")); - do { - do { - c = str2->getChar(); - } while (c == '\n' || c == '\r'); - if (c == (useASCIIHex ? '>' : '~') || c == EOF) { - break; - } - if (c == 'z') { - writePSChar(c); - ++col; - } else { - writePSChar(c); - ++col; - for (i = 1; i <= (useASCIIHex ? 1 : 4); ++i) { - do { - c = str2->getChar(); - } while (c == '\n' || c == '\r'); - if (c == (useASCIIHex ? '>' : '~') || c == EOF) { - break; - } - writePSChar(c); - ++col; - } - } - // each line is: "<~...data...~><eol>" - // so max data length = 255 - 6 = 249 - // chunks are 1 or 5 bytes each, so we have to stop at 245 - // but make it 240 just to be safe - if (col > 240) { - writePS((char *)(useASCIIHex ? ">\n<" : "~>\n<~")); - col = 0; - } - } while (c != (useASCIIHex ? '>' : '~') && c != EOF); - writePS((char *)(useASCIIHex ? ">\n" : "~>\n")); - // add an extra entry because the RunLengthDecode filter may - // read past the end - writePS("<>]\n"); - writePS("0\n"); - str2->close(); - delete str2; - } else { - // make sure the image is setup, it sometimes is not like on bug #17645 - setupImage(ref->getRef(), str); - // set up to use the array already created by setupImages() - writePSFmt("ImData_{0:d}_{1:d} 0 0\n", ref->getRefNum(), ref->getRefGen()); - } - } - - // explicit masking - if (maskStr) { - writePS("<<\n /ImageType 3\n"); - writePS(" /InterleaveType 3\n"); - writePS(" /DataDict\n"); - } - - // image (data) dictionary - writePSFmt("<<\n /ImageType {0:d}\n", (maskColors && colorMap) ? 4 : 1); - - // color key masking - if (maskColors && colorMap) { - writePS(" /MaskColor [\n"); - numComps = colorMap->getNumPixelComps(); - for (i = 0; i < 2 * numComps; i += 2) { - writePSFmt(" {0:d} {1:d}\n", maskColors[i], maskColors[i+1]); - } - writePS(" ]\n"); - } - - // width, height, matrix, bits per component - writePSFmt(" /Width {0:d}\n", width); - writePSFmt(" /Height {0:d}\n", height); - writePSFmt(" /ImageMatrix [{0:d} 0 0 {1:d} 0 {2:d}]\n", - width, -height, height); - if (colorMap && colorMap->getColorSpace()->getMode() == csDeviceN) { - writePS(" /BitsPerComponent 8\n"); - } else { - writePSFmt(" /BitsPerComponent {0:d}\n", - colorMap ? colorMap->getBits() : 1); - } - - // decode - if (colorMap) { - writePS(" /Decode ["); - if ((level == psLevel2Sep || level == psLevel3Sep) && - colorMap->getColorSpace()->getMode() == csSeparation) { - // this matches up with the code in the pdfImSep operator - n = (1 << colorMap->getBits()) - 1; - writePSFmt("{0:.4g} {1:.4g}", colorMap->getDecodeLow(0) * n, - colorMap->getDecodeHigh(0) * n); - } else if (colorMap->getColorSpace()->getMode() == csDeviceN) { - numComps = ((GfxDeviceNColorSpace *)colorMap->getColorSpace())-> - getAlt()->getNComps(); - for (i = 0; i < numComps; ++i) { - if (i > 0) { - writePS(" "); - } - writePS("0 1"); - } - } else { - numComps = colorMap->getNumPixelComps(); - for (i = 0; i < numComps; ++i) { - if (i > 0) { - writePS(" "); - } - writePSFmt("{0:.4g} {1:.4g}", colorMap->getDecodeLow(i), - colorMap->getDecodeHigh(i)); - } - } - writePS("]\n"); - } else { - writePSFmt(" /Decode [{0:d} {1:d}]\n", invert ? 1 : 0, invert ? 0 : 1); - } - - // data source - if (mode == psModeForm || inType3Char || preload) { - if (inlineImg) { - writePS(" /DataSource { 2 copy get exch 1 add exch }\n"); - } else { - writePS(" /DataSource { dup 65535 ge { pop 1 add 0 } if 2 index 2" - " index get 1 index get exch 1 add exch }\n"); - } - } else { - writePS(" /DataSource currentfile\n"); - } - - // filters - s = str->getPSFilter(level < psLevel2 ? 1 : level < psLevel3 ? 2 : 3, - " "); - if ((colorMap && colorMap->getColorSpace()->getMode() == csDeviceN) || - inlineImg || !s) { - useRLE = gTrue; - useASCII = !(mode == psModeForm || inType3Char || preload); - useCompressed = gFalse; - } else { - useRLE = gFalse; - useASCII = str->isBinary() && - !(mode == psModeForm || inType3Char || preload); - useCompressed = gTrue; - } - if (useASCII) { - writePSFmt(" /ASCII{0:s}Decode filter\n", - useASCIIHex ? "Hex" : "85"); - } - if (useRLE) { - writePS(" /RunLengthDecode filter\n"); - } - if (useCompressed) { - writePS(s->getCString()); - } - if (s) { - delete s; - } - - // end of image (data) dictionary - writePS(">>\n"); - - // explicit masking - if (maskStr) { - writePS(" /MaskDict\n"); - writePS("<<\n"); - writePS(" /ImageType 1\n"); - writePSFmt(" /Width {0:d}\n", maskWidth); - writePSFmt(" /Height {0:d}\n", maskHeight); - writePSFmt(" /ImageMatrix [{0:d} 0 0 {1:d} 0 {2:d}]\n", - maskWidth, -maskHeight, maskHeight); - writePS(" /BitsPerComponent 1\n"); - writePSFmt(" /Decode [{0:d} {1:d}]\n", - maskInvert ? 1 : 0, maskInvert ? 0 : 1); - - // mask data source - writePS(" /DataSource currentfile\n"); - s = maskStr->getPSFilter(3, " "); - if (!s) { - maskUseRLE = gTrue; - maskUseASCII = gTrue; - maskUseCompressed = gFalse; - } else { - maskUseRLE = gFalse; - maskUseASCII = maskStr->isBinary(); - maskUseCompressed = gTrue; - } - if (maskUseASCII) { - writePSFmt(" /ASCII{0:s}Decode filter\n", - useASCIIHex ? "Hex" : "85"); - } - if (maskUseRLE) { - writePS(" /RunLengthDecode filter\n"); - } - if (maskUseCompressed) { - writePS(s->getCString()); - } - if (s) { - delete s; - } - - writePS(">>\n"); - writePS(">>\n"); - } - - if (mode == psModeForm || inType3Char || preload) { - - // image command - writePSFmt("{0:s}\n", colorMap ? "image" : "imagemask"); - - } else { - - if ((level == psLevel2Sep || level == psLevel3Sep) && colorMap && - colorMap->getColorSpace()->getMode() == csSeparation) { - color.c[0] = gfxColorComp1; - sepCS = (GfxSeparationColorSpace *)colorMap->getColorSpace(); - sepCS->getCMYK(&color, &cmyk); - writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} ({4:t}) pdfImSep\n", - colToDbl(cmyk.c), colToDbl(cmyk.m), - colToDbl(cmyk.y), colToDbl(cmyk.k), - sepCS->getName()); - } else { - writePSFmt("{0:s}\n", colorMap ? "pdfIm" : "pdfImM"); - } - - } - - // explicit masking - if (maskStr) { - - if (maskUseCompressed) { - maskStr = maskStr->getUndecodedStream(); - } - - // add RunLengthEncode and ASCIIHex/85 encode filters - if (maskUseRLE) { - maskStr = new RunLengthEncoder(maskStr); - } - if (maskUseASCII) { - if (useASCIIHex) { - maskStr = new ASCIIHexEncoder(maskStr); - } else { - maskStr = new ASCII85Encoder(maskStr); - } - } - - // copy the stream data - maskStr->reset(); - while ((c = maskStr->getChar()) != EOF) { - writePSChar(c); - } - maskStr->close(); - writePSChar('\n'); - - // delete encoders - if (maskUseRLE || maskUseASCII) { - delete maskStr; - } - } - - // get rid of the array and index - if (mode == psModeForm || inType3Char || preload) { - if (!inlineImg) writePS("pop "); - writePS("pop pop\n"); - - // image data - } else { - - // cut off inline image streams at appropriate length - if (inlineImg) { - str = new FixedLengthEncoder(str, len); - } else if (useCompressed) { - str = str->getUndecodedStream(); - } - - // recode DeviceN data - if (colorMap && colorMap->getColorSpace()->getMode() == csDeviceN) { - str = new DeviceNRecoder(str, width, height, colorMap); - } - - // add RunLengthEncode and ASCIIHex/85 encode filters - if (useRLE) { - str = new RunLengthEncoder(str); - } - if (useASCII) { - if (useASCIIHex) { - str = new ASCIIHexEncoder(str); - } else { - str = new ASCII85Encoder(str); - } - } - - // copy the stream data - str->reset(); - while ((c = str->getChar()) != EOF) { - writePSChar(c); - } - str->close(); - - // add newline and trailer to the end - writePSChar('\n'); - writePS("%-EOD-\n"); - - // delete encoders - if (useRLE || useASCII || inlineImg) { - delete str; - } - } -} - -void PSOutputDev::dumpColorSpaceL2(GfxColorSpace *colorSpace, - GBool genXform, GBool updateColors, - GBool map01) { - GfxCalGrayColorSpace *calGrayCS; - GfxCalRGBColorSpace *calRGBCS; - GfxLabColorSpace *labCS; - GfxIndexedColorSpace *indexedCS; - GfxSeparationColorSpace *separationCS; - GfxDeviceNColorSpace *deviceNCS; - GfxColorSpace *baseCS; - Guchar *lookup, *p; - double x[gfxColorMaxComps], y[gfxColorMaxComps]; - double low[gfxColorMaxComps], range[gfxColorMaxComps]; - GfxColor color; - GfxCMYK cmyk; - Function *func; - int n, numComps, numAltComps; - int byte; - int i, j, k; - - switch (colorSpace->getMode()) { - - case csDeviceGray: - writePS("/DeviceGray"); - if (genXform) { - writePS(" {}"); - } - if (updateColors) { - processColors |= psProcessBlack; - } - break; - - case csCalGray: - calGrayCS = (GfxCalGrayColorSpace *)colorSpace; - writePS("[/CIEBasedA <<\n"); - writePSFmt(" /DecodeA {{{0:.4g} exp}} bind\n", calGrayCS->getGamma()); - writePSFmt(" /MatrixA [{0:.4g} {1:.4g} {2:.4g}]\n", - calGrayCS->getWhiteX(), calGrayCS->getWhiteY(), - calGrayCS->getWhiteZ()); - writePSFmt(" /WhitePoint [{0:.4g} {1:.4g} {2:.4g}]\n", - calGrayCS->getWhiteX(), calGrayCS->getWhiteY(), - calGrayCS->getWhiteZ()); - writePSFmt(" /BlackPoint [{0:.4g} {1:.4g} {2:.4g}]\n", - calGrayCS->getBlackX(), calGrayCS->getBlackY(), - calGrayCS->getBlackZ()); - writePS(">>]"); - if (genXform) { - writePS(" {}"); - } - if (updateColors) { - processColors |= psProcessBlack; - } - break; - - case csDeviceRGB: - writePS("/DeviceRGB"); - if (genXform) { - writePS(" {}"); - } - if (updateColors) { - processColors |= psProcessCMYK; - } - break; - - case csCalRGB: - calRGBCS = (GfxCalRGBColorSpace *)colorSpace; - writePS("[/CIEBasedABC <<\n"); - writePSFmt(" /DecodeABC [{{{0:.4g} exp}} bind {{{1:.4g} exp}} bind {{{2:.4g} exp}} bind]\n", - calRGBCS->getGammaR(), calRGBCS->getGammaG(), - calRGBCS->getGammaB()); - writePSFmt(" /MatrixABC [{0:.4g} {1:.4g} {2:.4g} {3:.4g} {4:.4g} {5:.4g} {6:.4g} {7:.4g} {8:.4g}]\n", - calRGBCS->getMatrix()[0], calRGBCS->getMatrix()[1], - calRGBCS->getMatrix()[2], calRGBCS->getMatrix()[3], - calRGBCS->getMatrix()[4], calRGBCS->getMatrix()[5], - calRGBCS->getMatrix()[6], calRGBCS->getMatrix()[7], - calRGBCS->getMatrix()[8]); - writePSFmt(" /WhitePoint [{0:.4g} {1:.4g} {2:.4g}]\n", - calRGBCS->getWhiteX(), calRGBCS->getWhiteY(), - calRGBCS->getWhiteZ()); - writePSFmt(" /BlackPoint [{0:.4g} {1:.4g} {2:.4g}]\n", - calRGBCS->getBlackX(), calRGBCS->getBlackY(), - calRGBCS->getBlackZ()); - writePS(">>]"); - if (genXform) { - writePS(" {}"); - } - if (updateColors) { - processColors |= psProcessCMYK; - } - break; - - case csDeviceCMYK: - writePS("/DeviceCMYK"); - if (genXform) { - writePS(" {}"); - } - if (updateColors) { - processColors |= psProcessCMYK; - } - break; - - case csLab: - labCS = (GfxLabColorSpace *)colorSpace; - writePS("[/CIEBasedABC <<\n"); - if (map01) { - writePS(" /RangeABC [0 1 0 1 0 1]\n"); - writePSFmt(" /DecodeABC [{{100 mul 16 add 116 div}} bind {{{0:.4g} mul {1:.4g} add}} bind {{{2:.4g} mul {3:.4g} add}} bind]\n", - (labCS->getAMax() - labCS->getAMin()) / 500.0, - labCS->getAMin() / 500.0, - (labCS->getBMax() - labCS->getBMin()) / 200.0, - labCS->getBMin() / 200.0); - } else { - writePSFmt(" /RangeABC [0 100 {0:.4g} {1:.4g} {2:.4g} {3:.4g}]\n", - labCS->getAMin(), labCS->getAMax(), - labCS->getBMin(), labCS->getBMax()); - writePS(" /DecodeABC [{16 add 116 div} bind {500 div} bind {200 div} bind]\n"); - } - writePS(" /MatrixABC [1 1 1 1 0 0 0 0 -1]\n"); - writePS(" /DecodeLMN\n"); - writePS(" [{dup 6 29 div ge {dup dup mul mul}\n"); - writePSFmt(" {{4 29 div sub 108 841 div mul }} ifelse {0:.4g} mul}} bind\n", - labCS->getWhiteX()); - writePS(" {dup 6 29 div ge {dup dup mul mul}\n"); - writePSFmt(" {{4 29 div sub 108 841 div mul }} ifelse {0:.4g} mul}} bind\n", - labCS->getWhiteY()); - writePS(" {dup 6 29 div ge {dup dup mul mul}\n"); - writePSFmt(" {{4 29 div sub 108 841 div mul }} ifelse {0:.4g} mul}} bind]\n", - labCS->getWhiteZ()); - writePSFmt(" /WhitePoint [{0:.4g} {1:.4g} {2:.4g}]\n", - labCS->getWhiteX(), labCS->getWhiteY(), labCS->getWhiteZ()); - writePSFmt(" /BlackPoint [{0:.4g} {1:.4g} {2:.4g}]\n", - labCS->getBlackX(), labCS->getBlackY(), labCS->getBlackZ()); - writePS(">>]"); - if (genXform) { - writePS(" {}"); - } - if (updateColors) { - processColors |= psProcessCMYK; - } - break; - - case csICCBased: - // there is no transform function to the alternate color space, so - // we can use it directly - dumpColorSpaceL2(((GfxICCBasedColorSpace *)colorSpace)->getAlt(), - genXform, updateColors, gFalse); - break; - - case csIndexed: - indexedCS = (GfxIndexedColorSpace *)colorSpace; - baseCS = indexedCS->getBase(); - writePS("[/Indexed "); - dumpColorSpaceL2(baseCS, gFalse, gFalse, gTrue); - n = indexedCS->getIndexHigh(); - numComps = baseCS->getNComps(); - lookup = indexedCS->getLookup(); - writePSFmt(" {0:d} <\n", n); - if (baseCS->getMode() == csDeviceN) { - func = ((GfxDeviceNColorSpace *)baseCS)->getTintTransformFunc(); - baseCS->getDefaultRanges(low, range, indexedCS->getIndexHigh()); - if (((GfxDeviceNColorSpace *)baseCS)->getAlt()->getMode() == csLab) { - labCS = (GfxLabColorSpace *)((GfxDeviceNColorSpace *)baseCS)->getAlt(); - } else { - labCS = NULL; - } - numAltComps = ((GfxDeviceNColorSpace *)baseCS)->getAlt()->getNComps(); - p = lookup; - for (i = 0; i <= n; i += 8) { - writePS(" "); - for (j = i; j < i+8 && j <= n; ++j) { - for (k = 0; k < numComps; ++k) { - x[k] = low[k] + (*p++ / 255.0) * range[k]; - } - func->transform(x, y); - if (labCS) { - y[0] /= 100.0; - y[1] = (y[1] - labCS->getAMin()) / - (labCS->getAMax() - labCS->getAMin()); - y[2] = (y[2] - labCS->getBMin()) / - (labCS->getBMax() - labCS->getBMin()); - } - for (k = 0; k < numAltComps; ++k) { - byte = (int)(y[k] * 255 + 0.5); - if (byte < 0) { - byte = 0; - } else if (byte > 255) { - byte = 255; - } - writePSFmt("{0:02x}", byte); - } - if (updateColors) { - color.c[0] = dblToCol(j); - indexedCS->getCMYK(&color, &cmyk); - addProcessColor(colToDbl(cmyk.c), colToDbl(cmyk.m), - colToDbl(cmyk.y), colToDbl(cmyk.k)); - } - } - writePS("\n"); - } - } else { - for (i = 0; i <= n; i += 8) { - writePS(" "); - for (j = i; j < i+8 && j <= n; ++j) { - for (k = 0; k < numComps; ++k) { - writePSFmt("{0:02x}", lookup[j * numComps + k]); - } - if (updateColors) { - color.c[0] = dblToCol(j); - indexedCS->getCMYK(&color, &cmyk); - addProcessColor(colToDbl(cmyk.c), colToDbl(cmyk.m), - colToDbl(cmyk.y), colToDbl(cmyk.k)); - } - } - writePS("\n"); - } - } - writePS(">]"); - if (genXform) { - writePS(" {}"); - } - break; - - case csSeparation: - separationCS = (GfxSeparationColorSpace *)colorSpace; - writePS("[/Separation "); - writePSString(separationCS->getName()); - writePS(" "); - dumpColorSpaceL2(separationCS->getAlt(), gFalse, gFalse, gFalse); - writePS("\n"); - cvtFunction(separationCS->getFunc()); - writePS("]"); - if (genXform) { - writePS(" {}"); - } - if (updateColors) { - addCustomColor(separationCS); - } - break; - - case csDeviceN: - // DeviceN color spaces are a Level 3 PostScript feature. - deviceNCS = (GfxDeviceNColorSpace *)colorSpace; - dumpColorSpaceL2(deviceNCS->getAlt(), gFalse, updateColors, map01); - if (genXform) { - writePS(" "); - cvtFunction(deviceNCS->getTintTransformFunc()); - } - break; - - case csPattern: - //~ unimplemented - break; - } -} - -#if OPI_SUPPORT -void PSOutputDev::opiBegin(GfxState *state, Dict *opiDict) { - Object dict; - - if (globalParams->getPSOPI()) { - opiDict->lookup("2.0", &dict); - if (dict.isDict()) { - opiBegin20(state, dict.getDict()); - dict.free(); - } else { - dict.free(); - opiDict->lookup("1.3", &dict); - if (dict.isDict()) { - opiBegin13(state, dict.getDict()); - } - dict.free(); - } - } -} - -void PSOutputDev::opiBegin20(GfxState *state, Dict *dict) { - Object obj1, obj2, obj3, obj4; - double width, height, left, right, top, bottom; - int w, h; - int i; - - writePS("%%BeginOPI: 2.0\n"); - writePS("%%Distilled\n"); - - dict->lookup("F", &obj1); - if (getFileSpecName(&obj1, &obj2)) { - writePSFmt("%%ImageFileName: {0:t}\n", obj2.getString()); - obj2.free(); - } - obj1.free(); - - dict->lookup("MainImage", &obj1); - if (obj1.isString()) { - writePSFmt("%%MainImage: {0:t}\n", obj1.getString()); - } - obj1.free(); - - //~ ignoring 'Tags' entry - //~ need to use writePSString() and deal with >255-char lines - - dict->lookup("Size", &obj1); - if (obj1.isArray() && obj1.arrayGetLength() == 2) { - obj1.arrayGet(0, &obj2); - width = obj2.getNum(); - obj2.free(); - obj1.arrayGet(1, &obj2); - height = obj2.getNum(); - obj2.free(); - writePSFmt("%%ImageDimensions: {0:.6g} {1:.6g}\n", width, height); - } - obj1.free(); - - dict->lookup("CropRect", &obj1); - if (obj1.isArray() && obj1.arrayGetLength() == 4) { - obj1.arrayGet(0, &obj2); - left = obj2.getNum(); - obj2.free(); - obj1.arrayGet(1, &obj2); - top = obj2.getNum(); - obj2.free(); - obj1.arrayGet(2, &obj2); - right = obj2.getNum(); - obj2.free(); - obj1.arrayGet(3, &obj2); - bottom = obj2.getNum(); - obj2.free(); - writePSFmt("%%ImageCropRect: {0:.6g} {1:.6g} {2:.6g} {3:.6g}\n", - left, top, right, bottom); - } - obj1.free(); - - dict->lookup("Overprint", &obj1); - if (obj1.isBool()) { - writePSFmt("%%ImageOverprint: {0:s}\n", obj1.getBool() ? "true" : "false"); - } - obj1.free(); - - dict->lookup("Inks", &obj1); - if (obj1.isName()) { - writePSFmt("%%ImageInks: {0:s}\n", obj1.getName()); - } else if (obj1.isArray() && obj1.arrayGetLength() >= 1) { - obj1.arrayGet(0, &obj2); - if (obj2.isName()) { - writePSFmt("%%ImageInks: {0:s} {1:d}", - obj2.getName(), (obj1.arrayGetLength() - 1) / 2); - for (i = 1; i+1 < obj1.arrayGetLength(); i += 2) { - obj1.arrayGet(i, &obj3); - obj1.arrayGet(i+1, &obj4); - if (obj3.isString() && obj4.isNum()) { - writePS(" "); - writePSString(obj3.getString()); - writePSFmt(" {0:.6g}", obj4.getNum()); - } - obj3.free(); - obj4.free(); - } - writePS("\n"); - } - obj2.free(); - } - obj1.free(); - - writePS("gsave\n"); - - writePS("%%BeginIncludedImage\n"); - - dict->lookup("IncludedImageDimensions", &obj1); - if (obj1.isArray() && obj1.arrayGetLength() == 2) { - obj1.arrayGet(0, &obj2); - w = obj2.getInt(); - obj2.free(); - obj1.arrayGet(1, &obj2); - h = obj2.getInt(); - obj2.free(); - writePSFmt("%%IncludedImageDimensions: {0:d} {1:d}\n", w, h); - } - obj1.free(); - - dict->lookup("IncludedImageQuality", &obj1); - if (obj1.isNum()) { - writePSFmt("%%IncludedImageQuality: {0:.6g}\n", obj1.getNum()); - } - obj1.free(); - - ++opi20Nest; -} - -void PSOutputDev::opiBegin13(GfxState *state, Dict *dict) { - Object obj1, obj2; - int left, right, top, bottom, samples, bits, width, height; - double c, m, y, k; - double llx, lly, ulx, uly, urx, ury, lrx, lry; - double tllx, tlly, tulx, tuly, turx, tury, tlrx, tlry; - double horiz, vert; - int i, j; - - writePS("save\n"); - writePS("/opiMatrix2 matrix currentmatrix def\n"); - writePS("opiMatrix setmatrix\n"); - - dict->lookup("F", &obj1); - if (getFileSpecName(&obj1, &obj2)) { - writePSFmt("%ALDImageFileName: {0:t}\n", obj2.getString()); - obj2.free(); - } - obj1.free(); - - dict->lookup("CropRect", &obj1); - if (obj1.isArray() && obj1.arrayGetLength() == 4) { - obj1.arrayGet(0, &obj2); - left = obj2.getInt(); - obj2.free(); - obj1.arrayGet(1, &obj2); - top = obj2.getInt(); - obj2.free(); - obj1.arrayGet(2, &obj2); - right = obj2.getInt(); - obj2.free(); - obj1.arrayGet(3, &obj2); - bottom = obj2.getInt(); - obj2.free(); - writePSFmt("%ALDImageCropRect: {0:d} {1:d} {2:d} {3:d}\n", - left, top, right, bottom); - } - obj1.free(); - - dict->lookup("Color", &obj1); - if (obj1.isArray() && obj1.arrayGetLength() == 5) { - obj1.arrayGet(0, &obj2); - c = obj2.getNum(); - obj2.free(); - obj1.arrayGet(1, &obj2); - m = obj2.getNum(); - obj2.free(); - obj1.arrayGet(2, &obj2); - y = obj2.getNum(); - obj2.free(); - obj1.arrayGet(3, &obj2); - k = obj2.getNum(); - obj2.free(); - obj1.arrayGet(4, &obj2); - if (obj2.isString()) { - writePSFmt("%ALDImageColor: {0:.4g} {1:.4g} {2:.4g} {3:.4g} ", - c, m, y, k); - writePSString(obj2.getString()); - writePS("\n"); - } - obj2.free(); - } - obj1.free(); - - dict->lookup("ColorType", &obj1); - if (obj1.isName()) { - writePSFmt("%ALDImageColorType: {0:s}\n", obj1.getName()); - } - obj1.free(); - - //~ ignores 'Comments' entry - //~ need to handle multiple lines - - dict->lookup("CropFixed", &obj1); - if (obj1.isArray()) { - obj1.arrayGet(0, &obj2); - ulx = obj2.getNum(); - obj2.free(); - obj1.arrayGet(1, &obj2); - uly = obj2.getNum(); - obj2.free(); - obj1.arrayGet(2, &obj2); - lrx = obj2.getNum(); - obj2.free(); - obj1.arrayGet(3, &obj2); - lry = obj2.getNum(); - obj2.free(); - writePSFmt("%ALDImageCropFixed: {0:.6g} {1:.6g} {2:.6g} {3:.6g}\n", - ulx, uly, lrx, lry); - } - obj1.free(); - - dict->lookup("GrayMap", &obj1); - if (obj1.isArray()) { - writePS("%ALDImageGrayMap:"); - for (i = 0; i < obj1.arrayGetLength(); i += 16) { - if (i > 0) { - writePS("\n%%+"); - } - for (j = 0; j < 16 && i+j < obj1.arrayGetLength(); ++j) { - obj1.arrayGet(i+j, &obj2); - writePSFmt(" {0:d}", obj2.getInt()); - obj2.free(); - } - } - writePS("\n"); - } - obj1.free(); - - dict->lookup("ID", &obj1); - if (obj1.isString()) { - writePSFmt("%ALDImageID: {0:t}\n", obj1.getString()); - } - obj1.free(); - - dict->lookup("ImageType", &obj1); - if (obj1.isArray() && obj1.arrayGetLength() == 2) { - obj1.arrayGet(0, &obj2); - samples = obj2.getInt(); - obj2.free(); - obj1.arrayGet(1, &obj2); - bits = obj2.getInt(); - obj2.free(); - writePSFmt("%ALDImageType: {0:d} {1:d}\n", samples, bits); - } - obj1.free(); - - dict->lookup("Overprint", &obj1); - if (obj1.isBool()) { - writePSFmt("%ALDImageOverprint: {0:s}\n", - obj1.getBool() ? "true" : "false"); - } - obj1.free(); - - dict->lookup("Position", &obj1); - if (obj1.isArray() && obj1.arrayGetLength() == 8) { - obj1.arrayGet(0, &obj2); - llx = obj2.getNum(); - obj2.free(); - obj1.arrayGet(1, &obj2); - lly = obj2.getNum(); - obj2.free(); - obj1.arrayGet(2, &obj2); - ulx = obj2.getNum(); - obj2.free(); - obj1.arrayGet(3, &obj2); - uly = obj2.getNum(); - obj2.free(); - obj1.arrayGet(4, &obj2); - urx = obj2.getNum(); - obj2.free(); - obj1.arrayGet(5, &obj2); - ury = obj2.getNum(); - obj2.free(); - obj1.arrayGet(6, &obj2); - lrx = obj2.getNum(); - obj2.free(); - obj1.arrayGet(7, &obj2); - lry = obj2.getNum(); - obj2.free(); - opiTransform(state, llx, lly, &tllx, &tlly); - opiTransform(state, ulx, uly, &tulx, &tuly); - opiTransform(state, urx, ury, &turx, &tury); - opiTransform(state, lrx, lry, &tlrx, &tlry); - writePSFmt("%ALDImagePosition: {0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g} {6:.6g} {7:.6g}\n", - tllx, tlly, tulx, tuly, turx, tury, tlrx, tlry); - obj2.free(); - } - obj1.free(); - - dict->lookup("Resolution", &obj1); - if (obj1.isArray() && obj1.arrayGetLength() == 2) { - obj1.arrayGet(0, &obj2); - horiz = obj2.getNum(); - obj2.free(); - obj1.arrayGet(1, &obj2); - vert = obj2.getNum(); - obj2.free(); - writePSFmt("%ALDImageResoution: {0:.6g} {1:.6g}\n", horiz, vert); - obj2.free(); - } - obj1.free(); - - dict->lookup("Size", &obj1); - if (obj1.isArray() && obj1.arrayGetLength() == 2) { - obj1.arrayGet(0, &obj2); - width = obj2.getInt(); - obj2.free(); - obj1.arrayGet(1, &obj2); - height = obj2.getInt(); - obj2.free(); - writePSFmt("%ALDImageDimensions: {0:d} {1:d}\n", width, height); - } - obj1.free(); - - //~ ignoring 'Tags' entry - //~ need to use writePSString() and deal with >255-char lines - - dict->lookup("Tint", &obj1); - if (obj1.isNum()) { - writePSFmt("%ALDImageTint: {0:.6g}\n", obj1.getNum()); - } - obj1.free(); - - dict->lookup("Transparency", &obj1); - if (obj1.isBool()) { - writePSFmt("%ALDImageTransparency: {0:s}\n", - obj1.getBool() ? "true" : "false"); - } - obj1.free(); - - writePS("%%BeginObject: image\n"); - writePS("opiMatrix2 setmatrix\n"); - ++opi13Nest; -} - -// Convert PDF user space coordinates to PostScript default user space -// coordinates. This has to account for both the PDF CTM and the -// PSOutputDev page-fitting transform. -void PSOutputDev::opiTransform(GfxState *state, double x0, double y0, - double *x1, double *y1) { - double t; - - state->transform(x0, y0, x1, y1); - *x1 += tx; - *y1 += ty; - if (rotate == 90) { - t = *x1; - *x1 = -*y1; - *y1 = t; - } else if (rotate == 180) { - *x1 = -*x1; - *y1 = -*y1; - } else if (rotate == 270) { - t = *x1; - *x1 = *y1; - *y1 = -t; - } - *x1 *= xScale; - *y1 *= yScale; -} - -void PSOutputDev::opiEnd(GfxState *state, Dict *opiDict) { - Object dict; - - if (globalParams->getPSOPI()) { - opiDict->lookup("2.0", &dict); - if (dict.isDict()) { - writePS("%%EndIncludedImage\n"); - writePS("%%EndOPI\n"); - writePS("grestore\n"); - --opi20Nest; - dict.free(); - } else { - dict.free(); - opiDict->lookup("1.3", &dict); - if (dict.isDict()) { - writePS("%%EndObject\n"); - writePS("restore\n"); - --opi13Nest; - } - dict.free(); - } - } -} -#endif // OPI_SUPPORT - -void PSOutputDev::type3D0(GfxState *state, double wx, double wy) { - writePSFmt("{0:.6g} {1:.6g} setcharwidth\n", wx, wy); - writePS("q\n"); - t3NeedsRestore = gTrue; -} - -void PSOutputDev::type3D1(GfxState *state, double wx, double wy, - double llx, double lly, double urx, double ury) { - t3WX = wx; - t3WY = wy; - t3LLX = llx; - t3LLY = lly; - t3URX = urx; - t3URY = ury; - t3String = new GooString(); - writePS("q\n"); - t3Cacheable = gTrue; - t3NeedsRestore = gTrue; -} - -void PSOutputDev::drawForm(Ref id) { - writePSFmt("f_{0:d}_{1:d}\n", id.num, id.gen); -} - -void PSOutputDev::psXObject(Stream *psStream, Stream *level1Stream) { - Stream *str; - int c; - - if ((level == psLevel1 || level == psLevel1Sep) && level1Stream) { - str = level1Stream; - } else { - str = psStream; - } - str->reset(); - while ((c = str->getChar()) != EOF) { - writePSChar(c); - } - str->close(); -} - -//~ can nextFunc be reset to 0 -- maybe at the start of each page? -//~ or maybe at the start of each color space / pattern? -void PSOutputDev::cvtFunction(Function *func) { - SampledFunction *func0; - ExponentialFunction *func2; - StitchingFunction *func3; - PostScriptFunction *func4; - int thisFunc, m, n, nSamples, i, j, k; - - switch (func->getType()) { - - case -1: // identity - writePS("{}\n"); - break; - - case 0: // sampled - func0 = (SampledFunction *)func; - thisFunc = nextFunc++; - m = func0->getInputSize(); - n = func0->getOutputSize(); - nSamples = n; - for (i = 0; i < m; ++i) { - nSamples *= func0->getSampleSize(i); - } - writePSFmt("/xpdfSamples{0:d} [\n", thisFunc); - for (i = 0; i < nSamples; ++i) { - writePSFmt("{0:.6g}\n", func0->getSamples()[i]); - } - writePS("] def\n"); - writePSFmt("{{ {0:d} array {1:d} array {2:d} 2 roll\n", 2*m, m, m+2); - // [e01] [efrac] x0 x1 ... xm-1 - for (i = m-1; i >= 0; --i) { - // [e01] [efrac] x0 x1 ... xi - writePSFmt("{0:.6g} sub {1:.6g} mul {2:.6g} add\n", - func0->getDomainMin(i), - (func0->getEncodeMax(i) - func0->getEncodeMin(i)) / - (func0->getDomainMax(i) - func0->getDomainMin(i)), - func0->getEncodeMin(i)); - // [e01] [efrac] x0 x1 ... xi-1 xi' - writePSFmt("dup 0 lt {{ pop 0 }} {{ dup {0:d} gt {{ pop {1:d} }} if }} ifelse\n", - func0->getSampleSize(i) - 1, func0->getSampleSize(i) - 1); - // [e01] [efrac] x0 x1 ... xi-1 xi' - writePS("dup floor cvi exch dup ceiling cvi exch 2 index sub\n"); - // [e01] [efrac] x0 x1 ... xi-1 floor(xi') ceiling(xi') xi'-floor(xi') - writePSFmt("{0:d} index {1:d} 3 2 roll put\n", i+3, i); - // [e01] [efrac] x0 x1 ... xi-1 floor(xi') ceiling(xi') - writePSFmt("{0:d} index {1:d} 3 2 roll put\n", i+3, 2*i+1); - // [e01] [efrac] x0 x1 ... xi-1 floor(xi') - writePSFmt("{0:d} index {1:d} 3 2 roll put\n", i+2, 2*i); - // [e01] [efrac] x0 x1 ... xi-1 - } - // [e01] [efrac] - for (i = 0; i < n; ++i) { - // [e01] [efrac] y(0) ... y(i-1) - for (j = 0; j < (1<<m); ++j) { - // [e01] [efrac] y(0) ... y(i-1) s(0) s(1) ... s(j-1) - writePSFmt("xpdfSamples{0:d}\n", thisFunc); - k = m - 1; - writePSFmt("{0:d} index {1:d} get\n", i+j+2, 2 * k + ((j >> k) & 1)); - for (k = m - 2; k >= 0; --k) { - writePSFmt("{0:d} mul {1:d} index {2:d} get add\n", - func0->getSampleSize(k), - i + j + 3, - 2 * k + ((j >> k) & 1)); - } - if (n > 1) { - writePSFmt("{0:d} mul {1:d} add ", n, i); - } - writePS("get\n"); - } - // [e01] [efrac] y(0) ... y(i-1) s(0) s(1) ... s(2^m-1) - for (j = 0; j < m; ++j) { - // [e01] [efrac] y(0) ... y(i-1) s(0) s(1) ... s(2^(m-j)-1) - for (k = 0; k < (1 << (m - j)); k += 2) { - // [e01] [efrac] y(0) ... y(i-1) <k/2 s' values> <2^(m-j)-k s values> - writePSFmt("{0:d} index {1:d} get dup\n", - i + k/2 + (1 << (m-j)) - k, j); - writePS("3 2 roll mul exch 1 exch sub 3 2 roll mul add\n"); - writePSFmt("{0:d} 1 roll\n", k/2 + (1 << (m-j)) - k - 1); - } - // [e01] [efrac] s'(0) s'(1) ... s(2^(m-j-1)-1) - } - // [e01] [efrac] y(0) ... y(i-1) s - writePSFmt("{0:.6g} mul {1:.6g} add\n", - func0->getDecodeMax(i) - func0->getDecodeMin(i), - func0->getDecodeMin(i)); - writePSFmt("dup {0:.6g} lt {{ pop {1:.6g} }} {{ dup {2:.6g} gt {{ pop {3:.6g} }} if }} ifelse\n", - func0->getRangeMin(i), func0->getRangeMin(i), - func0->getRangeMax(i), func0->getRangeMax(i)); - // [e01] [efrac] y(0) ... y(i-1) y(i) - } - // [e01] [efrac] y(0) ... y(n-1) - writePSFmt("{0:d} {1:d} roll pop pop }}\n", n+2, n); - break; - - case 2: // exponential - func2 = (ExponentialFunction *)func; - n = func2->getOutputSize(); - writePSFmt("{{ dup {0:.6g} lt {{ pop {1:.6g} }} {{ dup {2:.6g} gt {{ pop {3:.6g} }} if }} ifelse\n", - func2->getDomainMin(0), func2->getDomainMin(0), - func2->getDomainMax(0), func2->getDomainMax(0)); - // x - for (i = 0; i < n; ++i) { - // x y(0) .. y(i-1) - writePSFmt("{0:d} index {1:.6g} exp {2:.6g} mul {3:.6g} add\n", - i, func2->getE(), func2->getC1()[i] - func2->getC0()[i], - func2->getC0()[i]); - if (func2->getHasRange()) { - writePSFmt("dup {0:.6g} lt {{ pop {1:.6g} }} {{ dup {2:.6g} gt {{ pop {3:.6g} }} if }} ifelse\n", - func2->getRangeMin(i), func2->getRangeMin(i), - func2->getRangeMax(i), func2->getRangeMax(i)); - } - } - // x y(0) .. y(n-1) - writePSFmt("{0:d} {1:d} roll pop }}\n", n+1, n); - break; - - case 3: // stitching - func3 = (StitchingFunction *)func; - thisFunc = nextFunc++; - for (i = 0; i < func3->getNumFuncs(); ++i) { - cvtFunction(func3->getFunc(i)); - writePSFmt("/xpdfFunc{0:d}_{1:d} exch def\n", thisFunc, i); - } - writePSFmt("{{ dup {0:.6g} lt {{ pop {1:.6g} }} {{ dup {2:.6g} gt {{ pop {3:.6g} }} if }} ifelse\n", - func3->getDomainMin(0), func3->getDomainMin(0), - func3->getDomainMax(0), func3->getDomainMax(0)); - for (i = 0; i < func3->getNumFuncs() - 1; ++i) { - writePSFmt("dup {0:.6g} lt {{ {1:.6g} sub {2:.6g} mul {3:.6g} add xpdfFunc{4:d}_{5:d} }} {{\n", - func3->getBounds()[i+1], - func3->getBounds()[i], - func3->getScale()[i], - func3->getEncode()[2*i], - thisFunc, i); - } - writePSFmt("{0:.6g} sub {1:.6g} mul {2:.6g} add xpdfFunc{3:d}_{4:d}\n", - func3->getBounds()[i], - func3->getScale()[i], - func3->getEncode()[2*i], - thisFunc, i); - for (i = 0; i < func3->getNumFuncs() - 1; ++i) { - writePS("} ifelse\n"); - } - writePS("}\n"); - break; - - case 4: // PostScript - func4 = (PostScriptFunction *)func; - writePS(func4->getCodeString()->getCString()); - writePS("\n"); - break; - } -} - -void PSOutputDev::writePSChar(char c) { - if (t3String) { - t3String->append(c); - } else { - (*outputFunc)(outputStream, &c, 1); - } -} - -void PSOutputDev::writePS(char *s) { - if (t3String) { - t3String->append(s); - } else { - (*outputFunc)(outputStream, s, strlen(s)); - } -} - -void PSOutputDev::writePSBuf(char *s, int len) { - if (t3String) { - for (int i = 0; i < len; i++) { - t3String->append(s[i]); - } - } else { - (*outputFunc)(outputStream, s, len); - } -} - -void PSOutputDev::writePSFmt(const char *fmt, ...) { - va_list args; - GooString *buf; - - va_start(args, fmt); - if (t3String) { - t3String->appendfv((char *)fmt, args); - } else { - buf = GooString::formatv((char *)fmt, args); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - va_end(args); -} - -void PSOutputDev::writePSString(GooString *s) { - Guchar *p; - int n, line; - char buf[8]; - - writePSChar('('); - line = 1; - for (p = (Guchar *)s->getCString(), n = s->getLength(); n; ++p, --n) { - if (line >= 64) { - writePSChar('\\'); - writePSChar('\n'); - line = 0; - } - if (*p == '(' || *p == ')' || *p == '\\') { - writePSChar('\\'); - writePSChar((char)*p); - line += 2; - } else if (*p < 0x20 || *p >= 0x80) { - sprintf(buf, "\\%03o", *p); - writePS(buf); - line += 4; - } else { - writePSChar((char)*p); - ++line; - } - } - writePSChar(')'); -} - -void PSOutputDev::writePSName(char *s) { - char *p; - char c; - - p = s; - while ((c = *p++)) { - if (c <= (char)0x20 || c >= (char)0x7f || - c == '(' || c == ')' || c == '<' || c == '>' || - c == '[' || c == ']' || c == '{' || c == '}' || - c == '/' || c == '%' || c == '\\') { - writePSFmt("#{0:02x}", c & 0xff); - } else { - writePSChar(c); - } - } -} - -// Convert GooString to GooString, with appropriate escaping -// of things that can't appear in a label -// This is heavily based on the writePSTextLine() method -GooString* PSOutputDev::filterPSLabel(GooString *label, GBool *needParens) { - int i, step; - GBool isNumeric; - - // - DSC comments must be printable ASCII; control chars and - // backslashes have to be escaped (we do cheap UCS2-to-ASCII - // conversion by simply ignoring the high byte) - // - parentheses are escaped. this isn't strictly necessary for matched - // parentheses, but shouldn't be a problem - // - lines are limited to 255 chars (we limit to 200 here to allow - // for the keyword, which was emitted by the caller) - - GooString *label2 = new GooString(); - int labelLength = label->getLength(); - - if (labelLength == 0) { - isNumeric = false; - } else { - // this gets changed later if we find a non-numeric character - isNumeric = true; - } - - if ( (labelLength >= 2) && - ( (label->getChar(0) & 0xff) == 0xfe) && - ( (label->getChar(1) & 0xff) == 0xff) ) { - // UCS2 mode - i = 3; - step = 2; - if ( (label->getChar(labelLength-1) == 0) ) { - // prune the trailing null (0x000 for UCS2) - labelLength -= 2; - } - } else { - i = 0; - step = 1; - } - for (int j = 0; i < labelLength && j < 200; i += step) { - char c = label->getChar(i); - if ( (c < '0') || (c > '9') ) { - isNumeric = false; - } - if (c == '\\') { - label2->append("\\\\"); - j += 2; - } else if (c == ')') { - label2->append("\\)"); - } else if (c == '(') { - label2->append("\\("); - } else if (c < 0x20 || c > 0x7e) { - label2->append(GooString::format("\\{0:03o}", c)); - j += 4; - } else { - label2->append(c); - ++j; - } - } - if (needParens) { - *needParens = !(isNumeric); - } - return label2; -} - -// Write a DSC-compliant <textline>. -void PSOutputDev::writePSTextLine(GooString *s) { - int i, j, step; - int c; - - // - DSC comments must be printable ASCII; control chars and - // backslashes have to be escaped (we do cheap Unicode-to-ASCII - // conversion by simply ignoring the high byte) - // - lines are limited to 255 chars (we limit to 200 here to allow - // for the keyword, which was emitted by the caller) - // - lines that start with a left paren are treated as <text> - // instead of <textline>, so we escape a leading paren - if (s->getLength() >= 2 && - (s->getChar(0) & 0xff) == 0xfe && - (s->getChar(1) & 0xff) == 0xff) { - i = 3; - step = 2; - } else { - i = 0; - step = 1; - } - for (j = 0; i < s->getLength() && j < 200; i += step) { - c = s->getChar(i) & 0xff; - if (c == '\\') { - writePS("\\\\"); - j += 2; - } else if (c < 0x20 || c > 0x7e || (j == 0 && c == '(')) { - writePSFmt("\\{0:03o}", c); - j += 4; - } else { - writePSChar(c); - ++j; - } - } - writePS("\n"); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PSOutputDev.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/PSOutputDev.h deleted file mode 100644 index a1e0a2957cb..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PSOutputDev.h +++ /dev/null @@ -1,472 +0,0 @@ -//======================================================================== -// -// PSOutputDev.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Martin Kretzschmar <martink@gnome.org> -// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2006-2008 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2007 Brad Hards <bradh@kde.org> -// Copyright (C) 2009-2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// Copyright (C) 2009 Till Kamppeter <till.kamppeter@gmail.com> -// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2009, 2011 William Bader <williambader@hotmail.com> -// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef PSOUTPUTDEV_H -#define PSOUTPUTDEV_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "poppler-config.h" -#include <stddef.h> -#include "Object.h" -#include "GfxState.h" -#include "GlobalParams.h" -#include "OutputDev.h" - -class GfxPath; -class GfxFont; -class GfxColorSpace; -class GfxSeparationColorSpace; -class PDFRectangle; -struct PSFont8Info; -struct PSFont16Enc; -class PSOutCustomColor; -class Function; -class PDFDoc; - -//------------------------------------------------------------------------ -// PSOutputDev -//------------------------------------------------------------------------ - -enum PSOutMode { - psModePS, - psModeEPS, - psModeForm, - psModePSOrigPageSizes -}; - -enum PSFileType { - psFile, // write to file - psPipe, // write to pipe - psStdout, // write to stdout - psGeneric // write to a generic stream -}; - -typedef void (*PSOutputFunc)(void *stream, char *data, int len); - -class PSOutputDev: public OutputDev { -public: - - // Open a PostScript output file, and write the prolog. - PSOutputDev(const char *fileName, PDFDoc *doc, XRef *xrefA, Catalog *catalog, - char *psTitle, - int firstPage, int lastPage, PSOutMode modeA, - int paperWidthA = -1, int paperHeightA = -1, - GBool duplexA = gTrue, - int imgLLXA = 0, int imgLLYA = 0, - int imgURXA = 0, int imgURYA = 0, - GBool forceRasterizeA = gFalse, - GBool manualCtrlA = gFalse); - - // Open a PSOutputDev that will write to a generic stream. - PSOutputDev(PSOutputFunc outputFuncA, void *outputStreamA, - char *psTitle, - PDFDoc *doc, - XRef *xrefA, Catalog *catalog, - int firstPage, int lastPage, PSOutMode modeA, - int paperWidthA = -1, int paperHeightA = -1, - GBool duplexA = gTrue, - int imgLLXA = 0, int imgLLYA = 0, - int imgURXA = 0, int imgURYA = 0, - GBool forceRasterizeA = gFalse, - GBool manualCtrlA = gFalse); - - // Destructor -- writes the trailer and closes the file. - virtual ~PSOutputDev(); - - // Check if file was successfully created. - virtual GBool isOk() { return ok; } - - //---- get info about output device - - // Does this device use upside-down coordinates? - // (Upside-down means (0,0) is the top left corner of the page.) - virtual GBool upsideDown() { return gFalse; } - - // Does this device use drawChar() or drawString()? - virtual GBool useDrawChar() { return gFalse; } - - // Does this device use tilingPatternFill()? If this returns false, - // tiling pattern fills will be reduced to a series of other drawing - // operations. - virtual GBool useTilingPatternFill() { return gTrue; } - - // Does this device use functionShadedFill(), axialShadedFill(), and - // radialShadedFill()? If this returns false, these shaded fills - // will be reduced to a series of other drawing operations. - virtual GBool useShadedFills(int type) - { return type < 4 && level >= psLevel2; } - - // Does this device use drawForm()? If this returns false, - // form-type XObjects will be interpreted (i.e., unrolled). - virtual GBool useDrawForm() { return preload; } - - // Does this device use beginType3Char/endType3Char? Otherwise, - // text in Type 3 fonts will be drawn with drawChar/drawString. - virtual GBool interpretType3Chars() { return gFalse; } - - // This device now supports text in pattern colorspace! - virtual GBool supportTextCSPattern(GfxState *state) - { return state->getFillColorSpace()->getMode() == csPattern; } - - //----- header/trailer (used only if manualCtrl is true) - - // Write the document-level header. - void writeHeader(int firstPage, int lastPage, - PDFRectangle *mediaBox, PDFRectangle *cropBox, - int pageRotate, char *pstitle); - - // Write the Xpdf procset. - void writeXpdfProcset(); - - // Write the trailer for the current page. - void writePageTrailer(); - - // Write the document trailer. - void writeTrailer(); - - //----- initialization and control - - // Check to see if a page slice should be displayed. If this - // returns false, the page display is aborted. Typically, an - // OutputDev will use some alternate means to display the page - // before returning false. - virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool crop, - int sliceX, int sliceY, int sliceW, int sliceH, - GBool printing, Catalog *catalog, - GBool (*abortCheckCbk)(void *data) = NULL, - void *abortCheckCbkData = NULL); - - // Start a page. - virtual void startPage(int pageNum, GfxState *state); - - // End a page. - virtual void endPage(); - - //----- save/restore graphics state - virtual void saveState(GfxState *state); - virtual void restoreState(GfxState *state); - - //----- update graphics state - virtual void updateCTM(GfxState *state, double m11, double m12, - double m21, double m22, double m31, double m32); - virtual void updateLineDash(GfxState *state); - virtual void updateFlatness(GfxState *state); - virtual void updateLineJoin(GfxState *state); - virtual void updateLineCap(GfxState *state); - virtual void updateMiterLimit(GfxState *state); - virtual void updateLineWidth(GfxState *state); - virtual void updateFillColorSpace(GfxState *state); - virtual void updateStrokeColorSpace(GfxState *state); - virtual void updateFillColor(GfxState *state); - virtual void updateStrokeColor(GfxState *state); - virtual void updateFillOverprint(GfxState *state); - virtual void updateStrokeOverprint(GfxState *state); - virtual void updateTransfer(GfxState *state); - - //----- update text state - virtual void updateFont(GfxState *state); - virtual void updateTextMat(GfxState *state); - virtual void updateCharSpace(GfxState *state); - virtual void updateRender(GfxState *state); - virtual void updateRise(GfxState *state); - virtual void updateWordSpace(GfxState *state); - virtual void updateHorizScaling(GfxState *state); - virtual void updateTextPos(GfxState *state); - virtual void updateTextShift(GfxState *state, double shift); - - //----- path painting - virtual void stroke(GfxState *state); - virtual void fill(GfxState *state); - virtual void eoFill(GfxState *state); - virtual GBool tilingPatternFill(GfxState *state, Catalog *cat, Object *str, - double *pmat, int paintType, int tilingType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep); - virtual GBool functionShadedFill(GfxState *state, - GfxFunctionShading *shading); - virtual GBool axialShadedFill(GfxState *state, GfxAxialShading *shading, double /*tMin*/, double /*tMax*/); - virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *shading, double /*sMin*/, double /*sMax*/); - - //----- path clipping - virtual void clip(GfxState *state); - virtual void eoClip(GfxState *state); - virtual void clipToStrokePath(GfxState *state); - - //----- text drawing - virtual void drawString(GfxState *state, GooString *s); - virtual void beginTextObject(GfxState *state); - virtual GBool deviceHasTextClip(GfxState *state) { return haveTextClip && haveCSPattern; } - virtual void endTextObject(GfxState *state); - - //----- image drawing - virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool interpolate, GBool inlineImg); - virtual void drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - GBool interpolate, int *maskColors, GBool inlineImg); - virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, int maskWidth, int maskHeight, - GBool maskInvert, GBool maskInterpolate); - // If current colorspace ist pattern, - // need this device special handling for masks in pattern colorspace? - // Default is false - virtual GBool fillMaskCSPattern(GfxState * state) - { return state->getFillColorSpace()->getMode() == csPattern && (level != psLevel1 && level != psLevel1Sep); } - virtual void endMaskClip(GfxState * /*state*/); - -#if OPI_SUPPORT - //----- OPI functions - virtual void opiBegin(GfxState *state, Dict *opiDict); - virtual void opiEnd(GfxState *state, Dict *opiDict); -#endif - - //----- Type 3 font operators - virtual void type3D0(GfxState *state, double wx, double wy); - virtual void type3D1(GfxState *state, double wx, double wy, - double llx, double lly, double urx, double ury); - - //----- form XObjects - virtual void drawForm(Ref ref); - - //----- PostScript XObjects - virtual void psXObject(Stream *psStream, Stream *level1Stream); - - //----- miscellaneous - void setOffset(double x, double y) - { tx0 = x; ty0 = y; } - void setScale(double x, double y) - { xScale0 = x; yScale0 = y; } - void setRotate(int rotateA) - { rotate0 = rotateA; } - void setClip(double llx, double lly, double urx, double ury) - { clipLLX0 = llx; clipLLY0 = lly; clipURX0 = urx; clipURY0 = ury; } - void setUnderlayCbk(void (*cbk)(PSOutputDev *psOut, void *data), - void *data) - { underlayCbk = cbk; underlayCbkData = data; } - void setOverlayCbk(void (*cbk)(PSOutputDev *psOut, void *data), - void *data) - { overlayCbk = cbk; overlayCbkData = data; } - void setDisplayText(GBool display) { displayText = display; } - -private: - - void init(PSOutputFunc outputFuncA, void *outputStreamA, - PSFileType fileTypeA, char *pstitle, PDFDoc *doc, XRef *xrefA, Catalog *catalog, - int firstPage, int lastPage, PSOutMode modeA, - int imgLLXA, int imgLLYA, int imgURXA, int imgURYA, - GBool manualCtrlA, int paperWidthA, int paperHeightA, - GBool duplexA); - void setupResources(Dict *resDict); - void setupFonts(Dict *resDict); - void setupFont(GfxFont *font, Dict *parentResDict); - void setupEmbeddedType1Font(Ref *id, GooString *psName); - void setupExternalType1Font(GooString *fileName, GooString *psName); - void setupEmbeddedType1CFont(GfxFont *font, Ref *id, GooString *psName); - void setupEmbeddedOpenTypeT1CFont(GfxFont *font, Ref *id, GooString *psName); - void setupEmbeddedTrueTypeFont(GfxFont *font, Ref *id, GooString *psName); - GooString *setupExternalTrueTypeFont(GfxFont *font); - void setupEmbeddedCIDType0Font(GfxFont *font, Ref *id, GooString *psName); - void setupEmbeddedCIDTrueTypeFont(GfxFont *font, Ref *id, GooString *psName, - GBool needVerticalMetrics); - void setupEmbeddedOpenTypeCFFFont(GfxFont *font, Ref *id, GooString *psName); - GooString *setupExternalCIDTrueTypeFont(GfxFont *font, GooString *fileName, int faceIndex = 0); - void setupType3Font(GfxFont *font, GooString *psName, Dict *parentResDict); - void setupImages(Dict *resDict); - void setupImage(Ref id, Stream *str); - void setupForms(Dict *resDict); - void setupForm(Ref id, Object *strObj); - void addProcessColor(double c, double m, double y, double k); - void addCustomColor(GfxSeparationColorSpace *sepCS); - void doPath(GfxPath *path); - void maskToClippingPath(Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert); - void doImageL1(Object *ref, GfxImageColorMap *colorMap, - GBool invert, GBool inlineImg, - Stream *str, int width, int height, int len, - int *maskColors, Stream *maskStr, - int maskWidth, int maskHeight, GBool maskInvert); - void doImageL1Sep(Object *ref, GfxImageColorMap *colorMap, - GBool invert, GBool inlineImg, - Stream *str, int width, int height, int len, - int *maskColors, Stream *maskStr, - int maskWidth, int maskHeight, GBool maskInvert); - void doImageL2(Object *ref, GfxImageColorMap *colorMap, - GBool invert, GBool inlineImg, - Stream *str, int width, int height, int len, - int *maskColors, Stream *maskStr, - int maskWidth, int maskHeight, GBool maskInvert); - void doImageL3(Object *ref, GfxImageColorMap *colorMap, - GBool invert, GBool inlineImg, - Stream *str, int width, int height, int len, - int *maskColors, Stream *maskStr, - int maskWidth, int maskHeight, GBool maskInvert); - void dumpColorSpaceL2(GfxColorSpace *colorSpace, - GBool genXform, GBool updateColors, - GBool map01); - GBool tilingPatternFillL1(GfxState *state, Catalog *cat, Object *str, - double *pmat, int paintType, int tilingType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep); - GBool tilingPatternFillL2(GfxState *state, Catalog *cat, Object *str, - double *pmat, int paintType, int tilingType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep); - -#if OPI_SUPPORT - void opiBegin20(GfxState *state, Dict *dict); - void opiBegin13(GfxState *state, Dict *dict); - void opiTransform(GfxState *state, double x0, double y0, - double *x1, double *y1); -#endif - void cvtFunction(Function *func); - - // Write the document-level setup. - void writeDocSetup(PDFDoc *doc, Catalog *catalog, int firstPage, int lastPage, GBool duplexA); - - void writePSChar(char c); - void writePS(char *s); - void writePSBuf(char *s, int len); - void writePSFmt(const char *fmt, ...); - void writePSString(GooString *s); - void writePSName(char *s); - GooString *filterPSLabel(GooString *label, GBool *needParens=0); - void writePSTextLine(GooString *s); - - PSLevel level; // PostScript level (1, 2, separation) - PSOutMode mode; // PostScript mode (PS, EPS, form) - int paperWidth; // width of paper, in pts - int paperHeight; // height of paper, in pts - int prevWidth; // width of previous page - // (only psModePSOrigPageSizes output mode) - int prevHeight; // height of previous page - // (only psModePSOrigPageSizes output mode) - int imgLLX, imgLLY, // imageable area, in pts - imgURX, imgURY; - GBool substFonts; // substitute missing fonts - GBool preload; // load all images into memory, and - // predefine forms - - PSOutputFunc outputFunc; - void *outputStream; - PSFileType fileType; // file / pipe / stdout - GBool manualCtrl; - int seqPage; // current sequential page number - void (*underlayCbk)(PSOutputDev *psOut, void *data); - void *underlayCbkData; - void (*overlayCbk)(PSOutputDev *psOut, void *data); - void *overlayCbkData; - - XRef *xref; // the xref table for this PDF file - Catalog *m_catalog; // the catalog for this PDF file - - Ref *fontIDs; // list of object IDs of all used fonts - int fontIDLen; // number of entries in fontIDs array - int fontIDSize; // size of fontIDs array - Ref *fontFileIDs; // list of object IDs of all embedded fonts - int fontFileIDLen; // number of entries in fontFileIDs array - int fontFileIDSize; // size of fontFileIDs array - GooString **fontFileNames; // list of names of all embedded external fonts - GooString **psFileNames; // list of names of all embedded external fonts - int fontFileNameLen; // number of entries in fontFileNames array - int fontFileNameSize; // size of fontFileNames array - int nextTrueTypeNum; // next unique number to append to a TrueType - // font name - PSFont8Info *font8Info; // info for 8-bit fonts - int font8InfoLen; // number of entries in font8Info array - int font8InfoSize; // size of font8Info array - PSFont16Enc *font16Enc; // encodings for substitute 16-bit fonts - int font16EncLen; // number of entries in font16Enc array - int font16EncSize; // size of font16Enc array - Ref *imgIDs; // list of image IDs for in-memory images - int imgIDLen; // number of entries in imgIDs array - int imgIDSize; // size of imgIDs array - Ref *formIDs; // list of IDs for predefined forms - int formIDLen; // number of entries in formIDs array - int formIDSize; // size of formIDs array - GooList *xobjStack; // stack of XObject dicts currently being - // processed - int numSaves; // current number of gsaves - int numTilingPatterns; // current number of nested tiling patterns - int nextFunc; // next unique number to use for a function - - double tx0, ty0; // global translation - double xScale0, yScale0; // global scaling - int rotate0; // rotation angle (0, 90, 180, 270) - double clipLLX0, clipLLY0, - clipURX0, clipURY0; - double tx, ty; // global translation for current page - double xScale, yScale; // global scaling for current page - int rotate; // rotation angle for current page - double epsX1, epsY1, // EPS bounding box (unrotated) - epsX2, epsY2; - - GooString *embFontList; // resource comments for embedded fonts - - int processColors; // used process colors - PSOutCustomColor // used custom colors - *customColors; - - GBool haveTextClip; // set if text has been drawn with a - // clipping render mode - GBool haveCSPattern; // set if text has been drawn with a - // clipping render mode because of pattern colorspace - - GBool inType3Char; // inside a Type 3 CharProc - GooString *t3String; // Type 3 content string - double t3WX, t3WY, // Type 3 character parameters - t3LLX, t3LLY, t3URX, t3URY; - GBool t3Cacheable; // cleared if char is not cacheable - GBool t3NeedsRestore; // set if a 'q' operator was issued - GBool forceRasterize; // forces the page to be rasterized into a image before printing - GBool displayText; // displayText - -#if OPI_SUPPORT - int opi13Nest; // nesting level of OPI 1.3 objects - int opi20Nest; // nesting level of OPI 2.0 objects -#endif - - GBool ok; // set up ok? - - - friend class WinPDFPrinter; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PSTokenizer.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/PSTokenizer.cc deleted file mode 100644 index 05127f0d03c..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PSTokenizer.cc +++ /dev/null @@ -1,159 +0,0 @@ -//======================================================================== -// -// PSTokenizer.cc -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006 Scott Turner <scotty1024@mac.com> -// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdio.h> -#include <stdlib.h> -#include "PSTokenizer.h" - -//------------------------------------------------------------------------ - -// A '1' in this array means the character is white space. A '1' or -// '2' means the character ends a name or command. -static const char specialChars[256] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, // 0x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1x - 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, // 2x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, // 3x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 5x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 7x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9x - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ax - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // bx - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // cx - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // dx - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ex - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // fx -}; - -//------------------------------------------------------------------------ - -PSTokenizer::PSTokenizer(int (*getCharFuncA)(void *), void *dataA) { - getCharFunc = getCharFuncA; - data = dataA; - charBuf = -1; -} - -PSTokenizer::~PSTokenizer() { -} - -GBool PSTokenizer::getToken(char *buf, int size, int *length) { - GBool comment, backslash; - int c; - int i; - - // skip leading whitespace and comments - comment = gFalse; - while (1) { - if ((c = getChar()) == EOF) { - buf[0] = '\0'; - *length = 0; - return gFalse; - } - if (comment) { - if (c == '\x0a' || c == '\x0d') { - comment = gFalse; - } - } else if (c == '%') { - comment = gTrue; - } else if (specialChars[c] != 1) { - break; - } - } - - // Reserve room for terminating '\0' - size--; - - // read a token - i = 0; - buf[i++] = c; - if (c == '(') { - backslash = gFalse; - while ((c = lookChar()) != EOF) { - consumeChar(); - if (i < size) { - buf[i++] = c; - } - if (c == '\\') { - backslash = gTrue; - } else if (!backslash && c == ')') { - break; - } else { - backslash = gFalse; - } - } - } else if (c == '<') { - while ((c = lookChar()) != EOF) { - consumeChar(); - if (i < size && specialChars[c] != 1) { - buf[i++] = c; - } - if (c == '>') { - break; - } - } - } else if (c != '[' && c != ']') { - while ((c = lookChar()) != EOF && !specialChars[c]) { - consumeChar(); - if (i < size) { - buf[i++] = c; - } - } - } - // Zero terminate token string - buf[i] = '\0'; - // Return length of token - *length = i; - - return gTrue; -} - -int PSTokenizer::lookChar() { - if (charBuf < 0) { - charBuf = (*getCharFunc)(data); - } - return charBuf; -} - -void PSTokenizer::consumeChar() { - charBuf = -1; -} - -int PSTokenizer::getChar() { - int c = charBuf; - - if (c < 0) { - c = (*getCharFunc)(data); - } else { - charBuf = -1; - } - return c; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PSTokenizer.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/PSTokenizer.h deleted file mode 100644 index fc2f053d3f2..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PSTokenizer.h +++ /dev/null @@ -1,54 +0,0 @@ -//======================================================================== -// -// PSTokenizer.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006 Scott Turner <scotty1024@mac.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef PSTOKENIZER_H -#define PSTOKENIZER_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" - -//------------------------------------------------------------------------ - -class PSTokenizer { -public: - - PSTokenizer(int (*getCharFuncA)(void *), void *dataA); - ~PSTokenizer(); - - // Get the next PostScript token. Returns false at end-of-stream. - GBool getToken(char *buf, int size, int *length); - -private: - - int lookChar(); - void consumeChar(); - int getChar(); - - int (*getCharFunc)(void *); - void *data; - int charBuf; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Page.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Page.cc deleted file mode 100644 index 04d307bd213..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Page.cc +++ /dev/null @@ -1,715 +0,0 @@ -//======================================================================== -// -// Page.cc -// -// Copyright 1996-2007 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2005-2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2006-2008 Pino Toscano <pino@kde.org> -// Copyright (C) 2006 Nickolay V. Shmyrev <nshmyrev@yandex.ru> -// Copyright (C) 2006 Scott Turner <scotty1024@mac.com> -// Copyright (C) 2006-2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2008 Iñigo Martínez <inigomartinez@gmail.com> -// Copyright (C) 2008 Brad Hards <bradh@kde.org> -// Copyright (C) 2008 Ilya Gorenbein <igorenbein@finjan.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stddef.h> -#include <limits.h> -#include "GlobalParams.h" -#include "Object.h" -#include "Array.h" -#include "Dict.h" -#include "XRef.h" -#include "Link.h" -#include "OutputDev.h" -#include "Gfx.h" -#include "GfxState.h" -#include "Annot.h" -#include "TextOutputDev.h" -#include "Form.h" -#include "Error.h" -#include "Page.h" -#include "Catalog.h" -#include "Form.h" - -//------------------------------------------------------------------------ -// PDFRectangle -//------------------------------------------------------------------------ - -void PDFRectangle::clipTo(PDFRectangle *rect) { - if (x1 < rect->x1) { - x1 = rect->x1; - } else if (x1 > rect->x2) { - x1 = rect->x2; - } - if (x2 < rect->x1) { - x2 = rect->x1; - } else if (x2 > rect->x2) { - x2 = rect->x2; - } - if (y1 < rect->y1) { - y1 = rect->y1; - } else if (y1 > rect->y2) { - y1 = rect->y2; - } - if (y2 < rect->y1) { - y2 = rect->y1; - } else if (y2 > rect->y2) { - y2 = rect->y2; - } -} - -//------------------------------------------------------------------------ -// PageAttrs -//------------------------------------------------------------------------ - -PageAttrs::PageAttrs(PageAttrs *attrs, Dict *dict) { - Object obj1; - PDFRectangle mBox; - const GBool isPage = dict->is("Page"); - - // get old/default values - if (attrs) { - mediaBox = attrs->mediaBox; - cropBox = attrs->cropBox; - haveCropBox = attrs->haveCropBox; - rotate = attrs->rotate; - attrs->resources.copy(&resources); - } else { - // set default MediaBox to 8.5" x 11" -- this shouldn't be necessary - // but some (non-compliant) PDF files don't specify a MediaBox - mediaBox.x1 = 0; - mediaBox.y1 = 0; - mediaBox.x2 = 612; - mediaBox.y2 = 792; - cropBox.x1 = cropBox.y1 = cropBox.x2 = cropBox.y2 = 0; - haveCropBox = gFalse; - rotate = 0; - resources.initNull(); - } - - // media box - if (readBox(dict, "MediaBox", &mBox)) { - mediaBox = mBox; - } - - // crop box - if (readBox(dict, "CropBox", &cropBox)) { - haveCropBox = gTrue; - } - if (!haveCropBox) { - cropBox = mediaBox; - } - - if (isPage) { - // cropBox can not be bigger than mediaBox - if (cropBox.x2 - cropBox.x1 > mediaBox.x2 - mediaBox.x1) - { - cropBox.x1 = mediaBox.x1; - cropBox.x2 = mediaBox.x2; - } - if (cropBox.y2 - cropBox.y1 > mediaBox.y2 - mediaBox.y1) - { - cropBox.y1 = mediaBox.y1; - cropBox.y2 = mediaBox.y2; - } - } - - // other boxes - bleedBox = cropBox; - readBox(dict, "BleedBox", &bleedBox); - trimBox = cropBox; - readBox(dict, "TrimBox", &trimBox); - artBox = cropBox; - readBox(dict, "ArtBox", &artBox); - - if (isPage) { - // clip all other boxes to the media box - cropBox.clipTo(&mediaBox); - bleedBox.clipTo(&mediaBox); - trimBox.clipTo(&mediaBox); - artBox.clipTo(&mediaBox); - } - - // rotate - dict->lookup("Rotate", &obj1); - if (obj1.isInt()) { - rotate = obj1.getInt(); - } - obj1.free(); - while (rotate < 0) { - rotate += 360; - } - while (rotate >= 360) { - rotate -= 360; - } - - // misc attributes - dict->lookup("LastModified", &lastModified); - dict->lookup("BoxColorInfo", &boxColorInfo); - dict->lookup("Group", &group); - dict->lookup("Metadata", &metadata); - dict->lookup("PieceInfo", &pieceInfo); - dict->lookup("SeparationInfo", &separationInfo); - - // resource dictionary - dict->lookup("Resources", &obj1); - if (obj1.isDict()) { - resources.free(); - obj1.copy(&resources); - } - obj1.free(); -} - -PageAttrs::~PageAttrs() { - lastModified.free(); - boxColorInfo.free(); - group.free(); - metadata.free(); - pieceInfo.free(); - separationInfo.free(); - resources.free(); -} - -GBool PageAttrs::readBox(Dict *dict, char *key, PDFRectangle *box) { - PDFRectangle tmp; - double t; - Object obj1, obj2; - GBool ok; - - dict->lookup(key, &obj1); - if (obj1.isArray() && obj1.arrayGetLength() == 4) { - ok = gTrue; - obj1.arrayGet(0, &obj2); - if (obj2.isNum()) { - tmp.x1 = obj2.getNum(); - } else { - ok = gFalse; - } - obj2.free(); - obj1.arrayGet(1, &obj2); - if (obj2.isNum()) { - tmp.y1 = obj2.getNum(); - } else { - ok = gFalse; - } - obj2.free(); - obj1.arrayGet(2, &obj2); - if (obj2.isNum()) { - tmp.x2 = obj2.getNum(); - } else { - ok = gFalse; - } - obj2.free(); - obj1.arrayGet(3, &obj2); - if (obj2.isNum()) { - tmp.y2 = obj2.getNum(); - } else { - ok = gFalse; - } - obj2.free(); - if (tmp.x1 == 0 && tmp.x2 == 0 && tmp.y1 == 0 && tmp.y2 == 0) - ok = gFalse; - if (ok) { - if (tmp.x1 > tmp.x2) { - t = tmp.x1; tmp.x1 = tmp.x2; tmp.x2 = t; - } - if (tmp.y1 > tmp.y2) { - t = tmp.y1; tmp.y1 = tmp.y2; tmp.y2 = t; - } - *box = tmp; - } - } else { - ok = gFalse; - } - obj1.free(); - return ok; -} - -//------------------------------------------------------------------------ -// Page -//------------------------------------------------------------------------ - -Page::Page(XRef *xrefA, int numA, Dict *pageDict, Ref pageRefA, PageAttrs *attrsA, Form *form) { - Object tmp; - - ok = gTrue; - xref = xrefA; - num = numA; - duration = -1; - annots = NULL; - - pageObj.initDict(pageDict); - pageRef = pageRefA; - - // get attributes - attrs = attrsA; - - // transtion - pageDict->lookupNF("Trans", &trans); - if (!(trans.isRef() || trans.isDict() || trans.isNull())) { - error(-1, "Page transition object (page %d) is wrong type (%s)", - num, trans.getTypeName()); - trans.free(); - } - - // duration - pageDict->lookupNF("Dur", &tmp); - if (!(tmp.isNum() || tmp.isNull())) { - error(-1, "Page duration object (page %d) is wrong type (%s)", - num, tmp.getTypeName()); - } else if (tmp.isNum()) { - duration = tmp.getNum(); - } - tmp.free(); - - // annotations - pageDict->lookupNF("Annots", &annotsObj); - if (!(annotsObj.isRef() || annotsObj.isArray() || annotsObj.isNull())) { - error(-1, "Page annotations object (page %d) is wrong type (%s)", - num, annotsObj.getTypeName()); - annotsObj.free(); - goto err2; - } - - // contents - pageDict->lookupNF("Contents", &contents); - if (!(contents.isRef() || contents.isArray() || - contents.isNull())) { - error(-1, "Page contents object (page %d) is wrong type (%s)", - num, contents.getTypeName()); - contents.free(); - goto err1; - } - - // thumb - pageDict->lookupNF("Thumb", &thumb); - if (!(thumb.isStream() || thumb.isNull() || thumb.isRef())) { - error(-1, "Page thumb object (page %d) is wrong type (%s)", - num, thumb.getTypeName()); - thumb.initNull(); - } - - // actions - pageDict->lookupNF("AA", &actions); - if (!(actions.isDict() || actions.isNull())) { - error(-1, "Page additional action object (page %d) is wrong type (%s)", - num, actions.getTypeName()); - actions.initNull(); - } - - return; - - trans.initNull(); - err2: - annotsObj.initNull(); - err1: - contents.initNull(); - ok = gFalse; -} - -Page::~Page() { - delete attrs; - delete annots; - pageObj.free(); - annotsObj.free(); - contents.free(); - trans.free(); - thumb.free(); - actions.free(); -} - -Annots *Page::getAnnots(Catalog *catalog) { - if (!annots) { - Object obj; - annots = new Annots(xref, catalog, getAnnots(&obj)); - obj.free(); - } - - return annots; -} - -void Page::addAnnot(Annot *annot, Catalog *catalog) { - Object obj1; - Object tmp; - Ref annotRef = annot->getRef (); - - // Make sure we have annots before adding the new one - // even if it's an empty list so that we can safely - // call annots->appendAnnot(annot) - getAnnots(catalog); - - if (annotsObj.isNull()) { - Ref annotsRef; - // page doesn't have annots array, - // we have to create it - - obj1.initArray(xref); - obj1.arrayAdd(tmp.initRef (annotRef.num, annotRef.gen)); - tmp.free(); - - annotsRef = xref->addIndirectObject (&obj1); - annotsObj.initRef(annotsRef.num, annotsRef.gen); - pageObj.dictSet ("Annots", &annotsObj); - xref->setModifiedObject (&pageObj, pageRef); - } else { - getAnnots(&obj1); - if (obj1.isArray()) { - obj1.arrayAdd (tmp.initRef (annotRef.num, annotRef.gen)); - if (annotsObj.isRef()) - xref->setModifiedObject (&obj1, annotsObj.getRef()); - else - xref->setModifiedObject (&pageObj, pageRef); - } - obj1.free(); - } - - annots->appendAnnot(annot); - - annot->setPage(&pageRef, num); -} - -Links *Page::getLinks(Catalog *catalog) { - return new Links(getAnnots(catalog)); -} - -FormPageWidgets *Page::getFormWidgets(Catalog *catalog) { - return new FormPageWidgets(getAnnots(catalog), num, catalog->getForm()); -} - -void Page::display(OutputDev *out, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool crop, - GBool printing, Catalog *catalog, - GBool (*abortCheckCbk)(void *data), - void *abortCheckCbkData, - GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), - void *annotDisplayDecideCbkData) { - displaySlice(out, hDPI, vDPI, rotate, useMediaBox, crop, -1, -1, -1, -1, printing, catalog, - abortCheckCbk, abortCheckCbkData, - annotDisplayDecideCbk, annotDisplayDecideCbkData); -} - -Gfx *Page::createGfx(OutputDev *out, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool crop, - int sliceX, int sliceY, int sliceW, int sliceH, - GBool printing, Catalog *catalog, - GBool (*abortCheckCbk)(void *data), - void *abortCheckCbkData, - GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), - void *annotDisplayDecideCbkData) { - PDFRectangle *mediaBox, *cropBox; - PDFRectangle box; - Gfx *gfx; - - rotate += getRotate(); - if (rotate >= 360) { - rotate -= 360; - } else if (rotate < 0) { - rotate += 360; - } - - makeBox(hDPI, vDPI, rotate, useMediaBox, out->upsideDown(), - sliceX, sliceY, sliceW, sliceH, &box, &crop); - cropBox = getCropBox(); - mediaBox = getMediaBox(); - - if (globalParams->getPrintCommands()) { - printf("***** MediaBox = ll:%g,%g ur:%g,%g\n", - mediaBox->x1, mediaBox->y1, mediaBox->x2, mediaBox->y2); - printf("***** CropBox = ll:%g,%g ur:%g,%g\n", - cropBox->x1, cropBox->y1, cropBox->x2, cropBox->y2); - printf("***** Rotate = %d\n", attrs->getRotate()); - } - - gfx = new Gfx(xref, out, num, attrs->getResourceDict(), catalog, - hDPI, vDPI, &box, crop ? cropBox : (PDFRectangle *)NULL, - rotate, abortCheckCbk, abortCheckCbkData); - - return gfx; -} - -void Page::displaySlice(OutputDev *out, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool crop, - int sliceX, int sliceY, int sliceW, int sliceH, - GBool printing, Catalog *catalog, - GBool (*abortCheckCbk)(void *data), - void *abortCheckCbkData, - GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), - void *annotDisplayDecideCbkData) { - Gfx *gfx; - Object obj; - Annots *annotList; - int i; - - if (!out->checkPageSlice(this, hDPI, vDPI, rotate, useMediaBox, crop, - sliceX, sliceY, sliceW, sliceH, - printing, catalog, - abortCheckCbk, abortCheckCbkData)) { - return; - } - - gfx = createGfx(out, hDPI, vDPI, rotate, useMediaBox, crop, - sliceX, sliceY, sliceW, sliceH, - printing, catalog, - abortCheckCbk, abortCheckCbkData, - annotDisplayDecideCbk, annotDisplayDecideCbkData); - - contents.fetch(xref, &obj); - if (!obj.isNull()) { - gfx->saveState(); - gfx->display(&obj); - gfx->restoreState(); - } - obj.free(); - - // draw annotations - annotList = getAnnots(catalog); - - if (annotList->getNumAnnots() > 0) { - if (globalParams->getPrintCommands()) { - printf("***** Annotations\n"); - } - for (i = 0; i < annotList->getNumAnnots(); ++i) { - Annot *annot = annotList->getAnnot(i); - if ((annotDisplayDecideCbk && - (*annotDisplayDecideCbk)(annot, annotDisplayDecideCbkData)) || - !annotDisplayDecideCbk) { - annotList->getAnnot(i)->draw(gfx, printing); - } - } - out->dump(); - } - - delete gfx; -} - -void Page::display(Gfx *gfx) { - Object obj; - - contents.fetch(xref, &obj); - if (!obj.isNull()) { - gfx->saveState(); - gfx->display(&obj); - gfx->restoreState(); - } - obj.free(); -} - -GBool Page::loadThumb(unsigned char **data_out, - int *width_out, int *height_out, - int *rowstride_out) -{ - unsigned int pixbufdatasize; - int width, height, bits; - Object obj1, fetched_thumb; - Dict *dict; - GfxColorSpace *colorSpace; - GBool success = gFalse; - Stream *str; - GfxImageColorMap *colorMap; - - /* Get stream dict */ - thumb.fetch(xref, &fetched_thumb); - if (!fetched_thumb.isStream()) { - fetched_thumb.free(); - return gFalse; - } - - dict = fetched_thumb.streamGetDict(); - str = fetched_thumb.getStream(); - - if (!dict->lookupInt("Width", "W", &width)) - goto fail1; - if (!dict->lookupInt("Height", "H", &height)) - goto fail1; - if (!dict->lookupInt("BitsPerComponent", "BPC", &bits)) - goto fail1; - - /* Check for invalid dimensions and integer overflow. */ - if (width <= 0 || height <= 0) - goto fail1; - if (width > INT_MAX / 3 / height) - goto fail1; - pixbufdatasize = width * height * 3; - - /* Get color space */ - dict->lookup ("ColorSpace", &obj1); - if (obj1.isNull ()) { - obj1.free (); - dict->lookup ("CS", &obj1); - } - colorSpace = GfxColorSpace::parse(&obj1, NULL); - obj1.free(); - if (!colorSpace) { - fprintf (stderr, "Error: Cannot parse color space\n"); - goto fail1; - } - - dict->lookup("Decode", &obj1); - if (obj1.isNull()) { - obj1.free(); - dict->lookup("D", &obj1); - } - colorMap = new GfxImageColorMap(bits, &obj1, colorSpace); - obj1.free(); - if (!colorMap->isOk()) { - fprintf (stderr, "Error: invalid colormap\n"); - delete colorMap; - goto fail1; - } - - if (data_out) { - unsigned char *pixbufdata = (unsigned char *) gmalloc(pixbufdatasize); - unsigned char *p = pixbufdata; - ImageStream *imgstr = new ImageStream(str, width, - colorMap->getNumPixelComps(), - colorMap->getBits()); - imgstr->reset(); - for (int row = 0; row < height; ++row) { - for (int col = 0; col < width; ++col) { - Guchar pix[gfxColorMaxComps]; - GfxRGB rgb; - - imgstr->getPixel(pix); - colorMap->getRGB(pix, &rgb); - - *p++ = colToByte(rgb.r); - *p++ = colToByte(rgb.g); - *p++ = colToByte(rgb.b); - } - } - *data_out = pixbufdata; - imgstr->close(); - delete imgstr; - } - - success = gTrue; - - if (width_out) - *width_out = width; - if (height_out) - *height_out = height; - if (rowstride_out) - *rowstride_out = width * 3; - - delete colorMap; - fail1: - fetched_thumb.free(); - - return success; -} - -void Page::makeBox(double hDPI, double vDPI, int rotate, - GBool useMediaBox, GBool upsideDown, - double sliceX, double sliceY, double sliceW, double sliceH, - PDFRectangle *box, GBool *crop) { - PDFRectangle *mediaBox, *cropBox, *baseBox; - double kx, ky; - - mediaBox = getMediaBox(); - cropBox = getCropBox(); - if (sliceW >= 0 && sliceH >= 0) { - baseBox = useMediaBox ? mediaBox : cropBox; - kx = 72.0 / hDPI; - ky = 72.0 / vDPI; - if (rotate == 90) { - if (upsideDown) { - box->x1 = baseBox->x1 + ky * sliceY; - box->x2 = baseBox->x1 + ky * (sliceY + sliceH); - } else { - box->x1 = baseBox->x2 - ky * (sliceY + sliceH); - box->x2 = baseBox->x2 - ky * sliceY; - } - box->y1 = baseBox->y1 + kx * sliceX; - box->y2 = baseBox->y1 + kx * (sliceX + sliceW); - } else if (rotate == 180) { - box->x1 = baseBox->x2 - kx * (sliceX + sliceW); - box->x2 = baseBox->x2 - kx * sliceX; - if (upsideDown) { - box->y1 = baseBox->y1 + ky * sliceY; - box->y2 = baseBox->y1 + ky * (sliceY + sliceH); - } else { - box->y1 = baseBox->y2 - ky * (sliceY + sliceH); - box->y2 = baseBox->y2 - ky * sliceY; - } - } else if (rotate == 270) { - if (upsideDown) { - box->x1 = baseBox->x2 - ky * (sliceY + sliceH); - box->x2 = baseBox->x2 - ky * sliceY; - } else { - box->x1 = baseBox->x1 + ky * sliceY; - box->x2 = baseBox->x1 + ky * (sliceY + sliceH); - } - box->y1 = baseBox->y2 - kx * (sliceX + sliceW); - box->y2 = baseBox->y2 - kx * sliceX; - } else { - box->x1 = baseBox->x1 + kx * sliceX; - box->x2 = baseBox->x1 + kx * (sliceX + sliceW); - if (upsideDown) { - box->y1 = baseBox->y2 - ky * (sliceY + sliceH); - box->y2 = baseBox->y2 - ky * sliceY; - } else { - box->y1 = baseBox->y1 + ky * sliceY; - box->y2 = baseBox->y1 + ky * (sliceY + sliceH); - } - } - } else if (useMediaBox) { - *box = *mediaBox; - } else { - *box = *cropBox; - *crop = gFalse; - } -} - -void Page::processLinks(OutputDev *out, Catalog *catalog) { - Links *links; - int i; - - links = getLinks(catalog); - for (i = 0; i < links->getNumLinks(); ++i) { - out->processLink(links->getLink(i), catalog); - } - delete links; -} - -void Page::getDefaultCTM(double *ctm, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool upsideDown) { - GfxState *state; - int i; - rotate += getRotate(); - if (rotate >= 360) { - rotate -= 360; - } else if (rotate < 0) { - rotate += 360; - } - state = new GfxState(hDPI, vDPI, - useMediaBox ? getMediaBox() : getCropBox(), - rotate, upsideDown); - for (i = 0; i < 6; ++i) { - ctm[i] = state->getCTM()[i]; - } - delete state; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Page.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Page.h deleted file mode 100644 index 1ab69f396f0..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Page.h +++ /dev/null @@ -1,255 +0,0 @@ -//======================================================================== -// -// Page.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2006 Pino Toscano <pino@kde.org> -// Copyright (C) 2006, 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2008 Iñigo Martínez <inigomartinez@gmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef PAGE_H -#define PAGE_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -class Dict; -class XRef; -class OutputDev; -class Links; -class Catalog; -class Annots; -class Annot; -class Gfx; -class FormPageWidgets; -class Form; - -//------------------------------------------------------------------------ - -class PDFRectangle { -public: - double x1, y1, x2, y2; - - PDFRectangle() { x1 = y1 = x2 = y2 = 0; } - PDFRectangle(double x1A, double y1A, double x2A, double y2A) - { x1 = x1A; y1 = y1A; x2 = x2A; y2 = y2A; } - GBool isValid() { return x1 != 0 || y1 != 0 || x2 != 0 || y2 != 0; } - GBool contains(double x, double y) { return x1 <= x && x <= x2 && y1 <= y && y <= y2; } - void clipTo(PDFRectangle *rect); -}; - -//------------------------------------------------------------------------ -// PageAttrs -//------------------------------------------------------------------------ - -class PageAttrs { -public: - - // Construct a new PageAttrs object by merging a dictionary - // (of type Pages or Page) into another PageAttrs object. If - // <attrs> is NULL, uses defaults. - PageAttrs(PageAttrs *attrs, Dict *dict); - - // Destructor. - ~PageAttrs(); - - // Accessors. - PDFRectangle *getMediaBox() { return &mediaBox; } - PDFRectangle *getCropBox() { return &cropBox; } - GBool isCropped() { return haveCropBox; } - PDFRectangle *getBleedBox() { return &bleedBox; } - PDFRectangle *getTrimBox() { return &trimBox; } - PDFRectangle *getArtBox() { return &artBox; } - int getRotate() { return rotate; } - GooString *getLastModified() - { return lastModified.isString() - ? lastModified.getString() : (GooString *)NULL; } - Dict *getBoxColorInfo() - { return boxColorInfo.isDict() ? boxColorInfo.getDict() : (Dict *)NULL; } - Dict *getGroup() - { return group.isDict() ? group.getDict() : (Dict *)NULL; } - Stream *getMetadata() - { return metadata.isStream() ? metadata.getStream() : (Stream *)NULL; } - Dict *getPieceInfo() - { return pieceInfo.isDict() ? pieceInfo.getDict() : (Dict *)NULL; } - Dict *getSeparationInfo() - { return separationInfo.isDict() - ? separationInfo.getDict() : (Dict *)NULL; } - Dict *getResourceDict() - { return resources.isDict() ? resources.getDict() : (Dict *)NULL; } - -private: - - GBool readBox(Dict *dict, char *key, PDFRectangle *box); - - PDFRectangle mediaBox; - PDFRectangle cropBox; - GBool haveCropBox; - PDFRectangle bleedBox; - PDFRectangle trimBox; - PDFRectangle artBox; - int rotate; - Object lastModified; - Object boxColorInfo; - Object group; - Object metadata; - Object pieceInfo; - Object separationInfo; - Object resources; -}; - -//------------------------------------------------------------------------ -// Page -//------------------------------------------------------------------------ - -class Page { -public: - - // Constructor. - Page(XRef *xrefA, int numA, Dict *pageDict, Ref pageRefA, PageAttrs *attrsA, Form *form); - - // Destructor. - ~Page(); - - // Is page valid? - GBool isOk() { return ok; } - - // Get page parameters. - int getNum() { return num; } - PDFRectangle *getMediaBox() { return attrs->getMediaBox(); } - PDFRectangle *getCropBox() { return attrs->getCropBox(); } - GBool isCropped() { return attrs->isCropped(); } - double getMediaWidth() - { return attrs->getMediaBox()->x2 - attrs->getMediaBox()->x1; } - double getMediaHeight() - { return attrs->getMediaBox()->y2 - attrs->getMediaBox()->y1; } - double getCropWidth() - { return attrs->getCropBox()->x2 - attrs->getCropBox()->x1; } - double getCropHeight() - { return attrs->getCropBox()->y2 - attrs->getCropBox()->y1; } - PDFRectangle *getBleedBox() { return attrs->getBleedBox(); } - PDFRectangle *getTrimBox() { return attrs->getTrimBox(); } - PDFRectangle *getArtBox() { return attrs->getArtBox(); } - int getRotate() { return attrs->getRotate(); } - GooString *getLastModified() { return attrs->getLastModified(); } - Dict *getBoxColorInfo() { return attrs->getBoxColorInfo(); } - Dict *getGroup() { return attrs->getGroup(); } - Stream *getMetadata() { return attrs->getMetadata(); } - Dict *getPieceInfo() { return attrs->getPieceInfo(); } - Dict *getSeparationInfo() { return attrs->getSeparationInfo(); } - - // Get resource dictionary. - Dict *getResourceDict() { return attrs->getResourceDict(); } - - // Get annotations array. - Object *getAnnots(Object *obj) { return annotsObj.fetch(xref, obj); } - // Add a new annotation to the page - void addAnnot(Annot *annot, Catalog *catalog); - - // Return a list of links. - Links *getLinks(Catalog *catalog); - - // Return a list of annots. Ownership is transferred to the caller. - Annots *getAnnots(Catalog *catalog); - - // Get contents. - Object *getContents(Object *obj) { return contents.fetch(xref, obj); } - - // Get thumb. - Object *getThumb(Object *obj) { return thumb.fetch(xref, obj); } - GBool loadThumb(unsigned char **data, int *width, int *height, int *rowstride); - - // Get transition. - Object *getTrans(Object *obj) { return trans.fetch(xref, obj); } - - // Get form. - FormPageWidgets *getFormWidgets(Catalog *catalog); - - // Get duration, the maximum length of time, in seconds, - // that the page is displayed before the presentation automatically - // advances to the next page - double getDuration() { return duration; } - - // Get actions - Object *getActions(Object *obj) { return actions.fetch(xref, obj); } - - Gfx *createGfx(OutputDev *out, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool crop, - int sliceX, int sliceY, int sliceW, int sliceH, - GBool printing, Catalog *catalog, - GBool (*abortCheckCbk)(void *data), - void *abortCheckCbkData, - GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), - void *annotDisplayDecideCbkData); - - // Display a page. - void display(OutputDev *out, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool crop, - GBool printing, Catalog *catalog, - GBool (*abortCheckCbk)(void *data) = NULL, - void *abortCheckCbkData = NULL, - GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL, - void *annotDisplayDecideCbkData = NULL); - - // Display part of a page. - void displaySlice(OutputDev *out, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool crop, - int sliceX, int sliceY, int sliceW, int sliceH, - GBool printing, Catalog *catalog, - GBool (*abortCheckCbk)(void *data) = NULL, - void *abortCheckCbkData = NULL, - GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL, - void *annotDisplayDecideCbkData = NULL); - - void display(Gfx *gfx); - - void makeBox(double hDPI, double vDPI, int rotate, - GBool useMediaBox, GBool upsideDown, - double sliceX, double sliceY, double sliceW, double sliceH, - PDFRectangle *box, GBool *crop); - - void processLinks(OutputDev *out, Catalog *catalog); - - // Get the page's default CTM. - void getDefaultCTM(double *ctm, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool upsideDown); - -private: - - XRef *xref; // the xref table for this PDF file - Object pageObj; // page dictionary - Ref pageRef; // page reference - int num; // page number - PageAttrs *attrs; // page attributes - Annots *annots; // annotations - Object annotsObj; // annotations array - Object contents; // page contents - Object thumb; // page thumbnail - Object trans; // page transition - Object actions; // page addiction actions - double duration; // page duration - GBool ok; // true if page is valid -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PageLabelInfo.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/PageLabelInfo.cc deleted file mode 100644 index 1330988ccf0..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PageLabelInfo.cc +++ /dev/null @@ -1,389 +0,0 @@ -//======================================================================== -// -// This file is under the GPLv2 or later license -// -// Copyright (C) 2005-2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005, 2009 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2011 Simon Kellner <kellner@kit.edu> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> -#include <limits.h> -#include <stdlib.h> -#include <stdio.h> -#include <assert.h> - -#include "PageLabelInfo.h" - -/* http://mathworld.wolfram.com/RomanNumerals.html */ - -static int fromRoman(const char *buffer) { - int digit_value, prev_digit_value, value; - int i; - - prev_digit_value = INT_MAX; - value = 0; - for (i = 0; buffer[i] != '\0'; i++) { - switch (buffer[i]) { - case 'm': - case 'M': - digit_value = 1000; - break; - case 'd': - case 'D': - digit_value = 500; - break; - case 'c': - case 'C': - digit_value = 100; - break; - case 'l': - case 'L': - digit_value = 50; - break; - case 'x': - case 'X': - digit_value = 10; - break; - case 'v': - case 'V': - digit_value = 5; - break; - case 'i': - case 'I': - digit_value = 1; - break; - default: - return -1; - } - - if (digit_value <= prev_digit_value) - value += digit_value; - else - value += digit_value - prev_digit_value * 2; - prev_digit_value = digit_value; - } - - return value; -} - -static void toRoman(int number, GooString *str, GBool uppercase) { - static const char uppercaseNumerals[] = "IVXLCDM"; - static const char lowercaseNumerals[] = "ivxlcdm"; - int divisor; - int i, j, k; - const char *wh; - - if (uppercase) - wh = uppercaseNumerals; - else - wh = lowercaseNumerals; - - divisor = 1000; - for (k = 3; k >= 0; k--) { - i = number / divisor; - number = number % divisor; - - switch (i) { - case 0: - break; - case 5: - str->append(wh[2 * k + 1]); - break; - case 9: - str->append(wh[2 * k + 0]); - str->append(wh[ 2 * k + 2]); - break; - case 4: - str->append(wh[2 * k + 0]); - str->append(wh[2 * k + 1]); - break; - default: - if (i > 5) { - str->append(wh[2 * k + 1]); - i -= 5; - } - for (j = 0; j < i; j++) { - str->append(wh[2 * k + 0]); - } - } - - divisor = divisor / 10; - } -} - -static int fromLatin(const char *buffer) -{ - int count; - const char *p; - - for (p = buffer; *p; p++) { - if (*p != buffer[0]) - return -1; - } - - count = p - buffer; - if (buffer[0] >= 'a' && buffer[0] <= 'z') - return 26 * (count - 1) + buffer[0] - 'a' + 1; - if (buffer[0] >= 'A' && buffer[0] <= 'Z') - return 26 * (count - 1) + buffer[0] - 'A' + 1; - - return -1; -} - -#ifdef TEST -static void toLatin(int number, GooString *str, GBool uppercase) { - char base, letter; - int i, count; - - if (uppercase) - base = 'A'; - else - base = 'a'; - - count = (number - 1) / 26 + 1; - letter = base + (number - 1) % 26; - - for (i = 0; i < count; i++) - str->append(letter); -} -#endif - -PageLabelInfo::Interval::Interval(Object *dict, int baseA) { - Object obj; - - style = None; - if (dict->dictLookup("S", &obj)->isName()) { - if (obj.isName("D")) { - style = Arabic; - } else if (obj.isName("R")) { - style = UppercaseRoman; - } else if (obj.isName("r")) { - style = LowercaseRoman; - } else if (obj.isName("A")) { - style = UppercaseLatin; - } else if (obj.isName("a")) { - style = LowercaseLatin; - } - } - obj.free(); - - if (dict->dictLookup("P", &obj)->isString()) - prefix = obj.getString()->copy(); - else - prefix = new GooString(""); - obj.free(); - - if (dict->dictLookup("St", &obj)->isInt()) - first = obj.getInt(); - else - first = 1; - obj.free(); - - base = baseA; -} - -PageLabelInfo::Interval::~Interval() { - delete prefix; -} - -PageLabelInfo::PageLabelInfo(Object *tree, int numPages) { - int i; - Interval *interval, *next; - - parse(tree); - - for (i = 0; i < intervals.getLength(); i++) { - interval = (Interval *) intervals.get(i); - - if (i + 1 < intervals.getLength()) { - next = (Interval *) intervals.get(i + 1); - interval->length = next->base - interval->base; - } else { - interval->length = numPages - interval->base; - } - if (interval->length < 0) interval->length = 0; - } -} - -PageLabelInfo::~PageLabelInfo() { - int i; - for (i = 0; i < intervals.getLength(); ++i) { - delete (Interval*)intervals.get(i); - } -} - -void PageLabelInfo::parse(Object *tree) { - Object nums, obj; - Object kids, kid, limits, low, high; - int i, base; - Interval *interval; - - // leaf node - if (tree->dictLookup("Nums", &nums)->isArray()) { - for (i = 0; i < nums.arrayGetLength(); i += 2) { - if (!nums.arrayGet(i, &obj)->isInt()) { - obj.free(); - continue; - } - base = obj.getInt(); - obj.free(); - if (!nums.arrayGet(i + 1, &obj)->isDict()) { - obj.free(); - continue; - } - - interval = new Interval(&obj, base); - obj.free(); - intervals.append(interval); - } - } - nums.free(); - - if (tree->dictLookup("Kids", &kids)->isArray()) { - for (i = 0; i < kids.arrayGetLength(); ++i) { - if (kids.arrayGet(i, &kid)->isDict()) - parse(&kid); - kid.free(); - } - } - kids.free(); -} - -GBool PageLabelInfo::labelToIndex(GooString *label, int *index) -{ - Interval *interval; - char *str = label->getCString(), *end; - int prefixLength; - int i, number; - - for (i = 0; i < intervals.getLength(); i++) { - interval = (Interval *) intervals.get(i); - const int base = interval->base; - prefixLength = interval->prefix->getLength(); - if (label->cmpN(interval->prefix, prefixLength) != 0) - continue; - - switch (interval->style) { - case Interval::Arabic: - number = strtol(str + prefixLength, &end, 10); - if (*end == '\0' && number - interval->first < interval->length) { - *index = base + number - interval->first; - return gTrue; - } - break; - case Interval::LowercaseRoman: - case Interval::UppercaseRoman: - number = fromRoman(str + prefixLength); - if (number >= 0 && number - interval->first < interval->length) { - *index = base + number - interval->first; - return gTrue; - } - break; - case Interval::UppercaseLatin: - case Interval::LowercaseLatin: - number = fromLatin(str + prefixLength); - if (number >= 0 && number - interval->first < interval->length) { - *index = base + number - interval->first; - return gTrue; - } - break; - case Interval::None: - break; - } - } - - return gFalse; -} - -GBool PageLabelInfo::indexToLabel(int index, GooString *label) -{ - char buffer[32]; - int i, base, number; - Interval *interval; - GooString number_string; - - base = 0; - interval = NULL; - for (i = 0; i < intervals.getLength(); i++) { - interval = (Interval *) intervals.get(i); - if (base <= index && index < base + interval->length) - break; - base += interval->length; - } - - if (i == intervals.getLength()) - return gFalse; - - number = index - base + interval->first; - switch (interval->style) { - case Interval::Arabic: - snprintf (buffer, sizeof(buffer), "%d", number); - number_string.append(buffer); - break; - case Interval::LowercaseRoman: - toRoman(number, &number_string, gFalse); - break; - case Interval::UppercaseRoman: - toRoman(number, &number_string, gTrue); - break; - case Interval::UppercaseLatin: - case Interval::LowercaseLatin: - number = 0; - break; - case Interval::None: - break; - } - - label->clear(); - label->append(interval->prefix); - if (label->hasUnicodeMarker()) { - int i, len; - char ucs2_char[2]; - - /* Convert the ascii number string to ucs2 and append. */ - len = number_string.getLength (); - ucs2_char[0] = 0; - for (i = 0; i < len; ++i) { - ucs2_char[1] = number_string.getChar(i); - label->append(ucs2_char, 2); - } - ucs2_char[1] = 0; - label->append(ucs2_char, 2); - } else { - label->append(&number_string); - } - - return gTrue; -} - -#ifdef TEST -int main(int argc, char *argv[]) -{ - { - GooString str; - toRoman(177, &str, gFalse); - assert (str.cmp("clxxvii") == 0); - } - - { - GooString roman("clxxvii"); - assert (fromRoman(roman.getCString()) == 177); - } - - { - GooString str; - toLatin(54, &str, gFalse); - assert (str.cmp("bbb") == 0); - } - - { - GooString latin("ddd"); - assert (fromLatin(latin.getCString()) == 56); - } -} -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PageLabelInfo.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/PageLabelInfo.h deleted file mode 100644 index 960e710069d..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PageLabelInfo.h +++ /dev/null @@ -1,51 +0,0 @@ -//======================================================================== -// -// This file is under the GPLv2 or later license -// -// Copyright (C) 2005-2006 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <limits.h> -#include <stdlib.h> -#include <stdio.h> -#include <ctype.h> -#include <assert.h> - -#include "goo/gtypes.h" -#include "goo/GooList.h" -#include "goo/GooString.h" -#include "Object.h" - -class PageLabelInfo { -public: - PageLabelInfo(Object *tree, int numPages); - ~PageLabelInfo(); - GBool labelToIndex(GooString *label, int *index); - GBool indexToLabel(int index, GooString *label); - -private: - void parse(Object *tree); - -private: - struct Interval { - Interval(Object *dict, int baseA); - ~Interval(); - GooString *prefix; - enum NumberStyle { - None, - Arabic, - LowercaseRoman, - UppercaseRoman, - UppercaseLatin, - LowercaseLatin - } style; - int first, base, length; - }; - - GooList intervals; -}; diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PageTransition.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/PageTransition.cc deleted file mode 100644 index 3fbd0de2802..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PageTransition.cc +++ /dev/null @@ -1,137 +0,0 @@ -/* PageTransition.cc - * Copyright (C) 2005, Net Integration Technologies, Inc. - * Copyright (C) 2010, Albert Astals Cid <aacid@kde.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "PageTransition.h" - -//------------------------------------------------------------------------ -// PageTransition -//------------------------------------------------------------------------ - -PageTransition::PageTransition (Object *trans) { - Object obj; - Dict *dict; - - type = transitionReplace; - duration = 1; - alignment = transitionHorizontal; - direction = transitionInward; - angle = 0; - scale = 1.0; - rectangular = gFalse; - ok = gTrue; - - if (!trans || !trans->isDict ()) { - ok = gFalse; - return; - } - - dict = trans->getDict(); - - // get type - if (dict->lookup("S", &obj)->isName()) { - const char *s = obj.getName(); - - if (strcmp("R", s) == 0) - type = transitionReplace; - else if (strcmp("Split", s) == 0) - type = transitionSplit; - else if (strcmp("Blinds", s) == 0) - type = transitionBlinds; - else if (strcmp("Box", s) == 0) - type = transitionBox; - else if (strcmp("Wipe", s) == 0) - type = transitionWipe; - else if (strcmp("Dissolve", s) == 0) - type = transitionDissolve; - else if (strcmp("Glitter", s) == 0) - type = transitionGlitter; - else if (strcmp("Fly", s) == 0) - type = transitionFly; - else if (strcmp("Push", s) == 0) - type = transitionPush; - else if (strcmp("Cover", s) == 0) - type = transitionCover; - else if (strcmp("Uncover", s) == 0) - type = transitionUncover; - else if (strcmp("Fade", s) == 0) - type = transitionFade; - } - obj.free(); - - // get duration - if (dict->lookup("D", &obj)->isInt()) { - duration = obj.getInt(); - } - obj.free(); - - // get alignment - if (dict->lookup("Dm", &obj)->isName()) { - const char *dm = obj.getName(); - - if (strcmp("H", dm) == 0) - alignment = transitionHorizontal; - else if (strcmp("V", dm) == 0) - alignment = transitionVertical; - } - obj.free(); - - // get direction - if (dict->lookup("M", &obj)->isName()) { - const char *m = obj.getName(); - - if (strcmp("I", m) == 0) - direction = transitionInward; - else if (strcmp("O", m) == 0) - direction = transitionOutward; - } - obj.free(); - - // get angle - if (dict->lookup("Di", &obj)->isInt()) { - angle = obj.getInt(); - } - obj.free(); - - if (dict->lookup("Di", &obj)->isName()) { - if (strcmp("None", obj.getName()) == 0) - angle = 0; - } - obj.free(); - - // get sacle - if (dict->lookup("SS", &obj)->isReal()) { - scale = obj.getReal(); - } - obj.free(); - - // get rectangular - if (dict->lookup("B", &obj)->isBool()) { - rectangular = obj.getBool(); - } - obj.free(); -} - -PageTransition::~PageTransition() -{ -} - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PageTransition.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/PageTransition.h deleted file mode 100644 index e892c6c5051..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PageTransition.h +++ /dev/null @@ -1,104 +0,0 @@ -/* PageTransition.cc - * Copyright (C) 2005, Net Integration Technologies, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef PAGE_TRANSITION_H -#define PAGE_TRANSITION_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -//------------------------------------------------------------------------ -// PageTransition -//------------------------------------------------------------------------ - -// if changed remember to keep in sync with frontend enums -enum PageTransitionType { - transitionReplace = 0, - transitionSplit, - transitionBlinds, - transitionBox, - transitionWipe, - transitionDissolve, - transitionGlitter, - transitionFly, - transitionPush, - transitionCover, - transitionUncover, - transitionFade -}; - -// if changed remember to keep in sync with frontend enums -enum PageTransitionAlignment { - transitionHorizontal = 0, - transitionVertical -}; - -// if changed remember to keep in sync with frontend enums -enum PageTransitionDirection { - transitionInward = 0, - transitionOutward -}; - -class PageTransition { -public: - // Construct a Page Transition. - PageTransition (Object *trans); - - // Destructor. - ~PageTransition (); - - // Was the Page Transition created successfully? - GBool isOk() { return ok; } - - // Get type - PageTransitionType getType() { return type; } - - // Get duration - int getDuration() { return duration;} - - // Get alignment - PageTransitionAlignment getAlignment() { return alignment; } - - // Get direction - PageTransitionDirection getDirection() { return direction; } - - // Get angle - int getAngle() { return angle; } - - // Get scale - double getScale() { return scale; } - - // Is rectangular? - GBool isRectangular() { return rectangular; } - -private: - - PageTransitionType type; // transition style - int duration; // duration of the effect in seconds - PageTransitionAlignment alignment; // dimension of the effect - PageTransitionDirection direction; // direction of motion - int angle; // direction in degrees - double scale; // scale - GBool rectangular; // is the area to be flown in rectangular? - GBool ok; // set if created successfully -}; - -#endif /* PAGE_TRANSITION_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Parser.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Parser.cc deleted file mode 100644 index 34a828653e8..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Parser.cc +++ /dev/null @@ -1,278 +0,0 @@ -//======================================================================== -// -// Parser.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006, 2009, 201, 2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// Copyright (C) 2009 Ilya Gorenbein <igorenbein@finjan.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stddef.h> -#include "Object.h" -#include "Array.h" -#include "Dict.h" -#include "Decrypt.h" -#include "Parser.h" -#include "XRef.h" -#include "Error.h" - -Parser::Parser(XRef *xrefA, Lexer *lexerA, GBool allowStreamsA) { - xref = xrefA; - lexer = lexerA; - inlineImg = 0; - allowStreams = allowStreamsA; - lexer->getObj(&buf1); - lexer->getObj(&buf2); -} - -Parser::~Parser() { - buf1.free(); - buf2.free(); - delete lexer; -} - -Object *Parser::getObj(Object *obj, Guchar *fileKey, - CryptAlgorithm encAlgorithm, int keyLength, - int objNum, int objGen) { - std::set<int> fetchOriginatorNums; - return getObj(obj, fileKey, encAlgorithm, keyLength, objNum, objGen, &fetchOriginatorNums); -} - -Object *Parser::getObj(Object *obj, std::set<int> *fetchOriginatorNums) -{ - return getObj(obj, NULL, cryptRC4, 0, 0, 0, fetchOriginatorNums); -} - -Object *Parser::getObj(Object *obj, Guchar *fileKey, - CryptAlgorithm encAlgorithm, int keyLength, - int objNum, int objGen, std::set<int> *fetchOriginatorNums) { - char *key; - Stream *str; - Object obj2; - int num; - DecryptStream *decrypt; - GooString *s, *s2; - int c; - - // refill buffer after inline image data - if (inlineImg == 2) { - buf1.free(); - buf2.free(); - lexer->getObj(&buf1); - lexer->getObj(&buf2); - inlineImg = 0; - } - - // array - if (buf1.isCmd("[")) { - shift(); - obj->initArray(xref); - while (!buf1.isCmd("]") && !buf1.isEOF()) - obj->arrayAdd(getObj(&obj2, fileKey, encAlgorithm, keyLength, - objNum, objGen, fetchOriginatorNums)); - if (buf1.isEOF()) - error(getPos(), "End of file inside array"); - shift(); - - // dictionary or stream - } else if (buf1.isCmd("<<")) { - shift(objNum); - obj->initDict(xref); - while (!buf1.isCmd(">>") && !buf1.isEOF()) { - if (!buf1.isName()) { - error(getPos(), "Dictionary key must be a name object"); - shift(); - } else { - // buf1 might go away in shift(), so construct the key - key = copyString(buf1.getName()); - shift(); - if (buf1.isEOF() || buf1.isError()) { - gfree(key); - break; - } - obj->dictAdd(key, getObj(&obj2, fileKey, encAlgorithm, keyLength, objNum, objGen, fetchOriginatorNums)); - } - } - if (buf1.isEOF()) - error(getPos(), "End of file inside dictionary"); - // stream objects are not allowed inside content streams or - // object streams - if (allowStreams && buf2.isCmd("stream")) { - if ((str = makeStream(obj, fileKey, encAlgorithm, keyLength, - objNum, objGen, fetchOriginatorNums))) { - obj->initStream(str); - } else { - obj->free(); - obj->initError(); - } - } else { - shift(); - } - - // indirect reference or integer - } else if (buf1.isInt()) { - num = buf1.getInt(); - shift(); - if (buf1.isInt() && buf2.isCmd("R")) { - obj->initRef(num, buf1.getInt()); - shift(); - shift(); - } else { - obj->initInt(num); - } - - // string - } else if (buf1.isString() && fileKey) { - s = buf1.getString(); - s2 = new GooString(); - obj2.initNull(); - decrypt = new DecryptStream(new MemStream(s->getCString(), 0, - s->getLength(), &obj2), - fileKey, encAlgorithm, keyLength, - objNum, objGen); - decrypt->reset(); - while ((c = decrypt->getChar()) != EOF) { - s2->append((char)c); - } - delete decrypt; - obj->initString(s2); - shift(); - - // simple object - } else { - // avoid re-allocating memory for complex objects like strings by - // shallow copy of <buf1> to <obj> and nulling <buf1> so that - // subsequent buf1.free() won't free this memory - buf1.shallowCopy(obj); - buf1.initNull(); - shift(); - } - - return obj; -} - -Stream *Parser::makeStream(Object *dict, Guchar *fileKey, - CryptAlgorithm encAlgorithm, int keyLength, - int objNum, int objGen, std::set<int> *fetchOriginatorNums) { - Object obj; - BaseStream *baseStr; - Stream *str; - Guint pos, endPos, length; - - // get stream start position - lexer->skipToNextLine(); - pos = lexer->getPos(); - - // get length - dict->dictLookup("Length", &obj, fetchOriginatorNums); - if (obj.isInt()) { - length = (Guint)obj.getInt(); - obj.free(); - } else { - error(getPos(), "Bad 'Length' attribute in stream"); - obj.free(); - length = 0; - } - - // check for length in damaged file - if (xref && xref->getStreamEnd(pos, &endPos)) { - length = endPos - pos; - } - - // in badly damaged PDF files, we can run off the end of the input - // stream immediately after the "stream" token - if (!lexer->getStream()) { - return NULL; - } - baseStr = lexer->getStream()->getBaseStream(); - - // skip over stream data - if (Lexer::LOOK_VALUE_NOT_CACHED != lexer->lookCharLastValueCached) { - // take into account the fact that we've cached one value - pos = pos - 1; - lexer->lookCharLastValueCached = Lexer::LOOK_VALUE_NOT_CACHED; - } - lexer->setPos(pos + length); - - // refill token buffers and check for 'endstream' - shift(); // kill '>>' - shift(); // kill 'stream' - if (buf1.isCmd("endstream")) { - shift(); - } else { - error(getPos(), "Missing 'endstream'"); - if (xref) { - // shift until we find the proper endstream or we change to another object or reach eof - while (!buf1.isCmd("endstream") && xref->getNumEntry(lexer->getPos()) == objNum && !buf1.isEOF()) { - shift(); - } - length = lexer->getPos() - pos; - if (buf1.isCmd("endstream")) { - obj.initInt(length); - dict->dictSet("Length", &obj); - obj.free(); - } - } else { - // When building the xref we can't use it so use this - // kludge for broken PDF files: just add 5k to the length, and - // hope its enough - length += 5000; - } - } - - // make base stream - str = baseStr->makeSubStream(pos, gTrue, length, dict); - - // handle decryption - if (fileKey) { - str = new DecryptStream(str, fileKey, encAlgorithm, keyLength, - objNum, objGen); - } - - // get filters - str = str->addFilters(dict); - - return str; -} - -void Parser::shift(int objNum) { - if (inlineImg > 0) { - if (inlineImg < 2) { - ++inlineImg; - } else { - // in a damaged content stream, if 'ID' shows up in the middle - // of a dictionary, we need to reset - inlineImg = 0; - } - } else if (buf2.isCmd("ID")) { - lexer->skipChar(); // skip char after 'ID' command - inlineImg = 1; - } - buf1.free(); - buf2.shallowCopy(&buf1); - if (inlineImg > 0) // don't buffer inline image data - buf2.initNull(); - else - lexer->getObj(&buf2, objNum); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Parser.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Parser.h deleted file mode 100644 index 3d8a831f9d2..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Parser.h +++ /dev/null @@ -1,77 +0,0 @@ -//======================================================================== -// -// Parser.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006, 2010 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef PARSER_H -#define PARSER_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Lexer.h" - -//------------------------------------------------------------------------ -// Parser -//------------------------------------------------------------------------ - -class Parser { -public: - - // Constructor. - Parser(XRef *xrefA, Lexer *lexerA, GBool allowStreamsA); - - // Destructor. - ~Parser(); - - // Get the next object from the input stream. - Object *getObj(Object *obj, Guchar *fileKey = NULL, - CryptAlgorithm encAlgorithm = cryptRC4, int keyLength = 0, - int objNum = 0, int objGen = 0); - - Object *getObj(Object *obj, Guchar *fileKey, - CryptAlgorithm encAlgorithm, int keyLength, - int objNum, int objGen, std::set<int> *fetchOriginatorNums); - - Object *getObj(Object *obj, std::set<int> *fetchOriginatorNums); - - // Get stream. - Stream *getStream() { return lexer->getStream(); } - - // Get current position in file. - int getPos() { return lexer->getPos(); } - -private: - - XRef *xref; // the xref table for this PDF file - Lexer *lexer; // input stream - GBool allowStreams; // parse stream objects? - Object buf1, buf2; // next two tokens - int inlineImg; // set when inline image data is encountered - - Stream *makeStream(Object *dict, Guchar *fileKey, - CryptAlgorithm encAlgorithm, int keyLength, - int objNum, int objGen, std::set<int> *fetchOriginatorNums); - void shift(int objNum = -1); -}; - -#endif - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PopplerCache.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/PopplerCache.cc deleted file mode 100644 index 6018a77b70f..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PopplerCache.cc +++ /dev/null @@ -1,163 +0,0 @@ -//======================================================================== -// -// PopplerCache.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright (C) 2009 Koji Otani <sho@bbr.jp> -// Copyright (C) 2009, 2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2010 Carlos Garcia Campos <carlosgc@gnome.org> -// -//======================================================================== - -#include "PopplerCache.h" - -#include "XRef.h" - -PopplerCacheKey::~PopplerCacheKey() -{ -} - -PopplerCacheItem::~PopplerCacheItem() -{ -} - -PopplerCache::PopplerCache(int cacheSizeA) -{ - cacheSize = cacheSizeA; - keys = new PopplerCacheKey*[cacheSize]; - items = new PopplerCacheItem*[cacheSize]; - lastValidCacheIndex = -1; -} - -PopplerCache::~PopplerCache() -{ - for (int i = 0; i <= lastValidCacheIndex; ++i) { - delete keys[i]; - delete items[i]; - } - delete[] keys; - delete[] items; -} - -PopplerCacheItem *PopplerCache::lookup(const PopplerCacheKey &key) -{ - if (lastValidCacheIndex < 0) - return 0; - - if (*keys[0] == key) { - return items[0]; - } - for (int i = 1; i <= lastValidCacheIndex; i++) { - if (*keys[i] == key) { - PopplerCacheKey *keyHit = keys[i]; - PopplerCacheItem *itemHit = items[i]; - - for (int j = i; j > 0; j--) { - keys[j] = keys[j - 1]; - items[j] = items[j - 1]; - } - - keys[0] = keyHit; - items[0] = itemHit; - return itemHit; - } - } - return 0; -} - -void PopplerCache::put(PopplerCacheKey *key, PopplerCacheItem *item) -{ - int movingStartIndex = lastValidCacheIndex + 1; - if (lastValidCacheIndex == cacheSize - 1) { - delete keys[lastValidCacheIndex]; - delete items[lastValidCacheIndex]; - movingStartIndex = cacheSize - 1; - } else { - lastValidCacheIndex++; - } - for (int i = movingStartIndex; i > 0; i--) { - keys[i] = keys[i - 1]; - items[i] = items[i - 1]; - } - keys[0] = key; - items[0] = item; -} - -int PopplerCache::size() -{ - return cacheSize; -} - -int PopplerCache::numberOfItems() -{ - return lastValidCacheIndex + 1; -} - -PopplerCacheItem *PopplerCache::item(int index) -{ - return items[index]; -} - -PopplerCacheKey *PopplerCache::key(int index) -{ - return keys[index]; -} - -class ObjectKey : public PopplerCacheKey { - public: - ObjectKey(int numA, int genA) : num(numA), gen(genA) - { - } - - bool operator==(const PopplerCacheKey &key) const - { - const ObjectKey *k = static_cast<const ObjectKey*>(&key); - return k->num == num && k->gen == gen; - } - - int num, gen; -}; - -class ObjectItem : public PopplerCacheItem { - public: - ObjectItem(Object *obj) - { - obj->copy(&item); - } - - ~ObjectItem() - { - item.free(); - } - - Object item; -}; - -PopplerObjectCache::PopplerObjectCache(int cacheSize, XRef *xrefA) { - cache = new PopplerCache (cacheSize); - xref = xrefA; -} - -PopplerObjectCache::~PopplerObjectCache() { - delete cache; -} - -Object *PopplerObjectCache::put(const Ref &ref) { - Object obj; - xref->fetch(ref.num, ref.gen, &obj); - - ObjectKey *key = new ObjectKey(ref.num, ref.gen); - ObjectItem *item = new ObjectItem(&obj); - cache->put(key, item); - obj.free(); - - return &item->item; -} - -Object *PopplerObjectCache::lookup(const Ref &ref, Object *obj) { - ObjectKey key(ref.num, ref.gen); - ObjectItem *item = static_cast<ObjectItem *>(cache->lookup(key)); - - return item ? item->item.copy(obj) : obj->initNull(); -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PopplerCache.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/PopplerCache.h deleted file mode 100644 index 74010a2fa6b..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PopplerCache.h +++ /dev/null @@ -1,78 +0,0 @@ -//======================================================================== -// -// PopplerCache.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright (C) 2009 Koji Otani <sho@bbr.jp> -// Copyright (C) 2009, 2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2010 Carlos Garcia Campos <carlosgc@gnome.org> -// -//======================================================================== - -#ifndef POPPLER_CACHE_H -#define POPPLER_CACHE_H - -#include "Object.h" - -class PopplerCacheItem -{ - public: - virtual ~PopplerCacheItem(); -}; - -class PopplerCacheKey -{ - public: - virtual ~PopplerCacheKey(); - virtual bool operator==(const PopplerCacheKey &key) const = 0; -}; - -class PopplerCache -{ - public: - PopplerCache(int cacheSizeA); - ~PopplerCache(); - - /* The item returned is owned by the cache */ - PopplerCacheItem *lookup(const PopplerCacheKey &key); - - /* The key and item pointers ownership is taken by the cache */ - void put(PopplerCacheKey *key, PopplerCacheItem *item); - - /* The max size of the cache */ - int size(); - - /* The number of items in the cache */ - int numberOfItems(); - - /* The n-th item in the cache */ - PopplerCacheItem *item(int index); - - /* The n-th key in the cache */ - PopplerCacheKey *key(int index); - - private: - PopplerCache(const PopplerCache &cache); // not allowed - - PopplerCacheKey **keys; - PopplerCacheItem **items; - int lastValidCacheIndex; - int cacheSize; -}; - -class PopplerObjectCache -{ - public: - PopplerObjectCache (int cacheSizeA, XRef *xrefA); - ~PopplerObjectCache(); - - Object *put(const Ref &ref); - Object *lookup(const Ref &ref, Object *obj); - - private: - XRef *xref; - PopplerCache *cache; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PreScanOutputDev.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/PreScanOutputDev.cc deleted file mode 100644 index f8df6a1d34a..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PreScanOutputDev.cc +++ /dev/null @@ -1,314 +0,0 @@ -//======================================================================== -// -// PreScanOutputDev.cc -// -// Copyright 2005 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2010, 2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2011 William Bader <williambader@hotmail.com> -// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <math.h> -#include "GlobalParams.h" -#include "Gfx.h" -#include "GfxFont.h" -#include "Link.h" -#include "Catalog.h" -#include "Page.h" -#include "PreScanOutputDev.h" - -//------------------------------------------------------------------------ -// PreScanOutputDev -//------------------------------------------------------------------------ - -PreScanOutputDev::PreScanOutputDev(XRef *xrefA) { - level = globalParams->getPSLevel(); - xref = xrefA; - clearStats(); -} - -PreScanOutputDev::~PreScanOutputDev() { -} - -void PreScanOutputDev::startPage(int /*pageNum*/, GfxState * /*state*/) { -} - -void PreScanOutputDev::endPage() { -} - -void PreScanOutputDev::stroke(GfxState *state) { - double *dash; - int dashLen; - double dashStart; - - check(state->getStrokeColorSpace(), state->getStrokeColor(), - state->getStrokeOpacity(), state->getBlendMode()); - state->getLineDash(&dash, &dashLen, &dashStart); - if (dashLen != 0) { - gdi = gFalse; - } -} - -void PreScanOutputDev::fill(GfxState *state) { - check(state->getFillColorSpace(), state->getFillColor(), - state->getFillOpacity(), state->getBlendMode()); -} - -void PreScanOutputDev::eoFill(GfxState *state) { - check(state->getFillColorSpace(), state->getFillColor(), - state->getFillOpacity(), state->getBlendMode()); -} - -GBool PreScanOutputDev::tilingPatternFill(GfxState *state, Catalog *catalog, Object *str, - double *pmat, int paintType, int /*tilingType*/, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep) { - PDFRectangle box; - Gfx *gfx; - box.x1 = bbox[0]; box.y1 = bbox[1]; - box.x2 = bbox[2]; box.y2 = bbox[3]; - gfx = new Gfx(xref, this, resDict, catalog, &box, NULL); - gfx->display(str); - delete gfx; - return gTrue; -} - -void PreScanOutputDev::clip(GfxState * /*state*/) { - //~ check for a rectangle "near" the edge of the page; - //~ else set gdi to false -} - -void PreScanOutputDev::eoClip(GfxState * /*state*/) { - //~ see clip() -} - -void PreScanOutputDev::beginStringOp(GfxState *state) { - int render; - GfxFont *font; - double m11, m12, m21, m22; - Ref embRef; - DisplayFontParam *dfp; - GBool simpleTTF; - - render = state->getRender(); - if (!(render & 1)) { - check(state->getFillColorSpace(), state->getFillColor(), - state->getFillOpacity(), state->getBlendMode()); - } - if ((render & 3) == 1 || (render & 3) == 2) { - check(state->getStrokeColorSpace(), state->getStrokeColor(), - state->getStrokeOpacity(), state->getBlendMode()); - } - - font = state->getFont(); - state->getFontTransMat(&m11, &m12, &m21, &m22); - simpleTTF = fabs(m11 + m22) < 0.01 && - m11 > 0 && - fabs(m12) < 0.01 && - fabs(m21) < 0.01 && - fabs(state->getHorizScaling() - 1) < 0.001 && - (font->getType() == fontTrueType || - font->getType() == fontTrueTypeOT) && - (font->getEmbeddedFontID(&embRef) || - font->getExtFontFile() || - (font->getName() && - (dfp = globalParams->getDisplayFont(font)) && - dfp->kind == displayFontTT)); - if (simpleTTF) { - //~ need to create a FoFiTrueType object, and check for a Unicode cmap - } - if (state->getRender() != 0 || !simpleTTF) { - gdi = gFalse; - } -} - -void PreScanOutputDev::endStringOp(GfxState * /*state*/) { -} - -GBool PreScanOutputDev::beginType3Char(GfxState * /*state*/, double /*x*/, double /*y*/, - double /*dx*/, double /*dy*/, - CharCode /*code*/, Unicode * /*u*/, int /*uLen*/) { - // return false so all Type 3 chars get rendered (no caching) - return gFalse; -} - -void PreScanOutputDev::endType3Char(GfxState * /*state*/) { -} - -void PreScanOutputDev::drawImageMask(GfxState *state, Object * /*ref*/, Stream *str, - int width, int height, GBool /*invert*/, - GBool /*interpolate*/, GBool inlineImg) { - int i, j; - - check(state->getFillColorSpace(), state->getFillColor(), - state->getFillOpacity(), state->getBlendMode()); - gdi = gFalse; - if ((level == psLevel1 || level == psLevel1Sep) && - state->getFillColorSpace()->getMode() == csPattern) { - level1PSBug = gTrue; - } - - if (inlineImg) { - str->reset(); - j = height * ((width + 7) / 8); - for (i = 0; i < j; ++i) - str->getChar(); - str->close(); - } -} - -void PreScanOutputDev::drawImage(GfxState *state, Object * /*ref*/, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool /*interpolate*/, int * /*maskColors*/, GBool inlineImg) { - GfxColorSpace *colorSpace; - int i, j; - - colorSpace = colorMap->getColorSpace(); - if (colorSpace->getMode() == csIndexed) { - colorSpace = ((GfxIndexedColorSpace *)colorSpace)->getBase(); - } - if (colorSpace->getMode() != csDeviceGray && - colorSpace->getMode() != csCalGray) { - gray = gFalse; - } - mono = gFalse; - if (state->getBlendMode() != gfxBlendNormal) { - transparency = gTrue; - } - gdi = gFalse; - - if (inlineImg) { - str->reset(); - j = height * ((width * colorMap->getNumPixelComps() * - colorMap->getBits() + 7) / 8); - for (i = 0; i < j; ++i) - str->getChar(); - str->close(); - } -} - -void PreScanOutputDev::drawMaskedImage(GfxState *state, Object * /*ref*/, - Stream * /*str*/, - int /*width*/, int /*height*/, - GfxImageColorMap *colorMap, - GBool /*interpolate*/, - Stream * /*maskStr*/, - int /*maskWidth*/, int /*maskHeight*/, - GBool /*maskInvert*/, GBool /*maskInterpolate*/) { - GfxColorSpace *colorSpace; - - colorSpace = colorMap->getColorSpace(); - if (colorSpace->getMode() == csIndexed) { - colorSpace = ((GfxIndexedColorSpace *)colorSpace)->getBase(); - } - if (colorSpace->getMode() != csDeviceGray && - colorSpace->getMode() != csCalGray) { - gray = gFalse; - } - mono = gFalse; - if (state->getBlendMode() != gfxBlendNormal) { - transparency = gTrue; - } - gdi = gFalse; -} - -void PreScanOutputDev::drawSoftMaskedImage(GfxState * /*state*/, Object * /*ref*/, - Stream * /*str*/, - int /*width*/, int /*height*/, - GfxImageColorMap *colorMap, - GBool /*interpolate*/, - Stream * /*maskStr*/, - int /*maskWidth*/, int /*maskHeight*/, - GfxImageColorMap * /*maskColorMap*/, - GBool /*maskInterpolate*/) { - GfxColorSpace *colorSpace; - - colorSpace = colorMap->getColorSpace(); - if (colorSpace->getMode() == csIndexed) { - colorSpace = ((GfxIndexedColorSpace *)colorSpace)->getBase(); - } - if (colorSpace->getMode() != csDeviceGray && - colorSpace->getMode() != csCalGray) { - gray = gFalse; - } - mono = gFalse; - transparency = gTrue; - gdi = gFalse; -} - -void PreScanOutputDev::beginTransparencyGroup( - GfxState * /*state*/, double * /*bbox*/, - GfxColorSpace * /*blendingColorSpace*/, - GBool /*isolated*/, GBool /*knockout*/, - GBool /*forSoftMask*/) { - gdi = gFalse; -} - -void PreScanOutputDev::paintTransparencyGroup(GfxState *state, double * /*bbox*/) -{ - check(state->getFillColorSpace(), state->getFillColor(), - state->getFillOpacity(), state->getBlendMode()); -} - -void PreScanOutputDev::setSoftMask(GfxState * /*state*/, double * /*bbox*/, GBool /*alpha*/, - Function * /*transferFunc*/, GfxColor * /*backdropColor*/) -{ - transparency = gTrue; -} - -void PreScanOutputDev::check(GfxColorSpace *colorSpace, GfxColor *color, - double opacity, GfxBlendMode blendMode) { - GfxRGB rgb; - - if (colorSpace->getMode() == csPattern) { - mono = gFalse; - gray = gFalse; - gdi = gFalse; - } else { - colorSpace->getRGB(color, &rgb); - if (rgb.r != rgb.g || rgb.g != rgb.b || rgb.b != rgb.r) { - mono = gFalse; - gray = gFalse; - } else if (!((rgb.r == 0 && rgb.g == 0 && rgb.b == 0) || - (rgb.r == gfxColorComp1 && - rgb.g == gfxColorComp1 && - rgb.b == gfxColorComp1))) { - mono = gFalse; - } - } - if (opacity != 1 || blendMode != gfxBlendNormal) { - transparency = gTrue; - } -} - -void PreScanOutputDev::clearStats() { - mono = gTrue; - gray = gTrue; - transparency = gFalse; - gdi = gTrue; - level1PSBug = gFalse; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/PreScanOutputDev.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/PreScanOutputDev.h deleted file mode 100644 index 464fbbf26a2..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/PreScanOutputDev.h +++ /dev/null @@ -1,171 +0,0 @@ -//======================================================================== -// -// PreScanOutputDev.h -// -// Copyright 2005 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2011 William Bader <williambader@hotmail.com> -// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef PRESCANOUTPUTDEV_H -#define PRESCANOUTPUTDEV_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include "Object.h" -#include "GfxState.h" -#include "GlobalParams.h" -#include "OutputDev.h" - -//------------------------------------------------------------------------ -// PreScanOutputDev -//------------------------------------------------------------------------ - -class PreScanOutputDev: public OutputDev { -public: - - // Constructor. - PreScanOutputDev(XRef *xrefA); - - // Destructor. - virtual ~PreScanOutputDev(); - - //----- get info about output device - - // Does this device use upside-down coordinates? - // (Upside-down means (0,0) is the top left corner of the page.) - virtual GBool upsideDown() { return gTrue; } - - // Does this device use drawChar() or drawString()? - virtual GBool useDrawChar() { return gTrue; } - - // Does this device use tilingPatternFill()? If this returns false, - // tiling pattern fills will be reduced to a series of other drawing - // operations. - virtual GBool useTilingPatternFill() { return gTrue; } - - // Does this device use beginType3Char/endType3Char? Otherwise, - // text in Type 3 fonts will be drawn with drawChar/drawString. - virtual GBool interpretType3Chars() { return gTrue; } - - //----- initialization and control - - // Start a page. - virtual void startPage(int pageNum, GfxState *state); - - // End a page. - virtual void endPage(); - - //----- path painting - virtual void stroke(GfxState *state); - virtual void fill(GfxState *state); - virtual void eoFill(GfxState *state); - virtual GBool tilingPatternFill(GfxState *state, Catalog *cat, Object *str, - double *pmat, int paintType, int tilingType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep); - - //----- path clipping - virtual void clip(GfxState *state); - virtual void eoClip(GfxState *state); - - //----- text drawing - virtual void beginStringOp(GfxState *state); - virtual void endStringOp(GfxState *state); - virtual GBool beginType3Char(GfxState *state, double x, double y, - double dx, double dy, - CharCode code, Unicode *u, int uLen); - virtual void endType3Char(GfxState *state); - - //----- image drawing - virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool interpolate, GBool inlineImg); - virtual void drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - GBool interpolate, int *maskColors, GBool inlineImg); - virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, int maskWidth, int maskHeight, - GBool maskInvert, GBool maskInterpolate); - virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap, - GBool maskInterpolate); - - //----- transparency groups and soft masks - virtual void beginTransparencyGroup(GfxState *state, double *bbox, - GfxColorSpace *blendingColorSpace, - GBool isolated, GBool knockout, - GBool forSoftMask); - virtual void paintTransparencyGroup(GfxState *state, double *bbox); - virtual void setSoftMask(GfxState *state, double *bbox, GBool alpha, - Function *transferFunc, GfxColor *backdropColor); - - //----- special access - - // Returns true if the operations performed since the last call to - // clearStats() are all monochrome (black or white). - GBool isMonochrome() { return mono; } - - // Returns true if the operations performed since the last call to - // clearStats() are all gray. - GBool isGray() { return gray; } - - // Returns true if the operations performed since the last call to - // clearStats() included any transparency. - GBool usesTransparency() { return transparency; } - - // Returns true if the operations performed since the last call to - // clearStats() are all rasterizable by GDI calls in GDIOutputDev. - GBool isAllGDI() { return gdi; } - - // Returns true if the operations performed since the last call to - // clearStats() processed a feature that PSOutputDev does not implement. - GBool hasLevel1PSBug() { return level1PSBug; } - - // Clear the stats used by the above functions. - void clearStats(); - -private: - - void check(GfxColorSpace *colorSpace, GfxColor *color, - double opacity, GfxBlendMode blendMode); - - XRef *xref; - GBool mono; - GBool gray; - GBool transparency; - GBool gdi; - PSLevel level; // PostScript level (1, 2, separation) - GBool level1PSBug; // gTrue if it uses a feature not supported in PSOutputDev -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/ProfileData.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/ProfileData.cc deleted file mode 100644 index a0c44747a56..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/ProfileData.cc +++ /dev/null @@ -1,44 +0,0 @@ -//======================================================================== -// -// ProfileData.cc -// -// Copyright 2005 Jonathan Blandford <jrb@gnome.org> -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <stddef.h> -#include "ProfileData.h" - -//------------------------------------------------------------------------ -// ProfileData -//------------------------------------------------------------------------ - -ProfileData::ProfileData() { - count = 0; - total = 0.0; - min = 0.0; - max = 0.0; -} - -void -ProfileData::addElement (double elapsed) { - if (count == 0) { - min = elapsed; - max = elapsed; - } else { - if (elapsed < min) - min = elapsed; - if (elapsed > max) - max = elapsed; - } - total += elapsed; - count ++; -} - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/ProfileData.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/ProfileData.h deleted file mode 100644 index 418ee010755..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/ProfileData.h +++ /dev/null @@ -1,41 +0,0 @@ -//======================================================================== -// -// ProfileData.h -// -// Copyright 2005 Jonathan Blandford <jrb@gnome.org> -// -//======================================================================== - -#ifndef PROFILE_DATA_H -#define PROFILE_DATA_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -//------------------------------------------------------------------------ -// ProfileData -//------------------------------------------------------------------------ - -class ProfileData { -public: - - // Constructor. - ProfileData (); - - // Destructor. - ~ProfileData() {} - - void addElement (double elapsed); - int getCount () { return count; } - double getTotal () { return total; } - double getMin () { return max; } - double getMax () { return max; } -private: - int count; // size of <elems> array - double total; // number of elements in array - double min; // reference count - double max; // reference count -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Rendition.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Rendition.cc deleted file mode 100644 index b81e169ea21..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Rendition.cc +++ /dev/null @@ -1,400 +0,0 @@ -//********************************************************************************* -// Rendition.cc -//--------------------------------------------------------------------------------- -// -//--------------------------------------------------------------------------------- -// Hugo Mercier <hmercier31[at]gmail.com> (c) 2008 -// Pino Toscano <pino@kde.org> (c) 2008 -// Carlos Garcia Campos <carlosgc@gnome.org> (c) 2010 -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -//********************************************************************************* - -#include <math.h> -#include "Rendition.h" -#include "FileSpec.h" - -MediaWindowParameters::MediaWindowParameters() { - // default values - type = windowEmbedded; - width = -1; - height = -1; - relativeTo = windowRelativeToDocument; - XPosition = 0.5; - YPosition = 0.5; - hasTitleBar = gTrue; - hasCloseButton = gTrue; - isResizeable = gTrue; -} - -MediaWindowParameters::~MediaWindowParameters() { -} - -void MediaWindowParameters::parseFWParams(Object* obj) { - Object tmp; - - if (obj->dictLookup("D", &tmp)->isArray()) { - Array * dim = tmp.getArray(); - - if (dim->getLength() >= 2) { - Object dd; - if (dim->get(0, &dd)->isInt()) { - width = dd.getInt(); - } - dd.free(); - if (dim->get(1, &dd)->isInt()) { - height = dd.getInt(); - } - dd.free(); - } - } - tmp.free(); - - if (obj->dictLookup("RT", &tmp)->isInt()) { - int t = tmp.getInt(); - switch(t) { - case 0: relativeTo = windowRelativeToDocument; break; - case 1: relativeTo = windowRelativeToApplication; break; - case 2: relativeTo = windowRelativeToDesktop; break; - } - } - tmp.free(); - - if (obj->dictLookup("P",&tmp)->isInt()) { - int t = tmp.getInt(); - - switch(t) { - case 0: // Upper left - XPosition = 0.0; - YPosition = 0.0; - break; - case 1: // Upper Center - XPosition = 0.5; - YPosition = 0.0; - break; - case 2: // Upper Right - XPosition = 1.0; - YPosition = 0.0; - break; - case 3: // Center Left - XPosition = 0.0; - YPosition = 0.5; - break; - case 4: // Center - XPosition = 0.5; - YPosition = 0.5; - break; - case 5: // Center Right - XPosition = 1.0; - YPosition = 0.5; - break; - case 6: // Lower Left - XPosition = 0.0; - YPosition = 1.0; - break; - case 7: // Lower Center - XPosition = 0.5; - YPosition = 1.0; - break; - case 8: // Lower Right - XPosition = 1.0; - YPosition = 1.0; - break; - } - } - tmp.free(); - - if (obj->dictLookup("T", &tmp)->isBool()) { - hasTitleBar = tmp.getBool(); - } - tmp.free(); - if (obj->dictLookup("UC", &tmp)->isBool()) { - hasCloseButton = tmp.getBool(); - } - tmp.free(); - if (obj->dictLookup("R", &tmp)->isInt()) { - isResizeable = (tmp.getInt() != 0); - } - tmp.free(); - -} - -MediaParameters::MediaParameters() { - // instanciate to default values - - volume = 100; - fittingPolicy = fittingUndefined; - autoPlay = gTrue; - repeatCount = 1.0; - opacity = 1.0; - showControls = gFalse; - duration = 0; -} - -MediaParameters::~MediaParameters() { -} - -void MediaParameters::parseMediaPlayParameters(Object* obj) { - - Object tmp; - - if (obj->dictLookup("V", &tmp)->isInt()) { - volume = tmp.getInt(); - } - tmp.free(); - - if (obj->dictLookup("C", &tmp)->isBool()) { - showControls = tmp.getBool(); - } - tmp.free(); - - if (obj->dictLookup("F", &tmp)->isInt()) { - int t = tmp.getInt(); - - switch(t) { - case 0: fittingPolicy = fittingMeet; break; - case 1: fittingPolicy = fittingSlice; break; - case 2: fittingPolicy = fittingFill; break; - case 3: fittingPolicy = fittingScroll; break; - case 4: fittingPolicy = fittingHidden; break; - case 5: fittingPolicy = fittingUndefined; break; - } - } - tmp.free(); - - // duration parsing - // duration's default value is set to 0, which means : intrinsinc media duration - if (obj->dictLookup("D", &tmp)->isDict()) { - Object oname, ddict, tmp2; - if (tmp.dictLookup("S", &oname)->isName()) { - char* name = oname.getName(); - if (!strcmp(name, "F")) - duration = -1; // infinity - else if (!strcmp(name, "T")) { - if (tmp.dictLookup("T", &ddict)->isDict()) { - if (ddict.dictLookup("V", &tmp2)->isNum()) { - duration = Gulong(tmp2.getNum()); - } - tmp2.free(); - } - ddict.free(); - } - } - oname.free(); - } - tmp.free(); - - - if (obj->dictLookup("A", &tmp)->isBool()) { - autoPlay = tmp.getBool(); - } - tmp.free(); - - if (obj->dictLookup("RC", &tmp)->isNum()) { - repeatCount = tmp.getNum(); - } - tmp.free(); - -} - -void MediaParameters::parseMediaScreenParameters(Object* obj) { - Object tmp; - - if (obj->dictLookup("W", &tmp)->isInt()) { - int t = tmp.getInt(); - - switch(t) { - case 0: windowParams.type = MediaWindowParameters::windowFloating; break; - case 1: windowParams.type = MediaWindowParameters::windowFullscreen; break; - case 2: windowParams.type = MediaWindowParameters::windowHidden; break; - case 3: windowParams.type = MediaWindowParameters::windowEmbedded; break; - } - } - tmp.free(); - - // background color - if (obj->dictLookup("B", &tmp)->isArray()) { - Array* color = tmp.getArray(); - - Object component; - - color->get(0, &component); - bgColor.r = component.getNum(); - component.free(); - - color->get(1, &component); - bgColor.g = component.getNum(); - component.free(); - - color->get(2, &component); - bgColor.b = component.getNum(); - component.free(); - } - tmp.free(); - - - // opacity - if (obj->dictLookup("O", &tmp)->isNum()) { - opacity = tmp.getNum(); - } - tmp.free(); - - if (windowParams.type == MediaWindowParameters::windowFloating) { - Object winDict; - if (obj->dictLookup("F",&winDict)->isDict()) { - windowParams.parseFWParams(&winDict); - } - winDict.free(); - } -} - -MediaRendition::~MediaRendition() { - if (fileName) - delete fileName; - if (contentType) - delete contentType; - - if (embeddedStream && (!embeddedStream->decRef())) { - delete embeddedStream; - } -} - -MediaRendition::MediaRendition(Object* obj) { - Object tmp, tmp2; - GBool hasClip = gFalse; - - ok = gTrue; - fileName = NULL; - contentType = NULL; - isEmbedded = gFalse; - embeddedStream = NULL; - - // - // Parse media clip data - // - if (obj->dictLookup("C", &tmp2)->isDict()) { // media clip - hasClip = gTrue; - if (tmp2.dictLookup("S", &tmp)->isName()) { - if (!strcmp(tmp.getName(), "MCD")) { // media clip data - Object obj1, obj2; - if (tmp2.dictLookup("D", &obj1)->isDict()) { - if (obj1.dictLookup("F", &obj2)->isString()) { - fileName = obj2.getString()->copy(); - } - obj2.free(); - if (obj1.dictLookup("EF", &obj2)->isDict()) { - Object embedded; - if (obj2.dictLookup("F", &embedded)->isStream()) { - isEmbedded = gTrue; - embeddedStream = embedded.getStream(); - // "copy" stream - embeddedStream->incRef(); - } - embedded.free(); - } - obj2.free(); - - // TODO: D might be a form XObject too - } else { - error (-1, "Invalid Media Clip Data"); - ok = gFalse; - } - obj1.free(); - - // FIXME: ignore CT if D is a form XObject - if (tmp2.dictLookup("CT", &obj1)->isString()) { - contentType = obj1.getString()->copy(); - } - obj1.free(); - } else if (!strcmp(tmp.getName(), "MCS")) { // media clip data - // TODO - } - } else { - error (-1, "Invalid Media Clip"); - ok = gFalse; - } - tmp.free(); - } - tmp2.free(); - - if (!ok) - return; - - // - // parse Media Play Parameters - if (obj->dictLookup("P", &tmp2)->isDict()) { // media play parameters - Object params; - if (tmp2.dictLookup("MH", ¶ms)->isDict()) { - MH.parseMediaPlayParameters(¶ms); - } - params.free(); - if (tmp2.dictLookup("BE", ¶ms)->isDict()) { - BE.parseMediaPlayParameters(¶ms); - } - params.free(); - } else if (hasClip) { - error (-1, "Invalid Media Rendition"); - ok = gFalse; - } - tmp2.free(); - - // - // parse Media Screen Parameters - if (obj->dictLookup("SP", &tmp2)->isDict()) { // media screen parameters - Object params; - if (tmp2.dictLookup("MH", ¶ms)->isDict()) { - MH.parseMediaScreenParameters(¶ms); - } - params.free(); - if (tmp2.dictLookup("BE", ¶ms)->isDict()) { - BE.parseMediaScreenParameters(¶ms); - } - params.free(); - } - tmp2.free(); -} - -void MediaRendition::outputToFile(FILE* fp) { - if (!isEmbedded) - return; - - embeddedStream->reset(); - - while (1) { - int c = embeddedStream->getChar(); - if (c == EOF) - break; - - fwrite(&c, 1, 1, fp); - } - -} - -MediaRendition *MediaRendition::copy() { - // call default copy constructor - MediaRendition* new_media = new MediaRendition(*this); - - if (contentType) - new_media->contentType = contentType->copy(); - if (fileName) - new_media->fileName = fileName->copy(); - - if (new_media->embeddedStream) - new_media->embeddedStream->incRef(); - - return new_media; -} - -// TODO: SelectorRendition diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Rendition.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Rendition.h deleted file mode 100644 index 75bfeff32c9..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Rendition.h +++ /dev/null @@ -1,157 +0,0 @@ -//********************************************************************************* -// Rendition.h -//--------------------------------------------------------------------------------- -// -//--------------------------------------------------------------------------------- -// Hugo Mercier <hmercier31[at]gmail.com> (c) 2008 -// Carlos Garcia Campos <carlosgc@gnome.org> (c) 2010 -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -//********************************************************************************* - -#ifndef _RENDITION_H_ -#define _RENDITION_H_ - -#include "Object.h" - -struct MediaWindowParameters { - - MediaWindowParameters(); - ~MediaWindowParameters(); - - // parse from a floating window parameters dictionary - void parseFWParams(Object* obj); - - enum MediaWindowType { - windowFloating = 0, - windowFullscreen, - windowHidden, - windowEmbedded - }; - - enum MediaWindowRelativeTo { - windowRelativeToDocument = 0, - windowRelativeToApplication, - windowRelativeToDesktop - }; - - - // DEFAULT VALUE - - MediaWindowType type; // movieWindowEmbedded - - - int width; // -1 - int height; // -1 - - // floating window position - MediaWindowRelativeTo relativeTo; // windowRelativeToDocument (or to desktop) - double XPosition; // 0.5 - double YPosition; // 0.5 - - GBool hasTitleBar; // true - GBool hasCloseButton; // true - GBool isResizeable; // true -}; - - -struct MediaParameters { - - MediaParameters(); - ~MediaParameters(); - - // parse from a "Media Play Parameters" dictionary - void parseMediaPlayParameters(Object* playObj); - // parse from a "Media Screen Parameters" dictionary - void parseMediaScreenParameters(Object* screenObj); - - enum MediaFittingPolicy { - fittingMeet = 0, - fittingSlice, - fittingFill, - fittingScroll, - fittingHidden, - fittingUndefined - }; - - struct Color { - double r, g, b; - }; - - int duration; // 0 - - int volume; // 100 - - // defined in media play parameters, p 770 - // correspond to 'fit' SMIL's attribute - MediaFittingPolicy fittingPolicy; // fittingUndefined - - GBool autoPlay; // true - - // repeat count, can be real values, 0 means forever - double repeatCount; // 1.0 - - // background color // black = (0.0 0.0 0.0) - Color bgColor; - - // opacity in [0.0 1.0] - double opacity; // 1.0 - - - GBool showControls; // false - - MediaWindowParameters windowParams; -}; - -class MediaRendition { - public: - MediaRendition(Object *obj); - ~MediaRendition(); - - GBool isOk () { return ok; } - - MediaParameters* getMHParameters() { return &MH; } - MediaParameters* getBEParameters() { return &BE; } - - GooString* getContentType() { return contentType; } - GooString* getFileName() { return fileName; } - - GBool getIsEmbedded() { return isEmbedded; } - Stream* getEmbbededStream() { return embeddedStream; } - // write embedded stream to file - void outputToFile(FILE*); - - MediaRendition* copy(); - - private: - GBool ok; - - // "Must Honor" parameters - MediaParameters MH; - // "Best Effort" parameters - MediaParameters BE; - - GBool isEmbedded; - - GooString* contentType; - - // if it's embedded - Stream* embeddedStream; - - // if it's not embedded - GooString* fileName; -}; - -#endif /* _RENDITION_H_ */ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/SecurityHandler.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/SecurityHandler.cc deleted file mode 100644 index 630c753691c..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/SecurityHandler.cc +++ /dev/null @@ -1,412 +0,0 @@ -//======================================================================== -// -// SecurityHandler.cc -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2010 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "GooString.h" -#include "PDFDoc.h" -#include "Decrypt.h" -#include "Error.h" -#include "GlobalParams.h" -#if HAVE_XPDFCORE -# include "XPDFCore.h" -#elif HAVE_WINPDFCORE -# include "WinPDFCore.h" -#endif -#ifdef ENABLE_PLUGINS -# include "XpdfPluginAPI.h" -#endif -#include "SecurityHandler.h" - -#include <limits.h> - -//------------------------------------------------------------------------ -// SecurityHandler -//------------------------------------------------------------------------ - -SecurityHandler *SecurityHandler::make(PDFDoc *docA, Object *encryptDictA) { - Object filterObj; - SecurityHandler *secHdlr; -#ifdef ENABLE_PLUGINS - XpdfSecurityHandler *xsh; -#endif - - encryptDictA->dictLookup("Filter", &filterObj); - if (filterObj.isName("Standard")) { - secHdlr = new StandardSecurityHandler(docA, encryptDictA); - } else if (filterObj.isName()) { -#ifdef ENABLE_PLUGINS - if ((xsh = globalParams->getSecurityHandler(filterObj.getName()))) { - secHdlr = new ExternalSecurityHandler(docA, encryptDictA, xsh); - } else { -#endif - error(-1, "Couldn't find the '%s' security handler", - filterObj.getName()); - secHdlr = NULL; -#ifdef ENABLE_PLUGINS - } -#endif - } else { - error(-1, "Missing or invalid 'Filter' entry in encryption dictionary"); - secHdlr = NULL; - } - filterObj.free(); - return secHdlr; -} - -SecurityHandler::SecurityHandler(PDFDoc *docA) { - doc = docA; -} - -SecurityHandler::~SecurityHandler() { -} - -GBool SecurityHandler::checkEncryption(GooString *ownerPassword, - GooString *userPassword) { - void *authData; - GBool ok; - int i; - - if (ownerPassword || userPassword) { - authData = makeAuthData(ownerPassword, userPassword); - } else { - authData = NULL; - } - ok = authorize(authData); - if (authData) { - freeAuthData(authData); - } - for (i = 0; !ok && i < 3; ++i) { - if (!(authData = getAuthData())) { - break; - } - ok = authorize(authData); - if (authData) { - freeAuthData(authData); - } - } - if (!ok) { - error(-1, "Incorrect password"); - } - return ok; -} - -//------------------------------------------------------------------------ -// StandardSecurityHandler -//------------------------------------------------------------------------ - -class StandardAuthData { -public: - - StandardAuthData(GooString *ownerPasswordA, GooString *userPasswordA) { - ownerPassword = ownerPasswordA; - userPassword = userPasswordA; - } - - ~StandardAuthData() { - if (ownerPassword) { - delete ownerPassword; - } - if (userPassword) { - delete userPassword; - } - } - - GooString *ownerPassword; - GooString *userPassword; -}; - -StandardSecurityHandler::StandardSecurityHandler(PDFDoc *docA, - Object *encryptDictA): - SecurityHandler(docA) -{ - Object versionObj, revisionObj, lengthObj; - Object ownerKeyObj, userKeyObj, permObj, fileIDObj; - Object fileIDObj1; - Object cryptFiltersObj, streamFilterObj, stringFilterObj; - Object cryptFilterObj, cfmObj, cfLengthObj; - Object encryptMetadataObj; - - ok = gFalse; - fileID = NULL; - ownerKey = NULL; - userKey = NULL; - - encryptDictA->dictLookup("V", &versionObj); - encryptDictA->dictLookup("R", &revisionObj); - encryptDictA->dictLookup("Length", &lengthObj); - encryptDictA->dictLookup("O", &ownerKeyObj); - encryptDictA->dictLookup("U", &userKeyObj); - encryptDictA->dictLookup("P", &permObj); - if (permObj.isUint()) { - unsigned int permUint = permObj.getUint(); - int perms = permUint - UINT_MAX - 1; - permObj.free(); - permObj.initInt(perms); - } - doc->getXRef()->getTrailerDict()->dictLookup("ID", &fileIDObj); - if (versionObj.isInt() && - revisionObj.isInt() && - ownerKeyObj.isString() && ownerKeyObj.getString()->getLength() == 32 && - userKeyObj.isString() && userKeyObj.getString()->getLength() == 32 && - permObj.isInt()) { - encVersion = versionObj.getInt(); - encRevision = revisionObj.getInt(); - encAlgorithm = cryptRC4; - // revision 2 forces a 40-bit key - some buggy PDF generators - // set the Length value incorrectly - if (encRevision == 2 || !lengthObj.isInt()) { - fileKeyLength = 5; - } else { - fileKeyLength = lengthObj.getInt() / 8; - } - encryptMetadata = gTrue; - //~ this currently only handles a subset of crypt filter functionality - if (encVersion == 4 && encRevision == 4) { - encryptDictA->dictLookup("CF", &cryptFiltersObj); - encryptDictA->dictLookup("StmF", &streamFilterObj); - encryptDictA->dictLookup("StrF", &stringFilterObj); - if (cryptFiltersObj.isDict() && - streamFilterObj.isName() && - stringFilterObj.isName() && - !strcmp(streamFilterObj.getName(), stringFilterObj.getName())) { - if (cryptFiltersObj.dictLookup(streamFilterObj.getName(), - &cryptFilterObj)->isDict()) { - cryptFilterObj.dictLookup("CFM", &cfmObj); - if (cfmObj.isName("V2")) { - encVersion = 2; - encRevision = 3; - if (cryptFilterObj.dictLookup("Length", &cfLengthObj)->isInt()) { - //~ according to the spec, this should be cfLengthObj / 8 - fileKeyLength = cfLengthObj.getInt(); - } - cfLengthObj.free(); - } else if (cfmObj.isName("AESV2")) { - encVersion = 2; - encRevision = 3; - encAlgorithm = cryptAES; - if (cryptFilterObj.dictLookup("Length", &cfLengthObj)->isInt()) { - //~ according to the spec, this should be cfLengthObj / 8 - fileKeyLength = cfLengthObj.getInt(); - } - cfLengthObj.free(); - } - cfmObj.free(); - } - cryptFilterObj.free(); - } - stringFilterObj.free(); - streamFilterObj.free(); - cryptFiltersObj.free(); - if (encryptDictA->dictLookup("EncryptMetadata", - &encryptMetadataObj)->isBool()) { - encryptMetadata = encryptMetadataObj.getBool(); - } - encryptMetadataObj.free(); - } - permFlags = permObj.getInt(); - ownerKey = ownerKeyObj.getString()->copy(); - userKey = userKeyObj.getString()->copy(); - if (encVersion >= 1 && encVersion <= 2 && - encRevision >= 2 && encRevision <= 3) { - if (fileIDObj.isArray()) { - if (fileIDObj.arrayGet(0, &fileIDObj1)->isString()) { - fileID = fileIDObj1.getString()->copy(); - } else { - fileID = new GooString(); - } - fileIDObj1.free(); - } else { - fileID = new GooString(); - } - ok = gTrue; - } else { - error(-1, "Unsupported version/revision (%d/%d) of Standard security handler", - encVersion, encRevision); - } - } else { - error(-1, "Weird encryption info"); - } - if (fileKeyLength > 16) { - fileKeyLength = 16; - } - fileIDObj.free(); - permObj.free(); - userKeyObj.free(); - ownerKeyObj.free(); - lengthObj.free(); - revisionObj.free(); - versionObj.free(); -} - -StandardSecurityHandler::~StandardSecurityHandler() { - if (fileID) { - delete fileID; - } - if (ownerKey) { - delete ownerKey; - } - if (userKey) { - delete userKey; - } -} - -void *StandardSecurityHandler::makeAuthData(GooString *ownerPassword, - GooString *userPassword) { - return new StandardAuthData(ownerPassword ? ownerPassword->copy() - : (GooString *)NULL, - userPassword ? userPassword->copy() - : (GooString *)NULL); -} - -void *StandardSecurityHandler::getAuthData() { -#if HAVE_XPDFCORE - XPDFCore *core; - GooString *password; - - if (!(core = (XPDFCore *)doc->getGUIData()) || - !(password = core->getPassword())) { - return NULL; - } - return new StandardAuthData(password, password->copy()); -#elif HAVE_WINPDFCORE - WinPDFCore *core; - GooString *password; - - if (!(core = (WinPDFCore *)doc->getGUIData()) || - !(password = core->getPassword())) { - return NULL; - } - return new StandardAuthData(password, password->copy()); -#else - return NULL; -#endif -} - -void StandardSecurityHandler::freeAuthData(void *authData) { - delete (StandardAuthData *)authData; -} - -GBool StandardSecurityHandler::authorize(void *authData) { - GooString *ownerPassword, *userPassword; - - if (!ok) { - return gFalse; - } - if (authData) { - ownerPassword = ((StandardAuthData *)authData)->ownerPassword; - userPassword = ((StandardAuthData *)authData)->userPassword; - } else { - ownerPassword = NULL; - userPassword = NULL; - } - if (!Decrypt::makeFileKey(encVersion, encRevision, fileKeyLength, - ownerKey, userKey, permFlags, fileID, - ownerPassword, userPassword, fileKey, - encryptMetadata, &ownerPasswordOk)) { - return gFalse; - } - return gTrue; -} - -#ifdef ENABLE_PLUGINS - -//------------------------------------------------------------------------ -// ExternalSecurityHandler -//------------------------------------------------------------------------ - -ExternalSecurityHandler::ExternalSecurityHandler(PDFDoc *docA, - Object *encryptDictA, - XpdfSecurityHandler *xshA): - SecurityHandler(docA) -{ - encryptDictA->copy(&encryptDict); - xsh = xshA; - encAlgorithm = cryptRC4; //~ this should be obtained via getKey - ok = gFalse; - - if (!(*xsh->newDoc)(xsh->handlerData, (XpdfDoc)docA, - (XpdfObject)encryptDictA, &docData)) { - return; - } - - ok = gTrue; -} - -ExternalSecurityHandler::~ExternalSecurityHandler() { - (*xsh->freeDoc)(xsh->handlerData, docData); - encryptDict.free(); -} - -void *ExternalSecurityHandler::makeAuthData(GooString *ownerPassword, - GooString *userPassword) { - char *opw, *upw; - void *authData; - - opw = ownerPassword ? ownerPassword->getCString() : (char *)NULL; - upw = userPassword ? userPassword->getCString() : (char *)NULL; - if (!(*xsh->makeAuthData)(xsh->handlerData, docData, opw, upw, &authData)) { - return NULL; - } - return authData; -} - -void *ExternalSecurityHandler::getAuthData() { - void *authData; - - if (!(*xsh->getAuthData)(xsh->handlerData, docData, &authData)) { - return NULL; - } - return authData; -} - -void ExternalSecurityHandler::freeAuthData(void *authData) { - (*xsh->freeAuthData)(xsh->handlerData, docData, authData); -} - -GBool ExternalSecurityHandler::authorize(void *authData) { - char *key; - int length; - - if (!ok) { - return gFalse; - } - permFlags = (*xsh->authorize)(xsh->handlerData, docData, authData); - if (!(permFlags & xpdfPermissionOpen)) { - return gFalse; - } - if (!(*xsh->getKey)(xsh->handlerData, docData, &key, &length, &encVersion)) { - return gFalse; - } - if ((fileKeyLength = length) > 16) { - fileKeyLength = 16; - } - memcpy(fileKey, key, fileKeyLength); - (*xsh->freeKey)(xsh->handlerData, docData, key, length); - return gTrue; -} - -#endif // ENABLE_PLUGINS diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/SecurityHandler.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/SecurityHandler.h deleted file mode 100644 index 5278a6cf10d..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/SecurityHandler.h +++ /dev/null @@ -1,162 +0,0 @@ -//======================================================================== -// -// SecurityHandler.h -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef SECURITYHANDLER_H -#define SECURITYHANDLER_H - -#include "poppler-config.h" - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include "Object.h" - -class GooString; -class PDFDoc; -struct XpdfSecurityHandler; - -//------------------------------------------------------------------------ -// SecurityHandler -//------------------------------------------------------------------------ - -class SecurityHandler { -public: - - static SecurityHandler *make(PDFDoc *docA, Object *encryptDictA); - - SecurityHandler(PDFDoc *docA); - virtual ~SecurityHandler(); - - // Check the document's encryption. If the document is encrypted, - // this will first try <ownerPassword> and <userPassword> (in - // "batch" mode), and if those fail, it will attempt to request a - // password from the user. This is the high-level function that - // calls the lower level functions for the specific security handler - // (requesting a password three times, etc.). Returns true if the - // document can be opened (if it's unencrypted, or if a correct - // password is obtained); false otherwise (encrypted and no correct - // password). - GBool checkEncryption(GooString *ownerPassword, - GooString *userPassword); - - // Create authorization data for the specified owner and user - // passwords. If the security handler doesn't support "batch" mode, - // this function should return NULL. - virtual void *makeAuthData(GooString *ownerPassword, - GooString *userPassword) = 0; - - // Construct authorization data, typically by prompting the user for - // a password. Returns an authorization data object, or NULL to - // cancel. - virtual void *getAuthData() = 0; - - // Free the authorization data returned by makeAuthData or - // getAuthData. - virtual void freeAuthData(void *authData) = 0; - - // Attempt to authorize the document, using the supplied - // authorization data (which may be NULL). Returns true if - // successful (i.e., if at least the right to open the document was - // granted). - virtual GBool authorize(void *authData) = 0; - - // Return the various authorization parameters. These are only - // valid after authorize has returned true. - virtual int getPermissionFlags() = 0; - virtual GBool getOwnerPasswordOk() = 0; - virtual Guchar *getFileKey() = 0; - virtual int getFileKeyLength() = 0; - virtual int getEncVersion() = 0; - virtual int getEncRevision() = 0; - virtual CryptAlgorithm getEncAlgorithm() = 0; - -protected: - - PDFDoc *doc; -}; - -//------------------------------------------------------------------------ -// StandardSecurityHandler -//------------------------------------------------------------------------ - -class StandardSecurityHandler: public SecurityHandler { -public: - - StandardSecurityHandler(PDFDoc *docA, Object *encryptDictA); - virtual ~StandardSecurityHandler(); - - virtual void *makeAuthData(GooString *ownerPassword, - GooString *userPassword); - virtual void *getAuthData(); - virtual void freeAuthData(void *authData); - virtual GBool authorize(void *authData); - virtual int getPermissionFlags() { return permFlags; } - virtual GBool getOwnerPasswordOk() { return ownerPasswordOk; } - virtual Guchar *getFileKey() { return fileKey; } - virtual int getFileKeyLength() { return fileKeyLength; } - virtual int getEncVersion() { return encVersion; } - virtual int getEncRevision() { return encRevision; } - virtual CryptAlgorithm getEncAlgorithm() { return encAlgorithm; } - -private: - - int permFlags; - GBool ownerPasswordOk; - Guchar fileKey[16]; - int fileKeyLength; - int encVersion; - int encRevision; - GBool encryptMetadata; - CryptAlgorithm encAlgorithm; - - GooString *ownerKey, *userKey; - GooString *fileID; - GBool ok; -}; - -#ifdef ENABLE_PLUGINS -//------------------------------------------------------------------------ -// ExternalSecurityHandler -//------------------------------------------------------------------------ - -class ExternalSecurityHandler: public SecurityHandler { -public: - - ExternalSecurityHandler(PDFDoc *docA, Object *encryptDictA, - XpdfSecurityHandler *xshA); - virtual ~ExternalSecurityHandler(); - - virtual void *makeAuthData(GooString *ownerPassword, - GooString *userPassword); - virtual void *getAuthData(); - virtual void freeAuthData(void *authData); - virtual GBool authorize(void *authData); - virtual int getPermissionFlags() { return permFlags; } - virtual GBool getOwnerPasswordOk() { return gFalse; } - virtual Guchar *getFileKey() { return fileKey; } - virtual int getFileKeyLength() { return fileKeyLength; } - virtual int getEncVersion() { return encVersion; } - virtual CryptAlgorithm getEncAlgorithm() { return encAlgorithm; } - -private: - - Object encryptDict; - XpdfSecurityHandler *xsh; - void *docData; - int permFlags; - Guchar fileKey[16]; - int fileKeyLength; - int encVersion; - CryptAlgorithm encAlgorithm; - GBool ok; -}; -#endif // ENABLE_PLUGINS - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Sound.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Sound.cc deleted file mode 100644 index 6129fdcb47d..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Sound.cc +++ /dev/null @@ -1,145 +0,0 @@ -/* Sound.cc - an object that holds the sound structure - * Copyright (C) 2006-2007, Pino Toscano <pino@kde.org> - * Copyright (C) 2009, Albert Astals Cid <aacid@kde.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include "GooString.h" -#include "Object.h" -#include "Sound.h" -#include "Stream.h" -#include "FileSpec.h" - -Sound *Sound::parseSound(Object *obj) -{ - // let's try to see if this Object is a Sound, according to the PDF specs - // (section 9.2) - Stream *str = NULL; - // the Object must be a Stream - if (obj->isStream()) { - str = obj->getStream(); - } else { - return NULL; - } - // the Stream must have a Dict - Dict *dict = str->getDict(); - if (dict == NULL) - return NULL; - Object tmp; - // the Dict must have the 'R' key of type num - dict->lookup("R", &tmp); - if (tmp.isNum()) { - return new Sound(obj); - } else { - return NULL; - } -} - -Sound::Sound(Object *obj, bool readAttrs) -{ - streamObj = new Object(); - streamObj->initNull(); - obj->copy(streamObj); - - fileName = NULL; - samplingRate = 0.0; - channels = 1; - bitsPerSample = 8; - encoding = soundRaw; - - if (readAttrs) - { - Object tmp; - Dict *dict = streamObj->getStream()->getDict(); - dict->lookup("F", &tmp); - if (!tmp.isNull()) { - Object obj1; - // valid 'F' key -> external file - kind = soundExternal; - if (getFileSpecNameForPlatform (&tmp, &obj1)) { - fileName = obj1.getString()->copy(); - obj1.free(); - } - } else { - // no file specification, then the sound data have to be - // extracted from the stream - kind = soundEmbedded; - } - tmp.free(); - // sampling rate - dict->lookup("R", &tmp); - if (tmp.isNum()) { - samplingRate = tmp.getNum(); - } - tmp.free(); - // sound channels - dict->lookup("C", &tmp); - if (tmp.isInt()) { - channels = tmp.getInt(); - } - tmp.free(); - // bits per sample - dict->lookup("B", &tmp); - if (tmp.isInt()) { - bitsPerSample = tmp.getInt(); - } - tmp.free(); - // encoding format - dict->lookup("E", &tmp); - if (tmp.isName()) - { - const char *enc = tmp.getName(); - if (strcmp("Raw", enc) == 0) { - encoding = soundRaw; - } else if (strcmp("Signed", enc) == 0) { - encoding = soundSigned; - } else if (strcmp("muLaw", enc) == 0) { - encoding = soundMuLaw; - } else if (strcmp("ALaw", enc) == 0) { - encoding = soundALaw; - } - } - tmp.free(); - } -} - -Sound::~Sound() -{ - delete fileName; - streamObj->free(); - delete streamObj; -} - -Stream *Sound::getStream() -{ - return streamObj->getStream(); -} - -Sound *Sound::copy() -{ - Sound *newsound = new Sound(streamObj, false); - - newsound->kind = kind; - if (fileName) { - newsound->fileName = fileName->copy(); - } - newsound->samplingRate = samplingRate; - newsound->channels = channels; - newsound->bitsPerSample = bitsPerSample; - newsound->encoding = encoding; - - return newsound; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Sound.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Sound.h deleted file mode 100644 index acb0f8d9acd..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Sound.h +++ /dev/null @@ -1,74 +0,0 @@ -/* Sound.h - an object that holds the sound structure - * Copyright (C) 2006-2007, Pino Toscano <pino@kde.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef Sound_H -#define Sound_H - -class GooString; -class Object; -class Stream; - -//------------------------------------------------------------------------ - -enum SoundKind { - soundEmbedded, // embedded sound - soundExternal // external sound -}; - -enum SoundEncoding { - soundRaw, // raw encoding - soundSigned, // twos-complement values - soundMuLaw, // mu-law-encoded samples - soundALaw // A-law-encoded samples -}; - -class Sound -{ -public: - // Try to parse the Object s - static Sound *parseSound(Object *s); - - // Destructor - ~Sound(); - - Object *getObject() { return streamObj; } - Stream *getStream(); - - SoundKind getSoundKind() { return kind; } - GooString *getFileName() { return fileName; } - double getSamplingRate() { return samplingRate; } - int getChannels() { return channels; } - int getBitsPerSample() { return bitsPerSample; } - SoundEncoding getEncoding() { return encoding; } - - Sound *copy(); - -private: - // Create a sound. The Object obj is ensured to be a Stream with a Dict - Sound(Object *obj, bool readAttrs = true); - - Object *streamObj; - SoundKind kind; - GooString *fileName; - double samplingRate; - int channels; - int bitsPerSample; - SoundEncoding encoding; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/SplashOutputDev.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/SplashOutputDev.cc deleted file mode 100644 index 7bacdba7ed9..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/SplashOutputDev.cc +++ /dev/null @@ -1,4048 +0,0 @@ -//======================================================================== -// -// SplashOutputDev.cc -// -// Copyright 2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Takashi Iwai <tiwai@suse.de> -// Copyright (C) 2006 Stefan Schweizer <genstef@gentoo.org> -// Copyright (C) 2006-2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// Copyright (C) 2006 Scott Turner <scotty1024@mac.com> -// Copyright (C) 2007 Koji Otani <sho@bbr.jp> -// Copyright (C) 2009 Petr Gajdos <pgajdos@novell.com> -// Copyright (C) 2009-2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2009 William Bader <williambader@hotmail.com> -// Copyright (C) 2010 Patrick Spendrin <ps_ml@gmx.de> -// Copyright (C) 2010 Brian Cameron <brian.cameron@oracle.com> -// Copyright (C) 2010 PaweÅ‚ Wiejacha <pawel.wiejacha@gmail.com> -// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> -// Copyright (C) 2011 Andreas Hartmetz <ahartmetz@gmail.com> -// Copyright (C) 2011 Andrea Canciani <ranma42@gmail.com> -// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <string.h> -#include <math.h> -#include "goo/gfile.h" -#include "GlobalParams.h" -#include "Error.h" -#include "Object.h" -#include "Gfx.h" -#include "GfxFont.h" -#include "Page.h" -#include "Link.h" -#include "CharCodeToUnicode.h" -#include "FontEncodingTables.h" -#include "fofi/FoFiTrueType.h" -#include "splash/SplashBitmap.h" -#include "splash/SplashGlyphBitmap.h" -#include "splash/SplashPattern.h" -#include "splash/SplashScreen.h" -#include "splash/SplashPath.h" -#include "splash/SplashState.h" -#include "splash/SplashErrorCodes.h" -#include "splash/SplashFontEngine.h" -#include "splash/SplashFont.h" -#include "splash/SplashFontFile.h" -#include "splash/SplashFontFileID.h" -#include "splash/Splash.h" -#include "SplashOutputDev.h" - -#ifdef VMS -#if (__VMS_VER < 70000000) -extern "C" int unlink(char *filename); -#endif -#endif - -#ifdef _MSC_VER -#include <float.h> -#define isfinite(x) _finite(x) -#endif - -#ifdef __sun -#include <ieeefp.h> -#define isfinite(x) finite(x) -#endif - -static inline void convertGfxColor(SplashColorPtr dest, - SplashColorMode colorMode, - GfxColorSpace *colorSpace, - GfxColor *src) { - SplashColor color; - GfxGray gray; - GfxRGB rgb; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - - // make gcc happy - color[0] = color[1] = color[2] = 0; -#if SPLASH_CMYK - color[3] = 0; -#endif - switch (colorMode) { - case splashModeMono1: - case splashModeMono8: - colorSpace->getGray(src, &gray); - color[0] = colToByte(gray); - break; - case splashModeXBGR8: - color[3] = 255; - case splashModeBGR8: - case splashModeRGB8: - colorSpace->getRGB(src, &rgb); - color[0] = colToByte(rgb.r); - color[1] = colToByte(rgb.g); - color[2] = colToByte(rgb.b); - break; -#if SPLASH_CMYK - case splashModeCMYK8: - colorSpace->getCMYK(src, &cmyk); - color[0] = colToByte(cmyk.c); - color[1] = colToByte(cmyk.m); - color[2] = colToByte(cmyk.y); - color[3] = colToByte(cmyk.k); - break; -#endif - } - splashColorCopy(dest, color); -} - -static inline SplashPattern *createOverprintPattern(GfxColorSpace *colorSpace, SplashColorPtr color, GBool image, Guchar tolerance = 0x01) { - switch (colorSpace->getMode()) { - case csDeviceCMYK: - if (image) { - return new SplashSolidColor(color); - } - case csSeparation: - case csDeviceN: - if (image && colorSpace->getMode() == csDeviceN) { - GfxDeviceNColorSpace *deviceNSpace = (GfxDeviceNColorSpace *) colorSpace; - GBool hasSpot = gFalse; - GBool hasProcess = gFalse; - for (int i = 0; i < deviceNSpace->getNComps(); i++) { - GooString *name = deviceNSpace->getColorantName(i)->upperCase(); - if (name->cmp("CYAN") != 0 && - name->cmp("MAGENTA") != 0 && - name->cmp("YELLOW") != 0 && - name->cmp("BLACK") != 0 && - name->cmp("NONE") != 0) { - hasSpot = gTrue; - } else { - hasProcess = gTrue; - } - } - if (hasSpot && hasProcess) - return new SplashSolidColor(color); - } - return new SplashOverprintColor(colorSpace, color, tolerance); - case csIndexed: - return createOverprintPattern(((GfxIndexedColorSpace *) colorSpace)->getBase(), color, image); - case csICCBased: - if (image) { - return createOverprintPattern(((GfxICCBasedColorSpace *) colorSpace)->getAlt(), color, gFalse, 0x05); - } - case csDeviceGray: - if (image) { - return new SplashOverprintColor(colorSpace, color, tolerance); - } - default: // knockout - return new SplashSolidColor(color); - } -} - - -//------------------------------------------------------------------------ -// SplashOverprintColor -//------------------------------------------------------------------------ - -SplashOverprintColor::SplashOverprintColor(GfxColorSpace *colorSpaceA, SplashColorPtr colorA, Guchar toleranceA) { - splashColorCopy(color, colorA); - colorSpace = colorSpaceA; - tolerance = toleranceA; -} - -SplashOverprintColor::~SplashOverprintColor() { -} - -GBool SplashOverprintColor::getColor(int x, int y, SplashColorPtr c) { - splashColorCopy(c, color); - return gTrue; -} - -void SplashOverprintColor::overprint(GBool op, Guchar aSrc, SplashColorPtr cSrc, - Guchar aDest, SplashColorPtr cDest, - SplashColorPtr colorResult) { - switch(colorSpace->getMode()) { - case csDeviceGray: // only in case of grayscale images - colorResult[0] = cDest[0]; - colorResult[1] = cDest[1]; - colorResult[2] = cDest[2]; - colorResult[3] = (Guchar)(((aDest - aSrc) * cDest[3] + - aSrc * cSrc[3]) / aDest); - break; - case csDeviceCMYK: - colorResult[0] = (cSrc[0] < tolerance && op) ? - cDest[0] : - (Guchar)(((aDest - aSrc) * cDest[0] + aSrc * cSrc[0]) / aDest); - colorResult[1] = (cSrc[1] < tolerance && op) ? - cDest[1] : - (Guchar)(((aDest - aSrc) * cDest[1] + aSrc * cSrc[1]) / aDest); - colorResult[2] = (cSrc[2] < tolerance && op) ? - cDest[2] : - (Guchar)(((aDest - aSrc) * cDest[2] + aSrc * cSrc[2]) / aDest); - colorResult[3] = (cSrc[3] < tolerance && op) ? - cDest[3] : - (Guchar)(((aDest - aSrc) * cDest[3] + aSrc * cSrc[3]) / aDest); - break; - - case csSeparation: - { - GfxSeparationColorSpace *sepSpace = (GfxSeparationColorSpace *) colorSpace; - GooString *name = sepSpace->getName()->upperCase(); - if (name->cmp("CYAN") == 0) { - colorResult[0] = (Guchar)(((aDest - aSrc) * cDest[0] + - aSrc * cSrc[0]) / aDest); - colorResult[1] = cDest[1]; - colorResult[2] = cDest[2]; - colorResult[3] = cDest[3]; - } else if (name->cmp("MAGENTA") == 0) { - colorResult[0] = cDest[0]; - colorResult[1] = (Guchar)(((aDest - aSrc) * cDest[1] + - aSrc * cSrc[1]) / aDest); - colorResult[2] = cDest[2]; - colorResult[3] = cDest[3]; - } else if (name->cmp("YELLOW") == 0) { - colorResult[0] = cDest[0]; - colorResult[1] = cDest[1]; - colorResult[2] = (Guchar)(((aDest - aSrc) * cDest[2] + - aSrc * cSrc[2]) / aDest); - colorResult[3] = cDest[3]; - } else if (name->cmp("BLACK") == 0) { - colorResult[0] = cDest[0]; - colorResult[1] = cDest[1]; - colorResult[2] = cDest[2]; - colorResult[3] = (Guchar)(((aDest - aSrc) * cDest[3] + - aSrc * cSrc[3]) / aDest); - } else { - colorResult[0] = ((int) cDest[0] + cSrc[0]) > 0xff ? 0xff : cDest[0] + cSrc[0]; - colorResult[1] = ((int) cDest[1] + cSrc[1]) > 0xff ? 0xff : cDest[1] + cSrc[1]; - colorResult[2] = ((int) cDest[2] + cSrc[2]) > 0xff ? 0xff : cDest[2] + cSrc[2]; - colorResult[3] = ((int) cDest[3] + cSrc[3]) > 0xff ? 0xff : cDest[3] + cSrc[3]; - } - } - break; - case csDeviceN: - { - GfxDeviceNColorSpace *deviceNSpace = (GfxDeviceNColorSpace *) colorSpace; - colorResult[0] = cDest[0]; - colorResult[1] = cDest[1]; - colorResult[2] = cDest[2]; - colorResult[3] = cDest[3]; - for (int i = 0; i < deviceNSpace->getNComps(); i++) { - GooString *name = deviceNSpace->getColorantName(i)->upperCase(); - if (name->cmp("CYAN") == 0) { - colorResult[0] = (Guchar)(((aDest - aSrc) * cDest[0] + - aSrc * cSrc[0]) / aDest); - } else if (name->cmp("MAGENTA") == 0) { - colorResult[1] = (Guchar)(((aDest - aSrc) * cDest[1] + - aSrc * cSrc[1]) / aDest); - } else if (name->cmp("YELLOW") == 0) { - colorResult[2] = (Guchar)(((aDest - aSrc) * cDest[2] + - aSrc * cSrc[2]) / aDest); - } else if (name->cmp("BLACK") == 0) { - colorResult[3] = (Guchar)(((aDest - aSrc) * cDest[3] + - aSrc * cSrc[3]) / aDest); - } else if (name->cmp("NONE") != 0) { - colorResult[0] = (cSrc[0] < tolerance && op) ? - cDest[0] : - (Guchar)(((aDest - aSrc) * cDest[0] + aSrc * cSrc[0]) / aDest); - colorResult[1] = (cSrc[1] < tolerance && op) ? - cDest[1] : - (Guchar)(((aDest - aSrc) * cDest[1] + aSrc * cSrc[1]) / aDest); - colorResult[2] = (cSrc[2] < tolerance && op) ? - cDest[2] : - (Guchar)(((aDest - aSrc) * cDest[2] + aSrc * cSrc[2]) / aDest); - colorResult[3] = (cSrc[3] < tolerance && op) ? - cDest[3] : - (Guchar)(((aDest - aSrc) * cDest[3] + aSrc * cSrc[3]) / aDest); - break; - } - } - } - break; - default: - // default for overprint is knockout: - colorResult[0] = (Guchar)(((aDest - aSrc) * cDest[0] + - aSrc * cSrc[0]) / aDest); - colorResult[1] = (Guchar)(((aDest - aSrc) * cDest[1] + - aSrc * cSrc[1]) / aDest); - colorResult[2] = (Guchar)(((aDest - aSrc) * cDest[2] + - aSrc * cSrc[2]) / aDest); - colorResult[3] = (Guchar)(((aDest - aSrc) * cDest[3] + - aSrc * cSrc[3]) / aDest); - } -} - -//------------------------------------------------------------------------ -// SplashGouraudPattern -//------------------------------------------------------------------------ -SplashGouraudPattern::SplashGouraudPattern(GBool bDirectColorTranslationA, - GfxState *stateA, GfxGouraudTriangleShading *shadingA, SplashColorMode modeA) { - SplashColor defaultColor; - GfxColor srcColor; - state = stateA; - shading = shadingA; - mode = modeA; - bDirectColorTranslation = bDirectColorTranslationA; - shadingA->getColorSpace()->getDefaultColor(&srcColor); - convertGfxColor(defaultColor, mode, shadingA->getColorSpace(), &srcColor); - opPattern = new SplashOverprintColor(shadingA->getColorSpace(), defaultColor, 0x01); -} - -SplashGouraudPattern::~SplashGouraudPattern() { - delete opPattern; -} - -void SplashGouraudPattern::getParameterizedColor(double colorinterp, SplashColorMode mode, SplashColorPtr dest) { - GfxColor src; - GfxColorSpace* srcColorSpace = shading->getColorSpace(); - int colorComps = 3; -#if SPLASH_CMYK - if (mode == splashModeCMYK8) - colorComps=4; -#endif - - shading->getParameterizedColor(colorinterp, &src); - - if (bDirectColorTranslation) { - for (int m = 0; m < colorComps; ++m) - dest[m] = colToByte(src.c[m]); - } else { - convertGfxColor(dest, mode, srcColorSpace, &src); - } -} - -void SplashGouraudPattern::overprint(GBool op, Guchar aSrc, SplashColorPtr cSrc, - Guchar aDest, SplashColorPtr cDest, - SplashColorPtr colorResult) { - opPattern->overprint(op, aSrc, cSrc, aDest, cDest, colorResult); -} -//------------------------------------------------------------------------ -// SplashUnivariatePattern -//------------------------------------------------------------------------ - -SplashUnivariatePattern::SplashUnivariatePattern(SplashColorMode colorModeA, GfxState *stateA, GfxUnivariateShading *shadingA) { - Matrix ctm; - double xMin, yMin, xMax, yMax; - - shading = shadingA; - state = stateA; - colorMode = colorModeA; - - state->getCTM(&ctm); - ctm.invertTo(&ictm); - - // get the function domain - t0 = shading->getDomain0(); - t1 = shading->getDomain1(); - dt = t1 - t0; - - stateA->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); - shadingA->setupCache(&ctm, xMin, yMin, xMax, yMax); -} - -SplashUnivariatePattern::~SplashUnivariatePattern() { -} - -GBool SplashUnivariatePattern::getColor(int x, int y, SplashColorPtr c) { - GfxColor gfxColor; - double xc, yc, t; - - ictm.transform(x, y, &xc, &yc); - if (! getParameter (xc, yc, &t)) - return gFalse; - - shading->getColor(t, &gfxColor); - convertGfxColor(c, colorMode, shading->getColorSpace(), &gfxColor); - return gTrue; -} - -GBool SplashUnivariatePattern::testPosition(int x, int y) { - double xc, yc, t; - - ictm.transform(x, y, &xc, &yc); - if (! getParameter (xc, yc, &t)) - return gFalse; - return (t0 < t1) ? (t > t0 && t < t1) : (t > t1 && t < t0); -} - - -//------------------------------------------------------------------------ -// SplashRadialPattern -//------------------------------------------------------------------------ -#define RADIAL_EPSILON (1. / 1024 / 1024) - -SplashRadialPattern::SplashRadialPattern(SplashColorMode colorModeA, GfxState *stateA, GfxRadialShading *shadingA): - SplashUnivariatePattern(colorModeA, stateA, shadingA) -{ - SplashColor defaultColor; - GfxColor srcColor; - - shadingA->getCoords(&x0, &y0, &r0, &dx, &dy, &dr); - dx -= x0; - dy -= y0; - dr -= r0; - a = dx*dx + dy*dy - dr*dr; - if (fabs(a) > RADIAL_EPSILON) - inva = 1.0 / a; - shadingA->getColorSpace()->getDefaultColor(&srcColor); - convertGfxColor(defaultColor, colorModeA, shadingA->getColorSpace(), &srcColor); - opPattern = new SplashOverprintColor(shadingA->getColorSpace(), defaultColor, 0x01); -} - -SplashRadialPattern::~SplashRadialPattern() { - delete opPattern; -} - -GBool SplashRadialPattern::getParameter(double xs, double ys, double *t) { - double b, c, s0, s1; - - // We want to solve this system of equations: - // - // 1. (x - xc(s))^2 + (y -yc(s))^2 = rc(s)^2 - // 2. xc(s) = x0 + s * (x1 - xo) - // 3. yc(s) = y0 + s * (y1 - yo) - // 4. rc(s) = r0 + s * (r1 - ro) - // - // To simplify the system a little, we translate - // our coordinates to have the origin in (x0,y0) - - xs -= x0; - ys -= y0; - - // Then we have to solve the equation: - // A*s^2 - 2*B*s + C = 0 - // where - // A = dx^2 + dy^2 - dr^2 - // B = xs*dx + ys*dy + r0*dr - // C = xs^2 + ys^2 - r0^2 - - b = xs*dx + ys*dy + r0*dr; - c = xs*xs + ys*ys - r0*r0; - - if (fabs(a) <= RADIAL_EPSILON) { - // A is 0, thus the equation simplifies to: - // -2*B*s + C = 0 - // If B is 0, we can either have no solution or an indeterminate - // equation, thus we behave as if we had an invalid solution - if (fabs(b) <= RADIAL_EPSILON) - return gFalse; - - s0 = s1 = 0.5 * c / b; - } else { - double d; - - d = b*b - a*c; - if (d < 0) - return gFalse; - - d = sqrt (d); - s0 = b + d; - s1 = b - d; - - // If A < 0, one of the two solutions will have negative radius, - // thus it will be ignored. Otherwise we know that s1 <= s0 - // (because d >=0 implies b - d <= b + d), so if both are valid it - // will be the true solution. - s0 *= inva; - s1 *= inva; - } - - if (r0 + s0 * dr >= 0) { - if (0 <= s0 && s0 <= 1) { - *t = t0 + dt * s0; - return gTrue; - } else if (s0 < 0 && shading->getExtend0()) { - *t = t0; - return gTrue; - } else if (s0 > 1 && shading->getExtend1()) { - *t = t1; - return gTrue; - } - } - - if (r0 + s1 * dr >= 0) { - if (0 <= s1 && s1 <= 1) { - *t = t0 + dt * s1; - return gTrue; - } else if (s1 < 0 && shading->getExtend0()) { - *t = t0; - return gTrue; - } else if (s1 > 1 && shading->getExtend1()) { - *t = t1; - return gTrue; - } - } - - return gFalse; -} - -void SplashRadialPattern::overprint(GBool op, Guchar aSrc, SplashColorPtr cSrc, - Guchar aDest, SplashColorPtr cDest, - SplashColorPtr colorResult) { - opPattern->overprint(op, aSrc, cSrc, aDest, cDest, colorResult); -} - -#undef RADIAL_EPSILON - -//------------------------------------------------------------------------ -// SplashAxialPattern -//------------------------------------------------------------------------ - -SplashAxialPattern::SplashAxialPattern(SplashColorMode colorModeA, GfxState *stateA, GfxAxialShading *shadingA): - SplashUnivariatePattern(colorModeA, stateA, shadingA) -{ - SplashColor defaultColor; - GfxColor srcColor; - - shadingA->getCoords(&x0, &y0, &x1, &y1); - dx = x1 - x0; - dy = y1 - y0; - mul = 1 / (dx * dx + dy * dy); - shadingA->getColorSpace()->getDefaultColor(&srcColor); - convertGfxColor(defaultColor, colorModeA, shadingA->getColorSpace(), &srcColor); - opPattern = new SplashOverprintColor(shadingA->getColorSpace(), defaultColor, 0x01); -} - -SplashAxialPattern::~SplashAxialPattern() { - delete opPattern; -} - -GBool SplashAxialPattern::getParameter(double xc, double yc, double *t) { - double s; - - xc -= x0; - yc -= y0; - - s = (xc * dx + yc * dy) * mul; - if (0 <= s && s <= 1) { - *t = t0 + dt * s; - } else if (s < 0 && shading->getExtend0()) { - *t = t0; - } else if (s > 1 && shading->getExtend1()) { - *t = t1; - } else { - return gFalse; - } - - return gTrue; -} - -void SplashAxialPattern::overprint(GBool op, Guchar aSrc, SplashColorPtr cSrc, - Guchar aDest, SplashColorPtr cDest, - SplashColorPtr colorResult) { - opPattern->overprint(op, aSrc, cSrc, aDest, cDest, colorResult); -} - -//------------------------------------------------------------------------ - -// Divide a 16-bit value (in [0, 255*255]) by 255, returning an 8-bit result. -static inline Guchar div255(int x) { - return (Guchar)((x + (x >> 8) + 0x80) >> 8); -} - -#if SPLASH_CMYK - -#include "GfxState_helpers.h" - -//------------------------------------------------------------------------- -// helper for Blend functions (convert CMYK to RGB, do blend, convert back) -//------------------------------------------------------------------------- - -// based in GfxState.cc - -static void cmykToRGB(SplashColorPtr cmyk, SplashColor rgb) { - double c, m, y, k, c1, m1, y1, k1, r, g, b; - - c = colToDbl(byteToCol(cmyk[0])); - m = colToDbl(byteToCol(cmyk[1])); - y = colToDbl(byteToCol(cmyk[2])); - k = colToDbl(byteToCol(cmyk[3])); - c1 = 1 - c; - m1 = 1 - m; - y1 = 1 - y; - k1 = 1 - k; - cmykToRGBMatrixMultiplication(c, m, y, k, c1, m1, y1, k1, r, g, b); - rgb[0] = colToByte(clip01(dblToCol(r))); - rgb[1] = colToByte(clip01(dblToCol(g))); - rgb[2] = colToByte(clip01(dblToCol(b))); -} - -static void rgbToCMYK(SplashColor rgb, SplashColorPtr cmyk) { - GfxColorComp c, m, y, k; - - c = clip01(gfxColorComp1 - byteToCol(rgb[0])); - m = clip01(gfxColorComp1 - byteToCol(rgb[1])); - y = clip01(gfxColorComp1 - byteToCol(rgb[2])); - k = c; - if (m < k) { - k = m; - } - if (y < k) { - k = y; - } - cmyk[0] = colToByte(c - k); - cmyk[1] = colToByte(m - k); - cmyk[2] = colToByte(y - k); - cmyk[3] = colToByte(k); -} - -#endif - -//------------------------------------------------------------------------ -// Blend functions -//------------------------------------------------------------------------ - -static void splashOutBlendMultiply(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm) { - int i; - -#if SPLASH_CMYK - if (cm == splashModeCMYK8) { - SplashColor rgbSrc; - SplashColor rgbDest; - SplashColor rgbBlend; - cmykToRGB(src, rgbSrc); - cmykToRGB(dest, rgbDest); - for (i = 0; i < 3; ++i) { - rgbBlend[i] = (rgbDest[i] * rgbSrc[i]) / 255; - } - rgbToCMYK(rgbBlend, blend); - } else -#endif - { - for (i = 0; i < splashColorModeNComps[cm]; ++i) { - blend[i] = (dest[i] * src[i]) / 255; - } - } -} - -static void splashOutBlendScreen(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm) { - int i; - -#if SPLASH_CMYK - if (cm == splashModeCMYK8) { - SplashColor rgbSrc; - SplashColor rgbDest; - SplashColor rgbBlend; - cmykToRGB(src, rgbSrc); - cmykToRGB(dest, rgbDest); - for (i = 0; i < 3; ++i) { - rgbBlend[i] = rgbDest[i] + rgbSrc[i] - (rgbDest[i] * rgbSrc[i]) / 255; - } - rgbToCMYK(rgbBlend, blend); - } else -#endif - { - for (i = 0; i < splashColorModeNComps[cm]; ++i) { - blend[i] = dest[i] + src[i] - (dest[i] * src[i]) / 255; - } - } -} - -static void splashOutBlendOverlay(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm) { - int i; - -#if SPLASH_CMYK - if (cm == splashModeCMYK8) { - SplashColor rgbSrc; - SplashColor rgbDest; - SplashColor rgbBlend; - cmykToRGB(src, rgbSrc); - cmykToRGB(dest, rgbDest); - for (i = 0; i < 3; ++i) { - rgbBlend[i] = rgbDest[i] < 0x80 - ? (rgbSrc[i] * 2 * rgbDest[i]) / 255 - : 255 - 2 * ((255 - rgbSrc[i]) * (255 - rgbDest[i])) / 255; - } - rgbToCMYK(rgbBlend, blend); - } else -#endif - { - for (i = 0; i < splashColorModeNComps[cm]; ++i) { - blend[i] = dest[i] < 0x80 - ? (src[i] * 2 * dest[i]) / 255 - : 255 - 2 * ((255 - src[i]) * (255 - dest[i])) / 255; - } - } -} - -static void splashOutBlendDarken(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm) { - int i; - -#if SPLASH_CMYK - if (cm == splashModeCMYK8) { - SplashColor rgbSrc; - SplashColor rgbDest; - SplashColor rgbBlend; - cmykToRGB(src, rgbSrc); - cmykToRGB(dest, rgbDest); - for (i = 0; i < 3; ++i) { - rgbBlend[i] = rgbDest[i] < rgbSrc[i] ? rgbDest[i] : rgbSrc[i]; - } - rgbToCMYK(rgbBlend, blend); - } else -#endif - { - for (i = 0; i < splashColorModeNComps[cm]; ++i) { - blend[i] = dest[i] < src[i] ? dest[i] : src[i]; - } - } -} - -static void splashOutBlendLighten(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm) { - int i; - -#if SPLASH_CMYK - if (cm == splashModeCMYK8) { - SplashColor rgbSrc; - SplashColor rgbDest; - SplashColor rgbBlend; - cmykToRGB(src, rgbSrc); - cmykToRGB(dest, rgbDest); - for (i = 0; i < 3; ++i) { - rgbBlend[i] = rgbDest[i] > rgbSrc[i] ? rgbDest[i] : rgbSrc[i]; - } - rgbToCMYK(rgbBlend, blend); - } else -#endif - { - for (i = 0; i < splashColorModeNComps[cm]; ++i) { - blend[i] = dest[i] > src[i] ? dest[i] : src[i]; - } - } -} - -static void splashOutBlendColorDodge(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, - SplashColorMode cm) { - int i, x; - -#if SPLASH_CMYK - if (cm == splashModeCMYK8) { - SplashColor rgbSrc; - SplashColor rgbDest; - SplashColor rgbBlend; - cmykToRGB(src, rgbSrc); - cmykToRGB(dest, rgbDest); - for (i = 0; i < 3; ++i) { - if (rgbSrc[i] == 255) { - rgbBlend[i] = 255; - } else { - x = (rgbDest[i] * 255) / (255 - rgbSrc[i]); - rgbBlend[i] = x <= 255 ? x : 255; - } - } - rgbToCMYK(rgbBlend, blend); - } else -#endif - { - for (i = 0; i < splashColorModeNComps[cm]; ++i) { - if (src[i] == 255) { - blend[i] = 255; - } else { - x = (dest[i] * 255) / (255 - src[i]); - blend[i] = x <= 255 ? x : 255; - } - } - } -} - -static void splashOutBlendColorBurn(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm) { - int i, x; - -#if SPLASH_CMYK - if (cm == splashModeCMYK8) { - SplashColor rgbSrc; - SplashColor rgbDest; - SplashColor rgbBlend; - cmykToRGB(src, rgbSrc); - cmykToRGB(dest, rgbDest); - for (i = 0; i < 3; ++i) { - if (rgbSrc[i] == 0) { - rgbBlend[i] = 0; - } else { - x = ((255 - rgbDest[i]) * 255) / rgbSrc[i]; - rgbBlend[i] = x <= 255 ? 255 - x : 0; - } - } - rgbToCMYK(rgbBlend, blend); - } else -#endif - { - for (i = 0; i < splashColorModeNComps[cm]; ++i) { - if (src[i] == 0) { - blend[i] = 0; - } else { - x = ((255 - dest[i]) * 255) / src[i]; - blend[i] = x <= 255 ? 255 - x : 0; - } - } - } -} - -static void splashOutBlendHardLight(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm) { - int i; - -#if SPLASH_CMYK - if (cm == splashModeCMYK8) { - SplashColor rgbSrc; - SplashColor rgbDest; - SplashColor rgbBlend; - cmykToRGB(src, rgbSrc); - cmykToRGB(dest, rgbDest); - for (i = 0; i < 3; ++i) { - rgbBlend[i] = rgbSrc[i] < 0x80 - ? (rgbDest[i] * 2 * rgbSrc[i]) / 255 - : 255 - 2 * ((255 - rgbDest[i]) * (255 - rgbSrc[i])) / 255; - } - rgbToCMYK(rgbBlend, blend); - } else -#endif - { - for (i = 0; i < splashColorModeNComps[cm]; ++i) { - blend[i] = src[i] < 0x80 - ? (dest[i] * 2 * src[i]) / 255 - : 255 - 2 * ((255 - dest[i]) * (255 - src[i])) / 255; - } - } -} - -static void splashOutBlendSoftLight(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm) { - int i, x; - -#if SPLASH_CMYK - if (cm == splashModeCMYK8) { - SplashColor rgbSrc; - SplashColor rgbDest; - SplashColor rgbBlend; - cmykToRGB(src, rgbSrc); - cmykToRGB(dest, rgbDest); - for (i = 0; i < 3; ++i) { - if (rgbSrc[i] < 0x80) { - rgbBlend[i] = rgbDest[i] - (255 - 2 * rgbSrc[i]) * rgbDest[i] * (255 - rgbDest[i]) / (255 * 255); - } else { - if (rgbDest[i] < 0x40) { - x = (((((16 * rgbDest[i] - 12 * 255) * rgbDest[i]) / 255) + 4 * 255) * rgbDest[i]) / 255; - } else { - x = (int)sqrt(255.0 * rgbDest[i]); - } - rgbBlend[i] = rgbDest[i] + (2 * rgbSrc[i] - 255) * (x - rgbDest[i]) / 255; - } - } - rgbToCMYK(rgbBlend, blend); - } else -#endif - { - for (i = 0; i < splashColorModeNComps[cm]; ++i) { - if (src[i] < 0x80) { - blend[i] = dest[i] - (255 - 2 * src[i]) * dest[i] * (255 - dest[i]) / (255 * 255); - } else { - if (dest[i] < 0x40) { - x = (((((16 * dest[i] - 12 * 255) * dest[i]) / 255) + 4 * 255) * dest[i]) / 255; - } else { - x = (int)sqrt(255.0 * dest[i]); - } - blend[i] = dest[i] + (2 * src[i] - 255) * (x - dest[i]) / 255; - } - } - } -} - -static void splashOutBlendDifference(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, - SplashColorMode cm) { - int i; - - for (i = 0; i < splashColorModeNComps[cm]; ++i) { -#if SPLASH_CMYK - if (cm == splashModeCMYK8) - { - blend[i] = dest[i] < src[i] ? 255 - (src[i] - dest[i]) : 255 - (dest[i] - src[i]); - } - else -#endif - { - blend[i] = dest[i] < src[i] ? src[i] - dest[i] : dest[i] - src[i]; - } - } -} - -static void splashOutBlendExclusion(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm) { - int i; - -#if SPLASH_CMYK - if (cm == splashModeCMYK8) { - SplashColor rgbSrc; - SplashColor rgbDest; - SplashColor rgbBlend; - cmykToRGB(src, rgbSrc); - cmykToRGB(dest, rgbDest); - for (i = 0; i < 3; ++i) { - rgbBlend[i] = rgbDest[i] + rgbSrc[i] - (2 * rgbDest[i] * rgbSrc[i]) / 255; - } - rgbToCMYK(rgbBlend, blend); - } else -#endif - { - for (i = 0; i < splashColorModeNComps[cm]; ++i) { - blend[i] = dest[i] + src[i] - (2 * dest[i] * src[i]) / 255; - } - } -} - -static void cvtRGBToHSV(Guchar r, Guchar g, Guchar b, int *h, int *s, int *v) { - int cmax, cmid, cmin, x; - - if (r >= g) { - if (g >= b) { x = 0; cmax = r; cmid = g; cmin = b; } - else if (b >= r) { x = 4; cmax = b; cmid = r; cmin = g; } - else { x = 5; cmax = r; cmid = b; cmin = g; } - } else { - if (r >= b) { x = 1; cmax = g; cmid = r; cmin = b; } - else if (g >= b) { x = 2; cmax = g; cmid = b; cmin = r; } - else { x = 3; cmax = b; cmid = g; cmin = r; } - } - if (cmax == cmin) { - *h = *s = 0; - } else { - *h = x * 60; - if (x & 1) { - *h += ((cmax - cmid) * 60) / (cmax - cmin); - } else { - *h += ((cmid - cmin) * 60) / (cmax - cmin); - } - *s = (255 * (cmax - cmin)) / cmax; - } - *v = cmax; -} - -static void cvtHSVToRGB(int h, int s, int v, Guchar *r, Guchar *g, Guchar *b) { - int x, f, cmax, cmid, cmin; - - if (s == 0) { - *r = *g = *b = v; - } else { - x = h / 60; - f = h % 60; - cmax = v; - if (x & 1) { - cmid = div255(v * 255 - ((s * f) / 60)); - } else { - cmid = div255(v * (255 - ((s * (60 - f)) / 60))); - } - cmin = div255(v * (255 - s)); - switch (x) { - case 0: *r = cmax; *g = cmid; *b = cmin; break; - case 1: *g = cmax; *r = cmid; *b = cmin; break; - case 2: *g = cmax; *b = cmid; *r = cmin; break; - case 3: *b = cmax; *g = cmid; *r = cmin; break; - case 4: *b = cmax; *r = cmid; *g = cmin; break; - case 5: *r = cmax; *b = cmid; *g = cmin; break; - } - } -} - -static void splashOutBlendHue(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm) { - int hs, ss, vs, hd, sd, vd; -#if SPLASH_CMYK - Guchar r, g, b; -#endif - - switch (cm) { - case splashModeMono1: - case splashModeMono8: - blend[0] = dest[0]; - break; - case splashModeXBGR8: - src[3] = 255; - case splashModeRGB8: - case splashModeBGR8: - cvtRGBToHSV(src[0], src[1], src[2], &hs, &ss, &vs); - cvtRGBToHSV(dest[0], dest[1], dest[2], &hd, &sd, &vd); - cvtHSVToRGB(hs, sd, vd, &blend[0], &blend[1], &blend[2]); - break; -#if SPLASH_CMYK - case splashModeCMYK8: - //~ (0xff - ...) should be clipped - cvtRGBToHSV(0xff - (src[0] + src[3]), - 0xff - (src[1] + src[3]), - 0xff - (src[2] + src[3]), &hs, &ss, &vs); - cvtRGBToHSV(0xff - (dest[0] + dest[3]), - 0xff - (dest[1] + dest[3]), - 0xff - (dest[2] + dest[3]), &hd, &sd, &vd); - cvtHSVToRGB(hs, sd, vd, &r, &g, &b); - //~ should do black generation - blend[0] = 0xff - r; - blend[1] = 0xff - g; - blend[2] = 0xff - b; - blend[3] = 0; - break; -#endif - } -} - -static void splashOutBlendSaturation(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, - SplashColorMode cm) { - int hs, ss, vs, hd, sd, vd; -#if SPLASH_CMYK - Guchar r, g, b; -#endif - - switch (cm) { - case splashModeMono1: - case splashModeMono8: - blend[0] = dest[0]; - break; - case splashModeXBGR8: - src[3] = 255; - case splashModeRGB8: - case splashModeBGR8: - cvtRGBToHSV(src[0], src[1], src[2], &hs, &ss, &vs); - cvtRGBToHSV(dest[0], dest[1], dest[2], &hd, &sd, &vd); - cvtHSVToRGB(hd, ss, vd, &blend[0], &blend[1], &blend[2]); - break; -#if SPLASH_CMYK - case splashModeCMYK8: - //~ (0xff - ...) should be clipped - cvtRGBToHSV(0xff - (src[0] + src[3]), - 0xff - (src[1] + src[3]), - 0xff - (src[2] + src[3]), &hs, &ss, &vs); - cvtRGBToHSV(0xff - (dest[0] + dest[3]), - 0xff - (dest[1] + dest[3]), - 0xff - (dest[2] + dest[3]), &hd, &sd, &vd); - cvtHSVToRGB(hd, ss, vd, &r, &g, &b); - //~ should do black generation - blend[0] = 0xff - r; - blend[1] = 0xff - g; - blend[2] = 0xff - b; - blend[3] = 0; - break; -#endif - } -} - -static void splashOutBlendColor(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm) { - int hs, ss, vs, hd, sd, vd; - - switch (cm) { - case splashModeMono1: - case splashModeMono8: - blend[0] = dest[0]; - break; - case splashModeXBGR8: - src[3] = 255; - case splashModeRGB8: - case splashModeBGR8: - cvtRGBToHSV(src[0], src[1], src[2], &hs, &ss, &vs); - cvtRGBToHSV(dest[0], dest[1], dest[2], &hd, &sd, &vd); - cvtHSVToRGB(hs, ss, vd, &blend[0], &blend[1], &blend[2]); - break; -#if SPLASH_CMYK - case splashModeCMYK8: - SplashColor rgbSrc; - SplashColor rgbDest; - SplashColor rgbBlend; - cmykToRGB(src, rgbSrc); - cmykToRGB(dest, rgbDest); - cvtRGBToHSV(rgbSrc[0], rgbSrc[1], rgbSrc[2], &hs, &ss, &vs); - cvtRGBToHSV(rgbDest[0], rgbDest[1], rgbDest[2], &hd, &sd, &vd); - cvtHSVToRGB(hs, ss, vd, &rgbBlend[0], &rgbBlend[1], &rgbBlend[2]); - rgbToCMYK(rgbBlend, blend); - break; -#endif - } -} - -static void splashOutBlendLuminosity(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, - SplashColorMode cm) { - int hs, ss, vs, hd, sd, vd; -#if SPLASH_CMYK - Guchar r, g, b; -#endif - - switch (cm) { - case splashModeMono1: - case splashModeMono8: - blend[0] = dest[0]; - break; - case splashModeXBGR8: - src[3] = 255; - case splashModeRGB8: - case splashModeBGR8: - cvtRGBToHSV(src[0], src[1], src[2], &hs, &ss, &vs); - cvtRGBToHSV(dest[0], dest[1], dest[2], &hd, &sd, &vd); - cvtHSVToRGB(hd, sd, vs, &blend[0], &blend[1], &blend[2]); - break; -#if SPLASH_CMYK - case splashModeCMYK8: - //~ (0xff - ...) should be clipped - cvtRGBToHSV(0xff - (src[0] + src[3]), - 0xff - (src[1] + src[3]), - 0xff - (src[2] + src[3]), &hs, &ss, &vs); - cvtRGBToHSV(0xff - (dest[0] + dest[3]), - 0xff - (dest[1] + dest[3]), - 0xff - (dest[2] + dest[3]), &hd, &sd, &vd); - cvtHSVToRGB(hd, sd, vs, &r, &g, &b); - //~ should do black generation - blend[0] = 0xff - r; - blend[1] = 0xff - g; - blend[2] = 0xff - b; - blend[3] = 0; - break; -#endif - } -} - -// NB: This must match the GfxBlendMode enum defined in GfxState.h. -static const SplashBlendFunc splashOutBlendFuncs[] = { - NULL, - &splashOutBlendMultiply, - &splashOutBlendScreen, - &splashOutBlendOverlay, - &splashOutBlendDarken, - &splashOutBlendLighten, - &splashOutBlendColorDodge, - &splashOutBlendColorBurn, - &splashOutBlendHardLight, - &splashOutBlendSoftLight, - &splashOutBlendDifference, - &splashOutBlendExclusion, - &splashOutBlendHue, - &splashOutBlendSaturation, - &splashOutBlendColor, - &splashOutBlendLuminosity -}; - -//------------------------------------------------------------------------ -// SplashOutFontFileID -//------------------------------------------------------------------------ - -class SplashOutFontFileID: public SplashFontFileID { -public: - - SplashOutFontFileID(Ref *rA) { r = *rA; } - - ~SplashOutFontFileID() {} - - GBool matches(SplashFontFileID *id) { - return ((SplashOutFontFileID *)id)->r.num == r.num && - ((SplashOutFontFileID *)id)->r.gen == r.gen; - } - -private: - - Ref r; -}; - -//------------------------------------------------------------------------ -// T3FontCache -//------------------------------------------------------------------------ - -struct T3FontCacheTag { - Gushort code; - Gushort mru; // valid bit (0x8000) and MRU index -}; - -class T3FontCache { -public: - - T3FontCache(Ref *fontID, double m11A, double m12A, - double m21A, double m22A, - int glyphXA, int glyphYA, int glyphWA, int glyphHA, - GBool aa, GBool validBBoxA); - ~T3FontCache(); - GBool matches(Ref *idA, double m11A, double m12A, - double m21A, double m22A) - { return fontID.num == idA->num && fontID.gen == idA->gen && - m11 == m11A && m12 == m12A && m21 == m21A && m22 == m22A; } - - Ref fontID; // PDF font ID - double m11, m12, m21, m22; // transform matrix - int glyphX, glyphY; // pixel offset of glyph bitmaps - int glyphW, glyphH; // size of glyph bitmaps, in pixels - GBool validBBox; // false if the bbox was [0 0 0 0] - int glyphSize; // size of glyph bitmaps, in bytes - int cacheSets; // number of sets in cache - int cacheAssoc; // cache associativity (glyphs per set) - Guchar *cacheData; // glyph pixmap cache - T3FontCacheTag *cacheTags; // cache tags, i.e., char codes -}; - -T3FontCache::T3FontCache(Ref *fontIDA, double m11A, double m12A, - double m21A, double m22A, - int glyphXA, int glyphYA, int glyphWA, int glyphHA, - GBool validBBoxA, GBool aa) { - int i; - - fontID = *fontIDA; - m11 = m11A; - m12 = m12A; - m21 = m21A; - m22 = m22A; - glyphX = glyphXA; - glyphY = glyphYA; - glyphW = glyphWA; - glyphH = glyphHA; - validBBox = validBBoxA; - if (aa) { - glyphSize = glyphW * glyphH; - } else { - glyphSize = ((glyphW + 7) >> 3) * glyphH; - } - cacheAssoc = 8; - if (glyphSize <= 256) { - cacheSets = 8; - } else if (glyphSize <= 512) { - cacheSets = 4; - } else if (glyphSize <= 1024) { - cacheSets = 2; - } else if (glyphSize <= 2048) { - cacheSets = 1; - cacheAssoc = 4; - } else if (glyphSize <= 4096) { - cacheSets = 1; - cacheAssoc = 2; - } else { - cacheSets = 1; - cacheAssoc = 1; - } - if (glyphSize < 10485760 / cacheAssoc / cacheSets) { - cacheData = (Guchar *)gmallocn_checkoverflow(cacheSets * cacheAssoc, glyphSize); - } else { - error(-1, "Not creating cacheData for T3FontCache, it asked for too much memory.\n" - " This could teoretically result in wrong rendering,\n" - " but most probably the document is bogus.\n" - " Please report a bug if you think the rendering may be wrong because of this."); - cacheData = NULL; - } - if (cacheData != NULL) - { - cacheTags = (T3FontCacheTag *)gmallocn(cacheSets * cacheAssoc, - sizeof(T3FontCacheTag)); - for (i = 0; i < cacheSets * cacheAssoc; ++i) { - cacheTags[i].mru = i & (cacheAssoc - 1); - } - } - else - { - cacheTags = NULL; - } -} - -T3FontCache::~T3FontCache() { - gfree(cacheData); - gfree(cacheTags); -} - -struct T3GlyphStack { - Gushort code; // character code - - //----- cache info - T3FontCache *cache; // font cache for the current font - T3FontCacheTag *cacheTag; // pointer to cache tag for the glyph - Guchar *cacheData; // pointer to cache data for the glyph - - //----- saved state - SplashBitmap *origBitmap; - Splash *origSplash; - double origCTM4, origCTM5; - - T3GlyphStack *next; // next object on stack -}; - -//------------------------------------------------------------------------ -// SplashTransparencyGroup -//------------------------------------------------------------------------ - -struct SplashTransparencyGroup { - int tx, ty; // translation coordinates - SplashBitmap *tBitmap; // bitmap for transparency group - GfxColorSpace *blendingColorSpace; - GBool isolated; - - //----- saved state - SplashBitmap *origBitmap; - Splash *origSplash; - - SplashTransparencyGroup *next; -}; - -//------------------------------------------------------------------------ -// SplashOutputDev -//------------------------------------------------------------------------ - -SplashOutputDev::SplashOutputDev(SplashColorMode colorModeA, - int bitmapRowPadA, - GBool reverseVideoA, - SplashColorPtr paperColorA, - GBool bitmapTopDownA, - GBool allowAntialiasA) { - colorMode = colorModeA; - bitmapRowPad = bitmapRowPadA; - bitmapTopDown = bitmapTopDownA; - allowAntialias = allowAntialiasA; - vectorAntialias = allowAntialias && - globalParams->getVectorAntialias() && - colorMode != splashModeMono1; - enableFreeTypeHinting = gFalse; - enableSlightHinting = gFalse; - setupScreenParams(72.0, 72.0); - reverseVideo = reverseVideoA; - if (paperColorA != NULL) { - splashColorCopy(paperColor, paperColorA); - } else { - splashClearColor(paperColor); - } - keepAlphaChannel = paperColorA == NULL; - - xref = NULL; - - bitmap = new SplashBitmap(1, 1, bitmapRowPad, colorMode, - colorMode != splashModeMono1, bitmapTopDown); - splash = new Splash(bitmap, vectorAntialias, &screenParams); - splash->clear(paperColor, 0); - - fontEngine = NULL; - - nT3Fonts = 0; - t3GlyphStack = NULL; - - font = NULL; - needFontUpdate = gFalse; - textClipPath = NULL; - haveCSPattern = gFalse; - transpGroupStack = NULL; -} - -void SplashOutputDev::setupScreenParams(double hDPI, double vDPI) { - screenParams.size = globalParams->getScreenSize(); - screenParams.dotRadius = globalParams->getScreenDotRadius(); - screenParams.gamma = (SplashCoord)globalParams->getScreenGamma(); - screenParams.blackThreshold = - (SplashCoord)globalParams->getScreenBlackThreshold(); - screenParams.whiteThreshold = - (SplashCoord)globalParams->getScreenWhiteThreshold(); - switch (globalParams->getScreenType()) { - case screenDispersed: - screenParams.type = splashScreenDispersed; - if (screenParams.size < 0) { - screenParams.size = 4; - } - break; - case screenClustered: - screenParams.type = splashScreenClustered; - if (screenParams.size < 0) { - screenParams.size = 10; - } - break; - case screenStochasticClustered: - screenParams.type = splashScreenStochasticClustered; - if (screenParams.size < 0) { - screenParams.size = 100; - } - if (screenParams.dotRadius < 0) { - screenParams.dotRadius = 2; - } - break; - case screenUnset: - default: - // use clustered dithering for resolution >= 300 dpi - // (compare to 299.9 to avoid floating point issues) - if (hDPI > 299.9 && vDPI > 299.9) { - screenParams.type = splashScreenStochasticClustered; - if (screenParams.size < 0) { - screenParams.size = 100; - } - if (screenParams.dotRadius < 0) { - screenParams.dotRadius = 2; - } - } else { - screenParams.type = splashScreenDispersed; - if (screenParams.size < 0) { - screenParams.size = 4; - } - } - } -} - -SplashOutputDev::~SplashOutputDev() { - int i; - - for (i = 0; i < nT3Fonts; ++i) { - delete t3FontCache[i]; - } - if (fontEngine) { - delete fontEngine; - } - if (splash) { - delete splash; - } - if (bitmap) { - delete bitmap; - } -} - -void SplashOutputDev::startDoc(XRef *xrefA) { - int i; - - xref = xrefA; - if (fontEngine) { - delete fontEngine; - } - fontEngine = new SplashFontEngine( -#if HAVE_T1LIB_H - globalParams->getEnableT1lib(), -#endif -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - globalParams->getEnableFreeType(), - enableFreeTypeHinting, - enableSlightHinting, -#endif - allowAntialias && - globalParams->getAntialias() && - colorMode != splashModeMono1); - for (i = 0; i < nT3Fonts; ++i) { - delete t3FontCache[i]; - } - nT3Fonts = 0; -} - -void SplashOutputDev::startPage(int pageNum, GfxState *state) { - int w, h; - double *ctm; - SplashCoord mat[6]; - SplashColor color; - - if (state) { - setupScreenParams(state->getHDPI(), state->getVDPI()); - w = (int)(state->getPageWidth() + 0.5); - if (w <= 0) { - w = 1; - } - h = (int)(state->getPageHeight() + 0.5); - if (h <= 0) { - h = 1; - } - } else { - w = h = 1; - } - if (splash) { - delete splash; - } - if (!bitmap || w != bitmap->getWidth() || h != bitmap->getHeight()) { - if (bitmap) { - delete bitmap; - } - bitmap = new SplashBitmap(w, h, bitmapRowPad, colorMode, - colorMode != splashModeMono1, bitmapTopDown); - } - splash = new Splash(bitmap, vectorAntialias, &screenParams); - if (state) { - ctm = state->getCTM(); - mat[0] = (SplashCoord)ctm[0]; - mat[1] = (SplashCoord)ctm[1]; - mat[2] = (SplashCoord)ctm[2]; - mat[3] = (SplashCoord)ctm[3]; - mat[4] = (SplashCoord)ctm[4]; - mat[5] = (SplashCoord)ctm[5]; - splash->setMatrix(mat); - } - switch (colorMode) { - case splashModeMono1: - case splashModeMono8: - color[0] = 0; - break; - case splashModeXBGR8: - color[3] = 255; - case splashModeRGB8: - case splashModeBGR8: - color[0] = color[1] = color[2] = 0; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - color[0] = color[1] = color[2] = color[3] = 0; - break; -#endif - } - splash->setStrokePattern(new SplashSolidColor(color)); - splash->setFillPattern(new SplashSolidColor(color)); - splash->setLineCap(splashLineCapButt); - splash->setLineJoin(splashLineJoinMiter); - splash->setLineDash(NULL, 0, 0); - splash->setMiterLimit(10); - splash->setFlatness(1); - // the SA parameter supposedly defaults to false, but Acrobat - // apparently hardwires it to true - splash->setStrokeAdjust(globalParams->getStrokeAdjust()); - splash->clear(paperColor, 0); -} - -void SplashOutputDev::endPage() { - if (colorMode != splashModeMono1 && !keepAlphaChannel) { - splash->compositeBackground(paperColor); - } -} - -void SplashOutputDev::saveState(GfxState *state) { - splash->saveState(); -} - -void SplashOutputDev::restoreState(GfxState *state) { - splash->restoreState(); - needFontUpdate = gTrue; -} - -void SplashOutputDev::updateAll(GfxState *state) { - updateLineDash(state); - updateLineJoin(state); - updateLineCap(state); - updateLineWidth(state); - updateFlatness(state); - updateMiterLimit(state); - updateStrokeAdjust(state); - updateFillColor(state); - updateStrokeColor(state); - needFontUpdate = gTrue; -} - -void SplashOutputDev::updateCTM(GfxState *state, double m11, double m12, - double m21, double m22, - double m31, double m32) { - double *ctm; - SplashCoord mat[6]; - - ctm = state->getCTM(); - mat[0] = (SplashCoord)ctm[0]; - mat[1] = (SplashCoord)ctm[1]; - mat[2] = (SplashCoord)ctm[2]; - mat[3] = (SplashCoord)ctm[3]; - mat[4] = (SplashCoord)ctm[4]; - mat[5] = (SplashCoord)ctm[5]; - splash->setMatrix(mat); -} - -void SplashOutputDev::updateLineDash(GfxState *state) { - double *dashPattern; - int dashLength; - double dashStart; - SplashCoord dash[20]; - int i; - - state->getLineDash(&dashPattern, &dashLength, &dashStart); - if (dashLength > 20) { - dashLength = 20; - } - for (i = 0; i < dashLength; ++i) { - dash[i] = (SplashCoord)dashPattern[i]; - if (dash[i] < 0) { - dash[i] = 0; - } - } - splash->setLineDash(dash, dashLength, (SplashCoord)dashStart); -} - -void SplashOutputDev::updateFlatness(GfxState *state) { - splash->setFlatness(state->getFlatness()); -} - -void SplashOutputDev::updateLineJoin(GfxState *state) { - splash->setLineJoin(state->getLineJoin()); -} - -void SplashOutputDev::updateLineCap(GfxState *state) { - splash->setLineCap(state->getLineCap()); -} - -void SplashOutputDev::updateMiterLimit(GfxState *state) { - splash->setMiterLimit(state->getMiterLimit()); -} - -void SplashOutputDev::updateLineWidth(GfxState *state) { - splash->setLineWidth(state->getLineWidth()); -} - -void SplashOutputDev::updateStrokeAdjust(GfxState * /*state*/) { -#if 0 // the SA parameter supposedly defaults to false, but Acrobat - // apparently hardwires it to true - splash->setStrokeAdjust(state->getStrokeAdjust()); -#endif -} - -void SplashOutputDev::updateFillColor(GfxState *state) { - GfxGray gray; - GfxRGB rgb; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - - state->getFillGray(&gray); - state->getFillRGB(&rgb); -#if SPLASH_CMYK - state->getFillCMYK(&cmyk); - splash->setFillPattern(getColor(state->getFillColorSpace(), gray, &rgb, &cmyk)); -#else - splash->setFillPattern(getColor(gray, &rgb)); -#endif -} - -void SplashOutputDev::updateStrokeColor(GfxState *state) { - GfxGray gray; - GfxRGB rgb; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - - state->getStrokeGray(&gray); - state->getStrokeRGB(&rgb); -#if SPLASH_CMYK - state->getStrokeCMYK(&cmyk); - splash->setStrokePattern(getColor(state->getStrokeColorSpace(), gray, &rgb, &cmyk)); -#else - splash->setStrokePattern(getColor(gray, &rgb)); -#endif -} - -#if SPLASH_CMYK -SplashPattern *SplashOutputDev::getColor(GfxColorSpace *colorSpace, GfxGray gray, GfxRGB *rgb, - GfxCMYK *cmyk) { -#else -SplashPattern *SplashOutputDev::getColor(GfxGray gray, GfxRGB *rgb) { -#endif - SplashPattern *pattern; - SplashColor color; - GfxColorComp r, g, b; - - if (reverseVideo) { - gray = gfxColorComp1 - gray; - r = gfxColorComp1 - rgb->r; - g = gfxColorComp1 - rgb->g; - b = gfxColorComp1 - rgb->b; - } else { - r = rgb->r; - g = rgb->g; - b = rgb->b; - } - - pattern = NULL; // make gcc happy - switch (colorMode) { - case splashModeMono1: - case splashModeMono8: - color[0] = colToByte(gray); - pattern = new SplashSolidColor(color); - break; - case splashModeXBGR8: - color[3] = 255; - case splashModeRGB8: - case splashModeBGR8: - color[0] = colToByte(r); - color[1] = colToByte(g); - color[2] = colToByte(b); - pattern = new SplashSolidColor(color); - break; -#if SPLASH_CMYK - case splashModeCMYK8: - color[0] = colToByte(cmyk->c); - color[1] = colToByte(cmyk->m); - color[2] = colToByte(cmyk->y); - color[3] = colToByte(cmyk->k); - pattern = createOverprintPattern(colorSpace, color, gFalse); - break; -#endif - } - - return pattern; -} - -void SplashOutputDev::updateBlendMode(GfxState *state) { - splash->setBlendFunc(splashOutBlendFuncs[state->getBlendMode()]); -} - -void SplashOutputDev::updateFillOpacity(GfxState *state) { - splash->setFillAlpha((SplashCoord)state->getFillOpacity()); -} - -void SplashOutputDev::updateStrokeOpacity(GfxState *state) { - splash->setStrokeAlpha((SplashCoord)state->getStrokeOpacity()); -} - -void SplashOutputDev::updateFillOverprint(GfxState *state) { - splash->setFillOverprint(state->getFillOverprint()); -} - -void SplashOutputDev::updateStrokeOverprint(GfxState *state) { - splash->setStrokeOverprint(state->getStrokeOverprint()); -} - -void SplashOutputDev::updateOverprintMode(GfxState *state) { - splash->setOverprintMode(state->getOverprintMode()); -} - -void SplashOutputDev::updateFont(GfxState * /*state*/) { - needFontUpdate = gTrue; -} - -void SplashOutputDev::doUpdateFont(GfxState *state) { - GfxFont *gfxFont; - GfxFontType fontType; - SplashOutFontFileID *id; - SplashFontFile *fontFile; - SplashFontSrc *fontsrc = NULL; - FoFiTrueType *ff; - Ref embRef; - Object refObj, strObj; - GooString *fileName; - char *tmpBuf; - int tmpBufLen; - Gushort *codeToGID; - DisplayFontParam *dfp; - double *textMat; - double m11, m12, m21, m22, fontSize; - SplashCoord mat[4]; - int n; - int faceIndex = 0; - GBool recreateFont = gFalse; - GBool doAdjustFontMatrix = gFalse; - - needFontUpdate = gFalse; - font = NULL; - fileName = NULL; - tmpBuf = NULL; - dfp = NULL; - - if (!(gfxFont = state->getFont())) { - goto err1; - } - fontType = gfxFont->getType(); - if (fontType == fontType3) { - goto err1; - } - - // check the font file cache - id = new SplashOutFontFileID(gfxFont->getID()); - if ((fontFile = fontEngine->getFontFile(id))) { - delete id; - - } else { - - // if there is an embedded font, write it to disk - if (gfxFont->getEmbeddedFontID(&embRef)) { - tmpBuf = gfxFont->readEmbFontFile(xref, &tmpBufLen); - if (! tmpBuf) - goto err2; - - // if there is an external font file, use it - } else if (!(fileName = gfxFont->getExtFontFile())) { - - // look for a display font mapping or a substitute font - dfp = NULL; - if (gfxFont->getName()) { - dfp = globalParams->getDisplayFont(gfxFont); - } - if (!dfp) { - error(-1, "Couldn't find a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - switch (dfp->kind) { - case displayFontT1: - fileName = dfp->t1.fileName; - fontType = gfxFont->isCIDFont() ? fontCIDType0 : fontType1; - break; - case displayFontTT: - fileName = dfp->tt.fileName; - fontType = gfxFont->isCIDFont() ? fontCIDType2 : fontTrueType; - faceIndex = dfp->tt.faceIndex; - break; - } - doAdjustFontMatrix = gTrue; - } - - fontsrc = new SplashFontSrc; - if (fileName) - fontsrc->setFile(fileName, gFalse); - else - fontsrc->setBuf(tmpBuf, tmpBufLen, gTrue); - - // load the font file - switch (fontType) { - case fontType1: - if (!(fontFile = fontEngine->loadType1Font( - id, - fontsrc, - ((Gfx8BitFont *)gfxFont)->getEncoding()))) { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontType1C: - if (!(fontFile = fontEngine->loadType1CFont( - id, - fontsrc, - ((Gfx8BitFont *)gfxFont)->getEncoding()))) { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontType1COT: - if (!(fontFile = fontEngine->loadOpenTypeT1CFont( - id, - fontsrc, - ((Gfx8BitFont *)gfxFont)->getEncoding()))) { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontTrueType: - case fontTrueTypeOT: - if (fileName) - ff = FoFiTrueType::load(fileName->getCString()); - else - ff = FoFiTrueType::make(tmpBuf, tmpBufLen); - if (ff) { - codeToGID = ((Gfx8BitFont *)gfxFont)->getCodeToGIDMap(ff); - n = 256; - delete ff; - } else { - codeToGID = NULL; - n = 0; - } - if (!(fontFile = fontEngine->loadTrueTypeFont( - id, - fontsrc, - codeToGID, n))) { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontCIDType0: - case fontCIDType0C: - if (!(fontFile = fontEngine->loadCIDFont( - id, - fontsrc))) { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontCIDType0COT: - if (!(fontFile = fontEngine->loadOpenTypeCFFFont( - id, - fontsrc))) { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontCIDType2: - case fontCIDType2OT: - codeToGID = NULL; - n = 0; - if (((GfxCIDFont *)gfxFont)->getCIDToGID()) { - n = ((GfxCIDFont *)gfxFont)->getCIDToGIDLen(); - if (n) { - codeToGID = (Gushort *)gmallocn(n, sizeof(Gushort)); - memcpy(codeToGID, ((GfxCIDFont *)gfxFont)->getCIDToGID(), - n * sizeof(Gushort)); - } - } else { - if (fileName) - ff = FoFiTrueType::load(fileName->getCString()); - else - ff = FoFiTrueType::make(tmpBuf, tmpBufLen); - if (! ff) - { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - codeToGID = ((GfxCIDFont *)gfxFont)->getCodeToGIDMap(ff, &n); - delete ff; - } - if (!(fontFile = fontEngine->loadTrueTypeFont( - id, - fontsrc, - codeToGID, n, faceIndex))) { - error(-1, "Couldn't create a font for '%s'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - default: - // this shouldn't happen - goto err2; - } - fontFile->doAdjustMatrix = doAdjustFontMatrix; - } - - // get the font matrix - textMat = state->getTextMat(); - fontSize = state->getFontSize(); - m11 = textMat[0] * fontSize * state->getHorizScaling(); - m12 = textMat[1] * fontSize * state->getHorizScaling(); - m21 = textMat[2] * fontSize; - m22 = textMat[3] * fontSize; - - // create the scaled font - mat[0] = m11; mat[1] = m12; - mat[2] = m21; mat[3] = m22; - font = fontEngine->getFont(fontFile, mat, splash->getMatrix()); - - // for substituted fonts: adjust the font matrix -- compare the - // width of 'm' in the original font and the substituted font - if (fontFile->doAdjustMatrix && !gfxFont->isCIDFont()) { - double w1, w2; - CharCode code; - char *name; - for (code = 0; code < 256; ++code) { - if ((name = ((Gfx8BitFont *)gfxFont)->getCharName(code)) && - name[0] == 'm' && name[1] == '\0') { - break; - } - } - if (code < 256) { - w1 = ((Gfx8BitFont *)gfxFont)->getWidth(code); - w2 = font->getGlyphAdvance(code); - if (!gfxFont->isSymbolic() && w2 > 0) { - // if real font is substantially narrower than substituted - // font, reduce the font size accordingly - if (w1 > 0.01 && w1 < 0.9 * w2) { - w1 /= w2; - m11 *= w1; - m21 *= w1; - recreateFont = gTrue; - } - } - } - } - - if (recreateFont) - { - mat[0] = m11; mat[1] = m12; - mat[2] = m21; mat[3] = m22; - font = fontEngine->getFont(fontFile, mat, splash->getMatrix()); - } - - if (fontsrc && !fontsrc->isFile) - fontsrc->unref(); - return; - - err2: - delete id; - err1: - if (fontsrc && !fontsrc->isFile) - fontsrc->unref(); - return; -} - -void SplashOutputDev::stroke(GfxState *state) { - SplashPath *path; - - if (state->getStrokeColorSpace()->isNonMarking()) { - return; - } - path = convertPath(state, state->getPath()); - splash->stroke(path); - delete path; -} - -void SplashOutputDev::fill(GfxState *state) { - SplashPath *path; - - if (state->getFillColorSpace()->isNonMarking()) { - return; - } - path = convertPath(state, state->getPath()); - splash->fill(path, gFalse); - delete path; -} - -void SplashOutputDev::eoFill(GfxState *state) { - SplashPath *path; - - if (state->getFillColorSpace()->isNonMarking()) { - return; - } - path = convertPath(state, state->getPath()); - splash->fill(path, gTrue); - delete path; -} - -void SplashOutputDev::clip(GfxState *state) { - SplashPath *path; - - path = convertPath(state, state->getPath()); - splash->clipToPath(path, gFalse); - delete path; -} - -void SplashOutputDev::eoClip(GfxState *state) { - SplashPath *path; - - path = convertPath(state, state->getPath()); - splash->clipToPath(path, gTrue); - delete path; -} - -void SplashOutputDev::clipToStrokePath(GfxState *state) { - SplashPath *path, *path2; - - path = convertPath(state, state->getPath()); - path2 = splash->makeStrokePath(path); - delete path; - splash->clipToPath(path2, gFalse); - delete path2; -} - -SplashPath *SplashOutputDev::convertPath(GfxState * /*state*/, GfxPath *path) { - SplashPath *sPath; - GfxSubpath *subpath; - int i, j; - - sPath = new SplashPath(); - for (i = 0; i < path->getNumSubpaths(); ++i) { - subpath = path->getSubpath(i); - if (subpath->getNumPoints() > 0) { - sPath->moveTo((SplashCoord)subpath->getX(0), - (SplashCoord)subpath->getY(0)); - j = 1; - while (j < subpath->getNumPoints()) { - if (subpath->getCurve(j)) { - sPath->curveTo((SplashCoord)subpath->getX(j), - (SplashCoord)subpath->getY(j), - (SplashCoord)subpath->getX(j+1), - (SplashCoord)subpath->getY(j+1), - (SplashCoord)subpath->getX(j+2), - (SplashCoord)subpath->getY(j+2)); - j += 3; - } else { - sPath->lineTo((SplashCoord)subpath->getX(j), - (SplashCoord)subpath->getY(j)); - ++j; - } - } - if (subpath->isClosed()) { - sPath->close(); - } - } - } - return sPath; -} - -void SplashOutputDev::drawChar(GfxState *state, double x, double y, - double dx, double dy, - double originX, double originY, - CharCode code, int nBytes, - Unicode *u, int uLen) { - SplashPath *path; - int render; - - // check for invisible text -- this is used by Acrobat Capture - render = state->getRender(); - if (render == 3) { - return; - } - - if (needFontUpdate) { - doUpdateFont(state); - } - if (!font) { - return; - } - - x -= originX; - y -= originY; - - // fill - if (!(render & 1)) { - if (!haveCSPattern && !state->getFillColorSpace()->isNonMarking()) { - splash->fillChar((SplashCoord)x, (SplashCoord)y, code, font); - } - } - - // stroke - if ((render & 3) == 1 || (render & 3) == 2) { - if (!state->getStrokeColorSpace()->isNonMarking()) { - if ((path = font->getGlyphPath(code))) { - path->offset((SplashCoord)x, (SplashCoord)y); - splash->stroke(path); - delete path; - } - } - } - - // clip - if (haveCSPattern || (render & 4)) { - if ((path = font->getGlyphPath(code))) { - path->offset((SplashCoord)x, (SplashCoord)y); - if (textClipPath) { - textClipPath->append(path); - delete path; - } else { - textClipPath = path; - } - } - } -} - -GBool SplashOutputDev::beginType3Char(GfxState *state, double x, double y, - double dx, double dy, - CharCode code, Unicode *u, int uLen) { - GfxFont *gfxFont; - Ref *fontID; - double *ctm, *bbox; - T3FontCache *t3Font; - T3GlyphStack *t3gs; - GBool validBBox; - double x1, y1, xMin, yMin, xMax, yMax, xt, yt; - int i, j; - - if (!(gfxFont = state->getFont())) { - return gFalse; - } - fontID = gfxFont->getID(); - ctm = state->getCTM(); - state->transform(0, 0, &xt, &yt); - - // is it the first (MRU) font in the cache? - if (!(nT3Fonts > 0 && - t3FontCache[0]->matches(fontID, ctm[0], ctm[1], ctm[2], ctm[3]))) { - - // is the font elsewhere in the cache? - for (i = 1; i < nT3Fonts; ++i) { - if (t3FontCache[i]->matches(fontID, ctm[0], ctm[1], ctm[2], ctm[3])) { - t3Font = t3FontCache[i]; - for (j = i; j > 0; --j) { - t3FontCache[j] = t3FontCache[j - 1]; - } - t3FontCache[0] = t3Font; - break; - } - } - if (i >= nT3Fonts) { - - // create new entry in the font cache - if (nT3Fonts == splashOutT3FontCacheSize) { - delete t3FontCache[nT3Fonts - 1]; - --nT3Fonts; - } - for (j = nT3Fonts; j > 0; --j) { - t3FontCache[j] = t3FontCache[j - 1]; - } - ++nT3Fonts; - bbox = gfxFont->getFontBBox(); - if (bbox[0] == 0 && bbox[1] == 0 && bbox[2] == 0 && bbox[3] == 0) { - // unspecified bounding box -- just take a guess - xMin = xt - 5; - xMax = xMin + 30; - yMax = yt + 15; - yMin = yMax - 45; - validBBox = gFalse; - } else { - state->transform(bbox[0], bbox[1], &x1, &y1); - xMin = xMax = x1; - yMin = yMax = y1; - state->transform(bbox[0], bbox[3], &x1, &y1); - if (x1 < xMin) { - xMin = x1; - } else if (x1 > xMax) { - xMax = x1; - } - if (y1 < yMin) { - yMin = y1; - } else if (y1 > yMax) { - yMax = y1; - } - state->transform(bbox[2], bbox[1], &x1, &y1); - if (x1 < xMin) { - xMin = x1; - } else if (x1 > xMax) { - xMax = x1; - } - if (y1 < yMin) { - yMin = y1; - } else if (y1 > yMax) { - yMax = y1; - } - state->transform(bbox[2], bbox[3], &x1, &y1); - if (x1 < xMin) { - xMin = x1; - } else if (x1 > xMax) { - xMax = x1; - } - if (y1 < yMin) { - yMin = y1; - } else if (y1 > yMax) { - yMax = y1; - } - validBBox = gTrue; - } - t3FontCache[0] = new T3FontCache(fontID, ctm[0], ctm[1], ctm[2], ctm[3], - (int)floor(xMin - xt), - (int)floor(yMin - yt), - (int)ceil(xMax) - (int)floor(xMin) + 3, - (int)ceil(yMax) - (int)floor(yMin) + 3, - validBBox, - colorMode != splashModeMono1); - } - } - t3Font = t3FontCache[0]; - - // is the glyph in the cache? - i = (code & (t3Font->cacheSets - 1)) * t3Font->cacheAssoc; - for (j = 0; j < t3Font->cacheAssoc; ++j) { - if (t3Font->cacheTags != NULL) { - if ((t3Font->cacheTags[i+j].mru & 0x8000) && - t3Font->cacheTags[i+j].code == code) { - drawType3Glyph(t3Font, &t3Font->cacheTags[i+j], - t3Font->cacheData + (i+j) * t3Font->glyphSize); - return gTrue; - } - } - } - - // push a new Type 3 glyph record - t3gs = new T3GlyphStack(); - t3gs->next = t3GlyphStack; - t3GlyphStack = t3gs; - t3GlyphStack->code = code; - t3GlyphStack->cache = t3Font; - t3GlyphStack->cacheTag = NULL; - t3GlyphStack->cacheData = NULL; - - return gFalse; -} - -void SplashOutputDev::endType3Char(GfxState *state) { - T3GlyphStack *t3gs; - double *ctm; - - if (t3GlyphStack->cacheTag) { - memcpy(t3GlyphStack->cacheData, bitmap->getDataPtr(), - t3GlyphStack->cache->glyphSize); - delete bitmap; - delete splash; - bitmap = t3GlyphStack->origBitmap; - splash = t3GlyphStack->origSplash; - ctm = state->getCTM(); - state->setCTM(ctm[0], ctm[1], ctm[2], ctm[3], - t3GlyphStack->origCTM4, t3GlyphStack->origCTM5); - updateCTM(state, 0, 0, 0, 0, 0, 0); - drawType3Glyph(t3GlyphStack->cache, - t3GlyphStack->cacheTag, t3GlyphStack->cacheData); - } - t3gs = t3GlyphStack; - t3GlyphStack = t3gs->next; - delete t3gs; -} - -void SplashOutputDev::type3D0(GfxState *state, double wx, double wy) { -} - -void SplashOutputDev::type3D1(GfxState *state, double wx, double wy, - double llx, double lly, double urx, double ury) { - double *ctm; - T3FontCache *t3Font; - SplashColor color; - double xt, yt, xMin, xMax, yMin, yMax, x1, y1; - int i, j; - - if (unlikely(t3GlyphStack == NULL)) { - error(-1, "t3GlyphStack was null in SplashOutputDev::type3D1"); - return; - } - - if (unlikely(t3GlyphStack->origBitmap != NULL)) { - error(-1, "t3GlyphStack origBitmap was not null in SplashOutputDev::type3D1"); - return; - } - - if (unlikely(t3GlyphStack->origSplash != NULL)) { - error(-1, "t3GlyphStack origSplash was not null in SplashOutputDev::type3D1"); - return; - } - - t3Font = t3GlyphStack->cache; - - // check for a valid bbox - state->transform(0, 0, &xt, &yt); - state->transform(llx, lly, &x1, &y1); - xMin = xMax = x1; - yMin = yMax = y1; - state->transform(llx, ury, &x1, &y1); - if (x1 < xMin) { - xMin = x1; - } else if (x1 > xMax) { - xMax = x1; - } - if (y1 < yMin) { - yMin = y1; - } else if (y1 > yMax) { - yMax = y1; - } - state->transform(urx, lly, &x1, &y1); - if (x1 < xMin) { - xMin = x1; - } else if (x1 > xMax) { - xMax = x1; - } - if (y1 < yMin) { - yMin = y1; - } else if (y1 > yMax) { - yMax = y1; - } - state->transform(urx, ury, &x1, &y1); - if (x1 < xMin) { - xMin = x1; - } else if (x1 > xMax) { - xMax = x1; - } - if (y1 < yMin) { - yMin = y1; - } else if (y1 > yMax) { - yMax = y1; - } - if (xMin - xt < t3Font->glyphX || - yMin - yt < t3Font->glyphY || - xMax - xt > t3Font->glyphX + t3Font->glyphW || - yMax - yt > t3Font->glyphY + t3Font->glyphH) { - if (t3Font->validBBox) { - error(-1, "Bad bounding box in Type 3 glyph"); - } - return; - } - - if (t3Font->cacheTags == NULL) - return; - - // allocate a cache entry - i = (t3GlyphStack->code & (t3Font->cacheSets - 1)) * t3Font->cacheAssoc; - for (j = 0; j < t3Font->cacheAssoc; ++j) { - if ((t3Font->cacheTags[i+j].mru & 0x7fff) == t3Font->cacheAssoc - 1) { - t3Font->cacheTags[i+j].mru = 0x8000; - t3Font->cacheTags[i+j].code = t3GlyphStack->code; - t3GlyphStack->cacheTag = &t3Font->cacheTags[i+j]; - t3GlyphStack->cacheData = t3Font->cacheData + (i+j) * t3Font->glyphSize; - } else { - ++t3Font->cacheTags[i+j].mru; - } - } - - // save state - t3GlyphStack->origBitmap = bitmap; - t3GlyphStack->origSplash = splash; - ctm = state->getCTM(); - t3GlyphStack->origCTM4 = ctm[4]; - t3GlyphStack->origCTM5 = ctm[5]; - - // create the temporary bitmap - if (colorMode == splashModeMono1) { - bitmap = new SplashBitmap(t3Font->glyphW, t3Font->glyphH, 1, - splashModeMono1, gFalse); - splash = new Splash(bitmap, gFalse, - t3GlyphStack->origSplash->getScreen()); - color[0] = 0; - splash->clear(color); - color[0] = 1; - } else { - bitmap = new SplashBitmap(t3Font->glyphW, t3Font->glyphH, 1, - splashModeMono8, gFalse); - splash = new Splash(bitmap, vectorAntialias, - t3GlyphStack->origSplash->getScreen()); - color[0] = 0x00; - splash->clear(color); - color[0] = 0xff; - } - splash->setFillPattern(new SplashSolidColor(color)); - splash->setStrokePattern(new SplashSolidColor(color)); - //~ this should copy other state from t3GlyphStack->origSplash? - state->setCTM(ctm[0], ctm[1], ctm[2], ctm[3], - -t3Font->glyphX, -t3Font->glyphY); - updateCTM(state, 0, 0, 0, 0, 0, 0); -} - -void SplashOutputDev::drawType3Glyph(T3FontCache *t3Font, - T3FontCacheTag * /*tag*/, Guchar *data) { - SplashGlyphBitmap glyph; - - glyph.x = -t3Font->glyphX; - glyph.y = -t3Font->glyphY; - glyph.w = t3Font->glyphW; - glyph.h = t3Font->glyphH; - glyph.aa = colorMode != splashModeMono1; - glyph.data = data; - glyph.freeData = gFalse; - splash->fillGlyph(0, 0, &glyph); -} - -void SplashOutputDev::beginTextObject(GfxState *state) { - if (!(state->getRender() & 4) && state->getFillColorSpace()->getMode() == csPattern) { - haveCSPattern = gTrue; - saveState(state); - } -} - -void SplashOutputDev::endTextObject(GfxState *state) { - if (haveCSPattern) { - haveCSPattern = gFalse; - if (state->getFillColorSpace()->getMode() != csPattern) { - if (textClipPath) { - splash->fill(textClipPath, gTrue); - delete textClipPath; - textClipPath = NULL; - } - restoreState(state); - updateFillColor(state); - } - } - if (textClipPath) { - splash->clipToPath(textClipPath, gFalse); - delete textClipPath; - textClipPath = NULL; - } -} - -struct SplashOutImageMaskData { - ImageStream *imgStr; - GBool invert; - int width, height, y; -}; - -GBool SplashOutputDev::imageMaskSrc(void *data, SplashColorPtr line) { - SplashOutImageMaskData *imgMaskData = (SplashOutImageMaskData *)data; - Guchar *p; - SplashColorPtr q; - int x; - - if (imgMaskData->y == imgMaskData->height) { - return gFalse; - } - for (x = 0, p = imgMaskData->imgStr->getLine(), q = line; - x < imgMaskData->width; - ++x) { - *q++ = *p++ ^ imgMaskData->invert; - } - ++imgMaskData->y; - return gTrue; -} - -void SplashOutputDev::endMaskClip(GfxState * state) { - double bbox[4] = {0,0,1,1}; // dummy - /* transfer mask to alpha channel! */ - // memcpy(maskBitmap->getAlphaPtr(), maskBitmap->getDataPtr(), bitmap->getRowSize() * bitmap->getHeight()); - // memset(maskBitmap->getDataPtr(), 0, bitmap->getRowSize() * bitmap->getHeight()); - int c; - Guchar *dest = bitmap->getAlphaPtr(); - Guchar *src = maskBitmap->getDataPtr(); - for (c= 0; c < maskBitmap->getRowSize() * maskBitmap->getHeight(); c++) { - dest[c] = src[c]; - } - delete maskBitmap; - maskBitmap = NULL; - endTransparencyGroup(state); - paintTransparencyGroup(state, bbox); -} - -void SplashOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool interpolate, GBool inlineImg) { - double *ctm; - SplashCoord mat[6]; - SplashOutImageMaskData imgMaskData; - - if (state->getFillColorSpace()->isNonMarking()) { - return; - } - - ctm = state->getCTM(); - for (int i = 0; i < 6; ++i) { - if (!isfinite(ctm[i])) return; - } - mat[0] = ctm[0]; - mat[1] = ctm[1]; - mat[2] = -ctm[2]; - mat[3] = -ctm[3]; - mat[4] = ctm[2] + ctm[4]; - mat[5] = ctm[3] + ctm[5]; - - imgMaskData.imgStr = new ImageStream(str, width, 1, 1); - imgMaskData.imgStr->reset(); - imgMaskData.invert = invert ? 0 : 1; - imgMaskData.width = width; - imgMaskData.height = height; - imgMaskData.y = 0; - - if (state->getFillColorSpace()->getMode() == csPattern) { - Splash *maskSplash; - SplashColor maskColor; - - /* from beginTransparencyGroup: */ - // push a new stack entry - SplashTransparencyGroup *transpGroup = new SplashTransparencyGroup(); - transpGroup->tx = 0; - transpGroup->ty = 0; - transpGroup->blendingColorSpace = NULL; - transpGroup->isolated = gFalse; - transpGroup->next = transpGroupStack; - transpGroupStack = transpGroup; - // save state - transpGroup->origBitmap = bitmap; - transpGroup->origSplash = splash; - //~ this ignores the blendingColorSpace arg - // create the temporary bitmap - bitmap = new SplashBitmap(bitmap->getWidth(), bitmap->getHeight(), bitmapRowPad, colorMode, gTrue, - bitmapTopDown); - splash = new Splash(bitmap, vectorAntialias, - transpGroup->origSplash->getScreen()); - splash->blitTransparent(transpGroup->origBitmap, 0, 0, 0, 0, bitmap->getWidth(), bitmap->getHeight()); - splash->setInNonIsolatedGroup(transpGroup->origBitmap, 0, 0); - transpGroup->tBitmap = bitmap; - - maskBitmap = new SplashBitmap(bitmap->getWidth(), bitmap->getHeight(), 1, splashModeMono8, gFalse); - maskSplash = new Splash(maskBitmap, vectorAntialias); - maskColor[0] = 0; - maskSplash->clear(maskColor); - maskColor[0] = 0xff; - maskSplash->setFillPattern(new SplashSolidColor(maskColor)); - maskSplash->fillImageMask(&imageMaskSrc, &imgMaskData, width, height, mat, t3GlyphStack != NULL); - delete maskSplash; - } else { - splash->fillImageMask(&imageMaskSrc, &imgMaskData, width, height, mat, t3GlyphStack != NULL); - if (inlineImg) { - while (imgMaskData.y < height) { - imgMaskData.imgStr->getLine(); - ++imgMaskData.y; - } - } - } - - delete imgMaskData.imgStr; - str->close(); -} - -struct SplashOutImageData { - ImageStream *imgStr; - GfxImageColorMap *colorMap; - SplashColorPtr lookup; - int *maskColors; - SplashColorMode colorMode; - int width, height, y; -}; - -GBool SplashOutputDev::imageSrc(void *data, SplashColorPtr colorLine, - Guchar * /*alphaLine*/) { - SplashOutImageData *imgData = (SplashOutImageData *)data; - Guchar *p; - SplashColorPtr q, col; - GfxGray gray; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - int nComps, x; - - if (imgData->y == imgData->height) { - return gFalse; - } - - nComps = imgData->colorMap->getNumPixelComps(); - - if (imgData->lookup) { - switch (imgData->colorMode) { - case splashModeMono1: - case splashModeMono8: - for (x = 0, p = imgData->imgStr->getLine(), q = colorLine; - x < imgData->width; - ++x, ++p) { - *q++ = imgData->lookup[*p]; - } - break; - case splashModeRGB8: - case splashModeBGR8: - for (x = 0, p = imgData->imgStr->getLine(), q = colorLine; - x < imgData->width; - ++x, ++p) { - col = &imgData->lookup[3 * *p]; - *q++ = col[0]; - *q++ = col[1]; - *q++ = col[2]; - } - break; - case splashModeXBGR8: - for (x = 0, p = imgData->imgStr->getLine(), q = colorLine; - x < imgData->width; - ++x, ++p) { - col = &imgData->lookup[4 * *p]; - *q++ = col[0]; - *q++ = col[1]; - *q++ = col[2]; - *q++ = col[3]; - } - break; -#if SPLASH_CMYK - case splashModeCMYK8: - for (x = 0, p = imgData->imgStr->getLine(), q = colorLine; - x < imgData->width; - ++x, ++p) { - col = &imgData->lookup[4 * *p]; - *q++ = col[0]; - *q++ = col[1]; - *q++ = col[2]; - *q++ = col[3]; - } - break; -#endif - } - } else { - switch (imgData->colorMode) { - case splashModeMono1: - case splashModeMono8: - for (x = 0, p = imgData->imgStr->getLine(), q = colorLine; - x < imgData->width; - ++x, p += nComps) { - imgData->colorMap->getGray(p, &gray); - *q++ = colToByte(gray); - } - break; - case splashModeRGB8: - case splashModeBGR8: - p = imgData->imgStr->getLine(); - q = colorLine; - - imgData->colorMap->getRGBLine(p, colorLine, imgData->width); - break; - case splashModeXBGR8: - p = imgData->imgStr->getLine(); - q = colorLine; - - imgData->colorMap->getRGBXLine(p, colorLine, imgData->width); - break; -#if SPLASH_CMYK - case splashModeCMYK8: - for (x = 0, p = imgData->imgStr->getLine(), q = colorLine; - x < imgData->width; - ++x, p += nComps) { - imgData->colorMap->getCMYK(p, &cmyk); - *q++ = colToByte(cmyk.c); - *q++ = colToByte(cmyk.m); - *q++ = colToByte(cmyk.y); - *q++ = colToByte(cmyk.k); - } - break; -#endif - } - } - - ++imgData->y; - return gTrue; -} - -GBool SplashOutputDev::alphaImageSrc(void *data, SplashColorPtr colorLine, - Guchar *alphaLine) { - SplashOutImageData *imgData = (SplashOutImageData *)data; - Guchar *p, *aq; - SplashColorPtr q, col; - GfxRGB rgb; - GfxGray gray; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - Guchar alpha; - int nComps, x, i; - - if (imgData->y == imgData->height) { - return gFalse; - } - - nComps = imgData->colorMap->getNumPixelComps(); - - for (x = 0, p = imgData->imgStr->getLine(), q = colorLine, aq = alphaLine; - x < imgData->width; - ++x, p += nComps) { - alpha = 0; - for (i = 0; i < nComps; ++i) { - if (p[i] < imgData->maskColors[2*i] || - p[i] > imgData->maskColors[2*i+1]) { - alpha = 0xff; - break; - } - } - if (imgData->lookup) { - switch (imgData->colorMode) { - case splashModeMono1: - case splashModeMono8: - *q++ = imgData->lookup[*p]; - *aq++ = alpha; - break; - case splashModeRGB8: - case splashModeBGR8: - col = &imgData->lookup[3 * *p]; - *q++ = col[0]; - *q++ = col[1]; - *q++ = col[2]; - *aq++ = alpha; - break; - case splashModeXBGR8: - col = &imgData->lookup[4 * *p]; - *q++ = col[0]; - *q++ = col[1]; - *q++ = col[2]; - *q++ = 255; - *aq++ = alpha; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - col = &imgData->lookup[4 * *p]; - *q++ = col[0]; - *q++ = col[1]; - *q++ = col[2]; - *q++ = col[3]; - *aq++ = alpha; - break; -#endif - } - } else { - switch (imgData->colorMode) { - case splashModeMono1: - case splashModeMono8: - imgData->colorMap->getGray(p, &gray); - *q++ = colToByte(gray); - *aq++ = alpha; - break; - case splashModeXBGR8: - case splashModeRGB8: - case splashModeBGR8: - imgData->colorMap->getRGB(p, &rgb); - *q++ = colToByte(rgb.r); - *q++ = colToByte(rgb.g); - *q++ = colToByte(rgb.b); - if (imgData->colorMode == splashModeXBGR8) *q++ = 255; - *aq++ = alpha; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - imgData->colorMap->getCMYK(p, &cmyk); - *q++ = colToByte(cmyk.c); - *q++ = colToByte(cmyk.m); - *q++ = colToByte(cmyk.y); - *q++ = colToByte(cmyk.k); - *aq++ = alpha; - break; -#endif - } - } - } - - ++imgData->y; - return gTrue; -} - -struct TilingSplashOutBitmap { - SplashBitmap *bitmap; - SplashPattern *pattern; - SplashColorMode colorMode; - int paintType; - int repeatX; - int repeatY; - int y; -}; - -GBool SplashOutputDev::tilingBitmapSrc(void *data, SplashColorPtr colorLine, - Guchar *alphaLine) { - TilingSplashOutBitmap *imgData = (TilingSplashOutBitmap *)data; - - if (imgData->y == imgData->bitmap->getHeight()) { - imgData->repeatY--; - if (imgData->repeatY == 0) - return gFalse; - imgData->y = 0; - } - - if (imgData->paintType == 1) { - const SplashColorMode cMode = imgData->bitmap->getMode(); - SplashColorPtr q = colorLine; - // For splashModeBGR8 and splashModeXBGR8 we need to use getPixel - // for the others we can use raw access - if (cMode == splashModeBGR8 || cMode == splashModeXBGR8) { - for (int m = 0; m < imgData->repeatX; m++) { - for (int x = 0; x < imgData->bitmap->getWidth(); x++) { - imgData->bitmap->getPixel(x, imgData->y, q); - q += splashColorModeNComps[cMode]; - } - } - } else { - const int n = imgData->bitmap->getRowSize(); - SplashColorPtr p; - for (int m = 0; m < imgData->repeatX; m++) { - p = imgData->bitmap->getDataPtr() + imgData->y * imgData->bitmap->getRowSize(); - for (int x = 0; x < n; ++x) { - *q++ = *p++; - } - } - } - if (alphaLine != NULL) { - SplashColorPtr aq = alphaLine; - SplashColorPtr p; - const int n = imgData->bitmap->getWidth() - 1; - for (int m = 0; m < imgData->repeatX; m++) { - p = imgData->bitmap->getAlphaPtr() + imgData->y * imgData->bitmap->getWidth(); - for (int x = 0; x < n; ++x) { - *aq++ = *p++; - } - // This is a hack, because of how Splash antialias works if we overwrite the - // last alpha pixel of the tile most/all of the files look much better - *aq++ = (n == 0) ? *p : *(p - 1); - } - } - } else { - SplashColor col, pat; - SplashColorPtr dest = colorLine; - for (int m = 0; m < imgData->repeatX; m++) { - for (int x = 0; x < imgData->bitmap->getWidth(); x++) { - imgData->bitmap->getPixel(x, imgData->y, col); - imgData->pattern->getColor(x, imgData->y, pat); - for (int i = 0; i < splashColorModeNComps[imgData->colorMode]; ++i) { -#if SPLASH_CMYK - if (imgData->colorMode == splashModeCMYK8) - dest[i] = div255(pat[i] * (255 - col[0])); - else -#endif - dest[i] = 255 - div255((255 - pat[i]) * (255 - col[0])); - } - dest += splashColorModeNComps[imgData->colorMode]; - } - } - if (alphaLine != NULL) { - const int y = (imgData->y == imgData->bitmap->getHeight() - 1 && imgData->y > 50) ? imgData->y - 1 : imgData->y; - SplashColorPtr aq = alphaLine; - SplashColorPtr p; - const int n = imgData->bitmap->getWidth(); - for (int m = 0; m < imgData->repeatX; m++) { - p = imgData->bitmap->getAlphaPtr() + y * imgData->bitmap->getWidth(); - for (int x = 0; x < n; ++x) { - *aq++ = *p++; - } - } - } - } - ++imgData->y; - return gTrue; -} - -void SplashOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - int *maskColors, GBool inlineImg) { - double *ctm; - SplashCoord mat[6]; - SplashOutImageData imgData; - SplashColorMode srcMode; - SplashColor defaultColor; - GfxColor srcColor; - SplashImageSource src; - GfxGray gray; - GfxRGB rgb; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - GBool grayIndexed = gFalse; - Guchar pix; - int n, i; - - ctm = state->getCTM(); - for (i = 0; i < 6; ++i) { - if (!isfinite(ctm[i])) return; - } - mat[0] = ctm[0]; - mat[1] = ctm[1]; - mat[2] = -ctm[2]; - mat[3] = -ctm[3]; - mat[4] = ctm[2] + ctm[4]; - mat[5] = ctm[3] + ctm[5]; - - imgData.imgStr = new ImageStream(str, width, - colorMap->getNumPixelComps(), - colorMap->getBits()); - imgData.imgStr->reset(); - imgData.colorMap = colorMap; - imgData.maskColors = maskColors; - imgData.colorMode = colorMode; - imgData.width = width; - imgData.height = height; - imgData.y = 0; - - // special case for one-channel (monochrome/gray/separation) images: - // build a lookup table here - imgData.lookup = NULL; - if (colorMap->getNumPixelComps() == 1) { - n = 1 << colorMap->getBits(); - switch (colorMode) { - case splashModeMono1: - case splashModeMono8: - imgData.lookup = (SplashColorPtr)gmalloc(n); - for (i = 0; i < n; ++i) { - pix = (Guchar)i; - colorMap->getGray(&pix, &gray); - imgData.lookup[i] = colToByte(gray); - } - break; - case splashModeRGB8: - case splashModeBGR8: - imgData.lookup = (SplashColorPtr)gmallocn(n, 3); - for (i = 0; i < n; ++i) { - pix = (Guchar)i; - colorMap->getRGB(&pix, &rgb); - imgData.lookup[3*i] = colToByte(rgb.r); - imgData.lookup[3*i+1] = colToByte(rgb.g); - imgData.lookup[3*i+2] = colToByte(rgb.b); - } - break; - case splashModeXBGR8: - imgData.lookup = (SplashColorPtr)gmallocn(n, 4); - for (i = 0; i < n; ++i) { - pix = (Guchar)i; - colorMap->getRGB(&pix, &rgb); - imgData.lookup[4*i] = colToByte(rgb.r); - imgData.lookup[4*i+1] = colToByte(rgb.g); - imgData.lookup[4*i+2] = colToByte(rgb.b); - imgData.lookup[4*i+3] = 255; - } - break; -#if SPLASH_CMYK - case splashModeCMYK8: - grayIndexed = colorMap->getColorSpace()->getMode() != csDeviceGray; - imgData.lookup = (SplashColorPtr)gmallocn(n, 4); - for (i = 0; i < n; ++i) { - pix = (Guchar)i; - colorMap->getCMYK(&pix, &cmyk); - if (cmyk.c != 0 || cmyk.m != 0 || cmyk.y != 0) { - grayIndexed = gFalse; - } - imgData.lookup[4*i] = colToByte(cmyk.c); - imgData.lookup[4*i+1] = colToByte(cmyk.m); - imgData.lookup[4*i+2] = colToByte(cmyk.y); - imgData.lookup[4*i+3] = colToByte(cmyk.k); - } -#ifndef USE_CMS - if (colorMap->getColorSpace()->getMode() == csIndexed) { - if (((GfxIndexedColorSpace *) colorMap->getColorSpace())->getBase()->getMode() == csICCBased) - grayIndexed = gFalse; - } -#endif - break; -#endif - break; - } - } - - if (colorMode == splashModeMono1) { - srcMode = splashModeMono8; - } else { - srcMode = colorMode; - } - src = maskColors ? &alphaImageSrc : &imageSrc; - colorMap->getColorSpace()->getDefaultColor(&srcColor); - convertGfxColor(defaultColor, srcMode, colorMap->getColorSpace(), &srcColor); - SplashPattern *pattern = createOverprintPattern(colorMap->getColorSpace(), defaultColor, !grayIndexed); - splash->drawImage(src, &imgData, srcMode, maskColors ? gTrue : gFalse, - width, height, mat, pattern); - delete pattern; - if (inlineImg) { - while (imgData.y < height) { - imgData.imgStr->getLine(); - ++imgData.y; - } - } - - gfree(imgData.lookup); - delete imgData.imgStr; - str->close(); -} - -struct SplashOutMaskedImageData { - ImageStream *imgStr; - GfxImageColorMap *colorMap; - SplashBitmap *mask; - SplashColorPtr lookup; - SplashColorMode colorMode; - int width, height, y; -}; - -GBool SplashOutputDev::maskedImageSrc(void *data, SplashColorPtr colorLine, - Guchar *alphaLine) { - SplashOutMaskedImageData *imgData = (SplashOutMaskedImageData *)data; - Guchar *p, *aq; - SplashColor maskColor; - SplashColorPtr q, col; - GfxRGB rgb; - GfxGray gray; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - Guchar alpha; - int nComps, x; - - if (imgData->y == imgData->height) { - return gFalse; - } - - nComps = imgData->colorMap->getNumPixelComps(); - - for (x = 0, p = imgData->imgStr->getLine(), q = colorLine, aq = alphaLine; - x < imgData->width; - ++x, p += nComps) { - imgData->mask->getPixel(x, imgData->y, maskColor); - alpha = maskColor[0] ? 0xff : 0x00; - if (imgData->lookup) { - switch (imgData->colorMode) { - case splashModeMono1: - case splashModeMono8: - *q++ = imgData->lookup[*p]; - *aq++ = alpha; - break; - case splashModeRGB8: - case splashModeBGR8: - col = &imgData->lookup[3 * *p]; - *q++ = col[0]; - *q++ = col[1]; - *q++ = col[2]; - *aq++ = alpha; - break; - case splashModeXBGR8: - col = &imgData->lookup[4 * *p]; - *q++ = col[0]; - *q++ = col[1]; - *q++ = col[2]; - *q++ = 255; - *aq++ = alpha; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - col = &imgData->lookup[4 * *p]; - *q++ = col[0]; - *q++ = col[1]; - *q++ = col[2]; - *q++ = col[3]; - *aq++ = alpha; - break; -#endif - } - } else { - switch (imgData->colorMode) { - case splashModeMono1: - case splashModeMono8: - imgData->colorMap->getGray(p, &gray); - *q++ = colToByte(gray); - *aq++ = alpha; - break; - case splashModeXBGR8: - case splashModeRGB8: - case splashModeBGR8: - imgData->colorMap->getRGB(p, &rgb); - *q++ = colToByte(rgb.r); - *q++ = colToByte(rgb.g); - *q++ = colToByte(rgb.b); - if (imgData->colorMode == splashModeXBGR8) *q++ = 255; - *aq++ = alpha; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - imgData->colorMap->getCMYK(p, &cmyk); - *q++ = colToByte(cmyk.c); - *q++ = colToByte(cmyk.m); - *q++ = colToByte(cmyk.y); - *q++ = colToByte(cmyk.k); - *aq++ = alpha; - break; -#endif - } - } - } - - ++imgData->y; - return gTrue; -} - -void SplashOutputDev::drawMaskedImage(GfxState *state, Object *ref, - Stream *str, int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, int maskWidth, - int maskHeight, GBool maskInvert, - GBool maskInterpolate) { - GfxImageColorMap *maskColorMap; - Object maskDecode, decodeLow, decodeHigh; - double *ctm; - SplashCoord mat[6]; - SplashOutMaskedImageData imgData; - SplashOutImageMaskData imgMaskData; - SplashColorMode srcMode; - SplashBitmap *maskBitmap; - Splash *maskSplash; - SplashColor maskColor; - GfxGray gray; - GfxRGB rgb; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - Guchar pix; - int n, i; - - // If the mask is higher resolution than the image, use - // drawSoftMaskedImage() instead. - if (maskWidth > width || maskHeight > height) { - decodeLow.initInt(maskInvert ? 0 : 1); - decodeHigh.initInt(maskInvert ? 1 : 0); - maskDecode.initArray(xref); - maskDecode.arrayAdd(&decodeLow); - maskDecode.arrayAdd(&decodeHigh); - maskColorMap = new GfxImageColorMap(1, &maskDecode, - new GfxDeviceGrayColorSpace()); - maskDecode.free(); - drawSoftMaskedImage(state, ref, str, width, height, colorMap, interpolate, - maskStr, maskWidth, maskHeight, maskColorMap, maskInterpolate); - delete maskColorMap; - - } else { - SplashColor defaultColor; - GfxColor srcColor; - - //----- scale the mask image to the same size as the source image - - mat[0] = (SplashCoord)width; - mat[1] = 0; - mat[2] = 0; - mat[3] = (SplashCoord)height; - mat[4] = 0; - mat[5] = 0; - imgMaskData.imgStr = new ImageStream(maskStr, maskWidth, 1, 1); - imgMaskData.imgStr->reset(); - imgMaskData.invert = maskInvert ? 0 : 1; - imgMaskData.width = maskWidth; - imgMaskData.height = maskHeight; - imgMaskData.y = 0; - maskBitmap = new SplashBitmap(width, height, 1, splashModeMono1, gFalse); - maskSplash = new Splash(maskBitmap, gFalse); - maskColor[0] = 0; - maskSplash->clear(maskColor); - maskColor[0] = 0xff; - maskSplash->setFillPattern(new SplashSolidColor(maskColor)); - maskSplash->fillImageMask(&imageMaskSrc, &imgMaskData, - maskWidth, maskHeight, mat, gFalse); - delete imgMaskData.imgStr; - maskStr->close(); - delete maskSplash; - - //----- draw the source image - - ctm = state->getCTM(); - for (i = 0; i < 6; ++i) { - if (!isfinite(ctm[i])) { - delete maskBitmap; - return; - } - } - mat[0] = ctm[0]; - mat[1] = ctm[1]; - mat[2] = -ctm[2]; - mat[3] = -ctm[3]; - mat[4] = ctm[2] + ctm[4]; - mat[5] = ctm[3] + ctm[5]; - - imgData.imgStr = new ImageStream(str, width, - colorMap->getNumPixelComps(), - colorMap->getBits()); - imgData.imgStr->reset(); - imgData.colorMap = colorMap; - imgData.mask = maskBitmap; - imgData.colorMode = colorMode; - imgData.width = width; - imgData.height = height; - imgData.y = 0; - - // special case for one-channel (monochrome/gray/separation) images: - // build a lookup table here - imgData.lookup = NULL; - if (colorMap->getNumPixelComps() == 1) { - n = 1 << colorMap->getBits(); - switch (colorMode) { - case splashModeMono1: - case splashModeMono8: - imgData.lookup = (SplashColorPtr)gmalloc(n); - for (i = 0; i < n; ++i) { - pix = (Guchar)i; - colorMap->getGray(&pix, &gray); - imgData.lookup[i] = colToByte(gray); - } - break; - case splashModeRGB8: - case splashModeBGR8: - imgData.lookup = (SplashColorPtr)gmallocn(n, 3); - for (i = 0; i < n; ++i) { - pix = (Guchar)i; - colorMap->getRGB(&pix, &rgb); - imgData.lookup[3*i] = colToByte(rgb.r); - imgData.lookup[3*i+1] = colToByte(rgb.g); - imgData.lookup[3*i+2] = colToByte(rgb.b); - } - break; - case splashModeXBGR8: - imgData.lookup = (SplashColorPtr)gmallocn(n, 4); - for (i = 0; i < n; ++i) { - pix = (Guchar)i; - colorMap->getRGB(&pix, &rgb); - imgData.lookup[4*i] = colToByte(rgb.r); - imgData.lookup[4*i+1] = colToByte(rgb.g); - imgData.lookup[4*i+2] = colToByte(rgb.b); - imgData.lookup[4*i+3] = 255; - } - break; -#if SPLASH_CMYK - case splashModeCMYK8: - imgData.lookup = (SplashColorPtr)gmallocn(n, 4); - for (i = 0; i < n; ++i) { - pix = (Guchar)i; - colorMap->getCMYK(&pix, &cmyk); - imgData.lookup[4*i] = colToByte(cmyk.c); - imgData.lookup[4*i+1] = colToByte(cmyk.m); - imgData.lookup[4*i+2] = colToByte(cmyk.y); - imgData.lookup[4*i+3] = colToByte(cmyk.k); - } - break; -#endif - } - } - - if (colorMode == splashModeMono1) { - srcMode = splashModeMono8; - } else { - srcMode = colorMode; - } - colorMap->getColorSpace()->getDefaultColor(&srcColor); - convertGfxColor(defaultColor, srcMode, colorMap->getColorSpace(), &srcColor); - SplashPattern *pattern = createOverprintPattern(colorMap->getColorSpace(), defaultColor, gTrue); - splash->drawImage(&maskedImageSrc, &imgData, srcMode, gTrue, - width, height, mat, pattern); - delete pattern; - delete maskBitmap; - gfree(imgData.lookup); - delete imgData.imgStr; - str->close(); - } -} - -void SplashOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, - Stream *str, int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap, - GBool maskInterpolate) { - double *ctm; - SplashCoord mat[6]; - SplashOutImageData imgData; - SplashOutImageData imgMaskData; - SplashColorMode srcMode; - SplashBitmap *maskBitmap; - Splash *maskSplash; - SplashColor maskColor; - SplashColor defaultColor; - GfxColor srcColor; - GfxGray gray; - GfxRGB rgb; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - Guchar pix; - int n, i; - - ctm = state->getCTM(); - for (i = 0; i < 6; ++i) { - if (!isfinite(ctm[i])) return; - } - mat[0] = ctm[0]; - mat[1] = ctm[1]; - mat[2] = -ctm[2]; - mat[3] = -ctm[3]; - mat[4] = ctm[2] + ctm[4]; - mat[5] = ctm[3] + ctm[5]; - - //----- set up the soft mask - - imgMaskData.imgStr = new ImageStream(maskStr, maskWidth, - maskColorMap->getNumPixelComps(), - maskColorMap->getBits()); - imgMaskData.imgStr->reset(); - imgMaskData.colorMap = maskColorMap; - imgMaskData.maskColors = NULL; - imgMaskData.colorMode = splashModeMono8; - imgMaskData.width = maskWidth; - imgMaskData.height = maskHeight; - imgMaskData.y = 0; - n = 1 << maskColorMap->getBits(); - imgMaskData.lookup = (SplashColorPtr)gmalloc(n); - for (i = 0; i < n; ++i) { - pix = (Guchar)i; - maskColorMap->getGray(&pix, &gray); - imgMaskData.lookup[i] = colToByte(gray); - } - maskBitmap = new SplashBitmap(bitmap->getWidth(), bitmap->getHeight(), - 1, splashModeMono8, gFalse); - maskSplash = new Splash(maskBitmap, vectorAntialias); - maskColor[0] = 0; - maskSplash->clear(maskColor); - maskSplash->drawImage(&imageSrc, &imgMaskData, splashModeMono8, gFalse, - maskWidth, maskHeight, mat); - delete imgMaskData.imgStr; - maskStr->close(); - gfree(imgMaskData.lookup); - delete maskSplash; - splash->setSoftMask(maskBitmap); - - //----- draw the source image - - imgData.imgStr = new ImageStream(str, width, - colorMap->getNumPixelComps(), - colorMap->getBits()); - imgData.imgStr->reset(); - imgData.colorMap = colorMap; - imgData.maskColors = NULL; - imgData.colorMode = colorMode; - imgData.width = width; - imgData.height = height; - imgData.y = 0; - - // special case for one-channel (monochrome/gray/separation) images: - // build a lookup table here - imgData.lookup = NULL; - if (colorMap->getNumPixelComps() == 1) { - n = 1 << colorMap->getBits(); - switch (colorMode) { - case splashModeMono1: - case splashModeMono8: - imgData.lookup = (SplashColorPtr)gmalloc(n); - for (i = 0; i < n; ++i) { - pix = (Guchar)i; - colorMap->getGray(&pix, &gray); - imgData.lookup[i] = colToByte(gray); - } - break; - case splashModeRGB8: - case splashModeBGR8: - imgData.lookup = (SplashColorPtr)gmallocn(n, 3); - for (i = 0; i < n; ++i) { - pix = (Guchar)i; - colorMap->getRGB(&pix, &rgb); - imgData.lookup[3*i] = colToByte(rgb.r); - imgData.lookup[3*i+1] = colToByte(rgb.g); - imgData.lookup[3*i+2] = colToByte(rgb.b); - } - break; - case splashModeXBGR8: - imgData.lookup = (SplashColorPtr)gmallocn(n, 4); - for (i = 0; i < n; ++i) { - pix = (Guchar)i; - colorMap->getRGB(&pix, &rgb); - imgData.lookup[4*i] = colToByte(rgb.r); - imgData.lookup[4*i+1] = colToByte(rgb.g); - imgData.lookup[4*i+2] = colToByte(rgb.b); - imgData.lookup[4*i+3] = 255; - } - break; -#if SPLASH_CMYK - case splashModeCMYK8: - imgData.lookup = (SplashColorPtr)gmallocn(n, 4); - for (i = 0; i < n; ++i) { - pix = (Guchar)i; - colorMap->getCMYK(&pix, &cmyk); - imgData.lookup[4*i] = colToByte(cmyk.c); - imgData.lookup[4*i+1] = colToByte(cmyk.m); - imgData.lookup[4*i+2] = colToByte(cmyk.y); - imgData.lookup[4*i+3] = colToByte(cmyk.k); - } - break; -#endif - } - } - - if (colorMode == splashModeMono1) { - srcMode = splashModeMono8; - } else { - srcMode = colorMode; - } - - colorMap->getColorSpace()->getDefaultColor(&srcColor); - convertGfxColor(defaultColor, srcMode, colorMap->getColorSpace(), &srcColor); - SplashPattern *pattern = createOverprintPattern(colorMap->getColorSpace(), defaultColor, gTrue); - splash->drawImage(&imageSrc, &imgData, srcMode, gFalse, width, height, mat, pattern); - delete pattern; - splash->setSoftMask(NULL); - gfree(imgData.lookup); - delete imgData.imgStr; - str->close(); -} - -void SplashOutputDev::beginTransparencyGroup(GfxState *state, double *bbox, - GfxColorSpace *blendingColorSpace, - GBool isolated, GBool /*knockout*/, - GBool /*forSoftMask*/) { - SplashTransparencyGroup *transpGroup; - SplashColor color; - double xMin, yMin, xMax, yMax, x, y; - int tx, ty, w, h; - - // transform the bbox - state->transform(bbox[0], bbox[1], &x, &y); - xMin = xMax = x; - yMin = yMax = y; - state->transform(bbox[0], bbox[3], &x, &y); - if (x < xMin) { - xMin = x; - } else if (x > xMax) { - xMax = x; - } - if (y < yMin) { - yMin = y; - } else if (y > yMax) { - yMax = y; - } - state->transform(bbox[2], bbox[1], &x, &y); - if (x < xMin) { - xMin = x; - } else if (x > xMax) { - xMax = x; - } - if (y < yMin) { - yMin = y; - } else if (y > yMax) { - yMax = y; - } - state->transform(bbox[2], bbox[3], &x, &y); - if (x < xMin) { - xMin = x; - } else if (x > xMax) { - xMax = x; - } - if (y < yMin) { - yMin = y; - } else if (y > yMax) { - yMax = y; - } - tx = (int)floor(xMin); - if (tx < 0) { - tx = 0; - } else if (tx >= bitmap->getWidth()) { - tx = bitmap->getWidth() - 1; - } - ty = (int)floor(yMin); - if (ty < 0) { - ty = 0; - } else if (ty >= bitmap->getHeight()) { - ty = bitmap->getHeight() - 1; - } - w = (int)ceil(xMax) - tx + 1; - if (tx + w > bitmap->getWidth()) { - w = bitmap->getWidth() - tx; - } - if (w < 1) { - w = 1; - } - h = (int)ceil(yMax) - ty + 1; - if (ty + h > bitmap->getHeight()) { - h = bitmap->getHeight() - ty; - } - if (h < 1) { - h = 1; - } - - // push a new stack entry - transpGroup = new SplashTransparencyGroup(); - transpGroup->tx = tx; - transpGroup->ty = ty; - transpGroup->blendingColorSpace = blendingColorSpace; - transpGroup->isolated = isolated; - transpGroup->next = transpGroupStack; - transpGroupStack = transpGroup; - - // save state - transpGroup->origBitmap = bitmap; - transpGroup->origSplash = splash; - - //~ this ignores the blendingColorSpace arg - - // create the temporary bitmap - bitmap = new SplashBitmap(w, h, bitmapRowPad, colorMode, gTrue, - bitmapTopDown); - splash = new Splash(bitmap, vectorAntialias, - transpGroup->origSplash->getScreen()); - if (isolated) { - switch (colorMode) { - case splashModeMono1: - case splashModeMono8: - color[0] = 0; - break; - case splashModeXBGR8: - color[3] = 255; - case splashModeRGB8: - case splashModeBGR8: - color[0] = color[1] = color[2] = 0; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - color[0] = color[1] = color[2] = color[3] = 0; - break; -#endif - default: - // make gcc happy - break; - } - splash->clear(color, 0); - } else { - splash->blitTransparent(transpGroup->origBitmap, tx, ty, 0, 0, w, h); - splash->setInNonIsolatedGroup(transpGroup->origBitmap, tx, ty); - } - transpGroup->tBitmap = bitmap; - state->shiftCTM(-tx, -ty); - updateCTM(state, 0, 0, 0, 0, 0, 0); -} - -void SplashOutputDev::endTransparencyGroup(GfxState *state) { - // restore state - delete splash; - bitmap = transpGroupStack->origBitmap; - splash = transpGroupStack->origSplash; - state->shiftCTM(transpGroupStack->tx, transpGroupStack->ty); - updateCTM(state, 0, 0, 0, 0, 0, 0); -} - -void SplashOutputDev::paintTransparencyGroup(GfxState * /*state*/, double * /*bbox*/) { - SplashBitmap *tBitmap; - SplashTransparencyGroup *transpGroup; - GBool isolated; - int tx, ty; - - tx = transpGroupStack->tx; - ty = transpGroupStack->ty; - tBitmap = transpGroupStack->tBitmap; - isolated = transpGroupStack->isolated; - - // paint the transparency group onto the parent bitmap - // - the clip path was set in the parent's state) - splash->composite(tBitmap, 0, 0, tx, ty, - tBitmap->getWidth(), tBitmap->getHeight(), - gFalse, !isolated); - - // pop the stack - transpGroup = transpGroupStack; - transpGroupStack = transpGroup->next; - delete transpGroup; - - delete tBitmap; -} - -void SplashOutputDev::setSoftMask(GfxState * /*state*/, double * /*bbox*/, - GBool alpha, Function *transferFunc, - GfxColor *backdropColor) { - SplashBitmap *softMask, *tBitmap; - Splash *tSplash; - SplashTransparencyGroup *transpGroup; - SplashColor color; - SplashColorPtr p; - GfxGray gray; - GfxRGB rgb; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - double lum, lum2; - int tx, ty, x, y; - - tx = transpGroupStack->tx; - ty = transpGroupStack->ty; - tBitmap = transpGroupStack->tBitmap; - - // composite with backdrop color - if (!alpha && colorMode != splashModeMono1) { - //~ need to correctly handle the case where no blending color - //~ space is given - if (transpGroupStack->blendingColorSpace) { - tSplash = new Splash(tBitmap, vectorAntialias, - transpGroupStack->origSplash->getScreen()); - switch (colorMode) { - case splashModeMono1: - // transparency is not supported in mono1 mode - break; - case splashModeMono8: - transpGroupStack->blendingColorSpace->getGray(backdropColor, &gray); - color[0] = colToByte(gray); - tSplash->compositeBackground(color); - break; - case splashModeXBGR8: - color[3] = 255; - case splashModeRGB8: - case splashModeBGR8: - transpGroupStack->blendingColorSpace->getRGB(backdropColor, &rgb); - color[0] = colToByte(rgb.r); - color[1] = colToByte(rgb.g); - color[2] = colToByte(rgb.b); - tSplash->compositeBackground(color); - break; -#if SPLASH_CMYK - case splashModeCMYK8: - transpGroupStack->blendingColorSpace->getCMYK(backdropColor, &cmyk); - color[0] = colToByte(cmyk.c); - color[1] = colToByte(cmyk.m); - color[2] = colToByte(cmyk.y); - color[3] = colToByte(cmyk.k); - tSplash->compositeBackground(color); - break; -#endif - } - delete tSplash; - } - } - - softMask = new SplashBitmap(bitmap->getWidth(), bitmap->getHeight(), - 1, splashModeMono8, gFalse); - unsigned char fill = 0; - if (transpGroupStack->blendingColorSpace) { - transpGroupStack->blendingColorSpace->getGray(backdropColor, &gray); - fill = colToByte(gray); - } - memset(softMask->getDataPtr(), fill, - softMask->getRowSize() * softMask->getHeight()); - p = softMask->getDataPtr() + ty * softMask->getRowSize() + tx; - int xMax = tBitmap->getWidth(); - int yMax = tBitmap->getHeight(); - if (xMax + tx > bitmap->getWidth()) xMax = bitmap->getWidth() - tx; - if (yMax + ty > bitmap->getHeight()) yMax = bitmap->getHeight() - ty; - for (y = 0; y < yMax; ++y) { - for (x = 0; x < xMax; ++x) { - if (alpha) { - p[x] = tBitmap->getAlpha(x, y); - } else { - tBitmap->getPixel(x, y, color); - // convert to luminosity - switch (colorMode) { - case splashModeMono1: - case splashModeMono8: - lum = color[0] / 255.0; - break; - case splashModeXBGR8: - case splashModeRGB8: - case splashModeBGR8: - lum = (0.3 / 255.0) * color[0] + - (0.59 / 255.0) * color[1] + - (0.11 / 255.0) * color[2]; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - lum = (1 - color[3] / 255.0) - - (0.3 / 255.0) * color[0] - - (0.59 / 255.0) * color[1] - - (0.11 / 255.0) * color[2]; - if (lum < 0) { - lum = 0; - } - break; -#endif - } - if (transferFunc) { - transferFunc->transform(&lum, &lum2); - } else { - lum2 = lum; - } - p[x] = (int)(lum2 * 255.0 + 0.5); - } - } - p += softMask->getRowSize(); - } - splash->setSoftMask(softMask); - - // pop the stack - transpGroup = transpGroupStack; - transpGroupStack = transpGroup->next; - delete transpGroup; - - delete tBitmap; -} - -void SplashOutputDev::clearSoftMask(GfxState * /*state*/) { - splash->setSoftMask(NULL); -} - -void SplashOutputDev::setPaperColor(SplashColorPtr paperColorA) { - splashColorCopy(paperColor, paperColorA); -} - -int SplashOutputDev::getBitmapWidth() { - return bitmap->getWidth(); -} - -int SplashOutputDev::getBitmapHeight() { - return bitmap->getHeight(); -} - -SplashBitmap *SplashOutputDev::takeBitmap() { - SplashBitmap *ret; - - ret = bitmap; - bitmap = new SplashBitmap(1, 1, bitmapRowPad, colorMode, - colorMode != splashModeMono1, bitmapTopDown); - return ret; -} - -void SplashOutputDev::getModRegion(int *xMin, int *yMin, - int *xMax, int *yMax) { - splash->getModRegion(xMin, yMin, xMax, yMax); -} - -void SplashOutputDev::clearModRegion() { - splash->clearModRegion(); -} - -#if 1 //~tmp: turn off anti-aliasing temporarily -GBool SplashOutputDev::getVectorAntialias() { - return splash->getVectorAntialias(); -} - -void SplashOutputDev::setVectorAntialias(GBool vaa) { - vectorAntialias = vaa; - splash->setVectorAntialias(vaa); -} -#endif - -void SplashOutputDev::setFreeTypeHinting(GBool enable, GBool enableSlightHintingA) -{ - enableFreeTypeHinting = enable; - enableSlightHinting = enableSlightHintingA; -} - -GBool SplashOutputDev::tilingPatternFill(GfxState *state, Catalog *catalog, Object *str, - double *ptm, int paintType, int /*tilingType*/, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep) -{ - PDFRectangle box; - Gfx *gfx; - Splash *formerSplash = splash; - SplashBitmap *formerBitmap = bitmap; - double width, height; - int surface_width, surface_height, result_width, result_height, i; - int repeatX, repeatY; - SplashCoord matc[6]; - Matrix m1; - double *ctm, savedCTM[6]; - double kx, ky, sx, sy; - - width = bbox[2] - bbox[0]; - height = bbox[3] - bbox[1]; - - if (xStep != width || yStep != height) - return gFalse; - - // calculate offsets - ctm = state->getCTM(); - for (i = 0; i < 6; ++i) { - savedCTM[i] = ctm[i]; - } - state->concatCTM(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]); - state->concatCTM(1, 0, 0, 1, bbox[0], bbox[1]); - ctm = state->getCTM(); - for (i = 0; i < 6; ++i) { - if (!isfinite(ctm[i])) - return gFalse; - } - matc[4] = x0 * xStep * ctm[0] + y0 * yStep * ctm[2] + ctm[4]; - matc[5] = x0 * xStep * ctm[1] + y0 * yStep * ctm[3] + ctm[5]; - if (splashAbs(ctm[1]) > splashAbs(ctm[0])) { - kx = -ctm[1]; - ky = ctm[2] - (ctm[0] * ctm[3]) / ctm[1]; - } else { - kx = ctm[0]; - ky = ctm[3] - (ctm[1] * ctm[2]) / ctm[0]; - } - result_width = (int) ceil(fabs(kx * width * (x1 - x0))); - result_height = (int) ceil(fabs(ky * height * (y1 - y0))); - kx = state->getHDPI() / 72.0; - ky = state->getVDPI() / 72.0; - m1.m[0] = (ptm[0] == 0) ? fabs(ptm[2]) * kx : fabs(ptm[0]) * kx; - m1.m[1] = 0; - m1.m[2] = 0; - m1.m[3] = (ptm[3] == 0) ? fabs(ptm[1]) * ky : fabs(ptm[3]) * ky; - m1.m[4] = 0; - m1.m[5] = 0; - m1.transform(width, height, &kx, &ky); - surface_width = (int) ceil (fabs(kx)); - surface_height = (int) ceil (fabs(ky)); - - sx = (double) result_width / (surface_width * (x1 - x0)); - sy = (double) result_height / (surface_height * (y1 - y0)); - m1.m[0] *= sx; - m1.m[3] *= sy; - m1.transform(width, height, &kx, &ky); - - if(fabs(kx) < 1 && fabs(ky) < 1) { - kx = std::min<double>(kx, ky); - ky = 2 / kx; - m1.m[0] *= ky; - m1.m[3] *= ky; - m1.transform(width, height, &kx, &ky); - surface_width = (int) ceil (fabs(kx)); - surface_height = (int) ceil (fabs(ky)); - repeatX = x1 - x0; - repeatY = y1 - y0; - } else { - while(fabs(kx) > 16384 || fabs(ky) > 16384) { - // limit pattern bitmap size - m1.m[0] /= 2; - m1.m[3] /= 2; - m1.transform(width, height, &kx, &ky); - } - surface_width = (int) ceil (fabs(kx)); - surface_height = (int) ceil (fabs(ky)); - // adjust repeat values to completely fill region - repeatX = result_width / surface_width; - repeatY = result_height / surface_height; - if (surface_width * repeatX < result_width) - repeatX++; - if (surface_height * repeatY < result_height) - repeatY++; - if (x1 - x0 > repeatX) - repeatX = x1 - x0; - if (y1 - y0 > repeatY) - repeatY = y1 - y0; - } - // restore CTM and calculate rotate and scale with rounded matric - state->setCTM(savedCTM[0], savedCTM[1], savedCTM[2], savedCTM[3], savedCTM[4], savedCTM[5]); - state->concatCTM(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]); - state->concatCTM(width * repeatX, 0, 0, height * repeatY, bbox[0], bbox[1]); - ctm = state->getCTM(); - matc[0] = ctm[0]; - matc[1] = ctm[1]; - matc[2] = ctm[2]; - matc[3] = ctm[3]; - - if (surface_width == 0 || surface_height == 0) - return gFalse; - m1.transform(bbox[0], bbox[1], &kx, &ky); - m1.m[4] = -kx; - m1.m[5] = -ky; - - bitmap = new SplashBitmap(surface_width, surface_height, colorMode != splashModeMono1, - (paintType == 1) ? colorMode : splashModeMono8, gTrue); - memset(bitmap->getAlphaPtr(), 0, bitmap->getWidth() * bitmap->getHeight()); - if (paintType == 2) { -#if SPLASH_CMYK - memset(bitmap->getDataPtr(), (colorMode == splashModeCMYK8) ? 0x00 : 0xFF, bitmap->getRowSize() * bitmap->getHeight()); -#else - memset(bitmap->getDataPtr(), 0xFF, bitmap->getRowSize() * bitmap->getHeight()); -#endif - } - splash = new Splash(bitmap, gTrue); - - box.x1 = bbox[0]; box.y1 = bbox[1]; - box.x2 = bbox[2]; box.y2 = bbox[3]; - gfx = new Gfx(xref, this, resDict, catalog, &box, NULL); - // set pattern transformation matrix - gfx->getState()->setCTM(m1.m[0], m1.m[1], m1.m[2], m1.m[3], m1.m[4], m1.m[5]); - updateCTM(gfx->getState(), m1.m[0], m1.m[1], m1.m[2], m1.m[3], m1.m[4], m1.m[5]); - gfx->display(str); - splash = formerSplash; - TilingSplashOutBitmap imgData; - imgData.bitmap = bitmap; - imgData.paintType = paintType; - imgData.pattern = splash->getFillPattern(); - imgData.colorMode = colorMode; - imgData.y = 0; - imgData.repeatX = repeatX; - imgData.repeatY = repeatY; - SplashBitmap *tBitmap = bitmap; - bitmap = formerBitmap; - result_width = tBitmap->getWidth() * imgData.repeatX; - result_height = tBitmap->getHeight() * imgData.repeatY; - - if (splashAbs(matc[1]) > splashAbs(matc[0])) { - kx = -matc[1]; - ky = matc[2] - (matc[0] * matc[3]) / matc[1]; - } else { - kx = matc[0]; - ky = matc[3] - (matc[1] * matc[2]) / matc[0]; - } - kx = result_width / (fabs(kx) + 1); - ky = result_height / (fabs(ky) + 1); - state->concatCTM(kx, 0, 0, ky, 0, 0); - ctm = state->getCTM(); - matc[0] = ctm[0]; - matc[1] = ctm[1]; - matc[2] = ctm[2]; - matc[3] = ctm[3]; - splash->drawImage(&tilingBitmapSrc, &imgData, colorMode, gTrue, result_width, result_height, matc); - delete tBitmap; - delete gfx; - return gTrue; -} - -GBool SplashOutputDev::gouraudTriangleShadedFill(GfxState *state, GfxGouraudTriangleShading *shading) -{ - GfxColorSpaceMode shadingMode = shading->getColorSpace()->getMode(); - GBool bDirectColorTranslation = gFalse; // triggers an optimization. - switch (colorMode) { - case splashModeRGB8: - bDirectColorTranslation = (shadingMode == csDeviceRGB); - break; -#if SPLASH_CMYK - case splashModeCMYK8: - bDirectColorTranslation = (shadingMode == csDeviceCMYK); - break; -#endif - default: - break; - } - SplashGouraudColor *splashShading = new SplashGouraudPattern(bDirectColorTranslation, state, shading, colorMode); - // restore vector antialias because we support it here - if (shading->isParameterized()) { - GBool vaa = getVectorAntialias(); - GBool retVal = gFalse; - setVectorAntialias(gTrue); - retVal = splash->gouraudTriangleShadedFill(splashShading); - setVectorAntialias(vaa); - return retVal; - } - return gFalse; -} - -GBool SplashOutputDev::univariateShadedFill(GfxState *state, SplashUnivariatePattern *pattern, double tMin, double tMax) { - double xMin, yMin, xMax, yMax; - SplashPath *path; - GBool vaa = getVectorAntialias(); - // restore vector antialias because we support it here - setVectorAntialias(gTrue); - - GBool retVal = gFalse; - // get the clip region bbox - if (pattern->getShading()->getHasBBox()) { - pattern->getShading()->getBBox(&xMin, &yMin, &xMax, &yMax); - } else { - state->getClipBBox(&xMin, &yMin, &xMax, &yMax); - - xMin = floor (xMin); - yMin = floor (yMin); - xMax = ceil (xMax); - yMax = ceil (yMax); - - { - Matrix ctm, ictm; - double x[4], y[4]; - int i; - - state->getCTM(&ctm); - ctm.invertTo(&ictm); - - ictm.transform(xMin, yMin, &x[0], &y[0]); - ictm.transform(xMax, yMin, &x[1], &y[1]); - ictm.transform(xMin, yMax, &x[2], &y[2]); - ictm.transform(xMax, yMax, &x[3], &y[3]); - - xMin = xMax = x[0]; - yMin = yMax = y[0]; - for (i = 1; i < 4; i++) { - xMin = std::min<double>(xMin, x[i]); - yMin = std::min<double>(yMin, y[i]); - xMax = std::max<double>(xMax, x[i]); - yMax = std::max<double>(yMax, y[i]); - } - } - } - - // fill the region - state->moveTo(xMin, yMin); - state->lineTo(xMax, yMin); - state->lineTo(xMax, yMax); - state->lineTo(xMin, yMax); - state->closePath(); - path = convertPath(state, state->getPath()); - - retVal = (splash->shadedFill(path, pattern->getShading()->getHasBBox(), pattern) == splashOk); - state->clearPath(); - setVectorAntialias(vaa); - delete path; - - return retVal; -} - -GBool SplashOutputDev::axialShadedFill(GfxState *state, GfxAxialShading *shading, double tMin, double tMax) { - SplashAxialPattern *pattern = new SplashAxialPattern(colorMode, state, shading); - GBool retVal = univariateShadedFill(state, pattern, tMin, tMax); - - delete pattern; - - return retVal; -} - -GBool SplashOutputDev::radialShadedFill(GfxState *state, GfxRadialShading *shading, double tMin, double tMax) { - SplashRadialPattern *pattern = new SplashRadialPattern(colorMode, state, shading); - GBool retVal = univariateShadedFill(state, pattern, tMin, tMax); - - delete pattern; - - return retVal; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/SplashOutputDev.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/SplashOutputDev.h deleted file mode 100644 index f19c5425874..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/SplashOutputDev.h +++ /dev/null @@ -1,440 +0,0 @@ -//======================================================================== -// -// SplashOutputDev.h -// -// Copyright 2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Takashi Iwai <tiwai@suse.de> -// Copyright (C) 2009-2011 Thomas Freitag <Thomas.Freitag@alfa.de> -// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> -// Copyright (C) 2011 Andreas Hartmetz <ahartmetz@gmail.com> -// Copyright (C) 2011 Andrea Canciani <ranma42@gmail.com> -// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef SPLASHOUTPUTDEV_H -#define SPLASHOUTPUTDEV_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include "splash/SplashTypes.h" -#include "splash/SplashPattern.h" -#include "poppler-config.h" -#include "OutputDev.h" -#include "GfxState.h" - -class Gfx8BitFont; -class SplashBitmap; -class Splash; -class SplashPath; -class SplashFontEngine; -class SplashFont; -class T3FontCache; -struct T3FontCacheTag; -struct T3GlyphStack; -struct SplashTransparencyGroup; - -//------------------------------------------------------------------------ -// SplashOverprintColor -//------------------------------------------------------------------------ - -class SplashOverprintColor: public SplashPattern { -public: - SplashOverprintColor(GfxColorSpace *colorSpace, SplashColorPtr colorA, Guchar tolerance); - - virtual SplashPattern *copy() { return new SplashOverprintColor(colorSpace, color, tolerance); } - - virtual ~SplashOverprintColor(); - - virtual GBool getColor(int x, int y, SplashColorPtr c); - - virtual GBool testPosition(int x, int y) { return gFalse; } - - virtual GBool isStatic() { return gTrue; } - - virtual void overprint(GBool op, Guchar alphaSrc, SplashColorPtr colorSrc, - Guchar alphaDest, SplashColorPtr colorDest, SplashColorPtr colorResult); - -private: - GfxColorSpace *colorSpace; - SplashColor color; - Guchar tolerance; -}; - -//------------------------------------------------------------------------ -// Splash dynamic pattern -//------------------------------------------------------------------------ - -class SplashUnivariatePattern: public SplashPattern { -public: - - SplashUnivariatePattern(SplashColorMode colorMode, GfxState *state, GfxUnivariateShading *shading); - - virtual ~SplashUnivariatePattern(); - - virtual GBool getColor(int x, int y, SplashColorPtr c); - - virtual GBool testPosition(int x, int y); - - virtual GBool isStatic() { return gFalse; } - - virtual GBool getParameter(double xs, double ys, double *t) = 0; - - virtual GfxUnivariateShading *getShading() { return shading; } - -protected: - Matrix ictm; - double t0, t1, dt; - GfxUnivariateShading *shading; - GfxState *state; - SplashColorMode colorMode; -}; - -class SplashAxialPattern: public SplashUnivariatePattern { -public: - - SplashAxialPattern(SplashColorMode colorMode, GfxState *state, GfxAxialShading *shading); - - virtual SplashPattern *copy() { return new SplashAxialPattern(colorMode, state, (GfxAxialShading *) shading); } - - virtual ~SplashAxialPattern(); - - virtual GBool getParameter(double xs, double ys, double *t); - - virtual void overprint(GBool op, Guchar alphaSrc, SplashColorPtr colorSrc, - Guchar alphaDest, SplashColorPtr colorDest, SplashColorPtr colorResult); - -private: - double x0, y0, x1, y1; - double dx, dy, mul; - SplashOverprintColor *opPattern; -}; - -// see GfxState.h, GfxGouraudTriangleShading -class SplashGouraudPattern: public SplashGouraudColor { -public: - - SplashGouraudPattern(GBool bDirectColorTranslation, GfxState *state, GfxGouraudTriangleShading *shading, SplashColorMode mode); - - virtual SplashPattern *copy() { return new SplashGouraudPattern(bDirectColorTranslation, state, shading, mode); } - - virtual ~SplashGouraudPattern(); - - virtual GBool getColor(int x, int y, SplashColorPtr c) { return gFalse; } - - virtual GBool testPosition(int x, int y) { return gFalse; } - - virtual GBool isStatic() { return gFalse; } - - virtual GBool isParameterized() { return shading->isParameterized(); } - virtual int getNTriangles() { return shading->getNTriangles(); } - virtual void getTriangle(int i, double *x0, double *y0, double *color0, - double *x1, double *y1, double *color1, - double *x2, double *y2, double *color2) - { return shading->getTriangle(i, x0, y0, color0, x1, y1, color1, x2, y2, color2); } - - virtual void getParameterizedColor(double t, SplashColorMode mode, SplashColorPtr c); - - virtual void overprint(GBool op, Guchar alphaSrc, SplashColorPtr colorSrc, - Guchar alphaDest, SplashColorPtr colorDest, SplashColorPtr colorResult); -private: - GfxGouraudTriangleShading *shading; - GfxState *state; - GBool bDirectColorTranslation; - SplashOverprintColor *opPattern; - SplashColorMode mode; -}; - -// see GfxState.h, GfxRadialShading -class SplashRadialPattern: public SplashUnivariatePattern { -public: - - SplashRadialPattern(SplashColorMode colorMode, GfxState *state, GfxRadialShading *shading); - - virtual SplashPattern *copy() { return new SplashRadialPattern(colorMode, state, (GfxRadialShading *) shading); } - - virtual ~SplashRadialPattern(); - - virtual GBool getParameter(double xs, double ys, double *t); - - virtual void overprint(GBool op, Guchar alphaSrc, SplashColorPtr colorSrc, - Guchar alphaDest, SplashColorPtr colorDest, SplashColorPtr colorResult); - -private: - double x0, y0, r0, dx, dy, dr; - double a, inva; - SplashOverprintColor *opPattern; -}; - -//------------------------------------------------------------------------ - -// number of Type 3 fonts to cache -#define splashOutT3FontCacheSize 8 - -//------------------------------------------------------------------------ -// SplashOutputDev -//------------------------------------------------------------------------ - -class SplashOutputDev: public OutputDev { -public: - - // Constructor. - SplashOutputDev(SplashColorMode colorModeA, int bitmapRowPadA, - GBool reverseVideoA, SplashColorPtr paperColorA, - GBool bitmapTopDownA = gTrue, - GBool allowAntialiasA = gTrue); - - // Destructor. - virtual ~SplashOutputDev(); - - //----- get info about output device - - // Does this device use tilingPatternFill()? If this returns false, - // tiling pattern fills will be reduced to a series of other drawing - // operations. - virtual GBool useTilingPatternFill() { return gTrue; } - - // Does this device use functionShadedFill(), axialShadedFill(), and - // radialShadedFill()? If this returns false, these shaded fills - // will be reduced to a series of other drawing operations. - virtual GBool useShadedFills(int type) - { return (type >= 2 && type <= 5) ? gTrue : gFalse; } - - // Does this device use upside-down coordinates? - // (Upside-down means (0,0) is the top left corner of the page.) - virtual GBool upsideDown() { return gTrue; } - - // Does this device use drawChar() or drawString()? - virtual GBool useDrawChar() { return gTrue; } - - // Does this device use beginType3Char/endType3Char? Otherwise, - // text in Type 3 fonts will be drawn with drawChar/drawString. - virtual GBool interpretType3Chars() { return gTrue; } - - // This device now supports text in pattern colorspace! - virtual GBool supportTextCSPattern(GfxState *state) - { return state->getFillColorSpace()->getMode() == csPattern; } - - //----- initialization and control - - // Start a page. - virtual void startPage(int pageNum, GfxState *state); - - // End a page. - virtual void endPage(); - - //----- save/restore graphics state - virtual void saveState(GfxState *state); - virtual void restoreState(GfxState *state); - - //----- update graphics state - virtual void updateAll(GfxState *state); - virtual void updateCTM(GfxState *state, double m11, double m12, - double m21, double m22, double m31, double m32); - virtual void updateLineDash(GfxState *state); - virtual void updateFlatness(GfxState *state); - virtual void updateLineJoin(GfxState *state); - virtual void updateLineCap(GfxState *state); - virtual void updateMiterLimit(GfxState *state); - virtual void updateLineWidth(GfxState *state); - virtual void updateStrokeAdjust(GfxState *state); - virtual void updateFillColor(GfxState *state); - virtual void updateStrokeColor(GfxState *state); - virtual void updateBlendMode(GfxState *state); - virtual void updateFillOpacity(GfxState *state); - virtual void updateStrokeOpacity(GfxState *state); - virtual void updateFillOverprint(GfxState *state); - virtual void updateStrokeOverprint(GfxState *state); - virtual void updateOverprintMode(GfxState *state); - - //----- update text state - virtual void updateFont(GfxState *state); - - //----- path painting - virtual void stroke(GfxState *state); - virtual void fill(GfxState *state); - virtual void eoFill(GfxState *state); - virtual GBool tilingPatternFill(GfxState *state, Catalog *catalog, Object *str, - double *pmat, int paintType, int tilingType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep); - virtual GBool axialShadedFill(GfxState *state, GfxAxialShading *shading, double tMin, double tMax); - virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *shading, double tMin, double tMax); - virtual GBool gouraudTriangleShadedFill(GfxState *state, GfxGouraudTriangleShading *shading); - - //----- path clipping - virtual void clip(GfxState *state); - virtual void eoClip(GfxState *state); - virtual void clipToStrokePath(GfxState *state); - - //----- text drawing - virtual void drawChar(GfxState *state, double x, double y, - double dx, double dy, - double originX, double originY, - CharCode code, int nBytes, Unicode *u, int uLen); - virtual GBool beginType3Char(GfxState *state, double x, double y, - double dx, double dy, - CharCode code, Unicode *u, int uLen); - virtual void endType3Char(GfxState *state); - virtual void beginTextObject(GfxState *state); - virtual GBool deviceHasTextClip(GfxState *state) { return textClipPath && haveCSPattern; } - virtual void endTextObject(GfxState *state); - - //----- image drawing - virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool interpolate, GBool inlineImg); - virtual void drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - GBool interpolate, int *maskColors, GBool inlineImg); - virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, int maskWidth, int maskHeight, - GBool maskInvert, GBool maskInterpolate); - virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - GBool interpolate, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap, - GBool maskInterpolate); - // If current colorspace ist pattern, - // need this device special handling for masks in pattern colorspace? - // Default is false - virtual GBool fillMaskCSPattern(GfxState * state) - { return state->getFillColorSpace()->getMode() == csPattern; } - virtual void endMaskClip(GfxState * /*state*/); - - //----- Type 3 font operators - virtual void type3D0(GfxState *state, double wx, double wy); - virtual void type3D1(GfxState *state, double wx, double wy, - double llx, double lly, double urx, double ury); - - //----- transparency groups and soft masks - virtual void beginTransparencyGroup(GfxState *state, double *bbox, - GfxColorSpace *blendingColorSpace, - GBool isolated, GBool knockout, - GBool forSoftMask); - virtual void endTransparencyGroup(GfxState *state); - virtual void paintTransparencyGroup(GfxState *state, double *bbox); - virtual void setSoftMask(GfxState *state, double *bbox, GBool alpha, - Function *transferFunc, GfxColor *backdropColor); - virtual void clearSoftMask(GfxState *state); - - //----- special access - - // Called to indicate that a new PDF document has been loaded. - void startDoc(XRef *xrefA); - - void setPaperColor(SplashColorPtr paperColorA); - - GBool isReverseVideo() { return reverseVideo; } - void setReverseVideo(GBool reverseVideoA) { reverseVideo = reverseVideoA; } - - // Get the bitmap and its size. - SplashBitmap *getBitmap() { return bitmap; } - int getBitmapWidth(); - int getBitmapHeight(); - - // Returns the last rasterized bitmap, transferring ownership to the - // caller. - SplashBitmap *takeBitmap(); - - // Get the Splash object. - Splash *getSplash() { return splash; } - - // Get the modified region. - void getModRegion(int *xMin, int *yMin, int *xMax, int *yMax); - - // Clear the modified region. - void clearModRegion(); - - SplashFont *getCurrentFont() { return font; } - -#if 1 //~tmp: turn off anti-aliasing temporarily - virtual GBool getVectorAntialias(); - virtual void setVectorAntialias(GBool vaa); -#endif - - void setFreeTypeHinting(GBool enable, GBool enableSlightHinting); - -private: - GBool univariateShadedFill(GfxState *state, SplashUnivariatePattern *pattern, double tMin, double tMax); - - void setupScreenParams(double hDPI, double vDPI); -#if SPLASH_CMYK - SplashPattern *getColor(GfxColorSpace *colorSpace, GfxGray gray, GfxRGB *rgb, GfxCMYK *cmyk); -#else - SplashPattern *getColor(GfxGray gray, GfxRGB *rgb); -#endif - SplashPath *convertPath(GfxState *state, GfxPath *path); - void doUpdateFont(GfxState *state); - void drawType3Glyph(T3FontCache *t3Font, - T3FontCacheTag *tag, Guchar *data); - static GBool imageMaskSrc(void *data, SplashColorPtr line); - static GBool imageSrc(void *data, SplashColorPtr colorLine, - Guchar *alphaLine); - static GBool alphaImageSrc(void *data, SplashColorPtr line, - Guchar *alphaLine); - static GBool maskedImageSrc(void *data, SplashColorPtr line, - Guchar *alphaLine); - static GBool tilingBitmapSrc(void *data, SplashColorPtr line, - Guchar *alphaLine); - - GBool haveCSPattern; // set if text has been drawn with a - // clipping render mode because of pattern colorspace - GBool keepAlphaChannel; // don't fill with paper color, keep alpha channel - - SplashColorMode colorMode; - int bitmapRowPad; - GBool bitmapTopDown; - GBool allowAntialias; - GBool vectorAntialias; - GBool enableFreeTypeHinting; - GBool enableSlightHinting; - GBool reverseVideo; // reverse video mode - SplashColor paperColor; // paper color - SplashScreenParams screenParams; - - XRef *xref; // xref table for current document - - SplashBitmap *bitmap; - Splash *splash; - SplashFontEngine *fontEngine; - - T3FontCache * // Type 3 font cache - t3FontCache[splashOutT3FontCacheSize]; - int nT3Fonts; // number of valid entries in t3FontCache - T3GlyphStack *t3GlyphStack; // Type 3 glyph context stack - - SplashFont *font; // current font - GBool needFontUpdate; // set when the font needs to be updated - SplashPath *textClipPath; // clipping path built with text object - - SplashTransparencyGroup * // transparency group stack - transpGroupStack; - SplashBitmap *maskBitmap; // for image masks in pattern colorspace -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/StdinCachedFile.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/StdinCachedFile.cc deleted file mode 100644 index db966377bb0..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/StdinCachedFile.cc +++ /dev/null @@ -1,47 +0,0 @@ -//======================================================================== -// -// StdinCachedFile.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// Copyright 2010 Jonathan Liu <net147@gmail.com> -// -//======================================================================== - -#include <config.h> - -#include "StdinCachedFile.h" - -#ifdef _WIN32 -#include <fcntl.h> // for O_BINARY -#include <io.h> // for setmode -#endif -#include <stdio.h> - -size_t StdinCacheLoader::init(GooString *dummy, CachedFile *cachedFile) -{ - size_t read, size = 0; - char buf[CachedFileChunkSize]; - -#ifdef _WIN32 - setmode(fileno(stdin), O_BINARY); -#endif - - CachedFileWriter writer = CachedFileWriter (cachedFile, NULL); - do { - read = fread(buf, 1, CachedFileChunkSize, stdin); - (writer.write) (buf, CachedFileChunkSize); - size += read; - } - while (read == CachedFileChunkSize); - - return size; -} - -int StdinCacheLoader::load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer) -{ - return 0; -} - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/StdinCachedFile.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/StdinCachedFile.h deleted file mode 100644 index 5be6fa841a3..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/StdinCachedFile.h +++ /dev/null @@ -1,27 +0,0 @@ -//======================================================================== -// -// StdinCachedFile.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#ifndef STDINCACHELOADER_H -#define STDINCACHELOADER_H - -#include "CachedFile.h" - -class StdinCacheLoader : public CachedFileLoader { - -public: - - size_t init(GooString *dummy, CachedFile* cachedFile); - int load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer); - -}; - -#endif - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/StdinPDFDocBuilder.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/StdinPDFDocBuilder.cc deleted file mode 100644 index 571ee46d7f6..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/StdinPDFDocBuilder.cc +++ /dev/null @@ -1,43 +0,0 @@ -//======================================================================== -// -// StdinPDFDocBuilder.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#include <config.h> - -#include "StdinPDFDocBuilder.h" -#include "CachedFile.h" -#include "StdinCachedFile.h" - -//------------------------------------------------------------------------ -// StdinPDFDocBuilder -//------------------------------------------------------------------------ - -PDFDoc * -StdinPDFDocBuilder::buildPDFDoc(const GooString &uri, GooString *ownerPassword, - GooString *userPassword, void *guiDataA) -{ - Object obj; - - obj.initNull(); - CachedFile *cachedFile = new CachedFile(new StdinCacheLoader(), NULL); - return new PDFDoc(new CachedFileStream(cachedFile, 0, gFalse, - cachedFile->getLength(), &obj), - ownerPassword, userPassword); -} - -GBool StdinPDFDocBuilder::supports(const GooString &uri) -{ - if (uri.cmpN("fd://0", 6) == 0) { - return gTrue; - } else { - return gFalse; - } -} - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/StdinPDFDocBuilder.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/StdinPDFDocBuilder.h deleted file mode 100644 index e9b2f47f636..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/StdinPDFDocBuilder.h +++ /dev/null @@ -1,33 +0,0 @@ -//======================================================================== -// -// StdinPDFDocBuilder.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// Copyright 2010 Albert Astals Cid <aacid@kde.org> -// -//======================================================================== - -#ifndef STDINPDFDOCBUILDER_H -#define STDINPDFDOCBUILDER_H - -#include "PDFDocBuilder.h" - -//------------------------------------------------------------------------ -// StdinPDFDocBuilder -// -// The StdinPDFDocBuilder implements a PDFDocBuilder that read from stdin. -//------------------------------------------------------------------------ - -class StdinPDFDocBuilder : public PDFDocBuilder { - -public: - - PDFDoc *buildPDFDoc(const GooString &uri, GooString *ownerPassword = NULL, - GooString *userPassword = NULL, void *guiDataA = NULL); - GBool supports(const GooString &uri); - -}; - -#endif /* STDINPDFDOCBUILDER_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Stream-CCITT.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Stream-CCITT.h deleted file mode 100644 index 43405b67751..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Stream-CCITT.h +++ /dev/null @@ -1,473 +0,0 @@ -//======================================================================== -// -// Stream-CCITT.h -// -// Tables for CCITT Fax decoding. -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -struct CCITTCode { - short bits; - short n; -}; - -#define ccittEOL -2 - -//------------------------------------------------------------------------ -// 2D codes -//------------------------------------------------------------------------ - -#define twoDimPass 0 -#define twoDimHoriz 1 -#define twoDimVert0 2 -#define twoDimVertR1 3 -#define twoDimVertL1 4 -#define twoDimVertR2 5 -#define twoDimVertL2 6 -#define twoDimVertR3 7 -#define twoDimVertL3 8 - -// 1-7 bit codes -static const CCITTCode twoDimTab1[128] = { - {-1, -1}, {-1, -1}, // 000000x - {7, twoDimVertL3}, // 0000010 - {7, twoDimVertR3}, // 0000011 - {6, twoDimVertL2}, {6, twoDimVertL2}, // 000010x - {6, twoDimVertR2}, {6, twoDimVertR2}, // 000011x - {4, twoDimPass}, {4, twoDimPass}, // 0001xxx - {4, twoDimPass}, {4, twoDimPass}, - {4, twoDimPass}, {4, twoDimPass}, - {4, twoDimPass}, {4, twoDimPass}, - {3, twoDimHoriz}, {3, twoDimHoriz}, // 001xxxx - {3, twoDimHoriz}, {3, twoDimHoriz}, - {3, twoDimHoriz}, {3, twoDimHoriz}, - {3, twoDimHoriz}, {3, twoDimHoriz}, - {3, twoDimHoriz}, {3, twoDimHoriz}, - {3, twoDimHoriz}, {3, twoDimHoriz}, - {3, twoDimHoriz}, {3, twoDimHoriz}, - {3, twoDimHoriz}, {3, twoDimHoriz}, - {3, twoDimVertL1}, {3, twoDimVertL1}, // 010xxxx - {3, twoDimVertL1}, {3, twoDimVertL1}, - {3, twoDimVertL1}, {3, twoDimVertL1}, - {3, twoDimVertL1}, {3, twoDimVertL1}, - {3, twoDimVertL1}, {3, twoDimVertL1}, - {3, twoDimVertL1}, {3, twoDimVertL1}, - {3, twoDimVertL1}, {3, twoDimVertL1}, - {3, twoDimVertL1}, {3, twoDimVertL1}, - {3, twoDimVertR1}, {3, twoDimVertR1}, // 011xxxx - {3, twoDimVertR1}, {3, twoDimVertR1}, - {3, twoDimVertR1}, {3, twoDimVertR1}, - {3, twoDimVertR1}, {3, twoDimVertR1}, - {3, twoDimVertR1}, {3, twoDimVertR1}, - {3, twoDimVertR1}, {3, twoDimVertR1}, - {3, twoDimVertR1}, {3, twoDimVertR1}, - {3, twoDimVertR1}, {3, twoDimVertR1}, - {1, twoDimVert0}, {1, twoDimVert0}, // 1xxxxxx - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0}, - {1, twoDimVert0}, {1, twoDimVert0} -}; - -//------------------------------------------------------------------------ -// white run lengths -//------------------------------------------------------------------------ - -// 11-12 bit codes (upper 7 bits are 0) -static const CCITTCode whiteTab1[32] = { - {-1, -1}, // 00000 - {12, ccittEOL}, // 00001 - {-1, -1}, {-1, -1}, // 0001x - {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 001xx - {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 010xx - {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 011xx - {11, 1792}, {11, 1792}, // 1000x - {12, 1984}, // 10010 - {12, 2048}, // 10011 - {12, 2112}, // 10100 - {12, 2176}, // 10101 - {12, 2240}, // 10110 - {12, 2304}, // 10111 - {11, 1856}, {11, 1856}, // 1100x - {11, 1920}, {11, 1920}, // 1101x - {12, 2368}, // 11100 - {12, 2432}, // 11101 - {12, 2496}, // 11110 - {12, 2560} // 11111 -}; - -// 1-9 bit codes -static const CCITTCode whiteTab2[512] = { - {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 0000000xx - {8, 29}, {8, 29}, // 00000010x - {8, 30}, {8, 30}, // 00000011x - {8, 45}, {8, 45}, // 00000100x - {8, 46}, {8, 46}, // 00000101x - {7, 22}, {7, 22}, {7, 22}, {7, 22}, // 0000011xx - {7, 23}, {7, 23}, {7, 23}, {7, 23}, // 0000100xx - {8, 47}, {8, 47}, // 00001010x - {8, 48}, {8, 48}, // 00001011x - {6, 13}, {6, 13}, {6, 13}, {6, 13}, // 000011xxx - {6, 13}, {6, 13}, {6, 13}, {6, 13}, - {7, 20}, {7, 20}, {7, 20}, {7, 20}, // 0001000xx - {8, 33}, {8, 33}, // 00010010x - {8, 34}, {8, 34}, // 00010011x - {8, 35}, {8, 35}, // 00010100x - {8, 36}, {8, 36}, // 00010101x - {8, 37}, {8, 37}, // 00010110x - {8, 38}, {8, 38}, // 00010111x - {7, 19}, {7, 19}, {7, 19}, {7, 19}, // 0001100xx - {8, 31}, {8, 31}, // 00011010x - {8, 32}, {8, 32}, // 00011011x - {6, 1}, {6, 1}, {6, 1}, {6, 1}, // 000111xxx - {6, 1}, {6, 1}, {6, 1}, {6, 1}, - {6, 12}, {6, 12}, {6, 12}, {6, 12}, // 001000xxx - {6, 12}, {6, 12}, {6, 12}, {6, 12}, - {8, 53}, {8, 53}, // 00100100x - {8, 54}, {8, 54}, // 00100101x - {7, 26}, {7, 26}, {7, 26}, {7, 26}, // 0010011xx - {8, 39}, {8, 39}, // 00101000x - {8, 40}, {8, 40}, // 00101001x - {8, 41}, {8, 41}, // 00101010x - {8, 42}, {8, 42}, // 00101011x - {8, 43}, {8, 43}, // 00101100x - {8, 44}, {8, 44}, // 00101101x - {7, 21}, {7, 21}, {7, 21}, {7, 21}, // 0010111xx - {7, 28}, {7, 28}, {7, 28}, {7, 28}, // 0011000xx - {8, 61}, {8, 61}, // 00110010x - {8, 62}, {8, 62}, // 00110011x - {8, 63}, {8, 63}, // 00110100x - {8, 0}, {8, 0}, // 00110101x - {8, 320}, {8, 320}, // 00110110x - {8, 384}, {8, 384}, // 00110111x - {5, 10}, {5, 10}, {5, 10}, {5, 10}, // 00111xxxx - {5, 10}, {5, 10}, {5, 10}, {5, 10}, - {5, 10}, {5, 10}, {5, 10}, {5, 10}, - {5, 10}, {5, 10}, {5, 10}, {5, 10}, - {5, 11}, {5, 11}, {5, 11}, {5, 11}, // 01000xxxx - {5, 11}, {5, 11}, {5, 11}, {5, 11}, - {5, 11}, {5, 11}, {5, 11}, {5, 11}, - {5, 11}, {5, 11}, {5, 11}, {5, 11}, - {7, 27}, {7, 27}, {7, 27}, {7, 27}, // 0100100xx - {8, 59}, {8, 59}, // 01001010x - {8, 60}, {8, 60}, // 01001011x - {9, 1472}, // 010011000 - {9, 1536}, // 010011001 - {9, 1600}, // 010011010 - {9, 1728}, // 010011011 - {7, 18}, {7, 18}, {7, 18}, {7, 18}, // 0100111xx - {7, 24}, {7, 24}, {7, 24}, {7, 24}, // 0101000xx - {8, 49}, {8, 49}, // 01010010x - {8, 50}, {8, 50}, // 01010011x - {8, 51}, {8, 51}, // 01010100x - {8, 52}, {8, 52}, // 01010101x - {7, 25}, {7, 25}, {7, 25}, {7, 25}, // 0101011xx - {8, 55}, {8, 55}, // 01011000x - {8, 56}, {8, 56}, // 01011001x - {8, 57}, {8, 57}, // 01011010x - {8, 58}, {8, 58}, // 01011011x - {6, 192}, {6, 192}, {6, 192}, {6, 192}, // 010111xxx - {6, 192}, {6, 192}, {6, 192}, {6, 192}, - {6, 1664}, {6, 1664}, {6, 1664}, {6, 1664}, // 011000xxx - {6, 1664}, {6, 1664}, {6, 1664}, {6, 1664}, - {8, 448}, {8, 448}, // 01100100x - {8, 512}, {8, 512}, // 01100101x - {9, 704}, // 011001100 - {9, 768}, // 011001101 - {8, 640}, {8, 640}, // 01100111x - {8, 576}, {8, 576}, // 01101000x - {9, 832}, // 011010010 - {9, 896}, // 011010011 - {9, 960}, // 011010100 - {9, 1024}, // 011010101 - {9, 1088}, // 011010110 - {9, 1152}, // 011010111 - {9, 1216}, // 011011000 - {9, 1280}, // 011011001 - {9, 1344}, // 011011010 - {9, 1408}, // 011011011 - {7, 256}, {7, 256}, {7, 256}, {7, 256}, // 0110111xx - {4, 2}, {4, 2}, {4, 2}, {4, 2}, // 0111xxxxx - {4, 2}, {4, 2}, {4, 2}, {4, 2}, - {4, 2}, {4, 2}, {4, 2}, {4, 2}, - {4, 2}, {4, 2}, {4, 2}, {4, 2}, - {4, 2}, {4, 2}, {4, 2}, {4, 2}, - {4, 2}, {4, 2}, {4, 2}, {4, 2}, - {4, 2}, {4, 2}, {4, 2}, {4, 2}, - {4, 2}, {4, 2}, {4, 2}, {4, 2}, - {4, 3}, {4, 3}, {4, 3}, {4, 3}, // 1000xxxxx - {4, 3}, {4, 3}, {4, 3}, {4, 3}, - {4, 3}, {4, 3}, {4, 3}, {4, 3}, - {4, 3}, {4, 3}, {4, 3}, {4, 3}, - {4, 3}, {4, 3}, {4, 3}, {4, 3}, - {4, 3}, {4, 3}, {4, 3}, {4, 3}, - {4, 3}, {4, 3}, {4, 3}, {4, 3}, - {4, 3}, {4, 3}, {4, 3}, {4, 3}, - {5, 128}, {5, 128}, {5, 128}, {5, 128}, // 10010xxxx - {5, 128}, {5, 128}, {5, 128}, {5, 128}, - {5, 128}, {5, 128}, {5, 128}, {5, 128}, - {5, 128}, {5, 128}, {5, 128}, {5, 128}, - {5, 8}, {5, 8}, {5, 8}, {5, 8}, // 10011xxxx - {5, 8}, {5, 8}, {5, 8}, {5, 8}, - {5, 8}, {5, 8}, {5, 8}, {5, 8}, - {5, 8}, {5, 8}, {5, 8}, {5, 8}, - {5, 9}, {5, 9}, {5, 9}, {5, 9}, // 10100xxxx - {5, 9}, {5, 9}, {5, 9}, {5, 9}, - {5, 9}, {5, 9}, {5, 9}, {5, 9}, - {5, 9}, {5, 9}, {5, 9}, {5, 9}, - {6, 16}, {6, 16}, {6, 16}, {6, 16}, // 101010xxx - {6, 16}, {6, 16}, {6, 16}, {6, 16}, - {6, 17}, {6, 17}, {6, 17}, {6, 17}, // 101011xxx - {6, 17}, {6, 17}, {6, 17}, {6, 17}, - {4, 4}, {4, 4}, {4, 4}, {4, 4}, // 1011xxxxx - {4, 4}, {4, 4}, {4, 4}, {4, 4}, - {4, 4}, {4, 4}, {4, 4}, {4, 4}, - {4, 4}, {4, 4}, {4, 4}, {4, 4}, - {4, 4}, {4, 4}, {4, 4}, {4, 4}, - {4, 4}, {4, 4}, {4, 4}, {4, 4}, - {4, 4}, {4, 4}, {4, 4}, {4, 4}, - {4, 4}, {4, 4}, {4, 4}, {4, 4}, - {4, 5}, {4, 5}, {4, 5}, {4, 5}, // 1100xxxxx - {4, 5}, {4, 5}, {4, 5}, {4, 5}, - {4, 5}, {4, 5}, {4, 5}, {4, 5}, - {4, 5}, {4, 5}, {4, 5}, {4, 5}, - {4, 5}, {4, 5}, {4, 5}, {4, 5}, - {4, 5}, {4, 5}, {4, 5}, {4, 5}, - {4, 5}, {4, 5}, {4, 5}, {4, 5}, - {4, 5}, {4, 5}, {4, 5}, {4, 5}, - {6, 14}, {6, 14}, {6, 14}, {6, 14}, // 110100xxx - {6, 14}, {6, 14}, {6, 14}, {6, 14}, - {6, 15}, {6, 15}, {6, 15}, {6, 15}, // 110101xxx - {6, 15}, {6, 15}, {6, 15}, {6, 15}, - {5, 64}, {5, 64}, {5, 64}, {5, 64}, // 11011xxxx - {5, 64}, {5, 64}, {5, 64}, {5, 64}, - {5, 64}, {5, 64}, {5, 64}, {5, 64}, - {5, 64}, {5, 64}, {5, 64}, {5, 64}, - {4, 6}, {4, 6}, {4, 6}, {4, 6}, // 1110xxxxx - {4, 6}, {4, 6}, {4, 6}, {4, 6}, - {4, 6}, {4, 6}, {4, 6}, {4, 6}, - {4, 6}, {4, 6}, {4, 6}, {4, 6}, - {4, 6}, {4, 6}, {4, 6}, {4, 6}, - {4, 6}, {4, 6}, {4, 6}, {4, 6}, - {4, 6}, {4, 6}, {4, 6}, {4, 6}, - {4, 6}, {4, 6}, {4, 6}, {4, 6}, - {4, 7}, {4, 7}, {4, 7}, {4, 7}, // 1111xxxxx - {4, 7}, {4, 7}, {4, 7}, {4, 7}, - {4, 7}, {4, 7}, {4, 7}, {4, 7}, - {4, 7}, {4, 7}, {4, 7}, {4, 7}, - {4, 7}, {4, 7}, {4, 7}, {4, 7}, - {4, 7}, {4, 7}, {4, 7}, {4, 7}, - {4, 7}, {4, 7}, {4, 7}, {4, 7}, - {4, 7}, {4, 7}, {4, 7}, {4, 7} -}; - -//------------------------------------------------------------------------ -// black run lengths -//------------------------------------------------------------------------ - -// 10-13 bit codes (upper 6 bits are 0) -static const CCITTCode blackTab1[128] = { - {-1, -1}, {-1, -1}, // 000000000000x - {12, ccittEOL}, {12, ccittEOL}, // 000000000001x - {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000001xx - {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000010xx - {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000011xx - {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000100xx - {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000101xx - {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000110xx - {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000111xx - {11, 1792}, {11, 1792}, {11, 1792}, {11, 1792}, // 00000001000xx - {12, 1984}, {12, 1984}, // 000000010010x - {12, 2048}, {12, 2048}, // 000000010011x - {12, 2112}, {12, 2112}, // 000000010100x - {12, 2176}, {12, 2176}, // 000000010101x - {12, 2240}, {12, 2240}, // 000000010110x - {12, 2304}, {12, 2304}, // 000000010111x - {11, 1856}, {11, 1856}, {11, 1856}, {11, 1856}, // 00000001100xx - {11, 1920}, {11, 1920}, {11, 1920}, {11, 1920}, // 00000001101xx - {12, 2368}, {12, 2368}, // 000000011100x - {12, 2432}, {12, 2432}, // 000000011101x - {12, 2496}, {12, 2496}, // 000000011110x - {12, 2560}, {12, 2560}, // 000000011111x - {10, 18}, {10, 18}, {10, 18}, {10, 18}, // 0000001000xxx - {10, 18}, {10, 18}, {10, 18}, {10, 18}, - {12, 52}, {12, 52}, // 000000100100x - {13, 640}, // 0000001001010 - {13, 704}, // 0000001001011 - {13, 768}, // 0000001001100 - {13, 832}, // 0000001001101 - {12, 55}, {12, 55}, // 000000100111x - {12, 56}, {12, 56}, // 000000101000x - {13, 1280}, // 0000001010010 - {13, 1344}, // 0000001010011 - {13, 1408}, // 0000001010100 - {13, 1472}, // 0000001010101 - {12, 59}, {12, 59}, // 000000101011x - {12, 60}, {12, 60}, // 000000101100x - {13, 1536}, // 0000001011010 - {13, 1600}, // 0000001011011 - {11, 24}, {11, 24}, {11, 24}, {11, 24}, // 00000010111xx - {11, 25}, {11, 25}, {11, 25}, {11, 25}, // 00000011000xx - {13, 1664}, // 0000001100100 - {13, 1728}, // 0000001100101 - {12, 320}, {12, 320}, // 000000110011x - {12, 384}, {12, 384}, // 000000110100x - {12, 448}, {12, 448}, // 000000110101x - {13, 512}, // 0000001101100 - {13, 576}, // 0000001101101 - {12, 53}, {12, 53}, // 000000110111x - {12, 54}, {12, 54}, // 000000111000x - {13, 896}, // 0000001110010 - {13, 960}, // 0000001110011 - {13, 1024}, // 0000001110100 - {13, 1088}, // 0000001110101 - {13, 1152}, // 0000001110110 - {13, 1216}, // 0000001110111 - {10, 64}, {10, 64}, {10, 64}, {10, 64}, // 0000001111xxx - {10, 64}, {10, 64}, {10, 64}, {10, 64} -}; - -// 7-12 bit codes (upper 4 bits are 0) -static const CCITTCode blackTab2[192] = { - {8, 13}, {8, 13}, {8, 13}, {8, 13}, // 00000100xxxx - {8, 13}, {8, 13}, {8, 13}, {8, 13}, - {8, 13}, {8, 13}, {8, 13}, {8, 13}, - {8, 13}, {8, 13}, {8, 13}, {8, 13}, - {11, 23}, {11, 23}, // 00000101000x - {12, 50}, // 000001010010 - {12, 51}, // 000001010011 - {12, 44}, // 000001010100 - {12, 45}, // 000001010101 - {12, 46}, // 000001010110 - {12, 47}, // 000001010111 - {12, 57}, // 000001011000 - {12, 58}, // 000001011001 - {12, 61}, // 000001011010 - {12, 256}, // 000001011011 - {10, 16}, {10, 16}, {10, 16}, {10, 16}, // 0000010111xx - {10, 17}, {10, 17}, {10, 17}, {10, 17}, // 0000011000xx - {12, 48}, // 000001100100 - {12, 49}, // 000001100101 - {12, 62}, // 000001100110 - {12, 63}, // 000001100111 - {12, 30}, // 000001101000 - {12, 31}, // 000001101001 - {12, 32}, // 000001101010 - {12, 33}, // 000001101011 - {12, 40}, // 000001101100 - {12, 41}, // 000001101101 - {11, 22}, {11, 22}, // 00000110111x - {8, 14}, {8, 14}, {8, 14}, {8, 14}, // 00000111xxxx - {8, 14}, {8, 14}, {8, 14}, {8, 14}, - {8, 14}, {8, 14}, {8, 14}, {8, 14}, - {8, 14}, {8, 14}, {8, 14}, {8, 14}, - {7, 10}, {7, 10}, {7, 10}, {7, 10}, // 0000100xxxxx - {7, 10}, {7, 10}, {7, 10}, {7, 10}, - {7, 10}, {7, 10}, {7, 10}, {7, 10}, - {7, 10}, {7, 10}, {7, 10}, {7, 10}, - {7, 10}, {7, 10}, {7, 10}, {7, 10}, - {7, 10}, {7, 10}, {7, 10}, {7, 10}, - {7, 10}, {7, 10}, {7, 10}, {7, 10}, - {7, 10}, {7, 10}, {7, 10}, {7, 10}, - {7, 11}, {7, 11}, {7, 11}, {7, 11}, // 0000101xxxxx - {7, 11}, {7, 11}, {7, 11}, {7, 11}, - {7, 11}, {7, 11}, {7, 11}, {7, 11}, - {7, 11}, {7, 11}, {7, 11}, {7, 11}, - {7, 11}, {7, 11}, {7, 11}, {7, 11}, - {7, 11}, {7, 11}, {7, 11}, {7, 11}, - {7, 11}, {7, 11}, {7, 11}, {7, 11}, - {7, 11}, {7, 11}, {7, 11}, {7, 11}, - {9, 15}, {9, 15}, {9, 15}, {9, 15}, // 000011000xxx - {9, 15}, {9, 15}, {9, 15}, {9, 15}, - {12, 128}, // 000011001000 - {12, 192}, // 000011001001 - {12, 26}, // 000011001010 - {12, 27}, // 000011001011 - {12, 28}, // 000011001100 - {12, 29}, // 000011001101 - {11, 19}, {11, 19}, // 00001100111x - {11, 20}, {11, 20}, // 00001101000x - {12, 34}, // 000011010010 - {12, 35}, // 000011010011 - {12, 36}, // 000011010100 - {12, 37}, // 000011010101 - {12, 38}, // 000011010110 - {12, 39}, // 000011010111 - {11, 21}, {11, 21}, // 00001101100x - {12, 42}, // 000011011010 - {12, 43}, // 000011011011 - {10, 0}, {10, 0}, {10, 0}, {10, 0}, // 0000110111xx - {7, 12}, {7, 12}, {7, 12}, {7, 12}, // 0000111xxxxx - {7, 12}, {7, 12}, {7, 12}, {7, 12}, - {7, 12}, {7, 12}, {7, 12}, {7, 12}, - {7, 12}, {7, 12}, {7, 12}, {7, 12}, - {7, 12}, {7, 12}, {7, 12}, {7, 12}, - {7, 12}, {7, 12}, {7, 12}, {7, 12}, - {7, 12}, {7, 12}, {7, 12}, {7, 12}, - {7, 12}, {7, 12}, {7, 12}, {7, 12} -}; - -// 2-6 bit codes -static const CCITTCode blackTab3[64] = { - {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 0000xx - {6, 9}, // 000100 - {6, 8}, // 000101 - {5, 7}, {5, 7}, // 00011x - {4, 6}, {4, 6}, {4, 6}, {4, 6}, // 0010xx - {4, 5}, {4, 5}, {4, 5}, {4, 5}, // 0011xx - {3, 1}, {3, 1}, {3, 1}, {3, 1}, // 010xxx - {3, 1}, {3, 1}, {3, 1}, {3, 1}, - {3, 4}, {3, 4}, {3, 4}, {3, 4}, // 011xxx - {3, 4}, {3, 4}, {3, 4}, {3, 4}, - {2, 3}, {2, 3}, {2, 3}, {2, 3}, // 10xxxx - {2, 3}, {2, 3}, {2, 3}, {2, 3}, - {2, 3}, {2, 3}, {2, 3}, {2, 3}, - {2, 3}, {2, 3}, {2, 3}, {2, 3}, - {2, 2}, {2, 2}, {2, 2}, {2, 2}, // 11xxxx - {2, 2}, {2, 2}, {2, 2}, {2, 2}, - {2, 2}, {2, 2}, {2, 2}, {2, 2}, - {2, 2}, {2, 2}, {2, 2}, {2, 2} -}; diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Stream.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/Stream.cc deleted file mode 100644 index 376f617a597..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Stream.cc +++ /dev/null @@ -1,4969 +0,0 @@ -//======================================================================== -// -// Stream.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2006-2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com> -// Copyright (C) 2008 Julien Rebetez <julien@fhtagn.net> -// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2009 Glenn Ganz <glenn.ganz@uptime.ch> -// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> -// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2010 Tomas Hoger <thoger@redhat.com> -// Copyright (C) 2011 William Bader <williambader@hotmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -#include <limits.h> -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif -#include <string.h> -#include <ctype.h> -#include "goo/gmem.h" -#include "goo/gfile.h" -#include "poppler-config.h" -#include "Error.h" -#include "Object.h" -#include "Lexer.h" -#include "GfxState.h" -#include "Stream.h" -#include "JBIG2Stream.h" -#include "Stream-CCITT.h" -#include "CachedFile.h" - -#ifdef ENABLE_LIBJPEG -#include "DCTStream.h" -#endif - -#ifdef ENABLE_ZLIB -#include "FlateStream.h" -#endif - -#ifdef ENABLE_LIBOPENJPEG -#include "JPEG2000Stream.h" -#else -#include "JPXStream.h" -#endif - -#ifdef __DJGPP__ -static GBool setDJSYSFLAGS = gFalse; -#endif - -#ifdef VMS -#ifdef __GNUC__ -#define SEEK_SET 0 -#define SEEK_CUR 1 -#define SEEK_END 2 -#endif -#endif - -//------------------------------------------------------------------------ -// Stream (base class) -//------------------------------------------------------------------------ - -Stream::Stream() { - ref = 1; -} - -Stream::~Stream() { -} - -void Stream::close() { -} - -int Stream::getRawChar() { - error(-1, "Internal: called getRawChar() on non-predictor stream"); - return EOF; -} - -int Stream::getChars(int nChars, Guchar *buffer) { - error(-1, "Internal: called getChars() on non-predictor stream"); - return 0; -} - -void Stream::getRawChars(int nChars, int *buffer) { - error(-1, "Internal: called getRawChars() on non-predictor stream"); -} - -char *Stream::getLine(char *buf, int size) { - int i; - int c; - - if (lookChar() == EOF) - return NULL; - for (i = 0; i < size - 1; ++i) { - c = getChar(); - if (c == EOF || c == '\n') - break; - if (c == '\r') { - if ((c = lookChar()) == '\n') - getChar(); - break; - } - buf[i] = c; - } - buf[i] = '\0'; - return buf; -} - -GooString *Stream::getPSFilter(int psLevel, char *indent) { - return new GooString(); -} - -Stream *Stream::addFilters(Object *dict) { - Object obj, obj2; - Object params, params2; - Stream *str; - int i; - - str = this; - dict->dictLookup("Filter", &obj); - if (obj.isNull()) { - obj.free(); - dict->dictLookup("F", &obj); - } - dict->dictLookup("DecodeParms", ¶ms); - if (params.isNull()) { - params.free(); - dict->dictLookup("DP", ¶ms); - } - if (obj.isName()) { - str = makeFilter(obj.getName(), str, ¶ms); - } else if (obj.isArray()) { - for (i = 0; i < obj.arrayGetLength(); ++i) { - obj.arrayGet(i, &obj2); - if (params.isArray()) - params.arrayGet(i, ¶ms2); - else - params2.initNull(); - if (obj2.isName()) { - str = makeFilter(obj2.getName(), str, ¶ms2); - } else { - error(getPos(), "Bad filter name"); - str = new EOFStream(str); - } - obj2.free(); - params2.free(); - } - } else if (!obj.isNull()) { - error(getPos(), "Bad 'Filter' attribute in stream"); - } - obj.free(); - params.free(); - - return str; -} - -Stream *Stream::makeFilter(char *name, Stream *str, Object *params) { - int pred; // parameters - int colors; - int bits; - int early; - int encoding; - GBool endOfLine, byteAlign, endOfBlock, black; - int columns, rows; - int colorXform; - Object globals, obj; - - if (!strcmp(name, "ASCIIHexDecode") || !strcmp(name, "AHx")) { - str = new ASCIIHexStream(str); - } else if (!strcmp(name, "ASCII85Decode") || !strcmp(name, "A85")) { - str = new ASCII85Stream(str); - } else if (!strcmp(name, "LZWDecode") || !strcmp(name, "LZW")) { - pred = 1; - columns = 1; - colors = 1; - bits = 8; - early = 1; - if (params->isDict()) { - params->dictLookup("Predictor", &obj); - if (obj.isInt()) - pred = obj.getInt(); - obj.free(); - params->dictLookup("Columns", &obj); - if (obj.isInt()) - columns = obj.getInt(); - obj.free(); - params->dictLookup("Colors", &obj); - if (obj.isInt()) - colors = obj.getInt(); - obj.free(); - params->dictLookup("BitsPerComponent", &obj); - if (obj.isInt()) - bits = obj.getInt(); - obj.free(); - params->dictLookup("EarlyChange", &obj); - if (obj.isInt()) - early = obj.getInt(); - obj.free(); - } - str = new LZWStream(str, pred, columns, colors, bits, early); - } else if (!strcmp(name, "RunLengthDecode") || !strcmp(name, "RL")) { - str = new RunLengthStream(str); - } else if (!strcmp(name, "CCITTFaxDecode") || !strcmp(name, "CCF")) { - encoding = 0; - endOfLine = gFalse; - byteAlign = gFalse; - columns = 1728; - rows = 0; - endOfBlock = gTrue; - black = gFalse; - if (params->isDict()) { - params->dictLookup("K", &obj); - if (obj.isInt()) { - encoding = obj.getInt(); - } - obj.free(); - params->dictLookup("EndOfLine", &obj); - if (obj.isBool()) { - endOfLine = obj.getBool(); - } - obj.free(); - params->dictLookup("EncodedByteAlign", &obj); - if (obj.isBool()) { - byteAlign = obj.getBool(); - } - obj.free(); - params->dictLookup("Columns", &obj); - if (obj.isInt()) { - columns = obj.getInt(); - } - obj.free(); - params->dictLookup("Rows", &obj); - if (obj.isInt()) { - rows = obj.getInt(); - } - obj.free(); - params->dictLookup("EndOfBlock", &obj); - if (obj.isBool()) { - endOfBlock = obj.getBool(); - } - obj.free(); - params->dictLookup("BlackIs1", &obj); - if (obj.isBool()) { - black = obj.getBool(); - } - obj.free(); - } - str = new CCITTFaxStream(str, encoding, endOfLine, byteAlign, - columns, rows, endOfBlock, black); - } else if (!strcmp(name, "DCTDecode") || !strcmp(name, "DCT")) { - colorXform = -1; - if (params->isDict()) { - if (params->dictLookup("ColorTransform", &obj)->isInt()) { - colorXform = obj.getInt(); - } - obj.free(); - } - str = new DCTStream(str, colorXform); - } else if (!strcmp(name, "FlateDecode") || !strcmp(name, "Fl")) { - pred = 1; - columns = 1; - colors = 1; - bits = 8; - if (params->isDict()) { - params->dictLookup("Predictor", &obj); - if (obj.isInt()) - pred = obj.getInt(); - obj.free(); - params->dictLookup("Columns", &obj); - if (obj.isInt()) - columns = obj.getInt(); - obj.free(); - params->dictLookup("Colors", &obj); - if (obj.isInt()) - colors = obj.getInt(); - obj.free(); - params->dictLookup("BitsPerComponent", &obj); - if (obj.isInt()) - bits = obj.getInt(); - obj.free(); - } - str = new FlateStream(str, pred, columns, colors, bits); - } else if (!strcmp(name, "JBIG2Decode")) { - if (params->isDict()) { - params->dictLookup("JBIG2Globals", &globals); - } - str = new JBIG2Stream(str, &globals); - globals.free(); - } else if (!strcmp(name, "JPXDecode")) { - str = new JPXStream(str); - } else { - error(getPos(), "Unknown filter '%s'", name); - str = new EOFStream(str); - } - return str; -} - -//------------------------------------------------------------------------ -// OutStream -//------------------------------------------------------------------------ -OutStream::OutStream () -{ - ref = 1; -} - -OutStream::~OutStream () -{ -} - -//------------------------------------------------------------------------ -// FileOutStream -//------------------------------------------------------------------------ -FileOutStream::FileOutStream (FILE* fa, Guint startA) -{ - f = fa; - start = startA; -} - -FileOutStream::~FileOutStream () -{ - close (); -} - -void FileOutStream::close () -{ - -} - -int FileOutStream::getPos () -{ - return ftell(f); -} - -void FileOutStream::put (char c) -{ - fputc(c,f); -} - -void FileOutStream::printf(const char *format, ...) -{ - va_list argptr; - va_start (argptr, format); - vfprintf(f, format, argptr); - va_end (argptr); -} - - -//------------------------------------------------------------------------ -// BaseStream -//------------------------------------------------------------------------ - -BaseStream::BaseStream(Object *dictA, Guint lengthA) { - dict = *dictA; - length = lengthA; -} - -BaseStream::~BaseStream() { - dict.free(); -} - -//------------------------------------------------------------------------ -// FilterStream -//------------------------------------------------------------------------ - -FilterStream::FilterStream(Stream *strA) { - str = strA; -} - -FilterStream::~FilterStream() { -} - -void FilterStream::close() { - str->close(); -} - -void FilterStream::setPos(Guint pos, int dir) { - error(-1, "Internal: called setPos() on FilterStream"); -} - -//------------------------------------------------------------------------ -// ImageStream -//------------------------------------------------------------------------ - -ImageStream::ImageStream(Stream *strA, int widthA, int nCompsA, int nBitsA) { - int imgLineSize; - - str = strA; - width = widthA; - nComps = nCompsA; - nBits = nBitsA; - - nVals = width * nComps; - if (nBits == 1) { - imgLineSize = (nVals + 7) & ~7; - } else { - imgLineSize = nVals; - } - if (width > INT_MAX / nComps) { - // force a call to gmallocn(-1,...), which will throw an exception - imgLineSize = -1; - } - imgLine = (Guchar *)gmallocn(imgLineSize, sizeof(Guchar)); - imgIdx = nVals; -} - -ImageStream::~ImageStream() { - gfree(imgLine); -} - -void ImageStream::reset() { - str->reset(); -} - -void ImageStream::close() { - str->close(); -} - -GBool ImageStream::getPixel(Guchar *pix) { - int i; - - if (imgIdx >= nVals) { - getLine(); - imgIdx = 0; - } - for (i = 0; i < nComps; ++i) { - pix[i] = imgLine[imgIdx++]; - } - return gTrue; -} - -Guchar *ImageStream::getLine() { - Gulong buf, bitMask; - int bits; - int c; - int i; - - if (nBits == 1) { - for (i = 0; i < nVals; i += 8) { - c = str->getChar(); - imgLine[i+0] = (Guchar)((c >> 7) & 1); - imgLine[i+1] = (Guchar)((c >> 6) & 1); - imgLine[i+2] = (Guchar)((c >> 5) & 1); - imgLine[i+3] = (Guchar)((c >> 4) & 1); - imgLine[i+4] = (Guchar)((c >> 3) & 1); - imgLine[i+5] = (Guchar)((c >> 2) & 1); - imgLine[i+6] = (Guchar)((c >> 1) & 1); - imgLine[i+7] = (Guchar)(c & 1); - } - } else if (nBits == 8) { - Guchar *line = imgLine; - int readChars = str->doGetChars(nVals, line); - for ( ; readChars < nVals; readChars++) line[readChars] = (Guchar)EOF; - } else if (nBits == 16) { - // this is a hack to support 16 bits images, everywhere - // we assume a component fits in 8 bits, with this hack - // we treat 16 bit images as 8 bit ones until it's fixed correctly. - // The hack has another part on GfxImageColorMap::GfxImageColorMap - for (i = 0; i < nVals; ++i) { - imgLine[i] = str->getChar(); - str->getChar(); - } - } else { - bitMask = (1 << nBits) - 1; - buf = 0; - bits = 0; - for (i = 0; i < nVals; ++i) { - if (bits < nBits) { - buf = (buf << 8) | (str->getChar() & 0xff); - bits += 8; - } - imgLine[i] = (Guchar)((buf >> (bits - nBits)) & bitMask); - bits -= nBits; - } - } - return imgLine; -} - -void ImageStream::skipLine() { - int n, i; - - n = (nVals * nBits + 7) >> 3; - for (i = 0; i < n; ++i) { - str->getChar(); - } -} - -//------------------------------------------------------------------------ -// StreamPredictor -//------------------------------------------------------------------------ - -StreamPredictor::StreamPredictor(Stream *strA, int predictorA, - int widthA, int nCompsA, int nBitsA) { - str = strA; - predictor = predictorA; - width = widthA; - nComps = nCompsA; - nBits = nBitsA; - predLine = NULL; - ok = gFalse; - - nVals = width * nComps; - pixBytes = (nComps * nBits + 7) >> 3; - rowBytes = ((nVals * nBits + 7) >> 3) + pixBytes; - if (width <= 0 || nComps <= 0 || nBits <= 0 || - nComps > gfxColorMaxComps || - nBits > 16 || - width >= INT_MAX / nComps || // check for overflow in nVals - nVals >= (INT_MAX - 7) / nBits) { // check for overflow in rowBytes - return; - } - predLine = (Guchar *)gmalloc(rowBytes); - memset(predLine, 0, rowBytes); - predIdx = rowBytes; - - ok = gTrue; -} - -StreamPredictor::~StreamPredictor() { - gfree(predLine); -} - -int StreamPredictor::lookChar() { - if (predIdx >= rowBytes) { - if (!getNextLine()) { - return EOF; - } - } - return predLine[predIdx]; -} - -int StreamPredictor::getChar() { - return doGetChar(); -} - -int StreamPredictor::getChars(int nChars, Guchar *buffer) -{ - for (int i = 0; i < nChars; ++i) { - const int c = doGetChar(); - if (likely(c != EOF)) buffer[i] = c; - else return i; - } - return nChars; -} - -GBool StreamPredictor::getNextLine() { - int curPred; - Guchar upLeftBuf[gfxColorMaxComps * 2 + 1]; - int left, up, upLeft, p, pa, pb, pc; - int c; - Gulong inBuf, outBuf, bitMask; - int inBits, outBits; - int i, j, k, kk; - - // get PNG optimum predictor number - if (predictor >= 10) { - if ((curPred = str->getRawChar()) == EOF) { - return gFalse; - } - curPred += 10; - } else { - curPred = predictor; - } - - // read the raw line, apply PNG (byte) predictor - int *rawCharLine = new int[rowBytes - pixBytes]; - str->getRawChars(rowBytes - pixBytes, rawCharLine); - memset(upLeftBuf, 0, pixBytes + 1); - for (i = pixBytes; i < rowBytes; ++i) { - for (j = pixBytes; j > 0; --j) { - upLeftBuf[j] = upLeftBuf[j-1]; - } - upLeftBuf[0] = predLine[i]; - if ((c = rawCharLine[i - pixBytes]) == EOF) { - if (i > pixBytes) { - // this ought to return false, but some (broken) PDF files - // contain truncated image data, and Adobe apparently reads the - // last partial line - break; - } - delete[] rawCharLine; - return gFalse; - } - switch (curPred) { - case 11: // PNG sub - predLine[i] = predLine[i - pixBytes] + (Guchar)c; - break; - case 12: // PNG up - predLine[i] = predLine[i] + (Guchar)c; - break; - case 13: // PNG average - predLine[i] = ((predLine[i - pixBytes] + predLine[i]) >> 1) + - (Guchar)c; - break; - case 14: // PNG Paeth - left = predLine[i - pixBytes]; - up = predLine[i]; - upLeft = upLeftBuf[pixBytes]; - p = left + up - upLeft; - if ((pa = p - left) < 0) - pa = -pa; - if ((pb = p - up) < 0) - pb = -pb; - if ((pc = p - upLeft) < 0) - pc = -pc; - if (pa <= pb && pa <= pc) - predLine[i] = left + (Guchar)c; - else if (pb <= pc) - predLine[i] = up + (Guchar)c; - else - predLine[i] = upLeft + (Guchar)c; - break; - case 10: // PNG none - default: // no predictor or TIFF predictor - predLine[i] = (Guchar)c; - break; - } - } - delete[] rawCharLine; - - // apply TIFF (component) predictor - if (predictor == 2) { - if (nBits == 1) { - inBuf = predLine[pixBytes - 1]; - for (i = pixBytes; i < rowBytes; i += 8) { - // 1-bit add is just xor - inBuf = (inBuf << 8) | predLine[i]; - predLine[i] ^= inBuf >> nComps; - } - } else if (nBits == 8) { - for (i = pixBytes; i < rowBytes; ++i) { - predLine[i] += predLine[i - nComps]; - } - } else { - memset(upLeftBuf, 0, nComps + 1); - bitMask = (1 << nBits) - 1; - inBuf = outBuf = 0; - inBits = outBits = 0; - j = k = pixBytes; - for (i = 0; i < width; ++i) { - for (kk = 0; kk < nComps; ++kk) { - if (inBits < nBits) { - inBuf = (inBuf << 8) | (predLine[j++] & 0xff); - inBits += 8; - } - upLeftBuf[kk] = (Guchar)((upLeftBuf[kk] + - (inBuf >> (inBits - nBits))) & bitMask); - inBits -= nBits; - outBuf = (outBuf << nBits) | upLeftBuf[kk]; - outBits += nBits; - if (outBits >= 8) { - predLine[k++] = (Guchar)(outBuf >> (outBits - 8)); - outBits -= 8; - } - } - } - if (outBits > 0) { - predLine[k++] = (Guchar)((outBuf << (8 - outBits)) + - (inBuf & ((1 << (8 - outBits)) - 1))); - } - } - } - - // reset to start of line - predIdx = pixBytes; - - return gTrue; -} - -//------------------------------------------------------------------------ -// FileStream -//------------------------------------------------------------------------ - -FileStream::FileStream(FILE *fA, Guint startA, GBool limitedA, - Guint lengthA, Object *dictA): - BaseStream(dictA, lengthA) { - f = fA; - start = startA; - limited = limitedA; - length = lengthA; - bufPtr = bufEnd = buf; - bufPos = start; - savePos = 0; - saved = gFalse; -} - -FileStream::~FileStream() { - close(); -} - -Stream *FileStream::makeSubStream(Guint startA, GBool limitedA, - Guint lengthA, Object *dictA) { - return new FileStream(f, startA, limitedA, lengthA, dictA); -} - -void FileStream::reset() { -#if HAVE_FSEEKO - savePos = (Guint)ftello(f); - fseeko(f, start, SEEK_SET); -#elif HAVE_FSEEK64 - savePos = (Guint)ftell64(f); - fseek64(f, start, SEEK_SET); -#else - savePos = (Guint)ftell(f); - fseek(f, start, SEEK_SET); -#endif - saved = gTrue; - bufPtr = bufEnd = buf; - bufPos = start; -} - -void FileStream::close() { - if (saved) { -#if HAVE_FSEEKO - fseeko(f, savePos, SEEK_SET); -#elif HAVE_FSEEK64 - fseek64(f, savePos, SEEK_SET); -#else - fseek(f, savePos, SEEK_SET); -#endif - saved = gFalse; - } -} - -GBool FileStream::fillBuf() { - int n; - - bufPos += bufEnd - buf; - bufPtr = bufEnd = buf; - if (limited && bufPos >= start + length) { - return gFalse; - } - if (limited && bufPos + fileStreamBufSize > start + length) { - n = start + length - bufPos; - } else { - n = fileStreamBufSize; - } - n = fread(buf, 1, n, f); - bufEnd = buf + n; - if (bufPtr >= bufEnd) { - return gFalse; - } - return gTrue; -} - -void FileStream::setPos(Guint pos, int dir) { - Guint size; - - if (dir >= 0) { -#if HAVE_FSEEKO - fseeko(f, pos, SEEK_SET); -#elif HAVE_FSEEK64 - fseek64(f, pos, SEEK_SET); -#else - fseek(f, pos, SEEK_SET); -#endif - bufPos = pos; - } else { -#if HAVE_FSEEKO - fseeko(f, 0, SEEK_END); - size = (Guint)ftello(f); -#elif HAVE_FSEEK64 - fseek64(f, 0, SEEK_END); - size = (Guint)ftell64(f); -#else - fseek(f, 0, SEEK_END); - size = (Guint)ftell(f); -#endif - if (pos > size) - pos = (Guint)size; -#ifdef __CYGWIN32__ - //~ work around a bug in cygwin's implementation of fseek - rewind(f); -#endif -#if HAVE_FSEEKO - fseeko(f, -(int)pos, SEEK_END); - bufPos = (Guint)ftello(f); -#elif HAVE_FSEEK64 - fseek64(f, -(int)pos, SEEK_END); - bufPos = (Guint)ftell64(f); -#else - fseek(f, -(int)pos, SEEK_END); - bufPos = (Guint)ftell(f); -#endif - } - bufPtr = bufEnd = buf; -} - -void FileStream::moveStart(int delta) { - start += delta; - bufPtr = bufEnd = buf; - bufPos = start; -} - -//------------------------------------------------------------------------ -// CachedFileStream -//------------------------------------------------------------------------ - -CachedFileStream::CachedFileStream(CachedFile *ccA, Guint startA, - GBool limitedA, Guint lengthA, Object *dictA) - : BaseStream(dictA, lengthA) -{ - cc = ccA; - start = startA; - limited = limitedA; - length = lengthA; - bufPtr = bufEnd = buf; - bufPos = start; - savePos = 0; - saved = gFalse; -} - -CachedFileStream::~CachedFileStream() -{ - close(); - cc->decRefCnt(); -} - -Stream *CachedFileStream::makeSubStream(Guint startA, GBool limitedA, - Guint lengthA, Object *dictA) -{ - cc->incRefCnt(); - return new CachedFileStream(cc, startA, limitedA, lengthA, dictA); -} - -void CachedFileStream::reset() -{ - savePos = (Guint)cc->tell(); - cc->seek(start, SEEK_SET); - - saved = gTrue; - bufPtr = bufEnd = buf; - bufPos = start; -} - -void CachedFileStream::close() -{ - if (saved) { - cc->seek(savePos, SEEK_SET); - saved = gFalse; - } -} - -GBool CachedFileStream::fillBuf() -{ - int n; - - bufPos += bufEnd - buf; - bufPtr = bufEnd = buf; - if (limited && bufPos >= start + length) { - return gFalse; - } - if (limited && bufPos + cachedStreamBufSize > start + length) { - n = start + length - bufPos; - } else { - n = cachedStreamBufSize - (bufPos % cachedStreamBufSize); - } - cc->read(buf, 1, n); - bufEnd = buf + n; - if (bufPtr >= bufEnd) { - return gFalse; - } - return gTrue; -} - -void CachedFileStream::setPos(Guint pos, int dir) -{ - Guint size; - - if (dir >= 0) { - cc->seek(pos, SEEK_SET); - bufPos = pos; - } else { - cc->seek(0, SEEK_END); - size = (Guint)cc->tell(); - - if (pos > size) - pos = (Guint)size; - - cc->seek(-(int)pos, SEEK_END); - bufPos = (Guint)cc->tell(); - } - - bufPtr = bufEnd = buf; -} - -void CachedFileStream::moveStart(int delta) -{ - start += delta; - bufPtr = bufEnd = buf; - bufPos = start; -} - -//------------------------------------------------------------------------ -// MemStream -//------------------------------------------------------------------------ - -MemStream::MemStream(char *bufA, Guint startA, Guint lengthA, Object *dictA): - BaseStream(dictA, lengthA) { - buf = bufA; - start = startA; - length = lengthA; - bufEnd = buf + start + length; - bufPtr = buf + start; - needFree = gFalse; -} - -MemStream::~MemStream() { - if (needFree) { - gfree(buf); - } -} - -Stream *MemStream::makeSubStream(Guint startA, GBool limited, - Guint lengthA, Object *dictA) { - MemStream *subStr; - Guint newLength; - - if (!limited || startA + lengthA > start + length) { - newLength = start + length - startA; - } else { - newLength = lengthA; - } - subStr = new MemStream(buf, startA, newLength, dictA); - return subStr; -} - -void MemStream::reset() { - bufPtr = buf + start; -} - -void MemStream::close() { -} - -void MemStream::setPos(Guint pos, int dir) { - Guint i; - - if (dir >= 0) { - i = pos; - } else { - i = start + length - pos; - } - if (i < start) { - i = start; - } else if (i > start + length) { - i = start + length; - } - bufPtr = buf + i; -} - -void MemStream::moveStart(int delta) { - start += delta; - length -= delta; - bufPtr = buf + start; -} - -//------------------------------------------------------------------------ -// EmbedStream -//------------------------------------------------------------------------ - -EmbedStream::EmbedStream(Stream *strA, Object *dictA, - GBool limitedA, Guint lengthA): - BaseStream(dictA, lengthA) { - str = strA; - limited = limitedA; - length = lengthA; -} - -EmbedStream::~EmbedStream() { -} - -Stream *EmbedStream::makeSubStream(Guint start, GBool limitedA, - Guint lengthA, Object *dictA) { - error(-1, "Internal: called makeSubStream() on EmbedStream"); - return NULL; -} - -int EmbedStream::getChar() { - if (limited && !length) { - return EOF; - } - --length; - return str->getChar(); -} - -int EmbedStream::lookChar() { - if (limited && !length) { - return EOF; - } - return str->lookChar(); -} - -void EmbedStream::setPos(Guint pos, int dir) { - error(-1, "Internal: called setPos() on EmbedStream"); -} - -Guint EmbedStream::getStart() { - error(-1, "Internal: called getStart() on EmbedStream"); - return 0; -} - -void EmbedStream::moveStart(int delta) { - error(-1, "Internal: called moveStart() on EmbedStream"); -} - -//------------------------------------------------------------------------ -// ASCIIHexStream -//------------------------------------------------------------------------ - -ASCIIHexStream::ASCIIHexStream(Stream *strA): - FilterStream(strA) { - buf = EOF; - eof = gFalse; -} - -ASCIIHexStream::~ASCIIHexStream() { - delete str; -} - -void ASCIIHexStream::reset() { - str->reset(); - buf = EOF; - eof = gFalse; -} - -int ASCIIHexStream::lookChar() { - int c1, c2, x; - - if (buf != EOF) - return buf; - if (eof) { - buf = EOF; - return EOF; - } - do { - c1 = str->getChar(); - } while (isspace(c1)); - if (c1 == '>') { - eof = gTrue; - buf = EOF; - return buf; - } - do { - c2 = str->getChar(); - } while (isspace(c2)); - if (c2 == '>') { - eof = gTrue; - c2 = '0'; - } - if (c1 >= '0' && c1 <= '9') { - x = (c1 - '0') << 4; - } else if (c1 >= 'A' && c1 <= 'F') { - x = (c1 - 'A' + 10) << 4; - } else if (c1 >= 'a' && c1 <= 'f') { - x = (c1 - 'a' + 10) << 4; - } else if (c1 == EOF) { - eof = gTrue; - x = 0; - } else { - error(getPos(), "Illegal character <%02x> in ASCIIHex stream", c1); - x = 0; - } - if (c2 >= '0' && c2 <= '9') { - x += c2 - '0'; - } else if (c2 >= 'A' && c2 <= 'F') { - x += c2 - 'A' + 10; - } else if (c2 >= 'a' && c2 <= 'f') { - x += c2 - 'a' + 10; - } else if (c2 == EOF) { - eof = gTrue; - x = 0; - } else { - error(getPos(), "Illegal character <%02x> in ASCIIHex stream", c2); - } - buf = x & 0xff; - return buf; -} - -GooString *ASCIIHexStream::getPSFilter(int psLevel, char *indent) { - GooString *s; - - if (psLevel < 2) { - return NULL; - } - if (!(s = str->getPSFilter(psLevel, indent))) { - return NULL; - } - s->append(indent)->append("/ASCIIHexDecode filter\n"); - return s; -} - -GBool ASCIIHexStream::isBinary(GBool last) { - return str->isBinary(gFalse); -} - -//------------------------------------------------------------------------ -// ASCII85Stream -//------------------------------------------------------------------------ - -ASCII85Stream::ASCII85Stream(Stream *strA): - FilterStream(strA) { - index = n = 0; - eof = gFalse; -} - -ASCII85Stream::~ASCII85Stream() { - delete str; -} - -void ASCII85Stream::reset() { - str->reset(); - index = n = 0; - eof = gFalse; -} - -int ASCII85Stream::lookChar() { - int k; - Gulong t; - - if (index >= n) { - if (eof) - return EOF; - index = 0; - do { - c[0] = str->getChar(); - } while (Lexer::isSpace(c[0])); - if (c[0] == '~' || c[0] == EOF) { - eof = gTrue; - n = 0; - return EOF; - } else if (c[0] == 'z') { - b[0] = b[1] = b[2] = b[3] = 0; - n = 4; - } else { - for (k = 1; k < 5; ++k) { - do { - c[k] = str->getChar(); - } while (Lexer::isSpace(c[k])); - if (c[k] == '~' || c[k] == EOF) - break; - } - n = k - 1; - if (k < 5 && (c[k] == '~' || c[k] == EOF)) { - for (++k; k < 5; ++k) - c[k] = 0x21 + 84; - eof = gTrue; - } - t = 0; - for (k = 0; k < 5; ++k) - t = t * 85 + (c[k] - 0x21); - for (k = 3; k >= 0; --k) { - b[k] = (int)(t & 0xff); - t >>= 8; - } - } - } - return b[index]; -} - -GooString *ASCII85Stream::getPSFilter(int psLevel, char *indent) { - GooString *s; - - if (psLevel < 2) { - return NULL; - } - if (!(s = str->getPSFilter(psLevel, indent))) { - return NULL; - } - s->append(indent)->append("/ASCII85Decode filter\n"); - return s; -} - -GBool ASCII85Stream::isBinary(GBool last) { - return str->isBinary(gFalse); -} - -//------------------------------------------------------------------------ -// LZWStream -//------------------------------------------------------------------------ - -LZWStream::LZWStream(Stream *strA, int predictor, int columns, int colors, - int bits, int earlyA): - FilterStream(strA) { - if (predictor != 1) { - pred = new StreamPredictor(this, predictor, columns, colors, bits); - if (!pred->isOk()) { - delete pred; - pred = NULL; - } - } else { - pred = NULL; - } - early = earlyA; - eof = gFalse; - inputBits = 0; - clearTable(); -} - -LZWStream::~LZWStream() { - if (pred) { - delete pred; - } - delete str; -} - -int LZWStream::getChar() { - if (pred) { - return pred->getChar(); - } - if (eof) { - return EOF; - } - if (seqIndex >= seqLength) { - if (!processNextCode()) { - return EOF; - } - } - return seqBuf[seqIndex++]; -} - -int LZWStream::lookChar() { - if (pred) { - return pred->lookChar(); - } - if (eof) { - return EOF; - } - if (seqIndex >= seqLength) { - if (!processNextCode()) { - return EOF; - } - } - return seqBuf[seqIndex]; -} - -void LZWStream::getRawChars(int nChars, int *buffer) { - for (int i = 0; i < nChars; ++i) - buffer[i] = doGetRawChar(); -} - -int LZWStream::getRawChar() { - return doGetRawChar(); -} - -void LZWStream::reset() { - str->reset(); - eof = gFalse; - inputBits = 0; - clearTable(); -} - -GBool LZWStream::processNextCode() { - int code; - int nextLength; - int i, j; - - // check for EOF - if (eof) { - return gFalse; - } - - // check for eod and clear-table codes - start: - code = getCode(); - if (code == EOF || code == 257) { - eof = gTrue; - return gFalse; - } - if (code == 256) { - clearTable(); - goto start; - } - if (nextCode >= 4097) { - error(getPos(), "Bad LZW stream - expected clear-table code"); - clearTable(); - } - - // process the next code - nextLength = seqLength + 1; - if (code < 256) { - seqBuf[0] = code; - seqLength = 1; - } else if (code < nextCode) { - seqLength = table[code].length; - for (i = seqLength - 1, j = code; i > 0; --i) { - seqBuf[i] = table[j].tail; - j = table[j].head; - } - seqBuf[0] = j; - } else if (code == nextCode) { - seqBuf[seqLength] = newChar; - ++seqLength; - } else { - error(getPos(), "Bad LZW stream - unexpected code"); - eof = gTrue; - return gFalse; - } - newChar = seqBuf[0]; - if (first) { - first = gFalse; - } else { - table[nextCode].length = nextLength; - table[nextCode].head = prevCode; - table[nextCode].tail = newChar; - ++nextCode; - if (nextCode + early == 512) - nextBits = 10; - else if (nextCode + early == 1024) - nextBits = 11; - else if (nextCode + early == 2048) - nextBits = 12; - } - prevCode = code; - - // reset buffer - seqIndex = 0; - - return gTrue; -} - -void LZWStream::clearTable() { - nextCode = 258; - nextBits = 9; - seqIndex = seqLength = 0; - first = gTrue; -} - -int LZWStream::getCode() { - int c; - int code; - - while (inputBits < nextBits) { - if ((c = str->getChar()) == EOF) - return EOF; - inputBuf = (inputBuf << 8) | (c & 0xff); - inputBits += 8; - } - code = (inputBuf >> (inputBits - nextBits)) & ((1 << nextBits) - 1); - inputBits -= nextBits; - return code; -} - -GooString *LZWStream::getPSFilter(int psLevel, char *indent) { - GooString *s; - - if (psLevel < 2 || pred) { - return NULL; - } - if (!(s = str->getPSFilter(psLevel, indent))) { - return NULL; - } - s->append(indent)->append("<< "); - if (!early) { - s->append("/EarlyChange 0 "); - } - s->append(">> /LZWDecode filter\n"); - return s; -} - -GBool LZWStream::isBinary(GBool last) { - return str->isBinary(gTrue); -} - -//------------------------------------------------------------------------ -// RunLengthStream -//------------------------------------------------------------------------ - -RunLengthStream::RunLengthStream(Stream *strA): - FilterStream(strA) { - bufPtr = bufEnd = buf; - eof = gFalse; -} - -RunLengthStream::~RunLengthStream() { - delete str; -} - -void RunLengthStream::reset() { - str->reset(); - bufPtr = bufEnd = buf; - eof = gFalse; -} - -GooString *RunLengthStream::getPSFilter(int psLevel, char *indent) { - GooString *s; - - if (psLevel < 2) { - return NULL; - } - if (!(s = str->getPSFilter(psLevel, indent))) { - return NULL; - } - s->append(indent)->append("/RunLengthDecode filter\n"); - return s; -} - -GBool RunLengthStream::isBinary(GBool last) { - return str->isBinary(gTrue); -} - -GBool RunLengthStream::fillBuf() { - int c; - int n, i; - - if (eof) - return gFalse; - c = str->getChar(); - if (c == 0x80 || c == EOF) { - eof = gTrue; - return gFalse; - } - if (c < 0x80) { - n = c + 1; - for (i = 0; i < n; ++i) - buf[i] = (char)str->getChar(); - } else { - n = 0x101 - c; - c = str->getChar(); - for (i = 0; i < n; ++i) - buf[i] = (char)c; - } - bufPtr = buf; - bufEnd = buf + n; - return gTrue; -} - -//------------------------------------------------------------------------ -// CCITTFaxStream -//------------------------------------------------------------------------ - -CCITTFaxStream::CCITTFaxStream(Stream *strA, int encodingA, GBool endOfLineA, - GBool byteAlignA, int columnsA, int rowsA, - GBool endOfBlockA, GBool blackA): - FilterStream(strA) { - encoding = encodingA; - endOfLine = endOfLineA; - byteAlign = byteAlignA; - columns = columnsA; - if (columns < 1) { - columns = 1; - } else if (columns > INT_MAX - 2) { - columns = INT_MAX - 2; - } - rows = rowsA; - endOfBlock = endOfBlockA; - black = blackA; - // 0 <= codingLine[0] < codingLine[1] < ... < codingLine[n] = columns - // ---> max codingLine size = columns + 1 - // refLine has one extra guard entry at the end - // ---> max refLine size = columns + 2 - codingLine = (int *)gmallocn_checkoverflow(columns + 1, sizeof(int)); - refLine = (int *)gmallocn_checkoverflow(columns + 2, sizeof(int)); - - if (codingLine != NULL && refLine != NULL) { - eof = gFalse; - codingLine[0] = columns; - } else { - eof = gTrue; - } - row = 0; - nextLine2D = encoding < 0; - inputBits = 0; - a0i = 0; - outputBits = 0; - - buf = EOF; -} - -CCITTFaxStream::~CCITTFaxStream() { - delete str; - gfree(refLine); - gfree(codingLine); -} - -void CCITTFaxStream::unfilteredReset () { - str->reset(); - - row = 0; - nextLine2D = encoding < 0; - inputBits = 0; - a0i = 0; - outputBits = 0; - buf = EOF; -} - -void CCITTFaxStream::reset() { - short code1; - - unfilteredReset(); - - if (codingLine != NULL && refLine != NULL) { - eof = gFalse; - codingLine[0] = columns; - } else { - eof = gTrue; - } - - // skip any initial zero bits and end-of-line marker, and get the 2D - // encoding tag - while ((code1 = lookBits(12)) == 0) { - eatBits(1); - } - if (code1 == 0x001) { - eatBits(12); - } - if (encoding > 0) { - nextLine2D = !lookBits(1); - eatBits(1); - } -} - -inline void CCITTFaxStream::addPixels(int a1, int blackPixels) { - if (a1 > codingLine[a0i]) { - if (a1 > columns) { - error(getPos(), "CCITTFax row is wrong length (%d)", a1); - err = gTrue; - a1 = columns; - } - if ((a0i & 1) ^ blackPixels) { - ++a0i; - } - codingLine[a0i] = a1; - } -} - -inline void CCITTFaxStream::addPixelsNeg(int a1, int blackPixels) { - if (a1 > codingLine[a0i]) { - if (a1 > columns) { - error(getPos(), "CCITTFax row is wrong length (%d)", a1); - err = gTrue; - a1 = columns; - } - if ((a0i & 1) ^ blackPixels) { - ++a0i; - } - codingLine[a0i] = a1; - } else if (a1 < codingLine[a0i]) { - if (a1 < 0) { - error(getPos(), "Invalid CCITTFax code"); - err = gTrue; - a1 = 0; - } - while (a0i > 0 && a1 <= codingLine[a0i - 1]) { - --a0i; - } - codingLine[a0i] = a1; - } -} - -int CCITTFaxStream::lookChar() { - short code1, code2, code3; - int b1i, blackPixels, i, bits; - GBool gotEOL; - - if (buf != EOF) { - return buf; - } - - // read the next row - if (outputBits == 0) { - - // if at eof just return EOF - if (eof) { - return EOF; - } - - err = gFalse; - - // 2-D encoding - if (nextLine2D) { - for (i = 0; codingLine[i] < columns; ++i) { - refLine[i] = codingLine[i]; - } - refLine[i++] = columns; - refLine[i] = columns; - codingLine[0] = 0; - a0i = 0; - b1i = 0; - blackPixels = 0; - // invariant: - // refLine[b1i-1] <= codingLine[a0i] < refLine[b1i] < refLine[b1i+1] - // <= columns - // exception at left edge: - // codingLine[a0i = 0] = refLine[b1i = 0] = 0 is possible - // exception at right edge: - // refLine[b1i] = refLine[b1i+1] = columns is possible - while (codingLine[a0i] < columns) { - code1 = getTwoDimCode(); - switch (code1) { - case twoDimPass: - addPixels(refLine[b1i + 1], blackPixels); - if (refLine[b1i + 1] < columns) { - b1i += 2; - } - break; - case twoDimHoriz: - code1 = code2 = 0; - if (blackPixels) { - do { - code1 += code3 = getBlackCode(); - } while (code3 >= 64); - do { - code2 += code3 = getWhiteCode(); - } while (code3 >= 64); - } else { - do { - code1 += code3 = getWhiteCode(); - } while (code3 >= 64); - do { - code2 += code3 = getBlackCode(); - } while (code3 >= 64); - } - addPixels(codingLine[a0i] + code1, blackPixels); - if (codingLine[a0i] < columns) { - addPixels(codingLine[a0i] + code2, blackPixels ^ 1); - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; - } - break; - case twoDimVertR3: - addPixels(refLine[b1i] + 3, blackPixels); - blackPixels ^= 1; - if (codingLine[a0i] < columns) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; - } - } - break; - case twoDimVertR2: - addPixels(refLine[b1i] + 2, blackPixels); - blackPixels ^= 1; - if (codingLine[a0i] < columns) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; - } - } - break; - case twoDimVertR1: - addPixels(refLine[b1i] + 1, blackPixels); - blackPixels ^= 1; - if (codingLine[a0i] < columns) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; - } - } - break; - case twoDimVert0: - addPixels(refLine[b1i], blackPixels); - blackPixels ^= 1; - if (codingLine[a0i] < columns) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; - } - } - break; - case twoDimVertL3: - addPixelsNeg(refLine[b1i] - 3, blackPixels); - blackPixels ^= 1; - if (codingLine[a0i] < columns) { - if (b1i > 0) { - --b1i; - } else { - ++b1i; - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; - } - } - break; - case twoDimVertL2: - addPixelsNeg(refLine[b1i] - 2, blackPixels); - blackPixels ^= 1; - if (codingLine[a0i] < columns) { - if (b1i > 0) { - --b1i; - } else { - ++b1i; - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; - } - } - break; - case twoDimVertL1: - addPixelsNeg(refLine[b1i] - 1, blackPixels); - blackPixels ^= 1; - if (codingLine[a0i] < columns) { - if (b1i > 0) { - --b1i; - } else { - ++b1i; - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; - } - } - break; - case EOF: - addPixels(columns, 0); - eof = gTrue; - break; - default: - error(getPos(), "Bad 2D code %04x in CCITTFax stream", code1); - addPixels(columns, 0); - err = gTrue; - break; - } - } - - // 1-D encoding - } else { - codingLine[0] = 0; - a0i = 0; - blackPixels = 0; - while (codingLine[a0i] < columns) { - code1 = 0; - if (blackPixels) { - do { - code1 += code3 = getBlackCode(); - } while (code3 >= 64); - } else { - do { - code1 += code3 = getWhiteCode(); - } while (code3 >= 64); - } - addPixels(codingLine[a0i] + code1, blackPixels); - blackPixels ^= 1; - } - } - - // byte-align the row - if (byteAlign) { - inputBits &= ~7; - } - - // check for end-of-line marker, skipping over any extra zero bits - gotEOL = gFalse; - if (!endOfBlock && row == rows - 1) { - eof = gTrue; - } else { - code1 = lookBits(12); - while (code1 == 0) { - eatBits(1); - code1 = lookBits(12); - } - if (code1 == 0x001) { - eatBits(12); - gotEOL = gTrue; - } else if (code1 == EOF) { - eof = gTrue; - } - } - - // get 2D encoding tag - if (!eof && encoding > 0) { - nextLine2D = !lookBits(1); - eatBits(1); - } - - // check for end-of-block marker - if (endOfBlock && gotEOL) { - code1 = lookBits(12); - if (code1 == 0x001) { - eatBits(12); - if (encoding > 0) { - lookBits(1); - eatBits(1); - } - if (encoding >= 0) { - for (i = 0; i < 4; ++i) { - code1 = lookBits(12); - if (code1 != 0x001) { - error(getPos(), "Bad RTC code in CCITTFax stream"); - } - eatBits(12); - if (encoding > 0) { - lookBits(1); - eatBits(1); - } - } - } - eof = gTrue; - } - - // look for an end-of-line marker after an error -- we only do - // this if we know the stream contains end-of-line markers because - // the "just plow on" technique tends to work better otherwise - } else if (err && endOfLine) { - while (1) { - code1 = lookBits(13); - if (code1 == EOF) { - eof = gTrue; - return EOF; - } - if ((code1 >> 1) == 0x001) { - break; - } - eatBits(1); - } - eatBits(12); - if (encoding > 0) { - eatBits(1); - nextLine2D = !(code1 & 1); - } - } - - // set up for output - if (codingLine[0] > 0) { - outputBits = codingLine[a0i = 0]; - } else { - outputBits = codingLine[a0i = 1]; - } - - ++row; - } - - // get a byte - if (outputBits >= 8) { - buf = (a0i & 1) ? 0x00 : 0xff; - outputBits -= 8; - if (outputBits == 0 && codingLine[a0i] < columns) { - ++a0i; - outputBits = codingLine[a0i] - codingLine[a0i - 1]; - } - } else { - bits = 8; - buf = 0; - do { - if (outputBits > bits) { - buf <<= bits; - if (!(a0i & 1)) { - buf |= 0xff >> (8 - bits); - } - outputBits -= bits; - bits = 0; - } else { - buf <<= outputBits; - if (!(a0i & 1)) { - buf |= 0xff >> (8 - outputBits); - } - bits -= outputBits; - outputBits = 0; - if (codingLine[a0i] < columns) { - ++a0i; - outputBits = codingLine[a0i] - codingLine[a0i - 1]; - } else if (bits > 0) { - buf <<= bits; - bits = 0; - } - } - } while (bits); - } - if (black) { - buf ^= 0xff; - } - return buf; -} - -short CCITTFaxStream::getTwoDimCode() { - short code; - const CCITTCode *p; - int n; - - code = 0; // make gcc happy - if (endOfBlock) { - code = lookBits(7); - p = &twoDimTab1[code]; - if (p->bits > 0) { - eatBits(p->bits); - return p->n; - } - } else { - for (n = 1; n <= 7; ++n) { - code = lookBits(n); - if (n < 7) { - code <<= 7 - n; - } - p = &twoDimTab1[code]; - if (p->bits == n) { - eatBits(n); - return p->n; - } - } - } - error(getPos(), "Bad two dim code (%04x) in CCITTFax stream", code); - return EOF; -} - -short CCITTFaxStream::getWhiteCode() { - short code; - const CCITTCode *p; - int n; - - code = 0; // make gcc happy - if (endOfBlock) { - code = lookBits(12); - if (code == EOF) { - return 1; - } - if ((code >> 5) == 0) { - p = &whiteTab1[code]; - } else { - p = &whiteTab2[code >> 3]; - } - if (p->bits > 0) { - eatBits(p->bits); - return p->n; - } - } else { - for (n = 1; n <= 9; ++n) { - code = lookBits(n); - if (code == EOF) { - return 1; - } - if (n < 9) { - code <<= 9 - n; - } - p = &whiteTab2[code]; - if (p->bits == n) { - eatBits(n); - return p->n; - } - } - for (n = 11; n <= 12; ++n) { - code = lookBits(n); - if (code == EOF) { - return 1; - } - if (n < 12) { - code <<= 12 - n; - } - p = &whiteTab1[code]; - if (p->bits == n) { - eatBits(n); - return p->n; - } - } - } - error(getPos(), "Bad white code (%04x) in CCITTFax stream", code); - // eat a bit and return a positive number so that the caller doesn't - // go into an infinite loop - eatBits(1); - return 1; -} - -short CCITTFaxStream::getBlackCode() { - short code; - const CCITTCode *p; - int n; - - code = 0; // make gcc happy - if (endOfBlock) { - code = lookBits(13); - if (code == EOF) { - return 1; - } - if ((code >> 7) == 0) { - p = &blackTab1[code]; - } else if ((code >> 9) == 0 && (code >> 7) != 0) { - p = &blackTab2[(code >> 1) - 64]; - } else { - p = &blackTab3[code >> 7]; - } - if (p->bits > 0) { - eatBits(p->bits); - return p->n; - } - } else { - for (n = 2; n <= 6; ++n) { - code = lookBits(n); - if (code == EOF) { - return 1; - } - if (n < 6) { - code <<= 6 - n; - } - p = &blackTab3[code]; - if (p->bits == n) { - eatBits(n); - return p->n; - } - } - for (n = 7; n <= 12; ++n) { - code = lookBits(n); - if (code == EOF) { - return 1; - } - if (n < 12) { - code <<= 12 - n; - } - if (code >= 64) { - p = &blackTab2[code - 64]; - if (p->bits == n) { - eatBits(n); - return p->n; - } - } - } - for (n = 10; n <= 13; ++n) { - code = lookBits(n); - if (code == EOF) { - return 1; - } - if (n < 13) { - code <<= 13 - n; - } - p = &blackTab1[code]; - if (p->bits == n) { - eatBits(n); - return p->n; - } - } - } - error(getPos(), "Bad black code (%04x) in CCITTFax stream", code); - // eat a bit and return a positive number so that the caller doesn't - // go into an infinite loop - eatBits(1); - return 1; -} - -short CCITTFaxStream::lookBits(int n) { - int c; - - while (inputBits < n) { - if ((c = str->getChar()) == EOF) { - if (inputBits == 0) { - return EOF; - } - // near the end of the stream, the caller may ask for more bits - // than are available, but there may still be a valid code in - // however many bits are available -- we need to return correct - // data in this case - return (inputBuf << (n - inputBits)) & (0xffff >> (16 - n)); - } - inputBuf = (inputBuf << 8) + c; - inputBits += 8; - } - return (inputBuf >> (inputBits - n)) & (0xffff >> (16 - n)); -} - -GooString *CCITTFaxStream::getPSFilter(int psLevel, char *indent) { - GooString *s; - char s1[50]; - - if (psLevel < 2) { - return NULL; - } - if (!(s = str->getPSFilter(psLevel, indent))) { - return NULL; - } - s->append(indent)->append("<< "); - if (encoding != 0) { - sprintf(s1, "/K %d ", encoding); - s->append(s1); - } - if (endOfLine) { - s->append("/EndOfLine true "); - } - if (byteAlign) { - s->append("/EncodedByteAlign true "); - } - sprintf(s1, "/Columns %d ", columns); - s->append(s1); - if (rows != 0) { - sprintf(s1, "/Rows %d ", rows); - s->append(s1); - } - if (!endOfBlock) { - s->append("/EndOfBlock false "); - } - if (black) { - s->append("/BlackIs1 true "); - } - s->append(">> /CCITTFaxDecode filter\n"); - return s; -} - -GBool CCITTFaxStream::isBinary(GBool last) { - return str->isBinary(gTrue); -} - -#ifndef ENABLE_LIBJPEG - -//------------------------------------------------------------------------ -// DCTStream -//------------------------------------------------------------------------ - -// IDCT constants (20.12 fixed point format) -#define dctCos1 4017 // cos(pi/16) -#define dctSin1 799 // sin(pi/16) -#define dctCos3 3406 // cos(3*pi/16) -#define dctSin3 2276 // sin(3*pi/16) -#define dctCos6 1567 // cos(6*pi/16) -#define dctSin6 3784 // sin(6*pi/16) -#define dctSqrt2 5793 // sqrt(2) -#define dctSqrt1d2 2896 // sqrt(2) / 2 - -// color conversion parameters (16.16 fixed point format) -#define dctCrToR 91881 // 1.4020 -#define dctCbToG -22553 // -0.3441363 -#define dctCrToG -46802 // -0.71413636 -#define dctCbToB 116130 // 1.772 - -// clip [-256,511] --> [0,255] -#define dctClipOffset 256 -static Guchar dctClip[768]; -static int dctClipInit = 0; - -// zig zag decode map -static const int dctZigZag[64] = { - 0, - 1, 8, - 16, 9, 2, - 3, 10, 17, 24, - 32, 25, 18, 11, 4, - 5, 12, 19, 26, 33, 40, - 48, 41, 34, 27, 20, 13, 6, - 7, 14, 21, 28, 35, 42, 49, 56, - 57, 50, 43, 36, 29, 22, 15, - 23, 30, 37, 44, 51, 58, - 59, 52, 45, 38, 31, - 39, 46, 53, 60, - 61, 54, 47, - 55, 62, - 63 -}; - -DCTStream::DCTStream(Stream *strA, int colorXformA): - FilterStream(strA) { - int i, j; - - colorXform = colorXformA; - progressive = interleaved = gFalse; - width = height = 0; - mcuWidth = mcuHeight = 0; - numComps = 0; - comp = 0; - x = y = dy = 0; - for (i = 0; i < 4; ++i) { - for (j = 0; j < 32; ++j) { - rowBuf[i][j] = NULL; - } - frameBuf[i] = NULL; - } - - if (!dctClipInit) { - for (i = -256; i < 0; ++i) - dctClip[dctClipOffset + i] = 0; - for (i = 0; i < 256; ++i) - dctClip[dctClipOffset + i] = i; - for (i = 256; i < 512; ++i) - dctClip[dctClipOffset + i] = 255; - dctClipInit = 1; - } -} - -DCTStream::~DCTStream() { - close(); - delete str; -} - -void DCTStream::unfilteredReset() { - str->reset(); - - progressive = interleaved = gFalse; - width = height = 0; - numComps = 0; - numQuantTables = 0; - numDCHuffTables = 0; - numACHuffTables = 0; - gotJFIFMarker = gFalse; - gotAdobeMarker = gFalse; - restartInterval = 0; -} - - -void DCTStream::reset() { - int i, j; - - unfilteredReset(); - - if (!readHeader()) { - y = height; - return; - } - - // compute MCU size - if (numComps == 1) { - compInfo[0].hSample = compInfo[0].vSample = 1; - } - mcuWidth = compInfo[0].hSample; - mcuHeight = compInfo[0].vSample; - for (i = 1; i < numComps; ++i) { - if (compInfo[i].hSample > mcuWidth) { - mcuWidth = compInfo[i].hSample; - } - if (compInfo[i].vSample > mcuHeight) { - mcuHeight = compInfo[i].vSample; - } - } - mcuWidth *= 8; - mcuHeight *= 8; - - // figure out color transform - if (colorXform == -1) { - if (numComps == 3) { - if (gotJFIFMarker) { - colorXform = 1; - } else if (compInfo[0].id == 82 && compInfo[1].id == 71 && - compInfo[2].id == 66) { // ASCII "RGB" - colorXform = 0; - } else { - colorXform = 1; - } - } else { - colorXform = 0; - } - } - - if (progressive || !interleaved) { - - // allocate a buffer for the whole image - bufWidth = ((width + mcuWidth - 1) / mcuWidth) * mcuWidth; - bufHeight = ((height + mcuHeight - 1) / mcuHeight) * mcuHeight; - if (bufWidth <= 0 || bufHeight <= 0 || - bufWidth > INT_MAX / bufWidth / (int)sizeof(int)) { - error(getPos(), "Invalid image size in DCT stream"); - y = height; - return; - } - for (i = 0; i < numComps; ++i) { - frameBuf[i] = (int *)gmallocn(bufWidth * bufHeight, sizeof(int)); - memset(frameBuf[i], 0, bufWidth * bufHeight * sizeof(int)); - } - - // read the image data - do { - restartMarker = 0xd0; - restart(); - readScan(); - } while (readHeader()); - - // decode - decodeImage(); - - // initialize counters - comp = 0; - x = 0; - y = 0; - - } else { - - // allocate a buffer for one row of MCUs - bufWidth = ((width + mcuWidth - 1) / mcuWidth) * mcuWidth; - for (i = 0; i < numComps; ++i) { - for (j = 0; j < mcuHeight; ++j) { - rowBuf[i][j] = (Guchar *)gmallocn(bufWidth, sizeof(Guchar)); - } - } - - // initialize counters - comp = 0; - x = 0; - y = 0; - dy = mcuHeight; - - restartMarker = 0xd0; - restart(); - } -} - -void DCTStream::close() { - int i, j; - - for (i = 0; i < 4; ++i) { - for (j = 0; j < 32; ++j) { - gfree(rowBuf[i][j]); - rowBuf[i][j] = NULL; - } - gfree(frameBuf[i]); - frameBuf[i] = NULL; - } - FilterStream::close(); -} - -int DCTStream::getChar() { - int c; - - if (y >= height) { - return EOF; - } - if (progressive || !interleaved) { - c = frameBuf[comp][y * bufWidth + x]; - if (++comp == numComps) { - comp = 0; - if (++x == width) { - x = 0; - ++y; - } - } - } else { - if (dy >= mcuHeight) { - if (!readMCURow()) { - y = height; - return EOF; - } - comp = 0; - x = 0; - dy = 0; - } - c = rowBuf[comp][dy][x]; - if (++comp == numComps) { - comp = 0; - if (++x == width) { - x = 0; - ++y; - ++dy; - if (y == height) { - readTrailer(); - } - } - } - } - return c; -} - -int DCTStream::lookChar() { - if (y >= height) { - return EOF; - } - if (progressive || !interleaved) { - return frameBuf[comp][y * bufWidth + x]; - } else { - if (dy >= mcuHeight) { - if (!readMCURow()) { - y = height; - return EOF; - } - comp = 0; - x = 0; - dy = 0; - } - return rowBuf[comp][dy][x]; - } -} - -void DCTStream::restart() { - int i; - - inputBits = 0; - restartCtr = restartInterval; - for (i = 0; i < numComps; ++i) { - compInfo[i].prevDC = 0; - } - eobRun = 0; -} - -// Read one row of MCUs from a sequential JPEG stream. -GBool DCTStream::readMCURow() { - int data1[64]; - Guchar data2[64]; - Guchar *p1, *p2; - int pY, pCb, pCr, pR, pG, pB; - int h, v, horiz, vert, hSub, vSub; - int x1, x2, y2, x3, y3, x4, y4, x5, y5, cc, i; - int c; - - for (x1 = 0; x1 < width; x1 += mcuWidth) { - - // deal with restart marker - if (restartInterval > 0 && restartCtr == 0) { - c = readMarker(); - if (c != restartMarker) { - error(getPos(), "Bad DCT data: incorrect restart marker"); - return gFalse; - } - if (++restartMarker == 0xd8) - restartMarker = 0xd0; - restart(); - } - - // read one MCU - for (cc = 0; cc < numComps; ++cc) { - h = compInfo[cc].hSample; - v = compInfo[cc].vSample; - horiz = mcuWidth / h; - vert = mcuHeight / v; - hSub = horiz / 8; - vSub = vert / 8; - for (y2 = 0; y2 < mcuHeight; y2 += vert) { - for (x2 = 0; x2 < mcuWidth; x2 += horiz) { - if (!readDataUnit(&dcHuffTables[scanInfo.dcHuffTable[cc]], - &acHuffTables[scanInfo.acHuffTable[cc]], - &compInfo[cc].prevDC, - data1)) { - return gFalse; - } - transformDataUnit(quantTables[compInfo[cc].quantTable], - data1, data2); - if (hSub == 1 && vSub == 1) { - for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) { - p1 = &rowBuf[cc][y2+y3][x1+x2]; - p1[0] = data2[i]; - p1[1] = data2[i+1]; - p1[2] = data2[i+2]; - p1[3] = data2[i+3]; - p1[4] = data2[i+4]; - p1[5] = data2[i+5]; - p1[6] = data2[i+6]; - p1[7] = data2[i+7]; - } - } else if (hSub == 2 && vSub == 2) { - for (y3 = 0, i = 0; y3 < 16; y3 += 2, i += 8) { - p1 = &rowBuf[cc][y2+y3][x1+x2]; - p2 = &rowBuf[cc][y2+y3+1][x1+x2]; - p1[0] = p1[1] = p2[0] = p2[1] = data2[i]; - p1[2] = p1[3] = p2[2] = p2[3] = data2[i+1]; - p1[4] = p1[5] = p2[4] = p2[5] = data2[i+2]; - p1[6] = p1[7] = p2[6] = p2[7] = data2[i+3]; - p1[8] = p1[9] = p2[8] = p2[9] = data2[i+4]; - p1[10] = p1[11] = p2[10] = p2[11] = data2[i+5]; - p1[12] = p1[13] = p2[12] = p2[13] = data2[i+6]; - p1[14] = p1[15] = p2[14] = p2[15] = data2[i+7]; - } - } else { - i = 0; - for (y3 = 0, y4 = 0; y3 < 8; ++y3, y4 += vSub) { - for (x3 = 0, x4 = 0; x3 < 8; ++x3, x4 += hSub) { - for (y5 = 0; y5 < vSub; ++y5) - for (x5 = 0; x5 < hSub; ++x5) - rowBuf[cc][y2+y4+y5][x1+x2+x4+x5] = data2[i]; - ++i; - } - } - } - } - } - } - --restartCtr; - - // color space conversion - if (colorXform) { - // convert YCbCr to RGB - if (numComps == 3) { - for (y2 = 0; y2 < mcuHeight; ++y2) { - for (x2 = 0; x2 < mcuWidth; ++x2) { - pY = rowBuf[0][y2][x1+x2]; - pCb = rowBuf[1][y2][x1+x2] - 128; - pCr = rowBuf[2][y2][x1+x2] - 128; - pR = ((pY << 16) + dctCrToR * pCr + 32768) >> 16; - rowBuf[0][y2][x1+x2] = dctClip[dctClipOffset + pR]; - pG = ((pY << 16) + dctCbToG * pCb + dctCrToG * pCr + 32768) >> 16; - rowBuf[1][y2][x1+x2] = dctClip[dctClipOffset + pG]; - pB = ((pY << 16) + dctCbToB * pCb + 32768) >> 16; - rowBuf[2][y2][x1+x2] = dctClip[dctClipOffset + pB]; - } - } - // convert YCbCrK to CMYK (K is passed through unchanged) - } else if (numComps == 4) { - for (y2 = 0; y2 < mcuHeight; ++y2) { - for (x2 = 0; x2 < mcuWidth; ++x2) { - pY = rowBuf[0][y2][x1+x2]; - pCb = rowBuf[1][y2][x1+x2] - 128; - pCr = rowBuf[2][y2][x1+x2] - 128; - pR = ((pY << 16) + dctCrToR * pCr + 32768) >> 16; - rowBuf[0][y2][x1+x2] = 255 - dctClip[dctClipOffset + pR]; - pG = ((pY << 16) + dctCbToG * pCb + dctCrToG * pCr + 32768) >> 16; - rowBuf[1][y2][x1+x2] = 255 - dctClip[dctClipOffset + pG]; - pB = ((pY << 16) + dctCbToB * pCb + 32768) >> 16; - rowBuf[2][y2][x1+x2] = 255 - dctClip[dctClipOffset + pB]; - } - } - } - } - } - return gTrue; -} - -// Read one scan from a progressive or non-interleaved JPEG stream. -void DCTStream::readScan() { - int data[64]; - int x1, y1, dx1, dy1, x2, y2, y3, cc, i; - int h, v, horiz, vert, vSub; - int *p1; - int c; - - if (scanInfo.numComps == 1) { - for (cc = 0; cc < numComps; ++cc) { - if (scanInfo.comp[cc]) { - break; - } - } - dx1 = mcuWidth / compInfo[cc].hSample; - dy1 = mcuHeight / compInfo[cc].vSample; - } else { - dx1 = mcuWidth; - dy1 = mcuHeight; - } - - for (y1 = 0; y1 < height; y1 += dy1) { - for (x1 = 0; x1 < width; x1 += dx1) { - - // deal with restart marker - if (restartInterval > 0 && restartCtr == 0) { - c = readMarker(); - if (c != restartMarker) { - error(getPos(), "Bad DCT data: incorrect restart marker"); - return; - } - if (++restartMarker == 0xd8) { - restartMarker = 0xd0; - } - restart(); - } - - // read one MCU - for (cc = 0; cc < numComps; ++cc) { - if (!scanInfo.comp[cc]) { - continue; - } - - h = compInfo[cc].hSample; - v = compInfo[cc].vSample; - horiz = mcuWidth / h; - vert = mcuHeight / v; - vSub = vert / 8; - for (y2 = 0; y2 < dy1; y2 += vert) { - for (x2 = 0; x2 < dx1; x2 += horiz) { - - // pull out the current values - p1 = &frameBuf[cc][(y1+y2) * bufWidth + (x1+x2)]; - for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) { - data[i] = p1[0]; - data[i+1] = p1[1]; - data[i+2] = p1[2]; - data[i+3] = p1[3]; - data[i+4] = p1[4]; - data[i+5] = p1[5]; - data[i+6] = p1[6]; - data[i+7] = p1[7]; - p1 += bufWidth * vSub; - } - - // read one data unit - if (progressive) { - if (!readProgressiveDataUnit( - &dcHuffTables[scanInfo.dcHuffTable[cc]], - &acHuffTables[scanInfo.acHuffTable[cc]], - &compInfo[cc].prevDC, - data)) { - return; - } - } else { - if (!readDataUnit(&dcHuffTables[scanInfo.dcHuffTable[cc]], - &acHuffTables[scanInfo.acHuffTable[cc]], - &compInfo[cc].prevDC, - data)) { - return; - } - } - - // add the data unit into frameBuf - p1 = &frameBuf[cc][(y1+y2) * bufWidth + (x1+x2)]; - for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) { - p1[0] = data[i]; - p1[1] = data[i+1]; - p1[2] = data[i+2]; - p1[3] = data[i+3]; - p1[4] = data[i+4]; - p1[5] = data[i+5]; - p1[6] = data[i+6]; - p1[7] = data[i+7]; - p1 += bufWidth * vSub; - } - } - } - } - --restartCtr; - } - } -} - -// Read one data unit from a sequential JPEG stream. -GBool DCTStream::readDataUnit(DCTHuffTable *dcHuffTable, - DCTHuffTable *acHuffTable, - int *prevDC, int data[64]) { - int run, size, amp; - int c; - int i, j; - - if ((size = readHuffSym(dcHuffTable)) == 9999) { - return gFalse; - } - if (size > 0) { - if ((amp = readAmp(size)) == 9999) { - return gFalse; - } - } else { - amp = 0; - } - data[0] = *prevDC += amp; - for (i = 1; i < 64; ++i) { - data[i] = 0; - } - i = 1; - while (i < 64) { - run = 0; - while ((c = readHuffSym(acHuffTable)) == 0xf0 && run < 0x30) { - run += 0x10; - } - if (c == 9999) { - return gFalse; - } - if (c == 0x00) { - break; - } else { - run += (c >> 4) & 0x0f; - size = c & 0x0f; - amp = readAmp(size); - if (amp == 9999) { - return gFalse; - } - i += run; - if (i < 64) { - j = dctZigZag[i++]; - data[j] = amp; - } - } - } - return gTrue; -} - -// Read one data unit from a sequential JPEG stream. -GBool DCTStream::readProgressiveDataUnit(DCTHuffTable *dcHuffTable, - DCTHuffTable *acHuffTable, - int *prevDC, int data[64]) { - int run, size, amp, bit, c; - int i, j, k; - - // get the DC coefficient - i = scanInfo.firstCoeff; - if (i == 0) { - if (scanInfo.ah == 0) { - if ((size = readHuffSym(dcHuffTable)) == 9999) { - return gFalse; - } - if (size > 0) { - if ((amp = readAmp(size)) == 9999) { - return gFalse; - } - } else { - amp = 0; - } - data[0] += (*prevDC += amp) << scanInfo.al; - } else { - if ((bit = readBit()) == 9999) { - return gFalse; - } - data[0] += bit << scanInfo.al; - } - ++i; - } - if (scanInfo.lastCoeff == 0) { - return gTrue; - } - - // check for an EOB run - if (eobRun > 0) { - while (i <= scanInfo.lastCoeff) { - j = dctZigZag[i++]; - if (data[j] != 0) { - if ((bit = readBit()) == EOF) { - return gFalse; - } - if (bit) { - data[j] += 1 << scanInfo.al; - } - } - } - --eobRun; - return gTrue; - } - - // read the AC coefficients - while (i <= scanInfo.lastCoeff) { - if ((c = readHuffSym(acHuffTable)) == 9999) { - return gFalse; - } - - // ZRL - if (c == 0xf0) { - k = 0; - while (k < 16) { - j = dctZigZag[i++]; - if (data[j] == 0) { - ++k; - } else { - if ((bit = readBit()) == EOF) { - return gFalse; - } - if (bit) { - data[j] += 1 << scanInfo.al; - } - } - } - - // EOB run - } else if ((c & 0x0f) == 0x00) { - j = c >> 4; - eobRun = 0; - for (k = 0; k < j; ++k) { - if ((bit = readBit()) == EOF) { - return gFalse; - } - eobRun = (eobRun << 1) | bit; - } - eobRun += 1 << j; - while (i <= scanInfo.lastCoeff) { - j = dctZigZag[i++]; - if (data[j] != 0) { - if ((bit = readBit()) == EOF) { - return gFalse; - } - if (bit) { - data[j] += 1 << scanInfo.al; - } - } - } - --eobRun; - break; - - // zero run and one AC coefficient - } else { - run = (c >> 4) & 0x0f; - size = c & 0x0f; - if ((amp = readAmp(size)) == 9999) { - return gFalse; - } - k = 0; - do { - j = dctZigZag[i++]; - while (data[j] != 0) { - if ((bit = readBit()) == EOF) { - return gFalse; - } - if (bit) { - data[j] += 1 << scanInfo.al; - } - j = dctZigZag[i++]; - } - ++k; - } while (k <= run); - data[j] = amp << scanInfo.al; - } - } - - return gTrue; -} - -// Decode a progressive JPEG image. -void DCTStream::decodeImage() { - int dataIn[64]; - Guchar dataOut[64]; - Gushort *quantTable; - int pY, pCb, pCr, pR, pG, pB; - int x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, cc, i; - int h, v, horiz, vert, hSub, vSub; - int *p0, *p1, *p2; - - for (y1 = 0; y1 < bufHeight; y1 += mcuHeight) { - for (x1 = 0; x1 < bufWidth; x1 += mcuWidth) { - for (cc = 0; cc < numComps; ++cc) { - quantTable = quantTables[compInfo[cc].quantTable]; - h = compInfo[cc].hSample; - v = compInfo[cc].vSample; - horiz = mcuWidth / h; - vert = mcuHeight / v; - hSub = horiz / 8; - vSub = vert / 8; - for (y2 = 0; y2 < mcuHeight; y2 += vert) { - for (x2 = 0; x2 < mcuWidth; x2 += horiz) { - - // pull out the coded data unit - p1 = &frameBuf[cc][(y1+y2) * bufWidth + (x1+x2)]; - for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) { - dataIn[i] = p1[0]; - dataIn[i+1] = p1[1]; - dataIn[i+2] = p1[2]; - dataIn[i+3] = p1[3]; - dataIn[i+4] = p1[4]; - dataIn[i+5] = p1[5]; - dataIn[i+6] = p1[6]; - dataIn[i+7] = p1[7]; - p1 += bufWidth * vSub; - } - - // transform - transformDataUnit(quantTable, dataIn, dataOut); - - // store back into frameBuf, doing replication for - // subsampled components - p1 = &frameBuf[cc][(y1+y2) * bufWidth + (x1+x2)]; - if (hSub == 1 && vSub == 1) { - for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) { - p1[0] = dataOut[i] & 0xff; - p1[1] = dataOut[i+1] & 0xff; - p1[2] = dataOut[i+2] & 0xff; - p1[3] = dataOut[i+3] & 0xff; - p1[4] = dataOut[i+4] & 0xff; - p1[5] = dataOut[i+5] & 0xff; - p1[6] = dataOut[i+6] & 0xff; - p1[7] = dataOut[i+7] & 0xff; - p1 += bufWidth; - } - } else if (hSub == 2 && vSub == 2) { - p2 = p1 + bufWidth; - for (y3 = 0, i = 0; y3 < 16; y3 += 2, i += 8) { - p1[0] = p1[1] = p2[0] = p2[1] = dataOut[i] & 0xff; - p1[2] = p1[3] = p2[2] = p2[3] = dataOut[i+1] & 0xff; - p1[4] = p1[5] = p2[4] = p2[5] = dataOut[i+2] & 0xff; - p1[6] = p1[7] = p2[6] = p2[7] = dataOut[i+3] & 0xff; - p1[8] = p1[9] = p2[8] = p2[9] = dataOut[i+4] & 0xff; - p1[10] = p1[11] = p2[10] = p2[11] = dataOut[i+5] & 0xff; - p1[12] = p1[13] = p2[12] = p2[13] = dataOut[i+6] & 0xff; - p1[14] = p1[15] = p2[14] = p2[15] = dataOut[i+7] & 0xff; - p1 += bufWidth * 2; - p2 += bufWidth * 2; - } - } else { - i = 0; - for (y3 = 0, y4 = 0; y3 < 8; ++y3, y4 += vSub) { - for (x3 = 0, x4 = 0; x3 < 8; ++x3, x4 += hSub) { - p2 = p1 + x4; - for (y5 = 0; y5 < vSub; ++y5) { - for (x5 = 0; x5 < hSub; ++x5) { - p2[x5] = dataOut[i] & 0xff; - } - p2 += bufWidth; - } - ++i; - } - p1 += bufWidth * vSub; - } - } - } - } - } - - // color space conversion - if (colorXform) { - // convert YCbCr to RGB - if (numComps == 3) { - for (y2 = 0; y2 < mcuHeight; ++y2) { - p0 = &frameBuf[0][(y1+y2) * bufWidth + x1]; - p1 = &frameBuf[1][(y1+y2) * bufWidth + x1]; - p2 = &frameBuf[2][(y1+y2) * bufWidth + x1]; - for (x2 = 0; x2 < mcuWidth; ++x2) { - pY = *p0; - pCb = *p1 - 128; - pCr = *p2 - 128; - pR = ((pY << 16) + dctCrToR * pCr + 32768) >> 16; - *p0++ = dctClip[dctClipOffset + pR]; - pG = ((pY << 16) + dctCbToG * pCb + dctCrToG * pCr + - 32768) >> 16; - *p1++ = dctClip[dctClipOffset + pG]; - pB = ((pY << 16) + dctCbToB * pCb + 32768) >> 16; - *p2++ = dctClip[dctClipOffset + pB]; - } - } - // convert YCbCrK to CMYK (K is passed through unchanged) - } else if (numComps == 4) { - for (y2 = 0; y2 < mcuHeight; ++y2) { - p0 = &frameBuf[0][(y1+y2) * bufWidth + x1]; - p1 = &frameBuf[1][(y1+y2) * bufWidth + x1]; - p2 = &frameBuf[2][(y1+y2) * bufWidth + x1]; - for (x2 = 0; x2 < mcuWidth; ++x2) { - pY = *p0; - pCb = *p1 - 128; - pCr = *p2 - 128; - pR = ((pY << 16) + dctCrToR * pCr + 32768) >> 16; - *p0++ = 255 - dctClip[dctClipOffset + pR]; - pG = ((pY << 16) + dctCbToG * pCb + dctCrToG * pCr + - 32768) >> 16; - *p1++ = 255 - dctClip[dctClipOffset + pG]; - pB = ((pY << 16) + dctCbToB * pCb + 32768) >> 16; - *p2++ = 255 - dctClip[dctClipOffset + pB]; - } - } - } - } - } - } -} - -// Transform one data unit -- this performs the dequantization and -// IDCT steps. This IDCT algorithm is taken from: -// Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz, -// "Practical Fast 1-D DCT Algorithms with 11 Multiplications", -// IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989, -// 988-991. -// The stage numbers mentioned in the comments refer to Figure 1 in this -// paper. -void DCTStream::transformDataUnit(Gushort *quantTable, - int dataIn[64], Guchar dataOut[64]) { - int v0, v1, v2, v3, v4, v5, v6, v7, t; - int *p; - int i; - - // dequant - for (i = 0; i < 64; ++i) { - dataIn[i] *= quantTable[i]; - } - - // inverse DCT on rows - for (i = 0; i < 64; i += 8) { - p = dataIn + i; - - // check for all-zero AC coefficients - if (p[1] == 0 && p[2] == 0 && p[3] == 0 && - p[4] == 0 && p[5] == 0 && p[6] == 0 && p[7] == 0) { - t = (dctSqrt2 * p[0] + 512) >> 10; - p[0] = t; - p[1] = t; - p[2] = t; - p[3] = t; - p[4] = t; - p[5] = t; - p[6] = t; - p[7] = t; - continue; - } - - // stage 4 - v0 = (dctSqrt2 * p[0] + 128) >> 8; - v1 = (dctSqrt2 * p[4] + 128) >> 8; - v2 = p[2]; - v3 = p[6]; - v4 = (dctSqrt1d2 * (p[1] - p[7]) + 128) >> 8; - v7 = (dctSqrt1d2 * (p[1] + p[7]) + 128) >> 8; - v5 = p[3] << 4; - v6 = p[5] << 4; - - // stage 3 - t = (v0 - v1+ 1) >> 1; - v0 = (v0 + v1 + 1) >> 1; - v1 = t; - t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8; - v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8; - v3 = t; - t = (v4 - v6 + 1) >> 1; - v4 = (v4 + v6 + 1) >> 1; - v6 = t; - t = (v7 + v5 + 1) >> 1; - v5 = (v7 - v5 + 1) >> 1; - v7 = t; - - // stage 2 - t = (v0 - v3 + 1) >> 1; - v0 = (v0 + v3 + 1) >> 1; - v3 = t; - t = (v1 - v2 + 1) >> 1; - v1 = (v1 + v2 + 1) >> 1; - v2 = t; - t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12; - v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12; - v7 = t; - t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12; - v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12; - v6 = t; - - // stage 1 - p[0] = v0 + v7; - p[7] = v0 - v7; - p[1] = v1 + v6; - p[6] = v1 - v6; - p[2] = v2 + v5; - p[5] = v2 - v5; - p[3] = v3 + v4; - p[4] = v3 - v4; - } - - // inverse DCT on columns - for (i = 0; i < 8; ++i) { - p = dataIn + i; - - // check for all-zero AC coefficients - if (p[1*8] == 0 && p[2*8] == 0 && p[3*8] == 0 && - p[4*8] == 0 && p[5*8] == 0 && p[6*8] == 0 && p[7*8] == 0) { - t = (dctSqrt2 * dataIn[i+0] + 8192) >> 14; - p[0*8] = t; - p[1*8] = t; - p[2*8] = t; - p[3*8] = t; - p[4*8] = t; - p[5*8] = t; - p[6*8] = t; - p[7*8] = t; - continue; - } - - // stage 4 - v0 = (dctSqrt2 * p[0*8] + 2048) >> 12; - v1 = (dctSqrt2 * p[4*8] + 2048) >> 12; - v2 = p[2*8]; - v3 = p[6*8]; - v4 = (dctSqrt1d2 * (p[1*8] - p[7*8]) + 2048) >> 12; - v7 = (dctSqrt1d2 * (p[1*8] + p[7*8]) + 2048) >> 12; - v5 = p[3*8]; - v6 = p[5*8]; - - // stage 3 - t = (v0 - v1 + 1) >> 1; - v0 = (v0 + v1 + 1) >> 1; - v1 = t; - t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12; - v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12; - v3 = t; - t = (v4 - v6 + 1) >> 1; - v4 = (v4 + v6 + 1) >> 1; - v6 = t; - t = (v7 + v5 + 1) >> 1; - v5 = (v7 - v5 + 1) >> 1; - v7 = t; - - // stage 2 - t = (v0 - v3 + 1) >> 1; - v0 = (v0 + v3 + 1) >> 1; - v3 = t; - t = (v1 - v2 + 1) >> 1; - v1 = (v1 + v2 + 1) >> 1; - v2 = t; - t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12; - v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12; - v7 = t; - t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12; - v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12; - v6 = t; - - // stage 1 - p[0*8] = v0 + v7; - p[7*8] = v0 - v7; - p[1*8] = v1 + v6; - p[6*8] = v1 - v6; - p[2*8] = v2 + v5; - p[5*8] = v2 - v5; - p[3*8] = v3 + v4; - p[4*8] = v3 - v4; - } - - // convert to 8-bit integers - for (i = 0; i < 64; ++i) { - dataOut[i] = dctClip[dctClipOffset + 128 + ((dataIn[i] + 8) >> 4)]; - } -} - -int DCTStream::readHuffSym(DCTHuffTable *table) { - Gushort code; - int bit; - int codeBits; - - code = 0; - codeBits = 0; - do { - // add a bit to the code - if ((bit = readBit()) == EOF) - return 9999; - code = (code << 1) + bit; - ++codeBits; - - // look up code - if (code - table->firstCode[codeBits] < table->numCodes[codeBits]) { - code -= table->firstCode[codeBits]; - return table->sym[table->firstSym[codeBits] + code]; - } - } while (codeBits < 16); - - error(getPos(), "Bad Huffman code in DCT stream"); - return 9999; -} - -int DCTStream::readAmp(int size) { - int amp, bit; - int bits; - - amp = 0; - for (bits = 0; bits < size; ++bits) { - if ((bit = readBit()) == EOF) - return 9999; - amp = (amp << 1) + bit; - } - if (amp < (1 << (size - 1))) - amp -= (1 << size) - 1; - return amp; -} - -int DCTStream::readBit() { - int bit; - int c, c2; - - if (inputBits == 0) { - if ((c = str->getChar()) == EOF) - return EOF; - if (c == 0xff) { - do { - c2 = str->getChar(); - } while (c2 == 0xff); - if (c2 != 0x00) { - error(getPos(), "Bad DCT data: missing 00 after ff"); - return EOF; - } - } - inputBuf = c; - inputBits = 8; - } - bit = (inputBuf >> (inputBits - 1)) & 1; - --inputBits; - return bit; -} - -GBool DCTStream::readHeader() { - GBool doScan; - int n; - int c = 0; - int i; - - // read headers - doScan = gFalse; - while (!doScan) { - c = readMarker(); - switch (c) { - case 0xc0: // SOF0 (sequential) - case 0xc1: // SOF1 (extended sequential) - if (!readBaselineSOF()) { - return gFalse; - } - break; - case 0xc2: // SOF2 (progressive) - if (!readProgressiveSOF()) { - return gFalse; - } - break; - case 0xc4: // DHT - if (!readHuffmanTables()) { - return gFalse; - } - break; - case 0xd8: // SOI - break; - case 0xd9: // EOI - return gFalse; - case 0xda: // SOS - if (!readScanInfo()) { - return gFalse; - } - doScan = gTrue; - break; - case 0xdb: // DQT - if (!readQuantTables()) { - return gFalse; - } - break; - case 0xdd: // DRI - if (!readRestartInterval()) { - return gFalse; - } - break; - case 0xe0: // APP0 - if (!readJFIFMarker()) { - return gFalse; - } - break; - case 0xee: // APP14 - if (!readAdobeMarker()) { - return gFalse; - } - break; - case EOF: - error(getPos(), "Bad DCT header"); - return gFalse; - default: - // skip APPn / COM / etc. - if (c >= 0xe0) { - n = read16() - 2; - for (i = 0; i < n; ++i) { - str->getChar(); - } - } else { - error(getPos(), "Unknown DCT marker <%02x>", c); - return gFalse; - } - break; - } - } - - return gTrue; -} - -GBool DCTStream::readBaselineSOF() { - int length; - int prec; - int i; - int c; - - length = read16(); - prec = str->getChar(); - height = read16(); - width = read16(); - numComps = str->getChar(); - if (numComps <= 0 || numComps > 4) { - error(getPos(), "Bad number of components in DCT stream"); - numComps = 0; - return gFalse; - } - if (prec != 8) { - error(getPos(), "Bad DCT precision %d", prec); - return gFalse; - } - for (i = 0; i < numComps; ++i) { - compInfo[i].id = str->getChar(); - c = str->getChar(); - compInfo[i].hSample = (c >> 4) & 0x0f; - compInfo[i].vSample = c & 0x0f; - compInfo[i].quantTable = str->getChar(); - } - progressive = gFalse; - return gTrue; -} - -GBool DCTStream::readProgressiveSOF() { - int length; - int prec; - int i; - int c; - - length = read16(); - prec = str->getChar(); - height = read16(); - width = read16(); - numComps = str->getChar(); - if (prec != 8) { - error(getPos(), "Bad DCT precision %d", prec); - return gFalse; - } - for (i = 0; i < numComps; ++i) { - compInfo[i].id = str->getChar(); - c = str->getChar(); - compInfo[i].hSample = (c >> 4) & 0x0f; - compInfo[i].vSample = c & 0x0f; - compInfo[i].quantTable = str->getChar(); - } - progressive = gTrue; - return gTrue; -} - -GBool DCTStream::readScanInfo() { - int length; - int id, c; - int i, j; - - length = read16() - 2; - scanInfo.numComps = str->getChar(); - if (scanInfo.numComps <= 0 || scanInfo.numComps > 4) { - error(getPos(), "Bad number of components in DCT stream"); - scanInfo.numComps = 0; - return gFalse; - } - --length; - if (length != 2 * scanInfo.numComps + 3) { - error(getPos(), "Bad DCT scan info block"); - return gFalse; - } - interleaved = scanInfo.numComps == numComps; - for (j = 0; j < numComps; ++j) { - scanInfo.comp[j] = gFalse; - scanInfo.dcHuffTable[j] = 0; - scanInfo.acHuffTable[j] = 0; - } - for (i = 0; i < scanInfo.numComps; ++i) { - id = str->getChar(); - // some (broken) DCT streams reuse ID numbers, but at least they - // keep the components in order, so we check compInfo[i] first to - // work around the problem - if (id == compInfo[i].id) { - j = i; - } else { - for (j = 0; j < numComps; ++j) { - if (id == compInfo[j].id) { - break; - } - } - if (j == numComps) { - error(getPos(), "Bad DCT component ID in scan info block"); - return gFalse; - } - } - scanInfo.comp[j] = gTrue; - c = str->getChar(); - scanInfo.dcHuffTable[j] = (c >> 4) & 0x0f; - scanInfo.acHuffTable[j] = c & 0x0f; - } - scanInfo.firstCoeff = str->getChar(); - scanInfo.lastCoeff = str->getChar(); - if (scanInfo.firstCoeff < 0 || scanInfo.lastCoeff > 63 || - scanInfo.firstCoeff > scanInfo.lastCoeff) { - error(getPos(), "Bad DCT coefficient numbers in scan info block"); - return gFalse; - } - c = str->getChar(); - scanInfo.ah = (c >> 4) & 0x0f; - scanInfo.al = c & 0x0f; - return gTrue; -} - -GBool DCTStream::readQuantTables() { - int length, prec, i, index; - - length = read16() - 2; - while (length > 0) { - index = str->getChar(); - prec = (index >> 4) & 0x0f; - index &= 0x0f; - if (prec > 1 || index >= 4) { - error(getPos(), "Bad DCT quantization table"); - return gFalse; - } - if (index == numQuantTables) { - numQuantTables = index + 1; - } - for (i = 0; i < 64; ++i) { - if (prec) { - quantTables[index][dctZigZag[i]] = read16(); - } else { - quantTables[index][dctZigZag[i]] = str->getChar(); - } - } - if (prec) { - length -= 129; - } else { - length -= 65; - } - } - return gTrue; -} - -GBool DCTStream::readHuffmanTables() { - DCTHuffTable *tbl; - int length; - int index; - Gushort code; - Guchar sym; - int i; - int c; - - length = read16() - 2; - while (length > 0) { - index = str->getChar(); - --length; - if ((index & 0x0f) >= 4) { - error(getPos(), "Bad DCT Huffman table"); - return gFalse; - } - if (index & 0x10) { - index &= 0x0f; - if (index >= numACHuffTables) - numACHuffTables = index+1; - tbl = &acHuffTables[index]; - } else { - index &= 0x0f; - if (index >= numDCHuffTables) - numDCHuffTables = index+1; - tbl = &dcHuffTables[index]; - } - sym = 0; - code = 0; - for (i = 1; i <= 16; ++i) { - c = str->getChar(); - tbl->firstSym[i] = sym; - tbl->firstCode[i] = code; - tbl->numCodes[i] = c; - sym += c; - code = (code + c) << 1; - } - length -= 16; - for (i = 0; i < sym; ++i) - tbl->sym[i] = str->getChar(); - length -= sym; - } - return gTrue; -} - -GBool DCTStream::readRestartInterval() { - int length; - - length = read16(); - if (length != 4) { - error(getPos(), "Bad DCT restart interval"); - return gFalse; - } - restartInterval = read16(); - return gTrue; -} - -GBool DCTStream::readJFIFMarker() { - int length, i; - char buf[5]; - int c; - - length = read16(); - length -= 2; - if (length >= 5) { - for (i = 0; i < 5; ++i) { - if ((c = str->getChar()) == EOF) { - error(getPos(), "Bad DCT APP0 marker"); - return gFalse; - } - buf[i] = c; - } - length -= 5; - if (!memcmp(buf, "JFIF\0", 5)) { - gotJFIFMarker = gTrue; - } - } - while (length > 0) { - if (str->getChar() == EOF) { - error(getPos(), "Bad DCT APP0 marker"); - return gFalse; - } - --length; - } - return gTrue; -} - -GBool DCTStream::readAdobeMarker() { - int length, i; - char buf[12]; - int c; - - length = read16(); - if (length < 14) { - goto err; - } - for (i = 0; i < 12; ++i) { - if ((c = str->getChar()) == EOF) { - goto err; - } - buf[i] = c; - } - if (strncmp(buf, "Adobe", 5)) { - goto err; - } - colorXform = buf[11]; - gotAdobeMarker = gTrue; - for (i = 14; i < length; ++i) { - if (str->getChar() == EOF) { - goto err; - } - } - return gTrue; - - err: - error(getPos(), "Bad DCT Adobe APP14 marker"); - return gFalse; -} - -GBool DCTStream::readTrailer() { - int c; - - c = readMarker(); - if (c != 0xd9) { // EOI - error(getPos(), "Bad DCT trailer"); - return gFalse; - } - return gTrue; -} - -int DCTStream::readMarker() { - int c; - - do { - do { - c = str->getChar(); - } while (c != 0xff && c != EOF); - while (c == 0xff) { - c = str->getChar(); - } - } while (c == 0x00); - return c; -} - -int DCTStream::read16() { - int c1, c2; - - if ((c1 = str->getChar()) == EOF) - return EOF; - if ((c2 = str->getChar()) == EOF) - return EOF; - return (c1 << 8) + c2; -} - -GooString *DCTStream::getPSFilter(int psLevel, char *indent) { - GooString *s; - - if (psLevel < 2) { - return NULL; - } - if (!(s = str->getPSFilter(psLevel, indent))) { - return NULL; - } - s->append(indent)->append("<< >> /DCTDecode filter\n"); - return s; -} - -GBool DCTStream::isBinary(GBool last) { - return str->isBinary(gTrue); -} - -#endif - -#ifndef ENABLE_ZLIB -//------------------------------------------------------------------------ -// FlateStream -//------------------------------------------------------------------------ - -int FlateStream::codeLenCodeMap[flateMaxCodeLenCodes] = { - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 -}; - -FlateDecode FlateStream::lengthDecode[flateMaxLitCodes-257] = { - {0, 3}, - {0, 4}, - {0, 5}, - {0, 6}, - {0, 7}, - {0, 8}, - {0, 9}, - {0, 10}, - {1, 11}, - {1, 13}, - {1, 15}, - {1, 17}, - {2, 19}, - {2, 23}, - {2, 27}, - {2, 31}, - {3, 35}, - {3, 43}, - {3, 51}, - {3, 59}, - {4, 67}, - {4, 83}, - {4, 99}, - {4, 115}, - {5, 131}, - {5, 163}, - {5, 195}, - {5, 227}, - {0, 258}, - {0, 258}, - {0, 258} -}; - -FlateDecode FlateStream::distDecode[flateMaxDistCodes] = { - { 0, 1}, - { 0, 2}, - { 0, 3}, - { 0, 4}, - { 1, 5}, - { 1, 7}, - { 2, 9}, - { 2, 13}, - { 3, 17}, - { 3, 25}, - { 4, 33}, - { 4, 49}, - { 5, 65}, - { 5, 97}, - { 6, 129}, - { 6, 193}, - { 7, 257}, - { 7, 385}, - { 8, 513}, - { 8, 769}, - { 9, 1025}, - { 9, 1537}, - {10, 2049}, - {10, 3073}, - {11, 4097}, - {11, 6145}, - {12, 8193}, - {12, 12289}, - {13, 16385}, - {13, 24577} -}; - -static FlateCode flateFixedLitCodeTabCodes[512] = { - {7, 0x0100}, - {8, 0x0050}, - {8, 0x0010}, - {8, 0x0118}, - {7, 0x0110}, - {8, 0x0070}, - {8, 0x0030}, - {9, 0x00c0}, - {7, 0x0108}, - {8, 0x0060}, - {8, 0x0020}, - {9, 0x00a0}, - {8, 0x0000}, - {8, 0x0080}, - {8, 0x0040}, - {9, 0x00e0}, - {7, 0x0104}, - {8, 0x0058}, - {8, 0x0018}, - {9, 0x0090}, - {7, 0x0114}, - {8, 0x0078}, - {8, 0x0038}, - {9, 0x00d0}, - {7, 0x010c}, - {8, 0x0068}, - {8, 0x0028}, - {9, 0x00b0}, - {8, 0x0008}, - {8, 0x0088}, - {8, 0x0048}, - {9, 0x00f0}, - {7, 0x0102}, - {8, 0x0054}, - {8, 0x0014}, - {8, 0x011c}, - {7, 0x0112}, - {8, 0x0074}, - {8, 0x0034}, - {9, 0x00c8}, - {7, 0x010a}, - {8, 0x0064}, - {8, 0x0024}, - {9, 0x00a8}, - {8, 0x0004}, - {8, 0x0084}, - {8, 0x0044}, - {9, 0x00e8}, - {7, 0x0106}, - {8, 0x005c}, - {8, 0x001c}, - {9, 0x0098}, - {7, 0x0116}, - {8, 0x007c}, - {8, 0x003c}, - {9, 0x00d8}, - {7, 0x010e}, - {8, 0x006c}, - {8, 0x002c}, - {9, 0x00b8}, - {8, 0x000c}, - {8, 0x008c}, - {8, 0x004c}, - {9, 0x00f8}, - {7, 0x0101}, - {8, 0x0052}, - {8, 0x0012}, - {8, 0x011a}, - {7, 0x0111}, - {8, 0x0072}, - {8, 0x0032}, - {9, 0x00c4}, - {7, 0x0109}, - {8, 0x0062}, - {8, 0x0022}, - {9, 0x00a4}, - {8, 0x0002}, - {8, 0x0082}, - {8, 0x0042}, - {9, 0x00e4}, - {7, 0x0105}, - {8, 0x005a}, - {8, 0x001a}, - {9, 0x0094}, - {7, 0x0115}, - {8, 0x007a}, - {8, 0x003a}, - {9, 0x00d4}, - {7, 0x010d}, - {8, 0x006a}, - {8, 0x002a}, - {9, 0x00b4}, - {8, 0x000a}, - {8, 0x008a}, - {8, 0x004a}, - {9, 0x00f4}, - {7, 0x0103}, - {8, 0x0056}, - {8, 0x0016}, - {8, 0x011e}, - {7, 0x0113}, - {8, 0x0076}, - {8, 0x0036}, - {9, 0x00cc}, - {7, 0x010b}, - {8, 0x0066}, - {8, 0x0026}, - {9, 0x00ac}, - {8, 0x0006}, - {8, 0x0086}, - {8, 0x0046}, - {9, 0x00ec}, - {7, 0x0107}, - {8, 0x005e}, - {8, 0x001e}, - {9, 0x009c}, - {7, 0x0117}, - {8, 0x007e}, - {8, 0x003e}, - {9, 0x00dc}, - {7, 0x010f}, - {8, 0x006e}, - {8, 0x002e}, - {9, 0x00bc}, - {8, 0x000e}, - {8, 0x008e}, - {8, 0x004e}, - {9, 0x00fc}, - {7, 0x0100}, - {8, 0x0051}, - {8, 0x0011}, - {8, 0x0119}, - {7, 0x0110}, - {8, 0x0071}, - {8, 0x0031}, - {9, 0x00c2}, - {7, 0x0108}, - {8, 0x0061}, - {8, 0x0021}, - {9, 0x00a2}, - {8, 0x0001}, - {8, 0x0081}, - {8, 0x0041}, - {9, 0x00e2}, - {7, 0x0104}, - {8, 0x0059}, - {8, 0x0019}, - {9, 0x0092}, - {7, 0x0114}, - {8, 0x0079}, - {8, 0x0039}, - {9, 0x00d2}, - {7, 0x010c}, - {8, 0x0069}, - {8, 0x0029}, - {9, 0x00b2}, - {8, 0x0009}, - {8, 0x0089}, - {8, 0x0049}, - {9, 0x00f2}, - {7, 0x0102}, - {8, 0x0055}, - {8, 0x0015}, - {8, 0x011d}, - {7, 0x0112}, - {8, 0x0075}, - {8, 0x0035}, - {9, 0x00ca}, - {7, 0x010a}, - {8, 0x0065}, - {8, 0x0025}, - {9, 0x00aa}, - {8, 0x0005}, - {8, 0x0085}, - {8, 0x0045}, - {9, 0x00ea}, - {7, 0x0106}, - {8, 0x005d}, - {8, 0x001d}, - {9, 0x009a}, - {7, 0x0116}, - {8, 0x007d}, - {8, 0x003d}, - {9, 0x00da}, - {7, 0x010e}, - {8, 0x006d}, - {8, 0x002d}, - {9, 0x00ba}, - {8, 0x000d}, - {8, 0x008d}, - {8, 0x004d}, - {9, 0x00fa}, - {7, 0x0101}, - {8, 0x0053}, - {8, 0x0013}, - {8, 0x011b}, - {7, 0x0111}, - {8, 0x0073}, - {8, 0x0033}, - {9, 0x00c6}, - {7, 0x0109}, - {8, 0x0063}, - {8, 0x0023}, - {9, 0x00a6}, - {8, 0x0003}, - {8, 0x0083}, - {8, 0x0043}, - {9, 0x00e6}, - {7, 0x0105}, - {8, 0x005b}, - {8, 0x001b}, - {9, 0x0096}, - {7, 0x0115}, - {8, 0x007b}, - {8, 0x003b}, - {9, 0x00d6}, - {7, 0x010d}, - {8, 0x006b}, - {8, 0x002b}, - {9, 0x00b6}, - {8, 0x000b}, - {8, 0x008b}, - {8, 0x004b}, - {9, 0x00f6}, - {7, 0x0103}, - {8, 0x0057}, - {8, 0x0017}, - {8, 0x011f}, - {7, 0x0113}, - {8, 0x0077}, - {8, 0x0037}, - {9, 0x00ce}, - {7, 0x010b}, - {8, 0x0067}, - {8, 0x0027}, - {9, 0x00ae}, - {8, 0x0007}, - {8, 0x0087}, - {8, 0x0047}, - {9, 0x00ee}, - {7, 0x0107}, - {8, 0x005f}, - {8, 0x001f}, - {9, 0x009e}, - {7, 0x0117}, - {8, 0x007f}, - {8, 0x003f}, - {9, 0x00de}, - {7, 0x010f}, - {8, 0x006f}, - {8, 0x002f}, - {9, 0x00be}, - {8, 0x000f}, - {8, 0x008f}, - {8, 0x004f}, - {9, 0x00fe}, - {7, 0x0100}, - {8, 0x0050}, - {8, 0x0010}, - {8, 0x0118}, - {7, 0x0110}, - {8, 0x0070}, - {8, 0x0030}, - {9, 0x00c1}, - {7, 0x0108}, - {8, 0x0060}, - {8, 0x0020}, - {9, 0x00a1}, - {8, 0x0000}, - {8, 0x0080}, - {8, 0x0040}, - {9, 0x00e1}, - {7, 0x0104}, - {8, 0x0058}, - {8, 0x0018}, - {9, 0x0091}, - {7, 0x0114}, - {8, 0x0078}, - {8, 0x0038}, - {9, 0x00d1}, - {7, 0x010c}, - {8, 0x0068}, - {8, 0x0028}, - {9, 0x00b1}, - {8, 0x0008}, - {8, 0x0088}, - {8, 0x0048}, - {9, 0x00f1}, - {7, 0x0102}, - {8, 0x0054}, - {8, 0x0014}, - {8, 0x011c}, - {7, 0x0112}, - {8, 0x0074}, - {8, 0x0034}, - {9, 0x00c9}, - {7, 0x010a}, - {8, 0x0064}, - {8, 0x0024}, - {9, 0x00a9}, - {8, 0x0004}, - {8, 0x0084}, - {8, 0x0044}, - {9, 0x00e9}, - {7, 0x0106}, - {8, 0x005c}, - {8, 0x001c}, - {9, 0x0099}, - {7, 0x0116}, - {8, 0x007c}, - {8, 0x003c}, - {9, 0x00d9}, - {7, 0x010e}, - {8, 0x006c}, - {8, 0x002c}, - {9, 0x00b9}, - {8, 0x000c}, - {8, 0x008c}, - {8, 0x004c}, - {9, 0x00f9}, - {7, 0x0101}, - {8, 0x0052}, - {8, 0x0012}, - {8, 0x011a}, - {7, 0x0111}, - {8, 0x0072}, - {8, 0x0032}, - {9, 0x00c5}, - {7, 0x0109}, - {8, 0x0062}, - {8, 0x0022}, - {9, 0x00a5}, - {8, 0x0002}, - {8, 0x0082}, - {8, 0x0042}, - {9, 0x00e5}, - {7, 0x0105}, - {8, 0x005a}, - {8, 0x001a}, - {9, 0x0095}, - {7, 0x0115}, - {8, 0x007a}, - {8, 0x003a}, - {9, 0x00d5}, - {7, 0x010d}, - {8, 0x006a}, - {8, 0x002a}, - {9, 0x00b5}, - {8, 0x000a}, - {8, 0x008a}, - {8, 0x004a}, - {9, 0x00f5}, - {7, 0x0103}, - {8, 0x0056}, - {8, 0x0016}, - {8, 0x011e}, - {7, 0x0113}, - {8, 0x0076}, - {8, 0x0036}, - {9, 0x00cd}, - {7, 0x010b}, - {8, 0x0066}, - {8, 0x0026}, - {9, 0x00ad}, - {8, 0x0006}, - {8, 0x0086}, - {8, 0x0046}, - {9, 0x00ed}, - {7, 0x0107}, - {8, 0x005e}, - {8, 0x001e}, - {9, 0x009d}, - {7, 0x0117}, - {8, 0x007e}, - {8, 0x003e}, - {9, 0x00dd}, - {7, 0x010f}, - {8, 0x006e}, - {8, 0x002e}, - {9, 0x00bd}, - {8, 0x000e}, - {8, 0x008e}, - {8, 0x004e}, - {9, 0x00fd}, - {7, 0x0100}, - {8, 0x0051}, - {8, 0x0011}, - {8, 0x0119}, - {7, 0x0110}, - {8, 0x0071}, - {8, 0x0031}, - {9, 0x00c3}, - {7, 0x0108}, - {8, 0x0061}, - {8, 0x0021}, - {9, 0x00a3}, - {8, 0x0001}, - {8, 0x0081}, - {8, 0x0041}, - {9, 0x00e3}, - {7, 0x0104}, - {8, 0x0059}, - {8, 0x0019}, - {9, 0x0093}, - {7, 0x0114}, - {8, 0x0079}, - {8, 0x0039}, - {9, 0x00d3}, - {7, 0x010c}, - {8, 0x0069}, - {8, 0x0029}, - {9, 0x00b3}, - {8, 0x0009}, - {8, 0x0089}, - {8, 0x0049}, - {9, 0x00f3}, - {7, 0x0102}, - {8, 0x0055}, - {8, 0x0015}, - {8, 0x011d}, - {7, 0x0112}, - {8, 0x0075}, - {8, 0x0035}, - {9, 0x00cb}, - {7, 0x010a}, - {8, 0x0065}, - {8, 0x0025}, - {9, 0x00ab}, - {8, 0x0005}, - {8, 0x0085}, - {8, 0x0045}, - {9, 0x00eb}, - {7, 0x0106}, - {8, 0x005d}, - {8, 0x001d}, - {9, 0x009b}, - {7, 0x0116}, - {8, 0x007d}, - {8, 0x003d}, - {9, 0x00db}, - {7, 0x010e}, - {8, 0x006d}, - {8, 0x002d}, - {9, 0x00bb}, - {8, 0x000d}, - {8, 0x008d}, - {8, 0x004d}, - {9, 0x00fb}, - {7, 0x0101}, - {8, 0x0053}, - {8, 0x0013}, - {8, 0x011b}, - {7, 0x0111}, - {8, 0x0073}, - {8, 0x0033}, - {9, 0x00c7}, - {7, 0x0109}, - {8, 0x0063}, - {8, 0x0023}, - {9, 0x00a7}, - {8, 0x0003}, - {8, 0x0083}, - {8, 0x0043}, - {9, 0x00e7}, - {7, 0x0105}, - {8, 0x005b}, - {8, 0x001b}, - {9, 0x0097}, - {7, 0x0115}, - {8, 0x007b}, - {8, 0x003b}, - {9, 0x00d7}, - {7, 0x010d}, - {8, 0x006b}, - {8, 0x002b}, - {9, 0x00b7}, - {8, 0x000b}, - {8, 0x008b}, - {8, 0x004b}, - {9, 0x00f7}, - {7, 0x0103}, - {8, 0x0057}, - {8, 0x0017}, - {8, 0x011f}, - {7, 0x0113}, - {8, 0x0077}, - {8, 0x0037}, - {9, 0x00cf}, - {7, 0x010b}, - {8, 0x0067}, - {8, 0x0027}, - {9, 0x00af}, - {8, 0x0007}, - {8, 0x0087}, - {8, 0x0047}, - {9, 0x00ef}, - {7, 0x0107}, - {8, 0x005f}, - {8, 0x001f}, - {9, 0x009f}, - {7, 0x0117}, - {8, 0x007f}, - {8, 0x003f}, - {9, 0x00df}, - {7, 0x010f}, - {8, 0x006f}, - {8, 0x002f}, - {9, 0x00bf}, - {8, 0x000f}, - {8, 0x008f}, - {8, 0x004f}, - {9, 0x00ff} -}; - -FlateHuffmanTab FlateStream::fixedLitCodeTab = { - flateFixedLitCodeTabCodes, 9 -}; - -static FlateCode flateFixedDistCodeTabCodes[32] = { - {5, 0x0000}, - {5, 0x0010}, - {5, 0x0008}, - {5, 0x0018}, - {5, 0x0004}, - {5, 0x0014}, - {5, 0x000c}, - {5, 0x001c}, - {5, 0x0002}, - {5, 0x0012}, - {5, 0x000a}, - {5, 0x001a}, - {5, 0x0006}, - {5, 0x0016}, - {5, 0x000e}, - {0, 0x0000}, - {5, 0x0001}, - {5, 0x0011}, - {5, 0x0009}, - {5, 0x0019}, - {5, 0x0005}, - {5, 0x0015}, - {5, 0x000d}, - {5, 0x001d}, - {5, 0x0003}, - {5, 0x0013}, - {5, 0x000b}, - {5, 0x001b}, - {5, 0x0007}, - {5, 0x0017}, - {5, 0x000f}, - {0, 0x0000} -}; - -FlateHuffmanTab FlateStream::fixedDistCodeTab = { - flateFixedDistCodeTabCodes, 5 -}; - -FlateStream::FlateStream(Stream *strA, int predictor, int columns, - int colors, int bits): - FilterStream(strA) { - if (predictor != 1) { - pred = new StreamPredictor(this, predictor, columns, colors, bits); - if (!pred->isOk()) { - delete pred; - pred = NULL; - } - } else { - pred = NULL; - } - litCodeTab.codes = NULL; - distCodeTab.codes = NULL; - memset(buf, 0, flateWindow); -} - -FlateStream::~FlateStream() { - if (litCodeTab.codes != fixedLitCodeTab.codes) { - gfree(litCodeTab.codes); - } - if (distCodeTab.codes != fixedDistCodeTab.codes) { - gfree(distCodeTab.codes); - } - if (pred) { - delete pred; - } - delete str; -} - -void FlateStream::unfilteredReset() { - index = 0; - remain = 0; - codeBuf = 0; - codeSize = 0; - compressedBlock = gFalse; - endOfBlock = gTrue; - eof = gTrue; - - str->reset(); -} - -void FlateStream::reset() { - int cmf, flg; - - unfilteredReset(); - - // read header - //~ need to look at window size? - endOfBlock = eof = gTrue; - cmf = str->getChar(); - flg = str->getChar(); - if (cmf == EOF || flg == EOF) - return; - if ((cmf & 0x0f) != 0x08) { - error(getPos(), "Unknown compression method in flate stream"); - return; - } - if ((((cmf << 8) + flg) % 31) != 0) { - error(getPos(), "Bad FCHECK in flate stream"); - return; - } - if (flg & 0x20) { - error(getPos(), "FDICT bit set in flate stream"); - return; - } - - eof = gFalse; -} - -int FlateStream::getChar() { - return doGetChar(); -} - -int FlateStream::getChars(int nChars, Guchar *buffer) { - if (pred) { - return pred->getChars(nChars, buffer); - } else { - for (int i = 0; i < nChars; ++i) { - const int c = doGetChar(); - if (likely(c != EOF)) buffer[i] = c; - else return i; - } - return nChars; - } -} - -int FlateStream::lookChar() { - int c; - - if (pred) { - return pred->lookChar(); - } - while (remain == 0) { - if (endOfBlock && eof) - return EOF; - readSome(); - } - c = buf[index]; - return c; -} - -void FlateStream::getRawChars(int nChars, int *buffer) { - for (int i = 0; i < nChars; ++i) - buffer[i] = doGetRawChar(); -} - -int FlateStream::getRawChar() { - return doGetRawChar(); -} - -GooString *FlateStream::getPSFilter(int psLevel, char *indent) { - GooString *s; - - if (psLevel < 3 || pred) { - return NULL; - } - if (!(s = str->getPSFilter(psLevel, indent))) { - return NULL; - } - s->append(indent)->append("<< >> /FlateDecode filter\n"); - return s; -} - -GBool FlateStream::isBinary(GBool last) { - return str->isBinary(gTrue); -} - -void FlateStream::readSome() { - int code1, code2; - int len, dist; - int i, j, k; - int c; - - if (endOfBlock) { - if (!startBlock()) - return; - } - - if (compressedBlock) { - if ((code1 = getHuffmanCodeWord(&litCodeTab)) == EOF) - goto err; - if (code1 < 256) { - buf[index] = code1; - remain = 1; - } else if (code1 == 256) { - endOfBlock = gTrue; - remain = 0; - } else { - code1 -= 257; - code2 = lengthDecode[code1].bits; - if (code2 > 0 && (code2 = getCodeWord(code2)) == EOF) - goto err; - len = lengthDecode[code1].first + code2; - if ((code1 = getHuffmanCodeWord(&distCodeTab)) == EOF) - goto err; - code2 = distDecode[code1].bits; - if (code2 > 0 && (code2 = getCodeWord(code2)) == EOF) - goto err; - dist = distDecode[code1].first + code2; - i = index; - j = (index - dist) & flateMask; - for (k = 0; k < len; ++k) { - buf[i] = buf[j]; - i = (i + 1) & flateMask; - j = (j + 1) & flateMask; - } - remain = len; - } - - } else { - len = (blockLen < flateWindow) ? blockLen : flateWindow; - for (i = 0, j = index; i < len; ++i, j = (j + 1) & flateMask) { - if ((c = str->getChar()) == EOF) { - endOfBlock = eof = gTrue; - break; - } - buf[j] = c & 0xff; - } - remain = i; - blockLen -= len; - if (blockLen == 0) - endOfBlock = gTrue; - } - - return; - -err: - error(getPos(), "Unexpected end of file in flate stream"); - endOfBlock = eof = gTrue; - remain = 0; -} - -GBool FlateStream::startBlock() { - int blockHdr; - int c; - int check; - - // free the code tables from the previous block - if (litCodeTab.codes != fixedLitCodeTab.codes) { - gfree(litCodeTab.codes); - } - litCodeTab.codes = NULL; - if (distCodeTab.codes != fixedDistCodeTab.codes) { - gfree(distCodeTab.codes); - } - distCodeTab.codes = NULL; - - // read block header - blockHdr = getCodeWord(3); - if (blockHdr & 1) - eof = gTrue; - blockHdr >>= 1; - - // uncompressed block - if (blockHdr == 0) { - compressedBlock = gFalse; - if ((c = str->getChar()) == EOF) - goto err; - blockLen = c & 0xff; - if ((c = str->getChar()) == EOF) - goto err; - blockLen |= (c & 0xff) << 8; - if ((c = str->getChar()) == EOF) - goto err; - check = c & 0xff; - if ((c = str->getChar()) == EOF) - goto err; - check |= (c & 0xff) << 8; - if (check != (~blockLen & 0xffff)) - error(getPos(), "Bad uncompressed block length in flate stream"); - codeBuf = 0; - codeSize = 0; - - // compressed block with fixed codes - } else if (blockHdr == 1) { - compressedBlock = gTrue; - loadFixedCodes(); - - // compressed block with dynamic codes - } else if (blockHdr == 2) { - compressedBlock = gTrue; - if (!readDynamicCodes()) { - goto err; - } - - // unknown block type - } else { - goto err; - } - - endOfBlock = gFalse; - return gTrue; - -err: - error(getPos(), "Bad block header in flate stream"); - endOfBlock = eof = gTrue; - return gFalse; -} - -void FlateStream::loadFixedCodes() { - litCodeTab.codes = fixedLitCodeTab.codes; - litCodeTab.maxLen = fixedLitCodeTab.maxLen; - distCodeTab.codes = fixedDistCodeTab.codes; - distCodeTab.maxLen = fixedDistCodeTab.maxLen; -} - -GBool FlateStream::readDynamicCodes() { - int numCodeLenCodes; - int numLitCodes; - int numDistCodes; - int codeLenCodeLengths[flateMaxCodeLenCodes]; - FlateHuffmanTab codeLenCodeTab; - int len, repeat, code; - int i; - - codeLenCodeTab.codes = NULL; - - // read lengths - if ((numLitCodes = getCodeWord(5)) == EOF) { - goto err; - } - numLitCodes += 257; - if ((numDistCodes = getCodeWord(5)) == EOF) { - goto err; - } - numDistCodes += 1; - if ((numCodeLenCodes = getCodeWord(4)) == EOF) { - goto err; - } - numCodeLenCodes += 4; - if (numLitCodes > flateMaxLitCodes || - numDistCodes > flateMaxDistCodes || - numCodeLenCodes > flateMaxCodeLenCodes) { - goto err; - } - - // build the code length code table - for (i = 0; i < flateMaxCodeLenCodes; ++i) { - codeLenCodeLengths[i] = 0; - } - for (i = 0; i < numCodeLenCodes; ++i) { - if ((codeLenCodeLengths[codeLenCodeMap[i]] = getCodeWord(3)) == -1) { - goto err; - } - } - compHuffmanCodes(codeLenCodeLengths, flateMaxCodeLenCodes, &codeLenCodeTab); - - // build the literal and distance code tables - len = 0; - repeat = 0; - i = 0; - while (i < numLitCodes + numDistCodes) { - if ((code = getHuffmanCodeWord(&codeLenCodeTab)) == EOF) { - goto err; - } - if (code == 16) { - if ((repeat = getCodeWord(2)) == EOF) { - goto err; - } - repeat += 3; - if (i + repeat > numLitCodes + numDistCodes) { - goto err; - } - for (; repeat > 0; --repeat) { - codeLengths[i++] = len; - } - } else if (code == 17) { - if ((repeat = getCodeWord(3)) == EOF) { - goto err; - } - repeat += 3; - if (i + repeat > numLitCodes + numDistCodes) { - goto err; - } - len = 0; - for (; repeat > 0; --repeat) { - codeLengths[i++] = 0; - } - } else if (code == 18) { - if ((repeat = getCodeWord(7)) == EOF) { - goto err; - } - repeat += 11; - if (i + repeat > numLitCodes + numDistCodes) { - goto err; - } - len = 0; - for (; repeat > 0; --repeat) { - codeLengths[i++] = 0; - } - } else { - codeLengths[i++] = len = code; - } - } - compHuffmanCodes(codeLengths, numLitCodes, &litCodeTab); - compHuffmanCodes(codeLengths + numLitCodes, numDistCodes, &distCodeTab); - - gfree(codeLenCodeTab.codes); - return gTrue; - -err: - error(getPos(), "Bad dynamic code table in flate stream"); - gfree(codeLenCodeTab.codes); - return gFalse; -} - -// Convert an array <lengths> of <n> lengths, in value order, into a -// Huffman code lookup table. -void FlateStream::compHuffmanCodes(int *lengths, int n, FlateHuffmanTab *tab) { - int tabSize, len, code, code2, skip, val, i, t; - - // find max code length - tab->maxLen = 0; - for (val = 0; val < n; ++val) { - if (lengths[val] > tab->maxLen) { - tab->maxLen = lengths[val]; - } - } - - // allocate the table - tabSize = 1 << tab->maxLen; - tab->codes = (FlateCode *)gmallocn(tabSize, sizeof(FlateCode)); - - // clear the table - for (i = 0; i < tabSize; ++i) { - tab->codes[i].len = 0; - tab->codes[i].val = 0; - } - - // build the table - for (len = 1, code = 0, skip = 2; - len <= tab->maxLen; - ++len, code <<= 1, skip <<= 1) { - for (val = 0; val < n; ++val) { - if (lengths[val] == len) { - - // bit-reverse the code - code2 = 0; - t = code; - for (i = 0; i < len; ++i) { - code2 = (code2 << 1) | (t & 1); - t >>= 1; - } - - // fill in the table entries - for (i = code2; i < tabSize; i += skip) { - tab->codes[i].len = (Gushort)len; - tab->codes[i].val = (Gushort)val; - } - - ++code; - } - } - } -} - -int FlateStream::getHuffmanCodeWord(FlateHuffmanTab *tab) { - FlateCode *code; - int c; - - while (codeSize < tab->maxLen) { - if ((c = str->getChar()) == EOF) { - break; - } - codeBuf |= (c & 0xff) << codeSize; - codeSize += 8; - } - code = &tab->codes[codeBuf & ((1 << tab->maxLen) - 1)]; - if (codeSize == 0 || codeSize < code->len || code->len == 0) { - return EOF; - } - codeBuf >>= code->len; - codeSize -= code->len; - return (int)code->val; -} - -int FlateStream::getCodeWord(int bits) { - int c; - - while (codeSize < bits) { - if ((c = str->getChar()) == EOF) - return EOF; - codeBuf |= (c & 0xff) << codeSize; - codeSize += 8; - } - c = codeBuf & ((1 << bits) - 1); - codeBuf >>= bits; - codeSize -= bits; - return c; -} -#endif - -//------------------------------------------------------------------------ -// EOFStream -//------------------------------------------------------------------------ - -EOFStream::EOFStream(Stream *strA): - FilterStream(strA) { -} - -EOFStream::~EOFStream() { - delete str; -} - -//------------------------------------------------------------------------ -// FixedLengthEncoder -//------------------------------------------------------------------------ - -FixedLengthEncoder::FixedLengthEncoder(Stream *strA, int lengthA): - FilterStream(strA) { - length = lengthA; - count = 0; -} - -FixedLengthEncoder::~FixedLengthEncoder() { - if (str->isEncoder()) - delete str; -} - -void FixedLengthEncoder::reset() { - str->reset(); - count = 0; -} - -int FixedLengthEncoder::getChar() { - if (length >= 0 && count >= length) - return EOF; - ++count; - return str->getChar(); -} - -int FixedLengthEncoder::lookChar() { - if (length >= 0 && count >= length) - return EOF; - return str->getChar(); -} - -GBool FixedLengthEncoder::isBinary(GBool last) { - return str->isBinary(gTrue); -} - -//------------------------------------------------------------------------ -// ASCIIHexEncoder -//------------------------------------------------------------------------ - -ASCIIHexEncoder::ASCIIHexEncoder(Stream *strA): - FilterStream(strA) { - bufPtr = bufEnd = buf; - lineLen = 0; - eof = gFalse; -} - -ASCIIHexEncoder::~ASCIIHexEncoder() { - if (str->isEncoder()) { - delete str; - } -} - -void ASCIIHexEncoder::reset() { - str->reset(); - bufPtr = bufEnd = buf; - lineLen = 0; - eof = gFalse; -} - -GBool ASCIIHexEncoder::fillBuf() { - static const char *hex = "0123456789abcdef"; - int c; - - if (eof) { - return gFalse; - } - bufPtr = bufEnd = buf; - if ((c = str->getChar()) == EOF) { - *bufEnd++ = '>'; - eof = gTrue; - } else { - if (lineLen >= 64) { - *bufEnd++ = '\n'; - lineLen = 0; - } - *bufEnd++ = hex[(c >> 4) & 0x0f]; - *bufEnd++ = hex[c & 0x0f]; - lineLen += 2; - } - return gTrue; -} - -//------------------------------------------------------------------------ -// ASCII85Encoder -//------------------------------------------------------------------------ - -ASCII85Encoder::ASCII85Encoder(Stream *strA): - FilterStream(strA) { - bufPtr = bufEnd = buf; - lineLen = 0; - eof = gFalse; -} - -ASCII85Encoder::~ASCII85Encoder() { - if (str->isEncoder()) - delete str; -} - -void ASCII85Encoder::reset() { - str->reset(); - bufPtr = bufEnd = buf; - lineLen = 0; - eof = gFalse; -} - -GBool ASCII85Encoder::fillBuf() { - Guint t; - char buf1[5]; - int c0, c1, c2, c3; - int n, i; - - if (eof) { - return gFalse; - } - c0 = str->getChar(); - c1 = str->getChar(); - c2 = str->getChar(); - c3 = str->getChar(); - bufPtr = bufEnd = buf; - if (c3 == EOF) { - if (c0 == EOF) { - n = 0; - t = 0; - } else { - if (c1 == EOF) { - n = 1; - t = c0 << 24; - } else if (c2 == EOF) { - n = 2; - t = (c0 << 24) | (c1 << 16); - } else { - n = 3; - t = (c0 << 24) | (c1 << 16) | (c2 << 8); - } - for (i = 4; i >= 0; --i) { - buf1[i] = (char)(t % 85 + 0x21); - t /= 85; - } - for (i = 0; i <= n; ++i) { - *bufEnd++ = buf1[i]; - if (++lineLen == 65) { - *bufEnd++ = '\n'; - lineLen = 0; - } - } - } - *bufEnd++ = '~'; - *bufEnd++ = '>'; - eof = gTrue; - } else { - t = (c0 << 24) | (c1 << 16) | (c2 << 8) | c3; - if (t == 0) { - *bufEnd++ = 'z'; - if (++lineLen == 65) { - *bufEnd++ = '\n'; - lineLen = 0; - } - } else { - for (i = 4; i >= 0; --i) { - buf1[i] = (char)(t % 85 + 0x21); - t /= 85; - } - for (i = 0; i <= 4; ++i) { - *bufEnd++ = buf1[i]; - if (++lineLen == 65) { - *bufEnd++ = '\n'; - lineLen = 0; - } - } - } - } - return gTrue; -} - -//------------------------------------------------------------------------ -// RunLengthEncoder -//------------------------------------------------------------------------ - -RunLengthEncoder::RunLengthEncoder(Stream *strA): - FilterStream(strA) { - bufPtr = bufEnd = nextEnd = buf; - eof = gFalse; -} - -RunLengthEncoder::~RunLengthEncoder() { - if (str->isEncoder()) - delete str; -} - -void RunLengthEncoder::reset() { - str->reset(); - bufPtr = bufEnd = nextEnd = buf; - eof = gFalse; -} - -// -// When fillBuf finishes, buf[] looks like this: -// +-----+--------------+-----------------+-- -// + tag | ... data ... | next 0, 1, or 2 | -// +-----+--------------+-----------------+-- -// ^ ^ ^ -// bufPtr bufEnd nextEnd -// -GBool RunLengthEncoder::fillBuf() { - int c, c1, c2; - int n; - - // already hit EOF? - if (eof) - return gFalse; - - // grab two bytes - if (nextEnd < bufEnd + 1) { - if ((c1 = str->getChar()) == EOF) { - eof = gTrue; - return gFalse; - } - } else { - c1 = bufEnd[0] & 0xff; - } - if (nextEnd < bufEnd + 2) { - if ((c2 = str->getChar()) == EOF) { - eof = gTrue; - buf[0] = 0; - buf[1] = c1; - bufPtr = buf; - bufEnd = &buf[2]; - return gTrue; - } - } else { - c2 = bufEnd[1] & 0xff; - } - - // check for repeat - c = 0; // make gcc happy - if (c1 == c2) { - n = 2; - while (n < 128 && (c = str->getChar()) == c1) - ++n; - buf[0] = (char)(257 - n); - buf[1] = c1; - bufEnd = &buf[2]; - if (c == EOF) { - eof = gTrue; - } else if (n < 128) { - buf[2] = c; - nextEnd = &buf[3]; - } else { - nextEnd = bufEnd; - } - - // get up to 128 chars - } else { - buf[1] = c1; - buf[2] = c2; - n = 2; - while (n < 128) { - if ((c = str->getChar()) == EOF) { - eof = gTrue; - break; - } - ++n; - buf[n] = c; - if (buf[n] == buf[n-1]) - break; - } - if (buf[n] == buf[n-1]) { - buf[0] = (char)(n-2-1); - bufEnd = &buf[n-1]; - nextEnd = &buf[n+1]; - } else { - buf[0] = (char)(n-1); - bufEnd = nextEnd = &buf[n+1]; - } - } - bufPtr = buf; - return gTrue; -} - -//------------------------------------------------------------------------ -// CMKYGrayEncoder -//------------------------------------------------------------------------ - -CMKYGrayEncoder::CMKYGrayEncoder(Stream *strA): - FilterStream(strA) { - bufPtr = bufEnd = buf; - eof = gFalse; -} - -CMKYGrayEncoder::~CMKYGrayEncoder() { - if (str->isEncoder()) - delete str; -} - -void CMKYGrayEncoder::reset() { - str->reset(); - bufPtr = bufEnd = buf; - eof = gFalse; -} - -GBool CMKYGrayEncoder::fillBuf() { - int c0, c1, c2, c3; - int i; - - if (eof) { - return gFalse; - } - c0 = str->getChar(); - c1 = str->getChar(); - c2 = str->getChar(); - c3 = str->getChar(); - if (c3 == EOF) { - eof = gTrue; - return gFalse; - } - i = (3 * c0 + 6 * c1 + c2) / 10 + c3; - if (i > 255) i = 255; - bufPtr = bufEnd = buf; - *bufEnd++ = (char) i; - return gTrue; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/Stream.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/Stream.h deleted file mode 100644 index cb08e3ad3fc..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/Stream.h +++ /dev/null @@ -1,1174 +0,0 @@ -//======================================================================== -// -// Stream.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2008 Julien Rebetez <julien@fhtagn.net> -// Copyright (C) 2008, 2010, 2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> -// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2011 William Bader <williambader@hotmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef STREAM_H -#define STREAM_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "poppler-config.h" -#include <stdio.h> -#include "goo/gtypes.h" -#include "Object.h" - -class BaseStream; -class CachedFile; - -//------------------------------------------------------------------------ - -enum StreamKind { - strFile, - strCachedFile, - strASCIIHex, - strASCII85, - strLZW, - strRunLength, - strCCITTFax, - strDCT, - strFlate, - strJBIG2, - strJPX, - strWeird // internal-use stream types -}; - -enum StreamColorSpaceMode { - streamCSNone, - streamCSDeviceGray, - streamCSDeviceRGB, - streamCSDeviceCMYK -}; - -//------------------------------------------------------------------------ - -// This is in Stream.h instead of Decrypt.h to avoid really annoying -// include file dependency loops. -enum CryptAlgorithm { - cryptRC4, - cryptAES -}; - -//------------------------------------------------------------------------ - -typedef struct _ByteRange { - Guint offset; - Guint length; -} ByteRange; - -//------------------------------------------------------------------------ -// Stream (base class) -//------------------------------------------------------------------------ - -class Stream { -public: - - // Constructor. - Stream(); - - // Destructor. - virtual ~Stream(); - - // Reference counting. - int incRef() { return ++ref; } - int decRef() { return --ref; } - - // Get kind of stream. - virtual StreamKind getKind() = 0; - - // Reset stream to beginning. - virtual void reset() = 0; - - // Close down the stream. - virtual void close(); - - inline int doGetChars(int nChars, Guchar *buffer) - { - if (hasGetChars()) { - return getChars(nChars, buffer); - } else { - for (int i = 0; i < nChars; ++i) { - const int c = getChar(); - if (likely(c != EOF)) buffer[i] = c; - else return i; - } - return nChars; - } - } - - inline void fillGooString(GooString *s) - { - Guchar readBuf[4096]; - int readChars; - reset(); - while ((readChars = doGetChars(4096, readBuf)) != 0) { - s->append((const char *)readBuf, readChars); - } - } - - inline Guchar *toUnsignedChars(int *length, int initialSize = 4096, int sizeIncrement = 4096) - { - int readChars; - Guchar *buf = (Guchar *)gmalloc(initialSize); - int size = initialSize; - *length = 0; - int charsToRead = initialSize; - bool continueReading = true; - reset(); - while (continueReading && (readChars = doGetChars(charsToRead, &buf[*length])) != 0) { - *length += readChars; - if (readChars == charsToRead) { - if (lookChar() != EOF) { - size += sizeIncrement; - charsToRead = sizeIncrement; - buf = (Guchar *)grealloc(buf, size); - } else { - continueReading = false; - } - } else { - continueReading = false; - } - } - return buf; - } - - // Get next char from stream. - virtual int getChar() = 0; - - // Peek at next char in stream. - virtual int lookChar() = 0; - - // Get next char from stream without using the predictor. - // This is only used by StreamPredictor. - virtual int getRawChar(); - virtual void getRawChars(int nChars, int *buffer); - - // Get next char directly from stream source, without filtering it - virtual int getUnfilteredChar () = 0; - - // Resets the stream without reading anything (even not the headers) - // WARNING: Reading the stream with something else than getUnfilteredChar - // may lead to unexcepted behaviour until you call reset () - virtual void unfilteredReset () = 0; - - // Get next line from stream. - virtual char *getLine(char *buf, int size); - - // Get current position in file. - virtual int getPos() = 0; - - // Go to a position in the stream. If <dir> is negative, the - // position is from the end of the file; otherwise the position is - // from the start of the file. - virtual void setPos(Guint pos, int dir = 0) = 0; - - // Get PostScript command for the filter(s). - virtual GooString *getPSFilter(int psLevel, char *indent); - - // Does this stream type potentially contain non-printable chars? - virtual GBool isBinary(GBool last = gTrue) = 0; - - // Get the BaseStream of this stream. - virtual BaseStream *getBaseStream() = 0; - - // Get the stream after the last decoder (this may be a BaseStream - // or a DecryptStream). - virtual Stream *getUndecodedStream() = 0; - - // Get the dictionary associated with this stream. - virtual Dict *getDict() = 0; - - // Is this an encoding filter? - virtual GBool isEncoder() { return gFalse; } - - // Get image parameters which are defined by the stream contents. - virtual void getImageParams(int * /*bitsPerComponent*/, - StreamColorSpaceMode * /*csMode*/) {} - - // Return the next stream in the "stack". - virtual Stream *getNextStream() { return NULL; } - - // Add filters to this stream according to the parameters in <dict>. - // Returns the new stream. - Stream *addFilters(Object *dict); - -private: - virtual GBool hasGetChars() { return false; } - virtual int getChars(int nChars, Guchar *buffer); - - Stream *makeFilter(char *name, Stream *str, Object *params); - - int ref; // reference count -}; - - - //------------------------------------------------------------------------ -// OutStream -// -// This is the base class for all streams that output to a file -//------------------------------------------------------------------------ -class OutStream { -public: - // Constructor. - OutStream (); - - // Desctructor. - virtual ~OutStream (); - - // Reference counting. - int incRef() { return ++ref; } - int decRef() { return --ref; } - - // Close the stream - virtual void close() = 0; - - // Return position in stream - virtual int getPos() = 0; - - // Put a char in the stream - virtual void put (char c) = 0; - - //FIXME - // Printf-like function 2,3 because the first arg is class instance ? - virtual void printf (const char *format, ...) = 0 ; //__attribute__((format(printf, 2,3))) = 0; - -private: - int ref; // reference count - -}; - -//------------------------------------------------------------------------ -// FileOutStream -//------------------------------------------------------------------------ -class FileOutStream : public OutStream { -public: - FileOutStream (FILE* fa, Guint startA); - - virtual ~FileOutStream (); - - virtual void close(); - - virtual int getPos(); - - virtual void put (char c); - - virtual void printf (const char *format, ...); -private: - FILE *f; - Guint start; - -}; - - -//------------------------------------------------------------------------ -// BaseStream -// -// This is the base class for all streams that read directly from a file. -//------------------------------------------------------------------------ - -class BaseStream: public Stream { -public: - - BaseStream(Object *dictA, Guint lengthA); - virtual ~BaseStream(); - virtual Stream *makeSubStream(Guint start, GBool limited, - Guint length, Object *dict) = 0; - virtual void setPos(Guint pos, int dir = 0) = 0; - virtual GBool isBinary(GBool last = gTrue) { return last; } - virtual BaseStream *getBaseStream() { return this; } - virtual Stream *getUndecodedStream() { return this; } - virtual Dict *getDict() { return dict.getDict(); } - virtual GooString *getFileName() { return NULL; } - virtual Guint getLength() { return length; } - - // Get/set position of first byte of stream within the file. - virtual Guint getStart() = 0; - virtual void moveStart(int delta) = 0; - -protected: - - Guint length; - -private: - - Object dict; -}; - -//------------------------------------------------------------------------ -// FilterStream -// -// This is the base class for all streams that filter another stream. -//------------------------------------------------------------------------ - -class FilterStream: public Stream { -public: - - FilterStream(Stream *strA); - virtual ~FilterStream(); - virtual void close(); - virtual int getPos() { return str->getPos(); } - virtual void setPos(Guint pos, int dir = 0); - virtual BaseStream *getBaseStream() { return str->getBaseStream(); } - virtual Stream *getUndecodedStream() { return str->getUndecodedStream(); } - virtual Dict *getDict() { return str->getDict(); } - virtual Stream *getNextStream() { return str; } - - virtual int getUnfilteredChar () { return str->getUnfilteredChar(); } - virtual void unfilteredReset () { str->unfilteredReset(); } - -protected: - - Stream *str; -}; - -//------------------------------------------------------------------------ -// ImageStream -//------------------------------------------------------------------------ - -class ImageStream { -public: - - // Create an image stream object for an image with the specified - // parameters. Note that these are the actual image parameters, - // which may be different from the predictor parameters. - ImageStream(Stream *strA, int widthA, int nCompsA, int nBitsA); - - ~ImageStream(); - - // Reset the stream. - void reset(); - - // Close the stream previously reset - void close(); - - // Gets the next pixel from the stream. <pix> should be able to hold - // at least nComps elements. Returns false at end of file. - GBool getPixel(Guchar *pix); - - // Returns a pointer to the next line of pixels. Returns NULL at - // end of file. - Guchar *getLine(); - - // Skip an entire line from the image. - void skipLine(); - -private: - - Stream *str; // base stream - int width; // pixels per line - int nComps; // components per pixel - int nBits; // bits per component - int nVals; // components per line - Guchar *imgLine; // line buffer - int imgIdx; // current index in imgLine -}; - -//------------------------------------------------------------------------ -// StreamPredictor -//------------------------------------------------------------------------ - -class StreamPredictor { -public: - - // Create a predictor object. Note that the parameters are for the - // predictor, and may not match the actual image parameters. - StreamPredictor(Stream *strA, int predictorA, - int widthA, int nCompsA, int nBitsA); - - ~StreamPredictor(); - - GBool isOk() { return ok; } - - int lookChar(); - int getChar(); - int getChars(int nChars, Guchar *buffer); - -private: - - GBool getNextLine(); - - inline int doGetChar() { - if (predIdx >= rowBytes) { - if (!getNextLine()) { - return EOF; - } - } - return predLine[predIdx++]; - } - - Stream *str; // base stream - int predictor; // predictor - int width; // pixels per line - int nComps; // components per pixel - int nBits; // bits per component - int nVals; // components per line - int pixBytes; // bytes per pixel - int rowBytes; // bytes per line - Guchar *predLine; // line buffer - int predIdx; // current index in predLine - GBool ok; -}; - -//------------------------------------------------------------------------ -// FileStream -//------------------------------------------------------------------------ - -#define fileStreamBufSize 256 - -class FileStream: public BaseStream { -public: - - FileStream(FILE *fA, Guint startA, GBool limitedA, - Guint lengthA, Object *dictA); - virtual ~FileStream(); - virtual Stream *makeSubStream(Guint startA, GBool limitedA, - Guint lengthA, Object *dictA); - virtual StreamKind getKind() { return strFile; } - virtual void reset(); - virtual void close(); - virtual int getChar() - { return doGetChar(); } - virtual int lookChar() - { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); } - virtual int getPos() { return bufPos + (bufPtr - buf); } - virtual void setPos(Guint pos, int dir = 0); - virtual Guint getStart() { return start; } - virtual void moveStart(int delta); - - virtual int getUnfilteredChar () { return getChar(); } - virtual void unfilteredReset () { reset(); } - -private: - - GBool fillBuf(); - - inline int doGetChar() - { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); } - - virtual GBool hasGetChars() { return true; } - virtual int getChars(int nChars, Guchar *buffer) - { - for (int i = 0; i < nChars; ++i) { - const int c = doGetChar(); - if (likely(c != EOF)) buffer[i] = c; - else return i; - } - return nChars; - } - - FILE *f; - Guint start; - GBool limited; - char buf[fileStreamBufSize]; - char *bufPtr; - char *bufEnd; - Guint bufPos; - int savePos; - GBool saved; -}; - -//------------------------------------------------------------------------ -// CachedFileStream -//------------------------------------------------------------------------ - -#define cachedStreamBufSize 1024 - -class CachedFileStream: public BaseStream { -public: - - CachedFileStream(CachedFile *ccA, Guint startA, GBool limitedA, - Guint lengthA, Object *dictA); - virtual ~CachedFileStream(); - virtual Stream *makeSubStream(Guint startA, GBool limitedA, - Guint lengthA, Object *dictA); - virtual StreamKind getKind() { return strCachedFile; } - virtual void reset(); - virtual void close(); - virtual int getChar() - { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); } - virtual int lookChar() - { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); } - virtual int getPos() { return bufPos + (bufPtr - buf); } - virtual void setPos(Guint pos, int dir = 0); - virtual Guint getStart() { return start; } - virtual void moveStart(int delta); - - virtual int getUnfilteredChar () { return getChar(); } - virtual void unfilteredReset () { reset(); } - -private: - - GBool fillBuf(); - - CachedFile *cc; - Guint start; - GBool limited; - char buf[cachedStreamBufSize]; - char *bufPtr; - char *bufEnd; - Guint bufPos; - int savePos; - GBool saved; -}; - - -//------------------------------------------------------------------------ -// MemStream -//------------------------------------------------------------------------ - -class MemStream: public BaseStream { -public: - - MemStream(char *bufA, Guint startA, Guint lengthA, Object *dictA); - virtual ~MemStream(); - virtual Stream *makeSubStream(Guint start, GBool limited, - Guint lengthA, Object *dictA); - virtual StreamKind getKind() { return strWeird; } - virtual void reset(); - virtual void close(); - virtual int getChar() - { return (bufPtr < bufEnd) ? (*bufPtr++ & 0xff) : EOF; } - virtual int lookChar() - { return (bufPtr < bufEnd) ? (*bufPtr & 0xff) : EOF; } - virtual int getPos() { return (int)(bufPtr - buf); } - virtual void setPos(Guint pos, int dir = 0); - virtual Guint getStart() { return start; } - virtual void moveStart(int delta); - - //if needFree = true, the stream will delete buf when it is destroyed - //otherwise it will not touch it. Default value is false - virtual void setNeedFree (GBool val) { needFree = val; } - - virtual int getUnfilteredChar () { return getChar(); } - virtual void unfilteredReset () { reset (); } - -private: - - char *buf; - Guint start; - char *bufEnd; - char *bufPtr; - GBool needFree; -}; - -//------------------------------------------------------------------------ -// EmbedStream -// -// This is a special stream type used for embedded streams (inline -// images). It reads directly from the base stream -- after the -// EmbedStream is deleted, reads from the base stream will proceed where -// the BaseStream left off. Note that this is very different behavior -// that creating a new FileStream (using makeSubStream). -//------------------------------------------------------------------------ - -class EmbedStream: public BaseStream { -public: - - EmbedStream(Stream *strA, Object *dictA, GBool limitedA, Guint lengthA); - virtual ~EmbedStream(); - virtual Stream *makeSubStream(Guint start, GBool limitedA, - Guint lengthA, Object *dictA); - virtual StreamKind getKind() { return str->getKind(); } - virtual void reset() {} - virtual int getChar(); - virtual int lookChar(); - virtual int getPos() { return str->getPos(); } - virtual void setPos(Guint pos, int dir = 0); - virtual Guint getStart(); - virtual void moveStart(int delta); - - virtual int getUnfilteredChar () { return str->getUnfilteredChar(); } - virtual void unfilteredReset () { str->unfilteredReset(); } - - -private: - - Stream *str; - GBool limited; -}; - -//------------------------------------------------------------------------ -// ASCIIHexStream -//------------------------------------------------------------------------ - -class ASCIIHexStream: public FilterStream { -public: - - ASCIIHexStream(Stream *strA); - virtual ~ASCIIHexStream(); - virtual StreamKind getKind() { return strASCIIHex; } - virtual void reset(); - virtual int getChar() - { int c = lookChar(); buf = EOF; return c; } - virtual int lookChar(); - virtual GooString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - -private: - - int buf; - GBool eof; -}; - -//------------------------------------------------------------------------ -// ASCII85Stream -//------------------------------------------------------------------------ - -class ASCII85Stream: public FilterStream { -public: - - ASCII85Stream(Stream *strA); - virtual ~ASCII85Stream(); - virtual StreamKind getKind() { return strASCII85; } - virtual void reset(); - virtual int getChar() - { int ch = lookChar(); ++index; return ch; } - virtual int lookChar(); - virtual GooString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - -private: - - int c[5]; - int b[4]; - int index, n; - GBool eof; -}; - -//------------------------------------------------------------------------ -// LZWStream -//------------------------------------------------------------------------ - -class LZWStream: public FilterStream { -public: - - LZWStream(Stream *strA, int predictor, int columns, int colors, - int bits, int earlyA); - virtual ~LZWStream(); - virtual StreamKind getKind() { return strLZW; } - virtual void reset(); - virtual int getChar(); - virtual int lookChar(); - virtual int getRawChar(); - virtual void getRawChars(int nChars, int *buffer); - virtual GooString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - -private: - - inline int doGetRawChar() { - if (eof) { - return EOF; - } - if (seqIndex >= seqLength) { - if (!processNextCode()) { - return EOF; - } - } - return seqBuf[seqIndex++]; - } - - StreamPredictor *pred; // predictor - int early; // early parameter - GBool eof; // true if at eof - int inputBuf; // input buffer - int inputBits; // number of bits in input buffer - struct { // decoding table - int length; - int head; - Guchar tail; - } table[4097]; - int nextCode; // next code to be used - int nextBits; // number of bits in next code word - int prevCode; // previous code used in stream - int newChar; // next char to be added to table - Guchar seqBuf[4097]; // buffer for current sequence - int seqLength; // length of current sequence - int seqIndex; // index into current sequence - GBool first; // first code after a table clear - - GBool processNextCode(); - void clearTable(); - int getCode(); -}; - -//------------------------------------------------------------------------ -// RunLengthStream -//------------------------------------------------------------------------ - -class RunLengthStream: public FilterStream { -public: - - RunLengthStream(Stream *strA); - virtual ~RunLengthStream(); - virtual StreamKind getKind() { return strRunLength; } - virtual void reset(); - virtual int getChar() - { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); } - virtual int lookChar() - { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); } - virtual GooString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - -private: - - char buf[128]; // buffer - char *bufPtr; // next char to read - char *bufEnd; // end of buffer - GBool eof; - - GBool fillBuf(); -}; - -//------------------------------------------------------------------------ -// CCITTFaxStream -//------------------------------------------------------------------------ - -struct CCITTCodeTable; - -class CCITTFaxStream: public FilterStream { -public: - - CCITTFaxStream(Stream *strA, int encodingA, GBool endOfLineA, - GBool byteAlignA, int columnsA, int rowsA, - GBool endOfBlockA, GBool blackA); - virtual ~CCITTFaxStream(); - virtual StreamKind getKind() { return strCCITTFax; } - virtual void reset(); - virtual int getChar() - { int c = lookChar(); buf = EOF; return c; } - virtual int lookChar(); - virtual GooString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - - virtual void unfilteredReset (); - -private: - - int encoding; // 'K' parameter - GBool endOfLine; // 'EndOfLine' parameter - GBool byteAlign; // 'EncodedByteAlign' parameter - int columns; // 'Columns' parameter - int rows; // 'Rows' parameter - GBool endOfBlock; // 'EndOfBlock' parameter - GBool black; // 'BlackIs1' parameter - GBool eof; // true if at eof - GBool nextLine2D; // true if next line uses 2D encoding - int row; // current row - int inputBuf; // input buffer - int inputBits; // number of bits in input buffer - int *codingLine; // coding line changing elements - int *refLine; // reference line changing elements - int a0i; // index into codingLine - GBool err; // error on current line - int outputBits; // remaining ouput bits - int buf; // character buffer - - void addPixels(int a1, int black); - void addPixelsNeg(int a1, int black); - short getTwoDimCode(); - short getWhiteCode(); - short getBlackCode(); - short lookBits(int n); - void eatBits(int n) { if ((inputBits -= n) < 0) inputBits = 0; } -}; - -#ifndef ENABLE_LIBJPEG -//------------------------------------------------------------------------ -// DCTStream -//------------------------------------------------------------------------ - -// DCT component info -struct DCTCompInfo { - int id; // component ID - int hSample, vSample; // horiz/vert sampling resolutions - int quantTable; // quantization table number - int prevDC; // DC coefficient accumulator -}; - -struct DCTScanInfo { - GBool comp[4]; // comp[i] is set if component i is - // included in this scan - int numComps; // number of components in the scan - int dcHuffTable[4]; // DC Huffman table numbers - int acHuffTable[4]; // AC Huffman table numbers - int firstCoeff, lastCoeff; // first and last DCT coefficient - int ah, al; // successive approximation parameters -}; - -// DCT Huffman decoding table -struct DCTHuffTable { - Guchar firstSym[17]; // first symbol for this bit length - Gushort firstCode[17]; // first code for this bit length - Gushort numCodes[17]; // number of codes of this bit length - Guchar sym[256]; // symbols -}; - -class DCTStream: public FilterStream { -public: - - DCTStream(Stream *strA, int colorXformA); - virtual ~DCTStream(); - virtual StreamKind getKind() { return strDCT; } - virtual void reset(); - virtual void close(); - virtual int getChar(); - virtual int lookChar(); - virtual GooString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - - virtual void unfilteredReset(); - -private: - - GBool progressive; // set if in progressive mode - GBool interleaved; // set if in interleaved mode - int width, height; // image size - int mcuWidth, mcuHeight; // size of min coding unit, in data units - int bufWidth, bufHeight; // frameBuf size - DCTCompInfo compInfo[4]; // info for each component - DCTScanInfo scanInfo; // info for the current scan - int numComps; // number of components in image - int colorXform; // color transform: -1 = unspecified - // 0 = none - // 1 = YUV/YUVK -> RGB/CMYK - GBool gotJFIFMarker; // set if APP0 JFIF marker was present - GBool gotAdobeMarker; // set if APP14 Adobe marker was present - int restartInterval; // restart interval, in MCUs - Gushort quantTables[4][64]; // quantization tables - int numQuantTables; // number of quantization tables - DCTHuffTable dcHuffTables[4]; // DC Huffman tables - DCTHuffTable acHuffTables[4]; // AC Huffman tables - int numDCHuffTables; // number of DC Huffman tables - int numACHuffTables; // number of AC Huffman tables - Guchar *rowBuf[4][32]; // buffer for one MCU (non-progressive mode) - int *frameBuf[4]; // buffer for frame (progressive mode) - int comp, x, y, dy; // current position within image/MCU - int restartCtr; // MCUs left until restart - int restartMarker; // next restart marker - int eobRun; // number of EOBs left in the current run - int inputBuf; // input buffer for variable length codes - int inputBits; // number of valid bits in input buffer - - void restart(); - GBool readMCURow(); - void readScan(); - GBool readDataUnit(DCTHuffTable *dcHuffTable, - DCTHuffTable *acHuffTable, - int *prevDC, int data[64]); - GBool readProgressiveDataUnit(DCTHuffTable *dcHuffTable, - DCTHuffTable *acHuffTable, - int *prevDC, int data[64]); - void decodeImage(); - void transformDataUnit(Gushort *quantTable, - int dataIn[64], Guchar dataOut[64]); - int readHuffSym(DCTHuffTable *table); - int readAmp(int size); - int readBit(); - GBool readHeader(); - GBool readBaselineSOF(); - GBool readProgressiveSOF(); - GBool readScanInfo(); - GBool readQuantTables(); - GBool readHuffmanTables(); - GBool readRestartInterval(); - GBool readJFIFMarker(); - GBool readAdobeMarker(); - GBool readTrailer(); - int readMarker(); - int read16(); -}; - -#endif - -#ifndef ENABLE_ZLIB -//------------------------------------------------------------------------ -// FlateStream -//------------------------------------------------------------------------ - -#define flateWindow 32768 // buffer size -#define flateMask (flateWindow-1) -#define flateMaxHuffman 15 // max Huffman code length -#define flateMaxCodeLenCodes 19 // max # code length codes -#define flateMaxLitCodes 288 // max # literal codes -#define flateMaxDistCodes 30 // max # distance codes - -// Huffman code table entry -struct FlateCode { - Gushort len; // code length, in bits - Gushort val; // value represented by this code -}; - -struct FlateHuffmanTab { - FlateCode *codes; - int maxLen; -}; - -// Decoding info for length and distance code words -struct FlateDecode { - int bits; // # extra bits - int first; // first length/distance -}; - -class FlateStream: public FilterStream { -public: - - FlateStream(Stream *strA, int predictor, int columns, - int colors, int bits); - virtual ~FlateStream(); - virtual StreamKind getKind() { return strFlate; } - virtual void reset(); - virtual int getChar(); - virtual int lookChar(); - virtual int getRawChar(); - virtual void getRawChars(int nChars, int *buffer); - virtual GooString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - virtual void unfilteredReset (); - -private: - inline int doGetRawChar() { - int c; - - while (remain == 0) { - if (endOfBlock && eof) - return EOF; - readSome(); - } - c = buf[index]; - index = (index + 1) & flateMask; - --remain; - return c; - } - - inline int doGetChar() { - if (pred) { - return pred->getChar(); - } - return doGetRawChar(); - } - - virtual GBool hasGetChars() { return true; } - virtual int getChars(int nChars, Guchar *buffer); - - StreamPredictor *pred; // predictor - Guchar buf[flateWindow]; // output data buffer - int index; // current index into output buffer - int remain; // number valid bytes in output buffer - int codeBuf; // input buffer - int codeSize; // number of bits in input buffer - int // literal and distance code lengths - codeLengths[flateMaxLitCodes + flateMaxDistCodes]; - FlateHuffmanTab litCodeTab; // literal code table - FlateHuffmanTab distCodeTab; // distance code table - GBool compressedBlock; // set if reading a compressed block - int blockLen; // remaining length of uncompressed block - GBool endOfBlock; // set when end of block is reached - GBool eof; // set when end of stream is reached - - static int // code length code reordering - codeLenCodeMap[flateMaxCodeLenCodes]; - static FlateDecode // length decoding info - lengthDecode[flateMaxLitCodes-257]; - static FlateDecode // distance decoding info - distDecode[flateMaxDistCodes]; - static FlateHuffmanTab // fixed literal code table - fixedLitCodeTab; - static FlateHuffmanTab // fixed distance code table - fixedDistCodeTab; - - void readSome(); - GBool startBlock(); - void loadFixedCodes(); - GBool readDynamicCodes(); - void compHuffmanCodes(int *lengths, int n, FlateHuffmanTab *tab); - int getHuffmanCodeWord(FlateHuffmanTab *tab); - int getCodeWord(int bits); -}; -#endif - -//------------------------------------------------------------------------ -// EOFStream -//------------------------------------------------------------------------ - -class EOFStream: public FilterStream { -public: - - EOFStream(Stream *strA); - virtual ~EOFStream(); - virtual StreamKind getKind() { return strWeird; } - virtual void reset() {} - virtual int getChar() { return EOF; } - virtual int lookChar() { return EOF; } - virtual GooString *getPSFilter(int /*psLevel*/, char * /*indent*/) { return NULL; } - virtual GBool isBinary(GBool /*last = gTrue*/) { return gFalse; } -}; - -//------------------------------------------------------------------------ -// FixedLengthEncoder -//------------------------------------------------------------------------ - -class FixedLengthEncoder: public FilterStream { -public: - - FixedLengthEncoder(Stream *strA, int lengthA); - ~FixedLengthEncoder(); - virtual StreamKind getKind() { return strWeird; } - virtual void reset(); - virtual int getChar(); - virtual int lookChar(); - virtual GooString *getPSFilter(int /*psLevel*/, char * /*indent*/) { return NULL; } - virtual GBool isBinary(GBool /*last = gTrue*/); - virtual GBool isEncoder() { return gTrue; } - -private: - - int length; - int count; -}; - -//------------------------------------------------------------------------ -// ASCIIHexEncoder -//------------------------------------------------------------------------ - -class ASCIIHexEncoder: public FilterStream { -public: - - ASCIIHexEncoder(Stream *strA); - virtual ~ASCIIHexEncoder(); - virtual StreamKind getKind() { return strWeird; } - virtual void reset(); - virtual int getChar() - { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); } - virtual int lookChar() - { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); } - virtual GooString *getPSFilter(int /*psLevel*/, char * /*indent*/) { return NULL; } - virtual GBool isBinary(GBool /*last = gTrue*/) { return gFalse; } - virtual GBool isEncoder() { return gTrue; } - -private: - - char buf[4]; - char *bufPtr; - char *bufEnd; - int lineLen; - GBool eof; - - GBool fillBuf(); -}; - -//------------------------------------------------------------------------ -// ASCII85Encoder -//------------------------------------------------------------------------ - -class ASCII85Encoder: public FilterStream { -public: - - ASCII85Encoder(Stream *strA); - virtual ~ASCII85Encoder(); - virtual StreamKind getKind() { return strWeird; } - virtual void reset(); - virtual int getChar() - { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); } - virtual int lookChar() - { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); } - virtual GooString *getPSFilter(int /*psLevel*/, char * /*indent*/) { return NULL; } - virtual GBool isBinary(GBool /*last = gTrue*/) { return gFalse; } - virtual GBool isEncoder() { return gTrue; } - -private: - - char buf[8]; - char *bufPtr; - char *bufEnd; - int lineLen; - GBool eof; - - GBool fillBuf(); -}; - -//------------------------------------------------------------------------ -// RunLengthEncoder -//------------------------------------------------------------------------ - -class RunLengthEncoder: public FilterStream { -public: - - RunLengthEncoder(Stream *strA); - virtual ~RunLengthEncoder(); - virtual StreamKind getKind() { return strWeird; } - virtual void reset(); - virtual int getChar() - { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); } - virtual int lookChar() - { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); } - virtual GooString *getPSFilter(int /*psLevel*/, char * /*indent*/) { return NULL; } - virtual GBool isBinary(GBool /*last = gTrue*/) { return gTrue; } - virtual GBool isEncoder() { return gTrue; } - -private: - - char buf[131]; - char *bufPtr; - char *bufEnd; - char *nextEnd; - GBool eof; - - GBool fillBuf(); -}; - -//------------------------------------------------------------------------ -// CMKYGrayEncoder -//------------------------------------------------------------------------ - -class CMKYGrayEncoder: public FilterStream { -public: - - CMKYGrayEncoder(Stream *strA); - virtual ~CMKYGrayEncoder(); - virtual StreamKind getKind() { return strWeird; } - virtual void reset(); - virtual int getChar() - { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); } - virtual int lookChar() - { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); } - virtual GooString *getPSFilter(int /*psLevel*/, char * /*indent*/) { return NULL; } - virtual GBool isBinary(GBool /*last = gTrue*/) { return gFalse; } - virtual GBool isEncoder() { return gTrue; } - -private: - - char buf[2]; - char *bufPtr; - char *bufEnd; - GBool eof; - - GBool fillBuf(); -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/TextOutputDev.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/TextOutputDev.cc deleted file mode 100644 index 3d7ba6de0c1..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/TextOutputDev.cc +++ /dev/null @@ -1,5456 +0,0 @@ -//======================================================================== -// -// TextOutputDev.cc -// -// Copyright 1997-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005-2007 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2005 Nickolay V. Shmyrev <nshmyrev@yandex.ru> -// Copyright (C) 2006-2008, 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2006, 2007 Ed Catmur <ed@catmur.co.uk> -// Copyright (C) 2006 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2007, 2008 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2008 Koji Otani <sho@bbr.jp> -// Copyright (C) 2008, 2010, 2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2008 Pino Toscano <pino@kde.org> -// Copyright (C) 2008, 2010 Hib Eris <hib@hiberis.nl> -// Copyright (C) 2009 Ross Moore <ross@maths.mq.edu.au> -// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> -// Copyright (C) 2010 Brian Ewins <brian.ewins@gmail.com> -// Copyright (C) 2010 Suzuki Toshiya <mpsuzuki@hiroshima-u.ac.jp> -// Copyright (C) 2011 Sam Liao <phyomh@gmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -#include <math.h> -#include <float.h> -#include <ctype.h> -#ifdef _WIN32 -#include <fcntl.h> // for O_BINARY -#include <io.h> // for setmode -#endif -#include "goo/gmem.h" -#include "goo/GooString.h" -#include "goo/GooList.h" -#include "poppler-config.h" -#include "Error.h" -#include "GlobalParams.h" -#include "UnicodeMap.h" -#include "UnicodeTypeTable.h" -#include "Link.h" -#include "TextOutputDev.h" -#include "Page.h" -#include "Annot.h" -#include "PDFDocEncoding.h" - -#ifdef MACOS -// needed for setting type/creator of MacOS files -#include "ICSupport.h" -#endif - -//------------------------------------------------------------------------ -// parameters -//------------------------------------------------------------------------ - -// Each bucket in a text pool includes baselines within a range of -// this many points. -#define textPoolStep 4 - -// Inter-character space width which will cause addChar to start a new -// word. -#define minWordBreakSpace 0.1 - -// Negative inter-character space width, i.e., overlap, which will -// cause addChar to start a new word. -#define minDupBreakOverlap 0.2 - -// Max distance between baselines of two lines within a block, as a -// fraction of the font size. -#define maxLineSpacingDelta 1.5 - -// Max difference in primary font sizes on two lines in the same -// block. Delta1 is used when examining new lines above and below the -// current block; delta2 is used when examining text that overlaps the -// current block; delta3 is used when examining text to the left and -// right of the current block. -#define maxBlockFontSizeDelta1 0.05 -#define maxBlockFontSizeDelta2 0.6 -#define maxBlockFontSizeDelta3 0.2 - -// Max difference in font sizes inside a word. -#define maxWordFontSizeDelta 0.05 - -// Maximum distance between baselines of two words on the same line, -// e.g., distance between subscript or superscript and the primary -// baseline, as a fraction of the font size. -#define maxIntraLineDelta 0.5 - -// Minimum inter-word spacing, as a fraction of the font size. (Only -// used for raw ordering.) -#define minWordSpacing 0.15 - -// Maximum inter-word spacing, as a fraction of the font size. -#define maxWordSpacing 1.5 - -// Maximum horizontal spacing which will allow a word to be pulled -// into a block. -#define minColSpacing1 0.3 - -// Minimum spacing between columns, as a fraction of the font size. -#define minColSpacing2 1.0 - -// Maximum vertical spacing between blocks within a flow, as a -// multiple of the font size. -#define maxBlockSpacing 2.5 - -// Minimum spacing between characters within a word, as a fraction of -// the font size. -#define minCharSpacing -0.2 - -// Maximum spacing between characters within a word, as a fraction of -// the font size, when there is no obvious extra-wide character -// spacing. -#define maxCharSpacing 0.03 - -// When extra-wide character spacing is detected, the inter-character -// space threshold is set to the minimum inter-character space -// multiplied by this constant. -#define maxWideCharSpacingMul 1.3 - -// Upper limit on spacing between characters in a word. -#define maxWideCharSpacing 0.4 - -// Max difference in primary,secondary coordinates (as a fraction of -// the font size) allowed for duplicated text (fake boldface, drop -// shadows) which is to be discarded. -#define dupMaxPriDelta 0.1 -#define dupMaxSecDelta 0.2 - -// Max width of underlines (in points). -#define maxUnderlineWidth 3 - -// Min distance between baseline and underline (in points). -//~ this should be font-size-dependent -#define minUnderlineGap -2 - -// Max distance between baseline and underline (in points). -//~ this should be font-size-dependent -#define maxUnderlineGap 4 - -// Max horizontal distance between edge of word and start of underline -// (in points). -//~ this should be font-size-dependent -#define underlineSlack 1 - -// Max distance between edge of text and edge of link border -#define hyperlinkSlack 2 - -//------------------------------------------------------------------------ -// TextUnderline -//------------------------------------------------------------------------ - -class TextUnderline { -public: - - TextUnderline(double x0A, double y0A, double x1A, double y1A) - { x0 = x0A; y0 = y0A; x1 = x1A; y1 = y1A; horiz = y0 == y1; } - ~TextUnderline() {} - - double x0, y0, x1, y1; - GBool horiz; -}; - -//------------------------------------------------------------------------ -// TextLink -//------------------------------------------------------------------------ - -class TextLink { -public: - - TextLink(int xMinA, int yMinA, int xMaxA, int yMaxA, AnnotLink *linkA) - { xMin = xMinA; yMin = yMinA; xMax = xMaxA; yMax = yMaxA; link = linkA; } - ~TextLink() {} - - int xMin, yMin, xMax, yMax; - AnnotLink *link; -}; - -//------------------------------------------------------------------------ -// TextFontInfo -//------------------------------------------------------------------------ - -TextFontInfo::TextFontInfo(GfxState *state) { - gfxFont = state->getFont(); - if (gfxFont) - gfxFont->incRefCnt(); -#if TEXTOUT_WORD_LIST - fontName = (gfxFont && gfxFont->getOrigName()) - ? gfxFont->getOrigName()->copy() - : (GooString *)NULL; - flags = gfxFont ? gfxFont->getFlags() : 0; -#endif -} - -TextFontInfo::~TextFontInfo() { - if (gfxFont) - gfxFont->decRefCnt(); -#if TEXTOUT_WORD_LIST - if (fontName) { - delete fontName; - } -#endif -} - -GBool TextFontInfo::matches(GfxState *state) { - return state->getFont() == gfxFont; -} - -GBool TextFontInfo::matches(TextFontInfo *fontInfo) { - return gfxFont == fontInfo->gfxFont; -} - -//------------------------------------------------------------------------ -// TextWord -//------------------------------------------------------------------------ - -TextWord::TextWord(GfxState *state, int rotA, double x0, double y0, - int charPosA, TextFontInfo *fontA, double fontSizeA) { - GfxFont *gfxFont; - double x, y, ascent, descent; - - rot = rotA; - charPos = charPosA; - charLen = 0; - font = fontA; - fontSize = fontSizeA; - state->transform(x0, y0, &x, &y); - if ((gfxFont = font->gfxFont)) { - ascent = gfxFont->getAscent() * fontSize; - descent = gfxFont->getDescent() * fontSize; - } else { - // this means that the PDF file draws text without a current font, - // which should never happen - ascent = 0.95 * fontSize; - descent = -0.35 * fontSize; - } - switch (rot) { - case 0: - yMin = y - ascent; - yMax = y - descent; - if (yMin == yMax) { - // this is a sanity check for a case that shouldn't happen -- but - // if it does happen, we want to avoid dividing by zero later - yMin = y; - yMax = y + 1; - } - base = y; - break; - case 1: - xMin = x + descent; - xMax = x + ascent; - if (xMin == xMax) { - // this is a sanity check for a case that shouldn't happen -- but - // if it does happen, we want to avoid dividing by zero later - xMin = x; - xMax = x + 1; - } - base = x; - break; - case 2: - yMin = y + descent; - yMax = y + ascent; - if (yMin == yMax) { - // this is a sanity check for a case that shouldn't happen -- but - // if it does happen, we want to avoid dividing by zero later - yMin = y; - yMax = y + 1; - } - base = y; - break; - case 3: - xMin = x - ascent; - xMax = x - descent; - if (xMin == xMax) { - // this is a sanity check for a case that shouldn't happen -- but - // if it does happen, we want to avoid dividing by zero later - xMin = x; - xMax = x + 1; - } - base = x; - break; - } - text = NULL; - charcode = NULL; - edge = NULL; - len = size = 0; - spaceAfter = gFalse; - next = NULL; - -#if TEXTOUT_WORD_LIST - GfxRGB rgb; - - if ((state->getRender() & 3) == 1) { - state->getStrokeRGB(&rgb); - } else { - state->getFillRGB(&rgb); - } - colorR = colToDbl(rgb.r); - colorG = colToDbl(rgb.g); - colorB = colToDbl(rgb.b); -#endif - - underlined = gFalse; - link = NULL; -} - -TextWord::~TextWord() { - gfree(text); - gfree(charcode); - gfree(edge); -} - -void TextWord::addChar(GfxState *state, double x, double y, - double dx, double dy, CharCode c, Unicode u) { - if (len == size) { - size += 16; - text = (Unicode *)greallocn(text, size, sizeof(Unicode)); - charcode = (Unicode *)greallocn(charcode, size, sizeof(CharCode)); - edge = (double *)greallocn(edge, (size + 1), sizeof(double)); - } - text[len] = u; - charcode[len] = c; - switch (rot) { - case 0: - if (len == 0) { - xMin = x; - } - edge[len] = x; - xMax = edge[len+1] = x + dx; - break; - case 1: - if (len == 0) { - yMin = y; - } - edge[len] = y; - yMax = edge[len+1] = y + dy; - break; - case 2: - if (len == 0) { - xMax = x; - } - edge[len] = x; - xMin = edge[len+1] = x + dx; - break; - case 3: - if (len == 0) { - yMax = y; - } - edge[len] = y; - yMin = edge[len+1] = y + dy; - break; - } - ++len; -} - -void TextWord::merge(TextWord *word) { - int i; - - if (word->xMin < xMin) { - xMin = word->xMin; - } - if (word->yMin < yMin) { - yMin = word->yMin; - } - if (word->xMax > xMax) { - xMax = word->xMax; - } - if (word->yMax > yMax) { - yMax = word->yMax; - } - if (len + word->len > size) { - size = len + word->len; - text = (Unicode *)greallocn(text, size, sizeof(Unicode)); - charcode = (CharCode *)greallocn(charcode, (size + 1), sizeof(CharCode)); - edge = (double *)greallocn(edge, (size + 1), sizeof(double)); - } - for (i = 0; i < word->len; ++i) { - text[len + i] = word->text[i]; - charcode[len + i] = word->charcode[i]; - edge[len + i] = word->edge[i]; - } - edge[len + word->len] = word->edge[word->len]; - len += word->len; - charLen += word->charLen; -} - -inline int TextWord::primaryCmp(TextWord *word) { - double cmp; - - cmp = 0; // make gcc happy - switch (rot) { - case 0: - cmp = xMin - word->xMin; - break; - case 1: - cmp = yMin - word->yMin; - break; - case 2: - cmp = word->xMax - xMax; - break; - case 3: - cmp = word->yMax - yMax; - break; - } - return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; -} - -double TextWord::primaryDelta(TextWord *word) { - double delta; - - delta = 0; // make gcc happy - switch (rot) { - case 0: - delta = word->xMin - xMax; - break; - case 1: - delta = word->yMin - yMax; - break; - case 2: - delta = xMin - word->xMax; - break; - case 3: - delta = yMin - word->yMax; - break; - } - return delta; -} - -int TextWord::cmpYX(const void *p1, const void *p2) { - TextWord *word1 = *(TextWord **)p1; - TextWord *word2 = *(TextWord **)p2; - double cmp; - - cmp = word1->yMin - word2->yMin; - if (cmp == 0) { - cmp = word1->xMin - word2->xMin; - } - return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; -} - -#if TEXTOUT_WORD_LIST - -GooString *TextWord::getText() { - GooString *s; - UnicodeMap *uMap; - char buf[8]; - int n, i; - - s = new GooString(); - if (!(uMap = globalParams->getTextEncoding())) { - return s; - } - for (i = 0; i < len; ++i) { - n = uMap->mapUnicode(text[i], buf, sizeof(buf)); - s->append(buf, n); - } - uMap->decRefCnt(); - return s; -} - -void TextWord::getCharBBox(int charIdx, double *xMinA, double *yMinA, - double *xMaxA, double *yMaxA) { - if (charIdx < 0 || charIdx >= len) { - return; - } - switch (rot) { - case 0: - *xMinA = edge[charIdx]; - *xMaxA = edge[charIdx + 1]; - *yMinA = yMin; - *yMaxA = yMax; - break; - case 1: - *xMinA = xMin; - *xMaxA = xMax; - *yMinA = edge[charIdx]; - *yMaxA = edge[charIdx + 1]; - break; - case 2: - *xMinA = edge[charIdx + 1]; - *xMaxA = edge[charIdx]; - *yMinA = yMin; - *yMaxA = yMax; - break; - case 3: - *xMinA = xMin; - *xMaxA = xMax; - *yMinA = edge[charIdx + 1]; - *yMaxA = edge[charIdx]; - break; - } -} - -#endif // TEXTOUT_WORD_LIST - -//------------------------------------------------------------------------ -// TextPool -//------------------------------------------------------------------------ - -TextPool::TextPool() { - minBaseIdx = 0; - maxBaseIdx = -1; - pool = NULL; - cursor = NULL; - cursorBaseIdx = -1; -} - -TextPool::~TextPool() { - int baseIdx; - TextWord *word, *word2; - - for (baseIdx = minBaseIdx; baseIdx <= maxBaseIdx; ++baseIdx) { - for (word = pool[baseIdx - minBaseIdx]; word; word = word2) { - word2 = word->next; - delete word; - } - } - gfree(pool); -} - -int TextPool::getBaseIdx(double base) { - int baseIdx; - - baseIdx = (int)(base / textPoolStep); - if (baseIdx < minBaseIdx) { - return minBaseIdx; - } - if (baseIdx > maxBaseIdx) { - return maxBaseIdx; - } - return baseIdx; -} - -void TextPool::addWord(TextWord *word) { - TextWord **newPool; - int wordBaseIdx, newMinBaseIdx, newMaxBaseIdx, baseIdx; - TextWord *w0, *w1; - - // expand the array if needed - wordBaseIdx = (int)(word->base / textPoolStep); - if (minBaseIdx > maxBaseIdx) { - minBaseIdx = wordBaseIdx - 128; - maxBaseIdx = wordBaseIdx + 128; - pool = (TextWord **)gmallocn(maxBaseIdx - minBaseIdx + 1, - sizeof(TextWord *)); - for (baseIdx = minBaseIdx; baseIdx <= maxBaseIdx; ++baseIdx) { - pool[baseIdx - minBaseIdx] = NULL; - } - } else if (wordBaseIdx < minBaseIdx) { - newMinBaseIdx = wordBaseIdx - 128; - newPool = (TextWord **)gmallocn(maxBaseIdx - newMinBaseIdx + 1, - sizeof(TextWord *)); - for (baseIdx = newMinBaseIdx; baseIdx < minBaseIdx; ++baseIdx) { - newPool[baseIdx - newMinBaseIdx] = NULL; - } - memcpy(&newPool[minBaseIdx - newMinBaseIdx], pool, - (maxBaseIdx - minBaseIdx + 1) * sizeof(TextWord *)); - gfree(pool); - pool = newPool; - minBaseIdx = newMinBaseIdx; - } else if (wordBaseIdx > maxBaseIdx) { - newMaxBaseIdx = wordBaseIdx + 128; - pool = (TextWord **)greallocn(pool, newMaxBaseIdx - minBaseIdx + 1, - sizeof(TextWord *)); - for (baseIdx = maxBaseIdx + 1; baseIdx <= newMaxBaseIdx; ++baseIdx) { - pool[baseIdx - minBaseIdx] = NULL; - } - maxBaseIdx = newMaxBaseIdx; - } - - // insert the new word - if (cursor && wordBaseIdx == cursorBaseIdx && - word->primaryCmp(cursor) > 0) { - w0 = cursor; - w1 = cursor->next; - } else { - w0 = NULL; - w1 = pool[wordBaseIdx - minBaseIdx]; - } - for (; w1 && word->primaryCmp(w1) > 0; w0 = w1, w1 = w1->next) ; - word->next = w1; - if (w0) { - w0->next = word; - } else { - pool[wordBaseIdx - minBaseIdx] = word; - } - cursor = word; - cursorBaseIdx = wordBaseIdx; -} - -//------------------------------------------------------------------------ -// TextLine -//------------------------------------------------------------------------ - -TextLine::TextLine(TextBlock *blkA, int rotA, double baseA) { - blk = blkA; - rot = rotA; - base = baseA; - words = lastWord = NULL; - text = NULL; - edge = NULL; - col = NULL; - len = 0; - convertedLen = 0; - hyphenated = gFalse; - next = NULL; - xMin = yMin = 0; - xMax = yMax = -1; - normalized = NULL; - normalized_len = 0; - normalized_idx = NULL; -} - -TextLine::~TextLine() { - TextWord *word; - - while (words) { - word = words; - words = words->next; - delete word; - } - gfree(text); - gfree(edge); - gfree(col); - if (normalized) { - gfree(normalized); - gfree(normalized_idx); - } -} - -void TextLine::addWord(TextWord *word) { - if (lastWord) { - lastWord->next = word; - } else { - words = word; - } - lastWord = word; - - if (xMin > xMax) { - xMin = word->xMin; - xMax = word->xMax; - yMin = word->yMin; - yMax = word->yMax; - } else { - if (word->xMin < xMin) { - xMin = word->xMin; - } - if (word->xMax > xMax) { - xMax = word->xMax; - } - if (word->yMin < yMin) { - yMin = word->yMin; - } - if (word->yMax > yMax) { - yMax = word->yMax; - } - } -} - -double TextLine::primaryDelta(TextLine *line) { - double delta; - - delta = 0; // make gcc happy - switch (rot) { - case 0: - delta = line->xMin - xMax; - break; - case 1: - delta = line->yMin - yMax; - break; - case 2: - delta = xMin - line->xMax; - break; - case 3: - delta = yMin - line->yMax; - break; - } - return delta; -} - -int TextLine::primaryCmp(TextLine *line) { - double cmp; - - cmp = 0; // make gcc happy - switch (rot) { - case 0: - cmp = xMin - line->xMin; - break; - case 1: - cmp = yMin - line->yMin; - break; - case 2: - cmp = line->xMax - xMax; - break; - case 3: - cmp = line->yMax - yMax; - break; - } - return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; -} - -int TextLine::secondaryCmp(TextLine *line) { - double cmp; - - cmp = (rot == 0 || rot == 3) ? base - line->base : line->base - base; - return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; -} - -int TextLine::cmpYX(TextLine *line) { - int cmp; - - if ((cmp = secondaryCmp(line))) { - return cmp; - } - return primaryCmp(line); -} - -int TextLine::cmpXY(const void *p1, const void *p2) { - TextLine *line1 = *(TextLine **)p1; - TextLine *line2 = *(TextLine **)p2; - int cmp; - - if ((cmp = line1->primaryCmp(line2))) { - return cmp; - } - return line1->secondaryCmp(line2); -} - -void TextLine::coalesce(UnicodeMap *uMap) { - TextWord *word0, *word1; - double space, delta, minSpace; - GBool isUnicode; - char buf[8]; - int i, j; - - if (words->next) { - - // compute the inter-word space threshold - if (words->len > 1 || words->next->len > 1) { - minSpace = 0; - } else { - minSpace = words->primaryDelta(words->next); - for (word0 = words->next, word1 = word0->next; - word1 && minSpace > 0; - word0 = word1, word1 = word0->next) { - if (word1->len > 1) { - minSpace = 0; - } - delta = word0->primaryDelta(word1); - if (delta < minSpace) { - minSpace = delta; - } - } - } - if (minSpace <= 0) { - space = maxCharSpacing * words->fontSize; - } else { - space = maxWideCharSpacingMul * minSpace; - if (space > maxWideCharSpacing * words->fontSize) { - space = maxWideCharSpacing * words->fontSize; - } - } - - // merge words - word0 = words; - word1 = words->next; - while (word1) { - if (word0->primaryDelta(word1) >= space) { - word0->spaceAfter = gTrue; - word0 = word1; - word1 = word1->next; - } else if (word0->font == word1->font && - word0->underlined == word1->underlined && - fabs(word0->fontSize - word1->fontSize) < - maxWordFontSizeDelta * words->fontSize && - word1->charPos == word0->charPos + word0->charLen) { - word0->merge(word1); - word0->next = word1->next; - delete word1; - word1 = word0->next; - } else { - word0 = word1; - word1 = word1->next; - } - } - } - - // build the line text - isUnicode = uMap ? uMap->isUnicode() : gFalse; - len = 0; - for (word1 = words; word1; word1 = word1->next) { - len += word1->len; - if (word1->spaceAfter) { - ++len; - } - } - text = (Unicode *)gmallocn(len, sizeof(Unicode)); - edge = (double *)gmallocn(len + 1, sizeof(double)); - i = 0; - for (word1 = words; word1; word1 = word1->next) { - for (j = 0; j < word1->len; ++j) { - text[i] = word1->text[j]; - edge[i] = word1->edge[j]; - ++i; - } - edge[i] = word1->edge[word1->len]; - if (word1->spaceAfter) { - text[i] = (Unicode)0x0020; - ++i; - } - } - - // compute convertedLen and set up the col array - col = (int *)gmallocn(len + 1, sizeof(int)); - convertedLen = 0; - for (i = 0; i < len; ++i) { - col[i] = convertedLen; - if (isUnicode) { - ++convertedLen; - } else if (uMap) { - convertedLen += uMap->mapUnicode(text[i], buf, sizeof(buf)); - } - } - col[len] = convertedLen; - - // check for hyphen at end of line - //~ need to check for other chars used as hyphens - hyphenated = text[len - 1] == (Unicode)'-'; -} - -//------------------------------------------------------------------------ -// TextLineFrag -//------------------------------------------------------------------------ - -class TextLineFrag { -public: - - TextLine *line; // the line object - int start, len; // offset and length of this fragment - // (in Unicode chars) - double xMin, xMax; // bounding box coordinates - double yMin, yMax; - double base; // baseline virtual coordinate - int col; // first column - - void init(TextLine *lineA, int startA, int lenA); - void computeCoords(GBool oneRot); - - static int cmpYXPrimaryRot(const void *p1, const void *p2); - static int cmpYXLineRot(const void *p1, const void *p2); - static int cmpXYLineRot(const void *p1, const void *p2); - static int cmpXYColumnPrimaryRot(const void *p1, const void *p2); - static int cmpXYColumnLineRot(const void *p1, const void *p2); -}; - -void TextLineFrag::init(TextLine *lineA, int startA, int lenA) { - line = lineA; - start = startA; - len = lenA; - col = line->col[start]; -} - -void TextLineFrag::computeCoords(GBool oneRot) { - TextBlock *blk; - double d0, d1, d2, d3, d4; - - if (oneRot) { - - switch (line->rot) { - case 0: - xMin = line->edge[start]; - xMax = line->edge[start + len]; - yMin = line->yMin; - yMax = line->yMax; - break; - case 1: - xMin = line->xMin; - xMax = line->xMax; - yMin = line->edge[start]; - yMax = line->edge[start + len]; - break; - case 2: - xMin = line->edge[start + len]; - xMax = line->edge[start]; - yMin = line->yMin; - yMax = line->yMax; - break; - case 3: - xMin = line->xMin; - xMax = line->xMax; - yMin = line->edge[start + len]; - yMax = line->edge[start]; - break; - } - base = line->base; - - } else { - - if (line->rot == 0 && line->blk->page->primaryRot == 0) { - - xMin = line->edge[start]; - xMax = line->edge[start + len]; - yMin = line->yMin; - yMax = line->yMax; - base = line->base; - - } else { - - blk = line->blk; - d0 = line->edge[start]; - d1 = line->edge[start + len]; - d2 = d3 = d4 = 0; // make gcc happy - - switch (line->rot) { - case 0: - d2 = line->yMin; - d3 = line->yMax; - d4 = line->base; - d0 = (d0 - blk->xMin) / (blk->xMax - blk->xMin); - d1 = (d1 - blk->xMin) / (blk->xMax - blk->xMin); - d2 = (d2 - blk->yMin) / (blk->yMax - blk->yMin); - d3 = (d3 - blk->yMin) / (blk->yMax - blk->yMin); - d4 = (d4 - blk->yMin) / (blk->yMax - blk->yMin); - break; - case 1: - d2 = line->xMax; - d3 = line->xMin; - d4 = line->base; - d0 = (d0 - blk->yMin) / (blk->yMax - blk->yMin); - d1 = (d1 - blk->yMin) / (blk->yMax - blk->yMin); - d2 = (blk->xMax - d2) / (blk->xMax - blk->xMin); - d3 = (blk->xMax - d3) / (blk->xMax - blk->xMin); - d4 = (blk->xMax - d4) / (blk->xMax - blk->xMin); - break; - case 2: - d2 = line->yMax; - d3 = line->yMin; - d4 = line->base; - d0 = (blk->xMax - d0) / (blk->xMax - blk->xMin); - d1 = (blk->xMax - d1) / (blk->xMax - blk->xMin); - d2 = (blk->yMax - d2) / (blk->yMax - blk->yMin); - d3 = (blk->yMax - d3) / (blk->yMax - blk->yMin); - d4 = (blk->yMax - d4) / (blk->yMax - blk->yMin); - break; - case 3: - d2 = line->xMin; - d3 = line->xMax; - d4 = line->base; - d0 = (blk->yMax - d0) / (blk->yMax - blk->yMin); - d1 = (blk->yMax - d1) / (blk->yMax - blk->yMin); - d2 = (d2 - blk->xMin) / (blk->xMax - blk->xMin); - d3 = (d3 - blk->xMin) / (blk->xMax - blk->xMin); - d4 = (d4 - blk->xMin) / (blk->xMax - blk->xMin); - break; - } - - switch (line->blk->page->primaryRot) { - case 0: - xMin = blk->xMin + d0 * (blk->xMax - blk->xMin); - xMax = blk->xMin + d1 * (blk->xMax - blk->xMin); - yMin = blk->yMin + d2 * (blk->yMax - blk->yMin); - yMax = blk->yMin + d3 * (blk->yMax - blk->yMin); - base = blk->yMin + base * (blk->yMax - blk->yMin); - break; - case 1: - xMin = blk->xMax - d3 * (blk->xMax - blk->xMin); - xMax = blk->xMax - d2 * (blk->xMax - blk->xMin); - yMin = blk->yMin + d0 * (blk->yMax - blk->yMin); - yMax = blk->yMin + d1 * (blk->yMax - blk->yMin); - base = blk->xMax - d4 * (blk->xMax - blk->xMin); - break; - case 2: - xMin = blk->xMax - d1 * (blk->xMax - blk->xMin); - xMax = blk->xMax - d0 * (blk->xMax - blk->xMin); - yMin = blk->yMax - d3 * (blk->yMax - blk->yMin); - yMax = blk->yMax - d2 * (blk->yMax - blk->yMin); - base = blk->yMax - d4 * (blk->yMax - blk->yMin); - break; - case 3: - xMin = blk->xMin + d2 * (blk->xMax - blk->xMin); - xMax = blk->xMin + d3 * (blk->xMax - blk->xMin); - yMin = blk->yMax - d1 * (blk->yMax - blk->yMin); - yMax = blk->yMax - d0 * (blk->yMax - blk->yMin); - base = blk->xMin + d4 * (blk->xMax - blk->xMin); - break; - } - - } - } -} - -int TextLineFrag::cmpYXPrimaryRot(const void *p1, const void *p2) { - TextLineFrag *frag1 = (TextLineFrag *)p1; - TextLineFrag *frag2 = (TextLineFrag *)p2; - double cmp; - - cmp = 0; // make gcc happy - switch (frag1->line->blk->page->primaryRot) { - case 0: - if (fabs(cmp = frag1->yMin - frag2->yMin) < 0.01) { - cmp = frag1->xMin - frag2->xMin; - } - break; - case 1: - if (fabs(cmp = frag2->xMax - frag1->xMax) < 0.01) { - cmp = frag1->yMin - frag2->yMin; - } - break; - case 2: - if (fabs(cmp = frag2->yMin - frag1->yMin) < 0.01) { - cmp = frag2->xMax - frag1->xMax; - } - break; - case 3: - if (fabs(cmp = frag1->xMax - frag2->xMax) < 0.01) { - cmp = frag2->yMax - frag1->yMax; - } - break; - } - return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; -} - -int TextLineFrag::cmpYXLineRot(const void *p1, const void *p2) { - TextLineFrag *frag1 = (TextLineFrag *)p1; - TextLineFrag *frag2 = (TextLineFrag *)p2; - double cmp; - - cmp = 0; // make gcc happy - switch (frag1->line->rot) { - case 0: - if ((cmp = frag1->yMin - frag2->yMin) == 0) { - cmp = frag1->xMin - frag2->xMin; - } - break; - case 1: - if ((cmp = frag2->xMax - frag1->xMax) == 0) { - cmp = frag1->yMin - frag2->yMin; - } - break; - case 2: - if ((cmp = frag2->yMin - frag1->yMin) == 0) { - cmp = frag2->xMax - frag1->xMax; - } - break; - case 3: - if ((cmp = frag1->xMax - frag2->xMax) == 0) { - cmp = frag2->yMax - frag1->yMax; - } - break; - } - return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; -} - -int TextLineFrag::cmpXYLineRot(const void *p1, const void *p2) { - TextLineFrag *frag1 = (TextLineFrag *)p1; - TextLineFrag *frag2 = (TextLineFrag *)p2; - double cmp; - - cmp = 0; // make gcc happy - switch (frag1->line->rot) { - case 0: - if ((cmp = frag1->xMin - frag2->xMin) == 0) { - cmp = frag1->yMin - frag2->yMin; - } - break; - case 1: - if ((cmp = frag1->yMin - frag2->yMin) == 0) { - cmp = frag2->xMax - frag1->xMax; - } - break; - case 2: - if ((cmp = frag2->xMax - frag1->xMax) == 0) { - cmp = frag2->yMin - frag1->yMin; - } - break; - case 3: - if ((cmp = frag2->yMax - frag1->yMax) == 0) { - cmp = frag1->xMax - frag2->xMax; - } - break; - } - return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; -} - -int TextLineFrag::cmpXYColumnPrimaryRot(const void *p1, const void *p2) { - TextLineFrag *frag1 = (TextLineFrag *)p1; - TextLineFrag *frag2 = (TextLineFrag *)p2; - double cmp; - - // if columns overlap, compare y values - if (frag1->col < frag2->col + (frag2->line->col[frag2->start + frag2->len] - - frag2->line->col[frag2->start]) && - frag2->col < frag1->col + (frag1->line->col[frag1->start + frag1->len] - - frag1->line->col[frag1->start])) { - cmp = 0; // make gcc happy - switch (frag1->line->blk->page->primaryRot) { - case 0: cmp = frag1->yMin - frag2->yMin; break; - case 1: cmp = frag2->xMax - frag1->xMax; break; - case 2: cmp = frag2->yMin - frag1->yMin; break; - case 3: cmp = frag1->xMax - frag2->xMax; break; - } - return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; - } - - // otherwise, compare starting column - return frag1->col - frag2->col; -} - -int TextLineFrag::cmpXYColumnLineRot(const void *p1, const void *p2) { - TextLineFrag *frag1 = (TextLineFrag *)p1; - TextLineFrag *frag2 = (TextLineFrag *)p2; - double cmp; - - // if columns overlap, compare y values - if (frag1->col < frag2->col + (frag2->line->col[frag2->start + frag2->len] - - frag2->line->col[frag2->start]) && - frag2->col < frag1->col + (frag1->line->col[frag1->start + frag1->len] - - frag1->line->col[frag1->start])) { - cmp = 0; // make gcc happy - switch (frag1->line->rot) { - case 0: cmp = frag1->yMin - frag2->yMin; break; - case 1: cmp = frag2->xMax - frag1->xMax; break; - case 2: cmp = frag2->yMin - frag1->yMin; break; - case 3: cmp = frag1->xMax - frag2->xMax; break; - } - return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; - } - - // otherwise, compare starting column - return frag1->col - frag2->col; -} - -//------------------------------------------------------------------------ -// TextBlock -//------------------------------------------------------------------------ - -TextBlock::TextBlock(TextPage *pageA, int rotA) { - page = pageA; - rot = rotA; - xMin = yMin = 0; - xMax = yMax = -1; - priMin = 0; - priMax = page->pageWidth; - pool = new TextPool(); - lines = NULL; - curLine = NULL; - next = NULL; - stackNext = NULL; - tableId = -1; - tableEnd = gFalse; -} - -TextBlock::~TextBlock() { - TextLine *line; - - delete pool; - while (lines) { - line = lines; - lines = lines->next; - delete line; - } -} - -void TextBlock::addWord(TextWord *word) { - pool->addWord(word); - if (xMin > xMax) { - xMin = word->xMin; - xMax = word->xMax; - yMin = word->yMin; - yMax = word->yMax; - } else { - if (word->xMin < xMin) { - xMin = word->xMin; - } - if (word->xMax > xMax) { - xMax = word->xMax; - } - if (word->yMin < yMin) { - yMin = word->yMin; - } - if (word->yMax > yMax) { - yMax = word->yMax; - } - } -} - -void TextBlock::coalesce(UnicodeMap *uMap) { - TextWord *word0, *word1, *word2, *bestWord0, *bestWord1, *lastWord; - TextLine *line, *line0, *line1; - int poolMinBaseIdx, startBaseIdx, minBaseIdx, maxBaseIdx; - int baseIdx, bestWordBaseIdx, idx0, idx1; - double minBase, maxBase; - double fontSize, delta, priDelta, secDelta; - TextLine **lineArray; - GBool found; - int col1, col2; - int i, j, k; - - // discard duplicated text (fake boldface, drop shadows) - for (idx0 = pool->minBaseIdx; idx0 <= pool->maxBaseIdx; ++idx0) { - word0 = pool->getPool(idx0); - while (word0) { - priDelta = dupMaxPriDelta * word0->fontSize; - secDelta = dupMaxSecDelta * word0->fontSize; - if (rot == 0 || rot == 3) { - maxBaseIdx = pool->getBaseIdx(word0->base + secDelta); - } else { - maxBaseIdx = pool->getBaseIdx(word0->base - secDelta); - } - found = gFalse; - word1 = word2 = NULL; // make gcc happy - for (idx1 = idx0; idx1 <= maxBaseIdx; ++idx1) { - if (idx1 == idx0) { - word1 = word0; - word2 = word0->next; - } else { - word1 = NULL; - word2 = pool->getPool(idx1); - } - for (; word2; word1 = word2, word2 = word2->next) { - if (word2->len == word0->len && - !memcmp(word2->text, word0->text, - word0->len * sizeof(Unicode))) { - switch (rot) { - case 0: - case 2: - found = fabs(word0->xMin - word2->xMin) < priDelta && - fabs(word0->xMax - word2->xMax) < priDelta && - fabs(word0->yMin - word2->yMin) < secDelta && - fabs(word0->yMax - word2->yMax) < secDelta; - break; - case 1: - case 3: - found = fabs(word0->xMin - word2->xMin) < secDelta && - fabs(word0->xMax - word2->xMax) < secDelta && - fabs(word0->yMin - word2->yMin) < priDelta && - fabs(word0->yMax - word2->yMax) < priDelta; - break; - } - } - if (found) { - break; - } - } - if (found) { - break; - } - } - if (found) { - if (word1) { - word1->next = word2->next; - } else { - pool->setPool(idx1, word2->next); - } - delete word2; - } else { - word0 = word0->next; - } - } - } - - // build the lines - curLine = NULL; - poolMinBaseIdx = pool->minBaseIdx; - charCount = 0; - nLines = 0; - while (1) { - - // find the first non-empty line in the pool - for (; - poolMinBaseIdx <= pool->maxBaseIdx && !pool->getPool(poolMinBaseIdx); - ++poolMinBaseIdx) ; - if (poolMinBaseIdx > pool->maxBaseIdx) { - break; - } - - // look for the left-most word in the first four lines of the - // pool -- this avoids starting with a superscript word - startBaseIdx = poolMinBaseIdx; - for (baseIdx = poolMinBaseIdx + 1; - baseIdx < poolMinBaseIdx + 4 && baseIdx <= pool->maxBaseIdx; - ++baseIdx) { - if (!pool->getPool(baseIdx)) { - continue; - } - if (pool->getPool(baseIdx)->primaryCmp(pool->getPool(startBaseIdx)) - < 0) { - startBaseIdx = baseIdx; - } - } - - // create a new line - word0 = pool->getPool(startBaseIdx); - pool->setPool(startBaseIdx, word0->next); - word0->next = NULL; - line = new TextLine(this, word0->rot, word0->base); - line->addWord(word0); - lastWord = word0; - - // compute the search range - fontSize = word0->fontSize; - minBase = word0->base - maxIntraLineDelta * fontSize; - maxBase = word0->base + maxIntraLineDelta * fontSize; - minBaseIdx = pool->getBaseIdx(minBase); - maxBaseIdx = pool->getBaseIdx(maxBase); - - // find the rest of the words in this line - while (1) { - - // find the left-most word whose baseline is in the range for - // this line - bestWordBaseIdx = 0; - bestWord0 = bestWord1 = NULL; - for (baseIdx = minBaseIdx; baseIdx <= maxBaseIdx; ++baseIdx) { - for (word0 = NULL, word1 = pool->getPool(baseIdx); - word1; - word0 = word1, word1 = word1->next) { - if (word1->base >= minBase && - word1->base <= maxBase && - (delta = lastWord->primaryDelta(word1)) >= - minCharSpacing * fontSize) { - if (delta < maxWordSpacing * fontSize && - (!bestWord1 || word1->primaryCmp(bestWord1) < 0)) { - bestWordBaseIdx = baseIdx; - bestWord0 = word0; - bestWord1 = word1; - } - break; - } - } - } - if (!bestWord1) { - break; - } - - // remove it from the pool, and add it to the line - if (bestWord0) { - bestWord0->next = bestWord1->next; - } else { - pool->setPool(bestWordBaseIdx, bestWord1->next); - } - bestWord1->next = NULL; - line->addWord(bestWord1); - lastWord = bestWord1; - } - - // add the line - if (curLine && line->cmpYX(curLine) > 0) { - line0 = curLine; - line1 = curLine->next; - } else { - line0 = NULL; - line1 = lines; - } - for (; - line1 && line->cmpYX(line1) > 0; - line0 = line1, line1 = line1->next) ; - if (line0) { - line0->next = line; - } else { - lines = line; - } - line->next = line1; - curLine = line; - line->coalesce(uMap); - charCount += line->len; - ++nLines; - } - - // sort lines into xy order for column assignment - lineArray = (TextLine **)gmallocn(nLines, sizeof(TextLine *)); - for (line = lines, i = 0; line; line = line->next, ++i) { - lineArray[i] = line; - } - qsort(lineArray, nLines, sizeof(TextLine *), &TextLine::cmpXY); - - // column assignment - nColumns = 0; - for (i = 0; i < nLines; ++i) { - line0 = lineArray[i]; - col1 = 0; - for (j = 0; j < i; ++j) { - line1 = lineArray[j]; - if (line1->primaryDelta(line0) >= 0) { - col2 = line1->col[line1->len] + 1; - } else { - k = 0; // make gcc happy - switch (rot) { - case 0: - for (k = 0; - k < line1->len && - line0->xMin >= 0.5 * (line1->edge[k] + line1->edge[k+1]); - ++k) ; - break; - case 1: - for (k = 0; - k < line1->len && - line0->yMin >= 0.5 * (line1->edge[k] + line1->edge[k+1]); - ++k) ; - break; - case 2: - for (k = 0; - k < line1->len && - line0->xMax <= 0.5 * (line1->edge[k] + line1->edge[k+1]); - ++k) ; - break; - case 3: - for (k = 0; - k < line1->len && - line0->yMax <= 0.5 * (line1->edge[k] + line1->edge[k+1]); - ++k) ; - break; - } - col2 = line1->col[k]; - } - if (col2 > col1) { - col1 = col2; - } - } - for (k = 0; k <= line0->len; ++k) { - line0->col[k] += col1; - } - if (line0->col[line0->len] > nColumns) { - nColumns = line0->col[line0->len]; - } - } - gfree(lineArray); -} - -void TextBlock::updatePriMinMax(TextBlock *blk) { - double newPriMin, newPriMax; - GBool gotPriMin, gotPriMax; - - gotPriMin = gotPriMax = gFalse; - newPriMin = newPriMax = 0; // make gcc happy - switch (page->primaryRot) { - case 0: - case 2: - if (blk->yMin < yMax && blk->yMax > yMin) { - if (blk->xMin < xMin) { - newPriMin = blk->xMax; - gotPriMin = gTrue; - } - if (blk->xMax > xMax) { - newPriMax = blk->xMin; - gotPriMax = gTrue; - } - } - break; - case 1: - case 3: - if (blk->xMin < xMax && blk->xMax > xMin) { - if (blk->yMin < yMin) { - newPriMin = blk->yMax; - gotPriMin = gTrue; - } - if (blk->yMax > yMax) { - newPriMax = blk->yMin; - gotPriMax = gTrue; - } - } - break; - } - if (gotPriMin) { - if (newPriMin > xMin) { - newPriMin = xMin; - } - if (newPriMin > priMin) { - priMin = newPriMin; - } - } - if (gotPriMax) { - if (newPriMax < xMax) { - newPriMax = xMax; - } - if (newPriMax < priMax) { - priMax = newPriMax; - } - } -} - -int TextBlock::cmpXYPrimaryRot(const void *p1, const void *p2) { - TextBlock *blk1 = *(TextBlock **)p1; - TextBlock *blk2 = *(TextBlock **)p2; - double cmp; - - cmp = 0; // make gcc happy - switch (blk1->page->primaryRot) { - case 0: - if ((cmp = blk1->xMin - blk2->xMin) == 0) { - cmp = blk1->yMin - blk2->yMin; - } - break; - case 1: - if ((cmp = blk1->yMin - blk2->yMin) == 0) { - cmp = blk2->xMax - blk1->xMax; - } - break; - case 2: - if ((cmp = blk2->xMax - blk1->xMax) == 0) { - cmp = blk2->yMin - blk1->yMin; - } - break; - case 3: - if ((cmp = blk2->yMax - blk1->yMax) == 0) { - cmp = blk1->xMax - blk2->xMax; - } - break; - } - return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; -} - -int TextBlock::cmpYXPrimaryRot(const void *p1, const void *p2) { - TextBlock *blk1 = *(TextBlock **)p1; - TextBlock *blk2 = *(TextBlock **)p2; - double cmp; - - cmp = 0; // make gcc happy - switch (blk1->page->primaryRot) { - case 0: - if ((cmp = blk1->yMin - blk2->yMin) == 0) { - cmp = blk1->xMin - blk2->xMin; - } - break; - case 1: - if ((cmp = blk2->xMax - blk1->xMax) == 0) { - cmp = blk1->yMin - blk2->yMin; - } - break; - case 2: - if ((cmp = blk2->yMin - blk1->yMin) == 0) { - cmp = blk2->xMax - blk1->xMax; - } - break; - case 3: - if ((cmp = blk1->xMax - blk2->xMax) == 0) { - cmp = blk2->yMax - blk1->yMax; - } - break; - } - return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; -} - -int TextBlock::primaryCmp(TextBlock *blk) { - double cmp; - - cmp = 0; // make gcc happy - switch (rot) { - case 0: - cmp = xMin - blk->xMin; - break; - case 1: - cmp = yMin - blk->yMin; - break; - case 2: - cmp = blk->xMax - xMax; - break; - case 3: - cmp = blk->yMax - yMax; - break; - } - return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; -} - -double TextBlock::secondaryDelta(TextBlock *blk) { - double delta; - - delta = 0; // make gcc happy - switch (rot) { - case 0: - delta = blk->yMin - yMax; - break; - case 1: - delta = xMin - blk->xMax; - break; - case 2: - delta = yMin - blk->yMax; - break; - case 3: - delta = blk->xMin - xMax; - break; - } - return delta; -} - -GBool TextBlock::isBelow(TextBlock *blk) { - GBool below; - - below = gFalse; // make gcc happy - switch (page->primaryRot) { - case 0: - below = xMin >= blk->priMin && xMax <= blk->priMax && - yMin > blk->yMin; - break; - case 1: - below = yMin >= blk->priMin && yMax <= blk->priMax && - xMax < blk->xMax; - break; - case 2: - below = xMin >= blk->priMin && xMax <= blk->priMax && - yMax < blk->yMax; - break; - case 3: - below = yMin >= blk->priMin && yMax <= blk->priMax && - xMin > blk->xMin; - break; - } - - return below; -} - -GBool TextBlock::isBeforeByRule1(TextBlock *blk1) { - GBool before = gFalse; - GBool overlap = gFalse; - - switch (this->page->primaryRot) { - case 0: - case 2: - overlap = ((this->ExMin <= blk1->ExMin) && - (blk1->ExMin <= this->ExMax)) || - ((blk1->ExMin <= this->ExMin) && - (this->ExMin <= blk1->ExMax)); - break; - case 1: - case 3: - overlap = ((this->EyMin <= blk1->EyMin) && - (blk1->EyMin <= this->EyMax)) || - ((blk1->EyMin <= this->EyMin) && - (this->EyMin <= blk1->EyMax)); - break; - } - switch (this->page->primaryRot) { - case 0: - before = overlap && this->EyMin < blk1->EyMin; - break; - case 1: - before = overlap && this->ExMax > blk1->ExMax; - break; - case 2: - before = overlap && this->EyMax > blk1->EyMax; - break; - case 3: - before = overlap && this->ExMin < blk1->ExMin; - break; - } - return before; -} - -GBool TextBlock::isBeforeByRule2(TextBlock *blk1) { - double cmp = 0; - int rotLR = rot; - - if (!page->primaryLR) { - rotLR = (rotLR + 2) % 4; - } - - switch (rotLR) { - case 0: - cmp = ExMax - blk1->ExMin; - break; - case 1: - cmp = EyMin - blk1->EyMax; - break; - case 2: - cmp = blk1->ExMax - ExMin; - break; - case 3: - cmp = blk1->EyMin - EyMax; - break; - } - return cmp <= 0; -} - -// Sort into reading order by performing a topological sort using the rules -// given in "High Performance Document Layout Analysis", T.M. Breuel, 2003. -// See http://pubs.iupr.org/#2003-breuel-sdiut -// Topological sort is done by depth first search, see -// http://en.wikipedia.org/wiki/Topological_sorting -int TextBlock::visitDepthFirst(TextBlock *blkList, int pos1, - TextBlock **sorted, int sortPos, - GBool* visited) { - int pos2; - TextBlock *blk1, *blk2, *blk3; - GBool before; - - if (visited[pos1]) { - return sortPos; - } - - blk1 = this; - -#if 0 // for debugging - printf("visited: %d %.2f..%.2f %.2f..%.2f\n", - sortPos, blk1->ExMin, blk1->ExMax, blk1->EyMin, blk1->EyMax); -#endif - visited[pos1] = gTrue; - pos2 = -1; - for (blk2 = blkList; blk2; blk2 = blk2->next) { - pos2++; - if (visited[pos2]) { - // skip visited nodes - continue; - } - before = gFalse; - - // is blk2 before blk1? (for table entries) - if (blk1->tableId >= 0 && blk1->tableId == blk2->tableId) { - if (page->primaryLR) { - if (blk2->xMax <= blk1->xMin && - blk2->yMin <= blk1->yMax && - blk2->yMax >= blk1->yMin) - before = gTrue; - } else { - if (blk2->xMin >= blk1->xMax && - blk2->yMin <= blk1->yMax && - blk2->yMax >= blk1->yMin) - before = gTrue; - } - - if (blk2->yMax <= blk1->yMin) - before = gTrue; - } else { - if (blk2->isBeforeByRule1(blk1)) { - // Rule (1) blk1 and blk2 overlap, and blk2 is above blk1. - before = gTrue; -#if 0 // for debugging - printf("rule1: %.2f..%.2f %.2f..%.2f %.2f..%.2f %.2f..%.2f\n", - blk2->ExMin, blk2->ExMax, blk2->EyMin, blk2->EyMax, - blk1->ExMin, blk1->ExMax, blk1->EyMin, blk1->EyMax); -#endif - } else if (blk2->isBeforeByRule2(blk1)) { - // Rule (2) blk2 left of blk1, and no intervening blk3 - // such that blk1 is before blk3 by rule 1, - // and blk3 is before blk2 by rule 1. - before = gTrue; - for (blk3 = blkList; blk3; blk3 = blk3->next) { - if (blk3 == blk2 || blk3 == blk1) { - continue; - } - if (blk1->isBeforeByRule1(blk3) && - blk3->isBeforeByRule1(blk2)) { - before = gFalse; - break; - } - } -#if 0 // for debugging - if (before) { - printf("rule2: %.2f..%.2f %.2f..%.2f %.2f..%.2f %.2f..%.2f\n", - blk1->ExMin, blk1->ExMax, blk1->EyMin, blk1->EyMax, - blk2->ExMin, blk2->ExMax, blk2->EyMin, blk2->EyMax); - } -#endif - } - } - if (before) { - // blk2 is before blk1, so it needs to be visited - // before we can add blk1 to the sorted list. - sortPos = blk2->visitDepthFirst(blkList, pos2, sorted, sortPos, visited); - } - } -#if 0 // for debugging - printf("sorted: %d %.2f..%.2f %.2f..%.2f\n", - sortPos, blk1->ExMin, blk1->ExMax, blk1->EyMin, blk1->EyMax); -#endif - sorted[sortPos++] = blk1; - return sortPos; -} - -//------------------------------------------------------------------------ -// TextFlow -//------------------------------------------------------------------------ - -TextFlow::TextFlow(TextPage *pageA, TextBlock *blk) { - page = pageA; - xMin = blk->xMin; - xMax = blk->xMax; - yMin = blk->yMin; - yMax = blk->yMax; - priMin = blk->priMin; - priMax = blk->priMax; - blocks = lastBlk = blk; - next = NULL; -} - -TextFlow::~TextFlow() { - TextBlock *blk; - - while (blocks) { - blk = blocks; - blocks = blocks->next; - delete blk; - } -} - -void TextFlow::addBlock(TextBlock *blk) { - if (lastBlk) { - lastBlk->next = blk; - } else { - blocks = blk; - } - lastBlk = blk; - if (blk->xMin < xMin) { - xMin = blk->xMin; - } - if (blk->xMax > xMax) { - xMax = blk->xMax; - } - if (blk->yMin < yMin) { - yMin = blk->yMin; - } - if (blk->yMax > yMax) { - yMax = blk->yMax; - } -} - -GBool TextFlow::blockFits(TextBlock *blk, TextBlock *prevBlk) { - GBool fits; - - // lower blocks must use smaller fonts - if (blk->lines->words->fontSize > lastBlk->lines->words->fontSize) { - return gFalse; - } - - fits = gFalse; // make gcc happy - switch (page->primaryRot) { - case 0: - fits = blk->xMin >= priMin && blk->xMax <= priMax; - break; - case 1: - fits = blk->yMin >= priMin && blk->yMax <= priMax; - break; - case 2: - fits = blk->xMin >= priMin && blk->xMax <= priMax; - break; - case 3: - fits = blk->yMin >= priMin && blk->yMax <= priMax; - break; - } - return fits; -} - -#if TEXTOUT_WORD_LIST - -//------------------------------------------------------------------------ -// TextWordList -//------------------------------------------------------------------------ - -TextWordList::TextWordList(TextPage *text, GBool physLayout) { - TextFlow *flow; - TextBlock *blk; - TextLine *line; - TextWord *word; - TextWord **wordArray; - int nWords, i; - - words = new GooList(); - - if (text->rawOrder) { - for (word = text->rawWords; word; word = word->next) { - words->append(word); - } - - } else if (physLayout) { - // this is inefficient, but it's also the least useful of these - // three cases - nWords = 0; - for (flow = text->flows; flow; flow = flow->next) { - for (blk = flow->blocks; blk; blk = blk->next) { - for (line = blk->lines; line; line = line->next) { - for (word = line->words; word; word = word->next) { - ++nWords; - } - } - } - } - wordArray = (TextWord **)gmallocn(nWords, sizeof(TextWord *)); - i = 0; - for (flow = text->flows; flow; flow = flow->next) { - for (blk = flow->blocks; blk; blk = blk->next) { - for (line = blk->lines; line; line = line->next) { - for (word = line->words; word; word = word->next) { - wordArray[i++] = word; - } - } - } - } - qsort(wordArray, nWords, sizeof(TextWord *), &TextWord::cmpYX); - for (i = 0; i < nWords; ++i) { - words->append(wordArray[i]); - } - gfree(wordArray); - - } else { - for (flow = text->flows; flow; flow = flow->next) { - for (blk = flow->blocks; blk; blk = blk->next) { - for (line = blk->lines; line; line = line->next) { - for (word = line->words; word; word = word->next) { - words->append(word); - } - } - } - } - } -} - -TextWordList::~TextWordList() { - delete words; -} - -int TextWordList::getLength() { - return words->getLength(); -} - -TextWord *TextWordList::get(int idx) { - if (idx < 0 || idx >= words->getLength()) { - return NULL; - } - return (TextWord *)words->get(idx); -} - -#endif // TEXTOUT_WORD_LIST - -//------------------------------------------------------------------------ -// TextPage -//------------------------------------------------------------------------ - -TextPage::TextPage(GBool rawOrderA) { - int rot; - - refCnt = 1; - rawOrder = rawOrderA; - curWord = NULL; - charPos = 0; - curFont = NULL; - curFontSize = 0; - nest = 0; - nTinyChars = 0; - lastCharOverlap = gFalse; - if (!rawOrder) { - for (rot = 0; rot < 4; ++rot) { - pools[rot] = new TextPool(); - } - } - flows = NULL; - blocks = NULL; - rawWords = NULL; - rawLastWord = NULL; - fonts = new GooList(); - lastFindXMin = lastFindYMin = 0; - haveLastFind = gFalse; - underlines = new GooList(); - links = new GooList(); -} - -TextPage::~TextPage() { - int rot; - - clear(); - if (!rawOrder) { - for (rot = 0; rot < 4; ++rot) { - delete pools[rot]; - } - } - delete fonts; - deleteGooList(underlines, TextUnderline); - deleteGooList(links, TextLink); -} - -void TextPage::incRefCnt() { - refCnt++; -} - -void TextPage::decRefCnt() { - if (--refCnt == 0) - delete this; -} - -void TextPage::startPage(GfxState *state) { - clear(); - if (state) { - pageWidth = state->getPageWidth(); - pageHeight = state->getPageHeight(); - } else { - pageWidth = pageHeight = 0; - } -} - -void TextPage::endPage() { - if (curWord) { - endWord(); - } -} - -void TextPage::clear() { - int rot; - TextFlow *flow; - TextWord *word; - - if (curWord) { - delete curWord; - curWord = NULL; - } - if (rawOrder) { - while (rawWords) { - word = rawWords; - rawWords = rawWords->next; - delete word; - } - } else { - for (rot = 0; rot < 4; ++rot) { - delete pools[rot]; - } - while (flows) { - flow = flows; - flows = flows->next; - delete flow; - } - gfree(blocks); - } - deleteGooList(fonts, TextFontInfo); - - curWord = NULL; - charPos = 0; - curFont = NULL; - curFontSize = 0; - nest = 0; - nTinyChars = 0; - if (!rawOrder) { - for (rot = 0; rot < 4; ++rot) { - pools[rot] = new TextPool(); - } - } - flows = NULL; - blocks = NULL; - rawWords = NULL; - rawLastWord = NULL; - fonts = new GooList(); -} - -void TextPage::updateFont(GfxState *state) { - GfxFont *gfxFont; - double *fm; - char *name; - int code, mCode, letterCode, anyCode; - double w; - int i; - - // get the font info object - curFont = NULL; - for (i = 0; i < fonts->getLength(); ++i) { - curFont = (TextFontInfo *)fonts->get(i); - if (curFont->matches(state)) { - break; - } - curFont = NULL; - } - if (!curFont) { - curFont = new TextFontInfo(state); - fonts->append(curFont); - } - - // adjust the font size - gfxFont = state->getFont(); - curFontSize = state->getTransformedFontSize(); - if (gfxFont && gfxFont->getType() == fontType3) { - // This is a hack which makes it possible to deal with some Type 3 - // fonts. The problem is that it's impossible to know what the - // base coordinate system used in the font is without actually - // rendering the font. This code tries to guess by looking at the - // width of the character 'm' (which breaks if the font is a - // subset that doesn't contain 'm'). - mCode = letterCode = anyCode = -1; - for (code = 0; code < 256; ++code) { - name = ((Gfx8BitFont *)gfxFont)->getCharName(code); - if (name && name[0] == 'm' && name[1] == '\0') { - mCode = code; - } - if (letterCode < 0 && name && name[1] == '\0' && - ((name[0] >= 'A' && name[0] <= 'Z') || - (name[0] >= 'a' && name[0] <= 'z'))) { - letterCode = code; - } - if (anyCode < 0 && name && - ((Gfx8BitFont *)gfxFont)->getWidth(code) > 0) { - anyCode = code; - } - } - if (mCode >= 0 && - (w = ((Gfx8BitFont *)gfxFont)->getWidth(mCode)) > 0) { - // 0.6 is a generic average 'm' width -- yes, this is a hack - curFontSize *= w / 0.6; - } else if (letterCode >= 0 && - (w = ((Gfx8BitFont *)gfxFont)->getWidth(letterCode)) > 0) { - // even more of a hack: 0.5 is a generic letter width - curFontSize *= w / 0.5; - } else if (anyCode >= 0 && - (w = ((Gfx8BitFont *)gfxFont)->getWidth(anyCode)) > 0) { - // better than nothing: 0.5 is a generic character width - curFontSize *= w / 0.5; - } - fm = gfxFont->getFontMatrix(); - if (fm[0] != 0) { - curFontSize *= fabs(fm[3] / fm[0]); - } - } -} - -void TextPage::beginWord(GfxState *state, double x0, double y0) { - GfxFont *gfxFont; - double *fontm; - double m[4], m2[4]; - int rot; - - // This check is needed because Type 3 characters can contain - // text-drawing operations (when TextPage is being used via - // {X,Win}SplashOutputDev rather than TextOutputDev). - if (curWord) { - ++nest; - return; - } - - // compute the rotation - state->getFontTransMat(&m[0], &m[1], &m[2], &m[3]); - gfxFont = state->getFont(); - if (gfxFont && gfxFont->getType() == fontType3) { - fontm = state->getFont()->getFontMatrix(); - m2[0] = fontm[0] * m[0] + fontm[1] * m[2]; - m2[1] = fontm[0] * m[1] + fontm[1] * m[3]; - m2[2] = fontm[2] * m[0] + fontm[3] * m[2]; - m2[3] = fontm[2] * m[1] + fontm[3] * m[3]; - m[0] = m2[0]; - m[1] = m2[1]; - m[2] = m2[2]; - m[3] = m2[3]; - } - if (fabs(m[0] * m[3]) > fabs(m[1] * m[2])) { - rot = (m[3] < 0) ? 0 : 2; - } else { - rot = (m[2] > 0) ? 1 : 3; - } - - curWord = new TextWord(state, rot, x0, y0, charPos, curFont, curFontSize); -} - -void TextPage::addChar(GfxState *state, double x, double y, - double dx, double dy, - CharCode c, int nBytes, Unicode *u, int uLen) { - double x1, y1, w1, h1, dx2, dy2, base, sp, delta; - GBool overlap; - int i; - - // subtract char and word spacing from the dx,dy values - sp = state->getCharSpace(); - if (c == (CharCode)0x20) { - sp += state->getWordSpace(); - } - state->textTransformDelta(sp * state->getHorizScaling(), 0, &dx2, &dy2); - dx -= dx2; - dy -= dy2; - state->transformDelta(dx, dy, &w1, &h1); - - // throw away chars that aren't inside the page bounds - // (and also do a sanity check on the character size) - state->transform(x, y, &x1, &y1); - if (x1 + w1 < 0 || x1 > pageWidth || - y1 + h1 < 0 || y1 > pageHeight || - w1 > pageWidth || h1 > pageHeight) { - charPos += nBytes; - return; - } - - // check the tiny chars limit - if (!globalParams->getTextKeepTinyChars() && - fabs(w1) < 3 && fabs(h1) < 3) { - if (++nTinyChars > 50000) { - charPos += nBytes; - return; - } - } - - // break words at space character - if (uLen == 1 && u[0] == (Unicode)0x20) { - if (curWord) { - ++curWord->charLen; - } - charPos += nBytes; - endWord(); - return; - } - - // start a new word if: - // (1) this character doesn't fall in the right place relative to - // the end of the previous word (this places upper and lower - // constraints on the position deltas along both the primary - // and secondary axes), or - // (2) this character overlaps the previous one (duplicated text), or - // (3) the previous character was an overlap (we want each duplicated - // character to be in a word by itself at this stage), - // (4) the font size has changed - if (curWord && curWord->len > 0) { - base = sp = delta = 0; // make gcc happy - switch (curWord->rot) { - case 0: - base = y1; - sp = x1 - curWord->xMax; - delta = x1 - curWord->edge[curWord->len - 1]; - break; - case 1: - base = x1; - sp = y1 - curWord->yMax; - delta = y1 - curWord->edge[curWord->len - 1]; - break; - case 2: - base = y1; - sp = curWord->xMin - x1; - delta = curWord->edge[curWord->len - 1] - x1; - break; - case 3: - base = x1; - sp = curWord->yMin - y1; - delta = curWord->edge[curWord->len - 1] - y1; - break; - } - overlap = fabs(delta) < dupMaxPriDelta * curWord->fontSize && - fabs(base - curWord->base) < dupMaxSecDelta * curWord->fontSize; - if (overlap || lastCharOverlap || - sp < -minDupBreakOverlap * curWord->fontSize || - sp > minWordBreakSpace * curWord->fontSize || - fabs(base - curWord->base) > 0.5 || - curFontSize != curWord->fontSize) { - endWord(); - } - lastCharOverlap = overlap; - } else { - lastCharOverlap = gFalse; - } - - if (uLen != 0) { - // start a new word if needed - if (!curWord) { - beginWord(state, x, y); - } - - // page rotation and/or transform matrices can cause text to be - // drawn in reverse order -- in this case, swap the begin/end - // coordinates and break text into individual chars - if ((curWord->rot == 0 && w1 < 0) || - (curWord->rot == 1 && h1 < 0) || - (curWord->rot == 2 && w1 > 0) || - (curWord->rot == 3 && h1 > 0)) { - endWord(); - beginWord(state, x + dx, y + dy); - x1 += w1; - y1 += h1; - w1 = -w1; - h1 = -h1; - } - - // add the characters to the current word - w1 /= uLen; - h1 /= uLen; - for (i = 0; i < uLen; ++i) { - if (u[i] >= 0xd800 && u[i] < 0xdc00) { /* surrogate pair */ - if (i + 1 < uLen && u[i+1] >= 0xdc00 && u[i+1] < 0xe000) { - /* next code is a low surrogate */ - Unicode uu = (((u[i] & 0x3ff) << 10) | (u[i+1] & 0x3ff)) + 0x10000; - i++; - curWord->addChar(state, x1 + i*w1, y1 + i*h1, w1, h1, c, uu); - } else { - /* missing low surrogate - replace it with REPLACEMENT CHARACTER (U+FFFD) */ - curWord->addChar(state, x1 + i*w1, y1 + i*h1, w1, h1, c, 0xfffd); - } - } else if (u[i] >= 0xdc00 && u[i] < 0xe000) { - /* invalid low surrogate - replace it with REPLACEMENT CHARACTER (U+FFFD) */ - curWord->addChar(state, x1 + i*w1, y1 + i*h1, w1, h1, c, 0xfffd); - } else { - curWord->addChar(state, x1 + i*w1, y1 + i*h1, w1, h1, c, u[i]); - } - } - } - if (curWord) { - curWord->charLen += nBytes; - } - charPos += nBytes; -} - -void TextPage::endWord() { - // This check is needed because Type 3 characters can contain - // text-drawing operations (when TextPage is being used via - // {X,Win}SplashOutputDev rather than TextOutputDev). - if (nest > 0) { - --nest; - return; - } - - if (curWord) { - addWord(curWord); - curWord = NULL; - } -} - -void TextPage::addWord(TextWord *word) { - // throw away zero-length words -- they don't have valid xMin/xMax - // values, and they're useless anyway - if (word->len == 0) { - delete word; - return; - } - - if (rawOrder) { - if (rawLastWord) { - rawLastWord->next = word; - } else { - rawWords = word; - } - rawLastWord = word; - } else { - pools[word->rot]->addWord(word); - } -} - -void TextPage::addUnderline(double x0, double y0, double x1, double y1) { - underlines->append(new TextUnderline(x0, y0, x1, y1)); -} - -void TextPage::addLink(int xMin, int yMin, int xMax, int yMax, AnnotLink *link) { - links->append(new TextLink(xMin, yMin, xMax, yMax, link)); -} - -void TextPage::coalesce(GBool physLayout, GBool doHTML) { - UnicodeMap *uMap; - TextPool *pool; - TextWord *word0, *word1, *word2; - TextLine *line; - TextBlock *blkList, *blk, *lastBlk, *blk0, *blk1, *blk2; - TextFlow *flow, *lastFlow; - TextUnderline *underline; - TextLink *link; - int rot, poolMinBaseIdx, baseIdx, startBaseIdx, endBaseIdx; - double minBase, maxBase, newMinBase, newMaxBase; - double fontSize, colSpace1, colSpace2, lineSpace, intraLineSpace, blkSpace; - GBool found; - int count[4]; - int lrCount; - int col1, col2; - int i, j, n; - - if (rawOrder) { - primaryRot = 0; - primaryLR = gTrue; - return; - } - - uMap = globalParams->getTextEncoding(); - blkList = NULL; - lastBlk = NULL; - nBlocks = 0; - primaryRot = -1; - -#if 0 // for debugging - printf("*** initial words ***\n"); - for (rot = 0; rot < 4; ++rot) { - pool = pools[rot]; - for (baseIdx = pool->minBaseIdx; baseIdx <= pool->maxBaseIdx; ++baseIdx) { - for (word0 = pool->getPool(baseIdx); word0; word0 = word0->next) { - printf(" word: x=%.2f..%.2f y=%.2f..%.2f base=%.2f fontSize=%.2f rot=%d link=%p '", - word0->xMin, word0->xMax, word0->yMin, word0->yMax, - word0->base, word0->fontSize, rot*90, word0->link); - for (i = 0; i < word0->len; ++i) { - fputc(word0->text[i] & 0xff, stdout); - } - printf("'\n"); - } - } - } - printf("\n"); -#endif - -#if 0 //~ for debugging - for (i = 0; i < underlines->getLength(); ++i) { - underline = (TextUnderline *)underlines->get(i); - printf("underline: x=%g..%g y=%g..%g horiz=%d\n", - underline->x0, underline->x1, underline->y0, underline->y1, - underline->horiz); - } -#endif - - if (doHTML) { - - //----- handle underlining - for (i = 0; i < underlines->getLength(); ++i) { - underline = (TextUnderline *)underlines->get(i); - if (underline->horiz) { - // rot = 0 - if (pools[0]->minBaseIdx <= pools[0]->maxBaseIdx) { - startBaseIdx = pools[0]->getBaseIdx(underline->y0 + minUnderlineGap); - endBaseIdx = pools[0]->getBaseIdx(underline->y0 + maxUnderlineGap); - for (j = startBaseIdx; j <= endBaseIdx; ++j) { - for (word0 = pools[0]->getPool(j); word0; word0 = word0->next) { - //~ need to check the y value against the word baseline - if (underline->x0 < word0->xMin + underlineSlack && - word0->xMax - underlineSlack < underline->x1) { - word0->underlined = gTrue; - } - } - } - } - - // rot = 2 - if (pools[2]->minBaseIdx <= pools[2]->maxBaseIdx) { - startBaseIdx = pools[2]->getBaseIdx(underline->y0 - maxUnderlineGap); - endBaseIdx = pools[2]->getBaseIdx(underline->y0 - minUnderlineGap); - for (j = startBaseIdx; j <= endBaseIdx; ++j) { - for (word0 = pools[2]->getPool(j); word0; word0 = word0->next) { - if (underline->x0 < word0->xMin + underlineSlack && - word0->xMax - underlineSlack < underline->x1) { - word0->underlined = gTrue; - } - } - } - } - } else { - // rot = 1 - if (pools[1]->minBaseIdx <= pools[1]->maxBaseIdx) { - startBaseIdx = pools[1]->getBaseIdx(underline->x0 - maxUnderlineGap); - endBaseIdx = pools[1]->getBaseIdx(underline->x0 - minUnderlineGap); - for (j = startBaseIdx; j <= endBaseIdx; ++j) { - for (word0 = pools[1]->getPool(j); word0; word0 = word0->next) { - if (underline->y0 < word0->yMin + underlineSlack && - word0->yMax - underlineSlack < underline->y1) { - word0->underlined = gTrue; - } - } - } - } - - // rot = 3 - if (pools[3]->minBaseIdx <= pools[3]->maxBaseIdx) { - startBaseIdx = pools[3]->getBaseIdx(underline->x0 + minUnderlineGap); - endBaseIdx = pools[3]->getBaseIdx(underline->x0 + maxUnderlineGap); - for (j = startBaseIdx; j <= endBaseIdx; ++j) { - for (word0 = pools[3]->getPool(j); word0; word0 = word0->next) { - if (underline->y0 < word0->yMin + underlineSlack && - word0->yMax - underlineSlack < underline->y1) { - word0->underlined = gTrue; - } - } - } - } - } - } - - //----- handle links - for (i = 0; i < links->getLength(); ++i) { - link = (TextLink *)links->get(i); - - // rot = 0 - if (pools[0]->minBaseIdx <= pools[0]->maxBaseIdx) { - startBaseIdx = pools[0]->getBaseIdx(link->yMin); - endBaseIdx = pools[0]->getBaseIdx(link->yMax); - for (j = startBaseIdx; j <= endBaseIdx; ++j) { - for (word0 = pools[0]->getPool(j); word0; word0 = word0->next) { - if (link->xMin < word0->xMin + hyperlinkSlack && - word0->xMax - hyperlinkSlack < link->xMax && - link->yMin < word0->yMin + hyperlinkSlack && - word0->yMax - hyperlinkSlack < link->yMax) { - word0->link = link->link; - } - } - } - } - - // rot = 2 - if (pools[2]->minBaseIdx <= pools[2]->maxBaseIdx) { - startBaseIdx = pools[2]->getBaseIdx(link->yMin); - endBaseIdx = pools[2]->getBaseIdx(link->yMax); - for (j = startBaseIdx; j <= endBaseIdx; ++j) { - for (word0 = pools[2]->getPool(j); word0; word0 = word0->next) { - if (link->xMin < word0->xMin + hyperlinkSlack && - word0->xMax - hyperlinkSlack < link->xMax && - link->yMin < word0->yMin + hyperlinkSlack && - word0->yMax - hyperlinkSlack < link->yMax) { - word0->link = link->link; - } - } - } - } - - // rot = 1 - if (pools[1]->minBaseIdx <= pools[1]->maxBaseIdx) { - startBaseIdx = pools[1]->getBaseIdx(link->xMin); - endBaseIdx = pools[1]->getBaseIdx(link->xMax); - for (j = startBaseIdx; j <= endBaseIdx; ++j) { - for (word0 = pools[1]->getPool(j); word0; word0 = word0->next) { - if (link->yMin < word0->yMin + hyperlinkSlack && - word0->yMax - hyperlinkSlack < link->yMax && - link->xMin < word0->xMin + hyperlinkSlack && - word0->xMax - hyperlinkSlack < link->xMax) { - word0->link = link->link; - } - } - } - } - - // rot = 3 - if (pools[3]->minBaseIdx <= pools[3]->maxBaseIdx) { - startBaseIdx = pools[3]->getBaseIdx(link->xMin); - endBaseIdx = pools[3]->getBaseIdx(link->xMax); - for (j = startBaseIdx; j <= endBaseIdx; ++j) { - for (word0 = pools[3]->getPool(j); word0; word0 = word0->next) { - if (link->yMin < word0->yMin + hyperlinkSlack && - word0->yMax - hyperlinkSlack < link->yMax && - link->xMin < word0->xMin + hyperlinkSlack && - word0->xMax - hyperlinkSlack < link->xMax) { - word0->link = link->link; - } - } - } - } - } - } - - //----- assemble the blocks - - //~ add an outer loop for writing mode (vertical text) - - // build blocks for each rotation value - for (rot = 0; rot < 4; ++rot) { - pool = pools[rot]; - poolMinBaseIdx = pool->minBaseIdx; - count[rot] = 0; - - // add blocks until no more words are left - while (1) { - - // find the first non-empty line in the pool - for (; - poolMinBaseIdx <= pool->maxBaseIdx && - !pool->getPool(poolMinBaseIdx); - ++poolMinBaseIdx) ; - if (poolMinBaseIdx > pool->maxBaseIdx) { - break; - } - - // look for the left-most word in the first four lines of the - // pool -- this avoids starting with a superscript word - startBaseIdx = poolMinBaseIdx; - for (baseIdx = poolMinBaseIdx + 1; - baseIdx < poolMinBaseIdx + 4 && baseIdx <= pool->maxBaseIdx; - ++baseIdx) { - if (!pool->getPool(baseIdx)) { - continue; - } - if (pool->getPool(baseIdx)->primaryCmp(pool->getPool(startBaseIdx)) - < 0) { - startBaseIdx = baseIdx; - } - } - - // create a new block - word0 = pool->getPool(startBaseIdx); - pool->setPool(startBaseIdx, word0->next); - word0->next = NULL; - blk = new TextBlock(this, rot); - blk->addWord(word0); - - fontSize = word0->fontSize; - minBase = maxBase = word0->base; - colSpace1 = minColSpacing1 * fontSize; - colSpace2 = minColSpacing2 * fontSize; - lineSpace = maxLineSpacingDelta * fontSize; - intraLineSpace = maxIntraLineDelta * fontSize; - - // add words to the block - do { - found = gFalse; - - // look for words on the line above the current top edge of - // the block - newMinBase = minBase; - for (baseIdx = pool->getBaseIdx(minBase); - baseIdx >= pool->getBaseIdx(minBase - lineSpace); - --baseIdx) { - word0 = NULL; - word1 = pool->getPool(baseIdx); - while (word1) { - if (word1->base < minBase && - word1->base >= minBase - lineSpace && - ((rot == 0 || rot == 2) - ? (word1->xMin < blk->xMax && word1->xMax > blk->xMin) - : (word1->yMin < blk->yMax && word1->yMax > blk->yMin)) && - fabs(word1->fontSize - fontSize) < - maxBlockFontSizeDelta1 * fontSize) { - word2 = word1; - if (word0) { - word0->next = word1->next; - } else { - pool->setPool(baseIdx, word1->next); - } - word1 = word1->next; - word2->next = NULL; - blk->addWord(word2); - found = gTrue; - newMinBase = word2->base; - } else { - word0 = word1; - word1 = word1->next; - } - } - } - minBase = newMinBase; - - // look for words on the line below the current bottom edge of - // the block - newMaxBase = maxBase; - for (baseIdx = pool->getBaseIdx(maxBase); - baseIdx <= pool->getBaseIdx(maxBase + lineSpace); - ++baseIdx) { - word0 = NULL; - word1 = pool->getPool(baseIdx); - while (word1) { - if (word1->base > maxBase && - word1->base <= maxBase + lineSpace && - ((rot == 0 || rot == 2) - ? (word1->xMin < blk->xMax && word1->xMax > blk->xMin) - : (word1->yMin < blk->yMax && word1->yMax > blk->yMin)) && - fabs(word1->fontSize - fontSize) < - maxBlockFontSizeDelta1 * fontSize) { - word2 = word1; - if (word0) { - word0->next = word1->next; - } else { - pool->setPool(baseIdx, word1->next); - } - word1 = word1->next; - word2->next = NULL; - blk->addWord(word2); - found = gTrue; - newMaxBase = word2->base; - } else { - word0 = word1; - word1 = word1->next; - } - } - } - maxBase = newMaxBase; - - // look for words that are on lines already in the block, and - // that overlap the block horizontally - for (baseIdx = pool->getBaseIdx(minBase - intraLineSpace); - baseIdx <= pool->getBaseIdx(maxBase + intraLineSpace); - ++baseIdx) { - word0 = NULL; - word1 = pool->getPool(baseIdx); - while (word1) { - if (word1->base >= minBase - intraLineSpace && - word1->base <= maxBase + intraLineSpace && - ((rot == 0 || rot == 2) - ? (word1->xMin < blk->xMax + colSpace1 && - word1->xMax > blk->xMin - colSpace1) - : (word1->yMin < blk->yMax + colSpace1 && - word1->yMax > blk->yMin - colSpace1)) && - fabs(word1->fontSize - fontSize) < - maxBlockFontSizeDelta2 * fontSize) { - word2 = word1; - if (word0) { - word0->next = word1->next; - } else { - pool->setPool(baseIdx, word1->next); - } - word1 = word1->next; - word2->next = NULL; - blk->addWord(word2); - found = gTrue; - } else { - word0 = word1; - word1 = word1->next; - } - } - } - - // only check for outlying words (the next two chunks of code) - // if we didn't find anything else - if (found) { - continue; - } - - // scan down the left side of the block, looking for words - // that are near (but not overlapping) the block; if there are - // three or fewer, add them to the block - n = 0; - for (baseIdx = pool->getBaseIdx(minBase - intraLineSpace); - baseIdx <= pool->getBaseIdx(maxBase + intraLineSpace); - ++baseIdx) { - word1 = pool->getPool(baseIdx); - while (word1) { - if (word1->base >= minBase - intraLineSpace && - word1->base <= maxBase + intraLineSpace && - ((rot == 0 || rot == 2) - ? (word1->xMax <= blk->xMin && - word1->xMax > blk->xMin - colSpace2) - : (word1->yMax <= blk->yMin && - word1->yMax > blk->yMin - colSpace2)) && - fabs(word1->fontSize - fontSize) < - maxBlockFontSizeDelta3 * fontSize) { - ++n; - break; - } - word1 = word1->next; - } - } - if (n > 0 && n <= 3) { - for (baseIdx = pool->getBaseIdx(minBase - intraLineSpace); - baseIdx <= pool->getBaseIdx(maxBase + intraLineSpace); - ++baseIdx) { - word0 = NULL; - word1 = pool->getPool(baseIdx); - while (word1) { - if (word1->base >= minBase - intraLineSpace && - word1->base <= maxBase + intraLineSpace && - ((rot == 0 || rot == 2) - ? (word1->xMax <= blk->xMin && - word1->xMax > blk->xMin - colSpace2) - : (word1->yMax <= blk->yMin && - word1->yMax > blk->yMin - colSpace2)) && - fabs(word1->fontSize - fontSize) < - maxBlockFontSizeDelta3 * fontSize) { - word2 = word1; - if (word0) { - word0->next = word1->next; - } else { - pool->setPool(baseIdx, word1->next); - } - word1 = word1->next; - word2->next = NULL; - blk->addWord(word2); - if (word2->base < minBase) { - minBase = word2->base; - } else if (word2->base > maxBase) { - maxBase = word2->base; - } - found = gTrue; - break; - } else { - word0 = word1; - word1 = word1->next; - } - } - } - } - - // scan down the right side of the block, looking for words - // that are near (but not overlapping) the block; if there are - // three or fewer, add them to the block - n = 0; - for (baseIdx = pool->getBaseIdx(minBase - intraLineSpace); - baseIdx <= pool->getBaseIdx(maxBase + intraLineSpace); - ++baseIdx) { - word1 = pool->getPool(baseIdx); - while (word1) { - if (word1->base >= minBase - intraLineSpace && - word1->base <= maxBase + intraLineSpace && - ((rot == 0 || rot == 2) - ? (word1->xMin >= blk->xMax && - word1->xMin < blk->xMax + colSpace2) - : (word1->yMin >= blk->yMax && - word1->yMin < blk->yMax + colSpace2)) && - fabs(word1->fontSize - fontSize) < - maxBlockFontSizeDelta3 * fontSize) { - ++n; - break; - } - word1 = word1->next; - } - } - if (n > 0 && n <= 3) { - for (baseIdx = pool->getBaseIdx(minBase - intraLineSpace); - baseIdx <= pool->getBaseIdx(maxBase + intraLineSpace); - ++baseIdx) { - word0 = NULL; - word1 = pool->getPool(baseIdx); - while (word1) { - if (word1->base >= minBase - intraLineSpace && - word1->base <= maxBase + intraLineSpace && - ((rot == 0 || rot == 2) - ? (word1->xMin >= blk->xMax && - word1->xMin < blk->xMax + colSpace2) - : (word1->yMin >= blk->yMax && - word1->yMin < blk->yMax + colSpace2)) && - fabs(word1->fontSize - fontSize) < - maxBlockFontSizeDelta3 * fontSize) { - word2 = word1; - if (word0) { - word0->next = word1->next; - } else { - pool->setPool(baseIdx, word1->next); - } - word1 = word1->next; - word2->next = NULL; - blk->addWord(word2); - if (word2->base < minBase) { - minBase = word2->base; - } else if (word2->base > maxBase) { - maxBase = word2->base; - } - found = gTrue; - break; - } else { - word0 = word1; - word1 = word1->next; - } - } - } - } - - } while (found); - - //~ need to compute the primary writing mode (horiz/vert) in - //~ addition to primary rotation - - // coalesce the block, and add it to the list - blk->coalesce(uMap); - if (lastBlk) { - lastBlk->next = blk; - } else { - blkList = blk; - } - lastBlk = blk; - count[rot] += blk->charCount; - if (primaryRot < 0 || count[rot] > count[primaryRot]) { - primaryRot = rot; - } - ++nBlocks; - } - } - -#if 0 // for debugging - printf("*** rotation ***\n"); - for (rot = 0; rot < 4; ++rot) { - printf(" %d: %6d\n", rot, count[rot]); - } - printf(" primary rot = %d\n", primaryRot); - printf("\n"); -#endif - -#if 0 // for debugging - printf("*** blocks ***\n"); - for (blk = blkList; blk; blk = blk->next) { - printf("block: rot=%d x=%.2f..%.2f y=%.2f..%.2f\n", - blk->rot, blk->xMin, blk->xMax, blk->yMin, blk->yMax); - for (line = blk->lines; line; line = line->next) { - printf(" line: x=%.2f..%.2f y=%.2f..%.2f base=%.2f\n", - line->xMin, line->xMax, line->yMin, line->yMax, line->base); - for (word0 = line->words; word0; word0 = word0->next) { - printf(" word: x=%.2f..%.2f y=%.2f..%.2f base=%.2f fontSize=%.2f space=%d: '", - word0->xMin, word0->xMax, word0->yMin, word0->yMax, - word0->base, word0->fontSize, word0->spaceAfter); - for (i = 0; i < word0->len; ++i) { - fputc(word0->text[i] & 0xff, stdout); - } - printf("'\n"); - } - } - } - printf("\n"); -#endif - - // determine the primary direction - lrCount = 0; - for (blk = blkList; blk; blk = blk->next) { - for (line = blk->lines; line; line = line->next) { - for (word0 = line->words; word0; word0 = word0->next) { - for (i = 0; i < word0->len; ++i) { - if (unicodeTypeL(word0->text[i])) { - ++lrCount; - } else if (unicodeTypeR(word0->text[i])) { - --lrCount; - } - } - } - } - } - primaryLR = lrCount >= 0; - -#if 0 // for debugging - printf("*** direction ***\n"); - printf("lrCount = %d\n", lrCount); - printf("primaryLR = %d\n", primaryLR); -#endif - - //----- column assignment - - // sort blocks into xy order for column assignment - if (blocks) - gfree (blocks); - blocks = (TextBlock **)gmallocn(nBlocks, sizeof(TextBlock *)); - for (blk = blkList, i = 0; blk; blk = blk->next, ++i) { - blocks[i] = blk; - } - qsort(blocks, nBlocks, sizeof(TextBlock *), &TextBlock::cmpXYPrimaryRot); - - // column assignment - for (i = 0; i < nBlocks; ++i) { - blk0 = blocks[i]; - col1 = 0; - for (j = 0; j < i; ++j) { - blk1 = blocks[j]; - col2 = 0; // make gcc happy - switch (primaryRot) { - case 0: - if (blk0->xMin > blk1->xMax) { - col2 = blk1->col + blk1->nColumns + 3; - } else if (blk1->xMax == blk1->xMin) { - col2 = blk1->col; - } else { - col2 = blk1->col + (int)(((blk0->xMin - blk1->xMin) / - (blk1->xMax - blk1->xMin)) * - blk1->nColumns); - } - break; - case 1: - if (blk0->yMin > blk1->yMax) { - col2 = blk1->col + blk1->nColumns + 3; - } else if (blk1->yMax == blk1->yMin) { - col2 = blk1->col; - } else { - col2 = blk1->col + (int)(((blk0->yMin - blk1->yMin) / - (blk1->yMax - blk1->yMin)) * - blk1->nColumns); - } - break; - case 2: - if (blk0->xMax < blk1->xMin) { - col2 = blk1->col + blk1->nColumns + 3; - } else if (blk1->xMin == blk1->xMax) { - col2 = blk1->col; - } else { - col2 = blk1->col + (int)(((blk0->xMax - blk1->xMax) / - (blk1->xMin - blk1->xMax)) * - blk1->nColumns); - } - break; - case 3: - if (blk0->yMax < blk1->yMin) { - col2 = blk1->col + blk1->nColumns + 3; - } else if (blk1->yMin == blk1->yMax) { - col2 = blk1->col; - } else { - col2 = blk1->col + (int)(((blk0->yMax - blk1->yMax) / - (blk1->yMin - blk1->yMax)) * - blk1->nColumns); - } - break; - } - if (col2 > col1) { - col1 = col2; - } - } - blk0->col = col1; - for (line = blk0->lines; line; line = line->next) { - for (j = 0; j <= line->len; ++j) { - line->col[j] += col1; - } - } - } - -#if 0 // for debugging - printf("*** blocks, after column assignment ***\n"); - for (blk = blkList; blk; blk = blk->next) { - printf("block: rot=%d x=%.2f..%.2f y=%.2f..%.2f col=%d nCols=%d\n", - blk->rot, blk->xMin, blk->xMax, blk->yMin, blk->yMax, blk->col, - blk->nColumns); - for (line = blk->lines; line; line = line->next) { - printf(" line:\n"); - for (word0 = line->words; word0; word0 = word0->next) { - printf(" word: x=%.2f..%.2f y=%.2f..%.2f base=%.2f fontSize=%.2f space=%d: '", - word0->xMin, word0->xMax, word0->yMin, word0->yMax, - word0->base, word0->fontSize, word0->spaceAfter); - for (i = 0; i < word0->len; ++i) { - fputc(word0->text[i] & 0xff, stdout); - } - printf("'\n"); - } - } - } - printf("\n"); -#endif - - //----- reading order sort - - // compute space on left and right sides of each block - for (i = 0; i < nBlocks; ++i) { - blk0 = blocks[i]; - for (j = 0; j < nBlocks; ++j) { - blk1 = blocks[j]; - if (blk1 != blk0) { - blk0->updatePriMinMax(blk1); - } - } - } - -#if 0 // for debugging - printf("PAGE\n"); -#endif - - int sortPos = 0; - GBool *visited = (GBool *)gmallocn(nBlocks, sizeof(GBool)); - for (i = 0; i < nBlocks; i++) { - visited[i] = gFalse; - } - - double bxMin0, byMin0, bxMin1, byMin1; - int numTables = 0; - int tableId = -1; - int correspondenceX, correspondenceY; - double xCentre1, yCentre1, xCentre2, yCentre2; - double xCentre3, yCentre3, xCentre4, yCentre4; - double deltaX, deltaY; - TextBlock *fblk2 = NULL, *fblk3 = NULL, *fblk4 = NULL; - - for (blk1 = blkList; blk1; blk1 = blk1->next) { - blk1->ExMin = blk1->xMin; - blk1->ExMax = blk1->xMax; - blk1->EyMin = blk1->yMin; - blk1->EyMax = blk1->yMax; - - bxMin0 = DBL_MAX; - byMin0 = DBL_MAX; - bxMin1 = DBL_MAX; - byMin1 = DBL_MAX; - - fblk2 = NULL; - fblk3 = NULL; - fblk4 = NULL; - - /* find fblk2, fblk3 and fblk4 so that - * fblk2 is on the right of blk1 and overlap with blk1 in y axis - * fblk3 is under blk1 and overlap with blk1 in x axis - * fblk4 is under blk1 and on the right of blk1 - * and they are closest to blk1 - */ - for (blk2 = blkList; blk2; blk2 = blk2->next) { - if (blk2 != blk1) { - if (blk2->yMin <= blk1->yMax && - blk2->yMax >= blk1->yMin && - blk2->xMin > blk1->xMax && - blk2->xMin < bxMin0) { - bxMin0 = blk2->xMin; - fblk2 = blk2; - } else if (blk2->xMin <= blk1->xMax && - blk2->xMax >= blk1->xMin && - blk2->yMin > blk1->yMax && - blk2->yMin < byMin0) { - byMin0 = blk2->yMin; - fblk3 = blk2; - } else if (blk2->xMin > blk1->xMax && - blk2->xMin < bxMin1 && - blk2->yMin > blk1->yMax && - blk2->yMin < byMin1) { - bxMin1 = blk2->xMin; - byMin1 = blk2->yMin; - fblk4 = blk2; - } - } - } - - /* fblk4 can not overlap with fblk3 in x and with fblk2 in y - * fblk2 can not overlap with fblk3 in x and y - * fblk4 has to overlap with fblk3 in y and with fblk2 in x - */ - if (fblk2 != NULL && - fblk3 != NULL && - fblk4 != NULL) { - if (((fblk3->xMin <= fblk4->xMax && fblk3->xMax >= fblk4->xMin) || - (fblk2->yMin <= fblk4->yMax && fblk2->yMax >= fblk4->yMin) || - (fblk2->xMin <= fblk3->xMax && fblk2->xMax >= fblk3->xMin) || - (fblk2->yMin <= fblk3->yMax && fblk2->yMax >= fblk3->yMin)) || - !(fblk4->xMin <= fblk2->xMax && fblk4->xMax >= fblk2->xMin && - fblk4->yMin <= fblk3->yMax && fblk4->yMax >= fblk3->yMin)) { - fblk2 = NULL; - fblk3 = NULL; - fblk4 = NULL; - } - } - - // if we found any then look whether they form a table - if (fblk2 != NULL && - fblk3 != NULL && - fblk4 != NULL) { - tableId = -1; - correspondenceX = 0; - correspondenceY = 0; - deltaX = 0.0; - deltaY = 0.0; - - if (blk1->lines && blk1->lines->words) - deltaX = blk1->lines->words->getFontSize(); - if (fblk2->lines && fblk2->lines->words) - deltaX = deltaX < fblk2->lines->words->getFontSize() ? - deltaX : fblk2->lines->words->getFontSize(); - if (fblk3->lines && fblk3->lines->words) - deltaX = deltaX < fblk3->lines->words->getFontSize() ? - deltaX : fblk3->lines->words->getFontSize(); - if (fblk4->lines && fblk4->lines->words) - deltaX = deltaX < fblk4->lines->words->getFontSize() ? - deltaX : fblk4->lines->words->getFontSize(); - - deltaY = deltaX; - - deltaX *= minColSpacing1; - deltaY *= maxIntraLineDelta; - - xCentre1 = (blk1->xMax + blk1->xMin) / 2.0; - yCentre1 = (blk1->yMax + blk1->yMin) / 2.0; - xCentre2 = (fblk2->xMax + fblk2->xMin) / 2.0; - yCentre2 = (fblk2->yMax + fblk2->yMin) / 2.0; - xCentre3 = (fblk3->xMax + fblk3->xMin) / 2.0; - yCentre3 = (fblk3->yMax + fblk3->yMin) / 2.0; - xCentre4 = (fblk4->xMax + fblk4->xMin) / 2.0; - yCentre4 = (fblk4->yMax + fblk4->yMin) / 2.0; - - // are blocks centrally aligned in x ? - if (fabs (xCentre1 - xCentre3) <= deltaX && - fabs (xCentre2 - xCentre4) <= deltaX) - correspondenceX++; - - // are blocks centrally aligned in y ? - if (fabs (yCentre1 - yCentre2) <= deltaY && - fabs (yCentre3 - yCentre4) <= deltaY) - correspondenceY++; - - // are blocks aligned to the left ? - if (fabs (blk1->xMin - fblk3->xMin) <= deltaX && - fabs (fblk2->xMin - fblk4->xMin) <= deltaX) - correspondenceX++; - - // are blocks aligned to the right ? - if (fabs (blk1->xMax - fblk3->xMax) <= deltaX && - fabs (fblk2->xMax - fblk4->xMax) <= deltaX) - correspondenceX++; - - // are blocks aligned to the top ? - if (fabs (blk1->yMin - fblk2->yMin) <= deltaY && - fabs (fblk3->yMin - fblk4->yMin) <= deltaY) - correspondenceY++; - - // are blocks aligned to the bottom ? - if (fabs (blk1->yMax - fblk2->yMax) <= deltaY && - fabs (fblk3->yMax - fblk4->yMax) <= deltaY) - correspondenceY++; - - // are blocks aligned in x and y ? - if (correspondenceX > 0 && - correspondenceY > 0) { - - // find maximal tableId - tableId = tableId < fblk4->tableId ? fblk4->tableId : tableId; - tableId = tableId < fblk3->tableId ? fblk3->tableId : tableId; - tableId = tableId < fblk2->tableId ? fblk2->tableId : tableId; - tableId = tableId < blk1->tableId ? blk1->tableId : tableId; - - // if the tableId is -1, then we found new table - if (tableId < 0) { - tableId = numTables; - numTables++; - } - - blk1->tableId = tableId; - fblk2->tableId = tableId; - fblk3->tableId = tableId; - fblk4->tableId = tableId; - } - } - } - - /* set extended bounding boxes of all table entries - * so that they contain whole table - * (we need to process whole table size when comparing it - * with regular text blocks) - */ - PDFRectangle *envelopes = new PDFRectangle [numTables]; - TextBlock **ending_blocks = new TextBlock* [numTables]; - - for (i = 0; i < numTables; i++) { - envelopes[i].x1 = DBL_MAX; - envelopes[i].x2 = DBL_MIN; - envelopes[i].y1 = DBL_MAX; - envelopes[i].y2 = DBL_MIN; - } - - for (blk1 = blkList; blk1; blk1 = blk1->next) { - if (blk1->tableId >= 0) { - if (blk1->ExMin < envelopes[blk1->tableId].x1) { - envelopes[blk1->tableId].x1 = blk1->ExMin; - if (!blk1->page->primaryLR) - ending_blocks[blk1->tableId] = blk1; - } - - if (blk1->ExMax > envelopes[blk1->tableId].x2) { - envelopes[blk1->tableId].x2 = blk1->ExMax; - if (blk1->page->primaryLR) - ending_blocks[blk1->tableId] = blk1; - } - - envelopes[blk1->tableId].y1 = blk1->EyMin < envelopes[blk1->tableId].y1 ? - blk1->EyMin : envelopes[blk1->tableId].y1; - envelopes[blk1->tableId].y2 = blk1->EyMax > envelopes[blk1->tableId].y2 ? - blk1->EyMax : envelopes[blk1->tableId].y2; - } - } - - for (blk1 = blkList; blk1; blk1 = blk1->next) { - if (blk1->tableId >= 0 && - blk1->xMin <= ending_blocks[blk1->tableId]->xMax && - blk1->xMax >= ending_blocks[blk1->tableId]->xMin) { - blk1->tableEnd = gTrue; - } - } - - for (blk1 = blkList; blk1; blk1 = blk1->next) { - if (blk1->tableId >= 0) { - blk1->ExMin = envelopes[blk1->tableId].x1; - blk1->ExMax = envelopes[blk1->tableId].x2; - blk1->EyMin = envelopes[blk1->tableId].y1; - blk1->EyMax = envelopes[blk1->tableId].y2; - } - } - delete[] envelopes; - delete[] ending_blocks; - - - /* set extended bounding boxes of all other blocks - * so that they extend in x without hitting neighbours - */ - for (blk1 = blkList; blk1; blk1 = blk1->next) { - if (!blk1->tableId >= 0) { - double xMax = DBL_MAX; - double xMin = DBL_MIN; - - for (blk2 = blkList; blk2; blk2 = blk2->next) { - if (blk2 == blk1) - continue; - - if (blk1->yMin <= blk2->yMax && blk1->yMax >= blk2->yMin) { - if (blk2->xMin < xMax && blk2->xMin > blk1->xMax) - xMax = blk2->xMin; - - if (blk2->xMax > xMin && blk2->xMax < blk1->xMin) - xMin = blk2->xMax; - } - } - - for (blk2 = blkList; blk2; blk2 = blk2->next) { - if (blk2 == blk1) - continue; - - if (blk2->xMax > blk1->ExMax && - blk2->xMax <= xMax && - blk2->yMin >= blk1->yMax) { - blk1->ExMax = blk2->xMax; - } - - if (blk2->xMin < blk1->ExMin && - blk2->xMin >= xMin && - blk2->yMin >= blk1->yMax) - blk1->ExMin = blk2->xMin; - } - } - } - - i = -1; - for (blk1 = blkList; blk1; blk1 = blk1->next) { - i++; - sortPos = blk1->visitDepthFirst(blkList, i, blocks, sortPos, visited); - } - if (visited) { - gfree(visited); - } - -#if 0 // for debugging - printf("*** blocks, after ro sort ***\n"); - for (i = 0; i < nBlocks; ++i) { - blk = blocks[i]; - printf("block: rot=%d x=%.2f..%.2f y=%.2f..%.2f space=%.2f..%.2f\n", - blk->rot, blk->xMin, blk->xMax, blk->yMin, blk->yMax, - blk->priMin, blk->priMax); - for (line = blk->lines; line; line = line->next) { - printf(" line:\n"); - for (word0 = line->words; word0; word0 = word0->next) { - printf(" word: x=%.2f..%.2f y=%.2f..%.2f base=%.2f fontSize=%.2f space=%d: '", - word0->xMin, word0->xMax, word0->yMin, word0->yMax, - word0->base, word0->fontSize, word0->spaceAfter); - for (j = 0; j < word0->len; ++j) { - fputc(word0->text[j] & 0xff, stdout); - } - printf("'\n"); - } - } - } - printf("\n"); - fflush(stdout); -#endif - - // build the flows - //~ this needs to be adjusted for writing mode (vertical text) - //~ this also needs to account for right-to-left column ordering - flow = NULL; - while (flows) { - flow = flows; - flows = flows->next; - delete flow; - } - flows = lastFlow = NULL; - // assume blocks are already in reading order, - // and construct flows accordingly. - for (i = 0; i < nBlocks; i++) { - blk = blocks[i]; - blk->next = NULL; - if (flow) { - blk1 = blocks[i - 1]; - blkSpace = maxBlockSpacing * blk1->lines->words->fontSize; - if (blk1->secondaryDelta(blk) <= blkSpace && - blk->isBelow(blk1) && - flow->blockFits(blk, blk1)) { - flow->addBlock(blk); - continue; - } - } - flow = new TextFlow(this, blk); - if (lastFlow) { - lastFlow->next = flow; - } else { - flows = flow; - } - lastFlow = flow; - } - -#if 0 // for debugging - printf("*** flows ***\n"); - for (flow = flows; flow; flow = flow->next) { - printf("flow: x=%.2f..%.2f y=%.2f..%.2f pri:%.2f..%.2f\n", - flow->xMin, flow->xMax, flow->yMin, flow->yMax, - flow->priMin, flow->priMax); - for (blk = flow->blocks; blk; blk = blk->next) { - printf(" block: rot=%d x=%.2f..%.2f y=%.2f..%.2f pri=%.2f..%.2f\n", - blk->rot, blk->ExMin, blk->ExMax, blk->EyMin, blk->EyMax, - blk->priMin, blk->priMax); - for (line = blk->lines; line; line = line->next) { - printf(" line:\n"); - for (word0 = line->words; word0; word0 = word0->next) { - printf(" word: x=%.2f..%.2f y=%.2f..%.2f base=%.2f fontSize=%.2f space=%d: '", - word0->xMin, word0->xMax, word0->yMin, word0->yMax, - word0->base, word0->fontSize, word0->spaceAfter); - for (i = 0; i < word0->len; ++i) { - fputc(word0->text[i] & 0xff, stdout); - } - printf("'\n"); - } - } - } - } - printf("\n"); -#endif - - if (uMap) { - uMap->decRefCnt(); - } -} - -GBool TextPage::findText(Unicode *s, int len, - GBool startAtTop, GBool stopAtBottom, - GBool startAtLast, GBool stopAtLast, - GBool caseSensitive, GBool backward, - double *xMin, double *yMin, - double *xMax, double *yMax) { - TextBlock *blk; - TextLine *line; - Unicode *s2, *txt; - Unicode *p; - int txtSize, m, i, j, k; - double xStart, yStart, xStop, yStop; - double xMin0, yMin0, xMax0, yMax0; - double xMin1, yMin1, xMax1, yMax1; - GBool found; - - //~ needs to handle right-to-left text - - if (rawOrder) { - return gFalse; - } - - // convert the search string to uppercase - if (!caseSensitive) { - s2 = unicodeNormalizeNFKC(s, len, &len, NULL); - for (i = 0; i < len; ++i) { - s2[i] = unicodeToUpper(s2[i]); - } - } else { - s2 = unicodeNormalizeNFKC(s, len, &len, NULL); - } - - txt = NULL; - txtSize = 0; - - xStart = yStart = xStop = yStop = 0; - if (startAtLast && haveLastFind) { - xStart = lastFindXMin; - yStart = lastFindYMin; - } else if (!startAtTop) { - xStart = *xMin; - yStart = *yMin; - } - if (stopAtLast && haveLastFind) { - xStop = lastFindXMin; - yStop = lastFindYMin; - } else if (!stopAtBottom) { - xStop = *xMax; - yStop = *yMax; - } - - found = gFalse; - xMin0 = xMax0 = yMin0 = yMax0 = 0; // make gcc happy - xMin1 = xMax1 = yMin1 = yMax1 = 0; // make gcc happy - - for (i = backward ? nBlocks - 1 : 0; - backward ? i >= 0 : i < nBlocks; - i += backward ? -1 : 1) { - blk = blocks[i]; - - // check: is the block above the top limit? - if (!startAtTop && (backward ? blk->yMin > yStart : blk->yMax < yStart)) { - continue; - } - - // check: is the block below the bottom limit? - if (!stopAtBottom && (backward ? blk->yMax < yStop : blk->yMin > yStop)) { - break; - } - - for (line = blk->lines; line; line = line->next) { - - // check: is the line above the top limit? - if (!startAtTop && - (backward ? line->yMin > yStart : line->yMin < yStart)) { - continue; - } - - // check: is the line below the bottom limit? - if (!stopAtBottom && - (backward ? line->yMin < yStop : line->yMin > yStop)) { - continue; - } - - if (!line->normalized) - line->normalized = unicodeNormalizeNFKC(line->text, line->len, - &line->normalized_len, - &line->normalized_idx); - // convert the line to uppercase - m = line->normalized_len; - if (!caseSensitive) { - if (m > txtSize) { - txt = (Unicode *)greallocn(txt, m, sizeof(Unicode)); - txtSize = m; - } - for (k = 0; k < m; ++k) { - txt[k] = unicodeToUpper(line->normalized[k]); - } - } else { - txt = line->normalized; - } - - // search each position in this line - j = backward ? m - len : 0; - p = txt + j; - while (backward ? j >= 0 : j <= m - len) { - - // compare the strings - for (k = 0; k < len; ++k) { - if (p[k] != s2[k]) { - break; - } - } - - // found it - if (k == len) { - // where s2 matches a subsequence of a compatibility equivalence - // decomposition, highlight the entire glyph, since we don't know - // the internal layout of subglyph components - int normStart = line->normalized_idx[j]; - int normAfterEnd = line->normalized_idx[j + len - 1] + 1; - switch (line->rot) { - case 0: - xMin1 = line->edge[normStart]; - xMax1 = line->edge[normAfterEnd]; - yMin1 = line->yMin; - yMax1 = line->yMax; - break; - case 1: - xMin1 = line->xMin; - xMax1 = line->xMax; - yMin1 = line->edge[normStart]; - yMax1 = line->edge[normAfterEnd]; - break; - case 2: - xMin1 = line->edge[normAfterEnd]; - xMax1 = line->edge[normStart]; - yMin1 = line->yMin; - yMax1 = line->yMax; - break; - case 3: - xMin1 = line->xMin; - xMax1 = line->xMax; - yMin1 = line->edge[normAfterEnd]; - yMax1 = line->edge[normStart]; - break; - } - if (backward) { - if ((startAtTop || - yMin1 < yStart || (yMin1 == yStart && xMin1 < xStart)) && - (stopAtBottom || - yMin1 > yStop || (yMin1 == yStop && xMin1 > xStop))) { - if (!found || - yMin1 > yMin0 || (yMin1 == yMin0 && xMin1 > xMin0)) { - xMin0 = xMin1; - xMax0 = xMax1; - yMin0 = yMin1; - yMax0 = yMax1; - found = gTrue; - } - } - } else { - if ((startAtTop || - yMin1 > yStart || (yMin1 == yStart && xMin1 > xStart)) && - (stopAtBottom || - yMin1 < yStop || (yMin1 == yStop && xMin1 < xStop))) { - if (!found || - yMin1 < yMin0 || (yMin1 == yMin0 && xMin1 < xMin0)) { - xMin0 = xMin1; - xMax0 = xMax1; - yMin0 = yMin1; - yMax0 = yMax1; - found = gTrue; - } - } - } - } - if (backward) { - --j; - --p; - } else { - ++j; - ++p; - } - } - } - } - - gfree(s2); - if (!caseSensitive) { - gfree(txt); - } - - if (found) { - *xMin = xMin0; - *xMax = xMax0; - *yMin = yMin0; - *yMax = yMax0; - lastFindXMin = xMin0; - lastFindYMin = yMin0; - haveLastFind = gTrue; - return gTrue; - } - - return gFalse; -} - -GooString *TextPage::getText(double xMin, double yMin, - double xMax, double yMax) { - GooString *s; - UnicodeMap *uMap; - TextBlock *blk; - TextLine *line; - TextLineFrag *frags; - int nFrags, fragsSize; - TextLineFrag *frag; - char space[8], eol[16]; - int spaceLen, eolLen; - int lastRot; - double x, y, delta; - int col, idx0, idx1, i, j; - GBool multiLine, oneRot; - - s = new GooString(); - - // get the output encoding - if (!(uMap = globalParams->getTextEncoding())) { - return s; - } - - if (rawOrder) { - TextWord* word; - char mbc[16]; - int mbc_len; - - for (word = rawWords; word && word <= rawLastWord; word = word->next) { - for (j = 0; j < word->getLength(); ++j) { - double gXMin, gXMax, gYMin, gYMax; - word->getCharBBox(j, &gXMin, &gYMin, &gXMax, &gYMax); - if (xMin <= gXMin && gXMax <= xMax && yMin <= gYMin && gYMax <= yMax) - { - mbc_len = uMap->mapUnicode( *(word->getChar(j)), mbc, sizeof(mbc) ); - s->append(mbc, mbc_len); - } - } - } - return s; - } - - spaceLen = uMap->mapUnicode(0x20, space, sizeof(space)); - eolLen = 0; // make gcc happy - switch (globalParams->getTextEOL()) { - case eolUnix: - eolLen = uMap->mapUnicode(0x0a, eol, sizeof(eol)); - break; - case eolDOS: - eolLen = uMap->mapUnicode(0x0d, eol, sizeof(eol)); - eolLen += uMap->mapUnicode(0x0a, eol + eolLen, sizeof(eol) - eolLen); - break; - case eolMac: - eolLen = uMap->mapUnicode(0x0d, eol, sizeof(eol)); - break; - } - - //~ writing mode (horiz/vert) - - // collect the line fragments that are in the rectangle - fragsSize = 256; - frags = (TextLineFrag *)gmallocn(fragsSize, sizeof(TextLineFrag)); - nFrags = 0; - lastRot = -1; - oneRot = gTrue; - for (i = 0; i < nBlocks; ++i) { - blk = blocks[i]; - if (xMin < blk->xMax && blk->xMin < xMax && - yMin < blk->yMax && blk->yMin < yMax) { - for (line = blk->lines; line; line = line->next) { - if (xMin < line->xMax && line->xMin < xMax && - yMin < line->yMax && line->yMin < yMax) { - idx0 = idx1 = -1; - switch (line->rot) { - case 0: - y = 0.5 * (line->yMin + line->yMax); - if (yMin < y && y < yMax) { - j = 0; - while (j < line->len) { - if (0.5 * (line->edge[j] + line->edge[j+1]) > xMin) { - idx0 = j; - break; - } - ++j; - } - j = line->len - 1; - while (j >= 0) { - if (0.5 * (line->edge[j] + line->edge[j+1]) < xMax) { - idx1 = j; - break; - } - --j; - } - } - break; - case 1: - x = 0.5 * (line->xMin + line->xMax); - if (xMin < x && x < xMax) { - j = 0; - while (j < line->len) { - if (0.5 * (line->edge[j] + line->edge[j+1]) > yMin) { - idx0 = j; - break; - } - ++j; - } - j = line->len - 1; - while (j >= 0) { - if (0.5 * (line->edge[j] + line->edge[j+1]) < yMax) { - idx1 = j; - break; - } - --j; - } - } - break; - case 2: - y = 0.5 * (line->yMin + line->yMax); - if (yMin < y && y < yMax) { - j = 0; - while (j < line->len) { - if (0.5 * (line->edge[j] + line->edge[j+1]) < xMax) { - idx0 = j; - break; - } - ++j; - } - j = line->len - 1; - while (j >= 0) { - if (0.5 * (line->edge[j] + line->edge[j+1]) > xMin) { - idx1 = j; - break; - } - --j; - } - } - break; - case 3: - x = 0.5 * (line->xMin + line->xMax); - if (xMin < x && x < xMax) { - j = 0; - while (j < line->len) { - if (0.5 * (line->edge[j] + line->edge[j+1]) < yMax) { - idx0 = j; - break; - } - ++j; - } - j = line->len - 1; - while (j >= 0) { - if (0.5 * (line->edge[j] + line->edge[j+1]) > yMin) { - idx1 = j; - break; - } - --j; - } - } - break; - } - if (idx0 >= 0 && idx1 >= 0) { - if (nFrags == fragsSize) { - fragsSize *= 2; - frags = (TextLineFrag *) - greallocn(frags, fragsSize, sizeof(TextLineFrag)); - } - frags[nFrags].init(line, idx0, idx1 - idx0 + 1); - ++nFrags; - if (lastRot >= 0 && line->rot != lastRot) { - oneRot = gFalse; - } - lastRot = line->rot; - } - } - } - } - } - - // sort the fragments and generate the string - if (nFrags > 0) { - - for (i = 0; i < nFrags; ++i) { - frags[i].computeCoords(oneRot); - } - assignColumns(frags, nFrags, oneRot); - - // if all lines in the region have the same rotation, use it; - // otherwise, use the page's primary rotation - if (oneRot) { - qsort(frags, nFrags, sizeof(TextLineFrag), - &TextLineFrag::cmpYXLineRot); - } else { - qsort(frags, nFrags, sizeof(TextLineFrag), - &TextLineFrag::cmpYXPrimaryRot); - } - i = 0; - while (i < nFrags) { - delta = maxIntraLineDelta * frags[i].line->words->fontSize; - for (j = i+1; - j < nFrags && fabs(frags[j].base - frags[i].base) < delta; - ++j) ; - qsort(frags + i, j - i, sizeof(TextLineFrag), - oneRot ? &TextLineFrag::cmpXYColumnLineRot - : &TextLineFrag::cmpXYColumnPrimaryRot); - i = j; - } - - col = 0; - multiLine = gFalse; - for (i = 0; i < nFrags; ++i) { - frag = &frags[i]; - - // insert a return - if (frag->col < col || - (i > 0 && fabs(frag->base - frags[i-1].base) > - maxIntraLineDelta * frags[i-1].line->words->fontSize)) { - s->append(eol, eolLen); - col = 0; - multiLine = gTrue; - } - - // column alignment - for (; col < frag->col; ++col) { - s->append(space, spaceLen); - } - - // get the fragment text - col += dumpFragment(frag->line->text + frag->start, frag->len, uMap, s); - } - - if (multiLine) { - s->append(eol, eolLen); - } - } - - gfree(frags); - uMap->decRefCnt(); - - return s; -} - -class TextSelectionVisitor { -public: - TextSelectionVisitor (TextPage *page); - virtual ~TextSelectionVisitor () { } - virtual void visitBlock (TextBlock *block, - TextLine *begin, - TextLine *end, - PDFRectangle *selection) = 0; - virtual void visitLine (TextLine *line, - TextWord *begin, - TextWord *end, - int edge_begin, - int edge_end, - PDFRectangle *selection) = 0; - virtual void visitWord (TextWord *word, int begin, int end, - PDFRectangle *selection) = 0; - -protected: - TextPage *page; -}; - -TextSelectionVisitor::TextSelectionVisitor (TextPage *page) - : page(page) -{ -} - - -class TextSelectionDumper : public TextSelectionVisitor { -public: - TextSelectionDumper(TextPage *page); - virtual ~TextSelectionDumper(); - - virtual void visitBlock (TextBlock *block, - TextLine *begin, - TextLine *end, - PDFRectangle *selection) { }; - virtual void visitLine (TextLine *line, - TextWord *begin, - TextWord *end, - int edge_begin, - int edge_end, - PDFRectangle *selection); - virtual void visitWord (TextWord *word, int begin, int end, - PDFRectangle *selection) { }; - - GooString *getText(void); - -private: - TextLineFrag *frags; - int nFrags, fragsSize; -}; - -TextSelectionDumper::TextSelectionDumper(TextPage *page) - : TextSelectionVisitor(page) -{ - fragsSize = 256; - frags = (TextLineFrag *)gmallocn(fragsSize, sizeof(TextLineFrag)); - nFrags = 0; -} - -TextSelectionDumper::~TextSelectionDumper() -{ - gfree(frags); -} - -void TextSelectionDumper::visitLine (TextLine *line, - TextWord *begin, - TextWord *end, - int edge_begin, - int edge_end, - PDFRectangle *selection) -{ - if (nFrags == fragsSize) { - fragsSize *= 2; - frags = (TextLineFrag *) grealloc(frags, fragsSize * sizeof(TextLineFrag)); - } - - frags[nFrags].init(line, edge_begin, edge_end - edge_begin); - ++nFrags; - -} - -GooString *TextSelectionDumper::getText (void) -{ - GooString *s; - TextLineFrag *frag; - int i, j; - UnicodeMap *uMap; - char space[8], eol[16]; - int spaceLen, eolLen; - GooList *strings = NULL; - int actual_table = -1; - int actual_line = -1; - int last_length = 0; - TextBlock *actual_block = NULL; - - s = new GooString(); - - uMap = globalParams->getTextEncoding(); - - if (uMap == NULL) - return s; - - spaceLen = uMap->mapUnicode(0x20, space, sizeof(space)); - eolLen = uMap->mapUnicode(0x0a, eol, sizeof(eol)); - - if (nFrags > 0) { - for (i = 0; i < nFrags; ++i) { - frag = &frags[i]; - - if (actual_table >= 0 && frag->line->blk->tableId < 0) { - for (j = 0; j < strings->getLength (); j++) { - s->append ((GooString*) strings->get (j)); - s->append (eol, eolLen); - delete ((GooString*) strings->get (j)); - } - delete strings; - strings = NULL; - actual_table = -1; - actual_line = -1; - actual_block = NULL; - } - - // a table - if (frag->line->blk->tableId >= 0) { - if (actual_table == -1) { - strings = new GooList(); - actual_table = frag->line->blk->tableId; - actual_block = frag->line->blk; - actual_line = -1; - } - - // the same block - if (actual_block == frag->line->blk) { - actual_line++; - if (actual_line >= strings->getLength ()) { - GooString *t = new GooString (); - // add some spaces to have this block correctly aligned - if (actual_line > 0) - for (j = 0; j < ((GooString*) (strings->get (actual_line - 1)))->getLength() - last_length - 1; j++) - t->append (space, spaceLen); - strings->append (t); - } - } - // another block - else { - // previous block ended its row - if (actual_block->tableEnd) { - for (j = 0; j < strings->getLength (); j++) { - s->append ((GooString*) strings->get (j)); - s->append (eol, eolLen); - delete ((GooString*) strings->get (j)); - } - delete strings; - - strings = new GooList(); - GooString *t = new GooString (); - strings->append (t); - } - actual_block = frag->line->blk; - actual_line = 0; - } - - page->dumpFragment(frag->line->text + frag->start, frag->len, uMap, ((GooString*) strings->get (actual_line))); - last_length = frag->len; - - if (!frag->line->blk->tableEnd) { - ((GooString*) strings->get (actual_line))->append (space, spaceLen); - } - } - // not a table - else { - page->dumpFragment (frag->line->text + frag->start, frag->len, uMap, s); - s->append (eol, eolLen); - } - } - - if (strings != NULL) { - for (j = 0; j < strings->getLength (); j++) { - s->append((GooString*) strings->get (j)); - s->append(eol, eolLen); - delete ((GooString*) strings->get (j)); - } - delete strings; - strings = NULL; - actual_table = -1; - actual_line = -1; - actual_block = NULL; - } - } - - uMap->decRefCnt(); - - return s; -} - -class TextSelectionSizer : public TextSelectionVisitor { -public: - TextSelectionSizer(TextPage *page, double scale); - ~TextSelectionSizer() { } - - virtual void visitBlock (TextBlock *block, - TextLine *begin, - TextLine *end, - PDFRectangle *selection) { }; - virtual void visitLine (TextLine *line, - TextWord *begin, - TextWord *end, - int edge_begin, - int edge_end, - PDFRectangle *selection); - virtual void visitWord (TextWord *word, int begin, int end, - PDFRectangle *selection) { }; - - GooList *getRegion () { return list; } - -private: - GooList *list; - double scale; -}; - -TextSelectionSizer::TextSelectionSizer(TextPage *page, double scale) - : TextSelectionVisitor(page), - scale(scale) -{ - list = new GooList(); -} - -void TextSelectionSizer::visitLine (TextLine *line, - TextWord *begin, - TextWord *end, - int edge_begin, - int edge_end, - PDFRectangle *selection) -{ - PDFRectangle *rect; - double x1, y1, x2, y2, margin; - - margin = (line->yMax - line->yMin) / 8; - x1 = line->edge[edge_begin]; - y1 = line->yMin - margin; - x2 = line->edge[edge_end]; - y2 = line->yMax + margin; - - rect = new PDFRectangle (floor (x1 * scale), - floor (y1 * scale), - ceil (x2 * scale), - ceil (y2 * scale)); - list->append (rect); -} - - -class TextSelectionPainter : public TextSelectionVisitor { -public: - TextSelectionPainter(TextPage *page, - double scale, - int rotation, - OutputDev *out, - GfxColor *box_color, - GfxColor *glyph_color); - ~TextSelectionPainter(); - - virtual void visitBlock (TextBlock *block, - TextLine *begin, - TextLine *end, - PDFRectangle *selection) { }; - virtual void visitLine (TextLine *line, - TextWord *begin, - TextWord *end, - int edge_begin, - int edge_end, - PDFRectangle *selection); - virtual void visitWord (TextWord *word, int begin, int end, - PDFRectangle *selection); - -private: - OutputDev *out; - GfxColor *box_color, *glyph_color; - GfxState *state; -}; - -TextSelectionPainter::TextSelectionPainter(TextPage *page, - double scale, - int rotation, - OutputDev *out, - GfxColor *box_color, - GfxColor *glyph_color) - : TextSelectionVisitor(page), - out(out), - box_color(box_color), - glyph_color(glyph_color) -{ - PDFRectangle box(0, 0, page->pageWidth, page->pageHeight); - - state = new GfxState(72 * scale, 72 * scale, &box, rotation, gFalse); - - out->startPage (0, state); - out->setDefaultCTM (state->getCTM()); - - state->setTextMat(1, 0, 0, -1, 0, 0); - state->setFillColorSpace(new GfxDeviceRGBColorSpace()); - -} - -TextSelectionPainter::~TextSelectionPainter() -{ - out->endPage (); - - delete state; -} - -void TextSelectionPainter::visitLine (TextLine *line, - TextWord *begin, - TextWord *end, - int edge_begin, - int edge_end, - PDFRectangle *selection) -{ - double x1, y1, x2, y2, margin; - Matrix ctm, ictm; - - state->setFillColor(box_color); - out->updateFillColor(state); - - margin = (line->yMax - line->yMin) / 8; - x1 = floor (line->edge[edge_begin]); - y1 = floor (line->yMin - margin); - x2 = ceil (line->edge[edge_end]); - y2 = ceil (line->yMax + margin); - - state->getCTM (&ctm); - ctm.transform(line->edge[edge_begin], line->yMin - margin, &x1, &y1); - ctm.transform(line->edge[edge_end], line->yMax + margin, &x2, &y2); - - x1 = floor (x1); - y1 = floor (y1); - x2 = ceil (x2); - y2 = ceil (y2); - - ctm.invertTo (&ictm); - ictm.transform(x1, y1, &x1, &y1); - ictm.transform(x2, y2, &x2, &y2); - - state->moveTo(x1, y1); - state->lineTo(x2, y1); - state->lineTo(x2, y2); - state->lineTo(x1, y2); - state->closePath(); - - out->fill(state); - state->clearPath(); -} - -void TextSelectionPainter::visitWord (TextWord *word, int begin, int end, - PDFRectangle *selection) -{ - GooString *string; - int i; - - state->setFillColor(glyph_color); - out->updateFillColor(state); - word->font->gfxFont->incRefCnt(); - state->setFont(word->font->gfxFont, word->fontSize); - out->updateFont(state); - - /* The only purpose of this string is to let the output device query - * it's length. Might want to change this interface later. */ - - string = new GooString ((char *) word->charcode, end - begin); - - out->beginString(state, string); - - for (i = begin; i < end; i++) - out->drawChar(state, word->edge[i], word->base, 0, 0, 0, 0, - word->charcode[i], 1, NULL, 0); - - out->endString(state); - - delete string; -} - -void TextWord::visitSelection(TextSelectionVisitor *visitor, - PDFRectangle *selection, - SelectionStyle style) -{ - int i, begin, end; - double mid; - - begin = len; - end = 0; - for (i = 0; i < len; i++) { - mid = (edge[i] + edge[i + 1]) / 2; - if (selection->x1 < mid || selection->x2 < mid) - if (i < begin) - begin = i; - if (mid < selection->x1 || mid < selection->x2) - end = i + 1; - } - - /* Skip empty selection. */ - if (end <= begin) - return; - - visitor->visitWord (this, begin, end, selection); -} - -void TextLine::visitSelection(TextSelectionVisitor *visitor, - PDFRectangle *selection, - SelectionStyle style) { - TextWord *p, *begin, *end, *current; - int i, edge_begin, edge_end; - PDFRectangle child_selection; - - begin = NULL; - end = NULL; - current = NULL; - for (p = words; p != NULL; p = p->next) { - if (blk->page->primaryLR) { - if ((selection->x1 < p->xMax) || - (selection->x2 < p->xMax)) - if (begin == NULL) - begin = p; - - if (((selection->x1 > p->xMin) || - (selection->x2 > p->xMin)) && (begin != NULL)) { - end = p->next; - current = p; - } - } else { - if ((selection->x1 > p->xMin) || - (selection->x2 > p->xMin)) - if (begin == NULL) - begin = p; - - if (((selection->x1 < p->xMax) || - (selection->x2 < p->xMax)) && (begin != NULL)) { - end = p->next; - current = p; - } - } - } - - if (!current) - current = begin; - - child_selection = *selection; - if (style == selectionStyleWord) { - child_selection.x1 = begin ? begin->xMin : xMin; - if (end && end->xMax != -1) { - child_selection.x2 = current->xMax; - } else { - child_selection.x2 = xMax; - } - } - - edge_begin = len; - edge_end = 0; - for (i = 0; i < len; i++) { - double mid = (edge[i] + edge[i + 1]) / 2; - if (child_selection.x1 < mid || child_selection.x2 < mid) - if (i < edge_begin) - edge_begin = i; - if (mid < child_selection.x2 || mid < child_selection.x1) - edge_end = i + 1; - } - - /* Skip empty selection. */ - if (edge_end <= edge_begin) - return; - - visitor->visitLine (this, begin, end, edge_begin, edge_end, - &child_selection); - - for (p = begin; p != end; p = p->next) - p->visitSelection (visitor, &child_selection, style); -} - -void TextBlock::visitSelection(TextSelectionVisitor *visitor, - PDFRectangle *selection, - SelectionStyle style) { - PDFRectangle child_selection; - double x[2], y[2], d, best_d[2]; - TextLine *p, *best_line[2]; - int i, count = 0, best_count[2], start, stop; - GBool all[2]; - - x[0] = selection->x1; - y[0] = selection->y1; - x[1] = selection->x2; - y[1] = selection->y2; - - for (i = 0; i < 2; i++) { - // the first/last lines are often not nearest - // the corners, so we have to force them to be - // selected when the selection runs outside this - // block. - if (page->primaryLR) { - all[i] = x[i] >= this->xMax && y[i] >= this->yMax; - if (x[i] <= this->xMin && y[i] <= this->yMin) { - best_line[i] = this->lines; - best_count[i] = 1; - } else { - best_line[i] = NULL; - best_count[i] = 0; - } - } else { - all[i] = x[i] <= this->xMin && y[i] >= this->yMax; - if (x[i] >= this->xMax && y[i] <= this->yMin) { - best_line[i] = this->lines; - best_count[i] = 1; - } else { - best_line[i] = NULL; - best_count[i] = 0; - } - } - best_d[i] = 0; - } - - // find the nearest line to the selection points - // using the manhattan distance. - for (p = this->lines; p; p = p->next) { - count++; - for (i = 0; i < 2; i++) { - d = fmax(p->xMin - x[i], 0.0) + - fmax(x[i] - p->xMax, 0.0) + - fmax(p->yMin - y[i], 0.0) + - fmax(y[i] - p->yMax, 0.0); - if (!best_line[i] || all[i] || - d < best_d[i]) { - best_line[i] = p; - best_count[i] = count; - best_d[i] = d; - } - } - } - // assert: best is always set. - if (!best_line[0] || !best_line[1]) { - return; - } - - // Now decide which point was first. - if (best_count[0] < best_count[1] || - (best_count[0] == best_count[1] && - y[0] < y[1])) { - start = 0; - stop = 1; - } else { - start = 1; - stop = 0; - } - - visitor->visitBlock(this, best_line[start], best_line[stop], selection); - - for (p = best_line[start]; p; p = p->next) { - if (page->primaryLR) { - child_selection.x1 = p->xMin; - child_selection.x2 = p->xMax; - } else { - child_selection.x1 = p->xMax; - child_selection.x2 = p->xMin; - } - child_selection.y1 = p->yMin; - child_selection.y2 = p->yMax; - if (style == selectionStyleLine) { - if (p == best_line[start]) { - child_selection.x1 = 0; - child_selection.y1 = 0; - } - if (p == best_line[stop]) { - child_selection.x2 = page->pageWidth; - child_selection.y2 = page->pageHeight; - } - } else { - if (p == best_line[start]) { - child_selection.x1 = fmax(p->xMin, fmin(p->xMax, x[start])); - child_selection.y1 = fmax(p->yMin, fmin(p->yMax, y[start])); - } - if (p == best_line[stop]) { - child_selection.x2 = fmax(p->xMin, fmin(p->xMax, x[stop])); - child_selection.y2 = fmax(p->yMin, fmin(p->yMax, y[stop])); - } - } - p->visitSelection(visitor, &child_selection, style); - if (p == best_line[stop]) { - return; - } - } -} - -void TextPage::visitSelection(TextSelectionVisitor *visitor, - PDFRectangle *selection, - SelectionStyle style) -{ - PDFRectangle child_selection; - double x[2], y[2], d, best_d[2]; - double xMin, yMin, xMax, yMax; - TextFlow *flow, *best_flow[2]; - TextBlock *blk, *best_block[2]; - int i, count = 0, best_count[2], start, stop; - - if (!flows) - return; - - x[0] = selection->x1; - y[0] = selection->y1; - x[1] = selection->x2; - y[1] = selection->y2; - - xMin = pageWidth; - yMin = pageHeight; - xMax = 0.0; - yMax = 0.0; - - for (i = 0; i < 2; i++) { - best_block[i] = NULL; - best_flow[i] = NULL; - best_count[i] = 0; - best_d[i] = 0; - } - - // find the nearest blocks to the selection points - // using the manhattan distance. - for (flow = flows; flow; flow = flow->next) { - for (blk = flow->blocks; blk; blk = blk->next) { - count++; - // the first/last blocks in reading order are - // often not the closest to the page corners; - // track the corners, force those blocks to - // be selected if the selection runs across - // multiple pages. - xMin = fmin(xMin, blk->xMin); - yMin = fmin(yMin, blk->yMin); - xMax = fmax(xMax, blk->xMax); - yMax = fmax(yMax, blk->yMax); - for (i = 0; i < 2; i++) { - d = fmax(blk->xMin - x[i], 0.0) + - fmax(x[i] - blk->xMax, 0.0) + - fmax(blk->yMin - y[i], 0.0) + - fmax(y[i] - blk->yMax, 0.0); - if (!best_block[i] || - d < best_d[i] || - (!blk->next && !flow->next && - x[i] > xMax && y[i] > yMax)) { - best_block[i] = blk; - best_flow[i] = flow; - best_count[i] = count; - best_d[i] = d; - } - } - } - } - for (i = 0; i < 2; i++) { - if (primaryLR) { - if (x[i] < xMin && y[i] < yMin) { - best_block[i] = flows->blocks; - best_flow[i] = flows; - best_count[i] = 1; - } - } else { - if (x[i] > xMax && y[i] < yMin) { - best_block[i] = flows->blocks; - best_flow[i] = flows; - best_count[i] = 1; - } - } - } - // assert: best is always set. - if (!best_block[0] || !best_block[1]) { - return; - } - - // Now decide which point was first. - if (best_count[0] < best_count[1] || - (best_count[0] == best_count[1] && y[0] < y[1])) { - start = 0; - stop = 1; - } else { - start = 1; - stop = 0; - } - - for (flow = best_flow[start]; flow; flow = flow->next) { - if (flow == best_flow[start]) { - blk = best_block[start]; - } else { - blk = flow->blocks; - } - for (; blk; blk = blk->next) { - if (primaryLR) { - child_selection.x1 = blk->xMin; - child_selection.x2 = blk->xMax; - } else { - child_selection.x1 = blk->xMax; - child_selection.x2 = blk->xMin; - } - child_selection.y1 = blk->yMin; - child_selection.y2 = blk->yMax; - if (blk == best_block[start]) { - child_selection.x1 = fmax(blk->xMin, fmin(blk->xMax, x[start])); - child_selection.y1 = fmax(blk->yMin, fmin(blk->yMax, y[start])); - } - if (blk == best_block[stop]) { - child_selection.x2 = fmax(blk->xMin, fmin(blk->xMax, x[stop])); - child_selection.y2 = fmax(blk->yMin, fmin(blk->yMax, y[stop])); - blk->visitSelection(visitor, &child_selection, style); - return; - } - blk->visitSelection(visitor, &child_selection, style); - } - } -} - -void TextPage::drawSelection(OutputDev *out, - double scale, - int rotation, - PDFRectangle *selection, - SelectionStyle style, - GfxColor *glyph_color, GfxColor *box_color) -{ - TextSelectionPainter painter(this, scale, rotation, - out, box_color, glyph_color); - - visitSelection(&painter, selection, style); -} - -GooList *TextPage::getSelectionRegion(PDFRectangle *selection, - SelectionStyle style, - double scale) { - TextSelectionSizer sizer(this, scale); - - visitSelection(&sizer, selection, style); - - return sizer.getRegion(); -} - -GooString *TextPage::getSelectionText(PDFRectangle *selection, - SelectionStyle style) -{ - TextSelectionDumper dumper(this); - - visitSelection(&dumper, selection, style); - - return dumper.getText(); -} - -GBool TextPage::findCharRange(int pos, int length, - double *xMin, double *yMin, - double *xMax, double *yMax) { - TextBlock *blk; - TextLine *line; - TextWord *word; - double xMin0, xMax0, yMin0, yMax0; - double xMin1, xMax1, yMin1, yMax1; - GBool first; - int i, j0, j1; - - if (rawOrder) { - return gFalse; - } - - //~ this doesn't correctly handle: - //~ - ranges split across multiple lines (the highlighted region - //~ is the bounding box of all the parts of the range) - //~ - cases where characters don't convert one-to-one into Unicode - first = gTrue; - xMin0 = xMax0 = yMin0 = yMax0 = 0; // make gcc happy - xMin1 = xMax1 = yMin1 = yMax1 = 0; // make gcc happy - for (i = 0; i < nBlocks; ++i) { - blk = blocks[i]; - for (line = blk->lines; line; line = line->next) { - for (word = line->words; word; word = word->next) { - if (pos < word->charPos + word->charLen && - word->charPos < pos + length) { - j0 = pos - word->charPos; - if (j0 < 0) { - j0 = 0; - } - j1 = pos + length - 1 - word->charPos; - if (j1 >= word->len) { - j1 = word->len - 1; - } - switch (line->rot) { - case 0: - xMin1 = word->edge[j0]; - xMax1 = word->edge[j1 + 1]; - yMin1 = word->yMin; - yMax1 = word->yMax; - break; - case 1: - xMin1 = word->xMin; - xMax1 = word->xMax; - yMin1 = word->edge[j0]; - yMax1 = word->edge[j1 + 1]; - break; - case 2: - xMin1 = word->edge[j1 + 1]; - xMax1 = word->edge[j0]; - yMin1 = word->yMin; - yMax1 = word->yMax; - break; - case 3: - xMin1 = word->xMin; - xMax1 = word->xMax; - yMin1 = word->edge[j1 + 1]; - yMax1 = word->edge[j0]; - break; - } - if (first || xMin1 < xMin0) { - xMin0 = xMin1; - } - if (first || xMax1 > xMax0) { - xMax0 = xMax1; - } - if (first || yMin1 < yMin0) { - yMin0 = yMin1; - } - if (first || yMax1 > yMax0) { - yMax0 = yMax1; - } - first = gFalse; - } - } - } - } - if (!first) { - *xMin = xMin0; - *xMax = xMax0; - *yMin = yMin0; - *yMax = yMax0; - return gTrue; - } - return gFalse; -} - -void TextPage::dump(void *outputStream, TextOutputFunc outputFunc, - GBool physLayout) { - UnicodeMap *uMap; - TextFlow *flow; - TextBlock *blk; - TextLine *line; - TextLineFrag *frags; - TextWord *word; - int nFrags, fragsSize; - TextLineFrag *frag; - char space[8], eol[16], eop[8]; - int spaceLen, eolLen, eopLen; - GBool pageBreaks; - GooString *s; - double delta; - int col, i, j, d, n; - - // get the output encoding - if (!(uMap = globalParams->getTextEncoding())) { - return; - } - spaceLen = uMap->mapUnicode(0x20, space, sizeof(space)); - eolLen = 0; // make gcc happy - switch (globalParams->getTextEOL()) { - case eolUnix: - eolLen = uMap->mapUnicode(0x0a, eol, sizeof(eol)); - break; - case eolDOS: - eolLen = uMap->mapUnicode(0x0d, eol, sizeof(eol)); - eolLen += uMap->mapUnicode(0x0a, eol + eolLen, sizeof(eol) - eolLen); - break; - case eolMac: - eolLen = uMap->mapUnicode(0x0d, eol, sizeof(eol)); - break; - } - eopLen = uMap->mapUnicode(0x0c, eop, sizeof(eop)); - pageBreaks = globalParams->getTextPageBreaks(); - - //~ writing mode (horiz/vert) - - // output the page in raw (content stream) order - if (rawOrder) { - - for (word = rawWords; word; word = word->next) { - s = new GooString(); - dumpFragment(word->text, word->len, uMap, s); - (*outputFunc)(outputStream, s->getCString(), s->getLength()); - delete s; - if (word->next && - fabs(word->next->base - word->base) < - maxIntraLineDelta * word->fontSize) { - if (word->next->xMin > word->xMax + minWordSpacing * word->fontSize) { - (*outputFunc)(outputStream, space, spaceLen); - } - } else { - (*outputFunc)(outputStream, eol, eolLen); - } - } - - // output the page, maintaining the original physical layout - } else if (physLayout) { - - // collect the line fragments for the page and sort them - fragsSize = 256; - frags = (TextLineFrag *)gmallocn(fragsSize, sizeof(TextLineFrag)); - nFrags = 0; - for (i = 0; i < nBlocks; ++i) { - blk = blocks[i]; - for (line = blk->lines; line; line = line->next) { - if (nFrags == fragsSize) { - fragsSize *= 2; - frags = (TextLineFrag *)greallocn(frags, - fragsSize, sizeof(TextLineFrag)); - } - frags[nFrags].init(line, 0, line->len); - frags[nFrags].computeCoords(gTrue); - ++nFrags; - } - } - qsort(frags, nFrags, sizeof(TextLineFrag), &TextLineFrag::cmpYXPrimaryRot); - i = 0; - while (i < nFrags) { - delta = maxIntraLineDelta * frags[i].line->words->fontSize; - for (j = i+1; - j < nFrags && fabs(frags[j].base - frags[i].base) < delta; - ++j) ; - qsort(frags + i, j - i, sizeof(TextLineFrag), - &TextLineFrag::cmpXYColumnPrimaryRot); - i = j; - } - -#if 0 // for debugging - printf("*** line fragments ***\n"); - for (i = 0; i < nFrags; ++i) { - frag = &frags[i]; - printf("frag: x=%.2f..%.2f y=%.2f..%.2f base=%.2f '", - frag->xMin, frag->xMax, frag->yMin, frag->yMax, frag->base); - for (n = 0; n < frag->len; ++n) { - fputc(frag->line->text[frag->start + n] & 0xff, stdout); - } - printf("'\n"); - } - printf("\n"); -#endif - - // generate output - col = 0; - for (i = 0; i < nFrags; ++i) { - frag = &frags[i]; - - // column alignment - for (; col < frag->col; ++col) { - (*outputFunc)(outputStream, space, spaceLen); - } - - // print the line - s = new GooString(); - col += dumpFragment(frag->line->text + frag->start, frag->len, uMap, s); - (*outputFunc)(outputStream, s->getCString(), s->getLength()); - delete s; - - // print one or more returns if necessary - if (i == nFrags - 1 || - frags[i+1].col < col || - fabs(frags[i+1].base - frag->base) > - maxIntraLineDelta * frag->line->words->fontSize) { - if (i < nFrags - 1) { - d = (int)((frags[i+1].base - frag->base) / - frag->line->words->fontSize); - if (d < 1) { - d = 1; - } else if (d > 5) { - d = 5; - } - } else { - d = 1; - } - for (; d > 0; --d) { - (*outputFunc)(outputStream, eol, eolLen); - } - col = 0; - } - } - - gfree(frags); - - // output the page, "undoing" the layout - } else { - for (flow = flows; flow; flow = flow->next) { - for (blk = flow->blocks; blk; blk = blk->next) { - for (line = blk->lines; line; line = line->next) { - n = line->len; - if (line->hyphenated && (line->next || blk->next)) { - --n; - } - s = new GooString(); - dumpFragment(line->text, n, uMap, s); - (*outputFunc)(outputStream, s->getCString(), s->getLength()); - delete s; - // output a newline when a hyphen is not suppressed - if (n == line->len) { - (*outputFunc)(outputStream, eol, eolLen); - } - } - } - (*outputFunc)(outputStream, eol, eolLen); - } - } - - // end of page - if (pageBreaks) { - (*outputFunc)(outputStream, eop, eopLen); - } - - uMap->decRefCnt(); -} - -void TextPage::assignColumns(TextLineFrag *frags, int nFrags, GBool oneRot) { - TextLineFrag *frag0, *frag1; - int rot, col1, col2, i, j, k; - - // all text in the region has the same rotation -- recompute the - // column numbers based only on the text in the region - if (oneRot) { - qsort(frags, nFrags, sizeof(TextLineFrag), &TextLineFrag::cmpXYLineRot); - rot = frags[0].line->rot; - for (i = 0; i < nFrags; ++i) { - frag0 = &frags[i]; - col1 = 0; - for (j = 0; j < i; ++j) { - frag1 = &frags[j]; - col2 = 0; // make gcc happy - switch (rot) { - case 0: - if (frag0->xMin >= frag1->xMax) { - col2 = frag1->col + (frag1->line->col[frag1->start + frag1->len] - - frag1->line->col[frag1->start]) + 1; - } else { - for (k = frag1->start; - k < frag1->start + frag1->len && - frag0->xMin >= 0.5 * (frag1->line->edge[k] + - frag1->line->edge[k+1]); - ++k) ; - col2 = frag1->col + - frag1->line->col[k] - frag1->line->col[frag1->start]; - } - break; - case 1: - if (frag0->yMin >= frag1->yMax) { - col2 = frag1->col + (frag1->line->col[frag1->start + frag1->len] - - frag1->line->col[frag1->start]) + 1; - } else { - for (k = frag1->start; - k < frag1->start + frag1->len && - frag0->yMin >= 0.5 * (frag1->line->edge[k] + - frag1->line->edge[k+1]); - ++k) ; - col2 = frag1->col + - frag1->line->col[k] - frag1->line->col[frag1->start]; - } - break; - case 2: - if (frag0->xMax <= frag1->xMin) { - col2 = frag1->col + (frag1->line->col[frag1->start + frag1->len] - - frag1->line->col[frag1->start]) + 1; - } else { - for (k = frag1->start; - k < frag1->start + frag1->len && - frag0->xMax <= 0.5 * (frag1->line->edge[k] + - frag1->line->edge[k+1]); - ++k) ; - col2 = frag1->col + - frag1->line->col[k] - frag1->line->col[frag1->start]; - } - break; - case 3: - if (frag0->yMax <= frag1->yMin) { - col2 = frag1->col + (frag1->line->col[frag1->start + frag1->len] - - frag1->line->col[frag1->start]) + 1; - } else { - for (k = frag1->start; - k < frag1->start + frag1->len && - frag0->yMax <= 0.5 * (frag1->line->edge[k] + - frag1->line->edge[k+1]); - ++k) ; - col2 = frag1->col + - frag1->line->col[k] - frag1->line->col[frag1->start]; - } - break; - } - if (col2 > col1) { - col1 = col2; - } - } - frag0->col = col1; - } - - // the region includes text at different rotations -- use the - // globally assigned column numbers, offset by the minimum column - // number (i.e., shift everything over to column 0) - } else { - col1 = frags[0].col; - for (i = 1; i < nFrags; ++i) { - if (frags[i].col < col1) { - col1 = frags[i].col; - } - } - for (i = 0; i < nFrags; ++i) { - frags[i].col -= col1; - } - } -} - -int TextPage::dumpFragment(Unicode *text, int len, UnicodeMap *uMap, - GooString *s) { - char lre[8], rle[8], popdf[8], buf[8]; - int lreLen, rleLen, popdfLen, n; - int nCols, i, j, k; - - nCols = 0; - - if (uMap->isUnicode()) { - - lreLen = uMap->mapUnicode(0x202a, lre, sizeof(lre)); - rleLen = uMap->mapUnicode(0x202b, rle, sizeof(rle)); - popdfLen = uMap->mapUnicode(0x202c, popdf, sizeof(popdf)); - - if (primaryLR) { - - i = 0; - while (i < len) { - // output a left-to-right section - for (j = i; j < len && !unicodeTypeR(text[j]); ++j) ; - for (k = i; k < j; ++k) { - n = uMap->mapUnicode(text[k], buf, sizeof(buf)); - s->append(buf, n); - ++nCols; - } - i = j; - // output a right-to-left section - for (j = i; j < len && !unicodeTypeL(text[j]); ++j) ; - if (j > i) { - s->append(rle, rleLen); - for (k = j - 1; k >= i; --k) { - n = uMap->mapUnicode(text[k], buf, sizeof(buf)); - s->append(buf, n); - ++nCols; - } - s->append(popdf, popdfLen); - i = j; - } - } - - } else { - - s->append(rle, rleLen); - i = len - 1; - while (i >= 0) { - // output a right-to-left section - for (j = i; j >= 0 && !unicodeTypeL(text[j]); --j) ; - for (k = i; k > j; --k) { - n = uMap->mapUnicode(text[k], buf, sizeof(buf)); - s->append(buf, n); - ++nCols; - } - i = j; - // output a left-to-right section - for (j = i; j >= 0 && !unicodeTypeR(text[j]); --j) ; - if (j < i) { - s->append(lre, lreLen); - for (k = j + 1; k <= i; ++k) { - n = uMap->mapUnicode(text[k], buf, sizeof(buf)); - s->append(buf, n); - ++nCols; - } - s->append(popdf, popdfLen); - i = j; - } - } - s->append(popdf, popdfLen); - - } - - } else { - for (i = 0; i < len; ++i) { - n = uMap->mapUnicode(text[i], buf, sizeof(buf)); - s->append(buf, n); - nCols += n; - } - } - - return nCols; -} - -#if TEXTOUT_WORD_LIST -TextWordList *TextPage::makeWordList(GBool physLayout) { - return new TextWordList(this, physLayout); -} -#endif - -//------------------------------------------------------------------------ -// ActualText -//------------------------------------------------------------------------ -ActualText::ActualText(TextPage *out) { - out->incRefCnt(); - text = out; - actualText = NULL; - actualTextBMCLevel = 0; -} - -ActualText::~ActualText() { - if (actualText) - delete actualText; - text->decRefCnt(); -} - -void ActualText::addChar(GfxState *state, double x, double y, - double dx, double dy, - CharCode c, int nBytes, Unicode *u, int uLen) { - if (actualTextBMCLevel == 0) { - text->addChar(state, x, y, dx, dy, c, nBytes, u, uLen); - } else { - // Inside ActualText span. - if (newActualTextSpan) { - actualText_x = x; - actualText_y = y; - actualText_dx = dx; - actualText_dy = dy; - newActualTextSpan = gFalse; - } else { - if (x < actualText_x) - actualText_x = x; - if (y < actualText_y) - actualText_y = y; - if (x + dx > actualText_x + actualText_dx) - actualText_dx = x + dx - actualText_x; - if (y + dy > actualText_y + actualText_dy) - actualText_dy = y + dy - actualText_y; - } - } -} - -void ActualText::beginMC(Dict *properties) { - if (actualTextBMCLevel > 0) { - // Already inside a ActualText span. - actualTextBMCLevel++; - return; - } - - Object obj; - if (properties && properties->lookup("ActualText", &obj)) { - if (obj.isString()) { - actualText = obj.getString(); - actualTextBMCLevel = 1; - newActualTextSpan = gTrue; - } - } -} - -void ActualText::endMC(GfxState *state) { - char *uniString = NULL; - Unicode *uni; - int length, i; - - if (actualTextBMCLevel > 0) { - actualTextBMCLevel--; - if (actualTextBMCLevel == 0) { - // ActualText span closed. Output the span text and the - // extents of all the glyphs inside the span - - if (newActualTextSpan) { - // No content inside span. - actualText_x = state->getCurX(); - actualText_y = state->getCurY(); - actualText_dx = 0; - actualText_dy = 0; - } - - if (!actualText->hasUnicodeMarker()) { - if (actualText->getLength() > 0) { - //non-unicode string -- assume pdfDocEncoding and - //try to convert to UTF16BE - uniString = pdfDocEncodingToUTF16(actualText, &length); - } else { - length = 0; - } - } else { - uniString = actualText->getCString(); - length = actualText->getLength(); - } - - if (length < 3) - length = 0; - else - length = length/2 - 1; - uni = new Unicode[length]; - for (i = 0 ; i < length; i++) - uni[i] = ((uniString[2 + i*2] & 0xff)<<8)|(uniString[3 + i*2] & 0xff); - - text->addChar(state, - actualText_x, actualText_y, - actualText_dx, actualText_dy, - 0, 1, uni, length); - - delete [] uni; - if (!actualText->hasUnicodeMarker()) - delete [] uniString; - delete actualText; - actualText = NULL; - } - } -} - -//------------------------------------------------------------------------ -// TextOutputDev -//------------------------------------------------------------------------ - -static void TextOutputDev_outputToFile(void *stream, char *text, int len) { - fwrite(text, 1, len, (FILE *)stream); -} - -TextOutputDev::TextOutputDev(char *fileName, GBool physLayoutA, - GBool rawOrderA, GBool append) { - text = NULL; - physLayout = physLayoutA; - rawOrder = rawOrderA; - doHTML = gFalse; - ok = gTrue; - - // open file - needClose = gFalse; - if (fileName) { - if (!strcmp(fileName, "-")) { - outputStream = stdout; -#ifdef _WIN32 - // keep DOS from munging the end-of-line characters - setmode(fileno(stdout), O_BINARY); -#endif - } else if ((outputStream = fopen(fileName, append ? "ab" : "wb"))) { - needClose = gTrue; - } else { - error(-1, "Couldn't open text file '%s'", fileName); - ok = gFalse; - actualText = NULL; - return; - } - outputFunc = &TextOutputDev_outputToFile; - } else { - outputStream = NULL; - } - - // set up text object - text = new TextPage(rawOrderA); - actualText = new ActualText(text); -} - -TextOutputDev::TextOutputDev(TextOutputFunc func, void *stream, - GBool physLayoutA, GBool rawOrderA) { - outputFunc = func; - outputStream = stream; - needClose = gFalse; - physLayout = physLayoutA; - rawOrder = rawOrderA; - doHTML = gFalse; - text = new TextPage(rawOrderA); - actualText = new ActualText(text); - ok = gTrue; -} - -TextOutputDev::~TextOutputDev() { - if (needClose) { -#ifdef MACOS - ICS_MapRefNumAndAssign((short)((FILE *)outputStream)->handle); -#endif - fclose((FILE *)outputStream); - } - if (text) { - text->decRefCnt(); - } - delete actualText; -} - -void TextOutputDev::startPage(int pageNum, GfxState *state) { - text->startPage(state); -} - -void TextOutputDev::endPage() { - text->endPage(); - text->coalesce(physLayout, doHTML); - if (outputStream) { - text->dump(outputStream, outputFunc, physLayout); - } -} - -void TextOutputDev::updateFont(GfxState *state) { - text->updateFont(state); -} - -void TextOutputDev::beginString(GfxState *state, GooString *s) { -} - -void TextOutputDev::endString(GfxState *state) { -} - -void TextOutputDev::drawChar(GfxState *state, double x, double y, - double dx, double dy, - double originX, double originY, - CharCode c, int nBytes, Unicode *u, int uLen) { - actualText->addChar(state, x, y, dx, dy, c, nBytes, u, uLen); -} - -void TextOutputDev::beginMarkedContent(char *name, Dict *properties) -{ - actualText->beginMC(properties); -} - -void TextOutputDev::endMarkedContent(GfxState *state) -{ - actualText->endMC(state); -} - -void TextOutputDev::stroke(GfxState *state) { - GfxPath *path; - GfxSubpath *subpath; - double x[2], y[2]; - - if (!doHTML) { - return; - } - path = state->getPath(); - if (path->getNumSubpaths() != 1) { - return; - } - subpath = path->getSubpath(0); - if (subpath->getNumPoints() != 2) { - return; - } - state->transform(subpath->getX(0), subpath->getY(0), &x[0], &y[0]); - state->transform(subpath->getX(1), subpath->getY(1), &x[1], &y[1]); - - // look for a vertical or horizontal line - if (x[0] == x[1] || y[0] == y[1]) { - text->addUnderline(x[0], y[0], x[1], y[1]); - } -} - -void TextOutputDev::fill(GfxState *state) { - GfxPath *path; - GfxSubpath *subpath; - double x[5], y[5]; - double rx0, ry0, rx1, ry1, t; - int i; - - if (!doHTML) { - return; - } - path = state->getPath(); - if (path->getNumSubpaths() != 1) { - return; - } - subpath = path->getSubpath(0); - if (subpath->getNumPoints() != 5) { - return; - } - for (i = 0; i < 5; ++i) { - if (subpath->getCurve(i)) { - return; - } - state->transform(subpath->getX(i), subpath->getY(i), &x[i], &y[i]); - } - - // look for a rectangle - if (x[0] == x[1] && y[1] == y[2] && x[2] == x[3] && y[3] == y[4] && - x[0] == x[4] && y[0] == y[4]) { - rx0 = x[0]; - ry0 = y[0]; - rx1 = x[2]; - ry1 = y[1]; - } else if (y[0] == y[1] && x[1] == x[2] && y[2] == y[3] && x[3] == x[4] && - x[0] == x[4] && y[0] == y[4]) { - rx0 = x[0]; - ry0 = y[0]; - rx1 = x[1]; - ry1 = y[2]; - } else { - return; - } - if (rx1 < rx0) { - t = rx0; - rx0 = rx1; - rx1 = t; - } - if (ry1 < ry0) { - t = ry0; - ry0 = ry1; - ry1 = t; - } - - // skinny horizontal rectangle - if (ry1 - ry0 < rx1 - rx0) { - if (ry1 - ry0 < maxUnderlineWidth) { - ry0 = 0.5 * (ry0 + ry1); - text->addUnderline(rx0, ry0, rx1, ry0); - } - - // skinny vertical rectangle - } else { - if (rx1 - rx0 < maxUnderlineWidth) { - rx0 = 0.5 * (rx0 + rx1); - text->addUnderline(rx0, ry0, rx0, ry1); - } - } -} - -void TextOutputDev::eoFill(GfxState *state) { - if (!doHTML) { - return; - } - fill(state); -} - -void TextOutputDev::processLink(AnnotLink *link, Catalog * /*catalog*/) { - double x1, y1, x2, y2; - int xMin, yMin, xMax, yMax, x, y; - - if (!doHTML) { - return; - } - link->getRect(&x1, &y1, &x2, &y2); - cvtUserToDev(x1, y1, &x, &y); - xMin = xMax = x; - yMin = yMax = y; - cvtUserToDev(x1, y2, &x, &y); - if (x < xMin) { - xMin = x; - } else if (x > xMax) { - xMax = x; - } - if (y < yMin) { - yMin = y; - } else if (y > yMax) { - yMax = y; - } - cvtUserToDev(x2, y1, &x, &y); - if (x < xMin) { - xMin = x; - } else if (x > xMax) { - xMax = x; - } - if (y < yMin) { - yMin = y; - } else if (y > yMax) { - yMax = y; - } - cvtUserToDev(x2, y2, &x, &y); - if (x < xMin) { - xMin = x; - } else if (x > xMax) { - xMax = x; - } - if (y < yMin) { - yMin = y; - } else if (y > yMax) { - yMax = y; - } - text->addLink(xMin, yMin, xMax, yMax, link); -} - -GBool TextOutputDev::findText(Unicode *s, int len, - GBool startAtTop, GBool stopAtBottom, - GBool startAtLast, GBool stopAtLast, - GBool caseSensitive, GBool backward, - double *xMin, double *yMin, - double *xMax, double *yMax) { - return text->findText(s, len, startAtTop, stopAtBottom, - startAtLast, stopAtLast, caseSensitive, backward, - xMin, yMin, xMax, yMax); -} - -GooString *TextOutputDev::getText(double xMin, double yMin, - double xMax, double yMax) { - return text->getText(xMin, yMin, xMax, yMax); -} - -void TextOutputDev::drawSelection(OutputDev *out, - double scale, - int rotation, - PDFRectangle *selection, - SelectionStyle style, - GfxColor *glyph_color, GfxColor *box_color) { - text->drawSelection(out, scale, rotation, selection, style, glyph_color, box_color); -} - -GooList *TextOutputDev::getSelectionRegion(PDFRectangle *selection, - SelectionStyle style, - double scale) { - return text->getSelectionRegion(selection, style, scale); -} - -GooString *TextOutputDev::getSelectionText(PDFRectangle *selection, - SelectionStyle style) -{ - return text->getSelectionText(selection, style); -} - -GBool TextOutputDev::findCharRange(int pos, int length, - double *xMin, double *yMin, - double *xMax, double *yMax) { - return text->findCharRange(pos, length, xMin, yMin, xMax, yMax); -} - -#if TEXTOUT_WORD_LIST -TextWordList *TextOutputDev::makeWordList() { - return text->makeWordList(physLayout); -} -#endif - -TextPage *TextOutputDev::takeText() { - TextPage *ret; - - ret = text; - text = new TextPage(rawOrder); - return ret; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/TextOutputDev.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/TextOutputDev.h deleted file mode 100644 index 63f3670e427..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/TextOutputDev.h +++ /dev/null @@ -1,806 +0,0 @@ -//======================================================================== -// -// TextOutputDev.h -// -// Copyright 1997-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005-2007 Kristian Høgsberg <krh@redhat.com> -// Copyright (C) 2006 Ed Catmur <ed@catmur.co.uk> -// Copyright (C) 2007, 2008, 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2007 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2008, 2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2010 Brian Ewins <brian.ewins@gmail.com> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef TEXTOUTPUTDEV_H -#define TEXTOUTPUTDEV_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "poppler-config.h" -#include <stdio.h> -#include "goo/gtypes.h" -#include "GfxFont.h" -#include "GfxState.h" -#include "OutputDev.h" - -class GooString; -class GooList; -class Gfx; -class GfxFont; -class GfxState; -class UnicodeMap; -class AnnotLink; - -class TextWord; -class TextPool; -class TextLine; -class TextLineFrag; -class TextBlock; -class TextFlow; -class TextWordList; -class TextPage; -class TextSelectionVisitor; - -//------------------------------------------------------------------------ - -typedef void (*TextOutputFunc)(void *stream, char *text, int len); - -enum SelectionStyle { - selectionStyleGlyph, - selectionStyleWord, - selectionStyleLine -}; - -//------------------------------------------------------------------------ -// TextFontInfo -//------------------------------------------------------------------------ - -class TextFontInfo { -public: - - TextFontInfo(GfxState *state); - ~TextFontInfo(); - - GBool matches(GfxState *state); - GBool matches(TextFontInfo *fontInfo); - -#if TEXTOUT_WORD_LIST - // Get the font name (which may be NULL). - GooString *getFontName() { return fontName; } - - // Get font descriptor flags. - GBool isFixedWidth() { return flags & fontFixedWidth; } - GBool isSerif() { return flags & fontSerif; } - GBool isSymbolic() { return flags & fontSymbolic; } - GBool isItalic() { return flags & fontItalic; } - GBool isBold() { return flags & fontBold; } -#endif - -private: - - GfxFont *gfxFont; -#if TEXTOUT_WORD_LIST - GooString *fontName; - int flags; -#endif - - friend class TextWord; - friend class TextPage; - friend class TextSelectionPainter; -}; - -//------------------------------------------------------------------------ -// TextWord -//------------------------------------------------------------------------ - -class TextWord { -public: - - // Constructor. - TextWord(GfxState *state, int rotA, double x0, double y0, - int charPosA, TextFontInfo *fontA, double fontSize); - - // Destructor. - ~TextWord(); - - // Add a character to the word. - void addChar(GfxState *state, double x, double y, - double dx, double dy, CharCode c, Unicode u); - - // Merge <word> onto the end of <this>. - void merge(TextWord *word); - - // Compares <this> to <word>, returning -1 (<), 0 (=), or +1 (>), - // based on a primary-axis comparison, e.g., x ordering if rot=0. - int primaryCmp(TextWord *word); - - // Return the distance along the primary axis between <this> and - // <word>. - double primaryDelta(TextWord *word); - - static int cmpYX(const void *p1, const void *p2); - - void visitSelection(TextSelectionVisitor *visitor, - PDFRectangle *selection, - SelectionStyle style); - - // Get the TextFontInfo object associated with this word. - TextFontInfo *getFontInfo() { return font; } - - // Get the next TextWord on the linked list. - TextWord *getNext() { return next; } - -#if TEXTOUT_WORD_LIST - int getLength() { return len; } - const Unicode *getChar(int idx) { return &text[idx]; } - GooString *getText(); - GooString *getFontName() { return font->fontName; } - void getColor(double *r, double *g, double *b) - { *r = colorR; *g = colorG; *b = colorB; } - void getBBox(double *xMinA, double *yMinA, double *xMaxA, double *yMaxA) - { *xMinA = xMin; *yMinA = yMin; *xMaxA = xMax; *yMaxA = yMax; } - void getCharBBox(int charIdx, double *xMinA, double *yMinA, - double *xMaxA, double *yMaxA); - double getFontSize() { return fontSize; } - int getRotation() { return rot; } - int getCharPos() { return charPos; } - int getCharLen() { return charLen; } - GBool getSpaceAfter() { return spaceAfter; } -#endif - GBool isUnderlined() { return underlined; } - AnnotLink *getLink() { return link; } - double getEdge(int i) { return edge[i]; } - double getBaseline () { return base; } - GBool hasSpaceAfter () { return spaceAfter; } - TextWord* nextWord () { return next; }; -private: - - int rot; // rotation, multiple of 90 degrees - // (0, 1, 2, or 3) - double xMin, xMax; // bounding box x coordinates - double yMin, yMax; // bounding box y coordinates - double base; // baseline x or y coordinate - Unicode *text; // the text - CharCode *charcode; // glyph indices - double *edge; // "near" edge x or y coord of each char - // (plus one extra entry for the last char) - int len; // length of text and edge arrays - int size; // size of text and edge arrays - int charPos; // character position (within content stream) - int charLen; // number of content stream characters in - // this word - TextFontInfo *font; // font information - double fontSize; // font size - GBool spaceAfter; // set if there is a space between this - // word and the next word on the line - TextWord *next; // next word in line - -#if TEXTOUT_WORD_LIST - double colorR, // word color - colorG, - colorB; -#endif - - GBool underlined; - AnnotLink *link; - - friend class TextPool; - friend class TextLine; - friend class TextBlock; - friend class TextFlow; - friend class TextWordList; - friend class TextPage; - - friend class TextSelectionPainter; - friend class TextSelectionDumper; -}; - -//------------------------------------------------------------------------ -// TextPool -//------------------------------------------------------------------------ - -class TextPool { -public: - - TextPool(); - ~TextPool(); - - TextWord *getPool(int baseIdx) { return pool[baseIdx - minBaseIdx]; } - void setPool(int baseIdx, TextWord *p) { pool[baseIdx - minBaseIdx] = p; } - - int getBaseIdx(double base); - - void addWord(TextWord *word); - -private: - - int minBaseIdx; // min baseline bucket index - int maxBaseIdx; // max baseline bucket index - TextWord **pool; // array of linked lists, one for each - // baseline value (multiple of 4 pts) - TextWord *cursor; // pointer to last-accessed word - int cursorBaseIdx; // baseline bucket index of last-accessed word - - friend class TextBlock; - friend class TextPage; -}; - -struct TextFlowData; - -//------------------------------------------------------------------------ -// TextLine -//------------------------------------------------------------------------ - -class TextLine { -public: - - TextLine(TextBlock *blkA, int rotA, double baseA); - ~TextLine(); - - void addWord(TextWord *word); - - // Return the distance along the primary axis between <this> and - // <line>. - double primaryDelta(TextLine *line); - - // Compares <this> to <line>, returning -1 (<), 0 (=), or +1 (>), - // based on a primary-axis comparison, e.g., x ordering if rot=0. - int primaryCmp(TextLine *line); - - // Compares <this> to <line>, returning -1 (<), 0 (=), or +1 (>), - // based on a secondary-axis comparison of the baselines, e.g., y - // ordering if rot=0. - int secondaryCmp(TextLine *line); - - int cmpYX(TextLine *line); - - static int cmpXY(const void *p1, const void *p2); - - void coalesce(UnicodeMap *uMap); - - void visitSelection(TextSelectionVisitor *visitor, - PDFRectangle *selection, - SelectionStyle style); - - // Get the head of the linked list of TextWords. - TextWord *getWords() { return words; } - - // Get the next TextLine on the linked list. - TextLine *getNext() { return next; } - - // Returns true if the last char of the line is a hyphen. - GBool isHyphenated() { return hyphenated; } - -private: - - TextBlock *blk; // parent block - int rot; // text rotation - double xMin, xMax; // bounding box x coordinates - double yMin, yMax; // bounding box y coordinates - double base; // baseline x or y coordinate - TextWord *words; // words in this line - TextWord *lastWord; // last word in this line - Unicode *text; // Unicode text of the line, including - // spaces between words - double *edge; // "near" edge x or y coord of each char - // (plus one extra entry for the last char) - int *col; // starting column number of each Unicode char - int len; // number of Unicode chars - int convertedLen; // total number of converted characters - GBool hyphenated; // set if last char is a hyphen - TextLine *next; // next line in block - Unicode *normalized; // normalized form of Unicode text - int normalized_len; // number of normalized Unicode chars - int *normalized_idx; // indices of normalized chars into Unicode text - - friend class TextLineFrag; - friend class TextBlock; - friend class TextFlow; - friend class TextWordList; - friend class TextPage; - - friend class TextSelectionPainter; - friend class TextSelectionSizer; - friend class TextSelectionDumper; -}; - -//------------------------------------------------------------------------ -// TextBlock -//------------------------------------------------------------------------ - -class TextBlock { -public: - - TextBlock(TextPage *pageA, int rotA); - ~TextBlock(); - - void addWord(TextWord *word); - - void coalesce(UnicodeMap *uMap); - - // Update this block's priMin and priMax values, looking at <blk>. - void updatePriMinMax(TextBlock *blk); - - static int cmpXYPrimaryRot(const void *p1, const void *p2); - - static int cmpYXPrimaryRot(const void *p1, const void *p2); - - int primaryCmp(TextBlock *blk); - - double secondaryDelta(TextBlock *blk); - - // Returns true if <this> is below <blk>, relative to the page's - // primary rotation. - GBool isBelow(TextBlock *blk); - - void visitSelection(TextSelectionVisitor *visitor, - PDFRectangle *selection, - SelectionStyle style); - - // Get the head of the linked list of TextLines. - TextLine *getLines() { return lines; } - - // Get the next TextBlock on the linked list. - TextBlock *getNext() { return next; } - - void getBBox(double *xMinA, double *yMinA, double *xMaxA, double *yMaxA) - { *xMinA = xMin; *yMinA = yMin; *xMaxA = xMax; *yMaxA = yMax; } - - int getLineCount() { return nLines; } - -private: - - GBool isBeforeByRule1(TextBlock *blk1); - GBool isBeforeByRepeatedRule1(TextBlock *blkList, TextBlock *blk1); - GBool isBeforeByRule2(TextBlock *blk1); - - int visitDepthFirst(TextBlock *blkList, int pos1, - TextBlock **sorted, int sortPos, - GBool* visited); - - TextPage *page; // the parent page - int rot; // text rotation - double xMin, xMax; // bounding box x coordinates - double yMin, yMax; // bounding box y coordinates - double priMin, priMax; // whitespace bounding box along primary axis - double ExMin, ExMax; // extended bounding box x coordinates - double EyMin, EyMax; // extended bounding box y coordinates - int tableId; // id of table to which this block belongs - GBool tableEnd; // is this block at end of line of actual table - - TextPool *pool; // pool of words (used only until lines - // are built) - TextLine *lines; // linked list of lines - TextLine *curLine; // most recently added line - int nLines; // number of lines - int charCount; // number of characters in the block - int col; // starting column - int nColumns; // number of columns in the block - - TextBlock *next; - TextBlock *stackNext; - - friend class TextLine; - friend class TextLineFrag; - friend class TextFlow; - friend class TextWordList; - friend class TextPage; - friend class TextSelectionPainter; - friend class TextSelectionDumper; -}; - -//------------------------------------------------------------------------ -// TextFlow -//------------------------------------------------------------------------ - -class TextFlow { -public: - - TextFlow(TextPage *pageA, TextBlock *blk); - ~TextFlow(); - - // Add a block to the end of this flow. - void addBlock(TextBlock *blk); - - // Returns true if <blk> fits below <prevBlk> in the flow, i.e., (1) - // it uses a font no larger than the last block added to the flow, - // and (2) it fits within the flow's [priMin, priMax] along the - // primary axis. - GBool blockFits(TextBlock *blk, TextBlock *prevBlk); - - // Get the head of the linked list of TextBlocks. - TextBlock *getBlocks() { return blocks; } - - // Get the next TextFlow on the linked list. - TextFlow *getNext() { return next; } - -private: - - TextPage *page; // the parent page - double xMin, xMax; // bounding box x coordinates - double yMin, yMax; // bounding box y coordinates - double priMin, priMax; // whitespace bounding box along primary axis - TextBlock *blocks; // blocks in flow - TextBlock *lastBlk; // last block in this flow - TextFlow *next; - - friend class TextWordList; - friend class TextPage; -}; - -#if TEXTOUT_WORD_LIST - -//------------------------------------------------------------------------ -// TextWordList -//------------------------------------------------------------------------ - -class TextWordList { -public: - - // Build a flat word list, in content stream order (if - // text->rawOrder is true), physical layout order (if <physLayout> - // is true and text->rawOrder is false), or reading order (if both - // flags are false). - TextWordList(TextPage *text, GBool physLayout); - - ~TextWordList(); - - // Return the number of words on the list. - int getLength(); - - // Return the <idx>th word from the list. - TextWord *get(int idx); - -private: - - GooList *words; // [TextWord] -}; - -#endif // TEXTOUT_WORD_LIST - -//------------------------------------------------------------------------ -// TextPage -//------------------------------------------------------------------------ - -class TextPage { -public: - - // Constructor. - TextPage(GBool rawOrderA); - - void incRefCnt(); - void decRefCnt(); - - // Start a new page. - void startPage(GfxState *state); - - // End the current page. - void endPage(); - - // Update the current font. - void updateFont(GfxState *state); - - // Begin a new word. - void beginWord(GfxState *state, double x0, double y0); - - // Add a character to the current word. - void addChar(GfxState *state, double x, double y, - double dx, double dy, - CharCode c, int nBytes, Unicode *u, int uLen); - - // End the current word, sorting it into the list of words. - void endWord(); - - // Add a word, sorting it into the list of words. - void addWord(TextWord *word); - - // Add a (potential) underline. - void addUnderline(double x0, double y0, double x1, double y1); - - // Add a hyperlink. - void addLink(int xMin, int yMin, int xMax, int yMax, AnnotLink *link); - - // Coalesce strings that look like parts of the same line. - void coalesce(GBool physLayout, GBool doHTML); - - // Find a string. If <startAtTop> is true, starts looking at the - // top of the page; else if <startAtLast> is true, starts looking - // immediately after the last find result; else starts looking at - // <xMin>,<yMin>. If <stopAtBottom> is true, stops looking at the - // bottom of the page; else if <stopAtLast> is true, stops looking - // just before the last find result; else stops looking at - // <xMax>,<yMax>. - GBool findText(Unicode *s, int len, - GBool startAtTop, GBool stopAtBottom, - GBool startAtLast, GBool stopAtLast, - GBool caseSensitive, GBool backward, - double *xMin, double *yMin, - double *xMax, double *yMax); - - // Get the text which is inside the specified rectangle. - GooString *getText(double xMin, double yMin, - double xMax, double yMax); - - void visitSelection(TextSelectionVisitor *visitor, - PDFRectangle *selection, - SelectionStyle style); - - void drawSelection(OutputDev *out, - double scale, - int rotation, - PDFRectangle *selection, - SelectionStyle style, - GfxColor *glyph_color, GfxColor *box_color); - - GooList *getSelectionRegion(PDFRectangle *selection, - SelectionStyle style, - double scale); - - GooString *getSelectionText(PDFRectangle *selection, - SelectionStyle style); - - // Find a string by character position and length. If found, sets - // the text bounding rectangle and returns true; otherwise returns - // false. - GBool findCharRange(int pos, int length, - double *xMin, double *yMin, - double *xMax, double *yMax); - - // Dump contents of page to a file. - void dump(void *outputStream, TextOutputFunc outputFunc, - GBool physLayout); - - // Get the head of the linked list of TextFlows. - TextFlow *getFlows() { return flows; } - -#if TEXTOUT_WORD_LIST - // Build a flat word list, in content stream order (if - // this->rawOrder is true), physical layout order (if <physLayout> - // is true and this->rawOrder is false), or reading order (if both - // flags are false). - TextWordList *makeWordList(GBool physLayout); -#endif - -private: - - // Destructor. - ~TextPage(); - - void clear(); - void assignColumns(TextLineFrag *frags, int nFrags, GBool rot); - int dumpFragment(Unicode *text, int len, UnicodeMap *uMap, GooString *s); - - GBool rawOrder; // keep text in content stream order - - double pageWidth, pageHeight; // width and height of current page - TextWord *curWord; // currently active string - int charPos; // next character position (within content - // stream) - TextFontInfo *curFont; // current font - double curFontSize; // current font size - int nest; // current nesting level (for Type 3 fonts) - int nTinyChars; // number of "tiny" chars seen so far - GBool lastCharOverlap; // set if the last added char overlapped the - // previous char - - TextPool *pools[4]; // a "pool" of TextWords for each rotation - TextFlow *flows; // linked list of flows - TextBlock **blocks; // array of blocks, in yx order - int nBlocks; // number of blocks - int primaryRot; // primary rotation - GBool primaryLR; // primary direction (true means L-to-R, - // false means R-to-L) - TextWord *rawWords; // list of words, in raw order (only if - // rawOrder is set) - TextWord *rawLastWord; // last word on rawWords list - - GooList *fonts; // all font info objects used on this - // page [TextFontInfo] - - double lastFindXMin, // coordinates of the last "find" result - lastFindYMin; - GBool haveLastFind; - - GooList *underlines; // [TextUnderline] - GooList *links; // [TextLink] - - int refCnt; - - friend class TextLine; - friend class TextLineFrag; - friend class TextBlock; - friend class TextFlow; - friend class TextWordList; - friend class TextSelectionPainter; - friend class TextSelectionDumper; -}; - -//------------------------------------------------------------------------ -// ActualText -//------------------------------------------------------------------------ - -class ActualText { -public: - // Create an ActualText - ActualText(TextPage *out); - ~ActualText(); - - void addChar(GfxState *state, double x, double y, - double dx, double dy, - CharCode c, int nBytes, Unicode *u, int uLen); - void beginMC(Dict *properties); - void endMC(GfxState *state); - -private: - TextPage *text; - int actualTextBMCLevel; // > 0 when inside ActualText span. Incremented - // for each nested BMC inside the span. - GooString *actualText; // replacement text for the span - GBool newActualTextSpan; // true at start of span. used to init the extent - double actualText_x, actualText_y; // extent of the text inside the span - double actualText_dx, actualText_dy; -}; - - -//------------------------------------------------------------------------ -// TextOutputDev -//------------------------------------------------------------------------ - -class TextOutputDev: public OutputDev { -public: - - // Open a text output file. If <fileName> is NULL, no file is - // written (this is useful, e.g., for searching text). If - // <physLayoutA> is true, the original physical layout of the text - // is maintained. If <rawOrder> is true, the text is kept in - // content stream order. - TextOutputDev(char *fileName, GBool physLayoutA, - GBool rawOrderA, GBool append); - - // Create a TextOutputDev which will write to a generic stream. If - // <physLayoutA> is true, the original physical layout of the text - // is maintained. If <rawOrder> is true, the text is kept in - // content stream order. - TextOutputDev(TextOutputFunc func, void *stream, - GBool physLayoutA, GBool rawOrderA); - - // Destructor. - virtual ~TextOutputDev(); - - // Check if file was successfully created. - virtual GBool isOk() { return ok; } - - //---- get info about output device - - // Does this device use upside-down coordinates? - // (Upside-down means (0,0) is the top left corner of the page.) - virtual GBool upsideDown() { return gTrue; } - - // Does this device use drawChar() or drawString()? - virtual GBool useDrawChar() { return gTrue; } - - // Does this device use beginType3Char/endType3Char? Otherwise, - // text in Type 3 fonts will be drawn with drawChar/drawString. - virtual GBool interpretType3Chars() { return gFalse; } - - // Does this device need non-text content? - virtual GBool needNonText() { return gFalse; } - - //----- initialization and control - - // Start a page. - virtual void startPage(int pageNum, GfxState *state); - - // End a page. - virtual void endPage(); - - //----- update text state - virtual void updateFont(GfxState *state); - - //----- text drawing - virtual void beginString(GfxState *state, GooString *s); - virtual void endString(GfxState *state); - virtual void drawChar(GfxState *state, double x, double y, - double dx, double dy, - double originX, double originY, - CharCode c, int nBytes, Unicode *u, int uLen); - - //----- grouping operators - virtual void beginMarkedContent(char *name, Dict *properties); - virtual void endMarkedContent(GfxState *state); - - //----- path painting - virtual void stroke(GfxState *state); - virtual void fill(GfxState *state); - virtual void eoFill(GfxState *state); - - //----- link borders - virtual void processLink(AnnotLink *link, Catalog *catalog); - - //----- special access - - // Find a string. If <startAtTop> is true, starts looking at the - // top of the page; else if <startAtLast> is true, starts looking - // immediately after the last find result; else starts looking at - // <xMin>,<yMin>. If <stopAtBottom> is true, stops looking at the - // bottom of the page; else if <stopAtLast> is true, stops looking - // just before the last find result; else stops looking at - // <xMax>,<yMax>. - GBool findText(Unicode *s, int len, - GBool startAtTop, GBool stopAtBottom, - GBool startAtLast, GBool stopAtLast, - GBool caseSensitive, GBool backward, - double *xMin, double *yMin, - double *xMax, double *yMax); - - // Get the text which is inside the specified rectangle. - GooString *getText(double xMin, double yMin, - double xMax, double yMax); - - // Find a string by character position and length. If found, sets - // the text bounding rectangle and returns true; otherwise returns - // false. - GBool findCharRange(int pos, int length, - double *xMin, double *yMin, - double *xMax, double *yMax); - - void drawSelection(OutputDev *out, double scale, int rotation, - PDFRectangle *selection, - SelectionStyle style, - GfxColor *glyph_color, GfxColor *box_color); - - GooList *getSelectionRegion(PDFRectangle *selection, - SelectionStyle style, - double scale); - - GooString *getSelectionText(PDFRectangle *selection, - SelectionStyle style); - -#if TEXTOUT_WORD_LIST - // Build a flat word list, in content stream order (if - // this->rawOrder is true), physical layout order (if - // this->physLayout is true and this->rawOrder is false), or reading - // order (if both flags are false). - TextWordList *makeWordList(); -#endif - - // Returns the TextPage object for the last rasterized page, - // transferring ownership to the caller. - TextPage *takeText(); - - // Turn extra processing for HTML conversion on or off. - void enableHTMLExtras(GBool doHTMLA) { doHTML = doHTMLA; } - -private: - - TextOutputFunc outputFunc; // output function - void *outputStream; // output stream - GBool needClose; // need to close the output file? - // (only if outputStream is a FILE*) - TextPage *text; // text for the current page - GBool physLayout; // maintain original physical layout when - // dumping text - GBool rawOrder; // keep text in content stream order - GBool doHTML; // extra processing for HTML conversion - GBool ok; // set up ok? - - ActualText *actualText; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/UTF8.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/UTF8.h deleted file mode 100644 index 34a07d4082f..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/UTF8.h +++ /dev/null @@ -1,84 +0,0 @@ -//======================================================================== -// -// UTF8.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2008 Koji Otani <sho@bbr.jp> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -static int mapUTF8(Unicode u, char *buf, int bufSize) { - if (u <= 0x0000007f) { - if (bufSize < 1) { - return 0; - } - buf[0] = (char)u; - return 1; - } else if (u <= 0x000007ff) { - if (bufSize < 2) { - return 0; - } - buf[0] = (char)(0xc0 + (u >> 6)); - buf[1] = (char)(0x80 + (u & 0x3f)); - return 2; - } else if (u <= 0x0000ffff) { - if (bufSize < 3) { - return 0; - } - buf[0] = (char)(0xe0 + (u >> 12)); - buf[1] = (char)(0x80 + ((u >> 6) & 0x3f)); - buf[2] = (char)(0x80 + (u & 0x3f)); - return 3; - } else if (u <= 0x0010ffff) { - if (bufSize < 4) { - return 0; - } - buf[0] = (char)(0xf0 + (u >> 18)); - buf[1] = (char)(0x80 + ((u >> 12) & 0x3f)); - buf[2] = (char)(0x80 + ((u >> 6) & 0x3f)); - buf[3] = (char)(0x80 + (u & 0x3f)); - return 4; - } else { - return 0; - } -} - -static int mapUCS2(Unicode u, char *buf, int bufSize) { - if (u <= 0xffff) { - if (bufSize < 2) { - return 0; - } - buf[0] = (char)((u >> 8) & 0xff); - buf[1] = (char)(u & 0xff); - return 2; - } else if (u < 0x110000) { - Unicode uu; - - /* using surrogate pair */ - if (bufSize < 4) { - return 0; - } - uu = ((u - 0x10000) >> 10) + 0xd800; - buf[0] = (char)((uu >> 8) & 0xff); - buf[1] = (char)(uu & 0xff); - uu = (u & 0x3ff)+0xdc00; - buf[2] = (char)((uu >> 8) & 0xff); - buf[3] = (char)(uu & 0xff); - return 4; - } else { - return 0; - } -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeCClassTables.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeCClassTables.h deleted file mode 100644 index 62f9ecc3657..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeCClassTables.h +++ /dev/null @@ -1,1827 +0,0 @@ -// Copied from gunidecomp.h in GLib: -// s/[G]_UNICODE_MAX_TABLE_INDEX/UNICODE_MAX_TABLE_INDEX/g -// s/[g]uchar/Unicode/g -// s/[g]int16/short/g -// Can be regenerated from gen-unicode-tables.pl, also in GLib, with relevant -// Unicode data tables from ftp.unicode.org. - -static const Unicode cclass_data[][256] = { - { /* page 3, index 0 */ - 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 232, 220, 220, 220, 220, 232, 216, - 220, 220, 220, 220, 220, 202, 202, 220, 220, 220, 220, 202, 202, 220, - 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1, 1, 1, 1, 220, - 220, 220, 220, 230, 230, 230, 230, 230, 230, 230, 230, 240, 230, 220, - 220, 220, 230, 230, 230, 220, 220, 0, 230, 230, 230, 220, 220, 220, 220, - 230, 0, 0, 0, 0, 0, 234, 234, 233, 234, 234, 233, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 4, index 1 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 5, index 2 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 220, 230, 230, 230, 230, 220, 230, 230, 230, 222, 220, 230, 230, 230, - 230, 230, 230, 0, 220, 220, 220, 220, 220, 230, 230, 220, 230, 230, 222, - 228, 230, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 20, 21, 22, 0, 23, - 0, 24, 25, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 6, index 3 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34, 230, 230, 220, 220, - 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 0, 0, 230, - 230, 230, 230, 220, 230, 0, 0, 230, 230, 0, 220, 230, 230, 220, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 7, index 4 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 230, 220, 230, 230, 220, 230, 230, 220, 220, 220, 230, 220, 220, 230, - 220, 230, 230, 230, 220, 230, 220, 230, 220, 230, 220, 230, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 9, index 5 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 0, 0, 0, 230, 220, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 10, index 6 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 11, index 7 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 12, index 8 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 84, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 13, index 9 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 14, index 10 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 15, index 11 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 220, 0, 220, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 0, - 132, 0, 0, 0, 0, 0, 130, 130, 130, 130, 0, 0, 130, 0, 230, 230, 9, 0, - 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0 - }, - { /* page 16, index 12 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 23, index 13 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 24, index 14 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 25, index 15 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 32, index 16 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 1, 1, 230, 230, - 230, 230, 1, 1, 1, 230, 230, 0, 0, 0, 0, 230, 0, 0, 0, 1, 1, 230, 220, - 230, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 48, index 17 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 228, 232, 222, - 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 251, index 18 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 254, index 19 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 465, index 20 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 216, 216, 1, 1, 1, 0, 0, 0, 226, 216, 216, 216, 216, 216, - 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 220, 220, 220, 220, 220, 0, 0, - 230, 230, 230, 230, 230, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0 - } -}; - -static const short combining_class_table_part1[763] = { - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 /* page 3 */, - 1 /* page 4 */, - 2 /* page 5 */, - 3 /* page 6 */, - 4 /* page 7 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 5 /* page 9 */, - 6 /* page 10 */, - 7 /* page 11 */, - 8 /* page 12 */, - 9 /* page 13 */, - 10 /* page 14 */, - 11 /* page 15 */, - 12 /* page 16 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 13 /* page 23 */, - 14 /* page 24 */, - 15 /* page 25 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 16 /* page 32 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 17 /* page 48 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 18 /* page 251 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 19 /* page 254 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 20 /* page 465 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX -}; - -static const short combining_class_table_part2[768] = { - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX -}; diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeCompTables.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeCompTables.h deleted file mode 100644 index 68e2f86aee9..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeCompTables.h +++ /dev/null @@ -1,665 +0,0 @@ -// Copied from gunicomp.h in GLib: -// s/[G]_UNICODE_MAX_TABLE_INDEX/UNICODE_MAX_TABLE_INDEX/g -// s/[g]uint16/unsigned short/g -// s/[g]int16/short/g -// Can be regenerated from gen-unicode-tables.pl, also in GLib, with relevant -// Unicode data tables from ftp.unicode.org. - -#define COMPOSE_FIRST_START 1 -#define COMPOSE_FIRST_SINGLE_START 147 -#define COMPOSE_SECOND_START 357 -#define COMPOSE_SECOND_SINGLE_START 388 - -#define COMPOSE_TABLE_LAST 48 - -static const unsigned short compose_data[][256] = { - { /* page 0, index 0 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 148, 149, 0, 0, 1, 2, 3, 4, 5, - 150, 6, 7, 8, 151, 9, 10, 11, 12, 13, 14, 0, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 152, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 0, 39, 40, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 153, 154, - 50, 155, 0, 0, 51, 0, 0, 0, 0, 156, 0, 0, 0, 0, 52, 53, 157, 0, 158, 0, - 0, 0, 54, 0, 0, 0, 0, 0, 55, 0, 159, 160, 56, 161, 0, 0, 57, 0, 0, 0, 0, - 162, 0, 0, 0, 0, 58, 59, 163, 0, 164, 0, 0, 0, 60, 0, 0, 0 - }, - { /* page 1, index 1 */ - 0, 0, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 166, 0, - 0, 0, 0, 167, 168, 0, 0, 0, 0, 0, 0, 169, 170, 171, 172, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, - 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 70, 0, 0, 0, 0, 0, 0, 174, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 175, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0 - }, - { /* page 2, index 2 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 178, 179, 180, 0, 0, 0, 0, - 181, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 3, index 3 */ - 357, 358, 359, 360, 361, 0, 362, 363, 364, 365, 366, 367, 368, 0, 0, 369, - 0, 370, 0, 371, 372, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 374, - 375, 376, 377, 378, 379, 0, 0, 0, 0, 380, 381, 0, 382, 383, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, - 72, 0, 73, 0, 74, 0, 0, 0, 0, 0, 75, 0, 184, 0, 0, 0, 76, 0, 0, 0, 77, 0, - 0, 185, 0, 186, 0, 0, 78, 0, 0, 0, 79, 0, 80, 0, 81, 0, 0, 0, 0, 0, 82, - 0, 83, 0, 0, 0, 84, 0, 0, 0, 85, 86, 87, 0, 0, 187, 0, 0, 0, 88, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 4, index 4 */ - 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 189, 0, 90, - 91, 190, 92, 0, 191, 0, 0, 0, 192, 0, 0, 0, 0, 93, 0, 0, 0, 193, 0, 0, 0, - 194, 0, 195, 0, 0, 94, 0, 0, 196, 0, 95, 96, 197, 97, 0, 198, 0, 0, 0, - 199, 0, 0, 0, 0, 98, 0, 0, 0, 200, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 207, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 208, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 6, index 5 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 388, 389, 390, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, - 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 9, index 6 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, - 216, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, - 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 11, index 7 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, - 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 395, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 396, 0, 0, 0, 0, 0, 0, 0, 102, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 12, index 8 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, - 0, 0, 398, 0, 0, 0, 103, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, - 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 13, index 9 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 104, - 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 105, 0, 0, 224, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 16, index 10 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 30, index 11 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 226, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 229, 0, 0, - 0, 0, 0, 0, 230, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 107, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 233, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 235, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 31, index 12 */ - 108, 109, 236, 237, 238, 239, 240, 241, 110, 111, 242, 243, 244, 245, - 246, 247, 112, 113, 0, 0, 0, 0, 0, 0, 114, 115, 0, 0, 0, 0, 0, 0, 116, - 117, 248, 249, 250, 251, 252, 253, 118, 119, 254, 255, 256, 257, 258, - 259, 120, 121, 0, 0, 0, 0, 0, 0, 122, 123, 0, 0, 0, 0, 0, 0, 124, 125, 0, - 0, 0, 0, 0, 0, 126, 127, 0, 0, 0, 0, 0, 0, 128, 129, 0, 0, 0, 0, 0, 0, 0, - 130, 0, 0, 0, 0, 0, 0, 131, 132, 260, 261, 262, 263, 264, 265, 133, 134, - 266, 267, 268, 269, 270, 271, 272, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, - 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 136, 0 - }, - { /* page 33, index 13 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 278, 0, 279, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 282, 0, - 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 34, index 14 */ - 0, 0, 0, 284, 0, 0, 0, 0, 285, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 288, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 290, - 0, 291, 0, 0, 292, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 295, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 297, 298, 0, 0, 299, 300, 0, 0, 301, 302, 303, 304, 0, 0, 0, 0, - 305, 306, 0, 0, 307, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 310, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 312, 313, 0, 314, - 0, 0, 0, 0, 0, 0, 315, 316, 317, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }, - { /* page 48, index 15 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, - 0, 0, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, - 328, 0, 329, 0, 330, 0, 331, 0, 0, 332, 0, 333, 0, 334, 0, 0, 0, 0, 0, 0, - 137, 0, 0, 138, 0, 0, 139, 0, 0, 140, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 387, - 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 337, 0, 338, 0, 339, - 0, 340, 0, 341, 0, 342, 0, 343, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, - 0, 0, 349, 0, 350, 0, 351, 0, 0, 0, 0, 0, 0, 142, 0, 0, 143, 0, 0, 144, - 0, 0, 145, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 353, 354, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0 - } -}; - -static const short compose_table[COMPOSE_TABLE_LAST + 1] = { - 0 /* page 0 */, - 1 /* page 1 */, - 2 /* page 2 */, - 3 /* page 3 */, - 4 /* page 4 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 5 /* page 6 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 6 /* page 9 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 7 /* page 11 */, - 8 /* page 12 */, - 9 /* page 13 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 10 /* page 16 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 11 /* page 30 */, - 12 /* page 31 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 13 /* page 33 */, - 14 /* page 34 */, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 0 + UNICODE_MAX_TABLE_INDEX, - 15 /* page 48 */ -}; - -static const unsigned short compose_first_single[][2] = { - { 0x0338, 0x226e }, - { 0x0338, 0x2260 }, - { 0x0338, 0x226f }, - { 0x0307, 0x1e1e }, - { 0x0302, 0x0134 }, - { 0x0307, 0x1e1f }, - { 0x0304, 0x01de }, - { 0x0301, 0x01fa }, - { 0x0301, 0x1e08 }, - { 0x0301, 0x1e2e }, - { 0x0304, 0x022a }, - { 0x0301, 0x01fe }, - { 0x0304, 0x01df }, - { 0x0301, 0x01fb }, - { 0x0301, 0x1e09 }, - { 0x0301, 0x1e2f }, - { 0x0304, 0x022b }, - { 0x0301, 0x01ff }, - { 0x0307, 0x1e64 }, - { 0x0307, 0x1e65 }, - { 0x0307, 0x1e66 }, - { 0x0307, 0x1e67 }, - { 0x0301, 0x1e78 }, - { 0x0301, 0x1e79 }, - { 0x0308, 0x1e7a }, - { 0x0308, 0x1e7b }, - { 0x0307, 0x1e9b }, - { 0x030c, 0x01ee }, - { 0x0304, 0x01ec }, - { 0x0304, 0x01ed }, - { 0x0304, 0x01e0 }, - { 0x0304, 0x01e1 }, - { 0x0306, 0x1e1c }, - { 0x0306, 0x1e1d }, - { 0x0304, 0x0230 }, - { 0x0304, 0x0231 }, - { 0x030c, 0x01ef }, - { 0x0314, 0x1fec }, - { 0x0345, 0x1fb4 }, - { 0x0345, 0x1fc4 }, - { 0x0345, 0x1ff4 }, - { 0x0308, 0x0407 }, - { 0x0301, 0x0403 }, - { 0x0308, 0x04de }, - { 0x0301, 0x040c }, - { 0x0308, 0x04e6 }, - { 0x0308, 0x04f4 }, - { 0x0308, 0x04f8 }, - { 0x0308, 0x04ec }, - { 0x0301, 0x0453 }, - { 0x0308, 0x04df }, - { 0x0301, 0x045c }, - { 0x0308, 0x04e7 }, - { 0x0308, 0x04f5 }, - { 0x0308, 0x04f9 }, - { 0x0308, 0x04ed }, - { 0x0308, 0x0457 }, - { 0x030f, 0x0476 }, - { 0x030f, 0x0477 }, - { 0x0308, 0x04da }, - { 0x0308, 0x04db }, - { 0x0308, 0x04ea }, - { 0x0308, 0x04eb }, - { 0x0654, 0x0624 }, - { 0x0654, 0x0626 }, - { 0x0654, 0x06c2 }, - { 0x0654, 0x06d3 }, - { 0x0654, 0x06c0 }, - { 0x093c, 0x0929 }, - { 0x093c, 0x0931 }, - { 0x093c, 0x0934 }, - { 0x0bd7, 0x0b94 }, - { 0x0bbe, 0x0bcb }, - { 0x0c56, 0x0c48 }, - { 0x0cd5, 0x0cc0 }, - { 0x0cd5, 0x0ccb }, - { 0x0d3e, 0x0d4b }, - { 0x0dca, 0x0ddd }, - { 0x102e, 0x1026 }, - { 0x0304, 0x1e38 }, - { 0x0304, 0x1e39 }, - { 0x0304, 0x1e5c }, - { 0x0304, 0x1e5d }, - { 0x0307, 0x1e68 }, - { 0x0307, 0x1e69 }, - { 0x0302, 0x1ec6 }, - { 0x0302, 0x1ec7 }, - { 0x0302, 0x1ed8 }, - { 0x0302, 0x1ed9 }, - { 0x0345, 0x1f82 }, - { 0x0345, 0x1f83 }, - { 0x0345, 0x1f84 }, - { 0x0345, 0x1f85 }, - { 0x0345, 0x1f86 }, - { 0x0345, 0x1f87 }, - { 0x0345, 0x1f8a }, - { 0x0345, 0x1f8b }, - { 0x0345, 0x1f8c }, - { 0x0345, 0x1f8d }, - { 0x0345, 0x1f8e }, - { 0x0345, 0x1f8f }, - { 0x0345, 0x1f92 }, - { 0x0345, 0x1f93 }, - { 0x0345, 0x1f94 }, - { 0x0345, 0x1f95 }, - { 0x0345, 0x1f96 }, - { 0x0345, 0x1f97 }, - { 0x0345, 0x1f9a }, - { 0x0345, 0x1f9b }, - { 0x0345, 0x1f9c }, - { 0x0345, 0x1f9d }, - { 0x0345, 0x1f9e }, - { 0x0345, 0x1f9f }, - { 0x0345, 0x1fa2 }, - { 0x0345, 0x1fa3 }, - { 0x0345, 0x1fa4 }, - { 0x0345, 0x1fa5 }, - { 0x0345, 0x1fa6 }, - { 0x0345, 0x1fa7 }, - { 0x0345, 0x1faa }, - { 0x0345, 0x1fab }, - { 0x0345, 0x1fac }, - { 0x0345, 0x1fad }, - { 0x0345, 0x1fae }, - { 0x0345, 0x1faf }, - { 0x0345, 0x1fb2 }, - { 0x0345, 0x1fc2 }, - { 0x0345, 0x1ff2 }, - { 0x0345, 0x1fb7 }, - { 0x0345, 0x1fc7 }, - { 0x0345, 0x1ff7 }, - { 0x0338, 0x219a }, - { 0x0338, 0x219b }, - { 0x0338, 0x21ae }, - { 0x0338, 0x21cd }, - { 0x0338, 0x21cf }, - { 0x0338, 0x21ce }, - { 0x0338, 0x2204 }, - { 0x0338, 0x2209 }, - { 0x0338, 0x220c }, - { 0x0338, 0x2224 }, - { 0x0338, 0x2226 }, - { 0x0338, 0x2241 }, - { 0x0338, 0x2244 }, - { 0x0338, 0x2247 }, - { 0x0338, 0x2249 }, - { 0x0338, 0x226d }, - { 0x0338, 0x2262 }, - { 0x0338, 0x2270 }, - { 0x0338, 0x2271 }, - { 0x0338, 0x2274 }, - { 0x0338, 0x2275 }, - { 0x0338, 0x2278 }, - { 0x0338, 0x2279 }, - { 0x0338, 0x2280 }, - { 0x0338, 0x2281 }, - { 0x0338, 0x22e0 }, - { 0x0338, 0x22e1 }, - { 0x0338, 0x2284 }, - { 0x0338, 0x2285 }, - { 0x0338, 0x2288 }, - { 0x0338, 0x2289 }, - { 0x0338, 0x22e2 }, - { 0x0338, 0x22e3 }, - { 0x0338, 0x22ac }, - { 0x0338, 0x22ad }, - { 0x0338, 0x22ae }, - { 0x0338, 0x22af }, - { 0x0338, 0x22ea }, - { 0x0338, 0x22eb }, - { 0x0338, 0x22ec }, - { 0x0338, 0x22ed }, - { 0x3099, 0x3094 }, - { 0x3099, 0x304c }, - { 0x3099, 0x304e }, - { 0x3099, 0x3050 }, - { 0x3099, 0x3052 }, - { 0x3099, 0x3054 }, - { 0x3099, 0x3056 }, - { 0x3099, 0x3058 }, - { 0x3099, 0x305a }, - { 0x3099, 0x305c }, - { 0x3099, 0x305e }, - { 0x3099, 0x3060 }, - { 0x3099, 0x3062 }, - { 0x3099, 0x3065 }, - { 0x3099, 0x3067 }, - { 0x3099, 0x3069 }, - { 0x3099, 0x309e }, - { 0x3099, 0x30f4 }, - { 0x3099, 0x30ac }, - { 0x3099, 0x30ae }, - { 0x3099, 0x30b0 }, - { 0x3099, 0x30b2 }, - { 0x3099, 0x30b4 }, - { 0x3099, 0x30b6 }, - { 0x3099, 0x30b8 }, - { 0x3099, 0x30ba }, - { 0x3099, 0x30bc }, - { 0x3099, 0x30be }, - { 0x3099, 0x30c0 }, - { 0x3099, 0x30c2 }, - { 0x3099, 0x30c5 }, - { 0x3099, 0x30c7 }, - { 0x3099, 0x30c9 }, - { 0x3099, 0x30f7 }, - { 0x3099, 0x30f8 }, - { 0x3099, 0x30f9 }, - { 0x3099, 0x30fa }, - { 0x3099, 0x30fe } -}; -static const unsigned short compose_second_single[][2] = { - { 0x0627, 0x0622 }, - { 0x0627, 0x0623 }, - { 0x0627, 0x0625 }, - { 0x09c7, 0x09cb }, - { 0x09c7, 0x09cc }, - { 0x0b47, 0x0b4b }, - { 0x0b47, 0x0b48 }, - { 0x0b47, 0x0b4c }, - { 0x0bc6, 0x0bca }, - { 0x0bc6, 0x0bcc }, - { 0x0cc6, 0x0cca }, - { 0x0cc6, 0x0cc7 }, - { 0x0cc6, 0x0cc8 }, - { 0x0d46, 0x0d4a }, - { 0x0d46, 0x0d4c }, - { 0x0dd9, 0x0dda }, - { 0x0dd9, 0x0ddc }, - { 0x0dd9, 0x0dde } -}; -static const unsigned short compose_array[146][31] = { - { 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x0100, 0x0102, 0x0226, 0x00c4, 0x1ea2, 0x00c5, 0, 0x01cd, 0x0200, 0x0202, 0, 0, 0, 0x1ea0, 0, 0x1e00, 0, 0, 0x0104, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0x1e02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e04, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e06, 0, 0, 0, 0 }, - { 0, 0x0106, 0x0108, 0, 0, 0, 0x010a, 0, 0, 0, 0, 0x010c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00c7, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0x1e0a, 0, 0, 0, 0, 0x010e, 0, 0, 0, 0, 0, 0x1e0c, 0, 0, 0, 0x1e10, 0, 0x1e12, 0, 0, 0x1e0e, 0, 0, 0, 0 }, - { 0x00c8, 0x00c9, 0x00ca, 0x1ebc, 0x0112, 0x0114, 0x0116, 0x00cb, 0x1eba, 0, 0, 0x011a, 0x0204, 0x0206, 0, 0, 0, 0x1eb8, 0, 0, 0, 0x0228, 0x0118, 0x1e18, 0, 0x1e1a, 0, 0, 0, 0, 0 }, - { 0, 0x01f4, 0x011c, 0, 0x1e20, 0x011e, 0x0120, 0, 0, 0, 0, 0x01e6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0122, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0x0124, 0, 0, 0, 0x1e22, 0x1e26, 0, 0, 0, 0x021e, 0, 0, 0, 0, 0, 0x1e24, 0, 0, 0, 0x1e28, 0, 0, 0x1e2a, 0, 0, 0, 0, 0, 0 }, - { 0x00cc, 0x00cd, 0x00ce, 0x0128, 0x012a, 0x012c, 0x0130, 0x00cf, 0x1ec8, 0, 0, 0x01cf, 0x0208, 0x020a, 0, 0, 0, 0x1eca, 0, 0, 0, 0, 0x012e, 0, 0, 0x1e2c, 0, 0, 0, 0, 0 }, - { 0, 0x1e30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01e8, 0, 0, 0, 0, 0, 0x1e32, 0, 0, 0, 0x0136, 0, 0, 0, 0, 0x1e34, 0, 0, 0, 0 }, - { 0, 0x0139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x013d, 0, 0, 0, 0, 0, 0x1e36, 0, 0, 0, 0x013b, 0, 0x1e3c, 0, 0, 0x1e3a, 0, 0, 0, 0 }, - { 0, 0x1e3e, 0, 0, 0, 0, 0x1e40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x01f8, 0x0143, 0, 0x00d1, 0, 0, 0x1e44, 0, 0, 0, 0, 0x0147, 0, 0, 0, 0, 0, 0x1e46, 0, 0, 0, 0x0145, 0, 0x1e4a, 0, 0, 0x1e48, 0, 0, 0, 0 }, - { 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x014c, 0x014e, 0x022e, 0x00d6, 0x1ece, 0, 0x0150, 0x01d1, 0x020c, 0x020e, 0, 0, 0x01a0, 0x1ecc, 0, 0, 0, 0, 0x01ea, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0x1e54, 0, 0, 0, 0, 0x1e56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0x0154, 0, 0, 0, 0, 0x1e58, 0, 0, 0, 0, 0x0158, 0x0210, 0x0212, 0, 0, 0, 0x1e5a, 0, 0, 0, 0x0156, 0, 0, 0, 0, 0x1e5e, 0, 0, 0, 0 }, - { 0, 0x015a, 0x015c, 0, 0, 0, 0x1e60, 0, 0, 0, 0, 0x0160, 0, 0, 0, 0, 0, 0x1e62, 0, 0, 0x0218, 0x015e, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0x1e6a, 0, 0, 0, 0, 0x0164, 0, 0, 0, 0, 0, 0x1e6c, 0, 0, 0x021a, 0x0162, 0, 0x1e70, 0, 0, 0x1e6e, 0, 0, 0, 0 }, - { 0x00d9, 0x00da, 0x00db, 0x0168, 0x016a, 0x016c, 0, 0x00dc, 0x1ee6, 0x016e, 0x0170, 0x01d3, 0x0214, 0x0216, 0, 0, 0x01af, 0x1ee4, 0x1e72, 0, 0, 0, 0x0172, 0x1e76, 0, 0x1e74, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x1e7c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e7e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1e80, 0x1e82, 0x0174, 0, 0, 0, 0x1e86, 0x1e84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0x1e8a, 0x1e8c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1ef2, 0x00dd, 0x0176, 0x1ef8, 0x0232, 0, 0x1e8e, 0x0178, 0x1ef6, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ef4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0x0179, 0x1e90, 0, 0, 0, 0x017b, 0, 0, 0, 0, 0x017d, 0, 0, 0, 0, 0, 0x1e92, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e94, 0, 0, 0, 0 }, - { 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x0101, 0x0103, 0x0227, 0x00e4, 0x1ea3, 0x00e5, 0, 0x01ce, 0x0201, 0x0203, 0, 0, 0, 0x1ea1, 0, 0x1e01, 0, 0, 0x0105, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0x1e03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e05, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e07, 0, 0, 0, 0 }, - { 0, 0x0107, 0x0109, 0, 0, 0, 0x010b, 0, 0, 0, 0, 0x010d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00e7, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0x1e0b, 0, 0, 0, 0, 0x010f, 0, 0, 0, 0, 0, 0x1e0d, 0, 0, 0, 0x1e11, 0, 0x1e13, 0, 0, 0x1e0f, 0, 0, 0, 0 }, - { 0x00e8, 0x00e9, 0x00ea, 0x1ebd, 0x0113, 0x0115, 0x0117, 0x00eb, 0x1ebb, 0, 0, 0x011b, 0x0205, 0x0207, 0, 0, 0, 0x1eb9, 0, 0, 0, 0x0229, 0x0119, 0x1e19, 0, 0x1e1b, 0, 0, 0, 0, 0 }, - { 0, 0x01f5, 0x011d, 0, 0x1e21, 0x011f, 0x0121, 0, 0, 0, 0, 0x01e7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0123, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0x0125, 0, 0, 0, 0x1e23, 0x1e27, 0, 0, 0, 0x021f, 0, 0, 0, 0, 0, 0x1e25, 0, 0, 0, 0x1e29, 0, 0, 0x1e2b, 0, 0x1e96, 0, 0, 0, 0 }, - { 0x00ec, 0x00ed, 0x00ee, 0x0129, 0x012b, 0x012d, 0, 0x00ef, 0x1ec9, 0, 0, 0x01d0, 0x0209, 0x020b, 0, 0, 0, 0x1ecb, 0, 0, 0, 0, 0x012f, 0, 0, 0x1e2d, 0, 0, 0, 0, 0 }, - { 0, 0, 0x0135, 0, 0, 0, 0, 0, 0, 0, 0, 0x01f0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0x1e31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01e9, 0, 0, 0, 0, 0, 0x1e33, 0, 0, 0, 0x0137, 0, 0, 0, 0, 0x1e35, 0, 0, 0, 0 }, - { 0, 0x013a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x013e, 0, 0, 0, 0, 0, 0x1e37, 0, 0, 0, 0x013c, 0, 0x1e3d, 0, 0, 0x1e3b, 0, 0, 0, 0 }, - { 0, 0x1e3f, 0, 0, 0, 0, 0x1e41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x01f9, 0x0144, 0, 0x00f1, 0, 0, 0x1e45, 0, 0, 0, 0, 0x0148, 0, 0, 0, 0, 0, 0x1e47, 0, 0, 0, 0x0146, 0, 0x1e4b, 0, 0, 0x1e49, 0, 0, 0, 0 }, - { 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x014d, 0x014f, 0x022f, 0x00f6, 0x1ecf, 0, 0x0151, 0x01d2, 0x020d, 0x020f, 0, 0, 0x01a1, 0x1ecd, 0, 0, 0, 0, 0x01eb, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0x1e55, 0, 0, 0, 0, 0x1e57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0x0155, 0, 0, 0, 0, 0x1e59, 0, 0, 0, 0, 0x0159, 0x0211, 0x0213, 0, 0, 0, 0x1e5b, 0, 0, 0, 0x0157, 0, 0, 0, 0, 0x1e5f, 0, 0, 0, 0 }, - { 0, 0x015b, 0x015d, 0, 0, 0, 0x1e61, 0, 0, 0, 0, 0x0161, 0, 0, 0, 0, 0, 0x1e63, 0, 0, 0x0219, 0x015f, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0x1e6b, 0x1e97, 0, 0, 0, 0x0165, 0, 0, 0, 0, 0, 0x1e6d, 0, 0, 0x021b, 0x0163, 0, 0x1e71, 0, 0, 0x1e6f, 0, 0, 0, 0 }, - { 0x00f9, 0x00fa, 0x00fb, 0x0169, 0x016b, 0x016d, 0, 0x00fc, 0x1ee7, 0x016f, 0x0171, 0x01d4, 0x0215, 0x0217, 0, 0, 0x01b0, 0x1ee5, 0x1e73, 0, 0, 0, 0x0173, 0x1e77, 0, 0x1e75, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x1e7d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e7f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1e81, 0x1e83, 0x0175, 0, 0, 0, 0x1e87, 0x1e85, 0, 0x1e98, 0, 0, 0, 0, 0, 0, 0, 0x1e89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0x1e8b, 0x1e8d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1ef3, 0x00fd, 0x0177, 0x1ef9, 0x0233, 0, 0x1e8f, 0x00ff, 0x1ef7, 0x1e99, 0, 0, 0, 0, 0, 0, 0, 0x1ef5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0x017a, 0x1e91, 0, 0, 0, 0x017c, 0, 0, 0, 0, 0x017e, 0, 0, 0, 0, 0, 0x1e93, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e95, 0, 0, 0, 0 }, - { 0x1fed, 0x0385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fc1, 0, 0, 0 }, - { 0x1ea6, 0x1ea4, 0, 0x1eaa, 0, 0, 0, 0, 0x1ea8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0x01fc, 0, 0, 0x01e2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1ec0, 0x1ebe, 0, 0x1ec4, 0, 0, 0, 0, 0x1ec2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1ed2, 0x1ed0, 0, 0x1ed6, 0, 0, 0, 0, 0x1ed4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0x1e4c, 0, 0, 0x022c, 0, 0, 0x1e4e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x01db, 0x01d7, 0, 0, 0x01d5, 0, 0, 0, 0, 0, 0, 0x01d9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1ea7, 0x1ea5, 0, 0x1eab, 0, 0, 0, 0, 0x1ea9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0x01fd, 0, 0, 0x01e3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1ec1, 0x1ebf, 0, 0x1ec5, 0, 0, 0, 0, 0x1ec3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1ed3, 0x1ed1, 0, 0x1ed7, 0, 0, 0, 0, 0x1ed5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0x1e4d, 0, 0, 0x022d, 0, 0, 0x1e4f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x01dc, 0x01d8, 0, 0, 0x01d6, 0, 0, 0, 0, 0, 0, 0x01da, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1eb0, 0x1eae, 0, 0x1eb4, 0, 0, 0, 0, 0x1eb2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1eb1, 0x1eaf, 0, 0x1eb5, 0, 0, 0, 0, 0x1eb3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1e14, 0x1e16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1e15, 0x1e17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1e50, 0x1e52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1e51, 0x1e53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1edc, 0x1eda, 0, 0x1ee0, 0, 0, 0, 0, 0x1ede, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ee2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1edd, 0x1edb, 0, 0x1ee1, 0, 0, 0, 0, 0x1edf, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ee3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1eea, 0x1ee8, 0, 0x1eee, 0, 0, 0, 0, 0x1eec, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ef0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1eeb, 0x1ee9, 0, 0x1eef, 0, 0, 0, 0, 0x1eed, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ef1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1fba, 0x0386, 0, 0, 0x1fb9, 0x1fb8, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f08, 0x1f09, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fbc, 0, 0 }, - { 0x1fc8, 0x0388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f18, 0x1f19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1fca, 0x0389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f28, 0x1f29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fcc, 0, 0 }, - { 0x1fda, 0x038a, 0, 0, 0x1fd9, 0x1fd8, 0, 0x03aa, 0, 0, 0, 0, 0, 0, 0x1f38, 0x1f39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1ff8, 0x038c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f48, 0x1f49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1fea, 0x038e, 0, 0, 0x1fe9, 0x1fe8, 0, 0x03ab, 0, 0, 0, 0, 0, 0, 0, 0x1f59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1ffa, 0x038f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f68, 0x1f69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ffc, 0, 0 }, - { 0x1f70, 0x03ac, 0, 0, 0x1fb1, 0x1fb0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f00, 0x1f01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fb6, 0x1fb3, 0, 0 }, - { 0x1f72, 0x03ad, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f10, 0x1f11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1f74, 0x03ae, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f20, 0x1f21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fc6, 0x1fc3, 0, 0 }, - { 0x1f76, 0x03af, 0, 0, 0x1fd1, 0x1fd0, 0, 0x03ca, 0, 0, 0, 0, 0, 0, 0x1f30, 0x1f31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fd6, 0, 0, 0 }, - { 0x1f78, 0x03cc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f40, 0x1f41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fe4, 0x1fe5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1f7a, 0x03cd, 0, 0, 0x1fe1, 0x1fe0, 0, 0x03cb, 0, 0, 0, 0, 0, 0, 0x1f50, 0x1f51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fe6, 0, 0, 0 }, - { 0x1f7c, 0x03ce, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f60, 0x1f61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ff6, 0x1ff3, 0, 0 }, - { 0x1fd2, 0x0390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fd7, 0, 0, 0 }, - { 0x1fe2, 0x03b0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fe7, 0, 0, 0 }, - { 0, 0x03d3, 0, 0, 0, 0, 0, 0x03d4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0x04d0, 0, 0x04d2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x0400, 0, 0, 0, 0, 0x04d6, 0, 0x0401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0x04c1, 0, 0x04dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x040d, 0, 0, 0, 0x04e2, 0x0419, 0, 0x04e4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0x04ee, 0x040e, 0, 0x04f0, 0, 0, 0x04f2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0x04d1, 0, 0x04d3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x0450, 0, 0, 0, 0, 0x04d7, 0, 0x0451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0x04c2, 0, 0x04dd, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x045d, 0, 0, 0, 0x04e3, 0x0439, 0, 0x04e5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0x04ef, 0x045e, 0, 0x04f1, 0, 0, 0x04f3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0x1eac, 0, 0, 0x1eb6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0x1ead, 0, 0, 0x1eb7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1f02, 0x1f04, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f06, 0x1f80, 0, 0 }, - { 0x1f03, 0x1f05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f07, 0x1f81, 0, 0 }, - { 0x1f0a, 0x1f0c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f0e, 0x1f88, 0, 0 }, - { 0x1f0b, 0x1f0d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f0f, 0x1f89, 0, 0 }, - { 0x1f12, 0x1f14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1f13, 0x1f15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1f1a, 0x1f1c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1f1b, 0x1f1d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1f22, 0x1f24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f26, 0x1f90, 0, 0 }, - { 0x1f23, 0x1f25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f27, 0x1f91, 0, 0 }, - { 0x1f2a, 0x1f2c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f2e, 0x1f98, 0, 0 }, - { 0x1f2b, 0x1f2d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f2f, 0x1f99, 0, 0 }, - { 0x1f32, 0x1f34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f36, 0, 0, 0 }, - { 0x1f33, 0x1f35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f37, 0, 0, 0 }, - { 0x1f3a, 0x1f3c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f3e, 0, 0, 0 }, - { 0x1f3b, 0x1f3d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f3f, 0, 0, 0 }, - { 0x1f42, 0x1f44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1f43, 0x1f45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1f4a, 0x1f4c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1f4b, 0x1f4d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0x1f52, 0x1f54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f56, 0, 0, 0 }, - { 0x1f53, 0x1f55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f57, 0, 0, 0 }, - { 0x1f5b, 0x1f5d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f5f, 0, 0, 0 }, - { 0x1f62, 0x1f64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f66, 0x1fa0, 0, 0 }, - { 0x1f63, 0x1f65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f67, 0x1fa1, 0, 0 }, - { 0x1f6a, 0x1f6c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f6e, 0x1fa8, 0, 0 }, - { 0x1f6b, 0x1f6d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f6f, 0x1fa9, 0, 0 }, - { 0x1fcd, 0x1fce, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fcf, 0, 0, 0 }, - { 0x1fdd, 0x1fde, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fdf, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3070, 0x3071 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3073, 0x3074 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3076, 0x3077 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3079, 0x307a }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x307c, 0x307d }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30d0, 0x30d1 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30d3, 0x30d4 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30d6, 0x30d7 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30d9, 0x30da }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30dc, 0x30dd } -}; diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeDecompTables.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeDecompTables.h deleted file mode 100644 index 4bc34b18d99..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeDecompTables.h +++ /dev/null @@ -1,8526 +0,0 @@ -// Generated by gen-unicode-tables.py - -typedef struct { - Unicode character; - int length; - int offset; -} decomposition; - -#define DECOMP_TABLE_LENGTH 5143 - -static const decomposition decomp_table[] = { - { 0xa0, 1, 0 }, - { 0xa8, 2, 1 }, - { 0xaa, 1, 3 }, - { 0xaf, 2, 4 }, - { 0xb2, 1, 6 }, - { 0xb3, 1, 7 }, - { 0xb4, 2, 8 }, - { 0xb5, 1, 10 }, - { 0xb8, 2, 11 }, - { 0xb9, 1, 13 }, - { 0xba, 1, 14 }, - { 0xbc, 3, 15 }, - { 0xbd, 3, 18 }, - { 0xbe, 3, 21 }, - { 0xc0, 2, 24 }, - { 0xc1, 2, 26 }, - { 0xc2, 2, 28 }, - { 0xc3, 2, 30 }, - { 0xc4, 2, 32 }, - { 0xc5, 2, 34 }, - { 0xc7, 2, 36 }, - { 0xc8, 2, 38 }, - { 0xc9, 2, 40 }, - { 0xca, 2, 42 }, - { 0xcb, 2, 44 }, - { 0xcc, 2, 46 }, - { 0xcd, 2, 48 }, - { 0xce, 2, 50 }, - { 0xcf, 2, 52 }, - { 0xd1, 2, 54 }, - { 0xd2, 2, 56 }, - { 0xd3, 2, 58 }, - { 0xd4, 2, 60 }, - { 0xd5, 2, 62 }, - { 0xd6, 2, 64 }, - { 0xd9, 2, 66 }, - { 0xda, 2, 68 }, - { 0xdb, 2, 70 }, - { 0xdc, 2, 72 }, - { 0xdd, 2, 74 }, - { 0xe0, 2, 76 }, - { 0xe1, 2, 78 }, - { 0xe2, 2, 80 }, - { 0xe3, 2, 82 }, - { 0xe4, 2, 84 }, - { 0xe5, 2, 86 }, - { 0xe7, 2, 88 }, - { 0xe8, 2, 90 }, - { 0xe9, 2, 92 }, - { 0xea, 2, 94 }, - { 0xeb, 2, 96 }, - { 0xec, 2, 98 }, - { 0xed, 2, 100 }, - { 0xee, 2, 102 }, - { 0xef, 2, 104 }, - { 0xf1, 2, 106 }, - { 0xf2, 2, 108 }, - { 0xf3, 2, 110 }, - { 0xf4, 2, 112 }, - { 0xf5, 2, 114 }, - { 0xf6, 2, 116 }, - { 0xf9, 2, 118 }, - { 0xfa, 2, 120 }, - { 0xfb, 2, 122 }, - { 0xfc, 2, 124 }, - { 0xfd, 2, 126 }, - { 0xff, 2, 128 }, - { 0x100, 2, 130 }, - { 0x101, 2, 132 }, - { 0x102, 2, 134 }, - { 0x103, 2, 136 }, - { 0x104, 2, 138 }, - { 0x105, 2, 140 }, - { 0x106, 2, 142 }, - { 0x107, 2, 144 }, - { 0x108, 2, 146 }, - { 0x109, 2, 148 }, - { 0x10a, 2, 150 }, - { 0x10b, 2, 152 }, - { 0x10c, 2, 154 }, - { 0x10d, 2, 156 }, - { 0x10e, 2, 158 }, - { 0x10f, 2, 160 }, - { 0x112, 2, 162 }, - { 0x113, 2, 164 }, - { 0x114, 2, 166 }, - { 0x115, 2, 168 }, - { 0x116, 2, 170 }, - { 0x117, 2, 172 }, - { 0x118, 2, 174 }, - { 0x119, 2, 176 }, - { 0x11a, 2, 178 }, - { 0x11b, 2, 180 }, - { 0x11c, 2, 182 }, - { 0x11d, 2, 184 }, - { 0x11e, 2, 186 }, - { 0x11f, 2, 188 }, - { 0x120, 2, 190 }, - { 0x121, 2, 192 }, - { 0x122, 2, 194 }, - { 0x123, 2, 196 }, - { 0x124, 2, 198 }, - { 0x125, 2, 200 }, - { 0x128, 2, 202 }, - { 0x129, 2, 204 }, - { 0x12a, 2, 206 }, - { 0x12b, 2, 208 }, - { 0x12c, 2, 210 }, - { 0x12d, 2, 212 }, - { 0x12e, 2, 214 }, - { 0x12f, 2, 216 }, - { 0x130, 2, 218 }, - { 0x132, 2, 220 }, - { 0x133, 2, 222 }, - { 0x134, 2, 224 }, - { 0x135, 2, 226 }, - { 0x136, 2, 228 }, - { 0x137, 2, 230 }, - { 0x139, 2, 232 }, - { 0x13a, 2, 234 }, - { 0x13b, 2, 236 }, - { 0x13c, 2, 238 }, - { 0x13d, 2, 240 }, - { 0x13e, 2, 242 }, - { 0x13f, 2, 244 }, - { 0x140, 2, 246 }, - { 0x143, 2, 248 }, - { 0x144, 2, 250 }, - { 0x145, 2, 252 }, - { 0x146, 2, 254 }, - { 0x147, 2, 256 }, - { 0x148, 2, 258 }, - { 0x149, 2, 260 }, - { 0x14c, 2, 262 }, - { 0x14d, 2, 264 }, - { 0x14e, 2, 266 }, - { 0x14f, 2, 268 }, - { 0x150, 2, 270 }, - { 0x151, 2, 272 }, - { 0x154, 2, 274 }, - { 0x155, 2, 276 }, - { 0x156, 2, 278 }, - { 0x157, 2, 280 }, - { 0x158, 2, 282 }, - { 0x159, 2, 284 }, - { 0x15a, 2, 286 }, - { 0x15b, 2, 288 }, - { 0x15c, 2, 290 }, - { 0x15d, 2, 292 }, - { 0x15e, 2, 294 }, - { 0x15f, 2, 296 }, - { 0x160, 2, 298 }, - { 0x161, 2, 300 }, - { 0x162, 2, 302 }, - { 0x163, 2, 304 }, - { 0x164, 2, 306 }, - { 0x165, 2, 308 }, - { 0x168, 2, 310 }, - { 0x169, 2, 312 }, - { 0x16a, 2, 314 }, - { 0x16b, 2, 316 }, - { 0x16c, 2, 318 }, - { 0x16d, 2, 320 }, - { 0x16e, 2, 322 }, - { 0x16f, 2, 324 }, - { 0x170, 2, 326 }, - { 0x171, 2, 328 }, - { 0x172, 2, 330 }, - { 0x173, 2, 332 }, - { 0x174, 2, 334 }, - { 0x175, 2, 336 }, - { 0x176, 2, 338 }, - { 0x177, 2, 340 }, - { 0x178, 2, 342 }, - { 0x179, 2, 344 }, - { 0x17a, 2, 346 }, - { 0x17b, 2, 348 }, - { 0x17c, 2, 350 }, - { 0x17d, 2, 352 }, - { 0x17e, 2, 354 }, - { 0x17f, 1, 356 }, - { 0x1a0, 2, 357 }, - { 0x1a1, 2, 359 }, - { 0x1af, 2, 361 }, - { 0x1b0, 2, 363 }, - { 0x1c4, 3, 365 }, - { 0x1c5, 3, 368 }, - { 0x1c6, 3, 371 }, - { 0x1c7, 2, 374 }, - { 0x1c8, 2, 376 }, - { 0x1c9, 2, 378 }, - { 0x1ca, 2, 380 }, - { 0x1cb, 2, 382 }, - { 0x1cc, 2, 384 }, - { 0x1cd, 2, 386 }, - { 0x1ce, 2, 388 }, - { 0x1cf, 2, 390 }, - { 0x1d0, 2, 392 }, - { 0x1d1, 2, 394 }, - { 0x1d2, 2, 396 }, - { 0x1d3, 2, 398 }, - { 0x1d4, 2, 400 }, - { 0x1d5, 3, 402 }, - { 0x1d6, 3, 405 }, - { 0x1d7, 3, 408 }, - { 0x1d8, 3, 411 }, - { 0x1d9, 3, 414 }, - { 0x1da, 3, 417 }, - { 0x1db, 3, 420 }, - { 0x1dc, 3, 423 }, - { 0x1de, 3, 426 }, - { 0x1df, 3, 429 }, - { 0x1e0, 3, 432 }, - { 0x1e1, 3, 435 }, - { 0x1e2, 2, 438 }, - { 0x1e3, 2, 440 }, - { 0x1e6, 2, 442 }, - { 0x1e7, 2, 444 }, - { 0x1e8, 2, 446 }, - { 0x1e9, 2, 448 }, - { 0x1ea, 2, 450 }, - { 0x1eb, 2, 452 }, - { 0x1ec, 3, 454 }, - { 0x1ed, 3, 457 }, - { 0x1ee, 2, 460 }, - { 0x1ef, 2, 462 }, - { 0x1f0, 2, 464 }, - { 0x1f1, 2, 466 }, - { 0x1f2, 2, 468 }, - { 0x1f3, 2, 470 }, - { 0x1f4, 2, 472 }, - { 0x1f5, 2, 474 }, - { 0x1f8, 2, 476 }, - { 0x1f9, 2, 478 }, - { 0x1fa, 3, 480 }, - { 0x1fb, 3, 483 }, - { 0x1fc, 2, 486 }, - { 0x1fd, 2, 488 }, - { 0x1fe, 2, 490 }, - { 0x1ff, 2, 492 }, - { 0x200, 2, 494 }, - { 0x201, 2, 496 }, - { 0x202, 2, 498 }, - { 0x203, 2, 500 }, - { 0x204, 2, 502 }, - { 0x205, 2, 504 }, - { 0x206, 2, 506 }, - { 0x207, 2, 508 }, - { 0x208, 2, 510 }, - { 0x209, 2, 512 }, - { 0x20a, 2, 514 }, - { 0x20b, 2, 516 }, - { 0x20c, 2, 518 }, - { 0x20d, 2, 520 }, - { 0x20e, 2, 522 }, - { 0x20f, 2, 524 }, - { 0x210, 2, 526 }, - { 0x211, 2, 528 }, - { 0x212, 2, 530 }, - { 0x213, 2, 532 }, - { 0x214, 2, 534 }, - { 0x215, 2, 536 }, - { 0x216, 2, 538 }, - { 0x217, 2, 540 }, - { 0x218, 2, 542 }, - { 0x219, 2, 544 }, - { 0x21a, 2, 546 }, - { 0x21b, 2, 548 }, - { 0x21e, 2, 550 }, - { 0x21f, 2, 552 }, - { 0x226, 2, 554 }, - { 0x227, 2, 556 }, - { 0x228, 2, 558 }, - { 0x229, 2, 560 }, - { 0x22a, 3, 562 }, - { 0x22b, 3, 565 }, - { 0x22c, 3, 568 }, - { 0x22d, 3, 571 }, - { 0x22e, 2, 574 }, - { 0x22f, 2, 576 }, - { 0x230, 3, 578 }, - { 0x231, 3, 581 }, - { 0x232, 2, 584 }, - { 0x233, 2, 586 }, - { 0x2b0, 1, 588 }, - { 0x2b1, 1, 589 }, - { 0x2b2, 1, 590 }, - { 0x2b3, 1, 591 }, - { 0x2b4, 1, 592 }, - { 0x2b5, 1, 593 }, - { 0x2b6, 1, 594 }, - { 0x2b7, 1, 595 }, - { 0x2b8, 1, 596 }, - { 0x2d8, 2, 597 }, - { 0x2d9, 2, 599 }, - { 0x2da, 2, 601 }, - { 0x2db, 2, 603 }, - { 0x2dc, 2, 605 }, - { 0x2dd, 2, 607 }, - { 0x2e0, 1, 609 }, - { 0x2e1, 1, 610 }, - { 0x2e2, 1, 356 }, - { 0x2e3, 1, 611 }, - { 0x2e4, 1, 612 }, - { 0x340, 1, 613 }, - { 0x341, 1, 614 }, - { 0x343, 1, 615 }, - { 0x344, 2, 616 }, - { 0x374, 1, 618 }, - { 0x37a, 2, 619 }, - { 0x37e, 1, 621 }, - { 0x384, 2, 8 }, - { 0x385, 3, 622 }, - { 0x386, 2, 625 }, - { 0x387, 1, 627 }, - { 0x388, 2, 628 }, - { 0x389, 2, 630 }, - { 0x38a, 2, 632 }, - { 0x38c, 2, 634 }, - { 0x38e, 2, 636 }, - { 0x38f, 2, 638 }, - { 0x390, 3, 640 }, - { 0x3aa, 2, 643 }, - { 0x3ab, 2, 645 }, - { 0x3ac, 2, 647 }, - { 0x3ad, 2, 649 }, - { 0x3ae, 2, 651 }, - { 0x3af, 2, 653 }, - { 0x3b0, 3, 655 }, - { 0x3ca, 2, 658 }, - { 0x3cb, 2, 660 }, - { 0x3cc, 2, 662 }, - { 0x3cd, 2, 664 }, - { 0x3ce, 2, 666 }, - { 0x3d0, 1, 668 }, - { 0x3d1, 1, 669 }, - { 0x3d2, 1, 670 }, - { 0x3d3, 2, 636 }, - { 0x3d4, 2, 645 }, - { 0x3d5, 1, 671 }, - { 0x3d6, 1, 672 }, - { 0x3f0, 1, 673 }, - { 0x3f1, 1, 674 }, - { 0x3f2, 1, 675 }, - { 0x3f4, 1, 676 }, - { 0x3f5, 1, 677 }, - { 0x400, 2, 678 }, - { 0x401, 2, 680 }, - { 0x403, 2, 682 }, - { 0x407, 2, 684 }, - { 0x40c, 2, 686 }, - { 0x40d, 2, 688 }, - { 0x40e, 2, 690 }, - { 0x419, 2, 692 }, - { 0x439, 2, 694 }, - { 0x450, 2, 696 }, - { 0x451, 2, 698 }, - { 0x453, 2, 700 }, - { 0x457, 2, 702 }, - { 0x45c, 2, 704 }, - { 0x45d, 2, 706 }, - { 0x45e, 2, 708 }, - { 0x476, 2, 710 }, - { 0x477, 2, 712 }, - { 0x4c1, 2, 714 }, - { 0x4c2, 2, 716 }, - { 0x4d0, 2, 718 }, - { 0x4d1, 2, 720 }, - { 0x4d2, 2, 722 }, - { 0x4d3, 2, 724 }, - { 0x4d6, 2, 726 }, - { 0x4d7, 2, 728 }, - { 0x4da, 2, 730 }, - { 0x4db, 2, 732 }, - { 0x4dc, 2, 734 }, - { 0x4dd, 2, 736 }, - { 0x4de, 2, 738 }, - { 0x4df, 2, 740 }, - { 0x4e2, 2, 742 }, - { 0x4e3, 2, 744 }, - { 0x4e4, 2, 746 }, - { 0x4e5, 2, 748 }, - { 0x4e6, 2, 750 }, - { 0x4e7, 2, 752 }, - { 0x4ea, 2, 754 }, - { 0x4eb, 2, 756 }, - { 0x4ec, 2, 758 }, - { 0x4ed, 2, 760 }, - { 0x4ee, 2, 762 }, - { 0x4ef, 2, 764 }, - { 0x4f0, 2, 766 }, - { 0x4f1, 2, 768 }, - { 0x4f2, 2, 770 }, - { 0x4f3, 2, 772 }, - { 0x4f4, 2, 774 }, - { 0x4f5, 2, 776 }, - { 0x4f8, 2, 778 }, - { 0x4f9, 2, 780 }, - { 0x587, 2, 782 }, - { 0x622, 2, 784 }, - { 0x623, 2, 786 }, - { 0x624, 2, 788 }, - { 0x625, 2, 790 }, - { 0x626, 2, 792 }, - { 0x675, 2, 794 }, - { 0x676, 2, 796 }, - { 0x677, 2, 798 }, - { 0x678, 2, 800 }, - { 0x6c0, 2, 802 }, - { 0x6c2, 2, 804 }, - { 0x6d3, 2, 806 }, - { 0x929, 2, 808 }, - { 0x931, 2, 810 }, - { 0x934, 2, 812 }, - { 0x958, 2, 814 }, - { 0x959, 2, 816 }, - { 0x95a, 2, 818 }, - { 0x95b, 2, 820 }, - { 0x95c, 2, 822 }, - { 0x95d, 2, 824 }, - { 0x95e, 2, 826 }, - { 0x95f, 2, 828 }, - { 0x9cb, 2, 830 }, - { 0x9cc, 2, 832 }, - { 0x9dc, 2, 834 }, - { 0x9dd, 2, 836 }, - { 0x9df, 2, 838 }, - { 0xa33, 2, 840 }, - { 0xa36, 2, 842 }, - { 0xa59, 2, 844 }, - { 0xa5a, 2, 846 }, - { 0xa5b, 2, 848 }, - { 0xa5e, 2, 850 }, - { 0xb48, 2, 852 }, - { 0xb4b, 2, 854 }, - { 0xb4c, 2, 856 }, - { 0xb5c, 2, 858 }, - { 0xb5d, 2, 860 }, - { 0xb94, 2, 862 }, - { 0xbca, 2, 864 }, - { 0xbcb, 2, 866 }, - { 0xbcc, 2, 868 }, - { 0xc48, 2, 870 }, - { 0xcc0, 2, 872 }, - { 0xcc7, 2, 874 }, - { 0xcc8, 2, 876 }, - { 0xcca, 2, 878 }, - { 0xccb, 3, 880 }, - { 0xd4a, 2, 883 }, - { 0xd4b, 2, 885 }, - { 0xd4c, 2, 887 }, - { 0xdda, 2, 889 }, - { 0xddc, 2, 891 }, - { 0xddd, 3, 893 }, - { 0xdde, 2, 896 }, - { 0xe33, 2, 898 }, - { 0xeb3, 2, 900 }, - { 0xedc, 2, 902 }, - { 0xedd, 2, 904 }, - { 0xf0c, 1, 906 }, - { 0xf43, 2, 907 }, - { 0xf4d, 2, 909 }, - { 0xf52, 2, 911 }, - { 0xf57, 2, 913 }, - { 0xf5c, 2, 915 }, - { 0xf69, 2, 917 }, - { 0xf73, 2, 919 }, - { 0xf75, 2, 921 }, - { 0xf76, 2, 923 }, - { 0xf77, 3, 925 }, - { 0xf78, 2, 928 }, - { 0xf79, 3, 930 }, - { 0xf81, 2, 933 }, - { 0xf93, 2, 935 }, - { 0xf9d, 2, 937 }, - { 0xfa2, 2, 939 }, - { 0xfa7, 2, 941 }, - { 0xfac, 2, 943 }, - { 0xfb9, 2, 945 }, - { 0x1026, 2, 947 }, - { 0x1e00, 2, 949 }, - { 0x1e01, 2, 951 }, - { 0x1e02, 2, 953 }, - { 0x1e03, 2, 955 }, - { 0x1e04, 2, 957 }, - { 0x1e05, 2, 959 }, - { 0x1e06, 2, 961 }, - { 0x1e07, 2, 963 }, - { 0x1e08, 3, 965 }, - { 0x1e09, 3, 968 }, - { 0x1e0a, 2, 971 }, - { 0x1e0b, 2, 973 }, - { 0x1e0c, 2, 975 }, - { 0x1e0d, 2, 977 }, - { 0x1e0e, 2, 979 }, - { 0x1e0f, 2, 981 }, - { 0x1e10, 2, 983 }, - { 0x1e11, 2, 985 }, - { 0x1e12, 2, 987 }, - { 0x1e13, 2, 989 }, - { 0x1e14, 3, 991 }, - { 0x1e15, 3, 994 }, - { 0x1e16, 3, 997 }, - { 0x1e17, 3, 1000 }, - { 0x1e18, 2, 1003 }, - { 0x1e19, 2, 1005 }, - { 0x1e1a, 2, 1007 }, - { 0x1e1b, 2, 1009 }, - { 0x1e1c, 3, 1011 }, - { 0x1e1d, 3, 1014 }, - { 0x1e1e, 2, 1017 }, - { 0x1e1f, 2, 1019 }, - { 0x1e20, 2, 1021 }, - { 0x1e21, 2, 1023 }, - { 0x1e22, 2, 1025 }, - { 0x1e23, 2, 1027 }, - { 0x1e24, 2, 1029 }, - { 0x1e25, 2, 1031 }, - { 0x1e26, 2, 1033 }, - { 0x1e27, 2, 1035 }, - { 0x1e28, 2, 1037 }, - { 0x1e29, 2, 1039 }, - { 0x1e2a, 2, 1041 }, - { 0x1e2b, 2, 1043 }, - { 0x1e2c, 2, 1045 }, - { 0x1e2d, 2, 1047 }, - { 0x1e2e, 3, 1049 }, - { 0x1e2f, 3, 1052 }, - { 0x1e30, 2, 1055 }, - { 0x1e31, 2, 1057 }, - { 0x1e32, 2, 1059 }, - { 0x1e33, 2, 1061 }, - { 0x1e34, 2, 1063 }, - { 0x1e35, 2, 1065 }, - { 0x1e36, 2, 1067 }, - { 0x1e37, 2, 1069 }, - { 0x1e38, 3, 1071 }, - { 0x1e39, 3, 1074 }, - { 0x1e3a, 2, 1077 }, - { 0x1e3b, 2, 1079 }, - { 0x1e3c, 2, 1081 }, - { 0x1e3d, 2, 1083 }, - { 0x1e3e, 2, 1085 }, - { 0x1e3f, 2, 1087 }, - { 0x1e40, 2, 1089 }, - { 0x1e41, 2, 1091 }, - { 0x1e42, 2, 1093 }, - { 0x1e43, 2, 1095 }, - { 0x1e44, 2, 1097 }, - { 0x1e45, 2, 1099 }, - { 0x1e46, 2, 1101 }, - { 0x1e47, 2, 1103 }, - { 0x1e48, 2, 1105 }, - { 0x1e49, 2, 1107 }, - { 0x1e4a, 2, 1109 }, - { 0x1e4b, 2, 1111 }, - { 0x1e4c, 3, 1113 }, - { 0x1e4d, 3, 1116 }, - { 0x1e4e, 3, 1119 }, - { 0x1e4f, 3, 1122 }, - { 0x1e50, 3, 1125 }, - { 0x1e51, 3, 1128 }, - { 0x1e52, 3, 1131 }, - { 0x1e53, 3, 1134 }, - { 0x1e54, 2, 1137 }, - { 0x1e55, 2, 1139 }, - { 0x1e56, 2, 1141 }, - { 0x1e57, 2, 1143 }, - { 0x1e58, 2, 1145 }, - { 0x1e59, 2, 1147 }, - { 0x1e5a, 2, 1149 }, - { 0x1e5b, 2, 1151 }, - { 0x1e5c, 3, 1153 }, - { 0x1e5d, 3, 1156 }, - { 0x1e5e, 2, 1159 }, - { 0x1e5f, 2, 1161 }, - { 0x1e60, 2, 1163 }, - { 0x1e61, 2, 1165 }, - { 0x1e62, 2, 1167 }, - { 0x1e63, 2, 1169 }, - { 0x1e64, 3, 1171 }, - { 0x1e65, 3, 1174 }, - { 0x1e66, 3, 1177 }, - { 0x1e67, 3, 1180 }, - { 0x1e68, 3, 1183 }, - { 0x1e69, 3, 1186 }, - { 0x1e6a, 2, 1189 }, - { 0x1e6b, 2, 1191 }, - { 0x1e6c, 2, 1193 }, - { 0x1e6d, 2, 1195 }, - { 0x1e6e, 2, 1197 }, - { 0x1e6f, 2, 1199 }, - { 0x1e70, 2, 1201 }, - { 0x1e71, 2, 1203 }, - { 0x1e72, 2, 1205 }, - { 0x1e73, 2, 1207 }, - { 0x1e74, 2, 1209 }, - { 0x1e75, 2, 1211 }, - { 0x1e76, 2, 1213 }, - { 0x1e77, 2, 1215 }, - { 0x1e78, 3, 1217 }, - { 0x1e79, 3, 1220 }, - { 0x1e7a, 3, 1223 }, - { 0x1e7b, 3, 1226 }, - { 0x1e7c, 2, 1229 }, - { 0x1e7d, 2, 1231 }, - { 0x1e7e, 2, 1233 }, - { 0x1e7f, 2, 1235 }, - { 0x1e80, 2, 1237 }, - { 0x1e81, 2, 1239 }, - { 0x1e82, 2, 1241 }, - { 0x1e83, 2, 1243 }, - { 0x1e84, 2, 1245 }, - { 0x1e85, 2, 1247 }, - { 0x1e86, 2, 1249 }, - { 0x1e87, 2, 1251 }, - { 0x1e88, 2, 1253 }, - { 0x1e89, 2, 1255 }, - { 0x1e8a, 2, 1257 }, - { 0x1e8b, 2, 1259 }, - { 0x1e8c, 2, 1261 }, - { 0x1e8d, 2, 1263 }, - { 0x1e8e, 2, 1265 }, - { 0x1e8f, 2, 1267 }, - { 0x1e90, 2, 1269 }, - { 0x1e91, 2, 1271 }, - { 0x1e92, 2, 1273 }, - { 0x1e93, 2, 1275 }, - { 0x1e94, 2, 1277 }, - { 0x1e95, 2, 1279 }, - { 0x1e96, 2, 1281 }, - { 0x1e97, 2, 1283 }, - { 0x1e98, 2, 1285 }, - { 0x1e99, 2, 1287 }, - { 0x1e9a, 2, 1289 }, - { 0x1e9b, 2, 1165 }, - { 0x1ea0, 2, 1291 }, - { 0x1ea1, 2, 1293 }, - { 0x1ea2, 2, 1295 }, - { 0x1ea3, 2, 1297 }, - { 0x1ea4, 3, 1299 }, - { 0x1ea5, 3, 1302 }, - { 0x1ea6, 3, 1305 }, - { 0x1ea7, 3, 1308 }, - { 0x1ea8, 3, 1311 }, - { 0x1ea9, 3, 1314 }, - { 0x1eaa, 3, 1317 }, - { 0x1eab, 3, 1320 }, - { 0x1eac, 3, 1323 }, - { 0x1ead, 3, 1326 }, - { 0x1eae, 3, 1329 }, - { 0x1eaf, 3, 1332 }, - { 0x1eb0, 3, 1335 }, - { 0x1eb1, 3, 1338 }, - { 0x1eb2, 3, 1341 }, - { 0x1eb3, 3, 1344 }, - { 0x1eb4, 3, 1347 }, - { 0x1eb5, 3, 1350 }, - { 0x1eb6, 3, 1353 }, - { 0x1eb7, 3, 1356 }, - { 0x1eb8, 2, 1359 }, - { 0x1eb9, 2, 1361 }, - { 0x1eba, 2, 1363 }, - { 0x1ebb, 2, 1365 }, - { 0x1ebc, 2, 1367 }, - { 0x1ebd, 2, 1369 }, - { 0x1ebe, 3, 1371 }, - { 0x1ebf, 3, 1374 }, - { 0x1ec0, 3, 1377 }, - { 0x1ec1, 3, 1380 }, - { 0x1ec2, 3, 1383 }, - { 0x1ec3, 3, 1386 }, - { 0x1ec4, 3, 1389 }, - { 0x1ec5, 3, 1392 }, - { 0x1ec6, 3, 1395 }, - { 0x1ec7, 3, 1398 }, - { 0x1ec8, 2, 1401 }, - { 0x1ec9, 2, 1403 }, - { 0x1eca, 2, 1405 }, - { 0x1ecb, 2, 1407 }, - { 0x1ecc, 2, 1409 }, - { 0x1ecd, 2, 1411 }, - { 0x1ece, 2, 1413 }, - { 0x1ecf, 2, 1415 }, - { 0x1ed0, 3, 1417 }, - { 0x1ed1, 3, 1420 }, - { 0x1ed2, 3, 1423 }, - { 0x1ed3, 3, 1426 }, - { 0x1ed4, 3, 1429 }, - { 0x1ed5, 3, 1432 }, - { 0x1ed6, 3, 1435 }, - { 0x1ed7, 3, 1438 }, - { 0x1ed8, 3, 1441 }, - { 0x1ed9, 3, 1444 }, - { 0x1eda, 3, 1447 }, - { 0x1edb, 3, 1450 }, - { 0x1edc, 3, 1453 }, - { 0x1edd, 3, 1456 }, - { 0x1ede, 3, 1459 }, - { 0x1edf, 3, 1462 }, - { 0x1ee0, 3, 1465 }, - { 0x1ee1, 3, 1468 }, - { 0x1ee2, 3, 1471 }, - { 0x1ee3, 3, 1474 }, - { 0x1ee4, 2, 1477 }, - { 0x1ee5, 2, 1479 }, - { 0x1ee6, 2, 1481 }, - { 0x1ee7, 2, 1483 }, - { 0x1ee8, 3, 1485 }, - { 0x1ee9, 3, 1488 }, - { 0x1eea, 3, 1491 }, - { 0x1eeb, 3, 1494 }, - { 0x1eec, 3, 1497 }, - { 0x1eed, 3, 1500 }, - { 0x1eee, 3, 1503 }, - { 0x1eef, 3, 1506 }, - { 0x1ef0, 3, 1509 }, - { 0x1ef1, 3, 1512 }, - { 0x1ef2, 2, 1515 }, - { 0x1ef3, 2, 1517 }, - { 0x1ef4, 2, 1519 }, - { 0x1ef5, 2, 1521 }, - { 0x1ef6, 2, 1523 }, - { 0x1ef7, 2, 1525 }, - { 0x1ef8, 2, 1527 }, - { 0x1ef9, 2, 1529 }, - { 0x1f00, 2, 1531 }, - { 0x1f01, 2, 1533 }, - { 0x1f02, 3, 1535 }, - { 0x1f03, 3, 1538 }, - { 0x1f04, 3, 1541 }, - { 0x1f05, 3, 1544 }, - { 0x1f06, 3, 1547 }, - { 0x1f07, 3, 1550 }, - { 0x1f08, 2, 1553 }, - { 0x1f09, 2, 1555 }, - { 0x1f0a, 3, 1557 }, - { 0x1f0b, 3, 1560 }, - { 0x1f0c, 3, 1563 }, - { 0x1f0d, 3, 1566 }, - { 0x1f0e, 3, 1569 }, - { 0x1f0f, 3, 1572 }, - { 0x1f10, 2, 1575 }, - { 0x1f11, 2, 1577 }, - { 0x1f12, 3, 1579 }, - { 0x1f13, 3, 1582 }, - { 0x1f14, 3, 1585 }, - { 0x1f15, 3, 1588 }, - { 0x1f18, 2, 1591 }, - { 0x1f19, 2, 1593 }, - { 0x1f1a, 3, 1595 }, - { 0x1f1b, 3, 1598 }, - { 0x1f1c, 3, 1601 }, - { 0x1f1d, 3, 1604 }, - { 0x1f20, 2, 1607 }, - { 0x1f21, 2, 1609 }, - { 0x1f22, 3, 1611 }, - { 0x1f23, 3, 1614 }, - { 0x1f24, 3, 1617 }, - { 0x1f25, 3, 1620 }, - { 0x1f26, 3, 1623 }, - { 0x1f27, 3, 1626 }, - { 0x1f28, 2, 1629 }, - { 0x1f29, 2, 1631 }, - { 0x1f2a, 3, 1633 }, - { 0x1f2b, 3, 1636 }, - { 0x1f2c, 3, 1639 }, - { 0x1f2d, 3, 1642 }, - { 0x1f2e, 3, 1645 }, - { 0x1f2f, 3, 1648 }, - { 0x1f30, 2, 1651 }, - { 0x1f31, 2, 1653 }, - { 0x1f32, 3, 1655 }, - { 0x1f33, 3, 1658 }, - { 0x1f34, 3, 1661 }, - { 0x1f35, 3, 1664 }, - { 0x1f36, 3, 1667 }, - { 0x1f37, 3, 1670 }, - { 0x1f38, 2, 1673 }, - { 0x1f39, 2, 1675 }, - { 0x1f3a, 3, 1677 }, - { 0x1f3b, 3, 1680 }, - { 0x1f3c, 3, 1683 }, - { 0x1f3d, 3, 1686 }, - { 0x1f3e, 3, 1689 }, - { 0x1f3f, 3, 1692 }, - { 0x1f40, 2, 1695 }, - { 0x1f41, 2, 1697 }, - { 0x1f42, 3, 1699 }, - { 0x1f43, 3, 1702 }, - { 0x1f44, 3, 1705 }, - { 0x1f45, 3, 1708 }, - { 0x1f48, 2, 1711 }, - { 0x1f49, 2, 1713 }, - { 0x1f4a, 3, 1715 }, - { 0x1f4b, 3, 1718 }, - { 0x1f4c, 3, 1721 }, - { 0x1f4d, 3, 1724 }, - { 0x1f50, 2, 1727 }, - { 0x1f51, 2, 1729 }, - { 0x1f52, 3, 1731 }, - { 0x1f53, 3, 1734 }, - { 0x1f54, 3, 1737 }, - { 0x1f55, 3, 1740 }, - { 0x1f56, 3, 1743 }, - { 0x1f57, 3, 1746 }, - { 0x1f59, 2, 1749 }, - { 0x1f5b, 3, 1751 }, - { 0x1f5d, 3, 1754 }, - { 0x1f5f, 3, 1757 }, - { 0x1f60, 2, 1760 }, - { 0x1f61, 2, 1762 }, - { 0x1f62, 3, 1764 }, - { 0x1f63, 3, 1767 }, - { 0x1f64, 3, 1770 }, - { 0x1f65, 3, 1773 }, - { 0x1f66, 3, 1776 }, - { 0x1f67, 3, 1779 }, - { 0x1f68, 2, 1782 }, - { 0x1f69, 2, 1784 }, - { 0x1f6a, 3, 1786 }, - { 0x1f6b, 3, 1789 }, - { 0x1f6c, 3, 1792 }, - { 0x1f6d, 3, 1795 }, - { 0x1f6e, 3, 1798 }, - { 0x1f6f, 3, 1801 }, - { 0x1f70, 2, 1804 }, - { 0x1f71, 2, 647 }, - { 0x1f72, 2, 1806 }, - { 0x1f73, 2, 649 }, - { 0x1f74, 2, 1808 }, - { 0x1f75, 2, 651 }, - { 0x1f76, 2, 1810 }, - { 0x1f77, 2, 653 }, - { 0x1f78, 2, 1812 }, - { 0x1f79, 2, 662 }, - { 0x1f7a, 2, 1814 }, - { 0x1f7b, 2, 664 }, - { 0x1f7c, 2, 1816 }, - { 0x1f7d, 2, 666 }, - { 0x1f80, 3, 1818 }, - { 0x1f81, 3, 1821 }, - { 0x1f82, 4, 1824 }, - { 0x1f83, 4, 1828 }, - { 0x1f84, 4, 1832 }, - { 0x1f85, 4, 1836 }, - { 0x1f86, 4, 1840 }, - { 0x1f87, 4, 1844 }, - { 0x1f88, 3, 1848 }, - { 0x1f89, 3, 1851 }, - { 0x1f8a, 4, 1854 }, - { 0x1f8b, 4, 1858 }, - { 0x1f8c, 4, 1862 }, - { 0x1f8d, 4, 1866 }, - { 0x1f8e, 4, 1870 }, - { 0x1f8f, 4, 1874 }, - { 0x1f90, 3, 1878 }, - { 0x1f91, 3, 1881 }, - { 0x1f92, 4, 1884 }, - { 0x1f93, 4, 1888 }, - { 0x1f94, 4, 1892 }, - { 0x1f95, 4, 1896 }, - { 0x1f96, 4, 1900 }, - { 0x1f97, 4, 1904 }, - { 0x1f98, 3, 1908 }, - { 0x1f99, 3, 1911 }, - { 0x1f9a, 4, 1914 }, - { 0x1f9b, 4, 1918 }, - { 0x1f9c, 4, 1922 }, - { 0x1f9d, 4, 1926 }, - { 0x1f9e, 4, 1930 }, - { 0x1f9f, 4, 1934 }, - { 0x1fa0, 3, 1938 }, - { 0x1fa1, 3, 1941 }, - { 0x1fa2, 4, 1944 }, - { 0x1fa3, 4, 1948 }, - { 0x1fa4, 4, 1952 }, - { 0x1fa5, 4, 1956 }, - { 0x1fa6, 4, 1960 }, - { 0x1fa7, 4, 1964 }, - { 0x1fa8, 3, 1968 }, - { 0x1fa9, 3, 1971 }, - { 0x1faa, 4, 1974 }, - { 0x1fab, 4, 1978 }, - { 0x1fac, 4, 1982 }, - { 0x1fad, 4, 1986 }, - { 0x1fae, 4, 1990 }, - { 0x1faf, 4, 1994 }, - { 0x1fb0, 2, 1998 }, - { 0x1fb1, 2, 2000 }, - { 0x1fb2, 3, 2002 }, - { 0x1fb3, 2, 2005 }, - { 0x1fb4, 3, 2007 }, - { 0x1fb6, 2, 2010 }, - { 0x1fb7, 3, 2012 }, - { 0x1fb8, 2, 2015 }, - { 0x1fb9, 2, 2017 }, - { 0x1fba, 2, 2019 }, - { 0x1fbb, 2, 625 }, - { 0x1fbc, 2, 2021 }, - { 0x1fbd, 2, 2023 }, - { 0x1fbe, 1, 2025 }, - { 0x1fbf, 2, 2023 }, - { 0x1fc0, 2, 2026 }, - { 0x1fc1, 3, 2028 }, - { 0x1fc2, 3, 2031 }, - { 0x1fc3, 2, 2034 }, - { 0x1fc4, 3, 2036 }, - { 0x1fc6, 2, 2039 }, - { 0x1fc7, 3, 2041 }, - { 0x1fc8, 2, 2044 }, - { 0x1fc9, 2, 628 }, - { 0x1fca, 2, 2046 }, - { 0x1fcb, 2, 630 }, - { 0x1fcc, 2, 2048 }, - { 0x1fcd, 3, 2050 }, - { 0x1fce, 3, 2053 }, - { 0x1fcf, 3, 2056 }, - { 0x1fd0, 2, 2059 }, - { 0x1fd1, 2, 2061 }, - { 0x1fd2, 3, 2063 }, - { 0x1fd3, 3, 640 }, - { 0x1fd6, 2, 2066 }, - { 0x1fd7, 3, 2068 }, - { 0x1fd8, 2, 2071 }, - { 0x1fd9, 2, 2073 }, - { 0x1fda, 2, 2075 }, - { 0x1fdb, 2, 632 }, - { 0x1fdd, 3, 2077 }, - { 0x1fde, 3, 2080 }, - { 0x1fdf, 3, 2083 }, - { 0x1fe0, 2, 2086 }, - { 0x1fe1, 2, 2088 }, - { 0x1fe2, 3, 2090 }, - { 0x1fe3, 3, 655 }, - { 0x1fe4, 2, 2093 }, - { 0x1fe5, 2, 2095 }, - { 0x1fe6, 2, 2097 }, - { 0x1fe7, 3, 2099 }, - { 0x1fe8, 2, 2102 }, - { 0x1fe9, 2, 2104 }, - { 0x1fea, 2, 2106 }, - { 0x1feb, 2, 636 }, - { 0x1fec, 2, 2108 }, - { 0x1fed, 3, 2110 }, - { 0x1fee, 3, 622 }, - { 0x1fef, 1, 2113 }, - { 0x1ff2, 3, 2114 }, - { 0x1ff3, 2, 2117 }, - { 0x1ff4, 3, 2119 }, - { 0x1ff6, 2, 2122 }, - { 0x1ff7, 3, 2124 }, - { 0x1ff8, 2, 2127 }, - { 0x1ff9, 2, 634 }, - { 0x1ffa, 2, 2129 }, - { 0x1ffb, 2, 638 }, - { 0x1ffc, 2, 2131 }, - { 0x1ffd, 2, 8 }, - { 0x1ffe, 2, 2133 }, - { 0x2000, 1, 0 }, - { 0x2001, 1, 0 }, - { 0x2002, 1, 0 }, - { 0x2003, 1, 0 }, - { 0x2004, 1, 0 }, - { 0x2005, 1, 0 }, - { 0x2006, 1, 0 }, - { 0x2007, 1, 0 }, - { 0x2008, 1, 0 }, - { 0x2009, 1, 0 }, - { 0x200a, 1, 0 }, - { 0x2011, 1, 2135 }, - { 0x2017, 2, 2136 }, - { 0x2024, 1, 2138 }, - { 0x2025, 2, 2139 }, - { 0x2026, 3, 2141 }, - { 0x202f, 1, 0 }, - { 0x2033, 2, 2144 }, - { 0x2034, 3, 2146 }, - { 0x2036, 2, 2149 }, - { 0x2037, 3, 2151 }, - { 0x203c, 2, 2154 }, - { 0x203e, 2, 2156 }, - { 0x2047, 2, 2158 }, - { 0x2048, 2, 2160 }, - { 0x2049, 2, 2162 }, - { 0x2057, 4, 2164 }, - { 0x205f, 1, 0 }, - { 0x2070, 1, 2168 }, - { 0x2071, 1, 2169 }, - { 0x2074, 1, 2170 }, - { 0x2075, 1, 2171 }, - { 0x2076, 1, 2172 }, - { 0x2077, 1, 2173 }, - { 0x2078, 1, 2174 }, - { 0x2079, 1, 2175 }, - { 0x207a, 1, 2176 }, - { 0x207b, 1, 2177 }, - { 0x207c, 1, 2178 }, - { 0x207d, 1, 2179 }, - { 0x207e, 1, 2180 }, - { 0x207f, 1, 2181 }, - { 0x2080, 1, 2168 }, - { 0x2081, 1, 13 }, - { 0x2082, 1, 6 }, - { 0x2083, 1, 7 }, - { 0x2084, 1, 2170 }, - { 0x2085, 1, 2171 }, - { 0x2086, 1, 2172 }, - { 0x2087, 1, 2173 }, - { 0x2088, 1, 2174 }, - { 0x2089, 1, 2175 }, - { 0x208a, 1, 2176 }, - { 0x208b, 1, 2177 }, - { 0x208c, 1, 2178 }, - { 0x208d, 1, 2179 }, - { 0x208e, 1, 2180 }, - { 0x20a8, 2, 2182 }, - { 0x2100, 3, 2184 }, - { 0x2101, 3, 2187 }, - { 0x2102, 1, 2190 }, - { 0x2103, 2, 2191 }, - { 0x2105, 3, 2193 }, - { 0x2106, 3, 2196 }, - { 0x2107, 1, 2199 }, - { 0x2109, 2, 2200 }, - { 0x210a, 1, 2202 }, - { 0x210b, 1, 2203 }, - { 0x210c, 1, 2203 }, - { 0x210d, 1, 2203 }, - { 0x210e, 1, 588 }, - { 0x210f, 1, 2204 }, - { 0x2110, 1, 2205 }, - { 0x2111, 1, 2205 }, - { 0x2112, 1, 2206 }, - { 0x2113, 1, 610 }, - { 0x2115, 1, 2207 }, - { 0x2116, 2, 2208 }, - { 0x2119, 1, 2210 }, - { 0x211a, 1, 2211 }, - { 0x211b, 1, 2212 }, - { 0x211c, 1, 2212 }, - { 0x211d, 1, 2212 }, - { 0x2120, 2, 2213 }, - { 0x2121, 3, 2215 }, - { 0x2122, 2, 2218 }, - { 0x2124, 1, 2220 }, - { 0x2126, 1, 2221 }, - { 0x2128, 1, 2220 }, - { 0x212a, 1, 2222 }, - { 0x212b, 2, 34 }, - { 0x212c, 1, 2223 }, - { 0x212d, 1, 2190 }, - { 0x212f, 1, 2224 }, - { 0x2130, 1, 2225 }, - { 0x2131, 1, 2226 }, - { 0x2133, 1, 2227 }, - { 0x2134, 1, 14 }, - { 0x2135, 1, 2228 }, - { 0x2136, 1, 2229 }, - { 0x2137, 1, 2230 }, - { 0x2138, 1, 2231 }, - { 0x2139, 1, 2169 }, - { 0x213d, 1, 2232 }, - { 0x213e, 1, 2233 }, - { 0x213f, 1, 2234 }, - { 0x2140, 1, 2235 }, - { 0x2145, 1, 2236 }, - { 0x2146, 1, 2237 }, - { 0x2147, 1, 2224 }, - { 0x2148, 1, 2169 }, - { 0x2149, 1, 590 }, - { 0x2153, 3, 2238 }, - { 0x2154, 3, 2241 }, - { 0x2155, 3, 2244 }, - { 0x2156, 3, 2247 }, - { 0x2157, 3, 2250 }, - { 0x2158, 3, 2253 }, - { 0x2159, 3, 2256 }, - { 0x215a, 3, 2259 }, - { 0x215b, 3, 2262 }, - { 0x215c, 3, 2265 }, - { 0x215d, 3, 2268 }, - { 0x215e, 3, 2271 }, - { 0x215f, 2, 2274 }, - { 0x2160, 1, 2205 }, - { 0x2161, 2, 2276 }, - { 0x2162, 3, 2278 }, - { 0x2163, 2, 2281 }, - { 0x2164, 1, 2283 }, - { 0x2165, 2, 2284 }, - { 0x2166, 3, 2286 }, - { 0x2167, 4, 2289 }, - { 0x2168, 2, 2293 }, - { 0x2169, 1, 2295 }, - { 0x216a, 2, 2296 }, - { 0x216b, 3, 2298 }, - { 0x216c, 1, 2206 }, - { 0x216d, 1, 2190 }, - { 0x216e, 1, 2236 }, - { 0x216f, 1, 2227 }, - { 0x2170, 1, 2169 }, - { 0x2171, 2, 2301 }, - { 0x2172, 3, 2303 }, - { 0x2173, 2, 2306 }, - { 0x2174, 1, 2308 }, - { 0x2175, 2, 2309 }, - { 0x2176, 3, 2311 }, - { 0x2177, 4, 2314 }, - { 0x2178, 2, 2318 }, - { 0x2179, 1, 611 }, - { 0x217a, 2, 2320 }, - { 0x217b, 3, 2322 }, - { 0x217c, 1, 610 }, - { 0x217d, 1, 2325 }, - { 0x217e, 1, 2237 }, - { 0x217f, 1, 2326 }, - { 0x219a, 2, 2327 }, - { 0x219b, 2, 2329 }, - { 0x21ae, 2, 2331 }, - { 0x21cd, 2, 2333 }, - { 0x21ce, 2, 2335 }, - { 0x21cf, 2, 2337 }, - { 0x2204, 2, 2339 }, - { 0x2209, 2, 2341 }, - { 0x220c, 2, 2343 }, - { 0x2224, 2, 2345 }, - { 0x2226, 2, 2347 }, - { 0x222c, 2, 2349 }, - { 0x222d, 3, 2351 }, - { 0x222f, 2, 2354 }, - { 0x2230, 3, 2356 }, - { 0x2241, 2, 2359 }, - { 0x2244, 2, 2361 }, - { 0x2247, 2, 2363 }, - { 0x2249, 2, 2365 }, - { 0x2260, 2, 2367 }, - { 0x2262, 2, 2369 }, - { 0x226d, 2, 2371 }, - { 0x226e, 2, 2373 }, - { 0x226f, 2, 2375 }, - { 0x2270, 2, 2377 }, - { 0x2271, 2, 2379 }, - { 0x2274, 2, 2381 }, - { 0x2275, 2, 2383 }, - { 0x2278, 2, 2385 }, - { 0x2279, 2, 2387 }, - { 0x2280, 2, 2389 }, - { 0x2281, 2, 2391 }, - { 0x2284, 2, 2393 }, - { 0x2285, 2, 2395 }, - { 0x2288, 2, 2397 }, - { 0x2289, 2, 2399 }, - { 0x22ac, 2, 2401 }, - { 0x22ad, 2, 2403 }, - { 0x22ae, 2, 2405 }, - { 0x22af, 2, 2407 }, - { 0x22e0, 2, 2409 }, - { 0x22e1, 2, 2411 }, - { 0x22e2, 2, 2413 }, - { 0x22e3, 2, 2415 }, - { 0x22ea, 2, 2417 }, - { 0x22eb, 2, 2419 }, - { 0x22ec, 2, 2421 }, - { 0x22ed, 2, 2423 }, - { 0x2329, 1, 2425 }, - { 0x232a, 1, 2426 }, - { 0x2460, 1, 13 }, - { 0x2461, 1, 6 }, - { 0x2462, 1, 7 }, - { 0x2463, 1, 2170 }, - { 0x2464, 1, 2171 }, - { 0x2465, 1, 2172 }, - { 0x2466, 1, 2173 }, - { 0x2467, 1, 2174 }, - { 0x2468, 1, 2175 }, - { 0x2469, 2, 2427 }, - { 0x246a, 2, 2429 }, - { 0x246b, 2, 2431 }, - { 0x246c, 2, 2433 }, - { 0x246d, 2, 2435 }, - { 0x246e, 2, 2437 }, - { 0x246f, 2, 2439 }, - { 0x2470, 2, 2441 }, - { 0x2471, 2, 2443 }, - { 0x2472, 2, 2445 }, - { 0x2473, 2, 2447 }, - { 0x2474, 3, 2449 }, - { 0x2475, 3, 2452 }, - { 0x2476, 3, 2455 }, - { 0x2477, 3, 2458 }, - { 0x2478, 3, 2461 }, - { 0x2479, 3, 2464 }, - { 0x247a, 3, 2467 }, - { 0x247b, 3, 2470 }, - { 0x247c, 3, 2473 }, - { 0x247d, 4, 2476 }, - { 0x247e, 4, 2480 }, - { 0x247f, 4, 2484 }, - { 0x2480, 4, 2488 }, - { 0x2481, 4, 2492 }, - { 0x2482, 4, 2496 }, - { 0x2483, 4, 2500 }, - { 0x2484, 4, 2504 }, - { 0x2485, 4, 2508 }, - { 0x2486, 4, 2512 }, - { 0x2487, 4, 2516 }, - { 0x2488, 2, 2520 }, - { 0x2489, 2, 2522 }, - { 0x248a, 2, 2524 }, - { 0x248b, 2, 2526 }, - { 0x248c, 2, 2528 }, - { 0x248d, 2, 2530 }, - { 0x248e, 2, 2532 }, - { 0x248f, 2, 2534 }, - { 0x2490, 2, 2536 }, - { 0x2491, 3, 2538 }, - { 0x2492, 3, 2541 }, - { 0x2493, 3, 2544 }, - { 0x2494, 3, 2547 }, - { 0x2495, 3, 2550 }, - { 0x2496, 3, 2553 }, - { 0x2497, 3, 2556 }, - { 0x2498, 3, 2559 }, - { 0x2499, 3, 2562 }, - { 0x249a, 3, 2565 }, - { 0x249b, 3, 2568 }, - { 0x249c, 3, 2571 }, - { 0x249d, 3, 2574 }, - { 0x249e, 3, 2577 }, - { 0x249f, 3, 2580 }, - { 0x24a0, 3, 2583 }, - { 0x24a1, 3, 2586 }, - { 0x24a2, 3, 2589 }, - { 0x24a3, 3, 2592 }, - { 0x24a4, 3, 2595 }, - { 0x24a5, 3, 2598 }, - { 0x24a6, 3, 2601 }, - { 0x24a7, 3, 2604 }, - { 0x24a8, 3, 2607 }, - { 0x24a9, 3, 2610 }, - { 0x24aa, 3, 2613 }, - { 0x24ab, 3, 2616 }, - { 0x24ac, 3, 2619 }, - { 0x24ad, 3, 2622 }, - { 0x24ae, 3, 2625 }, - { 0x24af, 3, 2628 }, - { 0x24b0, 3, 2631 }, - { 0x24b1, 3, 2634 }, - { 0x24b2, 3, 2637 }, - { 0x24b3, 3, 2640 }, - { 0x24b4, 3, 2643 }, - { 0x24b5, 3, 2646 }, - { 0x24b6, 1, 2649 }, - { 0x24b7, 1, 2223 }, - { 0x24b8, 1, 2190 }, - { 0x24b9, 1, 2236 }, - { 0x24ba, 1, 2225 }, - { 0x24bb, 1, 2226 }, - { 0x24bc, 1, 2650 }, - { 0x24bd, 1, 2203 }, - { 0x24be, 1, 2205 }, - { 0x24bf, 1, 2651 }, - { 0x24c0, 1, 2222 }, - { 0x24c1, 1, 2206 }, - { 0x24c2, 1, 2227 }, - { 0x24c3, 1, 2207 }, - { 0x24c4, 1, 2652 }, - { 0x24c5, 1, 2210 }, - { 0x24c6, 1, 2211 }, - { 0x24c7, 1, 2212 }, - { 0x24c8, 1, 2653 }, - { 0x24c9, 1, 2654 }, - { 0x24ca, 1, 2655 }, - { 0x24cb, 1, 2283 }, - { 0x24cc, 1, 2656 }, - { 0x24cd, 1, 2295 }, - { 0x24ce, 1, 2657 }, - { 0x24cf, 1, 2220 }, - { 0x24d0, 1, 3 }, - { 0x24d1, 1, 2658 }, - { 0x24d2, 1, 2325 }, - { 0x24d3, 1, 2237 }, - { 0x24d4, 1, 2224 }, - { 0x24d5, 1, 2659 }, - { 0x24d6, 1, 2202 }, - { 0x24d7, 1, 588 }, - { 0x24d8, 1, 2169 }, - { 0x24d9, 1, 590 }, - { 0x24da, 1, 2660 }, - { 0x24db, 1, 610 }, - { 0x24dc, 1, 2326 }, - { 0x24dd, 1, 2181 }, - { 0x24de, 1, 14 }, - { 0x24df, 1, 2661 }, - { 0x24e0, 1, 2662 }, - { 0x24e1, 1, 591 }, - { 0x24e2, 1, 356 }, - { 0x24e3, 1, 2663 }, - { 0x24e4, 1, 2664 }, - { 0x24e5, 1, 2308 }, - { 0x24e6, 1, 595 }, - { 0x24e7, 1, 611 }, - { 0x24e8, 1, 596 }, - { 0x24e9, 1, 2665 }, - { 0x24ea, 1, 2168 }, - { 0x2a0c, 4, 2666 }, - { 0x2a74, 3, 2670 }, - { 0x2a75, 2, 2673 }, - { 0x2a76, 3, 2675 }, - { 0x2adc, 2, 2678 }, - { 0x2e9f, 1, 2680 }, - { 0x2ef3, 1, 2681 }, - { 0x2f00, 1, 2682 }, - { 0x2f01, 1, 2683 }, - { 0x2f02, 1, 2684 }, - { 0x2f03, 1, 2685 }, - { 0x2f04, 1, 2686 }, - { 0x2f05, 1, 2687 }, - { 0x2f06, 1, 2688 }, - { 0x2f07, 1, 2689 }, - { 0x2f08, 1, 2690 }, - { 0x2f09, 1, 2691 }, - { 0x2f0a, 1, 2692 }, - { 0x2f0b, 1, 2693 }, - { 0x2f0c, 1, 2694 }, - { 0x2f0d, 1, 2695 }, - { 0x2f0e, 1, 2696 }, - { 0x2f0f, 1, 2697 }, - { 0x2f10, 1, 2698 }, - { 0x2f11, 1, 2699 }, - { 0x2f12, 1, 2700 }, - { 0x2f13, 1, 2701 }, - { 0x2f14, 1, 2702 }, - { 0x2f15, 1, 2703 }, - { 0x2f16, 1, 2704 }, - { 0x2f17, 1, 2705 }, - { 0x2f18, 1, 2706 }, - { 0x2f19, 1, 2707 }, - { 0x2f1a, 1, 2708 }, - { 0x2f1b, 1, 2709 }, - { 0x2f1c, 1, 2710 }, - { 0x2f1d, 1, 2711 }, - { 0x2f1e, 1, 2712 }, - { 0x2f1f, 1, 2713 }, - { 0x2f20, 1, 2714 }, - { 0x2f21, 1, 2715 }, - { 0x2f22, 1, 2716 }, - { 0x2f23, 1, 2717 }, - { 0x2f24, 1, 2718 }, - { 0x2f25, 1, 2719 }, - { 0x2f26, 1, 2720 }, - { 0x2f27, 1, 2721 }, - { 0x2f28, 1, 2722 }, - { 0x2f29, 1, 2723 }, - { 0x2f2a, 1, 2724 }, - { 0x2f2b, 1, 2725 }, - { 0x2f2c, 1, 2726 }, - { 0x2f2d, 1, 2727 }, - { 0x2f2e, 1, 2728 }, - { 0x2f2f, 1, 2729 }, - { 0x2f30, 1, 2730 }, - { 0x2f31, 1, 2731 }, - { 0x2f32, 1, 2732 }, - { 0x2f33, 1, 2733 }, - { 0x2f34, 1, 2734 }, - { 0x2f35, 1, 2735 }, - { 0x2f36, 1, 2736 }, - { 0x2f37, 1, 2737 }, - { 0x2f38, 1, 2738 }, - { 0x2f39, 1, 2739 }, - { 0x2f3a, 1, 2740 }, - { 0x2f3b, 1, 2741 }, - { 0x2f3c, 1, 2742 }, - { 0x2f3d, 1, 2743 }, - { 0x2f3e, 1, 2744 }, - { 0x2f3f, 1, 2745 }, - { 0x2f40, 1, 2746 }, - { 0x2f41, 1, 2747 }, - { 0x2f42, 1, 2748 }, - { 0x2f43, 1, 2749 }, - { 0x2f44, 1, 2750 }, - { 0x2f45, 1, 2751 }, - { 0x2f46, 1, 2752 }, - { 0x2f47, 1, 2753 }, - { 0x2f48, 1, 2754 }, - { 0x2f49, 1, 2755 }, - { 0x2f4a, 1, 2756 }, - { 0x2f4b, 1, 2757 }, - { 0x2f4c, 1, 2758 }, - { 0x2f4d, 1, 2759 }, - { 0x2f4e, 1, 2760 }, - { 0x2f4f, 1, 2761 }, - { 0x2f50, 1, 2762 }, - { 0x2f51, 1, 2763 }, - { 0x2f52, 1, 2764 }, - { 0x2f53, 1, 2765 }, - { 0x2f54, 1, 2766 }, - { 0x2f55, 1, 2767 }, - { 0x2f56, 1, 2768 }, - { 0x2f57, 1, 2769 }, - { 0x2f58, 1, 2770 }, - { 0x2f59, 1, 2771 }, - { 0x2f5a, 1, 2772 }, - { 0x2f5b, 1, 2773 }, - { 0x2f5c, 1, 2774 }, - { 0x2f5d, 1, 2775 }, - { 0x2f5e, 1, 2776 }, - { 0x2f5f, 1, 2777 }, - { 0x2f60, 1, 2778 }, - { 0x2f61, 1, 2779 }, - { 0x2f62, 1, 2780 }, - { 0x2f63, 1, 2781 }, - { 0x2f64, 1, 2782 }, - { 0x2f65, 1, 2783 }, - { 0x2f66, 1, 2784 }, - { 0x2f67, 1, 2785 }, - { 0x2f68, 1, 2786 }, - { 0x2f69, 1, 2787 }, - { 0x2f6a, 1, 2788 }, - { 0x2f6b, 1, 2789 }, - { 0x2f6c, 1, 2790 }, - { 0x2f6d, 1, 2791 }, - { 0x2f6e, 1, 2792 }, - { 0x2f6f, 1, 2793 }, - { 0x2f70, 1, 2794 }, - { 0x2f71, 1, 2795 }, - { 0x2f72, 1, 2796 }, - { 0x2f73, 1, 2797 }, - { 0x2f74, 1, 2798 }, - { 0x2f75, 1, 2799 }, - { 0x2f76, 1, 2800 }, - { 0x2f77, 1, 2801 }, - { 0x2f78, 1, 2802 }, - { 0x2f79, 1, 2803 }, - { 0x2f7a, 1, 2804 }, - { 0x2f7b, 1, 2805 }, - { 0x2f7c, 1, 2806 }, - { 0x2f7d, 1, 2807 }, - { 0x2f7e, 1, 2808 }, - { 0x2f7f, 1, 2809 }, - { 0x2f80, 1, 2810 }, - { 0x2f81, 1, 2811 }, - { 0x2f82, 1, 2812 }, - { 0x2f83, 1, 2813 }, - { 0x2f84, 1, 2814 }, - { 0x2f85, 1, 2815 }, - { 0x2f86, 1, 2816 }, - { 0x2f87, 1, 2817 }, - { 0x2f88, 1, 2818 }, - { 0x2f89, 1, 2819 }, - { 0x2f8a, 1, 2820 }, - { 0x2f8b, 1, 2821 }, - { 0x2f8c, 1, 2822 }, - { 0x2f8d, 1, 2823 }, - { 0x2f8e, 1, 2824 }, - { 0x2f8f, 1, 2825 }, - { 0x2f90, 1, 2826 }, - { 0x2f91, 1, 2827 }, - { 0x2f92, 1, 2828 }, - { 0x2f93, 1, 2829 }, - { 0x2f94, 1, 2830 }, - { 0x2f95, 1, 2831 }, - { 0x2f96, 1, 2832 }, - { 0x2f97, 1, 2833 }, - { 0x2f98, 1, 2834 }, - { 0x2f99, 1, 2835 }, - { 0x2f9a, 1, 2836 }, - { 0x2f9b, 1, 2837 }, - { 0x2f9c, 1, 2838 }, - { 0x2f9d, 1, 2839 }, - { 0x2f9e, 1, 2840 }, - { 0x2f9f, 1, 2841 }, - { 0x2fa0, 1, 2842 }, - { 0x2fa1, 1, 2843 }, - { 0x2fa2, 1, 2844 }, - { 0x2fa3, 1, 2845 }, - { 0x2fa4, 1, 2846 }, - { 0x2fa5, 1, 2847 }, - { 0x2fa6, 1, 2848 }, - { 0x2fa7, 1, 2849 }, - { 0x2fa8, 1, 2850 }, - { 0x2fa9, 1, 2851 }, - { 0x2faa, 1, 2852 }, - { 0x2fab, 1, 2853 }, - { 0x2fac, 1, 2854 }, - { 0x2fad, 1, 2855 }, - { 0x2fae, 1, 2856 }, - { 0x2faf, 1, 2857 }, - { 0x2fb0, 1, 2858 }, - { 0x2fb1, 1, 2859 }, - { 0x2fb2, 1, 2860 }, - { 0x2fb3, 1, 2861 }, - { 0x2fb4, 1, 2862 }, - { 0x2fb5, 1, 2863 }, - { 0x2fb6, 1, 2864 }, - { 0x2fb7, 1, 2865 }, - { 0x2fb8, 1, 2866 }, - { 0x2fb9, 1, 2867 }, - { 0x2fba, 1, 2868 }, - { 0x2fbb, 1, 2869 }, - { 0x2fbc, 1, 2870 }, - { 0x2fbd, 1, 2871 }, - { 0x2fbe, 1, 2872 }, - { 0x2fbf, 1, 2873 }, - { 0x2fc0, 1, 2874 }, - { 0x2fc1, 1, 2875 }, - { 0x2fc2, 1, 2876 }, - { 0x2fc3, 1, 2877 }, - { 0x2fc4, 1, 2878 }, - { 0x2fc5, 1, 2879 }, - { 0x2fc6, 1, 2880 }, - { 0x2fc7, 1, 2881 }, - { 0x2fc8, 1, 2882 }, - { 0x2fc9, 1, 2883 }, - { 0x2fca, 1, 2884 }, - { 0x2fcb, 1, 2885 }, - { 0x2fcc, 1, 2886 }, - { 0x2fcd, 1, 2887 }, - { 0x2fce, 1, 2888 }, - { 0x2fcf, 1, 2889 }, - { 0x2fd0, 1, 2890 }, - { 0x2fd1, 1, 2891 }, - { 0x2fd2, 1, 2892 }, - { 0x2fd3, 1, 2893 }, - { 0x2fd4, 1, 2894 }, - { 0x2fd5, 1, 2895 }, - { 0x3000, 1, 0 }, - { 0x3036, 1, 2896 }, - { 0x3038, 1, 2705 }, - { 0x3039, 1, 2897 }, - { 0x303a, 1, 2898 }, - { 0x304c, 2, 2899 }, - { 0x304e, 2, 2901 }, - { 0x3050, 2, 2903 }, - { 0x3052, 2, 2905 }, - { 0x3054, 2, 2907 }, - { 0x3056, 2, 2909 }, - { 0x3058, 2, 2911 }, - { 0x305a, 2, 2913 }, - { 0x305c, 2, 2915 }, - { 0x305e, 2, 2917 }, - { 0x3060, 2, 2919 }, - { 0x3062, 2, 2921 }, - { 0x3065, 2, 2923 }, - { 0x3067, 2, 2925 }, - { 0x3069, 2, 2927 }, - { 0x3070, 2, 2929 }, - { 0x3071, 2, 2931 }, - { 0x3073, 2, 2933 }, - { 0x3074, 2, 2935 }, - { 0x3076, 2, 2937 }, - { 0x3077, 2, 2939 }, - { 0x3079, 2, 2941 }, - { 0x307a, 2, 2943 }, - { 0x307c, 2, 2945 }, - { 0x307d, 2, 2947 }, - { 0x3094, 2, 2949 }, - { 0x309b, 2, 2951 }, - { 0x309c, 2, 2953 }, - { 0x309e, 2, 2955 }, - { 0x309f, 2, 2957 }, - { 0x30ac, 2, 2959 }, - { 0x30ae, 2, 2961 }, - { 0x30b0, 2, 2963 }, - { 0x30b2, 2, 2965 }, - { 0x30b4, 2, 2967 }, - { 0x30b6, 2, 2969 }, - { 0x30b8, 2, 2971 }, - { 0x30ba, 2, 2973 }, - { 0x30bc, 2, 2975 }, - { 0x30be, 2, 2977 }, - { 0x30c0, 2, 2979 }, - { 0x30c2, 2, 2981 }, - { 0x30c5, 2, 2983 }, - { 0x30c7, 2, 2985 }, - { 0x30c9, 2, 2987 }, - { 0x30d0, 2, 2989 }, - { 0x30d1, 2, 2991 }, - { 0x30d3, 2, 2993 }, - { 0x30d4, 2, 2995 }, - { 0x30d6, 2, 2997 }, - { 0x30d7, 2, 2999 }, - { 0x30d9, 2, 3001 }, - { 0x30da, 2, 3003 }, - { 0x30dc, 2, 3005 }, - { 0x30dd, 2, 3007 }, - { 0x30f4, 2, 3009 }, - { 0x30f7, 2, 3011 }, - { 0x30f8, 2, 3013 }, - { 0x30f9, 2, 3015 }, - { 0x30fa, 2, 3017 }, - { 0x30fe, 2, 3019 }, - { 0x30ff, 2, 3021 }, - { 0x3131, 1, 3023 }, - { 0x3132, 1, 3024 }, - { 0x3133, 1, 3025 }, - { 0x3134, 1, 3026 }, - { 0x3135, 1, 3027 }, - { 0x3136, 1, 3028 }, - { 0x3137, 1, 3029 }, - { 0x3138, 1, 3030 }, - { 0x3139, 1, 3031 }, - { 0x313a, 1, 3032 }, - { 0x313b, 1, 3033 }, - { 0x313c, 1, 3034 }, - { 0x313d, 1, 3035 }, - { 0x313e, 1, 3036 }, - { 0x313f, 1, 3037 }, - { 0x3140, 1, 3038 }, - { 0x3141, 1, 3039 }, - { 0x3142, 1, 3040 }, - { 0x3143, 1, 3041 }, - { 0x3144, 1, 3042 }, - { 0x3145, 1, 3043 }, - { 0x3146, 1, 3044 }, - { 0x3147, 1, 3045 }, - { 0x3148, 1, 3046 }, - { 0x3149, 1, 3047 }, - { 0x314a, 1, 3048 }, - { 0x314b, 1, 3049 }, - { 0x314c, 1, 3050 }, - { 0x314d, 1, 3051 }, - { 0x314e, 1, 3052 }, - { 0x314f, 1, 3053 }, - { 0x3150, 1, 3054 }, - { 0x3151, 1, 3055 }, - { 0x3152, 1, 3056 }, - { 0x3153, 1, 3057 }, - { 0x3154, 1, 3058 }, - { 0x3155, 1, 3059 }, - { 0x3156, 1, 3060 }, - { 0x3157, 1, 3061 }, - { 0x3158, 1, 3062 }, - { 0x3159, 1, 3063 }, - { 0x315a, 1, 3064 }, - { 0x315b, 1, 3065 }, - { 0x315c, 1, 3066 }, - { 0x315d, 1, 3067 }, - { 0x315e, 1, 3068 }, - { 0x315f, 1, 3069 }, - { 0x3160, 1, 3070 }, - { 0x3161, 1, 3071 }, - { 0x3162, 1, 3072 }, - { 0x3163, 1, 3073 }, - { 0x3164, 1, 3074 }, - { 0x3165, 1, 3075 }, - { 0x3166, 1, 3076 }, - { 0x3167, 1, 3077 }, - { 0x3168, 1, 3078 }, - { 0x3169, 1, 3079 }, - { 0x316a, 1, 3080 }, - { 0x316b, 1, 3081 }, - { 0x316c, 1, 3082 }, - { 0x316d, 1, 3083 }, - { 0x316e, 1, 3084 }, - { 0x316f, 1, 3085 }, - { 0x3170, 1, 3086 }, - { 0x3171, 1, 3087 }, - { 0x3172, 1, 3088 }, - { 0x3173, 1, 3089 }, - { 0x3174, 1, 3090 }, - { 0x3175, 1, 3091 }, - { 0x3176, 1, 3092 }, - { 0x3177, 1, 3093 }, - { 0x3178, 1, 3094 }, - { 0x3179, 1, 3095 }, - { 0x317a, 1, 3096 }, - { 0x317b, 1, 3097 }, - { 0x317c, 1, 3098 }, - { 0x317d, 1, 3099 }, - { 0x317e, 1, 3100 }, - { 0x317f, 1, 3101 }, - { 0x3180, 1, 3102 }, - { 0x3181, 1, 3103 }, - { 0x3182, 1, 3104 }, - { 0x3183, 1, 3105 }, - { 0x3184, 1, 3106 }, - { 0x3185, 1, 3107 }, - { 0x3186, 1, 3108 }, - { 0x3187, 1, 3109 }, - { 0x3188, 1, 3110 }, - { 0x3189, 1, 3111 }, - { 0x318a, 1, 3112 }, - { 0x318b, 1, 3113 }, - { 0x318c, 1, 3114 }, - { 0x318d, 1, 3115 }, - { 0x318e, 1, 3116 }, - { 0x3192, 1, 2682 }, - { 0x3193, 1, 2688 }, - { 0x3194, 1, 3117 }, - { 0x3195, 1, 3118 }, - { 0x3196, 1, 3119 }, - { 0x3197, 1, 3120 }, - { 0x3198, 1, 3121 }, - { 0x3199, 1, 3122 }, - { 0x319a, 1, 2686 }, - { 0x319b, 1, 3123 }, - { 0x319c, 1, 3124 }, - { 0x319d, 1, 3125 }, - { 0x319e, 1, 3126 }, - { 0x319f, 1, 2690 }, - { 0x3200, 3, 3127 }, - { 0x3201, 3, 3130 }, - { 0x3202, 3, 3133 }, - { 0x3203, 3, 3136 }, - { 0x3204, 3, 3139 }, - { 0x3205, 3, 3142 }, - { 0x3206, 3, 3145 }, - { 0x3207, 3, 3148 }, - { 0x3208, 3, 3151 }, - { 0x3209, 3, 3154 }, - { 0x320a, 3, 3157 }, - { 0x320b, 3, 3160 }, - { 0x320c, 3, 3163 }, - { 0x320d, 3, 3166 }, - { 0x320e, 4, 3169 }, - { 0x320f, 4, 3173 }, - { 0x3210, 4, 3177 }, - { 0x3211, 4, 3181 }, - { 0x3212, 4, 3185 }, - { 0x3213, 4, 3189 }, - { 0x3214, 4, 3193 }, - { 0x3215, 4, 3197 }, - { 0x3216, 4, 3201 }, - { 0x3217, 4, 3205 }, - { 0x3218, 4, 3209 }, - { 0x3219, 4, 3213 }, - { 0x321a, 4, 3217 }, - { 0x321b, 4, 3221 }, - { 0x321c, 4, 3225 }, - { 0x3220, 3, 3229 }, - { 0x3221, 3, 3232 }, - { 0x3222, 3, 3235 }, - { 0x3223, 3, 3238 }, - { 0x3224, 3, 3241 }, - { 0x3225, 3, 3244 }, - { 0x3226, 3, 3247 }, - { 0x3227, 3, 3250 }, - { 0x3228, 3, 3253 }, - { 0x3229, 3, 3256 }, - { 0x322a, 3, 3259 }, - { 0x322b, 3, 3262 }, - { 0x322c, 3, 3265 }, - { 0x322d, 3, 3268 }, - { 0x322e, 3, 3271 }, - { 0x322f, 3, 3274 }, - { 0x3230, 3, 3277 }, - { 0x3231, 3, 3280 }, - { 0x3232, 3, 3283 }, - { 0x3233, 3, 3286 }, - { 0x3234, 3, 3289 }, - { 0x3235, 3, 3292 }, - { 0x3236, 3, 3295 }, - { 0x3237, 3, 3298 }, - { 0x3238, 3, 3301 }, - { 0x3239, 3, 3304 }, - { 0x323a, 3, 3307 }, - { 0x323b, 3, 3310 }, - { 0x323c, 3, 3313 }, - { 0x323d, 3, 3316 }, - { 0x323e, 3, 3319 }, - { 0x323f, 3, 3322 }, - { 0x3240, 3, 3325 }, - { 0x3241, 3, 3328 }, - { 0x3242, 3, 3331 }, - { 0x3243, 3, 3334 }, - { 0x3251, 2, 3337 }, - { 0x3252, 2, 3339 }, - { 0x3253, 2, 3341 }, - { 0x3254, 2, 3343 }, - { 0x3255, 2, 3345 }, - { 0x3256, 2, 3347 }, - { 0x3257, 2, 3349 }, - { 0x3258, 2, 3351 }, - { 0x3259, 2, 3353 }, - { 0x325a, 2, 3355 }, - { 0x325b, 2, 3357 }, - { 0x325c, 2, 3359 }, - { 0x325d, 2, 3361 }, - { 0x325e, 2, 3363 }, - { 0x325f, 2, 3365 }, - { 0x3260, 1, 3023 }, - { 0x3261, 1, 3026 }, - { 0x3262, 1, 3029 }, - { 0x3263, 1, 3031 }, - { 0x3264, 1, 3039 }, - { 0x3265, 1, 3040 }, - { 0x3266, 1, 3043 }, - { 0x3267, 1, 3045 }, - { 0x3268, 1, 3046 }, - { 0x3269, 1, 3048 }, - { 0x326a, 1, 3049 }, - { 0x326b, 1, 3050 }, - { 0x326c, 1, 3051 }, - { 0x326d, 1, 3052 }, - { 0x326e, 2, 3367 }, - { 0x326f, 2, 3369 }, - { 0x3270, 2, 3371 }, - { 0x3271, 2, 3373 }, - { 0x3272, 2, 3375 }, - { 0x3273, 2, 3377 }, - { 0x3274, 2, 3379 }, - { 0x3275, 2, 3381 }, - { 0x3276, 2, 3383 }, - { 0x3277, 2, 3385 }, - { 0x3278, 2, 3387 }, - { 0x3279, 2, 3389 }, - { 0x327a, 2, 3391 }, - { 0x327b, 2, 3393 }, - { 0x3280, 1, 2682 }, - { 0x3281, 1, 2688 }, - { 0x3282, 1, 3117 }, - { 0x3283, 1, 3118 }, - { 0x3284, 1, 3395 }, - { 0x3285, 1, 3396 }, - { 0x3286, 1, 3397 }, - { 0x3287, 1, 2693 }, - { 0x3288, 1, 3398 }, - { 0x3289, 1, 2705 }, - { 0x328a, 1, 2755 }, - { 0x328b, 1, 2767 }, - { 0x328c, 1, 2766 }, - { 0x328d, 1, 2756 }, - { 0x328e, 1, 2848 }, - { 0x328f, 1, 2713 }, - { 0x3290, 1, 2753 }, - { 0x3291, 1, 3399 }, - { 0x3292, 1, 3400 }, - { 0x3293, 1, 3401 }, - { 0x3294, 1, 3402 }, - { 0x3295, 1, 3403 }, - { 0x3296, 1, 3404 }, - { 0x3297, 1, 3405 }, - { 0x3298, 1, 3406 }, - { 0x3299, 1, 3407 }, - { 0x329a, 1, 3408 }, - { 0x329b, 1, 2719 }, - { 0x329c, 1, 3409 }, - { 0x329d, 1, 3410 }, - { 0x329e, 1, 3411 }, - { 0x329f, 1, 3412 }, - { 0x32a0, 1, 3413 }, - { 0x32a1, 1, 3414 }, - { 0x32a2, 1, 3415 }, - { 0x32a3, 1, 3416 }, - { 0x32a4, 1, 3119 }, - { 0x32a5, 1, 3120 }, - { 0x32a6, 1, 3121 }, - { 0x32a7, 1, 3417 }, - { 0x32a8, 1, 3418 }, - { 0x32a9, 1, 3419 }, - { 0x32aa, 1, 3420 }, - { 0x32ab, 1, 3421 }, - { 0x32ac, 1, 3422 }, - { 0x32ad, 1, 3423 }, - { 0x32ae, 1, 3424 }, - { 0x32af, 1, 3425 }, - { 0x32b0, 1, 3426 }, - { 0x32b1, 2, 3427 }, - { 0x32b2, 2, 3429 }, - { 0x32b3, 2, 3431 }, - { 0x32b4, 2, 3433 }, - { 0x32b5, 2, 3435 }, - { 0x32b6, 2, 3437 }, - { 0x32b7, 2, 3439 }, - { 0x32b8, 2, 3441 }, - { 0x32b9, 2, 3443 }, - { 0x32ba, 2, 3445 }, - { 0x32bb, 2, 3447 }, - { 0x32bc, 2, 3449 }, - { 0x32bd, 2, 3451 }, - { 0x32be, 2, 3453 }, - { 0x32bf, 2, 3455 }, - { 0x32c0, 2, 3457 }, - { 0x32c1, 2, 3459 }, - { 0x32c2, 2, 3461 }, - { 0x32c3, 2, 3463 }, - { 0x32c4, 2, 3465 }, - { 0x32c5, 2, 3467 }, - { 0x32c6, 2, 3469 }, - { 0x32c7, 2, 3471 }, - { 0x32c8, 2, 3473 }, - { 0x32c9, 3, 3475 }, - { 0x32ca, 3, 3478 }, - { 0x32cb, 3, 3481 }, - { 0x32d0, 1, 3484 }, - { 0x32d1, 1, 3485 }, - { 0x32d2, 1, 3486 }, - { 0x32d3, 1, 3487 }, - { 0x32d4, 1, 3488 }, - { 0x32d5, 1, 3489 }, - { 0x32d6, 1, 3490 }, - { 0x32d7, 1, 3491 }, - { 0x32d8, 1, 3492 }, - { 0x32d9, 1, 3493 }, - { 0x32da, 1, 3494 }, - { 0x32db, 1, 3495 }, - { 0x32dc, 1, 3496 }, - { 0x32dd, 1, 3497 }, - { 0x32de, 1, 3498 }, - { 0x32df, 1, 3499 }, - { 0x32e0, 1, 3500 }, - { 0x32e1, 1, 3501 }, - { 0x32e2, 1, 3502 }, - { 0x32e3, 1, 3503 }, - { 0x32e4, 1, 3504 }, - { 0x32e5, 1, 3505 }, - { 0x32e6, 1, 3506 }, - { 0x32e7, 1, 3507 }, - { 0x32e8, 1, 3508 }, - { 0x32e9, 1, 3509 }, - { 0x32ea, 1, 3510 }, - { 0x32eb, 1, 3511 }, - { 0x32ec, 1, 3512 }, - { 0x32ed, 1, 3513 }, - { 0x32ee, 1, 3514 }, - { 0x32ef, 1, 3515 }, - { 0x32f0, 1, 3516 }, - { 0x32f1, 1, 3517 }, - { 0x32f2, 1, 3518 }, - { 0x32f3, 1, 3519 }, - { 0x32f4, 1, 3520 }, - { 0x32f5, 1, 3521 }, - { 0x32f6, 1, 3522 }, - { 0x32f7, 1, 3523 }, - { 0x32f8, 1, 3524 }, - { 0x32f9, 1, 3525 }, - { 0x32fa, 1, 3526 }, - { 0x32fb, 1, 3527 }, - { 0x32fc, 1, 3528 }, - { 0x32fd, 1, 3529 }, - { 0x32fe, 1, 3530 }, - { 0x3300, 5, 3531 }, - { 0x3301, 4, 3536 }, - { 0x3302, 5, 3540 }, - { 0x3303, 3, 3545 }, - { 0x3304, 5, 3548 }, - { 0x3305, 3, 3553 }, - { 0x3306, 3, 3556 }, - { 0x3307, 6, 3559 }, - { 0x3308, 4, 3565 }, - { 0x3309, 3, 3569 }, - { 0x330a, 3, 3572 }, - { 0x330b, 3, 3575 }, - { 0x330c, 4, 3578 }, - { 0x330d, 4, 3582 }, - { 0x330e, 4, 3586 }, - { 0x330f, 4, 3590 }, - { 0x3310, 4, 3594 }, - { 0x3311, 4, 3598 }, - { 0x3312, 4, 3602 }, - { 0x3313, 6, 3606 }, - { 0x3314, 2, 3612 }, - { 0x3315, 6, 3614 }, - { 0x3316, 6, 3620 }, - { 0x3317, 5, 3626 }, - { 0x3318, 4, 3631 }, - { 0x3319, 6, 3635 }, - { 0x331a, 6, 3641 }, - { 0x331b, 4, 3647 }, - { 0x331c, 3, 3651 }, - { 0x331d, 3, 3654 }, - { 0x331e, 4, 3657 }, - { 0x331f, 4, 3661 }, - { 0x3320, 5, 3665 }, - { 0x3321, 5, 3670 }, - { 0x3322, 3, 3675 }, - { 0x3323, 3, 3678 }, - { 0x3324, 4, 3681 }, - { 0x3325, 3, 3685 }, - { 0x3326, 3, 3688 }, - { 0x3327, 2, 3691 }, - { 0x3328, 2, 3693 }, - { 0x3329, 3, 3695 }, - { 0x332a, 3, 3698 }, - { 0x332b, 6, 3701 }, - { 0x332c, 4, 3707 }, - { 0x332d, 5, 3711 }, - { 0x332e, 6, 3716 }, - { 0x332f, 4, 3722 }, - { 0x3330, 3, 3726 }, - { 0x3331, 3, 3729 }, - { 0x3332, 6, 3732 }, - { 0x3333, 4, 3738 }, - { 0x3334, 6, 3742 }, - { 0x3335, 3, 3748 }, - { 0x3336, 5, 3751 }, - { 0x3337, 3, 3756 }, - { 0x3338, 4, 3759 }, - { 0x3339, 3, 3763 }, - { 0x333a, 4, 3766 }, - { 0x333b, 5, 3770 }, - { 0x333c, 4, 3775 }, - { 0x333d, 5, 3779 }, - { 0x333e, 4, 3784 }, - { 0x333f, 2, 3788 }, - { 0x3340, 5, 3790 }, - { 0x3341, 3, 3795 }, - { 0x3342, 3, 3798 }, - { 0x3343, 4, 3801 }, - { 0x3344, 3, 3805 }, - { 0x3345, 3, 3808 }, - { 0x3346, 3, 3811 }, - { 0x3347, 5, 3814 }, - { 0x3348, 4, 3819 }, - { 0x3349, 2, 3823 }, - { 0x334a, 6, 3825 }, - { 0x334b, 3, 3831 }, - { 0x334c, 5, 3834 }, - { 0x334d, 4, 3839 }, - { 0x334e, 4, 3843 }, - { 0x334f, 3, 3847 }, - { 0x3350, 3, 3850 }, - { 0x3351, 4, 3853 }, - { 0x3352, 2, 3857 }, - { 0x3353, 4, 3859 }, - { 0x3354, 5, 3863 }, - { 0x3355, 2, 3868 }, - { 0x3356, 6, 3870 }, - { 0x3357, 3, 3876 }, - { 0x3358, 2, 3879 }, - { 0x3359, 2, 3881 }, - { 0x335a, 2, 3883 }, - { 0x335b, 2, 3885 }, - { 0x335c, 2, 3887 }, - { 0x335d, 2, 3889 }, - { 0x335e, 2, 3891 }, - { 0x335f, 2, 3893 }, - { 0x3360, 2, 3895 }, - { 0x3361, 2, 3897 }, - { 0x3362, 3, 3899 }, - { 0x3363, 3, 3902 }, - { 0x3364, 3, 3905 }, - { 0x3365, 3, 3908 }, - { 0x3366, 3, 3911 }, - { 0x3367, 3, 3914 }, - { 0x3368, 3, 3917 }, - { 0x3369, 3, 3920 }, - { 0x336a, 3, 3923 }, - { 0x336b, 3, 3926 }, - { 0x336c, 3, 3929 }, - { 0x336d, 3, 3932 }, - { 0x336e, 3, 3935 }, - { 0x336f, 3, 3938 }, - { 0x3370, 3, 3941 }, - { 0x3371, 3, 3944 }, - { 0x3372, 2, 3947 }, - { 0x3373, 2, 3949 }, - { 0x3374, 3, 3951 }, - { 0x3375, 2, 3954 }, - { 0x3376, 2, 3956 }, - { 0x337b, 2, 3958 }, - { 0x337c, 2, 3960 }, - { 0x337d, 2, 3962 }, - { 0x337e, 2, 3964 }, - { 0x337f, 4, 3966 }, - { 0x3380, 2, 3970 }, - { 0x3381, 2, 3972 }, - { 0x3382, 2, 3974 }, - { 0x3383, 2, 3976 }, - { 0x3384, 2, 3978 }, - { 0x3385, 2, 3980 }, - { 0x3386, 2, 3982 }, - { 0x3387, 2, 3984 }, - { 0x3388, 3, 3986 }, - { 0x3389, 4, 3989 }, - { 0x338a, 2, 3993 }, - { 0x338b, 2, 3995 }, - { 0x338c, 2, 3997 }, - { 0x338d, 2, 3999 }, - { 0x338e, 2, 4001 }, - { 0x338f, 2, 4003 }, - { 0x3390, 2, 4005 }, - { 0x3391, 3, 4007 }, - { 0x3392, 3, 4010 }, - { 0x3393, 3, 4013 }, - { 0x3394, 3, 4016 }, - { 0x3395, 2, 4019 }, - { 0x3396, 2, 4021 }, - { 0x3397, 2, 4023 }, - { 0x3398, 2, 4025 }, - { 0x3399, 2, 4027 }, - { 0x339a, 2, 4029 }, - { 0x339b, 2, 4031 }, - { 0x339c, 2, 4033 }, - { 0x339d, 2, 4035 }, - { 0x339e, 2, 4037 }, - { 0x339f, 3, 4039 }, - { 0x33a0, 3, 4042 }, - { 0x33a1, 2, 4045 }, - { 0x33a2, 3, 4047 }, - { 0x33a3, 3, 4050 }, - { 0x33a4, 3, 4053 }, - { 0x33a5, 2, 4056 }, - { 0x33a6, 3, 4058 }, - { 0x33a7, 3, 4061 }, - { 0x33a8, 4, 4064 }, - { 0x33a9, 2, 4068 }, - { 0x33aa, 3, 4070 }, - { 0x33ab, 3, 4073 }, - { 0x33ac, 3, 4076 }, - { 0x33ad, 3, 4079 }, - { 0x33ae, 5, 4082 }, - { 0x33af, 6, 4087 }, - { 0x33b0, 2, 4093 }, - { 0x33b1, 2, 4095 }, - { 0x33b2, 2, 4097 }, - { 0x33b3, 2, 4099 }, - { 0x33b4, 2, 4101 }, - { 0x33b5, 2, 4103 }, - { 0x33b6, 2, 4105 }, - { 0x33b7, 2, 4107 }, - { 0x33b8, 2, 4109 }, - { 0x33b9, 2, 4111 }, - { 0x33ba, 2, 4113 }, - { 0x33bb, 2, 4115 }, - { 0x33bc, 2, 4117 }, - { 0x33bd, 2, 4119 }, - { 0x33be, 2, 4121 }, - { 0x33bf, 2, 4123 }, - { 0x33c0, 2, 4125 }, - { 0x33c1, 2, 4127 }, - { 0x33c2, 4, 4129 }, - { 0x33c3, 2, 4133 }, - { 0x33c4, 2, 4135 }, - { 0x33c5, 2, 4137 }, - { 0x33c6, 4, 4139 }, - { 0x33c7, 3, 4143 }, - { 0x33c8, 2, 4146 }, - { 0x33c9, 2, 4148 }, - { 0x33ca, 2, 4150 }, - { 0x33cb, 2, 4152 }, - { 0x33cc, 2, 4154 }, - { 0x33cd, 2, 4156 }, - { 0x33ce, 2, 4158 }, - { 0x33cf, 2, 4160 }, - { 0x33d0, 2, 4162 }, - { 0x33d1, 2, 4164 }, - { 0x33d2, 3, 4166 }, - { 0x33d3, 2, 4169 }, - { 0x33d4, 2, 4171 }, - { 0x33d5, 3, 4173 }, - { 0x33d6, 3, 4176 }, - { 0x33d7, 2, 4179 }, - { 0x33d8, 4, 4181 }, - { 0x33d9, 3, 4185 }, - { 0x33da, 2, 4188 }, - { 0x33db, 2, 4190 }, - { 0x33dc, 2, 4192 }, - { 0x33dd, 2, 4194 }, - { 0x33e0, 2, 4196 }, - { 0x33e1, 2, 4198 }, - { 0x33e2, 2, 4200 }, - { 0x33e3, 2, 4202 }, - { 0x33e4, 2, 4204 }, - { 0x33e5, 2, 4206 }, - { 0x33e6, 2, 4208 }, - { 0x33e7, 2, 4210 }, - { 0x33e8, 2, 4212 }, - { 0x33e9, 3, 4214 }, - { 0x33ea, 3, 4217 }, - { 0x33eb, 3, 4220 }, - { 0x33ec, 3, 4223 }, - { 0x33ed, 3, 4226 }, - { 0x33ee, 3, 4229 }, - { 0x33ef, 3, 4232 }, - { 0x33f0, 3, 4235 }, - { 0x33f1, 3, 4238 }, - { 0x33f2, 3, 4241 }, - { 0x33f3, 3, 4244 }, - { 0x33f4, 3, 4247 }, - { 0x33f5, 3, 4250 }, - { 0x33f6, 3, 4253 }, - { 0x33f7, 3, 4256 }, - { 0x33f8, 3, 4259 }, - { 0x33f9, 3, 4262 }, - { 0x33fa, 3, 4265 }, - { 0x33fb, 3, 4268 }, - { 0x33fc, 3, 4271 }, - { 0x33fd, 3, 4274 }, - { 0x33fe, 3, 4277 }, - { 0xf900, 1, 4280 }, - { 0xf901, 1, 4281 }, - { 0xf902, 1, 2840 }, - { 0xf903, 1, 4282 }, - { 0xf904, 1, 4283 }, - { 0xf905, 1, 4284 }, - { 0xf906, 1, 4285 }, - { 0xf907, 1, 2894 }, - { 0xf908, 1, 2894 }, - { 0xf909, 1, 4286 }, - { 0xf90a, 1, 2848 }, - { 0xf90b, 1, 4287 }, - { 0xf90c, 1, 4288 }, - { 0xf90d, 1, 4289 }, - { 0xf90e, 1, 4290 }, - { 0xf90f, 1, 4291 }, - { 0xf910, 1, 4292 }, - { 0xf911, 1, 4293 }, - { 0xf912, 1, 4294 }, - { 0xf913, 1, 4295 }, - { 0xf914, 1, 4296 }, - { 0xf915, 1, 4297 }, - { 0xf916, 1, 4298 }, - { 0xf917, 1, 4299 }, - { 0xf918, 1, 4300 }, - { 0xf919, 1, 4301 }, - { 0xf91a, 1, 4302 }, - { 0xf91b, 1, 4303 }, - { 0xf91c, 1, 4304 }, - { 0xf91d, 1, 4305 }, - { 0xf91e, 1, 4306 }, - { 0xf91f, 1, 4307 }, - { 0xf920, 1, 4308 }, - { 0xf921, 1, 4309 }, - { 0xf922, 1, 4310 }, - { 0xf923, 1, 4311 }, - { 0xf924, 1, 4312 }, - { 0xf925, 1, 4313 }, - { 0xf926, 1, 4314 }, - { 0xf927, 1, 4315 }, - { 0xf928, 1, 4316 }, - { 0xf929, 1, 4317 }, - { 0xf92a, 1, 4318 }, - { 0xf92b, 1, 4319 }, - { 0xf92c, 1, 4320 }, - { 0xf92d, 1, 4321 }, - { 0xf92e, 1, 4322 }, - { 0xf92f, 1, 4323 }, - { 0xf930, 1, 4324 }, - { 0xf931, 1, 4325 }, - { 0xf932, 1, 4326 }, - { 0xf933, 1, 4327 }, - { 0xf934, 1, 2806 }, - { 0xf935, 1, 4328 }, - { 0xf936, 1, 4329 }, - { 0xf937, 1, 4330 }, - { 0xf938, 1, 4331 }, - { 0xf939, 1, 4332 }, - { 0xf93a, 1, 4333 }, - { 0xf93b, 1, 4334 }, - { 0xf93c, 1, 4335 }, - { 0xf93d, 1, 4336 }, - { 0xf93e, 1, 4337 }, - { 0xf93f, 1, 4338 }, - { 0xf940, 1, 2879 }, - { 0xf941, 1, 4339 }, - { 0xf942, 1, 4340 }, - { 0xf943, 1, 4341 }, - { 0xf944, 1, 4342 }, - { 0xf945, 1, 4343 }, - { 0xf946, 1, 4344 }, - { 0xf947, 1, 4345 }, - { 0xf948, 1, 4346 }, - { 0xf949, 1, 4347 }, - { 0xf94a, 1, 4348 }, - { 0xf94b, 1, 4349 }, - { 0xf94c, 1, 4350 }, - { 0xf94d, 1, 4351 }, - { 0xf94e, 1, 4352 }, - { 0xf94f, 1, 4353 }, - { 0xf950, 1, 4354 }, - { 0xf951, 1, 4355 }, - { 0xf952, 1, 4356 }, - { 0xf953, 1, 4357 }, - { 0xf954, 1, 4358 }, - { 0xf955, 1, 4359 }, - { 0xf956, 1, 4360 }, - { 0xf957, 1, 4361 }, - { 0xf958, 1, 4362 }, - { 0xf959, 1, 4363 }, - { 0xf95a, 1, 4364 }, - { 0xf95b, 1, 4365 }, - { 0xf95c, 1, 4296 }, - { 0xf95d, 1, 4366 }, - { 0xf95e, 1, 4367 }, - { 0xf95f, 1, 4368 }, - { 0xf960, 1, 4369 }, - { 0xf961, 1, 4370 }, - { 0xf962, 1, 4371 }, - { 0xf963, 1, 4372 }, - { 0xf964, 1, 4373 }, - { 0xf965, 1, 4374 }, - { 0xf966, 1, 4375 }, - { 0xf967, 1, 4376 }, - { 0xf968, 1, 4377 }, - { 0xf969, 1, 4378 }, - { 0xf96a, 1, 4379 }, - { 0xf96b, 1, 4380 }, - { 0xf96c, 1, 4381 }, - { 0xf96d, 1, 4382 }, - { 0xf96e, 1, 4383 }, - { 0xf96f, 1, 4384 }, - { 0xf970, 1, 4385 }, - { 0xf971, 1, 2842 }, - { 0xf972, 1, 4386 }, - { 0xf973, 1, 4387 }, - { 0xf974, 1, 4388 }, - { 0xf975, 1, 4389 }, - { 0xf976, 1, 4390 }, - { 0xf977, 1, 4391 }, - { 0xf978, 1, 4392 }, - { 0xf979, 1, 4393 }, - { 0xf97a, 1, 4394 }, - { 0xf97b, 1, 4395 }, - { 0xf97c, 1, 4396 }, - { 0xf97d, 1, 4397 }, - { 0xf97e, 1, 4398 }, - { 0xf97f, 1, 4399 }, - { 0xf980, 1, 4400 }, - { 0xf981, 1, 2719 }, - { 0xf982, 1, 4401 }, - { 0xf983, 1, 4402 }, - { 0xf984, 1, 4403 }, - { 0xf985, 1, 4404 }, - { 0xf986, 1, 4405 }, - { 0xf987, 1, 4406 }, - { 0xf988, 1, 4407 }, - { 0xf989, 1, 4408 }, - { 0xf98a, 1, 2700 }, - { 0xf98b, 1, 4409 }, - { 0xf98c, 1, 4410 }, - { 0xf98d, 1, 4411 }, - { 0xf98e, 1, 4412 }, - { 0xf98f, 1, 4413 }, - { 0xf990, 1, 4414 }, - { 0xf991, 1, 4415 }, - { 0xf992, 1, 4416 }, - { 0xf993, 1, 4417 }, - { 0xf994, 1, 4418 }, - { 0xf995, 1, 4419 }, - { 0xf996, 1, 4420 }, - { 0xf997, 1, 4421 }, - { 0xf998, 1, 4422 }, - { 0xf999, 1, 4423 }, - { 0xf99a, 1, 4424 }, - { 0xf99b, 1, 4425 }, - { 0xf99c, 1, 4426 }, - { 0xf99d, 1, 4427 }, - { 0xf99e, 1, 4428 }, - { 0xf99f, 1, 4429 }, - { 0xf9a0, 1, 4430 }, - { 0xf9a1, 1, 4384 }, - { 0xf9a2, 1, 4431 }, - { 0xf9a3, 1, 4432 }, - { 0xf9a4, 1, 4433 }, - { 0xf9a5, 1, 4434 }, - { 0xf9a6, 1, 4435 }, - { 0xf9a7, 1, 4436 }, - { 0xf9a8, 1, 4437 }, - { 0xf9a9, 1, 4438 }, - { 0xf9aa, 1, 4368 }, - { 0xf9ab, 1, 4439 }, - { 0xf9ac, 1, 4440 }, - { 0xf9ad, 1, 4441 }, - { 0xf9ae, 1, 4442 }, - { 0xf9af, 1, 4443 }, - { 0xf9b0, 1, 4444 }, - { 0xf9b1, 1, 4445 }, - { 0xf9b2, 1, 4446 }, - { 0xf9b3, 1, 4447 }, - { 0xf9b4, 1, 4448 }, - { 0xf9b5, 1, 4449 }, - { 0xf9b6, 1, 4450 }, - { 0xf9b7, 1, 4451 }, - { 0xf9b8, 1, 4452 }, - { 0xf9b9, 1, 4453 }, - { 0xf9ba, 1, 4454 }, - { 0xf9bb, 1, 4455 }, - { 0xf9bc, 1, 4456 }, - { 0xf9bd, 1, 4457 }, - { 0xf9be, 1, 4458 }, - { 0xf9bf, 1, 4296 }, - { 0xf9c0, 1, 4459 }, - { 0xf9c1, 1, 4460 }, - { 0xf9c2, 1, 4461 }, - { 0xf9c3, 1, 4462 }, - { 0xf9c4, 1, 2893 }, - { 0xf9c5, 1, 4463 }, - { 0xf9c6, 1, 4464 }, - { 0xf9c7, 1, 4465 }, - { 0xf9c8, 1, 4466 }, - { 0xf9c9, 1, 4467 }, - { 0xf9ca, 1, 4468 }, - { 0xf9cb, 1, 4469 }, - { 0xf9cc, 1, 4470 }, - { 0xf9cd, 1, 4471 }, - { 0xf9ce, 1, 4472 }, - { 0xf9cf, 1, 4473 }, - { 0xf9d0, 1, 4474 }, - { 0xf9d1, 1, 3396 }, - { 0xf9d2, 1, 4475 }, - { 0xf9d3, 1, 4476 }, - { 0xf9d4, 1, 4477 }, - { 0xf9d5, 1, 4478 }, - { 0xf9d6, 1, 4479 }, - { 0xf9d7, 1, 4480 }, - { 0xf9d8, 1, 4481 }, - { 0xf9d9, 1, 4482 }, - { 0xf9da, 1, 4483 }, - { 0xf9db, 1, 4370 }, - { 0xf9dc, 1, 4484 }, - { 0xf9dd, 1, 4485 }, - { 0xf9de, 1, 4486 }, - { 0xf9df, 1, 4487 }, - { 0xf9e0, 1, 4488 }, - { 0xf9e1, 1, 4489 }, - { 0xf9e2, 1, 4490 }, - { 0xf9e3, 1, 4491 }, - { 0xf9e4, 1, 4492 }, - { 0xf9e5, 1, 4493 }, - { 0xf9e6, 1, 4494 }, - { 0xf9e7, 1, 4495 }, - { 0xf9e8, 1, 4496 }, - { 0xf9e9, 1, 2847 }, - { 0xf9ea, 1, 4497 }, - { 0xf9eb, 1, 4498 }, - { 0xf9ec, 1, 4499 }, - { 0xf9ed, 1, 4500 }, - { 0xf9ee, 1, 4501 }, - { 0xf9ef, 1, 4502 }, - { 0xf9f0, 1, 4503 }, - { 0xf9f1, 1, 4504 }, - { 0xf9f2, 1, 4505 }, - { 0xf9f3, 1, 4506 }, - { 0xf9f4, 1, 4507 }, - { 0xf9f5, 1, 4508 }, - { 0xf9f6, 1, 4509 }, - { 0xf9f7, 1, 2798 }, - { 0xf9f8, 1, 4510 }, - { 0xf9f9, 1, 4511 }, - { 0xf9fa, 1, 4512 }, - { 0xf9fb, 1, 4513 }, - { 0xf9fc, 1, 4514 }, - { 0xf9fd, 1, 4515 }, - { 0xf9fe, 1, 4516 }, - { 0xf9ff, 1, 4517 }, - { 0xfa00, 1, 4518 }, - { 0xfa01, 1, 4519 }, - { 0xfa02, 1, 4520 }, - { 0xfa03, 1, 4521 }, - { 0xfa04, 1, 4522 }, - { 0xfa05, 1, 4523 }, - { 0xfa06, 1, 4524 }, - { 0xfa07, 1, 4525 }, - { 0xfa08, 1, 2825 }, - { 0xfa09, 1, 4526 }, - { 0xfa0a, 1, 2828 }, - { 0xfa0b, 1, 4527 }, - { 0xfa0c, 1, 4528 }, - { 0xfa0d, 1, 4529 }, - { 0xfa10, 1, 4530 }, - { 0xfa12, 1, 4531 }, - { 0xfa15, 1, 4532 }, - { 0xfa16, 1, 4533 }, - { 0xfa17, 1, 4534 }, - { 0xfa18, 1, 4535 }, - { 0xfa19, 1, 4536 }, - { 0xfa1a, 1, 4537 }, - { 0xfa1b, 1, 4538 }, - { 0xfa1c, 1, 4539 }, - { 0xfa1d, 1, 4540 }, - { 0xfa1e, 1, 2805 }, - { 0xfa20, 1, 4541 }, - { 0xfa22, 1, 4542 }, - { 0xfa25, 1, 4543 }, - { 0xfa26, 1, 4544 }, - { 0xfa2a, 1, 4545 }, - { 0xfa2b, 1, 4546 }, - { 0xfa2c, 1, 4547 }, - { 0xfa2d, 1, 4548 }, - { 0xfa30, 1, 4549 }, - { 0xfa31, 1, 4550 }, - { 0xfa32, 1, 4551 }, - { 0xfa33, 1, 4552 }, - { 0xfa34, 1, 4553 }, - { 0xfa35, 1, 4554 }, - { 0xfa36, 1, 4555 }, - { 0xfa37, 1, 4556 }, - { 0xfa38, 1, 4557 }, - { 0xfa39, 1, 4558 }, - { 0xfa3a, 1, 4559 }, - { 0xfa3b, 1, 4560 }, - { 0xfa3c, 1, 2726 }, - { 0xfa3d, 1, 4561 }, - { 0xfa3e, 1, 4562 }, - { 0xfa3f, 1, 4563 }, - { 0xfa40, 1, 4564 }, - { 0xfa41, 1, 4565 }, - { 0xfa42, 1, 4566 }, - { 0xfa43, 1, 4567 }, - { 0xfa44, 1, 4568 }, - { 0xfa45, 1, 4569 }, - { 0xfa46, 1, 4570 }, - { 0xfa47, 1, 4571 }, - { 0xfa48, 1, 4572 }, - { 0xfa49, 1, 4573 }, - { 0xfa4a, 1, 4574 }, - { 0xfa4b, 1, 4575 }, - { 0xfa4c, 1, 3401 }, - { 0xfa4d, 1, 4576 }, - { 0xfa4e, 1, 4577 }, - { 0xfa4f, 1, 4578 }, - { 0xfa50, 1, 4579 }, - { 0xfa51, 1, 3405 }, - { 0xfa52, 1, 4580 }, - { 0xfa53, 1, 4581 }, - { 0xfa54, 1, 4582 }, - { 0xfa55, 1, 4583 }, - { 0xfa56, 1, 4584 }, - { 0xfa57, 1, 4420 }, - { 0xfa58, 1, 4585 }, - { 0xfa59, 1, 4586 }, - { 0xfa5a, 1, 4587 }, - { 0xfa5b, 1, 4588 }, - { 0xfa5c, 1, 4589 }, - { 0xfa5d, 1, 4590 }, - { 0xfa5e, 1, 4590 }, - { 0xfa5f, 1, 4591 }, - { 0xfa60, 1, 4592 }, - { 0xfa61, 1, 4593 }, - { 0xfa62, 1, 4594 }, - { 0xfa63, 1, 4595 }, - { 0xfa64, 1, 4596 }, - { 0xfa65, 1, 4597 }, - { 0xfa66, 1, 4598 }, - { 0xfa67, 1, 4543 }, - { 0xfa68, 1, 4599 }, - { 0xfa69, 1, 4600 }, - { 0xfa6a, 1, 4601 }, - { 0xfb00, 2, 4602 }, - { 0xfb01, 2, 4604 }, - { 0xfb02, 2, 4606 }, - { 0xfb03, 3, 4608 }, - { 0xfb04, 3, 4611 }, - { 0xfb05, 2, 4614 }, - { 0xfb06, 2, 4614 }, - { 0xfb13, 2, 4616 }, - { 0xfb14, 2, 4618 }, - { 0xfb15, 2, 4620 }, - { 0xfb16, 2, 4622 }, - { 0xfb17, 2, 4624 }, - { 0xfb1d, 2, 4626 }, - { 0xfb1f, 2, 4628 }, - { 0xfb20, 1, 4630 }, - { 0xfb21, 1, 2228 }, - { 0xfb22, 1, 2231 }, - { 0xfb23, 1, 4631 }, - { 0xfb24, 1, 4632 }, - { 0xfb25, 1, 4633 }, - { 0xfb26, 1, 4634 }, - { 0xfb27, 1, 4635 }, - { 0xfb28, 1, 4636 }, - { 0xfb29, 1, 2176 }, - { 0xfb2a, 2, 4637 }, - { 0xfb2b, 2, 4639 }, - { 0xfb2c, 3, 4641 }, - { 0xfb2d, 3, 4644 }, - { 0xfb2e, 2, 4647 }, - { 0xfb2f, 2, 4649 }, - { 0xfb30, 2, 4651 }, - { 0xfb31, 2, 4653 }, - { 0xfb32, 2, 4655 }, - { 0xfb33, 2, 4657 }, - { 0xfb34, 2, 4659 }, - { 0xfb35, 2, 4661 }, - { 0xfb36, 2, 4663 }, - { 0xfb38, 2, 4665 }, - { 0xfb39, 2, 4667 }, - { 0xfb3a, 2, 4669 }, - { 0xfb3b, 2, 4671 }, - { 0xfb3c, 2, 4673 }, - { 0xfb3e, 2, 4675 }, - { 0xfb40, 2, 4677 }, - { 0xfb41, 2, 4679 }, - { 0xfb43, 2, 4681 }, - { 0xfb44, 2, 4683 }, - { 0xfb46, 2, 4685 }, - { 0xfb47, 2, 4687 }, - { 0xfb48, 2, 4689 }, - { 0xfb49, 2, 4691 }, - { 0xfb4a, 2, 4693 }, - { 0xfb4b, 2, 4695 }, - { 0xfb4c, 2, 4697 }, - { 0xfb4d, 2, 4699 }, - { 0xfb4e, 2, 4701 }, - { 0xfb4f, 2, 4703 }, - { 0xfb50, 1, 4705 }, - { 0xfb51, 1, 4705 }, - { 0xfb52, 1, 4706 }, - { 0xfb53, 1, 4706 }, - { 0xfb54, 1, 4706 }, - { 0xfb55, 1, 4706 }, - { 0xfb56, 1, 4707 }, - { 0xfb57, 1, 4707 }, - { 0xfb58, 1, 4707 }, - { 0xfb59, 1, 4707 }, - { 0xfb5a, 1, 4708 }, - { 0xfb5b, 1, 4708 }, - { 0xfb5c, 1, 4708 }, - { 0xfb5d, 1, 4708 }, - { 0xfb5e, 1, 4709 }, - { 0xfb5f, 1, 4709 }, - { 0xfb60, 1, 4709 }, - { 0xfb61, 1, 4709 }, - { 0xfb62, 1, 4710 }, - { 0xfb63, 1, 4710 }, - { 0xfb64, 1, 4710 }, - { 0xfb65, 1, 4710 }, - { 0xfb66, 1, 4711 }, - { 0xfb67, 1, 4711 }, - { 0xfb68, 1, 4711 }, - { 0xfb69, 1, 4711 }, - { 0xfb6a, 1, 4712 }, - { 0xfb6b, 1, 4712 }, - { 0xfb6c, 1, 4712 }, - { 0xfb6d, 1, 4712 }, - { 0xfb6e, 1, 4713 }, - { 0xfb6f, 1, 4713 }, - { 0xfb70, 1, 4713 }, - { 0xfb71, 1, 4713 }, - { 0xfb72, 1, 4714 }, - { 0xfb73, 1, 4714 }, - { 0xfb74, 1, 4714 }, - { 0xfb75, 1, 4714 }, - { 0xfb76, 1, 4715 }, - { 0xfb77, 1, 4715 }, - { 0xfb78, 1, 4715 }, - { 0xfb79, 1, 4715 }, - { 0xfb7a, 1, 4716 }, - { 0xfb7b, 1, 4716 }, - { 0xfb7c, 1, 4716 }, - { 0xfb7d, 1, 4716 }, - { 0xfb7e, 1, 4717 }, - { 0xfb7f, 1, 4717 }, - { 0xfb80, 1, 4717 }, - { 0xfb81, 1, 4717 }, - { 0xfb82, 1, 4718 }, - { 0xfb83, 1, 4718 }, - { 0xfb84, 1, 4719 }, - { 0xfb85, 1, 4719 }, - { 0xfb86, 1, 4720 }, - { 0xfb87, 1, 4720 }, - { 0xfb88, 1, 4721 }, - { 0xfb89, 1, 4721 }, - { 0xfb8a, 1, 4722 }, - { 0xfb8b, 1, 4722 }, - { 0xfb8c, 1, 4723 }, - { 0xfb8d, 1, 4723 }, - { 0xfb8e, 1, 4724 }, - { 0xfb8f, 1, 4724 }, - { 0xfb90, 1, 4724 }, - { 0xfb91, 1, 4724 }, - { 0xfb92, 1, 4725 }, - { 0xfb93, 1, 4725 }, - { 0xfb94, 1, 4725 }, - { 0xfb95, 1, 4725 }, - { 0xfb96, 1, 4726 }, - { 0xfb97, 1, 4726 }, - { 0xfb98, 1, 4726 }, - { 0xfb99, 1, 4726 }, - { 0xfb9a, 1, 4727 }, - { 0xfb9b, 1, 4727 }, - { 0xfb9c, 1, 4727 }, - { 0xfb9d, 1, 4727 }, - { 0xfb9e, 1, 4728 }, - { 0xfb9f, 1, 4728 }, - { 0xfba0, 1, 4729 }, - { 0xfba1, 1, 4729 }, - { 0xfba2, 1, 4729 }, - { 0xfba3, 1, 4729 }, - { 0xfba4, 2, 802 }, - { 0xfba5, 2, 802 }, - { 0xfba6, 1, 4730 }, - { 0xfba7, 1, 4730 }, - { 0xfba8, 1, 4730 }, - { 0xfba9, 1, 4730 }, - { 0xfbaa, 1, 4731 }, - { 0xfbab, 1, 4731 }, - { 0xfbac, 1, 4731 }, - { 0xfbad, 1, 4731 }, - { 0xfbae, 1, 4732 }, - { 0xfbaf, 1, 4732 }, - { 0xfbb0, 2, 806 }, - { 0xfbb1, 2, 806 }, - { 0xfbd3, 1, 4733 }, - { 0xfbd4, 1, 4733 }, - { 0xfbd5, 1, 4733 }, - { 0xfbd6, 1, 4733 }, - { 0xfbd7, 1, 4734 }, - { 0xfbd8, 1, 4734 }, - { 0xfbd9, 1, 4735 }, - { 0xfbda, 1, 4735 }, - { 0xfbdb, 1, 4736 }, - { 0xfbdc, 1, 4736 }, - { 0xfbdd, 2, 798 }, - { 0xfbde, 1, 4737 }, - { 0xfbdf, 1, 4737 }, - { 0xfbe0, 1, 4738 }, - { 0xfbe1, 1, 4738 }, - { 0xfbe2, 1, 4739 }, - { 0xfbe3, 1, 4739 }, - { 0xfbe4, 1, 4740 }, - { 0xfbe5, 1, 4740 }, - { 0xfbe6, 1, 4740 }, - { 0xfbe7, 1, 4740 }, - { 0xfbe8, 1, 4741 }, - { 0xfbe9, 1, 4741 }, - { 0xfbea, 3, 4742 }, - { 0xfbeb, 3, 4742 }, - { 0xfbec, 3, 4745 }, - { 0xfbed, 3, 4745 }, - { 0xfbee, 3, 4748 }, - { 0xfbef, 3, 4748 }, - { 0xfbf0, 3, 4751 }, - { 0xfbf1, 3, 4751 }, - { 0xfbf2, 3, 4754 }, - { 0xfbf3, 3, 4754 }, - { 0xfbf4, 3, 4757 }, - { 0xfbf5, 3, 4757 }, - { 0xfbf6, 3, 4760 }, - { 0xfbf7, 3, 4760 }, - { 0xfbf8, 3, 4760 }, - { 0xfbf9, 3, 4763 }, - { 0xfbfa, 3, 4763 }, - { 0xfbfb, 3, 4763 }, - { 0xfbfc, 1, 4766 }, - { 0xfbfd, 1, 4766 }, - { 0xfbfe, 1, 4766 }, - { 0xfbff, 1, 4766 }, - { 0xfc00, 3, 4767 }, - { 0xfc01, 3, 4770 }, - { 0xfc02, 3, 4773 }, - { 0xfc03, 3, 4763 }, - { 0xfc04, 3, 4776 }, - { 0xfc05, 2, 4779 }, - { 0xfc06, 2, 4781 }, - { 0xfc07, 2, 4783 }, - { 0xfc08, 2, 4785 }, - { 0xfc09, 2, 4787 }, - { 0xfc0a, 2, 4789 }, - { 0xfc0b, 2, 4791 }, - { 0xfc0c, 2, 4793 }, - { 0xfc0d, 2, 4795 }, - { 0xfc0e, 2, 4797 }, - { 0xfc0f, 2, 4799 }, - { 0xfc10, 2, 4801 }, - { 0xfc11, 2, 4803 }, - { 0xfc12, 2, 4805 }, - { 0xfc13, 2, 4807 }, - { 0xfc14, 2, 4809 }, - { 0xfc15, 2, 4811 }, - { 0xfc16, 2, 4813 }, - { 0xfc17, 2, 4815 }, - { 0xfc18, 2, 4817 }, - { 0xfc19, 2, 4819 }, - { 0xfc1a, 2, 4821 }, - { 0xfc1b, 2, 4823 }, - { 0xfc1c, 2, 4825 }, - { 0xfc1d, 2, 4827 }, - { 0xfc1e, 2, 4829 }, - { 0xfc1f, 2, 4831 }, - { 0xfc20, 2, 4833 }, - { 0xfc21, 2, 4835 }, - { 0xfc22, 2, 4837 }, - { 0xfc23, 2, 4839 }, - { 0xfc24, 2, 4841 }, - { 0xfc25, 2, 4843 }, - { 0xfc26, 2, 4845 }, - { 0xfc27, 2, 4847 }, - { 0xfc28, 2, 4849 }, - { 0xfc29, 2, 4851 }, - { 0xfc2a, 2, 4853 }, - { 0xfc2b, 2, 4855 }, - { 0xfc2c, 2, 4857 }, - { 0xfc2d, 2, 4859 }, - { 0xfc2e, 2, 4861 }, - { 0xfc2f, 2, 4863 }, - { 0xfc30, 2, 4865 }, - { 0xfc31, 2, 4867 }, - { 0xfc32, 2, 4869 }, - { 0xfc33, 2, 4871 }, - { 0xfc34, 2, 4873 }, - { 0xfc35, 2, 4875 }, - { 0xfc36, 2, 4877 }, - { 0xfc37, 2, 4879 }, - { 0xfc38, 2, 4881 }, - { 0xfc39, 2, 4883 }, - { 0xfc3a, 2, 4885 }, - { 0xfc3b, 2, 4887 }, - { 0xfc3c, 2, 4889 }, - { 0xfc3d, 2, 4891 }, - { 0xfc3e, 2, 4893 }, - { 0xfc3f, 2, 4895 }, - { 0xfc40, 2, 4897 }, - { 0xfc41, 2, 4899 }, - { 0xfc42, 2, 4901 }, - { 0xfc43, 2, 4903 }, - { 0xfc44, 2, 4905 }, - { 0xfc45, 2, 4907 }, - { 0xfc46, 2, 4909 }, - { 0xfc47, 2, 4911 }, - { 0xfc48, 2, 4913 }, - { 0xfc49, 2, 4915 }, - { 0xfc4a, 2, 4917 }, - { 0xfc4b, 2, 4919 }, - { 0xfc4c, 2, 4921 }, - { 0xfc4d, 2, 4923 }, - { 0xfc4e, 2, 4925 }, - { 0xfc4f, 2, 4927 }, - { 0xfc50, 2, 4929 }, - { 0xfc51, 2, 4931 }, - { 0xfc52, 2, 4933 }, - { 0xfc53, 2, 4935 }, - { 0xfc54, 2, 4937 }, - { 0xfc55, 2, 4939 }, - { 0xfc56, 2, 4941 }, - { 0xfc57, 2, 4943 }, - { 0xfc58, 2, 4945 }, - { 0xfc59, 2, 4947 }, - { 0xfc5a, 2, 4949 }, - { 0xfc5b, 2, 4951 }, - { 0xfc5c, 2, 4953 }, - { 0xfc5d, 2, 4955 }, - { 0xfc5e, 3, 4957 }, - { 0xfc5f, 3, 4960 }, - { 0xfc60, 3, 4963 }, - { 0xfc61, 3, 4966 }, - { 0xfc62, 3, 4969 }, - { 0xfc63, 3, 4972 }, - { 0xfc64, 3, 4975 }, - { 0xfc65, 3, 4978 }, - { 0xfc66, 3, 4773 }, - { 0xfc67, 3, 4981 }, - { 0xfc68, 3, 4763 }, - { 0xfc69, 3, 4776 }, - { 0xfc6a, 2, 4984 }, - { 0xfc6b, 2, 4986 }, - { 0xfc6c, 2, 4785 }, - { 0xfc6d, 2, 4988 }, - { 0xfc6e, 2, 4787 }, - { 0xfc6f, 2, 4789 }, - { 0xfc70, 2, 4990 }, - { 0xfc71, 2, 4992 }, - { 0xfc72, 2, 4797 }, - { 0xfc73, 2, 4994 }, - { 0xfc74, 2, 4799 }, - { 0xfc75, 2, 4801 }, - { 0xfc76, 2, 4996 }, - { 0xfc77, 2, 4998 }, - { 0xfc78, 2, 4805 }, - { 0xfc79, 2, 5000 }, - { 0xfc7a, 2, 4807 }, - { 0xfc7b, 2, 4809 }, - { 0xfc7c, 2, 4867 }, - { 0xfc7d, 2, 4869 }, - { 0xfc7e, 2, 4875 }, - { 0xfc7f, 2, 4877 }, - { 0xfc80, 2, 4879 }, - { 0xfc81, 2, 4887 }, - { 0xfc82, 2, 4889 }, - { 0xfc83, 2, 4891 }, - { 0xfc84, 2, 4893 }, - { 0xfc85, 2, 4901 }, - { 0xfc86, 2, 4903 }, - { 0xfc87, 2, 4905 }, - { 0xfc88, 2, 5002 }, - { 0xfc89, 2, 4913 }, - { 0xfc8a, 2, 5004 }, - { 0xfc8b, 2, 5006 }, - { 0xfc8c, 2, 4925 }, - { 0xfc8d, 2, 5008 }, - { 0xfc8e, 2, 4927 }, - { 0xfc8f, 2, 4929 }, - { 0xfc90, 2, 4955 }, - { 0xfc91, 2, 5010 }, - { 0xfc92, 2, 5012 }, - { 0xfc93, 2, 4945 }, - { 0xfc94, 2, 5014 }, - { 0xfc95, 2, 4947 }, - { 0xfc96, 2, 4949 }, - { 0xfc97, 3, 4767 }, - { 0xfc98, 3, 4770 }, - { 0xfc99, 3, 5016 }, - { 0xfc9a, 3, 4773 }, - { 0xfc9b, 3, 5019 }, - { 0xfc9c, 2, 4779 }, - { 0xfc9d, 2, 4781 }, - { 0xfc9e, 2, 4783 }, - { 0xfc9f, 2, 4785 }, - { 0xfca0, 2, 5022 }, - { 0xfca1, 2, 4791 }, - { 0xfca2, 2, 4793 }, - { 0xfca3, 2, 4795 }, - { 0xfca4, 2, 4797 }, - { 0xfca5, 2, 5024 }, - { 0xfca6, 2, 4805 }, - { 0xfca7, 2, 4811 }, - { 0xfca8, 2, 4813 }, - { 0xfca9, 2, 4815 }, - { 0xfcaa, 2, 4817 }, - { 0xfcab, 2, 4819 }, - { 0xfcac, 2, 4823 }, - { 0xfcad, 2, 4825 }, - { 0xfcae, 2, 4827 }, - { 0xfcaf, 2, 4829 }, - { 0xfcb0, 2, 4831 }, - { 0xfcb1, 2, 4833 }, - { 0xfcb2, 2, 5026 }, - { 0xfcb3, 2, 4835 }, - { 0xfcb4, 2, 4837 }, - { 0xfcb5, 2, 4839 }, - { 0xfcb6, 2, 4841 }, - { 0xfcb7, 2, 4843 }, - { 0xfcb8, 2, 4845 }, - { 0xfcb9, 2, 4849 }, - { 0xfcba, 2, 4851 }, - { 0xfcbb, 2, 4853 }, - { 0xfcbc, 2, 4855 }, - { 0xfcbd, 2, 4857 }, - { 0xfcbe, 2, 4859 }, - { 0xfcbf, 2, 4861 }, - { 0xfcc0, 2, 4863 }, - { 0xfcc1, 2, 4865 }, - { 0xfcc2, 2, 4871 }, - { 0xfcc3, 2, 4873 }, - { 0xfcc4, 2, 4881 }, - { 0xfcc5, 2, 4883 }, - { 0xfcc6, 2, 4885 }, - { 0xfcc7, 2, 4887 }, - { 0xfcc8, 2, 4889 }, - { 0xfcc9, 2, 4895 }, - { 0xfcca, 2, 4897 }, - { 0xfccb, 2, 4899 }, - { 0xfccc, 2, 4901 }, - { 0xfccd, 2, 5028 }, - { 0xfcce, 2, 4907 }, - { 0xfccf, 2, 4909 }, - { 0xfcd0, 2, 4911 }, - { 0xfcd1, 2, 4913 }, - { 0xfcd2, 2, 4919 }, - { 0xfcd3, 2, 4921 }, - { 0xfcd4, 2, 4923 }, - { 0xfcd5, 2, 4925 }, - { 0xfcd6, 2, 5030 }, - { 0xfcd7, 2, 4931 }, - { 0xfcd8, 2, 4933 }, - { 0xfcd9, 2, 5032 }, - { 0xfcda, 2, 4939 }, - { 0xfcdb, 2, 4941 }, - { 0xfcdc, 2, 4943 }, - { 0xfcdd, 2, 4945 }, - { 0xfcde, 2, 5034 }, - { 0xfcdf, 3, 4773 }, - { 0xfce0, 3, 5019 }, - { 0xfce1, 2, 4785 }, - { 0xfce2, 2, 5022 }, - { 0xfce3, 2, 4797 }, - { 0xfce4, 2, 5024 }, - { 0xfce5, 2, 4805 }, - { 0xfce6, 2, 5036 }, - { 0xfce7, 2, 4831 }, - { 0xfce8, 2, 5038 }, - { 0xfce9, 2, 5040 }, - { 0xfcea, 2, 5042 }, - { 0xfceb, 2, 4887 }, - { 0xfcec, 2, 4889 }, - { 0xfced, 2, 4901 }, - { 0xfcee, 2, 4925 }, - { 0xfcef, 2, 5030 }, - { 0xfcf0, 2, 4945 }, - { 0xfcf1, 2, 5034 }, - { 0xfcf2, 3, 5044 }, - { 0xfcf3, 3, 5047 }, - { 0xfcf4, 3, 5050 }, - { 0xfcf5, 2, 5053 }, - { 0xfcf6, 2, 5055 }, - { 0xfcf7, 2, 5057 }, - { 0xfcf8, 2, 5059 }, - { 0xfcf9, 2, 5061 }, - { 0xfcfa, 2, 5063 }, - { 0xfcfb, 2, 5065 }, - { 0xfcfc, 2, 5067 }, - { 0xfcfd, 2, 5069 }, - { 0xfcfe, 2, 5071 }, - { 0xfcff, 2, 5073 }, - { 0xfd00, 2, 5075 }, - { 0xfd01, 2, 5077 }, - { 0xfd02, 2, 5079 }, - { 0xfd03, 2, 5081 }, - { 0xfd04, 2, 5083 }, - { 0xfd05, 2, 5085 }, - { 0xfd06, 2, 5087 }, - { 0xfd07, 2, 5089 }, - { 0xfd08, 2, 5091 }, - { 0xfd09, 2, 5093 }, - { 0xfd0a, 2, 5095 }, - { 0xfd0b, 2, 5097 }, - { 0xfd0c, 2, 5040 }, - { 0xfd0d, 2, 5099 }, - { 0xfd0e, 2, 5101 }, - { 0xfd0f, 2, 5103 }, - { 0xfd10, 2, 5105 }, - { 0xfd11, 2, 5053 }, - { 0xfd12, 2, 5055 }, - { 0xfd13, 2, 5057 }, - { 0xfd14, 2, 5059 }, - { 0xfd15, 2, 5061 }, - { 0xfd16, 2, 5063 }, - { 0xfd17, 2, 5065 }, - { 0xfd18, 2, 5067 }, - { 0xfd19, 2, 5069 }, - { 0xfd1a, 2, 5071 }, - { 0xfd1b, 2, 5073 }, - { 0xfd1c, 2, 5075 }, - { 0xfd1d, 2, 5077 }, - { 0xfd1e, 2, 5079 }, - { 0xfd1f, 2, 5081 }, - { 0xfd20, 2, 5083 }, - { 0xfd21, 2, 5085 }, - { 0xfd22, 2, 5087 }, - { 0xfd23, 2, 5089 }, - { 0xfd24, 2, 5091 }, - { 0xfd25, 2, 5093 }, - { 0xfd26, 2, 5095 }, - { 0xfd27, 2, 5097 }, - { 0xfd28, 2, 5040 }, - { 0xfd29, 2, 5099 }, - { 0xfd2a, 2, 5101 }, - { 0xfd2b, 2, 5103 }, - { 0xfd2c, 2, 5105 }, - { 0xfd2d, 2, 5093 }, - { 0xfd2e, 2, 5095 }, - { 0xfd2f, 2, 5097 }, - { 0xfd30, 2, 5040 }, - { 0xfd31, 2, 5038 }, - { 0xfd32, 2, 5042 }, - { 0xfd33, 2, 4847 }, - { 0xfd34, 2, 4825 }, - { 0xfd35, 2, 4827 }, - { 0xfd36, 2, 4829 }, - { 0xfd37, 2, 5093 }, - { 0xfd38, 2, 5095 }, - { 0xfd39, 2, 5097 }, - { 0xfd3a, 2, 4847 }, - { 0xfd3b, 2, 4849 }, - { 0xfd3c, 2, 5107 }, - { 0xfd3d, 2, 5107 }, - { 0xfd50, 3, 5109 }, - { 0xfd51, 3, 5112 }, - { 0xfd52, 3, 5112 }, - { 0xfd53, 3, 5115 }, - { 0xfd54, 3, 5118 }, - { 0xfd55, 3, 5121 }, - { 0xfd56, 3, 5124 }, - { 0xfd57, 3, 5127 }, - { 0xfd58, 3, 5130 }, - { 0xfd59, 3, 5130 }, - { 0xfd5a, 3, 5133 }, - { 0xfd5b, 3, 5136 }, - { 0xfd5c, 3, 5139 }, - { 0xfd5d, 3, 5142 }, - { 0xfd5e, 3, 5145 }, - { 0xfd5f, 3, 5148 }, - { 0xfd60, 3, 5148 }, - { 0xfd61, 3, 5151 }, - { 0xfd62, 3, 5154 }, - { 0xfd63, 3, 5154 }, - { 0xfd64, 3, 5157 }, - { 0xfd65, 3, 5157 }, - { 0xfd66, 3, 5160 }, - { 0xfd67, 3, 5163 }, - { 0xfd68, 3, 5163 }, - { 0xfd69, 3, 5166 }, - { 0xfd6a, 3, 5169 }, - { 0xfd6b, 3, 5169 }, - { 0xfd6c, 3, 5172 }, - { 0xfd6d, 3, 5172 }, - { 0xfd6e, 3, 5175 }, - { 0xfd6f, 3, 5178 }, - { 0xfd70, 3, 5178 }, - { 0xfd71, 3, 5181 }, - { 0xfd72, 3, 5181 }, - { 0xfd73, 3, 5184 }, - { 0xfd74, 3, 5187 }, - { 0xfd75, 3, 5190 }, - { 0xfd76, 3, 5193 }, - { 0xfd77, 3, 5193 }, - { 0xfd78, 3, 5196 }, - { 0xfd79, 3, 5199 }, - { 0xfd7a, 3, 5202 }, - { 0xfd7b, 3, 5205 }, - { 0xfd7c, 3, 5208 }, - { 0xfd7d, 3, 5208 }, - { 0xfd7e, 3, 5211 }, - { 0xfd7f, 3, 5214 }, - { 0xfd80, 3, 5217 }, - { 0xfd81, 3, 5220 }, - { 0xfd82, 3, 5223 }, - { 0xfd83, 3, 5226 }, - { 0xfd84, 3, 5226 }, - { 0xfd85, 3, 5229 }, - { 0xfd86, 3, 5229 }, - { 0xfd87, 3, 5232 }, - { 0xfd88, 3, 5232 }, - { 0xfd89, 3, 5235 }, - { 0xfd8a, 3, 5238 }, - { 0xfd8b, 3, 5241 }, - { 0xfd8c, 3, 5244 }, - { 0xfd8d, 3, 5247 }, - { 0xfd8e, 3, 5250 }, - { 0xfd8f, 3, 5253 }, - { 0xfd92, 3, 5256 }, - { 0xfd93, 3, 5259 }, - { 0xfd94, 3, 5262 }, - { 0xfd95, 3, 5265 }, - { 0xfd96, 3, 5268 }, - { 0xfd97, 3, 5271 }, - { 0xfd98, 3, 5271 }, - { 0xfd99, 3, 5274 }, - { 0xfd9a, 3, 5277 }, - { 0xfd9b, 3, 5280 }, - { 0xfd9c, 3, 5283 }, - { 0xfd9d, 3, 5283 }, - { 0xfd9e, 3, 5286 }, - { 0xfd9f, 3, 5289 }, - { 0xfda0, 3, 5292 }, - { 0xfda1, 3, 5295 }, - { 0xfda2, 3, 5298 }, - { 0xfda3, 3, 5301 }, - { 0xfda4, 3, 5304 }, - { 0xfda5, 3, 5307 }, - { 0xfda6, 3, 5310 }, - { 0xfda7, 3, 5313 }, - { 0xfda8, 3, 5316 }, - { 0xfda9, 3, 5319 }, - { 0xfdaa, 3, 5322 }, - { 0xfdab, 3, 5325 }, - { 0xfdac, 3, 5328 }, - { 0xfdad, 3, 5331 }, - { 0xfdae, 3, 5334 }, - { 0xfdaf, 3, 5337 }, - { 0xfdb0, 3, 5340 }, - { 0xfdb1, 3, 5343 }, - { 0xfdb2, 3, 5346 }, - { 0xfdb3, 3, 5349 }, - { 0xfdb4, 3, 5211 }, - { 0xfdb5, 3, 5217 }, - { 0xfdb6, 3, 5352 }, - { 0xfdb7, 3, 5355 }, - { 0xfdb8, 3, 5358 }, - { 0xfdb9, 3, 5361 }, - { 0xfdba, 3, 5364 }, - { 0xfdbb, 3, 5367 }, - { 0xfdbc, 3, 5364 }, - { 0xfdbd, 3, 5358 }, - { 0xfdbe, 3, 5370 }, - { 0xfdbf, 3, 5373 }, - { 0xfdc0, 3, 5376 }, - { 0xfdc1, 3, 5379 }, - { 0xfdc2, 3, 5382 }, - { 0xfdc3, 3, 5367 }, - { 0xfdc4, 3, 5190 }, - { 0xfdc5, 3, 5160 }, - { 0xfdc6, 3, 5385 }, - { 0xfdc7, 3, 5388 }, - { 0xfdf0, 3, 5391 }, - { 0xfdf1, 3, 5394 }, - { 0xfdf2, 4, 5397 }, - { 0xfdf3, 4, 5401 }, - { 0xfdf4, 4, 5405 }, - { 0xfdf5, 4, 5409 }, - { 0xfdf6, 4, 5413 }, - { 0xfdf7, 4, 5417 }, - { 0xfdf8, 4, 5421 }, - { 0xfdf9, 3, 5425 }, - { 0xfdfa, 18, 5428 }, - { 0xfdfb, 8, 5446 }, - { 0xfdfc, 4, 5454 }, - { 0xfe30, 2, 2139 }, - { 0xfe31, 1, 5458 }, - { 0xfe32, 1, 5459 }, - { 0xfe33, 1, 5460 }, - { 0xfe34, 1, 5460 }, - { 0xfe35, 1, 2179 }, - { 0xfe36, 1, 2180 }, - { 0xfe37, 1, 5461 }, - { 0xfe38, 1, 5462 }, - { 0xfe39, 1, 5463 }, - { 0xfe3a, 1, 5464 }, - { 0xfe3b, 1, 5465 }, - { 0xfe3c, 1, 5466 }, - { 0xfe3d, 1, 5467 }, - { 0xfe3e, 1, 5468 }, - { 0xfe3f, 1, 2425 }, - { 0xfe40, 1, 2426 }, - { 0xfe41, 1, 5469 }, - { 0xfe42, 1, 5470 }, - { 0xfe43, 1, 5471 }, - { 0xfe44, 1, 5472 }, - { 0xfe49, 2, 2156 }, - { 0xfe4a, 2, 2156 }, - { 0xfe4b, 2, 2156 }, - { 0xfe4c, 2, 2156 }, - { 0xfe4d, 1, 5460 }, - { 0xfe4e, 1, 5460 }, - { 0xfe4f, 1, 5460 }, - { 0xfe50, 1, 5473 }, - { 0xfe51, 1, 5474 }, - { 0xfe52, 1, 2138 }, - { 0xfe54, 1, 621 }, - { 0xfe55, 1, 5475 }, - { 0xfe56, 1, 5476 }, - { 0xfe57, 1, 5477 }, - { 0xfe58, 1, 5458 }, - { 0xfe59, 1, 2179 }, - { 0xfe5a, 1, 2180 }, - { 0xfe5b, 1, 5461 }, - { 0xfe5c, 1, 5462 }, - { 0xfe5d, 1, 5463 }, - { 0xfe5e, 1, 5464 }, - { 0xfe5f, 1, 5478 }, - { 0xfe60, 1, 5479 }, - { 0xfe61, 1, 5480 }, - { 0xfe62, 1, 2176 }, - { 0xfe63, 1, 5481 }, - { 0xfe64, 1, 5482 }, - { 0xfe65, 1, 5483 }, - { 0xfe66, 1, 2178 }, - { 0xfe68, 1, 5484 }, - { 0xfe69, 1, 5485 }, - { 0xfe6a, 1, 5486 }, - { 0xfe6b, 1, 5487 }, - { 0xfe70, 2, 5488 }, - { 0xfe71, 2, 5490 }, - { 0xfe72, 2, 5492 }, - { 0xfe74, 2, 5494 }, - { 0xfe76, 2, 5496 }, - { 0xfe77, 2, 5498 }, - { 0xfe78, 2, 5500 }, - { 0xfe79, 2, 5502 }, - { 0xfe7a, 2, 5504 }, - { 0xfe7b, 2, 5506 }, - { 0xfe7c, 2, 5508 }, - { 0xfe7d, 2, 5510 }, - { 0xfe7e, 2, 5512 }, - { 0xfe7f, 2, 5514 }, - { 0xfe80, 1, 5516 }, - { 0xfe81, 2, 784 }, - { 0xfe82, 2, 784 }, - { 0xfe83, 2, 786 }, - { 0xfe84, 2, 786 }, - { 0xfe85, 2, 788 }, - { 0xfe86, 2, 788 }, - { 0xfe87, 2, 790 }, - { 0xfe88, 2, 790 }, - { 0xfe89, 2, 792 }, - { 0xfe8a, 2, 792 }, - { 0xfe8b, 2, 792 }, - { 0xfe8c, 2, 792 }, - { 0xfe8d, 1, 5517 }, - { 0xfe8e, 1, 5517 }, - { 0xfe8f, 1, 5518 }, - { 0xfe90, 1, 5518 }, - { 0xfe91, 1, 5518 }, - { 0xfe92, 1, 5518 }, - { 0xfe93, 1, 5519 }, - { 0xfe94, 1, 5519 }, - { 0xfe95, 1, 5520 }, - { 0xfe96, 1, 5520 }, - { 0xfe97, 1, 5520 }, - { 0xfe98, 1, 5520 }, - { 0xfe99, 1, 5521 }, - { 0xfe9a, 1, 5521 }, - { 0xfe9b, 1, 5521 }, - { 0xfe9c, 1, 5521 }, - { 0xfe9d, 1, 5522 }, - { 0xfe9e, 1, 5522 }, - { 0xfe9f, 1, 5522 }, - { 0xfea0, 1, 5522 }, - { 0xfea1, 1, 5523 }, - { 0xfea2, 1, 5523 }, - { 0xfea3, 1, 5523 }, - { 0xfea4, 1, 5523 }, - { 0xfea5, 1, 5524 }, - { 0xfea6, 1, 5524 }, - { 0xfea7, 1, 5524 }, - { 0xfea8, 1, 5524 }, - { 0xfea9, 1, 5525 }, - { 0xfeaa, 1, 5525 }, - { 0xfeab, 1, 5526 }, - { 0xfeac, 1, 5526 }, - { 0xfead, 1, 5527 }, - { 0xfeae, 1, 5527 }, - { 0xfeaf, 1, 5528 }, - { 0xfeb0, 1, 5528 }, - { 0xfeb1, 1, 5529 }, - { 0xfeb2, 1, 5529 }, - { 0xfeb3, 1, 5529 }, - { 0xfeb4, 1, 5529 }, - { 0xfeb5, 1, 5530 }, - { 0xfeb6, 1, 5530 }, - { 0xfeb7, 1, 5530 }, - { 0xfeb8, 1, 5530 }, - { 0xfeb9, 1, 5531 }, - { 0xfeba, 1, 5531 }, - { 0xfebb, 1, 5531 }, - { 0xfebc, 1, 5531 }, - { 0xfebd, 1, 5532 }, - { 0xfebe, 1, 5532 }, - { 0xfebf, 1, 5532 }, - { 0xfec0, 1, 5532 }, - { 0xfec1, 1, 5533 }, - { 0xfec2, 1, 5533 }, - { 0xfec3, 1, 5533 }, - { 0xfec4, 1, 5533 }, - { 0xfec5, 1, 5534 }, - { 0xfec6, 1, 5534 }, - { 0xfec7, 1, 5534 }, - { 0xfec8, 1, 5534 }, - { 0xfec9, 1, 5535 }, - { 0xfeca, 1, 5535 }, - { 0xfecb, 1, 5535 }, - { 0xfecc, 1, 5535 }, - { 0xfecd, 1, 5536 }, - { 0xfece, 1, 5536 }, - { 0xfecf, 1, 5536 }, - { 0xfed0, 1, 5536 }, - { 0xfed1, 1, 5537 }, - { 0xfed2, 1, 5537 }, - { 0xfed3, 1, 5537 }, - { 0xfed4, 1, 5537 }, - { 0xfed5, 1, 5538 }, - { 0xfed6, 1, 5538 }, - { 0xfed7, 1, 5538 }, - { 0xfed8, 1, 5538 }, - { 0xfed9, 1, 5539 }, - { 0xfeda, 1, 5539 }, - { 0xfedb, 1, 5539 }, - { 0xfedc, 1, 5539 }, - { 0xfedd, 1, 5540 }, - { 0xfede, 1, 5540 }, - { 0xfedf, 1, 5540 }, - { 0xfee0, 1, 5540 }, - { 0xfee1, 1, 5541 }, - { 0xfee2, 1, 5541 }, - { 0xfee3, 1, 5541 }, - { 0xfee4, 1, 5541 }, - { 0xfee5, 1, 5542 }, - { 0xfee6, 1, 5542 }, - { 0xfee7, 1, 5542 }, - { 0xfee8, 1, 5542 }, - { 0xfee9, 1, 5543 }, - { 0xfeea, 1, 5543 }, - { 0xfeeb, 1, 5543 }, - { 0xfeec, 1, 5543 }, - { 0xfeed, 1, 5544 }, - { 0xfeee, 1, 5544 }, - { 0xfeef, 1, 4741 }, - { 0xfef0, 1, 4741 }, - { 0xfef1, 1, 5545 }, - { 0xfef2, 1, 5545 }, - { 0xfef3, 1, 5545 }, - { 0xfef4, 1, 5545 }, - { 0xfef5, 3, 5546 }, - { 0xfef6, 3, 5546 }, - { 0xfef7, 3, 5549 }, - { 0xfef8, 3, 5549 }, - { 0xfef9, 3, 5552 }, - { 0xfefa, 3, 5552 }, - { 0xfefb, 2, 5555 }, - { 0xfefc, 2, 5555 }, - { 0xff01, 1, 5477 }, - { 0xff02, 1, 5557 }, - { 0xff03, 1, 5478 }, - { 0xff04, 1, 5485 }, - { 0xff05, 1, 5486 }, - { 0xff06, 1, 5479 }, - { 0xff07, 1, 5558 }, - { 0xff08, 1, 2179 }, - { 0xff09, 1, 2180 }, - { 0xff0a, 1, 5480 }, - { 0xff0b, 1, 2176 }, - { 0xff0c, 1, 5473 }, - { 0xff0d, 1, 5481 }, - { 0xff0e, 1, 2138 }, - { 0xff0f, 1, 5559 }, - { 0xff10, 1, 2168 }, - { 0xff11, 1, 13 }, - { 0xff12, 1, 6 }, - { 0xff13, 1, 7 }, - { 0xff14, 1, 2170 }, - { 0xff15, 1, 2171 }, - { 0xff16, 1, 2172 }, - { 0xff17, 1, 2173 }, - { 0xff18, 1, 2174 }, - { 0xff19, 1, 2175 }, - { 0xff1a, 1, 5475 }, - { 0xff1b, 1, 621 }, - { 0xff1c, 1, 5482 }, - { 0xff1d, 1, 2178 }, - { 0xff1e, 1, 5483 }, - { 0xff1f, 1, 5476 }, - { 0xff20, 1, 5487 }, - { 0xff21, 1, 2649 }, - { 0xff22, 1, 2223 }, - { 0xff23, 1, 2190 }, - { 0xff24, 1, 2236 }, - { 0xff25, 1, 2225 }, - { 0xff26, 1, 2226 }, - { 0xff27, 1, 2650 }, - { 0xff28, 1, 2203 }, - { 0xff29, 1, 2205 }, - { 0xff2a, 1, 2651 }, - { 0xff2b, 1, 2222 }, - { 0xff2c, 1, 2206 }, - { 0xff2d, 1, 2227 }, - { 0xff2e, 1, 2207 }, - { 0xff2f, 1, 2652 }, - { 0xff30, 1, 2210 }, - { 0xff31, 1, 2211 }, - { 0xff32, 1, 2212 }, - { 0xff33, 1, 2653 }, - { 0xff34, 1, 2654 }, - { 0xff35, 1, 2655 }, - { 0xff36, 1, 2283 }, - { 0xff37, 1, 2656 }, - { 0xff38, 1, 2295 }, - { 0xff39, 1, 2657 }, - { 0xff3a, 1, 2220 }, - { 0xff3b, 1, 5560 }, - { 0xff3c, 1, 5484 }, - { 0xff3d, 1, 5561 }, - { 0xff3e, 1, 5562 }, - { 0xff3f, 1, 5460 }, - { 0xff40, 1, 2113 }, - { 0xff41, 1, 3 }, - { 0xff42, 1, 2658 }, - { 0xff43, 1, 2325 }, - { 0xff44, 1, 2237 }, - { 0xff45, 1, 2224 }, - { 0xff46, 1, 2659 }, - { 0xff47, 1, 2202 }, - { 0xff48, 1, 588 }, - { 0xff49, 1, 2169 }, - { 0xff4a, 1, 590 }, - { 0xff4b, 1, 2660 }, - { 0xff4c, 1, 610 }, - { 0xff4d, 1, 2326 }, - { 0xff4e, 1, 2181 }, - { 0xff4f, 1, 14 }, - { 0xff50, 1, 2661 }, - { 0xff51, 1, 2662 }, - { 0xff52, 1, 591 }, - { 0xff53, 1, 356 }, - { 0xff54, 1, 2663 }, - { 0xff55, 1, 2664 }, - { 0xff56, 1, 2308 }, - { 0xff57, 1, 595 }, - { 0xff58, 1, 611 }, - { 0xff59, 1, 596 }, - { 0xff5a, 1, 2665 }, - { 0xff5b, 1, 5461 }, - { 0xff5c, 1, 5563 }, - { 0xff5d, 1, 5462 }, - { 0xff5e, 1, 5564 }, - { 0xff5f, 1, 5565 }, - { 0xff60, 1, 5566 }, - { 0xff61, 1, 5567 }, - { 0xff62, 1, 5469 }, - { 0xff63, 1, 5470 }, - { 0xff64, 1, 5474 }, - { 0xff65, 1, 5568 }, - { 0xff66, 1, 3530 }, - { 0xff67, 1, 5569 }, - { 0xff68, 1, 5570 }, - { 0xff69, 1, 5571 }, - { 0xff6a, 1, 5572 }, - { 0xff6b, 1, 5573 }, - { 0xff6c, 1, 5574 }, - { 0xff6d, 1, 5575 }, - { 0xff6e, 1, 5576 }, - { 0xff6f, 1, 5577 }, - { 0xff70, 1, 5578 }, - { 0xff71, 1, 3484 }, - { 0xff72, 1, 3485 }, - { 0xff73, 1, 3486 }, - { 0xff74, 1, 3487 }, - { 0xff75, 1, 3488 }, - { 0xff76, 1, 3489 }, - { 0xff77, 1, 3490 }, - { 0xff78, 1, 3491 }, - { 0xff79, 1, 3492 }, - { 0xff7a, 1, 3493 }, - { 0xff7b, 1, 3494 }, - { 0xff7c, 1, 3495 }, - { 0xff7d, 1, 3496 }, - { 0xff7e, 1, 3497 }, - { 0xff7f, 1, 3498 }, - { 0xff80, 1, 3499 }, - { 0xff81, 1, 3500 }, - { 0xff82, 1, 3501 }, - { 0xff83, 1, 3502 }, - { 0xff84, 1, 3503 }, - { 0xff85, 1, 3504 }, - { 0xff86, 1, 3505 }, - { 0xff87, 1, 3506 }, - { 0xff88, 1, 3507 }, - { 0xff89, 1, 3508 }, - { 0xff8a, 1, 3509 }, - { 0xff8b, 1, 3510 }, - { 0xff8c, 1, 3511 }, - { 0xff8d, 1, 3512 }, - { 0xff8e, 1, 3513 }, - { 0xff8f, 1, 3514 }, - { 0xff90, 1, 3515 }, - { 0xff91, 1, 3516 }, - { 0xff92, 1, 3517 }, - { 0xff93, 1, 3518 }, - { 0xff94, 1, 3519 }, - { 0xff95, 1, 3520 }, - { 0xff96, 1, 3521 }, - { 0xff97, 1, 3522 }, - { 0xff98, 1, 3523 }, - { 0xff99, 1, 3524 }, - { 0xff9a, 1, 3525 }, - { 0xff9b, 1, 3526 }, - { 0xff9c, 1, 3527 }, - { 0xff9d, 1, 5579 }, - { 0xff9e, 1, 5580 }, - { 0xff9f, 1, 5581 }, - { 0xffa0, 1, 3074 }, - { 0xffa1, 1, 3023 }, - { 0xffa2, 1, 3024 }, - { 0xffa3, 1, 3025 }, - { 0xffa4, 1, 3026 }, - { 0xffa5, 1, 3027 }, - { 0xffa6, 1, 3028 }, - { 0xffa7, 1, 3029 }, - { 0xffa8, 1, 3030 }, - { 0xffa9, 1, 3031 }, - { 0xffaa, 1, 3032 }, - { 0xffab, 1, 3033 }, - { 0xffac, 1, 3034 }, - { 0xffad, 1, 3035 }, - { 0xffae, 1, 3036 }, - { 0xffaf, 1, 3037 }, - { 0xffb0, 1, 3038 }, - { 0xffb1, 1, 3039 }, - { 0xffb2, 1, 3040 }, - { 0xffb3, 1, 3041 }, - { 0xffb4, 1, 3042 }, - { 0xffb5, 1, 3043 }, - { 0xffb6, 1, 3044 }, - { 0xffb7, 1, 3045 }, - { 0xffb8, 1, 3046 }, - { 0xffb9, 1, 3047 }, - { 0xffba, 1, 3048 }, - { 0xffbb, 1, 3049 }, - { 0xffbc, 1, 3050 }, - { 0xffbd, 1, 3051 }, - { 0xffbe, 1, 3052 }, - { 0xffc2, 1, 3053 }, - { 0xffc3, 1, 3054 }, - { 0xffc4, 1, 3055 }, - { 0xffc5, 1, 3056 }, - { 0xffc6, 1, 3057 }, - { 0xffc7, 1, 3058 }, - { 0xffca, 1, 3059 }, - { 0xffcb, 1, 3060 }, - { 0xffcc, 1, 3061 }, - { 0xffcd, 1, 3062 }, - { 0xffce, 1, 3063 }, - { 0xffcf, 1, 3064 }, - { 0xffd2, 1, 3065 }, - { 0xffd3, 1, 3066 }, - { 0xffd4, 1, 3067 }, - { 0xffd5, 1, 3068 }, - { 0xffd6, 1, 3069 }, - { 0xffd7, 1, 3070 }, - { 0xffda, 1, 3071 }, - { 0xffdb, 1, 3072 }, - { 0xffdc, 1, 3073 }, - { 0xffe0, 1, 5582 }, - { 0xffe1, 1, 5583 }, - { 0xffe2, 1, 5584 }, - { 0xffe3, 2, 4 }, - { 0xffe4, 1, 5585 }, - { 0xffe5, 1, 5586 }, - { 0xffe6, 1, 5587 }, - { 0xffe8, 1, 5588 }, - { 0xffe9, 1, 5589 }, - { 0xffea, 1, 5590 }, - { 0xffeb, 1, 5591 }, - { 0xffec, 1, 5592 }, - { 0xffed, 1, 5593 }, - { 0xffee, 1, 5594 }, - { 0x1d15e, 2, 5595 }, - { 0x1d15f, 2, 5597 }, - { 0x1d160, 3, 5599 }, - { 0x1d161, 3, 5602 }, - { 0x1d162, 3, 5605 }, - { 0x1d163, 3, 5608 }, - { 0x1d164, 3, 5611 }, - { 0x1d1bb, 2, 5614 }, - { 0x1d1bc, 2, 5616 }, - { 0x1d1bd, 3, 5618 }, - { 0x1d1be, 3, 5621 }, - { 0x1d1bf, 3, 5624 }, - { 0x1d1c0, 3, 5627 }, - { 0x1d400, 1, 2649 }, - { 0x1d401, 1, 2223 }, - { 0x1d402, 1, 2190 }, - { 0x1d403, 1, 2236 }, - { 0x1d404, 1, 2225 }, - { 0x1d405, 1, 2226 }, - { 0x1d406, 1, 2650 }, - { 0x1d407, 1, 2203 }, - { 0x1d408, 1, 2205 }, - { 0x1d409, 1, 2651 }, - { 0x1d40a, 1, 2222 }, - { 0x1d40b, 1, 2206 }, - { 0x1d40c, 1, 2227 }, - { 0x1d40d, 1, 2207 }, - { 0x1d40e, 1, 2652 }, - { 0x1d40f, 1, 2210 }, - { 0x1d410, 1, 2211 }, - { 0x1d411, 1, 2212 }, - { 0x1d412, 1, 2653 }, - { 0x1d413, 1, 2654 }, - { 0x1d414, 1, 2655 }, - { 0x1d415, 1, 2283 }, - { 0x1d416, 1, 2656 }, - { 0x1d417, 1, 2295 }, - { 0x1d418, 1, 2657 }, - { 0x1d419, 1, 2220 }, - { 0x1d41a, 1, 3 }, - { 0x1d41b, 1, 2658 }, - { 0x1d41c, 1, 2325 }, - { 0x1d41d, 1, 2237 }, - { 0x1d41e, 1, 2224 }, - { 0x1d41f, 1, 2659 }, - { 0x1d420, 1, 2202 }, - { 0x1d421, 1, 588 }, - { 0x1d422, 1, 2169 }, - { 0x1d423, 1, 590 }, - { 0x1d424, 1, 2660 }, - { 0x1d425, 1, 610 }, - { 0x1d426, 1, 2326 }, - { 0x1d427, 1, 2181 }, - { 0x1d428, 1, 14 }, - { 0x1d429, 1, 2661 }, - { 0x1d42a, 1, 2662 }, - { 0x1d42b, 1, 591 }, - { 0x1d42c, 1, 356 }, - { 0x1d42d, 1, 2663 }, - { 0x1d42e, 1, 2664 }, - { 0x1d42f, 1, 2308 }, - { 0x1d430, 1, 595 }, - { 0x1d431, 1, 611 }, - { 0x1d432, 1, 596 }, - { 0x1d433, 1, 2665 }, - { 0x1d434, 1, 2649 }, - { 0x1d435, 1, 2223 }, - { 0x1d436, 1, 2190 }, - { 0x1d437, 1, 2236 }, - { 0x1d438, 1, 2225 }, - { 0x1d439, 1, 2226 }, - { 0x1d43a, 1, 2650 }, - { 0x1d43b, 1, 2203 }, - { 0x1d43c, 1, 2205 }, - { 0x1d43d, 1, 2651 }, - { 0x1d43e, 1, 2222 }, - { 0x1d43f, 1, 2206 }, - { 0x1d440, 1, 2227 }, - { 0x1d441, 1, 2207 }, - { 0x1d442, 1, 2652 }, - { 0x1d443, 1, 2210 }, - { 0x1d444, 1, 2211 }, - { 0x1d445, 1, 2212 }, - { 0x1d446, 1, 2653 }, - { 0x1d447, 1, 2654 }, - { 0x1d448, 1, 2655 }, - { 0x1d449, 1, 2283 }, - { 0x1d44a, 1, 2656 }, - { 0x1d44b, 1, 2295 }, - { 0x1d44c, 1, 2657 }, - { 0x1d44d, 1, 2220 }, - { 0x1d44e, 1, 3 }, - { 0x1d44f, 1, 2658 }, - { 0x1d450, 1, 2325 }, - { 0x1d451, 1, 2237 }, - { 0x1d452, 1, 2224 }, - { 0x1d453, 1, 2659 }, - { 0x1d454, 1, 2202 }, - { 0x1d456, 1, 2169 }, - { 0x1d457, 1, 590 }, - { 0x1d458, 1, 2660 }, - { 0x1d459, 1, 610 }, - { 0x1d45a, 1, 2326 }, - { 0x1d45b, 1, 2181 }, - { 0x1d45c, 1, 14 }, - { 0x1d45d, 1, 2661 }, - { 0x1d45e, 1, 2662 }, - { 0x1d45f, 1, 591 }, - { 0x1d460, 1, 356 }, - { 0x1d461, 1, 2663 }, - { 0x1d462, 1, 2664 }, - { 0x1d463, 1, 2308 }, - { 0x1d464, 1, 595 }, - { 0x1d465, 1, 611 }, - { 0x1d466, 1, 596 }, - { 0x1d467, 1, 2665 }, - { 0x1d468, 1, 2649 }, - { 0x1d469, 1, 2223 }, - { 0x1d46a, 1, 2190 }, - { 0x1d46b, 1, 2236 }, - { 0x1d46c, 1, 2225 }, - { 0x1d46d, 1, 2226 }, - { 0x1d46e, 1, 2650 }, - { 0x1d46f, 1, 2203 }, - { 0x1d470, 1, 2205 }, - { 0x1d471, 1, 2651 }, - { 0x1d472, 1, 2222 }, - { 0x1d473, 1, 2206 }, - { 0x1d474, 1, 2227 }, - { 0x1d475, 1, 2207 }, - { 0x1d476, 1, 2652 }, - { 0x1d477, 1, 2210 }, - { 0x1d478, 1, 2211 }, - { 0x1d479, 1, 2212 }, - { 0x1d47a, 1, 2653 }, - { 0x1d47b, 1, 2654 }, - { 0x1d47c, 1, 2655 }, - { 0x1d47d, 1, 2283 }, - { 0x1d47e, 1, 2656 }, - { 0x1d47f, 1, 2295 }, - { 0x1d480, 1, 2657 }, - { 0x1d481, 1, 2220 }, - { 0x1d482, 1, 3 }, - { 0x1d483, 1, 2658 }, - { 0x1d484, 1, 2325 }, - { 0x1d485, 1, 2237 }, - { 0x1d486, 1, 2224 }, - { 0x1d487, 1, 2659 }, - { 0x1d488, 1, 2202 }, - { 0x1d489, 1, 588 }, - { 0x1d48a, 1, 2169 }, - { 0x1d48b, 1, 590 }, - { 0x1d48c, 1, 2660 }, - { 0x1d48d, 1, 610 }, - { 0x1d48e, 1, 2326 }, - { 0x1d48f, 1, 2181 }, - { 0x1d490, 1, 14 }, - { 0x1d491, 1, 2661 }, - { 0x1d492, 1, 2662 }, - { 0x1d493, 1, 591 }, - { 0x1d494, 1, 356 }, - { 0x1d495, 1, 2663 }, - { 0x1d496, 1, 2664 }, - { 0x1d497, 1, 2308 }, - { 0x1d498, 1, 595 }, - { 0x1d499, 1, 611 }, - { 0x1d49a, 1, 596 }, - { 0x1d49b, 1, 2665 }, - { 0x1d49c, 1, 2649 }, - { 0x1d49e, 1, 2190 }, - { 0x1d49f, 1, 2236 }, - { 0x1d4a2, 1, 2650 }, - { 0x1d4a5, 1, 2651 }, - { 0x1d4a6, 1, 2222 }, - { 0x1d4a9, 1, 2207 }, - { 0x1d4aa, 1, 2652 }, - { 0x1d4ab, 1, 2210 }, - { 0x1d4ac, 1, 2211 }, - { 0x1d4ae, 1, 2653 }, - { 0x1d4af, 1, 2654 }, - { 0x1d4b0, 1, 2655 }, - { 0x1d4b1, 1, 2283 }, - { 0x1d4b2, 1, 2656 }, - { 0x1d4b3, 1, 2295 }, - { 0x1d4b4, 1, 2657 }, - { 0x1d4b5, 1, 2220 }, - { 0x1d4b6, 1, 3 }, - { 0x1d4b7, 1, 2658 }, - { 0x1d4b8, 1, 2325 }, - { 0x1d4b9, 1, 2237 }, - { 0x1d4bb, 1, 2659 }, - { 0x1d4bd, 1, 588 }, - { 0x1d4be, 1, 2169 }, - { 0x1d4bf, 1, 590 }, - { 0x1d4c0, 1, 2660 }, - { 0x1d4c2, 1, 2326 }, - { 0x1d4c3, 1, 2181 }, - { 0x1d4c5, 1, 2661 }, - { 0x1d4c6, 1, 2662 }, - { 0x1d4c7, 1, 591 }, - { 0x1d4c8, 1, 356 }, - { 0x1d4c9, 1, 2663 }, - { 0x1d4ca, 1, 2664 }, - { 0x1d4cb, 1, 2308 }, - { 0x1d4cc, 1, 595 }, - { 0x1d4cd, 1, 611 }, - { 0x1d4ce, 1, 596 }, - { 0x1d4cf, 1, 2665 }, - { 0x1d4d0, 1, 2649 }, - { 0x1d4d1, 1, 2223 }, - { 0x1d4d2, 1, 2190 }, - { 0x1d4d3, 1, 2236 }, - { 0x1d4d4, 1, 2225 }, - { 0x1d4d5, 1, 2226 }, - { 0x1d4d6, 1, 2650 }, - { 0x1d4d7, 1, 2203 }, - { 0x1d4d8, 1, 2205 }, - { 0x1d4d9, 1, 2651 }, - { 0x1d4da, 1, 2222 }, - { 0x1d4db, 1, 2206 }, - { 0x1d4dc, 1, 2227 }, - { 0x1d4dd, 1, 2207 }, - { 0x1d4de, 1, 2652 }, - { 0x1d4df, 1, 2210 }, - { 0x1d4e0, 1, 2211 }, - { 0x1d4e1, 1, 2212 }, - { 0x1d4e2, 1, 2653 }, - { 0x1d4e3, 1, 2654 }, - { 0x1d4e4, 1, 2655 }, - { 0x1d4e5, 1, 2283 }, - { 0x1d4e6, 1, 2656 }, - { 0x1d4e7, 1, 2295 }, - { 0x1d4e8, 1, 2657 }, - { 0x1d4e9, 1, 2220 }, - { 0x1d4ea, 1, 3 }, - { 0x1d4eb, 1, 2658 }, - { 0x1d4ec, 1, 2325 }, - { 0x1d4ed, 1, 2237 }, - { 0x1d4ee, 1, 2224 }, - { 0x1d4ef, 1, 2659 }, - { 0x1d4f0, 1, 2202 }, - { 0x1d4f1, 1, 588 }, - { 0x1d4f2, 1, 2169 }, - { 0x1d4f3, 1, 590 }, - { 0x1d4f4, 1, 2660 }, - { 0x1d4f5, 1, 610 }, - { 0x1d4f6, 1, 2326 }, - { 0x1d4f7, 1, 2181 }, - { 0x1d4f8, 1, 14 }, - { 0x1d4f9, 1, 2661 }, - { 0x1d4fa, 1, 2662 }, - { 0x1d4fb, 1, 591 }, - { 0x1d4fc, 1, 356 }, - { 0x1d4fd, 1, 2663 }, - { 0x1d4fe, 1, 2664 }, - { 0x1d4ff, 1, 2308 }, - { 0x1d500, 1, 595 }, - { 0x1d501, 1, 611 }, - { 0x1d502, 1, 596 }, - { 0x1d503, 1, 2665 }, - { 0x1d504, 1, 2649 }, - { 0x1d505, 1, 2223 }, - { 0x1d507, 1, 2236 }, - { 0x1d508, 1, 2225 }, - { 0x1d509, 1, 2226 }, - { 0x1d50a, 1, 2650 }, - { 0x1d50d, 1, 2651 }, - { 0x1d50e, 1, 2222 }, - { 0x1d50f, 1, 2206 }, - { 0x1d510, 1, 2227 }, - { 0x1d511, 1, 2207 }, - { 0x1d512, 1, 2652 }, - { 0x1d513, 1, 2210 }, - { 0x1d514, 1, 2211 }, - { 0x1d516, 1, 2653 }, - { 0x1d517, 1, 2654 }, - { 0x1d518, 1, 2655 }, - { 0x1d519, 1, 2283 }, - { 0x1d51a, 1, 2656 }, - { 0x1d51b, 1, 2295 }, - { 0x1d51c, 1, 2657 }, - { 0x1d51e, 1, 3 }, - { 0x1d51f, 1, 2658 }, - { 0x1d520, 1, 2325 }, - { 0x1d521, 1, 2237 }, - { 0x1d522, 1, 2224 }, - { 0x1d523, 1, 2659 }, - { 0x1d524, 1, 2202 }, - { 0x1d525, 1, 588 }, - { 0x1d526, 1, 2169 }, - { 0x1d527, 1, 590 }, - { 0x1d528, 1, 2660 }, - { 0x1d529, 1, 610 }, - { 0x1d52a, 1, 2326 }, - { 0x1d52b, 1, 2181 }, - { 0x1d52c, 1, 14 }, - { 0x1d52d, 1, 2661 }, - { 0x1d52e, 1, 2662 }, - { 0x1d52f, 1, 591 }, - { 0x1d530, 1, 356 }, - { 0x1d531, 1, 2663 }, - { 0x1d532, 1, 2664 }, - { 0x1d533, 1, 2308 }, - { 0x1d534, 1, 595 }, - { 0x1d535, 1, 611 }, - { 0x1d536, 1, 596 }, - { 0x1d537, 1, 2665 }, - { 0x1d538, 1, 2649 }, - { 0x1d539, 1, 2223 }, - { 0x1d53b, 1, 2236 }, - { 0x1d53c, 1, 2225 }, - { 0x1d53d, 1, 2226 }, - { 0x1d53e, 1, 2650 }, - { 0x1d540, 1, 2205 }, - { 0x1d541, 1, 2651 }, - { 0x1d542, 1, 2222 }, - { 0x1d543, 1, 2206 }, - { 0x1d544, 1, 2227 }, - { 0x1d546, 1, 2652 }, - { 0x1d54a, 1, 2653 }, - { 0x1d54b, 1, 2654 }, - { 0x1d54c, 1, 2655 }, - { 0x1d54d, 1, 2283 }, - { 0x1d54e, 1, 2656 }, - { 0x1d54f, 1, 2295 }, - { 0x1d550, 1, 2657 }, - { 0x1d552, 1, 3 }, - { 0x1d553, 1, 2658 }, - { 0x1d554, 1, 2325 }, - { 0x1d555, 1, 2237 }, - { 0x1d556, 1, 2224 }, - { 0x1d557, 1, 2659 }, - { 0x1d558, 1, 2202 }, - { 0x1d559, 1, 588 }, - { 0x1d55a, 1, 2169 }, - { 0x1d55b, 1, 590 }, - { 0x1d55c, 1, 2660 }, - { 0x1d55d, 1, 610 }, - { 0x1d55e, 1, 2326 }, - { 0x1d55f, 1, 2181 }, - { 0x1d560, 1, 14 }, - { 0x1d561, 1, 2661 }, - { 0x1d562, 1, 2662 }, - { 0x1d563, 1, 591 }, - { 0x1d564, 1, 356 }, - { 0x1d565, 1, 2663 }, - { 0x1d566, 1, 2664 }, - { 0x1d567, 1, 2308 }, - { 0x1d568, 1, 595 }, - { 0x1d569, 1, 611 }, - { 0x1d56a, 1, 596 }, - { 0x1d56b, 1, 2665 }, - { 0x1d56c, 1, 2649 }, - { 0x1d56d, 1, 2223 }, - { 0x1d56e, 1, 2190 }, - { 0x1d56f, 1, 2236 }, - { 0x1d570, 1, 2225 }, - { 0x1d571, 1, 2226 }, - { 0x1d572, 1, 2650 }, - { 0x1d573, 1, 2203 }, - { 0x1d574, 1, 2205 }, - { 0x1d575, 1, 2651 }, - { 0x1d576, 1, 2222 }, - { 0x1d577, 1, 2206 }, - { 0x1d578, 1, 2227 }, - { 0x1d579, 1, 2207 }, - { 0x1d57a, 1, 2652 }, - { 0x1d57b, 1, 2210 }, - { 0x1d57c, 1, 2211 }, - { 0x1d57d, 1, 2212 }, - { 0x1d57e, 1, 2653 }, - { 0x1d57f, 1, 2654 }, - { 0x1d580, 1, 2655 }, - { 0x1d581, 1, 2283 }, - { 0x1d582, 1, 2656 }, - { 0x1d583, 1, 2295 }, - { 0x1d584, 1, 2657 }, - { 0x1d585, 1, 2220 }, - { 0x1d586, 1, 3 }, - { 0x1d587, 1, 2658 }, - { 0x1d588, 1, 2325 }, - { 0x1d589, 1, 2237 }, - { 0x1d58a, 1, 2224 }, - { 0x1d58b, 1, 2659 }, - { 0x1d58c, 1, 2202 }, - { 0x1d58d, 1, 588 }, - { 0x1d58e, 1, 2169 }, - { 0x1d58f, 1, 590 }, - { 0x1d590, 1, 2660 }, - { 0x1d591, 1, 610 }, - { 0x1d592, 1, 2326 }, - { 0x1d593, 1, 2181 }, - { 0x1d594, 1, 14 }, - { 0x1d595, 1, 2661 }, - { 0x1d596, 1, 2662 }, - { 0x1d597, 1, 591 }, - { 0x1d598, 1, 356 }, - { 0x1d599, 1, 2663 }, - { 0x1d59a, 1, 2664 }, - { 0x1d59b, 1, 2308 }, - { 0x1d59c, 1, 595 }, - { 0x1d59d, 1, 611 }, - { 0x1d59e, 1, 596 }, - { 0x1d59f, 1, 2665 }, - { 0x1d5a0, 1, 2649 }, - { 0x1d5a1, 1, 2223 }, - { 0x1d5a2, 1, 2190 }, - { 0x1d5a3, 1, 2236 }, - { 0x1d5a4, 1, 2225 }, - { 0x1d5a5, 1, 2226 }, - { 0x1d5a6, 1, 2650 }, - { 0x1d5a7, 1, 2203 }, - { 0x1d5a8, 1, 2205 }, - { 0x1d5a9, 1, 2651 }, - { 0x1d5aa, 1, 2222 }, - { 0x1d5ab, 1, 2206 }, - { 0x1d5ac, 1, 2227 }, - { 0x1d5ad, 1, 2207 }, - { 0x1d5ae, 1, 2652 }, - { 0x1d5af, 1, 2210 }, - { 0x1d5b0, 1, 2211 }, - { 0x1d5b1, 1, 2212 }, - { 0x1d5b2, 1, 2653 }, - { 0x1d5b3, 1, 2654 }, - { 0x1d5b4, 1, 2655 }, - { 0x1d5b5, 1, 2283 }, - { 0x1d5b6, 1, 2656 }, - { 0x1d5b7, 1, 2295 }, - { 0x1d5b8, 1, 2657 }, - { 0x1d5b9, 1, 2220 }, - { 0x1d5ba, 1, 3 }, - { 0x1d5bb, 1, 2658 }, - { 0x1d5bc, 1, 2325 }, - { 0x1d5bd, 1, 2237 }, - { 0x1d5be, 1, 2224 }, - { 0x1d5bf, 1, 2659 }, - { 0x1d5c0, 1, 2202 }, - { 0x1d5c1, 1, 588 }, - { 0x1d5c2, 1, 2169 }, - { 0x1d5c3, 1, 590 }, - { 0x1d5c4, 1, 2660 }, - { 0x1d5c5, 1, 610 }, - { 0x1d5c6, 1, 2326 }, - { 0x1d5c7, 1, 2181 }, - { 0x1d5c8, 1, 14 }, - { 0x1d5c9, 1, 2661 }, - { 0x1d5ca, 1, 2662 }, - { 0x1d5cb, 1, 591 }, - { 0x1d5cc, 1, 356 }, - { 0x1d5cd, 1, 2663 }, - { 0x1d5ce, 1, 2664 }, - { 0x1d5cf, 1, 2308 }, - { 0x1d5d0, 1, 595 }, - { 0x1d5d1, 1, 611 }, - { 0x1d5d2, 1, 596 }, - { 0x1d5d3, 1, 2665 }, - { 0x1d5d4, 1, 2649 }, - { 0x1d5d5, 1, 2223 }, - { 0x1d5d6, 1, 2190 }, - { 0x1d5d7, 1, 2236 }, - { 0x1d5d8, 1, 2225 }, - { 0x1d5d9, 1, 2226 }, - { 0x1d5da, 1, 2650 }, - { 0x1d5db, 1, 2203 }, - { 0x1d5dc, 1, 2205 }, - { 0x1d5dd, 1, 2651 }, - { 0x1d5de, 1, 2222 }, - { 0x1d5df, 1, 2206 }, - { 0x1d5e0, 1, 2227 }, - { 0x1d5e1, 1, 2207 }, - { 0x1d5e2, 1, 2652 }, - { 0x1d5e3, 1, 2210 }, - { 0x1d5e4, 1, 2211 }, - { 0x1d5e5, 1, 2212 }, - { 0x1d5e6, 1, 2653 }, - { 0x1d5e7, 1, 2654 }, - { 0x1d5e8, 1, 2655 }, - { 0x1d5e9, 1, 2283 }, - { 0x1d5ea, 1, 2656 }, - { 0x1d5eb, 1, 2295 }, - { 0x1d5ec, 1, 2657 }, - { 0x1d5ed, 1, 2220 }, - { 0x1d5ee, 1, 3 }, - { 0x1d5ef, 1, 2658 }, - { 0x1d5f0, 1, 2325 }, - { 0x1d5f1, 1, 2237 }, - { 0x1d5f2, 1, 2224 }, - { 0x1d5f3, 1, 2659 }, - { 0x1d5f4, 1, 2202 }, - { 0x1d5f5, 1, 588 }, - { 0x1d5f6, 1, 2169 }, - { 0x1d5f7, 1, 590 }, - { 0x1d5f8, 1, 2660 }, - { 0x1d5f9, 1, 610 }, - { 0x1d5fa, 1, 2326 }, - { 0x1d5fb, 1, 2181 }, - { 0x1d5fc, 1, 14 }, - { 0x1d5fd, 1, 2661 }, - { 0x1d5fe, 1, 2662 }, - { 0x1d5ff, 1, 591 }, - { 0x1d600, 1, 356 }, - { 0x1d601, 1, 2663 }, - { 0x1d602, 1, 2664 }, - { 0x1d603, 1, 2308 }, - { 0x1d604, 1, 595 }, - { 0x1d605, 1, 611 }, - { 0x1d606, 1, 596 }, - { 0x1d607, 1, 2665 }, - { 0x1d608, 1, 2649 }, - { 0x1d609, 1, 2223 }, - { 0x1d60a, 1, 2190 }, - { 0x1d60b, 1, 2236 }, - { 0x1d60c, 1, 2225 }, - { 0x1d60d, 1, 2226 }, - { 0x1d60e, 1, 2650 }, - { 0x1d60f, 1, 2203 }, - { 0x1d610, 1, 2205 }, - { 0x1d611, 1, 2651 }, - { 0x1d612, 1, 2222 }, - { 0x1d613, 1, 2206 }, - { 0x1d614, 1, 2227 }, - { 0x1d615, 1, 2207 }, - { 0x1d616, 1, 2652 }, - { 0x1d617, 1, 2210 }, - { 0x1d618, 1, 2211 }, - { 0x1d619, 1, 2212 }, - { 0x1d61a, 1, 2653 }, - { 0x1d61b, 1, 2654 }, - { 0x1d61c, 1, 2655 }, - { 0x1d61d, 1, 2283 }, - { 0x1d61e, 1, 2656 }, - { 0x1d61f, 1, 2295 }, - { 0x1d620, 1, 2657 }, - { 0x1d621, 1, 2220 }, - { 0x1d622, 1, 3 }, - { 0x1d623, 1, 2658 }, - { 0x1d624, 1, 2325 }, - { 0x1d625, 1, 2237 }, - { 0x1d626, 1, 2224 }, - { 0x1d627, 1, 2659 }, - { 0x1d628, 1, 2202 }, - { 0x1d629, 1, 588 }, - { 0x1d62a, 1, 2169 }, - { 0x1d62b, 1, 590 }, - { 0x1d62c, 1, 2660 }, - { 0x1d62d, 1, 610 }, - { 0x1d62e, 1, 2326 }, - { 0x1d62f, 1, 2181 }, - { 0x1d630, 1, 14 }, - { 0x1d631, 1, 2661 }, - { 0x1d632, 1, 2662 }, - { 0x1d633, 1, 591 }, - { 0x1d634, 1, 356 }, - { 0x1d635, 1, 2663 }, - { 0x1d636, 1, 2664 }, - { 0x1d637, 1, 2308 }, - { 0x1d638, 1, 595 }, - { 0x1d639, 1, 611 }, - { 0x1d63a, 1, 596 }, - { 0x1d63b, 1, 2665 }, - { 0x1d63c, 1, 2649 }, - { 0x1d63d, 1, 2223 }, - { 0x1d63e, 1, 2190 }, - { 0x1d63f, 1, 2236 }, - { 0x1d640, 1, 2225 }, - { 0x1d641, 1, 2226 }, - { 0x1d642, 1, 2650 }, - { 0x1d643, 1, 2203 }, - { 0x1d644, 1, 2205 }, - { 0x1d645, 1, 2651 }, - { 0x1d646, 1, 2222 }, - { 0x1d647, 1, 2206 }, - { 0x1d648, 1, 2227 }, - { 0x1d649, 1, 2207 }, - { 0x1d64a, 1, 2652 }, - { 0x1d64b, 1, 2210 }, - { 0x1d64c, 1, 2211 }, - { 0x1d64d, 1, 2212 }, - { 0x1d64e, 1, 2653 }, - { 0x1d64f, 1, 2654 }, - { 0x1d650, 1, 2655 }, - { 0x1d651, 1, 2283 }, - { 0x1d652, 1, 2656 }, - { 0x1d653, 1, 2295 }, - { 0x1d654, 1, 2657 }, - { 0x1d655, 1, 2220 }, - { 0x1d656, 1, 3 }, - { 0x1d657, 1, 2658 }, - { 0x1d658, 1, 2325 }, - { 0x1d659, 1, 2237 }, - { 0x1d65a, 1, 2224 }, - { 0x1d65b, 1, 2659 }, - { 0x1d65c, 1, 2202 }, - { 0x1d65d, 1, 588 }, - { 0x1d65e, 1, 2169 }, - { 0x1d65f, 1, 590 }, - { 0x1d660, 1, 2660 }, - { 0x1d661, 1, 610 }, - { 0x1d662, 1, 2326 }, - { 0x1d663, 1, 2181 }, - { 0x1d664, 1, 14 }, - { 0x1d665, 1, 2661 }, - { 0x1d666, 1, 2662 }, - { 0x1d667, 1, 591 }, - { 0x1d668, 1, 356 }, - { 0x1d669, 1, 2663 }, - { 0x1d66a, 1, 2664 }, - { 0x1d66b, 1, 2308 }, - { 0x1d66c, 1, 595 }, - { 0x1d66d, 1, 611 }, - { 0x1d66e, 1, 596 }, - { 0x1d66f, 1, 2665 }, - { 0x1d670, 1, 2649 }, - { 0x1d671, 1, 2223 }, - { 0x1d672, 1, 2190 }, - { 0x1d673, 1, 2236 }, - { 0x1d674, 1, 2225 }, - { 0x1d675, 1, 2226 }, - { 0x1d676, 1, 2650 }, - { 0x1d677, 1, 2203 }, - { 0x1d678, 1, 2205 }, - { 0x1d679, 1, 2651 }, - { 0x1d67a, 1, 2222 }, - { 0x1d67b, 1, 2206 }, - { 0x1d67c, 1, 2227 }, - { 0x1d67d, 1, 2207 }, - { 0x1d67e, 1, 2652 }, - { 0x1d67f, 1, 2210 }, - { 0x1d680, 1, 2211 }, - { 0x1d681, 1, 2212 }, - { 0x1d682, 1, 2653 }, - { 0x1d683, 1, 2654 }, - { 0x1d684, 1, 2655 }, - { 0x1d685, 1, 2283 }, - { 0x1d686, 1, 2656 }, - { 0x1d687, 1, 2295 }, - { 0x1d688, 1, 2657 }, - { 0x1d689, 1, 2220 }, - { 0x1d68a, 1, 3 }, - { 0x1d68b, 1, 2658 }, - { 0x1d68c, 1, 2325 }, - { 0x1d68d, 1, 2237 }, - { 0x1d68e, 1, 2224 }, - { 0x1d68f, 1, 2659 }, - { 0x1d690, 1, 2202 }, - { 0x1d691, 1, 588 }, - { 0x1d692, 1, 2169 }, - { 0x1d693, 1, 590 }, - { 0x1d694, 1, 2660 }, - { 0x1d695, 1, 610 }, - { 0x1d696, 1, 2326 }, - { 0x1d697, 1, 2181 }, - { 0x1d698, 1, 14 }, - { 0x1d699, 1, 2661 }, - { 0x1d69a, 1, 2662 }, - { 0x1d69b, 1, 591 }, - { 0x1d69c, 1, 356 }, - { 0x1d69d, 1, 2663 }, - { 0x1d69e, 1, 2664 }, - { 0x1d69f, 1, 2308 }, - { 0x1d6a0, 1, 595 }, - { 0x1d6a1, 1, 611 }, - { 0x1d6a2, 1, 596 }, - { 0x1d6a3, 1, 2665 }, - { 0x1d6a8, 1, 5630 }, - { 0x1d6a9, 1, 5631 }, - { 0x1d6aa, 1, 2233 }, - { 0x1d6ab, 1, 5632 }, - { 0x1d6ac, 1, 5633 }, - { 0x1d6ad, 1, 5634 }, - { 0x1d6ae, 1, 5635 }, - { 0x1d6af, 1, 676 }, - { 0x1d6b0, 1, 5636 }, - { 0x1d6b1, 1, 5637 }, - { 0x1d6b2, 1, 5638 }, - { 0x1d6b3, 1, 5639 }, - { 0x1d6b4, 1, 5640 }, - { 0x1d6b5, 1, 5641 }, - { 0x1d6b6, 1, 5642 }, - { 0x1d6b7, 1, 2234 }, - { 0x1d6b8, 1, 5643 }, - { 0x1d6b9, 1, 676 }, - { 0x1d6ba, 1, 5644 }, - { 0x1d6bb, 1, 5645 }, - { 0x1d6bc, 1, 670 }, - { 0x1d6bd, 1, 5646 }, - { 0x1d6be, 1, 5647 }, - { 0x1d6bf, 1, 5648 }, - { 0x1d6c0, 1, 2221 }, - { 0x1d6c1, 1, 5649 }, - { 0x1d6c2, 1, 5650 }, - { 0x1d6c3, 1, 668 }, - { 0x1d6c4, 1, 2232 }, - { 0x1d6c5, 1, 5651 }, - { 0x1d6c6, 1, 677 }, - { 0x1d6c7, 1, 5652 }, - { 0x1d6c8, 1, 5653 }, - { 0x1d6c9, 1, 669 }, - { 0x1d6ca, 1, 2025 }, - { 0x1d6cb, 1, 673 }, - { 0x1d6cc, 1, 5654 }, - { 0x1d6cd, 1, 10 }, - { 0x1d6ce, 1, 5655 }, - { 0x1d6cf, 1, 5656 }, - { 0x1d6d0, 1, 5657 }, - { 0x1d6d1, 1, 672 }, - { 0x1d6d2, 1, 674 }, - { 0x1d6d3, 1, 675 }, - { 0x1d6d4, 1, 5658 }, - { 0x1d6d5, 1, 5659 }, - { 0x1d6d6, 1, 5660 }, - { 0x1d6d7, 1, 671 }, - { 0x1d6d8, 1, 5661 }, - { 0x1d6d9, 1, 5662 }, - { 0x1d6da, 1, 5663 }, - { 0x1d6db, 1, 5664 }, - { 0x1d6dc, 1, 677 }, - { 0x1d6dd, 1, 669 }, - { 0x1d6de, 1, 673 }, - { 0x1d6df, 1, 671 }, - { 0x1d6e0, 1, 674 }, - { 0x1d6e1, 1, 672 }, - { 0x1d6e2, 1, 5630 }, - { 0x1d6e3, 1, 5631 }, - { 0x1d6e4, 1, 2233 }, - { 0x1d6e5, 1, 5632 }, - { 0x1d6e6, 1, 5633 }, - { 0x1d6e7, 1, 5634 }, - { 0x1d6e8, 1, 5635 }, - { 0x1d6e9, 1, 676 }, - { 0x1d6ea, 1, 5636 }, - { 0x1d6eb, 1, 5637 }, - { 0x1d6ec, 1, 5638 }, - { 0x1d6ed, 1, 5639 }, - { 0x1d6ee, 1, 5640 }, - { 0x1d6ef, 1, 5641 }, - { 0x1d6f0, 1, 5642 }, - { 0x1d6f1, 1, 2234 }, - { 0x1d6f2, 1, 5643 }, - { 0x1d6f3, 1, 676 }, - { 0x1d6f4, 1, 5644 }, - { 0x1d6f5, 1, 5645 }, - { 0x1d6f6, 1, 670 }, - { 0x1d6f7, 1, 5646 }, - { 0x1d6f8, 1, 5647 }, - { 0x1d6f9, 1, 5648 }, - { 0x1d6fa, 1, 2221 }, - { 0x1d6fb, 1, 5649 }, - { 0x1d6fc, 1, 5650 }, - { 0x1d6fd, 1, 668 }, - { 0x1d6fe, 1, 2232 }, - { 0x1d6ff, 1, 5651 }, - { 0x1d700, 1, 677 }, - { 0x1d701, 1, 5652 }, - { 0x1d702, 1, 5653 }, - { 0x1d703, 1, 669 }, - { 0x1d704, 1, 2025 }, - { 0x1d705, 1, 673 }, - { 0x1d706, 1, 5654 }, - { 0x1d707, 1, 10 }, - { 0x1d708, 1, 5655 }, - { 0x1d709, 1, 5656 }, - { 0x1d70a, 1, 5657 }, - { 0x1d70b, 1, 672 }, - { 0x1d70c, 1, 674 }, - { 0x1d70d, 1, 675 }, - { 0x1d70e, 1, 5658 }, - { 0x1d70f, 1, 5659 }, - { 0x1d710, 1, 5660 }, - { 0x1d711, 1, 671 }, - { 0x1d712, 1, 5661 }, - { 0x1d713, 1, 5662 }, - { 0x1d714, 1, 5663 }, - { 0x1d715, 1, 5664 }, - { 0x1d716, 1, 677 }, - { 0x1d717, 1, 669 }, - { 0x1d718, 1, 673 }, - { 0x1d719, 1, 671 }, - { 0x1d71a, 1, 674 }, - { 0x1d71b, 1, 672 }, - { 0x1d71c, 1, 5630 }, - { 0x1d71d, 1, 5631 }, - { 0x1d71e, 1, 2233 }, - { 0x1d71f, 1, 5632 }, - { 0x1d720, 1, 5633 }, - { 0x1d721, 1, 5634 }, - { 0x1d722, 1, 5635 }, - { 0x1d723, 1, 676 }, - { 0x1d724, 1, 5636 }, - { 0x1d725, 1, 5637 }, - { 0x1d726, 1, 5638 }, - { 0x1d727, 1, 5639 }, - { 0x1d728, 1, 5640 }, - { 0x1d729, 1, 5641 }, - { 0x1d72a, 1, 5642 }, - { 0x1d72b, 1, 2234 }, - { 0x1d72c, 1, 5643 }, - { 0x1d72d, 1, 676 }, - { 0x1d72e, 1, 5644 }, - { 0x1d72f, 1, 5645 }, - { 0x1d730, 1, 670 }, - { 0x1d731, 1, 5646 }, - { 0x1d732, 1, 5647 }, - { 0x1d733, 1, 5648 }, - { 0x1d734, 1, 2221 }, - { 0x1d735, 1, 5649 }, - { 0x1d736, 1, 5650 }, - { 0x1d737, 1, 668 }, - { 0x1d738, 1, 2232 }, - { 0x1d739, 1, 5651 }, - { 0x1d73a, 1, 677 }, - { 0x1d73b, 1, 5652 }, - { 0x1d73c, 1, 5653 }, - { 0x1d73d, 1, 669 }, - { 0x1d73e, 1, 2025 }, - { 0x1d73f, 1, 673 }, - { 0x1d740, 1, 5654 }, - { 0x1d741, 1, 10 }, - { 0x1d742, 1, 5655 }, - { 0x1d743, 1, 5656 }, - { 0x1d744, 1, 5657 }, - { 0x1d745, 1, 672 }, - { 0x1d746, 1, 674 }, - { 0x1d747, 1, 675 }, - { 0x1d748, 1, 5658 }, - { 0x1d749, 1, 5659 }, - { 0x1d74a, 1, 5660 }, - { 0x1d74b, 1, 671 }, - { 0x1d74c, 1, 5661 }, - { 0x1d74d, 1, 5662 }, - { 0x1d74e, 1, 5663 }, - { 0x1d74f, 1, 5664 }, - { 0x1d750, 1, 677 }, - { 0x1d751, 1, 669 }, - { 0x1d752, 1, 673 }, - { 0x1d753, 1, 671 }, - { 0x1d754, 1, 674 }, - { 0x1d755, 1, 672 }, - { 0x1d756, 1, 5630 }, - { 0x1d757, 1, 5631 }, - { 0x1d758, 1, 2233 }, - { 0x1d759, 1, 5632 }, - { 0x1d75a, 1, 5633 }, - { 0x1d75b, 1, 5634 }, - { 0x1d75c, 1, 5635 }, - { 0x1d75d, 1, 676 }, - { 0x1d75e, 1, 5636 }, - { 0x1d75f, 1, 5637 }, - { 0x1d760, 1, 5638 }, - { 0x1d761, 1, 5639 }, - { 0x1d762, 1, 5640 }, - { 0x1d763, 1, 5641 }, - { 0x1d764, 1, 5642 }, - { 0x1d765, 1, 2234 }, - { 0x1d766, 1, 5643 }, - { 0x1d767, 1, 676 }, - { 0x1d768, 1, 5644 }, - { 0x1d769, 1, 5645 }, - { 0x1d76a, 1, 670 }, - { 0x1d76b, 1, 5646 }, - { 0x1d76c, 1, 5647 }, - { 0x1d76d, 1, 5648 }, - { 0x1d76e, 1, 2221 }, - { 0x1d76f, 1, 5649 }, - { 0x1d770, 1, 5650 }, - { 0x1d771, 1, 668 }, - { 0x1d772, 1, 2232 }, - { 0x1d773, 1, 5651 }, - { 0x1d774, 1, 677 }, - { 0x1d775, 1, 5652 }, - { 0x1d776, 1, 5653 }, - { 0x1d777, 1, 669 }, - { 0x1d778, 1, 2025 }, - { 0x1d779, 1, 673 }, - { 0x1d77a, 1, 5654 }, - { 0x1d77b, 1, 10 }, - { 0x1d77c, 1, 5655 }, - { 0x1d77d, 1, 5656 }, - { 0x1d77e, 1, 5657 }, - { 0x1d77f, 1, 672 }, - { 0x1d780, 1, 674 }, - { 0x1d781, 1, 675 }, - { 0x1d782, 1, 5658 }, - { 0x1d783, 1, 5659 }, - { 0x1d784, 1, 5660 }, - { 0x1d785, 1, 671 }, - { 0x1d786, 1, 5661 }, - { 0x1d787, 1, 5662 }, - { 0x1d788, 1, 5663 }, - { 0x1d789, 1, 5664 }, - { 0x1d78a, 1, 677 }, - { 0x1d78b, 1, 669 }, - { 0x1d78c, 1, 673 }, - { 0x1d78d, 1, 671 }, - { 0x1d78e, 1, 674 }, - { 0x1d78f, 1, 672 }, - { 0x1d790, 1, 5630 }, - { 0x1d791, 1, 5631 }, - { 0x1d792, 1, 2233 }, - { 0x1d793, 1, 5632 }, - { 0x1d794, 1, 5633 }, - { 0x1d795, 1, 5634 }, - { 0x1d796, 1, 5635 }, - { 0x1d797, 1, 676 }, - { 0x1d798, 1, 5636 }, - { 0x1d799, 1, 5637 }, - { 0x1d79a, 1, 5638 }, - { 0x1d79b, 1, 5639 }, - { 0x1d79c, 1, 5640 }, - { 0x1d79d, 1, 5641 }, - { 0x1d79e, 1, 5642 }, - { 0x1d79f, 1, 2234 }, - { 0x1d7a0, 1, 5643 }, - { 0x1d7a1, 1, 676 }, - { 0x1d7a2, 1, 5644 }, - { 0x1d7a3, 1, 5645 }, - { 0x1d7a4, 1, 670 }, - { 0x1d7a5, 1, 5646 }, - { 0x1d7a6, 1, 5647 }, - { 0x1d7a7, 1, 5648 }, - { 0x1d7a8, 1, 2221 }, - { 0x1d7a9, 1, 5649 }, - { 0x1d7aa, 1, 5650 }, - { 0x1d7ab, 1, 668 }, - { 0x1d7ac, 1, 2232 }, - { 0x1d7ad, 1, 5651 }, - { 0x1d7ae, 1, 677 }, - { 0x1d7af, 1, 5652 }, - { 0x1d7b0, 1, 5653 }, - { 0x1d7b1, 1, 669 }, - { 0x1d7b2, 1, 2025 }, - { 0x1d7b3, 1, 673 }, - { 0x1d7b4, 1, 5654 }, - { 0x1d7b5, 1, 10 }, - { 0x1d7b6, 1, 5655 }, - { 0x1d7b7, 1, 5656 }, - { 0x1d7b8, 1, 5657 }, - { 0x1d7b9, 1, 672 }, - { 0x1d7ba, 1, 674 }, - { 0x1d7bb, 1, 675 }, - { 0x1d7bc, 1, 5658 }, - { 0x1d7bd, 1, 5659 }, - { 0x1d7be, 1, 5660 }, - { 0x1d7bf, 1, 671 }, - { 0x1d7c0, 1, 5661 }, - { 0x1d7c1, 1, 5662 }, - { 0x1d7c2, 1, 5663 }, - { 0x1d7c3, 1, 5664 }, - { 0x1d7c4, 1, 677 }, - { 0x1d7c5, 1, 669 }, - { 0x1d7c6, 1, 673 }, - { 0x1d7c7, 1, 671 }, - { 0x1d7c8, 1, 674 }, - { 0x1d7c9, 1, 672 }, - { 0x1d7ce, 1, 2168 }, - { 0x1d7cf, 1, 13 }, - { 0x1d7d0, 1, 6 }, - { 0x1d7d1, 1, 7 }, - { 0x1d7d2, 1, 2170 }, - { 0x1d7d3, 1, 2171 }, - { 0x1d7d4, 1, 2172 }, - { 0x1d7d5, 1, 2173 }, - { 0x1d7d6, 1, 2174 }, - { 0x1d7d7, 1, 2175 }, - { 0x1d7d8, 1, 2168 }, - { 0x1d7d9, 1, 13 }, - { 0x1d7da, 1, 6 }, - { 0x1d7db, 1, 7 }, - { 0x1d7dc, 1, 2170 }, - { 0x1d7dd, 1, 2171 }, - { 0x1d7de, 1, 2172 }, - { 0x1d7df, 1, 2173 }, - { 0x1d7e0, 1, 2174 }, - { 0x1d7e1, 1, 2175 }, - { 0x1d7e2, 1, 2168 }, - { 0x1d7e3, 1, 13 }, - { 0x1d7e4, 1, 6 }, - { 0x1d7e5, 1, 7 }, - { 0x1d7e6, 1, 2170 }, - { 0x1d7e7, 1, 2171 }, - { 0x1d7e8, 1, 2172 }, - { 0x1d7e9, 1, 2173 }, - { 0x1d7ea, 1, 2174 }, - { 0x1d7eb, 1, 2175 }, - { 0x1d7ec, 1, 2168 }, - { 0x1d7ed, 1, 13 }, - { 0x1d7ee, 1, 6 }, - { 0x1d7ef, 1, 7 }, - { 0x1d7f0, 1, 2170 }, - { 0x1d7f1, 1, 2171 }, - { 0x1d7f2, 1, 2172 }, - { 0x1d7f3, 1, 2173 }, - { 0x1d7f4, 1, 2174 }, - { 0x1d7f5, 1, 2175 }, - { 0x1d7f6, 1, 2168 }, - { 0x1d7f7, 1, 13 }, - { 0x1d7f8, 1, 6 }, - { 0x1d7f9, 1, 7 }, - { 0x1d7fa, 1, 2170 }, - { 0x1d7fb, 1, 2171 }, - { 0x1d7fc, 1, 2172 }, - { 0x1d7fd, 1, 2173 }, - { 0x1d7fe, 1, 2174 }, - { 0x1d7ff, 1, 2175 }, - { 0x2f800, 1, 5665 }, - { 0x2f801, 1, 5666 }, - { 0x2f802, 1, 5667 }, - { 0x2f803, 1, 5668 }, - { 0x2f804, 1, 5669 }, - { 0x2f805, 1, 4549 }, - { 0x2f806, 1, 5670 }, - { 0x2f807, 1, 5671 }, - { 0x2f808, 1, 5672 }, - { 0x2f809, 1, 5673 }, - { 0x2f80a, 1, 4550 }, - { 0x2f80b, 1, 5674 }, - { 0x2f80c, 1, 5675 }, - { 0x2f80d, 1, 5676 }, - { 0x2f80e, 1, 4551 }, - { 0x2f80f, 1, 5677 }, - { 0x2f810, 1, 5678 }, - { 0x2f811, 1, 5679 }, - { 0x2f812, 1, 5680 }, - { 0x2f813, 1, 5681 }, - { 0x2f814, 1, 5682 }, - { 0x2f815, 1, 5683 }, - { 0x2f816, 1, 5684 }, - { 0x2f817, 1, 5685 }, - { 0x2f818, 1, 5686 }, - { 0x2f819, 1, 5687 }, - { 0x2f81a, 1, 5688 }, - { 0x2f81b, 1, 5689 }, - { 0x2f81c, 1, 5690 }, - { 0x2f81d, 1, 2698 }, - { 0x2f81e, 1, 5691 }, - { 0x2f81f, 1, 5692 }, - { 0x2f820, 1, 5693 }, - { 0x2f821, 1, 5694 }, - { 0x2f822, 1, 5695 }, - { 0x2f823, 1, 5696 }, - { 0x2f824, 1, 5697 }, - { 0x2f825, 1, 5698 }, - { 0x2f826, 1, 4552 }, - { 0x2f827, 1, 4553 }, - { 0x2f828, 1, 5699 }, - { 0x2f829, 1, 5700 }, - { 0x2f82a, 1, 5701 }, - { 0x2f82b, 1, 4372 }, - { 0x2f82c, 1, 5702 }, - { 0x2f82d, 1, 4554 }, - { 0x2f82e, 1, 5703 }, - { 0x2f82f, 1, 5704 }, - { 0x2f830, 1, 5705 }, - { 0x2f831, 1, 5706 }, - { 0x2f832, 1, 5706 }, - { 0x2f833, 1, 5706 }, - { 0x2f834, 1, 5707 }, - { 0x2f835, 1, 5708 }, - { 0x2f836, 1, 5709 }, - { 0x2f837, 1, 5710 }, - { 0x2f838, 1, 5711 }, - { 0x2f839, 1, 5712 }, - { 0x2f83a, 1, 5713 }, - { 0x2f83b, 1, 5714 }, - { 0x2f83c, 1, 5715 }, - { 0x2f83d, 1, 5716 }, - { 0x2f83e, 1, 5717 }, - { 0x2f83f, 1, 5718 }, - { 0x2f840, 1, 5719 }, - { 0x2f841, 1, 5720 }, - { 0x2f842, 1, 5721 }, - { 0x2f843, 1, 5722 }, - { 0x2f844, 1, 5723 }, - { 0x2f845, 1, 5724 }, - { 0x2f846, 1, 5724 }, - { 0x2f847, 1, 5725 }, - { 0x2f848, 1, 5726 }, - { 0x2f849, 1, 5727 }, - { 0x2f84a, 1, 5728 }, - { 0x2f84b, 1, 5729 }, - { 0x2f84c, 1, 4556 }, - { 0x2f84d, 1, 5730 }, - { 0x2f84e, 1, 5731 }, - { 0x2f84f, 1, 5732 }, - { 0x2f850, 1, 4518 }, - { 0x2f851, 1, 5733 }, - { 0x2f852, 1, 5734 }, - { 0x2f853, 1, 5735 }, - { 0x2f854, 1, 5736 }, - { 0x2f855, 1, 5737 }, - { 0x2f856, 1, 5738 }, - { 0x2f857, 1, 5739 }, - { 0x2f858, 1, 5740 }, - { 0x2f859, 1, 5741 }, - { 0x2f85a, 1, 5742 }, - { 0x2f85b, 1, 5743 }, - { 0x2f85c, 1, 5744 }, - { 0x2f85d, 1, 5745 }, - { 0x2f85e, 1, 5746 }, - { 0x2f85f, 1, 5747 }, - { 0x2f860, 1, 5748 }, - { 0x2f861, 1, 5749 }, - { 0x2f862, 1, 5750 }, - { 0x2f863, 1, 5751 }, - { 0x2f864, 1, 5752 }, - { 0x2f865, 1, 5753 }, - { 0x2f866, 1, 5754 }, - { 0x2f867, 1, 5755 }, - { 0x2f868, 1, 5756 }, - { 0x2f869, 1, 5757 }, - { 0x2f86a, 1, 5758 }, - { 0x2f86b, 1, 5758 }, - { 0x2f86c, 1, 5759 }, - { 0x2f86d, 1, 5760 }, - { 0x2f86e, 1, 5761 }, - { 0x2f86f, 1, 4368 }, - { 0x2f870, 1, 5762 }, - { 0x2f871, 1, 5763 }, - { 0x2f872, 1, 5764 }, - { 0x2f873, 1, 5765 }, - { 0x2f874, 1, 5766 }, - { 0x2f875, 1, 2724 }, - { 0x2f876, 1, 5767 }, - { 0x2f877, 1, 5768 }, - { 0x2f878, 1, 2726 }, - { 0x2f879, 1, 5769 }, - { 0x2f87a, 1, 5770 }, - { 0x2f87b, 1, 5771 }, - { 0x2f87c, 1, 5772 }, - { 0x2f87d, 1, 5773 }, - { 0x2f87e, 1, 5774 }, - { 0x2f87f, 1, 5775 }, - { 0x2f880, 1, 5776 }, - { 0x2f881, 1, 5777 }, - { 0x2f882, 1, 5778 }, - { 0x2f883, 1, 5779 }, - { 0x2f884, 1, 5780 }, - { 0x2f885, 1, 5781 }, - { 0x2f886, 1, 5782 }, - { 0x2f887, 1, 5783 }, - { 0x2f888, 1, 5784 }, - { 0x2f889, 1, 5785 }, - { 0x2f88a, 1, 5786 }, - { 0x2f88b, 1, 5787 }, - { 0x2f88c, 1, 5788 }, - { 0x2f88d, 1, 5789 }, - { 0x2f88e, 1, 4316 }, - { 0x2f88f, 1, 5790 }, - { 0x2f890, 1, 2736 }, - { 0x2f891, 1, 5791 }, - { 0x2f892, 1, 5791 }, - { 0x2f893, 1, 5792 }, - { 0x2f894, 1, 5793 }, - { 0x2f895, 1, 5793 }, - { 0x2f896, 1, 5794 }, - { 0x2f897, 1, 5795 }, - { 0x2f898, 1, 5796 }, - { 0x2f899, 1, 5797 }, - { 0x2f89a, 1, 5798 }, - { 0x2f89b, 1, 5799 }, - { 0x2f89c, 1, 5800 }, - { 0x2f89d, 1, 5801 }, - { 0x2f89e, 1, 5802 }, - { 0x2f89f, 1, 5803 }, - { 0x2f8a0, 1, 5804 }, - { 0x2f8a1, 1, 5805 }, - { 0x2f8a2, 1, 5806 }, - { 0x2f8a3, 1, 4561 }, - { 0x2f8a4, 1, 5807 }, - { 0x2f8a5, 1, 5808 }, - { 0x2f8a6, 1, 5809 }, - { 0x2f8a7, 1, 5810 }, - { 0x2f8a8, 1, 5811 }, - { 0x2f8a9, 1, 5810 }, - { 0x2f8aa, 1, 5812 }, - { 0x2f8ab, 1, 4563 }, - { 0x2f8ac, 1, 5813 }, - { 0x2f8ad, 1, 5814 }, - { 0x2f8ae, 1, 5815 }, - { 0x2f8af, 1, 5816 }, - { 0x2f8b0, 1, 4564 }, - { 0x2f8b1, 1, 4289 }, - { 0x2f8b2, 1, 5817 }, - { 0x2f8b3, 1, 5818 }, - { 0x2f8b4, 1, 5819 }, - { 0x2f8b5, 1, 5820 }, - { 0x2f8b6, 1, 5821 }, - { 0x2f8b7, 1, 5822 }, - { 0x2f8b8, 1, 5823 }, - { 0x2f8b9, 1, 5824 }, - { 0x2f8ba, 1, 5825 }, - { 0x2f8bb, 1, 5826 }, - { 0x2f8bc, 1, 5827 }, - { 0x2f8bd, 1, 5828 }, - { 0x2f8be, 1, 5829 }, - { 0x2f8bf, 1, 5830 }, - { 0x2f8c0, 1, 5831 }, - { 0x2f8c1, 1, 5832 }, - { 0x2f8c2, 1, 5833 }, - { 0x2f8c3, 1, 5834 }, - { 0x2f8c4, 1, 5835 }, - { 0x2f8c5, 1, 5836 }, - { 0x2f8c6, 1, 5837 }, - { 0x2f8c7, 1, 5838 }, - { 0x2f8c8, 1, 4565 }, - { 0x2f8c9, 1, 5839 }, - { 0x2f8ca, 1, 5840 }, - { 0x2f8cb, 1, 5841 }, - { 0x2f8cc, 1, 5842 }, - { 0x2f8cd, 1, 5843 }, - { 0x2f8ce, 1, 5844 }, - { 0x2f8cf, 1, 4567 }, - { 0x2f8d0, 1, 5845 }, - { 0x2f8d1, 1, 5846 }, - { 0x2f8d2, 1, 5847 }, - { 0x2f8d3, 1, 5848 }, - { 0x2f8d4, 1, 5849 }, - { 0x2f8d5, 1, 5850 }, - { 0x2f8d6, 1, 5851 }, - { 0x2f8d7, 1, 5852 }, - { 0x2f8d8, 1, 4317 }, - { 0x2f8d9, 1, 5853 }, - { 0x2f8da, 1, 5854 }, - { 0x2f8db, 1, 5855 }, - { 0x2f8dc, 1, 5856 }, - { 0x2f8dd, 1, 5857 }, - { 0x2f8de, 1, 5858 }, - { 0x2f8df, 1, 5859 }, - { 0x2f8e0, 1, 5860 }, - { 0x2f8e1, 1, 5861 }, - { 0x2f8e2, 1, 4568 }, - { 0x2f8e3, 1, 5862 }, - { 0x2f8e4, 1, 5863 }, - { 0x2f8e5, 1, 5864 }, - { 0x2f8e6, 1, 5865 }, - { 0x2f8e7, 1, 5866 }, - { 0x2f8e8, 1, 5867 }, - { 0x2f8e9, 1, 5868 }, - { 0x2f8ea, 1, 5869 }, - { 0x2f8eb, 1, 5870 }, - { 0x2f8ec, 1, 5871 }, - { 0x2f8ed, 1, 5872 }, - { 0x2f8ee, 1, 5873 }, - { 0x2f8ef, 1, 5874 }, - { 0x2f8f0, 1, 5875 }, - { 0x2f8f1, 1, 5876 }, - { 0x2f8f2, 1, 5877 }, - { 0x2f8f3, 1, 5878 }, - { 0x2f8f4, 1, 5879 }, - { 0x2f8f5, 1, 4385 }, - { 0x2f8f6, 1, 5880 }, - { 0x2f8f7, 1, 5881 }, - { 0x2f8f8, 1, 5882 }, - { 0x2f8f9, 1, 5883 }, - { 0x2f8fa, 1, 5884 }, - { 0x2f8fb, 1, 5885 }, - { 0x2f8fc, 1, 5886 }, - { 0x2f8fd, 1, 5887 }, - { 0x2f8fe, 1, 5888 }, - { 0x2f8ff, 1, 5889 }, - { 0x2f900, 1, 5890 }, - { 0x2f901, 1, 4569 }, - { 0x2f902, 1, 4468 }, - { 0x2f903, 1, 5891 }, - { 0x2f904, 1, 5892 }, - { 0x2f905, 1, 5893 }, - { 0x2f906, 1, 5894 }, - { 0x2f907, 1, 5895 }, - { 0x2f908, 1, 5896 }, - { 0x2f909, 1, 5897 }, - { 0x2f90a, 1, 5898 }, - { 0x2f90b, 1, 5899 }, - { 0x2f90c, 1, 5900 }, - { 0x2f90d, 1, 5901 }, - { 0x2f90e, 1, 5902 }, - { 0x2f90f, 1, 5903 }, - { 0x2f910, 1, 5904 }, - { 0x2f911, 1, 5905 }, - { 0x2f912, 1, 5906 }, - { 0x2f913, 1, 5907 }, - { 0x2f914, 1, 5908 }, - { 0x2f915, 1, 5909 }, - { 0x2f916, 1, 5910 }, - { 0x2f917, 1, 5911 }, - { 0x2f918, 1, 5912 }, - { 0x2f919, 1, 5913 }, - { 0x2f91a, 1, 5914 }, - { 0x2f91b, 1, 5915 }, - { 0x2f91c, 1, 5916 }, - { 0x2f91d, 1, 5917 }, - { 0x2f91e, 1, 5918 }, - { 0x2f91f, 1, 5919 }, - { 0x2f920, 1, 5920 }, - { 0x2f921, 1, 5921 }, - { 0x2f922, 1, 5922 }, - { 0x2f923, 1, 5923 }, - { 0x2f924, 1, 5924 }, - { 0x2f925, 1, 5925 }, - { 0x2f926, 1, 5926 }, - { 0x2f927, 1, 5927 }, - { 0x2f928, 1, 5928 }, - { 0x2f929, 1, 5929 }, - { 0x2f92a, 1, 5930 }, - { 0x2f92b, 1, 5931 }, - { 0x2f92c, 1, 5932 }, - { 0x2f92d, 1, 5932 }, - { 0x2f92e, 1, 5933 }, - { 0x2f92f, 1, 5934 }, - { 0x2f930, 1, 5935 }, - { 0x2f931, 1, 5936 }, - { 0x2f932, 1, 5937 }, - { 0x2f933, 1, 5938 }, - { 0x2f934, 1, 5939 }, - { 0x2f935, 1, 5940 }, - { 0x2f936, 1, 5941 }, - { 0x2f937, 1, 5942 }, - { 0x2f938, 1, 4371 }, - { 0x2f939, 1, 5943 }, - { 0x2f93a, 1, 5944 }, - { 0x2f93b, 1, 5945 }, - { 0x2f93c, 1, 5946 }, - { 0x2f93d, 1, 5947 }, - { 0x2f93e, 1, 5948 }, - { 0x2f93f, 1, 5949 }, - { 0x2f940, 1, 5950 }, - { 0x2f941, 1, 5951 }, - { 0x2f942, 1, 5952 }, - { 0x2f943, 1, 5953 }, - { 0x2f944, 1, 5954 }, - { 0x2f945, 1, 5955 }, - { 0x2f946, 1, 5956 }, - { 0x2f947, 1, 5956 }, - { 0x2f948, 1, 5957 }, - { 0x2f949, 1, 5958 }, - { 0x2f94a, 1, 5959 }, - { 0x2f94b, 1, 5960 }, - { 0x2f94c, 1, 5961 }, - { 0x2f94d, 1, 5962 }, - { 0x2f94e, 1, 5963 }, - { 0x2f94f, 1, 4334 }, - { 0x2f950, 1, 5964 }, - { 0x2f951, 1, 5965 }, - { 0x2f952, 1, 5966 }, - { 0x2f953, 1, 4579 }, - { 0x2f954, 1, 5967 }, - { 0x2f955, 1, 5968 }, - { 0x2f956, 1, 4538 }, - { 0x2f957, 1, 5969 }, - { 0x2f958, 1, 5970 }, - { 0x2f959, 1, 4582 }, - { 0x2f95a, 1, 5971 }, - { 0x2f95b, 1, 5972 }, - { 0x2f95c, 1, 5973 }, - { 0x2f95d, 1, 5974 }, - { 0x2f95e, 1, 5974 }, - { 0x2f95f, 1, 5975 }, - { 0x2f960, 1, 5976 }, - { 0x2f961, 1, 5977 }, - { 0x2f962, 1, 5978 }, - { 0x2f963, 1, 5979 }, - { 0x2f964, 1, 5980 }, - { 0x2f965, 1, 5981 }, - { 0x2f966, 1, 5982 }, - { 0x2f967, 1, 5983 }, - { 0x2f968, 1, 5984 }, - { 0x2f969, 1, 5985 }, - { 0x2f96a, 1, 5986 }, - { 0x2f96b, 1, 5987 }, - { 0x2f96c, 1, 5988 }, - { 0x2f96d, 1, 5989 }, - { 0x2f96e, 1, 5990 }, - { 0x2f96f, 1, 5991 }, - { 0x2f970, 1, 5992 }, - { 0x2f971, 1, 5993 }, - { 0x2f972, 1, 5994 }, - { 0x2f973, 1, 5995 }, - { 0x2f974, 1, 5996 }, - { 0x2f975, 1, 5997 }, - { 0x2f976, 1, 5998 }, - { 0x2f977, 1, 5999 }, - { 0x2f978, 1, 6000 }, - { 0x2f979, 1, 6001 }, - { 0x2f97a, 1, 4588 }, - { 0x2f97b, 1, 6002 }, - { 0x2f97c, 1, 6003 }, - { 0x2f97d, 1, 6004 }, - { 0x2f97e, 1, 6005 }, - { 0x2f97f, 1, 6006 }, - { 0x2f980, 1, 6007 }, - { 0x2f981, 1, 6008 }, - { 0x2f982, 1, 6009 }, - { 0x2f983, 1, 6010 }, - { 0x2f984, 1, 6011 }, - { 0x2f985, 1, 6012 }, - { 0x2f986, 1, 6013 }, - { 0x2f987, 1, 6014 }, - { 0x2f988, 1, 6015 }, - { 0x2f989, 1, 6016 }, - { 0x2f98a, 1, 6017 }, - { 0x2f98b, 1, 5792 }, - { 0x2f98c, 1, 6018 }, - { 0x2f98d, 1, 6019 }, - { 0x2f98e, 1, 6020 }, - { 0x2f98f, 1, 6021 }, - { 0x2f990, 1, 6022 }, - { 0x2f991, 1, 6023 }, - { 0x2f992, 1, 6024 }, - { 0x2f993, 1, 6025 }, - { 0x2f994, 1, 6026 }, - { 0x2f995, 1, 6027 }, - { 0x2f996, 1, 6028 }, - { 0x2f997, 1, 6029 }, - { 0x2f998, 1, 4388 }, - { 0x2f999, 1, 6030 }, - { 0x2f99a, 1, 6031 }, - { 0x2f99b, 1, 6032 }, - { 0x2f99c, 1, 6033 }, - { 0x2f99d, 1, 6034 }, - { 0x2f99e, 1, 6035 }, - { 0x2f99f, 1, 4591 }, - { 0x2f9a0, 1, 6036 }, - { 0x2f9a1, 1, 6037 }, - { 0x2f9a2, 1, 6038 }, - { 0x2f9a3, 1, 6039 }, - { 0x2f9a4, 1, 6040 }, - { 0x2f9a5, 1, 6041 }, - { 0x2f9a6, 1, 6042 }, - { 0x2f9a7, 1, 6043 }, - { 0x2f9a8, 1, 6044 }, - { 0x2f9a9, 1, 6045 }, - { 0x2f9aa, 1, 6046 }, - { 0x2f9ab, 1, 6047 }, - { 0x2f9ac, 1, 6048 }, - { 0x2f9ad, 1, 6049 }, - { 0x2f9ae, 1, 6050 }, - { 0x2f9af, 1, 6051 }, - { 0x2f9b0, 1, 6052 }, - { 0x2f9b1, 1, 6053 }, - { 0x2f9b2, 1, 6054 }, - { 0x2f9b3, 1, 6055 }, - { 0x2f9b4, 1, 4329 }, - { 0x2f9b5, 1, 6056 }, - { 0x2f9b6, 1, 6057 }, - { 0x2f9b7, 1, 6058 }, - { 0x2f9b8, 1, 6059 }, - { 0x2f9b9, 1, 6060 }, - { 0x2f9ba, 1, 6061 }, - { 0x2f9bb, 1, 6062 }, - { 0x2f9bc, 1, 6063 }, - { 0x2f9bd, 1, 6064 }, - { 0x2f9be, 1, 6065 }, - { 0x2f9bf, 1, 6066 }, - { 0x2f9c0, 1, 6067 }, - { 0x2f9c1, 1, 6068 }, - { 0x2f9c2, 1, 6069 }, - { 0x2f9c3, 1, 6070 }, - { 0x2f9c4, 1, 2826 }, - { 0x2f9c5, 1, 6071 }, - { 0x2f9c6, 1, 6072 }, - { 0x2f9c7, 1, 6073 }, - { 0x2f9c8, 1, 6074 }, - { 0x2f9c9, 1, 6075 }, - { 0x2f9ca, 1, 6076 }, - { 0x2f9cb, 1, 6077 }, - { 0x2f9cc, 1, 6078 }, - { 0x2f9cd, 1, 6079 }, - { 0x2f9ce, 1, 6080 }, - { 0x2f9cf, 1, 6081 }, - { 0x2f9d0, 1, 6082 }, - { 0x2f9d1, 1, 6083 }, - { 0x2f9d2, 1, 2833 }, - { 0x2f9d3, 1, 6084 }, - { 0x2f9d4, 1, 6085 }, - { 0x2f9d5, 1, 6086 }, - { 0x2f9d6, 1, 6087 }, - { 0x2f9d7, 1, 6088 }, - { 0x2f9d8, 1, 6089 }, - { 0x2f9d9, 1, 6090 }, - { 0x2f9da, 1, 6091 }, - { 0x2f9db, 1, 6092 }, - { 0x2f9dc, 1, 6093 }, - { 0x2f9dd, 1, 6094 }, - { 0x2f9de, 1, 6095 }, - { 0x2f9df, 1, 6096 }, - { 0x2f9e0, 1, 6097 }, - { 0x2f9e1, 1, 6098 }, - { 0x2f9e2, 1, 6099 }, - { 0x2f9e3, 1, 6100 }, - { 0x2f9e4, 1, 6101 }, - { 0x2f9e5, 1, 6102 }, - { 0x2f9e6, 1, 6103 }, - { 0x2f9e7, 1, 6104 }, - { 0x2f9e8, 1, 6105 }, - { 0x2f9e9, 1, 6106 }, - { 0x2f9ea, 1, 6107 }, - { 0x2f9eb, 1, 6108 }, - { 0x2f9ec, 1, 6109 }, - { 0x2f9ed, 1, 6110 }, - { 0x2f9ee, 1, 6111 }, - { 0x2f9ef, 1, 6112 }, - { 0x2f9f0, 1, 6113 }, - { 0x2f9f1, 1, 6114 }, - { 0x2f9f2, 1, 6115 }, - { 0x2f9f3, 1, 6116 }, - { 0x2f9f4, 1, 6117 }, - { 0x2f9f5, 1, 6118 }, - { 0x2f9f6, 1, 6119 }, - { 0x2f9f7, 1, 6120 }, - { 0x2f9f8, 1, 6121 }, - { 0x2f9f9, 1, 6122 }, - { 0x2f9fa, 1, 6123 }, - { 0x2f9fb, 1, 6124 }, - { 0x2f9fc, 1, 6125 }, - { 0x2f9fd, 1, 6126 }, - { 0x2f9fe, 1, 6127 }, - { 0x2f9ff, 1, 6127 }, - { 0x2fa00, 1, 6128 }, - { 0x2fa01, 1, 6129 }, - { 0x2fa02, 1, 6130 }, - { 0x2fa03, 1, 6131 }, - { 0x2fa04, 1, 6132 }, - { 0x2fa05, 1, 6133 }, - { 0x2fa06, 1, 6134 }, - { 0x2fa07, 1, 6135 }, - { 0x2fa08, 1, 6136 }, - { 0x2fa09, 1, 6137 }, - { 0x2fa0a, 1, 6138 }, - { 0x2fa0b, 1, 6139 }, - { 0x2fa0c, 1, 6140 }, - { 0x2fa0d, 1, 6141 }, - { 0x2fa0e, 1, 6142 }, - { 0x2fa0f, 1, 6143 }, - { 0x2fa10, 1, 6144 }, - { 0x2fa11, 1, 6145 }, - { 0x2fa12, 1, 6146 }, - { 0x2fa13, 1, 6147 }, - { 0x2fa14, 1, 6148 }, - { 0x2fa15, 1, 2881 }, - { 0x2fa16, 1, 6149 }, - { 0x2fa17, 1, 2885 }, - { 0x2fa18, 1, 6150 }, - { 0x2fa19, 1, 6151 }, - { 0x2fa1a, 1, 6152 }, - { 0x2fa1b, 1, 6153 }, - { 0x2fa1c, 1, 2890 }, - { 0x2fa1d, 1, 6154 } -}; - -static const Unicode decomp_expansion[] = { - 0x20 /* offset 0 */ , - 0x20, 0x308 /* offset 1 */ , - 0x61 /* offset 3 */ , - 0x20, 0x304 /* offset 4 */ , - 0x32 /* offset 6 */ , - 0x33 /* offset 7 */ , - 0x20, 0x301 /* offset 8 */ , - 0x3bc /* offset 10 */ , - 0x20, 0x327 /* offset 11 */ , - 0x31 /* offset 13 */ , - 0x6f /* offset 14 */ , - 0x31, 0x2044, 0x34 /* offset 15 */ , - 0x31, 0x2044, 0x32 /* offset 18 */ , - 0x33, 0x2044, 0x34 /* offset 21 */ , - 0x41, 0x300 /* offset 24 */ , - 0x41, 0x301 /* offset 26 */ , - 0x41, 0x302 /* offset 28 */ , - 0x41, 0x303 /* offset 30 */ , - 0x41, 0x308 /* offset 32 */ , - 0x41, 0x30a /* offset 34 */ , - 0x43, 0x327 /* offset 36 */ , - 0x45, 0x300 /* offset 38 */ , - 0x45, 0x301 /* offset 40 */ , - 0x45, 0x302 /* offset 42 */ , - 0x45, 0x308 /* offset 44 */ , - 0x49, 0x300 /* offset 46 */ , - 0x49, 0x301 /* offset 48 */ , - 0x49, 0x302 /* offset 50 */ , - 0x49, 0x308 /* offset 52 */ , - 0x4e, 0x303 /* offset 54 */ , - 0x4f, 0x300 /* offset 56 */ , - 0x4f, 0x301 /* offset 58 */ , - 0x4f, 0x302 /* offset 60 */ , - 0x4f, 0x303 /* offset 62 */ , - 0x4f, 0x308 /* offset 64 */ , - 0x55, 0x300 /* offset 66 */ , - 0x55, 0x301 /* offset 68 */ , - 0x55, 0x302 /* offset 70 */ , - 0x55, 0x308 /* offset 72 */ , - 0x59, 0x301 /* offset 74 */ , - 0x61, 0x300 /* offset 76 */ , - 0x61, 0x301 /* offset 78 */ , - 0x61, 0x302 /* offset 80 */ , - 0x61, 0x303 /* offset 82 */ , - 0x61, 0x308 /* offset 84 */ , - 0x61, 0x30a /* offset 86 */ , - 0x63, 0x327 /* offset 88 */ , - 0x65, 0x300 /* offset 90 */ , - 0x65, 0x301 /* offset 92 */ , - 0x65, 0x302 /* offset 94 */ , - 0x65, 0x308 /* offset 96 */ , - 0x69, 0x300 /* offset 98 */ , - 0x69, 0x301 /* offset 100 */ , - 0x69, 0x302 /* offset 102 */ , - 0x69, 0x308 /* offset 104 */ , - 0x6e, 0x303 /* offset 106 */ , - 0x6f, 0x300 /* offset 108 */ , - 0x6f, 0x301 /* offset 110 */ , - 0x6f, 0x302 /* offset 112 */ , - 0x6f, 0x303 /* offset 114 */ , - 0x6f, 0x308 /* offset 116 */ , - 0x75, 0x300 /* offset 118 */ , - 0x75, 0x301 /* offset 120 */ , - 0x75, 0x302 /* offset 122 */ , - 0x75, 0x308 /* offset 124 */ , - 0x79, 0x301 /* offset 126 */ , - 0x79, 0x308 /* offset 128 */ , - 0x41, 0x304 /* offset 130 */ , - 0x61, 0x304 /* offset 132 */ , - 0x41, 0x306 /* offset 134 */ , - 0x61, 0x306 /* offset 136 */ , - 0x41, 0x328 /* offset 138 */ , - 0x61, 0x328 /* offset 140 */ , - 0x43, 0x301 /* offset 142 */ , - 0x63, 0x301 /* offset 144 */ , - 0x43, 0x302 /* offset 146 */ , - 0x63, 0x302 /* offset 148 */ , - 0x43, 0x307 /* offset 150 */ , - 0x63, 0x307 /* offset 152 */ , - 0x43, 0x30c /* offset 154 */ , - 0x63, 0x30c /* offset 156 */ , - 0x44, 0x30c /* offset 158 */ , - 0x64, 0x30c /* offset 160 */ , - 0x45, 0x304 /* offset 162 */ , - 0x65, 0x304 /* offset 164 */ , - 0x45, 0x306 /* offset 166 */ , - 0x65, 0x306 /* offset 168 */ , - 0x45, 0x307 /* offset 170 */ , - 0x65, 0x307 /* offset 172 */ , - 0x45, 0x328 /* offset 174 */ , - 0x65, 0x328 /* offset 176 */ , - 0x45, 0x30c /* offset 178 */ , - 0x65, 0x30c /* offset 180 */ , - 0x47, 0x302 /* offset 182 */ , - 0x67, 0x302 /* offset 184 */ , - 0x47, 0x306 /* offset 186 */ , - 0x67, 0x306 /* offset 188 */ , - 0x47, 0x307 /* offset 190 */ , - 0x67, 0x307 /* offset 192 */ , - 0x47, 0x327 /* offset 194 */ , - 0x67, 0x327 /* offset 196 */ , - 0x48, 0x302 /* offset 198 */ , - 0x68, 0x302 /* offset 200 */ , - 0x49, 0x303 /* offset 202 */ , - 0x69, 0x303 /* offset 204 */ , - 0x49, 0x304 /* offset 206 */ , - 0x69, 0x304 /* offset 208 */ , - 0x49, 0x306 /* offset 210 */ , - 0x69, 0x306 /* offset 212 */ , - 0x49, 0x328 /* offset 214 */ , - 0x69, 0x328 /* offset 216 */ , - 0x49, 0x307 /* offset 218 */ , - 0x49, 0x4a /* offset 220 */ , - 0x69, 0x6a /* offset 222 */ , - 0x4a, 0x302 /* offset 224 */ , - 0x6a, 0x302 /* offset 226 */ , - 0x4b, 0x327 /* offset 228 */ , - 0x6b, 0x327 /* offset 230 */ , - 0x4c, 0x301 /* offset 232 */ , - 0x6c, 0x301 /* offset 234 */ , - 0x4c, 0x327 /* offset 236 */ , - 0x6c, 0x327 /* offset 238 */ , - 0x4c, 0x30c /* offset 240 */ , - 0x6c, 0x30c /* offset 242 */ , - 0x4c, 0xb7 /* offset 244 */ , - 0x6c, 0xb7 /* offset 246 */ , - 0x4e, 0x301 /* offset 248 */ , - 0x6e, 0x301 /* offset 250 */ , - 0x4e, 0x327 /* offset 252 */ , - 0x6e, 0x327 /* offset 254 */ , - 0x4e, 0x30c /* offset 256 */ , - 0x6e, 0x30c /* offset 258 */ , - 0x2bc, 0x6e /* offset 260 */ , - 0x4f, 0x304 /* offset 262 */ , - 0x6f, 0x304 /* offset 264 */ , - 0x4f, 0x306 /* offset 266 */ , - 0x6f, 0x306 /* offset 268 */ , - 0x4f, 0x30b /* offset 270 */ , - 0x6f, 0x30b /* offset 272 */ , - 0x52, 0x301 /* offset 274 */ , - 0x72, 0x301 /* offset 276 */ , - 0x52, 0x327 /* offset 278 */ , - 0x72, 0x327 /* offset 280 */ , - 0x52, 0x30c /* offset 282 */ , - 0x72, 0x30c /* offset 284 */ , - 0x53, 0x301 /* offset 286 */ , - 0x73, 0x301 /* offset 288 */ , - 0x53, 0x302 /* offset 290 */ , - 0x73, 0x302 /* offset 292 */ , - 0x53, 0x327 /* offset 294 */ , - 0x73, 0x327 /* offset 296 */ , - 0x53, 0x30c /* offset 298 */ , - 0x73, 0x30c /* offset 300 */ , - 0x54, 0x327 /* offset 302 */ , - 0x74, 0x327 /* offset 304 */ , - 0x54, 0x30c /* offset 306 */ , - 0x74, 0x30c /* offset 308 */ , - 0x55, 0x303 /* offset 310 */ , - 0x75, 0x303 /* offset 312 */ , - 0x55, 0x304 /* offset 314 */ , - 0x75, 0x304 /* offset 316 */ , - 0x55, 0x306 /* offset 318 */ , - 0x75, 0x306 /* offset 320 */ , - 0x55, 0x30a /* offset 322 */ , - 0x75, 0x30a /* offset 324 */ , - 0x55, 0x30b /* offset 326 */ , - 0x75, 0x30b /* offset 328 */ , - 0x55, 0x328 /* offset 330 */ , - 0x75, 0x328 /* offset 332 */ , - 0x57, 0x302 /* offset 334 */ , - 0x77, 0x302 /* offset 336 */ , - 0x59, 0x302 /* offset 338 */ , - 0x79, 0x302 /* offset 340 */ , - 0x59, 0x308 /* offset 342 */ , - 0x5a, 0x301 /* offset 344 */ , - 0x7a, 0x301 /* offset 346 */ , - 0x5a, 0x307 /* offset 348 */ , - 0x7a, 0x307 /* offset 350 */ , - 0x5a, 0x30c /* offset 352 */ , - 0x7a, 0x30c /* offset 354 */ , - 0x73 /* offset 356 */ , - 0x4f, 0x31b /* offset 357 */ , - 0x6f, 0x31b /* offset 359 */ , - 0x55, 0x31b /* offset 361 */ , - 0x75, 0x31b /* offset 363 */ , - 0x44, 0x5a, 0x30c /* offset 365 */ , - 0x44, 0x7a, 0x30c /* offset 368 */ , - 0x64, 0x7a, 0x30c /* offset 371 */ , - 0x4c, 0x4a /* offset 374 */ , - 0x4c, 0x6a /* offset 376 */ , - 0x6c, 0x6a /* offset 378 */ , - 0x4e, 0x4a /* offset 380 */ , - 0x4e, 0x6a /* offset 382 */ , - 0x6e, 0x6a /* offset 384 */ , - 0x41, 0x30c /* offset 386 */ , - 0x61, 0x30c /* offset 388 */ , - 0x49, 0x30c /* offset 390 */ , - 0x69, 0x30c /* offset 392 */ , - 0x4f, 0x30c /* offset 394 */ , - 0x6f, 0x30c /* offset 396 */ , - 0x55, 0x30c /* offset 398 */ , - 0x75, 0x30c /* offset 400 */ , - 0x55, 0x308, 0x304 /* offset 402 */ , - 0x75, 0x308, 0x304 /* offset 405 */ , - 0x55, 0x308, 0x301 /* offset 408 */ , - 0x75, 0x308, 0x301 /* offset 411 */ , - 0x55, 0x308, 0x30c /* offset 414 */ , - 0x75, 0x308, 0x30c /* offset 417 */ , - 0x55, 0x308, 0x300 /* offset 420 */ , - 0x75, 0x308, 0x300 /* offset 423 */ , - 0x41, 0x308, 0x304 /* offset 426 */ , - 0x61, 0x308, 0x304 /* offset 429 */ , - 0x41, 0x307, 0x304 /* offset 432 */ , - 0x61, 0x307, 0x304 /* offset 435 */ , - 0xc6, 0x304 /* offset 438 */ , - 0xe6, 0x304 /* offset 440 */ , - 0x47, 0x30c /* offset 442 */ , - 0x67, 0x30c /* offset 444 */ , - 0x4b, 0x30c /* offset 446 */ , - 0x6b, 0x30c /* offset 448 */ , - 0x4f, 0x328 /* offset 450 */ , - 0x6f, 0x328 /* offset 452 */ , - 0x4f, 0x328, 0x304 /* offset 454 */ , - 0x6f, 0x328, 0x304 /* offset 457 */ , - 0x1b7, 0x30c /* offset 460 */ , - 0x292, 0x30c /* offset 462 */ , - 0x6a, 0x30c /* offset 464 */ , - 0x44, 0x5a /* offset 466 */ , - 0x44, 0x7a /* offset 468 */ , - 0x64, 0x7a /* offset 470 */ , - 0x47, 0x301 /* offset 472 */ , - 0x67, 0x301 /* offset 474 */ , - 0x4e, 0x300 /* offset 476 */ , - 0x6e, 0x300 /* offset 478 */ , - 0x41, 0x30a, 0x301 /* offset 480 */ , - 0x61, 0x30a, 0x301 /* offset 483 */ , - 0xc6, 0x301 /* offset 486 */ , - 0xe6, 0x301 /* offset 488 */ , - 0xd8, 0x301 /* offset 490 */ , - 0xf8, 0x301 /* offset 492 */ , - 0x41, 0x30f /* offset 494 */ , - 0x61, 0x30f /* offset 496 */ , - 0x41, 0x311 /* offset 498 */ , - 0x61, 0x311 /* offset 500 */ , - 0x45, 0x30f /* offset 502 */ , - 0x65, 0x30f /* offset 504 */ , - 0x45, 0x311 /* offset 506 */ , - 0x65, 0x311 /* offset 508 */ , - 0x49, 0x30f /* offset 510 */ , - 0x69, 0x30f /* offset 512 */ , - 0x49, 0x311 /* offset 514 */ , - 0x69, 0x311 /* offset 516 */ , - 0x4f, 0x30f /* offset 518 */ , - 0x6f, 0x30f /* offset 520 */ , - 0x4f, 0x311 /* offset 522 */ , - 0x6f, 0x311 /* offset 524 */ , - 0x52, 0x30f /* offset 526 */ , - 0x72, 0x30f /* offset 528 */ , - 0x52, 0x311 /* offset 530 */ , - 0x72, 0x311 /* offset 532 */ , - 0x55, 0x30f /* offset 534 */ , - 0x75, 0x30f /* offset 536 */ , - 0x55, 0x311 /* offset 538 */ , - 0x75, 0x311 /* offset 540 */ , - 0x53, 0x326 /* offset 542 */ , - 0x73, 0x326 /* offset 544 */ , - 0x54, 0x326 /* offset 546 */ , - 0x74, 0x326 /* offset 548 */ , - 0x48, 0x30c /* offset 550 */ , - 0x68, 0x30c /* offset 552 */ , - 0x41, 0x307 /* offset 554 */ , - 0x61, 0x307 /* offset 556 */ , - 0x45, 0x327 /* offset 558 */ , - 0x65, 0x327 /* offset 560 */ , - 0x4f, 0x308, 0x304 /* offset 562 */ , - 0x6f, 0x308, 0x304 /* offset 565 */ , - 0x4f, 0x303, 0x304 /* offset 568 */ , - 0x6f, 0x303, 0x304 /* offset 571 */ , - 0x4f, 0x307 /* offset 574 */ , - 0x6f, 0x307 /* offset 576 */ , - 0x4f, 0x307, 0x304 /* offset 578 */ , - 0x6f, 0x307, 0x304 /* offset 581 */ , - 0x59, 0x304 /* offset 584 */ , - 0x79, 0x304 /* offset 586 */ , - 0x68 /* offset 588 */ , - 0x266 /* offset 589 */ , - 0x6a /* offset 590 */ , - 0x72 /* offset 591 */ , - 0x279 /* offset 592 */ , - 0x27b /* offset 593 */ , - 0x281 /* offset 594 */ , - 0x77 /* offset 595 */ , - 0x79 /* offset 596 */ , - 0x20, 0x306 /* offset 597 */ , - 0x20, 0x307 /* offset 599 */ , - 0x20, 0x30a /* offset 601 */ , - 0x20, 0x328 /* offset 603 */ , - 0x20, 0x303 /* offset 605 */ , - 0x20, 0x30b /* offset 607 */ , - 0x263 /* offset 609 */ , - 0x6c /* offset 610 */ , - 0x78 /* offset 611 */ , - 0x295 /* offset 612 */ , - 0x300 /* offset 613 */ , - 0x301 /* offset 614 */ , - 0x313 /* offset 615 */ , - 0x308, 0x301 /* offset 616 */ , - 0x2b9 /* offset 618 */ , - 0x20, 0x345 /* offset 619 */ , - 0x3b /* offset 621 */ , - 0x20, 0x308, 0x301 /* offset 622 */ , - 0x391, 0x301 /* offset 625 */ , - 0xb7 /* offset 627 */ , - 0x395, 0x301 /* offset 628 */ , - 0x397, 0x301 /* offset 630 */ , - 0x399, 0x301 /* offset 632 */ , - 0x39f, 0x301 /* offset 634 */ , - 0x3a5, 0x301 /* offset 636 */ , - 0x3a9, 0x301 /* offset 638 */ , - 0x3b9, 0x308, 0x301 /* offset 640 */ , - 0x399, 0x308 /* offset 643 */ , - 0x3a5, 0x308 /* offset 645 */ , - 0x3b1, 0x301 /* offset 647 */ , - 0x3b5, 0x301 /* offset 649 */ , - 0x3b7, 0x301 /* offset 651 */ , - 0x3b9, 0x301 /* offset 653 */ , - 0x3c5, 0x308, 0x301 /* offset 655 */ , - 0x3b9, 0x308 /* offset 658 */ , - 0x3c5, 0x308 /* offset 660 */ , - 0x3bf, 0x301 /* offset 662 */ , - 0x3c5, 0x301 /* offset 664 */ , - 0x3c9, 0x301 /* offset 666 */ , - 0x3b2 /* offset 668 */ , - 0x3b8 /* offset 669 */ , - 0x3a5 /* offset 670 */ , - 0x3c6 /* offset 671 */ , - 0x3c0 /* offset 672 */ , - 0x3ba /* offset 673 */ , - 0x3c1 /* offset 674 */ , - 0x3c2 /* offset 675 */ , - 0x398 /* offset 676 */ , - 0x3b5 /* offset 677 */ , - 0x415, 0x300 /* offset 678 */ , - 0x415, 0x308 /* offset 680 */ , - 0x413, 0x301 /* offset 682 */ , - 0x406, 0x308 /* offset 684 */ , - 0x41a, 0x301 /* offset 686 */ , - 0x418, 0x300 /* offset 688 */ , - 0x423, 0x306 /* offset 690 */ , - 0x418, 0x306 /* offset 692 */ , - 0x438, 0x306 /* offset 694 */ , - 0x435, 0x300 /* offset 696 */ , - 0x435, 0x308 /* offset 698 */ , - 0x433, 0x301 /* offset 700 */ , - 0x456, 0x308 /* offset 702 */ , - 0x43a, 0x301 /* offset 704 */ , - 0x438, 0x300 /* offset 706 */ , - 0x443, 0x306 /* offset 708 */ , - 0x474, 0x30f /* offset 710 */ , - 0x475, 0x30f /* offset 712 */ , - 0x416, 0x306 /* offset 714 */ , - 0x436, 0x306 /* offset 716 */ , - 0x410, 0x306 /* offset 718 */ , - 0x430, 0x306 /* offset 720 */ , - 0x410, 0x308 /* offset 722 */ , - 0x430, 0x308 /* offset 724 */ , - 0x415, 0x306 /* offset 726 */ , - 0x435, 0x306 /* offset 728 */ , - 0x4d8, 0x308 /* offset 730 */ , - 0x4d9, 0x308 /* offset 732 */ , - 0x416, 0x308 /* offset 734 */ , - 0x436, 0x308 /* offset 736 */ , - 0x417, 0x308 /* offset 738 */ , - 0x437, 0x308 /* offset 740 */ , - 0x418, 0x304 /* offset 742 */ , - 0x438, 0x304 /* offset 744 */ , - 0x418, 0x308 /* offset 746 */ , - 0x438, 0x308 /* offset 748 */ , - 0x41e, 0x308 /* offset 750 */ , - 0x43e, 0x308 /* offset 752 */ , - 0x4e8, 0x308 /* offset 754 */ , - 0x4e9, 0x308 /* offset 756 */ , - 0x42d, 0x308 /* offset 758 */ , - 0x44d, 0x308 /* offset 760 */ , - 0x423, 0x304 /* offset 762 */ , - 0x443, 0x304 /* offset 764 */ , - 0x423, 0x308 /* offset 766 */ , - 0x443, 0x308 /* offset 768 */ , - 0x423, 0x30b /* offset 770 */ , - 0x443, 0x30b /* offset 772 */ , - 0x427, 0x308 /* offset 774 */ , - 0x447, 0x308 /* offset 776 */ , - 0x42b, 0x308 /* offset 778 */ , - 0x44b, 0x308 /* offset 780 */ , - 0x565, 0x582 /* offset 782 */ , - 0x627, 0x653 /* offset 784 */ , - 0x627, 0x654 /* offset 786 */ , - 0x648, 0x654 /* offset 788 */ , - 0x627, 0x655 /* offset 790 */ , - 0x64a, 0x654 /* offset 792 */ , - 0x627, 0x674 /* offset 794 */ , - 0x648, 0x674 /* offset 796 */ , - 0x6c7, 0x674 /* offset 798 */ , - 0x64a, 0x674 /* offset 800 */ , - 0x6d5, 0x654 /* offset 802 */ , - 0x6c1, 0x654 /* offset 804 */ , - 0x6d2, 0x654 /* offset 806 */ , - 0x928, 0x93c /* offset 808 */ , - 0x930, 0x93c /* offset 810 */ , - 0x933, 0x93c /* offset 812 */ , - 0x915, 0x93c /* offset 814 */ , - 0x916, 0x93c /* offset 816 */ , - 0x917, 0x93c /* offset 818 */ , - 0x91c, 0x93c /* offset 820 */ , - 0x921, 0x93c /* offset 822 */ , - 0x922, 0x93c /* offset 824 */ , - 0x92b, 0x93c /* offset 826 */ , - 0x92f, 0x93c /* offset 828 */ , - 0x9c7, 0x9be /* offset 830 */ , - 0x9c7, 0x9d7 /* offset 832 */ , - 0x9a1, 0x9bc /* offset 834 */ , - 0x9a2, 0x9bc /* offset 836 */ , - 0x9af, 0x9bc /* offset 838 */ , - 0xa32, 0xa3c /* offset 840 */ , - 0xa38, 0xa3c /* offset 842 */ , - 0xa16, 0xa3c /* offset 844 */ , - 0xa17, 0xa3c /* offset 846 */ , - 0xa1c, 0xa3c /* offset 848 */ , - 0xa2b, 0xa3c /* offset 850 */ , - 0xb47, 0xb56 /* offset 852 */ , - 0xb47, 0xb3e /* offset 854 */ , - 0xb47, 0xb57 /* offset 856 */ , - 0xb21, 0xb3c /* offset 858 */ , - 0xb22, 0xb3c /* offset 860 */ , - 0xb92, 0xbd7 /* offset 862 */ , - 0xbc6, 0xbbe /* offset 864 */ , - 0xbc7, 0xbbe /* offset 866 */ , - 0xbc6, 0xbd7 /* offset 868 */ , - 0xc46, 0xc56 /* offset 870 */ , - 0xcbf, 0xcd5 /* offset 872 */ , - 0xcc6, 0xcd5 /* offset 874 */ , - 0xcc6, 0xcd6 /* offset 876 */ , - 0xcc6, 0xcc2 /* offset 878 */ , - 0xcc6, 0xcc2, 0xcd5 /* offset 880 */ , - 0xd46, 0xd3e /* offset 883 */ , - 0xd47, 0xd3e /* offset 885 */ , - 0xd46, 0xd57 /* offset 887 */ , - 0xdd9, 0xdca /* offset 889 */ , - 0xdd9, 0xdcf /* offset 891 */ , - 0xdd9, 0xdcf, 0xdca /* offset 893 */ , - 0xdd9, 0xddf /* offset 896 */ , - 0xe4d, 0xe32 /* offset 898 */ , - 0xecd, 0xeb2 /* offset 900 */ , - 0xeab, 0xe99 /* offset 902 */ , - 0xeab, 0xea1 /* offset 904 */ , - 0xf0b /* offset 906 */ , - 0xf42, 0xfb7 /* offset 907 */ , - 0xf4c, 0xfb7 /* offset 909 */ , - 0xf51, 0xfb7 /* offset 911 */ , - 0xf56, 0xfb7 /* offset 913 */ , - 0xf5b, 0xfb7 /* offset 915 */ , - 0xf40, 0xfb5 /* offset 917 */ , - 0xf71, 0xf72 /* offset 919 */ , - 0xf71, 0xf74 /* offset 921 */ , - 0xfb2, 0xf80 /* offset 923 */ , - 0xfb2, 0xf71, 0xf80 /* offset 925 */ , - 0xfb3, 0xf80 /* offset 928 */ , - 0xfb3, 0xf71, 0xf80 /* offset 930 */ , - 0xf71, 0xf80 /* offset 933 */ , - 0xf92, 0xfb7 /* offset 935 */ , - 0xf9c, 0xfb7 /* offset 937 */ , - 0xfa1, 0xfb7 /* offset 939 */ , - 0xfa6, 0xfb7 /* offset 941 */ , - 0xfab, 0xfb7 /* offset 943 */ , - 0xf90, 0xfb5 /* offset 945 */ , - 0x1025, 0x102e /* offset 947 */ , - 0x41, 0x325 /* offset 949 */ , - 0x61, 0x325 /* offset 951 */ , - 0x42, 0x307 /* offset 953 */ , - 0x62, 0x307 /* offset 955 */ , - 0x42, 0x323 /* offset 957 */ , - 0x62, 0x323 /* offset 959 */ , - 0x42, 0x331 /* offset 961 */ , - 0x62, 0x331 /* offset 963 */ , - 0x43, 0x327, 0x301 /* offset 965 */ , - 0x63, 0x327, 0x301 /* offset 968 */ , - 0x44, 0x307 /* offset 971 */ , - 0x64, 0x307 /* offset 973 */ , - 0x44, 0x323 /* offset 975 */ , - 0x64, 0x323 /* offset 977 */ , - 0x44, 0x331 /* offset 979 */ , - 0x64, 0x331 /* offset 981 */ , - 0x44, 0x327 /* offset 983 */ , - 0x64, 0x327 /* offset 985 */ , - 0x44, 0x32d /* offset 987 */ , - 0x64, 0x32d /* offset 989 */ , - 0x45, 0x304, 0x300 /* offset 991 */ , - 0x65, 0x304, 0x300 /* offset 994 */ , - 0x45, 0x304, 0x301 /* offset 997 */ , - 0x65, 0x304, 0x301 /* offset 1000 */ , - 0x45, 0x32d /* offset 1003 */ , - 0x65, 0x32d /* offset 1005 */ , - 0x45, 0x330 /* offset 1007 */ , - 0x65, 0x330 /* offset 1009 */ , - 0x45, 0x327, 0x306 /* offset 1011 */ , - 0x65, 0x327, 0x306 /* offset 1014 */ , - 0x46, 0x307 /* offset 1017 */ , - 0x66, 0x307 /* offset 1019 */ , - 0x47, 0x304 /* offset 1021 */ , - 0x67, 0x304 /* offset 1023 */ , - 0x48, 0x307 /* offset 1025 */ , - 0x68, 0x307 /* offset 1027 */ , - 0x48, 0x323 /* offset 1029 */ , - 0x68, 0x323 /* offset 1031 */ , - 0x48, 0x308 /* offset 1033 */ , - 0x68, 0x308 /* offset 1035 */ , - 0x48, 0x327 /* offset 1037 */ , - 0x68, 0x327 /* offset 1039 */ , - 0x48, 0x32e /* offset 1041 */ , - 0x68, 0x32e /* offset 1043 */ , - 0x49, 0x330 /* offset 1045 */ , - 0x69, 0x330 /* offset 1047 */ , - 0x49, 0x308, 0x301 /* offset 1049 */ , - 0x69, 0x308, 0x301 /* offset 1052 */ , - 0x4b, 0x301 /* offset 1055 */ , - 0x6b, 0x301 /* offset 1057 */ , - 0x4b, 0x323 /* offset 1059 */ , - 0x6b, 0x323 /* offset 1061 */ , - 0x4b, 0x331 /* offset 1063 */ , - 0x6b, 0x331 /* offset 1065 */ , - 0x4c, 0x323 /* offset 1067 */ , - 0x6c, 0x323 /* offset 1069 */ , - 0x4c, 0x323, 0x304 /* offset 1071 */ , - 0x6c, 0x323, 0x304 /* offset 1074 */ , - 0x4c, 0x331 /* offset 1077 */ , - 0x6c, 0x331 /* offset 1079 */ , - 0x4c, 0x32d /* offset 1081 */ , - 0x6c, 0x32d /* offset 1083 */ , - 0x4d, 0x301 /* offset 1085 */ , - 0x6d, 0x301 /* offset 1087 */ , - 0x4d, 0x307 /* offset 1089 */ , - 0x6d, 0x307 /* offset 1091 */ , - 0x4d, 0x323 /* offset 1093 */ , - 0x6d, 0x323 /* offset 1095 */ , - 0x4e, 0x307 /* offset 1097 */ , - 0x6e, 0x307 /* offset 1099 */ , - 0x4e, 0x323 /* offset 1101 */ , - 0x6e, 0x323 /* offset 1103 */ , - 0x4e, 0x331 /* offset 1105 */ , - 0x6e, 0x331 /* offset 1107 */ , - 0x4e, 0x32d /* offset 1109 */ , - 0x6e, 0x32d /* offset 1111 */ , - 0x4f, 0x303, 0x301 /* offset 1113 */ , - 0x6f, 0x303, 0x301 /* offset 1116 */ , - 0x4f, 0x303, 0x308 /* offset 1119 */ , - 0x6f, 0x303, 0x308 /* offset 1122 */ , - 0x4f, 0x304, 0x300 /* offset 1125 */ , - 0x6f, 0x304, 0x300 /* offset 1128 */ , - 0x4f, 0x304, 0x301 /* offset 1131 */ , - 0x6f, 0x304, 0x301 /* offset 1134 */ , - 0x50, 0x301 /* offset 1137 */ , - 0x70, 0x301 /* offset 1139 */ , - 0x50, 0x307 /* offset 1141 */ , - 0x70, 0x307 /* offset 1143 */ , - 0x52, 0x307 /* offset 1145 */ , - 0x72, 0x307 /* offset 1147 */ , - 0x52, 0x323 /* offset 1149 */ , - 0x72, 0x323 /* offset 1151 */ , - 0x52, 0x323, 0x304 /* offset 1153 */ , - 0x72, 0x323, 0x304 /* offset 1156 */ , - 0x52, 0x331 /* offset 1159 */ , - 0x72, 0x331 /* offset 1161 */ , - 0x53, 0x307 /* offset 1163 */ , - 0x73, 0x307 /* offset 1165 */ , - 0x53, 0x323 /* offset 1167 */ , - 0x73, 0x323 /* offset 1169 */ , - 0x53, 0x301, 0x307 /* offset 1171 */ , - 0x73, 0x301, 0x307 /* offset 1174 */ , - 0x53, 0x30c, 0x307 /* offset 1177 */ , - 0x73, 0x30c, 0x307 /* offset 1180 */ , - 0x53, 0x323, 0x307 /* offset 1183 */ , - 0x73, 0x323, 0x307 /* offset 1186 */ , - 0x54, 0x307 /* offset 1189 */ , - 0x74, 0x307 /* offset 1191 */ , - 0x54, 0x323 /* offset 1193 */ , - 0x74, 0x323 /* offset 1195 */ , - 0x54, 0x331 /* offset 1197 */ , - 0x74, 0x331 /* offset 1199 */ , - 0x54, 0x32d /* offset 1201 */ , - 0x74, 0x32d /* offset 1203 */ , - 0x55, 0x324 /* offset 1205 */ , - 0x75, 0x324 /* offset 1207 */ , - 0x55, 0x330 /* offset 1209 */ , - 0x75, 0x330 /* offset 1211 */ , - 0x55, 0x32d /* offset 1213 */ , - 0x75, 0x32d /* offset 1215 */ , - 0x55, 0x303, 0x301 /* offset 1217 */ , - 0x75, 0x303, 0x301 /* offset 1220 */ , - 0x55, 0x304, 0x308 /* offset 1223 */ , - 0x75, 0x304, 0x308 /* offset 1226 */ , - 0x56, 0x303 /* offset 1229 */ , - 0x76, 0x303 /* offset 1231 */ , - 0x56, 0x323 /* offset 1233 */ , - 0x76, 0x323 /* offset 1235 */ , - 0x57, 0x300 /* offset 1237 */ , - 0x77, 0x300 /* offset 1239 */ , - 0x57, 0x301 /* offset 1241 */ , - 0x77, 0x301 /* offset 1243 */ , - 0x57, 0x308 /* offset 1245 */ , - 0x77, 0x308 /* offset 1247 */ , - 0x57, 0x307 /* offset 1249 */ , - 0x77, 0x307 /* offset 1251 */ , - 0x57, 0x323 /* offset 1253 */ , - 0x77, 0x323 /* offset 1255 */ , - 0x58, 0x307 /* offset 1257 */ , - 0x78, 0x307 /* offset 1259 */ , - 0x58, 0x308 /* offset 1261 */ , - 0x78, 0x308 /* offset 1263 */ , - 0x59, 0x307 /* offset 1265 */ , - 0x79, 0x307 /* offset 1267 */ , - 0x5a, 0x302 /* offset 1269 */ , - 0x7a, 0x302 /* offset 1271 */ , - 0x5a, 0x323 /* offset 1273 */ , - 0x7a, 0x323 /* offset 1275 */ , - 0x5a, 0x331 /* offset 1277 */ , - 0x7a, 0x331 /* offset 1279 */ , - 0x68, 0x331 /* offset 1281 */ , - 0x74, 0x308 /* offset 1283 */ , - 0x77, 0x30a /* offset 1285 */ , - 0x79, 0x30a /* offset 1287 */ , - 0x61, 0x2be /* offset 1289 */ , - 0x41, 0x323 /* offset 1291 */ , - 0x61, 0x323 /* offset 1293 */ , - 0x41, 0x309 /* offset 1295 */ , - 0x61, 0x309 /* offset 1297 */ , - 0x41, 0x302, 0x301 /* offset 1299 */ , - 0x61, 0x302, 0x301 /* offset 1302 */ , - 0x41, 0x302, 0x300 /* offset 1305 */ , - 0x61, 0x302, 0x300 /* offset 1308 */ , - 0x41, 0x302, 0x309 /* offset 1311 */ , - 0x61, 0x302, 0x309 /* offset 1314 */ , - 0x41, 0x302, 0x303 /* offset 1317 */ , - 0x61, 0x302, 0x303 /* offset 1320 */ , - 0x41, 0x323, 0x302 /* offset 1323 */ , - 0x61, 0x323, 0x302 /* offset 1326 */ , - 0x41, 0x306, 0x301 /* offset 1329 */ , - 0x61, 0x306, 0x301 /* offset 1332 */ , - 0x41, 0x306, 0x300 /* offset 1335 */ , - 0x61, 0x306, 0x300 /* offset 1338 */ , - 0x41, 0x306, 0x309 /* offset 1341 */ , - 0x61, 0x306, 0x309 /* offset 1344 */ , - 0x41, 0x306, 0x303 /* offset 1347 */ , - 0x61, 0x306, 0x303 /* offset 1350 */ , - 0x41, 0x323, 0x306 /* offset 1353 */ , - 0x61, 0x323, 0x306 /* offset 1356 */ , - 0x45, 0x323 /* offset 1359 */ , - 0x65, 0x323 /* offset 1361 */ , - 0x45, 0x309 /* offset 1363 */ , - 0x65, 0x309 /* offset 1365 */ , - 0x45, 0x303 /* offset 1367 */ , - 0x65, 0x303 /* offset 1369 */ , - 0x45, 0x302, 0x301 /* offset 1371 */ , - 0x65, 0x302, 0x301 /* offset 1374 */ , - 0x45, 0x302, 0x300 /* offset 1377 */ , - 0x65, 0x302, 0x300 /* offset 1380 */ , - 0x45, 0x302, 0x309 /* offset 1383 */ , - 0x65, 0x302, 0x309 /* offset 1386 */ , - 0x45, 0x302, 0x303 /* offset 1389 */ , - 0x65, 0x302, 0x303 /* offset 1392 */ , - 0x45, 0x323, 0x302 /* offset 1395 */ , - 0x65, 0x323, 0x302 /* offset 1398 */ , - 0x49, 0x309 /* offset 1401 */ , - 0x69, 0x309 /* offset 1403 */ , - 0x49, 0x323 /* offset 1405 */ , - 0x69, 0x323 /* offset 1407 */ , - 0x4f, 0x323 /* offset 1409 */ , - 0x6f, 0x323 /* offset 1411 */ , - 0x4f, 0x309 /* offset 1413 */ , - 0x6f, 0x309 /* offset 1415 */ , - 0x4f, 0x302, 0x301 /* offset 1417 */ , - 0x6f, 0x302, 0x301 /* offset 1420 */ , - 0x4f, 0x302, 0x300 /* offset 1423 */ , - 0x6f, 0x302, 0x300 /* offset 1426 */ , - 0x4f, 0x302, 0x309 /* offset 1429 */ , - 0x6f, 0x302, 0x309 /* offset 1432 */ , - 0x4f, 0x302, 0x303 /* offset 1435 */ , - 0x6f, 0x302, 0x303 /* offset 1438 */ , - 0x4f, 0x323, 0x302 /* offset 1441 */ , - 0x6f, 0x323, 0x302 /* offset 1444 */ , - 0x4f, 0x31b, 0x301 /* offset 1447 */ , - 0x6f, 0x31b, 0x301 /* offset 1450 */ , - 0x4f, 0x31b, 0x300 /* offset 1453 */ , - 0x6f, 0x31b, 0x300 /* offset 1456 */ , - 0x4f, 0x31b, 0x309 /* offset 1459 */ , - 0x6f, 0x31b, 0x309 /* offset 1462 */ , - 0x4f, 0x31b, 0x303 /* offset 1465 */ , - 0x6f, 0x31b, 0x303 /* offset 1468 */ , - 0x4f, 0x31b, 0x323 /* offset 1471 */ , - 0x6f, 0x31b, 0x323 /* offset 1474 */ , - 0x55, 0x323 /* offset 1477 */ , - 0x75, 0x323 /* offset 1479 */ , - 0x55, 0x309 /* offset 1481 */ , - 0x75, 0x309 /* offset 1483 */ , - 0x55, 0x31b, 0x301 /* offset 1485 */ , - 0x75, 0x31b, 0x301 /* offset 1488 */ , - 0x55, 0x31b, 0x300 /* offset 1491 */ , - 0x75, 0x31b, 0x300 /* offset 1494 */ , - 0x55, 0x31b, 0x309 /* offset 1497 */ , - 0x75, 0x31b, 0x309 /* offset 1500 */ , - 0x55, 0x31b, 0x303 /* offset 1503 */ , - 0x75, 0x31b, 0x303 /* offset 1506 */ , - 0x55, 0x31b, 0x323 /* offset 1509 */ , - 0x75, 0x31b, 0x323 /* offset 1512 */ , - 0x59, 0x300 /* offset 1515 */ , - 0x79, 0x300 /* offset 1517 */ , - 0x59, 0x323 /* offset 1519 */ , - 0x79, 0x323 /* offset 1521 */ , - 0x59, 0x309 /* offset 1523 */ , - 0x79, 0x309 /* offset 1525 */ , - 0x59, 0x303 /* offset 1527 */ , - 0x79, 0x303 /* offset 1529 */ , - 0x3b1, 0x313 /* offset 1531 */ , - 0x3b1, 0x314 /* offset 1533 */ , - 0x3b1, 0x313, 0x300 /* offset 1535 */ , - 0x3b1, 0x314, 0x300 /* offset 1538 */ , - 0x3b1, 0x313, 0x301 /* offset 1541 */ , - 0x3b1, 0x314, 0x301 /* offset 1544 */ , - 0x3b1, 0x313, 0x342 /* offset 1547 */ , - 0x3b1, 0x314, 0x342 /* offset 1550 */ , - 0x391, 0x313 /* offset 1553 */ , - 0x391, 0x314 /* offset 1555 */ , - 0x391, 0x313, 0x300 /* offset 1557 */ , - 0x391, 0x314, 0x300 /* offset 1560 */ , - 0x391, 0x313, 0x301 /* offset 1563 */ , - 0x391, 0x314, 0x301 /* offset 1566 */ , - 0x391, 0x313, 0x342 /* offset 1569 */ , - 0x391, 0x314, 0x342 /* offset 1572 */ , - 0x3b5, 0x313 /* offset 1575 */ , - 0x3b5, 0x314 /* offset 1577 */ , - 0x3b5, 0x313, 0x300 /* offset 1579 */ , - 0x3b5, 0x314, 0x300 /* offset 1582 */ , - 0x3b5, 0x313, 0x301 /* offset 1585 */ , - 0x3b5, 0x314, 0x301 /* offset 1588 */ , - 0x395, 0x313 /* offset 1591 */ , - 0x395, 0x314 /* offset 1593 */ , - 0x395, 0x313, 0x300 /* offset 1595 */ , - 0x395, 0x314, 0x300 /* offset 1598 */ , - 0x395, 0x313, 0x301 /* offset 1601 */ , - 0x395, 0x314, 0x301 /* offset 1604 */ , - 0x3b7, 0x313 /* offset 1607 */ , - 0x3b7, 0x314 /* offset 1609 */ , - 0x3b7, 0x313, 0x300 /* offset 1611 */ , - 0x3b7, 0x314, 0x300 /* offset 1614 */ , - 0x3b7, 0x313, 0x301 /* offset 1617 */ , - 0x3b7, 0x314, 0x301 /* offset 1620 */ , - 0x3b7, 0x313, 0x342 /* offset 1623 */ , - 0x3b7, 0x314, 0x342 /* offset 1626 */ , - 0x397, 0x313 /* offset 1629 */ , - 0x397, 0x314 /* offset 1631 */ , - 0x397, 0x313, 0x300 /* offset 1633 */ , - 0x397, 0x314, 0x300 /* offset 1636 */ , - 0x397, 0x313, 0x301 /* offset 1639 */ , - 0x397, 0x314, 0x301 /* offset 1642 */ , - 0x397, 0x313, 0x342 /* offset 1645 */ , - 0x397, 0x314, 0x342 /* offset 1648 */ , - 0x3b9, 0x313 /* offset 1651 */ , - 0x3b9, 0x314 /* offset 1653 */ , - 0x3b9, 0x313, 0x300 /* offset 1655 */ , - 0x3b9, 0x314, 0x300 /* offset 1658 */ , - 0x3b9, 0x313, 0x301 /* offset 1661 */ , - 0x3b9, 0x314, 0x301 /* offset 1664 */ , - 0x3b9, 0x313, 0x342 /* offset 1667 */ , - 0x3b9, 0x314, 0x342 /* offset 1670 */ , - 0x399, 0x313 /* offset 1673 */ , - 0x399, 0x314 /* offset 1675 */ , - 0x399, 0x313, 0x300 /* offset 1677 */ , - 0x399, 0x314, 0x300 /* offset 1680 */ , - 0x399, 0x313, 0x301 /* offset 1683 */ , - 0x399, 0x314, 0x301 /* offset 1686 */ , - 0x399, 0x313, 0x342 /* offset 1689 */ , - 0x399, 0x314, 0x342 /* offset 1692 */ , - 0x3bf, 0x313 /* offset 1695 */ , - 0x3bf, 0x314 /* offset 1697 */ , - 0x3bf, 0x313, 0x300 /* offset 1699 */ , - 0x3bf, 0x314, 0x300 /* offset 1702 */ , - 0x3bf, 0x313, 0x301 /* offset 1705 */ , - 0x3bf, 0x314, 0x301 /* offset 1708 */ , - 0x39f, 0x313 /* offset 1711 */ , - 0x39f, 0x314 /* offset 1713 */ , - 0x39f, 0x313, 0x300 /* offset 1715 */ , - 0x39f, 0x314, 0x300 /* offset 1718 */ , - 0x39f, 0x313, 0x301 /* offset 1721 */ , - 0x39f, 0x314, 0x301 /* offset 1724 */ , - 0x3c5, 0x313 /* offset 1727 */ , - 0x3c5, 0x314 /* offset 1729 */ , - 0x3c5, 0x313, 0x300 /* offset 1731 */ , - 0x3c5, 0x314, 0x300 /* offset 1734 */ , - 0x3c5, 0x313, 0x301 /* offset 1737 */ , - 0x3c5, 0x314, 0x301 /* offset 1740 */ , - 0x3c5, 0x313, 0x342 /* offset 1743 */ , - 0x3c5, 0x314, 0x342 /* offset 1746 */ , - 0x3a5, 0x314 /* offset 1749 */ , - 0x3a5, 0x314, 0x300 /* offset 1751 */ , - 0x3a5, 0x314, 0x301 /* offset 1754 */ , - 0x3a5, 0x314, 0x342 /* offset 1757 */ , - 0x3c9, 0x313 /* offset 1760 */ , - 0x3c9, 0x314 /* offset 1762 */ , - 0x3c9, 0x313, 0x300 /* offset 1764 */ , - 0x3c9, 0x314, 0x300 /* offset 1767 */ , - 0x3c9, 0x313, 0x301 /* offset 1770 */ , - 0x3c9, 0x314, 0x301 /* offset 1773 */ , - 0x3c9, 0x313, 0x342 /* offset 1776 */ , - 0x3c9, 0x314, 0x342 /* offset 1779 */ , - 0x3a9, 0x313 /* offset 1782 */ , - 0x3a9, 0x314 /* offset 1784 */ , - 0x3a9, 0x313, 0x300 /* offset 1786 */ , - 0x3a9, 0x314, 0x300 /* offset 1789 */ , - 0x3a9, 0x313, 0x301 /* offset 1792 */ , - 0x3a9, 0x314, 0x301 /* offset 1795 */ , - 0x3a9, 0x313, 0x342 /* offset 1798 */ , - 0x3a9, 0x314, 0x342 /* offset 1801 */ , - 0x3b1, 0x300 /* offset 1804 */ , - 0x3b5, 0x300 /* offset 1806 */ , - 0x3b7, 0x300 /* offset 1808 */ , - 0x3b9, 0x300 /* offset 1810 */ , - 0x3bf, 0x300 /* offset 1812 */ , - 0x3c5, 0x300 /* offset 1814 */ , - 0x3c9, 0x300 /* offset 1816 */ , - 0x3b1, 0x313, 0x345 /* offset 1818 */ , - 0x3b1, 0x314, 0x345 /* offset 1821 */ , - 0x3b1, 0x313, 0x300, 0x345 /* offset 1824 */ , - 0x3b1, 0x314, 0x300, 0x345 /* offset 1828 */ , - 0x3b1, 0x313, 0x301, 0x345 /* offset 1832 */ , - 0x3b1, 0x314, 0x301, 0x345 /* offset 1836 */ , - 0x3b1, 0x313, 0x342, 0x345 /* offset 1840 */ , - 0x3b1, 0x314, 0x342, 0x345 /* offset 1844 */ , - 0x391, 0x313, 0x345 /* offset 1848 */ , - 0x391, 0x314, 0x345 /* offset 1851 */ , - 0x391, 0x313, 0x300, 0x345 /* offset 1854 */ , - 0x391, 0x314, 0x300, 0x345 /* offset 1858 */ , - 0x391, 0x313, 0x301, 0x345 /* offset 1862 */ , - 0x391, 0x314, 0x301, 0x345 /* offset 1866 */ , - 0x391, 0x313, 0x342, 0x345 /* offset 1870 */ , - 0x391, 0x314, 0x342, 0x345 /* offset 1874 */ , - 0x3b7, 0x313, 0x345 /* offset 1878 */ , - 0x3b7, 0x314, 0x345 /* offset 1881 */ , - 0x3b7, 0x313, 0x300, 0x345 /* offset 1884 */ , - 0x3b7, 0x314, 0x300, 0x345 /* offset 1888 */ , - 0x3b7, 0x313, 0x301, 0x345 /* offset 1892 */ , - 0x3b7, 0x314, 0x301, 0x345 /* offset 1896 */ , - 0x3b7, 0x313, 0x342, 0x345 /* offset 1900 */ , - 0x3b7, 0x314, 0x342, 0x345 /* offset 1904 */ , - 0x397, 0x313, 0x345 /* offset 1908 */ , - 0x397, 0x314, 0x345 /* offset 1911 */ , - 0x397, 0x313, 0x300, 0x345 /* offset 1914 */ , - 0x397, 0x314, 0x300, 0x345 /* offset 1918 */ , - 0x397, 0x313, 0x301, 0x345 /* offset 1922 */ , - 0x397, 0x314, 0x301, 0x345 /* offset 1926 */ , - 0x397, 0x313, 0x342, 0x345 /* offset 1930 */ , - 0x397, 0x314, 0x342, 0x345 /* offset 1934 */ , - 0x3c9, 0x313, 0x345 /* offset 1938 */ , - 0x3c9, 0x314, 0x345 /* offset 1941 */ , - 0x3c9, 0x313, 0x300, 0x345 /* offset 1944 */ , - 0x3c9, 0x314, 0x300, 0x345 /* offset 1948 */ , - 0x3c9, 0x313, 0x301, 0x345 /* offset 1952 */ , - 0x3c9, 0x314, 0x301, 0x345 /* offset 1956 */ , - 0x3c9, 0x313, 0x342, 0x345 /* offset 1960 */ , - 0x3c9, 0x314, 0x342, 0x345 /* offset 1964 */ , - 0x3a9, 0x313, 0x345 /* offset 1968 */ , - 0x3a9, 0x314, 0x345 /* offset 1971 */ , - 0x3a9, 0x313, 0x300, 0x345 /* offset 1974 */ , - 0x3a9, 0x314, 0x300, 0x345 /* offset 1978 */ , - 0x3a9, 0x313, 0x301, 0x345 /* offset 1982 */ , - 0x3a9, 0x314, 0x301, 0x345 /* offset 1986 */ , - 0x3a9, 0x313, 0x342, 0x345 /* offset 1990 */ , - 0x3a9, 0x314, 0x342, 0x345 /* offset 1994 */ , - 0x3b1, 0x306 /* offset 1998 */ , - 0x3b1, 0x304 /* offset 2000 */ , - 0x3b1, 0x300, 0x345 /* offset 2002 */ , - 0x3b1, 0x345 /* offset 2005 */ , - 0x3b1, 0x301, 0x345 /* offset 2007 */ , - 0x3b1, 0x342 /* offset 2010 */ , - 0x3b1, 0x342, 0x345 /* offset 2012 */ , - 0x391, 0x306 /* offset 2015 */ , - 0x391, 0x304 /* offset 2017 */ , - 0x391, 0x300 /* offset 2019 */ , - 0x391, 0x345 /* offset 2021 */ , - 0x20, 0x313 /* offset 2023 */ , - 0x3b9 /* offset 2025 */ , - 0x20, 0x342 /* offset 2026 */ , - 0x20, 0x308, 0x342 /* offset 2028 */ , - 0x3b7, 0x300, 0x345 /* offset 2031 */ , - 0x3b7, 0x345 /* offset 2034 */ , - 0x3b7, 0x301, 0x345 /* offset 2036 */ , - 0x3b7, 0x342 /* offset 2039 */ , - 0x3b7, 0x342, 0x345 /* offset 2041 */ , - 0x395, 0x300 /* offset 2044 */ , - 0x397, 0x300 /* offset 2046 */ , - 0x397, 0x345 /* offset 2048 */ , - 0x20, 0x313, 0x300 /* offset 2050 */ , - 0x20, 0x313, 0x301 /* offset 2053 */ , - 0x20, 0x313, 0x342 /* offset 2056 */ , - 0x3b9, 0x306 /* offset 2059 */ , - 0x3b9, 0x304 /* offset 2061 */ , - 0x3b9, 0x308, 0x300 /* offset 2063 */ , - 0x3b9, 0x342 /* offset 2066 */ , - 0x3b9, 0x308, 0x342 /* offset 2068 */ , - 0x399, 0x306 /* offset 2071 */ , - 0x399, 0x304 /* offset 2073 */ , - 0x399, 0x300 /* offset 2075 */ , - 0x20, 0x314, 0x300 /* offset 2077 */ , - 0x20, 0x314, 0x301 /* offset 2080 */ , - 0x20, 0x314, 0x342 /* offset 2083 */ , - 0x3c5, 0x306 /* offset 2086 */ , - 0x3c5, 0x304 /* offset 2088 */ , - 0x3c5, 0x308, 0x300 /* offset 2090 */ , - 0x3c1, 0x313 /* offset 2093 */ , - 0x3c1, 0x314 /* offset 2095 */ , - 0x3c5, 0x342 /* offset 2097 */ , - 0x3c5, 0x308, 0x342 /* offset 2099 */ , - 0x3a5, 0x306 /* offset 2102 */ , - 0x3a5, 0x304 /* offset 2104 */ , - 0x3a5, 0x300 /* offset 2106 */ , - 0x3a1, 0x314 /* offset 2108 */ , - 0x20, 0x308, 0x300 /* offset 2110 */ , - 0x60 /* offset 2113 */ , - 0x3c9, 0x300, 0x345 /* offset 2114 */ , - 0x3c9, 0x345 /* offset 2117 */ , - 0x3c9, 0x301, 0x345 /* offset 2119 */ , - 0x3c9, 0x342 /* offset 2122 */ , - 0x3c9, 0x342, 0x345 /* offset 2124 */ , - 0x39f, 0x300 /* offset 2127 */ , - 0x3a9, 0x300 /* offset 2129 */ , - 0x3a9, 0x345 /* offset 2131 */ , - 0x20, 0x314 /* offset 2133 */ , - 0x2010 /* offset 2135 */ , - 0x20, 0x333 /* offset 2136 */ , - 0x2e /* offset 2138 */ , - 0x2e, 0x2e /* offset 2139 */ , - 0x2e, 0x2e, 0x2e /* offset 2141 */ , - 0x2032, 0x2032 /* offset 2144 */ , - 0x2032, 0x2032, 0x2032 /* offset 2146 */ , - 0x2035, 0x2035 /* offset 2149 */ , - 0x2035, 0x2035, 0x2035 /* offset 2151 */ , - 0x21, 0x21 /* offset 2154 */ , - 0x20, 0x305 /* offset 2156 */ , - 0x3f, 0x3f /* offset 2158 */ , - 0x3f, 0x21 /* offset 2160 */ , - 0x21, 0x3f /* offset 2162 */ , - 0x2032, 0x2032, 0x2032, 0x2032 /* offset 2164 */ , - 0x30 /* offset 2168 */ , - 0x69 /* offset 2169 */ , - 0x34 /* offset 2170 */ , - 0x35 /* offset 2171 */ , - 0x36 /* offset 2172 */ , - 0x37 /* offset 2173 */ , - 0x38 /* offset 2174 */ , - 0x39 /* offset 2175 */ , - 0x2b /* offset 2176 */ , - 0x2212 /* offset 2177 */ , - 0x3d /* offset 2178 */ , - 0x28 /* offset 2179 */ , - 0x29 /* offset 2180 */ , - 0x6e /* offset 2181 */ , - 0x52, 0x73 /* offset 2182 */ , - 0x61, 0x2f, 0x63 /* offset 2184 */ , - 0x61, 0x2f, 0x73 /* offset 2187 */ , - 0x43 /* offset 2190 */ , - 0xb0, 0x43 /* offset 2191 */ , - 0x63, 0x2f, 0x6f /* offset 2193 */ , - 0x63, 0x2f, 0x75 /* offset 2196 */ , - 0x190 /* offset 2199 */ , - 0xb0, 0x46 /* offset 2200 */ , - 0x67 /* offset 2202 */ , - 0x48 /* offset 2203 */ , - 0x127 /* offset 2204 */ , - 0x49 /* offset 2205 */ , - 0x4c /* offset 2206 */ , - 0x4e /* offset 2207 */ , - 0x4e, 0x6f /* offset 2208 */ , - 0x50 /* offset 2210 */ , - 0x51 /* offset 2211 */ , - 0x52 /* offset 2212 */ , - 0x53, 0x4d /* offset 2213 */ , - 0x54, 0x45, 0x4c /* offset 2215 */ , - 0x54, 0x4d /* offset 2218 */ , - 0x5a /* offset 2220 */ , - 0x3a9 /* offset 2221 */ , - 0x4b /* offset 2222 */ , - 0x42 /* offset 2223 */ , - 0x65 /* offset 2224 */ , - 0x45 /* offset 2225 */ , - 0x46 /* offset 2226 */ , - 0x4d /* offset 2227 */ , - 0x5d0 /* offset 2228 */ , - 0x5d1 /* offset 2229 */ , - 0x5d2 /* offset 2230 */ , - 0x5d3 /* offset 2231 */ , - 0x3b3 /* offset 2232 */ , - 0x393 /* offset 2233 */ , - 0x3a0 /* offset 2234 */ , - 0x2211 /* offset 2235 */ , - 0x44 /* offset 2236 */ , - 0x64 /* offset 2237 */ , - 0x31, 0x2044, 0x33 /* offset 2238 */ , - 0x32, 0x2044, 0x33 /* offset 2241 */ , - 0x31, 0x2044, 0x35 /* offset 2244 */ , - 0x32, 0x2044, 0x35 /* offset 2247 */ , - 0x33, 0x2044, 0x35 /* offset 2250 */ , - 0x34, 0x2044, 0x35 /* offset 2253 */ , - 0x31, 0x2044, 0x36 /* offset 2256 */ , - 0x35, 0x2044, 0x36 /* offset 2259 */ , - 0x31, 0x2044, 0x38 /* offset 2262 */ , - 0x33, 0x2044, 0x38 /* offset 2265 */ , - 0x35, 0x2044, 0x38 /* offset 2268 */ , - 0x37, 0x2044, 0x38 /* offset 2271 */ , - 0x31, 0x2044 /* offset 2274 */ , - 0x49, 0x49 /* offset 2276 */ , - 0x49, 0x49, 0x49 /* offset 2278 */ , - 0x49, 0x56 /* offset 2281 */ , - 0x56 /* offset 2283 */ , - 0x56, 0x49 /* offset 2284 */ , - 0x56, 0x49, 0x49 /* offset 2286 */ , - 0x56, 0x49, 0x49, 0x49 /* offset 2289 */ , - 0x49, 0x58 /* offset 2293 */ , - 0x58 /* offset 2295 */ , - 0x58, 0x49 /* offset 2296 */ , - 0x58, 0x49, 0x49 /* offset 2298 */ , - 0x69, 0x69 /* offset 2301 */ , - 0x69, 0x69, 0x69 /* offset 2303 */ , - 0x69, 0x76 /* offset 2306 */ , - 0x76 /* offset 2308 */ , - 0x76, 0x69 /* offset 2309 */ , - 0x76, 0x69, 0x69 /* offset 2311 */ , - 0x76, 0x69, 0x69, 0x69 /* offset 2314 */ , - 0x69, 0x78 /* offset 2318 */ , - 0x78, 0x69 /* offset 2320 */ , - 0x78, 0x69, 0x69 /* offset 2322 */ , - 0x63 /* offset 2325 */ , - 0x6d /* offset 2326 */ , - 0x2190, 0x338 /* offset 2327 */ , - 0x2192, 0x338 /* offset 2329 */ , - 0x2194, 0x338 /* offset 2331 */ , - 0x21d0, 0x338 /* offset 2333 */ , - 0x21d4, 0x338 /* offset 2335 */ , - 0x21d2, 0x338 /* offset 2337 */ , - 0x2203, 0x338 /* offset 2339 */ , - 0x2208, 0x338 /* offset 2341 */ , - 0x220b, 0x338 /* offset 2343 */ , - 0x2223, 0x338 /* offset 2345 */ , - 0x2225, 0x338 /* offset 2347 */ , - 0x222b, 0x222b /* offset 2349 */ , - 0x222b, 0x222b, 0x222b /* offset 2351 */ , - 0x222e, 0x222e /* offset 2354 */ , - 0x222e, 0x222e, 0x222e /* offset 2356 */ , - 0x223c, 0x338 /* offset 2359 */ , - 0x2243, 0x338 /* offset 2361 */ , - 0x2245, 0x338 /* offset 2363 */ , - 0x2248, 0x338 /* offset 2365 */ , - 0x3d, 0x338 /* offset 2367 */ , - 0x2261, 0x338 /* offset 2369 */ , - 0x224d, 0x338 /* offset 2371 */ , - 0x3c, 0x338 /* offset 2373 */ , - 0x3e, 0x338 /* offset 2375 */ , - 0x2264, 0x338 /* offset 2377 */ , - 0x2265, 0x338 /* offset 2379 */ , - 0x2272, 0x338 /* offset 2381 */ , - 0x2273, 0x338 /* offset 2383 */ , - 0x2276, 0x338 /* offset 2385 */ , - 0x2277, 0x338 /* offset 2387 */ , - 0x227a, 0x338 /* offset 2389 */ , - 0x227b, 0x338 /* offset 2391 */ , - 0x2282, 0x338 /* offset 2393 */ , - 0x2283, 0x338 /* offset 2395 */ , - 0x2286, 0x338 /* offset 2397 */ , - 0x2287, 0x338 /* offset 2399 */ , - 0x22a2, 0x338 /* offset 2401 */ , - 0x22a8, 0x338 /* offset 2403 */ , - 0x22a9, 0x338 /* offset 2405 */ , - 0x22ab, 0x338 /* offset 2407 */ , - 0x227c, 0x338 /* offset 2409 */ , - 0x227d, 0x338 /* offset 2411 */ , - 0x2291, 0x338 /* offset 2413 */ , - 0x2292, 0x338 /* offset 2415 */ , - 0x22b2, 0x338 /* offset 2417 */ , - 0x22b3, 0x338 /* offset 2419 */ , - 0x22b4, 0x338 /* offset 2421 */ , - 0x22b5, 0x338 /* offset 2423 */ , - 0x3008 /* offset 2425 */ , - 0x3009 /* offset 2426 */ , - 0x31, 0x30 /* offset 2427 */ , - 0x31, 0x31 /* offset 2429 */ , - 0x31, 0x32 /* offset 2431 */ , - 0x31, 0x33 /* offset 2433 */ , - 0x31, 0x34 /* offset 2435 */ , - 0x31, 0x35 /* offset 2437 */ , - 0x31, 0x36 /* offset 2439 */ , - 0x31, 0x37 /* offset 2441 */ , - 0x31, 0x38 /* offset 2443 */ , - 0x31, 0x39 /* offset 2445 */ , - 0x32, 0x30 /* offset 2447 */ , - 0x28, 0x31, 0x29 /* offset 2449 */ , - 0x28, 0x32, 0x29 /* offset 2452 */ , - 0x28, 0x33, 0x29 /* offset 2455 */ , - 0x28, 0x34, 0x29 /* offset 2458 */ , - 0x28, 0x35, 0x29 /* offset 2461 */ , - 0x28, 0x36, 0x29 /* offset 2464 */ , - 0x28, 0x37, 0x29 /* offset 2467 */ , - 0x28, 0x38, 0x29 /* offset 2470 */ , - 0x28, 0x39, 0x29 /* offset 2473 */ , - 0x28, 0x31, 0x30, 0x29 /* offset 2476 */ , - 0x28, 0x31, 0x31, 0x29 /* offset 2480 */ , - 0x28, 0x31, 0x32, 0x29 /* offset 2484 */ , - 0x28, 0x31, 0x33, 0x29 /* offset 2488 */ , - 0x28, 0x31, 0x34, 0x29 /* offset 2492 */ , - 0x28, 0x31, 0x35, 0x29 /* offset 2496 */ , - 0x28, 0x31, 0x36, 0x29 /* offset 2500 */ , - 0x28, 0x31, 0x37, 0x29 /* offset 2504 */ , - 0x28, 0x31, 0x38, 0x29 /* offset 2508 */ , - 0x28, 0x31, 0x39, 0x29 /* offset 2512 */ , - 0x28, 0x32, 0x30, 0x29 /* offset 2516 */ , - 0x31, 0x2e /* offset 2520 */ , - 0x32, 0x2e /* offset 2522 */ , - 0x33, 0x2e /* offset 2524 */ , - 0x34, 0x2e /* offset 2526 */ , - 0x35, 0x2e /* offset 2528 */ , - 0x36, 0x2e /* offset 2530 */ , - 0x37, 0x2e /* offset 2532 */ , - 0x38, 0x2e /* offset 2534 */ , - 0x39, 0x2e /* offset 2536 */ , - 0x31, 0x30, 0x2e /* offset 2538 */ , - 0x31, 0x31, 0x2e /* offset 2541 */ , - 0x31, 0x32, 0x2e /* offset 2544 */ , - 0x31, 0x33, 0x2e /* offset 2547 */ , - 0x31, 0x34, 0x2e /* offset 2550 */ , - 0x31, 0x35, 0x2e /* offset 2553 */ , - 0x31, 0x36, 0x2e /* offset 2556 */ , - 0x31, 0x37, 0x2e /* offset 2559 */ , - 0x31, 0x38, 0x2e /* offset 2562 */ , - 0x31, 0x39, 0x2e /* offset 2565 */ , - 0x32, 0x30, 0x2e /* offset 2568 */ , - 0x28, 0x61, 0x29 /* offset 2571 */ , - 0x28, 0x62, 0x29 /* offset 2574 */ , - 0x28, 0x63, 0x29 /* offset 2577 */ , - 0x28, 0x64, 0x29 /* offset 2580 */ , - 0x28, 0x65, 0x29 /* offset 2583 */ , - 0x28, 0x66, 0x29 /* offset 2586 */ , - 0x28, 0x67, 0x29 /* offset 2589 */ , - 0x28, 0x68, 0x29 /* offset 2592 */ , - 0x28, 0x69, 0x29 /* offset 2595 */ , - 0x28, 0x6a, 0x29 /* offset 2598 */ , - 0x28, 0x6b, 0x29 /* offset 2601 */ , - 0x28, 0x6c, 0x29 /* offset 2604 */ , - 0x28, 0x6d, 0x29 /* offset 2607 */ , - 0x28, 0x6e, 0x29 /* offset 2610 */ , - 0x28, 0x6f, 0x29 /* offset 2613 */ , - 0x28, 0x70, 0x29 /* offset 2616 */ , - 0x28, 0x71, 0x29 /* offset 2619 */ , - 0x28, 0x72, 0x29 /* offset 2622 */ , - 0x28, 0x73, 0x29 /* offset 2625 */ , - 0x28, 0x74, 0x29 /* offset 2628 */ , - 0x28, 0x75, 0x29 /* offset 2631 */ , - 0x28, 0x76, 0x29 /* offset 2634 */ , - 0x28, 0x77, 0x29 /* offset 2637 */ , - 0x28, 0x78, 0x29 /* offset 2640 */ , - 0x28, 0x79, 0x29 /* offset 2643 */ , - 0x28, 0x7a, 0x29 /* offset 2646 */ , - 0x41 /* offset 2649 */ , - 0x47 /* offset 2650 */ , - 0x4a /* offset 2651 */ , - 0x4f /* offset 2652 */ , - 0x53 /* offset 2653 */ , - 0x54 /* offset 2654 */ , - 0x55 /* offset 2655 */ , - 0x57 /* offset 2656 */ , - 0x59 /* offset 2657 */ , - 0x62 /* offset 2658 */ , - 0x66 /* offset 2659 */ , - 0x6b /* offset 2660 */ , - 0x70 /* offset 2661 */ , - 0x71 /* offset 2662 */ , - 0x74 /* offset 2663 */ , - 0x75 /* offset 2664 */ , - 0x7a /* offset 2665 */ , - 0x222b, 0x222b, 0x222b, 0x222b /* offset 2666 */ , - 0x3a, 0x3a, 0x3d /* offset 2670 */ , - 0x3d, 0x3d /* offset 2673 */ , - 0x3d, 0x3d, 0x3d /* offset 2675 */ , - 0x2add, 0x338 /* offset 2678 */ , - 0x6bcd /* offset 2680 */ , - 0x9f9f /* offset 2681 */ , - 0x4e00 /* offset 2682 */ , - 0x4e28 /* offset 2683 */ , - 0x4e36 /* offset 2684 */ , - 0x4e3f /* offset 2685 */ , - 0x4e59 /* offset 2686 */ , - 0x4e85 /* offset 2687 */ , - 0x4e8c /* offset 2688 */ , - 0x4ea0 /* offset 2689 */ , - 0x4eba /* offset 2690 */ , - 0x513f /* offset 2691 */ , - 0x5165 /* offset 2692 */ , - 0x516b /* offset 2693 */ , - 0x5182 /* offset 2694 */ , - 0x5196 /* offset 2695 */ , - 0x51ab /* offset 2696 */ , - 0x51e0 /* offset 2697 */ , - 0x51f5 /* offset 2698 */ , - 0x5200 /* offset 2699 */ , - 0x529b /* offset 2700 */ , - 0x52f9 /* offset 2701 */ , - 0x5315 /* offset 2702 */ , - 0x531a /* offset 2703 */ , - 0x5338 /* offset 2704 */ , - 0x5341 /* offset 2705 */ , - 0x535c /* offset 2706 */ , - 0x5369 /* offset 2707 */ , - 0x5382 /* offset 2708 */ , - 0x53b6 /* offset 2709 */ , - 0x53c8 /* offset 2710 */ , - 0x53e3 /* offset 2711 */ , - 0x56d7 /* offset 2712 */ , - 0x571f /* offset 2713 */ , - 0x58eb /* offset 2714 */ , - 0x5902 /* offset 2715 */ , - 0x590a /* offset 2716 */ , - 0x5915 /* offset 2717 */ , - 0x5927 /* offset 2718 */ , - 0x5973 /* offset 2719 */ , - 0x5b50 /* offset 2720 */ , - 0x5b80 /* offset 2721 */ , - 0x5bf8 /* offset 2722 */ , - 0x5c0f /* offset 2723 */ , - 0x5c22 /* offset 2724 */ , - 0x5c38 /* offset 2725 */ , - 0x5c6e /* offset 2726 */ , - 0x5c71 /* offset 2727 */ , - 0x5ddb /* offset 2728 */ , - 0x5de5 /* offset 2729 */ , - 0x5df1 /* offset 2730 */ , - 0x5dfe /* offset 2731 */ , - 0x5e72 /* offset 2732 */ , - 0x5e7a /* offset 2733 */ , - 0x5e7f /* offset 2734 */ , - 0x5ef4 /* offset 2735 */ , - 0x5efe /* offset 2736 */ , - 0x5f0b /* offset 2737 */ , - 0x5f13 /* offset 2738 */ , - 0x5f50 /* offset 2739 */ , - 0x5f61 /* offset 2740 */ , - 0x5f73 /* offset 2741 */ , - 0x5fc3 /* offset 2742 */ , - 0x6208 /* offset 2743 */ , - 0x6236 /* offset 2744 */ , - 0x624b /* offset 2745 */ , - 0x652f /* offset 2746 */ , - 0x6534 /* offset 2747 */ , - 0x6587 /* offset 2748 */ , - 0x6597 /* offset 2749 */ , - 0x65a4 /* offset 2750 */ , - 0x65b9 /* offset 2751 */ , - 0x65e0 /* offset 2752 */ , - 0x65e5 /* offset 2753 */ , - 0x66f0 /* offset 2754 */ , - 0x6708 /* offset 2755 */ , - 0x6728 /* offset 2756 */ , - 0x6b20 /* offset 2757 */ , - 0x6b62 /* offset 2758 */ , - 0x6b79 /* offset 2759 */ , - 0x6bb3 /* offset 2760 */ , - 0x6bcb /* offset 2761 */ , - 0x6bd4 /* offset 2762 */ , - 0x6bdb /* offset 2763 */ , - 0x6c0f /* offset 2764 */ , - 0x6c14 /* offset 2765 */ , - 0x6c34 /* offset 2766 */ , - 0x706b /* offset 2767 */ , - 0x722a /* offset 2768 */ , - 0x7236 /* offset 2769 */ , - 0x723b /* offset 2770 */ , - 0x723f /* offset 2771 */ , - 0x7247 /* offset 2772 */ , - 0x7259 /* offset 2773 */ , - 0x725b /* offset 2774 */ , - 0x72ac /* offset 2775 */ , - 0x7384 /* offset 2776 */ , - 0x7389 /* offset 2777 */ , - 0x74dc /* offset 2778 */ , - 0x74e6 /* offset 2779 */ , - 0x7518 /* offset 2780 */ , - 0x751f /* offset 2781 */ , - 0x7528 /* offset 2782 */ , - 0x7530 /* offset 2783 */ , - 0x758b /* offset 2784 */ , - 0x7592 /* offset 2785 */ , - 0x7676 /* offset 2786 */ , - 0x767d /* offset 2787 */ , - 0x76ae /* offset 2788 */ , - 0x76bf /* offset 2789 */ , - 0x76ee /* offset 2790 */ , - 0x77db /* offset 2791 */ , - 0x77e2 /* offset 2792 */ , - 0x77f3 /* offset 2793 */ , - 0x793a /* offset 2794 */ , - 0x79b8 /* offset 2795 */ , - 0x79be /* offset 2796 */ , - 0x7a74 /* offset 2797 */ , - 0x7acb /* offset 2798 */ , - 0x7af9 /* offset 2799 */ , - 0x7c73 /* offset 2800 */ , - 0x7cf8 /* offset 2801 */ , - 0x7f36 /* offset 2802 */ , - 0x7f51 /* offset 2803 */ , - 0x7f8a /* offset 2804 */ , - 0x7fbd /* offset 2805 */ , - 0x8001 /* offset 2806 */ , - 0x800c /* offset 2807 */ , - 0x8012 /* offset 2808 */ , - 0x8033 /* offset 2809 */ , - 0x807f /* offset 2810 */ , - 0x8089 /* offset 2811 */ , - 0x81e3 /* offset 2812 */ , - 0x81ea /* offset 2813 */ , - 0x81f3 /* offset 2814 */ , - 0x81fc /* offset 2815 */ , - 0x820c /* offset 2816 */ , - 0x821b /* offset 2817 */ , - 0x821f /* offset 2818 */ , - 0x826e /* offset 2819 */ , - 0x8272 /* offset 2820 */ , - 0x8278 /* offset 2821 */ , - 0x864d /* offset 2822 */ , - 0x866b /* offset 2823 */ , - 0x8840 /* offset 2824 */ , - 0x884c /* offset 2825 */ , - 0x8863 /* offset 2826 */ , - 0x897e /* offset 2827 */ , - 0x898b /* offset 2828 */ , - 0x89d2 /* offset 2829 */ , - 0x8a00 /* offset 2830 */ , - 0x8c37 /* offset 2831 */ , - 0x8c46 /* offset 2832 */ , - 0x8c55 /* offset 2833 */ , - 0x8c78 /* offset 2834 */ , - 0x8c9d /* offset 2835 */ , - 0x8d64 /* offset 2836 */ , - 0x8d70 /* offset 2837 */ , - 0x8db3 /* offset 2838 */ , - 0x8eab /* offset 2839 */ , - 0x8eca /* offset 2840 */ , - 0x8f9b /* offset 2841 */ , - 0x8fb0 /* offset 2842 */ , - 0x8fb5 /* offset 2843 */ , - 0x9091 /* offset 2844 */ , - 0x9149 /* offset 2845 */ , - 0x91c6 /* offset 2846 */ , - 0x91cc /* offset 2847 */ , - 0x91d1 /* offset 2848 */ , - 0x9577 /* offset 2849 */ , - 0x9580 /* offset 2850 */ , - 0x961c /* offset 2851 */ , - 0x96b6 /* offset 2852 */ , - 0x96b9 /* offset 2853 */ , - 0x96e8 /* offset 2854 */ , - 0x9751 /* offset 2855 */ , - 0x975e /* offset 2856 */ , - 0x9762 /* offset 2857 */ , - 0x9769 /* offset 2858 */ , - 0x97cb /* offset 2859 */ , - 0x97ed /* offset 2860 */ , - 0x97f3 /* offset 2861 */ , - 0x9801 /* offset 2862 */ , - 0x98a8 /* offset 2863 */ , - 0x98db /* offset 2864 */ , - 0x98df /* offset 2865 */ , - 0x9996 /* offset 2866 */ , - 0x9999 /* offset 2867 */ , - 0x99ac /* offset 2868 */ , - 0x9aa8 /* offset 2869 */ , - 0x9ad8 /* offset 2870 */ , - 0x9adf /* offset 2871 */ , - 0x9b25 /* offset 2872 */ , - 0x9b2f /* offset 2873 */ , - 0x9b32 /* offset 2874 */ , - 0x9b3c /* offset 2875 */ , - 0x9b5a /* offset 2876 */ , - 0x9ce5 /* offset 2877 */ , - 0x9e75 /* offset 2878 */ , - 0x9e7f /* offset 2879 */ , - 0x9ea5 /* offset 2880 */ , - 0x9ebb /* offset 2881 */ , - 0x9ec3 /* offset 2882 */ , - 0x9ecd /* offset 2883 */ , - 0x9ed1 /* offset 2884 */ , - 0x9ef9 /* offset 2885 */ , - 0x9efd /* offset 2886 */ , - 0x9f0e /* offset 2887 */ , - 0x9f13 /* offset 2888 */ , - 0x9f20 /* offset 2889 */ , - 0x9f3b /* offset 2890 */ , - 0x9f4a /* offset 2891 */ , - 0x9f52 /* offset 2892 */ , - 0x9f8d /* offset 2893 */ , - 0x9f9c /* offset 2894 */ , - 0x9fa0 /* offset 2895 */ , - 0x3012 /* offset 2896 */ , - 0x5344 /* offset 2897 */ , - 0x5345 /* offset 2898 */ , - 0x304b, 0x3099 /* offset 2899 */ , - 0x304d, 0x3099 /* offset 2901 */ , - 0x304f, 0x3099 /* offset 2903 */ , - 0x3051, 0x3099 /* offset 2905 */ , - 0x3053, 0x3099 /* offset 2907 */ , - 0x3055, 0x3099 /* offset 2909 */ , - 0x3057, 0x3099 /* offset 2911 */ , - 0x3059, 0x3099 /* offset 2913 */ , - 0x305b, 0x3099 /* offset 2915 */ , - 0x305d, 0x3099 /* offset 2917 */ , - 0x305f, 0x3099 /* offset 2919 */ , - 0x3061, 0x3099 /* offset 2921 */ , - 0x3064, 0x3099 /* offset 2923 */ , - 0x3066, 0x3099 /* offset 2925 */ , - 0x3068, 0x3099 /* offset 2927 */ , - 0x306f, 0x3099 /* offset 2929 */ , - 0x306f, 0x309a /* offset 2931 */ , - 0x3072, 0x3099 /* offset 2933 */ , - 0x3072, 0x309a /* offset 2935 */ , - 0x3075, 0x3099 /* offset 2937 */ , - 0x3075, 0x309a /* offset 2939 */ , - 0x3078, 0x3099 /* offset 2941 */ , - 0x3078, 0x309a /* offset 2943 */ , - 0x307b, 0x3099 /* offset 2945 */ , - 0x307b, 0x309a /* offset 2947 */ , - 0x3046, 0x3099 /* offset 2949 */ , - 0x20, 0x3099 /* offset 2951 */ , - 0x20, 0x309a /* offset 2953 */ , - 0x309d, 0x3099 /* offset 2955 */ , - 0x3088, 0x308a /* offset 2957 */ , - 0x30ab, 0x3099 /* offset 2959 */ , - 0x30ad, 0x3099 /* offset 2961 */ , - 0x30af, 0x3099 /* offset 2963 */ , - 0x30b1, 0x3099 /* offset 2965 */ , - 0x30b3, 0x3099 /* offset 2967 */ , - 0x30b5, 0x3099 /* offset 2969 */ , - 0x30b7, 0x3099 /* offset 2971 */ , - 0x30b9, 0x3099 /* offset 2973 */ , - 0x30bb, 0x3099 /* offset 2975 */ , - 0x30bd, 0x3099 /* offset 2977 */ , - 0x30bf, 0x3099 /* offset 2979 */ , - 0x30c1, 0x3099 /* offset 2981 */ , - 0x30c4, 0x3099 /* offset 2983 */ , - 0x30c6, 0x3099 /* offset 2985 */ , - 0x30c8, 0x3099 /* offset 2987 */ , - 0x30cf, 0x3099 /* offset 2989 */ , - 0x30cf, 0x309a /* offset 2991 */ , - 0x30d2, 0x3099 /* offset 2993 */ , - 0x30d2, 0x309a /* offset 2995 */ , - 0x30d5, 0x3099 /* offset 2997 */ , - 0x30d5, 0x309a /* offset 2999 */ , - 0x30d8, 0x3099 /* offset 3001 */ , - 0x30d8, 0x309a /* offset 3003 */ , - 0x30db, 0x3099 /* offset 3005 */ , - 0x30db, 0x309a /* offset 3007 */ , - 0x30a6, 0x3099 /* offset 3009 */ , - 0x30ef, 0x3099 /* offset 3011 */ , - 0x30f0, 0x3099 /* offset 3013 */ , - 0x30f1, 0x3099 /* offset 3015 */ , - 0x30f2, 0x3099 /* offset 3017 */ , - 0x30fd, 0x3099 /* offset 3019 */ , - 0x30b3, 0x30c8 /* offset 3021 */ , - 0x1100 /* offset 3023 */ , - 0x1101 /* offset 3024 */ , - 0x11aa /* offset 3025 */ , - 0x1102 /* offset 3026 */ , - 0x11ac /* offset 3027 */ , - 0x11ad /* offset 3028 */ , - 0x1103 /* offset 3029 */ , - 0x1104 /* offset 3030 */ , - 0x1105 /* offset 3031 */ , - 0x11b0 /* offset 3032 */ , - 0x11b1 /* offset 3033 */ , - 0x11b2 /* offset 3034 */ , - 0x11b3 /* offset 3035 */ , - 0x11b4 /* offset 3036 */ , - 0x11b5 /* offset 3037 */ , - 0x111a /* offset 3038 */ , - 0x1106 /* offset 3039 */ , - 0x1107 /* offset 3040 */ , - 0x1108 /* offset 3041 */ , - 0x1121 /* offset 3042 */ , - 0x1109 /* offset 3043 */ , - 0x110a /* offset 3044 */ , - 0x110b /* offset 3045 */ , - 0x110c /* offset 3046 */ , - 0x110d /* offset 3047 */ , - 0x110e /* offset 3048 */ , - 0x110f /* offset 3049 */ , - 0x1110 /* offset 3050 */ , - 0x1111 /* offset 3051 */ , - 0x1112 /* offset 3052 */ , - 0x1161 /* offset 3053 */ , - 0x1162 /* offset 3054 */ , - 0x1163 /* offset 3055 */ , - 0x1164 /* offset 3056 */ , - 0x1165 /* offset 3057 */ , - 0x1166 /* offset 3058 */ , - 0x1167 /* offset 3059 */ , - 0x1168 /* offset 3060 */ , - 0x1169 /* offset 3061 */ , - 0x116a /* offset 3062 */ , - 0x116b /* offset 3063 */ , - 0x116c /* offset 3064 */ , - 0x116d /* offset 3065 */ , - 0x116e /* offset 3066 */ , - 0x116f /* offset 3067 */ , - 0x1170 /* offset 3068 */ , - 0x1171 /* offset 3069 */ , - 0x1172 /* offset 3070 */ , - 0x1173 /* offset 3071 */ , - 0x1174 /* offset 3072 */ , - 0x1175 /* offset 3073 */ , - 0x1160 /* offset 3074 */ , - 0x1114 /* offset 3075 */ , - 0x1115 /* offset 3076 */ , - 0x11c7 /* offset 3077 */ , - 0x11c8 /* offset 3078 */ , - 0x11cc /* offset 3079 */ , - 0x11ce /* offset 3080 */ , - 0x11d3 /* offset 3081 */ , - 0x11d7 /* offset 3082 */ , - 0x11d9 /* offset 3083 */ , - 0x111c /* offset 3084 */ , - 0x11dd /* offset 3085 */ , - 0x11df /* offset 3086 */ , - 0x111d /* offset 3087 */ , - 0x111e /* offset 3088 */ , - 0x1120 /* offset 3089 */ , - 0x1122 /* offset 3090 */ , - 0x1123 /* offset 3091 */ , - 0x1127 /* offset 3092 */ , - 0x1129 /* offset 3093 */ , - 0x112b /* offset 3094 */ , - 0x112c /* offset 3095 */ , - 0x112d /* offset 3096 */ , - 0x112e /* offset 3097 */ , - 0x112f /* offset 3098 */ , - 0x1132 /* offset 3099 */ , - 0x1136 /* offset 3100 */ , - 0x1140 /* offset 3101 */ , - 0x1147 /* offset 3102 */ , - 0x114c /* offset 3103 */ , - 0x11f1 /* offset 3104 */ , - 0x11f2 /* offset 3105 */ , - 0x1157 /* offset 3106 */ , - 0x1158 /* offset 3107 */ , - 0x1159 /* offset 3108 */ , - 0x1184 /* offset 3109 */ , - 0x1185 /* offset 3110 */ , - 0x1188 /* offset 3111 */ , - 0x1191 /* offset 3112 */ , - 0x1192 /* offset 3113 */ , - 0x1194 /* offset 3114 */ , - 0x119e /* offset 3115 */ , - 0x11a1 /* offset 3116 */ , - 0x4e09 /* offset 3117 */ , - 0x56db /* offset 3118 */ , - 0x4e0a /* offset 3119 */ , - 0x4e2d /* offset 3120 */ , - 0x4e0b /* offset 3121 */ , - 0x7532 /* offset 3122 */ , - 0x4e19 /* offset 3123 */ , - 0x4e01 /* offset 3124 */ , - 0x5929 /* offset 3125 */ , - 0x5730 /* offset 3126 */ , - 0x28, 0x1100, 0x29 /* offset 3127 */ , - 0x28, 0x1102, 0x29 /* offset 3130 */ , - 0x28, 0x1103, 0x29 /* offset 3133 */ , - 0x28, 0x1105, 0x29 /* offset 3136 */ , - 0x28, 0x1106, 0x29 /* offset 3139 */ , - 0x28, 0x1107, 0x29 /* offset 3142 */ , - 0x28, 0x1109, 0x29 /* offset 3145 */ , - 0x28, 0x110b, 0x29 /* offset 3148 */ , - 0x28, 0x110c, 0x29 /* offset 3151 */ , - 0x28, 0x110e, 0x29 /* offset 3154 */ , - 0x28, 0x110f, 0x29 /* offset 3157 */ , - 0x28, 0x1110, 0x29 /* offset 3160 */ , - 0x28, 0x1111, 0x29 /* offset 3163 */ , - 0x28, 0x1112, 0x29 /* offset 3166 */ , - 0x28, 0x1100, 0x1161, 0x29 /* offset 3169 */ , - 0x28, 0x1102, 0x1161, 0x29 /* offset 3173 */ , - 0x28, 0x1103, 0x1161, 0x29 /* offset 3177 */ , - 0x28, 0x1105, 0x1161, 0x29 /* offset 3181 */ , - 0x28, 0x1106, 0x1161, 0x29 /* offset 3185 */ , - 0x28, 0x1107, 0x1161, 0x29 /* offset 3189 */ , - 0x28, 0x1109, 0x1161, 0x29 /* offset 3193 */ , - 0x28, 0x110b, 0x1161, 0x29 /* offset 3197 */ , - 0x28, 0x110c, 0x1161, 0x29 /* offset 3201 */ , - 0x28, 0x110e, 0x1161, 0x29 /* offset 3205 */ , - 0x28, 0x110f, 0x1161, 0x29 /* offset 3209 */ , - 0x28, 0x1110, 0x1161, 0x29 /* offset 3213 */ , - 0x28, 0x1111, 0x1161, 0x29 /* offset 3217 */ , - 0x28, 0x1112, 0x1161, 0x29 /* offset 3221 */ , - 0x28, 0x110c, 0x116e, 0x29 /* offset 3225 */ , - 0x28, 0x4e00, 0x29 /* offset 3229 */ , - 0x28, 0x4e8c, 0x29 /* offset 3232 */ , - 0x28, 0x4e09, 0x29 /* offset 3235 */ , - 0x28, 0x56db, 0x29 /* offset 3238 */ , - 0x28, 0x4e94, 0x29 /* offset 3241 */ , - 0x28, 0x516d, 0x29 /* offset 3244 */ , - 0x28, 0x4e03, 0x29 /* offset 3247 */ , - 0x28, 0x516b, 0x29 /* offset 3250 */ , - 0x28, 0x4e5d, 0x29 /* offset 3253 */ , - 0x28, 0x5341, 0x29 /* offset 3256 */ , - 0x28, 0x6708, 0x29 /* offset 3259 */ , - 0x28, 0x706b, 0x29 /* offset 3262 */ , - 0x28, 0x6c34, 0x29 /* offset 3265 */ , - 0x28, 0x6728, 0x29 /* offset 3268 */ , - 0x28, 0x91d1, 0x29 /* offset 3271 */ , - 0x28, 0x571f, 0x29 /* offset 3274 */ , - 0x28, 0x65e5, 0x29 /* offset 3277 */ , - 0x28, 0x682a, 0x29 /* offset 3280 */ , - 0x28, 0x6709, 0x29 /* offset 3283 */ , - 0x28, 0x793e, 0x29 /* offset 3286 */ , - 0x28, 0x540d, 0x29 /* offset 3289 */ , - 0x28, 0x7279, 0x29 /* offset 3292 */ , - 0x28, 0x8ca1, 0x29 /* offset 3295 */ , - 0x28, 0x795d, 0x29 /* offset 3298 */ , - 0x28, 0x52b4, 0x29 /* offset 3301 */ , - 0x28, 0x4ee3, 0x29 /* offset 3304 */ , - 0x28, 0x547c, 0x29 /* offset 3307 */ , - 0x28, 0x5b66, 0x29 /* offset 3310 */ , - 0x28, 0x76e3, 0x29 /* offset 3313 */ , - 0x28, 0x4f01, 0x29 /* offset 3316 */ , - 0x28, 0x8cc7, 0x29 /* offset 3319 */ , - 0x28, 0x5354, 0x29 /* offset 3322 */ , - 0x28, 0x796d, 0x29 /* offset 3325 */ , - 0x28, 0x4f11, 0x29 /* offset 3328 */ , - 0x28, 0x81ea, 0x29 /* offset 3331 */ , - 0x28, 0x81f3, 0x29 /* offset 3334 */ , - 0x32, 0x31 /* offset 3337 */ , - 0x32, 0x32 /* offset 3339 */ , - 0x32, 0x33 /* offset 3341 */ , - 0x32, 0x34 /* offset 3343 */ , - 0x32, 0x35 /* offset 3345 */ , - 0x32, 0x36 /* offset 3347 */ , - 0x32, 0x37 /* offset 3349 */ , - 0x32, 0x38 /* offset 3351 */ , - 0x32, 0x39 /* offset 3353 */ , - 0x33, 0x30 /* offset 3355 */ , - 0x33, 0x31 /* offset 3357 */ , - 0x33, 0x32 /* offset 3359 */ , - 0x33, 0x33 /* offset 3361 */ , - 0x33, 0x34 /* offset 3363 */ , - 0x33, 0x35 /* offset 3365 */ , - 0x1100, 0x1161 /* offset 3367 */ , - 0x1102, 0x1161 /* offset 3369 */ , - 0x1103, 0x1161 /* offset 3371 */ , - 0x1105, 0x1161 /* offset 3373 */ , - 0x1106, 0x1161 /* offset 3375 */ , - 0x1107, 0x1161 /* offset 3377 */ , - 0x1109, 0x1161 /* offset 3379 */ , - 0x110b, 0x1161 /* offset 3381 */ , - 0x110c, 0x1161 /* offset 3383 */ , - 0x110e, 0x1161 /* offset 3385 */ , - 0x110f, 0x1161 /* offset 3387 */ , - 0x1110, 0x1161 /* offset 3389 */ , - 0x1111, 0x1161 /* offset 3391 */ , - 0x1112, 0x1161 /* offset 3393 */ , - 0x4e94 /* offset 3395 */ , - 0x516d /* offset 3396 */ , - 0x4e03 /* offset 3397 */ , - 0x4e5d /* offset 3398 */ , - 0x682a /* offset 3399 */ , - 0x6709 /* offset 3400 */ , - 0x793e /* offset 3401 */ , - 0x540d /* offset 3402 */ , - 0x7279 /* offset 3403 */ , - 0x8ca1 /* offset 3404 */ , - 0x795d /* offset 3405 */ , - 0x52b4 /* offset 3406 */ , - 0x79d8 /* offset 3407 */ , - 0x7537 /* offset 3408 */ , - 0x9069 /* offset 3409 */ , - 0x512a /* offset 3410 */ , - 0x5370 /* offset 3411 */ , - 0x6ce8 /* offset 3412 */ , - 0x9805 /* offset 3413 */ , - 0x4f11 /* offset 3414 */ , - 0x5199 /* offset 3415 */ , - 0x6b63 /* offset 3416 */ , - 0x5de6 /* offset 3417 */ , - 0x53f3 /* offset 3418 */ , - 0x533b /* offset 3419 */ , - 0x5b97 /* offset 3420 */ , - 0x5b66 /* offset 3421 */ , - 0x76e3 /* offset 3422 */ , - 0x4f01 /* offset 3423 */ , - 0x8cc7 /* offset 3424 */ , - 0x5354 /* offset 3425 */ , - 0x591c /* offset 3426 */ , - 0x33, 0x36 /* offset 3427 */ , - 0x33, 0x37 /* offset 3429 */ , - 0x33, 0x38 /* offset 3431 */ , - 0x33, 0x39 /* offset 3433 */ , - 0x34, 0x30 /* offset 3435 */ , - 0x34, 0x31 /* offset 3437 */ , - 0x34, 0x32 /* offset 3439 */ , - 0x34, 0x33 /* offset 3441 */ , - 0x34, 0x34 /* offset 3443 */ , - 0x34, 0x35 /* offset 3445 */ , - 0x34, 0x36 /* offset 3447 */ , - 0x34, 0x37 /* offset 3449 */ , - 0x34, 0x38 /* offset 3451 */ , - 0x34, 0x39 /* offset 3453 */ , - 0x35, 0x30 /* offset 3455 */ , - 0x31, 0x6708 /* offset 3457 */ , - 0x32, 0x6708 /* offset 3459 */ , - 0x33, 0x6708 /* offset 3461 */ , - 0x34, 0x6708 /* offset 3463 */ , - 0x35, 0x6708 /* offset 3465 */ , - 0x36, 0x6708 /* offset 3467 */ , - 0x37, 0x6708 /* offset 3469 */ , - 0x38, 0x6708 /* offset 3471 */ , - 0x39, 0x6708 /* offset 3473 */ , - 0x31, 0x30, 0x6708 /* offset 3475 */ , - 0x31, 0x31, 0x6708 /* offset 3478 */ , - 0x31, 0x32, 0x6708 /* offset 3481 */ , - 0x30a2 /* offset 3484 */ , - 0x30a4 /* offset 3485 */ , - 0x30a6 /* offset 3486 */ , - 0x30a8 /* offset 3487 */ , - 0x30aa /* offset 3488 */ , - 0x30ab /* offset 3489 */ , - 0x30ad /* offset 3490 */ , - 0x30af /* offset 3491 */ , - 0x30b1 /* offset 3492 */ , - 0x30b3 /* offset 3493 */ , - 0x30b5 /* offset 3494 */ , - 0x30b7 /* offset 3495 */ , - 0x30b9 /* offset 3496 */ , - 0x30bb /* offset 3497 */ , - 0x30bd /* offset 3498 */ , - 0x30bf /* offset 3499 */ , - 0x30c1 /* offset 3500 */ , - 0x30c4 /* offset 3501 */ , - 0x30c6 /* offset 3502 */ , - 0x30c8 /* offset 3503 */ , - 0x30ca /* offset 3504 */ , - 0x30cb /* offset 3505 */ , - 0x30cc /* offset 3506 */ , - 0x30cd /* offset 3507 */ , - 0x30ce /* offset 3508 */ , - 0x30cf /* offset 3509 */ , - 0x30d2 /* offset 3510 */ , - 0x30d5 /* offset 3511 */ , - 0x30d8 /* offset 3512 */ , - 0x30db /* offset 3513 */ , - 0x30de /* offset 3514 */ , - 0x30df /* offset 3515 */ , - 0x30e0 /* offset 3516 */ , - 0x30e1 /* offset 3517 */ , - 0x30e2 /* offset 3518 */ , - 0x30e4 /* offset 3519 */ , - 0x30e6 /* offset 3520 */ , - 0x30e8 /* offset 3521 */ , - 0x30e9 /* offset 3522 */ , - 0x30ea /* offset 3523 */ , - 0x30eb /* offset 3524 */ , - 0x30ec /* offset 3525 */ , - 0x30ed /* offset 3526 */ , - 0x30ef /* offset 3527 */ , - 0x30f0 /* offset 3528 */ , - 0x30f1 /* offset 3529 */ , - 0x30f2 /* offset 3530 */ , - 0x30a2, 0x30cf, 0x309a, 0x30fc, 0x30c8 /* offset 3531 */ , - 0x30a2, 0x30eb, 0x30d5, 0x30a1 /* offset 3536 */ , - 0x30a2, 0x30f3, 0x30d8, 0x309a, 0x30a2 /* offset 3540 */ , - 0x30a2, 0x30fc, 0x30eb /* offset 3545 */ , - 0x30a4, 0x30cb, 0x30f3, 0x30af, 0x3099 /* offset 3548 */ , - 0x30a4, 0x30f3, 0x30c1 /* offset 3553 */ , - 0x30a6, 0x30a9, 0x30f3 /* offset 3556 */ , - 0x30a8, 0x30b9, 0x30af, 0x30fc, 0x30c8, 0x3099 /* offset 3559 */ , - 0x30a8, 0x30fc, 0x30ab, 0x30fc /* offset 3565 */ , - 0x30aa, 0x30f3, 0x30b9 /* offset 3569 */ , - 0x30aa, 0x30fc, 0x30e0 /* offset 3572 */ , - 0x30ab, 0x30a4, 0x30ea /* offset 3575 */ , - 0x30ab, 0x30e9, 0x30c3, 0x30c8 /* offset 3578 */ , - 0x30ab, 0x30ed, 0x30ea, 0x30fc /* offset 3582 */ , - 0x30ab, 0x3099, 0x30ed, 0x30f3 /* offset 3586 */ , - 0x30ab, 0x3099, 0x30f3, 0x30de /* offset 3590 */ , - 0x30ad, 0x3099, 0x30ab, 0x3099 /* offset 3594 */ , - 0x30ad, 0x3099, 0x30cb, 0x30fc /* offset 3598 */ , - 0x30ad, 0x30e5, 0x30ea, 0x30fc /* offset 3602 */ , - 0x30ad, 0x3099, 0x30eb, 0x30bf, 0x3099, 0x30fc /* offset 3606 */ , - 0x30ad, 0x30ed /* offset 3612 */ , - 0x30ad, 0x30ed, 0x30af, 0x3099, 0x30e9, 0x30e0 /* offset 3614 */ , - 0x30ad, 0x30ed, 0x30e1, 0x30fc, 0x30c8, 0x30eb /* offset 3620 */ , - 0x30ad, 0x30ed, 0x30ef, 0x30c3, 0x30c8 /* offset 3626 */ , - 0x30af, 0x3099, 0x30e9, 0x30e0 /* offset 3631 */ , - 0x30af, 0x3099, 0x30e9, 0x30e0, 0x30c8, 0x30f3 /* offset 3635 */ , - 0x30af, 0x30eb, 0x30bb, 0x3099, 0x30a4, 0x30ed /* offset 3641 */ , - 0x30af, 0x30ed, 0x30fc, 0x30cd /* offset 3647 */ , - 0x30b1, 0x30fc, 0x30b9 /* offset 3651 */ , - 0x30b3, 0x30eb, 0x30ca /* offset 3654 */ , - 0x30b3, 0x30fc, 0x30db, 0x309a /* offset 3657 */ , - 0x30b5, 0x30a4, 0x30af, 0x30eb /* offset 3661 */ , - 0x30b5, 0x30f3, 0x30c1, 0x30fc, 0x30e0 /* offset 3665 */ , - 0x30b7, 0x30ea, 0x30f3, 0x30af, 0x3099 /* offset 3670 */ , - 0x30bb, 0x30f3, 0x30c1 /* offset 3675 */ , - 0x30bb, 0x30f3, 0x30c8 /* offset 3678 */ , - 0x30bf, 0x3099, 0x30fc, 0x30b9 /* offset 3681 */ , - 0x30c6, 0x3099, 0x30b7 /* offset 3685 */ , - 0x30c8, 0x3099, 0x30eb /* offset 3688 */ , - 0x30c8, 0x30f3 /* offset 3691 */ , - 0x30ca, 0x30ce /* offset 3693 */ , - 0x30ce, 0x30c3, 0x30c8 /* offset 3695 */ , - 0x30cf, 0x30a4, 0x30c4 /* offset 3698 */ , - 0x30cf, 0x309a, 0x30fc, 0x30bb, 0x30f3, 0x30c8 /* offset 3701 */ , - 0x30cf, 0x309a, 0x30fc, 0x30c4 /* offset 3707 */ , - 0x30cf, 0x3099, 0x30fc, 0x30ec, 0x30eb /* offset 3711 */ , - 0x30d2, 0x309a, 0x30a2, 0x30b9, 0x30c8, 0x30eb /* offset 3716 */ , - 0x30d2, 0x309a, 0x30af, 0x30eb /* offset 3722 */ , - 0x30d2, 0x309a, 0x30b3 /* offset 3726 */ , - 0x30d2, 0x3099, 0x30eb /* offset 3729 */ , - 0x30d5, 0x30a1, 0x30e9, 0x30c3, 0x30c8, 0x3099 /* offset 3732 */ , - 0x30d5, 0x30a3, 0x30fc, 0x30c8 /* offset 3738 */ , - 0x30d5, 0x3099, 0x30c3, 0x30b7, 0x30a7, 0x30eb /* offset 3742 */ , - 0x30d5, 0x30e9, 0x30f3 /* offset 3748 */ , - 0x30d8, 0x30af, 0x30bf, 0x30fc, 0x30eb /* offset 3751 */ , - 0x30d8, 0x309a, 0x30bd /* offset 3756 */ , - 0x30d8, 0x309a, 0x30cb, 0x30d2 /* offset 3759 */ , - 0x30d8, 0x30eb, 0x30c4 /* offset 3763 */ , - 0x30d8, 0x309a, 0x30f3, 0x30b9 /* offset 3766 */ , - 0x30d8, 0x309a, 0x30fc, 0x30b7, 0x3099 /* offset 3770 */ , - 0x30d8, 0x3099, 0x30fc, 0x30bf /* offset 3775 */ , - 0x30db, 0x309a, 0x30a4, 0x30f3, 0x30c8 /* offset 3779 */ , - 0x30db, 0x3099, 0x30eb, 0x30c8 /* offset 3784 */ , - 0x30db, 0x30f3 /* offset 3788 */ , - 0x30db, 0x309a, 0x30f3, 0x30c8, 0x3099 /* offset 3790 */ , - 0x30db, 0x30fc, 0x30eb /* offset 3795 */ , - 0x30db, 0x30fc, 0x30f3 /* offset 3798 */ , - 0x30de, 0x30a4, 0x30af, 0x30ed /* offset 3801 */ , - 0x30de, 0x30a4, 0x30eb /* offset 3805 */ , - 0x30de, 0x30c3, 0x30cf /* offset 3808 */ , - 0x30de, 0x30eb, 0x30af /* offset 3811 */ , - 0x30de, 0x30f3, 0x30b7, 0x30e7, 0x30f3 /* offset 3814 */ , - 0x30df, 0x30af, 0x30ed, 0x30f3 /* offset 3819 */ , - 0x30df, 0x30ea /* offset 3823 */ , - 0x30df, 0x30ea, 0x30cf, 0x3099, 0x30fc, 0x30eb /* offset 3825 */ , - 0x30e1, 0x30ab, 0x3099 /* offset 3831 */ , - 0x30e1, 0x30ab, 0x3099, 0x30c8, 0x30f3 /* offset 3834 */ , - 0x30e1, 0x30fc, 0x30c8, 0x30eb /* offset 3839 */ , - 0x30e4, 0x30fc, 0x30c8, 0x3099 /* offset 3843 */ , - 0x30e4, 0x30fc, 0x30eb /* offset 3847 */ , - 0x30e6, 0x30a2, 0x30f3 /* offset 3850 */ , - 0x30ea, 0x30c3, 0x30c8, 0x30eb /* offset 3853 */ , - 0x30ea, 0x30e9 /* offset 3857 */ , - 0x30eb, 0x30d2, 0x309a, 0x30fc /* offset 3859 */ , - 0x30eb, 0x30fc, 0x30d5, 0x3099, 0x30eb /* offset 3863 */ , - 0x30ec, 0x30e0 /* offset 3868 */ , - 0x30ec, 0x30f3, 0x30c8, 0x30b1, 0x3099, 0x30f3 /* offset 3870 */ , - 0x30ef, 0x30c3, 0x30c8 /* offset 3876 */ , - 0x30, 0x70b9 /* offset 3879 */ , - 0x31, 0x70b9 /* offset 3881 */ , - 0x32, 0x70b9 /* offset 3883 */ , - 0x33, 0x70b9 /* offset 3885 */ , - 0x34, 0x70b9 /* offset 3887 */ , - 0x35, 0x70b9 /* offset 3889 */ , - 0x36, 0x70b9 /* offset 3891 */ , - 0x37, 0x70b9 /* offset 3893 */ , - 0x38, 0x70b9 /* offset 3895 */ , - 0x39, 0x70b9 /* offset 3897 */ , - 0x31, 0x30, 0x70b9 /* offset 3899 */ , - 0x31, 0x31, 0x70b9 /* offset 3902 */ , - 0x31, 0x32, 0x70b9 /* offset 3905 */ , - 0x31, 0x33, 0x70b9 /* offset 3908 */ , - 0x31, 0x34, 0x70b9 /* offset 3911 */ , - 0x31, 0x35, 0x70b9 /* offset 3914 */ , - 0x31, 0x36, 0x70b9 /* offset 3917 */ , - 0x31, 0x37, 0x70b9 /* offset 3920 */ , - 0x31, 0x38, 0x70b9 /* offset 3923 */ , - 0x31, 0x39, 0x70b9 /* offset 3926 */ , - 0x32, 0x30, 0x70b9 /* offset 3929 */ , - 0x32, 0x31, 0x70b9 /* offset 3932 */ , - 0x32, 0x32, 0x70b9 /* offset 3935 */ , - 0x32, 0x33, 0x70b9 /* offset 3938 */ , - 0x32, 0x34, 0x70b9 /* offset 3941 */ , - 0x68, 0x50, 0x61 /* offset 3944 */ , - 0x64, 0x61 /* offset 3947 */ , - 0x41, 0x55 /* offset 3949 */ , - 0x62, 0x61, 0x72 /* offset 3951 */ , - 0x6f, 0x56 /* offset 3954 */ , - 0x70, 0x63 /* offset 3956 */ , - 0x5e73, 0x6210 /* offset 3958 */ , - 0x662d, 0x548c /* offset 3960 */ , - 0x5927, 0x6b63 /* offset 3962 */ , - 0x660e, 0x6cbb /* offset 3964 */ , - 0x682a, 0x5f0f, 0x4f1a, 0x793e /* offset 3966 */ , - 0x70, 0x41 /* offset 3970 */ , - 0x6e, 0x41 /* offset 3972 */ , - 0x3bc, 0x41 /* offset 3974 */ , - 0x6d, 0x41 /* offset 3976 */ , - 0x6b, 0x41 /* offset 3978 */ , - 0x4b, 0x42 /* offset 3980 */ , - 0x4d, 0x42 /* offset 3982 */ , - 0x47, 0x42 /* offset 3984 */ , - 0x63, 0x61, 0x6c /* offset 3986 */ , - 0x6b, 0x63, 0x61, 0x6c /* offset 3989 */ , - 0x70, 0x46 /* offset 3993 */ , - 0x6e, 0x46 /* offset 3995 */ , - 0x3bc, 0x46 /* offset 3997 */ , - 0x3bc, 0x67 /* offset 3999 */ , - 0x6d, 0x67 /* offset 4001 */ , - 0x6b, 0x67 /* offset 4003 */ , - 0x48, 0x7a /* offset 4005 */ , - 0x6b, 0x48, 0x7a /* offset 4007 */ , - 0x4d, 0x48, 0x7a /* offset 4010 */ , - 0x47, 0x48, 0x7a /* offset 4013 */ , - 0x54, 0x48, 0x7a /* offset 4016 */ , - 0x3bc, 0x6c /* offset 4019 */ , - 0x6d, 0x6c /* offset 4021 */ , - 0x64, 0x6c /* offset 4023 */ , - 0x6b, 0x6c /* offset 4025 */ , - 0x66, 0x6d /* offset 4027 */ , - 0x6e, 0x6d /* offset 4029 */ , - 0x3bc, 0x6d /* offset 4031 */ , - 0x6d, 0x6d /* offset 4033 */ , - 0x63, 0x6d /* offset 4035 */ , - 0x6b, 0x6d /* offset 4037 */ , - 0x6d, 0x6d, 0x32 /* offset 4039 */ , - 0x63, 0x6d, 0x32 /* offset 4042 */ , - 0x6d, 0x32 /* offset 4045 */ , - 0x6b, 0x6d, 0x32 /* offset 4047 */ , - 0x6d, 0x6d, 0x33 /* offset 4050 */ , - 0x63, 0x6d, 0x33 /* offset 4053 */ , - 0x6d, 0x33 /* offset 4056 */ , - 0x6b, 0x6d, 0x33 /* offset 4058 */ , - 0x6d, 0x2215, 0x73 /* offset 4061 */ , - 0x6d, 0x2215, 0x73, 0x32 /* offset 4064 */ , - 0x50, 0x61 /* offset 4068 */ , - 0x6b, 0x50, 0x61 /* offset 4070 */ , - 0x4d, 0x50, 0x61 /* offset 4073 */ , - 0x47, 0x50, 0x61 /* offset 4076 */ , - 0x72, 0x61, 0x64 /* offset 4079 */ , - 0x72, 0x61, 0x64, 0x2215, 0x73 /* offset 4082 */ , - 0x72, 0x61, 0x64, 0x2215, 0x73, 0x32 /* offset 4087 */ , - 0x70, 0x73 /* offset 4093 */ , - 0x6e, 0x73 /* offset 4095 */ , - 0x3bc, 0x73 /* offset 4097 */ , - 0x6d, 0x73 /* offset 4099 */ , - 0x70, 0x56 /* offset 4101 */ , - 0x6e, 0x56 /* offset 4103 */ , - 0x3bc, 0x56 /* offset 4105 */ , - 0x6d, 0x56 /* offset 4107 */ , - 0x6b, 0x56 /* offset 4109 */ , - 0x4d, 0x56 /* offset 4111 */ , - 0x70, 0x57 /* offset 4113 */ , - 0x6e, 0x57 /* offset 4115 */ , - 0x3bc, 0x57 /* offset 4117 */ , - 0x6d, 0x57 /* offset 4119 */ , - 0x6b, 0x57 /* offset 4121 */ , - 0x4d, 0x57 /* offset 4123 */ , - 0x6b, 0x3a9 /* offset 4125 */ , - 0x4d, 0x3a9 /* offset 4127 */ , - 0x61, 0x2e, 0x6d, 0x2e /* offset 4129 */ , - 0x42, 0x71 /* offset 4133 */ , - 0x63, 0x63 /* offset 4135 */ , - 0x63, 0x64 /* offset 4137 */ , - 0x43, 0x2215, 0x6b, 0x67 /* offset 4139 */ , - 0x43, 0x6f, 0x2e /* offset 4143 */ , - 0x64, 0x42 /* offset 4146 */ , - 0x47, 0x79 /* offset 4148 */ , - 0x68, 0x61 /* offset 4150 */ , - 0x48, 0x50 /* offset 4152 */ , - 0x69, 0x6e /* offset 4154 */ , - 0x4b, 0x4b /* offset 4156 */ , - 0x4b, 0x4d /* offset 4158 */ , - 0x6b, 0x74 /* offset 4160 */ , - 0x6c, 0x6d /* offset 4162 */ , - 0x6c, 0x6e /* offset 4164 */ , - 0x6c, 0x6f, 0x67 /* offset 4166 */ , - 0x6c, 0x78 /* offset 4169 */ , - 0x6d, 0x62 /* offset 4171 */ , - 0x6d, 0x69, 0x6c /* offset 4173 */ , - 0x6d, 0x6f, 0x6c /* offset 4176 */ , - 0x50, 0x48 /* offset 4179 */ , - 0x70, 0x2e, 0x6d, 0x2e /* offset 4181 */ , - 0x50, 0x50, 0x4d /* offset 4185 */ , - 0x50, 0x52 /* offset 4188 */ , - 0x73, 0x72 /* offset 4190 */ , - 0x53, 0x76 /* offset 4192 */ , - 0x57, 0x62 /* offset 4194 */ , - 0x31, 0x65e5 /* offset 4196 */ , - 0x32, 0x65e5 /* offset 4198 */ , - 0x33, 0x65e5 /* offset 4200 */ , - 0x34, 0x65e5 /* offset 4202 */ , - 0x35, 0x65e5 /* offset 4204 */ , - 0x36, 0x65e5 /* offset 4206 */ , - 0x37, 0x65e5 /* offset 4208 */ , - 0x38, 0x65e5 /* offset 4210 */ , - 0x39, 0x65e5 /* offset 4212 */ , - 0x31, 0x30, 0x65e5 /* offset 4214 */ , - 0x31, 0x31, 0x65e5 /* offset 4217 */ , - 0x31, 0x32, 0x65e5 /* offset 4220 */ , - 0x31, 0x33, 0x65e5 /* offset 4223 */ , - 0x31, 0x34, 0x65e5 /* offset 4226 */ , - 0x31, 0x35, 0x65e5 /* offset 4229 */ , - 0x31, 0x36, 0x65e5 /* offset 4232 */ , - 0x31, 0x37, 0x65e5 /* offset 4235 */ , - 0x31, 0x38, 0x65e5 /* offset 4238 */ , - 0x31, 0x39, 0x65e5 /* offset 4241 */ , - 0x32, 0x30, 0x65e5 /* offset 4244 */ , - 0x32, 0x31, 0x65e5 /* offset 4247 */ , - 0x32, 0x32, 0x65e5 /* offset 4250 */ , - 0x32, 0x33, 0x65e5 /* offset 4253 */ , - 0x32, 0x34, 0x65e5 /* offset 4256 */ , - 0x32, 0x35, 0x65e5 /* offset 4259 */ , - 0x32, 0x36, 0x65e5 /* offset 4262 */ , - 0x32, 0x37, 0x65e5 /* offset 4265 */ , - 0x32, 0x38, 0x65e5 /* offset 4268 */ , - 0x32, 0x39, 0x65e5 /* offset 4271 */ , - 0x33, 0x30, 0x65e5 /* offset 4274 */ , - 0x33, 0x31, 0x65e5 /* offset 4277 */ , - 0x8c48 /* offset 4280 */ , - 0x66f4 /* offset 4281 */ , - 0x8cc8 /* offset 4282 */ , - 0x6ed1 /* offset 4283 */ , - 0x4e32 /* offset 4284 */ , - 0x53e5 /* offset 4285 */ , - 0x5951 /* offset 4286 */ , - 0x5587 /* offset 4287 */ , - 0x5948 /* offset 4288 */ , - 0x61f6 /* offset 4289 */ , - 0x7669 /* offset 4290 */ , - 0x7f85 /* offset 4291 */ , - 0x863f /* offset 4292 */ , - 0x87ba /* offset 4293 */ , - 0x88f8 /* offset 4294 */ , - 0x908f /* offset 4295 */ , - 0x6a02 /* offset 4296 */ , - 0x6d1b /* offset 4297 */ , - 0x70d9 /* offset 4298 */ , - 0x73de /* offset 4299 */ , - 0x843d /* offset 4300 */ , - 0x916a /* offset 4301 */ , - 0x99f1 /* offset 4302 */ , - 0x4e82 /* offset 4303 */ , - 0x5375 /* offset 4304 */ , - 0x6b04 /* offset 4305 */ , - 0x721b /* offset 4306 */ , - 0x862d /* offset 4307 */ , - 0x9e1e /* offset 4308 */ , - 0x5d50 /* offset 4309 */ , - 0x6feb /* offset 4310 */ , - 0x85cd /* offset 4311 */ , - 0x8964 /* offset 4312 */ , - 0x62c9 /* offset 4313 */ , - 0x81d8 /* offset 4314 */ , - 0x881f /* offset 4315 */ , - 0x5eca /* offset 4316 */ , - 0x6717 /* offset 4317 */ , - 0x6d6a /* offset 4318 */ , - 0x72fc /* offset 4319 */ , - 0x90ce /* offset 4320 */ , - 0x4f86 /* offset 4321 */ , - 0x51b7 /* offset 4322 */ , - 0x52de /* offset 4323 */ , - 0x64c4 /* offset 4324 */ , - 0x6ad3 /* offset 4325 */ , - 0x7210 /* offset 4326 */ , - 0x76e7 /* offset 4327 */ , - 0x8606 /* offset 4328 */ , - 0x865c /* offset 4329 */ , - 0x8def /* offset 4330 */ , - 0x9732 /* offset 4331 */ , - 0x9b6f /* offset 4332 */ , - 0x9dfa /* offset 4333 */ , - 0x788c /* offset 4334 */ , - 0x797f /* offset 4335 */ , - 0x7da0 /* offset 4336 */ , - 0x83c9 /* offset 4337 */ , - 0x9304 /* offset 4338 */ , - 0x8ad6 /* offset 4339 */ , - 0x58df /* offset 4340 */ , - 0x5f04 /* offset 4341 */ , - 0x7c60 /* offset 4342 */ , - 0x807e /* offset 4343 */ , - 0x7262 /* offset 4344 */ , - 0x78ca /* offset 4345 */ , - 0x8cc2 /* offset 4346 */ , - 0x96f7 /* offset 4347 */ , - 0x58d8 /* offset 4348 */ , - 0x5c62 /* offset 4349 */ , - 0x6a13 /* offset 4350 */ , - 0x6dda /* offset 4351 */ , - 0x6f0f /* offset 4352 */ , - 0x7d2f /* offset 4353 */ , - 0x7e37 /* offset 4354 */ , - 0x964b /* offset 4355 */ , - 0x52d2 /* offset 4356 */ , - 0x808b /* offset 4357 */ , - 0x51dc /* offset 4358 */ , - 0x51cc /* offset 4359 */ , - 0x7a1c /* offset 4360 */ , - 0x7dbe /* offset 4361 */ , - 0x83f1 /* offset 4362 */ , - 0x9675 /* offset 4363 */ , - 0x8b80 /* offset 4364 */ , - 0x62cf /* offset 4365 */ , - 0x8afe /* offset 4366 */ , - 0x4e39 /* offset 4367 */ , - 0x5be7 /* offset 4368 */ , - 0x6012 /* offset 4369 */ , - 0x7387 /* offset 4370 */ , - 0x7570 /* offset 4371 */ , - 0x5317 /* offset 4372 */ , - 0x78fb /* offset 4373 */ , - 0x4fbf /* offset 4374 */ , - 0x5fa9 /* offset 4375 */ , - 0x4e0d /* offset 4376 */ , - 0x6ccc /* offset 4377 */ , - 0x6578 /* offset 4378 */ , - 0x7d22 /* offset 4379 */ , - 0x53c3 /* offset 4380 */ , - 0x585e /* offset 4381 */ , - 0x7701 /* offset 4382 */ , - 0x8449 /* offset 4383 */ , - 0x8aaa /* offset 4384 */ , - 0x6bba /* offset 4385 */ , - 0x6c88 /* offset 4386 */ , - 0x62fe /* offset 4387 */ , - 0x82e5 /* offset 4388 */ , - 0x63a0 /* offset 4389 */ , - 0x7565 /* offset 4390 */ , - 0x4eae /* offset 4391 */ , - 0x5169 /* offset 4392 */ , - 0x51c9 /* offset 4393 */ , - 0x6881 /* offset 4394 */ , - 0x7ce7 /* offset 4395 */ , - 0x826f /* offset 4396 */ , - 0x8ad2 /* offset 4397 */ , - 0x91cf /* offset 4398 */ , - 0x52f5 /* offset 4399 */ , - 0x5442 /* offset 4400 */ , - 0x5eec /* offset 4401 */ , - 0x65c5 /* offset 4402 */ , - 0x6ffe /* offset 4403 */ , - 0x792a /* offset 4404 */ , - 0x95ad /* offset 4405 */ , - 0x9a6a /* offset 4406 */ , - 0x9e97 /* offset 4407 */ , - 0x9ece /* offset 4408 */ , - 0x66c6 /* offset 4409 */ , - 0x6b77 /* offset 4410 */ , - 0x8f62 /* offset 4411 */ , - 0x5e74 /* offset 4412 */ , - 0x6190 /* offset 4413 */ , - 0x6200 /* offset 4414 */ , - 0x649a /* offset 4415 */ , - 0x6f23 /* offset 4416 */ , - 0x7149 /* offset 4417 */ , - 0x7489 /* offset 4418 */ , - 0x79ca /* offset 4419 */ , - 0x7df4 /* offset 4420 */ , - 0x806f /* offset 4421 */ , - 0x8f26 /* offset 4422 */ , - 0x84ee /* offset 4423 */ , - 0x9023 /* offset 4424 */ , - 0x934a /* offset 4425 */ , - 0x5217 /* offset 4426 */ , - 0x52a3 /* offset 4427 */ , - 0x54bd /* offset 4428 */ , - 0x70c8 /* offset 4429 */ , - 0x88c2 /* offset 4430 */ , - 0x5ec9 /* offset 4431 */ , - 0x5ff5 /* offset 4432 */ , - 0x637b /* offset 4433 */ , - 0x6bae /* offset 4434 */ , - 0x7c3e /* offset 4435 */ , - 0x7375 /* offset 4436 */ , - 0x4ee4 /* offset 4437 */ , - 0x56f9 /* offset 4438 */ , - 0x5dba /* offset 4439 */ , - 0x601c /* offset 4440 */ , - 0x73b2 /* offset 4441 */ , - 0x7469 /* offset 4442 */ , - 0x7f9a /* offset 4443 */ , - 0x8046 /* offset 4444 */ , - 0x9234 /* offset 4445 */ , - 0x96f6 /* offset 4446 */ , - 0x9748 /* offset 4447 */ , - 0x9818 /* offset 4448 */ , - 0x4f8b /* offset 4449 */ , - 0x79ae /* offset 4450 */ , - 0x91b4 /* offset 4451 */ , - 0x96b8 /* offset 4452 */ , - 0x60e1 /* offset 4453 */ , - 0x4e86 /* offset 4454 */ , - 0x50da /* offset 4455 */ , - 0x5bee /* offset 4456 */ , - 0x5c3f /* offset 4457 */ , - 0x6599 /* offset 4458 */ , - 0x71ce /* offset 4459 */ , - 0x7642 /* offset 4460 */ , - 0x84fc /* offset 4461 */ , - 0x907c /* offset 4462 */ , - 0x6688 /* offset 4463 */ , - 0x962e /* offset 4464 */ , - 0x5289 /* offset 4465 */ , - 0x677b /* offset 4466 */ , - 0x67f3 /* offset 4467 */ , - 0x6d41 /* offset 4468 */ , - 0x6e9c /* offset 4469 */ , - 0x7409 /* offset 4470 */ , - 0x7559 /* offset 4471 */ , - 0x786b /* offset 4472 */ , - 0x7d10 /* offset 4473 */ , - 0x985e /* offset 4474 */ , - 0x622e /* offset 4475 */ , - 0x9678 /* offset 4476 */ , - 0x502b /* offset 4477 */ , - 0x5d19 /* offset 4478 */ , - 0x6dea /* offset 4479 */ , - 0x8f2a /* offset 4480 */ , - 0x5f8b /* offset 4481 */ , - 0x6144 /* offset 4482 */ , - 0x6817 /* offset 4483 */ , - 0x9686 /* offset 4484 */ , - 0x5229 /* offset 4485 */ , - 0x540f /* offset 4486 */ , - 0x5c65 /* offset 4487 */ , - 0x6613 /* offset 4488 */ , - 0x674e /* offset 4489 */ , - 0x68a8 /* offset 4490 */ , - 0x6ce5 /* offset 4491 */ , - 0x7406 /* offset 4492 */ , - 0x75e2 /* offset 4493 */ , - 0x7f79 /* offset 4494 */ , - 0x88cf /* offset 4495 */ , - 0x88e1 /* offset 4496 */ , - 0x96e2 /* offset 4497 */ , - 0x533f /* offset 4498 */ , - 0x6eba /* offset 4499 */ , - 0x541d /* offset 4500 */ , - 0x71d0 /* offset 4501 */ , - 0x7498 /* offset 4502 */ , - 0x85fa /* offset 4503 */ , - 0x96a3 /* offset 4504 */ , - 0x9c57 /* offset 4505 */ , - 0x9e9f /* offset 4506 */ , - 0x6797 /* offset 4507 */ , - 0x6dcb /* offset 4508 */ , - 0x81e8 /* offset 4509 */ , - 0x7b20 /* offset 4510 */ , - 0x7c92 /* offset 4511 */ , - 0x72c0 /* offset 4512 */ , - 0x7099 /* offset 4513 */ , - 0x8b58 /* offset 4514 */ , - 0x4ec0 /* offset 4515 */ , - 0x8336 /* offset 4516 */ , - 0x523a /* offset 4517 */ , - 0x5207 /* offset 4518 */ , - 0x5ea6 /* offset 4519 */ , - 0x62d3 /* offset 4520 */ , - 0x7cd6 /* offset 4521 */ , - 0x5b85 /* offset 4522 */ , - 0x6d1e /* offset 4523 */ , - 0x66b4 /* offset 4524 */ , - 0x8f3b /* offset 4525 */ , - 0x964d /* offset 4526 */ , - 0x5ed3 /* offset 4527 */ , - 0x5140 /* offset 4528 */ , - 0x55c0 /* offset 4529 */ , - 0x585a /* offset 4530 */ , - 0x6674 /* offset 4531 */ , - 0x51de /* offset 4532 */ , - 0x732a /* offset 4533 */ , - 0x76ca /* offset 4534 */ , - 0x793c /* offset 4535 */ , - 0x795e /* offset 4536 */ , - 0x7965 /* offset 4537 */ , - 0x798f /* offset 4538 */ , - 0x9756 /* offset 4539 */ , - 0x7cbe /* offset 4540 */ , - 0x8612 /* offset 4541 */ , - 0x8af8 /* offset 4542 */ , - 0x9038 /* offset 4543 */ , - 0x90fd /* offset 4544 */ , - 0x98ef /* offset 4545 */ , - 0x98fc /* offset 4546 */ , - 0x9928 /* offset 4547 */ , - 0x9db4 /* offset 4548 */ , - 0x4fae /* offset 4549 */ , - 0x50e7 /* offset 4550 */ , - 0x514d /* offset 4551 */ , - 0x52c9 /* offset 4552 */ , - 0x52e4 /* offset 4553 */ , - 0x5351 /* offset 4554 */ , - 0x559d /* offset 4555 */ , - 0x5606 /* offset 4556 */ , - 0x5668 /* offset 4557 */ , - 0x5840 /* offset 4558 */ , - 0x58a8 /* offset 4559 */ , - 0x5c64 /* offset 4560 */ , - 0x6094 /* offset 4561 */ , - 0x6168 /* offset 4562 */ , - 0x618e /* offset 4563 */ , - 0x61f2 /* offset 4564 */ , - 0x654f /* offset 4565 */ , - 0x65e2 /* offset 4566 */ , - 0x6691 /* offset 4567 */ , - 0x6885 /* offset 4568 */ , - 0x6d77 /* offset 4569 */ , - 0x6e1a /* offset 4570 */ , - 0x6f22 /* offset 4571 */ , - 0x716e /* offset 4572 */ , - 0x722b /* offset 4573 */ , - 0x7422 /* offset 4574 */ , - 0x7891 /* offset 4575 */ , - 0x7949 /* offset 4576 */ , - 0x7948 /* offset 4577 */ , - 0x7950 /* offset 4578 */ , - 0x7956 /* offset 4579 */ , - 0x798d /* offset 4580 */ , - 0x798e /* offset 4581 */ , - 0x7a40 /* offset 4582 */ , - 0x7a81 /* offset 4583 */ , - 0x7bc0 /* offset 4584 */ , - 0x7e09 /* offset 4585 */ , - 0x7e41 /* offset 4586 */ , - 0x7f72 /* offset 4587 */ , - 0x8005 /* offset 4588 */ , - 0x81ed /* offset 4589 */ , - 0x8279 /* offset 4590 */ , - 0x8457 /* offset 4591 */ , - 0x8910 /* offset 4592 */ , - 0x8996 /* offset 4593 */ , - 0x8b01 /* offset 4594 */ , - 0x8b39 /* offset 4595 */ , - 0x8cd3 /* offset 4596 */ , - 0x8d08 /* offset 4597 */ , - 0x8fb6 /* offset 4598 */ , - 0x96e3 /* offset 4599 */ , - 0x97ff /* offset 4600 */ , - 0x983b /* offset 4601 */ , - 0x66, 0x66 /* offset 4602 */ , - 0x66, 0x69 /* offset 4604 */ , - 0x66, 0x6c /* offset 4606 */ , - 0x66, 0x66, 0x69 /* offset 4608 */ , - 0x66, 0x66, 0x6c /* offset 4611 */ , - 0x73, 0x74 /* offset 4614 */ , - 0x574, 0x576 /* offset 4616 */ , - 0x574, 0x565 /* offset 4618 */ , - 0x574, 0x56b /* offset 4620 */ , - 0x57e, 0x576 /* offset 4622 */ , - 0x574, 0x56d /* offset 4624 */ , - 0x5d9, 0x5b4 /* offset 4626 */ , - 0x5f2, 0x5b7 /* offset 4628 */ , - 0x5e2 /* offset 4630 */ , - 0x5d4 /* offset 4631 */ , - 0x5db /* offset 4632 */ , - 0x5dc /* offset 4633 */ , - 0x5dd /* offset 4634 */ , - 0x5e8 /* offset 4635 */ , - 0x5ea /* offset 4636 */ , - 0x5e9, 0x5c1 /* offset 4637 */ , - 0x5e9, 0x5c2 /* offset 4639 */ , - 0x5e9, 0x5bc, 0x5c1 /* offset 4641 */ , - 0x5e9, 0x5bc, 0x5c2 /* offset 4644 */ , - 0x5d0, 0x5b7 /* offset 4647 */ , - 0x5d0, 0x5b8 /* offset 4649 */ , - 0x5d0, 0x5bc /* offset 4651 */ , - 0x5d1, 0x5bc /* offset 4653 */ , - 0x5d2, 0x5bc /* offset 4655 */ , - 0x5d3, 0x5bc /* offset 4657 */ , - 0x5d4, 0x5bc /* offset 4659 */ , - 0x5d5, 0x5bc /* offset 4661 */ , - 0x5d6, 0x5bc /* offset 4663 */ , - 0x5d8, 0x5bc /* offset 4665 */ , - 0x5d9, 0x5bc /* offset 4667 */ , - 0x5da, 0x5bc /* offset 4669 */ , - 0x5db, 0x5bc /* offset 4671 */ , - 0x5dc, 0x5bc /* offset 4673 */ , - 0x5de, 0x5bc /* offset 4675 */ , - 0x5e0, 0x5bc /* offset 4677 */ , - 0x5e1, 0x5bc /* offset 4679 */ , - 0x5e3, 0x5bc /* offset 4681 */ , - 0x5e4, 0x5bc /* offset 4683 */ , - 0x5e6, 0x5bc /* offset 4685 */ , - 0x5e7, 0x5bc /* offset 4687 */ , - 0x5e8, 0x5bc /* offset 4689 */ , - 0x5e9, 0x5bc /* offset 4691 */ , - 0x5ea, 0x5bc /* offset 4693 */ , - 0x5d5, 0x5b9 /* offset 4695 */ , - 0x5d1, 0x5bf /* offset 4697 */ , - 0x5db, 0x5bf /* offset 4699 */ , - 0x5e4, 0x5bf /* offset 4701 */ , - 0x5d0, 0x5dc /* offset 4703 */ , - 0x671 /* offset 4705 */ , - 0x67b /* offset 4706 */ , - 0x67e /* offset 4707 */ , - 0x680 /* offset 4708 */ , - 0x67a /* offset 4709 */ , - 0x67f /* offset 4710 */ , - 0x679 /* offset 4711 */ , - 0x6a4 /* offset 4712 */ , - 0x6a6 /* offset 4713 */ , - 0x684 /* offset 4714 */ , - 0x683 /* offset 4715 */ , - 0x686 /* offset 4716 */ , - 0x687 /* offset 4717 */ , - 0x68d /* offset 4718 */ , - 0x68c /* offset 4719 */ , - 0x68e /* offset 4720 */ , - 0x688 /* offset 4721 */ , - 0x698 /* offset 4722 */ , - 0x691 /* offset 4723 */ , - 0x6a9 /* offset 4724 */ , - 0x6af /* offset 4725 */ , - 0x6b3 /* offset 4726 */ , - 0x6b1 /* offset 4727 */ , - 0x6ba /* offset 4728 */ , - 0x6bb /* offset 4729 */ , - 0x6c1 /* offset 4730 */ , - 0x6be /* offset 4731 */ , - 0x6d2 /* offset 4732 */ , - 0x6ad /* offset 4733 */ , - 0x6c7 /* offset 4734 */ , - 0x6c6 /* offset 4735 */ , - 0x6c8 /* offset 4736 */ , - 0x6cb /* offset 4737 */ , - 0x6c5 /* offset 4738 */ , - 0x6c9 /* offset 4739 */ , - 0x6d0 /* offset 4740 */ , - 0x649 /* offset 4741 */ , - 0x64a, 0x654, 0x627 /* offset 4742 */ , - 0x64a, 0x654, 0x6d5 /* offset 4745 */ , - 0x64a, 0x654, 0x648 /* offset 4748 */ , - 0x64a, 0x654, 0x6c7 /* offset 4751 */ , - 0x64a, 0x654, 0x6c6 /* offset 4754 */ , - 0x64a, 0x654, 0x6c8 /* offset 4757 */ , - 0x64a, 0x654, 0x6d0 /* offset 4760 */ , - 0x64a, 0x654, 0x649 /* offset 4763 */ , - 0x6cc /* offset 4766 */ , - 0x64a, 0x654, 0x62c /* offset 4767 */ , - 0x64a, 0x654, 0x62d /* offset 4770 */ , - 0x64a, 0x654, 0x645 /* offset 4773 */ , - 0x64a, 0x654, 0x64a /* offset 4776 */ , - 0x628, 0x62c /* offset 4779 */ , - 0x628, 0x62d /* offset 4781 */ , - 0x628, 0x62e /* offset 4783 */ , - 0x628, 0x645 /* offset 4785 */ , - 0x628, 0x649 /* offset 4787 */ , - 0x628, 0x64a /* offset 4789 */ , - 0x62a, 0x62c /* offset 4791 */ , - 0x62a, 0x62d /* offset 4793 */ , - 0x62a, 0x62e /* offset 4795 */ , - 0x62a, 0x645 /* offset 4797 */ , - 0x62a, 0x649 /* offset 4799 */ , - 0x62a, 0x64a /* offset 4801 */ , - 0x62b, 0x62c /* offset 4803 */ , - 0x62b, 0x645 /* offset 4805 */ , - 0x62b, 0x649 /* offset 4807 */ , - 0x62b, 0x64a /* offset 4809 */ , - 0x62c, 0x62d /* offset 4811 */ , - 0x62c, 0x645 /* offset 4813 */ , - 0x62d, 0x62c /* offset 4815 */ , - 0x62d, 0x645 /* offset 4817 */ , - 0x62e, 0x62c /* offset 4819 */ , - 0x62e, 0x62d /* offset 4821 */ , - 0x62e, 0x645 /* offset 4823 */ , - 0x633, 0x62c /* offset 4825 */ , - 0x633, 0x62d /* offset 4827 */ , - 0x633, 0x62e /* offset 4829 */ , - 0x633, 0x645 /* offset 4831 */ , - 0x635, 0x62d /* offset 4833 */ , - 0x635, 0x645 /* offset 4835 */ , - 0x636, 0x62c /* offset 4837 */ , - 0x636, 0x62d /* offset 4839 */ , - 0x636, 0x62e /* offset 4841 */ , - 0x636, 0x645 /* offset 4843 */ , - 0x637, 0x62d /* offset 4845 */ , - 0x637, 0x645 /* offset 4847 */ , - 0x638, 0x645 /* offset 4849 */ , - 0x639, 0x62c /* offset 4851 */ , - 0x639, 0x645 /* offset 4853 */ , - 0x63a, 0x62c /* offset 4855 */ , - 0x63a, 0x645 /* offset 4857 */ , - 0x641, 0x62c /* offset 4859 */ , - 0x641, 0x62d /* offset 4861 */ , - 0x641, 0x62e /* offset 4863 */ , - 0x641, 0x645 /* offset 4865 */ , - 0x641, 0x649 /* offset 4867 */ , - 0x641, 0x64a /* offset 4869 */ , - 0x642, 0x62d /* offset 4871 */ , - 0x642, 0x645 /* offset 4873 */ , - 0x642, 0x649 /* offset 4875 */ , - 0x642, 0x64a /* offset 4877 */ , - 0x643, 0x627 /* offset 4879 */ , - 0x643, 0x62c /* offset 4881 */ , - 0x643, 0x62d /* offset 4883 */ , - 0x643, 0x62e /* offset 4885 */ , - 0x643, 0x644 /* offset 4887 */ , - 0x643, 0x645 /* offset 4889 */ , - 0x643, 0x649 /* offset 4891 */ , - 0x643, 0x64a /* offset 4893 */ , - 0x644, 0x62c /* offset 4895 */ , - 0x644, 0x62d /* offset 4897 */ , - 0x644, 0x62e /* offset 4899 */ , - 0x644, 0x645 /* offset 4901 */ , - 0x644, 0x649 /* offset 4903 */ , - 0x644, 0x64a /* offset 4905 */ , - 0x645, 0x62c /* offset 4907 */ , - 0x645, 0x62d /* offset 4909 */ , - 0x645, 0x62e /* offset 4911 */ , - 0x645, 0x645 /* offset 4913 */ , - 0x645, 0x649 /* offset 4915 */ , - 0x645, 0x64a /* offset 4917 */ , - 0x646, 0x62c /* offset 4919 */ , - 0x646, 0x62d /* offset 4921 */ , - 0x646, 0x62e /* offset 4923 */ , - 0x646, 0x645 /* offset 4925 */ , - 0x646, 0x649 /* offset 4927 */ , - 0x646, 0x64a /* offset 4929 */ , - 0x647, 0x62c /* offset 4931 */ , - 0x647, 0x645 /* offset 4933 */ , - 0x647, 0x649 /* offset 4935 */ , - 0x647, 0x64a /* offset 4937 */ , - 0x64a, 0x62c /* offset 4939 */ , - 0x64a, 0x62d /* offset 4941 */ , - 0x64a, 0x62e /* offset 4943 */ , - 0x64a, 0x645 /* offset 4945 */ , - 0x64a, 0x649 /* offset 4947 */ , - 0x64a, 0x64a /* offset 4949 */ , - 0x630, 0x670 /* offset 4951 */ , - 0x631, 0x670 /* offset 4953 */ , - 0x649, 0x670 /* offset 4955 */ , - 0x20, 0x64c, 0x651 /* offset 4957 */ , - 0x20, 0x64d, 0x651 /* offset 4960 */ , - 0x20, 0x64e, 0x651 /* offset 4963 */ , - 0x20, 0x64f, 0x651 /* offset 4966 */ , - 0x20, 0x650, 0x651 /* offset 4969 */ , - 0x20, 0x651, 0x670 /* offset 4972 */ , - 0x64a, 0x654, 0x631 /* offset 4975 */ , - 0x64a, 0x654, 0x632 /* offset 4978 */ , - 0x64a, 0x654, 0x646 /* offset 4981 */ , - 0x628, 0x631 /* offset 4984 */ , - 0x628, 0x632 /* offset 4986 */ , - 0x628, 0x646 /* offset 4988 */ , - 0x62a, 0x631 /* offset 4990 */ , - 0x62a, 0x632 /* offset 4992 */ , - 0x62a, 0x646 /* offset 4994 */ , - 0x62b, 0x631 /* offset 4996 */ , - 0x62b, 0x632 /* offset 4998 */ , - 0x62b, 0x646 /* offset 5000 */ , - 0x645, 0x627 /* offset 5002 */ , - 0x646, 0x631 /* offset 5004 */ , - 0x646, 0x632 /* offset 5006 */ , - 0x646, 0x646 /* offset 5008 */ , - 0x64a, 0x631 /* offset 5010 */ , - 0x64a, 0x632 /* offset 5012 */ , - 0x64a, 0x646 /* offset 5014 */ , - 0x64a, 0x654, 0x62e /* offset 5016 */ , - 0x64a, 0x654, 0x647 /* offset 5019 */ , - 0x628, 0x647 /* offset 5022 */ , - 0x62a, 0x647 /* offset 5024 */ , - 0x635, 0x62e /* offset 5026 */ , - 0x644, 0x647 /* offset 5028 */ , - 0x646, 0x647 /* offset 5030 */ , - 0x647, 0x670 /* offset 5032 */ , - 0x64a, 0x647 /* offset 5034 */ , - 0x62b, 0x647 /* offset 5036 */ , - 0x633, 0x647 /* offset 5038 */ , - 0x634, 0x645 /* offset 5040 */ , - 0x634, 0x647 /* offset 5042 */ , - 0x640, 0x64e, 0x651 /* offset 5044 */ , - 0x640, 0x64f, 0x651 /* offset 5047 */ , - 0x640, 0x650, 0x651 /* offset 5050 */ , - 0x637, 0x649 /* offset 5053 */ , - 0x637, 0x64a /* offset 5055 */ , - 0x639, 0x649 /* offset 5057 */ , - 0x639, 0x64a /* offset 5059 */ , - 0x63a, 0x649 /* offset 5061 */ , - 0x63a, 0x64a /* offset 5063 */ , - 0x633, 0x649 /* offset 5065 */ , - 0x633, 0x64a /* offset 5067 */ , - 0x634, 0x649 /* offset 5069 */ , - 0x634, 0x64a /* offset 5071 */ , - 0x62d, 0x649 /* offset 5073 */ , - 0x62d, 0x64a /* offset 5075 */ , - 0x62c, 0x649 /* offset 5077 */ , - 0x62c, 0x64a /* offset 5079 */ , - 0x62e, 0x649 /* offset 5081 */ , - 0x62e, 0x64a /* offset 5083 */ , - 0x635, 0x649 /* offset 5085 */ , - 0x635, 0x64a /* offset 5087 */ , - 0x636, 0x649 /* offset 5089 */ , - 0x636, 0x64a /* offset 5091 */ , - 0x634, 0x62c /* offset 5093 */ , - 0x634, 0x62d /* offset 5095 */ , - 0x634, 0x62e /* offset 5097 */ , - 0x634, 0x631 /* offset 5099 */ , - 0x633, 0x631 /* offset 5101 */ , - 0x635, 0x631 /* offset 5103 */ , - 0x636, 0x631 /* offset 5105 */ , - 0x627, 0x64b /* offset 5107 */ , - 0x62a, 0x62c, 0x645 /* offset 5109 */ , - 0x62a, 0x62d, 0x62c /* offset 5112 */ , - 0x62a, 0x62d, 0x645 /* offset 5115 */ , - 0x62a, 0x62e, 0x645 /* offset 5118 */ , - 0x62a, 0x645, 0x62c /* offset 5121 */ , - 0x62a, 0x645, 0x62d /* offset 5124 */ , - 0x62a, 0x645, 0x62e /* offset 5127 */ , - 0x62c, 0x645, 0x62d /* offset 5130 */ , - 0x62d, 0x645, 0x64a /* offset 5133 */ , - 0x62d, 0x645, 0x649 /* offset 5136 */ , - 0x633, 0x62d, 0x62c /* offset 5139 */ , - 0x633, 0x62c, 0x62d /* offset 5142 */ , - 0x633, 0x62c, 0x649 /* offset 5145 */ , - 0x633, 0x645, 0x62d /* offset 5148 */ , - 0x633, 0x645, 0x62c /* offset 5151 */ , - 0x633, 0x645, 0x645 /* offset 5154 */ , - 0x635, 0x62d, 0x62d /* offset 5157 */ , - 0x635, 0x645, 0x645 /* offset 5160 */ , - 0x634, 0x62d, 0x645 /* offset 5163 */ , - 0x634, 0x62c, 0x64a /* offset 5166 */ , - 0x634, 0x645, 0x62e /* offset 5169 */ , - 0x634, 0x645, 0x645 /* offset 5172 */ , - 0x636, 0x62d, 0x649 /* offset 5175 */ , - 0x636, 0x62e, 0x645 /* offset 5178 */ , - 0x637, 0x645, 0x62d /* offset 5181 */ , - 0x637, 0x645, 0x645 /* offset 5184 */ , - 0x637, 0x645, 0x64a /* offset 5187 */ , - 0x639, 0x62c, 0x645 /* offset 5190 */ , - 0x639, 0x645, 0x645 /* offset 5193 */ , - 0x639, 0x645, 0x649 /* offset 5196 */ , - 0x63a, 0x645, 0x645 /* offset 5199 */ , - 0x63a, 0x645, 0x64a /* offset 5202 */ , - 0x63a, 0x645, 0x649 /* offset 5205 */ , - 0x641, 0x62e, 0x645 /* offset 5208 */ , - 0x642, 0x645, 0x62d /* offset 5211 */ , - 0x642, 0x645, 0x645 /* offset 5214 */ , - 0x644, 0x62d, 0x645 /* offset 5217 */ , - 0x644, 0x62d, 0x64a /* offset 5220 */ , - 0x644, 0x62d, 0x649 /* offset 5223 */ , - 0x644, 0x62c, 0x62c /* offset 5226 */ , - 0x644, 0x62e, 0x645 /* offset 5229 */ , - 0x644, 0x645, 0x62d /* offset 5232 */ , - 0x645, 0x62d, 0x62c /* offset 5235 */ , - 0x645, 0x62d, 0x645 /* offset 5238 */ , - 0x645, 0x62d, 0x64a /* offset 5241 */ , - 0x645, 0x62c, 0x62d /* offset 5244 */ , - 0x645, 0x62c, 0x645 /* offset 5247 */ , - 0x645, 0x62e, 0x62c /* offset 5250 */ , - 0x645, 0x62e, 0x645 /* offset 5253 */ , - 0x645, 0x62c, 0x62e /* offset 5256 */ , - 0x647, 0x645, 0x62c /* offset 5259 */ , - 0x647, 0x645, 0x645 /* offset 5262 */ , - 0x646, 0x62d, 0x645 /* offset 5265 */ , - 0x646, 0x62d, 0x649 /* offset 5268 */ , - 0x646, 0x62c, 0x645 /* offset 5271 */ , - 0x646, 0x62c, 0x649 /* offset 5274 */ , - 0x646, 0x645, 0x64a /* offset 5277 */ , - 0x646, 0x645, 0x649 /* offset 5280 */ , - 0x64a, 0x645, 0x645 /* offset 5283 */ , - 0x628, 0x62e, 0x64a /* offset 5286 */ , - 0x62a, 0x62c, 0x64a /* offset 5289 */ , - 0x62a, 0x62c, 0x649 /* offset 5292 */ , - 0x62a, 0x62e, 0x64a /* offset 5295 */ , - 0x62a, 0x62e, 0x649 /* offset 5298 */ , - 0x62a, 0x645, 0x64a /* offset 5301 */ , - 0x62a, 0x645, 0x649 /* offset 5304 */ , - 0x62c, 0x645, 0x64a /* offset 5307 */ , - 0x62c, 0x62d, 0x649 /* offset 5310 */ , - 0x62c, 0x645, 0x649 /* offset 5313 */ , - 0x633, 0x62e, 0x649 /* offset 5316 */ , - 0x635, 0x62d, 0x64a /* offset 5319 */ , - 0x634, 0x62d, 0x64a /* offset 5322 */ , - 0x636, 0x62d, 0x64a /* offset 5325 */ , - 0x644, 0x62c, 0x64a /* offset 5328 */ , - 0x644, 0x645, 0x64a /* offset 5331 */ , - 0x64a, 0x62d, 0x64a /* offset 5334 */ , - 0x64a, 0x62c, 0x64a /* offset 5337 */ , - 0x64a, 0x645, 0x64a /* offset 5340 */ , - 0x645, 0x645, 0x64a /* offset 5343 */ , - 0x642, 0x645, 0x64a /* offset 5346 */ , - 0x646, 0x62d, 0x64a /* offset 5349 */ , - 0x639, 0x645, 0x64a /* offset 5352 */ , - 0x643, 0x645, 0x64a /* offset 5355 */ , - 0x646, 0x62c, 0x62d /* offset 5358 */ , - 0x645, 0x62e, 0x64a /* offset 5361 */ , - 0x644, 0x62c, 0x645 /* offset 5364 */ , - 0x643, 0x645, 0x645 /* offset 5367 */ , - 0x62c, 0x62d, 0x64a /* offset 5370 */ , - 0x62d, 0x62c, 0x64a /* offset 5373 */ , - 0x645, 0x62c, 0x64a /* offset 5376 */ , - 0x641, 0x645, 0x64a /* offset 5379 */ , - 0x628, 0x62d, 0x64a /* offset 5382 */ , - 0x633, 0x62e, 0x64a /* offset 5385 */ , - 0x646, 0x62c, 0x64a /* offset 5388 */ , - 0x635, 0x644, 0x6d2 /* offset 5391 */ , - 0x642, 0x644, 0x6d2 /* offset 5394 */ , - 0x627, 0x644, 0x644, 0x647 /* offset 5397 */ , - 0x627, 0x643, 0x628, 0x631 /* offset 5401 */ , - 0x645, 0x62d, 0x645, 0x62f /* offset 5405 */ , - 0x635, 0x644, 0x639, 0x645 /* offset 5409 */ , - 0x631, 0x633, 0x648, 0x644 /* offset 5413 */ , - 0x639, 0x644, 0x64a, 0x647 /* offset 5417 */ , - 0x648, 0x633, 0x644, 0x645 /* offset 5421 */ , - 0x635, 0x644, 0x649 /* offset 5425 */ , - 0x635, 0x644, 0x649, 0x20, 0x627, 0x644, 0x644, 0x647, 0x20, 0x639, 0x644, 0x64a, 0x647, 0x20, 0x648, 0x633, 0x644, 0x645 /* offset 5428 */ , - 0x62c, 0x644, 0x20, 0x62c, 0x644, 0x627, 0x644, 0x647 /* offset 5446 */ , - 0x631, 0x6cc, 0x627, 0x644 /* offset 5454 */ , - 0x2014 /* offset 5458 */ , - 0x2013 /* offset 5459 */ , - 0x5f /* offset 5460 */ , - 0x7b /* offset 5461 */ , - 0x7d /* offset 5462 */ , - 0x3014 /* offset 5463 */ , - 0x3015 /* offset 5464 */ , - 0x3010 /* offset 5465 */ , - 0x3011 /* offset 5466 */ , - 0x300a /* offset 5467 */ , - 0x300b /* offset 5468 */ , - 0x300c /* offset 5469 */ , - 0x300d /* offset 5470 */ , - 0x300e /* offset 5471 */ , - 0x300f /* offset 5472 */ , - 0x2c /* offset 5473 */ , - 0x3001 /* offset 5474 */ , - 0x3a /* offset 5475 */ , - 0x3f /* offset 5476 */ , - 0x21 /* offset 5477 */ , - 0x23 /* offset 5478 */ , - 0x26 /* offset 5479 */ , - 0x2a /* offset 5480 */ , - 0x2d /* offset 5481 */ , - 0x3c /* offset 5482 */ , - 0x3e /* offset 5483 */ , - 0x5c /* offset 5484 */ , - 0x24 /* offset 5485 */ , - 0x25 /* offset 5486 */ , - 0x40 /* offset 5487 */ , - 0x20, 0x64b /* offset 5488 */ , - 0x640, 0x64b /* offset 5490 */ , - 0x20, 0x64c /* offset 5492 */ , - 0x20, 0x64d /* offset 5494 */ , - 0x20, 0x64e /* offset 5496 */ , - 0x640, 0x64e /* offset 5498 */ , - 0x20, 0x64f /* offset 5500 */ , - 0x640, 0x64f /* offset 5502 */ , - 0x20, 0x650 /* offset 5504 */ , - 0x640, 0x650 /* offset 5506 */ , - 0x20, 0x651 /* offset 5508 */ , - 0x640, 0x651 /* offset 5510 */ , - 0x20, 0x652 /* offset 5512 */ , - 0x640, 0x652 /* offset 5514 */ , - 0x621 /* offset 5516 */ , - 0x627 /* offset 5517 */ , - 0x628 /* offset 5518 */ , - 0x629 /* offset 5519 */ , - 0x62a /* offset 5520 */ , - 0x62b /* offset 5521 */ , - 0x62c /* offset 5522 */ , - 0x62d /* offset 5523 */ , - 0x62e /* offset 5524 */ , - 0x62f /* offset 5525 */ , - 0x630 /* offset 5526 */ , - 0x631 /* offset 5527 */ , - 0x632 /* offset 5528 */ , - 0x633 /* offset 5529 */ , - 0x634 /* offset 5530 */ , - 0x635 /* offset 5531 */ , - 0x636 /* offset 5532 */ , - 0x637 /* offset 5533 */ , - 0x638 /* offset 5534 */ , - 0x639 /* offset 5535 */ , - 0x63a /* offset 5536 */ , - 0x641 /* offset 5537 */ , - 0x642 /* offset 5538 */ , - 0x643 /* offset 5539 */ , - 0x644 /* offset 5540 */ , - 0x645 /* offset 5541 */ , - 0x646 /* offset 5542 */ , - 0x647 /* offset 5543 */ , - 0x648 /* offset 5544 */ , - 0x64a /* offset 5545 */ , - 0x644, 0x627, 0x653 /* offset 5546 */ , - 0x644, 0x627, 0x654 /* offset 5549 */ , - 0x644, 0x627, 0x655 /* offset 5552 */ , - 0x644, 0x627 /* offset 5555 */ , - 0x22 /* offset 5557 */ , - 0x27 /* offset 5558 */ , - 0x2f /* offset 5559 */ , - 0x5b /* offset 5560 */ , - 0x5d /* offset 5561 */ , - 0x5e /* offset 5562 */ , - 0x7c /* offset 5563 */ , - 0x7e /* offset 5564 */ , - 0x2985 /* offset 5565 */ , - 0x2986 /* offset 5566 */ , - 0x3002 /* offset 5567 */ , - 0x30fb /* offset 5568 */ , - 0x30a1 /* offset 5569 */ , - 0x30a3 /* offset 5570 */ , - 0x30a5 /* offset 5571 */ , - 0x30a7 /* offset 5572 */ , - 0x30a9 /* offset 5573 */ , - 0x30e3 /* offset 5574 */ , - 0x30e5 /* offset 5575 */ , - 0x30e7 /* offset 5576 */ , - 0x30c3 /* offset 5577 */ , - 0x30fc /* offset 5578 */ , - 0x30f3 /* offset 5579 */ , - 0x3099 /* offset 5580 */ , - 0x309a /* offset 5581 */ , - 0xa2 /* offset 5582 */ , - 0xa3 /* offset 5583 */ , - 0xac /* offset 5584 */ , - 0xa6 /* offset 5585 */ , - 0xa5 /* offset 5586 */ , - 0x20a9 /* offset 5587 */ , - 0x2502 /* offset 5588 */ , - 0x2190 /* offset 5589 */ , - 0x2191 /* offset 5590 */ , - 0x2192 /* offset 5591 */ , - 0x2193 /* offset 5592 */ , - 0x25a0 /* offset 5593 */ , - 0x25cb /* offset 5594 */ , - 0x1d157, 0x1d165 /* offset 5595 */ , - 0x1d158, 0x1d165 /* offset 5597 */ , - 0x1d158, 0x1d165, 0x1d16e /* offset 5599 */ , - 0x1d158, 0x1d165, 0x1d16f /* offset 5602 */ , - 0x1d158, 0x1d165, 0x1d170 /* offset 5605 */ , - 0x1d158, 0x1d165, 0x1d171 /* offset 5608 */ , - 0x1d158, 0x1d165, 0x1d172 /* offset 5611 */ , - 0x1d1b9, 0x1d165 /* offset 5614 */ , - 0x1d1ba, 0x1d165 /* offset 5616 */ , - 0x1d1b9, 0x1d165, 0x1d16e /* offset 5618 */ , - 0x1d1ba, 0x1d165, 0x1d16e /* offset 5621 */ , - 0x1d1b9, 0x1d165, 0x1d16f /* offset 5624 */ , - 0x1d1ba, 0x1d165, 0x1d16f /* offset 5627 */ , - 0x391 /* offset 5630 */ , - 0x392 /* offset 5631 */ , - 0x394 /* offset 5632 */ , - 0x395 /* offset 5633 */ , - 0x396 /* offset 5634 */ , - 0x397 /* offset 5635 */ , - 0x399 /* offset 5636 */ , - 0x39a /* offset 5637 */ , - 0x39b /* offset 5638 */ , - 0x39c /* offset 5639 */ , - 0x39d /* offset 5640 */ , - 0x39e /* offset 5641 */ , - 0x39f /* offset 5642 */ , - 0x3a1 /* offset 5643 */ , - 0x3a3 /* offset 5644 */ , - 0x3a4 /* offset 5645 */ , - 0x3a6 /* offset 5646 */ , - 0x3a7 /* offset 5647 */ , - 0x3a8 /* offset 5648 */ , - 0x2207 /* offset 5649 */ , - 0x3b1 /* offset 5650 */ , - 0x3b4 /* offset 5651 */ , - 0x3b6 /* offset 5652 */ , - 0x3b7 /* offset 5653 */ , - 0x3bb /* offset 5654 */ , - 0x3bd /* offset 5655 */ , - 0x3be /* offset 5656 */ , - 0x3bf /* offset 5657 */ , - 0x3c3 /* offset 5658 */ , - 0x3c4 /* offset 5659 */ , - 0x3c5 /* offset 5660 */ , - 0x3c7 /* offset 5661 */ , - 0x3c8 /* offset 5662 */ , - 0x3c9 /* offset 5663 */ , - 0x2202 /* offset 5664 */ , - 0x4e3d /* offset 5665 */ , - 0x4e38 /* offset 5666 */ , - 0x4e41 /* offset 5667 */ , - 0x20122 /* offset 5668 */ , - 0x4f60 /* offset 5669 */ , - 0x4fbb /* offset 5670 */ , - 0x5002 /* offset 5671 */ , - 0x507a /* offset 5672 */ , - 0x5099 /* offset 5673 */ , - 0x50cf /* offset 5674 */ , - 0x349e /* offset 5675 */ , - 0x2063a /* offset 5676 */ , - 0x5154 /* offset 5677 */ , - 0x5164 /* offset 5678 */ , - 0x5177 /* offset 5679 */ , - 0x2051c /* offset 5680 */ , - 0x34b9 /* offset 5681 */ , - 0x5167 /* offset 5682 */ , - 0x518d /* offset 5683 */ , - 0x2054b /* offset 5684 */ , - 0x5197 /* offset 5685 */ , - 0x51a4 /* offset 5686 */ , - 0x4ecc /* offset 5687 */ , - 0x51ac /* offset 5688 */ , - 0x51b5 /* offset 5689 */ , - 0x291df /* offset 5690 */ , - 0x5203 /* offset 5691 */ , - 0x34df /* offset 5692 */ , - 0x523b /* offset 5693 */ , - 0x5246 /* offset 5694 */ , - 0x5272 /* offset 5695 */ , - 0x5277 /* offset 5696 */ , - 0x3515 /* offset 5697 */ , - 0x52c7 /* offset 5698 */ , - 0x52fa /* offset 5699 */ , - 0x5305 /* offset 5700 */ , - 0x5306 /* offset 5701 */ , - 0x5349 /* offset 5702 */ , - 0x535a /* offset 5703 */ , - 0x5373 /* offset 5704 */ , - 0x537d /* offset 5705 */ , - 0x537f /* offset 5706 */ , - 0x20a2c /* offset 5707 */ , - 0x7070 /* offset 5708 */ , - 0x53ca /* offset 5709 */ , - 0x53df /* offset 5710 */ , - 0x20b63 /* offset 5711 */ , - 0x53eb /* offset 5712 */ , - 0x53f1 /* offset 5713 */ , - 0x5406 /* offset 5714 */ , - 0x549e /* offset 5715 */ , - 0x5438 /* offset 5716 */ , - 0x5448 /* offset 5717 */ , - 0x5468 /* offset 5718 */ , - 0x54a2 /* offset 5719 */ , - 0x54f6 /* offset 5720 */ , - 0x5510 /* offset 5721 */ , - 0x5553 /* offset 5722 */ , - 0x5563 /* offset 5723 */ , - 0x5584 /* offset 5724 */ , - 0x5599 /* offset 5725 */ , - 0x55ab /* offset 5726 */ , - 0x55b3 /* offset 5727 */ , - 0x55c2 /* offset 5728 */ , - 0x5716 /* offset 5729 */ , - 0x5717 /* offset 5730 */ , - 0x5651 /* offset 5731 */ , - 0x5674 /* offset 5732 */ , - 0x58ee /* offset 5733 */ , - 0x57ce /* offset 5734 */ , - 0x57f4 /* offset 5735 */ , - 0x580d /* offset 5736 */ , - 0x578b /* offset 5737 */ , - 0x5832 /* offset 5738 */ , - 0x5831 /* offset 5739 */ , - 0x58ac /* offset 5740 */ , - 0x214e4 /* offset 5741 */ , - 0x58f2 /* offset 5742 */ , - 0x58f7 /* offset 5743 */ , - 0x5906 /* offset 5744 */ , - 0x591a /* offset 5745 */ , - 0x5922 /* offset 5746 */ , - 0x5962 /* offset 5747 */ , - 0x216a8 /* offset 5748 */ , - 0x216ea /* offset 5749 */ , - 0x59ec /* offset 5750 */ , - 0x5a1b /* offset 5751 */ , - 0x5a27 /* offset 5752 */ , - 0x59d8 /* offset 5753 */ , - 0x5a66 /* offset 5754 */ , - 0x36ee /* offset 5755 */ , - 0x2136a /* offset 5756 */ , - 0x5b08 /* offset 5757 */ , - 0x5b3e /* offset 5758 */ , - 0x219c8 /* offset 5759 */ , - 0x5bc3 /* offset 5760 */ , - 0x5bd8 /* offset 5761 */ , - 0x5bf3 /* offset 5762 */ , - 0x21b18 /* offset 5763 */ , - 0x5bff /* offset 5764 */ , - 0x5c06 /* offset 5765 */ , - 0x5f33 /* offset 5766 */ , - 0x3781 /* offset 5767 */ , - 0x5c60 /* offset 5768 */ , - 0x5cc0 /* offset 5769 */ , - 0x5c8d /* offset 5770 */ , - 0x21de4 /* offset 5771 */ , - 0x5d43 /* offset 5772 */ , - 0x21de6 /* offset 5773 */ , - 0x5d6e /* offset 5774 */ , - 0x5d6b /* offset 5775 */ , - 0x5d7c /* offset 5776 */ , - 0x5de1 /* offset 5777 */ , - 0x5de2 /* offset 5778 */ , - 0x382f /* offset 5779 */ , - 0x5dfd /* offset 5780 */ , - 0x5e28 /* offset 5781 */ , - 0x5e3d /* offset 5782 */ , - 0x5e69 /* offset 5783 */ , - 0x3862 /* offset 5784 */ , - 0x22183 /* offset 5785 */ , - 0x387c /* offset 5786 */ , - 0x5eb0 /* offset 5787 */ , - 0x5eb3 /* offset 5788 */ , - 0x5eb6 /* offset 5789 */ , - 0x2a392 /* offset 5790 */ , - 0x22331 /* offset 5791 */ , - 0x8201 /* offset 5792 */ , - 0x5f22 /* offset 5793 */ , - 0x38c7 /* offset 5794 */ , - 0x232b8 /* offset 5795 */ , - 0x261da /* offset 5796 */ , - 0x5f62 /* offset 5797 */ , - 0x5f6b /* offset 5798 */ , - 0x38e3 /* offset 5799 */ , - 0x5f9a /* offset 5800 */ , - 0x5fcd /* offset 5801 */ , - 0x5fd7 /* offset 5802 */ , - 0x5ff9 /* offset 5803 */ , - 0x6081 /* offset 5804 */ , - 0x393a /* offset 5805 */ , - 0x391c /* offset 5806 */ , - 0x226d4 /* offset 5807 */ , - 0x60c7 /* offset 5808 */ , - 0x6148 /* offset 5809 */ , - 0x614c /* offset 5810 */ , - 0x614e /* offset 5811 */ , - 0x617a /* offset 5812 */ , - 0x61b2 /* offset 5813 */ , - 0x61a4 /* offset 5814 */ , - 0x61af /* offset 5815 */ , - 0x61de /* offset 5816 */ , - 0x6210 /* offset 5817 */ , - 0x621b /* offset 5818 */ , - 0x625d /* offset 5819 */ , - 0x62b1 /* offset 5820 */ , - 0x62d4 /* offset 5821 */ , - 0x6350 /* offset 5822 */ , - 0x22b0c /* offset 5823 */ , - 0x633d /* offset 5824 */ , - 0x62fc /* offset 5825 */ , - 0x6368 /* offset 5826 */ , - 0x6383 /* offset 5827 */ , - 0x63e4 /* offset 5828 */ , - 0x22bf1 /* offset 5829 */ , - 0x6422 /* offset 5830 */ , - 0x63c5 /* offset 5831 */ , - 0x63a9 /* offset 5832 */ , - 0x3a2e /* offset 5833 */ , - 0x6469 /* offset 5834 */ , - 0x647e /* offset 5835 */ , - 0x649d /* offset 5836 */ , - 0x6477 /* offset 5837 */ , - 0x3a6c /* offset 5838 */ , - 0x656c /* offset 5839 */ , - 0x2300a /* offset 5840 */ , - 0x65e3 /* offset 5841 */ , - 0x66f8 /* offset 5842 */ , - 0x6649 /* offset 5843 */ , - 0x3b19 /* offset 5844 */ , - 0x3b08 /* offset 5845 */ , - 0x3ae4 /* offset 5846 */ , - 0x5192 /* offset 5847 */ , - 0x5195 /* offset 5848 */ , - 0x6700 /* offset 5849 */ , - 0x669c /* offset 5850 */ , - 0x80ad /* offset 5851 */ , - 0x43d9 /* offset 5852 */ , - 0x671b /* offset 5853 */ , - 0x6721 /* offset 5854 */ , - 0x675e /* offset 5855 */ , - 0x6753 /* offset 5856 */ , - 0x233c3 /* offset 5857 */ , - 0x3b49 /* offset 5858 */ , - 0x67fa /* offset 5859 */ , - 0x6785 /* offset 5860 */ , - 0x6852 /* offset 5861 */ , - 0x2346d /* offset 5862 */ , - 0x688e /* offset 5863 */ , - 0x681f /* offset 5864 */ , - 0x6914 /* offset 5865 */ , - 0x3b9d /* offset 5866 */ , - 0x6942 /* offset 5867 */ , - 0x69a3 /* offset 5868 */ , - 0x69ea /* offset 5869 */ , - 0x6aa8 /* offset 5870 */ , - 0x236a3 /* offset 5871 */ , - 0x6adb /* offset 5872 */ , - 0x3c18 /* offset 5873 */ , - 0x6b21 /* offset 5874 */ , - 0x238a7 /* offset 5875 */ , - 0x6b54 /* offset 5876 */ , - 0x3c4e /* offset 5877 */ , - 0x6b72 /* offset 5878 */ , - 0x6b9f /* offset 5879 */ , - 0x6bbb /* offset 5880 */ , - 0x23a8d /* offset 5881 */ , - 0x21d0b /* offset 5882 */ , - 0x23afa /* offset 5883 */ , - 0x6c4e /* offset 5884 */ , - 0x23cbc /* offset 5885 */ , - 0x6cbf /* offset 5886 */ , - 0x6ccd /* offset 5887 */ , - 0x6c67 /* offset 5888 */ , - 0x6d16 /* offset 5889 */ , - 0x6d3e /* offset 5890 */ , - 0x6d69 /* offset 5891 */ , - 0x6d78 /* offset 5892 */ , - 0x6d85 /* offset 5893 */ , - 0x23d1e /* offset 5894 */ , - 0x6d34 /* offset 5895 */ , - 0x6e2f /* offset 5896 */ , - 0x6e6e /* offset 5897 */ , - 0x3d33 /* offset 5898 */ , - 0x6ecb /* offset 5899 */ , - 0x6ec7 /* offset 5900 */ , - 0x23ed1 /* offset 5901 */ , - 0x6df9 /* offset 5902 */ , - 0x6f6e /* offset 5903 */ , - 0x23f5e /* offset 5904 */ , - 0x23f8e /* offset 5905 */ , - 0x6fc6 /* offset 5906 */ , - 0x7039 /* offset 5907 */ , - 0x701e /* offset 5908 */ , - 0x701b /* offset 5909 */ , - 0x3d96 /* offset 5910 */ , - 0x704a /* offset 5911 */ , - 0x707d /* offset 5912 */ , - 0x7077 /* offset 5913 */ , - 0x70ad /* offset 5914 */ , - 0x20525 /* offset 5915 */ , - 0x7145 /* offset 5916 */ , - 0x24263 /* offset 5917 */ , - 0x719c /* offset 5918 */ , - 0x43ab /* offset 5919 */ , - 0x7228 /* offset 5920 */ , - 0x7235 /* offset 5921 */ , - 0x7250 /* offset 5922 */ , - 0x24608 /* offset 5923 */ , - 0x7280 /* offset 5924 */ , - 0x7295 /* offset 5925 */ , - 0x24735 /* offset 5926 */ , - 0x24814 /* offset 5927 */ , - 0x737a /* offset 5928 */ , - 0x738b /* offset 5929 */ , - 0x3eac /* offset 5930 */ , - 0x73a5 /* offset 5931 */ , - 0x3eb8 /* offset 5932 */ , - 0x7447 /* offset 5933 */ , - 0x745c /* offset 5934 */ , - 0x7471 /* offset 5935 */ , - 0x7485 /* offset 5936 */ , - 0x74ca /* offset 5937 */ , - 0x3f1b /* offset 5938 */ , - 0x7524 /* offset 5939 */ , - 0x24c36 /* offset 5940 */ , - 0x753e /* offset 5941 */ , - 0x24c92 /* offset 5942 */ , - 0x2219f /* offset 5943 */ , - 0x7610 /* offset 5944 */ , - 0x24fa1 /* offset 5945 */ , - 0x24fb8 /* offset 5946 */ , - 0x25044 /* offset 5947 */ , - 0x3ffc /* offset 5948 */ , - 0x4008 /* offset 5949 */ , - 0x76f4 /* offset 5950 */ , - 0x250f3 /* offset 5951 */ , - 0x250f2 /* offset 5952 */ , - 0x25119 /* offset 5953 */ , - 0x25133 /* offset 5954 */ , - 0x771e /* offset 5955 */ , - 0x771f /* offset 5956 */ , - 0x774a /* offset 5957 */ , - 0x4039 /* offset 5958 */ , - 0x778b /* offset 5959 */ , - 0x4046 /* offset 5960 */ , - 0x4096 /* offset 5961 */ , - 0x2541d /* offset 5962 */ , - 0x784e /* offset 5963 */ , - 0x78cc /* offset 5964 */ , - 0x40e3 /* offset 5965 */ , - 0x25626 /* offset 5966 */ , - 0x2569a /* offset 5967 */ , - 0x256c5 /* offset 5968 */ , - 0x79eb /* offset 5969 */ , - 0x412f /* offset 5970 */ , - 0x7a4a /* offset 5971 */ , - 0x7a4f /* offset 5972 */ , - 0x2597c /* offset 5973 */ , - 0x25aa7 /* offset 5974 */ , - 0x7aae /* offset 5975 */ , - 0x4202 /* offset 5976 */ , - 0x25bab /* offset 5977 */ , - 0x7bc6 /* offset 5978 */ , - 0x7bc9 /* offset 5979 */ , - 0x4227 /* offset 5980 */ , - 0x25c80 /* offset 5981 */ , - 0x7cd2 /* offset 5982 */ , - 0x42a0 /* offset 5983 */ , - 0x7ce8 /* offset 5984 */ , - 0x7ce3 /* offset 5985 */ , - 0x7d00 /* offset 5986 */ , - 0x25f86 /* offset 5987 */ , - 0x7d63 /* offset 5988 */ , - 0x4301 /* offset 5989 */ , - 0x7dc7 /* offset 5990 */ , - 0x7e02 /* offset 5991 */ , - 0x7e45 /* offset 5992 */ , - 0x4334 /* offset 5993 */ , - 0x26228 /* offset 5994 */ , - 0x26247 /* offset 5995 */ , - 0x4359 /* offset 5996 */ , - 0x262d9 /* offset 5997 */ , - 0x7f7a /* offset 5998 */ , - 0x2633e /* offset 5999 */ , - 0x7f95 /* offset 6000 */ , - 0x7ffa /* offset 6001 */ , - 0x264da /* offset 6002 */ , - 0x26523 /* offset 6003 */ , - 0x8060 /* offset 6004 */ , - 0x265a8 /* offset 6005 */ , - 0x8070 /* offset 6006 */ , - 0x2335f /* offset 6007 */ , - 0x43d5 /* offset 6008 */ , - 0x80b2 /* offset 6009 */ , - 0x8103 /* offset 6010 */ , - 0x440b /* offset 6011 */ , - 0x813e /* offset 6012 */ , - 0x5ab5 /* offset 6013 */ , - 0x267a7 /* offset 6014 */ , - 0x267b5 /* offset 6015 */ , - 0x23393 /* offset 6016 */ , - 0x2339c /* offset 6017 */ , - 0x8204 /* offset 6018 */ , - 0x8f9e /* offset 6019 */ , - 0x446b /* offset 6020 */ , - 0x8291 /* offset 6021 */ , - 0x828b /* offset 6022 */ , - 0x829d /* offset 6023 */ , - 0x52b3 /* offset 6024 */ , - 0x82b1 /* offset 6025 */ , - 0x82b3 /* offset 6026 */ , - 0x82bd /* offset 6027 */ , - 0x82e6 /* offset 6028 */ , - 0x26b3c /* offset 6029 */ , - 0x831d /* offset 6030 */ , - 0x8363 /* offset 6031 */ , - 0x83ad /* offset 6032 */ , - 0x8323 /* offset 6033 */ , - 0x83bd /* offset 6034 */ , - 0x83e7 /* offset 6035 */ , - 0x8353 /* offset 6036 */ , - 0x83ca /* offset 6037 */ , - 0x83cc /* offset 6038 */ , - 0x83dc /* offset 6039 */ , - 0x26c36 /* offset 6040 */ , - 0x26d6b /* offset 6041 */ , - 0x26cd5 /* offset 6042 */ , - 0x452b /* offset 6043 */ , - 0x84f1 /* offset 6044 */ , - 0x84f3 /* offset 6045 */ , - 0x8516 /* offset 6046 */ , - 0x273ca /* offset 6047 */ , - 0x8564 /* offset 6048 */ , - 0x26f2c /* offset 6049 */ , - 0x455d /* offset 6050 */ , - 0x4561 /* offset 6051 */ , - 0x26fb1 /* offset 6052 */ , - 0x270d2 /* offset 6053 */ , - 0x456b /* offset 6054 */ , - 0x8650 /* offset 6055 */ , - 0x8667 /* offset 6056 */ , - 0x8669 /* offset 6057 */ , - 0x86a9 /* offset 6058 */ , - 0x8688 /* offset 6059 */ , - 0x870e /* offset 6060 */ , - 0x86e2 /* offset 6061 */ , - 0x8779 /* offset 6062 */ , - 0x8728 /* offset 6063 */ , - 0x876b /* offset 6064 */ , - 0x8786 /* offset 6065 */ , - 0x4d57 /* offset 6066 */ , - 0x87e1 /* offset 6067 */ , - 0x8801 /* offset 6068 */ , - 0x45f9 /* offset 6069 */ , - 0x8860 /* offset 6070 */ , - 0x27667 /* offset 6071 */ , - 0x88d7 /* offset 6072 */ , - 0x88de /* offset 6073 */ , - 0x4635 /* offset 6074 */ , - 0x88fa /* offset 6075 */ , - 0x34bb /* offset 6076 */ , - 0x278ae /* offset 6077 */ , - 0x27966 /* offset 6078 */ , - 0x46be /* offset 6079 */ , - 0x46c7 /* offset 6080 */ , - 0x8aa0 /* offset 6081 */ , - 0x8aed /* offset 6082 */ , - 0x8b8a /* offset 6083 */ , - 0x27ca8 /* offset 6084 */ , - 0x8cab /* offset 6085 */ , - 0x8cc1 /* offset 6086 */ , - 0x8d1b /* offset 6087 */ , - 0x8d77 /* offset 6088 */ , - 0x27f2f /* offset 6089 */ , - 0x20804 /* offset 6090 */ , - 0x8dcb /* offset 6091 */ , - 0x8dbc /* offset 6092 */ , - 0x8df0 /* offset 6093 */ , - 0x208de /* offset 6094 */ , - 0x8ed4 /* offset 6095 */ , - 0x8f38 /* offset 6096 */ , - 0x285d2 /* offset 6097 */ , - 0x285ed /* offset 6098 */ , - 0x9094 /* offset 6099 */ , - 0x90f1 /* offset 6100 */ , - 0x9111 /* offset 6101 */ , - 0x2872e /* offset 6102 */ , - 0x911b /* offset 6103 */ , - 0x9238 /* offset 6104 */ , - 0x92d7 /* offset 6105 */ , - 0x92d8 /* offset 6106 */ , - 0x927c /* offset 6107 */ , - 0x93f9 /* offset 6108 */ , - 0x9415 /* offset 6109 */ , - 0x28bfa /* offset 6110 */ , - 0x958b /* offset 6111 */ , - 0x4995 /* offset 6112 */ , - 0x95b7 /* offset 6113 */ , - 0x28d77 /* offset 6114 */ , - 0x49e6 /* offset 6115 */ , - 0x96c3 /* offset 6116 */ , - 0x5db2 /* offset 6117 */ , - 0x9723 /* offset 6118 */ , - 0x29145 /* offset 6119 */ , - 0x2921a /* offset 6120 */ , - 0x4a6e /* offset 6121 */ , - 0x4a76 /* offset 6122 */ , - 0x97e0 /* offset 6123 */ , - 0x2940a /* offset 6124 */ , - 0x4ab2 /* offset 6125 */ , - 0x29496 /* offset 6126 */ , - 0x980b /* offset 6127 */ , - 0x9829 /* offset 6128 */ , - 0x295b6 /* offset 6129 */ , - 0x98e2 /* offset 6130 */ , - 0x4b33 /* offset 6131 */ , - 0x9929 /* offset 6132 */ , - 0x99a7 /* offset 6133 */ , - 0x99c2 /* offset 6134 */ , - 0x99fe /* offset 6135 */ , - 0x4bce /* offset 6136 */ , - 0x29b30 /* offset 6137 */ , - 0x9b12 /* offset 6138 */ , - 0x9c40 /* offset 6139 */ , - 0x9cfd /* offset 6140 */ , - 0x4cce /* offset 6141 */ , - 0x4ced /* offset 6142 */ , - 0x9d67 /* offset 6143 */ , - 0x2a0ce /* offset 6144 */ , - 0x4cf8 /* offset 6145 */ , - 0x2a105 /* offset 6146 */ , - 0x2a20e /* offset 6147 */ , - 0x2a291 /* offset 6148 */ , - 0x4d56 /* offset 6149 */ , - 0x9efe /* offset 6150 */ , - 0x9f05 /* offset 6151 */ , - 0x9f0f /* offset 6152 */ , - 0x9f16 /* offset 6153 */ , - 0x2a600 /* offset 6154 */ -}; - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeMap.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeMap.cc deleted file mode 100644 index fda0758bc00..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeMap.cc +++ /dev/null @@ -1,308 +0,0 @@ -//======================================================================== -// -// UnicodeMap.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2010 Jakub Wilk <ubanus@users.sf.net> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdio.h> -#include <string.h> -#include "goo/gmem.h" -#include "goo/gfile.h" -#include "goo/GooString.h" -#include "goo/GooList.h" -#include "Error.h" -#include "GlobalParams.h" -#include "UnicodeMap.h" - -//------------------------------------------------------------------------ - -#define maxExtCode 16 - -struct UnicodeMapExt { - Unicode u; // Unicode char - char code[maxExtCode]; - Guint nBytes; -}; - -//------------------------------------------------------------------------ - -UnicodeMap *UnicodeMap::parse(GooString *encodingNameA) { - FILE *f; - UnicodeMap *map; - UnicodeMapRange *range; - UnicodeMapExt *eMap; - int size, eMapsSize; - char buf[256]; - int line, nBytes, i, x; - char *tok1, *tok2, *tok3; - char *tokptr; - - if (!(f = globalParams->getUnicodeMapFile(encodingNameA))) { - error(-1, "Couldn't find unicodeMap file for the '%s' encoding", - encodingNameA->getCString()); - return NULL; - } - - map = new UnicodeMap(encodingNameA->copy()); - - size = 8; - map->ranges = (UnicodeMapRange *)gmallocn(size, sizeof(UnicodeMapRange)); - eMapsSize = 0; - - line = 1; - while (getLine(buf, sizeof(buf), f)) { - if ((tok1 = strtok_r(buf, " \t\r\n", &tokptr)) && - (tok2 = strtok_r(NULL, " \t\r\n", &tokptr))) { - if (!(tok3 = strtok_r(NULL, " \t\r\n", &tokptr))) { - tok3 = tok2; - tok2 = tok1; - } - nBytes = strlen(tok3) / 2; - if (nBytes <= 4) { - if (map->len == size) { - size *= 2; - map->ranges = (UnicodeMapRange *) - greallocn(map->ranges, size, sizeof(UnicodeMapRange)); - } - range = &map->ranges[map->len]; - sscanf(tok1, "%x", &range->start); - sscanf(tok2, "%x", &range->end); - sscanf(tok3, "%x", &range->code); - range->nBytes = nBytes; - ++map->len; - } else if (tok2 == tok1) { - if (map->eMapsLen == eMapsSize) { - eMapsSize += 16; - map->eMaps = (UnicodeMapExt *) - greallocn(map->eMaps, eMapsSize, sizeof(UnicodeMapExt)); - } - eMap = &map->eMaps[map->eMapsLen]; - sscanf(tok1, "%x", &eMap->u); - for (i = 0; i < nBytes; ++i) { - sscanf(tok3 + i*2, "%2x", &x); - eMap->code[i] = (char)x; - } - eMap->nBytes = nBytes; - ++map->eMapsLen; - } else { - error(-1, "Bad line (%d) in unicodeMap file for the '%s' encoding", - line, encodingNameA->getCString()); - } - } else { - error(-1, "Bad line (%d) in unicodeMap file for the '%s' encoding", - line, encodingNameA->getCString()); - } - ++line; - } - - fclose(f); - - return map; -} - -UnicodeMap::UnicodeMap(GooString *encodingNameA) { - encodingName = encodingNameA; - unicodeOut = gFalse; - kind = unicodeMapUser; - ranges = NULL; - len = 0; - eMaps = NULL; - eMapsLen = 0; - refCnt = 1; -#if MULTITHREADED - gInitMutex(&mutex); -#endif -} - -UnicodeMap::UnicodeMap(char *encodingNameA, GBool unicodeOutA, - UnicodeMapRange *rangesA, int lenA) { - encodingName = new GooString(encodingNameA); - unicodeOut = unicodeOutA; - kind = unicodeMapResident; - ranges = rangesA; - len = lenA; - eMaps = NULL; - eMapsLen = 0; - refCnt = 1; -#if MULTITHREADED - gInitMutex(&mutex); -#endif -} - -UnicodeMap::UnicodeMap(char *encodingNameA, GBool unicodeOutA, - UnicodeMapFunc funcA) { - encodingName = new GooString(encodingNameA); - unicodeOut = unicodeOutA; - kind = unicodeMapFunc; - func = funcA; - eMaps = NULL; - eMapsLen = 0; - refCnt = 1; -#if MULTITHREADED - gInitMutex(&mutex); -#endif -} - -UnicodeMap::~UnicodeMap() { - delete encodingName; - if (kind == unicodeMapUser && ranges) { - gfree(ranges); - } - if (eMaps) { - gfree(eMaps); - } -#if MULTITHREADED - gDestroyMutex(&mutex); -#endif -} - -void UnicodeMap::incRefCnt() { -#if MULTITHREADED - gLockMutex(&mutex); -#endif - ++refCnt; -#if MULTITHREADED - gUnlockMutex(&mutex); -#endif -} - -void UnicodeMap::decRefCnt() { - GBool done; - -#if MULTITHREADED - gLockMutex(&mutex); -#endif - done = --refCnt == 0; -#if MULTITHREADED - gUnlockMutex(&mutex); -#endif - if (done) { - delete this; - } -} - -GBool UnicodeMap::match(GooString *encodingNameA) { - return !encodingName->cmp(encodingNameA); -} - -int UnicodeMap::mapUnicode(Unicode u, char *buf, int bufSize) { - int a, b, m, n, i, j; - Guint code; - - if (kind == unicodeMapFunc) { - return (*func)(u, buf, bufSize); - } - - a = 0; - b = len; - if (u >= ranges[a].start) { - // invariant: ranges[a].start <= u < ranges[b].start - while (b - a > 1) { - m = (a + b) / 2; - if (u >= ranges[m].start) { - a = m; - } else if (u < ranges[m].start) { - b = m; - } - } - if (u <= ranges[a].end) { - n = ranges[a].nBytes; - if (n > bufSize) { - return 0; - } - code = ranges[a].code + (u - ranges[a].start); - for (i = n - 1; i >= 0; --i) { - buf[i] = (char)(code & 0xff); - code >>= 8; - } - return n; - } - } - - for (i = 0; i < eMapsLen; ++i) { - if (eMaps[i].u == u) { - n = eMaps[i].nBytes; - for (j = 0; j < n; ++j) { - buf[j] = eMaps[i].code[j]; - } - return n; - } - } - - return 0; -} - -//------------------------------------------------------------------------ - -UnicodeMapCache::UnicodeMapCache() { - int i; - - for (i = 0; i < unicodeMapCacheSize; ++i) { - cache[i] = NULL; - } -} - -UnicodeMapCache::~UnicodeMapCache() { - int i; - - for (i = 0; i < unicodeMapCacheSize; ++i) { - if (cache[i]) { - cache[i]->decRefCnt(); - } - } -} - -UnicodeMap *UnicodeMapCache::getUnicodeMap(GooString *encodingName) { - UnicodeMap *map; - int i, j; - - if (cache[0] && cache[0]->match(encodingName)) { - cache[0]->incRefCnt(); - return cache[0]; - } - for (i = 1; i < unicodeMapCacheSize; ++i) { - if (cache[i] && cache[i]->match(encodingName)) { - map = cache[i]; - for (j = i; j >= 1; --j) { - cache[j] = cache[j - 1]; - } - cache[0] = map; - map->incRefCnt(); - return map; - } - } - if ((map = UnicodeMap::parse(encodingName))) { - if (cache[unicodeMapCacheSize - 1]) { - cache[unicodeMapCacheSize - 1]->decRefCnt(); - } - for (j = unicodeMapCacheSize - 1; j >= 1; --j) { - cache[j] = cache[j - 1]; - } - cache[0] = map; - map->incRefCnt(); - return map; - } - return NULL; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeMap.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeMap.h deleted file mode 100644 index 6f031634e03..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeMap.h +++ /dev/null @@ -1,122 +0,0 @@ -//======================================================================== -// -// UnicodeMap.h -// -// Mapping from Unicode to an encoding. -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef UNICODEMAP_H -#define UNICODEMAP_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "poppler-config.h" -#include "goo/gtypes.h" -#include "CharTypes.h" - -#if MULTITHREADED -#include "goo/GooMutex.h" -#endif - -class GooString; - -//------------------------------------------------------------------------ - -enum UnicodeMapKind { - unicodeMapUser, // read from a file - unicodeMapResident, // static list of ranges - unicodeMapFunc // function pointer -}; - -typedef int (*UnicodeMapFunc)(Unicode u, char *buf, int bufSize); - -struct UnicodeMapRange { - Unicode start, end; // range of Unicode chars - Guint code, nBytes; // first output code -}; - -struct UnicodeMapExt; - -//------------------------------------------------------------------------ - -class UnicodeMap { -public: - - // Create the UnicodeMap specified by <encodingName>. Sets the - // initial reference count to 1. Returns NULL on failure. - static UnicodeMap *parse(GooString *encodingNameA); - - // Create a resident UnicodeMap. - UnicodeMap(char *encodingNameA, GBool unicodeOutA, - UnicodeMapRange *rangesA, int lenA); - - // Create a resident UnicodeMap that uses a function instead of a - // list of ranges. - UnicodeMap(char *encodingNameA, GBool unicodeOutA, - UnicodeMapFunc funcA); - - ~UnicodeMap(); - - void incRefCnt(); - void decRefCnt(); - - GooString *getEncodingName() { return encodingName; } - - GBool isUnicode() { return unicodeOut; } - - // Return true if this UnicodeMap matches the specified - // <encodingNameA>. - GBool match(GooString *encodingNameA); - - // Map Unicode to the target encoding. Fills in <buf> with the - // output and returns the number of bytes used. Output will be - // truncated at <bufSize> bytes. No string terminator is written. - // Returns 0 if no mapping is found. - int mapUnicode(Unicode u, char *buf, int bufSize); - -private: - - UnicodeMap(GooString *encodingNameA); - - GooString *encodingName; - UnicodeMapKind kind; - GBool unicodeOut; - union { - UnicodeMapRange *ranges; // (user, resident) - UnicodeMapFunc func; // (func) - }; - int len; // (user, resident) - UnicodeMapExt *eMaps; // (user) - int eMapsLen; // (user) - int refCnt; -#if MULTITHREADED - GooMutex mutex; -#endif -}; - -//------------------------------------------------------------------------ - -#define unicodeMapCacheSize 4 - -class UnicodeMapCache { -public: - - UnicodeMapCache(); - ~UnicodeMapCache(); - - // Get the UnicodeMap for <encodingName>. Increments its reference - // count; there will be one reference for the cache plus one for the - // caller of this function. Returns NULL on failure. - UnicodeMap *getUnicodeMap(GooString *encodingName); - -private: - - UnicodeMap *cache[unicodeMapCacheSize]; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeMapTables.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeMapTables.h deleted file mode 100644 index 9c510346164..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeMapTables.h +++ /dev/null @@ -1,361 +0,0 @@ -//======================================================================== -// -// UnicodeMapTables.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -static UnicodeMapRange latin1UnicodeMapRanges[] = { - { 0x000a, 0x000a, 0x0a, 1 }, - { 0x000c, 0x000d, 0x0c, 1 }, - { 0x0020, 0x007e, 0x20, 1 }, - { 0x00a0, 0x00a0, 0x20, 1 }, - { 0x00a1, 0x00ac, 0xa1, 1 }, - { 0x00ae, 0x00ff, 0xae, 1 }, - { 0x010c, 0x010c, 0x43, 1 }, - { 0x010d, 0x010d, 0x63, 1 }, - { 0x0131, 0x0131, 0x69, 1 }, - { 0x0141, 0x0141, 0x4c, 1 }, - { 0x0142, 0x0142, 0x6c, 1 }, - { 0x0152, 0x0152, 0x4f45, 2 }, - { 0x0153, 0x0153, 0x6f65, 2 }, - { 0x0160, 0x0160, 0x53, 1 }, - { 0x0161, 0x0161, 0x73, 1 }, - { 0x0178, 0x0178, 0x59, 1 }, - { 0x017d, 0x017d, 0x5a, 1 }, - { 0x017e, 0x017e, 0x7a, 1 }, - { 0x02c6, 0x02c6, 0x5e, 1 }, - { 0x02da, 0x02da, 0xb0, 1 }, - { 0x02dc, 0x02dc, 0x7e, 1 }, - { 0x2013, 0x2013, 0xad, 1 }, - { 0x2014, 0x2014, 0x2d2d, 2 }, - { 0x2018, 0x2018, 0x60, 1 }, - { 0x2019, 0x2019, 0x27, 1 }, - { 0x201a, 0x201a, 0x2c, 1 }, - { 0x201c, 0x201c, 0x22, 1 }, - { 0x201d, 0x201d, 0x22, 1 }, - { 0x201e, 0x201e, 0x2c2c, 2 }, - { 0x2022, 0x2022, 0xb7, 1 }, - { 0x2026, 0x2026, 0x2e2e2e, 3 }, - { 0x2039, 0x2039, 0x3c, 1 }, - { 0x203a, 0x203a, 0x3e, 1 }, - { 0x2044, 0x2044, 0x2f, 1 }, - { 0x2122, 0x2122, 0x544d, 2 }, - { 0x2212, 0x2212, 0x2d, 1 }, - { 0xf6f9, 0xf6f9, 0x4c, 1 }, - { 0xf6fa, 0xf6fa, 0x4f45, 2 }, - { 0xf6fc, 0xf6fc, 0xb0, 1 }, - { 0xf6fd, 0xf6fd, 0x53, 1 }, - { 0xf6fe, 0xf6fe, 0x7e, 1 }, - { 0xf6ff, 0xf6ff, 0x5a, 1 }, - { 0xf721, 0xf721, 0x21, 1 }, - { 0xf724, 0xf724, 0x24, 1 }, - { 0xf726, 0xf726, 0x26, 1 }, - { 0xf730, 0xf739, 0x30, 1 }, - { 0xf73f, 0xf73f, 0x3f, 1 }, - { 0xf761, 0xf77a, 0x41, 1 }, - { 0xf7a1, 0xf7a2, 0xa1, 1 }, - { 0xf7bf, 0xf7bf, 0xbf, 1 }, - { 0xf7e0, 0xf7f6, 0xc0, 1 }, - { 0xf7f8, 0xf7fe, 0xd8, 1 }, - { 0xf7ff, 0xf7ff, 0x59, 1 }, - { 0xfb00, 0xfb00, 0x6666, 2 }, - { 0xfb01, 0xfb01, 0x6669, 2 }, - { 0xfb02, 0xfb02, 0x666c, 2 }, - { 0xfb03, 0xfb03, 0x666669, 3 }, - { 0xfb04, 0xfb04, 0x66666c, 3 } -}; -#define latin1UnicodeMapLen (sizeof(latin1UnicodeMapRanges) / sizeof(UnicodeMapRange)) - -static UnicodeMapRange ascii7UnicodeMapRanges[] = { - { 0x000a, 0x000a, 0x0a, 1 }, - { 0x000c, 0x000d, 0x0c, 1 }, - { 0x0020, 0x005f, 0x20, 1 }, - { 0x0061, 0x007e, 0x61, 1 }, - { 0x00a6, 0x00a6, 0x7c, 1 }, - { 0x00a9, 0x00a9, 0x286329, 3 }, - { 0x00ae, 0x00ae, 0x285229, 3 }, - { 0x00b7, 0x00b7, 0x2a, 1 }, - { 0x00bc, 0x00bc, 0x312f34, 3 }, - { 0x00bd, 0x00bd, 0x312f32, 3 }, - { 0x00be, 0x00be, 0x332f34, 3 }, - { 0x00c0, 0x00c0, 0x41, 1 }, - { 0x00c1, 0x00c1, 0x41, 1 }, - { 0x00c2, 0x00c2, 0x41, 1 }, - { 0x00c3, 0x00c3, 0x41, 1 }, - { 0x00c4, 0x00c4, 0x41, 1 }, - { 0x00c5, 0x00c5, 0x41, 1 }, - { 0x00c6, 0x00c6, 0x4145, 2 }, - { 0x00c7, 0x00c7, 0x43, 1 }, - { 0x00c8, 0x00c8, 0x45, 1 }, - { 0x00c9, 0x00c9, 0x45, 1 }, - { 0x00ca, 0x00ca, 0x45, 1 }, - { 0x00cb, 0x00cb, 0x45, 1 }, - { 0x00cc, 0x00cc, 0x49, 1 }, - { 0x00cd, 0x00cd, 0x49, 1 }, - { 0x00ce, 0x00ce, 0x49, 1 }, - { 0x00cf, 0x00cf, 0x49, 1 }, - { 0x00d1, 0x00d2, 0x4e, 1 }, - { 0x00d3, 0x00d3, 0x4f, 1 }, - { 0x00d4, 0x00d4, 0x4f, 1 }, - { 0x00d5, 0x00d5, 0x4f, 1 }, - { 0x00d6, 0x00d6, 0x4f, 1 }, - { 0x00d7, 0x00d7, 0x78, 1 }, - { 0x00d8, 0x00d8, 0x4f, 1 }, - { 0x00d9, 0x00d9, 0x55, 1 }, - { 0x00da, 0x00da, 0x55, 1 }, - { 0x00db, 0x00db, 0x55, 1 }, - { 0x00dc, 0x00dc, 0x55, 1 }, - { 0x00dd, 0x00dd, 0x59, 1 }, - { 0x00e0, 0x00e0, 0x61, 1 }, - { 0x00e1, 0x00e1, 0x61, 1 }, - { 0x00e2, 0x00e2, 0x61, 1 }, - { 0x00e3, 0x00e3, 0x61, 1 }, - { 0x00e4, 0x00e4, 0x61, 1 }, - { 0x00e5, 0x00e5, 0x61, 1 }, - { 0x00e6, 0x00e6, 0x6165, 2 }, - { 0x00e7, 0x00e7, 0x63, 1 }, - { 0x00e8, 0x00e8, 0x65, 1 }, - { 0x00e9, 0x00e9, 0x65, 1 }, - { 0x00ea, 0x00ea, 0x65, 1 }, - { 0x00eb, 0x00eb, 0x65, 1 }, - { 0x00ec, 0x00ec, 0x69, 1 }, - { 0x00ed, 0x00ed, 0x69, 1 }, - { 0x00ee, 0x00ee, 0x69, 1 }, - { 0x00ef, 0x00ef, 0x69, 1 }, - { 0x00f1, 0x00f2, 0x6e, 1 }, - { 0x00f3, 0x00f3, 0x6f, 1 }, - { 0x00f4, 0x00f4, 0x6f, 1 }, - { 0x00f5, 0x00f5, 0x6f, 1 }, - { 0x00f6, 0x00f6, 0x6f, 1 }, - { 0x00f7, 0x00f7, 0x2f, 1 }, - { 0x00f8, 0x00f8, 0x6f, 1 }, - { 0x00f9, 0x00f9, 0x75, 1 }, - { 0x00fa, 0x00fa, 0x75, 1 }, - { 0x00fb, 0x00fb, 0x75, 1 }, - { 0x00fc, 0x00fc, 0x75, 1 }, - { 0x00fd, 0x00fd, 0x79, 1 }, - { 0x00ff, 0x00ff, 0x79, 1 }, - { 0x0131, 0x0131, 0x69, 1 }, - { 0x0141, 0x0141, 0x4c, 1 }, - { 0x0152, 0x0152, 0x4f45, 2 }, - { 0x0153, 0x0153, 0x6f65, 2 }, - { 0x0160, 0x0160, 0x53, 1 }, - { 0x0178, 0x0178, 0x59, 1 }, - { 0x017d, 0x017d, 0x5a, 1 }, - { 0x2013, 0x2013, 0x2d, 1 }, - { 0x2014, 0x2014, 0x2d2d, 2 }, - { 0x2018, 0x2018, 0x60, 1 }, - { 0x2019, 0x2019, 0x27, 1 }, - { 0x201c, 0x201c, 0x22, 1 }, - { 0x201d, 0x201d, 0x22, 1 }, - { 0x2022, 0x2022, 0x2a, 1 }, - { 0x2026, 0x2026, 0x2e2e2e, 3 }, - { 0x2122, 0x2122, 0x544d, 2 }, - { 0x2212, 0x2212, 0x2d, 1 }, - { 0xf6f9, 0xf6f9, 0x4c, 1 }, - { 0xf6fa, 0xf6fa, 0x4f45, 2 }, - { 0xf6fd, 0xf6fd, 0x53, 1 }, - { 0xf6fe, 0xf6fe, 0x7e, 1 }, - { 0xf6ff, 0xf6ff, 0x5a, 1 }, - { 0xf721, 0xf721, 0x21, 1 }, - { 0xf724, 0xf724, 0x24, 1 }, - { 0xf726, 0xf726, 0x26, 1 }, - { 0xf730, 0xf739, 0x30, 1 }, - { 0xf73f, 0xf73f, 0x3f, 1 }, - { 0xf761, 0xf77a, 0x41, 1 }, - { 0xf7e0, 0xf7e0, 0x41, 1 }, - { 0xf7e1, 0xf7e1, 0x41, 1 }, - { 0xf7e2, 0xf7e2, 0x41, 1 }, - { 0xf7e3, 0xf7e3, 0x41, 1 }, - { 0xf7e4, 0xf7e4, 0x41, 1 }, - { 0xf7e5, 0xf7e5, 0x41, 1 }, - { 0xf7e6, 0xf7e6, 0x4145, 2 }, - { 0xf7e7, 0xf7e7, 0x43, 1 }, - { 0xf7e8, 0xf7e8, 0x45, 1 }, - { 0xf7e9, 0xf7e9, 0x45, 1 }, - { 0xf7ea, 0xf7ea, 0x45, 1 }, - { 0xf7eb, 0xf7eb, 0x45, 1 }, - { 0xf7ec, 0xf7ec, 0x49, 1 }, - { 0xf7ed, 0xf7ed, 0x49, 1 }, - { 0xf7ee, 0xf7ee, 0x49, 1 }, - { 0xf7ef, 0xf7ef, 0x49, 1 }, - { 0xf7f1, 0xf7f2, 0x4e, 1 }, - { 0xf7f3, 0xf7f3, 0x4f, 1 }, - { 0xf7f4, 0xf7f4, 0x4f, 1 }, - { 0xf7f5, 0xf7f5, 0x4f, 1 }, - { 0xf7f6, 0xf7f6, 0x4f, 1 }, - { 0xf7f8, 0xf7f8, 0x4f, 1 }, - { 0xf7f9, 0xf7f9, 0x55, 1 }, - { 0xf7fa, 0xf7fa, 0x55, 1 }, - { 0xf7fb, 0xf7fb, 0x55, 1 }, - { 0xf7fc, 0xf7fc, 0x55, 1 }, - { 0xf7fd, 0xf7fd, 0x59, 1 }, - { 0xf7ff, 0xf7ff, 0x59, 1 }, - { 0xfb00, 0xfb00, 0x6666, 2 }, - { 0xfb01, 0xfb01, 0x6669, 2 }, - { 0xfb02, 0xfb02, 0x666c, 2 }, - { 0xfb03, 0xfb03, 0x666669, 3 }, - { 0xfb04, 0xfb04, 0x66666c, 3 } -}; -#define ascii7UnicodeMapLen (sizeof(ascii7UnicodeMapRanges) / sizeof(UnicodeMapRange)) - -static UnicodeMapRange symbolUnicodeMapRanges[] = { - { 0x0020, 0x0021, 0x20, 1 }, - { 0x0023, 0x0023, 0x23, 1 }, - { 0x0025, 0x0026, 0x25, 1 }, - { 0x0028, 0x0029, 0x28, 1 }, - { 0x002b, 0x002c, 0x2b, 1 }, - { 0x002e, 0x003f, 0x2e, 1 }, - { 0x005b, 0x005b, 0x5b, 1 }, - { 0x005d, 0x005d, 0x5d, 1 }, - { 0x005f, 0x005f, 0x5f, 1 }, - { 0x007b, 0x007d, 0x7b, 1 }, - { 0x00ac, 0x00ac, 0xd8, 1 }, - { 0x00b0, 0x00b1, 0xb0, 1 }, - { 0x00b5, 0x00b5, 0x6d, 1 }, - { 0x00d7, 0x00d7, 0xb4, 1 }, - { 0x00f7, 0x00f7, 0xb8, 1 }, - { 0x0192, 0x0192, 0xa6, 1 }, - { 0x0391, 0x0392, 0x41, 1 }, - { 0x0393, 0x0393, 0x47, 1 }, - { 0x0395, 0x0395, 0x45, 1 }, - { 0x0396, 0x0396, 0x5a, 1 }, - { 0x0397, 0x0397, 0x48, 1 }, - { 0x0398, 0x0398, 0x51, 1 }, - { 0x0399, 0x0399, 0x49, 1 }, - { 0x039a, 0x039d, 0x4b, 1 }, - { 0x039e, 0x039e, 0x58, 1 }, - { 0x039f, 0x03a0, 0x4f, 1 }, - { 0x03a1, 0x03a1, 0x52, 1 }, - { 0x03a3, 0x03a5, 0x53, 1 }, - { 0x03a6, 0x03a6, 0x46, 1 }, - { 0x03a7, 0x03a7, 0x43, 1 }, - { 0x03a8, 0x03a8, 0x59, 1 }, - { 0x03b1, 0x03b2, 0x61, 1 }, - { 0x03b3, 0x03b3, 0x67, 1 }, - { 0x03b4, 0x03b5, 0x64, 1 }, - { 0x03b6, 0x03b6, 0x7a, 1 }, - { 0x03b7, 0x03b7, 0x68, 1 }, - { 0x03b8, 0x03b8, 0x71, 1 }, - { 0x03b9, 0x03b9, 0x69, 1 }, - { 0x03ba, 0x03bb, 0x6b, 1 }, - { 0x03bd, 0x03bd, 0x6e, 1 }, - { 0x03be, 0x03be, 0x78, 1 }, - { 0x03bf, 0x03c0, 0x6f, 1 }, - { 0x03c1, 0x03c1, 0x72, 1 }, - { 0x03c2, 0x03c2, 0x56, 1 }, - { 0x03c3, 0x03c5, 0x73, 1 }, - { 0x03c6, 0x03c6, 0x66, 1 }, - { 0x03c7, 0x03c7, 0x63, 1 }, - { 0x03c8, 0x03c8, 0x79, 1 }, - { 0x03c9, 0x03c9, 0x77, 1 }, - { 0x03d1, 0x03d1, 0x4a, 1 }, - { 0x03d2, 0x03d2, 0xa1, 1 }, - { 0x03d5, 0x03d5, 0x6a, 1 }, - { 0x03d6, 0x03d6, 0x76, 1 }, - { 0x2022, 0x2022, 0xb7, 1 }, - { 0x2026, 0x2026, 0xbc, 1 }, - { 0x2032, 0x2032, 0xa2, 1 }, - { 0x2033, 0x2033, 0xb2, 1 }, - { 0x2044, 0x2044, 0xa4, 1 }, - { 0x2111, 0x2111, 0xc1, 1 }, - { 0x2118, 0x2118, 0xc3, 1 }, - { 0x211c, 0x211c, 0xc2, 1 }, - { 0x2126, 0x2126, 0x57, 1 }, - { 0x2135, 0x2135, 0xc0, 1 }, - { 0x2190, 0x2193, 0xac, 1 }, - { 0x2194, 0x2194, 0xab, 1 }, - { 0x21b5, 0x21b5, 0xbf, 1 }, - { 0x21d0, 0x21d3, 0xdc, 1 }, - { 0x21d4, 0x21d4, 0xdb, 1 }, - { 0x2200, 0x2200, 0x22, 1 }, - { 0x2202, 0x2202, 0xb6, 1 }, - { 0x2203, 0x2203, 0x24, 1 }, - { 0x2205, 0x2205, 0xc6, 1 }, - { 0x2206, 0x2206, 0x44, 1 }, - { 0x2207, 0x2207, 0xd1, 1 }, - { 0x2208, 0x2209, 0xce, 1 }, - { 0x220b, 0x220b, 0x27, 1 }, - { 0x220f, 0x220f, 0xd5, 1 }, - { 0x2211, 0x2211, 0xe5, 1 }, - { 0x2212, 0x2212, 0x2d, 1 }, - { 0x2217, 0x2217, 0x2a, 1 }, - { 0x221a, 0x221a, 0xd6, 1 }, - { 0x221d, 0x221d, 0xb5, 1 }, - { 0x221e, 0x221e, 0xa5, 1 }, - { 0x2220, 0x2220, 0xd0, 1 }, - { 0x2227, 0x2228, 0xd9, 1 }, - { 0x2229, 0x222a, 0xc7, 1 }, - { 0x222b, 0x222b, 0xf2, 1 }, - { 0x2234, 0x2234, 0x5c, 1 }, - { 0x223c, 0x223c, 0x7e, 1 }, - { 0x2245, 0x2245, 0x40, 1 }, - { 0x2248, 0x2248, 0xbb, 1 }, - { 0x2260, 0x2261, 0xb9, 1 }, - { 0x2264, 0x2264, 0xa3, 1 }, - { 0x2265, 0x2265, 0xb3, 1 }, - { 0x2282, 0x2282, 0xcc, 1 }, - { 0x2283, 0x2283, 0xc9, 1 }, - { 0x2284, 0x2284, 0xcb, 1 }, - { 0x2286, 0x2286, 0xcd, 1 }, - { 0x2287, 0x2287, 0xca, 1 }, - { 0x2295, 0x2295, 0xc5, 1 }, - { 0x2297, 0x2297, 0xc4, 1 }, - { 0x22a5, 0x22a5, 0x5e, 1 }, - { 0x22c5, 0x22c5, 0xd7, 1 }, - { 0x2320, 0x2320, 0xf3, 1 }, - { 0x2321, 0x2321, 0xf5, 1 }, - { 0x2329, 0x2329, 0xe1, 1 }, - { 0x232a, 0x232a, 0xf1, 1 }, - { 0x25ca, 0x25ca, 0xe0, 1 }, - { 0x2660, 0x2660, 0xaa, 1 }, - { 0x2663, 0x2663, 0xa7, 1 }, - { 0x2665, 0x2665, 0xa9, 1 }, - { 0x2666, 0x2666, 0xa8, 1 }, - { 0xf6d9, 0xf6d9, 0xd3, 1 }, - { 0xf6da, 0xf6da, 0xd2, 1 }, - { 0xf6db, 0xf6db, 0xd4, 1 }, - { 0xf8e5, 0xf8e5, 0x60, 1 }, - { 0xf8e6, 0xf8e7, 0xbd, 1 }, - { 0xf8e8, 0xf8ea, 0xe2, 1 }, - { 0xf8eb, 0xf8f4, 0xe6, 1 }, - { 0xf8f5, 0xf8f5, 0xf4, 1 }, - { 0xf8f6, 0xf8fe, 0xf6, 1 } -}; -#define symbolUnicodeMapLen (sizeof(symbolUnicodeMapRanges) / sizeof(UnicodeMapRange)) - -static UnicodeMapRange zapfDingbatsUnicodeMapRanges[] = { - { 0x0020, 0x0020, 0x20, 1 }, - { 0x2192, 0x2192, 0xd5, 1 }, - { 0x2194, 0x2195, 0xd6, 1 }, - { 0x2460, 0x2469, 0xac, 1 }, - { 0x25a0, 0x25a0, 0x6e, 1 }, - { 0x25b2, 0x25b2, 0x73, 1 }, - { 0x25bc, 0x25bc, 0x74, 1 }, - { 0x25c6, 0x25c6, 0x75, 1 }, - { 0x25cf, 0x25cf, 0x6c, 1 }, - { 0x25d7, 0x25d7, 0x77, 1 }, - { 0x2605, 0x2605, 0x48, 1 }, - { 0x260e, 0x260e, 0x25, 1 }, - { 0x261b, 0x261b, 0x2a, 1 }, - { 0x261e, 0x261e, 0x2b, 1 }, - { 0x2660, 0x2660, 0xab, 1 }, - { 0x2663, 0x2663, 0xa8, 1 }, - { 0x2665, 0x2665, 0xaa, 1 }, - { 0x2666, 0x2666, 0xa9, 1 }, - { 0x2701, 0x2704, 0x21, 1 }, - { 0x2706, 0x2709, 0x26, 1 }, - { 0x270c, 0x2727, 0x2c, 1 }, - { 0x2729, 0x274b, 0x49, 1 }, - { 0x274d, 0x274d, 0x6d, 1 }, - { 0x274f, 0x2752, 0x6f, 1 }, - { 0x2756, 0x2756, 0x76, 1 }, - { 0x2758, 0x275e, 0x78, 1 }, - { 0x2761, 0x2767, 0xa1, 1 }, - { 0x2776, 0x2794, 0xb6, 1 }, - { 0x2798, 0x27af, 0xd8, 1 }, - { 0x27b1, 0x27be, 0xf1, 1 } -}; -#define zapfDingbatsUnicodeMapLen (sizeof(zapfDingbatsUnicodeMapRanges) / sizeof(UnicodeMapRange)) diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeTypeTable.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeTypeTable.cc deleted file mode 100644 index f18930f38de..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeTypeTable.cc +++ /dev/null @@ -1,1203 +0,0 @@ -//======================================================================== -// -// UnicodeTypeTable.cc -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006, 2007 Ed Catmur <ed@catmur.co.uk> -// Copyright (C) 2007 Jeff Muizelaar <jeff@infidigm.net> -// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <stdlib.h> -#include "CharTypes.h" -#include "UnicodeTypeTable.h" -#include "goo/gmem.h" - -struct UnicodeMapTableEntry { - char *vector; - char type; -}; - -struct UnicodeCaseTableVector { - Unicode codes[256]; -}; - -static const UnicodeMapTableEntry typeTable[256] = { - { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLNNNNNNNNNNLNNNNLNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLL", 'X' }, - { NULL, 'L' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLNNNNNNNNNNNNNNLLNNNNNNNNNNNNNNLLLLLNNNNNNNNNLNNNNNNNNNNNNNNNNN", 'X' }, - { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLNNNNNNNNNNNLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNRNRNNRNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR", 'X' }, - { "RRRRNNNNNNNNNRNNNNNNNNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNRRRNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNRNNNNNNNRRNNNNNNNRRNNNNNNNNNNRRRRRR", 'X' }, - { "RRRRRRRRRRRRRRNNRNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNNNNNNNNNNNNNNNNNNNNNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNNNNNRNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { NULL, 'N' }, - { "NNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNNNNNLLLLNLLLNNNNLLLLLLLLLLLLLNNLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNLLLLLLLLNLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLNNLLLLLLLNNNNN", 'X' }, - { "NNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNNNNNLLLLNLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLNNNNNNNNNNNNNNNN", 'X' }, - { "NNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLNLNNNLLLLLLLLLNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNLLLLNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNLLLLLLLNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLNNNNNNNNNNNNLLLLLLLNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLNNNNNNNNNLLLLLLLLLLNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLNLNLNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNLNNNNNLNNLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNLNNNNNNLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNLLLLLLLLNLLNNNNNNNNNNNLLLLLLLNLNLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { "NNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLNNNNNLLLLLLNLLLLLLNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLNNNLLLLLLLLLLLNNNLLLLLLLLLLLLNNNNLLLLLLLLLLLLLNNNLLLLLLLLLLLLLNNN", 'X' }, - { "NNNNNNNNNNNNNNLRNNNNNNNNNNNNNNNNNNNNNNNNNNLRNLRNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLNNNNNNNNNNNNNLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { "NNLNNNNLNNLLLLLLLLLLNLNNNLLLLLNNNNNNLNLNLNLLLLNLLLNLLLLLLLNNLLLLNNNNNLLLLLNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { NULL, 'N' }, - { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { NULL, 'N' }, - { NULL, 'N' }, - { NULL, 'N' }, - { NULL, 'L' }, - { NULL, 'N' }, - { NULL, 'N' }, - { NULL, 'N' }, - { NULL, 'N' }, - { NULL, 'N' }, - { NULL, 'N' }, - { NULL, 'N' }, - { "NNNNNLLLNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLNNNNNNNLLLLLNNLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLL", 'X' }, - { NULL, 'L' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNLLLLLLLLLLLLNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN", 'X' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLRRRRRRNRRRRRRRRRRNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR", 'X' }, - { NULL, 'R' }, - { "RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNN", 'X' }, - { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNN", 'X' }, - { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLL", 'X' } -}; - -static const UnicodeCaseTableVector caseTable00 = {{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x03bc, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00d7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff -}}; -static const UnicodeCaseTableVector caseTable01 = {{ - 0x0101, 0x0101, 0x0103, 0x0103, 0x0105, 0x0105, 0x0107, 0x0107, - 0x0109, 0x0109, 0x010b, 0x010b, 0x010d, 0x010d, 0x010f, 0x010f, - 0x0111, 0x0111, 0x0113, 0x0113, 0x0115, 0x0115, 0x0117, 0x0117, - 0x0119, 0x0119, 0x011b, 0x011b, 0x011d, 0x011d, 0x011f, 0x011f, - 0x0121, 0x0121, 0x0123, 0x0123, 0x0125, 0x0125, 0x0127, 0x0127, - 0x0129, 0x0129, 0x012b, 0x012b, 0x012d, 0x012d, 0x012f, 0x012f, - 0x0130, 0x0131, 0x0133, 0x0133, 0x0135, 0x0135, 0x0137, 0x0137, - 0x0138, 0x013a, 0x013a, 0x013c, 0x013c, 0x013e, 0x013e, 0x0140, - 0x0140, 0x0142, 0x0142, 0x0144, 0x0144, 0x0146, 0x0146, 0x0148, - 0x0148, 0x0149, 0x014b, 0x014b, 0x014d, 0x014d, 0x014f, 0x014f, - 0x0151, 0x0151, 0x0153, 0x0153, 0x0155, 0x0155, 0x0157, 0x0157, - 0x0159, 0x0159, 0x015b, 0x015b, 0x015d, 0x015d, 0x015f, 0x015f, - 0x0161, 0x0161, 0x0163, 0x0163, 0x0165, 0x0165, 0x0167, 0x0167, - 0x0169, 0x0169, 0x016b, 0x016b, 0x016d, 0x016d, 0x016f, 0x016f, - 0x0171, 0x0171, 0x0173, 0x0173, 0x0175, 0x0175, 0x0177, 0x0177, - 0x00ff, 0x017a, 0x017a, 0x017c, 0x017c, 0x017e, 0x017e, 0x0073, - 0x0180, 0x0253, 0x0183, 0x0183, 0x0185, 0x0185, 0x0254, 0x0188, - 0x0188, 0x0256, 0x0257, 0x018c, 0x018c, 0x018d, 0x01dd, 0x0259, - 0x025b, 0x0192, 0x0192, 0x0260, 0x0263, 0x0195, 0x0269, 0x0268, - 0x0199, 0x0199, 0x019a, 0x019b, 0x026f, 0x0272, 0x019e, 0x0275, - 0x01a1, 0x01a1, 0x01a3, 0x01a3, 0x01a5, 0x01a5, 0x0280, 0x01a8, - 0x01a8, 0x0283, 0x01aa, 0x01ab, 0x01ad, 0x01ad, 0x0288, 0x01b0, - 0x01b0, 0x028a, 0x028b, 0x01b4, 0x01b4, 0x01b6, 0x01b6, 0x0292, - 0x01b9, 0x01b9, 0x01ba, 0x01bb, 0x01bd, 0x01bd, 0x01be, 0x01bf, - 0x01c0, 0x01c1, 0x01c2, 0x01c3, 0x01c6, 0x01c6, 0x01c6, 0x01c9, - 0x01c9, 0x01c9, 0x01cc, 0x01cc, 0x01cc, 0x01ce, 0x01ce, 0x01d0, - 0x01d0, 0x01d2, 0x01d2, 0x01d4, 0x01d4, 0x01d6, 0x01d6, 0x01d8, - 0x01d8, 0x01da, 0x01da, 0x01dc, 0x01dc, 0x01dd, 0x01df, 0x01df, - 0x01e1, 0x01e1, 0x01e3, 0x01e3, 0x01e5, 0x01e5, 0x01e7, 0x01e7, - 0x01e9, 0x01e9, 0x01eb, 0x01eb, 0x01ed, 0x01ed, 0x01ef, 0x01ef, - 0x01f0, 0x01f3, 0x01f3, 0x01f3, 0x01f5, 0x01f5, 0x0195, 0x01bf, - 0x01f9, 0x01f9, 0x01fb, 0x01fb, 0x01fd, 0x01fd, 0x01ff, 0x01ff -}}; -static const UnicodeCaseTableVector caseTable02 = {{ - 0x0201, 0x0201, 0x0203, 0x0203, 0x0205, 0x0205, 0x0207, 0x0207, - 0x0209, 0x0209, 0x020b, 0x020b, 0x020d, 0x020d, 0x020f, 0x020f, - 0x0211, 0x0211, 0x0213, 0x0213, 0x0215, 0x0215, 0x0217, 0x0217, - 0x0219, 0x0219, 0x021b, 0x021b, 0x021d, 0x021d, 0x021f, 0x021f, - 0x019e, 0x0221, 0x0223, 0x0223, 0x0225, 0x0225, 0x0227, 0x0227, - 0x0229, 0x0229, 0x022b, 0x022b, 0x022d, 0x022d, 0x022f, 0x022f, - 0x0231, 0x0231, 0x0233, 0x0233, 0x0234, 0x0235, 0x0236, 0x0237, - 0x0238, 0x0239, 0x023a, 0x023b, 0x023c, 0x023d, 0x023e, 0x023f, - 0x0240, 0x0241, 0x0242, 0x0243, 0x0244, 0x0245, 0x0246, 0x0247, - 0x0248, 0x0249, 0x024a, 0x024b, 0x024c, 0x024d, 0x024e, 0x024f, - 0x0250, 0x0251, 0x0252, 0x0253, 0x0254, 0x0255, 0x0256, 0x0257, - 0x0258, 0x0259, 0x025a, 0x025b, 0x025c, 0x025d, 0x025e, 0x025f, - 0x0260, 0x0261, 0x0262, 0x0263, 0x0264, 0x0265, 0x0266, 0x0267, - 0x0268, 0x0269, 0x026a, 0x026b, 0x026c, 0x026d, 0x026e, 0x026f, - 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275, 0x0276, 0x0277, - 0x0278, 0x0279, 0x027a, 0x027b, 0x027c, 0x027d, 0x027e, 0x027f, - 0x0280, 0x0281, 0x0282, 0x0283, 0x0284, 0x0285, 0x0286, 0x0287, - 0x0288, 0x0289, 0x028a, 0x028b, 0x028c, 0x028d, 0x028e, 0x028f, - 0x0290, 0x0291, 0x0292, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, - 0x0298, 0x0299, 0x029a, 0x029b, 0x029c, 0x029d, 0x029e, 0x029f, - 0x02a0, 0x02a1, 0x02a2, 0x02a3, 0x02a4, 0x02a5, 0x02a6, 0x02a7, - 0x02a8, 0x02a9, 0x02aa, 0x02ab, 0x02ac, 0x02ad, 0x02ae, 0x02af, - 0x02b0, 0x02b1, 0x02b2, 0x02b3, 0x02b4, 0x02b5, 0x02b6, 0x02b7, - 0x02b8, 0x02b9, 0x02ba, 0x02bb, 0x02bc, 0x02bd, 0x02be, 0x02bf, - 0x02c0, 0x02c1, 0x02c2, 0x02c3, 0x02c4, 0x02c5, 0x02c6, 0x02c7, - 0x02c8, 0x02c9, 0x02ca, 0x02cb, 0x02cc, 0x02cd, 0x02ce, 0x02cf, - 0x02d0, 0x02d1, 0x02d2, 0x02d3, 0x02d4, 0x02d5, 0x02d6, 0x02d7, - 0x02d8, 0x02d9, 0x02da, 0x02db, 0x02dc, 0x02dd, 0x02de, 0x02df, - 0x02e0, 0x02e1, 0x02e2, 0x02e3, 0x02e4, 0x02e5, 0x02e6, 0x02e7, - 0x02e8, 0x02e9, 0x02ea, 0x02eb, 0x02ec, 0x02ed, 0x02ee, 0x02ef, - 0x02f0, 0x02f1, 0x02f2, 0x02f3, 0x02f4, 0x02f5, 0x02f6, 0x02f7, - 0x02f8, 0x02f9, 0x02fa, 0x02fb, 0x02fc, 0x02fd, 0x02fe, 0x02ff -}}; -static const UnicodeCaseTableVector caseTable03 = {{ - 0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0305, 0x0306, 0x0307, - 0x0308, 0x0309, 0x030a, 0x030b, 0x030c, 0x030d, 0x030e, 0x030f, - 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, - 0x0318, 0x0319, 0x031a, 0x031b, 0x031c, 0x031d, 0x031e, 0x031f, - 0x0320, 0x0321, 0x0322, 0x0323, 0x0324, 0x0325, 0x0326, 0x0327, - 0x0328, 0x0329, 0x032a, 0x032b, 0x032c, 0x032d, 0x032e, 0x032f, - 0x0330, 0x0331, 0x0332, 0x0333, 0x0334, 0x0335, 0x0336, 0x0337, - 0x0338, 0x0339, 0x033a, 0x033b, 0x033c, 0x033d, 0x033e, 0x033f, - 0x0340, 0x0341, 0x0342, 0x0343, 0x0344, 0x03b9, 0x0346, 0x0347, - 0x0348, 0x0349, 0x034a, 0x034b, 0x034c, 0x034d, 0x034e, 0x034f, - 0x0350, 0x0351, 0x0352, 0x0353, 0x0354, 0x0355, 0x0356, 0x0357, - 0x0358, 0x0359, 0x035a, 0x035b, 0x035c, 0x035d, 0x035e, 0x035f, - 0x0360, 0x0361, 0x0362, 0x0363, 0x0364, 0x0365, 0x0366, 0x0367, - 0x0368, 0x0369, 0x036a, 0x036b, 0x036c, 0x036d, 0x036e, 0x036f, - 0x0370, 0x0371, 0x0372, 0x0373, 0x0374, 0x0375, 0x0376, 0x0377, - 0x0378, 0x0379, 0x037a, 0x037b, 0x037c, 0x037d, 0x037e, 0x037f, - 0x0380, 0x0381, 0x0382, 0x0383, 0x0384, 0x0385, 0x03ac, 0x0387, - 0x03ad, 0x03ae, 0x03af, 0x038b, 0x03cc, 0x038d, 0x03cd, 0x03ce, - 0x0390, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, - 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, - 0x03c0, 0x03c1, 0x03a2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, - 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03ac, 0x03ad, 0x03ae, 0x03af, - 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, - 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, - 0x03c0, 0x03c1, 0x03c3, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, - 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x03cf, - 0x03b2, 0x03b8, 0x03d2, 0x03d3, 0x03d4, 0x03c6, 0x03c0, 0x03d7, - 0x03d9, 0x03d9, 0x03db, 0x03db, 0x03dd, 0x03dd, 0x03df, 0x03df, - 0x03e1, 0x03e1, 0x03e3, 0x03e3, 0x03e5, 0x03e5, 0x03e7, 0x03e7, - 0x03e9, 0x03e9, 0x03eb, 0x03eb, 0x03ed, 0x03ed, 0x03ef, 0x03ef, - 0x03ba, 0x03c1, 0x03f2, 0x03f3, 0x03b8, 0x03b5, 0x03f6, 0x03f8, - 0x03f8, 0x03f2, 0x03fb, 0x03fb, 0x03fc, 0x03fd, 0x03fe, 0x03ff -}}; -static const UnicodeCaseTableVector caseTable04 = {{ - 0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, - 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, - 0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, - 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f, - 0x0461, 0x0461, 0x0463, 0x0463, 0x0465, 0x0465, 0x0467, 0x0467, - 0x0469, 0x0469, 0x046b, 0x046b, 0x046d, 0x046d, 0x046f, 0x046f, - 0x0471, 0x0471, 0x0473, 0x0473, 0x0475, 0x0475, 0x0477, 0x0477, - 0x0479, 0x0479, 0x047b, 0x047b, 0x047d, 0x047d, 0x047f, 0x047f, - 0x0481, 0x0481, 0x0482, 0x0483, 0x0484, 0x0485, 0x0486, 0x0487, - 0x0488, 0x0489, 0x048b, 0x048b, 0x048d, 0x048d, 0x048f, 0x048f, - 0x0491, 0x0491, 0x0493, 0x0493, 0x0495, 0x0495, 0x0497, 0x0497, - 0x0499, 0x0499, 0x049b, 0x049b, 0x049d, 0x049d, 0x049f, 0x049f, - 0x04a1, 0x04a1, 0x04a3, 0x04a3, 0x04a5, 0x04a5, 0x04a7, 0x04a7, - 0x04a9, 0x04a9, 0x04ab, 0x04ab, 0x04ad, 0x04ad, 0x04af, 0x04af, - 0x04b1, 0x04b1, 0x04b3, 0x04b3, 0x04b5, 0x04b5, 0x04b7, 0x04b7, - 0x04b9, 0x04b9, 0x04bb, 0x04bb, 0x04bd, 0x04bd, 0x04bf, 0x04bf, - 0x04c0, 0x04c2, 0x04c2, 0x04c4, 0x04c4, 0x04c6, 0x04c6, 0x04c8, - 0x04c8, 0x04ca, 0x04ca, 0x04cc, 0x04cc, 0x04ce, 0x04ce, 0x04cf, - 0x04d1, 0x04d1, 0x04d3, 0x04d3, 0x04d5, 0x04d5, 0x04d7, 0x04d7, - 0x04d9, 0x04d9, 0x04db, 0x04db, 0x04dd, 0x04dd, 0x04df, 0x04df, - 0x04e1, 0x04e1, 0x04e3, 0x04e3, 0x04e5, 0x04e5, 0x04e7, 0x04e7, - 0x04e9, 0x04e9, 0x04eb, 0x04eb, 0x04ed, 0x04ed, 0x04ef, 0x04ef, - 0x04f1, 0x04f1, 0x04f3, 0x04f3, 0x04f5, 0x04f5, 0x04f6, 0x04f7, - 0x04f9, 0x04f9, 0x04fa, 0x04fb, 0x04fc, 0x04fd, 0x04fe, 0x04ff -}}; -static const UnicodeCaseTableVector caseTable05 = {{ - 0x0501, 0x0501, 0x0503, 0x0503, 0x0505, 0x0505, 0x0507, 0x0507, - 0x0509, 0x0509, 0x050b, 0x050b, 0x050d, 0x050d, 0x050f, 0x050f, - 0x0510, 0x0511, 0x0512, 0x0513, 0x0514, 0x0515, 0x0516, 0x0517, - 0x0518, 0x0519, 0x051a, 0x051b, 0x051c, 0x051d, 0x051e, 0x051f, - 0x0520, 0x0521, 0x0522, 0x0523, 0x0524, 0x0525, 0x0526, 0x0527, - 0x0528, 0x0529, 0x052a, 0x052b, 0x052c, 0x052d, 0x052e, 0x052f, - 0x0530, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, 0x0566, 0x0567, - 0x0568, 0x0569, 0x056a, 0x056b, 0x056c, 0x056d, 0x056e, 0x056f, - 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577, - 0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f, - 0x0580, 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0557, - 0x0558, 0x0559, 0x055a, 0x055b, 0x055c, 0x055d, 0x055e, 0x055f, - 0x0560, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, 0x0566, 0x0567, - 0x0568, 0x0569, 0x056a, 0x056b, 0x056c, 0x056d, 0x056e, 0x056f, - 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577, - 0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f, - 0x0580, 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0587, - 0x0588, 0x0589, 0x058a, 0x058b, 0x058c, 0x058d, 0x058e, 0x058f, - 0x0590, 0x0591, 0x0592, 0x0593, 0x0594, 0x0595, 0x0596, 0x0597, - 0x0598, 0x0599, 0x059a, 0x059b, 0x059c, 0x059d, 0x059e, 0x059f, - 0x05a0, 0x05a1, 0x05a2, 0x05a3, 0x05a4, 0x05a5, 0x05a6, 0x05a7, - 0x05a8, 0x05a9, 0x05aa, 0x05ab, 0x05ac, 0x05ad, 0x05ae, 0x05af, - 0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7, - 0x05b8, 0x05b9, 0x05ba, 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf, - 0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05c4, 0x05c5, 0x05c6, 0x05c7, - 0x05c8, 0x05c9, 0x05ca, 0x05cb, 0x05cc, 0x05cd, 0x05ce, 0x05cf, - 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, - 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, - 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, - 0x05e8, 0x05e9, 0x05ea, 0x05eb, 0x05ec, 0x05ed, 0x05ee, 0x05ef, - 0x05f0, 0x05f1, 0x05f2, 0x05f3, 0x05f4, 0x05f5, 0x05f6, 0x05f7, - 0x05f8, 0x05f9, 0x05fa, 0x05fb, 0x05fc, 0x05fd, 0x05fe, 0x05ff -}}; -static const UnicodeCaseTableVector caseTable1e = {{ - 0x1e01, 0x1e01, 0x1e03, 0x1e03, 0x1e05, 0x1e05, 0x1e07, 0x1e07, - 0x1e09, 0x1e09, 0x1e0b, 0x1e0b, 0x1e0d, 0x1e0d, 0x1e0f, 0x1e0f, - 0x1e11, 0x1e11, 0x1e13, 0x1e13, 0x1e15, 0x1e15, 0x1e17, 0x1e17, - 0x1e19, 0x1e19, 0x1e1b, 0x1e1b, 0x1e1d, 0x1e1d, 0x1e1f, 0x1e1f, - 0x1e21, 0x1e21, 0x1e23, 0x1e23, 0x1e25, 0x1e25, 0x1e27, 0x1e27, - 0x1e29, 0x1e29, 0x1e2b, 0x1e2b, 0x1e2d, 0x1e2d, 0x1e2f, 0x1e2f, - 0x1e31, 0x1e31, 0x1e33, 0x1e33, 0x1e35, 0x1e35, 0x1e37, 0x1e37, - 0x1e39, 0x1e39, 0x1e3b, 0x1e3b, 0x1e3d, 0x1e3d, 0x1e3f, 0x1e3f, - 0x1e41, 0x1e41, 0x1e43, 0x1e43, 0x1e45, 0x1e45, 0x1e47, 0x1e47, - 0x1e49, 0x1e49, 0x1e4b, 0x1e4b, 0x1e4d, 0x1e4d, 0x1e4f, 0x1e4f, - 0x1e51, 0x1e51, 0x1e53, 0x1e53, 0x1e55, 0x1e55, 0x1e57, 0x1e57, - 0x1e59, 0x1e59, 0x1e5b, 0x1e5b, 0x1e5d, 0x1e5d, 0x1e5f, 0x1e5f, - 0x1e61, 0x1e61, 0x1e63, 0x1e63, 0x1e65, 0x1e65, 0x1e67, 0x1e67, - 0x1e69, 0x1e69, 0x1e6b, 0x1e6b, 0x1e6d, 0x1e6d, 0x1e6f, 0x1e6f, - 0x1e71, 0x1e71, 0x1e73, 0x1e73, 0x1e75, 0x1e75, 0x1e77, 0x1e77, - 0x1e79, 0x1e79, 0x1e7b, 0x1e7b, 0x1e7d, 0x1e7d, 0x1e7f, 0x1e7f, - 0x1e81, 0x1e81, 0x1e83, 0x1e83, 0x1e85, 0x1e85, 0x1e87, 0x1e87, - 0x1e89, 0x1e89, 0x1e8b, 0x1e8b, 0x1e8d, 0x1e8d, 0x1e8f, 0x1e8f, - 0x1e91, 0x1e91, 0x1e93, 0x1e93, 0x1e95, 0x1e95, 0x1e96, 0x1e97, - 0x1e98, 0x1e99, 0x1e9a, 0x1e61, 0x1e9c, 0x1e9d, 0x1e9e, 0x1e9f, - 0x1ea1, 0x1ea1, 0x1ea3, 0x1ea3, 0x1ea5, 0x1ea5, 0x1ea7, 0x1ea7, - 0x1ea9, 0x1ea9, 0x1eab, 0x1eab, 0x1ead, 0x1ead, 0x1eaf, 0x1eaf, - 0x1eb1, 0x1eb1, 0x1eb3, 0x1eb3, 0x1eb5, 0x1eb5, 0x1eb7, 0x1eb7, - 0x1eb9, 0x1eb9, 0x1ebb, 0x1ebb, 0x1ebd, 0x1ebd, 0x1ebf, 0x1ebf, - 0x1ec1, 0x1ec1, 0x1ec3, 0x1ec3, 0x1ec5, 0x1ec5, 0x1ec7, 0x1ec7, - 0x1ec9, 0x1ec9, 0x1ecb, 0x1ecb, 0x1ecd, 0x1ecd, 0x1ecf, 0x1ecf, - 0x1ed1, 0x1ed1, 0x1ed3, 0x1ed3, 0x1ed5, 0x1ed5, 0x1ed7, 0x1ed7, - 0x1ed9, 0x1ed9, 0x1edb, 0x1edb, 0x1edd, 0x1edd, 0x1edf, 0x1edf, - 0x1ee1, 0x1ee1, 0x1ee3, 0x1ee3, 0x1ee5, 0x1ee5, 0x1ee7, 0x1ee7, - 0x1ee9, 0x1ee9, 0x1eeb, 0x1eeb, 0x1eed, 0x1eed, 0x1eef, 0x1eef, - 0x1ef1, 0x1ef1, 0x1ef3, 0x1ef3, 0x1ef5, 0x1ef5, 0x1ef7, 0x1ef7, - 0x1ef9, 0x1ef9, 0x1efa, 0x1efb, 0x1efc, 0x1efd, 0x1efe, 0x1eff -}}; -static const UnicodeCaseTableVector caseTable1f = {{ - 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, - 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, - 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15, 0x1f16, 0x1f17, - 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15, 0x1f1e, 0x1f1f, - 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27, - 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27, - 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 0x1f37, - 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 0x1f37, - 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x1f46, 0x1f47, - 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x1f4e, 0x1f4f, - 0x1f50, 0x1f51, 0x1f52, 0x1f53, 0x1f54, 0x1f55, 0x1f56, 0x1f57, - 0x1f58, 0x1f51, 0x1f5a, 0x1f53, 0x1f5c, 0x1f55, 0x1f5e, 0x1f57, - 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, - 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, - 0x1f70, 0x1f71, 0x1f72, 0x1f73, 0x1f74, 0x1f75, 0x1f76, 0x1f77, - 0x1f78, 0x1f79, 0x1f7a, 0x1f7b, 0x1f7c, 0x1f7d, 0x1f7e, 0x1f7f, - 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87, - 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87, - 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97, - 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97, - 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7, - 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7, - 0x1fb0, 0x1fb1, 0x1fb2, 0x1fb3, 0x1fb4, 0x1fb5, 0x1fb6, 0x1fb7, - 0x1fb0, 0x1fb1, 0x1f70, 0x1f71, 0x1fb3, 0x1fbd, 0x03b9, 0x1fbf, - 0x1fc0, 0x1fc1, 0x1fc2, 0x1fc3, 0x1fc4, 0x1fc5, 0x1fc6, 0x1fc7, - 0x1f72, 0x1f73, 0x1f74, 0x1f75, 0x1fc3, 0x1fcd, 0x1fce, 0x1fcf, - 0x1fd0, 0x1fd1, 0x1fd2, 0x1fd3, 0x1fd4, 0x1fd5, 0x1fd6, 0x1fd7, - 0x1fd0, 0x1fd1, 0x1f76, 0x1f77, 0x1fdc, 0x1fdd, 0x1fde, 0x1fdf, - 0x1fe0, 0x1fe1, 0x1fe2, 0x1fe3, 0x1fe4, 0x1fe5, 0x1fe6, 0x1fe7, - 0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b, 0x1fe5, 0x1fed, 0x1fee, 0x1fef, - 0x1ff0, 0x1ff1, 0x1ff2, 0x1ff3, 0x1ff4, 0x1ff5, 0x1ff6, 0x1ff7, - 0x1f78, 0x1f79, 0x1f7c, 0x1f7d, 0x1ff3, 0x1ffd, 0x1ffe, 0x1fff -}}; -static const UnicodeCaseTableVector caseTable21 = {{ - 0x2100, 0x2101, 0x2102, 0x2103, 0x2104, 0x2105, 0x2106, 0x2107, - 0x2108, 0x2109, 0x210a, 0x210b, 0x210c, 0x210d, 0x210e, 0x210f, - 0x2110, 0x2111, 0x2112, 0x2113, 0x2114, 0x2115, 0x2116, 0x2117, - 0x2118, 0x2119, 0x211a, 0x211b, 0x211c, 0x211d, 0x211e, 0x211f, - 0x2120, 0x2121, 0x2122, 0x2123, 0x2124, 0x2125, 0x03c9, 0x2127, - 0x2128, 0x2129, 0x006b, 0x00e5, 0x212c, 0x212d, 0x212e, 0x212f, - 0x2130, 0x2131, 0x2132, 0x2133, 0x2134, 0x2135, 0x2136, 0x2137, - 0x2138, 0x2139, 0x213a, 0x213b, 0x213c, 0x213d, 0x213e, 0x213f, - 0x2140, 0x2141, 0x2142, 0x2143, 0x2144, 0x2145, 0x2146, 0x2147, - 0x2148, 0x2149, 0x214a, 0x214b, 0x214c, 0x214d, 0x214e, 0x214f, - 0x2150, 0x2151, 0x2152, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, - 0x2158, 0x2159, 0x215a, 0x215b, 0x215c, 0x215d, 0x215e, 0x215f, - 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, - 0x2178, 0x2179, 0x217a, 0x217b, 0x217c, 0x217d, 0x217e, 0x217f, - 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, - 0x2178, 0x2179, 0x217a, 0x217b, 0x217c, 0x217d, 0x217e, 0x217f, - 0x2180, 0x2181, 0x2182, 0x2183, 0x2184, 0x2185, 0x2186, 0x2187, - 0x2188, 0x2189, 0x218a, 0x218b, 0x218c, 0x218d, 0x218e, 0x218f, - 0x2190, 0x2191, 0x2192, 0x2193, 0x2194, 0x2195, 0x2196, 0x2197, - 0x2198, 0x2199, 0x219a, 0x219b, 0x219c, 0x219d, 0x219e, 0x219f, - 0x21a0, 0x21a1, 0x21a2, 0x21a3, 0x21a4, 0x21a5, 0x21a6, 0x21a7, - 0x21a8, 0x21a9, 0x21aa, 0x21ab, 0x21ac, 0x21ad, 0x21ae, 0x21af, - 0x21b0, 0x21b1, 0x21b2, 0x21b3, 0x21b4, 0x21b5, 0x21b6, 0x21b7, - 0x21b8, 0x21b9, 0x21ba, 0x21bb, 0x21bc, 0x21bd, 0x21be, 0x21bf, - 0x21c0, 0x21c1, 0x21c2, 0x21c3, 0x21c4, 0x21c5, 0x21c6, 0x21c7, - 0x21c8, 0x21c9, 0x21ca, 0x21cb, 0x21cc, 0x21cd, 0x21ce, 0x21cf, - 0x21d0, 0x21d1, 0x21d2, 0x21d3, 0x21d4, 0x21d5, 0x21d6, 0x21d7, - 0x21d8, 0x21d9, 0x21da, 0x21db, 0x21dc, 0x21dd, 0x21de, 0x21df, - 0x21e0, 0x21e1, 0x21e2, 0x21e3, 0x21e4, 0x21e5, 0x21e6, 0x21e7, - 0x21e8, 0x21e9, 0x21ea, 0x21eb, 0x21ec, 0x21ed, 0x21ee, 0x21ef, - 0x21f0, 0x21f1, 0x21f2, 0x21f3, 0x21f4, 0x21f5, 0x21f6, 0x21f7, - 0x21f8, 0x21f9, 0x21fa, 0x21fb, 0x21fc, 0x21fd, 0x21fe, 0x21ff -}}; -static const UnicodeCaseTableVector caseTable24 = {{ - 0x2400, 0x2401, 0x2402, 0x2403, 0x2404, 0x2405, 0x2406, 0x2407, - 0x2408, 0x2409, 0x240a, 0x240b, 0x240c, 0x240d, 0x240e, 0x240f, - 0x2410, 0x2411, 0x2412, 0x2413, 0x2414, 0x2415, 0x2416, 0x2417, - 0x2418, 0x2419, 0x241a, 0x241b, 0x241c, 0x241d, 0x241e, 0x241f, - 0x2420, 0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, - 0x2428, 0x2429, 0x242a, 0x242b, 0x242c, 0x242d, 0x242e, 0x242f, - 0x2430, 0x2431, 0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, - 0x2438, 0x2439, 0x243a, 0x243b, 0x243c, 0x243d, 0x243e, 0x243f, - 0x2440, 0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, - 0x2448, 0x2449, 0x244a, 0x244b, 0x244c, 0x244d, 0x244e, 0x244f, - 0x2450, 0x2451, 0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, - 0x2458, 0x2459, 0x245a, 0x245b, 0x245c, 0x245d, 0x245e, 0x245f, - 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, - 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, - 0x2470, 0x2471, 0x2472, 0x2473, 0x2474, 0x2475, 0x2476, 0x2477, - 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f, - 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487, - 0x2488, 0x2489, 0x248a, 0x248b, 0x248c, 0x248d, 0x248e, 0x248f, - 0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, 0x2497, - 0x2498, 0x2499, 0x249a, 0x249b, 0x249c, 0x249d, 0x249e, 0x249f, - 0x24a0, 0x24a1, 0x24a2, 0x24a3, 0x24a4, 0x24a5, 0x24a6, 0x24a7, - 0x24a8, 0x24a9, 0x24aa, 0x24ab, 0x24ac, 0x24ad, 0x24ae, 0x24af, - 0x24b0, 0x24b1, 0x24b2, 0x24b3, 0x24b4, 0x24b5, 0x24d0, 0x24d1, - 0x24d2, 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9, - 0x24da, 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, - 0x24e2, 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, - 0x24d0, 0x24d1, 0x24d2, 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, - 0x24d8, 0x24d9, 0x24da, 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, - 0x24e0, 0x24e1, 0x24e2, 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7, - 0x24e8, 0x24e9, 0x24ea, 0x24eb, 0x24ec, 0x24ed, 0x24ee, 0x24ef, - 0x24f0, 0x24f1, 0x24f2, 0x24f3, 0x24f4, 0x24f5, 0x24f6, 0x24f7, - 0x24f8, 0x24f9, 0x24fa, 0x24fb, 0x24fc, 0x24fd, 0x24fe, 0x24ff -}}; -static const UnicodeCaseTableVector caseTableff = {{ - 0xff00, 0xff01, 0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07, - 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, - 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, - 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, - 0xff20, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, - 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, - 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, - 0xff58, 0xff59, 0xff5a, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f, - 0xff40, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, - 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, - 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, - 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xff5e, 0xff5f, - 0xff60, 0xff61, 0xff62, 0xff63, 0xff64, 0xff65, 0xff66, 0xff67, - 0xff68, 0xff69, 0xff6a, 0xff6b, 0xff6c, 0xff6d, 0xff6e, 0xff6f, - 0xff70, 0xff71, 0xff72, 0xff73, 0xff74, 0xff75, 0xff76, 0xff77, - 0xff78, 0xff79, 0xff7a, 0xff7b, 0xff7c, 0xff7d, 0xff7e, 0xff7f, - 0xff80, 0xff81, 0xff82, 0xff83, 0xff84, 0xff85, 0xff86, 0xff87, - 0xff88, 0xff89, 0xff8a, 0xff8b, 0xff8c, 0xff8d, 0xff8e, 0xff8f, - 0xff90, 0xff91, 0xff92, 0xff93, 0xff94, 0xff95, 0xff96, 0xff97, - 0xff98, 0xff99, 0xff9a, 0xff9b, 0xff9c, 0xff9d, 0xff9e, 0xff9f, - 0xffa0, 0xffa1, 0xffa2, 0xffa3, 0xffa4, 0xffa5, 0xffa6, 0xffa7, - 0xffa8, 0xffa9, 0xffaa, 0xffab, 0xffac, 0xffad, 0xffae, 0xffaf, - 0xffb0, 0xffb1, 0xffb2, 0xffb3, 0xffb4, 0xffb5, 0xffb6, 0xffb7, - 0xffb8, 0xffb9, 0xffba, 0xffbb, 0xffbc, 0xffbd, 0xffbe, 0xffbf, - 0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc4, 0xffc5, 0xffc6, 0xffc7, - 0xffc8, 0xffc9, 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf, - 0xffd0, 0xffd1, 0xffd2, 0xffd3, 0xffd4, 0xffd5, 0xffd6, 0xffd7, - 0xffd8, 0xffd9, 0xffda, 0xffdb, 0xffdc, 0xffdd, 0xffde, 0xffdf, - 0xffe0, 0xffe1, 0xffe2, 0xffe3, 0xffe4, 0xffe5, 0xffe6, 0xffe7, - 0xffe8, 0xffe9, 0xffea, 0xffeb, 0xffec, 0xffed, 0xffee, 0xffef, - 0xfff0, 0xfff1, 0xfff2, 0xfff3, 0xfff4, 0xfff5, 0xfff6, 0xfff7, - 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc, 0xfffd, 0xfffe, 0xffff -}}; -static const UnicodeCaseTableVector *caseTable[256] = { - &caseTable00, - &caseTable01, - &caseTable02, - &caseTable03, - &caseTable04, - &caseTable05, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - &caseTable1e, - &caseTable1f, - NULL, - &caseTable21, - NULL, - NULL, - &caseTable24, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - &caseTableff -}; - -static inline char getType(Unicode c) { - int i; - char type; - - if (c > 0xffff) { - type = 'X'; - } else { - i = (c >> 8) & 0xff; - if ((type = typeTable[i].type) == 'X') { - type = typeTable[i].vector[c & 0xff]; - } - } - return type; -} - -GBool unicodeTypeL(Unicode c) { - return getType(c) == 'L'; -} - -GBool unicodeTypeR(Unicode c) { - return getType(c) == 'R'; -} - -Unicode unicodeToUpper(Unicode c) { - int i; - - if (c > 0xffff) { - return c; - } - i = (c >> 8) & 0xff; - if (caseTable[i]) { - return caseTable[i]->codes[c & 0xff]; - } - return c; -} - -#define UNICODE_LAST_CHAR 0x10FFFF -#define UNICODE_MAX_TABLE_INDEX (UNICODE_LAST_CHAR / 256 + 1) -// large empty block between U+2FA1D and U+E0001 -#define UNICODE_LAST_CHAR_PART1 0x2FAFF -#define UNICODE_LAST_PAGE_PART1 (UNICODE_LAST_CHAR_PART1 / 256) -#define UNICODE_PART2_START 0xE0000 - -#include "UnicodeCClassTables.h" -#include "UnicodeCompTables.h" -#include "UnicodeDecompTables.h" - -#define CC_PART1(Page, Char) \ - ((combining_class_table_part1[Page] >= UNICODE_MAX_TABLE_INDEX) \ - ? (combining_class_table_part1[Page] - UNICODE_MAX_TABLE_INDEX) \ - : (cclass_data[combining_class_table_part1[Page]][Char])) - -#define CC_PART2(Page, Char) \ - ((combining_class_table_part2[Page] >= UNICODE_MAX_TABLE_INDEX) \ - ? (combining_class_table_part2[Page] - UNICODE_MAX_TABLE_INDEX) \ - : (cclass_data[combining_class_table_part2[Page]][Char])) - -#define COMBINING_CLASS(u) (((u) <= UNICODE_LAST_CHAR_PART1) \ - ? CC_PART1((u) / 256, (u) % 256) \ - : (((u) >= UNICODE_PART2_START && (u) <= UNICODE_LAST_CHAR) \ - ? CC_PART2(((u) - UNICODE_PART2_START) / 256, (u) % 256) \ - : 0)) - -// Write the compatibility decomposition of @u into @buf, returning the number -// of characters written. @buf may be NULL, in which case the length of the -// decomposition is returned but nothing is written. If @u is its own -// decomposition, write @u into @buf and return 1. -static int decomp_compat(Unicode u, Unicode *buf) { - // decomposition tables stored as lists {character, decomp_length, offset} - // so we do a binary search - int start = 0, end = DECOMP_TABLE_LENGTH; - if (u >= decomp_table[start].character - && u <= decomp_table[end - 1].character) - while (gTrue) { - int midpoint = (start + end) / 2; - if (u == decomp_table[midpoint].character) { - int offset = decomp_table[midpoint].offset; - if (offset == -1) - break; - else { - int length = decomp_table[midpoint].length, i; - if (buf) - for (i = 0; i < length; ++i) - buf[i] = decomp_expansion[offset + i]; - return length; - } - } else if (midpoint == start) - break; - else if (u > decomp_table[midpoint].character) - start = midpoint; - else - end = midpoint; - } - if (buf) - *buf = u; - return 1; -} - -#define CI(Page, Char) \ - ((compose_table[Page] >= UNICODE_MAX_TABLE_INDEX) \ - ? (compose_table[Page] - UNICODE_MAX_TABLE_INDEX) \ - : (compose_data[compose_table[Page]][Char])) - -#define COMPOSE_INDEX(u) \ - ((((u) / 256) > (COMPOSE_TABLE_LAST)) ? 0 : CI((u) / 256, (u) % 256)) - -// If @add combines with @base, write the combination to @out and return -// gTrue. Otherwise return gFalse. -static GBool combine(Unicode base, Unicode add, Unicode *out) { - unsigned short idx_base, idx_add; - - idx_base = COMPOSE_INDEX(base); - if (idx_base >= COMPOSE_FIRST_SINGLE_START - && idx_base < COMPOSE_SECOND_START) { - if (compose_first_single[idx_base - COMPOSE_FIRST_SINGLE_START][0] - == add) { - *out = compose_first_single[idx_base - COMPOSE_FIRST_SINGLE_START][1]; - return gTrue; - } else - return gFalse; - } - - idx_add = COMPOSE_INDEX(add); - if (idx_add >= COMPOSE_SECOND_SINGLE_START) { - if (compose_second_single[idx_add - COMPOSE_SECOND_SINGLE_START][0] - == base) { - *out = compose_second_single[idx_add - COMPOSE_SECOND_SINGLE_START][1]; - return gTrue; - } else - return gFalse; - } - - if (idx_base >= COMPOSE_FIRST_START && idx_base < COMPOSE_FIRST_SINGLE_START - && idx_add >= COMPOSE_SECOND_START - && idx_add < COMPOSE_SECOND_SINGLE_START) { - Unicode o = compose_array[idx_base - COMPOSE_FIRST_START] - [idx_add - COMPOSE_SECOND_START]; - if (o) { - *out = o; - return gTrue; - } - } - - return gFalse; -} - -#define HANGUL_S_BASE 0xAC00 -#define HANGUL_L_BASE 0x1100 -#define HANGUL_V_BASE 0x1161 -#define HANGUL_T_BASE 0x11A7 -#define HANGUL_L_COUNT 19 -#define HANGUL_V_COUNT 21 -#define HANGUL_T_COUNT 28 -#define HANGUL_S_COUNT (HANGUL_L_COUNT * HANGUL_V_COUNT * HANGUL_T_COUNT) -#define HANGUL_N_COUNT (HANGUL_V_COUNT * HANGUL_T_COUNT) -#define HANGUL_IS_L(u) (((u) >= HANGUL_L_BASE) \ - && ((u) < HANGUL_L_BASE + HANGUL_L_COUNT)) -#define HANGUL_IS_V(u) (((u) >= HANGUL_V_BASE) \ - && ((u) < HANGUL_V_BASE + HANGUL_V_COUNT)) -#define HANGUL_IS_T(u) (((u) >= HANGUL_T_BASE) \ - && ((u) < HANGUL_T_BASE + HANGUL_T_COUNT)) -#define HANGUL_IS_SYLLABLE(u) (((u) >= HANGUL_S_BASE) \ - && ((u) < HANGUL_S_BASE + HANGUL_S_COUNT)) -#define HANGUL_SYLLABLE_IS_LV(u) (((u) - HANGUL_S_BASE) % HANGUL_T_COUNT == 0) -#define IS_HANGUL(u) (HANGUL_IS_L(u) || HANGUL_IS_V(u) || HANGUL_IS_T(u) \ - || HANGUL_IS_SYLLABLE(u)) -#define HANGUL_COMPOSE_L_V(l, v) (HANGUL_S_BASE + (HANGUL_T_COUNT * \ - (((v) - HANGUL_V_BASE) + (HANGUL_V_COUNT * ((l) - HANGUL_L_BASE))))) -#define HANGUL_COMPOSE_LV_T(lv, t) ((lv) + ((t) - HANGUL_T_BASE)) - -// Converts Unicode string @in of length @len to its normalization in form -// NFKC (compatibility decomposition + canonical composition). The length of -// the resulting Unicode string is returned in @out_len. If non-NULL, @indices -// is assigned the location of a newly-allocated array of length @out_len + 1, -// for each character in the normalized string giving the index in @in of the -// corresponding unnormalized character. @indices is not guaranteed monotone or -// onto. -Unicode *unicodeNormalizeNFKC(Unicode *in, int len, - int *out_len, int **indices) { - Unicode *out; - int i, o, *classes, *idx = NULL; - - for (i = 0, o = 0; i < len; ++i) { - if (HANGUL_IS_L(in[i]) || HANGUL_IS_SYLLABLE(in[i])) { - o += 1; - } else - o += decomp_compat(in[i], NULL); - } - - out = (Unicode *) gmallocn(o, sizeof(Unicode)); - classes = (int *) gmallocn(o, sizeof(int)); - if (indices) - idx = (int *) gmallocn(o + 1, sizeof(int)); - - for (i = 0, o = 0; i < len; ) { - Unicode u = in[i]; - if (IS_HANGUL(u)) { - if (HANGUL_IS_L(u)) { - Unicode l = u; - if (i+1 < len && HANGUL_IS_V(in[i+1])) { - Unicode lv = HANGUL_COMPOSE_L_V(l, in[++i]); - if (i+1 < len && HANGUL_IS_T(in[i+1])) - out[o] = HANGUL_COMPOSE_LV_T(lv, in[++i]); - else - out[o] = lv; - } else - out[o] = l; - } else if (HANGUL_SYLLABLE_IS_LV(u)) { - Unicode lv = u; - if (i+1 < len && HANGUL_IS_T(in[i+1])) - out[o] = HANGUL_COMPOSE_LV_T(lv, in[++i]); - else - out[o] = lv; - } else - out[o] = u; - if (indices) - idx[o] = i; - ++i; ++o; - } else { - int j, p, q, r, s, dlen; - // write compatibility decompositions into out (we have enough space) - // chomp in until a starter is reached - for (j = i, p = o; j < len; ++j) { - u = in[j]; - if (j != i && COMBINING_CLASS(u) == 0) - break; - dlen = decomp_compat(u, out + p); - for (q = p; q < p + dlen; ++q) { - classes[q] = COMBINING_CLASS(out[q]); - if (indices) - idx[q] = j; - } - p += dlen; - } - // put out[o, p) in canonical ordering - for (q = o + 1; q < p; ++q) - for (r = q; r > o + 1; --r) { // FIXME worth using a better sort? - int swap; - if (classes[r] >= classes[r-1]) - break; - u = out[r]; out[r] = out[r - 1]; out[r - 1] = u; - swap = classes[r]; classes[r] = classes[r - 1]; classes[r - 1] = swap; - if (indices) { - swap = idx[r]; - idx[r] = idx[r - 1]; - idx[r - 1] = swap; - } - } - // canonical compose out[o, p) - for (q = o + 1; q < p; ++q) - if (!combine(out[o], out[q], &out[o])) - break; - // move out[q, p) back to [o+1, ?) - if (q != o + 1) - for (r = q, s = o + 1; r < p; ++r, ++s) { - out[s] = out[r]; - if (indices) - idx[s] = idx[r]; - } - else - s = p; - i = j; o = s; - } - } - - *out_len = o; - gfree(classes); - if (indices) { - idx[o] = len; - *indices = idx; - } - return out; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeTypeTable.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeTypeTable.h deleted file mode 100644 index 19cd75d17f2..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/UnicodeTypeTable.h +++ /dev/null @@ -1,37 +0,0 @@ -//======================================================================== -// -// UnicodeTypeTable.h -// -// Copyright 2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006 Ed Catmur <ed@catmur.co.uk> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef UNICODETYPETABLE_H -#define UNICODETYPETABLE_H - -#include "goo/gtypes.h" - -extern GBool unicodeTypeL(Unicode c); - -extern GBool unicodeTypeR(Unicode c); - -extern Unicode unicodeToUpper(Unicode c); - -extern Unicode *unicodeNormalizeNFKC(Unicode *in, int len, - int *out_len, int **offsets); - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/ViewerPreferences.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/ViewerPreferences.cc deleted file mode 100644 index cba8d0ac512..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/ViewerPreferences.cc +++ /dev/null @@ -1,117 +0,0 @@ -//======================================================================== -// -// ViewerPreferences.cc -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2011 Pino Toscano <pino@kde.org> -// -//======================================================================== - -#include <config.h> - -#include "ViewerPreferences.h" - -#include "Object.h" -#include "Dict.h" - -ViewerPreferences::ViewerPreferences(Dict *prefDict) -{ - init(); - - Object obj; - - if (prefDict->lookup("HideToolbar", &obj)->isBool()) { - hideToolbar = obj.getBool(); - } - obj.free(); - - if (prefDict->lookup("HideMenubar", &obj)->isBool()) { - hideMenubar = obj.getBool(); - } - obj.free(); - - if (prefDict->lookup("HideWindowUI", &obj)->isBool()) { - hideWindowUI = obj.getBool(); - } - obj.free(); - - if (prefDict->lookup("FitWindow", &obj)->isBool()) { - fitWindow = obj.getBool(); - } - obj.free(); - - if (prefDict->lookup("CenterWindow", &obj)->isBool()) { - centerWindow = obj.getBool(); - } - obj.free(); - - if (prefDict->lookup("DisplayDocTitle", &obj)->isBool()) { - displayDocTitle = obj.getBool(); - } - obj.free(); - - if (prefDict->lookup("NonFullScreenPageMode", &obj)->isName()) { - const char *mode = obj.getName(); - if (!strcmp(mode, "UseNone")) { - nonFullScreenPageMode = nfpmUseNone; - } else if (!strcmp(mode, "UseOutlines")) { - nonFullScreenPageMode = nfpmUseOutlines; - } else if (!strcmp(mode, "UseThumbs")) { - nonFullScreenPageMode = nfpmUseThumbs; - } else if (!strcmp(mode, "UseOC")) { - nonFullScreenPageMode = nfpmUseOC; - } - } - obj.free(); - - if (prefDict->lookup("Direction", &obj)->isName()) { - const char *dir = obj.getName(); - if (!strcmp(dir, "L2R")) { - direction = directionL2R; - } else if (!strcmp(dir, "R2L")) { - direction = directionR2L; - } - } - obj.free(); - - if (prefDict->lookup("PrintScaling", &obj)->isName()) { - const char *ps = obj.getName(); - if (!strcmp(ps, "None")) { - printScaling = printScalingNone; - } else if (!strcmp(ps, "AppDefault")) { - printScaling = printScalingAppDefault; - } - } - obj.free(); - - if (prefDict->lookup("Duplex", &obj)->isName()) { - const char *d = obj.getName(); - if (!strcmp(d, "Simplex")) { - duplex = duplexSimplex; - } else if (!strcmp(d, "DuplexFlipShortEdge")) { - duplex = duplexDuplexFlipShortEdge; - } else if (!strcmp(d, "DuplexFlipLongEdge")) { - duplex = duplexDuplexFlipLongEdge; - } - } - obj.free(); -} - -ViewerPreferences::~ViewerPreferences() -{ -} - -void ViewerPreferences::init() -{ - hideToolbar = gFalse; - hideMenubar = gFalse; - hideWindowUI = gFalse; - fitWindow = gFalse; - centerWindow = gFalse; - displayDocTitle = gFalse; - nonFullScreenPageMode = nfpmUseNone; - direction = directionL2R; - printScaling = printScalingAppDefault; - duplex = duplexNone; -} diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/ViewerPreferences.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/ViewerPreferences.h deleted file mode 100644 index 8cdc4d40a73..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/ViewerPreferences.h +++ /dev/null @@ -1,76 +0,0 @@ -//======================================================================== -// -// ViewerPreferences.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2011 Pino Toscano <pino@kde.org> -// -//======================================================================== - -#ifndef VIEWERPREFERENCES_H -#define VIEWERPREFERENCES_H - -#include "goo/gtypes.h" - -class Dict; - -//------------------------------------------------------------------------ -// ViewerPreferences -//------------------------------------------------------------------------ - -class ViewerPreferences { -public: - - enum NonFullScreenPageMode { - nfpmUseNone, - nfpmUseOutlines, - nfpmUseThumbs, - nfpmUseOC - }; - enum Direction { - directionL2R, - directionR2L - }; - enum PrintScaling { - printScalingNone, - printScalingAppDefault - }; - enum Duplex { - duplexNone, - duplexSimplex, - duplexDuplexFlipShortEdge, - duplexDuplexFlipLongEdge - }; - - ViewerPreferences(Dict *prefDict); - ~ViewerPreferences(); - - GBool getHideToolbar() const { return hideToolbar; } - GBool getHideMenubar() const { return hideMenubar; } - GBool getHideWindowUI() const { return hideWindowUI; } - GBool getFitWindow() const { return fitWindow; } - GBool getCenterWindow() const { return centerWindow; } - GBool getDisplayDocTitle() const { return displayDocTitle; } - NonFullScreenPageMode getNonFullScreenPageMode() const { return nonFullScreenPageMode; } - Direction getDirection() const { return direction; } - PrintScaling getPrintScaling() const { return printScaling; } - Duplex getDuplex() const { return duplex; } - -private: - - void init(); - - GBool hideToolbar; - GBool hideMenubar; - GBool hideWindowUI; - GBool fitWindow; - GBool centerWindow; - GBool displayDocTitle; - NonFullScreenPageMode nonFullScreenPageMode; - Direction direction; - PrintScaling printScaling; - Duplex duplex; -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/XRef.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/XRef.cc deleted file mode 100644 index 970a00bf25a..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/XRef.cc +++ /dev/null @@ -1,1351 +0,0 @@ -//======================================================================== -// -// XRef.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Dan Sheridan <dan.sheridan@postman.org.uk> -// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> -// Copyright (C) 2006, 2008, 2010 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2007-2008 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2007 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2009, 2010 Ilya Gorenbein <igorenbein@finjan.com> -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include <config.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <stddef.h> -#include <string.h> -#include <ctype.h> -#include <limits.h> -#include "goo/gmem.h" -#include "Object.h" -#include "Stream.h" -#include "Lexer.h" -#include "Parser.h" -#include "Dict.h" -#include "Error.h" -#include "ErrorCodes.h" -#include "XRef.h" -#include "PopplerCache.h" - -//------------------------------------------------------------------------ -// Permission bits -// Note that the PDF spec uses 1 base (eg bit 3 is 1<<2) -//------------------------------------------------------------------------ - -#define permPrint (1<<2) // bit 3 -#define permChange (1<<3) // bit 4 -#define permCopy (1<<4) // bit 5 -#define permNotes (1<<5) // bit 6 -#define permFillForm (1<<8) // bit 9 -#define permAccessibility (1<<9) // bit 10 -#define permAssemble (1<<10) // bit 11 -#define permHighResPrint (1<<11) // bit 12 -#define defPermFlags 0xfffc - -//------------------------------------------------------------------------ -// ObjectStream -//------------------------------------------------------------------------ - -class ObjectStream { -public: - - // Create an object stream, using object number <objStrNum>, - // generation 0. - ObjectStream(XRef *xref, int objStrNumA); - - GBool isOk() { return ok; } - - ~ObjectStream(); - - // Return the object number of this object stream. - int getObjStrNum() { return objStrNum; } - - // Get the <objIdx>th object from this stream, which should be - // object number <objNum>, generation 0. - Object *getObject(int objIdx, int objNum, Object *obj); - -private: - - int objStrNum; // object number of the object stream - int nObjects; // number of objects in the stream - Object *objs; // the objects (length = nObjects) - int *objNums; // the object numbers (length = nObjects) - GBool ok; -}; - -class ObjectStreamKey : public PopplerCacheKey -{ - public: - ObjectStreamKey(int num) : objStrNum(num) - { - } - - bool operator==(const PopplerCacheKey &key) const - { - const ObjectStreamKey *k = static_cast<const ObjectStreamKey*>(&key); - return objStrNum == k->objStrNum; - } - - const int objStrNum; -}; - -class ObjectStreamItem : public PopplerCacheItem -{ - public: - ObjectStreamItem(ObjectStream *objStr) : objStream(objStr) - { - } - - ~ObjectStreamItem() - { - delete objStream; - } - - ObjectStream *objStream; -}; - -ObjectStream::ObjectStream(XRef *xref, int objStrNumA) { - Stream *str; - Parser *parser; - int *offsets; - Object objStr, obj1, obj2; - int first, i; - - objStrNum = objStrNumA; - nObjects = 0; - objs = NULL; - objNums = NULL; - ok = gFalse; - - if (!xref->fetch(objStrNum, 0, &objStr)->isStream()) { - goto err1; - } - - if (!objStr.streamGetDict()->lookup("N", &obj1)->isInt()) { - obj1.free(); - goto err1; - } - nObjects = obj1.getInt(); - obj1.free(); - if (nObjects <= 0) { - goto err1; - } - - if (!objStr.streamGetDict()->lookup("First", &obj1)->isInt()) { - obj1.free(); - goto err1; - } - first = obj1.getInt(); - obj1.free(); - if (first < 0) { - goto err1; - } - - // this is an arbitrary limit to avoid integer overflow problems - // in the 'new Object[nObjects]' call (Acrobat apparently limits - // object streams to 100-200 objects) - if (nObjects > 1000000) { - error(-1, "Too many objects in an object stream"); - goto err1; - } - objs = new Object[nObjects]; - objNums = (int *)gmallocn(nObjects, sizeof(int)); - offsets = (int *)gmallocn(nObjects, sizeof(int)); - - // parse the header: object numbers and offsets - objStr.streamReset(); - obj1.initNull(); - str = new EmbedStream(objStr.getStream(), &obj1, gTrue, first); - parser = new Parser(xref, new Lexer(xref, str), gFalse); - for (i = 0; i < nObjects; ++i) { - parser->getObj(&obj1); - parser->getObj(&obj2); - if (!obj1.isInt() || !obj2.isInt()) { - obj1.free(); - obj2.free(); - delete parser; - gfree(offsets); - goto err1; - } - objNums[i] = obj1.getInt(); - offsets[i] = obj2.getInt(); - obj1.free(); - obj2.free(); - if (objNums[i] < 0 || offsets[i] < 0 || - (i > 0 && offsets[i] < offsets[i-1])) { - delete parser; - gfree(offsets); - goto err1; - } - } - while (str->getChar() != EOF) ; - delete parser; - - // skip to the first object - this shouldn't be necessary because - // the First key is supposed to be equal to offsets[0], but just in - // case... - for (i = first; i < offsets[0]; ++i) { - objStr.getStream()->getChar(); - } - - // parse the objects - for (i = 0; i < nObjects; ++i) { - obj1.initNull(); - if (i == nObjects - 1) { - str = new EmbedStream(objStr.getStream(), &obj1, gFalse, 0); - } else { - str = new EmbedStream(objStr.getStream(), &obj1, gTrue, - offsets[i+1] - offsets[i]); - } - parser = new Parser(xref, new Lexer(xref, str), gFalse); - parser->getObj(&objs[i]); - while (str->getChar() != EOF) ; - delete parser; - } - - gfree(offsets); - ok = gTrue; - - err1: - objStr.free(); -} - -ObjectStream::~ObjectStream() { - int i; - - if (objs) { - for (i = 0; i < nObjects; ++i) { - objs[i].free(); - } - delete[] objs; - } - gfree(objNums); -} - -Object *ObjectStream::getObject(int objIdx, int objNum, Object *obj) { - if (objIdx < 0 || objIdx >= nObjects || objNum != objNums[objIdx]) { - return obj->initNull(); - } - return objs[objIdx].copy(obj); -} - -//------------------------------------------------------------------------ -// XRef -//------------------------------------------------------------------------ - -void XRef::init() { - ok = gTrue; - errCode = errNone; - entries = NULL; - capacity = 0; - size = 0; - streamEnds = NULL; - streamEndsLen = 0; - objStrs = new PopplerCache(5); - mainXRefEntriesOffset = 0; - xRefStream = gFalse; -} - -XRef::XRef() { - init(); -} - -XRef::XRef(BaseStream *strA, Guint pos, Guint mainXRefEntriesOffsetA, GBool *wasReconstructed, GBool reconstruct) { - Object obj; - - init(); - mainXRefEntriesOffset = mainXRefEntriesOffsetA; - - encrypted = gFalse; - permFlags = defPermFlags; - ownerPasswordOk = gFalse; - - // read the trailer - str = strA; - start = str->getStart(); - prevXRefOffset = pos; - - if (reconstruct && !(ok = constructXRef(wasReconstructed))) - { - errCode = errDamaged; - return; - } - else - { - // if there was a problem with the 'startxref' position, try to - // reconstruct the xref table - if (prevXRefOffset == 0) { - if (!(ok = constructXRef(wasReconstructed))) { - errCode = errDamaged; - return; - } - - // read the xref table - } else { - std::vector<Guint> followedXRefStm; - readXRef(&prevXRefOffset, &followedXRefStm); - - // if there was a problem with the xref table, - // try to reconstruct it - if (!ok) { - if (!(ok = constructXRef(wasReconstructed))) { - errCode = errDamaged; - return; - } - } - } - - // set size to (at least) the size specified in trailer dict - trailerDict.dictLookupNF("Size", &obj); - if (!obj.isInt()) { - error(-1, "No valid XRef size in trailer"); - } else { - if (obj.getInt() > size) { - if (resize(obj.getInt()) != obj.getInt()) { - if (!(ok = constructXRef(wasReconstructed))) { - obj.free(); - errCode = errDamaged; - return; - } - } - } - } - obj.free(); - - // get the root dictionary (catalog) object - trailerDict.dictLookupNF("Root", &obj); - if (obj.isRef()) { - rootNum = obj.getRefNum(); - rootGen = obj.getRefGen(); - obj.free(); - } else { - obj.free(); - if (!(ok = constructXRef(wasReconstructed))) { - errCode = errDamaged; - return; - } - } - } - // now set the trailer dictionary's xref pointer so we can fetch - // indirect objects from it - trailerDict.getDict()->setXRef(this); -} - -XRef::~XRef() { - for(int i=0; i<size; i++) { - entries[i].obj.free (); - } - gfree(entries); - - trailerDict.free(); - if (streamEnds) { - gfree(streamEnds); - } - if (objStrs) { - delete objStrs; - } -} - -int XRef::reserve(int newSize) -{ - if (newSize > capacity) { - - int realNewSize; - for (realNewSize = capacity ? 2 * capacity : 1024; - newSize > realNewSize && realNewSize > 0; - realNewSize <<= 1) ; - if ((realNewSize < 0) || - (realNewSize >= INT_MAX / (int)sizeof(XRefEntry))) { - return 0; - } - - void *p = greallocn_checkoverflow(entries, realNewSize, sizeof(XRefEntry)); - if (p == NULL) { - return 0; - } - - entries = (XRefEntry *) p; - capacity = realNewSize; - - } - - return capacity; -} - -int XRef::resize(int newSize) -{ - if (newSize > size) { - - if (reserve(newSize) < newSize) return size; - - for (int i = size; i < newSize; ++i) { - entries[i].offset = 0xffffffff; - entries[i].type = xrefEntryNone; - entries[i].obj.initNull (); - entries[i].updated = false; - entries[i].gen = 0; - } - } else { - for (int i = newSize; i < size; i++) { - entries[i].obj.free (); - } - } - - size = newSize; - - return size; -} - -// Read one xref table section. Also reads the associated trailer -// dictionary, and returns the prev pointer (if any). -GBool XRef::readXRef(Guint *pos, std::vector<Guint> *followedXRefStm) { - Parser *parser; - Object obj; - GBool more; - - // start up a parser, parse one token - obj.initNull(); - parser = new Parser(NULL, - new Lexer(NULL, - str->makeSubStream(start + *pos, gFalse, 0, &obj)), - gTrue); - parser->getObj(&obj); - - // parse an old-style xref table - if (obj.isCmd("xref")) { - obj.free(); - more = readXRefTable(parser, pos, followedXRefStm); - - // parse an xref stream - } else if (obj.isInt()) { - obj.free(); - if (!parser->getObj(&obj)->isInt()) { - goto err1; - } - obj.free(); - if (!parser->getObj(&obj)->isCmd("obj")) { - goto err1; - } - obj.free(); - if (!parser->getObj(&obj)->isStream()) { - goto err1; - } - if (trailerDict.isNone()) { - xRefStream = gTrue; - } - more = readXRefStream(obj.getStream(), pos); - obj.free(); - - } else { - goto err1; - } - - delete parser; - return more; - - err1: - obj.free(); - delete parser; - ok = gFalse; - return gFalse; -} - -GBool XRef::readXRefTable(Parser *parser, Guint *pos, std::vector<Guint> *followedXRefStm) { - XRefEntry entry; - GBool more; - Object obj, obj2; - Guint pos2; - int first, n, i; - - while (1) { - parser->getObj(&obj); - if (obj.isCmd("trailer")) { - obj.free(); - break; - } - if (!obj.isInt()) { - goto err1; - } - first = obj.getInt(); - obj.free(); - if (!parser->getObj(&obj)->isInt()) { - goto err1; - } - n = obj.getInt(); - obj.free(); - if (first < 0 || n < 0 || first + n < 0) { - goto err0; - } - if (first + n > size) { - if (resize(first + n) != first + n) { - error(-1, "Invalid 'obj' parameters'"); - goto err0; - } - } - for (i = first; i < first + n; ++i) { - if (!parser->getObj(&obj)->isInt()) { - goto err1; - } - entry.offset = (Guint)obj.getInt(); - obj.free(); - if (!parser->getObj(&obj)->isInt()) { - goto err1; - } - entry.gen = obj.getInt(); - entry.obj.initNull (); - entry.updated = false; - obj.free(); - parser->getObj(&obj); - if (obj.isCmd("n")) { - entry.type = xrefEntryUncompressed; - } else if (obj.isCmd("f")) { - entry.type = xrefEntryFree; - } else { - goto err1; - } - obj.free(); - if (entries[i].offset == 0xffffffff) { - entries[i] = entry; - // PDF files of patents from the IBM Intellectual Property - // Network have a bug: the xref table claims to start at 1 - // instead of 0. - if (i == 1 && first == 1 && - entries[1].offset == 0 && entries[1].gen == 65535 && - entries[1].type == xrefEntryFree) { - i = first = 0; - entries[0] = entries[1]; - entries[1].offset = 0xffffffff; - } - } - } - } - - // read the trailer dictionary - if (!parser->getObj(&obj)->isDict()) { - goto err1; - } - - // get the 'Prev' pointer - obj.getDict()->lookupNF("Prev", &obj2); - if (obj2.isInt()) { - *pos = (Guint)obj2.getInt(); - more = gTrue; - } else if (obj2.isRef()) { - // certain buggy PDF generators generate "/Prev NNN 0 R" instead - // of "/Prev NNN" - *pos = (Guint)obj2.getRefNum(); - more = gTrue; - } else { - more = gFalse; - } - obj2.free(); - - // save the first trailer dictionary - if (trailerDict.isNone()) { - obj.copy(&trailerDict); - } - - // check for an 'XRefStm' key - if (obj.getDict()->lookup("XRefStm", &obj2)->isInt()) { - pos2 = (Guint)obj2.getInt(); - for (size_t i = 0; ok == gTrue && i < followedXRefStm->size(); ++i) { - if (followedXRefStm->at(i) == pos2) { - ok = gFalse; - } - } - if (ok) { - followedXRefStm->push_back(pos2); - readXRef(&pos2, followedXRefStm); - } - if (!ok) { - obj2.free(); - goto err1; - } - } - obj2.free(); - - obj.free(); - return more; - - err1: - obj.free(); - err0: - ok = gFalse; - return gFalse; -} - -GBool XRef::readXRefStream(Stream *xrefStr, Guint *pos) { - Dict *dict; - int w[3]; - GBool more; - Object obj, obj2, idx; - int newSize, first, n, i; - - dict = xrefStr->getDict(); - - if (!dict->lookupNF("Size", &obj)->isInt()) { - goto err1; - } - newSize = obj.getInt(); - obj.free(); - if (newSize < 0) { - goto err1; - } - if (newSize > size) { - if (resize(newSize) != newSize) { - error(-1, "Invalid 'size' parameter"); - goto err0; - } - } - - if (!dict->lookupNF("W", &obj)->isArray() || - obj.arrayGetLength() < 3) { - goto err1; - } - for (i = 0; i < 3; ++i) { - if (!obj.arrayGet(i, &obj2)->isInt()) { - obj2.free(); - goto err1; - } - w[i] = obj2.getInt(); - obj2.free(); - if (w[i] < 0 || w[i] > 4) { - goto err1; - } - } - obj.free(); - - xrefStr->reset(); - dict->lookupNF("Index", &idx); - if (idx.isArray()) { - for (i = 0; i+1 < idx.arrayGetLength(); i += 2) { - if (!idx.arrayGet(i, &obj)->isInt()) { - idx.free(); - goto err1; - } - first = obj.getInt(); - obj.free(); - if (!idx.arrayGet(i+1, &obj)->isInt()) { - idx.free(); - goto err1; - } - n = obj.getInt(); - obj.free(); - if (first < 0 || n < 0 || - !readXRefStreamSection(xrefStr, w, first, n)) { - idx.free(); - goto err0; - } - } - } else { - if (!readXRefStreamSection(xrefStr, w, 0, newSize)) { - idx.free(); - goto err0; - } - } - idx.free(); - - dict->lookupNF("Prev", &obj); - if (obj.isInt()) { - *pos = (Guint)obj.getInt(); - more = gTrue; - } else { - more = gFalse; - } - obj.free(); - if (trailerDict.isNone()) { - trailerDict.initDict(dict); - } - - return more; - - err1: - obj.free(); - err0: - ok = gFalse; - return gFalse; -} - -GBool XRef::readXRefStreamSection(Stream *xrefStr, int *w, int first, int n) { - Guint offset; - int type, gen, c, i, j; - - if (first + n < 0) { - return gFalse; - } - if (first + n > size) { - if (resize(first + n) != size) { - error(-1, "Invalid 'size' inside xref table"); - return gFalse; - } - } - for (i = first; i < first + n; ++i) { - if (w[0] == 0) { - type = 1; - } else { - for (type = 0, j = 0; j < w[0]; ++j) { - if ((c = xrefStr->getChar()) == EOF) { - return gFalse; - } - type = (type << 8) + c; - } - } - for (offset = 0, j = 0; j < w[1]; ++j) { - if ((c = xrefStr->getChar()) == EOF) { - return gFalse; - } - offset = (offset << 8) + c; - } - for (gen = 0, j = 0; j < w[2]; ++j) { - if ((c = xrefStr->getChar()) == EOF) { - return gFalse; - } - gen = (gen << 8) + c; - } - if (entries[i].offset == 0xffffffff) { - switch (type) { - case 0: - entries[i].offset = offset; - entries[i].gen = gen; - entries[i].type = xrefEntryFree; - break; - case 1: - entries[i].offset = offset; - entries[i].gen = gen; - entries[i].type = xrefEntryUncompressed; - break; - case 2: - entries[i].offset = offset; - entries[i].gen = gen; - entries[i].type = xrefEntryCompressed; - break; - default: - return gFalse; - } - } - } - - return gTrue; -} - -// Attempt to construct an xref table for a damaged file. -GBool XRef::constructXRef(GBool *wasReconstructed) { - Parser *parser; - Object newTrailerDict, obj; - char buf[256]; - Guint pos; - int num, gen; - int newSize; - int streamEndsSize; - char *p; - GBool gotRoot; - char* token = NULL; - bool oneCycle = true; - int offset = 0; - - gfree(entries); - capacity = 0; - size = 0; - entries = NULL; - - error(-1, "PDF file is damaged - attempting to reconstruct xref table..."); - gotRoot = gFalse; - streamEndsLen = streamEndsSize = 0; - - if (wasReconstructed) - { - *wasReconstructed = true; - } - - str->reset(); - while (1) { - pos = str->getPos(); - if (!str->getLine(buf, 256)) { - break; - } - p = buf; - - // skip whitespace - while (*p && Lexer::isSpace(*p & 0xff)) ++p; - - oneCycle = true; - offset = 0; - - while( ( token = strstr( p, "endobj" ) ) || oneCycle ) { - oneCycle = false; - - if( token ) { - oneCycle = true; - token[0] = '\0'; - offset = token - p; - } - - // got trailer dictionary - if (!strncmp(p, "trailer", 7)) { - obj.initNull(); - parser = new Parser(NULL, - new Lexer(NULL, - str->makeSubStream(pos + 7, gFalse, 0, &obj)), - gFalse); - parser->getObj(&newTrailerDict); - if (newTrailerDict.isDict()) { - newTrailerDict.dictLookupNF("Root", &obj); - if (obj.isRef()) { - rootNum = obj.getRefNum(); - rootGen = obj.getRefGen(); - if (!trailerDict.isNone()) { - trailerDict.free(); - } - newTrailerDict.copy(&trailerDict); - gotRoot = gTrue; - } - obj.free(); - } - newTrailerDict.free(); - delete parser; - - // look for object - } else if (isdigit(*p)) { - num = atoi(p); - if (num > 0) { - do { - ++p; - } while (*p && isdigit(*p)); - if (isspace(*p)) { - do { - ++p; - } while (*p && isspace(*p)); - if (isdigit(*p)) { - gen = atoi(p); - do { - ++p; - } while (*p && isdigit(*p)); - if (isspace(*p)) { - do { - ++p; - } while (*p && isspace(*p)); - if (!strncmp(p, "obj", 3)) { - if (num >= size) { - newSize = (num + 1 + 255) & ~255; - if (newSize < 0) { - error(-1, "Bad object number"); - return gFalse; - } - if (resize(newSize) != newSize) { - error(-1, "Invalid 'obj' parameters"); - return gFalse; - } - } - if (entries[num].type == xrefEntryFree || - gen >= entries[num].gen) { - entries[num].offset = pos - start; - entries[num].gen = gen; - entries[num].type = xrefEntryUncompressed; - } - } - } - } - } - } - - } else if (!strncmp(p, "endstream", 9)) { - if (streamEndsLen == streamEndsSize) { - streamEndsSize += 64; - if (streamEndsSize >= INT_MAX / (int)sizeof(int)) { - error(-1, "Invalid 'endstream' parameter."); - return gFalse; - } - streamEnds = (Guint *)greallocn(streamEnds, - streamEndsSize, sizeof(int)); - } - streamEnds[streamEndsLen++] = pos; - } - if( token ) { - p = token + 6;// strlen( "endobj" ) = 6 - pos += offset + 6;// strlen( "endobj" ) = 6 - while (*p && Lexer::isSpace(*p & 0xff)) { - ++p; - ++pos; - } - } - } - } - - if (gotRoot) - return gTrue; - - error(-1, "Couldn't find trailer dictionary"); - return gFalse; -} - -void XRef::setEncryption(int permFlagsA, GBool ownerPasswordOkA, - Guchar *fileKeyA, int keyLengthA, - int encVersionA, int encRevisionA, - CryptAlgorithm encAlgorithmA) { - int i; - - encrypted = gTrue; - permFlags = permFlagsA; - ownerPasswordOk = ownerPasswordOkA; - if (keyLengthA <= 16) { - keyLength = keyLengthA; - } else { - keyLength = 16; - } - for (i = 0; i < keyLength; ++i) { - fileKey[i] = fileKeyA[i]; - } - encVersion = encVersionA; - encRevision = encRevisionA; - encAlgorithm = encAlgorithmA; -} - -GBool XRef::okToPrint(GBool ignoreOwnerPW) { - return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permPrint); -} - -// we can print at high res if we are only doing security handler revision -// 2 (and we are allowed to print at all), or with security handler rev -// 3 and we are allowed to print, and bit 12 is set. -GBool XRef::okToPrintHighRes(GBool ignoreOwnerPW) { - if (encrypted) { - if (2 == encRevision) { - return (okToPrint(ignoreOwnerPW)); - } else if (encRevision >= 3) { - return (okToPrint(ignoreOwnerPW) && (permFlags & permHighResPrint)); - } else { - // something weird - unknown security handler version - return gFalse; - } - } else { - return gTrue; - } -} - -GBool XRef::okToChange(GBool ignoreOwnerPW) { - return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permChange); -} - -GBool XRef::okToCopy(GBool ignoreOwnerPW) { - return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permCopy); -} - -GBool XRef::okToAddNotes(GBool ignoreOwnerPW) { - return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permNotes); -} - -GBool XRef::okToFillForm(GBool ignoreOwnerPW) { - return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permFillForm); -} - -GBool XRef::okToAccessibility(GBool ignoreOwnerPW) { - return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permAccessibility); -} - -GBool XRef::okToAssemble(GBool ignoreOwnerPW) { - return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permAssemble); -} - -Object *XRef::fetch(int num, int gen, Object *obj, std::set<int> *fetchOriginatorNums) { - XRefEntry *e; - Parser *parser; - Object obj1, obj2, obj3; - bool deleteFetchOriginatorNums = false; - std::pair<std::set<int>::iterator, bool> fetchInsertResult; - - // check for bogus ref - this can happen in corrupted PDF files - if (num < 0 || num >= size || (fetchOriginatorNums != NULL && fetchOriginatorNums->find(num) != fetchOriginatorNums->end())) { - goto err2; - } - - e = getEntry(num); - if(!e->obj.isNull ()) { //check for updated object - obj = e->obj.copy(obj); - return obj; - } - - if (fetchOriginatorNums == NULL) { - fetchOriginatorNums = new std::set<int>(); - deleteFetchOriginatorNums = true; - } - fetchInsertResult = fetchOriginatorNums->insert(num); - - switch (e->type) { - - case xrefEntryUncompressed: - if (e->gen != gen) { - goto err; - } - obj1.initNull(); - parser = new Parser(this, - new Lexer(this, - str->makeSubStream(start + e->offset, gFalse, 0, &obj1)), - gTrue); - parser->getObj(&obj1, fetchOriginatorNums); - parser->getObj(&obj2, fetchOriginatorNums); - parser->getObj(&obj3, fetchOriginatorNums); - if (!obj1.isInt() || obj1.getInt() != num || - !obj2.isInt() || obj2.getInt() != gen || - !obj3.isCmd("obj")) { - // some buggy pdf have obj1234 for ints that represent 1234 - // try to recover here - if (obj1.isInt() && obj1.getInt() == num && - obj2.isInt() && obj2.getInt() == gen && - obj3.isCmd()) { - char *cmd = obj3.getCmd(); - if (strlen(cmd) > 3 && - cmd[0] == 'o' && - cmd[1] == 'b' && - cmd[2] == 'j') { - char *end_ptr; - long longNumber = strtol(cmd + 3, &end_ptr, 0); - if (longNumber <= INT_MAX && longNumber >= INT_MIN && *end_ptr == '\0') { - int number = longNumber; - error(-1, "Cmd was not obj but %s, assuming the creator meant obj %d", cmd, number); - obj->initInt(number); - obj1.free(); - obj2.free(); - obj3.free(); - delete parser; - break; - } - } - } - obj1.free(); - obj2.free(); - obj3.free(); - delete parser; - goto err; - } - parser->getObj(obj, encrypted ? fileKey : (Guchar *)NULL, - encAlgorithm, keyLength, num, gen, fetchOriginatorNums); - obj1.free(); - obj2.free(); - obj3.free(); - delete parser; - break; - - case xrefEntryCompressed: - { - if (gen != 0) { - goto err; - } - - ObjectStream *objStr = NULL; - ObjectStreamKey key(e->offset); - PopplerCacheItem *item = objStrs->lookup(key); - if (item) { - ObjectStreamItem *it = static_cast<ObjectStreamItem *>(item); - objStr = it->objStream; - } - - if (!objStr) { - objStr = new ObjectStream(this, e->offset); - if (!objStr->isOk()) { - delete objStr; - objStr = NULL; - goto err; - } else { - ObjectStreamKey *newkey = new ObjectStreamKey(e->offset); - ObjectStreamItem *newitem = new ObjectStreamItem(objStr); - objStrs->put(newkey, newitem); - } - } - objStr->getObject(e->gen, num, obj); - } - break; - - default: - goto err; - } - - if (deleteFetchOriginatorNums) { - delete fetchOriginatorNums; - } else { - fetchOriginatorNums->erase(fetchInsertResult.first); - } - return obj; - - err: - if (deleteFetchOriginatorNums) { - delete fetchOriginatorNums; - } else { - fetchOriginatorNums->erase(fetchInsertResult.first); - } - err2: - return obj->initNull(); -} - -Object *XRef::getDocInfo(Object *obj) { - return trailerDict.dictLookup("Info", obj); -} - -// Added for the pdftex project. -Object *XRef::getDocInfoNF(Object *obj) { - return trailerDict.dictLookupNF("Info", obj); -} - -GBool XRef::getStreamEnd(Guint streamStart, Guint *streamEnd) { - int a, b, m; - - if (streamEndsLen == 0 || - streamStart > streamEnds[streamEndsLen - 1]) { - return gFalse; - } - - a = -1; - b = streamEndsLen - 1; - // invariant: streamEnds[a] < streamStart <= streamEnds[b] - while (b - a > 1) { - m = (a + b) / 2; - if (streamStart <= streamEnds[m]) { - b = m; - } else { - a = m; - } - } - *streamEnd = streamEnds[b]; - return gTrue; -} - -int XRef::getNumEntry(Guint offset) -{ - if (size > 0) - { - int res = 0; - Guint resOffset = getEntry(0)->offset; - XRefEntry *e; - for (int i = 1; i < size; ++i) - { - e = getEntry(i); - if (e->offset < offset && e->offset >= resOffset) - { - res = i; - resOffset = e->offset; - } - } - return res; - } - else return -1; -} - -void XRef::add(int num, int gen, Guint offs, GBool used) { - if (num >= size) { - if (num >= capacity) { - entries = (XRefEntry *)greallocn(entries, num + 1, sizeof(XRefEntry)); - capacity = num + 1; - } - for (int i = size; i < num + 1; ++i) { - entries[i].offset = 0xffffffff; - entries[i].type = xrefEntryFree; - entries[i].obj.initNull (); - entries[i].updated = false; - entries[i].gen = 0; - } - size = num + 1; - } - XRefEntry *e = getEntry(num); - e->gen = gen; - e->obj.initNull (); - e->updated = false; - if (used) { - e->type = xrefEntryUncompressed; - e->offset = offs; - } else { - e->type = xrefEntryFree; - e->offset = 0; - } -} - -void XRef::setModifiedObject (Object* o, Ref r) { - if (r.num < 0 || r.num >= size) { - error(-1,"XRef::setModifiedObject on unknown ref: %i, %i\n", r.num, r.gen); - return; - } - XRefEntry *e = getEntry(r.num); - e->obj.free(); - o->copy(&(e->obj)); - e->updated = true; -} - -Ref XRef::addIndirectObject (Object* o) { - int entryIndexToUse = -1; - for (int i = 1; entryIndexToUse == -1 && i < size; ++i) { - if (getEntry(i)->type == xrefEntryFree) entryIndexToUse = i; - } - - XRefEntry *e; - if (entryIndexToUse == -1) { - entryIndexToUse = size; - add(entryIndexToUse, 0, 0, gFalse); - e = getEntry(entryIndexToUse); - } else { - //reuse a free entry - e = getEntry(entryIndexToUse); - //we don't touch gen number, because it should have been - //incremented when the object was deleted - } - e->type = xrefEntryUncompressed; - o->copy(&e->obj); - e->updated = true; - - Ref r; - r.num = entryIndexToUse; - r.gen = e->gen; - return r; -} - -void XRef::writeToFile(OutStream* outStr, GBool writeAllEntries) { - //create free entries linked-list - if (getEntry(0)->gen != 65535) { - error(-1, "XRef::writeToFile, entry 0 of the XRef is invalid (gen != 65535)\n"); - } - int lastFreeEntry = 0; - for (int i=0; i<size; i++) { - if (getEntry(i)->type == xrefEntryFree) { - getEntry(lastFreeEntry)->offset = i; - lastFreeEntry = i; - } - } - - if (writeAllEntries) { - //write the new xref - outStr->printf("xref\r\n"); - outStr->printf("%i %i\r\n", 0, size); - for (int i=0; i<size; i++) { - XRefEntry *e = getEntry(i); - - if(e->gen > 65535) e->gen = 65535; //cap generation number to 65535 (required by PDFReference) - outStr->printf("%010i %05i %c\r\n", e->offset, e->gen, (e->type==xrefEntryFree)?'f':'n'); - } - } else { - //write the new xref - outStr->printf("xref\r\n"); - int i = 0; - while (i < size) { - int j; - for(j=i; j<size; j++) { //look for consecutive entries - if ((getEntry(j)->type == xrefEntryFree) && (getEntry(j)->gen == 0)) - break; - } - if (j-i != 0) - { - outStr->printf("%i %i\r\n", i, j-i); - for (int k=i; k<j; k++) { - XRefEntry *e = getEntry(k); - if(e->gen > 65535) e->gen = 65535; //cap generation number to 65535 (required by PDFReference) - outStr->printf("%010i %05i %c\r\n", e->offset, e->gen, (e->type==xrefEntryFree)?'f':'n'); - } - i = j; - } - else ++i; - } - } -} - -GBool XRef::parseEntry(Guint offset, XRefEntry *entry) -{ - GBool r; - - Object obj; - obj.initNull(); - Parser parser = Parser(NULL, new Lexer(NULL, - str->makeSubStream(offset, gFalse, 20, &obj)), gTrue); - - Object obj1, obj2, obj3; - if ((parser.getObj(&obj1)->isInt()) && - (parser.getObj(&obj2)->isInt()) && - (parser.getObj(&obj3)->isCmd("n") || obj3.isCmd("f"))) { - entry->offset = (Guint) obj1.getInt(); - entry->gen = obj2.getInt(); - entry->type = obj3.isCmd("n") ? xrefEntryUncompressed : xrefEntryFree; - entry->obj.initNull (); - entry->updated = false; - r = gTrue; - } else { - r = gFalse; - } - obj1.free(); - obj2.free(); - obj3.free(); - - return r; -} - -XRefEntry *XRef::getEntry(int i) -{ - if (entries[i].type == xrefEntryNone) { - - if ((!xRefStream) && mainXRefEntriesOffset) { - if (!parseEntry(mainXRefEntriesOffset + 20*i, &entries[i])) { - error(-1, "Failed to parse XRef entry [%d].", i); - } - } else { - std::vector<Guint> followedPrev; - while (prevXRefOffset && entries[i].type == xrefEntryNone) { - bool followed = false; - for (size_t j = 0; j < followedPrev.size(); j++) { - if (followedPrev.at(j) == prevXRefOffset) { - followed = true; - break; - } - } - if (followed) { - error(-1, "Circular XRef"); - if (!(ok = constructXRef(NULL))) { - errCode = errDamaged; - } - break; - } - - followedPrev.push_back (prevXRefOffset); - - std::vector<Guint> followedXRefStm; - if (!readXRef(&prevXRefOffset, &followedXRefStm)) { - prevXRefOffset = 0; - } - - // if there was a problem with the xref table, - // try to reconstruct it - if (!ok) { - GBool wasReconstructed = false; - if (!(ok = constructXRef(&wasReconstructed))) { - errCode = errDamaged; - break; - } - break; - } - } - - if (entries[i].type == xrefEntryNone) { - error(-1, "Invalid XRef entry"); - entries[i].type = xrefEntryFree; - } - } - } - - return &entries[i]; -} - - diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/XRef.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/XRef.h deleted file mode 100644 index 8b77b6c0be1..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/XRef.h +++ /dev/null @@ -1,176 +0,0 @@ -//======================================================================== -// -// XRef.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> -// Copyright (C) 2006, 2008, 2010, 2011 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2007-2008 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2007 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2010 Ilya Gorenbein <igorenbein@finjan.com> -// Copyright 2010 Hib Eris <hib@hiberis.nl> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef XREF_H -#define XREF_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/gtypes.h" -#include "Object.h" - -#include <vector> - -class Dict; -class Stream; -class Parser; -class PopplerCache; - -//------------------------------------------------------------------------ -// XRef -//------------------------------------------------------------------------ - -enum XRefEntryType { - xrefEntryFree, - xrefEntryUncompressed, - xrefEntryCompressed, - xrefEntryNone -}; - -struct XRefEntry { - Guint offset; - int gen; - XRefEntryType type; - bool updated; - Object obj; //if this entry was updated, obj will contains the updated object -}; - -class XRef { -public: - - // Constructor, create an empty XRef, used for PDF writing - XRef(); - // Constructor. Read xref table from stream. - XRef(BaseStream *strA, Guint pos, Guint mainXRefEntriesOffsetA = 0, GBool *wasReconstructed = NULL, GBool reconstruct = false); - - // Destructor. - ~XRef(); - - // Is xref table valid? - GBool isOk() { return ok; } - - // Get the error code (if isOk() returns false). - int getErrorCode() { return errCode; } - - // Set the encryption parameters. - void setEncryption(int permFlagsA, GBool ownerPasswordOkA, - Guchar *fileKeyA, int keyLengthA, - int encVersionA, int encRevisionA, - CryptAlgorithm encAlgorithmA); - - // Is the file encrypted? - GBool isEncrypted() { return encrypted; } - - // Check various permissions. - GBool okToPrint(GBool ignoreOwnerPW = gFalse); - GBool okToPrintHighRes(GBool ignoreOwnerPW = gFalse); - GBool okToChange(GBool ignoreOwnerPW = gFalse); - GBool okToCopy(GBool ignoreOwnerPW = gFalse); - GBool okToAddNotes(GBool ignoreOwnerPW = gFalse); - GBool okToFillForm(GBool ignoreOwnerPW = gFalse); - GBool okToAccessibility(GBool ignoreOwnerPW = gFalse); - GBool okToAssemble(GBool ignoreOwnerPW = gFalse); - - // Get catalog object. - Object *getCatalog(Object *obj) { return fetch(rootNum, rootGen, obj); } - - // Fetch an indirect reference. - Object *fetch(int num, int gen, Object *obj, std::set<int> *fetchOriginatorNums = NULL); - - // Return the document's Info dictionary (if any). - Object *getDocInfo(Object *obj); - Object *getDocInfoNF(Object *obj); - - // Return the number of objects in the xref table. - int getNumObjects() { return size; } - - // Return the catalog object reference. - int getRootNum() { return rootNum; } - int getRootGen() { return rootGen; } - - // Get end position for a stream in a damaged file. - // Returns false if unknown or file is not damaged. - GBool getStreamEnd(Guint streamStart, Guint *streamEnd); - - // Retuns the entry that belongs to the offset - int getNumEntry(Guint offset); - - // Direct access. - int getSize() { return size; } - XRefEntry *getEntry(int i); - Object *getTrailerDict() { return &trailerDict; } - - // Write access - void setModifiedObject(Object* o, Ref r); - Ref addIndirectObject (Object* o); - void add(int num, int gen, Guint offs, GBool used); - void writeToFile(OutStream* outStr, GBool writeAllEntries); - -private: - - BaseStream *str; // input stream - Guint start; // offset in file (to allow for garbage - // at beginning of file) - XRefEntry *entries; // xref entries - int capacity; // size of <entries> array - int size; // number of entries - int rootNum, rootGen; // catalog dict - GBool ok; // true if xref table is valid - int errCode; // error code (if <ok> is false) - Object trailerDict; // trailer dictionary - Guint *streamEnds; // 'endstream' positions - only used in - // damaged files - int streamEndsLen; // number of valid entries in streamEnds - PopplerCache *objStrs; // cached object streams - GBool encrypted; // true if file is encrypted - int encRevision; - int encVersion; // encryption algorithm - CryptAlgorithm encAlgorithm; // encryption algorithm - int keyLength; // length of key, in bytes - int permFlags; // permission bits - Guchar fileKey[16]; // file decryption key - GBool ownerPasswordOk; // true if owner password is correct - Guint prevXRefOffset; // position of prev XRef section (= next to read) - Guint mainXRefEntriesOffset; // offset of entries in main XRef table - GBool xRefStream; // true if last XRef section is a stream - - void init(); - int reserve(int newSize); - int resize(int newSize); - Guint getStartXref(); - GBool readXRef(Guint *pos, std::vector<Guint> *followedXRefStm); - GBool readXRefTable(Parser *parser, Guint *pos, std::vector<Guint> *followedXRefStm); - GBool readXRefStreamSection(Stream *xrefStr, int *w, int first, int n); - GBool readXRefStream(Stream *xrefStr, Guint *pos); - GBool constructXRef(GBool *wasReconstructed); - GBool parseEntry(Guint offset, XRefEntry *entry); - -}; - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/XpdfPluginAPI.cc b/Build/source/libs/poppler/poppler-0.18.0/poppler/XpdfPluginAPI.cc deleted file mode 100644 index a4e0f0e7799..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/XpdfPluginAPI.cc +++ /dev/null @@ -1,276 +0,0 @@ -//======================================================================== -// -// XpdfPluginAPI.cc -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#include "config.h" - -#ifdef ENABLE_PLUGINS - -#include "gmem.h" -#include "GlobalParams.h" -#include "Object.h" -#include "PDFDoc.h" -#ifdef _WIN32 -#include "WinPDFCore.h" -#else -#include "XPDFCore.h" -#endif -#include "XpdfPluginAPI.h" - -//------------------------------------------------------------------------ - -//~ This should use a pool of Objects; change xpdfFreeObj to match. -static Object *allocObj() { - return (Object *)gmalloc(sizeof(Object)); -} - -//------------------------------------------------------------------------ -// Document access functions -//------------------------------------------------------------------------ - -XpdfObject _xpdfGetInfoDict(XpdfDoc doc) { - Object *obj; - - obj = allocObj(); - return (XpdfObject)((PDFDoc *)doc)->getDocInfo(obj); -} - -XpdfObject _xpdfGetCatalog(XpdfDoc doc) { - Object *obj; - - obj = allocObj(); - return (XpdfObject)((PDFDoc *)doc)->getXRef()->getCatalog(obj); -} - -#ifdef _WIN32 - -HWND _xpdfWin32GetWindow(XpdfDoc doc) { - WinPDFCore *core; - - if (!(core = (WinPDFCore *)((PDFDoc *)doc)->getGUIData())) { - return NULL; - } - return core->getDrawFrame(); -} - -#else - -Widget _xpdfXGetWindow(XpdfDoc doc) { - XPDFCore *core; - - if (!(core = (XPDFCore *)((PDFDoc *)doc)->getGUIData())) { - return NULL; - } - return core->getWidget(); -} - -#endif - -//------------------------------------------------------------------------ -// Object access functions. -//------------------------------------------------------------------------ - -XpdfBool _xpdfObjIsBool(XpdfObject obj) { - return (XpdfBool)((Object *)obj)->isBool(); -} - -XpdfBool _xpdfObjIsInt(XpdfObject obj) { - return (XpdfBool)((Object *)obj)->isInt(); -} - -XpdfBool _xpdfObjIsReal(XpdfObject obj) { - return (XpdfBool)((Object *)obj)->isReal(); -} - -XpdfBool _xpdfObjIsNumber(XpdfObject obj) { - return (XpdfBool)((Object *)obj)->isNum(); -} - -XpdfBool _xpdfObjIsString(XpdfObject obj) { - return (XpdfBool)((Object *)obj)->isString(); -} - -XpdfBool _xpdfObjIsName(XpdfObject obj) { - return (XpdfBool)((Object *)obj)->isName(); -} - -XpdfBool _xpdfObjIsNull(XpdfObject obj) { - return (XpdfBool)((Object *)obj)->isNull(); -} - -XpdfBool _xpdfObjIsArray(XpdfObject obj) { - return (XpdfBool)((Object *)obj)->isArray(); -} - -XpdfBool _xpdfObjIsDict(XpdfObject obj) { - return (XpdfBool)((Object *)obj)->isDict(); -} - -XpdfBool _xpdfObjIsStream(XpdfObject obj) { - return (XpdfBool)((Object *)obj)->isStream(); -} - -XpdfBool _xpdfObjIsRef(XpdfObject obj) { - return (XpdfBool)((Object *)obj)->isRef(); -} - -XpdfBool _xpdfBoolValue(XpdfObject obj) { - return (XpdfBool)((Object *)obj)->getBool(); -} - -int _xpdfIntValue(XpdfObject obj) { - if (!((Object *)obj)->isInt()) { - return 0; - } - return ((Object *)obj)->getInt(); -} - -double _xpdfRealValue(XpdfObject obj) { - if (!((Object *)obj)->isReal()) { - return 0; - } - return ((Object *)obj)->getReal(); -} - -double _xpdfNumberValue(XpdfObject obj) { - if (!((Object *)obj)->isNum()) { - return 0; - } - return ((Object *)obj)->getNum(); -} - -int _xpdfStringLength(XpdfObject obj) { - if (!((Object *)obj)->isString()) { - return 0; - } - return ((Object *)obj)->getString()->getLength(); -} - -char *_xpdfStringValue(XpdfObject obj) { - if (!((Object *)obj)->isString()) { - return 0; - } - return ((Object *)obj)->getString()->getCString(); -} - -char *_xpdfNameValue(XpdfObject obj) { - if (!((Object *)obj)->isName()) { - return NULL; - } - return ((Object *)obj)->getName(); -} - -int _xpdfArrayLength(XpdfObject obj) { - if (!((Object *)obj)->isArray()) { - return 0; - } - return ((Object *)obj)->arrayGetLength(); -} - -XpdfObject _xpdfArrayGet(XpdfObject obj, int idx) { - Object *elem; - - elem = allocObj(); - if (!((Object *)obj)->isArray()) { - return (XpdfObject)elem->initNull(); - } - return (XpdfObject)((Object *)obj)->arrayGet(idx, elem); -} - -XpdfObject _xpdfDictGet(XpdfObject obj, char *key) { - Object *elem; - - elem = allocObj(); - if (!((Object *)obj)->isDict()) { - return (XpdfObject)elem->initNull(); - } - return (XpdfObject)((Object *)obj)->dictLookup(key, elem); -} - -void _xpdfFreeObj(XpdfObject obj) { - ((Object *)obj)->free(); - gfree(obj); -} - -//------------------------------------------------------------------------ -// Memory allocation functions -//------------------------------------------------------------------------ - -void *_xpdfMalloc(int size) { - return gmalloc(size); -} - -void *_xpdfRealloc(void *p, int size) { - return grealloc(p, size); -} - -void _xpdfFree(void *p) { - gfree(p); -} - -//------------------------------------------------------------------------ -// Security handlers -//------------------------------------------------------------------------ - -void _xpdfRegisterSecurityHandler(XpdfSecurityHandler *handler) { - if (handler->version <= xpdfPluginAPIVersion) { - globalParams->addSecurityHandler(handler); - } -} - -//------------------------------------------------------------------------ - -XpdfPluginVecTable xpdfPluginVecTable = { - xpdfPluginAPIVersion, - &_xpdfGetInfoDict, - &_xpdfGetCatalog, -#ifdef _WIN32 - &_xpdfWin32GetWindow, -#else - &_xpdfXGetWindow, -#endif - &_xpdfObjIsBool, - &_xpdfObjIsInt, - &_xpdfObjIsReal, - &_xpdfObjIsString, - &_xpdfObjIsName, - &_xpdfObjIsNull, - &_xpdfObjIsArray, - &_xpdfObjIsDict, - &_xpdfObjIsStream, - &_xpdfObjIsRef, - &_xpdfBoolValue, - &_xpdfIntValue, - &_xpdfRealValue, - &_xpdfStringLength, - &_xpdfStringValue, - &_xpdfNameValue, - &_xpdfArrayLength, - &_xpdfArrayGet, - &_xpdfDictGet, - &_xpdfFreeObj, - &_xpdfMalloc, - &_xpdfRealloc, - &_xpdfFree, - &_xpdfRegisterSecurityHandler, -}; - -#endif // ENABLE_PLUGINS diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/XpdfPluginAPI.h b/Build/source/libs/poppler/poppler-0.18.0/poppler/XpdfPluginAPI.h deleted file mode 100644 index 22540f728bd..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/XpdfPluginAPI.h +++ /dev/null @@ -1,341 +0,0 @@ -/* - * XpdfPluginAPI.h - * - * Copyright 2004 Glyph & Cog, LLC - */ - -#ifndef XPDFPLUGINAPI_H -#define XPDFPLUGINAPI_H - -#ifdef _WIN32 -#include <windows.h> -#else -#define Object XtObject -#include <X11/Intrinsic.h> -#undef Object -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/*------------------------------------------------------------------------ - * Macros - *------------------------------------------------------------------------*/ - -/* - * The current API version. - */ -#define xpdfPluginAPIVersion 1 - -#ifdef _WIN32 -# ifdef __cplusplus -# define PLUGINFUNC(retType) extern "C" __declspec(dllexport) retType -# else -# define PLUGINFUNC(retType) extern __declspec(dllexport) retType -# endif -#else -# ifdef __cplusplus -# define PLUGINFUNC(retType) extern "C" retType -# else -# define PLUGINFUNC(retType) extern retType -# endif -#endif - -/*------------------------------------------------------------------------ - * Plugin setup/cleanup - *------------------------------------------------------------------------*/ - -/* - * All plugins are required to implement two functions: - * - * -- Initialize the plugin. Returns non-zero if successful. - * PLUGINFUNC(XpdfBool) xpdfInitPlugin(void); - * - * -- Free the plugin. - * PLUGINFUNC(void) xpdfFreePlugin(void); - */ - -/*------------------------------------------------------------------------ - * Types - *------------------------------------------------------------------------*/ - -/* - * Standard C boolean -- zero = false, non-zero = true. - */ -typedef int XpdfBool; -#define xpdfTrue 1 -#define xpdfFalse 0 - -/* - * PDF document handle. - */ -typedef struct _XpdfDoc *XpdfDoc; - -/* - * PDF object handle. - */ -typedef struct _XpdfObject *XpdfObject; - -/* - * Document access permissions. Any of these can be bitwise 'or'ed - * together. If xpdfPermissionOpen is not included, the document - * cannot be opened at all, and the other bits are ignored. - */ -typedef unsigned int XpdfPermission; -#define xpdfPermissionOpen (1 << 0) -#define xpdfPermissionPrint (1 << 2) -#define xpdfPermissionChange (1 << 3) -#define xpdfPermissionCopy (1 << 4) -#define xpdfPermissionNotes (1 << 5) - -/*------------------------------------------------------------------------ - * Security handler - *------------------------------------------------------------------------*/ - -/* - * XpdfSecurityHandler - a security handler plugin should create one - * of these and pass it to xpdfRegisterSecurityHandler. - */ -#ifdef __cplusplus -struct XpdfSecurityHandler { -#else -typedef struct { -#endif - - /* - * Version of the security handler spec (this document) -- use - * xpdfPluginAPIVersion. - */ - int version; - - /* - * Security handler name. - */ - char *name; - - /* - * Any global data the security handler needs. XpdfViewer will pass - * this pointer to all handler functions as the <handlerData> - * argument. - */ - void *handlerData; - - /* - * Allocate and initialize data for a new document. XpdfViewer will - * pass the returned pointer to all other handler functions as the - * <docData> argument. Returns non-zero if successful. - */ - XpdfBool (*newDoc)(void *handlerData, XpdfDoc doc, - XpdfObject encryptDict, void **docData); - - /* - * Free the data allocated by newDoc. - */ - void (*freeDoc)(void *handlerData, void *docData); - - /* - * Construct authorization data based on the supplied owner and user - * passwords (either or both of which may be NULL). This function - * is called in "batch" mode, i.e., if the password was supplied on - * the command line or via an Xpdf library API. It should not - * generate any user interaction (e.g., a password dialog). It is - * not required to support this function: the makeAuthData function - * pointer can be set to NULL. Returns non-zero if successful. - */ - XpdfBool (*makeAuthData)(void *handlerData, void *docData, - char *ownerPassword, char *userPassword, - void **authData); - - /* - * Request any needed information (e.g., a password) from the user, - * and construct an authorization data object. Returns non-zero if - * successful. - */ - XpdfBool (*getAuthData)(void *handlerData, void *docData, - void **authData); - - /* - * Free the data allocated by getAuthData. - */ - void (*freeAuthData)(void *handlerData, void *docData, - void *authData); - - /* - * Request permission to access the document. This returns all - * permissions granted by authData. - */ - XpdfPermission (*authorize)(void *handlerData, void *docData, - void *authData); - - /* - * Get the decryption key and algorithm version associated with the - * document. Returns non-zero if successful. - */ - XpdfBool (*getKey)(void *handlerData, void *docData, - char **key, int *keyLen, int *cryptVersion); - - /* - * Free the data allocated by getKey. - */ - void (*freeKey)(void *handlerData, void *docData, - char *key, int keyLen); - -#ifdef __cplusplus -}; -#else -} XpdfSecurityHandler; -#endif - -/*------------------------------------------------------------------------*/ - -typedef struct { - int version; - -/*------------------------------------------------------------------------ - * Document access functions - *------------------------------------------------------------------------*/ - -/* - * Get a document's info dictionary. (The returned object must be - * freed with xpdfFreeObj.) - */ -XpdfObject (*_xpdfGetInfoDict)(XpdfDoc doc); - -/* - * Get a document's catalog ("root") dictionary. (The returned object - * must be freed with xpdfFreeObj.) - */ -XpdfObject (*_xpdfGetCatalog)(XpdfDoc doc); - -#ifdef _WIN32 - -/* - * Get the handle for the viewer window associated with the specified - * document. [Win32 only] - */ -HWND (*_xpdfWin32GetWindow)(XpdfDoc doc); - -#else - -/* - * Get the Motif widget for the viewer window associated with the - * specified document. [X only] - */ -Widget (*_xpdfXGetWindow)(XpdfDoc doc); - -#endif - -/*------------------------------------------------------------------------ - * Object access functions - *------------------------------------------------------------------------*/ - -/* - * Check an object's type. - */ -XpdfBool (*_xpdfObjIsBool)(XpdfObject obj); -XpdfBool (*_xpdfObjIsInt)(XpdfObject obj); -XpdfBool (*_xpdfObjIsReal)(XpdfObject obj); -XpdfBool (*_xpdfObjIsString)(XpdfObject obj); -XpdfBool (*_xpdfObjIsName)(XpdfObject obj); -XpdfBool (*_xpdfObjIsNull)(XpdfObject obj); -XpdfBool (*_xpdfObjIsArray)(XpdfObject obj); -XpdfBool (*_xpdfObjIsDict)(XpdfObject obj); -XpdfBool (*_xpdfObjIsStream)(XpdfObject obj); -XpdfBool (*_xpdfObjIsRef)(XpdfObject obj); - -/* - * Value access. - * (Objects returned by xpdfArrayGet and xpdfDictGet must be freed - * with xpdfFreeObj.) - */ -XpdfBool (*_xpdfBoolValue)(XpdfObject obj); -int (*_xpdfIntValue)(XpdfObject obj); -double (*_xpdfRealValue)(XpdfObject obj); -int (*_xpdfStringLength)(XpdfObject obj); -char *(*_xpdfStringValue)(XpdfObject obj); -char *(*_xpdfNameValue)(XpdfObject obj); -int (*_xpdfArrayLength)(XpdfObject obj); -XpdfObject (*_xpdfArrayGet)(XpdfObject obj, int idx); -XpdfObject (*_xpdfDictGet)(XpdfObject obj, char *key); - -/* - * Object destruction. NB: *all* objects must be freed after use. - */ -void (*_xpdfFreeObj)(XpdfObject obj); - -/*------------------------------------------------------------------------ - * Memory allocation functions - *------------------------------------------------------------------------*/ - -void *(*_xpdfMalloc)(int size); -void *(*_xpdfRealloc)(void *p, int size); -void (*_xpdfFree)(void *p); - -/*------------------------------------------------------------------------ - * Security handler functions - *------------------------------------------------------------------------*/ - -/* - * Register a new security handler. - */ -void (*_xpdfRegisterSecurityHandler)(XpdfSecurityHandler *handler); - -/*------------------------------------------------------------------------*/ - -} XpdfPluginVecTable; - -#ifdef _WIN32 - -extern __declspec(dllexport) XpdfPluginVecTable xpdfPluginVecTable; - -#define xpdfPluginSetup \ - extern __declspec(dllexport) \ - XpdfPluginVecTable xpdfPluginVecTable = {xpdfPluginAPIVersion}; - -#else - -extern XpdfPluginVecTable xpdfPluginVecTable; - -#define xpdfPluginSetup \ - XpdfPluginVecTable xpdfPluginVecTable = {xpdfPluginAPIVersion}; - -#endif - -#define xpdfGetInfoDict (*xpdfPluginVecTable._xpdfGetInfoDict) -#define xpdfGetCatalog (*xpdfPluginVecTable._xpdfGetCatalog) -#ifdef _WIN32 -#define xpdfWin32GetWindow (*xpdfPluginVecTable._xpdfWin32GetWindow) -#else -#define xpdfXGetWindow (*xpdfPluginVecTable._xpdfXGetWindow) -#endif -#define xpdfObjIsBool (*xpdfPluginVecTable._xpdfObjIsBool) -#define xpdfObjIsInt (*xpdfPluginVecTable._xpdfObjIsInt) -#define xpdfObjIsReal (*xpdfPluginVecTable._xpdfObjIsReal) -#define xpdfObjIsString (*xpdfPluginVecTable._xpdfObjIsString) -#define xpdfObjIsName (*xpdfPluginVecTable._xpdfObjIsName) -#define xpdfObjIsNull (*xpdfPluginVecTable._xpdfObjIsNull) -#define xpdfObjIsArray (*xpdfPluginVecTable._xpdfObjIsArray) -#define xpdfObjIsDict (*xpdfPluginVecTable._xpdfObjIsDict) -#define xpdfObjIsStream (*xpdfPluginVecTable._xpdfObjIsStream) -#define xpdfObjIsRef (*xpdfPluginVecTable._xpdfObjIsRef) -#define xpdfBoolValue (*xpdfPluginVecTable._xpdfBoolValue) -#define xpdfIntValue (*xpdfPluginVecTable._xpdfIntValue) -#define xpdfRealValue (*xpdfPluginVecTable._xpdfRealValue) -#define xpdfStringLength (*xpdfPluginVecTable._xpdfStringLength) -#define xpdfStringValue (*xpdfPluginVecTable._xpdfStringValue) -#define xpdfNameValue (*xpdfPluginVecTable._xpdfNameValue) -#define xpdfArrayLength (*xpdfPluginVecTable._xpdfArrayLength) -#define xpdfArrayGet (*xpdfPluginVecTable._xpdfArrayGet) -#define xpdfDictGet (*xpdfPluginVecTable._xpdfDictGet) -#define xpdfFreeObj (*xpdfPluginVecTable._xpdfFreeObj) -#define xpdfMalloc (*xpdfPluginVecTable._xpdfMalloc) -#define xpdfRealloc (*xpdfPluginVecTable._xpdfRealloc) -#define xpdfFree (*xpdfPluginVecTable._xpdfFree) -#define xpdfRegisterSecurityHandler (*xpdfPluginVecTable._xpdfRegisterSecurityHandler) - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/gen-unicode-tables.py b/Build/source/libs/poppler/poppler-0.18.0/poppler/gen-unicode-tables.py deleted file mode 100644 index 282f6e52518..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/gen-unicode-tables.py +++ /dev/null @@ -1,38 +0,0 @@ -UNICODE_LAST_CHAR_PART1 = 0x2FAFF -HANGUL_S_BASE = 0xAC00 -HANGUL_S_COUNT = 19 * 21 * 28 -import unicodedata - -print """// Generated by gen-unicode-tables.py - -typedef struct { - Unicode character; - int length; - int offset; -} decomposition; -""" - -decomp_table = [] -max_index = 0 -decomp_expansion_index = {} -decomp_expansion = [] -for u in xrange(0, UNICODE_LAST_CHAR_PART1): - if (u >= HANGUL_S_BASE and u < HANGUL_S_BASE + HANGUL_S_COUNT): - continue - norm = tuple(map(ord, unicodedata.normalize("NFKD", unichr(u)))) - if norm != (u,): - try: - i = decomp_expansion_index[norm] - decomp_table.append((u, len(norm), i)) - except KeyError: - decomp_table.append((u, len(norm), max_index)) - decomp_expansion_index[norm] = max_index - decomp_expansion.append((norm, max_index)) - max_index += len(norm) -print "#define DECOMP_TABLE_LENGTH %d\n" % len(decomp_table) -print "static const decomposition decomp_table[] = {\n%s\n};\n" % ", \n".join( - " { 0x%x, %d, %d }" % (character, length, offset) - for character, length, offset in decomp_table) -print "static const Unicode decomp_expansion[] = {\n%s\n};\n" % ", \n".join( - " %s /* offset %d */ " % (", ".join("0x%x" % u for u in norm), - index) for norm, index in decomp_expansion) diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/poppler-config.h.cmake b/Build/source/libs/poppler/poppler-0.18.0/poppler/poppler-config.h.cmake deleted file mode 100644 index ca4de776a33..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/poppler-config.h.cmake +++ /dev/null @@ -1,178 +0,0 @@ -//================================================= -*- mode: c++ -*- ==== -// -// poppler-config.h -// -// Copyright 1996-2004 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef POPPLER_CONFIG_H -#define POPPLER_CONFIG_H - -// We duplicate some of the config.h #define's here since they are -// used in some of the header files we install. The #ifndef/#endif -// around #undef look odd, but it's to silence warnings about -// redefining those symbols. - -/* Enable multithreading support. */ -#ifndef MULTITHREADED -#cmakedefine MULTITHREADED 1 -#endif - -/* Use fixedpoint. */ -#ifndef USE_FIXEDPOINT -#cmakedefine USE_FIXEDPOINT 1 -#endif - -/* Use single precision arithmetic in the Splash backend */ -#ifndef USE_FLOAT -#cmakedefine USE_FLOAT 1 -#endif - -/* Include support for OPI comments. */ -#ifndef OPI_SUPPORT -#cmakedefine OPI_SUPPORT 1 -#endif - -/* Enable word list support. */ -#ifndef TEXTOUT_WORD_LIST -#cmakedefine TEXTOUT_WORD_LIST 1 -#endif - -/* Use fontconfig font configuration backend */ -#ifndef WITH_FONTCONFIGURATION_FONTCONFIG -#cmakedefine WITH_FONTCONFIGURATION_FONTCONFIG 1 -#endif - -/* Use win32 font configuration backend */ -#ifndef WITH_FONTCONFIGURATION_WIN32 -#cmakedefine WITH_FONTCONFIGURATION_WIN32 1 -#endif - -/* Support for curl is compiled in. */ -#ifndef POPPLER_HAS_CURL_SUPPORT -#cmakedefine POPPLER_HAS_CURL_SUPPORT 1 -#endif - -/* Use libjpeg instead of builtin jpeg decoder. */ -#ifndef ENABLE_LIBJPEG -#cmakedefine ENABLE_LIBJPEG 1 -#endif - -/* Build against libtiff. */ -#ifndef ENABLE_LIBTIFF -#cmakedefine ENABLE_LIBTIFF 1 -#endif - -/* Build against libpng. */ -#ifndef ENABLE_LIBPNG -#cmakedefine ENABLE_LIBPNG 1 -#endif - -/* Use zlib instead of builtin zlib decoder. */ -#ifndef ENABLE_ZLIB -#cmakedefine ENABLE_ZLIB 1 -#endif - -/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. - */ -#ifndef HAVE_DIRENT_H -#cmakedefine HAVE_DIRENT_H 1 -#endif - -/* Defines if gettimeofday is available on your system */ -#ifndef HAVE_GETTIMEOFDAY -#cmakedefine HAVE_GETTIMEOFDAY 1 -#endif - -/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ -#ifndef HAVE_NDIR_H -#cmakedefine HAVE_NDIR_H 1 -#endif - -/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'. - */ -#ifndef HAVE_SYS_DIR_H -#cmakedefine HAVE_SYS_DIR_H 1 -#endif - -/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'. - */ -#ifndef HAVE_SYS_NDIR_H -#cmakedefine HAVE_SYS_NDIR_H 1 -#endif - -/* Have FreeType2 include files */ -#ifndef HAVE_FREETYPE_H -#cmakedefine HAVE_FREETYPE_H 1 -#endif - -/* Defines if use cms */ -#ifndef USE_CMS -#cmakedefine USE_CMS 1 -#endif - -// Also, there are preprocessor symbols in the header files -// that are used but never defined when building poppler using configure -// or cmake: DISABLE_OUTLINE, DEBUG_MEM, SPLASH_CMYK, HAVE_T1LIB_H, -// ENABLE_PLUGINS, DEBUG_FORMS, HAVE_FREETYPE_FREETYPE_H - -//------------------------------------------------------------------------ -// version -//------------------------------------------------------------------------ - -// copyright notice -#define popplerCopyright "Copyright 2005-2011 The Poppler Developers - http://poppler.freedesktop.org" -#define xpdfCopyright "Copyright 1996-2004 Glyph & Cog, LLC" - -//------------------------------------------------------------------------ -// popen -//------------------------------------------------------------------------ - -#if defined(_MSC_VER) || defined(__BORLANDC__) -#define popen _popen -#define pclose _pclose -#endif - -#if defined(VMS) || defined(VMCMS) || defined(DOS) || defined(OS2) || defined(__EMX__) || defined(_WIN32) || defined(__DJGPP__) || defined(MACOS) -#define POPEN_READ_MODE "rb" -#else -#define POPEN_READ_MODE "r" -#endif - -//------------------------------------------------------------------------ -// Win32 stuff -//------------------------------------------------------------------------ - -#if defined(_WIN32) && !defined(_MSC_VER) -#include <windef.h> -#else -#define CDECL -#endif - -#if defined(_WIN32) -#ifdef _MSC_VER -#define strtok_r strtok_s -#elif __MINGW32__ -char * strtok_r (char *s, const char *delim, char **save_ptr); -#endif -#endif - -//------------------------------------------------------------------------ -// Compiler -//------------------------------------------------------------------------ - -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) -#define GCC_PRINTF_FORMAT(fmt_index, va_index) \ - __attribute__((__format__(__printf__, fmt_index, va_index))) -#else -#define GCC_PRINTF_FORMAT(fmt_index, va_index) -#endif - -#if defined(_MSC_VER) -#define fmax(a, b) max(a, b) -#define fmin(a, b) min(a, b) -#endif - - -#endif /* POPPLER_CONFIG_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/poppler-config.h.in b/Build/source/libs/poppler/poppler-0.18.0/poppler/poppler-config.h.in deleted file mode 100644 index 071d2fcc5ac..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/poppler-config.h.in +++ /dev/null @@ -1,183 +0,0 @@ -//================================================= -*- mode: c++ -*- ==== -// -// poppler-config.h -// -// Copyright 1996-2004 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef POPPLER_CONFIG_H -#define POPPLER_CONFIG_H - -// We duplicate some of the config.h #define's here since they are -// used in some of the header files we install. The #ifndef/#endif -// around #undef look odd, but it's to silence warnings about -// redefining those symbols. - -/* Define to the poppler version. */ -#ifndef POPPLER_VERSION -#undef POPPLER_VERSION -#endif - -/* Enable multithreading support. */ -#ifndef MULTITHREADED -#undef MULTITHREADED -#endif - -/* Use fixedpoint. */ -#ifndef USE_FIXEDPOINT -#undef USE_FIXEDPOINT -#endif - -/* Use single precision arithmetic in the Splash backend */ -#ifndef USE_FLOAT -#undef USE_FLOAT -#endif - -/* Include support for OPI comments. */ -#ifndef OPI_SUPPORT -#undef OPI_SUPPORT -#endif - -/* Enable word list support. */ -#ifndef TEXTOUT_WORD_LIST -#undef TEXTOUT_WORD_LIST -#endif - -/* Use fontconfig font configuration backend */ -#ifndef WITH_FONTCONFIGURATION_FONTCONFIG -#undef WITH_FONTCONFIGURATION_FONTCONFIG -#endif - -/* Use win32 font configuration backend */ -#ifndef WITH_FONTCONFIGURATION_WIN32 -#undef WITH_FONTCONFIGURATION_WIN32 -#endif - -/* Support for curl is compiled in. */ -#ifndef POPPLER_HAS_CURL_SUPPORT -#undef POPPLER_HAS_CURL_SUPPORT -#endif - -/* Use libjpeg instead of builtin jpeg decoder. */ -#ifndef ENABLE_LIBJPEG -#undef ENABLE_LIBJPEG -#endif - -/* Build against libtiff. */ -#ifndef ENABLE_LIBTIFF -#undef ENABLE_LIBTIFF -#endif - -/* Build against libpng. */ -#ifndef ENABLE_LIBPNG -#undef ENABLE_LIBPNG -#endif - -/* Use zlib instead of builtin zlib decoder. */ -#ifndef ENABLE_ZLIB -#undef ENABLE_ZLIB -#endif - -/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. - */ -#ifndef HAVE_DIRENT_H -#undef HAVE_DIRENT_H -#endif - -/* Defines if gettimeofday is available on your system */ -#ifndef HAVE_GETTIMEOFDAY -#undef HAVE_GETTIMEOFDAY -#endif - -/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ -#ifndef HAVE_NDIR_H -#undef HAVE_NDIR_H -#endif - -/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'. - */ -#ifndef HAVE_SYS_DIR_H -#undef HAVE_SYS_DIR_H -#endif - -/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'. - */ -#ifndef HAVE_SYS_NDIR_H -#undef HAVE_SYS_NDIR_H -#endif - -/* Have FreeType2 include files */ -#ifndef HAVE_FREETYPE_H -#undef HAVE_FREETYPE_H -#endif - -/* Defines if use cms */ -#ifndef USE_CMS -#undef USE_CMS -#endif - -// Also, there are preprocessor symbols in the header files -// that are used but never defined when building poppler using configure -// or cmake: DISABLE_OUTLINE, DEBUG_MEM, SPLASH_CMYK, HAVE_T1LIB_H, -// ENABLE_PLUGINS, DEBUG_FORMS, HAVE_FREETYPE_FREETYPE_H - -//------------------------------------------------------------------------ -// version -//------------------------------------------------------------------------ - -// copyright notice -#define popplerCopyright "Copyright 2005-2011 The Poppler Developers - http://poppler.freedesktop.org" -#define xpdfCopyright "Copyright 1996-2004 Glyph & Cog, LLC" - -//------------------------------------------------------------------------ -// popen -//------------------------------------------------------------------------ - -#if defined(_MSC_VER) || defined(__BORLANDC__) -#define popen _popen -#define pclose _pclose -#endif - -#if defined(VMS) || defined(VMCMS) || defined(DOS) || defined(OS2) || defined(__EMX__) || defined(_WIN32) || defined(__DJGPP__) || defined(MACOS) -#define POPEN_READ_MODE "rb" -#else -#define POPEN_READ_MODE "r" -#endif - -//------------------------------------------------------------------------ -// Win32 stuff -//------------------------------------------------------------------------ - -#if defined(_WIN32) && !defined(_MSC_VER) -#include <windef.h> -#else -#define CDECL -#endif - -#if defined(_WIN32) -#ifdef _MSC_VER -#define strtok_r strtok_s -#elif __MINGW32__ -char * strtok_r (char *s, const char *delim, char **save_ptr); -#endif -#endif - -//------------------------------------------------------------------------ -// Compiler -//------------------------------------------------------------------------ - -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) -#define GCC_PRINTF_FORMAT(fmt_index, va_index) \ - __attribute__((__format__(__printf__, fmt_index, va_index))) -#else -#define GCC_PRINTF_FORMAT(fmt_index, va_index) -#endif - -#if defined(_MSC_VER) -#define fmax(a, b) max(a, b) -#define fmin(a, b) min(a, b) -#endif - - -#endif /* POPPLER_CONFIG_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.0/poppler/strtok_r.cpp b/Build/source/libs/poppler/poppler-0.18.0/poppler/strtok_r.cpp deleted file mode 100644 index 30e2196aa13..00000000000 --- a/Build/source/libs/poppler/poppler-0.18.0/poppler/strtok_r.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* Reentrant string tokenizer. Generic version. - Copyright (C) 1991,1996-1999,2001,2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Copyright (C) 1991,93,96,97,99,2000,2002 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Based on strlen implementation by Torbjorn Granlund (tege@sics.se), - with help from Dan Sahlin (dan@sics.se) and - commentary by Jim Blandy (jimb@ai.mit.edu); - adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), - and implemented by Roland McGrath (roland@ai.mit.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifdef __MINGW32__ -#include <string.h> - -#define __rawmemchr strchr - -char * strtok_r (char *s, const char *delim, char **save_ptr) -{ - char *token; - - if (s == NULL) - s = *save_ptr; - - /* Scan leading delimiters. */ - s += strspn (s, delim); - if (*s == '\0') - { - *save_ptr = s; - return NULL; - } - - /* Find the end of the token. */ - token = s; - s = strpbrk (token, delim); - if (s == NULL) - /* This token finishes the string. */ - *save_ptr = __rawmemchr (token, '\0'); - else - { - /* Terminate the token and make *SAVE_PTR point past it. */ - *s = '\0'; - *save_ptr = s + 1; - } - return token; -} -#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4-PATCHES/ChangeLog b/Build/source/libs/poppler/poppler-0.18.4-PATCHES/ChangeLog new file mode 100644 index 00000000000..a29bd3dfe3d --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4-PATCHES/ChangeLog @@ -0,0 +1,45 @@ +2012-02-23 Peter Breitenlohner <peb@mppmu.mpg.de> + + Imported poppler-0.18.4 source tree from: + http://poppler.freedesktop.org/ + * patch-01-PDF_PARSER_ONLY (removed): Obsolete. + * patch-0[23]-*: Adapted. + +2011-10-18 Peter Breitenlohner <peb@mppmu.mpg.de> + + * patch-04-mingw (removed): Instead add `-lgdi32'. + +2011-10-11 Peter Breitenlohner <peb@mppmu.mpg.de> + + * patch-04-mingw (new): Split off ... + * patch-01-PDF_PARSER_ONLY: ... from here. + +2011-10-10 Peter Breitenlohner <peb@mppmu.mpg.de> + + * patch-03-POPPLER_VERSION: Reorg definition of POPPLER_VERSION. + +2011-10-08 Peter Breitenlohner <peb@mppmu.mpg.de> + + Imported poppler-0.18.0 source tree from: + http://poppler.freedesktop.org/ + * patch-0[123]-*: Adapted. + +2011-04-14 Peter Breitenlohner <peb@mppmu.mpg.de> + + * patch-01-PDF_PARSER_ONLY: Fix PDF_PARSER_ONLY for MinGW. + + * patch-03-POPPLER_VERSION (new): #define POPPLER_VERSION. + +2011-04-12 Peter Breitenlohner <peb@mppmu.mpg.de> + + * patch-02-warnings (new): + poppler/Movie.cc: Cast -1 to Gulong. + goo/PNGWriter.h: Add newline at end of file. + +2011-04-12 Taco Hoekwater <taco@luatex.org> + + Imported poppler-0.12.4 source tree from: + http://poppler.freedesktop.org/ + + * patch-01-PDF_PARSER_ONLY (new): Implement PDF_PARSER_ONLY. + diff --git a/Build/source/libs/poppler/poppler-0.18.4-PATCHES/TL-Changes b/Build/source/libs/poppler/poppler-0.18.4-PATCHES/TL-Changes new file mode 100644 index 00000000000..93e58622d4e --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4-PATCHES/TL-Changes @@ -0,0 +1,24 @@ +Changes applied to the poppler-0.18.4 tree as obtained from: + http://poppler.freedesktop.org/ + +Removed: + config.guess + config.sub + depcomp + install-sh + ltmain.sh + missing + +Removed unused dirs: + cmake + cpp + glib + m4 + qt4 + splash + test + utils + +Removed execute permission: + goo/GooTimer.h + diff --git a/Build/source/libs/poppler/poppler-0.18.4-PATCHES/patch-02-warnings b/Build/source/libs/poppler/poppler-0.18.4-PATCHES/patch-02-warnings new file mode 100644 index 00000000000..26c4739b40d --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4-PATCHES/patch-02-warnings @@ -0,0 +1,86 @@ +diff -ur poppler-0.18.4.orig/poppler/Annot.cc poppler-0.18.4/poppler/Annot.cc +--- poppler-0.18.4.orig/poppler/Annot.cc 2011-11-22 22:33:10.000000000 +0100 ++++ poppler-0.18.4/poppler/Annot.cc 2012-02-23 11:07:25.726255602 +0100 +@@ -2643,7 +2643,7 @@ + y3 = quadrilaterals->getY3(i); + x4 = quadrilaterals->getX4(i); + y4 = quadrilaterals->getY4(i); +- h4 = abs(y1 - y3) / 4.0; ++ h4 = fabs(y1 - y3) / 4.0; + + appearBuf->appendf ("{0:.2f} {1:.2f} m\n", x3, y3); + appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", +diff -ur poppler-0.18.4.orig/poppler/GfxState.cc poppler-0.18.4/poppler/GfxState.cc +--- poppler-0.18.4.orig/poppler/GfxState.cc 2012-01-30 20:32:08.000000000 +0100 ++++ poppler-0.18.4/poppler/GfxState.cc 2012-02-23 11:07:25.730261537 +0100 +@@ -3009,7 +3009,7 @@ + + getParameterRange(&sMin, &sMax, xMin, yMin, xMax, yMax); + upperBound = ctm->norm() * getDistance(sMin, sMax); +- maxSize = ceil(upperBound); ++ maxSize = (int)ceil(upperBound); + maxSize = std::max<int>(maxSize, 2); + + { +diff -ur poppler-0.18.4.orig/poppler/GfxState.h poppler-0.18.4/poppler/GfxState.h +--- poppler-0.18.4.orig/poppler/GfxState.h 2011-11-22 22:33:12.000000000 +0100 ++++ poppler-0.18.4/poppler/GfxState.h 2012-02-23 11:07:25.730261537 +0100 +@@ -100,7 +100,7 @@ + } + + static inline Guchar dblToByte(double x) { +- return (x * 255.0); ++ return (Guchar)(x * 255.0); + } + + static inline double byteToDbl(Guchar x) { +diff -ur poppler-0.18.4.orig/poppler/Hints.cc poppler-0.18.4/poppler/Hints.cc +--- poppler-0.18.4.orig/poppler/Hints.cc 2011-11-22 22:33:13.000000000 +0100 ++++ poppler-0.18.4/poppler/Hints.cc 2012-02-23 11:07:25.730261537 +0100 +@@ -413,7 +413,7 @@ + { + Guint bit, bits; + +- if (n < 0) return -1; ++ if (n < 0) return (Guint)-1; + if (n == 0) return 0; + + if (n == 1) +@@ -421,11 +421,11 @@ + + bit = (readBit(str) << (n-1)); + if (bit == (Guint) -1) +- return -1; ++ return (Guint)-1; + + bits = readBits(n-1, str); + if (bits == (Guint) -1) +- return -1; ++ return (Guint)-1; + + return bit | bits; + } +diff -ur poppler-0.18.4.orig/poppler/Lexer.cc poppler-0.18.4/poppler/Lexer.cc +--- poppler-0.18.4.orig/poppler/Lexer.cc 2012-02-15 18:10:57.000000000 +0100 ++++ poppler-0.18.4/poppler/Lexer.cc 2012-02-23 11:07:25.730261537 +0100 +@@ -216,7 +216,7 @@ + overflownUnsignedInteger = gTrue; + xf = xi * 10.0 + (c - '0'); + } else { +- xui = xi * 10.0 + (c - '0'); ++ xui = (unsigned int)(xi * 10.0 + (c - '0')); + } + } else { + xi = xi * 10 + (c - '0'); +diff -ur poppler-0.18.4.orig/poppler/Stream.cc poppler-0.18.4/poppler/Stream.cc +--- poppler-0.18.4.orig/poppler/Stream.cc 2011-11-22 22:33:16.000000000 +0100 ++++ poppler-0.18.4/poppler/Stream.cc 2012-02-23 11:07:25.730261537 +0100 +@@ -474,7 +474,7 @@ + } else if (nBits == 8) { + Guchar *line = imgLine; + int readChars = str->doGetChars(nVals, line); +- for ( ; readChars < nVals; readChars++) line[readChars] = EOF; ++ for ( ; readChars < nVals; readChars++) line[readChars] = (Guchar)EOF; + } else if (nBits == 16) { + // this is a hack to support 16 bits images, everywhere + // we assume a component fits in 8 bits, with this hack diff --git a/Build/source/libs/poppler/poppler-0.18.4-PATCHES/patch-03-POPPLER_VERSION b/Build/source/libs/poppler/poppler-0.18.4-PATCHES/patch-03-POPPLER_VERSION new file mode 100644 index 00000000000..e936c70ad72 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4-PATCHES/patch-03-POPPLER_VERSION @@ -0,0 +1,15 @@ +diff -ur poppler-0.18.4.orig/poppler/poppler-config.h.in poppler-0.18.4/poppler/poppler-config.h.in +--- poppler-0.18.4.orig/poppler/poppler-config.h.in 2012-02-15 18:23:06.000000000 +0100 ++++ poppler-0.18.4/poppler/poppler-config.h.in 2012-02-23 11:09:01.791684462 +0100 +@@ -14,6 +14,11 @@ + // around #undef look odd, but it's to silence warnings about + // redefining those symbols. + ++/* Define to the poppler version. */ ++#ifndef POPPLER_VERSION ++#undef POPPLER_VERSION ++#endif ++ + /* Enable multithreading support. */ + #ifndef MULTITHREADED + #undef MULTITHREADED diff --git a/Build/source/libs/poppler/poppler-0.18.4/AUTHORS b/Build/source/libs/poppler/poppler-0.18.4/AUTHORS new file mode 100644 index 00000000000..a785e403211 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/AUTHORS @@ -0,0 +1,5 @@ +xpdf is written by Derek Noonburg <derekn@foolabs.com> + +libpoppler is a fork of xpdf-3.00 + +Current Maintainer: Albert Astals Cid <aacid@kde.org> diff --git a/Build/source/libs/poppler/poppler-0.18.4/CMakeLists.txt b/Build/source/libs/poppler/poppler-0.18.4/CMakeLists.txt new file mode 100644 index 00000000000..1ba9e62b15e --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/CMakeLists.txt @@ -0,0 +1,581 @@ +project(poppler) + +cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR) + +set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules) + +include(PopplerDefaults) +include(PopplerMacros) +include(MacroOptionalFindPackage) +find_package(PkgConfig) +include(MacroEnsureVersion) +include(MacroBoolTo01) +find_package(Threads) +include(TestBigEndian) +test_big_endian(WORDS_BIGENDIAN) + +set(POPPLER_MAJOR_VERSION "0") +set(POPPLER_MINOR_VERSION "18") +set(POPPLER_MICRO_VERSION "4") +set(POPPLER_VERSION "${POPPLER_MAJOR_VERSION}.${POPPLER_MINOR_VERSION}.${POPPLER_MICRO_VERSION}") + +# command line switches +option(ENABLE_XPDF_HEADERS "Install unsupported xpdf headers." OFF) +option(BUILD_GTK_TESTS "Whether compile the GTK+ test programs." ON) +option(BUILD_QT4_TESTS "Whether compile the Qt4 test programs." ON) +option(BUILD_CPP_TESTS "Whether compile the CPP test programs." ON) +option(ENABLE_SPLASH "Build the Splash graphics backend." ON) +option(ENABLE_UTILS "Compile poppler command line utils." ON) +option(ENABLE_CPP "Compile poppler cpp wrapper." ON) +option(ENABLE_LIBOPENJPEG "Use libopenjpeg for JPX streams." ON) +option(ENABLE_LCMS "Use liblcms for color management." ON) +option(ENABLE_LIBCURL "Build libcurl based HTTP support." OFF) +option(ENABLE_ZLIB "Build with zlib (not totally safe)." OFF) +option(USE_FIXEDPOINT "Use fixed point arithmetic in the Splash backend" OFF) +option(USE_FLOAT "Use single precision arithmetic in the Splash backend" OFF) +if(WIN32) + option(ENABLE_RELOCATABLE "Do not hardcode the poppler library location (on Windows)." ON) +else(WIN32) + set(ENABLE_RELOCATABLE OFF) +endif(WIN32) + +set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)") + +if(WIN32) + set(_default_fontconfiguration "win32") +else(WIN32) + set(_default_fontconfiguration "fontconfig") +endif(WIN32) +set(FONT_CONFIGURATION "${_default_fontconfiguration}" CACHE STRING "The font configuration backend (win32|fontconfig).") +string(TOLOWER "${FONT_CONFIGURATION}" font_configuration) +set(WITH_FONTCONFIGURATION_WIN32 OFF) +set(WITH_FONTCONFIGURATION_FONTCONFIG OFF) +if(font_configuration STREQUAL "win32") + set(WITH_FONTCONFIGURATION_WIN32 ON) +elseif(font_configuration STREQUAL "fontconfig") + set(WITH_FONTCONFIGURATION_FONTCONFIG ON) +else(font_configuration STREQUAL "win32") + message(FATAL_ERROR "Invalid font configuration setting: ${FONT_CONFIGURATION}") +endif(font_configuration STREQUAL "win32") + +# Enable these unconditionally. +set(MULTITHREADED ON) +set(OPI_SUPPORT ON) +set(TEXTOUT_WORD_LIST ON) + +# setting the minimum required versions for some components +set(QT4_MIN_VERSION "4.4.0") +set(CAIRO_VERSION "1.10.0") +set(GLIB_REQUIRED "2.18") + +macro_bool_to_01(ENABLE_SPLASH HAVE_SPLASH) +find_package(Freetype REQUIRED) +if(WITH_FONTCONFIGURATION_FONTCONFIG) + find_package(Fontconfig REQUIRED) +endif(WITH_FONTCONFIGURATION_FONTCONFIG) +macro_optional_find_package(JPEG) +macro_optional_find_package(PNG) +macro_optional_find_package(TIFF) +if(JPEG_FOUND) + set(ENABLE_LIBJPEG ${JPEG_FOUND}) +endif(JPEG_FOUND) +macro_optional_find_package(Qt4) +macro_optional_find_package(Cairo ${CAIRO_VERSION}) +if(CAIRO_FOUND) + set(HAVE_CAIRO ${CAIRO_FOUND}) + set(CAIRO_FEATURE "#define POPPLER_HAS_CAIRO 1") + set(CAIRO_REQ "cairo") + set(POPPLER_GLIB_DISABLE_DEPRECATED "") + set(POPPLER_GLIB_DISABLE_SINGLE_INCLUDES "") + macro_optional_find_package(GLIB) + if(GLIB_FOUND) + set(ENABLE_GLIB ON) + # Check for introspection + macro_optional_find_package(GObjectIntrospection 0.9.12) + set(HAVE_INTROSPECTION ${INTROSPECTION_FOUND}) + set(POPPLER_GLIB_DISABLE_DEPRECATED "${POPPLER_GLIB_DISABLE_DEPRECATED} -DG_DISABLE_DEPRECATED") + set(POPPLER_GLIB_DISABLE_SINGLE_INCLUDES "${POPPLER_GLIB_DISABLE_SINGLE_INCLUDES} -DG_DISABLE_SINGLE_INCLUDES") + macro_optional_find_package(GTK) + endif(GLIB_FOUND) +else(CAIRO_FOUND) + set(CAIRO_FEATURE "#undef POPPLER_HAS_CAIRO") +endif(CAIRO_FOUND) +if(ENABLE_CPP) + macro_optional_find_package(Iconv) + set(ENABLE_CPP ${ICONV_FOUND}) + set(HAVE_ICONV ${ICONV_FOUND}) +endif(ENABLE_CPP) +if(ENABLE_ZLIB) + find_package(ZLIB) + if(ZLIB_FOUND) + set(HAVE_LIBZ ${ZLIB_FOUND}) + endif(ZLIB_FOUND) + set(ENABLE_ZLIB ${ZLIB_FOUND}) +endif(ENABLE_ZLIB) +if(ENABLE_LIBOPENJPEG) + find_package(LIBOPENJPEG) + set(ENABLE_LIBOPENJPEG ${LIBOPENJPEG_FOUND}) + set(HAVE_OPENJPEG_H ON) +endif(ENABLE_LIBOPENJPEG) +if(ENABLE_LCMS) + find_package(LCMS) + set(USE_CMS ${LCMS_FOUND}) +endif(ENABLE_LCMS) +if(ENABLE_LIBCURL) + find_package(CURL) + include_directories(${CURL_INCLUDE_DIR}) + set(POPPLER_HAS_CURL_SUPPORT ON) +endif(ENABLE_LIBCURL) + +add_definitions(-DHAVE_CONFIG_H=1) +if(FONTCONFIG_FOUND) + add_definitions(${FONTCONFIG_DEFINITIONS}) + include_directories(${FONTCONFIG_INCLUDE_DIR}) +endif(FONTCONFIG_FOUND) +if(WITH_FONTCONFIGURATION_WIN32) + if(MINGW) + # Set the minimum required Internet Explorer version to 5.0 + add_definitions(-D_WIN32_IE=0x0500) + endif(MINGW) +endif(WITH_FONTCONFIGURATION_WIN32) +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/fofi + ${CMAKE_CURRENT_SOURCE_DIR}/goo + ${CMAKE_CURRENT_SOURCE_DIR}/poppler + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/poppler + ${FREETYPE_INCLUDE_DIRS} +) +set(HAVE_FREETYPE_H ON) +if(CMAKE_USE_PTHREADS_INIT) + set(HAVE_PTHREAD ON) +endif(CMAKE_USE_PTHREADS_INIT) + +if(ENABLE_ZLIB) + include_directories(${ZLIB_INCLUDE_DIR}) +endif(ENABLE_ZLIB) +if(JPEG_FOUND) + include_directories(${JPEG_INCLUDE_DIR}) + set(ENABLE_LIBJPEG ON) +endif(JPEG_FOUND) +if(PNG_FOUND) + include_directories(${PNG_INCLUDE_DIR}) + set(ENABLE_LIBPNG ON) +endif(PNG_FOUND) +if(TIFF_FOUND) + include_directories(${TIFF_INCLUDE_DIR}) + set(ENABLE_LIBTIFF ON) +endif(TIFF_FOUND) +if(LIBOPENJPEG_FOUND) + include_directories(${LIBOPENJPEG_INCLUDE_DIR}) +endif(LIBOPENJPEG_FOUND) +if(LCMS_FOUND) + include_directories(${LCMS_INCLUDE_DIR}) +endif(LCMS_FOUND) + +if(DEFINED COMPILE_WARNINGS) +else(DEFINED COMPILE_WARNINGS) + set(COMPILE_WARNINGS "yes") +endif(DEFINED COMPILE_WARNINGS) +string(TOLOWER "${COMPILE_WARNINGS}" _comp_warnings) +if(_comp_warnings STREQUAL "no") + set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS_NO} ${CMAKE_CXX_FLAGS}") +endif(_comp_warnings STREQUAL "no") +if(_comp_warnings STREQUAL "yes") + set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS_YES} ${CMAKE_CXX_FLAGS}") +endif(_comp_warnings STREQUAL "yes") +if(_comp_warnings STREQUAL "kde") + set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS_KDE} ${CMAKE_CXX_FLAGS}") +endif(_comp_warnings STREQUAL "kde") + + +include(ConfigureChecks.cmake) +configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) +configure_file(poppler/poppler-config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h) + + +set(poppler_SRCS + goo/gfile.cc + goo/gmempp.cc + goo/GooHash.cc + goo/GooList.cc + goo/GooTimer.cc + goo/GooString.cc + goo/gmem.cc + goo/FixedPoint.cc + goo/PNGWriter.cc + goo/TiffWriter.cc + goo/JpegWriter.cc + goo/ImgWriter.cc + goo/gstrtod.cc + fofi/FoFiBase.cc + fofi/FoFiEncodings.cc + fofi/FoFiTrueType.cc + fofi/FoFiType1.cc + fofi/FoFiType1C.cc + poppler/Annot.cc + poppler/Array.cc + poppler/BuiltinFont.cc + poppler/BuiltinFontTables.cc + poppler/CachedFile.cc + poppler/Catalog.cc + poppler/CharCodeToUnicode.cc + poppler/CMap.cc + poppler/DateInfo.cc + poppler/Decrypt.cc + poppler/Dict.cc + poppler/Error.cc + poppler/FileSpec.cc + poppler/FontEncodingTables.cc + poppler/Form.cc + poppler/FontInfo.cc + poppler/Function.cc + poppler/Gfx.cc + poppler/GfxFont.cc + poppler/GfxState.cc + poppler/GlobalParams.cc + poppler/Hints.cc + poppler/JArithmeticDecoder.cc + poppler/JBIG2Stream.cc + poppler/Lexer.cc + poppler/Link.cc + poppler/Linearization.cc + poppler/LocalPDFDocBuilder.cc + poppler/NameToCharCode.cc + poppler/Object.cc + poppler/OptionalContent.cc + poppler/Outline.cc + poppler/OutputDev.cc + poppler/Page.cc + poppler/PageTransition.cc + poppler/Parser.cc + poppler/PDFDoc.cc + poppler/PDFDocEncoding.cc + poppler/PDFDocFactory.cc + poppler/PopplerCache.cc + poppler/ProfileData.cc + poppler/PreScanOutputDev.cc + poppler/PSTokenizer.cc + poppler/Stream.cc + poppler/strtok_r.cpp + poppler/UnicodeMap.cc + poppler/UnicodeTypeTable.cc + poppler/XRef.cc + poppler/PSOutputDev.cc + poppler/TextOutputDev.cc + poppler/PageLabelInfo.cc + poppler/SecurityHandler.cc + poppler/StdinCachedFile.cc + poppler/StdinPDFDocBuilder.cc + poppler/Sound.cc + poppler/ViewerPreferences.cc + poppler/XpdfPluginAPI.cc + poppler/Movie.cc + poppler/Rendition.cc +) +set(poppler_LIBS ${FREETYPE_LIBRARIES}) +if(ENABLE_SPLASH) + set(poppler_SRCS ${poppler_SRCS} + poppler/SplashOutputDev.cc + splash/Splash.cc + splash/SplashBitmap.cc + splash/SplashClip.cc + splash/SplashFTFont.cc + splash/SplashFTFontEngine.cc + splash/SplashFTFontFile.cc + splash/SplashFont.cc + splash/SplashFontEngine.cc + splash/SplashFontFile.cc + splash/SplashFontFileID.cc + splash/SplashPath.cc + splash/SplashPattern.cc + splash/SplashScreen.cc + splash/SplashState.cc + splash/SplashT1Font.cc + splash/SplashT1FontEngine.cc + splash/SplashT1FontFile.cc + splash/SplashXPath.cc + splash/SplashXPathScanner.cc + ) +endif(ENABLE_SPLASH) +if(FONTCONFIG_FOUND) + set(poppler_LIBS ${poppler_LIBS} ${FONTCONFIG_LIBRARIES}) +endif(FONTCONFIG_FOUND) +if(JPEG_FOUND) + set(poppler_SRCS ${poppler_SRCS} + poppler/DCTStream.cc + ) + set(poppler_LIBS ${poppler_LIBS} ${JPEG_LIBRARIES}) +endif(JPEG_FOUND) +if(ENABLE_ZLIB) + set(poppler_SRCS ${poppler_SRCS} + poppler/FlateStream.cc + ) + set(poppler_LIBS ${poppler_LIBS} ${ZLIB_LIBRARIES}) +endif(ENABLE_ZLIB) +if(ENABLE_LIBCURL) + set(poppler_SRCS ${poppler_SRCS} + poppler/CurlCachedFile.cc + poppler/CurlPDFDocBuilder.cc + ) + set(poppler_LIBS ${poppler_LIBS} ${CURL_LIBRARIES}) +endif(ENABLE_LIBCURL) +if(LIBOPENJPEG_FOUND) + set(poppler_SRCS ${poppler_SRCS} + poppler/JPEG2000Stream.cc + ) + set(poppler_LIBS ${poppler_LIBS} ${LIBOPENJPEG_LIBRARIES}) +else (LIBOPENJPEG_FOUND) + set(poppler_SRCS ${poppler_SRCS} + poppler/JPXStream.cc + ) +endif(LIBOPENJPEG_FOUND) +if(USE_CMS) + set(poppler_LIBS ${poppler_LIBS} ${LCMS_LIBRARIES}) +endif(USE_CMS) +if(WIN32) + # gdi32 is needed under win32 + set(poppler_LIBS ${poppler_LIBS} gdi32) +endif(WIN32) +if(PNG_FOUND) + set(poppler_LIBS ${poppler_LIBS} ${PNG_LIBRARIES}) +endif(PNG_FOUND) +if(TIFF_FOUND) + set(poppler_LIBS ${poppler_LIBS} ${TIFF_LIBRARIES}) +endif(TIFF_FOUND) + +if(MSVC) +add_definitions(-D_CRT_SECURE_NO_WARNINGS) +set(CMAKE_CXX_FLAGS "/Zc:wchar_t- ${CMAKE_CXX_FLAGS}") +add_library(poppler STATIC ${poppler_SRCS}) +else(MSVC) +add_library(poppler SHARED ${poppler_SRCS}) +endif(MSVC) +set_target_properties(poppler PROPERTIES VERSION 19.0.0 SOVERSION 19) +target_link_libraries(poppler ${poppler_LIBS}) +target_link_libraries(poppler LINK_INTERFACE_LIBRARIES "") +install(TARGETS poppler RUNTIME DESTINATION bin LIBRARY DESTINATION lib${LIB_SUFFIX} ARCHIVE DESTINATION lib${LIB_SUFFIX}) + +if(ENABLE_XPDF_HEADERS) + install(FILES + poppler/Annot.h + poppler/Array.h + poppler/BuiltinFont.h + poppler/BuiltinFontTables.h + poppler/CachedFile.h + poppler/Catalog.h + poppler/CharCodeToUnicode.h + poppler/CMap.h + poppler/DateInfo.h + poppler/Decrypt.h + poppler/Dict.h + poppler/Error.h + poppler/FileSpec.h + poppler/FontEncodingTables.h + poppler/FontInfo.h + poppler/Form.h + poppler/Function.cc + poppler/Function.h + poppler/Gfx.h + poppler/GfxFont.h + poppler/GfxState.h + poppler/GfxState_helpers.h + poppler/GlobalParams.h + poppler/Hints.h + poppler/JArithmeticDecoder.h + poppler/JBIG2Stream.h + poppler/Lexer.h + poppler/Link.h + poppler/Linearization.h + poppler/LocalPDFDocBuilder.h + poppler/Movie.h + poppler/NameToCharCode.h + poppler/Object.h + poppler/OptionalContent.h + poppler/Outline.h + poppler/OutputDev.h + poppler/Page.h + poppler/PageTransition.h + poppler/Parser.h + poppler/PDFDoc.h + poppler/PDFDocBuilder.h + poppler/PDFDocEncoding.h + poppler/PDFDocFactory.h + poppler/PopplerCache.h + poppler/ProfileData.h + poppler/PreScanOutputDev.h + poppler/PSTokenizer.h + poppler/Rendition.h + poppler/Stream-CCITT.h + poppler/Stream.h + poppler/UnicodeMap.h + poppler/UnicodeMapTables.h + poppler/UnicodeTypeTable.h + poppler/UnicodeCClassTables.h + poppler/UnicodeCompTables.h + poppler/UnicodeDecompTables.h + poppler/ViewerPreferences.h + poppler/XRef.h + poppler/CharTypes.h + poppler/CompactFontTables.h + poppler/ErrorCodes.h + poppler/NameToUnicodeTable.h + poppler/PSOutputDev.h + poppler/TextOutputDev.h + poppler/SecurityHandler.h + poppler/StdinCachedFile.h + poppler/StdinPDFDocBuilder.h + poppler/UTF8.h + poppler/XpdfPluginAPI.h + poppler/Sound.h + ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h + DESTINATION include/poppler) + install(FILES + goo/GooHash.h + goo/GooList.h + goo/GooTimer.h + goo/GooMutex.h + goo/GooString.h + goo/gtypes.h + goo/gmem.h + goo/gfile.h + goo/FixedPoint.h + goo/ImgWriter.h + goo/GooLikely.h + goo/gstrtod.h + DESTINATION include/poppler/goo) + if(PNG_FOUND) + install(FILES + goo/PNGWriter.h + DESTINATION include/poppler/goo) + endif(PNG_FOUND) + if(TIFF_FOUND) + install(FILES + goo/TiffWriter.h + DESTINATION include/poppler/goo) + endif(TIFF_FOUND) + install(FILES + fofi/FoFiBase.h + fofi/FoFiEncodings.h + fofi/FoFiTrueType.h + fofi/FoFiType1.h + fofi/FoFiType1C.h + DESTINATION include/poppler/fofi) + if(ENABLE_LIBCURL) + install(FILES + poppler/CurlCachedFile.h + poppler/CurlPDFDocBuilder.h + DESTINATION include/poppler) + endif(ENABLE_LIBCURL) + if(LIBOPENJPEG_FOUND) + install(FILES + poppler/JPEG2000Stream.h + DESTINATION include/poppler) + install(FILES + goo/JpegWriter.h + DESTINATION include/poppler/goo) + else(LIBOPENJPEG_FOUND) + install(FILES + poppler/JPXStream.h + DESTINATION include/poppler) + endif(LIBOPENJPEG_FOUND) + if(ENABLE_SPLASH) + install(FILES + poppler/SplashOutputDev.h + DESTINATION include/poppler) + install(FILES + splash/Splash.h + splash/SplashBitmap.h + splash/SplashClip.h + splash/SplashErrorCodes.h + splash/SplashFTFont.h + splash/SplashFTFontEngine.h + splash/SplashFTFontFile.h + splash/SplashFont.h + splash/SplashFontEngine.h + splash/SplashFontFile.h + splash/SplashFontFileID.h + splash/SplashGlyphBitmap.h + splash/SplashMath.h + splash/SplashPath.h + splash/SplashPattern.h + splash/SplashScreen.h + splash/SplashState.h + splash/SplashT1Font.h + splash/SplashT1FontEngine.h + splash/SplashT1FontFile.h + splash/SplashTypes.h + splash/SplashXPath.h + splash/SplashXPathScanner.h + DESTINATION include/poppler/splash) + endif(ENABLE_SPLASH) +endif(ENABLE_XPDF_HEADERS) + + +if(ENABLE_UTILS) + add_subdirectory(utils) +endif(ENABLE_UTILS) +if(ENABLE_GLIB) + add_subdirectory(glib) +endif(ENABLE_GLIB) +add_subdirectory(test) +if(QT4_FOUND) + add_subdirectory(qt4) +endif(QT4_FOUND) +if(ENABLE_CPP) + add_subdirectory(cpp) +endif(ENABLE_CPP) + +set(PKG_CONFIG_VERSION_0_18 TRUE) +if(PKG_CONFIG_EXECUTABLE) + exec_program(${PKG_CONFIG_EXECUTABLE} ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _output_VAR) + macro_ensure_version("0.18" "${_output_VAR}" PKG_CONFIG_VERSION_0_18) +endif(PKG_CONFIG_EXECUTABLE) +if(PKG_CONFIG_VERSION_0_18) + set(PC_REQUIRES "") + set(PC_REQUIRES_PRIVATE "Requires.private: poppler = ${POPPLER_VERSION}") +else(PKG_CONFIG_VERSION_0_18) + set(PC_REQUIRES "poppler = ${POPPLER_VERSION}") + set(PC_REQUIRES_PRIVATE "") +endif(PKG_CONFIG_VERSION_0_18) + +poppler_create_install_pkgconfig(poppler.pc lib${LIB_SUFFIX}/pkgconfig) +if(ENABLE_SPLASH) + poppler_create_install_pkgconfig(poppler-splash.pc lib${LIB_SUFFIX}/pkgconfig) +endif(ENABLE_SPLASH) +if(QT4_FOUND) + poppler_create_install_pkgconfig(poppler-qt4.pc lib${LIB_SUFFIX}/pkgconfig) +endif(QT4_FOUND) +if(ENABLE_GLIB) + poppler_create_install_pkgconfig(poppler-glib.pc lib${LIB_SUFFIX}/pkgconfig) +endif(ENABLE_GLIB) +if(CAIRO_FOUND) + poppler_create_install_pkgconfig(poppler-cairo.pc lib${LIB_SUFFIX}/pkgconfig) +endif(CAIRO_FOUND) +if(ENABLE_CPP) + poppler_create_install_pkgconfig(poppler-cpp.pc lib${LIB_SUFFIX}/pkgconfig) +endif(ENABLE_CPP) + + +message("Building Poppler with support for:") +show_end_message("font configuration" ${font_configuration}) +show_end_message_yesno("splash output" ENABLE_SPLASH) +show_end_message_yesno("cairo output" CAIRO_FOUND) +show_end_message_yesno("qt4 wrapper" QT4_FOUND) +show_end_message_yesno("glib wrapper" ENABLE_GLIB) +show_end_message_yesno(" introspection" INTROSPECTION_FOUND) +show_end_message_yesno("cpp wrapper" ENABLE_CPP) +show_end_message("use gtk-doc" "not supported with this CMake build system") +show_end_message_yesno("use libjpeg" ENABLE_LIBJPEG) +show_end_message_yesno("use libpng" ENABLE_LIBPNG) +show_end_message_yesno("use libtiff" ENABLE_LIBTIFF) +show_end_message_yesno("use zlib" ENABLE_ZLIB) +show_end_message_yesno("use curl" ENABLE_LIBCURL) +show_end_message_yesno("use libopenjpeg" LIBOPENJPEG_FOUND) +show_end_message_yesno("use cms" USE_CMS) +show_end_message_yesno("command line utils" ENABLE_UTILS) + +if(USE_FIXEDPOINT AND USE_FLOAT) + message("Warning: Single precision and fixed point options should not be enabled at the same time") +endif(USE_FIXEDPOINT AND USE_FLOAT) diff --git a/Build/source/libs/poppler/poppler-0.18.4/COPYING b/Build/source/libs/poppler/poppler-0.18.4/COPYING new file mode 100644 index 00000000000..d511905c164 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/Build/source/libs/poppler/poppler-0.18.4/ChangeLog b/Build/source/libs/poppler/poppler-0.18.4/ChangeLog new file mode 100644 index 00000000000..553f526eb9a --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/ChangeLog @@ -0,0 +1,38215 @@ +commit f61fa12e5a1ed4a775753aec9bb9e769b55aeb08 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 15 18:12:59 2012 +0100 + + New copyrights + + goo/JpegWriter.cc | 2 +- + poppler/CairoFontEngine.cc | 1 + + poppler/CairoOutputDev.cc | 2 +- + poppler/CairoOutputDev.h | 2 +- + poppler/CairoRescaleBox.cc | 14 ++++++++++++++ + poppler/Lexer.cc | 1 + + splash/SplashXPath.cc | 1 + + 7 files changed, 20 insertions(+), 3 deletions(-) + +commit 203cbb1dc317a6d7884d2708e938804ceb4617cb +Author: Hib Eris <hib@hiberis.nl> +Date: Sun Feb 12 23:16:41 2012 +0100 + + Improve moc detection when cross compiling + (cherry picked from commit 9250449aaa279840d789b3a7cef75d06a0fd88e7) + + configure.ac | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +commit d7e73dd353fd4c3c24f1f7bb04e7a2760c6b60c2 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 12 22:27:58 2012 +0100 + + qt4: remove non-existing 'qt' include dirs + + (cherry picked from commit 66cf1fdb3ba6894f61d9078f5c30046b464347ae) + + qt4/demos/Makefile.am | 1 - + qt4/src/Makefile.am | 1 - + qt4/tests/Makefile.am | 1 - + 3 files changed, 0 insertions(+), 3 deletions(-) + +commit 106c3dffc8d3139d121b7df9dc9fce6f5ba87166 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 12 17:36:55 2012 +0100 + + man pages: fix minor issues with hypens and % + + (cherry picked from commit 53d8fc4d2978b70e8926e3df71facd1f39de9348) + + utils/pdfseparate.1 | 6 +++--- + utils/pdftocairo.1 | 4 ++-- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit bf81250ff7d0968852fc7559fafb6389cd695b91 +Author: Igor Slepchin <igor.slepchin@gmail.com> +Date: Wed Feb 8 19:22:13 2012 -0500 + + Close li tags in generated outlines. + + Also, add newlines after ul tags for better readability. + Bug #45807 + + utils/HtmlOutputDev.cc | 9 ++++++--- + 1 files changed, 6 insertions(+), 3 deletions(-) + +commit 53a0c2043dfd56f6da7780f1a049f75af368b84b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 8 23:58:27 2012 +0100 + + Fix memory leak when using HtmlOutputDev::mapEncodingToHtml + + Bug #45805 + + utils/HtmlOutputDev.cc | 47 + ++++++++++++++++++++++++----------------------- + utils/HtmlOutputDev.h | 7 ++++--- + 2 files changed, 28 insertions(+), 26 deletions(-) + +commit 4afe4d827a342a847e8b89aba5b4164ed3b4cc32 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 8 23:47:46 2012 +0100 + + Fix leak in pdftohtml getInfoString + + Bug #45805 + + utils/pdftohtml.cc | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +commit 40f7289ab04787734b856c53d5c0139445b52635 +Author: Igor Slepchin <igor.redhat@gmail.com> +Date: Sun Feb 5 15:55:39 2012 +0100 + + Proper unicode support when dumping PDF outline. + + Also use of already existing Outline class rather than parsing the + outline anew. + + Bug 45572 + + utils/HtmlOutputDev.cc | 196 + ++++++++++++++++++++++++++---------------------- + utils/HtmlOutputDev.h | 6 +- + utils/pdftohtml.cc | 3 +- + 3 files changed, 112 insertions(+), 93 deletions(-) + +commit fb629ac684a7f05d95d10285807c2cf1602d28ca +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Feb 4 17:13:30 2012 +1030 + + Lexer: convert integer to real when overflow occurs + + Bug 45605 + (cherry picked from commit 38ec58ed1cb54722aece875287b847643aa2c4b8) + + poppler/Lexer.cc | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +commit 24bbe62fa09bd4609bbf59c2b78c3aab20c09cdf +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Jan 31 20:01:30 2012 +0100 + + glib: Exclude poppler-private.h from introspection files + + Fixes bug #45455. + + glib/CMakeLists.txt | 2 +- + glib/Makefile.am | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 19cee7961d01e59adfdd47fb311707e55f4d70c3 +Author: Hib Eris <hib@hiberis.nl> +Date: Wed Feb 1 10:44:17 2012 +0100 + + gtk-doc: Fix build when builddir != srcdir + + Bug #45549. + + glib/reference/Makefile.am | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +commit b834425c56eb4e783419351888cf586525d12476 +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Feb 2 13:01:45 2012 +0100 + + gtk-doc: Fix API documentation for poppler_page_free_annot_mapping() + + Remove reference to non existent method poppler_annot_free() and use + ref/unref instead of copy/free. + + Bug #45549. + + glib/poppler-page.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 283fa96871027719ad40db653a71e7e889f2f67f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Feb 4 11:51:34 2012 +0100 + + gtk-doc: Remove reference to non existent method poppler_layer_free() + + Bug #45549. + + glib/poppler-document.cc | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +commit 1b3e07155fbc627ef13fcb885ebda7644a65ff9a +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Feb 2 15:59:47 2012 +0100 + + gtk-doc: Add more glib API documentation for poppler-document + + Fixes several gtk-doc warnings. + + Bug #45549. + + glib/poppler-document.h | 26 +++++++++++++------------- + 1 files changed, 13 insertions(+), 13 deletions(-) + +commit ff7c42a8c04cf98e8d7e7c23bddb65781a7d9b8c +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Feb 2 15:45:37 2012 +0100 + + gtk-doc: remove references to removed pixbuf functions + + Bug #45549. + + glib/poppler-page.cc | 6 ++---- + glib/reference/poppler-sections.txt | 4 ---- + 2 files changed, 2 insertions(+), 8 deletions(-) + +commit 5dc10c5564d5cd072e37deffbbfcbf6cea25af98 +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Feb 2 15:43:30 2012 +0100 + + gtk-doc: do not build doc for glib-demo + + Fixes glib-demo symbols in poppler-unused.txt + + Bug #45549. + + glib/reference/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ecbdea38d4c35935a69e5fbd5268be86ee716a53 +Author: Hib Eris <hib@hiberis.nl> +Date: Sat Feb 4 11:32:50 2012 +0100 + + gtk-doc: Fix typo's + + Bug #45549. + + glib/poppler-annot.cc | 6 +++--- + glib/poppler-annot.h | 2 +- + glib/poppler-document.cc | 2 +- + glib/poppler-media.cc | 2 +- + glib/poppler-page.cc | 3 +-- + glib/poppler-page.h | 4 ++-- + glib/reference/poppler-sections.txt | 4 +++- + 7 files changed, 12 insertions(+), 11 deletions(-) + +commit 01a53a1dcaeaf81fbe5f1630cfe86f0d0b55b24b +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Jan 31 12:49:01 2012 +0100 + + cairo: Remove unused variable in CairoFontEngine.cc + + Fixes bug #45442. + + poppler/CairoFontEngine.cc | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +commit 7bb42f045abaef2f10fe83b8c04a55ec0a34d55d +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Jan 31 14:42:04 2012 +0100 + + Fix return value of downscale_box_filter() + + Fixes bug #45441. + + poppler/CairoRescaleBox.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit f6131e05f1e81f062c77377650bcd0746b8fc04f +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Jan 31 13:02:16 2012 +0100 + + Fix return value of poppler_attachment_save + + Fixes bug #45440. + + glib/poppler-attachment.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5aedb2378b9e4aa438d39ac92e53bac02d3e176a +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Jan 31 12:15:51 2012 +0100 + + Fix build for builddir != srcdir + + Fixes bug #45434. + + glib/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 58c17c3a61f18a6808ec9ba37e82734a655090ac +Author: Hib Eris <hib@hiberis.nl> +Date: Mon Jan 30 17:07:28 2012 +0100 + + Fix build with latest mingw-w64 headers + + Fixes bug #45407. + + glib/poppler-annot.cc | 1 + + glib/poppler-document.cc | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit 650644c3ab581f8cde2593ae87c3e408c4ebc57e +Author: Suzuki Toshiya <mpsuzuki@hiroshima-u.ac.jp> +Date: Mon Jan 30 20:46:04 2012 +1030 + + pdftocairo/automake: link with lcms + (cherry picked from commit acbc63348ce5e279e4d66ed4f240dc8d61df4e57) + + utils/Makefile.am | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit dedc68a137aacd5f1641d7478e6c531a7dbd3e30 +Author: Pino Toscano <pino@kde.org> +Date: Mon Jan 30 00:32:52 2012 +0100 + + glib/cmake: various minor introspection improvements + + "port" to CMake of the automake equivalents of + 5ab46f9881067ce8aa203a330e2ddbe75744c50e + + glib/CMakeLists.txt | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 8c3dfa26fdc4587b4a88a769806dcf38b2c5b395 +Author: Pino Toscano <pino@kde.org> +Date: Mon Jan 30 00:21:31 2012 +0100 + + cmake: support $(gir_name)_EXPORT_PACKAGES for g-ir-scanner + + cmake/modules/GObjectIntrospectionMacros.cmake | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit de6415af1a39ec7dfa4f149c6c5e311b86352cec +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jan 27 00:36:18 2012 +0100 + + Set OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG if you have it + + Fixes/workarounds bug 43414 with openjpeg 1.5 (unreleased) + + cmake/modules/FindLIBOPENJPEG.cmake | 13 +++++++++++++ + config.h.cmake | 3 +++ + configure.ac | 8 ++++++++ + poppler/JPEG2000Stream.cc | 7 ++++++- + 4 files changed, 30 insertions(+), 1 deletions(-) + +commit c6429072f9ce9a934b24d3c42ae03e2b34d35873 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Wed Jan 25 22:44:27 2012 +1030 + + jpeg: set image parameters after jpeg_set_defaults() + + so the resolution does not get overwritten by the defaults. + + The libjpeg documentation for jpeg_set_defaults() states: "This + routine sets all JPEG parameters to reasonable defaults, using only + the input image's color space (field in_color_space, which must + already be set in cinfo)" + + Bug 45224 + + goo/JpegWriter.cc | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +commit c003fd927835f269d42a7c8637d560c5c9c41b8a +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Thu Jan 26 11:33:28 2012 +1030 + + glib: add section in docs for new symbols in 0.18 + + glib/reference/poppler-docs.sgml | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit e411789041d63ced663981523f73f029e632348d +Author: Alexander Saprykin <xelfium@gmail.com> +Date: Mon Jan 23 22:07:15 2012 +0100 + + Do not use 50Kb of stack in SplashXPath::addCurve + + Bug 44905 + + splash/SplashXPath.cc | 69 + ++++++++++++++++++++++++++++++++++-------------- + 1 files changed, 49 insertions(+), 20 deletions(-) + +commit 41711a6e1a1d53130d0accc6cdc8f014687db5b2 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Jan 21 09:43:10 2012 +1030 + + cairo: Use fabs when comparing the transformed line width + + as the transform may cause a negative width + + Bug 43441 + + poppler/CairoOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5ab46f9881067ce8aa203a330e2ddbe75744c50e +Author: Evan Nemerson <evan@coeus-group.com> +Date: Sun Jan 15 11:02:50 2012 -0800 + + glib: various minor introspection and documentation improvements + + Bug 44790 + + glib/Makefile.am | 4 +++- + glib/poppler-annot.cc | 8 ++++---- + glib/poppler-attachment.h | 7 ++++--- + glib/poppler-document.cc | 6 ++++-- + glib/poppler-media.h | 7 ++++--- + glib/poppler-page.cc | 23 +++++++++++++++-------- + 6 files changed, 34 insertions(+), 21 deletions(-) + +commit 8006ed0beb4348e5ad94c547d7bf0d7a59da1b2f +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Mon Jan 16 21:25:19 2012 +1030 + + cairo: ensure paintTransparencyGroup uses same ctm as + beginTransparencyGroup + + Bug 29968 + + poppler/CairoOutputDev.cc | 8 ++++++-- + poppler/CairoOutputDev.h | 1 + + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit a40b398a10b7d8e0af88c23b3706b93656482eff +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sun Jan 15 23:52:28 2012 +1030 + + cairo: restore temporary clip used in CairoOutputDev::fill when + painting a mask + + The clip is only used to clip the paint to the fill path so it should + be moved inside the save/restore. + (cherry picked from commit 100488ec7db2d1f3e25bfda42c1603ca86696195) + + poppler/CairoOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit be59afb19e83c5040ea0d993cfb238aefc06abb1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 15 15:21:06 2012 +0100 + + 0.18.3 + + CMakeLists.txt | 2 +- + NEWS | 15 +++++++++++++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + qt4/src/Doxyfile | 2 +- + 5 files changed, 19 insertions(+), 4 deletions(-) + +commit d4bff411d0d42064a617812d4e1bf2353fd79e1c +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 15 15:13:59 2012 +0100 + + Add copyrights since last release + + poppler/GfxFont.cc | 1 + + poppler/GlobalParams.cc | 1 + + utils/parseargs.cc | 2 +- + 3 files changed, 3 insertions(+), 1 deletions(-) + +commit 7d171e19257023cda55d0040257e8f0a2008271f +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Sun Jan 15 15:07:18 2012 +0100 + + Fix stack overflow in PDFDoc::markObject() + + Bug 44660 + + poppler/PDFDoc.cc | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit 81c989d905b6ba053c87d2a661d71853ddf96b99 +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Sun Jan 15 15:04:51 2012 +0100 + + Correctly initialize globalParams + + utils/pdfseparate.cc | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit bd1ed2ea35a653e20f45eebe3dff9ecf98ba4674 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sun Jan 15 22:18:30 2012 +1030 + + parseargs: don't use arg->size with GooString argument + + 40b56994 added GooString arguments but incorrectly used arg->size as + the string length. arg->size is always 0 for GooString arguments. This + worked because the arg->size - 1 string length passed to + GooString::Set() just happened to be the the same value as the + CALC_STRING_LEN default argument indicating the string length is to be + calculated with strlen. + (cherry picked from commit 4e205a6625431dcf95375de009b4354746a4f0b7) + + utils/parseargs.cc | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +commit 310a10b6c6be2fc96b6f549645f38fe8ffae35a3 +Author: Arseny Solokha <asolokha@gmx.com> +Date: Fri Jan 13 18:52:17 2012 +0100 + + Properly initialize globalParams + + Bug 44659 + + utils/pdfunite.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit fb1ffd2bf8a74e2cd08ee77f7813dfcf594a59ad +Author: Thomas Freitag <thomas.freitag@kabelmail.de> +Date: Sat Jan 7 11:47:19 2012 +0100 + + regtest: read stderr output before calling wait to fix a possible + deadlock + + In the way the scripts starts it subprocesses, stderr becomes buffered + for the subprocesses. And unforunately, when the buffer limit is + reached, the subprocess suspends it work until it can print again on + stderr. That's why the python script runs into a deadlock when the + subprocess produces a lot of error messages. A small rearrange of the + commands, first read the stderr output and then wait that the + subprocess + ends, will remove this deadlock. + + regtest/backends/__init__.py | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit 12e91b1e25fd6c913c63c4e683dde33b583d6fc5 +Author: Yi Yang <ahyangyi@gmail.com> +Date: Sat Jan 7 09:44:42 2012 +1030 + + Include .otf fonts when finding substitute fonts + + Bug 44412 + (cherry picked from commit 9979b1b3e36dc8085d8c684692fece463fa474b1) + + poppler/GfxFont.cc | 2 +- + poppler/GlobalParams.cc | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit e91e70f5a2084c16d664d49c6d30cfc244710db5 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Fri Dec 23 09:55:20 2011 +1030 + + autoconf: Check for cairo-ft and other cairo backends + + so that CAIRO_LIBS includes the freetype dependency and pdftocairo + includes the dependencies for optional cairo backends. + + Bug 43969 + (cherry picked from commit ebfab832ab4f2642b9ab2ededd25de670a3c7147) + + configure.ac | 14 ++++++++++++-- + utils/Makefile.am | 4 ++-- + 2 files changed, 14 insertions(+), 4 deletions(-) + +commit 03544e2f602319f0b381f5f357e14cc2cc77d2c1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Dec 6 23:21:15 2011 +0100 + + include strings.h as we use memcpy + + Fixes bug 43558 + (cherry picked from commit 388d72ac27ae98fe3a1ebd21760f2b0fa0249a9b) + + goo/PNGWriter.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 74f4299e8f9e2d204979479f6579dd784db678a4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 4 17:29:45 2011 +0100 + + Do not fail if we are trying to save a file with Encrypt but that + we have not modified at all + + Fixes KDE bug #288045 + (cherry picked from commit 63c942a45227ef28fb94ef4765171d9812fffafa) + + poppler/PDFDoc.cc | 49 + +++++++++++++++++++++++++++++-------------------- + 1 files changed, 29 insertions(+), 20 deletions(-) + +commit 447a958ce43b697ab99084ba1371b989331c6ccc +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 4 15:44:52 2011 +0100 + + 0.18.2 + + CMakeLists.txt | 2 +- + NEWS | 17 +++++++++++++++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + qt4/src/Doxyfile | 2 +- + 5 files changed, 21 insertions(+), 4 deletions(-) + +commit 22601c2a64f094ede8085a3ccca3de9daaa556e7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 4 15:37:20 2011 +0100 + + update name and copyright + + utils/pdftocairo.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 51e5a67c913c0d6c83f5f6b358b7fca7bb5584e1 +Author: Axel Strübing <axel.struebing@freenet.de> +Date: Thu Nov 24 22:32:57 2011 +0100 + + Fix typo/regression introduced in + f6d026bfa18624ccd321e102bb39ba744998de1e + (cherry picked from commit bdb439ac5a751d6146204ae0d61fdbf7828c89c3) + + poppler/Gfx.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit a44d572f38ae5994ceeba8272f38cb51eb583da5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Nov 24 18:54:27 2011 +0100 + + Fix typo + (cherry picked from commit 74e11d8c912dd95d235e44e7b34b8ea1be082b9f) + + qt4/src/poppler-qt4.h | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit f7d79774460697ca5665eb8b711a7bae0d2eacfc +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Nov 21 23:40:12 2011 +0100 + + qt4: Include QFile + + We use it and the include is not there, WAndre reported it did not + compile for him without it + + qt4/src/poppler-private.h | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 8bd54e8fcb3ef202fb985bca4c2c4a355594e11c +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Nov 14 13:22:53 2011 +0100 + + Make GfxColorSpace::parse accept dicts too + (cherry picked from commit a4c78946bc1fc3d52152af2e319051050ab05e28) + + poppler/GfxState.cc | 14 +++++++++++++- + 1 files changed, 13 insertions(+), 1 deletions(-) + +commit 8b4d6056e0a56fec31ff648a01d88d5942f36b0b +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Nov 11 16:37:27 2011 +0100 + + Do not crash if failing to parse the colorspace + + Fixes bug 42793 + (cherry picked from commit f6d026bfa18624ccd321e102bb39ba744998de1e) + + poppler/Gfx.cc | 52 + +++++++++++++++++++++++++++++----------------------- + 1 files changed, 29 insertions(+), 23 deletions(-) + +commit 105142ed49d82ab8f3593fcd36769fab29b7a432 +Author: Kenji Uno <ku@digitaldolphins.jp> +Date: Wed Nov 9 12:39:41 2011 +0100 + + Fix leak in GooString when resizing + + If resizing from "long" to shorter + (cherry picked from commit e7dbd17ff07afa465636a90f526cd7ac8c731862) + + goo/GooString.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 145c9ae835bd5b0bdc97739c9b096121e3e7d43e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Nov 6 15:44:06 2011 +0100 + + regtest: Skip tests with results when creating refs + + Not only tests that have md5, but also crashed or failed tests. + + regtest/TestReferences.py | 4 ++-- + regtest/backends/__init__.py | 3 +++ + 2 files changed, 5 insertions(+), 2 deletions(-) + +commit d4da0fc45cf36c481570b37bf6c6938a45f70303 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 2 20:20:41 2011 +0100 + + Compile with MSVC needed for last change in the qt4 frontend + (cherry picked from commit 955cd0c7bd3a72340deba098f4242a4904adc60f) + + CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 5294d0b017ce6643207fce5cc9e85ba4e29f4d86 +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Nov 1 14:15:09 2011 +0100 + + qt4: Use PDFDoc(wchar_t *, ...) on Windows + + Bug 35378 + (cherry picked from commit e0f5bc1deebaa9861baffd7c9ba31ea31585cd1d) + + qt4/src/poppler-document.cc | 6 +++--- + qt4/src/poppler-private.h | 17 +++++++++++++++-- + 2 files changed, 18 insertions(+), 5 deletions(-) + +commit 372dc1ef79983f51c1eac52d211d7569a305a273 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Nov 1 14:13:10 2011 +0100 + + regtest: Add --update-refs command line option to run-tests command + + It allows to update the references of failing tests. + + regtest/TestRun.py | 2 +- + regtest/backends/__init__.py | 34 ++++++++++++++++++++++++++++++++-- + regtest/commands/run-tests.py | 4 ++++ + 3 files changed, 37 insertions(+), 3 deletions(-) + +commit ebf7fbc74da10d1bc423d33b26e30166870642e4 +Author: Rex Dieter <rdieter@math.unl.edu> +Date: Tue Nov 1 09:40:53 2011 +0100 + + Fix pkg-config files + + We were using $FOO_REQUIRED instead of @FOO_REQUIRED@ + + configure.ac | 1 + + poppler-glib-uninstalled.pc.in | 2 +- + poppler-glib.pc.cmake | 2 +- + poppler-glib.pc.in | 2 +- + 4 files changed, 4 insertions(+), 3 deletions(-) + +commit 61b1556d1c62bf090b2eadf93e4e7d0aff7b8015 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 30 16:08:46 2011 +0100 + + pdftocairo: Use fisrtPage instead of uninitialized pg variable + + This fixes an error in my previous commit. + + utils/pdftocairo.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e4a2adb02969e872e37e408ced4c39131c6751ea +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 30 16:02:19 2011 +0100 + + pdftocairo: Make sure beginDocument() is always called + + This fixes a crash when rendering only odd/even pages in a printing + format. + + utils/pdftocairo.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 124a5a471ebae8c268c6b920722be6b22b8c1c2d +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Oct 26 15:30:27 2011 +0200 + + 0.18.1 + + CMakeLists.txt | 4 +- + NEWS | 21 ++++++++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + gtk-doc.make | 112 + +++++++++++++++++++++++++++++---------------------- + m4/gtk-doc.m4 | 6 +++ + poppler/Makefile.am | 2 +- + qt4/src/Doxyfile | 2 +- + 8 files changed, 97 insertions(+), 54 deletions(-) + +commit 6d571cc2ce129c4477d394de3ee2c8ad83f18535 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Oct 26 14:26:38 2011 +0200 + + Add Adrian's (C) + + utils/parseargs.cc | 1 + + utils/parseargs.h | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit d87450db448502ce0c58f7a51e6af18e0865d3ac +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Oct 17 13:42:06 2011 +0200 + + remove useless #if + (cherry picked from commit e71088dc5087303b1ae5f3e72af287ec4e0a1342) + + poppler/Page.cc | 4 +--- + 1 files changed, 1 insertions(+), 3 deletions(-) + +commit 080905c3badc7ef2e35688c7020b24c6ea0b8c54 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Mon Oct 17 20:33:03 2011 +1030 + + utils: Add GooString arg to parseargs and use for paths in pdftocairo + + <sys/param.h> and MAXPATHLEN is not available on windows. Avoid the + need to know the max path length by using GooString for the path. + (cherry picked from commit 40b56994dda79653c902977423f349efa55cf21e) + + utils/parseargs.cc | 12 ++++++++++++ + utils/parseargs.h | 2 ++ + utils/pdftocairo.cc | 17 ++++++++--------- + 3 files changed, 22 insertions(+), 9 deletions(-) + +commit f2313b772037916ad770a9c4d7e3fb3db0954684 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Mon Sep 19 21:11:44 2011 +0930 + + cairo: fix setSoftMask bugs + + - Getting the clip extents in device space requires transforming all + four corners of the clip extents and translating by the group device + offset other wise the device extents will not be correct for rotated + ctm. + + - Adjust matrix to include translation of the clip extents origin + since the mask surface does not start at (0,0). + + - the ctm when called cairo_mask() needs to be the same as the + ctm when + the mask was created. + + - implement transfer function in setSoftMask + + Bug 41005 + (cherry picked from commit 4bb34757dbbff780baba053371274c05b29771e1) + + poppler/CairoOutputDev.cc | 97 + ++++++++++++++++++++++++++++----------------- + poppler/CairoOutputDev.h | 6 ++- + 2 files changed, 65 insertions(+), 38 deletions(-) + +commit 185ed4f3c98f162fe3ddb00d4aa0b637988dfad9 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 16 12:40:27 2011 +0200 + + Remove poppler-cairo dependency from poppler-glib pkg-config file + + poppler-glib links to poppler-cairo statically, so it doesn'tm + depend on + the dynamic library. + + CMakeLists.txt | 1 - + configure.ac | 2 -- + poppler-glib-uninstalled.pc.in | 2 +- + poppler-glib.pc.cmake | 2 +- + poppler-glib.pc.in | 2 +- + 5 files changed, 3 insertions(+), 6 deletions(-) + +commit 0339b098f1b00f5ad1bb21bfda14c9c72cb1b058 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Oct 8 15:03:24 2011 +1030 + + ps: fix uncolored tiling patterns + + Uncolored patterns and type 3 chars must not use color setting + operators. When emitting an uncolored pattern: + - disable the update color space functions + - disable the update color functions + - set pdfLastFill and pdfLastStroke to true to ensure the the sCol + and fCol procedures that is used by some of the PS procedures that + emulate PDF operators do not update the color. + + Bug 41462 + (cherry picked from commit acd8ecc9121db58851f73764f046a4f54bd80581) + + poppler/PSOutputDev.cc | 41 +++++++++++++++++++++++++++++++++++++++++ + poppler/PSOutputDev.h | 1 + + 2 files changed, 42 insertions(+), 0 deletions(-) + +commit e0e1b848aad2232adcd54943cb92b317f02da11d +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Fri Oct 7 20:29:36 2011 +1030 + + ps: emit non repeating patterns in PSOutput with inType3Char = true + + instead of falling back to Gfx. This avoids emitting the image data + twice. + (cherry picked from commit 6e1326b11f98f2b277e53a6cdbcb373ce6c29958) + + poppler/PSOutputDev.cc | 23 +++++++++++++++++++++++ + 1 files changed, 23 insertions(+), 0 deletions(-) + +commit 2ec41e76624eb7aab0368d76fac99bcbc8bc1879 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Oct 1 20:19:19 2011 +0930 + + ps: fix tiling pattern fill matrix + + In PS the pattern matrix maps the pattern space to user space. In PDF + the pattern matrix maps the pattern space to the default ctm of the + content stream (baseMatrix in Gfx). The matrix mat already contains + the + correct pattern->baseMatrix so use it instead of pmat. + + Bug 41374 + (cherry picked from commit ed05fcb8c442b716c5e382c98f2625701926c86a) + + poppler/PSOutputDev.cc | 9 ++------- + 1 files changed, 2 insertions(+), 7 deletions(-) + +commit 14f9ff2b149c932b52ac88d7cd3f189e3b98257c +Author: Yury G. Kudryashov <urkud.urkud@gmail.com> +Date: Thu Oct 6 14:49:19 2011 +0200 + + Okular moved to git, fix docs + + Fix URLs in poppler-qt4 documentation + + qt4/src/Mainpage.dox | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit d0e4ba50d101c165106e0dc3b08249dba2ea0465 +Author: Yury G. Kudryashov <urkud.urkud@gmail.com> +Date: Thu Oct 6 14:49:08 2011 +0200 + + Explicitly include fontconfig include dir + + This fixes cmake-driven build on systems where fontconfig is + installed in + non-standard location. + + CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 17ac6b96aa99213f85006a37d10c927fe2e3f06d +Author: Yury G. Kudryashov <urkud.urkud@gmail.com> +Date: Thu Oct 6 14:48:46 2011 +0200 + + Fix typo in cmake option documentation + + Relocatable build does *not* (was missing in docs) hardcode library + location. + + CMakeLists.txt | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ae22992b13ad3d9a51bcd3e2e1f187a8edd655f7 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Thu Oct 6 14:21:10 2011 +0200 + + close the file or flush stdout + (cherry picked from commit ab8616dcb637ac1aeb4d5f142c3c4bff9aecd041) + + utils/pdftocairo.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 8cf3868edf3ef15b4ca3e53e1c3b597e99870070 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 1 15:33:15 2011 +0200 + + Another typo fix + + qt4/src/poppler-qt4.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1346caac6c564035d368617a329b361d0253fbf6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 1 14:34:50 2011 +0200 + + Fix typo in documentation + + Reported by Glad Deschrijver + + qt4/src/poppler-qt4.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b5fa040666764407fabed32fde09aa0a98308b46 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 1 14:27:44 2011 +0200 + + Remove space after % as it confuses libspectre + + Discussed with Adrian Johnson + Problem found by Glad Deschrijver + (cherry picked from commit 9855529e8e1a83c6d77a9e4221ea2132d44e9fb1) + + poppler/PSOutputDev.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 66ab373365b8f9060ff3d117bb677520e32c7e8e +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Wed Sep 28 21:20:23 2011 +0930 + + cairo: fix crash when using poppler_page_get_image() + + poppler/CairoOutputDev.h | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 0c0591fa23441c54c9443072615273ea65482d76 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 27 00:45:59 2011 +0200 + + 0.18.0 + + CMakeLists.txt | 6 +- + NEWS | 14 +++++++ + configure.ac | 4 +- + cpp/Doxyfile | 2 +- + gtk-doc.make | 102 + +++++++++++++++++++++------------------------------ + poppler/Makefile.am | 2 +- + qt4/src/Doxyfile | 2 +- + 7 files changed, 64 insertions(+), 68 deletions(-) + +commit 19f5db7acd64330d198f18695175df02141794d7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 27 00:15:15 2011 +0200 + + Update Carlos (C) year + + poppler/Gfx.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 6d34d4af90b8b41360de4dabb000bbcc894775d0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 27 00:09:54 2011 +0200 + + Rename pdfmerge and pdfextract + + To pdfunite and pdfseparate, the old names were taken + + utils/.gitignore | 4 +- + utils/CMakeLists.txt | 28 ++++---- + utils/Makefile.am | 16 ++-- + utils/pdfextract.1 | 49 -------------- + utils/pdfextract.cc | 115 -------------------------------- + utils/pdfmerge.1 | 33 --------- + utils/pdfmerge.cc | 176 + -------------------------------------------------- + utils/pdfseparate.1 | 49 ++++++++++++++ + utils/pdfseparate.cc | 115 ++++++++++++++++++++++++++++++++ + utils/pdfunite.1 | 33 +++++++++ + utils/pdfunite.cc | 176 + ++++++++++++++++++++++++++++++++++++++++++++++++++ + 11 files changed, 397 insertions(+), 397 deletions(-) + +commit baf54c2876edd476ffc68da6518598847bb7ec8a +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 26 15:54:46 2011 +0200 + + Remove getRawStream + + Since it does exactly the same as getNextStream + + poppler/DCTStream.h | 1 - + poppler/Stream.h | 1 - + utils/HtmlOutputDev.cc | 7 ++----- + utils/ImageOutputDev.cc | 9 +++------ + 4 files changed, 5 insertions(+), 13 deletions(-) + +commit 69707f0a9b5a94c80817039db943fb4f26e743e3 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Mon Sep 19 22:00:34 2011 +0930 + + Update .gitignore + + regtest/.gitignore | 1 + + utils/.gitignore | 2 ++ + 2 files changed, 3 insertions(+), 0 deletions(-) + +commit 0de477817e424078cfcfcae114e7745809f0848d +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Mon Sep 19 21:57:07 2011 +0930 + + utils: Add Glyph & Cog copyright to pdfmerge and pdfextract man pages + + utils/pdfextract.1 | 3 ++- + utils/pdfmerge.1 | 3 ++- + 2 files changed, 4 insertions(+), 2 deletions(-) + +commit ce7372db64ee807dc2b491e121fbe557dbf697e8 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Mon Sep 19 22:04:27 2011 +0930 + + regtest: render cairo at 72ppi + + For consistency with splash. It is faster and easier to compare with + splash results. + + regtest/backends/cairo.py | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 6cf7330089c4dcc1099906d9c37c3607a2a1eeba +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Sep 19 18:42:35 2011 +0200 + + regtest: Ignore checksums of crashed, failed and stderr files + + They shouldn't have a checksum, but it might happen with md5 files + generated with previous versions. + + regtest/backends/__init__.py | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 6512bf1c5dab37058460882fec3407b396830981 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Sep 18 18:38:32 2011 +0200 + + Render at 72 instead of 150, it's faster :D + + regtest/backends/splash.py | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit b828f63ed3896a22f3fe7ddbe2ec2f549d7a2c62 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Sep 18 18:20:47 2011 +0200 + + install pdfextract and pdfmerge manpages + + utils/CMakeLists.txt | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 986759dfbe85998c85ee9b0825c7522395567531 +Author: Thomas Freitag <Thomas.Freitag@kabelmail.de> +Date: Sun Sep 18 18:19:30 2011 +0200 + + pdfextract and pdfmerge man pages + + utils/Makefile.am | 2 ++ + utils/pdfextract.1 | 48 + ++++++++++++++++++++++++++++++++++++++++++++++++ + utils/pdfmerge.1 | 32 ++++++++++++++++++++++++++++++++ + 3 files changed, 82 insertions(+), 0 deletions(-) + +commit 90da1af542fd7f3cecef31b15da6971345b38209 +Author: Thomas Freitag <Thomas.Freitag@kabelmail.de> +Date: Sun Sep 18 18:19:04 2011 +0200 + + Complain if %d is not present and it should + + utils/pdfextract.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 40e066a84ddb3a5c41805c095659af5f5704d6d8 +Author: suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp> +Date: Sun Sep 18 18:16:14 2011 +0200 + + qt_subdir is unneeded + + Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e23f6b9cade804136bd4bb58182f4fe0b072fbf2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Sep 18 16:27:50 2011 +0200 + + regtest: Do not create checksums for crashed, failed and stderr files + + regtest/backends/__init__.py | 12 +++++++++++- + 1 files changed, 11 insertions(+), 1 deletions(-) + +commit 110b8be1d9f2694b42bd12dcb6af02bfca9866dd +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Sep 18 16:26:58 2011 +0200 + + Fix memory leak + + poppler/Gfx.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 12c6239ca4f1f6a5de72aebd755f9d1354ea5837 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Sep 18 11:08:06 2011 +0200 + + regtest: Fix checksum check for tests containing spaces in filename + + regtest/backends/__init__.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 93ba92db0a3af35f197a4faa5a528af98ea0f624 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 14 00:58:44 2011 +0200 + + Make it work with Python3 + + regtest/Config.py | 4 ++-- + regtest/TestReferences.py | 8 ++++---- + regtest/TestRun.py | 32 ++++++++++++++++---------------- + regtest/Timer.py | 8 ++++---- + regtest/backends/__init__.py | 12 ++++++------ + regtest/commands/__init__.py | 6 +++--- + regtest/commands/create-refs.py | 2 +- + regtest/commands/run-tests.py | 2 +- + regtest/main.py | 2 +- + 9 files changed, 38 insertions(+), 38 deletions(-) + +commit da1b5437148e1e6317246b16f7235c8bc280be97 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Sep 13 20:09:56 2011 +0200 + + regtest: Add a way to skip files + + A new command line option --skip has been added to give a file + with the + list of test to skip. When --skip is not used, it look for a file + named + Skipped in the tests dir. Lines starting with '#' are considered + comments and are ignored. + + regtest/TestReferences.py | 9 +++++++-- + regtest/TestRun.py | 9 +++++++-- + regtest/Utils.py | 20 ++++++++++++++++++++ + regtest/main.py | 6 +++++- + 4 files changed, 39 insertions(+), 5 deletions(-) + +commit b730b2c1d9666f62f940762663c8318e64049d61 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Sep 13 19:04:04 2011 +0200 + + regtest: Limit the number of arguments to 1 + + It's easier to run poppler-regtest more than once if you need to run + different tests. + + regtest/commands/create-refs.py | 24 ++++++++++++------------ + regtest/commands/run-tests.py | 26 +++++++++++++------------- + regtest/main.py | 2 +- + 3 files changed, 26 insertions(+), 26 deletions(-) + +commit 5ce045d0358318859c844340c639483485b69c58 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Sep 13 18:18:21 2011 +0200 + + regtest: Sort tests before create-refs/run-tests and show progress + + regtest/TestReferences.py | 20 ++++++++------------ + regtest/TestRun.py | 21 ++++++++++----------- + regtest/Utils.py | 35 +++++++++++++++++++++++++++++++++++ + 3 files changed, 53 insertions(+), 23 deletions(-) + +commit 10801b6faee9037af054fe74cc4a03620ea41d45 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Sep 12 20:13:17 2011 +0200 + + Add initial poppler regressions test program + + regtest/Config.py | 32 ++++++ + regtest/TestReferences.py | 73 +++++++++++++ + regtest/TestRun.py | 156 +++++++++++++++++++++++++++ + regtest/Timer.py | 73 +++++++++++++ + regtest/backends/__init__.py | 220 + +++++++++++++++++++++++++++++++++++++++ + regtest/backends/cairo.py | 39 +++++++ + regtest/backends/postscript.py | 35 ++++++ + regtest/backends/splash.py | 39 +++++++ + regtest/backends/text.py | 48 +++++++++ + regtest/commands/__init__.py | 93 ++++++++++++++++ + regtest/commands/create-refs.py | 65 ++++++++++++ + regtest/commands/run-tests.py | 69 ++++++++++++ + regtest/main.py | 77 ++++++++++++++ + regtest/poppler-regtest | 6 + + 14 files changed, 1025 insertions(+), 0 deletions(-) + +commit 245e331a14e11a615bf47abbeb34a3561e393b41 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 12 13:43:49 2011 +0200 + + 0.17.4 + + CMakeLists.txt | 2 +- + NEWS | 5 +++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + qt4/src/Doxyfile | 2 +- + 5 files changed, 9 insertions(+), 4 deletions(-) + +commit 194b2413eb2c6a1641508aec63336aaf89ec3b51 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 12 13:43:35 2011 +0200 + + gir 0.18 + + glib/CMakeLists.txt | 12 ++++++------ + glib/Makefile.am | 12 ++++++------ + 2 files changed, 12 insertions(+), 12 deletions(-) + +commit bf2cb5c9c47b4a61192101f0a48771657228e383 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Tue Aug 30 19:08:40 2011 +0930 + + Fix compile error with libpng >= 1.5.0 + + libpng 1.5.0 changed one of the types in the png_set_iCCP() function + prototype. + + goo/PNGWriter.cc | 9 ++++++++- + 1 files changed, 8 insertions(+), 1 deletions(-) + +commit 0ca5453fea9e5342188f772acd6f31af1778f236 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Aug 30 16:20:17 2011 +0200 + + Compile when defining USE_FIXEDPOINT + + splash/Splash.cc | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit bd7a53bc2f27fc3979f8de306e2dcaca53d4570a +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Aug 30 16:20:08 2011 +0200 + + match function definition + + poppler/SplashOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 508517a35cb3bc5195682a9cd89fb50a801eddc2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 29 23:55:42 2011 +0200 + + 0.17.3 + + CMakeLists.txt | 4 ++-- + NEWS | 32 ++++++++++++++++++++++++++++++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + glib/CMakeLists.txt | 2 +- + glib/Makefile.am | 2 +- + poppler/Makefile.am | 2 +- + qt4/src/CMakeLists.txt | 2 +- + qt4/src/Doxyfile | 2 +- + qt4/src/Makefile.am | 2 +- + 10 files changed, 42 insertions(+), 10 deletions(-) + +commit 1431564f3363a63a8669c8dd15970db814f4969f +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Mon Aug 29 22:22:02 2011 +0200 + + Add pdfextract and pdfmerge + + See "Creating PDF with poppler ?" thread for more info + + utils/CMakeLists.txt | 15 ++++ + utils/Makefile.am | 10 +++ + utils/pdfextract.cc | 111 +++++++++++++++++++++++++++++++ + utils/pdfmerge.cc | 176 + ++++++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 312 insertions(+), 0 deletions(-) + +commit 8ca2f41089bc6402baf9b24428af04314c037b54 +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Mon Aug 29 22:20:52 2011 +0200 + + Rework writing of PDF files + + Makes it more compatible with other PDF readers + See "Creating PDF with poppler ?" thread in the mailing list for + more info + + poppler/PDFDoc.cc | 389 + +++++++++++++++++++++++++++++++++++++++++++++++------ + poppler/PDFDoc.h | 30 ++++- + 2 files changed, 375 insertions(+), 44 deletions(-) + +commit 33da7e270431e8e4c500e7573b3ca0dddd9f237e +Author: suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp> +Date: Sun Aug 28 22:07:38 2011 +0200 + + Fix building static-linked pdftocairo + + utils/Makefile.am | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit 91fafce028ca6620c0eb22e370fb4c6fd3404e3c +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Tue Aug 23 21:02:02 2011 +0930 + + cairo: align strokes when Stroke Adjust is true and line width <= 1 + + If the stroke coordinates are not aligned, lines in cairo may be up to + 1 pixel wider than the requested width. This is most obvious when the + line width is 1 and the rendered line is 2 pixels. + + When Stroke Adjust is true, the PDF standard requires that stroke + coordinates be adjusted to ensure the stroke width is within half a + pixel of the requested width. + + If Stroke Adjust is enabled and the width is <= 1 pixel (the previous + commit adjusts the width to be at least 1 pixel), use the method + documented at http://www.cairographics.org/FAQ/#sharp_lines to align + the coordinates to ensure the rendered width is 1 pixel. + + Fixes bug #4536. + + poppler/CairoOutputDev.cc | 40 +++++++++++++++++++++++++++++++++++----- + poppler/CairoOutputDev.h | 3 +++ + 2 files changed, 38 insertions(+), 5 deletions(-) + +commit cfc67afe80b963ba662018674cadf3085466bb9f +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Tue Aug 23 20:46:24 2011 +0930 + + cairo: fix stroking of very thin lines + + Lines with a width less than 1.0 are almost invisible in cairo output + due to antialising. The PDF standard states that when the Stroke + Adjust graphics parameter is true, all lines must be at least one + pixel wide. + + Add a stroke_adjust flag to the CairoOuputDev. Like splash, use the + globalParam strokeAdjust setting (which defaults to true) to + initialize the flag and ignore the Stroke Adjust settng in PDF + files. This emulates Acrobat behavior. + + When stroke_adjust is true, find the line width in device pixels and + if less than 0.5 set the line width to 0.5 device pixels. The value + 0.5 pixels seems to make horizontal and vertical lines look better + because integer aligned 1.0 wide lines in cairo are rendered two + pixels wide which looks too fat. + + poppler/CairoOutputDev.cc | 20 +++++++++++++++++++- + poppler/CairoOutputDev.h | 1 + + 2 files changed, 20 insertions(+), 1 deletions(-) + +commit 7a7c932e09796b944dda69df1b339c889ee1d63a +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Aug 25 00:23:40 2011 +0200 + + Add a way to get the fully qualified name + + qt4/src/poppler-form.cc | 12 +++++++++++- + qt4/src/poppler-form.h | 8 +++++++- + 2 files changed, 18 insertions(+), 2 deletions(-) + +commit e001871d927f9cc86b4327d64e4c66ad00172ad0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Aug 24 23:44:18 2011 +0200 + + Clarify ownership + + qt4/src/poppler-qt4.h | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 87c48fdc175be4d852b953778f915ea93cd50194 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Wed Aug 24 19:53:48 2011 +0930 + + cairo: fix unique id mime data + + The unique id string was copied before the object number was appended + resulting in all images in pdf output being the same. + + poppler/CairoOutputDev.cc | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +commit 08a2ba6f1603246651f0d5e697b88d38363d7df2 +Author: Pino Toscano <pino@kde.org> +Date: Tue Aug 23 20:20:32 2011 +0200 + + pdftocairo/cmake: need to link to freetype + + utils/CMakeLists.txt | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 82496b18dc4aff66cc29f2b6607c8f894afe8b49 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 22 16:42:28 2011 +0200 + + Update Adrian (C) + + poppler/GfxFont.h | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 2576e3a6d9746e2272c620a775e11295932eb5f2 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Mon Aug 22 21:41:36 2011 +0930 + + update SEE ALSO section of man pages + + - ensure each man page references all other utils + - sort list of utils in alphabetical order + + utils/pdffonts.1 | 8 +++++--- + utils/pdfimages.1 | 8 +++++--- + utils/pdfinfo.1 | 8 +++++--- + utils/pdftocairo.1 | 2 +- + utils/pdftohtml.1 | 8 ++++++++ + utils/pdftoppm.1 | 8 +++++--- + utils/pdftops.1 | 8 +++++--- + utils/pdftotext.1 | 9 +++++---- + 8 files changed, 39 insertions(+), 20 deletions(-) + +commit 23ec5c8d394beb632ee45f6308215646cd1a0195 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Mon Aug 22 21:26:24 2011 +0930 + + cairo: only use show_text_glyphs if the surface supports it and the + font has toUnicode + + When generating pdf output, fonts that do not have toUnicode cause an + excessive number of empty text ActualText entries to be written due to + glyphs that do not have have a mapping. + + poppler/CairoOutputDev.cc | 12 ++++++++---- + poppler/CairoOutputDev.h | 1 + + poppler/GfxFont.h | 3 +++ + 3 files changed, 12 insertions(+), 4 deletions(-) + +commit 3a574f13fa22b7c31eda0d0437f4094a5a39ff34 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Fri Aug 19 23:23:24 2011 +0930 + + cairo: fix stroke patterns + + Since cairo still does not yet have cairo_stroke_to_path(), this + implements a workaround for stroke patterns. In clipToStrokePath, the + stroke path and stroke parameters are saved. In tilingPatternFill and + fill (used to draw shading patterns) if a stroke path clip has been + saved, the current pattern is stroked instead of filled using the + saved stroke. + Fixes bug #11719. + + poppler/CairoOutputDev.cc | 52 + ++++++++++++++++++++++++++++++++++++++++++++- + poppler/CairoOutputDev.h | 17 +++++++++++++- + 2 files changed, 66 insertions(+), 3 deletions(-) + +commit eb740dac838d2a1e32899327ca6d25c3dca641df +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Aug 22 13:41:56 2011 +0200 + + glib-demo: Add text attributes information to text demo + + glib/demo/text.c | 103 + ++++++++++++++++++++++++++++++++++++++++++++++++++--- + 1 files changed, 97 insertions(+), 6 deletions(-) + +commit cda4aefaa136ae07778de3b1593808a5aaa2db5b +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Aug 22 13:40:49 2011 +0200 + + glib-demo: Add pgd_pixbuf_new_for_color() to utils + + To get a pixbuf for a given poppler color. + + glib/demo/annots.c | 22 +--------------------- + glib/demo/utils.c | 27 +++++++++++++++++++++++++++ + glib/demo/utils.h | 1 + + 3 files changed, 29 insertions(+), 21 deletions(-) + +commit 2a11b2963a548186654722a393db1e19d57828f1 +Author: danigm <danigm@wadobo.com> +Date: Mon Aug 22 12:51:50 2011 +0200 + + glib: Add poppler_page_get_text_attributes() + + It returns a list of text attributes that apply to a range of text as + returned by poppler_page_get_text(). Text attributes are represented + by + a PopplerTextAttributes struct that contains font name, font size, + whether text is undrlined and foreground color for a range of text. + Fixes bug #33269. + + glib/poppler-page.cc | 202 + +++++++++++++++++++++++++++++++++++ + glib/poppler-page.h | 33 ++++++ + glib/poppler.h | 1 + + glib/reference/poppler-sections.txt | 7 ++ + 4 files changed, 243 insertions(+), 0 deletions(-) + +commit 15f99157cf3900bf20cf619e204ae53085af497d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Aug 22 12:43:12 2011 +0200 + + textoutputdev: Add TextFontInfo::matches() + + It checks whether two TextFontInfo objects contain the same font. + + poppler/TextOutputDev.cc | 4 ++++ + poppler/TextOutputDev.h | 1 + + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit 5b554b39fca634c8ba58915c14522cb2920fe280 +Author: Pino Toscano <pino@kde.org> +Date: Mon Aug 22 13:16:23 2011 +0200 + + pdftocairo/cmake: link to lcms library if available + + utils/CMakeLists.txt | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit f7cd236fea8740ef05635d1fd7917a778cc373f0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 22 00:00:32 2011 +0200 + + Ship HtmlUtils.h + + utils/Makefile.am | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit a128a858c50287cfba74c69996276ea44370dc26 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 21 23:52:06 2011 +0200 + + Update Adrian's (C) + + goo/PNGWriter.cc | 2 +- + goo/PNGWriter.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit b78134314107d8344360c3313478115ed291630d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 21 23:46:09 2011 +0200 + + Fix copyright + + c&p is evil + + goo/gtypes_p.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ade53277546cef4ba19d982518c0cd83a4bb9c12 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 21 23:42:53 2011 +0200 + + Move HAVE_STDINT_H use to a private header + + This way we do not need to expose it in poppler-config.h since + gtypes.h is a half public header + + goo/Makefile.am | 1 + + goo/gtypes.h | 18 ------------------ + goo/gtypes_p.h | 30 ++++++++++++++++++++++++++++++ + poppler/CairoOutputDev.cc | 1 + + poppler/CairoRescaleBox.cc | 1 + + utils/pdftocairo.cc | 1 + + 6 files changed, 34 insertions(+), 18 deletions(-) + +commit 6166c3a37a4d6307d4f23ee272ea07c95bbba74a +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 21 23:31:30 2011 +0200 + + Silence silly gcc + + goo/PNGWriter.cc | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit eb5b228c4c24152e632c931b63c64ffb1e10d45d +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Aug 20 21:13:18 2011 +0930 + + pdftocairo: fix writing to stdout for ps/pdf/svg + + utils/pdftocairo.cc | 23 ++++++++++++++++++++--- + 1 files changed, 20 insertions(+), 3 deletions(-) + +commit 1beac5896a301be68de22240017fef11e7d27d40 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Aug 13 00:23:23 2011 +0930 + + Add poppler version to PSOutputDev ouput + + poppler/PSOutputDev.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit b35fd3651fd3dbaa876fc64b8c5cfe77ae67335f +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Fri Aug 5 23:01:51 2011 +0930 + + cairo: use cairo_show_text_glyphs() when printing + + This will allow cairo to setup the correct toUnicode or glyph names to + ensure text can be extracted. + + poppler/CairoOutputDev.cc | 41 + ++++++++++++++++++++++++++++++++++++++--- + poppler/CairoOutputDev.h | 5 +++++ + 2 files changed, 43 insertions(+), 3 deletions(-) + +commit 51ade078bc1fa737e20120ae4cb3bf693a219823 +Author: Stefan Thomas <thomas@txtbear.com> +Date: Thu Jul 15 16:24:55 2010 +0100 + + pdftocairo: Added to CMake build system. + + utils/CMakeLists.txt | 20 ++++++++++++++++++++ + 1 files changed, 20 insertions(+), 0 deletions(-) + +commit 5a8745cdf428e22641937977eedfc1d605f6ff07 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Fri Aug 12 23:57:01 2011 +0930 + + Add pdftocairo man page + + utils/Makefile.am | 5 +- + utils/pdftocairo.1 | 254 + ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 258 insertions(+), 1 deletions(-) + +commit b67a12b2b26692e2ccec7ff2e6df18fee05be535 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Thu Aug 11 21:34:11 2011 +0930 + + pdftocairo - utility for creating png/jpeg/ps/eps/pdf/svg using + CairoOutputDev + + utils/.gitignore | 2 +- + utils/Makefile.am | 20 +- + utils/pdftocairo.cc | 970 + +++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 989 insertions(+), 3 deletions(-) + +commit 4f2d774826bf7bb7b3825e02c5ca4c2928643950 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Thu Aug 11 21:32:53 2011 +0930 + + png: add support for embedding ICC profile + + goo/PNGWriter.cc | 28 ++++++++++++++++++++++++++++ + goo/PNGWriter.h | 8 ++++++++ + 2 files changed, 36 insertions(+), 0 deletions(-) + +commit 1091f47310bf0fc71bac5dd4ec81dad50b2f2537 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Wed Aug 10 18:48:15 2011 +0930 + + png: Add additional pixel formats + + RGBA is required for images with transparency. GRAY and MONOCHROME + allow PNGWriter write more compact PNG files when the images is known + to be all gray or monochrome. + + goo/PNGWriter.cc | 30 ++++++++++++++++++++++++++---- + goo/PNGWriter.h | 11 ++++++++++- + 2 files changed, 36 insertions(+), 5 deletions(-) + +commit c6f26915db568f12892d48005746ad2922c19000 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Wed Aug 10 18:45:24 2011 +0930 + + png: use PNG_RESOLUTION_METER instead of PNG_RESOLUTION_UNKNOWN to + set resolution + + gimp does not show the correct resolution unless PNG_RESOLUTION_METER + is used + + goo/PNGWriter.cc | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +commit 2667d2a5b34e1bbf322aea42876e7e81aa06dc29 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Tue Aug 9 22:05:53 2011 +0930 + + Use stdint.h instead of assuming the size of types + + configure.ac | 1 + + goo/gtypes.h | 18 ++++++++++++++++++ + poppler/CairoOutputDev.cc | 2 -- + poppler/CairoRescaleBox.cc | 2 -- + 4 files changed, 19 insertions(+), 4 deletions(-) + +commit c043f298e68bdfffcb7505ec354ec7487b5bd7b2 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Fri Jul 8 21:13:36 2011 +0930 + + cairo: assume printer pixel size is 1/600" when stroking 0 width lines + + Fixes bug #39067. + + poppler/CairoOutputDev.cc | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 961adf0b767be78d3556b7315de3761d3d46b107 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Thu Aug 18 17:44:35 2011 +0930 + + cairo: set mime data for soft masked images + + Fixes bug #40192. + + poppler/CairoOutputDev.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 86271e4810f714d4ba7a2a6651a9b1d04f653262 +Author: Joshua Richardson <jric@chegg.com> +Date: Thu Aug 18 18:48:40 2011 +0200 + + pdftohtml: Support text rotation + + Includes a few other fixlets. + See bug 38586 for more info + + utils/HtmlFonts.cc | 64 ++++++++++-------- + utils/HtmlFonts.h | 10 ++- + utils/HtmlOutputDev.cc | 170 + +++++++++++++++++++++++++++++++++--------------- + utils/HtmlOutputDev.h | 8 ++- + utils/HtmlUtils.h | 51 ++++++++++++++ + 5 files changed, 218 insertions(+), 85 deletions(-) + +commit 56248b84e2185483dd54704c13838e8f78029d49 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Aug 18 12:40:51 2011 +0200 + + Only declare overprint if we are going to use it + + utils/pdftoppm.cc | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit a1093aae9f64cb6768164551d50cafaef52876c1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Aug 18 12:30:29 2011 +0200 + + Fix Adrian's (C) + + poppler/PSOutputDev.cc | 2 +- + poppler/PSOutputDev.h | 3 ++- + poppler/PreScanOutputDev.cc | 1 + + poppler/PreScanOutputDev.h | 1 + + poppler/SplashOutputDev.cc | 1 + + poppler/SplashOutputDev.h | 1 + + 6 files changed, 7 insertions(+), 2 deletions(-) + +commit 7741b24d05f50c134cf15361d52f5df7ae3c3115 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sun Aug 14 22:06:22 2011 +0930 + + ps: Avoid using /PatternType if only one instance of the pattern + is used + + this optimization makes pages print faster on my LaserJet + + poppler/PSOutputDev.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit a60e61ac64634dc59c80d8e6b0288c1269fc0154 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sun Aug 14 21:55:24 2011 +0930 + + ps: use PS Patterns for tiling fill when PS level >= 2 + + poppler/CairoOutputDev.cc | 2 +- + poppler/CairoOutputDev.h | 4 +- + poppler/Gfx.cc | 4 +- + poppler/OutputDev.h | 2 +- + poppler/PSOutputDev.cc | 59 + +++++++++++++++++++++++++++++++++++++++--- + poppler/PSOutputDev.h | 13 ++++++++- + poppler/PreScanOutputDev.cc | 2 +- + poppler/PreScanOutputDev.h | 2 +- + poppler/SplashOutputDev.cc | 2 +- + poppler/SplashOutputDev.h | 2 +- + 10 files changed, 76 insertions(+), 16 deletions(-) + +commit 9938770e737b2fcec8269147e70663517f848925 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 15 13:17:24 2011 +0200 + + 0.17.2 + + CMakeLists.txt | 4 ++-- + NEWS | 37 +++++++++++++++++++++++++++++++++++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + glib/CMakeLists.txt | 2 +- + glib/Makefile.am | 2 +- + poppler/Makefile.am | 2 +- + qt4/src/CMakeLists.txt | 2 +- + qt4/src/Doxyfile | 2 +- + qt4/src/Makefile.am | 5 +++-- + 10 files changed, 49 insertions(+), 11 deletions(-) + +commit 378fc06c574b85b5c003ca842aa743f0ffe5587e +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 1 22:14:12 2011 +0200 + + Only assume the OC is not visible if it exists and is set to no + + Similar to commit e2def20a45c1d8307fd62fabb9769121af975abf + but in the other branch of the if, fixes bug 39637 + + poppler/OptionalContent.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 861a7bfb9431609e1e148240447f23c8e83b9d0f +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Fri Jul 29 00:30:58 2011 +0200 + + Implement overprint in Splash + + See the "Implementing overprint in Splash" thread in the mailing + list for more info + + goo/ImgWriter.h | 2 + + goo/JpegWriter.cc | 54 +++++++- + goo/JpegWriter.h | 7 +- + poppler/Gfx.cc | 98 +++++++++++++-- + poppler/GfxState.cc | 1 + + poppler/GfxState.h | 4 + + poppler/OutputDev.h | 1 + + poppler/SplashOutputDev.cc | 307 + ++++++++++++++++++++++++++++++++++++++------ + poppler/SplashOutputDev.h | 51 +++++++- + splash/Splash.cc | 86 +++++++++--- + splash/Splash.h | 9 +- + splash/SplashBitmap.cc | 64 +++++++++- + splash/SplashBitmap.h | 1 + + splash/SplashPattern.cc | 16 ++- + splash/SplashPattern.h | 7 + + splash/SplashState.cc | 11 ++- + splash/SplashState.h | 22 +++ + splash/SplashTypes.h | 5 +- + utils/pdftoppm.cc | 36 +++++- + 19 files changed, 686 insertions(+), 96 deletions(-) + +commit e2fa8a2ca8459d19c0f9dca445a2399b9a3d483d +Author: Koji Otani <sho@bbr.jp> +Date: Thu Jul 28 12:43:57 2011 +0200 + + Parse the "Medium" modifier when asking fontconfig for a font + + poppler/GlobalParams.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 0a677dd8dc9c55936530ea1fee901cab831c52af +Author: Koji Otani <sho@bbr.jp> +Date: Thu Jul 28 12:42:16 2011 +0200 + + Improve selection of CJK fonts + + Seems we need to do some more fontconfig magic for some special + fontconfig configurations + More info at bug 36474 + + poppler/GlobalParams.cc | 137 + ++++++++++++++++++++++++++++++---------------- + 1 files changed, 89 insertions(+), 48 deletions(-) + +commit e78aff6796a5d5a0a4f2fe8c7ceb33c506e2c8f5 +Author: William Bader <williambader@hotmail.com> +Date: Tue Jul 26 00:10:34 2011 +0200 + + make -level1sep write gray instead of cmyk + + If it is a gray only image + Bug 39012 + + poppler/PSOutputDev.cc | 63 + +++++++++++++++++++++++++++++++++++++++++++++-- + 1 files changed, 60 insertions(+), 3 deletions(-) + +commit ea31309487aab6ed407a086dff1f350b6e4bdbc9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jul 26 00:09:27 2011 +0200 + + Update (C) + + poppler/PDFDoc.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit a945641497946a825dc880f94200ea1d5409332b +Author: Hib Eris <hib@hiberis.nl> +Date: Sat Jul 23 08:44:06 2011 +0200 + + Handle missing startxref properly + + Bug 38209 + + poppler/PDFDoc.cc | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit 2c1b25ef2592367f4c18e204ab5d102f15cf272f +Author: William Bader <williambader@hotmail.com> +Date: Mon Jul 25 23:43:27 2011 +0200 + + Fix a bad memory access + + When not using antialias and the character starts to the left/top + of the image + Bug 37189 + + splash/Splash.cc | 14 ++++++++++---- + 1 files changed, 10 insertions(+), 4 deletions(-) + +commit 300900afa2140141748a7571270be5d850274072 +Author: Daniel Glöckner <daniel-gl@gmx.net> +Date: Sat Jul 23 19:49:15 2011 +0200 + + Fix numerical overflow in libopenjpeg JPXStream::doLookChar() + + It also includes a speed optimization. Bug 39361 + + poppler/JPEG2000Stream.cc | 37 ++++++++++++++++++++++++++++++++++++- + poppler/JPEG2000Stream.h | 36 +++++++++++------------------------- + 2 files changed, 47 insertions(+), 26 deletions(-) + +commit ec6ea621b066a3b332a8099341664889d2ff3743 +Author: Axel Struebing <axel.struebing@freenet.de> +Date: Thu Jul 21 23:12:36 2011 +0200 + + Fix calculation of startXRefPos + + Reviewed by Hib Eris + See "another problem with saving linearized files" in the mailing + list for more info + + poppler/PDFDoc.cc | 9 ++++++--- + 1 files changed, 6 insertions(+), 3 deletions(-) + +commit ce97cfcd6373c98fb8c63e9b3ef6c51738f22a50 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jul 20 00:24:52 2011 +0200 + + Render dots for 0 length dashed lines + + Bug 34150 + + splash/Splash.cc | 13 +++++++++++++ + 1 files changed, 13 insertions(+), 0 deletions(-) + +commit 42c1b1c4af6b07f488d1b2b02a4700f19b0ab0ef +Author: Tomas Hoger <thoger@redhat.com> +Date: Wed Jul 20 00:23:15 2011 +0200 + + Fix crash on truncated JPEG/DCT stream + + Bug 36693 + + poppler/DCTStream.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 091b570c63694e475c24bb8805638ac70c654892 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jul 20 00:19:43 2011 +0200 + + Make sure the dict is a page dict + + Fixes second part of 35925 and 39072 + + poppler/PDFDoc.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ac566c887ffae9d384587f7587609642aef7a016 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jul 20 00:17:49 2011 +0200 + + Do not crash if can not get page 0 for some reason + + qt4/tests/test-poppler-qt4.cpp | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +commit 6ad95e7b8b9766aa19f01f06f02eb430e4a4a899 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jul 11 15:04:49 2011 +0100 + + Complete the list of preprocessor defines that we never define + + When using any of the two sanctioned build systems + + poppler/poppler-config.h.cmake | 6 ++++-- + poppler/poppler-config.h.in | 6 ++++-- + 2 files changed, 8 insertions(+), 4 deletions(-) + +commit edcc84ef0137a733cf3fab79b919af309d87325c +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jul 11 15:00:39 2011 +0100 + + Harmonize all SPLASH_CMYK to use #if + + poppler/SplashOutputDev.cc | 24 ++++++++++++------------ + 1 files changed, 12 insertions(+), 12 deletions(-) + +commit a8fca630d592941c033ca6a380bf46b6e733a748 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jul 11 14:57:33 2011 +0100 + + Sanitize headers a big + + * Remove includes to config.h as that file does not exist + * Add to poppler-config.h all the defines we define in the + configure/cmake process and are used in headers + * Include poppker-config.h where needed + + goo/GooTimer.h | 2 + + goo/ImgWriter.h | 3 +- + goo/JpegWriter.h | 3 +- + goo/PNGWriter.h | 4 +- + goo/TiffWriter.h | 3 +- + goo/gfile.h | 3 +- + poppler/DCTStream.h | 5 +-- + poppler/FlateStream.h | 5 +-- + poppler/Gfx.h | 3 +- + poppler/GfxState.h | 2 + + poppler/Stream.h | 3 +- + poppler/poppler-config.h.cmake | 63 + ++++++++++++++++++++++++++++++++++++++++ + poppler/poppler-config.h.in | 63 + ++++++++++++++++++++++++++++++++++++++++ + splash/SplashFTFont.h | 4 ++- + splash/SplashMath.h | 4 ++- + 15 files changed, 153 insertions(+), 17 deletions(-) + +commit 214322f3c66a9aad4e2a46f6e305a3dacaa4f8b1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jul 10 01:20:21 2011 +0100 + + And 3 years later, Ed has answered :-) + + Now all our changes are GPLv2+ + + poppler/GfxFont.cc | 3 +++ + poppler/GlobalParams.cc | 3 +++ + poppler/TextOutputDev.cc | 3 +++ + poppler/TextOutputDev.h | 3 +++ + poppler/UnicodeTypeTable.cc | 3 +++ + poppler/UnicodeTypeTable.h | 3 +++ + 6 files changed, 18 insertions(+), 0 deletions(-) + +commit 37cc1344672f480d4062aafbd2f3245ca1392279 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jul 10 01:15:44 2011 +0100 + + Fix header + + The file was modified in 2009 and README.contributors stating + everything is GPLv2+ is from 2008 + + poppler/XpdfPluginAPI.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 230ab66f52a992557464e325d18f88573ec52423 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jul 10 01:06:41 2011 +0100 + + make files easier to include by themselves + + fofi/FoFiTrueType.h | 2 ++ + splash/Splash.h | 3 ++- + splash/SplashFontEngine.h | 3 ++- + 3 files changed, 6 insertions(+), 2 deletions(-) + +commit 866c6d1b0daa8b28f259e1faba075026cf9007e0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jul 10 00:55:25 2011 +0100 + + Name most of the classes in poppler/ includable by themselves + + poppler/Annot.h | 4 +++- + poppler/Catalog.h | 2 ++ + poppler/CharCodeToUnicode.h | 4 +++- + poppler/CompactFontTables.h | 16 ++++++++++++++++ + poppler/FontInfo.h | 6 +++++- + poppler/GfxState_helpers.h | 4 +++- + poppler/NameToUnicodeTable.h | 18 ++++++++++++++++++ + 7 files changed, 50 insertions(+), 4 deletions(-) + +commit 6b62fb7e9bd7de7f79b9b9a6fe36a5f5da099133 +Author: William Bader <williambader@hotmail.com> +Date: Mon Jun 27 19:38:52 2011 +0100 + + Remove unused variable + + poppler/PSOutputDev.cc | 5 +---- + 1 files changed, 1 insertions(+), 4 deletions(-) + +commit 4bc6c5bd3a001bb4eb9f61488e3d4f356638e391 +Author: Adrian Bunk <bunk@stusta.de> +Date: Tue Jul 5 15:21:06 2011 +0300 + + .gitignore tests additions + + The following files were missing in .gitignore: + - cpp/tests/poppler-render + - qt4/tests/poppler-texts + - test/gtk-test + + cpp/tests/.gitignore | 1 + + qt4/tests/.gitignore | 1 + + test/.gitignore | 1 + + 3 files changed, 3 insertions(+), 0 deletions(-) + +commit 00076bc308ae320244c47777fe351c1c2bef2da8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jun 24 22:51:55 2011 +0100 + + Forgot William's (C) here + + poppler/Stream.cc | 1 + + poppler/Stream.h | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit 7e244fde4ec03da08d81af3402b21646c803bd31 +Author: William Bader <williambader@hotmail.com> +Date: Fri Jun 24 22:39:13 2011 +0100 + + patch to make -level2sep and -level3sep write gray instead of cmyk + + If they are only gray of course :D + + poppler/PSOutputDev.cc | 34 ++++++++++++++++++++++++++++++---- + poppler/Stream.cc | 43 +++++++++++++++++++++++++++++++++++++++++++ + poppler/Stream.h | 29 +++++++++++++++++++++++++++++ + 3 files changed, 102 insertions(+), 4 deletions(-) + +commit abba8140a9972197faaca96ec590af7dc9408fb0 +Author: William Bader <williambader@hotmail.com> +Date: Fri Jun 24 22:38:33 2011 +0100 + + patch to make -level2sep and -level3sep write cmyk instead of rgb + + poppler/PSOutputDev.cc | 59 + +++++++++++++++++++++++++++++++++++++++++++---- + 1 files changed, 54 insertions(+), 5 deletions(-) + +commit 706007431325b1e8c9bf4cba35c89511b10ebf0c +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jun 20 23:30:50 2011 +0100 + + (C) for Jim + + fofi/FoFiBase.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit e23384fbb3542941d2cf59ce6560913255ca2b01 +Author: Jim Meyering <meyering@redhat.com> +Date: Mon Jun 20 11:09:01 2011 +0200 + + don't gmalloc(-1) upon ftell failure + + * fofi/FoFiBase.cc: Diagnose ftell failure. + + fofi/FoFiBase.cc | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit c5601bde9d8f3f56e558a6f63e563c9d337810eb +Author: Steven Murdoch <Steven.Murdoch@cl.cam.ac.uk> +Date: Mon Jun 20 23:25:43 2011 +0100 + + Fix encoding of PDF document metadata in output of pdftohtml + + pdftohtml simply copies the PDF document title into the <title> HTML + tag, which fails when the title is UCS-2 encoded, or if it contains + characters which are in pdfDocEncoding (a ISO 8859-1 superset), + but not + in ISO 8859-1. This patch fixes the problem by decoding UCS-2 or + pdfDocEncoding into Unicode, then encoding this in the desired output + encoding. HTML escaping wasn't being done either, so I have used the + existing function HtmlFont::HtmlFilter to perform both HTML escaping + and character set encoding. This static method had to be made public + to call it from pdftohtml. See bug #37900. + + utils/HtmlFonts.h | 3 ++- + utils/pdftohtml.cc | 41 ++++++++++++++++++++++++++++++++++++++--- + 2 files changed, 40 insertions(+), 4 deletions(-) + +commit d4af1c4ef46abf1f11b7215c7b144ce7bb7912eb +Author: Joshua Richardson <joshuarbox-junk1@yahoo.com> +Date: Sat Jun 18 13:39:54 2011 +0100 + + Fix vertical spacing issues in pdftohtml output. + + Bug 38019 + + utils/HtmlFonts.cc | 3 ++- + utils/HtmlOutputDev.cc | 21 +++++++++++++++++++-- + 2 files changed, 21 insertions(+), 3 deletions(-) + +commit 589933ef105b60e8d48854cce15a7548c2850116 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jun 13 21:24:39 2011 +0100 + + Forgot my (C) + + poppler/PreScanOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit f5d2ddd13d27078355dee63207671885bf9b0926 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jun 13 18:57:29 2011 +0100 + + We need to include config.h here + + Fixes crash after patch to fix bug 13518 + + poppler/PreScanOutputDev.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 147ae4bf76a85768c9ed729ca10ee3dae93b8876 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jun 8 23:36:14 2011 +0100 + + Do not crash if link does not have an action + + utils/HtmlOutputDev.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 5d9489bf566b700ef38e5e33665a2648b535e1e7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jun 4 21:46:10 2011 +0100 + + forgot to update the C + + utils/pdftotext.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 7b123bf2b11ac81f24a966186a06de739d3c8f02 +Author: Steven Murdoch <Steven.Murdoch@cl.cam.ac.uk> +Date: Sat Jun 4 20:22:52 2011 +0100 + + Fix pdftotext -htmlmeta to correctly output U+2019 in PDF metadata + + In PDF documents, right single quotation mark (U+2019) may be + encoded as + 0x90 because PDFDocEncoding uses some of the reserved characters in + ISO 8859-1. However, pdftotext -htmlmeta assumes that characters + are either + UCS-2 or ISO 8859-1. Thus when a right single quotation mark is + encoded as + 0x90, it is output as unicode 0x90 (which is a control + character). pdfinfo + does the right thing by first converting from PDFDocEncoding to + Unicode + with pdfDocEncoding[], before encoding it in the desired character + set. + This patch applies the same logic to pdftotext. pdftohtml is broken + in the + same way, but this patch does not attempt to fix it. + + Bug 37900 + + utils/pdftotext.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit db2ae1bdbb7fcb64ba4c91dfc574d9f970bebdf6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jun 4 13:23:11 2011 +0100 + + Make sure catDict is a dict + + poppler/Catalog.cc | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 58915affbdf1b5780f25d172a582c69fb2413230 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jun 4 13:20:02 2011 +0100 + + Make sure catDict is a dict before using it + + KDE Bug 274888 shows it's possible to get aborts because of that + + poppler/Catalog.cc | 26 ++++++++++++++++---------- + 1 files changed, 16 insertions(+), 10 deletions(-) + +commit 4ebc7e364409fe303e7a5729b568913e3c92e7d4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jun 4 13:19:34 2011 +0100 + + We need to free catDict on failure + + poppler/Catalog.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 335a7fc6d98f5facc1ff098a91ac968387473cb3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue May 31 23:18:26 2011 +0100 + + Make parse() private + + poppler/Catalog.h | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 311d69ef2222409859817737c44b8e741289d897 +Author: Axel Strübing <axel.struebing@freenet.de> +Date: Sun May 29 16:12:29 2011 +0100 + + Needs to be freed + + As i said in my last commit comment :D + + poppler/PDFDoc.cc | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +commit 66c7d0199b45bc7c81c88a9989c9515398d30d43 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat May 28 17:32:02 2011 +0100 + + No need to check for NULL + + We probably need to free obj4 but i don't have the stamina to properly + test it + + poppler/PDFDoc.cc | 21 ++++++++++----------- + 1 files changed, 10 insertions(+), 11 deletions(-) + +commit 450934619a1c5b2a58f65649f567274af8d24ea7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat May 28 12:37:08 2011 +0100 + + Parse that as unicode + + Fixes KDE Bug #274055 + + qt4/src/poppler-page.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 04dfb2c984b3c9949466e2b70e26b58029c5a7d3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat May 7 12:55:34 2011 +0200 + + Make FileSpec a class and move EmbFile from Catalog to FileSpec + + Qt and cpp frontends adapted by Pino Toscano + + cpp/poppler-document.cpp | 4 +- + cpp/poppler-embedded-file-private.h | 10 +- + cpp/poppler-embedded-file.cpp | 42 +++++++---- + glib/poppler-annot.cc | 6 +- + glib/poppler-attachment.cc | 33 +++++---- + glib/poppler-document.cc | 5 +- + glib/poppler-private.h | 3 +- + poppler/Catalog.cc | 118 + ++--------------------------- + poppler/Catalog.h | 55 +------------- + poppler/FileSpec.cc | 128 + ++++++++++++++++++++++++++++++++ + poppler/FileSpec.h | 51 ++++++++++++- + qt4/src/poppler-embeddedfile-private.h | 6 +- + qt4/src/poppler-embeddedfile.cc | 34 +++++--- + qt4/src/poppler-page.cc | 5 +- + qt4/src/poppler-private.h | 4 +- + qt4/tests/check_attachments.cpp | 12 ++-- + 16 files changed, 284 insertions(+), 232 deletions(-) + +commit 74f9befddd4b5848c4af0c1b2848a1322f8cd0a2 +Author: Pino Toscano <pino@kde.org> +Date: Wed May 25 16:46:15 2011 +0200 + + [qt4] Page needs to be a friend of EmbeddedFile, too + + qt4/src/poppler-qt4.h | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 74853614d617486b7b62e9c08be39a6e58bc7d9b +Author: Pino Toscano <pino@kde.org> +Date: Wed May 25 16:40:49 2011 +0200 + + update copyrights + + qt4/src/poppler-embeddedfile-private.h | 2 +- + qt4/src/poppler-embeddedfile.cc | 2 +- + qt4/src/poppler-qt4.h | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +commit e6b2dec502c02f9fbaed480f227cf7145249a98e +Author: Pino Toscano <pino@kde.org> +Date: Wed May 25 16:39:09 2011 +0200 + + [qt4] one more usage of the new EmbeddedFile ctor + + followup of a264e5385b2d0fee5126b3d0e57d42d34cafa45d + + qt4/src/poppler-page.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit a264e5385b2d0fee5126b3d0e57d42d34cafa45d +Author: Pino Toscano <pino@kde.org> +Date: Wed May 25 16:12:02 2011 +0200 + + [qt4] create EmbeddedFile by EmbeddedFileData only + + - create the private class and pass it to the EmbeddedFile ctor, + reducing the amount of poppler code API exposed to the outside + - turn the old private EmbeddedFile(EmbFile*) ctor in a death machine + + qt4/src/poppler-embeddedfile-private.h | 3 +++ + qt4/src/poppler-embeddedfile.cc | 21 ++++++++++++++++++--- + qt4/src/poppler-private.h | 3 ++- + qt4/src/poppler-qt4.h | 2 ++ + 4 files changed, 25 insertions(+), 4 deletions(-) + +commit 232bfa1c59013637fd7e858e22194becb636ad21 +Author: Pino Toscano <pino@kde.org> +Date: Wed May 25 15:55:48 2011 +0200 + + [Qt4] split EmbeddedFileData in an own file + + qt4/src/poppler-embeddedfile-private.h | 37 + ++++++++++++++++++++++++++++++++ + qt4/src/poppler-embeddedfile.cc | 7 +----- + 2 files changed, 38 insertions(+), 6 deletions(-) + +commit a7242b78b3c9a64cf38ac150e6a914d7abce3355 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat May 7 11:10:11 2011 +0100 + + Do not free a shallow copy of an object we'll free later + + Make sure we have our own copy we can free + Fixes KDE BUG #268816 + (cherry picked from commit dab9cdf795d6caead555326958e86e844ace067b) + + poppler/Catalog.cc | 12 +++++------- + poppler/Catalog.h | 2 +- + 2 files changed, 6 insertions(+), 8 deletions(-) + +commit 4db2452b3d345d9531987998e6b5532a59137e1d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri May 6 14:57:51 2011 +0200 + + glib: Add poppler_document_get_n_attachments() + + glib/poppler-document.cc | 34 + ++++++++++++++++++++++++---------- + glib/poppler-document.h | 1 + + glib/reference/poppler-sections.txt | 1 + + 3 files changed, 26 insertions(+), 10 deletions(-) + +commit 3e3284de3fe1916d7f8161ede7bf49c76d01f303 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri May 6 14:49:05 2011 +0200 + + glib: Update gtk-doc.make + + gtk-doc.make | 151 + +++++++++++++++++++++++++++++++++++++-------------------- + 1 files changed, 98 insertions(+), 53 deletions(-) + +commit 9a77bd7706a08d9aeabe600e3500c14493ac8519 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri May 6 14:48:38 2011 +0200 + + glib-demo: Add missing permission flags to info demo + + glib/demo/info.cc | 39 ++++++++++++++++++++++++++++++++++++--- + 1 files changed, 36 insertions(+), 3 deletions(-) + +commit 091c155f8a7bc79da84cd21877be389de1f2b1a3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri May 6 14:47:36 2011 +0200 + + glib: Add missing permissions flags to PopplerPermissions + + glib/poppler-document.cc | 6 ++++++ + glib/poppler-document.h | 10 +++++++++- + 2 files changed, 15 insertions(+), 1 deletions(-) + +commit 632d6a40ce3a5d3d8e10bf7e93e8eb578beae907 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue May 3 21:54:59 2011 +0100 + + 0.17.1 + + CMakeLists.txt | 4 ++-- + NEWS | 12 ++++++++++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + poppler/Makefile.am | 2 +- + qt4/src/Doxyfile | 2 +- + 6 files changed, 18 insertions(+), 6 deletions(-) + +commit ecb136b9927a454df9360a307ccd741eaea3ca93 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue May 3 21:42:45 2011 +0100 + + remove unused vars + + poppler/Annot.cc | 9 ++------- + poppler/ArthurOutputDev.cc | 12 ++---------- + 2 files changed, 4 insertions(+), 17 deletions(-) + +commit ad131763640b2e27dde75c42b514386284b6a60d +Author: Pino Toscano <pino@kde.org> +Date: Wed Apr 27 22:36:13 2011 +0200 + + [qt4/tests] turn some assignments to bool into QVERIFY checks + + qt4/tests/check_optcontent.cpp | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit be08dd69d9dd4fcb22400f2f0aea331222e88e4a +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Apr 27 20:45:36 2011 +0100 + + update copyright years + (cherry picked from commit 2fbd493197309de5700f71f09967c9d23add88d3) + + poppler/Annot.cc | 1 + + utils/pdftotext.cc | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit 39bcce0c8ed378aafb1019ffd1ae40330f6bb63f +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Apr 27 19:39:01 2011 +0100 + + Remove more variables that are set but then unused + + poppler/SplashOutputDev.cc | 11 +------ + utils/HtmlOutputDev.cc | 75 + +------------------------------------------- + 2 files changed, 2 insertions(+), 84 deletions(-) + +commit 6656cf657b62d626910a02dfae9b6a1eb77772dd +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Apr 27 08:46:37 2011 +0100 + + Remove unused vars + + poppler/TextOutputDev.cc | 6 +----- + 1 files changed, 1 insertions(+), 5 deletions(-) + +commit ce55510f4dd10dfec2fc5b1c211c4a546c6ebc98 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Apr 27 08:42:34 2011 +0100 + + Remove unused vars + + splash/Splash.cc | 5 ++--- + splash/SplashFTFontEngine.cc | 4 +--- + splash/SplashXPath.cc | 6 ++---- + 3 files changed, 5 insertions(+), 10 deletions(-) + +commit 49d199fd1ea14383638739d95d019adb33b17768 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Apr 27 08:38:17 2011 +0100 + + Fix page_transition::operator= + + cpp/poppler-page-transition.cpp | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 807c1df2bf79c7c6378390b41dc230d80533ae3f +Author: Tom Gleason <tom@buildadam.com> +Date: Tue Apr 26 17:06:07 2011 +0100 + + bbox coordinates are relative to MediaBox size, not CropBox size + + utils/pdftotext.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 813f41367a681702ae7a155d5c2f3195124a9096 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Apr 3 20:40:15 2011 +0200 + + forms: fix mem leak in case of error + + poppler/Form.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 722baf8baf42e2c7a49e1560aae5235677d1ddee +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Apr 3 20:17:57 2011 +0200 + + forms: check form field is actually terminal before creating the + widget + + poppler/Form.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 5f6f7fc569d1c891956a3c37b3e328504635ab33 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Apr 3 15:06:45 2011 +0100 + + Properly initialize pageObjectNum to 0 + + Bug 35925 + + poppler/Hints.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit d6786edc2549164214342a50782b72c2fd904b63 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Apr 3 13:11:18 2011 +0200 + + forms: Remove unused parameter + + poppler/Form.cc | 2 +- + poppler/Form.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 62692ff381f3b7907b330bfc2019416ed058ea46 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Apr 3 13:01:42 2011 +0200 + + forms: rework the way form fields tree is built + + Now we build the tree as described by the doc, without ignoring + container fields and always creating a child widget for composed + (field + + annot) dictionaries. The way check and radio buttons are set + has been + reworked too, since now it's possible to have a set of buttons where + children are not widgets, but form fields with a child widget. + + poppler/Annot.cc | 4 +- + poppler/Form.cc | 237 + +++++++++++++++++++++++++++++------------------------- + poppler/Form.h | 17 +++-- + 3 files changed, 137 insertions(+), 121 deletions(-) + +commit a6802301d9c3ab8bf68bd8821f562f8ecced8491 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 28 17:42:37 2011 +0200 + + forms: Add debug methods to print the forms tree + + poppler/Form.cc | 78 + +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Form.h | 25 +++++++++++++++++ + 2 files changed, 103 insertions(+), 0 deletions(-) + +commit 46f87da04700cdd1afa634f9c554e376f6f6f752 +Author: José Aliste <jaliste@src.gnome.org> +Date: Thu Mar 31 08:09:41 2011 -0400 + + Fix a memleak in AnnotScreen::initialize + + poppler/Annot.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit b64178eaa5dd01f914649d6faa870fa140ddaf9b +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Mar 30 15:17:54 2011 +0200 + + glib: docs: Add PopplerActionJavascript to poppler-sections.txt + + glib/reference/poppler-sections.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 3d777181ddee8f7ab2cc9e4684879cb5b52b065c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Mar 30 15:16:04 2011 +0200 + + glib: Use Javascript instead of JavaScript for consistency + + glib/poppler-action.h | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit c4774fecfe3d523f32d5980f50e31daa798c9692 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Mar 30 15:08:59 2011 +0200 + + glib-demo: show javascript actions in actions view + + glib/demo/utils.c | 25 +++++++++++++++++++++++++ + 1 files changed, 25 insertions(+), 0 deletions(-) + +commit 68bbbe1a3f68d242b35027ae41f5751b02a2a700 +Author: José Aliste <jaliste@src.gnome.org> +Date: Tue Mar 29 04:56:37 2011 -0400 + + glib: add JavaScript actions + + glib/poppler-action.cc | 24 ++++++++++++++++++++++++ + glib/poppler-action.h | 14 +++++++++++++- + 2 files changed, 37 insertions(+), 1 deletions(-) + +commit 3dd934088a06f246718382601030c9b093d04160 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 30 00:03:58 2011 +0100 + + Need to create the globalParams + + qt4/tests/check_optcontent.cpp | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit ce0d4278a32b3ba19c2002ed0c481c58b1854d59 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 29 23:47:33 2011 +0100 + + Long gone + + Makefile.am | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +commit 12337026533aa59bb66022ce8a119f37aafd4fad +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 29 23:40:57 2011 +0100 + + increase sonames + + CMakeLists.txt | 2 +- + glib/CMakeLists.txt | 2 +- + glib/Makefile.am | 2 +- + poppler/Makefile.am | 2 +- + qt4/src/CMakeLists.txt | 2 +- + qt4/src/Makefile.am | 2 +- + 6 files changed, 6 insertions(+), 6 deletions(-) + +commit a6e613b01698c6b38deff5248fcf7c0b17d041c3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 29 23:40:38 2011 +0100 + + more typos + + NEWS | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit e3ee037ede67212836be158b935deb7ea974b7f7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 29 23:38:24 2011 +0100 + + typo + + NEWS | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 8bcd94964f0af17a3f5b6edf71127df3daa00b1a +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 29 23:30:30 2011 +0100 + + typo + + NEWS | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit a05b9dacbe5dbd4337fdbb3e7d7d364ad5fbaeab +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 29 23:28:49 2011 +0100 + + 0.17.0 version number + + CMakeLists.txt | 2 +- + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + qt4/src/Doxyfile | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +commit 4637b737b4735c70017b46a3ed6c0ee069c02c9b +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 29 23:28:41 2011 +0100 + + 0.17.0 news + + NEWS | 108 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 108 insertions(+), 0 deletions(-) + +commit a55cc5d9c67ede1d96f6e5a58179ddd9f563c53f +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 29 22:51:40 2011 +0100 + + Update years + + poppler/Catalog.cc | 2 +- + poppler/Catalog.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit d96efb6c1af621be78e998ba1a228022c3c076fc +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 29 11:13:03 2011 +0200 + + fix comment + + poppler/ViewerPreferences.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 74ec81d66d4d5bc45cccc4aa8794df1c517f2d74 +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 29 11:07:36 2011 +0200 + + viewer preferences: read PrintScaling and Duplex + + poppler/ViewerPreferences.cc | 24 ++++++++++++++++++++++++ + poppler/ViewerPreferences.h | 14 ++++++++++++++ + 2 files changed, 38 insertions(+), 0 deletions(-) + +commit b41bcd484dd7a93a339270926c57caa524059d8f +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 29 10:58:46 2011 +0200 + + free the viewerPreferences Object + + poppler/Catalog.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 1dd88d0b6b7cbfda76e81902a351c89457a061a8 +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 29 09:58:10 2011 +0200 + + read the ViewerPreferences dict once, and construct ViewerPreferences + on demand + + this way it is possible to know whether the ViewerPreferences + dictionary is present in the Catalog + + poppler/Catalog.cc | 24 +++++++++--------------- + poppler/Catalog.h | 3 ++- + 2 files changed, 11 insertions(+), 16 deletions(-) + +commit f10b0b8c88a7df83ada09f32b6cb6fd930fcb748 +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 29 09:57:46 2011 +0200 + + assume the prefDict is not null + + poppler/ViewerPreferences.cc | 4 ---- + 1 files changed, 0 insertions(+), 4 deletions(-) + +commit d4a5ea45057cad531a8979cf9861ac05cdd56613 +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 29 09:54:22 2011 +0200 + + fix variable name for DisplayDocTitle + + poppler/ViewerPreferences.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit cf84a05ae524aa9b266463cc23cccc3860ff1ba3 +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 28 23:18:02 2011 +0200 + + viewer preferences: read NonFullScreenPageMode and Direction + + poppler/ViewerPreferences.cc | 26 ++++++++++++++++++++++++++ + poppler/ViewerPreferences.h | 15 +++++++++++++++ + 2 files changed, 41 insertions(+), 0 deletions(-) + +commit 460253a6705a227ff7c36e9c31cceb93cce4d78b +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 28 22:37:54 2011 +0200 + + read some boolean viewer preferences + + - HideToolbar + - HideMenubar + - HideWindowUI + - FitWindow + - CenterWindow + - DisplayDocTitle + + poppler/ViewerPreferences.cc | 41 + +++++++++++++++++++++++++++++++++++++++++ + poppler/ViewerPreferences.h | 13 +++++++++++++ + 2 files changed, 54 insertions(+), 0 deletions(-) + +commit 9fa9ac3546674120532bb512b82af6471cbebf01 +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 28 19:58:16 2011 +0200 + + add skeleton for ViewerPreferences + + a small class for handling the ViewerPreferences dictionary of + a Catalog, + created on demand and in any occasion (so defaults are in one + place only) + + CMakeLists.txt | 2 ++ + poppler/Catalog.cc | 23 +++++++++++++++++++++++ + poppler/Catalog.h | 4 ++++ + poppler/Makefile.am | 2 ++ + poppler/ViewerPreferences.cc | 30 ++++++++++++++++++++++++++++++ + poppler/ViewerPreferences.h | 34 ++++++++++++++++++++++++++++++++++ + 6 files changed, 95 insertions(+), 0 deletions(-) + +commit c6081f0bf00d7dcdfa1d09e91e4c9a1fe5a54ad6 +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 28 19:55:00 2011 +0200 + + delete the temporary buffers created by pdfDocEncodingToUTF16() + + poppler/Form.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit d94d5056d5570e2f5cb578736eba12317ea63fa4 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 28 18:20:31 2011 +0200 + + glib-demo: show the activation action of form fields if there's one + + glib/demo/forms.c | 21 ++++++++++++++++----- + 1 files changed, 16 insertions(+), 5 deletions(-) + +commit ba0f36b76d0c2fd4ef39f3013fc125a53747c03f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 28 18:17:52 2011 +0200 + + glib: Add poppler_form_field_get_action() + + Fixes bug #33174. + + glib/poppler-form-field.cc | 34 + ++++++++++++++++++++++++++++++++++ + glib/poppler-form-field.h | 1 + + glib/poppler-private.h | 1 + + glib/reference/poppler-sections.txt | 1 + + 4 files changed, 37 insertions(+), 0 deletions(-) + +commit ae5b9cf884ce38dde409c3e5b0f6c46f7d6327d2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 28 17:43:53 2011 +0200 + + Revert "Patch for embedding videos in to the pdf" + + This reverts commit 66575c990f379871e4b796befc899de178332670. + + It introduces new API to glib frontend that is wrong and will be + changed soon. + + glib/poppler-annot.cc | 33 ----- + glib/poppler-annot.h | 5 - + poppler/Annot.cc | 377 + ------------------------------------------------- + poppler/Annot.h | 2 - + 4 files changed, 0 insertions(+), 417 deletions(-) + +commit b7edd4c93539585652961ecf2db9c4462415c8bc +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Mar 27 12:31:19 2011 +0200 + + annot: Always create appearance streams when NeedAppearances is true + + Fixes regression in document example_054.pdf + + poppler/Annot.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit e9350899e77c28452c48b56349ad7758b3fd47ba +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Mar 24 20:09:18 2011 +0000 + + Introduce splash-friendly getRGBLine functions + + So it does not need to pack and unpack the color again and again + + poppler/GfxState.cc | 248 + +++++++++++++++++++++++++++++++++++++++++-- + poppler/GfxState.h | 22 +++- + poppler/SplashOutputDev.cc | 43 ++------ + 3 files changed, 265 insertions(+), 48 deletions(-) + +commit 7b08795a9541e9fa01836b4c7fd63f6fe295ad80 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Mar 24 12:16:07 2011 +0100 + + glib: Add g_return macros to make sure index is correct in form + field choice methods + + glib/poppler-form-field.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit f1102fccd2899bc7f97414b1e2a295c59f03da22 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Mar 24 12:15:30 2011 +0100 + + glib-demo: Fix a crash when a choice form field has no items selected + + glib/demo/forms.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit b3971ee6bca6b14b75f046c831a31ac1e5e3241e +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 22 22:08:27 2011 +0000 + + kill this TODO, n is too small + + poppler/SplashOutputDev.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 1064d75817401fe24f728c189b450e9e906beb56 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 22 20:43:05 2011 +0000 + + kill unmaintained abiword backend + + CMakeLists.txt | 16 - + configure.ac | 16 - + poppler/ABWOutputDev.cc | 1179 + ----------------------------------------------- + poppler/ABWOutputDev.h | 141 ------ + poppler/Makefile.am | 17 - + utils/CMakeLists.txt | 10 - + utils/Makefile.am | 18 +- + utils/pdftoabw.cc | 201 -------- + 8 files changed, 2 insertions(+), 1596 deletions(-) + +commit abf167af8b15e5f3b510275ce619e6fdb42edd40 +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Mon Mar 21 21:34:46 2011 +0000 + + Implement tiling/patterns in SplashOutputDev + + Fixes bug 13518 + + poppler/CairoOutputDev.cc | 5 +- + poppler/CairoOutputDev.h | 10 +- + poppler/Gfx.cc | 6 +- + poppler/OutputDev.h | 6 +- + poppler/PSOutputDev.cc | 8 +- + poppler/PSOutputDev.h | 6 +- + poppler/PreScanOutputDev.cc | 22 ++++- + poppler/PreScanOutputDev.h | 16 +++- + poppler/SplashOutputDev.cc | 265 + +++++++++++++++++++++++++++++++++++++++++++ + poppler/SplashOutputDev.h | 12 ++ + 10 files changed, 334 insertions(+), 22 deletions(-) + +commit 66575c990f379871e4b796befc899de178332670 +Author: Srinivas Adicherla <srinivas.adicherla@gmail.com> +Date: Thu Mar 17 20:14:05 2011 +0000 + + Patch for embedding videos in to the pdf + + glib/poppler-annot.cc | 33 +++++ + glib/poppler-annot.h | 5 + + poppler/Annot.cc | 377 + +++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Annot.h | 2 + + 4 files changed, 417 insertions(+), 0 deletions(-) + +commit ec1917968d2f1c7a00772a0829b3fcc6957d8f3c +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Mar 14 00:13:26 2011 +0000 + + Only build gtk-test if we have to build gtk-test + + test/Makefile.am | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 1acbb01e72a22f70f00dc058ff206e3bc05bc0ab +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Mar 13 14:49:48 2011 +0000 + + (C) years + + poppler/CachedFile.cc | 2 +- + poppler/CurlCachedFile.cc | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit bc8aeb269aa92406081f749064ceff75bb3145e7 +Author: Hib Eris <hib@hiberis.nl> +Date: Sat Mar 12 23:17:59 2011 +0100 + + Check response code of libcurl call + + poppler/CachedFile.cc | 8 +++++++- + poppler/CurlCachedFile.cc | 12 +++++++++--- + 2 files changed, 16 insertions(+), 4 deletions(-) + +commit 0268cedee5b460835a4747d0ea41bbe12269310d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Mar 12 15:24:30 2011 +0100 + + cairo: Fix typo + + poppler/CairoFontEngine.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5aa369e68e5c9f14efc888c7b26da06aa8bd2a78 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 12 13:47:34 2011 +0000 + + Remove unused variable + + poppler/CurlCachedFile.cc | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +commit c0dffbe28f91b30b36310ab0b9a9b948610550ae +Author: Pino Toscano <pino@kde.org> +Date: Sat Mar 12 12:15:58 2011 +0100 + + update copyright years + + cpp/poppler-document-private.h | 2 +- + cpp/poppler-document.cpp | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit b8fab173ffdd1e62a34b530228d08bc5ec6725ac +Author: Pino Toscano <pino@kde.org> +Date: Sat Mar 12 12:13:05 2011 +0100 + + [cpp] init the globalParams early in the document loading + + introduce a small RAII class to init/deinit the globalParams, and + make document_private inherit from it + + cpp/poppler-document-private.h | 17 ++++++++---- + cpp/poppler-document.cpp | 52 + +++++++++++++++++++++------------------ + 2 files changed, 39 insertions(+), 30 deletions(-) + +commit a97a54cb22def2a9fc381fb81842dad9e5c3931f +Author: Pino Toscano <pino@kde.org> +Date: Sat Mar 12 12:12:11 2011 +0100 + + forms: delete tmp_str after being converted to GooString + + poppler/Form.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 9671fe07f8c9ade956742cb141b99518c3b12bad +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Mar 11 00:05:52 2011 +0000 + + getForm can return NULL, do not crash if that happens + + poppler/Annot.cc | 10 ++++++---- + 1 files changed, 6 insertions(+), 4 deletions(-) + +commit bd32672899f5ca4509ec9311de8092d14bec8ab1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Mar 10 23:33:15 2011 +0000 + + update copyright years + + poppler/Catalog.cc | 2 +- + qt4/src/poppler-form.cc | 1 + + 2 files changed, 2 insertions(+), 1 deletions(-) + +commit 841f3bbca37015ec2c58d7b85a73cef5681294f8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Mar 10 23:30:51 2011 +0000 + + Do not infinite loop + + poppler/Form.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit f2fcafdc2b982d9bbed3c01bc7d45c8bd0603f19 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Mar 10 23:27:41 2011 +0000 + + Create the globalParams before the pdfdoc + + qt4/src/poppler-private.cc | 5 +---- + qt4/src/poppler-private.h | 12 ++++++++---- + 2 files changed, 9 insertions(+), 8 deletions(-) + +commit f956b03604b195623ab034a06942a39547adf905 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Mar 10 00:01:18 2011 +0000 + + compile + + qt4/src/poppler-form.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit f0ec3bedc5490aa35e54563019fcf2c3f8b7647d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Mar 9 20:54:15 2011 +0100 + + forms: Remove unused method FormWidget::updateField() + + poppler/Form.cc | 22 ---------------------- + poppler/Form.h | 2 -- + 2 files changed, 0 insertions(+), 24 deletions(-) + +commit 93c25e100ae2564b9a866b95bed16d2fac619bd7 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Mar 9 20:49:32 2011 +0100 + + forms: Rename FormField::createActivationAction() to + FormField::getActivationAction() + + And use the existing action from the AnnotWidget instead of creating a + new one. + + poppler/Form.cc | 11 ++--------- + poppler/Form.h | 2 +- + qt4/src/poppler-form.cc | 3 +-- + 3 files changed, 4 insertions(+), 12 deletions(-) + +commit 59fb0489bfabfd8acccafdcd0361ce005664962a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Mar 9 20:19:24 2011 +0100 + + annots: Check whether we need to create an appearance stream in + AnnotWidget::draw() + + And never modify the AP entry since it breaks check and radio buttons + that doesn't have an appearance for the Off state. + + poppler/Annot.cc | 79 + +++++++++--------------------------------------------- + poppler/Annot.h | 1 - + 2 files changed, 13 insertions(+), 67 deletions(-) + +commit f3b00ef51ceef6d9b7a1aa7e0f19249abf8ca6f3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Mar 9 18:19:12 2011 +0100 + + annots: Add Annot::setAppearanceState() and use it from FormWidget + + This method not only updates the current appearance state, but + also the + appearance stream corresponding to the new state. + + poppler/Annot.cc | 43 ++++++++++++++++++++++++++++++++++++------- + poppler/Annot.h | 2 ++ + poppler/Form.cc | 7 +++---- + 3 files changed, 41 insertions(+), 11 deletions(-) + +commit d59561212253302d4dcb23392bb8306b8e5c68d1 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Mar 9 17:35:28 2011 +0100 + + forms: Make FormWidget use a real widget annotation instead of + duplicating code + + When creating annotations, if it's a widget annotation, look first + whether it has already been created by a FormWidget and reuse + it instead + of duplicating it. + + poppler/Annot.cc | 42 +++++++++++++-------- + poppler/Annot.h | 2 +- + poppler/Catalog.cc | 2 +- + poppler/Form.cc | 107 + ++++++++++++++++++++++++--------------------------- + poppler/Form.h | 23 +++++------ + 5 files changed, 89 insertions(+), 87 deletions(-) + +commit 2dd7e1ba09d4501adf9d10ab4cb8ee003cace74a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Mar 9 10:25:00 2011 +0100 + + forms: Move modified flag from FormWidget to FormField + + poppler/Form.cc | 16 ++++++++-------- + poppler/Form.h | 6 ++++-- + 2 files changed, 12 insertions(+), 10 deletions(-) + +commit b04f03be7e43e309af5f164ef71788e7b8915841 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Mar 9 10:17:57 2011 +0100 + + forms: Move field names handling from FormWidget to FormField + + poppler/Form.cc | 149 + ++++++++++++++++++++++++++++++------------------------- + poppler/Form.h | 20 +++++--- + 2 files changed, 95 insertions(+), 74 deletions(-) + +commit abe1e0d5a37bcdb4376901306d3adccfb33ff3b4 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Mar 8 21:39:00 2011 +0100 + + annots: Make sure no border is drawn for invalid border arrays + + Fixes regression on ClassSchedule_2091_ENGL.pdf + + poppler/Annot.cc | 8 ++++++-- + poppler/Annot.h | 2 +- + 2 files changed, 7 insertions(+), 3 deletions(-) + +commit 14d145371e86ccb92f09b1ca750ced52171b2885 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Mar 8 20:14:57 2011 +0100 + + forms: Remove loadDefaults method + + Moving the code to initialize form field stuff to form field + constructors and widget stuff to form widget constructors. Clean up an + simplify the code. + + poppler/Form.cc | 227 + +++++++++++++++++++++---------------------------------- + poppler/Form.h | 21 +---- + 2 files changed, 91 insertions(+), 157 deletions(-) + +commit 0585d7820455c93fe5b732b7a9a20d423df47075 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Mar 8 15:36:45 2011 +0100 + + forms: Handle field values (V entry) by field objects + + Rather than AnnotWidget or FormWidget, and use the form field object + from AnnotWidget to get the values. + + poppler/Annot.cc | 52 ++++---- + poppler/Form.cc | 400 + ++++++++++++++++++++++++++---------------------------- + poppler/Form.h | 21 ++-- + 3 files changed, 230 insertions(+), 243 deletions(-) + +commit dc100eb9080fb58164fc94c86bfb1728cecd21c3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 7 20:14:27 2011 +0100 + + annots: Use the field object to get MaxLen instead of parsing the + field dict + + poppler/Annot.cc | 10 ++++------ + 1 files changed, 4 insertions(+), 6 deletions(-) + +commit 7149634f184dc3f07f2a70c296aac207ef24952c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 7 19:55:45 2011 +0100 + + forms: Parse the default resources dictionary in Form + + And use it in AnnotWidget instead of parsing the dictionary again. + + poppler/Annot.cc | 65 + ++++++++++++++++++++--------------------------------- + poppler/Annot.h | 12 +++++----- + poppler/Form.cc | 16 +++++++++++++ + poppler/Form.h | 5 ++++ + 4 files changed, 52 insertions(+), 46 deletions(-) + +commit 2e73f17975811177c0b3c16b8bd97c7eb912bc44 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 7 18:41:48 2011 +0100 + + forms: Parse field variable text entries (DA, Q) in FormField() + + And use them from AnnotWidget instead of parsing the field dictionary + again. + + poppler/Annot.cc | 28 +++++----------------------- + poppler/Form.cc | 17 +++++++++++++++++ + poppler/Form.h | 9 +++++++++ + 3 files changed, 31 insertions(+), 23 deletions(-) + +commit 8677a34911563a712b2dcf0b6e411cee0bad9c44 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 7 18:24:07 2011 +0100 + + forms: Parse default variable text entries (DA, Q) on Form + construction + + And use them from AnnotWidget instead of parsing the acroForm + dictionary + again. + + poppler/Annot.cc | 99 + +++++++++++++++++++++++++---------------------------- + poppler/Form.cc | 11 ++++++ + poppler/Form.h | 12 ++++++ + 3 files changed, 70 insertions(+), 52 deletions(-) + +commit 41420bfd88685d9b1ac44dc7444ea3abee92097c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 7 09:18:25 2011 +0100 + + annots: Only parse the dash array for dashed borders + + poppler/Annot.cc | 16 +++++++++------- + 1 files changed, 9 insertions(+), 7 deletions(-) + +commit c198a3f83d8508ddaf84564871d9202ffba8096c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Mar 6 17:52:01 2011 +0100 + + annots: Use the field object to get the top index of a form field + choice + + Instead of parsing the field dictionary again. + + poppler/Annot.cc | 14 ++------------ + poppler/Annot.h | 1 - + 2 files changed, 2 insertions(+), 13 deletions(-) + +commit 5cf803ec181dbf1112f67b4f4a9c77b88d102e3b +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Mar 6 17:47:18 2011 +0100 + + forms: Add FormFieldChoice::getTopIndex() + + poppler/Form.cc | 5 +++++ + poppler/Form.h | 5 ++++- + 2 files changed, 9 insertions(+), 1 deletions(-) + +commit 1248f59e2045749ece1f5a5e579b866b8330a752 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Mar 6 17:41:33 2011 +0100 + + annots: Draw widget background using the existing appearance + characteristics + + Instead of parsing the appearance characteristics dictionary again + + poppler/Annot.cc | 23 +++++++---------------- + 1 files changed, 7 insertions(+), 16 deletions(-) + +commit dc249ad4529997001ae1f96dcfd7351766ca8e8d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Mar 6 17:34:33 2011 +0100 + + annots: Factor out generateFieldAppearance() + + Adding methods to render every form field type and using the field + object when possible instead of parsing the field dictionary again. + + poppler/Annot.cc | 312 + +++++++++++++++++++++++------------------------------- + poppler/Annot.h | 8 +- + 2 files changed, 138 insertions(+), 182 deletions(-) + +commit f98b3540db731026e0febf1f010548f0f0ef9142 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Mar 6 15:57:22 2011 +0100 + + annots: Move code to draw the border of an AnnotWidget to a new method + + And use the field object instead of parsing the field dictionary + again. + + poppler/Annot.cc | 242 + +++++++++++++++++++++++++++--------------------------- + poppler/Annot.h | 3 + + 2 files changed, 124 insertions(+), 121 deletions(-) + +commit 9854f3173f994bbe3f57d33bd1d0e045833859c2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Mar 6 15:56:06 2011 +0100 + + annots: Add AnnotColor::adjustColor() to be able to adjust an + existing AnnotColor + + poppler/Annot.cc | 7 +++++++ + poppler/Annot.h | 2 ++ + 2 files changed, 9 insertions(+), 0 deletions(-) + +commit 2bf82f27bd9c8f97e5484ea97be661f65221163d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Mar 5 15:30:01 2011 +0100 + + annots: Remove unused class AnnotBorderStyle + + poppler/Annot.cc | 22 ---------------------- + poppler/Annot.h | 36 ------------------------------------ + 2 files changed, 0 insertions(+), 58 deletions(-) + +commit 128dcaf282f418d8c45cea4df6ad4d3167b3e39c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Mar 5 13:12:49 2011 +0100 + + annots: Add AnnotBorder::parseDashArray() to parse dash arrays + + The code was duplicated in AnnotBorderArray and AnnotBorderBS + + poppler/Annot.cc | 91 + ++++++++++++++++++----------------------------------- + poppler/Annot.h | 4 ++- + 2 files changed, 34 insertions(+), 61 deletions(-) + +commit ec2643d311e0ce55f0ff5309c0c420140d053a50 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 1 19:50:55 2011 +0000 + + fix copyright years + + poppler/Annot.cc | 2 +- + poppler/Annot.h | 2 +- + poppler/ArthurOutputDev.cc | 2 +- + poppler/ArthurOutputDev.h | 2 +- + poppler/FontInfo.cc | 1 + + poppler/Form.cc | 4 ++-- + poppler/Form.h | 3 ++- + poppler/GlobalParams.cc | 1 + + poppler/GlobalParams.h | 1 + + poppler/Link.cc | 2 +- + poppler/Link.h | 2 +- + poppler/OutputDev.h | 2 +- + poppler/PDFDoc.cc | 2 +- + poppler/Page.cc | 2 +- + poppler/Page.h | 2 +- + poppler/TextOutputDev.cc | 2 +- + poppler/TextOutputDev.h | 2 +- + qt4/src/poppler-form.cc | 2 +- + qt4/src/poppler-link-extractor-private.h | 2 +- + qt4/src/poppler-link-extractor.cc | 2 +- + qt4/src/poppler-page.cc | 2 +- + qt4/src/poppler-private.h | 2 +- + utils/HtmlOutputDev.cc | 2 +- + utils/HtmlOutputDev.h | 4 ++-- + 24 files changed, 27 insertions(+), 23 deletions(-) + +commit 900974ebfbe6ab7ae21ed151ff79f9578d2bdae2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 1 19:42:22 2011 +0000 + + Fix years + + poppler/poppler-config.h.cmake | 2 +- + poppler/poppler-config.h.in | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit c804db4d8261274b013f8c340abfc921c77bb3cf +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 1 19:22:31 2011 +0100 + + move the fontconfig.h inclusion from GlobalParams.h to GlobalParams.cc + + this avoids a dependency on the fontconfig headers to the users of + the core + + poppler/GlobalParams.cc | 4 ++++ + poppler/GlobalParams.h | 3 --- + 2 files changed, 4 insertions(+), 3 deletions(-) + +commit 2d77c7f9c41f1121354413bcdc3beded35a247f9 +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 1 16:51:04 2011 +0100 + + create the GooString on stack, not in heap + + poppler/Annot.cc | 5 ++--- + poppler/Form.cc | 5 ++--- + 2 files changed, 4 insertions(+), 6 deletions(-) + +commit 5dc2ef0e27ac48c81739cdfe8e8070ebbc410c87 +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 1 16:39:36 2011 +0100 + + annots: avoid temporary GooString's just for comparisons, just + use strcmp + + other than reducing few GooString allocations, strcmp should be much + faster than GooString::cmp + + poppler/Annot.cc | 128 + +++++++++++++++++++++++------------------------------ + 1 files changed, 56 insertions(+), 72 deletions(-) + +commit 535e48ab764ee4e377451ddd032044b51b842c4a +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 1 16:07:34 2011 +0100 + + [qt4] ignore "Widget" annotations + + they usually are forms or something else we do not support, so do + not complain about them for now + + qt4/src/poppler-page.cc | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit f0e5c36e7f1c5d0f0f51e3a6a6acd6c423f86df7 +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 1 16:02:54 2011 +0100 + + annots: avoid a temporary GooString just for comparisons, just + use strcmp + + other than reducing few GooString allocations, strcmp should be much + faster than GooString::cmp + + poppler/Annot.cc | 54 + ++++++++++++++++++++++++++---------------------------- + 1 files changed, 26 insertions(+), 28 deletions(-) + +commit 58a3b83a8fbd8b13eb98c4f677f4ed19b6ae44cd +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 1 15:35:45 2011 +0100 + + fix appendAnnot() invocation on annotations reading + + 1) check that the annot is actually a non-NULL pointer (otherwise + doing anything else is pointless) + 2) call appendAnnot() only if the annotation isOk() (that will + increase the annot refcount), but always decrement the refcount + (so valid annotation will have it at 1, while invalid will be deleted) + + poppler/Annot.cc | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +commit 664865a2ddca9c20ac36a41aef52ebf12eab838d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Mar 1 10:56:40 2011 +0100 + + Merge Link and AnnotLink code + + Annotations now belong to the Page and are created only once on + demand. + Annots are now ref counted and Links is a list of AnnotLink objects, + Link object has been removed. The AnnotLink API is mostly the + same than + Link and frontends APIs are not affected. + Qt4 changes made by Pino Toscano. + + glib/poppler-document.cc | 2 +- + glib/poppler-page.cc | 29 +++---- + glib/poppler-private.h | 1 - + poppler/Annot.cc | 79 +++++++++++++------ + poppler/Annot.h | 24 ++++-- + poppler/ArthurOutputDev.cc | 4 - + poppler/ArthurOutputDev.h | 3 - + poppler/CairoOutputDev.cc | 3 - + poppler/CairoOutputDev.h | 6 -- + poppler/FontInfo.cc | 4 +- + poppler/Form.cc | 36 +++------ + poppler/Form.h | 5 +- + poppler/Link.cc | 124 + +++++------------------------- + poppler/Link.h | 43 +--------- + poppler/OutputDev.h | 4 +- + poppler/PDFDoc.cc | 4 +- + poppler/Page.cc | 63 ++++++++-------- + poppler/Page.h | 11 ++- + poppler/TextOutputDev.cc | 9 +- + poppler/TextOutputDev.h | 10 +- + qt4/src/poppler-link-extractor-private.h | 2 +- + qt4/src/poppler-link-extractor.cc | 3 +- + qt4/src/poppler-page.cc | 12 +-- + utils/HtmlOutputDev.cc | 7 +- + utils/HtmlOutputDev.h | 4 +- + 25 files changed, 188 insertions(+), 304 deletions(-) + +commit 1f6573e949aaba0eb0a4c2f9cd73d7ad45ba67be +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 27 21:53:32 2011 +0100 + + small fixes to the pdftohtml manpage + + - capitalize HTML, PDF, XML, PNG + - dont -> do not + - fix UTF-8 character + - fix hypens used as minus + + utils/pdftohtml.1 | 18 +++++++++--------- + 1 files changed, 9 insertions(+), 9 deletions(-) + +commit e927384897595f1bda5f7e41b552602f9cc8ed95 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 27 16:39:59 2011 +0100 + + [qt4] fix caption of push button fields + + instead of asking the 'onStr' of the underlying form widget, + take (if available) the 'MK' entry, i.e. the appearance + characteristics dictionary, + and use the normal caption of that + + qt4/src/poppler-form.cc | 25 +++++++++++++++++++++++-- + 1 files changed, 23 insertions(+), 2 deletions(-) + +commit 5b24ee2c934feea1b7d46c8ec423d1c547258be2 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 27 16:24:22 2011 +0100 + + annots: 'CA', 'RC' and 'AC' are strings, not names + + poppler/Annot.cc | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +commit e64f6cb23e9a564b3f80daea9abcfe8bb29189eb +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 27 15:22:32 2011 +0100 + + make getOnStr() return the GooString* instead of its char* + + ... and modify its use accordingly + this way it is easier to check for a numm onStr, without the risk + of dereferencing a NULL pointer + + poppler/Form.cc | 6 +++--- + poppler/Form.h | 2 +- + qt4/src/poppler-form.cc | 7 ++----- + 3 files changed, 6 insertions(+), 9 deletions(-) + +commit f9c978fc2ab8a1f901f2136ae95deb9d41076155 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 27 14:39:52 2011 +0100 + + [qt4] directly use the dict + + qt4/src/poppler-form.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 071966e48577c515b17a424baeae85ae4fc80a20 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 27 14:21:11 2011 +0100 + + [qt4] move textAlignment() as a private function + + qt4/src/poppler-form.cc | 33 +++++++++++++++++++++++++++++++-- + qt4/src/poppler-private.h | 25 ------------------------- + 2 files changed, 31 insertions(+), 27 deletions(-) + +commit adc236771f11eeb4197064747836e8ed3fbfeba9 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 27 14:13:50 2011 +0100 + + [qt4] use FormWidget::getAlternateUiName() + + ... instead of read the value on our own + + qt4/src/poppler-form.cc | 9 ++------- + 1 files changed, 2 insertions(+), 7 deletions(-) + +commit 9f111483cf6196dedf3cee380c3e5224776203ea +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 27 14:12:16 2011 +0100 + + forms: read the TU field as alternateUiName + + poppler/Form.cc | 8 ++++++++ + poppler/Form.h | 2 ++ + 2 files changed, 10 insertions(+), 0 deletions(-) + +commit cfaadaa9e4a857fcea3b5a2cadacd352de6c469d +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 27 14:07:35 2011 +0100 + + [qt4] use FormWidget::getPartialName() + + ... instead of read the value on our own + + qt4/src/poppler-form.cc | 9 ++------- + 1 files changed, 2 insertions(+), 7 deletions(-) + +commit 2478896a0c1f6e5842f3d8b172e4cc7e6bd58cd8 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 27 13:24:09 2011 +0100 + + [qt4] use the new FormWidget::createActivationAction() + + qt4/src/poppler-form.cc | 13 +++---------- + 1 files changed, 3 insertions(+), 10 deletions(-) + +commit 1dcb683a5c2dd6a1de654e90a4394f65d63dc296 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 27 13:22:48 2011 +0100 + + add FormWidget::createActivationAction() + + used to get and create a new activation action object of a form widget + + poppler/Form.cc | 12 ++++++++++++ + poppler/Form.h | 3 +++ + 2 files changed, 15 insertions(+), 0 deletions(-) + +commit bd4cc73e438a7d4d4a10c50c69e65b5bdc63ddf2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 27 11:04:45 2011 +0000 + + Some more missing copyrights + + poppler/CairoOutputDev.cc | 2 +- + poppler/CairoOutputDev.h | 2 +- + poppler/Gfx.cc | 2 +- + poppler/OutputDev.h | 2 +- + poppler/TextOutputDev.cc | 1 + + 5 files changed, 5 insertions(+), 4 deletions(-) + +commit 6c2ed4781d8ecfffdf24e1459aafd554b3527686 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 27 10:55:22 2011 +0000 + + Add 2011 years + + poppler/Annot.cc | 2 +- + poppler/CairoFontEngine.cc | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit b297fb9de0779ac84d5b7ef68c792afefe598320 +Author: William Bader <williambader@hotmail.com> +Date: Sun Feb 27 01:48:55 2011 +0000 + + access the pixels directly + + Faster, bug 34005 + + splash/Splash.cc | 21 +++++++++++---------- + 1 files changed, 11 insertions(+), 10 deletions(-) + +commit de77e26759f1c33698abe248ad29b75c329a043c +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 27 01:39:23 2011 +0000 + + Fix crash in some pdf + + Has to be 3 and not nComps since it's a output buffer, a the input one + Bug 34357 + + poppler/GfxState.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 4f82a2e08cb2c930956c6b38030fa7b015a0de5a +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 27 01:38:33 2011 +0000 + + Implement GfxDeviceCMYKColorSpace::getRGBLine + + poppler/GfxState.cc | 22 +++++++++++++++++++++- + poppler/GfxState.h | 12 +++++++++++- + 2 files changed, 32 insertions(+), 2 deletions(-) + +commit 4980b99214281dcab8f82b5b618aadc24de371f4 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Feb 26 14:00:33 2011 +0100 + + annots: Don't assume y1 > y3 for quad points of a highlight annotation + + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=643028 + + poppler/Annot.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e6ae0f8609cd66e9e124af59adefdff9d610dcd4 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Feb 26 13:23:47 2011 +0100 + + cairo: Handle font type fontCIDType2OT when creating freetype font + + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=643273 + + poppler/CairoFontEngine.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 22eb01d305ea2560d26417ca8df9c0465d4e9a82 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Feb 26 12:17:49 2011 +0100 + + cairo: Fix a crash when rendering a document with inline images + + poppler/CairoOutputDev.cc | 28 ++++++++++++++++------------ + poppler/CairoOutputDev.h | 2 +- + 2 files changed, 17 insertions(+), 13 deletions(-) + +commit a6599dd1fda37186b876b5b2de80be1731dd5946 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Feb 26 11:59:03 2011 +0100 + + glib: Add some more introspection annotations + + glib/poppler-attachment.cc | 2 +- + glib/poppler-document.cc | 4 ++-- + glib/poppler-media.cc | 2 +- + glib/poppler-page.cc | 6 +++--- + 4 files changed, 7 insertions(+), 7 deletions(-) + +commit 89c66f236c85ac5a53ae12b01cdebc30e27b78d3 +Author: Peter Ward <peteraward@gmail.com> +Date: Sat Feb 26 11:39:58 2011 +0100 + + glib: Add missing "out" annotation to poppler_page_get_size() + + glib/poppler-page.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 7a68199b342eb3f33733f7d7446ede8f94130fba +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Feb 26 11:09:27 2011 +0100 + + cairo: Check if cairo version is == 1.11.2 to use mesh gradients api + + Cairo API has changed in 1.11.3. + + poppler/CairoOutputDev.cc | 4 ++-- + poppler/CairoOutputDev.h | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 97e7ab1a4eea2160f3f0847d10f6c16f2d66ef11 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Feb 25 20:33:39 2011 +0000 + + Do not ask freetype for a font of size 0x0 + + Fixes rendering bug at 34602 + + splash/SplashFTFont.cc | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit 3590a2d38082fc705040cdb31bf0b22ff12dd3e4 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Thu Feb 24 18:47:35 2011 +0000 + + Fix rendering of some substituted fonts + + More info in bug 34522 + + poppler/GfxFont.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 384753f1f9f780687bdead99a6548ef8598b898a +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Feb 21 19:19:48 2011 +0000 + + Use gfree since we allocate with gmalloc + + Bug 34512 + + goo/GooString.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit d775420c3c6cb5a29ff74712d3fc210fcb4b4627 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 19 11:19:57 2011 +0000 + + Do not delete textOut twice when using -bbox + + utils/pdftotext.cc | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +commit e1a56d73b066e7152ccf6ccf36206def7956cb00 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 16 00:06:45 2011 +0000 + + Lots of rendering improvements by Thomas and Andrea + + Function.cc: Stitching functions incorrectly reported 0 as output + size. + Function.cc: Remove cache from PostScriptFunction + Function.cc: Make PSStack stack allocated + GfxState.cc & GfxState.h: Abstract GfxSimpleShading, add Matrix::norm + method, add simple caching, parameter range computation + SplashOutputDev.cc & SplashOutputDev..h & Splash.cc & SplashPattern.h: + Improve splash rendering, implement radial and abstract simple + shadings + in splash + + And maybe something more, look at the + Followup Bug 32349 & Poppler: More shading fun ;-) + thread for more info + + poppler/Function.cc | 122 +-------- + poppler/Function.h | 3 +- + poppler/GfxState.cc | 638 + ++++++++++++++++++++++++++++++++++++++----- + poppler/GfxState.h | 90 +++++-- + poppler/SplashOutputDev.cc | 253 +++++++++++++++-- + poppler/SplashOutputDev.h | 67 ++++- + splash/Splash.cc | 126 +++++++--- + splash/SplashPattern.h | 7 +- + 8 files changed, 1008 insertions(+), 298 deletions(-) + +commit 675b3505f963a0110dac7f865654232cbb865ef5 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Feb 13 16:21:52 2011 +0100 + + tests: Merge splash and cairo tests into a single gtk-test tool + + With a command line option to use cairo or splash backends. + + test/CMakeLists.txt | 20 +-- + test/Makefile.am | 29 ++--- + test/gtk-cairo-test.cc | 190 ---------------------- + test/gtk-splash-test.cc | 311 ------------------------------------- + test/gtk-test.cc | 397 + +++++++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 412 insertions(+), 535 deletions(-) + +commit 728c022cdc1ea12aa54077d44276f9d7714930d4 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 13 13:25:51 2011 +0100 + + remove more references to the qt3 frontend + + followup of d82f98a274bfa008c218e265a080c4af7ce95131 + + Makefile.am | 3 --- + 1 files changed, 0 insertions(+), 3 deletions(-) + +commit 15e5b3f16015361754fdc14da4a0dde5af887568 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 13 13:23:06 2011 +0100 + + remove more GDK-related stuff + + followup of 149b7fec472beda9d1538e0f26607c9498d504c2 + + Makefile.am | 1 - + cmake/modules/FindGDK.cmake | 22 ---------------------- + config.h.cmake | 3 --- + glib/reference/Makefile.am | 1 - + glib/reference/poppler-sections.txt | 1 - + 5 files changed, 0 insertions(+), 28 deletions(-) + +commit 50aa15a0bd7100fc9b9243de1d6e6f4b59df1488 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 13 13:07:19 2011 +0100 + + remove GDK API here too + + followup of 149b7fec472beda9d1538e0f26607c9498d504c2 + + glib/poppler-features.h.cmake | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit f410cd11268254b9d0422201c9860d775f73fdd8 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Feb 13 12:55:37 2011 +0100 + + gtk-splash-test: Don't use GDK deprecated API + + test/gtk-splash-test.cc | 28 +++++++++++++++------------- + 1 files changed, 15 insertions(+), 13 deletions(-) + +commit a0568e449061d6b6af5485e340cd6f9d3e54ef7c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Feb 13 12:27:22 2011 +0100 + + glib: remove gdk referenes from pkg-config files + + poppler-glib-uninstalled.pc.in | 2 +- + poppler-glib.pc.cmake | 2 +- + poppler-glib.pc.in | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +commit 149b7fec472beda9d1538e0f26607c9498d504c2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Feb 13 11:51:57 2011 +0100 + + glib: Remove deprecated GDK API + + It removes the GDK dependency so that poppler-glib now only depends on + glib and cairo. + + CMakeLists.txt | 9 -- + configure.ac | 44 +------ + glib/CMakeLists.txt | 14 +-- + glib/Makefile.am | 8 +- + glib/poppler-features.h.in | 6 - + glib/poppler-page.cc | 296 + -------------------------------------------- + glib/poppler-page.h | 34 ----- + 7 files changed, 4 insertions(+), 407 deletions(-) + +commit a5482d64472a81206dd8d0c5bb80007f6d5bb893 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Feb 13 11:40:23 2011 +0100 + + glib: Remove test-poppler-glib, poppler-glib-demo does the same + and more + + glib/CMakeLists.txt | 8 - + glib/Makefile.am | 14 - + glib/test-poppler-glib.cc | 657 + --------------------------------------------- + 3 files changed, 0 insertions(+), 679 deletions(-) + +commit cab0cf028a192772dcb5c3f4aefa0a421e73e9e7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Feb 11 19:42:34 2011 +0000 + + Do not infinite loop in some broken files + + poppler/JBIG2Stream.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 1125cc8ccf386d8e0a0679aa73614bc2cb8037b0 +Author: William Bader <williambader@hotmail.com> +Date: Tue Feb 8 20:27:16 2011 +0000 + + Allow setting the rasterization resolution + + More info at bug 34001 + + poppler/GlobalParams.cc | 15 +++++++++++++++ + poppler/GlobalParams.h | 3 +++ + poppler/PSOutputDev.cc | 7 ++++++- + utils/pdftops.1 | 6 ++++++ + utils/pdftops.cc | 6 ++++++ + 5 files changed, 36 insertions(+), 1 deletions(-) + +commit 96e169b0eca31891f3cd564365d4a2a5c6e2a2c0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Feb 8 19:58:31 2011 +0000 + + Make really sure the uMap static pointer is valid + + It might happen you are extremely unlucky and get the same + globalParams after a new delete/creation + + qt4/src/poppler-private.cc | 51 + +++++++++++++++++++++++++++++++++++++------ + qt4/src/poppler-private.h | 34 ++-------------------------- + 2 files changed, 47 insertions(+), 38 deletions(-) + +commit c3470145f95791167c19a438934a923eab8a93cf +Author: William Bader <williambader@hotmail.com> +Date: Tue Feb 8 19:54:48 2011 +0000 + + Add PS level1 non standard binary output option + + More info at bug 34003 + + poppler/GlobalParams.cc | 18 ++++- + poppler/GlobalParams.h | 5 +- + poppler/PSOutputDev.cc | 227 + +++++++++++++++++++++++++++++++++------------- + utils/pdftops.1 | 7 ++ + utils/pdftops.cc | 8 ++- + 5 files changed, 198 insertions(+), 67 deletions(-) + +commit 37077aa475d2dee81f87daa05297b201eeb99c87 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Feb 7 19:48:28 2011 +0000 + + Make sure tx is inside the bitmap + + Seems to be what the code tried to do, fixes crash in bug 33948 + depending on + the resolution you render it + + poppler/SplashOutputDev.cc | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +commit 5aa854f70c8f563efe56dafa8bd6b3cdd5c95451 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Feb 6 13:24:35 2011 +0100 + + cairo: Use the new cairo unique id to set the surface id when printing + + Set the unique surface id when attaching jpeg images to the surface so + that cairo can reuse the mime data even when a new surface is created + with the same mime data. This reduces the size of the output file when + printing. + + poppler/CairoOutputDev.cc | 18 ++++++++++++++++-- + poppler/CairoOutputDev.h | 2 +- + 2 files changed, 17 insertions(+), 3 deletions(-) + +commit fe7b8aa4fc78aacf3226d019db74146ceaebd63c +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 2 22:35:40 2011 +0000 + + Workaround bug when converting pdf to ps with level1 + + See bug 31926 for more info + + poppler/PSOutputDev.cc | 2 +- + poppler/PreScanOutputDev.cc | 7 +++++++ + poppler/PreScanOutputDev.h | 7 +++++++ + 3 files changed, 15 insertions(+), 1 deletions(-) + +commit 5984ad081cd609f3146e0da5e22097ef073eb519 +Author: William Bader <williambader@hotmail.com> +Date: Sun Jan 30 17:02:02 2011 +0000 + + Increase precision + + Fixes some issues with pdf from bug 27482 + + poppler/PSOutputDev.cc | 200 + ++++++++++++++++++++++++------------------------ + 1 files changed, 100 insertions(+), 100 deletions(-) + +commit c60d5afbeb986c1b335357202c5f551a3c146a76 +Author: Jim Meyering <meyering@redhat.com> +Date: Mon Jan 24 15:51:20 2011 +0100 + + demo: don't use an uninitialized local variable + + * text.c (pgd_text_get_text): Before this change, when + poppler_page_get_text returned NULL, we'd use "n_recs" uninitialized. + + glib/demo/text.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit a3bdc56e2f086444419eddfcda5d2010a9a6b5c0 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jan 29 11:23:33 2011 +0100 + + glib-demo: Add a tooltip with current selected character in text demo + + To make sure that the offset of the text returned by + poppler_page_get_text() matches + the list of rectangles returned by poppler_page_get_text_layout(). + + glib/demo/text.c | 60 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 60 insertions(+), 0 deletions(-) + +commit bf2d86c8db430595fb3c55edd3f6c8d289bdaeb5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jan 28 20:34:08 2011 +0000 + + Make sure uMap is still valid before using it + + Fixes KDE bug 264667 + + qt4/src/poppler-private.cc | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +commit e6fb20d7b3bf8ea8aedc1bcd910e035059835b5f +Author: Axel Strübing <axel.struebing@freenet.de> +Date: Fri Jan 28 19:20:15 2011 +0000 + + Extract text of a pdf correctly + + See "[poppler] text extraction does not work" in the mailing list + for more info + + poppler/GfxFont.cc | 14 +++++++++++++- + poppler/GfxFont.h | 2 ++ + 2 files changed, 15 insertions(+), 1 deletions(-) + +commit 4829d36a3b005585db8c8115f7ee81a4e2384780 +Author: Simon Kellner <kellner@kit.edu> +Date: Wed Jan 26 22:59:49 2011 +0000 + + fix labelToIndex on multiple prefixes + + A PDF document can use page label prefixes, for example, to label + only inside a chapter ("A-1" .. "A-<n>", "B-1" .. "B-<m>" et cetera). + When calculating a page index for a given label, poppler would + disregard the page range for all preceding prefixes that do not + match the given prefix. + + poppler/PageLabelInfo.cc | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +commit e57c75fbd95ef8399b0785500f6893465bc808c3 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Mon Jan 24 19:48:09 2011 +1030 + + cairo: Implement Type 4,5,6,7 shadings using cairo mesh gradients + + Fixes bugs #19076 and #32791. + + poppler/CairoOutputDev.cc | 139 + +++++++++++++++++++++++++++++++++++++++++++++ + poppler/CairoOutputDev.h | 12 ++++ + poppler/Gfx.cc | 10 +++- + poppler/OutputDev.h | 2 + + 4 files changed, 161 insertions(+), 2 deletions(-) + +commit 5081356fcc69012e9df95dbf1e3c36e7c1e751c4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jan 25 20:26:25 2011 +0000 + + Fix leak in SplashOutputDev::axialShadedFill + + poppler/SplashOutputDev.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 19dc283c3af597deab297341a37495c06988948b +Author: Thomas Klausner <wiz@danbala.tuwien.ac.at> +Date: Mon Jan 24 19:05:08 2011 +0000 + + Include zlib header since we use things defined there + + goo/PNGWriter.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 5056e33e01ce0f7db1a5401b7b38d30e84eedf69 +Author: Sam Liao <phyomh@gmail.com> +Date: Mon Jan 17 13:07:22 2011 +0800 + + Poppler: Fix line selection, dont check y for Line selection + + When a line is selected while the Y values of selection is + not in the y range of words, the render will render the + line with reverse color while the words does not show up. + + This fix neglect the Y vaules to make sure that the words + also displayed when line is selected. + + poppler/TextOutputDev.cc | 16 ++++++++-------- + 1 files changed, 8 insertions(+), 8 deletions(-) + +commit 88812e716c1a0c87a504118d47eb4cc6f52962fa +Author: Andreas Hartmetz <ahartmetz@gmail.com> +Date: Fri Jan 21 23:33:47 2011 +0000 + + Add Hinting API to ArthurOutputDev + + poppler/ArthurOutputDev.cc | 11 +++++++++-- + poppler/ArthurOutputDev.h | 15 ++++++++++++++- + 2 files changed, 23 insertions(+), 3 deletions(-) + +commit dc5ec4668bdfe3b6ba41f0a2e551bbc07f8839ba +Author: Andreas Hartmetz <ahartmetz@gmail.com> +Date: Fri Jan 21 23:32:50 2011 +0000 + + support slight hinting in Splash backend + + cpp/poppler-page-renderer.cpp | 2 +- + poppler/SplashOutputDev.cc | 6 +++++- + poppler/SplashOutputDev.h | 4 +++- + qt4/src/poppler-private.h | 3 ++- + qt4/src/poppler-qt4.h | 4 +++- + splash/SplashFTFont.cc | 27 ++++++++++++++++++--------- + splash/SplashFTFont.h | 2 ++ + splash/SplashFTFontEngine.cc | 10 +++++++--- + splash/SplashFTFontEngine.h | 6 ++++-- + splash/SplashFontEngine.cc | 4 +++- + splash/SplashFontEngine.h | 2 ++ + 11 files changed, 50 insertions(+), 20 deletions(-) + +commit 0c5b1bef9f3f98001cee20061b1eaf20b965c5a9 +Author: William Bader <williambader@hotmail.com> +Date: Fri Jan 21 19:01:45 2011 +0000 + + Fix rendering for some pdf with -level1sep + + Also some speed improvemensts. Bug #32365 + + poppler/PSOutputDev.cc | 207 + +++++++++++++++++++++++++++++++++++++----------- + poppler/PSOutputDev.h | 13 ++- + 2 files changed, 170 insertions(+), 50 deletions(-) + +commit 6cb8965fb8bce6da2a4460e86f592c1ea3a84a5c +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jan 21 18:43:21 2011 +0000 + + fix (C) years + + poppler/CairoOutputDev.cc | 2 +- + poppler/CairoOutputDev.h | 2 +- + qt4/src/poppler-private.cc | 2 +- + qt4/tests/check_strings.cpp | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +commit 24f9c8924b2135da616386d0fa691fe790b4e7a4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jan 21 08:43:34 2011 +0000 + + Access the correct variable + + Fixes asert on bug 33063 + + poppler/Annot.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 07a8808c22445c421f3064da7e5227dcbf40358b +Author: Pino Toscano <pino@kde.org> +Date: Mon Jan 17 21:34:23 2011 +0100 + + fix unicodeToQString() to correctly decode the Unicode sequence + + Use a UnicodeMap to convert the sequence to UTF-8, and convert from + that to QString. + Also, ignore the last character of the Unicode sequence if it is 0x0. + + Add a couple of testcases for it. + + qt4/src/poppler-private.cc | 30 ++++++++++++++++++++++++------ + qt4/tests/check_strings.cpp | 21 +++++++++++++++++++++ + 2 files changed, 45 insertions(+), 6 deletions(-) + +commit ed367c08d788c88c49de770019bf826cfebb3e2c +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 16 17:25:02 2011 +0000 + + Don't need this either + + configure.ac | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 76ab657dc81ed0af7d9f2efaca2e68d570063001 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 16 17:22:56 2011 +0000 + + And this is the last bit of qt3 cleaning? + + configure.ac | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 9a02856c2762e65b8f03e443e728e05e5a86f65b +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 16 17:21:00 2011 +0000 + + Another qt3 unused file + + m4/qt.m4 | 16 ---------------- + 1 files changed, 0 insertions(+), 16 deletions(-) + +commit 26da7a52d31eb677ab6399de2c07140aa272b35e +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 16 17:17:59 2011 +0000 + + Yet more qt3 cleaning + + configure.ac | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +commit 8dc9c693abb0033247a338d0f7d1f3f7a57c1a55 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 16 17:14:34 2011 +0000 + + Some more qt3 thigs i forgot to kill + + CMakeLists.txt | 5 - + Makefile.am | 1 - + cmake/modules/FindQt3.cmake | 319 + ------------------------------------------- + 3 files changed, 0 insertions(+), 325 deletions(-) + +commit d82f98a274bfa008c218e265a080c4af7ce95131 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 16 17:13:06 2011 +0000 + + Kill qt3 frontend + + CMakeLists.txt | 5 - + Makefile.am | 5 - + configure.ac | 18 -- + poppler-qt-uninstalled.pc.in | 7 - + poppler-qt.pc.cmake | 13 -- + poppler-qt.pc.in | 13 -- + qt/.gitignore | 7 - + qt/CMakeLists.txt | 34 ---- + qt/Makefile.am | 48 ----- + qt/poppler-document.cc | 344 + -------------------------------- + qt/poppler-fontinfo.cc | 83 -------- + qt/poppler-link-qt3.h | 188 ------------------ + qt/poppler-link.cc | 267 ------------------------- + qt/poppler-page-transition-private.h | 28 --- + qt/poppler-page-transition.cc | 95 --------- + qt/poppler-page-transition.h | 146 -------------- + qt/poppler-page.cc | 357 + ---------------------------------- + qt/poppler-private.cc | 147 -------------- + qt/poppler-private.h | 102 ---------- + qt/poppler-qt.h | 311 ----------------------------- + qt/test-poppler-qt.cpp | 122 ------------ + 21 files changed, 0 insertions(+), 2340 deletions(-) + +commit 301352e5585d4ab6e7b609b4ab79b4d8b8656092 +Author: Daiki Ueno <ueno@unixuser.org> +Date: Sun Jan 9 18:48:50 2011 +0000 + + Do not crash in case jpeg_create_decompress fails + + Bug 32890 + + poppler/DCTStream.cc | 21 ++++++++++++--------- + poppler/DCTStream.h | 8 ++++++-- + 2 files changed, 18 insertions(+), 11 deletions(-) + +commit 17baf0498485720b4ea5952bb46287f533139d0a +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jan 8 13:03:31 2011 +0000 + + Remove declaration of function without implementation + + poppler/XRef.h | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +commit a9e280508f5d669c8b6e1a6bb888b9369d868ab3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jan 8 10:39:41 2011 +0100 + + glib: Fix memory leak when calling poppler_page_get_text_layout() + for pages with no text + + glib/poppler-page.cc | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit 5d62d18941810ef7d668eafa8b001085133fb169 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jan 8 10:33:32 2011 +0100 + + glib: Use NULL instead of FALSE in g_return_val_if_fail() for + functions returning a pointer + + glib/poppler-page.cc | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +commit 1324ae13f1fc2fa28951c2c7f7d63d4756537229 +Author: Pino Toscano <pino@kde.org> +Date: Thu Jan 6 01:15:30 2011 +0100 + + [cpp/apidox] advertize the 'pnm' image format + + cpp/poppler-image.cpp | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit b192363960c26111167b1b08db9910e5f39dcf8b +Author: Pino Toscano <pino@kde.org> +Date: Thu Jan 6 01:09:09 2011 +0100 + + [cpp] Add PNM (PBM/PGM/PPM) exporting to 'image'. + + Introduce a custom ImgWriter (PNMWriter) for exporting in the PNM + variants, + and use it choosing the output format matching as close as possible + the format of the image. + + cpp/CMakeLists.txt | 1 + + cpp/Makefile.am | 2 + + cpp/PNMWriter.cc | 119 + +++++++++++++++++++++++++++++++++++++++++++++++++ + cpp/PNMWriter.h | 43 ++++++++++++++++++ + cpp/poppler-image.cpp | 22 +++++++++- + 5 files changed, 186 insertions(+), 1 deletions(-) + +commit bebc530cbde7898759e1bd3629d2836ce0fb1d08 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Fri Dec 31 12:11:40 2010 +1030 + + cairo: Don't set JPX mime data if the stream specifies a colorspace + + The stream colorspace overides, and may be different to, the + colorspace in the JPX data. + + https://bugs.freedesktop.org/show_bug.cgi?id=32746 + + poppler/CairoOutputDev.cc | 46 + ++++++++++++++++++++++++++++++-------------- + poppler/CairoOutputDev.h | 1 + + 2 files changed, 32 insertions(+), 15 deletions(-) + +commit 1399b9ab14b19f25583c75af2b36f63a6a01129a +Author: Pino Toscano <pino@kde.org> +Date: Wed Dec 29 15:56:45 2010 +0100 + + [cpp] add TIFF output to 'image' + + cpp/poppler-image.cpp | 12 ++++++++++++ + 1 files changed, 12 insertions(+), 0 deletions(-) + +commit 1c7937dbc3c577ffc12cacc8de33d320e2f30ce9 +Author: William Bader <williambader@hotmail.com> +Date: Wed Dec 29 14:47:06 2010 +0000 + + Make pdftoppm be able of writing tif files + + BUG 32027 + + CMakeLists.txt | 15 ++++ + config.h.cmake | 3 + + configure.ac | 32 ++++++++ + goo/Makefile.am | 2 + + goo/TiffWriter.cc | 202 + ++++++++++++++++++++++++++++++++++++++++++++++++ + goo/TiffWriter.h | 53 +++++++++++++ + poppler/Makefile.am | 11 +++ + splash/SplashBitmap.cc | 18 ++++- + splash/SplashBitmap.h | 5 +- + splash/SplashTypes.h | 4 +- + utils/pdftoppm.1 | 6 ++ + utils/pdftoppm.cc | 14 +++- + 12 files changed, 358 insertions(+), 7 deletions(-) + +commit bae91ecb638fcfee001e5c9a86a754610da796e4 +Author: William Bader <williambader@hotmail.com> +Date: Tue Dec 28 11:53:54 2010 +0000 + + Add -singlefile option to pdftoppm + + Bug 32025 + + utils/pdftoppm.1 | 3 +++ + utils/pdftoppm.cc | 26 +++++++++++++++++++++++--- + 2 files changed, 26 insertions(+), 3 deletions(-) + +commit ff58ee66c27da09a370a3000ab55eb1a24921852 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Dec 27 20:07:21 2010 +0000 + + bump soname just in case the getPage change is not BC + + qt/CMakeLists.txt | 2 +- + qt/Makefile.am | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 453df02e195a96d0210f297c21c8ffba646659da +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Dec 27 19:51:13 2010 +0000 + + Make distcheck work + + glib/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 6a34cec72c1a1b6576858a7836aae4a902fb5ed7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Dec 27 19:29:52 2010 +0000 + + increase core soname + + CMakeLists.txt | 2 +- + poppler/Makefile.am | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 8c11e9d68dceb609d04b3b383d22c307b5981d86 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Dec 27 19:23:29 2010 +0000 + + 0.16.0 project version increase + + CMakeLists.txt | 4 ++-- + configure.ac | 4 ++-- + cpp/Doxyfile | 2 +- + qt4/src/Doxyfile | 2 +- + 4 files changed, 6 insertions(+), 6 deletions(-) + +commit 8c1fd83c6061279af00c1172fe41cee61f19d917 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Dec 27 19:22:22 2010 +0000 + + 0.16.0 NEWS + + NEWS | 24 ++++++++++++++++++++++++ + 1 files changed, 24 insertions(+), 0 deletions(-) + +commit 0294d6e50691a3e40fad0d6e4fa9056944a91efd +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Thu Dec 23 15:56:32 2010 +0000 + + Be more correct when drawing radial shadings + + Fixes 32349 + + poppler/Gfx.cc | 25 ++++++++++++++++--------- + 1 files changed, 16 insertions(+), 9 deletions(-) + +commit 3aa08e378927889b35b6fa858d6da568250ba6ec +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 19 22:36:47 2010 +0000 + + Seems to work with this version, so enable it + + CMakeLists.txt | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 93cf184b7573980bf2e56342e64f9b99c5d0b415 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 19 14:16:25 2010 +0000 + + Fix last commit + + Applying patches by hand is bad + + poppler/PDFDoc.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit ebb580d756a8321de87814f05ab572564732c15e +Author: Philip Lorenz <lorenzph+freedesktop@gmail.com> +Date: Sun Dec 19 14:08:31 2010 +0000 + + Windows fixes + + poppler/PDFDoc.cc | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit 88a4154420e016d93c5ce05b5b8e09b6bddcadc9 +Author: Philip Lorenz <lorenzph+freedesktop@gmail.com> +Date: Sun Dec 19 13:03:01 2010 +0000 + + build on newer MSVC + + qt4/src/poppler-annotation.h | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +commit 18cd9f6aeb48266c551952c395eb9cd662bc27f5 +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Sat Dec 18 17:59:54 2010 +0000 + + compile in windows + + poppler/FontInfo.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 471102ef68b439dfa13e20e3b0f2e143f8d0dc85 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 17 00:36:36 2010 +0000 + + Remove -resolution + + Actually use -zoom that is there for a reason + + utils/pdftohtml.1 | 3 --- + utils/pdftohtml.cc | 15 ++++++--------- + 2 files changed, 6 insertions(+), 12 deletions(-) + +commit edf6c47feb5b7658e585bcce196e465245e1dc98 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Dec 16 22:56:40 2010 +0000 + + kill useless code + + utils/pdftohtml.cc | 8 -------- + 1 files changed, 0 insertions(+), 8 deletions(-) + +commit 185a2f81485e19f96393a431be5523a277747b94 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Dec 16 22:56:15 2010 +0000 + + static-ify some vars + + utils/HtmlOutputDev.cc | 9 --------- + utils/pdftohtml.cc | 8 ++++---- + 2 files changed, 4 insertions(+), 13 deletions(-) + +commit e4dfc548c57b690db9122d1db3342ed0a785c8bb +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Dec 14 19:45:46 2010 +0000 + + We need this to make the define really be defined + + config.h.cmake | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 06da4b46c442778c67b788b747f04b386b5247ac +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Tue Dec 14 09:06:57 2010 +1030 + + cairo: Use A1 instead of A8 for imagemask + + The cairo PDF surface now optimizes the case of cairo_mask() with + solid source and A1 mask to use a PDF stencil mask. + + Fixes https://bugs.launchpad.net/ubuntu/+source/libcairo/+bug/680628 + where a 65K PDF printed to PDF using poppler-cairo turns into an 8MB + PDF. + + CMakeLists.txt | 2 ++ + configure.ac | 1 + + poppler/CairoOutputDev.cc | 25 ++++++++++++++++++------- + 3 files changed, 21 insertions(+), 7 deletions(-) + +commit 6ef457dc818e7e241e5d2e264bc2d78b132ae638 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Dec 13 14:08:29 2010 +0000 + + Move -fno-exceptions -fno-check-new to default flags + + Makes sense since we decided not to support the exception path in + gmem a + while ago + + cmake/modules/PopplerMacros.cmake | 2 +- + configure.ac | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 86e469600b58ae05cb6ede1b4017fbdac99cc556 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Dec 13 14:04:00 2010 +0000 + + More gcc flags movement + + -Wchar-subscripts is part of -Wall so remove it + Move -fno-common to default options since it makes sense to use it + + cmake/modules/PopplerMacros.cmake | 4 ++-- + configure.ac | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 2b74241d8b1fd1ec9fab4f6f673bbaaa1cb3d949 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Dec 13 13:56:52 2010 +0000 + + Promote -Wcast-align to the general warnings we ask gcc to give + + cmake/modules/PopplerMacros.cmake | 2 +- + configure.ac | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 7313e0a4de6f2146c1dcb3d235f18a3c844d12d5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 12 23:28:18 2010 +0000 + + Do not return 99 (or 1) with -h, -v and -printenc + + Bug 32149 + + utils/pdffonts.cc | 2 ++ + utils/pdfimages.cc | 2 ++ + utils/pdfinfo.cc | 3 +++ + utils/pdftoppm.cc | 2 ++ + utils/pdftops.cc | 5 ++++- + utils/pdftotext.cc | 3 +++ + 6 files changed, 16 insertions(+), 1 deletions(-) + +commit 669cbfc9fd78a22d4f14b0af43143e1f5dc28cd5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Dec 11 19:04:22 2010 +0000 + + Fix the preliminary bbox/clip calculation + + Code based in code posted by Suzuki Toshiya in the freetype mailing + list + + splash/SplashFTFont.cc | 15 +++++++++------ + 1 files changed, 9 insertions(+), 6 deletions(-) + +commit 2984002a64acca7014edeadd900dd52cdf7d9eac +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Dec 11 18:57:52 2010 +0000 + + Remove the * we just need to increase the pointer + + Gives a warning with newer gcc's + + splash/Splash.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 9b45fa072198da4a5032004ac943cf2227aa97ea +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 10 12:05:58 2010 +0000 + + Make PreScanOutputDev be less agressive when deciding to rasterize + + BUG 30107 + + poppler/PreScanOutputDev.cc | 14 +++++++++++++- + poppler/PreScanOutputDev.h | 4 ++++ + 2 files changed, 17 insertions(+), 1 deletions(-) + +commit f96f6a06cdc33b4654669ac74d5abd0d546a127d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 5 12:06:21 2010 +0000 + + Adapt the zlib-base FlateStream code to API changes + + Bug 32065 + + poppler/FlateStream.cc | 9 ++++++--- + poppler/FlateStream.h | 9 +++++++++ + 2 files changed, 15 insertions(+), 3 deletions(-) + +commit 7b1f83990a1f68306daf5f7dbeabcd38f4382e3b +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Nov 29 22:27:46 2010 +0000 + + 0.15.3 + + CMakeLists.txt | 4 ++-- + NEWS | 18 ++++++++++++++++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + poppler/Makefile.am | 2 +- + qt4/src/Doxyfile | 2 +- + 6 files changed, 24 insertions(+), 6 deletions(-) + +commit 7c23a993193aaaa4d4b5b6d1161a0455d1e2a8c0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Nov 29 21:33:31 2010 +0000 + + Add some more isNum before calling getNum + + poppler/GfxState.cc | 48 + ++++++++++++++++++++++++++++++++---------------- + 1 files changed, 32 insertions(+), 16 deletions(-) + +commit 62ec4f591c258e702ee79b519919a931517220bf +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Nov 29 20:50:43 2010 +0000 + + pass fetchOriginatorNums in some more calls + + Fixes some more crashes in broken files + + poppler/Parser.cc | 7 ++++++- + poppler/Parser.h | 1 + + poppler/XRef.cc | 6 +++--- + 3 files changed, 10 insertions(+), 4 deletions(-) + +commit d2a0e2ca723142478858f7edfb7c98807d554578 +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Nov 25 10:36:38 2010 +0000 + + Skip over loops in Pages tree + + poppler/Catalog.cc | 15 ++++++++++----- + 1 files changed, 10 insertions(+), 5 deletions(-) + +commit 7abd371364e6e4aaef932f26b0664f7f9d760c42 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 28 13:57:50 2010 +0000 + + this var is not about xobjects only anymroe + + poppler/FontInfo.cc | 6 +++--- + poppler/FontInfo.h | 2 +- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 1ac14df61d711097837e44d80a9332f0a854b95e +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sun Nov 28 13:49:41 2010 +0000 + + find fonts inside patterns + + Bug 31948 + + poppler/FontInfo.cc | 50 + +++++++++++++++++++++++++++----------------------- + 1 files changed, 27 insertions(+), 23 deletions(-) + +commit d30dd8c6f6491beac9750447126930168394cd9f +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 28 13:25:39 2010 +0000 + + Use sets instead of arrays + + poppler/FontInfo.cc | 46 ++++++++-------------------------------------- + poppler/FontInfo.h | 11 +++-------- + 2 files changed, 11 insertions(+), 46 deletions(-) + +commit 4c20bf14c0b1d7f1d5e530ded890186487da32b5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 28 12:50:24 2010 +0000 + + Use FontInfoScanner + + No idea why we didn't do this before, duplicate code is evil and now + pdffonts doesn't crash on pdf from bug 20486 + + utils/pdffonts.cc | 185 + ++++++++--------------------------------------------- + 1 files changed, 26 insertions(+), 159 deletions(-) + +commit d915f3d5a9e9e2e5dcd6be4cf8fac1b5849a13e9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 24 21:51:46 2010 +0000 + + protect against null ref here + + poppler/Catalog.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit cf32faaa16d763561fb9dfc4469345e4b3ba2369 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 24 21:48:54 2010 +0000 + + Protect against NULL values here + + poppler/JPEG2000Stream.h | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 46a6cc5952c59504863baed3ad2870093c462f12 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 24 19:42:59 2010 +0000 + + Check the objects are numbers before using them + + Bug 31895 + + poppler/GfxState.cc | 26 ++++++++++++++++++-------- + 1 files changed, 18 insertions(+), 8 deletions(-) + +commit 52e25cca7e75a8b8eac95a3cec258f1cd9f8ecaa +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Nov 23 20:31:14 2010 +0000 + + If it is not a Page but has no Kids either let's just pretend it's + a page + + Fixes broken PDF at bug 31861 + + poppler/Catalog.cc | 2 +- + poppler/Dict.cc | 4 ++++ + poppler/Dict.h | 2 ++ + 3 files changed, 7 insertions(+), 1 deletions(-) + +commit c6127898b13311197971b1c6b1b306b91e28cf0e +Author: Hib Eris <hib@hiberis.nl> +Date: Mon Nov 22 13:08:48 2010 +0000 + + Use gmallocn_checkoverflow when parsing Hints table + + Prevents running out of memory with malicious documents. + + poppler/Hints.cc | 26 +++++++++++++------------- + 1 files changed, 13 insertions(+), 13 deletions(-) + +commit 6a17cc89eda52f08cbacbf9bfaaeda22cf041e82 +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Mon Nov 22 19:20:56 2010 +0000 + + Improve rendering of radial shadings + + Improves the duck rendering in bug 22098 + + poppler/Gfx.cc | 71 + ++++++++++++++++++++++++++----------------------------- + 1 files changed, 34 insertions(+), 37 deletions(-) + +commit 9093adede4f9ad6fb2962dcefcb09c1d8c357715 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 21 23:49:12 2010 +0000 + + pedantic ; + + poppler/CurlPDFDocBuilder.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 61445f5af749510fb647059af01abf1faf664195 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Nov 20 22:19:35 2010 +0000 + + forgot to upadte year here + + poppler/Parser.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3628837febb21bcd1b54f3fb737628ea59e5d95d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Nov 20 22:15:08 2010 +0000 + + And now generalize the previous fix + + Works for loops of more than one item as in bug 28784 + + poppler/Dict.cc | 4 ++-- + poppler/Dict.h | 2 +- + poppler/Object.cc | 4 ++-- + poppler/Object.h | 9 +++++---- + poppler/Parser.cc | 19 +++++++++++++------ + poppler/Parser.h | 7 ++++++- + poppler/XRef.cc | 30 +++++++++++++++++++++++++----- + poppler/XRef.h | 2 +- + 8 files changed, 55 insertions(+), 22 deletions(-) + +commit b0555189a7fbd7f6a899e582783b9e0df44d5d6a +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Nov 20 21:32:24 2010 +0000 + + Protect against more loops when parsing + + poppler/Dict.cc | 4 ++-- + poppler/Dict.h | 2 +- + poppler/Object.cc | 4 ++-- + poppler/Object.h | 8 ++++---- + poppler/Parser.cc | 2 +- + poppler/XRef.cc | 4 ++-- + poppler/XRef.h | 2 +- + 7 files changed, 13 insertions(+), 13 deletions(-) + +commit 555fa897b275ca7195f22a727b049c8c4f2d74cd +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Nov 20 19:14:38 2010 +0000 + + Detect loops in FormField creation + + poppler/Form.cc | 88 + +++++++++++++++++++++++++++++++----------------------- + poppler/Form.h | 14 +++++---- + 2 files changed, 58 insertions(+), 44 deletions(-) + +commit 1802ddef374cb1451975480b2427e5d23ee2c737 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Nov 20 18:58:17 2010 +0000 + + Forgot to port this away from GooVector :-S + + poppler/CurlCachedFile.cc | 3 +-- + poppler/CurlCachedFile.h | 2 +- + 2 files changed, 2 insertions(+), 3 deletions(-) + +commit 32e53c5436b8c3654e7043f1d86596a79511a4cf +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Nov 20 18:54:59 2010 +0000 + + fix spacing + + poppler/Form.cc | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit 1cb3d5d94a1d89ccded96d977bcabfbe438fb81f +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Nov 20 18:08:45 2010 +0000 + + fix the memset + + Fixes crash in broken pdf + + poppler/Hints.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 22e8cebaa15adb4b19c9556cdca43cc3e77832b7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Nov 20 17:20:34 2010 +0000 + + Ensure the obj are num before reading them + + poppler/GfxState.cc | 32 ++++++++++++++++++++++---------- + 1 files changed, 22 insertions(+), 10 deletions(-) + +commit 08b2db36db4e011ebe36d2d945cb1a0498f1c5fb +Author: Pino Toscano <pino@kde.org> +Date: Sat Nov 20 14:00:36 2010 +0100 + + add my copyright here + + poppler/Hints.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 91aa4b02aa93ffe3828479194067de42d52be465 +Author: Pino Toscano <pino@kde.org> +Date: Sat Nov 20 13:13:46 2010 +0100 + + [cpp] include <ios> for std::hex() and std::left() + + cpp/poppler-global.cpp | 1 + + cpp/tests/poppler-dump.cpp | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit 1c924412923cb01f2cb95b0943cb7bbaf7e8cfb6 +Author: Pino Toscano <pino@kde.org> +Date: Sat Nov 20 13:02:36 2010 +0100 + + [cpp] include <iterator> for std::back_inserter() + + cpp/poppler-document.cpp | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 95b551025a34f3a7bcff2852eac6d186bc8a7cb0 +Author: Pino Toscano <pino@kde.org> +Date: Sat Nov 20 12:54:21 2010 +0100 + + use a std::vector<char> instead of a var-length-array of char's + + poppler/Hints.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 4faaff893515c80cb69b02e431a0f8483274a497 +Author: Hib Eris <hib@hiberis.nl> +Date: Fri Nov 19 23:53:35 2010 +0000 + + [win32] Simplify strtok_r implementation + + The previous implementation did not compile with mingw64. + + poppler/strtok_r.cpp | 137 + +------------------------------------------------- + 1 files changed, 1 insertions(+), 136 deletions(-) + +commit 255f84927a649d980f047fe755c9c308535a3779 +Author: Hib Eris <hib@hiberis.nl> +Date: Fri Nov 19 23:45:33 2010 +0000 + + Correct parsing of linearization table + + Fixes bug #31627 + + poppler/Linearization.cc | 4 +--- + 1 files changed, 1 insertions(+), 3 deletions(-) + +commit 9d05138f0b7d15945f546564036bc67815593db0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 14 16:05:28 2010 +0000 + + 0.15.2 + + CMakeLists.txt | 4 ++-- + NEWS | 22 ++++++++++++++++++++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + poppler/Makefile.am | 2 +- + qt4/src/Doxyfile | 2 +- + 6 files changed, 28 insertions(+), 6 deletions(-) + +commit 2d18543bd6b3a5a9ff2dfab63339d5bfcccd0b2f +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 14 15:41:56 2010 +0000 + + This does actually work now :D + + qt4/tests/check_metadata.cpp | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit d772364b8a5858cbd98e256547d319260fa9d084 +Author: Pino Toscano <pino@kde.org> +Date: Thu Nov 11 21:52:25 2010 +0100 + + [Qt4] New function setDebugErrorFunction(). + + This new function + typedef can be useful to direct the ebug/error + messages + to a different place than the default qDebug()'s one. + + Base on an idea of Albert, added closure and polish by me. + + qt4/src/poppler-private.cc | 20 +++++++++++++++++++- + qt4/src/poppler-qt4.h | 24 ++++++++++++++++++++++++ + 2 files changed, 43 insertions(+), 1 deletions(-) + +commit ce929cf33f4b6b6421f9d327b4bb792816d47aac +Author: Jakob Voss <jakob.voss@gbv.de> +Date: Wed Nov 10 23:41:44 2010 +0000 + + Add -p flag to pdfimages + + Adds the page the image is in to the image filename + + utils/ImageOutputDev.cc | 25 ++++++++++++++++++------- + utils/ImageOutputDev.h | 19 +++++++++++++++---- + utils/pdfimages.1 | 3 +++ + utils/pdfimages.cc | 6 +++++- + 4 files changed, 41 insertions(+), 12 deletions(-) + +commit 6296c28968613aadb7ea084092945a54005eca9b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 10 23:28:45 2010 +0000 + + Kill GooVector + + std::vector does the same and GooVector is not part of xpdf so + we don't + need to maintain it in case we ever get a new xpdf release we want to + merge with + + CMakeLists.txt | 1 - + goo/GooVector.h | 159 + -------------------------------------------- + goo/Makefile.am | 1 - + poppler/CachedFile.cc | 19 +++--- + poppler/CachedFile.h | 15 ++-- + poppler/Catalog.cc | 12 ++-- + poppler/Catalog.h | 10 ++- + poppler/Form.h | 3 +- + poppler/Gfx.h | 7 +- + poppler/Hints.cc | 5 +- + poppler/Hints.h | 6 +- + poppler/StdinCachedFile.cc | 2 +- + poppler/StdinCachedFile.h | 2 +- + poppler/Stream.h | 1 - + poppler/XRef.cc | 10 ++-- + poppler/XRef.h | 7 +- + utils/HtmlFonts.cc | 8 +- + utils/HtmlFonts.h | 12 ++-- + utils/HtmlLinks.cc | 8 +-- + utils/HtmlLinks.h | 4 +- + 20 files changed, 66 insertions(+), 226 deletions(-) + +commit 5934c320aa136c1a6e97fb9bf54bdfdccfcab521 +Author: Hib Eris <hib@hiberis.nl> +Date: Wed Nov 10 22:50:36 2010 +0000 + + Linearization improvements + + Read + http://lists.freedesktop.org/archives/poppler/2010-November/006642.html + for the detailed patch description + + CMakeLists.txt | 4 + + glib/poppler-action.cc | 4 +- + glib/poppler-document.cc | 17 +- + glib/poppler-page.cc | 1 + + poppler/CachedFile.h | 2 +- + poppler/Catalog.cc | 352 +++++++++++++++++++++----------- + poppler/Catalog.h | 14 +- + poppler/FontInfo.cc | 5 +- + poppler/Hints.cc | 439 + +++++++++++++++++++++++++++++++++++++++ + poppler/Hints.h | 95 +++++++++ + poppler/Linearization.cc | 224 ++++++++++++++++++++ + poppler/Linearization.h | 45 ++++ + poppler/Makefile.am | 4 + + poppler/PDFDoc.cc | 284 +++++++++++++++++++++---- + poppler/PDFDoc.h | 38 +++- + poppler/PSOutputDev.cc | 39 ++-- + poppler/PSOutputDev.h | 14 +- + poppler/Stream.cc | 13 +- + poppler/Stream.h | 11 +- + poppler/XRef.cc | 351 ++++++++++++++++++------------- + poppler/XRef.h | 25 ++- + qt/poppler-document.cc | 14 ++- + qt/poppler-page.cc | 19 +- + qt/poppler-private.h | 14 +- + qt/poppler-qt.h | 3 +- + qt4/src/poppler-document.cc | 12 +- + qt4/src/poppler-link.cc | 7 +- + qt4/src/poppler-page.cc | 3 +- + qt4/src/poppler-ps-converter.cc | 2 + + utils/HtmlOutputDev.cc | 2 +- + utils/HtmlOutputDev.h | 3 + + utils/pdffonts.cc | 6 +- + utils/pdfinfo.cc | 22 ++- + utils/pdftohtml.cc | 2 +- + utils/pdftops.cc | 3 +- + 35 files changed, 1690 insertions(+), 403 deletions(-) + +commit abb1313ae40ab7efb073406f47fa53bf7afe0b88 +Author: Pino Toscano <pino@kde.org> +Date: Mon Nov 8 01:54:03 2010 +0100 + + [cpp/apidox] add the minimum version of 'image' + + cpp/poppler-image.cpp | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit f559e77cb7d76c5fe6a79be9086667a29613c912 +Author: Pino Toscano <pino@kde.org> +Date: Mon Nov 8 01:52:48 2010 +0100 + + [cpp] add image::bytes_per_row() + + cpp/poppler-image.cpp | 8 ++++++++ + cpp/poppler-image.h | 1 + + 2 files changed, 9 insertions(+), 0 deletions(-) + +commit 14dea4d74698d5d7d994e687f8176652d790dba7 +Author: Pino Toscano <pino@kde.org> +Date: Sun Nov 7 22:57:31 2010 +0100 + + [arthur] use the untransformed line width, not the transformed one + + ... as the painter will do the transformation itself already; + seems to product better results + + poppler/ArthurOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit f077e82af0724be88d28c896a3c208f1d50ccff9 +Author: Pino Toscano <pino@kde.org> +Date: Sun Nov 7 21:50:48 2010 +0100 + + [qt4] New Page::renderToPainter() + + This new painter-based painting function ican be used for painting + (with Arthur only for now) without getting an image first. + Also add a new flag type for it, with a single item telling whether + do not save+restore the provided painter. + + Mostly based on a patch by Matthias Fauconneau + (matthias.fauconneau@gmail.com), thanks! + + qt4/src/poppler-page.cc | 62 + +++++++++++++++++++++++++++++++------------- + qt4/src/poppler-qt4.h | 65 + ++++++++++++++++++++++++++++++++++++++++++++++- + 2 files changed, 107 insertions(+), 20 deletions(-) + +commit df02d1fc9e65422121e5e8f493c13229552ec0e7 +Author: Pino Toscano <pino@kde.org> +Date: Sun Nov 7 19:47:56 2010 +0100 + + [arthur] remove unused 'm_image' attribute + + poppler/ArthurOutputDev.cc | 1 - + poppler/ArthurOutputDev.h | 2 +- + 2 files changed, 1 insertions(+), 2 deletions(-) + +commit b29582cd0d542a3e70dbca3fb75770daa4cc91ca +Author: Matthias Fauconneau <matthias.fauconneau@gmail.com> +Date: Sun Nov 7 19:44:11 2010 +0100 + + [arthur] small fixes and memory leaks + + - fix font rendering (transforming the glyph path and not only the + glyph origin) + - fix image rendering (alpha was set to zero) + + poppler/ArthurOutputDev.cc | 122 + +++++++++++++++++++------------------------ + 1 files changed, 54 insertions(+), 68 deletions(-) + +commit 970f075569bf9be5e5ddc3a9ad1fabec5435dfaf +Author: Pino Toscano <pino@kde.org> +Date: Sun Nov 7 16:31:02 2010 +0100 + + [cpp/tests] add a simple poppler-render test + + ... to ease testing the render capabilities of poppler-cpp. + quite minimal at the moment. + + cpp/tests/CMakeLists.txt | 3 + + cpp/tests/Makefile.am | 9 +++- + cpp/tests/poppler-render.cpp | 113 + ++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 124 insertions(+), 1 deletions(-) + +commit bfe4139c742cb0a669f5504df7e22e3e57243d9a +Author: Pino Toscano <pino@kde.org> +Date: Sun Nov 7 16:23:26 2010 +0100 + + [cpp] Add page_renderer, to render pages over images. + + This new class introduces a very simple way to render a page, using + the Splash backend, + giving an 'image' as result. + It can hold a color for the "paper" of the pages, and some hints + for the actual rendering. + + cpp/CMakeLists.txt | 2 + + cpp/Makefile.am | 2 + + cpp/poppler-page-renderer.cpp | 212 + +++++++++++++++++++++++++++++++++++++++++ + cpp/poppler-page-renderer.h | 66 +++++++++++++ + 4 files changed, 282 insertions(+), 0 deletions(-) + +commit 91e3f7b4ea42a5821fd78e1edf55e95250c9bc68 +Author: Pino Toscano <pino@kde.org> +Date: Sun Nov 7 16:19:34 2010 +0100 + + [cpp] add an internal way to get a 'page_private' of a 'page' + + useful for getting a 'page_private' in the implementation of other + cpp classes + without the need to add friends to 'page' + + cpp/poppler-page-private.h | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit fa7c41cb9c52ecd3d7c574455b1258a3021b8c75 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Nov 4 20:55:34 2010 +0000 + + Improvements to the splash backend + + Antialias and shadings. + Code by Thomas Freitag <Thomas.Freitag@alfa.de> and Christian + Feuersänger <cfeuersaenger@googlemail.com> + More info at bug 30436 + + poppler/CairoOutputDev.h | 5 +- + poppler/Function.cc | 4 +- + poppler/Function.h | 2 + + poppler/Gfx.cc | 12 +- + poppler/OutputDev.h | 16 ++- + poppler/PSOutputDev.h | 4 +- + poppler/SplashOutputDev.cc | 182 ++++++++++++++++++++- + poppler/SplashOutputDev.h | 68 ++++++++- + splash/Splash.cc | 395 + +++++++++++++++++++++++++++++++++++++++++++- + splash/Splash.h | 11 +- + splash/SplashBitmap.cc | 4 +- + splash/SplashBitmap.h | 3 + + splash/SplashPattern.cc | 17 ++- + splash/SplashPattern.h | 36 ++++- + 14 files changed, 735 insertions(+), 24 deletions(-) + +commit 0aa040163741ab8ba093a742e556bba2a5ab7edf +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 3 20:40:24 2010 +0000 + + Do not add sibling children as parents + + Fixes c2ff94b1600b8a5841a5e4627f014560ac460f1a + + poppler/Function.cc | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +commit c2ff94b1600b8a5841a5e4627f014560ac460f1a +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 3 00:02:02 2010 +0000 + + Do not loop forever in broken documents + + StitchingFunctions that have themselves up in the parent chain + are wrong + + poppler/Function.cc | 22 +++++++++++++++++++--- + poppler/Function.h | 6 ++++-- + 2 files changed, 23 insertions(+), 5 deletions(-) + +commit cad66a7d25abdb6aa15f3aa94a35737b119b2659 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Nov 2 19:14:34 2010 +0000 + + Fix crash in broken documents + + mapLen = (code + 256) & ~255; can wrap and you end up with mapLen + < code + that is not what you wanted + + poppler/CharCodeToUnicode.cc | 16 +++++++++++----- + 1 files changed, 11 insertions(+), 5 deletions(-) + +commit 7e5f31c1c41193c6e49355970e6d027b91d45825 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Nov 2 00:32:01 2010 +0000 + + make some more fields private + + splash/SplashFontFile.h | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit 6751eb48dc49890f7ad8b732b3fc29a2db746ec4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Nov 2 00:26:08 2010 +0000 + + Make the destructor private + + You are not supposed to call it, you should call unref + + splash/SplashFontFile.h | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit b718e821d5f21ea5b0c44c6c2b59769c9b94892a +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Oct 28 08:46:09 2010 +0100 + + Revert fdfffc9c68314d3f64dee7e0ef8617105e3198dd + + It is not a leak and makes things crash :D + + poppler/SplashOutputDev.cc | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 15b9aeac5a20c544db1aebe00113ebc2f7ba52c7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Oct 28 00:37:29 2010 +0100 + + if reallocn fails, free p + + goo/gmem.cc | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +commit 561c0567a5741d7c49903c51c8020187dccaa0d9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Oct 27 22:43:51 2010 +0100 + + fix comment + + poppler/SplashOutputDev.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 4ef38cc99a879202e717447a422272cf85eeccfc +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Oct 27 22:36:07 2010 +0100 + + Fix memory leaks that can happen with broken documents + + poppler/SplashOutputDev.cc | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +commit fdfffc9c68314d3f64dee7e0ef8617105e3198dd +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Oct 27 20:40:19 2010 +0100 + + Fix memory leak + + poppler/SplashOutputDev.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 90d479d9d5c947175e60ab689f440ae9c24f0b2b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Oct 27 20:39:48 2010 +0100 + + Do not crash if bitmap->alpha == NULL + + Happens in broken files + + splash/Splash.cc | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 6ad36277971ec46d4a4ef0c45625e60f8c5f1247 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Oct 25 18:59:49 2010 +0100 + + Initialze movie to NULL on broken pdf files + + poppler/Annot.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 2d0b6e2956a81164bca6adc9aacad0e620480957 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Oct 24 00:23:21 2010 +0100 + + Here the chars to read is the increment size not the initialSize + + Fixes crash in file provided by Robert Święcki + + poppler/Stream.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit dcb02d2100136b6035485be3be214ce3d9f1c102 +Author: Vincent Torri <vtorri@univ-evry.fr> +Date: Sat Oct 23 23:45:05 2010 +0100 + + remove -ansi flag for cywin and mingw + + configure.ac | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +commit 17cdc81224c72f7b58de61734c9ead337ff7b42b +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 23 23:37:59 2010 +0100 + + update my C year + + poppler/SplashOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e09ddce7e21bbd62b384d9d59fbd1e0f14f7d05f +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 23 23:33:00 2010 +0100 + + Fix crash in malformed documents + + poppler/SplashOutputDev.cc | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 906e4e15421d8f3f0a825ca767e5eac3169853d6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 23 23:12:44 2010 +0100 + + Do not leak attrs1 + + poppler/Catalog.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit ec32bb45a57a8a839156c946fcde1270aa6019d9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 23 23:00:03 2010 +0100 + + Do not crash if n is 0 + + poppler/Function.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 9edf7e4fefb37989af9a2558aaa83d7cd4694ec6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 23 22:59:50 2010 +0100 + + add unlikely marker + + poppler/Decrypt.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit c46e863b7b94dc2f83a7d89f4afb8fe3bc8ec35c +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 23 22:55:49 2010 +0100 + + Do not divide by 0 in rc4InitKey + + poppler/Decrypt.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit bcb13ed5828e2a855efd5e38b2acd15ca37a9991 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 23 22:40:17 2010 +0100 + + Check obj2 is a num before reading it + + poppler/Gfx.cc | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +commit c64a49307782299cb7a950a66419f9d59707f38b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Oct 20 22:29:29 2010 +0100 + + 0.15.1 + + CMakeLists.txt | 4 ++-- + NEWS | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + poppler/Makefile.am | 2 +- + qt4/src/Doxyfile | 2 +- + 6 files changed, 52 insertions(+), 6 deletions(-) + +commit 3b45c66de91243d7419657512cf726c9e1c26dfb +Author: Kenneth Berland <ken@hero.com> +Date: Sun Oct 17 14:24:16 2010 +0100 + + Add -bbox option to pdftotext + + utils/pdftotext.1 | 4 ++ + utils/pdftotext.cc | 125 + +++++++++++++++++++++++++++++++++++++++++----------- + 2 files changed, 103 insertions(+), 26 deletions(-) + +commit 71ec4c7a6715a40d536d1e4b911dae48d1bba7b9 +Author: Pino Toscano <pino@kde.org> +Date: Sun Oct 17 14:57:43 2010 +0200 + + [CMake] update MacroOptionalFindPackage.cmake from KDE SVN + + no radical changes, just a minor improvement for the "explicitly + disabled" case + + cmake/modules/MacroOptionalFindPackage.cmake | 40 + +++++++++++++++++++------ + 1 files changed, 30 insertions(+), 10 deletions(-) + +commit ab0049d8be5dfe1989c4aa33c2732915c62fecb2 +Author: Pino Toscano <pino@kde.org> +Date: Sun Oct 17 14:29:22 2010 +0200 + + [CMake] Cairo package: make the version check really working + + cmake/modules/FindCairo.cmake | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit 1cea33717c92631ee9c417d9f89e32b03695c75a +Author: Pino Toscano <pino@kde.org> +Date: Sun Oct 17 13:55:58 2010 +0200 + + [CMake] Bump cairo dependency to 1.10 + + followup of fc9b85894754d175af916eaf6cb127efd601df7e + + CMakeLists.txt | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit d6f49aa2da15cd2e9cf775d6b1d2d04a005c8cdd +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 17 14:22:57 2010 +0200 + + [cairo] Fix a crash when redering documents with invalid type 3 fonts + + poppler/CairoFontEngine.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e2fad550c3cbf86541730582151e1bb6470ed9c1 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 17 13:47:33 2010 +0200 + + [glib-demo] Use poppler_page_get_selected_region() in selections demo + + glib/demo/selections.c | 73 + ++++++++++++++--------------------------------- + 1 files changed, 22 insertions(+), 51 deletions(-) + +commit 88013458e141de58ed801480707ae0dfe92b9aa2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 17 13:46:26 2010 +0200 + + [glib] Add poppler_page_get_selected_region() + + that returns a cairo_region_t, and deprecate + poppler_page_get_selection_region(). + + glib/poppler-page.cc | 81 + +++++++++++++++++++++++++++++++++++ + glib/poppler-page.h | 4 ++ + glib/reference/poppler-sections.txt | 1 + + 3 files changed, 86 insertions(+), 0 deletions(-) + +commit fc9b85894754d175af916eaf6cb127efd601df7e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 17 12:54:18 2010 +0200 + + [configure] Bump cairo dependency to 1.10 + + configure.ac | 2 +- + poppler/CairoOutputDev.cc | 4 ---- + 2 files changed, 1 insertions(+), 5 deletions(-) + +commit dd14ef6b211ac1c8a4f16bb6094dbfd6a09cbef9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Oct 17 12:46:55 2010 +0100 + + Improve dict lookup speed for big dicts + + Based on a patch by Paweł Wiejacha <pawel.wiejacha@gmail.com> + + poppler/Dict.cc | 98 + +++++++++++++++++++++++++++++++++++++++++++----------- + poppler/Dict.h | 2 + + 2 files changed, 80 insertions(+), 20 deletions(-) + +commit bb38a0c71434413f2728109c73278de1b8a58571 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 17 12:52:01 2010 +0200 + + [glib-demo] Make glib demo program installable + + It's a useful tool for testing and debugging not only for people who + install from sources. + + glib/demo/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit d26d0fab2ddfff853f6681a3518813a2d65a4112 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 17 12:36:46 2010 +0200 + + [glib-demo] Use printing options in print demo + + glib/demo/print.c | 96 + +++++++++++++++++++++++++++++++++++++++++++++++++++-- + 1 files changed, 93 insertions(+), 3 deletions(-) + +commit 4a71dcdd350d0c0515ca349f0b875b33289d25ee +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 17 12:31:41 2010 +0200 + + [glib] Add poppler_page_render_for_printing_with_options() + + It allows to print with the same options acroread has: + + - Print document + - Print document and markup + - Print document and stamps + + glib/poppler-page.cc | 77 + ++++++++++++++++++++++++++++++---- + glib/poppler-page.h | 3 + + glib/poppler.h | 19 +++++++++ + glib/reference/poppler-sections.txt | 4 ++ + 4 files changed, 94 insertions(+), 9 deletions(-) + +commit 0b3b2ebc3930bd46fb13fb2158fc695b0962f7c5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 16 15:09:05 2010 +0100 + + Add a callback to know which page has been printed + + qt4/src/poppler-ps-converter.cc | 16 ++++++++++++++-- + qt4/src/poppler-qt4.h | 10 ++++++++++ + 2 files changed, 24 insertions(+), 2 deletions(-) + +commit 4bd25223c4d15dfa91965a6e86eaa444a5a81f71 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 16 15:08:05 2010 +0100 + + Do not omit this character + + Mimics Cairo backend and Adode Reader behaviour + + splash/SplashFTFont.cc | 4 ---- + 1 files changed, 0 insertions(+), 4 deletions(-) + +commit b604a008a2a379a21e5fdfa0799886f80d893a08 +Author: Christian Feuersänger <cfeuersaenger@googlemail.com> +Date: Thu Oct 14 23:56:36 2010 +0100 + + Improve rendering of Shading Type 6 and 7 + + poppler/Gfx.cc | 212 + +++++++++++++++++++++++++++++++++++++++++---------- + poppler/Gfx.h | 9 ++- + poppler/GfxState.cc | 96 +++++++++++++++++++++++- + poppler/GfxState.h | 127 ++++++++++++++++++++++++++++++- + 4 files changed, 397 insertions(+), 47 deletions(-) + +commit c6bb63b31c268e4e842532e6839b15edb31cf25c +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Oct 14 23:33:13 2010 +0100 + + Only clip boxes to mediabox if we are at the page level + + Fixes bug 30784 + + poppler/Page.cc | 19 +++++++++++-------- + 1 files changed, 11 insertions(+), 8 deletions(-) + +commit 4a248b3f523209ec16ace587229412653b2276d0 +Author: Pino Toscano <pino@kde.org> +Date: Thu Oct 14 18:32:05 2010 +0200 + + [cpp] make it compile also when there are no image formats available + + including the ImgWirter.h is enough to get the definition of ImgWriter + + cpp/poppler-image.cpp | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit de1501d87549269f9214c9e3fba4cbf39960826e +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Oct 13 19:18:36 2010 +0100 + + remove windows eol + + poppler/Gfx.cc | 38 +++++++++++++++++++------------------- + 1 files changed, 19 insertions(+), 19 deletions(-) + +commit 12e68b49feef10b654944dd71eab0852cfeceb89 +Author: Pino Toscano <pino@kde.org> +Date: Sun Oct 10 23:04:57 2010 +0200 + + [cpp] Add a new 'image' class. + + This implicitely shared class represents the data buffer of an + "image", + with direct access to the data. + It also has a function to save to file (png/jpeg). + + Still a FIXME in the copy() method and in the save() (for mono + images only). + + cpp/CMakeLists.txt | 2 + + cpp/Makefile.am | 3 + + cpp/poppler-image-private.h | 48 +++++ + cpp/poppler-image.cpp | 431 + +++++++++++++++++++++++++++++++++++++++++++ + cpp/poppler-image.h | 70 +++++++ + 5 files changed, 554 insertions(+), 0 deletions(-) + +commit db31687ba476e272b72625a8a78b50780522ee7d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Oct 9 10:33:06 2010 +0200 + + [glib] docs: Document poppler_annot_markup_get_date() + + glib/poppler-annot.cc | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit a7cf8d322a4a687c9810a577cc92ff6b9725ecdc +Author: Fernando Herrera <fherrera@onirica.com> +Date: Thu Oct 7 17:28:31 2010 +0200 + + [glib] Fix introspection annotations for poppler_document_get_page*() + + Return value should be transfer full since the caller owns the only + reference. + + glib/poppler-document.cc | 6 ++---- + 1 files changed, 2 insertions(+), 4 deletions(-) + +commit d690bea929553d1a4392d42d949843e9467ba8cb +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Oct 5 22:18:22 2010 +0100 + + Make sure obj is a num before reading it + + Not sure if using a 0 is correct otherwise, but if your matrix is + broken you're probably going to get a wrong rendering anyway, so who + cares. Bug #30590 + + poppler/Gfx.cc | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +commit b17be2bc32cf71bac0473bf4ac16359e3027b4fc +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 3 12:14:11 2010 +0200 + + [annots] Fix a crash when drawing square/circle annots without + a border + + Fixes bug #30580 + + poppler/Annot.cc | 121 + +++++++++++++++++++++++++++--------------------------- + 1 files changed, 61 insertions(+), 60 deletions(-) + +commit e3d3944c1988343704e3ba3a5d60609719466afb +Author: Tomas Hoger <thoger@redhat.com> +Date: Wed Sep 29 20:03:45 2010 +0100 + + Fix uninitialized uses on DCTScanInfo + + poppler/Stream.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit f380647f09d88339c936184bbe86c70c0d47de4b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 29 20:02:10 2010 +0100 + + Free names + + poppler/Catalog.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit aa0fd32a8501473832bce1b8b804dd3f9a45735b +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 27 22:39:09 2010 +0100 + + Consider render value when colorizing text + + Fixes bug 2807 + + poppler/CairoOutputDev.cc | 18 +++--------------- + poppler/CairoOutputDev.h | 2 -- + poppler/Gfx.cc | 21 +++++++++++++++++---- + poppler/PSOutputDev.cc | 26 ++++++++++---------------- + poppler/PSOutputDev.h | 3 +-- + poppler/SplashOutputDev.cc | 18 +++--------------- + poppler/SplashOutputDev.h | 4 +--- + 7 files changed, 35 insertions(+), 57 deletions(-) + +commit cf710b999b510203e9348ea9f04360be1fe957b8 +Author: Pino Toscano <pino@kde.org> +Date: Fri Sep 24 00:50:37 2010 +0200 + + [Qt4] enable the generation of the QCH file + + ... usable in Qt Assistant + + qt4/src/Doxyfile | 14 +++++++------- + 1 files changed, 7 insertions(+), 7 deletions(-) + +commit be6d933071c9ab043f01f374a884472c4ce3007e +Author: Pino Toscano <pino@kde.org> +Date: Thu Sep 23 15:55:45 2010 +0200 + + update Doxyfile's for qt4 and cpp + + no changes in the actual configuration values + + cpp/Doxyfile | 155 +++++-- + qt4/src/Doxyfile | 1469 + +++++++++++++++++++++++++++++++++--------------------- + 2 files changed, 1018 insertions(+), 606 deletions(-) + +commit 721da3d542ab9b234b058f3c14ea9303d748107e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Sep 23 14:09:11 2010 +0200 + + [glib] Use g_memdup instead of g_strdup in poppler_document_get_id() + + Ids are not null-terminated strings, but fixed size byte arrays. + + glib/demo/info.cc | 8 ++++++-- + glib/poppler-document.cc | 33 ++++++++++++++------------------- + 2 files changed, 20 insertions(+), 21 deletions(-) + +commit 4ffc0ed73397e4e58f04c3577b093a3fd39c22bd +Author: Pino Toscano <pino@kde.org> +Date: Thu Sep 23 02:21:12 2010 +0200 + + [cpp] small clarification in document::load_from_data() apidox + + cpp/poppler-document.cpp | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 9491dc4a10706109d0f2b4d15f21b9a1db51d8c9 +Author: Pino Toscano <pino@kde.org> +Date: Thu Sep 23 02:18:07 2010 +0200 + + [cpp] add document::load_from_raw_data() + + ... to be able to load a document from an external data buffer, + with no need to copy the data. + + add as well a new document_private constructor to handle the new + situation, + and make sure to properly use the raw data when unlocking the document + + cpp/poppler-document-private.h | 5 ++++ + cpp/poppler-document.cpp | 53 + ++++++++++++++++++++++++++++++++++++++++ + cpp/poppler-document.h | 4 +++ + 3 files changed, 62 insertions(+), 0 deletions(-) + +commit a3c1f2d5ea1de969e9aaaa84ee38866938b4ce0c +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 22 20:14:27 2010 +0100 + + fix copyright + + poppler/Form.cc | 1 + + poppler/Form.h | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit 1aad013e353a9e59bdab8a1b4ce93f2ad7aaf4f2 +Author: Pino Toscano <pino@kde.org> +Date: Wed Sep 22 17:07:38 2010 +0200 + + update copyrights + + cpp/poppler-document.h | 2 +- + cpp/poppler-page-transition.cpp | 2 +- + cpp/poppler-private.cpp | 2 +- + cpp/poppler-rectangle.cpp | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +commit 2d6d66ebe0215df66e33cb5974c58c324fab50b6 +Author: Pino Toscano <pino@kde.org> +Date: Wed Sep 22 17:07:13 2010 +0200 + + [cpp/tests] poppler-dump: show the PDF IDs, if available + + cpp/tests/poppler-dump.cpp | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit e39fde1b62544b90e73a2fc3609a260991db3a47 +Author: Pino Toscano <pino@kde.org> +Date: Wed Sep 22 16:52:08 2010 +0200 + + [cpp] add document::get_pdf_id() + + ... to get the IDs of a PDF document, if present. + + cpp/poppler-document.cpp | 29 +++++++++++++++++++++++++++++ + cpp/poppler-document.h | 1 + + 2 files changed, 30 insertions(+), 0 deletions(-) + +commit 299a1849a148fa0a7b3171c45ec68b9901aa93bb +Author: Pino Toscano <pino@kde.org> +Date: Wed Sep 22 16:36:30 2010 +0200 + + [Qt4] add Document::getPdfId() + + ... to get the IDs of a PDF document, if present. + + also, add two test cases for it in the metadata unit test + + qt4/src/poppler-document.cc | 16 +++++++++++++ + qt4/src/poppler-qt4.h | 14 +++++++++++ + qt4/tests/check_metadata.cpp | 50 + ++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 80 insertions(+), 0 deletions(-) + +commit dd9bcdb720ac1bf8a022635bcbb3b56e4b75bb15 +Author: Pino Toscano <pino@kde.org> +Date: Wed Sep 22 16:29:46 2010 +0200 + + Make the internal get_id() not fail because of null bytes in the ID. + + Passing the const char* of the byte string to convert is not enough + if its length must be checked, + as it might fail when the string of the ID contains null bytes. + Instead, pass the original GooString so its size is properly checked. + + Also, remove an hardcoded 16 and make it dependent on pdfIdLength, + as used elsewhere in get_id() function. + + poppler/PDFDoc.cc | 11 ++++++----- + 1 files changed, 6 insertions(+), 5 deletions(-) + +commit 9554cbc3cb4fc0cd7ad2295f5d27a18e030c6aee +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Sep 22 12:54:25 2010 +0200 + + [glib-demo] Show form field names in forms demo + + glib/demo/forms.c | 26 ++++++++++++++++++++------ + 1 files changed, 20 insertions(+), 6 deletions(-) + +commit 257634b26b682628dba5ee5f94cb0bad030bcb4f +Author: Mark Riedesel <mark@klowner.com> +Date: Wed Sep 22 12:52:49 2010 +0200 + + [glib] Add methods to get mapping, partial an fully qualified form + field names + + See bug #28780. + + glib/poppler-form-field.cc | 68 + +++++++++++++++++++++++++++++++++++ + glib/poppler-form-field.h | 3 ++ + glib/reference/poppler-sections.txt | 3 ++ + 3 files changed, 74 insertions(+), 0 deletions(-) + +commit 6db98abc59c154dcb18d69fc37e44ce804c3ccc9 +Author: Mark Riedesel <mark@klowner.com> +Date: Wed Sep 22 12:41:16 2010 +0200 + + Add getLabel method to FormWidget + + See bug #28780. + + poppler/Form.cc | 64 + +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Form.h | 8 +++++++ + 2 files changed, 72 insertions(+), 0 deletions(-) + +commit bcdca66fd57439735e0b9aa182ab7cfce29e9ed0 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Sep 21 11:49:37 2010 +0200 + + [glib] Fix minimum value of creation and modification date properties + + It should be -1 which means there's no date specified + + glib/poppler-document.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit d2578bd66129466b2dd114b6407c147598e09d2b +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 21 19:19:27 2010 +0100 + + Avoid loops in Form::fieldLookup + + Fixes crash in broken pdf provided by Joel Voss of Leviathan + Security Group + + poppler/Dict.h | 3 +++ + poppler/Form.cc | 27 ++++++++++++++++++++++++--- + 2 files changed, 27 insertions(+), 3 deletions(-) + +commit 2fe825deac055be82b220d0127169cb3d61387a8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 21 19:15:25 2010 +0100 + + Make sure obj1 is a num before reading it + + Fixes crash in broken pdf provided by Joel Voss of Leviathan + Security Group + + poppler/Gfx.cc | 20 ++++++++++++++++---- + 1 files changed, 16 insertions(+), 4 deletions(-) + +commit 473de6f88a055bb03470b4af5fa584be8cb5fda4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 21 19:11:42 2010 +0100 + + Fix memory leak if obj2 is not a dict + + Found thanks to PDF provided by Joel Voss of Leviathan Security Group + + poppler/Form.cc | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit 9706e28657ff7ea52aa69d9efb3f91d0cfaee70b +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 21 19:09:37 2010 +0100 + + Fix crash when idx is out of range + + Found thanks to PDF provided by Joel Voss of Leviathan Security Group + + poppler/Function.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 26a5817ffec9f05ac63db6c5cd5b1f0871d271c7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 21 19:08:54 2010 +0100 + + Fix crash when idx is out of range + + Fixes crash in broken pdf provided by Joel Voss of Leviathan + Security Group + + poppler/Function.cc | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +commit dfdf3602bde47d1be7788a44722c258bfa0c6d6e +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 21 19:07:12 2010 +0100 + + Give a value to color.c[i] + + Might not be the better solution but it's better than having a random + value there + + Found thanks to PDF provided by Joel Voss of Leviathan Security Group + + poppler/Gfx.cc | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +commit 01c85c08305bae16242f5979ab107fa5bb5f5100 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 21 19:04:37 2010 +0100 + + Forgot my (C) here + + poppler/Decrypt.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit bf2055088a3a2d3bb3d3c37d464954ec1a25771f +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 21 19:03:19 2010 +0100 + + Properly initialize stack + + Fixes crash in broken pdf provided by Joel Voss of Leviathan + Security Group + + poppler/Function.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit e853106b58d6b4b0467dbd6436c9bb1cfbd372cf +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 21 19:01:36 2010 +0100 + + Properly initialize parser + + Fixes crash in broken pdf provided by Joel Voss of Leviathan + Security Group + + poppler/Gfx.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 3422638b2a39cbdd33a114a7d7debc0a5f688501 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 21 18:58:43 2010 +0100 + + Fix crash in broken pdf (parser->getStream() is 0) + + Found thanks to PDF provided by Joel Voss of Leviathan Security Group + + poppler/Gfx.cc | 9 +++++++-- + 1 files changed, 7 insertions(+), 2 deletions(-) + +commit a2dab0238a69240dad08eca2083110b52ce488b7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 21 18:55:51 2010 +0100 + + Initialize properly charactersRead + + It is possible that there are calls to getPos before reset + Found thanks to PDF provided by Joel Voss of Leviathan Security Group + + poppler/Decrypt.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 39d140bfc0b8239bdd96d6a55842034ae5c05473 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 21 18:54:31 2010 +0100 + + Fix crash in broken pdf (code < 0) + + Found thanks to PDF provided by Joel Voss of Leviathan Security Group + + fofi/FoFiType1.cc | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit c6a091512745771894b54a71613fd6b5ca1adcb3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 21 18:50:25 2010 +0100 + + Fix memory leak + + Found thanks to PDF provided by Joel Voss of Leviathan Security Group + + poppler/Stream.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 9b6ddb68b80ef19cd2615900bd24da76374003d9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 20 19:47:47 2010 +0100 + + Fix copyright + + poppler/PDFDoc.cc | 1 + + poppler/PDFDoc.h | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit fa3abc23656204eedd022ee1c73d9e5af758cdac +Author: Pino Toscano <pino@kde.org> +Date: Fri Sep 17 22:20:09 2010 +0200 + + [cpp] More bits of API documentation. + + cpp/poppler-global.cpp | 124 + +++++++++++++++++++++++++++++++++++++++ + cpp/poppler-page-transition.cpp | 32 ++++++++++ + cpp/poppler-rectangle.cpp | 19 ++++++ + 3 files changed, 175 insertions(+), 0 deletions(-) + +commit c5f7b5becc9993c05b67a470d5a1e431806b98d6 +Author: Pino Toscano <pino@kde.org> +Date: Fri Sep 17 20:26:37 2010 +0200 + + update copyrights + + qt4/src/poppler-private.cc | 2 +- + qt4/tests/check_strings.cpp | 18 ++++++++++++++++++ + 2 files changed, 19 insertions(+), 1 deletions(-) + +commit ae517042570327b860c1db6b68f9697d5c104657 +Author: Pino Toscano <pino@kde.org> +Date: Fri Sep 17 19:39:10 2010 +0200 + + [cpp] improve a bit the Unicode* -> ustring conversion + + (although IMHO not yet solved) + + cpp/poppler-private.cpp | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit f4c6ef88f01f6763943a3e6e006e52dbea0b149c +Author: Pino Toscano <pino@kde.org> +Date: Fri Sep 17 16:07:05 2010 +0200 + + [Qt4/tests] check_strings: add a new test case for + QStringToUnicodeGooString + + not much test data at the moment though + + qt4/tests/check_strings.cpp | 37 +++++++++++++++++++++++++++++++++++++ + 1 files changed, 37 insertions(+), 0 deletions(-) + +commit ffd227b7669895325d752009d5185973cf86ce5b +Author: Pino Toscano <pino@kde.org> +Date: Fri Sep 17 14:25:57 2010 +0200 + + [Qt4] optimize UnicodeParsedString using less memory from QString + + - reserve() the right number of chars in the result string, so there + is less possibility to make it gr + ow its buffer + - do not call unicodeToQString() just to create a 1 character string, + but directly append a QChar crea + ted with the resulting unicode value (always belonging to the BMP) + + this should reduce of a very little bit the memory usage, while give + a sensible speedup of UnicodeParsedString invocations + + qt4/src/poppler-private.cc | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit 6180890008f2b1814f092f50b8f75376399905ba +Author: Pino Toscano <pino@kde.org> +Date: Fri Sep 17 13:23:25 2010 +0200 + + [Qt4/tests] check_strings: add a test case for UnicodeParsedString + + very simple test data for it, at the moment + + qt4/tests/check_strings.cpp | 48 + +++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 48 insertions(+), 0 deletions(-) + +commit c5f78d7d3953d62a746c6f5a90085ea020fe5ec7 +Author: Pino Toscano <pino@kde.org> +Date: Fri Sep 17 12:54:32 2010 +0200 + + [Qt4/tests] check_string: use a pool of GooString + + this way we can reuse the GooString in a data set even after a test + run (eg in benchmarks), + making sure they all are properly freed + + qt4/tests/check_strings.cpp | 35 ++++++++++++++++++++++++++++++----- + 1 files changed, 30 insertions(+), 5 deletions(-) + +commit 0cd5a256bdf7778c0c720941a611ad8ab56fa2e9 +Author: Pino Toscano <pino@kde.org> +Date: Fri Sep 17 00:27:53 2010 +0200 + + [Qt4/tests] first version of a unit test for strings + + this is used for testing the various string conversions: + - unicodeToQString + - UnicodeParsedString + - QStringToUnicodeGooString + - QStringToGooString + the 1st and the 4th have basic tests + + given private symbols are used, this unit test is not compiled on + windows (at least, it supposed to be so) + + qt4/tests/CMakeLists.txt | 3 + + qt4/tests/Makefile.am | 7 +++- + qt4/tests/check_strings.cpp | 101 + +++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 110 insertions(+), 1 deletions(-) + +commit c6e8b21c9829672e6ca42e6cdc0ca631a06af73f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Sep 17 13:44:38 2010 +0200 + + [glib] docs: Document PopplerDocument properties + + glib/poppler-document.cc | 380 + +++++++++++++++++++++++++++------------------- + 1 files changed, 223 insertions(+), 157 deletions(-) + +commit d4a6c17255821925906c17b79b88eebed9edfee1 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Sep 17 13:04:33 2010 +0200 + + [glib] Add accessor for all PopplerDocument properties + + PopplerDocument:linearized is now a boolean value rather than string, + so this commit breaks the API again. + + glib/demo/info.cc | 8 +- + glib/poppler-document.cc | 532 + ++++++++++++++++++++++++++++------- + glib/poppler-document.h | 74 +++-- + glib/reference/poppler-sections.txt | 16 + + 4 files changed, 498 insertions(+), 132 deletions(-) + +commit a5fec843dbb40fdd2007b926405b96789b21496d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Sep 17 10:38:14 2010 +0200 + + [glib-demo] Show permanent/update ID in document info demo + + glib/demo/info.cc | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit bfaf8f3cc62f28c6255d42680b9464ab9973737e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Sep 17 10:37:32 2010 +0200 + + [glib] Add poppler_document_get_id() to get the PDF file identifier + + glib/poppler-document.cc | 52 + +++++++++++++++++++++++++++++++++++ + glib/poppler-document.h | 3 ++ + glib/reference/poppler-sections.txt | 1 + + 3 files changed, 56 insertions(+), 0 deletions(-) + +commit b15641677447b2e89853a667fc34bcca1383a97a +Author: srinivas adicherla <srinivas.adicherla@gmail.com> +Date: Fri Sep 17 10:36:22 2010 +0200 + + Add a method to get the PDF file identifier + + poppler/PDFDoc.cc | 65 + +++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/PDFDoc.h | 3 ++ + 2 files changed, 68 insertions(+), 0 deletions(-) + +commit 3b4a901a4431814590449b6cd5ea418f4d6c1172 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Sep 16 23:23:03 2010 +0100 + + Add -s option + + Writes a single html file + Since git does not allow multiple authors i'm adding them here + OSSD CDAC Mumbai by Leena Chourey (leenac@cdacmumbai.in) and Onkar + Potdar (onkar@cdacmumbai.in) + + utils/HtmlFonts.cc | 11 +++++- + utils/HtmlFonts.h | 18 +++++++++- + utils/HtmlOutputDev.cc | 84 + ++++++++++++++++++++++++++++++----------------- + utils/pdftohtml.1 | 3 ++ + utils/pdftohtml.cc | 15 +++++++-- + 5 files changed, 93 insertions(+), 38 deletions(-) + +commit 2792330f6caeeb42e2996271456b562489215c4c +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 15 22:42:09 2010 +0100 + + new soversions + + CMakeLists.txt | 2 +- + cpp/CMakeLists.txt | 2 +- + cpp/Makefile.am | 2 +- + glib/CMakeLists.txt | 2 +- + glib/Makefile.am | 4 ++-- + poppler/Makefile.am | 2 +- + qt4/src/CMakeLists.txt | 2 +- + qt4/src/Makefile.am | 2 +- + 8 files changed, 9 insertions(+), 9 deletions(-) + +commit 1cf56c732b63d0a310bc45b8e4b3f3f357a42cb1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 15 20:56:42 2010 +0100 + + 0.15.0 in the versions + + CMakeLists.txt | 2 +- + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + qt4/src/Doxyfile | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +commit 4ec0be498b557c3cf631e43823c6d7004304dff3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 15 20:56:34 2010 +0100 + + 0.15.0 NEWS + + NEWS | 90 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 90 insertions(+), 0 deletions(-) + +commit c01a17745c04aef3e6f2225679c867a03e731e83 +Author: Pino Toscano <pino@kde.org> +Date: Thu Sep 16 20:55:56 2010 +0200 + + [CMake] disable the GObject introspection system + + it cannot complete the scanning propecure correctly without libtool + it seems + + CMakeLists.txt | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 9be7d3143b12f291409f88f3d725a239934b205e +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 15 19:19:30 2010 +0100 + + update copyright + + poppler/OptionalContent.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b9333529bba43a71655fdbf1919ba515f7df9ca3 +Author: Pino Toscano <pino@kde.org> +Date: Wed Sep 15 17:23:54 2010 +0200 + + [cpp/tests] poppler-dump: convert out_ustring() to an + operator<<(std::ostream&) + + so we have a chance to better output the bytearray of a string to + the stream + + cpp/tests/poppler-dump.cpp | 26 ++++++++++++++++++-------- + 1 files changed, 18 insertions(+), 8 deletions(-) + +commit a44f711b4412332875337e9fb7509f18db806ddc +Author: Pino Toscano <pino@kde.org> +Date: Wed Sep 15 16:44:30 2010 +0200 + + [cpp/tests] poppler-dump: add a "--show-text <physical|raw>" option + + ... to show the text of a page in the specified layout + + cpp/tests/poppler-dump.cpp | 29 +++++++++++++++++++++++++++++ + 1 files changed, 29 insertions(+), 0 deletions(-) + +commit 0094c9372b5b439af2564d83d6fb7439f4bdba88 +Author: Pino Toscano <pino@kde.org> +Date: Wed Sep 15 13:19:13 2010 +0200 + + [cpp] add a new page::text() for specifying a layout mode + + add a new text_layout_enum enum for the layout mode, used by the + new text() + make the old text() implementation call the new one with the old value + (= physical) + add & adapt the apidox accordingly + + cpp/poppler-page.cpp | 27 +++++++++++++++++++++++++-- + cpp/poppler-page.h | 5 +++++ + 2 files changed, 30 insertions(+), 2 deletions(-) + +commit 4ec3e7784cdba5c0720b1992ba500e97a7e0ed2b +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Sep 15 11:24:07 2010 +0200 + + Set initial state of optional content groups based on BaseState field + + There's a test case using BaseState attached to bug #30106 + + poppler/OptionalContent.cc | 14 +++++++++----- + 1 files changed, 9 insertions(+), 5 deletions(-) + +commit f49aa86812ed8ad91d41c675bc670b3d88d3444a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Sep 13 14:37:10 2010 +0200 + + [glib] doc: Document PopplerPage:label property + + glib/poppler-page.cc | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit f41fe7ae6e374100574c49d1bb7a3ddc646786c8 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Sep 13 14:36:43 2010 +0200 + + [glib] doc: Add poppler_page_get_label to poppler-sections.txt + + glib/reference/poppler-sections.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 91b8246766a8e5d9cca385b5854667d7967a9d71 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Sep 13 14:22:56 2010 +0200 + + [glib-demo] Use poppler_page_get_label() instead of g_object_get() + + glib/demo/page.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b82412ef86091f4d249c818cebf00e4c59bae311 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Sep 13 14:22:03 2010 +0200 + + [glib] Add poppler_page_get_label() + + It's just an accessor for the property label + + glib/poppler-page.cc | 47 + ++++++++++++++++++++++++++++++++++------------- + glib/poppler-page.h | 1 + + 2 files changed, 35 insertions(+), 13 deletions(-) + +commit ff88abf61f4bf90ad276a8593be1818d39c8ecac +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Sep 13 10:05:45 2010 +0200 + + [glib] Avoid core headers to be parsed by the g-i scanner + + glib/poppler-document.cc | 2 ++ + glib/poppler-page.cc | 2 ++ + glib/poppler-private.h | 3 +++ + 3 files changed, 7 insertions(+), 0 deletions(-) + +commit 53324502898ae5fbbb21a4fb819e4a84acdc1a64 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Sep 12 11:42:03 2010 +0200 + + [glib] Fix a crash when building layer actions + + Some layers are just the parent of others, but not actually a layer so + they don't have an optional content object. Fixes bug #30106. + + glib/poppler-action.cc | 15 +++++++++------ + 1 files changed, 9 insertions(+), 6 deletions(-) + +commit dfc6ea7877635212aa7c5f7ade07af4aa9467e96 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Sep 12 11:36:58 2010 +0200 + + [glib] Fix layers array generation when it contains multiple arrays + + Fixes layers for document attached to bug #30106. + + glib/poppler-document.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 7574912b6c0ff0421c69b6e8c6835957d5126d7d +Author: Jonathan Liu <net147@gmail.com> +Date: Thu Sep 9 20:34:03 2010 +0100 + + Fix checking whether _WIN32 is defined + + Bug 29329 + + poppler/StdinCachedFile.cc | 2 +- + utils/pdftoppm.cc | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 2fc83068c32e09fa3de03a157a420490431ea706 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Sep 5 14:26:27 2010 +0100 + + Increase the number of cached glyphs for small sizes + + Should not increase memory usage much and gives me a 17% speed + increase + in the firefox nytimes advertisment pdf + + splash/SplashFont.cc | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +commit 0d96f74f31171c58a55e4ac36d492ce36dd5e7c5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Sep 5 12:31:57 2010 +0100 + + Use std::sort instead of qsort + + Gives a nice speed improvement without any real code change + Passes regression tests + Based on Paweł Wiejacha patches + + poppler/GfxFont.cc | 17 ++++++-------- + splash/SplashXPath.cc | 48 + +++++++++++++++++++++++++++-------------- + splash/SplashXPathScanner.cc | 10 +++++--- + 3 files changed, 44 insertions(+), 31 deletions(-) + +commit 3b4816b2b8caa0e2baafbe4c0eb1e45e452d01ce +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 1 20:43:35 2010 +0100 + + forgot the file + + qt4/tests/poppler-texts.cpp | 40 + ++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 40 insertions(+), 0 deletions(-) + +commit b0db93c71a83946aa3e02bae6b396223dcca19d1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 1 20:43:14 2010 +0100 + + add since and rename enum + + qt4/src/poppler-page.cc | 2 +- + qt4/src/poppler-qt4.h | 5 ++++- + 2 files changed, 5 insertions(+), 2 deletions(-) + +commit a86f9d90be99a36c41c6932fb4d9a202c4ff6d05 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 1 20:20:48 2010 +0100 + + Clarify the ownership + + qt4/src/poppler-qt4.h | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 33ad3a17ac26879fcd6a7fad2023dd219bc5919f +Author: Suzuki Toshiya <mpsuzuki@hiroshima-u.ac.jp> +Date: Wed Sep 1 20:19:54 2010 +0100 + + Add a way to access the raw text + + poppler/TextOutputDev.cc | 23 ++++++++++++++++++++--- + qt4/src/poppler-page.cc | 11 +++++++++-- + qt4/src/poppler-qt4.h | 19 +++++++++++++++++++ + qt4/tests/CMakeLists.txt | 1 + + qt4/tests/Makefile.am | 7 ++++++- + 5 files changed, 55 insertions(+), 6 deletions(-) + +commit 46e89248b3c5b1789baa3bd9bfa012570720ddb5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 1 19:54:02 2010 +0100 + + quadding is not a GBool but an int + + poppler/Annot.cc | 2 +- + poppler/Annot.h | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit ae79fc504c5424be2fa21dbc5498ced4db6e5dd3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Aug 31 22:14:57 2010 +0100 + + Make GBool a bool instead of an int + + Passes the regression tests and might make things faster and use a bit + less memory + + cpp/tests/CMakeLists.txt | 2 +- + cpp/tests/Makefile.am | 2 +- + goo/gtypes.h | 7 +- + utils/CMakeLists.txt | 2 +- + utils/Makefile.am | 2 +- + utils/parseargs.c | 208 + ---------------------------------------------- + utils/parseargs.cc | 208 + ++++++++++++++++++++++++++++++++++++++++++++++ + 7 files changed, 216 insertions(+), 215 deletions(-) + +commit d3f32f2c4f9f46620c0287c44bef686f340461f3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Aug 31 18:51:17 2010 +0100 + + Read from the correct variable + + Fixes crash on KDE bug 249586 + + poppler/Movie.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 681bb38eafc720b309172ed7c650439c559663a0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Aug 26 23:55:58 2010 +0100 + + Make declaration match what there is in the .cc file + + poppler/TextOutputDev.h | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit c91e869304fc263c52f21ee484a57a6f1900f6b2 +Author: Suzuki Toshiya <mpsuzuki@hiroshima-u.ac.jp> +Date: Thu Aug 26 19:40:46 2010 +0100 + + Add -r option to pdftohtml + + Fixes bug 29551 + + utils/pdftohtml.1 | 3 +++ + utils/pdftohtml.cc | 18 +++++++++++++----- + 2 files changed, 16 insertions(+), 5 deletions(-) + +commit 9b4be586640b4ad344b1b3ed4c9cda8351257f0c +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Aug 25 19:26:30 2010 +0100 + + Use 3 not nComps + + poppler/GfxState.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 218f67c527fb41babf2703ba068d072f8326e37b +Author: Paweł Wiejacha <pawel.wiejacha@gmail.com> +Date: Tue Aug 24 23:47:06 2010 +0100 + + Make SplashOutputDev::imageSrc faster + + By using getRGBLine when possible + + poppler/SplashOutputDev.cc | 39 ++++++++++++++++++++++++++++++--------- + 1 files changed, 30 insertions(+), 9 deletions(-) + +commit 868f4a1f22051b7978f47a0614f23fd66dbb7ca8 +Author: Paweł Wiejacha <pawel.wiejacha@gmail.com> +Date: Tue Aug 24 23:35:21 2010 +0100 + + Make GfxICCBasedColorSpace::getRGBLine faster + + By calling doTransform less + + poppler/GfxState.cc | 15 +++++++-------- + poppler/GfxState.h | 4 +++- + 2 files changed, 10 insertions(+), 9 deletions(-) + +commit 46e37c54c6365cf37dc1e223a3c146e7b96a56af +Author: Paweł Wiejacha <pawel.wiejacha@gmail.com> +Date: Tue Aug 24 21:23:34 2010 +0100 + + Do not call pow three times when one is enough + + poppler/GfxState.cc | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +commit 8591c804598576556c6d24a66b6648de8ed1c4eb +Author: Mike Slegeir <tehpola@yahoo.com> +Date: Sun Aug 22 22:01:03 2010 +0100 + + Use splash instead of external gs invocation to render the background + + Patch in bug 19404, should fix 9746 too + + utils/pdftohtml.1 | 8 ++- + utils/pdftohtml.cc | 210 + +++++++++++++++++++++++++++++++++++++--------------- + 2 files changed, 158 insertions(+), 60 deletions(-) + +commit 7fc3c21a8c5d6cf8517100427b182887a9569ed0 +Author: Ilya Gorenbein <igorenbein@finjan.com> +Date: Fri Aug 20 20:24:31 2010 +0100 + + Fix failure to parse PDF with damaged internal structure + + Patch in bug 29189, fixes bug 3870 + + poppler/PDFDoc.cc | 24 ++++++++++++--- + poppler/XRef.cc | 80 + ++++++++++++++++++++++++++++++---------------------- + poppler/XRef.h | 5 ++- + 3 files changed, 68 insertions(+), 41 deletions(-) + +commit bedf48d4397ae412a6d28fc8fea16cc23a29f07c +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Aug 17 22:02:59 2010 +0100 + + use memset instead of a for + + splash/Splash.cc | 4 +--- + 1 files changed, 1 insertions(+), 3 deletions(-) + +commit 03ca5b4a5c9964d9c0e9913eb2061692848c4b95 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Aug 10 19:55:31 2010 +0100 + + Update copyrights + + goo/GooTimer.cc | 1 + + goo/GooTimer.h | 1 + + goo/gfile.cc | 2 +- + poppler/DCTStream.cc | 1 + + poppler/DCTStream.h | 1 + + poppler/GfxState.cc | 2 +- + poppler/Page.cc | 2 +- + qt4/src/poppler-annotation.cc | 2 +- + 8 files changed, 8 insertions(+), 4 deletions(-) + +commit 3bca8ddc10bf4291bf0c0e39c67341a05953e949 +Author: Jonathan Liu <net147@gmail.com> +Date: Tue Aug 10 19:42:40 2010 +0100 + + Tell windows we are writing/reading binary data + + Bug #29329 + + poppler/StdinCachedFile.cc | 9 +++++++++ + utils/pdftoppm.cc | 9 +++++++++ + 2 files changed, 18 insertions(+), 0 deletions(-) + +commit bdd617f2177a7836f6b6686fde892664513a32a7 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Aug 3 13:05:26 2010 +0200 + + [glib] Fix a crash when a layer doesn't have a name + + Fixes bug #28842. + + glib/poppler-layer.cc | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit e9f0646ca664cc27825f7e084f8419fe0de1fcfc +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Aug 3 13:02:52 2010 +0200 + + Catalog page array might contain NULL for some pages in invalid + documents + + Fixes a crash reproducible with gtk-splash-test when opening document + attached to bug #28842. + + poppler/PDFDoc.cc | 27 +++++++++++++++------------ + 1 files changed, 15 insertions(+), 12 deletions(-) + +commit 842209782ca3ba8c1c783cccf565372a18b3fda5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 30 19:29:12 2010 +0100 + + Do not crash when using pdftops in some files + + Fixes crash in file in kde bug 246269. The output is still wrong + though + + fofi/FoFiType1C.cc | 12 +++++++----- + 1 files changed, 7 insertions(+), 5 deletions(-) + +commit 0dd7c80b7baf2622eb4780a867c4dc6291773f3b +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jul 26 23:58:26 2010 +0100 + + Do not overwrite the rgb values + + Recommended by Koji Otani in Re: [poppler] Question about code + Passed the regression testing in my files + + poppler/GfxState.cc | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 627edf88c8f5c073a68bd05990df56e1af547292 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jul 25 13:56:03 2010 +0200 + + [annots] Fix a crash when adding a new annotation and annots object + is an array + + When annots object is an array instead of a ref, the modified + object is + actually de page object. + + poppler/Page.cc | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit 5d86f9b600b1e10de93bcaf1b925fadbc2a47522 +Author: mpsuzuki <mpsuzuki@hiroshima-u.ac.jp> +Date: Sat Jul 24 15:12:05 2010 +0100 + + reindent correctly + + poppler/TextOutputDev.cc | 34 +++++++++++++++++----------------- + 1 files changed, 17 insertions(+), 17 deletions(-) + +commit d0a6f9abdab88ec43004b6766337db304cbf6a25 +Author: Pino Toscano <pino@kde.org> +Date: Thu Jul 22 21:28:55 2010 +0200 + + [CMake] improve the way include dirs and cflags for gdk and gtk + are set + + correctly include_directories() for the include dirs, while add the + cflags which are not include dirs as definitions + + glib/CMakeLists.txt | 5 +++-- + glib/demo/CMakeLists.txt | 5 ++++- + 2 files changed, 7 insertions(+), 3 deletions(-) + +commit 02d85dd2cc154dbb6caa04a349532033d833edd1 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jul 20 13:53:56 2010 +0200 + + [glib-demo] Add support for adding annots in annot demo + + glib/demo/annots.c | 114 + ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 114 insertions(+), 0 deletions(-) + +commit 969cb850f5c2bc31de82c591b2b3210b5cfabf5f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jul 20 13:53:29 2010 +0200 + + [glib] docs: Add new symbols to poppler-sections.txt + + glib/reference/poppler-sections.txt | 18 ++++++++++++++++++ + 1 files changed, 18 insertions(+), 0 deletions(-) + +commit 251959438b6257fe71ed58e79eec60cda68a66cf +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jul 20 13:53:00 2010 +0200 + + [glib] Add poppler_page_add_annot() + + glib/poppler-document.cc | 7 ++++--- + glib/poppler-page.cc | 19 +++++++++++++++++++ + glib/poppler-page.h | 2 ++ + 3 files changed, 25 insertions(+), 3 deletions(-) + +commit 78a4f6976e708f2cc23aac49fbff0faf00e74bc3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jul 20 13:51:16 2010 +0200 + + [glib] annots: Add several setter methods + + glib/poppler-annot.cc | 278 + +++++++++++++++++++++++++++++++++++++++++++----- + glib/poppler-annot.h | 26 +++++ + glib/poppler-private.h | 6 + + 3 files changed, 285 insertions(+), 25 deletions(-) + +commit fee488c9db60ab691ce9ff5eef284be2af897aee +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jul 18 11:26:59 2010 +0200 + + [annots] Add AnnotMarkup::setOpacity + + poppler/Annot.cc | 8 ++++++++ + poppler/Annot.h | 1 + + 2 files changed, 9 insertions(+), 0 deletions(-) + +commit d15a355ede2d8510c4df847ea0b92b5357b29914 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jul 18 09:57:35 2010 +0200 + + Set the page reference (P in annot dict) when adding a new annot to + a page + + poppler/Annot.cc | 9 +++++++++ + poppler/Annot.h | 3 +++ + poppler/Page.cc | 2 ++ + 3 files changed, 14 insertions(+), 0 deletions(-) + +commit 49ffb46db3118db874d2d9830bb034762d625c61 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jul 19 16:31:54 2010 +0100 + + Remove exception support + + We don't use it and don't even support it properly + + CMakeLists.txt | 1 - + config.h.cmake | 3 -- + configure.ac | 4 --- + goo/gmem.cc | 56 + +++++++++++---------------------------- + goo/gmem.h | 38 ++++++++------------------- + poppler/poppler-config.h.cmake | 5 --- + poppler/poppler-config.h.in | 5 --- + 7 files changed, 27 insertions(+), 85 deletions(-) + +commit dd2e9399868e3dbf2fa4ede050f8d74d29ebbbb4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jul 19 16:31:43 2010 +0100 + + add uninstalled.pc to ignore + + .gitignore | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +commit d1033006aae381a0f075e02d54638a1af997caf3 +Author: Pino Toscano <pino@kde.org> +Date: Sat Jul 17 21:46:14 2010 +0200 + + add FindGObjectIntrospection.cmake and + GObjectIntrospectionMacros.cmake to the dist + + Makefile.am | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit ce8d03950736cc35d035a44a7d88e5f2a9defa74 +Author: Pino Toscano <pino@kde.org> +Date: Sat Jul 17 21:39:08 2010 +0200 + + [CMake/glib] add support for gobject-introspection + + other than a module to find (using pkg-config) gobject-introspection, + this adds a macro (gir_add_introspections) to add new introspections + in a directory. + its working is much similar (even the variable names used) to + the Makefile version provided by gobject-repository itself, with + the notable difference of a disabled libtool in the g-ir-scanner + invocation. + the only additional step needed is adding two custom targets, compiled + by ALL, which have the gir and the typelib files as dependencies, + to make them build with the usual `make all'. + + CMakeLists.txt | 5 +- + cmake/modules/FindGObjectIntrospection.cmake | 61 +++++++++++++++ + cmake/modules/GObjectIntrospectionMacros.cmake | 94 + ++++++++++++++++++++++++ + glib/CMakeLists.txt | 36 +++++++++ + 4 files changed, 194 insertions(+), 2 deletions(-) + +commit 78bf43d8e11aa52db9862af118c597e117d31083 +Author: Pino Toscano <pino@kde.org> +Date: Sat Jul 17 20:28:58 2010 +0200 + + [CMake] properly use the glib2 include dirs + + properly use GLIB2_INCLUDE_DIRS (pkg-config result) for the glib + include dirs, + while turn GLIB2_CFLAGS into GLIB2_CFLAGS_OTHERS to add the remaining + CFLAGS as definitions + + glib/CMakeLists.txt | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 6f3082d677bc62aa3f8124132e3e337c01be2629 +Author: Pino Toscano <pino@kde.org> +Date: Sat Jul 17 19:28:09 2010 +0200 + + [CMake] split the generated sources of poppler_glib_SRCS in an own + poppler_glib_generated_SRCS + + glib/CMakeLists.txt | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit 2a252dd9b05857bbd10dee235e873886fc74ec17 +Author: Pino Toscano <pino@kde.org> +Date: Sat Jul 17 14:57:38 2010 +0200 + + [CMake] add stub message and TODO for the gobject-introspection + support + + CMakeLists.txt | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 8a3d1794a8ef5d525bb454755fec018e3fcb3816 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 16 14:00:32 2010 +0100 + + update + + TODO | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 31ac578942b82cbd16b064abca586ccb89dfa7ce +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 15 15:05:10 2010 +0200 + + Rework ChangeLog generation to fix make distcheck + + Makefile.am | 22 +++++++++++++++++++--- + 1 files changed, 19 insertions(+), 3 deletions(-) + +commit 5da5825ecab63089a19aac694826271019a94e6d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 15 15:03:20 2010 +0200 + + [glib] docs: Add version.xml to content_files var + + glib/reference/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit fe69b474ae63c9d5d2538db9e51e666dd6ea9fb3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jul 15 10:51:21 2010 +0100 + + Fix padding of names + + The previous method returned 2 for documents with 100 pages, which + is wrong as 100 needs 3 + characters, not 2 + + utils/pdftoppm.cc | 14 +++++++++++++- + 1 files changed, 13 insertions(+), 1 deletions(-) + +commit e265ae2d8a46df00ab1bbd863f01f652068d265f +Author: Brian Cameron <brian.cameron@oracle.com> +Date: Wed Jul 14 20:26:25 2010 +0100 + + Add uninstalled .pc file for poppler when using autoconf + + Makefile.am | 9 ++++++++- + configure.ac | 9 ++++++++- + poppler-cairo-uninstalled.pc.in | 6 ++++++ + poppler-cpp-uninstalled.pc.in | 7 +++++++ + poppler-glib-uninstalled.pc.in | 7 +++++++ + poppler-qt-uninstalled.pc.in | 7 +++++++ + poppler-qt4-uninstalled.pc.in | 7 +++++++ + poppler-splash-uninstalled.pc.in | 7 +++++++ + poppler-uninstalled.pc.in | 6 ++++++ + 9 files changed, 63 insertions(+), 2 deletions(-) + +commit 552ab99e60fe4068be8e4e415924e4be289e47cd +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jul 13 10:18:01 2010 +0200 + + Handle ColorTransform in DCT streams when using libjpeg + + Fixes bug #28873. + + poppler/DCTStream.cc | 30 ++++++++++++++++++++++++++++++ + poppler/DCTStream.h | 1 + + 2 files changed, 31 insertions(+), 0 deletions(-) + +commit 8a6697f89625106f3c373dbc7b4dc521e22502f7 +Author: Hib Eris <hib@hiberis.nl> +Date: Sat Jul 3 16:42:04 2010 +0200 + + Only define findModifier() when used + + Prevents a warning when building with win32 font backend. + + poppler/GlobalParams.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b1fdb87a4ebb5079c731256cce1870de8c54c65d +Author: Hib Eris <hib@hiberis.nl> +Date: Fri Jul 2 10:53:20 2010 +0200 + + Fix compile warnings on auto imports for mingw compiler + + cpp/Makefile.am | 2 +- + cpp/tests/Makefile.am | 2 ++ + glib/Makefile.am | 2 ++ + poppler/Makefile.am | 2 +- + qt4/demos/Makefile.am | 2 ++ + qt4/src/Makefile.am | 2 +- + qt4/tests/Makefile.am | 2 ++ + 7 files changed, 11 insertions(+), 3 deletions(-) + +commit 9e577110134eb1e093e697b7504efca759000086 +Author: Hib Eris <hib@hiberis.nl> +Date: Fri Jul 2 10:51:24 2010 +0200 + + Check for declaration of gettimeofday() + + The function gettimeofday() is not declared in ansi mode with the + mingw compiler, even though the function exists. Therefore, + configure must + not only check with AC_CHECK_FUNC, but also with AC_CHECK_DECL. + + Also, the checks must run in a C++ context because that is where + gettimeofday() is used. + + configure.ac | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +commit 58c8430ac584f3ba5e97aceb148e6287bfc45f95 +Author: Hib Eris <hib@hiberis.nl> +Date: Wed Jun 30 15:06:44 2010 +0200 + + Set -ansi compiler flag early in configure.ac + + The -ansi compiler flag does not enable warnings, but turns of certain + features of GCC. To force feature tests to use this flag, it should be + set early in configure.ac + + This is important for the mingw compiler where header files refrain + from declaring certain function (e.g. gettimeofday()) when the -ansi + flag is set. + + configure.ac | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +commit e3663a855a9c86f0a3988a7a50fa40d37d0ea069 +Author: Hib Eris <hib@hiberis.nl> +Date: Fri Jul 2 14:45:15 2010 +0200 + + Use MAX_PATH instead of _MAX_PATH everywhere + + _MAX_PATH is compiler specific and not availble with the mingw + compiler + in ansi mode. MAX_PATH is in the Windows api and thus always available + when windows.h is included. + + goo/gfile.cc | 4 ++-- + poppler/GlobalParams.cc | 2 +- + poppler/PDFDoc.cc | 4 ++-- + 3 files changed, 5 insertions(+), 5 deletions(-) + +commit 7227c407d23a37f5d95e6c01cb7411be2f82ca85 +Author: Hib Eris <hib@hiberis.nl> +Date: Wed Jun 30 16:15:06 2010 +0200 + + Check for _WIN32 instead of _MSC_VER + + goo/GooTimer.cc | 6 +++--- + goo/GooTimer.h | 4 ++-- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit 34e727e011529be312313a1f4d4fa1ba9c545888 +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Jun 29 16:43:31 2010 +0200 + + Fix cross compiling for Windows with autotools + + When cross compiling for Windows with autotools, libtool creates + libpoppler_qt4_la-poppler-optcontent.lo instead of + poppler-optcontent.lo. Thus, explicitly using poppler-optcontent.lo to + create poppler-optcontent.moc does not work well. + + qt4/src/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1bc2f4501ea4e56ca99ae4d94d6cf34cf33c2c7a +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Jun 29 15:34:22 2010 +0200 + + define poppler_qt4_EXPORTS when building with autotools + + Lets you build the qt4 bindings for Windows with automake/autoconf. + + qt4/src/Makefile.am | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 5825114a26cc6eece2e556063f640dda53ea1e11 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jul 11 12:24:20 2010 +0100 + + Compile++ + + glib/demo/CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 5e4d8eeea0b9dba68420c164975418c76a53be85 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jul 10 15:54:28 2010 +0200 + + [pdf-inspector] Do not render for printing + + test/pdf-inspector.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit e6824972a213a888ca0185b7ae0a75fc23f75797 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jul 10 15:52:15 2010 +0200 + + [annots] Use a transparency group for markup annots without AP and + opacity != 1 + + Fixes bug #623616. + + poppler/Annot.cc | 346 + +++++++++++++++++++++++++----------------------------- + poppler/Annot.h | 3 + + poppler/Gfx.cc | 9 +-- + poppler/Gfx.h | 2 +- + 4 files changed, 165 insertions(+), 195 deletions(-) + +commit 70ce0b6ea1a0d61f5048d2ae49c639d74a643b29 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jul 9 17:04:00 2010 +0200 + + [annots] Clamp QuadPoints coords to annot rectangle instead of + ignore points + + Fixes appearance stream generation for document attached to bug + #623616. + + poppler/Annot.cc | 38 +++++++++++++++++++++----------------- + 1 files changed, 21 insertions(+), 17 deletions(-) + +commit 8a9e561bfe64f71e9f38c43e5c6be7e5069b2349 +Author: Hib Eris <hib@hiberis.nl> +Date: Fri Jul 2 21:07:53 2010 +0200 + + Nicer autogen.sh output + + autogen.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit ce4d328294cea73f4b7368691dc1fed6bd45d569 +Author: Hib Eris <hib@hiberis.nl> +Date: Fri Jul 2 20:51:47 2010 +0200 + + Add option for autogen.sh to skip configure + + If you do not want to automatically run configure when calling + autogen.sh, run it with: + + $ NOCONFIGURE=1 ./autogen.sh + + This feature is modeled after gnome-autogen.sh behaviour. + + autogen.sh | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +commit d7ee87c5d0a35c8d4fcc88bde4b8496c49f397c6 +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Jul 6 15:16:08 2010 +0100 + + warnings-=2 + + poppler/GfxFont.cc | 3 ++- + utils/HtmlOutputDev.cc | 3 ++- + 2 files changed, 4 insertions(+), 2 deletions(-) + +commit 1e7f457ca1617fd8c958feef8dd7e694476dedd9 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jul 9 12:29:14 2010 +0200 + + [cairo] Use ceil to convert double to int in tilingPatternFill() + + Fixes rendering of page 2 of document attached to bug #28954. + + poppler/CairoOutputDev.cc | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +commit 91a7605eb51144f2e7dea69aa9454fff47c49bd2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jul 9 11:42:56 2010 +0200 + + [glib] Fix build when GDK is enabled + + glib/test-poppler-glib.cc | 8 +------- + 1 files changed, 1 insertions(+), 7 deletions(-) + +commit 09e3e0e9c5134688c4ed2af5cd3a12aa2986474c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 8 18:56:38 2010 +0200 + + [glib] Fix poppler_page_find_tex() when called more than once + + Fixes bug #27927 + + glib/poppler-page.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 25427bdecb219ffe6f0592d2ac36de60c247bfd9 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 8 17:46:22 2010 +0200 + + Fix build when compiling without glib frontend + + configure.ac | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 550684731356a66753ec19f5a8ca4b572db6d2d5 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 8 17:16:02 2010 +0200 + + [glib-demo] Add selections demo + + glib/demo/Makefile.am | 2 + + glib/demo/main.c | 4 +- + glib/demo/selections.c | 687 + ++++++++++++++++++++++++++++++++++++++++++++++++ + glib/demo/selections.h | 31 +++ + 4 files changed, 723 insertions(+), 1 deletions(-) + +commit b257428150e2c13dcc24fd8f75e4ee2c679ab414 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 8 14:45:29 2010 +0200 + + [glib] Add poppler_page_get_selected_text() + + And change poppler_page_get_text() to return the text of the whole + page. For consistency with poppler_page_get_selection_region() + get_seletect_text() doesn't invert the y coords as get_text() + did. This + change breaks the API. Users of poppler_page_get_text should: + + - Use the new poppler_page_get_text() if they want the text of the + whole page + + - Use poppler_page_get_selected_text() if they want the text of the + selected area. In this case they shouldn't invert the y coords + anymore + before calling the method. + + glib/demo/text.c | 9 +------ + glib/poppler-page.cc | 43 + ++++++++++++++++++++++++++--------- + glib/poppler-page.h | 3 +- + glib/reference/poppler-sections.txt | 1 + + 4 files changed, 36 insertions(+), 20 deletions(-) + +commit bedc88225c948ad1288b69c6c106adce36233442 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jul 7 11:55:47 2010 +0200 + + [cairo] Fix warning on signed/unsigned comparison + + poppler/CairoFontEngine.cc | 12 ++++++------ + poppler/CairoFontEngine.h | 8 ++++---- + 2 files changed, 10 insertions(+), 10 deletions(-) + +commit 092aa901b9ec35a48bc1fb229ad16a3b00eef5f2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Jul 5 11:16:49 2010 +0200 + + [glib] docs: add some more introspection annotations + + glib/poppler-attachment.cc | 4 ++-- + glib/poppler-document.cc | 12 ++++++------ + glib/poppler-media.cc | 4 ++-- + glib/poppler-page.cc | 4 ++-- + 4 files changed, 12 insertions(+), 12 deletions(-) + +commit 6c4e14fd90d5ef2d6670a980ab2476b6fab58df7 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Jul 5 10:49:59 2010 +0200 + + [glib] docs: fix POPPLER_CHECK_VERSION() docs + + glib/poppler-features.h.in | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +commit ed324a867ecf1f616c4b2dc575f01d5cf1b67c38 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jul 2 18:28:45 2010 +0200 + + [glib] Rename instrospection files as 0.16 instead of 0.14 + + glib/Makefile.am | 14 +++++++------- + 1 files changed, 7 insertions(+), 7 deletions(-) + +commit a55f567ff1ea0858eda13a024ed765a016f3bff0 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jul 2 18:23:03 2010 +0200 + + [glib] docs: Remove unneeded empty line in doc comment + + glib/poppler-features.h.in | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit f16015303422280eaa21c3144eca0f1a330dce8a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jul 2 18:19:13 2010 +0200 + + [glib] docs: Add GObject introspection annotations + + glib/poppler-annot.cc | 45 + ++++++++++++++++++------------------- + glib/poppler-document.cc | 8 +++--- + glib/poppler-page.cc | 23 ++++++++++++------ + glib/reference/poppler-docs.sgml | 2 + + 4 files changed, 43 insertions(+), 35 deletions(-) + +commit 60242038e4dce7f0c90f2bfa0e771120247dbc9d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jun 30 09:35:29 2010 +0200 + + [glib] Add GObject introspection support + + configure.ac | 5 +++ + glib/Makefile.am | 29 ++++++++++++++++ + m4/introspection.m4 | 94 + +++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 128 insertions(+), 0 deletions(-) + +commit 3160950a7d7161457405c9084c31af230329b3f0 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jul 2 12:47:04 2010 +0200 + + [glib] docs: Add index of deprecated symbols + + glib/reference/poppler-docs.sgml | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 593db7acf6edce1267f69d12310bf4098ff24c97 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jul 2 12:44:39 2010 +0200 + + [glib] docs: deprecate GDK API + + glib/poppler-page.cc | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +commit 6facefb3fa8f97a9d330545308fb2d89c7f57fa0 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 1 18:01:45 2010 +0200 + + [glib] docs: Add index of new symbols for versions 0.12, 0.14 and 0.16 + + glib/poppler-action.h | 10 +++++++--- + glib/poppler-annot.cc | 17 +++++++++++++++++ + glib/poppler-date.cc | 2 ++ + glib/poppler-document.cc | 16 +++++++++++++++- + glib/poppler-layer.cc | 12 ++++++++++++ + glib/poppler-media.cc | 14 ++++++++++++-- + glib/poppler-media.h | 3 +++ + glib/poppler-movie.cc | 6 ++++++ + glib/poppler-page.cc | 2 ++ + glib/reference/poppler-docs.sgml | 12 ++++++++++++ + 10 files changed, 88 insertions(+), 6 deletions(-) + +commit 166b78c0ce8a4536873c4f60b392c24c8a68e7aa +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 1 17:25:03 2010 +0200 + + [glib] docs: document PopplerMediaSaveFunc + + glib/poppler-media.h | 18 +++++++++++++++++- + 1 files changed, 17 insertions(+), 1 deletions(-) + +commit 5cc0a51f88580c65ac2d5c6ff02b8cf14697b70c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 1 17:20:13 2010 +0200 + + [glib] Use the same name for parameter in function prototype + + glib/poppler-media.h | 10 +++++----- + glib/poppler-movie.h | 6 +++--- + 2 files changed, 8 insertions(+), 8 deletions(-) + +commit 6793fd8fd2d33d3d58c6556b5dbe6d0497e56646 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 1 15:49:49 2010 +0200 + + [glib] docs: document some enums in poppler-action + + glib/poppler-action.h | 92 + +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 92 insertions(+), 0 deletions(-) + +commit 8e139696dbe19f54ad54364a711b929146f11080 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 1 15:02:58 2010 +0200 + + [glib] docs: mark structures in poppler-private.h as private + + glib/poppler-private.h | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +commit ccae7e574047d66c638003cc36fa1edeef4d35ed +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 1 14:59:50 2010 +0200 + + [glib] docs: document PopplerDocument enums + + glib/poppler-document.h | 65 + +++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 65 insertions(+), 0 deletions(-) + +commit 4fbff172693c38cdc4ae8070a55ceb706aa213cd +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 1 14:26:53 2010 +0200 + + [glib] docs: document PopplerFontInfo + + glib/poppler-document.cc | 106 + ++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 106 insertions(+), 0 deletions(-) + +commit 465dd4897ff603a6fd96503cf4746fc808b0f827 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 1 12:59:39 2010 +0200 + + [glib] docs: document some enums + + glib/poppler.h | 55 + +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 55 insertions(+), 0 deletions(-) + +commit de3d599ea9e948867cfe395f42ed659670110c4c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 1 12:31:10 2010 +0200 + + [glib] docs: document boxed types defined in poppler-page + + glib/poppler-page.cc | 147 + ++++++++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-page.h | 79 +++++++++++++++++++++++++++ + 2 files changed, 226 insertions(+), 0 deletions(-) + +commit 34c52190e1dbf4d3effa44b4408faa1fbae0d12d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 1 09:33:08 2010 +0200 + + [glib] Remove splash header file + + glib/poppler-page.cc | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 6910545a487f206ccd059bb295d2312228dbf2ba +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jun 30 19:03:04 2010 +0200 + + [glib] docs: Remove invalid symbol from poppler-sections.txt + + glib/reference/poppler-sections.txt | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 65ea3b636cb5a38660e526a483a4d95f5acdf8db +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jun 30 19:02:32 2010 +0200 + + [glib] docs: fix typo + + glib/poppler-form-field.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 689bfec40b5b3030c2819cb4aac42c3ab6279278 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jun 30 19:01:47 2010 +0200 + + [glib] docs: Add missing doc for parameter + + glib/poppler-document.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 0b3d77627f255a4bf3da6ee875ad8d9eb931c96e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jun 30 19:00:59 2010 +0200 + + [glib] Use the same name for parameter in function prototype + + glib/poppler-page.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 19e1944c00ac2da6b18b015721fc3a8d1898a23a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jun 30 18:01:52 2010 +0200 + + [glib] docs: Add media and movie to docs + + glib/poppler-media.cc | 6 ++++++ + glib/poppler-movie.cc | 6 ++++++ + glib/reference/poppler-docs.sgml | 3 ++- + 3 files changed, 14 insertions(+), 1 deletions(-) + +commit ca48bee07e6b4a20ea7b40b472a335e75feb4739 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jun 30 17:56:50 2010 +0200 + + [glib] docs: Add missing types to poppler.types + + glib/reference/poppler.types | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 613ccf81317a007ed5017ee788466613a6699bb5 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jun 30 17:54:22 2010 +0200 + + [glib] docs: rework poppler-sections.txt + + - Better organization of sections and contents + - Use of Standard and Private subsections + - Add missing sections + - Remove enums section + + glib/reference/poppler-sections.txt | 424 + ++++++++++++++++++++++++----------- + 1 files changed, 295 insertions(+), 129 deletions(-) + +commit b37556a32b79f8711ed7eca24abf19511872a70a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jun 30 12:01:44 2010 +0200 + + [glib] docs: Add index of symbols + + glib/reference/poppler-docs.sgml | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 7f5fa4e19b4e324a396d64261b9125c1a557ac84 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jun 30 12:00:35 2010 +0200 + + [glib] docs: Add version information + + configure.ac | 1 + + glib/reference/Makefile.am | 2 +- + glib/reference/poppler-docs.sgml | 7 ++++++- + glib/reference/version.xml.in | 1 + + 4 files changed, 9 insertions(+), 2 deletions(-) + +commit 848d5e158fa9eadd19a658db314ba3fff9d026e8 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jun 30 11:30:41 2010 +0200 + + [glib] docs: do not use gtk-doc templates + + configure.ac | 2 +- + glib/poppler-action.cc | 6 + + glib/poppler-annot.cc | 6 + + glib/poppler-attachment.cc | 6 + + glib/poppler-attachment.h | 16 + + glib/poppler-document.cc | 8 + + glib/poppler-features.h.in | 59 ++++ + glib/poppler-form-field.cc | 6 + + glib/poppler-layer.cc | 6 + + glib/poppler-page.cc | 6 + + glib/reference/tmpl/poppler-action.sgml | 216 ------------ + glib/reference/tmpl/poppler-annot.sgml | 377 -------------------- + glib/reference/tmpl/poppler-attachment.sgml | 68 ---- + glib/reference/tmpl/poppler-document.sgml | 410 + ---------------------- + glib/reference/tmpl/poppler-enums.sgml | 246 ------------- + glib/reference/tmpl/poppler-features.sgml | 83 ----- + glib/reference/tmpl/poppler-form-field.sgml | 318 ----------------- + glib/reference/tmpl/poppler-layer.sgml | 83 ----- + glib/reference/tmpl/poppler-page.sgml | 483 + -------------------------- + glib/reference/tmpl/poppler-private.sgml | 148 -------- + glib/reference/tmpl/poppler-unused.sgml | 8 - + glib/reference/tmpl/poppler.sgml | 285 --------------- + glib/reference/tmpl/stamp-poppler-enums.sgml | 22 -- + gtk-doc.make | 78 +++-- + m4/gtk-doc.m4 | 2 +- + 25 files changed, 171 insertions(+), 2777 deletions(-) + +commit 16e15ac845206217086e2adac9f220e75c0c630d +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 29 21:44:02 2010 +0100 + + bitmap can be null at this stage, check it isn't + + poppler/JBIG2Stream.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 38e5d28a184d0ca8df71a7ea910ce85d7a225e4e +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jun 21 20:38:00 2010 +0100 + + more pow 0.5 -> sqrt + + poppler/GfxState.cc | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +commit 58a53ca0a4e8434e8478f8fe121067dcf05c017d +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jun 21 19:24:20 2010 +0100 + + sqrt is much faster than pow 0.5 + + poppler/GfxState.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit bf86a9fc464aca57ebec207a213dcc2cc6031940 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jun 21 19:20:47 2010 +0100 + + introduce getChars to save some method calls + + Can give us a decent speedup when we go a lot though this methods + + poppler/Catalog.cc | 12 +---- + poppler/DCTStream.cc | 51 ++++++++++++++------ + poppler/DCTStream.h | 3 + + poppler/GfxFont.cc | 22 +------- + poppler/GfxState.cc | 30 +++-------- + poppler/JPEG2000Stream.cc | 67 +++++++------------------- + poppler/JPEG2000Stream.h | 38 ++++++++++++++- + poppler/Link.cc | 14 +---- + poppler/Object.h | 4 ++ + poppler/Stream.cc | 90 +++++++++++++++++++---------------- + poppler/Stream.h | 118 + ++++++++++++++++++++++++++++++++++++++++++++- + 11 files changed, 279 insertions(+), 170 deletions(-) + +commit 65c14073a3b1035ca5fe3bd6667abd315272841e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Jun 21 17:19:22 2010 +0200 + + Reduce pow operations in GfxCalRGBColorSpace::getXYZ() + + We were doing the same pow operation 3 times!. It makes document + attached to bug #28591 render a little faster. + + poppler/GfxState.cc | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +commit 9365c05c1f66b3000febf32c45cef2ffe79e041a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jun 19 10:36:39 2010 +0200 + + [glib] Fix links/annots area for rotated documents with page CropBox + not starting at 0,0 + + Fixes bug #28588. + + glib/poppler-page.cc | 25 ++++++++++--------------- + 1 files changed, 10 insertions(+), 15 deletions(-) + +commit d9504c0a288c84b68a516f715505d6bc94b911f5 +Author: Pino Toscano <pino@kde.org> +Date: Fri Jun 18 23:59:04 2010 +0200 + + [autotools] link the 'cpp' tests against libpoppler as well + + ... this way gatof() can be found correctly + should fix bug #28605 + + cpp/tests/Makefile.am | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 62975737bcaa6e0a2ecab981aa3e0c8f2ff10571 +Author: Brian Cameron <brian.cameron@oracle.com> +Date: Fri Jun 18 19:22:17 2010 +0100 + + Compile with Sun Studio + + goo/ImgWriter.h | 3 ++- + goo/JpegWriter.h | 3 ++- + poppler/SplashOutputDev.cc | 6 ++++++ + 3 files changed, 10 insertions(+), 2 deletions(-) + +commit 7cbe3d1521aea8b484efb8663e75684e05b6fb61 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jun 17 23:01:21 2010 +0100 + + Optimize Splash::compositeBackground + + Optimization takes into account the two most common cases, the + pixel not + being painted at all (alpha == 0) meaning we just copy the paperColor + and the pixel being opage meaning we have to do nothing + + splash/Splash.cc | 34 ++++++++++++++++++++++++++-------- + 1 files changed, 26 insertions(+), 8 deletions(-) + +commit f323e5e4cdcc20075ee7c722f7adc088c0772249 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jun 17 22:59:37 2010 +0100 + + Check the objects are num before reading them + + Might have caused the kde bug #241995 + + poppler/GfxState.cc | 11 +++++++---- + 1 files changed, 7 insertions(+), 4 deletions(-) + +commit 35e87d2062b1d82db0d765de5a6187122a0fa99c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jun 16 11:52:25 2010 +0200 + + [gib-demo] Add demo for poppler_page_get_text_layout() + + glib/demo/text.c | 182 + ++++++++++++++++++++++++++++++++++++++++++++++++----- + 1 files changed, 164 insertions(+), 18 deletions(-) + +commit ddcea568b3a7334e062d6214f43d0a2c2ec95be4 +Author: Daniel Garcia <danigm@yaco.es> +Date: Tue Jun 15 16:57:32 2010 +0200 + + [glib] Add poppler_page_get_text_layout() + + Returns an array of PopplerRectangle items and each Rectangle is a + text character position. + + The position in this array represent the offset in text returned by + poppler_page_get_text + + glib/poppler-page.cc | 91 + ++++++++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-page.h | 4 ++- + 2 files changed, 94 insertions(+), 1 deletions(-) + +commit 6e9fe8832c37b560ac4d0b0e32d618bde70ee117 +Author: Pino Toscano <pino@kde.org> +Date: Wed Jun 16 00:22:59 2010 +0200 + + [Qt4] and support 'Print' named action here too... + + qt4/src/poppler-annotation.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 53c003f36af5d77f50fe238eaec4c5f7c3a485c7 +Author: Pino Toscano <pino@kde.org> +Date: Wed Jun 16 00:18:13 2010 +0200 + + [CMake] install the new goo/GooLikely.h + + CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 2ba752aabc8dad4bb35a351697b1590795c54ca4 +Author: Pino Toscano <pino@kde.org> +Date: Wed Jun 16 00:06:30 2010 +0200 + + update copyrights + + qt4/src/poppler-link.h | 3 ++- + qt4/src/poppler-page.cc | 1 + + 2 files changed, 3 insertions(+), 1 deletions(-) + +commit 38bf54bbad40288be763c6a1a89d90477c9ef89d +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 15 23:05:43 2010 +0100 + + move the declaration of likely/unlikely to an own file in goo/ + + goo/GooLikely.h | 22 ++++++++++++++++++++++ + goo/Makefile.am | 1 + + poppler/Object.h | 9 +-------- + splash/Splash.cc | 4 +--- + 4 files changed, 25 insertions(+), 11 deletions(-) + +commit 9838edf8c7497858e3bac2743784a3259f61cfdd +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 15 22:54:34 2010 +0100 + + Protect us against negative y coordinates + + Happens very rarely, like in bug 28480 + + splash/Splash.cc | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 8b32c3e9826d4462fd9d16fab4200ebb23251046 +Author: Pino Toscano <pino@kde.org> +Date: Tue Jun 15 23:55:01 2010 +0200 + + [Qt4/apidox] ok, now the *proper* version for 'Print'... + + qt4/src/poppler-link.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b54e5ac49f69bd1c906e517edcb436e042199cd5 +Author: Pino Toscano <pino@kde.org> +Date: Tue Jun 15 23:53:50 2010 +0200 + + [Qt4/apidox] add the proper version for the new 'Print' + + qt4/src/poppler-link.h | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 71ad18c3b6b73e23d71600d07ce00bdfaf0bef60 +Author: Pino Toscano <pino@kde.org> +Date: Tue Jun 15 23:51:01 2010 +0200 + + [Qt4] recognize the 'Print' named action here too + + qt4/src/poppler-annotation.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 96f60f2748ba76de0d296a9838dbd7181f506e36 +Author: Guillermo Amaral <gamaral@kdab.com> +Date: Tue Jun 15 23:47:46 2010 +0200 + + [Qt4] recognize 'Print' as name in named actions + + qt4/src/poppler-link.h | 3 ++- + qt4/src/poppler-page.cc | 2 ++ + 2 files changed, 4 insertions(+), 1 deletions(-) + +commit 25494311c5b8eb88d43df420ec91a1aedad20d05 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jun 15 17:44:23 2010 +0200 + + [glib] Add some G_UNLIKELY() + + glib/poppler-document.cc | 12 ++++++------ + glib/poppler-page.cc | 17 ++++++++++------- + 2 files changed, 16 insertions(+), 13 deletions(-) + +commit 52f133fb962256edb577b7f639c5c13221c6365d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jun 15 14:20:49 2010 +0200 + + [glib] Use g_slice for actions and destinations + + glib/poppler-action.cc | 21 +++++++++------------ + 1 files changed, 9 insertions(+), 12 deletions(-) + +commit f035c94d8b5b34c0c3bb47b8cfc2f9c720a4fc71 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jun 15 14:01:07 2010 +0200 + + [glib] Use g_slice_dup in _copy() function for iterators + + glib/poppler-document.cc | 9 +++------ + 1 files changed, 3 insertions(+), 6 deletions(-) + +commit c84f69681828c7e3b969f666f9b84f1531976c6f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jun 15 13:57:18 2010 +0200 + + [glib] Use g_slice for mappings and PopplerRectangle + + glib/poppler-page.cc | 50 + ++++++++++++++++++-------------------------------- + 1 files changed, 18 insertions(+), 32 deletions(-) + +commit e12b9ab105f3b56b47ded871693b939ed421c853 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jun 15 13:49:27 2010 +0200 + + [glib] Use poppler_image_mapping_free() instead of g_free() + + glib/poppler-page.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit fb791a15f7472042fb2174e6f5df6924dd4eeb9b +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jun 15 13:37:52 2010 +0200 + + [glib] Remove poppler_mapping_free and use poppler_link_mapping_free + instead + + glib/poppler-page.cc | 9 +-------- + 1 files changed, 1 insertions(+), 8 deletions(-) + +commit 6186d7220e545eb89597626933a10acd0cd25173 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jun 15 13:16:59 2010 +0200 + + [glib] Use _new() methods instead of g_new() to create boxed structs + + glib/poppler-page.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 44639cb7b10ab6d66122ae2b6b7f3e5745f933bd +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jun 15 10:39:00 2010 +0200 + + [glib-demo] Use poppler_rectangle_free() instead of g_free() + + glib/demo/find.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3ca304f3837af27ae49541a5f441d8729264a945 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jun 14 19:16:41 2010 +0100 + + Add more caching to ObjectStreams + + Makes opening of file from bug 26759 ten times faster + + poppler/XRef.cc | 62 + +++++++++++++++++++++++++++++++++++++++++++++++-------- + poppler/XRef.h | 4 +- + 2 files changed, 55 insertions(+), 11 deletions(-) + +commit cc2e5f190e19ee8169f67df2541302a2816873d3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Jun 14 18:17:01 2010 +0200 + + [glib-demo] Support password protected documents + + glib/demo/main.c | 175 + ++++++++++++++++++++++++++++++++++++++++++++++++++++-- + 1 files changed, 170 insertions(+), 5 deletions(-) + +commit 34b2dbb6bbaf0189c92eea6b7924999ab2b6ad11 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Jun 14 17:41:51 2010 +0200 + + [glib-demo] Remove GLIB_CHECK_VERSION(), we already depend on + glib 2.18 + + glib/demo/attachments.c | 5 ----- + glib/demo/main.c | 32 +------------------------------- + 2 files changed, 1 insertions(+), 36 deletions(-) + +commit a52670a46c0561025d8b86cd2865603f0720c695 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 13 15:31:15 2010 +0100 + + do not distribute these two files + + they are generated on configure/cmake time and depend on the machine + + glib/Makefile.am | 7 +++---- + poppler/Makefile.am | 4 ++-- + 2 files changed, 5 insertions(+), 6 deletions(-) + +commit eb0206ba8458f1dba004ac7bef856dcbb2ccbba5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jun 9 18:56:16 2010 +0100 + + we need to ship these two files + + Bug 28458 + + Makefile.am | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 7dfdf1ee293b7d36a049a90d8a17462ed0e50f2c +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 8 21:54:52 2010 +0100 + + Typo-- + + utils/pdftoppm.1 | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 57cc04ee1a122794b338c0d9818dbdaea46a42d6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 8 21:49:40 2010 +0100 + + Add cropbox to the manpage + + utils/pdftoppm.1 | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit f9e6cb9647981f7afbb20261b3ccedaf003657d2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 8 20:43:11 2010 +0100 + + 0.14.0 + + CMakeLists.txt | 4 ++-- + NEWS | 18 ++++++++++++++++++ + configure.ac | 4 ++-- + cpp/Doxyfile | 2 +- + qt4/src/Doxyfile | 2 +- + 5 files changed, 24 insertions(+), 6 deletions(-) + +commit 963afdc39153fee69ecb939c98deeef4f64638de +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 8 20:29:58 2010 +0100 + + libpoppler-qt4.so.3.2.0 -> libpoppler-qt4.so.3.3.0 + + qt4/src/CMakeLists.txt | 2 +- + qt4/src/Makefile.am | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit c1629be8011f3bddbf619246090640d62136d521 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 8 20:23:00 2010 +0100 + + Increase soname as _PopplerActionMovie struct grew + + glib/CMakeLists.txt | 2 +- + glib/Makefile.am | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 5ef45b1e72aed88ece0905b1204edee641f3c8fc +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 8 19:35:20 2010 +0100 + + Do not exit when trying to allocate memory for the XRef fails + + See bug 28406 + + poppler/XRef.cc | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +commit e7a5e9f70ee1283a2ca6734552d905279c97989b +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jun 4 08:46:33 2010 +0100 + + a bit of docu + + poppler/Object.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 9ff4dab2558f7c2700fd7fcaccacdad9619dbdda +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jun 4 08:44:34 2010 +0100 + + Add support for unsigned integer numbers + + So files store their P as a 32 bit unsigned instead of as a 32 bit + signed, making us to overflow our objInt parsing and rejecting to open + the file, this patch introduces objUint that only happens when the + number is not real, does not fit in a 32 bit integer but still fits + in a + 32 bit unsigned integer + + poppler/Lexer.cc | 32 +++++++++++++++++++++++++------- + poppler/Object.cc | 5 ++++- + poppler/Object.h | 14 +++++++++++--- + poppler/SecurityHandler.cc | 22 ++++++++++++++++++++++ + 4 files changed, 62 insertions(+), 11 deletions(-) + +commit 41e9af7f505dbfbda36f6ac97df90f2a42ab3160 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 1 21:40:07 2010 +0100 + + If the document is not encrypted it is ok to print + + poppler/XRef.cc | 16 ++++++++++------ + 1 files changed, 10 insertions(+), 6 deletions(-) + +commit b15c793a8a58b17a7fe7b32c1037726e1e0e1bf0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 1 20:57:16 2010 +0100 + + Check it is a stream, not that it is not none + + People is reporting aborts, e.g. KDE bug 240208 + but can not check if this really fixes it since he can not share the + document + + poppler/Lexer.h | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit a72c68117ba05f3934e2df227cdcaf53a375f0ce +Author: Pino Toscano <pino@kde.org> +Date: Fri May 28 18:11:02 2010 +0200 + + [cpp apidox] add a start of API documentation for the 'page' class + + cpp/poppler-page.cpp | 68 + ++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 68 insertions(+), 0 deletions(-) + +commit acf7729e8e270e1b4b2a552272dc280ae6d7b352 +Author: Pino Toscano <pino@kde.org> +Date: Fri May 28 17:38:35 2010 +0200 + + [cpp] fix the font_iterator current page status + + cpp/poppler-font.cpp | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +commit 4e017ff24a01cbbf1b39eedc3d7697f8b180fdd9 +Author: Pino Toscano <pino@kde.org> +Date: Fri May 28 17:15:28 2010 +0200 + + [cpp apidox] add API documentation for the 'font_info' and + 'font_iterator' classes + + cpp/poppler-font.cpp | 71 + ++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 71 insertions(+), 0 deletions(-) + +commit 2ff840b62e41e2fc98e9fcff7330f40216de58a5 +Author: Pino Toscano <pino@kde.org> +Date: Fri May 28 14:34:37 2010 +0200 + + [cpp] move the actual convert_date(const char*) implementation in + the detail + + this way it is possible to call it from inside poppler-cpp without + an implicit conversion to std::string + + cpp/poppler-document.cpp | 2 +- + cpp/poppler-embedded-file.cpp | 4 ++-- + cpp/poppler-global.cpp | 23 ++--------------------- + cpp/poppler-private.cpp | 25 +++++++++++++++++++++++++ + cpp/poppler-private.h | 2 ++ + 5 files changed, 32 insertions(+), 24 deletions(-) + +commit 8112e9111313eaded4cd2e89d0e67efb0f3e29db +Author: Pino Toscano <pino@kde.org> +Date: Fri May 28 13:13:50 2010 +0200 + + [cpp] add a time_type typedef + + ... defined as unsigned int, and use it all around + (it changes nothing for client code) + + cpp/poppler-document.cpp | 8 ++++---- + cpp/poppler-document.h | 2 +- + cpp/poppler-embedded-file.cpp | 4 ++-- + cpp/poppler-embedded-file.h | 4 ++-- + cpp/poppler-global.cpp | 4 ++-- + cpp/poppler-global.h | 4 +++- + 6 files changed, 14 insertions(+), 12 deletions(-) + +commit bc5bdb43b12437e00aaddc27a74b9ac4b6498446 +Author: Pino Toscano <pino@kde.org> +Date: Fri May 28 13:01:53 2010 +0200 + + use the proper type for iterating on a GooVector + + poppler/XRef.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 87128ab0dfec6be1a034361512ee41301b078831 +Author: Maciej Mrozowski <reavertm@gmail.com> +Date: Thu May 27 17:31:00 2010 +0200 + + [CMake] Do not force -O2, preserve compiler flags instead. + + cmake/modules/PopplerMacros.cmake | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 241c338facb45641ef1a271c904355a014bbf28d +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu May 27 20:37:55 2010 +0100 + + Allow quality & progressive mode to be utilised in JpegWriter + + goo/JpegWriter.cc | 15 +++++++++++++-- + goo/JpegWriter.h | 4 ++++ + splash/SplashBitmap.cc | 18 +++++++++--------- + splash/SplashBitmap.h | 4 ++++ + 4 files changed, 30 insertions(+), 11 deletions(-) + +commit 9eda6e8aaae412a9882141d1b5b8c7bf0c823c68 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue May 25 23:44:30 2010 +0100 + + Do not follow loops blindly + + Fixes crash in pdf in bug 28172 + + poppler/XRef.cc | 21 +++++++++++++++------ + poppler/XRef.h | 7 ++++--- + 2 files changed, 19 insertions(+), 9 deletions(-) + +commit bbee6e0c8c9b181f8d19c167c867d74a765685fb +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue May 25 23:13:38 2010 +0100 + + update copyright + + poppler/JBIG2Stream.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 80b72b9f2fd70395580205b8b176e0576e132cf5 +Author: Hib Eris <hib@hiberis.nl> +Date: Wed May 26 13:07:57 2010 +0200 + + [autotools] sync autotool build with cmake build + + In addition to commit 69c2cf76cef9c190ac07726f60f1dccd3df5cb6d + + poppler/poppler-config.h.in | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 30ea3ab8a1eecafb3366aef193910098fdb7ccc8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue May 25 23:07:56 2010 +0100 + + Fix crash when parsing pdf in bug 28170 + + This code is a can of crashing worms :-7 + + poppler/JBIG2Stream.cc | 23 ++++++++++++++++------- + 1 files changed, 16 insertions(+), 7 deletions(-) + +commit b5a9021037c4e6cbbfd622433f3de693d1f47671 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue May 25 20:00:57 2010 +0100 + + 0.13.4 + + CMakeLists.txt | 2 +- + NEWS | 16 ++++++++++++++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + glib/reference/tmpl/poppler-action.sgml | 5 +++++ + glib/reference/tmpl/poppler-annot.sgml | 18 ++++++++++++++++++ + glib/reference/tmpl/poppler-attachment.sgml | 3 +++ + glib/reference/tmpl/poppler-document.sgml | 5 +++++ + glib/reference/tmpl/poppler-enums.sgml | 17 +++++++++++++++++ + glib/reference/tmpl/poppler-features.sgml | 3 +++ + glib/reference/tmpl/poppler-form-field.sgml | 3 +++ + glib/reference/tmpl/poppler-layer.sgml | 4 ++++ + glib/reference/tmpl/poppler-page.sgml | 13 +++++++++++++ + glib/reference/tmpl/poppler-private.sgml | 3 +++ + glib/reference/tmpl/poppler.sgml | 6 ++++++ + glib/reference/tmpl/stamp-poppler-enums.sgml | 3 +++ + qt4/src/Doxyfile | 2 +- + 17 files changed, 103 insertions(+), 4 deletions(-) + +commit 57ab0ebe993d79fe551bba58e0a70d55d32828f8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed May 12 20:49:31 2010 +0100 + + better copyright + + poppler/strtok_r.cpp | 23 +++++++++++++++++++++++ + 1 files changed, 23 insertions(+), 0 deletions(-) + +commit 69c2cf76cef9c190ac07726f60f1dccd3df5cb6d +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed May 12 20:47:25 2010 +0100 + + mingw does not provide strtok_r + + Copy the glibc implementation + + CMakeLists.txt | 1 + + poppler/Makefile.am | 1 + + poppler/poppler-config.h.cmake | 4 + + poppler/strtok_r.cpp | 189 + ++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 195 insertions(+), 0 deletions(-) + +commit 9e9b5e0d87a7450bd2223538673321ecec720c36 +Author: Marek Kasik <mkasik@redhat.com> +Date: Tue May 11 12:06:17 2010 +0200 + + Better check of overlapping of table cells when selecting text + + Add check for overlapping of upper right cell with lower left cell + of assumed table (related to #3188). + + poppler/TextOutputDev.cc | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit a3e40b460b7690ef73ccf143b10da07e91d9ee7f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon May 10 17:41:04 2010 +0200 + + [annots] Adjust bbox for line annots when y1 = y2 + + Some documents like pdf_commenting_new.pdf, have y1 = y2 but + line_width > 0, acroread renders the lines in such cases even + though the + annot bbox is empty. + + poppler/Annot.cc | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +commit e30d24c506a9ff742f8af5d6c71273abeddaa265 +Author: Pino Toscano <pino@kde.org> +Date: Tue May 4 15:19:26 2010 +0200 + + [cpp] ustring::{from,to}_utf8(): fix in/out buffer sizes + + cpp/poppler-global.cpp | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit aaa19a673020e12dbfceb4d25ade0ece7875fd83 +Author: Pino Toscano <pino@kde.org> +Date: Tue May 4 12:07:43 2010 +0200 + + [cpp] make the pkg-config files really working + + poppler-cpp.pc.cmake | 6 +++++- + poppler-cpp.pc.in | 6 +++++- + 2 files changed, 10 insertions(+), 2 deletions(-) + +commit 8f963ccde41ef1faa719254fccc5bdfe75e9fa87 +Author: Patrick Spendrin <ps_ml@gmx.de> +Date: Sun May 2 18:42:10 2010 +0200 + + Windows: define strtok_r as strtok_s + + poppler/poppler-config.h.cmake | 4 ++++ + poppler/poppler-config.h.in | 4 ++++ + 2 files changed, 8 insertions(+), 0 deletions(-) + +commit c9d8df51c96e50ad72f7954baba2254259fc894c +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat May 1 19:52:51 2010 +0100 + + 2010 in these copyrights + + poppler/poppler-config.h.cmake | 2 +- + poppler/poppler-config.h.in | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 9ce71fb35fdd66c55872956432160a5c76a62080 +Author: Jakub Wilk <ubanus@users.sf.net> +Date: Sat May 1 19:50:54 2010 +0100 + + Use strtok_r instead strtok + + strtok is not thread safe + + fofi/FoFiType1.cc | 8 +++++--- + poppler/CharCodeToUnicode.cc | 6 ++++-- + poppler/GlobalParams.cc | 6 ++++-- + poppler/PDFDoc.cc | 4 +++- + poppler/UnicodeMap.cc | 21 ++++++++++++++++++--- + 5 files changed, 34 insertions(+), 11 deletions(-) + +commit 6b2983f89e87792a393880dab6dc1fedb748db2c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Apr 30 14:48:50 2010 +0200 + + [cairo] Set device offset and matrix to smask depending on the + group target + + It seems to fix all of my test cases. Fixes bug #27208. + + poppler/CairoOutputDev.cc | 21 +++++++++++++++------ + 1 files changed, 15 insertions(+), 6 deletions(-) + +commit ac32021704178721ee007a6b6831283e323e500f +Author: Pino Toscano <pino@kde.org> +Date: Fri Apr 30 01:14:14 2010 +0200 + + demote the #warning to a simple FIXME comment + + poppler/ArthurOutputDev.cc | 4 +--- + 1 files changed, 1 insertions(+), 3 deletions(-) + +commit 8c1bc17552c989c15f318d9d109607a9a594ca6b +Author: Pino Toscano <pino@kde.org> +Date: Fri Apr 30 01:12:19 2010 +0200 + + MSVC: define fmax() and fmin() + + MSVC does not provide those functions, so we need to define them to + the existing max()/mix() macros. + Thanks to Patrick Spendrin for the hint! + + poppler/poppler-config.h.cmake | 5 +++++ + poppler/poppler-config.h.in | 5 +++++ + 2 files changed, 10 insertions(+), 0 deletions(-) + +commit 71063d51a45835b0267a7e3f823ef49689cfd06f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Apr 29 20:28:07 2010 +0200 + + Make sure we are drawing text before calling endTextObject() + + This is actually the right fix for the previous commit. + + poppler/Gfx.cc | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +commit e909219d8e92994bd52976f9676015fa6ca9fc91 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Apr 29 18:34:22 2010 +0200 + + Set textHaveCSPattern=false again before filling the pattern in + opEndText() + + Fixes cairo backend regressions caused by commit + ccf238b32e236f69c0507a5421ac2649dfa8d865. + + poppler/Gfx.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 29572d6ac7829b60efce2d8e489473c55e370f26 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 27 23:39:23 2010 +0100 + + fabs for doubles + + poppler/TextOutputDev.cc | 24 ++++++++++++------------ + 1 files changed, 12 insertions(+), 12 deletions(-) + +commit 4905e2bd764ea601e3bf9c5195c740e5bf186af5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 27 23:34:34 2010 +0100 + + fix include + + splash/SplashBitmap.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit f9f0e4b747a1527bd6354897cdba7954d58651de +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Apr 27 14:26:23 2010 +0200 + + Fix first color stop offset of linear gradients + + Fixes bug #27837. + + poppler/Gfx.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5b822011029f3721fbafd4a7bf01b9d6fee35d25 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 24 18:18:08 2010 +0200 + + include standard float.h instead of unportable values.h + + poppler/TextOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit dee7cb8691528293bb5b8f266970cdb6771e301b +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 24 15:39:23 2010 +0100 + + 0.13.3 + + CMakeLists.txt | 2 +- + NEWS | 31 +++++++++++++++++++++++++++++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + qt4/src/Doxyfile | 2 +- + 5 files changed, 35 insertions(+), 4 deletions(-) + +commit 07864c9e2a7a32b48bdbab92c8b2f79bce1d9f5b +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 24 13:07:02 2010 +0100 + + minor cleanups + + utils/HtmlLinks.cc | 15 ++------------- + utils/HtmlLinks.h | 16 ++++++++++++++-- + 2 files changed, 16 insertions(+), 15 deletions(-) + +commit e501eabb2f0775444a2bf64005a3a3f1ffa281b4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 24 13:06:12 2010 +0100 + + Do not assume the parameter will have more than 5 chars + + utils/pdftohtml.cc | 30 ++++++++++++++++++------------ + 1 files changed, 18 insertions(+), 12 deletions(-) + +commit 6cc4d571339214e9eeeb682ba48fb220cef905f9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 24 13:04:05 2010 +0100 + + Fix end() to return the correct last valid value + + goo/GooVector.h | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit 4ed53e30e735b79c46eab9d54883531c6e187b17 +Author: William Bader <williambader@hotmail.com> +Date: Fri Apr 23 22:52:24 2010 +0100 + + Silence some Illegal entry in bfrange block in ToUnicode CMap + + Fixes #27728 + + poppler/CharCodeToUnicode.cc | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +commit 16a004784043e2a8587c0c3c6d23889df8a80470 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Apr 22 19:39:01 2010 +0100 + + Avoid the usage of std:: + + poppler/TextOutputDev.cc | 25 +++++++++++-------------- + 1 files changed, 11 insertions(+), 14 deletions(-) + +commit a7dcb2b4ffee57b7f78529cbaeaab647ab93de86 +Author: Pino Toscano <pino@kde.org> +Date: Thu Apr 22 13:31:41 2010 +0200 + + Windows: include config.h in GlobalParamsWin.cc only if not included + already + + GlobalParamsWin.cc is not compiled standalone but only #include'd by + GlobalParams.cc (on Windows only), so config.h has already included + already + as safety check, check for PACKAGE_NAME (#define'd in config.h) + before #include'ing it again + + poppler/GlobalParamsWin.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit fba076e17af24a9c9883504282316bba119a908c +Author: Pino Toscano <pino@kde.org> +Date: Thu Apr 22 13:24:04 2010 +0200 + + avoid accidental max() macro replacement with some compilers (eg MSVC) + + defining an empty macro and using it between "max" and "(", such + compilers won't try to replace their macro max(a, b) there; in any + case, empty spaces are just fine + + poppler/TextOutputDev.cc | 11 +++++++---- + 1 files changed, 7 insertions(+), 4 deletions(-) + +commit ccf238b32e236f69c0507a5421ac2649dfa8d865 +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Wed Apr 21 19:21:37 2010 +0100 + + Improve colorizing text and masks in pattern colorspace + + Bug #27482 + + poppler/Gfx.cc | 137 + +++++++++++++++++++++----------------------- + poppler/Gfx.h | 4 +- + poppler/SplashOutputDev.cc | 41 ++++++++++++- + poppler/SplashOutputDev.h | 3 +- + 4 files changed, 106 insertions(+), 79 deletions(-) + +commit 8e86dfb328d94939ecf390d34af533b831b2837b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Apr 21 19:19:53 2010 +0100 + + Add copyright + + poppler/TextOutputDev.cc | 1 + + poppler/TextOutputDev.h | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit 6f9f3d33ff8058e28243ba45b8547e21ad0d088a +Author: Andre Klapper <a9016009@gmx.de> +Date: Wed Apr 21 19:57:15 2010 +0200 + + [glib-demo] Compile with -DGSEAL_ENABLE + + Fixes bug #27579. + + glib/demo/images.c | 2 +- + glib/demo/layers.c | 4 ++-- + glib/demo/render.c | 8 ++++---- + 3 files changed, 7 insertions(+), 7 deletions(-) + +commit 6b14c18d60cae130869f9a5c7688dfe880602224 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Apr 21 19:56:49 2010 +0200 + + [cairo] Make sure we always use a new path in doPath() + + Fixes document + http://acroeng.adobe.com/Test_Files/images/transparency/Untitled-2.pdf + when rendering with cairo backend. + + poppler/CairoOutputDev.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 4f71d64c69500ed78daf4d797c8af6cfbd3d970e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Apr 21 11:44:49 2010 +0200 + + [cairo] Fix pattern size when bbox is not at 0,0 + + poppler/CairoOutputDev.cc | 11 +++++++++-- + 1 files changed, 9 insertions(+), 2 deletions(-) + +commit 9c5612f6e013a8698eff6531ec388a7e6c1fb89a +Author: Marek Kasik <mkasik@redhat.com> +Date: Fri Feb 12 14:31:01 2010 +0100 + + Distinguish between columns and tables when selecting text + + This commit add ability to detect tables in text by checking borders + of 4 neighbouring text blocks for arrangement (to the left, to + the right, + center, ...). Detected border of whole table is then stored in + ExMin, ExMax, + EyMin and EyMax of each block together with id of detected + table. Sorting + of blocks is then performed on the these borders to be able to + distinguish + tables from columns. + Pasting of selected text was modified so that tables are pasted + correctly + (even with multi line cells). + + poppler/TextOutputDev.cc | 490 + ++++++++++++++++++++++++++++++++++++++++------ + poppler/TextOutputDev.h | 5 + + 2 files changed, 437 insertions(+), 58 deletions(-) + +commit db014ffb357e760d9397544c5a8fe747cdb497ab +Author: Brian Ewins <brian.ewins@gmail.com> +Date: Mon Nov 23 08:58:19 2009 +0000 + + Select top right to bottom left in RTL mode + + This makes pure RTL selection work. Bidi is not handled at all. + Rendering of the selection is poor and the dumped text appears + to still be in reverse order to me. + + poppler/TextOutputDev.cc | 57 + ++++++++++++++++++++++++++++++++++----------- + 1 files changed, 43 insertions(+), 14 deletions(-) + +commit b1d43fa052d9160c4f319a67415ecf3ebf2cf9b3 +Author: Brian Ewins <brian.ewins@gmail.com> +Date: Sun Nov 22 09:47:40 2009 +0000 + + Make pdftotext newlines match copy and paste + + The output of pdftotext didn't insert line breaks, + resulting in jumbled text. Change the rules to + emit a newline at the end of each line unless + a hyphenation is being supressed, and an extra + newline at the end of each flow. + + poppler/TextOutputDev.cc | 17 +++-------------- + 1 files changed, 3 insertions(+), 14 deletions(-) + +commit f83b677a8eb44d65698b77edb13a5c7de3a72c0f +Author: Brian Ewins <brian.ewins@gmail.com> +Date: Thu Nov 12 02:50:29 2009 +0000 + + Use a reading-order sort to order blocks + + This switches the block sort from XY to reading order, + using the rules from T. Breuel's "High Performance + Document Layout Analysis". + + Signed-off-by: Brian Ewins <brian.ewins@gmail.com> + + poppler/TextOutputDev.cc | 164 + ++++++++++++++++++++++++++++++++++++++++++++-- + poppler/TextOutputDev.h | 8 ++ + 2 files changed, 167 insertions(+), 5 deletions(-) + +commit a2191a4d45e0abaec97c19aacae37c4c5824bd36 +Author: Brian Ewins <brian.ewins@gmail.com> +Date: Mon Nov 9 06:24:51 2009 +0000 + + Separate flow construction from reading order + + If the blocks were already in reading order, then + constructing flows is simplified, since blocks + cannot be picked out-of-order. Make this change + first in preparation for adding a reading-order + sort. + + Signed-off-by: Brian Ewins <brian.ewins@gmail.com> + + poppler/TextOutputDev.cc | 96 + ++++++++------------------------------------- + 1 files changed, 17 insertions(+), 79 deletions(-) + +commit 345ed51af9b9e7ea53af42727b91ed68dcc52370 +Author: Brian Ewins <brian.ewins@gmail.com> +Date: Thu Oct 29 01:46:29 2009 +0000 + + Fix bug 3188, text selection across table cells + + Bug 3188. When selecting text, poppler goes across the whole + page then down, rather than across each cell, down that cell, + then across to the next cell. This leads to illegible paste + results. + + Teach TextPage to visit the selection in flow order rather than + block order. + + Signed-off-by: Brian Ewins <brian.ewins@gmail.com> + + poppler/TextOutputDev.cc | 334 + ++++++++++++++++++++++++--------------------- + 1 files changed, 178 insertions(+), 156 deletions(-) + +commit 12d83931ae1b899b70c7ea5c01f03f123b1bb9a8 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Apr 18 17:53:48 2010 +0200 + + [cairo] Check pattern status after setting matrix when rendering + images + + Fixes rendering of document attached to kde bug + http://bugs.kde.org/show_bug.cgi?id=135417. + + poppler/CairoOutputDev.cc | 34 ++++++++++++++++++++++++++++++++++ + 1 files changed, 34 insertions(+), 0 deletions(-) + +commit ff6d501a2fc887fd49a985161f756d6d6b8e6c0d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Apr 18 17:51:42 2010 +0200 + + [cairo] Fix a crash when rendering 0x0 images + + See kde bug http://bugs.kde.org/show_bug.cgi?id=135417 + + poppler/CairoOutputDev.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 84cd2186861436fbaa7c29aa691e69fcd543a1c2 +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Apr 13 23:42:28 2010 +0200 + + Properly initialize variable + + poppler/CachedFile.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 24f244f486f332b0bd76c6525c5d9d03168a76e6 +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Apr 13 23:54:28 2010 +0200 + + pdftops: require output filename when reading from stdin + + utils/pdftops.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 955f9f53ff225f6794a494fdd0f0fe5ee1a41d88 +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Apr 13 23:47:40 2010 +0200 + + pdftotext: require output filename when reading from stdin + + utils/pdftotext.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 31388aa8b5117619878431b7fed2d033000af541 +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Apr 13 23:27:20 2010 +0200 + + pdftohtml: require output filename when reading from stdin + + utils/pdftohtml.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit a8d43ec1c7f5448a7f63d9bbd9062d56ee1c7c58 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Apr 14 19:21:33 2010 +0100 + + update XOPEN_SOURCE to 600 in non standard compile options + + it seems helps compiling on some BSD + + cmake/modules/PopplerMacros.cmake | 2 +- + configure.ac | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 4cce1f14e964edf1bf2d9fb8286ee002a67dc212 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 13 21:57:16 2010 +0100 + + include strings.h on non windows platforms + + poppler/GlobalParams.cc | 2 ++ + test/perf-test.cc | 2 ++ + 2 files changed, 4 insertions(+), 0 deletions(-) + +commit 55c76069c52f9f51c6b8c60fe1aa8de499012ea8 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Apr 12 19:32:46 2010 +0200 + + [glib] Use existing cairo api when rendering to a pixbuf + + I should fix bug #5589 for the GDK api too. + + glib/poppler-page.cc | 227 + ++++++++++++++++++++----------------------------- + 1 files changed, 93 insertions(+), 134 deletions(-) + +commit 51aefe1423a068e8c119c21a8791d265aecbeaf5 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Apr 9 12:50:00 2010 +0200 + + [cairo] Implement colorizing image masks with pattern colorspace + + poppler/CairoOutputDev.cc | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit bd8f44289770175a17ac45e4788b0d374cc93d5a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Apr 9 12:02:38 2010 +0200 + + Partially revert "[cairo] Do not change device offset of mask surface" + + This partially reverts commit + a32f6f9ebaed3e4827b9dc6cb37e307c2798f521. + It fixed bug #27208, but it's causing regressions on other documents. + + poppler/CairoOutputDev.cc | 11 ++++++++++- + 1 files changed, 10 insertions(+), 1 deletions(-) + +commit bcb405c43fb7140f5d601d00de4d30913a0050ef +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Apr 8 12:02:48 2010 +0200 + + Pages were always created without forms by Catalog + + Use getForm() instead of form when creating a page object. + + poppler/Catalog.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit d46581c574b3088a82555cbc3b76e95e2571b9c0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Apr 7 20:25:23 2010 +0100 + + Fix destructor + + poppler/Catalog.cc | 19 +++++++------------ + poppler/Catalog.h | 3 +-- + 2 files changed, 8 insertions(+), 14 deletions(-) + +commit ab14433f8b3d7c67f279cece65dfdd40c6675ac0 +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Mar 25 15:33:33 2010 +0100 + + Parse Form on demand + + poppler/Catalog.cc | 21 +++++++++++++-------- + poppler/Catalog.h | 2 +- + 2 files changed, 14 insertions(+), 9 deletions(-) + +commit c72a2c7f70b13a7b7b531b3c983d9a9bc104bac7 +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Mar 25 17:33:11 2010 +0100 + + Parse Names on demand + + poppler/Catalog.cc | 112 + ++++++++++++++++++++++++++++++++++++++++++---------- + poppler/Catalog.h | 18 ++++++-- + 2 files changed, 104 insertions(+), 26 deletions(-) + +commit 32053360c93607cf9bdc092257cefad5d4df9ec5 +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Mar 25 16:32:22 2010 +0100 + + Parse Dests on demand + + poppler/Catalog.cc | 27 +++++++++++++++++++++------ + poppler/Catalog.h | 2 +- + 2 files changed, 22 insertions(+), 7 deletions(-) + +commit da0f8e69eecb944e128474f62829f729eeabd189 +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Mar 25 16:48:07 2010 +0100 + + Parse Outline on demand in PDFDoc + + poppler/PDFDoc.cc | 17 ++++++++++++----- + poppler/PDFDoc.h | 2 +- + 2 files changed, 13 insertions(+), 6 deletions(-) + +commit d7a69c8cad112cb6616d0192d8a4028fdaee2f73 +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Mar 25 16:05:02 2010 +0100 + + Parse Outline on demand + + poppler/Catalog.cc | 23 ++++++++++++++++++++--- + poppler/Catalog.h | 2 +- + 2 files changed, 21 insertions(+), 4 deletions(-) + +commit c149e027fa76824221a78fe6d3bf9bfe953491d4 +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Mar 25 15:51:51 2010 +0100 + + Parse StructTreeRoot on demand + + poppler/Catalog.cc | 22 +++++++++++++++++++--- + poppler/Catalog.h | 2 +- + 2 files changed, 20 insertions(+), 4 deletions(-) + +commit 3c6effe44d6d97f175c2ee7f3913d8c4ba34d612 +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Mar 25 14:55:22 2010 +0100 + + Parse Metadata on demand + + poppler/Catalog.cc | 16 +++++++++++++--- + 1 files changed, 13 insertions(+), 3 deletions(-) + +commit 749d67ea2346a3453ef41dc37ba59d419ad900b0 +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Mar 25 15:09:58 2010 +0100 + + Parse PageLabelInfo on demand + + poppler/Catalog.cc | 37 +++++++++++++++++++++++++++++-------- + poppler/Catalog.h | 3 +++ + 2 files changed, 32 insertions(+), 8 deletions(-) + +commit 78f7d106714fa489a66c39410163a6902ba24856 +Author: Hib Eris <hib@hiberis.nl> +Date: Sat Mar 27 14:43:57 2010 +0100 + + Parse PageMode and PageLayout on demand + + poppler/Catalog.cc | 109 + +++++++++++++++++++++++++++++++++++----------------- + poppler/Catalog.h | 11 +++-- + 2 files changed, 81 insertions(+), 39 deletions(-) + +commit f5dd5be64d09186ee289632c1a61979d15edd605 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Apr 7 19:48:39 2010 +0200 + + Fix saving update docs that have a compressed xref table + + - Use the original xref table size as Size field in the trailer + dictionary to make sure size = maxObjId + 1 + + - Use the right generation number for compressed objects that which + must be 0. gen field in xref entry for compressed objects is the + index of the object in the stream, not the generation number. + + Fixes bug #27450. + + poppler/PDFDoc.cc | 9 ++++----- + 1 files changed, 4 insertions(+), 5 deletions(-) + +commit 3f302fdd78cd78873bf5376af84e83741a8daadb +Author: Pino Toscano <pino@kde.org> +Date: Tue Apr 6 23:58:46 2010 +0200 + + use a GooVector<bool> instead of a non-standard variable-length-array + + poppler/CachedFile.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 425a62b5fa8e4e69bfc1c64ed126b5baac06d78a +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Apr 6 10:57:30 2010 +0200 + + pdfutils: fix deleting fileName + + utils/pdfinfo.cc | 2 +- + utils/pdftoabw.cc | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 198c9d61ba93ba62ea2da44a23cd948d43556c3e +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 6 22:00:14 2010 +0100 + + Use the topleft of the Rect of text annots to draw + + Not use the full rect when we are drawing "our" notes + + poppler/Annot.cc | 9 +++++++-- + 1 files changed, 7 insertions(+), 2 deletions(-) + +commit 1422802f029483ad3e62a3a13e66b2d3990ac58f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Apr 6 12:32:12 2010 +0200 + + [cairo] Use current fill_opacity when drawing soft masked images + + Fixes GNOME Bug https://bugzilla.gnome.org/show_bug.cgi?id=614915 + + poppler/CairoOutputDev.cc | 27 ++++++++++++++++++++------- + 1 files changed, 20 insertions(+), 7 deletions(-) + +commit c152d30f879e6cde45de58bb9249035e127e84e7 +Author: Hib Eris <hib@hiberis.nl> +Date: Mon Apr 5 18:55:29 2010 +0200 + + delete fileName in utils + + utils/pdftohtml.cc | 1 + + utils/pdftops.cc | 1 + + utils/pdftotext.cc | 1 + + 3 files changed, 3 insertions(+), 0 deletions(-) + +commit f091c83414ab32a4ecf1fa2bd15f13a3cf113a86 +Author: Hib Eris <hib@hiberis.nl> +Date: Mon Apr 5 20:12:01 2010 +0100 + + add some docu + + poppler/CachedFile.h | 30 ++++++++++++++++++++++++++++++ + poppler/CurlPDFDocBuilder.h | 2 ++ + poppler/LocalPDFDocBuilder.h | 2 ++ + poppler/PDFDocBuilder.h | 9 +++++++++ + poppler/PDFDocFactory.h | 12 ++++++++++++ + poppler/StdinPDFDocBuilder.h | 2 ++ + 6 files changed, 57 insertions(+), 0 deletions(-) + +commit fc071d800cb4329a3ccf898d7bf16b4db7323ad8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Apr 5 19:11:26 2010 +0100 + + Rework DCTStream error handling, should work better now + + Fixes bug 26280 + + poppler/DCTStream.cc | 35 ++++++++++++++--------------------- + poppler/DCTStream.h | 5 +++-- + utils/HtmlOutputDev.cc | 4 ++-- + 3 files changed, 19 insertions(+), 25 deletions(-) + +commit a9d801b2db20ecb08734ee5cdb703abf11994b6e +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Apr 5 16:55:02 2010 +0100 + + Make some paremeters const & to clearly show we just read them + + poppler/CachedFile.cc | 18 ++++++++++-------- + poppler/CachedFile.h | 8 +++++--- + poppler/CurlCachedFile.cc | 9 +++++---- + poppler/CurlCachedFile.h | 3 ++- + poppler/CurlPDFDocBuilder.cc | 9 +++++---- + poppler/CurlPDFDocBuilder.h | 5 +++-- + poppler/LocalPDFDocBuilder.cc | 15 ++++++++------- + poppler/LocalPDFDocBuilder.h | 5 +++-- + poppler/PDFDocBuilder.h | 5 +++-- + poppler/PDFDocFactory.cc | 7 ++++--- + poppler/PDFDocFactory.h | 3 ++- + poppler/StdinCachedFile.cc | 3 ++- + poppler/StdinCachedFile.h | 3 ++- + poppler/StdinPDFDocBuilder.cc | 7 ++++--- + poppler/StdinPDFDocBuilder.h | 5 +++-- + utils/pdffonts.cc | 4 ++-- + utils/pdfimages.cc | 4 ++-- + utils/pdfinfo.cc | 4 ++-- + utils/pdftoabw.cc | 4 ++-- + utils/pdftohtml.cc | 4 ++-- + utils/pdftoppm.cc | 2 +- + utils/pdftops.cc | 4 ++-- + utils/pdftotext.cc | 4 ++-- + 23 files changed, 76 insertions(+), 59 deletions(-) + +commit a04ee3ea6066c97d41fc40d5d97c600a1870855a +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Apr 5 16:50:58 2010 +0100 + + forgot my (C) + + poppler/Form.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ed723c8ac4a21a50d7d236cdcf7a635defd8dffb +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Apr 5 16:50:15 2010 +0100 + + The copy constructor of GooString never worked, so do not use it + + poppler/Form.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit a28be8e4009b86fdfd92da928def194225a736c6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Apr 5 16:49:06 2010 +0100 + + Add some const correctnes to GooString + + goo/GooString.cc | 12 ++++++------ + goo/GooString.h | 21 ++++++++++++--------- + 2 files changed, 18 insertions(+), 15 deletions(-) + +commit 46aee9e4d225b88a3dfd4afbe57259f337bb15d3 +Author: Hib Eris <hib@hiberis.nl> +Date: Mon Apr 5 14:36:09 2010 +0200 + + Use PDFDocFactory in utils + + utils/pdffonts.cc | 16 ++++++++-------- + utils/pdfimages.cc | 11 ++++++++++- + utils/pdfinfo.cc | 31 +++++++------------------------ + utils/pdftoabw.cc | 10 +++++++++- + utils/pdftohtml.cc | 10 +++++++++- + utils/pdftoppm.cc | 17 +++++++++++------ + utils/pdftops.cc | 9 ++++++++- + utils/pdftotext.cc | 14 +++++++------- + 8 files changed, 69 insertions(+), 49 deletions(-) + +commit d487a90688c4431075c9e4db040b3b02625e208f +Author: Hib Eris <hib@hiberis.nl> +Date: Mon Apr 5 14:35:52 2010 +0200 + + Add PDFDocFactory + + CMakeLists.txt | 2 + + poppler/Makefile.am | 2 + + poppler/PDFDocFactory.cc | 71 + ++++++++++++++++++++++++++++++++++++++++++++++ + poppler/PDFDocFactory.h | 42 +++++++++++++++++++++++++++ + 4 files changed, 117 insertions(+), 0 deletions(-) + +commit 869135920831fb0d15db734f3dcd7a67146cc241 +Author: Hib Eris <hib@hiberis.nl> +Date: Wed Feb 24 15:24:26 2010 +0100 + + Add CurlPDFDocBuilder + + CMakeLists.txt | 2 + + poppler/CurlPDFDocBuilder.cc | 46 + ++++++++++++++++++++++++++++++++++++++++++ + poppler/CurlPDFDocBuilder.h | 30 +++++++++++++++++++++++++++ + poppler/Makefile.am | 6 +++- + 4 files changed, 82 insertions(+), 2 deletions(-) + +commit ec5c6117a64f9cb03560091c4d7948d4287b6975 +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Feb 25 11:23:28 2010 +0100 + + Add LocalPDFDocBuilder and StdinPDFDocBuilder + + CMakeLists.txt | 4 +++ + poppler/LocalPDFDocBuilder.cc | 45 + +++++++++++++++++++++++++++++++++++++++++ + poppler/LocalPDFDocBuilder.h | 30 +++++++++++++++++++++++++++ + poppler/Makefile.am | 4 +++ + poppler/StdinPDFDocBuilder.cc | 42 + ++++++++++++++++++++++++++++++++++++++ + poppler/StdinPDFDocBuilder.h | 30 +++++++++++++++++++++++++++ + 6 files changed, 155 insertions(+), 0 deletions(-) + +commit 919b735d1c0b99bf72280aff8db87ba503954498 +Author: Hib Eris <hib@hiberis.nl> +Date: Sun Apr 4 11:05:35 2010 +0200 + + Add PDFDocBuilder + + CMakeLists.txt | 1 + + poppler/Makefile.am | 1 + + poppler/PDFDocBuilder.h | 32 ++++++++++++++++++++++++++++++++ + 3 files changed, 34 insertions(+), 0 deletions(-) + +commit 1ab07faf05661d6d92186974c4b1c279b6178747 +Author: Hib Eris <hib@hiberis.nl> +Date: Sun Apr 4 11:29:53 2010 +0200 + + Add PDFDoc::ErrorPDFDoc + + poppler/PDFDoc.cc | 14 ++++++++++++++ + poppler/PDFDoc.h | 3 +++ + 2 files changed, 17 insertions(+), 0 deletions(-) + +commit efc7e5efeddd8f70b7c74573d3194aba0a7d4631 +Author: Hib Eris <hib@hiberis.nl> +Date: Sun Apr 4 11:17:37 2010 +0200 + + Cleanup PDFDoc + + poppler/PDFDoc.cc | 40 +++++++++++++++------------------------- + poppler/PDFDoc.h | 3 ++- + 2 files changed, 17 insertions(+), 26 deletions(-) + +commit 08a3435e67ebf21beac2fefcbd21ad65f9293fd1 +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Feb 23 02:29:26 2010 +0100 + + Add HTTP support using libcurl + + With libcurl, poppler can handle documents over http. + + CMakeLists.txt | 18 ++++++++ + config.h.cmake | 6 +++ + configure.ac | 16 +++++++ + poppler/CurlCachedFile.cc | 95 + ++++++++++++++++++++++++++++++++++++++++ + poppler/CurlCachedFile.h | 39 ++++++++++++++++ + poppler/Makefile.am | 20 ++++++++ + poppler/poppler-config.h.cmake | 5 ++ + poppler/poppler-config.h.in | 5 ++ + utils/pdfinfo.cc | 16 ++++++- + 9 files changed, 219 insertions(+), 1 deletions(-) + +commit a87abf6ad9fb66d35a70c9412adc5d8ba2889b96 +Author: Hib Eris <hib@hiberis.nl> +Date: Wed Feb 24 14:46:59 2010 +0100 + + Use cached files to read from stdin in pdfinfo + + This fixes reading from stdin. + + utils/pdfinfo.cc | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +commit 958b04b14baf03c07492fa1cbd225d9968b9efc1 +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Feb 23 02:02:10 2010 +0100 + + Add support for reading a cached file from stdin + + CMakeLists.txt | 2 ++ + poppler/Makefile.am | 2 ++ + poppler/StdinCachedFile.cc | 37 +++++++++++++++++++++++++++++++++++++ + poppler/StdinCachedFile.h | 26 ++++++++++++++++++++++++++ + 4 files changed, 67 insertions(+), 0 deletions(-) + +commit 9539f75bd06150a3868209c5b04a75f5253722cc +Author: Hib Eris <hib@hiberis.nl> +Date: Sat Apr 3 15:08:20 2010 +0200 + + Add support for cached files + + CMakeLists.txt | 2 + + poppler/CachedFile.cc | 246 + +++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/CachedFile.h | 113 ++++++++++++++++++++++ + poppler/Makefile.am | 2 + + poppler/Stream.cc | 102 ++++++++++++++++++++ + poppler/Stream.h | 58 ++++++++++++ + 6 files changed, 523 insertions(+), 0 deletions(-) + +commit 8c6aefb8aa8929b9c47791d3062ed3ac8512626f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Apr 4 16:08:12 2010 +0200 + + [lexer] Correctly parse numbers with '+' sign + + See GNOME Bug: https://bugzilla.gnome.org/show_bug.cgi?id=614549 + + poppler/Lexer.cc | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit ab5044e451e3714d385295f0b4ce9a15c8f2562c +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Apr 4 12:32:42 2010 +0100 + + Add the -o[dd] and -e[ven] options to pdftoppm + + I've been using this patch forever and it's a pain to apply and + unapply + it each time + + utils/pdftoppm.1 | 6 ++++++ + utils/pdftoppm.cc | 8 ++++++++ + 2 files changed, 14 insertions(+), 0 deletions(-) + +commit 0e371fb628a7e7d0cc1656e6405af4c97dbebf5d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Apr 4 12:30:34 2010 +0100 + + Fix my roll optimization + + Thanks Carlos for noticing + + poppler/Function.cc | 12 +++++++----- + 1 files changed, 7 insertions(+), 5 deletions(-) + +commit a32f6f9ebaed3e4827b9dc6cb37e307c2798f521 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Mar 28 18:43:14 2010 +0200 + + [cairo] Do not change device offset of mask surface + + Also call cairo_paint() after set_source_rgb() to paint the + background. + Fixes bug #27208. + + poppler/CairoOutputDev.cc | 13 ++----------- + 1 files changed, 2 insertions(+), 11 deletions(-) + +commit efa5d9544d29252e3df36cc4e65c3d880b3c5172 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 27 22:11:49 2010 +0000 + + remove empty section + + NEWS | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +commit 5722df7a5387e43ec73f659ca58d2d07b9c4be3b +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 27 22:04:43 2010 +0000 + + poppler 0.13.2 + + CMakeLists.txt | 2 +- + NEWS | 39 +++++++++++++++++++++++++++++++++++++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + qt4/src/Doxyfile | 2 +- + 5 files changed, 43 insertions(+), 4 deletions(-) + +commit b82fd707747b9d87ebf3c8f7ce5ab70ccdf82809 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 27 22:00:58 2010 +0000 + + gtk-doc changes + + glib/reference/tmpl/poppler-action.sgml | 7 +++---- + glib/reference/tmpl/poppler-annot.sgml | 9 --------- + glib/reference/tmpl/poppler-private.sgml | 10 ++++++++++ + glib/reference/tmpl/poppler-unused.sgml | 8 ++++++++ + glib/reference/tmpl/poppler.sgml | 10 ++++++++++ + 5 files changed, 31 insertions(+), 13 deletions(-) + +commit ed0354be4eac615b80e7a868984cc527853788b4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 27 21:44:59 2010 +0000 + + some forgotten copyrights + + qt/poppler-page.cc | 2 +- + qt4/src/poppler-document.cc | 2 +- + qt4/src/poppler-movie.cc | 3 ++- + qt4/src/poppler-page.cc | 2 +- + 4 files changed, 5 insertions(+), 4 deletions(-) + +commit 2aedeedf9ef2e2d3eb17bc36d728e68c2f7af762 +Author: Hib Eris <hib@hiberis.nl> +Date: Sat Mar 27 14:38:27 2010 +0000 + + Correctly initialize actualText + + poppler/TextOutputDev.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit b53f9b203598555d6d706c3804aba013b8566921 +Author: Jan Engelhardt <jengelh@medozas.de> +Date: Sat Mar 27 13:23:42 2010 +0000 + + make qt3 detection use pkgconfig + + m4/qt.m4 | 101 + ++++--------------------------------------------------- + qt/Makefile.am | 4 +- + 2 files changed, 10 insertions(+), 95 deletions(-) + +commit 320d4cee46e108498440179d8f9eab22cd5383d9 +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 24 21:51:58 2010 +0100 + + Revert "no more needed" + + This reverts commit 24d6bc8c78cb3148db2098ae4d69bd744340cf52. + It is actually needed. + + cpp/tests/CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit af21b5ab366bfdda203c26a77f4ae6ed0e70f64e +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 23 00:13:21 2010 +0100 + + [CMake] remove the (now) unneeded stuff from Find{GLIB,GDK,GTK}.cmake, + and search for them + + this way each bit (GLIB, GDK, and GTK) can be enabled/disabled + independently from the others + + CMakeLists.txt | 4 +++- + cmake/modules/FindGDK.cmake | 14 +------------- + cmake/modules/FindGLIB.cmake | 14 +------------- + cmake/modules/FindGTK.cmake | 14 +------------- + 4 files changed, 6 insertions(+), 40 deletions(-) + +commit 9b93ed5ce6712ec4cdf58148628e95685c289ef5 +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 23 00:02:27 2010 +0100 + + [CMake] copy FindGTK.cmake as FindGLIB.cmake and FindGDK.cmake + + this way FindGTK.cmake can be split in the various parts + + cmake/modules/FindGDK.cmake | 34 ++++++++++++++++++++++++++++++++++ + cmake/modules/FindGLIB.cmake | 34 ++++++++++++++++++++++++++++++++++ + 2 files changed, 68 insertions(+), 0 deletions(-) + +commit 0ec21cae0b4623644c3efca1d2836a9f38f25737 +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 22 22:11:04 2010 +0100 + + [Qt] add the unhandled cases for 'actionOCGState' + + qt/poppler-page.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 5211e09595135b8e6c68efd1b8b689b518092b84 +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 22 22:07:44 2010 +0100 + + [CMake/cpp] move the BUILD_CPP_TESTS option to the main CMakeLists.txt + + CMakeLists.txt | 1 + + cpp/tests/CMakeLists.txt | 3 --- + 2 files changed, 1 insertions(+), 3 deletions(-) + +commit 24d6bc8c78cb3148db2098ae4d69bd744340cf52 +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 22 22:00:55 2010 +0100 + + no more needed + + cpp/tests/CMakeLists.txt | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit a07ef8f703ab896f89ed211a5780e4a669b04fc7 +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 22 22:00:15 2010 +0100 + + [CMake] revert addition of "-Wl,--no-add-needed" to the link flags, + if available + + for now it is safer without it + + cmake/modules/PopplerMacros.cmake | 6 ------ + 1 files changed, 0 insertions(+), 6 deletions(-) + +commit 86debcc9bba28a7c86f01ca9e63bde5fcd541846 +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 22 21:49:22 2010 +0100 + + [CMake] add "-ansi" to the CXXFLAGS only on Linux + + cmake/modules/PopplerMacros.cmake | 9 +++++++-- + 1 files changed, 7 insertions(+), 2 deletions(-) + +commit 0819acd52a2ce74f0e176626d7b2233e10232d53 +Merge: c4ddbe8 92738eb +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 22 21:43:01 2010 +0100 + + Merge branch 'master' of ssh://git.freedesktop.org/git/poppler/poppler + +commit 92738ebb8a9c7cfc879aae59c2cbdf3159f03cd3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Mar 22 20:28:15 2010 +0000 + + Add a search overload that takes doubles + + QRectF is evil and is float in some arch and causes search to loop + infinitely because of double->float conversion + + qt4/src/poppler-page.cc | 22 +++++++++++++++------- + qt4/src/poppler-qt4.h | 16 ++++++++++++++-- + 2 files changed, 29 insertions(+), 9 deletions(-) + +commit 0a895f14c8125c5de7b97e8e799459c431eb51cb +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Mon Mar 22 19:03:54 2010 +0000 + + correctly initialize the grayscale softmask color + + Fixes file with sha1sum e6e1576803a1bd74ad822eebbd750ee7b8357d25 + + poppler/SplashOutputDev.cc | 9 +++++++-- + 1 files changed, 7 insertions(+), 2 deletions(-) + +commit c4ddbe89df9e48343a9606728b7c182080d87ece +Author: Patrick Spendrin <ps_ml@gmx.de> +Date: Sat Mar 20 21:55:17 2010 +0100 + + [CMake] when the conf configuration backend is "win32", set the + required Internet Explorer version to 5.0 + + ... as done with autotools as well + + CMakeLists.txt | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 97da1f9d060493d9fb54a20e980c3f6e2b82c97e +Author: Pino Toscano <pino@kde.org> +Date: Sat Mar 20 17:51:07 2010 +0100 + + [CMake] check whether a link flag is supported before adding it to + the link flags + + this way we can add -Wl,--as-needed and -Wl,--no-add-needed only if + the current GCC/LD supports them + + cmake/modules/PopplerMacros.cmake | 23 ++++++++++++++++++++--- + 1 files changed, 20 insertions(+), 3 deletions(-) + +commit 223bce6d14e632f457a81b2ec091fe16369d2eb6 +Author: Pino Toscano <pino@kde.org> +Date: Sat Mar 20 14:08:58 2010 +0100 + + [CMake] with GCC, pass --as-needed and --no-add-needed to the linker + + --as-needed allows to avoid overlinking, linking only to the libraries + whose symbols are actually used + --no-add-needed makes the linker not use the NEEDED libraries + automatically, so we have to always make sure we specify all the + libraries actually used in a exe/lib + + cmake/modules/PopplerMacros.cmake | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit fc761f0d385708daaef1b95968532795b04f11b0 +Author: Pino Toscano <pino@kde.org> +Date: Sat Mar 20 14:05:59 2010 +0100 + + [CMake] poppler-dump uses parseargs.c which uses the poppler core API, + so it must link to it + + cpp/tests/CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit a210440b05d14efc53224a10e8b3ac7d508043b5 +Author: Pino Toscano <pino@kde.org> +Date: Sat Mar 20 14:04:02 2010 +0100 + + [CMake] poppler-glib uses the freetype API, so it must explicitly + link to it + + glib/CMakeLists.txt | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit f5d352666b92cee0390470d7b892ec8dcbf046a5 +Author: Pino Toscano <pino@kde.org> +Date: Sat Mar 20 14:03:19 2010 +0100 + + [CMake] pdftoabw uses the libxml2 API, so it must explicitly link + to it + + utils/CMakeLists.txt | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3fc2c4affe825f4aabcee161ec794338bd359403 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Mar 18 13:52:52 2010 +0100 + + [glib] Use g_slice_new/free instead of g_new/free to alloc/free + iterators + + glib/poppler-document.cc | 27 +++++++++++++-------------- + 1 files changed, 13 insertions(+), 14 deletions(-) + +commit 7bd6a8558646983669ce699f83d5ed42d7fce476 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Mar 18 13:34:03 2010 +0100 + + [glib] Move find_annot_movie_for_action() from page to action + + And remove _poppler_action_movie_set_movie(). + + glib/poppler-action.cc | 93 + ++++++++++++++++++++++++++++++++++++++++++------ + glib/poppler-page.cc | 79 ---------------------------------------- + glib/poppler-private.h | 2 - + 3 files changed, 82 insertions(+), 92 deletions(-) + +commit e5e3d310aa488638431dd85ac3383a12056674bf +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Mar 18 12:20:26 2010 +0100 + + Update copyright header + + poppler/Link.cc | 2 +- + poppler/Link.h | 1 + + 2 files changed, 2 insertions(+), 1 deletions(-) + +commit c76870178a031e437de3f9ed7baa64efb96955d6 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Mar 18 12:13:36 2010 +0100 + + [glib-demo] OCG State Actions demo + + glib/demo/utils.c | 64 + +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 64 insertions(+), 0 deletions(-) + +commit 456e42f91dfbf73b71a5dbdde13d7ccdb5637d79 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Mar 18 12:12:51 2010 +0100 + + [glib] Add support for OCG State actions + + glib/poppler-action.cc | 125 + ++++++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-action.h | 25 +++++++++- + glib/poppler.h | 1 + + 3 files changed, 150 insertions(+), 1 deletions(-) + +commit 4b109899e0732bbf65cacd875829e869e61eda48 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Mar 18 12:10:19 2010 +0100 + + [glib] Make get_layer_rbgroup() and get_layers() doc funcs public + for internal use + + glib/poppler-document.cc | 12 ++++++------ + glib/poppler-private.h | 3 +++ + 2 files changed, 9 insertions(+), 6 deletions(-) + +commit 38a55f6118debf994ce1fc41e987b0e3766047ba +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Mar 18 12:08:30 2010 +0100 + + Add support for Set-OCG-State actions + + Fixes bug #23522. + + poppler/Link.cc | 80 + +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Link.h | 31 +++++++++++++++++++++ + 2 files changed, 111 insertions(+), 0 deletions(-) + +commit bf398e53b0823d0a6272679858b67c5ffd704425 +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 17 23:06:44 2010 +0100 + + [CMake] fix pkg-config executable variable name + + CMakeLists.txt | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit ab1a37666704d6b15c19b694ee191327847c23da +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 17 23:04:01 2010 +0100 + + [CMake] proper way of looking for pkg-config + + cmake/modules/FindGTK.cmake | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 7f07a7dcea031f99a9a6d7c424184a2e69ee0062 +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 17 22:58:08 2010 +0100 + + [CMake] update FindFontconfig.cmake with a more recent version + + ... present in KDE (as before) + + cmake/modules/FindFontconfig.cmake | 15 +++++++++------ + 1 files changed, 9 insertions(+), 6 deletions(-) + +commit beee143ffbdc699ab19f10a01e5747200ea1927a +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 17 18:36:32 2010 +0100 + + [CMake] set the LINK_INTERFACE_LIBRARIES for the poppler and + poppler-cpp libraries + + this should reduce the libraries linked by frontends and utility + applications + + CMakeLists.txt | 1 + + cpp/CMakeLists.txt | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit 5ab791cb2a029edcde84b00a47165adfe4d98a98 +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 17 16:39:38 2010 +0100 + + [CMake] small cleanups in FindGTK.cmake + + - update the header will all the stuff found and the variables set + - add my copyright for this year + - remove no more useful UsePkgConfig inclusion + + cmake/modules/FindGTK.cmake | 17 ++++++++++++----- + 1 files changed, 12 insertions(+), 5 deletions(-) + +commit fcbc76d82e3059c8288fbdc8da117ac9b38a70f2 +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 17 16:36:41 2010 +0100 + + [CMake] switch gtk2 (gtk+, gdk-pixbuf, gthread, gio) search to use + the new pkg_check_modules() way + + cmake/modules/FindGTK.cmake | 27 ++------------------------- + 1 files changed, 2 insertions(+), 25 deletions(-) + +commit 5b8135e0899aa3578045eca40940a3495c48d895 +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 17 16:27:40 2010 +0100 + + [CMake] link poppler-glib to the gdk2 libraries, if gdk2 was found + + glib/CMakeLists.txt | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 3dc4979d72048e81ae3b2d60dab11e791ac95696 +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 17 16:26:04 2010 +0100 + + [CMake] switch gdk2 search to use the new pkg_check_modules() way + + cmake/modules/FindGTK.cmake | 13 +------------ + 1 files changed, 1 insertions(+), 12 deletions(-) + +commit 0ef3d899cb8dea75c97ae1038cac5006f97bc0d2 +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 17 16:05:07 2010 +0100 + + [CMake] switch glib2 search to use the new pkg_check_modules() way + + cmake/modules/FindGTK.cmake | 18 ++---------------- + 1 files changed, 2 insertions(+), 16 deletions(-) + +commit d2dc83cb8de481e44ea584eee77881978af920fa +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 17 15:56:16 2010 +0100 + + [CMake] rename GLIB_VERSION to GLIB_REQUIRED + + this way it matches autotools, and it is going to not conflict with + my next changes + + CMakeLists.txt | 4 ++-- + cmake/modules/FindGTK.cmake | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit 34accfe27305cae18e09243ab2a607287b86fa47 +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 17 13:55:09 2010 +0100 + + [CMake] set all the definitions for poppler-glib in a single place + + glib/CMakeLists.txt | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 3d93daf50c61019ca70f42e7ccf33897800b262a +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 17 13:49:22 2010 +0100 + + [CMake] no need to check for BUILD_GTK_TESTS for single tests + + poppler_add_test(... BUILD_GTK_TESTS ...) takes care of that already + + glib/CMakeLists.txt | 4 ++-- + test/CMakeLists.txt | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 946a11345d01d39538d22114e50aa3e179059883 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 20:24:25 2010 +0100 + + [build] Update cmake files + + CMakeLists.txt | 2 ++ + glib/CMakeLists.txt | 4 ++++ + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit 922c0fe392ba439453edb5b2e88b74f0caa586b3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 20:08:23 2010 +0100 + + [glib-demo] Rendition actions demo + + glib/demo/utils.c | 112 + +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 112 insertions(+), 0 deletions(-) + +commit 163b3f79d67543bc37b64875e30dcc9b7053e1d5 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 20:08:00 2010 +0100 + + [glib] Add support for rendition actions + + glib/poppler-action.cc | 22 ++++++++++++++++++++++ + glib/poppler-action.h | 14 +++++++++++++- + 2 files changed, 35 insertions(+), 1 deletions(-) + +commit d9b1e40751beddf48a8694b20bfcc4b4cb41060a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 20:06:45 2010 +0100 + + [glib] Add PopplerMedia representing a Rendition Media Clip + + glib/Makefile.am | 2 + + glib/poppler-media.cc | 302 + ++++++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-media.h | 53 +++++++++ + glib/poppler-private.h | 2 + + glib/poppler.h | 2 + + 5 files changed, 361 insertions(+), 0 deletions(-) + +commit 0224b81c4729a98a56b7a68054422ea655018d6a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 17:54:03 2010 +0100 + + [glib-demo] Add page number to annots demo + + glib/demo/annots.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 0153b892c63e4fccd0819150cf7b4213857a11c5 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 17:49:51 2010 +0100 + + [glib] Add poppler_annot_get_page_index() to get the page associated + to annot + + glib/poppler-annot.cc | 19 +++++++++++++++++++ + glib/poppler-annot.h | 1 + + 2 files changed, 20 insertions(+), 0 deletions(-) + +commit b47337ea91696fea8f42a68a6fa160681ab284b2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 17:49:17 2010 +0100 + + [annots] Checks screen annots associated with a rendition action + have a valid page ref + + poppler/Annot.cc | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 9417fd793ec8d806822669aa614193073e7dfe50 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 16:52:30 2010 +0100 + + [annots] Save page index of the page associated with the annot + + poppler/Annot.cc | 14 +++++--------- + poppler/Annot.h | 4 ++-- + 2 files changed, 7 insertions(+), 11 deletions(-) + +commit 36b76a5d01b74c6381433b6f6f7ffb9f02696a60 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 14:12:11 2010 +0100 + + Rework LinkRendition to follow the spec + + poppler/Link.cc | 68 + ++++++++++++++++++++++++++++++++++--------------------- + poppler/Link.h | 12 ++++++--- + 2 files changed, 50 insertions(+), 30 deletions(-) + +commit 7b5885ee7d2026df9a6e87327b6d02f37d79b8b2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 12:25:12 2010 +0100 + + [glib-demo] Annot screen demo + + glib/demo/annots.c | 17 +++++++++++++++++ + 1 files changed, 17 insertions(+), 0 deletions(-) + +commit bdb76c7cb89bcb6fb139b0ef348d96b7780d57ed +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 12:24:19 2010 +0100 + + [glib] Add support for screen annotation + + Based on patch by Sam Kaplan. + + glib/poppler-annot.cc | 75 + ++++++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-annot.h | 8 +++++ + glib/poppler-page.cc | 3 ++ + glib/poppler-private.h | 1 + + glib/poppler.h | 1 + + 5 files changed, 88 insertions(+), 0 deletions(-) + +commit 54892b1375e360113432b07c6ba058f861d21fe8 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 12:21:30 2010 +0100 + + [annots] Save the action already parsed in AnnotScreen + + poppler/Annot.cc | 9 +++++++-- + poppler/Annot.h | 5 +++-- + 2 files changed, 10 insertions(+), 4 deletions(-) + +commit 5a84a2d749478f19631dbfad2be06ec4ea85038c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 11:16:17 2010 +0100 + + [glib-demo] Annot and links movie demo + + glib/demo/annots.c | 20 +++++++++ + glib/demo/utils.c | 115 + +++++++++++++++++++++++++++++++++++++++++++++++++++- + glib/demo/utils.h | 3 + + 3 files changed, 137 insertions(+), 1 deletions(-) + +commit 2cf5ee4f62089df099f78cd4d39a4eb7589d1b47 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 11:04:17 2010 +0100 + + [glib] Add support for movie actions + + Based on patch by Hugo Mercier. + + glib/poppler-action.cc | 35 ++++++++++++++++++--- + glib/poppler-action.h | 15 ++++++++- + glib/poppler-page.cc | 81 + +++++++++++++++++++++++++++++++++++++++++++++++- + glib/poppler-private.h | 2 + + 4 files changed, 125 insertions(+), 8 deletions(-) + +commit 132b6f072fefd231d42f31626f1b5009c4e8319e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 10:56:23 2010 +0100 + + [glib] Add support for movie annotations + + Based on patch by Hugo Mercier. + + glib/poppler-annot.cc | 97 + ++++++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-annot.h | 10 +++++ + glib/poppler-page.cc | 3 + + glib/poppler-private.h | 1 + + glib/poppler.h | 1 + + 5 files changed, 112 insertions(+), 0 deletions(-) + +commit aecad2bb12be44825d273e364ec6a0444dac5605 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 15 10:48:03 2010 +0100 + + [glib] Add PopplerMovie class + + glib/Makefile.am | 2 + + glib/poppler-movie.cc | 140 + ++++++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-movie.h | 42 ++++++++++++++ + glib/poppler-private.h | 2 + + glib/poppler.h | 2 + + 5 files changed, 188 insertions(+), 0 deletions(-) + +commit 5b3234a16e0d465bff2b5e277cb64b4f4b0a8dbd +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Mar 14 16:10:26 2010 +0100 + + Split Movie class into Rendition and Movie classes to follow the spec + + poppler/Annot.cc | 16 ++- + poppler/Link.cc | 10 +- + poppler/Link.h | 6 +- + poppler/Makefile.am | 2 + + poppler/Movie.cc | 438 + +++++----------------------------------------- + poppler/Movie.h | 138 +++------------ + poppler/Rendition.cc | 400 + ++++++++++++++++++++++++++++++++++++++++++ + poppler/Rendition.h | 157 +++++++++++++++++ + qt4/src/poppler-movie.cc | 9 +- + 9 files changed, 657 insertions(+), 519 deletions(-) + +commit f9c163730478e3b6d8a1e73dbae6c52c28ae1e84 +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 8 14:49:12 2010 +0100 + + [Qt4] include Object.h and Annot.h, now needed + + qt4/src/poppler-movie.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit a00532f509c19c5455e0db5068db95dd4583e8dd +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 8 14:22:53 2010 +0100 + + Check for Null instead of None to know whether a dict entry is present + + Dict::lookup returns obj->initNull() when the key is not found. + + poppler/Movie.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit b51e66c9a7e2f7f39ae1edf8bda02a7bc1ad4ebd +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 8 14:15:22 2010 +0100 + + [annots] Create appearance stream for Movie Annotations when not + defined + + See bug #23108 + + poppler/Annot.cc | 103 + +++++++++++++++++++++++++++++++++++++++++++++++++++++- + poppler/Annot.h | 4 ++- + 2 files changed, 105 insertions(+), 2 deletions(-) + +commit fae59411852e5c2c45825c5ea963318f1ed5dc6a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 8 14:07:09 2010 +0100 + + Fix handling of poster in Movie + + Poster is not always a stream, it can be a boolean too. Also, get the + reference when available instead of fetching the stream. + + poppler/Movie.cc | 25 ++++++++++++------------- + poppler/Movie.h | 6 ++++-- + 2 files changed, 16 insertions(+), 15 deletions(-) + +commit a451f83d101bf265a1e7e2a17c0b320895e70f4e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Mar 7 12:22:57 2010 +0100 + + Save width, height (aspect) in Movie object and provide getAspect() + method + + poppler/Movie.cc | 3 ++- + poppler/Movie.h | 4 ++++ + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit f88d469f860da17055fc4b98b64aef241fcf0185 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Mar 6 12:33:40 2010 +0100 + + Move Movie objects parsing code from Annot to Movie + + poppler/Annot.cc | 244 + ++------------------------------------------ + poppler/Annot.h | 73 +------------- + poppler/Link.cc | 4 +- + poppler/Movie.cc | 255 + ++++++++++++++++++++++++++++++++++++++-------- + poppler/Movie.h | 25 ++++- + qt4/src/poppler-movie.cc | 11 ++- + 6 files changed, 246 insertions(+), 366 deletions(-) + +commit ec9138b574c7226ad733880d3d43b86bb72073f4 +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 23:17:50 2010 +0100 + + [autotools] add also cpp/tests/CMakeLists.txt to the "dist files" + + Makefile.am | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit ef3258d6fc57e7a62d951cc826804e50e8e1b526 +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 23:14:12 2010 +0100 + + [autotools] fix location of poppler-config.h.cmake + + Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit fd1d9c882997ff35acd5a458e9dfeba3ad6c8b25 +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 22:42:06 2010 +0100 + + [CMake] just enable what needed each time + + CMakeLists.txt | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 476bde472a7e694afde96a04ea335fe9582d6fad +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 22:39:45 2010 +0100 + + [CMake] add small description for the zlib option + + taken from two bits in configure.ac + + CMakeLists.txt | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1267d7e0c36e262984070a3b55fea46e7289a4b4 +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 19:34:03 2010 +0100 + + [CMake] add a note about gtk-doc not supported yet + + CMakeLists.txt | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 201b18ad0837e84d874b56e1b0469d1b2d45378b +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 19:30:36 2010 +0100 + + [CMake] sync with poppler-config.h.in: add + WITH_FONTCONFIGURATION_{FONTCONFIG,WIN32} + + poppler/poppler-config.h.cmake | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +commit 0d0044e8cc2d406f066338102ec73e1b56214cc3 +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 19:25:27 2010 +0100 + + [CMake] move poppler-config.h.cmake in the poppler subdirectory, + where poppler-config.h.in is + + CMakeLists.txt | 2 +- + poppler-config.h.cmake | 90 + ---------------------------------------- + poppler/poppler-config.h.cmake | 90 + ++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 91 insertions(+), 91 deletions(-) + +commit f785e29a901d2c76204dd26e9585446fdd817ebd +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 18:35:34 2010 +0100 + + [CMake] remove the generated poppler-enums.{c,h} in the clean target + + ie usually when doing `make clean' + + glib/CMakeLists.txt | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 369604603375dbe3516136b6f8f9d0c26e0b744f +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 18:26:45 2010 +0100 + + [CMake] use the --template option of glib-mkenums (like done with + autotools) + + glib/CMakeLists.txt | 24 ++++-------------------- + 1 files changed, 4 insertions(+), 20 deletions(-) + +commit bbcbb34fec10c90edd5960bdbcc6849bc8f39526 +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 17:34:40 2010 +0100 + + [CMake] set POPPLER_GLIB_DISABLE_DEPRECATED and + POPPLER_GLIB_DISABLE_SINGLE_INCLUDES as done with autotools + + CMakeLists.txt | 6 ++++++ + glib/CMakeLists.txt | 6 +++++- + 2 files changed, 11 insertions(+), 1 deletions(-) + +commit 190fa971c12ca1b3007f6ba349a77a7c15c47490 +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 17:24:25 2010 +0100 + + reorder to match what's in the correspondent .in + + glib/poppler-features.h.cmake | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ff46def8b178420a86a974ec2ce767a538bba8be +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 17:23:16 2010 +0100 + + [CMake] GDK_FEATURE is no more needed here + + glib/CMakeLists.txt | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 1eb8026a3060ef61a88c535177510f7ac7e7fc25 +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 17:19:58 2010 +0100 + + [CMake] set in one place whether to build the glib frontend + + CMakeLists.txt | 11 ++++++----- + 1 files changed, 6 insertions(+), 5 deletions(-) + +commit a1a6f23e2345814e147a72211ce9139555385223 +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 17:09:58 2010 +0100 + + [CMake] correctly set the GLIB_REQ stuff + + CMakeLists.txt | 1 + + poppler-glib.pc.cmake | 2 +- + 2 files changed, 2 insertions(+), 1 deletions(-) + +commit 0f2e5d6925c5938281d9bafc297a43867c4a915b +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 17:03:21 2010 +0100 + + [CMake] move the minimum GLib version to the main CMakeLists.txt + + CMakeLists.txt | 1 + + cmake/modules/FindGTK.cmake | 2 +- + 2 files changed, 2 insertions(+), 1 deletions(-) + +commit efdffba45d15b538dbfb294403e99f3a6470b4d9 +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 16:58:27 2010 +0100 + + [CMake] align the GDK stuff (GDK_{FEATURE,REQ}) to what done with + autotools + + CMakeLists.txt | 6 +++++- + poppler-glib.pc.cmake | 2 +- + 2 files changed, 6 insertions(+), 2 deletions(-) + +commit cfecc69b7f05920f543ee7e9aafeafaa4c3506fb +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 16:49:14 2010 +0100 + + [CMake] apparently there's not a minimum version requirement for GDK, + so drop the check + + cmake/modules/FindGTK.cmake | 5 +---- + 1 files changed, 1 insertions(+), 4 deletions(-) + +commit 8ff1cf03d2607b0f13bbbbf272f2b03d8927bd24 +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 16:47:21 2010 +0100 + + [CMake] first look for Cairo, then for GLib/GDK/GTK + + this starts to align to the searches done with autotools + also, move the CAIRO_FEATURE to the main CMakeLists.txt + + CMakeLists.txt | 19 +++++++++++-------- + glib/CMakeLists.txt | 1 - + 2 files changed, 11 insertions(+), 9 deletions(-) + +commit bcaf62b8e252594530d3050761ba563cf3b1fb6e +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 16:00:03 2010 +0100 + + [CMake] enhance/rewrite a bit the FindCairo module + + make use of some features of CMake 2.6 (as we require it): + - newer pkg-config handling (aka pkg_check_modules()) + - version checking for modules (PACKAGE_FIND_VERSION*) + - find_package_handle_standard_args() + also, after the pkg-config search to win32, search for cairo again + (double-check plus real search for win32) + furthermore, introduce CAIRO_INCLUDE_DIRS with the include paths + requires (kind of "obsoletes" CAIRO_CFLAGS, left there in case it + is used again) + + apply the changes to the rest of the build system (specify the + version needed, use the correct variable for includes) + + CMakeLists.txt | 2 +- + cmake/modules/FindCairo.cmake | 64 + ++++++++++++++++++++++++++-------------- + glib/CMakeLists.txt | 2 +- + 3 files changed, 43 insertions(+), 25 deletions(-) + +commit c96aa0f5fc74ae04f483485b787aaf65f1791991 +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 02:01:13 2010 +0100 + + add Patrick's copyright notices + + cpp/poppler-global.h | 1 + + goo/gtypes.h | 14 ++++++++++++++ + poppler/GlobalParams.cc | 1 + + poppler/SplashOutputDev.cc | 1 + + 4 files changed, 17 insertions(+), 0 deletions(-) + +commit 3311bedd2eb831ef1fd553f3f50960331cf6885f +Author: Patrick Spendrin <ps_ml@gmx.de> +Date: Sun Mar 7 01:56:15 2010 +0100 + + MSVC: disable for the 'ustring' class the warning C4251 (which does + not apply) + + cpp/poppler-global.h | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +commit 9efa18397bd05fbd27c7811fa6e0f34ce94012e0 +Author: Patrick Spendrin <ps_ml@gmx.de> +Date: Sun Mar 7 01:48:03 2010 +0100 + + MSVC: disable warning C4800, which is of no use for now + + goo/gtypes.h | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 3a88d1bf8d2c5a9e8014e0d46e24c9ec06556469 +Author: Patrick Spendrin <ps_ml@gmx.de> +Date: Sun Mar 7 01:26:10 2010 +0100 + + MSVC: no isfinite(), so provide it using _finite() + + poppler/SplashOutputDev.cc | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 7774912c46f832f25c51b4cfc0e9430b1cd7fa1f +Author: Patrick Spendrin <ps_ml@gmx.de> +Date: Sun Mar 7 01:22:31 2010 +0100 + + MSVC: do not force constness here, so the right overload will + be chosen + + poppler/GlobalParams.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit cf07a5d85b402b6956c9605fbdc88bddcb94a3cf +Author: Pino Toscano <pino@kde.org> +Date: Sun Mar 7 00:49:07 2010 +0100 + + [CMake] show end yes/no message about the GDK usage + + just like done with autotools + + CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 42c98f8eabe304d5e3dc8c1ebdd5b0b6c221e696 +Author: Pino Toscano <pino@kde.org> +Date: Sat Mar 6 17:18:08 2010 +0100 + + [CMake] make the font configuration backend selection take a string + (like with autotools) + + this way it is possible to set the cmake variable FONT_CONFIGURATION + to either "win32" (default on windows) or "fontconfig" (default + elsewhere) to the font backend to use + as a consequence, make fontconfig a requirement only if the font + backend chosen is "fontconfig" + + CMakeLists.txt | 39 +++++++++++++++++++++++++++++---------- + 1 files changed, 29 insertions(+), 10 deletions(-) + +commit bda6e7cd089f2970af2e9540b4415633ffcf0ebb +Author: Pino Toscano <pino@kde.org> +Date: Sat Mar 6 17:13:30 2010 +0100 + + [CMake] add a show_end_message() macro to show a generic string + as value + + make show_end_message_yesno() call it with the proper "yes" or + "no" string + + cmake/modules/PopplerMacros.cmake | 9 +++++++-- + 1 files changed, 7 insertions(+), 2 deletions(-) + +commit d313c0f508711b3b7166b84608c43ebf1f07194b +Author: Pino Toscano <pino@kde.org> +Date: Sat Mar 6 17:08:59 2010 +0100 + + [CMake] rename the show_end_message() macro to + show_end_message_yesno() + + CMakeLists.txt | 26 +++++++++++++------------- + cmake/modules/PopplerMacros.cmake | 4 ++-- + 2 files changed, 15 insertions(+), 15 deletions(-) + +commit 0425ff835fa26df5e25e628a6c56f3a180713905 +Author: Pino Toscano <pino@kde.org> +Date: Fri Mar 5 22:21:56 2010 +0100 + + update copyright + + poppler/ArthurOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit c5ea135ca58e112110be3ae10d887f3188172765 +Author: Pino Toscano <pino@kde.org> +Date: Fri Mar 5 22:14:57 2010 +0100 + + [arthur] update the miter limit + + poppler/ArthurOutputDev.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 552f344b3e3df7c796afa6946149b0a5590cc4f7 +Author: Pino Toscano <pino@kde.org> +Date: Fri Mar 5 22:04:39 2010 +0100 + + [arthur] update the line dash style + + poppler/ArthurOutputDev.cc | 12 +++++++++++- + 1 files changed, 11 insertions(+), 1 deletions(-) + +commit bc42ee05fceef0d0dd2ab0587c184dfc37cf29bf +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Mar 5 18:54:32 2010 +0000 + + fix copyright year + + poppler/CairoOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b21461e91ed671ef29fd3cf4780fda44f82a0679 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Fri Mar 5 15:14:08 2010 +0100 + + [cairo] Close image stream before resetting it again + + poppler/CairoOutputDev.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 866bcc7edb47fe11355081045e2d316a4d530649 +Author: Pino Toscano <pino@kde.org> +Date: Thu Mar 4 14:19:50 2010 +0100 + + [Qt4] no need to save&restore on a newly created painter + + qt4/src/poppler-page.cc | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +commit 654698b556eb53eab7c2d55fc6b3fdd9e35173bb +Author: Pino Toscano <pino@kde.org> +Date: Thu Mar 4 13:16:11 2010 +0100 + + [Qt4] use Arthur unconditionally + + arthur is no more tied to splash, so can be used in an occasion + + qt4/src/poppler-document.cc | 2 +- + qt4/src/poppler-page.cc | 4 +--- + 2 files changed, 2 insertions(+), 4 deletions(-) + +commit 41931b6310d2ae81e622db904246f019ceb8410d +Author: Pino Toscano <pino@kde.org> +Date: Thu Mar 4 13:13:11 2010 +0100 + + [Qt4] compile Arthur unconditionally + + as the arthur output dev does not require splash anymore, we can + always compile it with poppler-qt4 + + poppler/Makefile.am | 4 ++-- + qt4/src/CMakeLists.txt | 6 +----- + qt4/src/Makefile.am | 6 +----- + 3 files changed, 4 insertions(+), 12 deletions(-) + +commit 48a29e2bbc9aa9bd0cb2775a2365c0ffdeb6ce87 +Author: Pino Toscano <pino@kde.org> +Date: Thu Mar 4 13:11:43 2010 +0100 + + [Arthur] make ArthurOutputDev compile even with Splash disabled + + text rendering is disabled in that case for now + + poppler/ArthurOutputDev.cc | 11 ++++++++++- + 1 files changed, 10 insertions(+), 1 deletions(-) + +commit 2013a19b6457753890affad8c4049f2ce4627df7 +Author: Pino Toscano <pino@kde.org> +Date: Thu Mar 4 13:02:43 2010 +0100 + + [CMake/tests] compile gtk-splash-test only if splash is enabled + + test/CMakeLists.txt | 14 +++++++++----- + 1 files changed, 9 insertions(+), 5 deletions(-) + +commit ae740c5cfefbae13f82b750e39fa3dbbdc94858b +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 2 23:22:06 2010 +0100 + + [cpp] update the copyrights + + cpp/poppler-document-private.h | 2 +- + cpp/poppler-document.cpp | 2 +- + cpp/poppler-embedded-file.cpp | 2 +- + cpp/poppler-embedded-file.h | 2 +- + cpp/poppler-global.cpp | 3 ++- + cpp/poppler-global.h | 2 +- + cpp/poppler-page.cpp | 2 +- + cpp/poppler-page.h | 2 +- + cpp/poppler-rectangle.h | 2 +- + cpp/poppler-toc.cpp | 2 +- + cpp/poppler-version.cpp | 2 +- + cpp/tests/poppler-dump.cpp | 2 +- + 12 files changed, 13 insertions(+), 12 deletions(-) + +commit 24b1d8d0b4ae7cea9fbc331f19cd5ce3917b8b4d +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 2 23:15:56 2010 +0100 + + [cpp] {from,to}_utf_8() -> {from,to}_utf8() + + cpp/poppler-global.cpp | 4 ++-- + cpp/poppler-global.h | 4 ++-- + cpp/poppler-page.cpp | 2 +- + 3 files changed, 5 insertions(+), 5 deletions(-) + +commit 690af1bc58de1ebe710c5e599f1cb635e4838fc8 +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Mar 2 16:33:04 2010 +0100 + + [cpp] define poppler_cpp_EXPORTS when building with autotools as well + + fixes building on Windows + + cpp/Makefile.am | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 7492a376e7e5ec35534276ac15485123645617b0 +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 2 22:16:07 2010 +0100 + + [cpp/tests] use gmtime() when gmtime_r() is not available + + cpp/tests/poppler-dump.cpp | 9 ++++++++- + 1 files changed, 8 insertions(+), 1 deletions(-) + +commit de013cc14a0621782c53f481ed7e559f241855a3 +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 2 22:05:25 2010 +0100 + + [cpp] include config.h _after_ the other includes + + cpp/poppler-global.cpp | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 388e5d6aebcabbfc90894c86248159c63701cb0a +Author: Hib Eris <hib@hiberis.nl> +Date: Tue Mar 2 15:51:23 2010 +0100 + + Use ICONV_CONST when necessary + + cpp/poppler-global.cpp | 10 ++++++---- + 1 files changed, 6 insertions(+), 4 deletions(-) + +commit aaa58b26733a2f7c778632da4942b588050cf33f +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 2 21:53:55 2010 +0100 + + [CMake] properly define ICONV_CONST + + CMakeLists.txt | 1 - + cmake/modules/FindIconv.cmake | 3 +++ + config.h.cmake | 2 +- + 3 files changed, 4 insertions(+), 2 deletions(-) + +commit 6304b0d8959fccf96b030c757d78e845d04757e4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 28 15:33:53 2010 +0100 + + poppler 0.13.1 + + CMakeLists.txt | 2 +- + NEWS | 33 +++++++++++++++++++++++++++++++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + qt4/src/Doxyfile | 2 +- + 5 files changed, 37 insertions(+), 4 deletions(-) + +commit 9eac71862915c851c07075e3ca3af82eb9e4e775 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 28 15:33:19 2010 +0100 + + Make sure the private headers end up in the tarball on make dist + + cpp/Makefile.am | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit b488172311c2921ab4c365d71ad8b1ab7f596c71 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 28 14:25:36 2010 +0100 + + Add copyright notices + + poppler/CairoFontEngine.cc | 3 ++- + poppler/CairoFontEngine.h | 2 +- + 2 files changed, 3 insertions(+), 2 deletions(-) + +commit 5453cff5b7cb47cadfdae585a58409117af8c1f1 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Feb 28 13:51:22 2010 +0100 + + [cairo] Select filter for images based on scale factor + + When rendering images and interpolate flag is disabled or missing, we + always interpolate unless scale factor is >= 400% + + See bugs #25268, #9860 + + poppler/CairoOutputDev.cc | 64 + +++++++++++++++++++++++++++++++++------------ + poppler/CairoOutputDev.h | 2 + + 2 files changed, 49 insertions(+), 17 deletions(-) + +commit e65456cbd5cae2750426aabeb2d66a10537616f0 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Feb 28 13:13:13 2010 +0100 + + [cairo] Refactor scaled size computation into a new method + + poppler/CairoOutputDev.cc | 52 + ++++++++++++++++++++++---------------------- + poppler/CairoOutputDev.h | 2 + + 2 files changed, 28 insertions(+), 26 deletions(-) + +commit 32aa9ae7d0087298661829265de00e93398272b3 +Author: Jan Kümmel <jan+freedesktop@snorc.org> +Date: Sat Feb 27 17:58:46 2010 +0100 + + [cairo] Omit writing of embedded fonts into tempary files + + Fixes bug #26694. + + poppler/CairoFontEngine.cc | 146 + ++++++++++++++++++++++++-------------------- + 1 files changed, 80 insertions(+), 66 deletions(-) + +commit 7ba52a32343ca73730a80b64c136e3f03348e7d9 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Feb 27 17:42:46 2010 +0100 + + [cairo] Remove unused 'face' from CairoFreeTypeFont class + + poppler/CairoFontEngine.cc | 6 ++---- + poppler/CairoFontEngine.h | 3 +-- + 2 files changed, 3 insertions(+), 6 deletions(-) + +commit 7c3140c88c00282e10888143fffe3c402d48fb05 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Feb 27 13:13:47 2010 +0100 + + Don't use '\' character in PostScript names + + poppler/PSOutputDev.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 8e354a15a1861719c00799937ad9f9bb1bb71e9f +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Wed Feb 24 18:58:11 2010 +0000 + + Fix remaining part of 26243 + + Thomas says: The "gn" is colored with a shading pattern, but the + shading has a bbox, + so it is clipped to this bbox, too. But when coloring text or masks in + pattern colorspace, this is definely wrong. + + poppler/Gfx.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit fcbc571a98775b1daa8f562fc8674fb2d15b6626 +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 23 17:02:47 2010 +0100 + + [cpp] make checksum() return an array of data, instead of a string + + a checksum is a sequence of values after all, so just return it as + such instead of pretending it is a string + accordingly adapt the mini dump application + + cpp/poppler-embedded-file.cpp | 10 ++++++++-- + cpp/poppler-embedded-file.h | 2 +- + cpp/tests/poppler-dump.cpp | 4 ++-- + 3 files changed, 11 insertions(+), 5 deletions(-) + +commit fbefb9bef9f7a099d51919255a98f412d1e1d696 +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 23 16:56:47 2010 +0100 + + [cpp apidox] add API documentation for the 'embedded_file' class + + cpp/poppler-embedded-file.cpp | 43 + +++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 43 insertions(+), 0 deletions(-) + +commit 6d39cca0a035fc656d3b86ba66dedaccee532fcb +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 23 16:41:56 2010 +0100 + + [cpp apidox] add API documentation for the 'toc' and 'toc_item' + classes + + cpp/poppler-toc.cpp | 57 + +++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 57 insertions(+), 0 deletions(-) + +commit 857e4ceb26d959c48c7af6bff53ca1bfe5307236 +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 23 15:39:58 2010 +0100 + + [cpp] when the loading of the document fails, put back the data + where it was before + + cpp/poppler-document-private.h | 2 +- + cpp/poppler-document.cpp | 10 +++++++--- + 2 files changed, 8 insertions(+), 4 deletions(-) + +commit 7838b182143086192ac8dcf571da0ce1743619e2 +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 23 00:04:09 2010 +0100 + + [cpp] add the directory of the generated html apidox to the ignore + list + + cpp/.gitignore | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 71a38a23a9db5cac872c666283b7abcb1462210c +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 22 23:43:34 2010 +0100 + + [cpp] add page::text() to get the text inside a page region + + cpp/poppler-page.cpp | 16 ++++++++++++++++ + cpp/poppler-page.h | 1 + + 2 files changed, 17 insertions(+), 0 deletions(-) + +commit 4c75360233bc67f097551980a46ecce976927220 +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 22 23:05:53 2010 +0100 + + [cpp] add page::search() + + cpp/poppler-page.cpp | 51 + ++++++++++++++++++++++++++++++++++++++++++++++++++ + cpp/poppler-page.h | 8 +++++++ + 2 files changed, 59 insertions(+), 0 deletions(-) + +commit 8932c53a084083eb42d109dd17bac3ad41ce65b5 +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 22 22:39:36 2010 +0100 + + [cpp] add getters and setters for left/top/right/bottom + + cpp/poppler-rectangle.h | 18 ++++++++++++++++++ + 1 files changed, 18 insertions(+), 0 deletions(-) + +commit 8e1ea57f558fa3a1702a17d79b5aaffc486c6a56 +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 22 22:19:51 2010 +0100 + + [cpp] add a global enum for case sensitivity + + cpp/poppler-global.h | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit ae41b087de8f0a7d525320dcf1d64ff22fe982b6 +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 22 19:06:21 2010 +0100 + + [cpp apidox] doxygen configuration for poppler-cpp + + cpp/Doxyfile | 1551 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 1551 insertions(+), 0 deletions(-) + +commit 1a36a7bcc684065478a3ade2c2938f0e3672140a +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 22 19:05:49 2010 +0100 + + [cpp apidox] very small start of intro page + + cpp/Mainpage.dox | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit 85e052ab7a4c462143325ecf60eebba35411b790 +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 22 18:53:20 2010 +0100 + + [cpp apidox] start adding API documentation for the global 'poppler' + namespace + + ... including the 'convert_date' function and faking the 'noncopyable' + class + + cpp/poppler-global.cpp | 16 ++++++++++++++++ + 1 files changed, 16 insertions(+), 0 deletions(-) + +commit b01608f91fb6cf6e9c4fb6e6ee3cb57517a766bf +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 22 18:52:24 2010 +0100 + + [cpp apidox] exclude the 'detail' namespace from apidox extraction + + this includes also the 'noncopyable' typedef, but that will be + handled differently + + cpp/poppler-global.h | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit f17a7a8cfdeabb3ced3ba8d42c869d892c528e13 +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 22 18:51:30 2010 +0100 + + [cpp apidox] add API documentation for the version functions + + cpp/poppler-version.cpp | 12 ++++++++++++ + 1 files changed, 12 insertions(+), 0 deletions(-) + +commit f6c4bbddc7d04c0b1a6b25c41cbf6d81ae40cc0c +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 22 18:50:54 2010 +0100 + + [cpp apidox] start adding API documentation for 'document' + + cpp/poppler-document.cpp | 182 + ++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 182 insertions(+), 0 deletions(-) + +commit cbb7519904d9b6395d0128e16a79324e4b8bfcc0 +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 22 13:15:11 2010 +0100 + + [CMake] no more need to build system check for the Cairo blend modes + + followup of 880890c14e99a954b365a3a6b59deeffa5304d30 for the cmake + build system + + cmake/modules/FindCairo.cmake | 18 ------------------ + config.h.cmake | 3 --- + 2 files changed, 0 insertions(+), 21 deletions(-) + +commit 80f47bbf45faf751c661c1d0931e8e1da622b8ca +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Feb 22 12:43:06 2010 +0100 + + [cairo] Use cairo_surface_set_mime_data() when printing + + When rendering a jpeg image for printing, using + cairo_surface_set_mime_data() to attach the jpeg stream to the + surface reduces drastically the size of the output file. + + poppler/CairoOutputDev.cc | 42 + ++++++++++++++++++++++++++++++++++++++++++ + poppler/CairoOutputDev.h | 1 + + 2 files changed, 43 insertions(+), 0 deletions(-) + +commit d63293af6dbff65f160be0118b1580c03a1aab56 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Nov 27 09:52:23 2009 +0100 + + [cairo] Turn EXTEND_PAD off when printing + + poppler/CairoOutputDev.cc | 98 + ++++++++++++++++++++++++++++++-------------- + 1 files changed, 67 insertions(+), 31 deletions(-) + +commit 880890c14e99a954b365a3a6b59deeffa5304d30 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Feb 22 11:01:05 2010 +0100 + + [cairo] Use CAIRO_VERSION macros to check whether blend modes are + available + + configure.ac | 24 ------------------------ + poppler/CairoOutputDev.cc | 4 ++-- + 2 files changed, 2 insertions(+), 26 deletions(-) + +commit 5c300ce00b5c59da767ca1ffec12f96f0ebbe701 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 21 21:20:10 2010 +0100 + + [Qt4/apidox] fix typo + + qt4/src/poppler-qt4.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3f89ccf871e2f4a14129ad3e986b8cd19cdf129c +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 21 21:06:31 2010 +0100 + + [CMake] set the CXXFLAGS in a better way + + CMakeLists.txt | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit a18dab9e53a20a76eb46fa3a868fffdd3c754ce2 +Merge: fa09892 f3862f7 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 21 19:56:38 2010 +0100 + + Merge remote branch 'origin/cpp-frontend' + + * origin/cpp-frontend: (34 commits) + [cpp/tests] poppler-dump: show a string for the font type + [cpp/tests] poppler-dump: show the orientation of the pages + [cpp/tests] poppler-dump: a bit less output in permissions lines + [cpp/tests] poppler-dump: add --show-all to show all the information + [cpp] use iconv for the utf8 <-> utf16 conversions + [cpp] add the build system stuff for iconv, mandatory for cpp + [cpp] fixup unicode GooString <-> ustring conversions + [cpp] fix installation of poppler-version.h with autotools and + builddir != srcdir + simplify + [cpp/tests] add a simple poppler-dump test + [cpp] use the correct index (instead of an uninitialized variable) + [cpp] properly delete the children of a toc item + [cpp] actually implement toc::root() + [cpp] fix the reference to the vector data + [cpp] fix the reference to the vector data + [cpp] add destructor for 'rectangle' + [cpp] add out stream operators for rect and rectf + [cpp] add namespace to namespace functiond to link properly + [cpp] add default empty parameters for the passwords of the document + loading functions + [cpp] add "human friendly" output representation for byte_array + ... + + Conflicts: + config.h.cmake + +commit fa0989297e95b6adebed71336ea206d1b279ab24 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 21 16:59:57 2010 +0000 + + Detect the need for nanosleep in solaris + + Fixes bug 26650 + + ConfigureChecks.cmake | 5 +++++ + test/CMakeLists.txt | 17 +++++++++++------ + 2 files changed, 16 insertions(+), 6 deletions(-) + +commit d074485aa9d9fac6b715382002f53e3303bbc519 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 20 10:08:33 2010 +0000 + + Do not call getPixel if we know how to access the data + + Gives a 20% speed increase in some pdf + + splash/Splash.cc | 19 ++++++++++--------- + 1 files changed, 10 insertions(+), 9 deletions(-) + +commit d4cafe357bd86feb4b56e5dfbf5b7822e237a2ee +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 20 10:07:20 2010 +0000 + + Only call getPixel when really needed + + Gives a 8% speed increase in some pdf + + splash/Splash.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit c3122cfbe090f3a4045269222f941cd5ce77c171 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 20 10:04:37 2010 +0000 + + Move test code to the header to it can be inlined + + Gives a 10% speed increase in some documents + + splash/SplashClip.cc | 40 ++++++++++++++-------------------------- + splash/SplashClip.h | 43 +++++++++++++++++++++++++++++++++++++++++-- + 2 files changed, 55 insertions(+), 28 deletions(-) + +commit d987fb9b77e6da454eb898cc6c8baaf747b7ac4f +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Feb 19 23:59:03 2010 +0000 + + implement writeImgFile for splashModeXBGR8 + + splash/SplashBitmap.cc | 25 +++++++++++++++++++++++-- + 1 files changed, 23 insertions(+), 2 deletions(-) + +commit f9425c0b5b112ac673d0499f79a743afce719593 +Author: Hib Eris <hib@hiberis.nl> +Date: Fri Feb 19 20:18:13 2010 +0000 + + use pkgconfig to detect libpng on autotools too + + configure.ac | 12 ++++-- + goo/Makefile.am | 7 +++- + m4/libpng.m4 | 99 + --------------------------------------------------- + poppler/Makefile.am | 3 ++ + 4 files changed, 17 insertions(+), 104 deletions(-) + +commit 0cb07d645527f25997f5e1b104a6be92441d8ffa +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Feb 18 23:27:20 2010 +0000 + + Only swap w with h if rotation is 90 or 270 + + utils/pdftoppm.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 35015ed11090d67cab69443e607d4d80ca03c619 +Author: Nils Höglund <nils.hoglund@gmail.com> +Date: Thu Feb 18 23:14:51 2010 +0000 + + Match the number of calls to beginMarkedContent and endMarkedContent + + poppler/Gfx.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit ee265760e6ecec93fe26fb8e02848872555daefd +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Feb 18 23:13:48 2010 +0000 + + make sure properties exists before using it + + poppler/TextOutputDev.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit eab7a55815c06525c7aeba254b66498ab147a958 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 17 21:54:31 2010 +0000 + + if malloc failed return false + + splash/SplashFTFont.cc | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit e2def20a45c1d8307fd62fabb9769121af975abf +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Feb 16 23:31:05 2010 +0000 + + Only assume the OC is not visible if it exists and is set to no + + Fixes bug 26532 and a small line that was not drawn in 15899 + + poppler/OptionalContent.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 5edd175bdd0f7c2fc3aecb72384de4cb0788fc4e +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Feb 16 20:57:22 2010 +0000 + + Add and fix copyright years + + poppler/CairoOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0f0fba1b04589061449f98b9dcd8a0c4e7ad2d74 +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 16 22:00:51 2010 +0100 + + make the descriptions specify they refer to the Splash backend + + config.h.cmake | 4 ++-- + configure.ac | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 39b4699020b5cfa1a10e5ef00f0e355e27b21c9f +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 16 21:56:30 2010 +0100 + + [CMake] reflect that poppler-glib needs cairo now + + poppler-glib.pc.cmake | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5c66c775bcd686c61ea136bcd8f261fb631c5e71 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Feb 16 20:52:15 2010 +0000 + + We don't need to pass anything to FontConfig + + Makes it much easier to manage and also fixes bug 26544 + + poppler/GlobalParams.cc | 11 +++-------- + poppler/GlobalParams.h | 6 +----- + 2 files changed, 4 insertions(+), 13 deletions(-) + +commit 582b5259b3c65ee1bef99dbdfccf00f37269b76f +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 16 16:36:24 2010 +0100 + + [CMake] find the system threads, and define in the config.h if we + have pthreads + + CMakeLists.txt | 4 ++++ + config.h.cmake | 3 +++ + 2 files changed, 7 insertions(+), 0 deletions(-) + +commit 1dff9d440556a155fb5ca7bed15fc6a1f77a1c97 +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 16 16:10:44 2010 +0100 + + [CMake] add the HAVE_LIBOPENJPEG and HAVE_OPENJPEG_H defines, to + match autotools' ones + + CMakeLists.txt | 1 + + config.h.cmake | 6 ++++++ + 2 files changed, 7 insertions(+), 0 deletions(-) + +commit 4a0bcaa83e6e6533cd48c63449a08467d51c13ea +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 16 16:01:53 2010 +0100 + + [CMake] config.h.cmake: change some comments to match autotools' ones + + config.h.cmake | 10 ++++++---- + 1 files changed, 6 insertions(+), 4 deletions(-) + +commit 9e38082c3e571d035f0152d65661e5dd97fdd5d8 +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 16 15:58:30 2010 +0100 + + [CMake] add the Win32-specific ENABLE_RELOCATABLE option, matching + autotools' one + + CMakeLists.txt | 5 +++++ + config.h.cmake | 3 +++ + 2 files changed, 8 insertions(+), 0 deletions(-) + +commit eb03020893ed591c18817d75d427a1296cb1f233 +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 16 15:49:50 2010 +0100 + + [CMake] config.h.cmake: move POPPLER_WITH_GDK in the same place of + autotools' generated one, and with the same comment + + config.h.cmake | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit ba65b3af047b758094b999b2939065c5127508dd +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 10 23:08:04 2010 +0000 + + Wrap #include <jpeglib.h> in extern "C" to fix build + + Fixes bug 26351 + + goo/JpegWriter.h | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +commit d3d2a3ee0a3505f44d1196823716b768d434ba73 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 10 23:16:27 2010 +0100 + + [CMake] fix typo: "MULTITHREAD" -> "MULTITHREADED" + + CMakeLists.txt | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0dae2294cf8a2f312d8e6504be4e1be516b34b1b +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Tue Feb 9 21:44:07 2010 +0000 + + Fix regression in painting. Fixes bug 26243 + + poppler/Gfx.cc | 9 ++++++++- + 1 files changed, 8 insertions(+), 1 deletions(-) + +commit aa9c3acbc73bafb33c8a797701ed0488a4a74263 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jan 28 17:23:18 2010 +0100 + + [cairo] Add clipToStrokePath() method + + It's unimplemented, it just contains a log message to help when + debugging. + + poppler/CairoOutputDev.cc | 4 ++++ + poppler/CairoOutputDev.h | 1 + + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit 41a450c8db45fd064798d15c3d8fe5ab536a7b30 +Author: David Benjamin <davidben@mit.edu> +Date: Fri Jan 22 00:26:59 2010 -0500 + + [cairo] Avoid leaving pointers to free'd memory + + Fixes potential free'd memory access introduced by + 3a94e8ce90c0a4d11c5c5aa8805c167c8a0434e5. I don't think this is + actually + possible in the current code; we push/pop before and after rendering a + PDF, so the bottom state should never have a mask. + + Still, better to clean this up. + + poppler/CairoOutputDev.cc | 5 ++--- + 1 files changed, 2 insertions(+), 3 deletions(-) + +commit 309228404710debee4337cc53c641dfef64ad86c +Author: David Benjamin <davidben@mit.edu> +Date: Wed Jan 27 22:41:16 2010 +0000 + + Allow commands to abort the current stream + + In many instances, the sensible response (and what acroread does) in + case of an error is abort the PDF stream. To avoid changing the return + value of every function and using C++ exceptions, we communicate via a + commandAborted variable. + + This patch, matching acroread's behavior aborts the current stream + when + there are too few arguments or we pop too many times. Implementation + note 39 in Appendix H of the PDF reference contradicts the former, but + hand-crafted test PDFs as well as the file in #24575 suggest + otherwise. + + Unlike all the other attempts, this patch actually fixes the PDF in + bug #24575. + + poppler/Gfx.cc | 11 +++++++++++ + poppler/Gfx.h | 1 + + 2 files changed, 12 insertions(+), 0 deletions(-) + +commit 8284008aa8230a92ba08d547864353d3290e9bf9 +Author: David Benjamin <davidben@mit.edu> +Date: Wed Jan 27 22:40:33 2010 +0000 + + Add a stack of stateGuards to Gfx + + While a stack of states is a good way to maintain graphics contexts, + if + the command stream you are interpreting is untrusted, we must place + appropriate guards to be sure that, not only do we not pop past + the end + of the stack, but we do not pop past the stack as it was when we began + rendering. + + poppler/Gfx.cc | 30 +++++++++++++++++++++++++++++- + poppler/Gfx.h | 11 +++++++++++ + 2 files changed, 40 insertions(+), 1 deletions(-) + +commit 4ae84c830f842d100cbb702b32970951a5a5769f +Author: David Benjamin <davidben@mit.edu> +Date: Wed Jan 27 22:39:20 2010 +0000 + + Maintain the height of the stack in Gfx + + Introduces a new variable Gfx::stackHeight that maintains up-to-date + information about the current height of the stack. + + poppler/Gfx.cc | 4 ++++ + poppler/Gfx.h | 1 + + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit 120fe6ef673c648ae7b19ad2a7e9aef22ee25810 +Author: David Benjamin <davidben@mit.edu> +Date: Wed Jan 27 22:38:43 2010 +0000 + + Do not use objects just after deleting them + + The error condition in GfxCIDFont::GfxCIDFont references cMapName and + collection, so they should not be deleted yet. + + poppler/GfxFont.cc | 8 +++++--- + 1 files changed, 5 insertions(+), 3 deletions(-) + +commit 3375fa96c7a7dbbb98f5a7b3df9e840a5f30bc80 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 27 22:32:29 2010 +0000 + + GooVector rewrite, old version had "unknown" origins/license + + goo/GooVector.h | 237 + +++++++++++++++++++++++++++++++++---------------------- + 1 files changed, 141 insertions(+), 96 deletions(-) + +commit a945fe64e16ac9aa2577c5db05fc7f3fd4955b7b +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jan 27 16:15:40 2010 +0100 + + [cairo] Fix downscaling images when document is rotated + + Fixes bug #26264. + + poppler/CairoOutputDev.cc | 37 +++++++++++++++++++++++++++++++++++-- + 1 files changed, 35 insertions(+), 2 deletions(-) + +commit 428cc965c17f167ea00540beeaeaac5c3e426686 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jan 26 21:01:32 2010 +0000 + + Add POPPLER_WITH_GDK in cmake build system + + Bug 26247 + + glib/CMakeLists.txt | 1 + + glib/poppler-features.h.cmake | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit 0af1ae75fd4c8031343f668bed5d8ca6588ee652 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jan 26 20:49:17 2010 +0100 + + [cairo] Use the right matrix for the mask in drawMaskedImage() + + Fixes bug #16906. + + poppler/CairoOutputDev.cc | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +commit d8ceaff39f5b80624b6bdc703c2a180dfc3d73ee +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jan 26 11:57:06 2010 +0100 + + [cairo] Add some more LOG messages + + poppler/CairoOutputDev.cc | 18 +++++++++++++++--- + 1 files changed, 15 insertions(+), 3 deletions(-) + +commit 778e764b3cb77526260c3c8b46acf19ad06fc61d +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jan 25 22:40:20 2010 +0000 + + poppler 0.13.0 + + CMakeLists.txt | 4 +- + NEWS | 99 + +++++++++++++++++++++++++++++++++++++++++++++++++++ + configure.ac | 2 +- + poppler/Makefile.am | 2 +- + qt4/src/Doxyfile | 2 +- + 5 files changed, 104 insertions(+), 5 deletions(-) + +commit 1b5333f2685b8ab85bb1f5b899332c5a0ac99a3d +Author: Pino Toscano <pino@kde.org> +Date: Mon Jan 25 02:19:00 2010 +0100 + + [CMake] allow multiple targets with the same name + + this is needed for building the unit tests later without explicitly + having + enabling them at configure time (thus compile them on-demand) + for this, set the cmake policy 0003 as OLD (allow), and consecuently + 0011 for + setting the former from an include()d script + + cmake/modules/PopplerDefaults.cmake | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +commit 92e1f46866c063c370ef1d6324f6a6c01aed6680 +Author: Pino Toscano <pino@kde.org> +Date: Mon Jan 25 02:15:27 2010 +0100 + + [CMake] do not add the fake buildtests target for the MSVC IDE + + cmake/modules/PopplerMacros.cmake | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit dea5aa37de079196fa916b1db9af782cf25045f9 +Author: Maciej Mrozowski <reavertm@gmail.com> +Date: Mon Jan 25 00:51:20 2010 +0000 + + Install some more goo files + + CMakeLists.txt | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit 671a971c45a1e8ce8f6daade82117a9a137034d6 +Author: Maciej Mrozowski <reavertm@gmail.com> +Date: Mon Jan 25 00:48:31 2010 +0000 + + do not install a private header + + qt4/src/Makefile.am | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 54c86e53a143a8f9d196e4bef2a733c6f00f6026 +Author: Maciej Mrozowski <reavertm@gmail.com> +Date: Mon Jan 25 00:33:07 2010 +0000 + + Only build tests if told to + + test/CMakeLists.txt | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit eb082274694aadb80dd16caea65d7f0a1adf8b46 +Author: Maciej Mrozowski <reavertm@gmail.com> +Date: Mon Jan 25 00:29:55 2010 +0000 + + Only build demos and test if told so. Install poppler-layer.h + + glib/CMakeLists.txt | 9 +++++---- + 1 files changed, 5 insertions(+), 4 deletions(-) + +commit 73fcc310cd7d6ef435b453485c1c99a33f77212a +Author: Maciej Mrozowski <reavertm@gmail.com> +Date: Mon Jan 25 00:29:09 2010 +0000 + + install man pages + + utils/CMakeLists.txt | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +commit 8672217af4cf88d5506572c2b40fbb0d1d0dbd87 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jan 25 00:11:50 2010 +0000 + + Make the poppler object cache params be a ref + + And make sure what we was is a ref, otherwise we abort + + poppler/Gfx.cc | 14 ++++++++------ + poppler/PopplerCache.cc | 12 ++++++------ + poppler/PopplerCache.h | 6 +++--- + 3 files changed, 17 insertions(+), 15 deletions(-) + +commit 9567fd8d3d905897d0abacd77885102ae86ba8a9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 24 20:15:49 2010 +0000 + + ImgWriter is a header too + + goo/Makefile.am | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 735e8a690d0bd3ab4bec90bdad975d19ac3d4689 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 24 19:51:19 2010 +0000 + + noone maintains this either + + msvc/config.h | 62 --------------------------------- + msvc/poppler/poppler-config.h | 77 + ----------------------------------------- + 2 files changed, 0 insertions(+), 139 deletions(-) + +commit d485564f0dc86f62b996380bfbd570cf3f543e4f +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 24 19:22:33 2010 +0000 + + remove files noone maintains + + README.windows | 63 ----------------------- + makefile.vc | 150 + -------------------------------------------------------- + 2 files changed, 0 insertions(+), 213 deletions(-) + +commit 38467f2738c88f060ae1d30332e34da743a888a5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 24 19:18:44 2010 +0000 + + only compile glib frontend if cairo is found + + CMakeLists.txt | 4 ++-- + glib/CMakeLists.txt | 25 +++++++------------------ + 2 files changed, 9 insertions(+), 20 deletions(-) + +commit cf045acf46307d51fb6d9959451b53681e6cac03 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 24 19:01:52 2010 +0000 + + compile + + glib/CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 0397cf4f193015286464ae70ab202ed400110e30 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 24 19:00:09 2010 +0000 + + Add and fix copyright years + + poppler/CairoFontEngine.cc | 1 + + poppler/CairoOutputDev.cc | 2 +- + poppler/CairoOutputDev.h | 2 +- + poppler/Gfx.cc | 2 +- + poppler/Gfx.h | 2 +- + poppler/PopplerCache.cc | 1 + + poppler/PopplerCache.h | 1 + + 7 files changed, 7 insertions(+), 4 deletions(-) + +commit 9c9f18b6ceea546dfb21ef0aab29ba99733dcb52 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jan 24 19:27:29 2010 +0100 + + [glib-demo] Remove #ifdef HAVE_CAIRO macros from several demos + + glib/demo/images.c | 2 - + glib/demo/layers.c | 71 + +++------------------------------------------------- + glib/demo/render.c | 29 +++----------------- + 3 files changed, 9 insertions(+), 93 deletions(-) + +commit 4e938c1f81add2162ced0e97b24fe588f15f178d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jan 24 19:15:06 2010 +0100 + + [glib] Make glib frontend unconditionally use cairo output device + + Splash support has been removed. + + configure.ac | 74 ++++++++------- + glib/Makefile.am | 20 +--- + glib/poppler-document.cc | 9 -- + glib/poppler-page.cc | 237 + +-------------------------------------------- + glib/poppler-page.h | 7 -- + glib/poppler-private.h | 14 --- + glib/poppler.cc | 6 - + glib/test-poppler-glib.cc | 6 +- + poppler-glib.pc.in | 2 +- + 9 files changed, 51 insertions(+), 324 deletions(-) + +commit 59ff9d66fc3b0c9612b1c12fc1ae4dbb8dc85b39 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jan 24 17:57:48 2010 +0100 + + Use a small object cache in GfxResources to cache GState objects + + It drastically improves performance with some documents like page + 742 of + PDF32000_2008.pdf + + poppler/Gfx.cc | 19 +++++++++++++++++-- + poppler/Gfx.h | 2 ++ + 2 files changed, 19 insertions(+), 2 deletions(-) + +commit 880a4a9a60a10f7aa7d3dc7c2802b31b7ef01e06 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jan 24 17:56:35 2010 +0100 + + Add a generic cache to store objects by its reference + + poppler/PopplerCache.cc | 60 + +++++++++++++++++++++++++++++++++++++++++++++++ + poppler/PopplerCache.h | 16 ++++++++++++ + 2 files changed, 76 insertions(+), 0 deletions(-) + +commit 5ad492df75c0c2394719e85db4c8b43f15b52110 +Author: mpsuzuki <mpsuzuki@hiroshima-u.ac.jp> +Date: Sun Jan 24 13:34:41 2010 +0100 + + [cairo] Fix memory leak + + poppler/CairoFontEngine.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 3160464b4b70c714c36234320878acab81b866cc +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Nov 26 13:17:19 2009 +0100 + + [cairo] Use our own implementation to scale down images instead + of cairo + + This is a workaround for the low quality downscaling of pixman. + Rescaler implementation is a box filter that supports non-integer box + sizes written by Jeff Muizelaar. + Fixes bug #5589. + + poppler/CairoOutputDev.cc | 89 +++++++++++ + poppler/CairoOutputDev.h | 1 + + poppler/CairoRescaleBox.cc | 352 + ++++++++++++++++++++++++++++++++++++++++++++ + poppler/CairoRescaleBox.h | 12 ++ + poppler/Makefile.am | 4 +- + 5 files changed, 457 insertions(+), 1 deletions(-) + +commit 6825a219f0bc0ac6fd469fb8a6ebb86df774375f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jan 23 11:24:15 2010 +0100 + + [glib] Use TextOutputDev to get TextPage when we haven't rendered + the page + + glib/poppler-page.cc | 27 ++++++++++++++++++--------- + 1 files changed, 18 insertions(+), 9 deletions(-) + +commit 6c61a457e9a8ec10945bc1e0700c8e4d121faa58 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 20 21:59:05 2010 +0000 + + Fix GfxRadialShading::GfxRadialShading + + Fixes crash in KDE bug 223359 + + poppler/GfxState.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 442894d371879a6bf2adb5a39b9dd0a49e76e4ac +Author: Pino Toscano <pino@kde.org> +Date: Fri Jan 15 21:28:42 2010 +0100 + + [glib-demo/cmake] compile print.c + + followup of b64d4bd46b052feb0b143f1348773afbd93e5e33 + + glib/demo/CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit b64d4bd46b052feb0b143f1348773afbd93e5e33 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Nov 27 11:47:22 2009 +0100 + + [glib-demo] Add print demo + + glib/demo/Makefile.am | 2 + + glib/demo/main.c | 4 +- + glib/demo/print.c | 135 + +++++++++++++++++++++++++++++++++++++++++++++++++ + glib/demo/print.h | 31 +++++++++++ + 4 files changed, 171 insertions(+), 1 deletions(-) + +commit ba2c746f358a5785d8cbaaf03d8628ee3754c388 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Nov 27 09:52:50 2009 +0100 + + [glib-demo] Add render for printing option to render demo + + glib/demo/render.c | 47 ++++++++++++++++++++++++++++++++++++++--------- + 1 files changed, 38 insertions(+), 9 deletions(-) + +commit 9a478008ccb61641f09bd77eaa55033cca266c43 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jan 15 12:03:11 2010 +0100 + + Add FONTCONFIGURATION macros to poppler-config.h + + They are used in a header file (GlobalParams.h). It fixes a crash + when opening any document. + + poppler/poppler-config.h.in | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +commit 1f80f874d8e132411816302465f04bc59d404d89 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jan 14 08:43:11 2010 +0000 + + Fix Uncover and Fade to return correct values + + Bug 26034 + + poppler/PageTransition.cc | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit 350ff407e06a961f2a5b9d203cb8e78ce09313a0 +Author: Hib Eris <hib@hiberis.nl> +Date: Wed Jan 13 22:20:41 2010 +0000 + + Make poppler (optionally) relocatable on Windows + + configure.ac | 26 +++++++++++++++++++++ + poppler/GlobalParams.cc | 57 + +++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 83 insertions(+), 0 deletions(-) + +commit 36b67b002db802bfad553720e2114b76b07bb614 +Author: Hib Eris <hib@hiberis.nl> +Date: Wed Jan 13 22:17:03 2010 +0000 + + Make fontconfig optional with mingw compiler + + CMakeLists.txt | 8 +++++++- + config.h.cmake | 6 ++++++ + configure.ac | 39 ++++++++++++++++++++++++++++++++++++++- + makefile.vc | 2 +- + poppler/GlobalParams.cc | 10 +++++++--- + poppler/GlobalParams.h | 7 ++++--- + poppler/GlobalParamsWin.cc | 5 +++++ + 7 files changed, 68 insertions(+), 9 deletions(-) + +commit 9c0b20ab8c104c2f5398a5a3b8409ca554f5fa39 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jan 12 22:55:06 2010 +0000 + + Add the possibility of using float for splash variables instead + of double + + Based on a patch by Marius Vollmer marius.vollmer@nokia.com + See bug 25578 for more info + + CMakeLists.txt | 7 ++++++- + config.h.cmake | 5 ++++- + configure.ac | 10 +++++++++- + splash/SplashMath.h | 14 ++++++++++++-- + splash/SplashTypes.h | 4 +++- + 5 files changed, 34 insertions(+), 6 deletions(-) + +commit 30e5f76e372114339fa1d37c335e6bbade8b6d8a +Author: Pino Toscano <pino@kde.org> +Date: Thu Jan 7 11:18:36 2010 +0100 + + [CMake] followup recent glib/gtk+ version requirements + + - glib to 2.18, see ce9404b1999f81b3f9e5a89bcd6e715463f89024 + - gtk+ to 2.14, see e338643f2cebb1203f7ff0646f87b3dea8318757 + + cmake/modules/FindGTK.cmake | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit e338643f2cebb1203f7ff0646f87b3dea8318757 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jan 7 11:08:31 2010 +0100 + + [tests] Bump GTK+ requirements to 2.14 + + Fixes bug #22090. + + configure.ac | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit ce9404b1999f81b3f9e5a89bcd6e715463f89024 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jan 7 11:06:19 2010 +0100 + + Bump glib requirements to 2.18 + + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 526c8871cbdfbc119e013ee96887a79f65403790 +Author: Hib Eris <hib@hiberis.nl> +Date: Thu Dec 31 17:52:33 2009 +0100 + + [glib] Use PDFDoc(wchar_t *, ...) on Windows + + Fixes bug #25032 + + glib/poppler-document.cc | 22 +++++++++++++++++++--- + 1 files changed, 19 insertions(+), 3 deletions(-) + +commit e0c8188136958b853269179079efefdd3488dc22 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jan 4 18:36:01 2010 +0000 + + Require Qt 4.4 + + This updates the requirement to real requirement + + CMakeLists.txt | 2 +- + configure.ac | 8 ++++---- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit f9accdb878b23ebd2152dd05d61cfcc71d46cd03 +Author: Pino Toscano <pino@kde.org> +Date: Mon Jan 4 14:13:13 2010 +0100 + + [Qt4/tests] use getPdfVersion() instead of the deprecated pdfVersion() + + qt4/tests/stress-poppler-dir.cpp | 3 ++- + qt4/tests/stress-poppler-qt4.cpp | 3 ++- + qt4/tests/test-password-qt4.cpp | 4 +++- + qt4/tests/test-poppler-qt4.cpp | 4 +++- + 4 files changed, 10 insertions(+), 4 deletions(-) + +commit 898e939d8c0ac74cc7ee3f5d42d83083ed31036e +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Jan 2 02:33:58 2010 +0100 + + Make pdftoppm embed correct resolution in PNG and JPEG files + + goo/ImgWriter.h | 3 ++- + goo/JpegWriter.cc | 6 +++++- + goo/JpegWriter.h | 3 ++- + goo/PNGWriter.cc | 6 +++++- + goo/PNGWriter.h | 3 ++- + splash/SplashBitmap.cc | 9 +++++---- + splash/SplashBitmap.h | 5 +++-- + utils/HtmlOutputDev.cc | 4 +++- + utils/pdftoppm.cc | 9 +++++---- + 9 files changed, 32 insertions(+), 16 deletions(-) + +commit df569dc2fb89d7e0780bbf7a687ce2464ff5cb43 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Jan 2 01:19:50 2010 +0100 + + enable AM_SILENT_RULES by default + + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit f3862f7d987aae52a1fd2bb0af27d1cd803a5b84 +Author: Pino Toscano <pino@kde.org> +Date: Thu Dec 31 00:20:11 2009 +0100 + + [cpp/tests] poppler-dump: show a string for the font type + + cpp/tests/poppler-dump.cpp | 23 ++++++++++++++++++++++- + 1 files changed, 22 insertions(+), 1 deletions(-) + +commit 9c343c821593ebae51ac47b58ad007a82f198652 +Author: Pino Toscano <pino@kde.org> +Date: Thu Dec 31 00:13:09 2009 +0100 + + [cpp/tests] poppler-dump: show the orientation of the pages + + cpp/tests/poppler-dump.cpp | 16 ++++++++++++++++ + 1 files changed, 16 insertions(+), 0 deletions(-) + +commit bc91fe3824f37cd17a38aac85c817e8ada1b2f43 +Author: Pino Toscano <pino@kde.org> +Date: Wed Dec 30 23:53:31 2009 +0100 + + [cpp/tests] poppler-dump: a bit less output in permissions lines + + cpp/tests/poppler-dump.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1199de8f097a78edb831313841ac0ed3f9ec9905 +Author: Pino Toscano <pino@kde.org> +Date: Wed Dec 30 23:50:36 2009 +0100 + + [cpp/tests] poppler-dump: add --show-all to show all the information + + cpp/tests/poppler-dump.cpp | 13 +++++++++++++ + 1 files changed, 13 insertions(+), 0 deletions(-) + +commit 9522f830b59942adfc91d5f03c274415a4737ccc +Author: Pino Toscano <pino@kde.org> +Date: Wed Dec 30 23:38:40 2009 +0100 + + [cpp] use iconv for the utf8 <-> utf16 conversions + + cpp/poppler-global.cpp | 92 + +++++++++++++++++++++++++++++++++-------------- + 1 files changed, 64 insertions(+), 28 deletions(-) + +commit b156b4031f5daf658f40db8efa2a3016d95b98b5 +Author: Pino Toscano <pino@kde.org> +Date: Wed Dec 30 23:24:23 2009 +0100 + + [cpp] add the build system stuff for iconv, mandatory for cpp + + CMakeLists.txt | 6 ++ + Makefile.am | 1 + + cmake/modules/FindIconv.cmake | 57 +++++++++++++ + config.h.cmake | 6 ++ + configure.ac | 6 ++ + cpp/CMakeLists.txt | 2 +- + cpp/Makefile.am | 3 +- + m4/iconv.m4 | 180 + +++++++++++++++++++++++++++++++++++++++++ + 8 files changed, 259 insertions(+), 2 deletions(-) + +commit a0cffb8b69e0595a2afe15ecc4928e0df1eeb063 +Author: Pino Toscano <pino@kde.org> +Date: Wed Dec 30 18:57:09 2009 +0100 + + [cpp] fixup unicode GooString <-> ustring conversions + + better make them use the "hand-made" code, it is more correct for them + + cpp/poppler-private.cpp | 44 + +++++++++++++++++++++++++++++++++++++++++--- + 1 files changed, 41 insertions(+), 3 deletions(-) + +commit 3b6e3605209d5db453725b9ce4e6e54679d9c5da +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 27 15:30:22 2009 +0100 + + Do not crop the transformation matrix at an arbitrary value + + Fixes bug 25763 and gave no regression on my test suite + + poppler/GfxState.cc | 21 --------------------- + poppler/SplashOutputDev.cc | 15 +++++++++++++++ + 2 files changed, 15 insertions(+), 21 deletions(-) + +commit ea44c60645001ffea7d297f8549aaa4f5ce5e16c +Author: Ilya Gorenbein <igorenbein@finjan.com> +Date: Sun Dec 27 15:27:00 2009 +0100 + + Try to work on streams without Length + + We have code that finds the Length if it's wrong so let that code + do its job + instead of returning a NULL stream + + poppler/Parser.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 283dd326a00c804b6332ee3ca1aaa0d86377b3f3 +Author: Pino Toscano <pino@kde.org> +Date: Sat Dec 19 12:50:10 2009 +0100 + + [cpp] fix installation of poppler-version.h with autotools and + builddir != srcdir + + cpp/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit df0ccddb7f784b4a8564beda51b3047cb9e3611a +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 18 20:23:48 2009 +0000 + + move the retrieval of the bitmap after rendering the page as it can + change on render time + + utils/pdftoppm.cc | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +commit ab88a02f7efefc950a316d7a5edf88dad8f3e4d0 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Dec 17 18:24:20 2009 +0100 + + [annots] QuadPoints is required in Text Markup annotations + + Show an error message and mark annotation as invalid when it's + missing. + + poppler/Annot.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 39dc99431b3ea9e00f6f645dd7169c0319571dc9 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Dec 17 18:17:20 2009 +0100 + + [annots] Create appearance stream for Sound Annotations when not + defined + + See bug #23108. + + poppler/Annot.cc | 112 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Annot.h | 2 + + 2 files changed, 114 insertions(+), 0 deletions(-) + +commit e4f5a78a853b88b1586ef59fc8893a321ea23736 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Dec 17 17:39:39 2009 +0100 + + [annots] Add Tag and Graph icons for File Attachment annotations + + See bug #23108. + + poppler/Annot.cc | 70 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 70 insertions(+), 0 deletions(-) + +commit 752b14857cfb0669fd6d7dfef2ea73c13a2369fc +Author: Pino Toscano <pino@kde.org> +Date: Thu Dec 17 17:16:01 2009 +0100 + + simplify + + cpp/poppler-toc.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit a26e4b7903fabc667d7d16c23ca2c7a535dd05fa +Author: Pino Toscano <pino@kde.org> +Date: Thu Dec 17 17:09:35 2009 +0100 + + [cpp/tests] add a simple poppler-dump test + + this small test executable can dump various features of the document, + like the general info, permissions, metadata, toc, fonts, + embedded files, pages, etc + + also add the necessary autotools+cmake machinery to compile it + + configure.ac | 1 + + cpp/CMakeLists.txt | 2 + + cpp/Makefile.am | 1 + + cpp/tests/.gitignore | 1 + + cpp/tests/CMakeLists.txt | 24 ++++ + cpp/tests/Makefile.am | 17 +++ + cpp/tests/poppler-dump.cpp | 293 + ++++++++++++++++++++++++++++++++++++++++++++ + 7 files changed, 339 insertions(+), 0 deletions(-) + +commit 86c871cc625d00b8ee7f93dc8c0f9ef8462bba5a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Dec 17 17:05:45 2009 +0100 + + [annots] Create appearance stream for Text Markup Annotations when + not defined + + Highlight annotations are an exception, we always ignore the + appearance stream to use our own, since for most of the documents the + appearance stream provided by the annotation is not enough. That's why + it's currently broken. This is what acroread does indeed and Leonard + Rosenthol recommended us to do the same. + See bug #23108. + + poppler/Annot.cc | 199 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Annot.h | 2 + + 2 files changed, 201 insertions(+), 0 deletions(-) + +commit 904ecd929c6acbbad6d782b950c53c0a80e1f39c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Dec 17 12:49:20 2009 +0100 + + [annots] Fix memory leaks + + poppler/Annot.cc | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +commit ef7954b86f9b1a762c4f77a48d5f42f8db4bbed7 +Author: Pino Toscano <pino@kde.org> +Date: Tue Dec 15 02:20:18 2009 +0100 + + [cpp] use the correct index (instead of an uninitialized variable) + + cpp/poppler-page.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 2547b5e53e7799cf7299838ae9bd882c21a228ae +Author: Pino Toscano <pino@kde.org> +Date: Tue Dec 15 02:14:57 2009 +0100 + + [cpp] properly delete the children of a toc item + + cpp/poppler-toc.cpp | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 771bd3594740fe16bd030dbe73928a8b1d4d113f +Author: Pino Toscano <pino@kde.org> +Date: Tue Dec 15 02:04:24 2009 +0100 + + [cpp] actually implement toc::root() + + cpp/poppler-toc.cpp | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit ca1d2ec4588b2437b58b4448ae2fc5ebd0f130d3 +Author: Pino Toscano <pino@kde.org> +Date: Tue Dec 15 00:54:29 2009 +0100 + + [cpp] fix the reference to the vector data + + cpp/poppler-global.cpp | 2 +- + cpp/poppler-private.cpp | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 16c946e7658b0e9cff701ce1d6bbf7d3828cbe08 +Author: Pino Toscano <pino@kde.org> +Date: Tue Dec 15 00:35:25 2009 +0100 + + [cpp] fix the reference to the vector data + + cpp/poppler-document.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 9bb90c99b65e0e9d9b65c7dbeb5b4d66377ceb21 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 23:43:12 2009 +0100 + + [cpp] add destructor for 'rectangle' + + cpp/poppler-rectangle.h | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 61ccdc9ab3b816174896fcae0899ff34f11eee80 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 23:40:51 2009 +0100 + + [cpp] add out stream operators for rect and rectf + + cpp/CMakeLists.txt | 1 + + cpp/Makefile.am | 1 + + cpp/poppler-rectangle.cpp | 35 +++++++++++++++++++++++++++++++++++ + cpp/poppler-rectangle.h | 5 +++++ + 4 files changed, 42 insertions(+), 0 deletions(-) + +commit 69dd51fed3de41f8b799b811ae5ee59c0d5f59c2 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 22:24:07 2009 +0100 + + [cpp] add namespace to namespace functiond to link properly + + cpp/poppler-global.cpp | 4 ++-- + cpp/poppler-version.cpp | 8 ++++---- + 2 files changed, 6 insertions(+), 6 deletions(-) + +commit 3923fa4890984d8616d86016f4f4a94e8ef3e992 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 22:23:15 2009 +0100 + + [cpp] add default empty parameters for the passwords of the document + loading functions + + cpp/poppler-document.h | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit 1d23cc677e9b0a9f61c53e0ea365537f33abe5bf +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 21:44:56 2009 +0100 + + [cpp] add "human friendly" output representation for byte_array + + cpp/poppler-global.cpp | 23 +++++++++++++++++++++++ + cpp/poppler-global.h | 3 +++ + 2 files changed, 26 insertions(+), 0 deletions(-) + +commit 82954ea5f8ba880276328765f104690a05adbd9e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Dec 7 12:05:54 2009 +0100 + + [annot] Create appearance stream for Attachment Annotations when + not defined + + See bug #23108. + + poppler/Annot.cc | 94 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Annot.h | 2 + + 2 files changed, 96 insertions(+), 0 deletions(-) + +commit c6195472326c183fcfd8a3e9da1ee7f6fa8b7c3d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Dec 6 17:09:23 2009 +0100 + + [annots] Use opacity when drawing Markup Annotations + + According to the spec: + + "The constant opacity value that shall be used in painting the + annotation. This value shall apply to all visible elements of the + annotation in its closed state (including its background and border) + but + not to the pop-up window that appears when the annotation is opened. + + The specified value shall not used if the annotation has an appearance + stream in that case, the appearance stream shall specify any + transparency. + + If no explicit appearance stream is defined for the annotation, it may + be painted by implementation-dependent means that do not necessarily + conform to the PDF imaging model; in this case, the effect of + this entry + is implementation-dependent as well." + + poppler/Annot.cc | 21 +++++++++++++++------ + poppler/Gfx.cc | 9 ++++++++- + poppler/Gfx.h | 2 +- + 3 files changed, 24 insertions(+), 8 deletions(-) + +commit a337c1d757d52c1c238229d2f0cd3a41694b0e08 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 16:18:22 2009 +0100 + + [cpp] add document metadata reading + + cpp/poppler-document.cpp | 9 +++++++++ + cpp/poppler-document.h | 1 + + 2 files changed, 10 insertions(+), 0 deletions(-) + +commit 6c4fa513e60dbdd5ab693434f239d82d95756994 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Dec 6 16:56:22 2009 +0100 + + [annot] Create appearance stream for Geometry Annotations when + not defined + + See bug #23108. + + poppler/Annot.cc | 120 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Annot.h | 2 + + 2 files changed, 122 insertions(+), 0 deletions(-) + +commit eed94b8bd2855dce1fd39b835e3280cbd0ccd1cf +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Dec 6 16:51:37 2009 +0100 + + [annot] Create appearance stream for Line Annotations when not defined + + See bug #23108. + + poppler/Annot.cc | 62 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Annot.h | 2 + + 2 files changed, 64 insertions(+), 0 deletions(-) + +commit 1c7a5f5e89c4c51e31b6de345d4862ef8dcc2bc0 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Dec 6 16:40:14 2009 +0100 + + [annot] Create appearance stream for Text Annotations when not defined + + Streams have been created by using the svg icons created by mac_v and + ulisse. See bug #23108. + + poppler/Annot.cc | 305 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Annot.h | 2 + + 2 files changed, 307 insertions(+), 0 deletions(-) + +commit c9cb6353ad5279d09615eb2c944b2b053cdf5ccc +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 15:52:25 2009 +0100 + + [cpp] add function to query for document "permissions" + + cpp/poppler-document.cpp | 23 +++++++++++++++++++++++ + cpp/poppler-document.h | 1 + + cpp/poppler-global.h | 4 ++++ + 3 files changed, 28 insertions(+), 0 deletions(-) + +commit 30e90c7c1b41c62ddc21905e7ccdea4c95547e80 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 15:33:36 2009 +0100 + + [cpp] add is_encrypted and is_linearized for document + + cpp/poppler-document.cpp | 10 ++++++++++ + cpp/poppler-document.h | 2 ++ + 2 files changed, 12 insertions(+), 0 deletions(-) + +commit 93fd588c519958a1f66231c111ea8a6b0a759be1 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 13:19:24 2009 +0100 + + [cpp] add the possibility to load a document from raw data + + cpp/poppler-document-private.h | 5 +++++ + cpp/poppler-document.cpp | 35 ++++++++++++++++++++++++++++++++++- + cpp/poppler-document.h | 3 +++ + 3 files changed, 42 insertions(+), 1 deletions(-) + +commit 53996365b159cf84adf2cac56c76b8bda8dfb12e +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 12:57:41 2009 +0100 + + [cpp] use the byte_array typedef + + cpp/poppler-embedded-file.cpp | 6 +++--- + cpp/poppler-embedded-file.h | 2 +- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit e4969c1aaed4a8eb770d8b54920f2476129bbcb7 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Dec 6 16:19:36 2009 +0100 + + [annots] Refactor Annot::setColor to receive an AnnotColor + + Removes duplicated code since color arrays are already parsed in + AnnotColor + + poppler/Annot.cc | 136 + ++++++++++++++++++++++++++++-------------------------- + poppler/Annot.h | 4 +- + 2 files changed, 73 insertions(+), 67 deletions(-) + +commit cfb4f5dfabf31de22d68aa0d5796cb7a33d8b462 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 11:06:36 2009 +0100 + + [cpp] add a byte_array typedef, and use it for utf8 string data + + cpp/poppler-global.cpp | 12 +++--------- + cpp/poppler-global.h | 5 ++++- + cpp/poppler-private.cpp | 5 ++--- + 3 files changed, 9 insertions(+), 13 deletions(-) + +commit 2d13ac31671b2007e44a90f45a82cb3adfa9c80c +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 02:30:06 2009 +0100 + + update ignore files + + .gitignore | 1 + + cpp/.gitignore | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit 01e902e40ca15acf0319e37d39a271d6875bfce9 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 02:02:47 2009 +0100 + + [cpp] add a version header+functions + + this way, it is possible to get (either at build time and at runtime) + the version of the current poppler-cpp library + + poppler-config.h is generated by the build system (autotools or cmake) + with the correct version information + + configure.ac | 2 ++ + cpp/CMakeLists.txt | 5 +++++ + cpp/Makefile.am | 6 ++++-- + cpp/poppler-version.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ + cpp/poppler-version.h.in | 39 +++++++++++++++++++++++++++++++++++++++ + 5 files changed, 91 insertions(+), 2 deletions(-) + +commit b3f5e5d60bc9109da961940f6216722f9db4a87b +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 00:56:15 2009 +0100 + + [CMake] add the configure check for the Cairo blend modes support + (as in autotools) + + cmake/modules/FindCairo.cmake | 18 ++++++++++++++++++ + config.h.cmake | 3 +++ + 2 files changed, 21 insertions(+), 0 deletions(-) + +commit f6ba877e0c22538cfe34d32d69814f660de59d2c +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 00:44:55 2009 +0100 + + [CMake] add configure check for sys/mman.h (as in autotools) + + ConfigureChecks.cmake | 1 + + config.h.cmake | 3 +++ + 2 files changed, 4 insertions(+), 0 deletions(-) + +commit e12801320ae030628fc62c073983c06b39ee13d7 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 00:42:20 2009 +0100 + + minor spello + + config.h.cmake | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 6428907ebcf33d4391673aadcfa71c3061f6d352 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 00:41:49 2009 +0100 + + [CMake] add configure check for fcntl.h (as in autotools) + + ConfigureChecks.cmake | 1 + + config.h.cmake | 3 +++ + 2 files changed, 4 insertions(+), 0 deletions(-) + +commit 916ab7163249e23bd5ba00922fdcad9caaf92c75 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 00:34:59 2009 +0100 + + [CMake] oops, those should have been '#cmakedefine' and not '#define' + + config.h.cmake | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit ea655d8c7e24e97ee710110a783ed9c209cf76e3 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 00:33:51 2009 +0100 + + [CMake] move and rename to match more the autotools output + + config.h.cmake | 21 ++++++++++++++------- + 1 files changed, 14 insertions(+), 7 deletions(-) + +commit 9f0146c5b2f9326e834104b89791f66b18f85adc +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 14 00:28:04 2009 +0100 + + [CMake] add checks for gmtime_r and localtime_r + + ConfigureChecks.cmake | 2 ++ + config.h.cmake | 6 ++++++ + 2 files changed, 8 insertions(+), 0 deletions(-) + +commit 9d0cf201e96044dd679c26bea6255d986a6cd246 +Author: Pino Toscano <pino@kde.org> +Date: Sun Dec 13 23:45:39 2009 +0100 + + [cpp] add ignore file + + cpp/.gitignore | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit d783e92b863d8b22de6ca326328115fec63193ed +Author: Pino Toscano <pino@kde.org> +Date: Sun Dec 13 23:42:33 2009 +0100 + + [cpp] don't forget the cmake stuff when packing with the autotools + + Makefile.am | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 0105caefe860e7a45fc7d3a1bd1162fe56bcfe6a +Author: Pino Toscano <pino@kde.org> +Date: Sun Dec 13 23:40:55 2009 +0100 + + [cpp] add the pkg-config stuff + + CMakeLists.txt | 3 +++ + Makefile.am | 7 +++++-- + configure.ac | 3 ++- + poppler-cpp.pc.cmake | 9 +++++++++ + poppler-cpp.pc.in | 9 +++++++++ + 5 files changed, 28 insertions(+), 3 deletions(-) + +commit d5a74f78df0dca24fd537b30424fd2ebb3efe3e2 +Author: Pino Toscano <pino@kde.org> +Date: Sun Dec 13 23:35:06 2009 +0100 + + [cpp] add the (rest of the) CMake build system for it + + CMakeLists.txt | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 0e41f937946e4e4c1b660406bd74e4afe8825b5f +Author: Pino Toscano <pino@kde.org> +Date: Sun Dec 13 23:31:46 2009 +0100 + + [cpp] add the autotools buildsystem for it + + Makefile.am | 6 +++++- + configure.ac | 15 +++++++++++++++ + cpp/Makefile.am | 32 ++++++++++++++++++++++++++++++++ + 3 files changed, 52 insertions(+), 1 deletions(-) + +commit 9727fdc0c682742335e44ddc2f32d60e4c59983a +Author: Pino Toscano <pino@kde.org> +Date: Sun Dec 13 22:55:28 2009 +0100 + + Start of a pure C++ frontend for Poppler. + + This initial version (called 'poppler-cpp') includes preliminary + support for: + - document (loading from file name, some query methods, unlocking, + font listing, embedded files) + - page (some query methods) with page transitions + - TOC + + Modelled a bit on the Qt4 API, it provides also an own "ustring" + typedef representing UTF-16 strings, + with methods to convert back/to UTF-8 and Latin 1. + + Most probably it has bugs, but nevertheless worth testing and + developing. + + cpp/CMakeLists.txt | 34 ++++ + cpp/poppler-document-private.h | 55 ++++++ + cpp/poppler-document.cpp | 316 + +++++++++++++++++++++++++++++++++++ + cpp/poppler-document.h | 92 ++++++++++ + cpp/poppler-embedded-file-private.h | 40 +++++ + cpp/poppler-embedded-file.cpp | 116 +++++++++++++ + cpp/poppler-embedded-file.h | 55 ++++++ + cpp/poppler-font.cpp | 166 ++++++++++++++++++ + cpp/poppler-font.h | 91 ++++++++++ + cpp/poppler-global.cpp | 162 ++++++++++++++++++ + cpp/poppler-global.h | 86 ++++++++++ + cpp/poppler-page-private.h | 44 +++++ + cpp/poppler-page-transition.cpp | 95 +++++++++++ + cpp/poppler-page-transition.h | 82 +++++++++ + cpp/poppler-page.cpp | 121 +++++++++++++ + cpp/poppler-page.h | 62 +++++++ + cpp/poppler-private.cpp | 70 ++++++++ + cpp/poppler-private.h | 66 ++++++++ + cpp/poppler-rectangle.h | 60 +++++++ + cpp/poppler-toc-private.h | 62 +++++++ + cpp/poppler-toc.cpp | 136 +++++++++++++++ + cpp/poppler-toc.h | 74 ++++++++ + 22 files changed, 2085 insertions(+), 0 deletions(-) + +commit 62854051f4e47028147cc93a5faac39e2fa2c9fd +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Dec 12 17:22:08 2009 +0100 + + Initialize profileCommands in Gfx constructor + + poppler/Gfx.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 4e6af25a028d16608111634c5467420e31fa399b +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Dec 9 19:45:40 2009 +0100 + + [cairo] Update font of TextPage in CairoOutputDev::updateAll() + + Fixes a crash with some documents, see Evince bug + https://bugzilla.gnome.org/show_bug.cgi?id=603934 + + poppler/CairoOutputDev.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 6798d3e52e36e91bceff3a1a96372e9d9c6f3813 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Dec 6 15:34:36 2009 +0100 + + Use fixed size array in AnnotColor + + glib/poppler-annot.cc | 2 +- + poppler/Annot.cc | 24 +++++------------------- + poppler/Annot.h | 5 ++--- + poppler/Gfx.cc | 2 +- + qt4/src/poppler-annotation.cc | 2 +- + 5 files changed, 10 insertions(+), 25 deletions(-) + +commit 92fab93bee3748a73c09429cc8a105c16f21fed0 +Author: Axel Struebing <axel.struebing@freenet.de> +Date: Sat Dec 5 22:31:29 2009 +0000 + + Add a empty space after null + + Fixes bug 25465 + + poppler/PDFDoc.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 32103f45d0193b31e95269ea9123b8011d93e994 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Dec 5 10:14:18 2009 +0100 + + [annots] Add isVisible() to check whether annot is visible before + drawing it + + It takes into account annot flags and optional content. + + poppler/Annot.cc | 29 ++++++++++++++--------------- + poppler/Annot.h | 1 + + 2 files changed, 15 insertions(+), 15 deletions(-) + +commit c14dfc7102341f5e1ed67a05c0738d55befab1ec +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Dec 5 10:07:46 2009 +0100 + + [annots] Do not check if annot is a link in Annot::draw() + + AnnotLink already implements draw() + + poppler/Annot.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ddf85d4a51f605eed998c633857b8bb5c74ab590 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 4 14:59:41 2009 +0100 + + Make the code a bit more resilient + + By checking the GooString we are going to use really exists + + poppler/PSOutputDev.cc | 24 ++++++++++++++++-------- + 1 files changed, 16 insertions(+), 8 deletions(-) + +commit 78b4afa0a44048b8d40438d400652dbae4cb99b1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 4 14:57:10 2009 +0100 + + Accept Fontname if FontName is not present + + Fixes KDE bug 217013 + + poppler/GfxFont.cc | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit fee5cb0eec2ddb8d596289e9a6285cf04d97632e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Dec 4 13:26:42 2009 +0100 + + [annots] Remove redundant flags definition + + poppler/Annot.cc | 22 +++++++++------------- + 1 files changed, 9 insertions(+), 13 deletions(-) + +commit 3a94e8ce90c0a4d11c5c5aa8805c167c8a0434e5 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Nov 27 15:23:11 2009 +0100 + + [cairo] Revert commit 77c2e154c2cb57300116ecd4295f1e67b06b411f + + And fix bug #24575 jut by checking pointer is not null before + using it. + + poppler/CairoOutputDev.cc | 12 +++++------- + 1 files changed, 5 insertions(+), 7 deletions(-) + +commit a093b768e64d477ebdd5f6b519d80a6c45706e7e +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 22 20:23:49 2009 +0100 + + Add copyrights + + poppler/CairoFontEngine.cc | 2 +- + poppler/CairoOutputDev.cc | 4 ++-- + poppler/CairoOutputDev.h | 2 +- + 3 files changed, 4 insertions(+), 4 deletions(-) + +commit 77c2e154c2cb57300116ecd4295f1e67b06b411f +Author: David Benjamin <davidben@mit.edu> +Date: Sun Nov 22 20:19:29 2009 +0100 + + Do not crash on malformed files + + bug 24575 + + poppler/CairoOutputDev.cc | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 1d0cb9b2cfd4d4d9aa9b0ad83ad6408544263a09 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Nov 22 19:59:34 2009 +0100 + + [cairo] Initialize fill_color and stroke_color + + poppler/CairoOutputDev.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 32de2ac62fb87570e1a59152f37b86e571a01180 +Author: Ilya Gorenbein <igorenbein@finjan.com> +Date: Sun Nov 22 19:51:54 2009 +0100 + + Improve the reconstruction of the XRef + + Makes load a file Ilya can't share + + poppler/XRef.cc | 165 + +++++++++++++++++++++++++++++++----------------------- + 1 files changed, 95 insertions(+), 70 deletions(-) + +commit 039c6dffbfbed46a11e207048a3247d6921d6b02 +Author: Ilya Gorenbein <igorenbein@finjan.com> +Date: Sun Nov 22 15:14:20 2009 +0100 + + Correctly initialize fileName + + poppler/Link.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit b905caf1785ee207cc0480953da69be302d3d4e9 +Author: David Benjamin <davidben@mit.edu> +Date: Sat Nov 21 02:43:21 2009 +0100 + + Be more lenient with /Decode key on images + + The spec requires the field be [1 0] or [0 1]. Adobe accepts + floating point + values as well. This fixes bug #17439. + + poppler/Gfx.cc | 9 +++++++-- + 1 files changed, 7 insertions(+), 2 deletions(-) + +commit d99e7a88845a5f4b35e2c538c597316b2ad541ca +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Nov 20 22:09:44 2009 +0100 + + Check for openjpeg in the C++ part as it uses bool in the header + + Bug 25103 + + configure.ac | 61 + ++++++++++++++++++++++++++++----------------------------- + 1 files changed, 30 insertions(+), 31 deletions(-) + +commit 55261a2dc86241c8d132e590e76e7398b3ca5090 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 18 22:26:01 2009 +0100 + + replace floor with a cast to int for numbers > 0 + + bug-poppler13487.pdf gets a 15% faster rendering + + splash/SplashMath.h | 19 +++++++++++++++++-- + 1 files changed, 17 insertions(+), 2 deletions(-) + +commit 28df9fb323f14dc632c9502655abf69984b7d67e +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 18 21:57:02 2009 +0100 + + Remove unused label + + poppler/Catalog.cc | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 037979a01a6fcafc61360e758dbc4a5eb056825e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Nov 17 19:12:30 2009 +0100 + + [cairo] If there's a soft mask available when filling, apply the + mask instead of filling + + Fixes bug #8474. + + poppler/CairoOutputDev.cc | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +commit 46380d36f004d71dd2c2e7bc82836af248684b51 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Nov 17 20:48:22 2009 +0100 + + i didn't want to commit this + + configure.ac | 60 + ++++++++++++++++++++++++++------------------------ + splash/SplashMath.h | 5 +-- + utils/pdftoppm.cc | 8 ------ + 3 files changed, 33 insertions(+), 40 deletions(-) + +commit 1844e0927ae89824f59b2b3378bf5e00a51a251c +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Nov 17 20:34:24 2009 +0100 + + do not use setAttribute with doubles + + it is evil and locale dependant, we do NOT want that so use + QString::number + + configure.ac | 60 ++++++++++++++--------------- + qt4/src/poppler-annotation.cc | 82 + ++++++++++++++++++++-------------------- + splash/SplashMath.h | 5 +- + utils/pdftoppm.cc | 8 ++++ + 4 files changed, 81 insertions(+), 74 deletions(-) + +commit 572d79f4b8a7bf1717b88dbd2609d8fa9b036dee +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 15 20:40:56 2009 +0100 + + Only calculate the matrix when it is really needed + + That only happens when outputting to 1 bit images + Speeds out rendering on some pdf up to 40% + + splash/SplashScreen.cc | 35 +++++++++++++++++++++++++++++++++-- + splash/SplashScreen.h | 16 ++++++++++++++++ + 2 files changed, 49 insertions(+), 2 deletions(-) + +commit 1c3113361fa376093e6fedfbf48feee7dcbc46b7 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sun Nov 15 19:43:18 2009 +0100 + + Write out fixed-content portion of Type 1 fonts in PSOutputDev + + If /Length3 of a Type 1 FontFile is > 0 the fixed-content from the + FontFile should be used instead of adding the generic 512 zeros and + cleartomark. + + poppler/PSOutputDev.cc | 18 +++++++++++++----- + 1 files changed, 13 insertions(+), 5 deletions(-) + +commit 2d30dc605cd984f6c32124af9aa7b877d416d141 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Nov 15 17:31:36 2009 +0100 + + [glib-demo] Show attachment name in FileAttachment annot properties + table + + glib/demo/annots.c | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 6c8ae140256818401351a331787c83e043fdba09 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Nov 15 17:31:13 2009 +0100 + + [glib] Add poppler_annot_file_attachment_get_name() + + glib/poppler-annot.cc | 36 +++++++++++++++++++++++++++++------- + glib/poppler-annot.h | 1 + + 2 files changed, 30 insertions(+), 7 deletions(-) + +commit ecf5173eb288187a1f076fd4b116f1212fa9e203 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Nov 15 17:14:29 2009 +0100 + + [glib-demo] Add properties of FileAttachment annotations + + glib/demo/annots.c | 67 + ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 67 insertions(+), 0 deletions(-) + +commit 8f4fdd864d79e4fa83951a3eb006ea8287c3a1ba +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Nov 15 17:12:43 2009 +0100 + + [glib-demo] Add pgd_table_add_property_with_custom_widget() + + To be able to add properties to a table that are not labels + + glib/demo/utils.c | 31 +++++++++++++++++++++---------- + glib/demo/utils.h | 30 +++++++++++++++++------------- + 2 files changed, 38 insertions(+), 23 deletions(-) + +commit 061b85f7a442107cda67e385bd772ec8565a936e +Author: Thomas Viehmann <tv@beamnet.de> +Date: Sun Nov 15 17:11:43 2009 +0100 + + [glib] Add support for file attachment annotations + + glib/poppler-annot.cc | 69 + +++++++++++++++++++++++++++++++++++++++++++++--- + glib/poppler-annot.h | 8 +++++ + glib/poppler-page.cc | 3 ++ + glib/poppler-private.h | 1 + + glib/poppler.h | 49 +++++++++++++++++---------------- + 5 files changed, 102 insertions(+), 28 deletions(-) + +commit 189c45332991bce51e40bcaf65da67d2d644045a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Nov 15 16:42:21 2009 +0100 + + [glib] Remove PopplerDocument from PopplerAttachment + + Since we are duplicating the stream we don't need to hold a + reference of + PopplerDocument anymore. + + glib/poppler-attachment.cc | 13 +------------ + glib/poppler-document.cc | 2 +- + glib/poppler-private.h | 3 +-- + 3 files changed, 3 insertions(+), 15 deletions(-) + +commit e55bfeb1ddc60053c5ee5fef840c409891781ce6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Nov 13 00:55:37 2009 +0100 + + jpeg_start_decompress can fail, check it + + Fixes KDE bug #214317 + + poppler/DCTStream.cc | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +commit c59d93061cf71d13916872a20aed37ecfbb3bfa4 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Nov 9 18:32:55 2009 +0100 + + [cairo] Do nothing when image mask is 1x1 and the pixel is 0 + + poppler/CairoOutputDev.cc | 14 ++++++++++++++ + 1 files changed, 14 insertions(+), 0 deletions(-) + +commit 448f03cfc429d33bfa5527e3dc964ef5da10ee94 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Mon Nov 9 22:52:39 2009 +1030 + + Don't render the color white in type 3 glyphs in the cairo backend + + PDF allows the "g" operator in Type 3 charprocs but cairo user fonts + will render any stroke or fill in the font color. + + As the only PDFs I've seen with "g" in the charprocs are only using + the gray values 0 or 1, a workaround is to disable strokes and fills + of the charproc when the gray level is > 0.5. + + poppler/CairoOutputDev.cc | 14 ++++++++++++++ + 1 files changed, 14 insertions(+), 0 deletions(-) + +commit 3fead2a3b53681ef95116f18f17f1a9febec6e48 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Nov 9 11:25:24 2009 +0100 + + Transitions dictionary can be a Ref too + + poppler/Page.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ac4955d03a532cab1933698aeb667d44300e52d0 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Nov 9 11:12:48 2009 +0100 + + [glib-demo] Explicitely add gio as dependency for GTK+ tests + + configure.ac | 4 ++-- + glib/demo/main.c | 1 + + 2 files changed, 3 insertions(+), 2 deletions(-) + +commit 32ea667ec8f18311539123c7b80c7ab4767070cb +Author: Chris Wilson <chris@chris-wilson.co.uk> +Date: Tue Aug 11 19:17:52 2009 +0100 + + [cairo] Mark images dirty + + After directly manipulating the pixel values we need to mark the + surface + as dirty. This means that cairo will refresh any caches it may + have taken + of the surface will the new data. + + poppler/CairoOutputDev.cc | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +commit 10a41150c4067bb3ab85e25dae76e0968a6cd586 +Author: Chris Wilson <chris@chris-wilson.co.uk> +Date: Tue Aug 11 19:17:06 2009 +0100 + + [cairo] Use colToDbl() to avoid rounding error. + + poppler/CairoOutputDev.cc | 37 +++++++++++++++++++------------------ + 1 files changed, 19 insertions(+), 18 deletions(-) + +commit c9491319689f04edd57adda7ee85f84f17fd1c47 +Author: Chris Wilson <chris@chris-wilson.co.uk> +Date: Tue Aug 11 18:07:17 2009 +0100 + + [cairo] Reduce the number of redundant pattern creations + + poppler/CairoOutputDev.cc | 92 + +++++++++++++++++++++++++++------------------ + 1 files changed, 55 insertions(+), 37 deletions(-) + +commit ead78d9f703c8b2d556c94be3c47dbae7469eda8 +Author: Reece Dunn <msclrhd@gmail.com> +Date: Thu Nov 5 22:25:14 2009 +0100 + + fontpos is never set to -1, so remove the checks in HtmlOutputDev. + + utils/HtmlOutputDev.cc | 11 +++-------- + 1 files changed, 3 insertions(+), 8 deletions(-) + +commit 55dd6024a4672a1787e8b1a8276bd78fff94e2cd +Author: Ilya Gorenbein <igorenbein@finjan.com> +Date: Wed Nov 4 22:07:18 2009 +0100 + + Do not error on files without "Count" and "Kids" + + It is not spec compliant not to have those fields but Adobe Reader and + FoxIt seems to allow it so try to behave like them. See bug 24720 + to see why one would want such file + + poppler/Catalog.cc | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +commit 58a1d42aed7352c008d201b8f355f6e4146f71e5 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Oct 29 18:38:22 2009 +0100 + + [cairo] Don't render patterns when using CairoImageOutputDev + + poppler/CairoOutputDev.h | 15 +++++++++++++-- + 1 files changed, 13 insertions(+), 2 deletions(-) + +commit 7670cc48dcf3ffd77e3ffa29056a3e13b2926709 +Author: Ilya Gorenbein <igorenbein@finjan.com> +Date: Wed Oct 28 19:20:41 2009 +0100 + + There are some pdf where Aspect values are reals, use getNum + + Fixes bug 24733 + + poppler/Annot.cc | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +commit 4fe89e520a04a6ab6d6ec6a8294896b2f427c7da +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Oct 25 21:55:55 2009 +0100 + + do not accept negative interval lengths in the page labels tree + + See bug 24721 + + poppler/PageLabelInfo.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit b174ebd6b323c7a58a19d59c1a9e4ac4e6cba7d9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Oct 23 21:57:42 2009 +0200 + + Move the iccColorSpaceCache from a static in GfxState to a member + of Gfx + + Fixes the problem that the keys are per document but we had a static + that lived as much as the library. Now the cache only lives the + rendering + of a page so it's a bit slower but at least it's correct. Fixes + bug 24686 + + poppler/Gfx.cc | 49 +++++++++++++++++--------- + poppler/Gfx.h | 13 ++++++- + poppler/GfxState.cc | 94 + +++++++++++++++++++++++++-------------------------- + poppler/GfxState.h | 33 +++++++++--------- + poppler/Page.cc | 4 +- + 5 files changed, 107 insertions(+), 86 deletions(-) + +commit 4a9bdd30dc353865685e03eb1c1ac6093797695a +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Oct 22 21:26:29 2009 +0200 + + initialize len at 0 when reading the font fails + + See bug 24525 for more info + + poppler/GfxFont.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit c839b706092583f6b12ed3cc634bf5af34b7a2bb +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Oct 20 10:09:13 2009 +0200 + + [glib] Fix CVE-2009-3607 + + glib/poppler-page.cc | 20 ++++++++++---------- + 1 files changed, 10 insertions(+), 10 deletions(-) + +commit 44462e0ca39392e5629020226b901e4026089b46 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Oct 19 23:33:58 2009 +0200 + + fix memory leak + + poppler/PSOutputDev.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit d701aaa9eaa62567210070129f5feffe24bf1936 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Oct 18 01:22:16 2009 +0200 + + This include is needed as this file uses Ref + + poppler/OutputDev.h | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit d4202536e1b62c326c301d5088fa0e176c523e85 +Author: Pino Toscano <pino@kde.org> +Date: Sat Oct 17 01:35:11 2009 +0200 + + SplashGlyphBitmap is a struct and not a class + + poppler/ArthurOutputDev.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 654176dee7c9325aa5a24a2de3c070faa16e8a9c +Author: Michael Jansen <kde@michael-jansen.biz> +Date: Sat Oct 17 01:30:40 2009 +0200 + + CMake: add the possibility to pass LIB_SUFFIX. + + This allows to tune the installation libdir by adding a suffix for it + (making it eg lib, lib32, or lib64) + + CMakeLists.txt | 16 +++++++++------- + glib/CMakeLists.txt | 2 +- + poppler-cairo.pc.cmake | 2 +- + poppler-glib.pc.cmake | 2 +- + poppler-qt.pc.cmake | 2 +- + poppler-qt4.pc.cmake | 2 +- + poppler-splash.pc.cmake | 2 +- + poppler.pc.cmake | 2 +- + qt/CMakeLists.txt | 2 +- + qt4/src/CMakeLists.txt | 2 +- + 10 files changed, 18 insertions(+), 16 deletions(-) + +commit 43829ae4b25a88ace06f05fa6750e5732539f4be +Author: Pino Toscano <pino@kde.org> +Date: Sat Oct 17 01:21:39 2009 +0200 + + put a space so MSVC won't try to see it as comment + + poppler/GfxState.h | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit f64086ea22a4e8cb3d4e7116db2a9541ac2fb19f +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 17 00:48:58 2009 +0200 + + check the document is not locked when printing + + qt4/src/poppler-ps-converter.cc | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 85d1015480b7ab3f21cc5f78dc53d4c5efdc6e60 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 17 00:48:27 2009 +0200 + + fix file name comment + + qt4/src/poppler-ps-converter.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 270764ad1bf2cfe95aed0b6850d2347361b4268d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 17 00:47:34 2009 +0200 + + Add a way for converters to return more exact errors they had when + converting + + qt4/src/poppler-base-converter.cc | 8 +++++++- + qt4/src/poppler-converter-private.h | 3 ++- + qt4/src/poppler-pdf-converter.cc | 11 ++++++++++- + qt4/src/poppler-ps-converter.cc | 6 +++++- + qt4/src/poppler-qt4.h | 14 ++++++++++++++ + 5 files changed, 38 insertions(+), 4 deletions(-) + +commit 1082e1671afd8ab91583dabc876304008acb021c +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Oct 16 23:17:22 2009 +0200 + + Some "security" fixes based on newly released Xpdf 3.02pl4 + + poppler/Stream.cc | 4 ++++ + poppler/XRef.cc | 19 +++++++++++++++---- + splash/Splash.cc | 7 +++++++ + splash/SplashBitmap.cc | 37 ++++++++++++++++++++++++++++++------- + splash/SplashErrorCodes.h | 4 +++- + 5 files changed, 59 insertions(+), 12 deletions(-) + +commit c2458275e02f56226779b82d73c13defcbbda563 +Author: Glenn Ganz <glenn.ganz@uptime.ch> +Date: Fri Oct 16 20:54:32 2009 +0200 + + fix constructor of DCTStream + + poppler/Stream.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit fd91b79c053bb5cd01a766032b90981dbc5e5dd3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 10 14:53:42 2009 +0200 + + fix compiling with automake + + goo/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit c3031b4318af6f85256f2478c8678dedd0d6acd1 +Author: Pino Toscano <pino@kde.org> +Date: Fri Oct 9 16:17:16 2009 +0200 + + cmake: simplify the linking to libpng + + CMakeLists.txt | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +commit 96688dd7a091f8fa141fad2b3d05bae04b0b86fb +Author: Patrick Spendrin <ps_ml@gmx.de> +Date: Fri Oct 9 16:09:46 2009 +0200 + + MSVC: add _CRT_SECURE_NO_WARNINGS to the define's + + CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit f346c1f6b55f87ebd6bb0b0932462d5514aa40ff +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Oct 9 00:29:06 2009 +0200 + + add -ansi flag to default warnings + + cmake/modules/PopplerMacros.cmake | 2 +- + configure.ac | 2 +- + utils/parseargs.c | 30 +++++++++++++++--------------- + utils/parseargs.h | 26 +++++++++++++------------- + 4 files changed, 30 insertions(+), 30 deletions(-) + +commit 53e0016b772f1b78d998506e2f3106011d32cef3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Oct 9 00:15:52 2009 +0200 + + Add virtual destructor to ImgWriter + + CMakeLists.txt | 1 + + goo/ImgWriter.cc | 15 +++++++++++++++ + goo/ImgWriter.h | 2 ++ + goo/Makefile.am | 1 + + 4 files changed, 19 insertions(+), 0 deletions(-) + +commit 699dcacced7be05b788c414c231dc2b5c07de06e +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Oct 9 00:13:11 2009 +0200 + + Add -Wnon-virtual-dtor flag + + cmake/modules/PopplerMacros.cmake | 4 ++-- + configure.ac | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit d1e4fca4a8602994b010fae4f4fea5cd4df9276e +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Oct 9 00:10:03 2009 +0200 + + build on cmake too + + CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit d67511c92022121066f43003f01b955962ddcd33 +Author: Stefan Thomas <thomas@eload24.com> +Date: Fri Oct 9 00:09:23 2009 +0200 + + Add -jpeg to pdftoppm + + goo/ImgWriter.h | 28 ++++++++++++++ + goo/JpegWriter.cc | 92 + ++++++++++++++++++++++++++++++++++++++++++++++++ + goo/JpegWriter.h | 42 ++++++++++++++++++++++ + goo/Makefile.am | 2 + + goo/PNGWriter.cc | 5 ++- + goo/PNGWriter.h | 10 +++-- + splash/SplashBitmap.cc | 46 +++++++++++++++++------- + splash/SplashBitmap.h | 5 ++- + splash/SplashTypes.h | 11 ++++++ + utils/pdftoppm.1 | 3 ++ + utils/pdftoppm.cc | 22 +++++++++--- + 11 files changed, 239 insertions(+), 27 deletions(-) + +commit 388196df1fb05fb2d88ae82bd81e823a23588ec1 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Oct 7 17:11:58 2009 +0200 + + [glib-demo] Show some of the annot flags in annots treeview + + glib/demo/annots.c | 35 +++++++++++++++++++++++++++++++++-- + 1 files changed, 33 insertions(+), 2 deletions(-) + +commit 034907c6582c1f50782ec9c58a29b140c6fc0688 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Oct 6 00:52:10 2009 +0200 + + Forgot to update the year here + + qt4/src/poppler-private.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit fef89acebf5312324c104fb52e629563fbc2de76 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Oct 6 00:42:52 2009 +0200 + + Add the possibility of enabling hinting + + qt4/src/poppler-document.cc | 2 +- + qt4/src/poppler-private.h | 1 + + qt4/src/poppler-qt4.h | 3 ++- + 3 files changed, 4 insertions(+), 2 deletions(-) + +commit 485252844b5e0964ee724b74e2a7ba2b820b259e +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Oct 6 00:41:57 2009 +0200 + + rework how hinting is used in the splash backend + + Basically we default to no hinting now with the possibility to + enable it + + poppler/ArthurOutputDev.cc | 2 +- + poppler/GlobalParams.cc | 19 ------------ + poppler/GlobalParams.h | 3 -- + poppler/SplashOutputDev.cc | 8 ++++- + poppler/SplashOutputDev.h | 3 ++ + splash/SplashFTFont.cc | 64 + +++++++++-------------------------------- + splash/SplashFTFont.h | 4 +- + splash/SplashFTFontEngine.cc | 8 ++-- + splash/SplashFTFontEngine.h | 7 ++-- + splash/SplashFontEngine.cc | 5 ++- + splash/SplashFontEngine.h | 3 +- + 11 files changed, 40 insertions(+), 86 deletions(-) + +commit 8194c156cf2167834779e1690a89b5068baf8d58 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Oct 5 00:55:55 2009 +0200 + + Fix includes for those using internal headers + + goo/FixedPoint.h | 2 +- + goo/gmem.h | 2 +- + poppler/OutputDev.h | 2 +- + poppler/PSOutputDev.h | 2 +- + poppler/PageLabelInfo.h | 2 +- + utils/ImageOutputDev.h | 2 +- + 6 files changed, 6 insertions(+), 6 deletions(-) + +commit 091f68ccd59413d6890dfbfcf8911f112e690b50 +Author: Kovid Goyal <kovid@kovidgoyal.net> +Date: Mon Oct 5 00:39:36 2009 +0200 + + Use _WIN32 instead of WIN32 + + More info at http://bugs.freedesktop.org/show_bug.cgi?id=24259 + + goo/GooMutex.h | 16 +++++++++++++++- + goo/gfile.cc | 33 +++++++++++++++++---------------- + goo/gfile.h | 5 +++-- + msvc/poppler/poppler-config.h | 2 +- + poppler-config.h.cmake | 2 +- + poppler/ABWOutputDev.h | 3 ++- + poppler/FileSpec.cc | 7 ++++--- + poppler/GlobalParams.cc | 37 + +++++++++++++++++++------------------ + poppler/GlobalParams.h | 4 ++-- + poppler/Link.cc | 3 ++- + poppler/PDFDoc.cc | 4 ++-- + poppler/PDFDoc.h | 3 ++- + poppler/PSOutputDev.cc | 5 +++-- + poppler/TextOutputDev.cc | 5 +++-- + poppler/XpdfPluginAPI.cc | 13 ++++++++++++- + poppler/poppler-config.h.in | 2 +- + splash/SplashFontEngine.cc | 9 +++++---- + test/perf-test.cc | 24 ++++++++++++------------ + utils/HtmlOutputDev.h | 3 ++- + 19 files changed, 108 insertions(+), 72 deletions(-) + +commit 7fd8bdfa450db4e323e4e5d12159359fbc47f9ed +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Oct 5 00:21:15 2009 +0200 + + Remove spurious ; + + Found by -Wextra i think we should add more warnings to our default + flags + + qt4/src/poppler-annotation.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit d46f7343e446331489d3fe6711a7cf778e0bd902 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Oct 2 22:04:46 2009 +0200 + + Strings can have 0 inside so use the length + + Fixes saving some files + + poppler/PDFDoc.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 2bc2040081919340415f576ce8266356deadbfcd +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Oct 2 22:04:03 2009 +0200 + + Increase decimals from 5 to 10, a double has that precision + + Makes saving more faithful for some files + + poppler/PDFDoc.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 05eb7342d5234732f27c9c67b7fc1f9e40a4e075 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Oct 2 22:03:40 2009 +0200 + + If the stream was wrongly formed save the correct length + + Fixes saving of some files + + poppler/PDFDoc.cc | 12 ++++++++++++ + 1 files changed, 12 insertions(+), 0 deletions(-) + +commit b98faa4c162392d9416a5a93c9042b41f82d8657 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Oct 2 22:02:13 2009 +0200 + + Return the save status as program status + + test/pdf-fullrewrite.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit f73f59f2c7bb7c7d57eb70cdc1bc30b80a92d0b7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Oct 2 22:01:45 2009 +0200 + + If the Length entry of the stream is wrong, fix it + + Fixes saving some files + + poppler/Parser.cc | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 91135c7e788bc32e414e1a9c9ab43b326a07e970 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Oct 2 22:00:12 2009 +0200 + + increase the range of characters we sanitize + + Fixes saving of some files + + goo/GooString.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 9dcb3e8be2cd52a795605548e43d6bfc149b2ea5 +Author: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> +Date: Sun Sep 27 17:17:32 2009 +0200 + + Fix the linking not to use the .so directly but the lib + + Fixes check on cygwin + + m4/qt.m4 | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit ed4a6f1cfc7ccd2717d939841c092347c3307547 +Author: Kovid Goyal <kovid@kovidgoyal.net> +Date: Sat Sep 26 19:26:19 2009 +0200 + + Do not crash when saving files that come from a stream without name + + Bug 24090 + + poppler/PDFDoc.cc | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +commit 04b232d48930af9bc614d7fef47f79ce247713a4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Sep 26 18:30:41 2009 +0200 + + Write the Info into the trailer dict if there is one + + Bug 24091 + + poppler/PDFDoc.cc | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +commit 343e4f9aceb935eb393ad94bbef4dbb1b1a450ee +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Sep 26 18:28:40 2009 +0200 + + Plug leak + + test/pdf-fullrewrite.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 2ea0032283c4717f1bb285fab7956fc38f375e87 +Author: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> +Date: Sat Sep 26 15:01:35 2009 +0200 + + Patch to make poppler work on Cygwin + + Bug 4195 + + configure.ac | 3 +++ + qt/Makefile.am | 2 +- + qt4/src/Makefile.am | 2 +- + 3 files changed, 5 insertions(+), 2 deletions(-) + +commit 074dc5e5e39cebc1fbe9bf6a15b2cae2391006c1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Sep 26 14:56:38 2009 +0200 + + Improve realibility for Streams with broken Length + + Fixes bug 6841 + + poppler/Parser.cc | 17 +++++++++++++---- + 1 files changed, 13 insertions(+), 4 deletions(-) + +commit b7702820245fb6cdbf77afba37c53c03d4362a25 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 21 21:58:26 2009 +0200 + + Print with a . and not with a , in all locales + + This is a regression after the removal of setting LC_NUMERIC + + poppler/PDFDoc.cc | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +commit d31080d8195694cef740d4e77484179bb38d1f26 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Sep 20 17:21:13 2009 +0200 + + CharCodeToUnicode is not mandatory in fonts, don't crash one fonts + that do not have it + + Fixes bug #24036 + + poppler/Annot.cc | 33 ++++++++++++++++++++------------- + 1 files changed, 20 insertions(+), 13 deletions(-) + +commit a729d005a7204791fa8415de5aa0834136073ce8 +Author: Pino Toscano <pino@kde.org> +Date: Thu Sep 17 20:12:20 2009 +0200 + + Windows32/MSVC: initialize the font list once per GlobalParams, + instead of once at all + + this fixes the font list being empty at the second (and following) + GlobalParams creation + thanks for Christian Ehrlicher for reporting the bug and testing + its fix + + poppler/GlobalParams.cc | 1 + + poppler/GlobalParams.h | 1 + + poppler/GlobalParamsWin.cc | 1 - + 3 files changed, 2 insertions(+), 1 deletions(-) + +commit 68711d8494e2765c4a24ea59ce8d904981f0f917 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 9 23:24:22 2009 +0200 + + uint -> Guint + + some compilers don't know about uint + + poppler/Gfx.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 943a13c9354dec18cb023642aebbe5d3bb920ed7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 9 20:04:06 2009 +0200 + + poppler 0.12.0 + + CMakeLists.txt | 4 ++-- + NEWS | 18 ++++++++++++++++++ + configure.ac | 4 ++-- + msvc/config.h | 6 +++--- + qt4/src/Doxyfile | 2 +- + 5 files changed, 26 insertions(+), 8 deletions(-) + +commit e8ed7210346cb18f6e4588ad557f993c6d42f4a3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 9 19:21:21 2009 +0200 + + increase library to 3.2.0 + + qt4/src/CMakeLists.txt | 2 +- + qt4/src/Makefile.am | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit e950107006a3b1889646d3705323c1b3d41eaa49 +Author: David Benjamin <davidben@mit.edu> +Date: Wed Sep 9 01:19:38 2009 +0200 + + Fix infinite loop in JBIG2Decoder + + Bug 23025 + Also fixes problems in bug-poppler6881-2.pdf and bug-poppler6500.pdf + + poppler/JBIG2Stream.cc | 13 ++++++++----- + 1 files changed, 8 insertions(+), 5 deletions(-) + +commit 1cb25a4adaaf3e2da50724312a3db6928991f425 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Sep 6 10:45:56 2009 +0200 + + [glib] Ignore attachments with an invalid embedded file + + Fixes bug #10386 + + glib/poppler-document.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 842e00f3114666609ef4dec6fa613d46f330a40c +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Sep 5 15:20:35 2009 +0200 + + Add EmbeddedFile::isValid + + Also do not crash if data() is called on an invalid file + + qt4/src/poppler-embeddedfile.cc | 10 +++++++++- + qt4/src/poppler-qt4.h | 9 ++++++++- + 2 files changed, 17 insertions(+), 2 deletions(-) + +commit 9d40b268f5a9a9a0fb79da0e1627dd8eebc4db6a +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Sep 5 15:19:27 2009 +0200 + + Add EmbFile::isOk + + At the moment returns false if the object stream is not really + a stream + + poppler/Catalog.h | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 642650b6f70425c8fff2df978ae71249a5ae07f3 +Author: David Benjamin <davidben@mit.edu> +Date: Sat Sep 5 01:12:49 2009 +0200 + + Better fallback when there's a type mismatch + + Bug #17252 + + poppler/GfxFont.cc | 38 ++++++++++++++++++++++++++++++++------ + 1 files changed, 32 insertions(+), 6 deletions(-) + +commit bf5811f5331292ccf30f1b0f089fe43d351d96be +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Aug 26 00:43:46 2009 +0200 + + Improve shading color rendering + + Shading is not necessarily lineal so require another bisection to + assume all the area in between have the same color. Fixes bug #20238 + + poppler/Gfx.cc | 17 ++++++++++++++++- + 1 files changed, 16 insertions(+), 1 deletions(-) + +commit e94430b790fde6ce7b7cb163c2e0adf2d071c81d +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Aug 26 00:42:49 2009 +0200 + + Make code a bit more readable + + poppler/Gfx.cc | 23 +++++++++++------------ + 1 files changed, 11 insertions(+), 12 deletions(-) + +commit 465212780557705fd939dfe54f96913505bfc96e +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Aug 25 21:55:45 2009 +0200 + + forgot to update my copyright + + poppler/JPEG2000Stream.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 4f6016d01ced32002bef22b9b5d5426a74e55842 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Aug 25 21:10:07 2009 +0200 + + Fix format security warnings + + Don't just directly print strings of unknown content; use "%s". + + poppler/JPEG2000Stream.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 4616b23382b5d155f8b2f1942733037cf5730844 +Author: Christian Persch <chpe@gnome.org> +Date: Tue Aug 25 21:09:40 2009 +0200 + + Fix format security warnings + + Don't just directly print strings of unknown content; use "%s". + + poppler/GfxState.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 6c5c8d008456d1e4f3d60bc182209747c2a175dc +Author: Christian Persch <chpe@gnome.org> +Date: Tue Aug 25 21:03:16 2009 +0200 + + Support AM_SILENT_RULES + + When using automake 1.11, should support silent build rules. + + Makefile.am | 2 +- + configure.ac | 1 + + glib/Makefile.am | 4 ++-- + qt4/demos/Makefile.am | 2 +- + qt4/src/Makefile.am | 2 +- + qt4/tests/Makefile.am | 2 +- + 6 files changed, 7 insertions(+), 6 deletions(-) + +commit e7dd1c47b01d8f31599ee686eafbe7c54d7c023a +Author: Christian Persch <chpe@gnome.org> +Date: Tue Aug 25 21:01:13 2009 +0200 + + Fix automake check, and add automake 1.11 support + + Fix the automake checks to take the *newest* version available, + not the + oldest one. Add support for automake 1.11. FDO#23473. + + autogen.sh | 13 +++++++------ + 1 files changed, 7 insertions(+), 6 deletions(-) + +commit 493d2c5aa78a3241e70108c5d7eccba9ac72f834 +Author: Rex Dieter <rdieter@math.unl.edu> +Date: Mon Aug 24 20:08:46 2009 +0200 + + Use Requires.private if available + + The following patch minimizes pkg-config deps similar to how the + glib-related pkg-config deps are done. + + poppler-qt.pc.cmake | 3 ++- + poppler-qt.pc.in | 3 ++- + poppler-qt4.pc.cmake | 3 ++- + poppler-qt4.pc.in | 3 ++- + 4 files changed, 8 insertions(+), 4 deletions(-) + +commit 341cd3ecd08a39cd146c1c57f356b50a2881c03f +Author: Jakub Wilk <ubanus@users.sf.net> +Date: Mon Aug 24 19:51:34 2009 +0200 + + common options for pdftoabw + + The attached patch fixes command line handling for pdftoabw and + implements some + common options (e.g., --help) that are already found in other + pdftosomething + utilities. + + utils/pdftoabw.cc | 39 ++++++++++++++++++++++++++++++++------- + 1 files changed, 32 insertions(+), 7 deletions(-) + +commit 365683d5faea6e0a7570b139d1f3366c22271f8e +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Aug 18 21:18:13 2009 +0200 + + 0.11.3 + + CMakeLists.txt | 2 +- + NEWS | 22 ++++++++++++++++++++++ + configure.ac | 2 +- + msvc/config.h | 6 +++--- + qt4/src/Doxyfile | 2 +- + 5 files changed, 28 insertions(+), 6 deletions(-) + +commit cb28bc8a637d300664b3c7569263445275333878 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Aug 17 14:14:03 2009 +0200 + + [glib] Add FORMAT_MAJOR/MINOR properties to get the PDF version + + See bug #23076. + + glib/poppler-document.cc | 26 ++++++++++++++++++++++++++ + 1 files changed, 26 insertions(+), 0 deletions(-) + +commit 1b5612841b0c663f6d391d4581f65f68a2975db0 +Author: Pino Toscano <pino@kde.org> +Date: Mon Aug 17 01:04:04 2009 +0200 + + [Qt] add Document::getPdfVersion(int *major, int *minor) for the + document PDF version numbers + + This new function reads the version of the PDF specification of the + document, putting major and minor numbers in own variables. + + qt/poppler-document.cc | 8 ++++++++ + qt/poppler-qt.h | 12 ++++++++++++ + 2 files changed, 20 insertions(+), 0 deletions(-) + +commit aef8ecda1e80b921228f415a53c9c5a52df87d94 +Author: Pino Toscano <pino@kde.org> +Date: Mon Aug 17 00:57:08 2009 +0200 + + [Qt4] deprecate Document::pdfVersion() + + ... in favour of getPdfVersion() + + qt4/src/poppler-qt4.h | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit 830140f70e48e8033ad4411b6bd405d5ad7358a3 +Author: Pino Toscano <pino@kde.org> +Date: Mon Aug 17 00:51:13 2009 +0200 + + [Qt4] add Document::getPdfVersion(int *major, int *minor) for the + document PDF version numbers + + This new function reads the version of the PDF specification of the + document, putting major and minor numbers in own variables. + Add them to the relative unit test. + + qt4/src/poppler-document.cc | 8 ++++++++ + qt4/src/poppler-qt4.h | 13 +++++++++++++ + qt4/tests/check_metadata.cpp | 4 ++++ + 3 files changed, 25 insertions(+), 0 deletions(-) + +commit 5491d16dfbd73f0256c62e49d02622dc3185012e +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 17 00:24:41 2009 +0200 + + Move poppler core away from using a double as PDF file version + + Frontends are yet to come + + glib/poppler-document.cc | 2 +- + poppler/PDFDoc.cc | 7 ++++--- + poppler/PDFDoc.h | 8 +++++--- + qt/poppler-document.cc | 4 ++-- + qt4/src/poppler-document.cc | 4 ++-- + utils/pdfinfo.cc | 4 ++-- + 6 files changed, 16 insertions(+), 13 deletions(-) + +commit efd5dd63a5b08249529d9a9f5906aefe806fb3aa +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 17 00:21:22 2009 +0200 + + Forgot to update copyright info + + fofi/FoFiType1C.cc | 14 ++++++++++++++ + poppler/PDFDoc.cc | 2 +- + utils/parseargs.c | 2 +- + 3 files changed, 16 insertions(+), 2 deletions(-) + +commit 25ff4be0b4521cc3d2de386cdeb589beb245d435 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 17 00:15:10 2009 +0200 + + No need to change the locale since we use gatof that does the + right thing + + poppler/PDFDoc.cc | 6 +----- + 1 files changed, 1 insertions(+), 5 deletions(-) + +commit a6f698b4edc42c0414dd4690e1e037088321db2c +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 17 00:14:35 2009 +0200 + + Use gatof instead of atof + + fofi/FoFiType1C.cc | 3 ++- + poppler/Annot.cc | 5 +++-- + poppler/Function.cc | 3 ++- + poppler/PDFDoc.cc | 3 ++- + utils/parseargs.c | 4 +++- + 5 files changed, 12 insertions(+), 6 deletions(-) + +commit 807b121cae45832d2e5832bad19c31e77420bfec +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 17 00:10:30 2009 +0200 + + Add a custom strtod that comes from libspectre + + Works over C locale integers without changing locale settings + + CMakeLists.txt | 2 + + goo/Makefile.am | 6 ++- + goo/gstrtod.cc | 147 + +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + goo/gstrtod.h | 43 ++++++++++++++++ + 4 files changed, 196 insertions(+), 2 deletions(-) + +commit 914bf7677a14494b69857b1d8070092a9999fe79 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 16 20:50:02 2009 +0200 + + When writing the cm matrix write 4 significant digits not 4 decimals + + This fixes bug 23332 + Maybe we want to make this the default behaviour of 'g' instead of + a new 'gs' case, but i prefer to be on the safe side for the moment + + goo/GooString.cc | 27 +++++++++++++++++++++++++-- + goo/GooString.h | 4 +++- + poppler/PSOutputDev.cc | 4 ++-- + 3 files changed, 30 insertions(+), 5 deletions(-) + +commit b7dfca1aa52b825eb3b8f1cc0470398c31615b30 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Aug 16 19:28:37 2009 +0200 + + [cairo] CairoImageOutputDev doesn't implement patterns + + poppler/CairoOutputDev.h | 13 +++++++++++++ + 1 files changed, 13 insertions(+), 0 deletions(-) + +commit d20d65111aee2ee4b8cdea2962ed1bb149122ba9 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Aug 16 17:36:14 2009 +0200 + + [cairo] Implement tiling patterns in cairo backend + + Fixes bug #13518 for the cairo backend. + + poppler/CairoOutputDev.cc | 56 + +++++++++++++++++++++++++++++++++++++++++++++ + poppler/CairoOutputDev.h | 10 ++++++++ + 2 files changed, 66 insertions(+), 0 deletions(-) + +commit e965d0686d979c775b64a93f8e2f775f81885417 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Aug 13 14:48:10 2009 +0200 + + Change OutputDev::tilingPatternFill to return a GBool + + It allows outputdevs to decide whether render the pattern or not + depending + on the parameters, like shaded patterns currently do. + + poppler/Gfx.cc | 37 +++++++++++++++++++------------------ + poppler/OutputDev.h | 11 ++++++----- + poppler/PSOutputDev.cc | 12 +++++++----- + poppler/PSOutputDev.h | 10 +++++----- + 4 files changed, 37 insertions(+), 33 deletions(-) + +commit ce70ef7d6afc800e24031dae43da301e9e542f0e +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Aug 15 17:45:57 2009 +0200 + + Fix backwards search + + qt4/src/poppler-page.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 5b7b1cdc5c3b8652d3ae583b4d7b8b6de625adc2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Aug 15 17:45:05 2009 +0200 + + Add an autotest showing previousresult fails + + qt4/tests/check_search.cpp | 51 + ++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 51 insertions(+), 0 deletions(-) + +commit 2484b0dcb8eb62f8e2c147498c58871ec04630b5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Aug 14 11:47:11 2009 +0200 + + Implement the alpha path + + I wonder if this is the correct fix why it was not implemented + but if fixes rendering of files in KDE bug 145868, KDE bug 193657, + poppler bug 17473.pdf, poppler bug 21651, poppler bug 22143 and + poppler bug 22152 and causes no regression in all the other files + i have in my test dir so i'm commiting it + + poppler/SplashOutputDev.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 03970d8b6d7624444664320470baa6d1b1299622 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Aug 11 12:01:07 2009 +0200 + + [build] Fix build with autotools + + utils/Makefile.am | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 15752b7cd5c94620e3ad3b6afd9c70ccc754c9b3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Aug 10 20:02:13 2009 +0200 + + [cairo] Add empty updateBlendMode to CairoImageOutputDev + + Fixes a crash when using CairoImageOutputDev with a document with + blend + modes. + + poppler/CairoOutputDev.h | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 45dae4e66b2b833f95656850b5f1b0ffd1d96f1d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Aug 10 20:00:04 2009 +0200 + + [cairo] Use current fill_opacity when drawing images + + Fixes launchpad bug #342282 (page 2 of the attached document) + + poppler/CairoOutputDev.cc | 16 +++++++++++++--- + 1 files changed, 13 insertions(+), 3 deletions(-) + +commit b1cd54546844f2f7cd6bf7cc14b7584c84c3fc14 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Aug 10 19:55:44 2009 +0200 + + [cairo] Do not save the font file twice for FreeType fonts + + Fixes bug #20491. + + poppler/CairoFontEngine.cc | 19 ++----------------- + 1 files changed, 2 insertions(+), 17 deletions(-) + +commit 4181a0ff11195eb7a56d76be23994b843e20b483 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 10 19:58:09 2009 +0200 + + this branch is unlikely to happen + + poppler/Lexer.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 2a3025f32951ce7b7343aeef111902615d71595e +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 10 19:55:40 2009 +0200 + + fix overflow calculation not to depend on the variable overflowing + + poppler/Lexer.cc | 12 ++++++++---- + 1 files changed, 8 insertions(+), 4 deletions(-) + +commit a38001f724f78231c2fdadd28e647a35b41bab74 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 9 23:26:02 2009 +0200 + + Check for overflow when parsing integers + + Fixes bug 23078 + + poppler/Lexer.cc | 28 ++++++++++++++++++++++------ + 1 files changed, 22 insertions(+), 6 deletions(-) + +commit 4c4c0e44452d07bea88d98b7df0c01fadd7693cc +Author: Jakub Wilk <ubanus@users.sf.net> +Date: Sat Aug 8 17:26:14 2009 +0200 + + Silence some warnings when using internal headers and not compiling + with -Wno-write-strings + + People should not be using internal headers but it's just two lines + + poppler/Object.h | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit e2c319ba18ab473fd969db9519a9231be67538c3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Aug 8 00:48:18 2009 +0200 + + Also implement mono so that -mono in pdftoppm -png works + + Totally not optimized + + splash/SplashBitmap.cc | 23 ++++++++++++++++++++++- + 1 files changed, 22 insertions(+), 1 deletions(-) + +commit c669e7f3ca421265e78161cc3fdecd2a0c7510c9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Aug 8 00:38:50 2009 +0200 + + Support splashModeMono8 in writePNGFile + + Works though is non optimal + + splash/SplashBitmap.cc | 55 + ++++++++++++++++++++++++++++++++++-------------- + 1 files changed, 39 insertions(+), 16 deletions(-) + +commit 92744b72df9084fd2d69ba78406898378884aed8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Aug 8 00:20:52 2009 +0200 + + Add the -png flag to pdftoppm to output to PNG + + Based on a patch by Shen Liang <shenzhuxi@gmail.com> + Also factored common PNG code from HtmlOutputDev to PNGWriter + + CMakeLists.txt | 5 ++ + goo/Makefile.am | 9 +++- + goo/PNGWriter.cc | 110 + +++++++++++++++++++++++++++++++++++++++++++++ + goo/PNGWriter.h | 43 +++++++++++++++++ + poppler/Makefile.am | 8 +++ + splash/SplashBitmap.cc | 70 ++++++++++++++++++++++++++++ + splash/SplashBitmap.h | 5 ++ + splash/SplashErrorCodes.h | 4 +- + utils/CMakeLists.txt | 4 -- + utils/HtmlOutputDev.cc | 66 +++++---------------------- + utils/Makefile.am | 4 -- + utils/pdftoppm.1 | 3 + + utils/pdftoppm.cc | 21 +++++++-- + 13 files changed, 283 insertions(+), 69 deletions(-) + +commit e4439ff527bb202d0239f78e647452983b733411 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Aug 7 15:23:57 2009 +0200 + + [cairo] Don't apply masks when fill color space mode is csPattern + + In that case the mask is used for clipping when drawing images. Fixes + bug #22216. + + poppler/CairoOutputDev.cc | 59 + +++++++++++++++++++++++++++++---------------- + 1 files changed, 38 insertions(+), 21 deletions(-) + +commit 7194f59a18e4f6997ae560af3db1bd101d6f726e +Author: Chris Wilson <chris@chris-wilson.co.uk> +Date: Thu Aug 6 11:24:22 2009 +0100 + + [cairo] Use FT_New_Memory_Face() for mmapped fonts + + If we hold a mapping for the font, then we can pass that memory to + FreeType for it to use as well. This saves on FreeType having to + read the + file into a fresh block of memory. + + poppler/CairoFontEngine.cc | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit 7e2bbcf6f85111d1006b0d5bc1503cadaba83c9f +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Aug 4 00:10:58 2009 +0200 + + Set KDAB via gamaral copyright + + poppler/Form.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit ed5918e16dafebc9ecf6db8ce0186f407ecbf7d5 +Author: Pino Toscano <pino@kde.org> +Date: Sat Aug 1 20:00:22 2009 +0200 + + [Qt4 apidox] make example for FontIterator... not leak ;) + + qt4/src/poppler-qt4.h | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit f3b36d9c992491e614e88dbf1a84b5433a7647f4 +Author: Pino Toscano <pino@kde.org> +Date: Sat Aug 1 19:54:52 2009 +0200 + + [Qt4] Add color management API. + + Add few wrapper functions to get/set color profiles. + Add a function to know whether the color management functions actually + do anything (ie support compiled or not). + Add few basic API docs for the new functions. + Based on an initial patch by Hal V. Engel <hvengel@astound.net>, + heavily reindented, polished and massaged in its API by me. + + qt4/src/poppler-document.cc | 52 + +++++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-qt4.h | 50 + +++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 102 insertions(+), 0 deletions(-) + +commit 78a1969d040018c0c2bb74c94f5507f786e4666e +Author: Pino Toscano <pino@kde.org> +Date: Sat Aug 1 18:00:06 2009 +0200 + + [Qt] add unhandled cases and remove unused code + + qt/poppler-page.cc | 12 ++---------- + 1 files changed, 2 insertions(+), 10 deletions(-) + +commit bddebec0712e92e13b57d3d05d652673fe737866 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Aug 1 17:12:22 2009 +0200 + + 0.11.2 + + CMakeLists.txt | 2 +- + NEWS | 30 ++++++++++++++++++++++++++++++ + configure.ac | 2 +- + msvc/config.h | 6 +++--- + qt4/src/Doxyfile | 2 +- + 5 files changed, 36 insertions(+), 6 deletions(-) + +commit 87e2af3454348f5568d155c15af5d85268e47f1b +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Aug 1 15:48:02 2009 +0200 + + [glib-demo] Add cast to make sure the comparison is always valid + + glib/demo/attachments.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 464e95ef451103daddc9a30cd26b986291f02176 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Aug 1 15:47:25 2009 +0200 + + [glib-demo] Add missing return + + glib/demo/attachments.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 7f48369e4d29b2a71abffa9e1966e3a2252de895 +Author: Guillermo Antonio Amaral Bastidas <gamaral@amaral.com.mx> +Date: Sat Aug 1 15:41:34 2009 +0200 + + Call fillChildrenSiblingsID in fillChildrenSiblingsID instaed of + loadChildrenDefaults + + poppler/Form.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e21a3e40bf6f4365064cea751ae186580d8f81f5 +Author: William Bader <williambader@hotmail.com> +Date: Sat Aug 1 15:23:03 2009 +0200 + + Add the possibility of disabling font substitution in pdftops + + Bug #23030 + + poppler/GlobalParams.cc | 17 +++++++++++++ + poppler/GlobalParams.h | 4 +++ + poppler/PSOutputDev.cc | 59 + ++++++++++++++++++++++++++-------------------- + poppler/PSOutputDev.h | 2 + + utils/pdftops.1 | 8 +++++- + utils/pdftops.cc | 7 +++++ + 6 files changed, 70 insertions(+), 27 deletions(-) + +commit bd68c90338cbf16f468e5db59722610300a629e1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Aug 1 15:19:48 2009 +0200 + + Forgot to add my copyright + + poppler/GfxState.h | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 173451730948c320f16a0f5924a58302603eca0b +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Aug 1 15:13:35 2009 +0200 + + Try to workaround some incorrect PDF + + Fixes rendering of PDF where forms/patterns have more q than Q. Fixes + rendering in splash of pdf in bugs #22835, #21899 and #16402 + + poppler/Gfx.cc | 13 +++++++++++++ + poppler/GfxState.h | 1 + + 2 files changed, 14 insertions(+), 0 deletions(-) + +commit 35c408ca49be08144bcf14aa112505fd556725d2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 31 23:27:02 2009 +0200 + + add the overloaded virtual warning also the autotools based build + + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1c32bd2d101e5dfb37e28276ecad699f121b27b7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 31 23:22:25 2009 +0200 + + Add my copyright to files i just edited + + poppler/OutputDev.cc | 1 + + poppler/OutputDev.h | 1 + + utils/HtmlOutputDev.h | 2 +- + 3 files changed, 3 insertions(+), 1 deletions(-) + +commit 10717a48c85f1dbeff1c6bcd094006a9ecc92efc +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 31 23:22:10 2009 +0200 + + Add -Woverloaded-virtual as default CXX flag + + cmake/modules/PopplerMacros.cmake | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit db5f736655f01575ac5d7c524cbf131924ae91fa +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 31 23:12:00 2009 +0200 + + rename the function + + That way the name is different from the OutputDev function and does + not seem like a wrong overload + + utils/HtmlOutputDev.cc | 4 ++-- + utils/HtmlOutputDev.h | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit 4be87f87509b93c4fe4025f9bd788e9412416663 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 31 23:11:32 2009 +0200 + + Remove Outputdev::beginMarkedContent as noone uses it + + poppler/Gfx.cc | 2 -- + poppler/OutputDev.cc | 3 --- + poppler/OutputDev.h | 1 - + 3 files changed, 0 insertions(+), 6 deletions(-) + +commit 6ab2ec8a89519d2bd1576c8d62f8aec51b04479a +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 31 23:10:56 2009 +0200 + + Warning-- + + poppler/PSOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 53c3d636ad645a350b576160e1498726238a7bd1 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jul 31 18:23:57 2009 +0200 + + [cairo] Implement radialShadedFill in cairo backend using cairo + gradients + + Fixes bugs #10942, #14160 + + poppler/CairoOutputDev.cc | 28 +++++++++ + poppler/CairoOutputDev.h | 2 + + poppler/Gfx.cc | 141 + +++++++++++++++++++++++++++------------------ + poppler/OutputDev.h | 2 +- + poppler/PSOutputDev.cc | 3 +- + poppler/PSOutputDev.h | 2 +- + 6 files changed, 117 insertions(+), 61 deletions(-) + +commit 2ba937545d1a2b9fa798f04fee755ccdf0e74ec7 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jul 31 17:49:18 2009 +0200 + + [cairo] Use cairo_pattern_set_extend for linear gradients + + poppler/CairoOutputDev.cc | 9 +++++++++ + poppler/CairoOutputDev.h | 1 + + poppler/Gfx.cc | 34 ++++++++++++++++++++++++++++------ + poppler/OutputDev.h | 4 ++++ + 4 files changed, 42 insertions(+), 6 deletions(-) + +commit b054756113f0df6b59935823882f412486e96db5 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jun 17 11:10:15 2009 +0200 + + [cairo] Implement blend mdoes in cairo backend + + It requires cairo from git master to work at the moment. Fixes bugs + #22384, #12979, #13603, #17919, #22255 + + configure.ac | 27 ++++++++++++++++++++ + poppler/CairoOutputDev.cc | 59 + +++++++++++++++++++++++++++++++++++++++++++++ + poppler/CairoOutputDev.h | 1 + + 3 files changed, 87 insertions(+), 0 deletions(-) + +commit bf8964726c9311e7e82b1faf49cc2272e5c1e339 +Author: William Bader <williambader@hotmail.com> +Date: Thu Jul 30 22:08:43 2009 +0200 + + Fix some double to int warnings by explicit casting + + poppler/Gfx.cc | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +commit fdbd0c548e963461b2bc4bdf1beaa1577cafcea7 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 30 21:05:18 2009 +0200 + + Update gtk-doc build files + + gtk-doc.make | 102 + ++++++++++++++++++++++++++++++++++++++------------------ + m4/gtk-doc.m4 | 74 +++++++++++++++++++++++------------------ + 2 files changed, 110 insertions(+), 66 deletions(-) + +commit ae84dce5cea4d249526a6ed5b2feb2d3f241da1b +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 30 20:45:39 2009 +0200 + + Revert "Remove unneeded files from repo" + + This reverts commit 4cc9dee35e03d7b295a476f937ec0f2c43bb6592. + + See bug #22697. + + configure.ac | 2 +- + glib/reference/Makefile.am | 4 +- + gtk-doc.make | 155 + ++++++++++++++++++++++++++++++++++++++++++++ + m4/gtk-doc.m4 | 53 +++++++++++++++ + 4 files changed, 211 insertions(+), 3 deletions(-) + +commit 7e14516a78b16453c747eb92b08665632e5f6844 +Author: Sanjoy Mahajan <sanjoy@mit.edu> +Date: Mon Jul 27 23:20:50 2009 +0200 + + Fix displayPages call + + Parameters are outputdev, first, last, dpi, dpi, rotate, usemediabox, + crop, printing + and we were doing + usemediabox = !noCrop + crop = gFasle + the correct is + usemediabox = noCrop + crop = !noCrop + + utils/pdftops.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 3d53a0eb14420d54c0ebf8590e34c018b8da105d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jul 19 16:02:33 2009 +0200 + + Copy byte_lookup in copy constructor + + poppler/GfxState.cc | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 8f7271acf17c46e663cd48d90c382b04a834fba2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jul 19 15:53:49 2009 +0200 + + Don't use byte_lookup table when color space doesn't support getLine + methods + + For color spaces that don't implement getRGBLine or getGrayLine + methods, + getRGB or getGray are called for every pixel, however we were + allocating + the byte_lookup table and converting colors in those cases + too. Instead + of falling back to generic methods in the base class, the new methods + useGetRGBLine and useGetGrayLine have been added to he base class, + so that + when they are not suopported in the current color space byte_lookup + table is + not used at all. + + Fixes bug #11027. + + poppler/GfxState.cc | 125 + ++++++++++++++++++++++++++++++--------------------- + poppler/GfxState.h | 21 +++++++- + 2 files changed, 91 insertions(+), 55 deletions(-) + +commit 1bc737796bef1c65289a101b2d4c367267b9c974 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jul 19 15:51:43 2009 +0200 + + Remove unused variable + + poppler/GfxState.h | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 512b2c654fd80c83b82e7adc828a478a18de17ab +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jul 26 19:35:06 2009 +0200 + + [cairo] Use CAIRO_EXTEND_PAD in drawImageMaskPrescaled too + + poppler/CairoOutputDev.cc | 32 +++++++++++++++----------------- + 1 files changed, 15 insertions(+), 17 deletions(-) + +commit ad26e34bede53cb6300bc463cbdcc2b5adf101c2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jul 26 18:36:06 2009 +0200 + + [cairo] Use rectangle + clip instead of invert + tranform + + This is just for consistency of drawImage methods + + poppler/CairoOutputDev.cc | 30 ++++++++++++++---------------- + 1 files changed, 14 insertions(+), 16 deletions(-) + +commit ee6b761a55baef4c3bbe4614b0c3b3d761a3111f +Author: Chris Wilson <chris@chris-wilson.co.uk> +Date: Sun Jul 26 16:19:15 2009 +0200 + + [cairo] Apply a clip for masked drawImage + + In order to use EXTEND_PAD with a mask, we need to apply a clip (to + constrain the image to the appropriate region). The complicating + factor for + drawSoftImage() is that mask size is independent of the image size, + so we + need to compute the intersection of the mask with in the image + in userspace. + + poppler/CairoOutputDev.cc | 21 ++++++++++++++------- + 1 files changed, 14 insertions(+), 7 deletions(-) + +commit 499c6c972bac14936b5370276da723a6e98861b3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jul 26 11:30:08 2009 +0200 + + [cairo] Use CAIRO_EXTEND_PAD when drawing images + + poppler/CairoOutputDev.cc | 306 + +++++++++++++++++++++------------------------ + 1 files changed, 140 insertions(+), 166 deletions(-) + +commit f91eb7d01cef0897727c63267db309bc92297d37 +Author: Koji Otani <sho@bbr.jp> +Date: Sat Jul 25 16:34:12 2009 +0200 + + Fix generation of ps for some files + + For example fixes second pdf in bug 18908 + + poppler/PSOutputDev.cc | 68 + ++++++++++++++++++++++++++++++++++++------------ + 1 files changed, 51 insertions(+), 17 deletions(-) + +commit f93f5e17d8f23f3e2862f3411f43a95b334e6c91 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Jul 20 17:10:37 2009 +0200 + + [cairo] Improve performance when rendering one-channel images + + It implements the same idea already used in SplashOutputDev, for + one-channel (monochrome/gray/separation) images we build a lookup + table + so that we won't need to call colorMap->getRGBLine when filling the + image buffer. Fixes bug #18017. + + poppler/CairoOutputDev.cc | 36 ++++++++++++++++++++++++++++++++++-- + 1 files changed, 34 insertions(+), 2 deletions(-) + +commit e7475062b6ae5c495fa72faaf8fb3d97391f8544 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jul 14 17:22:52 2009 +0200 + + [cairo] Handle fontType1COT fonts in CairoFontEngine + + poppler/CairoFontEngine.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit d42b9425fb2f98fa79e7a60e4f71ef14f5bacfe9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jul 12 19:55:14 2009 +0200 + + glade is not used anymore + + cmake/modules/FindGTK.cmake | 9 ++++----- + 1 files changed, 4 insertions(+), 5 deletions(-) + +commit 454f7468c6a6a442a5064b5daa24d65ebf4fc6b6 +Author: Chris Wilson <chris@chris-wilson.co.uk> +Date: Thu Jul 9 10:43:00 2009 +0100 + + [cairo] Fix drawImage() for non-1x1 images + + Carlos noticed a nasty bug with converting drawImage() to use PAD + + fill, + instead of NONE + paint. That is the image was being padded out + far beyond + the correct output extents. The cause is that the caller pre-scales + the + context for the image, so the output rectangle was many times the true + image size - obliterating large amounts of the page. The temporary + fix is + to counter-act the scaling on the context. Longer term, after + fixing all + painters to use PAD correctly, we need to review the callers to remove + unnecessary pre-scaling. + + poppler/CairoOutputDev.cc | 16 ++++++++++++---- + 1 files changed, 12 insertions(+), 4 deletions(-) + +commit f8d93eae3c7b9388feabac71f2380d0b42a855e7 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jul 8 20:14:35 2009 +0200 + + Lookup UF and F entries before Unix, MAC and DOS in getFileSpec + + poppler/FileSpec.cc | 24 ++++++++++++------------ + 1 files changed, 12 insertions(+), 12 deletions(-) + +commit 767c534f5fdf6ccbccfd85a0086d72c215c278f1 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jul 8 19:13:54 2009 +0200 + + Use UF entry when present in dict in getFileSpecName() too + + poppler/FileSpec.cc | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 569627ac4d56ddd58e109ce2a37179a85e042030 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jul 8 13:02:16 2009 +0200 + + Implement axialShadedFill in cairo backend using cairo gradients + + See bug #10942. + + poppler/CairoOutputDev.cc | 29 +++++++++++++++++++++++++++++ + poppler/CairoOutputDev.h | 10 ++++++++++ + poppler/Gfx.cc | 29 ++++++++++++++++++++--------- + poppler/OutputDev.h | 6 +++++- + poppler/PSOutputDev.cc | 2 +- + poppler/PSOutputDev.h | 2 +- + 6 files changed, 66 insertions(+), 12 deletions(-) + +commit 6ae0a6c0044713affa23eb1ee6a070785ed6c2f3 +Author: Chris Wilson <chris@chris-wilson.co.uk> +Date: Wed Jul 8 16:48:26 2009 +0100 + + [cairo] premultiply image mask + + Cairo uses a premultiplied colour-space, so when creating the + image mask + in drawImage() we need to remember to multiply by the alpha. In + this case + it just requires zeroing out the masked pixels. + + poppler/CairoOutputDev.cc | 9 +++++++-- + 1 files changed, 7 insertions(+), 2 deletions(-) + +commit 646e5884e748ecce7094c673400484aa1d902bdd +Author: Chris Wilson <chris@chris-wilson.co.uk> +Date: Wed Jul 8 17:00:34 2009 +0100 + + [cairo] maskColors is an array of ints, no scaling required + + drawImage() was erroneously scaling the maskColors from what it + believed + to be [0:1] to [0:255]. However maskColors is already an integer + array, + [0:255]. + + poppler/CairoOutputDev.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit d75feb1ee84385a9f94308cf47a43f4583092ddf +Author: Chris Wilson <chris@chris-wilson.co.uk> +Date: Wed Jul 8 16:37:19 2009 +0100 + + [cairo] cleanse DrawImage() + + Just a small bit of code rearrangement to reduce repetition and + invalid checks. + + poppler/CairoOutputDev.cc | 102 + ++++++++++++++++++--------------------------- + 1 files changed, 41 insertions(+), 61 deletions(-) + +commit 52f3704fed16cfc1e9dd85f72dde7922371e4099 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jul 8 11:40:52 2009 +0200 + + [TODO] Update TODO file + + TODO | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit ef261f5f72d37a0aa2709611ee2bad7d55340ed8 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jul 7 10:57:31 2009 +0200 + + Do not use F and UF entries if Unix or DOS are present in FileSpec + dict + + poppler/FileSpec.cc | 114 + +++++++++++++++++++++++---------------------------- + 1 files changed, 51 insertions(+), 63 deletions(-) + +commit cafd4653dc6c7574214e80aa09489dcd24e347a6 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jul 1 11:41:32 2009 +0200 + + [glib-demo] Fix a typo + + glib/demo/utils.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit a3c9c6d0c0ee55dccd2d03f20d5683ae300cdc6b +Author: Pino Toscano <pino@kde.org> +Date: Wed Jul 8 02:01:39 2009 +0200 + + start updating the TODO file + + TODO file had quite some rust and dust in it, making quite "difficult" + for others to understand what can be done for helping. + First step has been removing all the items done. + Next is grouping items by areas, so it is more clear what should be + done in what area; current areas are: + - general items: for general stuff to be done, not specific to some + area; an example could have been "use littlecms for color management?" + - core: stuff which is specific to the core library + - Qt4/Qt/glib/etc frontend: stuff specific for that frontend + - new frontends: ideas for possible new frontends + + I was not sure about some items and Jeff Muizelaar's TODO, so I left + them there. + + TODO | 47 +++++++++++++++-------------------------------- + 1 files changed, 15 insertions(+), 32 deletions(-) + +commit 92ad0ef89fe7690d83854b4821178dfdb2e22897 +Author: Pino Toscano <pino@kde.org> +Date: Sat Jul 4 00:19:23 2009 +0200 + + [Qt4 demo] hopefully fix the page size on zoom change + + qt4/demos/pageview.cpp | 5 +---- + 1 files changed, 1 insertions(+), 4 deletions(-) + +commit 97094d13bc0f144b25e13c1de7a5328608ab13e3 +Author: Pino Toscano <pino@kde.org> +Date: Sat Jul 4 00:07:12 2009 +0200 + + [Qt4 demo] show a list of checked/unchecked items for the document + permissions + + qt4/demos/permissions.cpp | 25 ++++++++----------------- + qt4/demos/permissions.h | 6 +++--- + 2 files changed, 11 insertions(+), 20 deletions(-) + +commit 0d8f2ee0f03a14e7b8477c4b787c3441a758f26b +Author: Pino Toscano <pino@kde.org> +Date: Fri Jul 3 23:55:42 2009 +0200 + + [Qt4 demo] show page numbers in the toolbar as 1..n + + qt4/demos/navigationtoolbar.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b0d48df9121c55f8162ddf0ee63832f9adebf37b +Author: Pino Toscano <pino@kde.org> +Date: Fri Jul 3 17:55:31 2009 +0200 + + [Qt4 demo] correctly use DPI values for the page sizes + + qt4/demos/pageview.cpp | 12 +++++++++--- + qt4/demos/pageview.h | 2 ++ + 2 files changed, 11 insertions(+), 3 deletions(-) + +commit dcc3c384919f1562b8f312ad3ac847e23f3e83ab +Author: Sebastien Bacher <seb128@ubuntu.com> +Date: Wed Jul 1 10:09:12 2009 +0200 + + [test] Use gtkbuilder rather than libglade + + Fixes bug #21673 + + cmake/modules/FindGTK.cmake | 1 - + configure.ac | 4 +- + test/Makefile.am | 2 +- + test/pdf-inspector.cc | 34 ++-- + test/pdf-inspector.glade | 434 + ------------------------------------------- + test/pdf-inspector.ui | 416 + +++++++++++++++++++++++++++++++++++++++++ + 6 files changed, 439 insertions(+), 452 deletions(-) + +commit 28208d1c9b8afbb769a5f4d9b0655b99fd4af16e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jul 1 09:52:12 2009 +0200 + + [glib-demo] Do not use gio if glib < 2.15 + + Fixes bug #22530. + + glib/demo/main.c | 33 +++++++++++++++++++++++++++++++-- + 1 files changed, 31 insertions(+), 2 deletions(-) + +commit 6ef83414ab55294cf46b6b05813927bb04066986 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 30 23:07:00 2009 +0200 + + Check getFileSpecNameForPlatform succeeded before using it's return + value + + Fixes crash on bug 22551 + + poppler/Annot.cc | 7 ++++--- + poppler/Link.cc | 30 +++++++++++++++++------------- + poppler/Sound.cc | 8 +++++--- + 3 files changed, 26 insertions(+), 19 deletions(-) + +commit 4b9db83841a8b97df1e0991c1b853897b7095777 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jun 30 11:24:29 2009 +0200 + + [glib-demo] Do not fill the surface before rendering + + The surface is guaranteed to be cleared + + glib/demo/render.c | 11 ++--------- + 1 files changed, 2 insertions(+), 9 deletions(-) + +commit 5deb6db5d340c08f337d2ba67aa1fd690e4eedd8 +Author: William Bader <williambader@hotmail.com> +Date: Mon Jun 29 21:55:49 2009 +0200 + + Fix interpolate parameter position + + poppler/SplashOutputDev.cc | 3 ++- + utils/ImageOutputDev.cc | 5 +++-- + 2 files changed, 5 insertions(+), 3 deletions(-) + +commit e1e9ae2826eff1665d798b4b50b5c63e8282246b +Author: Pino Toscano <pino@kde.org> +Date: Sun Jun 28 20:11:42 2009 +0200 + + [Qt4 demo] do not crash when changing the zoom with no document + + qt4/demos/pageview.cpp | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit a98de97137cb343182bd03c443fc08ff4e0fd9a5 +Author: Pino Toscano <pino@kde.org> +Date: Sun Jun 28 19:08:02 2009 +0200 + + [Qt4 demo] add a zoom combobox + + qt4/demos/navigationtoolbar.cpp | 33 ++++++++++++++++++++++++++++++++- + qt4/demos/navigationtoolbar.h | 7 ++++++- + qt4/demos/pageview.cpp | 14 ++++++++++++-- + qt4/demos/pageview.h | 6 +++++- + qt4/demos/viewer.cpp | 2 ++ + 5 files changed, 57 insertions(+), 5 deletions(-) + +commit 40002d2c765398869a3b7d8d92715f0608e39ab3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 28 16:45:19 2009 +0200 + + Make sure the array is big enough to read from it + + poppler/Gfx.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0a1b41ff6de5a41e3450ecbcb1ba754dc06c29d9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jun 26 19:31:22 2009 +0200 + + Do not crash when we can't find onStr + + Fixes crash in bug #22485 + Not sure this is the best solution, but Adobe doesn't even open + the file + + poppler/Form.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 6cb846664e57b02c99f1e6ad2b4e9128c9622e0a +Author: Ilya Gorenbein <igorenbein@finjan.com> +Date: Thu Jun 25 20:13:29 2009 +0200 + + Initilize AnnotColot properly when the Array is not correct + + poppler/Annot.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 5fdc3acb8dded2e7d08e6ef30f4c5ae1a4a11b5e +Author: Till Kamppeter <till.kamppeter@gmail.com> +Date: Mon Jun 22 21:38:23 2009 +0200 + + Only change the page size when it really changes, otherwise duplex + commands are lost + + poppler/PSOutputDev.cc | 10 +++++++++- + poppler/PSOutputDev.h | 4 ++++ + 2 files changed, 13 insertions(+), 1 deletions(-) + +commit bf69beeb257cfd750c6ddc8b68aeb859b36380b2 +Author: David Benjamin <davidben@mit.edu> +Date: Sat Jun 20 23:51:09 2009 +0200 + + Make DecryptStream return sane values for getPos() + + Many streams (notably JBIG2Stream) expect wrapped streams to return + correct + values for getPos(), i.e. increments by 1 when readChar() called, etc. + Fixes bug #19706. + + poppler/Decrypt.cc | 8 ++++++++ + poppler/Decrypt.h | 3 +++ + 2 files changed, 11 insertions(+), 0 deletions(-) + +commit 5ee4ff2aaf98e2eaa1ec2dc9f7e659b3b01ba7bf +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jun 20 15:00:16 2009 +0200 + + [glib-demo] Allow using relative paths in demo application + + glib/demo/main.c | 17 +++++------------ + 1 files changed, 5 insertions(+), 12 deletions(-) + +commit a568248d3255407fcaa7368c4925c20e95619d20 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jun 19 21:07:39 2009 +0200 + + 0.11.1 + + CMakeLists.txt | 2 +- + NEWS | 50 + ++++++++++++++++++++++++++++++++++++++++++++++++-- + configure.ac | 2 +- + msvc/config.h | 6 +++--- + qt4/src/Doxyfile | 2 +- + 5 files changed, 54 insertions(+), 8 deletions(-) + +commit ac99e239f2726db32617ff03174a6ce74361ea1b +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jun 19 21:03:29 2009 +0200 + + ship PopplerCache.h + + CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 84984d2aa25917d68c9971cefe636e626eada13d +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jun 19 20:54:15 2009 +0200 + + Ship PopplerCache.h too + + poppler/Makefile.am | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 3a52d46e5df8eb926b550d7f7a82f316dbf6808f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jun 19 17:45:44 2009 +0200 + + [glib-demo] Destroy pattern after using it + + glib/demo/render.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 2e97524e5d82a4c33a4e6410fead444681db6749 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jun 19 14:20:16 2009 +0200 + + [glib-demo] Use a transparent surface and fill it in white after + rendering + + glib/demo/render.c | 12 +++++++++--- + 1 files changed, 9 insertions(+), 3 deletions(-) + +commit 009937842d5a8bfc12394e9e3ab71b7c33340a85 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jun 19 14:10:05 2009 +0200 + + [glib-demo] Use cairo_paint instead of rectangle + fill + + glib/demo/render.c | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +commit 7248da095f67d57c3999cee7d980e62fd8a7cf49 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jun 19 09:37:02 2009 +0200 + + Use Interpolate flag to decide whether applying image interpolation + during rendering + + Fixes bug #9860 + + poppler/ArthurOutputDev.cc | 4 +- + poppler/ArthurOutputDev.h | 5 +- + poppler/CairoOutputDev.cc | 92 + +++++++++++++++++++++++++------------------ + poppler/CairoOutputDev.h | 48 +++++++++++++---------- + poppler/Gfx.cc | 49 +++++++++++++++++++--- + poppler/OutputDev.cc | 17 +++++--- + poppler/OutputDev.h | 13 ++++-- + poppler/PSOutputDev.cc | 8 ++- + poppler/PSOutputDev.h | 8 ++- + poppler/PreScanOutputDev.cc | 25 ++++++++++-- + poppler/PreScanOutputDev.h | 25 ++++++++++-- + poppler/SplashOutputDev.cc | 16 +++++-- + poppler/SplashOutputDev.h | 12 ++++-- + utils/HtmlOutputDev.cc | 16 ++++---- + utils/HtmlOutputDev.h | 7 ++- + utils/ImageOutputDev.cc | 20 +++++----- + utils/ImageOutputDev.h | 12 ++++-- + 17 files changed, 248 insertions(+), 129 deletions(-) + +commit 37e3f877ee725648734ff41e1e83870a210bcbd7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jun 19 00:37:21 2009 +0200 + + Handle Streams in CMap definitions + + Fixes bug 22334 + + poppler/CMap.cc | 50 + +++++++++++++++++++++++++++++----------------- + poppler/CMap.h | 17 +++++++++++---- + poppler/GfxFont.cc | 41 ++++++++++++++++++++++++++------------ + poppler/GlobalParams.cc | 6 ++-- + poppler/GlobalParams.h | 5 ++- + 5 files changed, 77 insertions(+), 42 deletions(-) + +commit 47de8eef46300832556ce5ed869e391e477fd843 +Author: David Benjamin <davidben@mit.edu> +Date: Fri Jun 19 00:30:35 2009 +0200 + + Fix some bugs in JBIG2Stream handling + + For more info see bug 12014 and [poppler] Bug in JBIG2Stream from + 08-June-2009 + + poppler/JBIG2Stream.cc | 88 + ++++++++++++++++++++++++++---------------------- + poppler/JBIG2Stream.h | 15 ++++++++ + 2 files changed, 63 insertions(+), 40 deletions(-) + +commit d30b1013ea3ce45b5ea942fe7357c0fd07ff47f4 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jun 2 11:44:08 2009 +0200 + + Add setOpen() and setIcon() in AnnotText + + poppler/Annot.cc | 25 +++++++++++++++++++++++++ + poppler/Annot.h | 3 +++ + 2 files changed, 28 insertions(+), 0 deletions(-) + +commit 287feffc1c1c0aa42a398fc071b489acef9ef22e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jun 2 11:26:40 2009 +0200 + + Add setLabel() and setPopup() to AnnotMarkup + + poppler/Annot.cc | 36 ++++++++++++++++++++++++++++++++++++ + poppler/Annot.h | 4 ++++ + 2 files changed, 40 insertions(+), 0 deletions(-) + +commit 2a938af5624fbc79316dd6bee5e550f2b4270a76 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jun 2 10:59:44 2009 +0200 + + Add setParent() and setOpen() to AnnotPopup + + poppler/Annot.cc | 19 +++++++++++++++++++ + poppler/Annot.h | 4 ++++ + 2 files changed, 23 insertions(+), 0 deletions(-) + +commit 0af5464352dfa51f0458c57a3590c847a45964c7 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jun 2 10:37:49 2009 +0200 + + Save parent reference of popup annotations + + poppler/Annot.cc | 16 +++++----------- + poppler/Annot.h | 4 ++-- + 2 files changed, 7 insertions(+), 13 deletions(-) + +commit fc4bc43dcd6f6871a47b9198e8c2571a5d448c3e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Jun 1 14:52:21 2009 +0200 + + Fix a crash in pdf-inspector + + test/pdf-inspector.cc | 11 +++++++++++ + 1 files changed, 11 insertions(+), 0 deletions(-) + +commit 3da7a2657892fde52b62e1f73476cb33d6c75e96 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri May 29 13:35:39 2009 +0200 + + Add Annot::setColor() + + poppler/Annot.cc | 19 ++++++++++++++++++- + poppler/Annot.h | 6 +++++- + 2 files changed, 23 insertions(+), 2 deletions(-) + +commit 3eabdf57729852205855cf74ff2d2f9d7bc03f73 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri May 29 13:23:26 2009 +0200 + + Add construtors to create AnnotColor objects directly from color + values + + poppler/Annot.cc | 26 ++++++++++++++++++++++++++ + poppler/Annot.h | 3 +++ + 2 files changed, 29 insertions(+), 0 deletions(-) + +commit 8045e7a1a84a3d54a1c9415ac63b5b9df5ecc349 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri May 29 13:06:40 2009 +0200 + + Add Page::addAnnot() to add a new annotation to the page + + poppler/Page.cc | 28 ++++++++++++++++++++++++++++ + poppler/Page.h | 2 ++ + 2 files changed, 30 insertions(+), 0 deletions(-) + +commit fe80eb84ec711b7400cef95e791a74c8fd259af7 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri May 29 13:00:19 2009 +0200 + + Add getRef() to get the annotation reference + + poppler/Annot.h | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 1c92657be72c44dba7185808ffb00dd85c5ab289 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri May 29 12:14:02 2009 +0200 + + Save page object and ref in Page class + + This is needed to be able to modify the page object. + + poppler/Catalog.cc | 2 +- + poppler/Page.cc | 6 +++++- + poppler/Page.h | 4 +++- + 3 files changed, 9 insertions(+), 3 deletions(-) + +commit 4ad2d663262008e4b97342c4ed67c686ff5abd13 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri May 29 11:43:30 2009 +0200 + + Add annot constructors to create annot objects without a dict + + This allows to create annotation objects to be added to the document. + Required fields on the annotation dictionary are constructor + arguments, + setters will be added for the other fields. + + poppler/Annot.cc | 300 + ++++++++++++++++++++++++++++++++++++++++++++++++++++- + poppler/Annot.h | 22 ++++- + 2 files changed, 315 insertions(+), 7 deletions(-) + +commit e5c4862b0c1b08a0fab47070cb9c862026e93567 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jun 10 23:28:03 2009 +0200 + + ignore++ + + m4/.gitignore | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 572779f8037763c1e0ee64c47a3dad6df0d3b693 +Author: Koji Otani <sho@bbr.jp> +Date: Wed Jun 10 22:55:26 2009 +0200 + + Fix dashed line in page 1 of bug 20011 + + poppler/Gfx.cc | 6 ++---- + 1 files changed, 2 insertions(+), 4 deletions(-) + +commit b97591672e0d9c31a3d044fe52e34cc80a491221 +Author: Koji Otani <sho@bbr.jp> +Date: Wed Jun 10 22:54:57 2009 +0200 + + Fix "Conditional jump or move depends on uninitialised value" + + When stroking with a pattern, set strokeColor with a copy of + fillColor. + This is wrong and the fillColor may be uninitialized. + See bug 20011 + + poppler/Gfx.cc | 13 +++++++++++-- + 1 files changed, 11 insertions(+), 2 deletions(-) + +commit a92b38836b1e4475d5a7a1b9cb8f3e9429cef275 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 9 22:39:19 2009 +0200 + + Correctly duplicate the cache on PostScriptFunction(PostScriptFunction + *func) + + poppler/Function.cc | 28 ++++++++++++++++++++++++++++ + poppler/PopplerCache.cc | 20 ++++++++++++++++++++ + poppler/PopplerCache.h | 14 ++++++++++++++ + 3 files changed, 62 insertions(+), 0 deletions(-) + +commit 2cecdf922f4c8178b0e55d3ddf86c31f8be3313a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jun 9 11:04:39 2009 +0200 + + [glib] Fix a crash when a destination points to an invalid page + + glib/poppler-action.cc | 21 +++++++++++++-------- + 1 files changed, 13 insertions(+), 8 deletions(-) + +commit 831288c13c3a7502bbccd1313c6e376283be367c +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 7 18:37:20 2009 +0200 + + Optimize roll() a bit + + If the number of times to roll is > than half the number of items + rotate in the reverse direction + Makes it be 33% of exec() instead of 42% + + poppler/Function.cc | 19 ++++++++++++++----- + 1 files changed, 14 insertions(+), 5 deletions(-) + +commit 3d40dcad850a2bc0e28845a15722db0c79920135 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 7 13:38:50 2009 +0200 + + Move the GfxState cache to the new poppler cache class + + poppler/GfxState.cc | 97 + ++++++++++++++++++++++++--------------------------- + poppler/GfxState.h | 19 ++-------- + 2 files changed, 49 insertions(+), 67 deletions(-) + +commit 2619e09833f421fb3d8cc68d41d15081ae6824e4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 7 13:37:40 2009 +0200 + + Implement a cache for PostscriptFunction transforms + + Makes time of rendering of bug 21562 go down from 24 to 8 seconds + + poppler/Function.cc | 76 + +++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Function.h | 2 + + 2 files changed, 78 insertions(+), 0 deletions(-) + +commit 588bfe3c14f42be492066c2a98e30482475a6926 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 7 13:36:39 2009 +0200 + + Add a code to a generic cache based on Koji's code for GfxState cache + + CMakeLists.txt | 1 + + poppler/Makefile.am | 1 + + poppler/PopplerCache.cc | 82 + +++++++++++++++++++++++++++++++++++++++++++++++ + poppler/PopplerCache.h | 47 +++++++++++++++++++++++++++ + 4 files changed, 131 insertions(+), 0 deletions(-) + +commit d09478fcc44b5c594f1803fc24654af5e10fa129 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 7 01:34:01 2009 +0200 + + Move index and pop to class definition too + + poppler/Function.cc | 32 +++++++++++++++----------------- + 1 files changed, 15 insertions(+), 17 deletions(-) + +commit 2083264e8ab0fd9976294de08a18de615d5a1168 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 7 01:21:19 2009 +0200 + + Move the implementations to the class definition + + Make gcc inline the functions and time to render a heavy PSFunction + doc goes from 28 to 20 secs + + poppler/Function.cc | 151 + ++++++++++++++++++++++++--------------------------- + 1 files changed, 71 insertions(+), 80 deletions(-) + +commit 24580fcd2be74db5f3140bdb2ebff8431b7d3f1e +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jun 6 16:17:26 2009 +0200 + + Add a debug saying how much rendering took + + qt4/tests/test-poppler-qt4.cpp | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 50cf7cffff760e41774957ad8f1f92803142438e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jun 6 16:04:54 2009 +0200 + + Use g_path_get_basename instead of g_basename in gtk-cairo-test + + Fixes bug #21361. + + test/gtk-cairo-test.cc | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit 4cc9dee35e03d7b295a476f937ec0f2c43bb6592 +Author: Christian Persch <chpe@gnome.org> +Date: Sat Jun 6 12:13:48 2009 +0200 + + Remove unneeded files from repo + + See bug #22094 + + configure.ac | 2 +- + glib/reference/Makefile.am | 4 +- + gtk-doc.make | 155 + -------------------------------------------- + m4/gtk-doc.m4 | 53 --------------- + 4 files changed, 3 insertions(+), 211 deletions(-) + +commit c94e476dbff9e527c72e52377d830f35f29ba3d6 +Author: Pino Toscano <pino@kde.org> +Date: Fri Jun 5 11:09:44 2009 +0200 + + when showing the tooltip for a text rect, show also its index in + the page text boxes list + + qt4/tests/test-poppler-qt4.cpp | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +commit 2298acac267257b1916c802bdb902428e69e683b +Author: Pino Toscano <pino@kde.org> +Date: Fri Jun 5 11:08:51 2009 +0200 + + [Qt4 apidox] FontInterator is new in 0.12 + + qt4/src/poppler-qt4.h | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 37c48c2521c623c485841472c4a174a1841aea33 +Author: Pino Toscano <pino@kde.org> +Date: Fri Jun 5 10:54:30 2009 +0200 + + [CMake] Add poppler version defines and version check macro + + Add POPPLER_[MAJOR|MINOR|MICRO]_VERSION defines and + POPPLER_CHECK_VERSION macro. FDO bug #22091. + + CMakeLists.txt | 5 ++++- + glib/poppler-features.h.cmake | 9 +++++++++ + 2 files changed, 13 insertions(+), 1 deletions(-) + +commit 26f6fb1d79c2589829cd896d57da63d16641f307 +Author: Pino Toscano <pino@kde.org> +Date: Fri Jun 5 10:51:26 2009 +0200 + + [CMake] switch poppler-features.h.cmake to a more autotools-like + syntax + + glib/CMakeLists.txt | 2 +- + glib/poppler-features.h.cmake | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 89704635b727db42f6c72ba101091eb7eddb967a +Author: Pino Toscano <pino@kde.org> +Date: Fri Jun 5 10:39:17 2009 +0200 + + [Qt4 demo] compile the new thumbnail module with autotools as well + + qt4/demos/Makefile.am | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 291bafe64c8755fe5f85a51b184ac6e3d3170e1d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jun 5 10:07:16 2009 +0200 + + [glib] Use g_strerror instead of strerror + + Fixes bug #22095. + + glib/poppler-document.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0ca7e214fb5f9c9fb59792149bd23c1617d38cac +Author: Christian Persch <chpe@gnome.org> +Date: Thu Jun 4 22:35:40 2009 +0200 + + Add poppler version defines and version check macro + + Add POPPLER_[MAJOR|MINOR|MICRO]_VERSION defines and + POPPLER_CHECK_VERSION macro. FDO bug #22091. + + configure.ac | 11 ++++- + glib/poppler-features.h.in | 9 +++ + glib/reference/poppler-docs.sgml | 1 + + glib/reference/poppler-sections.txt | 10 ++++ + glib/reference/tmpl/poppler-features.sgml | 80 + +++++++++++++++++++++++++++++ + 5 files changed, 110 insertions(+), 1 deletions(-) + +commit 4ce04da0040e5a2626c110f94a128e2d272401b9 +Author: Matthias Drochner <M.Drochner@fz-juelich.de> +Date: Thu Jun 4 23:05:22 2009 +0200 + + Use the correct value when creating the V field + + PDF Spec says: + For items represented in the Opt array by a two-element array, + the name string is the second of the two array elements. + + poppler/Form.cc | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit 7e01e37a834bfdd75d739ea2b48e9127ca7f259e +Author: Till Kamppeter <till.kamppeter@gmail.com> +Date: Thu Jun 4 20:25:55 2009 +0200 + + Add part of fix for bug 20420, the other part was checked in with + Thomas patches + + poppler/PSOutputDev.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 50a7b4bcaa6e5f56cc25fe6936f9dc537a1b4b37 +Author: Jeremy C. Reed <reed@reedmedia.net> +Date: Thu Jun 4 20:19:03 2009 +0200 + + [glib] Hyphenate UTF-8 and UTF-16BE + + Fixes bug #21953. + + where iconv() is called to fill in a text field, use "UTF-8" and + "UTF-16BE" as encoding names rather than the less portable + "UTF8" and "UTF16BE" -- this makes it work on NetBSD. + + glib/poppler-annot.cc | 2 +- + glib/poppler-form-field.cc | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit 2cf9e6a2318b770ae62572944c687576d1801d31 +Author: Till Kamppeter <till.kamppeter@gmail.com> +Date: Thu Jun 4 19:48:42 2009 +0200 + + Support multiple page sizes when converting to PS + + Fixes byg #19777 + + poppler/PSOutputDev.cc | 31 +++++++++++++++++++++++++++++-- + poppler/PSOutputDev.h | 4 +++- + utils/pdftops.1 | 26 +++++++++++++++++++++----- + utils/pdftops.cc | 17 ++++++++++++----- + 4 files changed, 65 insertions(+), 13 deletions(-) + +commit 30fb7cb7e47cf6a8008c5083c8d0978fdfdf8e62 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jun 4 19:25:22 2009 +0200 + + Add missing { } + + poppler/Gfx.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 1beec21ed3a016998fee3849d460166895db9047 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jun 3 22:37:43 2009 +0200 + + Give an error when using level1sep without having CMYK support + + Fixes bug #22026 + + poppler/PSOutputDev.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit e80d645c34c7d44d1f35da0a25669d1c4cde6e7f +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jun 3 22:00:49 2009 +0200 + + Also accept tokens with to leading 00 + + Fixes bug 22025, based on a patch by William Bader + + poppler/CharCodeToUnicode.cc | 9 ++++++--- + 1 files changed, 6 insertions(+), 3 deletions(-) + +commit e521c1efaeba3f35d10e46bca3d9650dabd2d889 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Wed Jun 3 22:08:57 2009 +0930 + + Implement text in pattern colorspace for the cairo backend + + poppler/CairoOutputDev.cc | 47 + +++++++++++++++++++++++++++++++++++++++++++++ + poppler/CairoOutputDev.h | 19 ++++++++++++++++++ + 2 files changed, 66 insertions(+), 0 deletions(-) + +commit a87978b09a026b2db6b0f80271d87b44b336a121 +Author: Pino Toscano <pino@kde.org> +Date: Wed Jun 3 13:49:56 2009 +0200 + + [Qt4 demo] show the checksum for embedded files + + qt4/demos/embeddedfiles.cpp | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit db5102842494a124d813db1696bb60820db3442b +Author: Pino Toscano <pino@kde.org> +Date: Wed Jun 3 13:21:22 2009 +0200 + + [Qt4 demo] remove checks for Qt >= 4.2 + + poppler-qt4 requires Qt 4.3, so checking for 4.2 is no more needed + + qt4/demos/embeddedfiles.cpp | 2 -- + qt4/demos/fonts.cpp | 2 -- + qt4/demos/info.cpp | 2 -- + qt4/demos/optcontent.cpp | 2 -- + qt4/demos/permissions.cpp | 2 -- + qt4/demos/toc.cpp | 2 -- + 6 files changed, 0 insertions(+), 12 deletions(-) + +commit e8d897581656ee4a20e9bb87dd999425663ace3b +Author: Pino Toscano <pino@kde.org> +Date: Wed Jun 3 02:54:29 2009 +0200 + + [Qt4 demo] simplier way to change page from the thumbnail view + + qt4/demos/pageview.cpp | 5 ----- + qt4/demos/pageview.h | 3 --- + qt4/demos/thumbnails.cpp | 2 +- + qt4/demos/thumbnails.h | 3 --- + qt4/demos/viewer.cpp | 1 - + 5 files changed, 1 insertions(+), 13 deletions(-) + +commit f69a4fe47d3478cccbc03e4ac0929c7eada681c0 +Author: Pino Toscano <pino@kde.org> +Date: Wed Jun 3 01:24:21 2009 +0200 + + [Qt4 demo] Add a thumbnail dock widget + + Useful to show the embedded page thumbnails in the document, if any. + Based on a patch by Shawn Rutledge <shawn.t.rutledge@gmail.com>, + reworked by me to be a QListWidget showing the page items at their + full size. + + qt4/demos/CMakeLists.txt | 1 + + qt4/demos/thumbnails.cpp | 84 + ++++++++++++++++++++++++++++++++++++++++++++++ + qt4/demos/thumbnails.h | 51 ++++++++++++++++++++++++++++ + qt4/demos/viewer.cpp | 11 +++++- + 4 files changed, 146 insertions(+), 1 deletions(-) + +commit 2f24ac0f4bbd6de1c9f137110b3ac2bd3b23b0b9 +Author: Shawn Rutledge <shawn.t.rutledge@gmail.com> +Date: Wed Jun 3 01:22:31 2009 +0200 + + [Qt4 demo] add a public slot to set the current page + + qt4/demos/pageview.cpp | 5 +++++ + qt4/demos/pageview.h | 3 +++ + 2 files changed, 8 insertions(+), 0 deletions(-) + +commit 1f1baf186f9e37606765e51ec5b9893ddfbfa893 +Author: Shawn Rutledge <shawn.t.rutledge@gmail.com> +Date: Wed Jun 3 01:19:16 2009 +0200 + + [Qt4] Add Page::thumbnail() + + This function can be used to get the embedded thumbnail of the page, + present in the document. + Reindented by me, and avoid a memory leak because of non-freed data. + + qt4/src/poppler-page.cc | 21 ++++++++++++++++++++- + qt4/src/poppler-qt4.h | 11 +++++++++++ + 2 files changed, 31 insertions(+), 1 deletions(-) + +commit 5cc24be1e9af0a27ab88ffa719bcabc2378868e4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jun 3 00:05:54 2009 +0200 + + Remove unused variables + + poppler/SplashOutputDev.cc | 3 --- + 1 files changed, 0 insertions(+), 3 deletions(-) + +commit 45823bf8f4abacbbf257f6708264de074eda3cf4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jun 3 00:02:54 2009 +0200 + + Make it compile :-/ + + poppler/SplashOutputDev.cc | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +commit f5ae14907261a46c121f3ed7aea9d7ad9b9c55de +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 2 23:52:59 2009 +0200 + + Really fix the typo + + README | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5d4b1995cdd57db7cef3d88704850aaf66ed7fff +Author: William Bader <williambader@hotmail.com> +Date: Tue Jun 2 23:10:53 2009 +0200 + + Fix three typos in README + + README | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 104f9286ceb5fcb5f4795bca7633029142d5f6a4 +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Tue Jun 2 22:59:42 2009 +0200 + + Support colorizing text in pattern colorspace + + This implements commits the final patches for bug 19670 and 19994 + Also fixes bugs 15819 and 2807 + Also implements blending for SPLASH_CMYK in Splash + It's a quite big change but i've done regression testing over my whole + pdf suite and did not fit anything that went worse, just improvements + Missing the Cairo support + + CMakeLists.txt | 1 + + poppler/Gfx.cc | 135 ++++++++++++--- + poppler/Gfx.h | 7 + + poppler/GfxState.cc | 58 +------ + poppler/GfxState_helpers.h | 80 +++++++++ + poppler/Makefile.am | 1 + + poppler/OutputDev.h | 14 ++ + poppler/PSOutputDev.cc | 285 +++++++++++++++++++------------- + poppler/PSOutputDev.h | 18 ++ + poppler/SplashOutputDev.cc | 404 + +++++++++++++++++++++++++++++++++++++------- + poppler/SplashOutputDev.h | 19 ++ + 11 files changed, 766 insertions(+), 256 deletions(-) + +commit d3e4563146cbff4cb507522783e60462461c7524 +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Sun May 31 23:23:07 2009 +0200 + + Set memory to 0 after allocation, fixes problems on Sun machines, + should not hurt for others + + poppler/GfxState.cc | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 78a58931b4347ecb505bad5a51104382ef5f91c7 +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Sun May 31 22:52:23 2009 +0200 + + Add splashClearColor that assigns white to the given colorptr + + splash/SplashTypes.h | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +commit 47c26747b32c242ec8ac60e7b93150a67eb22e31 +Author: Thomas Freitag <Thomas.Freitag@alfa.de> +Date: Sun May 31 22:51:22 2009 +0200 + + Fix splashColorModeNComps to correctly include all values for each + SplashColorMode + + splash/SplashState.cc | 17 +++++++++++++++++ + 1 files changed, 17 insertions(+), 0 deletions(-) + +commit 41775d8c0b44bf591d8ff5ede7fad276e8fa9eef +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Jun 1 15:24:24 2009 +0200 + + [glib-demo] Use poppler_annot_markup_has_popup() + + glib/demo/annots.c | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +commit f542c5294394e837298cb7e7d1d94bb336bfd09d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Jun 1 15:24:04 2009 +0200 + + [glib] Add poppler_annot_markup_has_popup() + + glib/poppler-annot.cc | 20 ++++++++++++++++++++ + glib/poppler-annot.h | 1 + + 2 files changed, 21 insertions(+), 0 deletions(-) + +commit af32d56af779edcc539b680e634755941d1bf45c +Author: Petr Gajdos <pgajdos@novell.com> +Date: Thu May 21 00:37:18 2009 +0200 + + Add the possibility of forcing no hinting of fonts + + poppler/ArthurOutputDev.cc | 2 + + poppler/GlobalParams.cc | 20 +++++++++++ + poppler/GlobalParams.h | 4 ++ + poppler/SplashOutputDev.cc | 2 + + splash/SplashFTFont.cc | 76 + ++++++++++++++++++++++++++---------------- + splash/SplashFTFont.h | 2 + + splash/SplashFTFontEngine.cc | 8 +++-- + splash/SplashFTFontEngine.h | 6 ++- + splash/SplashFontEngine.cc | 4 ++- + splash/SplashFontEngine.h | 2 + + 10 files changed, 91 insertions(+), 35 deletions(-) + +commit 1a69d9638214943b3c2278f570694d9722a5de15 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed May 20 23:58:44 2009 +0200 + + Do not create the GfxColorTransform if the lcms could not be created + + Fixes crash on pdf from bug 20108 + + poppler/GfxState.cc | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +commit 95246d39c1289111a4ba3eb2ffbec50d7702e5eb +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed May 20 23:20:20 2009 +0200 + + Check Mask entries are int before using them, also if they are real + cast to int and try to use them + + Fixes bug #21841 + + poppler/Gfx.cc | 11 ++++++++++- + 1 files changed, 10 insertions(+), 1 deletions(-) + +commit 0c3517bfb4e1e1a28962f8d490ad69ec5766b6a1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed May 20 23:08:41 2009 +0200 + + Fix pdftops crash on file from KDE bug 174899 + + Still does not generate a correct ps file, but at least the program + does not crash now + + fofi/FoFiTrueType.cc | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit 548c72600b8a5e076647041660ed5031feedc7cc +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed May 20 22:43:11 2009 +0200 + + Do not exit(1) on a pdf i have lying around + + PDF is 0f03b3539a436a9f18d7e4e29d410f89 6607907.pdf + + poppler/JBIG2Stream.cc | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +commit f78d3a7ff5ef4b500d76d84ebc45aac3be162dab +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 18 20:44:40 2009 +0200 + + Move lcms.h include to GfxState.cc, replace lcms typedefs by void * + + poppler/GfxState.cc | 70 + ++++++++++++++++++++++++++++++++++++++++++++------ + poppler/GfxState.h | 64 ++++++++++------------------------------------ + 2 files changed, 75 insertions(+), 59 deletions(-) + +commit ec2467f9981b7e7c23d5dcd8eabf2e7c8cdf8930 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun May 17 20:00:53 2009 +0200 + + Use the lcms include dir + + CMakeLists.txt | 3 +++ + poppler/Makefile.am | 2 ++ + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit e0fcf7055af480498a81a000dcd9f977a783df66 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun May 17 12:07:05 2009 +0200 + + Use pkgconfig for autotools cms check + + configure.ac | 12 +++++++----- + poppler/Makefile.am | 2 +- + 2 files changed, 8 insertions(+), 6 deletions(-) + +commit 657734c19274ab281328cba9297eca45e48777aa +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun May 17 12:06:47 2009 +0200 + + Better lcms check comming from kdelibs + + cmake/modules/FindLCMS.cmake | 95 + +++++++++++++++++++++++++++++++----------- + 1 files changed, 71 insertions(+), 24 deletions(-) + +commit 0974b7b4bfe3f8cf3a1408741ddf01c667c28044 +Author: Patrick Spendrin <ps_ml@gmx.de> +Date: Thu May 14 16:15:22 2009 +0200 + + [Win32] Build fix for MSVC. + + poppler-config.h.cmake | 2 +- + poppler/poppler-config.h.in | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit d1c0e8a6c63361304cd453bb4c51e84a1aab7efa +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu May 14 00:29:18 2009 +0200 + + Kill support for specifying extension in openTmpFile + + We don't use it and it would not work anyway, see bug #21713 + + goo/gfile.cc | 58 + +++++++++-------------------------------- + goo/gfile.h | 3 +- + poppler/CairoFontEngine.cc | 6 ++-- + splash/SplashFTFontEngine.cc | 3 +- + splash/SplashT1FontEngine.cc | 3 +- + splash/SplashT1FontFile.cc | 3 +- + 6 files changed, 24 insertions(+), 52 deletions(-) + +commit e237d8b5c2ae8805487a0790d9fb218263686712 +Author: Pino Toscano <pino@kde.org> +Date: Wed May 13 18:37:07 2009 +0200 + + [Qt4] we don't need an output device anymore (since long, even) + for resolving destinations + + qt4/src/poppler-document.cc | 3 --- + 1 files changed, 0 insertions(+), 3 deletions(-) + +commit 9a2a851da93ef1a0c291fc9523a468e808ffd08e +Author: Pino Toscano <pino@kde.org> +Date: Wed May 13 18:19:11 2009 +0200 + + [Qt4] Do not try to resolve named destinations for GoTo links pointing + to external documents. + + In such cases, the named destination is a destination in the external + document, so we would try to look up a destination which is not in + the current document (thus the look up is unuseful). + It is task of the users of poppler-qt4 detect such + situations, and resolve the named when necessary, using + Document::linkDestination(QString). + + qt4/src/poppler-document.cc | 2 +- + qt4/src/poppler-link.cc | 2 +- + qt4/src/poppler-page.cc | 6 ++++-- + qt4/src/poppler-private.cc | 4 ++-- + qt4/src/poppler-private.h | 5 +++-- + 5 files changed, 11 insertions(+), 8 deletions(-) + +commit 51f6cc26fc5fdccce1ba4d4816dec374ce85d67a +Author: Pino Toscano <pino@kde.org> +Date: Wed May 13 17:38:00 2009 +0200 + + [Qt4] start a (basic) unit test for links & destinations + + qt4/tests/CMakeLists.txt | 1 + + qt4/tests/Makefile.am | 5 ++ + qt4/tests/check_links.cpp | 96 + +++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 102 insertions(+), 0 deletions(-) + +commit 174f8087f5e09c5d1915de128b7a15acf47c1e13 +Author: Pino Toscano <pino@kde.org> +Date: Wed May 13 16:44:59 2009 +0200 + + [Qt4] set the destination name only when it is not resolved + + qt4/src/poppler-link.cc | 9 +++++---- + 1 files changed, 5 insertions(+), 4 deletions(-) + +commit fb0cb2add9443992f166acdf744fbec875faaabf +Author: Pino Toscano <pino@kde.org> +Date: Tue May 12 01:53:43 2009 +0200 + + [Qt4] Add LinkDestination::destinationName() that returns the name + of the current destination. + + qt4/src/poppler-link.cc | 10 ++++++++++ + qt4/src/poppler-link.h | 7 +++++++ + 2 files changed, 17 insertions(+), 0 deletions(-) + +commit b8bd44f1302f7b6a6923d41c98ec74c118a5abb8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 11 20:49:34 2009 +0200 + + Poppler 0.11.0 aka 0.12 Alpha 1 + + CMakeLists.txt | 4 +- + NEWS | 142 + +++++++++++++++++++++++++++++++++++++++++++++++++++ + configure.ac | 2 +- + msvc/config.h | 6 +- + poppler/Makefile.am | 2 +- + qt4/src/Doxyfile | 2 +- + 6 files changed, 150 insertions(+), 8 deletions(-) + +commit 79bcedd5602729b959f21aed222445de621e7ecb +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon May 11 19:59:57 2009 +0200 + + Update copyright headers for previous patches + + poppler/ArthurOutputDev.cc | 1 + + poppler/CairoOutputDev.cc | 2 +- + poppler/Page.cc | 2 +- + poppler/Stream.cc | 1 + + poppler/Stream.h | 1 + + utils/HtmlOutputDev.cc | 1 + + utils/ImageOutputDev.cc | 1 + + 7 files changed, 7 insertions(+), 2 deletions(-) + +commit f16e36df3a74e1adf14513a6340be2e8665f8d65 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun May 10 19:24:32 2009 +0200 + + Don't include popups annots with a parent in annots list + + poppler/Annot.cc | 13 +++++++++++++ + 1 files changed, 13 insertions(+), 0 deletions(-) + +commit 5051ebed1477ff3f7721606f79d66d56a80c1145 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun May 10 19:10:51 2009 +0200 + + Make sure ImageStream::close() is called after ImageStream::reset() + + poppler/ArthurOutputDev.cc | 1 + + poppler/CairoOutputDev.cc | 20 +++++++++++++++++--- + poppler/Page.cc | 1 + + poppler/Stream.cc | 4 ++++ + poppler/Stream.h | 3 +++ + utils/HtmlOutputDev.cc | 1 + + utils/ImageOutputDev.cc | 1 + + 7 files changed, 28 insertions(+), 3 deletions(-) + +commit 829ed964374676ddfa4a9048c940dc20a309ca47 +Author: M Joonas Pihlaja <jpihlaja@cc.helsinki.fi> +Date: Sun May 10 23:39:11 2009 +0200 + + Fix axial shading fix to ensure the painting passes by the four + edges of the bbox + + When j and teoricalj are the same, just change the value of ta[] + not the next[] ones + + poppler/Gfx.cc | 23 ++++++++++++++++------- + 1 files changed, 16 insertions(+), 7 deletions(-) + +commit 68d9644499676ed1553b2bfcdbfc9a5677c75345 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat May 9 22:25:12 2009 +0200 + + Hidden property depends on parent being hidden, not only yourself + + Fixes bug #16093 + + poppler/Gfx.cc | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +commit 810a71ea66f0e07d9849a5e9bf28911472482d1b +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri May 8 09:36:31 2009 +0200 + + [glib] Add poppler_annot_markup_get_popup_rectangle + + glib/demo/annots.c | 8 ++++++++ + glib/poppler-annot.cc | 35 +++++++++++++++++++++++++++++++++++ + glib/poppler-annot.h | 2 ++ + 3 files changed, 45 insertions(+), 0 deletions(-) + +commit 5d328282da4713356fbe4283bd992ac2fc9010a2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu May 7 23:11:55 2009 +0200 + + bitmap->h can be 0, move to _checkoverflow variant, code already + knows how to deal with NULL + + splash/SplashFTFont.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5b0fb6f94d6d54b1b0c97762db61e2ab0dd07c85 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed May 6 22:59:55 2009 +0200 + + Fix format printing + + poppler/JBIG2Stream.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit c21b08a254f42f53d4b59ad4fb308c7c68c32d15 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed May 6 15:56:21 2009 +0200 + + [glib] Several fixes in poppler_annot_get_color() + + PopplerColor is compatible with GdkColor where every component is + in the + range of 0 to 65535, we were returning values between 0 and 1 but + converted to guint16. + We were also showing a warning when AnnotColor::colorTransparent is + used, but we decided to return a PopplerColor * to be able to + represent + transparent color returning NULL, so it's actually supported. + + glib/demo/annots.c | 25 +++++++++++-------------- + glib/poppler-annot.cc | 36 +++++++++++++++++++++--------------- + 2 files changed, 32 insertions(+), 29 deletions(-) + +commit 63cc40ec02498e1ec249d5f74e23f574c665872e +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat May 2 14:08:23 2009 +0200 + + Link pdftoabw to abiword libs + + Fixes bug #21520 + + utils/Makefile.am | 22 ++++++++++++---------- + 1 files changed, 12 insertions(+), 10 deletions(-) + +commit 70e06e9ae28d08bb7495a7f2eb03b0b5714a1e54 +Author: Kouhei Sutou <kou@cozmixng.org> +Date: Wed Apr 29 09:52:21 2009 +0900 + + PopplerAttachment refers its document. + + glib/poppler-attachment.cc | 41 + +++++++++++++++++++++++++++++++++++------ + 1 files changed, 35 insertions(+), 6 deletions(-) + +commit 977a13f1091700bf7e7b31859e0e6632dc323462 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Apr 25 19:07:01 2009 +0200 + + [glib] Only create checksum string for valid checksums + + glib/poppler-attachment.cc | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit fb6e7141e3008ae230ae5819e2c7a0425296d8d2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Apr 24 10:13:53 2009 +0200 + + Update copyright headers + + glib/poppler-annot.cc | 1 + + glib/poppler-annot.h | 1 + + poppler/Annot.cc | 2 +- + poppler/Annot.h | 2 +- + poppler/DateInfo.cc | 1 + + poppler/DateInfo.h | 1 + + 6 files changed, 6 insertions(+), 2 deletions(-) + +commit fc7e52fef0317f9c85ead2c4f8a0e9b688decca3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Apr 24 09:53:41 2009 +0200 + + Fix typos in Annot::setContents() documentation + + poppler/Annot.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit df0032cf5f6e5dc44bad056c659180e4065d32e2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Apr 23 13:19:25 2009 +0200 + + Document Annot::setContents() method + + poppler/Annot.h | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 86a37a8f3f93e3378b446f8d81d80571267c7660 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Apr 23 13:16:04 2009 +0200 + + Update the annotation last modified time when it's modified + + poppler/Annot.cc | 26 ++++++++++++++++---------- + poppler/Annot.h | 7 ++++--- + 2 files changed, 20 insertions(+), 13 deletions(-) + +commit 9662bfa2b4b2282d0fc29d2a327b62d8bde56ff2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Apr 23 13:13:07 2009 +0200 + + Add timeToDateString() to DateInfo + + This function converts a time_t into a string in PDF date format. + + configure.ac | 1 + + poppler/DateInfo.cc | 47 + +++++++++++++++++++++++++++++++++++++++++++++++ + poppler/DateInfo.h | 7 +++++++ + 3 files changed, 55 insertions(+), 0 deletions(-) + +commit dc4cf0c29b53cda5c1c2badc5026af3429502e3a +Author: Pino Toscano <pino@kde.org> +Date: Tue Apr 21 21:51:52 2009 +0200 + + add poppler-date.{cc,h} + + glib/CMakeLists.txt | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 0750c6502faeabff571f5730b567097e793dca64 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Apr 21 20:04:27 2009 +0200 + + [glib-demo] Fix dates handling in annots demo + + glib/demo/annots.c | 69 + ++++++++++----------------------------------------- + 1 files changed, 14 insertions(+), 55 deletions(-) + +commit fe73bf9771e8294af4c8a11ec4c2891ff8f8d859 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Apr 21 20:02:25 2009 +0200 + + [glib-demo] GTime is deprecated, use time_t instead + + glib/demo/utils.c | 2 +- + glib/demo/utils.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 6d468cfa0cb89760e5d6cca43521cde6d99aa52e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Apr 21 20:00:20 2009 +0200 + + [glib-demo] Use format_date from utils and remove duplicated code + + glib/demo/info.cc | 27 ++------------------------- + 1 files changed, 2 insertions(+), 25 deletions(-) + +commit e5f5ea01d0da4c4d877b93755523dc2a7f2ec049 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Apr 21 19:57:11 2009 +0200 + + [glib] Fix poppler_annot_markup_get_date() + + Date field in Markup annots is also a PDF format date string, so it + should be parsed and the resulting time_t used to create a correct + GDate. + + glib/poppler-annot.cc | 22 +++++++++++----------- + 1 files changed, 11 insertions(+), 11 deletions(-) + +commit 876ad1bcc8a7b2f37656bf15cee7eb888fd46ed4 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Apr 21 19:36:33 2009 +0200 + + [glib] Add info about the return value in poppler_annot_get_modified() + doc + + glib/poppler-annot.cc | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit 8c54a15e1715721ee7af7e82c90b8dda3689c65f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Apr 21 19:35:14 2009 +0200 + + [glib] Fix a typo in poppler_date_parse documentation + + glib/poppler-date.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 39d09fa237d06fa93b02eb916d2c0242c4e8fe85 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Apr 21 19:29:32 2009 +0200 + + [glib] Add poppler_date_parse to parse PDF format date strings + + We need to make this public because the field M in the Annot + dictionary + might be a Date string (in PDF date format) or a text + string. According + to the PDF spec: "The preferred format is a date string as described + in + Section 3.8.3, “Dates,†but viewer applications should be + prepared to + accept and display a string in any format". The only way to know + whether + it's a PDF date string or not, is by trying to parse it. For this + reason + poppler_annot_get_modified() returns a gchar * instead of a + time_t. So, + viewers should try to parse the string in order to convert it to a + time_t, and if it fails to parse, use the date string as provided + by the + document. + + glib/Makefile.am | 2 + + glib/poppler-attachment.cc | 4 +- + glib/poppler-date.cc | 66 + ++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-date.h | 30 ++++++++++++++++++++ + glib/poppler-document.cc | 45 +++++------------------------ + glib/poppler-private.h | 2 +- + glib/poppler.h | 1 + + 7 files changed, 110 insertions(+), 40 deletions(-) + +commit 9c2714a3e1c02f445661618e24bcd27f1392b2b7 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Apr 21 18:08:06 2009 +0200 + + [glib] Implement poppler_annot_set_contents() + + glib/poppler-annot.cc | 25 +++++++++++++++++++++++++ + glib/poppler-annot.h | 2 ++ + 2 files changed, 27 insertions(+), 0 deletions(-) + +commit eec550e8b3cf96aefed9b03a78d365c2848fb8f2 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Apr 21 18:06:34 2009 +0200 + + Add setContents() to modify the annot contents + + poppler/Annot.cc | 26 +++++++++++++++++++++++++- + poppler/Annot.h | 4 ++++ + 2 files changed, 29 insertions(+), 1 deletions(-) + +commit 047a8870a8cea9b680080e0d3bf68d0685431233 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Apr 20 23:38:53 2009 +0200 + + In case of err3 or err2 in readPageTree we need to free kidRef too + + poppler/Catalog.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit cb61b555f2c4db8685dec5491ca86570c962aab6 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Apr 18 18:30:04 2009 +0200 + + Extend test-poppler-glib to show more page annotations and actions + + Based on path by Thomas Viehmann <tv@beamnet.de> + + glib/test-poppler-glib.cc | 68 + +++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 68 insertions(+), 0 deletions(-) + +commit 2221b8a9ae5e986c79ea3f6c9f3b0246d328c7ab +Author: Matthias Franz <matthias@ktug.or.kr> +Date: Sun Apr 19 23:29:18 2009 +0200 + + Fix decryption using owner password on some pdf + + See bug #21270 + + poppler/Decrypt.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit e20efbf6cc676758b8ef7d2ad607560fcdbbf89e +Author: Peter Kerzum <kerzum@yandex-team.ru> +Date: Fri Apr 17 22:14:26 2009 +0200 + + Fix typo in GfxFont.cc + + poppler/GfxFont.cc | 11 ++++++----- + 1 files changed, 6 insertions(+), 5 deletions(-) + +commit b760debea03380280d72cd39d792cbc1a380a87c +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Apr 17 21:04:26 2009 +0200 + + Fix rendering of axial shadings + + Fixes bug #19896 + + poppler/Gfx.cc | 102 + ++++++++++++++++++++++++++++++++++---------------------- + 1 files changed, 62 insertions(+), 40 deletions(-) + +commit 9f1312f3d7dfa7e536606a7c7296b7c876b11c00 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Apr 16 22:13:26 2009 +0200 + + Fix problems that happen when parsing broken JBIG2 files + + Fixes + CVE-2009-0799 xpdf OOB Read + CVE-2009-0800 xpdf Multiple Input Validation Flaws + CVE-2009-1179 xpdf Integer Overflow + CVE-2009-1180 xpdf Invalid free() + CVE-2009-1181 xpdf NULL dereference DoS + CVE-2009-1182 xpdf MMR Decoder Buffer Overflows + CVE-2009-1183 xpdf MMR Infinite Loop DoS + + Patch based on a patch by Derek Noonburg + Some files still hit the exit(1) in goo.c but at least none is + really crashing + + poppler/JBIG2Stream.cc | 447 + ++++++++++++++++++++++++++++++++++-------------- + poppler/JBIG2Stream.h | 4 + + 2 files changed, 324 insertions(+), 127 deletions(-) + +commit 284a92899602daa4a7f429e61849e794569310b5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Apr 13 21:51:12 2009 +0200 + + Did a mistake in the gmalloc -> gmallocn commit, it's a 4 here not a 3 + + poppler/SplashOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 9cf2325fb22f812b31858e519411f57747d39bd8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 11 00:31:57 2009 +0200 + + More gmalloc → gmallocn + + glib/poppler-page.cc | 2 +- + splash/Splash.cc | 8 ++++---- + splash/SplashBitmap.cc | 6 +++--- + splash/SplashFTFont.cc | 2 +- + 4 files changed, 9 insertions(+), 9 deletions(-) + +commit c399b2d512aa073b0d7cd8eb5413a4b43f0d6aef +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 11 00:26:23 2009 +0200 + + Revert part of last commit, i need more math classes :D + + poppler/JBIG2Stream.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 7b2d314a61fd0e12f47c62996cb49ec0d1ba747a +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 11 00:23:04 2009 +0200 + + Be paranoid, use gmallocn or gmallocn3 in all gmalloc with * + + poppler/ArthurOutputDev.cc | 4 ++-- + poppler/CairoOutputDev.cc | 14 +++++++------- + poppler/GfxState.cc | 8 ++++---- + poppler/JBIG2Stream.cc | 4 ++-- + poppler/PSOutputDev.cc | 6 +++--- + poppler/SplashOutputDev.cc | 20 ++++++++++---------- + 6 files changed, 28 insertions(+), 28 deletions(-) + +commit 0131f0a01cba8691d10a18de1137a4744988b346 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 11 00:20:55 2009 +0200 + + Add gmallocn3 that does the same as gmallocn but with 3 arguments + + goo/gmem.cc | 22 ++++++++++++++++++++++ + goo/gmem.h | 2 ++ + 2 files changed, 24 insertions(+), 0 deletions(-) + +commit 75c3466ba2e4980802e80b939495981240261cd5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Apr 10 18:05:54 2009 +0200 + + Make it compile in Solaris + + See bug #21080 + + poppler/CairoFontEngine.cc | 14 ++++++++++++++ + 1 files changed, 14 insertions(+), 0 deletions(-) + +commit 3210970dc1d6faf51bce59bb7ecb6b881f9c0fe6 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Apr 10 13:09:37 2009 +0200 + + [glib] Print annotations with the print flag enabled + + glib/poppler-page.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit b0b9798c85c7c6d6f336f73135a98974897b9f60 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Mar 30 23:26:39 2009 +0200 + + Fix clip test for fonts + + Fixes bug 20950 + I really don't remember why i put that -1 maybe i got mislead by + SplashClip::testRect + having a +1, but the idea of the +1 is correct because it's ints + vs floats + + splash/SplashFTFont.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 5c08f57aa80092954746d722bb13655aee3f162c +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Mar 29 23:52:31 2009 +0200 + + Forgot Ross copyright + + poppler/TextOutputDev.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit c6d3e7884010ebdcc961d81ca8c692870fc9b139 +Author: Ross Moore <ross@maths.mq.edu.au> +Date: Sun Mar 29 23:46:09 2009 +0200 + + Fix extraction of some ActualText content + + Fixes bug #20013 + + poppler/TextOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e4b3f7cbcb6ccdfa8b18d8da5f7074f4140b776a +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 25 22:16:07 2009 +0100 + + Fix getGlyphAdvance to behave correctly on font size changes + + Fixes bug #20769 + + splash/SplashFTFont.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 4acde05ac4d0b03466c949138321cc3445a14158 +Author: Eric Toombs <ewtoombs@uwaterloo.ca> +Date: Wed Mar 25 21:11:03 2009 +0100 + + Remove case-insensitive matching of filenames in PDFDoc constructor + + poppler/PDFDoc.cc | 39 ++++++++++----------------------------- + 1 files changed, 10 insertions(+), 29 deletions(-) + +commit 120c7f6697ed1edaff6e17ae1ed202c69f03a73c +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 24 22:56:33 2009 +0100 + + declare the matrix at the beginning + + poppler/ArthurOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 441a9cd56935bfe2d8fddc5d3bc2c0104aeffaca +Author: Eric Toombs <ewtoombs@uwaterloo.ca> +Date: Sun Mar 22 22:50:14 2009 +0100 + + Improved error reporting of ErrOpenFile errors + + See bug #20660 for more information + + glib/poppler-document.cc | 14 +++++++++-- + poppler/PDFDoc.cc | 54 + +++++++++++++++++++++++++++------------------ + poppler/PDFDoc.h | 8 ++++++ + 3 files changed, 51 insertions(+), 25 deletions(-) + +commit 16af0ced4a0762f2f538135bd8dd72b469f6fdca +Author: Michael K. Johnson <a1237@danlj.org> +Date: Sat Mar 21 16:14:06 2009 +0100 + + Support rendering non-square pixels in pdftoppm + + Bug #20702 + + utils/pdftoppm.1 | 16 ++++++++++++++-- + utils/pdftoppm.cc | 37 ++++++++++++++++++++++++++++++++----- + 2 files changed, 46 insertions(+), 7 deletions(-) + +commit a103c60abd5fe4c721b099c005daf22d6350c355 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 21 15:47:12 2009 +0100 + + Update version we need of Qt4 + + CMakeLists.txt | 2 +- + configure.ac | 8 ++++---- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit c4b1754fdd3a4649551556de2655c8291daafddf +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 21 13:29:38 2009 +0100 + + Bump cairo dependency to 1.8.4 + + Cairo 1.8.4 fixes and important bug that affects the Type 3 font + rendering + + CMakeLists.txt | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 50c4ee413929e5a70133839e3cde039da738fab2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 18 22:00:05 2009 +0100 + + Add more _checkoverflow variants, rework internals + + goo/gmem.cc | 92 + +++++++++++++++++++++++++++++------------------------------ + goo/gmem.h | 4 ++- + 2 files changed, 48 insertions(+), 48 deletions(-) + +commit 121c44db0884f0d70ba1470a66aa78441257c421 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Fri Mar 20 23:25:19 2009 +1030 + + Fix cairo luminosity smask when cairo ctm != identity + + poppler/CairoOutputDev.cc | 16 +++++++++++++++- + 1 files changed, 15 insertions(+), 1 deletions(-) + +commit 3f55aff56a1d2002ba79f3efba5eb77e94575439 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Thu Mar 19 22:34:23 2009 +1030 + + Fix bug in cairo backend with nested masks + + The previous smask was not restored after a q/Q pair or form xobject. + + poppler/CairoOutputDev.cc | 18 +++++++++++++++++- + poppler/CairoOutputDev.h | 5 +++++ + 2 files changed, 22 insertions(+), 1 deletions(-) + +commit 4cc3cb8992ac554352d68e97563823b9bbd556ce +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Mar 20 12:38:28 2009 +0100 + + Bump cairo dependency to 1.8.4 + + Cairo 1.8.4 fixes and important bug that affects the Type 3 font + rendering + + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit da94fe717a1ab60fb074fae61d582d1ee7151fc2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Mar 16 22:54:27 2009 +0100 + + Fix parsing of border arrays + + Fixes 19761 + + poppler/Annot.cc | 54 + ++++++++++++++++++++++++++++++++++++------------------ + 1 files changed, 36 insertions(+), 18 deletions(-) + +commit 8df0323f1ca4548a5d5824ece8736b356ce7ca42 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Mar 12 00:09:03 2009 +0100 + + Really fix jpeg lib init order? + + poppler/DCTStream.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 12aac6774fc6f92def3d5567051117951cc32223 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 11 23:00:37 2009 +0100 + + fontCIDType2OT fonts can also have a CIDToGIDMap + + Fixes bug #20605 + + poppler/GfxFont.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 0ca9ae2848808d15e7a2b00f5eb33bb8f990c887 +Author: Vincent Torri <vtorri@univ-evry.fr> +Date: Wed Mar 11 00:39:59 2009 +0100 + + remove the fortran check during the initialisation of libtool + + configure.ac | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 710e329a3a6a9ee2eed997c9eeaea21c44237423 +Author: Vincent Torri <vtorri@univ-evry.fr> +Date: Wed Mar 11 00:37:11 2009 +0100 + + Add AC_CONFIG_MACRO_DIR([m4]) + + It is used by autoreconf to trace changes in m4 macros that are in + the m4/ subdirectory. + + configure.ac | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit d15e47158ae31909212d3875159046afb208de97 +Author: Vincent Torri <vtorri@univ-evry.fr> +Date: Wed Mar 11 00:36:27 2009 +0100 + + Better check for pkg-config + + configure.ac | 5 +---- + 1 files changed, 1 insertions(+), 4 deletions(-) + +commit b3f569f9a6c117c097acac52ae6552209fcd2101 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 11 00:25:07 2009 +0100 + + Check there is an optional content config before using it + + Fixes bug #20587 + + poppler/Gfx.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 7a5d1e57b2757c986da17f7238415b927e73127f +Author: Brian Ewins <Brian.Ewins@gmail.com> +Date: Mon Mar 9 22:54:58 2009 +0100 + + Check for pkgconfig before using it + + At the moment if pkgconfig is not installed, an unhelpful syntax + error appears when testing for freetype. Identify the problem + earlier on + + configure.ac | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 8dc9e4d57a4759de2b56a87d9bace80d5d563fef +Author: Marc Kleine-Budde <mkl@pengutronix.de> +Date: Sun Mar 8 15:29:02 2009 +0100 + + use AC_CHECK_HEADER to find headers + + The original m4/libjpeg.m4 used AC_FIND_FILE to look for jpeg + header file. + This test is not cross-compiling save. This patch uses the autoconf + function + AC_CHECK_HEADER to look for the jpeg header, which works in the + native and + the cross compiling scenaria. + Bug #20538 + + m4/libjpeg.m4 | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +commit bf2e2f056cadbc488cd3e9576b44beb34689ec81 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Mar 8 13:44:44 2009 +0100 + + Add the new croptting options explanations + + utils/pdftotext.1 | 15 +++++++++++++++ + 1 files changed, 15 insertions(+), 0 deletions(-) + +commit 663d9e5a448641421d290dd228be692a0f236b9c +Author: Jan Jockusch <jan@jockusch.de> +Date: Sun Mar 8 13:44:20 2009 +0100 + + Make pdftotext to accept cropping options like pdftoppm + + Bug #20331 + + utils/pdftotext.cc | 29 ++++++++++++++++++++++++++++- + 1 files changed, 28 insertions(+), 1 deletions(-) + +commit cc4b61f19b69c31d9a73ae7361c4b6a94345d1c2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Mar 8 12:55:45 2009 +0100 + + Fix the previous fix + + I should stop listening to people without checking that what they + say is + correct + + poppler/DCTStream.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit a4a73cd9f9ee9767d74fbb44ffe083d2057a9d61 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Mar 8 12:44:06 2009 +0100 + + I should compile before commiting :-/ + + poppler/DCTStream.cc | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 6a6b3cc91053e771a67dffa979076d130f87ff11 +Author: Ryszard Trojnacki <rysiek@menel.com> +Date: Sun Mar 8 12:38:42 2009 +0100 + + set up the error-manager before calling jpeg_create_decompress + + Bug #20484 + + poppler/DCTStream.cc | 11 +++++++---- + 1 files changed, 7 insertions(+), 4 deletions(-) + +commit 4dfa7460ddc4b5684d5ef8db17efa50b95b7b735 +Author: Nick Jones <nick.jones@network-box.com> +Date: Tue Mar 3 00:55:53 2009 +0100 + + Do not blindly follow loops parsing OutlineItem + + More details in bug 18364 + + poppler/Outline.cc | 15 ++++++++++++++- + 1 files changed, 14 insertions(+), 1 deletions(-) + +commit de3131ae38fc9442b198d4d7b0c57c6939ad66ce +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 2 15:20:07 2009 +0100 + + [Qt4] adapt to the new PDFDoc saving API + + store the error code instead of the bool + + qt4/src/poppler-pdf-converter.cc | 12 +++++++----- + 1 files changed, 7 insertions(+), 5 deletions(-) + +commit dac0542eb793603090416f1b7712ca08253f1e7f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 2 09:54:22 2009 +0100 + + [glib] Correctly handle doc->saveAs() error code. + + Fixes bug #19915. + + glib/poppler-document.cc | 37 +++++++++++++++++++++++++++++++++---- + 1 files changed, 33 insertions(+), 4 deletions(-) + +commit bfc6572614727565d883b9545d4b6665f3c2fdfe +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Feb 28 13:16:49 2009 +0100 + + Return an error code instead of a GBool when saving + + poppler/PDFDoc.cc | 22 +++++++++++----------- + poppler/PDFDoc.h | 8 ++++---- + 2 files changed, 15 insertions(+), 15 deletions(-) + +commit f7c88148fdb671736d81dd5f01a3fb68f944510c +Author: Koji Otani <sho@bbr.jp> +Date: Wed Feb 25 23:38:35 2009 +0100 + + Fix cache shifting + + poppler/GfxState.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 305af8cdb6822858e152e1f930bba2ce3904bf1b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 25 22:40:24 2009 +0100 + + Make JBIG2Stream not crash in 2009-41414141.pdf + + poppler/JBIG2Stream.cc | 151 + +++++++++++++++++++++++++++--------------------- + 1 files changed, 85 insertions(+), 66 deletions(-) + +commit 26a8217160c1eaeeadb92023b27e68f402e38dd0 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Feb 22 18:14:15 2009 +0100 + + Check if cairo_shape is not NULL before using it. + + We were checking shape instead. It fixes a crash with some documents. + See bug #17337. + + poppler/CairoOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5e68e52da65b4d8c3817e5fbb6f1a937da321d48 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 21 18:03:15 2009 +0100 + + [Qt4] do not assume the destination file name for links is ASCII + + qt4/src/poppler-page.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 439cb397fed33df627a09c70788d72bef20dc872 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 21 18:02:36 2009 +0100 + + [Qt] do not assume the destination file name for links is ASCII + + qt/poppler-page.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 3ea5f45ad3e5a55e577a2e45f61b55932ed17013 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Feb 21 17:46:30 2009 +0100 + + [glib] Make sure filename is valid utf-8 for remote dests + + glib/poppler-action.cc | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +commit b5989e4ffece6c1831610ee163d05fd80386a001 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Feb 21 17:45:18 2009 +0100 + + Use the UF entry when present in Filespec dictionary + + poppler/FileSpec.cc | 14 +++++++------- + 1 files changed, 7 insertions(+), 7 deletions(-) + +commit 943fca42b5fa815fad650e42da4ad6e806adc3b1 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Feb 21 12:08:00 2009 +0100 + + [glib] Add a macro to define boxed types + + glib/poppler-action.cc | 26 +----------- + glib/poppler-annot.cc | 15 +------ + glib/poppler-document.cc | 44 ++++---------------- + glib/poppler-page.cc | 99 + +++++++++------------------------------------- + glib/poppler-private.h | 20 +++++++++ + 5 files changed, 53 insertions(+), 151 deletions(-) + +commit 7406337ed2d38a86308f20f8273a152538e524de +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Feb 21 11:11:20 2009 +0100 + + [glib] Use template files to create poppler-enums + + glib/Makefile.am | 43 + ++++++++++++--------------------------- + glib/poppler-enums.c.template | 44 + +++++++++++++++++++++++++++++++++++++++++ + glib/poppler-enums.h.template | 25 +++++++++++++++++++++++ + 3 files changed, 82 insertions(+), 30 deletions(-) + +commit 29bc9d1dd115b5d400975533c3924993c3adae30 +Author: Thomas Viehmann <tv@beamnet.de> +Date: Sat Jan 17 13:16:38 2009 +0100 + + glib small doc comment corrections + + glib/poppler-attachment.cc | 2 +- + glib/poppler-layer.cc | 2 ++ + glib/poppler.cc | 2 -- + 3 files changed, 3 insertions(+), 3 deletions(-) + +commit a06e715d89a99b909b8e7b73b733066c67b1ade3 +Author: Thomas Viehmann <tv@beamnet.de> +Date: Sat Jan 17 12:58:20 2009 +0100 + + Make glib API reference more complete + + glib/reference/poppler-docs.sgml | 2 + + glib/reference/poppler-sections.txt | 55 +++++ + glib/reference/tmpl/poppler-action.sgml | 9 +- + glib/reference/tmpl/poppler-annot.sgml | 368 + +++++++++++++++++++++++++++++++ + glib/reference/tmpl/poppler-layer.sgml | 79 +++++++ + 5 files changed, 511 insertions(+), 2 deletions(-) + +commit 3a21dafa46d42d86daec440a85b9d63b292a3c88 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Feb 3 21:33:00 2009 +0100 + + Fix cache shifting + + If we do + for (i = 0;i < GFX_ICCBASED_CACHE_SIZE-1 && cache[i].num > 0;i++) { + cache[i+1] = cache[i]; + what we do at the end is copy position 0 to all others so + we need to do it in the reverse order + + poppler/GfxState.cc | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +commit 0ed3fd52bb2d3375ed302285b18f076721b8028e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Feb 1 10:37:25 2009 +0100 + + [glib-demo] Fix a typo in format string + + glib/demo/page.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 2df6d530cd9acd8648a6196031218ef10e7b3891 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jan 29 00:51:13 2009 +0100 + + Add line that for some reason was not imported from xpdf file + + Fixes bug 19789 + + utils/ImageOutputDev.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 1fc342eadcbbb41302f190b215c5daf23c9ec9b1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 28 22:53:43 2009 +0100 + + Fix crash on unexepcted Form Opt value + + Fixes crash on bug 19790 + + poppler/Form.cc | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit b1d4efb082ac3dadd7752a557e5aeb6651e17471 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jan 27 00:26:08 2009 +0100 + + PostScriptFunction::transform optimization + + Do not create and destroy a PSStack each time + PostScriptFunction::transform is called gives a 7% speedup on heavy + PostScriptFunction::transform pdf like nytimes firefox ad + + poppler/Function.cc | 12 ++++++++---- + poppler/Function.h | 15 +++++++++++++++ + 2 files changed, 23 insertions(+), 4 deletions(-) + +commit 90f95127d8d89cfcadeb7d701437ab07ce4a8a61 +Author: Koji Otani <sho@bbr.jp> +Date: Sun Jan 25 23:17:39 2009 +0100 + + Cache last 5 GfxICCBasedColorSpace + + poppler/GfxState.cc | 60 + +++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/GfxState.h | 15 ++++++++++++ + 2 files changed, 75 insertions(+), 0 deletions(-) + +commit d3f04f537fb3e963c149a7e2d8d83c7cb19da8c0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jan 23 23:08:46 2009 +0100 + + Do not crash in some PDF we don't parse correctly + + Fixes bug 19702 + + poppler/JBIG2Stream.cc | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +commit 3990c9e52da7b17215506857c792c90a37ebac79 +Author: Koji Otani <sho@bbr.jp> +Date: Mon Jan 19 09:53:00 2009 +0100 + + Fix a problem in cairo backend when using a CMYK Profile + + poppler/GfxState.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 6e51ae7fe8b9dc8ad52b735f2fe056f8ea8f1dcb +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jan 15 22:33:04 2009 +0100 + + calculate the limit in a way that one does not access an invalid + index of the matrix + + poppler/DCTStream.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ea2aa7bd1ceb0e3282398f52683e4f52ef401f74 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jan 15 22:18:48 2009 +0100 + + Forgot my copyrights + + poppler/DCTStream.cc | 2 +- + poppler/DCTStream.h | 2 +- + poppler/Stream.cc | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +commit d65dd23752ec14635d0d224afa7dd605f98a10a4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jan 15 22:17:14 2009 +0100 + + Minor optimizations + + poppler/DCTStream.cc | 17 ++++++++--------- + poppler/DCTStream.h | 3 ++- + poppler/Stream.cc | 3 ++- + 3 files changed, 12 insertions(+), 11 deletions(-) + +commit d3d2910f757dfc3e141aed62aa970136f9d7186f +Author: Pino Toscano <pino@kde.org> +Date: Sun Jan 11 00:40:46 2009 +0100 + + fix a (relatively small) memory leak when asking for a document-level + JS + + poppler/Catalog.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 869584a84eed507775ff1c3183fe484c14b6f77b +Author: Jonathan Kew <jonathan_kew@sil.org> +Date: Sat Jan 10 18:28:47 2009 +0100 + + Add the possibility of setting the datadir on runtime + + poppler/GlobalParams.cc | 27 ++++++++++++++++++++------- + poppler/GlobalParams.h | 5 ++++- + 2 files changed, 24 insertions(+), 8 deletions(-) + +commit cf112dceb1d6653beae73ce2fac6fb5eee48ff33 +Author: Koji Otani <sho@bbr.jp> +Date: Sat Jan 10 18:11:20 2009 +0100 + + Fix some problems with color management in CMYK Color Profile. + + Fixes bug 19483 + + poppler/GfxState.cc | 106 + +++++++++++++++++++++++++------------------------- + 1 files changed, 53 insertions(+), 53 deletions(-) + +commit 6dd77338d16f80760ae32ff9f3e2be9768fc0c49 +Author: Pino Toscano <pino@kde.org> +Date: Thu Jan 8 11:49:45 2009 +0100 + + [Qt4] use the cropbox for the annotations coordinates + + Fixes bug #18558. + + qt4/src/poppler-page.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 69c07c031159d36dde52609bffa6d48c3c56cef5 +Author: Pino Toscano <pino@kde.org> +Date: Thu Jan 8 00:59:19 2009 +0100 + + update Poppler copyright to 2009 + + msvc/poppler/poppler-config.h | 2 +- + poppler-config.h.cmake | 2 +- + poppler/poppler-config.h.in | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +commit 79e0eea85cf063c6323caafbec97f3d71fc04ca2 +Author: Pino Toscano <pino@kde.org> +Date: Thu Jan 8 00:57:03 2009 +0100 + + remove old cmake modules, add a new one + + Makefile.am | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +commit 0e6420ece2d6fcc046d5814b48a2754fb86771e2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 7 23:33:02 2009 +0100 + + Require cmake 2.6.0, remove two cmake files provided upstream + + CMakeLists.txt | 4 +- + cmake/modules/FindFreetype.cmake | 74 + --------------------- + cmake/modules/FindPackageHandleStandardArgs.cmake | 58 ---------------- + glib/CMakeLists.txt | 2 +- + 4 files changed, 3 insertions(+), 135 deletions(-) + +commit a69add73bf7bef17c677c735db77934ba67188a5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 7 19:06:13 2009 +0100 + + Update copyright notices + + poppler/FontInfo.cc | 1 + + poppler/FontInfo.h | 1 + + qt4/src/poppler-document.cc | 2 +- + qt4/src/poppler-fontinfo.cc | 2 +- + qt4/src/poppler-form.cc | 1 + + qt4/src/poppler-form.h | 1 + + qt4/src/poppler-private.h | 2 +- + qt4/src/poppler-qt4.h | 2 +- + 8 files changed, 8 insertions(+), 4 deletions(-) + +commit 18d584158a781fecb4f696b01fb4d17803ce7d7a +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 7 17:55:48 2009 +0100 + + Add lcms option to cmake buildsystem + + CMakeLists.txt | 9 +++++++++ + cmake/modules/FindLCMS.cmake | 37 +++++++++++++++++++++++++++++++++++++ + config.h.cmake | 3 +++ + 3 files changed, 49 insertions(+), 0 deletions(-) + +commit 140b8ed97416f9c2ec02eb749ca45ca50bd651a8 +Author: Koji Otani <sho@bbr.jp> +Date: Wed Jan 7 17:43:44 2009 +0100 + + Add initial support for color management + + configure.ac | 19 ++ + poppler/GfxState.cc | 697 + +++++++++++++++++++++++++++++++++++++++++++++++---- + poppler/GfxState.h | 74 +++++- + poppler/Makefile.am | 5 + + 4 files changed, 738 insertions(+), 57 deletions(-) + +commit bdc76dc811a6e4d5fd929bbdc8cd3300aeaea31f +Author: Pino Toscano <pino@kde.org> +Date: Tue Jan 6 15:45:37 2009 +0100 + + [Qt4] apidox improvements for the font functions of Document; mark + scanForFonts() as deprecated + + qt4/src/poppler-qt4.h | 22 ++++++++++++++++++---- + 1 files changed, 18 insertions(+), 4 deletions(-) + +commit 6630e715714161cd803fc064f5d3cf880f42b0a5 +Author: Pino Toscano <pino@kde.org> +Date: Tue Jan 6 15:36:19 2009 +0100 + + tell Doxygen to consider Q_DECL_DEPRECATED as empty + + qt4/src/Doxyfile | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit d748d430b106580b8be29ca3ec75caf05b55812e +Author: Pino Toscano <pino@kde.org> +Date: Tue Jan 6 15:24:25 2009 +0100 + + [Qt4] Add a FontIterator for iterating through the fonts of the + document, page by page. + + This new iterator class is the new preferred way for getting the + fonts of a document in a page-by-page mode. + * Document::fonts() is adapted to use it, instead of relying on + scanForFonts() + * scanForFonts() is ported to FontIterator, but keeping the old + behaviour ("i can scan the document only once") + * added unit tests for fonts(), scanForFonts() and FontIterator + + qt4/src/poppler-document.cc | 27 +++++--- + qt4/src/poppler-fontinfo.cc | 36 ++++++++++ + qt4/src/poppler-private.h | 27 +++++++- + qt4/src/poppler-qt4.h | 65 +++++++++++++++++++ + qt4/tests/check_fonts.cpp | 149 + +++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 291 insertions(+), 13 deletions(-) + +commit b9804542bb50216786dc11ca16efd84304f4b832 +Author: Pino Toscano <pino@kde.org> +Date: Tue Jan 6 15:16:53 2009 +0100 + + Add the possibility to set the first page to scan. + + The default value is 0 (= first page), so it should be compatible + with any usage so far. + + poppler/FontInfo.cc | 4 ++-- + poppler/FontInfo.h | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit af74fef03bfbd79334da5612c63c7793952542f9 +Author: Warren Toomey <poppler@tuhs.org> +Date: Tue Jan 6 01:36:31 2009 +0100 + + Add forgotten file to let the autotools based system build + + m4/libpng.m4 | 99 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 99 insertions(+), 0 deletions(-) + +commit ae588500f62bab5666174ff3b1564c414c5a76c5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jan 6 01:35:38 2009 +0100 + + Fix the cmake buildsystem + + CMakeLists.txt | 6 ++++++ + config.h.cmake | 3 +++ + utils/CMakeLists.txt | 4 ++++ + 3 files changed, 13 insertions(+), 0 deletions(-) + +commit 940d060a14712c09da427e2fac4ec579f7291b0f +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jan 6 01:27:06 2009 +0100 + + do not leak fName if fopen fails + + utils/HtmlOutputDev.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 7be9198adb940ad7c5fffc6db0158cf7042e1b8f +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jan 6 01:24:15 2009 +0100 + + Do not leak pgNum and imgnum if fopen fails + + utils/HtmlOutputDev.cc | 16 +++++++++------- + 1 files changed, 9 insertions(+), 7 deletions(-) + +commit dfba6c022b150553cb2b18b027e661b3b4625ce7 +Author: Warren Toomey <poppler@tuhs.org> +Date: Tue Jan 6 01:16:31 2009 +0100 + + Make pdftohtml output png images when the image stream is not a jpeg + + configure.ac | 14 +++++ + utils/HtmlOutputDev.cc | 126 + +++++++++++++++++++++++++++++++++++++++++++++-- + utils/HtmlOutputDev.h | 3 +- + utils/Makefile.am | 4 ++ + 4 files changed, 140 insertions(+), 7 deletions(-) + +commit 0963c276ba972a36c2895e4fe1c7475acd489738 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 4 16:54:32 2009 +0100 + + Fix some checked checkboxes not rendering correctly + + If we are forcing ZaDb/ZapfDingbats to correctly draw a checkmark + in the checkbox, but the file does not have such font defined we + need to create a fake one so the system really renders it + Fixes bug 19359 + + poppler/Annot.cc | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- + poppler/Annot.h | 2 ++ + poppler/Gfx.h | 7 ++++--- + 3 files changed, 53 insertions(+), 5 deletions(-) + +commit 46128cf83b322c112eb0c409c20052bdb2ea4a37 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 4 14:21:15 2009 +0100 + + Remove wrong and unused FormWidget(FormWidget *dest) contructor + + poppler/Form.cc | 11 ----------- + poppler/Form.h | 3 +-- + 2 files changed, 1 insertions(+), 13 deletions(-) + +commit 5203aefc41fa47c461812cc46f28281edd226515 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 4 14:03:16 2009 +0100 + + Plug some memory leaks + + poppler/Annot.cc | 5 ++++- + poppler/Form.cc | 4 +++- + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit 5fb7ec7e6af4cfb2b256a5b9b9752e68330b4aec +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Dec 30 23:46:59 2008 +0100 + + If Length2 is zero just write until we find EOF of the stream + + Fixes exporting to PS of the two pdf i have that have fonts with + Length2 set to 0 + + poppler/PSOutputDev.cc | 26 +++++++++++++++++++++----- + 1 files changed, 21 insertions(+), 5 deletions(-) + +commit ca35fdbc7c31dae432d775b6c087a83fa9b897fc +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Dec 30 23:03:57 2008 +0100 + + We need spaces here too to satify other consumer parsers + + poppler/PDFDoc.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 3c07c73e07a9cb59ee4c23ca60d2adce92de45f7 +Author: Pino Toscano <pino@kde.org> +Date: Tue Dec 30 22:21:27 2008 +0100 + + [Qt4-demo] load a document when passed via command line + + qt4/demos/main_viewer.cpp | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit aba0aaa896d634a51fbb3a3e6eae411be462f930 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Dec 29 00:31:18 2008 +0100 + + More improvements in document writing + + Dictionary keys are names so need to be sanitized + Add a space after num gen obj + + poppler/PDFDoc.cc | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +commit e5b93a847ae4e20a77fecef0938da4f14dfbe3eb +Author: Hib Eris <hib@hiberis.nl> +Date: Sun Dec 28 22:59:14 2008 +0100 + + Let compiler figure out CDECL + + CDECL is a compiler specific macro to specify C calling convention. + + On Windows, some functions must be forced to use this calling + convention. + To do this, you can use the macro CDECL, which is defined in windef.h. + + Poppler should not try to be smarter than the compiler and try + to guess + the correct definition for CDECL. Instead it should rely on the + definitions in the windef.h file provided by the compiler. + + On Unix, specifying a calling convention is not nescessary, so + CDECL can + be an empty definition. + + poppler-config.h.cmake | 8 ++------ + poppler/poppler-config.h.in | 8 ++------ + 2 files changed, 4 insertions(+), 12 deletions(-) + +commit de70c0aeb37d788f595b0574796844f51ddedec1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 28 21:21:12 2008 +0100 + + [qt4] improve doc a bit + + qt4/src/poppler-form.h | 2 +- + qt4/src/poppler-qt4.h | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit effb32658019e09dc86c017e39154fd554fc94f8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 28 02:56:30 2008 +0100 + + Form Rects are against the cropbox, not the media box + + Fixes second pdf at kde bug 161327 + + qt4/src/poppler-form.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0f10561f3b1c90acc030d973399316bfca5f495e +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 28 01:44:25 2008 +0100 + + Fix my last commit, copy&paste is really evil + + goo/GooString.cc | 9 +++++---- + goo/GooString.h | 2 +- + 2 files changed, 6 insertions(+), 5 deletions(-) + +commit 217b46484ff56bfd5906b293ebee70b82cc0263d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 28 01:29:41 2008 +0100 + + Move PSOutputDev::filterPSName to GooString::sanitizedName so i can + use it from PDFDoc::writeObject + + goo/GooString.cc | 36 +++++++++++++++++++++++++++++++++++ + goo/GooString.h | 7 ++++++ + poppler/PDFDoc.cc | 7 +++++- + poppler/PSOutputDev.cc | 49 + ++++++++--------------------------------------- + poppler/PSOutputDev.h | 3 +- + 5 files changed, 59 insertions(+), 43 deletions(-) + +commit f41fa9ee71aef5539cf9976c79b32bf1713c8167 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 26 22:56:12 2008 +0100 + + Change the overflow check to the same used in gmem.cc, much more + easy to understand + + poppler/XRef.cc | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +commit b8ae7d91dedc9a75200b6050628ec2740af84b98 +Author: Hib Eris <hib@hiberis.nl> +Date: Fri Dec 26 22:28:09 2008 +0100 + + Fix compile warnings on auto imports for mingw32 + + configure.ac | 3 +++ + glib/Makefile.am | 2 +- + glib/demo/Makefile.am | 2 ++ + test/Makefile.am | 2 ++ + utils/Makefile.am | 2 ++ + 5 files changed, 10 insertions(+), 1 deletions(-) + +commit ba47bd2ba05f883306606eda30bff17bd4a8eec6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 26 19:47:42 2008 +0100 + + BaseFile.h has never been used and it fact it's not part of xpdf + sources + + Fixes bug 19298 + + CMakeLists.txt | 1 - + poppler/BaseFile.h | 82 + --------------------------------------------------- + poppler/Makefile.am | 1 - + 3 files changed, 0 insertions(+), 84 deletions(-) + +commit 84366d9e63b0d6a5ee1aae2463648cfc2ff5e1b8 +Author: Hib Eris <hib@hiberis.nl> +Date: Wed Dec 24 19:27:19 2008 +0100 + + Let libtool build DLLs on windows too + + configure.ac | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit 08cef528f2e51cc62cff4125f179021ad9555317 +Author: Hib Eris <hib@hiberis.nl> +Date: Wed Dec 24 17:48:46 2008 +0100 + + Fix compile warning on string literal format + + test/pdf-inspector.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0606b4bba8e889204c7b7c9d376f63b659f83a4f +Author: Hib Eris <hib@hiberis.nl> +Date: Wed Dec 24 17:48:10 2008 +0100 + + Fix compile warnings on parentheses and/or + + poppler/CairoOutputDev.cc | 13 +++++++------ + 1 files changed, 7 insertions(+), 6 deletions(-) + +commit eba2232cabd5fb1e177db2a6053f0d1a0aee882b +Author: Hib Eris <hib@hiberis.nl> +Date: Wed Dec 24 17:46:32 2008 +0100 + + Fix some more warnings + + test/gtk-cairo-test.cc | 11 ----------- + test/pdf-inspector.cc | 9 +++++---- + 2 files changed, 5 insertions(+), 15 deletions(-) + +commit c80431eb1626d89e7b615e5a5149d3436b554b66 +Author: Hib Eris <hib@hiberis.nl> +Date: Mon Dec 22 09:28:47 2008 +0100 + + Fix compile warning on format type + + glib/test-poppler-glib.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit fda181c35b7c7500b6d3c6ca9d454addd54929c5 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 22 00:53:44 2008 +0100 + + group condition within brackets + + poppler/ArthurOutputDev.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit c1beeecbd6cbf82811d70c75cb24059b4b492abe +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 22 00:46:49 2008 +0100 + + [demo] use the proper format field for gsize types + + glib/demo/attachments.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit bfb975466f0ff78e9e292b6af7cac66e4c331456 +Merge: 3e27892 ea3546f +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 22 00:29:38 2008 +0100 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit 3e2789257f5fc4ae0573a0c62ea380d8e83a5bb5 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 22 00:24:23 2008 +0100 + + [Qt] deserialize also the value of 'right' + + qt/poppler-link.cc | 11 ++++++----- + 1 files changed, 6 insertions(+), 5 deletions(-) + +commit 7c053ab7623cea1ac650d3e960d2d91a1ef21557 +Author: Pino Toscano <pino@kde.org> +Date: Mon Dec 22 00:19:02 2008 +0100 + + [Qt] move in a .cc file the implementation of the QString<->GooString + functions and DocumentData::addTocChildren() + + qt/CMakeLists.txt | 1 + + qt/Makefile.am | 1 + + qt/poppler-document.cc | 10 --- + qt/poppler-page.cc | 1 + + qt/poppler-private.cc | 147 + ++++++++++++++++++++++++++++++++++++++++++++++++ + qt/poppler-private.h | 106 ++-------------------------------- + 6 files changed, 157 insertions(+), 109 deletions(-) + +commit ea3546f84c5335c58cdb2906b1a1a4656be9c8ea +Author: Hib Eris <hib@hiberis.nl> +Date: Sun Dec 21 23:33:49 2008 +0100 + + Fix compile warnings on signed/unsigned comparison + + goo/gfile.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit ca672ae51d2c1fa59a891717b418ba86b5e7345c +Author: Hib Eris <hib@hiberis.nl> +Date: Sun Dec 21 23:33:00 2008 +0100 + + Fix compile warnings on ignored pragma with mingw compiler + + poppler/Gfx.cc | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit 86cfe8ab2b4e0b600f3f6682701c2fcfbe5d0ca9 +Author: Hib Eris <hib@hiberis.nl> +Date: Sun Dec 21 23:08:56 2008 +0100 + + Fix compile warnings on signed/unsigned comparison + + poppler/GfxFont.cc | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +commit e34af7ffe0a4024e2eb39314bdb09eb9a662e53e +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 21 22:16:39 2008 +0100 + + Update copyright of last commits + + poppler/TextOutputDev.cc | 1 + + poppler/TextOutputDev.h | 2 +- + qt4/src/poppler-page.cc | 1 + + 3 files changed, 3 insertions(+), 1 deletions(-) + +commit f6d84dcfc9cc587c7408af79b1ee7658d456f8d8 +Author: Hib Eris <hib@hiberis.nl> +Date: Sun Dec 21 22:09:00 2008 +0100 + + Fix compile warning to suggest parentheses and/or + + poppler/TextOutputDev.cc | 14 ++++++++------ + 1 files changed, 8 insertions(+), 6 deletions(-) + +commit 15205403eaa95d6fba0e36983de993877dd3a983 +Author: Hib Eris <hib@hiberis.nl> +Date: Sun Dec 21 21:59:45 2008 +0100 + + Fix warning to suggest parentheses inside shift + + poppler/PSOutputDev.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit cc24f37e582bfc0069faf286da97a48fe4794db1 +Author: Hib Eris <hib@hiberis.nl> +Date: Sun Dec 21 21:35:29 2008 +0100 + + Fix compile warning on ambiguous else + + test/perf-test.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit a8cc4ad8c2da804f25db8cca1c85433d5a63307c +Author: Hib Eris <hib@hiberis.nl> +Date: Sun Dec 21 21:34:28 2008 +0100 + + Fix compile warning on format not a string literal + + test/perf-test.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 3cbbf8226730aa7ee6273e154e4a9d58670a3cda +Author: Hib Eris <hib@hiberis.nl> +Date: Sun Dec 21 21:30:54 2008 +0100 + + Fix compile warning about uninitialized variable + + poppler/ABWOutputDev.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit f675916277cb76cd1293225a1271f835a02148fb +Author: Pino Toscano <pino@kde.org> +Date: Sat Dec 20 23:23:10 2008 +0100 + + reset to NULL after being deleted + + found with poppler-qt4 unit tests =) + + poppler/TextOutputDev.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit c976770c64e4c991fff27e413414473583b6fd86 +Author: Pino Toscano <pino@kde.org> +Date: Sat Dec 20 22:25:55 2008 +0100 + + [Qt4] use QHash instead of QMap where applicable + + using a hash table instead of a map mapes lookup faster; + in these cases we don't need the sorting a map gives + + qt4/src/poppler-page.cc | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +commit 944f6049a50eb3be9fb29174d67adc4ad1d0b9fe +Author: Pino Toscano <pino@kde.org> +Date: Sat Dec 20 20:13:43 2008 +0100 + + add find.c and text.c + + glib/demo/CMakeLists.txt | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit ba91b889c3b50239e339938f3c9d31fffcd87d44 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Dec 20 19:29:40 2008 +0100 + + Make destructor private in TextPage + + poppler/TextOutputDev.h | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit 0da16537aa83f6ed6d8895c7e54266263a71c1cf +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Dec 19 19:08:21 2008 +0100 + + Refactor actual text code adding a new ActualText class + + It's used by both Text and Cairo ouput devices avoiding duplicated + code + in such classes. + + poppler/CairoOutputDev.cc | 108 +++--------------------- + poppler/CairoOutputDev.h | 7 +-- + poppler/TextOutputDev.cc | 206 + ++++++++++++++++++++++++++------------------- + poppler/TextOutputDev.h | 34 ++++++-- + 4 files changed, 160 insertions(+), 195 deletions(-) + +commit 0f8ab301c633133eea3dbd4f2254f31c50e3c4a9 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Dec 14 13:12:34 2008 +0100 + + [glib-demo] Add find demo + + glib/demo/Makefile.am | 2 + + glib/demo/find.c | 282 + +++++++++++++++++++++++++++++++++++++++++++++++++ + glib/demo/find.h | 31 ++++++ + glib/demo/main.c | 4 +- + 4 files changed, 318 insertions(+), 1 deletions(-) + +commit 88df9e9aa9adb53f0a9714ea404d46f111495df3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Dec 14 11:54:35 2008 +0100 + + [glib-demo] Add Text demo + + glib/demo/Makefile.am | 2 + + glib/demo/main.c | 4 +- + glib/demo/text.c | 175 + +++++++++++++++++++++++++++++++++++++++++++++++++ + glib/demo/text.h | 31 +++++++++ + 4 files changed, 211 insertions(+), 1 deletions(-) + +commit 5b0f2355d55a5104820fd0bf16b4e76b25959de4 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Dec 14 11:49:00 2008 +0100 + + [glib] Use TextPage instead of TextOutputDev when cairo is enabled + + glib/poppler-page.cc | 148 + +++++++++++++++++++++++++++++++++--------------- + glib/poppler-private.h | 4 + + 2 files changed, 107 insertions(+), 45 deletions(-) + +commit 3ced71fb68d62308db7b9535367eafefb55d1cde +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Dec 14 11:18:00 2008 +0100 + + Add optionally text support to CairoOutputDev + + If a TextPage is set, it'll be used when rendering so that we + don't need + to use TextOutputDev and render again. + + poppler/CairoOutputDev.cc | 144 + +++++++++++++++++++++++++++++++++++++++++++-- + poppler/CairoOutputDev.h | 19 +++++- + 2 files changed, 155 insertions(+), 8 deletions(-) + +commit 0bdad35cc4cfdb8da5acaf44678920b7a0025f99 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Dec 14 11:14:12 2008 +0100 + + Add refcount support to TextPage + + poppler/TextOutputDev.cc | 12 +++++++++++- + poppler/TextOutputDev.h | 5 +++++ + qt4/src/poppler-page.cc | 2 +- + 3 files changed, 17 insertions(+), 2 deletions(-) + +commit f86514c3fbc867fc6457feacba23451e89993524 +Author: Koji Otani <sho@bbr.jp> +Date: Wed Dec 17 00:36:39 2008 +0100 + + Fix wrong PS generation when a large image is in Patterns + + Bug 18908 + + poppler/PSOutputDev.cc | 114 + ++++++++++++++++++++++++++++++------------------ + 1 files changed, 72 insertions(+), 42 deletions(-) + +commit fc395eb90b418e43453acefb42cd04baf0b7ad40 +Author: Richard Airlie <richard.airlie@maglabs.net> +Date: Tue Dec 16 21:11:53 2008 +0100 + + Allow the use of cropbox in pdftoppm + + utils/pdftoppm.cc | 16 +++++++++++++--- + 1 files changed, 13 insertions(+), 3 deletions(-) + +commit 80f415176952635a485356cf36048eee53396c25 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Dec 16 20:37:39 2008 +0100 + + Make destructors private/protected since you are not supposed to + use them + + poppler/GfxFont.cc | 2 +- + poppler/GfxFont.h | 11 +++++------ + 2 files changed, 6 insertions(+), 7 deletions(-) + +commit dbcebda953cb36a45a125aada68e85249fb73f43 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Dec 15 20:10:31 2008 +0100 + + Do not leak on AnnotScreen destructor + + Fixes bug 19095 + + poppler/Annot.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit aaeb0d137232bf1cb11dc5e37b8b45b50c6f9c6a +Author: Pino Toscano <pino@kde.org> +Date: Fri Dec 12 00:43:19 2008 +0100 + + update the xpdf headers installation + + CMakeLists.txt | 32 +++++++++++++++++++++----------- + 1 files changed, 21 insertions(+), 11 deletions(-) + +commit 7c6527fa05389f705872aaaaff12e739b5d1577e +Author: Pino Toscano <pino@kde.org> +Date: Fri Dec 12 00:41:21 2008 +0100 + + don't install Function.cc, as it is not an header + + poppler/Makefile.am | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 0179e21b128ffccb5afd13203137ab8435197609 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 12 00:16:38 2008 +0100 + + Be more helpful with bad boys that want to use poppler core directly + + fofi/Makefile.am | 10 ++++++++++ + splash/SplashClip.h | 2 +- + splash/SplashPath.h | 2 +- + splash/SplashXPath.h | 2 +- + 4 files changed, 13 insertions(+), 3 deletions(-) + +commit 401632e4eeb4b10b1183a820f32461da77e8e4f2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 12 00:14:04 2008 +0100 + + Try harder to look for openjpeg + + cmake/modules/FindLIBOPENJPEG.cmake | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ab539f46089702f60b96b1ba2b2bc1544173c264 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Dec 11 23:15:45 2008 +0100 + + Fix crash when reading outline + + Fixes bug 19024. Last as reference is required if the item has + children (Table 8.4) so if there is no last reference, don't try to + read children. + + poppler/Outline.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit c9a755f9fd14511f43a2ca7fcda36bdd64bb1d87 +Author: Ilya Gorenbein <igorenbein@finjan.com> +Date: Sun Dec 7 17:59:19 2008 +0100 + + Fix memory leak + + Bug 18924 + + poppler/Page.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 4cd364c179ae91ed383a8237ba1ad263952fd7aa +Author: Pino Toscano <pino@kde.org> +Date: Sun Nov 30 16:57:52 2008 +0100 + + add my copyright here + + qt4/src/poppler-private.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 6b1676deb773675d90469adc84c3de8dcdaf174c +Author: Pino Toscano <pino@kde.org> +Date: Sun Nov 30 16:56:43 2008 +0100 + + [Qt4] support URI actions for TOC items + + qt4/src/poppler-private.cc | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit b5cd58b5565055fd0c13771461245ddcd80edfcf +Author: Pino Toscano <pino@kde.org> +Date: Sun Nov 30 16:34:57 2008 +0100 + + extract the LinkAction "serialization" in an own function, and make + it more safe + + qt4/src/poppler-private.cc | 85 + ++++++++++++++++++++++++++++++------------- + 1 files changed, 59 insertions(+), 26 deletions(-) + +commit ee191363e22940ae7b06945e68c4738b17c78348 +Author: Pino Toscano <pino@kde.org> +Date: Sun Nov 30 16:17:32 2008 +0100 + + move the addTocChildren() implementation in the cpp + + qt4/src/poppler-form.cc | 1 + + qt4/src/poppler-page.cc | 1 + + qt4/src/poppler-private.cc | 65 + ++++++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-private.h | 64 + +----------------------------------------- + 4 files changed, 69 insertions(+), 62 deletions(-) + +commit f8eaabf1aa7e384619129a7509be85d0c3bfb825 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 30 13:33:12 2008 +0100 + + Update copyrights of the last commits + + poppler/TextOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5f4fedfae6098e25644ffe5d4b1ed0bac043841d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Nov 29 19:51:27 2008 +0100 + + Use the Length specified in the Stream as initial bufSize + + This is a optimization to save a few reallocations, if the Length + value is incorrect it will still work + + poppler/JPEG2000Stream.cc | 10 ++++++++-- + 1 files changed, 8 insertions(+), 2 deletions(-) + +commit 12f6d6ba2052fbdc8ea4ba7c7c9277e75bf170a5 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Nov 23 18:20:14 2008 +0100 + + Fix a crash when the second argument of opMarkPoint is not a + dictionary + + According to the spec "If any of the values are indirect references to + objects outside the content stream, the property list dictionary must + instead be defined as a named resource. + + poppler/Gfx.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 817e123a28e9f6b7e5be23f7ac2ba3bcec5e3f3f +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Nov 22 21:48:37 2008 +1030 + + Don't compare print flag for non Type 3 fonts in cairo font cache + + poppler/CairoFontEngine.cc | 7 ++++++- + poppler/CairoFontEngine.h | 4 +++- + 2 files changed, 9 insertions(+), 2 deletions(-) + +commit 68f8ade28764855d4f663607c50c8202b1268296 +Author: Albert Astals Cid <tsdgeos@samsung.localdomain> +Date: Sun Nov 23 10:54:46 2008 +0100 + + Compile with -pedantic + + Thanks to Bernard Leak for notifying + + test/pdf-inspector.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 4a4fa7ed44a87e47a6078a1f7bb6f41071672ea7 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Nov 18 20:11:07 2008 +0100 + + Fix a crash when selecting text in word mode + + poppler/TextOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit a6f5032ab0d6edbf3879f39efff7916b1f7233da +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Nov 16 18:24:06 2008 +0100 + + optContentConfig is not actually stored in PDFDoc but in Catalog + + poppler/PDFDoc.h | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit b843ac34c6c4ca1580f99fa2220c59dfcd91f026 +Author: Pino Toscano <pino@kde.org> +Date: Sat Nov 15 14:49:02 2008 +0100 + + [Qt4] deserialize the value of the 'right' coordinate, too + + qt4/src/poppler-link.cc | 11 ++++++----- + 1 files changed, 6 insertions(+), 5 deletions(-) + +commit 03061fdae49842556c9ff48e61914fc88502e1d8 +Author: Tim Mooney <enchanter@users.sourceforge.net> +Date: Thu Nov 13 22:32:22 2008 +0100 + + Fix build on Solaris 10 + Sun Studio 12. + + Fixes bug 17496 + + configure.ac | 14 ++++++++++++++ + test/Makefile.am | 6 ++++-- + 2 files changed, 18 insertions(+), 2 deletions(-) + +commit 17b18be4fd25f2ca2b4ed7382d9fda50410c44f1 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Wed Nov 12 20:40:57 2008 +1030 + + Ensure cairo font matrix is invertable + + Fixes bugs #18254 and #18429 + + poppler/CairoOutputDev.cc | 15 ++++++++++++++- + 1 files changed, 14 insertions(+), 1 deletions(-) + +commit e2257e6916cd1067d43db9ed45f944413c61ed64 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 9 22:44:48 2008 +0100 + + Update copyrights of the last commits + + poppler/CairoFontEngine.cc | 1 + + poppler/CairoFontEngine.h | 1 + + poppler/Form.cc | 2 +- + poppler/Gfx.h | 1 + + poppler/OptionalContent.h | 1 + + qt4/src/poppler-optcontent.cc | 1 + + 6 files changed, 6 insertions(+), 1 deletions(-) + +commit 069f8ad9453e612e907b561aa50983c34400193d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 9 20:36:06 2008 +0100 + + MakeItBuild + + glib/CMakeLists.txt | 1 + + glib/demo/CMakeLists.txt | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit 04025c4f65bbb7e4330f6d17d917a035c0906f3d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Nov 9 17:03:20 2008 +0100 + + Fix a crash when initializing an Annot with a null catalog + + Forms crate a temp annot just to get the font size of the form field + passing a NULL catalog. + + poppler/Annot.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 471255c5a3850984997d91c7850759eb0c7e8a9c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Nov 8 20:58:57 2008 +0100 + + [glib-demo] Add Optional Content demo + + glib/demo/Makefile.am | 2 + + glib/demo/layers.c | 511 + +++++++++++++++++++++++++++++++++++++++++++++++++ + glib/demo/layers.h | 31 +++ + glib/demo/main.c | 4 +- + 4 files changed, 547 insertions(+), 1 deletions(-) + +commit 7363c25e1d83332932d9b4fe16d7fb4e364da628 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 26 19:47:35 2008 +0100 + + [glib] Add Optional Content support + + glib/Makefile.am | 2 + + glib/poppler-document.cc | 377 + +++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-document.h | 12 ++ + glib/poppler-layer.cc | 201 ++++++++++++++++++++++++ + glib/poppler-layer.h | 43 +++++ + glib/poppler-private.h | 21 +++ + glib/poppler.h | 3 + + glib/test-poppler-glib.cc | 52 ++++++- + 8 files changed, 710 insertions(+), 1 deletions(-) + +commit c674566f458b54097f21aae0d4bf8637146565c5 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 26 19:42:53 2008 +0100 + + Fix memory leaks in OptionalContent + + poppler/OptionalContent.cc | 13 +++---------- + poppler/OptionalContent.h | 10 ++++++---- + 2 files changed, 9 insertions(+), 14 deletions(-) + +commit 06ca313b8ecb8abb8dec3b418d118525b7bb0fdf +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 26 19:11:45 2008 +0100 + + Check annotation optional content properties before drawing it + + poppler/Annot.cc | 20 ++++++++++++-------- + poppler/Annot.h | 4 ++-- + 2 files changed, 14 insertions(+), 10 deletions(-) + +commit a6d58927b048aa043cb6b6ed3ee9aeb213578924 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Nov 8 20:50:40 2008 +0100 + + Do not show hidden optional content + + Before any draw operation we first check whether we are inside an + optional marked content element that is currently hidden. + + poppler/Gfx.cc | 113 + +++++++++++++++++++++++++++++++++++++++----------------- + poppler/Gfx.h | 7 ++- + 2 files changed, 84 insertions(+), 36 deletions(-) + +commit 5f168f991477e291290350a28f4a60a565e187b9 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Oct 20 17:56:11 2008 +0200 + + [glib] Show action titles when printing the index in test program + + glib/test-poppler-glib.cc | 13 ++++++++----- + 1 files changed, 8 insertions(+), 5 deletions(-) + +commit a906d12e16748d9a40c0db4043a576fd3d004341 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Nov 8 20:20:00 2008 +0100 + + Minor code cleanup and consistency issues + + poppler/OptionalContent.cc | 22 +++++++++++----------- + poppler/OptionalContent.h | 8 ++++---- + qt4/src/poppler-optcontent.cc | 6 +++--- + qt4/tests/check_optcontent.cpp | 8 ++++---- + 4 files changed, 22 insertions(+), 22 deletions(-) + +commit e73c2ce906b7e1f06d641f7e0733aad6336b4091 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Oct 19 12:44:13 2008 +0200 + + Delete the optContent object if it's invalid + + poppler/Catalog.cc | 4 ++++ + poppler/OptionalContent.cc | 3 +++ + poppler/OptionalContent.h | 5 +++++ + 3 files changed, 12 insertions(+), 0 deletions(-) + +commit 2900e7e4c920d735d5a727e9e39f71df97bd7b93 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Nov 8 18:12:47 2008 +0100 + + A new cairo is needed + + CMakeLists.txt | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit aaaecd2e86769d3a99e21577448a193711985958 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 5 22:47:30 2008 +0100 + + Do not abort if indexHighA is 'invalid', move it to the closest + valid value and try with it + + For the bug 18374 it works and does not seem a security problem + + poppler/GfxState.cc | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +commit 82f4228a50efe6447c68f7f6d34a7805b7e4b75e +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 5 20:57:17 2008 +0100 + + Add myself here + + qt4/demos/viewer.cpp | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 8df7d83439f0e9ab200840f912f1c08bbf44bd6e +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 5 20:49:01 2008 +0100 + + [Qt4Demo] Fix leak + + qt4/demos/viewer.cpp | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit d3c424e0362f53bda5c4e2e415823d78ace76253 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 5 20:14:17 2008 +0100 + + Rename i to j so that code is more clear by not shadowing the + function parameter + + poppler/Catalog.cc | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit 9d12de9b59de4336eabb423f7bf0363b6a35e2a8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 5 20:00:01 2008 +0100 + + Fix crash in case indices is NULL + + Putting more than one "logical line" per "real line" is evil, we + think if will group it, but does not + + poppler/UnicodeTypeTable.cc | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +commit fc61dad9daa15f83802ffa5c3cd9b59d80bb310b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 5 19:52:00 2008 +0100 + + [Qt] Fix leak + + qt/poppler-link.cc | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +commit 981fb857b0afb1cda7836744dcf37906285512b4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 5 19:49:18 2008 +0100 + + [Qt] Fix memory leak + + qt/poppler-document.cc | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit e925e92d5cbfc009c138ece117227a3b0894ead6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 5 19:44:40 2008 +0100 + + Do not leak uBuf in the error case + + poppler/CharCodeToUnicode.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 0741a402632ec5a8641ff11707142bf2731c1833 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Nov 1 22:27:48 2008 +1030 + + Restore the cairo Type3 font image prescaling funtionality + + poppler/CairoFontEngine.cc | 49 + ++++++++++++++++++++++++++------------------ + poppler/CairoFontEngine.h | 20 ++++++++++------- + poppler/CairoOutputDev.cc | 2 +- + poppler/CairoOutputDev.h | 2 +- + 4 files changed, 43 insertions(+), 30 deletions(-) + +commit 91a7c3fdd44f30b0b50ed05a3313bbb1b5c86e71 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Nov 1 20:57:24 2008 +1030 + + Remove cairo font matrix y flip when inside a Type 3 char + + Not sure why this was previously required but it now produces + incorrect results. + + poppler/CairoOutputDev.cc | 5 ----- + 1 files changed, 0 insertions(+), 5 deletions(-) + +commit 3bf4d7d75b455a9a0b5ee3a8c78b218e5af5185a +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Nov 1 20:50:07 2008 +1030 + + Transform the glyph advance by the font matrix + + poppler/CairoFontEngine.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 4aa32bad61d008a854fdc9e902d6834bb1687d7e +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Nov 1 20:49:04 2008 +1030 + + Use the font BBox, not the font matrix to set the Gfx BBox + + poppler/CairoFontEngine.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 987955440c7711f440c3d2b5cc8c05ec07228a77 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Nov 1 20:47:05 2008 +1030 + + Ensure both the font matrix and y-axis flip are in the matrix + + we use for transforming the glyph metrics. + + poppler/CairoFontEngine.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 5c051aa117477cba5d350adfc539acb4b5f2a56a +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Nov 1 01:59:07 2008 +1030 + + Require cairo 1.8.2 for user-font support + + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit a3edfa30680864b95a5196c5619846de42980857 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Nov 1 01:57:32 2008 +1030 + + Implement Type 3 fonts in cairo backend using cairo user-fonts + + poppler/CairoFontEngine.cc | 174 + ++++++++++++++++++++++++++++++++++++++++++-- + poppler/CairoFontEngine.h | 18 +++++ + poppler/CairoOutputDev.cc | 9 ++- + poppler/CairoOutputDev.h | 4 +- + 4 files changed, 194 insertions(+), 11 deletions(-) + +commit feab1e982a2ee39bb372d593633a06b6a499822f +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Nov 1 01:21:39 2008 +1030 + + Add CairoOutputDev functions for getting Type 3 glyph metrics + + poppler/CairoOutputDev.cc | 10 ++++++++++ + poppler/CairoOutputDev.h | 7 +++++++ + 2 files changed, 17 insertions(+), 0 deletions(-) + +commit a75efe208d899d4a23d5e2fcef200e4225721636 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sat Nov 1 00:26:40 2008 +1030 + + Make the catalog available to CairoFontEngine + + glib/poppler-document.cc | 3 ++- + poppler/CairoFontEngine.cc | 2 +- + poppler/CairoFontEngine.h | 3 ++- + poppler/CairoOutputDev.cc | 7 +++++-- + poppler/CairoOutputDev.h | 3 ++- + test/pdf-inspector.cc | 2 +- + 6 files changed, 13 insertions(+), 7 deletions(-) + +commit 941d3976c496b75a3c5a9d19b80044fc2b57bd98 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Fri Oct 31 22:44:41 2008 +1030 + + Allow multiple instances of CairoOutputDev to be created + + for the same document that shares the same CairoFontEngine. + + poppler/CairoOutputDev.cc | 16 +++++++++++----- + poppler/CairoOutputDev.h | 4 +++- + 2 files changed, 14 insertions(+), 6 deletions(-) + +commit 94cff513d8589f51b243fcb078f82cb931bb6d35 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Fri Oct 31 21:11:01 2008 +1030 + + Use correct return type in _ft_new_face + + poppler/CairoFontEngine.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0b5ee897a24ce1edfca19a3b843f9b7ee7026d07 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Fri Oct 31 20:55:14 2008 +1030 + + Refactor CairoFont + + Create a CairoFreeType subclass and move the FreeType specific code + into it. + + poppler/CairoFontEngine.cc | 197 + +++++++++++++++++++++++++------------------- + poppler/CairoFontEngine.h | 26 +++++-- + 2 files changed, 131 insertions(+), 92 deletions(-) + +commit a5865dae5b414de5f6dbda2a512101050c374e06 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Oct 28 10:30:59 2008 +0100 + + [glib] Add DISABLE_SINGLE_INCLUDES flags and fix glib-demo + + configure.ac | 4 ++++ + glib/Makefile.am | 3 ++- + glib/demo/Makefile.am | 3 ++- + glib/demo/annots.h | 2 +- + glib/demo/attachments.h | 2 +- + glib/demo/fonts.h | 2 +- + glib/demo/forms.h | 2 +- + glib/demo/images.h | 2 +- + glib/demo/info.h | 2 +- + glib/demo/links.h | 2 +- + glib/demo/outline.h | 2 +- + glib/demo/page.h | 2 +- + glib/demo/render.h | 2 +- + glib/demo/transitions.h | 2 +- + glib/demo/utils.h | 2 +- + 15 files changed, 20 insertions(+), 14 deletions(-) + +commit e07bfb54b77430e10e50c33151cf0afc9854006c +Author: Christian Persch <chpe@gnome.org> +Date: Tue Oct 28 10:29:51 2008 +0100 + + [glib] Fix build when compiling with GTK_DISABLE_SINGLE_INCLUDES + + glib/poppler-page.h | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +commit a84d272ffd2b593ac98148e71b83fba299c60fea +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Oct 28 10:01:00 2008 +0100 + + [glib] Add disable deprecated compile flags and fix compile warnings + + configure.ac | 6 ++++++ + glib/Makefile.am | 3 ++- + glib/demo/Makefile.am | 4 +++- + glib/demo/attachments.c | 4 ++-- + 4 files changed, 13 insertions(+), 4 deletions(-) + +commit 43f2b84a81625abee84c93cdced7fb92c99cd944 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Oct 21 23:00:55 2008 +0200 + + [Qt4] Small docu improvement + + qt4/src/poppler-qt4.h | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 00f9995b4960575cd1f392474c585f2140c8e587 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Oct 12 14:20:01 2008 +0200 + + Do not crash if there is not font + + See bug 18023 for more info + + poppler/TextOutputDev.cc | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit 084cc4335cfe2c0e66219eba4c1177ee7ff018c5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Oct 10 23:15:35 2008 +0200 + + obj4 should be the index 1 on the Array, not the 0, that's already + obj3 + + poppler/Form.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit d7442c90206d4b7a8ebc58f995647eb87ac35f42 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Oct 9 22:53:00 2008 +0200 + + If Name is a Ref we want to get the String it references, not the Ref + + poppler/OptionalContent.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 93f8dd9e837557bbfc0f058a664c356e3d6e82c0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Oct 9 21:28:27 2008 +0200 + + Poppler 0.10.0 + + CMakeLists.txt | 2 +- + NEWS | 16 ++++++++++++++++ + configure.ac | 2 +- + msvc/config.h | 6 +++--- + qt4/src/Doxyfile | 2 +- + 5 files changed, 22 insertions(+), 6 deletions(-) + +commit cdd9bf016de0d3f96b1d5e304c9d02f2bf71ff18 +Author: Mark Kaplan <mkaplan@finjan.com> +Date: Wed Oct 8 22:29:11 2008 +0200 + + Initialize properly OptionalContentGroup::m_name + + poppler/OptionalContent.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit c7b87f3b8cbbcca29a1974debc2233f621a2e33b +Author: Carlo Bramini <carlo.bramix@libero.it> +Date: Mon Oct 6 19:32:27 2008 +0200 + + Fix link on Mingw+Msys + + test/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e92255296511cae9cbbac8de800d8b26e5f681f1 +Author: Pino Toscano <pino@kde.org> +Date: Sun Oct 5 15:57:06 2008 +0200 + + [Qt4] when the PDF exporting fails, delete the file if it was + created by + the (failed) exporting + + qt4/src/poppler-pdf-converter.cc | 13 +++++++++++++ + 1 files changed, 13 insertions(+), 0 deletions(-) + +commit 360f470b852e37d400949343763a18bf598820e8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 4 20:04:44 2008 +0200 + + Remove unused var + + poppler/Annot.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit df7317f1320513b4f66cb6618d753b82042671f5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 4 19:48:57 2008 +0200 + + free the object + + poppler/PDFDoc.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 9946d9af9dd5d5b96d5c777413a3e253dfd1f291 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 4 19:39:46 2008 +0200 + + If we try saving a document that was encrypted, we break everything, + so just fail early + + poppler/PDFDoc.cc | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +commit 108959432af7714cb8ffe42d98d40c97f936a2e6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 4 19:39:24 2008 +0200 + + Correctly return wheter it was saved or not + + qt4/src/poppler-pdf-converter.cc | 8 +++++--- + 1 files changed, 5 insertions(+), 3 deletions(-) + +commit 4c6cb1c204d782e2ac2113b57f6d372b4716017d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 4 01:46:58 2008 +0200 + + Remove spurious // + + fofi/FoFiType1.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e8e7809ab4b115cbe67251da12989fc024912514 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 4 01:43:02 2008 +0200 + + There are files that have more than one encoding definition per line, + make them work + + Fixes bug 17018, while at it, i've added some comments and some + error() to make things a bit clearer + + fofi/FoFiType1.cc | 28 ++++++++++++++++++++++++---- + 1 files changed, 24 insertions(+), 4 deletions(-) + +commit 7604e025038fee24c2cb3001f2100d5d1e48efe1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Oct 4 00:35:46 2008 +0200 + + Fix Poppler::Link::linkArea for rotated pages + + we suck :-( Fixes kde bug 172105 + + qt4/src/poppler-link-extractor.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 450b21e4528a8e890d3dda37ecb0a68602f8efaa +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Oct 1 00:46:29 2008 +0200 + + I've changed these files this year too, update copyright + + goo/gmem.cc | 2 +- + goo/gmem.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 98310ca24841789cf53b10d34e271ceb4e054001 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 30 23:59:43 2008 +0200 + + Fix StitchingFunction(StitchingFunction *func) and + GfxAxialShading(GfxAxialShading *shading) + + Fixes bug 17852 + + poppler/Function.cc | 2 ++ + poppler/GfxState.cc | 2 +- + 2 files changed, 3 insertions(+), 1 deletions(-) + +commit d12f5f4395eb18f8d29182e24acddd3e2b5cfe88 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 30 23:20:26 2008 +0200 + + 0.9.3 + + CMakeLists.txt | 2 +- + NEWS | 17 +++++++++++++++++ + configure.ac | 2 +- + msvc/config.h | 6 +++--- + qt4/src/Doxyfile | 2 +- + 5 files changed, 23 insertions(+), 6 deletions(-) + +commit d61e464754521555a06ed0901955f49be4def29a +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 30 19:26:17 2008 +0200 + + Timothy also agreed, now Ed Catmur is the last one missing to answer + + utils/ImageOutputDev.cc | 3 +++ + utils/ImageOutputDev.h | 3 +++ + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit 3225f54fea7cbb6b25d7223268cdeccfdd823375 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 30 00:27:49 2008 +0200 + + And Marco said yes to GPLv2+ + + Only Timothy Lee and Ed Catmur left :-) + + poppler/Catalog.cc | 3 +++ + poppler/Outline.cc | 3 +++ + poppler/Outline.h | 3 +++ + splash/Splash.cc | 3 +++ + splash/Splash.h | 3 +++ + 5 files changed, 15 insertions(+), 0 deletions(-) + +commit 268d803c9dd67b7f78f8dcdc3c7653c8b2c2d08f +Author: Warren Toomey <wkt@tuhs.org> +Date: Mon Sep 29 21:14:40 2008 +0200 + + Let HmtlOutputDev process images + + utils/HtmlOutputDev.h | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit a29984ab777c64a1cb286b667a6a91ad9b191f40 +Merge: f399afe 6865872 +Author: Pino Toscano <pino@kde.org> +Date: Sun Sep 28 23:39:08 2008 +0200 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit f399afe6f6b9c250327d0e4c5b3f2839889d7095 +Author: Pino Toscano <pino@kde.org> +Date: Sun Sep 28 23:38:34 2008 +0200 + + [Qt4] various apidox improvements + + qt4/src/Mainpage.dox | 10 +--- + qt4/src/poppler-link.h | 92 +++++++++++++++++++++++++++++++++--- + qt4/src/poppler-qt4.h | 121 + ++++++++++++++++++++++++++++++++--------------- + 3 files changed, 168 insertions(+), 55 deletions(-) + +commit 68658721583b05ebacb1165ac36e91d49735bbd9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Sep 28 19:29:06 2008 +0200 + + If tables is null, don't try to write to file as it'll crash, fixes + crash on 17811 when using cairooutputdev + + fofi/FoFiTrueType.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 3cb5b7fc5ae168ef58fd1905f61c1b9abe6cb86c +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Sep 28 19:25:53 2008 +0200 + + Introduce greallocn_checkoverflow and use it in FoFiTrueType::parse + + Fixes the other part of bug 17811 + + fofi/FoFiTrueType.cc | 4 ++-- + goo/gmem.cc | 21 +++++++++++++++++++++ + goo/gmem.h | 1 + + 3 files changed, 24 insertions(+), 2 deletions(-) + +commit aa7ef03af49f74ed558dcbab8ad4c594bb2b7d53 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Sep 28 19:24:43 2008 +0200 + + If libjpeg tells us to abort, let's abort :D + + Fixes part of bug 17811 + + poppler/DCTStream.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit e2461c9aa4d74b5511621d7222979948e31541ad +Author: Pino Toscano <pino@kde.org> +Date: Sun Sep 28 18:07:25 2008 +0200 + + [Qt4] Activate the 'printing' flag by default in the PSConverter. + + qt4/src/poppler-ps-converter.cc | 2 +- + qt4/src/poppler-qt4.h | 2 ++ + 2 files changed, 3 insertions(+), 1 deletions(-) + +commit 957d7acb66635e9748c6bc7a31cdbbcbb8da9011 +Author: Carlo Bramini <carlo.bramix@libero.it> +Date: Sat Sep 27 17:23:20 2008 +0200 + + Misc mingw fixes + + configure.ac | 2 +- + glib/Makefile.am | 2 +- + glib/demo/info.cc | 1 + + m4/libjpeg.m4 | 2 +- + 4 files changed, 4 insertions(+), 3 deletions(-) + +commit b3828203c4e594754957033ea826e8e22164fd5b +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Sep 26 23:08:14 2008 +0200 + + Carl agreed too, so CairoOutputDev.cc is done + + Only miss, Marco Pesenti Gritti, Timothy Lee and Ed Catmur + + poppler/CairoOutputDev.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit a197a07728d19abc2708979c95b4ef53e88fcb55 +Author: Carlo Bramini <carlo.bramix@libero.it> +Date: Fri Sep 26 18:42:05 2008 +0200 + + Compile where localtime_r is not available + + glib/demo/info.cc | 10 ++++++++-- + 1 files changed, 8 insertions(+), 2 deletions(-) + +commit 38884e1722ac7e15c62cece20035c5fb0020f4b3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 24 14:18:38 2008 +0200 + + Do what Jeff really want to do, mark the font as invalid if it matches + any of the known collections that Identity is not a good fallback + + Fixes pdf on KDE bug 171365 + + poppler/GfxFont.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0e080aaf44816e5d5b9008f3c2fb54868932f0ac +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 24 13:12:13 2008 +0200 + + Remove non-needed X includes + + Spotted by Carlo Bramini + + test/gtk-cairo-test.cc | 3 --- + test/pdf-inspector.cc | 3 --- + 2 files changed, 0 insertions(+), 6 deletions(-) + +commit 6888b023fdb199d3c5fb705bd928aedf68eeffdb +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 23 23:28:04 2008 +0200 + + Only do the scale to 'm' size trick on non embedded fonts as it was + meant to be + + Fixes bug 17744 + + poppler/SplashOutputDev.cc | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit 539d29f4f3b24b98c9fc5f88d3477e427fbe409d +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 23 22:39:50 2008 +0200 + + 0.9.2 + + CMakeLists.txt | 2 +- + NEWS | 19 +++++++++++++++++++ + configure.ac | 2 +- + msvc/config.h | 6 +++--- + qt4/src/Doxyfile | 2 +- + 5 files changed, 25 insertions(+), 6 deletions(-) + +commit abd070a79d8345bda3853395a39e4e2882c4ff8a +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 22 20:23:11 2008 +0200 + + Check the types here too + + Benchmarking in release mode, both in "human feel" and callgrind + the benefit/lost is almost inexistant + + poppler/Object.h | 36 ++++++++++++++++++++++-------------- + 1 files changed, 22 insertions(+), 14 deletions(-) + +commit df47e4c441e4ec79b1bb40de7044c9501f243b76 +Author: Chris Wilson <chris@chris-wilson.co.uk> +Date: Tue Sep 16 12:56:04 2008 +0100 + + Check for duplicate open fonts. + + Before creating a new FT_Face for a font, check to see if there is a + duplicate amongst the list of open fonts, kept alive by either + Poppler's + or Cairo's font cache . + + A quick example of the benefit of this check is that it reduces the + RSS of + the Poppler converter in the Cairo test suite from over 900 MiB to + just 90 + MiB. + + configure.ac | 1 + + poppler/CairoFontEngine.cc | 214 + ++++++++++++++++++++++++++++++++++++++----- + 2 files changed, 190 insertions(+), 25 deletions(-) + +commit 41d1edddcf84ca23c0fc39c5f4f3a49e408a9f1a +Author: Kouhei Sutou <kou@cozmixng.org> +Date: Sun Sep 21 16:33:33 2008 +0200 + + [glib-demo] Fix a crash in forms demo + + glib/demo/forms.c | 12 +++++++----- + 1 files changed, 7 insertions(+), 5 deletions(-) + +commit fe26075353226be9a02c8cf1a6a29586de15ce86 +Author: Pino Toscano <pino@kde.org> +Date: Sun Sep 21 12:03:21 2008 +0200 + + really use the key passed to it + + poppler/Form.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 8aa531cb478d6ae838a94f9f31e6a0bbd0dd957c +Author: Pino Toscano <pino@kde.org> +Date: Sun Sep 21 11:18:22 2008 +0200 + + Read the 'readOnly' attribute directly in the FormField constructor. + + poppler/Form.cc | 12 +++--------- + 1 files changed, 3 insertions(+), 9 deletions(-) + +commit b56f64d676bdabd4a3ebe0eb2237f4c202a3707d +Author: Pino Toscano <pino@kde.org> +Date: Sun Sep 21 00:53:54 2008 +0200 + + Handle streams as entries for the catalog JS name tree. + + poppler/Catalog.cc | 18 +++++++++++++----- + 1 files changed, 13 insertions(+), 5 deletions(-) + +commit 93386d67b3d7adbd87547e9742e4df1c10eadbc1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Sep 20 16:20:03 2008 +0200 + + Compile with -pedantic + + poppler/Form.h | 4 ++-- + qt4/src/poppler-embeddedfile.cc | 4 ++-- + qt4/src/poppler-movie.cc | 3 ++- + qt4/src/poppler-sound.cc | 3 ++- + qt4/src/poppler-textbox.cc | 2 +- + 5 files changed, 9 insertions(+), 7 deletions(-) + +commit 6961fd8efe3db6ee7077dc2ed072498696dae31a +Author: Tomas Are Haavet <tomasare@gmail.com> +Date: Sat Sep 20 16:13:37 2008 +0200 + + Remove some warnings and errors when compiling with gcc and -pedantic + + fofi/FoFiTrueType.cc | 3 ++- + glib/poppler-annot.cc | 8 ++++---- + glib/poppler-attachment.cc | 2 +- + glib/poppler-document.cc | 6 +++--- + glib/poppler-form-field.cc | 2 +- + glib/poppler-page.cc | 2 +- + poppler/Annot.h | 5 +++-- + splash/SplashTypes.h | 3 ++- + 8 files changed, 17 insertions(+), 14 deletions(-) + +commit 4e9a04da358b1527a08102e601a52f07930532f2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Sep 20 16:10:50 2008 +0200 + + Add mention of GPLv2 or later in poppler changes to all files except + Splash.cc and Splash.h, i've still no answer from Marco :-( + + splash/SplashBitmap.cc | 3 +++ + splash/SplashBitmap.h | 3 +++ + splash/SplashErrorCodes.h | 3 +++ + splash/SplashFTFont.cc | 3 +++ + splash/SplashFTFont.h | 3 +++ + splash/SplashFTFontEngine.cc | 3 +++ + splash/SplashFTFontEngine.h | 3 +++ + splash/SplashFTFontFile.cc | 3 +++ + splash/SplashFTFontFile.h | 3 +++ + splash/SplashFont.cc | 3 +++ + splash/SplashFont.h | 3 +++ + splash/SplashFontEngine.cc | 3 +++ + splash/SplashFontEngine.h | 3 +++ + splash/SplashFontFile.cc | 3 +++ + splash/SplashFontFile.h | 3 +++ + splash/SplashT1Font.cc | 3 +++ + splash/SplashT1Font.h | 3 +++ + splash/SplashT1FontEngine.cc | 3 +++ + splash/SplashT1FontFile.cc | 3 +++ + splash/SplashT1FontFile.h | 3 +++ + splash/SplashTypes.h | 3 +++ + splash/SplashXPathScanner.cc | 3 +++ + 22 files changed, 66 insertions(+), 0 deletions(-) + +commit beb87362072d5b480cf6b2c02445ec17c119ff56 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Sep 20 15:47:25 2008 +0200 + + Add Tomas' Copyright + + utils/HtmlFonts.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 8ccb1bb651b129875ef802356c4a229b2ce31973 +Author: Tomas Are Haavet <tomasare@gmail.com> +Date: Sat Sep 20 15:45:47 2008 +0200 + + Initialize pos the correct value to not have crashes + + utils/HtmlFonts.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 77bf8ec94e36fef7e120f1dc4bb1390be71cfb97 +Author: Tomas Are Haavet <tomasare@gmail.com> +Date: Sat Sep 20 14:17:06 2008 +0200 + + Fix memory leak + + utils/HtmlOutputDev.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit b22be54dc2205269974315ca748d835d0990d6da +Author: Tomas Are Haavet <tomasare@gmail.com> +Date: Sat Sep 20 14:16:26 2008 +0200 + + Fix mismatched free/delete + + utils/HtmlOutputDev.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit ac16174da1d6f19445f78e7cd7c4a18cb9524dde +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Sep 20 00:52:19 2008 +0200 + + make sure the image is setup before using it, otherwise some things + don't print correctly like PDF from bug 17645 + + poppler/PSOutputDev.cc | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit ffa4ffdf7fe83035c72addd8c4c8ee566621ba06 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 17 23:27:30 2008 +0200 + + 0.9.1 + + CMakeLists.txt | 2 +- + NEWS | 13 +++++++++++++ + configure.ac | 2 +- + msvc/config.h | 6 +++--- + qt4/src/Doxyfile | 2 +- + 5 files changed, 19 insertions(+), 6 deletions(-) + +commit f57cbe32bcde0808943b9be2456dd69fa5b6dd27 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Sep 14 22:18:38 2008 +0200 + + If when looking for an object we get objSomeNumberAfter assume it + was an int of SomeNumberAfter + + Fixes bug 17568 and i don't see how it can break existing things + because it's already on an error path + + poppler/XRef.cc | 25 +++++++++++++++++++++++++ + 1 files changed, 25 insertions(+), 0 deletions(-) + +commit 1a852064ff5a1a15bc315ddca472a0ad74292581 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Sep 13 12:11:41 2008 +0200 + + [glib-demo] Do not try to get info about remote destinations + + glib/demo/utils.c | 11 ++++++----- + 1 files changed, 6 insertions(+), 5 deletions(-) + +commit 951cffeb2cbff4e179043033b5ac7f5eb764d6dc +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Sep 12 12:05:53 2008 +0200 + + Make sure DecryptAESState::bufIdx is never bigger than 16, otherwise + we crash + + I am not sure this is the correct fix, but fixes crash on files of + bugs 13972, 16092 and 17523 and they seem to work ok + + poppler/Decrypt.cc | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 491109edbe827860e764b5fcb67456867923858d +Author: Haruyuki Kawabe <Haruyuki.Kawabe@unisys.co.jp> +Date: Wed Sep 10 23:00:32 2008 +0200 + + Generate the outline file at the same place the other files are + generated + + Fixes bug 17504 + + utils/HtmlOutputDev.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 7dfc1e4c9348d537896bda7b0f2ae591afc72866 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 10 00:03:50 2008 +0200 + + we want to distribute this file too + + qt4/src/Makefile.am | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit ddb73e8dc1ccbddf3b170e12c7153ccaf716d7cc +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 9 23:47:33 2008 +0200 + + We want to distribute cmake/modules/FindLIBOPENJPEG.cmake too + + Makefile.am | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 646ccc2bb8563d411dc25bdbab53725ae08572ba +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 9 23:22:17 2008 +0200 + + m_doc->doc->getOptContentConfig() can be null, so check for it + + qt4/src/poppler-document.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit d7f0bce67101f37f8d3e69d7d701388bcdc7200f +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 9 23:18:49 2008 +0200 + + Qt4 frontend had timezone parsing that got lost when moving to the + common function, i suck + + glib/poppler-document.cc | 6 ++++-- + poppler/DateInfo.cc | 20 ++++++++++++++------ + poppler/DateInfo.h | 2 +- + qt/poppler-document.cc | 6 ++++-- + qt4/src/poppler-document.cc | 22 +++++++++++++++++++--- + utils/pdfinfo.cc | 6 ++++-- + utils/pdftohtml.cc | 6 ++++-- + 7 files changed, 50 insertions(+), 18 deletions(-) + +commit 0af8609e6c932de2d85168cc9147854ee84b3a1b +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 9 20:55:27 2008 +0200 + + i want this packaged too + + utils/Makefile.am | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit dd0f4c1510382e17cf33d3fe163e384da1d6d289 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 9 20:48:04 2008 +0200 + + Fix includepath + + fofi/FoFiTrueType.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 16c0842c3e01608a72709af55cc5cb8b567efedf +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 9 20:36:18 2008 +0200 + + API changed, so increase soname + + glib/CMakeLists.txt | 2 +- + glib/Makefile.am | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 217c0d1f80a78713977a7bfbe680fce90f1c6b36 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 8 23:56:28 2008 +0200 + + change version to 0.9.0 + + Now only need to wait for Carlos and Iñigo's answer to a BIC change + in glib/ and we'll have 0.9.0 :-) + + CMakeLists.txt | 2 +- + configure.ac | 2 +- + msvc/config.h | 6 +++--- + qt4/src/Doxyfile | 2 +- + 4 files changed, 6 insertions(+), 6 deletions(-) + +commit e34022a8fcfb9fe211dd6b561377d855972b2087 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 8 23:36:04 2008 +0200 + + Increase soname for libpoppler, i'm almost sure we broke BC there + + CMakeLists.txt | 2 +- + poppler/Makefile.am | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit bc275049d6ef083daf71a043ccf23fd0634f5c4d +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 8 23:33:24 2008 +0200 + + soname 3.1.0 for qt4 libs, we are BC/SC but got new API + + qt4/src/CMakeLists.txt | 2 +- + qt4/src/Makefile.am | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 06743a25a73adc3fba95f7b4ad74a6dde1a54ead +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 8 23:23:06 2008 +0200 + + added news for 0.9.0 + + NEWS | 115 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 115 insertions(+), 0 deletions(-) + +commit d35ca2ce5df12d40e295873e44b1f18ea40ba897 +Author: Pino Toscano <pino@kde.org> +Date: Sun Sep 7 01:13:33 2008 +0200 + + [Qt4] apidox improvements + + qt4/src/poppler-annotation.h | 70 + +++++++++++++++++++++++++++++++++++++++-- + qt4/src/poppler-link.h | 12 +++++-- + qt4/src/poppler-qt4.h | 22 +++++++++++-- + 3 files changed, 93 insertions(+), 11 deletions(-) + +commit 796d4c002d47c85716775d173eddfb2ae8866eaf +Author: Pino Toscano <pino@kde.org> +Date: Sat Sep 6 22:48:13 2008 +0200 + + no more need for including the qt3 paths + + qt4/demos/CMakeLists.txt | 1 - + qt4/src/CMakeLists.txt | 1 - + qt4/tests/CMakeLists.txt | 1 - + 3 files changed, 0 insertions(+), 3 deletions(-) + +commit db7ee3b3ae0f42155f9245691e4bfdef98a8ed6f +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Sep 6 23:16:05 2008 +0200 + + [Qt4] Fix docu + + qt4/src/poppler-qt4.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3366059a25611f19ab592cda18c5efe0b9359771 +Author: Pino Toscano <pino@kde.org> +Date: Sat Sep 6 16:34:58 2008 +0200 + + [Qt4] add option flags for the PS converter + + - map the 'strictMargins' and 'forceRasterize' bool options as flags + - add a flag for setting the "printing" mode + + qt4/src/poppler-ps-converter.cc | 34 ++++++++++++++++++++++++++-------- + qt4/src/poppler-qt4.h | 26 ++++++++++++++++++++++++++ + 2 files changed, 52 insertions(+), 8 deletions(-) + +commit afa26d5c9ac9feb61aad30eb65dc00c9854d7f2e +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Sep 6 15:46:12 2008 +0200 + + we are printing so pass the print flag as true + + qt/poppler-document.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit f5d1eb5eaabaf3ab4bb87b8b4b901bbf30b20b29 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Sep 6 15:43:32 2008 +0200 + + We are pringint here, so pass the printing flag as true + + Fixes KDE bug 170459, you'd wonder how many times i've made the + same mistake... + + qt4/src/poppler-ps-converter.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 58e828d732f06bae9133dd518d89fa4348f1cca8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Sep 5 18:45:23 2008 +0200 + + Only like QtTest to the tests, not to the lib itself + + configure.ac | 13 +++++++++++-- + qt4/tests/Makefile.am | 22 +++++++++++----------- + 2 files changed, 22 insertions(+), 13 deletions(-) + +commit 49b3e4560f62a9a7db350d94d50e229f5e1208bf +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Sep 5 18:17:45 2008 +0200 + + Movie filename is not a string, but a File Specification + + Fixes a crash when filename is a dictionary + + poppler/Annot.cc | 8 +++++--- + 1 files changed, 5 insertions(+), 3 deletions(-) + +commit 996d2e176057e22acbc374cff7a712ce6fd92d93 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Sep 5 18:17:25 2008 +0200 + + Unify multiple File Specification parsers + + CMakeLists.txt | 2 + + poppler/FileSpec.cc | 146 + ++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/FileSpec.h | 24 ++++++++ + poppler/Link.cc | 104 +++++----------------------------- + poppler/Link.h | 4 - + poppler/Makefile.am | 2 + + poppler/PSOutputDev.cc | 35 +----------- + poppler/PSOutputDev.h | 1 - + poppler/Sound.cc | 7 ++- + 9 files changed, 197 insertions(+), 128 deletions(-) + +commit 31f3eb2d6b43f7fbf4d978730d109b08b1563989 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 3 21:49:23 2008 +0200 + + Only set the state to true if the AS value is the same as parent's V + + Fixes bug 16121 and 15535 + + poppler/Form.cc | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +commit c75abac7ba07990ef54a46fa0d429eea580a71ef +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 2 19:16:55 2008 +0200 + + Kjartan was missing and just agreed + + utils/HtmlOutputDev.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 630aa133017d15ddc7bf96c79f43c5b60fa9749a +Merge: b2bc9b3 de82255 +Author: Pino Toscano <pino@kde.org> +Date: Tue Sep 2 01:25:55 2008 +0200 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit b2bc9b3f59ef8e5fea18f0bc91b71fc9eb9a4157 +Author: Pino Toscano <pino@kde.org> +Date: Tue Sep 2 01:24:39 2008 +0200 + + [Qt4] small apidox improvements + + mostly the start of the \since marker addition, plus few other + documentation addition/improvements + + qt4/src/poppler-annotation.h | 9 ++++++ + qt4/src/poppler-form.h | 8 +++++ + qt4/src/poppler-link.h | 14 ++++++++-- + qt4/src/poppler-optcontent.h | 11 ++++++++ + qt4/src/poppler-qt4.h | 59 + ++++++++++++++++++++++++++++++++++++----- + 5 files changed, 90 insertions(+), 11 deletions(-) + +commit 6bc4881477ea15d70d420e57b5663052f2f9df76 +Author: Pino Toscano <pino@kde.org> +Date: Tue Sep 2 00:47:56 2008 +0200 + + expand the macros, extract poppler-optcontent.h + + enable the macro expansion and define POPPLER_QT4_EXPORT to be + empty, so + we don't have it in the apidox + + qt4/src/Doxyfile | 8 +++++--- + 1 files changed, 5 insertions(+), 3 deletions(-) + +commit de822554acdb1b2bc9e70c0668c43a10c0ec129a +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 1 23:50:37 2008 +0200 + + Initialize widget to null before calling initialize not after :-( + + poppler/Annot.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1a7b7199112d97e816a099cbc1a5672c83e64156 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 1 20:42:06 2008 +0200 + + Add my copyright + + poppler/Dict.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 1fef34782a003f46fceab0d3bed36212bbf32c4c +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 1 20:35:37 2008 +0200 + + Find reverse way in Dict + + This fixes Greg Stolze - Marriage Of Virtue & Viciousness.pdf + The issue with this pdf is that has a Dict with two entries with + the same key + The pdf spec says if that happens, results are undefined, but Acroread + uses the + second key while we were using the first, searching backwards we + use the second now too and the pdf works + + poppler/Dict.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit bb7996eaaad6a70404891bb2ff530160737ea3d7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 1 20:29:25 2008 +0200 + + Do not crash on documents with no pages + + qt4/tests/test-poppler-qt4.cpp | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 0c11d390e4b0e3765ae20968359c7562c9857db7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 1 20:13:33 2008 +0200 + + All poppler commiters to these files agreed to GPLv2+ + + Still missing to answer + Marco Pesenti Gritti + Catalog.cc + Outline.cc + Outline.h + + Kjartan Maraas + HtmlOutputDev.cc + + Timothy Lee + ImageOutputDev.h + ImageOutputDev.cc + + Carl Worth + CairoOutputDev.cc + + Ed Catmur + GfxFont.cc + GlobalParams.cc + TextOutputDev.cc + TextOutputDev.h + UnicodeTypeTable.cc + UnicodeTypeTable.h + + poppler/Annot.cc | 3 +++ + poppler/Annot.h | 3 +++ + poppler/Array.cc | 3 +++ + poppler/Array.h | 3 +++ + poppler/ArthurOutputDev.cc | 3 +++ + poppler/ArthurOutputDev.h | 3 +++ + poppler/CMap.cc | 3 +++ + poppler/CMap.h | 3 +++ + poppler/CairoFontEngine.cc | 3 +++ + poppler/CairoFontEngine.h | 3 +++ + poppler/CairoOutputDev.h | 3 +++ + poppler/Catalog.h | 3 +++ + poppler/CharCodeToUnicode.cc | 3 +++ + poppler/CharCodeToUnicode.h | 3 +++ + poppler/Decrypt.cc | 3 +++ + poppler/Decrypt.h | 3 +++ + poppler/Dict.cc | 3 +++ + poppler/Dict.h | 3 +++ + poppler/Error.cc | 3 +++ + poppler/Error.h | 3 +++ + poppler/Function.cc | 3 +++ + poppler/Gfx.cc | 3 +++ + poppler/Gfx.h | 3 +++ + poppler/GfxFont.h | 3 +++ + poppler/GfxState.cc | 3 +++ + poppler/GfxState.h | 3 +++ + poppler/GlobalParams.h | 3 +++ + poppler/JBIG2Stream.cc | 3 +++ + poppler/JPXStream.cc | 3 +++ + poppler/Lexer.cc | 3 +++ + poppler/Lexer.h | 3 +++ + poppler/Link.cc | 3 +++ + poppler/Link.h | 3 +++ + poppler/Object.cc | 3 +++ + poppler/Object.h | 3 +++ + poppler/OutputDev.cc | 3 +++ + poppler/OutputDev.h | 3 +++ + poppler/PDFDoc.cc | 3 +++ + poppler/PDFDoc.h | 3 +++ + poppler/PDFDocEncoding.cc | 3 +++ + poppler/PDFDocEncoding.h | 3 +++ + poppler/PSOutputDev.cc | 3 +++ + poppler/PSOutputDev.h | 3 +++ + poppler/PSTokenizer.cc | 3 +++ + poppler/PSTokenizer.h | 3 +++ + poppler/Page.cc | 3 +++ + poppler/Page.h | 3 +++ + poppler/Parser.cc | 3 +++ + poppler/Parser.h | 3 +++ + poppler/SplashOutputDev.cc | 3 +++ + poppler/SplashOutputDev.h | 3 +++ + poppler/Stream-CCITT.h | 3 +++ + poppler/Stream.cc | 3 +++ + poppler/Stream.h | 3 +++ + poppler/UTF8.h | 3 +++ + poppler/XRef.cc | 3 +++ + poppler/XRef.h | 3 +++ + utils/HtmlFonts.cc | 3 +++ + utils/HtmlLinks.cc | 3 +++ + utils/HtmlOutputDev.h | 3 +++ + utils/parseargs.c | 3 +++ + utils/parseargs.h | 3 +++ + utils/pdffonts.cc | 3 +++ + utils/pdfimages.cc | 3 +++ + utils/pdfinfo.cc | 3 +++ + utils/pdftohtml.cc | 3 +++ + utils/pdftoppm.cc | 3 +++ + utils/pdftops.cc | 3 +++ + utils/pdftotext.cc | 3 +++ + 69 files changed, 207 insertions(+), 0 deletions(-) + +commit 8670bfed7900586725b30e3af67f6849acc6efda +Author: Vasile Gaburici <gaburici@cs.umd.edu> +Date: Sat Aug 30 12:47:13 2008 +0200 + + Fix extraction of images + + See bug 16999 for more info + + utils/ImageOutputDev.cc | 12 +++++++++++- + 1 files changed, 11 insertions(+), 1 deletions(-) + +commit 1c98f197664b1a2c06e2caf32116a8487f4054bf +Author: Vasile Gaburici <gaburici@cs.umd.edu> +Date: Sat Aug 30 12:44:02 2008 +0200 + + Read sMap reverse so CMap entries take precedence + + See bug 17321 for a more in depth explanation + + poppler/CharCodeToUnicode.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 8f1deb3f8000bdeb845a6c786a654bc7eb684f0a +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Aug 29 23:06:19 2008 +0200 + + Are we a lib or aren't we? Unify String to Date parsing so we all + behave the same way + + CMakeLists.txt | 2 + + glib/poppler-document.cc | 29 ++-------------- + poppler/DateInfo.cc | 62 + +++++++++++++++++++++++++++++++++++ + poppler/DateInfo.h | 27 +++++++++++++++ + poppler/Makefile.am | 2 + + qt/poppler-document.cc | 22 +----------- + qt4/src/poppler-annotation-helper.h | 16 +-------- + qt4/src/poppler-document.cc | 52 +++-------------------------- + utils/pdfinfo.cc | 16 ++------- + utils/pdftohtml.cc | 9 ++--- + 10 files changed, 111 insertions(+), 126 deletions(-) + +commit c39f23dca98d3efe8d094c9a3e1bd460ba57d1ce +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Aug 29 20:50:57 2008 +0200 + + Add a readme for contributors with licensing and misc info + + README.contributors | 20 ++++++++++++++++++++ + 1 files changed, 20 insertions(+), 0 deletions(-) + +commit 35a72590ffd3284e63601af79599e5fa025e567f +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Aug 28 00:58:11 2008 +0200 + + Be more protective against huge font sizes in bogus documents like + the one in http://bugs.freedesktop.org/show_bug.cgi?id=17326 + + 10 MB in size is a font of 3200x3200, huge enough to be discarted + + poppler/SplashOutputDev.cc | 20 +++++++++++++++++++- + 1 files changed, 19 insertions(+), 1 deletions(-) + +commit 33727cf6773b12d736ba245fdd146559ce93102d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 24 20:36:13 2008 +0200 + + fix location of the comment + + fofi/FoFiType1.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit abe29b4fdb33f449649fdea5d7af2deeb702f0bb +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 24 20:24:35 2008 +0200 + + All changes made to fofi/ files under the poppler project are by + people that accepts to license the code under GPLv2+ + + fofi/FoFiBase.cc | 3 +++ + fofi/FoFiTrueType.cc | 3 +++ + fofi/FoFiTrueType.h | 3 +++ + fofi/FoFiType1.cc | 3 +++ + fofi/FoFiType1C.h | 3 +++ + 5 files changed, 15 insertions(+), 0 deletions(-) + +commit 6346d7050a03935c71336c65d5f8f0fe2860d321 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 24 20:23:50 2008 +0200 + + All changes made to goo/ files under the poppler project are by + people that accepts to license the code under GPLv2+ + + goo/GooString.cc | 3 +++ + goo/GooString.h | 3 +++ + goo/gfile.cc | 3 +++ + goo/gfile.h | 3 +++ + goo/gmem.cc | 3 +++ + goo/gmem.h | 3 +++ + 6 files changed, 18 insertions(+), 0 deletions(-) + +commit d6e1f1fb4e83527d3ece51d98fa20262713b7da1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 24 20:22:06 2008 +0200 + + .cc -> .h + + poppler/FontInfo.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 9f0ac70f7ad806cadce379d4fabb90eff697ad52 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 24 19:25:27 2008 +0200 + + Add missing addresses + + poppler/ABWOutputDev.cc | 4 ++-- + poppler/ABWOutputDev.h | 2 +- + poppler/FlateStream.cc | 2 +- + poppler/FlateStream.h | 2 +- + 4 files changed, 5 insertions(+), 5 deletions(-) + +commit 22f6af73961686895f207fe13022a21333455862 +Merge: 12a9e42 6d6913a +Author: Pino Toscano <pino@kde.org> +Date: Sun Aug 24 19:03:24 2008 +0200 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit 12a9e427fb487165b1797f81d52d733c27bfa2e1 +Author: Pino Toscano <pino@kde.org> +Date: Sun Aug 24 18:57:52 2008 +0200 + + [Qt4] add showControl and playMode properties of MovieObject's + + qt4/src/poppler-movie.cc | 14 ++++++++++++++ + qt4/src/poppler-qt4.h | 20 ++++++++++++++++++++ + 2 files changed, 34 insertions(+), 0 deletions(-) + +commit c444c652859b6e52160e5571e84f8eb1292d65f1 +Author: Pino Toscano <pino@kde.org> +Date: Sun Aug 24 18:47:58 2008 +0200 + + [Qt4] make the MovieObject ctor private, with only Page able to use it + + qt4/src/poppler-qt4.h | 9 +++++---- + 1 files changed, 5 insertions(+), 4 deletions(-) + +commit 6d6913a79779769ce0fe2f0b516a90a50e51b947 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 24 18:45:45 2008 +0200 + + fix Jeff's entry + + poppler/DCTStream.cc | 2 +- + poppler/DCTStream.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 25bd5967f9f550a32e20eea91cd00cbeff98249e +Author: Pino Toscano <pino@kde.org> +Date: Sun Aug 24 18:45:25 2008 +0200 + + [Qt4] initialize the MovieObject from an AnnotMovie + + the annotation has all the data we need, so just init from that + + qt4/src/poppler-movie.cc | 8 ++++---- + qt4/src/poppler-page.cc | 4 +--- + qt4/src/poppler-qt4.h | 4 ++-- + 3 files changed, 7 insertions(+), 9 deletions(-) + +commit 47f54ad4de111f62a5b8c25520ef6b2bca6026d2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 24 18:18:13 2008 +0200 + + Add more correct copyright statements on fofi, goo, poppler and + util directories to be more compliant with GPL that requires such + modification statements to be present. Meanwhile i did that, i did + qt and qt4 dirs too, glib is missing if someone wants to fix it, + but it's not crucial as it's not a fork of some other GPL software + + AUTHORS | 4 +++- + fofi/FoFiBase.cc | 11 +++++++++++ + fofi/FoFiTrueType.cc | 14 ++++++++++++++ + fofi/FoFiTrueType.h | 12 ++++++++++++ + fofi/FoFiType1.cc | 12 ++++++++++++ + fofi/FoFiType1C.h | 11 +++++++++++ + goo/GooString.cc | 13 +++++++++++++ + goo/GooString.h | 12 ++++++++++++ + goo/GooTimer.cc | 3 +++ + goo/GooTimer.h | 8 ++++++-- + goo/GooVector.h | 12 ++++++++++++ + goo/gfile.cc | 13 +++++++++++++ + goo/gfile.h | 11 +++++++++++ + goo/gmem.cc | 13 +++++++++++++ + goo/gmem.h | 13 +++++++++++++ + poppler/ABWOutputDev.cc | 3 ++- + poppler/ABWOutputDev.h | 2 +- + poppler/Annot.cc | 19 +++++++++++++++++++ + poppler/Annot.h | 17 +++++++++++++++++ + poppler/Array.cc | 11 +++++++++++ + poppler/Array.h | 11 +++++++++++ + poppler/ArthurOutputDev.cc | 14 +++++++++++++- + poppler/ArthurOutputDev.h | 13 ++++++++++++- + poppler/CMap.cc | 12 ++++++++++++ + poppler/CMap.h | 11 +++++++++++ + poppler/CairoFontEngine.cc | 17 +++++++++++++++++ + poppler/CairoFontEngine.h | 17 +++++++++++++++++ + poppler/CairoOutputDev.cc | 19 +++++++++++++++++++ + poppler/CairoOutputDev.h | 16 ++++++++++++++++ + poppler/Catalog.cc | 19 +++++++++++++++++++ + poppler/Catalog.h | 16 ++++++++++++++++ + poppler/CharCodeToUnicode.cc | 14 ++++++++++++++ + poppler/CharCodeToUnicode.h | 13 +++++++++++++ + poppler/DCTStream.cc | 5 ++++- + poppler/DCTStream.h | 6 +++++- + poppler/Decrypt.cc | 12 ++++++++++++ + poppler/Decrypt.h | 11 +++++++++++ + poppler/Dict.cc | 13 +++++++++++++ + poppler/Dict.h | 13 +++++++++++++ + poppler/Error.cc | 13 +++++++++++++ + poppler/Error.h | 13 +++++++++++++ + poppler/FlateStream.cc | 2 ++ + poppler/FlateStream.h | 2 ++ + poppler/FontInfo.cc | 22 ++++++++++++++++++++++ + poppler/FontInfo.h | 21 +++++++++++++++++++++ + poppler/Form.cc | 10 +++++++++- + poppler/Form.h | 6 +++++- + poppler/Function.cc | 12 ++++++++++++ + poppler/Gfx.cc | 23 +++++++++++++++++++++++ + poppler/Gfx.h | 13 +++++++++++++ + poppler/GfxFont.cc | 19 +++++++++++++++++++ + poppler/GfxFont.h | 16 ++++++++++++++++ + poppler/GfxState.cc | 14 ++++++++++++++ + poppler/GfxState.h | 13 +++++++++++++ + poppler/GlobalParams.cc | 19 +++++++++++++++++++ + poppler/GlobalParams.h | 15 +++++++++++++++ + poppler/JBIG2Stream.cc | 13 +++++++++++++ + poppler/JPXStream.cc | 11 +++++++++++ + poppler/Lexer.cc | 12 ++++++++++++ + poppler/Lexer.h | 12 ++++++++++++ + poppler/Link.cc | 14 ++++++++++++++ + poppler/Link.h | 12 ++++++++++++ + poppler/Movie.cc | 17 ++++++++++++++++- + poppler/Object.cc | 11 +++++++++++ + poppler/Object.h | 12 ++++++++++++ + poppler/OptionalContent.cc | 5 ++++- + poppler/Outline.cc | 11 +++++++++++ + poppler/Outline.h | 11 +++++++++++ + poppler/OutputDev.cc | 13 +++++++++++++ + poppler/OutputDev.h | 14 ++++++++++++++ + poppler/PDFDoc.cc | 15 +++++++++++++++ + poppler/PDFDoc.h | 15 +++++++++++++++ + poppler/PDFDocEncoding.cc | 13 ++++++++++++- + poppler/PDFDocEncoding.h | 11 +++++++++++ + poppler/PSOutputDev.cc | 15 +++++++++++++++ + poppler/PSOutputDev.h | 14 ++++++++++++++ + poppler/PSTokenizer.cc | 12 ++++++++++++ + poppler/PSTokenizer.h | 11 +++++++++++ + poppler/Page.cc | 20 ++++++++++++++++++++ + poppler/Page.h | 16 ++++++++++++++++ + poppler/PageLabelInfo.cc | 12 ++++++++++++ + poppler/PageLabelInfo.h | 12 ++++++++++++ + poppler/PageTransition.h | 18 ++++++++++++++++++ + poppler/Parser.cc | 12 ++++++++++++ + poppler/Parser.h | 11 +++++++++++ + poppler/SplashOutputDev.cc | 16 ++++++++++++++++ + poppler/SplashOutputDev.h | 11 +++++++++++ + poppler/Stream-CCITT.h | 11 +++++++++++ + poppler/Stream.cc | 14 ++++++++++++++ + poppler/Stream.h | 13 +++++++++++++ + poppler/TextOutputDev.cc | 18 ++++++++++++++++++ + poppler/TextOutputDev.h | 15 +++++++++++++++ + poppler/UTF8.h | 11 +++++++++++ + poppler/UnicodeTypeTable.cc | 13 +++++++++++++ + poppler/UnicodeTypeTable.h | 11 +++++++++++ + poppler/XRef.cc | 17 ++++++++++++++++- + poppler/XRef.h | 14 ++++++++++++++ + qt/poppler-document.cc | 3 +++ + qt/poppler-fontinfo.cc | 3 +-- + qt/poppler-page.cc | 7 ++++++- + qt/poppler-private.h | 4 ++++ + qt/poppler-qt.h | 5 ++++- + qt4/src/poppler-annotation-helper.h | 1 + + qt4/src/poppler-annotation.cc | 3 ++- + qt4/src/poppler-annotation.h | 4 +++- + qt4/src/poppler-document.cc | 4 +++- + qt4/src/poppler-embeddedfile.cc | 1 + + qt4/src/poppler-fontinfo.cc | 5 ++++- + qt4/src/poppler-form.cc | 2 +- + qt4/src/poppler-form.h | 2 +- + qt4/src/poppler-link-extractor-private.h | 2 +- + qt4/src/poppler-link-extractor.cc | 2 +- + qt4/src/poppler-link.cc | 3 ++- + qt4/src/poppler-link.h | 1 + + qt4/src/poppler-optcontent-private.h | 1 + + qt4/src/poppler-optcontent.cc | 1 + + qt4/src/poppler-optcontent.h | 1 + + qt4/src/poppler-page-private.h | 2 ++ + qt4/src/poppler-page.cc | 4 ++++ + qt4/src/poppler-private.h | 4 +++- + qt4/src/poppler-ps-converter.cc | 1 + + qt4/src/poppler-qt4.h | 5 ++++- + qt4/src/poppler-textbox.cc | 2 ++ + splash/Splash.cc | 12 ++++++++++++ + splash/Splash.h | 12 ++++++++++++ + splash/SplashBitmap.cc | 12 ++++++++++++ + splash/SplashBitmap.h | 11 +++++++++++ + splash/SplashErrorCodes.h | 11 +++++++++++ + splash/SplashFTFont.cc | 12 ++++++++++++ + splash/SplashFTFont.h | 11 +++++++++++ + splash/SplashFTFontEngine.cc | 11 +++++++++++ + splash/SplashFTFontEngine.h | 11 +++++++++++ + splash/SplashFTFontFile.cc | 11 +++++++++++ + splash/SplashFTFontFile.h | 11 +++++++++++ + splash/SplashFont.cc | 11 +++++++++++ + splash/SplashFont.h | 11 +++++++++++ + splash/SplashFontEngine.cc | 11 +++++++++++ + splash/SplashFontEngine.h | 11 +++++++++++ + splash/SplashFontFile.cc | 12 ++++++++++++ + splash/SplashFontFile.h | 12 ++++++++++++ + splash/SplashT1Font.cc | 11 +++++++++++ + splash/SplashT1Font.h | 11 +++++++++++ + splash/SplashT1FontEngine.cc | 11 +++++++++++ + splash/SplashT1FontFile.cc | 11 +++++++++++ + splash/SplashT1FontFile.h | 11 +++++++++++ + splash/SplashTypes.h | 11 +++++++++++ + splash/SplashXPathScanner.cc | 11 +++++++++++ + utils/HtmlFonts.cc | 24 ++++++++++++++++++++++++ + utils/HtmlFonts.h | 12 ++++++++++++ + utils/HtmlLinks.cc | 23 +++++++++++++++++++++++ + utils/HtmlLinks.h | 12 ++++++++++++ + utils/HtmlOutputDev.cc | 13 +++++++++++++ + utils/HtmlOutputDev.h | 11 +++++++++++ + utils/ImageOutputDev.cc | 13 +++++++++++++ + utils/ImageOutputDev.h | 12 ++++++++++++ + utils/parseargs.c | 13 +++++++++++++ + utils/parseargs.h | 11 +++++++++++ + utils/pdffonts.cc | 12 ++++++++++++ + utils/pdfimages.cc | 11 +++++++++++ + utils/pdfinfo.cc | 12 ++++++++++++ + utils/pdftoabw.cc | 26 + +++++++++++++++++++------- + utils/pdftohtml.cc | 11 +++++++++++ + utils/pdftoppm.cc | 11 +++++++++++ + utils/pdftops.cc | 12 ++++++++++++ + utils/pdftotext.cc | 12 ++++++++++++ + 165 files changed, 1795 insertions(+), 37 deletions(-) + +commit 0dfbb8996ee91aa044eb2bdf2859ef64005116f8 +Author: Loïc Minier <lool@dooz.org> +Date: Wed Aug 20 22:10:07 2008 +0200 + + Fixes escaping of hyphens in man pages + + utils/pdfinfo.1 | 2 +- + utils/pdftops.1 | 16 ++++++++-------- + 2 files changed, 9 insertions(+), 9 deletions(-) + +commit 6cfa0e598a81460e5d0a7d60d8584366d2a70165 +Author: Loïc Minier <lool@dooz.org> +Date: Wed Aug 20 19:57:42 2008 +0200 + + Fix synopsis of pdftops in man page to clarify that a PDF file is + required in all cases + + utils/pdftops.1 | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 48a73cc709a8bed9d2d0f9cbd2a9d2b6c0dad05b +Author: Pino Toscano <pino@kde.org> +Date: Sat Aug 23 19:26:01 2008 +0200 + + [Qt4] convert the title of movie annotations + + qt4/src/poppler-page.cc | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 419ec15ac825f2e0052b411462f00ac57fed030e +Author: Pino Toscano <pino@kde.org> +Date: Sat Aug 23 19:25:04 2008 +0200 + + [Qt4] get/set the title for movie annotations + + qt4/src/poppler-annotation.cc | 13 +++++++++++++ + qt4/src/poppler-annotation.h | 3 +++ + 2 files changed, 16 insertions(+), 0 deletions(-) + +commit 63bcaf113fcb5a4a9e5c120df2c3dafb2977c90a +Author: Pino Toscano <pino@kde.org> +Date: Sat Aug 23 01:58:30 2008 +0200 + + [Qt4] convert the movie annotation from the core type to the Qt4 one + + qt4/src/poppler-page.cc | 18 +++++++++++++++--- + 1 files changed, 15 insertions(+), 3 deletions(-) + +commit 5cc490de74af12726bdeb9b5a6a0f0d1d79383b5 +Author: Pino Toscano <pino@kde.org> +Date: Sat Aug 23 01:55:41 2008 +0200 + + [Qt4] first version of a MovieAnnotation + + right mow it just holds the movie object + + qt4/src/poppler-annotation.cc | 74 + +++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-annotation.h | 26 ++++++++++++++- + 2 files changed, 99 insertions(+), 1 deletions(-) + +commit 3d5c2e22d790d7c139e1cd28aebb21cfe76b8b6b +Author: Pino Toscano <pino@kde.org> +Date: Sat Aug 23 01:54:30 2008 +0200 + + compile the new poppler-movie.cc + + qt4/src/CMakeLists.txt | 1 + + qt4/src/Makefile.am | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit 599698a9b133999f1f0bb0548489111e9d7b6f05 +Author: Pino Toscano <pino@kde.org> +Date: Sat Aug 23 01:52:58 2008 +0200 + + [Qt4] first version of a MovieObject object for movies + + slightly differs from the version in core + + qt4/src/poppler-movie.cc | 73 + ++++++++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-qt4.h | 34 +++++++++++++++++++++ + 2 files changed, 107 insertions(+), 0 deletions(-) + +commit 820f15009845870701e1f4e7f4fc4fb93312ab3e +Author: Pino Toscano <pino@kde.org> +Date: Sat Aug 23 01:45:07 2008 +0200 + + fix Movie::copy() + + the default copy ctor already does the vertbatim copies, so no need to + do them on our own; what needs to be done is checking whether + an object + is valid before either doing a "smart copy" or "postprocessing" it + + poppler/Movie.cc | 14 ++++++++------ + 1 files changed, 8 insertions(+), 6 deletions(-) + +commit c3a006ae35250e9a5638c2ce713b7470380751c7 +Author: Pino Toscano <pino@kde.org> +Date: Sat Aug 23 01:04:34 2008 +0200 + + compile attachments.c in the demo with cmake as well + + glib/demo/CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit b5a7987a50b3d28fbfa219e2cef85b9e53aaf079 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Aug 21 20:40:18 2008 +0200 + + [glib-demo] Fix attachments demo with documents that don't contain + attachments + + glib/demo/attachments.c | 27 ++++++++++++++++++++------- + 1 files changed, 20 insertions(+), 7 deletions(-) + +commit a2b0aefedbdb20ce0ef8398a700202021fcf00db +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Aug 21 20:14:50 2008 +0200 + + [glib-demo] Fix typo + + glib/demo/attachments.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 9e563d6d877624b1caf82ac30c5ae30a1eb48f21 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Aug 21 20:12:33 2008 +0200 + + [glib-demo] Add checksum validation to attachments demo + + glib/demo/attachments.c | 101 + +++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 101 insertions(+), 0 deletions(-) + +commit e233325e6f13d8b232bf68a2812fe755e7fccd4d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Aug 21 19:03:32 2008 +0200 + + [glib-demo] Add demo for attachments + + glib/demo/Makefile.am | 2 + + glib/demo/attachments.c | 242 + +++++++++++++++++++++++++++++++++++++++++++++++ + glib/demo/attachments.h | 31 ++++++ + glib/demo/main.c | 4 +- + glib/demo/utils.c | 23 +++++ + glib/demo/utils.h | 1 + + 6 files changed, 302 insertions(+), 1 deletions(-) + +commit 0e2efa0fce5bf059ce85d3e3bec2293b405ec3c9 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Aug 21 19:02:24 2008 +0200 + + [glib] Make sure name and descripction are valid utf8 strings + + glib/poppler-attachment.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 15a73704ab6b009ca5e07c08f0b12d970adc387d +Author: Chris Wilson <chris@chris-wilson.co.uk> +Date: Tue Aug 19 09:18:03 2008 +0100 + + Memleak and invalid free. + + CairoOutputDev::setSoftMask() fails to free the cairo_t and mask + it uses + to draw the opaque soft mask and attempts to destroy a reference to a + surface it does not own (this bug was masked by the fact that + a reference + was still being held by the unfreed cairo_t). + + poppler/CairoOutputDev.cc | 11 ++++++++--- + 1 files changed, 8 insertions(+), 3 deletions(-) + +commit d3110e392097db54e9ee59300213e490dee39126 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Aug 19 19:19:09 2008 +0200 + + Fix include so it can be used in the unsupported way of installing + internal poppler/ headers + + Notified by Caolan McNamara <caolanm@redhat.com> + + poppler/PreScanOutputDev.h | 2 +- + poppler/SecurityHandler.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 303249e5548bfbf6823e97850e498970d802b4a0 +Author: Albert Astals Cid <tsdgeos@samsung.localdomain> +Date: Fri Aug 15 01:52:52 2008 +0200 + + Revert 123a87aff2e35b10efe6a1d715585b427e4a9afa it creates problems + with some pdf files + + poppler/Gfx.cc | 14 ++------------ + poppler/Gfx.h | 3 --- + 2 files changed, 2 insertions(+), 15 deletions(-) + +commit 27ddf3c5e839358c8553d41743faa8ee304767bf +Author: Pino Toscano <pino@kde.org> +Date: Wed Aug 13 13:55:57 2008 +0200 + + [Qt4] make sure to use the correct page width/height for form + widgets coordinates + + qt4/src/poppler-form.cc | 12 +++++++++--- + 1 files changed, 9 insertions(+), 3 deletions(-) + +commit 2e7b0eb4af8cf5938833e5659d01b77096e7b7f7 +Author: Pino Toscano <pino@kde.org> +Date: Tue Aug 12 13:49:52 2008 +0200 + + [Qt4] add a method to get the activation action of a FormField + + qt4/src/poppler-form.cc | 19 +++++++++++++++++++ + qt4/src/poppler-form.h | 8 ++++++++ + 2 files changed, 27 insertions(+), 0 deletions(-) + +commit f9e679adbd6830da26eb9909bcb16e3bdf0da6b4 +Author: Pino Toscano <pino@kde.org> +Date: Tue Aug 12 13:47:15 2008 +0200 + + create a static version of PageData::convertLinkActionToLink() + + qt4/src/poppler-page-private.h | 2 ++ + qt4/src/poppler-page.cc | 5 +++++ + 2 files changed, 7 insertions(+), 0 deletions(-) + +commit a6ecc864ea3e94d7232cff6a2e8f49919d8f24ff +Author: Albert Astals Cid <tsdgeos@samsung.localdomain> +Date: Tue Aug 12 01:23:21 2008 +0200 + + initialize widget, fixes crash on EC2006.pdf + + poppler/Annot.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 123a87aff2e35b10efe6a1d715585b427e4a9afa +Author: Albert Astals Cid <tsdgeos@samsung.localdomain> +Date: Tue Aug 12 00:37:09 2008 +0200 + + Cache the last created GfxResource, very useful because some pdf + created by pstopdf push and pop the same GfxResource all the time + + This brings us a speedup of 16 times (from 11 seconds to about 600 + msec) in kde bug 168663 + + poppler/Gfx.cc | 14 ++++++++++++-- + poppler/Gfx.h | 3 +++ + 2 files changed, 15 insertions(+), 2 deletions(-) + +commit 5ad1a12183f4b8e328f32386a74b5616e7e59070 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 4 20:34:42 2008 +0200 + + Be less strict when parsing TTF tables + + With this change and freetype from CVS i can render Bug 16940 using + the splash renderer + + fofi/FoFiTrueType.cc | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +commit d322720428fa416b7d5f23acc72d1d4b4f74d041 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 4 20:16:50 2008 +0200 + + Report an error when FoFiTrueType::load or FoFiTrueType::make fail + + poppler/SplashOutputDev.cc | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 901ebc84ff7c0872c3f9f5e6eaf418ba6400fa10 +Author: Pino Toscano <pino@kde.org> +Date: Sun Aug 3 10:54:09 2008 +0200 + + [Qt4] Make the paper color setting working as it should. + + A BGR colorspace means that colors should be set as blue,green,red, + and + not red,green,blue. + + qt4/src/poppler-private.h | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit 66b34c78943be598778a3ef438b0cefac668c6a2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Aug 2 13:54:34 2008 +0200 + + This should not be here, breaks jpeg rendering when not using libjpeg + + That was included erroneously when the file writing code was added + + poppler/Stream.cc | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit fd8d71ea8b12393201ece9c09372fd69c7573025 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Aug 1 23:47:51 2008 +0200 + + These defines are unneeded too + + msvc/poppler/poppler-config.h | 30 ------------------------------ + poppler-config.h.cmake | 30 ------------------------------ + poppler/poppler-config.h.in | 30 ------------------------------ + 3 files changed, 0 insertions(+), 90 deletions(-) + +commit 391b5d5cdd9f63fe90229f88cdad628fb63c0206 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Aug 1 23:36:09 2008 +0200 + + Get rid of more defines, say our version on command line tools, + also say our copyright + + Did not modify PSOutputDev.cc output as PS is too fragile + + msvc/poppler/poppler-config.h | 9 +-------- + poppler-config.h.cmake | 9 +-------- + poppler/PSOutputDev.cc | 2 +- + poppler/poppler-config.h.in | 9 +-------- + utils/pdffonts.cc | 3 ++- + utils/pdfimages.cc | 3 ++- + utils/pdfinfo.cc | 3 ++- + utils/pdftohtml.cc | 3 ++- + utils/pdftoppm.cc | 3 ++- + utils/pdftops.cc | 3 ++- + utils/pdftotext.cc | 3 ++- + 11 files changed, 18 insertions(+), 32 deletions(-) + +commit d14fb1513be045363f7edec21cee04fd4937ede2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Aug 1 23:14:28 2008 +0200 + + Add GooList *getEncodingNames(); + + Forgot to commit this earlier :-( + + poppler/GlobalParams.cc | 19 +++++++++++++++++++ + poppler/GlobalParams.h | 2 ++ + 2 files changed, 21 insertions(+), 0 deletions(-) + +commit 9fd34443d765ccd61864d18bceadc049d905b957 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Aug 1 23:09:39 2008 +0200 + + remove defines we don't use at all + + msvc/poppler/poppler-config.h | 4 ---- + poppler-config.h.cmake | 4 ---- + poppler/poppler-config.h.in | 4 ---- + 3 files changed, 0 insertions(+), 12 deletions(-) + +commit 0f13013dc3079915572b6b002dac8d01d2dbde04 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Aug 1 23:06:50 2008 +0200 + + xpdfrc has been dead for a while + + msvc/poppler/poppler-config.h | 25 ------------------------- + poppler-config.h.cmake | 25 ------------------------- + poppler/poppler-config.h.in | 25 ------------------------- + 3 files changed, 0 insertions(+), 75 deletions(-) + +commit 96392667d1331d2f8750f27c116e34bbf9282dca +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Aug 1 22:20:55 2008 +0200 + + Provide a default constructor for FontInfo so you can use it as + metatype for qvariant + + qt4/src/poppler-fontinfo.cc | 5 +++++ + qt4/src/poppler-private.h | 7 +++++++ + qt4/src/poppler-qt4.h | 5 +++++ + 3 files changed, 17 insertions(+), 0 deletions(-) + +commit 9fd1077e63d97a316380b8df4821bf4c9434fb52 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Aug 1 17:47:51 2008 +0200 + + Build with cmake too + + utils/CMakeLists.txt | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit d8d6a3f46620d45c279b7ca1a4a2fa3a36285cde +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Aug 1 17:44:07 2008 +0200 + + Improve manpages and add -listenc to pdfinfo and pdftotext in the way + + Our manpages listed things like xpdfrc and -cfg options we don't + support at all. + Also some options were missing from the man pages + Finally there was the -enc option you completely had to guess which + string to pass, + so i've added the -listenc option to get the user the list of + encodings he can use + + utils/Makefile.am | 2 ++ + utils/pdffonts.1 | 18 ------------------ + utils/pdfimages.1 | 14 -------------- + utils/pdfinfo.1 | 28 ++++------------------------ + utils/pdfinfo.cc | 16 ++++++++++++++-- + utils/pdftoppm.1 | 42 +++++++++++++++++++++--------------------- + utils/pdftops.1 | 41 +++-------------------------------------- + utils/pdftotext.1 | 32 ++++---------------------------- + utils/pdftotext.cc | 16 ++++++++++++++-- + utils/printencodings.cc | 34 ++++++++++++++++++++++++++++++++++ + utils/printencodings.h | 24 ++++++++++++++++++++++++ + 11 files changed, 120 insertions(+), 147 deletions(-) + +commit f5b0ca794b0879e3d239bf1d6138b15ead27d9ca +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Tue Jul 29 20:18:33 2008 +0930 + + Fix ActualText string length check in TextOutputDev.cc + + poppler/TextOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 21bbdc9d663995336900f1ce97cf294f04464e01 +Author: Boris Toloknov <tlknv@yandex.ru> +Date: Mon Jul 28 21:02:07 2008 +0200 + + make xml output valid xml + + utils/HtmlLinks.cc | 33 +++++++++++++++++- + utils/HtmlOutputDev.cc | 85 + ++++++++++++++++++++++++++++++----------------- + 2 files changed, 85 insertions(+), 33 deletions(-) + +commit dccfc4c2910b47a77cd7b6019d9365f1684ffd0c +Author: Boris Toloknov <tlknv@yandex.ru> +Date: Mon Jul 28 20:58:13 2008 +0200 + + Limit ascent and descent are to reasonable values. + + See bug 16592 to cases where this helps + + utils/HtmlOutputDev.cc | 14 ++++++++++++-- + 1 files changed, 12 insertions(+), 2 deletions(-) + +commit 0fd5a3db1ddad447d44b64eff9abfb077a7853a0 +Author: Boris Toloknov <tlknv@yandex.ru> +Date: Mon Jul 28 20:52:19 2008 +0200 + + Make html output to keep all the spaces with   + + utils/HtmlFonts.cc | 2 ++ + utils/HtmlOutputDev.cc | 2 +- + 2 files changed, 3 insertions(+), 1 deletions(-) + +commit 650c73fa0f570f699d907e33060fb23290940b42 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jul 28 20:44:13 2008 +0200 + + findDest crashes on null goostrings so rework the ifs a bit + + utils/HtmlOutputDev.cc | 16 +++++++++------- + 1 files changed, 9 insertions(+), 7 deletions(-) + +commit adee9c0e9e8b2de20309b3ae6eb8e6d6ed05cf85 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jul 26 00:04:03 2008 +0200 + + We are not storing the ctu, so decref and leak-- :-) + + poppler/Annot.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit e7b3e3ae3080bd6f239f7d96761729ad30b075ae +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 25 23:52:28 2008 +0200 + + Fix leak + + qt4/src/poppler-form.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 006b974d4faae53e6bd51a4281dd923ab1c2d4e8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 25 23:15:11 2008 +0200 + + Fix memory leak + + poppler/Annot.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 3a549d75acceedfa25dcf79074d0cdfb643c746e +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 25 23:08:21 2008 +0200 + + Free the previous modified object in case it exists + + poppler/XRef.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 040d244b97a554342061c777a286e99dbb9acabd +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 25 21:31:55 2008 +0200 + + Need this or otherwise it crashes on complete overwrite + + poppler/PDFDoc.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 11ebceeef938a7e6fa9b5437e65b5b4b822f3018 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 25 21:30:24 2008 +0200 + + Fix my last fix about saving, i think this is the correct one + + - One incremental update only write the modified entries xref, + not all + - Update gen to 0 when resizing entries + - On XRef::add correctly initialize all newly allocated entries + + poppler/PDFDoc.cc | 4 +- + poppler/XRef.cc | 57 + ++++++++++++++++++++++++++++++++++++++++++---------- + poppler/XRef.h | 2 +- + 3 files changed, 49 insertions(+), 14 deletions(-) + +commit 03d445f485f90972ab1c05d79b2999b763ab7377 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 25 20:16:54 2008 +0200 + + Fix XRef::writeToFile after my change + + poppler/XRef.cc | 10 +++------- + 1 files changed, 3 insertions(+), 7 deletions(-) + +commit 136fa97576f2df0d7a7563b34651ca222927ea57 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 25 20:12:51 2008 +0200 + + Fix XRef::add and XRef::addIndirectObject, also remove num from + XRefEntry + + Previous code was under some incorrect assumptions: + * our XRef does not maintain the free link list so if you want to + find a free entry you have to go though all of them + * our XRefEntry does not need a num because the index itself is + the num + + Conflicts: + + poppler/XRef.cc + + poppler/XRef.cc | 70 + +++++++++++++++++++----------------------------------- + poppler/XRef.h | 1 - + 2 files changed, 25 insertions(+), 46 deletions(-) + +commit 55572b77da95c47393b78f3aff804ea9c5ae17e5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jul 22 22:50:00 2008 +0200 + + Really do what the comment says and also init changeLeft, changeTop + and changeZoom + + poppler/Link.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 8dc7afaeea08183de331ecfd41ce1971e7772fd0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jul 22 21:05:03 2008 +0200 + + Some documents have loops in XObject dictionaries, make sure we + don't get in an infinite loop while traversing them + + Fixes infinite loop on http://bugs.kde.org/show_bug.cgi?id=166145 + + poppler/FontInfo.cc | 44 ++++++++++++++++++++++++++++++++++++-------- + poppler/FontInfo.h | 4 ++++ + 2 files changed, 40 insertions(+), 8 deletions(-) + +commit 9fb17c952dcff798e45280eeb9c718680147e766 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jul 20 13:47:11 2008 +0200 + + Fix condition, we want thumb to be a Stream, not to be non null + + Fixes bug 16579 + + glib/poppler-page.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3696025977fd345b12767f75a2de6ed7e9467365 +Author: Pino Toscano <pino@kde.org> +Date: Fri Jul 18 23:32:25 2008 +0200 + + initialize pageWidgets, otherwise it can be a rubbish pointer + is Annots + is not a valid object + + poppler/Page.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 0189ff8b86de18486f7397076f7a0fbf133a1a33 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jul 1 20:16:50 2008 +0200 + + Fix condition, we want fetched_thumb to be a Stream, not to be + non null + + Fixes bug 16579 + + poppler/Page.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5bd77dcdd5220d63934f4b3e78d85a936947a53d +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jul 1 00:49:01 2008 +0200 + + forgot about we use autofoo too + + qt4/tests/Makefile.am | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 5ed2503003d973b5461594af15485af49591451d +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jul 1 00:43:26 2008 +0200 + + unittesting about ActualText + + qt4/tests/CMakeLists.txt | 1 + + qt4/tests/check_actualtext.cpp | 33 +++++++++++++++++++++++++++++++++ + 2 files changed, 34 insertions(+), 0 deletions(-) + +commit f3bb2eb556f5248242f6db85052ef045fcb697c6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jul 1 00:41:35 2008 +0200 + + Unbreak ActualText extraction + + poppler/Gfx.cc | 10 +--------- + 1 files changed, 1 insertions(+), 9 deletions(-) + +commit 9e9543b105b39f8b0048c00fc94741e43ad615e9 +Author: Pino Toscano <pino@kde.org> +Date: Thu Jun 26 20:19:06 2008 +0200 + + use FindPackageHandleStandardArgs + + cmake/modules/FindLIBOPENJPEG.cmake | 11 ++--------- + 1 files changed, 2 insertions(+), 9 deletions(-) + +commit fec41ceddebe194f139bcc5b2f3fa74e7d1ae502 +Author: Pino Toscano <pino@kde.org> +Date: Thu Jun 26 20:18:27 2008 +0200 + + need to use LIBOPENJPEG_FOUND, as it really represents whether + libopenjpeg was found or not + + CMakeLists.txt | 18 +++++++++--------- + 1 files changed, 9 insertions(+), 9 deletions(-) + +commit 5498d93e59a0b79e5add3dc6181d5e98ba689217 +Author: Michael Vrable <mvrable@cs.ucsd.edu> +Date: Fri Jun 20 21:42:34 2008 -0700 + + Use a single global FT_Library in CairoOutputDev + + Cairo may internally keep references to the FreeType fonts loaded in + CairoFontEngine even after poppler is done with them. Commit + 42db4890e829 + ("Do not call FT_Done_Face on a live cairo_font_face_t") introduced + a fix + for one use-after-free bug, by delaying deleting an FT_Face objects + until + cairo is done with it. + + That fix doesn't correct all the bugs. An FT_Library object is + created for + each CairoOutputDev object, and deleted when the CairoOutputDev + goes away. + But the FT_Library object should not be deleted while fonts loaded + using it + are still in use. And cairo can keep references to fonts around + more or + less indefinitely. + + To more fully fix the problem, we can either: + 1. Keep a count of not-yet-deleted fonts associated with each + FT_Library, + and wait to call FT_Done_FreeType until it drops to zero. + 2. Never call FT_Done_FreeType. + + The second option is the simplest. To avoid leaking memory FT_Library + objects, use a single global FT_Library instead of a + per-CairoOutputDev + copy. + + poppler/CairoOutputDev.cc | 18 +++++++++++++++--- + poppler/CairoOutputDev.h | 4 +++- + 2 files changed, 18 insertions(+), 4 deletions(-) + +commit c75632d62a052d3c3739b96f5586f97c68baf25b +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 24 02:31:43 2008 +0200 + + Open in WriteOnly mode, fixes the fact that when writing to an + existing file, the contents beyond what we wrote were still there + + qt4/src/poppler-base-converter.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 9810fdfc54aac80aa99561a9d820d11b062e4637 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 24 02:12:21 2008 +0200 + + the entry is not updated here either, fix uninitialized variable use + + poppler/XRef.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 2da15db4751d3cb93d40b48e348dbc51f6e7a29f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jun 20 11:39:08 2008 +0200 + + Do not create an OCGs object if there isn't an OCProperties dictionary + in the Catalog + + poppler/Catalog.cc | 5 +++-- + poppler/Gfx.cc | 12 +++++++++++- + poppler/OptionalContent.cc | 25 +++++-------------------- + 3 files changed, 19 insertions(+), 23 deletions(-) + +commit d6fb5dcb7b7596961800d9744d17b6adb8d9a2ad +Author: Michael Vrable <mvrable@cs.ucsd.edu> +Date: Wed Jun 18 11:24:05 2008 -0700 + + Fix a crash in the cairo backend with Type 3 glyphs + + Commit 86b7e8a3bee7 ("Ensure cairo renders Type 3 glyphs with only + the fill + color") introduced a bug into the Cairo backend, causing evince + to crash + with the message + evince: cairo-pattern.c:679: cairo_pattern_destroy: Assertion + `((*&(&pattern->ref_count)->ref_count) > 0)' failed. + Fix this by updating reference counts to the fill and stroke + patterns when + modifying them in beginType3Char. + + Simplify the code as well by not saving the old stroke pattern before + overriding it; this is already done since beginType3Char/endType3Char + is + wrapped by calls to saveState/restoreState in Gfx::doShowText. + + poppler/CairoOutputDev.cc | 4 ++-- + poppler/CairoOutputDev.h | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit c3a00c83f1d24c1f88e7ed3b3f772460e578f3cc +Author: Pino Toscano <pino@kde.org> +Date: Sun Jun 15 02:39:31 2008 +0200 + + poppler-page-transition.h is here now + + qt4/src/Doxyfile | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 2affed0fc97b958ae46f531c471a3cf0b04c0f55 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jun 14 01:24:49 2008 +0200 + + Give warnings if the build configuration for stream decoders is + different from default one + + configure.ac | 20 +++++++++++++++++--- + 1 files changed, 17 insertions(+), 3 deletions(-) + +commit 8e74bc612cb4102891324ffdbfcdb47293ecb95e +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jun 14 01:13:53 2008 +0200 + + Warn the user if he does not have any enabled rendering backend + + configure.ac | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 99d2361032cbaafd69bd796170757ed6482f208d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jun 14 00:53:38 2008 +0200 + + Add a JPEG2000 decoder based on OpenJPEG + + Enabled by default since it's generally better than xpdf one + See + http://lists.freedesktop.org/archives/poppler/2008-June/003874.html + for more information + + CMakeLists.txt | 30 ++++++- + cmake/modules/FindLIBOPENJPEG.cmake | 44 +++++++++ + configure.ac | 33 +++++++ + poppler/JPEG2000Stream.cc | 181 + +++++++++++++++++++++++++++++++++++ + poppler/JPEG2000Stream.h | 48 +++++++++ + poppler/Makefile.am | 22 ++++- + poppler/Stream.cc | 7 +- + 7 files changed, 360 insertions(+), 5 deletions(-) + +commit e368838d7f9691c7b1adf7d7f62f65abed91eea7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jun 11 00:48:53 2008 +0200 + + [Qt4] Add the possibility of getting a QByteArray with the data of + an embedded font + + qt4/src/poppler-document.cc | 23 +++++++++++++++++++++++ + qt4/src/poppler-private.h | 3 +++ + qt4/src/poppler-qt4.h | 5 +++++ + 3 files changed, 31 insertions(+), 0 deletions(-) + +commit 184292ffb8fef5aa5a72bdbfcc0c95b663f452bd +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 10 23:00:11 2008 +0200 + + Make the fontRef and the embRef accessible to FontInfo users + + poppler/FontInfo.cc | 2 +- + poppler/FontInfo.h | 3 +++ + 2 files changed, 4 insertions(+), 1 deletions(-) + +commit 86b7e8a3bee74c5b89c451137cf9c2758ba6913f +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sun Jun 8 18:00:05 2008 +0930 + + Ensure cairo renders Type 3 glyphs with only the fill color + + poppler/CairoOutputDev.cc | 3 +++ + poppler/CairoOutputDev.h | 2 +- + 2 files changed, 4 insertions(+), 1 deletions(-) + +commit 99e2d95728f41c91ab59a01c62d82b19a7a2e083 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sun Jun 1 00:49:32 2008 +0930 + + glib: save/restore cairo state when rendering a page + + glib/poppler-page.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 6f40ee4af6b59f9d2c326adc8d2574e45f4d4d29 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 8 23:46:04 2008 +0200 + + Make sure we use Qt4 moc to generate moc files of the qt4 frontend + + configure.ac | 20 ++++++++++++++++++++ + qt4/demos/Makefile.am | 2 +- + qt4/src/Makefile.am | 2 +- + qt4/tests/Makefile.am | 2 +- + 4 files changed, 23 insertions(+), 3 deletions(-) + +commit 86aa8fc0708f7da4a907a8bdb1845e53d29892b7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jun 5 19:21:08 2008 +0200 + + Fix leak on ABWOutputDev.cc + + poppler/ABWOutputDev.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 979ef1cafa968d776a2b804ce555b11212212397 +Author: Koji Otani <sho@bbr.jp> +Date: Tue Jun 3 21:07:15 2008 +0200 + + Support for surrogates outside the BMP plane + + poppler/TextOutputDev.cc | 19 ++++++++++++++++++- + poppler/UTF8.h | 14 ++++++++++++++ + 2 files changed, 32 insertions(+), 1 deletions(-) + +commit 1614ab3036cf25c9b94967163996678d386ce0ac +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 1 16:32:55 2008 +0200 + + Do not limit CharCodeToUnicodeString to 8 characters + + poppler/Annot.cc | 10 ++++---- + poppler/CharCodeToUnicode.cc | 37 ++++++++++++++++++++--------------- + poppler/CharCodeToUnicode.h | 2 +- + poppler/Gfx.cc | 8 +++--- + poppler/GfxFont.cc | 43 + +++++++++++++++++++++++------------------ + poppler/GfxFont.h | 6 ++-- + poppler/PSOutputDev.cc | 4 +- + 7 files changed, 60 insertions(+), 50 deletions(-) + +commit bf95c6970dacaa62512de858cf60ff6cf0c1bf7c +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 1 00:07:11 2008 +0200 + + [Qt] Fix leak when calling Poppler::Document::scanForFonts + + qt/poppler-document.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit d21d7271fc74ab78cd157549138d0027cf179471 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat May 31 23:57:31 2008 +0200 + + Make sure file exists before printing it + + utils/HtmlOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0480a788c0f25af1bc09360b599debb37f831e10 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue May 27 23:20:32 2008 +0200 + + require gthread-2.0 + + cmake/modules/FindGTK.cmake | 9 +++++---- + 1 files changed, 5 insertions(+), 4 deletions(-) + +commit 2e40ef652eb9fca7fe947acb2adfecc96ad3c50e +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 26 22:13:38 2008 +0200 + + Do not shadow a paramer with a local variable name + + qt4/src/poppler-page.cc | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit 1fd856aa1fb48869111e5b86f263bfd94fa7af17 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 26 20:52:53 2008 +0200 + + Do not leak tSplash if transpGroupStack->blendingColorSpace is NULL + + poppler/SplashOutputDev.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 492209ec8648342a3a5447611f3f1ce63b63e8e9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 26 20:51:06 2008 +0200 + + Move variables only used inside the loop inside the loop, fix delete + of uninitialized data due to my previous patch + + poppler/Page.cc | 16 ++++++---------- + 1 files changed, 6 insertions(+), 10 deletions(-) + +commit 79ab8cceb318f3bb5ebad431824e3ae593aea340 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 26 20:38:59 2008 +0200 + + Do not leak memory if data_out is NULL + + poppler/Page.cc | 35 ++++++++++++++++++----------------- + 1 files changed, 18 insertions(+), 17 deletions(-) + +commit f44c33344d4af31ee008826179bcd92db445f35a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun May 25 19:16:12 2008 +0200 + + [glib] Init glib threads in demo app as required by g_timer + + configure.ac | 4 ++-- + glib/demo/main.c | 4 ++++ + 2 files changed, 6 insertions(+), 2 deletions(-) + +commit 58d5b7b9ab9ac245481299c4765f3bd305580d2e +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed May 21 22:18:29 2008 +0200 + + [Qt4] Fix text() method + + I'm not sure this is the real and correct fix, but it works more + than previous code so it's and improvement + + qt4/src/poppler-page.cc | 6 +----- + 1 files changed, 1 insertions(+), 5 deletions(-) + +commit e3e4113c73128f49f99289b592446d4382b5d65c +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 12 15:39:43 2008 +0200 + + Add getters to some TextBlock members. + + Needed by some reader using poppler internals, bad you! + + poppler/TextOutputDev.h | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit ff699e64bd1de78915aad4ddb79d6f529aef2b87 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun May 11 23:44:50 2008 +0200 + + Check the OC we found exists before using it + + Fixes crash http://bugs.freedesktop.org/show_bug.cgi?id=15899 + + poppler/OptionalContent.cc | 33 ++++++++++++++++++--------------- + 1 files changed, 18 insertions(+), 15 deletions(-) + +commit ac26ba5148b99a03a56e37ba201ad420b8619943 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri May 9 20:17:37 2008 +0200 + + Do not crash on unlock with wrong password + + qt/poppler-private.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 19ec5a531cb03a7bee1cfcc9c7d5c4390fbd069d +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu May 8 23:15:58 2008 +0200 + + Fix build with --enable-fixedpoint + + splash/Splash.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 1cf5f0fda542efef575a123622637d81b9c42053 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed May 7 18:49:28 2008 +0200 + + [Qt] Fix Document::unlock + + qt/poppler-document.cc | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit b5041924eb023cc095f2445935ff713cf65dacce +Author: Pino Toscano <pino@kde.org> +Date: Wed May 7 16:44:03 2008 +0200 + + do not delete the GooString owned by an Object + + poppler/Annot.cc | 4 ---- + 1 files changed, 0 insertions(+), 4 deletions(-) + +commit 546a7b700862db00240de9fd50bdba1dd347765b +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun May 4 15:26:26 2008 +0200 + + Fix leaks on error conditions + + poppler/Annot.cc | 6 ++++++ + poppler/ArthurOutputDev.cc | 1 + + poppler/JBIG2Stream.cc | 1 + + 3 files changed, 8 insertions(+), 0 deletions(-) + +commit 914f1b1d814ab3d958aa0ca21ad73ef5aed20b89 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat May 3 18:21:28 2008 +0200 + + A widget annot does not always belong to a form, so check before + accessing the widget member + + poppler/Annot.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit c907e41ab18dda10cd3c9789bd0e7fe71b6402a8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Apr 30 00:42:34 2008 +0200 + + findSegment can return NULL check for it + + poppler/JBIG2Stream.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 8b7f29b577bca3295e99fea4a5cf4a6bb7ba2617 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Apr 30 00:26:28 2008 +0200 + + new[] implies delete[] + + poppler/ABWOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 926c13825d5f7364286975db8ffa507b92f4b3ab +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 29 23:44:51 2008 +0200 + + add lost return when adding kees patch + + poppler/Object.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ba9283f6bc78e97006e52ef5de20c958ee9e1a37 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 29 23:42:00 2008 +0200 + + make the function static + + utils/pdftoppm.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 931a8272f556ba8a35342f0c5bf53bdb57ea7a31 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 29 23:41:31 2008 +0200 + + make the variable static + + utils/pdftoabw.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1887d2910d2006c7fc3ecc95db0150f1537e9d0a +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 29 23:35:17 2008 +0200 + + constify some static arrays + + poppler/CompactFontTables.h | 2 +- + poppler/Decrypt.cc | 8 ++++---- + poppler/Function.cc | 2 +- + poppler/GfxFont.cc | 6 +++--- + poppler/GfxState.cc | 4 ++-- + poppler/JBIG2Stream.cc | 10 +++++----- + poppler/JPXStream.cc | 4 ++-- + poppler/Lexer.cc | 2 +- + poppler/PSOutputDev.cc | 6 +++--- + poppler/PSTokenizer.cc | 2 +- + poppler/SplashOutputDev.cc | 2 +- + poppler/Stream-CCITT.h | 12 ++++++------ + poppler/Stream.cc | 10 +++++----- + poppler/UnicodeTypeTable.cc | 2 +- + 14 files changed, 36 insertions(+), 36 deletions(-) + +commit 51140e2d9490696d716f77d3225da0bfdfc212b4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 29 23:14:59 2008 +0200 + + more static markers + + poppler/Annot.cc | 2 +- + poppler/DCTStream.cc | 2 +- + poppler/Object.cc | 2 +- + poppler/SplashOutputDev.cc | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +commit 893703cb9eee879f728db329f7ee1fc19e7f980e +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 29 23:03:51 2008 +0200 + + add static + + poppler/XRef.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 7333bc913111e56ee241b7ef2bf6e9fea68b7da2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 29 23:01:13 2008 +0200 + + add static + + poppler/JBIG2Stream.cc | 30 +++++++++++++++--------------- + 1 files changed, 15 insertions(+), 15 deletions(-) + +commit 1ea36507f9c9f163b6772268046e7560d0c00dbc +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 29 22:47:19 2008 +0200 + + make findModifier static + + poppler/GlobalParams.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit be9961571dbfabb982e6f69abd3bbc98fa971864 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 29 21:48:09 2008 +0200 + + make variables not used outside static + + utils/pdftohtml.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit b157064a85350da6ea9c4f46e965e45ebc59d227 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 29 21:43:23 2008 +0200 + + constify setPSPaperSize + + utils/pdftops.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ee57ead8a6f34fa8de044399e5912395e0f3a425 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 29 21:37:57 2008 +0200 + + constify argDesc arrays + + Gives me binaries 2KB smaller (in total) in release build + + utils/parseargs.c | 18 +++++++++--------- + utils/parseargs.h | 4 ++-- + utils/pdffonts.cc | 2 +- + utils/pdfimages.cc | 2 +- + utils/pdfinfo.cc | 2 +- + utils/pdftoabw.cc | 2 +- + utils/pdftohtml.cc | 2 +- + utils/pdftoppm.cc | 2 +- + utils/pdftops.cc | 2 +- + utils/pdftotext.cc | 2 +- + 10 files changed, 19 insertions(+), 19 deletions(-) + +commit 9f93d9eb464877e0d23dcf205295da9162f03253 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 29 20:45:01 2008 +0200 + + make psOpNames static + + Makes my release build 64 bytes smaller + + poppler/Function.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 29e3e779c68371b7c4aadcf68ee0712046f39c6d +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 26 23:47:01 2008 +0200 + + remember to call the base implementation here + + qt4/demos/optcontent.cpp | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit a188f3cd36775d78ace5b5d62c8ab7c059b3b2b1 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 26 23:42:09 2008 +0200 + + reset the current page to 0, when closing a document + + qt4/demos/viewer.cpp | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 7eca6da6436ffc1c41cfed1a07be4dafa1172463 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 26 23:41:45 2008 +0200 + + no need to manually disconnect from the model, as it will be deleted + by the document anyway + + qt4/demos/optcontent.cpp | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 6cddda7f3c3b8ddb95e6aba1b234a27c4454c23d +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 26 22:41:59 2008 +0200 + + sync updateFont() with SplashOutputDev + + poppler/ArthurOutputDev.cc | 75 + ++++++++++++++++++++++++++++++++++--------- + 1 files changed, 59 insertions(+), 16 deletions(-) + +commit ddc7c1f8c24762bae615e7dec92e92a58c827478 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 26 18:12:51 2008 +0200 + + construct AnnotPolygon for Polygon and PolyLine annotations + + poppler/Annot.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit f9c7e8037b7165b6271ce7aea0d315053c4d66a5 +Merge: 59d33d8 f5fec4f +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 26 18:09:59 2008 +0200 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit 59d33d8e99673f73ccf2ad9a62bd25fca51f0eb8 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 26 17:56:42 2008 +0200 + + use the base implementation to update all the states + + poppler/ArthurOutputDev.cc | 11 +---------- + 1 files changed, 1 insertions(+), 10 deletions(-) + +commit 45d2a9529bf241554c59437118cb8c705554dc27 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 26 17:55:39 2008 +0200 + + Set the font antialiasing from the painter settings, instead of the + global settings. + + poppler/ArthurOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5faa72fd70e0d85268e807a8b870d80dda9189a9 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 26 17:53:28 2008 +0200 + + Get the font and painter matrices, and reenable the font drawing. + + poppler/ArthurOutputDev.cc | 28 +++++++++++++++++++++------- + 1 files changed, 21 insertions(+), 7 deletions(-) + +commit f5fec4fdedd8d316b19968545e447e2036a1bb47 +Author: Kees Cook <kees@outflux.net> +Date: Wed Apr 23 19:53:03 2008 +0200 + + provide type-checking for union pointer accesses + + poppler/Object.h | 68 + ++++++++++++++++++++++++++++++++++------------------- + 1 files changed, 43 insertions(+), 25 deletions(-) + +commit a567c921ce538616f4ba0b7933086ef5a8ab0f55 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Tue Apr 22 23:09:10 2008 +0200 + + Little change to avoid AnnotWidget crashing when they aren't related + to FormWidgets. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 19 ++++++++++--------- + 1 files changed, 10 insertions(+), 9 deletions(-) + +commit 73798c95b8a4c0504e9246e6f73fd31f812ad6fa +Author: Albert Astals Cid <tsdgeos@bluebox.(none)> +Date: Mon Apr 21 19:56:52 2008 +0200 + + Link to pthread when needed + + Should fix bug 15625 + + configure.ac | 2 + + m4/acx_pthread.m4 | 280 + +++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Makefile.am | 4 + + 3 files changed, 286 insertions(+), 0 deletions(-) + +commit 6c248bdad77235a45402d9693a0b822cc208b6b9 +Author: Pino Toscano <pino@kde.org> +Date: Sun Apr 20 18:32:59 2008 +0200 + + the dtor should be virtual + + qt4/src/poppler-converter-private.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 68dba1a452ca70add5b05ab8e2adab838bc2cb73 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Apr 20 16:21:10 2008 +0200 + + if ncand is a Guint cand should be one too + + poppler/CMap.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0b91eb19f5a3d07b625ee5188f1fcb4b4b1544ea +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Apr 20 16:17:50 2008 +0200 + + Unused var-- + + poppler/GfxFont.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1ed3cc40987b691319fd9f1a30296d80de5732fd +Author: Pino Toscano <pino@kde.org> +Date: Wed Apr 16 15:45:45 2008 +0200 + + fix border style conversion + + qt4/src/poppler-page.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 7c8feb4e3627bde2052a7e536d2d49d1cbbce8ee +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 15 21:57:31 2008 +0200 + + Hack to "support" 16 bits images + + Everywhere we assume a component fits in 8 bits, with this hack + we treat 16 bit images as 8 bit ones until it's fixed correctly. + Fixes http://bugs.kde.org/show_bug.cgi?id=158165 + + poppler/GfxState.cc | 6 ++++++ + poppler/Stream.cc | 9 +++++++++ + 2 files changed, 15 insertions(+), 0 deletions(-) + +commit f338a9ded5d42dd65853c5c7bbe27f6724096416 +Author: Pino Toscano <pino@kde.org> +Date: Sun Apr 13 21:41:51 2008 +0200 + + [Qt4] convert the sound annotations + + qt4/src/poppler-page.cc | 16 ++++++++++++++-- + 1 files changed, 14 insertions(+), 2 deletions(-) + +commit 733d51fca04ee682fed2242f868edd545f3755fa +Author: Pino Toscano <pino@kde.org> +Date: Sun Apr 13 21:38:25 2008 +0200 + + [Qt4] First version of a SoundAnnotation. + + qt4/src/poppler-annotation.cc | 87 + +++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-annotation.h | 30 ++++++++++++++- + 2 files changed, 116 insertions(+), 1 deletions(-) + +commit feb1ea091111bd7292879c465590acfd7671c876 +Author: Pino Toscano <pino@kde.org> +Date: Sun Apr 13 21:36:26 2008 +0200 + + First version of AnnotSound. + + poppler/Annot.cc | 37 ++++++++++++++++++++++++++++++++++++- + poppler/Annot.h | 26 ++++++++++++++++++++++++++ + 2 files changed, 62 insertions(+), 1 deletions(-) + +commit ec2cf81edf1b2c6707de4d30316ff5f5e24534d4 +Author: Pino Toscano <pino@kde.org> +Date: Sun Apr 13 18:31:21 2008 +0200 + + [Qt4] convert the file attachment annotations + + qt4/src/poppler-page.cc | 15 +++++++++++++-- + 1 files changed, 13 insertions(+), 2 deletions(-) + +commit 9fa2e96c96d365ae67859545ebd635d726784fca +Author: Pino Toscano <pino@kde.org> +Date: Sun Apr 13 18:29:00 2008 +0200 + + [Qt4] Initial version of FileAttachmentAnnotation + + qt4/src/poppler-annotation.cc | 88 + +++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-annotation.h | 29 +++++++++++++- + 2 files changed, 116 insertions(+), 1 deletions(-) + +commit 5899aff11f94e707654574e830e0757b1df558d4 +Author: Pino Toscano <pino@kde.org> +Date: Sun Apr 13 10:50:39 2008 +0200 + + [Qt4] Read the annotations from the core, instead of own parsing. + + Almost all the data are converted correctly, the results seem to be + the same. + Added TODOs in the few parts (not essential) I was not able to figure + out how to convert, yet. + Covert also the Caret annotations. + + qt4/src/poppler-annotation-helper.h | 2 +- + qt4/src/poppler-page.cc | 851 + ++++++++++++++++------------------- + 2 files changed, 393 insertions(+), 460 deletions(-) + +commit 40a12793c5ccea206d79e0c17e2f2d0cf74bb4f3 +Author: Pino Toscano <pino@kde.org> +Date: Sun Apr 13 02:21:55 2008 +0200 + + add getters for the AnnotPolygon properties + + poppler/Annot.h | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 9311f75d4c3da991efb8afd00701a0ce1cbae1b0 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sun Apr 13 01:52:36 2008 +0200 + + Almost full AnnotPolygon support. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 99 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Annot.h | 37 ++++++++++++++++++++ + 2 files changed, 136 insertions(+), 0 deletions(-) + +commit 01aa052ed761a4ada471d196985825986bb58627 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sun Apr 13 01:13:49 2008 +0200 + + Extend AnnotPath behaviour to include cooordinate array parsing. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 96 + +++++++++++++++++++++++++++++------------------------ + poppler/Annot.h | 4 ++- + 2 files changed, 55 insertions(+), 45 deletions(-) + +commit ca52830e9519ae7b778f98e5c2547daef7da5f09 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sun Apr 13 00:54:13 2008 +0200 + + Added OptionalContent support to Annots. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 9 +++------ + poppler/Annot.h | 5 +++-- + 2 files changed, 6 insertions(+), 8 deletions(-) + +commit 4b87196b7829c87d15af4e8b4138ca97548fb519 +Author: Pino Toscano <pino@kde.org> +Date: Sun Apr 13 00:18:24 2008 +0200 + + Isolate the embedded file reading logic into a new EmbFile + constructor. + + This way, it can be shared and reused in various places (Catalog, + AnnotFileAttachment, etc). + + poppler/Catalog.cc | 205 + ++++++++++++++++++++++++++++------------------------ + poppler/Catalog.h | 1 + + 2 files changed, 112 insertions(+), 94 deletions(-) + +commit 45b407e51905948690065749085a4af1cbb29a8e +Author: Pino Toscano <pino@kde.org> +Date: Sun Apr 13 00:14:38 2008 +0200 + + correctly get the FileSpec dictionary + + poppler/Annot.cc | 4 +++- + poppler/Annot.h | 2 +- + 2 files changed, 4 insertions(+), 2 deletions(-) + +commit c3aa3a97d9c553ea7976741d798901352fb5381c +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 12 22:45:57 2008 +0200 + + properly initialize an AnnotPath + + poppler/Annot.cc | 9 ++------- + 1 files changed, 2 insertions(+), 7 deletions(-) + +commit a3406fb2ace1390db1c181823a7bfc66c9174d98 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 12 22:40:42 2008 +0200 + + properly dispose the memory of the ink lists + + poppler/Annot.cc | 13 ++++++++++++- + poppler/Annot.h | 1 + + 2 files changed, 13 insertions(+), 1 deletions(-) + +commit 0dad70e2d12e8b587cab8ce2d914c81c6897a1d1 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 12 22:15:35 2008 +0200 + + make AnnotInk working. + + - get the point indexes in the correct way + - dispose with free what you allocate with malloc + - fix logic when checking for an even number of points + + poppler/Annot.cc | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit 77404e24ea1e175fc9b55097dc5b35cc34760659 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 12 21:08:54 2008 +0200 + + a length is an int + + poppler/Annot.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit bc2b2ffd2144f951c311e968fba4bc50b7c43ff3 +Merge: cd5afe6 bacc1dd +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sat Apr 12 17:40:49 2008 +0200 + + Fixed merging conflict. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + +commit cd5afe6d9eca687ee224ff7680a8cba28d81a36d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 12 00:44:08 2008 +0200 + + Do not take into account Colorspace resource subdictionary for + image XObjects + + Fixes bug 15125 + The motivation under that change is on section 4.5.2 of the spec: + Certain objects, such as image XObjects, specify a + color space as an explicit parameter, often associated with the + key ColorSpace. + In this case, the color space array or name is always defined + directly as a PDF + object, not by an entry in the ColorSpace resource + subdictionary. This conven- + tion also applies when color spaces are defined in terms of other + color spaces. + + poppler/Gfx.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit bacc1dd9f37ff19c5e54878a5b08e7d734584bbf +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 12 17:20:09 2008 +0200 + + Read the "in reply to" reference as such, without reading the + associated annotation dictionary. + + poppler/Annot.cc | 10 ++++------ + poppler/Annot.h | 4 ++-- + 2 files changed, 6 insertions(+), 8 deletions(-) + +commit ffe09454a0948a6107bcc38f23ba2068151c547d +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sat Apr 12 17:17:59 2008 +0200 + + Initial Annot3D parsing a few general improvements. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 130 + ++++++++++++++++++++++++++++++++++++++++++++++++++--- + poppler/Annot.h | 84 +++++++++++++++++++++++++++++----- + 2 files changed, 193 insertions(+), 21 deletions(-) + +commit 8757c577241dda31bc59c7d1c208c159ad428877 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sat Apr 12 10:38:07 2008 +0200 + + AnnotFileAttachment support. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 38 ++++++++++++++++++++++++++++++++++++-- + poppler/Annot.h | 25 +++++++++++++++++++++++++ + 2 files changed, 61 insertions(+), 2 deletions(-) + +commit 36989658149fc9e5e8a049ce070a102f35b7bddc +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sat Apr 12 09:55:26 2008 +0200 + + AnnotInk support. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 113 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Annot.h | 45 +++++++++++++++++++++ + 2 files changed, 158 insertions(+), 0 deletions(-) + +commit 464b171d0e9b989196c287f2ee4dfbbc14212aa9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 12 00:44:08 2008 +0200 + + Do not take into account Colorspace resource subdictionary for + image XObjects + + Fixes bug 15125 + The motivation under that change is on section 4.5.2 of the spec: + Certain objects, such as image XObjects, specify a + color space as an explicit parameter, often associated with the + key ColorSpace. + In this case, the color space array or name is always defined + directly as a PDF + object, not by an entry in the ColorSpace resource + subdictionary. This conven- + tion also applies when color spaces are defined in terms of other + color spaces. + + poppler/Gfx.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 42db4890e8295aaec5a1be12d1414fc0a9048550 +Author: Chris Wilson <chris@chris-wilson.co.uk> +Date: Thu Mar 27 10:52:22 2008 +0000 + + Do not call FT_Done_Face on a live cairo_font_face_t. + + Currently CairoFont calls FT_Done_Face on its deletion, but the + FT_Face + is usually still in use within cairo. This causes a failure later when + cairo tries to create a glyph from its cairo_font_face_t. + + From http://bugs.freedesktop.org/show_bug.cgi?id=15216: + ==13745== Invalid read of size 4 + ==13745== at 0x51BE572: FT_Load_Glyph (ftobjs.c:549) + ==13745== by 0x4A24921: _cairo_ft_scaled_glyph_init + (cairo-ft-font.c:1922) + ==13745== by 0x4A117AB: _cairo_scaled_glyph_lookup + (cairo-scaled-font.c:1674) + ==13745== by 0x4A12A5A: _cairo_scaled_font_glyph_device_extents + (cairo-scaled-font.c:1124) + ==13745== by 0x4A21ECD: _cairo_analysis_surface_show_glyphs + (cairo-analysis-surface.c:516) + ==13745== by 0x4A144DC: _cairo_surface_show_glyphs + (cairo-surface.c:2086) + ==13745== by 0x4A1FCC8: _cairo_meta_surface_replay_internal + (cairo-meta-surface.c:816) + ==13745== by 0x4A214B1: _paint_page (cairo-paginated-surface.c:299) + ==13745== by 0x4A2171E: _cairo_paginated_surface_show_page + (cairo-paginated-surface.c:445) + ==13745== by 0x4A14BDF: cairo_surface_show_page + (cairo-surface.c:1702) + ==13745== by 0x49FF661: cairo_show_page (cairo.c:2155) + ==13745== by 0xA267D97: + pdf_document_file_exporter_end_page(_EvFileExporter*) + (ev-poppler.cc:1753) + ==13745== Address 0x55c5630 is 88 bytes inside a block of size + 552 free'd + ==13745== at 0x402269C: free (vg_replace_malloc.c:326) + ==13745== by 0x51B7ABC: ft_free (ftsystem.c:158) + ==13745== by 0x51BB319: ft_mem_free (ftutil.c:171) + ==13745== by 0x51BC318: destroy_face (ftobjs.c:856) + ==13745== by 0x51BC3B2: FT_Done_Face (ftobjs.c:1972) + ==13745== by 0x4363704: CairoFont::~CairoFont() + (CairoFontEngine.cc:251) + ==13745== by 0x436401D: CairoFontEngine::getFont(GfxFont*, XRef*) + (CairoFontEngine.cc:335) + ==13745== by 0x4366915: CairoOutputDev::updateFont(GfxState*) + (CairoOutputDev.cc:318) + ==13745== by 0x5093BF1: Gfx::opShowText(Object*, int) (Gfx.cc:3073) + ==13745== by 0x508F901: Gfx::execOp(Object*, Object*, int) + (Gfx.cc:726) + ==13745== by 0x50906FF: Gfx::go(int) (Gfx.cc:594) + ==13745== by 0x5090C96: Gfx::display(Object*, int) (Gfx.cc:557) + + The solution is to release the reference to the cairo_font_face_t upon + destruction of the CairoFont, and then to release the FT_Face from the + destroy notify of the cairo_font_face_t. + + poppler/CairoFontEngine.cc | 19 +++++++++---------- + 1 files changed, 9 insertions(+), 10 deletions(-) + +commit 5f60843824582ece36d806508ec388330ddee854 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Tue Apr 8 00:30:57 2008 +0200 + + Added AnnotCoord support. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 64 +++++++++++++++++-------------------------------- + poppler/Annot.h | 69 + +++++++++++++++++++++++++----------------------------- + 2 files changed, 54 insertions(+), 79 deletions(-) + +commit a6f70f465a3e6719d63cefbe3c27bae015be43c1 +Author: Pino Toscano <pino@kde.org> +Date: Sun Apr 6 13:12:01 2008 +0200 + + add getters for the coordinates in an AnnotLine + + poppler/Annot.h | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 1d83d6edf9a843335e37a4d1e0e0dd71eb23d93b +Author: Pino Toscano <pino@kde.org> +Date: Sun Apr 6 12:24:42 2008 +0200 + + [Qt4] the caret symbol is an enum value, now + + qt4/src/poppler-annotation.cc | 35 ++++++++++++++++++++++++++++------- + qt4/src/poppler-annotation.h | 7 +++++-- + 2 files changed, 33 insertions(+), 9 deletions(-) + +commit 229d991a3258cb9b56f5e00f2deb3c976253cf68 +Author: Pino Toscano <pino@kde.org> +Date: Sun Apr 6 12:23:04 2008 +0200 + + the caret symbol does not seem to allow additional values, so convert + it to an enum + + poppler/Annot.cc | 11 +++++++---- + poppler/Annot.h | 9 +++++++-- + 2 files changed, 14 insertions(+), 6 deletions(-) + +commit fc24500ddd9182f97d23c46eaafc6be79a6721eb +Author: Pino Toscano <pino@kde.org> +Date: Sun Apr 6 11:43:49 2008 +0200 + + propetly initialise a couple of members; leak less + + poppler/ArthurOutputDev.cc | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 9409de1e7c5b3770c7ef00c01ee376953dd532a5 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sun Apr 6 01:38:25 2008 +0200 + + Changed AnnotFreeText RD field to the new parseDiffRectangle. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 35 ++--------------------------------- + 1 files changed, 2 insertions(+), 33 deletions(-) + +commit 28c5ee2e9fc2a24d2f2efb3d74d5cf882a106239 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 5 23:19:33 2008 +0200 + + typo fix + + poppler/Annot.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ed02769688466ca72bf35d4223c3822a1245604b +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 5 19:36:21 2008 +0200 + + read the destination of a link annotation + + poppler/Annot.cc | 5 ++++- + poppler/Annot.h | 4 ++-- + 2 files changed, 6 insertions(+), 3 deletions(-) + +commit ca31bf12a9d70bac88e457f7799e9935aba58640 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 5 16:48:53 2008 +0200 + + variable forgotten in the copy&paste... + + qt4/src/poppler-annotation.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 4168daa141b76e5fcd07d046aca8dac2f3037ff9 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 5 16:34:12 2008 +0200 + + [Qt4] deserialize also CaretAnnotation's + + qt4/src/poppler-annotation.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit b55bcc2aa95825863bef23ab96364b350a49949d +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 5 16:31:31 2008 +0200 + + [Qt4] first version of a CaretAnnotation. + + qt4/src/poppler-annotation.cc | 80 + +++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-annotation.h | 25 ++++++++++++- + 2 files changed, 104 insertions(+), 1 deletions(-) + +commit 4c9a02b7e49666efe10fdc16e7a03d8d520b65ec +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 5 16:01:58 2008 +0200 + + First version of AnnotCaret. + + poppler/Annot.cc | 36 +++++++++++++++++++++++++++++++++++- + poppler/Annot.h | 22 ++++++++++++++++++++++ + 2 files changed, 57 insertions(+), 1 deletions(-) + +commit d260fe9e514c667b66969b982119429cc922eb07 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 5 15:54:29 2008 +0200 + + isolate the code for parsing a "difference rectangle" in an own + function + + poppler/Annot.cc | 54 + +++++++++++++++++++++++++++++++----------------------- + 1 files changed, 31 insertions(+), 23 deletions(-) + +commit 760833e409c122c0a61f7c87fd3133eebc10b402 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 5 15:36:43 2008 +0200 + + First version of AnnotGeometry. + + poppler/Annot.cc | 77 + ++++++++++++++++++++++++++++++++++++++++++++++++++++- + poppler/Annot.h | 24 +++++++++++++++++ + 2 files changed, 99 insertions(+), 2 deletions(-) + +commit 95d9d2362534c0524ad0448818b2d69b0909d482 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 5 03:23:00 2008 +0200 + + finally, load the QuadPoints correctly + + when checking the validity of the coordinate, do the comparison just + with the proper one (either X or Y); + free the "point" object after each iteration + + poppler/Annot.cc | 11 ++++++++--- + 1 files changed, 8 insertions(+), 3 deletions(-) + +commit af1ffcbcec1730332d11f8da4a7ddac833b22408 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 5 02:54:00 2008 +0200 + + More robust reading of QuadPoints (reset the allocated memory, + use the heap) + + poppler/Annot.cc | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +commit 68fd98d69bac20282665cf6b824da30c3b310f0b +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 5 02:51:41 2008 +0200 + + Really implement AnnotTextMarkup. + + poppler/Annot.cc | 29 +++++++++++++++++++++++++---- + poppler/Annot.h | 2 +- + 2 files changed, 26 insertions(+), 5 deletions(-) + +commit 69a2ecfaf8f8cffd3027db5c3cc88c41413e42f1 +Author: Pino Toscano <pino@kde.org> +Date: Sat Apr 5 01:38:28 2008 +0200 + + Add the Stamp annotation type. + + poppler/Annot.cc | 28 +++++++++++++++++++++++++++- + poppler/Annot.h | 20 ++++++++++++++++++++ + 2 files changed, 47 insertions(+), 1 deletions(-) + +commit 97be4332818bcf58461816be995d88926809a4e5 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Fri Apr 4 23:49:12 2008 +0200 + + Updated glib bindings. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + glib/demo/annots.c | 32 +++++--------------------------- + glib/poppler-annot.cc | 27 +++++---------------------- + glib/poppler-annot.h | 13 +------------ + 3 files changed, 11 insertions(+), 61 deletions(-) + +commit 5caac407cdaf58621ac27e5561b31a995404ccb3 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Fri Apr 4 23:36:46 2008 +0200 + + Fixed icon name in AnnotText. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 25 ++++++------------------- + poppler/Annot.h | 15 +++------------ + 2 files changed, 9 insertions(+), 31 deletions(-) + +commit 0b714a61383da1b62daf2a60e3f6fcda09b4e9f2 +Author: Adam Batkin <adam@batkin.net> +Date: Thu Apr 3 20:02:52 2008 +0200 + + FindFirstFile returns INVALID_HANDLE_VALUE and not NULL on error + + goo/gfile.cc | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +commit be765f27cc5430d9bb2a3e113eb245d67c20a376 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Mar 31 12:37:33 2008 +0200 + + [glib] Fix a crash in outline demo due to page_num == dest_page_num + - 1 + + glib/demo/utils.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e991e9ac6fcc0b6928b96fe8326eebcf3cb720ca +Author: Albert Astals Cid <tsdgeos@localhost.(none)> +Date: Sat Mar 29 13:25:52 2008 +0100 + + Add the export macro + + qt4/src/poppler-page-transition.h | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit b70ca35dce6da6efdff254c11a63de4f44228278 +Author: Albert Astals Cid <tsdgeos@localhost.(none)> +Date: Sat Mar 29 00:30:31 2008 +0100 + + Duplicate page-transition files on qt4 + + qt4/src/CMakeLists.txt | 4 +- + qt4/src/Makefile.am | 4 +- + qt4/src/poppler-page-transition-private.h | 28 ++++++ + qt4/src/poppler-page-transition.cc | 95 +++++++++++++++++++ + qt4/src/poppler-page-transition.h | 146 + +++++++++++++++++++++++++++++ + 5 files changed, 273 insertions(+), 4 deletions(-) + +commit b5312785063235cef7584ab6a5d198fb72de0988 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Wed Mar 26 23:56:49 2008 +0100 + + Improved glib annot demo. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + glib/demo/annots.c | 314 + +++++++++++++++++++++++++++++++++++++++++++++++---- + 1 files changed, 289 insertions(+), 25 deletions(-) + +commit 7cc8fd70f68d2cdab7ab83a0ecf6c8896c971d62 +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 26 21:03:34 2008 +0100 + + remove damn error + + qt4/src/poppler-page.cc.orig | 1317 + ------------------------------------------ + 1 files changed, 0 insertions(+), 1317 deletions(-) + +commit 7a47ff3b54678a3de6964d25050e02186484f39a +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 26 21:00:32 2008 +0100 + + [Qt4] Add support for JavaScript links, and create them when present. + + qt4/src/poppler-link.cc | 36 ++ + qt4/src/poppler-link.h | 32 +- + qt4/src/poppler-page.cc | 7 + + qt4/src/poppler-page.cc.orig | 1317 + ++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 1391 insertions(+), 1 deletions(-) + +commit a6f2c10ee01ee62ae945b50f6b6eae380377fe03 +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 26 20:59:21 2008 +0100 + + [Qt4] Read the document-level JavaScript scripts. + + qt4/src/poppler-document.cc | 15 +++++++++++++++ + qt4/src/poppler-qt4.h | 8 ++++++++ + 2 files changed, 23 insertions(+), 0 deletions(-) + +commit b8a471e55b998836c09c65ff736afdef8ac55189 +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 26 20:56:01 2008 +0100 + + Add support for JavaScript actions, and read them when found. + + poppler/Link.cc | 33 +++++++++++++++++++++++++++++++++ + poppler/Link.h | 23 +++++++++++++++++++++++ + 2 files changed, 56 insertions(+), 0 deletions(-) + +commit 2fd85dc1b8b2ababadfc60e285c08a844737e4bb +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 26 20:53:42 2008 +0100 + + Read the JavaScript codes in the NameTree of the Catalog. + + poppler/Catalog.cc | 39 +++++++++++++++++++++++++++++++++++++++ + poppler/Catalog.h | 7 +++++++ + 2 files changed, 46 insertions(+), 0 deletions(-) + +commit 312f14f5b7be1f0d62620477222919423c3869e0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 26 20:05:31 2008 +0100 + + compile++ + + fofi/FoFiBase.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5bd750062e1fb136f77a55d1f35b2d6fabaad1b3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 26 19:42:43 2008 +0100 + + update version + + CMakeLists.txt | 2 +- + configure.ac | 2 +- + msvc/config.h | 6 +++--- + qt4/src/Doxyfile | 2 +- + 4 files changed, 6 insertions(+), 6 deletions(-) + +commit 10d4a8b9aed51902157c04d9deea0e99d829c4f6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 26 19:42:36 2008 +0100 + + fill news + + NEWS | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +commit 2069826d61ebd527768b6455689276c0a8288085 +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 26 16:05:06 2008 +0100 + + missing break + + qt4/src/poppler-page.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit d6a0c6a6803a03f402c2dcde41c6195e951470ba +Author: Pino Toscano <pino@kde.org> +Date: Wed Mar 26 15:50:39 2008 +0100 + + initialize posterStream to avoid crashing later + + poppler/Movie.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 0be811b3ad86b1cb14be94a017e70c65b8e64730 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 25 22:59:22 2008 +0100 + + Don't end up in an infinite recursive loop in case resObj dict is + the same we are already in + + poppler/FontInfo.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0222c6ceb0fcf1d7c4422691a68a035a558ad614 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Mar 24 17:14:07 2008 +0100 + + fix build when using cmake, not sure it's completely ok, but at + least i can compile + + CMakeLists.txt | 1 + + cmake/modules/FindGTK.cmake | 23 ++++++++++++++++------- + config.h.cmake | 3 +++ + glib/CMakeLists.txt | 17 +++++++++++------ + glib/poppler-page.cc | 2 +- + glib/test-poppler-glib.cc | 2 +- + 6 files changed, 33 insertions(+), 15 deletions(-) + +commit 3e4164f2db69358adf07596195842dd00458b621 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Mar 24 15:10:31 2008 +0100 + + fix some cmake HAVE_foo + + CMakeLists.txt | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 22f615aee488cc363a078330861e80f389f47061 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sun Mar 23 13:22:07 2008 +0100 + + Fixed wrong functions. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + glib/poppler-annot.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit cccfe42ed9c53d27cf6a1403ae55bf34a053012d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 22 19:12:05 2008 +0100 + + Fix rm line not to error when no *moc file is present + + qt4/src/Makefile.am | 2 +- + qt4/tests/Makefile.am | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit e60d39ba0e8b9742106a0c9b1385b1c907729c3f +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 22 19:11:17 2008 +0100 + + Fix rm line not to error if no *moc file is present + + qt4/demos/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit d9d52e622c6b28a9941168bb73839ec335ca7232 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 22 19:10:40 2008 +0100 + + Fix configure to not require gdk when we are on try mode + + configure.ac | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit 9b8809298dd16cdbffcc12b6db8e274578934063 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 22 15:49:02 2008 +0100 + + It's really only an error if < 0 + + poppler/PDFDoc.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0fb1e697cc4100ce23298141c8b5829273872423 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 22 15:46:44 2008 +0100 + + remove unneeded variable + + poppler/PDFDoc.cc | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 3404cb626ee9b4520d6fe601e07560745a4cb42a +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 22 15:44:50 2008 +0100 + + Remove OutStream::reset since noone uses it + + This way we have a fseek less to care about if worked or not + + poppler/Stream.cc | 5 ----- + poppler/Stream.h | 5 ----- + qt4/src/poppler-qiodeviceoutstream-private.h | 1 - + qt4/src/poppler-qiodeviceoutstream.cc | 5 ----- + 4 files changed, 0 insertions(+), 16 deletions(-) + +commit 066595dd06c930997d5ec65a06c822616af9baa0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 22 15:43:07 2008 +0100 + + Check the document stream is seekable when opening it + + Fixes bug 14126 + + poppler/PDFDoc.cc | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +commit 23b6475463f8973b5ac83bb21a6b7b6000cc435b +Author: Ed Avis <eda@waniasset.com> +Date: Sat Mar 22 13:55:59 2008 +0100 + + Check for fseek return values + + fofi/FoFiBase.cc | 14 ++++++++++++-- + poppler/GfxFont.cc | 12 ++++++++++-- + 2 files changed, 22 insertions(+), 4 deletions(-) + +commit b33bb282e45cf1a083cfbb13603ac465d386c28d +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Fri Mar 21 13:53:21 2008 +0100 + + Fixed poppler glib public api. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + glib/poppler-annot.cc | 4 ++-- + glib/poppler-annot.h | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit 371932f413d570d7784c668f30834d3d92d7aa80 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Mar 20 11:44:32 2008 +0100 + + [glib] Remove unused variable. + + glib/poppler-document.cc | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 21fa476ac384256c15a954b708e009f2b336b06f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Mar 20 11:42:32 2008 +0100 + + [glib] Do not cache image_dev in poppler page. + + Thanks to Kouhei Sutou who caught the problem. + + glib/poppler-page.cc | 60 + ++++++++++++++++++++++++++------------------ + glib/poppler-private.h | 3 -- + glib/test-poppler-glib.cc | 9 ++++++- + 3 files changed, 43 insertions(+), 29 deletions(-) + +commit 22cd70d8fc308fb8b19d36d0172014ba532230fb +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 19 21:52:14 2008 +0100 + + poppler_annot_markup_get_opacity returns a double so use %f + + glib/demo/annots.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b9a5fd4671638caa91f8a389be278d993391f499 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 19 21:28:49 2008 +0100 + + updated by gtk-doc + + glib/reference/tmpl/poppler-action.sgml | 1 + + glib/reference/tmpl/poppler.sgml | 3 +++ + 2 files changed, 4 insertions(+), 0 deletions(-) + +commit b7e0b740578ea1e84ac0ef850b5a03c66b2863e3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 19 21:28:01 2008 +0100 + + Fill 0.7.3 news + + NEWS | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +commit 3adaff1dad8127fdd06653cf49196027ad414a08 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 19 21:27:46 2008 +0100 + + Bump version to 0.7.3 + + CMakeLists.txt | 2 +- + configure.ac | 2 +- + msvc/config.h | 6 +++--- + qt4/src/Doxyfile | 2 +- + 4 files changed, 6 insertions(+), 6 deletions(-) + +commit 52dd710b63911be2d8c960de0232c497c35ecac8 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Mar 19 18:35:35 2008 +0100 + + [glib] Update outline and links demos to the new POPPLER_ACTION_NONE + + glib/demo/utils.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 6a22f0a20df38156c06e8ba10649e0828a1da102 +Author: Eugen Dedu <Eugen.Dedu@pu-pm.univ-fcomte.fr> +Date: Wed Mar 19 18:32:48 2008 +0100 + + [glib] Consider no action as an action of type None instead of Unknown + + glib/poppler-action.cc | 2 +- + glib/poppler-action.h | 1 + + 2 files changed, 2 insertions(+), 1 deletions(-) + +commit 185d5818fd546f85934b041d5b0cdcdf1849b1dc +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Mar 18 20:08:21 2008 +0100 + + Improve error handling when creating a document + + glib/poppler-document.cc | 40 ++++++++++++++++++++++++++++------------ + glib/poppler.h | 5 ++++- + 2 files changed, 32 insertions(+), 13 deletions(-) + +commit 9bba2748985049515bfd9c9b44f26b92fa704078 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Mar 15 01:11:39 2008 +0100 + + Some more free + + poppler/OptionalContent.cc | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit bfc308935fa138e27c4d2ad0e1c1cad20eba8e8a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Mar 15 01:05:32 2008 +0100 + + Use error instead of printf + + poppler/OptionalContent.cc | 15 ++++++++------- + 1 files changed, 8 insertions(+), 7 deletions(-) + +commit 998b1523ee653c1585f03b4a580e0d95ba694aca +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Mar 15 01:02:31 2008 +0100 + + Some free + + poppler/OptionalContent.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit c65a66a82259f547927cbb918611bcf4a8e264b2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Mar 14 20:29:53 2008 +0100 + + xx0 is non exclusive so that should be < not <= + + Fixes several warnings about writes on bad places + + splash/SplashXPathScanner.cc | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit bd2272f3079319d1c05ca93f7fb6eb0a5370b938 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Mar 14 19:52:04 2008 +0100 + + Fix "Make sure we don't draw outside the bitmap on Splash::fillGlyph2" + when painting with no aa + + Fixes bug 15009 + + splash/Splash.cc | 12 ++++++++---- + 1 files changed, 8 insertions(+), 4 deletions(-) + +commit 5bf8d864e68854f0855e07fb67aa124e06c739cd +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 12 22:48:07 2008 +0100 + + fix build + + glib/reference/Makefile.am | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit d0be5c86dcd3310062d820b3515c31e4720af2ca +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 12 22:40:59 2008 +0100 + + Update version to 0.7.2 and fill NEWS + + CMakeLists.txt | 2 +- + NEWS | 20 ++++++++++++++++++++ + configure.ac | 2 +- + msvc/config.h | 6 +++--- + qt4/src/Doxyfile | 2 +- + 5 files changed, 26 insertions(+), 6 deletions(-) + +commit 0b2ecf39572821a99374e6acec7c1bd438911bbc +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 12 22:38:57 2008 +0100 + + update soname here too + + glib/CMakeLists.txt | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit f5065016b168e4896e2fe774cd22bbd900849b52 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Mar 12 22:06:53 2008 +0100 + + Make GDK dependency option for glib bindings + + Fixes bug #13719. + + configure.ac | 45 +++- + glib/Makefile.am | 7 +- + glib/demo/page.c | 88 ++++++- + glib/demo/render.c | 4 + + glib/poppler-action.h | 1 - + glib/poppler-annot.cc | 26 +- + glib/poppler-annot.h | 2 +- + glib/poppler-document.h | 2 - + glib/poppler-features.h.in | 1 + + glib/poppler-page.cc | 695 + ++++++++++++++++++++++++++------------------ + glib/poppler-page.h | 76 +++-- + glib/poppler.h | 2 +- + glib/test-poppler-glib.cc | 2 +- + 13 files changed, 610 insertions(+), 341 deletions(-) + +commit 46d4fab82332e71d0b68c0a8deeac78f2201ed14 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 12 20:35:33 2008 +0100 + + Increment version of libpoppler and libpoppler-qt4 + + CMakeLists.txt | 2 +- + poppler/Makefile.am | 2 +- + qt4/src/CMakeLists.txt | 2 +- + qt4/src/Makefile.am | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +commit 550c1fc73a6d2af65728751fd0b59ccc7110fa8b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 12 20:34:48 2008 +0100 + + Init to false updated field of XRefEntries plus indenting fixes + + poppler/XRef.cc | 11 ++++++----- + 1 files changed, 6 insertions(+), 5 deletions(-) + +commit 6a671686c6265ecdb4c48f04392de9c56d4e0936 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Wed Mar 12 21:43:12 2008 +1030 + + Fix regression in cairo output when transforming ctm + + The commit: + ec01926e5a9dc16e200060497c43e79a1623698d "Avoid setting a singular + ctm" + introduced a regression in the output when using a ctm. + + The check for an invertable matrix had the side effect of inverting + the matrix. Instead, make a copy of the matrix before testing if it is + invertable. + + poppler/CairoOutputDev.cc | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +commit 0b2c3bb25c908b07e760d824dbfe93c6051812aa +Merge: 362fe01 9c472f7 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Wed Mar 12 00:23:58 2008 +0100 + + Merge branch 'master' of + ssh://inigomartinez@git.freedesktop.org/git/poppler/poppler + +commit 362fe013c0d96698b52d70cf5226cddca7fe52d4 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Wed Mar 12 00:07:12 2008 +0100 + + Enabled back the AnnotWidget support. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 9c472f76d2462d0e775c851fdbac6ca2bc9812ea +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 12 00:00:20 2008 +0100 + + cmake build + + glib/demo/CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 821858f5c36786955d9475044bfee57f5060ad2f +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 11 23:58:05 2008 +0100 + + Return char bounding box instead of edge, it's much more useful for + character positioning + + qt4/src/poppler-page.cc | 8 ++++++-- + qt4/src/poppler-private.h | 3 +-- + qt4/src/poppler-qt4.h | 6 ++---- + qt4/src/poppler-textbox.cc | 4 ++-- + 4 files changed, 11 insertions(+), 10 deletions(-) + +commit d7e642732ced592362d9787bddadb7a110dcc5a5 +Merge: 3642f0c 2d6c605 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Tue Mar 11 23:41:59 2008 +0100 + + Merge branch 'master' of + ssh://inigomartinez@git.freedesktop.org/git/poppler/poppler + +commit 3642f0c48bc49cd4d698e769544c1d8604c6482f +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Tue Mar 11 23:13:33 2008 +0100 + + glib annots demo. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + glib/demo/Makefile.am | 2 + + glib/demo/annots.c | 468 + +++++++++++++++++++++++++++++++++++++++++++++++++ + glib/demo/annots.h | 31 ++++ + glib/demo/main.c | 4 +- + 4 files changed, 504 insertions(+), 1 deletions(-) + +commit 2d6c60537317bd3ac9e0582e0da09e7365729097 +Author: Pino Toscano <pino@kde.org> +Date: Tue Mar 11 22:54:44 2008 +0100 + + For now we cannot handle MovieLink's, so comment them out. + + qt4/src/poppler-annotation.cc | 2 ++ + qt4/src/poppler-link.cc | 4 ++++ + qt4/src/poppler-link.h | 2 ++ + 3 files changed, 8 insertions(+), 0 deletions(-) + +commit a354f7198c493990613a1db131c662ec27948863 +Author: Hugo Mercier <hmercier31@gmail.com> +Date: Tue Mar 11 22:49:00 2008 +0100 + + Initial Movie support (2) + + Now with the forgotten files + + poppler/Movie.cc | 443 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Movie.h | 177 ++++++++++++++++++++++ + 2 files changed, 620 insertions(+), 0 deletions(-) + +commit 43e5dd941d4bc35c4eebbad66c13235639e0c1a0 +Merge: aab1768 4fdd254 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 11 22:31:22 2008 +0100 + + Merge branch 'master' of + ssh://aacid@git.freedesktop.org/git/poppler/poppler + +commit 4fdd254370ea6055e95c8ebee51b69e06c501714 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Mar 11 22:31:00 2008 +0100 + + Fix build + + glib/poppler-page.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit aab17684dc3f21ff2b1ee6eacdc0c565d368df78 +Author: Hugo Mercier <hmercier31@gmail.com> +Date: Tue Mar 11 22:28:28 2008 +0100 + + Initial Movie support + + CMakeLists.txt | 2 + + poppler/Annot.cc | 316 + ++++++++++++++++++++++++++++++++++++++++++++++++++- + poppler/Annot.h | 125 ++++++++++++++++++++ + poppler/Link.cc | 108 +++++++++++++++--- + poppler/Link.h | 64 ++++++++++- + poppler/Makefile.am | 2 + + 6 files changed, 591 insertions(+), 26 deletions(-) + +commit 13a0d2390b9e4684af070c213f385485715353df +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 11 22:27:38 2008 +0100 + + Add poppler-annot to the cmake build system + + glib/CMakeLists.txt | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 19f0e3b40bce4d8157d8c8bd04eaf6bacbef38b8 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Tue Mar 11 22:09:04 2008 +0100 + + Add preliminary annotations support in the glib frontend + + glib/Makefile.am | 2 + + glib/poppler-annot.cc | 776 + ++++++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-annot.h | 181 +++++++++++ + glib/poppler-page.cc | 166 +++++++++++ + glib/poppler-page.h | 15 + + glib/poppler-private.h | 5 +- + glib/poppler.h | 7 + + 7 files changed, 1151 insertions(+), 1 deletions(-) + +commit 6fa3ab20fee311b4aff92be18870fd0e1730a81f +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Tue Mar 11 18:44:27 2008 +0100 + + Changed AnnotMarkup inheritance + + poppler/Annot.cc | 9 +++++---- + poppler/Annot.h | 10 +++++----- + 2 files changed, 10 insertions(+), 9 deletions(-) + +commit 3111cfe2ccb32f9680baaad0c3f0678dd5969f8b +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Mar 10 22:12:36 2008 +0100 + + And free the memory + + qt4/tests/test-poppler-qt4.cpp | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 58f88c23402ac2e678dc655f64d93d89bb1812be +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Mar 10 22:08:43 2008 +0100 + + Add the -textRects option to the test app so we can check text rects + are correct + + qt4/tests/test-poppler-qt4.cpp | 45 + +++++++++++++++++++++++++++++++++++---- + 1 files changed, 40 insertions(+), 5 deletions(-) + +commit 94ceb3cae79dc7786fa59fd889a87160780ed5df +Merge: 0f9e843 35f34bd +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Mar 9 23:34:11 2008 +0100 + + Merge branch 'master' of + ssh://aacid@git.freedesktop.org/git/poppler/poppler + +commit 0f9e84302ac2108f05bdbb10e7e57ae19ad1e9f3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Mar 9 23:33:11 2008 +0100 + + Do not force default values to fontconfig patterns as fontconfig + already fills in default values for us + + Fixes bug 14883 + + poppler/GlobalParams.cc | 17 +++++++++-------- + 1 files changed, 9 insertions(+), 8 deletions(-) + +commit 35f34bd44c74eeb76a58b30acfbb0303d7285f06 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Mar 9 17:38:54 2008 +0100 + + Fix build when compiling without cairo support + + glib/demo/images.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 32637db19dd80a9b8452f86eb677b10e77290627 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Mar 9 00:57:08 2008 +0100 + + proper lib64 Qt detection + + Fixes bug 14583 + + m4/qt.m4 | 15 ++++++++++++--- + 1 files changed, 12 insertions(+), 3 deletions(-) + +commit 65a88a95a5c54c890048e8a986df361585d601dd +Author: Pino Toscano <pino@kde.org> +Date: Sat Mar 8 03:11:36 2008 +0100 + + Provide the mime type for an embedded file, if known. + + Adapt the unit test for that. + + qt4/src/poppler-embeddedfile.cc | 5 +++++ + qt4/src/poppler-qt4.h | 5 +++++ + qt4/tests/check_attachments.cpp | 7 +++++++ + 3 files changed, 17 insertions(+), 0 deletions(-) + +commit 23da27a229c8b3cc2a0a0dd6354c40723934390c +Author: Pino Toscano <pino@kde.org> +Date: Sat Mar 8 03:10:58 2008 +0100 + + Optionally read the mimetype for the embedded files. + + poppler/Catalog.cc | 17 +++++++++-------- + poppler/Catalog.h | 7 ++++++- + 2 files changed, 15 insertions(+), 9 deletions(-) + +commit 42c254b978c61e2ccfda083dfeffec9fc35a5fe7 +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 3 16:56:09 2008 +0100 + + be safe about out-of-range values + + qt4/src/poppler-textbox.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5db75df77938eb7620867d0618058be52ed2d3cb +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 3 16:53:39 2008 +0100 + + initialize nicely + + qt4/src/poppler-private.h | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 3ad0ab7e4abd37528284269c69be3cdfb8d31d2e +Author: Pino Toscano <pino@kde.org> +Date: Mon Mar 3 16:49:23 2008 +0100 + + apidox + + qt4/src/poppler-link.h | 17 +++++++++++++++++ + qt4/src/poppler-qt4.h | 23 ++++++++++++++++++++++- + 2 files changed, 39 insertions(+), 1 deletions(-) + +commit ec01926e5a9dc16e200060497c43e79a1623698d +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Mar 2 20:15:20 2008 -0500 + + Avoid setting a singular ctm + + Ignoring singular ctm's gives a better result than having + our cairo context error and turn off. Related to #14398. + + poppler/CairoOutputDev.cc | 14 ++++++++++++++ + 1 files changed, 14 insertions(+), 0 deletions(-) + +commit 4882d7a118b93fdb5c441d70757e485be7ee25d7 +Author: Pino Toscano <pino@kde.org> +Date: Thu Feb 28 15:12:23 2008 +0100 + + printf -> qDebug + + qt4/src/poppler-optcontent.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 31ce4049bf12c2716be7ec0fb8eda502d989f66e +Author: Brad Hards <bradh@saxicola.cuneata.net> +Date: Thu Feb 28 22:09:30 2008 +1100 + + Respect PageMode for optional content and embedded files. + + This makes the PDF 1.7 spec open with the embedded files showing. + + qt4/demos/embeddedfiles.cpp | 7 +++++++ + qt4/demos/embeddedfiles.h | 1 + + qt4/demos/optcontent.cpp | 8 ++++++++ + qt4/demos/optcontent.h | 1 + + 4 files changed, 17 insertions(+), 0 deletions(-) + +commit ff938c431799d49325c0f46f1e6cbe1033993a83 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 27 23:12:53 2008 +0100 + + do not forget to distribute GlobalParamsWin.cc next time + + poppler/Makefile.am | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 277382b8186d137a9f2a62bc2d22e9f0cda7d923 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 27 22:56:33 2008 +0100 + + fix typo + + glib/demo/images.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5b2f8f21fca63508570a0c77c6f7221a322e6e57 +Merge: 7e65118 4254f12 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 22:10:12 2008 +0100 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit 7e651186f483976f9833de245b6c7add38e77a16 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 22:03:17 2008 +0100 + + Properly enable/disable the contents when their parents are changed. + + Now, the children maintain the "checked state" they had, when their + parent is unchecked; + but, they are really disabled, both in the possibility to be checked + and in the drawing of their associated content [applying the same + to their children, and so on]. + + qt4/src/poppler-optcontent-private.h | 8 ++++++- + qt4/src/poppler-optcontent.cc | 37 + +++++++++++++++++++++++++++++---- + 2 files changed, 39 insertions(+), 6 deletions(-) + +commit 4254f1237ebed09b8e1c85f935a20bde3d8f36ff +Merge: ed6c0c2 0569ae7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 27 20:44:27 2008 +0100 + + Merge branch 'master' of + ssh://aacid@git.freedesktop.org/git/poppler/poppler + +commit 8d384c06f96ba8cb3e73c275b3c708c64da4595d +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 20:39:09 2008 +0100 + + small header cleanup + + qt4/src/poppler-optcontent-private.h | 9 +++++++-- + qt4/src/poppler-optcontent.cc | 7 ++++--- + 2 files changed, 11 insertions(+), 5 deletions(-) + +commit ed6c0c260837a0025279765ef7778b83d6ee2209 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 27 20:43:45 2008 +0100 + + fix build and distcheck with autools + + qt4/demos/Makefile.am | 3 +++ + qt4/src/Makefile.am | 5 ++++- + qt4/tests/Makefile.am | 3 +++ + 3 files changed, 10 insertions(+), 1 deletions(-) + +commit 344d55539b1b6bcabec609fd828db372a07491b4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 27 20:43:13 2008 +0100 + + fill the NEWS for 0.7.1 + + NEWS | 15 +++++++++++++++ + 1 files changed, 15 insertions(+), 0 deletions(-) + +commit 1c47633ba782021978fa34d41a4ab0badf3af9d3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 27 20:42:55 2008 +0100 + + Increase version number to 0.7.1 + + CMakeLists.txt | 2 +- + configure.ac | 2 +- + msvc/config.h | 6 +++--- + qt4/src/Doxyfile | 2 +- + 4 files changed, 6 insertions(+), 6 deletions(-) + +commit 0569ae76b6af1723b4606af189242a23199f387d +Merge: f395531 d8eba8c +Author: Brad Hards <bradh@kde.org> +Date: Thu Feb 28 06:26:09 2008 +1100 + + Merge branch 'master' of + ssh://bradh@git.freedesktop.org/git/poppler/poppler + +commit d8eba8c10834116b4f0f295375805172f5216993 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 19:07:46 2008 +0100 + + export the OptContentModel + + qt4/src/poppler-optcontent.h | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit 0445e64a4124af7c1b84673f237022e133eb8542 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 19:04:03 2008 +0100 + + make only the Document able to create OptContentsModel's + + qt4/src/poppler-optcontent.h | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +commit c965437b67a4f97ee8365a217bd10406fba3767a +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 18:58:31 2008 +0100 + + setRootNode() is private (and unused) API + + qt4/src/poppler-optcontent-private.h | 2 ++ + qt4/src/poppler-optcontent.cc | 8 ++++---- + qt4/src/poppler-optcontent.h | 4 ---- + 3 files changed, 6 insertions(+), 8 deletions(-) + +commit e293bfc384e2dfc4ef04582053ce18d8c0bcb7b3 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 18:50:35 2008 +0100 + + small cleanup + + qt4/src/poppler-optcontent.cc | 11 ++++------- + 1 files changed, 4 insertions(+), 7 deletions(-) + +commit f11aa0008585e845ce509172d76f72f941be497d +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 18:44:09 2008 +0100 + + adapt the tests to the new layout of the contents model + + qt4/tests/check_optcontent.cpp | 66 + ++++++++++++++-------------------------- + 1 files changed, 23 insertions(+), 43 deletions(-) + +commit 4a324484b5c77ddc348746e7bcf6051ade28e389 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 18:04:52 2008 +0100 + + free some objects (thus leak less) + + poppler/Gfx.cc | 2 ++ + poppler/OptionalContent.cc | 2 ++ + 2 files changed, 4 insertions(+), 0 deletions(-) + +commit 0f4e7791ab6884072a1aee56e9cec212d8cea263 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 15:58:21 2008 +0100 + + ignore any generated .moc here + + qt4/src/.gitignore | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 136ae44f155b17d9e8b041b67f75531d8544337c +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 15:56:09 2008 +0100 + + keep track of the items changed when toggling an item, so we can + update them properly + + qt4/src/poppler-optcontent-private.h | 4 +- + qt4/src/poppler-optcontent.cc | 38 + ++++++++++++++++++++++++++------- + 2 files changed, 32 insertions(+), 10 deletions(-) + +commit b73e2afef7e5e1b68d82a10c94bca3c201c5f8b3 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 15:52:06 2008 +0100 + + fix indexFromItem once again, and make parent() call it with the + right node + + qt4/src/poppler-optcontent-private.h | 2 +- + qt4/src/poppler-optcontent.cc | 19 +++++++++---------- + 2 files changed, 10 insertions(+), 11 deletions(-) + +commit 803787f763578320aa5f405ed49c64e6b924bad3 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 15:30:18 2008 +0100 + + compile with the autotools + + (second patch I forgot to apply with the first) + + qt4/src/Makefile.am | 9 ++++++--- + 1 files changed, 6 insertions(+), 3 deletions(-) + +commit 0b527a8ed62677bb09df4587f072a310c2959750 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 14:34:13 2008 +0100 + + Extract the OptContentItem -> QModelIndex creation in an own function. + + qt4/src/poppler-optcontent-private.h | 1 + + qt4/src/poppler-optcontent.cc | 7 ++++++- + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit c94d6cc95c6838f31e27832cb3090389bf4d8227 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 14:30:26 2008 +0100 + + Make index(), data() and setData() more safe. + + Errors spotted using ModelTest. + + qt4/src/poppler-optcontent-private.h | 2 +- + qt4/src/poppler-optcontent.cc | 15 +++++++++------ + 2 files changed, 10 insertions(+), 7 deletions(-) + +commit b8e833733d84eaa93d6bae522710feb3075ca329 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 14:05:19 2008 +0100 + + fix build with the autotools + + qt4/src/Makefile.am | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit f89ba474bae281f1cdeddb72ac8425dee1087e35 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 13:28:50 2008 +0100 + + Put the check states of the optional contents in the same column as + the name. + + This feels a bit more elegant than changing a value in a different + column. + Cleanup data()/setData() so they can be extended easily. + + qt4/src/poppler-optcontent.cc | 74 + +++++++++++++++++++++-------------------- + 1 files changed, 38 insertions(+), 36 deletions(-) + +commit defa0ecb2790402a4069fea3b3c285a50675682d +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 12:24:16 2008 +0100 + + Add a skeleton of OptContentModel::headerData(). + + It does nothing yet, but we can add stuff later on w/o breaking BC. + + qt4/src/poppler-optcontent.cc | 5 +++++ + qt4/src/poppler-optcontent.h | 2 ++ + 2 files changed, 7 insertions(+), 0 deletions(-) + +commit f395531a3e8f71a46b3c942f8f437ade1d9fdb57 +Author: Brad Hards <bradh@kde.org> +Date: Wed Feb 27 22:22:51 2008 +1100 + + Minor cleanup. + + qt4/src/poppler-optcontent.cc | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +commit 0a19486cb4de57c0c987cc4ce2434a96bbd18338 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 12:15:44 2008 +0100 + + refresh the current page when the data of the content model change + + qt4/demos/optcontent.cpp | 8 ++++++++ + qt4/demos/optcontent.h | 3 +++ + 2 files changed, 11 insertions(+), 0 deletions(-) + +commit 09b7cc2efb7d21fa4dabd23d2d2de877cc7d86ee +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 12:15:18 2008 +0100 + + optional method to reload the current page + + qt4/demos/documentobserver.cpp | 5 +++++ + qt4/demos/documentobserver.h | 1 + + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit 39fe905be8f2ae79d9c26cd87547f3ea2608411e +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 12:00:29 2008 +0100 + + Add a dock for showing the optional content tree. + + qt4/demos/CMakeLists.txt | 1 + + qt4/demos/Makefile.am | 3 ++ + qt4/demos/optcontent.cpp | 55 + ++++++++++++++++++++++++++++++++++++++++++++++ + qt4/demos/optcontent.h | 43 ++++++++++++++++++++++++++++++++++++ + qt4/demos/viewer.cpp | 7 ++++++ + 5 files changed, 109 insertions(+), 0 deletions(-) + +commit f17dd5539501a996479b903ac9b8aceb3c4cfafe +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 11:53:32 2008 +0100 + + cleanup + + qt4/src/poppler-optcontent-private.h | 3 ++- + qt4/src/poppler-optcontent.h | 4 +--- + 2 files changed, 3 insertions(+), 4 deletions(-) + +commit f3cc894559f10dbd4277fa9f30de9931ed69dfd4 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 11:43:34 2008 +0100 + + OptContentModel::itemFromRef() and OptContentItem are private API. + + Hide them in the implementation. + + qt4/src/poppler-optcontent-private.h | 43 + ++++++++++++++++++++++++++++++++++ + qt4/src/poppler-optcontent.cc | 8 +++--- + qt4/src/poppler-optcontent.h | 42 + --------------------------------- + 3 files changed, 47 insertions(+), 46 deletions(-) + +commit 48e8b2105cf8f177ca655b969470e45e2407db82 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 11:28:16 2008 +0100 + + move all the private stuff of OptContentModel into its d-pointer + + qt4/src/poppler-optcontent-private.h | 9 +++++++-- + qt4/src/poppler-optcontent.cc | 29 +++++++++++++++-------------- + qt4/src/poppler-optcontent.h | 4 ---- + 3 files changed, 22 insertions(+), 20 deletions(-) + +commit b78a7f7a0e8d5a9c22014d34754090d863030e0d +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 27 11:06:57 2008 +0100 + + use a QPointer for the OptContentModel, so we are safe about + ownership. + + qt4/src/poppler-document.cc | 4 ++-- + qt4/src/poppler-private.h | 6 +++--- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit 48557da71adb0fe6bd4da2fb32433796a96c3576 +Author: Brad Hards <bradh@kde.org> +Date: Wed Feb 27 19:39:18 2008 +1100 + + We need to install the optional content header. + + qt4/src/CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 6e2bb03b5ef256c03a8da1cbf9bbc87c593942ad +Author: Brad Hards <bradh@kde.org> +Date: Wed Feb 27 19:23:49 2008 +1100 + + Partial d-pointer implementation. + + qt4/src/poppler-optcontent-private.h | 57 + ++++++++++++++++++++++++++++++++++ + qt4/src/poppler-optcontent.cc | 49 ++++++++++++++++++----------- + qt4/src/poppler-optcontent.h | 24 +++----------- + 3 files changed, 92 insertions(+), 38 deletions(-) + +commit c627b7aa10ae9cdceb78b751a7e826170f402af0 +Author: Brad Hards <bradh@kde.org> +Date: Wed Feb 27 16:12:38 2008 +1100 + + A couple of cleanups suggested by Pino. + + qt4/src/poppler-document.cc | 6 +++--- + qt4/src/poppler-qt4.h | 8 +++++--- + 2 files changed, 8 insertions(+), 6 deletions(-) + +commit 81891667e18fcf164af02f5f366de07f78d67c8f +Author: Brad Hards <bradh@kde.org> +Date: Wed Feb 27 15:47:03 2008 +1100 + + Add in the initial part of the optional content support. + + To see this work, compare ClarityOCGs.pdf with and + without this change. + + Right now we only handle optional content using + XObjects. Optional content using Marked Content has + infrastructure, but is not implemented. That will be + quite invasive in Gfx, and I'm not confident enough + to do it this late in the process. + + CMakeLists.txt | 1 + + poppler/Catalog.cc | 9 + + poppler/Catalog.h | 4 + + poppler/Gfx.cc | 65 +++++- + poppler/Gfx.h | 12 +- + poppler/Makefile.am | 2 + + poppler/OptionalContent.cc | 322 ++++++++++++++++++++++++++ + poppler/OptionalContent.h | 85 +++++++ + poppler/PDFDoc.h | 5 + + poppler/PSOutputDev.cc | 6 +- + poppler/Page.cc | 2 +- + qt4/src/.gitignore | 1 + + qt4/src/CMakeLists.txt | 3 + + qt4/src/Makefile.am | 6 + + qt4/src/poppler-document.cc | 13 + + qt4/src/poppler-optcontent.cc | 354 ++++++++++++++++++++++++++++ + qt4/src/poppler-optcontent.h | 122 ++++++++++ + qt4/src/poppler-private.h | 4 + + qt4/src/poppler-qt4.h | 18 ++ + qt4/tests/.gitignore | 1 + + qt4/tests/CMakeLists.txt | 1 + + qt4/tests/Makefile.am | 5 + + qt4/tests/check_optcontent.cpp | 499 + ++++++++++++++++++++++++++++++++++++++++ + 23 files changed, 1532 insertions(+), 8 deletions(-) + +commit 11b70bcda905e618c199a067db6b0246612e101d +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 26 23:01:27 2008 +0100 + + fixup the default export macro name (added by cmake); _WIN32 is + defined only on win32 (remove a plethora of warnings) + + qt4/src/poppler-export.h | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit d4d6c14cd83d04c61daa6618c3148a0bb47dc292 +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 26 22:57:02 2008 +0100 + + install the export header + + qt4/src/CMakeLists.txt | 1 + + qt4/src/Makefile.am | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit 4ba2e2d21710135656adbf93c5994cfb46502308 +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 26 22:55:30 2008 +0100 + + no need to include the export header in private headers + + qt4/src/poppler-annotation-helper.h | 1 - + qt4/src/poppler-annotation-private.h | 1 - + qt4/src/poppler-converter-private.h | 1 - + qt4/src/poppler-link-extractor-private.h | 1 - + qt4/src/poppler-page-private.h | 1 - + qt4/src/poppler-private.h | 1 - + qt4/src/poppler-qiodeviceoutstream-private.h | 1 - + 7 files changed, 0 insertions(+), 7 deletions(-) + +commit 0a466c09fb70b92f39df19bc315b6575e419ad5b +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Feb 26 22:47:31 2008 +0100 + + We also need to distribute poppler-export.h + + qt4/src/Makefile.am | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 2034d57c700049bc9a6565bbb818e1c9f4467784 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Feb 26 22:46:29 2008 +0100 + + Now for real: Add special casing in cmake buildsystem for MSVC, + also add Export markers to qt4 classes, although symbol visibility + is only used on MSVC at the moment + + CMakeLists.txt | 5 +++++ + qt4/src/CMakeLists.txt | 3 +++ + qt4/src/poppler-annotation-helper.h | 1 + + qt4/src/poppler-annotation-private.h | 1 + + qt4/src/poppler-annotation.h | 19 ++++++++++--------- + qt4/src/poppler-converter-private.h | 1 + + qt4/src/poppler-export.h | 6 +++--- + qt4/src/poppler-form.h | 9 +++++---- + qt4/src/poppler-link-extractor-private.h | 1 + + qt4/src/poppler-link.h | 17 +++++++++-------- + qt4/src/poppler-page-private.h | 1 + + qt4/src/poppler-private.h | 1 + + qt4/src/poppler-qiodeviceoutstream-private.h | 1 + + qt4/src/poppler-qt4.h | 21 +++++++++++---------- + qt4/tests/CMakeLists.txt | 6 ++++++ + 15 files changed, 59 insertions(+), 34 deletions(-) + +commit b931920f63f4276ec355118faa061bafa5ac5244 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Feb 26 22:42:16 2008 +0100 + + Add special casing in cmake buildsystem for MSVC, also add Export + markers to qt4 classes, although symbol visibility is only used on + MSVC at the moment + + qt4/src/poppler-export.h | 17 +++++++++++++++++ + 1 files changed, 17 insertions(+), 0 deletions(-) + +commit 1778fddb36d6cb2c7f7848bee06189158f69f16e +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 24 23:02:08 2008 +0100 + + Add the cmake files to EXTRA_DIST so they get added when i do make + dist to get the release tarball + + Makefile.am | 39 +++++++++++++++++++++++++++++++++++++++ + 1 files changed, 39 insertions(+), 0 deletions(-) + +commit 51f171e10a42d492c8c32a5e2578d05b73d89238 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 24 22:47:46 2008 +0100 + + ignore more + + qt4/demos/.gitignore | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit adb1ccdb9265f0583cb348c456a39efac610aff1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 24 22:46:33 2008 +0100 + + ignore + + qt4/demos/.gitignore | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 101e526c63175ffc1a75e1b68da7bb4fff9cd530 +Author: Patrick Spendrin <ps_ml@gmx.de> +Date: Sun Feb 24 20:52:41 2008 +0100 + + define snprintf to _snprintf if we are building on MSVC + + config.h.cmake | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit f7f8ab488257c3979d20e5c0690ec5d7c2cd831b +Author: Patrick Spendrin <ps_ml@gmx.de> +Date: Sun Feb 24 20:43:11 2008 +0100 + + define M_PI in case it is not defined + + poppler/Function.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit f00436b63bf9a42dcb2728a07db9c20f1f23d0bc +Author: Patrick Spendrin <ps_ml@gmx.de> +Date: Sun Feb 24 20:39:42 2008 +0100 + + Add proper dirent.h guards + + utils/pdftoabw.cc | 2 ++ + utils/pdftohtml.cc | 2 ++ + 2 files changed, 4 insertions(+), 0 deletions(-) + +commit e1463451c584181f918265438cf6ddcb408bf731 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Feb 21 20:43:56 2008 +0100 + + Code uses if USE_EXCEPTIONS, so we need to defined it to 1, not just + define it + + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 88d4bbbcf828e3247454c8ba3c2fb0fb58207b6a +Author: Michael Vrable <mvrable@cs.ucsd.edu> +Date: Thu Feb 21 19:53:03 2008 +0100 + + If a bitmap's dimensions are invalid, do not try to display it. + + poppler/Gfx.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 452ae6f5674b00b43955952961f7ca0583f73e27 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Feb 21 19:46:19 2008 +0100 + + Make sure we don't draw outside the bitmap on Splash::fillGlyph2 + + splash/Splash.cc | 76 + ++++++++++++++++++++++++++++++++++------------------- + 1 files changed, 49 insertions(+), 27 deletions(-) + +commit 7f60fa806bd6d3d28917f349a2a19b52f97f593a +Author: James Cloos <cloos@jhcloos.com> +Date: Thu Feb 21 13:00:05 2008 -0500 + + Fix typo + + Signed-off-by: James Cloos <cloos@jhcloos.com> + + qt4/demos/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 053ecae534a4522d152b0139b6aed6da2059d760 +Author: Carl Worth <cworth@cworth.org> +Date: Wed Feb 20 17:21:27 2008 -0800 + + Keep cairo and cairo_shape consistent + + The 'cairo_shape' state was not always being modified at the same + time as 'cairo'. In some cases this led to a sequence of ever + larger matrix scale factors until things just blew up. + + poppler/CairoOutputDev.cc | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit bf6dd890994150406b4464e45355a4a99870fc60 +Author: Pino Toscano <pino@kde.org> +Date: Thu Feb 21 01:23:07 2008 +0100 + + Add a dock for showing the document metadata. + + qt4/demos/CMakeLists.txt | 1 + + qt4/demos/Makefile.am | 3 ++ + qt4/demos/metadata.cpp | 50 + ++++++++++++++++++++++++++++++++++++++++++++++ + qt4/demos/metadata.h | 43 +++++++++++++++++++++++++++++++++++++++ + qt4/demos/viewer.cpp | 7 ++++++ + 5 files changed, 104 insertions(+), 0 deletions(-) + +commit b6f0c8f83924c08be20b602b128651bf018172a3 +Author: Pino Toscano <pino@kde.org> +Date: Thu Feb 21 00:54:26 2008 +0100 + + Do not assign conflicting accelerators. + + qt4/demos/viewer.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e0c27a968c7e7a0f6a89a050ddbfe328229f431d +Author: Pino Toscano <pino@kde.org> +Date: Thu Feb 21 00:53:24 2008 +0100 + + Apply the antialias settings w/o notify the observers. + + qt4/demos/viewer.cpp | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 2c6149abcecda15c6f73a1dee537072240ddd545 +Author: Pino Toscano <pino@kde.org> +Date: Thu Feb 21 00:51:21 2008 +0100 + + Add a settings menu to choose the render backend. + + qt4/demos/viewer.cpp | 28 ++++++++++++++++++++++++++++ + qt4/demos/viewer.h | 3 +++ + 2 files changed, 31 insertions(+), 0 deletions(-) + +commit db2b0778dca364751a1d22294be29f8c7799e2e9 +Author: Pino Toscano <pino@kde.org> +Date: Thu Feb 21 00:33:23 2008 +0100 + + Add a dock for showing the embedded files. + + TODO: show the checksum in a pretty format. + + qt4/demos/CMakeLists.txt | 1 + + qt4/demos/Makefile.am | 3 ++ + qt4/demos/embeddedfiles.cpp | 75 + +++++++++++++++++++++++++++++++++++++++++++ + qt4/demos/embeddedfiles.h | 43 ++++++++++++++++++++++++ + qt4/demos/viewer.cpp | 7 ++++ + 5 files changed, 129 insertions(+), 0 deletions(-) + +commit 51fba47ccb12a66282769fc504bac4c9f5123f75 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 17 01:49:59 2008 +0100 + + clear the page label when the document is closed + + qt4/demos/pageview.cpp | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit e964e2b9fbbe9b52b137ecd06729a06530835227 +Author: Michael Vrable <mvrable@cs.ucsd.edu> +Date: Tue Feb 19 23:22:55 2008 +0100 + + Allow grouped checkboxes to be selected individually. + + When checkboxes are in a group, they ought to behave like a + collection of + radio buttons. However, when deciding whether to draw a checkbox as + selected or not, the checkbox-drawing code was looking up the value + of the + V field in the form dictionary, which is shared among all checkboxes + in the + group. Thus, checkboxes would either all be on or off in unison. + + Instead, look up the AS (appearance state) value in each checkbox's + annotation dictionary, so that different checkboxes can be drawn + differently. + + poppler/Annot.cc | 6 ++---- + 1 files changed, 2 insertions(+), 4 deletions(-) + +commit 702fdd6c56b5369554c683d8c8e0e2c66e80886c +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Feb 19 00:18:04 2008 +0100 + + changes from gtk-doc + + glib/reference/tmpl/poppler-document.sgml | 1 + + glib/reference/tmpl/poppler-page.sgml | 2 +- + 2 files changed, 2 insertions(+), 1 deletions(-) + +commit 9e13b91ba38c20989d283588e73490a1601f5bb0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Feb 19 00:10:24 2008 +0100 + + distribute the headers too + + qt4/demos/Makefile.am | 11 ++++++++++- + 1 files changed, 10 insertions(+), 1 deletions(-) + +commit 194e0ced7c38514ec3126666531862e3b29b4b77 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Feb 18 23:34:06 2008 +0100 + + Fill NEWS and increase version number to 0.7 + + CMakeLists.txt | 2 +- + NEWS | 96 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + configure.ac | 2 +- + msvc/config.h | 6 ++-- + qt4/src/Doxyfile | 2 +- + 5 files changed, 102 insertions(+), 6 deletions(-) + +commit 3c407efe9f1f0cc3f6366d3a2b6e9b687656cc95 +Merge: 51f0cea 7f4acb8 +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 18 21:30:42 2008 +0100 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit 51f0cea0e3ba1acfc63877752e950fdd8c07e258 +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 18 21:29:41 2008 +0100 + + make the poppler_qt4viewer compile with the auto"tools" + + qt4/demos/Makefile.am | 16 ++++++++++++---- + 1 files changed, 12 insertions(+), 4 deletions(-) + +commit 7f4acb879d300e18dfaff768027c88195d7d8f1b +Author: Timothy Lee <timothy.lee@siriushk.com> +Date: Mon Feb 18 20:56:35 2008 +0100 + + Implement ImageOutputDev::drawMaskedImage and + ImageOutputDev::drawSoftMaskedImage so all images are exported when + using pdfimages + + utils/ImageOutputDev.cc | 19 +++++++++++++++++++ + utils/ImageOutputDev.h | 11 +++++++++++ + 2 files changed, 30 insertions(+), 0 deletions(-) + +commit 064b316648e35416bb49336639da1d8d288d1ecf +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Feb 18 20:17:37 2008 +0100 + + xref can be null so check for it before checking we went out of bounds + + Fixes bug 14549 + + poppler/Lexer.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b287b611b1c7b7dd00e12518cee3a6c35044e161 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 17 01:21:07 2008 +0100 + + Really niptick: help menu with about dialog for us and Qt. + + qt4/demos/viewer.cpp | 15 +++++++++++++++ + qt4/demos/viewer.h | 2 ++ + 2 files changed, 17 insertions(+), 0 deletions(-) + +commit 6400254fdabf3d0d32f27ebd00faa6958be62019 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 17 01:12:27 2008 +0100 + + Add a title to the viewer :) + + qt4/demos/viewer.cpp | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit b363c0568c9c61e7ee8ed86d808f0eed0b93b525 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 17 01:09:57 2008 +0100 + + Add the possibility to save a copy of the file. + + qt4/demos/viewer.cpp | 29 +++++++++++++++++++++++++++++ + qt4/demos/viewer.h | 2 ++ + 2 files changed, 31 insertions(+), 0 deletions(-) + +commit 42987dcdd8d7432145f78cfc550f0c099e6e7311 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 17 00:33:01 2008 +0100 + + Add a Permissions dock. + + qt4/demos/CMakeLists.txt | 1 + + qt4/demos/Makefile.am | 1 + + qt4/demos/permissions.cpp | 77 + +++++++++++++++++++++++++++++++++++++++++++++ + qt4/demos/permissions.h | 43 +++++++++++++++++++++++++ + qt4/demos/viewer.cpp | 7 ++++ + 5 files changed, 129 insertions(+), 0 deletions(-) + +commit 9d1dda64de1d9e3f6fc81e40a0c2246a6270dfa8 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 16 23:56:17 2008 +0100 + + Add settings for antialias. + + qt4/demos/viewer.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ + qt4/demos/viewer.h | 4 ++++ + 2 files changed, 45 insertions(+), 0 deletions(-) + +commit 3abb8703d7d8b7a5fbcbb3c19d8e84d640abe88c +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 16 22:25:11 2008 +0100 + + Add a TOC info dock. + + qt4/demos/CMakeLists.txt | 1 + + qt4/demos/Makefile.am | 1 + + qt4/demos/toc.cpp | 90 + ++++++++++++++++++++++++++++++++++++++++++++++ + qt4/demos/toc.h | 43 ++++++++++++++++++++++ + qt4/demos/viewer.cpp | 7 ++++ + 5 files changed, 142 insertions(+), 0 deletions(-) + +commit 80925f06d125ebfc9909e36bdbe5d37fd0e48bdc +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 16 21:51:10 2008 +0100 + + Adapt the Fonts and Info docks to the new abstract info dock. + + qt4/demos/fonts.cpp | 10 +++------- + qt4/demos/fonts.h | 11 +++++------ + qt4/demos/info.cpp | 10 +++------- + qt4/demos/info.h | 11 +++++------ + 4 files changed, 16 insertions(+), 26 deletions(-) + +commit c03531d691e56aba2b4c6538cf9e2463e1e0aa29 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 16 21:43:19 2008 +0100 + + Introduce a base info dock for handling the "dirty" work. + + qt4/demos/CMakeLists.txt | 1 + + qt4/demos/Makefile.am | 1 + + qt4/demos/abstractinfodock.cpp | 57 + ++++++++++++++++++++++++++++++++++++++++ + qt4/demos/abstractinfodock.h | 48 +++++++++++++++++++++++++++++++++ + 4 files changed, 107 insertions(+), 0 deletions(-) + +commit 0f7d51c7fc2439ee9392c166576c341238f00f36 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 16 18:49:52 2008 +0100 + + Delete the poppler page after usage. + + qt4/demos/pageview.cpp | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit b41d069cdd1435ddb14b3de2986875069523c814 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 16 18:48:57 2008 +0100 + + Initialize the current page number correctly. + + qt4/demos/viewer.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 75e516af0e72a2e3041660300e522ad00869372b +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 16 18:43:56 2008 +0100 + + Add a side dock for showing the fonts of the document. + + qt4/demos/CMakeLists.txt | 1 + + qt4/demos/Makefile.am | 1 + + qt4/demos/fonts.cpp | 78 + ++++++++++++++++++++++++++++++++++++++++++++++ + qt4/demos/fonts.h | 44 ++++++++++++++++++++++++++ + qt4/demos/viewer.cpp | 7 ++++ + 5 files changed, 131 insertions(+), 0 deletions(-) + +commit 8e642d1cbd48d4790a6769287cbfd90c3bc9fc34 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 16 17:21:30 2008 +0100 + + Add a View menu where the dock widget toogle actions will be. + + As start, put the Info dock there. + + qt4/demos/viewer.cpp | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit c1feb7c2b5008cc04edb3c028f888072920ce4dc +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 16 17:14:00 2008 +0100 + + Add a side dock for showing the info keys. + + qt4/demos/CMakeLists.txt | 1 + + qt4/demos/Makefile.am | 1 + + qt4/demos/info.cpp | 78 + ++++++++++++++++++++++++++++++++++++++++++++++ + qt4/demos/info.h | 44 ++++++++++++++++++++++++++ + qt4/demos/viewer.cpp | 5 +++ + 5 files changed, 129 insertions(+), 0 deletions(-) + +commit abc9b00c6470f9f6b66c280455f544ad0ee3aa8c +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 16 16:09:52 2008 +0100 + + Basic work in the demo PDF viewer, open documents and navigate into + the pages. + + An observer structure was introduced, so extra components can be + easily added and made aware of the document/page changes. + Both the navigation toolbar and the page view are implemented as + observers. + + qt4/demos/CMakeLists.txt | 3 + + qt4/demos/Makefile.am | 3 + + qt4/demos/documentobserver.cpp | 45 ++++++++++++++++++ + qt4/demos/documentobserver.h | 49 +++++++++++++++++++ + qt4/demos/navigationtoolbar.cpp | 98 + +++++++++++++++++++++++++++++++++++++++ + qt4/demos/navigationtoolbar.h | 56 ++++++++++++++++++++++ + qt4/demos/pageview.cpp | 60 ++++++++++++++++++++++++ + qt4/demos/pageview.h | 44 +++++++++++++++++ + qt4/demos/viewer.cpp | 98 + +++++++++++++++++++++++++++++++++++++- + qt4/demos/viewer.h | 17 +++++++ + 10 files changed, 470 insertions(+), 3 deletions(-) + +commit 14c88853a5675f40efb72f3ef01f49eb06ab846c +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 16 00:32:30 2008 +0100 + + Compile the poppler_qt4viewer. + + qt4/demos/CMakeLists.txt | 7 +++++++ + qt4/demos/Makefile.am | 12 ++++++++++-- + 2 files changed, 17 insertions(+), 2 deletions(-) + +commit aeb591f015d5e7a2643ed75d872358d2b1256b99 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 16 00:31:46 2008 +0100 + + Add a very minimal base PDF viewer. + + So minimal that it does nothing at the moment... + + qt4/demos/main_viewer.cpp | 29 ++++++++++++++++++++++++++++ + qt4/demos/viewer.cpp | 46 + +++++++++++++++++++++++++++++++++++++++++++++ + qt4/demos/viewer.h | 45 + ++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 120 insertions(+), 0 deletions(-) + +commit 8da490b090487c4c37290b63bdc9abcfaf6d6940 +Author: Pino Toscano <pino@kde.org> +Date: Fri Feb 15 23:59:39 2008 +0100 + + Add a skeleton of directory where PopplerQt4 demos will be. + + configure.ac | 1 + + qt4/CMakeLists.txt | 1 + + qt4/Makefile.am | 2 +- + qt4/demos/CMakeLists.txt | 10 ++++++++++ + qt4/demos/Makefile.am | 20 ++++++++++++++++++++ + 5 files changed, 33 insertions(+), 1 deletions(-) + +commit e24b49d52a5c1716641695ee731dd49848a114d9 +Author: Pino Toscano <pino@kde.org> +Date: Thu Feb 14 22:21:54 2008 +0100 + + do not print it as string + + qt4/src/poppler-private.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 2316455864e9c900c08d051c59b9508eddcb7c34 +Author: Pino Toscano <pino@kde.org> +Date: Thu Feb 14 21:02:20 2008 +0100 + + Pipe the poppler error messages through the Qt debug system. + + qt4/src/poppler-private.cc | 21 +++++++++++++++++++++ + qt4/src/poppler-private.h | 8 +++++++- + 2 files changed, 28 insertions(+), 1 deletions(-) + +commit d985d3b0cdc57370137865add2a5f3a7802109c7 +Author: Pino Toscano <pino@kde.org> +Date: Thu Feb 14 14:56:18 2008 +0100 + + Use what FormWidgetText give us. + + qt4/src/poppler-form.cc | 13 +++---------- + 1 files changed, 3 insertions(+), 10 deletions(-) + +commit a69bd442e52f4495f8d6bfd3bb58b3ebd1be1a63 +Author: Michael Vrable <mvrable@cs.ucsd.edu> +Date: Thu Feb 14 12:52:22 2008 +0100 + + Provide Unicode mappings for some control characters in + PDFDocEncoding. + + Though they do not represent glyphs, values such as carriage return + can be + found in text strings in PDFDocEncoding. Provide mappings for + these bytes + to Unicode. + + Additionally, map unknown characters to U+FFFD instead of U+0000, + so that + unknown characters do not result in nulls (which can truncate strings + early, particularly if the string is later re-encoded into + null-terminated + UTF-8). + + poppler/PDFDocEncoding.cc | 23 +++++++++++++++++------ + 1 files changed, 17 insertions(+), 6 deletions(-) + +commit ce17383e0ed21770b471e88f25046a64a23e7e45 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Feb 13 20:56:39 2008 +0100 + + Yet another fix for buggy documents, do not use the cache if the + cache could not be created because it ought to be too big + + Fixes http://bugs.kde.org/show_bug.cgi?id=157777 + + splash/SplashFont.cc | 48 + ++++++++++++++++++++++++++++-------------------- + 1 files changed, 28 insertions(+), 20 deletions(-) + +commit 15a61cac718ae8cbf83911e299b4cfdd24cdf178 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 13 20:55:18 2008 +0100 + + add images.c + + glib/demo/CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 9cfe10ab7f51d329647e102e446baaef043d8cc6 +Merge: e918729 7d65b4d +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 13 20:53:43 2008 +0100 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit 7d65b4da1bc060aeb94d67c2ff26912cef48c030 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Feb 13 20:32:43 2008 +0100 + + Add images demo + + glib/demo/Makefile.am | 2 + + glib/demo/images.c | 338 + +++++++++++++++++++++++++++++++++++++++++++++++++ + glib/demo/images.h | 31 +++++ + glib/demo/main.c | 4 +- + 4 files changed, 374 insertions(+), 1 deletions(-) + +commit e9187292701e72db1020f7701d0725d83eee4b00 +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 13 19:41:57 2008 +0100 + + Do the one-time initialisation in initTestCase(). + + qt4/tests/check_dateConversion.cpp | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +commit fb996c46e3c6b56a2c67819620000bcd804aacd6 +Author: Michael Vrable <mvrable@cs.ucsd.edu> +Date: Wed Feb 13 18:44:41 2008 +0100 + + Major rework of text display in form fields code. + + This adds support for UTF-16 strings as input, and will recode them + to the + appropriate character set for the font. + + The method Annot::layoutText packs a lot of functionality together, + but I + couldn't see a good way to split it apart. It will convert an + input text + string from PDFDocEncoding or UTF-16 (encoding is autodetected) to the + appropriate encoding for the font which will be used to display + the form + field. At the same time, it can compute the width of the resulting + string, + and optionally break the string at a specified width to aid in + wrapping + multi-line text. Text wrapping is integrated with encoding conversion + since wrapping is easiest with the original text (where spaces + and newlines + are easily identified), but text widths can only be computed after + re-encoding. + + Support for composite fonts is included, so long as those fonts use an + identity CMap, but this is still untested. Support for more + complex CMaps + is missing. + + The rewrite also includes a minor improvement to the formatting + of comb + fields; characters are now centered in the comb cells. + + poppler/Annot.cc | 507 + ++++++++++++++++++++++++++++++++++-------------------- + poppler/Annot.h | 9 +- + 2 files changed, 327 insertions(+), 189 deletions(-) + +commit 88c780aed4c9855f879e3c7a9f82500a859635a2 +Author: Michael Vrable <mvrable@cs.ucsd.edu> +Date: Wed Feb 13 18:42:49 2008 +0100 + + Fix what look to be a few bugs in functions for mapping to/from + Unicode. + + - Endianness fix in pdfDocEncodingToUTF16 (previously looked to + assume a + little-endian processor) + - Add support for CharCodeToUnicode::mapToCharCode for Unicode + codepoints + above 255. + + poppler/CharCodeToUnicode.cc | 4 ++-- + poppler/Form.cc | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 7574cb71f24ce5b32427f243c39b6029fb58ec81 +Merge: e798802 4e45e5c +Author: Pino Toscano <pino@kde.org> +Date: Wed Feb 13 01:07:31 2008 +0100 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit 4e45e5ca4ab0ba2a6586505d80ed81f4b3426752 +Author: Patrick Spendrin <ps_ml@gmx.de> +Date: Tue Feb 12 21:41:26 2008 +0100 + + Do the right thing with CDECL, that is, undefine it if it is defined + so we can redefine it later + + poppler-config.h.cmake | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e798802f00bff0a24ee6d1312d6c62624395865a +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 12 20:57:56 2008 +0100 + + Apidox fix: state which checksum is returned (if available). + + qt4/src/poppler-qt4.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 4e2ba70a88c40fef6775053b1cc5fa30e622cea7 +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 12 11:25:34 2008 +0100 + + Free the Object after you use it. + + poppler/Annot.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 039545fcd2c12631c7b8aea89c35f36cb387a17a +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 12 11:13:27 2008 +0100 + + Return the siblings even for checkboxes. + + qt4/src/poppler-form.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit fe5ee75cdf3e11e314318af12edf9d5bc8986250 +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 12 11:12:01 2008 +0100 + + Initialize correctly; free your memory. + + poppler/Form.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit e0eff92c7067d43faa8e93baed1f061863111251 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Feb 11 20:32:41 2008 +0100 + + Update the field dict instead of the annot dict for non composed dicts + + We were always updating the annot dictionary, adding or updating + the V field. While this is correct for composed dicts (annot + field) + it isn't for non composed ones since the annot dictionary doesn't + contain any V field because it's a field of the form field dictionary. + In these cases the form field is not correctly updated and if the + document is saved it will be wrong. + + poppler/Form.cc | 44 +++++++++++++++++++++++++++++++------------- + poppler/Form.h | 2 ++ + 2 files changed, 33 insertions(+), 13 deletions(-) + +commit 905e6da9795fee94329022c0cafbc229055fd4f6 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Feb 10 19:22:50 2008 +0100 + + Move forms specific draw methods from Annot to AnnotWidget class + + poppler/Annot.cc | 3433 + +++++++++++++++++++++++++++--------------------------- + poppler/Annot.h | 87 +- + poppler/Form.cc | 39 +- + poppler/Form.h | 2 + + poppler/Page.cc | 9 +- + 5 files changed, 1765 insertions(+), 1805 deletions(-) + +commit 78afbc4d7819654e8742d4457c9847ad02b73bf1 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Feb 10 17:12:59 2008 +0100 + + Some code refactoring and cleanup + + - Unused 'field' attribute in FormWidget class is now used and + getField() method has been added + - Method isReadOnly() in FormWidget class is not virtual anymore + but implemented in the base class + - Unused attribute 'catalog' in Form class has been removed and + 'acroForm' has been added instead with a getObj() method to get it. + - createFieldFromDict() method is now static + + poppler/Form.cc | 128 + ++++++++++++++++++++++++++++--------------------------- + poppler/Form.h | 41 ++++++++--------- + 2 files changed, 84 insertions(+), 85 deletions(-) + +commit 5f8e2f9140ee2ede841700726b974768ec863672 +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 11 20:16:44 2008 +0100 + + Use QVarLengthArray instead of relying on gcc-ism. + + qt4/src/poppler-page.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 7499764d382366823519aa13a38e1e44781c78af +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 11 11:57:50 2008 +0100 + + Add FormFieldButton::siblings(). + + This is needed for grouping together the radio buttons. + + qt4/src/poppler-form.cc | 14 ++++++++++++++ + qt4/src/poppler-form.h | 8 ++++++++ + 2 files changed, 22 insertions(+), 0 deletions(-) + +commit 85bfa4f499a90d45b13df4d0a8760a7da6fc1532 +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 11 02:40:37 2008 +0100 + + Small apidox fix. + + qt4/src/poppler-form.h | 11 ++--------- + 1 files changed, 2 insertions(+), 9 deletions(-) + +commit ada05055c91e967dc3e2af32a2176dd12cb7fe70 +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 11 02:27:19 2008 +0100 + + Preliminary support for "button" form fields (ie, push buttons, + check boxes, and radio buttons). + + qt4/src/poppler-form.cc | 55 + +++++++++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-form.h | 54 + ++++++++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-page.cc | 6 +++++ + 3 files changed, 115 insertions(+), 0 deletions(-) + +commit 278b33f25df418ef12798100002845a3e2ceebd3 +Merge: c730b33 fdb0a4a +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 11 00:57:24 2008 +0100 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit fdb0a4a2f1d86aec7a3b0fcd4b4d48455791ecad +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Feb 10 18:47:40 2008 -0500 + + Avoid prescaling images when printing. + + Adds a function for letting the CairoOutputDev know whether it is + targetting a + screen or not. It then uses this knowledge to avoid prescaling + images. This way + cairo gets the full resolution image for use in the printed output. + + glib/poppler-page.cc | 1 + + poppler/CairoOutputDev.cc | 3 ++- + poppler/CairoOutputDev.h | 2 ++ + 3 files changed, 5 insertions(+), 1 deletions(-) + +commit c730b33f1ec2032c4b8c2660738448d954eb0f7d +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 11 00:46:20 2008 +0100 + + Keep the EmbFile object, and use this for getting the data. + + qt4/src/poppler-embeddedfile.cc | 33 +++++++++++---------------------- + qt4/src/poppler-private.h | 1 - + 2 files changed, 11 insertions(+), 23 deletions(-) + +commit 5915e57e7785370ce305cbbb3c2fedf36886689f +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 10 03:19:18 2008 +0100 + + const & in foreach + + qt4/tests/poppler-fonts.cpp | 2 +- + qt4/tests/stress-poppler-dir.cpp | 2 +- + qt4/tests/stress-poppler-qt4.cpp | 2 +- + qt4/tests/test-password-qt4.cpp | 2 +- + qt4/tests/test-poppler-qt4.cpp | 2 +- + 5 files changed, 5 insertions(+), 5 deletions(-) + +commit d8374e0c2eb3ba05be101687e20c5fcbc42c1ad0 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 10 01:32:24 2008 +0100 + + Include only what needed; remove extra includes. + + qt4/tests/poppler-attachments.cpp | 4 +++- + qt4/tests/poppler-fonts.cpp | 4 +++- + qt4/tests/stress-poppler-dir.cpp | 9 ++++++--- + qt4/tests/stress-poppler-qt4.cpp | 9 ++++++--- + qt4/tests/test-password-qt4.cpp | 10 ++++++---- + qt4/tests/test-poppler-qt4.cpp | 12 ++++++++---- + 6 files changed, 32 insertions(+), 16 deletions(-) + +commit fa01a1115c4554b18c3462b568d76860d2fbe17b +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 10 01:09:57 2008 +0100 + + Comment out unused vars. + + utils/pdftoabw.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit d3275e4263372b534c276f81d0c997ecb6675487 +Merge: c2186c1 5347a97 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 9 23:57:03 2008 +0100 + + Merge branch 'master' of + ssh://aacid@git.freedesktop.org/git/poppler/poppler + +commit c2186c1829c695c4ddb6c471ef8ad4ffa23c1b70 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 9 23:56:32 2008 +0100 + + Only check if we are out of bounds if the object we are searching + for has a known id (0 also means not known) + + Found by Michael Vrable + + poppler/Lexer.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 5347a97e39388ae38cf2ab9c67f953b0f7a02a13 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 9 18:26:41 2008 +0100 + + Add the operators for the flags we have. + + qt4/src/poppler-qt4.h | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 329ade4f936bf063539cdc887aaf9a1722a5b8e0 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 9 18:23:59 2008 +0100 + + Add options for the PDF export; add the WithChanges flag for saving + the changes to the document as well. + + qt4/src/poppler-pdf-converter.cc | 25 +++++++++++++++++++++++-- + qt4/src/poppler-qt4.h | 14 ++++++++++++++ + 2 files changed, 37 insertions(+), 2 deletions(-) + +commit afb255366d56551bdc307766199bef9c5021d3ac +Merge: 8c44b17 8cb0e75 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 9 17:58:49 2008 +0100 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit 8c44b175081983c492821858341109fee9e86b16 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 9 17:57:57 2008 +0100 + + Do not rely on GNU extensions, but at least use Qt. + + qt4/src/poppler-qiodeviceoutstream.cc | 11 ++++------- + 1 files changed, 4 insertions(+), 7 deletions(-) + +commit 8cb0e75203daa01439413d1a775482b48e784baa +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 9 17:56:13 2008 +0100 + + Domain order is x_min x_max y_min y_max and not x_min y_min x_max + y_max + + poppler/GfxState.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit c8f734ba4258059fa4521a4d364f62ca1632840b +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 9 13:37:04 2008 +0100 + + PS cos and sin input values are degrees so convert to radians so we + can use the cos and sin cmath functions + + poppler/Function.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 5fb0c9d31c1abf2e6ad306c112fbd2a7c33d8772 +Merge: 2655663 2255c85 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Feb 9 13:15:15 2008 +0100 + + Merge branch 'master' of + ssh://carlosgc@git.freedesktop.org/git/poppler/poppler + +commit 26556636e71d5abcbfdd1373f5576d1233532cf8 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Feb 9 13:14:41 2008 +0100 + + Add saveWithoutChangesAs method to be able to save the document + ignoring changes made in forms or annots + + glib/poppler-document.cc | 41 ++++++++++++++++++++++++++++++++++++++++- + glib/poppler-document.h | 3 +++ + poppler/PDFDoc.cc | 38 ++++++++++++++++++++++++++++++++------ + poppler/PDFDoc.h | 4 ++++ + 4 files changed, 79 insertions(+), 7 deletions(-) + +commit 2255c85e4939a0752083dca21984ff4398baf8d2 +Merge: 5ba9287 56c9246 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 9 12:49:45 2008 +0100 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit 5ba928762471e1ea8b81acd4644dfd3f58d18f77 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 9 12:48:04 2008 +0100 + + Fix placeholders in printf-like functions. + + glib/demo/page.c | 2 +- + glib/test-poppler-glib.cc | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 56c924609223196c5c41b9e6d9102bc248bad947 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 9 12:26:06 2008 +0100 + + atan operator must yield a degrees result between 0 and 360 + + See testcase at http://bugs.kde.org/show_bug.cgi?id=157497 + + poppler/Function.cc | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +commit 2a39932ae35a2716842bd2a1c3d4f9ce6b1e3dd8 +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 9 01:31:20 2008 +0100 + + Few improvements to the password test. + + - QString::fromUtf8() instead of QFile::encodeName() to correctly + pass the utf8 filenames + - QVERIFY(!foo) instead of QCOMPARE(foo, false) + - QVERIFY() also the return value of unlock() + + qt4/tests/check_password.cpp | 31 ++++++++++++++++--------------- + 1 files changed, 16 insertions(+), 15 deletions(-) + +commit cc9c124d4d859b845eebf4ca1e4397870a35fd4e +Author: Pino Toscano <pino@kde.org> +Date: Sat Feb 9 01:09:02 2008 +0100 + + Add an unit test case for few invalid dates. + + qt4/tests/check_dateConversion.cpp | 34 + ++++++++++++++++++++++++++++++++++ + 1 files changed, 34 insertions(+), 0 deletions(-) + +commit eca91761741de5b340f7a2160db5b33401feb935 +Author: Pino Toscano <pino@kde.org> +Date: Fri Feb 8 18:42:14 2008 +0100 + + Remove unneeded headers. + + qt4/src/poppler-page.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 899627505a4645fb1cc7d3599adbeec449c57041 +Author: Pino Toscano <pino@kde.org> +Date: Fri Feb 8 18:41:13 2008 +0100 + + The return value is QString, so return QString's... + + qt4/src/poppler-document.cc | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit a1606fa4ff438983e3a7f55dd2d10a66f72e6711 +Author: Pino Toscano <pino@kde.org> +Date: Fri Feb 8 17:31:32 2008 +0100 + + Move checkDocument() inside the private class. + + qt4/src/poppler-document.cc | 6 +++--- + qt4/src/poppler-private.h | 2 ++ + qt4/src/poppler-qt4.h | 2 +- + 3 files changed, 6 insertions(+), 4 deletions(-) + +commit f1ec70a83f807493dab5118761df31c0f67decad +Author: Pino Toscano <pino@kde.org> +Date: Fri Feb 8 17:26:41 2008 +0100 + + Remove C-ism. + + qt4/src/poppler-document.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 3e994e8586fa1c87ef7e7f82af1cdacf2cd36310 +Author: Pino Toscano <pino@kde.org> +Date: Fri Feb 8 12:21:56 2008 +0100 + + Add the missing font types. + + qt4/src/poppler-fontinfo.cc | 11 +++++++++-- + 1 files changed, 9 insertions(+), 2 deletions(-) + +commit ba07963f85d777a441349e23d4c2f510e45c73be +Author: Pino Toscano <pino@kde.org> +Date: Fri Feb 8 12:19:04 2008 +0100 + + Be safe against self-assignment. + + qt4/src/poppler-fontinfo.cc | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 834b86548e09f4b24cdb2f194299d053b9b55022 +Author: Pino Toscano <pino@kde.org> +Date: Fri Feb 8 12:15:16 2008 +0100 + + Small apidox fix. + + qt4/src/poppler-qt4.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 11a61eac5b8cde04bf762bbbe0deab5c0bd52951 +Author: Pino Toscano <pino@kde.org> +Date: Fri Feb 8 02:21:32 2008 +0100 + + Pack few bools together. + + qt4/src/poppler-annotation.cc | 8 ++++---- + qt4/src/poppler-link.cc | 10 +++++----- + qt4/src/poppler-private.h | 4 ++-- + 3 files changed, 11 insertions(+), 11 deletions(-) + +commit 1aeba15b5eb9b30943259824678ebc9e4f56e870 +Merge: a489063 22d10c1 +Author: Pino Toscano <pino@kde.org> +Date: Fri Feb 8 01:39:16 2008 +0100 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit a4890637a2c2ab1623311d9a6920e82131c2597c +Author: Pino Toscano <pino@kde.org> +Date: Fri Feb 8 01:36:56 2008 +0100 + + Move QStringToUnicodeGooString() and QStringToGooString() to the + private module. + + qt4/src/poppler-document.cc | 10 ---------- + qt4/src/poppler-form.cc | 15 --------------- + qt4/src/poppler-private.cc | 25 +++++++++++++++++++++++++ + qt4/src/poppler-private.h | 4 ++++ + 4 files changed, 29 insertions(+), 25 deletions(-) + +commit 5e44241c4976b819f7be6badd2d183fbfb8ee6de +Author: Pino Toscano <pino@kde.org> +Date: Fri Feb 8 01:30:07 2008 +0100 + + Move the string functions implementation in a .cc file. + + qt4/src/CMakeLists.txt | 1 + + qt4/src/Makefile.am | 1 + + qt4/src/poppler-private.cc | 70 + ++++++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-private.h | 46 ++-------------------------- + 4 files changed, 76 insertions(+), 42 deletions(-) + +commit 124d92139241ad95da559d22af48254b45ac4a2e +Author: Pino Toscano <pino@kde.org> +Date: Fri Feb 8 01:07:43 2008 +0100 + + Include own header first, remove extra includes. + + qt4/src/poppler-document.cc | 1 - + qt4/src/poppler-embeddedfile.cc | 3 ++- + qt4/src/poppler-form.cc | 4 +++- + qt4/src/poppler-link-extractor-private.h | 2 ++ + qt4/src/poppler-link-extractor.cc | 7 +++++-- + qt4/src/poppler-page-private.h | 6 +++++- + qt4/src/poppler-private.h | 4 +++- + qt4/src/poppler-qt4.h | 2 -- + qt4/src/poppler-sound.cc | 4 ++-- + 9 files changed, 22 insertions(+), 11 deletions(-) + +commit 22d10c19e232dea143bda372c92aa12b999e4921 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Feb 7 23:38:50 2008 +0100 + + PDF spec says name tokens have a maximum length of 127, but there are + some docs in the wild with more than that and they work on acroread + so increase the allowed length to 128+127 + + poppler/Lexer.cc | 25 +++++++++++++++++++++---- + 1 files changed, 21 insertions(+), 4 deletions(-) + +commit ee9f85915feb86b54ace1a403baa13bbdd7c3966 +Author: Pino Toscano <pino@kde.org> +Date: Thu Feb 7 18:07:53 2008 +0100 + + Having a PageData is mandatory. + + Just assert when constructing instead of checking for it in each + link iteration. + + qt4/src/poppler-link-extractor.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit ad4b1361f6c25359e6ddb38599bfc1e4e3e80408 +Author: Pino Toscano <pino@kde.org> +Date: Thu Feb 7 18:03:30 2008 +0100 + + Precalc stuff we don't need to recalc in each link iteration. + + qt4/src/poppler-link-extractor-private.h | 3 ++- + qt4/src/poppler-link-extractor.cc | 14 ++++++++------ + 2 files changed, 10 insertions(+), 7 deletions(-) + +commit 82432dbc62a0879f4513640c2e0f594fda9347ad +Author: Pino Toscano <pino@kde.org> +Date: Thu Feb 7 17:51:50 2008 +0100 + + Store the ::Page internally, so we don't need to get it again + everytime. + + qt4/src/poppler-page-private.h | 3 +++ + qt4/src/poppler-page.cc | 37 + ++++++++++++++----------------------- + 2 files changed, 17 insertions(+), 23 deletions(-) + +commit 8ec51f7ca518aa6a4a69f30d373722d05f50cf07 +Author: Pino Toscano <pino@kde.org> +Date: Thu Feb 7 16:48:16 2008 +0100 + + Compile the stress-poppler-dir test as well. + + qt4/tests/CMakeLists.txt | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 8a946b76ae2e7c2c5238b4e580c1c226eb457dc9 +Author: Pino Toscano <pino@kde.org> +Date: Thu Feb 7 01:07:28 2008 +0100 + + Micro-touches to the debug messages. + + qt4/src/poppler-page.cc | 26 +++++++++++++------------- + 1 files changed, 13 insertions(+), 13 deletions(-) + +commit c31990dfe50c7a0e3999e6d967699fce5ccb3339 +Merge: 7701e2a 6d58cda +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 5 00:38:00 2008 +0100 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit 7701e2a5c7d18fdaa0fa40c190e6ee0524746046 +Author: Pino Toscano <pino@kde.org> +Date: Tue Feb 5 00:37:01 2008 +0100 + + Add a AnnotColor -> QColor conversion method. + + qt4/src/poppler-annotation-helper.h | 6 ++++++ + qt4/src/poppler-annotation.cc | 31 + +++++++++++++++++++++++++++++++ + 2 files changed, 37 insertions(+), 0 deletions(-) + +commit 6d58cda82b0181f2cca6e9d95b15877793be0812 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Feb 4 23:33:51 2008 +0100 + + Protect us against weird dateString values + + qt4/src/poppler-document.cc | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit aa0435f1544fe1adcf10173e34eaeaf2a7a703c7 +Merge: b43f4e9 37600b5 +Author: Pino Toscano <pino@kde.org> +Date: Mon Feb 4 20:56:53 2008 +0100 + + Merge branch 'master' of + ssh://pino@git.freedesktop.org/git/poppler/poppler + +commit 37600b5e848386d2c92c3dff8219c9dda16b0dca +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sun Feb 3 22:42:51 2008 +0100 + + Minor changes to Annot related stuff. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 15 ++++----------- + poppler/Annot.h | 12 ++++++++++-- + poppler/Gfx.cc | 7 ++++--- + poppler/Page.cc | 9 +++++++++ + poppler/Page.h | 3 +++ + 5 files changed, 30 insertions(+), 16 deletions(-) + +commit b43f4e9a161a1fd7b827244dc21b1bd2a6df7054 +Author: Pino Toscano <pino@kde.org> +Date: Sun Feb 3 20:32:15 2008 +0100 + + Pass the DocumentData to the Page (simplify a bit some code). + + qt4/src/poppler-document.cc | 2 +- + qt4/src/poppler-link-extractor-private.h | 4 +- + qt4/src/poppler-link-extractor.cc | 8 ++-- + qt4/src/poppler-page-private.h | 4 +- + qt4/src/poppler-page.cc | 64 + +++++++++++++++--------------- + qt4/src/poppler-qt4.h | 5 +- + 6 files changed, 42 insertions(+), 45 deletions(-) + +commit 4e0bb0307fccefc21f74a4c5a3a0d7e8e687b550 +Author: Pino Toscano <pino@draco.(none)> +Date: Sat Feb 2 12:57:25 2008 +0100 + + Fix include guard. + + poppler/ArthurOutputDev.h | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 6f11ef660540fd13aad1350385beb90758ca86af +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Feb 1 23:55:37 2008 +0100 + + Fix for end condition, init ucode to 0 + + poppler/GfxFont.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 1da2091807ae7f7d4d3f446953c41b4c440d4b1b +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jan 31 23:52:20 2008 +0100 + + Ensure we don't draw outside the main bitmap on + SplashOutputDev::setSoftMask + + Fixes crash on http://bugs.kde.org/show_bug.cgi?id=157000 + + poppler/SplashOutputDev.cc | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +commit ecabc9469b137e8251344e5502de1cbf875223b9 +Author: Pino Toscano <pino@kde.org> +Date: Thu Jan 31 00:20:55 2008 +0100 + + Set RelWithDebInfo as default build type, if not specified. + + cmake/modules/PopplerMacros.cmake | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 19da87a20b3906523a330e3c956903a58a3ede7f +Author: Pino Toscano <pino@kde.org> +Date: Thu Jan 31 00:11:58 2008 +0100 + + Support the different CMake build modes. + + Now you can specify (using -DCMAKE_BUILD_TYPE=type) a CMake build + type to have GCC or ICC w/ tuned C(XX)FLAGS. + The supported build types are: None (as in no type is specified on + command line), RelWithDebInfo, Release, Debug, DebugFull, Profile. + + CMakeLists.txt | 7 ------- + cmake/modules/PopplerMacros.cmake | 29 +++++++++++++++++++++++++++++ + 2 files changed, 29 insertions(+), 7 deletions(-) + +commit 37d2055137c310ceb217164a76814b188be3b1b2 +Author: Pino Toscano <pino@draco.(none)> +Date: Wed Jan 30 23:12:03 2008 +0100 + + Introduce the CMake-based build system. + + Mostly works nicely as the autotools, and it mimics (almost) all + the autotools behaviours. + Copied some scripts from the KDE cmake scripts (BSD-licensed). + TODO: gtk-doc. + + CMakeLists.txt | 390 +++++++ + ConfigureChecks.cmake | 47 + + cmake/modules/COPYING-CMAKE-SCRIPTS | 22 + + cmake/modules/FindCairo.cmake | 44 + + cmake/modules/FindFontconfig.cmake | 47 + + cmake/modules/FindFreetype.cmake | 74 ++ + cmake/modules/FindGTK.cmake | 70 ++ + cmake/modules/FindPackageHandleStandardArgs.cmake | 58 + + cmake/modules/FindQt3.cmake | 319 +++++ + cmake/modules/FindQt4.cmake | 1295 + +++++++++++++++++++++ + cmake/modules/MacroBoolTo01.cmake | 20 + + cmake/modules/MacroEnsureVersion.cmake | 117 ++ + cmake/modules/MacroOptionalFindPackage.cmake | 28 + + cmake/modules/MacroPushRequiredVars.cmake | 47 + + cmake/modules/PopplerDefaults.cmake | 10 + + cmake/modules/PopplerMacros.cmake | 83 ++ + config.h.cmake | 149 +++ + glib/CMakeLists.txt | 107 ++ + glib/demo/CMakeLists.txt | 17 + + glib/poppler-features.h.cmake | 24 + + poppler-cairo.pc.cmake | 9 + + poppler-config.h.cmake | 160 +++ + poppler-glib.pc.cmake | 13 + + poppler-qt.pc.cmake | 12 + + poppler-qt4.pc.cmake | 12 + + poppler-splash.pc.cmake | 9 + + poppler.pc.cmake | 11 + + qt/CMakeLists.txt | 33 + + qt4/CMakeLists.txt | 2 + + qt4/src/CMakeLists.txt | 43 + + qt4/tests/CMakeLists.txt | 47 + + test/CMakeLists.txt | 52 + + utils/CMakeLists.txt | 84 ++ + 33 files changed, 3455 insertions(+), 0 deletions(-) + +commit 1ea831d3eee6eda35fadfb3c75962a0c708e6c7b +Author: Pino Toscano <pino@kde.org> +Date: Wed Jan 30 22:17:38 2008 +0100 + + Preprocessor #warning is GCC-specific. + + poppler/ArthurOutputDev.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 4c738cc6bd51f9d9e23ba83949c490c5c8691345 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jan 29 23:45:52 2008 +0100 + + Scale text to match 'm' size + + Fixes bug 12304 + + poppler/SplashOutputDev.cc | 37 +++++++++++++++++++++++++++++ + splash/SplashFTFont.cc | 55 + +++++++++++++++++++++++++++++++++++++++++++- + splash/SplashFTFont.h | 4 +++ + splash/SplashFont.h | 4 +++ + splash/SplashFontFile.cc | 1 + + splash/SplashFontFile.h | 2 + + 6 files changed, 102 insertions(+), 1 deletions(-) + +commit 64f16cf6ebf2870852fe8d937b25be58869ad40a +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jan 29 23:41:15 2008 +0100 + + Enable antialias by default on the test tool + + qt4/tests/test-poppler-qt4.cpp | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 90f0e6bc1e96d9f1666cb8476a92e127f5b927d4 +Author: Jonathan Kew <jonathan_kew@sil.org> +Date: Tue Jan 29 20:23:08 2008 +0100 + + Provide gstrndup as a portable substitue of strndup + + configure.ac | 1 - + goo/gmem.cc | 7 +++++++ + goo/gmem.h | 5 +++++ + poppler/GfxFont.cc | 8 +------- + 4 files changed, 13 insertions(+), 8 deletions(-) + +commit 77b91c852ad3d5554afc03aee92a1d928f233401 +Merge: 0babb0e 0533696 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jan 28 20:44:34 2008 +0100 + + Merge branch 'master' of + ssh://aacid@git.freedesktop.org/git/poppler/poppler + +commit 0babb0eb1afa343fb12a3fd037b98d2d1c794a1c +Author: Jonathan Kew <jonathan_kew@sil.org> +Date: Mon Jan 28 20:42:44 2008 +0100 + + Introduce a check for strndup and alternative for systems without it + + configure.ac | 1 + + poppler/GfxFont.cc | 6 ++++++ + 2 files changed, 7 insertions(+), 0 deletions(-) + +commit 053369678963206a4afa88a614de1994872c7c5a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jan 27 19:36:28 2008 +0100 + + Add ok_to_fill_form permission flag + + glib/poppler-document.cc | 2 ++ + glib/poppler-document.h | 3 ++- + glib/test-poppler-glib.cc | 21 +++++++++++++++++++-- + 3 files changed, 23 insertions(+), 3 deletions(-) + +commit 3085a9495ad87a54758da0024372610fdaf88d57 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Jan 27 19:15:34 2008 +0100 + + Fix slice rendering in poppler glib demo + + glib/demo/render.c | 41 ++++++++++++++++++++++++----------------- + 1 files changed, 24 insertions(+), 17 deletions(-) + +commit 7ad6c4ba110b970516d5380444a03ae217496ddf +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jan 24 21:14:44 2008 +0100 + + Incrementing the iterator would be a good idea + + qt4/src/poppler-annotation.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 7c99ec4635a4971321bbead7d1bc723da59b755e +Author: Julien Rebetez <julien@fhtagn.net> +Date: Thu Jan 24 19:18:15 2008 +0100 + + Revert unwanted change on Dict, fix leak on writeTrailer + + poppler/Dict.cc | 2 +- + poppler/PDFDoc.cc | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit 2335fb6034d2e9ec304abba400119b88302b3160 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 23 23:26:20 2008 +0100 + + Draw underlined Links correctly + + See http://bugs.kde.org/show_bug.cgi?id=151359 for an example + + poppler/Gfx.cc | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit 96c532ea4b56a147de1deb965126e31f87df588b +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jan 23 13:30:12 2008 +0100 + + Fix memory leak + + poppler/Form.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 6bca64407c675ca837f83a12c0f655f975f14407 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jan 23 13:27:45 2008 +0100 + + Make sure default values are not loaded more than once for the + same widget. + + poppler/Form.cc | 18 +++++++++++++++++- + poppler/Form.h | 1 + + 2 files changed, 18 insertions(+), 1 deletions(-) + +commit eccf84b51a1cf5d478c0ec84be3fc9be8e458f4f +Author: Pino Toscano <pino@kde.org> +Date: Tue Jan 22 23:28:16 2008 +0100 + + Refactor the PSConverter and add a PDFConverter (for PDF export/save). + + Add an OutStream subclass to redirect the output to a QIODevice. + Split the PSConverter in a base class (BaseConverter) w/ d_ptr + structure. + Add a new PDFConverter that inherit BaseConverter, and do the + actual export + making use of the new QIODeviceOutStream. + The BaseConverter now handles automatically file or QIODevice output. + + qt4/src/Makefile.am | 5 + + qt4/src/poppler-base-converter.cc | 99 ++++++++++++++++ + qt4/src/poppler-converter-private.h | 48 ++++++++ + qt4/src/poppler-document.cc | 5 + + qt4/src/poppler-pdf-converter.cc | 68 +++++++++++ + qt4/src/poppler-ps-converter.cc | 162 + +++++++++++--------------- + qt4/src/poppler-qiodeviceoutstream-private.h | 47 ++++++++ + qt4/src/poppler-qiodeviceoutstream.cc | 71 +++++++++++ + qt4/src/poppler-qt4.h | 85 +++++++++++--- + 9 files changed, 483 insertions(+), 107 deletions(-) + +commit 547db8be1ab0b2987f0f06d8529eaaed2414028c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jan 22 13:22:20 2008 +0100 + + Fix a crash when createAnnot returns NULL due to invalid annot dict. + + poppler/Annot.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0d558841142587d66bd3b2025e5a9ca39f7a6159 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jan 21 21:43:39 2008 +0100 + + Fix another reversed comparison due to cmp + + poppler/Annot.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit cb6a87e39336e2e3893f3e5f577e4d176d237a9f +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Mon Jan 21 10:07:35 2008 +0100 + + Fixed a few compare issues with Annots. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 24 ++++++++++++------------ + 1 files changed, 12 insertions(+), 12 deletions(-) + +commit 7cf85dc8d7c895a211684c7d36757063ed4f469b +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Mon Jan 21 21:27:49 2008 +0100 + + The glade file needs to be distributed + + test/Makefile.am | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 46e93d31dd9b5909ecd8f7a8f8de23329444a7bc +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Sun Jan 20 19:56:51 2008 +0100 + + we need time.h if we use time() + + poppler/PDFDoc.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit a0adb006c38ea07f010a01d9c0bb07ca0f48939d +Author: Pino Toscano <pino@kde.org> +Date: Sun Jan 20 19:55:55 2008 +0100 + + Added a saveAs() overload which takes a plain OutStream + + poppler/PDFDoc.cc | 9 +++++++-- + poppler/PDFDoc.h | 2 ++ + 2 files changed, 9 insertions(+), 2 deletions(-) + +commit fcdd5c51f370d040ae57aa64801c9bd4dbe88752 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jan 19 18:00:10 2008 +0100 + + Do not render images when getting the image mapping, it can be done + later on demand. + + glib/poppler-page.cc | 81 +++++++++++++++------------ + glib/poppler-page.h | 6 ++- + poppler/CairoOutputDev.cc | 131 + ++++++++++++++++++++++++++------------------- + poppler/CairoOutputDev.h | 12 ++++- + 4 files changed, 135 insertions(+), 95 deletions(-) + +commit 37ae465775d9a53e7c06cf51aa215439214fd79c +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Sat Jan 19 14:00:31 2008 +0100 + + ignore pdf-fullrewrite binary + + test/.gitignore | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 1d160935ea4c1116b745c584ed7f1fd03fbbfb46 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sat Jan 19 13:59:46 2008 +0100 + + AnnotWidget support and few fixes + + poppler/Annot.cc | 243 + +++++++++++++++++++++++++++++++++++++++++++++++++++-- + poppler/Annot.h | 142 +++++++++++++++++++++++++++++-- + 2 files changed, 365 insertions(+), 20 deletions(-) + +commit 0e91a3973e525d65236d15930a8ea0e5bbb6a6cc +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sat Jan 19 13:59:25 2008 +0100 + + AnnotTextMarkup support and improved AnnotQuadrilaterals + + poppler/Annot.cc | 356 + +++++++++++++++++++++++++++++++++++++++++++----------- + poppler/Annot.h | 130 +++++++++++++++++--- + 2 files changed, 400 insertions(+), 86 deletions(-) + +commit c13952cd56a40bad14a1bf28699b137f65162f10 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sat Jan 19 13:59:02 2008 +0100 + + Changed AnnotQuadrilateral parsing inside AnnotLink + + poppler/Annot.cc | 246 + +++++++++++++++++++++++++++++------------------------- + poppler/Annot.h | 19 ++-- + 2 files changed, 144 insertions(+), 121 deletions(-) + +commit 2f821f10fbbba9363405201c86494cd861cec2b2 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sat Jan 19 13:49:43 2008 +0100 + + Add AnnotQuadPoints class + + poppler/Annot.cc | 16 ++++++++++++++++ + poppler/Annot.h | 23 +++++++++++++++++++++++ + 2 files changed, 39 insertions(+), 0 deletions(-) + +commit de4c8fa6607e55c199bede1dc731227692ef4f53 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sun Dec 30 21:21:56 2007 +0100 + + AnnotFreeText support. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 232 + +++++++++++++++++++++++++++++++++++++++++++++++++++++- + poppler/Annot.h | 127 +++++++++++++++++++++++++++++ + 2 files changed, 358 insertions(+), 1 deletions(-) + +commit c3504a87933ae1516b1ef05e527fd1c039091235 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Sun Dec 30 19:37:18 2007 +0100 + + Improved AnnotLink support. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 116 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Annot.h | 51 ++++++++++++++++++++++++ + 2 files changed, 167 insertions(+), 0 deletions(-) + +commit a20468cc38bb590124b2b028a08f364f90f2487f +Author: Julien Rebetez <julien@fhtagn.net> +Date: Sat Jan 19 13:02:17 2008 +0100 + + Adds a test application to test full rewrite functionnality. + + test/Makefile.am | 11 ++++++++++- + test/pdf-fullrewrite.cc | 44 + ++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 54 insertions(+), 1 deletions(-) + +commit 246294714c6011651fd0e5b3649bd65919058c72 +Author: Julien Rebetez <julien@fhtagn.net> +Date: Sat Jan 19 12:59:03 2008 +0100 + + FormWidget's 'modified' member variable is now updated correctly + each time an update is done. + + Before, only text FormWidget had their 'modified' field set to 'true' + if they had been updated. + It is now the case for the other type of FormWidgets. + + poppler/Form.cc | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +commit 6e0f297b8b17afb95779724b8618ca39016e664a +Author: Julien Rebetez <julien@fhtagn.net> +Date: Sat Jan 19 12:54:09 2008 +0100 + + Annot will save their generated appearance in their AP dict. + + poppler/Annot.cc | 42 ++++++++++++++++++++++++++++++++++++++---- + poppler/Annot.h | 1 + + 2 files changed, 39 insertions(+), 4 deletions(-) + +commit e20f6a8e9ac3936b4bc03710a71fe390dfc4c094 +Author: Julien Rebetez <julien@fhtagn.net> +Date: Sat Jan 19 12:52:02 2008 +0100 + + Add deep copy constructor to Dict. + + poppler/Dict.cc | 14 +++++++++++++- + poppler/Dict.h | 1 + + 2 files changed, 14 insertions(+), 1 deletions(-) + +commit e8d46cab77c7167edb0896296118daafc0f13b6d +Author: Julien Rebetez <julien@fhtagn.net> +Date: Sat Jan 19 12:51:44 2008 +0100 + + Adds the ability to save PDF using either incremental update or by + rewriting completly the PDF. + + poppler/PDFDoc.cc | 379 + ++++++++++++++++++++++++++++++++++++++++++++++++++++- + poppler/PDFDoc.h | 18 +++- + poppler/XRef.cc | 12 ++- + poppler/XRef.h | 3 +- + 4 files changed, 402 insertions(+), 10 deletions(-) + +commit 742b0c3dec01d8672b84f56d5bb0e2890b178594 +Author: Julien Rebetez <julien@fhtagn.net> +Date: Sat Jan 19 12:51:27 2008 +0100 + + Make the md5 method of Decrypt public so it can be used by other + files. + + poppler/Decrypt.cc | 5 ++--- + poppler/Decrypt.h | 1 + + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit bb7867976740dea259d4110c072552fc5953910f +Author: Julien Rebetez <julien@fhtagn.net> +Date: Sat Jan 19 12:51:07 2008 +0100 + + Modify the writeToFile method of XRef so it uses OutStream instead + of a C file descriptor. + + poppler/XRef.cc | 10 +++++----- + poppler/XRef.h | 2 +- + 2 files changed, 6 insertions(+), 6 deletions(-) + +commit d80736587fdbc0e163077f27bfd21c5e3a7fa4c7 +Author: Julien Rebetez <julien@fhtagn.net> +Date: Sat Jan 19 12:50:49 2008 +0100 + + Adds addIndirectObject method to XRef. This method allow the creation + of new indirect objects. + + poppler/XRef.cc | 39 +++++++++++++++++++++++++++++++++++++++ + poppler/XRef.h | 1 + + 2 files changed, 40 insertions(+), 0 deletions(-) + +commit 8bd00dd0872191b8806e9411d9a1adc441f08a47 +Author: Julien Rebetez <julien@fhtagn.net> +Date: Sat Jan 19 12:50:16 2008 +0100 + + Add some unfiltered methods to input stream. + + With these methods, it is possible to read the raw content from the + stream, without any filtering (even not the headers). + + poppler/Stream.cc | 41 ++++++++++++++++++++++++++++------------- + poppler/Stream.h | 26 ++++++++++++++++++++++++++ + 2 files changed, 54 insertions(+), 13 deletions(-) + +commit 8bcda287ddd316f90b3e47a3a307fbe63a5c21f7 +Author: Julien Rebetez <julien@fhtagn.net> +Date: Sat Jan 19 12:46:53 2008 +0100 + + Add setNeedFree method to MemStream so it is possible to choose if + the stream should take care of deleting the buffer. + + poppler/Stream.h | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 4fbd143de7e3a8ab386dd14b057e62b3b9fe04e4 +Author: Julien Rebetez <julien@fhtagn.net> +Date: Sat Jan 19 12:45:54 2008 +0100 + + Add Outstream, a base class for output streams and FileOutStream, + which implements OutStream for output to a file. + + poppler/Stream.cc | 55 +++++++++++++++++++++++++++++++++++++++++++++ + poppler/Stream.h | 64 + +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 119 insertions(+), 0 deletions(-) + +commit 696eaa47169fb063b7e6998c876926c578b6fbfa +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jan 17 15:56:59 2008 +0100 + + Fix a crash when editing text form fields + + poppler/Annot.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 9ec1b28dcdade12498b94b650c26483581294ee6 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jan 17 14:54:34 2008 +0100 + + Fix a crash when a form field contains reference to non existant + children + + poppler/Form.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit f7ed40c465033bad26dfda008c5984954baa0607 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jan 16 21:01:50 2008 +0100 + + Add a cast to fix build + + glib/demo/info.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 1c0aa21e598b879ec49d96700e6438ccb8ac2283 +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Fri Jan 11 20:28:49 2008 +0100 + + rename info.c to info.cc to fix bug 14024 + + glib/demo/Makefile.am | 2 +- + glib/demo/info.c | 243 + ------------------------------------------------- + glib/demo/info.cc | 243 + +++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 244 insertions(+), 244 deletions(-) + +commit 88f8bf850b6c41d25b9576597b5fc5bd75a122f4 +Author: Kjartan Maraas <kmaraas@gnome.org> +Date: Thu Jan 10 23:51:54 2008 +0100 + + Fix two use after free bugs in HtmlOutputDev.cc + + utils/HtmlOutputDev.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 348f4f9d9d5b0f91da6f46e0fcefec80255d4179 +Merge: 8a8a4f0 4eca2e0 +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Sat Jan 5 23:03:06 2008 +0100 + + Merge branch 'master' of + ssh://aacid@git.freedesktop.org/git/poppler/poppler + +commit 8a8a4f01272fb86898fafbda07129c0cbc03d527 +Author: Pino Toscano <pino@kde.org> +Date: Sat Jan 5 23:02:22 2008 +0100 + + Make Document::renderHints return the correct render hints + + qt4/src/poppler-document.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 4eca2e041c93349e0c4666e83ad1ca3caff91dee +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jan 1 14:34:00 2008 +0100 + + Add page transitions demo + + glib/demo/Makefile.am | 2 + + glib/demo/main.c | 16 ++- + glib/demo/transitions.c | 321 + +++++++++++++++++++++++++++++++++++++++++++++++ + glib/demo/transitions.h | 31 +++++ + 4 files changed, 363 insertions(+), 7 deletions(-) + +commit e92b50bbd3dfc8657b611e3c33129d7c5bae2319 +Author: Koji Otani <sho@bbr.jp> +Date: Wed Dec 26 18:56:01 2007 +0100 + + Use getEmbeddedFontID instead of getEmbeddedFontName to check if a + font is embedded or not + + poppler/GfxFont.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 30e9bae97e3742913015f7ea46636b2b80937612 +Author: Ed Catmur <ed@catmur.co.uk> +Date: Sat Dec 22 22:54:51 2007 +0100 + + Fixlets for Adobe Glyph Naming convention implementation + + poppler/GfxFont.cc | 94 + ++++++++++++++++++++++++++------------------------- + 1 files changed, 48 insertions(+), 46 deletions(-) + +commit 40551e616b007ceb15c9d6e3d77c24538ffec924 +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Sat Dec 22 14:31:50 2007 +0100 + + Check the destination page of the link does exist + + qt4/src/poppler-link.cc | 20 ++++++++++++-------- + 1 files changed, 12 insertions(+), 8 deletions(-) + +commit c06d6f2236d854f05e7621be280109ff27dc73b9 +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Thu Dec 20 20:13:08 2007 +0100 + + Use UnicodeParsedString that does exactly what this code does + + qt4/src/poppler-document.cc | 28 +--------------------------- + 1 files changed, 1 insertions(+), 27 deletions(-) + +commit 5f9f06a10fdb72a9d809ee1f779e1a8f549840e7 +Author: Koji Otani <sho@bbr.jp> +Date: Thu Dec 20 19:59:26 2007 +0100 + + Fix for latest CJK code + + See + http://lists.freedesktop.org/archives/poppler/2007-December/003244.html + for more information + + poppler/GfxFont.cc | 14 ++++++++++---- + 1 files changed, 10 insertions(+), 4 deletions(-) + +commit bb49e1e3909fc7392c197dc67d9b7f5312fd0dad +Author: Ed Catmur <ed@catmur.co.uk> +Date: Tue Dec 18 20:20:11 2007 +0100 + + Implement Adobe Glyph Naming convention + + poppler/GfxFont.cc | 183 + +++++++++++++++++++++++++++++++++++++++++++-------- + 1 files changed, 154 insertions(+), 29 deletions(-) + +commit 5634d63abdd64d371f2e8687a1c172f55b052008 +Author: Koji Otani <sho@bbr.jp> +Date: Mon Dec 17 20:43:41 2007 +0100 + + Allow seting some more Graphics States (Font, LW, LC, LJ, ML, D, + RI, FL) by operator 'gs' + + poppler/Gfx.cc | 67 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 67 insertions(+), 0 deletions(-) + +commit 7a9e7fc96b47b9d833300233ac38bbd60097f425 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Dec 16 21:21:08 2007 +0100 + + Add AnnotLink class so that link annots are properly recognized + + Right now, all of the annots except Text, are created using the + base class Annot which sets the type to unknown. For link annots this + causes the border never be drawn, since we are checking first + whether the + annot is a Link and it's always false. + + poppler/Annot.cc | 12 +++++++++++- + poppler/Annot.h | 10 ++++++++++ + 2 files changed, 21 insertions(+), 1 deletions(-) + +commit 796d9cb9b188a8af69d7fbf9bccbb408cbf6a71a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Dec 15 15:21:49 2007 +0100 + + Fix a crash when trying to create a temp annot with catalog = NULL + + poppler/Annot.cc | 7 +++++++ + poppler/Annot.h | 1 + + poppler/Form.cc | 6 ++---- + 3 files changed, 10 insertions(+), 4 deletions(-) + +commit 99f049f0dfbfd9c22bea56ae96253837ae421e23 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Dec 14 15:26:24 2007 +0100 + + Use the default dash array when it's not correct in AnnotBorderBS + + poppler/Annot.cc | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit cb2a997aa6f9dd5508ca8b04e63815da893497ef +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Dec 14 14:12:14 2007 +0100 + + Fix another crash due to uninitialized variables + + poppler/Annot.cc | 18 ++++++++---------- + poppler/Annot.h | 1 + + 2 files changed, 9 insertions(+), 10 deletions(-) + +commit f704e86d8c72bacbd9443c4d828cd284d3a11753 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Dec 14 12:58:12 2007 +0100 + + Fix several crashes due to uninitialized variables in Annots. + + poppler/Annot.cc | 11 +++++++---- + 1 files changed, 7 insertions(+), 4 deletions(-) + +commit 0820a93ba1c0e893681024feb9f9bd120a9eeb4d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Dec 14 12:38:58 2007 +0100 + + Check whether top and left should be changed in FitH, FitV, FitBH + and FitBV destinations + + According to the spec, if a null value is specified for top or left + parameter in such + destinations, the parameter should be retained unchanged. + + poppler/Link.cc | 36 ++++++++++++++++++++++++++++-------- + 1 files changed, 28 insertions(+), 8 deletions(-) + +commit 0fb42a2f557d5ec83b42326eb6b0be41622ca328 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Wed Dec 12 01:02:31 2007 +0100 + + Changed getters to const + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 28 ++++++++++---------- + poppler/Annot.h | 72 + +++++++++++++++++++++++++++--------------------------- + 2 files changed, 50 insertions(+), 50 deletions(-) + +commit 29d39a8ae120e6045a16a7aa0944c36560b42508 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Mon Dec 10 17:56:44 2007 +0100 + + AnnotText support. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 123 + +++++++++++++++++++++++++++++++++++++++++++++++++++++- + poppler/Annot.h | 65 ++++++++++++++++++++++++---- + 2 files changed, 177 insertions(+), 11 deletions(-) + +commit 2acecde458122bd67487cc302478befa78bf6fbe +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Mon Dec 10 16:45:46 2007 +0100 + + AnnotMarkup support. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 115 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Annot.h | 51 ++++++++++++++++++++++++ + 2 files changed, 166 insertions(+), 0 deletions(-) + +commit 1f8c1fe34e04688d2ba200f1166cfdd1ffe563f0 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Mon Dec 10 16:34:01 2007 +0100 + + AnnotPopup support. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 34 ++++++++++++++++++++++++++++++++++ + poppler/Annot.h | 21 +++++++++++++++++++++ + 2 files changed, 55 insertions(+), 0 deletions(-) + +commit 6c83e06fb2eb77d0dbefd1ebfbcac3e5f0cbb622 +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Mon Dec 10 16:24:38 2007 +0100 + + Prepare code to Annotation Subtype support. + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + glib/poppler-page.cc | 11 +--- + poppler/Annot.cc | 160 + ++++++++++++++++++++++++++++++++++++-------------- + poppler/Annot.h | 54 ++++++++++++++--- + poppler/Form.cc | 6 ++- + 4 files changed, 167 insertions(+), 64 deletions(-) + +commit fa0bb5bbea5bf2769c8b3084f78770b7781002eb +Author: Iñigo Martínez <inigomartinez@gmail.com> +Date: Mon Dec 10 15:41:38 2007 +0100 + + Various Annot improvements + + Signed-off-by: Iñigo Martínez <inigomartinez@gmail.com> + + poppler/Annot.cc | 613 + +++++++++++++++++++++++++++++++++++------------------- + poppler/Annot.h | 140 +++++++++++- + poppler/Gfx.cc | 21 ++- + poppler/Gfx.h | 5 +- + 4 files changed, 543 insertions(+), 236 deletions(-) + +commit e0f49fd5aef3c798798ad7e7dba55857bde1b4c0 +Author: Koji Otani <sho@bbr.jp> +Date: Thu Dec 13 23:40:46 2007 +0100 + + Some CJK charecters are displayed vertical glyphs incorrectly when + horizontal mode + + poppler/GfxFont.cc | 46 +++++++++++++++++++++++++--------------------- + 1 files changed, 25 insertions(+), 21 deletions(-) + +commit 85901922bf354a1268037d0b6ec5cbf14da979a1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Dec 13 23:30:59 2007 +0100 + + Yet another gmallocn to gmallocn_checkoverflow + + Fixes http://bugs.kde.org/show_bug.cgi?id=153949 + + poppler/SplashOutputDev.cc | 23 ++++++++++++++++------- + 1 files changed, 16 insertions(+), 7 deletions(-) + +commit f24259cddb9c5e02cf9d2071bfa0106f3e88bd59 +Author: Koji Otani <sho@bbr.jp> +Date: Mon Dec 10 23:24:14 2007 +0100 + + Display characters outside of unicode BMP with TT font + + fofi/FoFiTrueType.cc | 33 +++++++++++++++++++-- + fofi/FoFiTrueType.h | 2 +- + poppler/CMap.cc | 34 ++++++++++++++++++++++ + poppler/CMap.h | 4 ++ + poppler/GfxFont.cc | 75 + +++++++++++++++++++++++++++++++------------------ + 5 files changed, 115 insertions(+), 33 deletions(-) + +commit 7cbabbf378cf5a9c0411558ff02b44dec2040ea1 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Dec 10 22:00:30 2007 +0100 + + Fix a crash when marked content properties operator is not a dict. + + poppler/Gfx.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e807f9c72c7f0c5cc0655918f676f4af54739442 +Merge: bf57117 e2ea743 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 9 18:07:30 2007 +0100 + + Merge branch 'master' of + ssh://aacid@git.freedesktop.org/git/poppler/poppler + +commit bf57117df8786778faf31e5d843533004f867ff3 +Author: Adrian Johnson <ajohnson@redneon.com> +Date: Sun Dec 9 18:07:00 2007 +0100 + + Add support for ActualText entries + + Patch by Adrian Johnson with two minor changes by me (one fordward + declaration and a leak fix) + + poppler/Form.cc | 2 +- + poppler/Gfx.cc | 2 +- + poppler/OutputDev.cc | 2 +- + poppler/OutputDev.h | 2 +- + poppler/PDFDocEncoding.h | 4 ++ + poppler/TextOutputDev.cc | 98 + +++++++++++++++++++++++++++++++++++++++++++++- + poppler/TextOutputDev.h | 11 +++++ + 7 files changed, 116 insertions(+), 5 deletions(-) + +commit e2ea7430e7d6db50cbfdac34713915e5b0942a89 +Author: Albert Astals Cid <tsdgeos@localhost.(none)> +Date: Sat Dec 8 23:21:34 2007 +0100 + + disable warnings about assigning const char * to char * + + We have them all over the place and we are not going to fix it as + that'll be too much overhead when re-merging xpdf changes + + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit acf70c666d4f534cd97de64d4378bf6399e31fd4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Dec 6 23:58:26 2007 +0100 + + Disable gtk tests if the user disabled glib frontend + + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit bb0ec68f21d355081ff75aad641bc3809141e398 +Merge: 5a34cdd b925ea2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Dec 6 18:38:54 2007 +0100 + + Merge branch 'master' of + ssh://aacid@git.freedesktop.org/git/poppler/poppler + +commit b925ea232b6ed5028712600f9aebe453f3b2ba06 +Author: Brad Hards <bradh@kde.org> +Date: Tue Dec 4 19:11:13 2007 +1100 + + Remove redundant check. + + poppler/PSOutputDev.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 275afca4ef24020273df652ccfdf76c6994e9294 +Author: Brad Hards <bradh@kde.org> +Date: Sun Dec 2 19:45:16 2007 +1100 + + Preserve PDF page labels when we output as postscript. + + Resolves bug 13338. + + poppler/PSOutputDev.cc | 81 + +++++++++++++++++++++++++++++++++++++++++++++++- + poppler/PSOutputDev.h | 2 + + 2 files changed, 82 insertions(+), 1 deletions(-) + +commit 641edb83a457083c13f3e374f6ac6c570dd54d7f +Author: Brad Hards <bradh@kde.org> +Date: Wed Nov 28 19:42:53 2007 +1100 + + Minor API documentation update + + qt4/src/poppler-annotation.h | 81 + ++++++++++++++++++++++++++++++++++++++++- + 1 files changed, 79 insertions(+), 2 deletions(-) + +commit 3635ec6fcbc89daf633c03efb644df9031b80f59 +Author: Brad Hards <bradh@kde.org> +Date: Wed Nov 28 19:42:22 2007 +1100 + + Update doxygen configuration file to version 1.5.3 + + qt4/src/Doxyfile | 185 + +++++++++++++++++++++++++++++++++++++++++------------- + 1 files changed, 141 insertions(+), 44 deletions(-) + +commit 02c7ea6e1fd3e225de1eda231813f4db0ffb9fdb +Author: Brad Hards <bradh@kde.org> +Date: Wed Nov 28 19:41:54 2007 +1100 + + Fix off-by-one in printCommands path. + + poppler/Gfx.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 74af7c1209f47ed39addf7fde3ea106a7c77a408 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Nov 24 18:12:00 2007 +0100 + + Convert passwords from utf-8 to latin-1 when needed. Fixes bug #4557 + + glib/poppler-document.cc | 16 ++++++++++++++-- + 1 files changed, 14 insertions(+), 2 deletions(-) + +commit 5a34cddf043cb484549cb411e034786a7d8688a3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Nov 23 23:13:57 2007 +0100 + + add a ignore + + glib/demo/.gitignore | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 21a58562cc1e575ec3d81b6e34bfcb21306eb67f +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Nov 23 23:12:06 2007 +0100 + + sscanf does not like null strings, so don't call it on empty qstrings + + qt/poppler-document.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 6f8451cf9d19f57f658d1568643ecb0f953e1075 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Nov 11 21:29:40 2007 -0500 + + Add support for knockout groups to the cairo backend + + This is sort of hacky because we need to keep track of shape and + opacity + seperately. It is also probably not entirely correct. However, + it should be + closer than previously. + + poppler/CairoOutputDev.cc | 309 + +++++++++++++++++++++++++++++++++++++++++++-- + poppler/CairoOutputDev.h | 8 +- + 2 files changed, 303 insertions(+), 14 deletions(-) + +commit b0fbfb0ac366434d7e4c0350a9be83ddda7b03cf +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Nov 11 16:06:16 2007 -0500 + + Track the AlphaIsShape and TextKnockout state + + Parse, store and notify the OutputDevices about these entries. + + poppler/Gfx.cc | 14 ++++++++++++++ + poppler/GfxState.h | 6 ++++++ + poppler/OutputDev.h | 2 ++ + 3 files changed, 22 insertions(+), 0 deletions(-) + +commit f6429b13a972f2deb25b3d3a9948dca024a54841 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Nov 10 14:08:09 2007 -0500 + + Fix accidental mode change. + + 0 files changed, 0 insertions(+), 0 deletions(-) + +commit 5797f50a99d1494767edc5928f9c3e9d927b946d +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Nov 10 01:52:00 2007 -0500 + + Scale text to match 'm' size + + This adds back the hack that was removed when fontconfig support + was added long + ago. It's not a great solution but lets us be at least as good as + xpdf. Fixes + #12304 with the cairo backend. The problem persists with the splash + backend. + + poppler/CairoFontEngine.cc | 56 + +++++++++++++++++++++++++++++++++++++++++-- + poppler/CairoFontEngine.h | 7 ++++- + poppler/CairoOutputDev.cc | 8 ++++- + 3 files changed, 65 insertions(+), 6 deletions(-) + +commit 551212e55127c7e46d9aff3318015fd9b5385687 +Author: Brad Hards <bradh@frogmouth.net> +Date: Sat Nov 10 11:56:15 2007 +0100 + + Fix uninitialized variable access + + Supported by Derek B. Noonburg + + poppler/GfxState.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 934a5ae45eb17bd0e2010be89f55510e8a69816b +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Nov 3 13:08:51 2007 -0400 + + Avoiding using floating point when converting to luminance. + + The code now also does proper rounding instead of just truncating. + + poppler/CairoOutputDev.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 1b3f045a25e5d172357bc87c15ba591c8e1511a7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Nov 8 23:34:07 2007 +0100 + + Move another gmallocn to gmallocn_checkoverflow. Fixes crashes on + incorrect pdf sent by Red Hat + + poppler/Stream.cc | 21 +++++++++++++++------ + 1 files changed, 15 insertions(+), 6 deletions(-) + +commit 944d327fd7036332a33b4ad6476ceca7a650ef6e +Merge: fb1d1f4 c340255 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 7 23:52:47 2007 +0100 + + Merge branch 'master' of + ssh://aacid@git.freedesktop.org/git/poppler/poppler + +commit fb1d1f459784a6c19034212a617268f7f5a90e9c +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 7 23:51:58 2007 +0100 + + merge ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl2.patch + + poppler/Stream.cc | 417 + ++++++++++++++++++++++++++++++----------------------- + poppler/Stream.h | 10 +- + 2 files changed, 245 insertions(+), 182 deletions(-) + +commit c340255f46bc95b5f850abcd3d9bcdc8594199bb +Author: Brad Hards <bradh@kde.org> +Date: Mon Nov 5 20:36:23 2007 +1100 + + Update .gitignore + + Suppress the noise a bit. + + qt4/.gitignore | 1 + + qt4/tests/.gitignore | 3 +++ + test/.gitignore | 2 ++ + 3 files changed, 6 insertions(+), 0 deletions(-) + +commit cebf770379e7d71166e729aebf771a4ca291d48b +Author: Brad Hards <bradh@kde.org> +Date: Mon Nov 5 20:31:18 2007 +1100 + + Add a new unit test, for non-ASCII searching. + + There is a bug report (bug:7063) about not being able + to find text that isn't ASCII. I think that the problem isn't + in poppler core code - this unit test shows we can find + characters as long as they are properly encoded (which the + Qt4 front end does). + + qt4/tests/Makefile.am | 7 ++++++- + qt4/tests/check_search.cpp | 40 + ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 46 insertions(+), 1 deletions(-) + +commit 570fe464a2aae4f22d0b47cce73b8bc36b116e9f +Merge: 1c7b7a0 7875067 +Author: Brad Hards <bradh@kde.org> +Date: Mon Nov 5 15:55:39 2007 +1100 + + Merge branch 'minor-fixes' + +commit 78750679e213d7307cce38166b6af32562e871b8 +Author: Brad Hards <bradh@kde.org> +Date: Mon Nov 5 15:54:36 2007 +1100 + + Additional check for password protected documents + + We need to bail out on locked documents. In the future, + we could probably go interactive, and ask the user for + a password. + + qt4/tests/test-poppler-qt4.cpp | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 1c7b7a0c581b542945cac257202bbb819d33694c +Author: Brad Hards <bradh@kde.org> +Date: Mon Nov 5 15:49:45 2007 +1100 + + Minor Qt4 API documentation fix + + Also, this is a test of my git newbie-ness. + + qt4/src/poppler-form.h | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit b86fc565d175835cf27e9c8632da47a5e0b50237 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Nov 5 00:14:55 2007 +0100 + + Fix FSF address + + glib/demo/fonts.c | 2 +- + glib/demo/fonts.h | 2 +- + glib/demo/forms.c | 2 +- + glib/demo/forms.h | 2 +- + glib/demo/info.c | 2 +- + glib/demo/info.h | 2 +- + glib/demo/links.c | 2 +- + glib/demo/links.h | 2 +- + glib/demo/main.c | 2 +- + glib/demo/outline.c | 2 +- + glib/demo/outline.h | 2 +- + glib/demo/page.c | 2 +- + glib/demo/page.h | 2 +- + glib/demo/render.c | 2 +- + glib/demo/render.h | 2 +- + glib/demo/utils.c | 2 +- + glib/demo/utils.h | 2 +- + glib/poppler-action.cc | 2 +- + glib/poppler-action.h | 2 +- + glib/poppler-attachment.cc | 2 +- + glib/poppler-attachment.h | 2 +- + glib/poppler-document.cc | 2 +- + glib/poppler-document.h | 2 +- + glib/poppler-features.h.in | 2 +- + glib/poppler-form-field.cc | 2 +- + glib/poppler-form-field.h | 2 +- + glib/poppler-page.cc | 2 +- + glib/poppler-page.h | 2 +- + glib/poppler.cc | 2 +- + glib/poppler.h | 2 +- + poppler/PageTransition.cc | 2 +- + poppler/Sound.cc | 2 +- + poppler/Sound.h | 2 +- + qt/poppler-document.cc | 2 +- + qt/poppler-fontinfo.cc | 2 +- + qt/poppler-link-qt3.h | 2 +- + qt/poppler-link.cc | 2 +- + qt/poppler-page-transition-private.h | 2 +- + qt/poppler-page-transition.cc | 2 +- + qt/poppler-page-transition.h | 2 +- + qt/poppler-page.cc | 2 +- + qt/poppler-private.h | 2 +- + qt/poppler-qt.h | 2 +- + qt4/src/poppler-annotation-helper.h | 2 +- + qt4/src/poppler-annotation-private.h | 2 +- + qt4/src/poppler-annotation.cc | 2 +- + qt4/src/poppler-annotation.h | 2 +- + qt4/src/poppler-document.cc | 2 +- + qt4/src/poppler-embeddedfile.cc | 2 +- + qt4/src/poppler-fontinfo.cc | 2 +- + qt4/src/poppler-form.cc | 2 +- + qt4/src/poppler-form.h | 2 +- + qt4/src/poppler-link-extractor-private.h | 2 +- + qt4/src/poppler-link-extractor.cc | 2 +- + qt4/src/poppler-link.cc | 2 +- + qt4/src/poppler-link.h | 2 +- + qt4/src/poppler-page-private.h | 2 +- + qt4/src/poppler-page.cc | 2 +- + qt4/src/poppler-private.h | 2 +- + qt4/src/poppler-ps-converter.cc | 2 +- + qt4/src/poppler-qt4.h | 2 +- + qt4/src/poppler-sound.cc | 2 +- + qt4/src/poppler-textbox.cc | 2 +- + 63 files changed, 63 insertions(+), 63 deletions(-) + +commit 37776afc6f8a5733b41da6fb0f45e7ace4edf737 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Nov 5 00:03:55 2007 +0100 + + Update from http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt + + COPYING | 27 +++++++++++++-------------- + 1 files changed, 13 insertions(+), 14 deletions(-) + +commit 34a90b35998b65539cf1e8f09194d45db71064a1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 4 14:03:35 2007 +0100 + + Remove duplicate checking + + poppler/JBIG2Stream.cc | 8 -------- + 1 files changed, 0 insertions(+), 8 deletions(-) + +commit d694e1dd042fb97fbc62046b69cafe30d6f9ea58 +Merge: ba5b31c 432e657 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 4 13:26:47 2007 +0100 + + Merge branch 'master' of + ssh://aacid@git.freedesktop.org/git/poppler/poppler + +commit ba5b31c6a8b2317332bfa148f6d80f66891fb9ce +Author: Brad Hards <bradh@frogmouth.net> +Date: Sun Nov 4 13:25:12 2007 +0100 + + Require fontconfig >= 2.0 Fixes bug 9020 + + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 432e657a49cb097638a79e38c141088039572816 +Author: Jeff Muizelaar <jeff@freiheit.infidigm.net> +Date: Mon Sep 17 19:15:21 2007 -0400 + + Use realloc/free instead of new/delete when resizing GooStrings + + This allows for a large performance improvement when appending a + large number + of characters to a GooString. This is especially helpful for + TextOutputDev on + large PDFs. For example, the following code has the potential to be + O(n) instead of + O(n²) with a good implementation of realloc. + + while (n) { + string.append(character); + n--; + } + + goo/GooString.cc | 30 +++++++++++++++++------------- + 1 files changed, 17 insertions(+), 13 deletions(-) + +commit cb80112afed2c5b9642c3c43f1cc001ed88d08cb +Author: Jonathan Kew <jonathan_kew@sil.org> +Date: Thu Nov 1 20:53:05 2007 +0100 + + Do not try to parse directories when processing nameToUnicode + dir. Fixes ugly warnings on mingw32 + + poppler/GlobalParams.cc | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +commit ad6b888edff7b30be72df948c4052b9934a37705 +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Thu Nov 1 20:48:21 2007 +0100 + + Add some castings to make it compile + + glib/test-poppler-glib.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit a968dcc759379f48265c91bea63ca4cf987d94a9 +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Wed Oct 31 23:53:39 2007 +0100 + + Tests for passwords + + qt4/tests/Makefile.am | 13 +++++- + qt4/tests/check_password.cpp | 87 + ++++++++++++++++++++++++++++++++++++++ + qt4/tests/stress-poppler-dir.cpp | 63 +++++++++++++++++++++++++++ + qt4/tests/test-poppler-qt4.cpp | 15 ++++++- + 4 files changed, 175 insertions(+), 3 deletions(-) + +commit 7b7a08863a8278dee7aa1fe7789cf72223c26b35 +Author: Brad Hards <bradh@frogmouth.net> +Date: Wed Oct 31 23:53:27 2007 +0100 + + Improve documentation + + qt4/src/poppler-qt4.h | 64 + ++++++++++++++++++++++++++++++++++++++++++------ + 1 files changed, 56 insertions(+), 8 deletions(-) + +commit 96493c9409186a7e964e894c7f730962b6995fd7 +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Wed Oct 31 23:51:25 2007 +0100 + + remove old file + + glib/test-poppler-glib.c | 514 + ---------------------------------------------- + 1 files changed, 0 insertions(+), 514 deletions(-) + +commit 951a05f7a11af4a44e4cb85a015939d6a3e513f5 +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Sat Oct 27 12:33:22 2007 +0200 + + Remove fordward declaration of a non-existant class + + poppler/Form.h | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 289679405ab143bc2106cf269227c514a1602e56 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Thu Oct 25 22:16:10 2007 -0400 + + Avoid drawing borders unless /W and /S are specified in /BS + + Acroread doesn't sometimes doesn't draw borders when you'd + expect it to. Special case that behaviour so that we do the + same thing. + + poppler/Annot.cc | 15 ++++++++++++--- + 1 files changed, 12 insertions(+), 3 deletions(-) + +commit ab0a6c37faf9916edcd70e128d9f2654eb795ace +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Thu Oct 25 20:56:58 2007 +0200 + + Fix compilation on mingw. Bug 12493 + + Added a check for localtime_r in configure.ac + Moved test-poppler-glib.c to test-poppler-glib.cc to get the correct + compiler + + configure.ac | 1 + + glib/Makefile.am | 2 +- + glib/test-poppler-glib.cc | 520 + +++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 522 insertions(+), 1 deletions(-) + +commit 6bd637dc135045b20abf024d394538d7a3160795 +Merge: c01ab71 25b273d +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Tue Oct 23 23:27:01 2007 +0200 + + Merge branch 'master' of + ssh://aacid@git.freedesktop.org/git/poppler/poppler + +commit c01ab714ecd42e39ecb0be1c0c2504635251ac01 +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Tue Oct 23 23:26:21 2007 +0200 + + Provide setters for some methods that only had getters. Fixes + bug 12894 + + poppler/GlobalParams.cc | 49 + +++++++++++++++++++++++++++++++++++++++++++++++ + poppler/GlobalParams.h | 7 ++++++ + 2 files changed, 56 insertions(+), 0 deletions(-) + +commit 25b273db677815c8df11e52fe9df29fe857a8a88 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Mon Oct 22 23:01:37 2007 -0400 + + Unset the font if it doesn't exist or we can not load it properly + + Previously, the previous font stayed current and glyphs would be + drawn using + it. This resulted in random glyphs being chosen unless the encodings + happened + to match. Now, instead, we draw nothing which matches the behaviour of + acroread. + + poppler/Gfx.cc | 4 ++++ + poppler/GfxFont.cc | 4 ++++ + 2 files changed, 8 insertions(+), 0 deletions(-) + +commit 57331767ed5306eba1f9bf60e48fc88debdc2198 +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Mon Oct 22 23:33:59 2007 +0200 + + builddir != srcdir fixes by Christian Persch <chpe gnome org> + + autogen.sh | 7 ++++--- + glib/demo/Makefile.am | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +commit 2a333e5a618b5c92f3c703816b950321f25d3aab +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Mon Oct 22 22:14:43 2007 +0200 + + Splash rework, check if font is inside clip area before rendering + it to a temporary bitmap. Fixes KDE bug 150693 + + This change is not trivial. What i did is: + It is getGlyph the one that does the intersection between clip area + and rendering area of the font instead fillGlyph2 + That means some clipRes = state->clip->testRect but we win more + robustness against broken pdf that specify HUGE fonts + + splash/Splash.cc | 207 + ++++++++++++++++++++++++------------------------ + splash/Splash.h | 4 +- + splash/SplashFTFont.cc | 23 +++++- + splash/SplashFTFont.h | 4 +- + splash/SplashFont.cc | 29 ++++++-- + splash/SplashFont.h | 5 +- + splash/SplashT1Font.cc | 11 ++- + splash/SplashT1Font.h | 4 +- + 8 files changed, 162 insertions(+), 125 deletions(-) + +commit cf785cd12ae77e8dd778ed043584f8f26efe675f +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Mon Oct 22 21:59:35 2007 +0200 + + Add gmallocn_checkoverflow, it's the same as gmallocn but returns + NULL on overflow instead of doing exit() + + goo/gmem.cc | 18 ++++++++++++++++++ + goo/gmem.h | 3 +++ + 2 files changed, 21 insertions(+), 0 deletions(-) + +commit 37e16ac301a35ceca2e3535f8c6100d4cf723c82 +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Mon Oct 22 21:54:02 2007 +0200 + + exit(1) is bad in library code, use the src.abort method to describe + failure + + poppler/DCTStream.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit dbe975c129999a3efceb1c86518fa6fda74f685c +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Oct 22 11:25:37 2007 +0200 + + Fix a crash with invalid TrueType fonts + + fofi/FoFiTrueType.cc | 10 ++++++---- + 1 files changed, 6 insertions(+), 4 deletions(-) + +commit 8bfe30a48fd7021591ab307bd51f86c06ff202b9 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Oct 19 15:46:50 2007 +0200 + + Do not generate appearance stream for radio button that are not active + + poppler/Annot.cc | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 1a531dcfee1c6fc79a414c38cbe7327fbf9a59d8 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Oct 19 13:12:24 2007 +0200 + + Fix a crash with invalid embedded fonts + + poppler/CairoFontEngine.cc | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit e1740278457e512676b623bcdf9968193f0a8d7b +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Oct 19 12:21:54 2007 +0200 + + Do not draw annotations when rendering for printing + + glib/poppler-page.cc | 25 ++++++++++++++++++++++--- + poppler/Annot.h | 2 ++ + 2 files changed, 24 insertions(+), 3 deletions(-) + +commit a4d25f79dfc1a7e4998e2e113ef92312bd4af553 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Oct 16 15:24:08 2007 +0200 + + Detect form fields at any depth level + + We were ignoring non root form fields that contain only a kids + dictionary. + See evince bug: http://bugzilla.gnome.org/show_bug.cgi?id=486957 + + poppler/Form.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 03e1da99f7393fb1103643311b0b5af7b875e09c +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Oct 13 19:38:15 2007 -0400 + + Add an implementation of CairoOutputDev::startPage() + + The implementation initializes fill_pattern and stroke_pattern + to black matching SplashOutputDev. This fixes #12504. + + poppler/CairoOutputDev.cc | 9 +++++++++ + poppler/CairoOutputDev.h | 2 +- + 2 files changed, 10 insertions(+), 1 deletions(-) + +commit 825c942d46e0c3e254028441015c5dd8440cc734 +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Fri Oct 12 13:47:09 2007 +0200 + + Copy the embeddef file description string correctly + + poppler/Catalog.cc | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +commit 5e60da78695eff44cc10dbce46ef170727f682b1 +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Fri Oct 12 13:46:52 2007 +0200 + + Correctly delete the embedded file stream + + qt4/src/poppler-embeddedfile.cc | 1 + + qt4/src/poppler-private.h | 2 +- + 2 files changed, 2 insertions(+), 1 deletions(-) + +commit 1627fbbde8be01af3bdd2583f3439897a37d5215 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Oct 6 23:27:40 2007 -0400 + + Use maskWidth and maskHeight for reading from the mask image in + CairoOutputDev::drawMaskedImage() + + Previously, drawMaskedImage() was incorrectly using the image width + and height which is + wrong when width != maskWidth or heigh != maskHeight. Fixes #12668. + + poppler/CairoOutputDev.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 3156d560c5eaf6970da422d0b09fd2e95bfe6d1d +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Oct 5 11:34:01 2007 +0200 + + Fix a crash when Form Fields array contains references + to non existent objects. Fixes bug #11865 + + poppler/Form.cc | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit f0b5e6286e94c6153c8247b5fae63a18622c48d3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Oct 4 15:22:01 2007 +0200 + + Do not return unknown field type for signature form fields + + glib/poppler-form-field.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 498fd7fb99b01a879d07e2ad12c0b9462a8fc438 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Oct 4 12:36:39 2007 +0200 + + Add poppler_page_render_for_printing() and + poppler_page_render_to_pixbuf_for_printing() + + We were unconditionally passing printing=gFalse to displaySlice. With + these new + functions we can render to a pixbuf or cairo surface passing + printing=gTrue to + displaySlice. + + glib/poppler-page.cc | 135 + ++++++++++++++++++++++++++++++++++++++++---------- + glib/poppler-page.h | 10 ++++ + 2 files changed, 119 insertions(+), 26 deletions(-) + +commit 56af69787c78c2edbb69266e86a5a5b639ca6d3e +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Oct 3 23:02:25 2007 -0400 + + Error out if we can't find a .cidToUnicode for a known character + collection + + This situation was caused by the fixes for bug #11413. I'm not sure + it's the best thing to do, but it seems better. + + poppler/GfxFont.cc | 19 +++++++++++++++++++ + 1 files changed, 19 insertions(+), 0 deletions(-) + +commit 3d0df46908379bce1d196b9dc41153b1adb5f725 +Author: Michael Wolf <maw@ximian.com> +Date: Wed Oct 3 19:43:55 2007 +0200 + + Fix compile warning + + glib/test-poppler-glib.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit aba29e12528025c2cc71bf46e02e76ac4db2b193 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Sep 28 21:01:50 2007 +0200 + + Add forms demo to glib poppler demo + + glib/demo/Makefile.am | 2 + + glib/demo/forms.c | 489 + +++++++++++++++++++++++++++++++++++++++++++++++++ + glib/demo/forms.h | 31 +++ + glib/demo/main.c | 8 +- + glib/demo/utils.c | 1 - + 5 files changed, 527 insertions(+), 4 deletions(-) + +commit d0c0f26d2c95232c216e3daa15e98a3aff14ac27 +Merge: 59d55f7 38d5bb1 +Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> +Date: Tue Sep 25 03:33:52 2007 -0700 + + Merge branch 'master' of + ssh://kjk@git.freedesktop.org/git/poppler/poppler + +commit 38d5bb150a5fe883da1d4256463d1f796d201283 +Author: Krzysztof Kowalczyk <kkowalczyk@kjkubu.(none)> +Date: Tue Sep 25 16:13:51 2007 -0700 + + Silence deprecation warnings - annoying with msvc 2005. + + makefile.vc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 59d55f7371bee81c9392fa2d4174ceffaacde471 +Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> +Date: Tue Sep 25 01:21:19 2007 -0700 + + Fix misleading comment. + + goo/GooTimer.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit c36d8afc984795aca0a12a94ec7668092067db82 +Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> +Date: Tue Sep 25 00:32:29 2007 -0700 + + Revert "replace extremely confusing 'a*(int)sizeof(foo)/sizeof(foo) + != a' which, due to type promotions, if a is int, is equivalent to + a < 0; fix problems revealed by the change" + + This reverts commit 08bf7c1151d594d4c7d253a2c89f4f3a088ad8ec. + + poppler/XRef.cc | 25 +++++++++++++++++++++---- + 1 files changed, 21 insertions(+), 4 deletions(-) + +commit ff25e83abae1ca17e2e7dd6f20946026fca69fff +Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> +Date: Mon Sep 24 23:57:25 2007 -0700 + + Make perf-test compile on unix as well. + + test/Makefile.am | 16 ++++++- + test/perf-test-preview-dummy.cc | 1 + + test/perf-test.cc | 104 + ++++++++++++++++----------------------- + 3 files changed, 59 insertions(+), 62 deletions(-) + +commit 70f3bf42b3028d9a2e4aefdc2e1a458b3c77b0e7 +Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> +Date: Mon Sep 24 21:26:54 2007 -0700 + + Let perf-test.cc manage lifetime of rendered bitmap. + + test/perf-test-preview-win.cc | 7 ------- + 1 files changed, 0 insertions(+), 7 deletions(-) + +commit b622b252cba068a15eae77df5deb261dd98affaf +Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> +Date: Mon Sep 24 21:20:12 2007 -0700 + + Disable my_error for now - seems to corrupt memory. + + test/perf-test.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit bde8c9669ca6b43cb6a664bd14df164a718041ea +Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> +Date: Mon Sep 24 21:08:58 2007 -0700 + + Con't copy the file unless COPY_FILE is defined. + + test/perf-test.cc | 11 ++++++++++- + 1 files changed, 10 insertions(+), 1 deletions(-) + +commit bf9b46b012c64624818a2110af7c4b7e3b419728 +Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> +Date: Mon Sep 24 20:13:54 2007 -0700 + + Respect -loadonly cmd-line arg. + + test/perf-test.cc | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 2f664b654ca19135f0f8a0fe89872b9e0d526fa2 +Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> +Date: Mon Sep 24 19:41:45 2007 -0700 + + Fix msvc debug build. Fix bitmap leak in perf-test. + + makefile.vc | 6 ++++-- + test/perf-test.cc | 1 + + 2 files changed, 5 insertions(+), 2 deletions(-) + +commit 05d41cd5aec39b4e3c8949445a9986e5ca8b50dd +Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> +Date: Mon Sep 24 08:10:37 2007 -0700 + + Use GooTimer instead of my own timer. + + test/perf-test.cc | 98 + ++++------------------------------------------------ + 1 files changed, 8 insertions(+), 90 deletions(-) + +commit 05fbce5b6657e883ece9054c79576b25271a05a4 +Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> +Date: Mon Sep 24 08:01:11 2007 -0700 + + Make GooTimer work for Windows/msvc build. + + goo/GooTimer.cc | 69 + +++++++++++++++++++++++++++++++++++++----------------- + goo/GooTimer.h | 28 +++++++++++++-------- + poppler/Gfx.cc | 11 +------- + 3 files changed, 66 insertions(+), 42 deletions(-) + +commit 6347915085a487da08d39a859f4261fa812dab09 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Mon Sep 24 01:08:17 2007 -0700 + + Add Error.cc in msvc build and use setErrorFunction in perf-test. + + makefile.vc | 3 +-- + test/perf-test.cc | 10 +++++----- + 2 files changed, 6 insertions(+), 7 deletions(-) + +commit ed01b3965c57ce2a4eabf9c46b5319ea627d3324 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Mon Sep 24 01:03:09 2007 -0700 + + Match declaration of setErrorFunction with its definition. + + Also enable this code for Windows, since CDECL was what + was throwing msvc off. + + poppler/Error.cc | 12 +++--------- + 1 files changed, 3 insertions(+), 9 deletions(-) + +commit 71fb15f8bd131a13d8cf0f394fe601cfbb6e1772 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Mon Sep 24 00:38:29 2007 -0700 + + Even less compiler warnings. + + poppler/CairoOutputDev.cc | 6 +++--- + qt/poppler-page.cc | 3 +++ + utils/HtmlOutputDev.cc | 10 ++++++---- + 3 files changed, 12 insertions(+), 7 deletions(-) + +commit 7ba3f198a0651d2a7c91b7d9e10a5173dc3de0a3 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Mon Sep 24 00:32:37 2007 -0700 + + Even less compiler warnings. + + qt/poppler-document.cc | 8 ++++++++ + qt/poppler-private.h | 8 -------- + qt4/src/poppler-document.cc | 10 ++++++++++ + qt4/src/poppler-form.cc | 15 +++++++++++++++ + qt4/src/poppler-private.h | 25 ------------------------- + 5 files changed, 33 insertions(+), 33 deletions(-) + +commit ab1059f594cb9fccd8568ca2a535a363c7521daa +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Mon Sep 24 00:14:01 2007 -0700 + + Don't break aliasing. + + poppler/GlobalParams.cc | 40 ++++++++++++++++++---------------------- + 1 files changed, 18 insertions(+), 22 deletions(-) + +commit 71c47b30adf687a0bcece22834933267053360de +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Sun Sep 23 23:49:31 2007 -0700 + + Reduce compiler warnings. + + poppler/JBIG2Stream.cc | 16 ++++++++++++---- + 1 files changed, 12 insertions(+), 4 deletions(-) + +commit 8466d94929844c976bbad8bb7d1ea7f7f77cc196 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Sun Sep 23 23:34:52 2007 -0700 + + Reduce compiler warnings. Tabs to spaces. + + fofi/FoFiType1C.cc | 30 +++++++++++++++--------------- + 1 files changed, 15 insertions(+), 15 deletions(-) + +commit c53b8ccfba6fa4345086493f9e44212721c11d0a +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Sun Sep 23 23:23:34 2007 -0700 + + Reduce number of compiler warnings. + + poppler/CharCodeToUnicode.cc | 2 +- + poppler/Gfx.cc | 6 ++---- + poppler/PageLabelInfo.cc | 2 ++ + 3 files changed, 5 insertions(+), 5 deletions(-) + +commit abede2a06c5c9dc97b40479deda49621458f1171 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Sun Sep 23 23:03:36 2007 -0700 + + Reduce number of compiler warnings. + + glib/poppler-action.cc | 1 - + glib/poppler-document.cc | 9 ++------- + glib/poppler-page.cc | 3 +-- + qt/poppler-document.cc | 1 - + qt4/src/poppler-annotation.cc | 16 +++++++++++++--- + 5 files changed, 16 insertions(+), 14 deletions(-) + +commit 60f5bcea4a920441e25ae11d677636242aabb2db +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Sun Sep 23 22:48:06 2007 -0700 + + Remove unused variables. + + utils/pdftoppm.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3179eee44eb0afbc642675268b9a4abb16ccdde3 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Sun Sep 23 22:47:21 2007 -0700 + + Remove unused variables. + + utils/HtmlOutputDev.cc | 23 ----------------------- + 1 files changed, 0 insertions(+), 23 deletions(-) + +commit e9dc379190aa3166870d0b11a05ccc4e9dad2706 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Sun Sep 23 22:41:59 2007 -0700 + + Remove unused variables. + + poppler/ArthurOutputDev.cc | 16 +++++----------- + 1 files changed, 5 insertions(+), 11 deletions(-) + +commit 08bf7c1151d594d4c7d253a2c89f4f3a088ad8ec +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Sun Sep 23 22:28:16 2007 -0700 + + replace extremely confusing 'a*(int)sizeof(foo)/sizeof(foo) != a' + which, due to type promotions, if a is int, is equivalent to a < 0; + fix problems revealed by the change + + poppler/XRef.cc | 25 ++++--------------------- + 1 files changed, 4 insertions(+), 21 deletions(-) + +commit 5a1f670a4d16affeed86cdf643ab22f481caa3a5 +Author: Krzysztof Kowalczyk <kkowalczyk@kjkubu.(none)> +Date: Sun Sep 23 20:42:59 2007 -0700 + + ignore *.o files + + .gitignore | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit c156aed7234f82dea4cb384c1b8a7acdd34545be +Author: Krzysztof Kowalczyk <kkowalczyk@kjkubu.(none)> +Date: Sun Sep 23 20:41:19 2007 -0700 + + remove unused variables + + poppler/ABWOutputDev.cc | 10 ++-------- + 1 files changed, 2 insertions(+), 8 deletions(-) + +commit d0bdef4752be5fa609a0766ee87aa54d51611d9a +Author: Krzysztof Kowalczyk <kkowalczyk@kjkubu.(none)> +Date: Sat Sep 22 13:38:03 2007 -0700 + + undo accidental changes to file permissions + + 0 files changed, 0 insertions(+), 0 deletions(-) + +commit 6c69473f2f4a49757614ddd249e65bb7a13c63c1 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Fri Sep 21 08:09:53 2007 -0700 + + undo accidental mode change + + 0 files changed, 0 insertions(+), 0 deletions(-) + +commit e7e386e7ce8cb8eb8a7037ebdaa601524d332ae7 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Fri Sep 21 08:08:53 2007 -0700 + + more simplification by removing unneded code + + makefile.vc | 2 +- + test/perf-test.cc | 60 + ++++++++--------------------------------------------- + 2 files changed, 10 insertions(+), 52 deletions(-) + +commit 3e10604637ec193269a3155985476d3b83dc7d62 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Fri Sep 21 07:48:38 2007 -0700 + + for portability use bool/true/false instead of BOOL/TRUE/FALSE + + test/perf-test.cc | 176 + ++++++++++++++++++++++++++--------------------------- + 1 files changed, 86 insertions(+), 90 deletions(-) + +commit 634718936f2a95fac2a9d12fcea483b3d0ca8fa6 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Fri Sep 21 07:41:14 2007 -0700 + + simplify perf-test + + test/perf-test-pdf-engine.h | 78 + ----------------------------------------- + test/perf-test-preview-win.cc | 5 +-- + test/perf-test.cc | 75 + ++++++++++++++++++++++++++++++++++++++- + 3 files changed, 75 insertions(+), 83 deletions(-) + +commit 617550199762fab42ca2e202e641e047b3efbac0 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Fri Sep 21 05:20:16 2007 -0700 + + simplify perf-test code + + test/perf-test-pdf-engine.h | 67 +++-------------------- + test/perf-test-preview-dummy.cc | 3 +- + test/perf-test-preview-win.cc | 80 +++++++++++++++++++++++---- + test/perf-test.cc | 114 + +++----------------------------------- + 4 files changed, 86 insertions(+), 178 deletions(-) + +commit fb5bf808b88992c1772a10e4ed9fe788fb618417 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Fri Sep 21 03:03:26 2007 -0700 + + more msvc build fixes + + makefile.vc | 2 +- + test/perf-test.cc | 4 ++++ + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit 60829b08a7440f36014f68ec54bee7a742412738 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Fri Sep 21 03:02:34 2007 -0700 + + msvc build fixes + + msvc/poppler/poppler-config.h | 143 + +++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 143 insertions(+), 0 deletions(-) + +commit 853c22a174bae81139edc9aeded7f26ae2655cef +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Thu Sep 20 23:21:35 2007 -0700 + + add pre-made config.h for msvc build + + msvc/config.h | 62 + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 62 insertions(+), 0 deletions(-) + +commit 31c43b118bd4372134018be6f6693f77d1f6a39b +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Thu Sep 20 22:10:09 2007 -0700 + + remove unused variables + + poppler/CairoFontEngine.cc | 6 ++---- + poppler/CairoOutputDev.cc | 14 ++------------ + splash/SplashFTFontEngine.cc | 2 ++ + 3 files changed, 6 insertions(+), 16 deletions(-) + +commit 01b99f60e36dd955817f23911ef38947360f61f7 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Thu Sep 20 21:14:17 2007 -0700 + + remove unused variables + + poppler/GfxState.cc | 11 ++--------- + poppler/SplashOutputDev.cc | 9 +++------ + poppler/TextOutputDev.cc | 3 --- + 3 files changed, 5 insertions(+), 18 deletions(-) + +commit 7c406400532d68524a43cf963d894d3c4b269400 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Thu Sep 20 20:57:44 2007 -0700 + + remove unused variables + + poppler/Catalog.cc | 1 - + poppler/Form.cc | 5 ----- + poppler/GfxFont.cc | 6 ++---- + poppler/Page.cc | 2 +- + splash/Splash.cc | 5 ++++- + 5 files changed, 7 insertions(+), 12 deletions(-) + +commit 70f23389c97b1870b7311d97322cdd16b580a79d +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Thu Sep 20 20:23:59 2007 -0700 + + don't silence warnings about unused variables/functions to keep + programmers honest + + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit cdb6fcf98137473efd993e1374a6f010e9db67db +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Thu Sep 20 20:00:56 2007 -0700 + + Remove unused variables + + poppler/Annot.cc | 5 ++--- + 1 files changed, 2 insertions(+), 3 deletions(-) + +commit 0e76b49ac852a5a7ebae4c1f67b153e0b7c9f905 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Tue Sep 18 01:04:50 2007 -0700 + + Explain how to compile on Windows using msvc makefile. + + README.windows | 63 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 63 insertions(+), 0 deletions(-) + +commit c002b4dc75b2688ffe8a734cf3e15f5891797842 +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Tue Sep 18 00:04:47 2007 -0700 + + Add Windows/msvc makefile. + + Add native msvc windows makefile and pre-made + config.h for windows in msvc directory. + + makefile.vc | 149 + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 149 insertions(+), 0 deletions(-) + +commit 1f33fc58201c92120c587189d2e0e819f83167da +Author: Krzysztof Kowalczyk <kkowalczyk@tlapx60ubu.(none)> +Date: Mon Sep 17 23:53:02 2007 -0700 + + Start on a test program. + + Test program can be used for regression testing and + performance testing. It renders a page (or pages) + in a given PDF (or PDFs) and records rendering times. + For historical reasons the code is ugly and probably + only compiles on windows, but it'll get better. + + test/perf-test-pdf-engine.h | 131 ++++ + test/perf-test-preview-dummy.cc | 22 + + test/perf-test-preview-win.cc | 222 ++++++ + test/perf-test.cc | 1428 + +++++++++++++++++++++++++++++++++++++++ + 4 files changed, 1803 insertions(+), 0 deletions(-) + +commit b96db4ad27535c2666fccdfe0a3c04cc7c37792d +Author: Jeff Muizelaar <jeff@freiheit.infidigm.net> +Date: Mon Sep 17 20:28:38 2007 -0400 + + Avoid double free caused by 302 merge + + The ownership of the the string returned by getKey() changed with + the 302 merge + but this code was not updated. Found by Matthew Woehlke. + + qt4/src/poppler-document.cc | 4 +--- + 1 files changed, 1 insertions(+), 3 deletions(-) + +commit 2a495f19d4465e15fd2fa96656d904315c79a443 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Sep 17 16:52:45 2007 -0400 + + Simplify ChangeLog rule a bit. + + ChangeLog.mk | 81 + ---------------------------------------------------------- + Makefile.am | 7 +++-- + 2 files changed, 4 insertions(+), 84 deletions(-) + +commit 7d5abbeec55e4b90b139671d96cfdf58bdab70b8 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Sep 17 15:45:26 2007 -0400 + + Add dist hook to generate ChangeLog. + + Taken from cairo. It still need some tweaking. + + ChangeLog.mk | 81 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Makefile.am | 4 +++ + configure.ac | 2 +- + 3 files changed, 86 insertions(+), 1 deletions(-) + +commit 15ad81c64cd8b1cb438d41be402daa19a239db3d +Author: Albert Astals Cid <tsdgeos@bluebox.localdomain> +Date: Mon Sep 17 19:39:29 2007 +0200 + + Use = instead of == in qt.m4 + + m4/qt.m4 | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 70fabcb96e207b9b889bb32c0cf5ea3fc0aa08f8 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sun Sep 16 20:40:53 2007 -0400 + + Rename .cvsignore files to .gitignore and drop ChangeLog file. + + .cvsignore | 25 - + .gitignore | 25 + + ChangeLog | 4586 + --------------------------------------------- + fofi/.cvsignore | 8 - + fofi/.gitignore | 8 + + glib/.cvsignore | 11 - + glib/.gitignore | 11 + + glib/reference/.cvsignore | 18 - + glib/reference/.gitignore | 18 + + goo/.cvsignore | 8 - + goo/.gitignore | 8 + + poppler/.cvsignore | 10 - + poppler/.gitignore | 10 + + qt/.cvsignore | 7 - + qt/.gitignore | 7 + + qt4/.cvsignore | 3 - + qt4/.gitignore | 3 + + qt4/src/.cvsignore | 8 - + qt4/src/.gitignore | 8 + + qt4/tests/.cvsignore | 20 - + qt4/tests/.gitignore | 20 + + splash/.cvsignore | 8 - + splash/.gitignore | 8 + + test/.cvsignore | 11 - + test/.gitignore | 11 + + utils/.cvsignore | 12 - + utils/.gitignore | 12 + + 27 files changed, 149 insertions(+), 4735 deletions(-) + +commit c9f9403ffc5b95ae790c3c81284c7786afe33f4d +Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> +Date: Fri Sep 14 20:50:07 2007 +0000 + + Windows implementation for matching fonts that doesn't use fontconfig + + ChangeLog | 6 + + poppler/GlobalParamsWin.cc | 285 + ++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 291 insertions(+), 0 deletions(-) + +commit d18b5361a0504458da805ed6be037c9d648f9372 +Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> +Date: Fri Sep 14 20:47:11 2007 +0000 + + Update ChangeLog for previous checkin + + ChangeLog | 15 +++++++++++++++ + 1 files changed, 15 insertions(+), 0 deletions(-) + +commit 3330763ddca66b30d5ee60aab94d6fe0bbae9c8f +Author: Krzysztof Kowalczyk <kkowalczyk@gmail.com> +Date: Fri Sep 14 06:17:35 2007 +0000 + + windows/msvc compilation fixes + + poppler/DCTStream.h | 2 +- + poppler/Error.cc | 6 ++++++ + poppler/FlateStream.h | 2 +- + poppler/GlobalParams.cc | 12 ++++++++++-- + poppler/GlobalParams.h | 17 +++++++++++++++++ + poppler/Stream.cc | 2 +- + splash/SplashFTFontEngine.cc | 2 ++ + splash/SplashFontEngine.cc | 2 +- + splash/SplashFontFile.cc | 2 ++ + splash/SplashFontFile.h | 3 ++- + splash/SplashT1FontEngine.cc | 2 +- + 11 files changed, 44 insertions(+), 8 deletions(-) + +commit 6eb159ef34eb7e2fb8adcfc48afd84d5f50efbbd +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 10 17:38:05 2007 +0000 + + * autogen.sh: Support automake-1.10. + Patch by Krzysztof Kowalczyk <kkowalczyk@gmail.com> + + ChangeLog | 5 +++++ + autogen.sh | 11 ++++++----- + 2 files changed, 11 insertions(+), 5 deletions(-) + +commit 31bbc8c727cfecc79bd8da962ad8d99a0d1d3d33 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Sep 8 10:40:17 2007 +0000 + + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-ps-converter.cc: + Add PSConverter::setOutputDevice() to set a QIODevice where + writing the resulting PS. + + ChangeLog | 7 +++++ + qt4/src/poppler-ps-converter.cc | 51 + +++++++++++++++++++++++++++++++++++--- + qt4/src/poppler-qt4.h | 5 +++- + 3 files changed, 58 insertions(+), 5 deletions(-) + +commit b3d63d03c310f01cc5b23d00ffd2103c6891fef2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 5 20:22:32 2007 +0000 + + * qt4/src/poppler-ps-converter.cc: Fix Right<->Left + interchange + + ChangeLog | 1 + + qt4/src/poppler-ps-converter.cc | 4 ++-- + 2 files changed, 3 insertions(+), 2 deletions(-) + +commit 64368582d5ca4e28c236f440482c96f1dd3a8897 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 5 18:22:52 2007 +0000 + + * poppler/PSOutputDev.cc: Fix printing of second parameter + + ChangeLog | 4 ++++ + poppler/PSOutputDev.cc | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit eaf9d06cf0d08ccdc183759e0331dc2439a6f10f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Sep 5 10:57:09 2007 +0000 + + 2007-09-05 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-page.cc: + * glib/demo/render.c: Fix build with --disable-cairo-output. + + ChangeLog | 5 +++++ + glib/demo/render.c | 31 +++++++++++++++++++++++++++---- + glib/poppler-page.cc | 22 ++++++++++++---------- + 3 files changed, 44 insertions(+), 14 deletions(-) + +commit c0f488c2b0e115be3e1b7e4dc7baa38db5837498 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 4 22:04:52 2007 +0000 + + did not want to commit this + + gtk-doc.make | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3462851b4ea342651095f1803cd488bc3b3f5749 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 4 22:02:06 2007 +0000 + + * utils/pdftoppm.cc: Fix build on Sun Studio compiler. + Patch by Brian Cameron <brian.cameron@sun.com> + + ChangeLog | 5 +++++ + gtk-doc.make | 2 +- + utils/pdftoppm.cc | 2 +- + 3 files changed, 7 insertions(+), 2 deletions(-) + +commit cdf3b9062cc54d558b8dbeefb3211a920ff2cb94 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 3 19:23:11 2007 +0000 + + write news + fix qt4 build + + NEWS | 13 +++++++++++++ + qt4/src/Makefile.am | 3 ++- + 2 files changed, 15 insertions(+), 1 deletions(-) + +commit c82208a44f3b09c27bc33831641e4f746dd4361f +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 3 18:28:44 2007 +0000 + + * configure.ac: Bump version to 0.6 + * glib/Makefile.am + * poppler/Makefile.am + * qt/Makefile.am + * qt4/src/Makefile.am: Bump sonames + + ChangeLog | 8 ++++++++ + configure.ac | 2 +- + glib/Makefile.am | 2 +- + poppler/Makefile.am | 2 +- + qt/Makefile.am | 2 +- + qt4/src/Makefile.am | 2 +- + 6 files changed, 13 insertions(+), 5 deletions(-) + +commit 2a12409ebbf96ea3ca4556b71231a45ae37cb052 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 3 17:09:01 2007 +0000 + + * poppler/JBIG2Stream.cc: + * poppler/Stream.cc: Patch by Derek B. Noonburg + <derekn@foolabs.com> + to fix some errors in CCITTFaxStream and JBIG2Stream.cc + + ChangeLog | 6 ++++++ + poppler/JBIG2Stream.cc | 7 ++++--- + poppler/Stream.cc | 2 +- + 3 files changed, 11 insertions(+), 4 deletions(-) + +commit 0b483e71ef02b4040b665935c1018c8b30b9c1ca +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Sep 3 08:54:01 2007 +0000 + + 2007-09-03 Carlos Garcia Campos <carlosgc@gnome.org> + * gtk-doc.make: + * glib/poppler-document.cc: + * glib/poppler-form-field.cc: + * glib/poppler-page.cc: + * glib/reference/poppler-docs.sgml: + * glib/reference/poppler-sections.txt: + * glib/reference/poppler.types: + * glib/reference/tmpl/poppler-action.sgml: + * glib/reference/tmpl/poppler-attachment.sgml: + * glib/reference/tmpl/poppler-document.sgml: + * glib/reference/tmpl/poppler-enums.sgml: + * glib/reference/tmpl/poppler-form-field.sgml: + * glib/reference/tmpl/poppler-page.sgml: + * glib/reference/tmpl/poppler-private.sgml: + * glib/reference/tmpl/poppler.sgml: Update glib bindings API + documentation. + + ChangeLog | 19 ++ + glib/poppler-document.cc | 10 + + glib/poppler-form-field.cc | 205 +++++++++++++++++ + glib/poppler-page.cc | 12 +- + glib/reference/poppler-docs.sgml | 2 + + glib/reference/poppler-sections.txt | 108 +++++++++- + glib/reference/poppler.types | 2 + + glib/reference/tmpl/poppler-action.sgml | 36 +++- + glib/reference/tmpl/poppler-attachment.sgml | 65 ++++++ + glib/reference/tmpl/poppler-document.sgml | 50 +++++ + glib/reference/tmpl/poppler-enums.sgml | 60 +++++ + glib/reference/tmpl/poppler-form-field.sgml | 315 + +++++++++++++++++++++++++++ + glib/reference/tmpl/poppler-page.sgml | 236 ++++++++++++++++++++- + glib/reference/tmpl/poppler-private.sgml | 6 + + glib/reference/tmpl/poppler.sgml | 49 ++++ + gtk-doc.make | 34 ++-- + 16 files changed, 1181 insertions(+), 28 deletions(-) + +commit 289e3893cda45055951bb8d3b82a45644bc0b6c6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Sep 2 17:02:55 2007 +0000 + + * poppler/GfxState.cc: Pad zeroes instead of aborting when + rendering + 1-bit images and the stream is "too short" to mimic + Acroread and + ghostscript behaviour. Patch by <darren.kenny@sun.com>. Fixes + #12208 + + ChangeLog | 3 +++ + poppler/GfxState.cc | 4 ++-- + 2 files changed, 5 insertions(+), 2 deletions(-) + +commit 6f6c2180aca2e26ea0e3c2f21f11bc8f457c19c0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Sep 2 16:31:19 2007 +0000 + + * glib/demo/Makefile.am: Add + $(top_builddir)/poppler/libpoppler.la + * poppler/TextOutputDev.cc: Patch from Ed Catmur + <ed@catmur.co.uk> to + improve matching of half strings of decomposed + characters/ligatures. + + ChangeLog | 3 +++ + glib/demo/Makefile.am | 1 + + poppler/TextOutputDev.cc | 21 +++++++++++++-------- + 3 files changed, 17 insertions(+), 8 deletions(-) + +commit be1b5a0196cdfc78f74e08a023b477cac16eb0f3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Sep 2 16:06:03 2007 +0000 + + poppler/PDFDoc.cc: Don't enforce %%EOF at the end of file + + ChangeLog | 4 ++++ + poppler/PDFDoc.cc | 3 ++- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 500a87af9240344806c18ebbd05a89f4f4c69955 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Sep 2 00:53:42 2007 +0000 + + 2007-09-01 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: + * poppler/Error.cc: + * poppler/Error.h: Report any cairo errors when destroying + the cairo + context. + + ChangeLog | 7 +++++++ + poppler/CairoOutputDev.cc | 7 ++++++- + poppler/Error.cc | 7 +++++++ + poppler/Error.h | 1 + + 4 files changed, 21 insertions(+), 1 deletions(-) + +commit 0c22556bf70ff67eb388cdcd9784603030397785 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Sep 1 23:38:04 2007 +0000 + + 2007-09-01 Jeff Muizelaar <jeff@infidigm.net> + + * glib/demo/Makefile.am: Only build the demo app if the cflags + will be + appropriately set. + + ChangeLog | 5 +++++ + glib/demo/Makefile.am | 2 ++ + 2 files changed, 7 insertions(+), 0 deletions(-) + +commit a23d45dd6cd8a2ac4181170a9ee924fe49a9781b +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Sep 1 23:00:59 2007 +0000 + + 2007-09-01 Jeff Muizelaar <jeff@infidigm.net> + + * glib/poppler-page.cc: Add note about clipping + + ChangeLog | 4 ++++ + glib/poppler-page.cc | 2 ++ + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit bf489d5cebc467807f2b38f74f6a6e34a503a9ca +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Aug 30 18:39:51 2007 +0000 + + * poppler/Form.h: Remove unused methods. Fixes 12013 + + ChangeLog | 4 ++++ + poppler/Form.h | 3 --- + 2 files changed, 4 insertions(+), 3 deletions(-) + +commit a81cc06c855385911dffa826b9e1407d6097e8c8 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Aug 30 18:15:34 2007 +0000 + + 2007-08-30 Carlos Garcia Campos <carlosgc@gnome.org> + * poppler/TextOutputDev.cc: + * poppler/TextOutputDev.h: + * glib/poppler.h: + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/test-poppler-glib.c: Add support for word and line + selections. Based on patch by Kristian Høgsberg. + + ChangeLog | 10 ++++++ + glib/poppler-page.cc | 81 + ++++++++++++++++++++++++++++++++++++++++------ + glib/poppler-page.h | 2 + + glib/poppler.h | 4 +- + glib/test-poppler-glib.c | 2 +- + poppler/TextOutputDev.cc | 74 + +++++++++++++++++++++++++++++------------- + poppler/TextOutputDev.h | 34 +++++++++++++++---- + 7 files changed, 163 insertions(+), 44 deletions(-) + +commit 59ddb5cc8bec54305b6d256ad9975e95ecdcb935 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 27 18:37:55 2007 +0000 + + * poppler/UnicodeTypeTable.cc: Fix error on the NFKC text + matching + routine. Fixes bug #11775. Patch by Ed Catmur + <ed@catmur.co.uk> + + ChangeLog | 5 +++++ + poppler/UnicodeTypeTable.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit a6e46ce61670679f368e66c1a98a7d5d1c960c5b +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 27 17:56:29 2007 +0000 + + * qt4/src/Doxyfile: + * qt4/src/Mainpage.dox: + * qt4/src/poppler-annotation.h: + * qt4/src/poppler-form.h: + * qt4/src/poppler-link.h: + * qt4/src/poppler-qt4.h: + A few API documentation fixes and improvements. + + ChangeLog | 10 ++++++ + qt4/src/Doxyfile | 26 +++++------------ + qt4/src/Mainpage.dox | 26 ++++++++++------ + qt4/src/poppler-annotation.h | 34 ++++++++++++++++++++++ + qt4/src/poppler-form.h | 18 ++++++------ + qt4/src/poppler-link.h | 63 + +++++++++++++++++++++++++++++++++++++++-- + qt4/src/poppler-qt4.h | 44 ++++++++++++++++++++--------- + 7 files changed, 166 insertions(+), 55 deletions(-) + +commit a7f8d92fba8c45d6ca83568c045d5e324158ee6b +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 27 17:17:14 2007 +0000 + + * qt4/src/poppler-link.cc: + * qt4/src/poppler-link.h: + Initialise correctly, and missing empty destructor. + * qt4/src/poppler-annotation.cc: + Don't leak the private class. + + ChangeLog | 9 +++++++++ + qt4/src/poppler-annotation.cc | 4 ++-- + qt4/src/poppler-link.cc | 8 ++++++-- + qt4/src/poppler-link.h | 1 + + 4 files changed, 18 insertions(+), 4 deletions(-) + +commit 2b1ef8f06879eb0b79288d57540c238ea833db24 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 26 21:39:22 2007 +0000 + + Fix bug 12121 + + ChangeLog | 4 ++++ + utils/ImageOutputDev.cc | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit 20bcac5ee1988befb9c590a0d16cb615f0c49901 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 26 21:28:34 2007 +0000 + + forgot to cvs add + + qt4/src/poppler-annotation-private.h | 49 + ++++++++++++++++++++++++++++++++++ + 1 files changed, 49 insertions(+), 0 deletions(-) + +commit e48de657db0ef439457b4b5ca39b937da25d531e +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 26 18:11:01 2007 +0000 + + * qt4/src/poppler-annotation.cc: + * qt4/src/poppler-annotation.h: + Move all the private members of the *Annotation classes into + a common + shared private. + + ChangeLog | 4 + + qt4/src/poppler-annotation.cc | 969 + ++++++++++++++++++++++++++++++++++------- + qt4/src/poppler-annotation.h | 277 ++++++++---- + qt4/src/poppler-page.cc | 249 +++++++---- + 4 files changed, 1155 insertions(+), 344 deletions(-) + +commit 392f050f909b6a1250acf1971446a1849534482c +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 26 16:42:46 2007 +0000 + + * qt4/src/poppler-document.cc: + * qt4/src/poppler-embeddedfile.cc: + * qt4/src/poppler-fontinfo.cc: + * qt4/src/poppler-form.cc: + * qt4/src/poppler-form.h: + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-sound.cc: + * qt4/src/poppler-textbox.cc: + API work: remove 'const' and 'const&' from return values + with Qt + classes; make the non-copiable classes really non-copiable; + uninline a Document::page() method; other related small + changes. + * qt4/src/poppler-link.cc: + * qt4/src/poppler-link.h: + Make LinkDestination an implicitely shared class, with all + the private + members into the private class; move all the private members + of the + Link* classes into a common shared private. + + ChangeLog | 23 +++- + qt4/src/poppler-document.cc | 7 +- + qt4/src/poppler-embeddedfile.cc | 12 -- + qt4/src/poppler-fontinfo.cc | 12 +- + qt4/src/poppler-form.cc | 16 +- + qt4/src/poppler-form.h | 14 +- + qt4/src/poppler-link.cc | 373 + ++++++++++++++++++++++++++++++--------- + qt4/src/poppler-link.h | 67 +++++--- + qt4/src/poppler-qt4.h | 32 +++-- + qt4/src/poppler-sound.cc | 7 - + qt4/src/poppler-textbox.cc | 4 +- + 11 files changed, 404 insertions(+), 163 deletions(-) + +commit f215aca25fdd8fe287b717dde53f0be273d995e4 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun Aug 26 10:52:19 2007 +0000 + + 2007-08-26 Carlos Garcia Campos <carlosgc@gnome.org> + * configure.ac: + * glib/Makefile.am: + * glib/demo/Makefile.am: + * glib/demo/fonts.[ch]: + * glib/demo/info.[ch]: + * glib/demo/links.[ch]: + * glib/demo/main.c: + * glib/demo/outline.[ch]: + * glib/demo/page.[ch]: + * glib/demo/render.[ch]: + * glib/demo/utils.[ch]: Add poppler glib demo tool. + + ChangeLog | 14 ++ + configure.ac | 1 + + glib/Makefile.am | 2 +- + glib/demo/Makefile.am | 26 +++ + glib/demo/fonts.c | 276 +++++++++++++++++++++++++++ + glib/demo/fonts.h | 31 +++ + glib/demo/info.c | 243 ++++++++++++++++++++++++ + glib/demo/info.h | 31 +++ + glib/demo/links.c | 289 ++++++++++++++++++++++++++++ + glib/demo/links.h | 31 +++ + glib/demo/main.c | 205 ++++++++++++++++++++ + glib/demo/outline.c | 218 +++++++++++++++++++++ + glib/demo/outline.h | 31 +++ + glib/demo/page.c | 249 ++++++++++++++++++++++++ + glib/demo/page.h | 31 +++ + glib/demo/render.c | 498 + +++++++++++++++++++++++++++++++++++++++++++++++++ + glib/demo/render.h | 31 +++ + glib/demo/utils.c | 234 +++++++++++++++++++++++ + glib/demo/utils.h | 42 ++++ + 19 files changed, 2482 insertions(+), 1 deletions(-) + +commit 7c9529b70dc44bb001d21a3b47fc65916813dec1 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Aug 23 20:39:31 2007 +0000 + + 2007-08-23 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-page.cc: Add missing comma. + + ChangeLog | 4 ++++ + glib/poppler-page.cc | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit 3c4a85503261ee81a829a1683f1f5fa85d41f8ee +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Thu Aug 23 20:15:46 2007 +0000 + + 2007-08-23 Jeff Muizelaar <jeff@infidigm.net> + + * glib/poppler-page.cc: pass in -1 to displaySlice so that it + sets up + the slice size for us. This fixes the case of the wrong values + being + used when the pdf was rotated on its side. + Fixes #11913. + + ChangeLog | 7 +++++++ + glib/poppler-page.cc | 5 ++--- + 2 files changed, 9 insertions(+), 3 deletions(-) + +commit 3ba088d8caee3c40c2aba0cd85adcf9195ae88a3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Aug 22 21:29:32 2007 +0000 + + * splash/SplashBitmap.cc: + * splash/SplashBitmap.h: + * utils/pdftoppm.cc: Add the following features to pdftoppm + - if omitting input filename or using - for input filename + reads pdf from stdin + - if omitting output filename, prints output to stdout + - create image of a cropped rectangle of the pdf + - scale pdf to fit in a square of wanted size + Patch by Ilmari Heikkinen <ilmari.heikkinen@gmail.com> + + ChangeLog | 12 +++++ + splash/SplashBitmap.cc | 18 ++++++-- + splash/SplashBitmap.h | 2 + + utils/pdftoppm.cc | 107 + ++++++++++++++++++++++++++++++++++++++++------- + 4 files changed, 119 insertions(+), 20 deletions(-) + +commit 567e82c13aace4f40c7a555a62a3a4d223a46d92 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Aug 22 19:34:02 2007 +0000 + + 2007-08-22 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/GlobalParams.cc: Fix debug spew. Patch from Matthias + Clasen. + + ChangeLog | 4 ++++ + poppler/GlobalParams.cc | 1 - + 2 files changed, 4 insertions(+), 1 deletions(-) + +commit bc499987074d046baf29deafe4a29d57039c0c5e +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Aug 22 19:28:24 2007 +0000 + + 2007-08-22 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: Fix the computation of the padding + in the + image scaling code. + + ChangeLog | 5 +++++ + poppler/CairoOutputDev.cc | 6 ++++-- + 2 files changed, 9 insertions(+), 2 deletions(-) + +commit d9719233447cb4f85f2bf9d9ec6ef089caa21140 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Aug 19 16:20:21 2007 +0000 + + 2007-08-19 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: Avoid allocating the glyph array if + currentFont is not set in beginString. This closes a possible + memory leak. + + ChangeLog | 6 ++++++ + poppler/CairoOutputDev.cc | 3 +++ + 2 files changed, 9 insertions(+), 0 deletions(-) + +commit 099eb56896046e020f4ef0365e1ee382f85ec1ab +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Aug 15 18:52:20 2007 +0000 + + * poppler/JBIG2Stream.cc: Quick fix for bug #12014 + + ChangeLog | 4 ++++ + poppler/JBIG2Stream.cc | 16 +++++++++++----- + 2 files changed, 15 insertions(+), 5 deletions(-) + +commit 3b7e3645c85c7a3d341457f105835b58c935bd67 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Aug 15 00:04:48 2007 +0000 + + RC2 is out! (0.5.91) + + ChangeLog | 1 + + NEWS | 18 ++++++++++++++++++ + configure.ac | 2 +- + 3 files changed, 20 insertions(+), 1 deletions(-) + +commit c240daefe660ac3456dc0c5f5dc82aa53ebc3313 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Aug 14 23:10:37 2007 +0000 + + * poppler/Stream.cc: Fix CVE-2007-3387 by merging xpdf-3.02pl1.patch + + ChangeLog | 1 + + poppler/Stream.cc | 12 +++++------- + 2 files changed, 6 insertions(+), 7 deletions(-) + +commit 1ba884b6b98ac8d755c9adc9f23a7a68d8b17b54 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Aug 14 22:47:30 2007 +0000 + + * configure.ac: + * pòppler/Makefile.am: Patch by Vincent Torri + <vtorri@univ-evry.fr> to + fix linking under MinGW + + ChangeLog | 6 ++++++ + configure.ac | 13 +++++++++++++ + poppler/Makefile.am | 5 +++-- + 3 files changed, 22 insertions(+), 2 deletions(-) + +commit 3c31f923fcf1aeb361910eb1e9445cc28aa5b3ca +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Tue Aug 7 16:22:12 2007 +0000 + + 2007-08-07 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: Don't use the prescaleMethod + when we have a rotation as that case has not been tested. + Also make sure that scaledHeight is at least 1. + + ChangeLog | 6 ++++++ + poppler/CairoOutputDev.cc | 7 ++++++- + 2 files changed, 12 insertions(+), 1 deletions(-) + +commit af97e5f8e0f3beeb43acde92a0788c02d9718adf +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Aug 6 17:41:17 2007 +0000 + + 2007-08-06 Carlos Garcia Campos <carlosgc@gnome.org> + * poppler/Annot.cc: + * poppler/Annot.h: + * poppler/Form.cc: + * poppler/Form.h: + * poppler/Page.cc: Do not always regenerate appearance stream for + every form widget, but only when it's actually needed. + + ChangeLog | 9 +++++ + poppler/Annot.cc | 86 + ++++++++++++++++++++++++++++++++--------------------- + poppler/Annot.h | 8 ++-- + poppler/Form.cc | 25 ++------------- + poppler/Form.h | 4 ++- + poppler/Page.cc | 8 +---- + 6 files changed, 74 insertions(+), 66 deletions(-) + +commit 74627e71388ca0a4c0938a472c291ef87186f370 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Tue Jul 31 21:40:19 2007 +0000 + + 2007-07-31 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/GlobalParams.cc: s/GList/GooList/ some Windows code. + + ChangeLog | 4 ++++ + poppler/GlobalParams.cc | 8 ++++---- + 2 files changed, 8 insertions(+), 4 deletions(-) + +commit f421e2151345ac855b75e819e19343a90789b3bf +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Tue Jul 31 16:50:06 2007 +0000 + + 2007-07-31 Jeff Muizelaar <jeff@infidigm.net> + + * glib/poppler-document.cc: + * glib/poppler-document.h: Add poppler_fonts_iter_get_file_name. + + ChangeLog | 5 +++++ + glib/poppler-document.cc | 16 ++++++++++++++++ + glib/poppler-document.h | 1 + + 3 files changed, 22 insertions(+), 0 deletions(-) + +commit 4d57b8a12b845d5d5ac321d7a4bca980d60d429f +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Tue Jul 31 16:48:35 2007 +0000 + + 2007-07-31 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.h: Add comment about + CairoImageOutputDevice's + implementation. + + ChangeLog | 5 +++++ + poppler/CairoOutputDev.h | 1 + + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit f04a67006abdb5843ab481aa1e25b51abd1b1b64 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jul 31 11:41:53 2007 +0000 + + 2007-07-31 Carlos Garcia Campos <carlosgc@gnome.org> + * poppler/Form.cc: + * poppler/Form.h: Fix memory leak. + + ChangeLog | 5 +++++ + poppler/Form.cc | 9 +++++---- + poppler/Form.h | 4 ++-- + 3 files changed, 12 insertions(+), 6 deletions(-) + +commit ee9d556a8b413160911a535a0e9089b919ca29f5 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jul 31 11:40:22 2007 +0000 + + 2007-07-31 Carlos Garcia Campos <carlosgc@gnome.org> + * poppler/CairoOutputDev.h: Empty implementation of transparency + groups and soft masks in CairoImageOutputDev. Fixes a crash in + poppler_page_get_image_mapping. + + ChangeLog | 6 ++++++ + poppler/CairoOutputDev.h | 11 +++++++++++ + 2 files changed, 17 insertions(+), 0 deletions(-) + +commit e08779856c801b9968dc2d47e28e86abc1ec7110 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Tue Jul 31 05:29:57 2007 +0000 + + 2007-07-31 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/GfxFont.cc: Fix the case where the Encoding is + "Identity" + and ToUnicode exists. GfxCIDFont::getCodeToGIDMap makes + CIDTOGID map + from ToUnicde map, but when encoding is Identity, it should + not use + ToUnicode map to get GID. If encoding is Identity, No CIDTOGID + map is + needed. + Patch by Koji Otani. + Fixes #11413. + + ChangeLog | 10 ++++++++++ + poppler/GfxFont.cc | 1 + + 2 files changed, 11 insertions(+), 0 deletions(-) + +commit 86fc9a6f343be920f5159e745947401227e41a37 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Mon Jul 30 19:28:17 2007 +0000 + + 2007-07-30 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDev.h: Prescale image masks before giving + them + to cairo to improve the quality of the scaled image. Improves + #5589. + + ChangeLog | 6 + + poppler/CairoOutputDev.cc | 300 + +++++++++++++++++++++++++++++++++++++++++++-- + poppler/CairoOutputDev.h | 10 ++- + 3 files changed, 303 insertions(+), 13 deletions(-) + +commit f754246e47161e9bf99887201e283c1419ade4f1 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Mon Jul 30 19:07:45 2007 +0000 + + 2007-07-30 Jeff Muizelaar <jeff@infidigm.net> + + * configure.ac: Update require cairo version to 1.4 + + ChangeLog | 4 ++++ + configure.ac | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit bb20249ac676995725b617ef442f5feb01f78205 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Mon Jul 30 18:44:41 2007 +0000 + + 2007-07-30 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDev.h: Add transparency group support. + Fixes #7856. + + ChangeLog | 6 ++ + poppler/CairoOutputDev.cc | 133 + +++++++++++++++++++++++++++++++++++++++++++++ + poppler/CairoOutputDev.h | 21 +++++++- + 3 files changed, 159 insertions(+), 1 deletions(-) + +commit a85acecaeb0d122becbc52a385d918561e995eca +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Mon Jul 30 00:22:35 2007 +0000 + + 2007-07-29 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDev.h: transform the original matrix for + type3 fonts + instead of using set_matrix() + + ChangeLog | 6 ++++++ + poppler/CairoOutputDev.cc | 20 +++++++++++++++++--- + poppler/CairoOutputDev.h | 1 + + 3 files changed, 24 insertions(+), 3 deletions(-) + +commit a81a082169de32d01c36c969616a5c2279f1bac7 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Mon Jul 30 00:18:59 2007 +0000 + + 2007-07-29 Jeff Muizelaar <jeff@infidigm.net> + + * glib/test-poppler-glib.c: include <time.h> to fix compilation. + + ChangeLog | 4 ++++ + glib/test-poppler-glib.c | 1 + + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit 81393cb30f6287caf5195265cdc039555f2767d3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jul 28 08:22:40 2007 +0000 + + 2007-07-28 Carlos Garcia Campos <carlosgc@gnome.org> + * poppler/Annot.cc: + * poppler/Annot.h: + * poppler/Form.cc: + * poppler/Form.h: Make fieldLookup static in Form and use it from + both Form and Annot. + + ChangeLog | 8 ++++++ + poppler/Annot.cc | 43 +++++++++------------------------- + poppler/Annot.h | 1 - + poppler/Form.cc | 66 + ++++++++++++++++++++++++++--------------------------- + poppler/Form.h | 2 + + 5 files changed, 54 insertions(+), 66 deletions(-) + +commit 81b669dcb14bf821a49c9879f8d4129075647f5f +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jul 28 08:05:11 2007 +0000 + + 2007-07-28 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-page.h: Remove unneeded declarations. Fixes bug + #11744. Patch by Kouhei Sutou <kou@cozmixng.org>. + + ChangeLog | 5 +++++ + glib/poppler-page.h | 2 -- + 2 files changed, 5 insertions(+), 2 deletions(-) + +commit f2c4e5305009f1da770c99d3e2e3371ff37c75f3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri Jul 27 09:17:40 2007 +0000 + + 2007-07-27 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-document.cc: + * glib/poppler-document.h: + * glib/poppler-private.h: + * glib/test-poppler-glib.c: Make PopplerFontInfo GObject. Patch by + Kouhei Sutou <kou@cozmixng.org>. + + ChangeLog | 8 ++++++++ + glib/poppler-document.cc | 44 + ++++++++++++++++++++++++++++++++++++++++---- + glib/poppler-document.h | 6 +++++- + glib/poppler-private.h | 1 + + glib/test-poppler-glib.c | 2 +- + 5 files changed, 55 insertions(+), 6 deletions(-) + +commit 975c7cff10d9b00359e147329ae2c7a93f8a3833 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jul 25 17:20:06 2007 +0000 + + micro optimization + + qt4/src/poppler-page.cc | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 525a7f49dd95f2644870a1c59ca15124e30026b4 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jul 24 16:45:25 2007 +0000 + + 2007-07-24 Carlos Garcia Campos <carlosgc@gnome.org> + * poppler/Annot.cc: + * poppler/Form.cc: Several fixes in forms. Generate appearance for + field buttons that don't have an AP dict. Do not remove the first + character of the second and following lines in multiline text + fields. Fix a crash with pdf documents created by ooo which have + radio buttons. Look for some inheritable attributes in the + parent when needed. + + ChangeLog | 10 +++++++ + poppler/Annot.cc | 27 ++++++++++--------- + poppler/Form.cc | 77 + +++++++++++++++++++++++++++++++++++++---------------- + 3 files changed, 78 insertions(+), 36 deletions(-) + +commit 633a1cde65f86ee6577a68f4f8d36de43d14c714 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jul 15 21:03:50 2007 +0000 + + * utils/HtmlOutputDev.cc: + * utils/HtmlOutputDev.h: Create the html files in the + correct place, + not in the invocation dir. Fixes bug #11610 + + ChangeLog | 6 ++++++ + utils/HtmlOutputDev.cc | 37 ++++++++++--------------------------- + utils/HtmlOutputDev.h | 4 ---- + 3 files changed, 16 insertions(+), 31 deletions(-) + +commit ccb2d420ca8d818aa9ba1d64f08f5e94ab313a72 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jul 15 17:09:29 2007 +0000 + + * poppler/DCTStream.cc + * poppler/DCTStream.h: Implement less evil error handling. On + a + error_exit level error we don't want to actually exit the + program. See + http://bugs.kde.org/show_bug.cgi?id=147878 for a pdf with this + problem. libjpeg was printing "Bogus Huffman table definition" + and + exiting the program. + * poppler/Stream.cc: Remove bogus #warning + + ChangeLog | 10 ++++++++++ + poppler/DCTStream.cc | 17 ++++++++++++++++- + poppler/DCTStream.h | 1 + + poppler/Stream.cc | 1 - + 4 files changed, 27 insertions(+), 2 deletions(-) + +commit f9d82dfd299ae23a1baf3e35e2c3cd351129c525 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jul 14 18:23:42 2007 +0000 + + * utils/pdftops.cc: init width/height to -1 so it is + calculated if not + specified + + ChangeLog | 5 +++++ + utils/pdftops.cc | 4 ++-- + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit 1c04136e9538ccfaa2d6b968861682ca3b69ffb3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jul 14 15:23:31 2007 +0000 + + 2007-07-14 Pino Toscano <pino@kde.org> + * glib/poppler-action.h: + * glib/poppler-document.h: Remove trailing comma from the last + item of enums. + + ChangeLog | 6 ++++++ + glib/poppler-action.h | 2 +- + glib/poppler-document.h | 8 ++++---- + 3 files changed, 11 insertions(+), 5 deletions(-) + +commit b9b68cabce19a5e23911e5432ace8c13bd237391 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jul 14 15:15:57 2007 +0000 + + 2007-07-14 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-form-field.cc: + * glib/poppler-form-field.h: + * glib/test-poppler-glib.c: Make is_password a property instead of + a text form field type, since a text field could be multiline and + password at the same time. + + ChangeLog | 8 ++++++++ + glib/poppler-form-field.cc | 10 ++++++++-- + glib/poppler-form-field.h | 2 +- + glib/test-poppler-glib.c | 4 ++-- + 4 files changed, 19 insertions(+), 5 deletions(-) + +commit 14a8361039d708661b8699b2e7c4496135021a85 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 13 22:18:05 2007 +0000 + + * fofi/FoFiTrueType.cc + * fofi/FoFiTrueType.h + * poppler/CairoFontEngine.cc + * poppler/CharCodeToUnicode.cc + * poppler/CharCodeToUnicode.h + * poppler/GfxFont.cc + * poppler/GfxFont.h + * poppler/SplashOutputDev.cc: Patch by + Koji Otani <sho@bbr.jp> to fix several problems with + Japanese fonts. + Fixes bug 11413 + + ChangeLog | 13 ++ + fofi/FoFiTrueType.cc | 305 + ++++++++++++++++++++++++++++++++++++++++++ + fofi/FoFiTrueType.h | 12 ++ + poppler/CairoFontEngine.cc | 47 ++----- + poppler/CharCodeToUnicode.cc | 16 +++ + poppler/CharCodeToUnicode.h | 1 + + poppler/GfxFont.cc | 232 ++++++++++++++++++++++++++++---- + poppler/GfxFont.h | 2 + + poppler/SplashOutputDev.cc | 53 ++------ + 9 files changed, 578 insertions(+), 103 deletions(-) + +commit 8389099d8e8940e3f8920b14a83075d69bcd8e6c +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 13 18:21:02 2007 +0000 + + * poppler/FontInfo.cc: Fix the FontInfoScanner::scan method to + actually scan the number of requested pages + + ChangeLog | 6 ++++++ + poppler/FontInfo.cc | 12 ++++++------ + 2 files changed, 12 insertions(+), 6 deletions(-) + +commit 9ced4442372d08375e0ded62f79052d8a3ec9cd6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 13 18:08:44 2007 +0000 + + * poppler/GlobalParams.cc: Remove dead unused code from + Win32 ifdef + + ChangeLog | 4 ++++ + poppler/GlobalParams.cc | 6 ------ + 2 files changed, 4 insertions(+), 6 deletions(-) + +commit fb89fdb8de608ff94082e16819f042cddabf2bcc +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jul 11 18:52:12 2007 +0000 + + * poppler/PSOutputDev.cc + * poppler/PSOutputDev.h + * utils/pdftohtml.cc: Fix bug 9746. pdftohtml complex mode + had text + twice + + ChangeLog | 7 +++++++ + poppler/PSOutputDev.cc | 5 +++++ + poppler/PSOutputDev.h | 2 ++ + utils/pdftohtml.cc | 3 +-- + 4 files changed, 15 insertions(+), 2 deletions(-) + +commit 0c9fa59bf5edf3cfcca1792da51b904a7c7f7615 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jul 11 18:30:19 2007 +0000 + + 2007-07-11 Carlos Garcia Campos <carlosgc@gnome.org> + * poppler/Form.cc: + * poppler/XRef.cc: + * poppler/XRef.h: Fix memory leak. + + ChangeLog | 6 ++++++ + poppler/Form.cc | 49 ++++++++++++++++++++++++------------------------- + poppler/XRef.cc | 22 ++++++++++------------ + poppler/XRef.h | 2 +- + 4 files changed, 41 insertions(+), 38 deletions(-) + +commit 4ae7d43bd54c5b3e2f08c48441f741d3099e228f +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jul 11 18:12:26 2007 +0000 + + * goo/GooVector.h: Rename guard from _VECTOR_H to GOO_VECTOR_H + * goo/gfile.cc: GString -> GooString in Windows code + * poppler/GlobalParams.cc: GString -> GooString in Windows + code + * splash/SplashT1FontEngine.cc + * splash/SplashT1FontEngine.h + * splash/SplashT1FontFile.cc + * splash/SplashT1FontFile.h: T1 code is not supported, + but at least + make it compile :-D + + ChangeLog | 11 +++++++++++ + goo/GooVector.h | 4 ++-- + goo/gfile.cc | 6 +++--- + poppler/GlobalParams.cc | 26 +++++++++++++------------- + splash/SplashFontEngine.cc | 2 +- + splash/SplashT1FontEngine.cc | 8 ++++---- + splash/SplashT1FontEngine.h | 7 +++---- + splash/SplashT1FontFile.cc | 8 +++++--- + splash/SplashT1FontFile.h | 4 ++-- + 9 files changed, 44 insertions(+), 32 deletions(-) + +commit 7bd125ce96c603fd5cf42d7c6a29b542e82dd4ec +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jul 11 18:08:07 2007 +0000 + + 2007-07-11 Carlos Garcia Campos <carlosgc@gnome.org> + * poppler/Form.cc: + * poppler/Form.h: + * glib/poppler-form-field.cc: + * glib/poppler-form-field.h: + * glib/test-poppler-glib.c: Add a method to get the max length + allowed in text form fields. + + ChangeLog | 9 +++++++++ + glib/poppler-form-field.cc | 8 ++++++++ + glib/poppler-form-field.h | 1 + + glib/test-poppler-glib.c | 1 + + poppler/Form.cc | 11 +++++++++++ + poppler/Form.h | 4 ++++ + 6 files changed, 34 insertions(+), 0 deletions(-) + +commit 8a68855735e9d295d71685e82de39204d639ea7a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Jul 9 08:52:58 2007 +0000 + + 2007-07-09 Carlos Garcia Campos <carlosgc@gnome.org> + * poppler/Annot.cc: + * poppler/Annot.h: Render '*' instead of the actual content in + password form fields. Patch by Julien Rebetez <julien@fhtagn.net> + + ChangeLog | 6 ++++++ + poppler/Annot.cc | 52 + +++++++++++++++++++++++++++++----------------------- + poppler/Annot.h | 5 +++-- + 3 files changed, 38 insertions(+), 25 deletions(-) + +commit 53cf7d7084dc03a28239f11c94f2095bb02d6108 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jul 7 16:23:56 2007 +0000 + + 2007-07-07 Carlos Garcia Campos <carlosgc@gnome.org> + * poppler/Form.cc: + * poppler/Form.h: + * glib/poppler-form-field.cc: + * glib/poppler-form-field.h: + * glib/test-poppler-glib.c: Add a method to get the type of a Form + Field Button. + + ChangeLog | 9 +++++++++ + glib/poppler-form-field.cc | 18 ++++++++++++++++++ + glib/poppler-form-field.h | 8 ++++++++ + glib/test-poppler-glib.c | 26 +++++++++++++++++++++++--- + poppler/Form.cc | 5 +++++ + poppler/Form.h | 2 ++ + 6 files changed, 65 insertions(+), 3 deletions(-) + +commit de0a40181e5832a0dc263d40ed0a269867764623 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jul 7 15:28:29 2007 +0000 + + 2007-07-07 Carlos Garcia Campos <carlosgc@gnome.org> + * poppler/Form.cc: Fix a crash when setting state on buttons that + don't have state. + + ChangeLog | 5 +++++ + poppler/Form.cc | 3 +++ + 2 files changed, 8 insertions(+), 0 deletions(-) + +commit a33518a3283ff25aa5517bc535ddb61383b1cfdc +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 6 09:08:44 2007 +0000 + + * poppler/Form.cc: Fix a bug with FormField's destructor + which was not + checking if the FormField is terminal to determine wether + it needs to + delete children or widgets. Patch by + Julien Rebetez <julien@fhtagn.net> + + ChangeLog | 4 ++++ + poppler/Form.cc | 17 +++++++++++------ + 2 files changed, 15 insertions(+), 6 deletions(-) + +commit 43f0d5b9bb198cdcbc2f7111f294c6f947105314 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 6 08:47:11 2007 +0000 + + * goo/GooString.cc: + * poppler/ABWOutputDev.cc: Build on Sun Force compiler, + patch by + Darren Kenny <darren.kenny@sun.com> + + ChangeLog | 6 ++++++ + goo/GooString.cc | 2 +- + poppler/ABWOutputDev.cc | 4 +++- + 3 files changed, 10 insertions(+), 2 deletions(-) + +commit 4e7405071b69889362e4d49de3f881f0e3e261e3 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 5 13:04:01 2007 +0000 + + 2007-07-05 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-form-field.cc: Allow to set NULL in form fields + that can contain text. + + ChangeLog | 5 +++++ + glib/poppler-form-field.cc | 30 ++++++++++++------------------ + 2 files changed, 17 insertions(+), 18 deletions(-) + +commit 625510797c528257527003477fe28adbacfe80e7 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Thu Jul 5 08:13:51 2007 +0000 + + 2007-07-05 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-attachment.cc: + * glib/poppler-attachment.h: + * glib/test-poppler-glib.c: Rename cdate and mdate again to ctime + and mtime, since they are public attributes and we don't want to + break the API. + + ChangeLog | 8 ++++++++ + glib/poppler-attachment.cc | 4 ++-- + glib/poppler-attachment.h | 4 ++-- + glib/test-poppler-glib.c | 4 ++-- + 4 files changed, 14 insertions(+), 6 deletions(-) + +commit 9b2640f156f24b07c797d9461f84e64d550efa1a +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jul 4 13:57:31 2007 +0000 + + * qt4/src/poppler-form.cc: QStringToGooString -> + QStringToUnicodeGooString has FormWidgetText::setContent + wants to have + the unicode formated string + * qt4/src/poppler-private.h: create QStringToUnicodeGooString + + ChangeLog | 7 +++++++ + qt4/src/poppler-form.cc | 2 +- + qt4/src/poppler-private.h | 15 +++++++++++++++ + 3 files changed, 23 insertions(+), 1 deletions(-) + +commit b70115cf979b29f75c644518ae0e9c0dd9892ebf +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jul 4 13:06:38 2007 +0000 + + 2007-07-04 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-form-field.cc: Convert strings from UTF8 to UTF16BE + before setting them. + + ChangeLog | 5 +++++ + glib/poppler-form-field.cc | 34 ++++++++++++++++++++++++---------- + 2 files changed, 29 insertions(+), 10 deletions(-) + +commit d37843877a6f93a9f27502d07ad82cba79e9aa73 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Wed Jul 4 08:26:52 2007 +0000 + + 2007-07-04 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-attachment.cc: + * glib/poppler-attachment.h: Add size, creation and modification + date and checksum properties to attachments. Fix memory leaks. + * glib/test-poppler-glib.c: + * glib/poppler.h: + * glib/poppler-private.h: + * glib/poppler-document.cc: Add a function to convert a pdf date + into a GTime that is used by attachments and document + properties. Fix memory leak in attachments. + + ChangeLog | 12 ++++ + glib/poppler-attachment.cc | 25 +++++++- + glib/poppler-attachment.h | 16 +++-- + glib/poppler-document.cc | 142 + +++++++++++++++++++++++--------------------- + glib/poppler-private.h | 6 +- + glib/poppler.h | 1 + + glib/test-poppler-glib.c | 56 +++++++++++++++-- + 7 files changed, 171 insertions(+), 87 deletions(-) + +commit d933f47d4af0992059148259a189373b42499bbe +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jul 3 20:31:20 2007 +0000 + + * qt4/tests/poppler-fonts.cpp: For the sake of completeness, + add all + the enums + + ChangeLog | 2 ++ + qt4/tests/poppler-fonts.cpp | 28 ++++++++++++++++++++-------- + 2 files changed, 22 insertions(+), 8 deletions(-) + +commit d90b166cfbdc4857351baa627d158d5e0b6652b4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jul 3 16:46:51 2007 +0000 + + * poppler/Catalog.cc: Fix crash, + embeddedFileNameTree.getName(i) + returns a reference to its own data so does not have to + be deleted + * qt4/tests/poppler-attachments.cpp: Delete the doc, just + for sake of + correctness + + ChangeLog | 7 +++++++ + poppler/Catalog.cc | 1 - + qt4/tests/poppler-attachments.cpp | 1 + + 3 files changed, 8 insertions(+), 1 deletions(-) + +commit 7fa87eb2b093770271bc3a72de5b0b9dc228aa1b +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jul 3 14:01:40 2007 +0000 + + 2007-07-03 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-form-field.cc: + * glib/poppler-form-field.h: + * glib/test-poppler-glib.c: Add choice_commit_on_change function + to glib bindings. + + ChangeLog | 7 +++++++ + glib/poppler-form-field.cc | 8 ++++++++ + glib/poppler-form-field.h | 1 + + glib/test-poppler-glib.c | 2 ++ + 4 files changed, 18 insertions(+), 0 deletions(-) + +commit 8b67e0403f6eaab6770cc0b7861074ae0b6d85bb +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Tue Jul 3 13:49:18 2007 +0000 + + 2007-07-03 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-form-field.cc: + * glib/poppler-form-field.h: + * glib/test-poppler-glib.c: Fix a typo. + + ChangeLog | 6 ++++++ + glib/poppler-form-field.cc | 2 +- + glib/poppler-form-field.h | 2 +- + glib/test-poppler-glib.c | 2 +- + 4 files changed, 9 insertions(+), 3 deletions(-) + +commit 33a5765eb404a4b321b09c26af74c1ed64a5d474 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jul 3 13:22:54 2007 +0000 + + * poppler/Catalog.cc: + * poppler/Catalog.h: Add size and checksum properties to + the embeded + files + * qt4/src/poppler-embeddedfile.cc: + * qt4/src/poppler-qt4.h: Add size and checksum properties + to the qt4 + frontend + + ChangeLog | 9 +++++++++ + poppler/Catalog.cc | 19 ++++++++++++++++--- + poppler/Catalog.h | 13 +++++++++++-- + qt4/src/poppler-embeddedfile.cc | 16 ++++++++++++++++ + qt4/src/poppler-qt4.h | 14 ++++++++++++++ + 5 files changed, 66 insertions(+), 5 deletions(-) + +commit c7d21f9354bbe090cce6459124dcaadf1e46639e +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Jul 2 13:39:32 2007 +0000 + + 2007-07-02 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-form-field.cc: + * glib/poppler-form-field.h: + * glib/test-poppler-glib.c: + Use FILE_SELECT instead of FILESELECT and fix a typo. Patch by + Kouhei Sutou + + ChangeLog | 9 +++++++++ + glib/poppler-form-field.cc | 2 +- + glib/poppler-form-field.h | 2 +- + glib/test-poppler-glib.c | 2 +- + 4 files changed, 12 insertions(+), 3 deletions(-) + +commit 5e301064c62c6d58f488839d7bf804af912a3de1 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Mon Jul 2 13:34:26 2007 +0000 + + 2007-07-02 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-form-field.cc: + * glib/poppler-form-field.h: + * glib/test-poppler-glib.c: + Add poppler_form_field_is_read_only to glib bindings. Patch by + Kouhei Sutou + + ChangeLog | 9 +++++++++ + glib/poppler-form-field.cc | 8 ++++++++ + glib/poppler-form-field.h | 1 + + glib/test-poppler-glib.c | 6 +++++- + 4 files changed, 23 insertions(+), 1 deletions(-) + +commit 11875746ce28e8999bcad46167fcfea131cd267a +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jun 30 08:33:30 2007 +0000 + + 2007-06-30 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-page.cc: Use poppler_page_transition_get_type + instead of poppler_page_transition which doesn't exist. Patch by + Kouhei Sutou + + ChangeLog | 6 ++++++ + glib/poppler-page.cc | 2 +- + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit 0a5acaae3b9bfcd731bc4e072f35f9433aa773da +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jun 30 08:25:15 2007 +0000 + + 2007-06-30 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/Makefile.am: + * glib/poppler-form-field.cc: + * glib/poppler-form-field.h: + * glib/poppler-document.cc: + * glib/poppler-document.h: + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/poppler-private.h: + * glib/poppler.h: + * glib/test-poppler-glib.c: Improve forms API in the glib bindings + in order to make it more consistent with the current API and + easier to use. + + ChangeLog | 15 ++ + glib/Makefile.am | 2 + + glib/poppler-document.cc | 197 ++------------------------- + glib/poppler-document.h | 55 +-------- + glib/poppler-form-field.cc | 316 + ++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-form-field.h | 96 +++++++++++++ + glib/poppler-page.cc | 210 ++++++++++++----------------- + glib/poppler-page.h | 55 ++------- + glib/poppler-private.h | 11 +- + glib/poppler.h | 40 ++---- + glib/test-poppler-glib.c | 119 ++++++++++++++--- + 11 files changed, 662 insertions(+), 454 deletions(-) + +commit 2212874e57a6eb9db733b2e9a98f0cfcb88a8fc1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 26 21:31:07 2007 +0000 + + * poppler/Form.cc: Don't crash on documents with AcroForm + but no + AcroForm->Fields (it's mandatory but...) + + ChangeLog | 5 +++++ + poppler/Form.cc | 54 + +++++++++++++++++++++++++++++------------------------- + 2 files changed, 34 insertions(+), 25 deletions(-) + +commit e48ee9c4af6bf98b6988c51dcab9ee9ef6e3cafe +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sat Jun 23 18:06:07 2007 +0000 + + 2007-06-23 Carlos Garcia Campos <carlosgc@gnome.org> + * poppler/Annot.cc: + * poppler/Form.cc: Fix memory leaks. + + ChangeLog | 5 +++++ + poppler/Annot.cc | 2 +- + poppler/Form.cc | 13 +++++++++---- + 3 files changed, 15 insertions(+), 5 deletions(-) + +commit d874a2753e3ac51b6f539dfdf980435c8c381b4f +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jun 20 20:07:15 2007 +0000 + + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-document.cc: Allow access to a document's + metadata contents + from the qt4 binding. Based on patch by Jason Kivlighn + * qt4/tests/test-poppler-qt4.cpp: Print metadata if it exists + + ChangeLog | 5 +++++ + qt4/src/poppler-document.cc | 13 +++++++++++++ + qt4/src/poppler-qt4.h | 5 +++++ + qt4/tests/test-poppler-qt4.cpp | 1 + + 4 files changed, 24 insertions(+), 0 deletions(-) + +commit 08d4c437e735ac50a340c4ae17ee0eeccd00dc20 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jun 20 18:40:03 2007 +0000 + + * glib/poppler-document.cc: Allow access to a document's + metadata stream + through the glib binding. Patch by Jason Kivlighn + <jkivlighn@gmail.com> Approved by Carlos + + ChangeLog | 6 ++++++ + glib/poppler-document.cc | 21 +++++++++++++++++++++ + 2 files changed, 27 insertions(+), 0 deletions(-) + +commit cdd2a49dc99aa16ded674c58dbb50298f06cf18a +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jun 15 18:15:53 2007 +0000 + + * poppler/ABWOutputDev.cc: Replaces the getBiggestSeperator + function + at the ABWoutputdev with one that is easier to read/debug + and less likely to contain bugs. Some cosmetic fixes at the + functions recursiveXYC and splitnodes. Patch by + Jauco Noordzij <jauco.noordzij@gmail.com>. More info at + bug #11273 + + ChangeLog | 8 + + poppler/ABWOutputDev.cc | 384 + ++++++++++++----------------------------------- + 2 files changed, 106 insertions(+), 286 deletions(-) + +commit 7f23383197b0e2fa24be7b4925ea6f39eb95bbc1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jun 13 20:39:21 2007 +0000 + + * poppler/ABWOutputDev.cc + * poppler/ABWOutputDev.h: Remove dependency on debugxml. Patch + by + Jauco Noordzij <jauco.noordzij@gmail.com>. Fixes bug #11187 + + ChangeLog | 6 +++ + poppler/ABWOutputDev.cc | 80 + ++++++++++++++++++++++++++++++++++++++++++++++- + poppler/ABWOutputDev.h | 1 + + 3 files changed, 86 insertions(+), 1 deletions(-) + +commit 948520cd529ce47d1970aae6a0b8058128e37c30 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jun 13 18:50:40 2007 +0000 + + * goo/FixedPoint.h + * goo/gmem.h + * poppler/SecurityHandler.h + * poppler/poppler-config.h.in + * utils/ImageOutputDev.h: + Patch by Axel Howind <Axel.Howind@htp-tel.de> + - include USE_EXCEPTIONS and USE_FIXEDPOINT in + poppler-config.h.in + - fix typo (MULTITHREADED/MULTITHREADING) in + poppler.config.h.in + - change installed headers to include poppler-config.h + instead of + config.h + - use <poppler/poppler-config.h> instead of <poppler-config.h> + so that + installed headers can be used without including + .../include/poppler + in the include path + + ChangeLog | 16 ++++++++++++++++ + goo/FixedPoint.h | 2 +- + goo/gmem.h | 2 +- + poppler/SecurityHandler.h | 2 +- + poppler/poppler-config.h.in | 12 +++++++++++- + utils/ImageOutputDev.h | 2 +- + 6 files changed, 31 insertions(+), 5 deletions(-) + +commit 825461e47b05595805e87a0d2960b07197c8da8b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jun 13 18:24:56 2007 +0000 + + configure.ac: Fix detection of glib + + ChangeLog | 4 ++++ + configure.ac | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit a67a93fc6b4812a4f892b311c5b299e59283cd47 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jun 11 21:14:22 2007 +0000 + + * poppler/CMap.h: + * poppler/CharCodeToUnicode.h: + * poppler/GlobalParams.h: + * poppler/PageLabelInfo.h: + * poppler/UnicodeMap.h: Further include cleanup. Patch by + Axel Howind + on bug #11228 + + ChangeLog | 9 +++++++++ + poppler/CMap.h | 2 +- + poppler/CharCodeToUnicode.h | 2 +- + poppler/GlobalParams.h | 2 +- + poppler/PageLabelInfo.h | 6 +++--- + poppler/UnicodeMap.h | 2 +- + 6 files changed, 16 insertions(+), 7 deletions(-) + +commit 051b31af053cac4727718169b79b25451a4bdd95 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jun 11 21:11:05 2007 +0000 + + * qt/poppler-qt.h + * qt4/src/poppler-qt4.h: Headers cleanup + + ChangeLog | 5 +++++ + qt/poppler-qt.h | 6 +++--- + qt4/src/poppler-qt4.h | 8 ++++---- + 3 files changed, 12 insertions(+), 7 deletions(-) + +commit 3e1597b80fc6750f1ec3269f9819aa8225879524 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jun 8 22:39:23 2007 +0000 + + poppler/Annot.cc: Fix leak + + ChangeLog | 4 ++++ + poppler/Annot.cc | 1 + + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit 49535c20b4f71d1c1381134233e2e1449cf560c0 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Thu Jun 7 21:23:03 2007 +0000 + + 2007-06-07 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/ABWOutputDev.cc: Change "and", "or", "not" to "&&", + "||", + "!" for consistency with the rest of the code. Patch by Jens + Granseuer + + ChangeLog | 5 +++ + poppler/ABWOutputDev.cc | 93 + ++++++++++++++++++++++++----------------------- + 2 files changed, 52 insertions(+), 46 deletions(-) + +commit dd8fa975bf51dd18120369d0ef2d8f1781e04d93 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jun 2 09:18:11 2007 +0000 + + correct form of patch 11102 + + utils/HtmlFonts.cc | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit cdf70857ece0748f13b11c923ccf9626094555b4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jun 1 18:34:48 2007 +0000 + + * poppler/ArthurOutputDev.cc + * splash/SplashFTFont.cc + * splash/SplashMath.h: Make it compile with + --enable-fixedpoint. Fixes + bug 11110 + + ChangeLog | 7 +++++++ + poppler/ArthurOutputDev.cc | 8 ++++---- + splash/SplashFTFont.cc | 8 ++++---- + splash/SplashMath.h | 2 +- + 4 files changed, 16 insertions(+), 9 deletions(-) + +commit 90b1a404629a884cc32737a3a729c9a75f7a59c1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed May 30 18:33:24 2007 +0000 + + * configure.ac: Fix to check for glib-2.0 not glib that is + 1.0. Patch + came though Pardus developers and they don't remember where + they got + it from. + + ChangeLog | 6 ++++++ + configure.ac | 2 +- + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit 03d766ea1ddd4ce6d938f96b53906a7dc8bd179a +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed May 30 18:29:57 2007 +0000 + + make dist needs this + + qt4/src/Makefile.am | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit d540c04268047fdd125ad932ca05c7553a97c0fe +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed May 30 17:50:00 2007 +0000 + + * utils/HtmlFonts.cc: Make pdftohtml not pollute stdout. Patch + by + Nanning Buitenhuis <nanning@elvenkind.com> + + And some changes in glib/reference/tmpl + + ChangeLog | 5 + + glib/reference/tmpl/poppler-document.sgml | 4 + + glib/reference/tmpl/poppler-enums.sgml | 150 + +++++++++++++++++++++++++++++ + glib/reference/tmpl/poppler-page.sgml | 5 +- + glib/reference/tmpl/poppler-unused.sgml | 130 + ------------------------- + utils/HtmlFonts.cc | 2 +- + 6 files changed, 162 insertions(+), 134 deletions(-) + +commit ce414f2a36f4d97a3bddfd42baabdc1e34bf9321 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue May 29 22:01:58 2007 +0000 + + 2007-05-29 Kristian Høgsberg <krh@redhat.com> + + * poppler/gen-unicode-tables.py: Add this script to fix distcheck. + + ChangeLog | 4 ++++ + poppler/gen-unicode-tables.py | 38 + ++++++++++++++++++++++++++++++++++++++ + 2 files changed, 42 insertions(+), 0 deletions(-) + +commit 97e602752b05f3690acb1821bdca31c5771361e1 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun May 27 11:24:40 2007 +0000 + + 2007-05-27 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/test-poppler-glib.c: Add forms test + * glib/poppler-page.cc: + * glib/poppler-page.h: + Fix indentation, some code cleanups and memory leaks. + + ChangeLog | 7 ++ + glib/poppler-page.cc | 198 + +++++++++++++++++++++++++++------------------ + glib/poppler-page.h | 6 +- + glib/test-poppler-glib.c | 39 +++++++++ + 4 files changed, 168 insertions(+), 82 deletions(-) + +commit 3d31c2b1ea913fc80211f1c6fed9b3666f124049 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Sun May 27 10:12:56 2007 +0000 + + 2007-05-27 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-page.cc: + * glib/poppler-page.h: + Add missing image mapping type definition. + + ChangeLog | 6 ++++++ + glib/poppler-page.cc | 48 + +++++++++++++++++++++++++++++++++++++++++++++--- + glib/poppler-page.h | 5 +++++ + 3 files changed, 56 insertions(+), 3 deletions(-) + +commit 8284a769568322066a9d4626bd9b2cf3d18a6487 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat May 26 23:20:12 2007 +0000 + + * configure.ac: + * NEWS: Bump release to 0.5.9 (0.6 Release Candidate) + + ChangeLog | 2 ++ + NEWS | 15 +++++++++++++++ + configure.ac | 2 +- + 3 files changed, 18 insertions(+), 1 deletions(-) + +commit e6ff9e0d95e058f6aff3c72d5f4d7d7ccf661999 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat May 26 22:33:21 2007 +0000 + + * poppler-qt.pc.in: + * poppler-qt4.pc.in: + * qt/Makefile.am: + * qt4/src/Makefile.am: Install qt3 and qt4 headers in + separate dirs. + That way be can reuse poppler-page-transition.h and distros + don't get + conflicts when making separate qt3 and qt4 packages + + ChangeLog | 9 +++++++++ + poppler-qt.pc.in | 2 +- + poppler-qt4.pc.in | 2 +- + qt/Makefile.am | 2 +- + qt4/src/Makefile.am | 2 +- + 5 files changed, 13 insertions(+), 4 deletions(-) + +commit fefefe495a182c1745314186b99441b9e76ba5b4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri May 25 23:17:58 2007 +0000 + + * qt4/src/poppler-link-extractor-private.cc: + * qt4/src/poppler-link-extractor-private.h: + * qt4/src/poppler-link.cc: + * qt4/src/poppler-link.h: Return link coordinates in 0..1 + range + instead of 0..size, much more easier to do user<->dev + transformations + * qt4/src/poppler-private.h: Fix indentation + + ChangeLog | 6 ++++++ + qt4/src/poppler-link-extractor-private.h | 1 + + qt4/src/poppler-link-extractor.cc | 12 ++++++------ + qt4/src/poppler-link.cc | 25 +++++++++++++++---------- + qt4/src/poppler-link.h | 7 ++++++- + qt4/src/poppler-private.h | 15 ++++++++------- + 6 files changed, 42 insertions(+), 24 deletions(-) + +commit ecaeaa9512d1dae4a036703ea8739102a8e463f0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri May 25 22:30:20 2007 +0000 + + * qt4/src/poppler-link-extractor.cc: Use correct page box + to extract + link clickable area + + ChangeLog | 5 +++++ + qt4/src/poppler-link-extractor.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 774a9456c668ef70b2e8f17d59f8f427aa97bad5 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Fri May 25 18:43:04 2007 +0000 + + 2007-05-25 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/GfxFont.cc: + * poppler/GfxFont.h: + * poppler/GlobalParams.cc: + Don't cache DisplayFontParams by font name, instead cache them + in GfxFont. Fixes #8140. + + ChangeLog | 8 ++++++++ + poppler/GfxFont.cc | 2 ++ + poppler/GfxFont.h | 6 ++++++ + poppler/GlobalParams.cc | 4 ++-- + 4 files changed, 18 insertions(+), 2 deletions(-) + +commit a88fadf0bb9af55c83c9c4f7d08deb17d6aa9ae4 +Author: Carlos Garcia Campos <carlosgc@gnome.org> +Date: Fri May 25 17:33:37 2007 +0000 + + 2007-05-25 Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/poppler.h: + Add selection style parameter to render_selection in order + to allow + requesting selections of words and paragraphs. + + ChangeLog | 8 ++++++++ + glib/poppler-page.cc | 30 ++++++++++++++++-------------- + glib/poppler-page.h | 6 ++++-- + glib/poppler.h | 7 +++++++ + 4 files changed, 35 insertions(+), 16 deletions(-) + +commit bf195b489c22875695e202d6ca6659144ef57e61 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed May 23 21:20:58 2007 +0000 + + * qt4/src/poppler-document.cc: + * qt4/src/poppler-private.h: + Better handle the setting of the vector antialiasing for + Splash. + * qt4/src/Mainpage.dox: + * qt4/src/poppler-link.h: + * qt4/src/poppler-qt4.h: + A few of API documentation fixes and improvements. + + ChangeLog | 10 +++++++ + qt4/src/Mainpage.dox | 8 +---- + qt4/src/poppler-document.cc | 5 ++- + qt4/src/poppler-link.h | 4 ++- + qt4/src/poppler-private.h | 1 + + qt4/src/poppler-qt4.h | 57 + ++++++++++++++++++++++++++++-------------- + 6 files changed, 57 insertions(+), 28 deletions(-) + +commit 36d1fe292778ba29990a389c50a0df0d51f11913 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 21 21:42:38 2007 +0000 + + Fix assert in bug 11023 + + ChangeLog | 4 ++++ + glib/poppler-action.cc | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit 5b411246a2cce6ed3bb2d8c9e9d856227b6aba7f +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 21 21:39:08 2007 +0000 + + * glib/poppler-page.cc: + * glib/poppler-page.h: + poppler_page_render_section() for cairo. Bug 7023 + + ChangeLog | 6 +++ + glib/poppler-page.cc | 88 + ++++++++++++++++++++++++++++++++++++++++++++------ + glib/poppler-page.h | 9 +++++ + 3 files changed, 93 insertions(+), 10 deletions(-) + +commit 409f2a9cb31add29accb87011331c50dc08110cd +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 21 21:35:10 2007 +0000 + + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/poppler-private.h: + * glib/poppler.h: + * glib/test-poppler-glib.c: + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDev.h: Extend CairoOutputdev to do + image caching when rendering + + ChangeLog | 11 +++ + glib/poppler-page.cc | 161 ++++++++++++++++++++++++++++++++-- + glib/poppler-page.h | 10 ++ + glib/poppler-private.h | 3 + + glib/poppler.h | 9 +- + glib/test-poppler-glib.c | 27 ++++++- + poppler/CairoOutputDev.cc | 215 + +++++++++++++++++++++++++++++++++++++++++++++ + poppler/CairoOutputDev.h | 122 +++++++++++++++++++++++++ + 8 files changed, 545 insertions(+), 13 deletions(-) + +commit afd11ec66430dae084b5a5560333e933460fc637 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 21 21:29:09 2007 +0000 + + * poppler/Annot.cc: avoid crashing if the font for the + drawing methods + can not be found + * poppler/Form.cc: fix memory leak + * qt4/src/poppler-private.h: fix the UnicodeParsedString + function to + really work and not crash + * splash/SplashTypes.h: RGB8X mode makes max number of + components in + any SplashColor always be 4 + + ChangeLog | 11 +++++++++++ + poppler/Annot.cc | 6 ++++++ + poppler/Form.cc | 1 + + qt4/src/poppler-private.h | 5 ++++- + splash/SplashTypes.h | 6 +----- + 5 files changed, 23 insertions(+), 6 deletions(-) + +commit f019c8a8efde004e1663ea88cb48c0e46318d936 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu May 17 21:32:57 2007 +0000 + + 2007-05-17 Pino Toscano <pino@kde.org> + + * qt4/src/poppler-link.cc: + Give some default values to LinkDestination + * qt4/src/poppler-private.h: + Fix memory leak when converting QString -> GooString + + ChangeLog | 7 +++++++ + qt4/src/poppler-link.cc | 12 ++++++++++++ + qt4/src/poppler-private.h | 4 +++- + 3 files changed, 22 insertions(+), 1 deletions(-) + +commit d68a4eb44b5390b3093774f39a6805ad2e95c146 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun May 13 00:53:43 2007 +0000 + + 2007-05-12 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/Annot.cc: Only do appearance generation for text, + choice or + other fields that contain text. Patch by Julien Rebetez. + + ChangeLog | 5 +++++ + poppler/Annot.cc | 52 + ++++++++++++++++++++++++++++++++++++++++++++++------ + 2 files changed, 51 insertions(+), 6 deletions(-) + +commit 96f8731e90af1abce67d00a3febc11880c69ce62 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 7 18:41:09 2007 +0000 + + * Catalog.cc: Fix leak + * Form.cc: Fix leak, provide empty + FormPageWidgets::~FormPageWidgets + implementation + * Page.cc: Fix leak + + ChangeLog | 7 +++++++ + poppler/Catalog.cc | 1 + + poppler/Form.cc | 5 +++++ + poppler/Page.cc | 1 + + 4 files changed, 14 insertions(+), 0 deletions(-) + +commit d46553d696b2d7fe416ce8db40db54dd1d7c6733 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Apr 30 22:34:21 2007 +0000 + + * poppler/Makefile.am: Don't link cairo to all poppler, + just to + poppler_cairo so when compiling the qt frontend and the + glib frontend + the qt one does not end up depending on cairo + + ChangeLog | 6 ++++++ + poppler/Makefile.am | 1 - + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit d5c52409c532a126bcb8eb65f6f1390113a5f258 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Apr 29 17:37:38 2007 +0000 + + jeff committed this line by mistake + + ChangeLog | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 6ddc11ef4c534369ee104422bfb989603c466790 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Apr 29 17:33:58 2007 +0000 + + 2007-04-29 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/UnicodeTypeTable.cc: Make some of the unicode tables + const + which gets rid of about 20k of data. + + text data bss dec hex filename + before: 1415838 128864 8 1544710 179206 libpoppler.so + after: 1404574 140128 8 1544710 179206 libpoppler.so + + ChangeLog | 10 ++++++++++ + poppler/UnicodeTypeTable.cc | 24 ++++++++++++------------ + 2 files changed, 22 insertions(+), 12 deletions(-) + +commit c5613ab5ce65fc84eb3a5584cee1454171173fa7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 28 23:25:59 2007 +0000 + + * poppler/SplashOutputDev.cc: + * qt/poppler-private.h: + * qt4/src/poppler-private.h: + * splash/Splash.cc: + * splash/SplashBitmap.cc: + * splash/SplashTypes.h: Rename splashModeRGBX8 to + splashModeXBGR8 and + hopefully fix qt frontends image generation + + ChangeLog | 10 ++++ + poppler/SplashOutputDev.cc | 102 + ++++++++++++++++++++++++++++++++------------ + qt/poppler-private.h | 2 +- + qt4/src/poppler-private.h | 2 +- + splash/Splash.cc | 44 ++++++++++--------- + splash/SplashBitmap.cc | 16 +++--- + splash/SplashTypes.h | 4 +- + 7 files changed, 120 insertions(+), 60 deletions(-) + +commit 6479ce224f1393235ca9888dfe0710327fbfccd2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 28 22:12:22 2007 +0000 + + fix merging problems + + splash/Splash.cc | 1 + + splash/SplashBitmap.cc | 1 - + 2 files changed, 1 insertions(+), 1 deletions(-) + +commit e2ac4ada3e29139053871ff7f53772e1ccc7adc0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 28 15:39:36 2007 +0000 + + \n at the end of the printf + Although i'm not sure we want to printf this... + + poppler/GlobalParams.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 9b8133940638c95940edcb9b98126ca9a4f7b8d4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 28 12:00:38 2007 +0000 + + * qt4/src/Makefile.am: + * qt4/src/poppler-document.cc: + * qt4/src/poppler-ps-converter.cc: + * qt4/src/poppler-qt4.h: Replace Document::print function + with lots of + arguments with a helper class with lots of functions. Will + help + mantaining BC in case we decide to add more functionality + to the + printing process. + + ChangeLog | 10 ++ + qt4/src/Makefile.am | 1 + + qt4/src/poppler-document.cc | 39 +------- + qt4/src/poppler-ps-converter.cc | 190 + +++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-qt4.h | 119 +++++++++++++++++++++---- + 5 files changed, 307 insertions(+), 52 deletions(-) + +commit 26d5fefcd4c858e2ebd689d963a65773957ac808 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 28 11:35:34 2007 +0000 + + * qt4/src/poppler-page.cc: + Hopefully fix the calculation of the image size when rendering + using + ArthurOutputDev. + + ChangeLog | 6 ++++++ + qt4/src/poppler-page.cc | 2 +- + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit 218364bc4951682de8e63e1bd3f061636b08b615 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 28 11:34:14 2007 +0000 + + * glib/poppler-document.h: + * poppler/FontInfo.h: + * qt/poppler-qt.h: + * qt4/src/poppler-qt4.h: GfxFontType changed, adapt enums + of the + frontends and helper classes. Forgot to do it before merging. + + ChangeLog | 8 ++++++++ + glib/poppler-document.h | 6 +++++- + poppler/FontInfo.h | 6 +++++- + qt/poppler-qt.h | 6 +++++- + qt4/src/poppler-qt4.h | 20 ++++++++++++-------- + 5 files changed, 35 insertions(+), 11 deletions(-) + +commit c1a40d3b4e9b27e34c94c9477a0313534563a394 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 28 11:20:58 2007 +0000 + + * qt4/src/poppler-annotation.h: + Make the header clean. + + ChangeLog | 5 +++++ + qt4/src/poppler-annotation.h | 3 +++ + 2 files changed, 8 insertions(+), 0 deletions(-) + +commit 3f4bf880b95e28a1ae7a38b18b341e089860780c +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 28 11:16:49 2007 +0000 + + * qt4/src/Makefile.am: + * qt4/src/poppler-link-extractor-private.h: + * qt4/src/poppler-link-extractor.cc: + * qt4/src/poppler-page-private.h: + * qt4/src/poppler-page.cc: + * qt4/src/poppler-private.h: + * qt4/src/poppler-qt4.h: + Getting the links of a page now is not more dependant on + the current + output device, and can be done anytime; thus, the doLinks + parameter + of the Page::render() can be dropped. + + ChangeLog | 13 +++++ + qt4/src/Makefile.am | 3 +- + qt4/src/poppler-link-extractor-private.h | 55 ++++++++++++++++++++++ + qt4/src/poppler-link-extractor.cc | 74 + ++++++++++++++++++++++++++++++ + qt4/src/poppler-page-private.h | 38 +++++++++++++++ + qt4/src/poppler-page.cc | 52 +++------------------ + qt4/src/poppler-private.h | 5 ++- + qt4/src/poppler-qt4.h | 4 +- + 8 files changed, 195 insertions(+), 49 deletions(-) + +commit 7f9eec9ef4e7dc895d2a3e38014b6368cc7564b6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Apr 27 22:41:10 2007 +0000 + + 2007-04-28 Albert Astals Cid <aacid@kde.org> + + * qt4/*: Stop requyring users to declare UNSTABLE_POPPLER_QT4 + + ChangeLog | 4 ++++ + qt4/src/Doxyfile | 2 +- + qt4/src/Mainpage.dox | 3 +-- + qt4/src/poppler-document.cc | 2 -- + qt4/src/poppler-embeddedfile.cc | 2 -- + qt4/src/poppler-fontinfo.cc | 2 -- + qt4/src/poppler-form.cc | 1 - + qt4/src/poppler-link.cc | 2 -- + qt4/src/poppler-page.cc | 1 - + qt4/src/poppler-qt4.h | 3 --- + qt4/src/poppler-sound.cc | 2 -- + qt4/src/poppler-textbox.cc | 2 -- + qt4/tests/check_attachments.cpp | 1 - + qt4/tests/check_dateConversion.cpp | 1 - + qt4/tests/check_fonts.cpp | 1 - + qt4/tests/check_metadata.cpp | 1 - + qt4/tests/check_pagelayout.cpp | 1 - + qt4/tests/check_pagemode.cpp | 1 - + qt4/tests/check_permissions.cpp | 1 - + qt4/tests/poppler-attachments.cpp | 1 - + qt4/tests/poppler-fonts.cpp | 1 - + qt4/tests/stress-poppler-qt4.cpp | 1 - + qt4/tests/test-password-qt4.cpp | 1 - + qt4/tests/test-poppler-qt4.cpp | 1 - + 24 files changed, 6 insertions(+), 32 deletions(-) + +commit 45993a6faafd7646075bc6630d5d2ad7a44f7e20 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Apr 27 22:26:09 2007 +0000 + + 2007-04-28 Carlos Garcia Campos <carlosgc@gnome.org> + reviewed and some code by: Albert Astals Cid <aacid@kde.org> + + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/poppler.h: + * glib/test-poppler-glib.c: + * poppler/Makefile.am: + * poppler/PageTransition.cc: + * poppler/PageTransition.h: + * qt/poppler-page-transition.cc: + * qt/poppler-page-transition.h: Move Page Transition parsing + from qt + frontends to poppler core. Expose Page transitions on the glib + frontend. + + ChangeLog | 15 +++ + glib/poppler-page.cc | 122 +++++++++++++++++++++++++ + glib/poppler-page.h | 111 ++++++++++++++---------- + glib/poppler.h | 58 +++++++++--- + glib/test-poppler-glib.c | 60 +++++++++++++ + poppler/Makefile.am | 2 + + poppler/PageTransition.cc | 197 + +++++++++++++++-------------------------- + poppler/PageTransition.h | 86 ++++++++++++++++++ + qt/poppler-page-transition.cc | 145 ++++++------------------------- + qt/poppler-page-transition.h | 9 ++- + 10 files changed, 497 insertions(+), 308 deletions(-) + +commit 877d6b202a75eb12119b16e740f85cc8b477d589 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Apr 27 21:25:30 2007 +0000 + + * glib/poppler-page.cc: + * poppler/PSOutputDev.cc: + * poppler/PSOutputDev.h: + * qt/poppler-document.cc: + * qt4/src/poppler-document.cc: + * qt4/src/poppler-qt4.h: + * utils/pdftohtml.cc: + * utils/pdftops.cc: + Add option to force rasterizing the pages when printing them + Add functionality to output the title field on the PS file + Only Qt4 frontend exposes the functionality + + Bringing this features from KPDF 3.5.7 to poppler + Testers welcome + Patches for other frontends more than welcome + Comments and suggestions even more than welcome :-) + + ChangeLog | 14 ++++++++++++ + glib/poppler-page.cc | 3 +- + poppler/PSOutputDev.cc | 48 + +++++++++++++++++++++++++++++------------- + poppler/PSOutputDev.h | 17 +++++++++----- + qt/poppler-document.cc | 2 +- + qt4/src/poppler-document.cc | 9 ++++++- + qt4/src/poppler-qt4.h | 2 +- + utils/pdftohtml.cc | 2 +- + utils/pdftops.cc | 2 +- + 9 files changed, 71 insertions(+), 28 deletions(-) + +commit 99053be5357235c47a87775985646ef8d9880ed9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Apr 26 17:57:01 2007 +0000 + + * goo/Makefile.am: Remove duplicate gmem.h + + ChangeLog | 4 ++++ + goo/Makefile.am | 1 - + 2 files changed, 4 insertions(+), 1 deletions(-) + +commit f6adb46cd88d23b34f1918d3be31c05b68b6a443 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Apr 25 21:31:17 2007 +0000 + + ignore pdftoabw binary + + utils/.cvsignore | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit e09f231ac6c03ac2c3606f1bf20ba1bde3d85abd +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Apr 25 21:25:06 2007 +0000 + + 2007-04-25 Albert Astals Cid <aacid@kde.org> + + * qt4/src/poppler-document.cc: remove a delete[] no longer + needed + * qt4/src/poppler-private: initilize m_hints + + ChangeLog | 5 +++++ + qt4/src/poppler-document.cc | 1 - + qt4/src/poppler-private.h | 1 + + 3 files changed, 6 insertions(+), 1 deletions(-) + +commit bf7e0e980bf29994021cb1228f89f582adddf284 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Apr 25 19:59:09 2007 +0000 + + Merge xpdf302branch in HEAD as noone vetoed it. + Testing more than welcome + + ChangeLog | 140 + + configure.ac | 4 + + fofi/FoFiTrueType.cc | 458 +++- + fofi/FoFiTrueType.h | 42 +- + fofi/FoFiType1.cc | 65 +- + fofi/FoFiType1C.cc | 590 +++-- + fofi/FoFiType1C.h | 7 +- + glib/poppler-action.cc | 12 +- + glib/poppler-document.cc | 5 +- + glib/poppler-page.cc | 8 +- + goo/FixedPoint.cc | 31 +- + goo/FixedPoint.h | 5 + + goo/GooString.cc | 444 +++- + goo/GooString.h | 41 +- + goo/Makefile.am | 2 +- + goo/gfile.cc | 54 +- + goo/gmem.c | 238 -- + goo/gmem.cc | 264 ++ + goo/gmem.h | 27 +- + poppler/ABWOutputDev.cc | 1 - + poppler/ABWOutputDev.h | 1 - + poppler/Annot.cc | 1685 ++++++++++--- + poppler/Annot.h | 83 +- + poppler/ArthurOutputDev.cc | 13 +- + poppler/Catalog.cc | 79 +- + poppler/Catalog.h | 16 +- + poppler/CharCodeToUnicode.cc | 31 +- + poppler/DCTStream.cc | 2 +- + poppler/DCTStream.h | 4 +- + poppler/Decrypt.cc | 427 +++- + poppler/Decrypt.h | 54 +- + poppler/Dict.cc | 23 +- + poppler/Dict.h | 27 +- + poppler/FontInfo.cc | 1 - + poppler/Form.cc | 19 +- + poppler/Form.h | 2 +- + poppler/Function.cc | 65 +- + poppler/Function.h | 8 +- + poppler/Gfx.cc | 1247 +++++++--- + poppler/Gfx.h | 39 +- + poppler/GfxFont.cc | 45 +- + poppler/GfxFont.h | 7 +- + poppler/GfxState.cc | 209 ++- + poppler/GfxState.h | 42 +- + poppler/GlobalParams.cc | 399 +++- + poppler/GlobalParams.h | 41 +- + poppler/JBIG2Stream.cc | 96 +- + poppler/JBIG2Stream.h | 4 +- + poppler/JPXStream.cc | 246 ++- + poppler/JPXStream.h | 8 +- + poppler/Lexer.cc | 18 +- + poppler/Link.cc | 150 +- + poppler/Link.h | 49 +- + poppler/Makefile.am | 4 +- + poppler/Object.cc | 5 +- + poppler/Object.h | 29 +- + poppler/Outline.cc | 1 - + poppler/OutputDev.cc | 2 + + poppler/OutputDev.h | 62 +- + poppler/PDFDoc.cc | 100 +- + poppler/PDFDoc.h | 21 +- + poppler/PSOutputDev.cc | 2715 ++++++++++++++----- + poppler/PSOutputDev.h | 58 +- + poppler/PSTokenizer.cc | 2 +- + poppler/Page.cc | 227 ++- + poppler/Page.h | 22 +- + poppler/PageLabelInfo.cc | 1 - + poppler/Parser.cc | 66 +- + poppler/Parser.h | 11 +- + poppler/PreScanOutputDev.cc | 255 ++ + poppler/PreScanOutputDev.h | 128 + + poppler/SecurityHandler.cc | 17 +- + poppler/SecurityHandler.h | 5 + + poppler/SplashOutputDev.cc | 1480 ++++++----- + poppler/SplashOutputDev.h | 41 +- + poppler/Stream.cc | 338 ++-- + poppler/Stream.h | 39 +- + poppler/TextOutputDev.cc | 537 ++++- + poppler/TextOutputDev.h | 77 +- + poppler/UGooString.cc | 182 -- + poppler/UGooString.h | 79 - + poppler/XRef.cc | 29 +- + poppler/XRef.h | 6 +- + qt/poppler-document.cc | 15 +- + qt/poppler-page-transition.cc | 1 - + qt/poppler-page.cc | 4 +- + qt/poppler-private.h | 72 +- + qt4/src/poppler-annotation-helper.h | 38 +- + qt4/src/poppler-document.cc | 7 +- + qt4/src/poppler-embeddedfile.cc | 6 +- + qt4/src/poppler-form.cc | 12 +- + qt4/src/poppler-page.cc | 8 +- + qt4/src/poppler-private.h | 76 +- + splash/Splash.cc | 4994 + ++++++++++++++++++----------------- + splash/Splash.h | 137 +- + splash/SplashBitmap.cc | 110 +- + splash/SplashBitmap.h | 10 +- + splash/SplashClip.cc | 276 ++- + splash/SplashClip.h | 28 +- + splash/SplashFTFont.cc | 104 +- + splash/SplashFTFont.h | 5 +- + splash/SplashFTFontEngine.cc | 54 +- + splash/SplashFTFontEngine.h | 9 +- + splash/SplashFTFontFile.cc | 19 +- + splash/SplashFTFontFile.h | 9 +- + splash/SplashFont.cc | 6 +- + splash/SplashFont.h | 13 +- + splash/SplashFontEngine.cc | 72 +- + splash/SplashFontEngine.h | 11 +- + splash/SplashFontFile.cc | 1 - + splash/SplashFontFile.h | 2 +- + splash/SplashMath.h | 15 +- + splash/SplashPath.cc | 42 +- + splash/SplashPath.h | 31 +- + splash/SplashPattern.cc | 28 - + splash/SplashPattern.h | 25 - + splash/SplashScreen.cc | 304 ++- + splash/SplashScreen.h | 18 +- + splash/SplashState.cc | 63 +- + splash/SplashState.h | 14 +- + splash/SplashT1Font.cc | 101 +- + splash/SplashT1Font.h | 6 +- + splash/SplashT1FontEngine.cc | 4 +- + splash/SplashT1FontFile.cc | 9 +- + splash/SplashT1FontFile.h | 7 +- + splash/SplashTypes.h | 72 +- + splash/SplashXPath.cc | 353 ++-- + splash/SplashXPath.h | 26 +- + splash/SplashXPathScanner.cc | 143 + + splash/SplashXPathScanner.h | 13 + + utils/HtmlOutputDev.cc | 15 +- + utils/HtmlOutputDev.h | 15 +- + utils/pdffonts.cc | 15 +- + utils/pdfinfo.cc | 21 +- + utils/pdftoabw.cc | 1 - + utils/pdftohtml.cc | 3 +- + utils/pdftoppm.cc | 8 + + utils/pdftops.cc | 8 +- + utils/pdftotext.cc | 1 - + 139 files changed, 14538 insertions(+), 7039 deletions(-) + +commit ba74bb3b0632593d1937911d73709fc870480efd +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Apr 16 21:25:46 2007 +0000 + + * qt4/src/poppler-private.h: + Add the information about the open/close item in the DOM tree + of the TOC. + + ChangeLog | 7 +++++++ + qt4/src/poppler-private.h | 5 ++++- + 2 files changed, 11 insertions(+), 1 deletions(-) + +commit 6c7969f37c85f326327aca98e0346f2ebc86ffda +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 14 23:19:46 2007 +0000 + + * utils/HtmlFonts.cc: Fix rendering of text colors on + complex mode. + * utils/pdftohtml.cc: Fix rendering of links. + + ChangeLog | 5 +++++ + utils/HtmlFonts.cc | 8 ++++---- + utils/pdftohtml.cc | 2 +- + 3 files changed, 10 insertions(+), 5 deletions(-) + +commit add8515d7b3fba59c20ed1bbb058cea9e138c1a8 +Author: Brad Hards <bradh@frogmouth.net> +Date: Sat Apr 14 07:29:04 2007 +0000 + + Not sure what this was intended to do, but it triggers a lot of + problems with the unit tests (essentially, duplicate delete's). + + CCMAIL: aacid@kde.org + + qt4/src/poppler-embeddedfile.cc | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit f3ded10305f6ac682640c37c21f569db0f830756 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Apr 7 21:12:35 2007 +0000 + + 2007-04-07 Jeff Muizelaar <jeff@infidigm.net> + + * utils/pdftoabw.cc: Fixing passing the wrong type + to fprintf. Patch by Kouhei Sutou. Fixes #10554. + + ChangeLog | 5 +++++ + utils/pdftoabw.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 2fcb76df955c143153fe4b273d0388fcb7f67d8a +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Fri Apr 6 15:27:52 2007 +0000 + + 2007-04-06 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/ABWOutputDev.cc: + * utils/pdftoabw.cc: Fix a number of issues with the new + AbiWord code: + *) Allows you to save to a file other than stdout + *) Checks for error conditions when reading the PDF + doc and + writing the ABW doc + *) Removes dead code in pdftoabw.cc + *) Fixes a SEGV I encountered when converting my new + home's floor plan + *) Returns proper error conditions should the conversion + fail for any reason + Patch by Dominic Lachowicz + + ChangeLog | 12 ++++++ + poppler/ABWOutputDev.cc | 3 + + utils/pdftoabw.cc | 101 + +++++++++++++++++++++++++++------------------- + 3 files changed, 74 insertions(+), 42 deletions(-) + +commit 29da65ec48b5ba91139084e197ce457d3cff3732 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Apr 5 12:13:51 2007 +0000 + + * poppler/PSOutputDev.cc: Readd code wrongly removed when doing the + GlobalParams cleaning + + ChangeLog | 5 +++++ + poppler/PSOutputDev.cc | 5 +++++ + 2 files changed, 10 insertions(+), 0 deletions(-) + +commit 722b2bd86f58f2d7a914571cccfa195485a70c47 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Apr 4 02:42:29 2007 +0000 + + 2007-04-03 Jeff Muizelaar <jeff@infidigm.net> + + * configure.ac: + * poppler/ABWOutputDev.cc: + * poppler/ABWOutputDev.h: + * poppler/Makefile.am: + * utils/Makefile.am: + * utils/pdftoabw.cc: Add AbiWord output device and pdftoabw + program. + Patch by Jauco Noordzij. Autotools stuff by Dominic Lachowicz. + + ChangeLog | 10 + + configure.ac | 15 + + poppler/ABWOutputDev.cc | 1286 + +++++++++++++++++++++++++++++++++++++++++++++++ + poppler/ABWOutputDev.h | 140 +++++ + poppler/Makefile.am | 17 + + utils/Makefile.am | 16 +- + utils/pdftoabw.cc | 138 +++++ + 7 files changed, 1620 insertions(+), 2 deletions(-) + +commit c9b467da290476da5ebbe8dc25699cd25e589b57 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Mar 22 20:56:24 2007 +0000 + + * poppler/Gfx.cc: Accept reals for width and height of + images. Fixes + KDE bug 143322 + + ChangeLog | 5 +++++ + poppler/Gfx.cc | 14 ++++++++++---- + 2 files changed, 15 insertions(+), 4 deletions(-) + +commit ff8f8d44ef47a98f7dbdfaa4d27a720b1f37015f +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Mar 15 20:16:13 2007 +0000 + + * glib/Makefile.am: Make it build with BSD/Make. Patch by + Henry Precheur <henry@precheur.org> + + ChangeLog | 5 +++++ + glib/Makefile.am | 4 ++-- + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit bbf7e78b6b2509ecdc476d7f55151ef327470d9d +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Mar 7 19:15:32 2007 +0000 + + 2007-03-07 Carlos Garcia Campos <carlosgc@gnome.org> + reviewed by: Albert Astals Cid <aacid@kde.org> + + * poppler/Page.cc: Consider 0x0 boxes as invalid. Fixes + http://bugzilla.gnome.org/show_bug.cgi?id=408682 + + 2007-03-06 Pino Toscano <pino@kde.org> + reviewed by: Albert Astals Cid <aacid@kde.org> + + * configure.ac: + * qt/Makefile.am: + * qt/poppler-link.cc: + * qt/poppler-page.cc: + * qt/poppler-private.h: + * qt4/poppler-link.cc: + Make the Qt4 frontend compilable again with no Splash. + Make the Qt3 frontend compilable with no Splash. + + ChangeLog | 18 ++++++++++++++++++ + configure.ac | 12 +----------- + poppler/Page.cc | 7 ++++++- + qt/Makefile.am | 1 - + qt/poppler-link.cc | 4 +++- + qt/poppler-page.cc | 16 +++++++++++++++- + qt/poppler-private.h | 11 ++++++++++- + qt4/src/poppler-link.cc | 10 ++++++---- + 8 files changed, 59 insertions(+), 20 deletions(-) + +commit 08dcc7121450cbfa163254001e73bb6a2670e055 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 6 22:27:18 2007 +0000 + + * poppler/Annot.cc: + * poppler/Form.cc: + Fix uninitialized variables. + Properly escape parenthesis and slash in text field + + ChangeLog | 9 ++++++++- + poppler/Annot.cc | 3 +++ + poppler/Form.cc | 1 + + 3 files changed, 12 insertions(+), 1 deletions(-) + +commit e8d3b21d08a59ec8b62503b48504fe046d746bfa +Author: Brad Hards <bradh@frogmouth.net> +Date: Sun Mar 4 07:30:31 2007 +0000 + + Switch to using pkg-config to find Qt4. + + ChangeLog | 9 +++ + configure.ac | 36 +++++------ + m4/qt.m4 | 165 + ------------------------------------------------- + poppler/Makefile.am | 2 +- + qt4/src/Makefile.am | 3 +- + qt4/tests/Makefile.am | 21 +++---- + 6 files changed, 36 insertions(+), 200 deletions(-) + +commit bd99616b9c06f96beadb68e015d2904b7fe2df1d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 25 00:34:21 2007 +0000 + + 007-02-25 Julien Rebetez <julienr@svn.gnome.org> + + reviewed by: Albert Astals Cid <aacid@kde.org> + + * poppler/Annot.cc: + * poppler/Annot.h: + * poppler/Form.cc: + * poppler/Form.h: + Fix compilation warnings. + + ChangeLog | 10 ++++++++++ + poppler/Annot.cc | 30 +++++++++++++++++------------- + poppler/Annot.h | 5 ++++- + poppler/Form.cc | 37 ++++++++++++++----------------------- + poppler/Form.h | 13 ++++++------- + 5 files changed, 51 insertions(+), 44 deletions(-) + +commit d8d23b56332618d8c7d8198f55ec6efafd24187e +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 25 00:00:20 2007 +0000 + + forgot to commit these + + qt4/src/poppler-form.cc | 284 + +++++++++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-form.h | 247 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 531 insertions(+), 0 deletions(-) + +commit 984ce7f919aec27d5f4225376550cd6b58d4ae52 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 24 23:58:31 2007 +0000 + + 2007-02-25 Pino Toscano <pino@kde.org> + reviewed by: Albert Astals Cid <aacid@kde.org> + + * qt4/src/Doxyfile: + * qt4/src/Makefile.am: + * qt4/src/poppler-annotation-helper.h: + * qt4/src/poppler-form.cc: + * qt4/src/poppler-form.h: + * qt4/src/poppler-page.cc: + * qt4/src/poppler-private.h: + * qt4/src/poppler-qt4.h: + Beginning of interactive forms support, first + implementation in the + Qt4 frontend. It supports text and choice fields in + a basic way. + + ChangeLog | 14 +++++++++ + qt4/src/Doxyfile | 1 + + qt4/src/Makefile.am | 2 + + qt4/src/poppler-annotation-helper.h | 18 ++++++------ + qt4/src/poppler-page.cc | 36 ++++++++++++++++++++++++ + qt4/src/poppler-private.h | 52 + ++++++++++++++++++++++++++++++++++- + qt4/src/poppler-qt4.h | 7 +++++ + 7 files changed, 120 insertions(+), 10 deletions(-) + +commit de7a90fc724de14151ec994d18f860ada3be2ac8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 24 23:43:34 2007 +0000 + + 2007-02-25 Albert Astals Cid <aacid@kde.org> + + * configure.ac: + * glib/poppler-document.cc: + * poppler/GlobalParams.cc: + * poppler/GlobalParams.h: + * poppler/PSOutputDev.cc: + * qt/poppler-document.cc: + * qt4/src/poppler-document.cc: + * qt4/src/poppler-private.h: + * qt4/src/poppler-qt4.h: + * test/gtk-splash-test.cc: + * test/pdf-inspector.cc: + * utils/pdffonts.cc: + * utils/pdfimages.cc: + * utils/pdfinfo.cc: + * utils/pdftohtml.cc: + * utils/pdftoppm.cc: + * utils/pdftops.cc: + * utils/pdftotext.cc: Remove dependency on xpdfrc file + and cleanup + GlobalParams accordingly + + ChangeLog | 22 ++ + configure.ac | 1 - + glib/poppler-document.cc | 4 +- + poppler/GlobalParams.cc | 666 + +------------------------------------------ + poppler/GlobalParams.h | 59 +---- + poppler/PSOutputDev.cc | 8 - + qt/poppler-document.cc | 4 +- + qt4/src/poppler-document.cc | 2 +- + qt4/src/poppler-private.h | 2 +- + qt4/src/poppler-qt4.h | 6 +- + test/gtk-splash-test.cc | 2 +- + test/pdf-inspector.cc | 2 +- + utils/pdffonts.cc | 5 +- + utils/pdfimages.cc | 5 +- + utils/pdfinfo.cc | 5 +- + utils/pdftohtml.cc | 2 +- + utils/pdftoppm.cc | 15 +- + utils/pdftops.cc | 50 ++-- + utils/pdftotext.cc | 5 +- + 19 files changed, 72 insertions(+), 793 deletions(-) + +commit 74e70386b759a3cd9864d11eb4ca210010136aa5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 24 23:32:22 2007 +0000 + + 2007-02-25 Julien Rebetez <julienr@svn.gnome.org> + reviewed by: <aacid@kde.org> + + * glib/poppler-document.cc: + * glib/poppler-document.h: + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/poppler-private.h: + * glib/poppler.h: + * poppler/Annot.cc: + * poppler/Annot.h: + * poppler/Catalog.cc: + * poppler/Catalog.h: + * poppler/CharCodeToUnicode.cc: + * poppler/CharCodeToUnicode.h: + * poppler/Dict.cc: + * poppler/Dict.h: + * poppler/Form.cc: + * poppler/Form.h: + * poppler/GfxFont.cc: + * poppler/GfxFont.h: + * poppler/Makefile.am: + * poppler/Object.h: + * poppler/Page.cc: + * poppler/Page.h: + * poppler/XRef.cc: + * poppler/XRef.h: + Beginning of Interactive Form support: + Add a bunch of new classes (FormWidget / FormField) + to deal with form + fields. + Add support for object modification through + XRef::setModifiedObject, as + well as a function to write the Xref to a file, + which will be used + to implement PDF writing. + Add some functions to glib wrapper to expose the + new form features. + + ChangeLog | 35 ++ + glib/poppler-document.cc | 192 +++++++ + glib/poppler-document.h | 55 ++ + glib/poppler-page.cc | 120 +++++ + glib/poppler-page.h | 55 ++ + glib/poppler-private.h | 4 + + glib/poppler.h | 15 +- + poppler/Annot.cc | 344 ++++++++++--- + poppler/Annot.h | 21 +- + poppler/Catalog.cc | 17 +- + poppler/Catalog.h | 4 + + poppler/CharCodeToUnicode.cc | 34 ++ + poppler/CharCodeToUnicode.h | 3 + + poppler/Dict.cc | 32 ++ + poppler/Dict.h | 4 + + poppler/Form.cc | 1187 + ++++++++++++++++++++++++++++++++++++++++++ + poppler/Form.h | 470 +++++++++++++++++ + poppler/GfxFont.cc | 27 + + poppler/GfxFont.h | 5 + + poppler/Makefile.am | 2 + + poppler/Object.h | 4 + + poppler/Page.cc | 11 +- + poppler/Page.h | 8 +- + poppler/XRef.cc | 87 +++ + poppler/XRef.h | 9 + + 25 files changed, 2666 insertions(+), 79 deletions(-) + +commit 5c4ea446f33248964431e79b14592b30362634fe +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 18 21:44:24 2007 +0000 + + * configure.ac: Change {datadir}/poppler to {datarootdir}/poppler so + that i get /usr/local/share/poppler in config.h + instead of + ${prefix}/poppler Better fixes are welcome. + + ChangeLog | 6 ++++++ + configure.ac | 2 +- + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit dd140dd63de661303b578863af4d515d82117cca +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 4 00:19:25 2007 +0000 + + fix date + + ChangeLog | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3c1ed68bf4ee49b27275f7f65d49f42933b1cfa0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 4 00:16:43 2007 +0000 + + * poppler/Lexer.cc: + * poppler/Lexer.h: Patch to fix regression introduced by + optimizations + in bugzilla issue 7808 + + ChangeLog | 6 ++++++ + poppler/Lexer.cc | 30 ++++++++++++++++++++---------- + poppler/Lexer.h | 2 +- + 3 files changed, 27 insertions(+), 11 deletions(-) + +commit 672408839de0deac4c6006b54df723336ee4be2d +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 31 22:05:09 2007 +0000 + + * qt4/src/poppler-page.cc: + Patch by Pino Toscano <pino@kde.org> to remove a nonsense done + by him. + + * qt4/tests/test-poppler-qt4.cpp: + Simply a bit. Patch by Pino Toscano <pino@kde.org>. + + ChangeLog | 8 ++++++++ + qt4/src/poppler-page.cc | 2 -- + qt4/tests/test-poppler-qt4.cpp | 24 ++++++++++++------------ + 3 files changed, 20 insertions(+), 14 deletions(-) + +commit 9c64b8c754e09ff2858af56ce38ef013002bf8e4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 31 18:48:16 2007 +0000 + + * m4/qt.m4: Fix Qt4 detection on Mac. Patch by Benjamin Reed + <ranger@befunk.com> + + ChangeLog | 5 +++++ + m4/qt.m4 | 26 +++++++++++++++++++++++--- + 2 files changed, 28 insertions(+), 3 deletions(-) + +commit 1b81192ff2bb9fae4a7bbc685fafe1718f303a7b +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 28 15:55:11 2007 +0000 + + * glib/poppler-page.cc: Make link mapping coordinates + follow page + rotation. Patch by Carlos Garcia Campos <carlosgc@gnome.org> + * glib/poppler-action.cc: Fix link destination + coordinates. Patch by + Carlos Garcia Campos <carlosgc@gnome.org> + + ChangeLog | 4 ++ + glib/poppler-action.cc | 15 +++++- + glib/poppler-page.cc | 124 + ++++++++++++++++++++++++++++++----------------- + 3 files changed, 97 insertions(+), 46 deletions(-) + +commit 75dcf94f53c2d7241111f0d527ee4d3a2ef0b0cf +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 28 15:36:08 2007 +0000 + + * glib/poppler-document.cc: Plug memory leak in + poppler-document. Patch by Carlos Garcia Campos <carlosgc@gnome.org> + + ChangeLog | 5 +++++ + glib/poppler-document.cc | 30 ++++++++++++++---------------- + 2 files changed, 19 insertions(+), 16 deletions(-) + +commit 682a15fc38a2c569d9b1f9871e3e949b62b33cf8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 21 22:35:23 2007 +0000 + + * poppler-document.cc: + * poppler-page.cc: + * poppler-private.h: + * poppler-qt4.h: + No need to destroy the Splash output device to change its + paper color. + Add the possibility to set flags that affect the rendering + (some + backends supports only some of them, though). + Add a Page::label to get the label associated with a page. + Patches by Pino Toscano <pino@kde.org>. + + ChangeLog | 12 ++++++++++++ + qt4/src/poppler-document.cc | 20 ++++++++++++++++++++ + qt4/src/poppler-page.cc | 14 +++++++++++++- + qt4/src/poppler-private.h | 29 ++++++++++++++++++++++++----- + qt4/src/poppler-qt4.h | 25 +++++++++++++++++++++++++ + 5 files changed, 94 insertions(+), 6 deletions(-) + +commit 7331bc46c1cb323316501f05ae1740bea5655596 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 17 20:06:29 2007 +0000 + + * poppler/Sound.h: + * poppler/Sound.cc: + * qt4/src/poppler-sound.cc: Move most of the sound reading + code + into the Sound class, so frontends can use it easily. + Patch by Pino Toscano <pino@kde.org>. + + ChangeLog | 10 +++- + poppler/Sound.cc | 80 ++++++++++++++++++++++++- + poppler/Sound.h | 32 ++++++++++- + qt4/src/poppler-sound.cc | 144 + ++++++++++++++++----------------------------- + 4 files changed, 167 insertions(+), 99 deletions(-) + +commit 841bee94da7b6376d2e1fb3daaf8b727b90e42d8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jan 13 23:19:21 2007 +0000 + + * poppler/Stream.h: + * poppler/Stream.cc: Remove MemStream::setNeedFree method + i really did + not need it + * qt4/src/poppler-document.cc: + * qt4/src/poppler-link.cc: + * qt4/src/poppler-page.cc: + * qt4/src/poppler-private.h: Make Document::loadFromData + work on + documents with a password and don't need to do a malloc and + a memcpy. + + ChangeLog | 11 ++++++ + poppler/Stream.cc | 5 --- + poppler/Stream.h | 1 - + qt4/src/poppler-document.cc | 74 + ++++++++++++++++++++++-------------------- + qt4/src/poppler-link.cc | 4 +- + qt4/src/poppler-page.cc | 34 ++++++++++---------- + qt4/src/poppler-private.h | 24 +++++++++----- + 7 files changed, 84 insertions(+), 69 deletions(-) + +commit e1432fd7c4a6a2386789f450d39c6d954fd4e656 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jan 13 18:29:39 2007 +0000 + + * configure.ac + * poppler/Makefile.am + * qt4/src/Makefile.am + * qt4/src/poppler-document.cc + * qt4/src/poppler-link.cc + * qt4/src/poppler-page.cc + * qt4/src/poppler-private.h + * qt4/src/poppler-qt4.h: Make the Qt4 backend compilable + even with + no Splash backend. Patch by Pino Toscano <pino@kde.org>. + + ChangeLog | 12 ++++++++++++ + configure.ac | 5 ----- + poppler/Makefile.am | 5 +++-- + qt4/src/Makefile.am | 6 +++++- + qt4/src/poppler-document.cc | 16 ++++++++++++++-- + qt4/src/poppler-link.cc | 1 + + qt4/src/poppler-page.cc | 15 ++++++++++++--- + qt4/src/poppler-private.h | 8 +++++++- + qt4/src/poppler-qt4.h | 6 ++++++ + 9 files changed, 60 insertions(+), 14 deletions(-) + +commit 457038e97325720615c4390ffa075dd8283966ee +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jan 13 17:56:07 2007 +0000 + + * poppler/Stream.h: + * poppler/Stream.cc: Add MemStream::setNeedFree method + * qt4/src/poppler-document.cc: + * qt4/src/poppler-private.h: + * qt4/src/poppler-qt4.h: Add Document::loadFromData method + + ChangeLog | 8 ++++++++ + poppler/Stream.cc | 5 +++++ + poppler/Stream.h | 1 + + qt4/src/poppler-document.cc | 22 ++++++++++++++++++++++ + qt4/src/poppler-private.h | 17 +++++++++++++++-- + qt4/src/poppler-qt4.h | 16 ++++++++++++++++ + 6 files changed, 67 insertions(+), 2 deletions(-) + +commit 4e2a9c49ecab00b1f5d175570165cd490afdd31e +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jan 11 22:28:03 2007 +0000 + + goo/gmem.c: Merge change from xpdf-3.01pl2 + + ChangeLog | 4 ++++ + goo/gmem.c | 13 +++++++++++-- + 2 files changed, 15 insertions(+), 2 deletions(-) + +commit bce14b274fd788d728116950d6464a85e33a9966 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jan 11 22:12:11 2007 +0000 + + * poppler/Catalog.h: + * poppler/Catalog.cc: Limit max depth of recursive calls on + readPageTree to fix MOAB-06-01-2007 + + ChangeLog | 6 ++++++ + poppler/Catalog.cc | 20 +++++++++++++++----- + poppler/Catalog.h | 2 +- + 3 files changed, 22 insertions(+), 6 deletions(-) + +commit 3f0679a336ffaf2aff149f8526fa11f8f8cbda59 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jan 6 21:53:08 2007 +0000 + + Patch by Pino Toscano <pino@kde.org> to fix some memory leaks when + dealing with sounds. + + ChangeLog | 9 +++++++++ + poppler/Sound.cc | 1 + + qt4/src/poppler-link.cc | 5 +++++ + qt4/src/poppler-link.h | 1 + + qt4/src/poppler-page.cc | 4 ++++ + qt4/src/poppler-sound.cc | 7 ++++++- + 6 files changed, 26 insertions(+), 1 deletions(-) + +commit d41cd2f567a955031cb7498d9089e70e14df4a42 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jan 4 19:10:16 2007 +0000 + + qt4/src/poppler-private.h: gmallocn -> new[] + + ChangeLog | 4 ++++ + qt4/src/poppler-private.h | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit f8edfb6832144cbbd1b234f6b35e33325269255c +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jan 4 18:56:13 2007 +0000 + + qt/poppler-page-transition.cc: Fix memory leak. Patch by Tobias + Koenig <tokoe@kde.org> + + ChangeLog | 5 +++++ + qt/poppler-page-transition.cc | 1 + + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit 250a9f4b429344e0968c7bd0c0cebe7af373ae0a +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Dec 30 14:50:25 2006 +0000 + + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-document.cc: Add const & to some parameters. Patch + by Pino Toscano <pino@kde.org> + + ChangeLog | 6 ++++++ + qt4/src/poppler-document.cc | 4 ++-- + qt4/src/poppler-qt4.h | 4 ++-- + 3 files changed, 10 insertions(+), 4 deletions(-) + +commit 250c1f94cc9a53f980fd08364d6cce29db9fd067 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 29 14:08:35 2006 +0000 + + * poppler/UGooString.cc: Patch by Pino Toscano <pino@kde.org> so + that QStringToUGooString does not crash. + + ChangeLog | 5 +++++ + poppler/UGooString.cc | 1 + + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit 42770e5f07407b03dce31c73fd6956f9c8fc9a06 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Fri Dec 29 04:12:40 2006 +0000 + + 2006-12-28 Brad Taylor <brad@getcoded.net> + + * poppler/glib/poppler-document.h: + * poppler/glib/poppler-document.cc: Add + poppler_document_new_from_data + to allow loading PDFs out of memory. + + ChangeLog | 6 +++ + glib/poppler-document.cc | 113 + +++++++++++++++++++++++++++++++++------------ + glib/poppler-document.h | 4 ++ + 3 files changed, 93 insertions(+), 30 deletions(-) + +commit 6fedd991b584e300b5710630fa7942d357fe7aaa +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Dec 28 17:22:36 2006 +0000 + + * qt4/src/poppler-embeddedfile.cc: + * qt4/src/poppler-document.cc: + * qt/poppler-document.cc: Fix memory leaks + + ChangeLog | 6 ++++++ + qt/poppler-document.cc | 4 ++++ + qt4/src/poppler-document.cc | 4 +++- + qt4/src/poppler-embeddedfile.cc | 4 +++- + 4 files changed, 16 insertions(+), 2 deletions(-) + +commit 7da5885e45c33382060276c95d9a3bd117ae55c7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Dec 28 15:51:44 2006 +0000 + + * goo/GooString.cc + * goo/GooString.h + * goo/gmem.c + * goo/gmem.h + * poppler/Lexer.cc + * poppler/Lexer.h + * poppler/PageLabelInfo.cc + * poppler/Parser.cc + * poppler/UGooString.cc + * poppler/UGooString.h: Patch by Krzysztof Kowalczyk + <kkowalczyk@gmail.com> to improve performance. See bug 7808 for + details. + + ChangeLog | 15 ++++ + goo/GooString.cc | 186 + +++++++++++++++++++++++----------------------- + goo/GooString.h | 28 ++++++-- + goo/gmem.c | 3 +- + goo/gmem.h | 2 +- + poppler/Lexer.cc | 19 ++++- + poppler/Lexer.h | 10 +++ + poppler/PageLabelInfo.cc | 1 + + poppler/Parser.cc | 17 +++-- + poppler/UGooString.cc | 137 ++++++++++++++++++++++++++++------ + poppler/UGooString.h | 40 ++++++++-- + 11 files changed, 313 insertions(+), 145 deletions(-) + +commit fbc05a6791fc28ee26a9d9188722ea3453c65ddc +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Dec 27 23:15:06 2006 +0000 + + * poppler/Annot.cc: + * poppler/Annot.h: Add type checking to processing of "Rect". Patch + by Scott Turner <scotty1024@mac.com> + + ChangeLog | 6 ++++++ + poppler/Annot.cc | 48 +++++++++++++++++++++++++++++------------------- + poppler/Annot.h | 1 + + 3 files changed, 36 insertions(+), 19 deletions(-) + +commit dc6b372358ac629c43aa2faabd644942cb0ed98b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Dec 27 15:23:04 2006 +0000 + + Remove , after last value of enum. Thanks to André Wöbbeking + + ChangeLog | 1 + + poppler/Catalog.h | 2 +- + 2 files changed, 2 insertions(+), 1 deletions(-) + +commit c7d19539a95927eb277966a521f13393c9e116bb +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Dec 27 12:38:58 2006 +0000 + + qt4/src/poppler-qt4.h: Remove , after last value of enum. Thanks to + André Wöbbeking + + ChangeLog | 5 +++++ + qt4/src/poppler-qt4.h | 4 ++-- + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit b29429c702e6540b9f35689b0a164f30e747d5d9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Dec 26 20:07:03 2006 +0000 + + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-page.cc: Add Page::duration() function to the + qt4 frontend. + + ChangeLog | 6 ++++++ + qt4/src/poppler-page.cc | 8 ++++++++ + qt4/src/poppler-qt4.h | 9 ++++++++- + 3 files changed, 22 insertions(+), 1 deletions(-) + +commit 62dfc58903b496c4cc720c8b2c759c6fb82fb443 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Dec 26 19:56:28 2006 +0000 + + * glib/test-poppler-glib.c: + * glib/poppler-page.cc: + * glib/poppler-page.h: + * poppler/Page.cc: + * poppler/Page.h: Implement /Dur entry in page object. Patch + by Carlos + Garcia Campos <carlosgc@gnome.org> + + ChangeLog | 9 +++++++++ + glib/poppler-page.cc | 16 ++++++++++++++++ + glib/poppler-page.h | 1 + + glib/test-poppler-glib.c | 7 +++++++ + poppler/Page.cc | 13 +++++++++++++ + poppler/Page.h | 6 ++++++ + 6 files changed, 52 insertions(+), 0 deletions(-) + +commit 34e5aa62f4d3ba7a2d94a68a91c11a48277a4119 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Dec 23 13:12:13 2006 +0000 + + * poppler/PSTokenizer.cc: Enhance PSTokenizer::getToken + performance. + Patch by Scott Turner <scotty1024@mac.com>. In a random pdf + i tested + the patchs improves PSTokenizer::getToken performance by 15% + + ChangeLog | 6 ++++++ + poppler/PSTokenizer.cc | 33 +++++++++++++++++++++------------ + poppler/PSTokenizer.h | 1 + + 3 files changed, 28 insertions(+), 12 deletions(-) + +commit 1a5fa1d2ced62e7d027e085663e987cff625ce0b +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 22 23:39:41 2006 +0000 + + poppler/Page.cc: Fix memory leak when reading a wrong color map in + a thumbnail. Patch by Scott Turner <scotty1024@mac.com> + + ChangeLog | 3 +++ + poppler/Page.cc | 1 + + 2 files changed, 4 insertions(+), 0 deletions(-) + +commit dd1c134dcf085338a85188c7f205fc300396dc86 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 22 23:27:53 2006 +0000 + + qt/poppler-page.cc: Fix memory leak in Page::textList. Patch by + Jerry Epplin <jepplin@globalvelocity.com> + + ChangeLog | 5 +++++ + qt/poppler-page.cc | 4 +++- + 2 files changed, 8 insertions(+), 1 deletions(-) + +commit 87e474a018c4808d6251fd79f9e9640e0f733551 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Thu Dec 21 01:01:30 2006 +0000 + + 2006-12-20 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: Fix scaling of maskedImage + masks. They + should be scaled to the size of the image not the size of + the mask. + Fixes #9403. + + ChangeLog | 6 ++++++ + poppler/CairoOutputDev.cc | 8 ++------ + 2 files changed, 8 insertions(+), 6 deletions(-) + +commit 769a89623c680f51690db1751522b016b02b83a8 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Dec 20 19:55:55 2006 +0000 + + 2006-12-20 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/GlobalParams.cc: Try to make zero-width lines as + close to + one pixel wide as we can. Fixes #9393. + + ChangeLog | 5 +++++ + poppler/CairoOutputDev.cc | 10 ++++++++-- + 2 files changed, 13 insertions(+), 2 deletions(-) + +commit 5c4bca18373528f293bd5e080efca572977fc1ff +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Dec 19 20:27:55 2006 +0000 + + poppler/SplashOutputDev.cc: Fix gray calculation. Patch by Scott + Turner <scotty1024@mac.com> + + ChangeLog | 5 +++++ + poppler/SplashOutputDev.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit fba99578f6001ae0c0df0442bb73040b55109b1d +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Tue Dec 12 05:23:59 2006 +0000 + + 2006-12-12 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: Change a cairo_set_matrix to + cairo_transform so that we don't blindly clobber the existing + matrix. + Patch by Daniel Colascione. + Fixes #9190. + + ChangeLog | 7 +++++++ + poppler/CairoOutputDev.cc | 2 +- + 2 files changed, 8 insertions(+), 1 deletions(-) + +commit 9a6ffa1c6e009f8606a055f873efdcd5829fcfa2 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Dec 10 05:24:56 2006 +0000 + + 2006-12-09 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/Function.cc: Initialize PostScriptFunction::codeString + to + NULL so that it can safely deleted if initialization fails. + Fixes #9263. + + ChangeLog | 6 ++++++ + poppler/Function.cc | 1 + + 2 files changed, 7 insertions(+), 0 deletions(-) + +commit e92d63a179ae022270156da4e396c15ff9236d89 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Nov 23 19:01:44 2006 +0000 + + * m4/libjpeg.m4: Make JPEG library header search work under + MSYS. Patch by Alexis Wilke + + ChangeLog | 5 +++++ + m4/libjpeg.m4 | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 3913110f698fd006b394a395b5b0adfde30af31b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 22 21:55:27 2006 +0000 + + there should not be any whitespace after the \ + + qt4/src/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit c3ab7addec5a7990872949b813c2b727b1614d64 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 19 18:51:23 2006 +0000 + + Another leak fix on qt4/src/poppler-page.cc the previous changelog + is enough for this one ;-) + + qt4/src/poppler-page.cc | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 9e9b82da91abacb916b05302d40bf822af6ac7f1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Nov 19 12:59:48 2006 +0000 + + * qt4/src/poppler-link.cc: + * qt4/src/poppler-page.cc: + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-textbox.cc: Fix memory leaks + * splash/Splash.cc: Initialize the values of nClipRes + + ChangeLog | 8 ++++++++ + qt4/src/poppler-link.cc | 6 ++++++ + qt4/src/poppler-page.cc | 4 +++- + qt4/src/poppler-qt4.h | 1 + + qt4/src/poppler-textbox.cc | 5 +++++ + splash/Splash.cc | 2 +- + 6 files changed, 24 insertions(+), 2 deletions(-) + +commit b9faacc62182efcbc84df2471e4c5dcf2b03bda8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Nov 18 17:08:04 2006 +0000 + + * qt4/src/poppler-document.cc + * qt4/src/poppler-qt4.h: Add int marginRight, int + marginBottom, int + marginLeft, int marginTop, bool strictMargins to + Document::print() + + ChangeLog | 6 ++++++ + qt4/src/poppler-document.cc | 11 +++++++++-- + qt4/src/poppler-qt4.h | 6 +++++- + 3 files changed, 20 insertions(+), 3 deletions(-) + +commit da8e6d4c3e0afdaa031413649ae20545c8a1f845 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Nov 16 21:03:27 2006 +0000 + + really commit pino's patch :-S + + qt4/src/Doxyfile | 11 +++- + qt4/src/Mainpage.dox | 26 ++++----- + qt4/src/poppler-annotation.h | 33 +++++++----- + qt4/src/poppler-link.h | 68 +++++++++++++++++++++---- + qt4/src/poppler-qt4.h | 115 + ++++++++++++++++++++++++++--------------- + 5 files changed, 171 insertions(+), 82 deletions(-) + +commit 4f26e65096e3133a39fc0c9e82084c90cf77dda9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Nov 16 21:00:10 2006 +0000 + + * qt4/src/Mainpage.dox: + * qt4/src/Doxyfile: + * qt4/src/poppler-annotation.h: + * qt4/src/poppler-link.h: + * qt4/src/poppler-qt4.h: Improve API documentation. Patch by + Pino Toscano. + + Generated docu at http://people.freedesktop.org/~aacid/docs/qt4/ + + ChangeLog | 9 +++++++++ + qt4/src/Mainpage.dox | 2 +- + 2 files changed, 10 insertions(+), 1 deletions(-) + +commit e68b6f3f8fea1e4f036eba0f19bb7e0c423d408c +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Nov 15 21:07:50 2006 +0000 + + 2006-11-15 Albert Astals Cid <aacid@kde.org> + + * qt4/src/poppler-link.cc: + * qt4/src/poppler-page.cc: + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-document.cc: + * qt4/src/poppler-private.h: Generalize the way we render + the pages: + merge all the Page::renderTo* functions in only one that + renders on + a QImage, taking into account the currently chosen backend. + It is possible to switch rendering backend using the Document. + Patch by Pino Toscano. + + * qt4/tests/stress-poppler-qt4.cpp: + * qt4/tests/test-password-qt4.cpp: + * qt4/tests/test-poppler-qt4.cpp: Adapt the tests to the + changes in + the rendering API of Page. Patch by Pino Toscano. + + ChangeLog | 17 +++++ + qt4/src/poppler-document.cc | 14 ++++ + qt4/src/poppler-link.cc | 2 +- + qt4/src/poppler-page.cc | 125 + ++++++++++++++++++++------------------ + qt4/src/poppler-private.h | 32 +++++++--- + qt4/src/poppler-qt4.h | 75 ++++++----------------- + qt4/tests/stress-poppler-qt4.cpp | 3 +- + qt4/tests/test-password-qt4.cpp | 12 ++-- + qt4/tests/test-poppler-qt4.cpp | 17 ++--- + 9 files changed, 153 insertions(+), 144 deletions(-) + +commit 37088dd3335be6e7641c47bea9b1ddd689b07372 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Nov 13 19:16:44 2006 +0000 + + * poppler/ArthurOutputDev.cc: Small fix to get colors right + + ChangeLog | 4 ++++ + poppler/ArthurOutputDev.cc | 8 ++++---- + 2 files changed, 8 insertions(+), 4 deletions(-) + +commit 302e2cab9fd626222c69ad40f7e40be2e65d34a9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Nov 11 15:41:27 2006 +0000 + + Fix typo when outputing PS scale + + ChangeLog | 4 ++++ + poppler/PSOutputDev.cc | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit e3550fb286dae98992b30edbf4a9300fa58d2e77 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Tue Nov 7 23:53:31 2006 +0000 + + 2006-11-07 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: take horizontal scaling into account + when updating the font. Also, cleanup some unused code. Fixes + #8924. + + ChangeLog | 5 +++++ + poppler/CairoOutputDev.cc | 9 ++------- + 2 files changed, 7 insertions(+), 7 deletions(-) + +commit f020b64a72ad5c82c3e7bdcf15039bb0037b1f22 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Oct 18 18:43:59 2006 +0000 + + 2006-10-18 Albert Astals Cid <aacid@kde.org> + + * qt4/src/poppler-document.cc: + * qt4/src/poppler-private.h: Do not crash when opening a + encrypted document. Do not crash when unlocking a locked + document. + + ChangeLog | 7 +++++++ + qt4/src/poppler-document.cc | 41 + ++++++++++++++++------------------------- + qt4/src/poppler-private.h | 14 ++++++++++++++ + 3 files changed, 37 insertions(+), 25 deletions(-) + +commit 577330ee1d4d1021174cf1bd59557a83a017e06f +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Oct 11 23:09:24 2006 +0000 + + * splash/Splash.cc: + * splash/SplashErrorCodes.h: Do not crash on documents that + report a + 0x0 mask for an image, like + http://bugs.kde.org/attachment.cgi?id=18083&action=view + + ChangeLog | 7 +++++++ + splash/Splash.cc | 2 ++ + splash/SplashErrorCodes.h | 2 ++ + 3 files changed, 11 insertions(+), 0 deletions(-) + +commit 42c016c6d3c6de65fd92b51b9d6cc96d52404689 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Oct 8 20:38:47 2006 +0000 + + * poppler/Link.cc: + * poppler/Link.h: + * poppler/Makefile.am: + * poppler/Page.cc: + * poppler/Page.h: + * poppler/Sound.cc: + * poppler/Sound.h: Make poppler able to read Sound objects, + Sound + actions and Opening/Closing page actions. Patch by Pino + Toscano. + + * qt4/src/Makefile.am: + * qt4/src/poppler-link.cc: + * qt4/src/poppler-link.h: + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-page.cc: + * qt4/src/poppler-sound.cc: Support for sounds, sound links + and page + actions in the Qt4 backend. Patch by Pino Toscano. + + ChangeLog | 19 +++++ + poppler/Link.cc | 53 ++++++++++++++ + poppler/Link.h | 32 ++++++++ + poppler/Makefile.am | 2 + + poppler/Page.cc | 8 ++ + poppler/Page.h | 4 + + poppler/Sound.cc | 65 +++++++++++++++++ + poppler/Sound.h | 46 ++++++++++++ + qt4/src/Makefile.am | 1 + + qt4/src/poppler-link.cc | 35 +++++++++ + qt4/src/poppler-link.h | 26 +++++++- + qt4/src/poppler-page.cc | 32 ++++++++ + qt4/src/poppler-qt4.h | 87 ++++++++++++++++++++++ + qt4/src/poppler-sound.cc | 177 + ++++++++++++++++++++++++++++++++++++++++++++++ + 14 files changed, 586 insertions(+), 1 deletions(-) + +commit 1da064d7e7403ec7111eecb2b9613e27a2c4bb5d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Sep 30 16:28:35 2006 +0000 + + * qt4/src/poppler-page.cc: PA is optional, H is a name not a string + + ChangeLog | 4 ++++ + qt4/src/poppler-page.cc | 15 +++++++++------ + 2 files changed, 13 insertions(+), 6 deletions(-) + +commit 29366d8e470ab2207cdfdab115c2fa9618c4c74e +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 25 20:43:18 2006 +0000 + + * glib/Makefile.am + * qt/Makefile.am + * qt4/src/Makefile.am + * qt4/tests/Makefile.am + * test/Makefile.am + * utils/Makefile.am: Add FONTCONFIG_CFLAGS FONTCONFIG_LIBS + for people + that need them. Patch by morfoh@opensde.org. Fixes bug #8415 + + ChangeLog | 10 ++++++++++ + glib/Makefile.am | 2 ++ + qt/Makefile.am | 6 ++++-- + qt4/src/Makefile.am | 2 ++ + qt4/tests/Makefile.am | 2 ++ + test/Makefile.am | 6 ++++-- + utils/Makefile.am | 6 ++++-- + 7 files changed, 28 insertions(+), 6 deletions(-) + +commit 957c1e59df213a01ca87f03d067a8dab5dc09fb6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 25 20:05:28 2006 +0000 + + ignore poppler-features.h + + glib/.cvsignore | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 3158b54375bdfdc82779362cc9442aade87f84f6 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Sep 22 00:55:54 2006 +0000 + + 2006-09-21 Kristian Høgsberg <krh@redhat.com> + + * NEWS: Update list of bugs fixes, release 0.5.4. + + ChangeLog | 2 ++ + NEWS | 2 +- + 2 files changed, 3 insertions(+), 1 deletions(-) + +commit 17dd1f60f9328ae68fbe262ae0745be976ff9f95 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Sep 21 23:28:14 2006 +0000 + + 2006-09-21 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: Check for gtk+ 2.8 for the gtk+ test case, invert + help text for zlib option (#7788, #7661). + + ChangeLog | 3 +++ + configure.ac | 12 +++++------- + 2 files changed, 8 insertions(+), 7 deletions(-) + +commit ddbbd697424b9122ce1f0541ddada3fe8bb38fb1 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Sep 21 22:58:31 2006 +0000 + + 2006-09-21 Kristian Høgsberg <krh@redhat.com> + + * utils/pdftops.cc: Get duplex setting from GlobalParams. + + ChangeLog | 2 ++ + utils/pdftops.cc | 3 ++- + 2 files changed, 4 insertions(+), 1 deletions(-) + +commit 0d25592a1a5811ee8fffbd70307c7bcaaaacadf3 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Sep 21 22:40:52 2006 +0000 + + 2006-09-21 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc (_poppler_page_new): Make PopplerPage + reference its document throughout the lifetime of the page + (#7005). + + ChangeLog | 3 +++ + glib/poppler-page.cc | 5 ++++- + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit b834755c7ae45eb4020e9cdbc3852eac0151fcdc +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Sep 21 22:37:00 2006 +0000 + + 2006-09-21 Kristian Høgsberg <krh@redhat.com> + + * poppler/Gfx.cc: Remove the right out->updateAll() call. + + ChangeLog | 4 ++++ + poppler/Gfx.cc | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit 181e2af1edf2cbc3c8edadad0dce215a64a990dd +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Sep 21 01:05:23 2006 +0000 + + 2006-09-20 Kristian Høgsberg <krh@redhat.com> + + * NEWS: Sum up changes. + + * configure.ac: Bump release to 0.5.4. + + ChangeLog | 4 ++++ + NEWS | 10 ++++++++++ + configure.ac | 2 +- + 3 files changed, 15 insertions(+), 1 deletions(-) + +commit cc9c17a6730422be99ebcd69991fcf5d7b569640 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Sep 21 00:56:33 2006 +0000 + + 2006-09-20 Kristian Høgsberg <krh@redhat.com> + + * poppler/Gfx.cc: Remove last remnant of erroneous type3 commit a + while back, fixing #8182. + + ChangeLog | 5 +++++ + poppler/CairoOutputDev.cc | 1 - + poppler/Gfx.cc | 1 - + 3 files changed, 5 insertions(+), 2 deletions(-) + +commit 83be722b56d9266b89946fe994023351e47eb4fd +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Sep 20 20:22:19 2006 +0000 + + 2006-09-20 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/TextOutputDev.cc: TextFontInfo stores a copy of + a pointer + to a GfxFont but does not increment the reference count. Fix the + problem by calling incRefCnt and decRefCnt appropriately. Fixes + #4649 + + ChangeLog | 6 ++++++ + poppler/TextOutputDev.cc | 4 ++++ + 2 files changed, 10 insertions(+), 0 deletions(-) + +commit 1cf60015d7d78668c83737be6015dc880fd04ebf +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Sep 19 04:39:07 2006 +0000 + + 2006-09-19 Kristian Høgsberg <krh@redhat.com> + + * poppler/GlobalParams.cc: Add scanEncodingDirs() to automatically + scan in any encodings found under ${datadir}/poppler. + + * m4/define-dir.m4: New file, adds AC_DEFINE_DIR macro. + + ChangeLog | 7 +++ + configure.ac | 16 +------ + goo/gfile.cc | 16 +++---- + goo/gfile.h | 2 + + m4/define-dir.m4 | 34 ++++++++++++++ + poppler/GlobalParams.cc | 116 + +++++++++++++++++++++++++++++++--------------- + poppler/GlobalParams.h | 7 +++- + 7 files changed, 136 insertions(+), 62 deletions(-) + +commit 821c883f9df9cc0e5b81aa2e070727996cf3bc4e +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Sep 18 15:40:50 2006 +0000 + + 2006-09-13 Kristian Høgsberg <krh@redhat.com> + + * poppler/Makefile.am (libpoppler_la_LIBADD): Add cairo libs to + link if configured. + + ChangeLog | 3 +++ + poppler/Makefile.am | 4 ++++ + 2 files changed, 7 insertions(+), 0 deletions(-) + +commit d8ab8ebc94c32d32ad17ed54cede453de25d7dd5 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Sep 13 20:25:03 2006 +0000 + + 2006-09-13 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: Tighten glib check (#7906), add check for C++ + compiler (#8048). + + ChangeLog | 5 +++++ + configure.ac | 3 ++- + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit 7c748075e18cfe95be6a56adf09ce7f2f032b86f +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 12 19:48:47 2006 +0000 + + sorry Jeff + + ChangeLog | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +commit 6cdcfae0e1c6fbec07ee5273e6ad97ef04110868 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Sep 11 21:20:56 2006 +0000 + + 2006-09-11 Albert Astals Cid <aacid@kde.org> + + * qt4/src/poppler-annotation.cc: + * qt4/src/poppler-annotation.h: + * qt4/src/poppler-page.cc: Add support for + LinkAnnotation. Patch by + Pino Toscano + + ChangeLog | 10 +- + qt4/src/poppler-annotation.cc | 230 + ++++++++++++++++++++++++++++++++++++++- + qt4/src/poppler-annotation.h | 22 ++++- + qt4/src/poppler-page.cc | 237 + +++++++++++++++++++++++++---------------- + 4 files changed, 392 insertions(+), 107 deletions(-) + +commit 8335c7eea2aa62a580170f47323d8674bd89e412 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Fri Sep 8 23:28:22 2006 +0000 + + 2006-09-08 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: The work-around for 1x1 imagemasks + was not + calling cairo_set_source causing the rectangles to be drawn + the wrong + colour occasionally. Fix by moving the existing call to + cairo_set_source above the work-around. Fixes #7113. + + ChangeLog | 7 +++++++ + poppler/CairoOutputDev.cc | 8 ++++---- + 2 files changed, 11 insertions(+), 4 deletions(-) + +commit 02d505aa0176b6e5a54ee82426d8333a9ef8f000 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Thu Sep 7 04:01:39 2006 +0000 + + 2006-09-06 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: Avoid crashing in CairoOutputDev if + endString is called without a corresponding beginString. Fixes + #4515. + + ChangeLog | 5 +++++ + poppler/CairoOutputDev.cc | 8 +++++++- + 2 files changed, 12 insertions(+), 1 deletions(-) + +commit 3ea0aada0434c9f815814253dd9d1374ae6643cc +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Sep 6 23:54:30 2006 +0000 + + 2006-09-06 Jeff Muizelaar <jeff@infidigm.net> + + * configure.ac: + * poppler/FlateStream.cc: + * poppler/FlateStream.h: Fix FlateStream to not read more than it + needs. This has a performance impact because our input buffer + is now + only 1 byte large, however correctness is better than performance. + This should fix #3948. + + ChangeLog | 9 +++++++++ + configure.ac | 2 +- + poppler/FlateStream.cc | 35 +++++++++++++++++++++++++---------- + poppler/FlateStream.h | 3 ++- + 4 files changed, 37 insertions(+), 12 deletions(-) + +commit 1d2e6aedca0b8fcce6ac84ae2576ab067912886b +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Tue Sep 5 01:21:50 2006 +0000 + + 2006-09-04 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: Initialize currentFont to NULL before + use. Found by Pascal Terjan. Fixes #7924. + + ChangeLog | 5 +++++ + poppler/CairoOutputDev.cc | 1 + + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit 7905adaa21f2347346927fa567c64be60e2bc69c +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Sep 3 09:27:21 2006 +0000 + + * poppler/Dict.cc: + * poppler/Dict.h: + * poppler/Object.h: + * poppler/Parser.cc: Patch by Krzysztof Kowalczyk to increase + speed by + means of doing less copies between objects. See bug 8112 + for more + information. + + ChangeLog | 9 +++++++++ + poppler/Dict.cc | 4 ++-- + poppler/Dict.h | 11 +++++++++-- + poppler/Object.h | 12 ++++++++++++ + poppler/Parser.cc | 15 +++++++++------ + 5 files changed, 41 insertions(+), 10 deletions(-) + +commit 4da7c90a619002e54f436c4efee723b5bc42a112 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Aug 24 22:32:31 2006 +0000 + + * qt4/src/poppler-private.h: Init m_fontInfoScanner to + NULL. Discovered by + Rafael Rodríguez <rafael.rodriguez.tf@gmail.com> + + ChangeLog | 5 +++++ + qt4/src/poppler-private.h | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 469202e117910beb4e0ad906d5c154a3bae5c98b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Aug 16 14:35:14 2006 +0000 + + * qt/poppler-page.cc: Report correct page size. Backport from Qt4 + frontend. Patch by Wilfried Huss + + ChangeLog | 5 +++++ + qt/poppler-page.cc | 10 ++++++++-- + 2 files changed, 13 insertions(+), 2 deletions(-) + +commit b881844e4d31009c5d54c9321a6daaf0f354cf6b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Aug 16 09:18:04 2006 +0000 + + did not want to commit that, thanks Brad for noticing! + + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit f52380e6d569280839d7c37362bd7cc59f2573c3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Aug 15 22:27:31 2006 +0000 + + add a warning how nasty zlib can be, it can come and it your pdfs + and make your readers crash when you are not looking at it, so be + aware that if you enable it you are on your own ;-) + + ChangeLog | 4 ++++ + configure.ac | 4 ++-- + 2 files changed, 6 insertions(+), 2 deletions(-) + +commit 1caba84b1024f1fa7865deebbf70379855ce078d +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Aug 11 13:12:11 2006 +0000 + + 2006-08-11 Albert Astals Cid <aacid@kde.org> + + * poppler/Catalog.cc: Fix leak + + ChangeLog | 4 ++++ + poppler/Catalog.cc | 1 + + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit 9b6455f6530e273afaa5f948b67ceeec8a06f976 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Aug 10 16:08:51 2006 +0000 + + 2006-08-10 Albert Astals Cid <aacid@kde.org> + + * poppler/SplashOutputDev.cc: Try to fix refs to fonts + yet again + + ChangeLog | 4 ++++ + poppler/SplashOutputDev.cc | 4 ++-- + 2 files changed, 6 insertions(+), 2 deletions(-) + +commit 305f60e0437dcfc5babd449123a1fe4cd062a219 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Aug 5 17:10:07 2006 +0000 + + 2006-08-05 Albert Astals Cid <aacid@kde.org> + + * poppler/Catalog.cc: The name array can contain references + to strings + instead of stings themselves, or at least PDF of + https://bugs.freedesktop.org/show_bug.cgi?id=7780 does. This + makes it + work with that file + * qt4/src/poppler-embeddedfile.cc: Use UGooString for + description + + ChangeLog | 8 ++++++++ + poppler/Catalog.cc | 12 ++++++++++-- + qt4/src/poppler-embeddedfile.cc | 3 ++- + 3 files changed, 20 insertions(+), 3 deletions(-) + +commit dd8758ea3f0f44e9f8362343f15b2064f428ad64 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Aug 4 22:48:09 2006 +0000 + + 2006-08-05 Albert Astals Cid <aacid@kde.org> + + * utils/pdftotext.cc: + * utils/pdfinfo.cc: + * utils/pdffonts.cc: Add the posibility of reading a file + from stdin. + Patch by Dom Lachowicz + + ChangeLog | 7 +++++++ + utils/pdffonts.cc | 11 ++++++++++- + utils/pdfinfo.cc | 11 ++++++++++- + utils/pdftotext.cc | 11 ++++++++++- + 4 files changed, 37 insertions(+), 3 deletions(-) + +commit a418d844cf6baa797919796ceadaf21ef9b2e5b9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Aug 3 10:34:52 2006 +0000 + + * configure.ac: Use the correct variable to output the + utils status. + Patch by Dom Lachowic + + ChangeLog | 5 +++++ + configure.ac | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 1673b895656143a8a1f1a45e07f777f39995940d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jul 30 20:31:31 2006 +0000 + + * poppler/GfxState.cc: make nGfxBlendModeNames define + return the + correct size of the gfxBlendModeNames array so it does + not access + invalid memory areas when the blend mode is not + found. Discovered by + Krzysztof Kowalczyk + + ChangeLog | 7 +++++++ + poppler/GfxState.cc | 12 +++++++----- + 2 files changed, 14 insertions(+), 5 deletions(-) + +commit e4561568d14e7b3b2aec6ecaf3cc09078bdf7a46 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jul 30 09:38:28 2006 +0000 + + * splash/SplashFontEngine.cc: + * poppler/SplashOutputDev.cc: Fix memory leak when using + embedded + fonts in the pdf file. Patch by Krzysztof Kowalczyk + + ChangeLog | 6 ++++++ + poppler/SplashOutputDev.cc | 8 ++++++-- + splash/SplashFontEngine.cc | 12 ++++++++---- + 3 files changed, 20 insertions(+), 6 deletions(-) + +commit 4a27502159a89992f54be2673b44bf7a8392b60d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jul 29 16:24:53 2006 +0000 + + push back thing i did not want to commit, sorry + + configure.ac | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit ba448afc0e97a9e779409ff228adcd4f627971f5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jul 29 16:22:52 2006 +0000 + + * configure.ac: Disable qt and qt4 frontends if splash + backend is + disabled + + ChangeLog | 5 +++++ + configure.ac | 18 ++++++++++++++---- + 2 files changed, 19 insertions(+), 4 deletions(-) + +commit 1e32d3baa5e8296caf55bd5853216a96618c74ac +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Jul 28 18:17:45 2006 +0000 + + 2006-07-28 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoOutputDev.cc: Don't set font matrix translation + (fix from Behdad Esfahbod). + + ChangeLog | 5 +++++ + poppler/CairoOutputDev.cc | 4 ++-- + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit 0bc1b0f35c28cb80dd27d24110367348e52c143b +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jul 27 18:21:28 2006 +0000 + + fix date, i don't live in the past + + ChangeLog | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 2f27c3a0218608568f6cd1c718ef51b9879023a3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jul 27 18:17:50 2006 +0000 + + * poppler/Stream.cc: If you are going to test a variable, + better + initialize it first ;-) Fixes bug 7646 + + ChangeLog | 5 +++++ + poppler/Stream.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit f39ab43ca824cb7e5db73137c4545b3e85134425 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jul 26 18:16:01 2006 +0000 + + 2006-07-26 Albert Astals Cid <aacid@kde.org> + + * qt/poppler-document.cc: + * qt/poppler-private.h: + * qt/poppler-qt.h: Port the QDomDocument *Document::toc() + const method + from the qt4 frontend to the qt frontend. Patch by Wilfried + Huss + + ChangeLog | 7 +++++ + qt/poppler-document.cc | 18 +++++++++++++++ + qt/poppler-private.h | 58 + ++++++++++++++++++++++++++++++++++++++++++++++++ + qt/poppler-qt.h | 16 +++++++++++++ + 4 files changed, 99 insertions(+), 0 deletions(-) + +commit c3a9fd546b853c85b6be5fc8f4e5a78d8a7e7437 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jul 25 18:39:57 2006 +0000 + + * qt4/src/poppler-document.cc: Obey kdeprint masters in that + a library + should output as much device independent PS as posible, + so disabling + duplex printing for default is a good idea. + + ChangeLog | 6 ++++++ + qt4/src/poppler-document.cc | 2 +- + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit edc0499644b8083600ced9a5087ec0b0189e615b +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Jul 24 19:49:51 2006 +0000 + + 2006-07-24 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: + * poppler/Makefile.am: Move fontconfig dependency to libpoppler. + + ChangeLog | 5 +++++ + configure.ac | 18 +++++++----------- + poppler/Makefile.am | 6 ++++-- + 3 files changed, 16 insertions(+), 13 deletions(-) + +commit 24b5a68a3f4cdba63fbcd01dc178a330b5f604a7 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Tue Jul 18 21:32:11 2006 +0000 + + 2006-07-18 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/Gfx.cc: fix opCloseStroke to match the behaviour of + a separate opClose and opStroke. Previously, opCloseStroke only + closes if there is a path however opClose closes unconditionally. + + ChangeLog | 6 ++++++ + poppler/Gfx.cc | 2 +- + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit c57ebd40fcf85432b2e5045086d158a63af12525 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Tue Jul 18 21:26:57 2006 +0000 + + 2006-07-18 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/TextOutputDev.cc: call setDefaultCTM() after start page + like in Gfx.cc. This fixes a regression caused by the fix + to #6948. + + ChangeLog | 5 +++++ + poppler/TextOutputDev.cc | 1 + + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit 640d5d5a9d9e53f3f677eb05f3d18e6bfc74e95a +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jul 16 18:22:23 2006 +0000 + + 2006-07-16 Albert Astals Cid <aacid@kde.org> + + * poppler/GfxState.cc: Do not crash when we can not + parse a GfxImageColorMap + Fixes crash on pdf that can be found at + + ChangeLog | 7 +++++++ + poppler/GfxState.cc | 4 ++++ + qt4/src/Doxyfile | 4 ++-- + 3 files changed, 13 insertions(+), 2 deletions(-) + +commit c6926d1d8ab04468f56f4687cdd3f06af206226b +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jun 28 19:23:52 2006 +0000 + + * poppler/DCTStream.cc: + * poppler/DCTStream.h: Reset jpeg structures on reset. + Fixes crash while printing pdf at + http://bugs.kde.org/attachment.cgi?id=16818&action=view + + ChangeLog | 7 +++++++ + poppler/DCTStream.cc | 25 ++++++++++++++++++------- + poppler/DCTStream.h | 2 ++ + 3 files changed, 27 insertions(+), 7 deletions(-) + +commit 96ac8dec591a0325a822c1f7b7bc7e78b867e3a0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 25 16:59:31 2006 +0000 + + Ask for paper size width and height to pass it to PSOutputDev in + both qt frontends (qt got abi mantained, qt4 changed as you still + have to define UNSTABLE_POPPLER_QT4 to be able of using it, one day + we'll have to think of removing it) + + ChangeLog | 8 ++++++++ + qt/poppler-document.cc | 9 +++++++-- + qt/poppler-qt.h | 9 +++++++++ + qt4/src/poppler-document.cc | 4 ++-- + qt4/src/poppler-qt4.h | 10 +++++++++- + 5 files changed, 35 insertions(+), 5 deletions(-) + +commit 965011f2001fb1ea36857995d5555266f82b8d96 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 25 16:20:50 2006 +0000 + + put back a change that was not meant to be commited + + qt/poppler-qt.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 4995d09c91173d34a435112828aff21a63b147e9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 25 16:19:32 2006 +0000 + + rename poppler-link.h to poppler-link-qt3.h to not get conflicts + on install + + qt/Makefile.am | 2 +- + qt/poppler-link-qt3.h | 188 +++++++++++++++++++++++++++++++++++ + qt/poppler-link.cc | 258 + +++++++++++++++++++++++++++++++++++++++++++++++++ + qt/poppler-qt.h | 4 +- + 4 files changed, 449 insertions(+), 3 deletions(-) + +commit 087921b134c2646e6d41960f471a1819c7c8790a +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 25 10:29:22 2006 +0000 + + add link support to qt3 frontend. + Patch by Wilfried Huss based on Qt4 code + + ChangeLog | 11 ++++ + qt/Makefile.am | 4 +- + qt/poppler-document.cc | 19 +++---- + qt/poppler-page.cc | 136 + +++++++++++++++++++++++++++++++++++++++++++++-- + qt/poppler-private.h | 33 +++++++++++- + qt/poppler-qt.h | 14 ++++- + 6 files changed, 196 insertions(+), 21 deletions(-) + +commit 831bd8942ef3224354b128d5e14e68fdfc57168b +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 11 16:14:32 2006 +0000 + + optimization by Mario Teijeiro Otero + + poppler/UGooString.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1223fd4b200f6c13996f8299f3563c818af0c21d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Jun 10 22:23:19 2006 +0000 + + * poppler/UGooString.cc: When any of the chars that we + are passing to the UGooString is not pdfencodable, do not + encode the string, because we loose information if we do, + this fixes rendering of + http://publikationen.ub.uni-frankfurt.de/volltexte/2005/890/pdf/TR_abs_g.pdf + and other docs with type3 fonts and ligatures + + ChangeLog | 9 +++++++++ + poppler/UGooString.cc | 8 ++++++++ + 2 files changed, 17 insertions(+), 0 deletions(-) + +commit b85a39ddfc7de8c0621e995c114885ecd08fcdc2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jun 1 21:03:38 2006 +0000 + + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-page.cc: Add Rotation parameter that + is passed + to the respective output devs + + ChangeLog | 6 ++++++ + qt4/src/poppler-page.cc | 22 ++++++++++++++-------- + qt4/src/poppler-qt4.h | 14 +++++++++----- + 3 files changed, 29 insertions(+), 13 deletions(-) + +commit 2b5d3277f36864ff1ef44f1942f22de247d67ab6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jun 1 17:23:45 2006 +0000 + + * qt/poppler-document.cc: + * qt/poppler-qt.h: Add printing support, patch by + Stefan Kebekus <stefan.kebekus@math.uni-koeln.de> + + ChangeLog | 6 ++++++ + qt/poppler-document.cc | 18 ++++++++++++++++++ + qt/poppler-qt.h | 2 ++ + 3 files changed, 26 insertions(+), 0 deletions(-) + +commit 5380d005b7b54cc6587ce6e8c3bbb358da5cd9a5 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Thu Jun 1 06:42:25 2006 +0000 + + 2006-06-01 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/PSOutputDev.cc: + * poppler/PSOutputDev.h: Change filename parameter to PSOutputDev + constructor from char * to const char *. + + ChangeLog | 6 ++++++ + poppler/PSOutputDev.cc | 2 +- + poppler/PSOutputDev.h | 2 +- + 3 files changed, 8 insertions(+), 2 deletions(-) + +commit c2a81ea8b01f3943a2eb737cf957acc0d05f7eed +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed May 31 20:14:04 2006 +0000 + + * poppler/SplashOutputDev.cc: + * splash/Splash.cc: Fix no splashModeRGB8Qt mode, that is, + make it + show images + + I'm sorry, really, i'll try to do better + + ChangeLog | 6 ++++++ + poppler/SplashOutputDev.cc | 10 ++++++++++ + splash/Splash.cc | 3 +++ + 3 files changed, 19 insertions(+), 0 deletions(-) + +commit 643b310cf51474b6dfc077fe086ea121e807f6e1 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed May 31 19:18:28 2006 +0000 + + 2006-05-31 Jeff Muizelaar <jeff@infidigm.net> + + * TODO: Remove items's from my list that are done. + + ChangeLog | 4 ++++ + TODO | 3 --- + 2 files changed, 4 insertions(+), 3 deletions(-) + +commit 96e582721dcb15ea258b989c7c500084bff9f56d +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed May 31 17:31:49 2006 +0000 + + 2006-05-31 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDev.h: Change the cairo backend to use the + transformation in cairo instead of doing all of the + transformations in + the OutputDevice. Fixes #6948. + + ChangeLog | 7 ++ + poppler/CairoOutputDev.cc | 200 + ++++++++++++++++++++------------------------- + poppler/CairoOutputDev.h | 1 + + 3 files changed, 96 insertions(+), 112 deletions(-) + +commit 00ffb9bf50b6b3b2e8eaa8af593aaa01d4a62a34 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed May 31 04:53:27 2006 +0000 + + 2006-05-31 Kristian Høgsberg <krh@redhat.com> + + * NEWS: Sum up changes. + + * configure.ac: Bump release to 0.5.3. + + ChangeLog | 6 ++++++ + NEWS | 8 ++++++++ + configure.ac | 2 +- + 3 files changed, 15 insertions(+), 1 deletions(-) + +commit 223a4bf3a679f666b6c963a8787cf5b5ac75c4b6 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed May 31 02:02:54 2006 +0000 + + 2006-05-30 Kristian Høgsberg <krh@redhat.com> + + * poppler-glib.pc.in: + * configure.ac: Add poppler as a private requires if pkg-config + supports it. + + ChangeLog | 6 ++++++ + configure.ac | 11 +++++++++++ + poppler-glib.pc.in | 3 ++- + 3 files changed, 19 insertions(+), 1 deletions(-) + +commit 7aaa4d3fbdb8ea2534d3cb80e68b2759b2e8fd2f +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue May 30 21:46:06 2006 +0000 + + 2006-05-30 Kristian Høgsberg <krh@redhat.com> + + * test/gtk-cairo-test.cc: Add --page option to gtk-cairo-test. + + ChangeLog | 4 ++++ + test/gtk-cairo-test.cc | 21 ++++++++++++++++++--- + 2 files changed, 22 insertions(+), 3 deletions(-) + +commit f7c1d519b9695ad8adfdcf3af696de746cdcf375 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Mon May 29 18:44:17 2006 +0000 + + 2006-05-29 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoFontEngine.cc: + * poppler/CairoFontEngine.h: + * poppler/CairoOutputDev.cc: Allow CairoFont creation to fail more + gracefully. Fixes #4030. + + ChangeLog | 7 +++++++ + poppler/CairoFontEngine.cc | 27 +++++++++++++++++++++------ + poppler/CairoFontEngine.h | 4 +++- + poppler/CairoOutputDev.cc | 5 +++++ + 4 files changed, 36 insertions(+), 7 deletions(-) + +commit 84861800dad3649d4757d5c5539b9e86e2b2c644 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat May 27 17:27:37 2006 +0000 + + 2006-05-27 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDev.h: Back out the rest of krh's type3 + font work. This fixes type3 fonts in CairoOutputDevice. + + ChangeLog | 6 ++++++ + poppler/CairoOutputDev.cc | 3 +++ + poppler/CairoOutputDev.h | 2 +- + 3 files changed, 10 insertions(+), 1 deletions(-) + +commit 6f5a89a0a2cf17d45d1c31ce105829be8c7ac456 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue May 23 20:49:16 2006 +0000 + + * poppler/SplashOutputDev.cc: + * qt4/src/poppler-private.h: + * splash/Splash.cc: + * splash/SplashBitmap.cc: + * splash/SplashTypes.h: bring splashModeRGB8 back to the + old code + (before Frank's patch), create splashModeRGB8Qt that has + Frank's + codepath and is used by Qt frontends. Fixes corruption on + other programs expecting the old behaviour. + + Remember dude we are now a lib! you can not change behaviour from + one day to another! + + /me hits himself + + ChangeLog | 11 +++ + poppler/SplashOutputDev.cc | 8 ++ + qt/poppler-private.h | 2 +- + qt4/src/poppler-private.h | 2 +- + splash/Splash.cc | 169 + ++++++++++++++++++++++++++++++++++++++++++++ + splash/SplashBitmap.cc | 26 ++++++- + splash/SplashTypes.h | 2 + + 7 files changed, 216 insertions(+), 4 deletions(-) + +commit 495d592c3ba7fe81e03774f5b2ed677e5aa560c7 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue May 23 19:16:37 2006 +0000 + + 2006-05-23 Kristian Høgsberg <krh@redhat.com> + + * qt4/src/Makefile.am (libpoppler_qt4_la_SOURCES): Add missing + + ChangeLog | 5 +++++ + qt4/src/Makefile.am | 1 + + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit eecd06c86585bca05c99cd2e9a1b1ff3bbae3c72 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon May 22 20:19:35 2006 +0000 + + 2006-05-22 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: Bump release. + * NEWS: Sum up changes. + + ChangeLog | 5 +++++ + NEWS | 11 ++++++++++- + configure.ac | 2 +- + 3 files changed, 16 insertions(+), 2 deletions(-) + +commit 680f20dfd1cf0342d49516b3848a2aef5d2a3883 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon May 22 19:58:41 2006 +0000 + + 2006-05-22 Kristian Høgsberg <krh@redhat.com> + + Patch from Rainer Keller to fix the ImageOutputDev (#6984). + + * utils/ImageOutputDev.cc (drawImage): Upate to work with new + 16-bit color representation. + + * utils/ImageOutputDev.h: Return gTrue for needNonText(). + + ChangeLog | 9 +++++++++ + NEWS | 4 ++++ + utils/ImageOutputDev.cc | 6 +++--- + utils/ImageOutputDev.h | 2 +- + 4 files changed, 17 insertions(+), 4 deletions(-) + +commit e43a06bf6e953fa9af18476e2c9f27106398c09c +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sun May 21 23:26:45 2006 +0000 + + 2006-05-21 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoFontEngine.cc: + * poppler/CairoFontEngine.h: Back out type3 font work committed by + accident. + + ChangeLog | 6 + + poppler/CairoFontEngine.cc | 347 + +++++--------------------------------------- + poppler/CairoFontEngine.h | 17 +-- + 3 files changed, 47 insertions(+), 323 deletions(-) + +commit 7d4bb0533f88f06449ebd64c1220d0b75001937d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun May 21 18:14:15 2006 +0000 + + fix all is blue issue on ppc machines + + ChangeLog | 7 +++++++ + qt/poppler-page.cc | 17 +++++++++++++++++ + qt4/src/poppler-page.cc | 17 +++++++++++++++++ + 3 files changed, 41 insertions(+), 0 deletions(-) + +commit 655af1e0126ca96d75c9c718d7d8f928c898b1f6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun May 21 17:19:53 2006 +0000 + + hope to fix really Kouhei's name now + + ChangeLog | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +commit cc783a1ebe868ff75db5472775dabe0020ae501f +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun May 21 11:54:30 2006 +0000 + + Fix Kouhei name + + ChangeLog | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e4b6ad3bb873a6f334934921e6d56e9d26e06a9a +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri May 19 22:55:49 2006 +0000 + + Add bug number to ChangeLog entry. + + ChangeLog | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 46f5f070cceb2c0f3b53537c8e33340b9f1bba38 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri May 19 22:26:03 2006 +0000 + + 2006-05-19 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-action.h: + * glib/poppler-action.cc: Add poppler_dest_get_type(), patch from + Kouhei Souto (#6907). + + ChangeLog | 4 ++++ + glib/poppler-action.cc | 13 +++++++++++++ + glib/poppler-action.h | 4 ++++ + 3 files changed, 21 insertions(+), 0 deletions(-) + +commit 875dc5b112dfe2d4a48a7567b1ff79257447cc0d +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri May 19 22:21:35 2006 +0000 + + 2006-05-19 Kristian Høgsberg <krh@redhat.com> + + * poppler-glib.pc.in (Requires): Add gdk-2.0 dependency, from + Kouhei Souto (#6896). + + ChangeLog | 3 +++ + poppler-glib.pc.in | 2 +- + 2 files changed, 4 insertions(+), 1 deletions(-) + +commit b66dda2640c088bbe205f698a0c4028144027922 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri May 19 22:19:21 2006 +0000 + + 2006-05-19 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-document.h (POPPLER_TYPE_INDEX_ITER) + (POPPLER_TYPE_FONTS_ITER): Add these macros, patch from Kouhei + Souto (#6897). + + ChangeLog | 4 ++++ + glib/poppler-document.h | 2 ++ + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit 095730456c0d8312067af10dd55a3b9165a83736 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri May 19 22:16:25 2006 +0000 + + 2006-05-19 Kristian Høgsberg <krh@redhat.com> + + * glib/Makefile.am (INCLUDES): Add define for G_LOG_DOMAIN, from + Kouhei Souto (#6899). + + ChangeLog | 3 +++ + glib/Makefile.am | 1 + + 2 files changed, 4 insertions(+), 0 deletions(-) + +commit b8d77633899c1dec5f3b9c9a0f075f39afa98965 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri May 19 22:12:38 2006 +0000 + + 2006-05-19 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-document.cc (poppler_document_save): Memleak patch + from Paolo Borelli (#6908). + + ChangeLog | 5 +++++ + glib/poppler-document.cc | 2 ++ + 2 files changed, 7 insertions(+), 0 deletions(-) + +commit 488f77298fee9eebbca5983c1c9fb186b3b67aa3 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri May 19 22:04:17 2006 +0000 + + 2006-05-19 Kristian Høgsberg <krh@redhat.com> + + * TextOutputDev.h: + * TextOutputDev.cc: + * UnicodeTypeTable.h: + * UnicodeTypeTable.cc: + * UnicodeCClassTables.h: + * UnicodeCompTables.h: + * UnicodeDecompTables.h: + * gen-unicode-tables.py: Patch from Ed Catmur (#2929) to convert + search string and document text to unicode NFKC (compatibility + composition) before matching so ligatures match correctly. + + ChangeLog | 13 + + poppler/Makefile.am | 5 + + poppler/TextOutputDev.cc | 41 +- + poppler/TextOutputDev.h | 3 + + poppler/UnicodeCClassTables.h | 1827 +++++++++ + poppler/UnicodeCompTables.h | 665 ++++ + poppler/UnicodeDecompTables.h | 8526 + +++++++++++++++++++++++++++++++++++++++++ + poppler/UnicodeTypeTable.cc | 235 ++ + poppler/UnicodeTypeTable.h | 3 + + 9 files changed, 11303 insertions(+), 15 deletions(-) + +commit ecb942e54a1ab0f7eded91b7d1278f0ac62e2071 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri May 19 21:42:54 2006 +0000 + + 2006-05-19 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc (poppler_page_prepare_output_dev): Fix the + rotation bug for real. + + ChangeLog | 5 +++++ + glib/poppler-page.cc | 16 +++++++++------- + 2 files changed, 14 insertions(+), 7 deletions(-) + +commit 28ae789afe0625a641525e4a0768d51fa8bd667c +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri May 19 20:54:13 2006 +0000 + + 2006-05-19 Kristian Høgsberg <krh@redhat.com> + + Patch from Kouhei Sutou (#6905). + + * glib/poppler-document.cc: + * glib/poppler-document.h: + * glib/poppler-private.h: + * glib/reference/tmpl/poppler-private.sgml: + * glib/reference/tmpl/poppler.sgml: Make PopplerPSOutput a proper + glib object. + + ChangeLog | 11 ++++++ + glib/poppler-document.cc | 51 + ++++++++++++++++++++++++----- + glib/poppler-document.h | 4 ++ + glib/poppler-private.h | 2 + + glib/reference/tmpl/poppler-private.sgml | 1 + + glib/reference/tmpl/poppler.sgml | 1 + + 6 files changed, 61 insertions(+), 9 deletions(-) + +commit 02cf7fd7df0b2d8c2b1c6f108e581bc1c7a973b1 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri May 19 20:35:43 2006 +0000 + + 2006-05-19 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc (poppler_page_prepare_output_dev): Fix + rotation bug (#6913, #6926). + + ChangeLog | 3 +++ + glib/poppler-page.cc | 12 +++++++++++- + 2 files changed, 14 insertions(+), 1 deletions(-) + +commit 78ae3efd9541d7b63ff5a2c4de3fde300806688f +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri May 19 19:21:59 2006 +0000 + + 2006-05-19 Kristian Høgsberg <krh@redhat.com> + + Memory leak patch from Carlos Garcia Campos (#6947). + + * glib/poppler-action.cc: + * glib/poppler-document.cc: + * glib/poppler-page.cc: + * poppler/CairoFontEngine.cc: + * poppler/CairoFontEngine.h: + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDev.h: + * poppler/Gfx.cc: + * poppler/TextOutputDev.cc: Fix various memory leaks. + + ChangeLog | 14 ++ + glib/poppler-action.cc | 9 +- + glib/poppler-document.cc | 31 +++- + glib/poppler-page.cc | 2 + + poppler/CairoFontEngine.cc | 347 + +++++++++++++++++++++++++++++++++++++++----- + poppler/CairoFontEngine.h | 17 ++- + poppler/CairoOutputDev.cc | 5 +- + poppler/CairoOutputDev.h | 2 +- + poppler/Gfx.cc | 1 + + poppler/TextOutputDev.cc | 9 + + 10 files changed, 381 insertions(+), 56 deletions(-) + +commit 354c1926b7181fd668f221e1d672974e04fda747 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri May 19 17:24:19 2006 +0000 + + * qt4/src/poppler-link.cc: Patch by Pino Toscano, ensure the + splashoutput is created when parsing the TOC. + + ChangeLog | 5 +++++ + qt4/src/poppler-link.cc | 5 +++-- + 2 files changed, 8 insertions(+), 2 deletions(-) + +commit 3c9a5f37704781c9a51e72edd18451870452b9a7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun May 14 16:11:54 2006 +0000 + + * poppler/FontInfo.cc: Fix possible crash, half patch + by Kouhei Sutou <kou@cozmixng.org> + + ChangeLog | 5 +++++ + poppler/FontInfo.cc | 4 ++-- + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit 436f578fe762e8ceccce95a0f2003406527dde64 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat May 13 16:01:57 2006 +0000 + + * poppler/GfxState.cc: + * poppler/GfxState.h: Fix memleak, patch by + Carlos Garcia Campos <carlosgc@gnome.org> + + ChangeLog | 6 ++++++ + poppler/GfxState.cc | 8 ++++++++ + poppler/GfxState.h | 3 +-- + 3 files changed, 15 insertions(+), 2 deletions(-) + +commit 906515769097f2e38f6b2c2aff598919b9d1ee0d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat May 13 15:58:37 2006 +0000 + + * qt4/src/poppler-document.cc: leak-- + * qt4/src/poppler-private.h: Refcount globalparams + * qt4/tests/test-poppler-qt4.cpp: Some leaks less + + ChangeLog | 6 ++++++ + qt4/src/poppler-document.cc | 10 +++++----- + qt4/src/poppler-private.h | 8 ++++++++ + qt4/tests/test-poppler-qt4.cpp | 6 ++++-- + 4 files changed, 23 insertions(+), 7 deletions(-) + +commit 46fd63c44369c882d8dac473d4156001d9d4ed18 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat May 13 11:14:24 2006 +0000 + + numbers for easier casting + + qt4/src/poppler-link.h | 14 ++++++++++++-- + 1 files changed, 12 insertions(+), 2 deletions(-) + +commit 35500375e3f790c444ab7e7d0a687d270c5a66b1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri May 12 21:02:01 2006 +0000 + + fixing compile problems for some people + + qt4/src/poppler-page.cc | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 181f09829cf4831965059e3064114d83348c51b5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri May 12 20:40:05 2006 +0000 + + * qt4/src/Makefile.am + * qt4/src/poppler-annotation-helper.h + * qt4/src/poppler-annotation.cc + * qt4/src/poppler-annotation.h + * qt4/src/poppler-link.cc + * qt4/src/poppler-link.h + * qt4/src/poppler-page.cc + * qt4/src/poppler-qt4.h: Code for annotations stripped + from oKular, + it's all based on Enrico's work, so ask him for details, + the problem + is that he left KDE development a while ago. + + ChangeLog | 14 + + qt4/src/Makefile.am | 2 + + qt4/src/poppler-annotation-helper.h | 213 ++++++++++ + qt4/src/poppler-annotation.cc | 792 + +++++++++++++++++++++++++++++++++++ + qt4/src/poppler-annotation.h | 257 ++++++++++++ + qt4/src/poppler-link.cc | 4 +- + qt4/src/poppler-link.h | 2 +- + qt4/src/poppler-page.cc | 691 ++++++++++++++++++++++++++++++ + qt4/src/poppler-qt4.h | 8 +- + 9 files changed, 1980 insertions(+), 3 deletions(-) + +commit 3a48e89dfbe54af73a68ed8e917938f14ad17f01 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue May 9 20:07:06 2006 +0000 + + * qt4/src/Makefile.am: + * qt4/src/poppler-document.cc: + * qt4/src/poppler-link.cc: + * qt4/src/poppler-page.cc: + * qt4/src/poppler-private.h: + * qt4/src/poppler-qt4.h: Adding links extraction code, + should work as + it is basically stripped out from kpdf, but comments are + obviously welcome as always + + ChangeLog | 10 +++ + qt4/src/Makefile.am | 1 + + qt4/src/poppler-document.cc | 13 +-- + qt4/src/poppler-link.cc | 129 ++++++++++++++++++++++++++++++- + qt4/src/poppler-link.h | 178 + +++++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-page.cc | 139 ++++++++++++++++++++++++++++++---- + qt4/src/poppler-private.h | 9 +- + qt4/src/poppler-qt4.h | 56 +++----------- + 8 files changed, 456 insertions(+), 79 deletions(-) + +commit f628e1506e576a8553a9699c1d7f05ef55c24fa2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 8 19:03:51 2006 +0000 + + memleak-- by carlos + + ChangeLog | 5 +++++ + poppler/Catalog.cc | 5 ++++- + 2 files changed, 9 insertions(+), 1 deletions(-) + +commit 1fce6266564583d356817a21f43c6b1ad8ce3716 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat May 6 10:57:07 2006 +0000 + + fix code, i suck + + qt4/src/poppler-page.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit be913b90d59da35a347498b86fdd3edb065aef23 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri May 5 20:51:01 2006 +0000 + + * poppler/Function.cc: quick fix for KDE bug #126760 + + Better solutions are of course accepted + + ChangeLog | 4 ++++ + poppler/Function.cc | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit 2b085293bd73b4e77da848b3fe63a7e82e9ba5e5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu May 4 19:10:55 2006 +0000 + + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-page.cc: Implement search functionality + + more code to make oKular qt4popplered possible, probably not most + quickest code around, feel free to comment/optimize + + ChangeLog | 5 +++++ + qt4/src/poppler-page.cc | 43 + +++++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-qt4.h | 16 ++++++++++++++++ + 3 files changed, 64 insertions(+), 0 deletions(-) + +commit a9b0c7977aba7bc85a8673c7f95187ff17ee4173 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue May 2 04:38:39 2006 +0000 + + 2006-05-02 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc: + * poppler/Gfx.cc: + * poppler/GfxFont.cc: + * poppler/GfxFont.h: + * poppler/GfxState.cc: + * poppler/TextOutputDev.cc: Patch from Gary Coady to add reference + counting to GfxFont so we don't crash on text selection. + + ChangeLog | 10 ++++++++++ + glib/poppler-page.cc | 2 +- + poppler/Gfx.cc | 2 ++ + poppler/GfxFont.cc | 14 +++++++++++++- + poppler/GfxFont.h | 4 ++++ + poppler/GfxState.cc | 7 +++++++ + poppler/TextOutputDev.cc | 1 + + 7 files changed, 38 insertions(+), 2 deletions(-) + +commit 57af0207334ff1a407899370281ebb90fe953a32 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 1 18:33:47 2006 +0000 + + * qt4/src/poppler-page.cc: + * qt4/src/poppler-private.h: + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-textbox.cc: Add nextWord(), hasSpaceAfter() + and + edge() to TextBox + + More things to make poppler-qt4Okular nearer + + ChangeLog | 8 ++++++++ + qt4/src/poppler-page.cc | 14 ++++++++++++++ + qt4/src/poppler-private.h | 11 +++++++++++ + qt4/src/poppler-qt4.h | 8 ++++++++ + qt4/src/poppler-textbox.cc | 23 ++++++++++++++++------- + 5 files changed, 57 insertions(+), 7 deletions(-) + +commit 61b126390f764fd38c79b6a64160a7dc7870bd4a +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 1 13:41:14 2006 +0000 + + revert thing that should not have gone in + + poppler/PageLabelInfo.cc | 43 + +++++++++++++++++++++++++++++++++++++++++++ + poppler/PageLabelInfo.h | 44 + -------------------------------------------- + 2 files changed, 43 insertions(+), 44 deletions(-) + +commit f2424ef63e86d82b2be277e2b268b48aae29601e +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon May 1 13:32:31 2006 +0000 + + * qt4/src/poppler-document.cc: + * qt4/src/poppler-private.h: + * qt4/src/poppler-qt4.h: Add the possibility of setting + the paper + color + + One step more to make oKular fully use the qt4 bindings + + ChangeLog | 7 ++++++ + poppler/PageLabelInfo.cc | 43 + ------------------------------------------ + poppler/PageLabelInfo.h | 44 + +++++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-document.cc | 10 +++++++++ + qt4/src/poppler-private.h | 22 ++++++++++++++++---- + qt4/src/poppler-qt4.h | 6 +++++ + 6 files changed, 84 insertions(+), 48 deletions(-) + +commit 4147400e2b692df7f70c3772e8a4b576d4d85294 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 29 15:23:41 2006 +0000 + + Fix memory leak. Bug 6765 + + ChangeLog | 5 +++++ + poppler/JBIG2Stream.cc | 1 + + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit 960d60467d62d28f20b127d07e8de1af42eec568 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Thu Apr 27 17:26:36 2006 +0000 + + 2006-04-27 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: delete imgStr if some of the cairo + functions fail. Fixes coverty reports #2106, #2107, #2077 and + bug #6764. Patch by Kjartan Maraas. + + ChangeLog | 6 ++++++ + poppler/CairoOutputDev.cc | 34 +++++++++++++++++++++++++--------- + 2 files changed, 31 insertions(+), 9 deletions(-) + +commit 155112131c6e25bfde752cf5daa80a6c9712cfed +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Apr 23 15:50:52 2006 +0000 + + qt4/src/poppler-private.h: Protect us against a link not having + a destination or a namedDestination + + ChangeLog | 5 +++++ + qt4/src/poppler-private.h | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit c902a3a22bcceedc8ee8ca377064efcc8a9178ca +Author: Brad Hards <bradh@frogmouth.net> +Date: Fri Apr 21 12:02:19 2006 +0000 + + Add another path to search for Qt4 libs and includes. + + CCMAIL: montel@kde.org + + m4/qt.m4 | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 18f8e1f1d213dbcda27cd0ec429273801f65e208 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 18 19:11:56 2006 +0000 + + * goo/GooVector.h: Fix typo that was preventing build with MSVC8 + Discovered by Reece Dunn <msclrhd@hotmail.com> + + ChangeLog | 5 +++++ + goo/GooVector.h | 4 ++-- + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit cbbb28a5959343d20dffe945ea83272c0b2e287b +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sun Apr 16 22:59:44 2006 +0000 + + 2006-04-16 Carlos Garcia Campos <carlosgc@gnome.org> + + * glib/poppler-action.cc: + * glib/poppler-action.h: + * glib/poppler-private.h: + * glib/poppler.h: + Add support for named destinations and named actions. + + * glib/poppler-document.cc: + * glib/poppler-document.h: + Allow to find named destinations in document. + + ChangeLog | 12 +++ + glib/poppler-action.cc | 152 + ++++++++++++++++++++++++----- + glib/poppler-action.h | 7 +- + glib/poppler-document.cc | 37 +++++++ + glib/poppler-document.h | 4 +- + glib/poppler-private.h | 2 + + glib/poppler.h | 1 + + glib/reference/tmpl/poppler-action.sgml | 2 + + glib/reference/tmpl/poppler-document.sgml | 4 - + 9 files changed, 189 insertions(+), 32 deletions(-) + +commit 85687a1e0e4c6be2dbfb23ba00018b9c7c7454f5 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Apr 12 06:52:07 2006 +0000 + + 2006-04-12 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDev.h: Add support for masked images to + the cairo + backend. CairoOutputDevice really should have been refactored + before + committing this, but the results were so pretty I couldn't resist. + Fixes #6174. + + ChangeLog | 8 +++ + poppler/CairoOutputDev.cc | 118 + +++++++++++++++++++++++++++++++++++++++++++++ + poppler/CairoOutputDev.h | 8 +++ + 3 files changed, 134 insertions(+), 0 deletions(-) + +commit 6039d4fc65cb25bef20efa29bc29d42086fc0854 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Apr 12 05:46:44 2006 +0000 + + 2006-04-12 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: Fix breakage by krh by only calling + cairo_destroy on non-null. + + ChangeLog | 5 +++++ + poppler/CairoOutputDev.cc | 4 +++- + 2 files changed, 8 insertions(+), 1 deletions(-) + +commit d839a0bd78361930e5e2fe889df12e1e853ffed3 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Apr 12 02:07:07 2006 +0000 + + 2006-04-11 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: + * poppler-glib.pc.in: + * glib/Makefile.am: + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/poppler.h: + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDev.h: + * glib/poppler-features.h.in: + Make the CairoOutputDev render to a cairo_t instead of a + cairo_surface_t and expose that functionality in the glib wrapper + (poppler_page_render). + + * test/Makefile.am: + * test/gtk-cairo-test.cc: + Update gtk-cairo-test to use this new interface and add a spin + button for changing page (#5951). + + * utils/Makefile.am (EXTRA_DIST): Fix warning where this was + assigned twice. + + ChangeLog | 23 ++++ + configure.ac | 8 ++ + glib/Makefile.am | 10 +- + glib/poppler-features.h.in | 24 ++++ + glib/poppler-page.cc | 63 +++++++--- + glib/poppler-page.h | 10 ++ + glib/poppler.h | 1 + + poppler-glib.pc.in | 2 +- + poppler/CairoOutputDev.cc | 23 ++-- + poppler/CairoOutputDev.h | 6 +- + test/Makefile.am | 4 +- + test/gtk-cairo-test.cc | 286 + +++++++++++++------------------------------- + utils/Makefile.am | 6 +- + 13 files changed, 221 insertions(+), 245 deletions(-) + +commit b198c9801c668014c0979c57033a0637e7e046e2 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Mon Apr 10 18:12:44 2006 +0000 + + 2006-04-10 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: take originX and originY into + account in + drawChar() to draw vertical text properly. Fixes #6551. + + ChangeLog | 5 +++++ + poppler/CairoOutputDev.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit fd251f52efc7748fda91cc77fb9d3966e0f02ac8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Apr 9 11:05:51 2006 +0000 + + m4/qt.m4: Improve for systems that need -pthread to be linked when + linking Qt. Patch by Diego Pettenò + + ChangeLog | 5 +++++ + m4/qt.m4 | 28 +++++++++++++++++++++++++++- + 2 files changed, 32 insertions(+), 1 deletions(-) + +commit 36de9747153a2ea9b3cf86c41e75a521441a2e06 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 8 10:44:43 2006 +0000 + + * poppler/Makefile.am: + * qt4/src/Makefile.am: Don't link Qt4 in libpoppler when using + Qt4 frontend + Patch by Stefan Schweizer + + ChangeLog | 6 ++++++ + poppler/Makefile.am | 11 +++++------ + qt4/src/Makefile.am | 1 + + 3 files changed, 12 insertions(+), 6 deletions(-) + +commit bf7afe161d76c50fd1c480eb236607145782e59d +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Apr 5 18:20:56 2006 +0000 + + poppler/JBIG2Stream.cc: Fix for some buggy JBIG2 documents, patch + by Raj Kumar and Paul Walmsley. Fixes bug 6500 + + ChangeLog | 5 +++++ + poppler/JBIG2Stream.cc | 43 +++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 48 insertions(+), 0 deletions(-) + +commit 315f8e488d3db848f88a06c7568b6583bbf0e432 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Apr 5 17:20:56 2006 +0000 + + 2006-04-05 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: use a separate matrix for the + softmask. + fixes #6492. + + ChangeLog | 5 +++++ + poppler/CairoOutputDev.cc | 11 ++++++++++- + 2 files changed, 15 insertions(+), 1 deletions(-) + +commit 0d311518f678a479c1efeaec15011e0a34de80fc +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 4 21:01:01 2006 +0000 + + * splash/Splash.cc: + * splash/SplashBitmap.cc: Make Splashbitmap RGB8 use 32bits + internally + * qt/poppler-page.cc: + * qt4/src/poppler-page.cc: Adapt to splashbitmap change so + copying to + QImage is faster. + Patch by Frank Meerkötter slightly modified by Albert + Astals Cid + + I'll leave adapting the glib frontend for you guys, i tried to adapt + it but i got lost at gdk_pixbuf_get_n_channels (pixbuf); + + ChangeLog | 9 +++++ + qt/poppler-page.cc | 18 +++------- + qt4/src/poppler-page.cc | 15 +++----- + splash/Splash.cc | 81 + ++++++++++++++++++++++++----------------------- + splash/SplashBitmap.cc | 10 +++--- + 5 files changed, 67 insertions(+), 66 deletions(-) + +commit 888bd41b42507f0a1af55c55495d31d802ce7706 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Apr 4 20:42:08 2006 +0000 + + Fix crash when using fixedpoint math. Patch by Frank Meerkoetter + + ChangeLog | 5 +++++ + splash/SplashFTFont.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 56c98450160b639790931226a045ce4712e7d45e +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Apr 2 18:07:59 2006 +0000 + + Improvements to the Qt4 frontend, comments welcome + + ChangeLog | 7 ++ + m4/qt.m4 | 4 +- + qt4/src/Makefile.am | 1 + + qt4/src/poppler-document.cc | 85 +++++++++++++++++++++------ + qt4/src/poppler-link.cc | 138 + +++++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-page.cc | 9 +++- + qt4/src/poppler-private.h | 95 +++++++++++++++++++++++++++++- + qt4/src/poppler-qt4.h | 86 ++++++++++++++++++++++++--- + 8 files changed, 395 insertions(+), 30 deletions(-) + +commit c80ebf237e9c6232a1d0567a2688a294acfd481b +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Apr 1 11:25:57 2006 +0000 + + Fix bug 6454 + + ChangeLog | 5 +++++ + poppler/XRef.cc | 22 +++++++++++++--------- + 2 files changed, 18 insertions(+), 9 deletions(-) + +commit fe8142fbc12127682b8024673fe1af57b47bb5c9 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Tue Mar 21 04:25:53 2006 +0000 + + 2006-03-20 Jeff Muizelaar <jeff@infidigm.net> + + * glib/poppler-page.cc: Avoid strdup in poppler_page_get_property + and + make code cleaner. Combined with the memleak fix closes #6187. + Patch by chpe. + + ChangeLog | 6 ++++++ + glib/poppler-page.cc | 5 +---- + 2 files changed, 7 insertions(+), 4 deletions(-) + +commit 4f961df2e6e91a0dc0a024ae5acdefa394179a05 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Tue Mar 21 04:19:18 2006 +0000 + + 2006-03-20 Jeff Muizelaar <jeff@infidigm.net> + + * glib/poppler-page.cc: Fix memory leak in poppler_page_get_text + Patch by chpe. + + ChangeLog | 5 +++++ + glib/poppler-page.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit ff4febab0a519732972c21bf76d7693c98265e0f +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Mar 20 20:07:36 2006 +0000 + + Use UGooString for dates, fixes KDE bug 123938 + + ChangeLog | 6 ++++++ + qt/poppler-document.cc | 2 +- + qt4/src/poppler-document.cc | 2 +- + 3 files changed, 8 insertions(+), 2 deletions(-) + +commit 75ac6de8cd651b1cbe2d6a7ffa4574097088041f +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Mon Mar 20 19:12:29 2006 +0000 + + 2006-03-20 Carlos Garcia Campos <calosgc@gnome.org> + + reviewed by: Jeff Muizelaar <jeff@infidigm.net> + + * glib/poppler-document.cc: Fix memory leak in + poppler_font_info_free + + ChangeLog | 6 ++++++ + glib/poppler-document.cc | 2 +- + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit 784f6d9a0888dab34c586ffe14db8e55b8a11f51 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Mon Mar 20 19:02:10 2006 +0000 + + 2006-03-20 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoFontEngine.h: remove unused variables + + ChangeLog | 4 ++++ + poppler/CairoFontEngine.h | 1 - + 2 files changed, 4 insertions(+), 1 deletions(-) + +commit 847436779d7c82b428acfd6339130228bfadca24 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Mar 19 19:19:42 2006 +0000 + + fix date + + ChangeLog | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 401bae69cc7ade676cacd89b483f0a93a653c7a1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Mar 19 17:01:05 2006 +0000 + + fix htmloutputdev + + ChangeLog | 4 ++++ + utils/HtmlOutputDev.cc | 2 +- + utils/HtmlOutputDev.h | 2 +- + 3 files changed, 6 insertions(+), 2 deletions(-) + +commit d56330e688c0a40b4e206ed3bbddd06d7f3ee66c +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Mar 16 22:04:56 2006 +0000 + + * poppler/Page.cc: Remove a #ifdef that was never defined + (nice to + have so sucky W args), probably came from gpdf (it's not + on xpdf + sources) and was causing bugs 6079 and 6167 + + Might be worth backporting to the stable branch + + ChangeLog | 8 +++++++- + poppler/Page.cc | 2 -- + 2 files changed, 7 insertions(+), 3 deletions(-) + +commit 7ed6737b00ece7ca00cee1d148752b11700370e6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Mar 16 19:21:11 2006 +0000 + + poppler/FontInfo.cc: Embedded fonts don't have a font file + + ChangeLog | 4 ++++ + poppler/FontInfo.cc | 20 ++++++++++++-------- + 2 files changed, 16 insertions(+), 8 deletions(-) + +commit a34688ee29e1cdfcbaca232cf005af55af87f796 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Mar 14 19:34:10 2006 +0000 + + * qt4/src/poppler-qt4.h: Fix compilation with gcc4.1, patch by + Michael Olbrich + + ChangeLog | 5 +++++ + qt4/src/poppler-qt4.h | 10 +++++----- + 2 files changed, 10 insertions(+), 5 deletions(-) + +commit 1a90b3aaf6be4ca3ebb47e904842b1e14a0e8dfc +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Mar 11 15:19:02 2006 +0000 + + * poppler/FontInfo.cc: + * poppler/FontInfo.h: Add getFile() function that returns + the path of the font that is beign used in the system to + represent that font + * qt4/src/poppler-document.cc: + * qt4/src/poppler-fontinfo.cc: + * qt4/src/poppler-private.h: + * qt4/src/poppler-qt4.h: Add the file() function + * qt4/tests/poppler-fonts.cpp: Show the path of the font + used to represent each font + + May be interesting to have in the other frontends + + ChangeLog | 13 +++++++++++++ + poppler/FontInfo.cc | 10 ++++++++++ + poppler/FontInfo.h | 2 ++ + qt4/src/poppler-document.cc | 14 +------------- + qt4/src/poppler-fontinfo.cc | 29 +++++++++-------------------- + qt4/src/poppler-private.h | 29 +++++++++++++++++++++++++++++ + qt4/src/poppler-qt4.h | 8 ++++++-- + qt4/tests/poppler-fonts.cpp | 5 +++-- + 8 files changed, 73 insertions(+), 37 deletions(-) + +commit 22b1618185ec70895ec644d9e590c266ff98c9db +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Mar 9 21:56:07 2006 +0000 + + Build with cairo disabled, patch by Eduardo de Barros Lima + + ChangeLog | 5 +++++ + glib/Makefile.am | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 50ecfadab36a9769b09e4c2c1670d86448a0e1ee +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Feb 28 23:24:59 2006 +0000 + + 2006-02-28 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: Bump release to 0.5.1. + + * NEWS: Sum up 0.5.1 changes so far. + + * TextOutputDev.h: add getters for a couple of attributes. + + * glib/Makefile.am: + * poppler/Makefile.am: Move cairo link dependency to glib + bindings. + + ChangeLog | 11 +++++++++++ + NEWS | 10 ++++++++++ + configure.ac | 2 +- + glib/Makefile.am | 11 ++++++----- + poppler/Makefile.am | 19 ++++++++----------- + poppler/TextOutputDev.h | 7 +++++-- + qt/Makefile.am | 1 + + test/Makefile.am | 16 +++++++++------- + utils/Makefile.am | 29 +++++++++++++++++------------ + 9 files changed, 68 insertions(+), 38 deletions(-) + +commit b9e951ac68b9977ab7217ad0346bcf46a3fa3dfe +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Feb 28 19:59:58 2006 +0000 + + 2006-02-28 Kristian Høgsberg <krh@redhat.com> + + * goo/gmem.c: (gmalloc), (grealloc): + * poppler/JBIG2Stream.cc: + * poppler/Stream.cc: + * poppler/Stream.h: + * splash/SplashXPathScanner.cc: + + More integer overflow fixes from Derek Noonburg (#5922). + + ChangeLog | 10 ++++++++++ + goo/gmem.c | 9 +++++---- + poppler/JBIG2Stream.cc | 12 ++++++++++-- + poppler/Stream.cc | 7 +++++++ + poppler/Stream.h | 2 +- + 5 files changed, 33 insertions(+), 7 deletions(-) + +commit 46db73a142d65a0c944910388d5971debc06ecbf +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Feb 28 18:31:59 2006 +0000 + + 2006-02-28 Kristian Høgsberg <krh@redhat.com> + + * poppler/PSOutputDev.cc: Make PSOutputDev constructor respect + passed in paper size (#5946, #5749). + + ChangeLog | 5 +++++ + poppler/PSOutputDev.cc | 14 ++++++++------ + 2 files changed, 13 insertions(+), 6 deletions(-) + +commit 0f7f2182b2abe965b382937f5569b65a8828fc93 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Feb 28 18:25:00 2006 +0000 + + 2006-02-28 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-document.cc (info_dict_get_string): Refactor + _popper_goo_string_to_utf8() out into it's own function. + + * glib/poppler-page.cc (poppler_page_get_property): Use + _popper_goo_string_to_utf8() here to convert ucs2 page labels. + + * glib/poppler-page.cc (poppler_page_get_selection_region): + Add + braces to fix warning. + + * poppler/PageLabelInfo.cc: If the label prefix string has + a ucs2 + marker, append the number part of the label as ucs2 (#5952). + + ChangeLog | 14 +++ + glib/poppler-document.cc | 52 ++++++----- + glib/poppler-page.cc | 23 +++-- + glib/poppler-private.h | 3 + + glib/reference/tmpl/poppler-enums.sgml | 150 + ------------------------------- + glib/reference/tmpl/poppler-unused.sgml | 130 ++++++++++++++++++++++++++ + glib/test-poppler-glib.c | 2 +- + goo/GooString.cc | 5 + + goo/GooString.h | 4 + + poppler/PageLabelInfo.cc | 39 ++++++--- + poppler/PageLabelInfo.h | 2 +- + 11 files changed, 228 insertions(+), 196 deletions(-) + +commit 1bf83cdc8b75e1c76956ae643ee273e0b558fd08 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 25 12:30:30 2006 +0000 + + fix warning + + ChangeLog | 4 ++++ + poppler/Object.cc | 3 ++- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit eb5642f396c8772c83b2cf27da437413b692c952 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Feb 23 22:26:05 2006 +0000 + + Don't build pdftoppm when splashoutput is disabled as it does not link + + ChangeLog | 5 +++++ + utils/Makefile.am | 13 +++++++++++-- + 2 files changed, 16 insertions(+), 2 deletions(-) + +commit 7c5c1361045429a429a6f40d936f8c7c01fe0d07 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Feb 18 20:17:00 2006 +0000 + + 2006-02-18 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDev.h: + * poppler/GfxState.cc: + * poppler/GfxState.h: Add support for drawSoftMaskedImage to + CairoOutputDev. Ugly but works. + + ChangeLog | 8 ++++ + poppler/CairoOutputDev.cc | 101 + +++++++++++++++++++++++++++++++++++++++++++++ + poppler/CairoOutputDev.h | 6 +++ + poppler/GfxState.cc | 50 ++++++++++++++++++++++ + poppler/GfxState.h | 2 + + 5 files changed, 167 insertions(+), 0 deletions(-) + +commit dcb748f68112bd5f99fea8a3da06666be6cff0c5 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Thu Feb 16 19:41:17 2006 +0000 + + 2006-02-16 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: Work around cairo bug when scaling + 1x1 bitmaps. Fixes #3387. Also gives a performance improvement. + + ChangeLog | 5 +++++ + poppler/CairoOutputDev.cc | 33 ++++++++++++++++++++++++--------- + 2 files changed, 29 insertions(+), 9 deletions(-) + +commit ef1070f6ca2d1e74c5f94728f3aaae22f0990c17 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Feb 16 19:28:54 2006 +0000 + + Update soname + + ChangeLog | 8 ++++++++ + glib/Makefile.am | 2 ++ + poppler/Makefile.am | 2 ++ + qt/Makefile.am | 2 ++ + qt4/src/Makefile.am | 2 ++ + 5 files changed, 16 insertions(+), 0 deletions(-) + +commit 24b9f5c33fb00ff80a79b34444282a57288f636c +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Feb 13 23:04:54 2006 +0000 + + * poppler/ArthurOutputDev.cc: Make it compile after changing code + so we did not pass files to freetype but buffers + + ChangeLog | 5 ++++ + poppler/ArthurOutputDev.cc | 53 + +++++++++++++++---------------------------- + 2 files changed, 24 insertions(+), 34 deletions(-) + +commit 0bda90310b267d3a4963096293eb2bd29b120768 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Feb 13 22:38:44 2006 +0000 + + Probably the last of inner patches missing from kpdf + Everybody will we happy now, kpdf has been finally assimilated + + ChangeLog | 5 ++ + poppler/PSOutputDev.cc | 124 + ++++++++++++++++++++++++++++++++++++++++++++---- + poppler/PSOutputDev.h | 4 +- + 3 files changed, 123 insertions(+), 10 deletions(-) + +commit cf9867fbbee2468a955b5845016585eeedf2debe +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Feb 6 20:49:21 2006 +0000 + + Various fixes from Frank Meerkötter to enable fixedpoint arithmetic + + ChangeLog | 8 ++++++++ + configure.ac | 2 +- + goo/FixedPoint.h | 2 +- + splash/Splash.cc | 4 ++-- + splash/SplashTypes.h | 2 +- + 5 files changed, 13 insertions(+), 5 deletions(-) + +commit f04e2c4f20f821ff8cb9465a715ccbb22091d449 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Feb 6 18:50:10 2006 +0000 + + Jeff Muizelaar's improvements to my yesterday's small patches + + ChangeLog | 6 ++++++ + poppler/Annot.cc | 9 ++++----- + poppler/JBIG2Stream.cc | 2 +- + 3 files changed, 11 insertions(+), 6 deletions(-) + +commit 33e98f81cdfda0935ac7ea79a691976465ec790b +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Feb 5 15:46:10 2006 +0000 + + Some small fixes from kpdf + + ChangeLog | 8 ++++++++ + poppler/Gfx.cc | 1 + + poppler/GfxFont.cc | 1 + + poppler/JBIG2Stream.cc | 2 +- + poppler/SplashOutputDev.cc | 1 - + 5 files changed, 11 insertions(+), 2 deletions(-) + +commit 6d9e6489d24b3105204ff4233f6493136e9b5715 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Feb 4 21:10:41 2006 +0000 + + 2006-02-04 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/Gfx.cc: + * poppler/OutputDev.cc: + * poppler/OutputDev.h: Let output devices know about pdf grouping + operators. + Patch by Thorkild Stray. + + ChangeLog | 8 ++++++++ + poppler/Gfx.cc | 14 ++++++++++++++ + poppler/OutputDev.cc | 16 ++++++++++++++++ + poppler/OutputDev.h | 10 ++++++++++ + 4 files changed, 48 insertions(+), 0 deletions(-) + +commit b4e34d905cd0ca5815a450de35b4c2774f4887c9 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Feb 4 20:48:25 2006 +0000 + + 2006-02-04 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/GlobalParams.cc: Check all fonts returned by fontconfig. + Discard the ones that are not truetype or type1. Fixes #5758. + Patch by Ed Catmur. + + ChangeLog | 6 +++++ + poppler/GlobalParams.cc | 51 + +++++++++++++++++++++++++--------------------- + 2 files changed, 34 insertions(+), 23 deletions(-) + +commit fd85a0afdd7b4cafc68df400d4f94fccaea18c76 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 4 20:34:13 2006 +0000 + + Remove bug from "do not use an external file to pass fonts to + Freetype" patch, patch by Stefan Schweizer + + ChangeLog | 3 +++ + poppler/SplashOutputDev.cc | 14 ++++++++++---- + 2 files changed, 13 insertions(+), 4 deletions(-) + +commit 67ca9d01f8badcf542f60b23521c384c9840ca1b +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 4 20:31:00 2006 +0000 + + Added a DTD of the xml pdftohtml creates patch by Stefan Schweizer + + ChangeLog | 2 ++ + utils/Makefile.am | 2 ++ + utils/pdf2xml.dtd | 28 ++++++++++++++++++++++++++++ + 3 files changed, 32 insertions(+), 0 deletions(-) + +commit f4df23ca7f396883a906f16dfc8db1ebd528e04a +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 4 20:24:03 2006 +0000 + + ignore++ + + utils/.cvsignore | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 93ad488679f594e45547a67e2a7397f4c8bd2820 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Feb 4 20:07:07 2006 +0000 + + Actually create pdftoppm patch by Stefan Schweizer + + ChangeLog | 44 +++++++++++++++++++++++++------------------- + utils/Makefile.am | 10 ++++++++-- + utils/pdftoppm.cc | 9 +++++---- + 3 files changed, 38 insertions(+), 25 deletions(-) + +commit 7d2be955e6345a052590b06b29a6d2fb2111e2e6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Feb 2 23:06:20 2006 +0000 + + CVE-2006-0301 fix by Derek though KDE security team + + ChangeLog | 5 +++++ + splash/SplashXPathScanner.cc | 32 ++++++++++++++++++++------------ + 2 files changed, 25 insertions(+), 12 deletions(-) + +commit c191e7d0f13ea429017e4d4f79ce803e84c72e40 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Feb 2 22:54:27 2006 +0000 + + i should learn on which day i live + + ChangeLog | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1ddeed60d07c3a7e011f3f594fa9299379d0b000 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Feb 2 22:50:01 2006 +0000 + + don't use files to pass fonts to freetype + + ChangeLog | 26 ++++++++++++ + fofi/FoFiTrueType.cc | 43 ++++++++++++++++--- + fofi/FoFiTrueType.h | 7 ++- + fofi/FoFiType1C.h | 2 +- + goo/gfile.cc | 8 ++++ + poppler/GfxFont.cc | 49 +++++++++++++++++++++- + poppler/GfxFont.h | 2 + + poppler/GlobalParams.cc | 1 + + poppler/GlobalParams.h | 1 + + poppler/SplashOutputDev.cc | 94 + +++++++++++++++++++++--------------------- + splash/SplashFTFontEngine.cc | 44 ++++++++++++------- + splash/SplashFTFontEngine.h | 16 +++---- + splash/SplashFTFontFile.cc | 47 +++++++++++++-------- + splash/SplashFTFontFile.h | 18 ++++---- + splash/SplashFontEngine.cc | 46 ++++++++------------ + splash/SplashFontEngine.h | 16 +++---- + splash/SplashFontFile.cc | 70 +++++++++++++++++++++++++++---- + splash/SplashFontFile.h | 25 +++++++++-- + splash/SplashT1FontEngine.cc | 29 ++++++------- + splash/SplashT1FontFile.cc | 30 +++++++++++-- + splash/SplashT1FontFile.h | 4 +- + 21 files changed, 396 insertions(+), 182 deletions(-) + +commit 34df4cfa5cd8788ccf2ea698cbedd05b209041f5 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Feb 1 03:52:12 2006 +0000 + + 2006-01-31 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/GlobalParams.cc (GlobalParams::getDisplayFont): + Allow ttc fonts to be used. + + ChangeLog | 5 +++++ + poppler/GlobalParams.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 0184e7c928ec60c0aa3f8634d96ae0cf0ad6d157 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Jan 29 05:16:31 2006 +0000 + + 2006-01-28 Jeff Muizelaar <jeff@infidigm.net> + + * glib/poppler-attachment.h: fix compile by adding <time.h> + include. + Acked-by: Jonathan Blanford <jrb@redhat.com> + + ChangeLog | 5 +++++ + glib/poppler-attachment.h | 1 + + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit c805e25f2f074640e4345f8b71eef8d7de677109 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Jan 26 19:25:07 2006 +0000 + + 2006-01-26 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoOutputDev.cc: Patch from Christian Krause; + handle + 0-width lines (#5545). + + ChangeLog | 5 +++++ + poppler/CairoOutputDev.cc | 6 +++++- + 2 files changed, 10 insertions(+), 1 deletions(-) + +commit 4f48abcd4c21460d4c5b718a7ba18cdceb30c2d1 +Author: Jonathan Blandford <jrb@redhat.com> +Date: Tue Jan 24 06:21:39 2006 +0000 + + Tue Jan 24 01:19:40 2006 Jonathan Blandford <jrb@redhat.com> + + * glib/Makefile.am: + * glib/poppler-attachment.cc: + * glib/poppler-attachment.h: + * glib/poppler-document.cc: + * glib/poppler-document.h: + * glib/poppler-page.cc: + * glib/poppler-private.h: + * glib/poppler.h: + * glib/test-poppler-glib.c: + * glib/reference/tmpl/poppler-enums.sgml: + * glib/reference/tmpl/poppler-unused.sgml: glib bindings + for the + embedded file support. It doesn't support mtime and + ctime yet, + but the rest works. + + ChangeLog | 16 +++ + glib/Makefile.am | 2 + + glib/poppler-attachment.cc | 223 + +++++++++++++++++++++++++++++++ + glib/poppler-attachment.h | 67 +++++++++ + glib/poppler-document.cc | 63 +++++++++ + glib/poppler-document.h | 6 + + glib/poppler-page.cc | 2 +- + glib/poppler-private.h | 6 +- + glib/poppler.h | 1 + + glib/reference/tmpl/poppler-enums.sgml | 150 +++++++++++++++++++++ + glib/reference/tmpl/poppler-unused.sgml | 130 ------------------ + glib/test-poppler-glib.c | 26 ++++- + 12 files changed, 559 insertions(+), 133 deletions(-) + +commit 052bf4b80c8a0dc45f6222617bfd8ae1b9c40410 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Jan 23 18:52:48 2006 +0000 + + 2006-01-23 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: + * poppler/GlobalParams.cc: + * poppler/poppler-config.h.in: + * utils/pdftohtml.cc: + * utils/pdftops.cc: Respect command line paper size settings + (#5641). + Drop the built-in paper sizes. + + ChangeLog | 9 +++++++++ + configure.ac | 1 - + poppler/GlobalParams.cc | 23 ++--------------------- + poppler/poppler-config.h.in | 5 ----- + utils/pdftohtml.cc | 4 +--- + utils/pdftops.cc | 4 +++- + 6 files changed, 15 insertions(+), 31 deletions(-) + +commit fb2054a5031d60aac3ccc9a36b3ed88a32188e33 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Jan 23 15:40:54 2006 +0000 + + 2006-01-23 Kristian Høgsberg <krh@redhat.com> + + * glib/test-poppler-glib.c (print_document_info, print_index): + Move variable declarations to top (#5692). + + * utils/*.cc: Move config.h #include to top of #include's + (#5693). + + ChangeLog | 5 +++++ + glib/test-poppler-glib.c | 5 +++-- + poppler/FontInfo.cc | 2 +- + utils/HtmlOutputDev.cc | 2 +- + utils/ImageOutputDev.cc | 2 +- + utils/pdffonts.cc | 2 +- + utils/pdfimages.cc | 2 +- + utils/pdfinfo.cc | 2 +- + utils/pdftohtml.cc | 4 ++-- + utils/pdftoppm.cc | 2 +- + utils/pdftops.cc | 2 +- + utils/pdftotext.cc | 2 +- + 12 files changed, 19 insertions(+), 13 deletions(-) + +commit 836af3529e827e25f20cb4710cbbf9ed0371a42c +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Jan 23 14:45:30 2006 +0000 + + 2006-01-23 Kristian Høgsberg <krh@redhat.com> + + * splash/SplashFTFont.cc: Don't use deprecated freetype + include + files. + + ChangeLog | 5 +++++ + splash/SplashFTFont.cc | 3 ++- + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit 60e13bf84e4f020a264811e4a5bf85d67e15d6df +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Jan 21 21:56:40 2006 +0000 + + 2006-01-21 Jeff Muizelaar <jeff@infidigm.net> + + * TODO: Add my todo list. + + ChangeLog | 4 ++++ + TODO | 10 ++++++++++ + 2 files changed, 14 insertions(+), 0 deletions(-) + +commit cebba06563d1b691a8bbb83828e47c9cc91e231a +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 18 22:40:26 2006 +0000 + + ok, ok, lasts files, i promise :-/ + + qt4/tests/check_attachments.cpp | 151 + +++++++++++++++++++++++++++++++++++++ + qt4/tests/poppler-attachments.cpp | 37 +++++++++ + 2 files changed, 188 insertions(+), 0 deletions(-) + +commit 0b12e7cce6c6633b1d07e2902a9fa13ff52079e7 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 18 22:38:59 2006 +0000 + + YAMF = Yet Another Missing File + + qt4/src/poppler-embeddedfile.cc | 106 + +++++++++++++++++++++++++++++++++++++++ + 1 files changed, 106 insertions(+), 0 deletions(-) + +commit 38c8f3a53b3eb2be1fbfa360f77285037d89b719 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 18 22:36:01 2006 +0000 + + as usual i foget some files + + poppler/UGooString.cc | 86 + +++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/UGooString.h | 55 +++++++++++++++++++++++++++++++ + 2 files changed, 141 insertions(+), 0 deletions(-) + +commit ad6e7d862c8fa6e10a7dbbb3391cbb0b6c922375 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 18 22:32:13 2006 +0000 + + Brad patch for embedded document extraction, only has Qt4 bindings + for now, needs Qt3 and glib work + + ChangeLog | 42 +++++++++++++ + glib/poppler-action.cc | 2 +- + glib/poppler-document.cc | 1 + + poppler/Annot.cc | 1 + + poppler/Catalog.cc | 133 + ++++++++++++++++++++++++++++++++++++++--- + poppler/Catalog.h | 60 +++++++++++++++++-- + poppler/Dict.cc | 17 +++--- + poppler/Dict.h | 15 +++-- + poppler/FontInfo.cc | 1 + + poppler/Function.cc | 1 + + poppler/Gfx.cc | 1 + + poppler/GfxFont.cc | 5 +- + poppler/GfxState.cc | 1 + + poppler/Link.cc | 9 ++- + poppler/Link.h | 9 ++- + poppler/Makefile.am | 2 + + poppler/Object.h | 17 +++--- + poppler/Outline.cc | 1 + + poppler/PDFDoc.cc | 1 + + poppler/PDFDoc.h | 2 +- + poppler/PSOutputDev.cc | 5 +- + poppler/Page.cc | 1 + + poppler/PageLabelInfo.cc | 1 + + poppler/Parser.cc | 2 + + poppler/SecurityHandler.cc | 1 + + poppler/Stream.cc | 1 + + poppler/XRef.cc | 1 + + qt/poppler-document.cc | 1 + + qt/poppler-page-transition.cc | 1 + + qt4/src/Makefile.am | 1 + + qt4/src/poppler-document.cc | 26 +++++++- + qt4/src/poppler-private.h | 2 + + qt4/src/poppler-qt4.h | 68 +++++++++++++++++++++ + qt4/tests/.cvsignore | 2 + + qt4/tests/Makefile.am | 16 ++++- + utils/HtmlOutputDev.cc | 1 + + utils/pdffonts.cc | 1 + + utils/pdfinfo.cc | 1 + + utils/pdftohtml.cc | 1 + + utils/pdftotext.cc | 1 + + 40 files changed, 401 insertions(+), 54 deletions(-) + +commit 550fb0b617ece7951ec39aec5fa5504cc90022fc +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 18 21:22:12 2006 +0000 + + Add some more documentation to PageTransition, patch by Stefan Kebekus + + ChangeLog | 6 ++++++ + qt/poppler-page-transition.h | 40 + +++++++++++++++++++++++++++++++++------- + qt4/src/Doxyfile | 2 +- + 3 files changed, 40 insertions(+), 8 deletions(-) + +commit d66f3647ff1c38318d4cd056cb4d4c7a32eb6603 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jan 18 18:54:12 2006 +0000 + + poppler/CharCodeToUnicode.cc: Fix check for length that was not + having into account that there could be \n or \r in tokens + an that + those do not have to be took into account. Fixes + http://bugs.kde.org/show_bug.cgi?id=120310 + + ChangeLog | 9 ++++++++- + poppler/CharCodeToUnicode.cc | 31 +++++++++++++++++++++++++++---- + 2 files changed, 35 insertions(+), 5 deletions(-) + +commit d78b670339c8f92a32ab5f0a574d0e21690806f8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jan 17 21:35:31 2006 +0000 + + When doing the parsing check with XREF we did not grow too much. Fixes + serialata10a.pdf + + ChangeLog | 10 ++++++++++ + poppler/Lexer.cc | 22 +++++++++++++++++++--- + poppler/Lexer.h | 8 +++++--- + poppler/Parser.cc | 6 +++--- + poppler/Parser.h | 2 +- + poppler/XRef.cc | 17 +++++++++++++++++ + poppler/XRef.h | 3 +++ + 7 files changed, 58 insertions(+), 10 deletions(-) + +commit f5db636af0cd6e05cd7ede37a8585001d51192a1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jan 17 20:33:08 2006 +0000 + + i suck + i suck + i suck + i suck + i suck + A file i forgot to add to make it compile :-/ + + qt/poppler-page-transition-private.h | 28 ++++++++++++++++++++++++++++ + 1 files changed, 28 insertions(+), 0 deletions(-) + +commit 9cc97908ea67ab431e58129f589e00f41f40a143 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Thu Jan 12 23:54:08 2006 +0000 + + 2006-01-12 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/GlobalParams.cc: Make buildFcPattern() static. + + ChangeLog | 4 ++++ + poppler/GlobalParams.cc | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit c7ce134fb1dadb46e2b3773d0976ea31da0a046f +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Jan 11 16:52:58 2006 +0000 + + 2006-01-11 Kristian Høgsberg <krh@redhat.com> + + * poppler/JBIG2Stream.cc: + * poppler/Stream.cc: Merge patch to fix CVE-2005-3624, + CVE-2005-3625 and CVE-2005-3627 issues. + + ChangeLog | 6 ++++++ + poppler/JBIG2Stream.cc | 32 +++++++++++++++++++++++++++++++- + poppler/Stream.cc | 8 +++++--- + 3 files changed, 42 insertions(+), 4 deletions(-) + +commit ec7fb41725c19bc7f2aad1073fe6397ea0a8da0d +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jan 10 21:57:28 2006 +0000 + + * configure.ac: + * m4/qt.m4: Fix bugs created when splitting the code from + configure.ac, take QTDIR into account when looking for + QtTestLib and + do not die if it is not found as it is not mandatory + * qt/poppler-page-transition.cc: + * qt/poppler-page.cc: + * qt/poppler-private.h: + * qt4/tests/Makefile.am: + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-page.cc: + * qt4/src/Makefile.am: Fix mess created my the moving and + renaming of + PageTransition.cc + + ChangeLog | 15 +++++++++++++++ + configure.ac | 14 ++++---------- + m4/qt.m4 | 5 +++++ + qt/poppler-page-transition.cc | 2 +- + qt/poppler-page.cc | 1 + + qt/poppler-private.h | 5 ----- + qt4/src/Makefile.am | 1 + + qt4/src/poppler-page.cc | 2 +- + qt4/src/poppler-qt4.h | 2 +- + qt4/tests/Makefile.am | 1 + + 10 files changed, 30 insertions(+), 18 deletions(-) + +commit d9bc53a741b3bbd2a202662c66fe70f49ac72a49 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Jan 10 17:59:51 2006 +0000 + + 2006-01-10 Kristian Høgsberg <krh@redhat.com> + + * splash/Makefile.am: Only install splash headers if + --enable-xpdf-headers is given. + + * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Set this here. + + ChangeLog | 7 +++++++ + Makefile.am | 1 + + splash/Makefile.am | 4 ++++ + 3 files changed, 12 insertions(+), 0 deletions(-) + +commit ea6d9b97cec6fabf8a5005c565bbdb378bed7f54 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Tue Jan 10 17:55:59 2006 +0000 + + 2006-01-10 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDev.h: + Fix the following fixme in CairoOutputDevice. + + // FIXME: This is quite right yet, we need to accumulate all + // glyphs within one text object before we clip. Right now this + // just add this one string. + + The fix uses a strategy similar to the one the Splash backend. + textClipPath is used to store the appended path from each call to + endString(). The accumulated path is clipped in endTextObject. + + ChangeLog | 14 ++++++++++++++ + poppler/CairoOutputDev.cc | 27 +++++++++++++++++++++++---- + poppler/CairoOutputDev.h | 1 + + 3 files changed, 38 insertions(+), 4 deletions(-) + +commit 9e8a655a2bd3ca8cff1a150dce0dd378aeca047b +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Jan 8 22:59:48 2006 +0000 + + 2006-01-08 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: Don't try and load type3 fonts + (#4030). + + ChangeLog | 6 +++++- + poppler/CairoOutputDev.cc | 5 ++++- + 2 files changed, 9 insertions(+), 2 deletions(-) + +commit 25fd8e1ea87c41855a4ee702fbe47f5661a54c22 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Jan 8 22:51:17 2006 +0000 + + 2006-01-08 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/Page.cc: use colToByte for reading thumbnails (#5420). + + Patch by Nickolay V. Shmyrev. + + ChangeLog | 6 ++++++ + poppler/Page.cc | 6 +++--- + 2 files changed, 9 insertions(+), 3 deletions(-) + +commit df73ee2ec4b65ccf611f0fd76fb456cc797693d4 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Jan 7 06:10:15 2006 +0000 + + 2006-01-07 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/CairoOutputDev.cc: Initialize (fill|stroke)_opacity. + + ChangeLog | 4 ++++ + poppler/CairoOutputDev.cc | 2 ++ + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit 18eb8de66749082e4aa65cc6d369a533826fab33 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Jan 6 10:05:58 2006 +0000 + + 2006-01-06 Kristian Høgsberg <krh@redhat.com> + + * qt/poppler-page.cc: + * qt/poppler-private.h: + * qt/poppler-qt.h: + * qt4/src/Makefile.am: + * qt/Makefile.am: + * poppler/Makefile.am: Move PageTransition to qt bindings, + move + contents from Private.h to qt/poppler-private.h. + + * poppler/TextOutputDev.cc (visitWord): Remove #warning. + + * utils/Makefile.am (pdfimages_SOURCES): Add ImageOutputDev.h, + use + dist_man1_MANS so we actually dist the man pages. + + * goo/Makefile.am (poppler_goo_include_HEADERS): Add + GooVector.h. + + * glib/reference/Makefile.am: DOC_SOURCE_DIR must be + relative to + $(srcdir), fix this to make distchek run. + + * m4/qt.m4: + * m4/libjpeg.m4: + * acinclude.m4: + * configure.ac: Split out Qt and libjpeg checks from + configure.ac + and acinclude.m4 to m4/qt.m4 and m4/libjpeg.m4. + + ChangeLog | 26 ++++ + acinclude.m4 | 112 ---------------- + configure.ac | 223 + +++---------------------------- + glib/reference/Makefile.am | 2 +- + glib/reference/tmpl/poppler-enums.sgml | 150 --------------------- + glib/reference/tmpl/poppler-unused.sgml | 130 ++++++++++++++++++ + goo/Makefile.am | 1 + + m4/libjpeg.m4 | 109 +++++++++++++++ + m4/qt.m4 | 206 + ++++++++++++++++++++++++++++ + poppler/Makefile.am | 1 - + poppler/PageTransition.h | 118 ---------------- + poppler/Private.h | 30 ---- + poppler/TextOutputDev.cc | 2 - + qt/Makefile.am | 8 +- + qt/poppler-page-transition.cc | 187 ++++++++++++++++++++++++++ + qt/poppler-page-transition.h | 117 ++++++++++++++++ + qt/poppler-page.cc | 1 - + qt/poppler-private.h | 9 +- + qt/poppler-qt.h | 2 +- + qt4/src/Makefile.am | 8 +- + utils/Makefile.am | 54 ++++++-- + 21 files changed, 857 insertions(+), 639 deletions(-) + +commit 93921e77115ebe4d527f98675e438de485e84507 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jan 5 23:53:33 2006 +0000 + + * poppler/DCTStream.cc: Fix handling of malformed jpeg streams like + the one at http://bugs.kde.org/show_bug.cgi?id=119569 + + Might be worth backporting to 0.4.x + + ChangeLog | 5 +++++ + poppler/DCTStream.cc | 26 ++++++++++++++++---------- + 2 files changed, 21 insertions(+), 10 deletions(-) + +commit 0dc16af02071350a0dc11af4106799378c99cdad +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jan 5 13:53:58 2006 +0000 + + Introduce variants of renderTo that return a QImage and do not use + a QPixmap so threading is possible. + + ChangeLog | 8 ++++++ + qt/poppler-page.cc | 18 +++++++++---- + qt/poppler-qt.h | 30 ++++++++++++++++++++---- + qt4/src/poppler-page.cc | 9 ++++++- + qt4/src/poppler-qt4.h | 59 + +++++++++++++++++++++++++--------------------- + 5 files changed, 85 insertions(+), 39 deletions(-) + +commit 5c2cbf5d327c6cc75c073b56c3ab1748c0d24387 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jan 2 14:24:31 2006 +0000 + + Use error() instead std::cerr in PageTranstion.cc + + ChangeLog | 4 ++++ + poppler/PageTransition.cc | 5 +++-- + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit da5a4233498b56df611e1c7bca0090306cb5dbe0 +Author: Jonathan Blandford <jrb@redhat.com> +Date: Mon Jan 2 00:06:45 2006 +0000 + + Sun Jan 1 18:50:51 2006 Jonathan Blandford <jrb@redhat.com> + + * Makefile.am: + * autogen.sh: + * configure.ac: + * gtk-doc.make: + * glib/Makefile.am: enable gtk-doc support. + + ChangeLog | 8 +++ + Makefile.am | 2 + + autogen.sh | 14 +++++ + configure.ac | 4 ++ + glib/Makefile.am | 1 + + gtk-doc.make | 153 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + m4/gtk-doc.m4 | 53 +++++++++++++++++++ + 7 files changed, 235 insertions(+), 0 deletions(-) + +commit 372c34cc9728d7041bc4f6893c0bae50c9501c50 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 1 22:35:48 2006 +0000 + + * qt4/src/poppler-private.h: + * qt4/src/poppler-page.cc: + * qt4/src/poppler-document.cc: Don't create a SplashOutputDev + for + every splashRenderToPixmap + + ChangeLog | 4 ++++ + qt4/src/poppler-document.cc | 1 - + qt4/src/poppler-page.cc | 18 +++++------------- + qt4/src/poppler-private.h | 24 +++++++++++++++++++++++- + 4 files changed, 32 insertions(+), 15 deletions(-) + +commit 6ff83474ac594368015334db9c6b33d3a552079f +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jan 1 22:18:47 2006 +0000 + + * qt/poppler-page.cc: + * qt/poppler-private.h: Don't create a SplashOutputDev for every + renderToPixmap. + + ChangeLog | 6 ++++++ + qt/poppler-page.cc | 8 +------- + qt/poppler-private.h | 24 +++++++++++++++++++++++- + 3 files changed, 30 insertions(+), 8 deletions(-) + +commit 6942646d4c82327a80b021838a38aa55c1026883 +Author: Jonathan Blandford <jrb@redhat.com> +Date: Sun Jan 1 20:34:36 2006 +0000 + + Sun Jan 1 15:32:08 2006 Jonathan Blandford <jrb@redhat.com> + + * glib/reference/*: More gtk-doc work. Not enabled for + building + by default, but filled in. + + .cvsignore | 1 + + ChangeLog | 5 + + glib/reference/.cvsignore | 18 ++ + glib/reference/Makefile.am | 87 +++++++ + glib/reference/poppler-docs.sgml | 17 ++ + glib/reference/poppler-sections.txt | 151 +++++++++++ + glib/reference/poppler.types | 4 + + glib/reference/tmpl/poppler-action.sgml | 172 +++++++++++++ + glib/reference/tmpl/poppler-document.sgml | 354 + ++++++++++++++++++++++++++ + glib/reference/tmpl/poppler-enums.sgml | 169 ++++++++++++ + glib/reference/tmpl/poppler-page.sgml | 243 ++++++++++++++++++ + glib/reference/tmpl/poppler-private.sgml | 128 +++++++++ + glib/reference/tmpl/poppler.sgml | 216 ++++++++++++++++ + glib/reference/tmpl/stamp-poppler-enums.sgml | 19 ++ + 14 files changed, 1584 insertions(+), 0 deletions(-) + +commit 0fab1b711f153859e113cb3b6d734ddcb58fb87a +Author: Jonathan Blandford <jrb@redhat.com> +Date: Sat Dec 31 02:10:33 2005 +0000 + + Fri Dec 30 21:08:33 2005 Jonathan Blandford <jrb@redhat.com> + + * glib/*{cc,h}: Update inline doc comments. This is in + preparation for gtk-doc support. + + ChangeLog | 5 ++ + glib/poppler-action.cc | 14 ++++ + glib/poppler-action.h | 2 - + glib/poppler-document.cc | 151 + +++++++++++++++++++++++++++++++++++++++++++++- + glib/poppler-document.h | 4 +- + glib/poppler-page.cc | 28 +++++++++ + glib/poppler.cc | 16 +++++ + glib/test-poppler-glib.c | 29 +++++++++ + 8 files changed, 243 insertions(+), 6 deletions(-) + +commit 313530036b204eaa5ddfa150730302e855560d6a +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 30 22:54:46 2005 +0000 + + A delete that slipped from the last patch-commit + + qt4/src/poppler-page.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit cf6f8123af19aca4200b58a454652f68ce8132e2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 30 22:31:32 2005 +0000 + + Puting PageTransition implementation into poppler "core", both Qt + and Qt4 frontends use it. + + poppler/Makefile.am | 1 + + poppler/PageTransition.cc | 188 + +++++++++++++++++++++++++++++++++++++++++++++ + poppler/PageTransition.h | 118 ++++++++++++++++++++++++++++ + poppler/Private.h | 30 +++++++ + qt/Makefile.am | 2 +- + qt/poppler-page.cc | 111 +------------------------- + qt/poppler-qt.h | 72 +----------------- + qt4/src/Makefile.am | 2 +- + qt4/src/poppler-page.cc | 17 ++++- + qt4/src/poppler-qt4.h | 14 +++- + 10 files changed, 374 insertions(+), 181 deletions(-) + +commit 56035ab199ac6deb5c1e07e745d120d1121a5960 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Dec 30 21:59:58 2005 +0000 + + * utils/HtmlOutputDev.cc: + * utils/ImageOutputDev.cc: Fix build when using --disable-libjpeg + + ChangeLog | 5 +++++ + utils/HtmlOutputDev.cc | 2 ++ + utils/ImageOutputDev.cc | 2 ++ + 3 files changed, 9 insertions(+), 0 deletions(-) + +commit 8b64dafc7f1d198fb0052c0d6f0da6de97bbb48d +Author: Brad Hards <bradh@frogmouth.net> +Date: Wed Dec 28 09:23:43 2005 +0000 + + Plug a few memory leaks in the Qt4 bindings. + + ChangeLog | 25 +++++++++++++++++++ + qt4/src/poppler-document.cc | 3 ++ + qt4/src/poppler-private.h | 7 ++++- + qt4/src/poppler-qt4.h | 3 ++ + qt4/tests/check_fonts.cpp | 8 ++++++ + qt4/tests/check_metadata.cpp | 50 + +++++++++++++++++++++++++++++++++---- + qt4/tests/check_pagelayout.cpp | 6 ++++ + qt4/tests/check_pagemode.cpp | 10 +++++++ + qt4/tests/check_permissions.cpp | 2 + + qt4/tests/check_version.cpp | 22 ---------------- + qt4/tests/poppler-fonts.cpp | 1 + + qt4/tests/stress-poppler-qt4.cpp | 2 + + 12 files changed, 110 insertions(+), 29 deletions(-) + +commit 64c07a20a4ed844f3b3dd26e974f58d5877cf9fd +Author: Brad Hards <bradh@frogmouth.net> +Date: Tue Dec 27 06:10:01 2005 +0000 + + qt4/src/poppler-qt4.h and qt4/src/poppler-document.cc: add + convertDate() function that + turns char* PDF date strings into QDateTime. This version handles + the timezone conversions. Refactored the existing date() method + to use it. + + qt4/tests/check_dateConversion.cpp: unit tests for convertDate() + qt4/tests/check_metadata.cpp: update to reflect UTC. + qt4/tests/.cvsignore: suppress check_dateConversion + + ChangeLog | 9 +++ + qt4/src/poppler-document.cc | 89 ++++++++++++++++++++----------- + qt4/src/poppler-qt4.h | 5 ++ + qt4/tests/.cvsignore | 1 + + qt4/tests/Makefile.am | 11 +++- + qt4/tests/check_dateConversion.cpp | 105 + ++++++++++++++++++++++++++++++++++++ + qt4/tests/check_metadata.cpp | 4 +- + 7 files changed, 188 insertions(+), 36 deletions(-) + +commit 4b2e3b5106b75f23c830837a886cd29beb1d1d1b +Author: Brad Hards <bradh@frogmouth.net> +Date: Tue Dec 27 05:08:34 2005 +0000 + + * qt4/src/Doxyfile (JAVADOC_AUTOBRIEF): Turned on automatic + \brief mode. + + * qt4/src/poppler-qt4.h: Update API documentation. Patch from + Stefan Kebekus, with some changes. Removed \brief entries. + + ChangeLog | 8 +++++ + qt4/src/Doxyfile | 2 +- + qt4/src/poppler-qt4.h | 81 + ++++++++++++++++++++++++++++++++++++++---------- + 3 files changed, 73 insertions(+), 18 deletions(-) + +commit 8d9cf43aaa73d5012428a6a4c5d7e2cccbd3036e +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Dec 21 22:09:47 2005 +0000 + + 2005-12-21 Kristian Høgsberg <krh@redhat.com> + + * NEWS: Sum up 0.5 changes so far. + + * acinclude.m4: Split jpeg macros out into this file. + + * poppler/Stream.cc: Apply latest CVE-2005-3191 updates. + + ChangeLog | 8 ++++ + NEWS | 8 ++++ + acinclude.m4 | 112 + +++++++++++++++++++++++++++++++++++++++++++++++++ + configure.ac | 114 + -------------------------------------------------- + poppler/JPXStream.cc | 1 + + poppler/Stream.cc | 11 ++++- + 6 files changed, 137 insertions(+), 117 deletions(-) + +commit 97243286560cb4f264b875185c8768a6af09d554 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Dec 21 17:30:33 2005 +0000 + + 2005-12-21 Kristian Høgsberg <krh@redhat.com> + + * utils/Makefile.am: Add parseargs.h to sources and add + -I$(top_srcdir)/poppler to INCLUDES. + + * poppler/CairoFontEngine.cc: Apply patch from Hiroyuki + Ikezoe to + man non-embedded CJK fonts work. + + ChangeLog | 14 +++++++++-- + configure.ac | 2 +- + poppler/CairoFontEngine.cc | 52 + +++++++++++++++++++++++++++++++++++++++---- + utils/Makefile.am | 15 +++++++----- + 4 files changed, 68 insertions(+), 15 deletions(-) + +commit cf887a9a9fae7272165d3aae05c85444ff5ca604 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 18 22:03:30 2005 +0000 + + * poppler/Page.cc: Only discard cropbox sizes one by one + and not + completely. Jeff and Martin were right + + ChangeLog | 2 ++ + poppler/Page.cc | 13 ++++++++++--- + 2 files changed, 12 insertions(+), 3 deletions(-) + +commit 495890b9cef9d5d61bb47e789add1cf2c3b8f83d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 18 21:56:15 2005 +0000 + + + .cvsignore + + utils/.cvsignore | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +commit 5dca860bba6918e06fab3aa56a2c75f0ac9ecdfb +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 18 21:08:48 2005 +0000 + + Fix utils building on Slackware + + ChangeLog | 3 +++ + configure.ac | 3 +++ + utils/Makefile.am | 3 ++- + 3 files changed, 8 insertions(+), 1 deletions(-) + +commit 03e3d9164ffd71f03136b57a9941ea14fadb21aa +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 18 17:12:28 2005 +0000 + + 2005-12-18 Albert Astals Cid <aacid@kde.org> + + * configure.ac: Better jpeg detection, refer to ml PCbsd + problem + + ChangeLog | 4 ++ + configure.ac | 131 + ++++++++++++++++++++++++++++++++++++++++++++++++++-------- + 2 files changed, 118 insertions(+), 17 deletions(-) + +commit 888d76a29c9c5ea6c90cc4299b230ca0c2c2944f +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Dec 12 20:21:08 2005 +0000 + + * poppler/Page.cc: Ignore cropBox if it seems incorrect + + ChangeLog | 4 ++++ + poppler/Page.cc | 7 +++++++ + 2 files changed, 11 insertions(+), 0 deletions(-) + +commit bcc5e3afe27c8787ce7022a0701997c96eddb4fe +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Dec 12 20:15:11 2005 +0000 + + 2005-12-12 Kristian Høgsberg <krh@redhat.com> + + * Makefile.am: + * configure.ac: + * goo/GooVector.h: + * utils/HtmlFonts.cc: + * utils/HtmlFonts.h: + * utils/HtmlLinks.cc: + * utils/HtmlLinks.h: + * utils/HtmlOutputDev.cc: + * utils/HtmlOutputDev.h: + * utils/ImageOutputDev.cc: + * utils/ImageOutputDev.h: + * utils/Makefile.am: + * utils/parseargs.c: + * utils/parseargs.h: + * utils/pdffonts.1: + * utils/pdffonts.cc: + * utils/pdfimages.1: + * utils/pdfimages.cc: + * utils/pdfinfo.1: + * utils/pdfinfo.cc: + * utils/pdftohtml.1: + * utils/pdftohtml.cc: + * utils/pdftoppm.1: + * utils/pdftoppm.cc: + * utils/pdftops.1: + * utils/pdftops.cc: + * utils/pdftotext.1: + * utils/pdftotext.cc: Add command line utilities from xpdf. + + ChangeLog | 31 + + Makefile.am | 6 +- + configure.ac | 25 +- + goo/GooVector.h | 101 +++ + utils/HtmlFonts.cc | 326 ++++++++++ + utils/HtmlFonts.h | 85 +++ + utils/HtmlLinks.cc | 101 +++ + utils/HtmlLinks.h | 49 ++ + utils/HtmlOutputDev.cc | 1569 + +++++++++++++++++++++++++++++++++++++++++++++++ + utils/HtmlOutputDev.h | 302 +++++++++ + utils/ImageOutputDev.cc | 195 ++++++ + utils/ImageOutputDev.h | 76 +++ + utils/Makefile.am | 18 + + utils/parseargs.c | 190 ++++++ + utils/parseargs.h | 71 +++ + utils/pdffonts.1 | 128 ++++ + utils/pdffonts.cc | 294 +++++++++ + utils/pdfimages.1 | 96 +++ + utils/pdfimages.cc | 159 +++++ + utils/pdfinfo.1 | 157 +++++ + utils/pdfinfo.cc | 376 ++++++++++++ + utils/pdftohtml.1 | 85 +++ + utils/pdftohtml.cc | 429 +++++++++++++ + utils/pdftoppm.1 | 113 ++++ + utils/pdftoppm.cc | 189 ++++++ + utils/pdftops.1 | 224 +++++++ + utils/pdftops.cc | 336 ++++++++++ + utils/pdftotext.1 | 135 ++++ + utils/pdftotext.cc | 337 ++++++++++ + 29 files changed, 6194 insertions(+), 9 deletions(-) + +commit 5fbded32741acb5fac411189f80cb57aa11df517 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Dec 10 10:52:15 2005 +0000 + + * qt4/src/poppler-page.cc: + * qt4/src/poppler-qt4.h: + * qt4/src/tests/test-poppler-qt4.cpp: The parameters x,y,w,h to the + method splashRenderToPixmap are now used. Convenient + defaults are provided. The test has been changed accordingly. Some + added documentation. Patch by Stefan Kebekus + + ChangeLog | 9 +++++++++ + qt4/src/poppler-page.cc | 4 ++-- + qt4/src/poppler-qt4.h | 31 +++++++++++++++++++++++-------- + qt4/tests/test-poppler-qt4.cpp | 2 +- + 4 files changed, 35 insertions(+), 11 deletions(-) + +commit bc6df8c41081c0c0107655cbf70ddb8b0c493c34 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Dec 9 20:49:59 2005 +0000 + + 2005-12-09 Kristian Høgsberg <krh@redhat.com> + + * poppler/GfxState.cc: Use colToByte() for converting + GxfColorComp + to bytes (really fix #5117). + + * poppler/Stream.cc: Remove duplicated check (#5243). + + ChangeLog | 5 +++++ + poppler/GfxState.cc | 6 +++--- + poppler/Stream.cc | 4 ---- + 3 files changed, 8 insertions(+), 7 deletions(-) + +commit 8a2464122455311c6d16ae62bb9ac9a0ae365a28 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Dec 9 19:40:40 2005 +0000 + + 2005-12-09 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: + * poppler/Makefile.am (poppler_includedir): + * goo/Makefile.am (poppler_goo_include_HEADERS): Make + installation + of xpdf header files optional. + + ChangeLog | 10 +++++++++- + configure.ac | 8 ++++++++ + goo/Makefile.am | 4 ++++ + poppler/Makefile.am | 4 ++++ + 4 files changed, 25 insertions(+), 1 deletions(-) + +commit 830b61bfd1c985fe14ec4d0f6724c8f70e924fc1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Dec 8 18:17:42 2005 +0000 + + * configure.ac: Detect if gettimeofday is available, fixes + for correct + linking to Qt4 on windows + * goo/GooTimer.[cc|h]: Only build if gettimeofday is available + * poppler/Gfx.cc: Only use the timer for profiling if + gettimeofday is + available + * poppler/GlobalParams.cc: Remove extra unlockGlobalParams + that was + making windows hang + * splash/SplashFTFontEngine.cc: i need unistd.h on windows + also + * splash/SplashFontFile.cc: i need unistd.h on windows also + + ChangeLog | 12 ++++++++++++ + configure.ac | 14 +++++++++++++- + goo/GooTimer.cc | 3 +++ + goo/GooTimer.h | 4 ++++ + poppler/Gfx.cc | 6 ++++++ + poppler/GlobalParams.cc | 1 - + splash/SplashFTFontEngine.cc | 4 +--- + splash/SplashFontFile.cc | 4 +--- + 8 files changed, 40 insertions(+), 8 deletions(-) + +commit 0a1c33ed17fd7053ed455da3444856a5dab3c9b4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Dec 8 12:42:50 2005 +0000 + + Remove -DDATADIR we are not using if for anything and it shadows a + windows typedef + + ChangeLog | 8 ++++++++ + glib/Makefile.am | 3 +-- + poppler/Makefile.am | 3 +-- + qt/Makefile.am | 3 +-- + test/Makefile.am | 3 +-- + 5 files changed, 12 insertions(+), 8 deletions(-) + +commit adca042e666fd932f16213d0a4daba08b5021901 +Author: Brad Hards <bradh@frogmouth.net> +Date: Wed Dec 7 08:42:21 2005 +0000 + + Remove the version check. OK'd by krh. + + ChangeLog | 2 ++ + poppler/PDFDoc.cc | 6 +----- + 2 files changed, 3 insertions(+), 5 deletions(-) + +commit bc57f8dd73eef9a74e4a6e248ed6985c360db838 +Author: Brad Hards <bradh@frogmouth.net> +Date: Wed Dec 7 08:31:09 2005 +0000 + + Add infoKeys() - allows you to get a list of all the string names + (keys) + for the metadata. + + ChangeLog | 7 +++++++ + qt4/src/poppler-document.cc | 22 ++++++++++++++++++++++ + qt4/src/poppler-qt4.h | 7 +++++++ + qt4/tests/check_metadata.cpp | 18 ++++++++++++++++++ + 4 files changed, 54 insertions(+), 0 deletions(-) + +commit 7ec41df91e6dbf792e11676d929acc2f634bd382 +Author: Brad Hards <bradh@frogmouth.net> +Date: Tue Dec 6 09:58:04 2005 +0000 + + Add more unit tests for better coverage. + + ChangeLog | 6 ++++ + qt4/tests/check_fonts.cpp | 24 +++++++++++++++ + qt4/tests/check_metadata.cpp | 66 + ++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 96 insertions(+), 0 deletions(-) + +commit a92b10016306ac46775c9b95b52d249b233ff950 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Dec 5 20:46:22 2005 +0000 + + * poppler/CairoFontEngine.cc: Correct fix for #5149, i broke it when + merging xpdf 3.01 patches + + ChangeLog | 5 +++++ + poppler/CairoFontEngine.cc | 4 +--- + 2 files changed, 6 insertions(+), 3 deletions(-) + +commit 66096477d1a86f13fcb07ae25caff1cc02b1e7cd +Author: Brad Hards <bradh@frogmouth.net> +Date: Sun Dec 4 19:48:25 2005 +0000 + + Add checking for Type3 fonts in the unit test. + + ChangeLog | 5 +++++ + qt4/tests/check_fonts.cpp | 24 ++++++++++++++++++++++++ + 2 files changed, 29 insertions(+), 0 deletions(-) + +commit 62345b0affed8e2e37728fca7f2b750879192c43 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 4 18:53:40 2005 +0000 + + Fix error in merging CAN-2005-3193 fix. Thanks Daniel Gryniewicz + for notifying + + ChangeLog | 5 +++++ + poppler/JPXStream.cc | 2 -- + 2 files changed, 5 insertions(+), 2 deletions(-) + +commit ba4b3f88271892f197aa2ec076c80ff63a175887 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Dec 4 11:30:00 2005 +0000 + + * qt/poppler-qt.h: + * qt/poppler-fontinfo.h: + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-fontinfo.cc: Implement copy constructor of + FontInfo needed + as Q[Value]List<FontInfo> uses it when appending + + ChangeLog | 8 ++++++++ + qt/poppler-fontinfo.cc | 9 +++++++++ + qt/poppler-qt.h | 2 ++ + qt4/src/poppler-fontinfo.cc | 9 +++++++++ + qt4/src/poppler-qt4.h | 2 ++ + 5 files changed, 30 insertions(+), 0 deletions(-) + +commit e091231d98d12c19b0098ffbaec6ecda28097dff +Author: Brad Hards <bradh@frogmouth.net> +Date: Sun Dec 4 10:45:25 2005 +0000 + + Add new unit test to .cvsignore suppressions. + + ChangeLog | 2 ++ + qt4/tests/.cvsignore | 1 + + 2 files changed, 3 insertions(+), 0 deletions(-) + +commit 6a7b1eaaedbfdd3a8e6b4d899477350f2b485641 +Author: Brad Hards <bradh@frogmouth.net> +Date: Sun Dec 4 10:05:21 2005 +0000 + + * qt4/src/poppler-qt4.h: + qt4/src/fontinfo.cc: add implementation for FontInfo::typeName() + + * qt4/tests/check_fonts.cpp: + * qt4/tests/Makefile.am: add unit test for fonts + + * qt4/src/Mainpage.dox: Minor typo fixes. + + ChangeLog | 11 +++++++++++ + qt4/src/Mainpage.dox | 5 +++-- + qt4/src/poppler-fontinfo.cc | 24 ++++++++++++++++++++++++ + qt4/src/poppler-qt4.h | 14 +++++++++++++- + qt4/tests/Makefile.am | 5 +++++ + qt4/tests/check_fonts.cpp | 42 + ++++++++++++++++++++++++++++++++++++++++++ + 6 files changed, 98 insertions(+), 3 deletions(-) + +commit 31b28b4c59f7820901e9cf893197f381acbae8ce +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sun Dec 4 02:24:25 2005 +0000 + + 2005-12-03 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc (poppler_page_set_selection_alpha): Use + Nickolays original fix instead of trying to be clever with + gdk_pixbuf_fill(). + + * poppler/CairoFontEngine.cc: Fix text corruption bug (#5149), + a rerun of an old classic (#3340). + + ChangeLog | 7 +++++++ + glib/poppler-page.cc | 8 +++++++- + poppler/CairoFontEngine.cc | 2 ++ + 3 files changed, 16 insertions(+), 1 deletions(-) + +commit 4d169c5c345cdac84a39026e759b928977643417 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sun Dec 4 01:42:29 2005 +0000 + + 2005-12-03 Kristian Høgsberg <krh@redhat.com> + + * poppler/GfxState.cc: Fixing another problem with new GfxRGB + representation causing images to show up as random pixels + (#5117). + + ChangeLog | 5 +++++ + poppler/GfxState.cc | 6 +++--- + 2 files changed, 8 insertions(+), 3 deletions(-) + +commit 58de0458e17b1639ce0bcae45a4b09b2c0a56618 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sat Dec 3 23:23:53 2005 +0000 + + 2005-12-03 Kristian Høgsberg <krh@redhat.com> + + * qt/Makefile.am (noinst_PROGRAMS): Only build qt test + program if + splash is enabled. + + * poppler/CairoOutputDev.cc: Remove unused grid snapping code, + sidestepping #4507. + + * glib/poppler-document.h (PopplerPermissions): Breaking enum + definition over multiple lines confuses glib-mkenums (#4600). + + * poppler/Makefile.am (libpoppler_la_LIBADD): Add + FREETYPE_LIBS + (#4515). + + * poppler/TextOutputDev.cc: + * qt/poppler-qt.h: GCC-4.1 fixes (#5031). + + ChangeLog | 17 +++++++++++++++++ + glib/poppler-document.h | 5 +---- + poppler/CairoOutputDev.cc | 35 +++++++++-------------------------- + poppler/CairoOutputDev.h | 2 +- + poppler/Makefile.am | 3 ++- + poppler/TextOutputDev.cc | 2 +- + qt/Makefile.am | 4 ++++ + qt/poppler-qt.h | 6 +++--- + 8 files changed, 38 insertions(+), 36 deletions(-) + +commit df45483f1437d8a96519e1428d1f4b3ffc08c2cd +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Dec 3 22:39:06 2005 +0000 + + remove another chagne should not have gone in + + test/pdf-inspector.cc | 9 ++------- + 1 files changed, 2 insertions(+), 7 deletions(-) + +commit 7dfe02ee112dee51346525b62d877e6591135761 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Dec 3 22:28:46 2005 +0000 + + Add the font retrieveing on the qt3 backend also, based on a patch + by Wilfried Huss + + ChangeLog | 3 ++ + qt/poppler-fontinfo.cc | 75 + ++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 78 insertions(+), 0 deletions(-) + +commit 655b9dd195ac9faf2f7ea0255880b8c83b249a06 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Dec 3 22:26:07 2005 +0000 + + this should have not went in + + poppler/TextOutputDev.h | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +commit ab45eb562159d5b006e658ec66723a0a47908f65 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Dec 3 22:20:54 2005 +0000 + + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-fontinfo.cc: + * qt4/src/poppler-textbox.cc: Remove implementation of that classes + from the header, use pimpl + + ChangeLog | 9 ++++- + poppler/TextOutputDev.h | 10 +++--- + qt/Makefile.am | 1 + + qt/poppler-document.cc | 29 +++++++++++++++ + qt/poppler-private.h | 2 + + qt/poppler-qt.h | 80 + ++++++++++++++++++++++++++++++++++++++++++- + qt4/src/Makefile.am | 2 + + qt4/src/poppler-fontinfo.cc | 69 +++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-qt4.h | 43 +++++++++-------------- + qt4/src/poppler-textbox.cc | 49 ++++++++++++++++++++++++++ + test/pdf-inspector.cc | 9 ++++- + 11 files changed, 268 insertions(+), 35 deletions(-) + +commit 64079ad81caf6d2cf66b1f3a3de9454146e15c6c +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sat Dec 3 21:55:36 2005 +0000 + + 2005-12-03 Kristian Høgsberg <krh@redhat.com> + + Fixes from Nickolay V. Shmyrev: + + * poppler/TextOutputDev.cc (TextLine::visitSelection, + TextBlock::visitSelection): Fix selection crash with + zero-width + word boxes or zero-height line boxes (#4402). + + * poppler/CairoOutputDev.h: Fix wrong cairo-ft.h include + (#4413). + + * poppler/CairoOutputDev.cc (eoFill, fill): + * glib/poppler-page.cc (poppler_page_render_selection): + Update to + work with new GfxColor definition and use + cairo_pattern_create_rgba() to cache cairo_pattern_t's for the + fill and stroke colors. + + * glib/poppler-page.cc (poppler_page_set_selection_alpha): + Zero + out pixbuf first. + + ChangeLog | 21 ++++++++++++++++ + glib/poppler-page.cc | 18 ++++++++----- + poppler/CairoOutputDev.cc | 59 + ++++++++++++++++++++++++++++++++------------ + poppler/CairoOutputDev.h | 6 ++-- + poppler/TextOutputDev.cc | 8 +++--- + 5 files changed, 82 insertions(+), 30 deletions(-) + +commit f3da21a3ecdd2694290e64af86c8e35fcb61371b +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Dec 3 21:35:45 2005 +0000 + + More docs for the Qt4 frontend, patch by Stefan Kebekus + + ChangeLog | 8 ++++ + qt4/src/.cvsignore | 3 +- + qt4/src/Doxyfile | 4 +- + qt4/src/Mainpage.dox | 91 + ++++++++++++++++++++++++++++++++++++++++ + qt4/src/poppler-page.cc | 20 ++------- + qt4/src/poppler-qt4.h | 57 +++++++++++++++++------- + qt4/tests/test-poppler-qt4.cpp | 5 +- + 7 files changed, 151 insertions(+), 37 deletions(-) + +commit 7b2c6e92611db9350ca5dcaf3fd730fe5e69afea +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Dec 1 22:45:10 2005 +0000 + + Fix CAN-2005-3193 related bugs + Thanks Leonard for reporting + + ChangeLog | 6 ++++++ + poppler/JPXStream.cc | 9 ++++++++- + poppler/Stream.cc | 33 ++++++++++++++++++++++++++++++++- + poppler/Stream.h | 3 +++ + 4 files changed, 49 insertions(+), 2 deletions(-) + +commit a90f076af9ebb188895e7b223bcb7e5c3f4309c4 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Nov 28 22:50:19 2005 +0000 + + Fix QPixmap contents generation messed when doing the xpdf 3.01 + transition in qt4 frontend + Use Splash backend by default in the qt4 test, added -arthur option + to use the Arthur backend + + ChangeLog | 12 +++++++- + qt4/src/poppler-page.cc | 45 ++++++++++++++++++++++++++------- + qt4/src/poppler-qt4.h | 17 +++++++++---- + qt4/tests/test-poppler-qt4.cpp | 53 + +++++++++++++++++++++++++--------------- + 4 files changed, 90 insertions(+), 37 deletions(-) + +commit b7e4f0e7d175abde7fafb1fcc7ba129468bc8c1a +Author: Brad Hards <bradh@frogmouth.net> +Date: Sun Nov 27 01:33:51 2005 +0000 + + Convert Qt4 unit tests to use the new Qt4.1 QTestlib framework. + Add a little more API documentation + + ChangeLog | 7 +++++ + qt4/src/poppler-qt4.h | 11 +++++--- + qt4/tests/Makefile.am | 12 +++++--- + qt4/tests/check_metadata.cpp | 58 + +++++++++++++++++++------------------- + qt4/tests/check_pagelayout.cpp | 14 +++++----- + qt4/tests/check_pagemode.cpp | 22 +++++++------- + qt4/tests/check_permissions.cpp | 18 ++++++------ + 7 files changed, 78 insertions(+), 64 deletions(-) + +commit d036fa022dbb6f4421ccc8b12b8f9e4f0c8d7406 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Nov 25 22:52:56 2005 +0000 + + patch from kebekus to add to the qt4 binding the same functions we + added to the qt3 one + + ChangeLog | 5 +++++ + qt4/src/poppler-page.cc | 44 + ++++++++++++++++++++++++++++++++++++++++++-- + qt4/src/poppler-qt4.h | 22 ++++++++++++++++++++++ + 3 files changed, 69 insertions(+), 2 deletions(-) + +commit 3c9f09d76dc70e4ba766930facee8b6f30bcd2da +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Nov 22 21:50:44 2005 +0000 + + Fix page range in the inspector + + ChangeLog | 4 ++++ + test/pdf-inspector.cc | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit e64f63416dbce497cb2167272b95491664f213e8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Nov 21 22:12:15 2005 +0000 + + PAtch to add some more functions to the qt binding by Stefan Kebekus + + ChangeLog | 5 ++++ + qt/poppler-page.cc | 69 + +++++++++++++++++++++++++++++++++++++++++++++++++++- + qt/poppler-qt.h | 41 +++++++++++++++++++++++++++++++ + 3 files changed, 114 insertions(+), 1 deletions(-) + +commit 8bd8cb4160b73da69d058783750352fbface66dc +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Nov 21 19:44:09 2005 +0000 + + Fix a possible build problem + + ChangeLog | 4 ++++ + qt/Makefile.am | 1 + + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit fc59b79dc375544681032a1618e96c458515d724 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sun Nov 20 23:17:32 2005 +0000 + + 2005-11-20 Kristian Høgsberg <krh@redhat.com> + + * poppler/GfxState.cc: Fix the byte_lookup initialization + broken + by the merges (#4350). Modify GfxColorSpace::getRGBLine() + to work + with new GfXColor type. + + ChangeLog | 13 ++++++++++- + poppler/GfxState.cc | 59 + ++++++++++++++++++++++++++++++-------------------- + 2 files changed, 47 insertions(+), 25 deletions(-) + +commit 6fe2cb0fcd53211143dcd0c47bf8c8c7a8c11a39 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Nov 17 21:37:34 2005 +0000 + + make it compile with freetype 2.2.0 preversions + + ChangeLog | 4 ++++ + splash/SplashFTFont.cc | 42 +++++++++++++++++++++++++++++++++++++----- + 2 files changed, 41 insertions(+), 5 deletions(-) + +commit 429d3521d788be702a3944bc290569f90ae04892 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Nov 4 19:03:55 2005 +0000 + + Make it compile using --disable-cairo-output + + ChangeLog | 4 ++++ + glib/poppler-document.cc | 6 ++++-- + glib/poppler-page.cc | 27 +++++++++++++-------------- + 3 files changed, 21 insertions(+), 16 deletions(-) + +commit b96c118eb08d478914c2981204d749a95957cbb3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Nov 1 15:29:32 2005 +0000 + + Comment some unused parameters to calm down compiler warnings when + using these heders on external projects with higher warning verbosity + + ChangeLog | 5 ++ + poppler/OutputDev.h | 125 + ++++++++++++++++++++++++++------------------------- + poppler/Stream.h | 24 +++++----- + 3 files changed, 80 insertions(+), 74 deletions(-) + +commit 51670972777510a3ec64a56649716b31167b9d0e +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Oct 30 20:29:05 2005 +0000 + + Last xpdf 3.01 merge (at least from my side) + It's very big, but noone has opposed in the 2 weeks time i gave on + the ml so either poppler is dead or people agree with the patch + + ChangeLog | 39 + + glib/poppler-page.cc | 32 +- + poppler/ArthurOutputDev.cc | 2 +- + poppler/ArthurOutputDev.h | 2 +- + poppler/CairoOutputDev.cc | 2 +- + poppler/CairoOutputDev.h | 2 +- + poppler/Gfx.cc | 645 ++++++++++-- + poppler/Gfx.h | 17 +- + poppler/GfxState.cc | 1410 +++++++++++++++++++++--- + poppler/GfxState.h | 196 +++- + poppler/OutputDev.cc | 25 + + poppler/OutputDev.h | 46 +- + poppler/PDFDoc.cc | 98 ++- + poppler/PDFDoc.h | 24 +- + poppler/PSOutputDev.cc | 1461 +++++++++++++++++++++---- + poppler/PSOutputDev.h | 48 +- + poppler/Page.cc | 115 ++- + poppler/Page.h | 23 +- + poppler/SplashOutputDev.cc | 1525 +++++++++++++++++++++++--- + poppler/SplashOutputDev.h | 59 +- + poppler/TextOutputDev.cc | 230 +++-- + poppler/TextOutputDev.h | 16 +- + qt/poppler-page.cc | 34 +- + qt4/src/poppler-page.cc | 31 +- + splash/Splash.cc | 2656 + +++++++++++++++++++++++++++++++++----------- + splash/Splash.h | 75 +- + splash/SplashBitmap.cc | 216 +++-- + splash/SplashBitmap.h | 13 +- + splash/SplashPattern.cc | 22 +- + splash/SplashPattern.h | 19 +- + splash/SplashState.cc | 11 + + splash/SplashState.h | 3 + + splash/SplashTypes.h | 145 ++- + test/gtk-cairo-test.cc | 2 +- + test/gtk-splash-test.cc | 23 +- + test/pdf-inspector.cc | 2 +- + 36 files changed, 7685 insertions(+), 1584 deletions(-) + +commit 10dfa2254dafb9de93692def2bfb3133d9a39989 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Oct 17 02:17:51 2005 +0000 + + 2005-10-05 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc (poppler_page_render_to_ps): + Fix another + off-by-one page number error (#4555). + + ChangeLog | 6 +++++- + poppler/poppler-config.h.in | 2 +- + 2 files changed, 6 insertions(+), 2 deletions(-) + +commit 9830f0ea41f09fefada740e9429c491e067a5082 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Oct 16 15:11:32 2005 +0000 + + GfxFont merges from xpdf 3.01 + + ChangeLog | 1 + + poppler/GfxFont.cc | 109 + +++++++++++++++++++++++++++++++++++----------------- + 2 files changed, 75 insertions(+), 35 deletions(-) + +commit 62b5ba221aca8c320e964916b0c0329efc8da572 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Oct 16 15:04:39 2005 +0000 + + Stream[cc|h] merges from xpdf 3.01 + + ChangeLog | 1 + + poppler/Stream.cc | 714 + ++++++++++++++++++++++++++++++++++++++++++++++++----- + poppler/Stream.h | 19 +- + 3 files changed, 658 insertions(+), 76 deletions(-) + +commit b9fab51179f38e9798b10366be672f0432c874da +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Oct 16 14:58:14 2005 +0000 + + Function.cc|h merges from xpdf 3.01 + + ChangeLog | 1 + + poppler/Function.cc | 76 + +++++++++++++++++++++++++++++---------------------- + poppler/Function.h | 42 ++++++++++++++++++++++++++++ + 3 files changed, 86 insertions(+), 33 deletions(-) + +commit c6e0242200f818c67508041763ff317e79daadd6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Oct 16 14:54:17 2005 +0000 + + Annot.[cc|h] and related merges from xpdf 3.01 + + ChangeLog | 7 ++- + poppler/Annot.cc | 234 + ++++++++++++++++++++++++++++++++++++++++++------ + poppler/Annot.h | 20 ++--- + poppler/FontInfo.cc | 2 +- + poppler/PSOutputDev.cc | 2 +- + poppler/Page.cc | 2 +- + 6 files changed, 221 insertions(+), 46 deletions(-) + +commit 65d574fdc009e45ad66d1d402d5e805e4e94f427 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Oct 16 14:30:16 2005 +0000 + + Merge SplashFTFont.cc with xpdf 3.01 changes + + ChangeLog | 1 + + splash/SplashFTFont.cc | 64 + +++++++++++++++++++++++++++++++++--------------- + 2 files changed, 45 insertions(+), 20 deletions(-) + +commit f9d208e86433b213b21a75089f82fd00dcd746fc +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Oct 16 14:25:32 2005 +0000 + + Merge SplashScreen.[cc|h] from xpdf 3.01 + + ChangeLog | 4 ++ + splash/SplashScreen.cc | 110 + +++++++++++++++++++++++++++++++---------------- + splash/SplashScreen.h | 12 +++++- + 3 files changed, 87 insertions(+), 39 deletions(-) + +commit 7d46ac000316566503a27b5e5c68621be9c081d0 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Oct 16 14:19:47 2005 +0000 + + Merging SplashXPathScanner.cc changes from xpdf 3.01 + + splash/SplashXPathScanner.cc | 80 + ++++++++++++++++++++++------------------- + 1 files changed, 43 insertions(+), 37 deletions(-) + +commit e34713a2187e05358f98e749ec2923210a40a862 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Oct 5 15:57:17 2005 +0000 + + 2005-10-05 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc (poppler_page_render_to_ps): + Fix another + off-by-one page number error (#4555). + + ChangeLog | 5 +++++ + glib/poppler-page.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit fdd0934430ed251f9aeb45158b6ec95684b3e7b4 +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Mon Sep 26 19:29:45 2005 +0000 + + 2005-09-26 Marco Pesenti Gritti <mpg@redhat.com> + + * glib/poppler-action.cc: + + Initialize window title even if the action is unknown + + ChangeLog | 6 ++++++ + glib/poppler-action.cc | 5 +++-- + 2 files changed, 9 insertions(+), 2 deletions(-) + +commit e9753049ddfbdf28df7a222d35eccdbcbcbc848d +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Mon Sep 26 10:42:38 2005 +0000 + + 2005-09-26 Marco Pesenti Gritti <mpg@redhat.com> + + * glib/poppler-action.cc: + * glib/poppler-action.h: + + Implement launch action + + ChangeLog | 7 +++++++ + glib/poppler-action.cc | 11 ++++++++--- + glib/poppler-action.h | 1 + + 3 files changed, 16 insertions(+), 3 deletions(-) + +commit ab18b2cb6d1c62bb91173d105e8631fe4ef1bcfb +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 20 15:27:31 2005 +0000 + + Parser.cc merges from xpdf 3.01 + + ChangeLog | 1 + + poppler/Parser.cc | 19 +++++++++++-------- + 2 files changed, 12 insertions(+), 8 deletions(-) + +commit cf6723caaed24615c3b8965cee9c433007f80d77 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 20 15:08:52 2005 +0000 + + TextPage *TextOutpudDev::takeText() from xpdf 3.01 + + ChangeLog | 1 + + poppler/TextOutputDev.cc | 8 ++++++++ + poppler/TextOutputDev.h | 4 ++++ + 3 files changed, 13 insertions(+), 0 deletions(-) + +commit e0cbb0ca2c611ad5ac0267e46279c9d61450902a +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 20 14:59:43 2005 +0000 + + more 3.00 -> 3.01 merging + + ChangeLog | 1 + + poppler/XRef.cc | 1 - + 2 files changed, 1 insertions(+), 1 deletions(-) + +commit 9c7adb318d395ff674c6febf6406a8d47e9e5bf6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 20 14:43:15 2005 +0000 + + * poppler/UnicodeMap.cc: More grealloc -> greallocn + * poppler/UnicodeTypeTable.cc: Merge from xpdf 3.01 + + ChangeLog | 2 ++ + poppler/UnicodeMap.cc | 4 ++-- + poppler/UnicodeTypeTable.cc | 4 ++-- + 3 files changed, 6 insertions(+), 4 deletions(-) + +commit 2c4c9b855b0df1dc0836d4f44e9471215a419ea6 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 20 14:34:31 2005 +0000 + + Merge link.cc changes from xpdf 3.00 -> 3.01 + + ChangeLog | 1 + + poppler/Link.cc | 64 + ++++++++++++++++++++++++++++++++++++++++++++++++++++-- + 2 files changed, 62 insertions(+), 3 deletions(-) + +commit 4e9490c0219dd9c99ba0e5533c96663b8570a87b +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Sep 20 14:00:43 2005 +0000 + + Merge GlobalParam.* changes, they are worthless for us as poppler + but this way we are nearer to have the 3.01 sources merged, then we + can remove them if we decide we don't need this options. + Remove a setEncryption from the Xref.h marco probably forgot to + remove when merging + + ChangeLog | 3 +++ + poppler/GlobalParams.cc | 41 +++++++++++++++++++++++++++++++++++++++++ + poppler/GlobalParams.h | 22 ++++++++++++++++------ + poppler/XRef.h | 4 ---- + 4 files changed, 60 insertions(+), 10 deletions(-) + +commit 22da021bf69d83d641e3f30cc0e1bd62394e56a4 +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Tue Sep 20 13:23:08 2005 +0000 + + 2005-09-20 Marco Pesenti Gritti <mpg@redhat.com> + + * poppler/XRef.cc: + + Remove duplicated initialization + + ChangeLog | 6 ++++++ + poppler/XRef.cc | 4 ---- + 2 files changed, 6 insertions(+), 4 deletions(-) + +commit 2a8778147938e3ed2af177226a9c35655f898c95 +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Tue Sep 20 10:18:57 2005 +0000 + + 2005-09-20 Marco Pesenti Gritti <mpg@redhat.com> + + * poppler/GlobalParams.cc: + + s/G/Goo in not yet compiled plugins code + + ChangeLog | 6 ++++++ + poppler/GlobalParams.cc | 8 ++++---- + 2 files changed, 10 insertions(+), 4 deletions(-) + +commit 16f720b87cfc491db585dbdc99236cf492ffe85b +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Tue Sep 20 09:57:41 2005 +0000 + + 2005-09-20 Marco Pesenti Gritti <mpg@redhat.com> + + * poppler/Makefile.am: + + Add XPDFPlugin*. Thanks to TSDgeos that noticed this. + + * poppler/XpdfPluginAPI.cc: + + Fixup + + ChangeLog | 10 ++++++++++ + poppler/Makefile.am | 4 +++- + poppler/XpdfPluginAPI.cc | 2 +- + 3 files changed, 14 insertions(+), 2 deletions(-) + +commit 5f30791c3d87315ad1f742de64d2c1351ca70cb7 +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Fri Sep 16 19:33:28 2005 +0000 + + *** empty log message *** + + ChangeLog | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit db62e07fcf57f45951b21f8aab44b0d943efe5d0 +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Fri Sep 16 19:33:05 2005 +0000 + + 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> + + * poppler/PDFDoc.cc: + * poppler/PDFDoc.h: + * poppler/XRef.cc: + * poppler/XRef.h: + + Merge more from 3.01 + + poppler/PDFDoc.cc | 20 ++++++++++++++++---- + poppler/PDFDoc.h | 19 +++++++++---------- + poppler/XRef.cc | 13 +++++++++++-- + poppler/XRef.h | 7 +++++-- + 4 files changed, 41 insertions(+), 18 deletions(-) + +commit 3acc7be594712fd0ce7ac07b7188d5b38b382782 +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Fri Sep 16 19:05:00 2005 +0000 + + 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> + + * poppler/XRef.cc: + + Merge some initialization that I lost before + + ChangeLog | 6 ++++++ + poppler/XRef.cc | 4 ++++ + 2 files changed, 10 insertions(+), 0 deletions(-) + +commit 3badd82b72b2768be27e309b048cd8dcb1c80038 +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Fri Sep 16 18:46:37 2005 +0000 + + 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> + + * poppler/XRef.cc: + + Merge change from 3.01 + + ChangeLog | 6 ++++++ + poppler/XRef.cc | 8 -------- + 2 files changed, 6 insertions(+), 8 deletions(-) + +commit 5474583e20ca773befa17242d4ad7b8f81d5bf99 +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Fri Sep 16 18:38:58 2005 +0000 + + 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> + + * poppler/CharCodeToUnicode.cc: + * poppler/CharCodeToUnicode.h: + + Improvements from xpdf 3.01 + + ChangeLog | 7 +++++++ + poppler/CharCodeToUnicode.cc | 31 +++++++++++++++++++------------ + poppler/CharCodeToUnicode.h | 4 ++++ + 3 files changed, 30 insertions(+), 12 deletions(-) + +commit b2a6eab113fecd3823885c64f3302bea4f372a9f +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Fri Sep 16 18:37:29 2005 +0000 + + 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> + + * poppler/CMap.cc: + + Improvements from xpdf 3.01 + + ChangeLog | 6 ++++++ + poppler/CMap.cc | 30 +++++++++++++++++++++++++++--- + 2 files changed, 33 insertions(+), 3 deletions(-) + +commit 3f69f2158453b9dab9efc280ed1578ac3d0cebe8 +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Fri Sep 16 18:35:29 2005 +0000 + + 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> + + * poppler/NameToUnicodeTable.h: + * poppler/UnicodeTypeTable.cc: + * poppler/UnicodeTypeTable.h: + + Merge some unicode table changes from xpdf 3.01 + + ChangeLog | 8 + + poppler/NameToUnicodeTable.h | 168 +++++----- + poppler/UnicodeTypeTable.cc | 690 + ++++++++++++++++++++++++++++++++++++++++-- + poppler/UnicodeTypeTable.h | 2 + + 4 files changed, 764 insertions(+), 104 deletions(-) + +commit 6cbe76bc55d557fe5fca0f8f1b33bda95acdc0e9 +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Fri Sep 16 18:32:29 2005 +0000 + + 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> + + * poppler/SplashOutputDev.h: + * splash/Splash.cc: + * splash/Splash.h: + + Modified region support from xpdf 3.01 + + ChangeLog | 8 ++++++++ + poppler/SplashOutputDev.h | 5 +++++ + splash/Splash.cc | 31 +++++++++++++++++++++++++++++++ + splash/Splash.h | 11 +++++++++++ + 4 files changed, 55 insertions(+), 0 deletions(-) + +commit a9df3f3203c14161e5d6bc6048ec7e123536e6d3 +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Fri Sep 16 18:29:18 2005 +0000 + + 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> + + * goo/Makefile.am: + * poppler/DCTStream.h: + * poppler/Decrypt.cc: + * poppler/Decrypt.h: + * poppler/FlateStream.h: + * poppler/GlobalParams.cc: + * poppler/GlobalParams.h: + * poppler/Makefile.am: + * poppler/PDFDoc.cc: + * poppler/PDFDoc.h: + * poppler/Parser.cc: + * poppler/Parser.h: + * poppler/Stream.cc: + * poppler/Stream.h: + * poppler/XRef.cc: + * poppler/XRef.h: + * poppler/poppler-config.h.in: + + Merge security plugins support from xpdf 3.01 + + ChangeLog | 24 +++ + goo/FixedPoint.cc | 95 +++++++++++ + goo/FixedPoint.h | 150 +++++++++++++++++ + goo/Makefile.am | 6 +- + poppler/DCTStream.h | 2 - + poppler/Decrypt.cc | 23 ++- + poppler/Decrypt.h | 6 +- + poppler/FlateStream.h | 2 - + poppler/GlobalParams.cc | 229 ++++++++++++++++++++++++++ + poppler/GlobalParams.h | 16 ++ + poppler/Makefile.am | 5 +- + poppler/PDFDoc.cc | 36 ++++ + poppler/PDFDoc.h | 1 + + poppler/Parser.cc | 20 --- + poppler/Parser.h | 4 - + poppler/SecurityHandler.cc | 376 + +++++++++++++++++++++++++++++++++++++++++++ + poppler/SecurityHandler.h | 157 ++++++++++++++++++ + poppler/Stream.cc | 18 -- + poppler/Stream.h | 8 - + poppler/XRef.cc | 162 ++----------------- + poppler/XRef.h | 13 +- + poppler/XpdfPluginAPI.cc | 262 ++++++++++++++++++++++++++++++ + poppler/XpdfPluginAPI.h | 341 + +++++++++++++++++++++++++++++++++++++++ + poppler/poppler-config.h.in | 2 - + 24 files changed, 1737 insertions(+), 221 deletions(-) + +commit a777e5c26483b90d0910e85c2be666640835d0bf +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Fri Sep 16 18:21:38 2005 +0000 + + 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> + + * configure.ac: + * goo/Makefile.am: + * splash/Makefile.am: + * splash/SplashFTFont.cc: + * splash/SplashMath.h: + * splash/SplashTypes.h: + + Merge support for fixed point + + ChangeLog | 11 +++++++++++ + configure.ac | 4 ++++ + splash/Makefile.am | 1 + + splash/SplashFTFont.cc | 7 +++++++ + splash/SplashMath.h | 34 +++++++++++++++++++++++++++++++++- + splash/SplashTypes.h | 5 +++++ + 6 files changed, 61 insertions(+), 1 deletions(-) + +commit 00457c5f44a246c9f867a114a72be9f7b2dc1cf5 +Author: Marco Pesenti Gritti <mpg@redhat.com> +Date: Fri Sep 16 18:11:14 2005 +0000 + + 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> + + * poppler/ArthurOutputDev.cc: + * poppler/CairoFontEngine.cc: + * poppler/TextOutputDev.cc: + * poppler/UnicodeMap.cc: + + Use mallocn when possible + + ChangeLog | 9 +++++++++ + poppler/ArthurOutputDev.cc | 2 +- + poppler/CairoFontEngine.cc | 4 ++-- + poppler/TextOutputDev.cc | 2 +- + poppler/UnicodeMap.cc | 2 +- + 5 files changed, 14 insertions(+), 5 deletions(-) + +commit 09c9ff67ceae5753811a2f625e3ad810628c782e +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Sep 16 18:00:43 2005 +0000 + + SplashXPath.cc merges from xpdf 3.00 -> 3.01 + + ChangeLog | 3 ++ + splash/SplashXPath.cc | 81 + +++++++++++++++++++++++------------------------- + 2 files changed, 42 insertions(+), 42 deletions(-) + +commit 0555ba861d3b84d88c80da4fa247274338ff7817 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Sep 16 17:42:56 2005 +0000 + + SplashFontEngine.cc merge from xpdf 3.00 -> 3.01 + + splash/SplashFontEngine.cc | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +commit ddc72bd8354168d992631d1ef8cd0939b428966c +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Sep 15 22:24:55 2005 +0000 + + Merge xpdf 3.00 -> 3.01 changes in SplashT1Font.* files + + splash/SplashT1Font.cc | 23 ++++++++++++++++++----- + splash/SplashT1Font.h | 2 ++ + 2 files changed, 20 insertions(+), 5 deletions(-) + +commit ba409db3157105f326b4bbc342ca7af859a44ce9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Sep 15 22:20:37 2005 +0000 + + Merge xpdf 3.00 -> 3.01 changes in SplashPath.* files + + splash/SplashPath.cc | 3 ++- + splash/SplashPath.h | 5 +++++ + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit 3ea00e853049d8c26ee88aaef8ea6c47c8d46956 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Sep 15 22:15:47 2005 +0000 + + Merge xpdf 3.00 -> 3.01 changes in SplashFont.* files + + splash/SplashFont.cc | 6 ++++++ + splash/SplashFont.h | 10 +++++++++- + 2 files changed, 15 insertions(+), 1 deletions(-) + +commit e571dcbfd0c77a28e41710577859f632cc989de5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Sep 15 22:09:50 2005 +0000 + + Merge the xpdf 3.01 change that uses runtime detection of freetype + version + + ChangeLog | 6 ++++++ + configure.ac | 14 +++----------- + poppler/CairoFontEngine.cc | 21 ++++++++++++++------- + poppler/CairoFontEngine.h | 3 ++- + splash/SplashFTFontEngine.cc | 19 +++++++++++-------- + splash/SplashFTFontEngine.h | 1 + + 6 files changed, 37 insertions(+), 27 deletions(-) + +commit 59fe2937db192dc7b59bf28c3f29909faf11aae3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Sep 15 21:51:16 2005 +0000 + + Merge xpdf 3.00 -> 3.01 changes for that file + + splash/SplashClip.h | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit b2f94635249f2c5f0c876a1005826fe4c6eb6025 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Sep 15 12:52:36 2005 +0000 + + Merge xpdf 3.00 -> xpdf 3.01 changes for Catalog.[cc|h] + + poppler/Catalog.cc | 5 ++++- + poppler/Catalog.h | 3 +++ + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit 0fc2e70576b1c48cf47a686e8aa7e202a802bc9d +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Sep 15 12:32:25 2005 +0000 + + Another small merge from xpdf 3.01 + + ChangeLog | 3 +++ + poppler/Outline.cc | 6 +++--- + 2 files changed, 6 insertions(+), 3 deletions(-) + +commit f8983ceb3c55df72c94870806d71db139c11bdeb +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Sep 15 12:28:34 2005 +0000 + + Another small xpdf 3.00 -> xpdf 3.01 merge + + poppler/Object.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 52efe9845cf3eb1dd836f90bfa203760baa2f87c +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Sep 15 11:46:56 2005 +0000 + + bradh forgot to remove the two returns when merging xpdf 3.00 -> + xpdf 3.01 changes of this file + + poppler/JPXStream.cc | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +commit 4b4fc5c017bf147c9069bbce32fc14467bd2a81a +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Sep 14 21:20:36 2005 +0000 + + Merge all the fofi/ changes from xpdf 3.01, there is only one api + change that affects PSOutputDev (also has been updated the part + that uses this api not the whole file). All our fixes in that dir + are included in the upgrade. + + ChangeLog | 4 + + fofi/FoFiTrueType.cc | 406 + ++++++++++++++++++++++++++++++++++++++++++------ + fofi/FoFiTrueType.h | 15 ++- + fofi/FoFiType1.cc | 25 ++-- + fofi/FoFiType1C.cc | 134 ++++++++++++++--- + fofi/FoFiType1C.h | 6 + + poppler/PSOutputDev.cc | 7 +- + poppler/PSOutputDev.h | 3 +- + 8 files changed, 515 insertions(+), 85 deletions(-) + +commit a68e8e6330418b1f623867973b9c128a9a139c0c +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Sep 7 03:00:36 2005 +0000 + + 2005-09-06 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: Enable A4_PAPER and OPI_SUPPORT by default. + There + is no reason to not enable OPI and the paper size should be + controlled by the application. + + * test/Makefile.am (EXTRA_DIST): Add pdf-operators.c + + ChangeLog | 8 ++++++++ + configure.ac | 17 ++--------------- + test/Makefile.am | 3 +++ + 3 files changed, 13 insertions(+), 15 deletions(-) + +commit b6490944c081ff53f623acea7ab7a600c3e54816 +Author: Brad Hards <bradh@frogmouth.net> +Date: Sat Sep 3 11:53:44 2005 +0000 + + Switch the qt4/tests unittests to use QtTestLib. + + ChangeLog | 6 ++ + configure.ac | 66 ++++++++++++++++++++ + qt4/tests/.cvsignore | 17 ++---- + qt4/tests/Makefile.am | 71 +++++++--------------- + qt4/tests/README.unittest | 23 +++++++ + qt4/tests/check_author.cpp | 25 -------- + qt4/tests/check_linearised.cpp | 23 ------- + qt4/tests/check_metadata.cpp | 101 + +++++++++++++++++++++++++++++++ + qt4/tests/check_orientation.cpp | 40 ------------ + qt4/tests/check_pagelayout.cpp | 44 +++++++++++++ + qt4/tests/check_pagelayout_facing.cpp | 22 ------- + qt4/tests/check_pagelayout_none.cpp | 22 ------- + qt4/tests/check_pagelayout_single.cpp | 22 ------- + qt4/tests/check_pagemode.cpp | 64 +++++++++++++++++++ + qt4/tests/check_pagemode_attach.cpp | 22 ------- + qt4/tests/check_pagemode_fullscreen.cpp | 22 ------- + qt4/tests/check_pagemode_none.cpp | 22 ------- + qt4/tests/check_pagemode_oc.cpp | 22 ------- + qt4/tests/check_pagemode_thumbs.cpp | 22 ------- + qt4/tests/check_permissions.cpp | 60 +++++++------------ + 20 files changed, 354 insertions(+), 362 deletions(-) + +commit 3725841417871d1051772068833dc908ca70b7ce +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Sep 2 14:47:24 2005 +0000 + + 2005-09-02 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc: Apply Marcos rotation fix. + + ChangeLog | 4 ++++ + glib/poppler-page.cc | 5 ++++- + 2 files changed, 8 insertions(+), 1 deletions(-) + +commit ecf3dcadb948013cbc987e464952933daf78e4bf +Author: Brad Hards <bradh@frogmouth.net> +Date: Wed Aug 31 15:28:46 2005 +0000 + + Merge some missing parts of previous patches, and some other minor + cleanups from xpdf 3.0.1 + + poppler/Catalog.cc | 16 +-- + poppler/JPXStream.cc | 380 + ++++++++++++++++++++++++++++++++---------------- + poppler/JPXStream.h | 25 ++- + poppler/Lexer.cc | 11 ++ + poppler/Lexer.h | 3 + + poppler/PSOutputDev.cc | 31 ++-- + poppler/Stream.h | 7 + + 7 files changed, 309 insertions(+), 164 deletions(-) + +commit de78738164319b733e54a9abfb5957870facd6cd +Author: Brad Hards <bradh@frogmouth.net> +Date: Wed Aug 31 09:51:41 2005 +0000 + + poppler/JArithmeticDecoder.cc + poppler/JArithmeticDecoder.h + poppler/JBIG2Stream.cc + poppler/JBIG2Stream.h: merge in some of the JBIG2 changes from + xpdf 3.0.1. + + ChangeLog | 9 ++ + poppler/JArithmeticDecoder.cc | 42 ++++++-- + poppler/JArithmeticDecoder.h | 22 ++++- + poppler/JBIG2Stream.cc | 227 + +++++++++++++++++++++++++---------------- + poppler/JBIG2Stream.h | 4 +- + 5 files changed, 201 insertions(+), 103 deletions(-) + +commit 55952feb637e300b073691ae95d68e766521a769 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Aug 29 15:24:32 2005 +0000 + + 2005-08-29 Kristian Høgsberg <krh@redhat.com> + + * configure.ac (HAVE_FREETYPE_H): Patch from Hiroyuki + Ikezoe: Set + HAVE_FREETYPE_217_OR_OLDER to 0 if we found freetype using + pkg-config (#4223). + + ChangeLog | 6 ++++++ + configure.ac | 2 +- + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit 244e5c1f8f65da41ba6314028766dfe5973f6132 +Author: Brad Hards <bradh@frogmouth.net> +Date: Sun Aug 28 09:43:18 2005 +0000 + + Merge the Goo* improvements from xpdf 3.0.1. This change is based on + martink's work (7-xpdf-3.01-goo-improvements.patch), with some + tweaking + by me. + + ChangeLog | 13 ++++++++ + fofi/FoFiTrueType.cc | 1 + + goo/GooHash.cc | 24 ++++++++++++++ + goo/GooHash.h | 2 + + goo/GooList.cc | 5 +++ + goo/GooList.h | 5 +++ + goo/GooString.cc | 85 + +++++++++++++++++++++++++++++++++++++++++++++++++- + goo/GooString.h | 11 ++---- + goo/gmem.c | 3 ++ + poppler/Decrypt.cc | 1 + + 10 files changed, 142 insertions(+), 8 deletions(-) + +commit eb91b274245b4f5f5389bc9ddfde2c2806557665 +Author: Brad Hards <bradh@frogmouth.net> +Date: Sun Aug 28 09:31:53 2005 +0000 + + This part of my previous gmallocn merge patch was missing. + + goo/GooHash.cc | 4 ++-- + goo/GooList.cc | 8 ++++---- + 2 files changed, 6 insertions(+), 6 deletions(-) + +commit b3474fd5e0efc96b5814d86e0cdedf39387e7ae3 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Aug 28 03:26:53 2005 +0000 + + add note about related bug + + ChangeLog | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ace2eb6ba518b970b96f30f61c4795c161e0cb79 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Aug 28 03:22:04 2005 +0000 + + 2005-08-27 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/FlateStream.cc: Fix predictor leak. + + ChangeLog | 4 ++++ + poppler/FlateStream.cc | 1 + + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit 96657c5480bf2ecf445ad5a105b8e7393ae53c8b +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Aug 28 03:19:55 2005 +0000 + + 2005-08-27 Jeff Muizelaar <jeff@infidigm.net> + + * configure.ac: Disable the zlib-based decoder by default. + + ChangeLog | 4 ++++ + configure.ac | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit d1d715158223c7ca3ae279cea420a948cfdb0428 +Author: Brad Hards <bradh@frogmouth.net> +Date: Sat Aug 27 08:43:42 2005 +0000 + + Merge the gmalloc -> gmallocn changes from xpdf 3.0.1. This change is + based on martink's work (13-xpdf-3.01-goo-allocn.patch) with some + tweaking by me. There may be some residual gmallocn changes still to + be merged. + + ChangeLog | 7 +++++ + fofi/FoFiTrueType.cc | 12 ++++---- + fofi/FoFiType1.cc | 2 +- + fofi/FoFiType1C.cc | 14 +++++----- + goo/gmem.c | 22 ++++++++++++++++ + goo/gmem.h | 9 +++++++ + poppler/Annot.cc | 2 +- + poppler/Array.cc | 2 +- + poppler/BuiltinFont.cc | 2 +- + poppler/CMap.cc | 6 ++-- + poppler/Catalog.cc | 8 +++--- + poppler/CharCodeToUnicode.cc | 22 ++++++++-------- + poppler/Dict.cc | 2 +- + poppler/Function.cc | 20 +++++++------- + poppler/Gfx.cc | 2 +- + poppler/GfxFont.cc | 24 +++++++++--------- + poppler/GfxState.cc | 54 + ++++++++++++++++++++-------------------- + poppler/JArithmeticDecoder.cc | 2 +- + poppler/JBIG2Stream.cc | 30 +++++++++++----------- + poppler/Link.cc | 6 ++-- + poppler/NameToCharCode.cc | 4 +- + poppler/Outline.cc | 4 +- + poppler/SplashOutputDev.cc | 8 +++--- + poppler/Stream.cc | 12 ++++---- + poppler/TextOutputDev.cc | 48 ++++++++++++++++++------------------ + poppler/XRef.cc | 18 +++++++------- + splash/SplashClip.cc | 12 ++++---- + splash/SplashFTFontFile.cc | 2 +- + splash/SplashFont.cc | 6 ++-- + splash/SplashPath.cc | 8 +++--- + splash/SplashScreen.cc | 4 +- + splash/SplashState.cc | 4 +- + splash/SplashT1FontFile.cc | 4 +- + splash/SplashXPath.cc | 4 +- + splash/SplashXPathScanner.cc | 4 +- + 35 files changed, 214 insertions(+), 176 deletions(-) + +commit feb82c60b1f86a9d1260db57534d98c54ee615c4 +Author: Martin Kretzschmar <martink@gnome.org> +Date: Wed Aug 24 19:41:27 2005 +0000 + + * configure.ac: add /usr/include/qt4 to qt4_incdirs. That's what + Debian and Ubuntu use. Maybe we should just use pkg-config. If + it's usable with qt4. + + * test/.cvsignore: ignore pdf_inspector binary. + + ChangeLog | 8 ++++++++ + configure.ac | 2 +- + test/.cvsignore | 7 ++++--- + 3 files changed, 13 insertions(+), 4 deletions(-) + +commit 8dce80eb74f24f07ac7668905f1631e04a9c5841 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Aug 24 18:57:46 2005 +0000 + + 2005-08-24 Kristian Høgsberg <krh@redhat.com> + + * poppler/TextOutputDev.cc: Push rotation argument down to + GfxState constructor. This is still not completely + functional yet. + + * glib/poppler-page.cc (poppler_page_render_selection): Add + rotation argument so API is useful. Not yet implemented. + (poppler_page_prepare_output_dev): Patch from Marco to fix + rotation using the cairo backend. + + ChangeLog | 10 ++++++++++ + glib/poppler-page.cc | 22 ++++++++++++++++------ + glib/poppler-page.h | 1 + + poppler/TextOutputDev.cc | 11 ++++++++--- + poppler/TextOutputDev.h | 4 +++- + 5 files changed, 38 insertions(+), 10 deletions(-) + +commit b909b5ae98bc3e557ef6e658e2b9120e82951259 +Author: Jonathan Blandford <jrb@redhat.com> +Date: Wed Aug 24 03:21:20 2005 +0000 + + Tue Aug 23 17:21:02 2005 Jonathan Blandford <jrb@redhat.com> + + * test/Makefile.am (gtk_cairo_test_LDADD): add + FREETYPE_{CFLAGS,LIBS} to the cairo deps + + ChangeLog | 5 +++++ + test/Makefile.am | 4 +++- + 2 files changed, 8 insertions(+), 1 deletions(-) + +commit da3aac379f07ffedd6078707ec9923800fc0c0a5 +Author: Jonathan Blandford <jrb@redhat.com> +Date: Tue Aug 23 18:20:45 2005 +0000 + + Tue Aug 23 13:38:01 2005 Jonathan Blandford <jrb@redhat.com> + + * configure.ac: + * poppler/Gfx.cc: + * poppler/Gfx.h: + * poppler/GlobalParams.cc: + * poppler/GlobalParams.h: + * poppler/Makefile.am: + * poppler/OutputDev.cc: + * poppler/OutputDev.h: + * poppler/ProfileData.cc: + * poppler/ProfileData.h: + * test/Makefile.am: + * test/pdf-inspector.cc: + * test/pdf-inspector.glade: + * test/pdf-operators.c: Initial cut at a pdf inspector. This + should help us look at PDF files. + + ChangeLog | 18 ++ + configure.ac | 4 +- + poppler/Gfx.cc | 30 ++++ + poppler/Gfx.h | 1 + + poppler/GlobalParams.cc | 16 ++ + poppler/GlobalParams.h | 3 + + poppler/Makefile.am | 2 + + poppler/OutputDev.cc | 17 ++ + poppler/OutputDev.h | 10 +- + poppler/ProfileData.cc | 44 +++++ + poppler/ProfileData.h | 41 +++++ + test/Makefile.am | 13 ++- + test/pdf-inspector.cc | 358 ++++++++++++++++++++++++++++++++++++++ + test/pdf-inspector.glade | 434 + ++++++++++++++++++++++++++++++++++++++++++++++ + test/pdf-operators.c | 81 +++++++++ + 15 files changed, 1068 insertions(+), 4 deletions(-) + +commit 1aad886c6c19a964a3fc9e18f31acc8e115478e0 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Aug 22 18:20:12 2005 +0000 + + 2005-08-22 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/poppler-private.h: + * glib/test-poppler-glib.c: Patch from Marco to simplify + the glib + rotation API. + + ChangeLog | 8 +++ + glib/poppler-page.cc | 136 + ++++++---------------------------------------- + glib/poppler-page.h | 4 +- + glib/poppler-private.h | 1 - + glib/test-poppler-glib.c | 2 +- + 5 files changed, 28 insertions(+), 123 deletions(-) + +commit 6070b1dc4b76c236f3100fbd255c2d906e61c3c2 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sun Aug 21 23:14:04 2005 +0000 + + 2005-08-21 Kristian Høgsberg <krh@redhat.com> + + * poppler/Makefile.am (INCLUDES): Add FREETYPE_CFLAGS. + + * configure.ac: Make freetype check use pkg-config if + possible. + + ChangeLog | 6 ++++++ + configure.ac | 34 ++++++++++++++++++++++++---------- + poppler/Makefile.am | 1 + + 3 files changed, 31 insertions(+), 10 deletions(-) + +commit 2698ca6fa107ea91dc01eb8cfb0c93383fbca125 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Aug 17 16:54:01 2005 +0000 + + 2005-08-17 Kristian Høgsberg <krh@redhat.com> + + * poppler/GfxFont.cc: Add fix discussed in #3131 to only + use the + MacRoman char map if the font has one or the font dicts + specifies + /MacRoman. + + ChangeLog | 6 ++++++ + poppler/GfxFont.cc | 1 - + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 5dc9b14b99f2efa2fe018e9267dd363d1bcd78b1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Aug 7 23:58:12 2005 +0000 + + Fix EOF checking + + ChangeLog | 4 ++++ + poppler/PDFDoc.cc | 10 +++++++++- + 2 files changed, 13 insertions(+), 1 deletions(-) + +commit 155d019d7b474f244a3e4bf64d192015f6a266c4 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sat Aug 6 18:09:51 2005 +0000 + + 2005-08-06 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc: + * glib/poppler-page.h: Use GdkColor for specifying selection + colors, we alreay depend on GDK anyway. + + ChangeLog | 6 ++++++ + glib/poppler-page.cc | 20 +++++++++----------- + glib/poppler-page.h | 5 +++-- + 3 files changed, 18 insertions(+), 13 deletions(-) + +commit c710b645c8297d356c101b13a9889bcaba691176 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Aug 6 11:58:59 2005 +0000 + + Update comment + + poppler/PDFDoc.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit de7953c8a8360d8bfc99298906c5fc1094684fc3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Sat Aug 6 11:47:37 2005 +0000 + + Increase EOF searching up to last 1024 characters + + ChangeLog | 7 +++++++ + poppler/PDFDoc.cc | 23 +++++++++++++---------- + 2 files changed, 20 insertions(+), 10 deletions(-) + +commit 5dd72618688763b50d5f5738d857c9294ef1b1c2 +Author: Brad Hards <bradh@frogmouth.net> +Date: Sat Aug 6 02:15:58 2005 +0000 + + Add password arguments to document constructor. + + ChangeLog | 4 ++++ + qt4/src/poppler-document.cc | 8 ++++++-- + qt4/src/poppler-qt4.h | 4 +++- + 3 files changed, 13 insertions(+), 3 deletions(-) + +commit edbd7957b393eb63f48df7db6b220b355d4fc461 +Author: Brad Hards <bradh@frogmouth.net> +Date: Sat Aug 6 02:07:55 2005 +0000 + + Make API extraction work again. + + ChangeLog | 3 +++ + qt4/src/Doxyfile | 2 +- + 2 files changed, 4 insertions(+), 1 deletions(-) + +commit f43a6f1d1c27c042f5736746c94430083baa4c1d +Author: Brad Hards <bradh@frogmouth.net> +Date: Sat Aug 6 01:53:06 2005 +0000 + + Add new test code for encrypted files. + + ChangeLog | 5 ++ + qt4/tests/.cvsignore | 1 + + qt4/tests/Makefile.am | 7 ++- + qt4/tests/test-password-qt4.cpp | 135 + +++++++++++++++++++++++++++++++++++++++ + 4 files changed, 147 insertions(+), 1 deletions(-) + +commit 2ec26afaf80864b023899b890b8e229448da9bed +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Aug 5 22:30:20 2005 +0000 + + 2005-08-05 Kristian Høgsberg <krh@redhat.com> + + * poppler/TextOutputDev.cc (visitLine): Round selection + coordinates in device space, so selection isn't fuzzy. + + * poppler/GfxState.cc: + * poppler/GfxState.h: Add simple Matrix class. + + ChangeLog | 8 ++++++++ + poppler/CairoOutputDev.cc | 6 +++--- + poppler/GfxState.cc | 26 ++++++++++++++++++++++++++ + poppler/GfxState.h | 10 ++++++++++ + poppler/TextOutputDev.cc | 14 ++++++++++++++ + 5 files changed, 61 insertions(+), 3 deletions(-) + +commit ccba4f0773047eea5e4ad0ac736450160dd97664 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Aug 5 19:04:36 2005 +0000 + + 2005-08-05 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc: + * glib/poppler-page.h: + * poppler/TextOutputDev.cc: + * poppler/TextOutputDev.h: Propagate selection colors to + the glib API. + + ChangeLog | 7 +++++ + glib/poppler-page.cc | 63 + ++++++++++++++++++++++++++++++++++++++++------ + glib/poppler-page.h | 4 ++- + poppler/TextOutputDev.cc | 25 ++++++++--------- + poppler/TextOutputDev.h | 7 +++- + 5 files changed, 82 insertions(+), 24 deletions(-) + +commit 43e97129393f403c41f191ceae9a54793ece005f +Author: Brad Hards <bradh@frogmouth.net> +Date: Thu Aug 4 10:15:23 2005 +0000 + + Fix problem with drawing filled objects that was introduced in + Rev 1.4. + + ChangeLog | 5 +++++ + poppler/ArthurOutputDev.cc | 13 +++++++++++-- + 2 files changed, 16 insertions(+), 2 deletions(-) + +commit a75d80333a70d2e1ac7c9032d316034eebed9dd6 +Author: Brad Hards <bradh@frogmouth.net> +Date: Wed Aug 3 11:44:55 2005 +0000 + + Implement paging ability for Qt4, more than a little based + on Albert's work for Qt3. + Up arrow -> previous page + Down arrow -> next page + q -> quit. + + What more could you want from a PDF viewer :-) + + ChangeLog | 6 +++++ + qt4/tests/test-poppler-qt4.cpp | 47 + +++++++++++++++++++++++++++++++-------- + 2 files changed, 43 insertions(+), 10 deletions(-) + +commit f3e0a163b098da1cc389c2c4f47e28358b1bec77 +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Aug 1 19:15:40 2005 +0000 + + Fix problem in the patch to fix #3299 + + ChangeLog | 4 ++++ + poppler/DCTStream.cc | 15 ++++++++++----- + poppler/DCTStream.h | 1 + + 3 files changed, 15 insertions(+), 5 deletions(-) + +commit 5f7bd81bedd8c90e3312190256488ff0c15502e1 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Aug 1 15:21:19 2005 +0000 + + 2005-08-01 Kristian Høgsberg <krh@redhat.com> + + Patch from Dan Winship <danw@novell.com> + + * glib/poppler-page.cc (poppler_page_copy_to_pixbuf): Set + alpha to + 0xff (opaque), not 0x00. + + ChangeLog | 7 +++++++ + glib/poppler-page.cc | 2 +- + 2 files changed, 8 insertions(+), 1 deletions(-) + +commit 22f509e60f60ccaea1f91d9ec1ef7ba8200bee8a +Author: Brad Hards <bradh@frogmouth.net> +Date: Mon Aug 1 08:09:00 2005 +0000 + + Fix up the fill problem with drawing text, where the "middle" + of glyphs + with a "hole" (like d, o, p, b, g) got filled. Also remove some + debugging + code. The glyphs are still ugly though. + + ChangeLog | 7 +++++++ + poppler/ArthurOutputDev.cc | 13 +------------ + 2 files changed, 8 insertions(+), 12 deletions(-) + +commit 7bf5d10c1f6edd538769c3a83a3b3d5df56d604b +Author: Brad Hards <bradh@frogmouth.net> +Date: Sun Jul 31 09:54:04 2005 +0000 + + An initial version of proper font handling, heavily based on work by + Albert Astals Cid. I changed it to stroke the glyphs based on the + SplashPath. In the longer term, Arthur should use FreeType paths + directly - hopefully that will be less ugly, and not fill everything. + + ChangeLog | 8 + + poppler/ArthurOutputDev.cc | 407 + +++++++++++++++++++++++++++++++------------ + poppler/ArthurOutputDev.h | 15 ++- + qt4/src/poppler-page.cc | 2 +- + splash/SplashPath.h | 2 + + 5 files changed, 317 insertions(+), 117 deletions(-) + +commit 8567b794628786b82e8db2a7daf75e4ad2398960 +Author: Brad Hards <bradh@frogmouth.net> +Date: Fri Jul 29 12:15:19 2005 +0000 + + Add some more test cases. + + ChangeLog | 4 ++++ + qt4/tests/.cvsignore | 4 ++++ + qt4/tests/Makefile.am | 10 +++++++++- + qt4/tests/check_pagelayout_facing.cpp | 22 ++++++++++++++++++++++ + qt4/tests/check_version.cpp | 22 ++++++++++++++++++++++ + 5 files changed, 61 insertions(+), 1 deletions(-) + +commit 59d660cf4d614fdea09d6a62b8889f7682c2b4f9 +Author: Brad Hards <bradh@frogmouth.net> +Date: Fri Jul 29 11:41:14 2005 +0000 + + Compile fix associated with last change. + + poppler/ArthurOutputDev.cc | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +commit 88c57c73f57820d6a57e26825093fbc688845e67 +Author: Brad Hards <bradh@frogmouth.net> +Date: Fri Jul 29 11:24:42 2005 +0000 + + A couple of minor changes to the Arthur backend. + + ChangeLog | 9 +++++++++ + poppler/ArthurOutputDev.cc | 18 ++++++++++++++---- + 2 files changed, 23 insertions(+), 4 deletions(-) + +commit 481db9d9eae5ea16e5b382f4ad21e6e624a70dcf +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Jul 29 05:48:33 2005 +0000 + + 2005-07-29 Kristian Høgsberg <krh@redhat.com> + + * poppler/TextOutputDev.cc: Finish TextSelectionDumper + class for + extracting the text from a selection. Add + TextPage::getSelectionText() and + TextOutputDev::getSelectionText() + methods to expose the new functionality. + + * glib/poppler-page.cc (poppler_page_get_text): Use + TextOutputDev::getSelectionText() to get the text from the + selection. + + * glib/poppler-document.cc (poppler_document_new_from_file): + * glib/poppler-page.cc (_poppler_page_new): Add extra NULL to + g_object_new() constructor to silence gcc warning about + missing + sentinel. + + ChangeLog | 16 +++++ + glib/poppler-document.cc | 2 +- + glib/poppler-page.cc | 31 ++++----- + poppler/TextOutputDev.cc | 164 + ++++++++++++++++++++++++++++++++++----------- + poppler/TextOutputDev.h | 8 ++ + 5 files changed, 164 insertions(+), 57 deletions(-) + +commit ad312dbded4e8f70c3a2eac9a0964fa00ecb6b2c +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jul 28 22:56:17 2005 +0000 + + Fix memory leaks in PageLabelInfo.cc + + ChangeLog | 4 ++++ + poppler/PageLabelInfo.cc | 11 +++++++++++ + poppler/PageLabelInfo.h | 2 ++ + 3 files changed, 17 insertions(+), 0 deletions(-) + +commit b45ad9f3409d7b1ed147135a70553e5255913c61 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jul 28 20:53:36 2005 +0000 + + - delete family; + + delete[] family; + as family is new[]'ed + + When assigning family if the font had "the proper info" and family + had to be deleted, do it. + + poppler/GlobalParams.cc | 9 +++++++-- + 1 files changed, 7 insertions(+), 2 deletions(-) + +commit f93dfc5c5133e0b1bd9f4786cfe18bd796cbac2a +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jul 28 18:51:17 2005 +0000 + + Remove the debugging + + poppler/GlobalParams.cc | 5 ----- + 1 files changed, 0 insertions(+), 5 deletions(-) + +commit 8022315004e1623c0be320f7671fcd72c15c0de3 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jul 28 18:37:17 2005 +0000 + + Wonder how that slipped here + + poppler/GlobalParams.cc | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +commit 82638babe89e402c0348619ec3205059b977c7e9 +Author: Albert Astals Cid <aacid@kde.org> +Date: Thu Jul 28 17:34:19 2005 +0000 + + Fontconfig patch is here, rejoice + + ChangeLog | 15 ++- + glib/poppler-document.cc | 1 - + poppler/CairoFontEngine.cc | 95 +--------- + poppler/CairoFontEngine.h | 2 - + poppler/CairoOutputDev.cc | 4 - + poppler/GlobalParams.cc | 473 + ++++++++++++++++++++----------------------- + poppler/GlobalParams.h | 17 +-- + poppler/SplashOutputDev.cc | 132 +------------ + poppler/SplashOutputDev.h | 3 - + qt/poppler-document.cc | 1 - + qt4/src/poppler-document.cc | 1 - + test/gtk-cairo-test.cc | 1 - + test/gtk-splash-test.cc | 1 - + 13 files changed, 241 insertions(+), 505 deletions(-) + +commit e9015531b1d0e5f2c8d8ca2bc50d5f14aaf954bc +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Jul 28 06:31:57 2005 +0000 + + 2005-07-28 Kristian Høgsberg <krh@redhat.com> + + * poppler/poppler-config.h.in: Add GCC_PRINTF_FORMAT macro to + annotate printf-like functions (#3638). + + * poppler/Error.h: Add GCC_PRINTF_FORMAT to error(). + + * poppler/PSOutputDev.h: Add GCC_PRINTF_FORMAT to + PSOutputDev::writePSFmt(). + + * poppler/PSOutputDev.cc, poppler/GlobalParams.cc: Quiet new + printf warnings. + + ChangeLog | 11 +++++++++++ + poppler/Error.h | 2 +- + poppler/GlobalParams.cc | 3 ++- + poppler/PSOutputDev.cc | 3 +-- + poppler/PSOutputDev.h | 2 +- + poppler/TextOutputDev.cc | 13 ++++++++++++- + poppler/poppler-config.h.in | 12 ++++++++++++ + 7 files changed, 40 insertions(+), 6 deletions(-) + +commit 9df89c495683e229b771b3d008ed25d478465c35 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Jul 28 05:52:43 2005 +0000 + + 2005-07-28 Kristian Høgsberg <krh@redhat.com> + + * poppler/TextOutputDev.cc (TextBlock::visitSelection): Assign + start and stop coordinates in one place so we don't assign the + same point to both in some corner cases. + (TextWord::visitSelection): Initialize begin to len, not + len + 1 + to fix crash. + + (TextWord::visitSelection, TextLine::visitSelection): Change + selection trigger; now midpoint of glyph must be included in + selection area for glyph to be in selection. + + ChangeLog | 12 +++++ + poppler/CairoOutputDev.cc | 2 +- + poppler/TextOutputDev.cc | 113 + +++++++++++++++++++++----------------------- + 3 files changed, 67 insertions(+), 60 deletions(-) + +commit a3d9b5849cedf1316c6fc5859872e957f3f7b593 +Author: Martin Kretzschmar <martink@gnome.org> +Date: Wed Jul 27 19:21:08 2005 +0000 + + * poppler/PSOutputDev.cc (PSOutputDev): change the constructor to + take paper size and duplex setting parameters. + (init): add paper size and duplex parameters. + (writeDocSetup): add duplex parameter. + + * poppler/PSOutputDev.h: update declarations. + + * glib/poppler-private.h (struct _PopplerPSFile): store necessary + information to eventually construct a PSOutputDev. + + * glib/poppler-page.cc (poppler_page_render_to_ps): initialize the + output dev if it doesn't exist yet. + + * glib/poppler-document.cc (poppler_ps_file_new): don't create the + PSOutputDev here, just store filename and page range. + (poppler_ps_file_set_paper_size, poppler_ps_file_set_duplex): new + functions. + (poppler_ps_file_free): free the filename which we strdup now. + + * glib/poppler-document.h: add prototypes. + + ChangeLog | 23 +++++++++++++++++++++ + glib/poppler-document.cc | 49 + +++++++++++++++++++++++++++++++++++++++------ + glib/poppler-document.h | 15 +++++++++---- + glib/poppler-page.cc | 10 +++++++++ + glib/poppler-private.h | 6 +++++ + poppler/PSOutputDev.cc | 23 +++++++++++++-------- + poppler/PSOutputDev.h | 9 ++++++- + 7 files changed, 112 insertions(+), 23 deletions(-) + +commit 7be920ecf13698c3cf4ab8df09c8c67f1a04bfa2 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jul 26 21:52:09 2005 +0000 + + Fix mem leak in qt test app + + ChangeLog | 4 ++++ + qt/test-poppler-qt.cpp | 2 ++ + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit 2bc26dffd9f296799617d319055648c20f748c8a +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Jul 26 20:34:13 2005 +0000 + + 2005-07-26 Kristian Høgsberg <krh@redhat.com> + + * fofi/FoFiType1.cc: Make check for end of encoding array + a bit + more liberal so we don't crash on complex encoding arrays + (#3344). + + ChangeLog | 5 +++++ + fofi/FoFiType1.cc | 21 +++++++-------------- + 2 files changed, 12 insertions(+), 14 deletions(-) + +commit 07911274e4e850a628b1e587cafc2a73c05f93fe +Author: Albert Astals Cid <aacid@kde.org> +Date: Mon Jul 25 20:40:37 2005 +0000 + + Work on bad jpeg data that have garbage before the start marker. Fixes + bug #3299 + + ChangeLog | 5 +++++ + poppler/DCTStream.cc | 38 ++++++++++++++++++++++++++++++++++++++ + 2 files changed, 43 insertions(+), 0 deletions(-) + +commit a1869eca39172fcb42f036a5846b19548be53568 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 22 11:01:25 2005 +0000 + + Fix bug #3586 + + ChangeLog | 5 +++++ + poppler/CairoFontEngine.cc | 2 ++ + 2 files changed, 7 insertions(+), 0 deletions(-) + +commit 95529b41272484f08fb54393e1886bf7ff3e02c8 +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 22 10:45:19 2005 +0000 + + Make it possible to browse pages in test-poppler-qt + + ChangeLog | 13 ++++++++--- + qt/test-poppler-qt.cpp | 49 + +++++++++++++++++++++++++++++++++++++++-------- + 2 files changed, 49 insertions(+), 13 deletions(-) + +commit 2d52650864eab0e9385ed1fe8fb594daac9d8322 +Author: Martin Kretzschmar <martink@gnome.org> +Date: Fri Jul 22 10:35:56 2005 +0000 + + * glib/poppler-document.cc (poppler_fonts_iter_get_name): if the + font is a subset, strip the ABCDEF+ tag. + (poppler_fonts_iter_get_full_name): does what the old get_name did. + (poppler_fonts_iter_get_font_type, poppler_fonts_iter_is_embedded) + (poppler_fonts_iter_is_subset): new wrappers. + + * glib/poppler-document.h (PopplerFontType): new enum. + Update prototypes. + + ChangeLog | 11 +++++++++ + glib/poppler-document.cc | 54 + +++++++++++++++++++++++++++++++++++++++++++++- + glib/poppler-document.h | 38 +++++++++++++++++++++++--------- + 3 files changed, 91 insertions(+), 12 deletions(-) + +commit 43bed4aafcf1d291dc96fa5070efbd7936a6122f +Author: Albert Astals Cid <aacid@kde.org> +Date: Fri Jul 22 10:33:54 2005 +0000 + + Fix bugs #3728 and #3750 + + ChangeLog | 4 ++++ + splash/Splash.cc | 10 ++++++++++ + 2 files changed, 14 insertions(+), 0 deletions(-) + +commit c7bcef87493d354a077dd223d76f86640acc0ce3 +Author: Martin Kretzschmar <martink@gnome.org> +Date: Fri Jul 15 19:55:30 2005 +0000 + + update for 2005-06-27 change to actually display something again. + + ChangeLog | 5 +++++ + test/gtk-cairo-test.cc | 10 ++++++---- + 2 files changed, 11 insertions(+), 4 deletions(-) + +commit 6623711d2d50dc52454904ee16b25337f0aab130 +Author: Brad Hards <bradh@frogmouth.net> +Date: Sun Jul 10 09:34:03 2005 +0000 + + A general cleanup of the Arthur output renderer. + + ChangeLog | 5 ++ + poppler/ArthurOutputDev.cc | 105 + +++++++++++++++----------------------------- + 2 files changed, 41 insertions(+), 69 deletions(-) + +commit ea1cc9a7b12db9c44b89896c41d07e3ba932d054 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Jul 8 04:59:41 2005 +0000 + + 2005-07-08 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc (poppler_page_set_selection_alpha): Add + this function to initialize the alpha channel when using the + splash backend. + + * poppler/TextOutputDev.cc (visitLine): Add missing scaling of + intra-line selection edges. + + ChangeLog | 9 +++++++ + glib/poppler-page.cc | 59 + +++++++++++++++++++++++++++++++++++++++++++++- + poppler/TextOutputDev.cc | 17 +++++++----- + 3 files changed, 77 insertions(+), 8 deletions(-) + +commit 1cd915397c9532ed80b4f905b6ed9c0126aa38f2 +Author: Brad Hards <bradh@frogmouth.net> +Date: Thu Jul 7 21:15:09 2005 +0000 + + Add support for page layout to the Qt4 bindings, plus + test cases. + + ChangeLog | 8 ++++++++ + qt4/src/poppler-document.cc | 22 ++++++++++++++++++++++ + qt4/src/poppler-qt4.h | 26 ++++++++++++++++++++++++-- + qt4/tests/Makefile.am | 10 +++++++++- + qt4/tests/check_pagelayout_none.cpp | 22 ++++++++++++++++++++++ + qt4/tests/check_pagelayout_single.cpp | 22 ++++++++++++++++++++++ + 6 files changed, 107 insertions(+), 3 deletions(-) + +commit 4e050aef7ba132900f84205be221fd48808848c3 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Jul 7 17:19:36 2005 +0000 + + 2005-07-07 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc (poppler_page_prepare_output_dev): + Account + for page rotation when creating the cairo surface. + + ChangeLog | 5 +++++ + glib/poppler-page.cc | 17 +++++++++++++++-- + 2 files changed, 20 insertions(+), 2 deletions(-) + +commit 2eeab0b8afeb4897806df2de6e496889c25dda5e +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Jul 7 15:58:43 2005 +0000 + + 2005-07-06 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc (poppler_page_copy_to_pixbuf): Add + out of + bounds checking (from Marco). + + ChangeLog | 6 +++++- + glib/poppler-page.cc | 5 +++++ + 2 files changed, 10 insertions(+), 1 deletions(-) + +commit b1015f6bdbd93b2a2574a9f0e0e1cd7dbae9af78 +Author: Brad Hards <bradh@frogmouth.net> +Date: Thu Jul 7 11:13:24 2005 +0000 + + At least try to fix glib issues. If you care about glib, + then you should review this. + + ChangeLog | 4 ++++ + glib/poppler-document.cc | 2 ++ + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit 8bf787031e7a2e93b4e1202918bd1aee86675082 +Author: Brad Hards <bradh@frogmouth.net> +Date: Thu Jul 7 11:04:08 2005 +0000 + + Update for page mode - new mode from PDF-1.6, API docs fixes + and some tests. + + ChangeLog | 15 +++++++++++++++ + poppler/Catalog.cc | 2 ++ + poppler/Catalog.h | 3 ++- + qt4/src/poppler-document.cc | 2 ++ + qt4/src/poppler-qt4.h | 14 +++++++++----- + qt4/tests/Makefile.am | 22 +++++++++++++++++++++- + qt4/tests/check_pagemode_attach.cpp | 22 ++++++++++++++++++++++ + qt4/tests/check_pagemode_fullscreen.cpp | 22 ++++++++++++++++++++++ + qt4/tests/check_pagemode_none.cpp | 22 ++++++++++++++++++++++ + qt4/tests/check_pagemode_oc.cpp | 22 ++++++++++++++++++++++ + qt4/tests/check_pagemode_thumbs.cpp | 22 ++++++++++++++++++++++ + 11 files changed, 161 insertions(+), 7 deletions(-) + +commit 695e27fb4d6fcc3466e2c9c95b4f02821b07e823 +Author: Brad Hards <bradh@frogmouth.net> +Date: Thu Jul 7 11:01:27 2005 +0000 + + Suppress noise from new test files. + + qt4/tests/.cvsignore | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 8a8d57bdcf11ed2903913d938b9711053b9bb9f1 +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jul 6 17:12:36 2005 +0000 + + Extract family, stretch and weight from the font descriptor + + ChangeLog | 2 ++ + poppler/GfxFont.cc | 41 +++++++++++++++++++++++++++++++++++++++++ + poppler/GfxFont.h | 36 ++++++++++++++++++++++++++++++++++++ + 3 files changed, 79 insertions(+), 0 deletions(-) + +commit 3a1646c2f776f5a07b0e830fcb8e1b0a80efb41c +Author: Albert Astals Cid <aacid@kde.org> +Date: Wed Jul 6 13:29:00 2005 +0000 + + Add checkFooter to check the document ends with %%EOF + + ChangeLog | 5 +++++ + poppler/PDFDoc.cc | 28 ++++++++++++++++++++++++++++ + poppler/PDFDoc.h | 1 + + 3 files changed, 34 insertions(+), 0 deletions(-) + +commit 377c023d31cf74d8240aa5be9dba8e3838459a8c +Author: Brad Hards <bradh@frogmouth.net> +Date: Wed Jul 6 11:15:16 2005 +0000 + + Add unit tests for the isLinearized() property. + + ChangeLog | 4 ++++ + qt4/tests/Makefile.am | 6 +++++- + qt4/tests/check_linearised.cpp | 23 +++++++++++++++++++++++ + 3 files changed, 32 insertions(+), 1 deletions(-) + +commit 5fa869887a840a585340993718df0841010666cf +Author: Brad Hards <bradh@frogmouth.net> +Date: Wed Jul 6 09:52:30 2005 +0000 + + Remove boolean for unicode table lookup from Font + + ChangeLog | 14 ++++++++++++++ + qt4/src/poppler-document.cc | 2 -- + qt4/src/poppler-qt4.h | 14 +------------- + qt4/tests/poppler-fonts.cpp | 16 +++++++--------- + 4 files changed, 22 insertions(+), 24 deletions(-) + +commit 40469c5883e17e734f3d54872c59e76b95bc0f95 +Author: Brad Hards <bradh@frogmouth.net> +Date: Wed Jul 6 09:00:39 2005 +0000 + + Update to reflect recent changes. + + qt4/tests/.cvsignore | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 6cea437208f913085a6a8c7183b0826a107cefb5 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jul 5 21:15:48 2005 +0000 + + Don't crash with files that have fonts with no name + + ChangeLog | 7 +++++++ + qt4/src/poppler-document.cc | 13 ++++++++++--- + qt4/src/poppler-qt4.h | 2 +- + 3 files changed, 18 insertions(+), 4 deletions(-) + +commit 1323c74479848f5b87a3a13fa26e8b9e096e9f6a +Author: Brad Hards <bradh@frogmouth.net> +Date: Tue Jul 5 12:31:59 2005 +0000 + + Check in a couple more test apps + + qt4/tests/Makefile.am | 10 ++++++- + qt4/tests/check_author.cpp | 25 ++++++++++++++++ + qt4/tests/check_permissions.cpp | 59 + +++++++++++++++++++++++++++++++++++++++ + 3 files changed, 93 insertions(+), 1 deletions(-) + +commit 839a798ec3725427185de5a48c58ac448596b25d +Author: Brad Hards <bradh@frogmouth.net> +Date: Tue Jul 5 12:25:00 2005 +0000 + + Add Qt4 bindings for new user permission properties. + + ChangeLog | 4 +++ + qt4/src/poppler-document.cc | 25 +++++++++++++++++++++ + qt4/src/poppler-qt4.h | 51 + ++++++++++++++++++++++++++++++++++++++---- + 3 files changed, 75 insertions(+), 5 deletions(-) + +commit e10f6990d3339e3a7adeaa50b1754cf7ecf82f87 +Author: Brad Hards <bradh@frogmouth.net> +Date: Tue Jul 5 12:15:04 2005 +0000 + + Add some more user permissions properties - high resolution + printing, document assembly, extraction for accessibility + and form completion. + + ChangeLog | 8 +++++++ + poppler/PDFDoc.h | 9 ++++++++ + poppler/XRef.cc | 55 + ++++++++++++++++++++++++++++++++++++++++++++++++++--- + poppler/XRef.h | 4 +++ + 4 files changed, 72 insertions(+), 4 deletions(-) + +commit 3a8e1ba03cdec6412dd0b79f0cc59a4cd97dd4e7 +Author: Brad Hards <bradh@frogmouth.net> +Date: Mon Jul 4 11:38:22 2005 +0000 + + A couple more little changes. + + ChangeLog | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit a44bd0b45bb89f29ddca5d0e8986a8de50f9db39 +Author: Brad Hards <bradh@frogmouth.net> +Date: Mon Jul 4 11:37:21 2005 +0000 + + Change path to sample file to point to test module + + qt4/tests/check_orientation.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 2a7079087c35651c242d3843c94703a3199e61ca +Author: Brad Hards <bradh@frogmouth.net> +Date: Mon Jul 4 11:36:13 2005 +0000 + + Fix typo causing failure to pick up upside down pages. + + qt4/src/poppler-page.cc | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 529a548044ae721a414c5b8e768c0498b1e6830b +Author: Brad Hards <bradh@frogmouth.net> +Date: Mon Jul 4 08:30:29 2005 +0000 + + Update to reflect recent changes + + ChangeLog | 30 +++++++++++++++++++++++++++++- + qt4/tests/.cvsignore | 2 ++ + 2 files changed, 31 insertions(+), 1 deletions(-) + +commit 08cca4670f8ae65333beacda85834112e76489d1 +Author: Brad Hards <bradh@frogmouth.net> +Date: Mon Jul 4 08:21:27 2005 +0000 + + Add in a simple demo/test application, similar to the pdffonts + application in xpdf. + + qt4/tests/Makefile.am | 9 ++++- + qt4/tests/poppler-fonts.cpp | 76 + +++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 84 insertions(+), 1 deletions(-) + +commit 52af89d8303b50c45d5e4584d19ec8b7d7ebcf9b +Author: Brad Hards <bradh@frogmouth.net> +Date: Mon Jul 4 08:18:52 2005 +0000 + + Update to reflect changes to rendering API. + + qt4/tests/stress-poppler-qt4.cpp | 4 ++-- + qt4/tests/test-poppler-qt4.cpp | 3 ++- + 2 files changed, 4 insertions(+), 3 deletions(-) + +commit d42998d0fc32b1e21a2aeef1311e0baf508ade3f +Author: Brad Hards <bradh@frogmouth.net> +Date: Mon Jul 4 08:16:17 2005 +0000 + + Qt4 update. + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-document.cc complete Qt4 font metadata handling + + * qt4/src/poppler-qt4.h: + * qt4/src/poppler-page.cc: change the render API to make it more + Qt-like. + + qt4/src/poppler-document.cc | 7 +++- + qt4/src/poppler-page.cc | 5 +-- + qt4/src/poppler-qt4.h | 73 + ++++++++++++++++++++++++++++++++++++++++-- + 3 files changed, 77 insertions(+), 8 deletions(-) + +commit 5d194b926d1ed642ed4bbd3304befa073d389cd4 +Author: Brad Hards <bradh@frogmouth.net> +Date: Mon Jul 4 08:10:16 2005 +0000 + + Change FontInfo::type() to return an enumerated value, + rather than a GooString. + + poppler/FontInfo.cc | 16 ++-------------- + poppler/FontInfo.h | 16 +++++++++++++--- + 2 files changed, 15 insertions(+), 17 deletions(-) + +commit 1303020b2e97bc110ccf045cd2811daf59ec72ce +Author: Brad Hards <bradh@frogmouth.net> +Date: Mon Jul 4 07:42:32 2005 +0000 + + Fix up the unit test, now that I have a real sample + file. + + qt4/tests/check_orientation.cpp | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit 96fc0ea3fc6c9c7d933e9e0c02a622b2aeef7617 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Jul 1 04:57:49 2005 +0000 + + 2005-07-01 Kristian Høgsberg <krh@redhat.com> + + * poppler/TextOutputDev.cc: Make selection also work when + dragging + backwards in the text flow. Currently this is a big pile of + if-statements, and there is certainly room for improvement. + + ChangeLog | 6 ++ + poppler/TextOutputDev.cc | 129 + +++++++++++++++++++++++++++++++++++++--------- + 2 files changed, 111 insertions(+), 24 deletions(-) + +commit 06c49c496f28aba608101adcecd8cec34937ac78 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Jun 30 19:44:33 2005 +0000 + + 2005-06-30 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.h: * glib/poppler-page.cc + (poppler_page_copy_to_pixbuf): Fix splash compilation + (patch from + Marco). + (poppler_page_render_to_pixbuf): Drop dest_x and dest_y + coordinates from this function. This functionality can be + achieved using a sub-GdkPixbuf. + + * glib/test-poppler-glib.c (main): Update test case. + + ChangeLog | 11 +++++++++++ + NEWS | 6 ++++++ + glib/poppler-page.cc | 27 ++++++++++----------------- + glib/poppler-page.h | 4 +--- + glib/test-poppler-glib.c | 2 +- + 5 files changed, 29 insertions(+), 21 deletions(-) + +commit b126785aeda6b5576a13fc3f3853b027bd7dd306 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Jun 30 00:36:01 2005 +0000 + + 2005-06-29 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-private.h: Move TextOutputDev.h include + here from + poppler-page.cc + + ChangeLog | 5 +++++ + glib/poppler-page.cc | 1 - + glib/poppler-private.h | 1 + + 3 files changed, 6 insertions(+), 1 deletions(-) + +commit b15a8caf003d7d0631d4f78db5ab54e55a5a000a +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Jun 29 21:24:48 2005 +0000 + + 2005-06-29 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/poppler-private.h: + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDev.h: + * poppler/Page.cc: + * poppler/Page.h: + * poppler/TextOutputDev.cc: + * poppler/TextOutputDev.h: Add support for rendering real + selection (based on text flow). + + ChangeLog | 20 ++- + configure.ac | 4 +- + glib/poppler-page.cc | 224 +++++++++++++++++++------ + glib/poppler-page.h | 65 ++++--- + glib/poppler-private.h | 3 + + poppler/CairoOutputDev.cc | 13 +- + poppler/CairoOutputDev.h | 2 +- + poppler/Page.cc | 59 +++++-- + poppler/Page.h | 12 ++ + poppler/TextOutputDev.cc | 414 + ++++++++++++++++++++++++++++++++++++++++++++- + poppler/TextOutputDev.h | 38 ++++- + 11 files changed, 743 insertions(+), 111 deletions(-) + +commit 3b5e20465e482eb0e75a106697ee94d60aea2fdc +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 28 22:51:29 2005 +0000 + + Forgot assigning type on copy constructor + + poppler/FontInfo.cc | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit e512cd1832a0e6d15149e12e8e67a39d335efc86 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 28 22:49:14 2005 +0000 + + Add FontInfo::getType() + + ChangeLog | 3 +++ + poppler/FontInfo.cc | 4 ++++ + poppler/FontInfo.h | 2 ++ + 3 files changed, 9 insertions(+), 0 deletions(-) + +commit 8aeb5205f2876a9dc36eb1dc1e361bb87adf4e31 +Author: Albert Astals Cid <aacid@kde.org> +Date: Tue Jun 28 22:00:05 2005 +0000 + + use transformation matrix for image rendering in Arthur backend + + ChangeLog | 4 ++++ + poppler/ArthurOutputDev.cc | 12 +++++++----- + 2 files changed, 11 insertions(+), 5 deletions(-) + +commit a221d06fdc7b0688ca0744a1d6ad49d472c7f12c +Author: Brad Hards <bradh@frogmouth.net> +Date: Tue Jun 28 10:59:14 2005 +0000 + + Reduce cvs up noise + + .cvsignore | 1 + + ChangeLog | 7 +++++++ + qt4/.cvsignore | 3 +++ + qt4/src/.cvsignore | 7 +++++++ + qt4/tests/.cvsignore | 8 ++++++++ + 5 files changed, 26 insertions(+), 0 deletions(-) + +commit ea58a20bbcf450a1ecb8fe00e8162cfdf76105f1 +Author: Brad Hards <bradh@frogmouth.net> +Date: Tue Jun 28 10:00:09 2005 +0000 + + Initial import of Qt4 bindings, and for a Qt4 "Arthur" (QPainter) + backend renderer. + + The bindings are currently unstable - you can expect substantial + change + in both source and binary interfaces. + + The Arthur renderer currently does a reasonable job of rendering path + and fill, but the image rendering doesn't work (for reasons that + aren't + clear to me) and text rendering doesn't use the right glyphs - it just + draws with the current font. There is a lot of work to do on this + too. Help is, of coure, welcome. + + ChangeLog | 12 + + Makefile.am | 10 +- + configure.ac | 94 +++- + poppler-qt4.pc.in | 12 + + poppler/ArthurOutputDev.cc | 604 +++++++++++++++++++ + poppler/ArthurOutputDev.h | 133 +++++ + poppler/Makefile.am | 20 + + qt4/Makefile.am | 1 + + qt4/src/Doxyfile | 1212 + ++++++++++++++++++++++++++++++++++++++ + qt4/src/Makefile.am | 22 + + qt4/src/poppler-document.cc | 309 ++++++++++ + qt4/src/poppler-page.cc | 170 ++++++ + qt4/src/poppler-private.h | 36 ++ + qt4/src/poppler-qt4.h | 286 +++++++++ + qt4/tests/Makefile.am | 34 ++ + qt4/tests/check_orientation.cpp | 40 ++ + qt4/tests/stress-poppler-qt4.cpp | 70 +++ + qt4/tests/test-poppler-qt4.cpp | 121 ++++ + 18 files changed, 3183 insertions(+), 3 deletions(-) + +commit 61e9bc76eb2fcb0b4b899ebfad1cc71c59fc8274 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Jun 28 03:44:12 2005 +0000 + + 2005-06-27 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDev.h: Change CairoOutputDev to render + to a + given surface and let the user create that surface. + + * glib/poppler-document.cc: + * glib/poppler-page.cc: + * glib/poppler-private.h: Create the cairo image surface here + instead and pass it to the CairoOutputDev for rendering. + + * poppler/CairoOutputDevImage.cc: + * poppler/CairoOutputDevImage.h: + * poppler/CairoOutputDevX.cc: + * poppler/CairoOutputDevX.h: + * poppler/Makefile.am: Remove specialized cairo output + devices. + + ChangeLog | 17 +++ + glib/poppler-document.cc | 2 +- + glib/poppler-page.cc | 21 +++- + glib/poppler-private.h | 4 +- + poppler/CairoOutputDev.cc | 24 ++--- + poppler/CairoOutputDev.h | 8 +- + poppler/CairoOutputDevImage.cc | 80 --------------- + poppler/CairoOutputDevImage.h | 44 -------- + poppler/CairoOutputDevX.cc | 216 + ---------------------------------------- + poppler/CairoOutputDevX.h | 117 ---------------------- + poppler/Makefile.am | 8 +- + 11 files changed, 54 insertions(+), 487 deletions(-) + +commit 8079dce3f0ed91dd531465f45c6d3c568ab4ecd1 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Jun 27 01:04:32 2005 +0000 + + 2005-06-26 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDev.h: Switch back to using drawChar() + for + text, but utilize the beginString() and endString() hooks + so we + can use cairo_show_glyphs() efficiently. + + ChangeLog | 7 +++ + poppler/CairoOutputDev.cc | 107 + +++++++++++++-------------------------------- + poppler/CairoOutputDev.h | 12 ++++- + 3 files changed, 48 insertions(+), 78 deletions(-) + +commit 1aa48d6b7907a1d53830f0cf28085041f685368d +Author: Albert Astals Cid <aacid@kde.org> +Date: Sun Jun 26 23:35:26 2005 +0000 + + Add PageTransition class and PageTransition* Page::getTransition() + const; to the qt frontend. Code almost 100% copied from xpdf code + inside kpdf + + ChangeLog | 5 ++ + qt/poppler-page.cc | 121 + ++++++++++++++++++++++++++++++++++++++++++++++++++++ + qt/poppler-qt.h | 78 +++++++++++++++++++++++++++++++++ + 3 files changed, 204 insertions(+), 0 deletions(-) + +commit 9d4327eecd94299a3629b0814e84f981a4be1dfb +Author: Martin Kretzschmar <martink@gnome.org> +Date: Sun Jun 26 15:54:16 2005 +0000 + + add poppler-enums.[ch]. + + ChangeLog | 2 ++ + glib/.cvsignore | 8 +++++--- + 2 files changed, 7 insertions(+), 3 deletions(-) + +commit 768186514b9fc175cf330344408bb89ab4c909f3 +Author: Martin Kretzschmar <martink@gnome.org> +Date: Sun Jun 26 11:40:35 2005 +0000 + + require glib 2.4+ for g_value_take_string and G_DEFINE_TYPE. + + ChangeLog | 5 +++++ + configure.ac | 4 ++-- + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit 5d40e34a367212c39af06332879f26824d6d62d2 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Jun 26 00:01:39 2005 +0000 + + 2005-06-25 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/Error.h: Maybe fix build on Solaris. + + ChangeLog | 4 ++++ + poppler/Error.h | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit c2780a3b3f4615bb28bfe394d649b388db4ccf4d +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Jun 20 21:33:09 2005 +0000 + + 2005-06-20 Kristian Høgsberg <krh@redhat.com> + + * NEWS: + * configure.ac: Bump version to 0.3.3 and sum up changes since + last release. + + * glib/poppler-page.cc (poppler_page_find_text): Initialize + xMin + and yMin to avoid referencing unintialized memory (#3582). + + ChangeLog | 9 +++++++++ + NEWS | 10 ++++++++++ + configure.ac | 2 +- + glib/poppler-page.cc | 2 ++ + 4 files changed, 22 insertions(+), 1 deletions(-) + +commit 9023891f314ac37811b5c973be2e36b6de353cf2 +Author: Martin Kretzschmar <martink@gnome.org> +Date: Mon Jun 20 18:45:41 2005 +0000 + + (info_dict_get_string): convert from PDFDocEncoding to UTF-8. + + ChangeLog | 5 +++++ + glib/poppler-document.cc | 16 +++++++++++++++- + 2 files changed, 20 insertions(+), 1 deletions(-) + +commit bbf2fe757f0fd08d0e90e3810709ab7152c779c0 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Jun 20 17:58:38 2005 +0000 + + 2005-06-20 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/poppler.h: Clean up glib rotation implementation and + add a + getter for rotation. Patch from Marco. + + ChangeLog | 7 +++++ + glib/poppler-page.cc | 69 + ++++++++++++++++++++++++++++--------------------- + glib/poppler-page.h | 57 +++++++++++++++++++++-------------------- + glib/poppler.h | 1 - + 4 files changed, 75 insertions(+), 59 deletions(-) + +commit c264d8a9f84587cd0f2ef67683a01fc8dd9395af +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Jun 20 17:38:27 2005 +0000 + + 2005-06-20 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-document.cc: + * poppler/FontInfo.cc: Fixes from Marco to handle fonts + without + name (typically type 3 fonts) and fix an iterator bug. + + ChangeLog | 6 ++++++ + glib/poppler-document.cc | 8 +++++++- + poppler/FontInfo.cc | 13 ++++++++++--- + 3 files changed, 23 insertions(+), 4 deletions(-) + +commit 4746e63a793a2881e904ac54d58b7d3e48b07dcf +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Jun 20 17:22:35 2005 +0000 + + 2005-06-20 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc (poppler_page_get_link_mapping): Adjust + link coordinates so they're relative to bounding box + lower left + corner (#3396). + + ChangeLog | 6 ++++++ + glib/poppler-page.cc | 6 ++++++ + 2 files changed, 12 insertions(+), 0 deletions(-) + +commit bada3d03583ef6ed34d2aa743de8fd9ca4a5c748 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Jun 17 05:30:56 2005 +0000 + + 2005-06-17 Kristian Høgsberg <krh@redhat.com> + + * autogen.sh: Patch from Emil Soleyman-Zomalan to enable + checks + for automake >= 1.7 (#3554). + + ChangeLog | 5 +++ + autogen.sh | 104 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 109 insertions(+), 0 deletions(-) + +commit 25db42831ddde500697126352458e092a9b0ab9b +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Jun 15 15:02:46 2005 +0000 + + 2005-06-15 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-document.cc: + * glib/poppler-document.h: Patch from Marco to get initial + status + (open or closed) for bookmark subtrees. + ----------------------------------------------------------- + + ChangeLog | 6 ++++++ + glib/poppler-document.cc | 9 +++++++++ + glib/poppler-document.h | 1 + + 3 files changed, 16 insertions(+), 0 deletions(-) + +commit e54e306ac5d603001fefda3b9ecd81821e4bd09e +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Jun 13 17:18:32 2005 +0000 + + Forgot to add new files. + + poppler/FontInfo.cc | 197 + +++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/FontInfo.h | 51 +++++++++++++ + 2 files changed, 248 insertions(+), 0 deletions(-) + +commit 23e8ed5cbf4d7d999a8a1dcf714aaddaf339ceff +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Jun 13 16:09:33 2005 +0000 + + 2005-06-13 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-document.cc: + * glib/poppler-document.h: + * glib/poppler-private.h: + * glib/poppler.h: + * glib/test-poppler-glib.c: + * poppler/Makefile.am: Patch from Marco to extract font + info from + document. + + ChangeLog | 10 ++++ + glib/poppler-document.cc | 131 + ++++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-document.h | 13 +++++ + glib/poppler-private.h | 7 +++ + glib/poppler.h | 2 + + glib/test-poppler-glib.c | 14 +++++ + poppler/Makefile.am | 2 + + 7 files changed, 179 insertions(+), 0 deletions(-) + +commit fbb86d2983a28ad2c46b8c5d475a2df1f0f0e4b9 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Jun 8 14:35:46 2005 +0000 + + 2005-06-08 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoFontEngine.cc: Remember to delete tmpFileName. + Patch from Nikolai Weibull (#3491). + + ChangeLog | 5 +++++ + poppler/CairoFontEngine.cc | 37 +++++++++++++++++++------------------ + 2 files changed, 24 insertions(+), 18 deletions(-) + +commit 699b03025c1d38a42a49e39017097c5d0315fd6f +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Jun 7 20:25:48 2005 +0000 + + 2005-06-07 Kristian Høgsberg <krh@redhat.com> + + * qt/test-poppler-qt.cpp: Add stdlib.h include for exit(). + + ChangeLog | 4 ++++ + qt/test-poppler-qt.cpp | 1 + + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit 0017b1a72c58e2d016d22451079c466abdfff15c +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Jun 2 19:14:45 2005 +0000 + + 2005-06-02 Kristian Høgsberg <krh@redhat.com> + + * poppler/TextOutputDev.h: + * qt/poppler-qt.h: Patch from Stanislav Brabec + <sbrabec@suse.cz> + to fix gcc 4.0.1 warnings on undeclared friend classes. + + * test/gtk-splash-test.cc: Fix from Martin Kretzschmar + <martink@gnome.org> to compile with OPI enabled (#2911). + + ChangeLog | 9 +++++++++ + poppler/TextOutputDev.h | 3 +++ + qt/poppler-qt.h | 2 ++ + test/gtk-splash-test.cc | 2 +- + 4 files changed, 15 insertions(+), 1 deletions(-) + +commit 47c3b4ec2c7691e44f5100b1f5956df0005467c8 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Jun 2 18:49:55 2005 +0000 + + 2005-06-02 Kristian Høgsberg <krh@redhat.com> + + Patch from Stanislav Brabec <sbrabec@suse.cz>: + + * configure.ac: + * poppler-cairo.pc.in: + * poppler-glib.pc.in: + * poppler-qt.pc.in: + * poppler-splash.pc.in: Misc fixes to pkg-config files. + + ChangeLog | 10 ++++++++++ + configure.ac | 6 ++++-- + poppler-cairo.pc.in | 3 +-- + poppler-glib.pc.in | 4 ++-- + poppler-qt.pc.in | 1 + + poppler-splash.pc.in | 3 +-- + 6 files changed, 19 insertions(+), 8 deletions(-) + +commit 9f0da96dd005defd5d82dd05b627ff1925430215 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Thu Jun 2 00:35:44 2005 +0000 + + 2005-06-01 Jeff Muizelaar <jeff@infidigm.net> + + * poppler/Error.cc: + * poppler/Error.h: Make error handling function setable through + setErrorFunction. + + Based on a patch by Albert Astals Cid. + + ChangeLog | 8 ++++++++ + poppler/Error.cc | 29 ++++++++++++++++++++--------- + poppler/Error.h | 2 ++ + 3 files changed, 30 insertions(+), 9 deletions(-) + +commit f688aa11d066f1c6f4115cbdb604ac61fb8b5146 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sun May 29 14:59:34 2005 +0000 + + 2005-05-29 Kristian Høgsberg <krh@redhat.com> + + * glib/*: Add more meta data properties to poppler document. + Patch by Emil Soleyman-Zomalan (#3359). + + ChangeLog | 5 ++ + glib/poppler-document.cc | 155 + +++++++++++++++++++++++++++++++++++++++++++++- + glib/poppler.gidl | 5 ++ + glib/test-poppler-glib.c | 46 ++++++++++---- + 4 files changed, 194 insertions(+), 17 deletions(-) + +commit 9e6eeec574d48d2341ee620e16360d3b21c40103 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu May 26 13:03:35 2005 +0000 + + 2005-05-26 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoOutputDev.cc (clip): Remove snapToGrid + so clip() + prototype matches what Gfx actually calls (fixes clipping). + + * poppler/CairoOutputDev.cc: Update fill color, stroke + color, fill + opacity and stroke opacity from GfxState on restore, + since they + aren't handled by cairo_restore() (#3362). + + * poppler/CairoOutputDev.cc: Comment out tolerance setting + until + we figure out how cairo settings relate to pdf settings. + + * poppler/CairoOutputDev.cc: Support fill and stroke opacity. + + ChangeLog | 12 ++++++++++++ + poppler/CairoOutputDev.cc | 41 + ++++++++++++++++++++++++++++++----------- + poppler/CairoOutputDev.h | 6 +++++- + 3 files changed, 47 insertions(+), 12 deletions(-) + +commit 89a633edd860e3c6ded1e468edf6f28cfcb43d0e +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu May 26 12:52:38 2005 +0000 + + 2005-05-26 Kristian Høgsberg <krh@redhat.com> + + * poppler/GfxState.cc: + * poppler/GfxState.h: Add GfxColorSpace::getRGBLine here and + implement in subclasses. + + * poppler/CairoOutputDev.cc (drawImage): Use getRGBLine here. + + ChangeLog | 8 ++ + poppler/CairoOutputDev.cc | 66 +++++++++---------- + poppler/GfxState.cc | 160 + ++++++++++++++++++++++++++++++++++++++++++++- + poppler/GfxState.h | 14 ++++ + 4 files changed, 212 insertions(+), 36 deletions(-) + +commit 4d8224819da7a85e4d99f96c9bbb047ece58130a +Author: Jonathan Blandford <jrb@redhat.com> +Date: Mon May 23 04:23:53 2005 +0000 + + Mon May 23 00:22:41 2005 Jonathan Blandford <jrb@redhat.com> + + * glib/poppler-document.h: Add a permissions flag to the glib + bindings. + + ChangeLog | 5 +++++ + glib/poppler-document.cc | 24 ++++++++++++++++++++++++ + glib/poppler-document.h | 16 +++++++++------- + 3 files changed, 38 insertions(+), 7 deletions(-) + +commit 1f677e2f60634a7d0c5e0e0d2125ab15c2722979 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sat May 21 21:33:06 2005 +0000 + + 2005-05-21 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-document.cc (poppler_ps_file_new): Fix + off-by-one + error spotted by Jürg Billeter. + ----------------------------------------------------- + + ChangeLog | 5 +++++ + glib/poppler-document.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 0bbf2f08173866cde9b097eeeb1f4218a396588d +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri May 20 20:48:52 2005 +0000 + + 2005-05-20 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoOutputDev.cc: Account for different row + vs. column + vector conventions between cairo and poppler. + + ChangeLog | 3 +++ + poppler/CairoOutputDev.cc | 18 +++++++++--------- + 2 files changed, 12 insertions(+), 9 deletions(-) + +commit da44ec7e8de58e55e55b1f780bc3f4bc8307874f +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri May 20 18:38:10 2005 +0000 + + 2005-05-20 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoFontEngine.cc: Only get the code to gid map if + we're using freetype 2.1.7 or older (#3340). + + ChangeLog | 5 +++++ + poppler/CairoFontEngine.cc | 13 ++++++++----- + 2 files changed, 13 insertions(+), 5 deletions(-) + +commit 6fe29cf0a7e54b8d294471a0f94eb9e989ad1d7f +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu May 19 05:18:04 2005 +0000 + + Add bugzilla number. + + ChangeLog | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 42de1348622cf86a87bc22941bd48bffa943dac9 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu May 19 05:16:22 2005 +0000 + + 2005-05-19 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoFontEngine.cc: Only cast to Gfx8BitFont when we + know for sure we have a truetype font. + GfxCIDFont::getCIDToGIDLen() can return 0 in which case + codeToGID + will be NULL, and we end up casting it to a Gfx8BitFont. + + ChangeLog | 7 +++++++ + poppler/CairoFontEngine.cc | 2 +- + 2 files changed, 8 insertions(+), 1 deletions(-) + +commit afc05387c94a76ff0ed69b3f5d9a69ddd1448e83 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed May 18 17:39:59 2005 +0000 + + 2005-05-18 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: Require cairo 0.5.0, bump release to 0.3.2. + + * NEWS: Sum up latest changes. + + * glib/poppler-document.cc (poppler_ps_file_new): Take a page + range here instead of just number of pages. + + ChangeLog | 9 +++++++++ + NEWS | 7 +++++++ + configure.ac | 6 +++--- + glib/poppler-document.cc | 15 ++++++++++----- + glib/poppler-document.h | 1 + + 5 files changed, 30 insertions(+), 8 deletions(-) + +commit 420134a194af9161282ccfe329d17adef8d325f2 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue May 17 23:38:27 2005 +0000 + + 2005-05-17 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoOutputDevX.cc: + * test/gtk-cairo-test.cc: Chase the cairo xlib constructor + again. + + ChangeLog | 5 +++++ + poppler/CairoOutputDevX.cc | 5 +++-- + test/gtk-cairo-test.cc | 5 +++-- + 3 files changed, 11 insertions(+), 4 deletions(-) + +commit 6fd62953a910dcfb4abd9de5ea18285b8fa5d202 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon May 16 23:16:15 2005 +0000 + + Add bug number and attribution to ChangeLog entry. + + ChangeLog | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 6d7f624c13e8a9a8251ac97388cd80e418c70250 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon May 16 21:56:31 2005 +0000 + + 2005-05-16 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: Check for glib-mkenums. + + * glib/Makefile.am (poppler-enums.h): Generate glib enums at + compile time. + + * glib/poppler-enums.c: + * glib/poppler-enums.h: Removed. + + ChangeLog | 8 ++ + configure.ac | 3 + + glib/.cvsignore | 1 + + glib/Makefile.am | 67 ++++++++++++------ + glib/poppler-enums.c | 189 + -------------------------------------------------- + glib/poppler-enums.h | 49 ------------- + 6 files changed, 57 insertions(+), 260 deletions(-) + +commit 2801b54a944fc9e1072c5dcb9f1153a0c9f42de5 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon May 16 20:27:51 2005 +0000 + + 2005-05-16 Kristian Høgsberg <krh@redhat.com> + + * test/gtk-cairo-test.cc: Update this test case also. + + ChangeLog | 2 ++ + test/gtk-cairo-test.cc | 5 +++-- + 2 files changed, 5 insertions(+), 2 deletions(-) + +commit 8753ae8ba20fcceaef3ef1dda89129f0456fccf6 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon May 16 19:06:00 2005 +0000 + + 2005-05-16 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoOutputDevX.cc: Track changes to cairo Xlib + surface + constructors. + + * poppler/CairoFontEngine.cc (cairo_font_face_destroy): + Make this + static. + + ChangeLog | 8 ++++++++ + poppler/CairoFontEngine.cc | 2 +- + poppler/CairoOutputDevX.cc | 5 +++-- + 3 files changed, 12 insertions(+), 3 deletions(-) + +commit 2e17106ef4711097104a561d5be49980f8b2f5ab +Author: Jonathan Blandford <jrb@redhat.com> +Date: Fri May 13 03:47:36 2005 +0000 + + whoops! commit the right file. + + glib/poppler.gidl | 212 + +++++++++++++++++++++++++++++++++++++++++++++++++++++ + glib/test.gidl | 23 ------ + 2 files changed, 212 insertions(+), 23 deletions(-) + +commit 19b62e1c8ea8ce042ac089defe94f756dcaf194e +Author: Jonathan Blandford <jrb@redhat.com> +Date: Fri May 13 03:25:32 2005 +0000 + + Thu May 12 23:10:45 2005 Jonathan Blandford <jrb@redhat.com> + + * glib/poppler.gidl: add metadata file. + + ChangeLog | 4 ++++ + glib/test.gidl | 23 +++++++++++++++++++++++ + 2 files changed, 27 insertions(+), 0 deletions(-) + +commit bef5a548f3b21e7220079155e9b5054fb0c6c3c7 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu May 12 21:26:25 2005 +0000 + + 2005-05-12 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoOutputDev.cc: + * poppler/CairoOutputDevX.cc: + * poppler/CairoOutputDevImage.cc: + * test/gtk-cairo-test.cc: Update to latest cairo changes, + patch + from Jens Taprogge (#3281) + + ChangeLog | 8 ++++++++ + poppler/CairoOutputDev.cc | 22 +++++++++++----------- + poppler/CairoOutputDevImage.cc | 11 ++++++----- + poppler/CairoOutputDevX.cc | 7 +++++-- + test/gtk-cairo-test.cc | 8 +++++--- + 5 files changed, 35 insertions(+), 21 deletions(-) + +commit c10ea2dd9bffaf9af023612ef196bab2b204d3e1 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed May 11 20:01:43 2005 +0000 + + 2005-05-11 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler.cc (poppler_get_backend, poppler_get_version): + Add + these functions so it's easy to tell if poppler is using + cairo or + splash and what version. + + * glib/test-poppler-glib.c (main): Print out version and + backend. + + ChangeLog | 8 ++++++++ + glib/poppler-enums.c | 26 ++++++++++++++++++++++++++ + glib/poppler-enums.h | 15 +++++++++++++++ + glib/poppler.cc | 21 +++++++++++++++++++++ + glib/poppler.h | 11 +++++++++++ + glib/test-poppler-glib.c | 9 ++++++++- + 6 files changed, 89 insertions(+), 1 deletions(-) + +commit 7d189e33cfa68e722561e9398ad85a77b538ab14 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri May 6 16:38:57 2005 +0000 + + 2005-05-06 Kristian Høgsberg <krh@redhat.com> + + * glib/Makefile.am (libpoppler_glib_la_LIBADD): Link + poppler-glib + against poppler. + + * qt/Makefile.am (libpoppler_qt_la_LIBADD): Ditto for qt. + + * poppler-glib.pc (Libs): Drop -lpoppler from link. + + * poppler-qt.pc (Libs): Ditto for qt. + + * configure.ac: Test for both libqt-mt.la and libqt-mt.so + in that + order. + + ChangeLog | 14 ++++++++++++++ + configure.ac | 8 +++++++- + glib/Makefile.am | 1 + + poppler-glib.pc.in | 2 +- + poppler-qt.pc.in | 2 +- + qt/Makefile.am | 1 + + qt/test-poppler-qt.cpp | 1 + + 7 files changed, 26 insertions(+), 3 deletions(-) + +commit c937e63f17a096b94a554103476ecb9ab1b71b90 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed May 4 20:08:41 2005 +0000 + + 2005-05-04 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoOutputDev.cc (CairoOutputDev::drawImageMask, + CairoOutputDev::drawImage): Track cairo cvs API changes; use + cairo_mask() and cairo_paint() for drawing image masks + and images. + + ChangeLog | 6 +++ + poppler/CairoOutputDev.cc | 98 + +++++++++++++++++++++++--------------------- + 2 files changed, 57 insertions(+), 47 deletions(-) + +commit c142773ad30b409d8169a53921e731305de46e50 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed May 4 19:28:07 2005 +0000 + + 2005-05-04 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoOutputDev.cc: Fix matrix convention confusion. + + ChangeLog | 4 ++++ + poppler/CairoOutputDev.cc | 4 ++-- + 2 files changed, 6 insertions(+), 2 deletions(-) + +commit 28760927d724231d0137ca7ecc66c6c2250dff0d +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed May 4 19:11:11 2005 +0000 + + 2005-05-04 Kristian Høgsberg <krh@redhat.com> + + Patches from Albert Astals Cid: + + * qt/poppler-page.cc (getText): Use QString::fromUtf8() + instead of + implicit latin1 cast constructor. + + * qt/test-poppler-qt.cpp (main): Use a QLabel for showing text + instead of qDebug. + + ChangeLog | 10 ++++++++++ + qt/poppler-page.cc | 5 ++--- + qt/test-poppler-qt.cpp | 6 +++++- + 3 files changed, 17 insertions(+), 4 deletions(-) + +commit fd36522375bcf436639b8731acb3ad22c03c03f4 +Author: Jonathan Blandford <jrb@redhat.com> +Date: Wed May 4 06:32:38 2005 +0000 + + Wed May 4 02:31:05 2005 Jonathan Blandford <jrb@redhat.com> + + * glib/poppler-document.cc: + * glib/poppler-document.h: + * glib/poppler-enums.c: (poppler_permissions_get_type): + * glib/poppler-enums.h: + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/poppler.h: + + Register a bunch of boxed types to test introspection, and for + LBs. Also, remove unused 'popper_document_save()' (-: + + ChangeLog | 13 +++++++ + glib/poppler-document.cc | 48 +++++++++++++++----------- + glib/poppler-document.h | 18 +++++++++- + glib/poppler-enums.c | 19 ++++++++++ + glib/poppler-enums.h | 2 + + glib/poppler-page.cc | 83 + ++++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-page.h | 36 ++++++++++++++------ + glib/poppler.h | 12 ++++--- + 8 files changed, 193 insertions(+), 38 deletions(-) + +commit 132647f8311c07b1f95ee4fca185e9774aae4913 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon May 2 05:39:11 2005 +0000 + + 2005-05-01 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoFontEngine.cc: + * poppler/CairoFontEngine.h: + * poppler/CairoOutputDev.cc: Back out workaround for cairo + 0.4.0 + font API and port to new cairo head. + + ChangeLog | 7 ++++ + configure.ac | 4 +- + poppler/CairoFontEngine.cc | 67 + ++++++++++++++++------------------------ + poppler/CairoFontEngine.h | 12 +++---- + poppler/CairoOutputDev.cc | 39 ++++++++++++++--------- + poppler/CairoOutputDevImage.cc | 2 +- + 6 files changed, 66 insertions(+), 65 deletions(-) + +commit 595c18c038f8dcef73fe58612fc8b93f891e65a1 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Mon May 2 00:44:26 2005 +0000 + + 2005-05-01 Jeff Muizelaar <jeff@infidigm.net> + + * splash/SplashFTFont.cc (SplashFTFont::getGlyphPath): + Use FT_LOAD_NO_BITMAP to make sure we get outlines loaded instead + of bitmaps for use in FT_Outline_Decompose. + + Patch from Albert Astals Cid. + + ChangeLog | 8 ++++++++ + splash/SplashFTFont.cc | 2 +- + 2 files changed, 9 insertions(+), 1 deletions(-) + +commit 49d89ca0ed3986bec7468f6c0ed295e84ba67239 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun May 1 21:54:55 2005 +0000 + + 2005-05-01 Jeff Muizelaar <jeff@infidigm.net> + + * goo/gmem.c: (gmalloc), (grealloc), (gfree): + * goo/gmem.h: make memory functions use size_t instead of int. + + Patch from Takashi Iwai through Albert Astals Cid. + + ChangeLog | 7 +++++++ + goo/gmem.c | 10 +++++----- + goo/gmem.h | 4 ++-- + 3 files changed, 14 insertions(+), 7 deletions(-) + +commit 14d618bece894e4c6bed0f179a8fda4db5a67c9d +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Apr 30 19:53:57 2005 +0000 + + 2005-04-30 Jeff Muizelaar <jeff@infidigm.net> + + * qt/poppler-document.cc (Document::unlock) : + * qt/poppler-qt.h (Document::unlock): + Add const to the password argument. + + Patch from Albert Astals Cid. + + ChangeLog | 8 ++++++++ + qt/poppler-document.cc | 2 +- + qt/poppler-qt.h | 2 +- + 3 files changed, 10 insertions(+), 2 deletions(-) + +commit 1e66da32964cc76c6ed3773574f422b4608cb0e1 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Apr 30 17:31:47 2005 +0000 + + 2005-04-30 Jeff Muizelaar <jeff@infidigm.net> + + * fofi/FoFiType1.cc (FoFiType1::parse): + Don't assume Encoding array of Type1 fonts end in "foo def". + http://partners.adobe.com/public/developer/en/font/T1_SPEC.PDF + says + "This sequence of assignments must be followed by an instance + of the + token def or readonly; such a token may not occur within the + sequence + of assignments." so it must end with "readonly" "def" "readonly + def" + (That is what most fonts are using and this is why it was not + crashing) + + Patch from Albert Astals Cid. + + ChangeLog | 13 +++++++++++++ + fofi/FoFiType1.cc | 14 +++++++++++--- + 2 files changed, 24 insertions(+), 3 deletions(-) + +commit 0b532db77ef41937dd5be30d15c96557d81eceb2 +Author: Jonathan Blandford <jrb@redhat.com> +Date: Fri Apr 29 19:37:07 2005 +0000 + + Fri Apr 29 14:54:44 2005 Jonathan Blandford <jrb@redhat.com> + + * goo/GooTimer.h: New class to do simple timing checks. + + * glib/poppler-document.c: Patch from Martin Kretzschmar + to really + set the PDF version correct. Third time's the charm. + + ChangeLog | 7 +++++ + glib/poppler-document.cc | 4 ++- + goo/GooTimer.cc | 63 + ++++++++++++++++++++++++++++++++++++++++++++++ + goo/GooTimer.h | 40 +++++++++++++++++++++++++++++ + goo/Makefile.am | 2 + + 5 files changed, 115 insertions(+), 1 deletions(-) + +commit 38948ea6f9ef76dae9b8a7156fe1ef32a0457380 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Apr 29 03:57:16 2005 +0000 + + 2005-04-29 Kristian Høgsberg <krh@bitplanet.net> + + * configure.ac: Bump release to 0.3.1. + + * NEWS: Write up news for 0.3.1 release. + + ChangeLog | 6 ++++++ + NEWS | 6 ++++++ + configure.ac | 2 +- + 3 files changed, 13 insertions(+), 1 deletions(-) + +commit af65146c92682a3af06e9d3147426445c78309de +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Apr 28 23:03:06 2005 +0000 + + 2005-04-28 Kristian Høgsberg <krh@redhat.com> + + Patch from Martin Kretzschmar: + + * poppler/GlobalParams.cc: use UTF-8 as the default text + encoding. + Fixes Bug 2934. + + ChangeLog | 7 +++++++ + poppler/GlobalParams.cc | 2 +- + 2 files changed, 8 insertions(+), 1 deletions(-) + +commit c2db3e1b297a9dc0accd0d8a1366970d45705c8f +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Apr 27 20:56:18 2005 +0000 + + 2005-04-27 Jeff Muizelaar <jeff@infidigm.net> + + * configure.ac: + * poppler/FlateStream.cc: + * poppler/FlateStream.h: + * poppler/Makefile.am: + * poppler/Stream.cc: + * poppler/Stream.h: Add a reimplementation of FlateStream using + zlib. + + ChangeLog | 10 ++++ + configure.ac | 29 +++++++++++++ + poppler/FlateStream.cc | 107 + ++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/FlateStream.h | 68 ++++++++++++++++++++++++++++++ + poppler/Makefile.am | 17 +++++++- + poppler/Stream.cc | 6 +++ + poppler/Stream.h | 2 + + 7 files changed, 237 insertions(+), 2 deletions(-) + +commit bc0afe524c2b87af191d83fc9e9bcdc8a6ce4042 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Apr 27 18:53:20 2005 +0000 + + 2005-04-27 Kristian Høgsberg <krh@redhat.com> + + * poppler/Catalog.cc (NameTree::lookup): Fix bsearch return + value + NULL check. Found by Albert Astals Cid. + + ChangeLog | 5 +++++ + poppler/Catalog.cc | 8 ++++---- + 2 files changed, 9 insertions(+), 4 deletions(-) + +commit 3c37dc350d54e5a1035aecfba5bfa394f931cf51 +Author: Jonathan Blandford <jrb@redhat.com> +Date: Tue Apr 26 17:17:05 2005 +0000 + + Tue Apr 26 13:13:42 2005 Jonathan Blandford <jrb@redhat.com> + + * glib/test-poppler-glib.c (main): add a quick dump-to-text + test. + + ChangeLog | 4 ++++ + glib/test-poppler-glib.c | 20 ++++++++++++++++++++ + 2 files changed, 24 insertions(+), 0 deletions(-) + +commit 44b800d520f90ffd143255d2c23835ea357c195b +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Apr 25 18:04:32 2005 +0000 + + Actually commit the qt/Makefile.am change advertised in the ChangeLog. + + qt/Makefile.am | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +commit 437bec03dd2ab3cdf6215f9ad443b7f21ce84e18 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sun Apr 24 19:56:17 2005 +0000 + + 2005-04-24 Kristian Høgsberg <krh@redhat.com> + + * qt/Makefile.am (libpoppler_qt_la_SOURCES): Add + poppler-private.h + to SOURCES. + + ChangeLog | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 9b2b1244ed5f30a99120aaee49c72f7cb6a4f556 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sat Apr 23 20:16:02 2005 +0000 + + 2005-04-23 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoFontEngine.cc: Use the right fileName for + loading + CID fonts (#3114). + + ChangeLog | 5 +++++ + poppler/CairoFontEngine.cc | 11 +++++++++-- + 2 files changed, 14 insertions(+), 2 deletions(-) + +commit e4516d728a4d1bc85831d5d00b6d6b8d49c79308 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sat Apr 23 00:09:05 2005 +0000 + + 2005-04-22 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: Actually commit version number bump. + + ChangeLog | 4 ++++ + NEWS | 2 +- + configure.ac | 2 +- + 3 files changed, 6 insertions(+), 2 deletions(-) + +commit c20448cb26fa1c309d726f272ddf1227f5a0e6ea +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Apr 22 17:29:49 2005 +0000 + + 2005-04-22 Martin Kretzschmar <martink@gnome.org> + + * poppler/CairoFontEngine.cc: declare matrix variable + before the + first goto. Fixes build with gcc 3.3. + + ChangeLog | 5 +++++ + poppler/CairoFontEngine.cc | 3 ++- + 2 files changed, 7 insertions(+), 1 deletions(-) + +commit 42ecccf9b454893797e3d62f0f1c0a3276689e51 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Apr 22 04:09:23 2005 +0000 + + Fri Apr 22 00:01:40 2005 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoFontEngine.cc: Hack around semi-broken + cairo-0.4.0 + font API to fix the problem where some glyphs would show up + at the + wrong sizes. We now create an FT_Face for each size and font + combination we encounter, since an FT_Face can't be shared + between + several cairo_font_t. + + ChangeLog | 8 ++++ + poppler/CairoFontEngine.cc | 79 + +++++++++++++++++++------------------------ + poppler/CairoFontEngine.h | 23 +++++-------- + poppler/CairoOutputDev.cc | 18 +++++----- + 4 files changed, 61 insertions(+), 67 deletions(-) + +commit 7a703616d9497eba4d7d318da9918dae9cbe8f12 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Apr 21 19:50:45 2005 +0000 + + Thu Apr 21 15:43:52 2005 Kristian Høgsberg <krh@redhat.com> + + * poppler/Outline.cc: + * poppler/Outline.h: Implement the documented behaviour for + Outline::getItems() and OutlineItem::getKids() and make + documentation more precise (Patch from Marco). + + ChangeLog | 7 +++++++ + poppler/Outline.cc | 6 ++++++ + poppler/Outline.h | 7 ++++--- + 3 files changed, 17 insertions(+), 3 deletions(-) + +commit 5c89902c5ee2cf13536225c141768b29505815ce +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Apr 21 06:35:33 2005 +0000 + + Thu Apr 21 02:25:20 2005 Kristian Høgsberg <krh@redhat.com> + + * poppler/CairoFontEngine.cc (CairoFont::getFont): Cache + cairo_font_t's for a given CairoFont. With this patch + cairo will + recognize glyphs coming from the same font as such and + the glyph + cache will actually work. + + * glib/poppler-document.cc (poppler_document_new_from_file): + Add + output device (cairo or splash) to PopplerDocument and + initialize + it in the constructor. + + * glib/poppler-page.cc (splash_render_to_pixbuf, + cairo_render_to_pixbuf): Use output device from associated + poppler + document instead of creating a new one. + + * poppler-glib.pc.in (Requires): Add Requires: field. + + * poppler/Page.cc (loadThumb): Remove unecessary and buggy + call to + Stream::addFilters(), reported by Ryan Lortie (#3046). + + ChangeLog | 7 +++++- + NEWS | 12 ++-------- + poppler/CairoFontEngine.cc | 45 + ++++++++++++++++++++++++++++++++++++++----- + poppler/CairoFontEngine.h | 9 +++++++- + poppler/CairoOutputDev.cc | 9 +------- + 5 files changed, 57 insertions(+), 25 deletions(-) + +commit 71c1563bb0462154cb7caa4356d8f8d049073ac4 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Apr 21 05:20:24 2005 +0000 + + Thu Apr 21 00:15:30 2005 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-document.cc (poppler_document_new_from_file): + Add + output device (cairo or splash) to PopplerDocument and + initialize + it in the constructor. + + * glib/poppler-page.cc (splash_render_to_pixbuf, + cairo_render_to_pixbuf): Use output device from associated + poppler + document instead of creating a new one. + + * poppler-glib.pc.in (Requires): Add Requires: field. + + * poppler/Page.cc (loadThumb): Remove unecessary and buggy + call to + Stream::addFilters(), reported by Ryan Lortie (#3046). + + ChangeLog | 15 +++++++++++++++ + NEWS | 15 +++++++++++++++ + glib/poppler-document.cc | 10 ++++++++++ + glib/poppler-page.cc | 22 ++-------------------- + glib/poppler-private.h | 13 +++++++++++++ + poppler-glib.pc.in | 1 + + poppler/CairoFontEngine.cc | 2 +- + poppler/Page.cc | 2 -- + 8 files changed, 57 insertions(+), 23 deletions(-) + +commit c6328cbc6cea05890b52a8302f8deba443959c03 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Apr 20 22:48:52 2005 +0000 + + 2005-04-13 Jeff Muizelaar <jrmuizel@nit.ca> + + * qt/poppler-page.cc (Page::getText): + * qt/poppler-qt.h: add a getText method for getting + the text on a page + + * qt/test-poppler-qt.c (PDFDisplay::PDFDisplay): + add the option to display the text on a page + + Patch from Albert Astals Cid. + + ChangeLog | 11 +++++++++++ + qt/poppler-page.cc | 37 +++++++++++++++++++++++++++++++++++++ + qt/poppler-qt.h | 20 ++++++++++++++++++++ + qt/test-poppler-qt.cpp | 40 ++++++++++++++++++++++++++++++---------- + 4 files changed, 98 insertions(+), 10 deletions(-) + +commit 86a32b65100a5baedd18ce0135703289839a317c +Author: Jonathan Blandford <jrb@redhat.com> +Date: Tue Apr 19 21:22:26 2005 +0000 + + Tue Apr 19 17:21:19 2005 Jonathan Blandford <jrb@redhat.com> + + * glib/poppler-document.cc (poppler_document_get_property): + Use + %.2g instead. + + ChangeLog | 5 +++++ + glib/poppler-document.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 4e81624dcc2d5218f2f8bb4eaa992e724014a853 +Author: Jonathan Blandford <jrb@redhat.com> +Date: Tue Apr 19 21:13:22 2005 +0000 + + Tue Apr 19 17:11:52 2005 Jonathan Blandford <jrb@redhat.com> + + * glib/poppler-document.cc (poppler_document_get_property): + Use %g + instead of %f to avoid versioning like PDF-1.50000 + + ChangeLog | 5 +++++ + glib/poppler-document.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 6ef9d30f06be2bd8a9e1470d70f49843a7e432ac +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Apr 19 19:48:49 2005 +0000 + + Tue Apr 19 15:43:35 2005 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-action.cc (_poppler_action_new): Handle + NULL links + gracefully (fix from Jeff). + + ChangeLog | 5 +++++ + glib/poppler-action.cc | 7 ++++++- + 2 files changed, 11 insertions(+), 1 deletions(-) + +commit 770b7310ce8b07f95960c2014bf3f6040c060ac4 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Apr 19 04:28:15 2005 +0000 + + Tue Apr 19 00:20:08 2005 Kristian Høgsberg <krh@redhat.com> + + * poppler/Catalog.cc: Fix from Marco to make sure we always + initialize Catalog::pageLabelInfo. + + ChangeLog | 5 +++++ + poppler/Catalog.cc | 3 +-- + 2 files changed, 6 insertions(+), 2 deletions(-) + +commit 49c10d9f2c4e0cef031f96929e38a14d7ce5af19 +Author: Jonathan Blandford <jrb@redhat.com> +Date: Sat Apr 16 18:57:43 2005 +0000 + + Sat Apr 16 14:53:15 2005 Jonathan Blandford <jrb@redhat.com> + + * glib/Makefile.am: Create poppler-enums.[ch] + + * glib/poppler.h: + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/poppler-action.h: Try to clean up the headers a bit + + * glib/poppler-document.cc: + * glib/poppler-document.h: Add support for document data. + Implemented as a lot of GObject properties. + + * glib/poppler-enums.c: + * glib/poppler-enums.h: New autogenerated files. + + * glib/test-poppler-glib.c: Test the new document metadata. + Seems + to work nicely, other than the PDF string and View Prefs. + + * poppler/Catalog.cc: + * poppler/Catalog.h: Extend to support PageLayout. + + ChangeLog | 22 +++++ + glib/Makefile.am | 32 +++++++- + glib/poppler-action.h | 15 ++-- + glib/poppler-document.cc | 196 + +++++++++++++++++++++++++++++++++++++++++----- + glib/poppler-document.h | 43 +++++++++-- + glib/poppler-enums.c | 144 ++++++++++++++++++++++++++++++++++ + glib/poppler-enums.h | 32 ++++++++ + glib/poppler-page.cc | 3 - + glib/poppler-page.h | 1 + + glib/poppler.h | 7 ++ + glib/test-poppler-glib.c | 48 ++++++++++- + poppler/Catalog.cc | 17 ++++ + poppler/Catalog.h | 11 +++ + 13 files changed, 529 insertions(+), 42 deletions(-) + +commit f35c76cd3528f1e1de594e85e734ca23624b3a62 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Apr 15 02:25:10 2005 +0000 + + 2005-04-14 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/poppler-private.h: + * glib/poppler.h: Patch from Marco Pesenti Gritti to set page + orientaton. + + ChangeLog | 8 ++++ + glib/poppler-page.cc | 109 + ++++++++++++++++++++++++++++++++++++++++++++---- + glib/poppler-page.h | 45 ++++++++++---------- + glib/poppler-private.h | 1 + + glib/poppler.h | 9 ++++ + 5 files changed, 142 insertions(+), 30 deletions(-) + +commit 538408a8845e167cc2d796ac8b8129d0a2e6a894 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Thu Apr 14 01:34:38 2005 +0000 + + 2005-04-13 Jeff Muizelaar <jrmuizel@nit.ca> + + * poppler/CairoOutputDevImage.cc (getBitmap): remove unused + SplashBitmap. Patch from Albert Astals Cid. + + ChangeLog | 5 +++++ + poppler/CairoOutputDevImage.cc | 2 -- + 2 files changed, 5 insertions(+), 2 deletions(-) + +commit 2903530492c24f3c7cb3bf3b993500694aaa27a8 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Apr 12 15:37:39 2005 +0000 + + 2005-04-12 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: Add fontconfig to PKG_CHECK_MODULES for + the cairo + backend too, since we shouldn't depend on cairo.pc to pull + that in + for us. + + * poppler/Makefile.am (INCLUDES): Add $(splash_includes) to + INCLUDES to make sure the fontconfig include path is + added when + using the splash backend. + + ChangeLog | 10 ++++++++++ + configure.ac | 4 ++-- + poppler/Makefile.am | 1 + + 3 files changed, 13 insertions(+), 2 deletions(-) + +commit 0f7dd9a0512ff97293ee3f8a762b0049393b3cc1 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Apr 9 18:14:39 2005 +0000 + + 2005-04-09 Jeff Muizelaar <jrmuizel@nit.ca> + + * poppler-qt.h: + * poppler-document.cc (okToPrint, okToChange, okToCopy): + Patch from Albert Astals Cid adding more metadata exports + + ChangeLog | 6 ++++++ + qt/poppler-document.cc | 20 ++++++++++++++++++++ + qt/poppler-qt.h | 4 ++++ + 3 files changed, 30 insertions(+), 0 deletions(-) + +commit dee72b531dab83a29c7675ae06ffe376e4498a4e +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Apr 8 21:09:27 2005 +0000 + + 2005-04-08 Kristian Høgsberg <krh@redhat.com> + + * poppler-qt.pc.in (Libs): Add -lpoppler to Libs. + + ChangeLog | 4 ++++ + poppler-qt.pc.in | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +commit df59ce3b1d5ca8cd46aaf5f189bc78953e21e1a9 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Fri Apr 8 03:30:33 2005 +0000 + + 2005-04-07 Jeff Muizelaar <jrmuizel@nit.ca> + + * configure.ac: redo the qt tests from Albert Astals Cid + + ChangeLog | 4 +++ + configure.ac | 78 + +++++++++++++++++++++++++++++++++++----------------------- + 2 files changed, 51 insertions(+), 31 deletions(-) + +commit 3f9dde10e4778255c468895942e45d1a2637af3a +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Fri Apr 8 03:11:00 2005 +0000 + + 2005-04-07 Jeff Muizelaar <jrmuizel@nit.ca> + + * qt/poppler-document.cc: + * qt/poppler-page.cc: + * qt/poppler-qt.h: + Patch from Albert Astals Cid adding consts and exporting some more + metadata. + + ChangeLog | 8 ++++++++ + qt/poppler-document.cc | 21 ++++++++++++++++++--- + qt/poppler-page.cc | 6 +++--- + qt/poppler-qt.h | 15 +++++++++------ + 4 files changed, 38 insertions(+), 12 deletions(-) + +commit e79a8b946e0d04b32da0b4ceea1649efd203cb07 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Apr 7 22:01:51 2005 +0000 + + 2005-04-07 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-document.cc: + * glib/poppler-document.h: + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/poppler-private.h: Print to PS support from Marco + Pesenti + Gritti. + + ChangeLog | 9 +++++++++ + glib/poppler-document.cc | 45 + +++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-document.h | 8 ++++++-- + glib/poppler-page.cc | 19 +++++++++++++++++++ + glib/poppler-page.h | 40 +++++++++++++++++++++------------------- + glib/poppler-private.h | 7 +++++++ + 6 files changed, 107 insertions(+), 21 deletions(-) + +commit 7319b66eb64e735ae8b811306eb76755f088385b +Author: Jonathan Blandford <jrb@redhat.com> +Date: Thu Apr 7 16:26:15 2005 +0000 + + Thu Apr 7 12:25:39 2005 Jonathan Blandford <jrb@redhat.com> + + * configure.ac: check for qt, not glib, when enabling the qt + subdir + + ChangeLog | 5 +++++ + configure.ac | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit e258ed0cb42d524ee39451f680ad4c067e7721da +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Apr 6 20:49:19 2005 +0000 + + 2005-04-06 Jeff Muizelaar <jrmuizel@nit.ca> + + * .cvsignore, glib/.cvsignore, qt/.cvsignore: + Add more things to .cvsignore. + Patch from Martin Kretzschmar. + + .cvsignore | 2 ++ + ChangeLog | 6 ++++++ + glib/.cvsignore | 7 +++++++ + qt/.cvsignore | 7 +++++++ + 4 files changed, 22 insertions(+), 0 deletions(-) + +commit 2a5624a81aa84677a57e098d7d4045f44e3b6f3a +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Apr 6 20:35:03 2005 +0000 + + 2005-04-06 Jeff Muizelaar <jrmuizel@nit.ca> + + * poppler-page.cc (Page::Page, Page::~Page): + Construct and deconstruct the PageData object. + Patch from Albert Astals Cid. + + ChangeLog | 6 ++++++ + qt/poppler-page.cc | 6 ++++++ + qt/poppler-qt.h | 1 + + 3 files changed, 13 insertions(+), 0 deletions(-) + +commit f983e3d317660653f2bfc56f9b06e2cec675beca +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Apr 6 14:39:40 2005 +0000 + + 2005-04-06 Jeff Muizelaar <jrmuizel@nit.ca> + + * Makefile.am, configure.ac: Add configuration for qt wrapper. + + * poppler-qt.pc.in: + * qt/Makefile.am: + * qt/poppler-document.cc: + * qt/poppler-page.cc: + * qt/poppler-private.h: + * qt/poppler-qt.h: + * qt/test-poppler-qt.cpp: + New files. + + ChangeLog | 13 +++ + Makefile.am | 13 ++- + configure.ac | 64 +++++++++++++- + poppler-qt.pc.in | 11 +++ + qt/Makefile.am | 32 +++++++ + qt/poppler-document.cc | 232 + ++++++++++++++++++++++++++++++++++++++++++++++++ + qt/poppler-page.cc | 66 ++++++++++++++ + qt/poppler-private.h | 32 +++++++ + qt/poppler-qt.h | 75 ++++++++++++++++ + qt/test-poppler-qt.cpp | 63 +++++++++++++ + 10 files changed, 597 insertions(+), 4 deletions(-) + +commit d91dd69a7a0dd581c26728d2640e4d36a7ffe75f +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Apr 5 17:46:44 2005 +0000 + + 2005-04-05 Kristian Høgsberg <krh@redhat.com> + + * NEWS: Attempt to sum up changes since 0.1.2. + + * configure.ac: Bump release to 0.2.0, add AC_DEFINEs + for cairo + and splash availability. + + * poppler/CairoFontEngine.cc: Disable hinting. + + * glib/poppler-page.cc (poppler_page_render_to_pixbuf): Choose + either splash or cairo rendering, based on configure choice. + (cairo_render_to_pixbuf): New function to render using + the cairo + backend. + (splash_render_to_pixbuf): Split out the splash code to this + function. + + ChangeLog | 16 ++++ + NEWS | 6 +- + configure.ac | 16 +++- + glib/Makefile.am | 17 ++++- + glib/poppler-page.cc | 152 + ++++++++++++++++++++++++++++++++-------- + poppler/CairoFontEngine.cc | 2 +- + poppler/CairoOutputDevImage.cc | 20 ++---- + poppler/CairoOutputDevImage.h | 3 +- + 8 files changed, 179 insertions(+), 53 deletions(-) + +commit b62b0cec2335d987b31fbb0043cb33db29cc6a13 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Apr 5 02:56:32 2005 +0000 + + 2005-04-04 Kristian Høgsberg <krh@redhat.com> + + * ChangeLog: Add this entry to test commit mailer script. + + ChangeLog | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 50b494266ce197fe88468ca2917b9910d77e5f98 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Apr 5 02:49:18 2005 +0000 + + 2005-04-04 Kristian Høgsberg <krh@redhat.com> + + * TODO: Add reminder about using PDF font descriptors with + fontconfig. + + ChangeLog | 3 +++ + TODO | 2 ++ + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit d3d12235bf4de48363571b3d992ea3bfc29e6529 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Apr 4 21:50:56 2005 +0000 + + 2005-04-04 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: Add checks for mkstemp() and mkstemps(). + + * glib/poppler-page.cc (poppler_page_find_text): Reverse + y-coordinates so we return PDF style coordinates. + + From Maro Pesenti Gritti <mpgritti@gmail.com>: + + * configure.ac, poppler/Makefile.am: Check for fontconfig when + we're building the splash backend. + + * glib/poppler-page.cc (poppler_page_get_text): New + function to + select text on page. + + ChangeLog | 15 +++++++++++++++ + configure.ac | 5 ++++- + glib/poppler-page.cc | 48 + +++++++++++++++++++++++++++++++++++++++++++++--- + glib/poppler-page.h | 3 +++ + poppler/Makefile.am | 4 ++++ + 5 files changed, 71 insertions(+), 4 deletions(-) + +commit 2cb9d70678e33504246cbfbe0525c33f5e3b7736 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Apr 4 05:56:29 2005 +0000 + + 2005-04-04 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc (poppler_page_find_text): Reverse + list of + matches so we get them in the right order. + + ChangeLog | 5 +++++ + glib/poppler-page.cc | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit 8c2a5ffb73c0f2d84adebcfbd43f8347ae8c8bbc +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sun Apr 3 18:17:55 2005 +0000 + + 2005-04-03 Martin Kretzschmar <martink@gnome.org> + + * poppler/DCTStream.h: Wrap #include <jpeglib.h> in extern "C" + Fixes build with unpatched libjpeg. + + ChangeLog | 5 +++++ + poppler/DCTStream.h | 2 ++ + 2 files changed, 7 insertions(+), 0 deletions(-) + +commit 1879d82d9088aa36ef5e677f4bae44c84f90caa6 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Sat Apr 2 22:16:38 2005 +0000 + + 2005-04-02 Jeff Muizelaar <jrmuizel@nit.ca> + + * poppler/Page.h: + * poppler/Page.cc (Page::Page): + Some initial infrastructure for supporting transitions. + + ChangeLog | 6 ++++++ + poppler/Page.cc | 10 ++++++++++ + poppler/Page.h | 4 ++++ + 3 files changed, 20 insertions(+), 0 deletions(-) + +commit fa4efbed51e12811070798a7cfb6b1f9e8d57abc +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Apr 1 00:32:34 2005 +0000 + + 2005-03-31 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc (poppler_page_render_to_pixbuf): Clip + output to destination pixbuf and fix RGB order. + + ChangeLog | 5 +++++ + glib/poppler-page.cc | 38 +++++++++++++++++++++++--------------- + 2 files changed, 28 insertions(+), 15 deletions(-) + +commit bb508ded0b8c5806a9db1ec73e57b14268896911 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Mar 31 22:45:05 2005 +0000 + + 2005-03-31 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc (poppler_page_find_text): New + function to + seach a page for occurrences of a given text string. + + * glib/poppler-page.cc: Add g_return_if_fail() checks to + a couple + of functions. + + ChangeLog | 8 ++++ + glib/poppler-page.cc | 82 + ++++++++++++++++++++++++++++++++++++++++------ + glib/poppler-page.h | 18 +++++++--- + glib/test-poppler-glib.c | 19 +++++++++-- + 4 files changed, 109 insertions(+), 18 deletions(-) + +commit 0b4d481e9c79cb18cf41b503970801bbf4b95b3c +Author: Jonathan Blandford <jrb@redhat.com> +Date: Thu Mar 31 05:29:42 2005 +0000 + + Thu Mar 31 00:26:20 2005 Jonathan Blandford <jrb@redhat.com> + + * glib/poppler-page.cc: + * glib/poppler-page.h (poppler_page_get_link_mapping, + poppler_page_free_link_mapping): New functions to get a + mapping of + links to locations on the current document. + :s + + ChangeLog | 7 ++++ + glib/poppler-page.cc | 85 + +++++++++++++++++++++++++++++++++++++++++++++++--- + glib/poppler-page.h | 15 +++++++++ + 3 files changed, 102 insertions(+), 5 deletions(-) + +commit c4e18f5a454794bd5e226f1106a54ccf807c6c3d +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Thu Mar 31 02:28:46 2005 +0000 + + 2005-03-30 Jeff Muizelaar <jrmuizel@nit.ca> + + * poppler/DCTStream.h: change x to unsigned int to eliminate + comparision warning + + ChangeLog | 5 +++++ + poppler/DCTStream.h | 2 +- + 2 files changed, 6 insertions(+), 1 deletions(-) + +commit e6a2a588305b4797af901599eb6854028f2be476 +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Mar 30 18:43:44 2005 +0000 + + 2005-03-30 Jeff Muizelaar <jrmuizel@nit.ca> + + * poppler/Catalog.cc: delete pageLabelInfo on deconstruction + + ChangeLog | 4 ++++ + poppler/Catalog.cc | 1 + + 2 files changed, 5 insertions(+), 0 deletions(-) + +commit a52905c0f0bf4d10d2103b80924a4de204d03836 +Author: Jonathan Blandford <jrb@redhat.com> +Date: Wed Mar 30 04:08:26 2005 +0000 + + add this + + glib/poppler-action.cc | 285 + ++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 285 insertions(+), 0 deletions(-) + +commit 9542860a74076020b5727d4b761c08cdab42d69e +Author: Jonathan Blandford <jrb@redhat.com> +Date: Wed Mar 30 04:07:57 2005 +0000 + + add these + + glib/poppler-action.h | 157 + +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 157 insertions(+), 0 deletions(-) + +commit 07720f98eca8736695f7d0d8e98465d301e6b7cf +Author: Jonathan Blandford <jrb@redhat.com> +Date: Wed Mar 30 04:07:39 2005 +0000 + + Tue Mar 29 23:07:17 2005 Jonathan Blandford <jrb@redhat.com> + + * glib/poppler-page.h: Reformat. + + ChangeLog | 4 ++++ + glib/poppler-page.h | 34 +++++++++++++++++----------------- + 2 files changed, 21 insertions(+), 17 deletions(-) + +commit 3437b9e122aa05f4ede24664ee5a9b2d423ef9c4 +Author: Jonathan Blandford <jrb@redhat.com> +Date: Wed Mar 30 04:04:53 2005 +0000 + + Tue Mar 29 22:49:15 2005 Jonathan Blandford <jrb@redhat.com> + + * glib/poppler-action.[ch]: New item to encapsulate links. + * glib/poppler-document.[ch] (poppler_index_iter_get_action): + New + function to get the action. Also, fix some warnings. + * glib/poppler-private.h (_poppler_action_new): New function. + * glib/test-poppler-glib.c: Fix warnings. + + ChangeLog | 8 ++++++ + glib/Makefile.am | 2 + + glib/poppler-document.cc | 57 + ++++++++++----------------------------------- + glib/poppler-document.h | 7 +---- + glib/poppler-private.h | 12 ++++++++- + glib/poppler.h | 1 + + glib/test-poppler-glib.c | 4 ++- + 7 files changed, 39 insertions(+), 52 deletions(-) + +commit cab0ec4d011c34b571050a446c6e3286cc8749c8 +Author: Jonathan Blandford <jrb@redhat.com> +Date: Tue Mar 29 18:49:26 2005 +0000 + + Tue Mar 29 02:36:00 2005 Jonathan Blandford <jrb@redhat.com> + + * glib/poppler-document.[ch] (PopplerIndexIter): Add an + iter to + extract the index from the doc. Includes a bad hack, for now. + + Mon Mar 28 22:02:07 2005 Jonathan Blandford <jrb@redhat.com> + + * glib/poppler-page.cc: + * glib/poppler-page.h (poppler_page_get_thumbnail_size): New + function. + * poppler-glib.pc.in: add -lpoppler-glib to the libs line. + + ChangeLog | 12 ++++ + glib/poppler-document.cc | 160 + +++++++++++++++++++++++++++++++++++++++++++++- + glib/poppler-document.h | 15 ++++ + glib/poppler-page.cc | 48 ++++++++++++++- + glib/poppler-page.h | 3 + + poppler-glib.pc.in | 2 +- + 6 files changed, 236 insertions(+), 4 deletions(-) + +commit 2de98f3871bc4ea3e361ca4fe37f5b6561918c77 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Mar 28 07:49:54 2005 +0000 + + 2005-03-28 Kristian Høgsberg <krh@redhat.com> + + * poppler/Page.cc (loadThumb): Backend agnostic method for + extracting an embedded thumbnail iamge. + + * poppler/Dict.cc (lookupInt): New convenience method. + + * glib/poppler-page.cc (poppler_page_get_thumbnail): New glib + function for getting the embedded thumbnail image for a page. + + ChangeLog | 10 ++++ + glib/poppler-page.cc | 23 ++++++++++ + glib/poppler-page.h | 32 ++++++------- + glib/test-poppler-glib.c | 24 +++++++--- + poppler/Dict.cc | 20 ++++++++ + poppler/Dict.h | 1 + + poppler/Page.cc | 109 + ++++++++++++++++++++++++++++++++++++++++++++++ + poppler/Page.h | 1 + + 8 files changed, 196 insertions(+), 24 deletions(-) + +commit 591055d1fbcd0b9c2bb11f14040568051c5976d1 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sat Mar 26 00:34:21 2005 +0000 + + 2005-03-25 Kristian Høgsberg <krh@redhat.com> + + * glib/Makefile.am (libpoppler_glib_la_SOURCES): Add + + * configure.ac: Check for fontconfig for glib bindings. + + ChangeLog | 4 ++++ + configure.ac | 4 ++-- + glib/Makefile.am | 7 +++++-- + 3 files changed, 11 insertions(+), 4 deletions(-) + +commit 1e30abe94a96b91df05716ea079c58782d767951 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Mar 24 22:24:41 2005 +0000 + + 2005-03-24 Kristian Høgsberg <krh@redhat.com> + + * glib/Makefile.am: Use POPPLER_GLIB_CFLAGS and + POPPLER_GLIB_LIBS + instead of GTK_TEST_*. Reported by Adam Jackson + <ajax@nwnk.net>. + + ChangeLog | 5 +++++ + glib/Makefile.am | 7 +++---- + 2 files changed, 8 insertions(+), 4 deletions(-) + +commit 1d9fcaa34222b2ccd53280148561917dbb8d95d9 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Mar 23 05:53:08 2005 +0000 + + File Edit Options Buffers Tools Help + 2005-03-23 Kristian Høgsberg <krh@redhat.com> + + * poppler/Catalog.cc (indexToLabel, labelToIndex): Add + stricter + checking of incoming labels and indices. + + * glib/test-poppler-glib.c (main): Change test program to + take the + page label from the command line. + + ChangeLog | 6 ++++++ + glib/test-poppler-glib.c | 5 ++++- + poppler/Catalog.cc | 31 +++++++++++++++++++++++++++++-- + 3 files changed, 39 insertions(+), 3 deletions(-) + +commit a9bbb465a0ee6ab320f76d322a3f575327ad1148 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Mar 23 05:38:34 2005 +0000 + + 2005-03-23 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-page.cc: + * glib/poppler-page.h: Add poppler_page_get_index() and rename + popper_page_get_dimension() to popper_page_get_size() + + ChangeLog | 6 ++++++ + glib/poppler-page.cc | 12 +++++++++--- + glib/poppler-page.h | 32 +++++++++++++++++--------------- + glib/test-poppler-glib.c | 5 ++--- + 4 files changed, 34 insertions(+), 21 deletions(-) + +commit 178bff27d09d1e18d1fc00c975fa235b0e9f93d3 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Mar 23 04:14:28 2005 +0000 + + 2005-03-22 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-document.cc: Implement poppler_document_save(). + + * glib/poppler-document.h: Add prototype and format headers + properly. + + ChangeLog | 7 +++++++ + glib/poppler-document.cc | 20 ++++++++++++++++++++ + glib/poppler-document.h | 30 +++++++++++++----------------- + 3 files changed, 40 insertions(+), 17 deletions(-) + +commit e40c6f69c9466df4cc70840b959f72cb0809c777 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Mar 23 01:30:04 2005 +0000 + + 2005-03-22 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: Fix --disable-popper typo reported by Albert. + Require exactly cairo 0.4 since CVS cairo has API changes. + + ChangeLog | 5 +++++ + configure.ac | 6 +++--- + 2 files changed, 8 insertions(+), 3 deletions(-) + +commit 2a1e4f6f6dd87dc59b3579175a87215fd7350ee0 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Mar 22 22:46:37 2005 +0000 + + 2005-03-22 Kristian Høgsberg <krh@redhat.com> + + * poppler/Array.cc: + * poppler/Array.h: Add getString() convenience method. + + * poppler/Catalog.cc: + * poppler/Catalog.h: Optimize lookup of named destinations. + + ChangeLog | 8 +++ + poppler/Array.cc | 15 ++++++ + poppler/Array.h | 1 + + poppler/Catalog.cc | 142 + +++++++++++++++++++++++++++++++++------------------- + poppler/Catalog.h | 32 +++++++++++- + 5 files changed, 146 insertions(+), 52 deletions(-) + +commit 4dfe0ce4a1ca09d632943f0f6315e31135957ada +Author: Kristian Høgsberg <krh@redhat.com> +Date: Tue Mar 22 01:50:05 2005 +0000 + + 2005-03-21 Kristian Høgsberg <krh@redhat.com> + + * NEWS, TODO: Update these. + + ChangeLog | 4 ++++ + NEWS | 1 + + TODO | 29 ++++++++++++++++++++--------- + 3 files changed, 25 insertions(+), 9 deletions(-) + +commit c158de90a5a8c6514d8aa22efa0b891a1801e822 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Mar 21 07:53:19 2005 +0000 + + 2005-03-21 Kristian Høgsberg <krh@redhat.com> + + From Albert Astals Cid <tsdgeos@yahoo.es>: + + * poppler/Catalog.cc, poppler/Catalog.h: Parse PageMode + setting + from the Catalog dict and expose it through getPageMode() + method. + + ChangeLog | 10 ++++++++-- + poppler/Catalog.cc | 16 ++++++++++++++++ + poppler/Catalog.h | 12 ++++++++++++ + 3 files changed, 36 insertions(+), 2 deletions(-) + +commit 9887679ca195714d71cbedde9297e9dcea04eb13 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Mon Mar 21 07:36:11 2005 +0000 + + 2005-03-21 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-document.cc: + + * glib/poppler-document.h: Expose the documenttitle as + a GObject + property. + + * glib/poppler-page.cc: Expose the page label as a GObject + property. + + * glib/poppler-private.h: Add the page index to PopplerPage. + + * glib/test-poppler-glib.c: Print out page label and document + title. + + * poppler/Catalog.cc: + * poppler/Catalog.h: Add page label accessors. + + * poppler/PageLabelInfo.cc: + * poppler/PageLabelInfo.h: New files. + + * poppler/Makefile.am: Add new files to sources. + + ChangeLog | 23 +++ + glib/poppler-document.cc | 95 ++++++++++++- + glib/poppler-document.h | 3 + + glib/poppler-page.cc | 37 +++++- + glib/poppler-private.h | 3 +- + glib/test-poppler-glib.c | 13 ++- + poppler/Catalog.cc | 15 ++ + poppler/Catalog.h | 6 + + poppler/Makefile.am | 4 +- + poppler/PageLabelInfo.cc | 346 + ++++++++++++++++++++++++++++++++++++++++++++++ + poppler/PageLabelInfo.h | 37 +++++ + 11 files changed, 573 insertions(+), 9 deletions(-) + +commit 2cfe917de909254bc3a114a6add68a14b5885fd0 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sun Mar 20 05:44:06 2005 +0000 + + 2005-03-20 Kristian Høgsberg <krh@redhat.com> + + * glib/poppler-document.cc: + * glib/poppler-page.h: + * glib/poppler.cc: + * poppler/Array.cc: + * poppler/Array.h: + * poppler/Catalog.cc: Fix up filenames in #include statements + and + comments. + + ChangeLog | 10 ++++++++++ + glib/poppler-document.cc | 2 +- + glib/poppler-document.h | 2 +- + glib/poppler-page.cc | 2 +- + glib/poppler-page.h | 2 +- + glib/poppler.cc | 2 +- + glib/poppler.h | 2 +- + 7 files changed, 16 insertions(+), 6 deletions(-) + +commit f9b6017cfaf8f814ae2fc027927477c29f24af71 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sun Mar 20 00:35:21 2005 +0000 + + 2005-03-19 Kristian Høgsberg <krh@redhat.com> + + Land the first bits of the glib wrapper. + + * Makefile.am: + * configure.ac: Add new glib subdirectory and configure + options + for glib wrapper. + + * glib/Makefile.am: + * glib/poppler-document.cc: + * glib/poppler-document.h: + * glib/poppler-page.cc: + * glib/poppler-page.h: + * glib/poppler-private.h: + * glib/poppler.cc: + * glib/poppler.h: + * glib/test-poppler-glib.c: + * poppler-glib.pc.in: New files. + + ChangeLog | 19 +++++ + Makefile.am | 27 ++++---- + NEWS | 4 + + configure.ac | 25 ++++++- + glib/Makefile.am | 33 +++++++++ + glib/poppler-document.cc | 165 + ++++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-document.h | 52 ++++++++++++++ + glib/poppler-page.cc | 158 + ++++++++++++++++++++++++++++++++++++++++++++ + glib/poppler-page.h | 50 ++++++++++++++ + glib/poppler-private.h | 20 ++++++ + glib/poppler.cc | 29 ++++++++ + glib/poppler.h | 42 ++++++++++++ + glib/test-poppler-glib.c | 43 ++++++++++++ + poppler-glib.pc.in | 11 +++ + 14 files changed, 661 insertions(+), 17 deletions(-) + +commit 2a31446b227b5cdc8334e672a71835b6ea14713a +Author: Jeff Muizelaar <jeff@infidigm.net> +Date: Wed Mar 16 15:51:36 2005 +0000 + + 2005-03-16 Jeff Muizelaar <jrmuizel@nit.ca> + + From Dan Sheridan <dan.sheridan@postman.org.uk> + + * poppler/XRef.cc (XRef::checkEncrypted): + The key length should be 5 for revision 2 documents. + + ChangeLog | 7 +++++++ + poppler/XRef.cc | 6 ++++++ + 2 files changed, 13 insertions(+), 0 deletions(-) + +commit e632a1d4b2f685993bda407458c34ef8e6b74136 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Mar 11 22:43:29 2005 +0000 + + 2005-03-11 Kristian Høgsberg <krh@redhat.com> + + From Jeff Muizelaar <jrmuizel@nit.ca>: + + * poppler/CairoOutputDev.cc (CairoOutputDev::drawImageMask): + Use + getLine instead of getPixel. + + ChangeLog | 3 +++ + poppler/CairoOutputDev.cc | 18 ++++++++---------- + 2 files changed, 11 insertions(+), 10 deletions(-) + +commit 83e904452f205a2c0cd2723cb12b7fd4640ce342 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Mar 11 21:42:52 2005 +0000 + + 2005-03-11 Kristian Høgsberg <krh@redhat.com> + + From Jeff Muizelaar <jrmuizel@nit.ca>: + + * configure.ac: Add checks for libjpeg. + + * DCTStream.cc, DCTStream.h, Stream.cc, Stream.h, Makefile.am: + Conditionally use libjpeg instead of xpdf jpeg decoder. + + ChangeLog | 9 ++++ + configure.ac | 34 +++++++++++++++- + poppler/DCTStream.cc | 110 + ++++++++++++++++++++++++++++++++++++++++++++++++++ + poppler/DCTStream.h | 70 ++++++++++++++++++++++++++++++++ + poppler/Makefile.am | 14 ++++++- + poppler/Stream.cc | 8 ++++ + poppler/Stream.h | 2 + + 7 files changed, 245 insertions(+), 2 deletions(-) + +commit e2af71338fd89760c4ac76999985efc5eb92817f +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Mar 11 16:42:20 2005 +0000 + + 2005-03-10 Kristian Høgsberg <krh@redhat.com> + + From Jeff Muizelaar <jrmuizel@nit.ca>: + + * poppler/CairoFontEngine.cc (CairoFontEngine::getFont): + Don't print "Type 3 font!" message. + + * poppler/CairoOutputDev.cc (CairoOutputDev::drawImageMask): + Enable image mask drawing and do it properly, albeit slowly. + + * poppler/CairoOutputDev.h + (CairoOutputDev::interpretType3Chars): Return true so that + Gfx.cc turns type3 characters into calls to drawImageMask + + ChangeLog | 14 ++++++++++++++ + poppler/CairoFontEngine.cc | 1 - + poppler/CairoOutputDev.cc | 25 ++++++++++--------------- + poppler/CairoOutputDev.h | 2 +- + 4 files changed, 25 insertions(+), 17 deletions(-) + +commit 3dc52373346e448077d2539163e873eef6406ed7 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Mar 9 15:47:00 2005 +0000 + + 2005-03-09 Kristian Høgsberg <krh@redhat.com> + + * NEWS: Describe 0.1.2 (and 0.1.1) release. + + * configure.ac: Bump poppler version to 0.1.2 + + ChangeLog | 6 ++++++ + NEWS | 12 ++++++++++++ + configure.ac | 2 +- + 3 files changed, 19 insertions(+), 1 deletions(-) + +commit 5c6a2d34fc25df28ca5326e6910d7cf664f0c3d7 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Wed Mar 9 15:35:31 2005 +0000 + + 2005-03-09 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: Bump cairo requirement to 0.4. + + ChangeLog | 4 ++++ + configure.ac | 4 ++-- + 2 files changed, 6 insertions(+), 2 deletions(-) + +commit 5b2d9a61e79cefd819888c8c89231a5fafccd114 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sat Mar 5 04:57:49 2005 +0000 + + 2005-03-04 Kristian Høgsberg <krh@redhat.com> + + Patch from Jeff Muizelaar <jrmuizel@nit.ca>. Changed to + allocate + glyphs using gmalloc. + + * poppler/CairoOutputDev.cc (CairoOutputDev::drawString): + Implement drawString instead of drawChar. This change should + make clipping to a text path work and has a performance + improvement. Currently the code is a little ugly because we + can't concat matrices to cairo without losing our current + font. + + * poppler/CairoOutputDev.h (CairoOutputDev::useDrawChar): + Tell Gfx.cc that it should use drawString instead of drawChar. + + ChangeLog | 14 ++++++ + TODO | 3 + + poppler/CairoOutputDev.cc | 110 + ++++++++++++++++++++++++++++++++++----------- + poppler/CairoOutputDev.h | 7 +-- + 4 files changed, 102 insertions(+), 32 deletions(-) + +commit 60d190ef80a0dcd9cc3a67306e2c65c5dd482f24 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sat Mar 5 04:37:14 2005 +0000 + + 2005-03-04 Kristian Høgsberg <krh@redhat.com> + + * test/gtk-cairo-test.cc (view_load): + * test/gtk-splash-test.cc (view_load): Fix missing return + statement, and remove unused variables. + + * configure.ac: Add configure option to enable the default KDE + flags as described by Albert Astals Cid <tsdgeos@yahoo.es>. + + * TODO: Update with Jeff's items. + + * .cvsignore: + * */.cvsignore: Add these to silence CVS. + + ChangeLog | 9 +++++++++ + TODO | 15 +++++++++++---- + configure.ac | 21 +++++++++++++++++++++ + test/gtk-cairo-test.cc | 6 ++---- + test/gtk-splash-test.cc | 5 ++--- + 5 files changed, 45 insertions(+), 11 deletions(-) + +commit e6706e505c1675724c8870f7c58079932661db5f +Author: Kristian Høgsberg <krh@redhat.com> +Date: Sat Mar 5 02:19:50 2005 +0000 + + 2005-03-04 Kristian Høgsberg <krh@redhat.com> + + * .cvsignore: + * */.cvsignore: Add these to silence CVS. + + .cvsignore | 21 +++++++++++++++++++++ + ChangeLog | 3 +++ + fofi/.cvsignore | 8 ++++++++ + goo/.cvsignore | 8 ++++++++ + poppler/.cvsignore | 10 ++++++++++ + splash/.cvsignore | 8 ++++++++ + test/.cvsignore | 10 ++++++++++ + 7 files changed, 68 insertions(+), 0 deletions(-) + +commit 932edfc3c5c61e3b3e98957b717abbf8055e1c5e +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Mar 4 19:47:13 2005 +0000 + + 2005-03-04 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: Implement same check for gtk+-2.0 tests as for + cairo. + + ChangeLog | 5 +++++ + configure.ac | 11 ++++++++--- + 2 files changed, 13 insertions(+), 3 deletions(-) + +commit c632b35ad9345f280d78c268f84ae3fd5a3921b9 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Mar 4 16:33:43 2005 +0000 + + 2005-03-04 Kristian Høgsberg <krh@redhat.com> + + * configure.ac: Only fail hard in check for cairo if the user + specified --enable-cairo-output (from Brad Hards + <bradh@frogmouth.net>). Print summary of configure results + at the + end of configure script. + + * poppler/poppler-config.h: Remove this file (noticed by Brad + Hards <bradh@frogmouth.net>). + + ChangeLog | 5 +++++ + configure.ac | 17 ++++++++++++++--- + 2 files changed, 19 insertions(+), 3 deletions(-) + +commit 80f9c90273eb31ac349c46bf86dedff7daf21db4 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Mar 4 15:32:32 2005 +0000 + + 2005-03-04 Kristian Høgsberg <krh@redhat.com> + + * poppler/poppler-config.h: Remove this file (noticed by Brad + Hards <bradh@frogmouth.net>). + + ChangeLog | 5 ++ + poppler/poppler-config.h | 146 + ---------------------------------------------- + 2 files changed, 5 insertions(+), 146 deletions(-) + +commit 338b83b6f08a7212fdde2bbce94385e9a71a3d23 +Author: Kristian Høgsberg <krh@redhat.com> +Date: Fri Mar 4 02:46:44 2005 +0000 + + 2005-03-03 Kristian Høgsberg <krh@redhat.com> + + Patch from Jeff Muizelaar <jrmuizel@nit.ca>: + + * poppler/CairoOutputDev.cc (CairoOutputDev::drawImage, + CairoOutputDev::drawImageMask): destroy the image surface and + free the image buffer. + + ChangeLog | 10 ++++++++++ + autogen.sh | 2 +- + poppler/CairoOutputDev.cc | 8 +++++--- + 3 files changed, 16 insertions(+), 4 deletions(-) + +commit 062aa51487f539406b54458885b4c9501da3c44d +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Mar 3 20:01:14 2005 +0000 + + 2005-03-03 Kristian Høgsberg <krh@redhat.com> + + * autogen.sh: Add to CVS. + + ChangeLog | 4 ++++ + autogen.sh | 4 ++++ + 2 files changed, 8 insertions(+), 0 deletions(-) + +commit cb02d5d0e770e2a8cbe5a8ac810820a2ce5fec0c +Author: Kristian Høgsberg <krh@redhat.com> +Date: Thu Mar 3 19:45:58 2005 +0000 + + Initial revision + + AUTHORS | 3 + + COPYING | 340 ++++ + ChangeLog | 33 + + INSTALL | 236 +++ + Makefile.am | 29 + + NEWS | 4 + + README | 37 + + README-XPDF | 376 ++++ + TODO | 21 + + configure.ac | 139 ++ + fofi/FoFiBase.cc | 156 ++ + fofi/FoFiBase.h | 55 + + fofi/FoFiEncodings.cc | 994 ++++++++++ + fofi/FoFiEncodings.h | 34 + + fofi/FoFiTrueType.cc | 1438 ++++++++++++++ + fofi/FoFiTrueType.h | 131 ++ + fofi/FoFiType1.cc | 207 ++ + fofi/FoFiType1.h | 57 + + fofi/FoFiType1C.cc | 2385 ++++++++++++++++++++++ + fofi/FoFiType1C.h | 224 +++ + fofi/Makefile.am | 16 + + goo/GooHash.cc | 356 ++++ + goo/GooHash.h | 74 + + goo/GooList.cc | 92 + + goo/GooList.h | 89 + + goo/GooMutex.h | 49 + + goo/GooString.cc | 236 +++ + goo/GooString.h | 98 + + goo/Makefile.am | 20 + + goo/gfile.cc | 705 +++++++ + goo/gfile.h | 140 ++ + goo/gmem.c | 204 ++ + goo/gmem.h | 53 + + goo/gmempp.cc | 32 + + goo/gtypes.h | 29 + + poppler-cairo.pc.in | 10 + + poppler-splash.pc.in | 10 + + poppler.pc.in | 11 + + poppler/Annot.cc | 137 ++ + poppler/Annot.h | 79 + + poppler/Array.cc | 73 + + poppler/Array.h | 56 + + poppler/BaseFile.h | 82 + + poppler/BuiltinFont.cc | 65 + + poppler/BuiltinFont.h | 55 + + poppler/BuiltinFontTables.cc | 4284 + ++++++++++++++++++++++++++++++++++++++++ + poppler/BuiltinFontTables.h | 23 + + poppler/CMap.cc | 384 ++++ + poppler/CMap.h | 101 + + poppler/CairoFontEngine.cc | 367 ++++ + poppler/CairoFontEngine.h | 61 + + poppler/CairoOutputDev.cc | 569 ++++++ + poppler/CairoOutputDev.h | 146 ++ + poppler/CairoOutputDevImage.cc | 87 + + poppler/CairoOutputDevImage.h | 43 + + poppler/CairoOutputDevX.cc | 211 ++ + poppler/CairoOutputDevX.h | 117 ++ + poppler/Catalog.cc | 364 ++++ + poppler/Catalog.h | 87 + + poppler/CharCodeToUnicode.cc | 533 +++++ + poppler/CharCodeToUnicode.h | 112 ++ + poppler/CharTypes.h | 24 + + poppler/CompactFontTables.h | 464 +++++ + poppler/Decrypt.cc | 399 ++++ + poppler/Decrypt.h | 59 + + poppler/Dict.cc | 95 + + poppler/Dict.h | 75 + + poppler/Error.cc | 38 + + poppler/Error.h | 21 + + poppler/ErrorCodes.h | 36 + + poppler/FontEncodingTables.cc | 1824 +++++++++++++++++ + poppler/FontEncodingTables.h | 20 + + poppler/Function.cc | 1525 ++++++++++++++ + poppler/Function.h | 181 ++ + poppler/Gfx.cc | 3079 +++++++++++++++++++++++++++++ + poppler/Gfx.h | 279 +++ + poppler/GfxFont.cc | 1508 ++++++++++++++ + poppler/GfxFont.h | 313 +++ + poppler/GfxState.cc | 2782 ++++++++++++++++++++++++++ + poppler/GfxState.h | 1053 ++++++++++ + poppler/GlobalParams.cc | 1764 +++++++++++++++++ + poppler/GlobalParams.h | 312 +++ + poppler/JArithmeticDecoder.cc | 300 +++ + poppler/JArithmeticDecoder.h | 89 + + poppler/JBIG2Stream.cc | 3337 +++++++++++++++++++++++++++++++ + poppler/JBIG2Stream.h | 141 ++ + poppler/JPXStream.cc | 2822 ++++++++++++++++++++++++++ + poppler/JPXStream.h | 338 ++++ + poppler/Lexer.cc | 474 +++++ + poppler/Lexer.h | 75 + + poppler/Link.cc | 851 ++++++++ + poppler/Link.h | 407 ++++ + poppler/Makefile.am | 140 ++ + poppler/NameToCharCode.cc | 116 ++ + poppler/NameToCharCode.h | 40 + + poppler/NameToUnicodeTable.h | 1097 ++++++++++ + poppler/Object.cc | 231 +++ + poppler/Object.h | 301 +++ + poppler/Outline.cc | 151 ++ + poppler/Outline.h | 74 + + poppler/OutputDev.cc | 104 + + poppler/OutputDev.h | 162 ++ + poppler/PDFDoc.cc | 322 +++ + poppler/PDFDoc.h | 176 ++ + poppler/PDFDocEncoding.cc | 44 + + poppler/PDFDocEncoding.h | 16 + + poppler/PSOutputDev.cc | 3803 +++++++++++++++++++++++++++++++++++ + poppler/PSOutputDev.h | 312 +++ + poppler/PSTokenizer.cc | 135 ++ + poppler/PSTokenizer.h | 39 + + poppler/Page.cc | 370 ++++ + poppler/Page.h | 176 ++ + poppler/Parser.cc | 231 +++ + poppler/Parser.h | 58 + + poppler/SplashOutputDev.cc | 1348 +++++++++++++ + poppler/SplashOutputDev.h | 194 ++ + poppler/Stream-CCITT.h | 459 +++++ + poppler/Stream.cc | 3979 + +++++++++++++++++++++++++++++++++++++ + poppler/Stream.h | 841 ++++++++ + poppler/TextOutputDev.cc | 3529 +++++++++++++++++++++++++++++++++ + poppler/TextOutputDev.h | 569 ++++++ + poppler/UTF8.h | 56 + + poppler/UnicodeMap.cc | 293 +++ + poppler/UnicodeMap.h | 122 ++ + poppler/UnicodeMapTables.h | 361 ++++ + poppler/UnicodeTypeTable.cc | 299 +++ + poppler/UnicodeTypeTable.h | 18 + + poppler/XRef.cc | 1026 ++++++++++ + poppler/XRef.h | 133 ++ + poppler/poppler-config.h | 146 ++ + poppler/poppler-config.h.in | 145 ++ + splash/Makefile.am | 52 + + splash/Splash.cc | 1732 ++++++++++++++++ + splash/Splash.h | 174 ++ + splash/SplashBitmap.cc | 157 ++ + splash/SplashBitmap.h | 46 + + splash/SplashClip.cc | 270 +++ + splash/SplashClip.h | 86 + + splash/SplashErrorCodes.h | 30 + + splash/SplashFTFont.cc | 289 +++ + splash/SplashFTFont.h | 53 + + splash/SplashFTFontEngine.cc | 141 ++ + splash/SplashFTFontEngine.h | 58 + + splash/SplashFTFontFile.cc | 111 ++ + splash/SplashFTFontFile.h | 68 + + splash/SplashFont.cc | 166 ++ + splash/SplashFont.h | 87 + + splash/SplashFontEngine.cc | 245 +++ + splash/SplashFontEngine.h | 83 + + splash/SplashFontFile.cc | 55 + + splash/SplashFontFile.h | 58 + + splash/SplashFontFileID.cc | 23 + + splash/SplashFontFileID.h | 28 + + splash/SplashGlyphBitmap.h | 24 + + splash/SplashMath.h | 45 + + splash/SplashPath.cc | 177 ++ + splash/SplashPath.h | 105 + + splash/SplashPattern.cc | 64 + + splash/SplashPattern.h | 79 + + splash/SplashScreen.cc | 107 + + splash/SplashScreen.h | 38 + + splash/SplashState.cc | 99 + + splash/SplashState.h | 86 + + splash/SplashT1Font.cc | 251 +++ + splash/SplashT1Font.h | 49 + + splash/SplashT1FontEngine.cc | 124 ++ + splash/SplashT1FontEngine.h | 51 + + splash/SplashT1FontFile.cc | 96 + + splash/SplashT1FontFile.h | 55 + + splash/SplashTypes.h | 80 + + splash/SplashXPath.cc | 417 ++++ + splash/SplashXPath.h | 90 + + splash/SplashXPathScanner.cc | 271 +++ + splash/SplashXPathScanner.h | 72 + + test/Makefile.am | 48 + + test/gtk-cairo-test.cc | 298 +++ + test/gtk-splash-test.cc | 314 +++ + 177 files changed, 70512 insertions(+), 0 deletions(-) diff --git a/Build/source/libs/poppler/poppler-0.18.4/ConfigureChecks.cmake b/Build/source/libs/poppler/poppler-0.18.4/ConfigureChecks.cmake new file mode 100644 index 00000000000..04de970c4e1 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/ConfigureChecks.cmake @@ -0,0 +1,56 @@ +# Copyright 2008 Pino Toscano, <pino@kde.org> +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +include(CheckIncludeFile) +include(CheckIncludeFiles) +include(CheckSymbolExists) +include(CheckFunctionExists) +include(CheckLibraryExists) +include(CheckTypeSize) +include(CheckCSourceCompiles) + +check_include_files(dlfcn.h HAVE_DLFCN_H) +check_include_files(fcntl.h HAVE_FCNTL_H) +check_include_files(inttypes.h HAVE_INTTYPES_H) +check_include_files(memory.h HAVE_MEMORY_H) +check_include_files(stdint.h HAVE_STDINT_H) +check_include_files(stdlib.h HAVE_STDLIB_H) +check_include_files(strings.h HAVE_STRINGS_H) +check_include_files(string.h HAVE_STRING_H) +check_include_files(sys/mman.h HAVE_SYS_MMAN_H) +check_include_files(sys/stat.h HAVE_SYS_STAT_H) +check_include_files(sys/types.h HAVE_SYS_TYPES_H) +check_include_files(unistd.h HAVE_UNISTD_H) + +check_function_exists(fseek64 HAVE_FSEEK64) +check_function_exists(fseeko HAVE_FSEEKO) +check_function_exists(ftell64 HAVE_FTELL64) +check_function_exists(gmtime_r HAVE_GMTIME_R) +check_function_exists(gettimeofday HAVE_GETTIMEOFDAY) +check_function_exists(localtime_r HAVE_LOCALTIME_R) +check_function_exists(popen HAVE_POPEN) +check_function_exists(mkstemp HAVE_MKSTEMP) +check_function_exists(mkstemps HAVE_MKSTEMPS) + +macro(CHECK_FOR_DIR include var) + check_c_source_compiles( + "#include <${include}> + +int main(int argc, char *argv[]) +{ + DIR* d = 0; + return 0; +} +" ${var}) +endmacro(CHECK_FOR_DIR) +check_for_dir("dirent.h" HAVE_DIRENT_H) +check_for_dir("ndir.h" HAVE_NDIR_H) +check_for_dir("sys/dir.h" HAVE_SYS_DIR_H) +check_for_dir("sys/ndir.h" HAVE_SYS_NDIR_H) + +check_function_exists("nanosleep" HAVE_NANOSLEEP) +if(NOT HAVE_NANOSLEEP) + check_library_exists("rt" "nanosleep" "" LIB_RT_HAS_NANOSLEEP) +endif(NOT HAVE_NANOSLEEP) diff --git a/Build/source/libs/poppler/poppler-0.18.4/INSTALL b/Build/source/libs/poppler/poppler-0.18.4/INSTALL new file mode 100644 index 00000000000..56b077d6a0b --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/INSTALL @@ -0,0 +1,236 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free +Software Foundation, Inc. + +This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + +These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + +Some systems require unusual options for compilation or linking that the +`configure' script does not know about. Run `./configure --help' for +details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + +You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + +By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PREFIX', the package will +use PREFIX as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + +Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + +There may be some features `configure' cannot figure out automatically, +but needs to determine by the type of machine the package will run on. +Usually, assuming the package is built to be run on the _same_ +architectures, `configure' can figure that out, but if it prints a +message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + +If you want to set default values for `configure' scripts to share, you +can create a site shell script called `config.site' that gives default +values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + +Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). Here is a another example: + + /bin/bash ./configure CONFIG_SHELL=/bin/bash + +Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent +configuration-related scripts to be executed by `/bin/bash'. + +`configure' Invocation +====================== + +`configure' recognizes the following options to control how it operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/Build/source/libs/poppler/poppler-0.18.4/Makefile.am b/Build/source/libs/poppler/poppler-0.18.4/Makefile.am new file mode 100644 index 00000000000..60c82dca908 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/Makefile.am @@ -0,0 +1,118 @@ +ACLOCAL_AMFLAGS = -I m4 +DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc + +if BUILD_SPLASH_OUTPUT +splash_subdir = splash +splash_pc_file = poppler-splash.pc +endif + +if BUILD_CAIRO_OUTPUT +cairo_pc_file = poppler-cairo.pc +endif + +if BUILD_POPPLER_GLIB +glib_subdir = glib +glib_pc_file = poppler-glib.pc +endif + +if BUILD_POPPLER_QT4 +qt4_subdir = qt4 +qt4_pc_file = poppler-qt4.pc +endif + +if BUILD_POPPLER_CPP +cpp_subdir = cpp +cpp_pc_file = poppler-cpp.pc +endif + +if BUILD_UTILS +utils_subdir = utils +endif + +SUBDIRS = goo fofi $(splash_subdir) poppler $(utils_subdir) $(glib_subdir) test $(qt4_subdir) $(cpp_subdir) + +EXTRA_DIST = \ + README-XPDF \ + poppler.pc.in \ + poppler-uninstalled.pc.in \ + poppler-cairo.pc.in \ + poppler-cairo-uninstalled.pc.in \ + poppler-splash.pc.in \ + poppler-splash-uninstalled.pc.in \ + poppler-qt4.pc.in \ + poppler-qt4-uninstalled.pc.in \ + poppler-cpp.pc.in \ + poppler-cpp-uninstalled.pc.in + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = \ + poppler.pc \ + $(cairo_pc_file) \ + $(splash_pc_file) \ + $(glib_pc_file) \ + $(qt4_pc_file) \ + $(cpp_pc_file) + +# Add CMake buildsystem files here so they get added on make dist +EXTRA_DIST += \ + cpp/tests/CMakeLists.txt \ + cpp/CMakeLists.txt \ + glib/demo/CMakeLists.txt \ + glib/CMakeLists.txt \ + glib/poppler-features.h.cmake \ + qt4/src/CMakeLists.txt \ + qt4/tests/CMakeLists.txt \ + qt4/CMakeLists.txt \ + qt4/demos/CMakeLists.txt \ + test/CMakeLists.txt \ + utils/CMakeLists.txt \ + CMakeLists.txt \ + ConfigureChecks.cmake \ + cmake/modules/COPYING-CMAKE-SCRIPTS \ + cmake/modules/FindCairo.cmake \ + cmake/modules/FindFontconfig.cmake \ + cmake/modules/FindGLIB.cmake \ + cmake/modules/FindGObjectIntrospection.cmake \ + cmake/modules/FindGTK.cmake \ + cmake/modules/FindIconv.cmake \ + cmake/modules/FindLCMS.cmake \ + cmake/modules/FindQt4.cmake \ + cmake/modules/GObjectIntrospectionMacros.cmake \ + cmake/modules/MacroBoolTo01.cmake \ + cmake/modules/MacroEnsureVersion.cmake \ + cmake/modules/MacroOptionalFindPackage.cmake \ + cmake/modules/MacroPushRequiredVars.cmake \ + cmake/modules/PopplerDefaults.cmake \ + cmake/modules/PopplerMacros.cmake \ + cmake/modules/FindLIBOPENJPEG.cmake \ + config.h.cmake \ + poppler-cairo.pc.cmake \ + poppler/poppler-config.h.cmake \ + poppler-cpp.pc.cmake \ + poppler-glib.pc.cmake \ + poppler-qt4.pc.cmake \ + poppler-splash.pc.cmake \ + poppler.pc.cmake + + + +distclean-local: + if test "$(srcdir)" = "."; then :; else \ + rm -f ChangeLog; \ + fi + +ChangeLog: + $(AM_V_GEN) if test -d "$(srcdir)/.git"; then \ + (GIT_DIR=$(top_srcdir)/.git ./missing --run git log --stat) | fmt --split-only > $@.tmp \ + && mv -f $@.tmp $@ \ + || ($(RM) $@.tmp; \ + echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ + (test -f $@ || echo git log is required to generate this file >> $@)); \ + else \ + test -f $@ || \ + (echo A git checkout and git log is required to generate ChangeLog >&2 && \ + echo A git checkout and git log is required to generate this file >> $@); \ + fi + +.PHONY: ChangeLog + diff --git a/Build/source/libs/poppler/poppler-0.18.4/Makefile.in b/Build/source/libs/poppler/poppler-0.18.4/Makefile.in new file mode 100644 index 00000000000..1f4f007bb2a --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/Makefile.in @@ -0,0 +1,971 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(srcdir)/poppler-cairo-uninstalled.pc.in \ + $(srcdir)/poppler-cairo.pc.in \ + $(srcdir)/poppler-cpp-uninstalled.pc.in \ + $(srcdir)/poppler-cpp.pc.in \ + $(srcdir)/poppler-glib-uninstalled.pc.in \ + $(srcdir)/poppler-glib.pc.in \ + $(srcdir)/poppler-qt4-uninstalled.pc.in \ + $(srcdir)/poppler-qt4.pc.in \ + $(srcdir)/poppler-splash-uninstalled.pc.in \ + $(srcdir)/poppler-splash.pc.in \ + $(srcdir)/poppler-uninstalled.pc.in $(srcdir)/poppler.pc.in \ + $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ + TODO config.guess config.sub depcomp install-sh ltmain.sh \ + missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/define-dir.m4 $(top_srcdir)/m4/gtk-doc.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/introspection.m4 \ + $(top_srcdir)/m4/libjpeg.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h $(top_builddir)/poppler/poppler-config.h +CONFIG_CLEAN_FILES = poppler.pc poppler-uninstalled.pc \ + poppler-cairo.pc poppler-cairo-uninstalled.pc \ + poppler-splash.pc poppler-splash-uninstalled.pc \ + poppler-glib.pc poppler-glib-uninstalled.pc poppler-qt4.pc \ + poppler-qt4-uninstalled.pc poppler-cpp.pc \ + poppler-cpp-uninstalled.pc +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = goo fofi splash poppler utils glib test qt4 cpp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CAIRO_CFLAGS = @CAIRO_CFLAGS@ +CAIRO_FEATURE = @CAIRO_FEATURE@ +CAIRO_LIBS = @CAIRO_LIBS@ +CAIRO_REQ = @CAIRO_REQ@ +CAIRO_VERSION = @CAIRO_VERSION@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ +FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_CONFIG = @FREETYPE_CONFIG@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GLIB_REQ = @GLIB_REQ@ +GLIB_REQUIRED = @GLIB_REQUIRED@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +GTK_TEST_CFLAGS = @GTK_TEST_CFLAGS@ +GTK_TEST_LIBS = @GTK_TEST_LIBS@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ +INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ +INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ +INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ +INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ +INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ +INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ +LCMS_CFLAGS = @LCMS_CFLAGS@ +LCMS_LIBS = @LCMS_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBJPEG_LIBS = @LIBJPEG_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBOPENJPEG_LIBS = @LIBOPENJPEG_LIBS@ +LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ +LIBPNG_LIBS = @LIBPNG_LIBS@ +LIBS = @LIBS@ +LIBTIFF_LIBS = @LIBTIFF_LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MOCQT4 = @MOCQT4@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PC_REQUIRES = @PC_REQUIRES@ +PC_REQUIRES_PRIVATE = @PC_REQUIRES_PRIVATE@ +PDFTOCAIRO_CFLAGS = @PDFTOCAIRO_CFLAGS@ +PDFTOCAIRO_LIBS = @PDFTOCAIRO_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POPPLER_DATADIR = @POPPLER_DATADIR@ +POPPLER_GLIB_CFLAGS = @POPPLER_GLIB_CFLAGS@ +POPPLER_GLIB_DISABLE_DEPRECATED = @POPPLER_GLIB_DISABLE_DEPRECATED@ +POPPLER_GLIB_DISABLE_SINGLE_INCLUDES = @POPPLER_GLIB_DISABLE_SINGLE_INCLUDES@ +POPPLER_GLIB_LIBS = @POPPLER_GLIB_LIBS@ +POPPLER_MAJOR_VERSION = @POPPLER_MAJOR_VERSION@ +POPPLER_MICRO_VERSION = @POPPLER_MICRO_VERSION@ +POPPLER_MINOR_VERSION = @POPPLER_MINOR_VERSION@ +POPPLER_QT4_CFLAGS = @POPPLER_QT4_CFLAGS@ +POPPLER_QT4_CXXFLAGS = @POPPLER_QT4_CXXFLAGS@ +POPPLER_QT4_LIBS = @POPPLER_QT4_LIBS@ +POPPLER_QT4_TEST_CFLAGS = @POPPLER_QT4_TEST_CFLAGS@ +POPPLER_QT4_TEST_LIBS = @POPPLER_QT4_TEST_LIBS@ +POPPLER_VERSION = @POPPLER_VERSION@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +auto_import_flags = @auto_import_flags@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +create_shared_lib = @create_shared_lib@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +win32_libs = @win32_libs@ +ACLOCAL_AMFLAGS = -I m4 +DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc +@BUILD_SPLASH_OUTPUT_TRUE@splash_subdir = splash +@BUILD_SPLASH_OUTPUT_TRUE@splash_pc_file = poppler-splash.pc +@BUILD_CAIRO_OUTPUT_TRUE@cairo_pc_file = poppler-cairo.pc +@BUILD_POPPLER_GLIB_TRUE@glib_subdir = glib +@BUILD_POPPLER_GLIB_TRUE@glib_pc_file = poppler-glib.pc +@BUILD_POPPLER_QT4_TRUE@qt4_subdir = qt4 +@BUILD_POPPLER_QT4_TRUE@qt4_pc_file = poppler-qt4.pc +@BUILD_POPPLER_CPP_TRUE@cpp_subdir = cpp +@BUILD_POPPLER_CPP_TRUE@cpp_pc_file = poppler-cpp.pc +@BUILD_UTILS_TRUE@utils_subdir = utils +SUBDIRS = goo fofi $(splash_subdir) poppler $(utils_subdir) $(glib_subdir) test $(qt4_subdir) $(cpp_subdir) + +# Add CMake buildsystem files here so they get added on make dist +EXTRA_DIST = README-XPDF poppler.pc.in poppler-uninstalled.pc.in \ + poppler-cairo.pc.in poppler-cairo-uninstalled.pc.in \ + poppler-splash.pc.in poppler-splash-uninstalled.pc.in \ + poppler-qt4.pc.in poppler-qt4-uninstalled.pc.in \ + poppler-cpp.pc.in poppler-cpp-uninstalled.pc.in \ + cpp/tests/CMakeLists.txt cpp/CMakeLists.txt \ + glib/demo/CMakeLists.txt glib/CMakeLists.txt \ + glib/poppler-features.h.cmake qt4/src/CMakeLists.txt \ + qt4/tests/CMakeLists.txt qt4/CMakeLists.txt \ + qt4/demos/CMakeLists.txt test/CMakeLists.txt \ + utils/CMakeLists.txt CMakeLists.txt ConfigureChecks.cmake \ + cmake/modules/COPYING-CMAKE-SCRIPTS \ + cmake/modules/FindCairo.cmake \ + cmake/modules/FindFontconfig.cmake \ + cmake/modules/FindGLIB.cmake \ + cmake/modules/FindGObjectIntrospection.cmake \ + cmake/modules/FindGTK.cmake cmake/modules/FindIconv.cmake \ + cmake/modules/FindLCMS.cmake cmake/modules/FindQt4.cmake \ + cmake/modules/GObjectIntrospectionMacros.cmake \ + cmake/modules/MacroBoolTo01.cmake \ + cmake/modules/MacroEnsureVersion.cmake \ + cmake/modules/MacroOptionalFindPackage.cmake \ + cmake/modules/MacroPushRequiredVars.cmake \ + cmake/modules/PopplerDefaults.cmake \ + cmake/modules/PopplerMacros.cmake \ + cmake/modules/FindLIBOPENJPEG.cmake config.h.cmake \ + poppler-cairo.pc.cmake poppler/poppler-config.h.cmake \ + poppler-cpp.pc.cmake poppler-glib.pc.cmake \ + poppler-qt4.pc.cmake poppler-splash.pc.cmake poppler.pc.cmake +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = \ + poppler.pc \ + $(cairo_pc_file) \ + $(splash_pc_file) \ + $(glib_pc_file) \ + $(qt4_pc_file) \ + $(cpp_pc_file) + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +poppler.pc: $(top_builddir)/config.status $(srcdir)/poppler.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +poppler-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/poppler-uninstalled.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +poppler-cairo.pc: $(top_builddir)/config.status $(srcdir)/poppler-cairo.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +poppler-cairo-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/poppler-cairo-uninstalled.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +poppler-splash.pc: $(top_builddir)/config.status $(srcdir)/poppler-splash.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +poppler-splash-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/poppler-splash-uninstalled.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +poppler-glib.pc: $(top_builddir)/config.status $(srcdir)/poppler-glib.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +poppler-glib-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/poppler-glib-uninstalled.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +poppler-qt4.pc: $(top_builddir)/config.status $(srcdir)/poppler-qt4.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +poppler-qt4-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/poppler-qt4-uninstalled.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +poppler-cpp.pc: $(top_builddir)/config.status $(srcdir)/poppler-cpp.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +poppler-cpp-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/poppler-cpp-uninstalled.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-local distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-generic distclean-hdr \ + distclean-libtool distclean-local distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-pkgconfigDATA install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-pkgconfigDATA + + +distclean-local: + if test "$(srcdir)" = "."; then :; else \ + rm -f ChangeLog; \ + fi + +ChangeLog: + $(AM_V_GEN) if test -d "$(srcdir)/.git"; then \ + (GIT_DIR=$(top_srcdir)/.git ./missing --run git log --stat) | fmt --split-only > $@.tmp \ + && mv -f $@.tmp $@ \ + || ($(RM) $@.tmp; \ + echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ + (test -f $@ || echo git log is required to generate this file >> $@)); \ + else \ + test -f $@ || \ + (echo A git checkout and git log is required to generate ChangeLog >&2 && \ + echo A git checkout and git log is required to generate this file >> $@); \ + fi + +.PHONY: ChangeLog + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Build/source/libs/poppler/poppler-0.18.4/NEWS b/Build/source/libs/poppler/poppler-0.18.4/NEWS new file mode 100644 index 00000000000..99df10bd829 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/NEWS @@ -0,0 +1,1469 @@ +Release 0.18.4 + core: + * CairoOutputDev: Restore temporary clip used in CairoOutputDev::fill when painting a mask + * CairoOutputDev: Ensure paintTransparencyGroup uses same ctm as beginTransparencyGroup. Bug #29968 + * CairoOutputDev: Use fabs when comparing the transformed line width. Bug #43441 + * CairoOutputDev: Remove unused variable in CairoFontEngine.cc. Bug #45442 + * SplashOutputDev: Do not use 50Kb of stack in SplashXPath::addCurve. Bug #44905 + * JpegWriter: set image parameters after jpeg_set_defaults(). Bug #45224 + * OpenJPEG decoder: Set OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG if you have it. Bug #43414 + * Lexer: convert integer to real when overflow occurs. Bug #45605 + + glib: + * Various minor introspection and documentation improvements. Bug #44790 + * Fix return values. Bug #45440. Bug #45441 + * gtk-doc improvements. Bug #45549 + * Introspection improvements. Bug #45455 + + utils: + * HtmlOutputDev: Proper unicode support when dumping PDF outline. Bug #45572 + * HtmlOutputDev: Fix leaks. Bug #45805 + * HtmlOutputDev: Close li tags in generated outlines. Bug #45807 + * man pages: fix minor issues with hypens and % + + build system: + * automake: Link to lcms if needed + * automake: Fix build for builddir != srcdir. Bug #45434 + * automake: Improve moc detection when cross compiling + * Fix build with latest mingw-w64 headers. Bug #45407 + + qt4: + * remove non-existing 'qt' include dirs + +Release 0.18.3 + core: + * Do not fail if we are trying to save a file with Encrypt that has not been modified. KDE Bug #288045 + * Include .otf fonts when finding substitute fonts. Bug #44412 + * Fix stack overflow in PDFDoc::markObject(). Bug #44660 + * Include strings.h as we use memcpy. Bug #43558 + + utils: + * pdfunite: Properly initialize globalParams. Bug #44659 + * pdfseparate: Properly initialize globalParams + * Fix iniliazialization of GooString arguments + + build system: + * autoconf: Check for cairo-ft and other cairo backends. Bug #43969 + +Release 0.18.2 + core: + * Fix leak in GooString when resizing to a smaller string + * Fix crash if failing to parse the colorspace. Bug #42793 + * Make GfxColorSpace::parse accept dicts + + qt4: + * Use PDFDoc(wchar_t *, ...) on Windows. Bug #35378 + * Add missing include + * Minor fixes in documentation + + utils: + * pdftocairo: Fix crash when rendering only odd/even pages in a printing format + + build system: + * Fix pkg-config files + +Release 0.18.1 + core: + * PSOutputDev: Output PS that does not confuse libspectre + * PSOutputDev: Fix tiling pattern fill matrix. Bug #41374 + * PSOutputDev: Emit non repeating patterns just once + * PSOutputDev: Fix uncolored tiling patterns. Bug #41462 + * CairoOutputDev: Fix crash when using poppler_page_get_image() + * CairoOutputDev: Fix various setSoftMask bugs. Bug #41005 + + utils: + * pdftocairo: Flush/close files one we are done using them + * pdftocairo: Compile in Windows + + build system: + * CMake: Fix typo in option description + * CMake: Correctly include fontconfig include dir + * Remove poppler-cairo dependency from poppler-glib pkg-config file + + qt4: + * Minor fixes in documentation + +Release 0.18.0 + core: + * Fix small memory leak when dealing with marked content + * Remove DCTStream::getRawStream since Stream::getNextStream does the same + + utils: + * Rename pdfmerge to pdfunite + * Rename pdfextract to pdfseparate + * pdfseparate: Complain if %d is not present and it should + * Add pdfseparate and pdfunite man pages + + build system: + * Minor cleanup in regarding removed qt code + +Release 0.17.4 (0.18 RC) + core: + * SplashOutputDev: Compile when defining USE_FIXEDPOINT + * PNGWriter: Compile with libpng >= 1.5.0 + +Release 0.17.3 (0.18 Beta 3) + core: + * PSOutputDev: Use Patterns for tiling fill when PS level >= 2 + * PSOutputDev: Avoid using /PatternType if only one instance of the pattern is used + * PSOutputDev: Add poppler version as comment in the file + * CairoOutputDev: Set mime data for soft masked images (Bug #40192) + * CairoOutputDev: Assume printer pixel size is 1/600" when stroking 0 width lines (Bug #39067) + * CairoOutputDev: Use cairo_show_text_glyphs() when printing + * CairoOutputDev: Fix stroke patterns (Bug #11719) + * CairoOutputDev: Fix unique id mime data + * CairoOutputDev: fix stroking of very thin lines + * CairoOutputDev: align strokes when Stroke Adjust is true and line width <= 1 (Bug #4536) + * TextOutputDev: Add TextFontInfo::matches() + * Improve PNGWriter + * Rework writing of PDF files + + utils: + * Introduce pdftocairo - utility for creating png/jpeg/ps/eps/pdf/svg using CairoOutputDev + * Introduce pdfextract - utility to extract PDF pages + * Introduce pdfmerge - utility to merge PDF files + * Fix compilation warning + * pdftohtml: Support text rotation (Bug #38586) + * Update SEE ALSO section of man pages + + glib: + * Add poppler_page_get_text_attributes() + * Add text attributes information to text demo + + qt4: + * Add a way to get the fully qualified name of a FormField + * Minor documentation improvements + +Release 0.17.2 (0.18 Beta 2) + core: + * EmbeddedFile improvements + * don't gmalloc(-1) upon ftell failure + * Fix missing content in some pages (Bug #39637) + * Improve selection of CJK fonts (Bug #36474) + * SplashOutputDev: Implement overprint + * SplashOutputDev: Render dots for 0 length dashed lines (Bug #34150) + * SplashOutputDev: Fix bad memory access when not using antialias (Bug #37189) + * PSOutputDev: Make level2sep and level3sep write cmyk instead of rgb + * PSOutputDev: Make level1sep, level2sep and level3sep write gray instead of rgb for gray images + * Fix numerical overflow in libopenjpeg JPXStream (Bug #39361) + * Fix crash on truncated JPEG/DCT stream (Bug #36693) + * Make sure the dict is a page dict (Bugs #35925 #39072) + * Fix calculation of startXRefPos + * Handle missing startxref properly (Bug #38209) + * Parse the "Medium" modifier when asking fontconfig for a font + * Header cleanup + * Include cleanup + * Define cleanup + + glib: + * Add missing permissions flags to PopplerPermissions + * Add missing permission flags to info demo + * Update gtk-doc.make + * Add poppler_document_get_n_attachments() + + utils: + * pdftohtml: Fix encoding of PDF document metadata (Bug #37900) + * pdftohtml: Fix vertical spacing issues (Bug #38019) + * pdftotext: Fix -htmlmeta to correctly output U+2019 in PDF metadata (Bug #37900) + * pdftoppm: Implement overprint + + qt4: + * Rework EmbeddedFile internals + * Fix possible crash in test + +Release 0.17.1 (0.18 Beta 1) + core: + * Rework the way form fields tree is built + * Cleanup unused parameters/variables + + glib: + * Add JavaScript actions + * demo: Show javascript actions in actions view + + qt4: + * tests: Turn some assignments to bool into QVERIFY checks + +Release 0.17.0 (0.18 Alpha) + core: + * Splash: Implement tiling patterns + * Splash: Support slight hinting + * Splash: Radial shading improvements + * Splash: General speed improvements + * Arthur: Add Hinting API + * Cairo: Implement Type 4,5,6,7 shadings using cairo mesh gradients + * Cairo: Use the new cairo unique id to set the surface id when printing + * PS: Add PS level1 non standard binary output option + * PS: Allow setting the rasterization resolution + * Form support improvements + * Annotation support improvements + * General speed improvements + * Add support for handling ViewerPreferences + * Remove abiword output device + + utils: + * pdftoppm: Add -singlefile option (Bug #32025) + * pdftoppm: Add TIFF output format support (Bug #32027) + * pdftops: Add PS level1 non standard binary output option + * pdftops: Allow setting the rasterization resolution + * pdftoabw has been removed + + glib: + * Add poppler_form_field_get_action() (Bug 33174) + * Remove GDK API + * Remove test-poppler-glib + * demo: Add a tooltip with current selected character in text demo + * demo: show the activation action of form fields if there's one + + cpp: + * Add TIFF output possibility + * Add PNM output possibility + + qt4: + * Support slight hinting + * Form support improvements + + qt3: + * The Qt3 frontend has been removed + + tests: + * Merge splash and cairo tests into a single gtk-test tool + +Release 0.16.4 + core: + * Small improvements in Annot parsing + + glib: + * Add g_return macros to make sure index is correct in form field choice methods + * Fix a crash when a choice form field has no items selected in glib-demo + + utils: + * Small fixes to the pdftohtml manpage + * Fix copyright years + + qt4: + * Fix caption of push button fields + +Release 0.16.3 + core: + * Increase precision in PS output device + * Workaround bug when converting pdf to ps with level1 (Bug #31926) + * Fix crash in Splash output device in some broken pdf + * Fix infinite loop in some broken files + * Fix rendering of some substituted fonts (Bug #34522) + * Do not ask Freetype for 0x0 fonts in Splash output device (Bug #34602) + * Don't assume y1 > y3 for points of a highlight annotation (Gnome Bug #643028) + * Handle fontCIDType2OT when creating freetype font in Cairo output device (Gnome Bug #643273) + * Fix crash in some pdf that use ICC color space (Bug #34357) + + glib: + * Don't use an uninitialized local variable in demo + * Add some introspection markers + + qt4: + * Fix crash regression in unicodeToQString (again) + + utils: + * pdftotext: Do not crash when using -bbox + +Release 0.16.2 + core: + * Fix text extraction for some files + + qt4: + * Fix crash regression in unicodeToQString + +Release 0.16.1 + core: + * Fix colorspace issues in the Cairo backend (Bug #32746) + * Remove declaration of function without implementation + * Do not crash in case jpeg_create_decompress fails (Bug #32890) + * Fix variable access mismatch (Bug #33063) + * Fix converting some pdf to ps with -level1sep (Bug #32365) + * Fix line selection, dont check y for Line selections + * Include zlib header in PNGWriter.cc + * Fix leak in Splash backend when doing axial shaded fills + * Fix label to index conversion on multiple prefixes + + glib: + * Use NULL instead of FALSE for functions returning a pointer + * Fix memory leak in poppler_page_get_text_layout() for pages with no text + + qt4: + * Fix unicodeToQString() to correctly decode the Unicode sequence + +Release 0.16.0 + + core: + * Improve the correctness of radial shadings (Bug #32349) + * Adapt the zlib-based FlateStream code to API changes (Bug #32065) + * Make PreScanOutputDev be less agressive when deciding to rasterize (Bug #30107) + * Fix some warnings in newer gcc in Splash backend + * Fix the preliminary bbox/clip calculation in Splash backend + * Use A1 instead of A8 for imagemask in the Cairo backend + * Windows compile fixes + + utils: + * Do not return 99 (or 1) with -h, -v and -printenc (Bug #32149) + * Misc style improvements to pdftohtml code + * pdftohtml: Remove the -resolution flag introduced in 0.15.0 and fix the + existing -zoom flag + + build system: + * Add more warning flags to the default gcc builds + * Enable GObject introspection support in the cmake build system + + qt4: + * Windows compile fixes + +Release 0.15.3 (0.16 RC) + + core: + * Improve rendering of radial shadings + * Open a broken file (Bug #31861) + * Correct parsing of linearization table (Bug #31627) + * Find fonts inside patterns (Bug #31948) + * [win32] Simplify strtok_r implementation + * Use a std::vector<char> instead of a var-length-array of chars + * Fix crashes in broken files + * Use sets instead of arrays for looking for duplicate fonts + + cpp: + * Include correction + + utils: + * pdffonts: Remove duplicated code + +Release 0.15.2 (0.16 Beta 2) + + core: + * Improve shadings and antialias in the Splash backend (Bug #30436) + * Linearization improvements + * Small improvements to the Arthur backend + * Fix calculation of the size of some pages (Bug #30784) + * Fix crashes in broken documents + + qt4: + * Add Page::renderToPainter() method + * Add setDebugErrorFunction() method + + cpp: + * Add the hability to render pages to an image + + utils: + * Add -p flag to pdfimages + + build system: + * Remove -ansi flag for cywin and mingw + +Release 0.15.1 (0.16 Beta 1) + + core: + * Consider render value when colorizing text (Bug #2807) + * Improve rendering of Shading Type 6 and 7 + * Improve dict lookup speed for big dicts + * Fix multiple crashes in malformed PDF files + * Fix memory leak in in malformed PDF files + * Fix memory leak in the Catalog names + * Fix uninitialized uses on DCTScanInfo + * Fix a crash when drawing square/circle annots without a border (Bug #30580) + * Only clip boxes to mediabox if we are at the page level (Bug #30784) + * Do not omit the notdef glyph in the Splash backend + * Fix a crash when redering documents with invalid type 3 fonts in the Cairo backend + * Form improvements + * Add a method to get the PDF file identifier + + glib: + * Add more printing options to the API + * Add a method to get the PDF file identifier + * Add accessor for all PopplerDocument properties + * Form improvements + * Documentation improvements + * Improvements to the demo + + qt4: + * Add a callback to know which page has been printed + * Add a method to get the PDF file identifier + * Optimize GooString to QString conversion + * Some more autotests + * Update Doxyfile (enables .qch file for assistant) + + build system: + * Require Cairo 1.10 + + utils: + * pdftohtml: Add -s option to generate a single HTML page + * pdftotext: Add -bbox option + + cpp: + * Add the possibility of loading a document from raw data + * Add a method to get the PDF file identifier + * Improve Unicode to ustring conversion + * Documentation improvements + * Update Doxyfile + +Release 0.15.0 (0.16 Alpha) + + core: + * Remove exception support + * Improve creation of Annotations + * Fix failure to parse PDF with damaged internal structure. (Bugs #29189 #3870) + * Add a way to access the raw text of a page + * Speed improvements when reading multiple characters from a given Stream + * Speed improvements in the Splash backend + * Speed improvement in gray color space calculations + * Speed improvement in ICC color space calculations + * Speed improvement when reading some fonts + * Make GBool a bool instead of an int + + glib: + * Add GObject introspection support + * Improve creation of Annotations + * Add a way to get the coordinates of each character of a page + * Add a way to get the page label + * Documentation improvements + * Support password protected documents in the demo + * Support for selection in the demo + * Support for adding annotationss in the demo + * Misc improvements in the internals + + qt4: + * Add a way to access the raw text of a page + * Recognize "Print" as named action + * Documentation improvements + + build system: + * Add option for autogen.sh to skip configure + * Nicer autogen.sh output + * Improvements when build the glib frontend with CMake + + utils: + * pdftohtml: Use splash instead of external gs invocation to render the background + * pdftohtml: Let the user specify the resolution of the background. (Bug #29551) + + cpp: + * Add a way to access the raw text of a page + +Release 0.14.3 + + core: + * Tell Windows we are writing/reading binary data from stdout/stdio (Bug #29329) + * Fix crash when parsing some Movie elements (KDE Bug #249586) + +Release 0.14.2 + + core: + * Fix rendering of some documents involving tilingPatternFill in the cairo output device + * Improve rendering of some annotations + * Handle ColorTransform in DCT streams when using libjpeg (Bug #28873) + * Fix crash in the ps output device in some files (KDE Bug #246269) + * Fix crash in some malformed files (Bug #28842) + + build system: + * Improve build on windows + * Add uninstalled .pc file support when using autoconf + + glib: + * Fix a crash when a layer doesn't have a name (Bug #28842) + + utils: + * Fix padding of names in pdftoppm + +Release 0.14.1 + + core: + * Add ObjectStream caching, makes opening some files ten times faster (Bug #26759) + * Fix crash when writing to negative coordinates (Bug #28480) + * Check objects are the type we want them to be when parsing GfxICCBasedColorSpace + * Optimize Splash::compositeBackground + * Optimize color space calculations by using sqrt instead of pow 0.5 + * Fix crash in JBIG2Stream with malformed documents + + build system: + * Make sure we ship two needed cmake files + * Do not distribute glib/poppler-features.h and poppler/poppler-config.h + * Improve compilation with Sun Studio + * Fix linking of the cpp frontend when using autotools + + glib: + * Fix links/annots area for some documents (Bug #28588) + * Fix poppler_page_find_tex() when called more than once (Bug #27927) + + utils: + * Add -cropbox to pdftoppm manual + +Release 0.14.0 + + core: + * Fix crash when parsing pdf with broken JBIG2Stream (Bug #28170) + * Do not follow loops blindly when parsing XRef (Bug #28172) + * Allow quality & progressive mode to be utilised in JpegWriter + * Fix potential assert in Lexer code (KDE bug #240208) + * Fix opening of files whose /P is stored as unsigned integer + * Do not exit() when trying to allocate memory for the XRef fails + + cpp: + * Minor bugfixes + * Documentation improvements + + build system: + * Fix build in mingw32 when using autotools + * Preserve compiler flags when using cmake + +Release 0.13.4 (0.14 RC 1) + + core: + * Include standard float.h instead of unportable values.h + * Fix first color stop offset of linear gradients. Bug #27837 + * Fix compilation if JPEG nor PNG is used + * Use fabs for doubles instead of abs + * Use strtok_r instead strtok + * Adjust bbox for line annots when y1 = y2 + * Some fixes and regressions in the cairo output device + * Better check of overlapping of table cells when selecting text + + cpp: + * Make the pkg-config files really work + * Fix in/out buffer sizes in some functions + +Release 0.13.3 (0.14 Beta 2) + + core: + * Fix roll optimization in the PS function interpreter + * Correctly parse numbers with '+' sign. Gnome bug #614549 + * Add support for cached files + * Add support for reading a cached file from stdin + * Add HTTP support using libcurl, disabled by default + * Add some const correctnes to GooString + * Rework DCTStream error handling. Bug #26280 + * Use current fill_opacity when drawing soft masked images in Cairo backend. Gnome bug #614915 + * Use the topleft of the Rect of text annots to draw + * Fix saving update docs that have a compressed xref table. Bug #27450 + * Parse varius part of the document catalog on demand + * Implement colorizing image masks with pattern colorspace in Cairo backend + * Fix a crash when rendering 0x0 images in Cairo backend + * Check pattern status after setting matrix when rendering images + * Improve text selection/extraction order. Bug #3188 + * Fix pattern size when bbox is not at 0,0 + * Improve colorizing text and masks in pattern colorspace. Bug #27482 + * Silence some Illegal entry in bfrange block in ToUnicode CMap. Bug #27728 + + utils: + * Add the -o[dd] and -e[ven] options to pdftoppm + * Allow read from stdin using the new cached files feature + * Fix crash in pdftohtml when output filename was shorter than 5 characters + + glib: + * Use existing cairo api when rendering to a pixbuf + * Compile with -DGSEAL_ENABLE. Bug #27579 + +Release 0.13.2 (0.14 Beta 1) + + core: + * Improve Movie support + * Fix experimental Arthur backend to compile when if Splash backend is disable + * Fix usage of some streams in the Cairo backend + * Small improvements in the experimental Arthur backend + * Minor annotation improvements + * Rework LinkRendition to follow the spec + * Add support for Set-OCG-State actions + * Correctly initialize the grayscale softmask color in the Splash backend + * Correctly initialize actualText in TextOutputDev when initialization fails + * Various MSVC fixes + + glib: + * Add support for Movie objects + * Add support for Screen annotations + * Add support for rendition actions + * Add support for OCG State actions + * Improvements to the demo + + qt4: + * Always compile the experimental Arthur backend + * Minor speed improvement in QPainter usage + * Add a search overload that takes doubles instead of QRectF + + cpp: + * Fix iconv usage + * use gmtime() when gmtime_r() is not available + * Fix building in autotools in windows + * {from,to}_utf_8() -> {from,to}_utf8() + + build system: + * Multiple CMake build system fixes + * Fix of some DIST targets in autotools + * Make finding of Qt3 in autotools use pkg-config + +Release 0.13.1 (0.14 Alpha 2) + + core: + * New C++ frontend to interface with Poppler using only STL + * Use the right matrix for the mask in drawMaskedImage in Cairo output device. Bug #16906 + * Fix downscaling images when document is rotated in Cairo output device. Bug #26264 + * GooVector rewrite, old version had "unknown" origins/license + * Fix use after free in a error condition + * Improve handling of broken commands. Bug #24575 + * Fix potential use after free in Cairo output device. + * Fix regression in painting. Bug #26243 + * Improve handling of FontConfig. Bug #26544 + * Only assume the OC is not visible if it exists and is set to no. Bug #26532 + * Fix a potential crash in Splash font handling on out of memory conditions + * Implement writeImgFile for splashModeXBGR8 + * Several speed increases (around 40% in some documents) in the Splash output device + * Improve printing on the Cairo output device + * Do not use '\' character in PostScript names + * Omit writing of embedded fonts into temporary files in the Cairo output device. Bug #26694 + * Improve filtering of some images in the Cairo output device. Bugs #25268, #9860 + + utils: + * pdftoppm: Only swap w with h if rotation is 90 or 270 + + build system: + * Add POPPLER_WITH_GDK in cmake build system. Bug #26247 + * Fix typo: "MULTITHREAD" -> "MULTITHREADED in cmake build system + * Wrap #include <jpeglib.h> in extern "C" to fix build. Bug #26351 + * Add the Win32-specific ENABLE_RELOCATABLE option to cmake build system + * Reflect that poppler-glib needs cairo now in cmake build system + * Use pkgconfig to detect libpng on autotools build system + * Detect the need for nanosleep in solaris in cmake build system. Bug #26650 + +Release 0.13.0 (0.14 Alpha) + + core: + * Improvements to Annotation rendering. Bug #23108 + * Do not give an error when opening files without pages. Bug #24720 + * Try to read streams without Length + * Do not crop the transformation matrix at an arbitrary value. Bug #25763 + * Make poppler (optionally) relocatable on Windows + * Use a small object cache in GfxResources to cache GState objects + * Reduce the number of redundant pattern creations in the Cairo output device + * Use colToDbl() to avoid rounding error in the Cairo output device + * Fix problems with mask handling in the Cairo output device. Bug #8474 + * Use a better scale down implementation in the Cairo output device + * Various optimizations to the Splash output device + * Add the possibility to use floats instead of doubles in the Splash output device. Bug #25578 + * Write out fixed-content portion of Type 1 fonts in the PS output device + + build system: + * Improvements to the CMake build system + * Enable AM_SILENT_RULES by default in autotools + * Require glib 2.18 + * Require GTK+ 2.14 + * Make fontconfig optional with mingw compiler + * Remove makefile.vc + + glib: + * Add support for file attachment annotations + * Improvements to the demo + * Use TextOutputDev to get TextPage when we haven't rendered the page + * Remove support for the Splash output device + + utils: + * pdftoppm can now write to jpeg + * pdftoppm embeds the correct resolution in png and jpeg files + + qt4: + * Minor improvements to the tests + +Release 0.12.3 + + core: + * Be more lenient with /Decode key on images. Bug #17439 + * Correctly initialize fileName in LinkGoToR. Bug #25221 + * Improve the reconstruction of the XRef for broken files + * [Cairo backend] Do not crash on malformed files. Bug #24575 + * Accept Fontname if FontName is not present. KDE bug #217013 + * Make PSOutputDev code a bit more resilient + * Fix writing of null objects. Bug #25465 + * [Cairo backend] Fix crash in some documents. GNOME bug #603934 + * Correctly initialize profileCommands in Gfx constructor + + build system: + * Check for openjpeg in the C++ part as it uses bool in the header. Bug #25103 + +Release 0.12.2 + + core: + * Fix a memory leak when converting to PostScript + * Fix crash when reading a font fails. Bug #24525 + * Make the ICC cache per page instead of global. Bug #24686 + * Do not accept negative interval lengths in the page labels tree. Bug #24721 + * Do not crash on files Aspect of Movie objects are reals instead of integers. Bug #24733 + * Do not render patterns when using CairoImageOutputDev + * Allow Transitions dictionary to be a Ref + * Do not crash if jpeg_start_decompress fails. KDE bug #214317 + + glib: + * Fix CVE-2009-3607 + + qt4: + * Use '.' in the annotations XML instead of the decimal separator of the current locale + +Release 0.12.1 + + core: + * Fix compilation on some compilers + * Only initialize the font list once in Windows32/MSVC + * Do not crash on fonts without CharCodeToUnicode. Bug #24036 + * Fix regression due to not setting LC_NUMERIC anymore + * Improve realibility for Streams with broken Length. Bug #6841 + * Write the Info into the trailer dict if there is one. Bug #24091 + * Do not crash when saving files that come from a stream without name. Bug #24090 + * Improve relability of the save function + * Fix the Length value if it was wrong when saving + * Fix includes for those using internal headers + * Rework how hinting is used in the splash backend. It is disabled by default now + * fix constructor of DCTStream when using internal decoder + * Security fixes based xpdf 3.02pl4 + + qt4: + * Add the possibility of setting wheter to use or not font hinting + * Add a way for converters to return more exact errors they had when converting + * Check the document is not locked when converting to PS + + build system: + * Compile on Cygwin + * Use _WIN32 instead of WIN32. Bug #24259 + * Add the possibility to pass LIB_SUFFIX when using CMake + +Release 0.12.0 + + core: + * Fix printf format security warnings + * Improve rendering of radial shadings. Bug #20238 + * Better fallback when there's a font type mismatch. Bug #17252 + * Do not crash on attachments without data stream. Bug #10386 + * Fix infinite loop in JBIG2Decoder. Bug #23025 + + build system: + * Minimizes pkg-config dependencies for Qt frontends + * Add automake 1.11 support + * Use the newest automake found and not the oldest + * Support AM_SILENT_RULES when using automake 1.11 + + utils: + * Add common options to pdftoabw + +Release 0.11.3 (0.12 RC 1) + + core: + * Optimization in the Cairo renderer for some fonts + * Do not apply masks when fill color space mode is csPattern in the Cairo renderer. Bug #22216 + * Check for overflow when parsing integers. Bug #23078 + * Do not save the font file twice for FreeType fonts in the Cairo renderer. Bug #20491 + * Use current fill_opacity when drawing images in the Cairo renderer + * Fix alpha rendering in some files in the Splash renderer. Bug #22143, #22152 + * Implement tiling patterns in the Cairo renderer + * When converting a cm matrix to PS write 4 significant digits for numbers < 1 not 4 decimals. Bug #23332 + * Fix changing of locale, now poppler no longer changes LC_NUMERIC to "C" + * Return PDF version as two integers instead of as a double + + Qt4: + * Addition of the Color Management API + * Small fix to documentation + * Fix backwards text search + + utils: + * Add the -png flag to pdftoppm to output to PNG + +Release 0.11.2 (0.12 Beta 2) + + core: + * Make DecryptStream return sane values for getPos(). Bug #19706 + * Fix bug when printing pdf with multiple page sizes in duplex mode + * Initilize AnnotColot properly when the Array is not correct + * Fix crash on some files with forms. Bug #22485 + * Fix crash in files with invalid embedded files. Bug #22551 + * Improve FileSpec attribute parsing + * Cairo output device improvements. Bugs #10942, #18017, #14160 + * Implement blend modes in cairo backend + * Handle fontType1COT fonts in CairoFontEngine + * Fix generation of PS for some files. Bug #18908 + * Don't use byte_lookup table when color space doesn't support getLine methods. Bug #11027 + * Fix rendering of PDF files with malformed patterns. Bug #22835 + * Add the possibility of disabling font substitution in pdftops. Bug #23030 + * Fix some radio buttons not being detected as such + + glib: + * Improvements to the demo + + Qt4: + * Improvements to the demo + + build system: + * Use gtkbuilder rather than libglade for some tests + + utils: + * Fix bug with noCrop parameter in pdftops + +Release 0.11.1 (0.12 Beta 1) + + core: + * Support colorizing text in pattern colorspace. Bug #19670 and #19994 + * Add the possibility of forcing no hinting of fonts in the Splash backend + * Support multiple page sizes when converting to PS. Bug #19777 + * Also tokens with leading 00 when parsing the char to unicode map. Bug #22025 + * Improvements of rendering speed in documents using PS transformations a lot. Bug #21562 + * More work on Annotations support + * Use Interpolate flag to decide whether applying image interpolation during rendering. Bug #9860 + * Handle Streams in CMap definitions. Bug #22334 + * Fix some bugs in JBIG2Stream handling + * Fix dashed line in page 1 of bug 20011 + * Fix exit(1) when rendering a file + * Fix pdftops crash on file from KDE bug #174899 + * Fix PS generation in some files. Bug #20420 + * Do not create the GfxColorTransform if the lcms could not be created. Bug #20108 + * Check Mask entries are int before using them, if they are real cast to int and try to use them. Bug #21841 + * Use the correct value when creating the V field for form combo boxes + * Give an error when using level1sep in pdftops without having CMYK support. Bug #22026 + * Don't include lcms.h in GfxState.h + * Fix splashColorModeNComps to correctly include all values for each SplashColorMode + * Add splashClearColor that assigns white to the given colorptr + * Kill support for specifying extension in openTmpFile. Bug #21713 + * Fix "Conditional jump or move depends on uninitialised value". Bug #20011 + + glib: + * Add poppler_annot_markup_has_popup() + * Hyphenate UTF-8 and UTF-16BE. Bug #21953 + * Use g_strerror instead of strerror. Bug #22095 + * Fix a crash when a destination points to an invalid page + * Improvements to the demo + + Qt4: + * Add LinkDestination::destinationName() + * Do not try to resolve named destinations for GoTo links pointing to external documents + * Add Page::thumbnail() + * Improvements to the demo + * Improvements to the documentation + + build system: + * Build fix for MSVC + * Better lcms cmake check comming from kdelibs + * Use pkgconfig for autotools lcms check + * Remove unneeded files from repo. Bug #22094 + +Release 0.11.0 (0.12 Alpha) + + core: + * Add initial support for color management + * Remove case-insensitive matching of filenames in PDFDoc constructor + * Fix extraction of some ActualText content + * More work on Annotations support + * Improve font rendering in Cairo output device + * Fix bug in cairo backend with nested masks + * Fix cairo luminosity smask rendering + * Add optionally text support to Cairo output device + * Add the possibility of setting the datadir on runtime + * Return an error code instead of a boolean when saving + * Make the font scanner more versatile + * Small opimization in documents that use PostScriptFunction transforms + * Minor optimization to Stream handling + * Fix some compile warnings + + glib: + * Optional content support + * More work on Annotations support + * Improvements to the demo + * Documentation improvements + * Fix build when compiling with GTK_DISABLE_SINGLE_INCLUDES + + Qt4: + * Support URI actions for Table Of Contents items + * Documentation improvements + * Improvements to the demo + * Add a FontIterator for iterating through the fonts of the document + + utils: + * Allow the use of cropbox in pdftoppm + * Make pdftohtml output png images when the image stream is not a jpeg + * Make pdftotext accept cropping options like pdftoppm + * Support rendering non-square pixels in pdftoppm + + build system: + * Require Cairo 1.8.4 for the Cairo output device + * Require CMake 2.6 when using the CMake build system + * Optionally require libpng for pdftohtml + * Optionally require libcms for color management + +Release 0.10.6 + + core: + * Fix problems that happen when parsing broken JBIG2 files. + CVE-2009-0799, CVE-2009-0800, CVE-2009-1179, CVE-2009-1180 + CVE-2009-1181, CVE-2009-1182, CVE-2009-1183, CVE-2009-1187, CVE-2009-1188 + * Fix parsing of incorrect border arrays. Bug #19761 + * Fix clip test for fonts. Bug #20950 + * Fix getGlyphAdvance to behave correctly on font size changes. Bug #20769 + * Misc build fixes + + build system: + * Fix the Qt4 version we need + +Release 0.10.5 + + core: + * Read the UF entry if present and prefer it over F in Filespec dictionary + * Fix typo that was making CairoOutputDev crash on some files. Bug #17337 + * Make JBIG2Stream more robust to corrupt input data + * Do not blindly follow loops parsing OutlineItem. Bug #18364 + * Set up the error manager before calling jpeg_create_decompress. Bug #20484 + * Check there is an optional content config before using it. Bug #20587 + * Fix rendering of some PDF with OpenType fonts. Bug #20605 + + build system: + * Yet more support for build on windows + * Use AC_CHECK_HEADER to find headers. Bug #20538 + * Check for pkgconfig before using it + * General autotools improvements + +Release 0.10.4 + + core: + * Fix a memory leak when asking for a document-level JS + * Do not crash in some PDF we do not parse correctly. Bug #19702 + * Fix crash on unexepcted form Opt value. Bug #19790 + + utils: + * Fix pdfimages to extract i color components per pixel jpeg images. Bug #19789 + +Release 0.10.3 + + core: + * Fix a crash on documents with malformed outline. Bug #19024 + * Fix leak on AnnotScreen destructor. Bug #19095 + * Fix wrong PS generation when a large image is in Patterns. Bug #18908 + * Remove BaseFile.h it was never used. Bug #19298 + * Improve document saving + * Fix PS generation of PDF with malformed font Length2 definition + * Fix a leak while parsing annotations + * Fix rendering of some checkboxes + + Qt4: + * Fix positioning of Form rects on PDF with cropbox + * Fix positioning of Annotation rects on PDF with cropbox. Bug #18558. + * Small documentation improvements + * Make Document::fonts() work when called more than once. Bug #19405 + + build system: + * CMake: look harder for openjpeg + * CMake: update the poppler core headers installation + * Autotools: do not install Function.cc as it's not a header + + Qt: + * Fix deserialization of links right coordinate + +Release 0.10.2 + + core: + * Fix a crash when selecting text in word mode + * Fix a crash in some malformed documents (second argument of opMarkPoint is not a dictionary) + * Ensure cairo font matrix is invertable. Fixes bugs #18254 and #18429 + * Fix a memory leak (Bug #18924) + + Qt4: + * Fix deserization of links right coordinate + + misc: + * Fix build on Solaris 10 + Sun Studio 12 + * Compile with -pedantic + +Release 0.10.1 + + core: + * Improvements in Optional Content support + * Small fix in Form support + * Fix memory leak in case of error + * Fix potential crash on text search + * Try render documents with invalid indexed color space parameters. Bug #18374 + * Fix crash on text extraction when poppler-data is not installed. Bug #18023 + + Qt: + * Fix two memory leaks + + Qt4: + * Small documentation improvement + * Fix memory leak in the demo code + +Release 0.10.0 + + core: + * Fix crashes on PDF using Stitching or Axial Shading painting + * Fix rendering of PDF with Type1 fonts that have more than + one encoding definition per line + * Do not try to save documents that have Encryption as we + do not support that and the user ended with a broken file + * Fix crash on files with OptionalContentGroup but no Name + + Qt4: + * Fix the area of the links to be correctly reported on rotated documents + + misc: + * Mingw+Msys should work + +Release 0.9.3 (0.10 RC 2) + + core: + * Fix rendering regression on some embedded fonts + * Fix rendering regression of some special fonts + * Fix crash on documents with bogus jpeg data + + Qt4: + * The printing flag defaults to true on PSConverter + * Documentation improvement + + utils: + * Fix regression that made HmtlOutputDev ignore jpeg images + + misc: + * Improve compilation on mingw + +Release 0.9.2 (0.10 RC 1) + + core: + * Fix conversion to PS some files (bug #17645) + * Small Form fixes + * Small JS fixes + * Improve memory usage of the cairo renderer + + utils: + * Fix mismatched free/delete in pdftohtml + * Fix memory leak in pdftohtml + * Fix crash in pdftohtml + + glib: + * Fix a crash in forms demo + + misc: + * Compile with -pedantic + +Release 0.9.1 (0.10 Beta 2) + + Core: + * Fix crash on some AESv2 encrypted files (bugs #13972, #16092, #17523) + * Improve parsing of broken files (bug #17568) + + glib frontend: + * Minor improvements to the demo application + + utils: + * pdftohtml: Generate the outline file in the same place + of the other generated files (bug #17504) + +Release 0.9.0 (0.10 Beta 1) + + Core: + * Initial JavaScript support + * Annotation improvements + * Improvements in the Arthur based renderer + * Improvements in the Cairo based renderer + * Added a JPEG2000 decoder based on OpenJPEG + * Small fixes in ActualText implementation + * Fix jpeg rendering when not using the libjpeg based decoder + * Movie fixes + * Do not get out of memory on documents that specify huge fonts + * Emulate Adobe Reader behaviour on documents with duplicate keys in Dictionaries + * Forms improvements + + Qt4 frontend: + * Annotation improvements + * Forms improvements + * Add the possibility of extracting embedded fonts + * Initial Movie support + * Documentation improvements + * Small improvements in the PS exporter + + glib frontend: + * Annotation improvements + * Attachment fixes + + utils: + * updated man pages + * Added -listenc to pdfinfo and pdftotext + +Release 0.8.7 + + Core: + * Fix regression in Form rendering + * Fix memory leak in the cairo backend + +Release 0.8.6 + + Core: + * Call error() when font loading fails + * Be less strict parsing TTF tables (bug #16940) + * Fix crash due to uninitialized variable + + Qt 4 frontend: + * Make the paper color setting working as it should + * Make sure to use the correct page width/height for form widgets coordinates + +Release 0.8.5 + + Core: + * Fix crash on PDF that define a page thumbnail but it's not a Stream + * Fix crash when Annots object is not of the desired type + * Fix crash when obtaining fonts in PDF where XObjects link themselves in loops + * Fix crash on documents with an IRT object + * Saving should work much better now + * Plug some memory leaks in Annotation handling + + Utils: + * pdftohtml: Don't crash on documents that specify an invalid named dest for a link + * pdftohtml: Make html output to keep all the spaces with   + * pdftohtml: Improve a bit text layout + * pdftohtml: Make xml output valid xml + +Release 0.8.4 + + Core: + * Fix leak in ABWOutputDev.cc + * Fix uninitialized variable that broke file saving in some cases + * Use a single global FT_Library in CairoOutputDev. + Fixes some crashes in CairoOutputDev. + + Qt 4 frontend: + * Fix saving over existing files + + build system: + * Make sure Qt4 moc is used to generate moc files in Qt4 frontend + +Release 0.8.3 + + Core: + * Fix crash when reading some PDF with annotations + * Fix crash on PDF that reference Optional Content elements that don't exist + * Fix leaks on error conditions + * Do not limit CharCodeToUnicodeString to 8 characters + * Support for surrogates outside the BMP plane + + Qt 3 frontend: + * Fix crash when reading PDF with password + * Fix leak when calling scanForFonts() + + Qt 4 frontend: + * Fix the text() method + + Splash renderer: + * Fix compilation with --enable-fixedpoint + +Release 0.8.2 + + core: + * Fix call broken by a fix introduced in 0.8.1 + +Release 0.8.1 + + core: + * Do not call FT_Done_Face on a live cairo_font_face_t as it might cause crashes + * Do not take into account Colorspace resource subdictionary for image XObjects + * Downsample 16 bit per component images to 8 bit per component so they render + + build system: + * Link to pthread when the system needs it + + windows: + * Fix comparing against NULL instead against INVALID_HANDLE_VALUE when calling FindFirstFile + +Release 0.8.0 + + * Fix caching of members in the glib frontend causing issues with rendering + * Change glib public api to have a correct naming + * Some better error handling on corner cases + * Check the document stream is seekable when opening it + * Build fixes with autotools and with cmake + * Fix infinite recursion on some malformed documents when consulting the fonts + * Fix possible crash when asking for Movie contents + +Release 0.7.3 (0.8 RC 2) + + * Fix regression in Splash renderer + * Fix off-by-one write in Splash + * Plug some minor leaks in Optional Content code + * Improve error handling when creating a document in the glib frontend + +Release 0.7.2 (0.8 RC 1) + + Major Changes: + * Improve font matching not forcing default values onto Fontconfig + * Add preliminary annotations support in the glib frontend + * Initial Movie support in the core + * Make GDK dependency optional in glib bindings + + Minor Changes: + * Make the core able to read mime types of embedded files + * Qt4 API for accessing mime types of embedded files + * Handle correctly check state of optional content groups + regarding parents state + * Avoid setting singular CTM matrices on the Cairo backend + * Improved Qt4 API to get character position + * Qt4 api documentation improvements + * Qt4 minor stability fixes + * Proper lib64 Qt detection + * Fix build when compiling without cairo support + +Release 0.7.1 (0.8 Beta 2) + + Major Changes: + * Really distribute CMake files as optional build tool + * Initial Optional Content support in core and in the Qt4 frontend + + Minor Changes: + * Allow grouped checkboxes to be selected individually + * Qt4 demo program improvements + * Keep cairo and cairo_shape consistent + * Safety checks on Splash renderer so that it does not draw outside the allocated bitmap + * Do not try to display bitmaps of invalid size + * Fix building with exceptions + * Improvements for building with MSVC and CMake + +Release 0.7.0 (0.8 Beta 1) + + * Saving support + * Partial annotation support + * Forms improvements + * Add support for ActualText entries + * Display characters outside of unicode BMP with TT font + * CJK rendering fixes + * Implement Adobe Glyph Naming convention for fonts + * CMake as optional build tool + * Better font scaling for non embedded fonts + * Preserve PDF page labels when we output as postscript + +Release 0.6.4 + + Qt4 frontend: + * Fix crash on links that point to a non existant page + * Make Document::renderHints return the correct render hints + * Fix infinite loop when parsing LineAnnotation + + core: + * Fix crash in the Splash renderer when T3 fonts are badly defined + * Draw underlined Links correctly + + utils: + * Fix two use after free bugs in HtmlOutputDev.cc + + build system: + * Fix build on mingw32 + + tests: + * Distribute the glade file of pdf-inspector + +Release 0.6.3 + + core: + * Fix crash in extra debug code + + glib frontend: + * Make sure passwords are passed correctly to poppler core + + Qt frontend: + * Fix crash on documents that specify an empty date + + build system: + * Disable gtk tests if the user disabled glib frontend + +Release 0.6.2 + + poppler core: + * Fix CVE-2007-4352, CVE-2007-5392 and CVE-2007-5393 + * Fix a crash on documents with wrong CCITTFaxStream + * Fix a crash in the Cairo renderer with invalid embedded fonts + * Fix a crash with invalid TrueType fonts + * Check if font is inside the clip area before rendering + it to a temporary bitmap in the Splash renderer. Fixes crashes on + incorrect documents + * Do not use exit(1) on DCTStream errors + * Detect form fields at any depth level + * Do not generate appearance stream for radio buttons that are not active + * mingw fixes + + build system: + * Require fontconfig >= 2.0 + * builddir != srcdir fixes + + Qt4 frontend: + * Improved documentation + + misc: + * Fix FSF address + +Release 0.6.1 + + poppler core: + * Fix printing with different x and y scale + * Fix crash when Form Fields array contains references to non existent objects + * Fix crash in CairoOutputDev::drawMaskedImage() + * Fix embedded file description not working on some cases + + Qt4 frontend: + * Fix printing issue + * Avoid double free + * Fix memory leak when dealing with embedded files + + glib frontend: + * Fix build with --disable-cairo-output + * Do not return unknown field type for signature form fields + + build system: + * Support automake-1.10 + * More compatible sh code in qt.m4 + + utils: + * Fix build on Sun Studio compiler + +Release 0.6 + + - CairoOutputDev fixes + - Allow pdftoppm to read/write from stdin/stdout + - API work on Qt4 frontend + - Fix pdfimages produces inverted image for black & white image + - Fix error on the NFKC text matching routine + - Add support for word and line selections + - Do not enforce %%EOF at the end of file + - Pad zeroes instead of aborting when rendering 1-bit images + and the stream is too short + - Update glib bindings documentation + +Release 0.5.91 (0.6 Release Candidate 2) + + - Various memory leaks fixed + - Compile with --enable-fixedpoint. Bug #11110 + - Header cleanup + - Remove dependency on debugxml. Bug #11187 + - Allow access to document metadata in glib and qt4 frontends + - Several glib API frontend improvements + - Fix crash on accessing embedded files + - Build on Sun Force compiler + - Render '*' instead of the actual content in password form fields + - Fix pdftohtml complex output. Bug #9746 and #11610 + - Windows build fixes + - Improve Japanese font support. Bug #11413 + - Do not exit the program on files that confuse libjpeg + - Update required cairo version to 1.4 + - Fix CVE-2007-3387 + +Release 0.5.9 (0.6 Release Candidate) + + - Merge xpdf 3.02 changes + - Qt4 frontend is not marked anymore as unstable + - Support for Sound objects + - Support for Opening/Closing page actions + - Support for page duration + - Improve PS Tokenizer performance thanks to Scott Turner + - Various speed ups by Krzysztof Kowalczyk + - Beginning of Interactive Form support by Julien Rebetez + - xpdfrc is no longer used for anything + - Add AbiWord output device and pdftoabw program by Jauco Noordzij + - Fix security issue MOAB-06-01-2007 + - Lots of bugs fixed + +Release 0.5.4 + + - Automatically read in CJK encoding files if they're + installed (#2984, #7105, #7093). This works with the new + poppler-data package. + - Speed ups by Krzysztof Kowalczyk (#8112) + - Patch from Dom Lachowicz to let the utils take input on stdin. + - Bugs fixed (#8182, #4649, #7906, #8048, #7113, #4515, #3948, + #7924, #7780, #7646, #6948, #7788, #7661, #7005) + +Release 0.5.3 + + - Add poppler as a private requires of poppler-glib. + - Allow CairoFont creation to fail more gracefully (#4030). + - Back out the rest of krh's type3 font work. + - Revert splashModeRGB8 changes. + - Add missing poppler-annotation-helper.h. + +Release 0.5.2 + + - Much improved Qt bindings (Albert Astals Cid). + - Cairo backend now supports masked images (Jeff Muizelaar, #6174). + - Patches from Kouhei Sutou to make glib bindings more + language binding friendly (#6907, #6897, #6899, #6905). + - Search now works with ligatures (Ed Catmull, #2929). + - The glib bindings now has an entry point to render to a cairo_t. + - GCC 4.1 and MSVC compilation fixes. + - Memory leaks plugged: #6908, #6947, #6765, #6764, #6187 + - Misc bug fixes: #6984, #6896, #6913, #6926, #4481, #5951, + #6551, #6500, #6492, #6454, #6079, #6167. + +Release 0.5.1 + + - Support for embedded files. + - Handle 0-width lines correctly. + - Avoid external file use when opening fonts. + - Only use vector fonts returned from fontconfig (#5758). + - Fix scaled 1x1 pixmaps use for drawing lines (#3387). + - drawSoftMaskedImage support in cairo backend. + - Misc bug fixes: #5922, #5946, #5749, #5952, #4030, #5420. + +Release 0.5.0 + + - Font matching code for non embedded fonts now use fontconfig + instead of hard coded list of fonts. + - Merge in Xpdf 3.01 changes. + - Add command line tools from Xpdf. + - Make install of Xpdf header files ./configure'able. + +Release 0.4.0 + + - Real text selection. + - API breakage in glib wrapper: dropping dest_x and dest_y + arguments from poppler_page_render_to_pixbuf(). + +Release 0.3.3 + + - New glib API to get document font information (Marco). + - More document properties available as glib properties (Emil + Soleyman-Zomalan, #3359) + - Optimize color conversion for images. + - Support for constant opacity. + - Fix problems with pkg-config files. + - Bugs fixes: #3491, #2911, #3362, #3340, #3265, #3239, #3396. + +Release 0.3.2 + + - New API to get poppler version and backend type. + - Various font fixes from Albert Astals Cid. + - Update to cairo 0.5.0 API, including better font support. + - Meta data for the glib binding. + +Release 0.3.1 + + - Add qt/poppler-private.h to SOURCES + - Jeff's path to use zlib instead of builtin decompression. + - Bug fixes: #2934, segfault on invalid links, #3114 + +Release 0.3.0 + + - First cut at qt wrapper, including a getText() method for + getting text from a page. + - More glib functionality: meta data, set page orientation, + print to PS + - Performance fixes for glib cairo + - Bug fixes + +Release 0.2.0 (Tue Apr 5 12:32:10 EDT 2005) + + - Add glib wrapper for poppler, which will use cairo rendering + if available + - Support for page labels + - configure and build fixes. + +Release 0.1.2 (Wed Mar 9 10:45:58 EST 2005) + + - cairo optimizations and fixes from Jeff Muizelaar + - Bump cairo requirement to 0.4 + - Make cairo and gtk checks fail gracefully + +Release 0.1.1 + + - Fix issues with installed header files including config.h + - Fix a couple of typos in pkg-config files + - Install splash and cairo header files when necessary + +Release 0.1 - no date yet + + - First release + - More NEWS here diff --git a/Build/source/libs/poppler/poppler-0.18.4/README b/Build/source/libs/poppler/poppler-0.18.4/README new file mode 100644 index 00000000000..e5b30a6d9ca --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/README @@ -0,0 +1,37 @@ +This is poppler, a PDF rendering library. + +Poppler is a fork of the xpdf PDF viewer developed by Derek Noonburg +of Glyph and Cog, LLC. The purpose of forking xpdf is twofold. +First, we want to provide PDF rendering functionality as a shared +library, to centralize the maintenance effort. Today a number of +applications incorporate the xpdf code base, and whenever a security +issue is discovered, all these applications exchange patches and put +out new releases. In turn, all distributions must package and release +new version of these xpdf based viewers. It's safe to say that +there's a lot of duplicated effort with the current situation. Even if +poppler in the short term introduces yet another xpdf derived code +base to the world, we hope that over time these applications will +adopt poppler. After all, we only need one application to use poppler +to break even. + +Second, we would like to move libpoppler forward in a number of areas +that don't fit within the goals of xpdf. By design, xpdf depends on +very few libraries and runs a wide range of X based platforms. This +is a strong feature and reasonable design goal. However, with poppler +we would like to replace parts of xpdf that are now available as +standard components of modern Unix desktop environments. One such +example is fontconfig, which solves the problem of matching and +locating fonts on the system, in a standardized and well understood +way. Another example is cairo, which provides high quality 2D +rendering. See the file TODO for a list of planned changes. + +Please note that xpdf, and thus poppler, is licensed under the GPL, +not the LGPL. Consequently, any application using poppler must also +be licensed under the GPL. If you want to incorporate Xpdf based PDF +rendering in a closed source product, please contact Glyph & Cog +(www.glyphandcog.com) for commercial licensing options. + + Kristian Høgsberg, Feb. 27, 2005 + + +See the README-XPDF for the original xpdf-3.00 README. diff --git a/Build/source/libs/poppler/poppler-0.18.4/README-XPDF b/Build/source/libs/poppler/poppler-0.18.4/README-XPDF new file mode 100644 index 00000000000..ff674a2a7b7 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/README-XPDF @@ -0,0 +1,376 @@ +Xpdf +==== + +version 3.00 +2004-jan-22 + +The Xpdf software and documentation are +copyright 1996-2004 Glyph & Cog, LLC. + +Email: derekn@foolabs.com +WWW: http://www.foolabs.com/xpdf/ + +The PDF data structures, operators, and specification are +copyright 1985-2003 Adobe Systems Inc. + + +What is Xpdf? +------------- + +Xpdf is an open source viewer for Portable Document Format (PDF) +files. (These are also sometimes also called 'Acrobat' files, from +the name of Adobe's PDF software.) The Xpdf project also includes a +PDF text extractor, PDF-to-PostScript converter, and various other +utilities. + +Xpdf runs under the X Window System on UNIX, VMS, and OS/2. The non-X +components (pdftops, pdftotext, etc.) also run on Win32 systems and +should run on pretty much any system with a decent C++ compiler. + +Xpdf is designed to be small and efficient. It can use Type 1 or +TrueType fonts. + + +Distribution +------------ + +Xpdf is licensed under the GNU General Public License (GPL), version +2. In my opinion, the GPL is a convoluted, confusing, ambiguous mess. +But it's also pervasive, and I'm sick of arguing. And even if it is +confusing, the basic idea is good. + +In order to cut down on the confusion a little bit, here are some +informal clarifications: + +- I don't mind if you redistribute Xpdf in source and/or binary form, + as long as you include all of the documentation: README, man pages + (or help files), and COPYING. (Note that the README file contains a + pointer to a web page with the source code.) + +- Selling a CD-ROM that contains Xpdf is fine with me, as long as it + includes the documentation. I wouldn't mind receiving a sample + copy, but it's not necessary. + +- If you make useful changes to Xpdf, please make the source code + available -- post it on a web site, email it to me, whatever. + +If you're interested in commercial licensing, please see the Glyph & +Cog web site: + + http://www.glyphandcog.com/ + + +Compatibility +------------- + +Xpdf is developed and tested on a Linux 2.4 x86 system. + +In addition, it has been compiled by others on Solaris, AIX, HP-UX, +Digital Unix, Irix, and numerous other Unix implementations, as well +as VMS and OS/2. It should work on pretty much any system which runs +X11 and has Unix-like libraries. You'll need ANSI C++ and C compilers +to compile it. + +The non-X components of Xpdf (pdftops, pdftotext, pdfinfo, pdffonts, +pdftoppm, and pdfimages) can also be compiled on Win32 systems. See +the Xpdf web page for details. + +If you compile Xpdf for a system not listed on the web page, please +let me know. If you're willing to make your binary available by ftp +or on the web, I'll be happy to add a link from the Xpdf web page. I +have decided not to host any binaries I didn't compile myself (for +disk space and support reasons). + +If you can't get Xpdf to compile on your system, send me email and +I'll try to help. + +Xpdf has been ported to the Acorn, Amiga, BeOS, and EPOC. See the +Xpdf web page for links. + + +Getting Xpdf +------------ + +The latest version is available from: + + http://www.foolabs.com/xpdf/ + +or: + + ftp://ftp.foolabs.com/pub/xpdf/ + +Source code and several precompiled executables are available. + +Announcements of new versions are posted to several newsgroups +(comp.text.pdf, comp.os.linux.announce, and others) and emailed to a +list of people. If you'd like to receive email notification of new +versions, just let me know. + + +Running Xpdf +------------ + +To run xpdf, simply type: + + xpdf file.pdf + +To generate a PostScript file, hit the "print" button in xpdf, or run +pdftops: + + pdftops file.pdf + +To generate a plain text file, run pdftotext: + + pdftotext file.pdf + +There are four additional utilities (which are fully described in +their man pages): + + pdfinfo -- dumps a PDF file's Info dictionary (plus some other + useful information) + pdffonts -- lists the fonts used in a PDF file along with various + information for each font + pdftoppm -- converts a PDF file to a series of PPM/PGM/PBM-format + bitmaps + pdfimages -- extracts the images from a PDF file + +Command line options and many other details are described in the man +pages (xpdf.1, etc.) and the VMS help files (xpdf.hlp, etc.). + + +Upgrading from Xpdf 2.xx +------------------------ + +WARNING: Xpdf 3.00 switched to a new PDF rasterizer, which no longer +uses X fonts. You'll need a set of Base-14 fonts -- the URW fonts +distributed with ghostscript can be used for this. Xpdf will search +for the URW fonts, but if you have them installed in a non-standard +directory, you'll need to set up an xpdfrc config file to point to +them. For full details, please see the xpdfrc(5) man page. + + +Compiling Xpdf +-------------- + +See the separate file, INSTALL. + + +Bugs +---- + +If you find a bug in Xpdf, i.e., if it prints an error message, +crashes, or incorrectly displays a document, and you don't see that +bug listed here, please send me email, with a pointer (URL, ftp site, +etc.) to the PDF file. + + +Acknowledgments +--------------- + +Thanks to: + +* Patrick Voigt for help with the remote server code. +* Patrick Moreau, Martin P.J. Zinser, and David Mathog for the VMS + port. +* David Boldt and Rick Rodgers for sample man pages. +* Brendan Miller for the icon idea. +* Olly Betts for help testing pdftotext. +* Peter Ganten for the OS/2 port. +* Michael Richmond for the Win32 port of pdftops and pdftotext and the + xpdf/cygwin/XFree86 build instructions. +* Frank M. Siegert for improvements in the PostScript code. +* Leo Smiers for the decryption patches. +* Rainer Menzner for creating t1lib, and for helping me adapt it to + xpdf. +* Pine Tree Systems A/S for funding the OPI and EPS support in + pdftops. +* Easy Software Products for funding the "sh" operator support. +* Tom Kacvinsky for help with FreeType and for being my interface to + the FreeType team. +* Theppitak Karoonboonyanan for help with Thai support. +* Leonard Rosenthol for help and contributions on a bunch of things. +* Alexandros Diamantidis and Maria Adaloglou for help with Greek + support. +* Lawrence Lai for help with the CJK Unicode maps. + +Various people have contributed modifications made for use by the +pdftex project: + +* Han The Thanh +* Martin Schröder of ArtCom GmbH + + +References +---------- + +Adobe Systems Inc., _PDF Reference: Adobe Portable Document Format +Version 1.5_. +http://partners.adobe.com/asn/tech/pdf/specifications.jsp +[The manual for PDF version 1.5.] + +Adobe Systems Inc., _PostScript Language Reference_, 3rd ed. +Addison-Wesley, 1999, ISBN 0-201-37922-8. +[The official PostScript manual.] + +Adobe Systems, Inc., _The Type 42 Font Format Specification_, +Adobe Developer Support Technical Specification #5012. 1998. +http://partners.adobe.com/asn/developer/pdfs/tn/5012.Type42_Spec.pdf +[Type 42 is the format used to embed TrueType fonts in PostScript +files.] + +Adobe Systems, Inc., _Adobe CMap and CIDFont Files Specification_, +Adobe Developer Support Technical Specification #5014. 1995. +http://www.adobe.com/supportservice/devrelations/PDFS/TN/5014.CIDFont_Spec.pdf +[CMap file format needed for Japanese and Chinese font support.] + +Adobe Systems, Inc., _Adobe-Japan1-4 Character Collection for +CID-Keyed Fonts_, Adobe Developer Support Technical Note #5078. +2000. +http://partners.adobe.com/asn/developer/PDFS/TN/5078.CID_Glyph.pdf +[The Adobe Japanese character set.] + +Adobe Systems, Inc., _Adobe-GB1-4 Character Collection for +CID-Keyed Fonts_, Adobe Developer Support Technical Note #5079. +2000. +http://partners.adobe.com/asn/developer/pdfs/tn/5079.Adobe-GB1-4.pdf +[The Adobe Chinese GB (simplified) character set.] + +Adobe Systems, Inc., _Adobe-CNS1-3 Character Collection for +CID-Keyed Fonts_, Adobe Developer Support Technical Note #5080. +2000. +http://partners.adobe.com/asn/developer/PDFS/TN/5080.CNS_CharColl.pdf +[The Adobe Chinese CNS (traditional) character set.] + +Adobe Systems Inc., _Supporting the DCT Filters in PostScript Level +2_, Adobe Developer Support Technical Note #5116. 1992. +http://www.adobe.com/supportservice/devrelations/PDFS/TN/5116.PS2_DCT.PDF +[Description of the DCTDecode filter parameters.] + +Adobe Systems Inc., _Open Prepress Interface (OPI) Specification - +Version 2.0_, Adobe Developer Support Technical Note #5660. 2000. +http://partners.adobe.com/asn/developer/PDFS/TN/5660.OPI_2.0.pdf + +Adobe Systems Inc., CMap files. +ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/ +[The actual CMap files for the 16-bit CJK encodings.] + +Adobe Systems Inc., Unicode glyph lists. +http://partners.adobe.com/asn/developer/type/unicodegn.html +http://partners.adobe.com/asn/developer/type/glyphlist.txt +http://partners.adobe.com/asn/developer/type/corporateuse.txt +http://partners.adobe.com/asn/developer/type/zapfdingbats.txt +[Mappings between character names to Unicode.] + +Aldus Corp., _OPI: Open Prepress Interface Specification 1.3_. 1993. +http://partners.adobe.com/asn/developer/PDFS/TN/OPI_13.pdf + +Anonymous, RC4 source code. +ftp://ftp.ox.ac.uk/pub/crypto/misc/rc4.tar.gz +ftp://idea.sec.dsi.unimi.it/pub/crypt/code/rc4.tar.gz +[This is the algorithm used to encrypt PDF files.] + +T. Boutell, et al., "PNG (Portable Network Graphics) Specification, +Version 1.0. RFC 2083. +[PDF uses the PNG filter algorithms.] + +CCITT, "Information Technology - Digital Compression and Coding of +Continuous-tone Still Images - Requirements and Guidelines", CCITT +Recommendation T.81. +http://www.w3.org/Graphics/JPEG/ +[The official JPEG spec.] + +A. Chernov, "Registration of a Cyrillic Character Set". RFC 1489. +[Documentation for the KOI8-R Cyrillic encoding.] + +Roman Czyborra, "The ISO 8859 Alphabet Soup". +http://czyborra.com/charsets/iso8859.html +[Documentation on the various ISO 859 encodings.] + +L. Peter Deutsch, "ZLIB Compressed Data Format Specification version +3.3". RFC 1950. +[Information on the general format used in FlateDecode streams.] + +L. Peter Deutsch, "DEFLATE Compressed Data Format Specification +version 1.3". RFC 1951. +[The definition of the compression algorithm used in FlateDecode +streams.] + +Jim Flowers, "X Logical Font Description Conventions", Version 1.5, X +Consortium Standard, X Version 11, Release 6.1. +ftp://ftp.x.org/pub/R6.1/xc/doc/hardcopy/XLFD/xlfd.PS.Z +[The official specification of X font descriptors, including font +transformation matrices.] + +Foley, van Dam, Feiner, and Hughes, _Computer Graphics: Principles and +Practice_, 2nd ed. Addison-Wesley, 1990, ISBN 0-201-12110-7. +[Colorspace conversion functions, Bezier spline math.] + +Robert L. Hummel, _Programmer's Technical Reference: Data and Fax +Communications_. Ziff-Davis Press, 1993, ISBN 1-56276-077-7. +[CCITT Group 3 and 4 fax decoding.] + +ISO/IEC, _Information technology -- Lossy/lossless coding of bi-level +images_. ISO/IEC 14492, First edition (2001-12-15). +http://webstore.ansi.org/ +[The official JBIG2 standard. The final draft of this spec is +available from http://www.jpeg.org/jbighomepage.html.] + +ISO/IEC, _Information technology -- JPEG 2000 image coding system -- +Part 1: Core coding system_. ISO/IEC 15444-1, First edition +(2000-12-15). +http://webstore.ansi.org/ +[The official JPEG 2000 standard. The final committee draft of this +spec is available from http://www.jpeg.org/JPEG2000.html, but there +were changes made to the bitstream format between that draft and the +published spec.] + +ITU, "Standardization of Group 3 facsimile terminals for document +transmission", ITU-T Recommendation T.4, 1999. +ITU, "Facsimile coding schemes and coding control functions for Group 4 +facsimile apparatus", ITU-T Recommendation T.6, 1993. +http://www.itu.int/ +[The official Group 3 and 4 fax standards - used by the CCITTFaxDecode +stream, as well as the JBIG2Decode stream.] + +Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz, "Practical +Fast 1-D DCT Algorithms with 11 Multiplications". IEEE Intl. Conf. on +Acoustics, Speech & Signal Processing, 1989, 988-991. +[The fast IDCT algorithm used in the DCTDecode filter.] + +Microsoft, _TrueType 1.0 Font Files_, rev. 1.66. 1995. +http://www.microsoft.com/typography/tt/tt.htm +[The TrueType font spec (in MS Word format, naturally).] + +Thai Industrial Standard, "Standard for Thai Character Codes for +Computers", TIS-620-2533 (1990). +http://www.nectec.or.th/it-standards/std620/std620.htm +[The TIS-620 Thai encoding.] + +P. Peterlin, "ISO 8859-2 (Latin 2) Resources". +http://sizif.mf.uni-lj.si/linux/cee/iso8859-2.html +[This is a web page with all sorts of useful Latin-2 character set and +font information.] + +Charles Poynton, "Color FAQ". +http://www.inforamp.net/~poynton/ColorFAQ.html +[The mapping from the CIE 1931 (XYZ) color space to RGB.] + +R. Rivest, "The MD5 Message-Digest Algorithm". RFC 1321. +[MD5 is used in PDF document encryption.] + +Unicode Consortium, "Unicode Home Page". +http://www.unicode.org/ +[Online copy of the Unicode spec.] + +W3C Recommendation, "PNG (Portable Network Graphics) Specification +Version 1.0". +http://www.w3.org/Graphics/PNG/ +[Defines the PNG image predictor.] + +Gregory K. Wallace, "The JPEG Still Picture Compression Standard". +ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz +[Good description of the JPEG standard. Also published in CACM, April +1991, and submitted to IEEE Transactions on Consumer Electronics.] + +F. Yergeau, "UTF-8, a transformation format of ISO 10646". RFC 2279. +[A commonly used Unicode encoding.] diff --git a/Build/source/libs/poppler/poppler-0.18.4/TODO b/Build/source/libs/poppler/poppler-0.18.4/TODO new file mode 100644 index 00000000000..e067c2a3156 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/TODO @@ -0,0 +1,40 @@ +* general items: + - Investigate better (that is, normal) text selection. + - Use PDF font descriptors to create an FcPattern. + - Add simle performance benchmark that takes a pdf and renders + every page 100 times or so. Start keeping track of + performance. + - make color space conversion stuff more sane (right now we + hack around some of it in the cairo backend) + - move away from getChar to a more read(2) like interface + +* core: + - use libtiff for ccitt decoding? + +* Qt4 frontend: + - expose Rendition media through the MovieObject API + - use Q_GLOBAL_STATIC for GlobalParams? + - use QSettings or another system for loading/saving Document/global settings? + - expose API for lcms/color management system + - make the ArthurOutputDev optional + +* glib frontend: + - Sound/Movie actions support + - API to create annotations + +* new frontends: + - Java/JNI-based frontend for Android + +* cairo backend: + - Implement linear/radial gradients with cairo gradients + - PDF Blend Modes + - Make the cairo backend feature complete and optimize the + heck out of it. + +Jeff Muizelaar's TODO: + Short Term: + - factor out some of the color conversion code from CairoOutputDev and ArthurOutputDev. + - fix patterned text fills. + Long Term: + - use cairo glyph cache for type3 fonts. + - try to use cairo pattern support. diff --git a/Build/source/libs/poppler/poppler-0.18.4/aclocal.m4 b/Build/source/libs/poppler/poppler-0.18.4/aclocal.m4 new file mode 100644 index 00000000000..33d6b62ddbd --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/aclocal.m4 @@ -0,0 +1,2161 @@ +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, +[m4_warning([this file was generated for autoconf 2.68. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# lib-link.m4 serial 21 (gettext-0.18) +dnl Copyright (C) 2001-2010 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_PREREQ([2.54]) + +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname +dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + pushdef([Name],[translit([$1],[./-], [___])]) + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" + ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" + ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" + LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + AC_SUBST([LIB]NAME[_PREFIX]) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes + popdef([NAME]) + popdef([Name]) +]) + +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. The missing-message +dnl defaults to 'no' and may contain additional hints for the user. +dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} +dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname +dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + pushdef([Name],[translit([$1],[./-], [___])]) + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, + dnl because if the user has installed lib[]Name and not disabled its use + dnl via --without-lib[]Name-prefix, he wants to use it. + ac_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ + ac_save_LIBS="$LIBS" + dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, + dnl because these -l options might require -L options that are present in + dnl LIBS. -l options benefit only from the -L options listed before it. + dnl Otherwise, add it to the front of LIBS, because it may be a static + dnl library that depends on another static library that is present in LIBS. + dnl Static libraries benefit only from the static libraries listed after + dnl it. + case " $LIB[]NAME" in + *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; + *) LIBS="$LIB[]NAME $LIBS" ;; + esac + AC_TRY_LINK([$3], [$4], + [ac_cv_lib[]Name=yes], + [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) + LIBS="$ac_save_LIBS" + ]) + if test "$ac_cv_lib[]Name" = yes; then + HAVE_LIB[]NAME=yes + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) + AC_MSG_CHECKING([how to link with lib[]$1]) + AC_MSG_RESULT([$LIB[]NAME]) + else + HAVE_LIB[]NAME=no + dnl If $LIB[]NAME didn't lead to a usable library, we don't need + dnl $INC[]NAME either. + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= + LIB[]NAME[]_PREFIX= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + AC_SUBST([LIB]NAME[_PREFIX]) + popdef([NAME]) + popdef([Name]) +]) + +dnl Determine the platform dependent parameters needed to use rpath: +dnl acl_libext, +dnl acl_shlibext, +dnl acl_hardcode_libdir_flag_spec, +dnl acl_hardcode_libdir_separator, +dnl acl_hardcode_direct, +dnl acl_hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ + dnl Tell automake >= 1.10 to complain if config.rpath is missing. + m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE([rpath], + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_FROMPACKAGE(name, package) +dnl declares that libname comes from the given package. The configure file +dnl will then not have a --with-libname-prefix option but a +dnl --with-package-prefix option. Several libraries can come from the same +dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar +dnl macro call that searches for libname. +AC_DEFUN([AC_LIB_FROMPACKAGE], +[ + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + define([acl_frompackage_]NAME, [$2]) + popdef([NAME]) + pushdef([PACK],[$2]) + pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + define([acl_libsinpackage_]PACKUP, + m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1]) + popdef([PACKUP]) + popdef([PACK]) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found +dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) + pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) + dnl Autoconf >= 2.61 supports dots in --with options. + pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_ARG_WITH(P_A_C_K[-prefix], +[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib + --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + LIB[]NAME[]_PREFIX= + dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been + dnl computed. So it has to be reset here. + HAVE_LIB[]NAME= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + dnl The same code as in the loop below: + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$acl_hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi + popdef([P_A_C_K]) + popdef([PACKLIBS]) + popdef([PACKUP]) + popdef([PACK]) + popdef([NAME]) +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +dnl For those cases where a variable contains several -L and -l options +dnl referring to unknown libraries and directories, this macro determines the +dnl necessary additional linker options for the runtime path. +dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) +dnl sets LDADDVAR to linker options needed together with LIBSVALUE. +dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, +dnl otherwise linking without libtool is assumed. +AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], +[ + AC_REQUIRE([AC_LIB_RPATH]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + $1= + if test "$enable_rpath" != no; then + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode directories into the resulting + dnl binary. + rpathdirs= + next= + for opt in $2; do + if test -n "$next"; then + dir="$next" + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= + else + case $opt in + -L) next=yes ;; + -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= ;; + *) next= ;; + esac + fi + done + if test "X$rpathdirs" != "X"; then + if test -n ""$3""; then + dnl libtool is used for linking. Use -R options. + for dir in $rpathdirs; do + $1="${$1}${$1:+ }-R$dir" + done + else + dnl The linker is used for linking directly. + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user + dnl must pass all path elements in one option. + alldirs= + for dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="$flag" + else + dnl The -rpath options are cumulative. + for dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="${$1}${$1:+ }$flag" + done + fi + fi + fi + fi + fi + AC_SUBST([$1]) +]) + +# lib-prefix.m4 serial 7 (gettext-0.18) +dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_PREPARE_MULTILIB creates +dnl - a variable acl_libdirstem, containing the basename of the libdir, either +dnl "lib" or "lib64" or "lib/64", +dnl - a variable acl_libdirstem2, as a secondary possible value for +dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or +dnl "lib/amd64". +AC_DEFUN([AC_LIB_PREPARE_MULTILIB], +[ + dnl There is no formal standard regarding lib and lib64. + dnl On glibc systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine + dnl the compiler's default mode by looking at the compiler's library search + dnl path. If at least one of its elements ends in /lib64 or points to a + dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. + dnl Otherwise we use the default, namely "lib". + dnl On Solaris systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or + dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. + AC_REQUIRE([AC_CANONICAL_HOST]) + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment + dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>. + dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." + dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the + dnl symlink is missing, so we set acl_libdirstem2 too. + AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], + [AC_EGREP_CPP([sixtyfour bits], [ +#ifdef _LP64 +sixtyfour bits +#endif + ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) + ]) + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" +]) + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant <scott@netsplit.com>. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +# only at the first occurence in configure.ac, so if the first place +# it's called might be skipped (such as if it is within an "if", you +# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])# PKG_CHECK_MODULES + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# (`yes' being less verbose, `no' or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar <conftest.tar]) + grep GrepMe conftest.dir/file >/dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/acx_pthread.m4]) +m4_include([m4/define-dir.m4]) +m4_include([m4/gtk-doc.m4]) +m4_include([m4/iconv.m4]) +m4_include([m4/introspection.m4]) +m4_include([m4/libjpeg.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) diff --git a/Build/source/libs/poppler/poppler-0.18.4/config.h.cmake b/Build/source/libs/poppler/poppler-0.18.4/config.h.cmake new file mode 100644 index 00000000000..7dcb1f70a09 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/config.h.cmake @@ -0,0 +1,219 @@ +/* config.h. Generated from config.h.cmake by cmake. */ + +/* Build against libcurl. */ +#cmakedefine ENABLE_LIBCURL 1 + +/* Use libjpeg instead of builtin jpeg decoder. */ +#cmakedefine ENABLE_LIBJPEG 1 + +/* Use libopenjpeg instead of builtin jpeg2000 decoder. */ +#cmakedefine ENABLE_LIBOPENJPEG 1 + +/* Build against libtiff. */ +#cmakedefine ENABLE_LIBTIFF 1 + +/* Build against libpng. */ +#cmakedefine ENABLE_LIBPNG 1 + +/* Do not hardcode the library location */ +#cmakedefine ENABLE_RELOCATABLE 1 + +/* Use zlib instead of builtin zlib decoder. */ +#cmakedefine ENABLE_ZLIB 1 + +/* Use cairo for rendering. */ +#cmakedefine HAVE_CAIRO 1 + +/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. + */ +#cmakedefine HAVE_DIRENT_H 1 + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#cmakedefine HAVE_DLFCN_H 1 + +/* Define to 1 if you have the <fcntl.h> header file. */ +#cmakedefine HAVE_FCNTL_H 1 + +/* Have FreeType2 include files */ +#cmakedefine HAVE_FREETYPE_H 1 + +/* Define to 1 if you have the `fseek64' function. */ +#cmakedefine HAVE_FSEEK64 1 + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#cmakedefine HAVE_FSEEKO 1 + +/* Define to 1 if you have the `ftell64' function. */ +#cmakedefine HAVE_FTELL64 1 + +/* Defines if gettimeofday is available on your system */ +#cmakedefine HAVE_GETTIMEOFDAY 1 + +/* Defines if gmtime_r is available on your system */ +#cmakedefine HAVE_GMTIME_R 1 + +/* Define if you have the iconv() function and it works. */ +#cmakedefine HAVE_ICONV 1 + +/* Define to 1 if you have the <inttypes.h> header file. */ +#cmakedefine HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `openjpeg' library (-lopenjpeg). */ +#cmakedefine HAVE_LIBOPENJPEG 1 + +/* Define to 1 if you have the `z' library (-lz). */ +#cmakedefine HAVE_LIBZ 1 + +/* Defines if localtime_r is available on your system */ +#cmakedefine HAVE_LOCALTIME_R 1 + +/* Define to 1 if you have the <memory.h> header file. */ +#cmakedefine HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `mkstemp' function. */ +#cmakedefine HAVE_MKSTEMP 1 + +/* Define to 1 if you have the `mkstemps' function. */ +#cmakedefine HAVE_MKSTEMPS 1 + +/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ +#cmakedefine HAVE_NDIR_H 1 + +/* Define to 1 if you have the <openjpeg.h> header file. */ +#cmakedefine HAVE_OPENJPEG_H 1 + +/* Define to 1 if you have the `popen' function. */ +#cmakedefine HAVE_POPEN 1 + +/* Define if you have POSIX threads libraries and header files. */ +#cmakedefine HAVE_PTHREAD 1 + +/* Use splash for rendering. */ +#cmakedefine HAVE_SPLASH 1 + +/* Define to 1 if you have the <stdint.h> header file. */ +#cmakedefine HAVE_STDINT_H 1 + +/* Define to 1 if you have the <stdlib.h> header file. */ +#cmakedefine HAVE_STDLIB_H 1 + +/* Define to 1 if you have the <strings.h> header file. */ +#cmakedefine HAVE_STRINGS_H 1 + +/* Define to 1 if you have the <string.h> header file. */ +#cmakedefine HAVE_STRING_H 1 + +/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'. + */ +#cmakedefine HAVE_SYS_DIR_H 1 + +/* Define to 1 if you have the <sys/mman.h> header file. */ +#cmakedefine HAVE_SYS_MMAN_H 1 + +/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'. + */ +#cmakedefine HAVE_SYS_NDIR_H 1 + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#cmakedefine HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the <sys/types.h> header file. */ +#cmakedefine HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the <unistd.h> header file. */ +#cmakedefine HAVE_UNISTD_H 1 + +/* Define to 1 if you have the <zlib.h> header file. */ +#cmakedefine HAVE_ZLIB_H 1 + +/* Define to 1 if you have a big endian machine */ +#cmakedefine WORDS_BIGENDIAN 1 + +/* Define as const if the declaration of iconv() needs const. */ +#define ICONV_CONST ${ICONV_CONST} + +/* Enable multithreading support. */ +#cmakedefine MULTITHREADED 1 + +/* Generate OPI comments in PS output. */ +#cmakedefine OPI_SUPPORT 1 + +/* Name of package */ +#define PACKAGE "poppler" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "https://bugs.freedesktop.org/enter_bug.cgi?product=poppler" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "poppler" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "poppler ${POPPLER_VERSION}" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "poppler" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "${POPPLER_VERSION}" + +/* Poppler data dir */ +#define POPPLER_DATADIR "${CMAKE_INSTALL_PREFIX}/share/poppler" + +/* Support for curl based doc builder is compiled in. */ +#cmakedefine POPPLER_HAS_CURL_SUPPORT 1 + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Enable word list support. */ +#cmakedefine TEXTOUT_WORD_LIST 1 + +/* Defines if use cms */ +#cmakedefine USE_CMS 1 + +/* Use fixed point arithmetic in the Splash backend */ +#cmakedefine USE_FIXEDPOINT 1 + +/* Use single precision arithmetic in the Splash backend */ +#cmakedefine USE_FLOAT 1 + +/* Version number of package */ +#define VERSION "${POPPLER_VERSION}" + +/* Use fontconfig font configuration backend */ +#cmakedefine WITH_FONTCONFIGURATION_FONTCONFIG 1 + +/* Use win32 font configuration backend */ +#cmakedefine WITH_FONTCONFIGURATION_WIN32 1 + +/* OpenJPEG with the OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG flag */ +#cmakedefine WITH_OPENJPEG_IGNORE_PCLR_CMAP_CDEF_FLAG 1 + +/* Define to 1 if the X Window System is missing or not being used. */ +/* #undef X_DISPLAY_MISSING */ + +/* + * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system + * headers and I'm too lazy to write a configure test as long as only + * unixware is related + */ +#ifdef _UNIXWARE +#define HAVE_BOOLEAN +#endif + +/* MS has defined snprintf as deprecated */ +#ifdef _MSC_VER +#define snprintf _snprintf +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +/* #undef _LARGEFILE_SOURCE */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ diff --git a/Build/source/libs/poppler/poppler-0.18.4/config.h.in b/Build/source/libs/poppler/poppler-0.18.4/config.h.in new file mode 100644 index 00000000000..abf412c24f0 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/config.h.in @@ -0,0 +1,241 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* Build against libcurl. */ +#undef ENABLE_LIBCURL + +/* Use libjpeg instead of builtin jpeg decoder. */ +#undef ENABLE_LIBJPEG + +/* Use libopenjpeg instead of builtin jpeg2000 decoder. */ +#undef ENABLE_LIBOPENJPEG + +/* Build against libpng. */ +#undef ENABLE_LIBPNG + +/* Build against libtiff. */ +#undef ENABLE_LIBTIFF + +/* Do not hardcode the library location */ +#undef ENABLE_RELOCATABLE + +/* Use zlib instead of builtin zlib decoder. */ +#undef ENABLE_ZLIB + +/* Use cairo for rendering. */ +#undef HAVE_CAIRO + +/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. + */ +#undef HAVE_DIRENT_H + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the <fcntl.h> header file. */ +#undef HAVE_FCNTL_H + +/* Have FreeType2 include files */ +#undef HAVE_FREETYPE_H + +/* Define to 1 if you have the `fseek64' function. */ +#undef HAVE_FSEEK64 + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#undef HAVE_FSEEKO + +/* Define to 1 if you have the `ftell64' function. */ +#undef HAVE_FTELL64 + +/* Defines if gettimeofday is available on your system */ +#undef HAVE_GETTIMEOFDAY + +/* Defines if gmtime_r is available on your system */ +#undef HAVE_GMTIME_R + +/* Define if you have the iconv() function and it works. */ +#undef HAVE_ICONV + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `openjpeg' library (-lopenjpeg). */ +#undef HAVE_LIBOPENJPEG + +/* Define to 1 if you have the `tiff' library (-ltiff). */ +#undef HAVE_LIBTIFF + +/* Define to 1 if you have the `z' library (-lz). */ +#undef HAVE_LIBZ + +/* Defines if localtime_r is available on your system */ +#undef HAVE_LOCALTIME_R + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `mkstemp' function. */ +#undef HAVE_MKSTEMP + +/* Define to 1 if you have the `mkstemps' function. */ +#undef HAVE_MKSTEMPS + +/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ +#undef HAVE_NDIR_H + +/* Define to 1 if you have the <openjpeg.h> header file. */ +#undef HAVE_OPENJPEG_H + +/* Define to 1 if you have the `popen' function. */ +#undef HAVE_POPEN + +/* Define if you have POSIX threads libraries and header files. */ +#undef HAVE_PTHREAD + +/* Use splash for rendering. */ +#undef HAVE_SPLASH + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'. + */ +#undef HAVE_SYS_DIR_H + +/* Define to 1 if you have the <sys/mman.h> header file. */ +#undef HAVE_SYS_MMAN_H + +/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'. + */ +#undef HAVE_SYS_NDIR_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <tiffio.h> header file. */ +#undef HAVE_TIFFIO_H + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the <zlib.h> header file. */ +#undef HAVE_ZLIB_H + +/* Define as const if the declaration of iconv() needs const. */ +#undef ICONV_CONST + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Enable multithreading support. */ +#undef MULTITHREADED + +/* Generate OPI comments in PS output. */ +#undef OPI_SUPPORT + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Poppler data dir */ +#undef POPPLER_DATADIR + +/* Support for curl based doc builder is compiled in. */ +#undef POPPLER_HAS_CURL_SUPPORT + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +#undef PTHREAD_CREATE_JOINABLE + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Enable word list support. */ +#undef TEXTOUT_WORD_LIST + +/* Defines if use cms */ +#undef USE_CMS + +/* Use fixed point arithmetic in the Splash backend */ +#undef USE_FIXEDPOINT + +/* Use single precision arithmetic in the Splash backend */ +#undef USE_FLOAT + +/* Version number of package */ +#undef VERSION + +/* Use fontconfig font configuration backend */ +#undef WITH_FONTCONFIGURATION_FONTCONFIG + +/* Use win32 font configuration backend */ +#undef WITH_FONTCONFIGURATION_WIN32 + +/* OpenJPEG with the OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG flag. */ +#undef WITH_OPENJPEG_IGNORE_PCLR_CMAP_CDEF_FLAG + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Define to 1 if the X Window System is missing or not being used. */ +#undef X_DISPLAY_MISSING + +/* + * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system + * headers and I'm too lazy to write a configure test as long as only + * unixware is related + */ +#ifdef _UNIXWARE +#define HAVE_BOOLEAN +#endif + + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +#undef _LARGEFILE_SOURCE + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES diff --git a/Build/source/libs/poppler/poppler-0.18.4/configure b/Build/source/libs/poppler/poppler-0.18.4/configure new file mode 100755 index 00000000000..43961509b4c --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/configure @@ -0,0 +1,26089 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.68 for poppler 0.18.4. +# +# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=poppler>. +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: https://bugs.freedesktop.org/enter_bug.cgi?product=poppler +$0: about your system, including any error possibly output +$0: before this message. Then install a modern shell, or +$0: manually run the script under such a shell if you do +$0: have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 </dev/null +exec 6>&1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='poppler' +PACKAGE_TARNAME='poppler' +PACKAGE_VERSION='0.18.4' +PACKAGE_STRING='poppler 0.18.4' +PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=poppler' +PACKAGE_URL='' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#ifdef HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#ifdef STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# ifdef HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#ifdef HAVE_STRINGS_H +# include <strings.h> +#endif +#ifdef HAVE_INTTYPES_H +# include <inttypes.h> +#endif +#ifdef HAVE_STDINT_H +# include <stdint.h> +#endif +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +POPPLER_VERSION +POPPLER_MICRO_VERSION +POPPLER_MINOR_VERSION +POPPLER_MAJOR_VERSION +PC_REQUIRES_PRIVATE +PC_REQUIRES +USE_CMS_FALSE +USE_CMS_TRUE +LCMS_LIBS +LCMS_CFLAGS +BUILD_UTILS_FALSE +BUILD_UTILS_TRUE +BUILD_GTK_TEST_FALSE +BUILD_GTK_TEST_TRUE +GTK_TEST_LIBS +GTK_TEST_CFLAGS +BUILD_POPPLER_CPP_FALSE +BUILD_POPPLER_CPP_TRUE +LTLIBICONV +LIBICONV +BUILD_POPPLER_QT4_FALSE +BUILD_POPPLER_QT4_TRUE +MOCQT4 +POPPLER_QT4_CXXFLAGS +POPPLER_QT4_TEST_LIBS +POPPLER_QT4_TEST_CFLAGS +POPPLER_QT4_LIBS +POPPLER_QT4_CFLAGS +GTK_DOC_USE_REBASE_FALSE +GTK_DOC_USE_REBASE_TRUE +GTK_DOC_USE_LIBTOOL_FALSE +GTK_DOC_USE_LIBTOOL_TRUE +GTK_DOC_BUILD_PDF_FALSE +GTK_DOC_BUILD_PDF_TRUE +GTK_DOC_BUILD_HTML_FALSE +GTK_DOC_BUILD_HTML_TRUE +ENABLE_GTK_DOC_FALSE +ENABLE_GTK_DOC_TRUE +GTKDOC_DEPS_LIBS +GTKDOC_DEPS_CFLAGS +HTML_DIR +GTKDOC_MKPDF +GTKDOC_REBASE +GTKDOC_CHECK +POPPLER_GLIB_DISABLE_SINGLE_INCLUDES +POPPLER_GLIB_DISABLE_DEPRECATED +GLIB_REQ +BUILD_POPPLER_GLIB_FALSE +BUILD_POPPLER_GLIB_TRUE +GLIB_MKENUMS +HAVE_INTROSPECTION_FALSE +HAVE_INTROSPECTION_TRUE +INTROSPECTION_MAKEFILE +INTROSPECTION_LIBS +INTROSPECTION_CFLAGS +INTROSPECTION_TYPELIBDIR +INTROSPECTION_GIRDIR +INTROSPECTION_GENERATE +INTROSPECTION_COMPILER +INTROSPECTION_SCANNER +POPPLER_GLIB_LIBS +POPPLER_GLIB_CFLAGS +GLIB_REQUIRED +CAIRO_REQ +CAIRO_FEATURE +PDFTOCAIRO_LIBS +PDFTOCAIRO_CFLAGS +BUILD_CAIRO_OUTPUT_FALSE +BUILD_CAIRO_OUTPUT_TRUE +CAIRO_LIBS +CAIRO_CFLAGS +CAIRO_VERSION +BUILD_SPLASH_OUTPUT_FALSE +BUILD_SPLASH_OUTPUT_TRUE +BUILD_WITH_WIN32_FONTCONFIGURATION_FALSE +BUILD_WITH_WIN32_FONTCONFIGURATION_TRUE +FONTCONFIG_LIBS +FONTCONFIG_CFLAGS +FREETYPE_CONFIG +FREETYPE_LIBS +FREETYPE_CFLAGS +BUILD_LIBPNG_FALSE +BUILD_LIBPNG_TRUE +LIBPNG_LIBS +LIBPNG_CFLAGS +BUILD_LIBJPEG_FALSE +BUILD_LIBJPEG_TRUE +LIBJPEG_LIBS +BUILD_LIBCURL_FALSE +BUILD_LIBCURL_TRUE +LIBCURL_LIBS +LIBCURL_CFLAGS +BUILD_ZLIB_FALSE +BUILD_ZLIB_TRUE +ZLIB_LIBS +BUILD_LIBTIFF_FALSE +BUILD_LIBTIFF_TRUE +LIBTIFF_LIBS +BUILD_LIBOPENJPEG_FALSE +BUILD_LIBOPENJPEG_TRUE +LIBOPENJPEG_LIBS +X_EXTRA_LIBS +X_LIBS +X_PRE_LIBS +X_CFLAGS +XMKMF +POPPLER_DATADIR +ENABLE_XPDF_HEADERS_FALSE +ENABLE_XPDF_HEADERS_TRUE +PTHREAD_CFLAGS +PTHREAD_LIBS +PTHREAD_CC +acx_pthread_config +auto_import_flags +create_shared_lib +win32_libs +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG +CXXCPP +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +SED +LIBTOOL +OBJDUMP +DLLTOOL +AS +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +EGREP +GREP +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_xpdf_headers +enable_single_precision +enable_fixedpoint +enable_relocatable +with_x +enable_libopenjpeg +enable_libtiff +enable_largefile +enable_zlib +enable_libcurl +enable_libjpeg +enable_libpng +with_font_configuration +enable_splash_output +enable_cairo_output +enable_poppler_glib +enable_introspection +with_html_dir +enable_gtk_doc +enable_gtk_doc_html +enable_gtk_doc_pdf +enable_poppler_qt4 +enable_poppler_cpp +with_libiconv_prefix +enable_gtk_test +enable_utils +enable_compile_warnings +enable_cms +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +CXX +CXXFLAGS +CCC +CXXCPP +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +XMKMF +LIBCURL_CFLAGS +LIBCURL_LIBS +LIBPNG_CFLAGS +LIBPNG_LIBS +FREETYPE_CFLAGS +FREETYPE_LIBS +FONTCONFIG_CFLAGS +FONTCONFIG_LIBS +CAIRO_CFLAGS +CAIRO_LIBS +PDFTOCAIRO_CFLAGS +PDFTOCAIRO_LIBS +POPPLER_GLIB_CFLAGS +POPPLER_GLIB_LIBS +GTKDOC_DEPS_CFLAGS +GTKDOC_DEPS_LIBS +POPPLER_QT4_CFLAGS +POPPLER_QT4_LIBS +POPPLER_QT4_TEST_CFLAGS +POPPLER_QT4_TEST_LIBS +GTK_TEST_CFLAGS +GTK_TEST_LIBS +LCMS_CFLAGS +LCMS_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures poppler 0.18.4 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/poppler] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +X features: + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of poppler 0.18.4:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0') + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-xpdf-headers Install unsupported xpdf headers. + --enable-single-precision use single precision arithmetic (instead of double precision) in the Splash backend + --enable-fixedpoint use fixed point (instead of double precision) arithmetic in the Splash backend + --disable-relocatable Hardcode the poppler library location (on Windows). + --disable-libopenjpeg Don't build against libopenjpeg. + --disable-libtiff Don't build against libtiff. + --disable-largefile omit support for large files + --enable-zlib Build with zlib + --enable-libcurl Build with libcurl based HTTP support. + --disable-libjpeg Don't build against libjpeg. + --disable-libpng Do not build against libpng. + --disable-splash-output Don't build the Splash graphics backend. + --disable-cairo-output Don't build the cairo graphics backend. + --disable-poppler-glib Don't compile poppler glib wrapper. + --enable-introspection=[no/auto/yes] + Enable introspection for this build + --enable-gtk-doc use gtk-doc to build documentation [[default=no]] + --enable-gtk-doc-html build documentation in html format [[default=yes]] + --enable-gtk-doc-pdf build documentation in pdf format [[default=no]] + --disable-poppler-qt4 Don't compile poppler Qt4 wrapper. + --disable-poppler-cpp Don't compile poppler cpp wrapper. + --disable-gtk-test Don't compile GTK+ test program. + --disable-utils Don't compile poppler command line utils. + --enable-compile-warnings=[no/yes/kde] + Turn on compiler warnings. + + --disable-cms Don't use color management system. + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). + --with-x use the X Window System + --with-font-configuration=fontconfig|win32 + Select font configuration backend + --with-html-dir=PATH path to installed docs + --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib + --without-libiconv-prefix don't search for libiconv in includedir and libdir + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + LIBS libraries to pass to the linker, e.g. -l<library> + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if + you have headers in a nonstandard directory <include dir> + CPP C preprocessor + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CXXCPP C++ preprocessor + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + XMKMF Path to xmkmf, Makefile generator for X Window System + LIBCURL_CFLAGS + C compiler flags for LIBCURL, overriding pkg-config + LIBCURL_LIBS + linker flags for LIBCURL, overriding pkg-config + LIBPNG_CFLAGS + C compiler flags for LIBPNG, overriding pkg-config + LIBPNG_LIBS linker flags for LIBPNG, overriding pkg-config + FREETYPE_CFLAGS + C compiler flags for FREETYPE, overriding pkg-config + FREETYPE_LIBS + linker flags for FREETYPE, overriding pkg-config + FONTCONFIG_CFLAGS + C compiler flags for FONTCONFIG, overriding pkg-config + FONTCONFIG_LIBS + linker flags for FONTCONFIG, overriding pkg-config + CAIRO_CFLAGS + C compiler flags for CAIRO, overriding pkg-config + CAIRO_LIBS linker flags for CAIRO, overriding pkg-config + PDFTOCAIRO_CFLAGS + C compiler flags for PDFTOCAIRO, overriding pkg-config + PDFTOCAIRO_LIBS + linker flags for PDFTOCAIRO, overriding pkg-config + POPPLER_GLIB_CFLAGS + C compiler flags for POPPLER_GLIB, overriding pkg-config + POPPLER_GLIB_LIBS + linker flags for POPPLER_GLIB, overriding pkg-config + GTKDOC_DEPS_CFLAGS + C compiler flags for GTKDOC_DEPS, overriding pkg-config + GTKDOC_DEPS_LIBS + linker flags for GTKDOC_DEPS, overriding pkg-config + POPPLER_QT4_CFLAGS + C compiler flags for POPPLER_QT4, overriding pkg-config + POPPLER_QT4_LIBS + linker flags for POPPLER_QT4, overriding pkg-config + POPPLER_QT4_TEST_CFLAGS + C compiler flags for POPPLER_QT4_TEST, overriding pkg-config + POPPLER_QT4_TEST_LIBS + linker flags for POPPLER_QT4_TEST, overriding pkg-config + GTK_TEST_CFLAGS + C compiler flags for GTK_TEST, overriding pkg-config + GTK_TEST_LIBS + linker flags for GTK_TEST, overriding pkg-config + LCMS_CFLAGS C compiler flags for LCMS, overriding pkg-config + LCMS_LIBS linker flags for LCMS, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=poppler>. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +poppler configure 0.18.4 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case <limits.h> declares $2. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ------------------------------------------------------------------------- ## +## Report this to https://bugs.freedesktop.org/enter_bug.cgi?product=poppler ## +## ------------------------------------------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_cxx_check_decl LINENO SYMBOL VAR INCLUDES +# ----------------------------------------------- +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR +# accordingly. +ac_fn_cxx_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_decl + +# ac_fn_cxx_check_func LINENO FUNC VAR +# ------------------------------------ +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_cxx_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case <limits.h> declares $2. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_func + +# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES +# --------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_cxx_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ------------------------------------------------------------------------- ## +## Report this to https://bugs.freedesktop.org/enter_bug.cgi?product=poppler ## +## ------------------------------------------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by poppler $as_me 0.18.4, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='poppler' + VERSION='0.18.4' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=0;; +esac +AM_BACKSLASH='\' + +ac_config_headers="$ac_config_headers config.h" + +ac_config_headers="$ac_config_headers poppler/poppler-config.h" + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; +esac + +test -z "$AS" && AS=as + + + + + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.2' +macro_revision='1.3337' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break + ;; + *) + test "$with_gnu_ld" != yes && break + ;; + esac + fi + done + IFS="$lt_save_ifs" +else + lt_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$lt_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 </dev/null` in +*GNU* | *'with BFD'*) + lt_cv_prog_gnu_ld=yes + ;; +*) + lt_cv_prog_gnu_ld=no + ;; +esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options + + + + enable_dlopen=no + + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach <jrb3@best.com> says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib<name>.so + # instead of lib<name>.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + + + +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf + + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break + ;; + *) + test "$with_gnu_ld" != yes && break + ;; + esac + fi + done + IFS="$lt_save_ifs" +else + lt_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$lt_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 </dev/null` in +*GNU* | *'with BFD'*) + lt_cv_prog_gnu_ld=yes + ;; +*) + lt_cv_prog_gnu_ld=no + ;; +esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach <jrb3@best.com> says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_CXX=' ' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=yes + file_list_spec_CXX='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' + enable_shared_with_static_runtimes_CXX=yes + # Don't use ranlib + old_postinstall_cmds_CXX='chmod 644 $oldlib' + postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + gnu*) + ;; + + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } +lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + ;; + esac + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib<name>.so + # instead of lib<name>.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 +$as_echo_n "checking for library containing strerror... " >&6; } +if ${ac_cv_search_strerror+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strerror (); +int +main () +{ +return strerror (); + ; + return 0; +} +_ACEOF +for ac_lib in '' cposix; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_strerror=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_strerror+:} false; then : + break +fi +done +if ${ac_cv_search_strerror+:} false; then : + +else + ac_cv_search_strerror=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 +$as_echo "$ac_cv_search_strerror" >&6; } +ac_res=$ac_cv_search_strerror +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + case $ac_cv_prog_cc_stdc in #( + no) : + ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if ${ac_cv_prog_cc_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdbool.h> +#include <stdlib.h> +#include <wchar.h> +#include <stdio.h> + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 +else + ac_cv_prog_cc_stdc=no +fi + +fi + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 +$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } + if ${ac_cv_prog_cc_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +fi + + case $ac_cv_prog_cc_stdc in #( + no) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; #( + '') : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 +$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; +esac + +#if test -z "$CXX" -a "$CC" = "gcc"; then +# CXX="gcc" +#fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +if test "x$GXX" = "xyes"; then + case "$host_os" in + cygwin* | mingw*) + ;; + *) + CXXFLAGS="$CXXFLAGS -ansi" + ;; + esac +fi + + + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi + + +$as_echo "#define OPI_SUPPORT 1" >>confdefs.h + + +$as_echo "#define MULTITHREADED 1" >>confdefs.h + + +$as_echo "#define TEXTOUT_WORD_LIST 1" >>confdefs.h + + +win32_libs="" +create_shared_lib="" +auto_import_flags="" +case "$host_os" in + cygwin*) + create_shared_lib="-no-undefined" + ;; + mingw*) + os_win32=yes + win32_libs="-lgdi32" + create_shared_lib="-no-undefined" + auto_import_flags="-Wl,--enable-auto-import" + ;; +esac + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +acx_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 +$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_join (); +int +main () +{ +return pthread_join (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + acx_pthread_ok=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 +$as_echo "$acx_pthread_ok" >&6; } + if test x"$acx_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case "${host_cpu}-${host_os}" in + *solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" + ;; +esac + +if test x"$acx_pthread_ok" = xno; then +for flag in $acx_pthread_flags; do + + case $flag in + none) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 +$as_echo_n "checking whether pthreads work without any flags... " >&6; } + ;; + + -*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 +$as_echo_n "checking whether pthreads work with $flag... " >&6; } + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + # Extract the first word of "pthread-config", so it can be a program name with args. +set dummy pthread-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_acx_pthread_config+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$acx_pthread_config"; then + ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_acx_pthread_config="yes" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" +fi +fi +acx_pthread_config=$ac_cv_prog_acx_pthread_config +if test -n "$acx_pthread_config"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5 +$as_echo "$acx_pthread_config" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test x"$acx_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 +$as_echo_n "checking for the pthreads library -l$flag... " >&6; } + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> +int +main () +{ +pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + acx_pthread_ok=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 +$as_echo "$acx_pthread_ok" >&6; } + if test "x$acx_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$acx_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 +$as_echo_n "checking for joinable pthread attribute... " >&6; } + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> +int +main () +{ +int attr=$attr; return attr; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + attr_name=$attr; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 +$as_echo "$attr_name" >&6; } + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + +cat >>confdefs.h <<_ACEOF +#define PTHREAD_CREATE_JOINABLE $attr_name +_ACEOF + + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 +$as_echo_n "checking if more special flags are required for pthreads... " >&6; } + flag=no + case "${host_cpu}-${host_os}" in + *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; + *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 +$as_echo "${flag}" >&6; } + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + # More AIX lossage: must compile with xlc_r or cc_r + if test x"$GCC" != xyes; then + for ac_prog in xlc_r cc_r +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PTHREAD_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PTHREAD_CC"; then + ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PTHREAD_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PTHREAD_CC=$ac_cv_prog_PTHREAD_CC +if test -n "$PTHREAD_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 +$as_echo "$PTHREAD_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PTHREAD_CC" && break +done +test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" + + else + PTHREAD_CC=$CC + fi +else + PTHREAD_CC="$CC" +fi + + + + + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$acx_pthread_ok" = xyes; then + +$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h + + : +else + acx_pthread_ok=no + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Check whether --enable-xpdf-headers was given. +if test "${enable_xpdf_headers+set}" = set; then : + enableval=$enable_xpdf_headers; enable_xpdf_headers=$enableval +else + enable_xpdf_headers="no" +fi + + if test x$enable_xpdf_headers = xyes; then + ENABLE_XPDF_HEADERS_TRUE= + ENABLE_XPDF_HEADERS_FALSE='#' +else + ENABLE_XPDF_HEADERS_TRUE='#' + ENABLE_XPDF_HEADERS_FALSE= +fi + + +# Check whether --enable-single-precision was given. +if test "${enable_single_precision+set}" = set; then : + enableval=$enable_single_precision; +$as_echo "#define USE_FLOAT 1" >>confdefs.h + +fi + + +# Check whether --enable-fixedpoint was given. +if test "${enable_fixedpoint+set}" = set; then : + enableval=$enable_fixedpoint; +$as_echo "#define USE_FIXEDPOINT 1" >>confdefs.h + +fi + + +# Check whether --enable-relocatable was given. +if test "${enable_relocatable+set}" = set; then : + enableval=$enable_relocatable; enable_relocatable=$enableval +else + if test x$os_win32 = xyes; then + # default to yes on native Windows. + enable_relocatable="yes" + else + # default to no everywhere else. + enable_relocatable="no" + fi + + +fi + + +if test x$enable_relocatable = xyes; then + if test x$os_win32 = xyes; then + +$as_echo "#define ENABLE_RELOCATABLE 1" >>confdefs.h + + else + as_fn_error $? "Invalid setting for relocatable, only supported on windows" "$LINENO" 5 + + fi +fi + + + prefix_NONE= + exec_prefix_NONE= + test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix + test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix + eval ac_define_dir="\"$"{datarootdir}/poppler"\"" + eval ac_define_dir="\"$ac_define_dir\"" + POPPLER_DATADIR="$ac_define_dir" + + +cat >>confdefs.h <<_ACEOF +#define POPPLER_DATADIR "$ac_define_dir" +_ACEOF + + test "$prefix_NONE" && prefix=NONE + test "$exec_prefix_NONE" && exec_prefix=NONE + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 +$as_echo_n "checking for X... " >&6; } + + +# Check whether --with-x was given. +if test "${with_x+set}" = set; then : + withval=$with_x; +fi + +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + case $x_includes,$x_libraries in #( + *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( + *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : + $as_echo_n "(cached) " >&6 +else + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=no ac_x_libraries=no +rm -f -r conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + cat >Imakefile <<'_ACEOF' +incroot: + @echo incroot='${INCROOT}' +usrlibdir: + @echo usrlibdir='${USRLIBDIR}' +libdir: + @echo libdir='${LIBDIR}' +_ACEOF + if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. + for ac_var in incroot usrlibdir libdir; do + eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" + done + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl dylib la dll; do + if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && + test -f "$ac_im_libdir/libX11.$ac_extension"; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ac_x_includes= ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /usr/lib64 | /lib | /lib64) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -f -r conftest.dir +fi + +# Standard set of common directories for X headers. +# Check X11 before X11Rn because it is often a symlink to the current release. +ac_x_header_dirs=' +/usr/X11/include +/usr/X11R7/include +/usr/X11R6/include +/usr/X11R5/include +/usr/X11R4/include + +/usr/include/X11 +/usr/include/X11R7 +/usr/include/X11R6 +/usr/include/X11R5 +/usr/include/X11R4 + +/usr/local/X11/include +/usr/local/X11R7/include +/usr/local/X11R6/include +/usr/local/X11R5/include +/usr/local/X11R4/include + +/usr/local/include/X11 +/usr/local/include/X11R7 +/usr/local/include/X11R6 +/usr/local/include/X11R5 +/usr/local/include/X11R4 + +/usr/X386/include +/usr/x386/include +/usr/XFree86/include/X11 + +/usr/include +/usr/local/include +/usr/unsupported/include +/usr/athena/include +/usr/local/x11r5/include +/usr/lpp/Xamples/include + +/usr/openwin/include +/usr/openwin/share/include' + +if test "$ac_x_includes" = no; then + # Guess where to find include files, by looking for Xlib.h. + # First, try using that file with no special directory specified. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <X11/Xlib.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # We can compile using X headers with no special include directory. +ac_x_includes= +else + for ac_dir in $ac_x_header_dirs; do + if test -r "$ac_dir/X11/Xlib.h"; then + ac_x_includes=$ac_dir + break + fi +done +fi +rm -f conftest.err conftest.i conftest.$ac_ext +fi # $ac_x_includes = no + +if test "$ac_x_libraries" = no; then + # Check for the libraries. + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS=$LIBS + LIBS="-lX11 $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <X11/Xlib.h> +int +main () +{ +XrmInitialize () + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBS=$ac_save_LIBS +# We can link X programs with no special library path. +ac_x_libraries= +else + LIBS=$ac_save_LIBS +for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +do + # Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl dylib la dll; do + if test -r "$ac_dir/libX11.$ac_extension"; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi # $ac_x_libraries = no + +case $ac_x_includes,$ac_x_libraries in #( + no,* | *,no | *\'*) + # Didn't find X, or a directory has "'" in its name. + ac_cv_have_x="have_x=no";; #( + *) + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$ac_x_includes'\ + ac_x_libraries='$ac_x_libraries'" +esac +fi +;; #( + *) have_x=yes;; + esac + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 +$as_echo "$have_x" >&6; } + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$x_includes'\ + ac_x_libraries='$x_libraries'" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 +$as_echo "libraries $x_libraries, headers $x_includes" >&6; } +fi + +if test "$no_x" = yes; then + # Not all programs may use this symbol, but it does not hurt to define it. + +$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h + + X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi + + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + # For Solaris; some versions of Sun CC require a space after -R and + # others require no space. Words are not sufficient . . . . + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 +$as_echo_n "checking whether -R must be followed by a space... " >&6; } + ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" + ac_xsave_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + X_LIBS="$X_LIBS -R$x_libraries" +else + LIBS="$ac_xsave_LIBS -R $x_libraries" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + X_LIBS="$X_LIBS -R $x_libraries" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 +$as_echo "neither works" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_c_werror_flag=$ac_xsave_c_werror_flag + LIBS=$ac_xsave_LIBS + fi + + # Check for system-dependent libraries X programs must link with. + # Do this before checking for the system-independent R6 libraries + # (-lICE), since we may need -lsocket or whatever for X linking. + + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn Johnson says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And Karl Berry says + # the Alpha needs dnet_stub (dnet does not exist). + ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XOpenDisplay (); +int +main () +{ +return XOpenDisplay (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } +if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_dnet_ntoa=yes +else + ac_cv_lib_dnet_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +fi + + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } +if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet_stub $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dnet_stub_dnet_ntoa=yes +else + ac_cv_lib_dnet_stub_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +fi + + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_xsave_LIBS" + + # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, + # to get the SysV transport functions. + # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) + # needs -lnsl. + # The nsl library prevents programs from opening the X display + # on Irix 5.2, according to T.E. Dickey. + # The functions gethostbyname, getservbyname, and inet_addr are + # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. + ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = xyes; then : + +fi + + if test $ac_cv_func_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } +if ${ac_cv_lib_nsl_gethostbyname+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nsl_gethostbyname=yes +else + ac_cv_lib_nsl_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +fi + + if test $ac_cv_lib_nsl_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 +$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } +if ${ac_cv_lib_bsd_gethostbyname+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_bsd_gethostbyname=yes +else + ac_cv_lib_bsd_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 +$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" +fi + + fi + fi + + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT + # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary + # on later versions), says Simon Leinen: it contains gethostby* + # variants that don't use the name server (or something). -lsocket + # must be given before -lnsl if both are needed. We assume that + # if connect needs -lnsl, so does gethostbyname. + ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" +if test "x$ac_cv_func_connect" = xyes; then : + +fi + + if test $ac_cv_func_connect = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 +$as_echo_n "checking for connect in -lsocket... " >&6; } +if ${ac_cv_lib_socket_connect+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_socket_connect=yes +else + ac_cv_lib_socket_connect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 +$as_echo "$ac_cv_lib_socket_connect" >&6; } +if test "x$ac_cv_lib_socket_connect" = xyes; then : + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +fi + + fi + + # Guillermo Gomez says -lposix is necessary on A/UX. + ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" +if test "x$ac_cv_func_remove" = xyes; then : + +fi + + if test $ac_cv_func_remove = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 +$as_echo_n "checking for remove in -lposix... " >&6; } +if ${ac_cv_lib_posix_remove+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char remove (); +int +main () +{ +return remove (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_posix_remove=yes +else + ac_cv_lib_posix_remove=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 +$as_echo "$ac_cv_lib_posix_remove" >&6; } +if test "x$ac_cv_lib_posix_remove" = xyes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +fi + + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" +if test "x$ac_cv_func_shmat" = xyes; then : + +fi + + if test $ac_cv_func_shmat = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 +$as_echo_n "checking for shmat in -lipc... " >&6; } +if ${ac_cv_lib_ipc_shmat+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lipc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shmat (); +int +main () +{ +return shmat (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ipc_shmat=yes +else + ac_cv_lib_ipc_shmat=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 +$as_echo "$ac_cv_lib_ipc_shmat" >&6; } +if test "x$ac_cv_lib_ipc_shmat" = xyes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +fi + + fi + fi + + # Check for libraries that X11R6 Xt/Xaw programs need. + ac_save_LDFLAGS=$LDFLAGS + test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" + # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to + # check for ICE first), but we must link in the order -lSM -lICE or + # we get undefined symbols. So assume we have SM if we have ICE. + # These have to be linked with before -lX11, unlike the other + # libraries we check for below, so use a different variable. + # John Interrante, Karl Berry + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 +$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } +if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char IceConnectionNumber (); +int +main () +{ +return IceConnectionNumber (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ICE_IceConnectionNumber=yes +else + ac_cv_lib_ICE_IceConnectionNumber=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then : + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +fi + + LDFLAGS=$ac_save_LDFLAGS + +fi + +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } +if eval \${$as_ac_Header+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <$ac_hdr> + +int +main () +{ +if ((DIR *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_ac_Header=yes" +else + eval "$as_ac_Header=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_ac_Header + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +_ACEOF + +ac_header_dirent=$ac_hdr; break +fi + +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dir; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_opendir+:} false; then : + break +fi +done +if ${ac_cv_search_opendir+:} false; then : + +else + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' x; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_opendir+:} false; then : + break +fi +done +if ${ac_cv_search_opendir+:} false; then : + +else + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +fi + +for ac_header in stdint.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdint_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H 1 +_ACEOF + +fi + +done + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +ac_fn_cxx_check_decl "$LINENO" "gettimeofday" "ac_cv_have_decl_gettimeofday" "#include <sys/time.h> +" +if test "x$ac_cv_have_decl_gettimeofday" = xyes; then : + ac_fn_cxx_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" +if test "x$ac_cv_func_gettimeofday" = xyes; then : + +$as_echo "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h + +fi + +fi + +ac_fn_cxx_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r" +if test "x$ac_cv_func_localtime_r" = xyes; then : + +$as_echo "#define HAVE_LOCALTIME_R 1" >>confdefs.h + +fi + +ac_fn_cxx_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r" +if test "x$ac_cv_func_gmtime_r" = xyes; then : + +$as_echo "#define HAVE_GMTIME_R 1" >>confdefs.h + +fi + + +ac_fn_cxx_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = xyes; then : + +fi + +if test $ac_cv_func_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 +$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } +if ${ac_cv_lib_bsd_gethostbyname+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_bsd_gethostbyname=yes +else + ac_cv_lib_bsd_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 +$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" +fi + +fi + +ac_fn_cxx_check_func "$LINENO" "nanosleep" "ac_cv_func_nanosleep" +if test "x$ac_cv_func_nanosleep" = xyes; then : + +fi + +if test x$ac_cv_func_nanosleep = xno +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nanosleep in -lrt" >&5 +$as_echo_n "checking for nanosleep in -lrt... " >&6; } +if ${ac_cv_lib_rt_nanosleep+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char nanosleep (); +int +main () +{ +return nanosleep (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_rt_nanosleep=yes +else + ac_cv_lib_rt_nanosleep=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_nanosleep" >&5 +$as_echo "$ac_cv_lib_rt_nanosleep" >&6; } +if test "x$ac_cv_lib_rt_nanosleep" = xyes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lrt" +fi + +fi + +if test x$ac_cv_func_nanosleep = xno && test x$ac_cv_lib_rt_nanosleep = xno +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nanosleep in -lposix4" >&5 +$as_echo_n "checking for nanosleep in -lposix4... " >&6; } +if ${ac_cv_lib_posix4_nanosleep+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix4 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char nanosleep (); +int +main () +{ +return nanosleep (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_posix4_nanosleep=yes +else + ac_cv_lib_posix4_nanosleep=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_nanosleep" >&5 +$as_echo "$ac_cv_lib_posix4_nanosleep" >&6; } +if test "x$ac_cv_lib_posix4_nanosleep" = xyes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix4" +fi + +fi + + +# Check whether --enable-libopenjpeg was given. +if test "${enable_libopenjpeg+set}" = set; then : + enableval=$enable_libopenjpeg; enable_libopenjpeg=$enableval +else + enable_libopenjpeg="try" +fi + +if test x$enable_libopenjpeg = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for opj_cio_open in -lopenjpeg" >&5 +$as_echo_n "checking for opj_cio_open in -lopenjpeg... " >&6; } +if ${ac_cv_lib_openjpeg_opj_cio_open+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lopenjpeg $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opj_cio_open (); +int +main () +{ +return opj_cio_open (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_openjpeg_opj_cio_open=yes +else + ac_cv_lib_openjpeg_opj_cio_open=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_openjpeg_opj_cio_open" >&5 +$as_echo "$ac_cv_lib_openjpeg_opj_cio_open" >&6; } +if test "x$ac_cv_lib_openjpeg_opj_cio_open" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBOPENJPEG 1 +_ACEOF + + LIBS="-lopenjpeg $LIBS" + +else + as_fn_error $? "\"*** libopenjpeg library not found ***\"" "$LINENO" 5 +fi + + +for ac_header in openjpeg.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "openjpeg.h" "ac_cv_header_openjpeg_h" "$ac_includes_default" +if test "x$ac_cv_header_openjpeg_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_OPENJPEG_H 1 +_ACEOF + +else + as_fn_error $? "\"*** libopenjpeg headers not found ***\"" "$LINENO" 5 +fi + +done + +elif test x$enable_libopenjpeg = xtry; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for opj_cio_open in -lopenjpeg" >&5 +$as_echo_n "checking for opj_cio_open in -lopenjpeg... " >&6; } +if ${ac_cv_lib_openjpeg_opj_cio_open+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lopenjpeg $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opj_cio_open (); +int +main () +{ +return opj_cio_open (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_openjpeg_opj_cio_open=yes +else + ac_cv_lib_openjpeg_opj_cio_open=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_openjpeg_opj_cio_open" >&5 +$as_echo "$ac_cv_lib_openjpeg_opj_cio_open" >&6; } +if test "x$ac_cv_lib_openjpeg_opj_cio_open" = xyes; then : + enable_libopenjpeg="yes" +else + enable_libopenjpeg="no" +fi + + for ac_header in openjpeg.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "openjpeg.h" "ac_cv_header_openjpeg_h" "$ac_includes_default" +if test "x$ac_cv_header_openjpeg_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_OPENJPEG_H 1 +_ACEOF + +else + enable_libopenjpeg="no" +fi + +done + +fi + +if test x$enable_libopenjpeg = xyes; then + LIBOPENJPEG_LIBS="-lopenjpeg" + + $as_echo "#define ENABLE_LIBOPENJPEG 1" >>confdefs.h + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <openjpeg.h> + +int +main () +{ + + int foo = OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + have_openjpeg_flag="yes" +else + am_cv_proto_iconv_arg1="no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test x$have_openjpeg_flag = xyes; then + +$as_echo "#define WITH_OPENJPEG_IGNORE_PCLR_CMAP_CDEF_FLAG 1" >>confdefs.h + + fi +fi + + if test x$enable_libopenjpeg = xyes; then + BUILD_LIBOPENJPEG_TRUE= + BUILD_LIBOPENJPEG_FALSE='#' +else + BUILD_LIBOPENJPEG_TRUE='#' + BUILD_LIBOPENJPEG_FALSE= +fi + + + +# Check whether --enable-libtiff was given. +if test "${enable_libtiff+set}" = set; then : + enableval=$enable_libtiff; enable_libtiff=$enableval +else + enable_libtiff="try" +fi + + +if test x$enable_libtiff = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFOpen in -ltiff" >&5 +$as_echo_n "checking for TIFFOpen in -ltiff... " >&6; } +if ${ac_cv_lib_tiff_TIFFOpen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ltiff $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char TIFFOpen (); +int +main () +{ +return TIFFOpen (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_tiff_TIFFOpen=yes +else + ac_cv_lib_tiff_TIFFOpen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFOpen" >&5 +$as_echo "$ac_cv_lib_tiff_TIFFOpen" >&6; } +if test "x$ac_cv_lib_tiff_TIFFOpen" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBTIFF 1 +_ACEOF + + LIBS="-ltiff $LIBS" + +else + as_fn_error $? "\"*** libtiff library not found ***\"" "$LINENO" 5 +fi + + for ac_header in tiffio.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "tiffio.h" "ac_cv_header_tiffio_h" "$ac_includes_default" +if test "x$ac_cv_header_tiffio_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TIFFIO_H 1 +_ACEOF + +else + as_fn_error $? "\"*** libtiff headers not found ***\"" "$LINENO" 5 +fi + +done + +elif test x$enable_libtiff = xtry; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFOpen in -ltiff" >&5 +$as_echo_n "checking for TIFFOpen in -ltiff... " >&6; } +if ${ac_cv_lib_tiff_TIFFOpen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ltiff $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char TIFFOpen (); +int +main () +{ +return TIFFOpen (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_tiff_TIFFOpen=yes +else + ac_cv_lib_tiff_TIFFOpen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFOpen" >&5 +$as_echo "$ac_cv_lib_tiff_TIFFOpen" >&6; } +if test "x$ac_cv_lib_tiff_TIFFOpen" = xyes; then : + enable_libtiff="yes" +else + enable_libtiff="no" +fi + + for ac_header in tiffio.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "tiffio.h" "ac_cv_header_tiffio_h" "$ac_includes_default" +if test "x$ac_cv_header_tiffio_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TIFFIO_H 1 +_ACEOF + +else + enable_libtiff="no" +fi + +done + +fi + +if test x$enable_libtiff = xyes; then + LIBTIFF_LIBS="-ltiff" + + $as_echo "#define ENABLE_LIBTIFF 1" >>confdefs.h + +fi + + if test x$enable_libtiff = xyes; then + BUILD_LIBTIFF_TRUE= + BUILD_LIBTIFF_FALSE='#' +else + BUILD_LIBTIFF_TRUE='#' + BUILD_LIBTIFF_FALSE= +fi + + +if test x$enable_libtiff = xyes; then + +$as_echo "#define ENABLE_LIBTIFF 1" >>confdefs.h + +fi + +for ac_func in popen mkstemp mkstemps +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 +$as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } +if ${ac_cv_sys_largefile_source+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> /* for off_t */ + #include <stdio.h> +int +main () +{ +int (*fp) (FILE *, off_t, int) = fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_sys_largefile_source=no; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGEFILE_SOURCE 1 +#include <sys/types.h> /* for off_t */ + #include <stdio.h> +int +main () +{ +int (*fp) (FILE *, off_t, int) = fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_sys_largefile_source=1; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_cv_sys_largefile_source=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 +$as_echo "$ac_cv_sys_largefile_source" >&6; } +case $ac_cv_sys_largefile_source in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source +_ACEOF +;; +esac +rm -rf conftest* + +# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug +# in glibc 2.1.3, but that breaks too many other things. +# If you want fseeko and ftello with glibc, upgrade to a fixed glibc. +if test $ac_cv_sys_largefile_source != unknown; then + +$as_echo "#define HAVE_FSEEKO 1" >>confdefs.h + +fi + +for ac_func in fseek64 +do : + ac_fn_c_check_func "$LINENO" "fseek64" "ac_cv_func_fseek64" +if test "x$ac_cv_func_fseek64" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_FSEEK64 1 +_ACEOF + xpdf_cv_func_fseek64=yes +else + xpdf_cv_func_fseek64=no +fi +done + +for ac_func in ftell64 +do : + ac_fn_c_check_func "$LINENO" "ftell64" "ac_cv_func_ftell64" +if test "x$ac_cv_func_ftell64" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_FTELL64 1 +_ACEOF + xpdf_cv_func_ftell64=yes +else + xpdf_cv_func_ftell64=no +fi +done + +if test "$xpdf_cv_func_fseek64" = yes -a "$xpdf_cv_func_ftell64" = yes; then + $as_echo "#define HAVE_FSEEK64 1" >>confdefs.h + +fi + +# Check whether --enable-zlib was given. +if test "${enable_zlib+set}" = set; then : + enableval=$enable_zlib; +else + enable_zlib="no" +fi + +if test x$enable_zlib = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflate in -lz" >&5 +$as_echo_n "checking for inflate in -lz... " >&6; } +if ${ac_cv_lib_z_inflate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inflate (); +int +main () +{ +return inflate (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_inflate=yes +else + ac_cv_lib_z_inflate=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflate" >&5 +$as_echo "$ac_cv_lib_z_inflate" >&6; } +if test "x$ac_cv_lib_z_inflate" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBZ 1 +_ACEOF + + LIBS="-lz $LIBS" + +else + as_fn_error $? "\"*** zlib library not found ***\"" "$LINENO" 5 +fi + + for ac_header in zlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" +if test "x$ac_cv_header_zlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ZLIB_H 1 +_ACEOF + +else + as_fn_error $? "\"*** zlib headers not found ***\"" "$LINENO" 5 +fi + +done + +elif test x$enable_zlib = xtry; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflate in -lz" >&5 +$as_echo_n "checking for inflate in -lz... " >&6; } +if ${ac_cv_lib_z_inflate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inflate (); +int +main () +{ +return inflate (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_inflate=yes +else + ac_cv_lib_z_inflate=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflate" >&5 +$as_echo "$ac_cv_lib_z_inflate" >&6; } +if test "x$ac_cv_lib_z_inflate" = xyes; then : + enable_zlib="yes" +else + enable_zlib="no" +fi + + for ac_header in zlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" +if test "x$ac_cv_header_zlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ZLIB_H 1 +_ACEOF + +else + enable_zlib="no" +fi + +done + +fi + +if test x$enable_zlib = xyes; then + ZLIB_LIBS="-lz" + + $as_echo "#define ENABLE_ZLIB 1" >>confdefs.h + +fi + + if test x$enable_zlib = xyes; then + BUILD_ZLIB_TRUE= + BUILD_ZLIB_FALSE='#' +else + BUILD_ZLIB_TRUE='#' + BUILD_ZLIB_FALSE= +fi + + + +# Check whether --enable-libcurl was given. +if test "${enable_libcurl+set}" = set; then : + enableval=$enable_libcurl; enable_libcurl=$enableval +else + enable_libcurl="no" +fi + + +if test x$enable_libcurl = xyes; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBCURL" >&5 +$as_echo_n "checking for LIBCURL... " >&6; } + +if test -n "$LIBCURL_CFLAGS"; then + pkg_cv_LIBCURL_CFLAGS="$LIBCURL_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libcurl") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBCURL_CFLAGS=`$PKG_CONFIG --cflags "libcurl" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBCURL_LIBS"; then + pkg_cv_LIBCURL_LIBS="$LIBCURL_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libcurl") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBCURL_LIBS=`$PKG_CONFIG --libs "libcurl" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBCURL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libcurl" 2>&1` + else + LIBCURL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libcurl" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBCURL_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (libcurl) were not met: + +$LIBCURL_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables LIBCURL_CFLAGS +and LIBCURL_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables LIBCURL_CFLAGS +and LIBCURL_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see <http://pkg-config.freedesktop.org/>. +See \`config.log' for more details" "$LINENO" 5; } +else + LIBCURL_CFLAGS=$pkg_cv_LIBCURL_CFLAGS + LIBCURL_LIBS=$pkg_cv_LIBCURL_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + +$as_echo "#define ENABLE_LIBCURL 1" >>confdefs.h + + +$as_echo "#define POPPLER_HAS_CURL_SUPPORT 1" >>confdefs.h + +fi + + if test x$enable_libcurl = xyes; then + BUILD_LIBCURL_TRUE= + BUILD_LIBCURL_FALSE='#' +else + BUILD_LIBCURL_TRUE='#' + BUILD_LIBCURL_FALSE= +fi + + +# Check whether --enable-libjpeg was given. +if test "${enable_libjpeg+set}" = set; then : + enableval=$enable_libjpeg; enable_libjpeg=$enableval +else + enable_libjpeg="try" +fi + +if test x$enable_libjpeg != xno; then + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libjpeg6b" >&5 +$as_echo_n "checking for libjpeg6b... " >&6; } +if ${ac_cv_lib_jpeg_6b+:} false; then : + $as_echo_n "(cached) " >&6 +else + +ac_save_LIBS="$LIBS" +LIBS="$all_libraries $USER_LDFLAGS -ljpeg6b -lm" +ac_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __cplusplus +extern "C" { +#endif +void jpeg_CreateDecompress(); +#ifdef __cplusplus +} +#endif + +int +main () +{ +jpeg_CreateDecompress(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "ac_cv_lib_jpeg_6b=-ljpeg6b" +else + eval "ac_cv_lib_jpeg_6b=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS="$ac_save_LIBS" +CFLAGS="$ac_save_CFLAGS" + +fi + + +if eval "test ! \"`echo $ac_cv_lib_jpeg_6b`\" = no"; then + enable_libjpeg=yes + LIBJPEG_LIBS="$ac_cv_lib_jpeg_6b" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_6b" >&5 +$as_echo "$ac_cv_lib_jpeg_6b" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libjpeg" >&5 +$as_echo_n "checking for libjpeg... " >&6; } +if ${ac_cv_lib_jpeg_normal+:} false; then : + $as_echo_n "(cached) " >&6 +else + +ac_save_LIBS="$LIBS" +LIBS="$all_libraries $USER_LDFLAGS -ljpeg -lm" +ac_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __cplusplus +extern "C" { +#endif +void jpeg_CreateDecompress(); +#ifdef __cplusplus +} +#endif + +int +main () +{ +jpeg_CreateDecompress(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "ac_cv_lib_jpeg_normal=-ljpeg" +else + eval "ac_cv_lib_jpeg_normal=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS="$ac_save_LIBS" +CFLAGS="$ac_save_CFLAGS" + +fi + + +if eval "test ! \"`echo $ac_cv_lib_jpeg_normal`\" = no"; then + enable_libjpeg=yes + LIBJPEG_LIBS="$ac_cv_lib_jpeg_normal" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_normal" >&5 +$as_echo "$ac_cv_lib_jpeg_normal" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + LIBJPEG_LIBS= + + +fi + + +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" +if test "x$ac_cv_header_jpeglib_h" = xyes; then : + jpeg_incdir=yes +else + jpeg_incdir=NO +fi + + +test "x$jpeg_incdir" = xNO && jpeg_incdir= + +if test -n "$jpeg_incdir" && test -n "$LIBJPEG_LIBS" ; then + +cat >>confdefs.h <<_ACEOF +#define ENABLE_LIBJPEG 1 +_ACEOF + +else + if test -n "$jpeg_incdir" || test -n "$LIBJPEG_LIBS" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +There is an installation error in jpeg support. You seem to have only one +of either the headers _or_ the libraries installed. You may need to either +provide correct --with-extra-... options, or the development package of +libjpeg6b. You can get a source package of libjpeg from http://www.ijg.org/ +Disabling JPEG support. +" >&5 +$as_echo "$as_me: WARNING: +There is an installation error in jpeg support. You seem to have only one +of either the headers _or_ the libraries installed. You may need to either +provide correct --with-extra-... options, or the development package of +libjpeg6b. You can get a source package of libjpeg from http://www.ijg.org/ +Disabling JPEG support. +" >&2;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libjpeg not found. disable JPEG support." >&5 +$as_echo "$as_me: WARNING: libjpeg not found. disable JPEG support." >&2;} + fi + jpeg_incdir= + enable_libjpeg=no + LIBJPEG_LIBS= +fi + + + + +fi + + if test x$enable_libjpeg = xyes; then + BUILD_LIBJPEG_TRUE= + BUILD_LIBJPEG_FALSE='#' +else + BUILD_LIBJPEG_TRUE='#' + BUILD_LIBJPEG_FALSE= +fi + + + +# Check whether --enable-libpng was given. +if test "${enable_libpng+set}" = set; then : + enableval=$enable_libpng; enable_libpng=$enableval +else + enable_libpng="try" +fi + + +if test x$enable_libpng != xno; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBPNG" >&5 +$as_echo_n "checking for LIBPNG... " >&6; } + +if test -n "$LIBPNG_CFLAGS"; then + pkg_cv_LIBPNG_CFLAGS="$LIBPNG_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libpng") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBPNG_CFLAGS=`$PKG_CONFIG --cflags "libpng" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBPNG_LIBS"; then + pkg_cv_LIBPNG_LIBS="$LIBPNG_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libpng") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBPNG_LIBS=`$PKG_CONFIG --libs "libpng" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBPNG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libpng" 2>&1` + else + LIBPNG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libpng" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBPNG_PKG_ERRORS" >&5 + + enable_libpng="no" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + enable_libpng="no" +else + LIBPNG_CFLAGS=$pkg_cv_LIBPNG_CFLAGS + LIBPNG_LIBS=$pkg_cv_LIBPNG_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + enable_libpng="yes" +fi +fi + +if test x$enable_libpng = xyes; then + +$as_echo "#define ENABLE_LIBPNG 1" >>confdefs.h + +fi + + if test x$enable_libpng = xyes; then + BUILD_LIBPNG_TRUE= + BUILD_LIBPNG_FALSE='#' +else + BUILD_LIBPNG_TRUE='#' + BUILD_LIBPNG_FALSE= +fi + + +FREETYPE_LIBS= +FREETYPE_CFLAGS= + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE" >&5 +$as_echo_n "checking for FREETYPE... " >&6; } + +if test -n "$FREETYPE_CFLAGS"; then + pkg_cv_FREETYPE_CFLAGS="$FREETYPE_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FREETYPE_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$FREETYPE_LIBS"; then + pkg_cv_FREETYPE_LIBS="$FREETYPE_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FREETYPE_LIBS=`$PKG_CONFIG --libs "freetype2" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + FREETYPE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "freetype2" 2>&1` + else + FREETYPE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "freetype2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$FREETYPE_PKG_ERRORS" >&5 + + freetype_pkgconfig=no +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + freetype_pkgconfig=no +else + FREETYPE_CFLAGS=$pkg_cv_FREETYPE_CFLAGS + FREETYPE_LIBS=$pkg_cv_FREETYPE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + freetype_pkgconfig=yes +fi + +if test "x$freetype_pkgconfig" = "xyes"; then + + +$as_echo "#define HAVE_FREETYPE_H 1" >>confdefs.h + + +else + + # Extract the first word of "freetype-config", so it can be a program name with args. +set dummy freetype-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FREETYPE_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $FREETYPE_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_FREETYPE_CONFIG="$FREETYPE_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_FREETYPE_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_FREETYPE_CONFIG" && ac_cv_path_FREETYPE_CONFIG="no" + ;; +esac +fi +FREETYPE_CONFIG=$ac_cv_path_FREETYPE_CONFIG +if test -n "$FREETYPE_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE_CONFIG" >&5 +$as_echo "$FREETYPE_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$FREETYPE_CONFIG" != "xno" ; then + + FREETYPE_CFLAGS=`$FREETYPE_CONFIG --cflags` + FREETYPE_LIBS=`$FREETYPE_CONFIG --libs` + +$as_echo "#define HAVE_FREETYPE_H 1" >>confdefs.h + + + fi + +fi + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which font configuration to use" >&5 +$as_echo_n "checking which font configuration to use... " >&6; } + +# Check whether --with-font_configuration was given. +if test "${with_font_configuration+set}" = set; then : + withval=$with_font_configuration; +else + if test x$os_win32 = xyes; then + # default to win32 on native Windows. + with_font_configuration=win32 + else + # default to fontconig everywhere else. + with_font_configuration=fontconfig + fi + + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_font_configuration" >&5 +$as_echo "$with_font_configuration" >&6; } + +case $with_font_configuration in + win32) + +$as_echo "#define WITH_FONTCONFIGURATION_WIN32 1" >>confdefs.h + + # Set the minimum required Internet Explorer version to 5.0 + CPPFLAGS="$CPPFLAGS -D_WIN32_IE=0x0500" + ;; + fontconfig) + +$as_echo "#define WITH_FONTCONFIGURATION_FONTCONFIG 1" >>confdefs.h + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FONTCONFIG" >&5 +$as_echo_n "checking for FONTCONFIG... " >&6; } + +if test -n "$FONTCONFIG_CFLAGS"; then + pkg_cv_FONTCONFIG_CFLAGS="$FONTCONFIG_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fontconfig >= 2.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "fontconfig >= 2.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FONTCONFIG_CFLAGS=`$PKG_CONFIG --cflags "fontconfig >= 2.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$FONTCONFIG_LIBS"; then + pkg_cv_FONTCONFIG_LIBS="$FONTCONFIG_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fontconfig >= 2.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "fontconfig >= 2.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FONTCONFIG_LIBS=`$PKG_CONFIG --libs "fontconfig >= 2.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + FONTCONFIG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "fontconfig >= 2.0.0" 2>&1` + else + FONTCONFIG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "fontconfig >= 2.0.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$FONTCONFIG_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (fontconfig >= 2.0.0) were not met: + +$FONTCONFIG_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables FONTCONFIG_CFLAGS +and FONTCONFIG_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables FONTCONFIG_CFLAGS +and FONTCONFIG_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see <http://pkg-config.freedesktop.org/>. +See \`config.log' for more details" "$LINENO" 5; } +else + FONTCONFIG_CFLAGS=$pkg_cv_FONTCONFIG_CFLAGS + FONTCONFIG_LIBS=$pkg_cv_FONTCONFIG_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + ;; + *) + as_fn_error $? "Invalid font configuration setting: $with_font_configuration" "$LINENO" 5 + ;; +esac + + if test x$with_font_configuration = xwin32; then + BUILD_WITH_WIN32_FONTCONFIGURATION_TRUE= + BUILD_WITH_WIN32_FONTCONFIGURATION_FALSE='#' +else + BUILD_WITH_WIN32_FONTCONFIGURATION_TRUE='#' + BUILD_WITH_WIN32_FONTCONFIGURATION_FALSE= +fi + + +# Check whether --enable-splash-output was given. +if test "${enable_splash_output+set}" = set; then : + enableval=$enable_splash_output; +else + enable_splash_output="yes" +fi + + if test x$enable_splash_output = xyes; then + BUILD_SPLASH_OUTPUT_TRUE= + BUILD_SPLASH_OUTPUT_FALSE='#' +else + BUILD_SPLASH_OUTPUT_TRUE='#' + BUILD_SPLASH_OUTPUT_FALSE= +fi + + +if test x$enable_splash_output = xyes; then + $as_echo "#define HAVE_SPLASH 1" >>confdefs.h + +fi + +CAIRO_VERSION="1.10.0" + +# Check whether --enable-cairo-output was given. +if test "${enable_cairo_output+set}" = set; then : + enableval=$enable_cairo_output; enable_cairo_output=$enableval +else + enable_cairo_output="try" +fi + +if test x$enable_cairo_output = xyes; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5 +$as_echo_n "checking for CAIRO... " >&6; } + +if test -n "$CAIRO_CFLAGS"; then + pkg_cv_CAIRO_CFLAGS="$CAIRO_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= \$CAIRO_VERSION cairo-ft >= \$CAIRO_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$CAIRO_LIBS"; then + pkg_cv_CAIRO_LIBS="$CAIRO_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= \$CAIRO_VERSION cairo-ft >= \$CAIRO_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + CAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION" 2>&1` + else + CAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$CAIRO_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION) were not met: + +$CAIRO_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables CAIRO_CFLAGS +and CAIRO_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables CAIRO_CFLAGS +and CAIRO_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see <http://pkg-config.freedesktop.org/>. +See \`config.log' for more details" "$LINENO" 5; } +else + CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS + CAIRO_LIBS=$pkg_cv_CAIRO_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi +elif test x$enable_cairo_output = xtry; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5 +$as_echo_n "checking for CAIRO... " >&6; } + +if test -n "$CAIRO_CFLAGS"; then + pkg_cv_CAIRO_CFLAGS="$CAIRO_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= \$CAIRO_VERSION cairo-ft >= \$CAIRO_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$CAIRO_LIBS"; then + pkg_cv_CAIRO_LIBS="$CAIRO_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= \$CAIRO_VERSION cairo-ft >= \$CAIRO_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + CAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION" 2>&1` + else + CAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$CAIRO_PKG_ERRORS" >&5 + + enable_cairo_output="no" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + enable_cairo_output="no" +else + CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS + CAIRO_LIBS=$pkg_cv_CAIRO_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + enable_cairo_output="yes" +fi +fi + + + + + if test x$enable_cairo_output = xyes; then + BUILD_CAIRO_OUTPUT_TRUE= + BUILD_CAIRO_OUTPUT_FALSE='#' +else + BUILD_CAIRO_OUTPUT_TRUE='#' + BUILD_CAIRO_OUTPUT_FALSE= +fi + + +if test x$enable_cairo_output = xyes; then + PDFTOCAIRO_DEPS="cairo cairo-ft" + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo-pdf\""; } >&5 + ($PKG_CONFIG --exists --print-errors "cairo-pdf") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + PDFTOCAIRO_DEPS="$PDFTOCAIRO_DEPS cairo-pdf" +fi + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo-ps\""; } >&5 + ($PKG_CONFIG --exists --print-errors "cairo-ps") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + PDFTOCAIRO_DEPS="$PDFTOCAIRO_DEPS cairo-ps" +fi + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo-svg\""; } >&5 + ($PKG_CONFIG --exists --print-errors "cairo-svg") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + PDFTOCAIRO_DEPS="$PDFTOCAIRO_DEPS cairo-svg" +fi + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PDFTOCAIRO" >&5 +$as_echo_n "checking for PDFTOCAIRO... " >&6; } + +if test -n "$PDFTOCAIRO_CFLAGS"; then + pkg_cv_PDFTOCAIRO_CFLAGS="$PDFTOCAIRO_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$PDFTOCAIRO_DEPS\""; } >&5 + ($PKG_CONFIG --exists --print-errors "$PDFTOCAIRO_DEPS") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PDFTOCAIRO_CFLAGS=`$PKG_CONFIG --cflags "$PDFTOCAIRO_DEPS" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$PDFTOCAIRO_LIBS"; then + pkg_cv_PDFTOCAIRO_LIBS="$PDFTOCAIRO_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$PDFTOCAIRO_DEPS\""; } >&5 + ($PKG_CONFIG --exists --print-errors "$PDFTOCAIRO_DEPS") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PDFTOCAIRO_LIBS=`$PKG_CONFIG --libs "$PDFTOCAIRO_DEPS" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PDFTOCAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$PDFTOCAIRO_DEPS" 2>&1` + else + PDFTOCAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$PDFTOCAIRO_DEPS" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$PDFTOCAIRO_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements ($PDFTOCAIRO_DEPS) were not met: + +$PDFTOCAIRO_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables PDFTOCAIRO_CFLAGS +and PDFTOCAIRO_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables PDFTOCAIRO_CFLAGS +and PDFTOCAIRO_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see <http://pkg-config.freedesktop.org/>. +See \`config.log' for more details" "$LINENO" 5; } +else + PDFTOCAIRO_CFLAGS=$pkg_cv_PDFTOCAIRO_CFLAGS + PDFTOCAIRO_LIBS=$pkg_cv_PDFTOCAIRO_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + + + + $as_echo "#define HAVE_CAIRO 1" >>confdefs.h + + CAIRO_FEATURE="#define POPPLER_HAS_CAIRO 1" + CAIRO_REQ="cairo" + for ac_header in fcntl.h sys/mman.h sys/stat.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +else + CAIRO_FEATURE="#undef POPPLER_HAS_CAIRO" + CAIRO_REQ="" +fi + + + +found_introspection=no +if test x$enable_cairo_output = xyes; then + POPPLER_GLIB_DISABLE_DEPRECATED="" + POPPLER_GLIB_DISABLE_SINGLE_INCLUDES="" + + GLIB_REQUIRED=2.18 + + # Check whether --enable-poppler-glib was given. +if test "${enable_poppler_glib+set}" = set; then : + enableval=$enable_poppler_glib; enable_poppler_glib=$enableval +else + enable_poppler_glib="try" +fi + + if test x$enable_poppler_glib = xyes; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POPPLER_GLIB" >&5 +$as_echo_n "checking for POPPLER_GLIB... " >&6; } + +if test -n "$POPPLER_GLIB_CFLAGS"; then + pkg_cv_POPPLER_GLIB_CFLAGS="$POPPLER_GLIB_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= \$GLIB_REQUIRED gobject-2.0 >= \$GLIB_REQUIRED cairo >= \$CAIRO_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_POPPLER_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$POPPLER_GLIB_LIBS"; then + pkg_cv_POPPLER_GLIB_LIBS="$POPPLER_GLIB_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= \$GLIB_REQUIRED gobject-2.0 >= \$GLIB_REQUIRED cairo >= \$CAIRO_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_POPPLER_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + POPPLER_GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>&1` + else + POPPLER_GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$POPPLER_GLIB_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION) were not met: + +$POPPLER_GLIB_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables POPPLER_GLIB_CFLAGS +and POPPLER_GLIB_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables POPPLER_GLIB_CFLAGS +and POPPLER_GLIB_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see <http://pkg-config.freedesktop.org/>. +See \`config.log' for more details" "$LINENO" 5; } +else + POPPLER_GLIB_CFLAGS=$pkg_cv_POPPLER_GLIB_CFLAGS + POPPLER_GLIB_LIBS=$pkg_cv_POPPLER_GLIB_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + elif test x$enable_poppler_glib = xtry; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POPPLER_GLIB" >&5 +$as_echo_n "checking for POPPLER_GLIB... " >&6; } + +if test -n "$POPPLER_GLIB_CFLAGS"; then + pkg_cv_POPPLER_GLIB_CFLAGS="$POPPLER_GLIB_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= \$GLIB_REQUIRED gobject-2.0 >= \$GLIB_REQUIRED cairo >= \$CAIRO_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_POPPLER_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$POPPLER_GLIB_LIBS"; then + pkg_cv_POPPLER_GLIB_LIBS="$POPPLER_GLIB_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= \$GLIB_REQUIRED gobject-2.0 >= \$GLIB_REQUIRED cairo >= \$CAIRO_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_POPPLER_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + POPPLER_GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>&1` + else + POPPLER_GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$POPPLER_GLIB_PKG_ERRORS" >&5 + + enable_poppler_glib="no" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + enable_poppler_glib="no" +else + POPPLER_GLIB_CFLAGS=$pkg_cv_POPPLER_GLIB_CFLAGS + POPPLER_GLIB_LIBS=$pkg_cv_POPPLER_GLIB_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + enable_poppler_glib="yes" +fi + fi + if test x$enable_poppler_glib = xyes; then + # Check for introspection + + + + # Check whether --enable-introspection was given. +if test "${enable_introspection+set}" = set; then : + enableval=$enable_introspection; +else + enable_introspection=auto +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gobject-introspection" >&5 +$as_echo_n "checking for gobject-introspection... " >&6; } + + case $enable_introspection in #( + no) : + found_introspection="no (disabled, use --enable-introspection to enable)" + ;; #( + yes) : + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + : +else + as_fn_error $? "gobject-introspection-1.0 is not installed" "$LINENO" 5 +fi + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.7\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.7") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + found_introspection=yes +else + as_fn_error $? "You need to have gobject-introspection >= 0.6.7 installed to build poppler" "$LINENO" 5 +fi + ;; #( + auto) : + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.7\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.7") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + found_introspection=yes +else + found_introspection=no +fi + ;; #( + *) : + as_fn_error $? "invalid argument passed to --enable-introspection, should be one of [no/auto/yes]" "$LINENO" 5 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found_introspection" >&5 +$as_echo "$found_introspection" >&6; } + + INTROSPECTION_SCANNER= + INTROSPECTION_COMPILER= + INTROSPECTION_GENERATE= + INTROSPECTION_GIRDIR= + INTROSPECTION_TYPELIBDIR= + if test "x$found_introspection" = "xyes"; then + INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0` + INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0` + INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0` + INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0` + INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)" + INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0` + INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0` + INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection + fi + + + + + + + + + + if test "x$found_introspection" = "xyes"; then + HAVE_INTROSPECTION_TRUE= + HAVE_INTROSPECTION_FALSE='#' +else + HAVE_INTROSPECTION_TRUE='#' + HAVE_INTROSPECTION_FALSE= +fi + + + + + # Extract the first word of "glib-mkenums", so it can be a program name with args. +set dummy glib-mkenums; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GLIB_MKENUMS+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GLIB_MKENUMS in + [\\/]* | ?:[\\/]*) + ac_cv_path_GLIB_MKENUMS="$GLIB_MKENUMS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GLIB_MKENUMS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +GLIB_MKENUMS=$ac_cv_path_GLIB_MKENUMS +if test -n "$GLIB_MKENUMS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_MKENUMS" >&5 +$as_echo "$GLIB_MKENUMS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + POPPLER_GLIB_DISABLE_DEPRECATED="$POPPLER_GLIB_DISABLE_DEPRECATED -DG_DISABLE_DEPRECATED" + POPPLER_GLIB_DISABLE_SINGLE_INCLUDES="$POPPLER_GLIB_DISABLE_SINGLE_INCLUDES -DG_DISABLE_SINGLE_INCLUDES" + fi +else + if test x$enable_poppler_glib = xyes; then + as_fn_error $? "\"Cairo output is required to build glib frontend\"" "$LINENO" 5 + fi + enable_poppler_glib="no" +fi + if test x$enable_poppler_glib = xyes; then + BUILD_POPPLER_GLIB_TRUE= + BUILD_POPPLER_GLIB_FALSE='#' +else + BUILD_POPPLER_GLIB_TRUE='#' + BUILD_POPPLER_GLIB_FALSE= +fi + + if test "x$found_introspection" = "xyes"; then + HAVE_INTROSPECTION_TRUE= + HAVE_INTROSPECTION_FALSE='#' +else + HAVE_INTROSPECTION_TRUE='#' + HAVE_INTROSPECTION_FALSE= +fi + + + + + + + + + # Extract the first word of "gtkdoc-check", so it can be a program name with args. +set dummy gtkdoc-check; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GTKDOC_CHECK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GTKDOC_CHECK in + [\\/]* | ?:[\\/]*) + ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK +if test -n "$GTKDOC_CHECK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5 +$as_echo "$GTKDOC_CHECK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + for ac_prog in gtkdoc-rebase +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GTKDOC_REBASE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GTKDOC_REBASE in + [\\/]* | ?:[\\/]*) + ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GTKDOC_REBASE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE +if test -n "$GTKDOC_REBASE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5 +$as_echo "$GTKDOC_REBASE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$GTKDOC_REBASE" && break +done +test -n "$GTKDOC_REBASE" || GTKDOC_REBASE="true" + + # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args. +set dummy gtkdoc-mkpdf; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GTKDOC_MKPDF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GTKDOC_MKPDF in + [\\/]* | ?:[\\/]*) + ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GTKDOC_MKPDF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF +if test -n "$GTKDOC_MKPDF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5 +$as_echo "$GTKDOC_MKPDF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + +# Check whether --with-html-dir was given. +if test "${with_html_dir+set}" = set; then : + withval=$with_html_dir; +else + with_html_dir='${datadir}/gtk-doc/html' +fi + + HTML_DIR="$with_html_dir" + + + # Check whether --enable-gtk-doc was given. +if test "${enable_gtk_doc+set}" = set; then : + enableval=$enable_gtk_doc; +else + enable_gtk_doc=no +fi + + + if test x$enable_gtk_doc = xyes; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.14\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.14") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + : +else + as_fn_error $? "You need to have gtk-doc >= 1.14 installed to build $PACKAGE_NAME" "$LINENO" 5 +fi + if test "x$PACKAGE_NAME" != "xglib"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKDOC_DEPS" >&5 +$as_echo_n "checking for GTKDOC_DEPS... " >&6; } + +if test -n "$GTKDOC_DEPS_CFLAGS"; then + pkg_cv_GTKDOC_DEPS_CFLAGS="$GTKDOC_DEPS_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GTKDOC_DEPS_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$GTKDOC_DEPS_LIBS"; then + pkg_cv_GTKDOC_DEPS_LIBS="$GTKDOC_DEPS_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GTKDOC_DEPS_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>&1` + else + GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$GTKDOC_DEPS_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0) were not met: + +$GTKDOC_DEPS_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables GTKDOC_DEPS_CFLAGS +and GTKDOC_DEPS_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables GTKDOC_DEPS_CFLAGS +and GTKDOC_DEPS_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see <http://pkg-config.freedesktop.org/>. +See \`config.log' for more details" "$LINENO" 5; } +else + GTKDOC_DEPS_CFLAGS=$pkg_cv_GTKDOC_DEPS_CFLAGS + GTKDOC_DEPS_LIBS=$pkg_cv_GTKDOC_DEPS_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5 +$as_echo_n "checking whether to build gtk-doc documentation... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5 +$as_echo "$enable_gtk_doc" >&6; } + + # Check whether --enable-gtk-doc-html was given. +if test "${enable_gtk_doc_html+set}" = set; then : + enableval=$enable_gtk_doc_html; +else + enable_gtk_doc_html=yes +fi + + # Check whether --enable-gtk-doc-pdf was given. +if test "${enable_gtk_doc_pdf+set}" = set; then : + enableval=$enable_gtk_doc_pdf; +else + enable_gtk_doc_pdf=no +fi + + + if test -z "$GTKDOC_MKPDF"; then + enable_gtk_doc_pdf=no + fi + + + if test x$enable_gtk_doc = xyes; then + ENABLE_GTK_DOC_TRUE= + ENABLE_GTK_DOC_FALSE='#' +else + ENABLE_GTK_DOC_TRUE='#' + ENABLE_GTK_DOC_FALSE= +fi + + if test x$enable_gtk_doc_html = xyes; then + GTK_DOC_BUILD_HTML_TRUE= + GTK_DOC_BUILD_HTML_FALSE='#' +else + GTK_DOC_BUILD_HTML_TRUE='#' + GTK_DOC_BUILD_HTML_FALSE= +fi + + if test x$enable_gtk_doc_pdf = xyes; then + GTK_DOC_BUILD_PDF_TRUE= + GTK_DOC_BUILD_PDF_FALSE='#' +else + GTK_DOC_BUILD_PDF_TRUE='#' + GTK_DOC_BUILD_PDF_FALSE= +fi + + if test -n "$LIBTOOL"; then + GTK_DOC_USE_LIBTOOL_TRUE= + GTK_DOC_USE_LIBTOOL_FALSE='#' +else + GTK_DOC_USE_LIBTOOL_TRUE='#' + GTK_DOC_USE_LIBTOOL_FALSE= +fi + + if test -n "$GTKDOC_REBASE"; then + GTK_DOC_USE_REBASE_TRUE= + GTK_DOC_USE_REBASE_FALSE='#' +else + GTK_DOC_USE_REBASE_TRUE='#' + GTK_DOC_USE_REBASE_FALSE= +fi + + + + +# Check whether --enable-poppler-qt4 was given. +if test "${enable_poppler_qt4+set}" = set; then : + enableval=$enable_poppler_qt4; enable_poppler_qt4=$enableval +else + enable_poppler_qt4="try" +fi + +if test x$enable_poppler_qt4 = xyes; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POPPLER_QT4" >&5 +$as_echo_n "checking for POPPLER_QT4... " >&6; } + +if test -n "$POPPLER_QT4_CFLAGS"; then + pkg_cv_POPPLER_QT4_CFLAGS="$POPPLER_QT4_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_POPPLER_QT4_CFLAGS=`$PKG_CONFIG --cflags "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$POPPLER_QT4_LIBS"; then + pkg_cv_POPPLER_QT4_LIBS="$POPPLER_QT4_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_POPPLER_QT4_LIBS=`$PKG_CONFIG --libs "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + POPPLER_QT4_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>&1` + else + POPPLER_QT4_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$POPPLER_QT4_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0) were not met: + +$POPPLER_QT4_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables POPPLER_QT4_CFLAGS +and POPPLER_QT4_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables POPPLER_QT4_CFLAGS +and POPPLER_QT4_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see <http://pkg-config.freedesktop.org/>. +See \`config.log' for more details" "$LINENO" 5; } +else + POPPLER_QT4_CFLAGS=$pkg_cv_POPPLER_QT4_CFLAGS + POPPLER_QT4_LIBS=$pkg_cv_POPPLER_QT4_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POPPLER_QT4_TEST" >&5 +$as_echo_n "checking for POPPLER_QT4_TEST... " >&6; } + +if test -n "$POPPLER_QT4_TEST_CFLAGS"; then + pkg_cv_POPPLER_QT4_TEST_CFLAGS="$POPPLER_QT4_TEST_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtTest >= 4.4.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "QtTest >= 4.4.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_POPPLER_QT4_TEST_CFLAGS=`$PKG_CONFIG --cflags "QtTest >= 4.4.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$POPPLER_QT4_TEST_LIBS"; then + pkg_cv_POPPLER_QT4_TEST_LIBS="$POPPLER_QT4_TEST_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtTest >= 4.4.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "QtTest >= 4.4.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_POPPLER_QT4_TEST_LIBS=`$PKG_CONFIG --libs "QtTest >= 4.4.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + POPPLER_QT4_TEST_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "QtTest >= 4.4.0" 2>&1` + else + POPPLER_QT4_TEST_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "QtTest >= 4.4.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$POPPLER_QT4_TEST_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (QtTest >= 4.4.0) were not met: + +$POPPLER_QT4_TEST_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables POPPLER_QT4_TEST_CFLAGS +and POPPLER_QT4_TEST_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables POPPLER_QT4_TEST_CFLAGS +and POPPLER_QT4_TEST_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see <http://pkg-config.freedesktop.org/>. +See \`config.log' for more details" "$LINENO" 5; } +else + POPPLER_QT4_TEST_CFLAGS=$pkg_cv_POPPLER_QT4_TEST_CFLAGS + POPPLER_QT4_TEST_LIBS=$pkg_cv_POPPLER_QT4_TEST_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi +elif test x$enable_poppler_qt4 = xtry; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POPPLER_QT4" >&5 +$as_echo_n "checking for POPPLER_QT4... " >&6; } + +if test -n "$POPPLER_QT4_CFLAGS"; then + pkg_cv_POPPLER_QT4_CFLAGS="$POPPLER_QT4_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_POPPLER_QT4_CFLAGS=`$PKG_CONFIG --cflags "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$POPPLER_QT4_LIBS"; then + pkg_cv_POPPLER_QT4_LIBS="$POPPLER_QT4_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_POPPLER_QT4_LIBS=`$PKG_CONFIG --libs "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + POPPLER_QT4_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>&1` + else + POPPLER_QT4_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$POPPLER_QT4_PKG_ERRORS" >&5 + + enable_poppler_qt4="no" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + enable_poppler_qt4="no" +else + POPPLER_QT4_CFLAGS=$pkg_cv_POPPLER_QT4_CFLAGS + POPPLER_QT4_LIBS=$pkg_cv_POPPLER_QT4_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + enable_poppler_qt4="yes" +fi + if test x$enable_poppler_qt4 = xyes; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POPPLER_QT4_TEST" >&5 +$as_echo_n "checking for POPPLER_QT4_TEST... " >&6; } + +if test -n "$POPPLER_QT4_TEST_CFLAGS"; then + pkg_cv_POPPLER_QT4_TEST_CFLAGS="$POPPLER_QT4_TEST_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtTest >= 4.4.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "QtTest >= 4.4.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_POPPLER_QT4_TEST_CFLAGS=`$PKG_CONFIG --cflags "QtTest >= 4.4.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$POPPLER_QT4_TEST_LIBS"; then + pkg_cv_POPPLER_QT4_TEST_LIBS="$POPPLER_QT4_TEST_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtTest >= 4.4.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "QtTest >= 4.4.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_POPPLER_QT4_TEST_LIBS=`$PKG_CONFIG --libs "QtTest >= 4.4.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + POPPLER_QT4_TEST_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "QtTest >= 4.4.0" 2>&1` + else + POPPLER_QT4_TEST_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "QtTest >= 4.4.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$POPPLER_QT4_TEST_PKG_ERRORS" >&5 + + enable_poppler_qt4="no" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + enable_poppler_qt4="no" +else + POPPLER_QT4_TEST_CFLAGS=$pkg_cv_POPPLER_QT4_TEST_CFLAGS + POPPLER_QT4_TEST_LIBS=$pkg_cv_POPPLER_QT4_TEST_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + enable_poppler_qt4="yes" +fi + fi +fi + + + + + +if test x$enable_poppler_qt4 = xyes; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}moc", so it can be a program name with args. +set dummy ${ac_tool_prefix}moc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MOCQT4+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MOCQT4"; then + ac_cv_prog_MOCQT4="$MOCQT4" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_MOCQT4="${ac_tool_prefix}moc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MOCQT4=$ac_cv_prog_MOCQT4 +if test -n "$MOCQT4"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MOCQT4" >&5 +$as_echo "$MOCQT4" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MOCQT4"; then + ac_ct_MOCQT4=$MOCQT4 + # Extract the first word of "moc", so it can be a program name with args. +set dummy moc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MOCQT4+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MOCQT4"; then + ac_cv_prog_ac_ct_MOCQT4="$ac_ct_MOCQT4" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_MOCQT4="moc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MOCQT4=$ac_cv_prog_ac_ct_MOCQT4 +if test -n "$ac_ct_MOCQT4"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MOCQT4" >&5 +$as_echo "$ac_ct_MOCQT4" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MOCQT4" = x; then + MOCQT4="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MOCQT4=$ac_ct_MOCQT4 + fi +else + MOCQT4="$ac_cv_prog_MOCQT4" +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt4 moc" >&5 +$as_echo_n "checking for Qt4 moc... " >&6; } + mocversion=`$MOCQT4 -v 2>&1` + mocversiongrep=`echo $mocversion | grep "Qt 4"` + if test x"$mocversiongrep" != x"$mocversion"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # moc was not the qt4 one, try with moc-qt4 + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}moc-qt4", so it can be a program name with args. +set dummy ${ac_tool_prefix}moc-qt4; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MOCQT4+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MOCQT4"; then + ac_cv_prog_MOCQT4="$MOCQT4" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_MOCQT4="${ac_tool_prefix}moc-qt4" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MOCQT4=$ac_cv_prog_MOCQT4 +if test -n "$MOCQT4"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MOCQT4" >&5 +$as_echo "$MOCQT4" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MOCQT4"; then + ac_ct_MOCQT4=$MOCQT4 + # Extract the first word of "moc-qt4", so it can be a program name with args. +set dummy moc-qt4; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MOCQT4+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MOCQT4"; then + ac_cv_prog_ac_ct_MOCQT4="$ac_ct_MOCQT4" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_MOCQT4="moc-qt4" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MOCQT4=$ac_cv_prog_ac_ct_MOCQT4 +if test -n "$ac_ct_MOCQT4"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MOCQT4" >&5 +$as_echo "$ac_ct_MOCQT4" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MOCQT4" = x; then + MOCQT4="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MOCQT4=$ac_ct_MOCQT4 + fi +else + MOCQT4="$ac_cv_prog_MOCQT4" +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt4 moc-qt4" >&5 +$as_echo_n "checking for Qt4 moc-qt4... " >&6; } + mocversion=`$MOCQT4 -v 2>&1` + mocversiongrep=`echo $mocversion | grep "Qt 4"` + if test x"$mocversiongrep" != x"$mocversion"; then + # no valid moc found + enable_poppler_qt4=no; + MOCQT4="not found" + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MOCQT4" >&5 +$as_echo "$MOCQT4" >&6; } +fi + + if test "x$enable_poppler_qt4" = "xyes"; then + BUILD_POPPLER_QT4_TRUE= + BUILD_POPPLER_QT4_FALSE='#' +else + BUILD_POPPLER_QT4_TRUE='#' + BUILD_POPPLER_QT4_FALSE= +fi + + + +# Check whether --enable-poppler-cpp was given. +if test "${enable_poppler_cpp+set}" = set; then : + enableval=$enable_poppler_cpp; enable_poppler_cpp=$enableval +else + enable_poppler_cpp="yes" +fi + +if test x$enable_poppler_cpp = xyes; then + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + + + + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 +$as_echo_n "checking for 64-bit host... " >&6; } +if ${gl_cv_solaris_64bit+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _LP64 +sixtyfour bits +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sixtyfour bits" >/dev/null 2>&1; then : + gl_cv_solaris_64bit=yes +else + gl_cv_solaris_64bit=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 +$as_echo "$gl_cv_solaris_64bit" >&6; } + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then : + withval=$with_libiconv_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBICONV= + LTLIBICONV= + INCICONV= + LIBICONV_PREFIX= + HAVE_LIBICONV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='iconv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" + ;; + esac + done + fi + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" + done + fi + + + + + + + + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 +$as_echo_n "checking for iconv... " >&6; } +if ${am_cv_func_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <iconv.h> +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <iconv.h> +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$am_save_LIBS" + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 +$as_echo "$am_cv_func_iconv" >&6; } + if test "$am_cv_func_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 +$as_echo_n "checking for working iconv... " >&6; } +if ${am_cv_func_iconv_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + if test "$cross_compiling" = yes; then : + case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <iconv.h> +#include <string.h> +int main () +{ + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + return 1; + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + return 1; + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + if (/* Try standardized names. */ + iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) + /* Try IRIX, OSF/1 names. */ + && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) + /* Try AIX names. */ + && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) + /* Try HP-UX names. */ + && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + am_cv_func_iconv_works=yes +else + am_cv_func_iconv_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + LIBS="$am_save_LIBS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 +$as_echo "$am_cv_func_iconv_works" >&6; } + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + +$as_echo "#define HAVE_ICONV 1" >>confdefs.h + + fi + if test "$am_cv_lib_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 +$as_echo_n "checking how to link with libiconv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 +$as_echo "$LIBICONV" >&6; } + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + + + + if test "$am_cv_func_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 +$as_echo_n "checking for iconv declaration... " >&6; } + if ${am_cv_proto_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdlib.h> +#include <iconv.h> +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + am_cv_proto_iconv_arg1="" +else + am_cv_proto_iconv_arg1="const" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" +fi + + am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_t:- + }$am_cv_proto_iconv" >&5 +$as_echo "${ac_t:- + }$am_cv_proto_iconv" >&6; } + +cat >>confdefs.h <<_ACEOF +#define ICONV_CONST $am_cv_proto_iconv_arg1 +_ACEOF + + fi + + if test x$am_func_iconv != xyes; then + enable_poppler_cpp=no + fi +fi + + if test "x$enable_poppler_cpp" = "xyes"; then + BUILD_POPPLER_CPP_TRUE= + BUILD_POPPLER_CPP_FALSE='#' +else + BUILD_POPPLER_CPP_TRUE='#' + BUILD_POPPLER_CPP_FALSE= +fi + + + +# Check whether --enable-gtk-test was given. +if test "${enable_gtk_test+set}" = set; then : + enableval=$enable_gtk_test; enable_gtk_test=$enableval +else + enable_gtk_test="try" +fi + +if test x$enable_gtk_test = xyes; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK_TEST" >&5 +$as_echo_n "checking for GTK_TEST... " >&6; } + +if test -n "$GTK_TEST_CFLAGS"; then + pkg_cv_GTK_TEST_CFLAGS="$GTK_TEST_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GTK_TEST_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$GTK_TEST_LIBS"; then + pkg_cv_GTK_TEST_LIBS="$GTK_TEST_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GTK_TEST_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GTK_TEST_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>&1` + else + GTK_TEST_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$GTK_TEST_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0) were not met: + +$GTK_TEST_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables GTK_TEST_CFLAGS +and GTK_TEST_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables GTK_TEST_CFLAGS +and GTK_TEST_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see <http://pkg-config.freedesktop.org/>. +See \`config.log' for more details" "$LINENO" 5; } +else + GTK_TEST_CFLAGS=$pkg_cv_GTK_TEST_CFLAGS + GTK_TEST_LIBS=$pkg_cv_GTK_TEST_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi +elif test x$enable_gtk_test = xtry; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK_TEST" >&5 +$as_echo_n "checking for GTK_TEST... " >&6; } + +if test -n "$GTK_TEST_CFLAGS"; then + pkg_cv_GTK_TEST_CFLAGS="$GTK_TEST_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GTK_TEST_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$GTK_TEST_LIBS"; then + pkg_cv_GTK_TEST_LIBS="$GTK_TEST_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GTK_TEST_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GTK_TEST_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>&1` + else + GTK_TEST_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$GTK_TEST_PKG_ERRORS" >&5 + + enable_gtk_test="no" +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + enable_gtk_test="no" +else + GTK_TEST_CFLAGS=$pkg_cv_GTK_TEST_CFLAGS + GTK_TEST_LIBS=$pkg_cv_GTK_TEST_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + enable_gtk_test="yes" +fi +fi + if test x$enable_gtk_test = xyes -a x$enable_poppler_glib = xyes; then + BUILD_GTK_TEST_TRUE= + BUILD_GTK_TEST_FALSE='#' +else + BUILD_GTK_TEST_TRUE='#' + BUILD_GTK_TEST_FALSE= +fi + + +# Check whether --enable-utils was given. +if test "${enable_utils+set}" = set; then : + enableval=$enable_utils; enable_utils=$enableval +else + enable_utils="yes" +fi + + if test x$enable_utils = xyes; then + BUILD_UTILS_TRUE= + BUILD_UTILS_FALSE='#' +else + BUILD_UTILS_TRUE='#' + BUILD_UTILS_FALSE= +fi + + +# Check whether --enable-compile-warnings was given. +if test "${enable_compile_warnings+set}" = set; then : + enableval=$enable_compile_warnings; +else + enable_compile_warnings="yes" +fi + + + +# Check whether --enable-cms was given. +if test "${enable_cms+set}" = set; then : + enableval=$enable_cms; enable_cms=$enableval +else + enable_cms="try" +fi + +if test x$enable_cms = xyes; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LCMS" >&5 +$as_echo_n "checking for LCMS... " >&6; } + +if test -n "$LCMS_CFLAGS"; then + pkg_cv_LCMS_CFLAGS="$LCMS_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lcms\""; } >&5 + ($PKG_CONFIG --exists --print-errors "lcms") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LCMS_CFLAGS=`$PKG_CONFIG --cflags "lcms" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LCMS_LIBS"; then + pkg_cv_LCMS_LIBS="$LCMS_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lcms\""; } >&5 + ($PKG_CONFIG --exists --print-errors "lcms") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LCMS_LIBS=`$PKG_CONFIG --libs "lcms" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LCMS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "lcms" 2>&1` + else + LCMS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "lcms" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LCMS_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (lcms) were not met: + +$LCMS_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables LCMS_CFLAGS +and LCMS_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables LCMS_CFLAGS +and LCMS_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see <http://pkg-config.freedesktop.org/>. +See \`config.log' for more details" "$LINENO" 5; } +else + LCMS_CFLAGS=$pkg_cv_LCMS_CFLAGS + LCMS_LIBS=$pkg_cv_LCMS_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi +elif test x$enable_cms = xtry; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LCMS" >&5 +$as_echo_n "checking for LCMS... " >&6; } + +if test -n "$LCMS_CFLAGS"; then + pkg_cv_LCMS_CFLAGS="$LCMS_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lcms\""; } >&5 + ($PKG_CONFIG --exists --print-errors "lcms") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LCMS_CFLAGS=`$PKG_CONFIG --cflags "lcms" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LCMS_LIBS"; then + pkg_cv_LCMS_LIBS="$LCMS_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lcms\""; } >&5 + ($PKG_CONFIG --exists --print-errors "lcms") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LCMS_LIBS=`$PKG_CONFIG --libs "lcms" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LCMS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "lcms" 2>&1` + else + LCMS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "lcms" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LCMS_PKG_ERRORS" >&5 + + enable_cms=no +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + enable_cms=no +else + LCMS_CFLAGS=$pkg_cv_LCMS_CFLAGS + LCMS_LIBS=$pkg_cv_LCMS_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + enable_cms=yes +fi +fi + +if test "x$enable_cms" = "xyes"; then + +$as_echo "#define USE_CMS 1" >>confdefs.h + +fi + if test x$enable_cms = xyes; then + USE_CMS_TRUE= + USE_CMS_FALSE='#' +else + USE_CMS_TRUE='#' + USE_CMS_FALSE= +fi + + +if test "x$GCC" != xyes; then + enable_compile_warnings=no +fi +case "$enable_compile_warnings" in + no) ;; + yes) CXXFLAGS="-Wall -Wno-write-strings -Woverloaded-virtual -Wnon-virtual-dtor -Wcast-align -fno-exceptions -fno-check-new -fno-common $CXXFLAGS" ;; + kde) CXXFLAGS="-Wnon-virtual-dtor -Wno-long-long -Wundef \ + -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -Wcast-align \ + -Wconversion -Wall -W -Wpointer-arith \ + -Wwrite-strings -O2 -Wformat-security \ + -Wmissing-format-attribute -fno-exceptions -fno-check-new \ + -fno-common $CXXFLAGS" ;; +esac + +case $($PKG_CONFIG --version) in + 0.?|0.10-7) + PC_REQUIRES_PRIVATE=""; + PC_REQUIRES="poppler = $VERSION";; + *) + PC_REQUIRES_PRIVATE="Requires.private: poppler = $VERSION"; + PC_REQUIRES="";; +esac + + + + +POPPLER_MAJOR_VERSION=0 + +POPPLER_MINOR_VERSION=18 + +POPPLER_MICRO_VERSION=4 + +POPPLER_VERSION=0.18.4 + + +ac_config_files="$ac_config_files Makefile goo/Makefile fofi/Makefile splash/Makefile poppler/Makefile utils/Makefile glib/Makefile glib/poppler-features.h glib/reference/Makefile glib/reference/version.xml glib/demo/Makefile test/Makefile qt4/Makefile qt4/src/Makefile qt4/tests/Makefile qt4/demos/Makefile cpp/Makefile cpp/poppler-version.h cpp/tests/Makefile poppler.pc poppler-uninstalled.pc poppler-cairo.pc poppler-cairo-uninstalled.pc poppler-splash.pc poppler-splash-uninstalled.pc poppler-glib.pc poppler-glib-uninstalled.pc poppler-qt4.pc poppler-qt4-uninstalled.pc poppler-cpp.pc poppler-cpp-uninstalled.pc" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLE_XPDF_HEADERS_TRUE}" && test -z "${ENABLE_XPDF_HEADERS_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_XPDF_HEADERS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_LIBOPENJPEG_TRUE}" && test -z "${BUILD_LIBOPENJPEG_FALSE}"; then + as_fn_error $? "conditional \"BUILD_LIBOPENJPEG\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_LIBTIFF_TRUE}" && test -z "${BUILD_LIBTIFF_FALSE}"; then + as_fn_error $? "conditional \"BUILD_LIBTIFF\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_ZLIB_TRUE}" && test -z "${BUILD_ZLIB_FALSE}"; then + as_fn_error $? "conditional \"BUILD_ZLIB\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_LIBCURL_TRUE}" && test -z "${BUILD_LIBCURL_FALSE}"; then + as_fn_error $? "conditional \"BUILD_LIBCURL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_LIBJPEG_TRUE}" && test -z "${BUILD_LIBJPEG_FALSE}"; then + as_fn_error $? "conditional \"BUILD_LIBJPEG\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_LIBPNG_TRUE}" && test -z "${BUILD_LIBPNG_FALSE}"; then + as_fn_error $? "conditional \"BUILD_LIBPNG\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_WITH_WIN32_FONTCONFIGURATION_TRUE}" && test -z "${BUILD_WITH_WIN32_FONTCONFIGURATION_FALSE}"; then + as_fn_error $? "conditional \"BUILD_WITH_WIN32_FONTCONFIGURATION\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_SPLASH_OUTPUT_TRUE}" && test -z "${BUILD_SPLASH_OUTPUT_FALSE}"; then + as_fn_error $? "conditional \"BUILD_SPLASH_OUTPUT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_CAIRO_OUTPUT_TRUE}" && test -z "${BUILD_CAIRO_OUTPUT_FALSE}"; then + as_fn_error $? "conditional \"BUILD_CAIRO_OUTPUT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_INTROSPECTION_TRUE}" && test -z "${HAVE_INTROSPECTION_FALSE}"; then + as_fn_error $? "conditional \"HAVE_INTROSPECTION\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_POPPLER_GLIB_TRUE}" && test -z "${BUILD_POPPLER_GLIB_FALSE}"; then + as_fn_error $? "conditional \"BUILD_POPPLER_GLIB\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_INTROSPECTION_TRUE}" && test -z "${HAVE_INTROSPECTION_FALSE}"; then + as_fn_error $? "conditional \"HAVE_INTROSPECTION\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then + as_fn_error $? "conditional \"GTK_DOC_BUILD_HTML\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then + as_fn_error $? "conditional \"GTK_DOC_BUILD_PDF\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then + as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then + as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_POPPLER_QT4_TRUE}" && test -z "${BUILD_POPPLER_QT4_FALSE}"; then + as_fn_error $? "conditional \"BUILD_POPPLER_QT4\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_POPPLER_CPP_TRUE}" && test -z "${BUILD_POPPLER_CPP_FALSE}"; then + as_fn_error $? "conditional \"BUILD_POPPLER_CPP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_GTK_TEST_TRUE}" && test -z "${BUILD_GTK_TEST_FALSE}"; then + as_fn_error $? "conditional \"BUILD_GTK_TEST\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_UTILS_TRUE}" && test -z "${BUILD_UTILS_FALSE}"; then + as_fn_error $? "conditional \"BUILD_UTILS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_CMS_TRUE}" && test -z "${USE_CMS_FALSE}"; then + as_fn_error $? "conditional \"USE_CMS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by poppler $as_me 0.18.4, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=poppler>." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +poppler config.status 0.18.4 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' +reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' +reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in AS \ +DLLTOOL \ +OBJDUMP \ +SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +reload_flag_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_separator_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +reload_cmds_CXX \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX \ +postlink_cmds_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "poppler/poppler-config.h") CONFIG_HEADERS="$CONFIG_HEADERS poppler/poppler-config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "goo/Makefile") CONFIG_FILES="$CONFIG_FILES goo/Makefile" ;; + "fofi/Makefile") CONFIG_FILES="$CONFIG_FILES fofi/Makefile" ;; + "splash/Makefile") CONFIG_FILES="$CONFIG_FILES splash/Makefile" ;; + "poppler/Makefile") CONFIG_FILES="$CONFIG_FILES poppler/Makefile" ;; + "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; + "glib/Makefile") CONFIG_FILES="$CONFIG_FILES glib/Makefile" ;; + "glib/poppler-features.h") CONFIG_FILES="$CONFIG_FILES glib/poppler-features.h" ;; + "glib/reference/Makefile") CONFIG_FILES="$CONFIG_FILES glib/reference/Makefile" ;; + "glib/reference/version.xml") CONFIG_FILES="$CONFIG_FILES glib/reference/version.xml" ;; + "glib/demo/Makefile") CONFIG_FILES="$CONFIG_FILES glib/demo/Makefile" ;; + "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; + "qt4/Makefile") CONFIG_FILES="$CONFIG_FILES qt4/Makefile" ;; + "qt4/src/Makefile") CONFIG_FILES="$CONFIG_FILES qt4/src/Makefile" ;; + "qt4/tests/Makefile") CONFIG_FILES="$CONFIG_FILES qt4/tests/Makefile" ;; + "qt4/demos/Makefile") CONFIG_FILES="$CONFIG_FILES qt4/demos/Makefile" ;; + "cpp/Makefile") CONFIG_FILES="$CONFIG_FILES cpp/Makefile" ;; + "cpp/poppler-version.h") CONFIG_FILES="$CONFIG_FILES cpp/poppler-version.h" ;; + "cpp/tests/Makefile") CONFIG_FILES="$CONFIG_FILES cpp/tests/Makefile" ;; + "poppler.pc") CONFIG_FILES="$CONFIG_FILES poppler.pc" ;; + "poppler-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES poppler-uninstalled.pc" ;; + "poppler-cairo.pc") CONFIG_FILES="$CONFIG_FILES poppler-cairo.pc" ;; + "poppler-cairo-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES poppler-cairo-uninstalled.pc" ;; + "poppler-splash.pc") CONFIG_FILES="$CONFIG_FILES poppler-splash.pc" ;; + "poppler-splash-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES poppler-splash-uninstalled.pc" ;; + "poppler-glib.pc") CONFIG_FILES="$CONFIG_FILES poppler-glib.pc" ;; + "poppler-glib-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES poppler-glib-uninstalled.pc" ;; + "poppler-qt4.pc") CONFIG_FILES="$CONFIG_FILES poppler-qt4.pc" ;; + "poppler-qt4-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES poppler-qt4-uninstalled.pc" ;; + "poppler-cpp.pc") CONFIG_FILES="$CONFIG_FILES poppler-cpp.pc" ;; + "poppler-cpp-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES poppler-cpp-uninstalled.pc" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' <conf$$subs.awk | sed ' +/^[^""]/{ + N + s/\n// +} +' >>$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' <confdefs.h | sed ' +s/'"$ac_delim"'/"\\\ +"/g' >>$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Assembler program. +AS=$lt_AS + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Object dumper program. +OBJDUMP=$lt_OBJDUMP + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + + +echo "" +echo "Building poppler with support for:" +echo " font configuration: $with_font_configuration" +echo " splash output: $enable_splash_output" +echo " cairo output: $enable_cairo_output" +echo " qt4 wrapper: $enable_poppler_qt4" +echo " glib wrapper: $enable_poppler_glib" +echo " introspection: $found_introspection" +echo " cpp wrapper: $enable_poppler_cpp" +echo " use gtk-doc: $enable_gtk_doc" +echo " use libjpeg: $enable_libjpeg" +echo " use libpng: $enable_libpng" +echo " use libtiff: $enable_libtiff" +echo " use zlib: $enable_zlib" +echo " use libcurl: $enable_libcurl" +echo " use libopenjpeg: $enable_libopenjpeg" +echo " use cms: $enable_cms" +echo " command line utils: $enable_utils" +echo "" + +if test x$enable_splash_output = xno -a x$enable_cairo_output = xno; then + echo " Warning: There is no rendering backend enabled" +fi + +if test x$enable_single_precision = xyes -a x$enable_fixedpoint = xyes; then + echo " Warning: Single precision and fixed point options should not be enabled at the same time" +fi + +if test x$enable_libjpeg != xyes; then + echo " Warning: Using libjpeg is recommended" +fi + +if test x$enable_zlib != xno; then + echo " Warning: Using zlib is not totally safe" +fi + +if test x$enable_libopenjpeg != xyes; then + echo " Warning: Using libopenjpeg is recommended" +fi diff --git a/Build/source/libs/poppler/poppler-0.18.4/configure.ac b/Build/source/libs/poppler/poppler-0.18.4/configure.ac new file mode 100644 index 00000000000..cff8e7bfd02 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/configure.ac @@ -0,0 +1,688 @@ +m4_define([poppler_version_major],[0]) +m4_define([poppler_version_minor],[18]) +m4_define([poppler_version_micro],[4]) +m4_define([poppler_version],[poppler_version_major.poppler_version_minor.poppler_version_micro]) + +AC_PREREQ(2.59) +AC_INIT([poppler],[poppler_version],[https://bugs.freedesktop.org/enter_bug.cgi?product=poppler]) +AC_CONFIG_MACRO_DIR([m4]) +AM_INIT_AUTOMAKE([foreign]) +m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) +AM_CONFIG_HEADER(config.h) +AM_CONFIG_HEADER(poppler/poppler-config.h) +AC_C_BIGENDIAN + +dnl ##### Initialize libtool. +AC_LIBTOOL_WIN32_DLL +define([AC_LIBTOOL_LANG_F77_CONFIG], [:]) +AC_PROG_LIBTOOL + +dnl ##### Checks for programs. +AC_PROG_CC +AC_PROG_CXX +AC_ISC_POSIX +AC_PROG_CC_STDC +#if test -z "$CXX" -a "$CC" = "gcc"; then +# CXX="gcc" +#fi +AC_PROG_CXX +if test "x$GXX" = "xyes"; then + case "$host_os" in + cygwin* | mingw*) + ;; + *) + CXXFLAGS="$CXXFLAGS -ansi" + ;; + esac +fi +AC_PROG_INSTALL + +dnl ##### Check for pkgconfig +PKG_PROG_PKG_CONFIG + +dnl Enable these unconditionally. +AC_DEFINE([OPI_SUPPORT], [1], [Generate OPI comments in PS output.]) +AC_DEFINE([MULTITHREADED], [1], [Enable multithreading support.]) +AC_DEFINE([TEXTOUT_WORD_LIST], [1], [Enable word list support.]) + +dnl Check for OS specific flags +win32_libs="" +create_shared_lib="" +auto_import_flags="" +case "$host_os" in + cygwin*) + create_shared_lib="-no-undefined" + ;; + mingw*) + os_win32=yes + win32_libs="-lgdi32" + create_shared_lib="-no-undefined" + auto_import_flags="-Wl,--enable-auto-import" + ;; +esac + +AC_SUBST(win32_libs) +AC_SUBST(create_shared_lib) +AC_SUBST(auto_import_flags) + +ACX_PTHREAD() + +dnl Install xpdf headers +AC_ARG_ENABLE(xpdf-headers, + AC_HELP_STRING([--enable-xpdf-headers], + [Install unsupported xpdf headers.]), + enable_xpdf_headers=$enableval, + enable_xpdf_headers="no") +AM_CONDITIONAL(ENABLE_XPDF_HEADERS, test x$enable_xpdf_headers = xyes) + +AC_ARG_ENABLE(single-precision, +[ --enable-single-precision use single precision arithmetic (instead of double precision) in the Splash backend], +AC_DEFINE(USE_FLOAT, [1], [Use single precision arithmetic in the Splash backend])) + +AC_ARG_ENABLE(fixedpoint, +[ --enable-fixedpoint use fixed point (instead of double precision) arithmetic in the Splash backend], +AC_DEFINE(USE_FIXEDPOINT, [1], [Use fixed point arithmetic in the Splash backend])) + +dnl Relocation support +AC_ARG_ENABLE(relocatable, + AC_HELP_STRING([--disable-relocatable], + [Hardcode the poppler library location (on Windows).]), + enable_relocatable=$enableval, + [if test x$os_win32 = xyes; then + # default to yes on native Windows. + enable_relocatable="yes" + else + # default to no everywhere else. + enable_relocatable="no" + fi + ] +) + +if test x$enable_relocatable = xyes; then + if test x$os_win32 = xyes; then + AC_DEFINE([ENABLE_RELOCATABLE], + [1],[Do not hardcode the library location]) + else + AC_MSG_ERROR( + [Invalid setting for relocatable, only supported on windows]) + + fi +fi + +AC_DEFINE_DIR(POPPLER_DATADIR, "{datarootdir}/poppler", [Poppler data dir]) + +dnl ##### Checks for header files. +AC_PATH_XTRA +AC_HEADER_DIRENT +AC_CHECK_HEADERS([stdint.h]) + +dnl ##### Switch over to C++. This will make the checks below a little +dnl ##### bit stricter (requiring function prototypes in include files). +dnl ##### (99% of xpdf is written in C++.) +AC_LANG_CPLUSPLUS + +AC_CHECK_DECL(gettimeofday, [AC_CHECK_FUNC(gettimeofday, AC_DEFINE(HAVE_GETTIMEOFDAY, 1, [Defines if gettimeofday is available on your system]))],[],[#include <sys/time.h>]) +AC_CHECK_FUNC(localtime_r, AC_DEFINE(HAVE_LOCALTIME_R, 1, [Defines if localtime_r is available on your system])) +AC_CHECK_FUNC(gmtime_r, AC_DEFINE(HAVE_GMTIME_R, 1, [Defines if gmtime_r is available on your system])) + +dnl ##### Check for extra libraries needed by X. (LynxOS needs this.) +AC_CHECK_FUNC(gethostbyname) +if test $ac_cv_func_gethostbyname = no; then + AC_CHECK_LIB(bsd, gethostbyname, X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd") +fi + +AC_CHECK_FUNC(nanosleep,,) +dnl try in librt if not found in current LIBS +if test x$ac_cv_func_nanosleep = xno +then + AC_CHECK_LIB(rt,nanosleep, X_EXTRA_LIBS="$X_EXTRA_LIBS -lrt") +fi + +dnl try in libposix4, if not found so far +if test x$ac_cv_func_nanosleep = xno && test x$ac_cv_lib_rt_nanosleep = xno +then + AC_CHECK_LIB(posix4,nanosleep, X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix4") +fi + + +dnl Test for libopenjpeg +AC_ARG_ENABLE(libopenjpeg, + AC_HELP_STRING([--disable-libopenjpeg], + [Don't build against libopenjpeg.]), + enable_libopenjpeg=$enableval, + enable_libopenjpeg="try") +if test x$enable_libopenjpeg = xyes; then + AC_CHECK_LIB([openjpeg], [opj_cio_open],, + AC_MSG_ERROR("*** libopenjpeg library not found ***")) + AC_CHECK_HEADERS([openjpeg.h],, + AC_MSG_ERROR("*** libopenjpeg headers not found ***")) +elif test x$enable_libopenjpeg = xtry; then + AC_CHECK_LIB([openjpeg], [opj_cio_open], + [enable_libopenjpeg="yes"], + [enable_libopenjpeg="no"]) + AC_CHECK_HEADERS([openjpeg.h],, + [enable_libopenjpeg="no"]) +fi + +if test x$enable_libopenjpeg = xyes; then + LIBOPENJPEG_LIBS="-lopenjpeg" + AC_SUBST(LIBOPENJPEG_LIBS) + AC_DEFINE(ENABLE_LIBOPENJPEG) + AC_TRY_COMPILE([ +#include <openjpeg.h> +], [ + int foo = OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG; +], have_openjpeg_flag="yes", am_cv_proto_iconv_arg1="no") + if test x$have_openjpeg_flag = xyes; then + AC_DEFINE(WITH_OPENJPEG_IGNORE_PCLR_CMAP_CDEF_FLAG, 1, [OpenJPEG with the OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG flag.]) + fi +fi + +AM_CONDITIONAL(BUILD_LIBOPENJPEG, test x$enable_libopenjpeg = xyes) +AH_TEMPLATE([ENABLE_LIBOPENJPEG], + [Use libopenjpeg instead of builtin jpeg2000 decoder.]) + +dnl ##### Test for libtiff +AC_ARG_ENABLE(libtiff, + AC_HELP_STRING([--disable-libtiff], + [Don't build against libtiff.]), + enable_libtiff=$enableval, + enable_libtiff="try") + +if test x$enable_libtiff = xyes; then + AC_CHECK_LIB([tiff], [TIFFOpen],, + AC_MSG_ERROR("*** libtiff library not found ***")) + AC_CHECK_HEADERS([tiffio.h],, + AC_MSG_ERROR("*** libtiff headers not found ***")) +elif test x$enable_libtiff = xtry; then + AC_CHECK_LIB([tiff], [TIFFOpen], + [enable_libtiff="yes"], + [enable_libtiff="no"]) + AC_CHECK_HEADERS([tiffio.h],, + [enable_libtiff="no"]) +fi + +if test x$enable_libtiff = xyes; then + LIBTIFF_LIBS="-ltiff" + AC_SUBST(LIBTIFF_LIBS) + AC_DEFINE(ENABLE_LIBTIFF) +fi + +AM_CONDITIONAL(BUILD_LIBTIFF, test x$enable_libtiff = xyes) +AH_TEMPLATE([ENABLE_LIBTIFF], [Build against libtiff.]) +if test x$enable_libtiff = xyes; then + AC_DEFINE(ENABLE_LIBTIFF, 1, [Build against libtiff.]) +fi + +dnl ##### Checks for library functions. +AC_CHECK_FUNCS(popen mkstemp mkstemps) + +dnl ##### Back to C for the library tests. +AC_LANG_C + +dnl ##### Check for fseeko/ftello or fseek64/ftell64 +dnl The LARGEFILE and FSEEKO macros have to be called in C, not C++, mode. +AC_SYS_LARGEFILE +AC_FUNC_FSEEKO +AC_CHECK_FUNCS(fseek64, xpdf_cv_func_fseek64=yes, xpdf_cv_func_fseek64=no) +AC_CHECK_FUNCS(ftell64, xpdf_cv_func_ftell64=yes, xpdf_cv_func_ftell64=no) +if test "$xpdf_cv_func_fseek64" = yes -a "$xpdf_cv_func_ftell64" = yes; then + AC_DEFINE(HAVE_FSEEK64) +fi + +dnl Test for zlib +AC_ARG_ENABLE([zlib], + [AS_HELP_STRING([--enable-zlib],[Build with zlib])], + [],[enable_zlib="no"]) +if test x$enable_zlib = xyes; then + AC_CHECK_LIB([z], [inflate],, + AC_MSG_ERROR("*** zlib library not found ***")) + AC_CHECK_HEADERS([zlib.h],, + AC_MSG_ERROR("*** zlib headers not found ***")) +elif test x$enable_zlib = xtry; then + AC_CHECK_LIB([z], [inflate], + [enable_zlib="yes"], + [enable_zlib="no"]) + AC_CHECK_HEADERS([zlib.h],, + [enable_zlib="no"]) +fi + +if test x$enable_zlib = xyes; then + ZLIB_LIBS="-lz" + AC_SUBST(ZLIB_LIBS) + AC_DEFINE(ENABLE_ZLIB) +fi + +AM_CONDITIONAL(BUILD_ZLIB, test x$enable_zlib = xyes) +AH_TEMPLATE([ENABLE_ZLIB], + [Use zlib instead of builtin zlib decoder.]) + +dnl Test for libcurl +AC_ARG_ENABLE(libcurl, + AC_HELP_STRING([--enable-libcurl], + [Build with libcurl based HTTP support.]), + enable_libcurl=$enableval, + enable_libcurl="no") + +if test x$enable_libcurl = xyes; then + PKG_CHECK_MODULES(LIBCURL, libcurl) + AC_DEFINE(ENABLE_LIBCURL, 1, [Build against libcurl.]) + AC_DEFINE(POPPLER_HAS_CURL_SUPPORT, 1, + [Support for curl based doc builder is compiled in.]) +fi + +AM_CONDITIONAL(BUILD_LIBCURL, test x$enable_libcurl = xyes) + +dnl Test for libjpeg +AC_ARG_ENABLE(libjpeg, + AC_HELP_STRING([--disable-libjpeg], + [Don't build against libjpeg.]), + enable_libjpeg=$enableval, + enable_libjpeg="try") +if test x$enable_libjpeg != xno; then + POPPLER_FIND_JPEG +fi + +AM_CONDITIONAL(BUILD_LIBJPEG, test x$enable_libjpeg = xyes) +AH_TEMPLATE([ENABLE_LIBJPEG], + [Use libjpeg instead of builtin jpeg decoder.]) + +dnl Test for libpng +AC_ARG_ENABLE(libpng, + AC_HELP_STRING([--disable-libpng], + [Do not build against libpng.]), + enable_libpng=$enableval, + enable_libpng="try") + +if test x$enable_libpng != xno; then + PKG_CHECK_MODULES(LIBPNG, libpng, [enable_libpng="yes"], + [enable_libpng="no"]) +fi + +if test x$enable_libpng = xyes; then + AC_DEFINE(ENABLE_LIBPNG, 1, [Build against libpng.]) +fi + +AM_CONDITIONAL(BUILD_LIBPNG, test x$enable_libpng = xyes) + +dnl Check for freetype headers +FREETYPE_LIBS= +FREETYPE_CFLAGS= + +PKG_CHECK_MODULES(FREETYPE, freetype2, + [freetype_pkgconfig=yes], [freetype_pkgconfig=no]) + +if test "x$freetype_pkgconfig" = "xyes"; then + + AC_DEFINE(HAVE_FREETYPE_H, 1, [Have FreeType2 include files]) + +else + + AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no) + if test "x$FREETYPE_CONFIG" != "xno" ; then + + FREETYPE_CFLAGS=`$FREETYPE_CONFIG --cflags` + FREETYPE_LIBS=`$FREETYPE_CONFIG --libs` + AC_DEFINE(HAVE_FREETYPE_H, 1, [Have FreeType2 include files]) + + fi + +fi + +AC_SUBST(FREETYPE_CFLAGS) +AC_SUBST(FREETYPE_LIBS) + +AC_MSG_CHECKING([which font configuration to use]) +AC_ARG_WITH([font_configuration], + [AS_HELP_STRING([--with-font-configuration=fontconfig|win32], + [Select font configuration backend])], + [], + [if test x$os_win32 = xyes; then + # default to win32 on native Windows. + with_font_configuration=win32 + else + # default to fontconig everywhere else. + with_font_configuration=fontconfig + fi + ] +) +AC_MSG_RESULT([$with_font_configuration]) + +case $with_font_configuration in + win32) + AC_DEFINE([WITH_FONTCONFIGURATION_WIN32], + [1],[Use win32 font configuration backend]) + # Set the minimum required Internet Explorer version to 5.0 + CPPFLAGS="$CPPFLAGS -D_WIN32_IE=0x0500" + ;; + fontconfig) + AC_DEFINE([WITH_FONTCONFIGURATION_FONTCONFIG], + [1],[Use fontconfig font configuration backend]) + PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= 2.0.0) + ;; + *) + AC_MSG_ERROR( + [Invalid font configuration setting: $with_font_configuration]) + ;; +esac + +AM_CONDITIONAL(BUILD_WITH_WIN32_FONTCONFIGURATION, + test x$with_font_configuration = xwin32) + +AC_ARG_ENABLE(splash-output, + AC_HELP_STRING([--disable-splash-output], + [Don't build the Splash graphics backend.]),, + enable_splash_output="yes") +AM_CONDITIONAL(BUILD_SPLASH_OUTPUT, test x$enable_splash_output = xyes) +AH_TEMPLATE([HAVE_SPLASH], [Use splash for rendering.]) +if test x$enable_splash_output = xyes; then + AC_DEFINE(HAVE_SPLASH) +fi + +CAIRO_VERSION="1.10.0" +AC_SUBST(CAIRO_VERSION) +AC_ARG_ENABLE(cairo-output, + AC_HELP_STRING([--disable-cairo-output], + [Don't build the cairo graphics backend.]), + enable_cairo_output=$enableval, + enable_cairo_output="try") +if test x$enable_cairo_output = xyes; then + PKG_CHECK_MODULES(CAIRO, cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION) +elif test x$enable_cairo_output = xtry; then + PKG_CHECK_MODULES(CAIRO, cairo >= $CAIRO_VERSION cairo-ft >= $CAIRO_VERSION, + [enable_cairo_output="yes"], + [enable_cairo_output="no"]) +fi + +AC_SUBST(CAIRO_CFLAGS) +AC_SUBST(CAIRO_LIBS) + +AM_CONDITIONAL(BUILD_CAIRO_OUTPUT, test x$enable_cairo_output = xyes) +AH_TEMPLATE([HAVE_CAIRO], [Use cairo for rendering.]) +if test x$enable_cairo_output = xyes; then + PDFTOCAIRO_DEPS="cairo cairo-ft" + dnl Check for optional cairo backends used by pdftocairo + PKG_CHECK_EXISTS(cairo-pdf, [PDFTOCAIRO_DEPS="$PDFTOCAIRO_DEPS cairo-pdf"], []) + PKG_CHECK_EXISTS(cairo-ps, [PDFTOCAIRO_DEPS="$PDFTOCAIRO_DEPS cairo-ps"], []) + PKG_CHECK_EXISTS(cairo-svg, [PDFTOCAIRO_DEPS="$PDFTOCAIRO_DEPS cairo-svg"], []) + + PKG_CHECK_MODULES(PDFTOCAIRO, $PDFTOCAIRO_DEPS) + AC_SUBST(PDFTOCAIRO_CFLAGS) + AC_SUBST(PDFTOCAIRO_LIBS) + + AC_DEFINE(HAVE_CAIRO) + CAIRO_FEATURE="#define POPPLER_HAS_CAIRO 1" + CAIRO_REQ="cairo" + AC_CHECK_HEADERS(fcntl.h sys/mman.h sys/stat.h) +else + CAIRO_FEATURE="#undef POPPLER_HAS_CAIRO" + CAIRO_REQ="" +fi +AC_SUBST(CAIRO_FEATURE) +AC_SUBST(CAIRO_REQ) + +found_introspection=no +if test x$enable_cairo_output = xyes; then + POPPLER_GLIB_DISABLE_DEPRECATED="" + POPPLER_GLIB_DISABLE_SINGLE_INCLUDES="" + + GLIB_REQUIRED=2.18 + AC_SUBST(GLIB_REQUIRED) + AC_ARG_ENABLE(poppler-glib, + AC_HELP_STRING([--disable-poppler-glib], + [Don't compile poppler glib wrapper.]), + enable_poppler_glib=$enableval, + enable_poppler_glib="try") + if test x$enable_poppler_glib = xyes; then + PKG_CHECK_MODULES(POPPLER_GLIB, glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION) + elif test x$enable_poppler_glib = xtry; then + PKG_CHECK_MODULES(POPPLER_GLIB, glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED cairo >= $CAIRO_VERSION, + [enable_poppler_glib="yes"], + [enable_poppler_glib="no"]) + fi + if test x$enable_poppler_glib = xyes; then + # Check for introspection + GOBJECT_INTROSPECTION_CHECK([0.6.7]) + + AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums]) + POPPLER_GLIB_DISABLE_DEPRECATED="$POPPLER_GLIB_DISABLE_DEPRECATED -DG_DISABLE_DEPRECATED" + POPPLER_GLIB_DISABLE_SINGLE_INCLUDES="$POPPLER_GLIB_DISABLE_SINGLE_INCLUDES -DG_DISABLE_SINGLE_INCLUDES" + fi +else + if test x$enable_poppler_glib = xyes; then + AC_MSG_ERROR("Cairo output is required to build glib frontend") + fi + enable_poppler_glib="no" +fi +AM_CONDITIONAL(BUILD_POPPLER_GLIB, test x$enable_poppler_glib = xyes) +AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes") +AC_SUBST(GLIB_REQ) +AC_SUBST(POPPLER_GLIB_DISABLE_DEPRECATED) +AC_SUBST(POPPLER_GLIB_DISABLE_SINGLE_INCLUDES) + +GTK_DOC_CHECK([1.14],[--flavour no-tmpl]) + +dnl +dnl Try Qt4 +dnl + +AC_ARG_ENABLE(poppler-qt4, + AC_HELP_STRING([--disable-poppler-qt4], + [Don't compile poppler Qt4 wrapper.]), + enable_poppler_qt4=$enableval, + enable_poppler_qt4="try") +if test x$enable_poppler_qt4 = xyes; then + PKG_CHECK_MODULES(POPPLER_QT4, + QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0) + PKG_CHECK_MODULES(POPPLER_QT4_TEST, + QtTest >= 4.4.0) +elif test x$enable_poppler_qt4 = xtry; then + PKG_CHECK_MODULES(POPPLER_QT4, + QtCore >= 4.4.0 QtGui >= 4.4.0 QtXml >= 4.4.0, + [enable_poppler_qt4="yes"], + [enable_poppler_qt4="no"]) + if test x$enable_poppler_qt4 = xyes; then + PKG_CHECK_MODULES(POPPLER_QT4_TEST, + QtTest >= 4.4.0, + [enable_poppler_qt4="yes"], + [enable_poppler_qt4="no"]) + fi +fi + +AC_SUBST(POPPLER_QT4_CXXFLAGS) +AC_SUBST(POPPLER_QT4_LIBS) +AC_SUBST(POPPLER_QT4_TEST_LIBS) + +if test x$enable_poppler_qt4 = xyes; then + AC_CHECK_TOOL(MOCQT4, moc) + AC_MSG_CHECKING([for Qt4 moc]) + mocversion=`$MOCQT4 -v 2>&1` + mocversiongrep=`echo $mocversion | grep "Qt 4"` + if test x"$mocversiongrep" != x"$mocversion"; then + AC_MSG_RESULT([no]) + # moc was not the qt4 one, try with moc-qt4 + AC_CHECK_TOOL(MOCQT4, moc-qt4) + AC_MSG_CHECKING([for Qt4 moc-qt4]) + mocversion=`$MOCQT4 -v 2>&1` + mocversiongrep=`echo $mocversion | grep "Qt 4"` + if test x"$mocversiongrep" != x"$mocversion"; then + # no valid moc found + enable_poppler_qt4=no; + MOCQT4="not found" + fi + fi + AC_SUBST(MOCQT4) + AC_MSG_RESULT([$MOCQT4]) +fi + +AM_CONDITIONAL(BUILD_POPPLER_QT4, test "x$enable_poppler_qt4" = "xyes") + +dnl +dnl CPP frontend +dnl + +AC_ARG_ENABLE(poppler-cpp, + AC_HELP_STRING([--disable-poppler-cpp], + [Don't compile poppler cpp wrapper.]), + enable_poppler_cpp=$enableval, + enable_poppler_cpp="yes") +if test x$enable_poppler_cpp = xyes; then + AM_ICONV() + if test x$am_func_iconv != xyes; then + enable_poppler_cpp=no + fi +fi + +AM_CONDITIONAL(BUILD_POPPLER_CPP, test "x$enable_poppler_cpp" = "xyes") + + +AC_ARG_ENABLE(gtk-test, + AC_HELP_STRING([--disable-gtk-test], + [Don't compile GTK+ test program.]), + enable_gtk_test=$enableval, + enable_gtk_test="try") +if test x$enable_gtk_test = xyes; then + PKG_CHECK_MODULES(GTK_TEST, gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0) +elif test x$enable_gtk_test = xtry; then + PKG_CHECK_MODULES(GTK_TEST, gtk+-2.0 >= 2.14 gdk-pixbuf-2.0 gthread-2.0 gio-2.0, + [enable_gtk_test="yes"], + [enable_gtk_test="no"]) +fi +AM_CONDITIONAL(BUILD_GTK_TEST, test x$enable_gtk_test = xyes -a x$enable_poppler_glib = xyes) + +AC_ARG_ENABLE(utils, + AC_HELP_STRING([--disable-utils], + [Don't compile poppler command line utils.]), + enable_utils=$enableval, + enable_utils="yes") +AM_CONDITIONAL(BUILD_UTILS, test x$enable_utils = xyes) + +AC_ARG_ENABLE(compile-warnings, + AC_HELP_STRING([--enable-compile-warnings=@<:@no/yes/kde@:>@] + [Turn on compiler warnings.]),, + [enable_compile_warnings="yes"]) + +dnl +dnl Color Management +dnl + +AC_ARG_ENABLE(cms, + AC_HELP_STRING([--disable-cms], + [Don't use color management system.]), + enable_cms=$enableval, + enable_cms="try") +if test x$enable_cms = xyes; then + PKG_CHECK_MODULES(LCMS, lcms) +elif test x$enable_cms = xtry; then + PKG_CHECK_MODULES(LCMS, lcms, [enable_cms=yes], [enable_cms=no]) +fi + +if test "x$enable_cms" = "xyes"; then + AC_DEFINE(USE_CMS, 1, [Defines if use cms]) +fi +AM_CONDITIONAL(USE_CMS, test x$enable_cms = xyes) + +if test "x$GCC" != xyes; then + enable_compile_warnings=no +fi +case "$enable_compile_warnings" in + no) ;; + yes) CXXFLAGS="-Wall -Wno-write-strings -Woverloaded-virtual -Wnon-virtual-dtor -Wcast-align -fno-exceptions -fno-check-new -fno-common $CXXFLAGS" ;; + kde) CXXFLAGS="-Wnon-virtual-dtor -Wno-long-long -Wundef \ + -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -Wcast-align \ + -Wconversion -Wall -W -Wpointer-arith \ + -Wwrite-strings -O2 -Wformat-security \ + -Wmissing-format-attribute -fno-exceptions -fno-check-new \ + -fno-common $CXXFLAGS" ;; +esac + +case $($PKG_CONFIG --version) in + 0.?|0.1[0-7]) + PC_REQUIRES_PRIVATE=""; + PC_REQUIRES="poppler = $VERSION";; + *) + PC_REQUIRES_PRIVATE="Requires.private: poppler = $VERSION"; + PC_REQUIRES="";; +esac + +AC_SUBST(PC_REQUIRES) +AC_SUBST(PC_REQUIRES_PRIVATE) + +AC_SUBST([POPPLER_MAJOR_VERSION],[poppler_version_major]) +AC_SUBST([POPPLER_MINOR_VERSION],[poppler_version_minor]) +AC_SUBST([POPPLER_MICRO_VERSION],[poppler_version_micro]) +AC_SUBST([POPPLER_VERSION],[poppler_version]) + +AC_OUTPUT([ +Makefile +goo/Makefile +fofi/Makefile +splash/Makefile +poppler/Makefile +utils/Makefile +glib/Makefile +glib/poppler-features.h +glib/reference/Makefile +glib/reference/version.xml +glib/demo/Makefile +test/Makefile +qt4/Makefile +qt4/src/Makefile +qt4/tests/Makefile +qt4/demos/Makefile +cpp/Makefile +cpp/poppler-version.h +cpp/tests/Makefile +poppler.pc +poppler-uninstalled.pc +poppler-cairo.pc +poppler-cairo-uninstalled.pc +poppler-splash.pc +poppler-splash-uninstalled.pc +poppler-glib.pc +poppler-glib-uninstalled.pc +poppler-qt4.pc +poppler-qt4-uninstalled.pc +poppler-cpp.pc +poppler-cpp-uninstalled.pc]) + + +echo "" +echo "Building poppler with support for:" +echo " font configuration: $with_font_configuration" +echo " splash output: $enable_splash_output" +echo " cairo output: $enable_cairo_output" +echo " qt4 wrapper: $enable_poppler_qt4" +echo " glib wrapper: $enable_poppler_glib" +echo " introspection: $found_introspection" +echo " cpp wrapper: $enable_poppler_cpp" +echo " use gtk-doc: $enable_gtk_doc" +echo " use libjpeg: $enable_libjpeg" +echo " use libpng: $enable_libpng" +echo " use libtiff: $enable_libtiff" +echo " use zlib: $enable_zlib" +echo " use libcurl: $enable_libcurl" +echo " use libopenjpeg: $enable_libopenjpeg" +echo " use cms: $enable_cms" +echo " command line utils: $enable_utils" +echo "" + +if test x$enable_splash_output = xno -a x$enable_cairo_output = xno; then + echo " Warning: There is no rendering backend enabled" +fi + +if test x$enable_single_precision = xyes -a x$enable_fixedpoint = xyes; then + echo " Warning: Single precision and fixed point options should not be enabled at the same time" +fi + +if test x$enable_libjpeg != xyes; then + echo " Warning: Using libjpeg is recommended" +fi + +if test x$enable_zlib != xno; then + echo " Warning: Using zlib is not totally safe" +fi + +if test x$enable_libopenjpeg != xyes; then + echo " Warning: Using libopenjpeg is recommended" +fi diff --git a/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiBase.cc b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiBase.cc new file mode 100644 index 00000000000..52808386e76 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiBase.cc @@ -0,0 +1,186 @@ +//======================================================================== +// +// FoFiBase.cc +// +// Copyright 1999-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2008 Ed Avis <eda@waniasset.com> +// Copyright (C) 2011 Jim Meyering <jim@meyering.net> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdio.h> +#include "goo/gmem.h" +#include "poppler/Error.h" +#include "FoFiBase.h" + +//------------------------------------------------------------------------ +// FoFiBase +//------------------------------------------------------------------------ + +FoFiBase::FoFiBase(char *fileA, int lenA, GBool freeFileDataA) { + fileData = file = (Guchar *)fileA; + len = lenA; + freeFileData = freeFileDataA; +} + +FoFiBase::~FoFiBase() { + if (freeFileData) { + gfree(fileData); + } +} + +char *FoFiBase::readFile(char *fileName, int *fileLen) { + FILE *f; + char *buf; + int n; + + if (!(f = fopen(fileName, "rb"))) { + error(-1, "Cannot open '%s'", fileName); + return NULL; + } + if (fseek(f, 0, SEEK_END) != 0) { + error(-1, "Cannot seek to end of '%s'", fileName); + fclose(f); + return NULL; + } + n = (int)ftell(f); + if (n < 0) { + error(-1, "Cannot determine length of '%s'", fileName); + fclose(f); + return NULL; + } + if (fseek(f, 0, SEEK_SET) != 0) { + error(-1, "Cannot seek to start of '%s'", fileName); + fclose(f); + return NULL; + } + buf = (char *)gmalloc(n); + if ((int)fread(buf, 1, n, f) != n) { + gfree(buf); + fclose(f); + return NULL; + } + fclose(f); + *fileLen = n; + return buf; +} + +int FoFiBase::getS8(int pos, GBool *ok) { + int x; + + if (pos < 0 || pos >= len) { + *ok = gFalse; + return 0; + } + x = file[pos]; + if (x & 0x80) { + x |= ~0xff; + } + return x; +} + +int FoFiBase::getU8(int pos, GBool *ok) { + if (pos < 0 || pos >= len) { + *ok = gFalse; + return 0; + } + return file[pos]; +} + +int FoFiBase::getS16BE(int pos, GBool *ok) { + int x; + + if (pos < 0 || pos+1 >= len) { + *ok = gFalse; + return 0; + } + x = file[pos]; + x = (x << 8) + file[pos+1]; + if (x & 0x8000) { + x |= ~0xffff; + } + return x; +} + +int FoFiBase::getU16BE(int pos, GBool *ok) { + int x; + + if (pos < 0 || pos+1 >= len) { + *ok = gFalse; + return 0; + } + x = file[pos]; + x = (x << 8) + file[pos+1]; + return x; +} + +int FoFiBase::getS32BE(int pos, GBool *ok) { + int x; + + if (pos < 0 || pos+3 >= len) { + *ok = gFalse; + return 0; + } + x = file[pos]; + x = (x << 8) + file[pos+1]; + x = (x << 8) + file[pos+2]; + x = (x << 8) + file[pos+3]; + if (x & 0x80000000) { + x |= ~0xffffffff; + } + return x; +} + +Guint FoFiBase::getU32BE(int pos, GBool *ok) { + Guint x; + + if (pos < 0 || pos+3 >= len) { + *ok = gFalse; + return 0; + } + x = file[pos]; + x = (x << 8) + file[pos+1]; + x = (x << 8) + file[pos+2]; + x = (x << 8) + file[pos+3]; + return x; +} + +Guint FoFiBase::getUVarBE(int pos, int size, GBool *ok) { + Guint x; + int i; + + if (pos < 0 || pos + size > len) { + *ok = gFalse; + return 0; + } + x = 0; + for (i = 0; i < size; ++i) { + x = (x << 8) + file[pos + i]; + } + return x; +} + +GBool FoFiBase::checkRegion(int pos, int size) { + return pos >= 0 && + pos + size >= pos && + pos + size <= len; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiBase.h b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiBase.h new file mode 100644 index 00000000000..e2550017aac --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiBase.h @@ -0,0 +1,55 @@ +//======================================================================== +// +// FoFiBase.h +// +// Copyright 1999-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef FOFIBASE_H +#define FOFIBASE_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" + +//------------------------------------------------------------------------ + +typedef void (*FoFiOutputFunc)(void *stream, char *data, int len); + +//------------------------------------------------------------------------ +// FoFiBase +//------------------------------------------------------------------------ + +class FoFiBase { +public: + + virtual ~FoFiBase(); + +protected: + + FoFiBase(char *fileA, int lenA, GBool freeFileDataA); + static char *readFile(char *fileName, int *fileLen); + + // S = signed / U = unsigned + // 8/16/32/Var = word length, in bytes + // BE = big endian + int getS8(int pos, GBool *ok); + int getU8(int pos, GBool *ok); + int getS16BE(int pos, GBool *ok); + int getU16BE(int pos, GBool *ok); + int getS32BE(int pos, GBool *ok); + Guint getU32BE(int pos, GBool *ok); + Guint getUVarBE(int pos, int size, GBool *ok); + + GBool checkRegion(int pos, int size); + + Guchar *fileData; + Guchar *file; + int len; + GBool freeFileData; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiEncodings.cc b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiEncodings.cc new file mode 100644 index 00000000000..946b56c19d0 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiEncodings.cc @@ -0,0 +1,994 @@ +//======================================================================== +// +// FoFiEncodings.cc +// +// Copyright 1999-2003 Glyph & Cog, LLC +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include "FoFiEncodings.h" + +//------------------------------------------------------------------------ +// Type 1 and 1C font data +//------------------------------------------------------------------------ + +char *fofiType1StandardEncoding[256] = { + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quoteright", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "quoteleft", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "exclamdown", + "cent", + "sterling", + "fraction", + "yen", + "florin", + "section", + "currency", + "quotesingle", + "quotedblleft", + "guillemotleft", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + NULL, + "endash", + "dagger", + "daggerdbl", + "periodcentered", + NULL, + "paragraph", + "bullet", + "quotesinglbase", + "quotedblbase", + "quotedblright", + "guillemotright", + "ellipsis", + "perthousand", + NULL, + "questiondown", + NULL, + "grave", + "acute", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "dieresis", + NULL, + "ring", + "cedilla", + NULL, + "hungarumlaut", + "ogonek", + "caron", + "emdash", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "AE", + NULL, + "ordfeminine", + NULL, + NULL, + NULL, + NULL, + "Lslash", + "Oslash", + "OE", + "ordmasculine", + NULL, + NULL, + NULL, + NULL, + NULL, + "ae", + NULL, + NULL, + NULL, + "dotlessi", + NULL, + NULL, + "lslash", + "oslash", + "oe", + "germandbls", + NULL, + NULL, + NULL, + NULL +}; + +char *fofiType1ExpertEncoding[256] = { + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "space", + "exclamsmall", + "Hungarumlautsmall", + NULL, + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "comma", + "hyphen", + "period", + "fraction", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "colon", + "semicolon", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "questionsmall", + NULL, + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + NULL, + NULL, + NULL, + "isuperior", + NULL, + NULL, + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + NULL, + NULL, + "rsuperior", + "ssuperior", + "tsuperior", + NULL, + "ff", + "fi", + "fl", + "ffi", + "ffl", + "parenleftinferior", + NULL, + "parenrightinferior", + "Circumflexsmall", + "hyphensuperior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "exclamdownsmall", + "centoldstyle", + "Lslashsmall", + NULL, + NULL, + "Scaronsmall", + "Zcaronsmall", + "Dieresissmall", + "Brevesmall", + "Caronsmall", + NULL, + "Dotaccentsmall", + NULL, + NULL, + "Macronsmall", + NULL, + NULL, + "figuredash", + "hypheninferior", + NULL, + NULL, + "Ogoneksmall", + "Ringsmall", + "Cedillasmall", + NULL, + NULL, + NULL, + "onequarter", + "onehalf", + "threequarters", + "questiondownsmall", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + NULL, + NULL, + "zerosuperior", + "onesuperior", + "twosuperior", + "threesuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + "Agravesmall", + "Aacutesmall", + "Acircumflexsmall", + "Atildesmall", + "Adieresissmall", + "Aringsmall", + "AEsmall", + "Ccedillasmall", + "Egravesmall", + "Eacutesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Igravesmall", + "Iacutesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ethsmall", + "Ntildesmall", + "Ogravesmall", + "Oacutesmall", + "Ocircumflexsmall", + "Otildesmall", + "Odieresissmall", + "OEsmall", + "Oslashsmall", + "Ugravesmall", + "Uacutesmall", + "Ucircumflexsmall", + "Udieresissmall", + "Yacutesmall", + "Thornsmall", + "Ydieresissmall" +}; + +//------------------------------------------------------------------------ +// Type 1C font data +//------------------------------------------------------------------------ + +char *fofiType1CStdStrings[391] = { + ".notdef", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quoteright", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "quoteleft", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "exclamdown", + "cent", + "sterling", + "fraction", + "yen", + "florin", + "section", + "currency", + "quotesingle", + "quotedblleft", + "guillemotleft", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "endash", + "dagger", + "daggerdbl", + "periodcentered", + "paragraph", + "bullet", + "quotesinglbase", + "quotedblbase", + "quotedblright", + "guillemotright", + "ellipsis", + "perthousand", + "questiondown", + "grave", + "acute", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "dieresis", + "ring", + "cedilla", + "hungarumlaut", + "ogonek", + "caron", + "emdash", + "AE", + "ordfeminine", + "Lslash", + "Oslash", + "OE", + "ordmasculine", + "ae", + "dotlessi", + "lslash", + "oslash", + "oe", + "germandbls", + "onesuperior", + "logicalnot", + "mu", + "trademark", + "Eth", + "onehalf", + "plusminus", + "Thorn", + "onequarter", + "divide", + "brokenbar", + "degree", + "thorn", + "threequarters", + "twosuperior", + "registered", + "minus", + "eth", + "multiply", + "threesuperior", + "copyright", + "Aacute", + "Acircumflex", + "Adieresis", + "Agrave", + "Aring", + "Atilde", + "Ccedilla", + "Eacute", + "Ecircumflex", + "Edieresis", + "Egrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Igrave", + "Ntilde", + "Oacute", + "Ocircumflex", + "Odieresis", + "Ograve", + "Otilde", + "Scaron", + "Uacute", + "Ucircumflex", + "Udieresis", + "Ugrave", + "Yacute", + "Ydieresis", + "Zcaron", + "aacute", + "acircumflex", + "adieresis", + "agrave", + "aring", + "atilde", + "ccedilla", + "eacute", + "ecircumflex", + "edieresis", + "egrave", + "iacute", + "icircumflex", + "idieresis", + "igrave", + "ntilde", + "oacute", + "ocircumflex", + "odieresis", + "ograve", + "otilde", + "scaron", + "uacute", + "ucircumflex", + "udieresis", + "ugrave", + "yacute", + "ydieresis", + "zcaron", + "exclamsmall", + "Hungarumlautsmall", + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "questionsmall", + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + "isuperior", + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + "rsuperior", + "ssuperior", + "tsuperior", + "ff", + "ffi", + "ffl", + "parenleftinferior", + "parenrightinferior", + "Circumflexsmall", + "hyphensuperior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + "exclamdownsmall", + "centoldstyle", + "Lslashsmall", + "Scaronsmall", + "Zcaronsmall", + "Dieresissmall", + "Brevesmall", + "Caronsmall", + "Dotaccentsmall", + "Macronsmall", + "figuredash", + "hypheninferior", + "Ogoneksmall", + "Ringsmall", + "Cedillasmall", + "questiondownsmall", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "zerosuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + "Agravesmall", + "Aacutesmall", + "Acircumflexsmall", + "Atildesmall", + "Adieresissmall", + "Aringsmall", + "AEsmall", + "Ccedillasmall", + "Egravesmall", + "Eacutesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Igravesmall", + "Iacutesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ethsmall", + "Ntildesmall", + "Ogravesmall", + "Oacutesmall", + "Ocircumflexsmall", + "Otildesmall", + "Odieresissmall", + "OEsmall", + "Oslashsmall", + "Ugravesmall", + "Uacutesmall", + "Ucircumflexsmall", + "Udieresissmall", + "Yacutesmall", + "Thornsmall", + "Ydieresissmall", + "001.000", + "001.001", + "001.002", + "001.003", + "Black", + "Bold", + "Book", + "Light", + "Medium", + "Regular", + "Roman", + "Semibold" +}; + +Gushort fofiType1CISOAdobeCharset[229] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228 +}; + +Gushort fofiType1CExpertCharset[166] = { + 0, 1, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 13, 14, 15, 99, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 27, 28, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 109, 110, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 158, 155, 163, 319, 320, 321, 322, 323, 324, 325, + 326, 150, 164, 169, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378 +}; + +Gushort fofiType1CExpertSubsetCharset[87] = { + 0, 1, 231, 232, 235, 236, 237, 238, 13, 14, + 15, 99, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 27, 28, 249, 250, 251, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 109, 110, 267, 268, 269, 270, 272, 300, 301, + 302, 305, 314, 315, 158, 155, 163, 320, 321, 322, + 323, 324, 325, 326, 150, 164, 169, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346 +}; diff --git a/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiEncodings.h b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiEncodings.h new file mode 100644 index 00000000000..fb4eca86d9f --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiEncodings.h @@ -0,0 +1,34 @@ +//======================================================================== +// +// FoFiEncodings.h +// +// Copyright 1999-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef FOFIENCODINGS_H +#define FOFIENCODINGS_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" + +//------------------------------------------------------------------------ +// Type 1 and 1C font data +//------------------------------------------------------------------------ + +extern char *fofiType1StandardEncoding[256]; +extern char *fofiType1ExpertEncoding[256]; + +//------------------------------------------------------------------------ +// Type 1C font data +//------------------------------------------------------------------------ + +extern char *fofiType1CStdStrings[391]; +extern Gushort fofiType1CISOAdobeCharset[229]; +extern Gushort fofiType1CExpertCharset[166]; +extern Gushort fofiType1CExpertSubsetCharset[87]; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiTrueType.cc b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiTrueType.cc new file mode 100644 index 00000000000..d716638c7ec --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiTrueType.cc @@ -0,0 +1,2403 @@ +//======================================================================== +// +// FoFiTrueType.cc +// +// Copyright 1999-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> +// Copyright (C) 2007 Koji Otani <sho@bbr.jp> +// Copyright (C) 2007 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2008, 2009 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2008 Tomas Are Haavet <tomasare@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include <string.h> +#include "goo/gtypes.h" +#include "goo/gmem.h" +#include "goo/GooString.h" +#include "goo/GooHash.h" +#include "FoFiType1C.h" +#include "FoFiTrueType.h" +#include "poppler/Error.h" + +// +// Terminology +// ----------- +// +// character code = number used as an element of a text string +// +// character name = glyph name = name for a particular glyph within a +// font +// +// glyph index = GID = position (within some internal table in the font) +// where the instructions to draw a particular glyph are +// stored +// +// Type 1 fonts +// ------------ +// +// Type 1 fonts contain: +// +// Encoding: array of glyph names, maps char codes to glyph names +// +// Encoding[charCode] = charName +// +// CharStrings: dictionary of instructions, keyed by character names, +// maps character name to glyph data +// +// CharStrings[charName] = glyphData +// +// TrueType fonts +// -------------- +// +// TrueType fonts contain: +// +// 'cmap' table: mapping from character code to glyph index; there may +// be multiple cmaps in a TrueType font +// +// cmap[charCode] = gid +// +// 'post' table: mapping from glyph index to glyph name +// +// post[gid] = glyphName +// +// Type 42 fonts +// ------------- +// +// Type 42 fonts contain: +// +// Encoding: array of glyph names, maps char codes to glyph names +// +// Encoding[charCode] = charName +// +// CharStrings: dictionary of glyph indexes, keyed by character names, +// maps character name to glyph index +// +// CharStrings[charName] = gid +// + +//------------------------------------------------------------------------ + +#define ttcfTag 0x74746366 + +//------------------------------------------------------------------------ + +struct TrueTypeTable { + Guint tag; + Guint checksum; + int offset; + int origOffset; + int len; +}; + +struct TrueTypeCmap { + int platform; + int encoding; + int offset; + int len; + int fmt; +}; + +struct TrueTypeLoca { + int idx; + int origOffset; + int newOffset; + int len; +}; + +#define cmapTag 0x636d6170 +#define glyfTag 0x676c7966 +#define headTag 0x68656164 +#define hheaTag 0x68686561 +#define hmtxTag 0x686d7478 +#define locaTag 0x6c6f6361 +#define nameTag 0x6e616d65 +#define os2Tag 0x4f532f32 +#define postTag 0x706f7374 +#define vrt2Tag 0x76727432 +#define vertTag 0x76657274 + +static int cmpTrueTypeLocaOffset(const void *p1, const void *p2) { + TrueTypeLoca *loca1 = (TrueTypeLoca *)p1; + TrueTypeLoca *loca2 = (TrueTypeLoca *)p2; + + if (loca1->origOffset == loca2->origOffset) { + return loca1->idx - loca2->idx; + } + return loca1->origOffset - loca2->origOffset; +} + +static int cmpTrueTypeLocaIdx(const void *p1, const void *p2) { + TrueTypeLoca *loca1 = (TrueTypeLoca *)p1; + TrueTypeLoca *loca2 = (TrueTypeLoca *)p2; + + return loca1->idx - loca2->idx; +} + +static int cmpTrueTypeTableTag(const void *p1, const void *p2) { + TrueTypeTable *tab1 = (TrueTypeTable *)p1; + TrueTypeTable *tab2 = (TrueTypeTable *)p2; + + return (int)tab1->tag - (int)tab2->tag; +} + +//------------------------------------------------------------------------ + +struct T42Table { + char *tag; // 4-byte tag + GBool required; // required by the TrueType spec? +}; + +// TrueType tables to be embedded in Type 42 fonts. +// NB: the table names must be in alphabetical order here. +#define nT42Tables 11 +static T42Table t42Tables[nT42Tables] = { + { "cvt ", gTrue }, + { "fpgm", gTrue }, + { "glyf", gTrue }, + { "head", gTrue }, + { "hhea", gTrue }, + { "hmtx", gTrue }, + { "loca", gTrue }, + { "maxp", gTrue }, + { "prep", gTrue }, + { "vhea", gFalse }, + { "vmtx", gFalse } +}; +#define t42HeadTable 3 +#define t42LocaTable 6 +#define t42GlyfTable 2 +#define t42VheaTable 9 +#define t42VmtxTable 10 + +//------------------------------------------------------------------------ + +// Glyph names in some arbitrary standard order that Apple uses for +// their TrueType fonts. +static char *macGlyphNames[258] = { + ".notdef", "null", "CR", "space", + "exclam", "quotedbl", "numbersign", "dollar", + "percent", "ampersand", "quotesingle", "parenleft", + "parenright", "asterisk", "plus", "comma", + "hyphen", "period", "slash", "zero", + "one", "two", "three", "four", + "five", "six", "seven", "eight", + "nine", "colon", "semicolon", "less", + "equal", "greater", "question", "at", + "A", "B", "C", "D", + "E", "F", "G", "H", + "I", "J", "K", "L", + "M", "N", "O", "P", + "Q", "R", "S", "T", + "U", "V", "W", "X", + "Y", "Z", "bracketleft", "backslash", + "bracketright", "asciicircum", "underscore", "grave", + "a", "b", "c", "d", + "e", "f", "g", "h", + "i", "j", "k", "l", + "m", "n", "o", "p", + "q", "r", "s", "t", + "u", "v", "w", "x", + "y", "z", "braceleft", "bar", + "braceright", "asciitilde", "Adieresis", "Aring", + "Ccedilla", "Eacute", "Ntilde", "Odieresis", + "Udieresis", "aacute", "agrave", "acircumflex", + "adieresis", "atilde", "aring", "ccedilla", + "eacute", "egrave", "ecircumflex", "edieresis", + "iacute", "igrave", "icircumflex", "idieresis", + "ntilde", "oacute", "ograve", "ocircumflex", + "odieresis", "otilde", "uacute", "ugrave", + "ucircumflex", "udieresis", "dagger", "degree", + "cent", "sterling", "section", "bullet", + "paragraph", "germandbls", "registered", "copyright", + "trademark", "acute", "dieresis", "notequal", + "AE", "Oslash", "infinity", "plusminus", + "lessequal", "greaterequal", "yen", "mu1", + "partialdiff", "summation", "product", "pi", + "integral", "ordfeminine", "ordmasculine", "Ohm", + "ae", "oslash", "questiondown", "exclamdown", + "logicalnot", "radical", "florin", "approxequal", + "increment", "guillemotleft", "guillemotright", "ellipsis", + "nbspace", "Agrave", "Atilde", "Otilde", + "OE", "oe", "endash", "emdash", + "quotedblleft", "quotedblright", "quoteleft", "quoteright", + "divide", "lozenge", "ydieresis", "Ydieresis", + "fraction", "currency", "guilsinglleft", "guilsinglright", + "fi", "fl", "daggerdbl", "periodcentered", + "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", + "Ecircumflex", "Aacute", "Edieresis", "Egrave", + "Iacute", "Icircumflex", "Idieresis", "Igrave", + "Oacute", "Ocircumflex", "applelogo", "Ograve", + "Uacute", "Ucircumflex", "Ugrave", "dotlessi", + "circumflex", "tilde", "overscore", "breve", + "dotaccent", "ring", "cedilla", "hungarumlaut", + "ogonek", "caron", "Lslash", "lslash", + "Scaron", "scaron", "Zcaron", "zcaron", + "brokenbar", "Eth", "eth", "Yacute", + "yacute", "Thorn", "thorn", "minus", + "multiply", "onesuperior", "twosuperior", "threesuperior", + "onehalf", "onequarter", "threequarters", "franc", + "Gbreve", "gbreve", "Idot", "Scedilla", + "scedilla", "Cacute", "cacute", "Ccaron", + "ccaron", "dmacron" +}; + +//------------------------------------------------------------------------ +// FoFiTrueType +//------------------------------------------------------------------------ + +FoFiTrueType *FoFiTrueType::make(char *fileA, int lenA, int faceIndexA) { + FoFiTrueType *ff; + + ff = new FoFiTrueType(fileA, lenA, gFalse, faceIndexA); + if (!ff->parsedOk) { + delete ff; + return NULL; + } + return ff; +} + +FoFiTrueType *FoFiTrueType::load(char *fileName, int faceIndexA) { + FoFiTrueType *ff; + char *fileA; + int lenA; + + if (!(fileA = FoFiBase::readFile(fileName, &lenA))) { + return NULL; + } + ff = new FoFiTrueType(fileA, lenA, gTrue, faceIndexA); + if (!ff->parsedOk) { + delete ff; + return NULL; + } + return ff; +} + +FoFiTrueType::FoFiTrueType(char *fileA, int lenA, GBool freeFileDataA, int faceIndexA): + FoFiBase(fileA, lenA, freeFileDataA) +{ + tables = NULL; + nTables = 0; + cmaps = NULL; + nCmaps = 0; + nameToGID = NULL; + parsedOk = gFalse; + faceIndex = faceIndexA; + gsubFeatureTable = 0; + gsubLookupList = 0; + + parse(); +} + +FoFiTrueType::~FoFiTrueType() { + gfree(tables); + gfree(cmaps); + if (nameToGID) { + delete nameToGID; + } +} + +int FoFiTrueType::getNumCmaps() { + return nCmaps; +} + +int FoFiTrueType::getCmapPlatform(int i) { + return cmaps[i].platform; +} + +int FoFiTrueType::getCmapEncoding(int i) { + return cmaps[i].encoding; +} + +int FoFiTrueType::findCmap(int platform, int encoding) { + int i; + + for (i = 0; i < nCmaps; ++i) { + if (cmaps[i].platform == platform && cmaps[i].encoding == encoding) { + return i; + } + } + return -1; +} + +Gushort FoFiTrueType::mapCodeToGID(int i, Guint c) { + Gushort gid; + Guint segCnt, segEnd, segStart, segDelta, segOffset; + Guint cmapFirst, cmapLen; + int pos, a, b, m; + GBool ok; + + if (i < 0 || i >= nCmaps) { + return 0; + } + ok = gTrue; + pos = cmaps[i].offset; + switch (cmaps[i].fmt) { + case 0: + if (c + 6 >= (Guint)cmaps[i].len) { + return 0; + } + gid = getU8(cmaps[i].offset + 6 + c, &ok); + break; + case 4: + segCnt = getU16BE(pos + 6, &ok) / 2; + a = -1; + b = segCnt - 1; + segEnd = getU16BE(pos + 14 + 2*b, &ok); + if (c > segEnd) { + // malformed font -- the TrueType spec requires the last segEnd + // to be 0xffff + return 0; + } + // invariant: seg[a].end < code <= seg[b].end + while (b - a > 1 && ok) { + m = (a + b) / 2; + segEnd = getU16BE(pos + 14 + 2*m, &ok); + if (segEnd < c) { + a = m; + } else { + b = m; + } + } + segStart = getU16BE(pos + 16 + 2*segCnt + 2*b, &ok); + segDelta = getU16BE(pos + 16 + 4*segCnt + 2*b, &ok); + segOffset = getU16BE(pos + 16 + 6*segCnt + 2*b, &ok); + if (c < segStart) { + return 0; + } + if (segOffset == 0) { + gid = (c + segDelta) & 0xffff; + } else { + gid = getU16BE(pos + 16 + 6*segCnt + 2*b + + segOffset + 2 * (c - segStart), &ok); + if (gid != 0) { + gid = (gid + segDelta) & 0xffff; + } + } + break; + case 6: + cmapFirst = getU16BE(pos + 6, &ok); + cmapLen = getU16BE(pos + 8, &ok); + if (c < cmapFirst || c >= cmapFirst + cmapLen) { + return 0; + } + gid = getU16BE(pos + 10 + 2 * (c - cmapFirst), &ok); + break; + case 12: + segCnt = getU32BE(pos + 12, &ok); + a = -1; + b = segCnt - 1; + segEnd = getU32BE(pos + 16 + 12*b+4, &ok); + if (c > segEnd) { + return 0; + } + // invariant: seg[a].end < code <= seg[b].end + while (b - a > 1 && ok) { + m = (a + b) / 2; + segEnd = getU32BE(pos + 16 + 12*m+4, &ok); + if (segEnd < c) { + a = m; + } else { + b = m; + } + } + segStart = getU32BE(pos + 16 + 12*b, &ok); + segDelta = getU32BE(pos + 16 + 12*b+8, &ok); + if (c < segStart) { + return 0; + } + gid = segDelta + (c-segStart); + break; + default: + return 0; + } + if (!ok) { + return 0; + } + return gid; +} + +int FoFiTrueType::mapNameToGID(char *name) { + if (!nameToGID) { + return 0; + } + return nameToGID->lookupInt(name); +} + +Gushort *FoFiTrueType::getCIDToGIDMap(int *nCIDs) { + FoFiType1C *ff; + Gushort *map; + int i; + + *nCIDs = 0; + if (!openTypeCFF) { + return NULL; + } + i = seekTable("CFF "); + if (!checkRegion(tables[i].offset, tables[i].len)) { + return NULL; + } + if (!(ff = FoFiType1C::make((char *)file + tables[i].offset, + tables[i].len))) { + return NULL; + } + map = ff->getCIDToGIDMap(nCIDs); + delete ff; + return map; +} + +int FoFiTrueType::getEmbeddingRights() { + int i, fsType; + GBool ok; + + if ((i = seekTable("OS/2")) < 0) { + return 4; + } + ok = gTrue; + fsType = getU16BE(tables[i].offset + 8, &ok); + if (!ok) { + return 4; + } + if (fsType & 0x0008) { + return 2; + } + if (fsType & 0x0004) { + return 1; + } + if (fsType & 0x0002) { + return 0; + } + return 3; +} + +void FoFiTrueType::convertToType42(char *psName, char **encoding, + Gushort *codeToGID, + FoFiOutputFunc outputFunc, + void *outputStream) { + GooString *buf; + GBool ok; + + if (openTypeCFF) { + return; + } + + // write the header + ok = gTrue; + buf = GooString::format("%!PS-TrueTypeFont-{0:2g}\n", + (double)getS32BE(0, &ok) / 65536.0); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + + // begin the font dictionary + (*outputFunc)(outputStream, "10 dict begin\n", 14); + (*outputFunc)(outputStream, "/FontName /", 11); + (*outputFunc)(outputStream, psName, strlen(psName)); + (*outputFunc)(outputStream, " def\n", 5); + (*outputFunc)(outputStream, "/FontType 42 def\n", 17); + (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); + buf = GooString::format("/FontBBox [{0:d} {1:d} {2:d} {3:d}] def\n", + bbox[0], bbox[1], bbox[2], bbox[3]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, "/PaintType 0 def\n", 17); + + // write the guts of the dictionary + cvtEncoding(encoding, outputFunc, outputStream); + cvtCharStrings(encoding, codeToGID, outputFunc, outputStream); + cvtSfnts(outputFunc, outputStream, NULL, gFalse); + + // end the dictionary and define the font + (*outputFunc)(outputStream, "FontName currentdict end definefont pop\n", 40); +} + +void FoFiTrueType::convertToType1(char *psName, char **newEncoding, + GBool ascii, FoFiOutputFunc outputFunc, + void *outputStream) { + FoFiType1C *ff; + int i; + + if (!openTypeCFF) { + return; + } + i = seekTable("CFF "); + if (!checkRegion(tables[i].offset, tables[i].len)) { + return; + } + if (!(ff = FoFiType1C::make((char *)file + tables[i].offset, + tables[i].len))) { + return; + } + ff->convertToType1(psName, newEncoding, ascii, outputFunc, outputStream); + delete ff; +} + +void FoFiTrueType::convertToCIDType2(char *psName, + Gushort *cidMap, int nCIDs, + GBool needVerticalMetrics, + FoFiOutputFunc outputFunc, + void *outputStream) { + GooString *buf; + Gushort cid; + GBool ok; + int i, j, k; + + if (openTypeCFF) { + return; + } + + // write the header + ok = gTrue; + buf = GooString::format("%!PS-TrueTypeFont-{0:2g}\n", + (double)getS32BE(0, &ok) / 65536.0); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + + // begin the font dictionary + (*outputFunc)(outputStream, "20 dict begin\n", 14); + (*outputFunc)(outputStream, "/CIDFontName /", 14); + (*outputFunc)(outputStream, psName, strlen(psName)); + (*outputFunc)(outputStream, " def\n", 5); + (*outputFunc)(outputStream, "/CIDFontType 2 def\n", 19); + (*outputFunc)(outputStream, "/FontType 42 def\n", 17); + (*outputFunc)(outputStream, "/CIDSystemInfo 3 dict dup begin\n", 32); + (*outputFunc)(outputStream, " /Registry (Adobe) def\n", 24); + (*outputFunc)(outputStream, " /Ordering (Identity) def\n", 27); + (*outputFunc)(outputStream, " /Supplement 0 def\n", 20); + (*outputFunc)(outputStream, " end def\n", 10); + (*outputFunc)(outputStream, "/GDBytes 2 def\n", 15); + if (cidMap) { + buf = GooString::format("/CIDCount {0:d} def\n", nCIDs); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + if (nCIDs > 32767) { + (*outputFunc)(outputStream, "/CIDMap [", 9); + for (i = 0; i < nCIDs; i += 32768 - 16) { + (*outputFunc)(outputStream, "<\n", 2); + for (j = 0; j < 32768 - 16 && i+j < nCIDs; j += 16) { + (*outputFunc)(outputStream, " ", 2); + for (k = 0; k < 16 && i+j+k < nCIDs; ++k) { + cid = cidMap[i+j+k]; + buf = GooString::format("{0:02x}{1:02x}", + (cid >> 8) & 0xff, cid & 0xff); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "\n", 1); + } + (*outputFunc)(outputStream, " >", 3); + } + (*outputFunc)(outputStream, "\n", 1); + (*outputFunc)(outputStream, "] def\n", 6); + } else { + (*outputFunc)(outputStream, "/CIDMap <\n", 10); + for (i = 0; i < nCIDs; i += 16) { + (*outputFunc)(outputStream, " ", 2); + for (j = 0; j < 16 && i+j < nCIDs; ++j) { + cid = cidMap[i+j]; + buf = GooString::format("{0:02x}{1:02x}", + (cid >> 8) & 0xff, cid & 0xff); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "\n", 1); + } + (*outputFunc)(outputStream, "> def\n", 6); + } + } else { + // direct mapping - just fill the string(s) with s[i]=i + buf = GooString::format("/CIDCount {0:d} def\n", nGlyphs); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + if (nGlyphs > 32767) { + (*outputFunc)(outputStream, "/CIDMap [\n", 10); + for (i = 0; i < nGlyphs; i += 32767) { + j = nGlyphs - i < 32767 ? nGlyphs - i : 32767; + buf = GooString::format(" {0:d} string 0 1 {1:d} {{\n", 2 * j, j - 1); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + buf = GooString::format(" 2 copy dup 2 mul exch {0:d} add -8 bitshift put\n", + i); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + buf = GooString::format(" 1 index exch dup 2 mul 1 add exch {0:d} add" + " 255 and put\n", i); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, " } for\n", 8); + } + (*outputFunc)(outputStream, "] def\n", 6); + } else { + buf = GooString::format("/CIDMap {0:d} string\n", 2 * nGlyphs); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + buf = GooString::format(" 0 1 {0:d} {{\n", nGlyphs - 1); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, + " 2 copy dup 2 mul exch -8 bitshift put\n", 42); + (*outputFunc)(outputStream, + " 1 index exch dup 2 mul 1 add exch 255 and put\n", 50); + (*outputFunc)(outputStream, " } for\n", 8); + (*outputFunc)(outputStream, "def\n", 4); + } + } + (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); + buf = GooString::format("/FontBBox [{0:d} {1:d} {2:d} {3:d}] def\n", + bbox[0], bbox[1], bbox[2], bbox[3]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, "/PaintType 0 def\n", 17); + (*outputFunc)(outputStream, "/Encoding [] readonly def\n", 26); + (*outputFunc)(outputStream, "/CharStrings 1 dict dup begin\n", 30); + (*outputFunc)(outputStream, " /.notdef 0 def\n", 17); + (*outputFunc)(outputStream, " end readonly def\n", 19); + + // write the guts of the dictionary + cvtSfnts(outputFunc, outputStream, NULL, needVerticalMetrics); + + // end the dictionary and define the font + (*outputFunc)(outputStream, + "CIDFontName currentdict end /CIDFont defineresource pop\n", + 56); +} + +void FoFiTrueType::convertToCIDType0(char *psName, + FoFiOutputFunc outputFunc, + void *outputStream) { + FoFiType1C *ff; + int i; + + if (!openTypeCFF) { + return; + } + i = seekTable("CFF "); + if (!checkRegion(tables[i].offset, tables[i].len)) { + return; + } + if (!(ff = FoFiType1C::make((char *)file + tables[i].offset, + tables[i].len))) { + return; + } + ff->convertToCIDType0(psName, outputFunc, outputStream); + delete ff; +} + +void FoFiTrueType::convertToType0(char *psName, Gushort *cidMap, int nCIDs, + GBool needVerticalMetrics, + FoFiOutputFunc outputFunc, + void *outputStream) { + GooString *buf; + GooString *sfntsName; + int n, i, j; + + if (openTypeCFF) { + return; + } + + // write the Type 42 sfnts array + sfntsName = (new GooString(psName))->append("_sfnts"); + cvtSfnts(outputFunc, outputStream, sfntsName, needVerticalMetrics); + delete sfntsName; + + // write the descendant Type 42 fonts + n = cidMap ? nCIDs : nGlyphs; + for (i = 0; i < n; i += 256) { + (*outputFunc)(outputStream, "10 dict begin\n", 14); + (*outputFunc)(outputStream, "/FontName /", 11); + (*outputFunc)(outputStream, psName, strlen(psName)); + buf = GooString::format("_{0:02x} def\n", i >> 8); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, "/FontType 42 def\n", 17); + (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); + buf = GooString::format("/FontBBox [{0:d} {1:d} {2:d} {3:d}] def\n", + bbox[0], bbox[1], bbox[2], bbox[3]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, "/PaintType 0 def\n", 17); + (*outputFunc)(outputStream, "/sfnts ", 7); + (*outputFunc)(outputStream, psName, strlen(psName)); + (*outputFunc)(outputStream, "_sfnts def\n", 11); + (*outputFunc)(outputStream, "/Encoding 256 array\n", 20); + for (j = 0; j < 256 && i+j < n; ++j) { + buf = GooString::format("dup {0:d} /c{1:02x} put\n", j, j); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "readonly def\n", 13); + (*outputFunc)(outputStream, "/CharStrings 257 dict dup begin\n", 32); + (*outputFunc)(outputStream, "/.notdef 0 def\n", 15); + for (j = 0; j < 256 && i+j < n; ++j) { + buf = GooString::format("/c{0:02x} {1:d} def\n", + j, cidMap ? cidMap[i+j] : i+j); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "end readonly def\n", 17); + (*outputFunc)(outputStream, + "FontName currentdict end definefont pop\n", 40); + } + + // write the Type 0 parent font + (*outputFunc)(outputStream, "16 dict begin\n", 14); + (*outputFunc)(outputStream, "/FontName /", 11); + (*outputFunc)(outputStream, psName, strlen(psName)); + (*outputFunc)(outputStream, " def\n", 5); + (*outputFunc)(outputStream, "/FontType 0 def\n", 16); + (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); + (*outputFunc)(outputStream, "/FMapType 2 def\n", 16); + (*outputFunc)(outputStream, "/Encoding [\n", 12); + for (i = 0; i < n; i += 256) { + buf = GooString::format("{0:d}\n", i >> 8); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "] def\n", 6); + (*outputFunc)(outputStream, "/FDepVector [\n", 14); + for (i = 0; i < n; i += 256) { + (*outputFunc)(outputStream, "/", 1); + (*outputFunc)(outputStream, psName, strlen(psName)); + buf = GooString::format("_{0:02x} findfont\n", i >> 8); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "] def\n", 6); + (*outputFunc)(outputStream, "FontName currentdict end definefont pop\n", 40); +} + +void FoFiTrueType::convertToType0(char *psName, + FoFiOutputFunc outputFunc, + void *outputStream) { + FoFiType1C *ff; + int i; + + if (!openTypeCFF) { + return; + } + i = seekTable("CFF "); + if (!checkRegion(tables[i].offset, tables[i].len)) { + return; + } + if (!(ff = FoFiType1C::make((char *)file + tables[i].offset, + tables[i].len))) { + return; + } + ff->convertToType0(psName, outputFunc, outputStream); + delete ff; +} + +void FoFiTrueType::writeTTF(FoFiOutputFunc outputFunc, + void *outputStream, char *name, + Gushort *codeToGID) { + // this substitute cmap table maps char codes 0000-ffff directly to + // glyphs 0000-ffff + static char cmapTab[36] = { + 0, 0, // table version number + 0, 1, // number of encoding tables + 0, 1, // platform ID + 0, 0, // encoding ID + 0, 0, 0, 12, // offset of subtable + 0, 4, // subtable format + 0, 24, // subtable length + 0, 0, // subtable version + 0, 2, // segment count * 2 + 0, 2, // 2 * 2 ^ floor(log2(segCount)) + 0, 0, // floor(log2(segCount)) + 0, 0, // 2*segCount - 2*2^floor(log2(segCount)) + (char)0xff, (char)0xff, // endCount[0] + 0, 0, // reserved + 0, 0, // startCount[0] + 0, 0, // idDelta[0] + 0, 0 // pad to a mulitple of four bytes + }; + static char nameTab[8] = { + 0, 0, // format + 0, 0, // number of name records + 0, 6, // offset to start of string storage + 0, 0 // pad to multiple of four bytes + }; + static char postTab[32] = { + 0, 1, 0, 0, // format + 0, 0, 0, 0, // italic angle + 0, 0, // underline position + 0, 0, // underline thickness + 0, 0, 0, 0, // fixed pitch + 0, 0, 0, 0, // min Type 42 memory + 0, 0, 0, 0, // max Type 42 memory + 0, 0, 0, 0, // min Type 1 memory + 0, 0, 0, 0 // max Type 1 memory + }; + static char os2Tab[86] = { + 0, 1, // version + 0, 1, // xAvgCharWidth + 0, 0, // usWeightClass + 0, 0, // usWidthClass + 0, 0, // fsType + 0, 0, // ySubscriptXSize + 0, 0, // ySubscriptYSize + 0, 0, // ySubscriptXOffset + 0, 0, // ySubscriptYOffset + 0, 0, // ySuperscriptXSize + 0, 0, // ySuperscriptYSize + 0, 0, // ySuperscriptXOffset + 0, 0, // ySuperscriptYOffset + 0, 0, // yStrikeoutSize + 0, 0, // yStrikeoutPosition + 0, 0, // sFamilyClass + 0, 0, 0, 0, 0, // panose + 0, 0, 0, 0, 0, + 0, 0, 0, 0, // ulUnicodeRange1 + 0, 0, 0, 0, // ulUnicodeRange2 + 0, 0, 0, 0, // ulUnicodeRange3 + 0, 0, 0, 0, // ulUnicodeRange4 + 0, 0, 0, 0, // achVendID + 0, 0, // fsSelection + 0, 0, // usFirstCharIndex + 0, 0, // usLastCharIndex + 0, 0, // sTypoAscender + 0, 0, // sTypoDescender + 0, 0, // sTypoLineGap + 0, 0, // usWinAscent + 0, 0, // usWinDescent + 0, 0, 0, 0, // ulCodePageRange1 + 0, 0, 0, 0 // ulCodePageRange2 + }; + GBool missingCmap, missingName, missingPost, missingOS2; + GBool unsortedLoca, badCmapLen, abbrevHMTX; + int nZeroLengthTables; + int nHMetrics, advWidth, lsb; + TrueTypeLoca *locaTable; + TrueTypeTable *newTables; + char *newNameTab, *newCmapTab, *newHHEATab, *newHMTXTab; + int nNewTables, cmapIdx, cmapLen, glyfLen, newNameLen, newCmapLen, next; + int newHHEALen, newHMTXLen; + Guint locaChecksum, glyfChecksum, fileChecksum; + char *tableDir; + char locaBuf[4], checksumBuf[4]; + GBool ok; + Guint t; + int pos, i, j, k, n; + + if (openTypeCFF) { + return; + } + + if (tables == NULL) { + return; + } + + // check for missing tables + // (Note: if the OS/2 table is missing, the Microsoft PCL5 driver + // will embed a PCL TrueType font with the pitch field set to zero, + // which apparently causes divide-by-zero errors. As far as I can + // tell, the only important field in the OS/2 table is + // xAvgCharWidth.) + missingCmap = (cmapIdx = seekTable("cmap")) < 0; + missingName = seekTable("name") < 0; + missingPost = seekTable("post") < 0; + missingOS2 = seekTable("OS/2") < 0; + + // read the loca table, check to see if it's sorted + locaTable = (TrueTypeLoca *)gmallocn(nGlyphs + 1, sizeof(TrueTypeLoca)); + unsortedLoca = gFalse; + i = seekTable("loca"); + pos = tables[i].offset; + ok = gTrue; + for (i = 0; i <= nGlyphs; ++i) { + if (locaFmt) { + locaTable[i].origOffset = (int)getU32BE(pos + i*4, &ok); + } else { + locaTable[i].origOffset = 2 * getU16BE(pos + i*2, &ok); + } + if (i > 0 && locaTable[i].origOffset < locaTable[i-1].origOffset) { + unsortedLoca = gTrue; + } + // glyph descriptions must be at least 12 bytes long (nContours, + // xMin, yMin, xMax, yMax, instructionLength - two bytes each); + // invalid glyph descriptions (even if they're never used) make + // Windows choke, so we work around that problem here (ideally, + // this would parse the glyph descriptions in the glyf table and + // remove any that were invalid, but this quick test is a decent + // start) + if (i > 0 && + locaTable[i].origOffset - locaTable[i-1].origOffset > 0 && + locaTable[i].origOffset - locaTable[i-1].origOffset < 12) { + locaTable[i-1].origOffset = locaTable[i].origOffset; + unsortedLoca = gTrue; + } + locaTable[i].idx = i; + } + + // check for zero-length tables + nZeroLengthTables = 0; + for (i = 0; i < nTables; ++i) { + if (tables[i].len == 0) { + ++nZeroLengthTables; + } + } + + // check for an incorrect cmap table length + badCmapLen = gFalse; + cmapLen = 0; // make gcc happy + if (!missingCmap) { + if (nCmaps > 0) { + cmapLen = cmaps[0].offset + cmaps[0].len; + for (i = 1; i < nCmaps; ++i) { + if (cmaps[i].offset + cmaps[i].len > cmapLen) { + cmapLen = cmaps[i].offset + cmaps[i].len; + } + } + } + cmapLen -= tables[cmapIdx].offset; + if (cmapLen > tables[cmapIdx].len) { + badCmapLen = gTrue; + } + } + + // check for an abbreviated hmtx table (this is completely legal, + // but confuses the Microsoft PCL5 printer driver, which generates + // embedded fonts with the pitch field set to zero) + i = seekTable("hhea"); + nHMetrics = getU16BE(tables[i].offset + 34, &ok); + abbrevHMTX = nHMetrics < nGlyphs; + + // if nothing is broken, just write the TTF file as is + if (!missingCmap && !missingName && !missingPost && !missingOS2 && + !unsortedLoca && !badCmapLen && !abbrevHMTX && nZeroLengthTables == 0 && + !name && !codeToGID) { + (*outputFunc)(outputStream, (char *)file, len); + goto done1; + } + + // sort the 'loca' table: some (non-compliant) fonts have + // out-of-order loca tables; in order to correctly handle the case + // where (compliant) fonts have empty entries in the middle of the + // table, cmpTrueTypeLocaOffset uses offset as its primary sort key, + // and idx as its secondary key (ensuring that adjacent entries with + // the same pos value remain in the same order) + glyfLen = 0; // make gcc happy + if (unsortedLoca) { + qsort(locaTable, nGlyphs + 1, sizeof(TrueTypeLoca), + &cmpTrueTypeLocaOffset); + for (i = 0; i < nGlyphs; ++i) { + locaTable[i].len = locaTable[i+1].origOffset - locaTable[i].origOffset; + } + locaTable[nGlyphs].len = 0; + qsort(locaTable, nGlyphs + 1, sizeof(TrueTypeLoca), + &cmpTrueTypeLocaIdx); + pos = 0; + for (i = 0; i <= nGlyphs; ++i) { + locaTable[i].newOffset = pos; + pos += locaTable[i].len; + if (pos & 3) { + pos += 4 - (pos & 3); + } + } + glyfLen = pos; + } + + // compute checksums for the loca and glyf tables + locaChecksum = glyfChecksum = 0; + if (unsortedLoca) { + if (locaFmt) { + for (j = 0; j <= nGlyphs; ++j) { + locaChecksum += locaTable[j].newOffset; + } + } else { + for (j = 0; j <= nGlyphs; j += 2) { + locaChecksum += locaTable[j].newOffset << 16; + if (j + 1 <= nGlyphs) { + locaChecksum += locaTable[j+1].newOffset; + } + } + } + pos = tables[seekTable("glyf")].offset; + for (j = 0; j < nGlyphs; ++j) { + n = locaTable[j].len; + if (n > 0) { + k = locaTable[j].origOffset; + if (checkRegion(pos + k, n)) { + glyfChecksum += computeTableChecksum(file + pos + k, n); + } + } + } + } + + // construct the new name table + if (name) { + n = strlen(name); + newNameLen = (6 + 4*12 + 2 * (3*n + 7) + 3) & ~3; + newNameTab = (char *)gmalloc(newNameLen); + memset(newNameTab, 0, newNameLen); + newNameTab[0] = 0; // format selector + newNameTab[1] = 0; + newNameTab[2] = 0; // number of name records + newNameTab[3] = 4; + newNameTab[4] = 0; // offset to start of string storage + newNameTab[5] = 6 + 4*12; + next = 0; + for (i = 0; i < 4; ++i) { + newNameTab[6 + i*12 + 0] = 0; // platform ID = Microsoft + newNameTab[6 + i*12 + 1] = 3; + newNameTab[6 + i*12 + 2] = 0; // encoding ID = Unicode + newNameTab[6 + i*12 + 3] = 1; + newNameTab[6 + i*12 + 4] = 0x04; // language ID = American English + newNameTab[6 + i*12 + 5] = 0x09; + newNameTab[6 + i*12 + 6] = 0; // name ID + newNameTab[6 + i*12 + 7] = i + 1; + newNameTab[6 + i*12 + 8] = i+1 == 2 ? 0 : ((2*n) >> 8); // string length + newNameTab[6 + i*12 + 9] = i+1 == 2 ? 14 : ((2*n) & 0xff); + newNameTab[6 + i*12 + 10] = next >> 8; // string offset + newNameTab[6 + i*12 + 11] = next & 0xff; + if (i+1 == 2) { + memcpy(newNameTab + 6 + 4*12 + next, "\0R\0e\0g\0u\0l\0a\0r", 14); + next += 14; + } else { + for (j = 0; j < n; ++j) { + newNameTab[6 + 4*12 + next + 2*j] = 0; + newNameTab[6 + 4*12 + next + 2*j + 1] = name[j]; + } + next += 2*n; + } + } + } else { + newNameLen = 0; + newNameTab = NULL; + } + + // construct the new cmap table + if (codeToGID) { + newCmapLen = 44 + 256 * 2; + newCmapTab = (char *)gmalloc(newCmapLen); + newCmapTab[0] = 0; // table version number = 0 + newCmapTab[1] = 0; + newCmapTab[2] = 0; // number of encoding tables = 1 + newCmapTab[3] = 1; + newCmapTab[4] = 0; // platform ID = Microsoft + newCmapTab[5] = 3; + newCmapTab[6] = 0; // encoding ID = Unicode + newCmapTab[7] = 1; + newCmapTab[8] = 0; // offset of subtable + newCmapTab[9] = 0; + newCmapTab[10] = 0; + newCmapTab[11] = 12; + newCmapTab[12] = 0; // subtable format = 4 + newCmapTab[13] = 4; + newCmapTab[14] = 0x02; // subtable length + newCmapTab[15] = 0x20; + newCmapTab[16] = 0; // subtable version = 0 + newCmapTab[17] = 0; + newCmapTab[18] = 0; // segment count * 2 + newCmapTab[19] = 4; + newCmapTab[20] = 0; // 2 * 2 ^ floor(log2(segCount)) + newCmapTab[21] = 4; + newCmapTab[22] = 0; // floor(log2(segCount)) + newCmapTab[23] = 1; + newCmapTab[24] = 0; // 2*segCount - 2*2^floor(log2(segCount)) + newCmapTab[25] = 0; + newCmapTab[26] = 0x00; // endCount[0] + newCmapTab[27] = (char)0xff; + newCmapTab[28] = (char)0xff; // endCount[1] + newCmapTab[29] = (char)0xff; + newCmapTab[30] = 0; // reserved + newCmapTab[31] = 0; + newCmapTab[32] = 0x00; // startCount[0] + newCmapTab[33] = 0x00; + newCmapTab[34] = (char)0xff; // startCount[1] + newCmapTab[35] = (char)0xff; + newCmapTab[36] = 0; // idDelta[0] + newCmapTab[37] = 0; + newCmapTab[38] = 0; // idDelta[1] + newCmapTab[39] = 1; + newCmapTab[40] = 0; // idRangeOffset[0] + newCmapTab[41] = 4; + newCmapTab[42] = 0; // idRangeOffset[1] + newCmapTab[43] = 0; + for (i = 0; i < 256; ++i) { + newCmapTab[44 + 2*i] = codeToGID[i] >> 8; + newCmapTab[44 + 2*i + 1] = codeToGID[i] & 0xff; + } + } else { + newCmapLen = 0; + newCmapTab = NULL; + } + + // generate the new hmtx table and the updated hhea table + if (abbrevHMTX) { + i = seekTable("hhea"); + pos = tables[i].offset; + newHHEALen = 36; + newHHEATab = (char *)gmalloc(newHHEALen); + for (i = 0; i < newHHEALen; ++i) { + newHHEATab[i] = getU8(pos++, &ok); + } + newHHEATab[34] = nGlyphs >> 8; + newHHEATab[35] = nGlyphs & 0xff; + i = seekTable("hmtx"); + pos = tables[i].offset; + newHMTXLen = 4 * nGlyphs; + newHMTXTab = (char *)gmalloc(newHMTXLen); + advWidth = 0; + for (i = 0; i < nHMetrics; ++i) { + advWidth = getU16BE(pos, &ok); + lsb = getU16BE(pos + 2, &ok); + pos += 4; + newHMTXTab[4*i ] = advWidth >> 8; + newHMTXTab[4*i + 1] = advWidth & 0xff; + newHMTXTab[4*i + 2] = lsb >> 8; + newHMTXTab[4*i + 3] = lsb & 0xff; + } + for (; i < nGlyphs; ++i) { + lsb = getU16BE(pos, &ok); + pos += 2; + newHMTXTab[4*i ] = advWidth >> 8; + newHMTXTab[4*i + 1] = advWidth & 0xff; + newHMTXTab[4*i + 2] = lsb >> 8; + newHMTXTab[4*i + 3] = lsb & 0xff; + } + } else { + newHHEATab = newHMTXTab = NULL; + newHHEALen = newHMTXLen = 0; // make gcc happy + } + + // construct the new table directory: + // - keep all original tables with non-zero length + // - fix the cmap table's length, if necessary + // - add missing tables + // - sort the table by tag + // - compute new table positions, including 4-byte alignment + // - (re)compute table checksums + nNewTables = nTables - nZeroLengthTables + + (missingCmap ? 1 : 0) + (missingName ? 1 : 0) + + (missingPost ? 1 : 0) + (missingOS2 ? 1 : 0); + newTables = (TrueTypeTable *)gmallocn(nNewTables, sizeof(TrueTypeTable)); + j = 0; + for (i = 0; i < nTables; ++i) { + if (tables[i].len > 0) { + newTables[j] = tables[i]; + newTables[j].origOffset = tables[i].offset; + if (checkRegion(tables[i].offset, newTables[i].len)) { + newTables[j].checksum = + computeTableChecksum(file + tables[i].offset, tables[i].len); + if (tables[i].tag == headTag) { + // don't include the file checksum + newTables[j].checksum -= getU32BE(tables[i].offset + 8, &ok); + } + } + if (newTables[j].tag == cmapTag && codeToGID) { + newTables[j].len = newCmapLen; + newTables[j].checksum = computeTableChecksum((Guchar *)newCmapTab, + newCmapLen); + } else if (newTables[j].tag == cmapTag && badCmapLen) { + newTables[j].len = cmapLen; + } else if (newTables[j].tag == locaTag && unsortedLoca) { + newTables[j].len = (nGlyphs + 1) * (locaFmt ? 4 : 2); + newTables[j].checksum = locaChecksum; + } else if (newTables[j].tag == glyfTag && unsortedLoca) { + newTables[j].len = glyfLen; + newTables[j].checksum = glyfChecksum; + } else if (newTables[j].tag == nameTag && name) { + newTables[j].len = newNameLen; + newTables[j].checksum = computeTableChecksum((Guchar *)newNameTab, + newNameLen); + } else if (newTables[j].tag == hheaTag && abbrevHMTX) { + newTables[j].len = newHHEALen; + newTables[j].checksum = computeTableChecksum((Guchar *)newHHEATab, + newHHEALen); + } else if (newTables[j].tag == hmtxTag && abbrevHMTX) { + newTables[j].len = newHMTXLen; + newTables[j].checksum = computeTableChecksum((Guchar *)newHMTXTab, + newHMTXLen); + } + ++j; + } + } + if (missingCmap) { + newTables[j].tag = cmapTag; + if (codeToGID) { + newTables[j].checksum = computeTableChecksum((Guchar *)newCmapTab, + newCmapLen); + newTables[j].len = newCmapLen; + } else { + newTables[j].checksum = computeTableChecksum((Guchar *)cmapTab, + sizeof(cmapTab)); + newTables[j].len = sizeof(cmapTab); + } + ++j; + } + if (missingName) { + newTables[j].tag = nameTag; + if (name) { + newTables[j].checksum = computeTableChecksum((Guchar *)newNameTab, + newNameLen); + newTables[j].len = newNameLen; + } else { + newTables[j].checksum = computeTableChecksum((Guchar *)nameTab, + sizeof(nameTab)); + newTables[j].len = sizeof(nameTab); + } + ++j; + } + if (missingPost) { + newTables[j].tag = postTag; + newTables[j].checksum = computeTableChecksum((Guchar *)postTab, + sizeof(postTab)); + newTables[j].len = sizeof(postTab); + ++j; + } + if (missingOS2) { + newTables[j].tag = os2Tag; + newTables[j].checksum = computeTableChecksum((Guchar *)os2Tab, + sizeof(os2Tab)); + newTables[j].len = sizeof(os2Tab); + ++j; + } + qsort(newTables, nNewTables, sizeof(TrueTypeTable), + &cmpTrueTypeTableTag); + pos = 12 + nNewTables * 16; + for (i = 0; i < nNewTables; ++i) { + newTables[i].offset = pos; + pos += newTables[i].len; + if (pos & 3) { + pos += 4 - (pos & 3); + } + } + + // write the table directory + tableDir = (char *)gmalloc(12 + nNewTables * 16); + tableDir[0] = 0x00; // sfnt version + tableDir[1] = 0x01; + tableDir[2] = 0x00; + tableDir[3] = 0x00; + tableDir[4] = (char)((nNewTables >> 8) & 0xff); // numTables + tableDir[5] = (char)(nNewTables & 0xff); + for (i = -1, t = (Guint)nNewTables; t; ++i, t >>= 1) ; + t = 1 << (4 + i); + tableDir[6] = (char)((t >> 8) & 0xff); // searchRange + tableDir[7] = (char)(t & 0xff); + tableDir[8] = (char)((i >> 8) & 0xff); // entrySelector + tableDir[9] = (char)(i & 0xff); + t = nNewTables * 16 - t; + tableDir[10] = (char)((t >> 8) & 0xff); // rangeShift + tableDir[11] = (char)(t & 0xff); + pos = 12; + for (i = 0; i < nNewTables; ++i) { + tableDir[pos ] = (char)(newTables[i].tag >> 24); + tableDir[pos+ 1] = (char)(newTables[i].tag >> 16); + tableDir[pos+ 2] = (char)(newTables[i].tag >> 8); + tableDir[pos+ 3] = (char) newTables[i].tag; + tableDir[pos+ 4] = (char)(newTables[i].checksum >> 24); + tableDir[pos+ 5] = (char)(newTables[i].checksum >> 16); + tableDir[pos+ 6] = (char)(newTables[i].checksum >> 8); + tableDir[pos+ 7] = (char) newTables[i].checksum; + tableDir[pos+ 8] = (char)(newTables[i].offset >> 24); + tableDir[pos+ 9] = (char)(newTables[i].offset >> 16); + tableDir[pos+10] = (char)(newTables[i].offset >> 8); + tableDir[pos+11] = (char) newTables[i].offset; + tableDir[pos+12] = (char)(newTables[i].len >> 24); + tableDir[pos+13] = (char)(newTables[i].len >> 16); + tableDir[pos+14] = (char)(newTables[i].len >> 8); + tableDir[pos+15] = (char) newTables[i].len; + pos += 16; + } + (*outputFunc)(outputStream, tableDir, 12 + nNewTables * 16); + + // compute the file checksum + fileChecksum = computeTableChecksum((Guchar *)tableDir, + 12 + nNewTables * 16); + for (i = 0; i < nNewTables; ++i) { + fileChecksum += newTables[i].checksum; + } + fileChecksum = 0xb1b0afba - fileChecksum; + + // write the tables + for (i = 0; i < nNewTables; ++i) { + if (newTables[i].tag == headTag) { + if (checkRegion(newTables[i].origOffset, newTables[i].len)) { + (*outputFunc)(outputStream, (char *)file + newTables[i].origOffset, 8); + checksumBuf[0] = fileChecksum >> 24; + checksumBuf[1] = fileChecksum >> 16; + checksumBuf[2] = fileChecksum >> 8; + checksumBuf[3] = fileChecksum; + (*outputFunc)(outputStream, checksumBuf, 4); + (*outputFunc)(outputStream, + (char *)file + newTables[i].origOffset + 12, + newTables[i].len - 12); + } else { + for (j = 0; j < newTables[i].len; ++j) { + (*outputFunc)(outputStream, "\0", 1); + } + } + } else if (newTables[i].tag == cmapTag && codeToGID) { + (*outputFunc)(outputStream, newCmapTab, newTables[i].len); + } else if (newTables[i].tag == cmapTag && missingCmap) { + (*outputFunc)(outputStream, cmapTab, newTables[i].len); + } else if (newTables[i].tag == nameTag && name) { + (*outputFunc)(outputStream, newNameTab, newTables[i].len); + } else if (newTables[i].tag == nameTag && missingName) { + (*outputFunc)(outputStream, nameTab, newTables[i].len); + } else if (newTables[i].tag == postTag && missingPost) { + (*outputFunc)(outputStream, postTab, newTables[i].len); + } else if (newTables[i].tag == os2Tag && missingOS2) { + (*outputFunc)(outputStream, os2Tab, newTables[i].len); + } else if (newTables[i].tag == hheaTag && abbrevHMTX) { + (*outputFunc)(outputStream, newHHEATab, newTables[i].len); + } else if (newTables[i].tag == hmtxTag && abbrevHMTX) { + (*outputFunc)(outputStream, newHMTXTab, newTables[i].len); + } else if (newTables[i].tag == locaTag && unsortedLoca) { + for (j = 0; j <= nGlyphs; ++j) { + if (locaFmt) { + locaBuf[0] = (char)(locaTable[j].newOffset >> 24); + locaBuf[1] = (char)(locaTable[j].newOffset >> 16); + locaBuf[2] = (char)(locaTable[j].newOffset >> 8); + locaBuf[3] = (char) locaTable[j].newOffset; + (*outputFunc)(outputStream, locaBuf, 4); + } else { + locaBuf[0] = (char)(locaTable[j].newOffset >> 9); + locaBuf[1] = (char)(locaTable[j].newOffset >> 1); + (*outputFunc)(outputStream, locaBuf, 2); + } + } + } else if (newTables[i].tag == glyfTag && unsortedLoca) { + pos = tables[seekTable("glyf")].offset; + for (j = 0; j < nGlyphs; ++j) { + n = locaTable[j].len; + if (n > 0) { + k = locaTable[j].origOffset; + if (checkRegion(pos + k, n)) { + (*outputFunc)(outputStream, (char *)file + pos + k, n); + } else { + for (k = 0; k < n; ++k) { + (*outputFunc)(outputStream, "\0", 1); + } + } + if ((k = locaTable[j].len & 3)) { + (*outputFunc)(outputStream, "\0\0\0\0", 4 - k); + } + } + } + } else { + if (checkRegion(newTables[i].origOffset, newTables[i].len)) { + (*outputFunc)(outputStream, (char *)file + newTables[i].origOffset, + newTables[i].len); + } else { + for (j = 0; j < newTables[i].len; ++j) { + (*outputFunc)(outputStream, "\0", 1); + } + } + } + if (newTables[i].len & 3) { + (*outputFunc)(outputStream, "\0\0\0", 4 - (newTables[i].len & 3)); + } + } + + gfree(newHMTXTab); + gfree(newHHEATab); + gfree(newCmapTab); + gfree(newNameTab); + gfree(tableDir); + gfree(newTables); + done1: + gfree(locaTable); +} + +void FoFiTrueType::cvtEncoding(char **encoding, + FoFiOutputFunc outputFunc, + void *outputStream) { + char *name; + GooString *buf; + int i; + + (*outputFunc)(outputStream, "/Encoding 256 array\n", 20); + if (encoding) { + for (i = 0; i < 256; ++i) { + if (!(name = encoding[i])) { + name = ".notdef"; + } + buf = GooString::format("dup {0:d} /", i); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, name, strlen(name)); + (*outputFunc)(outputStream, " put\n", 5); + } + } else { + for (i = 0; i < 256; ++i) { + buf = GooString::format("dup {0:d} /c{1:02x} put\n", i, i); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + } + (*outputFunc)(outputStream, "readonly def\n", 13); +} + +void FoFiTrueType::cvtCharStrings(char **encoding, + Gushort *codeToGID, + FoFiOutputFunc outputFunc, + void *outputStream) { + char *name; + GooString *buf; + char buf2[16]; + int i, k; + + // always define '.notdef' + (*outputFunc)(outputStream, "/CharStrings 256 dict dup begin\n", 32); + (*outputFunc)(outputStream, "/.notdef 0 def\n", 15); + + // if there's no 'cmap' table, punt + if (nCmaps == 0) { + goto err; + } + + // map char name to glyph index: + // 1. use encoding to map name to char code + // 2. use codeToGID to map char code to glyph index + // N.B. We do this in reverse order because font subsets can have + // weird encodings that use the same character name twice, and + // the first definition is probably the one we want. + k = 0; // make gcc happy + for (i = 255; i >= 0; --i) { + if (encoding) { + name = encoding[i]; + } else { + sprintf(buf2, "c%02x", i); + name = buf2; + } + if (name && strcmp(name, ".notdef")) { + k = codeToGID[i]; + // note: Distiller (maybe Adobe's PS interpreter in general) + // doesn't like TrueType fonts that have CharStrings entries + // which point to nonexistent glyphs, hence the (k < nGlyphs) + // test + if (k > 0 && k < nGlyphs) { + (*outputFunc)(outputStream, "/", 1); + (*outputFunc)(outputStream, name, strlen(name)); + buf = GooString::format(" {0:d} def\n", k); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + } + } + + err: + (*outputFunc)(outputStream, "end readonly def\n", 17); +} + +void FoFiTrueType::cvtSfnts(FoFiOutputFunc outputFunc, + void *outputStream, GooString *name, + GBool needVerticalMetrics) { + Guchar headData[54]; + TrueTypeLoca *locaTable; + Guchar *locaData; + TrueTypeTable newTables[nT42Tables]; + Guchar tableDir[12 + nT42Tables*16]; + GBool ok; + Guint checksum; + int nNewTables; + int length, pos, glyfPos, i, j, k; + Guchar vheaTab[36] = { + 0, 1, 0, 0, // table version number + 0, 0, // ascent + 0, 0, // descent + 0, 0, // reserved + 0, 0, // max advance height + 0, 0, // min top side bearing + 0, 0, // min bottom side bearing + 0, 0, // y max extent + 0, 0, // caret slope rise + 0, 1, // caret slope run + 0, 0, // caret offset + 0, 0, // reserved + 0, 0, // reserved + 0, 0, // reserved + 0, 0, // reserved + 0, 0, // metric data format + 0, 1 // number of advance heights in vmtx table + }; + Guchar *vmtxTab; + GBool needVhea, needVmtx; + int advance; + + // construct the 'head' table, zero out the font checksum + i = seekTable("head"); + if (i < 0 || i >= nTables) { + return; + } + pos = tables[i].offset; + if (!checkRegion(pos, 54)) { + return; + } + memcpy(headData, file + pos, 54); + headData[8] = headData[9] = headData[10] = headData[11] = (Guchar)0; + + // read the original 'loca' table, pad entries out to 4 bytes, and + // sort it into proper order -- some (non-compliant) fonts have + // out-of-order loca tables; in order to correctly handle the case + // where (compliant) fonts have empty entries in the middle of the + // table, cmpTrueTypeLocaPos uses offset as its primary sort key, + // and idx as its secondary key (ensuring that adjacent entries with + // the same pos value remain in the same order) + locaTable = (TrueTypeLoca *)gmallocn(nGlyphs + 1, sizeof(TrueTypeLoca)); + i = seekTable("loca"); + pos = tables[i].offset; + ok = gTrue; + for (i = 0; i <= nGlyphs; ++i) { + locaTable[i].idx = i; + if (locaFmt) { + locaTable[i].origOffset = (int)getU32BE(pos + i*4, &ok); + } else { + locaTable[i].origOffset = 2 * getU16BE(pos + i*2, &ok); + } + } + qsort(locaTable, nGlyphs + 1, sizeof(TrueTypeLoca), + &cmpTrueTypeLocaOffset); + for (i = 0; i < nGlyphs; ++i) { + locaTable[i].len = locaTable[i+1].origOffset - locaTable[i].origOffset; + } + locaTable[nGlyphs].len = 0; + qsort(locaTable, nGlyphs + 1, sizeof(TrueTypeLoca), + &cmpTrueTypeLocaIdx); + pos = 0; + for (i = 0; i <= nGlyphs; ++i) { + locaTable[i].newOffset = pos; + pos += locaTable[i].len; + if (pos & 3) { + pos += 4 - (pos & 3); + } + } + + // construct the new 'loca' table + locaData = (Guchar *)gmallocn(nGlyphs + 1, (locaFmt ? 4 : 2)); + for (i = 0; i <= nGlyphs; ++i) { + pos = locaTable[i].newOffset; + if (locaFmt) { + locaData[4*i ] = (Guchar)(pos >> 24); + locaData[4*i+1] = (Guchar)(pos >> 16); + locaData[4*i+2] = (Guchar)(pos >> 8); + locaData[4*i+3] = (Guchar) pos; + } else { + locaData[2*i ] = (Guchar)(pos >> 9); + locaData[2*i+1] = (Guchar)(pos >> 1); + } + } + + // count the number of tables + nNewTables = 0; + for (i = 0; i < nT42Tables; ++i) { + if (t42Tables[i].required || + seekTable(t42Tables[i].tag) >= 0) { + ++nNewTables; + } + } + vmtxTab = NULL; // make gcc happy + advance = 0; // make gcc happy + if (needVerticalMetrics) { + needVhea = seekTable("vhea") < 0; + needVmtx = seekTable("vmtx") < 0; + if (needVhea || needVmtx) { + i = seekTable("head"); + advance = getU16BE(tables[i].offset + 18, &ok); // units per em + if (needVhea) { + ++nNewTables; + } + if (needVmtx) { + ++nNewTables; + } + } + } + + // construct the new table headers, including table checksums + // (pad each table out to a multiple of 4 bytes) + pos = 12 + nNewTables*16; + k = 0; + for (i = 0; i < nT42Tables; ++i) { + length = -1; + checksum = 0; // make gcc happy + if (i == t42HeadTable) { + length = 54; + checksum = computeTableChecksum(headData, 54); + } else if (i == t42LocaTable) { + length = (nGlyphs + 1) * (locaFmt ? 4 : 2); + checksum = computeTableChecksum(locaData, length); + } else if (i == t42GlyfTable) { + length = 0; + checksum = 0; + glyfPos = tables[seekTable("glyf")].offset; + for (j = 0; j < nGlyphs; ++j) { + length += locaTable[j].len; + if (length & 3) { + length += 4 - (length & 3); + } + if (checkRegion(glyfPos + locaTable[j].origOffset, locaTable[j].len)) { + checksum += + computeTableChecksum(file + glyfPos + locaTable[j].origOffset, + locaTable[j].len); + } + } + } else { + if ((j = seekTable(t42Tables[i].tag)) >= 0) { + length = tables[j].len; + if (checkRegion(tables[j].offset, length)) { + checksum = computeTableChecksum(file + tables[j].offset, length); + } + } else if (needVerticalMetrics && i == t42VheaTable) { + vheaTab[10] = advance / 256; // max advance height + vheaTab[11] = advance % 256; + length = sizeof(vheaTab); + checksum = computeTableChecksum(vheaTab, length); + } else if (needVerticalMetrics && i == t42VmtxTable) { + length = 4 + (nGlyphs - 1) * 4; + vmtxTab = (Guchar *)gmalloc(length); + vmtxTab[0] = advance / 256; + vmtxTab[1] = advance % 256; + for (j = 2; j < length; j += 2) { + vmtxTab[j] = 0; + vmtxTab[j+1] = 0; + } + checksum = computeTableChecksum(vmtxTab, length); + } else if (t42Tables[i].required) { + //~ error(-1, "Embedded TrueType font is missing a required table ('%s')", + //~ t42Tables[i].tag); + length = 0; + checksum = 0; + } + } + if (length >= 0) { + newTables[k].tag = ((t42Tables[i].tag[0] & 0xff) << 24) | + ((t42Tables[i].tag[1] & 0xff) << 16) | + ((t42Tables[i].tag[2] & 0xff) << 8) | + (t42Tables[i].tag[3] & 0xff); + newTables[k].checksum = checksum; + newTables[k].offset = pos; + newTables[k].len = length; + pos += length; + if (pos & 3) { + pos += 4 - (length & 3); + } + ++k; + } + } + + // construct the table directory + tableDir[0] = 0x00; // sfnt version + tableDir[1] = 0x01; + tableDir[2] = 0x00; + tableDir[3] = 0x00; + tableDir[4] = 0; // numTables + tableDir[5] = nNewTables; + tableDir[6] = 0; // searchRange + tableDir[7] = (Guchar)128; + tableDir[8] = 0; // entrySelector + tableDir[9] = 3; + tableDir[10] = 0; // rangeShift + tableDir[11] = (Guchar)(16 * nNewTables - 128); + pos = 12; + for (i = 0; i < nNewTables; ++i) { + tableDir[pos ] = (Guchar)(newTables[i].tag >> 24); + tableDir[pos+ 1] = (Guchar)(newTables[i].tag >> 16); + tableDir[pos+ 2] = (Guchar)(newTables[i].tag >> 8); + tableDir[pos+ 3] = (Guchar) newTables[i].tag; + tableDir[pos+ 4] = (Guchar)(newTables[i].checksum >> 24); + tableDir[pos+ 5] = (Guchar)(newTables[i].checksum >> 16); + tableDir[pos+ 6] = (Guchar)(newTables[i].checksum >> 8); + tableDir[pos+ 7] = (Guchar) newTables[i].checksum; + tableDir[pos+ 8] = (Guchar)(newTables[i].offset >> 24); + tableDir[pos+ 9] = (Guchar)(newTables[i].offset >> 16); + tableDir[pos+10] = (Guchar)(newTables[i].offset >> 8); + tableDir[pos+11] = (Guchar) newTables[i].offset; + tableDir[pos+12] = (Guchar)(newTables[i].len >> 24); + tableDir[pos+13] = (Guchar)(newTables[i].len >> 16); + tableDir[pos+14] = (Guchar)(newTables[i].len >> 8); + tableDir[pos+15] = (Guchar) newTables[i].len; + pos += 16; + } + + // compute the font checksum and store it in the head table + checksum = computeTableChecksum(tableDir, 12 + nNewTables*16); + for (i = 0; i < nNewTables; ++i) { + checksum += newTables[i].checksum; + } + checksum = 0xb1b0afba - checksum; // because the TrueType spec says so + headData[ 8] = (Guchar)(checksum >> 24); + headData[ 9] = (Guchar)(checksum >> 16); + headData[10] = (Guchar)(checksum >> 8); + headData[11] = (Guchar) checksum; + + // start the sfnts array + if (name) { + (*outputFunc)(outputStream, "/", 1); + (*outputFunc)(outputStream, name->getCString(), name->getLength()); + (*outputFunc)(outputStream, " [\n", 3); + } else { + (*outputFunc)(outputStream, "/sfnts [\n", 9); + } + + // write the table directory + dumpString(tableDir, 12 + nNewTables*16, outputFunc, outputStream); + + // write the tables + for (i = 0; i < nNewTables; ++i) { + if (i == t42HeadTable) { + dumpString(headData, 54, outputFunc, outputStream); + } else if (i == t42LocaTable) { + length = (nGlyphs + 1) * (locaFmt ? 4 : 2); + dumpString(locaData, length, outputFunc, outputStream); + } else if (i == t42GlyfTable) { + glyfPos = tables[seekTable("glyf")].offset; + for (j = 0; j < nGlyphs; ++j) { + if (locaTable[j].len > 0 && + checkRegion(glyfPos + locaTable[j].origOffset, locaTable[j].len)) { + dumpString(file + glyfPos + locaTable[j].origOffset, + locaTable[j].len, outputFunc, outputStream); + } + } + } else { + // length == 0 means the table is missing and the error was + // already reported during the construction of the table + // headers + if ((length = newTables[i].len) > 0) { + if ((j = seekTable(t42Tables[i].tag)) >= 0 && + checkRegion(tables[j].offset, tables[j].len)) { + dumpString(file + tables[j].offset, tables[j].len, + outputFunc, outputStream); + } else if (needVerticalMetrics && i == t42VheaTable) { + dumpString(vheaTab, length, outputFunc, outputStream); + } else if (needVerticalMetrics && i == t42VmtxTable) { + dumpString(vmtxTab, length, outputFunc, outputStream); + gfree(vmtxTab); + } + } + } + } + + // end the sfnts array + (*outputFunc)(outputStream, "] def\n", 6); + + gfree(locaData); + gfree(locaTable); +} + +void FoFiTrueType::dumpString(Guchar *s, int length, + FoFiOutputFunc outputFunc, + void *outputStream) { + GooString *buf; + int pad, i, j; + + (*outputFunc)(outputStream, "<", 1); + for (i = 0; i < length; i += 32) { + for (j = 0; j < 32 && i+j < length; ++j) { + buf = GooString::format("{0:02x}", s[i+j] & 0xff); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + if (i % (65536 - 32) == 65536 - 64) { + (*outputFunc)(outputStream, ">\n<", 3); + } else if (i+32 < length) { + (*outputFunc)(outputStream, "\n", 1); + } + } + if (length & 3) { + pad = 4 - (length & 3); + for (i = 0; i < pad; ++i) { + (*outputFunc)(outputStream, "00", 2); + } + } + // add an extra zero byte because the Adobe Type 42 spec says so + (*outputFunc)(outputStream, "00>\n", 4); +} + +Guint FoFiTrueType::computeTableChecksum(Guchar *data, int length) { + Guint checksum, word; + int i; + + checksum = 0; + for (i = 0; i+3 < length; i += 4) { + word = ((data[i ] & 0xff) << 24) + + ((data[i+1] & 0xff) << 16) + + ((data[i+2] & 0xff) << 8) + + (data[i+3] & 0xff); + checksum += word; + } + if (length & 3) { + word = 0; + i = length & ~3; + switch (length & 3) { + case 3: + word |= (data[i+2] & 0xff) << 8; + case 2: + word |= (data[i+1] & 0xff) << 16; + case 1: + word |= (data[i ] & 0xff) << 24; + break; + } + checksum += word; + } + return checksum; +} + +void FoFiTrueType::parse() { + Guint topTag; + int pos, ver, i, j; + + parsedOk = gTrue; + + // look for a collection (TTC) + topTag = getU32BE(0, &parsedOk); + if (!parsedOk) { + return; + } + if (topTag == ttcfTag) { + /* TTC font */ + int dircount; + + dircount = getU32BE(8, &parsedOk); + if (!parsedOk) + return; + if (! dircount) { + parsedOk = gFalse; + return; + } + + if (faceIndex >= dircount) + faceIndex = 0; + pos = getU32BE(12 + faceIndex * 4, &parsedOk); + if (! parsedOk) + return; + } else { + pos = 0; + } + + // check the sfnt version + ver = getU32BE(pos, &parsedOk); + if (!parsedOk) { + return; + } + openTypeCFF = ver == 0x4f54544f; // 'OTTO' + + // read the table directory + nTables = getU16BE(pos + 4, &parsedOk); + if (!parsedOk) { + return; + } + tables = (TrueTypeTable *)gmallocn(nTables, sizeof(TrueTypeTable)); + pos += 12; + int wrongTables = 0; + for (i = 0; i < nTables; ++i) { + tables[i].tag = getU32BE(pos, &parsedOk); + tables[i].checksum = getU32BE(pos + 4, &parsedOk); + tables[i].offset = (int)getU32BE(pos + 8, &parsedOk); + tables[i].len = (int)getU32BE(pos + 12, &parsedOk); + if (tables[i].offset + tables[i].len < tables[i].offset || + tables[i].offset + tables[i].len > len) { + i--; + wrongTables++; + error(-1, "Found a bad table definition on true type definition, trying to continue..."); + } + pos += 16; + } + nTables -= wrongTables; + tables = (TrueTypeTable *)greallocn_checkoverflow(tables, nTables, sizeof(TrueTypeTable)); + if (!parsedOk || tables == NULL) { + return; + } + + // check for tables that are required by both the TrueType spec and + // the Type 42 spec + if (seekTable("head") < 0 || + seekTable("hhea") < 0 || + seekTable("maxp") < 0 || + seekTable("hmtx") < 0 || + (!openTypeCFF && seekTable("loca") < 0) || + (!openTypeCFF && seekTable("glyf") < 0) || + (openTypeCFF && seekTable("CFF ") < 0)) { + parsedOk = gFalse; + return; + } + + // read the cmaps + if ((i = seekTable("cmap")) >= 0) { + pos = tables[i].offset + 2; + nCmaps = getU16BE(pos, &parsedOk); + pos += 2; + if (!parsedOk) { + return; + } + cmaps = (TrueTypeCmap *)gmallocn(nCmaps, sizeof(TrueTypeCmap)); + for (j = 0; j < nCmaps; ++j) { + cmaps[j].platform = getU16BE(pos, &parsedOk); + cmaps[j].encoding = getU16BE(pos + 2, &parsedOk); + cmaps[j].offset = tables[i].offset + getU32BE(pos + 4, &parsedOk); + pos += 8; + cmaps[j].fmt = getU16BE(cmaps[j].offset, &parsedOk); + cmaps[j].len = getU16BE(cmaps[j].offset + 2, &parsedOk); + } + if (!parsedOk) { + return; + } + } else { + nCmaps = 0; + } + + // get the number of glyphs from the maxp table + i = seekTable("maxp"); + nGlyphs = getU16BE(tables[i].offset + 4, &parsedOk); + if (!parsedOk) { + return; + } + + // get the bbox and loca table format from the head table + i = seekTable("head"); + bbox[0] = getS16BE(tables[i].offset + 36, &parsedOk); + bbox[1] = getS16BE(tables[i].offset + 38, &parsedOk); + bbox[2] = getS16BE(tables[i].offset + 40, &parsedOk); + bbox[3] = getS16BE(tables[i].offset + 42, &parsedOk); + locaFmt = getS16BE(tables[i].offset + 50, &parsedOk); + if (!parsedOk) { + return; + } + + // make sure the loca table is sane (correct length and entries are + // in bounds) + if (!openTypeCFF) { + i = seekTable("loca"); + if (tables[i].len < 0) { + parsedOk = gFalse; + return; + } + if (tables[i].len < (nGlyphs + 1) * (locaFmt ? 4 : 2)) { + nGlyphs = tables[i].len / (locaFmt ? 4 : 2) - 1; + } + for (j = 0; j <= nGlyphs; ++j) { + if (locaFmt) { + pos = (int)getU32BE(tables[i].offset + j*4, &parsedOk); + } else { + pos = getU16BE(tables[i].offset + j*2, &parsedOk); + } + if (pos < 0 || pos > len) { + parsedOk = gFalse; + } + } + if (!parsedOk) { + return; + } + } + + // read the post table + readPostTable(); +} + +void FoFiTrueType::readPostTable() { + GooString *name; + int tablePos, postFmt, stringIdx, stringPos; + GBool ok; + int i, j, n, m; + + ok = gTrue; + if ((i = seekTable("post")) < 0) { + return; + } + tablePos = tables[i].offset; + postFmt = getU32BE(tablePos, &ok); + if (!ok) { + goto err; + } + if (postFmt == 0x00010000) { + nameToGID = new GooHash(gTrue); + for (i = 0; i < 258; ++i) { + nameToGID->add(new GooString(macGlyphNames[i]), i); + } + } else if (postFmt == 0x00020000) { + nameToGID = new GooHash(gTrue); + n = getU16BE(tablePos + 32, &ok); + if (!ok) { + goto err; + } + if (n > nGlyphs) { + n = nGlyphs; + } + stringIdx = 0; + stringPos = tablePos + 34 + 2*n; + for (i = 0; i < n; ++i) { + j = getU16BE(tablePos + 34 + 2*i, &ok); + if (j < 258) { + nameToGID->removeInt(macGlyphNames[j]); + nameToGID->add(new GooString(macGlyphNames[j]), i); + } else { + j -= 258; + if (j != stringIdx) { + for (stringIdx = 0, stringPos = tablePos + 34 + 2*n; + stringIdx < j; + ++stringIdx, stringPos += 1 + getU8(stringPos, &ok)) ; + if (!ok) { + goto err; + } + } + m = getU8(stringPos, &ok); + if (!ok || !checkRegion(stringPos + 1, m)) { + goto err; + } + name = new GooString((char *)&file[stringPos + 1], m); + nameToGID->removeInt(name); + nameToGID->add(name, i); + ++stringIdx; + stringPos += 1 + m; + } + } + } else if (postFmt == 0x00028000) { + nameToGID = new GooHash(gTrue); + for (i = 0; i < nGlyphs; ++i) { + j = getU8(tablePos + 32 + i, &ok); + if (!ok) { + goto err; + } + if (j < 258) { + nameToGID->removeInt(macGlyphNames[j]); + nameToGID->add(new GooString(macGlyphNames[j]), i); + } + } + } + + return; + + err: + if (nameToGID) { + delete nameToGID; + nameToGID = NULL; + } +} + +int FoFiTrueType::seekTable(char *tag) { + Guint tagI; + int i; + + tagI = ((tag[0] & 0xff) << 24) | + ((tag[1] & 0xff) << 16) | + ((tag[2] & 0xff) << 8) | + (tag[3] & 0xff); + for (i = 0; i < nTables; ++i) { + if (tables[i].tag == tagI) { + return i; + } + } + return -1; +} + +Guint FoFiTrueType::charToTag(const char *tagName) +{ + int n = strlen(tagName); + Guint tag = 0; + int i; + + if (n > 4) n = 4; + for (i = 0;i < n;i++) { + tag <<= 8; + tag |= tagName[i] & 0xff; + } + for (;i < 4;i++) { + tag <<= 8; + tag |= ' '; + } + return tag; +} + +/* + setup GSUB table data + Only supporting vertical text substitution. +*/ +int FoFiTrueType::setupGSUB(const char *tagName) +{ + Guint gsubTable; + unsigned int i; + Guint scriptList, featureList; + Guint scriptCount; + Guint tag; + Guint scriptTable = 0; + Guint langSys; + Guint featureCount; + Guint featureIndex; + Guint ftable = 0; + Guint llist; + Guint scriptTag; + int x; + Guint pos; + + if (tagName == 0) { + gsubFeatureTable = 0; + return 0; + } + scriptTag = charToTag(tagName); + /* read GSUB Header */ + if ((x = seekTable("GSUB")) < 0) { + return 0; /* GSUB table not found */ + } + gsubTable = tables[x].offset; + pos = gsubTable+4; + scriptList = getU16BE(pos,&parsedOk); + pos += 2; + featureList = getU16BE(pos,&parsedOk); + pos += 2; + llist = getU16BE(pos,&parsedOk); + + gsubLookupList = llist+gsubTable; /* change to offset from top of file */ + /* read script list table */ + pos = gsubTable+scriptList; + scriptCount = getU16BE(pos,&parsedOk); + pos += 2; + /* find script */ + for (i = 0;i < scriptCount;i++) { + tag = getU32BE(pos,&parsedOk); + pos += 4; + scriptTable = getU16BE(pos,&parsedOk); + pos += 2; + if (tag == scriptTag) { + /* found */ + break; + } + } + if (i >= scriptCount) { + /* not found */ + return 0; + } + + /* read script table */ + /* use default language system */ + pos = gsubTable+scriptList+scriptTable; + langSys = getU16BE(pos,&parsedOk);/* default language system */ + + /* read LangSys table */ + if (langSys == 0) { + /* no ldefault LangSys */ + return 0; + } + + pos = gsubTable+scriptList+scriptTable+langSys+2; + featureIndex = getU16BE(pos,&parsedOk); /* ReqFeatureIndex */ + pos += 2; + + if (featureIndex != 0xffff) { + Guint tpos; + /* read feature record */ + tpos = gsubTable+featureList; + featureCount = getU16BE(tpos,&parsedOk); + tpos = gsubTable+featureList+2+featureIndex*(4+2); + tag = getU32BE(tpos,&parsedOk); + tpos += 4; + if (tag == vrt2Tag) { + /* vrt2 is preferred, overwrite vert */ + ftable = getU16BE(tpos,&parsedOk); + /* convert to offset from file top */ + gsubFeatureTable = ftable+gsubTable+featureList; + return 0; + } else if (tag == vertTag) { + ftable = getU16BE(tpos,&parsedOk); + } + } + featureCount = getU16BE(pos,&parsedOk); + pos += 2; + /* find 'vrt2' or 'vert' feature */ + for (i = 0;i < featureCount;i++) { + Guint oldPos; + + featureIndex = getU16BE(pos,&parsedOk); + pos += 2; + oldPos = pos; /* save position */ + /* read feature record */ + pos = gsubTable+featureList+2+featureIndex*(4+2); + tag = getU32BE(pos,&parsedOk); + pos += 4; + if (tag == vrt2Tag) { + /* vrt2 is preferred, overwrite vert */ + ftable = getU16BE(pos,&parsedOk); + break; + } else if (ftable == 0 && tag == vertTag) { + ftable = getU16BE(pos,&parsedOk); + } + pos = oldPos; /* restore old position */ + } + if (ftable == 0) { + /* vert nor vrt2 are not found */ + return 0; + } + /* convert to offset from file top */ + gsubFeatureTable = ftable+gsubTable+featureList; + return 0; +} + +Guint FoFiTrueType::doMapToVertGID(Guint orgGID) +{ + Guint lookupCount; + Guint lookupListIndex; + Guint i; + Guint gid = 0; + Guint pos; + + pos = gsubFeatureTable+2; + lookupCount = getU16BE(pos,&parsedOk); + pos += 2; + for (i = 0;i < lookupCount;i++) { + lookupListIndex = getU16BE(pos,&parsedOk); + pos += 2; + if ((gid = scanLookupList(lookupListIndex,orgGID)) != 0) { + break; + } + } + return gid; +} + +Guint FoFiTrueType::mapToVertGID(Guint orgGID) +{ + Guint mapped; + + if (gsubFeatureTable == 0) return orgGID; + if ((mapped = doMapToVertGID(orgGID)) != 0) { + return mapped; + } + return orgGID; +} + +Guint FoFiTrueType::scanLookupList(Guint listIndex, Guint orgGID) +{ + Guint lookupTable; + Guint subTableCount; + Guint subTable; + Guint i; + Guint gid = 0; + Guint pos; + + if (gsubLookupList == 0) return 0; /* no lookup list */ + pos = gsubLookupList+2+listIndex*2; + lookupTable = getU16BE(pos,&parsedOk); + /* read lookup table */ + pos = gsubLookupList+lookupTable+4; + subTableCount = getU16BE(pos,&parsedOk); + pos += 2;; + for (i = 0;i < subTableCount;i++) { + subTable = getU16BE(pos,&parsedOk); + pos += 2; + if ((gid = scanLookupSubTable(gsubLookupList+lookupTable+subTable,orgGID)) + != 0) break; + } + return gid; +} + +Guint FoFiTrueType::scanLookupSubTable(Guint subTable, Guint orgGID) +{ + Guint format; + Guint coverage; + int delta; + int glyphCount; + Guint substitute; + Guint gid = 0; + int coverageIndex; + int pos; + + pos = subTable; + format = getU16BE(pos,&parsedOk); + pos += 2; + coverage = getU16BE(pos,&parsedOk); + pos += 2; + if ((coverageIndex = + checkGIDInCoverage(subTable+coverage,orgGID)) >= 0) { + switch (format) { + case 1: + /* format 1 */ + delta = getS16BE(pos,&parsedOk); + pos += 2; + gid = orgGID+delta; + break; + case 2: + /* format 2 */ + glyphCount = getS16BE(pos,&parsedOk); + pos += 2; + if (glyphCount > coverageIndex) { + pos += coverageIndex*2; + substitute = getU16BE(pos,&parsedOk); + gid = substitute; + } + break; + default: + /* unknown format */ + break; + } + } + return gid; +} + +int FoFiTrueType::checkGIDInCoverage(Guint coverage, Guint orgGID) +{ + int index = -1; + Guint format; + Guint count; + Guint i; + Guint pos; + + pos = coverage; + format = getU16BE(pos,&parsedOk); + pos += 2; + switch (format) { + case 1: + count = getU16BE(pos,&parsedOk); + pos += 2; + for (i = 0;i < count;i++) { + Guint gid; + + gid = getU16BE(pos,&parsedOk); + pos += 2; + if (gid == orgGID) { + /* found */ + index = i; + break; + } else if (gid > orgGID) { + /* not found */ + break; + } + } + break; + case 2: + count = getU16BE(pos,&parsedOk); + pos += 2; + for (i = 0;i < count;i++) { + Guint startGID, endGID; + Guint startIndex; + + startGID = getU16BE(pos,&parsedOk); + pos += 2; + endGID = getU16BE(pos,&parsedOk); + pos += 2; + startIndex = getU16BE(pos,&parsedOk); + pos += 2; + if (startGID <= orgGID && orgGID <= endGID) { + /* found */ + index = startIndex+orgGID-startGID; + break; + } else if (orgGID <= endGID) { + /* not found */ + break; + } + } + break; + default: + break; + } + return index; +} + diff --git a/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiTrueType.h b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiTrueType.h new file mode 100644 index 00000000000..4ba9b1fe924 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiTrueType.h @@ -0,0 +1,202 @@ +//======================================================================== +// +// FoFiTrueType.h +// +// Copyright 1999-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> +// Copyright (C) 2007 Koji Otani <sho@bbr.jp> +// Copyright (C) 2011 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef FOFITRUETYPE_H +#define FOFITRUETYPE_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "stddef.h" +#include "goo/gtypes.h" +#include "FoFiBase.h" + +class GooString; +class GooHash; +struct TrueTypeTable; +struct TrueTypeCmap; + +//------------------------------------------------------------------------ +// FoFiTrueType +//------------------------------------------------------------------------ + +class FoFiTrueType: public FoFiBase { +public: + + // Create a FoFiTrueType object from a memory buffer. + static FoFiTrueType *make(char *fileA, int lenA, int faceIndexA=0); + + // Create a FoFiTrueType object from a file on disk. + static FoFiTrueType *load(char *fileName, int faceIndexA=0); + + virtual ~FoFiTrueType(); + + // Returns true if this an OpenType font containing CFF data, false + // if it's a TrueType font (or OpenType font with TrueType data). + GBool isOpenTypeCFF() { return openTypeCFF; } + + // Return the number of cmaps defined by this font. + int getNumCmaps(); + + // Return the platform ID of the <i>th cmap. + int getCmapPlatform(int i); + + // Return the encoding ID of the <i>th cmap. + int getCmapEncoding(int i); + + // Return the index of the cmap for <platform>, <encoding>. Returns + // -1 if there is no corresponding cmap. + int findCmap(int platform, int encoding); + + // Return the GID corresponding to <c> according to the <i>th cmap. + Gushort mapCodeToGID(int i, Guint c); + + // map gid to vertical glyph gid if exist. + // if not exist return original gid + Guint mapToVertGID(Guint orgGID); + + // Returns the GID corresponding to <name> according to the post + // table. Returns 0 if there is no mapping for <name> or if the + // font does not have a post table. + int mapNameToGID(char *name); + + // Return the mapping from CIDs to GIDs, and return the number of + // CIDs in *<nCIDs>. This is only useful for CID fonts. (Only + // useful for OpenType CFF fonts.) + Gushort *getCIDToGIDMap(int *nCIDs); + + // Returns the least restrictive embedding licensing right (as + // defined by the TrueType spec): + // * 4: OS/2 table is missing or invalid + // * 3: installable embedding + // * 2: editable embedding + // * 1: preview & print embedding + // * 0: restricted license embedding + int getEmbeddingRights(); + + // Convert to a Type 42 font, suitable for embedding in a PostScript + // file. <psName> will be used as the PostScript font name (so we + // don't need to depend on the 'name' table in the font). The + // <encoding> array specifies the mapping from char codes to names. + // If <encoding> is NULL, the encoding is unknown or undefined. The + // <codeToGID> array specifies the mapping from char codes to GIDs. + // (Not useful for OpenType CFF fonts.) + void convertToType42(char *psName, char **encoding, + Gushort *codeToGID, + FoFiOutputFunc outputFunc, void *outputStream); + + // Convert to a Type 1 font, suitable for embedding in a PostScript + // file. This is only useful with 8-bit fonts. If <newEncoding> is + // not NULL, it will be used in place of the encoding in the Type 1C + // font. If <ascii> is true the eexec section will be hex-encoded, + // otherwise it will be left as binary data. If <psName> is + // non-NULL, it will be used as the PostScript font name. (Only + // useful for OpenType CFF fonts.) + void convertToType1(char *psName, char **newEncoding, GBool ascii, + FoFiOutputFunc outputFunc, void *outputStream); + + // Convert to a Type 2 CIDFont, suitable for embedding in a + // PostScript file. <psName> will be used as the PostScript font + // name (so we don't need to depend on the 'name' table in the + // font). The <cidMap> array maps CIDs to GIDs; it has <nCIDs> + // entries. (Not useful for OpenType CFF fonts.) + void convertToCIDType2(char *psName, Gushort *cidMap, int nCIDs, + GBool needVerticalMetrics, + FoFiOutputFunc outputFunc, void *outputStream); + + // Convert to a Type 0 CIDFont, suitable for embedding in a + // PostScript file. <psName> will be used as the PostScript font + // name. (Only useful for OpenType CFF fonts.) + void convertToCIDType0(char *psName, + FoFiOutputFunc outputFunc, void *outputStream); + + // Convert to a Type 0 (but non-CID) composite font, suitable for + // embedding in a PostScript file. <psName> will be used as the + // PostScript font name (so we don't need to depend on the 'name' + // table in the font). The <cidMap> array maps CIDs to GIDs; it has + // <nCIDs> entries. (Not useful for OpenType CFF fonts.) + void convertToType0(char *psName, Gushort *cidMap, int nCIDs, + GBool needVerticalMetrics, + FoFiOutputFunc outputFunc, void *outputStream); + + // Convert to a Type 0 (but non-CID) composite font, suitable for + // embedding in a PostScript file. <psName> will be used as the + // PostScript font name. (Only useful for OpenType CFF fonts.) + void convertToType0(char *psName, + FoFiOutputFunc outputFunc, void *outputStream); + + // Write a clean TTF file, filling in missing tables and correcting + // various other errors. If <name> is non-NULL, the font is renamed + // to <name>. If <codeToGID> is non-NULL, the font is re-encoded, + // using a Windows Unicode cmap. If <name> is NULL and the font is + // complete and correct, it will be written unmodified. (Not useful + // for OpenType CFF fonts.) + void writeTTF(FoFiOutputFunc outputFunc, void *outputStream, + char *name = NULL, Gushort *codeToGID = NULL); + + int setupGSUB(const char *tagName); +private: + + FoFiTrueType(char *fileA, int lenA, GBool freeFileDataA, int faceIndexA); + void cvtEncoding(char **encoding, + FoFiOutputFunc outputFunc, + void *outputStream); + void cvtCharStrings(char **encoding, + Gushort *codeToGID, + FoFiOutputFunc outputFunc, + void *outputStream); + void cvtSfnts(FoFiOutputFunc outputFunc, + void *outputStream, GooString *name, + GBool needVerticalMetrics); + void dumpString(Guchar *s, int length, + FoFiOutputFunc outputFunc, + void *outputStream); + Guint computeTableChecksum(Guchar *data, int length); + void parse(); + void readPostTable(); + int seekTable(char *tag); + Guint charToTag(const char *tagName); + Guint doMapToVertGID(Guint orgGID); + Guint scanLookupList(Guint listIndex, Guint orgGID); + Guint scanLookupSubTable(Guint subTable, Guint orgGID); + int checkGIDInCoverage(Guint coverage, Guint orgGID); + + TrueTypeTable *tables; + int nTables; + TrueTypeCmap *cmaps; + int nCmaps; + int nGlyphs; + int locaFmt; + int bbox[4]; + GooHash *nameToGID; + GBool openTypeCFF; + + GBool parsedOk; + int faceIndex; + Guint gsubFeatureTable; + Guint gsubLookupList; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1.cc b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1.cc new file mode 100644 index 00000000000..3fe7f4f7169 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1.cc @@ -0,0 +1,290 @@ +//======================================================================== +// +// FoFiType1.cc +// +// Copyright 1999-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005, 2008, 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2010 Jakub Wilk <ubanus@users.sf.net> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include <string.h> +#include "goo/gmem.h" +#include "goo/GooLikely.h" +#include "FoFiEncodings.h" +#include "FoFiType1.h" +#include "poppler/Error.h" + +//------------------------------------------------------------------------ +// FoFiType1 +//------------------------------------------------------------------------ + +FoFiType1 *FoFiType1::make(char *fileA, int lenA) { + return new FoFiType1(fileA, lenA, gFalse); +} + +FoFiType1 *FoFiType1::load(char *fileName) { + char *fileA; + int lenA; + + if (!(fileA = FoFiBase::readFile(fileName, &lenA))) { + return NULL; + } + return new FoFiType1(fileA, lenA, gTrue); +} + +FoFiType1::FoFiType1(char *fileA, int lenA, GBool freeFileDataA): + FoFiBase(fileA, lenA, freeFileDataA) +{ + name = NULL; + encoding = NULL; + parsed = gFalse; +} + +FoFiType1::~FoFiType1() { + int i; + + if (name) { + gfree(name); + } + if (encoding && encoding != fofiType1StandardEncoding) { + for (i = 0; i < 256; ++i) { + gfree(encoding[i]); + } + gfree(encoding); + } +} + +char *FoFiType1::getName() { + if (!parsed) { + parse(); + } + return name; +} + +char **FoFiType1::getEncoding() { + if (!parsed) { + parse(); + } + return encoding; +} + +void FoFiType1::writeEncoded(char **newEncoding, + FoFiOutputFunc outputFunc, void *outputStream) { + char buf[512]; + char *line, *line2, *p; + int i; + + // copy everything up to the encoding + for (line = (char *)file; + line && strncmp(line, "/Encoding", 9); + line = getNextLine(line)) ; + if (!line) { + // no encoding - just copy the whole font file + (*outputFunc)(outputStream, (char *)file, len); + return; + } + (*outputFunc)(outputStream, (char *)file, line - (char *)file); + + // write the new encoding + (*outputFunc)(outputStream, "/Encoding 256 array\n", 20); + (*outputFunc)(outputStream, + "0 1 255 {1 index exch /.notdef put} for\n", 40); + for (i = 0; i < 256; ++i) { + if (newEncoding[i]) { + sprintf(buf, "dup %d /%s put\n", i, newEncoding[i]); + (*outputFunc)(outputStream, buf, strlen(buf)); + } + } + (*outputFunc)(outputStream, "readonly def\n", 13); + + // find the end of the encoding data + //~ this ought to parse PostScript tokens + if (!strncmp(line, "/Encoding StandardEncoding def", 30)) { + line = getNextLine(line); + } else { + // skip "/Encoding" + one whitespace char, + // then look for 'def' preceded by PostScript whitespace + p = line + 10; + line = NULL; + for (; p < (char *)file + len; ++p) { + if ((*p == ' ' || *p == '\t' || *p == '\x0a' || + *p == '\x0d' || *p == '\x0c' || *p == '\0') && + p + 4 <= (char *)file + len && + !strncmp(p + 1, "def", 3)) { + line = p + 4; + break; + } + } + } + + // some fonts have two /Encoding entries in their dictionary, so we + // check for a second one here + if (line) { + for (line2 = line, i = 0; + i < 20 && line2 && strncmp(line2, "/Encoding", 9); + line2 = getNextLine(line2), ++i) ; + if (i < 20 && line2) { + (*outputFunc)(outputStream, line, line2 - line); + if (!strncmp(line2, "/Encoding StandardEncoding def", 30)) { + line = getNextLine(line2); + } else { + // skip "/Encoding" + one whitespace char, + // then look for 'def' preceded by PostScript whitespace + p = line2 + 10; + line = NULL; + for (; p < (char *)file + len; ++p) { + if ((*p == ' ' || *p == '\t' || *p == '\x0a' || + *p == '\x0d' || *p == '\x0c' || *p == '\0') && + p + 4 <= (char *)file + len && + !strncmp(p + 1, "def", 3)) { + line = p + 4; + break; + } + } + } + } + + // copy everything after the encoding + if (line) { + (*outputFunc)(outputStream, line, ((char *)file + len) - line); + } + } +} + +char *FoFiType1::getNextLine(char *line) { + while (line < (char *)file + len && *line != '\x0a' && *line != '\x0d') { + ++line; + } + if (line < (char *)file + len && *line == '\x0d') { + ++line; + } + if (line < (char *)file + len && *line == '\x0a') { + ++line; + } + if (line >= (char *)file + len) { + return NULL; + } + return line; +} + +void FoFiType1::parse() { + char *line, *line1, *p, *p2; + char buf[256]; + char c; + int n, code, i, j; + char *tokptr; + + for (i = 1, line = (char *)file; + i <= 100 && line && (!name || !encoding); + ++i) { + + // get font name + if (!name && !strncmp(line, "/FontName", 9)) { + strncpy(buf, line, 255); + buf[255] = '\0'; + if ((p = strchr(buf+9, '/')) && + (p = strtok_r(p+1, " \t\n\r", &tokptr))) { + name = copyString(p); + } + line = getNextLine(line); + + // get encoding + } else if (!encoding && + !strncmp(line, "/Encoding StandardEncoding def", 30)) { + encoding = fofiType1StandardEncoding; + } else if (!encoding && + !strncmp(line, "/Encoding 256 array", 19)) { + encoding = (char **)gmallocn(256, sizeof(char *)); + for (j = 0; j < 256; ++j) { + encoding[j] = NULL; + } + for (j = 0, line = getNextLine(line); + j < 300 && line && (line1 = getNextLine(line)); + ++j, line = line1) { + if ((n = line1 - line) > 255) { + error(-1, "FoFiType1::parse a line has more than 255 characters, we don't support this"); + n = 255; + } + strncpy(buf, line, n); + buf[n] = '\0'; + for (p = buf; *p == ' ' || *p == '\t'; ++p) ; + if (!strncmp(p, "dup", 3)) { + for (p += 3; *p == ' ' || *p == '\t'; ++p) ; + for (p2 = p; *p2 >= '0' && *p2 <= '9'; ++p2) ; + if (*p2) { + c = *p2; // store it so we can recover it after atoi + *p2 = '\0'; // terminate p so atoi works + code = atoi(p); + *p2 = c; + if (code == 8 && *p2 == '#') { + code = 0; + for (++p2; *p2 >= '0' && *p2 <= '7'; ++p2) { + code = code * 8 + (*p2 - '0'); + } + } + if (likely(code < 256 && code >= 0)) { + for (p = p2; *p == ' ' || *p == '\t'; ++p) ; + if (*p == '/') { + ++p; + for (p2 = p; *p2 && *p2 != ' ' && *p2 != '\t'; ++p2) ; + c = *p2; // store it so we can recover it after copyString + *p2 = '\0'; // terminate p so copyString works + encoding[code] = copyString(p); + *p2 = c; + p = p2; + for (; *p == ' ' || *p == '\t'; ++p); // eat spaces between string and put + if (!strncmp(p, "put", 3)) { + // eat put and spaces and newlines after put + for (p += 3; *p == ' ' || *p == '\t' || *p == '\n' || *p == '\r'; ++p); + if (*p) + { + // there is still something after the definition + // there might be another definition in this line + // so move line1 to the end of our parsing + // so we start in the potential next definition in the next loop + line1 = &line[p - buf]; + } + } else { + error(-1, "FoFiType1::parse no put after dup"); + } + } + } + } + } else { + if (strtok_r(buf, " \t", &tokptr) && + (p = strtok_r(NULL, " \t\n\r", &tokptr)) && !strcmp(p, "def")) { + break; + } + } + } + //~ check for getinterval/putinterval junk + + } else { + line = getNextLine(line); + } + } + + parsed = gTrue; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1.h b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1.h new file mode 100644 index 00000000000..85e67b1c82b --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1.h @@ -0,0 +1,57 @@ +//======================================================================== +// +// FoFiType1.h +// +// Copyright 1999-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef FOFITYPE1_H +#define FOFITYPE1_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" +#include "FoFiBase.h" + +//------------------------------------------------------------------------ +// FoFiType1 +//------------------------------------------------------------------------ + +class FoFiType1: public FoFiBase { +public: + + // Create a FoFiType1 object from a memory buffer. + static FoFiType1 *make(char *fileA, int lenA); + + // Create a FoFiType1 object from a file on disk. + static FoFiType1 *load(char *fileName); + + virtual ~FoFiType1(); + + // Return the font name. + char *getName(); + + // Return the encoding, as an array of 256 names (any of which may + // be NULL). + char **getEncoding(); + + // Write a version of the Type 1 font file with a new encoding. + void writeEncoded(char **newEncoding, + FoFiOutputFunc outputFunc, void *outputStream); + +private: + + FoFiType1(char *fileA, int lenA, GBool freeFileDataA); + + char *getNextLine(char *line); + void parse(); + + char *name; + char **encoding; + GBool parsed; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1C.cc b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1C.cc new file mode 100644 index 00000000000..9c5b10cf433 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1C.cc @@ -0,0 +1,2620 @@ +//======================================================================== +// +// FoFiType1C.cc +// +// Copyright 1999-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2009, 2010 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include <string.h> +#include <math.h> +#include "goo/gmem.h" +#include "goo/gstrtod.h" +#include "goo/GooString.h" +#include "FoFiEncodings.h" +#include "FoFiType1C.h" + +//------------------------------------------------------------------------ + +static char hexChars[17] = "0123456789ABCDEF"; + +//------------------------------------------------------------------------ +// FoFiType1C +//------------------------------------------------------------------------ + +FoFiType1C *FoFiType1C::make(char *fileA, int lenA) { + FoFiType1C *ff; + + ff = new FoFiType1C(fileA, lenA, gFalse); + if (!ff->parse()) { + delete ff; + return NULL; + } + return ff; +} + +FoFiType1C *FoFiType1C::load(char *fileName) { + FoFiType1C *ff; + char *fileA; + int lenA; + + if (!(fileA = FoFiBase::readFile(fileName, &lenA))) { + return NULL; + } + ff = new FoFiType1C(fileA, lenA, gTrue); + if (!ff->parse()) { + delete ff; + return NULL; + } + return ff; +} + +FoFiType1C::FoFiType1C(char *fileA, int lenA, GBool freeFileDataA): + FoFiBase(fileA, lenA, freeFileDataA) +{ + name = NULL; + encoding = NULL; + privateDicts = NULL; + fdSelect = NULL; + charset = NULL; +} + +FoFiType1C::~FoFiType1C() { + int i; + + if (name) { + delete name; + } + if (encoding && + encoding != fofiType1StandardEncoding && + encoding != fofiType1ExpertEncoding) { + for (i = 0; i < 256; ++i) { + gfree(encoding[i]); + } + gfree(encoding); + } + if (privateDicts) { + gfree(privateDicts); + } + if (fdSelect) { + gfree(fdSelect); + } + if (charset && + charset != fofiType1CISOAdobeCharset && + charset != fofiType1CExpertCharset && + charset != fofiType1CExpertSubsetCharset) { + gfree(charset); + } +} + +char *FoFiType1C::getName() { + return name ? name->getCString() : (char *)NULL; +} + +char **FoFiType1C::getEncoding() { + return encoding; +} + +Gushort *FoFiType1C::getCIDToGIDMap(int *nCIDs) { + Gushort *map; + int n, i; + + // a CID font's top dict has ROS as the first operator + if (topDict.firstOp != 0x0c1e) { + *nCIDs = 0; + return NULL; + } + + // in a CID font, the charset data is the GID-to-CID mapping, so all + // we have to do is reverse it + n = 0; + for (i = 0; i < nGlyphs; ++i) { + if (charset[i] > n) { + n = charset[i]; + } + } + ++n; + map = (Gushort *)gmallocn(n, sizeof(Gushort)); + memset(map, 0, n * sizeof(Gushort)); + for (i = 0; i < nGlyphs; ++i) { + map[charset[i]] = i; + } + *nCIDs = n; + return map; +} + +void FoFiType1C::convertToType1(char *psName, char **newEncoding, GBool ascii, + FoFiOutputFunc outputFunc, + void *outputStream) { + int psNameLen; + Type1CEexecBuf eb; + Type1CIndex subrIdx; + Type1CIndexVal val; + GooString *buf; + char buf2[256]; + char **enc; + GBool ok; + int i; + + if (psName) { + psNameLen = strlen(psName); + } else { + psName = name->getCString(); + psNameLen = name->getLength(); + } + + // write header and font dictionary, up to encoding + ok = gTrue; + (*outputFunc)(outputStream, "%!FontType1-1.0: ", 17); + (*outputFunc)(outputStream, psName, psNameLen); + if (topDict.versionSID != 0) { + getString(topDict.versionSID, buf2, &ok); + (*outputFunc)(outputStream, buf2, strlen(buf2)); + } + (*outputFunc)(outputStream, "\n", 1); + // the dictionary needs room for 12 entries: the following 9, plus + // Private and CharStrings (in the eexec section) and FID (which is + // added by definefont) + (*outputFunc)(outputStream, "12 dict begin\n", 14); + (*outputFunc)(outputStream, "/FontInfo 10 dict dup begin\n", 28); + if (topDict.versionSID != 0) { + (*outputFunc)(outputStream, "/version (", 10); + (*outputFunc)(outputStream, buf2, strlen(buf2)); + (*outputFunc)(outputStream, ") readonly def\n", 15); + } + if (topDict.noticeSID != 0) { + getString(topDict.noticeSID, buf2, &ok); + (*outputFunc)(outputStream, "/Notice (", 9); + (*outputFunc)(outputStream, buf2, strlen(buf2)); + (*outputFunc)(outputStream, ") readonly def\n", 15); + } + if (topDict.copyrightSID != 0) { + getString(topDict.copyrightSID, buf2, &ok); + (*outputFunc)(outputStream, "/Copyright (", 12); + (*outputFunc)(outputStream, buf2, strlen(buf2)); + (*outputFunc)(outputStream, ") readonly def\n", 15); + } + if (topDict.fullNameSID != 0) { + getString(topDict.fullNameSID, buf2, &ok); + (*outputFunc)(outputStream, "/FullName (", 11); + (*outputFunc)(outputStream, buf2, strlen(buf2)); + (*outputFunc)(outputStream, ") readonly def\n", 15); + } + if (topDict.familyNameSID != 0) { + getString(topDict.familyNameSID, buf2, &ok); + (*outputFunc)(outputStream, "/FamilyName (", 13); + (*outputFunc)(outputStream, buf2, strlen(buf2)); + (*outputFunc)(outputStream, ") readonly def\n", 15); + } + if (topDict.weightSID != 0) { + getString(topDict.weightSID, buf2, &ok); + (*outputFunc)(outputStream, "/Weight (", 9); + (*outputFunc)(outputStream, buf2, strlen(buf2)); + (*outputFunc)(outputStream, ") readonly def\n", 15); + } + if (topDict.isFixedPitch) { + (*outputFunc)(outputStream, "/isFixedPitch true def\n", 23); + } else { + (*outputFunc)(outputStream, "/isFixedPitch false def\n", 24); + } + buf = GooString::format("/ItalicAngle {0:.4g} def\n", topDict.italicAngle); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + buf = GooString::format("/UnderlinePosition {0:.4g} def\n", + topDict.underlinePosition); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + buf = GooString::format("/UnderlineThickness {0:.4g} def\n", + topDict.underlineThickness); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, "end readonly def\n", 17); + (*outputFunc)(outputStream, "/FontName /", 11); + (*outputFunc)(outputStream, psName, psNameLen); + (*outputFunc)(outputStream, " def\n", 5); + buf = GooString::format("/PaintType {0:d} def\n", topDict.paintType); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, "/FontType 1 def\n", 16); + buf = GooString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] readonly def\n", + topDict.fontMatrix[0], topDict.fontMatrix[1], + topDict.fontMatrix[2], topDict.fontMatrix[3], + topDict.fontMatrix[4], topDict.fontMatrix[5]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + buf = GooString::format("/FontBBox [{0:.4g} {1:.4g} {2:.4g} {3:.4g}] readonly def\n", + topDict.fontBBox[0], topDict.fontBBox[1], + topDict.fontBBox[2], topDict.fontBBox[3]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + buf = GooString::format("/StrokeWidth {0:.4g} def\n", topDict.strokeWidth); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + if (topDict.uniqueID != 0) { + buf = GooString::format("/UniqueID {0:d} def\n", topDict.uniqueID); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + + // write the encoding + (*outputFunc)(outputStream, "/Encoding ", 10); + if (!newEncoding && encoding == fofiType1StandardEncoding) { + (*outputFunc)(outputStream, "StandardEncoding def\n", 21); + } else { + (*outputFunc)(outputStream, "256 array\n", 10); + (*outputFunc)(outputStream, + "0 1 255 {1 index exch /.notdef put} for\n", 40); + enc = newEncoding ? newEncoding : encoding; + for (i = 0; i < 256; ++i) { + if (enc[i]) { + buf = GooString::format("dup {0:d} /{1:s} put\n", i, enc[i]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + } + (*outputFunc)(outputStream, "readonly def\n", 13); + } + (*outputFunc)(outputStream, "currentdict end\n", 16); + + // start the binary section + (*outputFunc)(outputStream, "currentfile eexec\n", 18); + eb.outputFunc = outputFunc; + eb.outputStream = outputStream; + eb.ascii = ascii; + eb.r1 = 55665; + eb.line = 0; + + // write the private dictionary + eexecWrite(&eb, "\x83\xca\x73\xd5"); + eexecWrite(&eb, "dup /Private 32 dict dup begin\n"); + eexecWrite(&eb, "/RD {string currentfile exch readstring pop}" + " executeonly def\n"); + eexecWrite(&eb, "/ND {noaccess def} executeonly def\n"); + eexecWrite(&eb, "/NP {noaccess put} executeonly def\n"); + eexecWrite(&eb, "/MinFeature {16 16} def\n"); + eexecWrite(&eb, "/password 5839 def\n"); + if (privateDicts[0].nBlueValues) { + eexecWrite(&eb, "/BlueValues ["); + for (i = 0; i < privateDicts[0].nBlueValues; ++i) { + buf = GooString::format("{0:s}{1:d}", + i > 0 ? " " : "", privateDicts[0].blueValues[i]); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + eexecWrite(&eb, "] def\n"); + } + if (privateDicts[0].nOtherBlues) { + eexecWrite(&eb, "/OtherBlues ["); + for (i = 0; i < privateDicts[0].nOtherBlues; ++i) { + buf = GooString::format("{0:s}{1:d}", + i > 0 ? " " : "", privateDicts[0].otherBlues[i]); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + eexecWrite(&eb, "] def\n"); + } + if (privateDicts[0].nFamilyBlues) { + eexecWrite(&eb, "/FamilyBlues ["); + for (i = 0; i < privateDicts[0].nFamilyBlues; ++i) { + buf = GooString::format("{0:s}{1:d}", + i > 0 ? " " : "", privateDicts[0].familyBlues[i]); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + eexecWrite(&eb, "] def\n"); + } + if (privateDicts[0].nFamilyOtherBlues) { + eexecWrite(&eb, "/FamilyOtherBlues ["); + for (i = 0; i < privateDicts[0].nFamilyOtherBlues; ++i) { + buf = GooString::format("{0:s}{1:d}", i > 0 ? " " : "", + privateDicts[0].familyOtherBlues[i]); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + eexecWrite(&eb, "] def\n"); + } + if (privateDicts[0].blueScale != 0.039625) { + buf = GooString::format("/BlueScale {0:.4g} def\n", + privateDicts[0].blueScale); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[0].blueShift != 7) { + buf = GooString::format("/BlueShift {0:d} def\n", privateDicts[0].blueShift); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[0].blueFuzz != 1) { + buf = GooString::format("/BlueFuzz {0:d} def\n", privateDicts[0].blueFuzz); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[0].hasStdHW) { + buf = GooString::format("/StdHW [{0:.4g}] def\n", privateDicts[0].stdHW); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[0].hasStdVW) { + buf = GooString::format("/StdVW [{0:.4g}] def\n", privateDicts[0].stdVW); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[0].nStemSnapH) { + eexecWrite(&eb, "/StemSnapH ["); + for (i = 0; i < privateDicts[0].nStemSnapH; ++i) { + buf = GooString::format("{0:s}{1:.4g}", + i > 0 ? " " : "", privateDicts[0].stemSnapH[i]); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + eexecWrite(&eb, "] def\n"); + } + if (privateDicts[0].nStemSnapV) { + eexecWrite(&eb, "/StemSnapV ["); + for (i = 0; i < privateDicts[0].nStemSnapV; ++i) { + buf = GooString::format("{0:s}{1:.4g}", + i > 0 ? " " : "", privateDicts[0].stemSnapV[i]); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + eexecWrite(&eb, "] def\n"); + } + if (privateDicts[0].hasForceBold) { + buf = GooString::format("/ForceBold {0:s} def\n", + privateDicts[0].forceBold ? "true" : "false"); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[0].forceBoldThreshold != 0) { + buf = GooString::format("/ForceBoldThreshold {0:.4g} def\n", + privateDicts[0].forceBoldThreshold); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[0].languageGroup != 0) { + buf = GooString::format("/LanguageGroup {0:d} def\n", + privateDicts[0].languageGroup); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[0].expansionFactor != 0.06) { + buf = GooString::format("/ExpansionFactor {0:.4g} def\n", + privateDicts[0].expansionFactor); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + + // set up subroutines + ok = gTrue; + getIndex(privateDicts[0].subrsOffset, &subrIdx, &ok); + if (!ok) { + subrIdx.pos = -1; + } + + // write the CharStrings + buf = GooString::format("2 index /CharStrings {0:d} dict dup begin\n", + nGlyphs); + eexecWrite(&eb, buf->getCString()); + delete buf; + for (i = 0; i < nGlyphs; ++i) { + ok = gTrue; + getIndexVal(&charStringsIdx, i, &val, &ok); + if (ok) { + getString(charset[i], buf2, &ok); + if (ok) { + eexecCvtGlyph(&eb, buf2, val.pos, val.len, &subrIdx, &privateDicts[0]); + } + } + } + eexecWrite(&eb, "end\n"); + eexecWrite(&eb, "end\n"); + eexecWrite(&eb, "readonly put\n"); + eexecWrite(&eb, "noaccess put\n"); + eexecWrite(&eb, "dup /FontName get exch definefont pop\n"); + eexecWrite(&eb, "mark currentfile closefile\n"); + + // trailer + if (ascii && eb.line > 0) { + (*outputFunc)(outputStream, "\n", 1); + } + for (i = 0; i < 8; ++i) { + (*outputFunc)(outputStream, "0000000000000000000000000000000000000000000000000000000000000000\n", 65); + } + (*outputFunc)(outputStream, "cleartomark\n", 12); +} + +void FoFiType1C::convertToCIDType0(char *psName, + FoFiOutputFunc outputFunc, + void *outputStream) { + int *cidMap; + GooString *charStrings; + int *charStringOffsets; + Type1CIndex subrIdx; + Type1CIndexVal val; + int nCIDs, gdBytes; + GooString *buf; + char buf2[256]; + GBool ok; + int gid, offset, n, i, j, k; + + // compute the CID count and build the CID-to-GID mapping + nCIDs = 0; + for (i = 0; i < nGlyphs; ++i) { + if (charset[i] >= nCIDs) { + nCIDs = charset[i] + 1; + } + } + cidMap = (int *)gmallocn(nCIDs, sizeof(int)); + for (i = 0; i < nCIDs; ++i) { + cidMap[i] = -1; + } + for (i = 0; i < nGlyphs; ++i) { + cidMap[charset[i]] = i; + } + + // build the charstrings + charStrings = new GooString(); + charStringOffsets = (int *)gmallocn(nCIDs + 1, sizeof(int)); + for (i = 0; i < nCIDs; ++i) { + charStringOffsets[i] = charStrings->getLength(); + if ((gid = cidMap[i]) >= 0) { + ok = gTrue; + getIndexVal(&charStringsIdx, gid, &val, &ok); + if (ok) { + getIndex(privateDicts[fdSelect[gid]].subrsOffset, &subrIdx, &ok); + if (!ok) { + subrIdx.pos = -1; + } + cvtGlyph(val.pos, val.len, charStrings, + &subrIdx, &privateDicts[fdSelect[gid]], gTrue); + } + } + } + charStringOffsets[nCIDs] = charStrings->getLength(); + + // compute gdBytes = number of bytes needed for charstring offsets + // (offset size needs to account for the charstring offset table, + // with a worst case of five bytes per entry, plus the charstrings + // themselves) + i = (nCIDs + 1) * 5 + charStrings->getLength(); + if (i < 0x100) { + gdBytes = 1; + } else if (i < 0x10000) { + gdBytes = 2; + } else if (i < 0x1000000) { + gdBytes = 3; + } else { + gdBytes = 4; + } + + // begin the font dictionary + (*outputFunc)(outputStream, "/CIDInit /ProcSet findresource begin\n", 37); + (*outputFunc)(outputStream, "20 dict begin\n", 14); + (*outputFunc)(outputStream, "/CIDFontName /", 14); + (*outputFunc)(outputStream, psName, strlen(psName)); + (*outputFunc)(outputStream, " def\n", 5); + (*outputFunc)(outputStream, "/CIDFontType 0 def\n", 19); + (*outputFunc)(outputStream, "/CIDSystemInfo 3 dict dup begin\n", 32); + if (topDict.registrySID > 0 && topDict.orderingSID > 0) { + ok = gTrue; + getString(topDict.registrySID, buf2, &ok); + if (ok) { + (*outputFunc)(outputStream, " /Registry (", 13); + (*outputFunc)(outputStream, buf2, strlen(buf2)); + (*outputFunc)(outputStream, ") def\n", 6); + } + ok = gTrue; + getString(topDict.orderingSID, buf2, &ok); + if (ok) { + (*outputFunc)(outputStream, " /Ordering (", 13); + (*outputFunc)(outputStream, buf2, strlen(buf2)); + (*outputFunc)(outputStream, ") def\n", 6); + } + } else { + (*outputFunc)(outputStream, " /Registry (Adobe) def\n", 24); + (*outputFunc)(outputStream, " /Ordering (Identity) def\n", 27); + } + buf = GooString::format(" /Supplement {0:d} def\n", topDict.supplement); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, "end def\n", 8); + if (topDict.hasFontMatrix) { + buf = GooString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n", + topDict.fontMatrix[0], topDict.fontMatrix[1], + topDict.fontMatrix[2], topDict.fontMatrix[3], + topDict.fontMatrix[4], topDict.fontMatrix[5]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } else if (privateDicts[0].hasFontMatrix) { + (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); + } else { + (*outputFunc)(outputStream, + "/FontMatrix [0.001 0 0 0.001 0 0] def\n", 38); + } + buf = GooString::format("/FontBBox [{0:.4g} {1:.4g} {2:.4g} {3:.4g}] def\n", + topDict.fontBBox[0], topDict.fontBBox[1], + topDict.fontBBox[2], topDict.fontBBox[3]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, "/FontInfo 1 dict dup begin\n", 27); + (*outputFunc)(outputStream, " /FSType 8 def\n", 16); + (*outputFunc)(outputStream, "end def\n", 8); + + // CIDFont-specific entries + buf = GooString::format("/CIDCount {0:d} def\n", nCIDs); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, "/FDBytes 1 def\n", 15); + buf = GooString::format("/GDBytes {0:d} def\n", gdBytes); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, "/CIDMapOffset 0 def\n", 20); + if (topDict.paintType != 0) { + buf = GooString::format("/PaintType {0:d} def\n", topDict.paintType); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + buf = GooString::format("/StrokeWidth {0:.4g} def\n", topDict.strokeWidth); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + + // FDArray entry + buf = GooString::format("/FDArray {0:d} array\n", nFDs); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + for (i = 0; i < nFDs; ++i) { + buf = GooString::format("dup {0:d} 10 dict begin\n", i); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, "/FontType 1 def\n", 16); + if (privateDicts[i].hasFontMatrix) { + buf = GooString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n", + privateDicts[i].fontMatrix[0], + privateDicts[i].fontMatrix[1], + privateDicts[i].fontMatrix[2], + privateDicts[i].fontMatrix[3], + privateDicts[i].fontMatrix[4], + privateDicts[i].fontMatrix[5]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } else { + (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); + } + buf = GooString::format("/PaintType {0:d} def\n", topDict.paintType); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, "/Private 32 dict begin\n", 23); + if (privateDicts[i].nBlueValues) { + (*outputFunc)(outputStream, "/BlueValues [", 13); + for (j = 0; j < privateDicts[i].nBlueValues; ++j) { + buf = GooString::format("{0:s}{1:d}", + j > 0 ? " " : "", privateDicts[i].blueValues[j]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "] def\n", 6); + } + if (privateDicts[i].nOtherBlues) { + (*outputFunc)(outputStream, "/OtherBlues [", 13); + for (j = 0; j < privateDicts[i].nOtherBlues; ++j) { + buf = GooString::format("{0:s}{1:d}", + j > 0 ? " " : "", privateDicts[i].otherBlues[j]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "] def\n", 6); + } + if (privateDicts[i].nFamilyBlues) { + (*outputFunc)(outputStream, "/FamilyBlues [", 14); + for (j = 0; j < privateDicts[i].nFamilyBlues; ++j) { + buf = GooString::format("{0:s}{1:d}", + j > 0 ? " " : "", + privateDicts[i].familyBlues[j]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "] def\n", 6); + } + if (privateDicts[i].nFamilyOtherBlues) { + (*outputFunc)(outputStream, "/FamilyOtherBlues [", 19); + for (j = 0; j < privateDicts[i].nFamilyOtherBlues; ++j) { + buf = GooString::format("{0:s}{1:d}", j > 0 ? " " : "", + privateDicts[i].familyOtherBlues[j]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "] def\n", 6); + } + if (privateDicts[i].blueScale != 0.039625) { + buf = GooString::format("/BlueScale {0:.4g} def\n", + privateDicts[i].blueScale); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + if (privateDicts[i].blueShift != 7) { + buf = GooString::format("/BlueShift {0:d} def\n", + privateDicts[i].blueShift); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + if (privateDicts[i].blueFuzz != 1) { + buf = GooString::format("/BlueFuzz {0:d} def\n", privateDicts[i].blueFuzz); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + if (privateDicts[i].hasStdHW) { + buf = GooString::format("/StdHW [{0:.4g}] def\n", privateDicts[i].stdHW); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + if (privateDicts[i].hasStdVW) { + buf = GooString::format("/StdVW [{0:.4g}] def\n", privateDicts[i].stdVW); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + if (privateDicts[i].nStemSnapH) { + (*outputFunc)(outputStream, "/StemSnapH [", 12); + for (j = 0; j < privateDicts[i].nStemSnapH; ++j) { + buf = GooString::format("{0:s}{1:.4g}", + j > 0 ? " " : "", privateDicts[i].stemSnapH[j]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "] def\n", 6); + } + if (privateDicts[i].nStemSnapV) { + (*outputFunc)(outputStream, "/StemSnapV [", 12); + for (j = 0; j < privateDicts[i].nStemSnapV; ++j) { + buf = GooString::format("{0:s}{1:.4g}", + j > 0 ? " " : "", privateDicts[i].stemSnapV[j]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "] def\n", 6); + } + if (privateDicts[i].hasForceBold) { + buf = GooString::format("/ForceBold {0:s} def\n", + privateDicts[i].forceBold ? "true" : "false"); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + if (privateDicts[i].forceBoldThreshold != 0) { + buf = GooString::format("/ForceBoldThreshold {0:.4g} def\n", + privateDicts[i].forceBoldThreshold); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + if (privateDicts[i].languageGroup != 0) { + buf = GooString::format("/LanguageGroup {0:d} def\n", + privateDicts[i].languageGroup); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + if (privateDicts[i].expansionFactor != 0.06) { + buf = GooString::format("/ExpansionFactor {0:.4g} def\n", + privateDicts[i].expansionFactor); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "currentdict end def\n", 20); + (*outputFunc)(outputStream, "currentdict end put\n", 20); + } + (*outputFunc)(outputStream, "def\n", 4); + + // start the binary section + offset = (nCIDs + 1) * (1 + gdBytes); + buf = GooString::format("(Hex) {0:d} StartData\n", + offset + charStrings->getLength()); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + + // write the charstring offset (CIDMap) table + for (i = 0; i <= nCIDs; i += 6) { + for (j = 0; j < 6 && i+j <= nCIDs; ++j) { + if (i+j < nCIDs && cidMap[i+j] >= 0) { + buf2[0] = (char)fdSelect[cidMap[i+j]]; + } else { + buf2[0] = (char)0; + } + n = offset + charStringOffsets[i+j]; + for (k = gdBytes; k >= 1; --k) { + buf2[k] = (char)(n & 0xff); + n >>= 8; + } + for (k = 0; k <= gdBytes; ++k) { + buf = GooString::format("{0:02x}", buf2[k] & 0xff); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + } + (*outputFunc)(outputStream, "\n", 1); + } + + // write the charstring data + n = charStrings->getLength(); + for (i = 0; i < n; i += 32) { + for (j = 0; j < 32 && i+j < n; ++j) { + buf = GooString::format("{0:02x}", charStrings->getChar(i+j) & 0xff); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + if (i + 32 >= n) { + (*outputFunc)(outputStream, ">", 1); + } + (*outputFunc)(outputStream, "\n", 1); + } + + gfree(charStringOffsets); + delete charStrings; + gfree(cidMap); +} + +void FoFiType1C::convertToType0(char *psName, + FoFiOutputFunc outputFunc, + void *outputStream) { + int *cidMap; + Type1CIndex subrIdx; + Type1CIndexVal val; + int nCIDs; + GooString *buf; + Type1CEexecBuf eb; + GBool ok; + int fd, i, j, k; + + // compute the CID count and build the CID-to-GID mapping + nCIDs = 0; + for (i = 0; i < nGlyphs; ++i) { + if (charset[i] >= nCIDs) { + nCIDs = charset[i] + 1; + } + } + cidMap = (int *)gmallocn(nCIDs, sizeof(int)); + for (i = 0; i < nCIDs; ++i) { + cidMap[i] = -1; + } + for (i = 0; i < nGlyphs; ++i) { + cidMap[charset[i]] = i; + } + + // write the descendant Type 1 fonts + for (i = 0; i < nCIDs; i += 256) { + + //~ this assumes that all CIDs in this block have the same FD -- + //~ to handle multiple FDs correctly, need to somehow divide the + //~ font up by FD; as a kludge we ignore CID 0, which is .notdef + fd = 0; + if (fdSelect != NULL) { + for (j = i==0 ? 1 : 0; j < 256 && i+j < nCIDs; ++j) { + if (cidMap[i+j] >= 0) { + fd = fdSelect[cidMap[i+j]]; + break; + } + } + } + + // font dictionary (unencrypted section) + (*outputFunc)(outputStream, "16 dict begin\n", 14); + (*outputFunc)(outputStream, "/FontName /", 11); + (*outputFunc)(outputStream, psName, strlen(psName)); + buf = GooString::format("_{0:02x} def\n", i >> 8); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, "/FontType 1 def\n", 16); + if (privateDicts[fd].hasFontMatrix) { + buf = GooString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n", + privateDicts[fd].fontMatrix[0], + privateDicts[fd].fontMatrix[1], + privateDicts[fd].fontMatrix[2], + privateDicts[fd].fontMatrix[3], + privateDicts[fd].fontMatrix[4], + privateDicts[fd].fontMatrix[5]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } else if (topDict.hasFontMatrix) { + (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); + } else { + (*outputFunc)(outputStream, + "/FontMatrix [0.001 0 0 0.001 0 0] def\n", 38); + } + buf = GooString::format("/FontBBox [{0:.4g} {1:.4g} {2:.4g} {3:.4g}] def\n", + topDict.fontBBox[0], topDict.fontBBox[1], + topDict.fontBBox[2], topDict.fontBBox[3]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + buf = GooString::format("/PaintType {0:d} def\n", topDict.paintType); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + if (topDict.paintType != 0) { + buf = GooString::format("/StrokeWidth {0:.4g} def\n", topDict.strokeWidth); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "/Encoding 256 array\n", 20); + for (j = 0; j < 256 && i+j < nCIDs; ++j) { + buf = GooString::format("dup {0:d} /c{1:02x} put\n", j, j); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + if (j < 256) { + buf = GooString::format("{0:d} 1 255 {{ 1 index exch /.notdef put }} for\n", + j); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "readonly def\n", 13); + (*outputFunc)(outputStream, "currentdict end\n", 16); + + // start the binary section + (*outputFunc)(outputStream, "currentfile eexec\n", 18); + eb.outputFunc = outputFunc; + eb.outputStream = outputStream; + eb.ascii = gTrue; + eb.r1 = 55665; + eb.line = 0; + + // start the private dictionary + eexecWrite(&eb, "\x83\xca\x73\xd5"); + eexecWrite(&eb, "dup /Private 32 dict dup begin\n"); + eexecWrite(&eb, "/RD {string currentfile exch readstring pop}" + " executeonly def\n"); + eexecWrite(&eb, "/ND {noaccess def} executeonly def\n"); + eexecWrite(&eb, "/NP {noaccess put} executeonly def\n"); + eexecWrite(&eb, "/MinFeature {16 16} def\n"); + eexecWrite(&eb, "/password 5839 def\n"); + if (privateDicts[fd].nBlueValues) { + eexecWrite(&eb, "/BlueValues ["); + for (k = 0; k < privateDicts[fd].nBlueValues; ++k) { + buf = GooString::format("{0:s}{1:d}", + k > 0 ? " " : "", + privateDicts[fd].blueValues[k]); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + eexecWrite(&eb, "] def\n"); + } + if (privateDicts[fd].nOtherBlues) { + eexecWrite(&eb, "/OtherBlues ["); + for (k = 0; k < privateDicts[fd].nOtherBlues; ++k) { + buf = GooString::format("{0:s}{1:d}", + k > 0 ? " " : "", + privateDicts[fd].otherBlues[k]); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + eexecWrite(&eb, "] def\n"); + } + if (privateDicts[fd].nFamilyBlues) { + eexecWrite(&eb, "/FamilyBlues ["); + for (k = 0; k < privateDicts[fd].nFamilyBlues; ++k) { + buf = GooString::format("{0:s}{1:d}", k > 0 ? " " : "", + privateDicts[fd].familyBlues[k]); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + eexecWrite(&eb, "] def\n"); + } + if (privateDicts[fd].nFamilyOtherBlues) { + eexecWrite(&eb, "/FamilyOtherBlues ["); + for (k = 0; k < privateDicts[fd].nFamilyOtherBlues; ++k) { + buf = GooString::format("{0:s}{1:d}", k > 0 ? " " : "", + privateDicts[fd].familyOtherBlues[k]); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + eexecWrite(&eb, "] def\n"); + } + if (privateDicts[fd].blueScale != 0.039625) { + buf = GooString::format("/BlueScale {0:.4g} def\n", + privateDicts[fd].blueScale); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[fd].blueShift != 7) { + buf = GooString::format("/BlueShift {0:d} def\n", + privateDicts[fd].blueShift); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[fd].blueFuzz != 1) { + buf = GooString::format("/BlueFuzz {0:d} def\n", + privateDicts[fd].blueFuzz); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[fd].hasStdHW) { + buf = GooString::format("/StdHW [{0:.4g}] def\n", privateDicts[fd].stdHW); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[fd].hasStdVW) { + buf = GooString::format("/StdVW [{0:.4g}] def\n", privateDicts[fd].stdVW); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[fd].nStemSnapH) { + eexecWrite(&eb, "/StemSnapH ["); + for (k = 0; k < privateDicts[fd].nStemSnapH; ++k) { + buf = GooString::format("{0:s}{1:.4g}", + k > 0 ? " " : "", privateDicts[fd].stemSnapH[k]); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + eexecWrite(&eb, "] def\n"); + } + if (privateDicts[fd].nStemSnapV) { + eexecWrite(&eb, "/StemSnapV ["); + for (k = 0; k < privateDicts[fd].nStemSnapV; ++k) { + buf = GooString::format("{0:s}{1:.4g}", + k > 0 ? " " : "", privateDicts[fd].stemSnapV[k]); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + eexecWrite(&eb, "] def\n"); + } + if (privateDicts[fd].hasForceBold) { + buf = GooString::format("/ForceBold {0:s} def\n", + privateDicts[fd].forceBold ? "true" : "false"); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[fd].forceBoldThreshold != 0) { + buf = GooString::format("/ForceBoldThreshold {0:.4g} def\n", + privateDicts[fd].forceBoldThreshold); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[fd].languageGroup != 0) { + buf = GooString::format("/LanguageGroup {0:d} def\n", + privateDicts[fd].languageGroup); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + if (privateDicts[fd].expansionFactor != 0.06) { + buf = GooString::format("/ExpansionFactor {0:.4g} def\n", + privateDicts[fd].expansionFactor); + eexecWrite(&eb, buf->getCString()); + delete buf; + } + + // set up the subroutines + ok = gTrue; + getIndex(privateDicts[fd].subrsOffset, &subrIdx, &ok); + if (!ok) { + subrIdx.pos = -1; + } + + // start the CharStrings + eexecWrite(&eb, "2 index /CharStrings 256 dict dup begin\n"); + + // write the .notdef CharString + ok = gTrue; + getIndexVal(&charStringsIdx, 0, &val, &ok); + if (ok) { + eexecCvtGlyph(&eb, ".notdef", val.pos, val.len, + &subrIdx, &privateDicts[fd]); + } + + // write the CharStrings + for (j = 0; j < 256 && i+j < nCIDs; ++j) { + if (cidMap[i+j] >= 0) { + ok = gTrue; + getIndexVal(&charStringsIdx, cidMap[i+j], &val, &ok); + if (ok) { + buf = GooString::format("c{0:02x}", j); + eexecCvtGlyph(&eb, buf->getCString(), val.pos, val.len, + &subrIdx, &privateDicts[fd]); + delete buf; + } + } + } + eexecWrite(&eb, "end\n"); + eexecWrite(&eb, "end\n"); + eexecWrite(&eb, "readonly put\n"); + eexecWrite(&eb, "noaccess put\n"); + eexecWrite(&eb, "dup /FontName get exch definefont pop\n"); + eexecWrite(&eb, "mark currentfile closefile\n"); + + // trailer + if (eb.line > 0) { + (*outputFunc)(outputStream, "\n", 1); + } + for (j = 0; j < 8; ++j) { + (*outputFunc)(outputStream, "0000000000000000000000000000000000000000000000000000000000000000\n", 65); + } + (*outputFunc)(outputStream, "cleartomark\n", 12); + } + + // write the Type 0 parent font + (*outputFunc)(outputStream, "16 dict begin\n", 14); + (*outputFunc)(outputStream, "/FontName /", 11); + (*outputFunc)(outputStream, psName, strlen(psName)); + (*outputFunc)(outputStream, " def\n", 5); + (*outputFunc)(outputStream, "/FontType 0 def\n", 16); + if (topDict.hasFontMatrix) { + buf = GooString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n", + topDict.fontMatrix[0], topDict.fontMatrix[1], + topDict.fontMatrix[2], topDict.fontMatrix[3], + topDict.fontMatrix[4], topDict.fontMatrix[5]); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } else { + (*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30); + } + (*outputFunc)(outputStream, "/FMapType 2 def\n", 16); + (*outputFunc)(outputStream, "/Encoding [\n", 12); + for (i = 0; i < nCIDs; i += 256) { + buf = GooString::format("{0:d}\n", i >> 8); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "] def\n", 6); + (*outputFunc)(outputStream, "/FDepVector [\n", 14); + for (i = 0; i < nCIDs; i += 256) { + (*outputFunc)(outputStream, "/", 1); + (*outputFunc)(outputStream, psName, strlen(psName)); + buf = GooString::format("_{0:02x} findfont\n", i >> 8); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + (*outputFunc)(outputStream, "] def\n", 6); + (*outputFunc)(outputStream, "FontName currentdict end definefont pop\n", 40); + + gfree(cidMap); +} + +void FoFiType1C::eexecCvtGlyph(Type1CEexecBuf *eb, char *glyphName, + int offset, int nBytes, + Type1CIndex *subrIdx, + Type1CPrivateDict *pDict) { + GooString *buf; + GooString *charBuf; + + // generate the charstring + charBuf = new GooString(); + cvtGlyph(offset, nBytes, charBuf, subrIdx, pDict, gTrue); + + buf = GooString::format("/{0:s} {1:d} RD ", glyphName, charBuf->getLength()); + eexecWrite(eb, buf->getCString()); + delete buf; + eexecWriteCharstring(eb, (Guchar *)charBuf->getCString(), + charBuf->getLength()); + eexecWrite(eb, " ND\n"); + + delete charBuf; +} + +void FoFiType1C::cvtGlyph(int offset, int nBytes, GooString *charBuf, + Type1CIndex *subrIdx, Type1CPrivateDict *pDict, + GBool top) { + Type1CIndexVal val; + GBool ok, dFP; + double d, dx, dy; + Gushort r2; + Guchar byte; + int pos, subrBias, start, i, k; + + start = charBuf->getLength(); + if (top) { + charBuf->append((char)73); + charBuf->append((char)58); + charBuf->append((char)147); + charBuf->append((char)134); + nOps = 0; + nHints = 0; + firstOp = gTrue; + openPath = gFalse; + } + + pos = offset; + while (pos < offset + nBytes) { + ok = gTrue; + pos = getOp(pos, gTrue, &ok); + if (!ok) { + break; + } + if (!ops[nOps - 1].isNum) { + --nOps; // drop the operator + switch (ops[nOps].op) { + case 0x0001: // hstem + if (firstOp) { + cvtGlyphWidth(nOps & 1, charBuf, pDict); + firstOp = gFalse; + } + if (nOps & 1) { + //~ error(-1, "Wrong number of args (%d) to Type 2 hstem", nOps); + } + d = 0; + dFP = gFalse; + for (k = 0; k < nOps; k += 2) { + // convert Type 2 edge hints (-20 or -21) to Type 1 ghost hints + if (ops[k+1].num < 0) { + d += ops[k].num + ops[k+1].num; + dFP |= ops[k].isFP | ops[k+1].isFP; + cvtNum(d, dFP, charBuf); + cvtNum(-ops[k+1].num, ops[k+1].isFP, charBuf); + } else { + d += ops[k].num; + dFP |= ops[k].isFP; + cvtNum(d, dFP, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + d += ops[k+1].num; + dFP |= ops[k+1].isFP; + } + charBuf->append((char)1); + } + nHints += nOps / 2; + nOps = 0; + break; + case 0x0003: // vstem + if (firstOp) { + cvtGlyphWidth(nOps & 1, charBuf, pDict); + firstOp = gFalse; + } + if (nOps & 1) { + //~ error(-1, "Wrong number of args (%d) to Type 2 vstem", nOps); + } + d = 0; + dFP = gFalse; + for (k = 0; k < nOps; k += 2) { + // convert Type 2 edge hints (-20 or -21) to Type 1 ghost hints + if (ops[k+1].num < 0) { + d += ops[k].num + ops[k+1].num; + dFP |= ops[k].isFP | ops[k+1].isFP; + cvtNum(d, dFP, charBuf); + cvtNum(-ops[k+1].num, ops[k+1].isFP, charBuf); + } else { + d += ops[k].num; + dFP |= ops[k].isFP; + cvtNum(d, dFP, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + d += ops[k+1].num; + dFP |= ops[k+1].isFP; + } + charBuf->append((char)3); + } + nHints += nOps / 2; + nOps = 0; + break; + case 0x0004: // vmoveto + if (firstOp) { + cvtGlyphWidth(nOps == 2, charBuf, pDict); + firstOp = gFalse; + } + if (openPath) { + charBuf->append((char)9); + openPath = gFalse; + } + if (nOps != 1) { + //~ error(-1, "Wrong number of args (%d) to Type 2 vmoveto", nOps); + } + cvtNum(ops[0].num, ops[0].isFP, charBuf); + charBuf->append((char)4); + nOps = 0; + break; + case 0x0005: // rlineto + if (nOps < 2 || nOps % 2 != 0) { + //~ error(-1, "Wrong number of args (%d) to Type 2 rlineto", nOps); + } + for (k = 0; k < nOps; k += 2) { + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + charBuf->append((char)5); + } + nOps = 0; + openPath = gTrue; + break; + case 0x0006: // hlineto + if (nOps < 1) { + //~ error(-1, "Wrong number of args (%d) to Type 2 hlineto", nOps); + } + for (k = 0; k < nOps; ++k) { + cvtNum(ops[k].num, ops[k].isFP, charBuf); + charBuf->append((char)((k & 1) ? 7 : 6)); + } + nOps = 0; + openPath = gTrue; + break; + case 0x0007: // vlineto + if (nOps < 1) { + //~ error(-1, "Wrong number of args (%d) to Type 2 vlineto", nOps); + } + for (k = 0; k < nOps; ++k) { + cvtNum(ops[k].num, ops[k].isFP, charBuf); + charBuf->append((char)((k & 1) ? 6 : 7)); + } + nOps = 0; + openPath = gTrue; + break; + case 0x0008: // rrcurveto + if (nOps < 6 || nOps % 6 != 0) { + //~ error(-1, "Wrong number of args (%d) to Type 2 rrcurveto", nOps); + } + for (k = 0; k < nOps; k += 6) { + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); + cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); + cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf); + cvtNum(ops[k+5].num, ops[k+5].isFP, charBuf); + charBuf->append((char)8); + } + nOps = 0; + openPath = gTrue; + break; + case 0x000a: // callsubr + if (nOps >= 1) { + subrBias = (subrIdx->len < 1240) + ? 107 : (subrIdx->len < 33900) ? 1131 : 32768; + k = subrBias + (int)ops[nOps - 1].num; + --nOps; + ok = gTrue; + getIndexVal(subrIdx, k, &val, &ok); + if (ok) { + cvtGlyph(val.pos, val.len, charBuf, subrIdx, pDict, gFalse); + } + } else { + //~ error(-1, "Too few args to Type 2 callsubr"); + } + // don't clear the stack + break; + case 0x000b: // return + // don't clear the stack + break; + case 0x000e: // endchar / seac + if (firstOp) { + cvtGlyphWidth(nOps == 1 || nOps == 5, charBuf, pDict); + firstOp = gFalse; + } + if (openPath) { + charBuf->append((char)9); + openPath = gFalse; + } + if (nOps == 4) { + cvtNum(0, gFalse, charBuf); + cvtNum(ops[0].num, ops[0].isFP, charBuf); + cvtNum(ops[1].num, ops[1].isFP, charBuf); + cvtNum(ops[2].num, ops[2].isFP, charBuf); + cvtNum(ops[3].num, ops[3].isFP, charBuf); + charBuf->append((char)12)->append((char)6); + } else if (nOps == 0) { + charBuf->append((char)14); + } else { + //~ error(-1, "Wrong number of args (%d) to Type 2 endchar", nOps); + } + nOps = 0; + break; + case 0x000f: // (obsolete) + // this op is ignored, but we need the glyph width + if (firstOp) { + cvtGlyphWidth(nOps > 0, charBuf, pDict); + firstOp = gFalse; + } + nOps = 0; + break; + case 0x0010: // blend + //~ error(-1, "Unimplemented Type 2 charstring op: %d", file[i]); + nOps = 0; + break; + case 0x0012: // hstemhm + // ignored + if (firstOp) { + cvtGlyphWidth(nOps & 1, charBuf, pDict); + firstOp = gFalse; + } + if (nOps & 1) { + //~ error(-1, "Wrong number of args (%d) to Type 2 hstemhm", nOps); + } + nHints += nOps / 2; + nOps = 0; + break; + case 0x0013: // hintmask + // ignored + if (firstOp) { + cvtGlyphWidth(nOps & 1, charBuf, pDict); + firstOp = gFalse; + } + if (nOps > 0) { + if (nOps & 1) { + //~ error(-1, "Wrong number of args (%d) to Type 2 hintmask/vstemhm", + //~ nOps); + } + nHints += nOps / 2; + } + pos += (nHints + 7) >> 3; + nOps = 0; + break; + case 0x0014: // cntrmask + // ignored + if (firstOp) { + cvtGlyphWidth(nOps & 1, charBuf, pDict); + firstOp = gFalse; + } + if (nOps > 0) { + if (nOps & 1) { + //~ error(-1, "Wrong number of args (%d) to Type 2 cntrmask/vstemhm", + //~ nOps); + } + nHints += nOps / 2; + } + pos += (nHints + 7) >> 3; + nOps = 0; + break; + case 0x0015: // rmoveto + if (firstOp) { + cvtGlyphWidth(nOps == 3, charBuf, pDict); + firstOp = gFalse; + } + if (openPath) { + charBuf->append((char)9); + openPath = gFalse; + } + if (nOps != 2) { + //~ error(-1, "Wrong number of args (%d) to Type 2 rmoveto", nOps); + } + cvtNum(ops[0].num, ops[0].isFP, charBuf); + cvtNum(ops[1].num, ops[1].isFP, charBuf); + charBuf->append((char)21); + nOps = 0; + break; + case 0x0016: // hmoveto + if (firstOp) { + cvtGlyphWidth(nOps == 2, charBuf, pDict); + firstOp = gFalse; + } + if (openPath) { + charBuf->append((char)9); + openPath = gFalse; + } + if (nOps != 1) { + //~ error(-1, "Wrong number of args (%d) to Type 2 hmoveto", nOps); + } + cvtNum(ops[0].num, ops[0].isFP, charBuf); + charBuf->append((char)22); + nOps = 0; + break; + case 0x0017: // vstemhm + // ignored + if (firstOp) { + cvtGlyphWidth(nOps & 1, charBuf, pDict); + firstOp = gFalse; + } + if (nOps & 1) { + //~ error(-1, "Wrong number of args (%d) to Type 2 vstemhm", nOps); + } + nHints += nOps / 2; + nOps = 0; + break; + case 0x0018: // rcurveline + if (nOps < 8 || (nOps - 2) % 6 != 0) { + //~ error(-1, "Wrong number of args (%d) to Type 2 rcurveline", nOps); + } + for (k = 0; k < nOps - 2; k += 6) { + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); + cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); + cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf); + cvtNum(ops[k+5].num, ops[k+5].isFP, charBuf); + charBuf->append((char)8); + } + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(ops[k+1].num, ops[k].isFP, charBuf); + charBuf->append((char)5); + nOps = 0; + openPath = gTrue; + break; + case 0x0019: // rlinecurve + if (nOps < 8 || (nOps - 6) % 2 != 0) { + //~ error(-1, "Wrong number of args (%d) to Type 2 rlinecurve", nOps); + } + for (k = 0; k < nOps - 6; k += 2) { + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(ops[k+1].num, ops[k].isFP, charBuf); + charBuf->append((char)5); + } + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); + cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); + cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf); + cvtNum(ops[k+5].num, ops[k+5].isFP, charBuf); + charBuf->append((char)8); + nOps = 0; + openPath = gTrue; + break; + case 0x001a: // vvcurveto + if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) { + //~ error(-1, "Wrong number of args (%d) to Type 2 vvcurveto", nOps); + } + if (nOps % 2 == 1) { + cvtNum(ops[0].num, ops[0].isFP, charBuf); + cvtNum(ops[1].num, ops[1].isFP, charBuf); + cvtNum(ops[2].num, ops[2].isFP, charBuf); + cvtNum(ops[3].num, ops[3].isFP, charBuf); + cvtNum(0, gFalse, charBuf); + cvtNum(ops[4].num, ops[4].isFP, charBuf); + charBuf->append((char)8); + k = 5; + } else { + k = 0; + } + for (; k < nOps; k += 4) { + cvtNum(0, gFalse, charBuf); + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); + cvtNum(0, gFalse, charBuf); + cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); + charBuf->append((char)8); + } + nOps = 0; + openPath = gTrue; + break; + case 0x001b: // hhcurveto + if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) { + //~ error(-1, "Wrong number of args (%d) to Type 2 hhcurveto", nOps); + } + if (nOps % 2 == 1) { + cvtNum(ops[1].num, ops[1].isFP, charBuf); + cvtNum(ops[0].num, ops[0].isFP, charBuf); + cvtNum(ops[2].num, ops[2].isFP, charBuf); + cvtNum(ops[3].num, ops[3].isFP, charBuf); + cvtNum(ops[4].num, ops[4].isFP, charBuf); + cvtNum(0, gFalse, charBuf); + charBuf->append((char)8); + k = 5; + } else { + k = 0; + } + for (; k < nOps; k += 4) { + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(0, gFalse, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); + cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); + cvtNum(0, gFalse, charBuf); + charBuf->append((char)8); + } + nOps = 0; + openPath = gTrue; + break; + case 0x001d: // callgsubr + if (nOps >= 1) { + k = gsubrBias + (int)ops[nOps - 1].num; + --nOps; + ok = gTrue; + getIndexVal(&gsubrIdx, k, &val, &ok); + if (ok) { + cvtGlyph(val.pos, val.len, charBuf, subrIdx, pDict, gFalse); + } + } else { + //~ error(-1, "Too few args to Type 2 callgsubr"); + } + // don't clear the stack + break; + case 0x001e: // vhcurveto + if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) { + //~ error(-1, "Wrong number of args (%d) to Type 2 vhcurveto", nOps); + } + for (k = 0; k < nOps && k != nOps-5; k += 4) { + if (k % 8 == 0) { + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); + cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); + charBuf->append((char)30); + } else { + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); + cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); + charBuf->append((char)31); + } + } + if (k == nOps-5) { + if (k % 8 == 0) { + cvtNum(0, gFalse, charBuf); + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); + cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); + cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf); + } else { + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(0, gFalse, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); + cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf); + cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); + } + charBuf->append((char)8); + } + nOps = 0; + openPath = gTrue; + break; + case 0x001f: // hvcurveto + if (nOps < 4 || !(nOps % 4 == 0 || (nOps-1) % 4 == 0)) { + //~ error(-1, "Wrong number of args (%d) to Type 2 hvcurveto", nOps); + } + for (k = 0; k < nOps && k != nOps-5; k += 4) { + if (k % 8 == 0) { + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); + cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); + charBuf->append((char)31); + } else { + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); + cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); + charBuf->append((char)30); + } + } + if (k == nOps-5) { + if (k % 8 == 0) { + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(0, gFalse, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); + cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf); + cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); + } else { + cvtNum(0, gFalse, charBuf); + cvtNum(ops[k].num, ops[k].isFP, charBuf); + cvtNum(ops[k+1].num, ops[k+1].isFP, charBuf); + cvtNum(ops[k+2].num, ops[k+2].isFP, charBuf); + cvtNum(ops[k+3].num, ops[k+3].isFP, charBuf); + cvtNum(ops[k+4].num, ops[k+4].isFP, charBuf); + } + charBuf->append((char)8); + } + nOps = 0; + openPath = gTrue; + break; + case 0x0c00: // dotsection (should be Type 1 only?) + // ignored + nOps = 0; + break; + case 0x0c03: // and + case 0x0c04: // or + case 0x0c05: // not + case 0x0c08: // store + case 0x0c09: // abs + case 0x0c0a: // add + case 0x0c0b: // sub + case 0x0c0c: // div + case 0x0c0d: // load + case 0x0c0e: // neg + case 0x0c0f: // eq + case 0x0c12: // drop + case 0x0c14: // put + case 0x0c15: // get + case 0x0c16: // ifelse + case 0x0c17: // random + case 0x0c18: // mul + case 0x0c1a: // sqrt + case 0x0c1b: // dup + case 0x0c1c: // exch + case 0x0c1d: // index + case 0x0c1e: // roll + //~ error(-1, "Unimplemented Type 2 charstring op: 12.%d", file[i+1]); + nOps = 0; + break; + case 0x0c22: // hflex + if (nOps != 7) { + //~ error(-1, "Wrong number of args (%d) to Type 2 hflex", nOps); + } + cvtNum(ops[0].num, ops[0].isFP, charBuf); + cvtNum(0, gFalse, charBuf); + cvtNum(ops[1].num, ops[1].isFP, charBuf); + cvtNum(ops[2].num, ops[2].isFP, charBuf); + cvtNum(ops[3].num, ops[3].isFP, charBuf); + cvtNum(0, gFalse, charBuf); + charBuf->append((char)8); + cvtNum(ops[4].num, ops[4].isFP, charBuf); + cvtNum(0, gFalse, charBuf); + cvtNum(ops[5].num, ops[5].isFP, charBuf); + cvtNum(-ops[2].num, ops[2].isFP, charBuf); + cvtNum(ops[6].num, ops[6].isFP, charBuf); + cvtNum(0, gFalse, charBuf); + charBuf->append((char)8); + nOps = 0; + openPath = gTrue; + break; + case 0x0c23: // flex + if (nOps != 13) { + //~ error(-1, "Wrong number of args (%d) to Type 2 flex", nOps); + } + cvtNum(ops[0].num, ops[0].isFP, charBuf); + cvtNum(ops[1].num, ops[1].isFP, charBuf); + cvtNum(ops[2].num, ops[2].isFP, charBuf); + cvtNum(ops[3].num, ops[3].isFP, charBuf); + cvtNum(ops[4].num, ops[4].isFP, charBuf); + cvtNum(ops[5].num, ops[5].isFP, charBuf); + charBuf->append((char)8); + cvtNum(ops[6].num, ops[6].isFP, charBuf); + cvtNum(ops[7].num, ops[7].isFP, charBuf); + cvtNum(ops[8].num, ops[8].isFP, charBuf); + cvtNum(ops[9].num, ops[9].isFP, charBuf); + cvtNum(ops[10].num, ops[10].isFP, charBuf); + cvtNum(ops[11].num, ops[11].isFP, charBuf); + charBuf->append((char)8); + nOps = 0; + openPath = gTrue; + break; + case 0x0c24: // hflex1 + if (nOps != 9) { + //~ error(-1, "Wrong number of args (%d) to Type 2 hflex1", nOps); + } + cvtNum(ops[0].num, ops[0].isFP, charBuf); + cvtNum(ops[1].num, ops[1].isFP, charBuf); + cvtNum(ops[2].num, ops[2].isFP, charBuf); + cvtNum(ops[3].num, ops[3].isFP, charBuf); + cvtNum(ops[4].num, ops[4].isFP, charBuf); + cvtNum(0, gFalse, charBuf); + charBuf->append((char)8); + cvtNum(ops[5].num, ops[5].isFP, charBuf); + cvtNum(0, gFalse, charBuf); + cvtNum(ops[6].num, ops[6].isFP, charBuf); + cvtNum(ops[7].num, ops[7].isFP, charBuf); + cvtNum(ops[8].num, ops[8].isFP, charBuf); + cvtNum(-(ops[1].num + ops[3].num + ops[7].num), + ops[1].isFP | ops[3].isFP | ops[7].isFP, charBuf); + charBuf->append((char)8); + nOps = 0; + openPath = gTrue; + break; + case 0x0c25: // flex1 + if (nOps != 11) { + //~ error(-1, "Wrong number of args (%d) to Type 2 flex1", nOps); + } + cvtNum(ops[0].num, ops[0].isFP, charBuf); + cvtNum(ops[1].num, ops[1].isFP, charBuf); + cvtNum(ops[2].num, ops[2].isFP, charBuf); + cvtNum(ops[3].num, ops[3].isFP, charBuf); + cvtNum(ops[4].num, ops[4].isFP, charBuf); + cvtNum(ops[5].num, ops[5].isFP, charBuf); + charBuf->append((char)8); + cvtNum(ops[6].num, ops[6].isFP, charBuf); + cvtNum(ops[7].num, ops[7].isFP, charBuf); + cvtNum(ops[8].num, ops[8].isFP, charBuf); + cvtNum(ops[9].num, ops[9].isFP, charBuf); + dx = ops[0].num + ops[2].num + ops[4].num + ops[6].num + ops[8].num; + dy = ops[1].num + ops[3].num + ops[5].num + ops[7].num + ops[9].num; + if (fabs(dx) > fabs(dy)) { + cvtNum(ops[10].num, ops[10].isFP, charBuf); + cvtNum(-dy, ops[1].isFP | ops[3].isFP | ops[5].isFP | + ops[7].isFP | ops[9].isFP, charBuf); + } else { + cvtNum(-dx, ops[0].isFP | ops[2].isFP | ops[4].isFP | + ops[6].isFP | ops[8].isFP, charBuf); + cvtNum(ops[10].num, ops[10].isFP, charBuf); + } + charBuf->append((char)8); + nOps = 0; + openPath = gTrue; + break; + default: + //~ error(-1, "Illegal Type 2 charstring op: %04x", + //~ ops[nOps].op); + nOps = 0; + break; + } + } + } + + // charstring encryption + if (top) { + r2 = 4330; + for (i = start; i < charBuf->getLength(); ++i) { + byte = charBuf->getChar(i) ^ (r2 >> 8); + charBuf->setChar(i, byte); + r2 = (byte + r2) * 52845 + 22719; + } + } +} + +void FoFiType1C::cvtGlyphWidth(GBool useOp, GooString *charBuf, + Type1CPrivateDict *pDict) { + double w; + GBool wFP; + int i; + + if (useOp) { + w = pDict->nominalWidthX + ops[0].num; + wFP = pDict->nominalWidthXFP | ops[0].isFP; + for (i = 1; i < nOps; ++i) { + ops[i-1] = ops[i]; + } + --nOps; + } else { + w = pDict->defaultWidthX; + wFP = pDict->defaultWidthXFP; + } + cvtNum(0, gFalse, charBuf); + cvtNum(w, wFP, charBuf); + charBuf->append((char)13); +} + +void FoFiType1C::cvtNum(double x, GBool isFP, GooString *charBuf) { + Guchar buf[12]; + int y, n; + + n = 0; + if (isFP) { + if (x >= -32768 && x < 32768) { + y = (int)(x * 256.0); + buf[0] = 255; + buf[1] = (Guchar)(y >> 24); + buf[2] = (Guchar)(y >> 16); + buf[3] = (Guchar)(y >> 8); + buf[4] = (Guchar)y; + buf[5] = 255; + buf[6] = 0; + buf[7] = 0; + buf[8] = 1; + buf[9] = 0; + buf[10] = 12; + buf[11] = 12; + n = 12; + } else { + //~ error(-1, "Type 2 fixed point constant out of range"); + } + } else { + y = (int)x; + if (y >= -107 && y <= 107) { + buf[0] = (Guchar)(y + 139); + n = 1; + } else if (y > 107 && y <= 1131) { + y -= 108; + buf[0] = (Guchar)((y >> 8) + 247); + buf[1] = (Guchar)(y & 0xff); + n = 2; + } else if (y < -107 && y >= -1131) { + y = -y - 108; + buf[0] = (Guchar)((y >> 8) + 251); + buf[1] = (Guchar)(y & 0xff); + n = 2; + } else { + buf[0] = 255; + buf[1] = (Guchar)(y >> 24); + buf[2] = (Guchar)(y >> 16); + buf[3] = (Guchar)(y >> 8); + buf[4] = (Guchar)y; + n = 5; + } + } + charBuf->append((char *)buf, n); +} + +void FoFiType1C::eexecWrite(Type1CEexecBuf *eb, char *s) { + Guchar *p; + Guchar x; + + for (p = (Guchar *)s; *p; ++p) { + x = *p ^ (eb->r1 >> 8); + eb->r1 = (x + eb->r1) * 52845 + 22719; + if (eb->ascii) { + (*eb->outputFunc)(eb->outputStream, &hexChars[x >> 4], 1); + (*eb->outputFunc)(eb->outputStream, &hexChars[x & 0x0f], 1); + eb->line += 2; + if (eb->line == 64) { + (*eb->outputFunc)(eb->outputStream, "\n", 1); + eb->line = 0; + } + } else { + (*eb->outputFunc)(eb->outputStream, (char *)&x, 1); + } + } +} + +void FoFiType1C::eexecWriteCharstring(Type1CEexecBuf *eb, + Guchar *s, int n) { + Guchar x; + int i; + + // eexec encryption + for (i = 0; i < n; ++i) { + x = s[i] ^ (eb->r1 >> 8); + eb->r1 = (x + eb->r1) * 52845 + 22719; + if (eb->ascii) { + (*eb->outputFunc)(eb->outputStream, &hexChars[x >> 4], 1); + (*eb->outputFunc)(eb->outputStream, &hexChars[x & 0x0f], 1); + eb->line += 2; + if (eb->line == 64) { + (*eb->outputFunc)(eb->outputStream, "\n", 1); + eb->line = 0; + } + } else { + (*eb->outputFunc)(eb->outputStream, (char *)&x, 1); + } + } +} + +GBool FoFiType1C::parse() { + Type1CIndex fdIdx; + Type1CIndexVal val; + int i; + + parsedOk = gTrue; + + // some tools embed Type 1C fonts with an extra whitespace char at + // the beginning + if (len > 0 && file[0] != '\x01') { + ++file; + --len; + } + + // find the indexes + getIndex(getU8(2, &parsedOk), &nameIdx, &parsedOk); + getIndex(nameIdx.endPos, &topDictIdx, &parsedOk); + getIndex(topDictIdx.endPos, &stringIdx, &parsedOk); + getIndex(stringIdx.endPos, &gsubrIdx, &parsedOk); + if (!parsedOk) { + return gFalse; + } + gsubrBias = (gsubrIdx.len < 1240) ? 107 + : (gsubrIdx.len < 33900) ? 1131 : 32768; + + // read the first font name + getIndexVal(&nameIdx, 0, &val, &parsedOk); + if (!parsedOk) { + return gFalse; + } + name = new GooString((char *)&file[val.pos], val.len); + + // read the top dict for the first font + readTopDict(); + + // for CID fonts: read the FDArray dicts and private dicts + if (topDict.firstOp == 0x0c1e) { + if (topDict.fdArrayOffset == 0) { + nFDs = 1; + privateDicts = (Type1CPrivateDict *)gmalloc(sizeof(Type1CPrivateDict)); + readPrivateDict(0, 0, &privateDicts[0]); + } else { + getIndex(topDict.fdArrayOffset, &fdIdx, &parsedOk); + if (!parsedOk) { + return gFalse; + } + nFDs = fdIdx.len; + privateDicts = (Type1CPrivateDict *) + gmallocn(nFDs, sizeof(Type1CPrivateDict)); + for (i = 0; i < nFDs; ++i) { + getIndexVal(&fdIdx, i, &val, &parsedOk); + if (!parsedOk) { + return gFalse; + } + readFD(val.pos, val.len, &privateDicts[i]); + } + } + + // for 8-bit fonts: read the private dict + } else { + privateDicts = (Type1CPrivateDict *)gmalloc(sizeof(Type1CPrivateDict)); + readPrivateDict(topDict.privateOffset, topDict.privateSize, + &privateDicts[0]); + } + + // check for parse errors in the private dict(s) + if (!parsedOk) { + return gFalse; + } + + // get the charstrings index + if (topDict.charStringsOffset <= 0) { + parsedOk = gFalse; + return gFalse; + } + getIndex(topDict.charStringsOffset, &charStringsIdx, &parsedOk); + if (!parsedOk) { + return gFalse; + } + nGlyphs = charStringsIdx.len; + + // for CID fonts: read the FDSelect table + if (topDict.firstOp == 0x0c1e) { + readFDSelect(); + if (!parsedOk) { + return gFalse; + } + } + + // read the charset + if (!readCharset()) { + parsedOk = gFalse; + return gFalse; + } + + // for 8-bit fonts: build the encoding + if (topDict.firstOp != 0x0c14 && topDict.firstOp != 0x0c1e) { + buildEncoding(); + if (!parsedOk) { + return gFalse; + } + } + + return parsedOk; +} + +void FoFiType1C::readTopDict() { + Type1CIndexVal topDictPtr; + int pos; + + topDict.firstOp = -1; + topDict.versionSID = 0; + topDict.noticeSID = 0; + topDict.copyrightSID = 0; + topDict.fullNameSID = 0; + topDict.familyNameSID = 0; + topDict.weightSID = 0; + topDict.isFixedPitch = 0; + topDict.italicAngle = 0; + topDict.underlinePosition = -100; + topDict.underlineThickness = 50; + topDict.paintType = 0; + topDict.charstringType = 2; + topDict.fontMatrix[0] = 0.001; + topDict.fontMatrix[1] = 0; + topDict.fontMatrix[2] = 0; + topDict.fontMatrix[3] = 0.001; + topDict.fontMatrix[4] = 0; + topDict.fontMatrix[5] = 0; + topDict.hasFontMatrix = gFalse; + topDict.uniqueID = 0; + topDict.fontBBox[0] = 0; + topDict.fontBBox[1] = 0; + topDict.fontBBox[2] = 0; + topDict.fontBBox[3] = 0; + topDict.strokeWidth = 0; + topDict.charsetOffset = 0; + topDict.encodingOffset = 0; + topDict.charStringsOffset = 0; + topDict.privateSize = 0; + topDict.privateOffset = 0; + topDict.registrySID = 0; + topDict.orderingSID = 0; + topDict.supplement = 0; + topDict.fdArrayOffset = 0; + topDict.fdSelectOffset = 0; + + getIndexVal(&topDictIdx, 0, &topDictPtr, &parsedOk); + pos = topDictPtr.pos; + nOps = 0; + while (pos < topDictPtr.pos + topDictPtr.len) { + pos = getOp(pos, gFalse, &parsedOk); + if (!parsedOk) { + break; + } + if (!ops[nOps - 1].isNum) { + --nOps; // drop the operator + if (topDict.firstOp < 0) { + topDict.firstOp = ops[nOps].op; + } + switch (ops[nOps].op) { + case 0x0000: topDict.versionSID = (int)ops[0].num; break; + case 0x0001: topDict.noticeSID = (int)ops[0].num; break; + case 0x0c00: topDict.copyrightSID = (int)ops[0].num; break; + case 0x0002: topDict.fullNameSID = (int)ops[0].num; break; + case 0x0003: topDict.familyNameSID = (int)ops[0].num; break; + case 0x0004: topDict.weightSID = (int)ops[0].num; break; + case 0x0c01: topDict.isFixedPitch = (int)ops[0].num; break; + case 0x0c02: topDict.italicAngle = ops[0].num; break; + case 0x0c03: topDict.underlinePosition = ops[0].num; break; + case 0x0c04: topDict.underlineThickness = ops[0].num; break; + case 0x0c05: topDict.paintType = (int)ops[0].num; break; + case 0x0c06: topDict.charstringType = (int)ops[0].num; break; + case 0x0c07: topDict.fontMatrix[0] = ops[0].num; + topDict.fontMatrix[1] = ops[1].num; + topDict.fontMatrix[2] = ops[2].num; + topDict.fontMatrix[3] = ops[3].num; + topDict.fontMatrix[4] = ops[4].num; + topDict.fontMatrix[5] = ops[5].num; + topDict.hasFontMatrix = gTrue; break; + case 0x000d: topDict.uniqueID = (int)ops[0].num; break; + case 0x0005: topDict.fontBBox[0] = ops[0].num; + topDict.fontBBox[1] = ops[1].num; + topDict.fontBBox[2] = ops[2].num; + topDict.fontBBox[3] = ops[3].num; break; + case 0x0c08: topDict.strokeWidth = ops[0].num; break; + case 0x000f: topDict.charsetOffset = (int)ops[0].num; break; + case 0x0010: topDict.encodingOffset = (int)ops[0].num; break; + case 0x0011: topDict.charStringsOffset = (int)ops[0].num; break; + case 0x0012: topDict.privateSize = (int)ops[0].num; + topDict.privateOffset = (int)ops[1].num; break; + case 0x0c1e: topDict.registrySID = (int)ops[0].num; + topDict.orderingSID = (int)ops[1].num; + topDict.supplement = (int)ops[2].num; break; + case 0x0c24: topDict.fdArrayOffset = (int)ops[0].num; break; + case 0x0c25: topDict.fdSelectOffset = (int)ops[0].num; break; + } + nOps = 0; + } + } +} + +// Read a CID font dict (FD) - this pulls out the private dict +// pointer, and reads the private dict. It also pulls the FontMatrix +// (if any) out of the FD. +void FoFiType1C::readFD(int offset, int length, Type1CPrivateDict *pDict) { + int pos, pSize, pOffset; + double fontMatrix[6] = {0}; + GBool hasFontMatrix; + + hasFontMatrix = gFalse; + pSize = pOffset = 0; + pos = offset; + nOps = 0; + while (pos < offset + length) { + pos = getOp(pos, gFalse, &parsedOk); + if (!parsedOk) { + return; + } + if (!ops[nOps - 1].isNum) { + if (ops[nOps - 1].op == 0x0012) { + if (nOps < 3) { + parsedOk = gFalse; + return; + } + pSize = (int)ops[0].num; + pOffset = (int)ops[1].num; + break; + } else if (ops[nOps - 1].op == 0x0c07) { + fontMatrix[0] = ops[0].num; + fontMatrix[1] = ops[1].num; + fontMatrix[2] = ops[2].num; + fontMatrix[3] = ops[3].num; + fontMatrix[4] = ops[4].num; + fontMatrix[5] = ops[5].num; + hasFontMatrix = gTrue; + } + nOps = 0; + } + } + readPrivateDict(pOffset, pSize, pDict); + if (hasFontMatrix) { + pDict->fontMatrix[0] = fontMatrix[0]; + pDict->fontMatrix[1] = fontMatrix[1]; + pDict->fontMatrix[2] = fontMatrix[2]; + pDict->fontMatrix[3] = fontMatrix[3]; + pDict->fontMatrix[4] = fontMatrix[4]; + pDict->fontMatrix[5] = fontMatrix[5]; + pDict->hasFontMatrix = gTrue; + } +} + +void FoFiType1C::readPrivateDict(int offset, int length, + Type1CPrivateDict *pDict) { + int pos; + + pDict->hasFontMatrix = gFalse; + pDict->nBlueValues = 0; + pDict->nOtherBlues = 0; + pDict->nFamilyBlues = 0; + pDict->nFamilyOtherBlues = 0; + pDict->blueScale = 0.039625; + pDict->blueShift = 7; + pDict->blueFuzz = 1; + pDict->hasStdHW = gFalse; + pDict->hasStdVW = gFalse; + pDict->nStemSnapH = 0; + pDict->nStemSnapV = 0; + pDict->hasForceBold = gFalse; + pDict->forceBoldThreshold = 0; + pDict->languageGroup = 0; + pDict->expansionFactor = 0.06; + pDict->initialRandomSeed = 0; + pDict->subrsOffset = 0; + pDict->defaultWidthX = 0; + pDict->defaultWidthXFP = gFalse; + pDict->nominalWidthX = 0; + pDict->nominalWidthXFP = gFalse; + + // no dictionary + if (offset == 0 || length == 0) { + return; + } + + pos = offset; + nOps = 0; + while (pos < offset + length) { + pos = getOp(pos, gFalse, &parsedOk); + if (!parsedOk) { + break; + } + if (!ops[nOps - 1].isNum) { + --nOps; // drop the operator + switch (ops[nOps].op) { + case 0x0006: + pDict->nBlueValues = getDeltaIntArray(pDict->blueValues, + type1CMaxBlueValues); + break; + case 0x0007: + pDict->nOtherBlues = getDeltaIntArray(pDict->otherBlues, + type1CMaxOtherBlues); + break; + case 0x0008: + pDict->nFamilyBlues = getDeltaIntArray(pDict->familyBlues, + type1CMaxBlueValues); + break; + case 0x0009: + pDict->nFamilyOtherBlues = getDeltaIntArray(pDict->familyOtherBlues, + type1CMaxOtherBlues); + break; + case 0x0c09: + pDict->blueScale = ops[0].num; + break; + case 0x0c0a: + pDict->blueShift = (int)ops[0].num; + break; + case 0x0c0b: + pDict->blueFuzz = (int)ops[0].num; + break; + case 0x000a: + pDict->stdHW = ops[0].num; + pDict->hasStdHW = gTrue; + break; + case 0x000b: + pDict->stdVW = ops[0].num; + pDict->hasStdVW = gTrue; + break; + case 0x0c0c: + pDict->nStemSnapH = getDeltaFPArray(pDict->stemSnapH, + type1CMaxStemSnap); + break; + case 0x0c0d: + pDict->nStemSnapV = getDeltaFPArray(pDict->stemSnapV, + type1CMaxStemSnap); + break; + case 0x0c0e: + pDict->forceBold = ops[0].num != 0; + pDict->hasForceBold = gTrue; + break; + case 0x0c0f: + pDict->forceBoldThreshold = ops[0].num; + break; + case 0x0c11: + pDict->languageGroup = (int)ops[0].num; + break; + case 0x0c12: + pDict->expansionFactor = ops[0].num; + break; + case 0x0c13: + pDict->initialRandomSeed = (int)ops[0].num; + break; + case 0x0013: + pDict->subrsOffset = offset + (int)ops[0].num; + break; + case 0x0014: + pDict->defaultWidthX = ops[0].num; + pDict->defaultWidthXFP = ops[0].isFP; + break; + case 0x0015: + pDict->nominalWidthX = ops[0].num; + pDict->nominalWidthXFP = ops[0].isFP; + break; + } + nOps = 0; + } + } +} + +void FoFiType1C::readFDSelect() { + int fdSelectFmt, pos, nRanges, gid0, gid1, fd, i, j; + + fdSelect = (Guchar *)gmalloc(nGlyphs); + if (topDict.fdSelectOffset == 0) { + for (i = 0; i < nGlyphs; ++i) { + fdSelect[i] = 0; + } + } else { + pos = topDict.fdSelectOffset; + fdSelectFmt = getU8(pos++, &parsedOk); + if (!parsedOk) { + return; + } + if (fdSelectFmt == 0) { + if (!checkRegion(pos, nGlyphs)) { + parsedOk = gFalse; + return; + } + memcpy(fdSelect, file + pos, nGlyphs); + } else if (fdSelectFmt == 3) { + nRanges = getU16BE(pos, &parsedOk); + pos += 2; + gid0 = getU16BE(pos, &parsedOk); + pos += 2; + for (i = 1; i <= nRanges; ++i) { + fd = getU8(pos++, &parsedOk); + gid1 = getU16BE(pos, &parsedOk); + if (!parsedOk) { + return; + } + pos += 2; + if (gid0 > gid1 || gid1 > nGlyphs) { + //~ error(-1, "Bad FDSelect table in CID font"); + parsedOk = gFalse; + return; + } + for (j = gid0; j < gid1; ++j) { + fdSelect[j] = fd; + } + gid0 = gid1; + } + } else { + //~ error(-1, "Unknown FDSelect table format in CID font"); + for (i = 0; i < nGlyphs; ++i) { + fdSelect[i] = 0; + } + } + } +} + +void FoFiType1C::buildEncoding() { + char buf[256]; + int nCodes, nRanges, encFormat; + int pos, c, sid, nLeft, nSups, i, j; + + if (topDict.encodingOffset == 0) { + encoding = fofiType1StandardEncoding; + + } else if (topDict.encodingOffset == 1) { + encoding = fofiType1ExpertEncoding; + + } else { + encoding = (char **)gmallocn(256, sizeof(char *)); + for (i = 0; i < 256; ++i) { + encoding[i] = NULL; + } + pos = topDict.encodingOffset; + encFormat = getU8(pos++, &parsedOk); + if (!parsedOk) { + return; + } + if ((encFormat & 0x7f) == 0) { + nCodes = 1 + getU8(pos++, &parsedOk); + if (!parsedOk) { + return; + } + if (nCodes > nGlyphs) { + nCodes = nGlyphs; + } + for (i = 1; i < nCodes; ++i) { + c = getU8(pos++, &parsedOk); + if (!parsedOk) { + return; + } + if (encoding[c]) { + gfree(encoding[c]); + } + encoding[c] = copyString(getString(charset[i], buf, &parsedOk)); + } + } else if ((encFormat & 0x7f) == 1) { + nRanges = getU8(pos++, &parsedOk); + if (!parsedOk) { + return; + } + nCodes = 1; + for (i = 0; i < nRanges; ++i) { + c = getU8(pos++, &parsedOk); + nLeft = getU8(pos++, &parsedOk); + if (!parsedOk) { + return; + } + for (j = 0; j <= nLeft && nCodes < nGlyphs; ++j) { + if (c < 256) { + if (encoding[c]) { + gfree(encoding[c]); + } + encoding[c] = copyString(getString(charset[nCodes], buf, + &parsedOk)); + } + ++nCodes; + ++c; + } + } + } + if (encFormat & 0x80) { + nSups = getU8(pos++, &parsedOk); + if (!parsedOk) { + return; + } + for (i = 0; i < nSups; ++i) { + c = getU8(pos++, &parsedOk);; + if (!parsedOk) { + return;; + } + sid = getU16BE(pos, &parsedOk); + pos += 2; + if (!parsedOk) { + return; + } + if (encoding[c]) { + gfree(encoding[c]); + } + encoding[c] = copyString(getString(sid, buf, &parsedOk)); + } + } + } +} + +GBool FoFiType1C::readCharset() { + int charsetFormat, c, pos; + int nLeft, i, j; + + if (topDict.charsetOffset == 0) { + charset = fofiType1CISOAdobeCharset; + } else if (topDict.charsetOffset == 1) { + charset = fofiType1CExpertCharset; + } else if (topDict.charsetOffset == 2) { + charset = fofiType1CExpertSubsetCharset; + } else { + charset = (Gushort *)gmallocn(nGlyphs, sizeof(Gushort)); + for (i = 0; i < nGlyphs; ++i) { + charset[i] = 0; + } + pos = topDict.charsetOffset; + charsetFormat = getU8(pos++, &parsedOk); + if (charsetFormat == 0) { + for (i = 1; i < nGlyphs; ++i) { + charset[i] = (Gushort)getU16BE(pos, &parsedOk); + pos += 2; + if (!parsedOk) { + break; + } + } + } else if (charsetFormat == 1) { + i = 1; + while (i < nGlyphs) { + c = getU16BE(pos, &parsedOk); + pos += 2; + nLeft = getU8(pos++, &parsedOk); + if (!parsedOk) { + break; + } + for (j = 0; j <= nLeft && i < nGlyphs; ++j) { + charset[i++] = (Gushort)c++; + } + } + } else if (charsetFormat == 2) { + i = 1; + while (i < nGlyphs) { + c = getU16BE(pos, &parsedOk); + pos += 2; + nLeft = getU16BE(pos, &parsedOk); + pos += 2; + if (!parsedOk) { + break; + } + for (j = 0; j <= nLeft && i < nGlyphs; ++j) { + charset[i++] = (Gushort)c++; + } + } + } + if (!parsedOk) { + gfree(charset); + charset = NULL; + return gFalse; + } + } + return gTrue; +} + +int FoFiType1C::getOp(int pos, GBool charstring, GBool *ok) { + static char nybChars[16] = "0123456789.ee -"; + Type1COp op; + char buf[65]; + int b0, b1, nyb0, nyb1, x, i; + + b0 = getU8(pos++, ok); + op.isNum = gTrue; + op.isFP = gFalse; + + if (b0 == 28) { + x = getU8(pos++, ok); + x = (x << 8) | getU8(pos++, ok); + if (x & 0x8000) { + x |= ~0xffff; + } + op.num = x; + + } else if (!charstring && b0 == 29) { + x = getU8(pos++, ok); + x = (x << 8) | getU8(pos++, ok); + x = (x << 8) | getU8(pos++, ok); + x = (x << 8) | getU8(pos++, ok); + if (x & 0x80000000) { + x |= ~0xffffffff; + } + op.num = x; + + } else if (!charstring && b0 == 30) { + i = 0; + do { + b1 = getU8(pos++, ok); + nyb0 = b1 >> 4; + nyb1 = b1 & 0x0f; + if (nyb0 == 0xf) { + break; + } + buf[i++] = nybChars[nyb0]; + if (i == 64) { + break; + } + if (nyb0 == 0xc) { + buf[i++] = '-'; + } + if (i == 64) { + break; + } + if (nyb1 == 0xf) { + break; + } + buf[i++] = nybChars[nyb1]; + if (i == 64) { + break; + } + if (nyb1 == 0xc) { + buf[i++] = '-'; + } + } while (i < 64); + buf[i] = '\0'; + op.num = gatof(buf); + op.isFP = gTrue; + + } else if (b0 >= 32 && b0 <= 246) { + op.num = b0 - 139; + + } else if (b0 >= 247 && b0 <= 250) { + op.num = ((b0 - 247) << 8) + getU8(pos++, ok) + 108; + + } else if (b0 >= 251 && b0 <= 254) { + op.num = -((b0 - 251) << 8) - getU8(pos++, ok) - 108; + + } else if (charstring && b0 == 255) { + x = getU8(pos++, ok); + x = (x << 8) | getU8(pos++, ok); + x = (x << 8) | getU8(pos++, ok); + x = (x << 8) | getU8(pos++, ok); + if (x & 0x80000000) { + x |= ~0xffffffff; + } + op.num = (double)x / 65536.0; + op.isFP = gTrue; + + } else if (b0 == 12) { + op.isNum = gFalse; + op.op = 0x0c00 + getU8(pos++, ok); + + } else { + op.isNum = gFalse; + op.op = b0; + } + + if (nOps < 49) { + ops[nOps++] = op; + } + + return pos; +} + +// Convert the delta-encoded ops array to an array of ints. +int FoFiType1C::getDeltaIntArray(int *arr, int maxLen) { + int x; + int n, i; + + if ((n = nOps) > maxLen) { + n = maxLen; + } + x = 0; + for (i = 0; i < n; ++i) { + x += (int)ops[i].num; + arr[i] = x; + } + return n; +} + +// Convert the delta-encoded ops array to an array of doubles. +int FoFiType1C::getDeltaFPArray(double *arr, int maxLen) { + double x; + int n, i; + + if ((n = nOps) > maxLen) { + n = maxLen; + } + x = 0; + for (i = 0; i < n; ++i) { + x += ops[i].num; + arr[i] = x; + } + return n; +} + +void FoFiType1C::getIndex(int pos, Type1CIndex *idx, GBool *ok) { + idx->pos = pos; + idx->len = getU16BE(pos, ok); + if (idx->len == 0) { + // empty indexes are legal and contain just the length field + idx->offSize = 0; + idx->startPos = idx->endPos = pos + 2; + } else { + idx->offSize = getU8(pos + 2, ok); + if (idx->offSize < 1 || idx->offSize > 4) { + *ok = gFalse; + } + idx->startPos = pos + 3 + (idx->len + 1) * idx->offSize - 1; + if (idx->startPos < 0 || idx->startPos >= len) { + *ok = gFalse; + } + idx->endPos = idx->startPos + getUVarBE(pos + 3 + idx->len * idx->offSize, + idx->offSize, ok); + if (idx->endPos < idx->startPos || idx->endPos > len) { + *ok = gFalse; + } + } +} + +void FoFiType1C::getIndexVal(Type1CIndex *idx, int i, + Type1CIndexVal *val, GBool *ok) { + int pos0, pos1; + + if (i < 0 || i >= idx->len) { + *ok = gFalse; + return; + } + pos0 = idx->startPos + getUVarBE(idx->pos + 3 + i * idx->offSize, + idx->offSize, ok); + pos1 = idx->startPos + getUVarBE(idx->pos + 3 + (i + 1) * idx->offSize, + idx->offSize, ok); + if (pos0 < idx->startPos || pos0 > idx->endPos || + pos1 <= idx->startPos || pos1 > idx->endPos || + pos1 < pos0) { + *ok = gFalse; + } + val->pos = pos0; + val->len = pos1 - pos0; +} + +char *FoFiType1C::getString(int sid, char *buf, GBool *ok) { + Type1CIndexVal val; + int n; + + if (sid < 391) { + strcpy(buf, fofiType1CStdStrings[sid]); + } else { + sid -= 391; + getIndexVal(&stringIdx, sid, &val, ok); + if (*ok) { + if ((n = val.len) > 255) { + n = 255; + } + strncpy(buf, (char *)&file[val.pos], n); + buf[n] = '\0'; + } else { + buf[0] = '\0'; + } + } + return buf; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1C.h b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1C.h new file mode 100644 index 00000000000..694d5cc7a30 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/fofi/FoFiType1C.h @@ -0,0 +1,245 @@ +//======================================================================== +// +// FoFiType1C.h +// +// Copyright 1999-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef FOFITYPE1C_H +#define FOFITYPE1C_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" +#include "FoFiBase.h" + +class GooString; + +//------------------------------------------------------------------------ + +struct Type1CIndex { + int pos; // absolute position in file + int len; // length (number of entries) + int offSize; // offset size + int startPos; // position of start of index data - 1 + int endPos; // position one byte past end of the index +}; + +struct Type1CIndexVal { + int pos; // absolute position in file + int len; // length, in bytes +}; + +struct Type1CTopDict { + int firstOp; + + int versionSID; + int noticeSID; + int copyrightSID; + int fullNameSID; + int familyNameSID; + int weightSID; + int isFixedPitch; + double italicAngle; + double underlinePosition; + double underlineThickness; + int paintType; + int charstringType; + double fontMatrix[6]; + GBool hasFontMatrix; // CID fonts are allowed to put their + // FontMatrix in the FD instead of the + // top dict + int uniqueID; + double fontBBox[4]; + double strokeWidth; + int charsetOffset; + int encodingOffset; + int charStringsOffset; + int privateSize; + int privateOffset; + + // CIDFont entries + int registrySID; + int orderingSID; + int supplement; + int fdArrayOffset; + int fdSelectOffset; +}; + +#define type1CMaxBlueValues 14 +#define type1CMaxOtherBlues 10 +#define type1CMaxStemSnap 12 + +struct Type1CPrivateDict { + double fontMatrix[6]; + GBool hasFontMatrix; + int blueValues[type1CMaxBlueValues]; + int nBlueValues; + int otherBlues[type1CMaxOtherBlues]; + int nOtherBlues; + int familyBlues[type1CMaxBlueValues]; + int nFamilyBlues; + int familyOtherBlues[type1CMaxOtherBlues]; + int nFamilyOtherBlues; + double blueScale; + int blueShift; + int blueFuzz; + double stdHW; + GBool hasStdHW; + double stdVW; + GBool hasStdVW; + double stemSnapH[type1CMaxStemSnap]; + int nStemSnapH; + double stemSnapV[type1CMaxStemSnap]; + int nStemSnapV; + GBool forceBold; + GBool hasForceBold; + double forceBoldThreshold; + int languageGroup; + double expansionFactor; + int initialRandomSeed; + int subrsOffset; + double defaultWidthX; + GBool defaultWidthXFP; + double nominalWidthX; + GBool nominalWidthXFP; +}; + +struct Type1COp { + GBool isNum; // true -> number, false -> operator + GBool isFP; // true -> floating point number, false -> int + union { + double num; // if num is true + int op; // if num is false + }; +}; + +struct Type1CEexecBuf { + FoFiOutputFunc outputFunc; + void *outputStream; + GBool ascii; // ASCII encoding? + Gushort r1; // eexec encryption key + int line; // number of eexec chars left on current line +}; + +//------------------------------------------------------------------------ +// FoFiType1C +//------------------------------------------------------------------------ + +class FoFiType1C: public FoFiBase { +public: + + // Create a FoFiType1C object from a memory buffer. + static FoFiType1C *make(char *fileA, int lenA); + + // Create a FoFiType1C object from a file on disk. + static FoFiType1C *load(char *fileName); + + virtual ~FoFiType1C(); + + // Return the font name. + char *getName(); + + // Return the encoding, as an array of 256 names (any of which may + // be NULL). This is only useful with 8-bit fonts. + char **getEncoding(); + + // Return the mapping from CIDs to GIDs, and return the number of + // CIDs in *<nCIDs>. This is only useful for CID fonts. + Gushort *getCIDToGIDMap(int *nCIDs); + + // Convert to a Type 1 font, suitable for embedding in a PostScript + // file. This is only useful with 8-bit fonts. If <newEncoding> is + // not NULL, it will be used in place of the encoding in the Type 1C + // font. If <ascii> is true the eexec section will be hex-encoded, + // otherwise it will be left as binary data. If <psName> is non-NULL, + // it will be used as the PostScript font name. + void convertToType1(char *psName, char **newEncoding, GBool ascii, + FoFiOutputFunc outputFunc, void *outputStream); + + // Convert to a Type 0 CIDFont, suitable for embedding in a + // PostScript file. <psName> will be used as the PostScript font + // name. + void convertToCIDType0(char *psName, + FoFiOutputFunc outputFunc, void *outputStream); + + // Convert to a Type 0 (but non-CID) composite font, suitable for + // embedding in a PostScript file. <psName> will be used as the + // PostScript font name. + void convertToType0(char *psName, + FoFiOutputFunc outputFunc, void *outputStream); + +private: + + FoFiType1C(char *fileA, int lenA, GBool freeFileDataA); + void eexecCvtGlyph(Type1CEexecBuf *eb, char *glyphName, + int offset, int nBytes, + Type1CIndex *subrIdx, + Type1CPrivateDict *pDict); + void cvtGlyph(int offset, int nBytes, GooString *charBuf, + Type1CIndex *subrIdx, Type1CPrivateDict *pDict, + GBool top); + void cvtGlyphWidth(GBool useOp, GooString *charBuf, + Type1CPrivateDict *pDict); + void cvtNum(double x, GBool isFP, GooString *charBuf); + void eexecWrite(Type1CEexecBuf *eb, char *s); + void eexecWriteCharstring(Type1CEexecBuf *eb, Guchar *s, int n); + GBool parse(); + void readTopDict(); + void readFD(int offset, int length, Type1CPrivateDict *pDict); + void readPrivateDict(int offset, int length, Type1CPrivateDict *pDict); + void readFDSelect(); + void buildEncoding(); + GBool readCharset(); + int getOp(int pos, GBool charstring, GBool *ok); + int getDeltaIntArray(int *arr, int maxLen); + int getDeltaFPArray(double *arr, int maxLen); + void getIndex(int pos, Type1CIndex *idx, GBool *ok); + void getIndexVal(Type1CIndex *idx, int i, Type1CIndexVal *val, GBool *ok); + char *getString(int sid, char *buf, GBool *ok); + + GooString *name; + char **encoding; + + Type1CIndex nameIdx; + Type1CIndex topDictIdx; + Type1CIndex stringIdx; + Type1CIndex gsubrIdx; + Type1CIndex charStringsIdx; + + Type1CTopDict topDict; + Type1CPrivateDict *privateDicts; + + int nGlyphs; + int nFDs; + Guchar *fdSelect; + Gushort *charset; + int gsubrBias; + + GBool parsedOk; + + Type1COp ops[49]; // operands and operator + int nOps; // number of operands + int nHints; // number of hints for the current glyph + GBool firstOp; // true if we haven't hit the first op yet + GBool openPath; // true if there is an unclosed path +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/fofi/Makefile.am b/Build/source/libs/poppler/poppler-0.18.4/fofi/Makefile.am new file mode 100644 index 00000000000..7a302486505 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/fofi/Makefile.am @@ -0,0 +1,26 @@ +INCLUDES = \ + -I$(top_srcdir) + +noinst_LTLIBRARIES = libfofi.la + +if ENABLE_XPDF_HEADERS +poppler_fofi_includedir = $(includedir)/poppler/fofi +poppler_fofi_include_HEADERS = \ + FoFiBase.h \ + FoFiEncodings.h \ + FoFiTrueType.h \ + FoFiType1.h \ + FoFiType1C.h +endif + +libfofi_la_SOURCES = \ + FoFiBase.cc \ + FoFiBase.h \ + FoFiEncodings.cc \ + FoFiEncodings.h \ + FoFiTrueType.cc \ + FoFiTrueType.h \ + FoFiType1.cc \ + FoFiType1.h \ + FoFiType1C.cc \ + FoFiType1C.h diff --git a/Build/source/libs/poppler/poppler-0.18.4/fofi/Makefile.in b/Build/source/libs/poppler/poppler-0.18.4/fofi/Makefile.in new file mode 100644 index 00000000000..0c545492d4a --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/fofi/Makefile.in @@ -0,0 +1,668 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = fofi +DIST_COMMON = $(am__poppler_fofi_include_HEADERS_DIST) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/define-dir.m4 $(top_srcdir)/m4/gtk-doc.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/introspection.m4 \ + $(top_srcdir)/m4/libjpeg.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h \ + $(top_builddir)/poppler/poppler-config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libfofi_la_LIBADD = +am_libfofi_la_OBJECTS = FoFiBase.lo FoFiEncodings.lo FoFiTrueType.lo \ + FoFiType1.lo FoFiType1C.lo +libfofi_la_OBJECTS = $(am_libfofi_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/poppler +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_$(V)) +am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) +am__v_CXX_0 = @echo " CXX " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_$(V)) +am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CXXLD_0 = @echo " CXXLD " $@; +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libfofi_la_SOURCES) +DIST_SOURCES = $(libfofi_la_SOURCES) +am__poppler_fofi_include_HEADERS_DIST = FoFiBase.h FoFiEncodings.h \ + FoFiTrueType.h FoFiType1.h FoFiType1C.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(poppler_fofi_includedir)" +HEADERS = $(poppler_fofi_include_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CAIRO_CFLAGS = @CAIRO_CFLAGS@ +CAIRO_FEATURE = @CAIRO_FEATURE@ +CAIRO_LIBS = @CAIRO_LIBS@ +CAIRO_REQ = @CAIRO_REQ@ +CAIRO_VERSION = @CAIRO_VERSION@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ +FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_CONFIG = @FREETYPE_CONFIG@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GLIB_REQ = @GLIB_REQ@ +GLIB_REQUIRED = @GLIB_REQUIRED@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +GTK_TEST_CFLAGS = @GTK_TEST_CFLAGS@ +GTK_TEST_LIBS = @GTK_TEST_LIBS@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ +INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ +INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ +INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ +INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ +INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ +INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ +LCMS_CFLAGS = @LCMS_CFLAGS@ +LCMS_LIBS = @LCMS_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBJPEG_LIBS = @LIBJPEG_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBOPENJPEG_LIBS = @LIBOPENJPEG_LIBS@ +LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ +LIBPNG_LIBS = @LIBPNG_LIBS@ +LIBS = @LIBS@ +LIBTIFF_LIBS = @LIBTIFF_LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MOCQT4 = @MOCQT4@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PC_REQUIRES = @PC_REQUIRES@ +PC_REQUIRES_PRIVATE = @PC_REQUIRES_PRIVATE@ +PDFTOCAIRO_CFLAGS = @PDFTOCAIRO_CFLAGS@ +PDFTOCAIRO_LIBS = @PDFTOCAIRO_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POPPLER_DATADIR = @POPPLER_DATADIR@ +POPPLER_GLIB_CFLAGS = @POPPLER_GLIB_CFLAGS@ +POPPLER_GLIB_DISABLE_DEPRECATED = @POPPLER_GLIB_DISABLE_DEPRECATED@ +POPPLER_GLIB_DISABLE_SINGLE_INCLUDES = @POPPLER_GLIB_DISABLE_SINGLE_INCLUDES@ +POPPLER_GLIB_LIBS = @POPPLER_GLIB_LIBS@ +POPPLER_MAJOR_VERSION = @POPPLER_MAJOR_VERSION@ +POPPLER_MICRO_VERSION = @POPPLER_MICRO_VERSION@ +POPPLER_MINOR_VERSION = @POPPLER_MINOR_VERSION@ +POPPLER_QT4_CFLAGS = @POPPLER_QT4_CFLAGS@ +POPPLER_QT4_CXXFLAGS = @POPPLER_QT4_CXXFLAGS@ +POPPLER_QT4_LIBS = @POPPLER_QT4_LIBS@ +POPPLER_QT4_TEST_CFLAGS = @POPPLER_QT4_TEST_CFLAGS@ +POPPLER_QT4_TEST_LIBS = @POPPLER_QT4_TEST_LIBS@ +POPPLER_VERSION = @POPPLER_VERSION@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +auto_import_flags = @auto_import_flags@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +create_shared_lib = @create_shared_lib@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +win32_libs = @win32_libs@ +INCLUDES = \ + -I$(top_srcdir) + +noinst_LTLIBRARIES = libfofi.la +@ENABLE_XPDF_HEADERS_TRUE@poppler_fofi_includedir = $(includedir)/poppler/fofi +@ENABLE_XPDF_HEADERS_TRUE@poppler_fofi_include_HEADERS = \ +@ENABLE_XPDF_HEADERS_TRUE@ FoFiBase.h \ +@ENABLE_XPDF_HEADERS_TRUE@ FoFiEncodings.h \ +@ENABLE_XPDF_HEADERS_TRUE@ FoFiTrueType.h \ +@ENABLE_XPDF_HEADERS_TRUE@ FoFiType1.h \ +@ENABLE_XPDF_HEADERS_TRUE@ FoFiType1C.h + +libfofi_la_SOURCES = \ + FoFiBase.cc \ + FoFiBase.h \ + FoFiEncodings.cc \ + FoFiEncodings.h \ + FoFiTrueType.cc \ + FoFiTrueType.h \ + FoFiType1.cc \ + FoFiType1.h \ + FoFiType1C.cc \ + FoFiType1C.h + +all: all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign fofi/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign fofi/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libfofi.la: $(libfofi_la_OBJECTS) $(libfofi_la_DEPENDENCIES) + $(AM_V_CXXLD)$(CXXLINK) $(libfofi_la_OBJECTS) $(libfofi_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FoFiBase.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FoFiEncodings.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FoFiTrueType.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FoFiType1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FoFiType1C.Plo@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-poppler_fofi_includeHEADERS: $(poppler_fofi_include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(poppler_fofi_includedir)" || $(MKDIR_P) "$(DESTDIR)$(poppler_fofi_includedir)" + @list='$(poppler_fofi_include_HEADERS)'; test -n "$(poppler_fofi_includedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(poppler_fofi_includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(poppler_fofi_includedir)" || exit $$?; \ + done + +uninstall-poppler_fofi_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(poppler_fofi_include_HEADERS)'; test -n "$(poppler_fofi_includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(poppler_fofi_includedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(poppler_fofi_includedir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(poppler_fofi_includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-poppler_fofi_includeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-poppler_fofi_includeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-poppler_fofi_includeHEADERS \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am \ + uninstall-poppler_fofi_includeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/FixedPoint.cc b/Build/source/libs/poppler/poppler-0.18.4/goo/FixedPoint.cc new file mode 100644 index 00000000000..79a6a9ae1f4 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/FixedPoint.cc @@ -0,0 +1,120 @@ +//======================================================================== +// +// FixedPoint.cc +// +// Fixed point type, with C++ operators. +// +// Copyright 2004 Glyph & Cog, LLC +// +//======================================================================== + +#include <config.h> + +#if USE_FIXEDPOINT + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include "FixedPoint.h" + +#define ln2 ((FixedPoint)0.69314718) + +#define ln2 ((FixedPoint)0.69314718) + +FixedPoint FixedPoint::sqrt(FixedPoint x) { + FixedPoint y0, y1, z; + + if (x.val <= 0) { + y1.val = 0; + } else { + y1.val = x.val == 1 ? 2 : x.val >> 1; + do { + y0.val = y1.val; + z = x / y0; + y1.val = (y0.val + z.val) >> 1; + } while (::abs(y0.val - y1.val) > 1); + } + return y1; +} + +FixedPoint FixedPoint::pow(FixedPoint x, FixedPoint y) { + FixedPoint t, t2, lnx0, lnx, z0, z; + int d, n, i; + + if (y.val <= 0) { + z.val = 0; + } else { + // y * ln(x) + t = (x - 1) / (x + 1); + t2 = t * t; + d = 1; + lnx = 0; + do { + lnx0 = lnx; + lnx += t / d; + t *= t2; + d += 2; + } while (::abs(lnx.val - lnx0.val) > 2); + lnx.val <<= 1; + t = y * lnx; + // exp(y * ln(x)) + n = floor(t / ln2); + t -= ln2 * n; + t2 = t; + d = 1; + i = 1; + z = 1; + do { + z0 = z; + z += t2 / d; + t2 *= t; + ++i; + d *= i; + } while (::abs(z.val - z0.val) > 2 && d < (1 << fixptShift)); + if (n >= 0) { + z.val <<= n; + } else if (n < 0) { + z.val >>= -n; + } + } + return z; +} + +int FixedPoint::mul(int x, int y) { +#if 1 //~tmp + return ((FixPtInt64)x * y) >> fixptShift; +#else + int ah0, ah, bh, al, bl; + ah0 = x & fixptMaskH; + ah = x >> fixptShift; + al = x - ah0; + bh = y >> fixptShift; + bl = y - (bh << fixptShift); + return ah0 * bh + ah * bl + al * bh + ((al * bl) >> fixptShift); +#endif +} + +int FixedPoint::div(int x, int y) { +#if 1 //~tmp + return ((FixPtInt64)x << fixptShift) / y; +#else +#endif +} + +GBool FixedPoint::divCheck(FixedPoint x, FixedPoint y, FixedPoint *result) { +#if 1 //~tmp + FixPtInt64 z; + + z = ((FixPtInt64)x.val << fixptShift) / y.val; + if ((z == 0 && x != 0) || + z >= ((FixPtInt64)1 << 31) || z < -((FixPtInt64)1 << 31)) { + return gFalse; + } + result->val = z; + return gTrue; +#else +#endif +} + +#endif // USE_FIXEDPOINT diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/FixedPoint.h b/Build/source/libs/poppler/poppler-0.18.4/goo/FixedPoint.h new file mode 100644 index 00000000000..08936bc6f2a --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/FixedPoint.h @@ -0,0 +1,155 @@ +//======================================================================== +// +// FixedPoint.h +// +// Fixed point type, with C++ operators. +// +// Copyright 2004 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef FIXEDPOINT_H +#define FIXEDPOINT_H + +#include "poppler/poppler-config.h" + +#if USE_FIXEDPOINT + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include <stdio.h> +#include <stdlib.h> +#include "gtypes.h" + +#define fixptShift 16 +#define fixptMaskL ((1 << fixptShift) - 1) +#define fixptMaskH (~fixptMaskL) + +typedef long long FixPtInt64; + +class FixedPoint { +public: + + FixedPoint() { val = 0; } + FixedPoint(const FixedPoint &x) { val = x.val; } + FixedPoint(double x) { val = (int)(x * (1 << fixptShift) + 0.5); } + FixedPoint(int x) { val = x << fixptShift; } + FixedPoint(long x) { val = x << fixptShift; } + + operator float() + { return (float) val * ((float)1 / (float)(1 << fixptShift)); } + operator double() + { return (double) val * (1.0 / (double)(1 << fixptShift)); } + operator int() + { return val >> fixptShift; } + + int getRaw() { return val; } + + FixedPoint operator =(FixedPoint x) { val = x.val; return *this; } + + int operator ==(FixedPoint x) { return val == x.val; } + int operator ==(double x) { return *this == (FixedPoint)x; } + int operator ==(int x) { return *this == (FixedPoint)x; } + int operator ==(long x) { return *this == (FixedPoint)x; } + + int operator !=(FixedPoint x) { return val != x.val; } + int operator !=(double x) { return *this != (FixedPoint)x; } + int operator !=(int x) { return *this != (FixedPoint)x; } + int operator !=(long x) { return *this != (FixedPoint)x; } + + int operator <(FixedPoint x) { return val < x.val; } + int operator <(double x) { return *this < (FixedPoint)x; } + int operator <(int x) { return *this < (FixedPoint)x; } + int operator <(long x) { return *this < (FixedPoint)x; } + + int operator <=(FixedPoint x) { return val <= x.val; } + int operator <=(double x) { return *this <= (FixedPoint)x; } + int operator <=(int x) { return *this <= (FixedPoint)x; } + int operator <=(long x) { return *this <= (FixedPoint)x; } + + int operator >(FixedPoint x) { return val > x.val; } + int operator >(double x) { return *this > (FixedPoint)x; } + int operator >(int x) { return *this > (FixedPoint)x; } + int operator >(long x) { return *this > (FixedPoint)x; } + + int operator >=(FixedPoint x) { return val >= x.val; } + int operator >=(double x) { return *this >= (FixedPoint)x; } + int operator >=(int x) { return *this >= (FixedPoint)x; } + int operator >=(long x) { return *this >= (FixedPoint)x; } + + FixedPoint operator -() { return make(-val); } + + FixedPoint operator +(FixedPoint x) { return make(val + x.val); } + FixedPoint operator +(double x) { return *this + (FixedPoint)x; } + FixedPoint operator +(int x) { return *this + (FixedPoint)x; } + FixedPoint operator +(long x) { return *this + (FixedPoint)x; } + + FixedPoint operator +=(FixedPoint x) { val = val + x.val; return *this; } + FixedPoint operator +=(double x) { return *this += (FixedPoint)x; } + FixedPoint operator +=(int x) { return *this += (FixedPoint)x; } + FixedPoint operator +=(long x) { return *this += (FixedPoint)x; } + + FixedPoint operator -(FixedPoint x) { return make(val - x.val); } + FixedPoint operator -(double x) { return *this - (FixedPoint)x; } + FixedPoint operator -(int x) { return *this - (FixedPoint)x; } + FixedPoint operator -(long x) { return *this - (FixedPoint)x; } + + FixedPoint operator -=(FixedPoint x) { val = val - x.val; return *this; } + FixedPoint operator -=(double x) { return *this -= (FixedPoint)x; } + FixedPoint operator -=(int x) { return *this -= (FixedPoint)x; } + FixedPoint operator -=(long x) { return *this -= (FixedPoint)x; } + + FixedPoint operator *(FixedPoint x) { return make(mul(val, x.val)); } + FixedPoint operator *(double x) { return *this * (FixedPoint)x; } + FixedPoint operator *(int x) { return *this * (FixedPoint)x; } + FixedPoint operator *(long x) { return *this * (FixedPoint)x; } + + FixedPoint operator *=(FixedPoint x) { val = mul(val, x.val); return *this; } + FixedPoint operator *=(double x) { return *this *= (FixedPoint)x; } + FixedPoint operator *=(int x) { return *this *= (FixedPoint)x; } + FixedPoint operator *=(long x) { return *this *= (FixedPoint)x; } + + FixedPoint operator /(FixedPoint x) { return make(div(val, x.val)); } + FixedPoint operator /(double x) { return *this / (FixedPoint)x; } + FixedPoint operator /(int x) { return *this / (FixedPoint)x; } + FixedPoint operator /(long x) { return *this / (FixedPoint)x; } + + FixedPoint operator /=(FixedPoint x) { val = div(val, x.val); return *this; } + FixedPoint operator /=(double x) { return *this /= (FixedPoint)x; } + FixedPoint operator /=(int x) { return *this /= (FixedPoint)x; } + FixedPoint operator /=(long x) { return *this /= (FixedPoint)x; } + + static FixedPoint abs(FixedPoint x) { return make(::abs(x.val)); } + + static int floor(FixedPoint x) { return x.val >> fixptShift; } + + static int ceil(FixedPoint x) + { return (x.val & fixptMaskL) ? ((x.val >> fixptShift) + 1) + : (x.val >> fixptShift); } + + static int round(FixedPoint x) + { return (x.val + (1 << (fixptShift - 1))) >> fixptShift; } + + static FixedPoint sqrt(FixedPoint x); + + static FixedPoint pow(FixedPoint x, FixedPoint y); + + // Compute *result = x/y; return false if there is an underflow or + // overflow. + static GBool divCheck(FixedPoint x, FixedPoint y, FixedPoint *result); + +private: + + static FixedPoint make(int valA) { FixedPoint x; x.val = valA; return x; } + + static int mul(int x, int y); + static int div(int x, int y); + + int val; // 16.16 fixed point +}; + +#endif // USE_FIXEDPOINT + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/GooHash.cc b/Build/source/libs/poppler/poppler-0.18.4/goo/GooHash.cc new file mode 100644 index 00000000000..5da9d69f82c --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/GooHash.cc @@ -0,0 +1,380 @@ +//======================================================================== +// +// GooHash.cc +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include "gmem.h" +#include "GooString.h" +#include "GooHash.h" + +//------------------------------------------------------------------------ + +struct GooHashBucket { + GooString *key; + union { + void *p; + int i; + } val; + GooHashBucket *next; +}; + +struct GooHashIter { + int h; + GooHashBucket *p; +}; + +//------------------------------------------------------------------------ + +GooHash::GooHash(GBool deleteKeysA) { + int h; + + deleteKeys = deleteKeysA; + size = 7; + tab = (GooHashBucket **)gmallocn(size, sizeof(GooHashBucket *)); + for (h = 0; h < size; ++h) { + tab[h] = NULL; + } + len = 0; +} + +GooHash::~GooHash() { + GooHashBucket *p; + int h; + + for (h = 0; h < size; ++h) { + while (tab[h]) { + p = tab[h]; + tab[h] = p->next; + if (deleteKeys) { + delete p->key; + } + delete p; + } + } + gfree(tab); +} + +void GooHash::add(GooString *key, void *val) { + GooHashBucket *p; + int h; + + // expand the table if necessary + if (len >= size) { + expand(); + } + + // add the new symbol + p = new GooHashBucket; + p->key = key; + p->val.p = val; + h = hash(key); + p->next = tab[h]; + tab[h] = p; + ++len; +} + +void GooHash::add(GooString *key, int val) { + GooHashBucket *p; + int h; + + // expand the table if necessary + if (len >= size) { + expand(); + } + + // add the new symbol + p = new GooHashBucket; + p->key = key; + p->val.i = val; + h = hash(key); + p->next = tab[h]; + tab[h] = p; + ++len; +} + +void GooHash::replace(GooString *key, void *val) { + GooHashBucket *p; + int h; + + if ((p = find(key, &h))) { + p->val.p = val; + delete key; + } else { + add(key, val); + } +} + +void GooHash::replace(GooString *key, int val) { + GooHashBucket *p; + int h; + + if ((p = find(key, &h))) { + p->val.i = val; + delete key; + } else { + add(key, val); + } +} + +void *GooHash::lookup(GooString *key) { + GooHashBucket *p; + int h; + + if (!(p = find(key, &h))) { + return NULL; + } + return p->val.p; +} + +int GooHash::lookupInt(GooString *key) { + GooHashBucket *p; + int h; + + if (!(p = find(key, &h))) { + return 0; + } + return p->val.i; +} + +void *GooHash::lookup(char *key) { + GooHashBucket *p; + int h; + + if (!(p = find(key, &h))) { + return NULL; + } + return p->val.p; +} + +int GooHash::lookupInt(char *key) { + GooHashBucket *p; + int h; + + if (!(p = find(key, &h))) { + return 0; + } + return p->val.i; +} + +void *GooHash::remove(GooString *key) { + GooHashBucket *p; + GooHashBucket **q; + void *val; + int h; + + if (!(p = find(key, &h))) { + return NULL; + } + q = &tab[h]; + while (*q != p) { + q = &((*q)->next); + } + *q = p->next; + if (deleteKeys) { + delete p->key; + } + val = p->val.p; + delete p; + --len; + return val; +} + +int GooHash::removeInt(GooString *key) { + GooHashBucket *p; + GooHashBucket **q; + int val; + int h; + + if (!(p = find(key, &h))) { + return 0; + } + q = &tab[h]; + while (*q != p) { + q = &((*q)->next); + } + *q = p->next; + if (deleteKeys) { + delete p->key; + } + val = p->val.i; + delete p; + --len; + return val; +} + +void *GooHash::remove(char *key) { + GooHashBucket *p; + GooHashBucket **q; + void *val; + int h; + + if (!(p = find(key, &h))) { + return NULL; + } + q = &tab[h]; + while (*q != p) { + q = &((*q)->next); + } + *q = p->next; + if (deleteKeys) { + delete p->key; + } + val = p->val.p; + delete p; + --len; + return val; +} + +int GooHash::removeInt(char *key) { + GooHashBucket *p; + GooHashBucket **q; + int val; + int h; + + if (!(p = find(key, &h))) { + return 0; + } + q = &tab[h]; + while (*q != p) { + q = &((*q)->next); + } + *q = p->next; + if (deleteKeys) { + delete p->key; + } + val = p->val.i; + delete p; + --len; + return val; +} + +void GooHash::startIter(GooHashIter **iter) { + *iter = new GooHashIter; + (*iter)->h = -1; + (*iter)->p = NULL; +} + +GBool GooHash::getNext(GooHashIter **iter, GooString **key, void **val) { + if (!*iter) { + return gFalse; + } + if ((*iter)->p) { + (*iter)->p = (*iter)->p->next; + } + while (!(*iter)->p) { + if (++(*iter)->h == size) { + delete *iter; + *iter = NULL; + return gFalse; + } + (*iter)->p = tab[(*iter)->h]; + } + *key = (*iter)->p->key; + *val = (*iter)->p->val.p; + return gTrue; +} + +GBool GooHash::getNext(GooHashIter **iter, GooString **key, int *val) { + if (!*iter) { + return gFalse; + } + if ((*iter)->p) { + (*iter)->p = (*iter)->p->next; + } + while (!(*iter)->p) { + if (++(*iter)->h == size) { + delete *iter; + *iter = NULL; + return gFalse; + } + (*iter)->p = tab[(*iter)->h]; + } + *key = (*iter)->p->key; + *val = (*iter)->p->val.i; + return gTrue; +} + +void GooHash::killIter(GooHashIter **iter) { + delete *iter; + *iter = NULL; +} + +void GooHash::expand() { + GooHashBucket **oldTab; + GooHashBucket *p; + int oldSize, h, i; + + oldSize = size; + oldTab = tab; + size = 2*size + 1; + tab = (GooHashBucket **)gmallocn(size, sizeof(GooHashBucket *)); + for (h = 0; h < size; ++h) { + tab[h] = NULL; + } + for (i = 0; i < oldSize; ++i) { + while (oldTab[i]) { + p = oldTab[i]; + oldTab[i] = oldTab[i]->next; + h = hash(p->key); + p->next = tab[h]; + tab[h] = p; + } + } + gfree(oldTab); +} + +GooHashBucket *GooHash::find(GooString *key, int *h) { + GooHashBucket *p; + + *h = hash(key); + for (p = tab[*h]; p; p = p->next) { + if (!p->key->cmp(key)) { + return p; + } + } + return NULL; +} + +GooHashBucket *GooHash::find(char *key, int *h) { + GooHashBucket *p; + + *h = hash(key); + for (p = tab[*h]; p; p = p->next) { + if (!p->key->cmp(key)) { + return p; + } + } + return NULL; +} + +int GooHash::hash(GooString *key) { + char *p; + unsigned int h; + int i; + + h = 0; + for (p = key->getCString(), i = 0; i < key->getLength(); ++p, ++i) { + h = 17 * h + (int)(*p & 0xff); + } + return (int)(h % size); +} + +int GooHash::hash(char *key) { + char *p; + unsigned int h; + + h = 0; + for (p = key; *p; ++p) { + h = 17 * h + (int)(*p & 0xff); + } + return (int)(h % size); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/GooHash.h b/Build/source/libs/poppler/poppler-0.18.4/goo/GooHash.h new file mode 100644 index 00000000000..bdcf1c43ece --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/GooHash.h @@ -0,0 +1,76 @@ +//======================================================================== +// +// GooHash.h +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef GHASH_H +#define GHASH_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "gtypes.h" + +class GooString; +struct GooHashBucket; +struct GooHashIter; + +//------------------------------------------------------------------------ + +class GooHash { +public: + + GooHash(GBool deleteKeysA = gFalse); + ~GooHash(); + void add(GooString *key, void *val); + void add(GooString *key, int val); + void replace(GooString *key, void *val); + void replace(GooString *key, int val); + void *lookup(GooString *key); + int lookupInt(GooString *key); + void *lookup(char *key); + int lookupInt(char *key); + void *remove(GooString *key); + int removeInt(GooString *key); + void *remove(char *key); + int removeInt(char *key); + int getLength() { return len; } + void startIter(GooHashIter **iter); + GBool getNext(GooHashIter **iter, GooString **key, void **val); + GBool getNext(GooHashIter **iter, GooString **key, int *val); + void killIter(GooHashIter **iter); + +private: + + void expand(); + GooHashBucket *find(GooString *key, int *h); + GooHashBucket *find(char *key, int *h); + int hash(GooString *key); + int hash(char *key); + + GBool deleteKeys; // set if key strings should be deleted + int size; // number of buckets + int len; // number of entries + GooHashBucket **tab; +}; + +#define deleteGooHash(hash, T) \ + do { \ + GooHash *_hash = (hash); \ + { \ + GooHashIter *_iter; \ + GooString *_key; \ + void *_p; \ + _hash->startIter(&_iter); \ + while (_hash->getNext(&_iter, &_key, &_p)) { \ + delete (T*)_p; \ + } \ + delete _hash; \ + } \ + } while(0) + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/GooLikely.h b/Build/source/libs/poppler/poppler-0.18.4/goo/GooLikely.h new file mode 100644 index 00000000000..724ccf00870 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/GooLikely.h @@ -0,0 +1,22 @@ +//======================================================================== +// +// GooLikely.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright (C) 2008 Kees Cook <kees@outflux.net> +// +//======================================================================== + +#ifndef GOOLIKELY_H +#define GOOLIKELY_H + +#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__) +# define likely(x) __builtin_expect((x), 1) +# define unlikely(x) __builtin_expect((x), 0) +#else +# define likely(x) (x) +# define unlikely(x) (x) +#endif + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/GooList.cc b/Build/source/libs/poppler/poppler-0.18.4/goo/GooList.cc new file mode 100644 index 00000000000..dc6e4e21e00 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/GooList.cc @@ -0,0 +1,97 @@ +//======================================================================== +// +// GooList.cc +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include <string.h> +#include "gmem.h" +#include "GooList.h" + +//------------------------------------------------------------------------ +// GooList +//------------------------------------------------------------------------ + +GooList::GooList() { + size = 8; + data = (void **)gmallocn(size, sizeof(void*)); + length = 0; + inc = 0; +} + +GooList::GooList(int sizeA) { + size = sizeA; + data = (void **)gmallocn(size, sizeof(void*)); + length = 0; + inc = 0; +} + +GooList::~GooList() { + gfree(data); +} + +void GooList::append(void *p) { + if (length >= size) { + expand(); + } + data[length++] = p; +} + +void GooList::append(GooList *list) { + int i; + + while (length + list->length > size) { + expand(); + } + for (i = 0; i < list->length; ++i) { + data[length++] = list->data[i]; + } +} + +void GooList::insert(int i, void *p) { + if (length >= size) { + expand(); + } + if (i < length) { + memmove(data+i+1, data+i, (length - i) * sizeof(void *)); + } + data[i] = p; + ++length; +} + +void *GooList::del(int i) { + void *p; + + p = data[i]; + if (i < length - 1) { + memmove(data+i, data+i+1, (length - i - 1) * sizeof(void *)); + } + --length; + if (size - length >= ((inc > 0) ? inc : size/2)) { + shrink(); + } + return p; +} + +void GooList::sort(int (*cmp)(const void *obj1, const void *obj2)) { + qsort(data, length, sizeof(void *), cmp); +} + +void GooList::expand() { + size += (inc > 0) ? inc : size; + data = (void **)greallocn(data, size, sizeof(void*)); +} + +void GooList::shrink() { + size -= (inc > 0) ? inc : size/2; + data = (void **)greallocn(data, size, sizeof(void*)); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/GooList.h b/Build/source/libs/poppler/poppler-0.18.4/goo/GooList.h new file mode 100644 index 00000000000..576f3e8142d --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/GooList.h @@ -0,0 +1,94 @@ +//======================================================================== +// +// GooList.h +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef GLIST_H +#define GLIST_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "gtypes.h" + +//------------------------------------------------------------------------ +// GooList +//------------------------------------------------------------------------ + +class GooList { +public: + + // Create an empty list. + GooList(); + + // Create an empty list with space for <size1> elements. + GooList(int sizeA); + + // Destructor - does not free pointed-to objects. + ~GooList(); + + //----- general + + // Get the number of elements. + int getLength() { return length; } + + //----- ordered list support + + // Return the <i>th element. + // Assumes 0 <= i < length. + void *get(int i) { return data[i]; } + + // Append an element to the end of the list. + void append(void *p); + + // Append another list to the end of this one. + void append(GooList *list); + + // Insert an element at index <i>. + // Assumes 0 <= i <= length. + void insert(int i, void *p); + + // Deletes and returns the element at index <i>. + // Assumes 0 <= i < length. + void *del(int i); + + // Sort the list accoring to the given comparison function. + // NB: this sorts an array of pointers, so the pointer args need to + // be double-dereferenced. + void sort(int (*cmp)(const void *ptr1, const void *ptr2)); + + //----- control + + // Set allocation increment to <inc>. If inc > 0, that many + // elements will be allocated every time the list is expanded. + // If inc <= 0, the list will be doubled in size. + void setAllocIncr(int incA) { inc = incA; } + +private: + + void expand(); + void shrink(); + + void **data; // the list elements + int size; // size of data array + int length; // number of elements on list + int inc; // allocation increment +}; + +#define deleteGooList(list, T) \ + do { \ + GooList *_list = (list); \ + { \ + int _i; \ + for (_i = 0; _i < _list->getLength(); ++_i) { \ + delete (T*)_list->get(_i); \ + } \ + delete _list; \ + } \ + } while (0) + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/GooMutex.h b/Build/source/libs/poppler/poppler-0.18.4/goo/GooMutex.h new file mode 100644 index 00000000000..3f53a626a67 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/GooMutex.h @@ -0,0 +1,63 @@ +//======================================================================== +// +// GooMutex.h +// +// Portable mutex macros. +// +// Copyright 2002-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef GMUTEX_H +#define GMUTEX_H + +// Usage: +// +// GooMutex m; +// gInitMutex(&m); +// ... +// gLockMutex(&m); +// ... critical section ... +// gUnlockMutex(&m); +// ... +// gDestroyMutex(&m); + +#ifdef _WIN32 + +#include <windows.h> + +typedef CRITICAL_SECTION GooMutex; + +#define gInitMutex(m) InitializeCriticalSection(m) +#define gDestroyMutex(m) DeleteCriticalSection(m) +#define gLockMutex(m) EnterCriticalSection(m) +#define gUnlockMutex(m) LeaveCriticalSection(m) + +#else // assume pthreads + +#include <pthread.h> + +typedef pthread_mutex_t GooMutex; + +#define gInitMutex(m) pthread_mutex_init(m, NULL) +#define gDestroyMutex(m) pthread_mutex_destroy(m) +#define gLockMutex(m) pthread_mutex_lock(m) +#define gUnlockMutex(m) pthread_mutex_unlock(m) + +#endif + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/GooString.cc b/Build/source/libs/poppler/poppler-0.18.4/goo/GooString.cc new file mode 100644 index 00000000000..31c95b1ac9b --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/GooString.cc @@ -0,0 +1,807 @@ +//======================================================================== +// +// GooString.cc +// +// Simple variable-length string type. +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// Copyright (C) 2007 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2008-2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2011 Kenji Uno <ku@digitaldolphins.jp> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include <stddef.h> +#include <string.h> +#include <ctype.h> +#include <assert.h> +#include <math.h> +#include "gmem.h" +#include "GooString.h" + +static const int MAXIMUM_DOUBLE_PREC = 16; + +//------------------------------------------------------------------------ + +union GooStringFormatArg { + int i; + Guint ui; + long l; + Gulong ul; + double f; + char c; + char *s; + GooString *gs; +}; + +enum GooStringFormatType { + fmtIntDecimal, + fmtIntHex, + fmtIntOctal, + fmtIntBinary, + fmtUIntDecimal, + fmtUIntHex, + fmtUIntOctal, + fmtUIntBinary, + fmtLongDecimal, + fmtLongHex, + fmtLongOctal, + fmtLongBinary, + fmtULongDecimal, + fmtULongHex, + fmtULongOctal, + fmtULongBinary, + fmtDouble, + fmtDoubleTrimSmallAware, + fmtDoubleTrim, + fmtChar, + fmtString, + fmtGooString, + fmtSpace +}; + +static char *formatStrings[] = { + "d", "x", "o", "b", "ud", "ux", "uo", "ub", + "ld", "lx", "lo", "lb", "uld", "ulx", "ulo", "ulb", + "f", "gs", "g", + "c", + "s", + "t", + "w", + NULL +}; + +//------------------------------------------------------------------------ + +int inline GooString::roundedSize(int len) { + int delta; + if (len <= STR_STATIC_SIZE-1) + return STR_STATIC_SIZE; + delta = len < 256 ? 7 : 255; + return ((len + 1) + delta) & ~delta; +} + +// Make sure that the buffer is big enough to contain <newLength> characters +// plus terminating 0. +// We assume that if this is being called from the constructor, <s> was set +// to NULL and <length> was set to 0 to indicate unused string before calling us. +void inline GooString::resize(int newLength) { + char *s1 = s; + + if (!s || (roundedSize(length) != roundedSize(newLength))) { + // requires re-allocating data for string + if (newLength < STR_STATIC_SIZE) { + s1 = sStatic; + } else { + // allocate a rounded amount + if (s == sStatic) + s1 = (char*)gmalloc(roundedSize(newLength)); + else + s1 = (char*)grealloc(s, roundedSize(newLength)); + } + if (s == sStatic || s1 == sStatic) { + // copy the minimum, we only need to if are moving to or + // from sStatic. + // assert(s != s1) the roundedSize condition ensures this + if (newLength < length) { + memcpy(s1, s, newLength); + } else { + memcpy(s1, s, length); + } + if (s != sStatic) + gfree(s); + } + + } + + s = s1; + length = newLength; + s[length] = '\0'; +} + +GooString* GooString::Set(const char *s1, int s1Len, const char *s2, int s2Len) +{ + int newLen = 0; + char *p; + + if (s1) { + if (CALC_STRING_LEN == s1Len) { + s1Len = strlen(s1); + } else + assert(s1Len >= 0); + newLen += s1Len; + } + + if (s2) { + if (CALC_STRING_LEN == s2Len) { + s2Len = strlen(s2); + } else + assert(s2Len >= 0); + newLen += s2Len; + } + + resize(newLen); + p = s; + if (s1) { + memcpy(p, s1, s1Len); + p += s1Len; + } + if (s2) { + memcpy(p, s2, s2Len); + p += s2Len; + } + return this; +} + +GooString::GooString() { + s = NULL; + length = 0; + Set(NULL); +} + +GooString::GooString(const char *sA) { + s = NULL; + length = 0; + Set(sA, CALC_STRING_LEN); +} + +GooString::GooString(const char *sA, int lengthA) { + s = NULL; + length = 0; + Set(sA, lengthA); +} + +GooString::GooString(GooString *str, int idx, int lengthA) { + s = NULL; + length = 0; + assert(idx + lengthA <= str->length); + Set(str->getCString() + idx, lengthA); +} + +GooString::GooString(const GooString *str) { + s = NULL; + length = 0; + Set(str->getCString(), str->length); +} + +GooString::GooString(GooString *str1, GooString *str2) { + s = NULL; + length = 0; + Set(str1->getCString(), str1->length, str2->getCString(), str2->length); +} + +GooString *GooString::fromInt(int x) { + char buf[24]; // enough space for 64-bit ints plus a little extra + char *p; + int len; + formatInt(x, buf, sizeof(buf), gFalse, 0, 10, &p, &len); + return new GooString(p, len); +} + +GooString *GooString::format(char *fmt, ...) { + va_list argList; + GooString *s; + + s = new GooString(); + va_start(argList, fmt); + s->appendfv(fmt, argList); + va_end(argList); + return s; +} + +GooString *GooString::formatv(char *fmt, va_list argList) { + GooString *s; + + s = new GooString(); + s->appendfv(fmt, argList); + return s; +} + +GooString::~GooString() { + if (s != sStatic) + gfree(s); +} + +GooString *GooString::clear() { + resize(0); + return this; +} + +GooString *GooString::append(char c) { + return append((const char*)&c, 1); +} + +GooString *GooString::append(GooString *str) { + return append(str->getCString(), str->getLength()); +} + +GooString *GooString::append(const char *str, int lengthA) { + int prevLen = length; + if (CALC_STRING_LEN == lengthA) + lengthA = strlen(str); + resize(length + lengthA); + memcpy(s + prevLen, str, lengthA); + return this; +} + +GooString *GooString::appendf(char *fmt, ...) { + va_list argList; + + va_start(argList, fmt); + appendfv(fmt, argList); + va_end(argList); + return this; +} + +GooString *GooString::appendfv(char *fmt, va_list argList) { + GooStringFormatArg *args; + int argsLen, argsSize; + GooStringFormatArg arg; + int idx, width, prec; + GBool reverseAlign, zeroFill; + GooStringFormatType ft; + char buf[65]; + int len, i; + char *p0, *p1, *str; + + argsLen = 0; + argsSize = 8; + args = (GooStringFormatArg *)gmallocn(argsSize, sizeof(GooStringFormatArg)); + + p0 = fmt; + while (*p0) { + if (*p0 == '{') { + ++p0; + if (*p0 == '{') { + ++p0; + append('{'); + } else { + + // parse the format string + if (!(*p0 >= '0' && *p0 <= '9')) { + break; + } + idx = *p0 - '0'; + for (++p0; *p0 >= '0' && *p0 <= '9'; ++p0) { + idx = 10 * idx + (*p0 - '0'); + } + if (*p0 != ':') { + break; + } + ++p0; + if (*p0 == '-') { + reverseAlign = gTrue; + ++p0; + } else { + reverseAlign = gFalse; + } + width = 0; + zeroFill = *p0 == '0'; + for (; *p0 >= '0' && *p0 <= '9'; ++p0) { + width = 10 * width + (*p0 - '0'); + } + if (*p0 == '.') { + ++p0; + prec = 0; + for (; *p0 >= '0' && *p0 <= '9'; ++p0) { + prec = 10 * prec + (*p0 - '0'); + } + } else { + prec = 0; + } + for (ft = (GooStringFormatType)0; + formatStrings[ft]; + ft = (GooStringFormatType)(ft + 1)) { + if (!strncmp(p0, formatStrings[ft], strlen(formatStrings[ft]))) { + break; + } + } + if (!formatStrings[ft]) { + break; + } + p0 += strlen(formatStrings[ft]); + if (*p0 != '}') { + break; + } + ++p0; + + // fetch the argument + if (idx > argsLen) { + break; + } + if (idx == argsLen) { + if (argsLen == argsSize) { + argsSize *= 2; + args = (GooStringFormatArg *)greallocn(args, argsSize, + sizeof(GooStringFormatArg)); + } + switch (ft) { + case fmtIntDecimal: + case fmtIntHex: + case fmtIntOctal: + case fmtIntBinary: + case fmtSpace: + args[argsLen].i = va_arg(argList, int); + break; + case fmtUIntDecimal: + case fmtUIntHex: + case fmtUIntOctal: + case fmtUIntBinary: + args[argsLen].ui = va_arg(argList, Guint); + break; + case fmtLongDecimal: + case fmtLongHex: + case fmtLongOctal: + case fmtLongBinary: + args[argsLen].l = va_arg(argList, long); + break; + case fmtULongDecimal: + case fmtULongHex: + case fmtULongOctal: + case fmtULongBinary: + args[argsLen].ul = va_arg(argList, Gulong); + break; + case fmtDouble: + case fmtDoubleTrim: + case fmtDoubleTrimSmallAware: + args[argsLen].f = va_arg(argList, double); + break; + case fmtChar: + args[argsLen].c = (char)va_arg(argList, int); + break; + case fmtString: + args[argsLen].s = va_arg(argList, char *); + break; + case fmtGooString: + args[argsLen].gs = va_arg(argList, GooString *); + break; + } + ++argsLen; + } + + // format the argument + arg = args[idx]; + switch (ft) { + case fmtIntDecimal: + formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 10, &str, &len); + break; + case fmtIntHex: + formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 16, &str, &len); + break; + case fmtIntOctal: + formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 8, &str, &len); + break; + case fmtIntBinary: + formatInt(arg.i, buf, sizeof(buf), zeroFill, width, 2, &str, &len); + break; + case fmtUIntDecimal: + formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 10, + &str, &len); + break; + case fmtUIntHex: + formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 16, + &str, &len); + break; + case fmtUIntOctal: + formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 8, &str, &len); + break; + case fmtUIntBinary: + formatUInt(arg.ui, buf, sizeof(buf), zeroFill, width, 2, &str, &len); + break; + case fmtLongDecimal: + formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 10, &str, &len); + break; + case fmtLongHex: + formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 16, &str, &len); + break; + case fmtLongOctal: + formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 8, &str, &len); + break; + case fmtLongBinary: + formatInt(arg.l, buf, sizeof(buf), zeroFill, width, 2, &str, &len); + break; + case fmtULongDecimal: + formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 10, + &str, &len); + break; + case fmtULongHex: + formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 16, + &str, &len); + break; + case fmtULongOctal: + formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 8, &str, &len); + break; + case fmtULongBinary: + formatUInt(arg.ul, buf, sizeof(buf), zeroFill, width, 2, &str, &len); + break; + case fmtDouble: + formatDouble(arg.f, buf, sizeof(buf), prec, gFalse, &str, &len); + break; + case fmtDoubleTrim: + formatDouble(arg.f, buf, sizeof(buf), prec, gTrue, &str, &len); + break; + case fmtDoubleTrimSmallAware: + formatDoubleSmallAware(arg.f, buf, sizeof(buf), prec, gTrue, &str, &len); + break; + case fmtChar: + buf[0] = arg.c; + str = buf; + len = 1; + reverseAlign = !reverseAlign; + break; + case fmtString: + str = arg.s; + len = strlen(str); + reverseAlign = !reverseAlign; + break; + case fmtGooString: + str = arg.gs->getCString(); + len = arg.gs->getLength(); + reverseAlign = !reverseAlign; + break; + case fmtSpace: + str = buf; + len = 0; + width = arg.i; + break; + } + + // append the formatted arg, handling width and alignment + if (!reverseAlign && len < width) { + for (i = len; i < width; ++i) { + append(' '); + } + } + append(str, len); + if (reverseAlign && len < width) { + for (i = len; i < width; ++i) { + append(' '); + } + } + } + + } else if (*p0 == '}') { + ++p0; + if (*p0 == '}') { + ++p0; + } + append('}'); + + } else { + for (p1 = p0 + 1; *p1 && *p1 != '{' && *p1 != '}'; ++p1) ; + append(p0, p1 - p0); + p0 = p1; + } + } + + gfree(args); + return this; +} + +void GooString::formatInt(long x, char *buf, int bufSize, + GBool zeroFill, int width, int base, + char **p, int *len) { + static char vals[17] = "0123456789abcdef"; + GBool neg; + int start, i, j; + + i = bufSize; + if ((neg = x < 0)) { + x = -x; + } + start = neg ? 1 : 0; + if (x == 0) { + buf[--i] = '0'; + } else { + while (i > start && x) { + buf[--i] = vals[x % base]; + x /= base; + } + } + if (zeroFill) { + for (j = bufSize - i; i > start && j < width - start; ++j) { + buf[--i] = '0'; + } + } + if (neg) { + buf[--i] = '-'; + } + *p = buf + i; + *len = bufSize - i; +} + +void GooString::formatUInt(Gulong x, char *buf, int bufSize, + GBool zeroFill, int width, int base, + char **p, int *len) { + static char vals[17] = "0123456789abcdef"; + int i, j; + + i = bufSize; + if (x == 0) { + buf[--i] = '0'; + } else { + while (i > 0 && x) { + buf[--i] = vals[x % base]; + x /= base; + } + } + if (zeroFill) { + for (j = bufSize - i; i > 0 && j < width; ++j) { + buf[--i] = '0'; + } + } + *p = buf + i; + *len = bufSize - i; +} + +void GooString::formatDouble(double x, char *buf, int bufSize, int prec, + GBool trim, char **p, int *len) { + GBool neg, started; + double x2; + int d, i, j; + + if ((neg = x < 0)) { + x = -x; + } + x = floor(x * pow((double)10, prec) + 0.5); + i = bufSize; + started = !trim; + for (j = 0; j < prec && i > 1; ++j) { + x2 = floor(0.1 * (x + 0.5)); + d = (int)floor(x - 10 * x2 + 0.5); + if (started || d != 0) { + buf[--i] = '0' + d; + started = gTrue; + } + x = x2; + } + if (i > 1 && started) { + buf[--i] = '.'; + } + if (i > 1) { + do { + x2 = floor(0.1 * (x + 0.5)); + d = (int)floor(x - 10 * x2 + 0.5); + buf[--i] = '0' + d; + x = x2; + } while (i > 1 && x); + } + if (neg) { + buf[--i] = '-'; + } + *p = buf + i; + *len = bufSize - i; +} + +void GooString::formatDoubleSmallAware(double x, char *buf, int bufSize, int prec, + GBool trim, char **p, int *len) +{ + double absX = fabs(x); + if (absX >= 0.1) { + formatDouble(x, buf, bufSize, prec, trim, p, len); + } else { + while (absX < 0.1 && prec < MAXIMUM_DOUBLE_PREC) + { + absX = absX * 10; + prec++; + } + formatDouble(x, buf, bufSize, prec, trim, p, len); + } +} + +GooString *GooString::insert(int i, char c) { + return insert(i, (const char*)&c, 1); +} + +GooString *GooString::insert(int i, GooString *str) { + return insert(i, str->getCString(), str->getLength()); +} + +GooString *GooString::insert(int i, const char *str, int lengthA) { + int j; + int prevLen = length; + if (CALC_STRING_LEN == lengthA) + lengthA = strlen(str); + + resize(length + lengthA); + for (j = prevLen; j >= i; --j) + s[j+lengthA] = s[j]; + memcpy(s+i, str, lengthA); + return this; +} + +GooString *GooString::del(int i, int n) { + int j; + + if (n > 0) { + if (i + n > length) { + n = length - i; + } + for (j = i; j <= length - n; ++j) { + s[j] = s[j + n]; + } + resize(length - n); + } + return this; +} + +GooString *GooString::upperCase() { + int i; + + for (i = 0; i < length; ++i) { + if (islower(s[i])) + s[i] = toupper(s[i]); + } + return this; +} + +GooString *GooString::lowerCase() { + int i; + + for (i = 0; i < length; ++i) { + if (isupper(s[i])) + s[i] = tolower(s[i]); + } + return this; +} + +int GooString::cmp(GooString *str) const { + int n1, n2, i, x; + char *p1, *p2; + + n1 = length; + n2 = str->length; + for (i = 0, p1 = s, p2 = str->s; i < n1 && i < n2; ++i, ++p1, ++p2) { + x = *p1 - *p2; + if (x != 0) { + return x; + } + } + return n1 - n2; +} + +int GooString::cmpN(GooString *str, int n) const { + int n1, n2, i, x; + char *p1, *p2; + + n1 = length; + n2 = str->length; + for (i = 0, p1 = s, p2 = str->s; + i < n1 && i < n2 && i < n; + ++i, ++p1, ++p2) { + x = *p1 - *p2; + if (x != 0) { + return x; + } + } + if (i == n) { + return 0; + } + return n1 - n2; +} + +int GooString::cmp(const char *sA) const { + int n1, i, x; + const char *p1, *p2; + + n1 = length; + for (i = 0, p1 = s, p2 = sA; i < n1 && *p2; ++i, ++p1, ++p2) { + x = *p1 - *p2; + if (x != 0) { + return x; + } + } + if (i < n1) { + return 1; + } + if (*p2) { + return -1; + } + return 0; +} + +int GooString::cmpN(const char *sA, int n) const { + int n1, i, x; + const char *p1, *p2; + + n1 = length; + for (i = 0, p1 = s, p2 = sA; i < n1 && *p2 && i < n; ++i, ++p1, ++p2) { + x = *p1 - *p2; + if (x != 0) { + return x; + } + } + if (i == n) { + return 0; + } + if (i < n1) { + return 1; + } + if (*p2) { + return -1; + } + return 0; +} + +GBool GooString::hasUnicodeMarker(void) +{ + return (s[0] & 0xff) == 0xfe && (s[1] & 0xff) == 0xff; +} + +GooString *GooString::sanitizedName(GBool psmode) +{ + GooString *name; + char buf[8]; + int i; + char c; + + name = new GooString(); + + if (psmode) + { + // ghostscript chokes on names that begin with out-of-limits + // numbers, e.g., 1e4foo is handled correctly (as a name), but + // 1e999foo generates a limitcheck error + c = getChar(0); + if (c >= '0' && c <= '9') { + name->append('f'); + } + } + + for (i = 0; i < getLength(); ++i) { + c = getChar(i); + if (c <= (char)0x20 || c >= (char)0x7f || + c == ' ' || + c == '(' || c == ')' || c == '<' || c == '>' || + c == '[' || c == ']' || c == '{' || c == '}' || + c == '/' || c == '%' || c == '#') { + sprintf(buf, "#%02x", c & 0xff); + name->append(buf); + } else { + name->append(c); + } + } + return name; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/GooString.h b/Build/source/libs/poppler/poppler-0.18.4/goo/GooString.h new file mode 100644 index 00000000000..e77308dcdf9 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/GooString.h @@ -0,0 +1,179 @@ +//======================================================================== +// +// GooString.h +// +// Simple variable-length string type. +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// Copyright (C) 2008-2010 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef GooString_H +#define GooString_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include <stdarg.h> +#include <stdlib.h> // for NULL +#include "gtypes.h" + +class GooString { +public: + + // Create an empty string. + GooString(); + + // Create a string from a C string. + explicit GooString(const char *sA); + + // Create a string from <lengthA> chars at <sA>. This string + // can contain null characters. + GooString(const char *sA, int lengthA); + + // Create a string from <lengthA> chars at <idx> in <str>. + GooString(GooString *str, int idx, int lengthA); + + // Set content of a string to concatination of <s1> and <s2>. They can both + // be NULL. if <s1Len> or <s2Len> is CALC_STRING_LEN, then length of the string + // will be calculated with strlen(). Otherwise we assume they are a valid + // length of string (or its substring) + GooString* Set(const char *s1, int s1Len=CALC_STRING_LEN, const char *s2=NULL, int s2Len=CALC_STRING_LEN); + + // Copy a string. + explicit GooString(const GooString *str); + GooString *copy() const { return new GooString(this); } + + // Concatenate two strings. + GooString(GooString *str1, GooString *str2); + + // Convert an integer to a string. + static GooString *fromInt(int x); + + // Create a formatted string. Similar to printf, but without the + // string overflow issues. Formatting elements consist of: + // {<arg>:[<width>][.<precision>]<type>} + // where: + // - <arg> is the argument number (arg 0 is the first argument + // following the format string) -- NB: args must be first used in + // order; they can be reused in any order + // - <width> is the field width -- negative to reverse the alignment; + // starting with a leading zero to zero-fill (for integers) + // - <precision> is the number of digits to the right of the decimal + // point (for floating point numbers) + // - <type> is one of: + // d, x, o, b -- int in decimal, hex, octal, binary + // ud, ux, uo, ub -- unsigned int + // ld, lx, lo, lb, uld, ulx, ulo, ulb -- long, unsigned long + // f, g -- double + // c -- char + // s -- string (char *) + // t -- GooString * + // w -- blank space; arg determines width + // To get literal curly braces, use {{ or }}. + static GooString *format(char *fmt, ...); + static GooString *formatv(char *fmt, va_list argList); + + // Destructor. + ~GooString(); + + // Get length. + int getLength() { return length; } + + // Get C string. + char *getCString() const { return s; } + + // Get <i>th character. + char getChar(int i) { return s[i]; } + + // Change <i>th character. + void setChar(int i, char c) { s[i] = c; } + + // Clear string to zero length. + GooString *clear(); + + // Append a character or string. + GooString *append(char c); + GooString *append(GooString *str); + GooString *append(const char *str, int lengthA=CALC_STRING_LEN); + + // Append a formatted string. + GooString *appendf(char *fmt, ...); + GooString *appendfv(char *fmt, va_list argList); + + // Insert a character or string. + GooString *insert(int i, char c); + GooString *insert(int i, GooString *str); + GooString *insert(int i, const char *str, int lengthA=CALC_STRING_LEN); + + // Delete a character or range of characters. + GooString *del(int i, int n = 1); + + // Convert string to all-upper/all-lower case. + GooString *upperCase(); + GooString *lowerCase(); + + // Compare two strings: -1:< 0:= +1:> + int cmp(GooString *str) const; + int cmpN(GooString *str, int n) const; + int cmp(const char *sA) const; + int cmpN(const char *sA, int n) const; + + GBool hasUnicodeMarker(void); + + // Sanitizes the string so that it does + // not contain any ( ) < > [ ] { } / % + // The postscript mode also has some more strict checks + // The caller owns the return value + GooString *sanitizedName(GBool psmode); + +private: + GooString(const GooString &other); + GooString& operator=(const GooString &other); + + // you can tweak this number for a different speed/memory usage tradeoffs. + // In libc malloc() rounding is 16 so it's best to choose a value that + // results in sizeof(GooString) be a multiple of 16. + // 24 makes sizeof(GooString) to be 32. + static const int STR_STATIC_SIZE = 24; + // a special value telling that the length of the string is not given + // so it must be calculated from the strings + static const int CALC_STRING_LEN = -1; + + int roundedSize(int len); + + char sStatic[STR_STATIC_SIZE]; + int length; + char *s; + + void resize(int newLength); + static void formatInt(long x, char *buf, int bufSize, + GBool zeroFill, int width, int base, + char **p, int *len); + static void formatUInt(Gulong x, char *buf, int bufSize, + GBool zeroFill, int width, int base, + char **p, int *len); + static void formatDouble(double x, char *buf, int bufSize, int prec, + GBool trim, char **p, int *len); + static void formatDoubleSmallAware(double x, char *buf, int bufSize, int prec, + GBool trim, char **p, int *len); +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/GooTimer.cc b/Build/source/libs/poppler/poppler-0.18.4/goo/GooTimer.cc new file mode 100644 index 00000000000..c766c6bf2e4 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/GooTimer.cc @@ -0,0 +1,95 @@ +//======================================================================== +// +// GooTimer.cc +// +// This file is licensed under GPLv2 or later +// +// Copyright 2005 Jonathan Blandford <jrb@redhat.com> +// Copyright 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Inspired by gtimer.c in glib, which is Copyright 2000 by the GLib Team +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include "GooTimer.h" +#include <string.h> + +#define USEC_PER_SEC 1000000 + +//------------------------------------------------------------------------ +// GooTimer +//------------------------------------------------------------------------ + +GooTimer::GooTimer() { + start(); +} + +void GooTimer::start() { +#ifdef HAVE_GETTIMEOFDAY + gettimeofday(&start_time, NULL); +#elif defined(_WIN32) + QueryPerformanceCounter(&start_time); +#endif + active = true; +} + +void GooTimer::stop() { +#ifdef HAVE_GETTIMEOFDAY + gettimeofday(&end_time, NULL); +#elif defined(_WIN32) + QueryPerformanceCounter(&end_time); +#endif + active = false; +} + +#ifdef HAVE_GETTIMEOFDAY +double GooTimer::getElapsed() +{ + double total; + struct timeval elapsed; + + if (active) + gettimeofday(&end_time, NULL); + + if (start_time.tv_usec > end_time.tv_usec) { + end_time.tv_usec += USEC_PER_SEC; + end_time.tv_sec--; + } + + elapsed.tv_usec = end_time.tv_usec - start_time.tv_usec; + elapsed.tv_sec = end_time.tv_sec - start_time.tv_sec; + + total = elapsed.tv_sec + ((double) elapsed.tv_usec / 1e6); + if (total < 0) + total = 0; + + return total; +} +#elif defined(_WIN32) +double GooTimer::getElapsed() +{ + LARGE_INTEGER freq; + double time_in_secs; + QueryPerformanceFrequency(&freq); + + if (active) + QueryPerformanceCounter(&end_time); + + time_in_secs = (double)(end_time.QuadPart-start_time.QuadPart)/(double)freq.QuadPart; + return time_in_secs * 1000.0; + +} +#else +double GooTimer::getElapsed() +{ +#warning "no support for GooTimer" + return 0; +} +#endif + diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/GooTimer.h b/Build/source/libs/poppler/poppler-0.18.4/goo/GooTimer.h new file mode 100644 index 00000000000..d700e501c07 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/GooTimer.h @@ -0,0 +1,57 @@ +//======================================================================== +// +// GooTimer.cc +// +// This file is licensed under GPLv2 or later +// +// Copyright 2005 Jonathan Blandford <jrb@redhat.com> +// Copyright 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2011 Albert Astals cid <aacid@kde.org> +// Inspired by gtimer.c in glib, which is Copyright 2000 by the GLib Team +// +//======================================================================== + +#ifndef GOOTIMER_H +#define GOOTIMER_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "poppler/poppler-config.h" +#include "gtypes.h" +#ifdef HAVE_GETTIMEOFDAY +#include <sys/time.h> +#endif + +#ifdef _WIN32 +#include <windows.h> +#endif + +//------------------------------------------------------------------------ +// GooTimer +//------------------------------------------------------------------------ + +class GooTimer { +public: + + // Create a new timer. + GooTimer(); + + void start(); + void stop(); + double getElapsed(); + +private: +#ifdef HAVE_GETTIMEOFDAY + struct timeval start_time; + struct timeval end_time; +#elif defined(_WIN32) + LARGE_INTEGER start_time; + LARGE_INTEGER end_time; +#endif + GBool active; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/ImgWriter.cc b/Build/source/libs/poppler/poppler-0.18.4/goo/ImgWriter.cc new file mode 100644 index 00000000000..a30d26d89ad --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/ImgWriter.cc @@ -0,0 +1,15 @@ +//======================================================================== +// +// ImgWriter.cpp +// +// This file is licensed under the GPLv2 or later +// +// Copyright (C) 2009 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#include "ImgWriter.h" + +ImgWriter::~ImgWriter() +{ +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/ImgWriter.h b/Build/source/libs/poppler/poppler-0.18.4/goo/ImgWriter.h new file mode 100644 index 00000000000..185c230ef48 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/ImgWriter.h @@ -0,0 +1,33 @@ +//======================================================================== +// +// ImgWriter.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> +// Copyright (C) 2009, 2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2010 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2010 Brian Cameron <brian.cameron@oracle.com> +// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// +//======================================================================== + +#ifndef IMGWRITER_H +#define IMGWRITER_H + +#include <stdio.h> + +class ImgWriter +{ + public: + virtual ~ImgWriter(); + virtual bool init(FILE *f, int width, int height, int hDPI, int vDPI) = 0; + + virtual bool writePointers(unsigned char **rowPointers, int rowCount) = 0; + virtual bool writeRow(unsigned char **row) = 0; + + virtual bool close() = 0; + virtual bool supportCMYK() { return false; } +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/JpegWriter.cc b/Build/source/libs/poppler/poppler-0.18.4/goo/JpegWriter.cc new file mode 100644 index 00000000000..9b6645b82a0 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/JpegWriter.cc @@ -0,0 +1,147 @@ +//======================================================================== +// +// JpegWriter.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> +// Copyright (C) 2010, 2012 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2010 Harry Roberts <harry.roberts@midnight-labs.org> +// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// +//======================================================================== + +#include "JpegWriter.h" + +#ifdef ENABLE_LIBJPEG + +#include "poppler/Error.h" + +void outputMessage(j_common_ptr cinfo) +{ + char buffer[JMSG_LENGTH_MAX]; + + // Create the message + (*cinfo->err->format_message) (cinfo, buffer); + + // Send it to poppler's error handler + error(-1, "%s", buffer); +} + +JpegWriter::JpegWriter(int q, bool p, J_COLOR_SPACE cm) +: progressive(p), quality(q), colorMode(cm) +{ +} + +JpegWriter::JpegWriter(J_COLOR_SPACE cm) +: progressive(false), quality(-1), colorMode(cm) +{ +} + +JpegWriter::~JpegWriter() +{ + // cleanup + jpeg_destroy_compress(&cinfo); +} + +bool JpegWriter::init(FILE *f, int width, int height, int hDPI, int vDPI) +{ + // Setup error handler + cinfo.err = jpeg_std_error(&jerr); + jerr.output_message = &outputMessage; + + // Initialize libjpeg + jpeg_create_compress(&cinfo); + + // Set colorspace and initialise defaults + cinfo.in_color_space = colorMode; /* colorspace of input image */ + jpeg_set_defaults(&cinfo); + + // Set destination file + jpeg_stdio_dest(&cinfo, f); + + // Set libjpeg configuration + cinfo.image_width = width; + cinfo.image_height = height; + cinfo.density_unit = 1; // dots per inch + cinfo.X_density = hDPI; + cinfo.Y_density = vDPI; + /* # of color components per pixel */ + switch (colorMode) { + case JCS_GRAYSCALE: + cinfo.input_components = 1; + break; + case JCS_RGB: + cinfo.input_components = 3; + break; + case JCS_CMYK: + cinfo.input_components = 4; + break; + default: + return false; + } + if (cinfo.in_color_space == JCS_CMYK) { + jpeg_set_colorspace(&cinfo, JCS_YCCK); + cinfo.write_JFIF_header = TRUE; + } + + // Set quality + if( quality >= 0 && quality <= 100 ) { + jpeg_set_quality(&cinfo, quality, true); + } + + // Use progressive mode + if( progressive) { + jpeg_simple_progression(&cinfo); + } + + // Get ready for data + jpeg_start_compress(&cinfo, TRUE); + + return true; +} + +bool JpegWriter::writePointers(unsigned char **rowPointers, int rowCount) +{ + if (colorMode == JCS_CMYK) { + for (int y = 0; y < rowCount; y++) { + unsigned char *row = rowPointers[y]; + for (unsigned int x = 0; x < cinfo.image_width; x++) { + for (int n = 0; n < 4; n++) { + *row = 0xff - *row; + row++; + } + } + } + } + // Write all rows to the file + jpeg_write_scanlines(&cinfo, rowPointers, rowCount); + + return true; +} + +bool JpegWriter::writeRow(unsigned char **rowPointer) +{ + if (colorMode == JCS_CMYK) { + unsigned char *row = rowPointer[0]; + for (unsigned int x = 0; x < cinfo.image_width; x++) { + for (int n = 0; n < 4; n++) { + *row = 0xff - *row; + row++; + } + } + } + // Write the row to the file + jpeg_write_scanlines(&cinfo, rowPointer, 1); + + return true; +} + +bool JpegWriter::close() +{ + jpeg_finish_compress(&cinfo); + + return true; +} + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/JpegWriter.h b/Build/source/libs/poppler/poppler-0.18.4/goo/JpegWriter.h new file mode 100644 index 00000000000..7af6870f6b8 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/JpegWriter.h @@ -0,0 +1,56 @@ +//======================================================================== +// +// JpegWriter.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> +// Copyright (C) 2010 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2010 Jürg Billeter <j@bitron.ch> +// Copyright (C) 2010 Harry Roberts <harry.roberts@midnight-labs.org> +// Copyright (C) 2010 Brian Cameron <brian.cameron@oracle.com> +// Copyright (C) 2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// +//======================================================================== + +#ifndef JPEGWRITER_H +#define JPEGWRITER_H + +#include "poppler/poppler-config.h" + +#ifdef ENABLE_LIBJPEG + +#include <sys/types.h> +#include "ImgWriter.h" + +extern "C" { +#include <jpeglib.h> +} + +class JpegWriter : public ImgWriter +{ + public: + JpegWriter(int quality, bool progressive, J_COLOR_SPACE colorMode = JCS_RGB); + JpegWriter(J_COLOR_SPACE colorMode = JCS_RGB); + ~JpegWriter(); + + bool init(FILE *f, int width, int height, int hDPI, int vDPI); + + bool writePointers(unsigned char **rowPointers, int rowCount); + bool writeRow(unsigned char **row); + + bool close(); + bool supportCMYK() { return colorMode == JCS_CMYK; } + + private: + bool progressive; + int quality; + J_COLOR_SPACE colorMode; + struct jpeg_compress_struct cinfo; + struct jpeg_error_mgr jerr; +}; + +#endif + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/Makefile.am b/Build/source/libs/poppler/poppler-0.18.4/goo/Makefile.am new file mode 100644 index 00000000000..1921b1ea4ea --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/Makefile.am @@ -0,0 +1,47 @@ +noinst_LTLIBRARIES = libgoo.la + +if ENABLE_XPDF_HEADERS + +poppler_goo_includedir = $(includedir)/poppler/goo +poppler_goo_include_HEADERS = \ + GooHash.h \ + GooList.h \ + GooTimer.h \ + GooMutex.h \ + GooString.h \ + gtypes.h \ + gmem.h \ + gfile.h \ + FixedPoint.h \ + PNGWriter.h \ + JpegWriter.h \ + TiffWriter.h \ + ImgWriter.h \ + GooLikely.h \ + gstrtod.h + +endif + +if BUILD_LIBPNG +libpng_includes = $(LIBPNG_CFLAGS) +endif + +INCLUDES = \ + -I$(top_srcdir) \ + $(libpng_includes) + +libgoo_la_SOURCES = \ + gfile.cc \ + gmempp.cc \ + GooHash.cc \ + GooList.cc \ + GooTimer.cc \ + GooString.cc \ + gmem.cc \ + FixedPoint.cc \ + PNGWriter.cc \ + JpegWriter.cc \ + TiffWriter.cc \ + ImgWriter.cc \ + gtypes_p.h \ + gstrtod.cc diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/Makefile.in b/Build/source/libs/poppler/poppler-0.18.4/goo/Makefile.in new file mode 100644 index 00000000000..5c39c6ea55f --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/Makefile.in @@ -0,0 +1,695 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = goo +DIST_COMMON = $(am__poppler_goo_include_HEADERS_DIST) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/define-dir.m4 $(top_srcdir)/m4/gtk-doc.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/introspection.m4 \ + $(top_srcdir)/m4/libjpeg.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h \ + $(top_builddir)/poppler/poppler-config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libgoo_la_LIBADD = +am_libgoo_la_OBJECTS = gfile.lo gmempp.lo GooHash.lo GooList.lo \ + GooTimer.lo GooString.lo gmem.lo FixedPoint.lo PNGWriter.lo \ + JpegWriter.lo TiffWriter.lo ImgWriter.lo gstrtod.lo +libgoo_la_OBJECTS = $(am_libgoo_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/poppler +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_$(V)) +am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) +am__v_CXX_0 = @echo " CXX " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_$(V)) +am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CXXLD_0 = @echo " CXXLD " $@; +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libgoo_la_SOURCES) +DIST_SOURCES = $(libgoo_la_SOURCES) +am__poppler_goo_include_HEADERS_DIST = GooHash.h GooList.h GooTimer.h \ + GooMutex.h GooString.h gtypes.h gmem.h gfile.h FixedPoint.h \ + PNGWriter.h JpegWriter.h TiffWriter.h ImgWriter.h GooLikely.h \ + gstrtod.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(poppler_goo_includedir)" +HEADERS = $(poppler_goo_include_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CAIRO_CFLAGS = @CAIRO_CFLAGS@ +CAIRO_FEATURE = @CAIRO_FEATURE@ +CAIRO_LIBS = @CAIRO_LIBS@ +CAIRO_REQ = @CAIRO_REQ@ +CAIRO_VERSION = @CAIRO_VERSION@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ +FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_CONFIG = @FREETYPE_CONFIG@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GLIB_REQ = @GLIB_REQ@ +GLIB_REQUIRED = @GLIB_REQUIRED@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +GTK_TEST_CFLAGS = @GTK_TEST_CFLAGS@ +GTK_TEST_LIBS = @GTK_TEST_LIBS@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ +INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ +INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ +INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ +INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ +INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ +INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ +LCMS_CFLAGS = @LCMS_CFLAGS@ +LCMS_LIBS = @LCMS_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBJPEG_LIBS = @LIBJPEG_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBOPENJPEG_LIBS = @LIBOPENJPEG_LIBS@ +LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ +LIBPNG_LIBS = @LIBPNG_LIBS@ +LIBS = @LIBS@ +LIBTIFF_LIBS = @LIBTIFF_LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MOCQT4 = @MOCQT4@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PC_REQUIRES = @PC_REQUIRES@ +PC_REQUIRES_PRIVATE = @PC_REQUIRES_PRIVATE@ +PDFTOCAIRO_CFLAGS = @PDFTOCAIRO_CFLAGS@ +PDFTOCAIRO_LIBS = @PDFTOCAIRO_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POPPLER_DATADIR = @POPPLER_DATADIR@ +POPPLER_GLIB_CFLAGS = @POPPLER_GLIB_CFLAGS@ +POPPLER_GLIB_DISABLE_DEPRECATED = @POPPLER_GLIB_DISABLE_DEPRECATED@ +POPPLER_GLIB_DISABLE_SINGLE_INCLUDES = @POPPLER_GLIB_DISABLE_SINGLE_INCLUDES@ +POPPLER_GLIB_LIBS = @POPPLER_GLIB_LIBS@ +POPPLER_MAJOR_VERSION = @POPPLER_MAJOR_VERSION@ +POPPLER_MICRO_VERSION = @POPPLER_MICRO_VERSION@ +POPPLER_MINOR_VERSION = @POPPLER_MINOR_VERSION@ +POPPLER_QT4_CFLAGS = @POPPLER_QT4_CFLAGS@ +POPPLER_QT4_CXXFLAGS = @POPPLER_QT4_CXXFLAGS@ +POPPLER_QT4_LIBS = @POPPLER_QT4_LIBS@ +POPPLER_QT4_TEST_CFLAGS = @POPPLER_QT4_TEST_CFLAGS@ +POPPLER_QT4_TEST_LIBS = @POPPLER_QT4_TEST_LIBS@ +POPPLER_VERSION = @POPPLER_VERSION@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +auto_import_flags = @auto_import_flags@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +create_shared_lib = @create_shared_lib@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +win32_libs = @win32_libs@ +noinst_LTLIBRARIES = libgoo.la +@ENABLE_XPDF_HEADERS_TRUE@poppler_goo_includedir = $(includedir)/poppler/goo +@ENABLE_XPDF_HEADERS_TRUE@poppler_goo_include_HEADERS = \ +@ENABLE_XPDF_HEADERS_TRUE@ GooHash.h \ +@ENABLE_XPDF_HEADERS_TRUE@ GooList.h \ +@ENABLE_XPDF_HEADERS_TRUE@ GooTimer.h \ +@ENABLE_XPDF_HEADERS_TRUE@ GooMutex.h \ +@ENABLE_XPDF_HEADERS_TRUE@ GooString.h \ +@ENABLE_XPDF_HEADERS_TRUE@ gtypes.h \ +@ENABLE_XPDF_HEADERS_TRUE@ gmem.h \ +@ENABLE_XPDF_HEADERS_TRUE@ gfile.h \ +@ENABLE_XPDF_HEADERS_TRUE@ FixedPoint.h \ +@ENABLE_XPDF_HEADERS_TRUE@ PNGWriter.h \ +@ENABLE_XPDF_HEADERS_TRUE@ JpegWriter.h \ +@ENABLE_XPDF_HEADERS_TRUE@ TiffWriter.h \ +@ENABLE_XPDF_HEADERS_TRUE@ ImgWriter.h \ +@ENABLE_XPDF_HEADERS_TRUE@ GooLikely.h \ +@ENABLE_XPDF_HEADERS_TRUE@ gstrtod.h + +@BUILD_LIBPNG_TRUE@libpng_includes = $(LIBPNG_CFLAGS) +INCLUDES = \ + -I$(top_srcdir) \ + $(libpng_includes) + +libgoo_la_SOURCES = \ + gfile.cc \ + gmempp.cc \ + GooHash.cc \ + GooList.cc \ + GooTimer.cc \ + GooString.cc \ + gmem.cc \ + FixedPoint.cc \ + PNGWriter.cc \ + JpegWriter.cc \ + TiffWriter.cc \ + ImgWriter.cc \ + gtypes_p.h \ + gstrtod.cc + +all: all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign goo/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign goo/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libgoo.la: $(libgoo_la_OBJECTS) $(libgoo_la_DEPENDENCIES) + $(AM_V_CXXLD)$(CXXLINK) $(libgoo_la_OBJECTS) $(libgoo_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FixedPoint.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GooHash.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GooList.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GooString.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GooTimer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ImgWriter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JpegWriter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PNGWriter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TiffWriter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfile.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gmem.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gmempp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstrtod.Plo@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-poppler_goo_includeHEADERS: $(poppler_goo_include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(poppler_goo_includedir)" || $(MKDIR_P) "$(DESTDIR)$(poppler_goo_includedir)" + @list='$(poppler_goo_include_HEADERS)'; test -n "$(poppler_goo_includedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(poppler_goo_includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(poppler_goo_includedir)" || exit $$?; \ + done + +uninstall-poppler_goo_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(poppler_goo_include_HEADERS)'; test -n "$(poppler_goo_includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(poppler_goo_includedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(poppler_goo_includedir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(poppler_goo_includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-poppler_goo_includeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-poppler_goo_includeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-poppler_goo_includeHEADERS \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am \ + uninstall-poppler_goo_includeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/PNGWriter.cc b/Build/source/libs/poppler/poppler-0.18.4/goo/PNGWriter.cc new file mode 100644 index 00000000000..1fb8cabcb54 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/PNGWriter.cc @@ -0,0 +1,176 @@ +//======================================================================== +// +// PNGWriter.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright (C) 2009 Warren Toomey <wkt@tuhs.org> +// Copyright (C) 2009 Shen Liang <shenzhuxi@gmail.com> +// Copyright (C) 2009, 2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> +// Copyright (C) 2010, 2011 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2011 Thomas Klausner <wiz@danbala.tuwien.ac.at> +// +//======================================================================== + +#include "PNGWriter.h" + +#ifdef ENABLE_LIBPNG + +#include <zlib.h> +#include <stdlib.h> +#include <string.h> + +#include "poppler/Error.h" +#include "goo/gmem.h" + +PNGWriter::PNGWriter(Format formatA) : format(formatA) +{ + icc_data = NULL; + icc_data_size = 0; + icc_name = NULL; + sRGB_profile = false; +} + +PNGWriter::~PNGWriter() +{ + /* cleanup heap allocation */ + png_destroy_write_struct(&png_ptr, &info_ptr); + if (icc_data) { + gfree(icc_data); + free(icc_name); + } +} + +void PNGWriter::setICCProfile(const char *name, unsigned char *data, int size) +{ + icc_data = (unsigned char *)gmalloc(size); + memcpy(icc_data, data, size); + icc_data_size = size; + icc_name = strdup(name); +} + +void PNGWriter::setSRGBProfile() +{ + sRGB_profile = true; +} + +bool PNGWriter::init(FILE *f, int width, int height, int hDPI, int vDPI) +{ + /* libpng changed the png_set_iCCP() prototype in 1.5.0 */ +#if PNG_LIBPNG_VER < 10500 + png_charp icc_data_ptr = (png_charp)icc_data; +#else + png_const_bytep icc_data_ptr = (png_const_bytep)icc_data; +#endif + + /* initialize stuff */ + png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!png_ptr) { + error(-1, "png_create_write_struct failed"); + return false; + } + + info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) { + error(-1, "png_create_info_struct failed"); + return false; + } + + if (setjmp(png_jmpbuf(png_ptr))) { + error(-1, "png_jmpbuf failed"); + return false; + } + + /* write header */ + png_init_io(png_ptr, f); + if (setjmp(png_jmpbuf(png_ptr))) { + error(-1, "Error during writing header"); + return false; + } + + // Set up the type of PNG image and the compression level + png_set_compression_level(png_ptr, Z_BEST_COMPRESSION); + + // Silence silly gcc + png_byte bit_depth = -1; + png_byte color_type = -1; + switch (format) { + case RGB: + bit_depth = 8; + color_type = PNG_COLOR_TYPE_RGB; + break; + case RGBA: + bit_depth = 8; + color_type = PNG_COLOR_TYPE_RGB_ALPHA; + break; + case GRAY: + bit_depth = 8; + color_type = PNG_COLOR_TYPE_GRAY; + break; + case MONOCHROME: + bit_depth = 1; + color_type = PNG_COLOR_TYPE_GRAY; + break; + } + png_byte interlace_type = PNG_INTERLACE_NONE; + + png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, color_type, interlace_type, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); + + png_set_pHYs(png_ptr, info_ptr, hDPI/0.0254, vDPI/0.0254, PNG_RESOLUTION_METER); + + if (icc_data) + png_set_iCCP(png_ptr, info_ptr, icc_name, PNG_COMPRESSION_TYPE_BASE, icc_data_ptr, icc_data_size); + else if (sRGB_profile) + png_set_sRGB(png_ptr, info_ptr, PNG_sRGB_INTENT_RELATIVE); + + png_write_info(png_ptr, info_ptr); + if (setjmp(png_jmpbuf(png_ptr))) { + error(-1, "error during writing png info bytes"); + return false; + } + + // pack 1 pixel/byte rows into 8 pixels/byte + if (format == MONOCHROME) + png_set_packing(png_ptr); + + return true; +} + +bool PNGWriter::writePointers(unsigned char **rowPointers, int rowCount) +{ + png_write_image(png_ptr, rowPointers); + /* write bytes */ + if (setjmp(png_jmpbuf(png_ptr))) { + error(-1, "Error during writing bytes"); + return false; + } + + return true; +} + +bool PNGWriter::writeRow(unsigned char **row) +{ + // Write the row to the file + png_write_rows(png_ptr, row, 1); + if (setjmp(png_jmpbuf(png_ptr))) { + error(-1, "error during png row write"); + return false; + } + + return true; +} + +bool PNGWriter::close() +{ + /* end write */ + png_write_end(png_ptr, info_ptr); + if (setjmp(png_jmpbuf(png_ptr))) { + error(-1, "Error during end of write"); + return false; + } + + return true; +} + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/PNGWriter.h b/Build/source/libs/poppler/poppler-0.18.4/goo/PNGWriter.h new file mode 100644 index 00000000000..f22495d0d00 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/PNGWriter.h @@ -0,0 +1,63 @@ +//======================================================================== +// +// PNGWriter.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright (C) 2009 Warren Toomey <wkt@tuhs.org> +// Copyright (C) 2009 Shen Liang <shenzhuxi@gmail.com> +// Copyright (C) 2009, 2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> +// Copyright (C) 2010, 2011 Adrian Johnson <ajohnson@redneon.com> +// +//======================================================================== + +#ifndef PNGWRITER_H +#define PNGWRITER_H + +#include "poppler/poppler-config.h" + +#ifdef ENABLE_LIBPNG + +#include <cstdio> +#include <png.h> +#include "ImgWriter.h" + +class PNGWriter : public ImgWriter +{ + public: + + /* RGB - 3 bytes/pixel + * RGBA - 4 bytes/pixel + * GRAY - 1 byte/pixel + * MONOCHROME - 1 byte/pixel. PNGWriter will bitpack to 8 pixels/byte + */ + enum Format { RGB, RGBA, GRAY, MONOCHROME }; + + PNGWriter(Format format = RGB); + ~PNGWriter(); + + void setICCProfile(const char *name, unsigned char *data, int size); + void setSRGBProfile(); + + + bool init(FILE *f, int width, int height, int hDPI, int vDPI); + + bool writePointers(unsigned char **rowPointers, int rowCount); + bool writeRow(unsigned char **row); + + bool close(); + + private: + Format format; + png_structp png_ptr; + png_infop info_ptr; + unsigned char *icc_data; + int icc_data_size; + char *icc_name; + bool sRGB_profile; +}; + +#endif + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/TiffWriter.cc b/Build/source/libs/poppler/poppler-0.18.4/goo/TiffWriter.cc new file mode 100644 index 00000000000..f63b2450029 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/TiffWriter.cc @@ -0,0 +1,202 @@ +//======================================================================== +// +// TiffWriter.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright (C) 2010 William Bader <williambader@hotmail.com> +// +//======================================================================== + +#include "TiffWriter.h" + +#if ENABLE_LIBTIFF + +#include <string.h> + +TiffWriter::~TiffWriter() +{ + // no cleanup needed +} + +TiffWriter::TiffWriter() +{ + f = NULL; + numRows = 0; + curRow = 0; + compressionString = NULL; + splashMode = splashModeRGB8; +} + +// Set the compression type + +void TiffWriter::setCompressionString(const char *compressionStringArg) +{ + compressionString = compressionStringArg; +} + +// Set the bitmap mode + +void TiffWriter::setSplashMode(SplashColorMode splashModeArg) +{ + splashMode = splashModeArg; +} + +// Write a TIFF file. + +bool TiffWriter::init(FILE *openedFile, int width, int height, int hDPI, int vDPI) +{ + unsigned int compression; + uint16 photometric; + uint32 rowsperstrip = (uint32) -1; + int bitspersample; + uint16 samplesperpixel; + const struct compression_name_tag { + const char *compressionName; // name of the compression option from the command line + unsigned int compressionCode; // internal libtiff code + const char *compressionDescription; // descriptive name + } compressionList[] = { + { "none", COMPRESSION_NONE, "no compression" }, + { "ccittrle", COMPRESSION_CCITTRLE, "CCITT modified Huffman RLE" }, + { "ccittfax3", COMPRESSION_CCITTFAX3,"CCITT Group 3 fax encoding" }, + { "ccittt4", COMPRESSION_CCITT_T4, "CCITT T.4 (TIFF 6 name)" }, + { "ccittfax4", COMPRESSION_CCITTFAX4, "CCITT Group 4 fax encoding" }, + { "ccittt6", COMPRESSION_CCITT_T6, "CCITT T.6 (TIFF 6 name)" }, + { "lzw", COMPRESSION_LZW, "Lempel-Ziv & Welch" }, + { "ojpeg", COMPRESSION_OJPEG, "!6.0 JPEG" }, + { "jpeg", COMPRESSION_JPEG, "%JPEG DCT compression" }, + { "next", COMPRESSION_NEXT, "NeXT 2-bit RLE" }, + { "packbits", COMPRESSION_PACKBITS, "Macintosh RLE" }, + { "ccittrlew", COMPRESSION_CCITTRLEW, "CCITT modified Huffman RLE w/ word alignment" }, + { "deflate", COMPRESSION_DEFLATE, "Deflate compression" }, + { "adeflate", COMPRESSION_ADOBE_DEFLATE, "Deflate compression, as recognized by Adobe" }, + { "dcs", COMPRESSION_DCS, "Kodak DCS encoding" }, + { "jbig", COMPRESSION_JBIG, "ISO JBIG" }, + { "jp2000", COMPRESSION_JP2000, "Leadtools JPEG2000" }, + { NULL, 0, NULL } + }; + + // Initialize + + f = NULL; + curRow = 0; + + // Store the number of rows + + numRows = height; + + // Set the compression + + compression = COMPRESSION_NONE; + + if (compressionString == NULL || strcmp(compressionString, "") == 0) { + compression = COMPRESSION_NONE; + } else { + int i; + for (i = 0; compressionList[i].compressionName != NULL; i++) { + if (strcmp(compressionString, compressionList[i].compressionName) == 0) { + compression = compressionList[i].compressionCode; + break; + } + } + if (compressionList[i].compressionName == NULL) { + fprintf(stderr, "TiffWriter: Unknown compression type '%.10s', using 'none'.\n", compressionString); + fprintf(stderr, "Known compression types (the tiff library might not support every type)\n"); + for (i = 0; compressionList[i].compressionName != NULL; i++) { + fprintf(stderr, "%10s %s\n", compressionList[i].compressionName, compressionList[i].compressionDescription); + } + } + } + + // Set bits per sample, samples per pixel, and photometric type from the splash mode + + bitspersample = (splashMode == splashModeMono1? 1: 8); + + switch (splashMode) { + + case splashModeMono1: + case splashModeMono8: + samplesperpixel = 1; + photometric = PHOTOMETRIC_MINISBLACK; + break; + + case splashModeRGB8: + case splashModeBGR8: + samplesperpixel = 3; + photometric = PHOTOMETRIC_RGB; + break; + + default: + fprintf(stderr, "TiffWriter: Mode %d not supported\n", splashMode); + return false; + } + + // Open the file + + if (openedFile == NULL) { + fprintf(stderr, "TiffWriter: No output file given.\n"); + return false; + } + + f = TIFFFdOpen(fileno(openedFile), "-", "w"); + + if (!f) { + return false; + } + + // Set TIFF tags + + TIFFSetField(f, TIFFTAG_IMAGEWIDTH, width); + TIFFSetField(f, TIFFTAG_IMAGELENGTH, height); + TIFFSetField(f, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + TIFFSetField(f, TIFFTAG_SAMPLESPERPIXEL, samplesperpixel); + TIFFSetField(f, TIFFTAG_BITSPERSAMPLE, bitspersample); + TIFFSetField(f, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(f, TIFFTAG_PHOTOMETRIC, photometric); + TIFFSetField(f, TIFFTAG_COMPRESSION, (uint16) compression); + TIFFSetField(f, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(f, rowsperstrip)); + TIFFSetField(f, TIFFTAG_XRESOLUTION, (double) hDPI); + TIFFSetField(f, TIFFTAG_YRESOLUTION, (double) vDPI); + TIFFSetField(f, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH); + + return true; +} + +bool TiffWriter::writePointers(unsigned char **rowPointers, int rowCount) +{ + // Write all rows to the file + + for (int row = 0; row < rowCount; row++) { + if (TIFFWriteScanline(f, rowPointers[row], row, 0) < 0) { + fprintf(stderr, "TiffWriter: Error writing tiff row %d\n", row); + return false; + } + } + + return true; +} + +bool TiffWriter::writeRow(unsigned char **rowData) +{ + // Add a single row + + if (TIFFWriteScanline(f, *rowData, curRow, 0) < 0) { + fprintf(stderr, "TiffWriter: Error writing tiff row %d\n", curRow); + return false; + } + + curRow++; + + return true; +} + +bool TiffWriter::close() +{ + // Close the file + + TIFFClose(f); + + return true; +} + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/TiffWriter.h b/Build/source/libs/poppler/poppler-0.18.4/goo/TiffWriter.h new file mode 100644 index 00000000000..b2b0ea99cf9 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/TiffWriter.h @@ -0,0 +1,54 @@ +//======================================================================== +// +// TiffWriter.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright (C) 2010 William Bader <williambader@hotmail.com> +// Copyright (C) 2011 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#ifndef TIFFWRITER_H +#define TIFFWRITER_H + +#include "poppler/poppler-config.h" + +#ifdef ENABLE_LIBTIFF + +#include <sys/types.h> +#include "ImgWriter.h" +#include "splash/SplashTypes.h" + +extern "C" { +#include "tiffio.h" +} + +class TiffWriter : public ImgWriter +{ + public: + TiffWriter(); + ~TiffWriter(); + + void setCompressionString(const char *compressionStringArg); + void setSplashMode(SplashColorMode splashModeArg); + + bool init(FILE *openedFile, int width, int height, int hDPI, int vDPI); + + bool writePointers(unsigned char **rowPointers, int rowCount); + bool writeRow(unsigned char **rowData); + + bool close(); + + private: + TIFF *f; // LibTiff file context + int numRows; // number of rows in the image + int curRow; // number of rows written + const char *compressionString; // compression type + SplashColorMode splashMode; // format of image data + +}; + +#endif + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/gfile.cc b/Build/source/libs/poppler/poppler-0.18.4/goo/gfile.cc new file mode 100644 index 00000000000..f48f9f3fbca --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/gfile.cc @@ -0,0 +1,723 @@ +//======================================================================== +// +// gfile.cc +// +// Miscellaneous file and directory name manipulation. +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> +// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2008 Adam Batkin <adam@batkin.net> +// Copyright (C) 2008, 2010 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2009 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef _WIN32 +# include <time.h> +#else +# if defined(MACOS) +# include <sys/stat.h> +# elif !defined(ACORN) +# include <sys/types.h> +# include <sys/stat.h> +# include <fcntl.h> +# endif +# include <limits.h> +# include <string.h> +# if !defined(VMS) && !defined(ACORN) && !defined(MACOS) +# include <pwd.h> +# endif +# if defined(VMS) && (__DECCXX_VER < 50200000) +# include <unixlib.h> +# endif +#endif // _WIN32 +#include "GooString.h" +#include "gfile.h" + +// Some systems don't define this, so just make it something reasonably +// large. +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif + +//------------------------------------------------------------------------ + +GooString *getHomeDir() { +#ifdef VMS + //---------- VMS ---------- + return new GooString("SYS$LOGIN:"); + +#elif defined(__EMX__) || defined(_WIN32) + //---------- OS/2+EMX and Win32 ---------- + char *s; + GooString *ret; + + if ((s = getenv("HOME"))) + ret = new GooString(s); + else + ret = new GooString("."); + return ret; + +#elif defined(ACORN) + //---------- RISCOS ---------- + return new GooString("@"); + +#elif defined(MACOS) + //---------- MacOS ---------- + return new GooString(":"); + +#else + //---------- Unix ---------- + char *s; + struct passwd *pw; + GooString *ret; + + if ((s = getenv("HOME"))) { + ret = new GooString(s); + } else { + if ((s = getenv("USER"))) + pw = getpwnam(s); + else + pw = getpwuid(getuid()); + if (pw) + ret = new GooString(pw->pw_dir); + else + ret = new GooString("."); + } + return ret; +#endif +} + +GooString *getCurrentDir() { + char buf[PATH_MAX+1]; + +#if defined(__EMX__) + if (_getcwd2(buf, sizeof(buf))) +#elif defined(_WIN32) + if (GetCurrentDirectory(sizeof(buf), buf)) +#elif defined(ACORN) + if (strcpy(buf, "@")) +#elif defined(MACOS) + if (strcpy(buf, ":")) +#else + if (getcwd(buf, sizeof(buf))) +#endif + return new GooString(buf); + return new GooString(); +} + +GooString *appendToPath(GooString *path, char *fileName) { +#if defined(VMS) + //---------- VMS ---------- + //~ this should handle everything necessary for file + //~ requesters, but it's certainly not complete + char *p0, *p1, *p2; + char *q1; + + p0 = path->getCString(); + p1 = p0 + path->getLength() - 1; + if (!strcmp(fileName, "-")) { + if (*p1 == ']') { + for (p2 = p1; p2 > p0 && *p2 != '.' && *p2 != '['; --p2) ; + if (*p2 == '[') + ++p2; + path->del(p2 - p0, p1 - p2); + } else if (*p1 == ':') { + path->append("[-]"); + } else { + path->clear(); + path->append("[-]"); + } + } else if ((q1 = strrchr(fileName, '.')) && !strncmp(q1, ".DIR;", 5)) { + if (*p1 == ']') { + path->insert(p1 - p0, '.'); + path->insert(p1 - p0 + 1, fileName, q1 - fileName); + } else if (*p1 == ':') { + path->append('['); + path->append(']'); + path->append(fileName, q1 - fileName); + } else { + path->clear(); + path->append(fileName, q1 - fileName); + } + } else { + if (*p1 != ']' && *p1 != ':') + path->clear(); + path->append(fileName); + } + return path; + +#elif defined(_WIN32) + //---------- Win32 ---------- + GooString *tmp; + char buf[256]; + char *fp; + + tmp = new GooString(path); + tmp->append('/'); + tmp->append(fileName); + GetFullPathName(tmp->getCString(), sizeof(buf), buf, &fp); + delete tmp; + path->clear(); + path->append(buf); + return path; + +#elif defined(ACORN) + //---------- RISCOS ---------- + char *p; + int i; + + path->append("."); + i = path->getLength(); + path->append(fileName); + for (p = path->getCString() + i; *p; ++p) { + if (*p == '/') { + *p = '.'; + } else if (*p == '.') { + *p = '/'; + } + } + return path; + +#elif defined(MACOS) + //---------- MacOS ---------- + char *p; + int i; + + path->append(":"); + i = path->getLength(); + path->append(fileName); + for (p = path->getCString() + i; *p; ++p) { + if (*p == '/') { + *p = ':'; + } else if (*p == '.') { + *p = ':'; + } + } + return path; + +#elif defined(__EMX__) + //---------- OS/2+EMX ---------- + int i; + + // appending "." does nothing + if (!strcmp(fileName, ".")) + return path; + + // appending ".." goes up one directory + if (!strcmp(fileName, "..")) { + for (i = path->getLength() - 2; i >= 0; --i) { + if (path->getChar(i) == '/' || path->getChar(i) == '\\' || + path->getChar(i) == ':') + break; + } + if (i <= 0) { + if (path->getChar(0) == '/' || path->getChar(0) == '\\') { + path->del(1, path->getLength() - 1); + } else if (path->getLength() >= 2 && path->getChar(1) == ':') { + path->del(2, path->getLength() - 2); + } else { + path->clear(); + path->append(".."); + } + } else { + if (path->getChar(i-1) == ':') + ++i; + path->del(i, path->getLength() - i); + } + return path; + } + + // otherwise, append "/" and new path component + if (path->getLength() > 0 && + path->getChar(path->getLength() - 1) != '/' && + path->getChar(path->getLength() - 1) != '\\') + path->append('/'); + path->append(fileName); + return path; + +#else + //---------- Unix ---------- + int i; + + // appending "." does nothing + if (!strcmp(fileName, ".")) + return path; + + // appending ".." goes up one directory + if (!strcmp(fileName, "..")) { + for (i = path->getLength() - 2; i >= 0; --i) { + if (path->getChar(i) == '/') + break; + } + if (i <= 0) { + if (path->getChar(0) == '/') { + path->del(1, path->getLength() - 1); + } else { + path->clear(); + path->append(".."); + } + } else { + path->del(i, path->getLength() - i); + } + return path; + } + + // otherwise, append "/" and new path component + if (path->getLength() > 0 && + path->getChar(path->getLength() - 1) != '/') + path->append('/'); + path->append(fileName); + return path; +#endif +} + +GooString *grabPath(char *fileName) { +#ifdef VMS + //---------- VMS ---------- + char *p; + + if ((p = strrchr(fileName, ']'))) + return new GooString(fileName, p + 1 - fileName); + if ((p = strrchr(fileName, ':'))) + return new GooString(fileName, p + 1 - fileName); + return new GooString(); + +#elif defined(__EMX__) || defined(_WIN32) + //---------- OS/2+EMX and Win32 ---------- + char *p; + + if ((p = strrchr(fileName, '/'))) + return new GooString(fileName, p - fileName); + if ((p = strrchr(fileName, '\\'))) + return new GooString(fileName, p - fileName); + if ((p = strrchr(fileName, ':'))) + return new GooString(fileName, p + 1 - fileName); + return new GooString(); + +#elif defined(ACORN) + //---------- RISCOS ---------- + char *p; + + if ((p = strrchr(fileName, '.'))) + return new GooString(fileName, p - fileName); + return new GooString(); + +#elif defined(MACOS) + //---------- MacOS ---------- + char *p; + + if ((p = strrchr(fileName, ':'))) + return new GooString(fileName, p - fileName); + return new GooString(); + +#else + //---------- Unix ---------- + char *p; + + if ((p = strrchr(fileName, '/'))) + return new GooString(fileName, p - fileName); + return new GooString(); +#endif +} + +GBool isAbsolutePath(char *path) { +#ifdef VMS + //---------- VMS ---------- + return strchr(path, ':') || + (path[0] == '[' && path[1] != '.' && path[1] != '-'); + +#elif defined(__EMX__) || defined(_WIN32) + //---------- OS/2+EMX and Win32 ---------- + return path[0] == '/' || path[0] == '\\' || path[1] == ':'; + +#elif defined(ACORN) + //---------- RISCOS ---------- + return path[0] == '$'; + +#elif defined(MACOS) + //---------- MacOS ---------- + return path[0] != ':'; + +#else + //---------- Unix ---------- + return path[0] == '/'; +#endif +} + +GooString *makePathAbsolute(GooString *path) { +#ifdef VMS + //---------- VMS ---------- + char buf[PATH_MAX+1]; + + if (!isAbsolutePath(path->getCString())) { + if (getcwd(buf, sizeof(buf))) { + path->insert(0, buf); + } + } + return path; + +#elif defined(_WIN32) + //---------- Win32 ---------- + char buf[MAX_PATH]; + char *fp; + + buf[0] = '\0'; + if (!GetFullPathName(path->getCString(), MAX_PATH, buf, &fp)) { + path->clear(); + return path; + } + path->clear(); + path->append(buf); + return path; + +#elif defined(ACORN) + //---------- RISCOS ---------- + path->insert(0, '@'); + return path; + +#elif defined(MACOS) + //---------- MacOS ---------- + path->del(0, 1); + return path; + +#else + //---------- Unix and OS/2+EMX ---------- + struct passwd *pw; + char buf[PATH_MAX+1]; + GooString *s; + char *p1, *p2; + int n; + + if (path->getChar(0) == '~') { + if (path->getChar(1) == '/' || +#ifdef __EMX__ + path->getChar(1) == '\\' || +#endif + path->getLength() == 1) { + path->del(0, 1); + s = getHomeDir(); + path->insert(0, s); + delete s; + } else { + p1 = path->getCString() + 1; +#ifdef __EMX__ + for (p2 = p1; *p2 && *p2 != '/' && *p2 != '\\'; ++p2) ; +#else + for (p2 = p1; *p2 && *p2 != '/'; ++p2) ; +#endif + if ((n = p2 - p1) > PATH_MAX) + n = PATH_MAX; + strncpy(buf, p1, n); + buf[n] = '\0'; + if ((pw = getpwnam(buf))) { + path->del(0, p2 - p1 + 1); + path->insert(0, pw->pw_dir); + } + } + } else if (!isAbsolutePath(path->getCString())) { + if (getcwd(buf, sizeof(buf))) { +#ifndef __EMX__ + path->insert(0, '/'); +#endif + path->insert(0, buf); + } + } + return path; +#endif +} + +time_t getModTime(char *fileName) { +#ifdef _WIN32 + //~ should implement this, but it's (currently) only used in xpdf + return 0; +#else + struct stat statBuf; + + if (stat(fileName, &statBuf)) { + return 0; + } + return statBuf.st_mtime; +#endif +} + +GBool openTempFile(GooString **name, FILE **f, char *mode) { +#if defined(_WIN32) + //---------- Win32 ---------- + char *tempDir; + GooString *s, *s2; + char buf[32]; + FILE *f2; + int t, i; + + // this has the standard race condition problem, but I haven't found + // a better way to generate temp file names with extensions on + // Windows + if ((tempDir = getenv("TEMP"))) { + s = new GooString(tempDir); + s->append('\\'); + } else { + s = new GooString(); + } + s->append("x"); + t = (int)time(NULL); + for (i = 0; i < 1000; ++i) { + sprintf(buf, "%d", t + i); + s2 = s->copy()->append(buf); + if (!(f2 = fopen(s2->getCString(), "r"))) { + if (!(f2 = fopen(s2->getCString(), mode))) { + delete s2; + delete s; + return gFalse; + } + *name = s2; + *f = f2; + delete s; + return gTrue; + } + fclose(f2); + delete s2; + } + delete s; + return gFalse; +#elif defined(VMS) || defined(__EMX__) || defined(ACORN) || defined(MACOS) + //---------- non-Unix ---------- + char *s; + + // There is a security hole here: an attacker can create a symlink + // with this file name after the tmpnam call and before the fopen + // call. I will happily accept fixes to this function for non-Unix + // OSs. + if (!(s = tmpnam(NULL))) { + return gFalse; + } + *name = new GooString(s); + if (!(*f = fopen((*name)->getCString(), mode))) { + delete (*name); + return gFalse; + } + return gTrue; +#else + //---------- Unix ---------- + char *s; + int fd; + +#if HAVE_MKSTEMP + if ((s = getenv("TMPDIR"))) { + *name = new GooString(s); + } else { + *name = new GooString("/tmp"); + } + (*name)->append("/XXXXXX"); + fd = mkstemp((*name)->getCString()); +#else // HAVE_MKSTEMP + if (!(s = tmpnam(NULL))) { + return gFalse; + } + *name = new GooString(s); + fd = open((*name)->getCString(), O_WRONLY | O_CREAT | O_EXCL, 0600); +#endif // HAVE_MKSTEMP + if (fd < 0 || !(*f = fdopen(fd, mode))) { + delete *name; + return gFalse; + } + return gTrue; +#endif +} + +GBool executeCommand(char *cmd) { +#ifdef VMS + return system(cmd) ? gTrue : gFalse; +#else + return system(cmd) ? gFalse : gTrue; +#endif +} + +char *getLine(char *buf, int size, FILE *f) { + int c, i; + + i = 0; + while (i < size - 1) { + if ((c = fgetc(f)) == EOF) { + break; + } + buf[i++] = (char)c; + if (c == '\x0a') { + break; + } + if (c == '\x0d') { + c = fgetc(f); + if (c == '\x0a' && i < size - 1) { + buf[i++] = (char)c; + } else if (c != EOF) { + ungetc(c, f); + } + break; + } + } + buf[i] = '\0'; + if (i == 0) { + return NULL; + } + return buf; +} + +//------------------------------------------------------------------------ +// GDir and GDirEntry +//------------------------------------------------------------------------ + +GDirEntry::GDirEntry(char *dirPath, char *nameA, GBool doStat) { +#ifdef VMS + char *p; +#elif defined(_WIN32) + DWORD fa; +#elif defined(ACORN) +#else + struct stat st; +#endif + + name = new GooString(nameA); + dir = gFalse; + fullPath = new GooString(dirPath); + appendToPath(fullPath, nameA); + if (doStat) { +#ifdef VMS + if (!strcmp(nameA, "-") || + ((p = strrchr(nameA, '.')) && !strncmp(p, ".DIR;", 5))) + dir = gTrue; +#elif defined(ACORN) +#else +#ifdef _WIN32 + fa = GetFileAttributes(fullPath->getCString()); + dir = (fa != 0xFFFFFFFF && (fa & FILE_ATTRIBUTE_DIRECTORY)); +#else + if (stat(fullPath->getCString(), &st) == 0) + dir = S_ISDIR(st.st_mode); +#endif +#endif + } +} + +GDirEntry::~GDirEntry() { + delete fullPath; + delete name; +} + +GDir::GDir(char *name, GBool doStatA) { + path = new GooString(name); + doStat = doStatA; +#if defined(_WIN32) + GooString *tmp; + + tmp = path->copy(); + tmp->append("/*.*"); + hnd = FindFirstFile(tmp->getCString(), &ffd); + delete tmp; +#elif defined(ACORN) +#elif defined(MACOS) +#else + dir = opendir(name); +#ifdef VMS + needParent = strchr(name, '[') != NULL; +#endif +#endif +} + +GDir::~GDir() { + delete path; +#if defined(_WIN32) + if (hnd != INVALID_HANDLE_VALUE) { + FindClose(hnd); + hnd = INVALID_HANDLE_VALUE; + } +#elif defined(ACORN) +#elif defined(MACOS) +#else + if (dir) + closedir(dir); +#endif +} + +GDirEntry *GDir::getNextEntry() { + GDirEntry *e; + +#if defined(_WIN32) + if (hnd != INVALID_HANDLE_VALUE) { + e = new GDirEntry(path->getCString(), ffd.cFileName, doStat); + if (!FindNextFile(hnd, &ffd)) { + FindClose(hnd); + hnd = INVALID_HANDLE_VALUE; + } + } else { + e = NULL; + } +#elif defined(ACORN) +#elif defined(MACOS) +#elif defined(VMS) + struct dirent *ent; + e = NULL; + if (dir) { + if (needParent) { + e = new GDirEntry(path->getCString(), "-", doStat); + needParent = gFalse; + return e; + } + ent = readdir(dir); + if (ent) { + e = new GDirEntry(path->getCString(), ent->d_name, doStat); + } + } +#else + struct dirent *ent; + e = NULL; + if (dir) { + do { + ent = readdir(dir); + } + while (ent && (!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, ".."))); + if (ent) { + e = new GDirEntry(path->getCString(), ent->d_name, doStat); + } + } +#endif + + return e; +} + +void GDir::rewind() { +#ifdef _WIN32 + GooString *tmp; + + if (hnd != INVALID_HANDLE_VALUE) + FindClose(hnd); + tmp = path->copy(); + tmp->append("/*.*"); + hnd = FindFirstFile(tmp->getCString(), &ffd); + delete tmp; +#elif defined(ACORN) +#elif defined(MACOS) +#else + if (dir) + rewinddir(dir); +#ifdef VMS + needParent = strchr(path->getCString(), '[') != NULL; +#endif +#endif +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/gfile.h b/Build/source/libs/poppler/poppler-0.18.4/goo/gfile.h new file mode 100644 index 00000000000..0bc010e7b58 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/gfile.h @@ -0,0 +1,159 @@ +//======================================================================== +// +// gfile.h +// +// Miscellaneous file and directory name manipulation. +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2009, 2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef GFILE_H +#define GFILE_H + +#include "poppler/poppler-config.h" +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +extern "C" { +#if defined(_WIN32) +# include <sys/stat.h> +# ifdef FPTEX +# include <win32lib.h> +# else +# include <windows.h> +# endif +#elif defined(ACORN) +#elif defined(MACOS) +# include <ctime.h> +#else +# include <unistd.h> +# include <sys/types.h> +# ifdef VMS +# include "vms_dirent.h" +# elif HAVE_DIRENT_H +# include <dirent.h> +# define NAMLEN(d) strlen((d)->d_name) +# else +# define dirent direct +# define NAMLEN(d) (d)->d_namlen +# if HAVE_SYS_NDIR_H +# include <sys/ndir.h> +# endif +# if HAVE_SYS_DIR_H +# include <sys/dir.h> +# endif +# if HAVE_NDIR_H +# include <ndir.h> +# endif +# endif +#endif +} +#include "gtypes.h" + +class GooString; + +//------------------------------------------------------------------------ + +// Get home directory path. +extern GooString *getHomeDir(); + +// Get current directory. +extern GooString *getCurrentDir(); + +// Append a file name to a path string. <path> may be an empty +// string, denoting the current directory). Returns <path>. +extern GooString *appendToPath(GooString *path, char *fileName); + +// Grab the path from the front of the file name. If there is no +// directory component in <fileName>, returns an empty string. +extern GooString *grabPath(char *fileName); + +// Is this an absolute path or file name? +extern GBool isAbsolutePath(char *path); + +// Make this path absolute by prepending current directory (if path is +// relative) or prepending user's directory (if path starts with '~'). +extern GooString *makePathAbsolute(GooString *path); + +// Get the modification time for <fileName>. Returns 0 if there is an +// error. +extern time_t getModTime(char *fileName); + +// Create a temporary file and open it for writing. If <ext> is not +// NULL, it will be used as the file name extension. Returns both the +// name and the file pointer. For security reasons, all writing +// should be done to the returned file pointer; the file may be +// reopened later for reading, but not for writing. The <mode> string +// should be "w" or "wb". Returns true on success. +extern GBool openTempFile(GooString **name, FILE **f, char *mode); + +// Execute <command>. Returns true on success. +extern GBool executeCommand(char *cmd); + +// Just like fgets, but handles Unix, Mac, and/or DOS end-of-line +// conventions. +extern char *getLine(char *buf, int size, FILE *f); + +//------------------------------------------------------------------------ +// GDir and GDirEntry +//------------------------------------------------------------------------ + +class GDirEntry { +public: + + GDirEntry(char *dirPath, char *nameA, GBool doStat); + ~GDirEntry(); + GooString *getName() { return name; } + GooString *getFullPath() { return fullPath; } + GBool isDir() { return dir; } + +private: + + GooString *name; // dir/file name + GooString *fullPath; + GBool dir; // is it a directory? +}; + +class GDir { +public: + + GDir(char *name, GBool doStatA = gTrue); + ~GDir(); + GDirEntry *getNextEntry(); + void rewind(); + +private: + + GooString *path; // directory path + GBool doStat; // call stat() for each entry? +#if defined(_WIN32) + WIN32_FIND_DATA ffd; + HANDLE hnd; +#elif defined(ACORN) +#elif defined(MACOS) +#else + DIR *dir; // the DIR structure from opendir() +#ifdef VMS + GBool needParent; // need to return an entry for [-] +#endif +#endif +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/gmem.cc b/Build/source/libs/poppler/poppler-0.18.4/goo/gmem.cc new file mode 100644 index 00000000000..3e9adb0582c --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/gmem.cc @@ -0,0 +1,326 @@ +/* + * gmem.c + * + * Memory routines with out-of-memory checking. + * + * Copyright 1996-2003 Glyph & Cog, LLC + */ + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Takashi Iwai <tiwai@suse.de> +// Copyright (C) 2007-2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2008 Jonathan Kew <jonathan_kew@sil.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#include <string.h> +#include <limits.h> +#include "gmem.h" + +#ifdef DEBUG_MEM + +typedef struct _GMemHdr { + unsigned int magic; + int size; + int index; + struct _GMemHdr *next, *prev; +} GMemHdr; + +#define gMemHdrSize ((sizeof(GMemHdr) + 7) & ~7) +#define gMemTrlSize (sizeof(long)) + +#define gMemMagic 0xabcd9999 + +#if gmemTrlSize==8 +#define gMemDeadVal 0xdeadbeefdeadbeefUL +#else +#define gMemDeadVal 0xdeadbeefUL +#endif + +/* round data size so trailer will be aligned */ +#define gMemDataSize(size) \ + ((((size) + gMemTrlSize - 1) / gMemTrlSize) * gMemTrlSize) + +static GMemHdr *gMemHead = NULL; +static GMemHdr *gMemTail = NULL; + +static int gMemIndex = 0; +static int gMemAlloc = 0; +static int gMemInUse = 0; + +#endif /* DEBUG_MEM */ + +inline static void *gmalloc(size_t size, bool checkoverflow) { +#ifdef DEBUG_MEM + int size1; + char *mem; + GMemHdr *hdr; + void *data; + unsigned long *trl, *p; + + if (size <= 0) { + return NULL; + } + size1 = gMemDataSize(size); + if (!(mem = (char *)malloc(size1 + gMemHdrSize + gMemTrlSize))) { + fprintf(stderr, "Out of memory\n"); + if (checkoverflow) return NULL; + else exit(1); + } + hdr = (GMemHdr *)mem; + data = (void *)(mem + gMemHdrSize); + trl = (unsigned long *)(mem + gMemHdrSize + size1); + hdr->magic = gMemMagic; + hdr->size = size; + hdr->index = gMemIndex++; + if (gMemTail) { + gMemTail->next = hdr; + hdr->prev = gMemTail; + gMemTail = hdr; + } else { + hdr->prev = NULL; + gMemHead = gMemTail = hdr; + } + hdr->next = NULL; + ++gMemAlloc; + gMemInUse += size; + for (p = (unsigned long *)data; p <= trl; ++p) { + *p = gMemDeadVal; + } + return data; +#else + void *p; + + if (size <= 0) { + return NULL; + } + if (!(p = malloc(size))) { + fprintf(stderr, "Out of memory\n"); + if (checkoverflow) return NULL; + else exit(1); + } + return p; +#endif +} + +void *gmalloc(size_t size) { + return gmalloc(size, false); +} + +void *gmalloc_checkoverflow(size_t size) { + return gmalloc(size, true); +} + +inline static void *grealloc(void *p, size_t size, bool checkoverflow) { +#ifdef DEBUG_MEM + GMemHdr *hdr; + void *q; + int oldSize; + + if (size <= 0) { + if (p) { + gfree(p); + } + return NULL; + } + if (p) { + hdr = (GMemHdr *)((char *)p - gMemHdrSize); + oldSize = hdr->size; + q = gmalloc(size, checkoverflow); + memcpy(q, p, size < oldSize ? size : oldSize); + gfree(p); + } else { + q = gmalloc(size, checkoverflow); + } + return q; +#else + void *q; + + if (size <= 0) { + if (p) { + free(p); + } + return NULL; + } + if (p) { + q = realloc(p, size); + } else { + q = malloc(size); + } + if (!q) { + fprintf(stderr, "Out of memory\n"); + if (checkoverflow) return NULL; + else exit(1); + } + return q; +#endif +} + +void *grealloc(void *p, size_t size) { + return grealloc(p, size, false); +} + +void *grealloc_checkoverflow(void *p, size_t size) { + return grealloc(p, size, true); +} + +inline static void *gmallocn(int nObjs, int objSize, bool checkoverflow) { + int n; + + if (nObjs == 0) { + return NULL; + } + n = nObjs * objSize; + if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) { + fprintf(stderr, "Bogus memory allocation size\n"); + if (checkoverflow) return NULL; + else exit(1); + } + return gmalloc(n, checkoverflow); +} + +void *gmallocn(int nObjs, int objSize) { + return gmallocn(nObjs, objSize, false); +} + +void *gmallocn_checkoverflow(int nObjs, int objSize) { + return gmallocn(nObjs, objSize, true); +} + +inline static void *gmallocn3(int a, int b, int c, bool checkoverflow) { + int n = a * b; + if (b <= 0 || a < 0 || a >= INT_MAX / b) { + fprintf(stderr, "Bogus memory allocation size\n"); + if (checkoverflow) return NULL; + else exit(1); + } + return gmallocn(n, c, checkoverflow); +} + +void *gmallocn3(int a, int b, int c) { + return gmallocn3(a, b, c, false); +} + +void *gmallocn3_checkoverflow(int a, int b, int c) { + return gmallocn3(a, b, c, true); +} + +inline static void *greallocn(void *p, int nObjs, int objSize, bool checkoverflow) { + int n; + + if (nObjs == 0) { + if (p) { + gfree(p); + } + return NULL; + } + n = nObjs * objSize; + if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) { + fprintf(stderr, "Bogus memory allocation size\n"); + if (checkoverflow) { + gfree(p); + return NULL; + } else { + exit(1); + } + } + return grealloc(p, n, checkoverflow); +} + +void *greallocn(void *p, int nObjs, int objSize) { + return greallocn(p, nObjs, objSize, false); +} + +void *greallocn_checkoverflow(void *p, int nObjs, int objSize) { + return greallocn(p, nObjs, objSize, true); +} + +void gfree(void *p) { +#ifdef DEBUG_MEM + int size; + GMemHdr *hdr; + unsigned long *trl, *clr; + + if (p) { + hdr = (GMemHdr *)((char *)p - gMemHdrSize); + if (hdr->magic == gMemMagic && + ((hdr->prev == NULL) == (hdr == gMemHead)) && + ((hdr->next == NULL) == (hdr == gMemTail))) { + if (hdr->prev) { + hdr->prev->next = hdr->next; + } else { + gMemHead = hdr->next; + } + if (hdr->next) { + hdr->next->prev = hdr->prev; + } else { + gMemTail = hdr->prev; + } + --gMemAlloc; + gMemInUse -= hdr->size; + size = gMemDataSize(hdr->size); + trl = (unsigned long *)((char *)hdr + gMemHdrSize + size); + if (*trl != gMemDeadVal) { + fprintf(stderr, "Overwrite past end of block %d at address %p\n", + hdr->index, p); + } + for (clr = (unsigned long *)hdr; clr <= trl; ++clr) { + *clr = gMemDeadVal; + } + free(hdr); + } else { + fprintf(stderr, "Attempted to free bad address %p\n", p); + } + } +#else + if (p) { + free(p); + } +#endif +} + +#ifdef DEBUG_MEM +void gMemReport(FILE *f) { + GMemHdr *p; + + fprintf(f, "%d memory allocations in all\n", gMemIndex); + if (gMemAlloc > 0) { + fprintf(f, "%d memory blocks left allocated:\n", gMemAlloc); + fprintf(f, " index size\n"); + fprintf(f, "-------- --------\n"); + for (p = gMemHead; p; p = p->next) { + fprintf(f, "%8d %8d\n", p->index, p->size); + } + } else { + fprintf(f, "No memory blocks left allocated\n"); + } +} +#endif + +char *copyString(char *s) { + char *s1; + + s1 = (char *)gmalloc(strlen(s) + 1); + strcpy(s1, s); + return s1; +} + +char *gstrndup(const char *s, size_t n) { + char *s1 = (char*)gmalloc(n + 1); /* cannot return NULL for size > 0 */ + s1[n] = '\0'; + memcpy(s1, s, n); + return s1; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/gmem.h b/Build/source/libs/poppler/poppler-0.18.4/goo/gmem.h new file mode 100644 index 00000000000..405c8291fd4 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/gmem.h @@ -0,0 +1,92 @@ +/* + * gmem.h + * + * Memory routines with out-of-memory checking. + * + * Copyright 1996-2003 Glyph & Cog, LLC + */ + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Takashi Iwai <tiwai@suse.de> +// Copyright (C) 2007-2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2008 Jonathan Kew <jonathan_kew@sil.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef GMEM_H +#define GMEM_H + +#include <stdio.h> +#include "poppler/poppler-config.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Same as malloc, but prints error message and exits if malloc() + * returns NULL. + */ +extern void *gmalloc(size_t size); +extern void *gmalloc_checkoverflow(size_t size); + +/* + * Same as realloc, but prints error message and exits if realloc() + * returns NULL. If <p> is NULL, calls malloc instead of realloc(). + */ +extern void *grealloc(void *p, size_t size); +extern void *grealloc_checkoverflow(size_t size); + +/* + * These are similar to gmalloc and grealloc, but take an object count + * and size. The result is similar to allocating nObjs * objSize + * bytes, but there is an additional error check that the total size + * doesn't overflow an int. + * The gmallocn_checkoverflow variant returns NULL instead of exiting + * the application if a overflow is detected + */ +extern void *gmallocn(int nObjs, int objSize); +extern void *gmallocn_checkoverflow(int nObjs, int objSize); +extern void *gmallocn3(int a, int b, int c); +extern void *gmallocn3_checkoverflow(int a, int b, int c); +extern void *greallocn(void *p, int nObjs, int objSize); +extern void *greallocn_checkoverflow(void *p, int nObjs, int objSize); + +/* + * Same as free, but checks for and ignores NULL pointers. + */ +extern void gfree(void *p); + +#ifdef DEBUG_MEM +/* + * Report on unfreed memory. + */ +extern void gMemReport(FILE *f); +#else +#define gMemReport(f) +#endif + +/* + * Allocate memory and copy a string into it. + */ +extern char *copyString(char *s); + +/* + * Allocate memory and copy a limited-length string to it. + */ +extern char *gstrndup(const char *s, size_t n); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/gmempp.cc b/Build/source/libs/poppler/poppler-0.18.4/goo/gmempp.cc new file mode 100644 index 00000000000..a70338ca3ce --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/gmempp.cc @@ -0,0 +1,32 @@ +//======================================================================== +// +// gmempp.cc +// +// Use gmalloc/gfree for C++ new/delete operators. +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +#include <config.h> +#include "gmem.h" + +#ifdef DEBUG_MEM + +void *operator new(size_t size) { + return gmalloc((int)size); +} + +void *operator new[](size_t size) { + return gmalloc((int)size); +} + +void operator delete(void *p) { + gfree(p); +} + +void operator delete[](void *p) { + gfree(p); +} + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/gstrtod.cc b/Build/source/libs/poppler/poppler-0.18.4/goo/gstrtod.cc new file mode 100644 index 00000000000..e6c3a00741f --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/gstrtod.cc @@ -0,0 +1,147 @@ +/* This file is part of Libspectre. + * + * Copyright (C) 2007 Albert Astals Cid <aacid@kde.org> + * Copyright (C) 2007 Carlos Garcia Campos <carlosgc@gnome.org> + * + * Libspectre is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * Libspectre is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* This function comes from spectre-utils from libspectre */ + +#include "gstrtod.h" + +#include <clocale> +#include <cerrno> +#include <cstdlib> +#include <cstring> + +#define ascii_isspace(c) \ + (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v') +#define ascii_isdigit(c) \ + (c >= '0' && c <= '9') + +double gatof(const char *nptr) +{ + return gstrtod(nptr, NULL); +} + +double gstrtod(const char *nptr, char **endptr) +{ + char *fail_pos; + double val; + struct lconv *locale_data; + const char *decimal_point; + int decimal_point_len; + const char *p, *decimal_point_pos; + const char *end = NULL; /* Silence gcc */ + int strtod_errno; + + fail_pos = NULL; + + locale_data = localeconv (); + decimal_point = locale_data->decimal_point; + decimal_point_len = strlen (decimal_point); + + decimal_point_pos = NULL; + end = NULL; + + if (decimal_point[0] != '.' || decimal_point[1] != 0) { + p = nptr; + /* Skip leading space */ + while (ascii_isspace (*p)) + p++; + + /* Skip leading optional sign */ + if (*p == '+' || *p == '-') + p++; + + if (ascii_isdigit (*p) || *p == '.') { + while (ascii_isdigit (*p)) + p++; + + if (*p == '.') + decimal_point_pos = p++; + + while (ascii_isdigit (*p)) + p++; + + if (*p == 'e' || *p == 'E') + p++; + if (*p == '+' || *p == '-') + p++; + while (ascii_isdigit (*p)) + p++; + + end = p; + } + /* For the other cases, we need not convert the decimal point */ + } + + if (decimal_point_pos) { + char *copy, *c; + + /* We need to convert the '.' to the locale specific decimal point */ + copy = (char *) malloc (end - nptr + 1 + decimal_point_len); + + c = copy; + memcpy (c, nptr, decimal_point_pos - nptr); + c += decimal_point_pos - nptr; + memcpy (c, decimal_point, decimal_point_len); + c += decimal_point_len; + memcpy (c, decimal_point_pos + 1, end - (decimal_point_pos + 1)); + c += end - (decimal_point_pos + 1); + *c = 0; + + errno = 0; + val = strtod (copy, &fail_pos); + strtod_errno = errno; + + if (fail_pos) { + if (fail_pos - copy > decimal_point_pos - nptr) + fail_pos = (char *)nptr + (fail_pos - copy) - (decimal_point_len - 1); + else + fail_pos = (char *)nptr + (fail_pos - copy); + } + + free (copy); + } else if (end) { + char *copy; + + copy = (char *) malloc (end - (char *)nptr + 1); + memcpy (copy, nptr, end - nptr); + *(copy + (end - (char *)nptr)) = 0; + + errno = 0; + val = strtod (copy, &fail_pos); + strtod_errno = errno; + + if (fail_pos) { + fail_pos = (char *)nptr + (fail_pos - copy); + } + + free (copy); + } else { + errno = 0; + val = strtod (nptr, &fail_pos); + strtod_errno = errno; + } + + if (endptr) + *endptr = fail_pos; + + errno = strtod_errno; + + return val; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/gstrtod.h b/Build/source/libs/poppler/poppler-0.18.4/goo/gstrtod.h new file mode 100644 index 00000000000..e8abdadf53e --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/gstrtod.h @@ -0,0 +1,43 @@ +/* This file is part of Libspectre. + * + * Copyright (C) 2007 Albert Astals Cid <aacid@kde.org> + * Copyright (C) 2007 Carlos Garcia Campos <carlosgc@gnome.org> + * + * Libspectre is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * Libspectre is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* This function comes from spectre-utils from libspectre */ + +#ifndef GSTRTOD_H +#define GSTRTOD_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* This function behaves like the standard atof()/(strtod() function + * does in the C locale. It does this without actually changing + * the current locale, since that would not be thread-safe. + * A limitation of the implementation is that this function + * will still accept localized versions of infinities and NANs. + */ +double gatof(const char *nptr); +double gstrtod(const char *nptr, char **endptr); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/gtypes.h b/Build/source/libs/poppler/poppler-0.18.4/goo/gtypes.h new file mode 100644 index 00000000000..b7a2dd2d268 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/gtypes.h @@ -0,0 +1,48 @@ +/* + * gtypes.h + * + * Some useful simple types. + * + * Copyright 1996-2003 Glyph & Cog, LLC + */ + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2010 Patrick Spendrin <ps_ml@gmx.de> +// Copyright (C) 2010 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef GTYPES_H +#define GTYPES_H + +/* + * These have stupid names to avoid conflicts with some (but not all) + * C++ compilers which define them. + */ +typedef bool GBool; +#define gTrue true +#define gFalse false + +#ifdef _MSC_VER +#pragma warning(disable: 4800) /* 'type' : forcing value to bool 'true' or 'false' (performance warning) */ +#endif + +/* + * These have stupid names to avoid conflicts with <sys/types.h>, + * which on various systems defines some random subset of these. + */ +typedef unsigned char Guchar; +typedef unsigned short Gushort; +typedef unsigned int Guint; +typedef unsigned long Gulong; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/goo/gtypes_p.h b/Build/source/libs/poppler/poppler-0.18.4/goo/gtypes_p.h new file mode 100644 index 00000000000..cc4866e1389 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/goo/gtypes_p.h @@ -0,0 +1,30 @@ +/* + * gtypes_p.h + * + * Some useful simple types. + * + * Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> + */ + +#ifndef GTYPES_P_H +#define GTYPES_P_H + +#include "config.h" + +/* + * Define precise integer types. + */ +#if HAVE_STDINT_H +#include <stdint.h> +#elif _MSC_VER +typedef signed __int8 int8_t; +typedef unsigned __int8 uint8_t; +typedef signed __int16 int16_t; +typedef unsigned __int16 uint16_t; +typedef signed __int32 int32_t; +typedef unsigned __int32 uint32_t; +typedef signed __int64 int64_t; +typedef unsigned __int64 uint64_t; +#endif + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/gtk-doc.make b/Build/source/libs/poppler/poppler-0.18.4/gtk-doc.make new file mode 100644 index 00000000000..9841de47922 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/gtk-doc.make @@ -0,0 +1,256 @@ +# -*- mode: makefile -*- + +#################################### +# Everything below here is generic # +#################################### + +if GTK_DOC_USE_LIBTOOL +GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +GTKDOC_RUN = $(LIBTOOL) --mode=execute +else +GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +GTKDOC_RUN = +endif + +# We set GPATH here; this gives us semantics for GNU make +# which are more like other make's VPATH, when it comes to +# whether a source that is a target of one rule is then +# searched for in VPATH/GPATH. +# +GPATH = $(srcdir) + +TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) + +SETUP_FILES = \ + $(content_files) \ + $(DOC_MAIN_SGML_FILE) \ + $(DOC_MODULE)-sections.txt \ + $(DOC_MODULE)-overrides.txt + +EXTRA_DIST = \ + $(HTML_IMAGES) \ + $(SETUP_FILES) + +DOC_STAMPS=setup-build.stamp scan-build.stamp sgml-build.stamp \ + html-build.stamp pdf-build.stamp \ + sgml.stamp html.stamp pdf.stamp + +SCANOBJ_FILES = \ + $(DOC_MODULE).args \ + $(DOC_MODULE).hierarchy \ + $(DOC_MODULE).interfaces \ + $(DOC_MODULE).prerequisites \ + $(DOC_MODULE).signals + +REPORT_FILES = \ + $(DOC_MODULE)-undocumented.txt \ + $(DOC_MODULE)-undeclared.txt \ + $(DOC_MODULE)-unused.txt + +CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) + +if ENABLE_GTK_DOC +if GTK_DOC_BUILD_HTML +HTML_BUILD_STAMP=html-build.stamp +else +HTML_BUILD_STAMP= +endif +if GTK_DOC_BUILD_PDF +PDF_BUILD_STAMP=pdf-build.stamp +else +PDF_BUILD_STAMP= +endif + +all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) +else +all-local: +endif + +docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) + +$(REPORT_FILES): sgml-build.stamp + +#### setup #### + +setup-build.stamp: + -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ + echo ' DOC Preparing build'; \ + files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \ + if test "x$$files" != "x" ; then \ + for file in $$files ; do \ + test -f $(abs_srcdir)/$$file && \ + cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \ + done; \ + fi; \ + fi + @touch setup-build.stamp + + +#### scan #### + +scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) + @echo ' DOC Scanning header files' + @_source_dir='' ; \ + for i in $(DOC_SOURCE_DIR) ; do \ + _source_dir="$${_source_dir} --source-dir=$$i" ; \ + done ; \ + gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) + @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ + echo " DOC Introspecting gobjects"; \ + scanobj_options=""; \ + gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ + if test "$(?)" = "0"; then \ + if test "x$(V)" = "x1"; then \ + scanobj_options="--verbose"; \ + fi; \ + fi; \ + CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ + gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ + else \ + for i in $(SCANOBJ_FILES) ; do \ + test -f $$i || touch $$i ; \ + done \ + fi + @touch scan-build.stamp + +$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp + @true + +#### xml #### + +sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files) + @echo ' DOC Building XML' + @_source_dir='' ; \ + for i in $(DOC_SOURCE_DIR) ; do \ + _source_dir="$${_source_dir} --source-dir=$$i" ; \ + done ; \ + gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) + @touch sgml-build.stamp + +sgml.stamp: sgml-build.stamp + @true + +#### html #### + +html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) + @echo ' DOC Building HTML' + @rm -rf html + @mkdir html + @mkhtml_options=""; \ + gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ + if test "$(?)" = "0"; then \ + if test "x$(V)" = "x1"; then \ + mkhtml_options="$$mkhtml_options --verbose"; \ + fi; \ + fi; \ + gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ + if test "$(?)" = "0"; then \ + mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ + fi; \ + cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) + -@test "x$(HTML_IMAGES)" = "x" || \ + for file in $(HTML_IMAGES) ; do \ + if test -f $(abs_srcdir)/$$file ; then \ + cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ + fi; \ + if test -f $(abs_builddir)/$$file ; then \ + cp $(abs_builddir)/$$file $(abs_builddir)/html; \ + fi; \ + done; + @echo ' DOC Fixing cross-references' + @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) + @touch html-build.stamp + +#### pdf #### + +pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) + @echo ' DOC Building PDF' + @rm -f $(DOC_MODULE).pdf + @mkpdf_options=""; \ + gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ + if test "$(?)" = "0"; then \ + if test "x$(V)" = "x1"; then \ + mkpdf_options="$$mkpdf_options --verbose"; \ + fi; \ + fi; \ + if test "x$(HTML_IMAGES)" != "x"; then \ + for img in $(HTML_IMAGES); do \ + part=`dirname $$img`; \ + echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ + if test $$? != 0; then \ + mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ + fi; \ + done; \ + fi; \ + gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) + @touch pdf-build.stamp + +############## + +clean-local: + @rm -f *~ *.bak + @rm -rf .libs + +distclean-local: + @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ + $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt + @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ + rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \ + fi + +maintainer-clean-local: clean + @rm -rf xml html + +install-data-local: + @installfiles=`echo $(builddir)/html/*`; \ + if test "$$installfiles" = '$(builddir)/html/*'; \ + then echo 1>&2 'Nothing to install' ; \ + else \ + if test -n "$(DOC_MODULE_VERSION)"; then \ + installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ + else \ + installdir="$(DESTDIR)$(TARGET_DIR)"; \ + fi; \ + $(mkinstalldirs) $${installdir} ; \ + for i in $$installfiles; do \ + echo ' $(INSTALL_DATA) '$$i ; \ + $(INSTALL_DATA) $$i $${installdir}; \ + done; \ + if test -n "$(DOC_MODULE_VERSION)"; then \ + mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ + $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ + fi; \ + $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ + fi + +uninstall-local: + @if test -n "$(DOC_MODULE_VERSION)"; then \ + installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ + else \ + installdir="$(DESTDIR)$(TARGET_DIR)"; \ + fi; \ + rm -rf $${installdir} + +# +# Require gtk-doc when making dist +# +if ENABLE_GTK_DOC +dist-check-gtkdoc: +else +dist-check-gtkdoc: + @echo "*** gtk-doc must be installed and enabled in order to make dist" + @false +endif + +dist-hook: dist-check-gtkdoc dist-hook-local + @mkdir $(distdir)/html + @cp ./html/* $(distdir)/html + @-cp ./$(DOC_MODULE).pdf $(distdir)/ + @-cp ./$(DOC_MODULE).types $(distdir)/ + @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ + @cd $(distdir) && rm -f $(DISTCLEANFILES) + @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html + +.PHONY : dist-hook-local docs diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-cairo-uninstalled.pc.in b/Build/source/libs/poppler/poppler-0.18.4/poppler-cairo-uninstalled.pc.in new file mode 100644 index 00000000000..2458eb20df8 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-cairo-uninstalled.pc.in @@ -0,0 +1,6 @@ +Name: poppler-cairo +Description: Cairo backend for Poppler PDF rendering library - uninstalled +Version: @VERSION@ +Requires: poppler = @VERSION@ cairo >= @CAIRO_VERSION@ + +Libs: ${pc_top_builddir}/${pcfiledir}/poppler/libpoppler-cairo.la diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-cairo.pc.cmake b/Build/source/libs/poppler/poppler-0.18.4/poppler-cairo.pc.cmake new file mode 100644 index 00000000000..b32f118314b --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-cairo.pc.cmake @@ -0,0 +1,9 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${exec_prefix}/lib@LIB_SUFFIX@ +includedir=${prefix}/include + +Name: poppler-cairo +Description: Cairo backend for Poppler PDF rendering library +Version: @POPPLER_VERSION@ +Requires: poppler = @POPPLER_VERSION@ cairo >= @CAIRO_VERSION@ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-cairo.pc.in b/Build/source/libs/poppler/poppler-0.18.4/poppler-cairo.pc.in new file mode 100644 index 00000000000..367a5b690bf --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-cairo.pc.in @@ -0,0 +1,9 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: poppler-cairo +Description: Cairo backend for Poppler PDF rendering library +Version: @VERSION@ +Requires: poppler = @VERSION@ cairo >= @CAIRO_VERSION@ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-cpp-uninstalled.pc.in b/Build/source/libs/poppler/poppler-0.18.4/poppler-cpp-uninstalled.pc.in new file mode 100644 index 00000000000..af3640eb2c1 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-cpp-uninstalled.pc.in @@ -0,0 +1,7 @@ +Name: poppler-cpp +Description: cpp backend for Poppler PDF rendering library - uninstalled +Version: @VERSION@ +Requires: poppler = @VERSION@ + +Libs: ${pc_top_builddir}/${pcfiledir}/cpp/libpoppler-cpp.la +Cflags: -I${pc_top_builddir}/${pcfiledir}/cpp diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-cpp.pc.cmake b/Build/source/libs/poppler/poppler-0.18.4/poppler-cpp.pc.cmake new file mode 100644 index 00000000000..3f56b3d9d90 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-cpp.pc.cmake @@ -0,0 +1,13 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${exec_prefix}/lib@LIB_SUFFIX@ +includedir=${prefix}/include + +Name: poppler-cpp +Description: cpp backend for Poppler PDF rendering library +Version: @POPPLER_VERSION@ +Requires: @PC_REQUIRES@ +@PC_REQUIRES_PRIVATE@ + +Libs: -L${libdir} -lpoppler-cpp +Cflags: -I${includedir}/poppler/cpp diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-cpp.pc.in b/Build/source/libs/poppler/poppler-0.18.4/poppler-cpp.pc.in new file mode 100644 index 00000000000..a7e97c25dfe --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-cpp.pc.in @@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: poppler-cpp +Description: cpp backend for Poppler PDF rendering library +Version: @VERSION@ +Requires: @PC_REQUIRES@ +@PC_REQUIRES_PRIVATE@ + +Libs: -L${libdir} -lpoppler-cpp +Cflags: -I${includedir}/poppler/cpp diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-glib-uninstalled.pc.in b/Build/source/libs/poppler/poppler-0.18.4/poppler-glib-uninstalled.pc.in new file mode 100644 index 00000000000..5fcb6f24b9a --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-glib-uninstalled.pc.in @@ -0,0 +1,7 @@ +Name: poppler-glib +Description: GLib wrapper for poppler - uninstalled +Version: @VERSION@ +Requires: glib-2.0 >= @GLIB_REQUIRED@ gobject-2.0 >= @GLIB_REQUIRED@ cairo >= @CAIRO_VERSION@ + +Libs: ${pc_top_builddir}/${pcfiledir}/glib/libpoppler-glib.la +Cflags: -I${pc_top_builddir}/${pcfiledir}/glib diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-glib.pc.cmake b/Build/source/libs/poppler/poppler-0.18.4/poppler-glib.pc.cmake new file mode 100644 index 00000000000..e15e6699a43 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-glib.pc.cmake @@ -0,0 +1,13 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${exec_prefix}/lib@LIB_SUFFIX@ +includedir=${prefix}/include + +Name: poppler-glib +Description: GLib wrapper for poppler +Version: @POPPLER_VERSION@ +Requires: glib-2.0 >= @GLIB_REQUIRED@ gobject-2.0 >= @GLIB_REQUIRED@ cairo >= @CAIRO_VERSION@ +@PC_REQUIRES_PRIVATE@ + +Libs: -L${libdir} -lpoppler-glib +Cflags: -I${includedir}/poppler/glib diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-glib.pc.in b/Build/source/libs/poppler/poppler-0.18.4/poppler-glib.pc.in new file mode 100644 index 00000000000..9ba8978f6ec --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-glib.pc.in @@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: poppler-glib +Description: GLib wrapper for poppler +Version: @VERSION@ +Requires: glib-2.0 >= @GLIB_REQUIRED@ gobject-2.0 >= @GLIB_REQUIRED@ cairo >= @CAIRO_VERSION@ +@PC_REQUIRES_PRIVATE@ + +Libs: -L${libdir} -lpoppler-glib +Cflags: -I${includedir}/poppler/glib diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-qt4-uninstalled.pc.in b/Build/source/libs/poppler/poppler-0.18.4/poppler-qt4-uninstalled.pc.in new file mode 100644 index 00000000000..3a336c6c294 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-qt4-uninstalled.pc.in @@ -0,0 +1,7 @@ +Name: poppler-qt4 +Description: Qt4 bindings for poppler - uninstalled +Version: @VERSION@ +Requires: poppler = @VERSION@ + +Libs: ${pc_top_builddir}/${pcfiledir}/qt4/src/libpoppler-qt4.la +Cflags: -I${pc_top_builddir}/${pcfiledir}/qt4/src diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-qt4.pc.cmake b/Build/source/libs/poppler/poppler-0.18.4/poppler-qt4.pc.cmake new file mode 100644 index 00000000000..b17fd5d8453 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-qt4.pc.cmake @@ -0,0 +1,13 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${exec_prefix}/lib@LIB_SUFFIX@ +includedir=${prefix}/include + +Name: poppler-qt4 +Description: Qt4 bindings for poppler +Version: @POPPLER_VERSION@ +Requires: @PC_REQUIRES@ +@PC_REQUIRES_PRIVATE@ + +Libs: -L${libdir} -lpoppler-qt4 +Cflags: -I${includedir}/poppler/qt4 diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-qt4.pc.in b/Build/source/libs/poppler/poppler-0.18.4/poppler-qt4.pc.in new file mode 100644 index 00000000000..306ae46e0b0 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-qt4.pc.in @@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: poppler-qt4 +Description: Qt4 bindings for poppler +Version: @VERSION@ +Requires: @PC_REQUIRES@ +@PC_REQUIRES_PRIVATE@ + +Libs: -L${libdir} -lpoppler-qt4 +Cflags: -I${includedir}/poppler/qt4 diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-splash-uninstalled.pc.in b/Build/source/libs/poppler/poppler-0.18.4/poppler-splash-uninstalled.pc.in new file mode 100644 index 00000000000..436ecdb8f1b --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-splash-uninstalled.pc.in @@ -0,0 +1,7 @@ +Name: poppler-splash +Description: Splash backend for Poppler PDF rendering library - uninstalled +Version: @VERSION@ +Requires: poppler = @VERSION@ + +Libs: ${pc_top_builddir}/${pcfiledir}/splash/libsplash.la + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-splash.pc.cmake b/Build/source/libs/poppler/poppler-0.18.4/poppler-splash.pc.cmake new file mode 100644 index 00000000000..cb95b3d2d27 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-splash.pc.cmake @@ -0,0 +1,9 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${exec_prefix}/lib@LIB_SUFFIX@ +includedir=${prefix}/include + +Name: poppler-splash +Description: Splash backend for Poppler PDF rendering library +Version: @POPPLER_VERSION@ +Requires: poppler = @POPPLER_VERSION@ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-splash.pc.in b/Build/source/libs/poppler/poppler-0.18.4/poppler-splash.pc.in new file mode 100644 index 00000000000..cf3491fc7cf --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-splash.pc.in @@ -0,0 +1,9 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: poppler-splash +Description: Splash backend for Poppler PDF rendering library +Version: @VERSION@ +Requires: poppler = @VERSION@ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler-uninstalled.pc.in b/Build/source/libs/poppler/poppler-0.18.4/poppler-uninstalled.pc.in new file mode 100644 index 00000000000..6076e80c5b3 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler-uninstalled.pc.in @@ -0,0 +1,6 @@ +Name: poppler +Description: PDF rendering library - uninstalled +Version: @VERSION@ + +Libs: ${pc_top_builddir}/${pcfiledir}/poppler/libpoppler.la +Cflags: -I${pc_top_builddir}/${pcfiledir}/poppler diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler.pc.cmake b/Build/source/libs/poppler/poppler-0.18.4/poppler.pc.cmake new file mode 100644 index 00000000000..f1aebedbefd --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler.pc.cmake @@ -0,0 +1,11 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${exec_prefix}/lib@LIB_SUFFIX@ +includedir=${prefix}/include + +Name: poppler +Description: PDF rendering library +Version: @POPPLER_VERSION@ + +Libs: -L${libdir} -lpoppler +Cflags: -I${includedir}/poppler diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler.pc.in b/Build/source/libs/poppler/poppler-0.18.4/poppler.pc.in new file mode 100644 index 00000000000..8605b28673b --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: poppler +Description: PDF rendering library +Version: @VERSION@ + +Libs: -L${libdir} -lpoppler +Cflags: -I${includedir}/poppler diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Annot.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Annot.cc new file mode 100644 index 00000000000..664a6c16fd5 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Annot.cc @@ -0,0 +1,5216 @@ +//======================================================================== +// +// Annot.cc +// +// Copyright 2000-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006 Scott Turner <scotty1024@mac.com> +// Copyright (C) 2007, 2008 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2007-2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2007-2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2007, 2008 Iñigo Martínez <inigomartinez@gmail.com> +// Copyright (C) 2007 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2008, 2011 Pino Toscano <pino@kde.org> +// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> +// Copyright (C) 2008 Hugo Mercier <hmercier31@gmail.com> +// Copyright (C) 2009 Ilya Gorenbein <igorenbein@finjan.com> +// Copyright (C) 2011 José Aliste <jaliste@src.gnome.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include <math.h> +#include <assert.h> +#include "goo/gmem.h" +#include "goo/gstrtod.h" +#include "GooList.h" +#include "Error.h" +#include "Object.h" +#include "Catalog.h" +#include "Gfx.h" +#include "Lexer.h" +#include "Page.h" +#include "Annot.h" +#include "GfxFont.h" +#include "CharCodeToUnicode.h" +#include "PDFDocEncoding.h" +#include "Form.h" +#include "Error.h" +#include "XRef.h" +#include "Movie.h" +#include "OptionalContent.h" +#include "Sound.h" +#include "FileSpec.h" +#include "DateInfo.h" +#include "Link.h" +#include <string.h> + +#define fieldFlagReadOnly 0x00000001 +#define fieldFlagRequired 0x00000002 +#define fieldFlagNoExport 0x00000004 +#define fieldFlagMultiline 0x00001000 +#define fieldFlagPassword 0x00002000 +#define fieldFlagNoToggleToOff 0x00004000 +#define fieldFlagRadio 0x00008000 +#define fieldFlagPushbutton 0x00010000 +#define fieldFlagCombo 0x00020000 +#define fieldFlagEdit 0x00040000 +#define fieldFlagSort 0x00080000 +#define fieldFlagFileSelect 0x00100000 +#define fieldFlagMultiSelect 0x00200000 +#define fieldFlagDoNotSpellCheck 0x00400000 +#define fieldFlagDoNotScroll 0x00800000 +#define fieldFlagComb 0x01000000 +#define fieldFlagRichText 0x02000000 +#define fieldFlagRadiosInUnison 0x02000000 +#define fieldFlagCommitOnSelChange 0x04000000 + +#define fieldQuadLeft 0 +#define fieldQuadCenter 1 +#define fieldQuadRight 2 + +// distance of Bezier control point from center for circle approximation +// = (4 * (sqrt(2) - 1) / 3) * r +#define bezierCircle 0.55228475 + +// Ensures that x is between the limits set by low and high. +// If low is greater than high the result is undefined. +#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x))) + +AnnotLineEndingStyle parseAnnotLineEndingStyle(GooString *string) { + if (string != NULL) { + if (!string->cmp("Square")) { + return annotLineEndingSquare; + } else if (!string->cmp("Circle")) { + return annotLineEndingCircle; + } else if (!string->cmp("Diamond")) { + return annotLineEndingDiamond; + } else if (!string->cmp("OpenArrow")) { + return annotLineEndingOpenArrow; + } else if (!string->cmp("ClosedArrow")) { + return annotLineEndingClosedArrow; + } else if (!string->cmp("Butt")) { + return annotLineEndingButt; + } else if (!string->cmp("ROpenArrow")) { + return annotLineEndingROpenArrow; + } else if (!string->cmp("RClosedArrow")) { + return annotLineEndingRClosedArrow; + } else if (!string->cmp("Slash")) { + return annotLineEndingSlash; + } else { + return annotLineEndingNone; + } + } else { + return annotLineEndingNone; + } +} + +static AnnotExternalDataType parseAnnotExternalData(Dict* dict) { + Object obj1; + AnnotExternalDataType type; + + if (dict->lookup("Subtype", &obj1)->isName()) { + const char *typeName = obj1.getName(); + + if (!strcmp(typeName, "Markup3D")) { + type = annotExternalDataMarkup3D; + } else { + type = annotExternalDataMarkupUnknown; + } + } else { + type = annotExternalDataMarkupUnknown; + } + obj1.free(); + + return type; +} + +PDFRectangle *parseDiffRectangle(Array *array, PDFRectangle *rect) { + PDFRectangle *newRect = NULL; + if (array->getLength() == 4) { + // deltas + Object obj1; + double dx1 = (array->get(0, &obj1)->isNum() ? obj1.getNum() : 0); + obj1.free(); + double dy1 = (array->get(1, &obj1)->isNum() ? obj1.getNum() : 0); + obj1.free(); + double dx2 = (array->get(2, &obj1)->isNum() ? obj1.getNum() : 0); + obj1.free(); + double dy2 = (array->get(3, &obj1)->isNum() ? obj1.getNum() : 0); + obj1.free(); + + // checking that the numbers are valid (i.e. >= 0), + // and that applying the differences still give us a valid rect + if (dx1 >= 0 && dy1 >= 0 && dx2 >= 0 && dy2 + && (rect->x2 - rect->x1 - dx1 - dx2) >= 0 + && (rect->y2 - rect->y1 - dy1 - dy2) >= 0) { + newRect = new PDFRectangle(); + newRect->x1 = rect->x1 + dx1; + newRect->y1 = rect->y1 + dy1; + newRect->x2 = rect->x2 - dx2; + newRect->y2 = rect->y2 - dy2; + } + } + return newRect; +} + +//------------------------------------------------------------------------ +// AnnotBorderEffect +//------------------------------------------------------------------------ + +AnnotBorderEffect::AnnotBorderEffect(Dict *dict) { + Object obj1; + + if (dict->lookup("S", &obj1)->isName()) { + const char *effectName = obj1.getName(); + + if (!strcmp(effectName, "C")) + effectType = borderEffectCloudy; + else + effectType = borderEffectNoEffect; + } else { + effectType = borderEffectNoEffect; + } + obj1.free(); + + if ((dict->lookup("I", &obj1)->isNum()) && effectType == borderEffectCloudy) { + intensity = obj1.getNum(); + } else { + intensity = 0; + } + obj1.free(); +} + +//------------------------------------------------------------------------ +// AnnotPath +//------------------------------------------------------------------------ + +AnnotPath::AnnotPath() { + coords = NULL; + coordsLength = 0; +} + +AnnotPath::AnnotPath(Array *array) { + coords = NULL; + coordsLength = 0; + parsePathArray(array); +} + +AnnotPath::AnnotPath(AnnotCoord **coords, int coordsLength) { + this->coords = coords; + this->coordsLength = coordsLength; +} + +AnnotPath::~AnnotPath() { + if (coords) { + for (int i = 0; i < coordsLength; ++i) + delete coords[i]; + gfree(coords); + } +} + +double AnnotPath::getX(int coord) const { + if (coord >= 0 && coord < coordsLength) + return coords[coord]->getX(); + return 0; +} + +double AnnotPath::getY(int coord) const { + if (coord >= 0 && coord < coordsLength) + return coords[coord]->getY(); + return 0; +} + +AnnotCoord *AnnotPath::getCoord(int coord) const { + if (coord >= 0 && coord < coordsLength) + return coords[coord]; + return NULL; +} + +void AnnotPath::parsePathArray(Array *array) { + int tempLength; + AnnotCoord **tempCoords; + GBool correct = gTrue; + + if (array->getLength() % 2) { + error(-1, "Bad Annot Path"); + return; + } + + tempLength = array->getLength() / 2; + tempCoords = (AnnotCoord **) gmallocn (tempLength, sizeof(AnnotCoord *)); + memset(tempCoords, 0, tempLength * sizeof(AnnotCoord *)); + for (int i = 0; i < tempLength && correct; i++) { + Object obj1; + double x = 0, y = 0; + + if (array->get(i * 2, &obj1)->isNum()) { + x = obj1.getNum(); + } else { + correct = gFalse; + } + obj1.free(); + + if (array->get((i * 2) + 1, &obj1)->isNum()) { + y = obj1.getNum(); + } else { + correct = gFalse; + } + obj1.free(); + + if (!correct) { + for (int j = i - 1; j >= 0; j--) + delete tempCoords[j]; + gfree (tempCoords); + return; + } + + tempCoords[i] = new AnnotCoord(x, y); + } + + coords = tempCoords; + coordsLength = tempLength; +} + +//------------------------------------------------------------------------ +// AnnotCalloutLine +//------------------------------------------------------------------------ + +AnnotCalloutLine::AnnotCalloutLine(double x1, double y1, double x2, double y2) + : coord1(x1, y1), coord2(x2, y2) { +} + +//------------------------------------------------------------------------ +// AnnotCalloutMultiLine +//------------------------------------------------------------------------ + +AnnotCalloutMultiLine::AnnotCalloutMultiLine(double x1, double y1, double x2, + double y2, double x3, double y3) + : AnnotCalloutLine(x1, y1, x2, y2), coord3(x3, y3) { +} + +//------------------------------------------------------------------------ +// AnnotQuadrilateral +//------------------------------------------------------------------------ + +AnnotQuadrilaterals::AnnotQuadrilaterals(Array *array, PDFRectangle *rect) { + int arrayLength = array->getLength(); + GBool correct = gTrue; + int quadsLength = 0; + AnnotQuadrilateral **quads; + double quadArray[8]; + + // default values + quadrilaterals = NULL; + quadrilateralsLength = 0; + + if ((arrayLength % 8) == 0) { + int i; + + quadsLength = arrayLength / 8; + quads = (AnnotQuadrilateral **) gmallocn + ((quadsLength), sizeof(AnnotQuadrilateral *)); + memset(quads, 0, quadsLength * sizeof(AnnotQuadrilateral *)); + + for (i = 0; i < quadsLength; i++) { + for (int j = 0; j < 8; j++) { + Object obj; + if (array->get(i * 8 + j, &obj)->isNum()) { + if (j % 2 == 1) + quadArray[j] = CLAMP (obj.getNum(), rect->y1, rect->y2); + else + quadArray[j] = CLAMP (obj.getNum(), rect->x1, rect->x2); + } else { + correct = gFalse; + obj.free(); + error (-1, "Invalid QuadPoint in annot"); + break; + } + obj.free(); + } + + if (!correct) + break; + + quads[i] = new AnnotQuadrilateral(quadArray[0], quadArray[1], + quadArray[2], quadArray[3], + quadArray[4], quadArray[5], + quadArray[6], quadArray[7]); + } + + if (correct) { + quadrilateralsLength = quadsLength; + quadrilaterals = quads; + } else { + for (int j = 0; j < i; j++) + delete quads[j]; + gfree (quads); + } + } +} + +AnnotQuadrilaterals::~AnnotQuadrilaterals() { + if (quadrilaterals) { + for(int i = 0; i < quadrilateralsLength; i++) + delete quadrilaterals[i]; + + gfree (quadrilaterals); + } +} + +double AnnotQuadrilaterals::getX1(int quadrilateral) { + if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) + return quadrilaterals[quadrilateral]->coord1.getX(); + return 0; +} + +double AnnotQuadrilaterals::getY1(int quadrilateral) { + if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) + return quadrilaterals[quadrilateral]->coord1.getY(); + return 0; +} + +double AnnotQuadrilaterals::getX2(int quadrilateral) { + if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) + return quadrilaterals[quadrilateral]->coord2.getX(); + return 0; +} + +double AnnotQuadrilaterals::getY2(int quadrilateral) { + if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) + return quadrilaterals[quadrilateral]->coord2.getY(); + return 0; +} + +double AnnotQuadrilaterals::getX3(int quadrilateral) { + if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) + return quadrilaterals[quadrilateral]->coord3.getX(); + return 0; +} + +double AnnotQuadrilaterals::getY3(int quadrilateral) { + if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) + return quadrilaterals[quadrilateral]->coord3.getY(); + return 0; +} + +double AnnotQuadrilaterals::getX4(int quadrilateral) { + if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) + return quadrilaterals[quadrilateral]->coord4.getX(); + return 0; +} + +double AnnotQuadrilaterals::getY4(int quadrilateral) { + if (quadrilateral >= 0 && quadrilateral < quadrilateralsLength) + return quadrilaterals[quadrilateral]->coord4.getY(); + return 0; +} + +AnnotQuadrilaterals::AnnotQuadrilateral::AnnotQuadrilateral(double x1, double y1, + double x2, double y2, double x3, double y3, double x4, double y4) + : coord1(x1, y1), coord2(x2, y2), coord3(x3, y3), coord4(x4, y4) { +} + +//------------------------------------------------------------------------ +// AnnotBorder +//------------------------------------------------------------------------ +AnnotBorder::AnnotBorder() { + type = typeUnknown; + width = 1; + dashLength = 0; + dash = NULL; + style = borderSolid; +} + +GBool AnnotBorder::parseDashArray(Object *dashObj) { + GBool correct = gTrue; + int tempLength = dashObj->arrayGetLength(); + double *tempDash = (double *) gmallocn (tempLength, sizeof (double)); + + // TODO: check not all zero (Line Dash Pattern Page 217 PDF 8.1) + for (int i = 0; i < tempLength && i < DASH_LIMIT && correct; i++) { + Object obj1; + + if (dashObj->arrayGet(i, &obj1)->isNum()) { + tempDash[i] = obj1.getNum(); + + correct = tempDash[i] >= 0; + obj1.free(); + } + } + + if (correct) { + dashLength = tempLength; + dash = tempDash; + style = borderDashed; + } else { + gfree (tempDash); + } + + return correct; +} + +AnnotBorder::~AnnotBorder() { + if (dash) + gfree (dash); +} + +//------------------------------------------------------------------------ +// AnnotBorderArray +//------------------------------------------------------------------------ + +AnnotBorderArray::AnnotBorderArray() { + type = typeArray; + horizontalCorner = 0; + verticalCorner = 0; +} + +AnnotBorderArray::AnnotBorderArray(Array *array) { + Object obj1; + int arrayLength = array->getLength(); + + GBool correct = gTrue; + if (arrayLength == 3 || arrayLength == 4) { + // implementation note 81 in Appendix H. + + if (array->get(0, &obj1)->isNum()) + horizontalCorner = obj1.getNum(); + else + correct = gFalse; + obj1.free(); + + if (array->get(1, &obj1)->isNum()) + verticalCorner = obj1.getNum(); + else + correct = gFalse; + obj1.free(); + + if (array->get(2, &obj1)->isNum()) + width = obj1.getNum(); + else + correct = gFalse; + obj1.free(); + + if (arrayLength == 4) { + if (array->get(3, &obj1)->isArray()) + correct = parseDashArray(&obj1); + else + correct = gFalse; + obj1.free(); + } + } else { + correct = gFalse; + } + + if (!correct) { + width = 0; + } +} + +//------------------------------------------------------------------------ +// AnnotBorderBS +//------------------------------------------------------------------------ + +AnnotBorderBS::AnnotBorderBS() { + type = typeBS; +} + +AnnotBorderBS::AnnotBorderBS(Dict *dict) { + Object obj1, obj2; + + // acroread 8 seems to need both W and S entries for + // any border to be drawn, even though the spec + // doesn't claim anything of that sort. We follow + // that behaviour by veryifying both entries exist + // otherwise we set the borderWidth to 0 + // --jrmuizel + dict->lookup("W", &obj1); + dict->lookup("S", &obj2); + if (obj1.isNum() && obj2.isName()) { + const char *styleName = obj2.getName(); + + width = obj1.getNum(); + + if (!strcmp(styleName, "S")) { + style = borderSolid; + } else if (!strcmp(styleName, "D")) { + style = borderDashed; + } else if (!strcmp(styleName, "B")) { + style = borderBeveled; + } else if (!strcmp(styleName, "I")) { + style = borderInset; + } else if (!strcmp(styleName, "U")) { + style = borderUnderlined; + } else { + style = borderSolid; + } + } else { + width = 0; + } + obj2.free(); + obj1.free(); + + if (style == borderDashed) { + if (dict->lookup("D", &obj1)->isArray()) + parseDashArray(&obj1); + obj1.free(); + + if (!dash) { + dashLength = 1; + dash = (double *) gmallocn (dashLength, sizeof (double)); + dash[0] = 3; + } + } +} + +//------------------------------------------------------------------------ +// AnnotColor +//------------------------------------------------------------------------ + +AnnotColor::AnnotColor() { + length = 0; +} + +AnnotColor::AnnotColor(double gray) { + length = 1; + + values[0] = gray; +} + +AnnotColor::AnnotColor(double r, double g, double b) { + length = 3; + + values[0] = r; + values[1] = g; + values[2] = b; +} + +AnnotColor::AnnotColor(double c, double m, double y, double k) { + length = 4; + + values[0] = c; + values[1] = m; + values[2] = y; + values[3] = k; +} + +// If <adjust> is +1, color is brightened; +// if <adjust> is -1, color is darkened; +// otherwise color is not modified. +AnnotColor::AnnotColor(Array *array, int adjust) { + int i; + + length = array->getLength(); + if (length > 4) + length = 4; + + for (i = 0; i < length; i++) { + Object obj1; + + if (array->get(i, &obj1)->isNum()) { + values[i] = obj1.getNum(); + + if (values[i] < 0 || values[i] > 1) + values[i] = 0; + } else { + values[i] = 0; + } + obj1.free(); + } + + if (adjust != 0) + adjustColor(adjust); +} + +void AnnotColor::adjustColor(int adjust) { + int i; + + if (length == 4) { + adjust = -adjust; + } + if (adjust > 0) { + for (i = 0; i < length; ++i) { + values[i] = 0.5 * values[i] + 0.5; + } + } else if (adjust < 0) { + for (i = 0; i < length; ++i) { + values[i] = 0.5 * values[i]; + } + } +} + +//------------------------------------------------------------------------ +// AnnotIconFit +//------------------------------------------------------------------------ + +AnnotIconFit::AnnotIconFit(Dict* dict) { + Object obj1; + + if (dict->lookup("SW", &obj1)->isName()) { + const char *scaleName = obj1.getName(); + + if(!strcmp(scaleName, "B")) { + scaleWhen = scaleBigger; + } else if(!strcmp(scaleName, "S")) { + scaleWhen = scaleSmaller; + } else if(!strcmp(scaleName, "N")) { + scaleWhen = scaleNever; + } else { + scaleWhen = scaleAlways; + } + } else { + scaleWhen = scaleAlways; + } + obj1.free(); + + if (dict->lookup("S", &obj1)->isName()) { + const char *scaleName = obj1.getName(); + + if(!strcmp(scaleName, "A")) { + scale = scaleAnamorphic; + } else { + scale = scaleProportional; + } + } else { + scale = scaleProportional; + } + obj1.free(); + + if (dict->lookup("A", &obj1)->isArray() && obj1.arrayGetLength() == 2) { + Object obj2; + (obj1.arrayGet(0, &obj2)->isNum() ? left = obj2.getNum() : left = 0); + obj2.free(); + (obj1.arrayGet(1, &obj2)->isNum() ? bottom = obj2.getNum() : bottom = 0); + obj2.free(); + + if (left < 0 || left > 1) + left = 0.5; + + if (bottom < 0 || bottom > 1) + bottom = 0.5; + + } else { + left = bottom = 0.5; + } + obj1.free(); + + if (dict->lookup("FB", &obj1)->isBool()) { + fullyBounds = obj1.getBool(); + } else { + fullyBounds = gFalse; + } + obj1.free(); +} + +//------------------------------------------------------------------------ +// AnnotAppearanceCharacs +//------------------------------------------------------------------------ + +AnnotAppearanceCharacs::AnnotAppearanceCharacs(Dict *dict) { + Object obj1; + + if (dict->lookup("R", &obj1)->isInt()) { + rotation = obj1.getInt(); + } else { + rotation = 0; + } + obj1.free(); + + if (dict->lookup("BC", &obj1)->isArray()) { + borderColor = new AnnotColor(obj1.getArray()); + } else { + borderColor = NULL; + } + obj1.free(); + + if (dict->lookup("BG", &obj1)->isArray()) { + backColor = new AnnotColor(obj1.getArray()); + } else { + backColor = NULL; + } + obj1.free(); + + if (dict->lookup("CA", &obj1)->isString()) { + normalCaption = new GooString(obj1.getString()); + } else { + normalCaption = NULL; + } + obj1.free(); + + if (dict->lookup("RC", &obj1)->isString()) { + rolloverCaption = new GooString(obj1.getString()); + } else { + rolloverCaption = NULL; + } + obj1.free(); + + if (dict->lookup("AC", &obj1)->isString()) { + alternateCaption = new GooString(obj1.getString()); + } else { + alternateCaption = NULL; + } + obj1.free(); + + if (dict->lookup("IF", &obj1)->isDict()) { + iconFit = new AnnotIconFit(obj1.getDict()); + } else { + iconFit = NULL; + } + obj1.free(); + + if (dict->lookup("TP", &obj1)->isInt()) { + position = (AnnotAppearanceCharacsTextPos) obj1.getInt(); + } else { + position = captionNoIcon; + } + obj1.free(); +} + +AnnotAppearanceCharacs::~AnnotAppearanceCharacs() { + if (borderColor) + delete borderColor; + + if (backColor) + delete backColor; + + if (normalCaption) + delete normalCaption; + + if (rolloverCaption) + delete rolloverCaption; + + if (alternateCaption) + delete alternateCaption; + + if (iconFit) + delete iconFit; +} + +//------------------------------------------------------------------------ +// Annot +//------------------------------------------------------------------------ + +Annot::Annot(XRef *xrefA, PDFRectangle *rectA, Catalog *catalog) { + Object obj1; + + refCnt = 1; + flags = flagUnknown; + type = typeUnknown; + + obj1.initArray (xrefA); + Object obj2; + obj1.arrayAdd (obj2.initReal (rectA->x1)); + obj1.arrayAdd (obj2.initReal (rectA->y1)); + obj1.arrayAdd (obj2.initReal (rectA->x2)); + obj1.arrayAdd (obj2.initReal (rectA->y2)); + obj2.free (); + + annotObj.initDict (xrefA); + annotObj.dictSet ("Type", obj2.initName ("Annot")); + annotObj.dictSet ("Rect", &obj1); + // obj1 is owned by the dict + + ref = xrefA->addIndirectObject (&annotObj); + + initialize (xrefA, annotObj.getDict(), catalog); +} + +Annot::Annot(XRef *xrefA, Dict *dict, Catalog* catalog) { + refCnt = 1; + hasRef = false; + flags = flagUnknown; + type = typeUnknown; + annotObj.initDict (dict); + initialize (xrefA, dict, catalog); +} + +Annot::Annot(XRef *xrefA, Dict *dict, Catalog* catalog, Object *obj) { + refCnt = 1; + if (obj->isRef()) { + hasRef = gTrue; + ref = obj->getRef(); + } else { + hasRef = gFalse; + } + flags = flagUnknown; + type = typeUnknown; + annotObj.initDict (dict); + initialize (xrefA, dict, catalog); +} + +void Annot::initialize(XRef *xrefA, Dict *dict, Catalog *catalog) { + Object asObj, obj1, obj2, obj3; + + appRef.num = 0; + appRef.gen = 65535; + ok = gTrue; + xref = xrefA; + appearBuf = NULL; + fontSize = 0; + + appearance.initNull(); + + //----- parse the rectangle + rect = new PDFRectangle(); + if (dict->lookup("Rect", &obj1)->isArray() && obj1.arrayGetLength() == 4) { + Object obj2; + (obj1.arrayGet(0, &obj2)->isNum() ? rect->x1 = obj2.getNum() : rect->x1 = 0); + obj2.free(); + (obj1.arrayGet(1, &obj2)->isNum() ? rect->y1 = obj2.getNum() : rect->y1 = 0); + obj2.free(); + (obj1.arrayGet(2, &obj2)->isNum() ? rect->x2 = obj2.getNum() : rect->x2 = 1); + obj2.free(); + (obj1.arrayGet(3, &obj2)->isNum() ? rect->y2 = obj2.getNum() : rect->y2 = 1); + obj2.free(); + + if (rect->x1 > rect->x2) { + double t = rect->x1; + rect->x1 = rect->x2; + rect->x2 = t; + } + + if (rect->y1 > rect->y2) { + double t = rect->y1; + rect->y1 = rect->y2; + rect->y2 = t; + } + } else { + rect->x1 = rect->y1 = 0; + rect->x2 = rect->y2 = 1; + error(-1, "Bad bounding box for annotation"); + ok = gFalse; + } + obj1.free(); + + if (dict->lookup("Contents", &obj1)->isString()) { + contents = obj1.getString()->copy(); + } else { + contents = NULL; + } + obj1.free(); + + if (dict->lookupNF("P", &obj1)->isRef()) { + Ref ref = obj1.getRef(); + + page = catalog ? catalog->findPage (ref.num, ref.gen) : -1; + } else { + page = 0; + } + obj1.free(); + + if (dict->lookup("NM", &obj1)->isString()) { + name = obj1.getString()->copy(); + } else { + name = NULL; + } + obj1.free(); + + if (dict->lookup("M", &obj1)->isString()) { + modified = obj1.getString()->copy(); + } else { + modified = NULL; + } + obj1.free(); + + //----- get the flags + if (dict->lookup("F", &obj1)->isInt()) { + flags |= obj1.getInt(); + } else { + flags = flagUnknown; + } + obj1.free(); + + if (dict->lookup("AP", &obj1)->isDict()) { + Object obj2; + + if (dict->lookup("AS", &obj2)->isName()) { + Object obj3; + + appearState = new GooString(obj2.getName()); + if (obj1.dictLookup("N", &obj3)->isDict()) { + Object obj4; + + if (obj3.dictLookupNF(appearState->getCString(), &obj4)->isRef()) { + obj4.copy(&appearance); + } else { + obj4.free(); + if (obj3.dictLookupNF("Off", &obj4)->isRef()) { + obj4.copy(&appearance); + } + } + obj4.free(); + } + obj3.free(); + } else { + obj2.free(); + + appearState = NULL; + if (obj1.dictLookupNF("N", &obj2)->isRef()) { + obj2.copy(&appearance); + } + } + obj2.free(); + } else { + appearState = NULL; + } + obj1.free(); + + //----- parse the border style + if (dict->lookup("BS", &obj1)->isDict()) { + border = new AnnotBorderBS(obj1.getDict()); + } else { + obj1.free(); + + if (dict->lookup("Border", &obj1)->isArray()) + border = new AnnotBorderArray(obj1.getArray()); + else + // Adobe draws no border at all if the last element is of + // the wrong type. + border = NULL; + } + obj1.free(); + + if (dict->lookup("C", &obj1)->isArray()) { + color = new AnnotColor(obj1.getArray()); + } else { + color = NULL; + } + obj1.free(); + + if (dict->lookup("StructParent", &obj1)->isInt()) { + treeKey = obj1.getInt(); + } else { + treeKey = 0; + } + obj1.free(); + + optContentConfig = catalog ? catalog->getOptContentConfig() : NULL; + dict->lookupNF("OC", &oc); + if (!oc.isRef() && !oc.isNull()) { + error (-1, "Annotation OC value not null or dict: %i", oc.getType()); + } +} + +void Annot::getRect(double *x1, double *y1, double *x2, double *y2) const { + *x1 = rect->x1; + *y1 = rect->y1; + *x2 = rect->x2; + *y2 = rect->y2; +} + +GBool Annot::inRect(double x, double y) const { + return rect->contains(x, y); +} + +void Annot::update(const char *key, Object *value) { + /* Set M to current time */ + delete modified; + modified = timeToDateString(NULL); + + Object obj1; + obj1.initString (modified->copy()); + annotObj.dictSet("M", &obj1); + + annotObj.dictSet(const_cast<char*>(key), value); + + xref->setModifiedObject(&annotObj, ref); +} + +void Annot::setContents(GooString *new_content) { + delete contents; + + if (new_content) { + contents = new GooString(new_content); + //append the unicode marker <FE FF> if needed + if (!contents->hasUnicodeMarker()) { + contents->insert(0, 0xff); + contents->insert(0, 0xfe); + } + } else { + contents = new GooString(); + } + + Object obj1; + obj1.initString(contents->copy()); + update ("Contents", &obj1); +} + +void Annot::setColor(AnnotColor *new_color) { + delete color; + + if (new_color) { + Object obj1, obj2; + const double *values = new_color->getValues(); + + obj1.initArray(xref); + for (int i = 0; i < (int)new_color->getSpace(); i++) + obj1.arrayAdd(obj2.initReal (values[i])); + update ("C", &obj1); + color = new_color; + } else { + color = NULL; + } +} + +void Annot::setPage(Ref *pageRef, int pageIndex) +{ + Object obj1; + + obj1.initRef(pageRef->num, pageRef->gen); + update("P", &obj1); + page = pageIndex; +} + +void Annot::setAppearanceState(char *state) { + if (!state) + return; + + if (appearState && appearState->cmp(state) == 0) + return; + + delete appearState; + appearState = new GooString(state); + + Object obj1; + obj1.initName(state); + update ("AS", &obj1); + + // The appearance state determines the current appearance stream + Object obj2; + if (annotObj.dictLookup("AP", &obj2)->isDict()) { + Object obj3; + + if (obj2.dictLookup("N", &obj3)->isDict()) { + Object obj4; + + appearance.free(); + if (obj3.dictLookupNF(state, &obj4)->isRef()) + obj4.copy(&appearance); + else + appearance.initNull(); + obj4.free(); + } + obj3.free(); + } + obj2.free(); +} + +double Annot::getXMin() { + return rect->x1; +} + +double Annot::getYMin() { + return rect->y1; +} + +void Annot::readArrayNum(Object *pdfArray, int key, double *value) { + Object valueObject; + + pdfArray->arrayGet(key, &valueObject); + if (valueObject.isNum()) { + *value = valueObject.getNum(); + } else { + *value = 0; + ok = gFalse; + } + valueObject.free(); +} + +void Annot::incRefCnt() { + refCnt++; +} + +void Annot::decRefCnt() { + if (--refCnt == 0) + delete this; +} + +Annot::~Annot() { + annotObj.free(); + + delete rect; + + if (contents) + delete contents; + + if (name) + delete name; + + if (modified) + delete modified; + + appearance.free(); + + if (appearState) + delete appearState; + + if (border) + delete border; + + if (color) + delete color; + + oc.free(); +} + +void Annot::setColor(AnnotColor *color, GBool fill) { + const double *values = color->getValues(); + + switch (color->getSpace()) { + case AnnotColor::colorCMYK: + appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:c}\n", + values[0], values[1], values[2], values[3], + fill ? 'k' : 'K'); + break; + case AnnotColor::colorRGB: + appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:s}\n", + values[0], values[1], values[2], + fill ? "rg" : "RG"); + break; + case AnnotColor::colorGray: + appearBuf->appendf("{0:.2f} {1:c}\n", + values[0], + fill ? 'g' : 'G'); + break; + case AnnotColor::colorTransparent: + default: + break; + } +} + +// Draw an (approximate) circle of radius <r> centered at (<cx>, <cy>). +// If <fill> is true, the circle is filled; otherwise it is stroked. +void Annot::drawCircle(double cx, double cy, double r, GBool fill) { + appearBuf->appendf("{0:.2f} {1:.2f} m\n", + cx + r, cy); + appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", + cx + r, cy + bezierCircle * r, + cx + bezierCircle * r, cy + r, + cx, cy + r); + appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", + cx - bezierCircle * r, cy + r, + cx - r, cy + bezierCircle * r, + cx - r, cy); + appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", + cx - r, cy - bezierCircle * r, + cx - bezierCircle * r, cy - r, + cx, cy - r); + appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", + cx + bezierCircle * r, cy - r, + cx + r, cy - bezierCircle * r, + cx + r, cy); + appearBuf->append(fill ? "f\n" : "s\n"); +} + +// Draw the top-left half of an (approximate) circle of radius <r> +// centered at (<cx>, <cy>). +void Annot::drawCircleTopLeft(double cx, double cy, double r) { + double r2; + + r2 = r / sqrt(2.0); + appearBuf->appendf("{0:.2f} {1:.2f} m\n", + cx + r2, cy + r2); + appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", + cx + (1 - bezierCircle) * r2, + cy + (1 + bezierCircle) * r2, + cx - (1 - bezierCircle) * r2, + cy + (1 + bezierCircle) * r2, + cx - r2, + cy + r2); + appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", + cx - (1 + bezierCircle) * r2, + cy + (1 - bezierCircle) * r2, + cx - (1 + bezierCircle) * r2, + cy - (1 - bezierCircle) * r2, + cx - r2, + cy - r2); + appearBuf->append("S\n"); +} + +// Draw the bottom-right half of an (approximate) circle of radius <r> +// centered at (<cx>, <cy>). +void Annot::drawCircleBottomRight(double cx, double cy, double r) { + double r2; + + r2 = r / sqrt(2.0); + appearBuf->appendf("{0:.2f} {1:.2f} m\n", + cx - r2, cy - r2); + appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", + cx - (1 - bezierCircle) * r2, + cy - (1 + bezierCircle) * r2, + cx + (1 - bezierCircle) * r2, + cy - (1 + bezierCircle) * r2, + cx + r2, + cy - r2); + appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", + cx + (1 + bezierCircle) * r2, + cy - (1 - bezierCircle) * r2, + cx + (1 + bezierCircle) * r2, + cy + (1 - bezierCircle) * r2, + cx + r2, + cy + r2); + appearBuf->append("S\n"); +} + +void Annot::createForm(double *bbox, GBool transparencyGroup, Object *resDict, Object *aStream) { + Object obj1, obj2; + Object appearDict; + + appearDict.initDict(xref); + appearDict.dictSet("Length", obj1.initInt(appearBuf->getLength())); + appearDict.dictSet("Subtype", obj1.initName("Form")); + obj1.initArray(xref); + obj1.arrayAdd(obj2.initReal(bbox[0])); + obj1.arrayAdd(obj2.initReal(bbox[1])); + obj1.arrayAdd(obj2.initReal(bbox[2])); + obj1.arrayAdd(obj2.initReal(bbox[3])); + appearDict.dictSet("BBox", &obj1); + if (transparencyGroup) { + Object transDict; + transDict.initDict(xref); + transDict.dictSet("S", obj1.initName("Transparency")); + appearDict.dictSet("Group", &transDict); + } + if (resDict) + appearDict.dictSet("Resources", resDict); + + MemStream *mStream = new MemStream(copyString(appearBuf->getCString()), 0, + appearBuf->getLength(), &appearDict); + mStream->setNeedFree(gTrue); + aStream->initStream(mStream); +} + +void Annot::createResourcesDict(char *formName, Object *formStream, + char *stateName, + double opacity, char *blendMode, + Object *resDict) { + Object gsDict, stateDict, formDict, obj1; + + gsDict.initDict(xref); + if (opacity != 1) { + gsDict.dictSet("CA", obj1.initReal(opacity)); + gsDict.dictSet("ca", obj1.initReal(opacity)); + } + if (blendMode) + gsDict.dictSet("BM", obj1.initName(blendMode)); + stateDict.initDict(xref); + stateDict.dictSet(stateName, &gsDict); + formDict.initDict(xref); + formDict.dictSet(formName, formStream); + + resDict->initDict(xref); + resDict->dictSet("ExtGState", &stateDict); + resDict->dictSet("XObject", &formDict); +} + +GBool Annot::isVisible(GBool printing) { + // check the flags + if ((flags & flagHidden) || + (printing && !(flags & flagPrint)) || + (!printing && (flags & flagNoView))) { + return gFalse; + } + + // check the OC + if (optContentConfig && oc.isRef()) { + if (! optContentConfig->optContentIsVisible(&oc)) + return gFalse; + } + + return gTrue; +} + +void Annot::draw(Gfx *gfx, GBool printing) { + Object obj; + + if (!isVisible (printing)) + return; + + // draw the appearance stream + appearance.fetch(xref, &obj); + gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color, + rect->x1, rect->y1, rect->x2, rect->y2); + obj.free(); +} + +//------------------------------------------------------------------------ +// AnnotPopup +//------------------------------------------------------------------------ + +AnnotPopup::AnnotPopup(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : + Annot(xrefA, rect, catalog) { + Object obj1; + + type = typePopup; + + annotObj.dictSet ("Subtype", obj1.initName ("Popup")); + initialize (xrefA, annotObj.getDict(), catalog); +} + +AnnotPopup::AnnotPopup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + Annot(xrefA, dict, catalog, obj) { + type = typePopup; + initialize(xrefA, dict, catalog); +} + +AnnotPopup::~AnnotPopup() { + parent.free(); +} + +void AnnotPopup::initialize(XRef *xrefA, Dict *dict, Catalog *catalog) { + Object obj1; + + if (!dict->lookupNF("Parent", &parent)->isRef()) { + parent.initNull(); + } + + if (dict->lookup("Open", &obj1)->isBool()) { + open = obj1.getBool(); + } else { + open = gFalse; + } + obj1.free(); +} + +void AnnotPopup::setParent(Object *parentA) { + parentA->copy(&parent); + update ("Parent", &parent); +} + +void AnnotPopup::setParent(Annot *parentA) { + Ref parentRef = parentA->getRef(); + parent.initRef(parentRef.num, parentRef.gen); + update ("Parent", &parent); +} + +void AnnotPopup::setOpen(GBool openA) { + Object obj1; + + open = openA; + obj1.initBool(open); + update ("Open", &obj1); +} + +//------------------------------------------------------------------------ +// AnnotMarkup +//------------------------------------------------------------------------ +AnnotMarkup::AnnotMarkup(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : + Annot(xrefA, rect, catalog) { + initialize(xrefA, annotObj.getDict(), catalog, &annotObj); +} + +AnnotMarkup::AnnotMarkup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + Annot(xrefA, dict, catalog, obj) { + initialize(xrefA, dict, catalog, obj); +} + +AnnotMarkup::~AnnotMarkup() { + if (label) + delete label; + + if (popup) + delete popup; + + if (date) + delete date; + + if (subject) + delete subject; +} + +void AnnotMarkup::initialize(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) { + Object obj1; + + if (dict->lookup("T", &obj1)->isString()) { + label = obj1.getString()->copy(); + } else { + label = NULL; + } + obj1.free(); + + if (dict->lookup("Popup", &obj1)->isDict()) { + popup = new AnnotPopup(xrefA, obj1.getDict(), catalog, obj); + } else { + popup = NULL; + } + obj1.free(); + + if (dict->lookup("CA", &obj1)->isNum()) { + opacity = obj1.getNum(); + } else { + opacity = 1.0; + } + obj1.free(); + + if (dict->lookup("CreationDate", &obj1)->isString()) { + date = obj1.getString()->copy(); + } else { + date = NULL; + } + obj1.free(); + + if (dict->lookupNF("IRT", &obj1)->isRef()) { + inReplyTo = obj1.getRef(); + } else { + inReplyTo.num = 0; + inReplyTo.gen = 0; + } + obj1.free(); + + if (dict->lookup("Subj", &obj1)->isString()) { + subject = obj1.getString()->copy(); + } else { + subject = NULL; + } + obj1.free(); + + if (dict->lookup("RT", &obj1)->isName()) { + const char *replyName = obj1.getName(); + + if (!strcmp(replyName, "R")) { + replyTo = replyTypeR; + } else if (!strcmp(replyName, "Group")) { + replyTo = replyTypeGroup; + } else { + replyTo = replyTypeR; + } + } else { + replyTo = replyTypeR; + } + obj1.free(); + + if (dict->lookup("ExData", &obj1)->isDict()) { + exData = parseAnnotExternalData(obj1.getDict()); + } else { + exData = annotExternalDataMarkupUnknown; + } + obj1.free(); +} + +void AnnotMarkup::setLabel(GooString *new_label) { + delete label; + + if (new_label) { + label = new GooString(new_label); + //append the unicode marker <FE FF> if needed + if (!label->hasUnicodeMarker()) { + label->insert(0, 0xff); + label->insert(0, 0xfe); + } + } else { + label = new GooString(); + } + + Object obj1; + obj1.initString(label->copy()); + update ("T", &obj1); +} + +void AnnotMarkup::setPopup(AnnotPopup *new_popup) { + delete popup; + + if (new_popup) { + Object obj1; + Ref popupRef = new_popup->getRef(); + + obj1.initRef (popupRef.num, popupRef.gen); + update ("Popup", &obj1); + + new_popup->setParent(this); + popup = new_popup; + } else { + popup = NULL; + } +} + +void AnnotMarkup::setOpacity(double opacityA) { + Object obj1; + + opacity = opacityA; + obj1.initReal(opacity); + update ("CA", &obj1); +} + +//------------------------------------------------------------------------ +// AnnotText +//------------------------------------------------------------------------ + +AnnotText::AnnotText(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : + AnnotMarkup(xrefA, rect, catalog) { + Object obj1; + + type = typeText; + flags |= flagNoZoom | flagNoRotate; + + annotObj.dictSet ("Subtype", obj1.initName ("Text")); + initialize (xrefA, catalog, annotObj.getDict()); +} + +AnnotText::AnnotText(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + AnnotMarkup(xrefA, dict, catalog, obj) { + + type = typeText; + flags |= flagNoZoom | flagNoRotate; + initialize (xrefA, catalog, dict); +} + +AnnotText::~AnnotText() { + delete icon; +} + +void AnnotText::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) { + Object obj1; + + if (dict->lookup("Open", &obj1)->isBool()) + open = obj1.getBool(); + else + open = gFalse; + obj1.free(); + + if (dict->lookup("Name", &obj1)->isName()) { + icon = new GooString(obj1.getName()); + } else { + icon = new GooString("Note"); + } + obj1.free(); + + if (dict->lookup("StateModel", &obj1)->isString()) { + Object obj2; + GooString *modelName = obj1.getString(); + + if (dict->lookup("State", &obj2)->isString()) { + GooString *stateName = obj2.getString(); + + if (!stateName->cmp("Marked")) { + state = stateMarked; + } else if (!stateName->cmp("Unmarked")) { + state = stateUnmarked; + } else if (!stateName->cmp("Accepted")) { + state = stateAccepted; + } else if (!stateName->cmp("Rejected")) { + state = stateRejected; + } else if (!stateName->cmp("Cancelled")) { + state = stateCancelled; + } else if (!stateName->cmp("Completed")) { + state = stateCompleted; + } else if (!stateName->cmp("None")) { + state = stateNone; + } else { + state = stateUnknown; + } + } else { + state = stateUnknown; + } + obj2.free(); + + if (!modelName->cmp("Marked")) { + switch (state) { + case stateUnknown: + state = stateMarked; + break; + case stateAccepted: + case stateRejected: + case stateCancelled: + case stateCompleted: + case stateNone: + state = stateUnknown; + break; + default: + break; + } + } else if (!modelName->cmp("Review")) { + switch (state) { + case stateUnknown: + state = stateNone; + break; + case stateMarked: + case stateUnmarked: + state = stateUnknown; + break; + default: + break; + } + } else { + state = stateUnknown; + } + } else { + state = stateUnknown; + } + obj1.free(); +} + +void AnnotText::setOpen(GBool openA) { + Object obj1; + + open = openA; + obj1.initBool(open); + update ("Open", &obj1); +} + +void AnnotText::setIcon(GooString *new_icon) { + if (new_icon && icon->cmp(new_icon) == 0) + return; + + delete icon; + + if (new_icon) { + icon = new GooString (new_icon); + } else { + icon = new GooString("Note"); + } + + Object obj1; + obj1.initName (icon->getCString()); + update("Name", &obj1); +} + +#define ANNOT_TEXT_AP_NOTE \ + "3.602 24 m 20.398 24 l 22.387 24 24 22.387 24 20.398 c 24 3.602 l 24\n" \ + "1.613 22.387 0 20.398 0 c 3.602 0 l 1.613 0 0 1.613 0 3.602 c 0 20.398\n" \ + "l 0 22.387 1.613 24 3.602 24 c h\n" \ + "3.602 24 m f\n" \ + "0.533333 0.541176 0.521569 RG 2 w\n" \ + "1 J\n" \ + "1 j\n" \ + "[] 0.0 d\n" \ + "4 M 9 18 m 4 18 l 4 7 4 4 6 3 c 20 3 l 18 4 18 7 18 18 c 17 18 l S\n" \ + "1.5 w\n" \ + "0 j\n" \ + "10 16 m 14 21 l S\n" \ + "1.85625 w\n" \ + "1 j\n" \ + "15.07 20.523 m 15.07 19.672 14.379 18.977 13.523 18.977 c 12.672 18.977\n" \ + "11.977 19.672 11.977 20.523 c 11.977 21.379 12.672 22.07 13.523 22.07 c\n" \ + "14.379 22.07 15.07 21.379 15.07 20.523 c h\n" \ + "15.07 20.523 m S\n" \ + "1 w\n" \ + "0 j\n" \ + "6.5 13.5 m 15.5 13.5 l S\n" \ + "6.5 10.5 m 13.5 10.5 l S\n" \ + "6.801 7.5 m 15.5 7.5 l S\n" \ + "0.729412 0.741176 0.713725 RG 2 w\n" \ + "1 j\n" \ + "9 19 m 4 19 l 4 8 4 5 6 4 c 20 4 l 18 5 18 8 18 19 c 17 19 l S\n" \ + "1.5 w\n" \ + "0 j\n" \ + "10 17 m 14 22 l S\n" \ + "1.85625 w\n" \ + "1 j\n" \ + "15.07 21.523 m 15.07 20.672 14.379 19.977 13.523 19.977 c 12.672 19.977\n" \ + "11.977 20.672 11.977 21.523 c 11.977 22.379 12.672 23.07 13.523 23.07 c\n" \ + "14.379 23.07 15.07 22.379 15.07 21.523 c h\n" \ + "15.07 21.523 m S\n" \ + "1 w\n" \ + "0 j\n" \ + "6.5 14.5 m 15.5 14.5 l S\n" \ + "6.5 11.5 m 13.5 11.5 l S\n" \ + "6.801 8.5 m 15.5 8.5 l S\n" + +#define ANNOT_TEXT_AP_COMMENT \ + "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ + "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ + "l 1 21.523 2.477 23 4.301 23 c h\n" \ + "4.301 23 m f\n" \ + "0.533333 0.541176 0.521569 RG 2 w\n" \ + "0 J\n" \ + "1 j\n" \ + "[] 0.0 d\n" \ + "4 M 8 20 m 16 20 l 18.363 20 20 18.215 20 16 c 20 13 l 20 10.785 18.363 9\n" \ + "16 9 c 13 9 l 8 3 l 8 9 l 8 9 l 5.637 9 4 10.785 4 13 c 4 16 l 4 18.215\n" \ + "5.637 20 8 20 c h\n" \ + "8 20 m S\n" \ + "0.729412 0.741176 0.713725 RG 8 21 m 16 21 l 18.363 21 20 19.215 20 17\n" \ + "c 20 14 l 20 11.785 18.363 10\n" \ + "16 10 c 13 10 l 8 4 l 8 10 l 8 10 l 5.637 10 4 11.785 4 14 c 4 17 l 4\n" \ + "19.215 5.637 21 8 21 c h\n" \ + "8 21 m S\n" + +#define ANNOT_TEXT_AP_KEY \ + "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ + "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ + "l 1 21.523 2.477 23 4.301 23 c h\n" \ + "4.301 23 m f\n" \ + "0.533333 0.541176 0.521569 RG 2 w\n" \ + "1 J\n" \ + "0 j\n" \ + "[] 0.0 d\n" \ + "4 M 11.895 18.754 m 13.926 20.625 17.09 20.496 18.961 18.465 c 20.832\n" \ + "16.434 20.699 13.27 18.668 11.398 c 17.164 10.016 15.043 9.746 13.281\n" \ + "10.516 c 12.473 9.324 l 11.281 10.078 l 9.547 8.664 l 9.008 6.496 l\n" \ + "7.059 6.059 l 6.34 4.121 l 5.543 3.668 l 3.375 4.207 l 2.938 6.156 l\n" \ + "10.57 13.457 l 9.949 15.277 10.391 17.367 11.895 18.754 c h\n" \ + "11.895 18.754 m S\n" \ + "1.5 w\n" \ + "16.059 15.586 m 16.523 15.078 17.316 15.043 17.824 15.512 c 18.332\n" \ + "15.98 18.363 16.77 17.895 17.277 c 17.43 17.785 16.637 17.816 16.129\n" \ + "17.352 c 15.621 16.883 15.59 16.094 16.059 15.586 c h\n" \ + "16.059 15.586 m S\n" \ + "0.729412 0.741176 0.713725 RG 2 w\n" \ + "11.895 19.754 m 13.926 21.625 17.09 21.496 18.961 19.465 c 20.832\n" \ + "17.434 20.699 14.27 18.668 12.398 c 17.164 11.016 15.043 10.746 13.281\n" \ + "11.516 c 12.473 10.324 l 11.281 11.078 l 9.547 9.664 l 9.008 7.496 l\n" \ + "7.059 7.059 l 6.34 5.121 l 5.543 4.668 l 3.375 5.207 l 2.938 7.156 l\n" \ + "10.57 14.457 l 9.949 16.277 10.391 18.367 11.895 19.754 c h\n" \ + "11.895 19.754 m S\n" \ + "1.5 w\n" \ + "16.059 16.586 m 16.523 16.078 17.316 16.043 17.824 16.512 c 18.332\n" \ + "16.98 18.363 17.77 17.895 18.277 c 17.43 18.785 16.637 18.816 16.129\n" \ + "18.352 c 15.621 17.883 15.59 17.094 16.059 16.586 c h\n" \ + "16.059 16.586 m S\n" + +#define ANNOT_TEXT_AP_HELP \ + "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ + "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ + "l 1 21.523 2.477 23 4.301 23 c h\n" \ + "4.301 23 m f\n" \ + "0.533333 0.541176 0.521569 RG 2.5 w\n" \ + "1 J\n" \ + "1 j\n" \ + "[] 0.0 d\n" \ + "4 M 8.289 16.488 m 8.824 17.828 10.043 18.773 11.473 18.965 c 12.902 19.156\n" \ + "14.328 18.559 15.195 17.406 c 16.062 16.254 16.242 14.723 15.664 13.398\n" \ + "c S\n" \ + "0 j\n" \ + "12 8 m 12 12 16 11 16 15 c S\n" \ + "1.539286 w\n" \ + "1 j\n" \ + "q 1 0 0 -0.999991 0 24 cm\n" \ + "12.684 20.891 m 12.473 21.258 12.004 21.395 11.629 21.196 c 11.254\n" \ + "20.992 11.105 20.531 11.297 20.149 c 11.488 19.77 11.945 19.61 12.332\n" \ + "19.789 c 12.719 19.969 12.891 20.426 12.719 20.817 c S Q\n" \ + "0.729412 0.741176 0.713725 RG 2.5 w\n" \ + "8.289 17.488 m 9.109 19.539 11.438 20.535 13.488 19.711 c 15.539 18.891\n" \ + "16.535 16.562 15.711 14.512 c 15.699 14.473 15.684 14.438 15.664 14.398\n" \ + "c S\n" \ + "0 j\n" \ + "12 9 m 12 13 16 12 16 16 c S\n" \ + "1.539286 w\n" \ + "1 j\n" \ + "q 1 0 0 -0.999991 0 24 cm\n" \ + "12.684 19.891 m 12.473 20.258 12.004 20.395 11.629 20.195 c 11.254\n" \ + "19.992 11.105 19.531 11.297 19.149 c 11.488 18.77 11.945 18.61 12.332\n" \ + "18.789 c 12.719 18.969 12.891 19.426 12.719 19.817 c S Q\n" + +#define ANNOT_TEXT_AP_NEW_PARAGRAPH \ + "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ + "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ + "l 1 21.523 2.477 23 4.301 23 c h\n" \ + "4.301 23 m f\n" \ + "0.533333 0.541176 0.521569 RG 4 w\n" \ + "0 J\n" \ + "2 j\n" \ + "[] 0.0 d\n" \ + "4 M q 1 0 0 -1 0 24 cm\n" \ + "9.211 11.988 m 8.449 12.07 7.711 11.707 7.305 11.059 c 6.898 10.41\n" \ + "6.898 9.59 7.305 8.941 c 7.711 8.293 8.449 7.93 9.211 8.012 c S Q\n" \ + "1.004413 w\n" \ + "1 J\n" \ + "1 j\n" \ + "q 1 0 0 -0.991232 0 24 cm\n" \ + "18.07 11.511 m 15.113 10.014 l 12.199 11.602 l 12.711 8.323 l 10.301\n" \ + "6.045 l 13.574 5.517 l 14.996 2.522 l 16.512 5.474 l 19.801 5.899 l\n" \ + "17.461 8.252 l 18.07 11.511 l h\n" \ + "18.07 11.511 m S Q\n" \ + "2 w\n" \ + "0 j\n" \ + "11 17 m 10 17 l 10 3 l S\n" \ + "14 3 m 14 13 l S\n" \ + "0.729412 0.741176 0.713725 RG 4 w\n" \ + "0 J\n" \ + "2 j\n" \ + "q 1 0 0 -1 0 24 cm\n" \ + "9.211 10.988 m 8.109 11.105 7.125 10.309 7.012 9.211 c 6.895 8.109\n" \ + "7.691 7.125 8.789 7.012 c 8.93 6.996 9.07 6.996 9.211 7.012 c S Q\n" \ + "1.004413 w\n" \ + "1 J\n" \ + "1 j\n" \ + "q 1 0 0 -0.991232 0 24 cm\n" \ + "18.07 10.502 m 15.113 9.005 l 12.199 10.593 l 12.711 7.314 l 10.301\n" \ + "5.036 l 13.574 4.508 l 14.996 1.513 l 16.512 4.465 l 19.801 4.891 l\n" \ + "17.461 7.243 l 18.07 10.502 l h\n" \ + "18.07 10.502 m S Q\n" \ + "2 w\n" \ + "0 j\n" \ + "11 18 m 10 18 l 10 4 l S\n" \ + "14 4 m 14 14 l S\n" + +#define ANNOT_TEXT_AP_PARAGRAPH \ + "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ + "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ + "l 1 21.523 2.477 23 4.301 23 c h\n" \ + "4.301 23 m f\n" \ + "0.533333 0.541176 0.521569 RG 2 w\n" \ + "1 J\n" \ + "1 j\n" \ + "[] 0.0 d\n" \ + "4 M 15 3 m 15 18 l 11 18 l 11 3 l S\n" \ + "4 w\n" \ + "q 1 0 0 -1 0 24 cm\n" \ + "9.777 10.988 m 8.746 10.871 7.973 9.988 8 8.949 c 8.027 7.91 8.844\n" \ + "7.066 9.879 7.004 c S Q\n" \ + "0.729412 0.741176 0.713725 RG 2 w\n" \ + "15 4 m 15 19 l 11 19 l 11 4 l S\n" \ + "4 w\n" \ + "q 1 0 0 -1 0 24 cm\n" \ + "9.777 9.988 m 8.746 9.871 7.973 8.988 8 7.949 c 8.027 6.91 8.844 6.066\n" \ + "9.879 6.004 c S Q\n" + +#define ANNOT_TEXT_AP_INSERT \ + "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ + "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ + "l 1 21.523 2.477 23 4.301 23 c h\n" \ + "4.301 23 m f\n" \ + "0.533333 0.541176 0.521569 RG 2 w\n" \ + "1 J\n" \ + "0 j\n" \ + "[] 0.0 d\n" \ + "4 M 12 18.012 m 20 18 l S\n" \ + "9 10 m 17 10 l S\n" \ + "12 14.012 m 20 14 l S\n" \ + "12 6.012 m 20 6.012 l S\n" \ + "4 12 m 6 10 l 4 8 l S\n" \ + "4 12 m 4 8 l S\n" \ + "0.729412 0.741176 0.713725 RG 12 19.012 m 20 19 l S\n" \ + "9 11 m 17 11 l S\n" \ + "12 15.012 m 20 15 l S\n" \ + "12 7.012 m 20 7.012 l S\n" \ + "4 13 m 6 11 l 4 9 l S\n" \ + "4 13 m 4 9 l S\n" + +#define ANNOT_TEXT_AP_CROSS \ + "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ + "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ + "l 1 21.523 2.477 23 4.301 23 c h\n" \ + "4.301 23 m f\n" \ + "0.533333 0.541176 0.521569 RG 2.5 w\n" \ + "1 J\n" \ + "0 j\n" \ + "[] 0.0 d\n" \ + "4 M 18 5 m 6 17 l S\n" \ + "6 5 m 18 17 l S\n" \ + "0.729412 0.741176 0.713725 RG 18 6 m 6 18 l S\n" \ + "6 6 m 18 18 l S\n" + +#define ANNOT_TEXT_AP_CIRCLE \ + "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ + "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ + "l 1 21.523 2.477 23 4.301 23 c h\n" \ + "4.301 23 m f\n" \ + "0.533333 0.541176 0.521569 RG 2.5 w\n" \ + "1 J\n" \ + "1 j\n" \ + "[] 0.0 d\n" \ + "4 M 19.5 11.5 m 19.5 7.359 16.141 4 12 4 c 7.859 4 4.5 7.359 4.5 11.5 c 4.5\n" \ + "15.641 7.859 19 12 19 c 16.141 19 19.5 15.641 19.5 11.5 c h\n" \ + "19.5 11.5 m S\n" \ + "0.729412 0.741176 0.713725 RG 19.5 12.5 m 19.5 8.359 16.141 5 12 5 c\n" \ + "7.859 5 4.5 8.359 4.5 12.5 c 4.5\n" \ + "16.641 7.859 20 12 20 c 16.141 20 19.5 16.641 19.5 12.5 c h\n" \ + "19.5 12.5 m S\n" + +void AnnotText::draw(Gfx *gfx, GBool printing) { + Object obj; + double ca = 1; + + if (!isVisible (printing)) + return; + + double rectx2 = rect->x2; + double recty2 = rect->y2; + if (appearance.isNull()) { + ca = opacity; + + appearBuf = new GooString (); + + appearBuf->append ("q\n"); + if (color) + setColor(color, gTrue); + else + appearBuf->append ("1 1 1 rg\n"); + if (!icon->cmp("Note")) + appearBuf->append (ANNOT_TEXT_AP_NOTE); + else if (!icon->cmp("Comment")) + appearBuf->append (ANNOT_TEXT_AP_COMMENT); + else if (!icon->cmp("Key")) + appearBuf->append (ANNOT_TEXT_AP_KEY); + else if (!icon->cmp("Help")) + appearBuf->append (ANNOT_TEXT_AP_HELP); + else if (!icon->cmp("NewParagraph")) + appearBuf->append (ANNOT_TEXT_AP_NEW_PARAGRAPH); + else if (!icon->cmp("Paragraph")) + appearBuf->append (ANNOT_TEXT_AP_PARAGRAPH); + else if (!icon->cmp("Insert")) + appearBuf->append (ANNOT_TEXT_AP_INSERT); + else if (!icon->cmp("Cross")) + appearBuf->append (ANNOT_TEXT_AP_CROSS); + else if (!icon->cmp("Circle")) + appearBuf->append (ANNOT_TEXT_AP_CIRCLE); + appearBuf->append ("Q\n"); + + double bbox[4]; + bbox[0] = bbox[1] = 0; + bbox[2] = bbox[3] = 24; + if (ca == 1) { + createForm(bbox, gFalse, NULL, &appearance); + } else { + Object aStream, resDict; + + createForm(bbox, gTrue, NULL, &aStream); + delete appearBuf; + + appearBuf = new GooString ("/GS0 gs\n/Fm0 Do"); + createResourcesDict("Fm0", &aStream, "GS0", ca, NULL, &resDict); + createForm(bbox, gFalse, &resDict, &appearance); + } + delete appearBuf; + + rectx2 = rect->x1 + 24; + recty2 = rect->y1 + 24; + } + + // draw the appearance stream + appearance.fetch(xref, &obj); + gfx->drawAnnot(&obj, border, color, + rect->x1, rect->y1, rectx2, recty2); + obj.free(); +} + +//------------------------------------------------------------------------ +// AnnotLink +//------------------------------------------------------------------------ +AnnotLink::AnnotLink(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : + Annot(xrefA, rect, catalog) { + Object obj1; + + type = typeLink; + annotObj.dictSet ("Subtype", obj1.initName ("Link")); + initialize (xrefA, catalog, annotObj.getDict()); +} + +AnnotLink::AnnotLink(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + Annot(xrefA, dict, catalog, obj) { + + type = typeLink; + initialize (xrefA, catalog, dict); +} + +AnnotLink::~AnnotLink() { + delete action; + /* + if (uriAction) + delete uriAction; + */ + if (quadrilaterals) + delete quadrilaterals; +} + +void AnnotLink::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) { + Object obj1; + + action = NULL; + + // look for destination + if (!dict->lookup("Dest", &obj1)->isNull()) { + action = LinkAction::parseDest(&obj1); + // look for action + } else { + obj1.free(); + if (dict->lookup("A", &obj1)->isDict()) { + action = LinkAction::parseAction(&obj1, catalog->getBaseURI()); + } + } + obj1.free(); + + if (dict->lookup("H", &obj1)->isName()) { + const char *effect = obj1.getName(); + + if (!strcmp(effect, "N")) { + linkEffect = effectNone; + } else if (!strcmp(effect, "I")) { + linkEffect = effectInvert; + } else if (!strcmp(effect, "O")) { + linkEffect = effectOutline; + } else if (!strcmp(effect, "P")) { + linkEffect = effectPush; + } else { + linkEffect = effectInvert; + } + } else { + linkEffect = effectInvert; + } + obj1.free(); + /* + if (dict->lookup("PA", &obj1)->isDict()) { + uriAction = NULL; + } else { + uriAction = NULL; + } + obj1.free(); + */ + if (dict->lookup("QuadPoints", &obj1)->isArray()) { + quadrilaterals = new AnnotQuadrilaterals(obj1.getArray(), rect); + } else { + quadrilaterals = NULL; + } + obj1.free(); +} + +void AnnotLink::draw(Gfx *gfx, GBool printing) { + Object obj; + + if (!isVisible (printing)) + return; + + // draw the appearance stream + appearance.fetch(xref, &obj); + gfx->drawAnnot(&obj, border, color, + rect->x1, rect->y1, rect->x2, rect->y2); + obj.free(); +} + +//------------------------------------------------------------------------ +// AnnotFreeText +//------------------------------------------------------------------------ +AnnotFreeText::AnnotFreeText(XRef *xrefA, PDFRectangle *rect, GooString *da, Catalog *catalog) : + AnnotMarkup(xrefA, rect, catalog) { + Object obj1; + + type = typeFreeText; + + annotObj.dictSet ("Subtype", obj1.initName ("FreeText")); + + Object obj2; + obj2.initString (da->copy()); + annotObj.dictSet("DA", &obj2); + + initialize (xrefA, catalog, annotObj.getDict()); +} + +AnnotFreeText::AnnotFreeText(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + AnnotMarkup(xrefA, dict, catalog, obj) { + type = typeFreeText; + initialize(xrefA, catalog, dict); +} + +AnnotFreeText::~AnnotFreeText() { + delete appearanceString; + + if (styleString) + delete styleString; + + if (calloutLine) + delete calloutLine; + + if (borderEffect) + delete borderEffect; + + if (rectangle) + delete rectangle; +} + +void AnnotFreeText::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) { + Object obj1; + + if (dict->lookup("DA", &obj1)->isString()) { + appearanceString = obj1.getString()->copy(); + } else { + appearanceString = new GooString(); + error(-1, "Bad appearance for annotation"); + ok = gFalse; + } + obj1.free(); + + if (dict->lookup("Q", &obj1)->isInt()) { + quadding = (AnnotFreeTextQuadding) obj1.getInt(); + } else { + quadding = quaddingLeftJustified; + } + obj1.free(); + + if (dict->lookup("DS", &obj1)->isString()) { + styleString = obj1.getString()->copy(); + } else { + styleString = NULL; + } + obj1.free(); + + if (dict->lookup("CL", &obj1)->isArray() && obj1.arrayGetLength() >= 4) { + double x1, y1, x2, y2; + Object obj2; + + (obj1.arrayGet(0, &obj2)->isNum() ? x1 = obj2.getNum() : x1 = 0); + obj2.free(); + (obj1.arrayGet(1, &obj2)->isNum() ? y1 = obj2.getNum() : y1 = 0); + obj2.free(); + (obj1.arrayGet(2, &obj2)->isNum() ? x2 = obj2.getNum() : x2 = 0); + obj2.free(); + (obj1.arrayGet(3, &obj2)->isNum() ? y2 = obj2.getNum() : y2 = 0); + obj2.free(); + + if (obj1.arrayGetLength() == 6) { + double x3, y3; + (obj1.arrayGet(4, &obj2)->isNum() ? x3 = obj2.getNum() : x3 = 0); + obj2.free(); + (obj1.arrayGet(5, &obj2)->isNum() ? y3 = obj2.getNum() : y3 = 0); + obj2.free(); + calloutLine = new AnnotCalloutMultiLine(x1, y1, x2, y2, x3, y3); + } else { + calloutLine = new AnnotCalloutLine(x1, y1, x2, y2); + } + } else { + calloutLine = NULL; + } + obj1.free(); + + if (dict->lookup("IT", &obj1)->isName()) { + const char *intentName = obj1.getName(); + + if (!strcmp(intentName, "FreeText")) { + intent = intentFreeText; + } else if (!strcmp(intentName, "FreeTextCallout")) { + intent = intentFreeTextCallout; + } else if (!strcmp(intentName, "FreeTextTypeWriter")) { + intent = intentFreeTextTypeWriter; + } else { + intent = intentFreeText; + } + } else { + intent = intentFreeText; + } + obj1.free(); + + if (dict->lookup("BE", &obj1)->isDict()) { + borderEffect = new AnnotBorderEffect(obj1.getDict()); + } else { + borderEffect = NULL; + } + obj1.free(); + + if (dict->lookup("RD", &obj1)->isArray()) { + rectangle = parseDiffRectangle(obj1.getArray(), rect); + } else { + rectangle = NULL; + } + obj1.free(); + + if (dict->lookup("LE", &obj1)->isName()) { + GooString styleName(obj1.getName()); + endStyle = parseAnnotLineEndingStyle(&styleName); + } else { + endStyle = annotLineEndingNone; + } + obj1.free(); +} + +//------------------------------------------------------------------------ +// AnnotLine +//------------------------------------------------------------------------ + +AnnotLine::AnnotLine(XRef *xrefA, PDFRectangle *rect, PDFRectangle *lRect, Catalog *catalog) : + AnnotMarkup(xrefA, rect, catalog) { + Object obj1; + + type = typeLine; + annotObj.dictSet ("Subtype", obj1.initName ("Line")); + + Object obj2, obj3; + obj2.initArray (xrefA); + obj2.arrayAdd (obj3.initReal (lRect->x1)); + obj2.arrayAdd (obj3.initReal (lRect->y1)); + obj2.arrayAdd (obj3.initReal (lRect->x2)); + obj2.arrayAdd (obj3.initReal (lRect->y2)); + annotObj.dictSet ("L", &obj2); + + initialize (xrefA, catalog, annotObj.getDict()); +} + +AnnotLine::AnnotLine(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + AnnotMarkup(xrefA, dict, catalog, obj) { + type = typeLine; + initialize(xrefA, catalog, dict); +} + +AnnotLine::~AnnotLine() { + delete coord1; + delete coord2; + + if (interiorColor) + delete interiorColor; + + if (measure) + delete measure; +} + +void AnnotLine::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) { + Object obj1; + + if (dict->lookup("L", &obj1)->isArray() && obj1.arrayGetLength() == 4) { + Object obj2; + double x1, y1, x2, y2; + + (obj1.arrayGet(0, &obj2)->isNum() ? x1 = obj2.getNum() : x1 = 0); + obj2.free(); + (obj1.arrayGet(1, &obj2)->isNum() ? y1 = obj2.getNum() : y1 = 0); + obj2.free(); + (obj1.arrayGet(2, &obj2)->isNum() ? x2 = obj2.getNum() : x2 = 0); + obj2.free(); + (obj1.arrayGet(3, &obj2)->isNum() ? y2 = obj2.getNum() : y2 = 0); + obj2.free(); + + coord1 = new AnnotCoord(x1, y1); + coord2 = new AnnotCoord(x2, y2); + } else { + coord1 = new AnnotCoord(); + coord2 = new AnnotCoord(); + } + obj1.free(); + + if (dict->lookup("LE", &obj1)->isArray() && obj1.arrayGetLength() == 2) { + Object obj2; + + if(obj1.arrayGet(0, &obj2)->isString()) + startStyle = parseAnnotLineEndingStyle(obj2.getString()); + else + startStyle = annotLineEndingNone; + obj2.free(); + + if(obj1.arrayGet(1, &obj2)->isString()) + endStyle = parseAnnotLineEndingStyle(obj2.getString()); + else + endStyle = annotLineEndingNone; + obj2.free(); + + } else { + startStyle = endStyle = annotLineEndingNone; + } + obj1.free(); + + if (dict->lookup("IC", &obj1)->isArray()) { + interiorColor = new AnnotColor(obj1.getArray()); + } else { + interiorColor = NULL; + } + obj1.free(); + + if (dict->lookup("LL", &obj1)->isNum()) { + leaderLineLength = obj1.getNum(); + } else { + leaderLineLength = 0; + } + obj1.free(); + + if (dict->lookup("LLE", &obj1)->isNum()) { + leaderLineExtension = obj1.getNum(); + + if (leaderLineExtension < 0) + leaderLineExtension = 0; + } else { + leaderLineExtension = 0; + } + obj1.free(); + + if (dict->lookup("Cap", &obj1)->isBool()) { + caption = obj1.getBool(); + } else { + caption = gFalse; + } + obj1.free(); + + if (dict->lookup("IT", &obj1)->isName()) { + const char *intentName = obj1.getName(); + + if(!strcmp(intentName, "LineArrow")) { + intent = intentLineArrow; + } else if(!strcmp(intentName, "LineDimension")) { + intent = intentLineDimension; + } else { + intent = intentLineArrow; + } + } else { + intent = intentLineArrow; + } + obj1.free(); + + if (dict->lookup("LLO", &obj1)->isNum()) { + leaderLineOffset = obj1.getNum(); + + if (leaderLineOffset < 0) + leaderLineOffset = 0; + } else { + leaderLineOffset = 0; + } + obj1.free(); + + if (dict->lookup("CP", &obj1)->isName()) { + const char *captionName = obj1.getName(); + + if(!strcmp(captionName, "Inline")) { + captionPos = captionPosInline; + } else if(!strcmp(captionName, "Top")) { + captionPos = captionPosTop; + } else { + captionPos = captionPosInline; + } + } else { + captionPos = captionPosInline; + } + obj1.free(); + + if (dict->lookup("Measure", &obj1)->isDict()) { + measure = NULL; + } else { + measure = NULL; + } + obj1.free(); + + if ((dict->lookup("CO", &obj1)->isArray()) && (obj1.arrayGetLength() == 2)) { + Object obj2; + + (obj1.arrayGet(0, &obj2)->isNum() ? captionTextHorizontal = obj2.getNum() : + captionTextHorizontal = 0); + obj2.free(); + (obj1.arrayGet(1, &obj2)->isNum() ? captionTextVertical = obj2.getNum() : + captionTextVertical = 0); + obj2.free(); + } else { + captionTextHorizontal = captionTextVertical = 0; + } + obj1.free(); +} + +void AnnotLine::draw(Gfx *gfx, GBool printing) { + Object obj; + double ca = 1; + + if (!isVisible (printing)) + return; + + /* Some documents like pdf_commenting_new.pdf, + * have y1 = y2 but line_width > 0, acroread + * renders the lines in such cases even though + * the annot bbox is empty. We adjust the bbox here + * to avoid having an empty bbox so that lines + * are rendered + */ + if (rect->y1 == rect->y2) + rect->y2 += border ? border->getWidth() : 1; + + if (appearance.isNull()) { + ca = opacity; + + appearBuf = new GooString (); + appearBuf->append ("q\n"); + if (color) + setColor(color, gFalse); + + if (border) { + int i, dashLength; + double *dash; + + switch (border->getStyle()) { + case AnnotBorder::borderDashed: + appearBuf->append("["); + dashLength = border->getDashLength(); + dash = border->getDash(); + for (i = 0; i < dashLength; ++i) + appearBuf->appendf(" {0:.2f}", dash[i]); + appearBuf->append(" ] 0 d\n"); + break; + default: + appearBuf->append("[] 0 d\n"); + break; + } + appearBuf->appendf("{0:.2f} w\n", border->getWidth()); + } + appearBuf->appendf ("{0:.2f} {1:.2f} m\n", coord1->getX() - rect->x1, coord1->getY() - rect->y1); + appearBuf->appendf ("{0:.2f} {1:.2f} l\n", coord2->getX() - rect->x1, coord2->getY() - rect->y1); + // TODO: Line ending, caption, leader lines + appearBuf->append ("S\n"); + appearBuf->append ("Q\n"); + + double bbox[4]; + bbox[0] = bbox[1] = 0; + bbox[2] = rect->x2 - rect->x1; + bbox[3] = rect->y2 - rect->y1; + if (ca == 1) { + createForm(bbox, gFalse, NULL, &appearance); + } else { + Object aStream, resDict; + + createForm(bbox, gTrue, NULL, &aStream); + delete appearBuf; + + appearBuf = new GooString ("/GS0 gs\n/Fm0 Do"); + createResourcesDict("Fm0", &aStream, "GS0", ca, NULL, &resDict); + createForm(bbox, gFalse, &resDict, &appearance); + } + delete appearBuf; + } + + // draw the appearance stream + appearance.fetch(xref, &obj); + gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color, + rect->x1, rect->y1, rect->x2, rect->y2); + obj.free(); +} + +//------------------------------------------------------------------------ +// AnnotTextMarkup +//------------------------------------------------------------------------ +AnnotTextMarkup::AnnotTextMarkup(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType, + AnnotQuadrilaterals *quadPoints, Catalog *catalog) : + AnnotMarkup(xrefA, rect, catalog) { + Object obj1; + + switch (subType) { + case typeHighlight: + annotObj.dictSet ("Subtype", obj1.initName ("Highlight")); + break; + case typeUnderline: + annotObj.dictSet ("Subtype", obj1.initName ("Underline")); + break; + case typeSquiggly: + annotObj.dictSet ("Subtype", obj1.initName ("Squiggly")); + break; + case typeStrikeOut: + annotObj.dictSet ("Subtype", obj1.initName ("StrikeOut")); + break; + default: + assert (0 && "Invalid subtype for AnnotTextMarkup\n"); + } + + Object obj2; + obj2.initArray (xrefA); + + for (int i = 0; i < quadPoints->getQuadrilateralsLength(); ++i) { + Object obj3; + + obj2.arrayAdd (obj3.initReal (quadPoints->getX1(i))); + obj2.arrayAdd (obj3.initReal (quadPoints->getY1(i))); + obj2.arrayAdd (obj3.initReal (quadPoints->getX2(i))); + obj2.arrayAdd (obj3.initReal (quadPoints->getY2(i))); + obj2.arrayAdd (obj3.initReal (quadPoints->getX3(i))); + obj2.arrayAdd (obj3.initReal (quadPoints->getY3(i))); + obj2.arrayAdd (obj3.initReal (quadPoints->getX4(i))); + obj2.arrayAdd (obj3.initReal (quadPoints->getY4(i))); + } + + annotObj.dictSet ("QuadPoints", &obj2); + + initialize(xrefA, catalog, annotObj.getDict()); +} + +AnnotTextMarkup::AnnotTextMarkup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + AnnotMarkup(xrefA, dict, catalog, obj) { + // the real type will be read in initialize() + type = typeHighlight; + initialize(xrefA, catalog, dict); +} + +void AnnotTextMarkup::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) { + Object obj1; + + if (dict->lookup("Subtype", &obj1)->isName()) { + GooString typeName(obj1.getName()); + if (!typeName.cmp("Highlight")) { + type = typeHighlight; + } else if (!typeName.cmp("Underline")) { + type = typeUnderline; + } else if (!typeName.cmp("Squiggly")) { + type = typeSquiggly; + } else if (!typeName.cmp("StrikeOut")) { + type = typeStrikeOut; + } + } + obj1.free(); + + if(dict->lookup("QuadPoints", &obj1)->isArray()) { + quadrilaterals = new AnnotQuadrilaterals(obj1.getArray(), rect); + } else { + error(-1, "Bad Annot Text Markup QuadPoints"); + quadrilaterals = NULL; + ok = gFalse; + } + obj1.free(); +} + +AnnotTextMarkup::~AnnotTextMarkup() { + if(quadrilaterals) { + delete quadrilaterals; + } +} + + + +void AnnotTextMarkup::draw(Gfx *gfx, GBool printing) { + Object obj; + double ca = 1; + int i; + Object obj1, obj2; + + if (!isVisible (printing)) + return; + + if (appearance.isNull() || type == typeHighlight) { + ca = opacity; + + appearBuf = new GooString (); + + switch (type) { + case typeUnderline: + if (color) { + setColor(color, gFalse); + setColor(color, gTrue); + } + + for (i = 0; i < quadrilaterals->getQuadrilateralsLength(); ++i) { + double x1, x2, y3; + double x, y; + + x1 = quadrilaterals->getX1(i); + x2 = quadrilaterals->getX2(i); + y3 = quadrilaterals->getY3(i); + + x = x1 - rect->x1; + y = y3 - rect->y1; + appearBuf->append ("[]0 d 2 w\n"); + appearBuf->appendf ("{0:.2f} {1:.2f} m\n", x, y); + appearBuf->appendf ("{0:.2f} {1:.2f} l\n", x + (x2 - x1), y); + appearBuf->append ("S\n"); + } + break; + case typeStrikeOut: + if (color) { + setColor(color, gFalse); + setColor(color, gTrue); + } + + for (i = 0; i < quadrilaterals->getQuadrilateralsLength(); ++i) { + double x1, y1, x2, y3; + double x, y; + double h2; + + x1 = quadrilaterals->getX1(i); + y1 = quadrilaterals->getY1(i); + x2 = quadrilaterals->getX2(i); + y3 = quadrilaterals->getY3(i); + h2 = (y1 - y3) / 2.0; + + x = x1 - rect->x1; + y = (y3 - rect->y1) + h2; + appearBuf->append ("[]0 d 2 w\n"); + appearBuf->appendf ("{0:.2f} {1:.2f} m\n", x, y); + appearBuf->appendf ("{0:.2f} {1:.2f} l\n", x + (x2 - x1), y); + appearBuf->append ("S\n"); + } + break; + case typeSquiggly: + // TODO + default: + case typeHighlight: + appearance.free(); + + if (color) + setColor(color, gTrue); + + for (i = 0; i < quadrilaterals->getQuadrilateralsLength(); ++i) { + double x1, y1, x2, y2, x3, y3, x4, y4; + double h4; + + x1 = quadrilaterals->getX1(i); + y1 = quadrilaterals->getY1(i); + x2 = quadrilaterals->getX2(i); + y2 = quadrilaterals->getY2(i); + x3 = quadrilaterals->getX3(i); + y3 = quadrilaterals->getY3(i); + x4 = quadrilaterals->getX4(i); + y4 = quadrilaterals->getY4(i); + h4 = fabs(y1 - y3) / 4.0; + + appearBuf->appendf ("{0:.2f} {1:.2f} m\n", x3, y3); + appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", + x3 - h4, y3 + h4, x1 - h4, y1 - h4, x1, y1); + appearBuf->appendf ("{0:.2f} {1:.2f} l\n", x2, y2); + appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", + x2 + h4, y2 - h4, x4 + h4, y4 + h4, x4, y4); + appearBuf->append ("f\n"); + } + + Object aStream, resDict; + double bbox[4]; + bbox[0] = rect->x1; + bbox[1] = rect->y1; + bbox[2] = rect->x2; + bbox[3] = rect->y2; + createForm(bbox, gTrue, NULL, &aStream); + delete appearBuf; + + appearBuf = new GooString ("/GS0 gs\n/Fm0 Do"); + createResourcesDict("Fm0", &aStream, "GS0", 1, "Multiply", &resDict); + if (ca == 1) { + createForm(bbox, gFalse, &resDict, &appearance); + } else { + createForm(bbox, gTrue, &resDict, &aStream); + delete appearBuf; + + appearBuf = new GooString ("/GS0 gs\n/Fm0 Do"); + createResourcesDict("Fm0", &aStream, "GS0", ca, NULL, &resDict); + createForm(bbox, gFalse, &resDict, &appearance); + } + delete appearBuf; + break; + } + } + + // draw the appearance stream + appearance.fetch(xref, &obj); + gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color, + rect->x1, rect->y1, rect->x2, rect->y2); + obj.free(); +} + +//------------------------------------------------------------------------ +// AnnotWidget +//------------------------------------------------------------------------ + +AnnotWidget::AnnotWidget(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + Annot(xrefA, dict, catalog, obj) { + type = typeWidget; + field = NULL; + initialize(xrefA, catalog, dict); +} + +AnnotWidget::AnnotWidget(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj, FormField *fieldA) : + Annot(xrefA, dict, catalog, obj) { + type = typeWidget; + field = fieldA; + initialize(xrefA, catalog, dict); +} + +AnnotWidget::~AnnotWidget() { + if (appearCharacs) + delete appearCharacs; + + if (action) + delete action; + + if (additionActions) + delete additionActions; + + if (parent) + delete parent; +} + +void AnnotWidget::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) { + Object obj1; + + form = catalog->getForm(); + + if(dict->lookup("H", &obj1)->isName()) { + const char *modeName = obj1.getName(); + + if(!strcmp(modeName, "N")) { + mode = highlightModeNone; + } else if(!strcmp(modeName, "O")) { + mode = highlightModeOutline; + } else if(!strcmp(modeName, "P") || !strcmp(modeName, "T")) { + mode = highlightModePush; + } else { + mode = highlightModeInvert; + } + } else { + mode = highlightModeInvert; + } + obj1.free(); + + if(dict->lookup("MK", &obj1)->isDict()) { + appearCharacs = new AnnotAppearanceCharacs(obj1.getDict()); + } else { + appearCharacs = NULL; + } + obj1.free(); + + action = NULL; + if(dict->lookup("A", &obj1)->isDict()) { + action = LinkAction::parseAction(&obj1, catalog->getBaseURI()); + } + obj1.free(); + + if(dict->lookup("AA", &obj1)->isDict()) { + additionActions = NULL; + } else { + additionActions = NULL; + } + obj1.free(); + + if(dict->lookup("Parent", &obj1)->isDict()) { + parent = NULL; + } else { + parent = NULL; + } + obj1.free(); +} + +// Grand unified handler for preparing text strings to be drawn into form +// fields. Takes as input a text string (in PDFDocEncoding or UTF-16). +// Converts some or all of this string to the appropriate encoding for the +// specified font, and computes the width of the text. Can optionally stop +// converting when a specified width has been reached, to perform line-breaking +// for multi-line fields. +// +// Parameters: +// text: input text string to convert +// outBuf: buffer for writing re-encoded string +// i: index at which to start converting; will be updated to point just after +// last character processed +// font: the font which will be used for display +// width: computed width (unscaled by font size) will be stored here +// widthLimit: if non-zero, stop converting to keep width under this value +// (should be scaled down by font size) +// charCount: count of number of characters will be stored here +// noReencode: if set, do not try to translate the character encoding +// (useful for Zapf Dingbats or other unusual encodings) +// can only be used with simple fonts, not CID-keyed fonts +// +// TODO: Handle surrogate pairs in UTF-16. +// Should be able to generate output for any CID-keyed font. +// Doesn't handle vertical fonts--should it? +void AnnotWidget::layoutText(GooString *text, GooString *outBuf, int *i, + GfxFont *font, double *width, double widthLimit, + int *charCount, GBool noReencode) +{ + CharCode c; + Unicode uChar, *uAux; + double w = 0.0; + int uLen, n; + double dx, dy, ox, oy; + GBool unicode = text->hasUnicodeMarker(); + GBool spacePrev; // previous character was a space + + // State for backtracking when more text has been processed than fits within + // widthLimit. We track for both input (text) and output (outBuf) the offset + // to the first character to discard. + // + // We keep track of several points: + // 1 - end of previous completed word which fits + // 2 - previous character which fit + int last_i1, last_i2, last_o1, last_o2; + + if (unicode && text->getLength() % 2 != 0) { + error(-1, "AnnotWidget::layoutText, bad unicode string"); + return; + } + + // skip Unicode marker on string if needed + if (unicode && *i == 0) + *i = 2; + + // Start decoding and copying characters, until either: + // we reach the end of the string + // we reach the maximum width + // we reach a newline character + // As we copy characters, keep track of the last full word to fit, so that we + // can backtrack if we exceed the maximum width. + last_i1 = last_i2 = *i; + last_o1 = last_o2 = 0; + spacePrev = gFalse; + outBuf->clear(); + + while (*i < text->getLength()) { + last_i2 = *i; + last_o2 = outBuf->getLength(); + + if (unicode) { + uChar = (unsigned char)(text->getChar(*i)) << 8; + uChar += (unsigned char)(text->getChar(*i + 1)); + *i += 2; + } else { + if (noReencode) + uChar = text->getChar(*i) & 0xff; + else + uChar = pdfDocEncoding[text->getChar(*i) & 0xff]; + *i += 1; + } + + // Explicit line break? + if (uChar == '\r' || uChar == '\n') { + // Treat a <CR><LF> sequence as a single line break + if (uChar == '\r' && *i < text->getLength()) { + if (unicode && text->getChar(*i) == '\0' + && text->getChar(*i + 1) == '\n') + *i += 2; + else if (!unicode && text->getChar(*i) == '\n') + *i += 1; + } + + break; + } + + if (noReencode) { + outBuf->append(uChar); + } else { + CharCodeToUnicode *ccToUnicode = font->getToUnicode(); + if (!ccToUnicode) { + // This assumes an identity CMap. + outBuf->append((uChar >> 8) & 0xff); + outBuf->append(uChar & 0xff); + } else if (ccToUnicode->mapToCharCode(&uChar, &c, 1)) { + ccToUnicode->decRefCnt(); + if (font->isCIDFont()) { + // TODO: This assumes an identity CMap. It should be extended to + // handle the general case. + outBuf->append((c >> 8) & 0xff); + outBuf->append(c & 0xff); + } else { + // 8-bit font + outBuf->append(c); + } + } else { + ccToUnicode->decRefCnt(); + fprintf(stderr, + "warning: layoutText: cannot convert U+%04X\n", uChar); + } + } + + // If we see a space, then we have a linebreak opportunity. + if (uChar == ' ') { + last_i1 = *i; + if (!spacePrev) + last_o1 = last_o2; + spacePrev = gTrue; + } else { + spacePrev = gFalse; + } + + // Compute width of character just output + if (outBuf->getLength() > last_o2) { + dx = 0.0; + font->getNextChar(outBuf->getCString() + last_o2, + outBuf->getLength() - last_o2, + &c, &uAux, &uLen, &dx, &dy, &ox, &oy); + w += dx; + } + + // Current line over-full now? + if (widthLimit > 0.0 && w > widthLimit) { + if (last_o1 > 0) { + // Back up to the previous word which fit, if there was a previous + // word. + *i = last_i1; + outBuf->del(last_o1, outBuf->getLength() - last_o1); + } else if (last_o2 > 0) { + // Otherwise, back up to the previous character (in the only word on + // this line) + *i = last_i2; + outBuf->del(last_o2, outBuf->getLength() - last_o2); + } else { + // Otherwise, we were trying to fit the first character; include it + // anyway even if it overflows the space--no updates to make. + } + break; + } + } + + // If splitting input into lines because we reached the width limit, then + // consume any remaining trailing spaces that would go on this line from the + // input. If in doing so we reach a newline, consume that also. This code + // won't run if we stopped at a newline above, since in that case w <= + // widthLimit still. + if (widthLimit > 0.0 && w > widthLimit) { + if (unicode) { + while (*i < text->getLength() + && text->getChar(*i) == '\0' && text->getChar(*i + 1) == ' ') + *i += 2; + if (*i < text->getLength() + && text->getChar(*i) == '\0' && text->getChar(*i + 1) == '\r') + *i += 2; + if (*i < text->getLength() + && text->getChar(*i) == '\0' && text->getChar(*i + 1) == '\n') + *i += 2; + } else { + while (*i < text->getLength() && text->getChar(*i) == ' ') + *i += 1; + if (*i < text->getLength() && text->getChar(*i) == '\r') + *i += 1; + if (*i < text->getLength() && text->getChar(*i) == '\n') + *i += 1; + } + } + + // Compute the actual width and character count of the final string, based on + // breakpoint, if this information is requested by the caller. + if (width != NULL || charCount != NULL) { + char *s = outBuf->getCString(); + int len = outBuf->getLength(); + + if (width != NULL) + *width = 0.0; + if (charCount != NULL) + *charCount = 0; + + while (len > 0) { + dx = 0.0; + n = font->getNextChar(s, len, &c, &uAux, &uLen, &dx, &dy, &ox, &oy); + + if (n == 0) { + break; + } + + if (width != NULL) + *width += dx; + if (charCount != NULL) + *charCount += 1; + + s += n; + len -= n; + } + } +} + +// Copy the given string to appearBuf, adding parentheses around it and +// escaping characters as appropriate. +void AnnotWidget::writeString(GooString *str, GooString *appearBuf) +{ + char c; + int i; + + appearBuf->append('('); + + for (i = 0; i < str->getLength(); ++i) { + c = str->getChar(i); + if (c == '(' || c == ')' || c == '\\') { + appearBuf->append('\\'); + appearBuf->append(c); + } else if (c < 0x20) { + appearBuf->appendf("\\{0:03o}", (unsigned char)c); + } else { + appearBuf->append(c); + } + } + + appearBuf->append(')'); +} + +// Draw the variable text or caption for a field. +void AnnotWidget::drawText(GooString *text, GooString *da, GfxResources *resources, + GBool multiline, int comb, int quadding, + GBool txField, GBool forceZapfDingbats, + GBool password) { + GooList *daToks; + GooString *tok, *convertedText; + GfxFont *font; + double fontSize, fontSize2, borderWidth, x, xPrev, y, w, wMax; + int tfPos, tmPos, i, j; + GBool freeText = gFalse; // true if text should be freed before return + GBool freeFont = gFalse; + + //~ if there is no MK entry, this should use the existing content stream, + //~ and only replace the marked content portion of it + //~ (this is only relevant for Tx fields) + + // parse the default appearance string + tfPos = tmPos = -1; + if (da) { + daToks = new GooList(); + i = 0; + while (i < da->getLength()) { + while (i < da->getLength() && Lexer::isSpace(da->getChar(i))) { + ++i; + } + if (i < da->getLength()) { + for (j = i + 1; + j < da->getLength() && !Lexer::isSpace(da->getChar(j)); + ++j) ; + daToks->append(new GooString(da, i, j - i)); + i = j; + } + } + for (i = 2; i < daToks->getLength(); ++i) { + if (i >= 2 && !((GooString *)daToks->get(i))->cmp("Tf")) { + tfPos = i - 2; + } else if (i >= 6 && !((GooString *)daToks->get(i))->cmp("Tm")) { + tmPos = i - 6; + } + } + } else { + daToks = NULL; + } + + // force ZapfDingbats + if (forceZapfDingbats) { + if (tfPos >= 0) { + tok = (GooString *)daToks->get(tfPos); + if (tok->cmp("/ZaDb")) { + tok->clear(); + tok->append("/ZaDb"); + } + } + } + // get the font and font size + font = NULL; + fontSize = 0; + if (tfPos >= 0) { + tok = (GooString *)daToks->get(tfPos); + if (tok->getLength() >= 1 && tok->getChar(0) == '/') { + if (!resources || !(font = resources->lookupFont(tok->getCString() + 1))) { + if (forceZapfDingbats) { + // We are forcing ZaDb but the font does not exist + // so create a fake one + Ref r; // dummy Ref, it's not used at all in this codepath + r.num = 0; + r.gen = 0; + Dict *d = new Dict(xref); + font = new Gfx8BitFont(xref, "ZaDb", r, new GooString("ZapfDingbats"), fontType1, d); + delete d; + freeFont = gTrue; + addDingbatsResource = gTrue; + } else { + error(-1, "Unknown font in field's DA string"); + } + } + } else { + error(-1, "Invalid font name in 'Tf' operator in field's DA string"); + } + tok = (GooString *)daToks->get(tfPos + 1); + fontSize = gatof(tok->getCString()); + } else { + error(-1, "Missing 'Tf' operator in field's DA string"); + } + if (!font) { + if (daToks) { + deleteGooList(daToks, GooString); + } + return; + } + + // get the border width + borderWidth = border ? border->getWidth() : 0; + + // for a password field, replace all characters with asterisks + if (password) { + int len; + if (text->hasUnicodeMarker()) + len = (text->getLength() - 2) / 2; + else + len = text->getLength(); + + text = new GooString; + for (i = 0; i < len; ++i) + text->append('*'); + freeText = gTrue; + } + + convertedText = new GooString; + + // setup + if (txField) { + appearBuf->append("/Tx BMC\n"); + } + appearBuf->append("q\n"); + appearBuf->append("BT\n"); + // multi-line text + if (multiline) { + // note: the comb flag is ignored in multiline mode + + wMax = rect->x2 - rect->x1 - 2 * borderWidth - 4; + + // compute font autosize + if (fontSize == 0) { + for (fontSize = 20; fontSize > 1; --fontSize) { + y = rect->y2 - rect->y1; + i = 0; + while (i < text->getLength()) { + layoutText(text, convertedText, &i, font, &w, wMax / fontSize, NULL, + forceZapfDingbats); + y -= fontSize; + } + // approximate the descender for the last line + if (y >= 0.33 * fontSize) { + break; + } + } + if (tfPos >= 0) { + tok = (GooString *)daToks->get(tfPos + 1); + tok->clear(); + tok->appendf("{0:.2f}", fontSize); + } + } + + // starting y coordinate + // (note: each line of text starts with a Td operator that moves + // down a line) + y = rect->y2 - rect->y1; + + // set the font matrix + if (tmPos >= 0) { + tok = (GooString *)daToks->get(tmPos + 4); + tok->clear(); + tok->append('0'); + tok = (GooString *)daToks->get(tmPos + 5); + tok->clear(); + tok->appendf("{0:.2f}", y); + } + + // write the DA string + if (daToks) { + for (i = 0; i < daToks->getLength(); ++i) { + appearBuf->append((GooString *)daToks->get(i))->append(' '); + } + } + + // write the font matrix (if not part of the DA string) + if (tmPos < 0) { + appearBuf->appendf("1 0 0 1 0 {0:.2f} Tm\n", y); + } + + // write a series of lines of text + i = 0; + xPrev = 0; + while (i < text->getLength()) { + layoutText(text, convertedText, &i, font, &w, wMax / fontSize, NULL, + forceZapfDingbats); + w *= fontSize; + + // compute text start position + switch (quadding) { + case quaddingLeftJustified: + default: + x = borderWidth + 2; + break; + case quaddingCentered: + x = (rect->x2 - rect->x1 - w) / 2; + break; + case quaddingRightJustified: + x = rect->x2 - rect->x1 - borderWidth - 2 - w; + break; + } + + // draw the line + appearBuf->appendf("{0:.2f} {1:.2f} Td\n", x - xPrev, -fontSize); + writeString(convertedText, appearBuf); + appearBuf->append(" Tj\n"); + + // next line + xPrev = x; + } + + // single-line text + } else { + //~ replace newlines with spaces? - what does Acrobat do? + + // comb formatting + if (comb > 0) { + int charCount; + + // compute comb spacing + w = (rect->x2 - rect->x1 - 2 * borderWidth) / comb; + + // compute font autosize + if (fontSize == 0) { + fontSize = rect->y2 - rect->y1 - 2 * borderWidth; + if (w < fontSize) { + fontSize = w; + } + fontSize = floor(fontSize); + if (tfPos >= 0) { + tok = (GooString *)daToks->get(tfPos + 1); + tok->clear(); + tok->appendf("{0:.2f}", fontSize); + } + } + + i = 0; + layoutText(text, convertedText, &i, font, NULL, 0.0, &charCount, + forceZapfDingbats); + if (charCount > comb) + charCount = comb; + + // compute starting text cell + switch (quadding) { + case quaddingLeftJustified: + default: + x = borderWidth; + break; + case quaddingCentered: + x = borderWidth + (comb - charCount) / 2 * w; + break; + case quaddingRightJustified: + x = borderWidth + (comb - charCount) * w; + break; + } + y = 0.5 * (rect->y2 - rect->y1) - 0.4 * fontSize; + + // set the font matrix + if (tmPos >= 0) { + tok = (GooString *)daToks->get(tmPos + 4); + tok->clear(); + tok->appendf("{0:.2f}", x); + tok = (GooString *)daToks->get(tmPos + 5); + tok->clear(); + tok->appendf("{0:.2f}", y); + } + + // write the DA string + if (daToks) { + for (i = 0; i < daToks->getLength(); ++i) { + appearBuf->append((GooString *)daToks->get(i))->append(' '); + } + } + + // write the font matrix (if not part of the DA string) + if (tmPos < 0) { + appearBuf->appendf("1 0 0 1 {0:.2f} {1:.2f} Tm\n", x, y); + } + + // write the text string + char *s = convertedText->getCString(); + int len = convertedText->getLength(); + i = 0; + xPrev = w; // so that first character is placed properly + while (i < comb && len > 0) { + CharCode code; + Unicode *uAux; + int uLen, n; + double dx, dy, ox, oy; + + dx = 0.0; + n = font->getNextChar(s, len, &code, &uAux, &uLen, &dx, &dy, &ox, &oy); + dx *= fontSize; + + // center each character within its cell, by advancing the text + // position the appropriate amount relative to the start of the + // previous character + x = 0.5 * (w - dx); + appearBuf->appendf("{0:.2f} 0 Td\n", x - xPrev + w); + + GooString *charBuf = new GooString(s, n); + writeString(charBuf, appearBuf); + appearBuf->append(" Tj\n"); + delete charBuf; + + i++; + s += n; + len -= n; + xPrev = x; + } + + // regular (non-comb) formatting + } else { + i = 0; + layoutText(text, convertedText, &i, font, &w, 0.0, NULL, + forceZapfDingbats); + + // compute font autosize + if (fontSize == 0) { + fontSize = rect->y2 - rect->y1 - 2 * borderWidth; + fontSize2 = (rect->x2 - rect->x1 - 4 - 2 * borderWidth) / w; + if (fontSize2 < fontSize) { + fontSize = fontSize2; + } + fontSize = floor(fontSize); + if (tfPos >= 0) { + tok = (GooString *)daToks->get(tfPos + 1); + tok->clear(); + tok->appendf("{0:.2f}", fontSize); + } + } + + // compute text start position + w *= fontSize; + switch (quadding) { + case quaddingLeftJustified: + default: + x = borderWidth + 2; + break; + case quaddingCentered: + x = (rect->x2 - rect->x1 - w) / 2; + break; + case quaddingRightJustified: + x = rect->x2 - rect->x1 - borderWidth - 2 - w; + break; + } + y = 0.5 * (rect->y2 - rect->y1) - 0.4 * fontSize; + + // set the font matrix + if (tmPos >= 0) { + tok = (GooString *)daToks->get(tmPos + 4); + tok->clear(); + tok->appendf("{0:.2f}", x); + tok = (GooString *)daToks->get(tmPos + 5); + tok->clear(); + tok->appendf("{0:.2f}", y); + } + + // write the DA string + if (daToks) { + for (i = 0; i < daToks->getLength(); ++i) { + appearBuf->append((GooString *)daToks->get(i))->append(' '); + } + } + + // write the font matrix (if not part of the DA string) + if (tmPos < 0) { + appearBuf->appendf("1 0 0 1 {0:.2f} {1:.2f} Tm\n", x, y); + } + + // write the text string + writeString(convertedText, appearBuf); + appearBuf->append(" Tj\n"); + } + } + // cleanup + appearBuf->append("ET\n"); + appearBuf->append("Q\n"); + if (txField) { + appearBuf->append("EMC\n"); + } + if (daToks) { + deleteGooList(daToks, GooString); + } + if (freeText) { + delete text; + } + delete convertedText; + if (freeFont) { + font->decRefCnt(); + } +} + +// Draw the variable text or caption for a field. +void AnnotWidget::drawListBox(FormFieldChoice *fieldChoice, + GooString *da, GfxResources *resources, int quadding) { + GooList *daToks; + GooString *tok, *convertedText; + GfxFont *font; + double fontSize, fontSize2, borderWidth, x, y, w, wMax; + int tfPos, tmPos, i, j; + + //~ if there is no MK entry, this should use the existing content stream, + //~ and only replace the marked content portion of it + //~ (this is only relevant for Tx fields) + + // parse the default appearance string + tfPos = tmPos = -1; + if (da) { + daToks = new GooList(); + i = 0; + while (i < da->getLength()) { + while (i < da->getLength() && Lexer::isSpace(da->getChar(i))) { + ++i; + } + if (i < da->getLength()) { + for (j = i + 1; + j < da->getLength() && !Lexer::isSpace(da->getChar(j)); + ++j) ; + daToks->append(new GooString(da, i, j - i)); + i = j; + } + } + for (i = 2; i < daToks->getLength(); ++i) { + if (i >= 2 && !((GooString *)daToks->get(i))->cmp("Tf")) { + tfPos = i - 2; + } else if (i >= 6 && !((GooString *)daToks->get(i))->cmp("Tm")) { + tmPos = i - 6; + } + } + } else { + daToks = NULL; + } + + // get the font and font size + font = NULL; + fontSize = 0; + if (tfPos >= 0) { + tok = (GooString *)daToks->get(tfPos); + if (tok->getLength() >= 1 && tok->getChar(0) == '/') { + if (!resources || !(font = resources->lookupFont(tok->getCString() + 1))) { + error(-1, "Unknown font in field's DA string"); + } + } else { + error(-1, "Invalid font name in 'Tf' operator in field's DA string"); + } + tok = (GooString *)daToks->get(tfPos + 1); + fontSize = gatof(tok->getCString()); + } else { + error(-1, "Missing 'Tf' operator in field's DA string"); + } + if (!font) { + if (daToks) { + deleteGooList(daToks, GooString); + } + return; + } + + convertedText = new GooString; + + // get the border width + borderWidth = border ? border->getWidth() : 0; + + // compute font autosize + if (fontSize == 0) { + wMax = 0; + for (i = 0; i < fieldChoice->getNumChoices(); ++i) { + j = 0; + layoutText(fieldChoice->getChoice(i), convertedText, &j, font, &w, 0.0, NULL, gFalse); + if (w > wMax) { + wMax = w; + } + } + fontSize = rect->y2 - rect->y1 - 2 * borderWidth; + fontSize2 = (rect->x2 - rect->x1 - 4 - 2 * borderWidth) / wMax; + if (fontSize2 < fontSize) { + fontSize = fontSize2; + } + fontSize = floor(fontSize); + if (tfPos >= 0) { + tok = (GooString *)daToks->get(tfPos + 1); + tok->clear(); + tok->appendf("{0:.2f}", fontSize); + } + } + // draw the text + y = rect->y2 - rect->y1 - 1.1 * fontSize; + for (i = fieldChoice->getTopIndex(); i < fieldChoice->getNumChoices(); ++i) { + // setup + appearBuf->append("q\n"); + + // draw the background if selected + if (fieldChoice->isSelected(i)) { + appearBuf->append("0 g f\n"); + appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} re f\n", + borderWidth, + y - 0.2 * fontSize, + rect->x2 - rect->x1 - 2 * borderWidth, + 1.1 * fontSize); + } + + // setup + appearBuf->append("BT\n"); + + // compute text width and start position + j = 0; + layoutText(fieldChoice->getChoice(i), convertedText, &j, font, &w, 0.0, NULL, gFalse); + w *= fontSize; + switch (quadding) { + case quaddingLeftJustified: + default: + x = borderWidth + 2; + break; + case quaddingCentered: + x = (rect->x2 - rect->x1 - w) / 2; + break; + case quaddingRightJustified: + x = rect->x2 - rect->x1 - borderWidth - 2 - w; + break; + } + + // set the font matrix + if (tmPos >= 0) { + tok = (GooString *)daToks->get(tmPos + 4); + tok->clear(); + tok->appendf("{0:.2f}", x); + tok = (GooString *)daToks->get(tmPos + 5); + tok->clear(); + tok->appendf("{0:.2f}", y); + } + + // write the DA string + if (daToks) { + for (j = 0; j < daToks->getLength(); ++j) { + appearBuf->append((GooString *)daToks->get(j))->append(' '); + } + } + + // write the font matrix (if not part of the DA string) + if (tmPos < 0) { + appearBuf->appendf("1 0 0 1 {0:.2f} {1:.2f} Tm\n", x, y); + } + + // change the text color if selected + if (fieldChoice->isSelected(i)) { + appearBuf->append("1 g\n"); + } + + // write the text string + writeString(convertedText, appearBuf); + appearBuf->append(" Tj\n"); + + // cleanup + appearBuf->append("ET\n"); + appearBuf->append("Q\n"); + + // next line + y -= 1.1 * fontSize; + } + + if (daToks) { + deleteGooList(daToks, GooString); + } + + delete convertedText; +} + +void AnnotWidget::drawBorder() { + int dashLength; + double *dash; + AnnotColor adjustedColor; + double w = border->getWidth(); + + AnnotColor *aColor = appearCharacs->getBorderColor(); + if (!aColor) + aColor = appearCharacs->getBackColor(); + if (!aColor) + return; + + double dx = rect->x2 - rect->x1; + double dy = rect->y2 - rect->y1; + + // radio buttons with no caption have a round border + GBool hasCaption = appearCharacs->getNormalCaption() != NULL; + if (field->getType() == formButton && + static_cast<FormFieldButton*>(field)->getButtonType() == formButtonRadio && !hasCaption) { + double r = 0.5 * (dx < dy ? dx : dy); + switch (border->getStyle()) { + case AnnotBorder::borderDashed: + appearBuf->append("["); + dashLength = border->getDashLength(); + dash = border->getDash(); + for (int i = 0; i < dashLength; ++i) { + appearBuf->appendf(" {0:.2f}", dash[i]); + } + appearBuf->append("] 0 d\n"); + // fall through to the solid case + case AnnotBorder::borderSolid: + case AnnotBorder::borderUnderlined: + appearBuf->appendf("{0:.2f} w\n", w); + setColor(aColor, gFalse); + drawCircle(0.5 * dx, 0.5 * dy, r - 0.5 * w, gFalse); + break; + case AnnotBorder::borderBeveled: + case AnnotBorder::borderInset: + appearBuf->appendf("{0:.2f} w\n", 0.5 * w); + setColor(aColor, gFalse); + drawCircle(0.5 * dx, 0.5 * dy, r - 0.25 * w, gFalse); + adjustedColor = AnnotColor(*aColor); + adjustedColor.adjustColor(border->getStyle() == AnnotBorder::borderBeveled ? 1 : -1); + setColor(&adjustedColor, gFalse); + drawCircleTopLeft(0.5 * dx, 0.5 * dy, r - 0.75 * w); + adjustedColor = AnnotColor(*aColor); + adjustedColor.adjustColor(border->getStyle() == AnnotBorder::borderBeveled ? -1 : 1); + setColor(&adjustedColor, gFalse); + drawCircleBottomRight(0.5 * dx, 0.5 * dy, r - 0.75 * w); + break; + } + } else { + switch (border->getStyle()) { + case AnnotBorder::borderDashed: + appearBuf->append("["); + dashLength = border->getDashLength(); + dash = border->getDash(); + for (int i = 0; i < dashLength; ++i) { + appearBuf->appendf(" {0:.2f}", dash[i]); + } + appearBuf->append("] 0 d\n"); + // fall through to the solid case + case AnnotBorder::borderSolid: + appearBuf->appendf("{0:.2f} w\n", w); + setColor(aColor, gFalse); + appearBuf->appendf("{0:.2f} {0:.2f} {1:.2f} {2:.2f} re s\n", + 0.5 * w, dx - w, dy - w); + break; + case AnnotBorder::borderBeveled: + case AnnotBorder::borderInset: + adjustedColor = AnnotColor(*aColor); + adjustedColor.adjustColor(border->getStyle() == AnnotBorder::borderBeveled ? 1 : -1); + setColor(&adjustedColor, gTrue); + appearBuf->append("0 0 m\n"); + appearBuf->appendf("0 {0:.2f} l\n", dy); + appearBuf->appendf("{0:.2f} {1:.2f} l\n", dx, dy); + appearBuf->appendf("{0:.2f} {1:.2f} l\n", dx - w, dy - w); + appearBuf->appendf("{0:.2f} {1:.2f} l\n", w, dy - w); + appearBuf->appendf("{0:.2f} {0:.2f} l\n", w); + appearBuf->append("f\n"); + adjustedColor = AnnotColor(*aColor); + adjustedColor.adjustColor(border->getStyle() == AnnotBorder::borderBeveled ? -1 : 1); + setColor(&adjustedColor, gTrue); + appearBuf->append("0 0 m\n"); + appearBuf->appendf("{0:.2f} 0 l\n", dx); + appearBuf->appendf("{0:.2f} {1:.2f} l\n", dx, dy); + appearBuf->appendf("{0:.2f} {1:.2f} l\n", dx - w, dy - w); + appearBuf->appendf("{0:.2f} {1:.2f} l\n", dx - w, w); + appearBuf->appendf("{0:.2f} {0:.2f} l\n", w); + appearBuf->append("f\n"); + break; + case AnnotBorder::borderUnderlined: + appearBuf->appendf("{0:.2f} w\n", w); + setColor(aColor, gFalse); + appearBuf->appendf("0 0 m {0:.2f} 0 l s\n", dx); + break; + } + + // clip to the inside of the border + appearBuf->appendf("{0:.2f} {0:.2f} {1:.2f} {2:.2f} re W n\n", + w, dx - 2 * w, dy - 2 * w); + } +} + +void AnnotWidget::drawFormFieldButton(GfxResources *resources, GooString *da) { + GooString *caption = NULL; + if (appearCharacs) + caption = appearCharacs->getNormalCaption(); + + switch (static_cast<FormFieldButton *>(field)->getButtonType()) { + case formButtonRadio: { + //~ Acrobat doesn't draw a caption if there is no AP dict (?) + if (appearState && appearState->cmp("Off") != 0) { + if (caption) { + drawText(caption, da, resources, gFalse, 0, fieldQuadCenter, + gFalse, gTrue); + } else if (appearCharacs) { + AnnotColor *aColor = appearCharacs->getBorderColor(); + if (aColor) { + double dx = rect->x2 - rect->x1; + double dy = rect->y2 - rect->y1; + setColor(aColor, gTrue); + drawCircle(0.5 * dx, 0.5 * dy, 0.2 * (dx < dy ? dx : dy), gTrue); + } + } + } + } + break; + case formButtonPush: + if (caption) + drawText(caption, da, resources, gFalse, 0, fieldQuadCenter, gFalse, gFalse); + break; + case formButtonCheck: + if (appearState && appearState->cmp("Off") != 0) { + if (!caption) { + GooString checkMark("3"); + drawText(&checkMark, da, resources, gFalse, 0, fieldQuadCenter, gFalse, gTrue); + } else { + drawText(caption, da, resources, gFalse, 0, fieldQuadCenter, gFalse, gTrue); + } + } + break; + } +} + +void AnnotWidget::drawFormFieldText(GfxResources *resources, GooString *da) { + VariableTextQuadding quadding; + GooString *contents; + FormFieldText *fieldText = static_cast<FormFieldText *>(field); + + contents = fieldText->getContent(); + if (contents) { + quadding = field->hasTextQuadding() ? field->getTextQuadding() : form->getTextQuadding(); + + int comb = 0; + if (fieldText->isComb()) + comb = fieldText->getMaxLen(); + + drawText(contents, da, resources, + fieldText->isMultiline(), comb, quadding, gTrue, gFalse, fieldText->isPassword()); + } +} + +void AnnotWidget::drawFormFieldChoice(GfxResources *resources, GooString *da) { + GooString *selected; + VariableTextQuadding quadding; + FormFieldChoice *fieldChoice = static_cast<FormFieldChoice *>(field); + + quadding = field->hasTextQuadding() ? field->getTextQuadding() : form->getTextQuadding(); + + if (fieldChoice->isCombo()) { + selected = fieldChoice->getSelectedChoice(); + if (selected) { + drawText(selected, da, resources, gFalse, 0, quadding, gTrue, gFalse); + //~ Acrobat draws a popup icon on the right side + } + // list box + } else { + drawListBox(fieldChoice, da, resources, quadding); + } +} + +void AnnotWidget::generateFieldAppearance() { + Object appearDict, obj1, obj2; + GfxResources *resources; + MemStream *appearStream; + GooString *da; + + appearBuf = new GooString (); + + // draw the background + if (appearCharacs) { + AnnotColor *aColor = appearCharacs->getBackColor(); + if (aColor) { + setColor(aColor, gTrue); + appearBuf->appendf("0 0 {0:.2f} {1:.2f} re f\n", + rect->x2 - rect->x1, rect->y2 - rect->y1); + } + } + + // draw the border + if (appearCharacs && border && border->getWidth() > 0) + drawBorder(); + + da = field->getDefaultAppearance(); + if (!da) + da = form->getDefaultAppearance(); + + resources = form->getDefaultResources(); + + // draw the field contents + switch (field->getType()) { + case formButton: + drawFormFieldButton(resources, da); + break; + case formText: + drawFormFieldText(resources, da); + break; + case formChoice: + drawFormFieldChoice(resources, da); + break; + case formSignature: + //~unimp + break; + case formUndef: + default: + error(-1, "Unknown field type"); + } + + // build the appearance stream dictionary + appearDict.initDict(xref); + appearDict.dictAdd(copyString("Length"), + obj1.initInt(appearBuf->getLength())); + appearDict.dictAdd(copyString("Subtype"), obj1.initName("Form")); + obj1.initArray(xref); + obj1.arrayAdd(obj2.initReal(0)); + obj1.arrayAdd(obj2.initReal(0)); + obj1.arrayAdd(obj2.initReal(rect->x2 - rect->x1)); + obj1.arrayAdd(obj2.initReal(rect->y2 - rect->y1)); + appearDict.dictAdd(copyString("BBox"), &obj1); + + // set the resource dictionary + Object *resDict = form->getDefaultResourcesObj(); + if (resDict->isDict()) { + appearDict.dictAdd(copyString("Resources"), resDict->copy(&obj1)); + } + + // build the appearance stream + appearStream = new MemStream(strdup(appearBuf->getCString()), 0, + appearBuf->getLength(), &appearDict); + appearance.free(); + appearance.initStream(appearStream); + delete appearBuf; + + appearStream->setNeedFree(gTrue); +} + + +void AnnotWidget::draw(Gfx *gfx, GBool printing) { + Object obj; + + if (!isVisible (printing)) + return; + + addDingbatsResource = gFalse; + + // Only construct the appearance stream when + // - annot doesn't have an AP or + // - it's a field containing text (text and choices) and + // - NeedAppearances is true or + // - widget has been modified or + if (field) { + if (appearance.isNull() || (form && form->getNeedAppearances()) || + ((field->getType() == formText || field->getType() == formChoice) && + field->isModified())) + generateFieldAppearance(); + } + + // draw the appearance stream + appearance.fetch(xref, &obj); + if (addDingbatsResource) { + // We are forcing ZaDb but the font does not exist + // so create a fake one + Object baseFontObj, subtypeObj; + baseFontObj.initName("ZapfDingbats"); + subtypeObj.initName("Type1"); + + Object fontDictObj; + Dict *fontDict = new Dict(xref); + fontDict->decRef(); + fontDict->add(copyString("BaseFont"), &baseFontObj); + fontDict->add(copyString("Subtype"), &subtypeObj); + fontDictObj.initDict(fontDict); + + Object fontsDictObj; + Dict *fontsDict = new Dict(xref); + fontsDict->decRef(); + fontsDict->add(copyString("ZaDb"), &fontDictObj); + fontsDictObj.initDict(fontsDict); + + Dict *dict = new Dict(xref); + dict->add(copyString("Font"), &fontsDictObj); + gfx->pushResources(dict); + delete dict; + } + gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color, + rect->x1, rect->y1, rect->x2, rect->y2); + if (addDingbatsResource) { + gfx->popResources(); + } + obj.free(); +} + + +//------------------------------------------------------------------------ +// AnnotMovie +//------------------------------------------------------------------------ +AnnotMovie::AnnotMovie(XRef *xrefA, PDFRectangle *rect, Movie *movieA, Catalog *catalog) : + Annot(xrefA, rect, catalog) { + Object obj1; + + type = typeMovie; + annotObj.dictSet ("Subtype", obj1.initName ("Movie")); + + movie = movieA->copy(); + // TODO: create movie dict from movieA + + initialize(xrefA, catalog, annotObj.getDict()); +} + +AnnotMovie::AnnotMovie(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + Annot(xrefA, dict, catalog, obj) { + type = typeMovie; + initialize(xrefA, catalog, dict); +} + +AnnotMovie::~AnnotMovie() { + if (title) + delete title; + delete movie; +} + +void AnnotMovie::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { + Object obj1; + + if (dict->lookup("T", &obj1)->isString()) { + title = obj1.getString()->copy(); + } else { + title = NULL; + } + obj1.free(); + + Object movieDict; + if (dict->lookup("Movie", &movieDict)->isDict()) { + Object obj2; + dict->lookup("A", &obj2); + if (obj2.isDict()) + movie = new Movie (&movieDict, &obj2); + else + movie = new Movie (&movieDict); + if (!movie->isOk()) { + delete movie; + movie = NULL; + ok = gFalse; + } + obj2.free(); + } else { + error(-1, "Bad Annot Movie"); + movie = NULL; + ok = gFalse; + } + movieDict.free(); +} + +void AnnotMovie::draw(Gfx *gfx, GBool printing) { + Object obj; + + if (!isVisible (printing)) + return; + + if (appearance.isNull() && movie->getShowPoster()) { + int width, height; + Object poster; + movie->getPoster(&poster); + movie->getAspect(&width, &height); + + if (width != -1 && height != -1 && !poster.isNone()) { + MemStream *mStream; + + appearBuf = new GooString (); + appearBuf->append ("q\n"); + appearBuf->appendf ("{0:d} 0 0 {1:d} 0 0 cm\n", width, height); + appearBuf->append ("/MImg Do\n"); + appearBuf->append ("Q\n"); + + Object imgDict; + imgDict.initDict(xref); + imgDict.dictSet ("MImg", &poster); + + Object resDict; + resDict.initDict(xref); + resDict.dictSet ("XObject", &imgDict); + + Object formDict, obj1, obj2; + formDict.initDict(xref); + formDict.dictSet("Length", obj1.initInt(appearBuf->getLength())); + formDict.dictSet("Subtype", obj1.initName("Form")); + formDict.dictSet("Name", obj1.initName("FRM")); + obj1.initArray(xref); + obj1.arrayAdd(obj2.initInt(0)); + obj1.arrayAdd(obj2.initInt(0)); + obj1.arrayAdd(obj2.initInt(width)); + obj1.arrayAdd(obj2.initInt(height)); + formDict.dictSet("BBox", &obj1); + obj1.initArray(xref); + obj1.arrayAdd(obj2.initInt(1)); + obj1.arrayAdd(obj2.initInt(0)); + obj1.arrayAdd(obj2.initInt(0)); + obj1.arrayAdd(obj2.initInt(1)); + obj1.arrayAdd(obj2.initInt(-width / 2)); + obj1.arrayAdd(obj2.initInt(-height / 2)); + formDict.dictSet("Matrix", &obj1); + formDict.dictSet("Resources", &resDict); + + Object aStream; + mStream = new MemStream(copyString(appearBuf->getCString()), 0, + appearBuf->getLength(), &formDict); + mStream->setNeedFree(gTrue); + aStream.initStream(mStream); + delete appearBuf; + + Object objDict; + objDict.initDict(xref); + objDict.dictSet ("FRM", &aStream); + + resDict.initDict(xref); + resDict.dictSet ("XObject", &objDict); + + appearBuf = new GooString (); + appearBuf->append ("q\n"); + appearBuf->appendf ("0 0 {0:d} {1:d} re W n\n", width, height); + appearBuf->append ("q\n"); + appearBuf->appendf ("0 0 {0:d} {1:d} re W n\n", width, height); + appearBuf->appendf ("1 0 0 1 {0:d} {1:d} cm\n", width / 2, height / 2); + appearBuf->append ("/FRM Do\n"); + appearBuf->append ("Q\n"); + appearBuf->append ("Q\n"); + + double bbox[4]; + bbox[0] = bbox[1] = 0; + bbox[2] = width; + bbox[3] = height; + createForm(bbox, gFalse, &resDict, &appearance); + delete appearBuf; + } + poster.free(); + } + + // draw the appearance stream + appearance.fetch(xref, &obj); + gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color, + rect->x1, rect->y1, rect->x2, rect->y2); + obj.free(); +} + +//------------------------------------------------------------------------ +// AnnotScreen +//------------------------------------------------------------------------ +AnnotScreen::AnnotScreen(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : + Annot(xrefA, rect, catalog) { + Object obj1; + + type = typeScreen; + + annotObj.dictSet ("Subtype", obj1.initName ("Screen")); + initialize(xrefA, catalog, annotObj.getDict()); +} + +AnnotScreen::AnnotScreen(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + Annot(xrefA, dict, catalog, obj) { + type = typeScreen; + initialize(xrefA, catalog, dict); +} + +AnnotScreen::~AnnotScreen() { + if (title) + delete title; + if (appearCharacs) + delete appearCharacs; + if (action) + delete action; + + additionAction.free(); +} + +void AnnotScreen::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { + Object obj1; + + title = NULL; + if (dict->lookup("T", &obj1)->isString()) { + title = obj1.getString()->copy(); + } + obj1.free(); + + action = NULL; + if (dict->lookup("A", &obj1)->isDict()) { + action = LinkAction::parseAction(&obj1, catalog->getBaseURI()); + if (action->getKind() == actionRendition && page == 0) { + error (-1, "Invalid Rendition action: associated screen annotation without P"); + delete action; + action = NULL; + ok = gFalse; + } + } + obj1.free(); + + dict->lookup("AA", &additionAction); + + appearCharacs = NULL; + if(dict->lookup("MK", &obj1)->isDict()) { + appearCharacs = new AnnotAppearanceCharacs(obj1.getDict()); + } + obj1.free(); + +} + +//------------------------------------------------------------------------ +// AnnotStamp +//------------------------------------------------------------------------ +AnnotStamp::AnnotStamp(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : + AnnotMarkup(xrefA, rect, catalog) { + Object obj1; + + type = typeStamp; + annotObj.dictSet ("Subtype", obj1.initName ("Stamp")); + initialize(xrefA, catalog, annotObj.getDict()); +} + +AnnotStamp::AnnotStamp(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + AnnotMarkup(xrefA, dict, catalog, obj) { + type = typeStamp; + initialize(xrefA, catalog, dict); +} + +AnnotStamp::~AnnotStamp() { + delete icon; +} + +void AnnotStamp::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { + Object obj1; + + if (dict->lookup("Name", &obj1)->isName()) { + icon = new GooString(obj1.getName()); + } else { + icon = new GooString("Draft"); + } + obj1.free(); + +} + +//------------------------------------------------------------------------ +// AnnotGeometry +//------------------------------------------------------------------------ +AnnotGeometry::AnnotGeometry(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType, Catalog *catalog) : + AnnotMarkup(xrefA, rect, catalog) { + Object obj1; + + switch (subType) { + case typeSquare: + annotObj.dictSet ("Subtype", obj1.initName ("Square")); + break; + case typeCircle: + annotObj.dictSet ("Subtype", obj1.initName ("Circle")); + break; + default: + assert (0 && "Invalid subtype for AnnotGeometry\n"); + } + + initialize(xrefA, catalog, annotObj.getDict()); +} + +AnnotGeometry::AnnotGeometry(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + AnnotMarkup(xrefA, dict, catalog, obj) { + // the real type will be read in initialize() + type = typeSquare; + initialize(xrefA, catalog, dict); +} + +AnnotGeometry::~AnnotGeometry() { + delete interiorColor; + delete borderEffect; + delete geometryRect; +} + +void AnnotGeometry::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { + Object obj1; + + if (dict->lookup("Subtype", &obj1)->isName()) { + GooString typeName(obj1.getName()); + if (!typeName.cmp("Square")) { + type = typeSquare; + } else if (!typeName.cmp("Circle")) { + type = typeCircle; + } + } + obj1.free(); + + if (dict->lookup("IC", &obj1)->isArray()) { + interiorColor = new AnnotColor(obj1.getArray()); + } else { + interiorColor = NULL; + } + obj1.free(); + + if (dict->lookup("BE", &obj1)->isDict()) { + borderEffect = new AnnotBorderEffect(obj1.getDict()); + } else { + borderEffect = NULL; + } + obj1.free(); + + geometryRect = NULL; + if (dict->lookup("RD", &obj1)->isArray()) { + geometryRect = parseDiffRectangle(obj1.getArray(), rect); + } + obj1.free(); + +} + +void AnnotGeometry::draw(Gfx *gfx, GBool printing) { + Object obj; + double ca = 1; + + if (!isVisible (printing)) + return; + + if (appearance.isNull()) { + ca = opacity; + + appearBuf = new GooString (); + appearBuf->append ("q\n"); + if (color) + setColor(color, gFalse); + + if (border) { + int i, dashLength; + double *dash; + double borderWidth = border->getWidth(); + + switch (border->getStyle()) { + case AnnotBorder::borderDashed: + appearBuf->append("["); + dashLength = border->getDashLength(); + dash = border->getDash(); + for (i = 0; i < dashLength; ++i) + appearBuf->appendf(" {0:.2f}", dash[i]); + appearBuf->append(" ] 0 d\n"); + break; + default: + appearBuf->append("[] 0 d\n"); + break; + } + appearBuf->appendf("{0:.2f} w\n", borderWidth); + + if (interiorColor) + setColor(interiorColor, gTrue); + + if (type == typeSquare) { + appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} re\n", + borderWidth / 2.0, borderWidth / 2.0, + (rect->x2 - rect->x1) - borderWidth, + (rect->y2 - rect->y1) - borderWidth); + } else { + double width, height; + double b; + double x1, y1, x2, y2, x3, y3; + + width = rect->x2 - rect->x1; + height = rect->y2 - rect->y1; + b = borderWidth / 2.0; + + x1 = b; + y1 = height / 2.0; + appearBuf->appendf ("{0:.2f} {1:.2f} m\n", x1, y1); + + y1 += height / 4.0; + x2 = width / 4.0; + y2 = height - b; + x3 = width / 2.0; + y3 = y2; + appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", + x1, y1, x2, y2, x3, y3); + x2 = width - b; + y2 = y1; + x1 = x3 + (width / 4.0); + y1 = y3; + x3 = x2; + y3 = height / 2.0; + appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", + x1, y1, x2, y2, x3, y3); + + x2 = x1; + y2 = b; + x1 = x3; + y1 = height / 4.0; + x3 = width / 2.0; + y3 = b; + appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", + x1, y1, x2, y2, x3, y3); + + x2 = b; + y2 = y1; + x1 = width / 4.0; + y1 = b; + x3 = b; + y3 = height / 2.0; + appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n", + x1, y1, x2, y2, x3, y3); + + } + + if (interiorColor) + appearBuf->append ("b\n"); + else + appearBuf->append ("S\n"); + } + appearBuf->append ("Q\n"); + + double bbox[4]; + bbox[0] = bbox[1] = 0; + bbox[2] = rect->x2 - rect->x1; + bbox[3] = rect->y2 - rect->y1; + if (ca == 1) { + createForm(bbox, gFalse, NULL, &appearance); + } else { + Object aStream; + + createForm(bbox, gTrue, NULL, &aStream); + delete appearBuf; + + Object resDict; + appearBuf = new GooString ("/GS0 gs\n/Fm0 Do"); + createResourcesDict("Fm0", &aStream, "GS0", ca, NULL, &resDict); + createForm(bbox, gFalse, &resDict, &appearance); + } + delete appearBuf; + } + + // draw the appearance stream + appearance.fetch(xref, &obj); + gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color, + rect->x1, rect->y1, rect->x2, rect->y2); + obj.free(); +} + +//------------------------------------------------------------------------ +// AnnotPolygon +//------------------------------------------------------------------------ +AnnotPolygon::AnnotPolygon(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType, + AnnotPath *path, Catalog *catalog) : + AnnotMarkup(xrefA, rect, catalog) { + Object obj1; + + switch (subType) { + case typePolygon: + annotObj.dictSet ("Subtype", obj1.initName ("Polygon")); + break; + case typePolyLine: + annotObj.dictSet ("Subtype", obj1.initName ("PolyLine")); + break; + default: + assert (0 && "Invalid subtype for AnnotGeometry\n"); + } + + Object obj2; + obj2.initArray (xrefA); + + for (int i = 0; i < path->getCoordsLength(); ++i) { + Object obj3; + + obj2.arrayAdd (obj3.initReal (path->getX(i))); + obj2.arrayAdd (obj3.initReal (path->getY(i))); + } + + annotObj.dictSet ("Vertices", &obj2); + + initialize(xrefA, catalog, annotObj.getDict()); +} + +AnnotPolygon::AnnotPolygon(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + AnnotMarkup(xrefA, dict, catalog, obj) { + // the real type will be read in initialize() + type = typePolygon; + initialize(xrefA, catalog, dict); +} + +AnnotPolygon::~AnnotPolygon() { + delete vertices; + + if (interiorColor) + delete interiorColor; + + if (borderEffect) + delete borderEffect; +} + +void AnnotPolygon::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { + Object obj1; + + if (dict->lookup("Subtype", &obj1)->isName()) { + GooString typeName(obj1.getName()); + if (!typeName.cmp("Polygon")) { + type = typePolygon; + } else if (!typeName.cmp("PolyLine")) { + type = typePolyLine; + } + } + obj1.free(); + + if (dict->lookup("Vertices", &obj1)->isArray()) { + vertices = new AnnotPath(obj1.getArray()); + } else { + vertices = new AnnotPath(); + error(-1, "Bad Annot Polygon Vertices"); + ok = gFalse; + } + obj1.free(); + + if (dict->lookup("LE", &obj1)->isArray() && obj1.arrayGetLength() == 2) { + Object obj2; + + if(obj1.arrayGet(0, &obj2)->isString()) + startStyle = parseAnnotLineEndingStyle(obj2.getString()); + else + startStyle = annotLineEndingNone; + obj2.free(); + + if(obj1.arrayGet(1, &obj2)->isString()) + endStyle = parseAnnotLineEndingStyle(obj2.getString()); + else + endStyle = annotLineEndingNone; + obj2.free(); + + } else { + startStyle = endStyle = annotLineEndingNone; + } + obj1.free(); + + if (dict->lookup("IC", &obj1)->isArray()) { + interiorColor = new AnnotColor(obj1.getArray()); + } else { + interiorColor = NULL; + } + obj1.free(); + + if (dict->lookup("BE", &obj1)->isDict()) { + borderEffect = new AnnotBorderEffect(obj1.getDict()); + } else { + borderEffect = NULL; + } + obj1.free(); + + if (dict->lookup("IT", &obj1)->isName()) { + const char *intentName = obj1.getName(); + + if(!strcmp(intentName, "PolygonCloud")) { + intent = polygonCloud; + } else if(!strcmp(intentName, "PolyLineDimension")) { + intent = polylineDimension; + } else { + intent = polygonDimension; + } + } else { + intent = polygonCloud; + } + obj1.free(); +} + +//------------------------------------------------------------------------ +// AnnotCaret +//------------------------------------------------------------------------ +AnnotCaret::AnnotCaret(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : + AnnotMarkup(xrefA, rect, catalog) { + Object obj1; + + type = typeCaret; + + annotObj.dictSet ("Subtype", obj1.initName ("Caret")); + initialize(xrefA, catalog, annotObj.getDict()); +} + +AnnotCaret::AnnotCaret(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + AnnotMarkup(xrefA, dict, catalog, obj) { + type = typeCaret; + initialize(xrefA, catalog, dict); +} + +AnnotCaret::~AnnotCaret() { + delete caretRect; +} + +void AnnotCaret::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { + Object obj1; + + symbol = symbolNone; + if (dict->lookup("Sy", &obj1)->isName()) { + GooString typeName(obj1.getName()); + if (!typeName.cmp("P")) { + symbol = symbolP; + } else if (!typeName.cmp("None")) { + symbol = symbolNone; + } + } + obj1.free(); + + if (dict->lookup("RD", &obj1)->isArray()) { + caretRect = parseDiffRectangle(obj1.getArray(), rect); + } else { + caretRect = NULL; + } + obj1.free(); + +} + +//------------------------------------------------------------------------ +// AnnotInk +//------------------------------------------------------------------------ +AnnotInk::AnnotInk(XRef *xrefA, PDFRectangle *rect, AnnotPath **paths, int n_paths, Catalog *catalog) : + AnnotMarkup(xrefA, rect, catalog) { + Object obj1; + + type = typeInk; + + annotObj.dictSet ("Subtype", obj1.initName ("Ink")); + + Object obj2; + obj2.initArray (xrefA); + + for (int i = 0; i < n_paths; ++i) { + AnnotPath *path = paths[i]; + Object obj3; + obj3.initArray (xrefA); + + for (int j = 0; j < path->getCoordsLength(); ++j) { + Object obj4; + + obj3.arrayAdd (obj4.initReal (path->getX(j))); + obj3.arrayAdd (obj4.initReal (path->getY(j))); + } + + obj2.arrayAdd (&obj3); + } + + annotObj.dictSet ("InkList", &obj2); + + initialize(xrefA, catalog, annotObj.getDict()); +} + +AnnotInk::AnnotInk(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + AnnotMarkup(xrefA, dict, catalog, obj) { + type = typeInk; + initialize(xrefA, catalog, dict); +} + +AnnotInk::~AnnotInk() { + if (inkList) { + for (int i = 0; i < inkListLength; ++i) + delete inkList[i]; + gfree(inkList); + } +} + +void AnnotInk::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { + Object obj1; + + if (dict->lookup("InkList", &obj1)->isArray()) { + Array *array = obj1.getArray(); + inkListLength = array->getLength(); + inkList = (AnnotPath **) gmallocn ((inkListLength), sizeof(AnnotPath *)); + memset(inkList, 0, inkListLength * sizeof(AnnotPath *)); + for (int i = 0; i < inkListLength; i++) { + Object obj2; + if (array->get(i, &obj2)->isArray()) + inkList[i] = new AnnotPath(obj2.getArray()); + obj2.free(); + } + } else { + inkListLength = 0; + inkList = NULL; + error(-1, "Bad Annot Ink List"); + ok = gFalse; + } + obj1.free(); +} + +//------------------------------------------------------------------------ +// AnnotFileAttachment +//------------------------------------------------------------------------ +AnnotFileAttachment::AnnotFileAttachment(XRef *xrefA, PDFRectangle *rect, GooString *filename, Catalog *catalog) : + AnnotMarkup(xrefA, rect, catalog) { + Object obj1; + + type = typeFileAttachment; + + annotObj.dictSet ("Subtype", obj1.initName ("FileAttachment")); + + Object obj2; + obj2.initString(filename->copy()); + annotObj.dictSet ("FS", &obj2); + + initialize(xrefA, catalog, annotObj.getDict()); +} + +AnnotFileAttachment::AnnotFileAttachment(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + AnnotMarkup(xrefA, dict, catalog, obj) { + type = typeFileAttachment; + initialize(xrefA, catalog, dict); +} + +AnnotFileAttachment::~AnnotFileAttachment() { + file.free(); + + if (name) + delete name; +} + +void AnnotFileAttachment::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { + Object obj1; + + if (dict->lookup("FS", &obj1)->isDict() || dict->lookup("FS", &obj1)->isString()) { + obj1.copy(&file); + } else { + error(-1, "Bad Annot File Attachment"); + ok = gFalse; + } + obj1.free(); + + if (dict->lookup("Name", &obj1)->isName()) { + name = new GooString(obj1.getName()); + } else { + name = new GooString("PushPin"); + } + obj1.free(); +} + +#define ANNOT_FILE_ATTACHMENT_AP_PUSHPIN \ + "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ + "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ + "l 1 21.523 2.477 23 4.301 23 c h\n" \ + "4.301 23 m f\n" \ + "0.533333 0.541176 0.521569 RG 2 w\n" \ + "1 J\n" \ + "1 j\n" \ + "[] 0.0 d\n" \ + "4 M 5 4 m 6 5 l S\n" \ + "2 w\n" \ + "11 14 m 9 12 l 6 12 l 13 5 l 13 8 l 15 10 l 18 11 l 20 11 l 12 19 l 12\n" \ + "17 l 11 14 l h\n" \ + "11 14 m S\n" \ + "3 w\n" \ + "6 5 m 9 8 l S\n" \ + "0.729412 0.741176 0.713725 RG 2 w\n" \ + "5 5 m 6 6 l S\n" \ + "2 w\n" \ + "11 15 m 9 13 l 6 13 l 13 6 l 13 9 l 15 11 l 18 12 l 20 12 l 12 20 l 12\n" \ + "18 l 11 15 l h\n" \ + "11 15 m S\n" \ + "3 w\n" \ + "6 6 m 9 9 l S\n" + +#define ANNOT_FILE_ATTACHMENT_AP_PAPERCLIP \ + "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ + "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ + "l 1 21.523 2.477 23 4.301 23 c h\n" \ + "4.301 23 m f\n" \ + "0.533333 0.541176 0.521569 RG 2 w\n" \ + "1 J\n" \ + "1 j\n" \ + "[] 0.0 d\n" \ + "4 M 16.645 12.035 m 12.418 7.707 l 10.902 6.559 6.402 11.203 8.09 12.562 c\n" \ + "14.133 18.578 l 14.949 19.387 16.867 19.184 17.539 18.465 c 20.551\n" \ + "15.23 l 21.191 14.66 21.336 12.887 20.426 12.102 c 13.18 4.824 l 12.18\n" \ + "3.82 6.25 2.566 4.324 4.461 c 3 6.395 3.383 11.438 4.711 12.801 c 9.648\n" \ + "17.887 l S\n" \ + "0.729412 0.741176 0.713725 RG 16.645 13.035 m 12.418 8.707 l\n" \ + "10.902 7.559 6.402 12.203 8.09 13.562 c\n" \ + "14.133 19.578 l 14.949 20.387 16.867 20.184 17.539 19.465 c 20.551\n" \ + "16.23 l 21.191 15.66 21.336 13.887 20.426 13.102 c 13.18 5.824 l 12.18\n" \ + "4.82 6.25 3.566 4.324 5.461 c 3 7.395 3.383 12.438 4.711 13.801 c 9.648\n" \ + "18.887 l S\n" + +#define ANNOT_FILE_ATTACHMENT_AP_GRAPH \ + "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ + "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ + "l 1 21.523 2.477 23 4.301 23 c h\n" \ + "4.301 23 m f\n" \ + "0.533333 0.541176 0.521569 RG 1 w\n" \ + "1 J\n" \ + "0 j\n" \ + "[] 0.0 d\n" \ + "4 M 18.5 15.5 m 18.5 13.086 l 16.086 15.5 l 18.5 15.5 l h\n" \ + "18.5 15.5 m S\n" \ + "7 7 m 10 11 l 13 9 l 18 15 l S\n" \ + "0.729412 0.741176 0.713725 RG 7 8 m 10 12 l 13 10 l 18 16 l S\n" \ + "18.5 16.5 m 18.5 14.086 l 16.086 16.5 l 18.5 16.5 l h\n" \ + "18.5 16.5 m S\n" \ + "0.533333 0.541176 0.521569 RG 2 w\n" \ + "1 j\n" \ + "3 19 m 3 3 l 21 3 l S\n" \ + "0.729412 0.741176 0.713725 RG 3 20 m 3 4 l 21 4 l S\n" + +#define ANNOT_FILE_ATTACHMENT_AP_TAG \ + "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ + "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ + "l 1 21.523 2.477 23 4.301 23 c h\n" \ + "4.301 23 m f\n" \ + "0.533333 0.541176 0.521569 RG 0.999781 w\n" \ + "1 J\n" \ + "1 j\n" \ + "[] 0.0 d\n" \ + "4 M q 1 0 0 -1 0 24 cm\n" \ + "8.492 8.707 m 8.492 9.535 7.82 10.207 6.992 10.207 c 6.164 10.207 5.492\n" \ + "9.535 5.492 8.707 c 5.492 7.879 6.164 7.207 6.992 7.207 c 7.82 7.207\n" \ + "8.492 7.879 8.492 8.707 c h\n" \ + "8.492 8.707 m S Q\n" \ + "2 w\n" \ + "20.078 11.414 m 20.891 10.602 20.785 9.293 20.078 8.586 c 14.422 2.93 l\n" \ + "13.715 2.223 12.301 2.223 11.594 2.93 c 3.816 10.707 l 3.109 11.414\n" \ + "2.402 17.781 3.816 19.195 c 5.23 20.609 11.594 19.902 12.301 19.195 c\n" \ + "20.078 11.414 l h\n" \ + "20.078 11.414 m S\n" \ + "0.729412 0.741176 0.713725 RG 20.078 12.414 m\n" \ + "20.891 11.605 20.785 10.293 20.078 9.586 c 14.422 3.93 l\n" \ + "13.715 3.223 12.301 3.223 11.594 3.93 c 3.816 11.707 l 3.109 12.414\n" \ + "2.402 18.781 3.816 20.195 c 5.23 21.609 11.594 20.902 12.301 20.195 c\n" \ + "20.078 12.414 l h\n" \ + "20.078 12.414 m S\n" \ + "0.533333 0.541176 0.521569 RG 1 w\n" \ + "0 j\n" \ + "11.949 13.184 m 16.191 8.941 l S\n" \ + "0.729412 0.741176 0.713725 RG 11.949 14.184 m 16.191 9.941 l S\n" \ + "0.533333 0.541176 0.521569 RG 14.07 6.82 m 9.828 11.062 l S\n" \ + "0.729412 0.741176 0.713725 RG 14.07 7.82 m 9.828 12.062 l S\n" \ + "0.533333 0.541176 0.521569 RG 6.93 15.141 m 8 20 14.27 20.5 16 20.5 c\n" \ + "18.094 20.504 19.5 20 19.5 18 c 19.5 16.699 20.91 16.418 22.5 16.5 c S\n" \ + "0.729412 0.741176 0.713725 RG 0.999781 w\n" \ + "1 j\n" \ + "q 1 0 0 -1 0 24 cm\n" \ + "8.492 7.707 m 8.492 8.535 7.82 9.207 6.992 9.207 c 6.164 9.207 5.492\n" \ + "8.535 5.492 7.707 c 5.492 6.879 6.164 6.207 6.992 6.207 c 7.82 6.207\n" \ + "8.492 6.879 8.492 7.707 c h\n" \ + "8.492 7.707 m S Q\n" \ + "1 w\n" \ + "0 j\n" \ + "6.93 16.141 m 8 21 14.27 21.5 16 21.5 c 18.094 21.504 19.5 21 19.5 19 c\n" \ + "19.5 17.699 20.91 17.418 22.5 17.5 c S\n" + +void AnnotFileAttachment::draw(Gfx *gfx, GBool printing) { + Object obj; + double ca = 1; + + if (!isVisible (printing)) + return; + + if (appearance.isNull()) { + ca = opacity; + + appearBuf = new GooString (); + + appearBuf->append ("q\n"); + if (color) + setColor(color, gTrue); + else + appearBuf->append ("1 1 1 rg\n"); + if (!name->cmp("PushPin")) + appearBuf->append (ANNOT_FILE_ATTACHMENT_AP_PUSHPIN); + else if (!name->cmp("Paperclip")) + appearBuf->append (ANNOT_FILE_ATTACHMENT_AP_PAPERCLIP); + else if (!name->cmp("Graph")) + appearBuf->append (ANNOT_FILE_ATTACHMENT_AP_GRAPH); + else if (!name->cmp("Tag")) + appearBuf->append (ANNOT_FILE_ATTACHMENT_AP_TAG); + appearBuf->append ("Q\n"); + + double bbox[4]; + bbox[0] = bbox[1] = 0; + bbox[2] = bbox[3] = 24; + if (ca == 1) { + createForm (bbox, gFalse, NULL, &appearance); + } else { + Object aStream; + + createForm (bbox, gTrue, NULL, &aStream); + delete appearBuf; + + Object resDict; + appearBuf = new GooString ("/GS0 gs\n/Fm0 Do"); + createResourcesDict("Fm0", &aStream, "GS0", ca, NULL, &resDict); + createForm(bbox, gFalse, &resDict, &appearance); + } + delete appearBuf; + } + + // draw the appearance stream + appearance.fetch(xref, &obj); + gfx->drawAnnot(&obj, border, color, + rect->x1, rect->y1, rect->x2, rect->y2); + obj.free(); +} + +//------------------------------------------------------------------------ +// AnnotSound +//------------------------------------------------------------------------ +AnnotSound::AnnotSound(XRef *xrefA, PDFRectangle *rect, Sound *soundA, Catalog *catalog) : + AnnotMarkup(xrefA, rect, catalog) { + Object obj1; + + type = typeSound; + + annotObj.dictSet ("Subtype", obj1.initName ("Sound")); + + Object obj2; + Stream *str = soundA->getStream(); + obj2.initStream (str); + str->incRef(); //FIXME: initStream should do this? + annotObj.dictSet ("Sound", &obj2); + + initialize(xrefA, catalog, annotObj.getDict()); +} + +AnnotSound::AnnotSound(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + AnnotMarkup(xrefA, dict, catalog, obj) { + type = typeSound; + initialize(xrefA, catalog, dict); +} + +AnnotSound::~AnnotSound() { + delete sound; + + delete name; +} + +void AnnotSound::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { + Object obj1; + + sound = Sound::parseSound(dict->lookup("Sound", &obj1)); + if (!sound) { + error(-1, "Bad Annot Sound"); + ok = gFalse; + } + obj1.free(); + + if (dict->lookup("Name", &obj1)->isName()) { + name = new GooString(obj1.getName()); + } else { + name = new GooString("Speaker"); + } + obj1.free(); +} + +#define ANNOT_SOUND_AP_SPEAKER \ + "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ + "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ + "l 1 21.523 2.477 23 4.301 23 c h\n" \ + "4.301 23 m f\n" \ + "0.533333 0.541176 0.521569 RG 2 w\n" \ + "0 J\n" \ + "1 j\n" \ + "[] 0.0 d\n" \ + "4 M 4 14 m 4.086 8.043 l 7 8 l 11 4 l 11 18 l 7 14 l 4 14 l h\n" \ + "4 14 m S\n" \ + "1 w\n" \ + "1 J\n" \ + "0 j\n" \ + "13.699 15.398 m 14.699 13.398 14.699 9.398 13.699 7.398 c S\n" \ + "18.199 19.398 m 21.199 17.398 21.199 5.398 18.199 3.398 c S\n" \ + "16 17.398 m 18 16.398 18 7.398 16 5.398 c S\n" \ + "0.729412 0.741176 0.713725 RG 2 w\n" \ + "0 J\n" \ + "1 j\n" \ + "4 15 m 4.086 9.043 l 7 9 l 11 5 l 11 19 l 7 15 l 4 15 l h\n" \ + "4 15 m S\n" \ + "1 w\n" \ + "1 J\n" \ + "0 j\n" \ + "13.699 16 m 14.699 14 14.699 10 13.699 8 c S\n" \ + "18.199 20 m 21.199 18 21.199 6 18.199 4 c S\n" \ + "16 18 m 18 17 18 8 16 6 c S\n" + +#define ANNOT_SOUND_AP_MIC \ + "4.301 23 m 19.699 23 l 21.523 23 23 21.523 23 19.699 c 23 4.301 l 23\n" \ + "2.477 21.523 1 19.699 1 c 4.301 1 l 2.477 1 1 2.477 1 4.301 c 1 19.699\n" \ + "l 1 21.523 2.477 23 4.301 23 c h\n" \ + "4.301 23 m f\n" \ + "0.533333 0.541176 0.521569 RG 2 w\n" \ + "1 J\n" \ + "0 j\n" \ + "[] 0.0 d\n" \ + "4 M 12 20 m 12 20 l 13.656 20 15 18.656 15 17 c 15 13 l 15 11.344 13.656 10\n" \ + "12 10 c 12 10 l 10.344 10 9 11.344 9 13 c 9 17 l 9 18.656 10.344 20 12\n" \ + "20 c h\n" \ + "12 20 m S\n" \ + "1 w\n" \ + "17.5 14.5 m 17.5 11.973 l 17.5 8.941 15.047 6.5 12 6.5 c 8.953 6.5 6.5\n" \ + "8.941 6.5 11.973 c 6.5 14.5 l S\n" \ + "2 w\n" \ + "0 J\n" \ + "12 6.52 m 12 3 l S\n" \ + "1 J\n" \ + "8 3 m 16 3 l S\n" \ + "0.729412 0.741176 0.713725 RG 12 21 m 12 21 l 13.656 21 15 19.656 15 18 c\n" \ + "15 14 l 15 12.344 13.656 11 12 11 c 12 11 l 10.344 11 9 12.344 9 14 c\n" \ + "9 18 l 9 19.656 10.344 21 12 21 c h\n" \ + "12 21 m S\n" \ + "1 w\n" \ + "17.5 15.5 m 17.5 12.973 l 17.5 9.941 15.047 7.5 12 7.5 c 8.953 7.5 6.5\n" \ + "9.941 6.5 12.973 c 6.5 15.5 l S\n" \ + "2 w\n" \ + "0 J\n" \ + "12 7.52 m 12 4 l S\n" \ + "1 J\n" \ + "8 4 m 16 4 l S\n" + +void AnnotSound::draw(Gfx *gfx, GBool printing) { + Object obj; + double ca = 1; + + if (!isVisible (printing)) + return; + + if (appearance.isNull()) { + ca = opacity; + + appearBuf = new GooString (); + + appearBuf->append ("q\n"); + if (color) + setColor(color, gTrue); + else + appearBuf->append ("1 1 1 rg\n"); + if (!name->cmp("Speaker")) + appearBuf->append (ANNOT_SOUND_AP_SPEAKER); + else if (!name->cmp("Mic")) + appearBuf->append (ANNOT_SOUND_AP_MIC); + appearBuf->append ("Q\n"); + + double bbox[4]; + bbox[0] = bbox[1] = 0; + bbox[2] = bbox[3] = 24; + if (ca == 1) { + createForm(bbox, gFalse, NULL, &appearance); + } else { + Object aStream, resDict; + + createForm(bbox, gTrue, NULL, &aStream); + delete appearBuf; + + appearBuf = new GooString ("/GS0 gs\n/Fm0 Do"); + createResourcesDict("Fm0", &aStream, "GS0", ca, NULL, &resDict); + createForm(bbox, gFalse, &resDict, &appearance); + } + delete appearBuf; + } + + // draw the appearance stream + appearance.fetch(xref, &obj); + gfx->drawAnnot(&obj, border, color, + rect->x1, rect->y1, rect->x2, rect->y2); + obj.free(); +} + +//------------------------------------------------------------------------ +// Annot3D +//------------------------------------------------------------------------ +Annot3D::Annot3D(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) : + Annot(xrefA, rect, catalog) { + Object obj1; + + type = type3D; + + annotObj.dictSet ("Subtype", obj1.initName ("3D")); + + initialize(xrefA, catalog, annotObj.getDict()); +} + +Annot3D::Annot3D(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) : + Annot(xrefA, dict, catalog, obj) { + type = type3D; + initialize(xrefA, catalog, dict); +} + +Annot3D::~Annot3D() { + if (activation) + delete activation; +} + +void Annot3D::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) { + Object obj1; + + if (dict->lookup("3DA", &obj1)->isDict()) { + activation = new Activation(obj1.getDict()); + } else { + activation = NULL; + } + obj1.free(); +} + +Annot3D::Activation::Activation(Dict *dict) { + Object obj1; + + if (dict->lookup("A", &obj1)->isName()) { + const char *name = obj1.getName(); + + if(!strcmp(name, "PO")) { + aTrigger = aTriggerPageOpened; + } else if(!strcmp(name, "PV")) { + aTrigger = aTriggerPageVisible; + } else if(!strcmp(name, "XA")) { + aTrigger = aTriggerUserAction; + } else { + aTrigger = aTriggerUnknown; + } + } else { + aTrigger = aTriggerUnknown; + } + obj1.free(); + + if(dict->lookup("AIS", &obj1)->isName()) { + const char *name = obj1.getName(); + + if(!strcmp(name, "I")) { + aState = aStateEnabled; + } else if(!strcmp(name, "L")) { + aState = aStateDisabled; + } else { + aState = aStateUnknown; + } + } else { + aState = aStateUnknown; + } + obj1.free(); + + if(dict->lookup("D", &obj1)->isName()) { + const char *name = obj1.getName(); + + if(!strcmp(name, "PC")) { + dTrigger = dTriggerPageClosed; + } else if(!strcmp(name, "PI")) { + dTrigger = dTriggerPageInvisible; + } else if(!strcmp(name, "XD")) { + dTrigger = dTriggerUserAction; + } else { + dTrigger = dTriggerUnknown; + } + } else { + dTrigger = dTriggerUnknown; + } + obj1.free(); + + if(dict->lookup("DIS", &obj1)->isName()) { + const char *name = obj1.getName(); + + if(!strcmp(name, "U")) { + dState = dStateUninstantiaded; + } else if(!strcmp(name, "I")) { + dState = dStateInstantiated; + } else if(!strcmp(name, "L")) { + dState = dStateLive; + } else { + dState = dStateUnknown; + } + } else { + dState = dStateUnknown; + } + obj1.free(); + + if (dict->lookup("TB", &obj1)->isBool()) { + displayToolbar = obj1.getBool(); + } else { + displayToolbar = gTrue; + } + obj1.free(); + + if (dict->lookup("NP", &obj1)->isBool()) { + displayNavigation = obj1.getBool(); + } else { + displayNavigation = gFalse; + } + obj1.free(); +} + +//------------------------------------------------------------------------ +// Annots +//------------------------------------------------------------------------ + +Annots::Annots(XRef *xref, Catalog *catalog, Object *annotsObj) { + Annot *annot; + Object obj1; + int i; + + annots = NULL; + size = 0; + nAnnots = 0; + + if (annotsObj->isArray()) { + for (i = 0; i < annotsObj->arrayGetLength(); ++i) { + //get the Ref to this annot and pass it to Annot constructor + //this way, it'll be possible for the annot to retrieve the corresponding + //form widget + Object obj2; + if (annotsObj->arrayGet(i, &obj1)->isDict()) { + annotsObj->arrayGetNF(i, &obj2); + annot = createAnnot (xref, obj1.getDict(), catalog, &obj2); + if (annot) { + if (annot->isOk()) { + appendAnnot(annot); + } + annot->decRefCnt(); + } + } + obj2.free(); + obj1.free(); + } + } +} + +void Annots::appendAnnot(Annot *annot) { + if (annot && annot->isOk()) { + if (nAnnots >= size) { + size += 16; + annots = (Annot **)greallocn(annots, size, sizeof(Annot *)); + } + annots[nAnnots++] = annot; + annot->incRefCnt(); + } +} + +Annot *Annots::createAnnot(XRef *xref, Dict* dict, Catalog *catalog, Object *obj) { + Annot *annot = NULL; + Object obj1; + + if (dict->lookup("Subtype", &obj1)->isName()) { + const char *typeName = obj1.getName(); + + if (!strcmp(typeName, "Text")) { + annot = new AnnotText(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "Link")) { + annot = new AnnotLink(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "FreeText")) { + annot = new AnnotFreeText(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "Line")) { + annot = new AnnotLine(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "Square")) { + annot = new AnnotGeometry(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "Circle")) { + annot = new AnnotGeometry(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "Polygon")) { + annot = new AnnotPolygon(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "PolyLine")) { + annot = new AnnotPolygon(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "Highlight")) { + annot = new AnnotTextMarkup(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "Underline")) { + annot = new AnnotTextMarkup(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "Squiggly")) { + annot = new AnnotTextMarkup(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "StrikeOut")) { + annot = new AnnotTextMarkup(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "Stamp")) { + annot = new AnnotStamp(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "Caret")) { + annot = new AnnotCaret(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "Ink")) { + annot = new AnnotInk(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "FileAttachment")) { + annot = new AnnotFileAttachment(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "Sound")) { + annot = new AnnotSound(xref, dict, catalog, obj); + } else if(!strcmp(typeName, "Movie")) { + annot = new AnnotMovie(xref, dict, catalog, obj); + } else if(!strcmp(typeName, "Widget")) { + // Find the annot in forms + if (obj->isRef()) { + Form *form = catalog->getForm(); + if (form) { + FormWidget *widget = form->findWidgetByRef(obj->getRef()); + if (widget) { + annot = widget->getWidgetAnnotation(); + annot->incRefCnt(); + } + } + } + if (!annot) + annot = new AnnotWidget(xref, dict, catalog, obj); + } else if(!strcmp(typeName, "Screen")) { + annot = new AnnotScreen(xref, dict, catalog, obj); + } else if(!strcmp(typeName, "PrinterMark")) { + annot = new Annot(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "TrapNet")) { + annot = new Annot(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "Watermark")) { + annot = new Annot(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "3D")) { + annot = new Annot3D(xref, dict, catalog, obj); + } else if (!strcmp(typeName, "Popup")) { + /* Popup annots are already handled by markup annots + * Here we only care about popup annots without a + * markup annotation associated + */ + Object obj2; + + if (dict->lookup("Parent", &obj2)->isNull()) + annot = new AnnotPopup(xref, dict, catalog, obj); + else + annot = NULL; + + obj2.free(); + } else { + annot = new Annot(xref, dict, catalog, obj); + } + } + obj1.free(); + + return annot; +} + +Annot *Annots::findAnnot(Ref *ref) { + int i; + + for (i = 0; i < nAnnots; ++i) { + if (annots[i]->match(ref)) { + return annots[i]; + } + } + return NULL; +} + + +Annots::~Annots() { + int i; + + for (i = 0; i < nAnnots; ++i) { + annots[i]->decRefCnt(); + } + gfree(annots); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Annot.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Annot.h new file mode 100644 index 00000000000..59d610ba40b --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Annot.h @@ -0,0 +1,1267 @@ +//======================================================================== +// +// Annot.h +// +// Copyright 2000-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006 Scott Turner <scotty1024@mac.com> +// Copyright (C) 2007, 2008 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2007-2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2007, 2008 Iñigo Martínez <inigomartinez@gmail.com> +// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> +// Copyright (C) 2008 Hugo Mercier <hmercier31@gmail.com> +// Copyright (C) 2008 Pino Toscano <pino@kde.org> +// Copyright (C) 2008 Tomas Are Haavet <tomasare@gmail.com> +// Copyright (C) 2009-2011 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef ANNOT_H +#define ANNOT_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "Object.h" + +class XRef; +class Gfx; +class Catalog; +class CharCodeToUnicode; +class GfxFont; +class GfxResources; +class Form; +class FormWidget; +class FormField; +class FormFieldChoice; +class PDFRectangle; +class Movie; +class LinkAction; +class OCGs; +class Sound; + +enum AnnotLineEndingStyle { + annotLineEndingSquare, // Square + annotLineEndingCircle, // Circle + annotLineEndingDiamond, // Diamond + annotLineEndingOpenArrow, // OpenArrow + annotLineEndingClosedArrow, // ClosedArrow + annotLineEndingNone, // None + annotLineEndingButt, // Butt + annotLineEndingROpenArrow, // ROpenArrow + annotLineEndingRClosedArrow, // RClosedArrow + annotLineEndingSlash // Slash +}; + +enum AnnotExternalDataType { + annotExternalDataMarkupUnknown, + annotExternalDataMarkup3D // Markup3D +}; + +//------------------------------------------------------------------------ +// AnnotCoord +//------------------------------------------------------------------------ + +class AnnotCoord { +public: + + AnnotCoord() : x(0), y(0) { } + AnnotCoord(double _x, double _y) : x(_x), y(_y) { } + + double getX() const { return x; } + double getY() const { return y; } + +protected: + + double x, y; +}; + +//------------------------------------------------------------------------ +// AnnotPath +//------------------------------------------------------------------------ + +class AnnotPath { +public: + AnnotPath(); + AnnotPath(Array *array); + AnnotPath(AnnotCoord **coords, int coordLength); + ~AnnotPath(); + + double getX(int coord) const; + double getY(int coord) const; + AnnotCoord *getCoord(int coord) const; + int getCoordsLength() const { return coordsLength; } +protected: + AnnotCoord **coords; + int coordsLength; + + void parsePathArray(Array *array); +}; + +//------------------------------------------------------------------------ +// AnnotCalloutLine +//------------------------------------------------------------------------ + +class AnnotCalloutLine { +public: + + AnnotCalloutLine(double x1, double y1, double x2, double y2); + virtual ~AnnotCalloutLine() { } + + double getX1() const { return coord1.getX(); } + double getY1() const { return coord1.getY(); } + double getX2() const { return coord2.getX(); } + double getY2() const { return coord2.getY(); } + +protected: + + AnnotCoord coord1, coord2; +}; + +//------------------------------------------------------------------------ +// AnnotCalloutMultiLine +//------------------------------------------------------------------------ + +class AnnotCalloutMultiLine: public AnnotCalloutLine { +public: + + AnnotCalloutMultiLine(double x1, double y1, double x2, double y2, + double x3, double y3); + + double getX3() const { return coord3.getX(); } + double getY3() const { return coord3.getY(); } + +protected: + + AnnotCoord coord3; +}; + +//------------------------------------------------------------------------ +// AnnotBorderEffect +//------------------------------------------------------------------------ + +class AnnotBorderEffect { +public: + + enum AnnotBorderEffectType { + borderEffectNoEffect, // S + borderEffectCloudy // C + }; + + AnnotBorderEffect(Dict *dict); + + AnnotBorderEffectType getEffectType() const { return effectType; } + double getIntensity() const { return intensity; } + +private: + + AnnotBorderEffectType effectType; // S (Default S) + double intensity; // I (Default 0) +}; + +//------------------------------------------------------------------------ +// AnnotQuadrilateral +//------------------------------------------------------------------------ + +class AnnotQuadrilaterals { + class AnnotQuadrilateral { + public: + AnnotQuadrilateral(double x1, double y1, double x2, double y2, double x3, + double y3, double x4, double y4); + + AnnotCoord coord1, coord2, coord3, coord4; + }; + +public: + + AnnotQuadrilaterals(Array *array, PDFRectangle *rect); + ~AnnotQuadrilaterals(); + + double getX1(int quadrilateral); + double getY1(int quadrilateral); + double getX2(int quadrilateral); + double getY2(int quadrilateral); + double getX3(int quadrilateral); + double getY3(int quadrilateral); + double getX4(int quadrilateral); + double getY4(int quadrilateral); + int getQuadrilateralsLength() const { return quadrilateralsLength; } +protected: + + AnnotQuadrilateral** quadrilaterals; + int quadrilateralsLength; +}; + +//------------------------------------------------------------------------ +// AnnotBorder +//------------------------------------------------------------------------ + +class AnnotBorder { +public: + enum AnnotBorderType { + typeUnknown, + typeArray, + typeBS + }; + + enum AnnotBorderStyle { + borderSolid, // Solid + borderDashed, // Dashed + borderBeveled, // Beveled + borderInset, // Inset + borderUnderlined // Underlined + }; + + AnnotBorder(); + virtual ~AnnotBorder(); + + virtual AnnotBorderType getType() const { return type; } + virtual double getWidth() const { return width; } + virtual int getDashLength() const { return dashLength; } + virtual double *getDash() const { return dash; } + virtual AnnotBorderStyle getStyle() const { return style; } + +protected: + GBool parseDashArray(Object *dashObj); + + AnnotBorderType type; + double width; + static const int DASH_LIMIT = 10; // implementation note 82 in Appendix H. + int dashLength; + double *dash; + AnnotBorderStyle style; +}; + +//------------------------------------------------------------------------ +// AnnotBorderArray +//------------------------------------------------------------------------ + +class AnnotBorderArray: public AnnotBorder { +public: + AnnotBorderArray(); + AnnotBorderArray(Array *array); + + double getHorizontalCorner() const { return horizontalCorner; } + double getVerticalCorner() const { return verticalCorner; } + +protected: + double horizontalCorner; // (Default 0) + double verticalCorner; // (Default 0) + // double width; // (Default 1) (inherited from AnnotBorder) +}; + +//------------------------------------------------------------------------ +// AnnotBorderBS +//------------------------------------------------------------------------ + +class AnnotBorderBS: public AnnotBorder { +public: + + AnnotBorderBS(); + AnnotBorderBS(Dict *dict); + +private: + // double width; // W (Default 1) (inherited from AnnotBorder) + // AnnotBorderStyle style; // S (Default S) (inherited from AnnotBorder) + // double *dash; // D (Default [3]) (inherited from AnnotBorder) +}; + +//------------------------------------------------------------------------ +// AnnotColor +//------------------------------------------------------------------------ + +class AnnotColor { +public: + + enum AnnotColorSpace { + colorTransparent = 0, + colorGray = 1, + colorRGB = 3, + colorCMYK = 4 + }; + + AnnotColor(); + AnnotColor(double gray); + AnnotColor(double r, double g, double b); + AnnotColor(double c, double m, double y, double k); + AnnotColor(Array *array, int adjust = 0); + + void adjustColor(int adjust); + + AnnotColorSpace getSpace() const { return (AnnotColorSpace) length; } + const double *getValues() const { return values; } + +private: + + double values[4]; + int length; +}; + +//------------------------------------------------------------------------ +// AnnotIconFit +//------------------------------------------------------------------------ + +class AnnotIconFit { +public: + + enum AnnotIconFitScaleWhen { + scaleAlways, // A + scaleBigger, // B + scaleSmaller, // S + scaleNever // N + }; + + enum AnnotIconFitScale { + scaleAnamorphic, // A + scaleProportional // P + }; + + AnnotIconFit(Dict *dict); + + AnnotIconFitScaleWhen getScaleWhen() { return scaleWhen; } + AnnotIconFitScale getScale() { return scale; } + double getLeft() { return left; } + double getBottom() { return bottom; } + bool getFullyBounds() { return fullyBounds; } + +protected: + + AnnotIconFitScaleWhen scaleWhen; // SW (Default A) + AnnotIconFitScale scale; // S (Default P) + double left; // A (Default [0.5 0.5] + double bottom; // Only if scale is P + bool fullyBounds; // FB (Default false) +}; + +//------------------------------------------------------------------------ +// AnnotAppearance +//------------------------------------------------------------------------ + +class AnnotAppearance { +public: + + enum AnnotAppearanceType { + appearNormal, + appearRollover, + appearDown + }; + + AnnotAppearance(Dict *dict); +}; + +//------------------------------------------------------------------------ +// AnnotAppearanceCharacs +//------------------------------------------------------------------------ + +class AnnotAppearanceCharacs { +public: + + enum AnnotAppearanceCharacsTextPos { + captionNoIcon, // 0 + captionNoCaption, // 1 + captionBelow, // 2 + captionAbove, // 3 + captionRight, // 4 + captionLeft, // 5 + captionOverlaid // 6 + }; + + AnnotAppearanceCharacs(Dict *dict); + ~AnnotAppearanceCharacs(); + + int getRotation() { return rotation; } + AnnotColor *getBorderColor() { return borderColor; } + AnnotColor *getBackColor() { return backColor; } + GooString *getNormalCaption() { return normalCaption; } + GooString *getRolloverCaption() { return rolloverCaption; } + GooString *getAlternateCaption() { return alternateCaption; } + AnnotIconFit *getIconFit() { return iconFit; } + AnnotAppearanceCharacsTextPos getPosition() { return position; } + +protected: + + int rotation; // R (Default 0) + AnnotColor *borderColor; // BC + AnnotColor *backColor; // BG + GooString *normalCaption; // CA + GooString *rolloverCaption; // RC + GooString *alternateCaption; // AC + // I + // RI + // IX + AnnotIconFit *iconFit; // IF + AnnotAppearanceCharacsTextPos position; // TP (Default 0) +}; + +//------------------------------------------------------------------------ +// Annot +//------------------------------------------------------------------------ + +class Annot { +public: + enum AnnotFlag { + flagUnknown = 0x0000, + flagInvisible = 0x0001, + flagHidden = 0x0002, + flagPrint = 0x0004, + flagNoZoom = 0x0008, + flagNoRotate = 0x0010, + flagNoView = 0x0020, + flagReadOnly = 0x0040, + flagLocked = 0x0080, + flagToggleNoView = 0x0100, + flagLockedContents = 0x0200 + }; + + enum AnnotSubtype { + typeUnknown, // 0 + typeText, // Text 1 + typeLink, // Link 2 + typeFreeText, // FreeText 3 + typeLine, // Line 4 + typeSquare, // Square 5 + typeCircle, // Circle 6 + typePolygon, // Polygon 7 + typePolyLine, // PolyLine 8 + typeHighlight, // Highlight 9 + typeUnderline, // Underline 10 + typeSquiggly, // Squiggly 11 + typeStrikeOut, // StrikeOut 12 + typeStamp, // Stamp 13 + typeCaret, // Caret 14 + typeInk, // Ink 15 + typePopup, // Popup 16 + typeFileAttachment, // FileAttachment 17 + typeSound, // Sound 18 + typeMovie, // Movie 19 + typeWidget, // Widget 20 + typeScreen, // Screen 21 + typePrinterMark, // PrinterMark 22 + typeTrapNet, // TrapNet 23 + typeWatermark, // Watermark 24 + type3D // 3D 25 + }; + + Annot(XRef *xrefA, PDFRectangle *rectA, Catalog *catalog); + Annot(XRef *xrefA, Dict *dict, Catalog *catalog); + Annot(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + GBool isOk() { return ok; } + + void incRefCnt(); + void decRefCnt(); + + virtual void draw(Gfx *gfx, GBool printing); + // Get appearance object. + Object *getAppearance(Object *obj) { return appearance.fetch(xref, obj); } + + GBool match(Ref *refA) + { return ref.num == refA->num && ref.gen == refA->gen; } + + double getXMin(); + double getYMin(); + + double getFontSize() { return fontSize; } + + // Sets the annot contents to new_content + // new_content should never be NULL + void setContents(GooString *new_content); + + // The annotation takes the ownership of + // new_color. + void setColor(AnnotColor *new_color); + + void setPage(Ref *pageRef, int pageIndex); + + void setAppearanceState(char *state); + + // getters + XRef *getXRef() const { return xref; } + GBool getHasRef() const { return hasRef; } + Ref getRef() const { return ref; } + AnnotSubtype getType() const { return type; } + PDFRectangle *getRect() const { return rect; } + void getRect(double *x1, double *y1, double *x2, double *y2) const; + GooString *getContents() const { return contents; } + int getPageNum() const { return page; } + GooString *getName() const { return name; } + GooString *getModified() const { return modified; } + Guint getFlags() const { return flags; } + /*Dict *getAppearDict() const { return appearDict; }*/ + GooString *getAppearState() const { return appearState; } + AnnotBorder *getBorder() const { return border; } + AnnotColor *getColor() const { return color; } + int getTreeKey() const { return treeKey; } + + int getId() { return ref.num; } + + // Check if point is inside the annot rectangle. + GBool inRect(double x, double y) const; + +private: + void readArrayNum(Object *pdfArray, int key, double *value); + // write vStr[i:j[ in appearBuf + + void initialize (XRef *xrefA, Dict *dict, Catalog *catalog); + + +protected: + virtual ~Annot(); + void setColor(AnnotColor *color, GBool fill); + void drawCircle(double cx, double cy, double r, GBool fill); + void drawCircleTopLeft(double cx, double cy, double r); + void drawCircleBottomRight(double cx, double cy, double r); + void createForm(double *bbox, GBool transparencyGroup, Object *resDict, Object *aStream); + void createResourcesDict(char *formName, Object *formStream, char *stateName, + double opacity, char *blendMode, Object *resDict); + GBool isVisible(GBool printing); + + // Updates the field key of the annotation dictionary + // and sets M to the current time + void update(const char *key, Object *value); + + int refCnt; + + Object annotObj; + + // required data + AnnotSubtype type; // Annotation type + PDFRectangle *rect; // Rect + + // optional data + GooString *contents; // Contents + int page; // P + GooString *name; // NM + GooString *modified; // M + Guint flags; // F (must be a 32 bit unsigned int) + //Dict *appearDict; // AP (should be correctly parsed) + Ref appRef; //the reference to the indirect appearance object in XRef + Object appearance; // a reference to the Form XObject stream + // for the normal appearance + GooString *appearState; // AS + int treeKey; // Struct Parent; + OCGs *optContentConfig; // Optional content config + Object oc; // OC + + XRef *xref; // the xref table for this PDF file + Ref ref; // object ref identifying this annotation + GooString *appearBuf; + AnnotBorder *border; // Border, BS + AnnotColor *color; // C + double fontSize; + GBool ok; + + bool hasRef; +}; + +//------------------------------------------------------------------------ +// AnnotPopup +//------------------------------------------------------------------------ + +class AnnotPopup: public Annot { +public: + AnnotPopup(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); + AnnotPopup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + ~AnnotPopup(); + + Object *getParent(Object *obj) { return parent.fetch (xref, obj); } + Object *getParentNF(Object *obj) { return &parent; } + void setParent(Object *parentA); + void setParent(Annot *parentA); + GBool getOpen() const { return open; } + void setOpen(GBool openA); + +protected: + void initialize(XRef *xrefA, Dict *dict, Catalog *catalog); + + Object parent; // Parent + GBool open; // Open +}; + +//------------------------------------------------------------------------ +// AnnotMarkup +//------------------------------------------------------------------------ + +class AnnotMarkup: public Annot { +public: + enum AnnotMarkupReplyType { + replyTypeR, // R + replyTypeGroup // Group + }; + + AnnotMarkup(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); + AnnotMarkup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + virtual ~AnnotMarkup(); + + // getters + GooString *getLabel() const { return label; } + AnnotPopup *getPopup() const { return popup; } + double getOpacity() const { return opacity; } + // getRC + GooString *getDate() const { return date; } + int getInReplyToID() const { return inReplyTo.num; } + GooString *getSubject() const { return subject; } + AnnotMarkupReplyType getReplyTo() const { return replyTo; } + AnnotExternalDataType getExData() const { return exData; } + + // The annotation takes the ownership of new_popup + void setPopup(AnnotPopup *new_popup); + void setLabel(GooString *new_label); + void setOpacity(double opacityA); + +protected: + GooString *label; // T (Default autor) + AnnotPopup *popup; // Popup + double opacity; // CA (Default 1.0) + // RC + GooString *date; // CreationDate + Ref inReplyTo; // IRT + GooString *subject; // Subj + AnnotMarkupReplyType replyTo; // RT (Default R) + // this object is overrided by the custom intent fields defined in some + // annotation types. + //GooString *intent; // IT + AnnotExternalDataType exData; // ExData + +private: + void initialize(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); +}; + +//------------------------------------------------------------------------ +// AnnotText +//------------------------------------------------------------------------ + +class AnnotText: public AnnotMarkup { +public: + enum AnnotTextState { + stateUnknown, + // Marked state model + stateMarked, // Marked + stateUnmarked, // Unmarked + // Review state model + stateAccepted, // Accepted + stateRejected, // Rejected + stateCancelled, // Cancelled + stateCompleted, // Completed + stateNone // None + }; + + AnnotText(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); + AnnotText(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + ~AnnotText(); + + virtual void draw(Gfx *gfx, GBool printing); + + // getters + GBool getOpen() const { return open; } + GooString *getIcon() const { return icon; } + AnnotTextState getState() const { return state; } + + void setOpen(GBool openA); + void setIcon(GooString *new_icon); + +private: + + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + GBool open; // Open (Default false) + GooString *icon; // Name (Default Note) + AnnotTextState state; // State (Default Umarked if + // StateModel Marked + // None if StareModel Review) +}; + +//------------------------------------------------------------------------ +// AnnotMovie +//------------------------------------------------------------------------ + + + +class AnnotMovie: public Annot { + public: + AnnotMovie(XRef *xrefA, PDFRectangle *rect, Movie *movieA, Catalog *catalog); + AnnotMovie(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + ~AnnotMovie(); + + virtual void draw(Gfx *gfx, GBool printing); + + GooString* getTitle() { return title; } + Movie* getMovie() { return movie; } + + private: + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + GooString* title; // T + Movie* movie; // Movie + A +}; + + +//------------------------------------------------------------------------ +// AnnotScreen +//------------------------------------------------------------------------ + +class AnnotScreen: public Annot { + public: + + AnnotScreen(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); + AnnotScreen(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + ~AnnotScreen(); + + GooString* getTitle() { return title; } + + AnnotAppearanceCharacs *getAppearCharacs() { return appearCharacs; } + LinkAction* getAction() { return action; } + Object* getAdditionActions() { return &additionAction; } + + private: + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + + GooString* title; // T + + AnnotAppearanceCharacs* appearCharacs; // MK + + LinkAction *action; // A + Object additionAction; // AA +}; + +//------------------------------------------------------------------------ +// AnnotLink +//------------------------------------------------------------------------ + +class AnnotLink: public Annot { +public: + + enum AnnotLinkEffect { + effectNone, // N + effectInvert, // I + effectOutline, // O + effectPush // P + }; + + AnnotLink(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); + AnnotLink(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + virtual ~AnnotLink(); + + virtual void draw(Gfx *gfx, GBool printing); + + // getters + LinkAction *getAction() const { return action; } + AnnotLinkEffect getLinkEffect() const { return linkEffect; } + Dict *getUriAction() const { return uriAction; } + AnnotQuadrilaterals *getQuadrilaterals() const { return quadrilaterals; } + +protected: + + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + LinkAction *action; // A, Dest + AnnotLinkEffect linkEffect; // H (Default I) + Dict *uriAction; // PA + + AnnotQuadrilaterals *quadrilaterals; // QuadPoints +}; + +//------------------------------------------------------------------------ +// AnnotFreeText +//------------------------------------------------------------------------ + +class AnnotFreeText: public AnnotMarkup { +public: + + enum AnnotFreeTextQuadding { + quaddingLeftJustified, // 0 + quaddingCentered, // 1 + quaddingRightJustified // 2 + }; + + enum AnnotFreeTextIntent { + intentFreeText, // FreeText + intentFreeTextCallout, // FreeTextCallout + intentFreeTextTypeWriter // FreeTextTypeWriter + }; + + AnnotFreeText(XRef *xrefA, PDFRectangle *rect, GooString *da, Catalog *catalog); + AnnotFreeText(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + ~AnnotFreeText(); + + // getters + GooString *getAppearanceString() const { return appearanceString; } + AnnotFreeTextQuadding getQuadding() const { return quadding; } + // return rc + GooString *getStyleString() const { return styleString; } + AnnotCalloutLine *getCalloutLine() const { return calloutLine; } + AnnotFreeTextIntent getIntent() const { return intent; } + AnnotBorderEffect *getBorderEffect() const { return borderEffect; } + PDFRectangle *getRectangle() const { return rectangle; } + AnnotLineEndingStyle getEndStyle() const { return endStyle; } + +protected: + + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + // required + GooString *appearanceString; // DA + + // optional + AnnotFreeTextQuadding quadding; // Q (Default 0) + // RC + GooString *styleString; // DS + AnnotCalloutLine *calloutLine; // CL + AnnotFreeTextIntent intent; // IT + AnnotBorderEffect *borderEffect; // BE + PDFRectangle *rectangle; // RD + // inherited from Annot + // AnnotBorderBS border; // BS + AnnotLineEndingStyle endStyle; // LE (Default None) +}; + +//------------------------------------------------------------------------ +// AnnotLine +//------------------------------------------------------------------------ + +class AnnotLine: public AnnotMarkup { +public: + + enum AnnotLineIntent { + intentLineArrow, // LineArrow + intentLineDimension // LineDimension + }; + + enum AnnotLineCaptionPos { + captionPosInline, // Inline + captionPosTop // Top + }; + + AnnotLine(XRef *xrefA, PDFRectangle *rect, PDFRectangle *lRect, Catalog *catalog); + AnnotLine(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + ~AnnotLine(); + + virtual void draw(Gfx *gfx, GBool printing); + + // getters + AnnotLineEndingStyle getStartStyle() const { return startStyle; } + AnnotLineEndingStyle getEndStyle() const { return endStyle; } + AnnotColor *getInteriorColor() const { return interiorColor; } + double getLeaderLineLength() const { return leaderLineLength; } + double getLeaderLineExtension() const { return leaderLineExtension; } + bool getCaption() const { return caption; } + AnnotLineIntent getIntent() const { return intent; } + double getLeaderLineOffset() const { return leaderLineOffset; } + AnnotLineCaptionPos getCaptionPos() const { return captionPos; } + Dict *getMeasure() const { return measure; } + double getCaptionTextHorizontal() const { return captionTextHorizontal; } + double getCaptionTextVertical() const { return captionTextVertical; } + double getX1() const { return coord1->getX(); } + double getY1() const { return coord1->getY(); } + double getX2() const { return coord2->getX(); } + double getY2() const { return coord2->getY(); } + +protected: + + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + // required + AnnotCoord *coord1, *coord2; + + // optional + // inherited from Annot + // AnnotBorderBS border; // BS + AnnotLineEndingStyle startStyle; // LE (Default [/None /None]) + AnnotLineEndingStyle endStyle; // + AnnotColor *interiorColor; // IC + double leaderLineLength; // LL (Default 0) + double leaderLineExtension; // LLE (Default 0) + bool caption; // Cap (Default false) + AnnotLineIntent intent; // IT + double leaderLineOffset; // LLO + AnnotLineCaptionPos captionPos; // CP (Default Inline) + Dict *measure; // Measure + double captionTextHorizontal; // CO (Default [0, 0]) + double captionTextVertical; // +}; + +//------------------------------------------------------------------------ +// AnnotTextMarkup +//------------------------------------------------------------------------ + +class AnnotTextMarkup: public AnnotMarkup { +public: + + AnnotTextMarkup(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType, + AnnotQuadrilaterals *quadPoints, Catalog *catalog); + AnnotTextMarkup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + virtual ~AnnotTextMarkup(); + + virtual void draw(Gfx *gfx, GBool printing); + + AnnotQuadrilaterals *getQuadrilaterals() const { return quadrilaterals; } + +protected: + + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + AnnotQuadrilaterals *quadrilaterals; // QuadPoints +}; + +//------------------------------------------------------------------------ +// AnnotStamp +//------------------------------------------------------------------------ + +class AnnotStamp: public AnnotMarkup { +public: + + AnnotStamp(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); + AnnotStamp(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + ~AnnotStamp(); + + // getters + GooString *getIcon() const { return icon; } + +private: + + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + GooString *icon; // Name (Default Draft) +}; + +//------------------------------------------------------------------------ +// AnnotGeometry +//------------------------------------------------------------------------ + +class AnnotGeometry: public AnnotMarkup { +public: + + AnnotGeometry(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType, Catalog *catalog); + AnnotGeometry(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + ~AnnotGeometry(); + + virtual void draw(Gfx *gfx, GBool printing); + + // getters + AnnotColor *getInteriorColor() const { return interiorColor; } + AnnotBorderEffect *getBorderEffect() const { return borderEffect; } + PDFRectangle *getGeometryRect() const { return geometryRect; } + +private: + + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + AnnotColor *interiorColor; // IC + AnnotBorderEffect *borderEffect; // BE + PDFRectangle *geometryRect; // RD (combined with Rect) +}; + +//------------------------------------------------------------------------ +// AnnotPolygon +//------------------------------------------------------------------------ + +class AnnotPolygon: public AnnotMarkup { +public: + + enum AnnotPolygonIntent { + polygonCloud, // PolygonCloud + polylineDimension, // PolyLineDimension + polygonDimension // PolygonDimension + }; + + AnnotPolygon(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType, + AnnotPath *path, Catalog *catalog); + AnnotPolygon(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + ~AnnotPolygon(); + + // getters + AnnotPath *getVertices() const { return vertices; } + AnnotLineEndingStyle getStartStyle() const { return startStyle; } + AnnotLineEndingStyle getEndStyle() const { return endStyle; } + AnnotColor *getInteriorColor() const { return interiorColor; } + AnnotBorderEffect *getBorderEffect() const { return borderEffect; } + AnnotPolygonIntent getIntent() const { return intent; } + +private: + + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + // required + AnnotPath *vertices; // Vertices + + // optional + AnnotLineEndingStyle startStyle; // LE (Default [/None /None]) + AnnotLineEndingStyle endStyle; // + // inherited from Annot + // AnnotBorderBS border; // BS + AnnotColor *interiorColor; // IC + AnnotBorderEffect *borderEffect; // BE + AnnotPolygonIntent intent; // IT + // Measure +}; + +//------------------------------------------------------------------------ +// AnnotCaret +//------------------------------------------------------------------------ + +class AnnotCaret: public AnnotMarkup { +public: + + enum AnnotCaretSymbol { + symbolNone, // None + symbolP // P + }; + + AnnotCaret(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); + AnnotCaret(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + ~AnnotCaret(); + + // getters + AnnotCaretSymbol getSymbol() const { return symbol; } + PDFRectangle *getCaretRect() const { return caretRect; } + +private: + + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + AnnotCaretSymbol symbol; // Sy (Default None) + PDFRectangle *caretRect; // RD (combined with Rect) +}; + +//------------------------------------------------------------------------ +// AnnotInk +//------------------------------------------------------------------------ + +class AnnotInk: public AnnotMarkup { +public: + + AnnotInk(XRef *xrefA, PDFRectangle *rect, AnnotPath **paths, int n_paths, Catalog *catalog); + AnnotInk(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + ~AnnotInk(); + + // getters + AnnotPath **getInkList() const { return inkList; } + int getInkListLength() const { return inkListLength; } + +private: + + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + // required + AnnotPath **inkList; // InkList + int inkListLength; + + // optional + // inherited from Annot + // AnnotBorderBS border; // BS +}; + +//------------------------------------------------------------------------ +// AnnotFileAttachment +//------------------------------------------------------------------------ + +class AnnotFileAttachment: public AnnotMarkup { +public: + + AnnotFileAttachment(XRef *xrefA, PDFRectangle *rect, GooString *filename, Catalog *catalog); + AnnotFileAttachment(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + ~AnnotFileAttachment(); + + virtual void draw(Gfx *gfx, GBool printing); + + // getters + Object *getFile() { return &file; } + GooString *getName() const { return name; } + +private: + + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + // required + Object file; // FS + + // optional + GooString *name; // Name +}; + +//------------------------------------------------------------------------ +// AnnotSound +//------------------------------------------------------------------------ + +class AnnotSound: public AnnotMarkup { +public: + + AnnotSound(XRef *xrefA, PDFRectangle *rect, Sound *soundA, Catalog *catalog); + AnnotSound(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + ~AnnotSound(); + + virtual void draw(Gfx *gfx, GBool printing); + + // getters + Sound *getSound() { return sound; } + GooString *getName() const { return name; } + +private: + + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + // required + Sound *sound; // Sound + + // optional + GooString *name; // Name +}; + +//------------------------------------------------------------------------ +// AnnotWidget +//------------------------------------------------------------------------ + +class AnnotWidget: public Annot { +public: + + enum AnnotWidgetHighlightMode { + highlightModeNone, // N + highlightModeInvert, // I + highlightModeOutline, // O + highlightModePush // P,T + }; + + AnnotWidget(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + AnnotWidget(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj, FormField *fieldA); + virtual ~AnnotWidget(); + + virtual void draw(Gfx *gfx, GBool printing); + + void drawBorder(); + void drawFormFieldButton(GfxResources *resources, GooString *da); + void drawFormFieldText(GfxResources *resources, GooString *da); + void drawFormFieldChoice(GfxResources *resources, GooString *da); + void generateFieldAppearance (); + + AnnotWidgetHighlightMode getMode() { return mode; } + AnnotAppearanceCharacs *getAppearCharacs() { return appearCharacs; } + LinkAction *getAction() { return action; } + Dict *getAdditionActions() { return additionActions; } + Dict *getParent() { return parent; } + +private: + + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + void drawText(GooString *text, GooString *da, GfxResources *resources, + GBool multiline, int comb, int quadding, + GBool txField, GBool forceZapfDingbats, + GBool password=false); + void drawListBox(FormFieldChoice *fieldChoice, + GooString *da, GfxResources *resources, int quadding); + void layoutText(GooString *text, GooString *outBuf, int *i, GfxFont *font, + double *width, double widthLimit, int *charCount, + GBool noReencode); + void writeString(GooString *str, GooString *appearBuf); + + Form *form; + FormField *field; // FormField object for this annotation + AnnotWidgetHighlightMode mode; // H (Default I) + AnnotAppearanceCharacs *appearCharacs; // MK + LinkAction *action; // A + Dict *additionActions; // AA + // inherited from Annot + // AnnotBorderBS border; // BS + Dict *parent; // Parent + GBool addDingbatsResource; +}; + +//------------------------------------------------------------------------ +// Annot3D +//------------------------------------------------------------------------ + +class Annot3D: public Annot { + class Activation { + public: + enum ActivationATrigger { + aTriggerUnknown, + aTriggerPageOpened, // PO + aTriggerPageVisible, // PV + aTriggerUserAction // XA + }; + + enum ActivationAState { + aStateUnknown, + aStateEnabled, // I + aStateDisabled // L + }; + + enum ActivationDTrigger { + dTriggerUnknown, + dTriggerPageClosed, // PC + dTriggerPageInvisible, // PI + dTriggerUserAction // XD + }; + + enum ActivationDState { + dStateUnknown, + dStateUninstantiaded, // U + dStateInstantiated, // I + dStateLive // L + }; + + Activation(Dict *dict); + private: + + ActivationATrigger aTrigger; // A (Default XA) + ActivationAState aState; // AIS (Default L) + ActivationDTrigger dTrigger; // D (Default PI) + ActivationDState dState; // DIS (Default U) + GBool displayToolbar; // TB (Default true) + GBool displayNavigation; // NP (Default false); + }; +public: + + Annot3D(XRef *xrefA, PDFRectangle *rect, Catalog *catalog); + Annot3D(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj); + ~Annot3D(); + + // getters + +private: + + void initialize(XRef *xrefA, Catalog *catalog, Dict *dict); + + Activation *activation; // 3DA +}; + +//------------------------------------------------------------------------ +// Annots +//------------------------------------------------------------------------ + +class Annots { +public: + + // Build a list of Annot objects. + Annots(XRef *xref, Catalog *catalog, Object *annotsObj); + + ~Annots(); + + // Iterate through list of annotations. + int getNumAnnots() { return nAnnots; } + Annot *getAnnot(int i) { return annots[i]; } + void appendAnnot(Annot *annot); + +private: + Annot* createAnnot(XRef *xref, Dict* dict, Catalog *catalog, Object *obj); + Annot *findAnnot(Ref *ref); + + Annot **annots; + int nAnnots; + int size; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Array.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Array.cc new file mode 100644 index 00000000000..e7ec4e7dc5f --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Array.cc @@ -0,0 +1,102 @@ +//======================================================================== +// +// Array.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include <stddef.h> +#include "goo/gmem.h" +#include "Object.h" +#include "Array.h" + +//------------------------------------------------------------------------ +// Array +//------------------------------------------------------------------------ + +Array::Array(XRef *xrefA) { + xref = xrefA; + elems = NULL; + size = length = 0; + ref = 1; +} + +Array::~Array() { + int i; + + for (i = 0; i < length; ++i) + elems[i].free(); + gfree(elems); +} + +void Array::add(Object *elem) { + if (length == size) { + if (length == 0) { + size = 8; + } else { + size *= 2; + } + elems = (Object *)greallocn(elems, size, sizeof(Object)); + } + elems[length] = *elem; + ++length; +} + +Object *Array::get(int i, Object *obj) { + if (i < 0 || i >= length) { +#ifdef DEBUG_MEM + abort(); +#else + return obj->initNull(); +#endif + } + return elems[i].fetch(xref, obj); +} + +Object *Array::getNF(int i, Object *obj) { + if (i < 0 || i >= length) { +#ifdef DEBUG_MEM + abort(); +#else + return obj->initNull(); +#endif + } + return elems[i].copy(obj); +} + +GBool Array::getString(int i, GooString *string) +{ + Object obj; + + if (getNF(i, &obj)->isString()) { + string->clear(); + string->append(obj.getString()); + obj.free(); + return gTrue; + } else { + obj.free(); + return gFalse; + } +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Array.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Array.h new file mode 100644 index 00000000000..a6aca260b9f --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Array.h @@ -0,0 +1,71 @@ +//======================================================================== +// +// Array.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef ARRAY_H +#define ARRAY_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "Object.h" + +class XRef; + +//------------------------------------------------------------------------ +// Array +//------------------------------------------------------------------------ + +class Array { +public: + + // Constructor. + Array(XRef *xrefA); + + // Destructor. + ~Array(); + + // Reference counting. + int incRef() { return ++ref; } + int decRef() { return --ref; } + + // Get number of elements. + int getLength() { return length; } + + // Add an element. + void add(Object *elem); + + // Accessors. + Object *get(int i, Object *obj); + Object *getNF(int i, Object *obj); + GBool getString(int i, GooString *string); + +private: + + XRef *xref; // the xref table for this PDF file + Object *elems; // array of elements + int size; // size of <elems> array + int length; // number of elements in array + int ref; // reference count +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/ArthurOutputDev.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/ArthurOutputDev.cc new file mode 100644 index 00000000000..68a1c7163da --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/ArthurOutputDev.cc @@ -0,0 +1,816 @@ +//======================================================================== +// +// ArthurOutputDev.cc +// +// Copyright 2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> +// Copyright (C) 2005-2009, 2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2008, 2010 Pino Toscano <pino@kde.org> +// Copyright (C) 2009, 2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2009 Petr Gajdos <pgajdos@novell.com> +// Copyright (C) 2010 Matthias Fauconneau <matthias.fauconneau@gmail.com> +// Copyright (C) 2011 Andreas Hartmetz <ahartmetz@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <string.h> +#include <math.h> + +#include "goo/gfile.h" +#include "GlobalParams.h" +#include "Error.h" +#include "Object.h" +#include "GfxState.h" +#include "GfxFont.h" +#include "Link.h" +#include "CharCodeToUnicode.h" +#include "FontEncodingTables.h" +#include <fofi/FoFiTrueType.h> +#include "ArthurOutputDev.h" + +#include <QtCore/QtDebug> +#include <QtGui/QPainterPath> +//------------------------------------------------------------------------ + +#ifdef HAVE_SPLASH +#include "splash/SplashFontFileID.h" +#include "splash/SplashFontFile.h" +#include "splash/SplashFontEngine.h" +#include "splash/SplashFont.h" +#include "splash/SplashMath.h" +#include "splash/SplashPath.h" +#include "splash/SplashGlyphBitmap.h" +//------------------------------------------------------------------------ +// SplashOutFontFileID +//------------------------------------------------------------------------ + +class SplashOutFontFileID: public SplashFontFileID { +public: + + SplashOutFontFileID(Ref *rA) { r = *rA; } + + ~SplashOutFontFileID() {} + + GBool matches(SplashFontFileID *id) { + return ((SplashOutFontFileID *)id)->r.num == r.num && + ((SplashOutFontFileID *)id)->r.gen == r.gen; + } + +private: + + Ref r; +}; + +#endif + +//------------------------------------------------------------------------ +// ArthurOutputDev +//------------------------------------------------------------------------ + +ArthurOutputDev::ArthurOutputDev(QPainter *painter): + m_painter(painter), + m_fontHinting(NoHinting) +{ + m_currentBrush = QBrush(Qt::SolidPattern); + m_fontEngine = 0; + m_font = 0; +} + +ArthurOutputDev::~ArthurOutputDev() +{ +#ifdef HAVE_SPLASH + delete m_fontEngine; +#endif +} + +void ArthurOutputDev::startDoc(XRef *xrefA) { + xref = xrefA; +#ifdef HAVE_SPLASH + delete m_fontEngine; + + const bool isHintingEnabled = m_fontHinting != NoHinting; + const bool isSlightHinting = m_fontHinting == SlightHinting; + + m_fontEngine = new SplashFontEngine( +#if HAVE_T1LIB_H + globalParams->getEnableT1lib(), +#endif +#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H + globalParams->getEnableFreeType(), + isHintingEnabled, + isSlightHinting, +#endif + m_painter->testRenderHint(QPainter::TextAntialiasing)); +#endif +} + +void ArthurOutputDev::startPage(int pageNum, GfxState *state) +{ + // fill page with white background. + int w = static_cast<int>(state->getPageWidth()); + int h = static_cast<int>(state->getPageHeight()); + QColor fillColour(Qt::white); + QBrush fill(fillColour); + m_painter->save(); + m_painter->setPen(fillColour); + m_painter->setBrush(fill); + m_painter->drawRect(0, 0, w, h); + m_painter->restore(); +} + +void ArthurOutputDev::endPage() { +} + +void ArthurOutputDev::saveState(GfxState *state) +{ + m_painter->save(); +} + +void ArthurOutputDev::restoreState(GfxState *state) +{ + m_painter->restore(); +} + +void ArthurOutputDev::updateAll(GfxState *state) +{ + OutputDev::updateAll(state); + m_needFontUpdate = gTrue; +} + +// This looks wrong - why aren't adjusting the matrix? +void ArthurOutputDev::updateCTM(GfxState *state, double m11, double m12, + double m21, double m22, + double m31, double m32) +{ + updateLineDash(state); + updateLineJoin(state); + updateLineCap(state); + updateLineWidth(state); +} + +void ArthurOutputDev::updateLineDash(GfxState *state) +{ + double *dashPattern; + int dashLength; + double dashStart; + state->getLineDash(&dashPattern, &dashLength, &dashStart); + QVector<qreal> pattern(dashLength); + for (int i = 0; i < dashLength; ++i) { + pattern[i] = dashPattern[i]; + } + m_currentPen.setDashPattern(pattern); + m_currentPen.setDashOffset(dashStart); + m_painter->setPen(m_currentPen); +} + +void ArthurOutputDev::updateFlatness(GfxState *state) +{ + // qDebug() << "updateFlatness"; +} + +void ArthurOutputDev::updateLineJoin(GfxState *state) +{ + switch (state->getLineJoin()) { + case 0: + m_currentPen.setJoinStyle(Qt::MiterJoin); + break; + case 1: + m_currentPen.setJoinStyle(Qt::RoundJoin); + break; + case 2: + m_currentPen.setJoinStyle(Qt::BevelJoin); + break; + } + m_painter->setPen(m_currentPen); +} + +void ArthurOutputDev::updateLineCap(GfxState *state) +{ + switch (state->getLineCap()) { + case 0: + m_currentPen.setCapStyle(Qt::FlatCap); + break; + case 1: + m_currentPen.setCapStyle(Qt::RoundCap); + break; + case 2: + m_currentPen.setCapStyle(Qt::SquareCap); + break; + } + m_painter->setPen(m_currentPen); +} + +void ArthurOutputDev::updateMiterLimit(GfxState *state) +{ + m_currentPen.setMiterLimit(state->getMiterLimit()); + m_painter->setPen(m_currentPen); +} + +void ArthurOutputDev::updateLineWidth(GfxState *state) +{ + m_currentPen.setWidthF(state->getLineWidth()); + m_painter->setPen(m_currentPen); +} + +void ArthurOutputDev::updateFillColor(GfxState *state) +{ + GfxRGB rgb; + QColor brushColour = m_currentBrush.color(); + state->getFillRGB(&rgb); + brushColour.setRgbF(colToDbl(rgb.r), colToDbl(rgb.g), colToDbl(rgb.b), brushColour.alphaF()); + m_currentBrush.setColor(brushColour); +} + +void ArthurOutputDev::updateStrokeColor(GfxState *state) +{ + GfxRGB rgb; + QColor penColour = m_currentPen.color(); + state->getStrokeRGB(&rgb); + penColour.setRgbF(colToDbl(rgb.r), colToDbl(rgb.g), colToDbl(rgb.b), penColour.alphaF()); + m_currentPen.setColor(penColour); + m_painter->setPen(m_currentPen); +} + +void ArthurOutputDev::updateFillOpacity(GfxState *state) +{ + QColor brushColour= m_currentBrush.color(); + brushColour.setAlphaF(state->getFillOpacity()); + m_currentBrush.setColor(brushColour); +} + +void ArthurOutputDev::updateStrokeOpacity(GfxState *state) +{ + QColor penColour= m_currentPen.color(); + penColour.setAlphaF(state->getStrokeOpacity()); + m_currentPen.setColor(penColour); + m_painter->setPen(m_currentPen); +} + +void ArthurOutputDev::updateFont(GfxState *state) +{ +#ifdef HAVE_SPLASH + GfxFont *gfxFont; + GfxFontType fontType; + SplashOutFontFileID *id; + SplashFontFile *fontFile; + SplashFontSrc *fontsrc = NULL; + FoFiTrueType *ff; + Ref embRef; + Object refObj, strObj; + GooString *fileName; + char *tmpBuf; + int tmpBufLen; + Gushort *codeToGID; + DisplayFontParam *dfp; + double *textMat; + double m11, m12, m21, m22, fontSize; + SplashCoord mat[4]; + int n; + int faceIndex = 0; + SplashCoord matrix[6]; + + m_needFontUpdate = false; + m_font = NULL; + fileName = NULL; + tmpBuf = NULL; + + if (!(gfxFont = state->getFont())) { + goto err1; + } + fontType = gfxFont->getType(); + if (fontType == fontType3) { + goto err1; + } + + // check the font file cache + id = new SplashOutFontFileID(gfxFont->getID()); + if ((fontFile = m_fontEngine->getFontFile(id))) { + delete id; + + } else { + + // if there is an embedded font, write it to disk + if (gfxFont->getEmbeddedFontID(&embRef)) { + tmpBuf = gfxFont->readEmbFontFile(xref, &tmpBufLen); + if (! tmpBuf) + goto err2; + // if there is an external font file, use it + } else if (!(fileName = gfxFont->getExtFontFile())) { + + // look for a display font mapping or a substitute font + dfp = NULL; + if (gfxFont->getName()) { + dfp = globalParams->getDisplayFont(gfxFont); + } + if (!dfp) { + error(-1, "Couldn't find a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + switch (dfp->kind) { + case displayFontT1: + fileName = dfp->t1.fileName; + fontType = gfxFont->isCIDFont() ? fontCIDType0 : fontType1; + break; + case displayFontTT: + fileName = dfp->tt.fileName; + fontType = gfxFont->isCIDFont() ? fontCIDType2 : fontTrueType; + faceIndex = dfp->tt.faceIndex; + break; + } + } + + fontsrc = new SplashFontSrc; + if (fileName) + fontsrc->setFile(fileName, gFalse); + else + fontsrc->setBuf(tmpBuf, tmpBufLen, gTrue); + + // load the font file + switch (fontType) { + case fontType1: + if (!(fontFile = m_fontEngine->loadType1Font( + id, + fontsrc, + ((Gfx8BitFont *)gfxFont)->getEncoding()))) { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + break; + case fontType1C: + if (!(fontFile = m_fontEngine->loadType1CFont( + id, + fontsrc, + ((Gfx8BitFont *)gfxFont)->getEncoding()))) { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + break; + case fontType1COT: + if (!(fontFile = m_fontEngine->loadOpenTypeT1CFont( + id, + fontsrc, + ((Gfx8BitFont *)gfxFont)->getEncoding()))) { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + break; + case fontTrueType: + case fontTrueTypeOT: + if (fileName) + ff = FoFiTrueType::load(fileName->getCString()); + else + ff = FoFiTrueType::make(tmpBuf, tmpBufLen); + if (ff) { + codeToGID = ((Gfx8BitFont *)gfxFont)->getCodeToGIDMap(ff); + n = 256; + delete ff; + } else { + codeToGID = NULL; + n = 0; + } + if (!(fontFile = m_fontEngine->loadTrueTypeFont( + id, + fontsrc, + codeToGID, n))) { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + break; + case fontCIDType0: + case fontCIDType0C: + if (!(fontFile = m_fontEngine->loadCIDFont( + id, + fontsrc))) { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + break; + case fontCIDType0COT: + if (!(fontFile = m_fontEngine->loadOpenTypeCFFFont( + id, + fontsrc))) { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + break; + case fontCIDType2: + case fontCIDType2OT: + codeToGID = NULL; + n = 0; + if (((GfxCIDFont *)gfxFont)->getCIDToGID()) { + n = ((GfxCIDFont *)gfxFont)->getCIDToGIDLen(); + if (n) { + codeToGID = (Gushort *)gmallocn(n, sizeof(Gushort)); + memcpy(codeToGID, ((GfxCIDFont *)gfxFont)->getCIDToGID(), + n * sizeof(Gushort)); + } + } else { + if (fileName) + ff = FoFiTrueType::load(fileName->getCString()); + else + ff = FoFiTrueType::make(tmpBuf, tmpBufLen); + if (! ff) + goto err2; + codeToGID = ((GfxCIDFont *)gfxFont)->getCodeToGIDMap(ff, &n); + delete ff; + } + if (!(fontFile = m_fontEngine->loadTrueTypeFont( + id, + fontsrc, + codeToGID, n, faceIndex))) { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + break; + default: + // this shouldn't happen + goto err2; + } + } + + // get the font matrix + textMat = state->getTextMat(); + fontSize = state->getFontSize(); + m11 = textMat[0] * fontSize * state->getHorizScaling(); + m12 = textMat[1] * fontSize * state->getHorizScaling(); + m21 = textMat[2] * fontSize; + m22 = textMat[3] * fontSize; + + { + QMatrix painterMatrix = m_painter->worldMatrix(); + matrix[0] = painterMatrix.m11(); + matrix[1] = painterMatrix.m12(); + matrix[2] = painterMatrix.m21(); + matrix[3] = painterMatrix.m22(); + matrix[4] = painterMatrix.dx(); + matrix[5] = painterMatrix.dy(); + } + + // create the scaled font + mat[0] = m11; mat[1] = -m12; + mat[2] = m21; mat[3] = -m22; + m_font = m_fontEngine->getFont(fontFile, mat, matrix); + + if (fontsrc && !fontsrc->isFile) + fontsrc->unref(); + return; + + err2: + delete id; + err1: + if (fontsrc && !fontsrc->isFile) + fontsrc->unref(); + return; +#endif +} + +static QPainterPath convertPath(GfxState *state, GfxPath *path, Qt::FillRule fillRule) +{ + GfxSubpath *subpath; + double x1, y1, x2, y2, x3, y3; + int i, j; + + QPainterPath qPath; + qPath.setFillRule(fillRule); + for (i = 0; i < path->getNumSubpaths(); ++i) { + subpath = path->getSubpath(i); + if (subpath->getNumPoints() > 0) { + state->transform(subpath->getX(0), subpath->getY(0), &x1, &y1); + qPath.moveTo(x1, y1); + j = 1; + while (j < subpath->getNumPoints()) { + if (subpath->getCurve(j)) { + state->transform(subpath->getX(j), subpath->getY(j), &x1, &y1); + state->transform(subpath->getX(j+1), subpath->getY(j+1), &x2, &y2); + state->transform(subpath->getX(j+2), subpath->getY(j+2), &x3, &y3); + qPath.cubicTo( x1, y1, x2, y2, x3, y3); + j += 3; + } else { + state->transform(subpath->getX(j), subpath->getY(j), &x1, &y1); + qPath.lineTo(x1, y1); + ++j; + } + } + if (subpath->isClosed()) { + qPath.closeSubpath(); + } + } + } + return qPath; +} + +void ArthurOutputDev::stroke(GfxState *state) +{ + m_painter->strokePath( convertPath( state, state->getPath(), Qt::OddEvenFill ), m_currentPen ); +} + +void ArthurOutputDev::fill(GfxState *state) +{ + m_painter->fillPath( convertPath( state, state->getPath(), Qt::WindingFill ), m_currentBrush ); +} + +void ArthurOutputDev::eoFill(GfxState *state) +{ + m_painter->fillPath( convertPath( state, state->getPath(), Qt::OddEvenFill ), m_currentBrush ); +} + +void ArthurOutputDev::clip(GfxState *state) +{ + m_painter->setClipPath(convertPath( state, state->getPath(), Qt::WindingFill ) ); +} + +void ArthurOutputDev::eoClip(GfxState *state) +{ + m_painter->setClipPath(convertPath( state, state->getPath(), Qt::OddEvenFill ) ); +} + +void ArthurOutputDev::drawChar(GfxState *state, double x, double y, + double dx, double dy, + double originX, double originY, + CharCode code, int nBytes, Unicode *u, int uLen) { +#ifdef HAVE_SPLASH + double x1, y1; + double x2, y2; +// SplashPath *path; + int render; + + if (m_needFontUpdate) { + updateFont(state); + } + if (!m_font) { + return; + } + + // check for invisible text -- this is used by Acrobat Capture + render = state->getRender(); + if (render == 3) { + return; + } + + x -= originX; + y -= originY; + + // fill + if (!(render & 1)) { + SplashPath * fontPath; + fontPath = m_font->getGlyphPath(code); + if (fontPath) { + QPainterPath qPath; + qPath.setFillRule(Qt::WindingFill); + for (int i = 0; i < fontPath->length; ++i) { + if (fontPath->flags[i] & splashPathFirst) { + state->transform(fontPath->pts[i].x+x, -fontPath->pts[i].y+y, &x1, &y1); + qPath.moveTo(x1,y1); + } else if (fontPath->flags[i] & splashPathCurve) { + state->transform(fontPath->pts[i].x+x, -fontPath->pts[i].y+y, &x1, &y1); + state->transform(fontPath->pts[i+1].x+x, -fontPath->pts[i+1].y+y, &x2, &y2); + qPath.quadTo(x1,y1,x2,y2); + ++i; + } + // FIXME fix this + // else if (fontPath->flags[i] & splashPathArcCW) { + // qDebug() << "Need to implement arc"; + // } + else { + state->transform(fontPath->pts[i].x+x, -fontPath->pts[i].y+y, &x1, &y1); + qPath.lineTo(x1,y1); + } + if (fontPath->flags[i] & splashPathLast) { + qPath.closeSubpath(); + } + } + GfxRGB rgb; + QColor brushColour = m_currentBrush.color(); + state->getFillRGB(&rgb); + brushColour.setRgbF(colToDbl(rgb.r), colToDbl(rgb.g), colToDbl(rgb.b), state->getFillOpacity()); + m_painter->setBrush(brushColour); + QColor penColour = m_currentPen.color(); + state->getStrokeRGB(&rgb); + penColour.setRgbF(colToDbl(rgb.r), colToDbl(rgb.g), colToDbl(rgb.b), state->getStrokeOpacity()); + m_painter->setPen(penColour); + m_painter->drawPath( qPath ); + delete fontPath; + } + } + + // stroke + if ((render & 3) == 1 || (render & 3) == 2) { + qDebug() << "no stroke"; + /* + if ((path = m_font->getGlyphPath(code))) { + path->offset((SplashCoord)x1, (SplashCoord)y1); + splash->stroke(path); + delete path; + } + */ + } + + // clip + if (render & 4) { + qDebug() << "no clip"; + /* + path = m_font->getGlyphPath(code); + path->offset((SplashCoord)x1, (SplashCoord)y1); + if (textClipPath) { + textClipPath->append(path); + delete path; + } else { + textClipPath = path; + } + */ + } +#endif +} + +GBool ArthurOutputDev::beginType3Char(GfxState *state, double x, double y, + double dx, double dy, + CharCode code, Unicode *u, int uLen) +{ + return gFalse; +} + +void ArthurOutputDev::endType3Char(GfxState *state) +{ +} + +void ArthurOutputDev::type3D0(GfxState *state, double wx, double wy) +{ +} + +void ArthurOutputDev::type3D1(GfxState *state, double wx, double wy, + double llx, double lly, double urx, double ury) +{ +} + +void ArthurOutputDev::endTextObject(GfxState *state) +{ +} + + +void ArthurOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool interpolate, GBool inlineImg) +{ + qDebug() << "drawImageMask"; +#if 0 + unsigned char *buffer; + unsigned char *dest; + cairo_surface_t *image; + cairo_pattern_t *pattern; + int x, y; + ImageStream *imgStr; + Guchar *pix; + double *ctm; + cairo_matrix_t matrix; + int invert_bit; + int row_stride; + + row_stride = (width + 3) & ~3; + buffer = (unsigned char *) malloc (height * row_stride); + if (buffer == NULL) { + error(-1, "Unable to allocate memory for image."); + return; + } + + /* TODO: Do we want to cache these? */ + imgStr = new ImageStream(str, width, 1, 1); + imgStr->reset(); + + invert_bit = invert ? 1 : 0; + + for (y = 0; y < height; y++) { + pix = imgStr->getLine(); + dest = buffer + y * row_stride; + for (x = 0; x < width; x++) { + + if (pix[x] ^ invert_bit) + *dest++ = 0; + else + *dest++ = 255; + } + } + + image = cairo_image_surface_create_for_data (buffer, CAIRO_FORMAT_A8, + width, height, row_stride); + if (image == NULL) + return; + pattern = cairo_pattern_create_for_surface (image); + if (pattern == NULL) + return; + + ctm = state->getCTM(); + LOG (printf ("drawImageMask %dx%d, matrix: %f, %f, %f, %f, %f, %f\n", + width, height, ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5])); + matrix.xx = ctm[0] / width; + matrix.xy = -ctm[2] / height; + matrix.yx = ctm[1] / width; + matrix.yy = -ctm[3] / height; + matrix.x0 = ctm[2] + ctm[4]; + matrix.y0 = ctm[3] + ctm[5]; + cairo_matrix_invert (&matrix); + cairo_pattern_set_matrix (pattern, &matrix); + + cairo_pattern_set_filter (pattern, CAIRO_FILTER_BEST); + /* FIXME: Doesn't the image mask support any colorspace? */ + cairo_set_source_rgb (cairo, fill_color.r, fill_color.g, fill_color.b); + cairo_mask (cairo, pattern); + + cairo_pattern_destroy (pattern); + cairo_surface_destroy (image); + free (buffer); + imgStr->close (); + delete imgStr; +#endif +} + +//TODO: lots more work here. +void ArthurOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, int *maskColors, GBool inlineImg) +{ + unsigned int *data; + unsigned int *line; + int x, y; + ImageStream *imgStr; + Guchar *pix; + int i; + double *ctm; + QMatrix matrix; + QImage image; + int stride; + + /* TODO: Do we want to cache these? */ + imgStr = new ImageStream(str, width, + colorMap->getNumPixelComps(), + colorMap->getBits()); + imgStr->reset(); + + image = QImage(width, height, QImage::Format_ARGB32); + data = (unsigned int *)image.bits(); + stride = image.bytesPerLine()/4; + for (y = 0; y < height; y++) { + pix = imgStr->getLine(); + line = data+y*stride; + colorMap->getRGBLine(pix, line, width); + + if (maskColors) { + for (x = 0; x < width; x++) { + for (i = 0; i < colorMap->getNumPixelComps(); ++i) { + if (pix[i] < maskColors[2*i] * 255|| + pix[i] > maskColors[2*i+1] * 255) { + *line = *line | 0xff000000; + break; + } + } + pix += colorMap->getNumPixelComps(); + line++; + } + } else { + for (x = 0; x < width; x++) { *line = *line | 0xff000000; line++; } + } + } + + ctm = state->getCTM(); + matrix.setMatrix(ctm[0] / width, ctm[1] / width, -ctm[2] / height, -ctm[3] / height, ctm[2] + ctm[4], ctm[3] + ctm[5]); + + m_painter->setMatrix(matrix, true); + m_painter->drawImage( QPoint(0,0), image ); + delete imgStr; + +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/ArthurOutputDev.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/ArthurOutputDev.h new file mode 100644 index 00000000000..ed631a053ef --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/ArthurOutputDev.h @@ -0,0 +1,169 @@ +//======================================================================== +// +// ArthurOutputDev.h +// +// Copyright 2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> +// Copyright (C) 2005 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009, 2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2010 Pino Toscano <pino@kde.org> +// Copyright (C) 2011 Andreas Hartmetz <ahartmetz@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef ARTHUROUTPUTDEV_H +#define ARTHUROUTPUTDEV_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" +#include "OutputDev.h" +#include "GfxState.h" + +#include <QtGui/QPainter> + +class GfxState; +class GfxPath; +class Gfx8BitFont; +struct GfxRGB; + +class SplashFont; +class SplashFontEngine; +struct SplashGlyphBitmap; + +//------------------------------------------------------------------------ +// ArthurOutputDev - Qt 4 QPainter renderer +//------------------------------------------------------------------------ + +class ArthurOutputDev: public OutputDev { +public: + /** + * Describes how fonts are distorted (aka hinted) to fit the pixel grid. + * More hinting means sharper edges and less adherence to the true letter shapes. + */ + enum FontHinting { + NoHinting = 0, ///< Font shapes are left unchanged + SlightHinting, ///< Font shapes are distorted vertically only + FullHinting ///< Font shapes are distorted horizontally and vertically + }; + + // Constructor. + ArthurOutputDev(QPainter *painter ); + + // Destructor. + virtual ~ArthurOutputDev(); + + void setFontHinting(FontHinting hinting) { m_fontHinting = hinting; } + + //----- get info about output device + + // Does this device use upside-down coordinates? + // (Upside-down means (0,0) is the top left corner of the page.) + virtual GBool upsideDown() { return gTrue; } + + // Does this device use drawChar() or drawString()? + virtual GBool useDrawChar() { return gTrue; } + + // Does this device use beginType3Char/endType3Char? Otherwise, + // text in Type 3 fonts will be drawn with drawChar/drawString. + virtual GBool interpretType3Chars() { return gTrue; } + + //----- initialization and control + + // Start a page. + virtual void startPage(int pageNum, GfxState *state); + + // End a page. + virtual void endPage(); + + //----- save/restore graphics state + virtual void saveState(GfxState *state); + virtual void restoreState(GfxState *state); + + //----- update graphics state + virtual void updateAll(GfxState *state); + virtual void updateCTM(GfxState *state, double m11, double m12, + double m21, double m22, double m31, double m32); + virtual void updateLineDash(GfxState *state); + virtual void updateFlatness(GfxState *state); + virtual void updateLineJoin(GfxState *state); + virtual void updateLineCap(GfxState *state); + virtual void updateMiterLimit(GfxState *state); + virtual void updateLineWidth(GfxState *state); + virtual void updateFillColor(GfxState *state); + virtual void updateStrokeColor(GfxState *state); + virtual void updateFillOpacity(GfxState *state); + virtual void updateStrokeOpacity(GfxState *state); + + //----- update text state + virtual void updateFont(GfxState *state); + + //----- path painting + virtual void stroke(GfxState *state); + virtual void fill(GfxState *state); + virtual void eoFill(GfxState *state); + + //----- path clipping + virtual void clip(GfxState *state); + virtual void eoClip(GfxState *state); + + //----- text drawing + // virtual void drawString(GfxState *state, GooString *s); + virtual void drawChar(GfxState *state, double x, double y, + double dx, double dy, + double originX, double originY, + CharCode code, int nBytes, Unicode *u, int uLen); + virtual GBool beginType3Char(GfxState *state, double x, double y, + double dx, double dy, + CharCode code, Unicode *u, int uLen); + virtual void endType3Char(GfxState *state); + virtual void endTextObject(GfxState *state); + + //----- image drawing + virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool interpolate, GBool inlineImg); + virtual void drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap *colorMap, + GBool interpolate, int *maskColors, GBool inlineImg); + + //----- Type 3 font operators + virtual void type3D0(GfxState *state, double wx, double wy); + virtual void type3D1(GfxState *state, double wx, double wy, + double llx, double lly, double urx, double ury); + + //----- special access + + // Called to indicate that a new PDF document has been loaded. + void startDoc(XRef *xrefA); + + GBool isReverseVideo() { return gFalse; } + +private: + QPainter *m_painter; + FontHinting m_fontHinting; + QFont m_currentFont; + QPen m_currentPen; + QBrush m_currentBrush; + GBool m_needFontUpdate; // set when the font needs to be updated + SplashFontEngine *m_fontEngine; + SplashFont *m_font; // current font + XRef *xref; // xref table for current document +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFont.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFont.cc new file mode 100644 index 00000000000..329ff62fc39 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFont.cc @@ -0,0 +1,65 @@ +//======================================================================== +// +// BuiltinFont.cc +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include <string.h> +#include "goo/gmem.h" +#include "FontEncodingTables.h" +#include "BuiltinFont.h" + +//------------------------------------------------------------------------ + +BuiltinFontWidths::BuiltinFontWidths(BuiltinFontWidth *widths, int sizeA) { + int i, h; + + size = sizeA; + tab = (BuiltinFontWidth **)gmallocn(size, sizeof(BuiltinFontWidth *)); + for (i = 0; i < size; ++i) { + tab[i] = NULL; + } + for (i = 0; i < sizeA; ++i) { + h = hash(widths[i].name); + widths[i].next = tab[h]; + tab[h] = &widths[i]; + } +} + +BuiltinFontWidths::~BuiltinFontWidths() { + gfree(tab); +} + +GBool BuiltinFontWidths::getWidth(char *name, Gushort *width) { + int h; + BuiltinFontWidth *p; + + h = hash(name); + for (p = tab[h]; p; p = p->next) { + if (!strcmp(p->name, name)) { + *width = p->width; + return gTrue; + } + } + return gFalse; +} + +int BuiltinFontWidths::hash(char *name) { + char *p; + unsigned int h; + + h = 0; + for (p = name; *p; ++p) { + h = 17 * h + (int)(*p & 0xff); + } + return (int)(h % size); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFont.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFont.h new file mode 100644 index 00000000000..8652034fd63 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFont.h @@ -0,0 +1,55 @@ +//======================================================================== +// +// BuiltinFont.h +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef BUILTINFONT_H +#define BUILTINFONT_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" + +struct BuiltinFont; +class BuiltinFontWidths; + +//------------------------------------------------------------------------ + +struct BuiltinFont { + char *name; + char **defaultBaseEnc; + short ascent; + short descent; + short bbox[4]; + BuiltinFontWidths *widths; +}; + +//------------------------------------------------------------------------ + +struct BuiltinFontWidth { + char *name; + Gushort width; + BuiltinFontWidth *next; +}; + +class BuiltinFontWidths { +public: + + BuiltinFontWidths(BuiltinFontWidth *widths, int sizeA); + ~BuiltinFontWidths(); + GBool getWidth(char *name, Gushort *width); + +private: + + int hash(char *name); + + BuiltinFontWidth **tab; + int size; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFontTables.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFontTables.cc new file mode 100644 index 00000000000..5115b7bcf13 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFontTables.cc @@ -0,0 +1,4284 @@ +//======================================================================== +// +// BuiltinFontTables.cc +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#include <config.h> +#include <stdlib.h> +#include "FontEncodingTables.h" +#include "BuiltinFontTables.h" + +static BuiltinFontWidth courierWidthsTab[] = { + { "Ntilde", 600, NULL }, + { "rcaron", 600, NULL }, + { "kcommaaccent", 600, NULL }, + { "Ncommaaccent", 600, NULL }, + { "Zacute", 600, NULL }, + { "comma", 600, NULL }, + { "cedilla", 600, NULL }, + { "plusminus", 600, NULL }, + { "circumflex", 600, NULL }, + { "dotaccent", 600, NULL }, + { "edotaccent", 600, NULL }, + { "asciitilde", 600, NULL }, + { "colon", 600, NULL }, + { "onehalf", 600, NULL }, + { "dollar", 600, NULL }, + { "Lcaron", 600, NULL }, + { "ntilde", 600, NULL }, + { "Aogonek", 600, NULL }, + { "ncommaaccent", 600, NULL }, + { "minus", 600, NULL }, + { "Iogonek", 600, NULL }, + { "zacute", 600, NULL }, + { "yen", 600, NULL }, + { "space", 600, NULL }, + { "Omacron", 600, NULL }, + { "questiondown", 600, NULL }, + { "emdash", 600, NULL }, + { "Agrave", 600, NULL }, + { "three", 600, NULL }, + { "numbersign", 600, NULL }, + { "lcaron", 600, NULL }, + { "A", 600, NULL }, + { "B", 600, NULL }, + { "C", 600, NULL }, + { "aogonek", 600, NULL }, + { "D", 600, NULL }, + { "E", 600, NULL }, + { "onequarter", 600, NULL }, + { "F", 600, NULL }, + { "G", 600, NULL }, + { "H", 600, NULL }, + { "I", 600, NULL }, + { "J", 600, NULL }, + { "K", 600, NULL }, + { "iogonek", 600, NULL }, + { "L", 600, NULL }, + { "backslash", 600, NULL }, + { "periodcentered", 600, NULL }, + { "M", 600, NULL }, + { "N", 600, NULL }, + { "omacron", 600, NULL }, + { "Tcommaaccent", 600, NULL }, + { "O", 600, NULL }, + { "P", 600, NULL }, + { "Q", 600, NULL }, + { "Uhungarumlaut", 600, NULL }, + { "R", 600, NULL }, + { "Aacute", 600, NULL }, + { "caron", 600, NULL }, + { "S", 600, NULL }, + { "T", 600, NULL }, + { "U", 600, NULL }, + { "agrave", 600, NULL }, + { "V", 600, NULL }, + { "W", 600, NULL }, + { "equal", 600, NULL }, + { "question", 600, NULL }, + { "X", 600, NULL }, + { "Y", 600, NULL }, + { "Z", 600, NULL }, + { "four", 600, NULL }, + { "a", 600, NULL }, + { "Gcommaaccent", 600, NULL }, + { "b", 600, NULL }, + { "c", 600, NULL }, + { "d", 600, NULL }, + { "e", 600, NULL }, + { "f", 600, NULL }, + { "g", 600, NULL }, + { "bullet", 600, NULL }, + { "h", 600, NULL }, + { "i", 600, NULL }, + { "Oslash", 600, NULL }, + { "dagger", 600, NULL }, + { "j", 600, NULL }, + { "k", 600, NULL }, + { "l", 600, NULL }, + { "m", 600, NULL }, + { "n", 600, NULL }, + { "tcommaaccent", 600, NULL }, + { "o", 600, NULL }, + { "ordfeminine", 600, NULL }, + { "ring", 600, NULL }, + { "p", 600, NULL }, + { "q", 600, NULL }, + { "uhungarumlaut", 600, NULL }, + { "r", 600, NULL }, + { "twosuperior", 600, NULL }, + { "aacute", 600, NULL }, + { "s", 600, NULL }, + { "OE", 600, NULL }, + { "t", 600, NULL }, + { "divide", 600, NULL }, + { "u", 600, NULL }, + { "Ccaron", 600, NULL }, + { "v", 600, NULL }, + { "w", 600, NULL }, + { "x", 600, NULL }, + { "y", 600, NULL }, + { "z", 600, NULL }, + { "Gbreve", 600, NULL }, + { "commaaccent", 600, NULL }, + { "hungarumlaut", 600, NULL }, + { "Idotaccent", 600, NULL }, + { "Nacute", 600, NULL }, + { "quotedbl", 600, NULL }, + { "gcommaaccent", 600, NULL }, + { "mu", 600, NULL }, + { "greaterequal", 600, NULL }, + { "Scaron", 600, NULL }, + { "Lslash", 600, NULL }, + { "semicolon", 600, NULL }, + { "oslash", 600, NULL }, + { "lessequal", 600, NULL }, + { "lozenge", 600, NULL }, + { "parenright", 600, NULL }, + { "ccaron", 600, NULL }, + { "Ecircumflex", 600, NULL }, + { "gbreve", 600, NULL }, + { "trademark", 600, NULL }, + { "daggerdbl", 600, NULL }, + { "nacute", 600, NULL }, + { "macron", 600, NULL }, + { "Otilde", 600, NULL }, + { "Emacron", 600, NULL }, + { "ellipsis", 600, NULL }, + { "scaron", 600, NULL }, + { "AE", 600, NULL }, + { "Ucircumflex", 600, NULL }, + { "lslash", 600, NULL }, + { "quotedblleft", 600, NULL }, + { "hyphen", 600, NULL }, + { "guilsinglright", 600, NULL }, + { "quotesingle", 600, NULL }, + { "eight", 600, NULL }, + { "exclamdown", 600, NULL }, + { "endash", 600, NULL }, + { "oe", 600, NULL }, + { "Abreve", 600, NULL }, + { "Umacron", 600, NULL }, + { "ecircumflex", 600, NULL }, + { "Adieresis", 600, NULL }, + { "copyright", 600, NULL }, + { "Egrave", 600, NULL }, + { "slash", 600, NULL }, + { "Edieresis", 600, NULL }, + { "otilde", 600, NULL }, + { "Idieresis", 600, NULL }, + { "parenleft", 600, NULL }, + { "one", 600, NULL }, + { "emacron", 600, NULL }, + { "Odieresis", 600, NULL }, + { "ucircumflex", 600, NULL }, + { "bracketleft", 600, NULL }, + { "Ugrave", 600, NULL }, + { "quoteright", 600, NULL }, + { "Udieresis", 600, NULL }, + { "perthousand", 600, NULL }, + { "Ydieresis", 600, NULL }, + { "umacron", 600, NULL }, + { "abreve", 600, NULL }, + { "Eacute", 600, NULL }, + { "adieresis", 600, NULL }, + { "egrave", 600, NULL }, + { "edieresis", 600, NULL }, + { "idieresis", 600, NULL }, + { "Eth", 600, NULL }, + { "ae", 600, NULL }, + { "asterisk", 600, NULL }, + { "odieresis", 600, NULL }, + { "Uacute", 600, NULL }, + { "ugrave", 600, NULL }, + { "five", 600, NULL }, + { "nine", 600, NULL }, + { "udieresis", 600, NULL }, + { "Zcaron", 600, NULL }, + { "Scommaaccent", 600, NULL }, + { "threequarters", 600, NULL }, + { "guillemotright", 600, NULL }, + { "Ccedilla", 600, NULL }, + { "ydieresis", 600, NULL }, + { "tilde", 600, NULL }, + { "at", 600, NULL }, + { "eacute", 600, NULL }, + { "underscore", 600, NULL }, + { "Euro", 600, NULL }, + { "Dcroat", 600, NULL }, + { "zero", 600, NULL }, + { "multiply", 600, NULL }, + { "eth", 600, NULL }, + { "Scedilla", 600, NULL }, + { "Racute", 600, NULL }, + { "Ograve", 600, NULL }, + { "partialdiff", 600, NULL }, + { "uacute", 600, NULL }, + { "braceleft", 600, NULL }, + { "Thorn", 600, NULL }, + { "zcaron", 600, NULL }, + { "scommaaccent", 600, NULL }, + { "ccedilla", 600, NULL }, + { "Dcaron", 600, NULL }, + { "dcroat", 600, NULL }, + { "scedilla", 600, NULL }, + { "Oacute", 600, NULL }, + { "Ocircumflex", 600, NULL }, + { "ogonek", 600, NULL }, + { "ograve", 600, NULL }, + { "racute", 600, NULL }, + { "Tcaron", 600, NULL }, + { "Eogonek", 600, NULL }, + { "thorn", 600, NULL }, + { "degree", 600, NULL }, + { "registered", 600, NULL }, + { "radical", 600, NULL }, + { "Aring", 600, NULL }, + { "percent", 600, NULL }, + { "six", 600, NULL }, + { "paragraph", 600, NULL }, + { "dcaron", 600, NULL }, + { "Uogonek", 600, NULL }, + { "two", 600, NULL }, + { "summation", 600, NULL }, + { "Igrave", 600, NULL }, + { "Lacute", 600, NULL }, + { "ocircumflex", 600, NULL }, + { "oacute", 600, NULL }, + { "Uring", 600, NULL }, + { "Lcommaaccent", 600, NULL }, + { "tcaron", 600, NULL }, + { "eogonek", 600, NULL }, + { "Delta", 600, NULL }, + { "Ohungarumlaut", 600, NULL }, + { "asciicircum", 600, NULL }, + { "aring", 600, NULL }, + { "grave", 600, NULL }, + { "uogonek", 600, NULL }, + { "bracketright", 600, NULL }, + { "ampersand", 600, NULL }, + { "Iacute", 600, NULL }, + { "lacute", 600, NULL }, + { "igrave", 600, NULL }, + { "Ncaron", 600, NULL }, + { "plus", 600, NULL }, + { "uring", 600, NULL }, + { "quotesinglbase", 600, NULL }, + { "lcommaaccent", 600, NULL }, + { "Yacute", 600, NULL }, + { "ohungarumlaut", 600, NULL }, + { "threesuperior", 600, NULL }, + { "acute", 600, NULL }, + { "section", 600, NULL }, + { "dieresis", 600, NULL }, + { "quotedblbase", 600, NULL }, + { "iacute", 600, NULL }, + { "ncaron", 600, NULL }, + { "florin", 600, NULL }, + { "yacute", 600, NULL }, + { "Rcommaaccent", 600, NULL }, + { "fi", 600, NULL }, + { "fl", 600, NULL }, + { "Acircumflex", 600, NULL }, + { "Cacute", 600, NULL }, + { "Icircumflex", 600, NULL }, + { "guillemotleft", 600, NULL }, + { "germandbls", 600, NULL }, + { "seven", 600, NULL }, + { "Amacron", 600, NULL }, + { "Sacute", 600, NULL }, + { "ordmasculine", 600, NULL }, + { "dotlessi", 600, NULL }, + { "sterling", 600, NULL }, + { "notequal", 600, NULL }, + { "Imacron", 600, NULL }, + { "rcommaaccent", 600, NULL }, + { "Zdotaccent", 600, NULL }, + { "acircumflex", 600, NULL }, + { "cacute", 600, NULL }, + { "Ecaron", 600, NULL }, + { "braceright", 600, NULL }, + { "icircumflex", 600, NULL }, + { "quotedblright", 600, NULL }, + { "amacron", 600, NULL }, + { "sacute", 600, NULL }, + { "imacron", 600, NULL }, + { "cent", 600, NULL }, + { "currency", 600, NULL }, + { "logicalnot", 600, NULL }, + { "zdotaccent", 600, NULL }, + { "Atilde", 600, NULL }, + { "breve", 600, NULL }, + { "bar", 600, NULL }, + { "fraction", 600, NULL }, + { "less", 600, NULL }, + { "ecaron", 600, NULL }, + { "guilsinglleft", 600, NULL }, + { "exclam", 600, NULL }, + { "period", 600, NULL }, + { "Rcaron", 600, NULL }, + { "Kcommaaccent", 600, NULL }, + { "greater", 600, NULL }, + { "atilde", 600, NULL }, + { "brokenbar", 600, NULL }, + { "quoteleft", 600, NULL }, + { "Edotaccent", 600, NULL }, + { "onesuperior", 600, NULL } +}; + +static BuiltinFontWidth courierBoldWidthsTab[] = { + { "Ntilde", 600, NULL }, + { "rcaron", 600, NULL }, + { "kcommaaccent", 600, NULL }, + { "Ncommaaccent", 600, NULL }, + { "Zacute", 600, NULL }, + { "comma", 600, NULL }, + { "cedilla", 600, NULL }, + { "plusminus", 600, NULL }, + { "circumflex", 600, NULL }, + { "dotaccent", 600, NULL }, + { "edotaccent", 600, NULL }, + { "asciitilde", 600, NULL }, + { "colon", 600, NULL }, + { "onehalf", 600, NULL }, + { "dollar", 600, NULL }, + { "Lcaron", 600, NULL }, + { "ntilde", 600, NULL }, + { "Aogonek", 600, NULL }, + { "ncommaaccent", 600, NULL }, + { "minus", 600, NULL }, + { "Iogonek", 600, NULL }, + { "zacute", 600, NULL }, + { "yen", 600, NULL }, + { "space", 600, NULL }, + { "Omacron", 600, NULL }, + { "questiondown", 600, NULL }, + { "emdash", 600, NULL }, + { "Agrave", 600, NULL }, + { "three", 600, NULL }, + { "numbersign", 600, NULL }, + { "lcaron", 600, NULL }, + { "A", 600, NULL }, + { "B", 600, NULL }, + { "C", 600, NULL }, + { "aogonek", 600, NULL }, + { "D", 600, NULL }, + { "E", 600, NULL }, + { "onequarter", 600, NULL }, + { "F", 600, NULL }, + { "G", 600, NULL }, + { "H", 600, NULL }, + { "I", 600, NULL }, + { "J", 600, NULL }, + { "K", 600, NULL }, + { "iogonek", 600, NULL }, + { "backslash", 600, NULL }, + { "L", 600, NULL }, + { "periodcentered", 600, NULL }, + { "M", 600, NULL }, + { "N", 600, NULL }, + { "omacron", 600, NULL }, + { "Tcommaaccent", 600, NULL }, + { "O", 600, NULL }, + { "P", 600, NULL }, + { "Q", 600, NULL }, + { "Uhungarumlaut", 600, NULL }, + { "R", 600, NULL }, + { "Aacute", 600, NULL }, + { "caron", 600, NULL }, + { "S", 600, NULL }, + { "T", 600, NULL }, + { "U", 600, NULL }, + { "agrave", 600, NULL }, + { "V", 600, NULL }, + { "W", 600, NULL }, + { "X", 600, NULL }, + { "question", 600, NULL }, + { "equal", 600, NULL }, + { "Y", 600, NULL }, + { "Z", 600, NULL }, + { "four", 600, NULL }, + { "a", 600, NULL }, + { "Gcommaaccent", 600, NULL }, + { "b", 600, NULL }, + { "c", 600, NULL }, + { "d", 600, NULL }, + { "e", 600, NULL }, + { "f", 600, NULL }, + { "g", 600, NULL }, + { "bullet", 600, NULL }, + { "h", 600, NULL }, + { "i", 600, NULL }, + { "Oslash", 600, NULL }, + { "dagger", 600, NULL }, + { "j", 600, NULL }, + { "k", 600, NULL }, + { "l", 600, NULL }, + { "m", 600, NULL }, + { "n", 600, NULL }, + { "tcommaaccent", 600, NULL }, + { "o", 600, NULL }, + { "ordfeminine", 600, NULL }, + { "ring", 600, NULL }, + { "p", 600, NULL }, + { "q", 600, NULL }, + { "uhungarumlaut", 600, NULL }, + { "r", 600, NULL }, + { "twosuperior", 600, NULL }, + { "aacute", 600, NULL }, + { "s", 600, NULL }, + { "OE", 600, NULL }, + { "t", 600, NULL }, + { "divide", 600, NULL }, + { "u", 600, NULL }, + { "Ccaron", 600, NULL }, + { "v", 600, NULL }, + { "w", 600, NULL }, + { "x", 600, NULL }, + { "y", 600, NULL }, + { "z", 600, NULL }, + { "Gbreve", 600, NULL }, + { "commaaccent", 600, NULL }, + { "hungarumlaut", 600, NULL }, + { "Idotaccent", 600, NULL }, + { "Nacute", 600, NULL }, + { "quotedbl", 600, NULL }, + { "gcommaaccent", 600, NULL }, + { "mu", 600, NULL }, + { "greaterequal", 600, NULL }, + { "Scaron", 600, NULL }, + { "Lslash", 600, NULL }, + { "semicolon", 600, NULL }, + { "oslash", 600, NULL }, + { "lessequal", 600, NULL }, + { "lozenge", 600, NULL }, + { "parenright", 600, NULL }, + { "ccaron", 600, NULL }, + { "Ecircumflex", 600, NULL }, + { "gbreve", 600, NULL }, + { "trademark", 600, NULL }, + { "daggerdbl", 600, NULL }, + { "nacute", 600, NULL }, + { "macron", 600, NULL }, + { "Otilde", 600, NULL }, + { "Emacron", 600, NULL }, + { "ellipsis", 600, NULL }, + { "scaron", 600, NULL }, + { "AE", 600, NULL }, + { "Ucircumflex", 600, NULL }, + { "lslash", 600, NULL }, + { "quotedblleft", 600, NULL }, + { "guilsinglright", 600, NULL }, + { "hyphen", 600, NULL }, + { "quotesingle", 600, NULL }, + { "eight", 600, NULL }, + { "exclamdown", 600, NULL }, + { "endash", 600, NULL }, + { "oe", 600, NULL }, + { "Abreve", 600, NULL }, + { "Umacron", 600, NULL }, + { "ecircumflex", 600, NULL }, + { "Adieresis", 600, NULL }, + { "copyright", 600, NULL }, + { "Egrave", 600, NULL }, + { "slash", 600, NULL }, + { "Edieresis", 600, NULL }, + { "otilde", 600, NULL }, + { "Idieresis", 600, NULL }, + { "parenleft", 600, NULL }, + { "one", 600, NULL }, + { "emacron", 600, NULL }, + { "Odieresis", 600, NULL }, + { "ucircumflex", 600, NULL }, + { "bracketleft", 600, NULL }, + { "Ugrave", 600, NULL }, + { "quoteright", 600, NULL }, + { "Udieresis", 600, NULL }, + { "perthousand", 600, NULL }, + { "Ydieresis", 600, NULL }, + { "umacron", 600, NULL }, + { "abreve", 600, NULL }, + { "Eacute", 600, NULL }, + { "adieresis", 600, NULL }, + { "egrave", 600, NULL }, + { "edieresis", 600, NULL }, + { "idieresis", 600, NULL }, + { "Eth", 600, NULL }, + { "ae", 600, NULL }, + { "asterisk", 600, NULL }, + { "odieresis", 600, NULL }, + { "Uacute", 600, NULL }, + { "ugrave", 600, NULL }, + { "nine", 600, NULL }, + { "five", 600, NULL }, + { "udieresis", 600, NULL }, + { "Zcaron", 600, NULL }, + { "Scommaaccent", 600, NULL }, + { "threequarters", 600, NULL }, + { "guillemotright", 600, NULL }, + { "Ccedilla", 600, NULL }, + { "ydieresis", 600, NULL }, + { "tilde", 600, NULL }, + { "at", 600, NULL }, + { "eacute", 600, NULL }, + { "underscore", 600, NULL }, + { "Euro", 600, NULL }, + { "Dcroat", 600, NULL }, + { "multiply", 600, NULL }, + { "zero", 600, NULL }, + { "eth", 600, NULL }, + { "Scedilla", 600, NULL }, + { "Ograve", 600, NULL }, + { "Racute", 600, NULL }, + { "partialdiff", 600, NULL }, + { "uacute", 600, NULL }, + { "braceleft", 600, NULL }, + { "Thorn", 600, NULL }, + { "zcaron", 600, NULL }, + { "scommaaccent", 600, NULL }, + { "ccedilla", 600, NULL }, + { "Dcaron", 600, NULL }, + { "dcroat", 600, NULL }, + { "Ocircumflex", 600, NULL }, + { "Oacute", 600, NULL }, + { "scedilla", 600, NULL }, + { "ogonek", 600, NULL }, + { "ograve", 600, NULL }, + { "racute", 600, NULL }, + { "Tcaron", 600, NULL }, + { "Eogonek", 600, NULL }, + { "thorn", 600, NULL }, + { "degree", 600, NULL }, + { "registered", 600, NULL }, + { "radical", 600, NULL }, + { "Aring", 600, NULL }, + { "percent", 600, NULL }, + { "six", 600, NULL }, + { "paragraph", 600, NULL }, + { "dcaron", 600, NULL }, + { "Uogonek", 600, NULL }, + { "two", 600, NULL }, + { "summation", 600, NULL }, + { "Igrave", 600, NULL }, + { "Lacute", 600, NULL }, + { "ocircumflex", 600, NULL }, + { "oacute", 600, NULL }, + { "Uring", 600, NULL }, + { "Lcommaaccent", 600, NULL }, + { "tcaron", 600, NULL }, + { "eogonek", 600, NULL }, + { "Delta", 600, NULL }, + { "Ohungarumlaut", 600, NULL }, + { "asciicircum", 600, NULL }, + { "aring", 600, NULL }, + { "grave", 600, NULL }, + { "uogonek", 600, NULL }, + { "bracketright", 600, NULL }, + { "Iacute", 600, NULL }, + { "ampersand", 600, NULL }, + { "igrave", 600, NULL }, + { "lacute", 600, NULL }, + { "Ncaron", 600, NULL }, + { "plus", 600, NULL }, + { "uring", 600, NULL }, + { "quotesinglbase", 600, NULL }, + { "lcommaaccent", 600, NULL }, + { "Yacute", 600, NULL }, + { "ohungarumlaut", 600, NULL }, + { "threesuperior", 600, NULL }, + { "acute", 600, NULL }, + { "section", 600, NULL }, + { "dieresis", 600, NULL }, + { "iacute", 600, NULL }, + { "quotedblbase", 600, NULL }, + { "ncaron", 600, NULL }, + { "florin", 600, NULL }, + { "yacute", 600, NULL }, + { "Rcommaaccent", 600, NULL }, + { "fi", 600, NULL }, + { "fl", 600, NULL }, + { "Acircumflex", 600, NULL }, + { "Cacute", 600, NULL }, + { "Icircumflex", 600, NULL }, + { "guillemotleft", 600, NULL }, + { "germandbls", 600, NULL }, + { "Amacron", 600, NULL }, + { "seven", 600, NULL }, + { "Sacute", 600, NULL }, + { "ordmasculine", 600, NULL }, + { "dotlessi", 600, NULL }, + { "sterling", 600, NULL }, + { "notequal", 600, NULL }, + { "Imacron", 600, NULL }, + { "rcommaaccent", 600, NULL }, + { "Zdotaccent", 600, NULL }, + { "acircumflex", 600, NULL }, + { "cacute", 600, NULL }, + { "Ecaron", 600, NULL }, + { "icircumflex", 600, NULL }, + { "braceright", 600, NULL }, + { "quotedblright", 600, NULL }, + { "amacron", 600, NULL }, + { "sacute", 600, NULL }, + { "imacron", 600, NULL }, + { "cent", 600, NULL }, + { "currency", 600, NULL }, + { "logicalnot", 600, NULL }, + { "zdotaccent", 600, NULL }, + { "Atilde", 600, NULL }, + { "breve", 600, NULL }, + { "bar", 600, NULL }, + { "fraction", 600, NULL }, + { "less", 600, NULL }, + { "ecaron", 600, NULL }, + { "guilsinglleft", 600, NULL }, + { "exclam", 600, NULL }, + { "period", 600, NULL }, + { "Rcaron", 600, NULL }, + { "Kcommaaccent", 600, NULL }, + { "greater", 600, NULL }, + { "atilde", 600, NULL }, + { "brokenbar", 600, NULL }, + { "quoteleft", 600, NULL }, + { "Edotaccent", 600, NULL }, + { "onesuperior", 600, NULL } +}; + +static BuiltinFontWidth courierBoldObliqueWidthsTab[] = { + { "Ntilde", 600, NULL }, + { "rcaron", 600, NULL }, + { "kcommaaccent", 600, NULL }, + { "Ncommaaccent", 600, NULL }, + { "Zacute", 600, NULL }, + { "comma", 600, NULL }, + { "cedilla", 600, NULL }, + { "plusminus", 600, NULL }, + { "circumflex", 600, NULL }, + { "dotaccent", 600, NULL }, + { "edotaccent", 600, NULL }, + { "asciitilde", 600, NULL }, + { "colon", 600, NULL }, + { "onehalf", 600, NULL }, + { "dollar", 600, NULL }, + { "Lcaron", 600, NULL }, + { "ntilde", 600, NULL }, + { "Aogonek", 600, NULL }, + { "ncommaaccent", 600, NULL }, + { "minus", 600, NULL }, + { "Iogonek", 600, NULL }, + { "zacute", 600, NULL }, + { "yen", 600, NULL }, + { "space", 600, NULL }, + { "Omacron", 600, NULL }, + { "questiondown", 600, NULL }, + { "emdash", 600, NULL }, + { "Agrave", 600, NULL }, + { "three", 600, NULL }, + { "numbersign", 600, NULL }, + { "lcaron", 600, NULL }, + { "A", 600, NULL }, + { "B", 600, NULL }, + { "C", 600, NULL }, + { "aogonek", 600, NULL }, + { "D", 600, NULL }, + { "E", 600, NULL }, + { "onequarter", 600, NULL }, + { "F", 600, NULL }, + { "G", 600, NULL }, + { "H", 600, NULL }, + { "I", 600, NULL }, + { "J", 600, NULL }, + { "K", 600, NULL }, + { "iogonek", 600, NULL }, + { "backslash", 600, NULL }, + { "L", 600, NULL }, + { "periodcentered", 600, NULL }, + { "M", 600, NULL }, + { "N", 600, NULL }, + { "omacron", 600, NULL }, + { "Tcommaaccent", 600, NULL }, + { "O", 600, NULL }, + { "P", 600, NULL }, + { "Q", 600, NULL }, + { "Uhungarumlaut", 600, NULL }, + { "R", 600, NULL }, + { "Aacute", 600, NULL }, + { "caron", 600, NULL }, + { "S", 600, NULL }, + { "T", 600, NULL }, + { "U", 600, NULL }, + { "agrave", 600, NULL }, + { "V", 600, NULL }, + { "W", 600, NULL }, + { "X", 600, NULL }, + { "question", 600, NULL }, + { "equal", 600, NULL }, + { "Y", 600, NULL }, + { "Z", 600, NULL }, + { "four", 600, NULL }, + { "a", 600, NULL }, + { "Gcommaaccent", 600, NULL }, + { "b", 600, NULL }, + { "c", 600, NULL }, + { "d", 600, NULL }, + { "e", 600, NULL }, + { "f", 600, NULL }, + { "g", 600, NULL }, + { "bullet", 600, NULL }, + { "h", 600, NULL }, + { "i", 600, NULL }, + { "Oslash", 600, NULL }, + { "dagger", 600, NULL }, + { "j", 600, NULL }, + { "k", 600, NULL }, + { "l", 600, NULL }, + { "m", 600, NULL }, + { "n", 600, NULL }, + { "tcommaaccent", 600, NULL }, + { "o", 600, NULL }, + { "ordfeminine", 600, NULL }, + { "ring", 600, NULL }, + { "p", 600, NULL }, + { "q", 600, NULL }, + { "uhungarumlaut", 600, NULL }, + { "r", 600, NULL }, + { "twosuperior", 600, NULL }, + { "aacute", 600, NULL }, + { "s", 600, NULL }, + { "OE", 600, NULL }, + { "t", 600, NULL }, + { "divide", 600, NULL }, + { "u", 600, NULL }, + { "Ccaron", 600, NULL }, + { "v", 600, NULL }, + { "w", 600, NULL }, + { "x", 600, NULL }, + { "y", 600, NULL }, + { "z", 600, NULL }, + { "Gbreve", 600, NULL }, + { "commaaccent", 600, NULL }, + { "hungarumlaut", 600, NULL }, + { "Idotaccent", 600, NULL }, + { "Nacute", 600, NULL }, + { "quotedbl", 600, NULL }, + { "gcommaaccent", 600, NULL }, + { "mu", 600, NULL }, + { "greaterequal", 600, NULL }, + { "Scaron", 600, NULL }, + { "Lslash", 600, NULL }, + { "semicolon", 600, NULL }, + { "oslash", 600, NULL }, + { "lessequal", 600, NULL }, + { "lozenge", 600, NULL }, + { "parenright", 600, NULL }, + { "ccaron", 600, NULL }, + { "Ecircumflex", 600, NULL }, + { "gbreve", 600, NULL }, + { "trademark", 600, NULL }, + { "daggerdbl", 600, NULL }, + { "nacute", 600, NULL }, + { "macron", 600, NULL }, + { "Otilde", 600, NULL }, + { "Emacron", 600, NULL }, + { "ellipsis", 600, NULL }, + { "scaron", 600, NULL }, + { "AE", 600, NULL }, + { "Ucircumflex", 600, NULL }, + { "lslash", 600, NULL }, + { "quotedblleft", 600, NULL }, + { "guilsinglright", 600, NULL }, + { "hyphen", 600, NULL }, + { "quotesingle", 600, NULL }, + { "eight", 600, NULL }, + { "exclamdown", 600, NULL }, + { "endash", 600, NULL }, + { "oe", 600, NULL }, + { "Abreve", 600, NULL }, + { "Umacron", 600, NULL }, + { "ecircumflex", 600, NULL }, + { "Adieresis", 600, NULL }, + { "copyright", 600, NULL }, + { "Egrave", 600, NULL }, + { "slash", 600, NULL }, + { "Edieresis", 600, NULL }, + { "otilde", 600, NULL }, + { "Idieresis", 600, NULL }, + { "parenleft", 600, NULL }, + { "one", 600, NULL }, + { "emacron", 600, NULL }, + { "Odieresis", 600, NULL }, + { "ucircumflex", 600, NULL }, + { "bracketleft", 600, NULL }, + { "Ugrave", 600, NULL }, + { "quoteright", 600, NULL }, + { "Udieresis", 600, NULL }, + { "perthousand", 600, NULL }, + { "Ydieresis", 600, NULL }, + { "umacron", 600, NULL }, + { "abreve", 600, NULL }, + { "Eacute", 600, NULL }, + { "adieresis", 600, NULL }, + { "egrave", 600, NULL }, + { "edieresis", 600, NULL }, + { "idieresis", 600, NULL }, + { "Eth", 600, NULL }, + { "ae", 600, NULL }, + { "asterisk", 600, NULL }, + { "odieresis", 600, NULL }, + { "Uacute", 600, NULL }, + { "ugrave", 600, NULL }, + { "nine", 600, NULL }, + { "five", 600, NULL }, + { "udieresis", 600, NULL }, + { "Zcaron", 600, NULL }, + { "Scommaaccent", 600, NULL }, + { "threequarters", 600, NULL }, + { "guillemotright", 600, NULL }, + { "Ccedilla", 600, NULL }, + { "ydieresis", 600, NULL }, + { "tilde", 600, NULL }, + { "at", 600, NULL }, + { "eacute", 600, NULL }, + { "underscore", 600, NULL }, + { "Euro", 600, NULL }, + { "Dcroat", 600, NULL }, + { "multiply", 600, NULL }, + { "zero", 600, NULL }, + { "eth", 600, NULL }, + { "Scedilla", 600, NULL }, + { "Ograve", 600, NULL }, + { "Racute", 600, NULL }, + { "partialdiff", 600, NULL }, + { "uacute", 600, NULL }, + { "braceleft", 600, NULL }, + { "Thorn", 600, NULL }, + { "zcaron", 600, NULL }, + { "scommaaccent", 600, NULL }, + { "ccedilla", 600, NULL }, + { "Dcaron", 600, NULL }, + { "dcroat", 600, NULL }, + { "Ocircumflex", 600, NULL }, + { "Oacute", 600, NULL }, + { "scedilla", 600, NULL }, + { "ogonek", 600, NULL }, + { "ograve", 600, NULL }, + { "racute", 600, NULL }, + { "Tcaron", 600, NULL }, + { "Eogonek", 600, NULL }, + { "thorn", 600, NULL }, + { "degree", 600, NULL }, + { "registered", 600, NULL }, + { "radical", 600, NULL }, + { "Aring", 600, NULL }, + { "percent", 600, NULL }, + { "six", 600, NULL }, + { "paragraph", 600, NULL }, + { "dcaron", 600, NULL }, + { "Uogonek", 600, NULL }, + { "two", 600, NULL }, + { "summation", 600, NULL }, + { "Igrave", 600, NULL }, + { "Lacute", 600, NULL }, + { "ocircumflex", 600, NULL }, + { "oacute", 600, NULL }, + { "Uring", 600, NULL }, + { "Lcommaaccent", 600, NULL }, + { "tcaron", 600, NULL }, + { "eogonek", 600, NULL }, + { "Delta", 600, NULL }, + { "Ohungarumlaut", 600, NULL }, + { "asciicircum", 600, NULL }, + { "aring", 600, NULL }, + { "grave", 600, NULL }, + { "uogonek", 600, NULL }, + { "bracketright", 600, NULL }, + { "Iacute", 600, NULL }, + { "ampersand", 600, NULL }, + { "igrave", 600, NULL }, + { "lacute", 600, NULL }, + { "Ncaron", 600, NULL }, + { "plus", 600, NULL }, + { "uring", 600, NULL }, + { "quotesinglbase", 600, NULL }, + { "lcommaaccent", 600, NULL }, + { "Yacute", 600, NULL }, + { "ohungarumlaut", 600, NULL }, + { "threesuperior", 600, NULL }, + { "acute", 600, NULL }, + { "section", 600, NULL }, + { "dieresis", 600, NULL }, + { "iacute", 600, NULL }, + { "quotedblbase", 600, NULL }, + { "ncaron", 600, NULL }, + { "florin", 600, NULL }, + { "yacute", 600, NULL }, + { "Rcommaaccent", 600, NULL }, + { "fi", 600, NULL }, + { "fl", 600, NULL }, + { "Acircumflex", 600, NULL }, + { "Cacute", 600, NULL }, + { "Icircumflex", 600, NULL }, + { "guillemotleft", 600, NULL }, + { "germandbls", 600, NULL }, + { "Amacron", 600, NULL }, + { "seven", 600, NULL }, + { "Sacute", 600, NULL }, + { "ordmasculine", 600, NULL }, + { "dotlessi", 600, NULL }, + { "sterling", 600, NULL }, + { "notequal", 600, NULL }, + { "Imacron", 600, NULL }, + { "rcommaaccent", 600, NULL }, + { "Zdotaccent", 600, NULL }, + { "acircumflex", 600, NULL }, + { "cacute", 600, NULL }, + { "Ecaron", 600, NULL }, + { "icircumflex", 600, NULL }, + { "braceright", 600, NULL }, + { "quotedblright", 600, NULL }, + { "amacron", 600, NULL }, + { "sacute", 600, NULL }, + { "imacron", 600, NULL }, + { "cent", 600, NULL }, + { "currency", 600, NULL }, + { "logicalnot", 600, NULL }, + { "zdotaccent", 600, NULL }, + { "Atilde", 600, NULL }, + { "breve", 600, NULL }, + { "bar", 600, NULL }, + { "fraction", 600, NULL }, + { "less", 600, NULL }, + { "ecaron", 600, NULL }, + { "guilsinglleft", 600, NULL }, + { "exclam", 600, NULL }, + { "period", 600, NULL }, + { "Rcaron", 600, NULL }, + { "Kcommaaccent", 600, NULL }, + { "greater", 600, NULL }, + { "atilde", 600, NULL }, + { "brokenbar", 600, NULL }, + { "quoteleft", 600, NULL }, + { "Edotaccent", 600, NULL }, + { "onesuperior", 600, NULL } +}; + +static BuiltinFontWidth courierObliqueWidthsTab[] = { + { "Ntilde", 600, NULL }, + { "rcaron", 600, NULL }, + { "kcommaaccent", 600, NULL }, + { "Ncommaaccent", 600, NULL }, + { "Zacute", 600, NULL }, + { "comma", 600, NULL }, + { "cedilla", 600, NULL }, + { "plusminus", 600, NULL }, + { "circumflex", 600, NULL }, + { "dotaccent", 600, NULL }, + { "edotaccent", 600, NULL }, + { "asciitilde", 600, NULL }, + { "colon", 600, NULL }, + { "onehalf", 600, NULL }, + { "dollar", 600, NULL }, + { "Lcaron", 600, NULL }, + { "ntilde", 600, NULL }, + { "Aogonek", 600, NULL }, + { "ncommaaccent", 600, NULL }, + { "minus", 600, NULL }, + { "Iogonek", 600, NULL }, + { "zacute", 600, NULL }, + { "yen", 600, NULL }, + { "space", 600, NULL }, + { "Omacron", 600, NULL }, + { "questiondown", 600, NULL }, + { "emdash", 600, NULL }, + { "Agrave", 600, NULL }, + { "three", 600, NULL }, + { "numbersign", 600, NULL }, + { "lcaron", 600, NULL }, + { "A", 600, NULL }, + { "B", 600, NULL }, + { "C", 600, NULL }, + { "aogonek", 600, NULL }, + { "D", 600, NULL }, + { "E", 600, NULL }, + { "onequarter", 600, NULL }, + { "F", 600, NULL }, + { "G", 600, NULL }, + { "H", 600, NULL }, + { "I", 600, NULL }, + { "J", 600, NULL }, + { "K", 600, NULL }, + { "iogonek", 600, NULL }, + { "backslash", 600, NULL }, + { "L", 600, NULL }, + { "periodcentered", 600, NULL }, + { "M", 600, NULL }, + { "N", 600, NULL }, + { "omacron", 600, NULL }, + { "Tcommaaccent", 600, NULL }, + { "O", 600, NULL }, + { "P", 600, NULL }, + { "Q", 600, NULL }, + { "Uhungarumlaut", 600, NULL }, + { "R", 600, NULL }, + { "Aacute", 600, NULL }, + { "caron", 600, NULL }, + { "S", 600, NULL }, + { "T", 600, NULL }, + { "U", 600, NULL }, + { "agrave", 600, NULL }, + { "V", 600, NULL }, + { "W", 600, NULL }, + { "X", 600, NULL }, + { "question", 600, NULL }, + { "equal", 600, NULL }, + { "Y", 600, NULL }, + { "Z", 600, NULL }, + { "four", 600, NULL }, + { "a", 600, NULL }, + { "Gcommaaccent", 600, NULL }, + { "b", 600, NULL }, + { "c", 600, NULL }, + { "d", 600, NULL }, + { "e", 600, NULL }, + { "f", 600, NULL }, + { "g", 600, NULL }, + { "bullet", 600, NULL }, + { "h", 600, NULL }, + { "i", 600, NULL }, + { "Oslash", 600, NULL }, + { "dagger", 600, NULL }, + { "j", 600, NULL }, + { "k", 600, NULL }, + { "l", 600, NULL }, + { "m", 600, NULL }, + { "n", 600, NULL }, + { "tcommaaccent", 600, NULL }, + { "o", 600, NULL }, + { "ordfeminine", 600, NULL }, + { "ring", 600, NULL }, + { "p", 600, NULL }, + { "q", 600, NULL }, + { "uhungarumlaut", 600, NULL }, + { "r", 600, NULL }, + { "twosuperior", 600, NULL }, + { "aacute", 600, NULL }, + { "s", 600, NULL }, + { "OE", 600, NULL }, + { "t", 600, NULL }, + { "divide", 600, NULL }, + { "u", 600, NULL }, + { "Ccaron", 600, NULL }, + { "v", 600, NULL }, + { "w", 600, NULL }, + { "x", 600, NULL }, + { "y", 600, NULL }, + { "z", 600, NULL }, + { "Gbreve", 600, NULL }, + { "commaaccent", 600, NULL }, + { "hungarumlaut", 600, NULL }, + { "Idotaccent", 600, NULL }, + { "Nacute", 600, NULL }, + { "quotedbl", 600, NULL }, + { "gcommaaccent", 600, NULL }, + { "mu", 600, NULL }, + { "greaterequal", 600, NULL }, + { "Scaron", 600, NULL }, + { "Lslash", 600, NULL }, + { "semicolon", 600, NULL }, + { "oslash", 600, NULL }, + { "lessequal", 600, NULL }, + { "lozenge", 600, NULL }, + { "parenright", 600, NULL }, + { "ccaron", 600, NULL }, + { "Ecircumflex", 600, NULL }, + { "gbreve", 600, NULL }, + { "trademark", 600, NULL }, + { "daggerdbl", 600, NULL }, + { "nacute", 600, NULL }, + { "macron", 600, NULL }, + { "Otilde", 600, NULL }, + { "Emacron", 600, NULL }, + { "ellipsis", 600, NULL }, + { "scaron", 600, NULL }, + { "AE", 600, NULL }, + { "Ucircumflex", 600, NULL }, + { "lslash", 600, NULL }, + { "quotedblleft", 600, NULL }, + { "guilsinglright", 600, NULL }, + { "hyphen", 600, NULL }, + { "quotesingle", 600, NULL }, + { "eight", 600, NULL }, + { "exclamdown", 600, NULL }, + { "endash", 600, NULL }, + { "oe", 600, NULL }, + { "Abreve", 600, NULL }, + { "Umacron", 600, NULL }, + { "ecircumflex", 600, NULL }, + { "Adieresis", 600, NULL }, + { "copyright", 600, NULL }, + { "Egrave", 600, NULL }, + { "slash", 600, NULL }, + { "Edieresis", 600, NULL }, + { "otilde", 600, NULL }, + { "Idieresis", 600, NULL }, + { "parenleft", 600, NULL }, + { "one", 600, NULL }, + { "emacron", 600, NULL }, + { "Odieresis", 600, NULL }, + { "ucircumflex", 600, NULL }, + { "bracketleft", 600, NULL }, + { "Ugrave", 600, NULL }, + { "quoteright", 600, NULL }, + { "Udieresis", 600, NULL }, + { "perthousand", 600, NULL }, + { "Ydieresis", 600, NULL }, + { "umacron", 600, NULL }, + { "abreve", 600, NULL }, + { "Eacute", 600, NULL }, + { "adieresis", 600, NULL }, + { "egrave", 600, NULL }, + { "edieresis", 600, NULL }, + { "idieresis", 600, NULL }, + { "Eth", 600, NULL }, + { "ae", 600, NULL }, + { "asterisk", 600, NULL }, + { "odieresis", 600, NULL }, + { "Uacute", 600, NULL }, + { "ugrave", 600, NULL }, + { "nine", 600, NULL }, + { "five", 600, NULL }, + { "udieresis", 600, NULL }, + { "Zcaron", 600, NULL }, + { "Scommaaccent", 600, NULL }, + { "threequarters", 600, NULL }, + { "guillemotright", 600, NULL }, + { "Ccedilla", 600, NULL }, + { "ydieresis", 600, NULL }, + { "tilde", 600, NULL }, + { "at", 600, NULL }, + { "eacute", 600, NULL }, + { "underscore", 600, NULL }, + { "Euro", 600, NULL }, + { "Dcroat", 600, NULL }, + { "multiply", 600, NULL }, + { "zero", 600, NULL }, + { "eth", 600, NULL }, + { "Scedilla", 600, NULL }, + { "Ograve", 600, NULL }, + { "Racute", 600, NULL }, + { "partialdiff", 600, NULL }, + { "uacute", 600, NULL }, + { "braceleft", 600, NULL }, + { "Thorn", 600, NULL }, + { "zcaron", 600, NULL }, + { "scommaaccent", 600, NULL }, + { "ccedilla", 600, NULL }, + { "Dcaron", 600, NULL }, + { "dcroat", 600, NULL }, + { "Ocircumflex", 600, NULL }, + { "Oacute", 600, NULL }, + { "scedilla", 600, NULL }, + { "ogonek", 600, NULL }, + { "ograve", 600, NULL }, + { "racute", 600, NULL }, + { "Tcaron", 600, NULL }, + { "Eogonek", 600, NULL }, + { "thorn", 600, NULL }, + { "degree", 600, NULL }, + { "registered", 600, NULL }, + { "radical", 600, NULL }, + { "Aring", 600, NULL }, + { "percent", 600, NULL }, + { "six", 600, NULL }, + { "paragraph", 600, NULL }, + { "dcaron", 600, NULL }, + { "Uogonek", 600, NULL }, + { "two", 600, NULL }, + { "summation", 600, NULL }, + { "Igrave", 600, NULL }, + { "Lacute", 600, NULL }, + { "ocircumflex", 600, NULL }, + { "oacute", 600, NULL }, + { "Uring", 600, NULL }, + { "Lcommaaccent", 600, NULL }, + { "tcaron", 600, NULL }, + { "eogonek", 600, NULL }, + { "Delta", 600, NULL }, + { "Ohungarumlaut", 600, NULL }, + { "asciicircum", 600, NULL }, + { "aring", 600, NULL }, + { "grave", 600, NULL }, + { "uogonek", 600, NULL }, + { "bracketright", 600, NULL }, + { "Iacute", 600, NULL }, + { "ampersand", 600, NULL }, + { "igrave", 600, NULL }, + { "lacute", 600, NULL }, + { "Ncaron", 600, NULL }, + { "plus", 600, NULL }, + { "uring", 600, NULL }, + { "quotesinglbase", 600, NULL }, + { "lcommaaccent", 600, NULL }, + { "Yacute", 600, NULL }, + { "ohungarumlaut", 600, NULL }, + { "threesuperior", 600, NULL }, + { "acute", 600, NULL }, + { "section", 600, NULL }, + { "dieresis", 600, NULL }, + { "iacute", 600, NULL }, + { "quotedblbase", 600, NULL }, + { "ncaron", 600, NULL }, + { "florin", 600, NULL }, + { "yacute", 600, NULL }, + { "Rcommaaccent", 600, NULL }, + { "fi", 600, NULL }, + { "fl", 600, NULL }, + { "Acircumflex", 600, NULL }, + { "Cacute", 600, NULL }, + { "Icircumflex", 600, NULL }, + { "guillemotleft", 600, NULL }, + { "germandbls", 600, NULL }, + { "Amacron", 600, NULL }, + { "seven", 600, NULL }, + { "Sacute", 600, NULL }, + { "ordmasculine", 600, NULL }, + { "dotlessi", 600, NULL }, + { "sterling", 600, NULL }, + { "notequal", 600, NULL }, + { "Imacron", 600, NULL }, + { "rcommaaccent", 600, NULL }, + { "Zdotaccent", 600, NULL }, + { "acircumflex", 600, NULL }, + { "cacute", 600, NULL }, + { "Ecaron", 600, NULL }, + { "icircumflex", 600, NULL }, + { "braceright", 600, NULL }, + { "quotedblright", 600, NULL }, + { "amacron", 600, NULL }, + { "sacute", 600, NULL }, + { "imacron", 600, NULL }, + { "cent", 600, NULL }, + { "currency", 600, NULL }, + { "logicalnot", 600, NULL }, + { "zdotaccent", 600, NULL }, + { "Atilde", 600, NULL }, + { "breve", 600, NULL }, + { "bar", 600, NULL }, + { "fraction", 600, NULL }, + { "less", 600, NULL }, + { "ecaron", 600, NULL }, + { "guilsinglleft", 600, NULL }, + { "exclam", 600, NULL }, + { "period", 600, NULL }, + { "Rcaron", 600, NULL }, + { "Kcommaaccent", 600, NULL }, + { "greater", 600, NULL }, + { "atilde", 600, NULL }, + { "brokenbar", 600, NULL }, + { "quoteleft", 600, NULL }, + { "Edotaccent", 600, NULL }, + { "onesuperior", 600, NULL } +}; + +static BuiltinFontWidth helveticaWidthsTab[] = { + { "Ntilde", 722, NULL }, + { "rcaron", 333, NULL }, + { "kcommaaccent", 500, NULL }, + { "Ncommaaccent", 722, NULL }, + { "Zacute", 611, NULL }, + { "comma", 278, NULL }, + { "cedilla", 333, NULL }, + { "plusminus", 584, NULL }, + { "circumflex", 333, NULL }, + { "dotaccent", 333, NULL }, + { "edotaccent", 556, NULL }, + { "asciitilde", 584, NULL }, + { "colon", 278, NULL }, + { "onehalf", 834, NULL }, + { "dollar", 556, NULL }, + { "Lcaron", 556, NULL }, + { "ntilde", 556, NULL }, + { "Aogonek", 667, NULL }, + { "ncommaaccent", 556, NULL }, + { "minus", 584, NULL }, + { "Iogonek", 278, NULL }, + { "zacute", 500, NULL }, + { "yen", 556, NULL }, + { "space", 278, NULL }, + { "Omacron", 778, NULL }, + { "questiondown", 611, NULL }, + { "emdash", 1000, NULL }, + { "Agrave", 667, NULL }, + { "three", 556, NULL }, + { "numbersign", 556, NULL }, + { "lcaron", 299, NULL }, + { "A", 667, NULL }, + { "B", 667, NULL }, + { "C", 722, NULL }, + { "aogonek", 556, NULL }, + { "D", 722, NULL }, + { "E", 667, NULL }, + { "onequarter", 834, NULL }, + { "F", 611, NULL }, + { "G", 778, NULL }, + { "H", 722, NULL }, + { "I", 278, NULL }, + { "J", 500, NULL }, + { "K", 667, NULL }, + { "iogonek", 222, NULL }, + { "backslash", 278, NULL }, + { "L", 556, NULL }, + { "periodcentered", 278, NULL }, + { "M", 833, NULL }, + { "N", 722, NULL }, + { "omacron", 556, NULL }, + { "Tcommaaccent", 611, NULL }, + { "O", 778, NULL }, + { "P", 667, NULL }, + { "Q", 778, NULL }, + { "Uhungarumlaut", 722, NULL }, + { "R", 722, NULL }, + { "Aacute", 667, NULL }, + { "caron", 333, NULL }, + { "S", 667, NULL }, + { "T", 611, NULL }, + { "U", 722, NULL }, + { "agrave", 556, NULL }, + { "V", 667, NULL }, + { "W", 944, NULL }, + { "X", 667, NULL }, + { "question", 556, NULL }, + { "equal", 584, NULL }, + { "Y", 667, NULL }, + { "Z", 611, NULL }, + { "four", 556, NULL }, + { "a", 556, NULL }, + { "Gcommaaccent", 778, NULL }, + { "b", 556, NULL }, + { "c", 500, NULL }, + { "d", 556, NULL }, + { "e", 556, NULL }, + { "f", 278, NULL }, + { "g", 556, NULL }, + { "bullet", 350, NULL }, + { "h", 556, NULL }, + { "i", 222, NULL }, + { "Oslash", 778, NULL }, + { "dagger", 556, NULL }, + { "j", 222, NULL }, + { "k", 500, NULL }, + { "l", 222, NULL }, + { "m", 833, NULL }, + { "n", 556, NULL }, + { "tcommaaccent", 278, NULL }, + { "o", 556, NULL }, + { "ordfeminine", 370, NULL }, + { "ring", 333, NULL }, + { "p", 556, NULL }, + { "q", 556, NULL }, + { "uhungarumlaut", 556, NULL }, + { "r", 333, NULL }, + { "twosuperior", 333, NULL }, + { "aacute", 556, NULL }, + { "s", 500, NULL }, + { "OE", 1000, NULL }, + { "t", 278, NULL }, + { "divide", 584, NULL }, + { "u", 556, NULL }, + { "Ccaron", 722, NULL }, + { "v", 500, NULL }, + { "w", 722, NULL }, + { "x", 500, NULL }, + { "y", 500, NULL }, + { "z", 500, NULL }, + { "Gbreve", 778, NULL }, + { "commaaccent", 250, NULL }, + { "hungarumlaut", 333, NULL }, + { "Idotaccent", 278, NULL }, + { "Nacute", 722, NULL }, + { "quotedbl", 355, NULL }, + { "gcommaaccent", 556, NULL }, + { "mu", 556, NULL }, + { "greaterequal", 549, NULL }, + { "Scaron", 667, NULL }, + { "Lslash", 556, NULL }, + { "semicolon", 278, NULL }, + { "oslash", 611, NULL }, + { "lessequal", 549, NULL }, + { "lozenge", 471, NULL }, + { "parenright", 333, NULL }, + { "ccaron", 500, NULL }, + { "Ecircumflex", 667, NULL }, + { "gbreve", 556, NULL }, + { "trademark", 1000, NULL }, + { "daggerdbl", 556, NULL }, + { "nacute", 556, NULL }, + { "macron", 333, NULL }, + { "Otilde", 778, NULL }, + { "Emacron", 667, NULL }, + { "ellipsis", 1000, NULL }, + { "scaron", 500, NULL }, + { "AE", 1000, NULL }, + { "Ucircumflex", 722, NULL }, + { "lslash", 222, NULL }, + { "quotedblleft", 333, NULL }, + { "guilsinglright", 333, NULL }, + { "hyphen", 333, NULL }, + { "quotesingle", 191, NULL }, + { "eight", 556, NULL }, + { "exclamdown", 333, NULL }, + { "endash", 556, NULL }, + { "oe", 944, NULL }, + { "Abreve", 667, NULL }, + { "Umacron", 722, NULL }, + { "ecircumflex", 556, NULL }, + { "Adieresis", 667, NULL }, + { "copyright", 737, NULL }, + { "Egrave", 667, NULL }, + { "slash", 278, NULL }, + { "Edieresis", 667, NULL }, + { "otilde", 556, NULL }, + { "Idieresis", 278, NULL }, + { "parenleft", 333, NULL }, + { "one", 556, NULL }, + { "emacron", 556, NULL }, + { "Odieresis", 778, NULL }, + { "ucircumflex", 556, NULL }, + { "bracketleft", 278, NULL }, + { "Ugrave", 722, NULL }, + { "quoteright", 222, NULL }, + { "Udieresis", 722, NULL }, + { "perthousand", 1000, NULL }, + { "Ydieresis", 667, NULL }, + { "umacron", 556, NULL }, + { "abreve", 556, NULL }, + { "Eacute", 667, NULL }, + { "adieresis", 556, NULL }, + { "egrave", 556, NULL }, + { "edieresis", 556, NULL }, + { "idieresis", 278, NULL }, + { "Eth", 722, NULL }, + { "ae", 889, NULL }, + { "asterisk", 389, NULL }, + { "odieresis", 556, NULL }, + { "Uacute", 722, NULL }, + { "ugrave", 556, NULL }, + { "nine", 556, NULL }, + { "five", 556, NULL }, + { "udieresis", 556, NULL }, + { "Zcaron", 611, NULL }, + { "Scommaaccent", 667, NULL }, + { "threequarters", 834, NULL }, + { "guillemotright", 556, NULL }, + { "Ccedilla", 722, NULL }, + { "ydieresis", 500, NULL }, + { "tilde", 333, NULL }, + { "at", 1015, NULL }, + { "eacute", 556, NULL }, + { "underscore", 556, NULL }, + { "Euro", 556, NULL }, + { "Dcroat", 722, NULL }, + { "multiply", 584, NULL }, + { "zero", 556, NULL }, + { "eth", 556, NULL }, + { "Scedilla", 667, NULL }, + { "Ograve", 778, NULL }, + { "Racute", 722, NULL }, + { "partialdiff", 476, NULL }, + { "uacute", 556, NULL }, + { "braceleft", 334, NULL }, + { "Thorn", 667, NULL }, + { "zcaron", 500, NULL }, + { "scommaaccent", 500, NULL }, + { "ccedilla", 500, NULL }, + { "Dcaron", 722, NULL }, + { "dcroat", 556, NULL }, + { "Ocircumflex", 778, NULL }, + { "Oacute", 778, NULL }, + { "scedilla", 500, NULL }, + { "ogonek", 333, NULL }, + { "ograve", 556, NULL }, + { "racute", 333, NULL }, + { "Tcaron", 611, NULL }, + { "Eogonek", 667, NULL }, + { "thorn", 556, NULL }, + { "degree", 400, NULL }, + { "registered", 737, NULL }, + { "radical", 453, NULL }, + { "Aring", 667, NULL }, + { "percent", 889, NULL }, + { "six", 556, NULL }, + { "paragraph", 537, NULL }, + { "dcaron", 643, NULL }, + { "Uogonek", 722, NULL }, + { "two", 556, NULL }, + { "summation", 600, NULL }, + { "Igrave", 278, NULL }, + { "Lacute", 556, NULL }, + { "ocircumflex", 556, NULL }, + { "oacute", 556, NULL }, + { "Uring", 722, NULL }, + { "Lcommaaccent", 556, NULL }, + { "tcaron", 317, NULL }, + { "eogonek", 556, NULL }, + { "Delta", 612, NULL }, + { "Ohungarumlaut", 778, NULL }, + { "asciicircum", 469, NULL }, + { "aring", 556, NULL }, + { "grave", 333, NULL }, + { "uogonek", 556, NULL }, + { "bracketright", 278, NULL }, + { "Iacute", 278, NULL }, + { "ampersand", 667, NULL }, + { "igrave", 278, NULL }, + { "lacute", 222, NULL }, + { "Ncaron", 722, NULL }, + { "plus", 584, NULL }, + { "uring", 556, NULL }, + { "quotesinglbase", 222, NULL }, + { "lcommaaccent", 222, NULL }, + { "Yacute", 667, NULL }, + { "ohungarumlaut", 556, NULL }, + { "threesuperior", 333, NULL }, + { "acute", 333, NULL }, + { "section", 556, NULL }, + { "dieresis", 333, NULL }, + { "iacute", 278, NULL }, + { "quotedblbase", 333, NULL }, + { "ncaron", 556, NULL }, + { "florin", 556, NULL }, + { "yacute", 500, NULL }, + { "Rcommaaccent", 722, NULL }, + { "fi", 500, NULL }, + { "fl", 500, NULL }, + { "Acircumflex", 667, NULL }, + { "Cacute", 722, NULL }, + { "Icircumflex", 278, NULL }, + { "guillemotleft", 556, NULL }, + { "germandbls", 611, NULL }, + { "Amacron", 667, NULL }, + { "seven", 556, NULL }, + { "Sacute", 667, NULL }, + { "ordmasculine", 365, NULL }, + { "dotlessi", 278, NULL }, + { "sterling", 556, NULL }, + { "notequal", 549, NULL }, + { "Imacron", 278, NULL }, + { "rcommaaccent", 333, NULL }, + { "Zdotaccent", 611, NULL }, + { "acircumflex", 556, NULL }, + { "cacute", 500, NULL }, + { "Ecaron", 667, NULL }, + { "icircumflex", 278, NULL }, + { "braceright", 334, NULL }, + { "quotedblright", 333, NULL }, + { "amacron", 556, NULL }, + { "sacute", 500, NULL }, + { "imacron", 278, NULL }, + { "cent", 556, NULL }, + { "currency", 556, NULL }, + { "logicalnot", 584, NULL }, + { "zdotaccent", 500, NULL }, + { "Atilde", 667, NULL }, + { "breve", 333, NULL }, + { "bar", 260, NULL }, + { "fraction", 167, NULL }, + { "less", 584, NULL }, + { "ecaron", 556, NULL }, + { "guilsinglleft", 333, NULL }, + { "exclam", 278, NULL }, + { "period", 278, NULL }, + { "Rcaron", 722, NULL }, + { "Kcommaaccent", 667, NULL }, + { "greater", 584, NULL }, + { "atilde", 556, NULL }, + { "brokenbar", 260, NULL }, + { "quoteleft", 222, NULL }, + { "Edotaccent", 667, NULL }, + { "onesuperior", 333, NULL } +}; + +static BuiltinFontWidth helveticaBoldWidthsTab[] = { + { "Ntilde", 722, NULL }, + { "rcaron", 389, NULL }, + { "kcommaaccent", 556, NULL }, + { "Ncommaaccent", 722, NULL }, + { "Zacute", 611, NULL }, + { "comma", 278, NULL }, + { "cedilla", 333, NULL }, + { "plusminus", 584, NULL }, + { "circumflex", 333, NULL }, + { "dotaccent", 333, NULL }, + { "edotaccent", 556, NULL }, + { "asciitilde", 584, NULL }, + { "colon", 333, NULL }, + { "onehalf", 834, NULL }, + { "dollar", 556, NULL }, + { "Lcaron", 611, NULL }, + { "ntilde", 611, NULL }, + { "Aogonek", 722, NULL }, + { "ncommaaccent", 611, NULL }, + { "minus", 584, NULL }, + { "Iogonek", 278, NULL }, + { "zacute", 500, NULL }, + { "yen", 556, NULL }, + { "space", 278, NULL }, + { "Omacron", 778, NULL }, + { "questiondown", 611, NULL }, + { "emdash", 1000, NULL }, + { "Agrave", 722, NULL }, + { "three", 556, NULL }, + { "numbersign", 556, NULL }, + { "lcaron", 400, NULL }, + { "A", 722, NULL }, + { "B", 722, NULL }, + { "C", 722, NULL }, + { "aogonek", 556, NULL }, + { "D", 722, NULL }, + { "E", 667, NULL }, + { "onequarter", 834, NULL }, + { "F", 611, NULL }, + { "G", 778, NULL }, + { "H", 722, NULL }, + { "I", 278, NULL }, + { "J", 556, NULL }, + { "K", 722, NULL }, + { "iogonek", 278, NULL }, + { "backslash", 278, NULL }, + { "L", 611, NULL }, + { "periodcentered", 278, NULL }, + { "M", 833, NULL }, + { "N", 722, NULL }, + { "omacron", 611, NULL }, + { "Tcommaaccent", 611, NULL }, + { "O", 778, NULL }, + { "P", 667, NULL }, + { "Q", 778, NULL }, + { "Uhungarumlaut", 722, NULL }, + { "R", 722, NULL }, + { "Aacute", 722, NULL }, + { "caron", 333, NULL }, + { "S", 667, NULL }, + { "T", 611, NULL }, + { "U", 722, NULL }, + { "agrave", 556, NULL }, + { "V", 667, NULL }, + { "W", 944, NULL }, + { "X", 667, NULL }, + { "question", 611, NULL }, + { "equal", 584, NULL }, + { "Y", 667, NULL }, + { "Z", 611, NULL }, + { "four", 556, NULL }, + { "a", 556, NULL }, + { "Gcommaaccent", 778, NULL }, + { "b", 611, NULL }, + { "c", 556, NULL }, + { "d", 611, NULL }, + { "e", 556, NULL }, + { "f", 333, NULL }, + { "g", 611, NULL }, + { "bullet", 350, NULL }, + { "h", 611, NULL }, + { "i", 278, NULL }, + { "Oslash", 778, NULL }, + { "dagger", 556, NULL }, + { "j", 278, NULL }, + { "k", 556, NULL }, + { "l", 278, NULL }, + { "m", 889, NULL }, + { "n", 611, NULL }, + { "tcommaaccent", 333, NULL }, + { "o", 611, NULL }, + { "ordfeminine", 370, NULL }, + { "ring", 333, NULL }, + { "p", 611, NULL }, + { "q", 611, NULL }, + { "uhungarumlaut", 611, NULL }, + { "r", 389, NULL }, + { "twosuperior", 333, NULL }, + { "aacute", 556, NULL }, + { "s", 556, NULL }, + { "OE", 1000, NULL }, + { "t", 333, NULL }, + { "divide", 584, NULL }, + { "u", 611, NULL }, + { "Ccaron", 722, NULL }, + { "v", 556, NULL }, + { "w", 778, NULL }, + { "x", 556, NULL }, + { "y", 556, NULL }, + { "z", 500, NULL }, + { "Gbreve", 778, NULL }, + { "commaaccent", 250, NULL }, + { "hungarumlaut", 333, NULL }, + { "Idotaccent", 278, NULL }, + { "Nacute", 722, NULL }, + { "quotedbl", 474, NULL }, + { "gcommaaccent", 611, NULL }, + { "mu", 611, NULL }, + { "greaterequal", 549, NULL }, + { "Scaron", 667, NULL }, + { "Lslash", 611, NULL }, + { "semicolon", 333, NULL }, + { "oslash", 611, NULL }, + { "lessequal", 549, NULL }, + { "lozenge", 494, NULL }, + { "parenright", 333, NULL }, + { "ccaron", 556, NULL }, + { "Ecircumflex", 667, NULL }, + { "gbreve", 611, NULL }, + { "trademark", 1000, NULL }, + { "daggerdbl", 556, NULL }, + { "nacute", 611, NULL }, + { "macron", 333, NULL }, + { "Otilde", 778, NULL }, + { "Emacron", 667, NULL }, + { "ellipsis", 1000, NULL }, + { "scaron", 556, NULL }, + { "AE", 1000, NULL }, + { "Ucircumflex", 722, NULL }, + { "lslash", 278, NULL }, + { "quotedblleft", 500, NULL }, + { "guilsinglright", 333, NULL }, + { "hyphen", 333, NULL }, + { "quotesingle", 238, NULL }, + { "eight", 556, NULL }, + { "exclamdown", 333, NULL }, + { "endash", 556, NULL }, + { "oe", 944, NULL }, + { "Abreve", 722, NULL }, + { "Umacron", 722, NULL }, + { "ecircumflex", 556, NULL }, + { "Adieresis", 722, NULL }, + { "copyright", 737, NULL }, + { "Egrave", 667, NULL }, + { "slash", 278, NULL }, + { "Edieresis", 667, NULL }, + { "otilde", 611, NULL }, + { "Idieresis", 278, NULL }, + { "parenleft", 333, NULL }, + { "one", 556, NULL }, + { "emacron", 556, NULL }, + { "Odieresis", 778, NULL }, + { "ucircumflex", 611, NULL }, + { "bracketleft", 333, NULL }, + { "Ugrave", 722, NULL }, + { "quoteright", 278, NULL }, + { "Udieresis", 722, NULL }, + { "perthousand", 1000, NULL }, + { "Ydieresis", 667, NULL }, + { "umacron", 611, NULL }, + { "abreve", 556, NULL }, + { "Eacute", 667, NULL }, + { "adieresis", 556, NULL }, + { "egrave", 556, NULL }, + { "edieresis", 556, NULL }, + { "idieresis", 278, NULL }, + { "Eth", 722, NULL }, + { "ae", 889, NULL }, + { "asterisk", 389, NULL }, + { "odieresis", 611, NULL }, + { "Uacute", 722, NULL }, + { "ugrave", 611, NULL }, + { "nine", 556, NULL }, + { "five", 556, NULL }, + { "udieresis", 611, NULL }, + { "Zcaron", 611, NULL }, + { "Scommaaccent", 667, NULL }, + { "threequarters", 834, NULL }, + { "guillemotright", 556, NULL }, + { "Ccedilla", 722, NULL }, + { "ydieresis", 556, NULL }, + { "tilde", 333, NULL }, + { "dbldaggerumlaut", 556, NULL }, + { "at", 975, NULL }, + { "eacute", 556, NULL }, + { "underscore", 556, NULL }, + { "Euro", 556, NULL }, + { "Dcroat", 722, NULL }, + { "multiply", 584, NULL }, + { "zero", 556, NULL }, + { "eth", 611, NULL }, + { "Scedilla", 667, NULL }, + { "Ograve", 778, NULL }, + { "Racute", 722, NULL }, + { "partialdiff", 494, NULL }, + { "uacute", 611, NULL }, + { "braceleft", 389, NULL }, + { "Thorn", 667, NULL }, + { "zcaron", 500, NULL }, + { "scommaaccent", 556, NULL }, + { "ccedilla", 556, NULL }, + { "Dcaron", 722, NULL }, + { "dcroat", 611, NULL }, + { "Ocircumflex", 778, NULL }, + { "Oacute", 778, NULL }, + { "scedilla", 556, NULL }, + { "ogonek", 333, NULL }, + { "ograve", 611, NULL }, + { "racute", 389, NULL }, + { "Tcaron", 611, NULL }, + { "Eogonek", 667, NULL }, + { "thorn", 611, NULL }, + { "degree", 400, NULL }, + { "registered", 737, NULL }, + { "radical", 549, NULL }, + { "Aring", 722, NULL }, + { "percent", 889, NULL }, + { "six", 556, NULL }, + { "paragraph", 556, NULL }, + { "dcaron", 743, NULL }, + { "Uogonek", 722, NULL }, + { "two", 556, NULL }, + { "summation", 600, NULL }, + { "Igrave", 278, NULL }, + { "Lacute", 611, NULL }, + { "ocircumflex", 611, NULL }, + { "oacute", 611, NULL }, + { "Uring", 722, NULL }, + { "Lcommaaccent", 611, NULL }, + { "tcaron", 389, NULL }, + { "eogonek", 556, NULL }, + { "Delta", 612, NULL }, + { "Ohungarumlaut", 778, NULL }, + { "asciicircum", 584, NULL }, + { "aring", 556, NULL }, + { "grave", 333, NULL }, + { "uogonek", 611, NULL }, + { "bracketright", 333, NULL }, + { "Iacute", 278, NULL }, + { "ampersand", 722, NULL }, + { "igrave", 278, NULL }, + { "lacute", 278, NULL }, + { "Ncaron", 722, NULL }, + { "plus", 584, NULL }, + { "uring", 611, NULL }, + { "quotesinglbase", 278, NULL }, + { "lcommaaccent", 278, NULL }, + { "Yacute", 667, NULL }, + { "ohungarumlaut", 611, NULL }, + { "threesuperior", 333, NULL }, + { "acute", 333, NULL }, + { "section", 556, NULL }, + { "dieresis", 333, NULL }, + { "iacute", 278, NULL }, + { "quotedblbase", 500, NULL }, + { "ncaron", 611, NULL }, + { "florin", 556, NULL }, + { "yacute", 556, NULL }, + { "Rcommaaccent", 722, NULL }, + { "fi", 611, NULL }, + { "fl", 611, NULL }, + { "Acircumflex", 722, NULL }, + { "Cacute", 722, NULL }, + { "Icircumflex", 278, NULL }, + { "guillemotleft", 556, NULL }, + { "germandbls", 611, NULL }, + { "Amacron", 722, NULL }, + { "seven", 556, NULL }, + { "Sacute", 667, NULL }, + { "ordmasculine", 365, NULL }, + { "dotlessi", 278, NULL }, + { "sterling", 556, NULL }, + { "notequal", 549, NULL }, + { "Imacron", 278, NULL }, + { "rcommaaccent", 389, NULL }, + { "Zdotaccent", 611, NULL }, + { "acircumflex", 556, NULL }, + { "cacute", 556, NULL }, + { "Ecaron", 667, NULL }, + { "icircumflex", 278, NULL }, + { "braceright", 389, NULL }, + { "quotedblright", 500, NULL }, + { "amacron", 556, NULL }, + { "sacute", 556, NULL }, + { "imacron", 278, NULL }, + { "cent", 556, NULL }, + { "currency", 556, NULL }, + { "logicalnot", 584, NULL }, + { "zdotaccent", 500, NULL }, + { "Atilde", 722, NULL }, + { "breve", 333, NULL }, + { "bar", 280, NULL }, + { "fraction", 167, NULL }, + { "less", 584, NULL }, + { "ecaron", 556, NULL }, + { "guilsinglleft", 333, NULL }, + { "exclam", 333, NULL }, + { "period", 278, NULL }, + { "Rcaron", 722, NULL }, + { "Kcommaaccent", 722, NULL }, + { "greater", 584, NULL }, + { "atilde", 556, NULL }, + { "brokenbar", 280, NULL }, + { "quoteleft", 278, NULL }, + { "Edotaccent", 667, NULL }, + { "onesuperior", 333, NULL } +}; + +static BuiltinFontWidth helveticaBoldObliqueWidthsTab[] = { + { "Ntilde", 722, NULL }, + { "rcaron", 389, NULL }, + { "kcommaaccent", 556, NULL }, + { "Ncommaaccent", 722, NULL }, + { "Zacute", 611, NULL }, + { "comma", 278, NULL }, + { "cedilla", 333, NULL }, + { "plusminus", 584, NULL }, + { "circumflex", 333, NULL }, + { "dotaccent", 333, NULL }, + { "edotaccent", 556, NULL }, + { "asciitilde", 584, NULL }, + { "colon", 333, NULL }, + { "onehalf", 834, NULL }, + { "dollar", 556, NULL }, + { "Lcaron", 611, NULL }, + { "ntilde", 611, NULL }, + { "Aogonek", 722, NULL }, + { "ncommaaccent", 611, NULL }, + { "minus", 584, NULL }, + { "Iogonek", 278, NULL }, + { "zacute", 500, NULL }, + { "yen", 556, NULL }, + { "space", 278, NULL }, + { "Omacron", 778, NULL }, + { "questiondown", 611, NULL }, + { "emdash", 1000, NULL }, + { "Agrave", 722, NULL }, + { "three", 556, NULL }, + { "numbersign", 556, NULL }, + { "lcaron", 400, NULL }, + { "A", 722, NULL }, + { "B", 722, NULL }, + { "C", 722, NULL }, + { "aogonek", 556, NULL }, + { "D", 722, NULL }, + { "E", 667, NULL }, + { "onequarter", 834, NULL }, + { "F", 611, NULL }, + { "G", 778, NULL }, + { "H", 722, NULL }, + { "I", 278, NULL }, + { "J", 556, NULL }, + { "K", 722, NULL }, + { "iogonek", 278, NULL }, + { "backslash", 278, NULL }, + { "L", 611, NULL }, + { "periodcentered", 278, NULL }, + { "M", 833, NULL }, + { "N", 722, NULL }, + { "omacron", 611, NULL }, + { "Tcommaaccent", 611, NULL }, + { "O", 778, NULL }, + { "P", 667, NULL }, + { "Q", 778, NULL }, + { "Uhungarumlaut", 722, NULL }, + { "R", 722, NULL }, + { "Aacute", 722, NULL }, + { "caron", 333, NULL }, + { "S", 667, NULL }, + { "T", 611, NULL }, + { "U", 722, NULL }, + { "agrave", 556, NULL }, + { "V", 667, NULL }, + { "W", 944, NULL }, + { "X", 667, NULL }, + { "question", 611, NULL }, + { "equal", 584, NULL }, + { "Y", 667, NULL }, + { "Z", 611, NULL }, + { "four", 556, NULL }, + { "a", 556, NULL }, + { "Gcommaaccent", 778, NULL }, + { "b", 611, NULL }, + { "c", 556, NULL }, + { "d", 611, NULL }, + { "e", 556, NULL }, + { "f", 333, NULL }, + { "g", 611, NULL }, + { "bullet", 350, NULL }, + { "h", 611, NULL }, + { "i", 278, NULL }, + { "Oslash", 778, NULL }, + { "dagger", 556, NULL }, + { "j", 278, NULL }, + { "k", 556, NULL }, + { "l", 278, NULL }, + { "m", 889, NULL }, + { "n", 611, NULL }, + { "tcommaaccent", 333, NULL }, + { "o", 611, NULL }, + { "ordfeminine", 370, NULL }, + { "ring", 333, NULL }, + { "p", 611, NULL }, + { "q", 611, NULL }, + { "uhungarumlaut", 611, NULL }, + { "r", 389, NULL }, + { "twosuperior", 333, NULL }, + { "aacute", 556, NULL }, + { "s", 556, NULL }, + { "OE", 1000, NULL }, + { "t", 333, NULL }, + { "divide", 584, NULL }, + { "u", 611, NULL }, + { "Ccaron", 722, NULL }, + { "v", 556, NULL }, + { "w", 778, NULL }, + { "x", 556, NULL }, + { "y", 556, NULL }, + { "z", 500, NULL }, + { "Gbreve", 778, NULL }, + { "commaaccent", 250, NULL }, + { "hungarumlaut", 333, NULL }, + { "Idotaccent", 278, NULL }, + { "Nacute", 722, NULL }, + { "quotedbl", 474, NULL }, + { "gcommaaccent", 611, NULL }, + { "mu", 611, NULL }, + { "greaterequal", 549, NULL }, + { "Scaron", 667, NULL }, + { "Lslash", 611, NULL }, + { "semicolon", 333, NULL }, + { "oslash", 611, NULL }, + { "lessequal", 549, NULL }, + { "lozenge", 494, NULL }, + { "parenright", 333, NULL }, + { "ccaron", 556, NULL }, + { "Ecircumflex", 667, NULL }, + { "gbreve", 611, NULL }, + { "trademark", 1000, NULL }, + { "daggerdbl", 556, NULL }, + { "nacute", 611, NULL }, + { "macron", 333, NULL }, + { "Otilde", 778, NULL }, + { "Emacron", 667, NULL }, + { "ellipsis", 1000, NULL }, + { "scaron", 556, NULL }, + { "AE", 1000, NULL }, + { "Ucircumflex", 722, NULL }, + { "lslash", 278, NULL }, + { "quotedblleft", 500, NULL }, + { "guilsinglright", 333, NULL }, + { "hyphen", 333, NULL }, + { "quotesingle", 238, NULL }, + { "eight", 556, NULL }, + { "exclamdown", 333, NULL }, + { "endash", 556, NULL }, + { "oe", 944, NULL }, + { "Abreve", 722, NULL }, + { "Umacron", 722, NULL }, + { "ecircumflex", 556, NULL }, + { "Adieresis", 722, NULL }, + { "copyright", 737, NULL }, + { "Egrave", 667, NULL }, + { "slash", 278, NULL }, + { "Edieresis", 667, NULL }, + { "otilde", 611, NULL }, + { "Idieresis", 278, NULL }, + { "parenleft", 333, NULL }, + { "one", 556, NULL }, + { "emacron", 556, NULL }, + { "Odieresis", 778, NULL }, + { "ucircumflex", 611, NULL }, + { "bracketleft", 333, NULL }, + { "Ugrave", 722, NULL }, + { "quoteright", 278, NULL }, + { "Udieresis", 722, NULL }, + { "perthousand", 1000, NULL }, + { "Ydieresis", 667, NULL }, + { "umacron", 611, NULL }, + { "abreve", 556, NULL }, + { "Eacute", 667, NULL }, + { "adieresis", 556, NULL }, + { "egrave", 556, NULL }, + { "edieresis", 556, NULL }, + { "idieresis", 278, NULL }, + { "Eth", 722, NULL }, + { "ae", 889, NULL }, + { "asterisk", 389, NULL }, + { "odieresis", 611, NULL }, + { "Uacute", 722, NULL }, + { "ugrave", 611, NULL }, + { "nine", 556, NULL }, + { "five", 556, NULL }, + { "udieresis", 611, NULL }, + { "Zcaron", 611, NULL }, + { "Scommaaccent", 667, NULL }, + { "threequarters", 834, NULL }, + { "guillemotright", 556, NULL }, + { "Ccedilla", 722, NULL }, + { "ydieresis", 556, NULL }, + { "tilde", 333, NULL }, + { "at", 975, NULL }, + { "eacute", 556, NULL }, + { "underscore", 556, NULL }, + { "Euro", 556, NULL }, + { "Dcroat", 722, NULL }, + { "multiply", 584, NULL }, + { "zero", 556, NULL }, + { "eth", 611, NULL }, + { "Scedilla", 667, NULL }, + { "Ograve", 778, NULL }, + { "Racute", 722, NULL }, + { "partialdiff", 494, NULL }, + { "uacute", 611, NULL }, + { "braceleft", 389, NULL }, + { "Thorn", 667, NULL }, + { "zcaron", 500, NULL }, + { "scommaaccent", 556, NULL }, + { "ccedilla", 556, NULL }, + { "Dcaron", 722, NULL }, + { "dcroat", 611, NULL }, + { "Ocircumflex", 778, NULL }, + { "Oacute", 778, NULL }, + { "scedilla", 556, NULL }, + { "ogonek", 333, NULL }, + { "ograve", 611, NULL }, + { "racute", 389, NULL }, + { "Tcaron", 611, NULL }, + { "Eogonek", 667, NULL }, + { "thorn", 611, NULL }, + { "degree", 400, NULL }, + { "registered", 737, NULL }, + { "radical", 549, NULL }, + { "Aring", 722, NULL }, + { "percent", 889, NULL }, + { "six", 556, NULL }, + { "paragraph", 556, NULL }, + { "dcaron", 743, NULL }, + { "Uogonek", 722, NULL }, + { "two", 556, NULL }, + { "summation", 600, NULL }, + { "Igrave", 278, NULL }, + { "Lacute", 611, NULL }, + { "ocircumflex", 611, NULL }, + { "oacute", 611, NULL }, + { "Uring", 722, NULL }, + { "Lcommaaccent", 611, NULL }, + { "tcaron", 389, NULL }, + { "eogonek", 556, NULL }, + { "Delta", 612, NULL }, + { "Ohungarumlaut", 778, NULL }, + { "asciicircum", 584, NULL }, + { "aring", 556, NULL }, + { "grave", 333, NULL }, + { "uogonek", 611, NULL }, + { "bracketright", 333, NULL }, + { "Iacute", 278, NULL }, + { "ampersand", 722, NULL }, + { "igrave", 278, NULL }, + { "lacute", 278, NULL }, + { "Ncaron", 722, NULL }, + { "plus", 584, NULL }, + { "uring", 611, NULL }, + { "quotesinglbase", 278, NULL }, + { "lcommaaccent", 278, NULL }, + { "Yacute", 667, NULL }, + { "ohungarumlaut", 611, NULL }, + { "threesuperior", 333, NULL }, + { "acute", 333, NULL }, + { "section", 556, NULL }, + { "dieresis", 333, NULL }, + { "iacute", 278, NULL }, + { "quotedblbase", 500, NULL }, + { "ncaron", 611, NULL }, + { "florin", 556, NULL }, + { "yacute", 556, NULL }, + { "Rcommaaccent", 722, NULL }, + { "fi", 611, NULL }, + { "fl", 611, NULL }, + { "Acircumflex", 722, NULL }, + { "Cacute", 722, NULL }, + { "Icircumflex", 278, NULL }, + { "guillemotleft", 556, NULL }, + { "germandbls", 611, NULL }, + { "Amacron", 722, NULL }, + { "seven", 556, NULL }, + { "Sacute", 667, NULL }, + { "ordmasculine", 365, NULL }, + { "dotlessi", 278, NULL }, + { "sterling", 556, NULL }, + { "notequal", 549, NULL }, + { "Imacron", 278, NULL }, + { "rcommaaccent", 389, NULL }, + { "Zdotaccent", 611, NULL }, + { "acircumflex", 556, NULL }, + { "cacute", 556, NULL }, + { "Ecaron", 667, NULL }, + { "icircumflex", 278, NULL }, + { "braceright", 389, NULL }, + { "quotedblright", 500, NULL }, + { "amacron", 556, NULL }, + { "sacute", 556, NULL }, + { "imacron", 278, NULL }, + { "cent", 556, NULL }, + { "currency", 556, NULL }, + { "logicalnot", 584, NULL }, + { "zdotaccent", 500, NULL }, + { "Atilde", 722, NULL }, + { "breve", 333, NULL }, + { "bar", 280, NULL }, + { "fraction", 167, NULL }, + { "less", 584, NULL }, + { "ecaron", 556, NULL }, + { "guilsinglleft", 333, NULL }, + { "exclam", 333, NULL }, + { "period", 278, NULL }, + { "Rcaron", 722, NULL }, + { "Kcommaaccent", 722, NULL }, + { "greater", 584, NULL }, + { "atilde", 556, NULL }, + { "brokenbar", 280, NULL }, + { "quoteleft", 278, NULL }, + { "Edotaccent", 667, NULL }, + { "onesuperior", 333, NULL } +}; + +static BuiltinFontWidth helveticaObliqueWidthsTab[] = { + { "Ntilde", 722, NULL }, + { "rcaron", 333, NULL }, + { "kcommaaccent", 500, NULL }, + { "Ncommaaccent", 722, NULL }, + { "Zacute", 611, NULL }, + { "comma", 278, NULL }, + { "cedilla", 333, NULL }, + { "plusminus", 584, NULL }, + { "circumflex", 333, NULL }, + { "dotaccent", 333, NULL }, + { "edotaccent", 556, NULL }, + { "asciitilde", 584, NULL }, + { "colon", 278, NULL }, + { "onehalf", 834, NULL }, + { "dollar", 556, NULL }, + { "Lcaron", 556, NULL }, + { "ntilde", 556, NULL }, + { "Aogonek", 667, NULL }, + { "ncommaaccent", 556, NULL }, + { "minus", 584, NULL }, + { "Iogonek", 278, NULL }, + { "zacute", 500, NULL }, + { "yen", 556, NULL }, + { "space", 278, NULL }, + { "Omacron", 778, NULL }, + { "questiondown", 611, NULL }, + { "emdash", 1000, NULL }, + { "Agrave", 667, NULL }, + { "three", 556, NULL }, + { "numbersign", 556, NULL }, + { "lcaron", 299, NULL }, + { "A", 667, NULL }, + { "B", 667, NULL }, + { "C", 722, NULL }, + { "aogonek", 556, NULL }, + { "D", 722, NULL }, + { "E", 667, NULL }, + { "onequarter", 834, NULL }, + { "F", 611, NULL }, + { "G", 778, NULL }, + { "H", 722, NULL }, + { "I", 278, NULL }, + { "J", 500, NULL }, + { "K", 667, NULL }, + { "iogonek", 222, NULL }, + { "backslash", 278, NULL }, + { "L", 556, NULL }, + { "periodcentered", 278, NULL }, + { "M", 833, NULL }, + { "N", 722, NULL }, + { "omacron", 556, NULL }, + { "Tcommaaccent", 611, NULL }, + { "O", 778, NULL }, + { "P", 667, NULL }, + { "Q", 778, NULL }, + { "Uhungarumlaut", 722, NULL }, + { "R", 722, NULL }, + { "Aacute", 667, NULL }, + { "caron", 333, NULL }, + { "S", 667, NULL }, + { "T", 611, NULL }, + { "U", 722, NULL }, + { "agrave", 556, NULL }, + { "V", 667, NULL }, + { "W", 944, NULL }, + { "X", 667, NULL }, + { "question", 556, NULL }, + { "equal", 584, NULL }, + { "Y", 667, NULL }, + { "Z", 611, NULL }, + { "four", 556, NULL }, + { "a", 556, NULL }, + { "Gcommaaccent", 778, NULL }, + { "b", 556, NULL }, + { "c", 500, NULL }, + { "d", 556, NULL }, + { "e", 556, NULL }, + { "f", 278, NULL }, + { "g", 556, NULL }, + { "bullet", 350, NULL }, + { "h", 556, NULL }, + { "i", 222, NULL }, + { "Oslash", 778, NULL }, + { "dagger", 556, NULL }, + { "j", 222, NULL }, + { "k", 500, NULL }, + { "l", 222, NULL }, + { "m", 833, NULL }, + { "n", 556, NULL }, + { "tcommaaccent", 278, NULL }, + { "o", 556, NULL }, + { "ordfeminine", 370, NULL }, + { "ring", 333, NULL }, + { "p", 556, NULL }, + { "q", 556, NULL }, + { "uhungarumlaut", 556, NULL }, + { "r", 333, NULL }, + { "twosuperior", 333, NULL }, + { "aacute", 556, NULL }, + { "s", 500, NULL }, + { "OE", 1000, NULL }, + { "t", 278, NULL }, + { "divide", 584, NULL }, + { "u", 556, NULL }, + { "Ccaron", 722, NULL }, + { "v", 500, NULL }, + { "w", 722, NULL }, + { "x", 500, NULL }, + { "y", 500, NULL }, + { "z", 500, NULL }, + { "Gbreve", 778, NULL }, + { "commaaccent", 250, NULL }, + { "hungarumlaut", 333, NULL }, + { "Idotaccent", 278, NULL }, + { "Nacute", 722, NULL }, + { "quotedbl", 355, NULL }, + { "gcommaaccent", 556, NULL }, + { "mu", 556, NULL }, + { "greaterequal", 549, NULL }, + { "Scaron", 667, NULL }, + { "Lslash", 556, NULL }, + { "semicolon", 278, NULL }, + { "oslash", 611, NULL }, + { "lessequal", 549, NULL }, + { "lozenge", 471, NULL }, + { "parenright", 333, NULL }, + { "ccaron", 500, NULL }, + { "Ecircumflex", 667, NULL }, + { "gbreve", 556, NULL }, + { "trademark", 1000, NULL }, + { "daggerdbl", 556, NULL }, + { "nacute", 556, NULL }, + { "macron", 333, NULL }, + { "Otilde", 778, NULL }, + { "Emacron", 667, NULL }, + { "ellipsis", 1000, NULL }, + { "scaron", 500, NULL }, + { "AE", 1000, NULL }, + { "Ucircumflex", 722, NULL }, + { "lslash", 222, NULL }, + { "quotedblleft", 333, NULL }, + { "guilsinglright", 333, NULL }, + { "hyphen", 333, NULL }, + { "quotesingle", 191, NULL }, + { "eight", 556, NULL }, + { "exclamdown", 333, NULL }, + { "endash", 556, NULL }, + { "oe", 944, NULL }, + { "Abreve", 667, NULL }, + { "Umacron", 722, NULL }, + { "ecircumflex", 556, NULL }, + { "Adieresis", 667, NULL }, + { "copyright", 737, NULL }, + { "Egrave", 667, NULL }, + { "slash", 278, NULL }, + { "Edieresis", 667, NULL }, + { "otilde", 556, NULL }, + { "Idieresis", 278, NULL }, + { "parenleft", 333, NULL }, + { "one", 556, NULL }, + { "emacron", 556, NULL }, + { "Odieresis", 778, NULL }, + { "ucircumflex", 556, NULL }, + { "bracketleft", 278, NULL }, + { "Ugrave", 722, NULL }, + { "quoteright", 222, NULL }, + { "Udieresis", 722, NULL }, + { "perthousand", 1000, NULL }, + { "Ydieresis", 667, NULL }, + { "umacron", 556, NULL }, + { "abreve", 556, NULL }, + { "Eacute", 667, NULL }, + { "adieresis", 556, NULL }, + { "egrave", 556, NULL }, + { "edieresis", 556, NULL }, + { "idieresis", 278, NULL }, + { "Eth", 722, NULL }, + { "ae", 889, NULL }, + { "asterisk", 389, NULL }, + { "odieresis", 556, NULL }, + { "Uacute", 722, NULL }, + { "ugrave", 556, NULL }, + { "nine", 556, NULL }, + { "five", 556, NULL }, + { "udieresis", 556, NULL }, + { "Zcaron", 611, NULL }, + { "Scommaaccent", 667, NULL }, + { "threequarters", 834, NULL }, + { "guillemotright", 556, NULL }, + { "Ccedilla", 722, NULL }, + { "ydieresis", 500, NULL }, + { "tilde", 333, NULL }, + { "at", 1015, NULL }, + { "eacute", 556, NULL }, + { "underscore", 556, NULL }, + { "Euro", 556, NULL }, + { "Dcroat", 722, NULL }, + { "multiply", 584, NULL }, + { "zero", 556, NULL }, + { "eth", 556, NULL }, + { "Scedilla", 667, NULL }, + { "Ograve", 778, NULL }, + { "Racute", 722, NULL }, + { "partialdiff", 476, NULL }, + { "uacute", 556, NULL }, + { "braceleft", 334, NULL }, + { "Thorn", 667, NULL }, + { "zcaron", 500, NULL }, + { "scommaaccent", 500, NULL }, + { "ccedilla", 500, NULL }, + { "Dcaron", 722, NULL }, + { "dcroat", 556, NULL }, + { "Ocircumflex", 778, NULL }, + { "Oacute", 778, NULL }, + { "scedilla", 500, NULL }, + { "ogonek", 333, NULL }, + { "ograve", 556, NULL }, + { "racute", 333, NULL }, + { "Tcaron", 611, NULL }, + { "Eogonek", 667, NULL }, + { "thorn", 556, NULL }, + { "degree", 400, NULL }, + { "registered", 737, NULL }, + { "radical", 453, NULL }, + { "Aring", 667, NULL }, + { "percent", 889, NULL }, + { "six", 556, NULL }, + { "paragraph", 537, NULL }, + { "dcaron", 643, NULL }, + { "Uogonek", 722, NULL }, + { "two", 556, NULL }, + { "summation", 600, NULL }, + { "Igrave", 278, NULL }, + { "Lacute", 556, NULL }, + { "ocircumflex", 556, NULL }, + { "oacute", 556, NULL }, + { "Uring", 722, NULL }, + { "Lcommaaccent", 556, NULL }, + { "tcaron", 317, NULL }, + { "eogonek", 556, NULL }, + { "Delta", 612, NULL }, + { "Ohungarumlaut", 778, NULL }, + { "asciicircum", 469, NULL }, + { "aring", 556, NULL }, + { "grave", 333, NULL }, + { "uogonek", 556, NULL }, + { "bracketright", 278, NULL }, + { "Iacute", 278, NULL }, + { "ampersand", 667, NULL }, + { "igrave", 278, NULL }, + { "lacute", 222, NULL }, + { "Ncaron", 722, NULL }, + { "plus", 584, NULL }, + { "uring", 556, NULL }, + { "quotesinglbase", 222, NULL }, + { "lcommaaccent", 222, NULL }, + { "Yacute", 667, NULL }, + { "ohungarumlaut", 556, NULL }, + { "threesuperior", 333, NULL }, + { "acute", 333, NULL }, + { "section", 556, NULL }, + { "dieresis", 333, NULL }, + { "iacute", 278, NULL }, + { "quotedblbase", 333, NULL }, + { "ncaron", 556, NULL }, + { "florin", 556, NULL }, + { "yacute", 500, NULL }, + { "Rcommaaccent", 722, NULL }, + { "fi", 500, NULL }, + { "fl", 500, NULL }, + { "Acircumflex", 667, NULL }, + { "Cacute", 722, NULL }, + { "Icircumflex", 278, NULL }, + { "guillemotleft", 556, NULL }, + { "germandbls", 611, NULL }, + { "Amacron", 667, NULL }, + { "seven", 556, NULL }, + { "Sacute", 667, NULL }, + { "ordmasculine", 365, NULL }, + { "dotlessi", 278, NULL }, + { "sterling", 556, NULL }, + { "notequal", 549, NULL }, + { "Imacron", 278, NULL }, + { "rcommaaccent", 333, NULL }, + { "Zdotaccent", 611, NULL }, + { "acircumflex", 556, NULL }, + { "cacute", 500, NULL }, + { "Ecaron", 667, NULL }, + { "icircumflex", 278, NULL }, + { "braceright", 334, NULL }, + { "quotedblright", 333, NULL }, + { "amacron", 556, NULL }, + { "sacute", 500, NULL }, + { "imacron", 278, NULL }, + { "cent", 556, NULL }, + { "currency", 556, NULL }, + { "logicalnot", 584, NULL }, + { "zdotaccent", 500, NULL }, + { "Atilde", 667, NULL }, + { "breve", 333, NULL }, + { "bar", 260, NULL }, + { "fraction", 167, NULL }, + { "less", 584, NULL }, + { "ecaron", 556, NULL }, + { "guilsinglleft", 333, NULL }, + { "exclam", 278, NULL }, + { "period", 278, NULL }, + { "Rcaron", 722, NULL }, + { "Kcommaaccent", 667, NULL }, + { "greater", 584, NULL }, + { "atilde", 556, NULL }, + { "brokenbar", 260, NULL }, + { "quoteleft", 222, NULL }, + { "Edotaccent", 667, NULL }, + { "onesuperior", 333, NULL } +}; + +static BuiltinFontWidth symbolWidthsTab[] = { + { "bracketleftex", 384, NULL }, + { "alpha", 631, NULL }, + { "union", 768, NULL }, + { "infinity", 713, NULL }, + { "comma", 250, NULL }, + { "copyrightsans", 790, NULL }, + { "plusminus", 549, NULL }, + { "arrowup", 603, NULL }, + { "apple", 790, NULL }, + { "parenleftbt", 384, NULL }, + { "notelement", 713, NULL }, + { "colon", 278, NULL }, + { "beta", 549, NULL }, + { "braceleftbt", 494, NULL }, + { "Lambda", 686, NULL }, + { "Phi", 763, NULL }, + { "minus", 549, NULL }, + { "space", 250, NULL }, + { "Sigma", 592, NULL }, + { "approxequal", 549, NULL }, + { "minute", 247, NULL }, + { "circleplus", 768, NULL }, + { "Omicron", 722, NULL }, + { "three", 500, NULL }, + { "numbersign", 500, NULL }, + { "lambda", 549, NULL }, + { "phi", 521, NULL }, + { "aleph", 823, NULL }, + { "Tau", 611, NULL }, + { "spade", 753, NULL }, + { "logicaland", 603, NULL }, + { "sigma", 603, NULL }, + { "propersuperset", 713, NULL }, + { "omicron", 549, NULL }, + { "question", 444, NULL }, + { "equal", 549, NULL }, + { "Epsilon", 611, NULL }, + { "emptyset", 823, NULL }, + { "diamond", 753, NULL }, + { "four", 500, NULL }, + { "Mu", 889, NULL }, + { "parenlefttp", 384, NULL }, + { "club", 753, NULL }, + { "bullet", 460, NULL }, + { "Omega", 768, NULL }, + { "tau", 439, NULL }, + { "Upsilon", 690, NULL }, + { "bracelefttp", 494, NULL }, + { "heart", 753, NULL }, + { "divide", 549, NULL }, + { "epsilon", 439, NULL }, + { "logicalor", 603, NULL }, + { "parenleftex", 384, NULL }, + { "greaterequal", 549, NULL }, + { "mu", 576, NULL }, + { "Nu", 722, NULL }, + { "therefore", 863, NULL }, + { "notsubset", 713, NULL }, + { "omega", 686, NULL }, + { "semicolon", 278, NULL }, + { "element", 713, NULL }, + { "upsilon", 576, NULL }, + { "existential", 549, NULL }, + { "integralbt", 686, NULL }, + { "lessequal", 549, NULL }, + { "phi1", 603, NULL }, + { "lozenge", 494, NULL }, + { "trademarkserif", 890, NULL }, + { "parenright", 333, NULL }, + { "reflexsuperset", 713, NULL }, + { "sigma1", 439, NULL }, + { "nu", 521, NULL }, + { "Gamma", 603, NULL }, + { "angleright", 329, NULL }, + { "ellipsis", 1000, NULL }, + { "Rho", 556, NULL }, + { "parenrightbt", 384, NULL }, + { "radicalex", 500, NULL }, + { "eight", 500, NULL }, + { "angleleft", 329, NULL }, + { "arrowdbldown", 603, NULL }, + { "congruent", 549, NULL }, + { "Theta", 741, NULL }, + { "intersection", 768, NULL }, + { "Pi", 768, NULL }, + { "slash", 278, NULL }, + { "registerserif", 790, NULL }, + { "parenleft", 333, NULL }, + { "one", 500, NULL }, + { "gamma", 411, NULL }, + { "bracketleft", 333, NULL }, + { "rho", 549, NULL }, + { "circlemultiply", 768, NULL }, + { "Chi", 722, NULL }, + { "theta", 521, NULL }, + { "pi", 549, NULL }, + { "integraltp", 686, NULL }, + { "Eta", 722, NULL }, + { "product", 823, NULL }, + { "nine", 500, NULL }, + { "five", 500, NULL }, + { "propersubset", 713, NULL }, + { "bracketrightbt", 384, NULL }, + { "trademarksans", 786, NULL }, + { "dotmath", 250, NULL }, + { "integralex", 686, NULL }, + { "chi", 549, NULL }, + { "parenrighttp", 384, NULL }, + { "eta", 603, NULL }, + { "underscore", 500, NULL }, + { "Euro", 750, NULL }, + { "multiply", 549, NULL }, + { "zero", 500, NULL }, + { "partialdiff", 494, NULL }, + { "angle", 768, NULL }, + { "arrowdblleft", 987, NULL }, + { "braceleft", 480, NULL }, + { "parenrightex", 384, NULL }, + { "Rfraktur", 795, NULL }, + { "Zeta", 611, NULL }, + { "braceex", 494, NULL }, + { "arrowdblup", 603, NULL }, + { "arrowdown", 603, NULL }, + { "Ifraktur", 686, NULL }, + { "degree", 400, NULL }, + { "Iota", 333, NULL }, + { "perpendicular", 658, NULL }, + { "radical", 549, NULL }, + { "asteriskmath", 500, NULL }, + { "percent", 833, NULL }, + { "zeta", 494, NULL }, + { "six", 500, NULL }, + { "two", 500, NULL }, + { "weierstrass", 987, NULL }, + { "summation", 713, NULL }, + { "bracketrighttp", 384, NULL }, + { "carriagereturn", 658, NULL }, + { "suchthat", 439, NULL }, + { "arrowvertex", 603, NULL }, + { "Delta", 612, NULL }, + { "iota", 329, NULL }, + { "arrowhorizex", 1000, NULL }, + { "bracketrightex", 384, NULL }, + { "bracketright", 333, NULL }, + { "ampersand", 778, NULL }, + { "plus", 549, NULL }, + { "proportional", 713, NULL }, + { "delta", 494, NULL }, + { "copyrightserif", 790, NULL }, + { "bracerightmid", 494, NULL }, + { "arrowleft", 987, NULL }, + { "second", 411, NULL }, + { "arrowdblboth", 1042, NULL }, + { "florin", 500, NULL }, + { "Psi", 795, NULL }, + { "bracerightbt", 494, NULL }, + { "bracketleftbt", 384, NULL }, + { "seven", 500, NULL }, + { "braceleftmid", 494, NULL }, + { "notequal", 549, NULL }, + { "psi", 686, NULL }, + { "equivalence", 549, NULL }, + { "universal", 713, NULL }, + { "arrowdblright", 987, NULL }, + { "braceright", 480, NULL }, + { "reflexsubset", 713, NULL }, + { "Xi", 645, NULL }, + { "theta1", 631, NULL }, + { "logicalnot", 713, NULL }, + { "Kappa", 722, NULL }, + { "similar", 549, NULL }, + { "bar", 200, NULL }, + { "fraction", 167, NULL }, + { "less", 549, NULL }, + { "registersans", 790, NULL }, + { "omega1", 713, NULL }, + { "exclam", 333, NULL }, + { "Upsilon1", 620, NULL }, + { "bracerighttp", 494, NULL }, + { "xi", 493, NULL }, + { "period", 250, NULL }, + { "Alpha", 722, NULL }, + { "arrowright", 987, NULL }, + { "greater", 549, NULL }, + { "bracketlefttp", 384, NULL }, + { "kappa", 549, NULL }, + { "gradient", 713, NULL }, + { "integral", 274, NULL }, + { "arrowboth", 1042, NULL }, + { "Beta", 667, NULL } +}; + +static BuiltinFontWidth timesBoldWidthsTab[] = { + { "Ntilde", 722, NULL }, + { "rcaron", 444, NULL }, + { "kcommaaccent", 556, NULL }, + { "Ncommaaccent", 722, NULL }, + { "Zacute", 667, NULL }, + { "comma", 250, NULL }, + { "cedilla", 333, NULL }, + { "plusminus", 570, NULL }, + { "circumflex", 333, NULL }, + { "dotaccent", 333, NULL }, + { "edotaccent", 444, NULL }, + { "asciitilde", 520, NULL }, + { "colon", 333, NULL }, + { "onehalf", 750, NULL }, + { "dollar", 500, NULL }, + { "Lcaron", 667, NULL }, + { "ntilde", 556, NULL }, + { "Aogonek", 722, NULL }, + { "ncommaaccent", 556, NULL }, + { "minus", 570, NULL }, + { "Iogonek", 389, NULL }, + { "zacute", 444, NULL }, + { "yen", 500, NULL }, + { "space", 250, NULL }, + { "Omacron", 778, NULL }, + { "questiondown", 500, NULL }, + { "emdash", 1000, NULL }, + { "Agrave", 722, NULL }, + { "three", 500, NULL }, + { "numbersign", 500, NULL }, + { "lcaron", 394, NULL }, + { "A", 722, NULL }, + { "B", 667, NULL }, + { "C", 722, NULL }, + { "aogonek", 500, NULL }, + { "D", 722, NULL }, + { "E", 667, NULL }, + { "onequarter", 750, NULL }, + { "F", 611, NULL }, + { "G", 778, NULL }, + { "H", 778, NULL }, + { "I", 389, NULL }, + { "J", 500, NULL }, + { "K", 778, NULL }, + { "iogonek", 278, NULL }, + { "backslash", 278, NULL }, + { "L", 667, NULL }, + { "periodcentered", 250, NULL }, + { "M", 944, NULL }, + { "N", 722, NULL }, + { "omacron", 500, NULL }, + { "Tcommaaccent", 667, NULL }, + { "O", 778, NULL }, + { "P", 611, NULL }, + { "Q", 778, NULL }, + { "Uhungarumlaut", 722, NULL }, + { "R", 722, NULL }, + { "Aacute", 722, NULL }, + { "caron", 333, NULL }, + { "S", 556, NULL }, + { "T", 667, NULL }, + { "U", 722, NULL }, + { "agrave", 500, NULL }, + { "V", 722, NULL }, + { "W", 1000, NULL }, + { "X", 722, NULL }, + { "question", 500, NULL }, + { "equal", 570, NULL }, + { "Y", 722, NULL }, + { "Z", 667, NULL }, + { "four", 500, NULL }, + { "a", 500, NULL }, + { "Gcommaaccent", 778, NULL }, + { "b", 556, NULL }, + { "c", 444, NULL }, + { "d", 556, NULL }, + { "e", 444, NULL }, + { "f", 333, NULL }, + { "g", 500, NULL }, + { "bullet", 350, NULL }, + { "h", 556, NULL }, + { "i", 278, NULL }, + { "Oslash", 778, NULL }, + { "dagger", 500, NULL }, + { "j", 333, NULL }, + { "k", 556, NULL }, + { "l", 278, NULL }, + { "m", 833, NULL }, + { "n", 556, NULL }, + { "tcommaaccent", 333, NULL }, + { "o", 500, NULL }, + { "ordfeminine", 300, NULL }, + { "ring", 333, NULL }, + { "p", 556, NULL }, + { "q", 556, NULL }, + { "uhungarumlaut", 556, NULL }, + { "r", 444, NULL }, + { "twosuperior", 300, NULL }, + { "aacute", 500, NULL }, + { "s", 389, NULL }, + { "OE", 1000, NULL }, + { "t", 333, NULL }, + { "divide", 570, NULL }, + { "u", 556, NULL }, + { "Ccaron", 722, NULL }, + { "v", 500, NULL }, + { "w", 722, NULL }, + { "x", 500, NULL }, + { "y", 500, NULL }, + { "z", 444, NULL }, + { "Gbreve", 778, NULL }, + { "commaaccent", 250, NULL }, + { "hungarumlaut", 333, NULL }, + { "Idotaccent", 389, NULL }, + { "Nacute", 722, NULL }, + { "quotedbl", 555, NULL }, + { "gcommaaccent", 500, NULL }, + { "mu", 556, NULL }, + { "greaterequal", 549, NULL }, + { "Scaron", 556, NULL }, + { "Lslash", 667, NULL }, + { "semicolon", 333, NULL }, + { "oslash", 500, NULL }, + { "lessequal", 549, NULL }, + { "lozenge", 494, NULL }, + { "parenright", 333, NULL }, + { "ccaron", 444, NULL }, + { "Ecircumflex", 667, NULL }, + { "gbreve", 500, NULL }, + { "trademark", 1000, NULL }, + { "daggerdbl", 500, NULL }, + { "nacute", 556, NULL }, + { "macron", 333, NULL }, + { "Otilde", 778, NULL }, + { "Emacron", 667, NULL }, + { "ellipsis", 1000, NULL }, + { "scaron", 389, NULL }, + { "AE", 1000, NULL }, + { "Ucircumflex", 722, NULL }, + { "lslash", 278, NULL }, + { "quotedblleft", 500, NULL }, + { "guilsinglright", 333, NULL }, + { "hyphen", 333, NULL }, + { "quotesingle", 278, NULL }, + { "eight", 500, NULL }, + { "exclamdown", 333, NULL }, + { "endash", 500, NULL }, + { "oe", 722, NULL }, + { "Abreve", 722, NULL }, + { "Umacron", 722, NULL }, + { "ecircumflex", 444, NULL }, + { "Adieresis", 722, NULL }, + { "copyright", 747, NULL }, + { "Egrave", 667, NULL }, + { "slash", 278, NULL }, + { "Edieresis", 667, NULL }, + { "otilde", 500, NULL }, + { "Idieresis", 389, NULL }, + { "parenleft", 333, NULL }, + { "one", 500, NULL }, + { "emacron", 444, NULL }, + { "Odieresis", 778, NULL }, + { "ucircumflex", 556, NULL }, + { "bracketleft", 333, NULL }, + { "Ugrave", 722, NULL }, + { "quoteright", 333, NULL }, + { "Udieresis", 722, NULL }, + { "perthousand", 1000, NULL }, + { "Ydieresis", 722, NULL }, + { "umacron", 556, NULL }, + { "abreve", 500, NULL }, + { "Eacute", 667, NULL }, + { "adieresis", 500, NULL }, + { "egrave", 444, NULL }, + { "edieresis", 444, NULL }, + { "idieresis", 278, NULL }, + { "Eth", 722, NULL }, + { "ae", 722, NULL }, + { "asterisk", 500, NULL }, + { "odieresis", 500, NULL }, + { "Uacute", 722, NULL }, + { "ugrave", 556, NULL }, + { "nine", 500, NULL }, + { "five", 500, NULL }, + { "udieresis", 556, NULL }, + { "Zcaron", 667, NULL }, + { "Scommaaccent", 556, NULL }, + { "threequarters", 750, NULL }, + { "guillemotright", 500, NULL }, + { "Ccedilla", 722, NULL }, + { "ydieresis", 500, NULL }, + { "tilde", 333, NULL }, + { "at", 930, NULL }, + { "eacute", 444, NULL }, + { "underscore", 500, NULL }, + { "Euro", 500, NULL }, + { "Dcroat", 722, NULL }, + { "multiply", 570, NULL }, + { "zero", 500, NULL }, + { "eth", 500, NULL }, + { "Scedilla", 556, NULL }, + { "Ograve", 778, NULL }, + { "Racute", 722, NULL }, + { "partialdiff", 494, NULL }, + { "uacute", 556, NULL }, + { "braceleft", 394, NULL }, + { "Thorn", 611, NULL }, + { "zcaron", 444, NULL }, + { "scommaaccent", 389, NULL }, + { "ccedilla", 444, NULL }, + { "Dcaron", 722, NULL }, + { "dcroat", 556, NULL }, + { "Ocircumflex", 778, NULL }, + { "Oacute", 778, NULL }, + { "scedilla", 389, NULL }, + { "ogonek", 333, NULL }, + { "ograve", 500, NULL }, + { "racute", 444, NULL }, + { "Tcaron", 667, NULL }, + { "Eogonek", 667, NULL }, + { "thorn", 556, NULL }, + { "degree", 400, NULL }, + { "registered", 747, NULL }, + { "radical", 549, NULL }, + { "Aring", 722, NULL }, + { "percent", 1000, NULL }, + { "six", 500, NULL }, + { "paragraph", 540, NULL }, + { "dcaron", 672, NULL }, + { "Uogonek", 722, NULL }, + { "two", 500, NULL }, + { "summation", 600, NULL }, + { "Igrave", 389, NULL }, + { "Lacute", 667, NULL }, + { "ocircumflex", 500, NULL }, + { "oacute", 500, NULL }, + { "Uring", 722, NULL }, + { "Lcommaaccent", 667, NULL }, + { "tcaron", 416, NULL }, + { "eogonek", 444, NULL }, + { "Delta", 612, NULL }, + { "Ohungarumlaut", 778, NULL }, + { "asciicircum", 581, NULL }, + { "aring", 500, NULL }, + { "grave", 333, NULL }, + { "uogonek", 556, NULL }, + { "bracketright", 333, NULL }, + { "Iacute", 389, NULL }, + { "ampersand", 833, NULL }, + { "igrave", 278, NULL }, + { "lacute", 278, NULL }, + { "Ncaron", 722, NULL }, + { "plus", 570, NULL }, + { "uring", 556, NULL }, + { "quotesinglbase", 333, NULL }, + { "lcommaaccent", 278, NULL }, + { "Yacute", 722, NULL }, + { "ohungarumlaut", 500, NULL }, + { "threesuperior", 300, NULL }, + { "acute", 333, NULL }, + { "section", 500, NULL }, + { "dieresis", 333, NULL }, + { "iacute", 278, NULL }, + { "quotedblbase", 500, NULL }, + { "ncaron", 556, NULL }, + { "florin", 500, NULL }, + { "yacute", 500, NULL }, + { "Rcommaaccent", 722, NULL }, + { "fi", 556, NULL }, + { "fl", 556, NULL }, + { "Acircumflex", 722, NULL }, + { "Cacute", 722, NULL }, + { "Icircumflex", 389, NULL }, + { "guillemotleft", 500, NULL }, + { "germandbls", 556, NULL }, + { "Amacron", 722, NULL }, + { "seven", 500, NULL }, + { "Sacute", 556, NULL }, + { "ordmasculine", 330, NULL }, + { "dotlessi", 278, NULL }, + { "sterling", 500, NULL }, + { "notequal", 549, NULL }, + { "Imacron", 389, NULL }, + { "rcommaaccent", 444, NULL }, + { "Zdotaccent", 667, NULL }, + { "acircumflex", 500, NULL }, + { "cacute", 444, NULL }, + { "Ecaron", 667, NULL }, + { "icircumflex", 278, NULL }, + { "braceright", 394, NULL }, + { "quotedblright", 500, NULL }, + { "amacron", 500, NULL }, + { "sacute", 389, NULL }, + { "imacron", 278, NULL }, + { "cent", 500, NULL }, + { "currency", 500, NULL }, + { "logicalnot", 570, NULL }, + { "zdotaccent", 444, NULL }, + { "Atilde", 722, NULL }, + { "breve", 333, NULL }, + { "bar", 220, NULL }, + { "fraction", 167, NULL }, + { "less", 570, NULL }, + { "ecaron", 444, NULL }, + { "guilsinglleft", 333, NULL }, + { "exclam", 333, NULL }, + { "period", 250, NULL }, + { "Rcaron", 722, NULL }, + { "Kcommaaccent", 778, NULL }, + { "greater", 570, NULL }, + { "atilde", 500, NULL }, + { "brokenbar", 220, NULL }, + { "quoteleft", 333, NULL }, + { "Edotaccent", 667, NULL }, + { "onesuperior", 300, NULL } +}; + +static BuiltinFontWidth timesBoldItalicWidthsTab[] = { + { "Ntilde", 722, NULL }, + { "rcaron", 389, NULL }, + { "kcommaaccent", 500, NULL }, + { "Ncommaaccent", 722, NULL }, + { "Zacute", 611, NULL }, + { "comma", 250, NULL }, + { "cedilla", 333, NULL }, + { "plusminus", 570, NULL }, + { "circumflex", 333, NULL }, + { "dotaccent", 333, NULL }, + { "edotaccent", 444, NULL }, + { "asciitilde", 570, NULL }, + { "colon", 333, NULL }, + { "onehalf", 750, NULL }, + { "dollar", 500, NULL }, + { "Lcaron", 611, NULL }, + { "ntilde", 556, NULL }, + { "Aogonek", 667, NULL }, + { "ncommaaccent", 556, NULL }, + { "minus", 606, NULL }, + { "Iogonek", 389, NULL }, + { "zacute", 389, NULL }, + { "yen", 500, NULL }, + { "space", 250, NULL }, + { "Omacron", 722, NULL }, + { "questiondown", 500, NULL }, + { "emdash", 1000, NULL }, + { "Agrave", 667, NULL }, + { "three", 500, NULL }, + { "numbersign", 500, NULL }, + { "lcaron", 382, NULL }, + { "A", 667, NULL }, + { "B", 667, NULL }, + { "C", 667, NULL }, + { "aogonek", 500, NULL }, + { "D", 722, NULL }, + { "E", 667, NULL }, + { "onequarter", 750, NULL }, + { "F", 667, NULL }, + { "G", 722, NULL }, + { "H", 778, NULL }, + { "I", 389, NULL }, + { "J", 500, NULL }, + { "K", 667, NULL }, + { "iogonek", 278, NULL }, + { "backslash", 278, NULL }, + { "L", 611, NULL }, + { "periodcentered", 250, NULL }, + { "M", 889, NULL }, + { "N", 722, NULL }, + { "omacron", 500, NULL }, + { "Tcommaaccent", 611, NULL }, + { "O", 722, NULL }, + { "P", 611, NULL }, + { "Q", 722, NULL }, + { "Uhungarumlaut", 722, NULL }, + { "R", 667, NULL }, + { "Aacute", 667, NULL }, + { "caron", 333, NULL }, + { "S", 556, NULL }, + { "T", 611, NULL }, + { "U", 722, NULL }, + { "agrave", 500, NULL }, + { "V", 667, NULL }, + { "W", 889, NULL }, + { "X", 667, NULL }, + { "question", 500, NULL }, + { "equal", 570, NULL }, + { "Y", 611, NULL }, + { "Z", 611, NULL }, + { "four", 500, NULL }, + { "a", 500, NULL }, + { "Gcommaaccent", 722, NULL }, + { "b", 500, NULL }, + { "c", 444, NULL }, + { "d", 500, NULL }, + { "e", 444, NULL }, + { "f", 333, NULL }, + { "g", 500, NULL }, + { "bullet", 350, NULL }, + { "h", 556, NULL }, + { "i", 278, NULL }, + { "Oslash", 722, NULL }, + { "dagger", 500, NULL }, + { "j", 278, NULL }, + { "k", 500, NULL }, + { "l", 278, NULL }, + { "m", 778, NULL }, + { "n", 556, NULL }, + { "tcommaaccent", 278, NULL }, + { "o", 500, NULL }, + { "ordfeminine", 266, NULL }, + { "ring", 333, NULL }, + { "p", 500, NULL }, + { "q", 500, NULL }, + { "uhungarumlaut", 556, NULL }, + { "r", 389, NULL }, + { "twosuperior", 300, NULL }, + { "aacute", 500, NULL }, + { "s", 389, NULL }, + { "OE", 944, NULL }, + { "t", 278, NULL }, + { "divide", 570, NULL }, + { "u", 556, NULL }, + { "Ccaron", 667, NULL }, + { "v", 444, NULL }, + { "w", 667, NULL }, + { "x", 500, NULL }, + { "y", 444, NULL }, + { "z", 389, NULL }, + { "Gbreve", 722, NULL }, + { "commaaccent", 250, NULL }, + { "hungarumlaut", 333, NULL }, + { "Idotaccent", 389, NULL }, + { "Nacute", 722, NULL }, + { "quotedbl", 555, NULL }, + { "gcommaaccent", 500, NULL }, + { "mu", 576, NULL }, + { "greaterequal", 549, NULL }, + { "Scaron", 556, NULL }, + { "Lslash", 611, NULL }, + { "semicolon", 333, NULL }, + { "oslash", 500, NULL }, + { "lessequal", 549, NULL }, + { "lozenge", 494, NULL }, + { "parenright", 333, NULL }, + { "ccaron", 444, NULL }, + { "Ecircumflex", 667, NULL }, + { "gbreve", 500, NULL }, + { "trademark", 1000, NULL }, + { "daggerdbl", 500, NULL }, + { "nacute", 556, NULL }, + { "macron", 333, NULL }, + { "Otilde", 722, NULL }, + { "Emacron", 667, NULL }, + { "ellipsis", 1000, NULL }, + { "scaron", 389, NULL }, + { "AE", 944, NULL }, + { "Ucircumflex", 722, NULL }, + { "lslash", 278, NULL }, + { "quotedblleft", 500, NULL }, + { "guilsinglright", 333, NULL }, + { "hyphen", 333, NULL }, + { "quotesingle", 278, NULL }, + { "eight", 500, NULL }, + { "exclamdown", 389, NULL }, + { "endash", 500, NULL }, + { "oe", 722, NULL }, + { "Abreve", 667, NULL }, + { "Umacron", 722, NULL }, + { "ecircumflex", 444, NULL }, + { "Adieresis", 667, NULL }, + { "copyright", 747, NULL }, + { "Egrave", 667, NULL }, + { "slash", 278, NULL }, + { "Edieresis", 667, NULL }, + { "otilde", 500, NULL }, + { "Idieresis", 389, NULL }, + { "parenleft", 333, NULL }, + { "one", 500, NULL }, + { "emacron", 444, NULL }, + { "Odieresis", 722, NULL }, + { "ucircumflex", 556, NULL }, + { "bracketleft", 333, NULL }, + { "Ugrave", 722, NULL }, + { "quoteright", 333, NULL }, + { "Udieresis", 722, NULL }, + { "perthousand", 1000, NULL }, + { "Ydieresis", 611, NULL }, + { "umacron", 556, NULL }, + { "abreve", 500, NULL }, + { "Eacute", 667, NULL }, + { "adieresis", 500, NULL }, + { "egrave", 444, NULL }, + { "edieresis", 444, NULL }, + { "idieresis", 278, NULL }, + { "Eth", 722, NULL }, + { "ae", 722, NULL }, + { "asterisk", 500, NULL }, + { "odieresis", 500, NULL }, + { "Uacute", 722, NULL }, + { "ugrave", 556, NULL }, + { "nine", 500, NULL }, + { "five", 500, NULL }, + { "udieresis", 556, NULL }, + { "Zcaron", 611, NULL }, + { "Scommaaccent", 556, NULL }, + { "threequarters", 750, NULL }, + { "guillemotright", 500, NULL }, + { "Ccedilla", 667, NULL }, + { "ydieresis", 444, NULL }, + { "tilde", 333, NULL }, + { "at", 832, NULL }, + { "eacute", 444, NULL }, + { "underscore", 500, NULL }, + { "Euro", 500, NULL }, + { "Dcroat", 722, NULL }, + { "multiply", 570, NULL }, + { "zero", 500, NULL }, + { "eth", 500, NULL }, + { "Scedilla", 556, NULL }, + { "Ograve", 722, NULL }, + { "Racute", 667, NULL }, + { "partialdiff", 494, NULL }, + { "uacute", 556, NULL }, + { "braceleft", 348, NULL }, + { "Thorn", 611, NULL }, + { "zcaron", 389, NULL }, + { "scommaaccent", 389, NULL }, + { "ccedilla", 444, NULL }, + { "Dcaron", 722, NULL }, + { "dcroat", 500, NULL }, + { "Ocircumflex", 722, NULL }, + { "Oacute", 722, NULL }, + { "scedilla", 389, NULL }, + { "ogonek", 333, NULL }, + { "ograve", 500, NULL }, + { "racute", 389, NULL }, + { "Tcaron", 611, NULL }, + { "Eogonek", 667, NULL }, + { "thorn", 500, NULL }, + { "degree", 400, NULL }, + { "registered", 747, NULL }, + { "radical", 549, NULL }, + { "Aring", 667, NULL }, + { "percent", 833, NULL }, + { "six", 500, NULL }, + { "paragraph", 500, NULL }, + { "dcaron", 608, NULL }, + { "Uogonek", 722, NULL }, + { "two", 500, NULL }, + { "summation", 600, NULL }, + { "Igrave", 389, NULL }, + { "Lacute", 611, NULL }, + { "ocircumflex", 500, NULL }, + { "oacute", 500, NULL }, + { "Uring", 722, NULL }, + { "Lcommaaccent", 611, NULL }, + { "tcaron", 366, NULL }, + { "eogonek", 444, NULL }, + { "Delta", 612, NULL }, + { "Ohungarumlaut", 722, NULL }, + { "asciicircum", 570, NULL }, + { "aring", 500, NULL }, + { "grave", 333, NULL }, + { "uogonek", 556, NULL }, + { "bracketright", 333, NULL }, + { "Iacute", 389, NULL }, + { "ampersand", 778, NULL }, + { "igrave", 278, NULL }, + { "lacute", 278, NULL }, + { "Ncaron", 722, NULL }, + { "plus", 570, NULL }, + { "uring", 556, NULL }, + { "quotesinglbase", 333, NULL }, + { "lcommaaccent", 278, NULL }, + { "Yacute", 611, NULL }, + { "ohungarumlaut", 500, NULL }, + { "threesuperior", 300, NULL }, + { "acute", 333, NULL }, + { "section", 500, NULL }, + { "dieresis", 333, NULL }, + { "iacute", 278, NULL }, + { "quotedblbase", 500, NULL }, + { "ncaron", 556, NULL }, + { "florin", 500, NULL }, + { "yacute", 444, NULL }, + { "Rcommaaccent", 667, NULL }, + { "fi", 556, NULL }, + { "fl", 556, NULL }, + { "Acircumflex", 667, NULL }, + { "Cacute", 667, NULL }, + { "Icircumflex", 389, NULL }, + { "guillemotleft", 500, NULL }, + { "germandbls", 500, NULL }, + { "Amacron", 667, NULL }, + { "seven", 500, NULL }, + { "Sacute", 556, NULL }, + { "ordmasculine", 300, NULL }, + { "dotlessi", 278, NULL }, + { "sterling", 500, NULL }, + { "notequal", 549, NULL }, + { "Imacron", 389, NULL }, + { "rcommaaccent", 389, NULL }, + { "Zdotaccent", 611, NULL }, + { "acircumflex", 500, NULL }, + { "cacute", 444, NULL }, + { "Ecaron", 667, NULL }, + { "icircumflex", 278, NULL }, + { "braceright", 348, NULL }, + { "quotedblright", 500, NULL }, + { "amacron", 500, NULL }, + { "sacute", 389, NULL }, + { "imacron", 278, NULL }, + { "cent", 500, NULL }, + { "currency", 500, NULL }, + { "logicalnot", 606, NULL }, + { "zdotaccent", 389, NULL }, + { "Atilde", 667, NULL }, + { "breve", 333, NULL }, + { "bar", 220, NULL }, + { "fraction", 167, NULL }, + { "less", 570, NULL }, + { "ecaron", 444, NULL }, + { "guilsinglleft", 333, NULL }, + { "exclam", 389, NULL }, + { "period", 250, NULL }, + { "Rcaron", 667, NULL }, + { "Kcommaaccent", 667, NULL }, + { "greater", 570, NULL }, + { "atilde", 500, NULL }, + { "brokenbar", 220, NULL }, + { "quoteleft", 333, NULL }, + { "Edotaccent", 667, NULL }, + { "onesuperior", 300, NULL } +}; + +static BuiltinFontWidth timesItalicWidthsTab[] = { + { "Ntilde", 667, NULL }, + { "rcaron", 389, NULL }, + { "kcommaaccent", 444, NULL }, + { "Ncommaaccent", 667, NULL }, + { "Zacute", 556, NULL }, + { "comma", 250, NULL }, + { "cedilla", 333, NULL }, + { "plusminus", 675, NULL }, + { "circumflex", 333, NULL }, + { "dotaccent", 333, NULL }, + { "edotaccent", 444, NULL }, + { "asciitilde", 541, NULL }, + { "colon", 333, NULL }, + { "onehalf", 750, NULL }, + { "dollar", 500, NULL }, + { "Lcaron", 611, NULL }, + { "ntilde", 500, NULL }, + { "Aogonek", 611, NULL }, + { "ncommaaccent", 500, NULL }, + { "minus", 675, NULL }, + { "Iogonek", 333, NULL }, + { "zacute", 389, NULL }, + { "yen", 500, NULL }, + { "space", 250, NULL }, + { "Omacron", 722, NULL }, + { "questiondown", 500, NULL }, + { "emdash", 889, NULL }, + { "Agrave", 611, NULL }, + { "three", 500, NULL }, + { "numbersign", 500, NULL }, + { "lcaron", 300, NULL }, + { "A", 611, NULL }, + { "B", 611, NULL }, + { "C", 667, NULL }, + { "aogonek", 500, NULL }, + { "D", 722, NULL }, + { "E", 611, NULL }, + { "onequarter", 750, NULL }, + { "F", 611, NULL }, + { "G", 722, NULL }, + { "H", 722, NULL }, + { "I", 333, NULL }, + { "J", 444, NULL }, + { "K", 667, NULL }, + { "iogonek", 278, NULL }, + { "backslash", 278, NULL }, + { "L", 556, NULL }, + { "periodcentered", 250, NULL }, + { "M", 833, NULL }, + { "N", 667, NULL }, + { "omacron", 500, NULL }, + { "Tcommaaccent", 556, NULL }, + { "O", 722, NULL }, + { "P", 611, NULL }, + { "Q", 722, NULL }, + { "Uhungarumlaut", 722, NULL }, + { "R", 611, NULL }, + { "Aacute", 611, NULL }, + { "caron", 333, NULL }, + { "S", 500, NULL }, + { "T", 556, NULL }, + { "U", 722, NULL }, + { "agrave", 500, NULL }, + { "V", 611, NULL }, + { "W", 833, NULL }, + { "X", 611, NULL }, + { "question", 500, NULL }, + { "equal", 675, NULL }, + { "Y", 556, NULL }, + { "Z", 556, NULL }, + { "four", 500, NULL }, + { "a", 500, NULL }, + { "Gcommaaccent", 722, NULL }, + { "b", 500, NULL }, + { "c", 444, NULL }, + { "d", 500, NULL }, + { "e", 444, NULL }, + { "f", 278, NULL }, + { "g", 500, NULL }, + { "bullet", 350, NULL }, + { "h", 500, NULL }, + { "i", 278, NULL }, + { "Oslash", 722, NULL }, + { "dagger", 500, NULL }, + { "j", 278, NULL }, + { "k", 444, NULL }, + { "l", 278, NULL }, + { "m", 722, NULL }, + { "n", 500, NULL }, + { "tcommaaccent", 278, NULL }, + { "o", 500, NULL }, + { "ordfeminine", 276, NULL }, + { "ring", 333, NULL }, + { "p", 500, NULL }, + { "q", 500, NULL }, + { "uhungarumlaut", 500, NULL }, + { "r", 389, NULL }, + { "twosuperior", 300, NULL }, + { "aacute", 500, NULL }, + { "s", 389, NULL }, + { "OE", 944, NULL }, + { "t", 278, NULL }, + { "divide", 675, NULL }, + { "u", 500, NULL }, + { "Ccaron", 667, NULL }, + { "v", 444, NULL }, + { "w", 667, NULL }, + { "x", 444, NULL }, + { "y", 444, NULL }, + { "z", 389, NULL }, + { "Gbreve", 722, NULL }, + { "commaaccent", 250, NULL }, + { "hungarumlaut", 333, NULL }, + { "Idotaccent", 333, NULL }, + { "Nacute", 667, NULL }, + { "quotedbl", 420, NULL }, + { "gcommaaccent", 500, NULL }, + { "mu", 500, NULL }, + { "greaterequal", 549, NULL }, + { "Scaron", 500, NULL }, + { "Lslash", 556, NULL }, + { "semicolon", 333, NULL }, + { "oslash", 500, NULL }, + { "lessequal", 549, NULL }, + { "lozenge", 471, NULL }, + { "parenright", 333, NULL }, + { "ccaron", 444, NULL }, + { "Ecircumflex", 611, NULL }, + { "gbreve", 500, NULL }, + { "trademark", 980, NULL }, + { "daggerdbl", 500, NULL }, + { "nacute", 500, NULL }, + { "macron", 333, NULL }, + { "Otilde", 722, NULL }, + { "Emacron", 611, NULL }, + { "ellipsis", 889, NULL }, + { "scaron", 389, NULL }, + { "AE", 889, NULL }, + { "Ucircumflex", 722, NULL }, + { "lslash", 278, NULL }, + { "quotedblleft", 556, NULL }, + { "guilsinglright", 333, NULL }, + { "hyphen", 333, NULL }, + { "quotesingle", 214, NULL }, + { "eight", 500, NULL }, + { "exclamdown", 389, NULL }, + { "endash", 500, NULL }, + { "oe", 667, NULL }, + { "Abreve", 611, NULL }, + { "Umacron", 722, NULL }, + { "ecircumflex", 444, NULL }, + { "Adieresis", 611, NULL }, + { "copyright", 760, NULL }, + { "Egrave", 611, NULL }, + { "slash", 278, NULL }, + { "Edieresis", 611, NULL }, + { "otilde", 500, NULL }, + { "Idieresis", 333, NULL }, + { "parenleft", 333, NULL }, + { "one", 500, NULL }, + { "emacron", 444, NULL }, + { "Odieresis", 722, NULL }, + { "ucircumflex", 500, NULL }, + { "bracketleft", 389, NULL }, + { "Ugrave", 722, NULL }, + { "quoteright", 333, NULL }, + { "Udieresis", 722, NULL }, + { "perthousand", 1000, NULL }, + { "Ydieresis", 556, NULL }, + { "umacron", 500, NULL }, + { "abreve", 500, NULL }, + { "Eacute", 611, NULL }, + { "adieresis", 500, NULL }, + { "egrave", 444, NULL }, + { "edieresis", 444, NULL }, + { "idieresis", 278, NULL }, + { "Eth", 722, NULL }, + { "ae", 667, NULL }, + { "asterisk", 500, NULL }, + { "odieresis", 500, NULL }, + { "Uacute", 722, NULL }, + { "ugrave", 500, NULL }, + { "nine", 500, NULL }, + { "five", 500, NULL }, + { "udieresis", 500, NULL }, + { "Zcaron", 556, NULL }, + { "Scommaaccent", 500, NULL }, + { "threequarters", 750, NULL }, + { "guillemotright", 500, NULL }, + { "Ccedilla", 667, NULL }, + { "ydieresis", 444, NULL }, + { "tilde", 333, NULL }, + { "at", 920, NULL }, + { "eacute", 444, NULL }, + { "underscore", 500, NULL }, + { "Euro", 500, NULL }, + { "Dcroat", 722, NULL }, + { "multiply", 675, NULL }, + { "zero", 500, NULL }, + { "eth", 500, NULL }, + { "Scedilla", 500, NULL }, + { "Ograve", 722, NULL }, + { "Racute", 611, NULL }, + { "partialdiff", 476, NULL }, + { "uacute", 500, NULL }, + { "braceleft", 400, NULL }, + { "Thorn", 611, NULL }, + { "zcaron", 389, NULL }, + { "scommaaccent", 389, NULL }, + { "ccedilla", 444, NULL }, + { "Dcaron", 722, NULL }, + { "dcroat", 500, NULL }, + { "Ocircumflex", 722, NULL }, + { "Oacute", 722, NULL }, + { "scedilla", 389, NULL }, + { "ogonek", 333, NULL }, + { "ograve", 500, NULL }, + { "racute", 389, NULL }, + { "Tcaron", 556, NULL }, + { "Eogonek", 611, NULL }, + { "thorn", 500, NULL }, + { "degree", 400, NULL }, + { "registered", 760, NULL }, + { "radical", 453, NULL }, + { "Aring", 611, NULL }, + { "percent", 833, NULL }, + { "six", 500, NULL }, + { "paragraph", 523, NULL }, + { "dcaron", 544, NULL }, + { "Uogonek", 722, NULL }, + { "two", 500, NULL }, + { "summation", 600, NULL }, + { "Igrave", 333, NULL }, + { "Lacute", 556, NULL }, + { "ocircumflex", 500, NULL }, + { "oacute", 500, NULL }, + { "Uring", 722, NULL }, + { "Lcommaaccent", 556, NULL }, + { "tcaron", 300, NULL }, + { "eogonek", 444, NULL }, + { "Delta", 612, NULL }, + { "Ohungarumlaut", 722, NULL }, + { "asciicircum", 422, NULL }, + { "aring", 500, NULL }, + { "grave", 333, NULL }, + { "uogonek", 500, NULL }, + { "bracketright", 389, NULL }, + { "Iacute", 333, NULL }, + { "ampersand", 778, NULL }, + { "igrave", 278, NULL }, + { "lacute", 278, NULL }, + { "Ncaron", 667, NULL }, + { "plus", 675, NULL }, + { "uring", 500, NULL }, + { "quotesinglbase", 333, NULL }, + { "lcommaaccent", 278, NULL }, + { "Yacute", 556, NULL }, + { "ohungarumlaut", 500, NULL }, + { "threesuperior", 300, NULL }, + { "acute", 333, NULL }, + { "section", 500, NULL }, + { "dieresis", 333, NULL }, + { "iacute", 278, NULL }, + { "quotedblbase", 556, NULL }, + { "ncaron", 500, NULL }, + { "florin", 500, NULL }, + { "yacute", 444, NULL }, + { "Rcommaaccent", 611, NULL }, + { "fi", 500, NULL }, + { "fl", 500, NULL }, + { "Acircumflex", 611, NULL }, + { "Cacute", 667, NULL }, + { "Icircumflex", 333, NULL }, + { "guillemotleft", 500, NULL }, + { "germandbls", 500, NULL }, + { "Amacron", 611, NULL }, + { "seven", 500, NULL }, + { "Sacute", 500, NULL }, + { "ordmasculine", 310, NULL }, + { "dotlessi", 278, NULL }, + { "sterling", 500, NULL }, + { "notequal", 549, NULL }, + { "Imacron", 333, NULL }, + { "rcommaaccent", 389, NULL }, + { "Zdotaccent", 556, NULL }, + { "acircumflex", 500, NULL }, + { "cacute", 444, NULL }, + { "Ecaron", 611, NULL }, + { "icircumflex", 278, NULL }, + { "braceright", 400, NULL }, + { "quotedblright", 556, NULL }, + { "amacron", 500, NULL }, + { "sacute", 389, NULL }, + { "imacron", 278, NULL }, + { "cent", 500, NULL }, + { "currency", 500, NULL }, + { "logicalnot", 675, NULL }, + { "zdotaccent", 389, NULL }, + { "Atilde", 611, NULL }, + { "breve", 333, NULL }, + { "bar", 275, NULL }, + { "fraction", 167, NULL }, + { "less", 675, NULL }, + { "ecaron", 444, NULL }, + { "guilsinglleft", 333, NULL }, + { "exclam", 333, NULL }, + { "period", 250, NULL }, + { "Rcaron", 611, NULL }, + { "Kcommaaccent", 667, NULL }, + { "greater", 675, NULL }, + { "atilde", 500, NULL }, + { "brokenbar", 275, NULL }, + { "quoteleft", 333, NULL }, + { "Edotaccent", 611, NULL }, + { "onesuperior", 300, NULL } +}; + +static BuiltinFontWidth timesRomanWidthsTab[] = { + { "Ntilde", 722, NULL }, + { "rcaron", 333, NULL }, + { "kcommaaccent", 500, NULL }, + { "Ncommaaccent", 722, NULL }, + { "Zacute", 611, NULL }, + { "comma", 250, NULL }, + { "cedilla", 333, NULL }, + { "plusminus", 564, NULL }, + { "circumflex", 333, NULL }, + { "dotaccent", 333, NULL }, + { "edotaccent", 444, NULL }, + { "asciitilde", 541, NULL }, + { "colon", 278, NULL }, + { "onehalf", 750, NULL }, + { "dollar", 500, NULL }, + { "Lcaron", 611, NULL }, + { "ntilde", 500, NULL }, + { "Aogonek", 722, NULL }, + { "ncommaaccent", 500, NULL }, + { "minus", 564, NULL }, + { "Iogonek", 333, NULL }, + { "zacute", 444, NULL }, + { "yen", 500, NULL }, + { "space", 250, NULL }, + { "Omacron", 722, NULL }, + { "questiondown", 444, NULL }, + { "emdash", 1000, NULL }, + { "Agrave", 722, NULL }, + { "three", 500, NULL }, + { "numbersign", 500, NULL }, + { "lcaron", 344, NULL }, + { "A", 722, NULL }, + { "B", 667, NULL }, + { "C", 667, NULL }, + { "aogonek", 444, NULL }, + { "D", 722, NULL }, + { "E", 611, NULL }, + { "onequarter", 750, NULL }, + { "F", 556, NULL }, + { "G", 722, NULL }, + { "H", 722, NULL }, + { "I", 333, NULL }, + { "J", 389, NULL }, + { "K", 722, NULL }, + { "iogonek", 278, NULL }, + { "backslash", 278, NULL }, + { "L", 611, NULL }, + { "periodcentered", 250, NULL }, + { "M", 889, NULL }, + { "N", 722, NULL }, + { "omacron", 500, NULL }, + { "Tcommaaccent", 611, NULL }, + { "O", 722, NULL }, + { "P", 556, NULL }, + { "Q", 722, NULL }, + { "Uhungarumlaut", 722, NULL }, + { "R", 667, NULL }, + { "Aacute", 722, NULL }, + { "caron", 333, NULL }, + { "S", 556, NULL }, + { "T", 611, NULL }, + { "U", 722, NULL }, + { "agrave", 444, NULL }, + { "V", 722, NULL }, + { "W", 944, NULL }, + { "X", 722, NULL }, + { "question", 444, NULL }, + { "equal", 564, NULL }, + { "Y", 722, NULL }, + { "Z", 611, NULL }, + { "four", 500, NULL }, + { "a", 444, NULL }, + { "Gcommaaccent", 722, NULL }, + { "b", 500, NULL }, + { "c", 444, NULL }, + { "d", 500, NULL }, + { "e", 444, NULL }, + { "f", 333, NULL }, + { "g", 500, NULL }, + { "bullet", 350, NULL }, + { "h", 500, NULL }, + { "i", 278, NULL }, + { "Oslash", 722, NULL }, + { "dagger", 500, NULL }, + { "j", 278, NULL }, + { "k", 500, NULL }, + { "l", 278, NULL }, + { "m", 778, NULL }, + { "n", 500, NULL }, + { "tcommaaccent", 278, NULL }, + { "o", 500, NULL }, + { "ordfeminine", 276, NULL }, + { "ring", 333, NULL }, + { "p", 500, NULL }, + { "q", 500, NULL }, + { "uhungarumlaut", 500, NULL }, + { "r", 333, NULL }, + { "twosuperior", 300, NULL }, + { "aacute", 444, NULL }, + { "s", 389, NULL }, + { "OE", 889, NULL }, + { "t", 278, NULL }, + { "divide", 564, NULL }, + { "u", 500, NULL }, + { "Ccaron", 667, NULL }, + { "v", 500, NULL }, + { "w", 722, NULL }, + { "x", 500, NULL }, + { "y", 500, NULL }, + { "z", 444, NULL }, + { "Gbreve", 722, NULL }, + { "commaaccent", 250, NULL }, + { "hungarumlaut", 333, NULL }, + { "Idotaccent", 333, NULL }, + { "Nacute", 722, NULL }, + { "quotedbl", 408, NULL }, + { "gcommaaccent", 500, NULL }, + { "mu", 500, NULL }, + { "greaterequal", 549, NULL }, + { "Scaron", 556, NULL }, + { "Lslash", 611, NULL }, + { "semicolon", 278, NULL }, + { "oslash", 500, NULL }, + { "lessequal", 549, NULL }, + { "lozenge", 471, NULL }, + { "parenright", 333, NULL }, + { "ccaron", 444, NULL }, + { "Ecircumflex", 611, NULL }, + { "gbreve", 500, NULL }, + { "trademark", 980, NULL }, + { "daggerdbl", 500, NULL }, + { "nacute", 500, NULL }, + { "macron", 333, NULL }, + { "Otilde", 722, NULL }, + { "Emacron", 611, NULL }, + { "ellipsis", 1000, NULL }, + { "scaron", 389, NULL }, + { "AE", 889, NULL }, + { "Ucircumflex", 722, NULL }, + { "lslash", 278, NULL }, + { "quotedblleft", 444, NULL }, + { "guilsinglright", 333, NULL }, + { "hyphen", 333, NULL }, + { "quotesingle", 180, NULL }, + { "eight", 500, NULL }, + { "exclamdown", 333, NULL }, + { "endash", 500, NULL }, + { "oe", 722, NULL }, + { "Abreve", 722, NULL }, + { "Umacron", 722, NULL }, + { "ecircumflex", 444, NULL }, + { "Adieresis", 722, NULL }, + { "copyright", 760, NULL }, + { "Egrave", 611, NULL }, + { "slash", 278, NULL }, + { "Edieresis", 611, NULL }, + { "otilde", 500, NULL }, + { "Idieresis", 333, NULL }, + { "parenleft", 333, NULL }, + { "one", 500, NULL }, + { "emacron", 444, NULL }, + { "Odieresis", 722, NULL }, + { "ucircumflex", 500, NULL }, + { "bracketleft", 333, NULL }, + { "Ugrave", 722, NULL }, + { "quoteright", 333, NULL }, + { "Udieresis", 722, NULL }, + { "perthousand", 1000, NULL }, + { "Ydieresis", 722, NULL }, + { "umacron", 500, NULL }, + { "abreve", 444, NULL }, + { "Eacute", 611, NULL }, + { "adieresis", 444, NULL }, + { "egrave", 444, NULL }, + { "edieresis", 444, NULL }, + { "idieresis", 278, NULL }, + { "Eth", 722, NULL }, + { "ae", 667, NULL }, + { "asterisk", 500, NULL }, + { "odieresis", 500, NULL }, + { "Uacute", 722, NULL }, + { "ugrave", 500, NULL }, + { "nine", 500, NULL }, + { "five", 500, NULL }, + { "udieresis", 500, NULL }, + { "Zcaron", 611, NULL }, + { "Scommaaccent", 556, NULL }, + { "threequarters", 750, NULL }, + { "guillemotright", 500, NULL }, + { "Ccedilla", 667, NULL }, + { "ydieresis", 500, NULL }, + { "tilde", 333, NULL }, + { "at", 921, NULL }, + { "eacute", 444, NULL }, + { "underscore", 500, NULL }, + { "Euro", 500, NULL }, + { "Dcroat", 722, NULL }, + { "multiply", 564, NULL }, + { "zero", 500, NULL }, + { "eth", 500, NULL }, + { "Scedilla", 556, NULL }, + { "Ograve", 722, NULL }, + { "Racute", 667, NULL }, + { "partialdiff", 476, NULL }, + { "uacute", 500, NULL }, + { "braceleft", 480, NULL }, + { "Thorn", 556, NULL }, + { "zcaron", 444, NULL }, + { "scommaaccent", 389, NULL }, + { "ccedilla", 444, NULL }, + { "Dcaron", 722, NULL }, + { "dcroat", 500, NULL }, + { "Ocircumflex", 722, NULL }, + { "Oacute", 722, NULL }, + { "scedilla", 389, NULL }, + { "ogonek", 333, NULL }, + { "ograve", 500, NULL }, + { "racute", 333, NULL }, + { "Tcaron", 611, NULL }, + { "Eogonek", 611, NULL }, + { "thorn", 500, NULL }, + { "degree", 400, NULL }, + { "registered", 760, NULL }, + { "radical", 453, NULL }, + { "Aring", 722, NULL }, + { "percent", 833, NULL }, + { "six", 500, NULL }, + { "paragraph", 453, NULL }, + { "dcaron", 588, NULL }, + { "Uogonek", 722, NULL }, + { "two", 500, NULL }, + { "summation", 600, NULL }, + { "Igrave", 333, NULL }, + { "Lacute", 611, NULL }, + { "ocircumflex", 500, NULL }, + { "oacute", 500, NULL }, + { "Uring", 722, NULL }, + { "Lcommaaccent", 611, NULL }, + { "tcaron", 326, NULL }, + { "eogonek", 444, NULL }, + { "Delta", 612, NULL }, + { "Ohungarumlaut", 722, NULL }, + { "asciicircum", 469, NULL }, + { "aring", 444, NULL }, + { "grave", 333, NULL }, + { "uogonek", 500, NULL }, + { "bracketright", 333, NULL }, + { "Iacute", 333, NULL }, + { "ampersand", 778, NULL }, + { "igrave", 278, NULL }, + { "lacute", 278, NULL }, + { "Ncaron", 722, NULL }, + { "plus", 564, NULL }, + { "uring", 500, NULL }, + { "quotesinglbase", 333, NULL }, + { "lcommaaccent", 278, NULL }, + { "Yacute", 722, NULL }, + { "ohungarumlaut", 500, NULL }, + { "threesuperior", 300, NULL }, + { "acute", 333, NULL }, + { "section", 500, NULL }, + { "dieresis", 333, NULL }, + { "iacute", 278, NULL }, + { "quotedblbase", 444, NULL }, + { "ncaron", 500, NULL }, + { "florin", 500, NULL }, + { "yacute", 500, NULL }, + { "Rcommaaccent", 667, NULL }, + { "fi", 556, NULL }, + { "fl", 556, NULL }, + { "Acircumflex", 722, NULL }, + { "Cacute", 667, NULL }, + { "Icircumflex", 333, NULL }, + { "guillemotleft", 500, NULL }, + { "germandbls", 500, NULL }, + { "Amacron", 722, NULL }, + { "seven", 500, NULL }, + { "Sacute", 556, NULL }, + { "ordmasculine", 310, NULL }, + { "dotlessi", 278, NULL }, + { "sterling", 500, NULL }, + { "notequal", 549, NULL }, + { "Imacron", 333, NULL }, + { "rcommaaccent", 333, NULL }, + { "Zdotaccent", 611, NULL }, + { "acircumflex", 444, NULL }, + { "cacute", 444, NULL }, + { "Ecaron", 611, NULL }, + { "icircumflex", 278, NULL }, + { "braceright", 480, NULL }, + { "quotedblright", 444, NULL }, + { "amacron", 444, NULL }, + { "sacute", 389, NULL }, + { "imacron", 278, NULL }, + { "cent", 500, NULL }, + { "currency", 500, NULL }, + { "logicalnot", 564, NULL }, + { "zdotaccent", 444, NULL }, + { "Atilde", 722, NULL }, + { "breve", 333, NULL }, + { "bar", 200, NULL }, + { "fraction", 167, NULL }, + { "less", 564, NULL }, + { "ecaron", 444, NULL }, + { "guilsinglleft", 333, NULL }, + { "exclam", 333, NULL }, + { "period", 250, NULL }, + { "Rcaron", 667, NULL }, + { "Kcommaaccent", 722, NULL }, + { "greater", 564, NULL }, + { "atilde", 444, NULL }, + { "brokenbar", 200, NULL }, + { "quoteleft", 333, NULL }, + { "Edotaccent", 611, NULL }, + { "onesuperior", 300, NULL } +}; + +static BuiltinFontWidth zapfDingbatsWidthsTab[] = { + { "a81", 438, NULL }, + { "a82", 138, NULL }, + { "a83", 277, NULL }, + { "a84", 415, NULL }, + { "a85", 509, NULL }, + { "a86", 410, NULL }, + { "a87", 234, NULL }, + { "a88", 234, NULL }, + { "a89", 390, NULL }, + { "a140", 788, NULL }, + { "a141", 788, NULL }, + { "a142", 788, NULL }, + { "a143", 788, NULL }, + { "a144", 788, NULL }, + { "a145", 788, NULL }, + { "a146", 788, NULL }, + { "a147", 788, NULL }, + { "a148", 788, NULL }, + { "a149", 788, NULL }, + { "a90", 390, NULL }, + { "a91", 276, NULL }, + { "a92", 276, NULL }, + { "space", 278, NULL }, + { "a93", 317, NULL }, + { "a94", 317, NULL }, + { "a95", 334, NULL }, + { "a96", 334, NULL }, + { "a97", 392, NULL }, + { "a98", 392, NULL }, + { "a99", 668, NULL }, + { "a150", 788, NULL }, + { "a151", 788, NULL }, + { "a152", 788, NULL }, + { "a153", 788, NULL }, + { "a154", 788, NULL }, + { "a155", 788, NULL }, + { "a156", 788, NULL }, + { "a157", 788, NULL }, + { "a158", 788, NULL }, + { "a159", 788, NULL }, + { "a160", 894, NULL }, + { "a161", 838, NULL }, + { "a162", 924, NULL }, + { "a163", 1016, NULL }, + { "a164", 458, NULL }, + { "a165", 924, NULL }, + { "a166", 918, NULL }, + { "a167", 927, NULL }, + { "a168", 928, NULL }, + { "a169", 928, NULL }, + { "a170", 834, NULL }, + { "a171", 873, NULL }, + { "a172", 828, NULL }, + { "a173", 924, NULL }, + { "a174", 917, NULL }, + { "a175", 930, NULL }, + { "a176", 931, NULL }, + { "a177", 463, NULL }, + { "a178", 883, NULL }, + { "a179", 836, NULL }, + { "a180", 867, NULL }, + { "a181", 696, NULL }, + { "a182", 874, NULL }, + { "a183", 760, NULL }, + { "a184", 946, NULL }, + { "a185", 865, NULL }, + { "a186", 967, NULL }, + { "a187", 831, NULL }, + { "a188", 873, NULL }, + { "a189", 927, NULL }, + { "a1", 974, NULL }, + { "a2", 961, NULL }, + { "a3", 980, NULL }, + { "a4", 719, NULL }, + { "a5", 789, NULL }, + { "a6", 494, NULL }, + { "a7", 552, NULL }, + { "a8", 537, NULL }, + { "a9", 577, NULL }, + { "a190", 970, NULL }, + { "a191", 918, NULL }, + { "a192", 748, NULL }, + { "a193", 836, NULL }, + { "a194", 771, NULL }, + { "a195", 888, NULL }, + { "a196", 748, NULL }, + { "a197", 771, NULL }, + { "a198", 888, NULL }, + { "a199", 867, NULL }, + { "a10", 692, NULL }, + { "a11", 960, NULL }, + { "a12", 939, NULL }, + { "a13", 549, NULL }, + { "a14", 855, NULL }, + { "a15", 911, NULL }, + { "a16", 933, NULL }, + { "a17", 945, NULL }, + { "a18", 974, NULL }, + { "a19", 755, NULL }, + { "a20", 846, NULL }, + { "a21", 762, NULL }, + { "a22", 761, NULL }, + { "a23", 571, NULL }, + { "a24", 677, NULL }, + { "a25", 763, NULL }, + { "a26", 760, NULL }, + { "a27", 759, NULL }, + { "a28", 754, NULL }, + { "a29", 786, NULL }, + { "a30", 788, NULL }, + { "a31", 788, NULL }, + { "a32", 790, NULL }, + { "a33", 793, NULL }, + { "a34", 794, NULL }, + { "a35", 816, NULL }, + { "a36", 823, NULL }, + { "a37", 789, NULL }, + { "a38", 841, NULL }, + { "a39", 823, NULL }, + { "a40", 833, NULL }, + { "a41", 816, NULL }, + { "a42", 831, NULL }, + { "a43", 923, NULL }, + { "a44", 744, NULL }, + { "a45", 723, NULL }, + { "a46", 749, NULL }, + { "a47", 790, NULL }, + { "a48", 792, NULL }, + { "a49", 695, NULL }, + { "a100", 668, NULL }, + { "a101", 732, NULL }, + { "a102", 544, NULL }, + { "a103", 544, NULL }, + { "a104", 910, NULL }, + { "a105", 911, NULL }, + { "a106", 667, NULL }, + { "a107", 760, NULL }, + { "a108", 760, NULL }, + { "a109", 626, NULL }, + { "a50", 776, NULL }, + { "a51", 768, NULL }, + { "a52", 792, NULL }, + { "a53", 759, NULL }, + { "a54", 707, NULL }, + { "a55", 708, NULL }, + { "a56", 682, NULL }, + { "a57", 701, NULL }, + { "a58", 826, NULL }, + { "a59", 815, NULL }, + { "a110", 694, NULL }, + { "a111", 595, NULL }, + { "a112", 776, NULL }, + { "a117", 690, NULL }, + { "a118", 791, NULL }, + { "a119", 790, NULL }, + { "a60", 789, NULL }, + { "a61", 789, NULL }, + { "a62", 707, NULL }, + { "a63", 687, NULL }, + { "a64", 696, NULL }, + { "a65", 689, NULL }, + { "a66", 786, NULL }, + { "a67", 787, NULL }, + { "a68", 713, NULL }, + { "a69", 791, NULL }, + { "a200", 696, NULL }, + { "a201", 874, NULL }, + { "a120", 788, NULL }, + { "a121", 788, NULL }, + { "a202", 974, NULL }, + { "a122", 788, NULL }, + { "a203", 762, NULL }, + { "a123", 788, NULL }, + { "a204", 759, NULL }, + { "a124", 788, NULL }, + { "a205", 509, NULL }, + { "a125", 788, NULL }, + { "a206", 410, NULL }, + { "a126", 788, NULL }, + { "a127", 788, NULL }, + { "a128", 788, NULL }, + { "a129", 788, NULL }, + { "a70", 785, NULL }, + { "a71", 791, NULL }, + { "a72", 873, NULL }, + { "a73", 761, NULL }, + { "a74", 762, NULL }, + { "a75", 759, NULL }, + { "a76", 892, NULL }, + { "a77", 892, NULL }, + { "a78", 788, NULL }, + { "a79", 784, NULL }, + { "a130", 788, NULL }, + { "a131", 788, NULL }, + { "a132", 788, NULL }, + { "a133", 788, NULL }, + { "a134", 788, NULL }, + { "a135", 788, NULL }, + { "a136", 788, NULL }, + { "a137", 788, NULL }, + { "a138", 788, NULL }, + { "a139", 788, NULL } +}; + +BuiltinFont builtinFonts[] = { + { "Courier", standardEncoding, 629, -157, { -23, -250, 715, 805}, NULL }, + { "Courier-Bold", standardEncoding, 629, -157, {-113, -250, 749, 801}, NULL }, + { "Courier-BoldOblique", standardEncoding, 629, -157, { -57, -250, 869, 801}, NULL }, + { "Courier-Oblique", standardEncoding, 629, -157, { -27, -250, 849, 805}, NULL }, + { "Helvetica", standardEncoding, 718, -207, {-166, -225, 1000, 931}, NULL }, + { "Helvetica-Bold", standardEncoding, 718, -207, {-170, -228, 1003, 962}, NULL }, + { "Helvetica-BoldOblique", standardEncoding, 718, -207, {-174, -228, 1114, 962}, NULL }, + { "Helvetica-Oblique", standardEncoding, 718, -207, {-170, -225, 1116, 931}, NULL }, + { "Symbol", symbolEncoding, 1010, -293, {-180, -293, 1090, 1010}, NULL }, + { "Times-Bold", standardEncoding, 683, -217, {-168, -218, 1000, 935}, NULL }, + { "Times-BoldItalic", standardEncoding, 683, -217, {-200, -218, 996, 921}, NULL }, + { "Times-Italic", standardEncoding, 683, -217, {-169, -217, 1010, 883}, NULL }, + { "Times-Roman", standardEncoding, 683, -217, {-168, -218, 1000, 898}, NULL }, + { "ZapfDingbats", zapfDingbatsEncoding, 820, -143, { -1, -143, 981, 820}, NULL } +}; + +BuiltinFont *builtinFontSubst[] = { + &builtinFonts[0], + &builtinFonts[3], + &builtinFonts[1], + &builtinFonts[2], + &builtinFonts[4], + &builtinFonts[7], + &builtinFonts[5], + &builtinFonts[6], + &builtinFonts[12], + &builtinFonts[11], + &builtinFonts[9], + &builtinFonts[10] +}; + +void initBuiltinFontTables() { + builtinFonts[0].widths = new BuiltinFontWidths(courierWidthsTab, 315); + builtinFonts[1].widths = new BuiltinFontWidths(courierBoldWidthsTab, 315); + builtinFonts[2].widths = new BuiltinFontWidths(courierBoldObliqueWidthsTab, 315); + builtinFonts[3].widths = new BuiltinFontWidths(courierObliqueWidthsTab, 315); + builtinFonts[4].widths = new BuiltinFontWidths(helveticaWidthsTab, 315); + builtinFonts[5].widths = new BuiltinFontWidths(helveticaBoldWidthsTab, 316); + builtinFonts[6].widths = new BuiltinFontWidths(helveticaBoldObliqueWidthsTab, 315); + builtinFonts[7].widths = new BuiltinFontWidths(helveticaObliqueWidthsTab, 315); + builtinFonts[8].widths = new BuiltinFontWidths(symbolWidthsTab, 190); + builtinFonts[9].widths = new BuiltinFontWidths(timesBoldWidthsTab, 315); + builtinFonts[10].widths = new BuiltinFontWidths(timesBoldItalicWidthsTab, 315); + builtinFonts[11].widths = new BuiltinFontWidths(timesItalicWidthsTab, 315); + builtinFonts[12].widths = new BuiltinFontWidths(timesRomanWidthsTab, 315); + builtinFonts[13].widths = new BuiltinFontWidths(zapfDingbatsWidthsTab, 202); +} + +void freeBuiltinFontTables() { + int i; + + for (i = 0; i < 14; ++i) { + delete builtinFonts[i].widths; + } +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFontTables.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFontTables.h new file mode 100644 index 00000000000..eb45549efd2 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/BuiltinFontTables.h @@ -0,0 +1,23 @@ +//======================================================================== +// +// BuiltinFontTables.h +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef BUILTINFONTTABLES_H +#define BUILTINFONTTABLES_H + +#include "BuiltinFont.h" + +#define nBuiltinFonts 14 +#define nBuiltinFontSubsts 12 + +extern BuiltinFont builtinFonts[nBuiltinFonts]; +extern BuiltinFont *builtinFontSubst[nBuiltinFontSubsts]; + +extern void initBuiltinFontTables(); +extern void freeBuiltinFontTables(); + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CMap.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/CMap.cc new file mode 100644 index 00000000000..0e861c017f8 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CMap.cc @@ -0,0 +1,469 @@ +//======================================================================== +// +// CMap.cc +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2008 Koji Otani <sho@bbr.jp> +// Copyright (C) 2008, 2009 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include "goo/gmem.h" +#include "goo/gfile.h" +#include "goo/GooString.h" +#include "Error.h" +#include "GlobalParams.h" +#include "PSTokenizer.h" +#include "CMap.h" +#include "Object.h" + +//------------------------------------------------------------------------ + +struct CMapVectorEntry { + GBool isVector; + union { + CMapVectorEntry *vector; + CID cid; + }; +}; + +//------------------------------------------------------------------------ + +static int getCharFromFile(void *data) { + return fgetc((FILE *)data); +} + +static int getCharFromStream(void *data) { + return ((Stream *)data)->getChar(); +} + +//------------------------------------------------------------------------ + +CMap *CMap::parse(CMapCache *cache, GooString *collectionA, + GooString *cMapNameA, Stream *stream) { + FILE *f = NULL; + CMap *cmap; + PSTokenizer *pst; + char tok1[256], tok2[256], tok3[256]; + int n1, n2, n3; + Guint start, end, code; + + if (stream) { + stream->reset(); + pst = new PSTokenizer(&getCharFromStream, stream); + } else { + if (!(f = globalParams->findCMapFile(collectionA, cMapNameA))) { + + // Check for an identity CMap. + if (!cMapNameA->cmp("Identity") || !cMapNameA->cmp("Identity-H")) { + return new CMap(collectionA->copy(), cMapNameA->copy(), 0); + } + if (!cMapNameA->cmp("Identity-V")) { + return new CMap(collectionA->copy(), cMapNameA->copy(), 1); + } + + error(-1, "Couldn't find '%s' CMap file for '%s' collection", + cMapNameA->getCString(), collectionA->getCString()); + return NULL; + } + pst = new PSTokenizer(&getCharFromFile, f); + } + + cmap = new CMap(collectionA->copy(), cMapNameA->copy()); + + pst->getToken(tok1, sizeof(tok1), &n1); + while (pst->getToken(tok2, sizeof(tok2), &n2)) { + if (!strcmp(tok2, "usecmap")) { + if (tok1[0] == '/') { + cmap->useCMap(cache, tok1 + 1); + } + pst->getToken(tok1, sizeof(tok1), &n1); + } else if (!strcmp(tok1, "/WMode")) { + cmap->wMode = atoi(tok2); + pst->getToken(tok1, sizeof(tok1), &n1); + } else if (!strcmp(tok2, "begincodespacerange")) { + while (pst->getToken(tok1, sizeof(tok1), &n1)) { + if (!strcmp(tok1, "endcodespacerange")) { + break; + } + if (!pst->getToken(tok2, sizeof(tok2), &n2) || + !strcmp(tok2, "endcodespacerange")) { + error(-1, "Illegal entry in codespacerange block in CMap"); + break; + } + if (tok1[0] == '<' && tok2[0] == '<' && + n1 == n2 && n1 >= 4 && (n1 & 1) == 0) { + tok1[n1 - 1] = tok2[n1 - 1] = '\0'; + sscanf(tok1 + 1, "%x", &start); + sscanf(tok2 + 1, "%x", &end); + n1 = (n1 - 2) / 2; + cmap->addCodeSpace(cmap->vector, start, end, n1); + } + } + pst->getToken(tok1, sizeof(tok1), &n1); + } else if (!strcmp(tok2, "begincidchar")) { + while (pst->getToken(tok1, sizeof(tok1), &n1)) { + if (!strcmp(tok1, "endcidchar")) { + break; + } + if (!pst->getToken(tok2, sizeof(tok2), &n2) || + !strcmp(tok2, "endcidchar")) { + error(-1, "Illegal entry in cidchar block in CMap"); + break; + } + if (!(tok1[0] == '<' && tok1[n1 - 1] == '>' && + n1 >= 4 && (n1 & 1) == 0)) { + error(-1, "Illegal entry in cidchar block in CMap"); + continue; + } + tok1[n1 - 1] = '\0'; + if (sscanf(tok1 + 1, "%x", &code) != 1) { + error(-1, "Illegal entry in cidchar block in CMap"); + continue; + } + n1 = (n1 - 2) / 2; + cmap->addCIDs(code, code, n1, (CID)atoi(tok2)); + } + pst->getToken(tok1, sizeof(tok1), &n1); + } else if (!strcmp(tok2, "begincidrange")) { + while (pst->getToken(tok1, sizeof(tok1), &n1)) { + if (!strcmp(tok1, "endcidrange")) { + break; + } + if (!pst->getToken(tok2, sizeof(tok2), &n2) || + !strcmp(tok2, "endcidrange") || + !pst->getToken(tok3, sizeof(tok3), &n3) || + !strcmp(tok3, "endcidrange")) { + error(-1, "Illegal entry in cidrange block in CMap"); + break; + } + if (tok1[0] == '<' && tok2[0] == '<' && + n1 == n2 && n1 >= 4 && (n1 & 1) == 0) { + tok1[n1 - 1] = tok2[n1 - 1] = '\0'; + sscanf(tok1 + 1, "%x", &start); + sscanf(tok2 + 1, "%x", &end); + n1 = (n1 - 2) / 2; + cmap->addCIDs(start, end, n1, (CID)atoi(tok3)); + } + } + pst->getToken(tok1, sizeof(tok1), &n1); + } else { + strcpy(tok1, tok2); + } + } + delete pst; + + if (f) { + fclose(f); + } + + return cmap; +} + +CMap::CMap(GooString *collectionA, GooString *cMapNameA) { + int i; + + collection = collectionA; + cMapName = cMapNameA; + wMode = 0; + vector = (CMapVectorEntry *)gmallocn(256, sizeof(CMapVectorEntry)); + for (i = 0; i < 256; ++i) { + vector[i].isVector = gFalse; + vector[i].cid = 0; + } + refCnt = 1; +#if MULTITHREADED + gInitMutex(&mutex); +#endif +} + +CMap::CMap(GooString *collectionA, GooString *cMapNameA, int wModeA) { + collection = collectionA; + cMapName = cMapNameA; + wMode = wModeA; + vector = NULL; + refCnt = 1; +#if MULTITHREADED + gInitMutex(&mutex); +#endif +} + +void CMap::useCMap(CMapCache *cache, char *useName) { + GooString *useNameStr; + CMap *subCMap; + + useNameStr = new GooString(useName); + subCMap = cache->getCMap(collection, useNameStr, NULL); + delete useNameStr; + if (!subCMap) { + return; + } + copyVector(vector, subCMap->vector); + subCMap->decRefCnt(); +} + +void CMap::copyVector(CMapVectorEntry *dest, CMapVectorEntry *src) { + int i, j; + + for (i = 0; i < 256; ++i) { + if (src[i].isVector) { + if (!dest[i].isVector) { + dest[i].isVector = gTrue; + dest[i].vector = + (CMapVectorEntry *)gmallocn(256, sizeof(CMapVectorEntry)); + for (j = 0; j < 256; ++j) { + dest[i].vector[j].isVector = gFalse; + dest[i].vector[j].cid = 0; + } + } + copyVector(dest[i].vector, src[i].vector); + } else { + if (dest[i].isVector) { + error(-1, "Collision in usecmap"); + } else { + dest[i].cid = src[i].cid; + } + } + } +} + +void CMap::addCodeSpace(CMapVectorEntry *vec, Guint start, Guint end, + Guint nBytes) { + Guint start2, end2; + int startByte, endByte, i, j; + + if (nBytes > 1) { + startByte = (start >> (8 * (nBytes - 1))) & 0xff; + endByte = (end >> (8 * (nBytes - 1))) & 0xff; + start2 = start & ((1 << (8 * (nBytes - 1))) - 1); + end2 = end & ((1 << (8 * (nBytes - 1))) - 1); + for (i = startByte; i <= endByte; ++i) { + if (!vec[i].isVector) { + vec[i].isVector = gTrue; + vec[i].vector = + (CMapVectorEntry *)gmallocn(256, sizeof(CMapVectorEntry)); + for (j = 0; j < 256; ++j) { + vec[i].vector[j].isVector = gFalse; + vec[i].vector[j].cid = 0; + } + } + addCodeSpace(vec[i].vector, start2, end2, nBytes - 1); + } + } +} + +void CMap::addCIDs(Guint start, Guint end, Guint nBytes, CID firstCID) { + CMapVectorEntry *vec; + CID cid; + int byte; + Guint i; + + vec = vector; + for (i = nBytes - 1; i >= 1; --i) { + byte = (start >> (8 * i)) & 0xff; + if (!vec[byte].isVector) { + error(-1, "Invalid CID (%0*x - %0*x) in CMap", + 2*nBytes, start, 2*nBytes, end); + return; + } + vec = vec[byte].vector; + } + cid = firstCID; + for (byte = (int)(start & 0xff); byte <= (int)(end & 0xff); ++byte) { + if (vec[byte].isVector) { + error(-1, "Invalid CID (%0*x - %0*x) in CMap", + 2*nBytes, start, 2*nBytes, end); + } else { + vec[byte].cid = cid; + } + ++cid; + } +} + +CMap::~CMap() { + delete collection; + delete cMapName; + if (vector) { + freeCMapVector(vector); + } +#if MULTITHREADED + gDestroyMutex(&mutex); +#endif +} + +void CMap::freeCMapVector(CMapVectorEntry *vec) { + int i; + + for (i = 0; i < 256; ++i) { + if (vec[i].isVector) { + freeCMapVector(vec[i].vector); + } + } + gfree(vec); +} + +void CMap::incRefCnt() { +#if MULTITHREADED + gLockMutex(&mutex); +#endif + ++refCnt; +#if MULTITHREADED + gUnlockMutex(&mutex); +#endif +} + +void CMap::decRefCnt() { + GBool done; + +#if MULTITHREADED + gLockMutex(&mutex); +#endif + done = --refCnt == 0; +#if MULTITHREADED + gUnlockMutex(&mutex); +#endif + if (done) { + delete this; + } +} + +GBool CMap::match(GooString *collectionA, GooString *cMapNameA) { + return !collection->cmp(collectionA) && !cMapName->cmp(cMapNameA); +} + +CID CMap::getCID(char *s, int len, int *nUsed) { + CMapVectorEntry *vec; + int n, i; + + if (!(vec = vector)) { + // identity CMap + *nUsed = 2; + if (len < 2) { + return 0; + } + return ((s[0] & 0xff) << 8) + (s[1] & 0xff); + } + n = 0; + while (1) { + if (n >= len) { + *nUsed = n; + return 0; + } + i = s[n++] & 0xff; + if (!vec[i].isVector) { + *nUsed = n; + return vec[i].cid; + } + vec = vec[i].vector; + } +} + +void CMap::setReverseMapVector(Guint startCode, CMapVectorEntry *vec, + Guint *rmap, Guint rmapSize, Guint ncand) { + int i; + + if (vec == 0) return; + for (i = 0;i < 256;i++) { + if (vec[i].isVector) { + setReverseMapVector((startCode+i) << 8, + vec[i].vector,rmap,rmapSize,ncand); + } else { + Guint cid = vec[i].cid; + + if (cid < rmapSize) { + Guint cand; + + for (cand = 0;cand < ncand;cand++) { + Guint code = startCode+i; + Guint idx = cid*ncand+cand; + if (rmap[idx] == 0) { + rmap[idx] = code; + break; + } else if (rmap[idx] == code) { + break; + } + } + } + } + } +} + +void CMap::setReverseMap(Guint *rmap, Guint rmapSize, Guint ncand) { + setReverseMapVector(0,vector,rmap,rmapSize,ncand); +} + +//------------------------------------------------------------------------ + +CMapCache::CMapCache() { + int i; + + for (i = 0; i < cMapCacheSize; ++i) { + cache[i] = NULL; + } +} + +CMapCache::~CMapCache() { + int i; + + for (i = 0; i < cMapCacheSize; ++i) { + if (cache[i]) { + cache[i]->decRefCnt(); + } + } +} + +CMap *CMapCache::getCMap(GooString *collection, GooString *cMapName, Stream *stream) { + CMap *cmap; + int i, j; + + if (cache[0] && cache[0]->match(collection, cMapName)) { + cache[0]->incRefCnt(); + return cache[0]; + } + for (i = 1; i < cMapCacheSize; ++i) { + if (cache[i] && cache[i]->match(collection, cMapName)) { + cmap = cache[i]; + for (j = i; j >= 1; --j) { + cache[j] = cache[j - 1]; + } + cache[0] = cmap; + cmap->incRefCnt(); + return cmap; + } + } + if ((cmap = CMap::parse(this, collection, cMapName, stream))) { + if (cache[cMapCacheSize - 1]) { + cache[cMapCacheSize - 1]->decRefCnt(); + } + for (j = cMapCacheSize - 1; j >= 1; --j) { + cache[j] = cache[j - 1]; + } + cache[0] = cmap; + cmap->incRefCnt(); + return cmap; + } + return NULL; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CMap.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/CMap.h new file mode 100644 index 00000000000..9de0a8702c9 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CMap.h @@ -0,0 +1,126 @@ +//======================================================================== +// +// CMap.h +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2008 Koji Otani <sho@bbr.jp> +// Copyright (C) 2009 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef CMAP_H +#define CMAP_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "poppler-config.h" +#include "goo/gtypes.h" +#include "CharTypes.h" + +#if MULTITHREADED +#include "goo/GooMutex.h" +#endif + +class GooString; +struct CMapVectorEntry; +class CMapCache; +class Stream; + +//------------------------------------------------------------------------ + +class CMap { +public: + + // Create the CMap specified by <collection> and <cMapName>. Sets + // the initial reference count to 1. + // Stream is a stream containing the CMap, can be NULL and + // this means the CMap will be searched in the CMap files + // Returns NULL on failure. + static CMap *parse(CMapCache *cache, GooString *collectionA, + GooString *cMapNameA, Stream *stream); + + ~CMap(); + + void incRefCnt(); + void decRefCnt(); + + // Return collection name (<registry>-<ordering>). + GooString *getCollection() { return collection; } + + // Return true if this CMap matches the specified <collectionA>, and + // <cMapNameA>. + GBool match(GooString *collectionA, GooString *cMapNameA); + + // Return the CID corresponding to the character code starting at + // <s>, which contains <len> bytes. Sets *<nUsed> to the number of + // bytes used by the char code. + CID getCID(char *s, int len, int *nUsed); + + // Return the writing mode (0=horizontal, 1=vertical). + int getWMode() { return wMode; } + + void setReverseMap(Guint *rmap, Guint rmapSize, Guint ncand); + +private: + + CMap(GooString *collectionA, GooString *cMapNameA); + CMap(GooString *collectionA, GooString *cMapNameA, int wModeA); + void useCMap(CMapCache *cache, char *useName); + void copyVector(CMapVectorEntry *dest, CMapVectorEntry *src); + void addCodeSpace(CMapVectorEntry *vec, Guint start, Guint end, + Guint nBytes); + void addCIDs(Guint start, Guint end, Guint nBytes, CID firstCID); + void freeCMapVector(CMapVectorEntry *vec); + void setReverseMapVector(Guint startCode, CMapVectorEntry *vec, + Guint *rmap, Guint rmapSize, Guint ncand); + + GooString *collection; + GooString *cMapName; + int wMode; // writing mode (0=horizontal, 1=vertical) + CMapVectorEntry *vector; // vector for first byte (NULL for + // identity CMap) + int refCnt; +#if MULTITHREADED + GooMutex mutex; +#endif +}; + +//------------------------------------------------------------------------ + +#define cMapCacheSize 4 + +class CMapCache { +public: + + CMapCache(); + ~CMapCache(); + + // Get the <cMapName> CMap for the specified character collection. + // Increments its reference count; there will be one reference for + // the cache plus one for the caller of this function. + // Stream is a stream containing the CMap, can be NULL and + // this means the CMap will be searched in the CMap files + // Returns NULL on failure. + CMap *getCMap(GooString *collection, GooString *cMapName, Stream *stream); + +private: + + CMap *cache[cMapCacheSize]; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CachedFile.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/CachedFile.cc new file mode 100644 index 00000000000..393383006b0 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CachedFile.cc @@ -0,0 +1,256 @@ +//======================================================================== +// +// CachedFile.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2009 Stefan Thomas <thomas@eload24.com> +// Copyright 2010, 2011 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#include <config.h> +#include "CachedFile.h" + +//------------------------------------------------------------------------ +// CachedFile +//------------------------------------------------------------------------ + +CachedFile::CachedFile(CachedFileLoader *cachedFileLoaderA, GooString *uriA) +{ + uri = uriA; + loader = cachedFileLoaderA; + + streamPos = 0; + chunks = new std::vector<Chunk>(); + length = 0; + + length = loader->init(uri, this); + refCnt = 1; + + if (length != ((size_t) -1)) { + chunks->resize(length/CachedFileChunkSize + 1); + } + else { + error(-1, "Failed to initialize file cache for '%s'.", uri->getCString()); + chunks->resize(0); + } +} + +CachedFile::~CachedFile() +{ + delete uri; + delete loader; + delete chunks; +} + +void CachedFile::incRefCnt() { + refCnt++; +} + +void CachedFile::decRefCnt() { + if (--refCnt == 0) + delete this; +} + +long int CachedFile::tell() { + return streamPos; +} + +int CachedFile::seek(long int offset, int origin) +{ + if (origin == SEEK_SET) { + streamPos = offset; + } else if (origin == SEEK_CUR) { + streamPos += offset; + } else { + streamPos = length + offset; + } + + if (streamPos > length) { + streamPos = 0; + return 1; + } + + return 0; +} + +int CachedFile::cache(const std::vector<ByteRange> &origRanges) +{ + std::vector<int> loadChunks; + int numChunks = length/CachedFileChunkSize + 1; + std::vector<bool> chunkNeeded(numChunks); + int startChunk, endChunk; + std::vector<ByteRange> chunk_ranges, all; + ByteRange range; + const std::vector<ByteRange> *ranges = &origRanges; + + if (ranges->empty()) { + range.offset = 0; + range.length = length; + all.push_back(range); + ranges = &all; + } + + for (int i = 0; i < numChunks; ++i) + chunkNeeded[i] = false; + for (size_t i = 0; i < ranges->size(); i++) { + + if ((*ranges)[i].length == 0) continue; + if ((*ranges)[i].offset >= length) continue; + + size_t start = (*ranges)[i].offset; + size_t end = start + (*ranges)[i].length - 1; + if (end >= length) end = length - 1; + + startChunk = start / CachedFileChunkSize; + endChunk = end / CachedFileChunkSize; + for (int chunk = startChunk; chunk <= endChunk; chunk++) { + if ((*chunks)[chunk].state == chunkStateNew) { + chunkNeeded[chunk] = true; + } + } + } + + int chunk = 0; + while (chunk < numChunks) { + while (!chunkNeeded[chunk] && (++chunk != numChunks)) ; + if (chunk == numChunks) break; + startChunk = chunk; + loadChunks.push_back(chunk); + + while ((++chunk != numChunks) && chunkNeeded[chunk]) { + loadChunks.push_back(chunk); + } + endChunk = chunk - 1; + + range.offset = startChunk * CachedFileChunkSize; + range.length = (endChunk - startChunk + 1) * CachedFileChunkSize; + + chunk_ranges.push_back(range); + } + + if (chunk_ranges.size() > 0) { + CachedFileWriter writer = + CachedFileWriter(this, &loadChunks); + return loader->load(chunk_ranges, &writer); + } + + return 0; +} + +size_t CachedFile::read(void *ptr, size_t unitsize, size_t count) +{ + size_t bytes = unitsize*count; + if (length < (streamPos + bytes)) { + bytes = length - streamPos; + } + + if (bytes == 0) return 0; + + // Load data + if (cache(streamPos, bytes) != 0) return 0; + + // Copy data to buffer + size_t toCopy = bytes; + while (toCopy) { + int chunk = streamPos / CachedFileChunkSize; + int offset = streamPos % CachedFileChunkSize; + size_t len = CachedFileChunkSize-offset; + + if (len > toCopy) + len = toCopy; + + memcpy(ptr, (*chunks)[chunk].data + offset, len); + streamPos += len; + toCopy -= len; + ptr = (char*)ptr + len; + } + + return bytes; +} + +int CachedFile::cache(size_t offset, size_t length) +{ + std::vector<ByteRange> r; + ByteRange range; + range.offset = offset; + range.length = length; + r.push_back(range); + return cache(r); +} + +//------------------------------------------------------------------------ +// CachedFileWriter +//------------------------------------------------------------------------ + +CachedFileWriter::CachedFileWriter(CachedFile *cachedFileA, std::vector<int> *chunksA) +{ + cachedFile = cachedFileA; + chunks = chunksA; + + if (chunks) { + offset = 0; + it = (*chunks).begin(); + } +} + +CachedFileWriter::~CachedFileWriter() +{ +} + +size_t CachedFileWriter::write(const char *ptr, size_t size) +{ + const char *cp = ptr; + size_t len = size; + size_t nfree, ncopy; + size_t written = 0; + size_t chunk; + + if (!len) return 0; + + while (len) { + if (chunks) { + if (offset == CachedFileChunkSize) { + it++; + if (it == (*chunks).end()) return written; + offset = 0; + } + chunk = *it; + } else { + offset = cachedFile->length % CachedFileChunkSize; + chunk = cachedFile->length / CachedFileChunkSize; + } + + if (chunk >= cachedFile->chunks->size()) { + cachedFile->chunks->resize(chunk + 1); + } + + nfree = CachedFileChunkSize - offset; + ncopy = (len >= nfree) ? nfree : len; + memcpy(&((*cachedFile->chunks)[chunk].data[offset]), cp, ncopy); + len -= ncopy; + cp += ncopy; + offset += ncopy; + written += ncopy; + + if (!chunks) { + cachedFile->length += ncopy; + } + + if (offset == CachedFileChunkSize) { + (*cachedFile->chunks)[chunk].state = CachedFile::chunkStateLoaded; + } + } + + if ((chunk == (cachedFile->length / CachedFileChunkSize)) && + (offset == (cachedFile->length % CachedFileChunkSize))) { + (*cachedFile->chunks)[chunk].state = CachedFile::chunkStateLoaded; + } + + return written; +} + +//------------------------------------------------------------------------ + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CachedFile.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/CachedFile.h new file mode 100644 index 00000000000..b99ea1ecad4 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CachedFile.h @@ -0,0 +1,146 @@ +//======================================================================== +// +// CachedFile.h +// +// Caching files support. +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2009 Stefan Thomas <thomas@eload24.com> +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#ifndef CACHEDFILE_H +#define CACHEDFILE_H + +#include "poppler-config.h" + +#include "goo/gtypes.h" +#include "Object.h" +#include "Stream.h" + +#include <vector> + +//------------------------------------------------------------------------ + +#define CachedFileChunkSize 8192 // This should be a multiple of cachedStreamBufSize + +class GooString; +class CachedFileLoader; + +//------------------------------------------------------------------------ +// CachedFile +// +// CachedFile gives FILE-like access to a document at a specified URI. +// In the constructor, you specify a CachedFileLoader that handles loading +// the data from the document. The CachedFile requests no more data then it +// needs from the CachedFileLoader. +//------------------------------------------------------------------------ + +class CachedFile { + +friend class CachedFileWriter; + +public: + + CachedFile(CachedFileLoader *cacheLoader, GooString *uri); + + Guint getLength() { return length; } + long int tell(); + int seek(long int offset, int origin); + size_t read(void * ptr, size_t unitsize, size_t count); + size_t write(const char *ptr, size_t size, size_t fromByte); + int cache(const std::vector<ByteRange> &ranges); + + // Reference counting. + void incRefCnt(); + void decRefCnt(); + +private: + + ~CachedFile(); + + enum ChunkState { + chunkStateNew = 0, + chunkStateLoaded + }; + + typedef struct { + ChunkState state; + char data[CachedFileChunkSize]; + } Chunk; + + int cache(size_t offset, size_t length); + + CachedFileLoader *loader; + GooString *uri; + + size_t length; + size_t streamPos; + + std::vector<Chunk> *chunks; + + int refCnt; // reference count + +}; + +//------------------------------------------------------------------------ +// CachedFileWriter +// +// CachedFileWriter handles sequential writes to a CachedFile. +// On construction, you specify the CachedFile and the chunks of it to which data +// should be written. +//------------------------------------------------------------------------ + +class CachedFileWriter { + +public: + + // Construct a CachedFile Writer. + // The caller is responsible for deleting the cachedFile and chunksA. + CachedFileWriter(CachedFile *cachedFile, std::vector<int> *chunksA); + + ~CachedFileWriter(); + + // Writes size bytes from ptr to cachedFile, returns number of bytes written. + size_t write(const char *ptr, size_t size); + +private: + + CachedFile *cachedFile; + std::vector<int> *chunks; + std::vector<int>::iterator it; + size_t offset; + +}; + +//------------------------------------------------------------------------ +// CachedFileLoader +// +// CachedFileLoader is an abstact class that specifies the interface for +// loadng data from an URI into a CachedFile. +//------------------------------------------------------------------------ + +class CachedFileLoader { + +public: + + virtual ~CachedFileLoader() {}; + + // Initializes the file load. + // Returns the length of the file. + // The caller is responsible for deleting uri and cachedFile. + virtual size_t init(GooString *uri, CachedFile *cachedFile) = 0; + + // Loads speficified byte ranges and passes it to the writer to store them. + // Returns 0 on success, Anything but 0 on failure. + // The caller is responsible for deleting the writer. + virtual int load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer) = 0; + +}; + +//------------------------------------------------------------------------ + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoFontEngine.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoFontEngine.cc new file mode 100644 index 00000000000..63462522e35 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoFontEngine.cc @@ -0,0 +1,794 @@ +//======================================================================== +// +// CairoFontEngine.cc +// +// Copyright 2003 Glyph & Cog, LLC +// Copyright 2004 Red Hat, Inc +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005-2007 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005 Martin Kretzschmar <martink@gnome.org> +// Copyright (C) 2005, 2009 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2006, 2007, 2010, 2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2007 Koji Otani <sho@bbr.jp> +// Copyright (C) 2008, 2009 Chris Wilson <chris@chris-wilson.co.uk> +// Copyright (C) 2008 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2009 Darren Kenny <darren.kenny@sun.com> +// Copyright (C) 2010 Suzuki Toshiya <mpsuzuki@hiroshima-u.ac.jp> +// Copyright (C) 2010 Jan Kümmel <jan+freedesktop@snorc.org> +// Copyright (C) 2012 Hib Eris <hib@hiberis.nl> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#include "config.h" +#include <string.h> +#include "CairoFontEngine.h" +#include "CairoOutputDev.h" +#include "CharCodeToUnicode.h" +#include "GlobalParams.h" +#include <fofi/FoFiTrueType.h> +#include <fofi/FoFiType1C.h> +#include "goo/gfile.h" +#include "Error.h" +#include "XRef.h" +#include "Gfx.h" +#include "Page.h" + +#if HAVE_FCNTL_H && HAVE_SYS_MMAN_H && HAVE_SYS_STAT_H +#include <fcntl.h> +#include <sys/stat.h> +#include <sys/mman.h> +#define CAN_CHECK_OPEN_FACES 1 +#endif + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + + +//------------------------------------------------------------------------ +// CairoFont +//------------------------------------------------------------------------ + +CairoFont::CairoFont(Ref ref, + cairo_font_face_t *cairo_font_face, + Gushort *codeToGID, + Guint codeToGIDLen, + GBool substitute, + GBool printing) : ref(ref), + cairo_font_face(cairo_font_face), + codeToGID(codeToGID), + codeToGIDLen(codeToGIDLen), + substitute(substitute), + printing(printing) { } + +CairoFont::~CairoFont() { + cairo_font_face_destroy (cairo_font_face); + gfree(codeToGID); +} + +GBool +CairoFont::matches(Ref &other, GBool printingA) { + return (other.num == ref.num && other.gen == ref.gen); +} + +cairo_font_face_t * +CairoFont::getFontFace(void) { + return cairo_font_face; +} + +unsigned long +CairoFont::getGlyph(CharCode code, + Unicode *u, int uLen) { + FT_UInt gid; + + if (codeToGID && code < codeToGIDLen) { + gid = (FT_UInt)codeToGID[code]; + } else { + gid = (FT_UInt)code; + } + return gid; +} + +double +CairoFont::getSubstitutionCorrection(GfxFont *gfxFont) +{ + double w1, w2; + CharCode code; + char *name; + + // for substituted fonts: adjust the font matrix -- compare the + // width of 'm' in the original font and the substituted font + if (isSubstitute() && !gfxFont->isCIDFont()) { + for (code = 0; code < 256; ++code) { + if ((name = ((Gfx8BitFont *)gfxFont)->getCharName(code)) && + name[0] == 'm' && name[1] == '\0') { + break; + } + } + if (code < 256) { + w1 = ((Gfx8BitFont *)gfxFont)->getWidth(code); + { + cairo_matrix_t m; + cairo_matrix_init_identity(&m); + cairo_font_options_t *options = cairo_font_options_create(); + cairo_font_options_set_hint_style(options, CAIRO_HINT_STYLE_NONE); + cairo_font_options_set_hint_metrics(options, CAIRO_HINT_METRICS_OFF); + cairo_scaled_font_t *scaled_font = cairo_scaled_font_create(cairo_font_face, &m, &m, options); + + cairo_text_extents_t extents; + cairo_scaled_font_text_extents(scaled_font, "m", &extents); + + cairo_scaled_font_destroy(scaled_font); + cairo_font_options_destroy(options); + w2 = extents.x_advance; + } + if (!gfxFont->isSymbolic()) { + // if real font is substantially narrower than substituted + // font, reduce the font size accordingly + if (w1 > 0.01 && w1 < 0.9 * w2) { + w1 /= w2; + return w1; + } + } + } + } + return 1.0; +} + +//------------------------------------------------------------------------ +// CairoFreeTypeFont +//------------------------------------------------------------------------ + +static cairo_user_data_key_t _ft_cairo_key; + +static void +_ft_done_face_uncached (void *closure) +{ + FT_Face face = (FT_Face) closure; + FT_Done_Face (face); +} + +static GBool +_ft_new_face_uncached (FT_Library lib, + const char *filename, + char *font_data, + int font_data_len, + FT_Face *face_out, + cairo_font_face_t **font_face_out) +{ + FT_Face face; + cairo_font_face_t *font_face; + + if (font_data == NULL) { + if (FT_New_Face (lib, filename, 0, &face)) + return gFalse; + } else { + if (FT_New_Memory_Face (lib, (unsigned char *)font_data, font_data_len, 0, &face)) + return gFalse; + } + + font_face = cairo_ft_font_face_create_for_ft_face (face, + FT_LOAD_NO_HINTING | + FT_LOAD_NO_BITMAP); + if (cairo_font_face_set_user_data (font_face, + &_ft_cairo_key, + face, + _ft_done_face_uncached)) + { + _ft_done_face_uncached (face); + cairo_font_face_destroy (font_face); + return gFalse; + } + + *face_out = face; + *font_face_out = font_face; + return gTrue; +} + +#if CAN_CHECK_OPEN_FACES +static struct _ft_face_data { + struct _ft_face_data *prev, *next, **head; + + int fd; + unsigned long hash; + size_t size; + unsigned char *bytes; + + FT_Library lib; + FT_Face face; + cairo_font_face_t *font_face; +} *_ft_open_faces; + +static unsigned long +_djb_hash (const unsigned char *bytes, size_t len) +{ + unsigned long hash = 5381; + while (len--) { + unsigned char c = *bytes++; + hash *= 33; + hash ^= c; + } + return hash; +} + +static GBool +_ft_face_data_equal (struct _ft_face_data *a, struct _ft_face_data *b) +{ + if (a->lib != b->lib) + return gFalse; + if (a->size != b->size) + return gFalse; + if (a->hash != b->hash) + return gFalse; + + return memcmp (a->bytes, b->bytes, a->size) == 0; +} + +static void +_ft_done_face (void *closure) +{ + struct _ft_face_data *data = (struct _ft_face_data *) closure; + + if (data->next) + data->next->prev = data->prev; + if (data->prev) + data->prev->next = data->next; + else + _ft_open_faces = data->next; + +#if defined(__SUNPRO_CC) && defined(__sun) && defined(__SVR4) + munmap ((char*)data->bytes, data->size); +#else + munmap (data->bytes, data->size); +#endif + close (data->fd); + + FT_Done_Face (data->face); + gfree (data); +} + +static GBool +_ft_new_face (FT_Library lib, + const char *filename, + char *font_data, + int font_data_len, + FT_Face *face_out, + cairo_font_face_t **font_face_out) +{ + struct _ft_face_data *l; + struct stat st; + struct _ft_face_data tmpl; + + tmpl.fd = -1; + + if (font_data == NULL) { + /* if we fail to mmap the file, just pass it to FreeType instead */ + tmpl.fd = open (filename, O_RDONLY); + if (tmpl.fd == -1) + return _ft_new_face_uncached (lib, filename, font_data, font_data_len, face_out, font_face_out); + + if (fstat (tmpl.fd, &st) == -1) { + close (tmpl.fd); + return _ft_new_face_uncached (lib, filename, font_data, font_data_len, face_out, font_face_out); + } + + tmpl.bytes = (unsigned char *) mmap (NULL, st.st_size, + PROT_READ, MAP_PRIVATE, + tmpl.fd, 0); + if (tmpl.bytes == MAP_FAILED) { + close (tmpl.fd); + return _ft_new_face_uncached (lib, filename, font_data, font_data_len, face_out, font_face_out); + } + tmpl.size = st.st_size; + } else { + tmpl.bytes = (unsigned char*) font_data; + tmpl.size = font_data_len; + } + + /* check to see if this is a duplicate of any of the currently open fonts */ + tmpl.lib = lib; + tmpl.hash = _djb_hash (tmpl.bytes, tmpl.size); + + for (l = _ft_open_faces; l; l = l->next) { + if (_ft_face_data_equal (l, &tmpl)) { + if (tmpl.fd != -1) { +#if defined(__SUNPRO_CC) && defined(__sun) && defined(__SVR4) + munmap ((char*)tmpl.bytes, tmpl.size); +#else + munmap (tmpl.bytes, tmpl.size); +#endif + close (tmpl.fd); + } + *face_out = l->face; + *font_face_out = cairo_font_face_reference (l->font_face); + return gTrue; + } + } + + /* not a dup, open and insert into list */ + if (FT_New_Memory_Face (lib, + (FT_Byte *) tmpl.bytes, tmpl.size, + 0, &tmpl.face)) + { + if (tmpl.fd != -1) { +#if defined(__SUNPRO_CC) && defined(__sun) && defined(__SVR4) + munmap ((char*)tmpl.bytes, tmpl.size); +#else + munmap (tmpl.bytes, tmpl.size); +#endif + + close (tmpl.fd); + } + return gFalse; + } + + l = (struct _ft_face_data *) gmallocn (1, sizeof (struct _ft_face_data)); + *l = tmpl; + l->prev = NULL; + l->next = _ft_open_faces; + if (_ft_open_faces) + _ft_open_faces->prev = l; + _ft_open_faces = l; + + l->font_face = cairo_ft_font_face_create_for_ft_face (tmpl.face, + FT_LOAD_NO_HINTING | + FT_LOAD_NO_BITMAP); + if (cairo_font_face_set_user_data (l->font_face, + &_ft_cairo_key, + l, + _ft_done_face)) + { + cairo_font_face_destroy (l->font_face); + _ft_done_face (l); + return gFalse; + } + + *face_out = l->face; + *font_face_out = l->font_face; + return gTrue; +} +#else +#define _ft_new_face _ft_new_face_uncached +#endif + +CairoFreeTypeFont::CairoFreeTypeFont(Ref ref, + cairo_font_face_t *cairo_font_face, + Gushort *codeToGID, + Guint codeToGIDLen, + GBool substitute) : CairoFont(ref, + cairo_font_face, + codeToGID, + codeToGIDLen, + substitute, + gTrue) { } + +CairoFreeTypeFont::~CairoFreeTypeFont() { } + +CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, + FT_Library lib, GBool useCIDs) { + Ref embRef; + Object refObj, strObj; + GooString *fileName; + char *fileNameC; + char *font_data; + int font_data_len; + DisplayFontParam *dfp; + int i, n; + GfxFontType fontType; + char **enc; + char *name; + FoFiTrueType *ff; + FoFiType1C *ff1c; + Ref ref; + FT_Face face; + cairo_font_face_t *font_face; + + Gushort *codeToGID; + Guint codeToGIDLen; + + dfp = NULL; + codeToGID = NULL; + codeToGIDLen = 0; + font_data = NULL; + font_data_len = 0; + fileName = NULL; + fileNameC = NULL; + + GBool substitute = gFalse; + + ref = *gfxFont->getID(); + fontType = gfxFont->getType(); + + if (gfxFont->getEmbeddedFontID(&embRef)) { + font_data = gfxFont->readEmbFontFile(xref, &font_data_len); + if (NULL == font_data) + goto err2; + } else if (!(fileName = gfxFont->getExtFontFile())) { + // look for a display font mapping or a substitute font + dfp = NULL; + if (gfxFont->getName()) { + dfp = globalParams->getDisplayFont(gfxFont); + } + if (!dfp) { + error(-1, "Couldn't find a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + switch (dfp->kind) { + case displayFontT1: + fileName = dfp->t1.fileName; + fontType = gfxFont->isCIDFont() ? fontCIDType0 : fontType1; + break; + case displayFontTT: + fileName = dfp->tt.fileName; + fontType = gfxFont->isCIDFont() ? fontCIDType2 : fontTrueType; + break; + } + substitute = gTrue; + } + + if (fileName != NULL) { + fileNameC = fileName->getCString(); + } + + switch (fontType) { + case fontType1: + case fontType1C: + case fontType1COT: + if (! _ft_new_face (lib, fileNameC, font_data, font_data_len, &face, &font_face)) { + error(-1, "could not create type1 face"); + goto err2; + } + + enc = ((Gfx8BitFont *)gfxFont)->getEncoding(); + + codeToGID = (Gushort *)gmallocn(256, sizeof(int)); + codeToGIDLen = 256; + for (i = 0; i < 256; ++i) { + codeToGID[i] = 0; + if ((name = enc[i])) { + codeToGID[i] = (Gushort)FT_Get_Name_Index(face, name); + } + } + break; + case fontCIDType2: + case fontCIDType2OT: + codeToGID = NULL; + n = 0; + if (((GfxCIDFont *)gfxFont)->getCIDToGID()) { + n = ((GfxCIDFont *)gfxFont)->getCIDToGIDLen(); + if (n) { + codeToGID = (Gushort *)gmallocn(n, sizeof(Gushort)); + memcpy(codeToGID, ((GfxCIDFont *)gfxFont)->getCIDToGID(), + n * sizeof(Gushort)); + } + } else { + if (font_data != NULL) { + ff = FoFiTrueType::make(font_data, font_data_len); + } else { + ff = FoFiTrueType::load(fileNameC); + } + if (! ff) + goto err2; + codeToGID = ((GfxCIDFont *)gfxFont)->getCodeToGIDMap(ff, &n); + delete ff; + } + codeToGIDLen = n; + /* Fall through */ + case fontTrueType: + if (font_data != NULL) { + ff = FoFiTrueType::make(font_data, font_data_len); + } else { + ff = FoFiTrueType::load(fileNameC); + } + if (! ff) { + error(-1, "failed to load truetype font\n"); + goto err2; + } + /* This might be set already for the CIDType2 case */ + if (fontType == fontTrueType) { + codeToGID = ((Gfx8BitFont *)gfxFont)->getCodeToGIDMap(ff); + codeToGIDLen = 256; + } + delete ff; + if (! _ft_new_face (lib, fileNameC, font_data, font_data_len, &face, &font_face)) { + error(-1, "could not create truetype face\n"); + goto err2; + } + break; + + case fontCIDType0: + case fontCIDType0C: + + codeToGID = NULL; + codeToGIDLen = 0; + + if (!useCIDs) + { + if (font_data != NULL) { + ff1c = FoFiType1C::make(font_data, font_data_len); + } else { + ff1c = FoFiType1C::load(fileNameC); + } + if (ff1c) { + codeToGID = ff1c->getCIDToGIDMap((int *)&codeToGIDLen); + delete ff1c; + } + } + + if (! _ft_new_face (lib, fileNameC, font_data, font_data_len, &face, &font_face)) { + gfree(codeToGID); + codeToGID = NULL; + error(-1, "could not create cid face\n"); + goto err2; + } + break; + + default: + fprintf (stderr, "font type %d not handled\n", (int)fontType); + goto err2; + break; + } + + return new CairoFreeTypeFont(ref, + font_face, + codeToGID, codeToGIDLen, + substitute); + + err2: + /* hmm? */ + fprintf (stderr, "some font thing failed\n"); + return NULL; +} + +//------------------------------------------------------------------------ +// CairoType3Font +//------------------------------------------------------------------------ + +static const cairo_user_data_key_t type3_font_key = {0}; + +typedef struct _type3_font_info { + GfxFont *font; + XRef *xref; + Catalog *catalog; + CairoFontEngine *fontEngine; + GBool printing; +} type3_font_info_t; + +static void +_free_type3_font_info(void *closure) +{ + type3_font_info_t *info = (type3_font_info_t *) closure; + + info->font->decRefCnt(); + free (info); +} + +static cairo_status_t +_render_type3_glyph (cairo_scaled_font_t *scaled_font, + unsigned long glyph, + cairo_t *cr, + cairo_text_extents_t *metrics) +{ + Dict *charProcs; + Object charProc; + CairoOutputDev *output_dev; + cairo_matrix_t matrix, invert_y_axis; + double *mat; + double wx, wy; + PDFRectangle box; + type3_font_info_t *info; + GfxFont *font; + Dict *resDict; + Gfx *gfx; + + info = (type3_font_info_t *) + cairo_font_face_get_user_data (cairo_scaled_font_get_font_face (scaled_font), + &type3_font_key); + + font = info->font; + resDict = ((Gfx8BitFont *)font)->getResources(); + charProcs = ((Gfx8BitFont *)(info->font))->getCharProcs(); + if (!charProcs) + return CAIRO_STATUS_USER_FONT_ERROR; + + if ((int)glyph >= charProcs->getLength()) + return CAIRO_STATUS_USER_FONT_ERROR; + + mat = font->getFontMatrix(); + matrix.xx = mat[0]; + matrix.yx = mat[1]; + matrix.xy = mat[2]; + matrix.yy = mat[3]; + matrix.x0 = mat[4]; + matrix.y0 = mat[5]; + cairo_matrix_init_scale (&invert_y_axis, 1, -1); + cairo_matrix_multiply (&matrix, &matrix, &invert_y_axis); + cairo_transform (cr, &matrix); + + output_dev = new CairoOutputDev(); + output_dev->setCairo(cr); + output_dev->setPrinting(info->printing); + + mat = font->getFontBBox(); + box.x1 = mat[0]; + box.y1 = mat[1]; + box.x2 = mat[2]; + box.y2 = mat[3]; + gfx = new Gfx(info->xref, output_dev, resDict, info->catalog, &box, NULL); + output_dev->startDoc(info->xref, info->catalog, info->fontEngine); + output_dev->startPage (1, gfx->getState()); + output_dev->setInType3Char(gTrue); + gfx->display(charProcs->getVal(glyph, &charProc)); + + output_dev->getType3GlyphWidth (&wx, &wy); + cairo_matrix_transform_distance (&matrix, &wx, &wy); + metrics->x_advance = wx; + metrics->y_advance = wy; + if (output_dev->hasType3GlyphBBox()) { + double *bbox = output_dev->getType3GlyphBBox(); + + cairo_matrix_transform_point (&matrix, &bbox[0], &bbox[1]); + cairo_matrix_transform_point (&matrix, &bbox[2], &bbox[3]); + metrics->x_bearing = bbox[0]; + metrics->y_bearing = bbox[1]; + metrics->width = bbox[2] - bbox[0]; + metrics->height = bbox[3] - bbox[1]; + } + + delete gfx; + delete output_dev; + charProc.free(); + + return CAIRO_STATUS_SUCCESS; +} + + +CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, XRef *xref, + Catalog *catalog, CairoFontEngine *fontEngine, + GBool printing) { + Object refObj, strObj; + type3_font_info_t *info; + cairo_font_face_t *font_face; + Ref ref; + Gushort *codeToGID; + Guint codeToGIDLen; + int i, j; + char **enc; + Dict *charProcs; + char *name; + + charProcs = ((Gfx8BitFont *)gfxFont)->getCharProcs(); + info = (type3_font_info_t *) malloc(sizeof(*info)); + ref = *gfxFont->getID(); + font_face = cairo_user_font_face_create(); + cairo_user_font_face_set_render_glyph_func (font_face, _render_type3_glyph); + gfxFont->incRefCnt(); + info->font = gfxFont; + info->xref = xref; + info->catalog = catalog; + info->fontEngine = fontEngine; + info->printing = printing; + + cairo_font_face_set_user_data (font_face, &type3_font_key, (void *) info, _free_type3_font_info); + + enc = ((Gfx8BitFont *)gfxFont)->getEncoding(); + codeToGID = (Gushort *)gmallocn(256, sizeof(int)); + codeToGIDLen = 256; + for (i = 0; i < 256; ++i) { + codeToGID[i] = 0; + if (charProcs && (name = enc[i])) { + for (j = 0; j < charProcs->getLength(); j++) { + if (strcmp(name, charProcs->getKey(j)) == 0) { + codeToGID[i] = (Gushort) j; + } + } + } + } + + return new CairoType3Font(ref, xref, catalog, font_face, codeToGID, codeToGIDLen, printing); +} + +CairoType3Font::CairoType3Font(Ref ref, + XRef *xref, + Catalog *catalog, + cairo_font_face_t *cairo_font_face, + Gushort *codeToGID, + Guint codeToGIDLen, + GBool printing) : CairoFont(ref, + cairo_font_face, + codeToGID, + codeToGIDLen, + gFalse, + printing), + xref(xref), + catalog(catalog) { } + +CairoType3Font::~CairoType3Font() { } + +GBool +CairoType3Font::matches(Ref &other, GBool printingA) { + return (other.num == ref.num && other.gen == ref.gen && printing == printingA); +} + + +//------------------------------------------------------------------------ +// CairoFontEngine +//------------------------------------------------------------------------ + +CairoFontEngine::CairoFontEngine(FT_Library libA) { + int i; + + lib = libA; + for (i = 0; i < cairoFontCacheSize; ++i) { + fontCache[i] = NULL; + } + + FT_Int major, minor, patch; + // as of FT 2.1.8, CID fonts are indexed by CID instead of GID + FT_Library_Version(lib, &major, &minor, &patch); + useCIDs = major > 2 || + (major == 2 && (minor > 1 || (minor == 1 && patch > 7))); +} + +CairoFontEngine::~CairoFontEngine() { + int i; + + for (i = 0; i < cairoFontCacheSize; ++i) { + if (fontCache[i]) + delete fontCache[i]; + } +} + +CairoFont * +CairoFontEngine::getFont(GfxFont *gfxFont, XRef *xref, Catalog *catalog, GBool printing) { + int i, j; + Ref ref; + CairoFont *font; + GfxFontType fontType; + + ref = *gfxFont->getID(); + + for (i = 0; i < cairoFontCacheSize; ++i) { + font = fontCache[i]; + if (font && font->matches(ref, printing)) { + for (j = i; j > 0; --j) { + fontCache[j] = fontCache[j-1]; + } + fontCache[0] = font; + return font; + } + } + + fontType = gfxFont->getType(); + if (fontType == fontType3) + font = CairoType3Font::create (gfxFont, xref, catalog, this, printing); + else + font = CairoFreeTypeFont::create (gfxFont, xref, lib, useCIDs); + + //XXX: if font is null should we still insert it into the cache? + if (fontCache[cairoFontCacheSize - 1]) { + delete fontCache[cairoFontCacheSize - 1]; + } + for (j = cairoFontCacheSize - 1; j > 0; --j) { + fontCache[j] = fontCache[j-1]; + } + fontCache[0] = font; + return font; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoFontEngine.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoFontEngine.h new file mode 100644 index 00000000000..552b5e649fa --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoFontEngine.h @@ -0,0 +1,125 @@ +//======================================================================== +// +// CairoFontEngine.h +// +// Copyright 2003 Glyph & Cog, LLC +// Copyright 2004 Red Hat, Inc +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2006, 2007 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2006, 2010 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2008 Adrian Johnson <ajohnson@redneon.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef CAIROFONTENGINE_H +#define CAIROFONTENGINE_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" +#include <cairo-ft.h> + +#include "GfxFont.h" +#include "Catalog.h" + +class CairoFontEngine; + +class CairoFont { +public: + CairoFont(Ref ref, + cairo_font_face_t *face, + Gushort *codeToGID, + Guint codeToGIDLen, + GBool substitute, + GBool printing); + virtual ~CairoFont(); + + virtual GBool matches(Ref &other, GBool printing); + cairo_font_face_t *getFontFace(void); + unsigned long getGlyph(CharCode code, Unicode *u, int uLen); + double getSubstitutionCorrection(GfxFont *gfxFont); + + GBool isSubstitute() { return substitute; } +protected: + Ref ref; + cairo_font_face_t *cairo_font_face; + + Gushort *codeToGID; + Guint codeToGIDLen; + + GBool substitute; + GBool printing; +}; + +//------------------------------------------------------------------------ + +class CairoFreeTypeFont : public CairoFont { +public: + static CairoFreeTypeFont *create(GfxFont *gfxFont, XRef *xref, FT_Library lib, GBool useCIDs); + virtual ~CairoFreeTypeFont(); + +private: + CairoFreeTypeFont(Ref ref, cairo_font_face_t *cairo_font_face, + Gushort *codeToGID, Guint codeToGIDLen, GBool substitute); +}; + +//------------------------------------------------------------------------ + +class CairoType3Font : public CairoFont { +public: + static CairoType3Font *create(GfxFont *gfxFont, XRef *xref, + Catalog *catalog, CairoFontEngine *fontEngine, + GBool printing); + virtual ~CairoType3Font(); + + virtual GBool matches(Ref &other, GBool printing); + +private: + CairoType3Font(Ref ref, XRef *xref, Catalog *catalog, + cairo_font_face_t *cairo_font_face, + Gushort *codeToGID, Guint codeToGIDLen, + GBool printing); + XRef *xref; + Catalog *catalog; +}; + +//------------------------------------------------------------------------ + +#define cairoFontCacheSize 64 + +//------------------------------------------------------------------------ +// CairoFontEngine +//------------------------------------------------------------------------ + +class CairoFontEngine { +public: + + // Create a font engine. + CairoFontEngine(FT_Library libA); + ~CairoFontEngine(); + + CairoFont *getFont(GfxFont *gfxFont, XRef *xref, Catalog *catalog, GBool printing); + +private: + CairoFont *fontCache[cairoFontCacheSize]; + FT_Library lib; + GBool useCIDs; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoOutputDev.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoOutputDev.cc new file mode 100644 index 00000000000..9374822dae3 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoOutputDev.cc @@ -0,0 +1,3031 @@ +//======================================================================== +// +// CairoOutputDev.cc +// +// Copyright 2003 Glyph & Cog, LLC +// Copyright 2004 Red Hat, Inc +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005-2008 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005, 2009 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005 Nickolay V. Shmyrev <nshmyrev@yandex.ru> +// Copyright (C) 2006-2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2008 Carl Worth <cworth@cworth.org> +// Copyright (C) 2008-2012 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> +// Copyright (C) 2008, 2009 Chris Wilson <chris@chris-wilson.co.uk> +// Copyright (C) 2008 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2009, 2010 David Benjamin <davidben@mit.edu> +// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <string.h> +#include <math.h> +#include <assert.h> +#include <cairo.h> + +#include "goo/gfile.h" +#include "goo/gtypes_p.h" +#include "GlobalParams.h" +#include "Error.h" +#include "Object.h" +#include "Gfx.h" +#include "GfxState.h" +#include "GfxFont.h" +#include "Page.h" +#include "Link.h" +#include "CharCodeToUnicode.h" +#include "FontEncodingTables.h" +#include "PDFDocEncoding.h" +#include <fofi/FoFiTrueType.h> +#include <splash/SplashBitmap.h> +#include "CairoOutputDev.h" +#include "CairoFontEngine.h" +#include "CairoRescaleBox.h" +#include "UTF8.h" +//------------------------------------------------------------------------ + +// #define LOG_CAIRO + +#ifdef LOG_CAIRO +#define LOG(x) (x) +#else +#define LOG(x) +#endif + +static inline void printMatrix(cairo_matrix_t *matrix){ + printf("%f %f, %f %f (%f %f)\n", matrix->xx, matrix->yx, + matrix->xy, matrix->yy, + matrix->x0, matrix->y0); +} + + +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) +#define MAX(a,b) (((a) > (b)) ? (a) : (b)) + + +//------------------------------------------------------------------------ +// CairoImage +//------------------------------------------------------------------------ + +CairoImage::CairoImage (double x1, double y1, double x2, double y2) { + this->image = NULL; + this->x1 = x1; + this->y1 = y1; + this->x2 = x2; + this->y2 = y2; +} + +CairoImage::~CairoImage () { + if (image) + cairo_surface_destroy (image); +} + +void CairoImage::setImage (cairo_surface_t *image) { + if (this->image) + cairo_surface_destroy (this->image); + this->image = cairo_surface_reference (image); +} + +//------------------------------------------------------------------------ +// CairoOutputDev +//------------------------------------------------------------------------ + +// We cannot tie the lifetime of an FT_Library object to that of +// CairoOutputDev, since any FT_Faces created with it may end up with a +// reference by Cairo which can be held long after the CairoOutputDev is +// deleted. The simplest way to avoid problems is to never tear down the +// FT_Library instance; to avoid leaks, just use a single global instance +// initialized the first time it is needed. +FT_Library CairoOutputDev::ft_lib; +GBool CairoOutputDev::ft_lib_initialized = gFalse; + +CairoOutputDev::CairoOutputDev() { + xref = NULL; + catalog = NULL; + + if (!ft_lib_initialized) { + FT_Init_FreeType(&ft_lib); + ft_lib_initialized = gTrue; + } + + fontEngine = NULL; + fontEngine_owner = gFalse; + glyphs = NULL; + fill_pattern = NULL; + fill_color.r = fill_color.g = fill_color.b = 0; + stroke_pattern = NULL; + stroke_color.r = stroke_color.g = stroke_color.b = 0; + stroke_opacity = 1.0; + fill_opacity = 1.0; + textClipPath = NULL; + strokePathClip = NULL; + haveCSPattern = gFalse; + cairo = NULL; + currentFont = NULL; + prescaleImages = gTrue; + printing = gTrue; + use_show_text_glyphs = gFalse; + inType3Char = gFalse; + t3_glyph_has_bbox = gFalse; + + groupColorSpaceStack = NULL; + maskStack = NULL; + group = NULL; + mask = NULL; + shape = NULL; + cairo_shape = NULL; + knockoutCount = 0; + + text = NULL; + actualText = NULL; + + // the SA parameter supposedly defaults to false, but Acrobat + // apparently hardwires it to true + stroke_adjust = globalParams->getStrokeAdjust(); + align_stroke_coords = gFalse; + adjusted_stroke_width = gFalse; +} + +CairoOutputDev::~CairoOutputDev() { + if (fontEngine_owner && fontEngine) { + delete fontEngine; + } + + if (cairo) + cairo_destroy (cairo); + cairo_pattern_destroy (stroke_pattern); + cairo_pattern_destroy (fill_pattern); + if (group) + cairo_pattern_destroy (group); + if (mask) + cairo_pattern_destroy (mask); + if (shape) + cairo_pattern_destroy (shape); + if (text) + text->decRefCnt(); + if (actualText) + delete actualText; +} + +void CairoOutputDev::setCairo(cairo_t *cairo) +{ + if (this->cairo != NULL) { + cairo_status_t status = cairo_status (this->cairo); + if (status) { + warning("cairo context error: %s\n", cairo_status_to_string(status)); + } + cairo_destroy (this->cairo); + assert(!cairo_shape); + } + if (cairo != NULL) { + this->cairo = cairo_reference (cairo); + /* save the initial matrix so that we can use it for type3 fonts. */ + //XXX: is this sufficient? could we miss changes to the matrix somehow? + cairo_get_matrix(cairo, &orig_matrix); + } else { + this->cairo = NULL; + this->cairo_shape = NULL; + } +} + +void CairoOutputDev::setTextPage(TextPage *text) +{ + if (this->text) + this->text->decRefCnt(); + if (actualText) + delete actualText; + if (text) { + this->text = text; + this->text->incRefCnt(); + actualText = new ActualText(text); + } else { + this->text = NULL; + actualText = NULL; + } +} + +void CairoOutputDev::startDoc(XRef *xrefA, Catalog *catalogA, + CairoFontEngine *parentFontEngine) { + xref = xrefA; + catalog = catalogA; + if (parentFontEngine) { + fontEngine = parentFontEngine; + } else { + if (fontEngine) { + delete fontEngine; + } + fontEngine = new CairoFontEngine(ft_lib); + fontEngine_owner = gTrue; + } +} + +void CairoOutputDev::startPage(int pageNum, GfxState *state) { + /* set up some per page defaults */ + cairo_pattern_destroy(fill_pattern); + cairo_pattern_destroy(stroke_pattern); + + fill_pattern = cairo_pattern_create_rgb(0., 0., 0.); + stroke_pattern = cairo_pattern_reference(fill_pattern); + + if (text) + text->startPage(state); +} + +void CairoOutputDev::endPage() { + if (text) { + text->endPage(); + text->coalesce(gTrue, gFalse); + } +} + +void CairoOutputDev::saveState(GfxState *state) { + LOG(printf ("save\n")); + cairo_save (cairo); + if (cairo_shape) + cairo_save (cairo_shape); + + MaskStack *ms = new MaskStack; + ms->mask = cairo_pattern_reference(mask); + ms->mask_matrix = mask_matrix; + ms->next = maskStack; + maskStack = ms; +} + +void CairoOutputDev::restoreState(GfxState *state) { + LOG(printf ("restore\n")); + cairo_restore (cairo); + if (cairo_shape) + cairo_restore (cairo_shape); + + /* These aren't restored by cairo_restore() since we keep them in + * the output device. */ + updateFillColor(state); + updateStrokeColor(state); + updateFillOpacity(state); + updateStrokeOpacity(state); + updateBlendMode(state); + + MaskStack* ms = maskStack; + if (ms) { + if (mask) + cairo_pattern_destroy(mask); + mask = ms->mask; + mask_matrix = ms->mask_matrix; + maskStack = ms->next; + delete ms; + } +} + +void CairoOutputDev::updateAll(GfxState *state) { + updateLineDash(state); + updateLineJoin(state); + updateLineCap(state); + updateLineWidth(state); + updateFlatness(state); + updateMiterLimit(state); + updateFillColor(state); + updateStrokeColor(state); + updateFillOpacity(state); + updateStrokeOpacity(state); + updateBlendMode(state); + needFontUpdate = gTrue; + if (text) + text->updateFont(state); +} + +void CairoOutputDev::setDefaultCTM(double *ctm) { + cairo_matrix_t matrix; + matrix.xx = ctm[0]; + matrix.yx = ctm[1]; + matrix.xy = ctm[2]; + matrix.yy = ctm[3]; + matrix.x0 = ctm[4]; + matrix.y0 = ctm[5]; + + cairo_transform (cairo, &matrix); + if (cairo_shape) + cairo_transform (cairo_shape, &matrix); + + OutputDev::setDefaultCTM(ctm); +} + +void CairoOutputDev::updateCTM(GfxState *state, double m11, double m12, + double m21, double m22, + double m31, double m32) { + cairo_matrix_t matrix, invert_matrix; + matrix.xx = m11; + matrix.yx = m12; + matrix.xy = m21; + matrix.yy = m22; + matrix.x0 = m31; + matrix.y0 = m32; + + /* Make sure the matrix is invertible before setting it. + * cairo will blow up if we give it a matrix that's not + * invertible, so we need to check before passing it + * to cairo_transform. Ignoring it is likely to give better + * results than not rendering anything at all. See #14398 + * + * Ideally, we could do the cairo_transform + * and then check if anything went wrong and fix it then + * instead of having to invert the matrix. */ + invert_matrix = matrix; + if (cairo_matrix_invert(&invert_matrix)) { + warning("matrix not invertible\n"); + return; + } + + cairo_transform (cairo, &matrix); + if (cairo_shape) + cairo_transform (cairo_shape, &matrix); + updateLineDash(state); + updateLineJoin(state); + updateLineCap(state); + updateLineWidth(state); +} + +void CairoOutputDev::updateLineDash(GfxState *state) { + double *dashPattern; + int dashLength; + double dashStart; + + state->getLineDash(&dashPattern, &dashLength, &dashStart); + cairo_set_dash (cairo, dashPattern, dashLength, dashStart); + if (cairo_shape) + cairo_set_dash (cairo_shape, dashPattern, dashLength, dashStart); +} + +void CairoOutputDev::updateFlatness(GfxState *state) { + // cairo_set_tolerance (cairo, state->getFlatness()); +} + +void CairoOutputDev::updateLineJoin(GfxState *state) { + switch (state->getLineJoin()) { + case 0: + cairo_set_line_join (cairo, CAIRO_LINE_JOIN_MITER); + break; + case 1: + cairo_set_line_join (cairo, CAIRO_LINE_JOIN_ROUND); + break; + case 2: + cairo_set_line_join (cairo, CAIRO_LINE_JOIN_BEVEL); + break; + } + if (cairo_shape) + cairo_set_line_join (cairo_shape, cairo_get_line_join(cairo)); +} + +void CairoOutputDev::updateLineCap(GfxState *state) { + switch (state->getLineCap()) { + case 0: + cairo_set_line_cap (cairo, CAIRO_LINE_CAP_BUTT); + break; + case 1: + cairo_set_line_cap (cairo, CAIRO_LINE_CAP_ROUND); + break; + case 2: + cairo_set_line_cap (cairo, CAIRO_LINE_CAP_SQUARE); + break; + } + if (cairo_shape) + cairo_set_line_cap (cairo_shape, cairo_get_line_cap(cairo)); +} + +void CairoOutputDev::updateMiterLimit(GfxState *state) { + cairo_set_miter_limit (cairo, state->getMiterLimit()); + if (cairo_shape) + cairo_set_miter_limit (cairo_shape, state->getMiterLimit()); +} + +void CairoOutputDev::updateLineWidth(GfxState *state) { + LOG(printf ("line width: %f\n", state->getLineWidth())); + adjusted_stroke_width = gFalse; + if (state->getLineWidth() == 0.0) { + /* find out how big pixels (device unit) are in the x and y directions + * choose the smaller of the two as our line width */ + double x = 1.0, y = 1.0; + if (printing) { + // assume printer pixel size is 1/600 inch + x = 72.0/600; + y = 72.0/600; + } + cairo_device_to_user_distance(cairo, &x, &y); + cairo_set_line_width (cairo, MIN(fabs(x),fabs(y))); + } else { + double width = state->getLineWidth(); + if (stroke_adjust && !printing) { + double x, y; + x = y = width; + + /* find out line width in device units */ + cairo_user_to_device_distance(cairo, &x, &y); + if (fabs(x) <= 1.0 && fabs(y) <= 1.0) { + /* adjust width to at least one device pixel */ + x = y = 1.0; + cairo_device_to_user_distance(cairo, &x, &y); + width = MIN(fabs(x),fabs(y)); + adjusted_stroke_width = gTrue; + } + } + cairo_set_line_width (cairo, width); + } + if (cairo_shape) + cairo_set_line_width (cairo_shape, cairo_get_line_width (cairo)); +} + +void CairoOutputDev::updateFillColor(GfxState *state) { + GfxRGB color = fill_color; + + state->getFillRGB(&fill_color); + if (color.r != fill_color.r || + color.g != fill_color.g || + color.b != fill_color.b) + { + cairo_pattern_destroy(fill_pattern); + fill_pattern = cairo_pattern_create_rgba(colToDbl(fill_color.r), + colToDbl(fill_color.g), + colToDbl(fill_color.b), + fill_opacity); + + LOG(printf ("fill color: %d %d %d\n", + fill_color.r, fill_color.g, fill_color.b)); + } +} + +void CairoOutputDev::updateStrokeColor(GfxState *state) { + GfxRGB color = stroke_color; + + state->getStrokeRGB(&stroke_color); + if (color.r != stroke_color.r || + color.g != stroke_color.g || + color.b != stroke_color.b) + { + cairo_pattern_destroy(stroke_pattern); + stroke_pattern = cairo_pattern_create_rgba(colToDbl(stroke_color.r), + colToDbl(stroke_color.g), + colToDbl(stroke_color.b), + stroke_opacity); + + LOG(printf ("stroke color: %d %d %d\n", + stroke_color.r, stroke_color.g, stroke_color.b)); + } +} + +void CairoOutputDev::updateFillOpacity(GfxState *state) { + double opacity = fill_opacity; + + fill_opacity = state->getFillOpacity(); + if (opacity != fill_opacity) { + cairo_pattern_destroy(fill_pattern); + fill_pattern = cairo_pattern_create_rgba(colToDbl(fill_color.r), + colToDbl(fill_color.g), + colToDbl(fill_color.b), + fill_opacity); + + LOG(printf ("fill opacity: %f\n", fill_opacity)); + } +} + +void CairoOutputDev::updateStrokeOpacity(GfxState *state) { + double opacity = stroke_opacity; + + stroke_opacity = state->getStrokeOpacity(); + if (opacity != stroke_opacity) { + cairo_pattern_destroy(stroke_pattern); + stroke_pattern = cairo_pattern_create_rgba(colToDbl(stroke_color.r), + colToDbl(stroke_color.g), + colToDbl(stroke_color.b), + stroke_opacity); + + LOG(printf ("stroke opacity: %f\n", stroke_opacity)); + } +} + +void CairoOutputDev::updateFillColorStop(GfxState *state, double offset) { + state->getFillRGB(&fill_color); + + cairo_pattern_add_color_stop_rgba(fill_pattern, offset, + colToDbl(fill_color.r), + colToDbl(fill_color.g), + colToDbl(fill_color.b), + fill_opacity); + LOG(printf ("fill color stop: %f (%d, %d, %d)\n", + offset, fill_color.r, fill_color.g, fill_color.b)); +} + +void CairoOutputDev::updateBlendMode(GfxState *state) { + switch (state->getBlendMode()) { + default: + case gfxBlendNormal: + cairo_set_operator (cairo, CAIRO_OPERATOR_OVER); + break; + case gfxBlendMultiply: + cairo_set_operator (cairo, CAIRO_OPERATOR_MULTIPLY); + break; + case gfxBlendScreen: + cairo_set_operator (cairo, CAIRO_OPERATOR_SCREEN); + break; + case gfxBlendOverlay: + cairo_set_operator (cairo, CAIRO_OPERATOR_OVERLAY); + break; + case gfxBlendDarken: + cairo_set_operator (cairo, CAIRO_OPERATOR_DARKEN); + break; + case gfxBlendLighten: + cairo_set_operator (cairo, CAIRO_OPERATOR_LIGHTEN); + break; + case gfxBlendColorDodge: + cairo_set_operator (cairo, CAIRO_OPERATOR_COLOR_DODGE); + break; + case gfxBlendColorBurn: + cairo_set_operator (cairo, CAIRO_OPERATOR_COLOR_BURN); + break; + case gfxBlendHardLight: + cairo_set_operator (cairo, CAIRO_OPERATOR_HARD_LIGHT); + break; + case gfxBlendSoftLight: + cairo_set_operator (cairo, CAIRO_OPERATOR_SOFT_LIGHT); + break; + case gfxBlendDifference: + cairo_set_operator (cairo, CAIRO_OPERATOR_DIFFERENCE); + break; + case gfxBlendExclusion: + cairo_set_operator (cairo, CAIRO_OPERATOR_EXCLUSION); + break; + case gfxBlendHue: + cairo_set_operator (cairo, CAIRO_OPERATOR_HSL_HUE); + break; + case gfxBlendSaturation: + cairo_set_operator (cairo, CAIRO_OPERATOR_HSL_SATURATION); + break; + case gfxBlendColor: + cairo_set_operator (cairo, CAIRO_OPERATOR_HSL_COLOR); + break; + case gfxBlendLuminosity: + cairo_set_operator (cairo, CAIRO_OPERATOR_HSL_LUMINOSITY); + break; + } + LOG(printf ("blend mode: %d\n", (int)state->getBlendMode())); +} + +void CairoOutputDev::updateFont(GfxState *state) { + cairo_font_face_t *font_face; + cairo_matrix_t matrix, invert_matrix; + + LOG(printf ("updateFont() font=%s\n", state->getFont()->getName()->getCString())); + + needFontUpdate = gFalse; + + //FIXME: use cairo font engine? + if (text) + text->updateFont(state); + + currentFont = fontEngine->getFont (state->getFont(), xref, catalog, printing); + + if (!currentFont) + return; + + font_face = currentFont->getFontFace(); + cairo_set_font_face (cairo, font_face); + + use_show_text_glyphs = state->getFont()->hasToUnicodeCMap() && + cairo_surface_has_show_text_glyphs (cairo_get_target (cairo)); + + double fontSize = state->getFontSize(); + double *m = state->getTextMat(); + /* NOTE: adjusting by a constant is hack. The correct solution + * is probably to use user-fonts and compute the scale on a per + * glyph basis instead of for the entire font */ + double w = currentFont->getSubstitutionCorrection(state->getFont()); + matrix.xx = m[0] * fontSize * state->getHorizScaling() * w; + matrix.yx = m[1] * fontSize * state->getHorizScaling() * w; + matrix.xy = -m[2] * fontSize; + matrix.yy = -m[3] * fontSize; + matrix.x0 = 0; + matrix.y0 = 0; + + LOG(printf ("font matrix: %f %f %f %f\n", matrix.xx, matrix.yx, matrix.xy, matrix.yy)); + + /* Make sure the font matrix is invertible before setting it. cairo + * will blow up if we give it a matrix that's not invertible, so we + * need to check before passing it to cairo_set_font_matrix. Ignoring it + * is likely to give better results than not rendering anything at + * all. See #18254. + */ + invert_matrix = matrix; + if (cairo_matrix_invert(&invert_matrix)) { + warning("font matrix not invertible\n"); + return; + } + + cairo_set_font_matrix (cairo, &matrix); +} + +void CairoOutputDev::alignStrokeCoords(double *x, double *y) +{ + /* see http://www.cairographics.org/FAQ/#sharp_lines */ + cairo_user_to_device (cairo, x, y); + *x = floor(*x) + 0.5; + *y = floor(*y) + 0.5; + cairo_device_to_user (cairo, x, y); +} + +void CairoOutputDev::doPath(cairo_t *cairo, GfxState *state, GfxPath *path) { + GfxSubpath *subpath; + int i, j; + cairo_new_path (cairo); + for (i = 0; i < path->getNumSubpaths(); ++i) { + subpath = path->getSubpath(i); + if (subpath->getNumPoints() > 0) { + if (align_stroke_coords) { + double x = subpath->getX(0); + double y = subpath->getY(0); + alignStrokeCoords(&x, &y); + cairo_move_to (cairo, x, y); + } else { + cairo_move_to (cairo, subpath->getX(0), subpath->getY(0)); + } + j = 1; + while (j < subpath->getNumPoints()) { + if (subpath->getCurve(j)) { + cairo_curve_to( cairo, + subpath->getX(j), subpath->getY(j), + subpath->getX(j+1), subpath->getY(j+1), + subpath->getX(j+2), subpath->getY(j+2)); + + j += 3; + } else { + if (align_stroke_coords) { + double x = subpath->getX(j); + double y = subpath->getY(j); + alignStrokeCoords(&x, &y); + cairo_line_to (cairo, x, y); + } else { + cairo_line_to (cairo, subpath->getX(j), subpath->getY(j)); + } + ++j; + } + } + if (subpath->isClosed()) { + LOG (printf ("close\n")); + cairo_close_path (cairo); + } + } + } +} + +void CairoOutputDev::stroke(GfxState *state) { + if (inType3Char) { + GfxGray gray; + state->getFillGray(&gray); + if (colToDbl(gray) > 0.5) + return; + } + + if (adjusted_stroke_width) + align_stroke_coords = gTrue; + doPath (cairo, state, state->getPath()); + align_stroke_coords = gFalse; + cairo_set_source (cairo, stroke_pattern); + LOG(printf ("stroke\n")); + cairo_stroke (cairo); + if (cairo_shape) { + doPath (cairo_shape, state, state->getPath()); + cairo_stroke (cairo_shape); + } +} + +void CairoOutputDev::fill(GfxState *state) { + if (inType3Char) { + GfxGray gray; + state->getFillGray(&gray); + if (colToDbl(gray) > 0.5) + return; + } + + doPath (cairo, state, state->getPath()); + cairo_set_fill_rule (cairo, CAIRO_FILL_RULE_WINDING); + cairo_set_source (cairo, fill_pattern); + LOG(printf ("fill\n")); + //XXX: how do we get the path + if (mask) { + cairo_save (cairo); + cairo_clip (cairo); + cairo_set_matrix (cairo, &mask_matrix); + cairo_mask (cairo, mask); + cairo_restore (cairo); + } else if (strokePathClip) { + fillToStrokePathClip(); + } else { + cairo_fill (cairo); + } + if (cairo_shape) { + cairo_set_fill_rule (cairo_shape, CAIRO_FILL_RULE_WINDING); + doPath (cairo_shape, state, state->getPath()); + cairo_fill (cairo_shape); + } +} + +void CairoOutputDev::eoFill(GfxState *state) { + doPath (cairo, state, state->getPath()); + cairo_set_fill_rule (cairo, CAIRO_FILL_RULE_EVEN_ODD); + cairo_set_source (cairo, fill_pattern); + LOG(printf ("fill-eo\n")); + cairo_fill (cairo); + + if (cairo_shape) { + cairo_set_fill_rule (cairo_shape, CAIRO_FILL_RULE_EVEN_ODD); + doPath (cairo_shape, state, state->getPath()); + cairo_fill (cairo_shape); + } + +} + +GBool CairoOutputDev::tilingPatternFill(GfxState *state, Catalog *cat, Object *str, + double *pmat, int paintType, int /*tilingType*/, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep) +{ + PDFRectangle box; + Gfx *gfx; + cairo_pattern_t *pattern; + cairo_surface_t *surface; + cairo_matrix_t matrix; + cairo_t *old_cairo; + double xMin, yMin, xMax, yMax; + double width, height; + int surface_width, surface_height; + StrokePathClip *strokePathTmp; + + width = bbox[2] - bbox[0]; + height = bbox[3] - bbox[1]; + + if (xStep != width || yStep != height) + return gFalse; + /* TODO: implement the other cases here too */ + + surface_width = (int) ceil (width); + surface_height = (int) ceil (height); + + surface = cairo_surface_create_similar (cairo_get_target (cairo), + CAIRO_CONTENT_COLOR_ALPHA, + surface_width, surface_height); + if (cairo_surface_status (surface)) + return gFalse; + + old_cairo = cairo; + cairo = cairo_create (surface); + cairo_surface_destroy (surface); + + box.x1 = bbox[0]; box.y1 = bbox[1]; + box.x2 = bbox[2]; box.y2 = bbox[3]; + strokePathTmp = strokePathClip; + strokePathClip = NULL; + gfx = new Gfx(xref, this, resDict, catalog, &box, NULL); + gfx->display(str); + delete gfx; + strokePathClip = strokePathTmp; + + pattern = cairo_pattern_create_for_surface (cairo_get_target (cairo)); + cairo_destroy (cairo); + cairo = old_cairo; + if (cairo_pattern_status (pattern)) + return gFalse; + + state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); + cairo_rectangle (cairo, xMin, yMin, xMax - xMin, yMax - yMin); + + cairo_matrix_init_scale (&matrix, surface_width / width, surface_height / height); + cairo_pattern_set_matrix (pattern, &matrix); + + cairo_matrix_init (&matrix, mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]); + cairo_transform (cairo, &matrix); + cairo_set_source (cairo, pattern); + cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT); + if (strokePathClip) { + fillToStrokePathClip(); + } else { + cairo_fill (cairo); + } + + cairo_pattern_destroy (pattern); + + return gTrue; +} + +GBool CairoOutputDev::axialShadedFill(GfxState *state, GfxAxialShading *shading, double tMin, double tMax) { + double x0, y0, x1, y1; + double dx, dy; + + shading->getCoords(&x0, &y0, &x1, &y1); + dx = x1 - x0; + dy = y1 - y0; + + cairo_pattern_destroy(fill_pattern); + fill_pattern = cairo_pattern_create_linear (x0 + tMin * dx, y0 + tMin * dy, + x0 + tMax * dx, y0 + tMax * dy); + if (!shading->getExtend0() && !shading->getExtend1()) + cairo_pattern_set_extend (fill_pattern, CAIRO_EXTEND_NONE); + else + cairo_pattern_set_extend (fill_pattern, CAIRO_EXTEND_PAD); + + LOG (printf ("axial-sh\n")); + + // TODO: use the actual stops in the shading in the case + // of linear interpolation (Type 2 Exponential functions with N=1) + return gFalse; +} + +GBool CairoOutputDev::axialShadedSupportExtend(GfxState *state, GfxAxialShading *shading) +{ + return (shading->getExtend0() == shading->getExtend1()); +} + +GBool CairoOutputDev::radialShadedFill(GfxState *state, GfxRadialShading *shading, double sMin, double sMax) { + double x0, y0, r0, x1, y1, r1; + double dx, dy, dr; + + shading->getCoords(&x0, &y0, &r0, &x1, &y1, &r1); + dx = x1 - x0; + dy = y1 - y0; + dr = r1 - r0; + cairo_pattern_destroy(fill_pattern); + fill_pattern = cairo_pattern_create_radial (x0 + sMin * dx, + y0 + sMin * dy, + r0 + sMin * dr, + x0 + sMax * dx, + y0 + sMax * dy, + r0 + sMax * dr); + if (shading->getExtend0() && shading->getExtend1()) + cairo_pattern_set_extend (fill_pattern, CAIRO_EXTEND_PAD); + else + cairo_pattern_set_extend (fill_pattern, CAIRO_EXTEND_NONE); + + LOG (printf ("radial-sh\n")); + + return gFalse; +} + +GBool CairoOutputDev::radialShadedSupportExtend(GfxState *state, GfxRadialShading *shading) +{ + return (shading->getExtend0() == shading->getExtend1()); +} + +#if CAIRO_VERSION == CAIRO_VERSION_ENCODE(1, 11, 2) +GBool CairoOutputDev::gouraudTriangleShadedFill(GfxState *state, GfxGouraudTriangleShading *shading) +{ + double x0, y0, x1, y1, x2, y2; + GfxColor color[3]; + int i, j; + GfxRGB rgb; + + cairo_pattern_destroy(fill_pattern); + fill_pattern = cairo_pattern_create_mesh (); + + for (i = 0; i < shading->getNTriangles(); i++) { + shading->getTriangle(i, + &x0, &y0, &color[0], + &x1, &y1, &color[1], + &x2, &y2, &color[2]); + + cairo_pattern_mesh_begin_patch (fill_pattern); + + cairo_pattern_mesh_move_to (fill_pattern, x0, y0); + cairo_pattern_mesh_line_to (fill_pattern, x1, y1); + cairo_pattern_mesh_line_to (fill_pattern, x2, y2); + + for (j = 0; j < 3; j++) { + shading->getColorSpace()->getRGB(&color[j], &rgb); + cairo_pattern_mesh_set_corner_color_rgb (fill_pattern, j, + colToDbl(rgb.r), + colToDbl(rgb.g), + colToDbl(rgb.b)); + } + + cairo_pattern_mesh_end_patch (fill_pattern); + } + + double xMin, yMin, xMax, yMax; + // get the clip region bbox + state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); + state->moveTo(xMin, yMin); + state->lineTo(xMin, yMax); + state->lineTo(xMax, yMax); + state->lineTo(xMax, yMin); + state->closePath(); + fill(state); + state->clearPath(); + + return gTrue; +} + +GBool CairoOutputDev::patchMeshShadedFill(GfxState *state, GfxPatchMeshShading *shading) +{ + int i, j, k; + + cairo_pattern_destroy(fill_pattern); + fill_pattern = cairo_pattern_create_mesh (); + + for (i = 0; i < shading->getNPatches(); i++) { + GfxPatch *patch = shading->getPatch(i); + GfxColor color; + GfxRGB rgb; + + cairo_pattern_mesh_begin_patch (fill_pattern); + + cairo_pattern_mesh_move_to (fill_pattern, patch->x[0][0], patch->y[0][0]); + cairo_pattern_mesh_curve_to (fill_pattern, + patch->x[0][1], patch->y[0][1], + patch->x[0][2], patch->y[0][2], + patch->x[0][3], patch->y[0][3]); + + cairo_pattern_mesh_curve_to (fill_pattern, + patch->x[1][3], patch->y[1][3], + patch->x[2][3], patch->y[2][3], + patch->x[3][3], patch->y[3][3]); + + cairo_pattern_mesh_curve_to (fill_pattern, + patch->x[3][2], patch->y[3][2], + patch->x[3][1], patch->y[3][1], + patch->x[3][0], patch->y[3][0]); + + cairo_pattern_mesh_curve_to (fill_pattern, + patch->x[2][0], patch->y[2][0], + patch->x[1][0], patch->y[1][0], + patch->x[0][0], patch->y[0][0]); + + cairo_pattern_mesh_set_control_point (fill_pattern, 0, patch->x[1][1], patch->y[1][1]); + cairo_pattern_mesh_set_control_point (fill_pattern, 1, patch->x[1][2], patch->y[1][2]); + cairo_pattern_mesh_set_control_point (fill_pattern, 2, patch->x[2][2], patch->y[2][2]); + cairo_pattern_mesh_set_control_point (fill_pattern, 3, patch->x[2][1], patch->y[2][1]); + + for (j = 0; j < 4; j++) { + int u, v; + + switch (j) { + case 0: + u = 0; v = 0; + break; + case 1: + u = 0; v = 1; + break; + case 2: + u = 1; v = 1; + break; + case 3: + u = 1; v = 0; + break; + } + + if (shading->isParameterized()) { + shading->getParameterizedColor (patch->color[u][v].c[0], &color); + } else { + for (k = 0; k < shading->getColorSpace()->getNComps(); k++) { + // simply cast to the desired type; that's all what is needed. + color.c[k] = GfxColorComp (patch->color[u][v].c[k]); + } + } + + shading->getColorSpace()->getRGB(&color, &rgb); + cairo_pattern_mesh_set_corner_color_rgb (fill_pattern, j, + colToDbl(rgb.r), + colToDbl(rgb.g), + colToDbl(rgb.b)); + } + cairo_pattern_mesh_end_patch (fill_pattern); + } + + double xMin, yMin, xMax, yMax; + // get the clip region bbox + state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); + state->moveTo(xMin, yMin); + state->lineTo(xMin, yMax); + state->lineTo(xMax, yMax); + state->lineTo(xMax, yMin); + state->closePath(); + fill(state); + state->clearPath(); + + return gTrue; +} +#endif /* CAIRO_VERSION == CAIRO_VERSION_ENCODE(1, 11, 2) */ + +void CairoOutputDev::clip(GfxState *state) { + doPath (cairo, state, state->getPath()); + cairo_set_fill_rule (cairo, CAIRO_FILL_RULE_WINDING); + cairo_clip (cairo); + LOG (printf ("clip\n")); + if (cairo_shape) { + doPath (cairo_shape, state, state->getPath()); + cairo_set_fill_rule (cairo_shape, CAIRO_FILL_RULE_WINDING); + cairo_clip (cairo_shape); + } +} + +void CairoOutputDev::eoClip(GfxState *state) { + doPath (cairo, state, state->getPath()); + cairo_set_fill_rule (cairo, CAIRO_FILL_RULE_EVEN_ODD); + cairo_clip (cairo); + LOG (printf ("clip-eo\n")); + if (cairo_shape) { + doPath (cairo_shape, state, state->getPath()); + cairo_set_fill_rule (cairo_shape, CAIRO_FILL_RULE_EVEN_ODD); + cairo_clip (cairo_shape); + } + +} + +void CairoOutputDev::clipToStrokePath(GfxState *state) { + LOG(printf("clip-to-stroke-path\n")); + strokePathClip = (StrokePathClip*)gmalloc (sizeof(*strokePathClip)); + doPath (cairo, state, state->getPath()); + strokePathClip->path = cairo_copy_path (cairo); + cairo_get_matrix (cairo, &strokePathClip->ctm); + strokePathClip->line_width = cairo_get_line_width (cairo); + strokePathClip->dash_count = cairo_get_dash_count (cairo); + if (strokePathClip->dash_count) { + strokePathClip->dashes = (double*) gmallocn (sizeof(double), strokePathClip->dash_count); + cairo_get_dash (cairo, strokePathClip->dashes, &strokePathClip->dash_offset); + } else { + strokePathClip->dashes = NULL; + } + strokePathClip->cap = cairo_get_line_cap (cairo); + strokePathClip->join = cairo_get_line_join (cairo); + strokePathClip->miter = cairo_get_miter_limit (cairo); +} + +void CairoOutputDev::fillToStrokePathClip() { + cairo_save (cairo); + + cairo_set_matrix (cairo, &strokePathClip->ctm); + cairo_set_line_width (cairo, strokePathClip->line_width); + strokePathClip->dash_count = cairo_get_dash_count (cairo); + cairo_set_dash (cairo, strokePathClip->dashes, strokePathClip->dash_count, strokePathClip->dash_offset); + cairo_set_line_cap (cairo, strokePathClip->cap); + cairo_set_line_join (cairo, strokePathClip->join); + cairo_set_miter_limit (cairo, strokePathClip->miter); + + cairo_new_path (cairo); + cairo_append_path (cairo, strokePathClip->path); + cairo_stroke (cairo); + + cairo_restore (cairo); + + cairo_path_destroy (strokePathClip->path); + if (strokePathClip->dashes) + gfree (strokePathClip->dashes); + gfree (strokePathClip); + strokePathClip = NULL; +} + +void CairoOutputDev::beginString(GfxState *state, GooString *s) +{ + int len = s->getLength(); + + if (needFontUpdate) + updateFont(state); + + if (!currentFont) + return; + + glyphs = (cairo_glyph_t *) gmallocn (len, sizeof (cairo_glyph_t)); + glyphCount = 0; + if (use_show_text_glyphs) { + clusters = (cairo_text_cluster_t *) gmallocn (len, sizeof (cairo_text_cluster_t)); + clusterCount = 0; + utf8Max = len*2; // start with twice the number of glyphs. we will realloc if we need more. + utf8 = (char *) gmalloc (utf8Max); + utf8Count = 0; + } +} + +void CairoOutputDev::drawChar(GfxState *state, double x, double y, + double dx, double dy, + double originX, double originY, + CharCode code, int nBytes, Unicode *u, int uLen) +{ + if (currentFont) { + glyphs[glyphCount].index = currentFont->getGlyph (code, u, uLen); + glyphs[glyphCount].x = x - originX; + glyphs[glyphCount].y = y - originY; + glyphCount++; + if (use_show_text_glyphs) { + if (utf8Max - utf8Count < uLen*6) { + // utf8 encoded characters can be up to 6 bytes + if (utf8Max > uLen*6) + utf8Max *= 2; + else + utf8Max += 2*uLen*6; + utf8 = (char *) grealloc (utf8, utf8Max); + } + clusters[clusterCount].num_bytes = 0; + for (int i = 0; i < uLen; i++) { + int size = mapUTF8 (u[i], utf8 + utf8Count, utf8Max - utf8Count); + utf8Count += size; + clusters[clusterCount].num_bytes += size; + } + clusters[clusterCount].num_glyphs = 1; + clusterCount++; + } + } + + if (!text) + return; + actualText->addChar (state, x, y, dx, dy, code, nBytes, u, uLen); +} + +void CairoOutputDev::endString(GfxState *state) +{ + int render; + + if (!currentFont) + return; + + // endString can be called without a corresponding beginString. If this + // happens glyphs will be null so don't draw anything, just return. + // XXX: OutputDevs should probably not have to deal with this... + if (!glyphs) + return; + + // ignore empty strings and invisible text -- this is used by + // Acrobat Capture + render = state->getRender(); + if (render == 3 || glyphCount == 0) { + gfree(glyphs); + glyphs = NULL; + return; + } + + if (!(render & 1) && !haveCSPattern) { + LOG (printf ("fill string\n")); + cairo_set_source (cairo, fill_pattern); + if (use_show_text_glyphs) + cairo_show_text_glyphs (cairo, utf8, utf8Count, glyphs, glyphCount, clusters, clusterCount, (cairo_text_cluster_flags_t)0); + else + cairo_show_glyphs (cairo, glyphs, glyphCount); + if (cairo_shape) + cairo_show_glyphs (cairo_shape, glyphs, glyphCount); + } + + // stroke + if ((render & 3) == 1 || (render & 3) == 2) { + LOG (printf ("stroke string\n")); + cairo_set_source (cairo, stroke_pattern); + cairo_glyph_path (cairo, glyphs, glyphCount); + cairo_stroke (cairo); + if (cairo_shape) { + cairo_glyph_path (cairo_shape, glyphs, glyphCount); + cairo_stroke (cairo_shape); + } + } + + // clip + if (haveCSPattern || (render & 4)) { + LOG (printf ("clip string\n")); + // append the glyph path to textClipPath. + + // set textClipPath as the currentPath + if (textClipPath) { + cairo_append_path (cairo, textClipPath); + if (cairo_shape) { + cairo_append_path (cairo_shape, textClipPath); + } + cairo_path_destroy (textClipPath); + } + + // append the glyph path + cairo_glyph_path (cairo, glyphs, glyphCount); + + // move the path back into textClipPath + // and clear the current path + textClipPath = cairo_copy_path (cairo); + cairo_new_path (cairo); + if (cairo_shape) { + cairo_new_path (cairo_shape); + } + } + + gfree (glyphs); + glyphs = NULL; + if (use_show_text_glyphs) { + gfree (clusters); + clusters = NULL; + gfree (utf8); + utf8 = NULL; + } +} + + +GBool CairoOutputDev::beginType3Char(GfxState *state, double x, double y, + double dx, double dy, + CharCode code, Unicode *u, int uLen) { + + cairo_save (cairo); + double *ctm; + cairo_matrix_t matrix; + + ctm = state->getCTM(); + matrix.xx = ctm[0]; + matrix.yx = ctm[1]; + matrix.xy = ctm[2]; + matrix.yy = ctm[3]; + matrix.x0 = ctm[4]; + matrix.y0 = ctm[5]; + /* Restore the original matrix and then transform to matrix needed for the + * type3 font. This is ugly but seems to work. Perhaps there is a better way to do it?*/ + cairo_set_matrix(cairo, &orig_matrix); + cairo_transform(cairo, &matrix); + if (cairo_shape) { + cairo_save (cairo_shape); + cairo_set_matrix(cairo_shape, &orig_matrix); + cairo_transform(cairo_shape, &matrix); + } + cairo_pattern_destroy(stroke_pattern); + cairo_pattern_reference(fill_pattern); + stroke_pattern = fill_pattern; + return gFalse; +} + +void CairoOutputDev::endType3Char(GfxState *state) { + cairo_restore (cairo); + if (cairo_shape) { + cairo_restore (cairo_shape); + } +} + +void CairoOutputDev::type3D0(GfxState *state, double wx, double wy) { + t3_glyph_wx = wx; + t3_glyph_wy = wy; +} + +void CairoOutputDev::type3D1(GfxState *state, double wx, double wy, + double llx, double lly, double urx, double ury) { + t3_glyph_wx = wx; + t3_glyph_wy = wy; + t3_glyph_bbox[0] = llx; + t3_glyph_bbox[1] = lly; + t3_glyph_bbox[2] = urx; + t3_glyph_bbox[3] = ury; + t3_glyph_has_bbox = gTrue; +} + +void CairoOutputDev::beginTextObject(GfxState *state) { + if (!(state->getRender() & 4) && state->getFillColorSpace()->getMode() == csPattern) { + haveCSPattern = gTrue; + saveState(state); + } +} + +void CairoOutputDev::endTextObject(GfxState *state) { + if (haveCSPattern) { + haveCSPattern = gFalse; + if (state->getFillColorSpace()->getMode() != csPattern) { + if (textClipPath) { + cairo_new_path (cairo); + cairo_append_path (cairo, textClipPath); + cairo_set_fill_rule (cairo, CAIRO_FILL_RULE_WINDING); + cairo_set_source (cairo, fill_pattern); + cairo_fill (cairo); + if (cairo_shape) { + cairo_new_path (cairo_shape); + cairo_append_path (cairo_shape, textClipPath); + cairo_set_fill_rule (cairo_shape, CAIRO_FILL_RULE_WINDING); + cairo_fill (cairo_shape); + } + cairo_path_destroy (textClipPath); + textClipPath = NULL; + } + restoreState(state); + updateFillColor(state); + } + } + + if (textClipPath) { + // clip the accumulated text path + cairo_append_path (cairo, textClipPath); + cairo_clip (cairo); + if (cairo_shape) { + cairo_append_path (cairo_shape, textClipPath); + cairo_clip (cairo_shape); + } + cairo_path_destroy (textClipPath); + textClipPath = NULL; + } +} + +void CairoOutputDev::beginMarkedContent(char *name, Dict *properties) +{ + if (text) + actualText->beginMC(properties); +} + +void CairoOutputDev::endMarkedContent(GfxState *state) +{ + if (text) + actualText->endMC(state); +} + +static inline int splashRound(SplashCoord x) { + return (int)floor(x + 0.5); +} + +static inline int splashCeil(SplashCoord x) { + return (int)ceil(x); +} + +static inline int splashFloor(SplashCoord x) { + return (int)floor(x); +} + +static +cairo_surface_t *cairo_surface_create_similar_clip (cairo_t *cairo, cairo_content_t content) +{ + double x1, y1, x2, y2; + int width, height; + cairo_clip_extents (cairo, &x1, &y1, &x2, &y2); + cairo_matrix_t matrix; + cairo_get_matrix (cairo, &matrix); + //cairo_matrix_transform_point(&matrix, &x1, &y1); + //cairo_matrix_transform_point(&matrix, &x2, &y2);*/ + cairo_user_to_device(cairo, &x1, &y1); + cairo_user_to_device(cairo, &x2, &y2); + width = splashCeil(x2) - splashFloor(x1); + //XXX: negative matrix + ////height = splashCeil(y2) - splashFloor(y1); + height = splashFloor(y1) - splashCeil(y2); + cairo_surface_t *target = cairo_get_target (cairo); + cairo_surface_t *result; + + result = cairo_surface_create_similar (target, content, width, height); + double x_offset, y_offset; + cairo_surface_get_device_offset(target, &x_offset, &y_offset); + cairo_surface_set_device_offset(result, x_offset, y_offset); + + + return result; +} + + + +void CairoOutputDev::beginTransparencyGroup(GfxState * /*state*/, double * /*bbox*/, + GfxColorSpace * blendingColorSpace, + GBool /*isolated*/, GBool knockout, + GBool forSoftMask) { + /* push color space */ + ColorSpaceStack* css = new ColorSpaceStack; + css->cs = blendingColorSpace; + css->knockout = knockout; + cairo_get_matrix(cairo, &css->group_matrix); + css->next = groupColorSpaceStack; + groupColorSpaceStack = css; + + LOG(printf ("begin transparency group. knockout: %s\n", knockout ? "yes":"no")); + + if (knockout) { + knockoutCount++; + if (!cairo_shape) { + /* create a surface for tracking the shape */ + cairo_surface_t *cairo_shape_surface = cairo_surface_create_similar_clip (cairo, CAIRO_CONTENT_ALPHA); + cairo_shape = cairo_create (cairo_shape_surface); + cairo_surface_destroy (cairo_shape_surface); + + /* the color doesn't matter as long as it is opaque */ + cairo_set_source_rgb (cairo_shape, 0, 0, 0); + cairo_matrix_t matrix; + cairo_get_matrix (cairo, &matrix); + //printMatrix(&matrix); + cairo_set_matrix (cairo_shape, &matrix); + } else { + cairo_reference (cairo_shape); + } + } + if (groupColorSpaceStack->next && groupColorSpaceStack->next->knockout) { + /* we need to track the shape */ + cairo_push_group (cairo_shape); + } + if (0 && forSoftMask) + cairo_push_group_with_content (cairo, CAIRO_CONTENT_ALPHA); + else + cairo_push_group (cairo); + + /* push_group has an implicit cairo_save() */ + if (knockout) { + /*XXX: let's hope this matches the semantics needed */ + cairo_set_operator(cairo, CAIRO_OPERATOR_SOURCE); + } else { + cairo_set_operator(cairo, CAIRO_OPERATOR_OVER); + } +} + +void CairoOutputDev::endTransparencyGroup(GfxState * /*state*/) { + if (group) + cairo_pattern_destroy(group); + group = cairo_pop_group (cairo); + + LOG(printf ("end transparency group\n")); + + if (groupColorSpaceStack->next && groupColorSpaceStack->next->knockout) { + if (shape) + cairo_pattern_destroy(shape); + shape = cairo_pop_group (cairo_shape); + } +} + +void CairoOutputDev::paintTransparencyGroup(GfxState * /*state*/, double * /*bbox*/) { + LOG(printf ("paint transparency group\n")); + + cairo_save (cairo); + cairo_set_matrix (cairo, &groupColorSpaceStack->group_matrix); + cairo_set_source (cairo, group); + + if (!mask) { + //XXX: deal with mask && shape case + if (shape) { + cairo_save (cairo); + + /* OPERATOR_SOURCE w/ a mask is defined as (src IN mask) ADD (dest OUT mask) + * however our source has already been clipped to mask so we only need to + * do ADD and OUT */ + + /* clear the shape mask */ + cairo_set_source (cairo, shape); + cairo_set_operator (cairo, CAIRO_OPERATOR_DEST_OUT); + cairo_paint (cairo); + + cairo_set_operator (cairo, CAIRO_OPERATOR_ADD); + cairo_set_source (cairo, group); + cairo_paint (cairo); + + cairo_restore (cairo); + + cairo_pattern_destroy (shape); + shape = NULL; + } else { + cairo_paint_with_alpha (cairo, fill_opacity); + } + cairo_status_t status = cairo_status(cairo); + if (status) + printf("BAD status: %s\n", cairo_status_to_string(status)); + } else { + cairo_save(cairo); + cairo_set_matrix(cairo, &mask_matrix); + cairo_mask(cairo, mask); + cairo_restore(cairo); + + cairo_pattern_destroy(mask); + mask = NULL; + } + + popTransparencyGroup(); + cairo_restore(cairo); +} + +static int luminocity(uint32_t x) +{ + int r = (x >> 16) & 0xff; + int g = (x >> 8) & 0xff; + int b = (x >> 0) & 0xff; + // an arbitrary integer approximation of .3*r + .59*g + .11*b + int y = (r*19661+g*38666+b*7209 + 32829)>>16; + return y; +} + + +/* XXX: do we need to deal with shape here? */ +void CairoOutputDev::setSoftMask(GfxState * state, double * bbox, GBool alpha, + Function * transferFunc, GfxColor * backdropColor) { + cairo_pattern_destroy(mask); + + LOG(printf ("set softMask\n")); + + if (alpha == false) { + /* We need to mask according to the luminocity of the group. + * So we paint the group to an image surface convert it to a luminocity map + * and then use that as the mask. */ + + /* Get clip extents in device space */ + double x1, y1, x2, y2, x_min, y_min, x_max, y_max; + cairo_clip_extents(cairo, &x1, &y1, &x2, &y2); + cairo_user_to_device(cairo, &x1, &y1); + cairo_user_to_device(cairo, &x2, &y2); + x_min = MIN(x1, x2); + y_min = MIN(y1, y2); + x_max = MAX(x1, x2); + y_max = MAX(y1, y2); + cairo_clip_extents(cairo, &x1, &y1, &x2, &y2); + cairo_user_to_device(cairo, &x1, &y2); + cairo_user_to_device(cairo, &x2, &y1); + x_min = MIN(x_min,MIN(x1, x2)); + y_min = MIN(y_min,MIN(y1, y2)); + x_max = MAX(x_max,MAX(x1, x2)); + y_max = MAX(y_max,MAX(y1, y2)); + + int width = (int)(ceil(x_max) - floor(x_min)); + int height = (int)(ceil(y_max) - floor(y_min)); + + /* Get group device offset */ + double x_offset, y_offset; + if (cairo_get_group_target(cairo) == cairo_get_target(cairo)) { + cairo_surface_get_device_offset(cairo_get_group_target(cairo), &x_offset, &y_offset); + } else { + cairo_surface_t *pats; + cairo_pattern_get_surface(group, &pats); + cairo_surface_get_device_offset(pats, &x_offset, &y_offset); + } + + /* Adjust extents by group offset */ + x_min += x_offset; + y_min += y_offset; + + cairo_surface_t *source = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height); + cairo_t *maskCtx = cairo_create(source); + + //XXX: hopefully this uses the correct color space */ + GfxRGB backdropColorRGB; + groupColorSpaceStack->cs->getRGB(backdropColor, &backdropColorRGB); + /* paint the backdrop */ + cairo_set_source_rgb(maskCtx, + colToDbl(backdropColorRGB.r), + colToDbl(backdropColorRGB.g), + colToDbl(backdropColorRGB.b)); + cairo_paint(maskCtx); + + /* Copy source ctm to mask ctm and translate origin so that the + * mask appears it the same location on the source surface. */ + cairo_matrix_t mat, tmat; + cairo_matrix_init_translate(&tmat, -x_min, -y_min); + cairo_get_matrix(cairo, &mat); + cairo_matrix_multiply(&mat, &mat, &tmat); + cairo_set_matrix(maskCtx, &mat); + + /* make the device offset of the new mask match that of the group */ + cairo_surface_set_device_offset(source, x_offset, y_offset); + + /* paint the group */ + cairo_set_source(maskCtx, group); + cairo_paint(maskCtx); + + /* XXX status = cairo_status(maskCtx); */ + cairo_destroy(maskCtx); + + /* convert to a luminocity map */ + uint32_t *source_data = (uint32_t*)cairo_image_surface_get_data(source); + /* get stride in units of 32 bits */ + int stride = cairo_image_surface_get_stride(source)/4; + for (int y=0; y<height; y++) { + for (int x=0; x<width; x++) { + int lum; + lum = luminocity(source_data[y*stride + x]); + if (transferFunc) { + double lum_in, lum_out; + lum_in = lum/256.0; + transferFunc->transform(&lum_in, &lum_out); + lum = (int)(lum_out * 255.0 + 0.5); + } + source_data[y*stride + x] = lum << 24; + } + } + cairo_surface_mark_dirty (source); + + /* setup the new mask pattern */ + mask = cairo_pattern_create_for_surface(source); + cairo_get_matrix(cairo, &mask_matrix); + + if (cairo_get_group_target(cairo) == cairo_get_target(cairo)) { + cairo_pattern_set_matrix(mask, &mat); + } else { + cairo_matrix_t patMatrix; + cairo_pattern_get_matrix(group, &patMatrix); + /* Apply x_min, y_min offset to it appears in the same location as source. */ + cairo_matrix_multiply(&patMatrix, &patMatrix, &tmat); + cairo_pattern_set_matrix(mask, &patMatrix); + } + + cairo_surface_destroy(source); + } else { + mask = cairo_pattern_reference(group); + cairo_get_matrix(cairo, &mask_matrix); + } + + popTransparencyGroup(); +} + +void CairoOutputDev::popTransparencyGroup() { + /* pop color space */ + ColorSpaceStack *css = groupColorSpaceStack; + if (css->knockout) { + knockoutCount--; + if (!knockoutCount) { + /* we don't need to track the shape anymore because + * we are not above any knockout groups */ + cairo_destroy(cairo_shape); + cairo_shape = NULL; + } + } + groupColorSpaceStack = css->next; + delete css; +} + + +void CairoOutputDev::clearSoftMask(GfxState * /*state*/) { + if (mask) + cairo_pattern_destroy(mask); + mask = NULL; +} + +void CairoOutputDev::endMaskClip(GfxState *state) { + clearSoftMask(state); +} + +/* Taken from cairo/doc/tutorial/src/singular.c */ +static void +get_singular_values (const cairo_matrix_t *matrix, + double *major, + double *minor) +{ + double xx = matrix->xx, xy = matrix->xy; + double yx = matrix->yx, yy = matrix->yy; + + double a = xx*xx+yx*yx; + double b = xy*xy+yy*yy; + double k = xx*xy+yx*yy; + + double f = (a+b) * .5; + double g = (a-b) * .5; + double delta = sqrt (g*g + k*k); + + if (major) + *major = sqrt (f + delta); + if (minor) + *minor = sqrt (f - delta); +} + +void CairoOutputDev::getScaledSize(int orig_width, + int orig_height, + int *scaledWidth, + int *scaledHeight) { + cairo_matrix_t matrix; + cairo_get_matrix(cairo, &matrix); + + double xScale; + double yScale; + if (orig_width > orig_height) + get_singular_values (&matrix, &xScale, &yScale); + else + get_singular_values (&matrix, &yScale, &xScale); + + int tx, tx2, ty, ty2; /* the integer co-oridinates of the resulting image */ + if (xScale >= 0) { + tx = splashRound(matrix.x0 - 0.01); + tx2 = splashRound(matrix.x0 + xScale + 0.01) - 1; + } else { + tx = splashRound(matrix.x0 + 0.01) - 1; + tx2 = splashRound(matrix.x0 + xScale - 0.01); + } + *scaledWidth = abs(tx2 - tx) + 1; + //scaledWidth = splashRound(fabs(xScale)); + if (*scaledWidth == 0) { + // technically, this should draw nothing, but it generally seems + // better to draw a one-pixel-wide stripe rather than throwing it + // away + *scaledWidth = 1; + } + if (yScale >= 0) { + ty = splashFloor(matrix.y0 + 0.01); + ty2 = splashCeil(matrix.y0 + yScale - 0.01); + } else { + ty = splashCeil(matrix.y0 - 0.01); + ty2 = splashFloor(matrix.y0 + yScale + 0.01); + } + *scaledHeight = abs(ty2 - ty); + if (*scaledHeight == 0) { + *scaledHeight = 1; + } +} + +cairo_surface_t *CairoOutputDev::downscaleSurface(cairo_surface_t *orig_surface) { + cairo_surface_t *dest_surface; + unsigned char *dest_buffer; + int dest_stride; + unsigned char *orig_buffer; + int orig_width, orig_height; + int orig_stride; + int scaledHeight; + int scaledWidth; + GBool res; + + if (printing) + return NULL; + + orig_width = cairo_image_surface_get_width (orig_surface); + orig_height = cairo_image_surface_get_height (orig_surface); + getScaledSize (orig_width, orig_height, &scaledWidth, &scaledHeight); + if (scaledWidth >= orig_width || scaledHeight >= orig_height) + return NULL; + + dest_surface = cairo_surface_create_similar (orig_surface, + cairo_surface_get_content (orig_surface), + scaledWidth, scaledHeight); + dest_buffer = cairo_image_surface_get_data (dest_surface); + dest_stride = cairo_image_surface_get_stride (dest_surface); + + orig_buffer = cairo_image_surface_get_data (orig_surface); + orig_stride = cairo_image_surface_get_stride (orig_surface); + + res = downscale_box_filter((uint32_t *)orig_buffer, + orig_stride, orig_width, orig_height, + scaledWidth, scaledHeight, 0, 0, + scaledWidth, scaledHeight, + (uint32_t *)dest_buffer, dest_stride); + if (!res) { + cairo_surface_destroy (dest_surface); + return NULL; + } + + return dest_surface; + +} + +cairo_filter_t +CairoOutputDev::getFilterForSurface(cairo_surface_t *image, + GBool interpolate) +{ + if (interpolate) + return CAIRO_FILTER_BILINEAR; + + int orig_width = cairo_image_surface_get_width (image); + int orig_height = cairo_image_surface_get_height (image); + if (orig_width == 0 || orig_height == 0) + return CAIRO_FILTER_NEAREST; + + int scaled_width, scaled_height; + getScaledSize (orig_width, orig_height, &scaled_width, &scaled_height); + + /* When scale factor is >= 400% we don't interpolate. See bugs #25268, #9860 */ + if (scaled_width / orig_width >= 4 || scaled_height / orig_height >= 4) + return CAIRO_FILTER_NEAREST; + + return CAIRO_FILTER_BILINEAR; +} + +void CairoOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool interpolate, GBool inlineImg) { + + /* FIXME: Doesn't the image mask support any colorspace? */ + cairo_set_source (cairo, fill_pattern); + + /* work around a cairo bug when scaling 1x1 surfaces */ + if (width == 1 && height == 1) { + ImageStream *imgStr; + Guchar pix; + int invert_bit; + + imgStr = new ImageStream(str, width, 1, 1); + imgStr->reset(); + imgStr->getPixel(&pix); + imgStr->close(); + delete imgStr; + + invert_bit = invert ? 1 : 0; + if (pix ^ invert_bit) + return; + + cairo_save (cairo); + cairo_rectangle (cairo, 0., 0., width, height); + cairo_fill (cairo); + cairo_restore (cairo); + if (cairo_shape) { + cairo_save (cairo_shape); + cairo_rectangle (cairo_shape, 0., 0., width, height); + cairo_fill (cairo_shape); + cairo_restore (cairo_shape); + } + return; + } + + if (state->getFillColorSpace()->getMode() == csPattern) + cairo_push_group_with_content (cairo, CAIRO_CONTENT_ALPHA); + + /* shape is 1.0 for painted areas, 0.0 for unpainted ones */ + + cairo_matrix_t matrix; + cairo_get_matrix (cairo, &matrix); + //XXX: it is possible that we should only do sub pixel positioning if + // we are rendering fonts */ + if (!printing && prescaleImages && matrix.xy == 0.0 && matrix.yx == 0.0) { + drawImageMaskPrescaled(state, ref, str, width, height, invert, interpolate, inlineImg); + } else { + drawImageMaskRegular(state, ref, str, width, height, invert, interpolate, inlineImg); + } + + if (state->getFillColorSpace()->getMode() == csPattern) { + if (mask) + cairo_pattern_destroy (mask); + mask = cairo_pop_group (cairo); + cairo_get_matrix (cairo, &mask_matrix); + } +} + +void CairoOutputDev::drawImageMaskRegular(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool interpolate, GBool inlineImg) { + unsigned char *buffer; + unsigned char *dest; + cairo_surface_t *image; + cairo_pattern_t *pattern; + int x, y, i, bit; + ImageStream *imgStr; + Guchar *pix; + cairo_matrix_t matrix; + int invert_bit; + int row_stride; + cairo_filter_t filter; + + /* TODO: Do we want to cache these? */ + imgStr = new ImageStream(str, width, 1, 1); + imgStr->reset(); + + image = cairo_image_surface_create (CAIRO_FORMAT_A1, width, height); + if (cairo_surface_status (image)) + goto cleanup; + + buffer = cairo_image_surface_get_data (image); + row_stride = cairo_image_surface_get_stride (image); + + invert_bit = invert ? 1 : 0; + + for (y = 0; y < height; y++) { + pix = imgStr->getLine(); + dest = buffer + y * row_stride; + i = 0; + bit = 0; + for (x = 0; x < width; x++) { + if (bit == 0) + dest[i] = 0; + if (!(pix[x] ^ invert_bit)) { +#ifdef WORDS_BIGENDIAN + dest[i] |= (1 << (7 - bit)); +#else + dest[i] |= (1 << bit); +#endif + } + bit++; + if (bit > 7) { + bit = 0; + i++; + } + } + } + + filter = getFilterForSurface (image, interpolate); + + cairo_surface_mark_dirty (image); + pattern = cairo_pattern_create_for_surface (image); + cairo_surface_destroy (image); + if (cairo_pattern_status (pattern)) + goto cleanup; + + LOG (printf ("drawImageMask %dx%d\n", width, height)); + + cairo_pattern_set_filter (pattern, filter); + + if (!printing) + cairo_pattern_set_extend (pattern, CAIRO_EXTEND_PAD); + + cairo_matrix_init_translate (&matrix, 0, height); + cairo_matrix_scale (&matrix, width, -height); + cairo_pattern_set_matrix (pattern, &matrix); + if (cairo_pattern_status (pattern)) { + cairo_pattern_destroy (pattern); + goto cleanup; + } + + if (state->getFillColorSpace()->getMode() == csPattern) { + mask = cairo_pattern_reference (pattern); + cairo_get_matrix (cairo, &mask_matrix); + } else if (!printing) { + cairo_save (cairo); + cairo_rectangle (cairo, 0., 0., 1., 1.); + cairo_clip (cairo); + cairo_mask (cairo, pattern); + cairo_restore (cairo); + } else { + cairo_mask (cairo, pattern); + } + + if (cairo_shape) { + cairo_save (cairo_shape); + cairo_set_source (cairo_shape, pattern); + if (!printing) { + cairo_rectangle (cairo_shape, 0., 0., 1., 1.); + cairo_fill (cairo_shape); + } else { + cairo_mask (cairo_shape, pattern); + } + cairo_restore (cairo_shape); + } + + cairo_pattern_destroy (pattern); + +cleanup: + imgStr->close(); + delete imgStr; +} + + +void CairoOutputDev::drawImageMaskPrescaled(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool interpolate, GBool inlineImg) { + unsigned char *buffer; + cairo_surface_t *image; + cairo_pattern_t *pattern; + ImageStream *imgStr; + Guchar *pix; + cairo_matrix_t matrix; + int invert_bit; + int row_stride; + + /* cairo does a very poor job of scaling down images so we scale them ourselves */ + + /* this scaling code is adopted from the splash image scaling code */ + cairo_get_matrix(cairo, &matrix); +#if 0 + printf("[%f %f], [%f %f], %f %f\n", matrix.xx, matrix.xy, matrix.yx, matrix.yy, matrix.x0, matrix.y0); +#endif + /* this whole computation should be factored out */ + double xScale = matrix.xx; + double yScale = matrix.yy; + int tx, tx2, ty, ty2; /* the integer co-oridinates of the resulting image */ + int scaledHeight; + int scaledWidth; + if (xScale >= 0) { + tx = splashRound(matrix.x0 - 0.01); + tx2 = splashRound(matrix.x0 + xScale + 0.01) - 1; + } else { + tx = splashRound(matrix.x0 + 0.01) - 1; + tx2 = splashRound(matrix.x0 + xScale - 0.01); + } + scaledWidth = abs(tx2 - tx) + 1; + //scaledWidth = splashRound(fabs(xScale)); + if (scaledWidth == 0) { + // technically, this should draw nothing, but it generally seems + // better to draw a one-pixel-wide stripe rather than throwing it + // away + scaledWidth = 1; + } + if (yScale >= 0) { + ty = splashFloor(matrix.y0 + 0.01); + ty2 = splashCeil(matrix.y0 + yScale - 0.01); + } else { + ty = splashCeil(matrix.y0 - 0.01); + ty2 = splashFloor(matrix.y0 + yScale + 0.01); + } + scaledHeight = abs(ty2 - ty); + if (scaledHeight == 0) { + scaledHeight = 1; + } +#if 0 + printf("xscale: %g, yscale: %g\n", xScale, yScale); + printf("width: %d, height: %d\n", width, height); + printf("scaledWidth: %d, scaledHeight: %d\n", scaledWidth, scaledHeight); +#endif + + /* compute the required padding */ + /* Padding is used to preserve the aspect ratio. + We compute total_pad to make (height+total_pad)/scaledHeight as close to height/yScale as possible */ + int head_pad = 0; + int tail_pad = 0; + int total_pad = splashRound(height*(scaledHeight/fabs(yScale)) - height); + + /* compute the two pieces of padding */ + if (total_pad > 0) { + //XXX: i'm not positive fabs() is correct + float tail_error = fabs(matrix.y0 - ty); + float head_error = fabs(ty2 - (matrix.y0 + yScale)); + float tail_fraction = tail_error/(tail_error + head_error); + tail_pad = splashRound(total_pad*tail_fraction); + head_pad = total_pad - tail_pad; + } else { + tail_pad = 0; + head_pad = 0; + } + int origHeight = height; + height += tail_pad; + height += head_pad; +#if 0 + printf("head_pad: %d tail_pad: %d\n", head_pad, tail_pad); + printf("origHeight: %d height: %d\n", origHeight, height); + printf("ty: %d, ty2: %d\n", ty, ty2); +#endif + + /* TODO: Do we want to cache these? */ + imgStr = new ImageStream(str, width, 1, 1); + imgStr->reset(); + + invert_bit = invert ? 1 : 0; + + image = cairo_image_surface_create (CAIRO_FORMAT_A8, scaledWidth, scaledHeight); + if (cairo_surface_status (image)) { + imgStr->close(); + delete imgStr; + return; + } + + buffer = cairo_image_surface_get_data (image); + row_stride = cairo_image_surface_get_stride (image); + + int yp = height / scaledHeight; + int yq = height % scaledHeight; + int xp = width / scaledWidth; + int xq = width % scaledWidth; + int yt = 0; + int origHeight_c = origHeight; + /* use MIN() because yp might be > origHeight because of padding */ + unsigned char *pixBuf = (unsigned char *)malloc(MIN(yp+1, origHeight)*width); + int lastYStep = 1; + int total = 0; + for (int y = 0; y < scaledHeight; y++) { + // y scale Bresenham + int yStep = yp; + yt += yq; + + if (yt >= scaledHeight) { + yt -= scaledHeight; + ++yStep; + } + + // read row (s) from image ignoring the padding as appropriate + { + int n = (yp > 0) ? yStep : lastYStep; + total += n; + if (n > 0) { + unsigned char *p = pixBuf; + int head_pad_count = head_pad; + int origHeight_count = origHeight; + int tail_pad_count = tail_pad; + for (int i=0; i<n; i++) { + // get row + if (head_pad_count) { + head_pad_count--; + } else if (origHeight_count) { + pix = imgStr->getLine(); + for (int j=0; j<width; j++) { + if (pix[j] ^ invert_bit) + p[j] = 0; + else + p[j] = 255; + } + origHeight_count--; + p += width; + } else if (tail_pad_count) { + tail_pad_count--; + } else { + printf("%d %d\n", n, total); + assert(0 && "over run\n"); + } + } + } + } + + lastYStep = yStep; + int k1 = y; + + int xt = 0; + int xSrc = 0; + int x1 = k1; + int n = yStep > 0 ? yStep : 1; + int origN = n; + + /* compute the size of padding and pixels that will be used for this row */ + int head_pad_size = MIN(n, head_pad); + n -= head_pad_size; + head_pad -= MIN(head_pad_size, yStep); + + int pix_size = MIN(n, origHeight); + n -= pix_size; + origHeight -= MIN(pix_size, yStep); + + int tail_pad_size = MIN(n, tail_pad); + n -= tail_pad_size; + tail_pad -= MIN(tail_pad_size, yStep); + if (n != 0) { + printf("n = %d (%d %d %d)\n", n, head_pad_size, pix_size, tail_pad_size); + assert(n == 0); + } + + for (int x = 0; x < scaledWidth; ++x) { + int xStep = xp; + xt += xq; + if (xt >= scaledWidth) { + xt -= scaledWidth; + ++xStep; + } + int m = xStep > 0 ? xStep : 1; + float pixAcc0 = 0; + /* could m * head_pad_size * tail_pad_size overflow? */ + if (invert_bit) { + pixAcc0 += m * head_pad_size * tail_pad_size * 255; + } else { + pixAcc0 += m * head_pad_size * tail_pad_size * 0; + } + /* Accumulate all of the source pixels for the destination pixel */ + for (int i = 0; i < pix_size; ++i) { + for (int j = 0; j< m; ++j) { + if (xSrc + i*width + j > MIN(yp + 1, origHeight_c)*width) { + printf("%d > %d (%d %d %d %d) (%d %d %d)\n", xSrc + i*width + j, MIN(yp + 1, origHeight_c)*width, xSrc, i , width, j, yp, origHeight_c, width); + printf("%d %d %d\n", head_pad_size, pix_size, tail_pad_size); + assert(0 && "bad access\n"); + } + pixAcc0 += pixBuf[xSrc + i*width + j]; + } + } + buffer[y * row_stride + x] = splashFloor(pixAcc0 / (origN*m)); + xSrc += xStep; + x1 += 1; + } + + } + free(pixBuf); + + cairo_surface_mark_dirty (image); + pattern = cairo_pattern_create_for_surface (image); + cairo_surface_destroy (image); + if (cairo_pattern_status (pattern)) { + imgStr->close(); + delete imgStr; + return; + } + + /* we should actually be using CAIRO_FILTER_NEAREST here. However, + * cairo doesn't yet do minifaction filtering causing scaled down + * images with CAIRO_FILTER_NEAREST to look really bad */ + cairo_pattern_set_filter (pattern, + interpolate ? CAIRO_FILTER_BEST : CAIRO_FILTER_FAST); + cairo_pattern_set_extend (pattern, CAIRO_EXTEND_PAD); + + if (state->getFillColorSpace()->getMode() == csPattern) { + cairo_matrix_init_translate (&matrix, 0, scaledHeight); + cairo_matrix_scale (&matrix, scaledWidth, -scaledHeight); + cairo_pattern_set_matrix (pattern, &matrix); + if (cairo_pattern_status (pattern)) { + cairo_pattern_destroy (pattern); + imgStr->close(); + delete imgStr; + return; + } + + mask = cairo_pattern_reference (pattern); + cairo_get_matrix (cairo, &mask_matrix); + } else { + cairo_save (cairo); + + /* modify our current transformation so that the prescaled image + * goes where it is supposed to */ + cairo_get_matrix(cairo, &matrix); + cairo_scale(cairo, 1.0/matrix.xx, 1.0/matrix.yy); + // get integer co-ords + cairo_translate (cairo, tx - matrix.x0, ty2 - matrix.y0); + if (yScale > 0) + cairo_scale(cairo, 1, -1); + + cairo_rectangle (cairo, 0., 0., scaledWidth, scaledHeight); + cairo_clip (cairo); + cairo_mask (cairo, pattern); + + //cairo_get_matrix(cairo, &matrix); + //printf("mask at: [%f %f], [%f %f], %f %f\n\n", matrix.xx, matrix.xy, matrix.yx, matrix.yy, matrix.x0, matrix.y0); + cairo_restore(cairo); + } + + if (cairo_shape) { + cairo_save (cairo_shape); + + /* modify our current transformation so that the prescaled image + * goes where it is supposed to */ + cairo_get_matrix(cairo_shape, &matrix); + cairo_scale(cairo_shape, 1.0/matrix.xx, 1.0/matrix.yy); + // get integer co-ords + cairo_translate (cairo_shape, tx - matrix.x0, ty2 - matrix.y0); + if (yScale > 0) + cairo_scale(cairo_shape, 1, -1); + + cairo_rectangle (cairo_shape, 0., 0., scaledWidth, scaledHeight); + cairo_fill (cairo_shape); + + cairo_restore(cairo_shape); + } + + cairo_pattern_destroy (pattern); + + imgStr->close(); + delete imgStr; +} + +void CairoOutputDev::drawMaskedImage(GfxState *state, Object *ref, + Stream *str, int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, int maskWidth, + int maskHeight, GBool maskInvert, + GBool maskInterpolate) +{ + ImageStream *maskImgStr, *imgStr; + int row_stride; + unsigned char *maskBuffer, *buffer; + unsigned char *maskDest; + unsigned int *dest; + cairo_surface_t *maskImage, *image; + cairo_pattern_t *maskPattern, *pattern; + cairo_matrix_t matrix; + cairo_matrix_t maskMatrix; + Guchar *pix; + int x, y; + int invert_bit; + cairo_filter_t filter; + cairo_filter_t maskFilter; + + maskImgStr = new ImageStream(maskStr, maskWidth, 1, 1); + maskImgStr->reset(); + + maskImage = cairo_image_surface_create (CAIRO_FORMAT_A8, maskWidth, maskHeight); + if (cairo_surface_status (maskImage)) { + maskImgStr->close(); + delete maskImgStr; + return; + } + + maskBuffer = cairo_image_surface_get_data (maskImage); + row_stride = cairo_image_surface_get_stride (maskImage); + + invert_bit = maskInvert ? 1 : 0; + + for (y = 0; y < maskHeight; y++) { + pix = maskImgStr->getLine(); + maskDest = maskBuffer + y * row_stride; + for (x = 0; x < maskWidth; x++) { + if (pix[x] ^ invert_bit) + *maskDest++ = 0; + else + *maskDest++ = 255; + } + } + + maskImgStr->close(); + delete maskImgStr; + + maskFilter = getFilterForSurface (maskImage, maskInterpolate); + + cairo_surface_mark_dirty (maskImage); + maskPattern = cairo_pattern_create_for_surface (maskImage); + cairo_surface_destroy (maskImage); + if (cairo_pattern_status (maskPattern)) + return; + +#if 0 + /* ICCBased color space doesn't do any color correction + * so check its underlying color space as well */ + int is_identity_transform; + is_identity_transform = colorMap->getColorSpace()->getMode() == csDeviceRGB || + (colorMap->getColorSpace()->getMode() == csICCBased && + ((GfxICCBasedColorSpace*)colorMap->getColorSpace())->getAlt()->getMode() == csDeviceRGB); +#endif + + /* TODO: Do we want to cache these? */ + imgStr = new ImageStream(str, width, + colorMap->getNumPixelComps(), + colorMap->getBits()); + imgStr->reset(); + + image = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height); + if (cairo_surface_status (image)) + goto cleanup; + + buffer = cairo_image_surface_get_data (image); + row_stride = cairo_image_surface_get_stride (image); + for (y = 0; y < height; y++) { + dest = (unsigned int *) (buffer + y * row_stride); + pix = imgStr->getLine(); + colorMap->getRGBLine (pix, dest, width); + } + + filter = getFilterForSurface (image, interpolate); + + cairo_surface_mark_dirty (image); + pattern = cairo_pattern_create_for_surface (image); + cairo_surface_destroy (image); + if (cairo_pattern_status (pattern)) + goto cleanup; + + LOG (printf ("drawMaskedImage %dx%d\n", width, height)); + + cairo_pattern_set_filter (pattern, filter); + cairo_pattern_set_filter (maskPattern, maskFilter); + + if (!printing) { + cairo_pattern_set_extend (pattern, CAIRO_EXTEND_PAD); + cairo_pattern_set_extend (maskPattern, CAIRO_EXTEND_PAD); + } + + cairo_matrix_init_translate (&matrix, 0, height); + cairo_matrix_scale (&matrix, width, -height); + cairo_pattern_set_matrix (pattern, &matrix); + if (cairo_pattern_status (pattern)) { + cairo_pattern_destroy (pattern); + cairo_pattern_destroy (maskPattern); + goto cleanup; + } + + cairo_matrix_init_translate (&maskMatrix, 0, maskHeight); + cairo_matrix_scale (&maskMatrix, maskWidth, -maskHeight); + cairo_pattern_set_matrix (maskPattern, &maskMatrix); + if (cairo_pattern_status (maskPattern)) { + cairo_pattern_destroy (maskPattern); + cairo_pattern_destroy (pattern); + goto cleanup; + } + + if (!printing) { + cairo_save (cairo); + cairo_set_source (cairo, pattern); + cairo_rectangle (cairo, 0., 0., 1., 1.); + cairo_clip (cairo); + cairo_mask (cairo, maskPattern); + cairo_restore (cairo); + } else { + cairo_set_source (cairo, pattern); + cairo_mask (cairo, maskPattern); + } + + if (cairo_shape) { + cairo_save (cairo_shape); + cairo_set_source (cairo_shape, pattern); + if (!printing) { + cairo_rectangle (cairo_shape, 0., 0., 1., 1.); + cairo_fill (cairo_shape); + } else { + cairo_mask (cairo_shape, pattern); + } + cairo_restore (cairo_shape); + } + + cairo_pattern_destroy (maskPattern); + cairo_pattern_destroy (pattern); + +cleanup: + imgStr->close(); + delete imgStr; +} + + +//XXX: is this affect by AIS(alpha is shape)? +void CairoOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, + int maskWidth, int maskHeight, + GfxImageColorMap *maskColorMap, + GBool maskInterpolate) +{ + ImageStream *maskImgStr, *imgStr; + int row_stride; + unsigned char *maskBuffer, *buffer; + unsigned char *maskDest; + unsigned int *dest; + cairo_surface_t *maskImage, *image; + cairo_pattern_t *maskPattern, *pattern; + cairo_matrix_t maskMatrix, matrix; + Guchar *pix; + int y; + cairo_filter_t filter; + cairo_filter_t maskFilter; + + maskImgStr = new ImageStream(maskStr, maskWidth, + maskColorMap->getNumPixelComps(), + maskColorMap->getBits()); + maskImgStr->reset(); + + maskImage = cairo_image_surface_create (CAIRO_FORMAT_A8, maskWidth, maskHeight); + if (cairo_surface_status (maskImage)) { + maskImgStr->close(); + delete maskImgStr; + return; + } + + maskBuffer = cairo_image_surface_get_data (maskImage); + row_stride = cairo_image_surface_get_stride (maskImage); + for (y = 0; y < maskHeight; y++) { + maskDest = (unsigned char *) (maskBuffer + y * row_stride); + pix = maskImgStr->getLine(); + maskColorMap->getGrayLine (pix, maskDest, maskWidth); + } + + maskImgStr->close(); + delete maskImgStr; + + maskFilter = getFilterForSurface (maskImage, maskInterpolate); + + cairo_surface_mark_dirty (maskImage); + maskPattern = cairo_pattern_create_for_surface (maskImage); + cairo_surface_destroy (maskImage); + if (cairo_pattern_status (maskPattern)) + return; + +#if 0 + /* ICCBased color space doesn't do any color correction + * so check its underlying color space as well */ + int is_identity_transform; + is_identity_transform = colorMap->getColorSpace()->getMode() == csDeviceRGB || + (colorMap->getColorSpace()->getMode() == csICCBased && + ((GfxICCBasedColorSpace*)colorMap->getColorSpace())->getAlt()->getMode() == csDeviceRGB); +#endif + + /* TODO: Do we want to cache these? */ + imgStr = new ImageStream(str, width, + colorMap->getNumPixelComps(), + colorMap->getBits()); + imgStr->reset(); + + image = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height); + if (cairo_surface_status (image)) + goto cleanup; + + buffer = cairo_image_surface_get_data (image); + row_stride = cairo_image_surface_get_stride (image); + for (y = 0; y < height; y++) { + dest = (unsigned int *) (buffer + y * row_stride); + pix = imgStr->getLine(); + colorMap->getRGBLine (pix, dest, width); + } + + filter = getFilterForSurface (image, interpolate); + + cairo_surface_mark_dirty (image); + + setMimeData(str, ref, image); + + pattern = cairo_pattern_create_for_surface (image); + cairo_surface_destroy (image); + if (cairo_pattern_status (pattern)) + goto cleanup; + + LOG (printf ("drawSoftMaskedImage %dx%d\n", width, height)); + + cairo_pattern_set_filter (pattern, filter); + cairo_pattern_set_filter (maskPattern, maskFilter); + + if (!printing) { + cairo_pattern_set_extend (pattern, CAIRO_EXTEND_PAD); + cairo_pattern_set_extend (maskPattern, CAIRO_EXTEND_PAD); + } + + cairo_matrix_init_translate (&matrix, 0, height); + cairo_matrix_scale (&matrix, width, -height); + cairo_pattern_set_matrix (pattern, &matrix); + if (cairo_pattern_status (pattern)) { + cairo_pattern_destroy (pattern); + cairo_pattern_destroy (maskPattern); + goto cleanup; + } + + cairo_matrix_init_translate (&maskMatrix, 0, maskHeight); + cairo_matrix_scale (&maskMatrix, maskWidth, -maskHeight); + cairo_pattern_set_matrix (maskPattern, &maskMatrix); + if (cairo_pattern_status (maskPattern)) { + cairo_pattern_destroy (maskPattern); + cairo_pattern_destroy (pattern); + goto cleanup; + } + + if (fill_opacity != 1.0) + cairo_push_group (cairo); + else + cairo_save (cairo); + + cairo_set_source (cairo, pattern); + if (!printing) { + cairo_rectangle (cairo, 0., 0., + MIN (width, maskWidth) / (double)width, + MIN (height, maskHeight) / (double)height); + cairo_clip (cairo); + } + cairo_mask (cairo, maskPattern); + + if (fill_opacity != 1.0) { + cairo_pop_group_to_source (cairo); + cairo_save (cairo); + if (!printing) { + cairo_rectangle (cairo, 0., 0., + MIN (width, maskWidth) / (double)width, + MIN (height, maskHeight) / (double)height); + cairo_clip (cairo); + } + cairo_paint_with_alpha (cairo, fill_opacity); + } + cairo_restore (cairo); + + if (cairo_shape) { + cairo_save (cairo_shape); + cairo_set_source (cairo_shape, pattern); + if (!printing) { + cairo_rectangle (cairo_shape, 0., 0., + MIN (width, maskWidth) / (double)width, + MIN (height, maskHeight) / (double)height); + cairo_fill (cairo_shape); + } else { + cairo_mask (cairo_shape, pattern); + } + cairo_restore (cairo_shape); + } + + cairo_pattern_destroy (maskPattern); + cairo_pattern_destroy (pattern); + +cleanup: + imgStr->close(); + delete imgStr; +} + +GBool CairoOutputDev::getStreamData (Stream *str, char **buffer, int *length) +{ + int len, i; + char *strBuffer; + + len = 0; + str->close(); + str->reset(); + while (str->getChar() != EOF) len++; + if (len == 0) + return gFalse; + + strBuffer = (char *)gmalloc (len); + + str->close(); + str->reset(); + for (i = 0; i < len; ++i) + strBuffer[i] = str->getChar(); + + *buffer = strBuffer; + *length = len; + + return gTrue; +} + +void CairoOutputDev::setMimeData(Stream *str, Object *ref, cairo_surface_t *image) +{ + char *strBuffer; + int len; + Object obj; + + if (!printing || !(str->getKind() == strDCT || str->getKind() == strJPX)) + return; + + // colorspace in stream dict may be different from colorspace in jpx + // data + if (str->getKind() == strJPX) { + GBool hasColorSpace = !str->getDict()->lookup("ColorSpace", &obj)->isNull(); + obj.free(); + if (hasColorSpace) + return; + } + + if (getStreamData (str->getNextStream(), &strBuffer, &len)) { + cairo_status_t st; + +#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 11, 2) + if (ref && ref->isRef()) { + Ref imgRef = ref->getRef(); + GooString *surfaceId = new GooString("poppler-surface-"); + surfaceId->appendf("{0:d}-{1:d}", imgRef.gen, imgRef.num); + char *idBuffer = copyString(surfaceId->getCString()); + st = cairo_surface_set_mime_data (image, CAIRO_MIME_TYPE_UNIQUE_ID, + (const unsigned char *)idBuffer, + surfaceId->getLength(), + gfree, idBuffer); + if (st) + gfree(idBuffer); + delete surfaceId; + } +#endif + + st = cairo_surface_set_mime_data (image, + str->getKind() == strDCT ? + CAIRO_MIME_TYPE_JPEG : CAIRO_MIME_TYPE_JP2, + (const unsigned char *)strBuffer, len, + gfree, strBuffer); + if (st) + gfree (strBuffer); + } +} + +void CairoOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + int *maskColors, GBool inlineImg) +{ + cairo_surface_t *image; + cairo_pattern_t *pattern, *maskPattern; + ImageStream *imgStr; + cairo_matrix_t matrix; + unsigned char *buffer; + int stride, i; + GfxRGB *lookup = NULL; + cairo_filter_t filter = CAIRO_FILTER_BILINEAR; + + /* TODO: Do we want to cache these? */ + imgStr = new ImageStream(str, width, + colorMap->getNumPixelComps(), + colorMap->getBits()); + imgStr->reset(); + +#if 0 + /* ICCBased color space doesn't do any color correction + * so check its underlying color space as well */ + int is_identity_transform; + is_identity_transform = colorMap->getColorSpace()->getMode() == csDeviceRGB || + (colorMap->getColorSpace()->getMode() == csICCBased && + ((GfxICCBasedColorSpace*)colorMap->getColorSpace())->getAlt()->getMode() == csDeviceRGB); +#endif + + image = cairo_image_surface_create (maskColors ? + CAIRO_FORMAT_ARGB32 : + CAIRO_FORMAT_RGB24, + width, height); + if (cairo_surface_status (image)) + goto cleanup; + + // special case for one-channel (monochrome/gray/separation) images: + // build a lookup table here + if (colorMap->getNumPixelComps() == 1) { + int n; + Guchar pix; + + n = 1 << colorMap->getBits(); + lookup = (GfxRGB *)gmallocn(n, sizeof(GfxRGB)); + for (i = 0; i < n; ++i) { + pix = (Guchar)i; + + colorMap->getRGB(&pix, &lookup[i]); + } + } + + buffer = cairo_image_surface_get_data (image); + stride = cairo_image_surface_get_stride (image); + for (int y = 0; y < height; y++) { + uint32_t *dest = (uint32_t *) (buffer + y * stride); + Guchar *pix = imgStr->getLine(); + + if (lookup) { + Guchar *p = pix; + GfxRGB rgb; + + for (i = 0; i < width; i++) { + rgb = lookup[*p]; + dest[i] = + ((int) colToByte(rgb.r) << 16) | + ((int) colToByte(rgb.g) << 8) | + ((int) colToByte(rgb.b) << 0); + p++; + } + } else { + colorMap->getRGBLine (pix, dest, width); + } + + if (maskColors) { + for (int x = 0; x < width; x++) { + bool is_opaque = false; + for (int i = 0; i < colorMap->getNumPixelComps(); ++i) { + if (pix[i] < maskColors[2*i] || + pix[i] > maskColors[2*i+1]) { + is_opaque = true; + break; + } + } + if (is_opaque) + *dest |= 0xff000000; + else + *dest = 0; + dest++; + pix += colorMap->getNumPixelComps(); + } + } + } + gfree(lookup); + + LOG (printf ("drawImage %dx%d\n", width, height)); + + cairo_surface_t *scaled_surface; + + scaled_surface = downscaleSurface (image); + if (scaled_surface) { + if (cairo_surface_status (scaled_surface)) + goto cleanup; + cairo_surface_destroy (image); + image = scaled_surface; + width = cairo_image_surface_get_width (image); + height = cairo_image_surface_get_height (image); + } else { + filter = getFilterForSurface (image, interpolate); + } + + cairo_surface_mark_dirty (image); + + setMimeData(str, ref, image); + + pattern = cairo_pattern_create_for_surface (image); + cairo_surface_destroy (image); + if (cairo_pattern_status (pattern)) + goto cleanup; + + cairo_pattern_set_filter (pattern, filter); + + if (!printing) + cairo_pattern_set_extend (pattern, CAIRO_EXTEND_PAD); + + cairo_matrix_init_translate (&matrix, 0, height); + cairo_matrix_scale (&matrix, width, -height); + cairo_pattern_set_matrix (pattern, &matrix); + if (cairo_pattern_status (pattern)) { + cairo_pattern_destroy (pattern); + goto cleanup; + } + + if (!mask && fill_opacity != 1.0) { + maskPattern = cairo_pattern_create_rgba (1., 1., 1., fill_opacity); + } else if (mask) { + maskPattern = cairo_pattern_reference (mask); + } else { + maskPattern = NULL; + } + + cairo_save (cairo); + cairo_set_source (cairo, pattern); + if (printing) + cairo_rectangle (cairo, 0., 0., width, height); + else + cairo_rectangle (cairo, 0., 0., 1., 1.); + if (maskPattern) { + cairo_clip (cairo); + cairo_mask (cairo, maskPattern); + } else { + cairo_fill (cairo); + } + cairo_restore (cairo); + + cairo_pattern_destroy (maskPattern); + + if (cairo_shape) { + cairo_save (cairo_shape); + cairo_set_source (cairo_shape, pattern); + if (printing) + cairo_rectangle (cairo_shape, 0., 0., width, height); + else + cairo_rectangle (cairo_shape, 0., 0., 1., 1.); + cairo_fill (cairo_shape); + cairo_restore (cairo_shape); + } + + cairo_pattern_destroy (pattern); + +cleanup: + imgStr->close(); + delete imgStr; +} + + +//------------------------------------------------------------------------ +// ImageOutputDev +//------------------------------------------------------------------------ + +CairoImageOutputDev::CairoImageOutputDev() +{ + images = NULL; + numImages = 0; + size = 0; + imgDrawCbk = NULL; + imgDrawCbkData = NULL; +} + +CairoImageOutputDev::~CairoImageOutputDev() +{ + int i; + + for (i = 0; i < numImages; i++) + delete images[i]; + gfree (images); +} + +void CairoImageOutputDev::saveImage(CairoImage *image) +{ + if (numImages >= size) { + size += 16; + images = (CairoImage **) greallocn (images, size, sizeof (CairoImage *)); + } + images[numImages++] = image; +} + +void CairoImageOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool interpolate, GBool inlineImg) +{ + cairo_t *cr; + cairo_surface_t *surface; + double x1, y1, x2, y2; + double *ctm; + double mat[6]; + CairoImage *image; + + ctm = state->getCTM(); + + mat[0] = ctm[0]; + mat[1] = ctm[1]; + mat[2] = -ctm[2]; + mat[3] = -ctm[3]; + mat[4] = ctm[2] + ctm[4]; + mat[5] = ctm[3] + ctm[5]; + x1 = mat[4]; + y1 = mat[5]; + x2 = x1 + width; + y2 = y1 + height; + + image = new CairoImage (x1, y1, x2, y2); + saveImage (image); + + if (imgDrawCbk && imgDrawCbk (numImages - 1, imgDrawCbkData)) { + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); + cr = cairo_create (surface); + setCairo (cr); + cairo_translate (cr, 0, height); + cairo_scale (cr, width, -height); + + CairoOutputDev::drawImageMask(state, ref, str, width, height, invert, interpolate, inlineImg); + image->setImage (surface); + + setCairo (NULL); + cairo_surface_destroy (surface); + cairo_destroy (cr); + } +} + +void CairoImageOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap *colorMap, + GBool interpolate, int *maskColors, GBool inlineImg) +{ + cairo_t *cr; + cairo_surface_t *surface; + double x1, y1, x2, y2; + double *ctm; + double mat[6]; + CairoImage *image; + + ctm = state->getCTM(); + + mat[0] = ctm[0]; + mat[1] = ctm[1]; + mat[2] = -ctm[2]; + mat[3] = -ctm[3]; + mat[4] = ctm[2] + ctm[4]; + mat[5] = ctm[3] + ctm[5]; + x1 = mat[4]; + y1 = mat[5]; + x2 = x1 + width; + y2 = y1 + height; + + image = new CairoImage (x1, y1, x2, y2); + saveImage (image); + + if (imgDrawCbk && imgDrawCbk (numImages - 1, imgDrawCbkData)) { + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); + cr = cairo_create (surface); + setCairo (cr); + cairo_translate (cr, 0, height); + cairo_scale (cr, width, -height); + + CairoOutputDev::drawImage(state, ref, str, width, height, colorMap, interpolate, maskColors, inlineImg); + image->setImage (surface); + + setCairo (NULL); + cairo_surface_destroy (surface); + cairo_destroy (cr); + } +} + +void CairoImageOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, + int maskWidth, int maskHeight, + GfxImageColorMap *maskColorMap, + GBool maskInterpolate) +{ + cairo_t *cr; + cairo_surface_t *surface; + double x1, y1, x2, y2; + double *ctm; + double mat[6]; + CairoImage *image; + + ctm = state->getCTM(); + + mat[0] = ctm[0]; + mat[1] = ctm[1]; + mat[2] = -ctm[2]; + mat[3] = -ctm[3]; + mat[4] = ctm[2] + ctm[4]; + mat[5] = ctm[3] + ctm[5]; + x1 = mat[4]; + y1 = mat[5]; + x2 = x1 + width; + y2 = y1 + height; + + image = new CairoImage (x1, y1, x2, y2); + saveImage (image); + + if (imgDrawCbk && imgDrawCbk (numImages - 1, imgDrawCbkData)) { + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); + cr = cairo_create (surface); + setCairo (cr); + cairo_translate (cr, 0, height); + cairo_scale (cr, width, -height); + + CairoOutputDev::drawSoftMaskedImage(state, ref, str, width, height, colorMap, interpolate, + maskStr, maskWidth, maskHeight, maskColorMap, maskInterpolate); + image->setImage (surface); + + setCairo (NULL); + cairo_surface_destroy (surface); + cairo_destroy (cr); + } +} + +void CairoImageOutputDev::drawMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, + int maskWidth, int maskHeight, + GBool maskInvert, GBool maskInterpolate) +{ + cairo_t *cr; + cairo_surface_t *surface; + double x1, y1, x2, y2; + double *ctm; + double mat[6]; + CairoImage *image; + + ctm = state->getCTM(); + + mat[0] = ctm[0]; + mat[1] = ctm[1]; + mat[2] = -ctm[2]; + mat[3] = -ctm[3]; + mat[4] = ctm[2] + ctm[4]; + mat[5] = ctm[3] + ctm[5]; + x1 = mat[4]; + y1 = mat[5]; + x2 = x1 + width; + y2 = y1 + height; + + image = new CairoImage (x1, y1, x2, y2); + saveImage (image); + + if (imgDrawCbk && imgDrawCbk (numImages - 1, imgDrawCbkData)) { + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); + cr = cairo_create (surface); + setCairo (cr); + cairo_translate (cr, 0, height); + cairo_scale (cr, width, -height); + + CairoOutputDev::drawMaskedImage(state, ref, str, width, height, colorMap, interpolate, + maskStr, maskWidth, maskHeight, maskInvert, maskInterpolate); + image->setImage (surface); + + setCairo (NULL); + cairo_surface_destroy (surface); + cairo_destroy (cr); + } +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoOutputDev.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoOutputDev.h new file mode 100644 index 00000000000..5f115748767 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoOutputDev.h @@ -0,0 +1,509 @@ +//======================================================================== +// +// CairoOutputDev.h +// +// Copyright 2003 Glyph & Cog, LLC +// Copyright 2004 Red Hat, INC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005-2008 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005 Nickolay V. Shmyrev <nshmyrev@yandex.ru> +// Copyright (C) 2006-2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2008, 2009, 2011, 2012 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> +// Copyright (C) 2010, 2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef CAIROOUTPUTDEV_H +#define CAIROOUTPUTDEV_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" +#include <cairo-ft.h> +#include "OutputDev.h" +#include "TextOutputDev.h" +#include "GfxState.h" + +class GfxState; +class GfxPath; +class Gfx8BitFont; +struct GfxRGB; +class CairoFontEngine; +class CairoFont; + +//------------------------------------------------------------------------ + +//------------------------------------------------------------------------ +// CairoImage +//------------------------------------------------------------------------ +class CairoImage { +public: + // Constructor. + CairoImage (double x1, double y1, double x2, double y2); + + // Destructor. + ~CairoImage (); + + // Set the image cairo surface + void setImage (cairo_surface_t *image); + + // Get the image cairo surface + cairo_surface_t *getImage () const { return image; } + + // Get the image rectangle + void getRect (double *xa1, double *ya1, double *xa2, double *ya2) + { *xa1 = x1; *ya1 = y1; *xa2 = x2; *ya2 = y2; } + +private: + cairo_surface_t *image; // image cairo surface + double x1, y1; // upper left corner + double x2, y2; // lower right corner +}; + + +//------------------------------------------------------------------------ +// CairoOutputDev +//------------------------------------------------------------------------ + +class CairoOutputDev: public OutputDev { +public: + + // Constructor. + CairoOutputDev(); + + // Destructor. + virtual ~CairoOutputDev(); + + //----- get info about output device + + // Does this device use upside-down coordinates? + // (Upside-down means (0,0) is the top left corner of the page.) + virtual GBool upsideDown() { return gTrue; } + + // Does this device use drawChar() or drawString()? + virtual GBool useDrawChar() { return gTrue; } + + // Does this device use tilingPatternFill()? If this returns false, + // tiling pattern fills will be reduced to a series of other drawing + // operations. + virtual GBool useTilingPatternFill() { return gTrue; } + + // Does this device use functionShadedFill(), axialShadedFill(), and + // radialShadedFill()? If this returns false, these shaded fills + // will be reduced to a series of other drawing operations. +#if CAIRO_VERSION == CAIRO_VERSION_ENCODE(1, 11, 2) + virtual GBool useShadedFills(int type) { return type <= 7; } +#else + virtual GBool useShadedFills(int type) { return type < 4; } +#endif + + // Does this device use FillColorStop()? + virtual GBool useFillColorStop() { return gTrue; } + + // Does this device use beginType3Char/endType3Char? Otherwise, + // text in Type 3 fonts will be drawn with drawChar/drawString. + virtual GBool interpretType3Chars() { return gFalse; } + + //----- initialization and control + + // Start a page. + virtual void startPage(int pageNum, GfxState *state); + + // End a page. + virtual void endPage(); + + //----- save/restore graphics state + virtual void saveState(GfxState *state); + virtual void restoreState(GfxState *state); + + //----- update graphics state + virtual void updateAll(GfxState *state); + virtual void setDefaultCTM(double *ctm); + virtual void updateCTM(GfxState *state, double m11, double m12, + double m21, double m22, double m31, double m32); + virtual void updateLineDash(GfxState *state); + virtual void updateFlatness(GfxState *state); + virtual void updateLineJoin(GfxState *state); + virtual void updateLineCap(GfxState *state); + virtual void updateMiterLimit(GfxState *state); + virtual void updateLineWidth(GfxState *state); + virtual void updateFillColor(GfxState *state); + virtual void updateStrokeColor(GfxState *state); + virtual void updateFillOpacity(GfxState *state); + virtual void updateStrokeOpacity(GfxState *state); + virtual void updateFillColorStop(GfxState *state, double offset); + virtual void updateBlendMode(GfxState *state); + + //----- update text state + virtual void updateFont(GfxState *state); + + //----- path painting + virtual void stroke(GfxState *state); + virtual void fill(GfxState *state); + virtual void eoFill(GfxState *state); + virtual void clipToStrokePath(GfxState *state); + virtual GBool tilingPatternFill(GfxState *state, Catalog *cat, Object *str, + double *pmat, int paintType, int tilingType, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep); + virtual GBool axialShadedFill(GfxState *state, GfxAxialShading *shading, double tMin, double tMax); + virtual GBool axialShadedSupportExtend(GfxState *state, GfxAxialShading *shading); + virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *shading, double sMin, double sMax); + virtual GBool radialShadedSupportExtend(GfxState *state, GfxRadialShading *shading); +#if CAIRO_VERSION == CAIRO_VERSION_ENCODE(1, 11, 2) + virtual GBool gouraudTriangleShadedFill(GfxState *state, GfxGouraudTriangleShading *shading); + virtual GBool patchMeshShadedFill(GfxState *state, GfxPatchMeshShading *shading); +#endif + + //----- path clipping + virtual void clip(GfxState *state); + virtual void eoClip(GfxState *state); + + //----- text drawing + void beginString(GfxState *state, GooString *s); + void endString(GfxState *state); + void drawChar(GfxState *state, double x, double y, + double dx, double dy, + double originX, double originY, + CharCode code, int nBytes, Unicode *u, int uLen); + + virtual GBool beginType3Char(GfxState *state, double x, double y, + double dx, double dy, + CharCode code, Unicode *u, int uLen); + virtual void endType3Char(GfxState *state); + virtual void beginTextObject(GfxState *state); + virtual GBool deviceHasTextClip(GfxState *state) { return textClipPath && haveCSPattern; } + virtual void endTextObject(GfxState *state); + + // If current colorspace is pattern, + // does this device support text in pattern colorspace? + virtual GBool supportTextCSPattern(GfxState *state) { + return state->getFillColorSpace()->getMode() == csPattern; } + + // If current colorspace is pattern, + // need this device special handling for masks in pattern colorspace? + virtual GBool fillMaskCSPattern(GfxState * state) { + return state->getFillColorSpace()->getMode() == csPattern; } + + virtual void endMaskClip(GfxState *state); + + //----- grouping operators + virtual void beginMarkedContent(char *name, Dict *properties); + virtual void endMarkedContent(GfxState *state); + + //----- image drawing + virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, GBool interpolate, + GBool inlineImg); + void drawImageMaskPrescaled(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, GBool interpolate, + GBool inlineImg); + void drawImageMaskRegular(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, GBool interpolate, + GBool inlineImg); + + virtual void drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap *colorMap, + GBool interpolate, int *maskColors, GBool inlineImg); + virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, + int maskWidth, int maskHeight, + GfxImageColorMap *maskColorMap, + GBool maskInterpolate); + + virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, + int maskWidth, int maskHeight, + GBool maskInvert, GBool maskInterpolate); + + //----- transparency groups and soft masks + virtual void beginTransparencyGroup(GfxState * /*state*/, double * /*bbox*/, + GfxColorSpace * /*blendingColorSpace*/, + GBool /*isolated*/, GBool /*knockout*/, + GBool /*forSoftMask*/); + virtual void endTransparencyGroup(GfxState * /*state*/); + void popTransparencyGroup(); + virtual void paintTransparencyGroup(GfxState * /*state*/, double * /*bbox*/); + virtual void setSoftMask(GfxState * /*state*/, double * /*bbox*/, GBool /*alpha*/, + Function * /*transferFunc*/, GfxColor * /*backdropColor*/); + virtual void clearSoftMask(GfxState * /*state*/); + + //----- Type 3 font operators + virtual void type3D0(GfxState *state, double wx, double wy); + virtual void type3D1(GfxState *state, double wx, double wy, + double llx, double lly, double urx, double ury); + + //----- special access + + // Called to indicate that a new PDF document has been loaded. + void startDoc(XRef *xrefA, Catalog *catalogA, CairoFontEngine *fontEngine = NULL); + + GBool isReverseVideo() { return gFalse; } + + void setCairo (cairo_t *cr); + void setTextPage (TextPage *text); + void setPrinting (GBool printing) { this->printing = printing; needFontUpdate = gTrue; } + + void setInType3Char(GBool inType3Char) { this->inType3Char = inType3Char; } + void getType3GlyphWidth (double *wx, double *wy) { *wx = t3_glyph_wx; *wy = t3_glyph_wy; } + GBool hasType3GlyphBBox () { return t3_glyph_has_bbox; } + double *getType3GlyphBBox () { return t3_glyph_bbox; } + +protected: + void doPath(cairo_t *cairo, GfxState *state, GfxPath *path); + cairo_surface_t *downscaleSurface(cairo_surface_t *orig_surface); + void getScaledSize(int orig_width, int orig_height, + int *scaledWidth, int *scaledHeight); + cairo_filter_t getFilterForSurface(cairo_surface_t *image, + GBool interpolate); + GBool getStreamData (Stream *str, char **buffer, int *length); + void setMimeData(Stream *str, Object *ref, cairo_surface_t *image); + void fillToStrokePathClip(); + void alignStrokeCoords(double *x, double *y); + + GfxRGB fill_color, stroke_color; + cairo_pattern_t *fill_pattern, *stroke_pattern; + double fill_opacity; + double stroke_opacity; + GBool stroke_adjust; + GBool adjusted_stroke_width; + GBool align_stroke_coords; + CairoFont *currentFont; + + struct StrokePathClip { + cairo_path_t *path; + cairo_matrix_t ctm; + double line_width; + double *dashes; + int dash_count; + double dash_offset; + cairo_line_cap_t cap; + cairo_line_join_t join; + double miter; + } *strokePathClip; + + XRef *xref; // xref table for current document + Catalog *catalog; + + static FT_Library ft_lib; + static GBool ft_lib_initialized; + + CairoFontEngine *fontEngine; + GBool fontEngine_owner; + + cairo_t *cairo; + cairo_matrix_t orig_matrix; + GBool needFontUpdate; // set when the font needs to be updated + GBool printing; + GBool use_show_text_glyphs; + cairo_surface_t *surface; + cairo_glyph_t *glyphs; + int glyphCount; + cairo_text_cluster_t *clusters; + int clusterCount; + char *utf8; + int utf8Count; + int utf8Max; + cairo_path_t *textClipPath; + GBool inType3Char; // inside a Type 3 CharProc + double t3_glyph_wx, t3_glyph_wy; + GBool t3_glyph_has_bbox; + double t3_glyph_bbox[4]; + + GBool prescaleImages; + + TextPage *text; // text for the current page + ActualText *actualText; + + cairo_pattern_t *group; + cairo_pattern_t *shape; + cairo_pattern_t *mask; + cairo_matrix_t mask_matrix; + cairo_surface_t *cairo_shape_surface; + cairo_t *cairo_shape; + int knockoutCount; + struct ColorSpaceStack { + GBool knockout; + GfxColorSpace *cs; + cairo_matrix_t group_matrix; + struct ColorSpaceStack *next; + } * groupColorSpaceStack; + + struct MaskStack { + cairo_pattern_t *mask; + cairo_matrix_t mask_matrix; + struct MaskStack *next; + } *maskStack; + + GBool haveCSPattern; // set if text has been drawn with a + // clipping render mode because of pattern colorspace +}; + +//------------------------------------------------------------------------ +// CairoImageOutputDev +//------------------------------------------------------------------------ + +//XXX: this should ideally not inherit from CairoOutputDev but use it instead perhaps +class CairoImageOutputDev: public CairoOutputDev { +public: + + // Constructor. + CairoImageOutputDev(); + + // Destructor. + virtual ~CairoImageOutputDev(); + + //----- get info about output device + + // Does this device use upside-down coordinates? + // (Upside-down means (0,0) is the top left corner of the page.) + virtual GBool upsideDown() { return gTrue; } + + // Does this device use drawChar() or drawString()? + virtual GBool useDrawChar() { return gFalse; } + + // Does this device use tilingPatternFill()? If this returns false, + // tiling pattern fills will be reduced to a series of other drawing + // operations. + virtual GBool useTilingPatternFill() { return gTrue; } + + // Does this device use functionShadedFill(), axialShadedFill(), and + // radialShadedFill()? If this returns false, these shaded fills + // will be reduced to a series of other drawing operations. +#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 11, 2) + virtual GBool useShadedFills(int type) { return type <= 7; } +#else + virtual GBool useShadedFills(int type) { return type < 4; } +#endif + + // Does this device use FillColorStop()? + virtual GBool useFillColorStop() { return gFalse; } + + // Does this device use beginType3Char/endType3Char? Otherwise, + // text in Type 3 fonts will be drawn with drawChar/drawString. + virtual GBool interpretType3Chars() { return gFalse; } + + // Does this device need non-text content? + virtual GBool needNonText() { return gTrue; } + + //----- save/restore graphics state + virtual void saveState(GfxState *state) { } + virtual void restoreState(GfxState *state) { } + + //----- update graphics state + virtual void updateAll(GfxState *state) { } + virtual void setDefaultCTM(double *ctm) { } + virtual void updateCTM(GfxState *state, double m11, double m12, + double m21, double m22, double m31, double m32) { } + virtual void updateLineDash(GfxState *state) { } + virtual void updateFlatness(GfxState *state) { } + virtual void updateLineJoin(GfxState *state) { } + virtual void updateLineCap(GfxState *state) { } + virtual void updateMiterLimit(GfxState *state) { } + virtual void updateLineWidth(GfxState *state) { } + virtual void updateFillColor(GfxState *state) { } + virtual void updateStrokeColor(GfxState *state) { } + virtual void updateFillOpacity(GfxState *state) { } + virtual void updateStrokeOpacity(GfxState *state) { } + virtual void updateBlendMode(GfxState *state) { } + + //----- update text state + virtual void updateFont(GfxState *state) { } + + //----- path painting + virtual void stroke(GfxState *state) { } + virtual void fill(GfxState *state) { } + virtual void eoFill(GfxState *state) { } + virtual void clipToStrokePath(GfxState *state) { } + virtual GBool tilingPatternFill(GfxState *state, Catalog *cat, Object *str, + double *pmat, int paintType, int tilingType, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep) { return gTrue; } + virtual GBool axialShadedFill(GfxState *state, + GfxAxialShading *shading, + double tMin, double tMax) { return gTrue; } + virtual GBool radialShadedFill(GfxState *state, + GfxRadialShading *shading, + double sMin, double sMax) { return gTrue; } + + //----- path clipping + virtual void clip(GfxState *state) { } + virtual void eoClip(GfxState *state) { } + + //----- image drawing + virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool interpolate, GBool inlineImg); + virtual void drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap *colorMap, + GBool interpolate, int *maskColors, GBool inlineImg); + virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, + int maskWidth, int maskHeight, + GfxImageColorMap *maskColorMap, + GBool maskInterpolate); + virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, + int maskWidth, int maskHeight, + GBool maskInvert, GBool maskInterpolate); + + //----- transparency groups and soft masks + virtual void beginTransparencyGroup(GfxState * /*state*/, double * /*bbox*/, + GfxColorSpace * /*blendingColorSpace*/, + GBool /*isolated*/, GBool /*knockout*/, + GBool /*forSoftMask*/) {} + virtual void endTransparencyGroup(GfxState * /*state*/) {} + virtual void paintTransparencyGroup(GfxState * /*state*/, double * /*bbox*/) {} + virtual void setSoftMask(GfxState * /*state*/, double * /*bbox*/, GBool /*alpha*/, + Function * /*transferFunc*/, GfxColor * /*backdropColor*/) {} + virtual void clearSoftMask(GfxState * /*state*/) {} + + //----- Image list + // By default images are not rendred + void setImageDrawDecideCbk(GBool (*cbk)(int img_id, void *data), + void *data) { imgDrawCbk = cbk; imgDrawCbkData = data; } + // Iterate through list of images. + int getNumImages() const { return numImages; } + CairoImage *getImage(int i) const { return images[i]; } + +private: + void saveImage(CairoImage *image); + + CairoImage **images; + int numImages; + int size; + GBool (*imgDrawCbk)(int img_id, void *data); + void *imgDrawCbkData; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoRescaleBox.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoRescaleBox.cc new file mode 100644 index 00000000000..e4a50aab177 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoRescaleBox.cc @@ -0,0 +1,365 @@ +/* -*- Mode: c; c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t; -*- */ +/* + * Copyright © 2009 Mozilla Corporation + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Mozilla Corporation not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Mozilla Corporation makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * MOZILLA CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT + * SHALL MOZILLA CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + * + * Author: Jeff Muizelaar, Mozilla Corp. + */ + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2012 Hib Eris <hib@hiberis.nl> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +/* This implements a box filter that supports non-integer box sizes */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdint.h> +#include <stdio.h> +#include <assert.h> +#include <stdlib.h> +#include <math.h> +#include "goo/gmem.h" +#include "goo/gtypes_p.h" +#include "CairoRescaleBox.h" + + +/* we work in fixed point where 1. == 1 << 24 */ +#define FIXED_SHIFT 24 + +static void downsample_row_box_filter ( + int start, int width, + uint32_t *src, uint32_t *dest, + int coverage[], int pixel_coverage) +{ + /* we need an array of the pixel contribution of each destination pixel on the boundaries. + * we invert the value to get the value on the other size of the box */ + /* + + value = a * contribution * 1/box_size + value += a * 1/box_size + value += a * 1/box_size + value += a * 1/box_size + value += a * (1 - contribution) * 1/box_size + a * (1/box_size - contribution * 1/box_size) + + box size is constant + + + value = a * contribtion_a * 1/box_size + b * contribution_b * 1/box_size + contribution_b = (1 - contribution_a) + = (1 - contribution_a_next) + */ + + /* box size = ceil(src_width/dest_width) */ + int x = 0; + + /* skip to start */ + /* XXX: it might be possible to do this directly instead of iteratively, however + * the iterative solution is simple */ + while (x < start) + { + int box = 1 << FIXED_SHIFT; + int start_coverage = coverage[x]; + box -= start_coverage; + src++; + while (box >= pixel_coverage) + { + src++; + box -= pixel_coverage; + } + x++; + } + + while (x < start + width) + { + uint32_t a = 0; + uint32_t r = 0; + uint32_t g = 0; + uint32_t b = 0; + int box = 1 << FIXED_SHIFT; + int start_coverage = coverage[x]; + + a = ((*src >> 24) & 0xff) * start_coverage; + r = ((*src >> 16) & 0xff) * start_coverage; + g = ((*src >> 8) & 0xff) * start_coverage; + b = ((*src >> 0) & 0xff) * start_coverage; + src++; + x++; + box -= start_coverage; + + while (box >= pixel_coverage) + { + a += ((*src >> 24) & 0xff) * pixel_coverage; + r += ((*src >> 16) & 0xff) * pixel_coverage; + g += ((*src >> 8) & 0xff) * pixel_coverage; + b += ((*src >> 0) & 0xff) * pixel_coverage; + src++; + + box -= pixel_coverage; + } + + /* multiply by whatever is leftover + * this ensures that we don't bias down. + * i.e. start_coverage + n*pixel_coverage + box == 1 << 24 */ + if (box > 0) + { + a += ((*src >> 24) & 0xff) * box; + r += ((*src >> 16) & 0xff) * box; + g += ((*src >> 8) & 0xff) * box; + b += ((*src >> 0) & 0xff) * box; + } + + a >>= FIXED_SHIFT; + r >>= FIXED_SHIFT; + g >>= FIXED_SHIFT; + b >>= FIXED_SHIFT; + + *dest = (a << 24) | (r << 16) | (g << 8) | b; + dest++; + } +} + +static void downsample_columns_box_filter ( + int n, + int start_coverage, + int pixel_coverage, + uint32_t *src, uint32_t *dest) +{ + int stride = n; + while (n--) { + uint32_t a = 0; + uint32_t r = 0; + uint32_t g = 0; + uint32_t b = 0; + uint32_t *column_src = src; + int box = 1 << FIXED_SHIFT; + + a = ((*column_src >> 24) & 0xff) * start_coverage; + r = ((*column_src >> 16) & 0xff) * start_coverage; + g = ((*column_src >> 8) & 0xff) * start_coverage; + b = ((*column_src >> 0) & 0xff) * start_coverage; + column_src += stride; + box -= start_coverage; + + while (box >= pixel_coverage) + { + a += ((*column_src >> 24) & 0xff) * pixel_coverage; + r += ((*column_src >> 16) & 0xff) * pixel_coverage; + g += ((*column_src >> 8) & 0xff) * pixel_coverage; + b += ((*column_src >> 0) & 0xff) * pixel_coverage; + column_src += stride; + box -= pixel_coverage; + } + + if (box > 0) { + a += ((*column_src >> 24) & 0xff) * box; + r += ((*column_src >> 16) & 0xff) * box; + g += ((*column_src >> 8) & 0xff) * box; + b += ((*column_src >> 0) & 0xff) * box; + } + + a >>= FIXED_SHIFT; + r >>= FIXED_SHIFT; + g >>= FIXED_SHIFT; + b >>= FIXED_SHIFT; + + *dest = (a << 24) | (r << 16) | (g << 8) | b; + dest++; + src++; + } +} + +static int compute_coverage (int coverage[], int src_length, int dest_length) +{ + int i; + /* num = src_length/dest_length + total = sum(pixel) / num + + pixel * 1/num == pixel * dest_length / src_length + */ + /* the average contribution of each source pixel */ + int ratio = ((1 << 24)*(long long int)dest_length)/src_length; + /* because ((1 << 24)*(long long int)dest_length) won't always be divisible by src_length + * we'll need someplace to put the other bits. + * + * We want to ensure a + n*ratio < 1<<24 + * + * 1<<24 + * */ + + double scale = (double)src_length/dest_length; + + /* for each destination pixel compute the coverage of the left most pixel included in the box */ + /* I have a proof of this, which this margin is too narrow to contain */ + for (i=0; i<dest_length; i++) + { + float left_side = i*scale; + float right_side = (i+1)*scale; + float right_fract = right_side - floor (right_side); + float left_fract = ceil (left_side) - left_side; + int overage; + /* find out how many source pixels will be used to fill the box */ + int count = floor (right_side) - ceil (left_side); + /* what's the maximum value this expression can become? + floor((i+1)*scale) - ceil(i*scale) + + (i+1)*scale - i*scale == scale + + since floor((i+1)*scale) <= (i+1)*scale + and ceil(i*scale) >= i*scale + + floor((i+1)*scale) - ceil(i*scale) <= scale + + further since: floor((i+1)*scale) - ceil(i*scale) is an integer + + therefore: + floor((i+1)*scale) - ceil(i*scale) <= floor(scale) + */ + + if (left_fract == 0.) + count--; + + /* compute how much the right-most pixel contributes */ + overage = ratio*(right_fract); + + /* the remainder is the the amount that the left-most pixel + * contributes */ + coverage[i] = (1<<24) - (count * ratio + overage); + } + + return ratio; +} + +GBool downscale_box_filter(uint32_t *orig, int orig_stride, unsigned orig_width, unsigned orig_height, + signed scaled_width, signed scaled_height, + uint16_t start_column, uint16_t start_row, + uint16_t width, uint16_t height, + uint32_t *dest, int dst_stride) +{ + int pixel_coverage_x, pixel_coverage_y; + int dest_y; + int src_y = 0; + uint32_t *scanline = orig; + int *x_coverage = NULL; + int *y_coverage = NULL; + uint32_t *temp_buf = NULL; + GBool retval = gFalse; + + x_coverage = (int *)gmallocn3 (orig_width, 1, sizeof(int)); + y_coverage = (int *)gmallocn3 (orig_height, 1, sizeof(int)); + + /* we need to allocate enough room for ceil(src_height/dest_height)+1 + Example: + src_height = 140 + dest_height = 50 + src_height/dest_height = 2.8 + + |-------------| 2.8 pixels + |----|----|----|----| 4 pixels + need to sample 3 pixels + + |-------------| 2.8 pixels + |----|----|----|----| 4 pixels + need to sample 4 pixels + */ + + temp_buf = (uint32_t *)gmallocn3 ((orig_height + scaled_height-1)/scaled_height+1, scaled_width, sizeof(uint32_t)); + + if (!x_coverage || !y_coverage || !scanline || !temp_buf) + goto cleanup; + + pixel_coverage_x = compute_coverage (x_coverage, orig_width, scaled_width); + pixel_coverage_y = compute_coverage (y_coverage, orig_height, scaled_height); + + assert (width + start_column <= scaled_width); + + /* skip the rows at the beginning */ + for (dest_y = 0; dest_y < start_row; dest_y++) + { + int box = 1 << FIXED_SHIFT; + int start_coverage_y = y_coverage[dest_y]; + box -= start_coverage_y; + src_y++; + while (box >= pixel_coverage_y) + { + box -= pixel_coverage_y; + src_y++; + } + } + + for (; dest_y < start_row + height; dest_y++) + { + int columns = 0; + int box = 1 << FIXED_SHIFT; + int start_coverage_y = y_coverage[dest_y]; + + scanline = orig + src_y * orig_stride / 4; + downsample_row_box_filter (start_column, width, scanline, temp_buf + width * columns, x_coverage, pixel_coverage_x); + columns++; + src_y++; + box -= start_coverage_y; + + while (box >= pixel_coverage_y) + { + scanline = orig + src_y * orig_stride / 4; + downsample_row_box_filter (start_column, width, scanline, temp_buf + width * columns, x_coverage, pixel_coverage_x); + columns++; + src_y++; + box -= pixel_coverage_y; + } + + /* downsample any leftovers */ + if (box > 0) + { + scanline = orig + src_y * orig_stride / 4; + downsample_row_box_filter (start_column, width, scanline, temp_buf + width * columns, x_coverage, pixel_coverage_x); + columns++; + } + + /* now scale the rows we just downsampled in the y direction */ + downsample_columns_box_filter (width, start_coverage_y, pixel_coverage_y, temp_buf, dest); + dest += dst_stride / 4; + +// assert(width*columns <= ((orig_height + scaled_height-1)/scaled_height+1) * width); + } +// assert (src_y<=orig_height); + + retval = gTrue; + +cleanup: + free (x_coverage); + free (y_coverage); + free (temp_buf); + + return retval; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoRescaleBox.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoRescaleBox.h new file mode 100644 index 00000000000..5349c87f306 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CairoRescaleBox.h @@ -0,0 +1,12 @@ +#ifndef CAIRO_RESCALE_BOX_H +#define CAIRO_RESCALE_BOX_H + +#include "goo/gtypes.h" + +GBool downscale_box_filter(unsigned int *orig, int orig_stride, unsigned orig_width, unsigned orig_height, + signed scaled_width, signed scaled_height, + unsigned short int start_column, unsigned short int start_row, + unsigned short int width, unsigned short int height, + unsigned int *dest, int dst_stride); + +#endif /* CAIRO_RESCALE_BOX_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Catalog.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Catalog.cc new file mode 100644 index 00000000000..a8c2e39621b --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Catalog.cc @@ -0,0 +1,965 @@ +//======================================================================== +// +// Catalog.cc +// +// Copyright 1996-2007 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005-2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005 Jeff Muizelaar <jrmuizel@nit.ca> +// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> +// Copyright (C) 2005 Marco Pesenti Gritti <mpg@redhat.com> +// Copyright (C) 2005, 2006, 2008 Brad Hards <bradh@frogmouth.net> +// Copyright (C) 2006, 2008, 2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2008, 2011 Pino Toscano <pino@kde.org> +// Copyright (C) 2009 Ilya Gorenbein <igorenbein@finjan.com> +// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stddef.h> +#include <stdlib.h> +#include "goo/gmem.h" +#include "Object.h" +#include "XRef.h" +#include "Array.h" +#include "Dict.h" +#include "Page.h" +#include "Error.h" +#include "Link.h" +#include "PageLabelInfo.h" +#include "Catalog.h" +#include "Form.h" +#include "OptionalContent.h" +#include "ViewerPreferences.h" +#include "FileSpec.h" + +//------------------------------------------------------------------------ +// Catalog +//------------------------------------------------------------------------ + +Catalog::Catalog(XRef *xrefA) { + Object catDict, pagesDict, pagesDictRef; + Object obj, obj2; + Object optContentProps; + + ok = gTrue; + xref = xrefA; + pages = NULL; + pageRefs = NULL; + numPages = -1; + pagesSize = 0; + baseURI = NULL; + pageLabelInfo = NULL; + form = NULL; + optContent = NULL; + pageMode = pageModeNull; + pageLayout = pageLayoutNull; + destNameTree = NULL; + embeddedFileNameTree = NULL; + jsNameTree = NULL; + viewerPrefs = NULL; + + pagesList = NULL; + pagesRefList = NULL; + attrsList = NULL; + kidsIdxList = NULL; + lastCachedPage = 0; + + xref->getCatalog(&catDict); + if (!catDict.isDict()) { + error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); + goto err1; + } + // get the AcroForm dictionary + catDict.dictLookup("AcroForm", &acroForm); + + // read base URI + if (catDict.dictLookup("URI", &obj)->isDict()) { + if (obj.dictLookup("Base", &obj2)->isString()) { + baseURI = obj2.getString()->copy(); + } + obj2.free(); + } + obj.free(); + + // get the Optional Content dictionary + if (catDict.dictLookup("OCProperties", &optContentProps)->isDict()) { + optContent = new OCGs(&optContentProps, xref); + if (!optContent->isOk ()) { + delete optContent; + optContent = NULL; + } + } + optContentProps.free(); + + // get the ViewerPreferences dictionary + catDict.dictLookup("ViewerPreferences", &viewerPreferences); + + // perform form-related loading after all widgets have been loaded + if (getForm()) + getForm()->postWidgetsLoad(this); + + catDict.free(); + return; + + err1: + catDict.free(); + ok = gFalse; +} + +Catalog::~Catalog() { + delete kidsIdxList; + if (attrsList) { + std::vector<PageAttrs *>::iterator it; + for (it = attrsList->begin() ; it < attrsList->end(); it++ ) { + delete *it; + } + delete attrsList; + } + delete pagesRefList; + if (pagesList) { + std::vector<Dict *>::iterator it; + for (it = pagesList->begin() ; it < pagesList->end(); it++ ) { + if (!(*it)->decRef()) { + delete *it; + } + } + delete pagesList; + } + if (pages) { + for (int i = 0; i < pagesSize; ++i) { + if (pages[i]) { + delete pages[i]; + } + } + gfree(pages); + gfree(pageRefs); + } + names.free(); + dests.free(); + delete destNameTree; + delete embeddedFileNameTree; + delete jsNameTree; + if (baseURI) { + delete baseURI; + } + delete pageLabelInfo; + delete form; + delete optContent; + delete viewerPrefs; + metadata.free(); + structTreeRoot.free(); + outline.free(); + acroForm.free(); + viewerPreferences.free(); +} + +GooString *Catalog::readMetadata() { + GooString *s; + Dict *dict; + Object obj; + + if (metadata.isNone()) { + Object catDict; + + xref->getCatalog(&catDict); + if (catDict.isDict()) { + catDict.dictLookup("Metadata", &metadata); + } else { + error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); + metadata.initNull(); + } + catDict.free(); + } + + if (!metadata.isStream()) { + return NULL; + } + dict = metadata.streamGetDict(); + if (!dict->lookup("Subtype", &obj)->isName("XML")) { + error(-1, "Unknown Metadata type: '%s'", + obj.isName() ? obj.getName() : "???"); + } + obj.free(); + s = new GooString(); + metadata.getStream()->fillGooString(s); + metadata.streamClose(); + return s; +} + +Page *Catalog::getPage(int i) +{ + if (i < 1) return NULL; + + if (i > lastCachedPage) { + if (cachePageTree(i) == gFalse) return NULL; + } + return pages[i-1]; +} + +Ref *Catalog::getPageRef(int i) +{ + if (i < 1) return NULL; + + if (i > lastCachedPage) { + if (cachePageTree(i) == gFalse) return NULL; + } + return &pageRefs[i-1]; +} + +GBool Catalog::cachePageTree(int page) +{ + Dict *pagesDict; + + if (pagesList == NULL) { + + Object catDict; + Ref pagesRef; + + xref->getCatalog(&catDict); + + if (catDict.isDict()) { + Object pagesDictRef; + if (catDict.dictLookupNF("Pages", &pagesDictRef)->isRef() && + pagesDictRef.getRefNum() >= 0 && + pagesDictRef.getRefNum() < xref->getNumObjects()) { + pagesRef = pagesDictRef.getRef(); + pagesDictRef.free(); + } else { + error(-1, "Catalog dictionary does not contain a valid \"Pages\" entry"); + pagesDictRef.free(); + catDict.free(); + return gFalse; + } + } else { + error(-1, "Could not find catalog dictionary"); + catDict.free(); + return gFalse; + } + + Object obj; + catDict.dictLookup("Pages", &obj); + catDict.free(); + // This should really be isDict("Pages"), but I've seen at least one + // PDF file where the /Type entry is missing. + if (obj.isDict()) { + obj.getDict()->incRef(); + pagesDict = obj.getDict(); + obj.free(); + } + else { + error(-1, "Top-level pages object is wrong type (%s)", obj.getTypeName()); + obj.free(); + return gFalse; + } + + pagesSize = getNumPages(); + pages = (Page **)gmallocn(pagesSize, sizeof(Page *)); + pageRefs = (Ref *)gmallocn(pagesSize, sizeof(Ref)); + for (int i = 0; i < pagesSize; ++i) { + pages[i] = NULL; + pageRefs[i].num = -1; + pageRefs[i].gen = -1; + } + + pagesList = new std::vector<Dict *>(); + pagesList->push_back(pagesDict); + pagesRefList = new std::vector<Ref>(); + pagesRefList->push_back(pagesRef); + attrsList = new std::vector<PageAttrs *>(); + attrsList->push_back(new PageAttrs(NULL, pagesDict)); + kidsIdxList = new std::vector<int>(); + kidsIdxList->push_back(0); + lastCachedPage = 0; + + } + + while(1) { + + if (page <= lastCachedPage) return gTrue; + + if (pagesList->empty()) return gFalse; + + pagesDict = pagesList->back(); + Object kids; + pagesDict->lookup("Kids", &kids); + if (!kids.isArray()) { + error(-1, "Kids object (page %d) is wrong type (%s)", + lastCachedPage+1, kids.getTypeName()); + kids.free(); + return gFalse; + } + + int kidsIdx = kidsIdxList->back(); + if (kidsIdx >= kids.arrayGetLength()) { + if (!pagesList->back()->decRef()) { + delete pagesList->back(); + } + pagesList->pop_back(); + pagesRefList->pop_back(); + delete attrsList->back(); + attrsList->pop_back(); + kidsIdxList->pop_back(); + if (!kidsIdxList->empty()) kidsIdxList->back()++; + kids.free(); + continue; + } + + Object kidRef; + kids.arrayGetNF(kidsIdx, &kidRef); + if (!kidRef.isRef()) { + error(-1, "Kid object (page %d) is not an indirect reference (%s)", + lastCachedPage+1, kidRef.getTypeName()); + kidRef.free(); + kids.free(); + return gFalse; + } + + GBool loop = gFalse;; + for (size_t i = 0; i < pagesRefList->size(); i++) { + if (((*pagesRefList)[i]).num == kidRef.getRefNum()) { + loop = gTrue; + break; + } + } + if (loop) { + error(-1, "Loop in Pages tree"); + kidRef.free(); + kids.free(); + kidsIdxList->back()++; + continue; + } + + Object kid; + kids.arrayGet(kidsIdx, &kid); + kids.free(); + if (kid.isDict("Page") || (kid.isDict() && !kid.getDict()->hasKey("Kids"))) { + PageAttrs *attrs = new PageAttrs(attrsList->back(), kid.getDict()); + Page *p = new Page(xref, lastCachedPage+1, kid.getDict(), + kidRef.getRef(), attrs, form); + if (!p->isOk()) { + error(-1, "Failed to create page (page %d)", lastCachedPage+1); + delete p; + kidRef.free(); + kid.free(); + return gFalse; + } + + if (lastCachedPage >= numPages) { + error(-1, "Page count in top-level pages object is incorrect"); + kidRef.free(); + kid.free(); + return gFalse; + } + + pages[lastCachedPage] = p; + pageRefs[lastCachedPage].num = kidRef.getRefNum(); + pageRefs[lastCachedPage].gen = kidRef.getRefGen(); + + lastCachedPage++; + kidsIdxList->back()++; + + // This should really be isDict("Pages"), but I've seen at least one + // PDF file where the /Type entry is missing. + } else if (kid.isDict()) { + attrsList->push_back(new PageAttrs(attrsList->back(), kid.getDict())); + pagesRefList->push_back(kidRef.getRef()); + kid.getDict()->incRef(); + pagesList->push_back(kid.getDict()); + kidsIdxList->push_back(0); + } else { + error(-1, "Kid object (page %d) is wrong type (%s)", + lastCachedPage+1, kid.getTypeName()); + kidsIdxList->back()++; + } + kidRef.free(); + kid.free(); + + } + + return gFalse; +} + +int Catalog::findPage(int num, int gen) { + int i; + + for (i = 0; i < getNumPages(); ++i) { + Ref *ref = getPageRef(i+1); + if (ref != NULL && ref->num == num && ref->gen == gen) + return i + 1; + } + return 0; +} + +LinkDest *Catalog::findDest(GooString *name) { + LinkDest *dest; + Object obj1, obj2; + GBool found; + + // try named destination dictionary then name tree + found = gFalse; + if (getDests()->isDict()) { + if (!getDests()->dictLookup(name->getCString(), &obj1)->isNull()) + found = gTrue; + else + obj1.free(); + } + if (!found) { + if (getDestNameTree()->lookup(name, &obj1)) + found = gTrue; + else + obj1.free(); + } + if (!found) + return NULL; + + // construct LinkDest + dest = NULL; + if (obj1.isArray()) { + dest = new LinkDest(obj1.getArray()); + } else if (obj1.isDict()) { + if (obj1.dictLookup("D", &obj2)->isArray()) + dest = new LinkDest(obj2.getArray()); + else + error(-1, "Bad named destination value"); + obj2.free(); + } else { + error(-1, "Bad named destination value"); + } + obj1.free(); + if (dest && !dest->isOk()) { + delete dest; + dest = NULL; + } + + return dest; +} + +FileSpec *Catalog::embeddedFile(int i) +{ + Object efDict; + Object obj; + obj = getEmbeddedFileNameTree()->getValue(i); + FileSpec *embeddedFile = 0; + if (obj.isRef()) { + Object fsDict; + embeddedFile = new FileSpec(obj.fetch(xref, &fsDict)); + fsDict.free(); + } else { + Object null; + embeddedFile = new FileSpec(&null); + } + return embeddedFile; +} + +GooString *Catalog::getJS(int i) +{ + Object obj; + // getJSNameTree()->getValue(i) returns a shallow copy of the object so we + // do not need to free it + getJSNameTree()->getValue(i).fetch(xref, &obj); + + if (!obj.isDict()) { + obj.free(); + return 0; + } + Object obj2; + if (!obj.dictLookup("S", &obj2)->isName()) { + obj2.free(); + obj.free(); + return 0; + } + if (strcmp(obj2.getName(), "JavaScript")) { + obj2.free(); + obj.free(); + return 0; + } + obj2.free(); + obj.dictLookup("JS", &obj2); + GooString *js = 0; + if (obj2.isString()) { + js = new GooString(obj2.getString()); + } + else if (obj2.isStream()) { + Stream *stream = obj2.getStream(); + js = new GooString(); + stream->fillGooString(js); + } + obj2.free(); + obj.free(); + return js; +} + +Catalog::PageMode Catalog::getPageMode() { + + if (pageMode == pageModeNull) { + + Object catDict, obj; + + pageMode = pageModeNone; + + xref->getCatalog(&catDict); + if (!catDict.isDict()) { + error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); + catDict.free(); + return pageMode; + } + + if (catDict.dictLookup("PageMode", &obj)->isName()) { + if (obj.isName("UseNone")) + pageMode = pageModeNone; + else if (obj.isName("UseOutlines")) + pageMode = pageModeOutlines; + else if (obj.isName("UseThumbs")) + pageMode = pageModeThumbs; + else if (obj.isName("FullScreen")) + pageMode = pageModeFullScreen; + else if (obj.isName("UseOC")) + pageMode = pageModeOC; + else if (obj.isName("UseAttachments")) + pageMode = pageModeAttach; + } + obj.free(); + catDict.free(); + } + return pageMode; +} + +Catalog::PageLayout Catalog::getPageLayout() { + + if (pageLayout == pageLayoutNull) { + + Object catDict, obj; + + pageLayout = pageLayoutNone; + + xref->getCatalog(&catDict); + if (!catDict.isDict()) { + error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); + catDict.free(); + return pageLayout; + } + + pageLayout = pageLayoutNone; + if (catDict.dictLookup("PageLayout", &obj)->isName()) { + if (obj.isName("SinglePage")) + pageLayout = pageLayoutSinglePage; + if (obj.isName("OneColumn")) + pageLayout = pageLayoutOneColumn; + if (obj.isName("TwoColumnLeft")) + pageLayout = pageLayoutTwoColumnLeft; + if (obj.isName("TwoColumnRight")) + pageLayout = pageLayoutTwoColumnRight; + if (obj.isName("TwoPageLeft")) + pageLayout = pageLayoutTwoPageLeft; + if (obj.isName("TwoPageRight")) + pageLayout = pageLayoutTwoPageRight; + } + obj.free(); + catDict.free(); + } + return pageLayout; +} + +NameTree::NameTree() +{ + size = 0; + length = 0; + entries = NULL; +} + +NameTree::~NameTree() +{ + int i; + + for (i = 0; i < length; i++) + delete entries[i]; + + gfree(entries); +} + +NameTree::Entry::Entry(Array *array, int index) { + if (!array->getString(index, &name) || !array->getNF(index + 1, &value)) { + Object aux; + array->get(index, &aux); + if (aux.isString() && array->getNF(index + 1, &value) ) + { + name.append(aux.getString()); + } + else + error(-1, "Invalid page tree"); + } +} + +NameTree::Entry::~Entry() { + value.free(); +} + +void NameTree::addEntry(Entry *entry) +{ + if (length == size) { + if (length == 0) { + size = 8; + } else { + size *= 2; + } + entries = (Entry **) grealloc (entries, sizeof (Entry *) * size); + } + + entries[length] = entry; + ++length; +} + +void NameTree::init(XRef *xrefA, Object *tree) { + xref = xrefA; + parse(tree); +} + +void NameTree::parse(Object *tree) { + Object names; + Object kids, kid; + int i; + + if (!tree->isDict()) + return; + + // leaf node + if (tree->dictLookup("Names", &names)->isArray()) { + for (i = 0; i < names.arrayGetLength(); i += 2) { + NameTree::Entry *entry; + + entry = new Entry(names.getArray(), i); + addEntry(entry); + } + } + names.free(); + + // root or intermediate node + if (tree->dictLookup("Kids", &kids)->isArray()) { + for (i = 0; i < kids.arrayGetLength(); ++i) { + if (kids.arrayGet(i, &kid)->isDict()) + parse(&kid); + kid.free(); + } + } + kids.free(); +} + +int NameTree::Entry::cmp(const void *voidKey, const void *voidEntry) +{ + GooString *key = (GooString *) voidKey; + Entry *entry = *(NameTree::Entry **) voidEntry; + + return key->cmp(&entry->name); +} + +GBool NameTree::lookup(GooString *name, Object *obj) +{ + Entry **entry; + + entry = (Entry **) bsearch(name, entries, + length, sizeof(Entry *), Entry::cmp); + if (entry != NULL) { + (*entry)->value.fetch(xref, obj); + return gTrue; + } else { + printf("failed to look up %s\n", name->getCString()); + obj->initNull(); + return gFalse; + } +} + +Object NameTree::getValue(int index) +{ + if (index < length) { + return entries[index]->value; + } else { + return Object(); + } +} + +GooString *NameTree::getName(int index) +{ + if (index < length) { + return &entries[index]->name; + } else { + return NULL; + } +} + +GBool Catalog::labelToIndex(GooString *label, int *index) +{ + char *end; + + PageLabelInfo *pli = getPageLabelInfo(); + if (pli != NULL) { + if (!pli->labelToIndex(label, index)) + return gFalse; + } else { + *index = strtol(label->getCString(), &end, 10) - 1; + if (*end != '\0') + return gFalse; + } + + if (*index < 0 || *index >= getNumPages()) + return gFalse; + + return gTrue; +} + +GBool Catalog::indexToLabel(int index, GooString *label) +{ + char buffer[32]; + + if (index < 0 || index >= getNumPages()) + return gFalse; + + PageLabelInfo *pli = getPageLabelInfo(); + if (pli != NULL) { + return pli->indexToLabel(index, label); + } else { + snprintf(buffer, sizeof (buffer), "%d", index + 1); + label->append(buffer); + return gTrue; + } +} + +int Catalog::getNumPages() +{ + if (numPages == -1) + { + Object catDict, pagesDict, obj; + + xref->getCatalog(&catDict); + if (!catDict.isDict()) { + error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); + catDict.free(); + return 0; + } + catDict.dictLookup("Pages", &pagesDict); + catDict.free(); + + // This should really be isDict("Pages"), but I've seen at least one + // PDF file where the /Type entry is missing. + if (!pagesDict.isDict()) { + error(-1, "Top-level pages object is wrong type (%s)", + pagesDict.getTypeName()); + pagesDict.free(); + return 0; + } + + pagesDict.dictLookup("Count", &obj); + // some PDF files actually use real numbers here ("/Count 9.0") + if (!obj.isNum()) { + error(-1, "Page count in top-level pages object is wrong type (%s)", + obj.getTypeName()); + numPages = 0; + } else { + numPages = (int)obj.getNum(); + } + + obj.free(); + pagesDict.free(); + } + + return numPages; +} + +PageLabelInfo *Catalog::getPageLabelInfo() +{ + if (!pageLabelInfo) { + Object catDict; + Object obj; + + xref->getCatalog(&catDict); + if (!catDict.isDict()) { + error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); + catDict.free(); + return NULL; + } + + if (catDict.dictLookup("PageLabels", &obj)->isDict()) { + pageLabelInfo = new PageLabelInfo(&obj, getNumPages()); + } + obj.free(); + catDict.free(); + } + + return pageLabelInfo; +} + +Object *Catalog::getStructTreeRoot() +{ + if (structTreeRoot.isNone()) + { + Object catDict; + + xref->getCatalog(&catDict); + if (catDict.isDict()) { + catDict.dictLookup("StructTreeRoot", &structTreeRoot); + } else { + error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); + structTreeRoot.initNull(); + } + catDict.free(); + } + + return &structTreeRoot; +} + +Object *Catalog::getOutline() +{ + if (outline.isNone()) + { + Object catDict; + + xref->getCatalog(&catDict); + if (catDict.isDict()) { + catDict.dictLookup("Outlines", &outline); + } else { + error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); + outline.initNull(); + } + catDict.free(); + } + + return &outline; +} + +Object *Catalog::getDests() +{ + if (dests.isNone()) + { + Object catDict; + + xref->getCatalog(&catDict); + if (catDict.isDict()) { + catDict.dictLookup("Dests", &dests); + } else { + error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); + dests.initNull(); + } + catDict.free(); + } + + return &dests; +} + +Form *Catalog::getForm() +{ + if (!form) { + if (acroForm.isDict()) { + form = new Form(xref,&acroForm); + } + } + + return form; +} + +ViewerPreferences *Catalog::getViewerPreferences() +{ + if (!viewerPrefs) { + if (viewerPreferences.isDict()) { + viewerPrefs = new ViewerPreferences(viewerPreferences.getDict()); + } + } + + return viewerPrefs; +} + +Object *Catalog::getNames() +{ + if (names.isNone()) + { + Object catDict; + + xref->getCatalog(&catDict); + if (catDict.isDict()) { + catDict.dictLookup("Names", &names); + } else { + error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); + names.initNull(); + } + catDict.free(); + } + + return &names; +} + +NameTree *Catalog::getDestNameTree() +{ + if (!destNameTree) { + + destNameTree = new NameTree(); + + if (getNames()->isDict()) { + Object obj; + + getNames()->dictLookup("Dests", &obj); + destNameTree->init(xref, &obj); + obj.free(); + } + + } + + return destNameTree; +} + +NameTree *Catalog::getEmbeddedFileNameTree() +{ + if (!embeddedFileNameTree) { + + embeddedFileNameTree = new NameTree(); + + if (getNames()->isDict()) { + Object obj; + + getNames()->dictLookup("EmbeddedFiles", &obj); + embeddedFileNameTree->init(xref, &obj); + obj.free(); + } + + } + + return embeddedFileNameTree; +} + +NameTree *Catalog::getJSNameTree() +{ + if (!jsNameTree) { + + jsNameTree = new NameTree(); + + if (getNames()->isDict()) { + Object obj; + + getNames()->dictLookup("JavaScript", &obj); + jsNameTree->init(xref, &obj); + obj.free(); + } + + } + + return jsNameTree; +} + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Catalog.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Catalog.h new file mode 100644 index 00000000000..41be3b6fc8a --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Catalog.h @@ -0,0 +1,227 @@ +//======================================================================== +// +// Catalog.h +// +// Copyright 1996-2007 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005, 2007, 2009-2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> +// Copyright (C) 2005, 2006, 2008 Brad Hards <bradh@frogmouth.net> +// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2008, 2011 Pino Toscano <pino@kde.org> +// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef CATALOG_H +#define CATALOG_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "Object.h" + +#include <vector> + +class XRef; +class Object; +class Page; +class PageAttrs; +struct Ref; +class LinkDest; +class PageLabelInfo; +class Form; +class OCGs; +class ViewerPreferences; +class FileSpec; + +//------------------------------------------------------------------------ +// NameTree +//------------------------------------------------------------------------ + +class NameTree { +public: + NameTree(); + ~NameTree(); + void init(XRef *xref, Object *tree); + GBool lookup(GooString *name, Object *obj); + int numEntries() { return length; }; + // iterator accessor, note it returns a shallow copy, do not free the object + Object getValue(int i); + GooString *getName(int i); + +private: + struct Entry { + Entry(Array *array, int index); + ~Entry(); + GooString name; + Object value; + void free(); + static int cmp(const void *key, const void *entry); + }; + + void parse(Object *tree); + void addEntry(Entry *entry); + + XRef *xref; + Object *root; + Entry **entries; + int size, length; // size is the number of entries in + // the array of Entry* + // length is the number of real Entry +}; + +//------------------------------------------------------------------------ +// Catalog +//------------------------------------------------------------------------ + +class Catalog { +public: + + // Constructor. + Catalog(XRef *xrefA); + + // Destructor. + ~Catalog(); + + // Is catalog valid? + GBool isOk() { return ok; } + + // Get number of pages. + int getNumPages(); + + // Get a page. + Page *getPage(int i); + + // Get the reference for a page object. + Ref *getPageRef(int i); + + // Return base URI, or NULL if none. + GooString *getBaseURI() { return baseURI; } + + // Return the contents of the metadata stream, or NULL if there is + // no metadata. + GooString *readMetadata(); + + // Return the structure tree root object. + Object *getStructTreeRoot(); + + // Find a page, given its object ID. Returns page number, or 0 if + // not found. + int findPage(int num, int gen); + + // Find a named destination. Returns the link destination, or + // NULL if <name> is not a destination. + LinkDest *findDest(GooString *name); + + Object *getDests(); + + // Get the number of embedded files + int numEmbeddedFiles() { return getEmbeddedFileNameTree()->numEntries(); } + + // Get the i'th file embedded (at the Document level) in the document + FileSpec *embeddedFile(int i); + + // Get the number of javascript scripts + int numJS() { return getJSNameTree()->numEntries(); } + + // Get the i'th JavaScript script (at the Document level) in the document + GooString *getJS(int i); + + // Convert between page indices and page labels. + GBool labelToIndex(GooString *label, int *index); + GBool indexToLabel(int index, GooString *label); + + Object *getOutline(); + + Object *getAcroForm() { return &acroForm; } + + OCGs *getOptContentConfig() { return optContent; } + + Form* getForm(); + + ViewerPreferences *getViewerPreferences(); + + enum PageMode { + pageModeNone, + pageModeOutlines, + pageModeThumbs, + pageModeFullScreen, + pageModeOC, + pageModeAttach, + pageModeNull + }; + enum PageLayout { + pageLayoutNone, + pageLayoutSinglePage, + pageLayoutOneColumn, + pageLayoutTwoColumnLeft, + pageLayoutTwoColumnRight, + pageLayoutTwoPageLeft, + pageLayoutTwoPageRight, + pageLayoutNull + }; + + // Returns the page mode. + PageMode getPageMode(); + PageLayout getPageLayout(); + +private: + + // Get page label info. + PageLabelInfo *getPageLabelInfo(); + + XRef *xref; // the xref table for this PDF file + Page **pages; // array of pages + Ref *pageRefs; // object ID for each page + int lastCachedPage; + std::vector<Dict *> *pagesList; + std::vector<Ref> *pagesRefList; + std::vector<PageAttrs *> *attrsList; + std::vector<int> *kidsIdxList; + Form *form; + ViewerPreferences *viewerPrefs; + int numPages; // number of pages + int pagesSize; // size of pages array + Object dests; // named destination dictionary + Object names; // named names dictionary + NameTree *destNameTree; // named destination name-tree + NameTree *embeddedFileNameTree; // embedded file name-tree + NameTree *jsNameTree; // Java Script name-tree + GooString *baseURI; // base URI for URI-type links + Object metadata; // metadata stream + Object structTreeRoot; // structure tree root dictionary + Object outline; // outline dictionary + Object acroForm; // AcroForm dictionary + Object viewerPreferences; // ViewerPreference dictionary + OCGs *optContent; // Optional Content groups + GBool ok; // true if catalog is valid + PageLabelInfo *pageLabelInfo; // info about page labels + PageMode pageMode; // page mode + PageLayout pageLayout; // page layout + + GBool cachePageTree(int page); // Cache first <page> pages. + Object *findDestInTree(Object *tree, GooString *name, Object *obj); + + Object *getNames(); + NameTree *getDestNameTree(); + NameTree *getEmbeddedFileNameTree(); + NameTree *getJSNameTree(); + +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CharCodeToUnicode.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/CharCodeToUnicode.cc new file mode 100644 index 00000000000..3cfa4020b50 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CharCodeToUnicode.cc @@ -0,0 +1,628 @@ +//======================================================================== +// +// CharCodeToUnicode.cc +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006, 2008-2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2007 Koji Otani <sho@bbr.jp> +// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> +// Copyright (C) 2008 Vasile Gaburici <gaburici@cs.umd.edu> +// Copyright (C) 2010 William Bader <williambader@hotmail.com> +// Copyright (C) 2010 Jakub Wilk <ubanus@users.sf.net> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdio.h> +#include <string.h> +#include "goo/gmem.h" +#include "goo/gfile.h" +#include "goo/GooLikely.h" +#include "goo/GooString.h" +#include "Error.h" +#include "GlobalParams.h" +#include "PSTokenizer.h" +#include "CharCodeToUnicode.h" + +//------------------------------------------------------------------------ + +struct CharCodeToUnicodeString { + CharCode c; + Unicode *u; + int len; +}; + +//------------------------------------------------------------------------ + +static int getCharFromString(void *data) { + char *p; + int c; + + p = *(char **)data; + if (*p) { + c = *p++; + *(char **)data = p; + } else { + c = EOF; + } + return c; +} + +static int getCharFromFile(void *data) { + return fgetc((FILE *)data); +} + +//------------------------------------------------------------------------ + +CharCodeToUnicode *CharCodeToUnicode::parseCIDToUnicode(GooString *fileName, + GooString *collection) { + FILE *f; + Unicode *mapA; + CharCode size, mapLenA; + char buf[64]; + Unicode u; + CharCodeToUnicode *ctu; + + if (!(f = fopen(fileName->getCString(), "r"))) { + error(-1, "Couldn't open cidToUnicode file '%s'", + fileName->getCString()); + return NULL; + } + + size = 32768; + mapA = (Unicode *)gmallocn(size, sizeof(Unicode)); + mapLenA = 0; + + while (getLine(buf, sizeof(buf), f)) { + if (mapLenA == size) { + size *= 2; + mapA = (Unicode *)greallocn(mapA, size, sizeof(Unicode)); + } + if (sscanf(buf, "%x", &u) == 1) { + mapA[mapLenA] = u; + } else { + error(-1, "Bad line (%d) in cidToUnicode file '%s'", + (int)(mapLenA + 1), fileName->getCString()); + mapA[mapLenA] = 0; + } + ++mapLenA; + } + fclose(f); + + ctu = new CharCodeToUnicode(collection->copy(), mapA, mapLenA, gTrue, + NULL, 0, 0); + gfree(mapA); + return ctu; +} + +CharCodeToUnicode *CharCodeToUnicode::parseUnicodeToUnicode( + GooString *fileName) { + FILE *f; + Unicode *mapA; + CharCodeToUnicodeString *sMapA; + CharCode size, oldSize, len, sMapSizeA, sMapLenA; + char buf[256]; + char *tok; + Unicode u0; + int uBufSize = 8; + Unicode *uBuf = (Unicode *)gmallocn(uBufSize, sizeof(Unicode)); + CharCodeToUnicode *ctu; + int line, n, i; + char *tokptr; + + if (!(f = fopen(fileName->getCString(), "r"))) { + gfree(uBuf); + error(-1, "Couldn't open unicodeToUnicode file '%s'", + fileName->getCString()); + return NULL; + } + + size = 4096; + mapA = (Unicode *)gmallocn(size, sizeof(Unicode)); + memset(mapA, 0, size * sizeof(Unicode)); + len = 0; + sMapA = NULL; + sMapSizeA = sMapLenA = 0; + + line = 0; + while (getLine(buf, sizeof(buf), f)) { + ++line; + if (!(tok = strtok_r(buf, " \t\r\n", &tokptr)) || + sscanf(tok, "%x", &u0) != 1) { + error(-1, "Bad line (%d) in unicodeToUnicode file '%s'", + line, fileName->getCString()); + continue; + } + n = 0; + while ((tok = strtok_r(NULL, " \t\r\n", &tokptr))) { + if (n >= uBufSize) + { + uBufSize += 8; + uBuf = (Unicode *)greallocn(uBuf, uBufSize, sizeof(Unicode)); + } + if (sscanf(tok, "%x", &uBuf[n]) != 1) { + error(-1, "Bad line (%d) in unicodeToUnicode file '%s'", + line, fileName->getCString()); + break; + } + ++n; + } + if (n < 1) { + error(-1, "Bad line (%d) in unicodeToUnicode file '%s'", + line, fileName->getCString()); + continue; + } + if (u0 >= size) { + oldSize = size; + while (u0 >= size) { + size *= 2; + } + mapA = (Unicode *)greallocn(mapA, size, sizeof(Unicode)); + memset(mapA + oldSize, 0, (size - oldSize) * sizeof(Unicode)); + } + if (n == 1) { + mapA[u0] = uBuf[0]; + } else { + mapA[u0] = 0; + if (sMapLenA == sMapSizeA) { + sMapSizeA += 16; + sMapA = (CharCodeToUnicodeString *) + greallocn(sMapA, sMapSizeA, sizeof(CharCodeToUnicodeString)); + } + sMapA[sMapLenA].c = u0; + sMapA[sMapLenA].u = (Unicode*)gmallocn(n, sizeof(Unicode)); + for (i = 0; i < n; ++i) { + sMapA[sMapLenA].u[i] = uBuf[i]; + } + sMapA[sMapLenA].len = n; + ++sMapLenA; + } + if (u0 >= len) { + len = u0 + 1; + } + } + fclose(f); + + ctu = new CharCodeToUnicode(fileName->copy(), mapA, len, gTrue, + sMapA, sMapLenA, sMapSizeA); + gfree(mapA); + gfree(uBuf); + return ctu; +} + +CharCodeToUnicode *CharCodeToUnicode::make8BitToUnicode(Unicode *toUnicode) { + return new CharCodeToUnicode(NULL, toUnicode, 256, gTrue, NULL, 0, 0); +} + +CharCodeToUnicode *CharCodeToUnicode::parseCMap(GooString *buf, int nBits) { + CharCodeToUnicode *ctu; + char *p; + + ctu = new CharCodeToUnicode(NULL); + p = buf->getCString(); + ctu->parseCMap1(&getCharFromString, &p, nBits); + return ctu; +} + +CharCodeToUnicode *CharCodeToUnicode::parseCMapFromFile(GooString *fileName, + int nBits) { + CharCodeToUnicode *ctu; + FILE *f; + + ctu = new CharCodeToUnicode(NULL); + if ((f = globalParams->findToUnicodeFile(fileName))) { + ctu->parseCMap1(&getCharFromFile, f, nBits); + fclose(f); + } else { + error(-1, "Couldn't find ToUnicode CMap file for '%s'", + fileName->getCString()); + } + return ctu; +} + +void CharCodeToUnicode::mergeCMap(GooString *buf, int nBits) { + char *p; + + p = buf->getCString(); + parseCMap1(&getCharFromString, &p, nBits); +} + +void CharCodeToUnicode::parseCMap1(int (*getCharFunc)(void *), void *data, + int nBits) { + PSTokenizer *pst; + char tok1[256], tok2[256], tok3[256]; + int nDigits, n1, n2, n3; + CharCode i; + CharCode code1, code2; + GooString *name; + FILE *f; + + nDigits = nBits / 4; + pst = new PSTokenizer(getCharFunc, data); + pst->getToken(tok1, sizeof(tok1), &n1); + while (pst->getToken(tok2, sizeof(tok2), &n2)) { + if (!strcmp(tok2, "usecmap")) { + if (tok1[0] == '/') { + name = new GooString(tok1 + 1); + if ((f = globalParams->findToUnicodeFile(name))) { + parseCMap1(&getCharFromFile, f, nBits); + fclose(f); + } else { + error(-1, "Couldn't find ToUnicode CMap file for '%s'", + name->getCString()); + } + delete name; + } + pst->getToken(tok1, sizeof(tok1), &n1); + } else if (!strcmp(tok2, "beginbfchar")) { + while (pst->getToken(tok1, sizeof(tok1), &n1)) { + if (!strcmp(tok1, "endbfchar")) { + break; + } + if (!pst->getToken(tok2, sizeof(tok2), &n2) || + !strcmp(tok2, "endbfchar")) { + error(-1, "Illegal entry in bfchar block in ToUnicode CMap"); + break; + } + if (!(n1 == 2 + nDigits && tok1[0] == '<' && tok1[n1 - 1] == '>' && + tok2[0] == '<' && tok2[n2 - 1] == '>')) { + if (!(n1 == 4 + nDigits && tok1[0] == '<' && tok1[n1 - 1] == '>' && tok1[1] == '0' && tok1[2] == '0' && + tok2[0] == '<' && tok2[n2 - 1] == '>')) { + error(-1, "Illegal entry in bfchar block in ToUnicode CMap"); + continue; + } + } + tok1[n1 - 1] = tok2[n2 - 1] = '\0'; + if (sscanf(tok1 + 1, "%x", &code1) != 1) { + error(-1, "Illegal entry in bfchar block in ToUnicode CMap"); + continue; + } + addMapping(code1, tok2 + 1, n2 - 2, 0); + } + pst->getToken(tok1, sizeof(tok1), &n1); + } else if (!strcmp(tok2, "beginbfrange")) { + while (pst->getToken(tok1, sizeof(tok1), &n1)) { + if (!strcmp(tok1, "endbfrange")) { + break; + } + if (!pst->getToken(tok2, sizeof(tok2), &n2) || + !strcmp(tok2, "endbfrange") || + !pst->getToken(tok3, sizeof(tok3), &n3) || + !strcmp(tok3, "endbfrange")) { + error(-1, "Illegal entry in bfrange block in ToUnicode CMap"); + break; + } + if (!(((n1 == 2 + nDigits && tok1[0] == '<' && tok1[n1 - 1] == '>') || + (n1 == 4 + nDigits && tok1[0] == '<' && tok1[n1 - 1] == '>' && tok1[1] == '0' && tok1[2] == '0')) && + ((n2 == 2 + nDigits && tok2[0] == '<' && tok2[n2 - 1] == '>') || + (n2 == 4 + nDigits && tok2[0] == '<' && tok2[n2 - 1] == '>' && tok1[1] == '0' && tok1[2] == '0')))) { + error(-1, "Illegal entry in bfrange block in ToUnicode CMap"); + continue; + } + tok1[n1 - 1] = tok2[n2 - 1] = '\0'; + if (sscanf(tok1 + 1, "%x", &code1) != 1 || + sscanf(tok2 + 1, "%x", &code2) != 1) { + error(-1, "Illegal entry in bfrange block in ToUnicode CMap"); + continue; + } + if (!strcmp(tok3, "[")) { + i = 0; + while (pst->getToken(tok1, sizeof(tok1), &n1) && + code1 + i <= code2) { + if (!strcmp(tok1, "]")) { + break; + } + if (tok1[0] == '<' && tok1[n1 - 1] == '>') { + tok1[n1 - 1] = '\0'; + addMapping(code1 + i, tok1 + 1, n1 - 2, 0); + } else { + error(-1, "Illegal entry in bfrange block in ToUnicode CMap"); + } + ++i; + } + } else if (tok3[0] == '<' && tok3[n3 - 1] == '>') { + tok3[n3 - 1] = '\0'; + for (i = 0; code1 <= code2; ++code1, ++i) { + addMapping(code1, tok3 + 1, n3 - 2, i); + } + + } else { + error(-1, "Illegal entry in bfrange block in ToUnicode CMap"); + } + } + pst->getToken(tok1, sizeof(tok1), &n1); + } else { + strcpy(tok1, tok2); + } + } + delete pst; +} + +void CharCodeToUnicode::addMapping(CharCode code, char *uStr, int n, + int offset) { + CharCode oldLen, i; + Unicode u; + char uHex[5]; + int j; + + if (code >= mapLen) { + oldLen = mapLen; + mapLen = (code + 256) & ~255; + if (unlikely(code >= mapLen)) { + error(-1, "Illegal code value in CharCodeToUnicode::addMapping"); + return; + } else { + map = (Unicode *)greallocn(map, mapLen, sizeof(Unicode)); + for (i = oldLen; i < mapLen; ++i) { + map[i] = 0; + } + } + } + if (n <= 4) { + if (sscanf(uStr, "%x", &u) != 1) { + error(-1, "Illegal entry in ToUnicode CMap"); + return; + } + map[code] = u + offset; + } else { + if (sMapLen >= sMapSize) { + sMapSize = sMapSize + 16; + sMap = (CharCodeToUnicodeString *) + greallocn(sMap, sMapSize, sizeof(CharCodeToUnicodeString)); + } + map[code] = 0; + sMap[sMapLen].c = code; + sMap[sMapLen].len = n / 4; + sMap[sMapLen].u = (Unicode*)gmallocn(sMap[sMapLen].len, sizeof(Unicode)); + for (j = 0; j < sMap[sMapLen].len; ++j) { + strncpy(uHex, uStr + j*4, 4); + uHex[4] = '\0'; + if (sscanf(uHex, "%x", &sMap[sMapLen].u[j]) != 1) { + error(-1, "Illegal entry in ToUnicode CMap"); + } + } + sMap[sMapLen].u[sMap[sMapLen].len - 1] += offset; + ++sMapLen; + } +} + +CharCodeToUnicode::CharCodeToUnicode(GooString *tagA) { + CharCode i; + + tag = tagA; + mapLen = 256; + map = (Unicode *)gmallocn(mapLen, sizeof(Unicode)); + for (i = 0; i < mapLen; ++i) { + map[i] = 0; + } + sMap = NULL; + sMapLen = sMapSize = 0; + refCnt = 1; +#if MULTITHREADED + gInitMutex(&mutex); +#endif +} + +CharCodeToUnicode::CharCodeToUnicode(GooString *tagA, Unicode *mapA, + CharCode mapLenA, GBool copyMap, + CharCodeToUnicodeString *sMapA, + int sMapLenA, int sMapSizeA) { + tag = tagA; + mapLen = mapLenA; + if (copyMap) { + map = (Unicode *)gmallocn(mapLen, sizeof(Unicode)); + memcpy(map, mapA, mapLen * sizeof(Unicode)); + } else { + map = mapA; + } + sMap = sMapA; + sMapLen = sMapLenA; + sMapSize = sMapSizeA; + refCnt = 1; +#if MULTITHREADED + gInitMutex(&mutex); +#endif +} + +CharCodeToUnicode::~CharCodeToUnicode() { + if (tag) { + delete tag; + } + gfree(map); + if (sMap) { + for (int i = 0; i < sMapLen; ++i) gfree(sMap[i].u); + gfree(sMap); + } +#if MULTITHREADED + gDestroyMutex(&mutex); +#endif +} + +void CharCodeToUnicode::incRefCnt() { +#if MULTITHREADED + gLockMutex(&mutex); +#endif + ++refCnt; +#if MULTITHREADED + gUnlockMutex(&mutex); +#endif +} + +void CharCodeToUnicode::decRefCnt() { + GBool done; + +#if MULTITHREADED + gLockMutex(&mutex); +#endif + done = --refCnt == 0; +#if MULTITHREADED + gUnlockMutex(&mutex); +#endif + if (done) { + delete this; + } +} + +GBool CharCodeToUnicode::match(GooString *tagA) { + return tag && !tag->cmp(tagA); +} + +void CharCodeToUnicode::setMapping(CharCode c, Unicode *u, int len) { + int i, j; + + if (len == 1) { + map[c] = u[0]; + } else { + for (i = 0; i < sMapLen; ++i) { + if (sMap[i].c == c) { + gfree(sMap[i].u); + break; + } + } + if (i == sMapLen) { + if (sMapLen == sMapSize) { + sMapSize += 8; + sMap = (CharCodeToUnicodeString *) + greallocn(sMap, sMapSize, sizeof(CharCodeToUnicodeString)); + } + ++sMapLen; + } + map[c] = 0; + sMap[i].c = c; + sMap[i].len = len; + sMap[i].u = (Unicode*)gmallocn(len, sizeof(Unicode)); + for (j = 0; j < len; ++j) { + sMap[i].u[j] = u[j]; + } + } +} + +int CharCodeToUnicode::mapToUnicode(CharCode c, Unicode **u) { + int i; + + if (c >= mapLen) { + return 0; + } + if (map[c]) { + *u = &map[c]; + return 1; + } + for (i = sMapLen - 1; i >= 0; --i) { // in reverse so CMap takes precedence + if (sMap[i].c == c) { + *u = sMap[i].u; + return sMap[i].len; + } + } + return 0; +} + +int CharCodeToUnicode::mapToCharCode(Unicode* u, CharCode *c, int usize) { + //look for charcode in map + if (usize == 1) { + for (CharCode i=0; i<mapLen; i++) { + if (map[i] == *u) { + *c = i; + return 1; + } + } + *c = 'x'; + } else { + int i, j; + //for each entry in the sMap + for (i=0; i<sMapLen; i++) { + //if the entry's unicode length isn't the same are usize, the strings + // are obviously differents + if (sMap[i].len != usize) continue; + //compare the string char by char + for (j=0; j<sMap[i].len; j++) { + if (sMap[i].u[j] != u[j]) { + continue; + } + } + + //we have the same strings + if (j==sMap[i].len) { + *c = sMap[i].c; + return 1; + } + } + } + return 0; +} + +//------------------------------------------------------------------------ + +CharCodeToUnicodeCache::CharCodeToUnicodeCache(int sizeA) { + int i; + + size = sizeA; + cache = (CharCodeToUnicode **)gmallocn(size, sizeof(CharCodeToUnicode *)); + for (i = 0; i < size; ++i) { + cache[i] = NULL; + } +} + +CharCodeToUnicodeCache::~CharCodeToUnicodeCache() { + int i; + + for (i = 0; i < size; ++i) { + if (cache[i]) { + cache[i]->decRefCnt(); + } + } + gfree(cache); +} + +CharCodeToUnicode *CharCodeToUnicodeCache::getCharCodeToUnicode(GooString *tag) { + CharCodeToUnicode *ctu; + int i, j; + + if (cache[0] && cache[0]->match(tag)) { + cache[0]->incRefCnt(); + return cache[0]; + } + for (i = 1; i < size; ++i) { + if (cache[i] && cache[i]->match(tag)) { + ctu = cache[i]; + for (j = i; j >= 1; --j) { + cache[j] = cache[j - 1]; + } + cache[0] = ctu; + ctu->incRefCnt(); + return ctu; + } + } + return NULL; +} + +void CharCodeToUnicodeCache::add(CharCodeToUnicode *ctu) { + int i; + + if (cache[size - 1]) { + cache[size - 1]->decRefCnt(); + } + for (i = size - 1; i >= 1; --i) { + cache[i] = cache[i - 1]; + } + cache[0] = ctu; + ctu->incRefCnt(); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CharCodeToUnicode.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/CharCodeToUnicode.h new file mode 100644 index 00000000000..3fdbf0f7216 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CharCodeToUnicode.h @@ -0,0 +1,138 @@ +//======================================================================== +// +// CharCodeToUnicode.h +// +// Mapping from character codes to Unicode. +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2007 Koji Otani <sho@bbr.jp> +// Copyright (C) 2008, 2011 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef CHARCODETOUNICODE_H +#define CHARCODETOUNICODE_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "poppler-config.h" +#include "CharTypes.h" +#include "goo/gtypes.h" + +#if MULTITHREADED +#include "goo/GooMutex.h" +#endif + +struct CharCodeToUnicodeString; +class GooString; + +//------------------------------------------------------------------------ + +class CharCodeToUnicode { +friend class UnicodeToCharCode; +public: + + // Read the CID-to-Unicode mapping for <collection> from the file + // specified by <fileName>. Sets the initial reference count to 1. + // Returns NULL on failure. + static CharCodeToUnicode *parseCIDToUnicode(GooString *fileName, + GooString *collection); + + // Create a Unicode-to-Unicode mapping from the file specified by + // <fileName>. Sets the initial reference count to 1. Returns NULL + // on failure. + static CharCodeToUnicode *parseUnicodeToUnicode(GooString *fileName); + + // Create the CharCode-to-Unicode mapping for an 8-bit font. + // <toUnicode> is an array of 256 Unicode indexes. Sets the initial + // reference count to 1. + static CharCodeToUnicode *make8BitToUnicode(Unicode *toUnicode); + + // Parse a ToUnicode CMap for an 8- or 16-bit font. + static CharCodeToUnicode *parseCMap(GooString *buf, int nBits); + static CharCodeToUnicode *parseCMapFromFile(GooString *fileName, int nBits); + + // Parse a ToUnicode CMap for an 8- or 16-bit font, merging it into + // <this>. + void mergeCMap(GooString *buf, int nBits); + + ~CharCodeToUnicode(); + + void incRefCnt(); + void decRefCnt(); + + // Return true if this mapping matches the specified <tagA>. + GBool match(GooString *tagA); + + // Set the mapping for <c>. + void setMapping(CharCode c, Unicode *u, int len); + + // Map a CharCode to Unicode. + int mapToUnicode(CharCode c, Unicode **u); + + int mapToCharCode(Unicode* u, CharCode *c, int usize); + + // Return the mapping's length, i.e., one more than the max char + // code supported by the mapping. + CharCode getLength() { return mapLen; } + +private: + + void parseCMap1(int (*getCharFunc)(void *), void *data, int nBits); + void addMapping(CharCode code, char *uStr, int n, int offset); + CharCodeToUnicode(GooString *tagA); + CharCodeToUnicode(GooString *tagA, Unicode *mapA, + CharCode mapLenA, GBool copyMap, + CharCodeToUnicodeString *sMapA, + int sMapLenA, int sMapSizeA); + + GooString *tag; + Unicode *map; + CharCode mapLen; + CharCodeToUnicodeString *sMap; + int sMapLen, sMapSize; + int refCnt; +#if MULTITHREADED + GooMutex mutex; +#endif +}; + +//------------------------------------------------------------------------ + +class CharCodeToUnicodeCache { +public: + + CharCodeToUnicodeCache(int sizeA); + ~CharCodeToUnicodeCache(); + + // Get the CharCodeToUnicode object for <tag>. Increments its + // reference count; there will be one reference for the cache plus + // one for the caller of this function. Returns NULL on failure. + CharCodeToUnicode *getCharCodeToUnicode(GooString *tag); + + // Insert <ctu> into the cache, in the most-recently-used position. + void add(CharCodeToUnicode *ctu); + +private: + + CharCodeToUnicode **cache; + int size; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CharTypes.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/CharTypes.h new file mode 100644 index 00000000000..d0df630d0c9 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CharTypes.h @@ -0,0 +1,24 @@ +//======================================================================== +// +// CharTypes.h +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef CHARTYPES_H +#define CHARTYPES_H + +// Unicode character. +typedef unsigned int Unicode; + +// Character ID for CID character collections. +typedef unsigned int CID; + +// This is large enough to hold any of the following: +// - 8-bit char code +// - 16-bit CID +// - Unicode +typedef unsigned int CharCode; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CompactFontTables.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/CompactFontTables.h new file mode 100644 index 00000000000..cfbfdaf5752 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CompactFontTables.h @@ -0,0 +1,480 @@ +//======================================================================== +// +// CompactFontTables.h +// +// Copyright 1999-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2011 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef COMPACTFONTINFO_H +#define COMPACTFONTINFO_H + +#include "goo/gtypes.h" + +static char *type1CStdStrings[391] = { + ".notdef", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quoteright", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "quoteleft", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "exclamdown", + "cent", + "sterling", + "fraction", + "yen", + "florin", + "section", + "currency", + "quotesingle", + "quotedblleft", + "guillemotleft", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "endash", + "dagger", + "daggerdbl", + "periodcentered", + "paragraph", + "bullet", + "quotesinglbase", + "quotedblbase", + "quotedblright", + "guillemotright", + "ellipsis", + "perthousand", + "questiondown", + "grave", + "acute", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "dieresis", + "ring", + "cedilla", + "hungarumlaut", + "ogonek", + "caron", + "emdash", + "AE", + "ordfeminine", + "Lslash", + "Oslash", + "OE", + "ordmasculine", + "ae", + "dotlessi", + "lslash", + "oslash", + "oe", + "germandbls", + "onesuperior", + "logicalnot", + "mu", + "trademark", + "Eth", + "onehalf", + "plusminus", + "Thorn", + "onequarter", + "divide", + "brokenbar", + "degree", + "thorn", + "threequarters", + "twosuperior", + "registered", + "minus", + "eth", + "multiply", + "threesuperior", + "copyright", + "Aacute", + "Acircumflex", + "Adieresis", + "Agrave", + "Aring", + "Atilde", + "Ccedilla", + "Eacute", + "Ecircumflex", + "Edieresis", + "Egrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Igrave", + "Ntilde", + "Oacute", + "Ocircumflex", + "Odieresis", + "Ograve", + "Otilde", + "Scaron", + "Uacute", + "Ucircumflex", + "Udieresis", + "Ugrave", + "Yacute", + "Ydieresis", + "Zcaron", + "aacute", + "acircumflex", + "adieresis", + "agrave", + "aring", + "atilde", + "ccedilla", + "eacute", + "ecircumflex", + "edieresis", + "egrave", + "iacute", + "icircumflex", + "idieresis", + "igrave", + "ntilde", + "oacute", + "ocircumflex", + "odieresis", + "ograve", + "otilde", + "scaron", + "uacute", + "ucircumflex", + "udieresis", + "ugrave", + "yacute", + "ydieresis", + "zcaron", + "exclamsmall", + "Hungarumlautsmall", + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "questionsmall", + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + "isuperior", + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + "rsuperior", + "ssuperior", + "tsuperior", + "ff", + "ffi", + "ffl", + "parenleftinferior", + "parenrightinferior", + "Circumflexsmall", + "hyphensuperior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + "exclamdownsmall", + "centoldstyle", + "Lslashsmall", + "Scaronsmall", + "Zcaronsmall", + "Dieresissmall", + "Brevesmall", + "Caronsmall", + "Dotaccentsmall", + "Macronsmall", + "figuredash", + "hypheninferior", + "Ogoneksmall", + "Ringsmall", + "Cedillasmall", + "questiondownsmall", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "zerosuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + "Agravesmall", + "Aacutesmall", + "Acircumflexsmall", + "Atildesmall", + "Adieresissmall", + "Aringsmall", + "AEsmall", + "Ccedillasmall", + "Egravesmall", + "Eacutesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Igravesmall", + "Iacutesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ethsmall", + "Ntildesmall", + "Ogravesmall", + "Oacutesmall", + "Ocircumflexsmall", + "Otildesmall", + "Odieresissmall", + "OEsmall", + "Oslashsmall", + "Ugravesmall", + "Uacutesmall", + "Ucircumflexsmall", + "Udieresissmall", + "Yacutesmall", + "Thornsmall", + "Ydieresissmall", + "001.000", + "001.001", + "001.002", + "001.003", + "Black", + "Bold", + "Book", + "Light", + "Medium", + "Regular", + "Roman", + "Semibold" +}; + +static Gushort type1CISOAdobeCharset[229] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228 +}; + +static const Gushort type1CExpertCharset[166] = { + 0, 1, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 13, 14, 15, 99, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 27, 28, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 109, 110, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 158, 155, 163, 319, 320, 321, 322, 323, 324, 325, + 326, 150, 164, 169, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378 +}; + +static Gushort type1CExpertSubsetCharset[87] = { + 0, 1, 231, 232, 235, 236, 237, 238, 13, 14, + 15, 99, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 27, 28, 249, 250, 251, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 109, 110, 267, 268, 269, 270, 272, 300, 301, + 302, 305, 314, 315, 158, 155, 163, 320, 321, 322, + 323, 324, 325, 326, 150, 164, 169, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346 +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CurlCachedFile.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/CurlCachedFile.cc new file mode 100644 index 00000000000..26e59e396b7 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CurlCachedFile.cc @@ -0,0 +1,99 @@ +//======================================================================== +// +// CurlCachedFile.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2009 Stefan Thomas <thomas@eload24.com> +// Copyright 2010, 2011 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#include <config.h> + +#include "CurlCachedFile.h" + +#include "goo/GooString.h" + +//------------------------------------------------------------------------ + +CurlCachedFileLoader::CurlCachedFileLoader() +{ + url = NULL; + cachedFile = NULL; + curl = NULL; +} + +CurlCachedFileLoader::~CurlCachedFileLoader() { + curl_easy_cleanup(curl); +} + +static size_t +noop_cb(char *ptr, size_t size, size_t nmemb, void *ptr2) +{ + return size*nmemb; +} + +size_t +CurlCachedFileLoader::init(GooString *urlA, CachedFile *cachedFileA) +{ + double contentLength = -1; + long code = 0; + size_t size; + + url = urlA; + cachedFile = cachedFileA; + curl = curl_easy_init(); + + curl_easy_setopt(curl, CURLOPT_URL, url->getCString()); + curl_easy_setopt(curl, CURLOPT_HEADER, 1); + curl_easy_setopt(curl, CURLOPT_NOBODY, 1); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &noop_cb); + curl_easy_perform(curl); + curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code); + if (code) { + curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &contentLength); + size = contentLength; + } else { + error(-1, "Failed to get size of '%s'.", url->getCString()); + size = -1; + } + curl_easy_reset(curl); + + return size; +} + +static +size_t load_cb(const char *ptr, size_t size, size_t nmemb, void *data) +{ + CachedFileWriter *writer = (CachedFileWriter *) data; + return (writer->write) (ptr, size*nmemb); +} + +int CurlCachedFileLoader::load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer) +{ + CURLcode r = CURLE_OK; + size_t fromByte, toByte; + for (size_t i = 0; i < ranges.size(); i++) { + + fromByte = ranges[i].offset; + toByte = fromByte + ranges[i].length - 1; + GooString *range = GooString::format("{0:ud}-{1:ud}", fromByte, toByte); + + curl_easy_setopt(curl, CURLOPT_URL, url->getCString()); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, load_cb); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, writer); + curl_easy_setopt(curl, CURLOPT_RANGE, range->getCString()); + r = curl_easy_perform(curl); + curl_easy_reset(curl); + + delete range; + + if (r != CURLE_OK) break; + } + return r; +} + +//------------------------------------------------------------------------ + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CurlCachedFile.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/CurlCachedFile.h new file mode 100644 index 00000000000..49882aba8ac --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CurlCachedFile.h @@ -0,0 +1,40 @@ +//======================================================================== +// +// CurlCachedFile.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#ifndef CURLCACHELOADER_H +#define CURLCACHELOADER_H + +#include "poppler-config.h" +#include "CachedFile.h" + +#include <curl/curl.h> + +//------------------------------------------------------------------------ + +class CurlCachedFileLoader : public CachedFileLoader { + +public: + + CurlCachedFileLoader(); + ~CurlCachedFileLoader(); + size_t init(GooString *url, CachedFile* cachedFile); + int load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer); + +private: + + GooString *url; + CachedFile *cachedFile; + CURL *curl; + +}; + +#endif + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CurlPDFDocBuilder.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/CurlPDFDocBuilder.cc new file mode 100644 index 00000000000..5b02b14a784 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CurlPDFDocBuilder.cc @@ -0,0 +1,47 @@ +//======================================================================== +// +// CurlPDFDocBuilder.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#include <config.h> + +#include "CurlPDFDocBuilder.h" + +#include "CachedFile.h" +#include "CurlCachedFile.h" + +//------------------------------------------------------------------------ +// CurlPDFDocBuilder +//------------------------------------------------------------------------ + +PDFDoc * +CurlPDFDocBuilder::buildPDFDoc(const GooString &uri, + GooString *ownerPassword, GooString *userPassword, void *guiDataA) +{ + Object obj; + + CachedFile *cachedFile = new CachedFile( + new CurlCachedFileLoader(), uri.copy()); + + obj.initNull(); + BaseStream *str = new CachedFileStream( + cachedFile, 0, gFalse, cachedFile->getLength(), &obj); + + return new PDFDoc(str, ownerPassword, userPassword, guiDataA); +} + +GBool CurlPDFDocBuilder::supports(const GooString &uri) +{ + if (uri.cmpN("http://", 7) == 0 || uri.cmpN("https://", 8) == 0) { + return gTrue; + } else { + return gFalse; + } +} + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/CurlPDFDocBuilder.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/CurlPDFDocBuilder.h new file mode 100644 index 00000000000..fb34862057c --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/CurlPDFDocBuilder.h @@ -0,0 +1,33 @@ +//======================================================================== +// +// CurlPDFDocBuilder.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#ifndef CURLPDFDOCBUILDER_H +#define CURLPDFDOCBUILDER_H + +#include "PDFDocBuilder.h" + +//------------------------------------------------------------------------ +// CurlPDFDocBuilder +// +// The CurlPDFDocBuilder implements a PDFDocBuilder for 'http(s)://'. +//------------------------------------------------------------------------ + +class CurlPDFDocBuilder : public PDFDocBuilder { + +public: + + PDFDoc *buildPDFDoc(const GooString &uri, GooString *ownerPassword = NULL, + GooString *userPassword = NULL, void *guiDataA = NULL); + GBool supports(const GooString &uri); + +}; + +#endif /* CURLPDFDOCBUILDER_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/DCTStream.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/DCTStream.cc new file mode 100644 index 00000000000..c0ef81df2f4 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/DCTStream.cc @@ -0,0 +1,243 @@ +//======================================================================== +// +// DCTStream.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2005 Jeff Muizelaar <jeff@infidigm.net> +// Copyright 2005-2010 Albert Astals Cid <aacid@kde.org> +// Copyright 2009 Ryszard Trojnacki <rysiek@menel.com> +// Copyright 2010 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright 2011 Daiki Ueno <ueno@unixuser.org> +// Copyright 2011 Tomas Hoger <thoger@redhat.com> +// +//======================================================================== + +#include "DCTStream.h" + +static void str_init_source(j_decompress_ptr cinfo) +{ +} + +static boolean str_fill_input_buffer(j_decompress_ptr cinfo) +{ + int c; + struct str_src_mgr * src = (struct str_src_mgr *)cinfo->src; + if (src->index == 0) { + c = 0xFF; + src->index++; + } + else if (src->index == 1) { + c = 0xD8; + src->index++; + } + else c = src->str->getChar(); + if (c != EOF) + { + src->buffer = c; + src->pub.next_input_byte = &src->buffer; + src->pub.bytes_in_buffer = 1; + return TRUE; + } + else return FALSE; +} + +static void str_skip_input_data(j_decompress_ptr cinfo, long num_bytes) +{ + struct str_src_mgr * src = (struct str_src_mgr *)cinfo->src; + if (num_bytes > 0) { + while (num_bytes > (long) src->pub.bytes_in_buffer) { + num_bytes -= (long) src->pub.bytes_in_buffer; + str_fill_input_buffer(cinfo); + } + src->pub.next_input_byte += (size_t) num_bytes; + src->pub.bytes_in_buffer -= (size_t) num_bytes; + } +} + +static void str_term_source(j_decompress_ptr cinfo) +{ +} + +DCTStream::DCTStream(Stream *strA, int colorXformA) : + FilterStream(strA) { + colorXform = colorXformA; + init(); +} + +DCTStream::~DCTStream() { + jpeg_destroy_decompress(&cinfo); + delete str; +} + +static void exitErrorHandler(jpeg_common_struct *error) { + j_decompress_ptr cinfo = (j_decompress_ptr)error; + str_error_mgr * err = (struct str_error_mgr *)cinfo->err; + longjmp(err->setjmp_buffer, 1); +} + +void DCTStream::init() +{ + jpeg_std_error(&err.pub); + err.pub.error_exit = &exitErrorHandler; + src.pub.init_source = str_init_source; + src.pub.fill_input_buffer = str_fill_input_buffer; + src.pub.skip_input_data = str_skip_input_data; + src.pub.resync_to_restart = jpeg_resync_to_restart; + src.pub.term_source = str_term_source; + src.pub.bytes_in_buffer = 0; + src.pub.next_input_byte = NULL; + src.str = str; + src.index = 0; + current = NULL; + limit = NULL; + + cinfo.err = &err.pub; + if (!setjmp(err.setjmp_buffer)) { + jpeg_create_decompress(&cinfo); + cinfo.src = (jpeg_source_mgr *)&src; + } + row_buffer = NULL; +} + +void DCTStream::reset() { + int row_stride; + + str->reset(); + + if (row_buffer) + { + jpeg_destroy_decompress(&cinfo); + init(); + } + + // JPEG data has to start with 0xFF 0xD8 + // but some pdf like the one on + // https://bugs.freedesktop.org/show_bug.cgi?id=3299 + // does have some garbage before that this seeks for + // the start marker... + bool startFound = false; + int c = 0, c2 = 0; + while (!startFound) + { + if (!c) + { + c = str->getChar(); + if (c == -1) + { + error(-1, "Could not find start of jpeg data"); + return; + } + if (c != 0xFF) c = 0; + } + else + { + c2 = str->getChar(); + if (c2 != 0xD8) + { + c = 0; + c2 = 0; + } + else startFound = true; + } + } + + if (!setjmp(err.setjmp_buffer) && jpeg_read_header(&cinfo, TRUE) != JPEG_SUSPENDED) + { + // figure out color transform + if (colorXform == -1 && !cinfo.saw_Adobe_marker) { + if (cinfo.num_components == 3) { + if (cinfo.saw_JFIF_marker) { + colorXform = 1; + } else if (cinfo.cur_comp_info[0]->component_id == 82 && + cinfo.cur_comp_info[1]->component_id == 71 && + cinfo.cur_comp_info[2]->component_id == 66) { // ASCII "RGB" + colorXform = 0; + } else { + colorXform = 1; + } + } else { + colorXform = 0; + } + } else if (cinfo.saw_Adobe_marker) { + colorXform = cinfo.Adobe_transform; + } + + switch (cinfo.num_components) { + case 3: + cinfo.jpeg_color_space = colorXform ? JCS_YCbCr : JCS_RGB; + break; + case 4: + cinfo.jpeg_color_space = colorXform ? JCS_YCCK : JCS_CMYK; + break; + } + + jpeg_start_decompress(&cinfo); + + row_stride = cinfo.output_width * cinfo.output_components; + row_buffer = cinfo.mem->alloc_sarray((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); + } +} + +// we can not go with inline since gcc +// refuses to inline because of setjmp +#define DO_GET_CHAR \ + if (current == limit) { \ + if (cinfo.output_scanline < cinfo.output_height) \ + { \ + if (!setjmp(err.setjmp_buffer)) \ + { \ + if (!jpeg_read_scanlines(&cinfo, row_buffer, 1)) c = EOF; \ + else { \ + current = &row_buffer[0][0]; \ + limit = &row_buffer[0][(cinfo.output_width - 1) * cinfo.output_components] + cinfo.output_components; \ + c = *current; \ + ++current; \ + } \ + } \ + else c = EOF; \ + } \ + else c = EOF; \ + } else { \ + c = *current; \ + ++current; \ + } \ + +int DCTStream::getChar() { + int c; + + DO_GET_CHAR + + return c; +} + +int DCTStream::getChars(int nChars, Guchar *buffer) { + int c; + for (int i = 0; i < nChars; ++i) { + DO_GET_CHAR + if (likely(c != EOF)) buffer[i] = c; + else return i; + } + return nChars; +} + +int DCTStream::lookChar() { + return *current; +} + +GooString *DCTStream::getPSFilter(int psLevel, char *indent) { + GooString *s; + + if (psLevel < 2) { + return NULL; + } + if (!(s = str->getPSFilter(psLevel, indent))) { + return NULL; + } + s->append(indent)->append("<< >> /DCTDecode filter\n"); + return s; +} + +GBool DCTStream::isBinary(GBool last) { + return str->isBinary(gTrue); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/DCTStream.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/DCTStream.h new file mode 100644 index 00000000000..ad864cadd52 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/DCTStream.h @@ -0,0 +1,87 @@ +//======================================================================== +// +// DCTStream.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2005 Jeff Muizelaar <jeff@infidigm.net> +// Copyright 2005 Martin Kretzschmar <martink@gnome.org> +// Copyright 2005-2007, 2009-2011 Albert Astals Cid <aacid@kde.org> +// Copyright 2010 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright 2011 Daiki Ueno <ueno@unixuser.org> +// +//======================================================================== + +#ifndef DCTSTREAM_H +#define DCTSTREAM_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include "poppler-config.h" +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#include <setjmp.h> +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#include <string.h> +#include <ctype.h> +#include "goo/gmem.h" +#include "goo/gfile.h" +#include "Error.h" +#include "Object.h" +#include "Decrypt.h" +#include "Stream.h" + +extern "C" { +#include <jpeglib.h> +} + +struct str_src_mgr { + struct jpeg_source_mgr pub; + JOCTET buffer; + Stream *str; + int index; +}; + +struct str_error_mgr { + struct jpeg_error_mgr pub; + jmp_buf setjmp_buffer; +}; + +class DCTStream: public FilterStream { +public: + + DCTStream(Stream *strA, int colorXformA); + virtual ~DCTStream(); + virtual StreamKind getKind() { return strDCT; } + virtual void reset(); + virtual int getChar(); + virtual int lookChar(); + virtual GooString *getPSFilter(int psLevel, char *indent); + virtual GBool isBinary(GBool last = gTrue); + +private: + void init(); + + virtual GBool hasGetChars() { return true; } + virtual int getChars(int nChars, Guchar *buffer); + + int colorXform; + JSAMPLE *current; + JSAMPLE *limit; + struct jpeg_decompress_struct cinfo; + struct str_error_mgr err; + struct str_src_mgr src; + JSAMPARRAY row_buffer; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/DateInfo.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/DateInfo.cc new file mode 100644 index 00000000000..563204a1743 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/DateInfo.cc @@ -0,0 +1,118 @@ +//======================================================================== +// +// DateInfo.cc +// +// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +//======================================================================== +// +// Based on code from pdfinfo.cc +// +// Copyright 1998-2003 Glyph & Cog, LLC +// +//======================================================================== + +#include <config.h> + +#include "DateInfo.h" + +#include <stdio.h> +#include <string.h> + +/* See PDF Reference 1.3, Section 3.8.2 for PDF Date representation */ +GBool parseDateString(const char *dateString, int *year, int *month, int *day, int *hour, int *minute, int *second, char *tz, int *tzHour, int *tzMinute) +{ + if ( dateString == NULL ) return gFalse; + if ( strlen(dateString) < 2 ) return gFalse; + + if ( dateString[0] == 'D' && dateString[1] == ':' ) + dateString += 2; + + *month = 1; + *day = 1; + *hour = 0; + *minute = 0; + *second = 0; + *tz = 0x00; + *tzHour = 0; + *tzMinute = 0; + + if ( sscanf( dateString, + "%4d%2d%2d%2d%2d%2d%c%2d%*c%2d", + year, month, day, hour, minute, second, + tz, tzHour, tzMinute ) > 0 ) { + /* Workaround for y2k bug in Distiller 3 stolen from gpdf, hoping that it won't + * be used after y2.2k */ + if ( *year < 1930 && strlen (dateString) > 14) + { + int century, years_since_1900; + if ( sscanf( dateString, + "%2d%3d%2d%2d%2d%2d%2d", + ¢ury, &years_since_1900, month, day, hour, minute, second) == 7 ) + { + *year = century * 100 + years_since_1900; + } + else + { + return gFalse; + } + } + + if (*year <= 0) return gFalse; + + return gTrue; + } + + return gFalse; +} + + +GooString *timeToDateString(time_t *timet) { + GooString *dateString; + char s[5]; + struct tm *gt; + size_t len; + time_t timep = timet ? *timet : time(NULL); + +#ifdef HAVE_GMTIME_R + struct tm t; + gt = gmtime_r (&timep, &t); +#else + gt = gmtime (&timep); +#endif + + dateString = new GooString ("D:"); + + /* Year YYYY */ + len = strftime (s, sizeof(s), "%Y", gt); + dateString->append (s, len); + + /* Month MM */ + len = strftime (s, sizeof(s), "%m", gt); + dateString->append (s, len); + + /* Day DD */ + len = strftime (s, sizeof(s), "%d", gt); + dateString->append (s, len); + + /* Hour HH */ + len = strftime (s, sizeof(s), "%H", gt); + dateString->append (s, len); + + /* Minute mm */ + len = strftime (s, sizeof(s), "%M", gt); + dateString->append (s, len); + + /* Second SS */ + len = strftime (s, sizeof(s), "%S", gt); + dateString->append (s, len); + + return dateString; +} + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/DateInfo.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/DateInfo.h new file mode 100644 index 00000000000..116350f4134 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/DateInfo.h @@ -0,0 +1,35 @@ +//======================================================================== +// +// DateInfo.h +// +// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +//======================================================================== +// +// Based on code from pdfinfo.cc +// +// Copyright 1998-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef DATE_INFO_H +#define DATE_INFO_H + +#include "goo/gtypes.h" +#include "goo/GooString.h" +#include <time.h> + +GBool parseDateString(const char *string, int *year, int *month, int *day, int *hour, int *minute, int *second, char *tz, int *tzHour, int *tzMinute); + +/* Converts the time_t into a PDF Date format string. + * If timet is NULL, current time is used. + */ +GooString *timeToDateString(time_t *timet); + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Decrypt.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Decrypt.cc new file mode 100644 index 00000000000..2373a66abf0 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Decrypt.cc @@ -0,0 +1,811 @@ +//======================================================================== +// +// Decrypt.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2008 Julien Rebetez <julien@fhtagn.net> +// Copyright (C) 2008, 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009 Matthias Franz <matthias@ktug.or.kr> +// Copyright (C) 2009 David Benjamin <davidben@mit.edu> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <string.h> +#include "goo/gmem.h" +#include "Decrypt.h" +#include "Error.h" + +static void rc4InitKey(Guchar *key, int keyLen, Guchar *state); +static Guchar rc4DecryptByte(Guchar *state, Guchar *x, Guchar *y, Guchar c); +static void aesKeyExpansion(DecryptAESState *s, + Guchar *objKey, int objKeyLen); +static void aesDecryptBlock(DecryptAESState *s, Guchar *in, GBool last); + +static const Guchar passwordPad[32] = { + 0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, + 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, + 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, + 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a +}; + +//------------------------------------------------------------------------ +// Decrypt +//------------------------------------------------------------------------ + +GBool Decrypt::makeFileKey(int encVersion, int encRevision, int keyLength, + GooString *ownerKey, GooString *userKey, + int permissions, GooString *fileID, + GooString *ownerPassword, GooString *userPassword, + Guchar *fileKey, GBool encryptMetadata, + GBool *ownerPasswordOk) { + Guchar test[32], test2[32]; + GooString *userPassword2; + Guchar fState[256]; + Guchar tmpKey[16]; + Guchar fx, fy; + int len, i, j; + + // try using the supplied owner password to generate the user password + *ownerPasswordOk = gFalse; + if (ownerPassword) { + len = ownerPassword->getLength(); + if (len < 32) { + memcpy(test, ownerPassword->getCString(), len); + memcpy(test + len, passwordPad, 32 - len); + } else { + memcpy(test, ownerPassword->getCString(), 32); + } + md5(test, 32, test); + if (encRevision == 3) { + for (i = 0; i < 50; ++i) { + md5(test, keyLength, test); + } + } + if (encRevision == 2) { + rc4InitKey(test, keyLength, fState); + fx = fy = 0; + for (i = 0; i < 32; ++i) { + test2[i] = rc4DecryptByte(fState, &fx, &fy, ownerKey->getChar(i)); + } + } else { + memcpy(test2, ownerKey->getCString(), 32); + for (i = 19; i >= 0; --i) { + for (j = 0; j < keyLength; ++j) { + tmpKey[j] = test[j] ^ i; + } + rc4InitKey(tmpKey, keyLength, fState); + fx = fy = 0; + for (j = 0; j < 32; ++j) { + test2[j] = rc4DecryptByte(fState, &fx, &fy, test2[j]); + } + } + } + userPassword2 = new GooString((char *)test2, 32); + if (makeFileKey2(encVersion, encRevision, keyLength, ownerKey, userKey, + permissions, fileID, userPassword2, fileKey, + encryptMetadata)) { + *ownerPasswordOk = gTrue; + delete userPassword2; + return gTrue; + } + delete userPassword2; + } + + // try using the supplied user password + return makeFileKey2(encVersion, encRevision, keyLength, ownerKey, userKey, + permissions, fileID, userPassword, fileKey, + encryptMetadata); +} + +GBool Decrypt::makeFileKey2(int encVersion, int encRevision, int keyLength, + GooString *ownerKey, GooString *userKey, + int permissions, GooString *fileID, + GooString *userPassword, Guchar *fileKey, + GBool encryptMetadata) { + Guchar *buf; + Guchar test[32]; + Guchar fState[256]; + Guchar tmpKey[16]; + Guchar fx, fy; + int len, i, j; + GBool ok; + + // generate file key + buf = (Guchar *)gmalloc(72 + fileID->getLength()); + if (userPassword) { + len = userPassword->getLength(); + if (len < 32) { + memcpy(buf, userPassword->getCString(), len); + memcpy(buf + len, passwordPad, 32 - len); + } else { + memcpy(buf, userPassword->getCString(), 32); + } + } else { + memcpy(buf, passwordPad, 32); + } + memcpy(buf + 32, ownerKey->getCString(), 32); + buf[64] = permissions & 0xff; + buf[65] = (permissions >> 8) & 0xff; + buf[66] = (permissions >> 16) & 0xff; + buf[67] = (permissions >> 24) & 0xff; + memcpy(buf + 68, fileID->getCString(), fileID->getLength()); + len = 68 + fileID->getLength(); + if (!encryptMetadata) { + buf[len++] = 0xff; + buf[len++] = 0xff; + buf[len++] = 0xff; + buf[len++] = 0xff; + } + md5(buf, len, fileKey); + if (encRevision == 3) { + for (i = 0; i < 50; ++i) { + md5(fileKey, keyLength, fileKey); + } + } + + // test user password + if (encRevision == 2) { + rc4InitKey(fileKey, keyLength, fState); + fx = fy = 0; + for (i = 0; i < 32; ++i) { + test[i] = rc4DecryptByte(fState, &fx, &fy, userKey->getChar(i)); + } + ok = memcmp(test, passwordPad, 32) == 0; + } else if (encRevision == 3) { + memcpy(test, userKey->getCString(), 32); + for (i = 19; i >= 0; --i) { + for (j = 0; j < keyLength; ++j) { + tmpKey[j] = fileKey[j] ^ i; + } + rc4InitKey(tmpKey, keyLength, fState); + fx = fy = 0; + for (j = 0; j < 32; ++j) { + test[j] = rc4DecryptByte(fState, &fx, &fy, test[j]); + } + } + memcpy(buf, passwordPad, 32); + memcpy(buf + 32, fileID->getCString(), fileID->getLength()); + md5(buf, 32 + fileID->getLength(), buf); + ok = memcmp(test, buf, 16) == 0; + } else { + ok = gFalse; + } + + gfree(buf); + return ok; +} + +//------------------------------------------------------------------------ +// DecryptStream +//------------------------------------------------------------------------ + +DecryptStream::DecryptStream(Stream *strA, Guchar *fileKey, + CryptAlgorithm algoA, int keyLength, + int objNum, int objGen): + FilterStream(strA) +{ + int n, i; + + algo = algoA; + + // construct object key + for (i = 0; i < keyLength; ++i) { + objKey[i] = fileKey[i]; + } + objKey[keyLength] = objNum & 0xff; + objKey[keyLength + 1] = (objNum >> 8) & 0xff; + objKey[keyLength + 2] = (objNum >> 16) & 0xff; + objKey[keyLength + 3] = objGen & 0xff; + objKey[keyLength + 4] = (objGen >> 8) & 0xff; + if (algo == cryptAES) { + objKey[keyLength + 5] = 0x73; // 's' + objKey[keyLength + 6] = 0x41; // 'A' + objKey[keyLength + 7] = 0x6c; // 'l' + objKey[keyLength + 8] = 0x54; // 'T' + n = keyLength + 9; + } else { + n = keyLength + 5; + } + Decrypt::md5(objKey, n, objKey); + if ((objKeyLength = keyLength + 5) > 16) { + objKeyLength = 16; + } + + charactersRead = 0; +} + +DecryptStream::~DecryptStream() { + delete str; +} + +void DecryptStream::reset() { + int i; + + charactersRead = 0; + str->reset(); + switch (algo) { + case cryptRC4: + state.rc4.x = state.rc4.y = 0; + rc4InitKey(objKey, objKeyLength, state.rc4.state); + state.rc4.buf = EOF; + break; + case cryptAES: + aesKeyExpansion(&state.aes, objKey, objKeyLength); + for (i = 0; i < 16; ++i) { + state.aes.cbc[i] = str->getChar(); + } + state.aes.bufIdx = 16; + break; + } +} + +int DecryptStream::getPos() { + return charactersRead; +} + +int DecryptStream::getChar() { + Guchar in[16]; + int c, i; + + c = EOF; // make gcc happy + switch (algo) { + case cryptRC4: + if (state.rc4.buf == EOF) { + c = str->getChar(); + if (c != EOF) { + state.rc4.buf = rc4DecryptByte(state.rc4.state, &state.rc4.x, + &state.rc4.y, (Guchar)c); + } + } + c = state.rc4.buf; + state.rc4.buf = EOF; + break; + case cryptAES: + if (state.aes.bufIdx == 16) { + for (i = 0; i < 16; ++i) { + if ((c = str->getChar()) == EOF) { + return EOF; + } + in[i] = (Guchar)c; + } + aesDecryptBlock(&state.aes, in, str->lookChar() == EOF); + } + if (state.aes.bufIdx == 16) { + c = EOF; + } else { + c = state.aes.buf[state.aes.bufIdx++]; + } + break; + } + if (c != EOF) + charactersRead++; + return c; +} + +int DecryptStream::lookChar() { + Guchar in[16]; + int c, i; + + c = EOF; // make gcc happy + switch (algo) { + case cryptRC4: + if (state.rc4.buf == EOF) { + c = str->getChar(); + if (c != EOF) { + state.rc4.buf = rc4DecryptByte(state.rc4.state, &state.rc4.x, + &state.rc4.y, (Guchar)c); + } + } + c = state.rc4.buf; + break; + case cryptAES: + if (state.aes.bufIdx == 16) { + for (i = 0; i < 16; ++i) { + if ((c = str->getChar()) == EOF) { + return EOF; + } + in[i] = c; + } + aesDecryptBlock(&state.aes, in, str->lookChar() == EOF); + } + if (state.aes.bufIdx == 16) { + c = EOF; + } else { + c = state.aes.buf[state.aes.bufIdx]; + } + break; + } + return c; +} + +GBool DecryptStream::isBinary(GBool last) { + return str->isBinary(last); +} + +//------------------------------------------------------------------------ +// RC4-compatible decryption +//------------------------------------------------------------------------ + +static void rc4InitKey(Guchar *key, int keyLen, Guchar *state) { + Guchar index1, index2; + Guchar t; + int i; + + for (i = 0; i < 256; ++i) + state[i] = i; + + if (unlikely(keyLen == 0)) + return; + + index1 = index2 = 0; + for (i = 0; i < 256; ++i) { + index2 = (key[index1] + state[i] + index2) % 256; + t = state[i]; + state[i] = state[index2]; + state[index2] = t; + index1 = (index1 + 1) % keyLen; + } +} + +static Guchar rc4DecryptByte(Guchar *state, Guchar *x, Guchar *y, Guchar c) { + Guchar x1, y1, tx, ty; + + x1 = *x = (*x + 1) % 256; + y1 = *y = (state[*x] + *y) % 256; + tx = state[x1]; + ty = state[y1]; + state[x1] = ty; + state[y1] = tx; + return c ^ state[(tx + ty) % 256]; +} + +//------------------------------------------------------------------------ +// AES decryption +//------------------------------------------------------------------------ + +static const Guchar sbox[256] = { + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 +}; + +static const Guchar invSbox[256] = { + 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, + 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, + 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, + 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, + 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, + 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, + 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, + 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, + 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, + 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, + 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, + 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, + 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, + 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, + 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d +}; + +static const Guint rcon[11] = { + 0x00000000, // unused + 0x01000000, + 0x02000000, + 0x04000000, + 0x08000000, + 0x10000000, + 0x20000000, + 0x40000000, + 0x80000000, + 0x1b000000, + 0x36000000 +}; + +static inline Guint subWord(Guint x) { + return (sbox[x >> 24] << 24) + | (sbox[(x >> 16) & 0xff] << 16) + | (sbox[(x >> 8) & 0xff] << 8) + | sbox[x & 0xff]; +} + +static inline Guint rotWord(Guint x) { + return ((x << 8) & 0xffffffff) | (x >> 24); +} + +static inline void invSubBytes(Guchar *state) { + int i; + + for (i = 0; i < 16; ++i) { + state[i] = invSbox[state[i]]; + } +} + +static inline void invShiftRows(Guchar *state) { + Guchar t; + + t = state[7]; + state[7] = state[6]; + state[6] = state[5]; + state[5] = state[4]; + state[4] = t; + + t = state[8]; + state[8] = state[10]; + state[10] = t; + t = state[9]; + state[9] = state[11]; + state[11] = t; + + t = state[12]; + state[12] = state[13]; + state[13] = state[14]; + state[14] = state[15]; + state[15] = t; +} + +// {09} \cdot s +static inline Guchar mul09(Guchar s) { + Guchar s2, s4, s8; + + s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1); + s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1); + s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1); + return s ^ s8; +} + +// {0b} \cdot s +static inline Guchar mul0b(Guchar s) { + Guchar s2, s4, s8; + + s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1); + s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1); + s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1); + return s ^ s2 ^ s8; +} + +// {0d} \cdot s +static inline Guchar mul0d(Guchar s) { + Guchar s2, s4, s8; + + s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1); + s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1); + s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1); + return s ^ s4 ^ s8; +} + +// {0e} \cdot s +static inline Guchar mul0e(Guchar s) { + Guchar s2, s4, s8; + + s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1); + s4 = (s2 & 0x80) ? ((s2 << 1) ^ 0x1b) : (s2 << 1); + s8 = (s4 & 0x80) ? ((s4 << 1) ^ 0x1b) : (s4 << 1); + return s2 ^ s4 ^ s8; +} + +static inline void invMixColumns(Guchar *state) { + int c; + Guchar s0, s1, s2, s3; + + for (c = 0; c < 4; ++c) { + s0 = state[c]; + s1 = state[4+c]; + s2 = state[8+c]; + s3 = state[12+c]; + state[c] = mul0e(s0) ^ mul0b(s1) ^ mul0d(s2) ^ mul09(s3); + state[4+c] = mul09(s0) ^ mul0e(s1) ^ mul0b(s2) ^ mul0d(s3); + state[8+c] = mul0d(s0) ^ mul09(s1) ^ mul0e(s2) ^ mul0b(s3); + state[12+c] = mul0b(s0) ^ mul0d(s1) ^ mul09(s2) ^ mul0e(s3); + } +} + +static inline void invMixColumnsW(Guint *w) { + int c; + Guchar s0, s1, s2, s3; + + for (c = 0; c < 4; ++c) { + s0 = w[c] >> 24; + s1 = w[c] >> 16; + s2 = w[c] >> 8; + s3 = w[c]; + w[c] = ((mul0e(s0) ^ mul0b(s1) ^ mul0d(s2) ^ mul09(s3)) << 24) + | ((mul09(s0) ^ mul0e(s1) ^ mul0b(s2) ^ mul0d(s3)) << 16) + | ((mul0d(s0) ^ mul09(s1) ^ mul0e(s2) ^ mul0b(s3)) << 8) + | (mul0b(s0) ^ mul0d(s1) ^ mul09(s2) ^ mul0e(s3)); + } +} + +static inline void addRoundKey(Guchar *state, Guint *w) { + int c; + + for (c = 0; c < 4; ++c) { + state[c] ^= w[c] >> 24; + state[4+c] ^= w[c] >> 16; + state[8+c] ^= w[c] >> 8; + state[12+c] ^= w[c]; + } +} + +static void aesKeyExpansion(DecryptAESState *s, + Guchar *objKey, int /*objKeyLen*/) { + Guint temp; + int i, round; + + //~ this assumes objKeyLen == 16 + + for (i = 0; i < 4; ++i) { + s->w[i] = (objKey[4*i] << 24) + (objKey[4*i+1] << 16) + + (objKey[4*i+2] << 8) + objKey[4*i+3]; + } + for (i = 4; i < 44; ++i) { + temp = s->w[i-1]; + if (!(i & 3)) { + temp = subWord(rotWord(temp)) ^ rcon[i/4]; + } + s->w[i] = s->w[i-4] ^ temp; + } + for (round = 1; round <= 9; ++round) { + invMixColumnsW(&s->w[round * 4]); + } +} + +static void aesDecryptBlock(DecryptAESState *s, Guchar *in, GBool last) { + int c, round, n, i; + + // initial state + for (c = 0; c < 4; ++c) { + s->state[c] = in[4*c]; + s->state[4+c] = in[4*c+1]; + s->state[8+c] = in[4*c+2]; + s->state[12+c] = in[4*c+3]; + } + + // round 0 + addRoundKey(s->state, &s->w[10 * 4]); + + // rounds 1-9 + for (round = 9; round >= 1; --round) { + invSubBytes(s->state); + invShiftRows(s->state); + invMixColumns(s->state); + addRoundKey(s->state, &s->w[round * 4]); + } + + // round 10 + invSubBytes(s->state); + invShiftRows(s->state); + addRoundKey(s->state, &s->w[0]); + + // CBC + for (c = 0; c < 4; ++c) { + s->buf[4*c] = s->state[c] ^ s->cbc[4*c]; + s->buf[4*c+1] = s->state[4+c] ^ s->cbc[4*c+1]; + s->buf[4*c+2] = s->state[8+c] ^ s->cbc[4*c+2]; + s->buf[4*c+3] = s->state[12+c] ^ s->cbc[4*c+3]; + } + + // save the input block for the next CBC + for (i = 0; i < 16; ++i) { + s->cbc[i] = in[i]; + } + + // remove padding + s->bufIdx = 0; + if (last) { + n = s->buf[15]; + for (i = 15; i >= n; --i) { + s->buf[i] = s->buf[i-n]; + } + s->bufIdx = n; + if (n > 16) + { + error(-1, "Reducing bufIdx from %d to 16 to not crash", n); + s->bufIdx = 16; + } + } +} + +//------------------------------------------------------------------------ +// MD5 message digest +//------------------------------------------------------------------------ + +// this works around a bug in older Sun compilers +static inline Gulong rotateLeft(Gulong x, int r) { + x &= 0xffffffff; + return ((x << r) | (x >> (32 - r))) & 0xffffffff; +} + +static inline Gulong md5Round1(Gulong a, Gulong b, Gulong c, Gulong d, + Gulong Xk, Gulong s, Gulong Ti) { + return b + rotateLeft((a + ((b & c) | (~b & d)) + Xk + Ti), s); +} + +static inline Gulong md5Round2(Gulong a, Gulong b, Gulong c, Gulong d, + Gulong Xk, Gulong s, Gulong Ti) { + return b + rotateLeft((a + ((b & d) | (c & ~d)) + Xk + Ti), s); +} + +static inline Gulong md5Round3(Gulong a, Gulong b, Gulong c, Gulong d, + Gulong Xk, Gulong s, Gulong Ti) { + return b + rotateLeft((a + (b ^ c ^ d) + Xk + Ti), s); +} + +static inline Gulong md5Round4(Gulong a, Gulong b, Gulong c, Gulong d, + Gulong Xk, Gulong s, Gulong Ti) { + return b + rotateLeft((a + (c ^ (b | ~d)) + Xk + Ti), s); +} + +void Decrypt::md5(Guchar *msg, int msgLen, Guchar *digest) { + Gulong x[16]; + Gulong a, b, c, d, aa, bb, cc, dd; + int n64; + int i, j, k; + + // compute number of 64-byte blocks + // (length + pad byte (0x80) + 8 bytes for length) + n64 = (msgLen + 1 + 8 + 63) / 64; + + // initialize a, b, c, d + a = 0x67452301; + b = 0xefcdab89; + c = 0x98badcfe; + d = 0x10325476; + + // loop through blocks + k = 0; + for (i = 0; i < n64; ++i) { + + // grab a 64-byte block + for (j = 0; j < 16 && k < msgLen - 3; ++j, k += 4) + x[j] = (((((msg[k+3] << 8) + msg[k+2]) << 8) + msg[k+1]) << 8) + msg[k]; + if (i == n64 - 1) { + if (k == msgLen - 3) + x[j] = 0x80000000 + (((msg[k+2] << 8) + msg[k+1]) << 8) + msg[k]; + else if (k == msgLen - 2) + x[j] = 0x800000 + (msg[k+1] << 8) + msg[k]; + else if (k == msgLen - 1) + x[j] = 0x8000 + msg[k]; + else + x[j] = 0x80; + ++j; + while (j < 16) + x[j++] = 0; + x[14] = msgLen << 3; + } + + // save a, b, c, d + aa = a; + bb = b; + cc = c; + dd = d; + + // round 1 + a = md5Round1(a, b, c, d, x[0], 7, 0xd76aa478); + d = md5Round1(d, a, b, c, x[1], 12, 0xe8c7b756); + c = md5Round1(c, d, a, b, x[2], 17, 0x242070db); + b = md5Round1(b, c, d, a, x[3], 22, 0xc1bdceee); + a = md5Round1(a, b, c, d, x[4], 7, 0xf57c0faf); + d = md5Round1(d, a, b, c, x[5], 12, 0x4787c62a); + c = md5Round1(c, d, a, b, x[6], 17, 0xa8304613); + b = md5Round1(b, c, d, a, x[7], 22, 0xfd469501); + a = md5Round1(a, b, c, d, x[8], 7, 0x698098d8); + d = md5Round1(d, a, b, c, x[9], 12, 0x8b44f7af); + c = md5Round1(c, d, a, b, x[10], 17, 0xffff5bb1); + b = md5Round1(b, c, d, a, x[11], 22, 0x895cd7be); + a = md5Round1(a, b, c, d, x[12], 7, 0x6b901122); + d = md5Round1(d, a, b, c, x[13], 12, 0xfd987193); + c = md5Round1(c, d, a, b, x[14], 17, 0xa679438e); + b = md5Round1(b, c, d, a, x[15], 22, 0x49b40821); + + // round 2 + a = md5Round2(a, b, c, d, x[1], 5, 0xf61e2562); + d = md5Round2(d, a, b, c, x[6], 9, 0xc040b340); + c = md5Round2(c, d, a, b, x[11], 14, 0x265e5a51); + b = md5Round2(b, c, d, a, x[0], 20, 0xe9b6c7aa); + a = md5Round2(a, b, c, d, x[5], 5, 0xd62f105d); + d = md5Round2(d, a, b, c, x[10], 9, 0x02441453); + c = md5Round2(c, d, a, b, x[15], 14, 0xd8a1e681); + b = md5Round2(b, c, d, a, x[4], 20, 0xe7d3fbc8); + a = md5Round2(a, b, c, d, x[9], 5, 0x21e1cde6); + d = md5Round2(d, a, b, c, x[14], 9, 0xc33707d6); + c = md5Round2(c, d, a, b, x[3], 14, 0xf4d50d87); + b = md5Round2(b, c, d, a, x[8], 20, 0x455a14ed); + a = md5Round2(a, b, c, d, x[13], 5, 0xa9e3e905); + d = md5Round2(d, a, b, c, x[2], 9, 0xfcefa3f8); + c = md5Round2(c, d, a, b, x[7], 14, 0x676f02d9); + b = md5Round2(b, c, d, a, x[12], 20, 0x8d2a4c8a); + + // round 3 + a = md5Round3(a, b, c, d, x[5], 4, 0xfffa3942); + d = md5Round3(d, a, b, c, x[8], 11, 0x8771f681); + c = md5Round3(c, d, a, b, x[11], 16, 0x6d9d6122); + b = md5Round3(b, c, d, a, x[14], 23, 0xfde5380c); + a = md5Round3(a, b, c, d, x[1], 4, 0xa4beea44); + d = md5Round3(d, a, b, c, x[4], 11, 0x4bdecfa9); + c = md5Round3(c, d, a, b, x[7], 16, 0xf6bb4b60); + b = md5Round3(b, c, d, a, x[10], 23, 0xbebfbc70); + a = md5Round3(a, b, c, d, x[13], 4, 0x289b7ec6); + d = md5Round3(d, a, b, c, x[0], 11, 0xeaa127fa); + c = md5Round3(c, d, a, b, x[3], 16, 0xd4ef3085); + b = md5Round3(b, c, d, a, x[6], 23, 0x04881d05); + a = md5Round3(a, b, c, d, x[9], 4, 0xd9d4d039); + d = md5Round3(d, a, b, c, x[12], 11, 0xe6db99e5); + c = md5Round3(c, d, a, b, x[15], 16, 0x1fa27cf8); + b = md5Round3(b, c, d, a, x[2], 23, 0xc4ac5665); + + // round 4 + a = md5Round4(a, b, c, d, x[0], 6, 0xf4292244); + d = md5Round4(d, a, b, c, x[7], 10, 0x432aff97); + c = md5Round4(c, d, a, b, x[14], 15, 0xab9423a7); + b = md5Round4(b, c, d, a, x[5], 21, 0xfc93a039); + a = md5Round4(a, b, c, d, x[12], 6, 0x655b59c3); + d = md5Round4(d, a, b, c, x[3], 10, 0x8f0ccc92); + c = md5Round4(c, d, a, b, x[10], 15, 0xffeff47d); + b = md5Round4(b, c, d, a, x[1], 21, 0x85845dd1); + a = md5Round4(a, b, c, d, x[8], 6, 0x6fa87e4f); + d = md5Round4(d, a, b, c, x[15], 10, 0xfe2ce6e0); + c = md5Round4(c, d, a, b, x[6], 15, 0xa3014314); + b = md5Round4(b, c, d, a, x[13], 21, 0x4e0811a1); + a = md5Round4(a, b, c, d, x[4], 6, 0xf7537e82); + d = md5Round4(d, a, b, c, x[11], 10, 0xbd3af235); + c = md5Round4(c, d, a, b, x[2], 15, 0x2ad7d2bb); + b = md5Round4(b, c, d, a, x[9], 21, 0xeb86d391); + + // increment a, b, c, d + a += aa; + b += bb; + c += cc; + d += dd; + } + + // break digest into bytes + digest[0] = (Guchar)(a & 0xff); + digest[1] = (Guchar)((a >>= 8) & 0xff); + digest[2] = (Guchar)((a >>= 8) & 0xff); + digest[3] = (Guchar)((a >>= 8) & 0xff); + digest[4] = (Guchar)(b & 0xff); + digest[5] = (Guchar)((b >>= 8) & 0xff); + digest[6] = (Guchar)((b >>= 8) & 0xff); + digest[7] = (Guchar)((b >>= 8) & 0xff); + digest[8] = (Guchar)(c & 0xff); + digest[9] = (Guchar)((c >>= 8) & 0xff); + digest[10] = (Guchar)((c >>= 8) & 0xff); + digest[11] = (Guchar)((c >>= 8) & 0xff); + digest[12] = (Guchar)(d & 0xff); + digest[13] = (Guchar)((d >>= 8) & 0xff); + digest[14] = (Guchar)((d >>= 8) & 0xff); + digest[15] = (Guchar)((d >>= 8) & 0xff); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Decrypt.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Decrypt.h new file mode 100644 index 00000000000..feb701444e2 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Decrypt.h @@ -0,0 +1,111 @@ +//======================================================================== +// +// Decrypt.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2008 Julien Rebetez <julien@fhtagn.net> +// Copyright (C) 2009 David Benjamin <davidben@mit.edu> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef DECRYPT_H +#define DECRYPT_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" +#include "goo/GooString.h" +#include "Object.h" +#include "Stream.h" + +//------------------------------------------------------------------------ +// Decrypt +//------------------------------------------------------------------------ + +class Decrypt { +public: + static void md5(Guchar *msg, int msgLen, Guchar *digest); + + // Generate a file key. The <fileKey> buffer must have space for at + // least 16 bytes. Checks <ownerPassword> and then <userPassword> + // and returns true if either is correct. Sets <ownerPasswordOk> if + // the owner password was correct. Either or both of the passwords + // may be NULL, which is treated as an empty string. + static GBool makeFileKey(int encVersion, int encRevision, int keyLength, + GooString *ownerKey, GooString *userKey, + int permissions, GooString *fileID, + GooString *ownerPassword, GooString *userPassword, + Guchar *fileKey, GBool encryptMetadata, + GBool *ownerPasswordOk); + +private: + + static GBool makeFileKey2(int encVersion, int encRevision, int keyLength, + GooString *ownerKey, GooString *userKey, + int permissions, GooString *fileID, + GooString *userPassword, Guchar *fileKey, + GBool encryptMetadata); +}; + +//------------------------------------------------------------------------ +// DecryptStream +//------------------------------------------------------------------------ + +struct DecryptRC4State { + Guchar state[256]; + Guchar x, y; + int buf; +}; + +struct DecryptAESState { + Guint w[44]; + Guchar state[16]; + Guchar cbc[16]; + Guchar buf[16]; + int bufIdx; +}; + +class DecryptStream: public FilterStream { +public: + + DecryptStream(Stream *strA, Guchar *fileKey, + CryptAlgorithm algoA, int keyLength, + int objNum, int objGen); + virtual ~DecryptStream(); + virtual StreamKind getKind() { return strWeird; } + virtual void reset(); + virtual int getChar(); + virtual int lookChar(); + virtual int getPos(); + virtual GBool isBinary(GBool last); + virtual Stream *getUndecodedStream() { return this; } + +private: + + CryptAlgorithm algo; + int objKeyLength; + Guchar objKey[16 + 9]; + int charactersRead; // so that getPos() can be correct + + union { + DecryptRC4State rc4; + DecryptAESState aes; + } state; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Dict.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Dict.cc new file mode 100644 index 00000000000..1428113b7ed --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Dict.cc @@ -0,0 +1,238 @@ +//======================================================================== +// +// Dict.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// Copyright (C) 2007-2008 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2008, 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2010 PaweÅ‚ Wiejacha <pawel.wiejacha@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <algorithm> +#include <stddef.h> +#include <string.h> +#include "goo/gmem.h" +#include "Object.h" +#include "XRef.h" +#include "Dict.h" + +//------------------------------------------------------------------------ +// Dict +//------------------------------------------------------------------------ + +static const int SORT_LENGTH_LOWER_LIMIT = 32; + +static inline bool cmpDictEntries(const DictEntry &e1, const DictEntry &e2) +{ + return strcmp(e1.key, e2.key) < 0; +} + +static int binarySearch(const char *key, DictEntry *entries, int length) +{ + int first = 0; + int end = length - 1; + while (first <= end) { + const int middle = (first + end) / 2; + const int res = strcmp(key, entries[middle].key); + if (res == 0) { + return middle; + } else if (res < 0) { + end = middle - 1; + } else { + first = middle + 1; + } + } + return -1; +} + +Dict::Dict(XRef *xrefA) { + xref = xrefA; + entries = NULL; + size = length = 0; + ref = 1; + sorted = gFalse; +} + +Dict::Dict(Dict* dictA) { + xref = dictA->xref; + size = length = dictA->length; + ref = 1; + + sorted = dictA->sorted; + entries = (DictEntry *)gmallocn(size, sizeof(DictEntry)); + for (int i=0; i<length; i++) { + entries[i].key = strdup(dictA->entries[i].key); + dictA->entries[i].val.copy(&entries[i].val); + } +} + +Dict::~Dict() { + int i; + + for (i = 0; i < length; ++i) { + gfree(entries[i].key); + entries[i].val.free(); + } + gfree(entries); +} + +void Dict::add(char *key, Object *val) { + if (sorted) { + // We use add on very few occasions so + // virtually this will never be hit + sorted = gFalse; + } + + if (length == size) { + if (length == 0) { + size = 8; + } else { + size *= 2; + } + entries = (DictEntry *)greallocn(entries, size, sizeof(DictEntry)); + } + entries[length].key = key; + entries[length].val = *val; + ++length; +} + +inline DictEntry *Dict::find(char *key) { + if (!sorted && length >= SORT_LENGTH_LOWER_LIMIT) + { + sorted = gTrue; + std::sort(entries, entries+length, cmpDictEntries); + } + + if (sorted) { + const int pos = binarySearch(key, entries, length); + if (pos != -1) { + return &entries[pos]; + } + } else { + int i; + + for (i = length - 1; i >=0; --i) { + if (!strcmp(key, entries[i].key)) + return &entries[i]; + } + } + return NULL; +} + +GBool Dict::hasKey(char *key) { + return find(key) != NULL; +} + +void Dict::remove(char *key) { + if (sorted) { + const int pos = binarySearch(key, entries, length); + if (pos != -1) { + length -= 1; + if (pos != length) { + memmove(&entries[pos], &entries[pos + 1], (length - pos) * sizeof(DictEntry)); + } + } + } else { + int i; + bool found = false; + DictEntry tmp; + if(length == 0) return; + + for(i=0; i<length; i++) { + if (!strcmp(key, entries[i].key)) { + found = true; + break; + } + } + if(!found) return; + //replace the deleted entry with the last entry + length -= 1; + tmp = entries[length]; + if (i!=length) //don't copy the last entry if it is deleted + entries[i] = tmp; + } +} + +void Dict::set(char *key, Object *val) { + DictEntry *e; + e = find (key); + if (e) { + e->val.free(); + e->val = *val; + } else { + add (copyString(key), val); + } +} + + +GBool Dict::is(char *type) { + DictEntry *e; + + return (e = find("Type")) && e->val.isName(type); +} + +Object *Dict::lookup(char *key, Object *obj, std::set<int> *fetchOriginatorNums) { + DictEntry *e; + + return (e = find(key)) ? e->val.fetch(xref, obj, fetchOriginatorNums) : obj->initNull(); +} + +Object *Dict::lookupNF(char *key, Object *obj) { + DictEntry *e; + + return (e = find(key)) ? e->val.copy(obj) : obj->initNull(); +} + +GBool Dict::lookupInt(const char *key, const char *alt_key, int *value) +{ + Object obj1; + GBool success = gFalse; + + lookup ((char *) key, &obj1); + if (obj1.isNull () && alt_key != NULL) { + obj1.free (); + lookup ((char *) alt_key, &obj1); + } + if (obj1.isInt ()) { + *value = obj1.getInt (); + success = gTrue; + } + + obj1.free (); + + return success; +} + +char *Dict::getKey(int i) { + return entries[i].key; +} + +Object *Dict::getVal(int i, Object *obj) { + return entries[i].val.fetch(xref, obj); +} + +Object *Dict::getValNF(int i, Object *obj) { + return entries[i].val.copy(obj); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Dict.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Dict.h new file mode 100644 index 00000000000..f4ed64a5dbf --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Dict.h @@ -0,0 +1,105 @@ +//======================================================================== +// +// Dict.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// Copyright (C) 2007-2008 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2010 PaweÅ‚ Wiejacha <pawel.wiejacha@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef DICT_H +#define DICT_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "Object.h" + +//------------------------------------------------------------------------ +// Dict +//------------------------------------------------------------------------ + +struct DictEntry { + char *key; + Object val; +}; + +class Dict { +public: + + // Constructor. + Dict(XRef *xrefA); + Dict(Dict* dictA); + + // Destructor. + ~Dict(); + + // Reference counting. + int incRef() { return ++ref; } + int decRef() { return --ref; } + + // Get number of entries. + int getLength() { return length; } + + // Add an entry. NB: does not copy key. + void add(char *key, Object *val); + + // Update the value of an existing entry, otherwise create it + void set(char *key, Object *val); + // Remove an entry. This invalidate indexes + void remove(char *key); + + // Check if dictionary is of specified type. + GBool is(char *type); + + // Look up an entry and return the value. Returns a null object + // if <key> is not in the dictionary. + Object *lookup(char *key, Object *obj, std::set<int> *fetchOriginatorNums = NULL); + Object *lookupNF(char *key, Object *obj); + GBool lookupInt(const char *key, const char *alt_key, int *value); + + // Iterative accessors. + char *getKey(int i); + Object *getVal(int i, Object *obj); + Object *getValNF(int i, Object *obj); + + // Set the xref pointer. This is only used in one special case: the + // trailer dictionary, which is read before the xref table is + // parsed. + void setXRef(XRef *xrefA) { xref = xrefA; } + + XRef *getXRef() { return xref; } + + GBool hasKey(char *key); + +private: + + GBool sorted; + XRef *xref; // the xref table for this PDF file + DictEntry *entries; // array of entries + int size; // size of <entries> array + int length; // number of entries in dictionary + int ref; // reference count + + DictEntry *find(char *key); +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Error.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Error.cc new file mode 100644 index 00000000000..fc2bef4371c --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Error.cc @@ -0,0 +1,72 @@ +//======================================================================== +// +// Error.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005, 2007 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2005 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdio.h> +#include <stddef.h> +#include <stdarg.h> +#include "GlobalParams.h" +#include "Error.h" + +static void defaultErrorFunction(int pos, char *msg, va_list args) +{ + if (pos >= 0) { + fprintf(stderr, "Error (%d): ", pos); + } else { + fprintf(stderr, "Error: "); + } + vfprintf(stderr, msg, args); + fprintf(stderr, "\n"); + fflush(stderr); +} + +static void (*errorFunction)(int, char *, va_list args) = defaultErrorFunction; + +void setErrorFunction(void (* f)(int, char *, va_list args)) +{ + errorFunction = f; +} + +void CDECL error(int pos, char *msg, ...) { + va_list args; + // NB: this can be called before the globalParams object is created + if (globalParams && globalParams->getErrQuiet()) { + return; + } + va_start(args, msg); + (*errorFunction)(pos, msg, args); + va_end(args); +} + +void warning(char *msg, ...) { + va_list args; + va_start(args, msg); + vprintf(msg, args); + va_end(args); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Error.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Error.h new file mode 100644 index 00000000000..07f3d1f92ad --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Error.h @@ -0,0 +1,40 @@ +//======================================================================== +// +// Error.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005, 2007 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2005 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef ERROR_H +#define ERROR_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include <stdarg.h> +#include "poppler-config.h" + +extern void CDECL error(int pos, char *msg, ...) GCC_PRINTF_FORMAT (2, 3); +void warning(char *msg, ...) GCC_PRINTF_FORMAT (1, 2); + +void setErrorFunction(void (* f)(int , char *, va_list args)); + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/ErrorCodes.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/ErrorCodes.h new file mode 100644 index 00000000000..b28528df564 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/ErrorCodes.h @@ -0,0 +1,36 @@ +//======================================================================== +// +// ErrorCodes.h +// +// Copyright 2002-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef ERRORCODES_H +#define ERRORCODES_H + +#define errNone 0 // no error + +#define errOpenFile 1 // couldn't open the PDF file + +#define errBadCatalog 2 // couldn't read the page catalog + +#define errDamaged 3 // PDF file was damaged and couldn't be + // repaired + +#define errEncrypted 4 // file was encrypted and password was + // incorrect or not supplied + +#define errHighlightFile 5 // nonexistent or invalid highlight file + +#define errBadPrinter 6 // invalid printer + +#define errPrinting 7 // error during printing + +#define errPermission 8 // PDF file doesn't allow that operation + +#define errBadPageNum 9 // invalid page number + +#define errFileIO 10 // file I/O error + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/FileSpec.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/FileSpec.cc new file mode 100644 index 00000000000..7807864b295 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/FileSpec.cc @@ -0,0 +1,268 @@ +//======================================================================== +// +// FileSpec.cc +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2008-2009 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +//======================================================================== +// +// Most of the code from Link.cc and PSOutputDev.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +#include <config.h> + +#include "FileSpec.h" + +EmbFile::EmbFile(Object *efStream) +{ + m_size = -1; + m_createDate = NULL; + m_modDate = NULL; + m_checksum = NULL; + m_mimetype = NULL; + + efStream->copy(&m_objStr); + + if (efStream->isStream()) { + // dataDict corresponds to Table 3.41 in the PDF1.6 spec. + Dict *dataDict = efStream->streamGetDict(); + + // subtype is normally the mimetype + Object subtypeName; + if (dataDict->lookup("Subtype", &subtypeName)->isName()) { + m_mimetype = new GooString(subtypeName.getName()); + } + subtypeName.free(); + + // paramDict corresponds to Table 3.42 in the PDF1.6 spec + Object paramDict; + if (dataDict->lookup("Params", ¶mDict)->isDict()) { + Object paramObj; + if (paramDict.dictLookup("ModDate", ¶mObj)->isString()) + m_modDate = new GooString(paramObj.getString()); + paramObj.free(); + + if (paramDict.dictLookup("CreationDate", ¶mObj)->isString()) + m_createDate = new GooString(paramObj.getString()); + paramObj.free(); + + if (paramDict.dictLookup("Size", ¶mObj)->isInt()) + m_size = paramObj.getInt(); + paramObj.free(); + + if (paramDict.dictLookup("CheckSum", ¶mObj)->isString()) + m_checksum = new GooString(paramObj.getString()); + paramObj.free(); + } + paramDict.free(); + } +} + +EmbFile::~EmbFile() +{ + delete m_createDate; + delete m_modDate; + delete m_checksum; + delete m_mimetype; + m_objStr.free(); +} + +FileSpec::FileSpec(Object *fileSpecA) +{ + ok = gTrue; + fileName = NULL; + platformFileName = NULL; + embFile = NULL; + desc = NULL; + fileSpecA->copy(&fileSpec); + + Object obj1; + if (!getFileSpecName(fileSpecA, &obj1)) { + ok = gFalse; + obj1.free(); + error(-1, "Invalid FileSpec"); + return; + } + + fileName = obj1.getString()->copy(); + obj1.free(); + + if (fileSpec.isDict()) { + if (fileSpec.dictLookup("EF", &obj1)->isDict()) { + if (!obj1.dictLookupNF("F", &fileStream)->isRef()) { + ok = gFalse; + fileStream.free(); + error(-1, "Invalid FileSpec: Embedded file stream is not an indirect reference"); + obj1.free(); + return; + } + } + obj1.free(); + } + + if (fileSpec.dictLookup("Desc", &obj1)->isString()) + desc = obj1.getString()->copy(); + obj1.free(); +} + +FileSpec::~FileSpec() +{ + fileSpec.free(); + fileStream.free(); + delete fileName; + delete platformFileName; + delete embFile; + delete desc; +} + +EmbFile *FileSpec::getEmbeddedFile() +{ + if (embFile) + return embFile; + + Object obj1; + XRef *xref = fileSpec.getDict()->getXRef(); + embFile = new EmbFile(fileStream.fetch(xref, &obj1)); + obj1.free(); + + return embFile; +} + +GooString *FileSpec::getFileNameForPlatform() +{ + if (platformFileName) + return platformFileName; + + Object obj1; + if (getFileSpecNameForPlatform(&fileSpec, &obj1)) + platformFileName = obj1.getString()->copy(); + obj1.free(); + + return platformFileName; +} + +GBool getFileSpecName (Object *fileSpec, Object *fileName) +{ + if (fileSpec->isString()) { + fileSpec->copy(fileName); + return gTrue; + } + + if (fileSpec->isDict()) { + fileSpec->dictLookup("UF", fileName); + if (fileName->isString()) { + return gTrue; + } + fileName->free(); + fileSpec->dictLookup("F", fileName); + if (fileName->isString()) { + return gTrue; + } + fileName->free(); + fileSpec->dictLookup("DOS", fileName); + if (fileName->isString()) { + return gTrue; + } + fileName->free(); + fileSpec->dictLookup("Mac", fileName); + if (fileName->isString()) { + return gTrue; + } + fileName->free(); + fileSpec->dictLookup("Unix", fileName); + if (fileName->isString()) { + return gTrue; + } + fileName->free(); + } + return gFalse; +} + +GBool getFileSpecNameForPlatform (Object *fileSpec, Object *fileName) +{ + if (fileSpec->isString()) { + fileSpec->copy(fileName); + return gTrue; + } + + if (fileSpec->isDict()) { + if (!fileSpec->dictLookup("UF", fileName)->isString ()) { + fileName->free(); + if (!fileSpec->dictLookup("F", fileName)->isString ()) { + fileName->free(); +#ifdef _WIN32 + char *platform = "DOS"; +#else + char *platform = "Unix"; +#endif + if (!fileSpec->dictLookup(platform, fileName)->isString ()) { + fileName->free(); + error(-1, "Illegal file spec"); + return gFalse; + } + } + } + } else { + error(-1, "Illegal file spec"); + return gFalse; + } + + // system-dependent path manipulation +#ifdef _WIN32 + int i, j; + GooString *name = fileName->getString(); + // "//...." --> "\...." + // "/x/...." --> "x:\...." + // "/server/share/...." --> "\\server\share\...." + // convert escaped slashes to slashes and unescaped slashes to backslashes + i = 0; + if (name->getChar(0) == '/') { + if (name->getLength() >= 2 && name->getChar(1) == '/') { + name->del(0); + i = 0; + } else if (name->getLength() >= 2 && + ((name->getChar(1) >= 'a' && name->getChar(1) <= 'z') || + (name->getChar(1) >= 'A' && name->getChar(1) <= 'Z')) && + (name->getLength() == 2 || name->getChar(2) == '/')) { + name->setChar(0, name->getChar(1)); + name->setChar(1, ':'); + i = 2; + } else { + for (j = 2; j < name->getLength(); ++j) { + if (name->getChar(j-1) != '\\' && + name->getChar(j) == '/') { + break; + } + } + if (j < name->getLength()) { + name->setChar(0, '\\'); + name->insert(0, '\\'); + i = 2; + } + } + } + for (; i < name->getLength(); ++i) { + if (name->getChar(i) == '/') { + name->setChar(i, '\\'); + } else if (name->getChar(i) == '\\' && + i+1 < name->getLength() && + name->getChar(i+1) == '/') { + name->del(i); + } + } +#endif /* _WIN32 */ + + return gTrue; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/FileSpec.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/FileSpec.h new file mode 100644 index 00000000000..e26cdcf8b0a --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/FileSpec.h @@ -0,0 +1,73 @@ +//======================================================================== +// +// FileSpec.h +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2008 Carlos Garcia Campos <carlosgc@gnome.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef FILE_SPEC_H +#define FILE_SPEC_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "Object.h" + +class EmbFile { +public: + EmbFile(Object *efStream); + ~EmbFile(); + + int size() { return m_size; } + GooString *modDate() { return m_modDate; } + GooString *createDate() { return m_createDate; } + GooString *checksum() { return m_checksum; } + GooString *mimeType() { return m_mimetype; } + Stream *stream() { return isOk() ? m_objStr.getStream() : NULL; } + GBool isOk() { return m_objStr.isStream(); } + +private: + int m_size; + GooString *m_createDate; + GooString *m_modDate; + GooString *m_checksum; + GooString *m_mimetype; + Object m_objStr; +}; + +class FileSpec { +public: + FileSpec(Object *fileSpec); + ~FileSpec(); + + GBool isOk() { return ok; } + + GooString *getFileName() const { return fileName; } + GooString *getFileNameForPlatform(); + GooString *getDescription() const { return desc; } + EmbFile *getEmbeddedFile(); + +private: + GBool ok; + + Object fileSpec; + + GooString *fileName; // F, UF, DOS, Mac, Unix + GooString *platformFileName; + Object fileStream; // Ref to F entry in UF + EmbFile *embFile; + GooString *desc; // Desc +}; + +GBool getFileSpecName (Object *fileSpec, Object *fileName); +GBool getFileSpecNameForPlatform (Object *fileSpec, Object *fileName); + +#endif /* FILE_SPEC_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/FlateStream.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/FlateStream.cc new file mode 100644 index 00000000000..ef477b36077 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/FlateStream.cc @@ -0,0 +1,128 @@ +//======================================================================== +// +// FlateStream.cc +// +// Copyright (C) 2005, Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2010, Albert Astals Cid <aacid@kde.org> +// +// This file is under the GPLv2 or later license +// +//======================================================================== +#include "FlateStream.h" +FlateStream::FlateStream(Stream *strA, int predictor, int columns, int colors, int bits) : + FilterStream(strA) +{ + if (predictor != 1) { + pred = new StreamPredictor(this, predictor, columns, colors, bits); + } else { + pred = NULL; + } + out_pos = 0; + memset(&d_stream, 0, sizeof(d_stream)); + inflateInit(&d_stream); +} + +FlateStream::~FlateStream() { + inflateEnd(&d_stream); + delete pred; + delete str; +} + +void FlateStream::reset() { + //FIXME: what are the semantics of reset? + //i.e. how much intialization has to happen in the constructor? + + /* reinitialize zlib */ + inflateEnd(&d_stream); + memset(&d_stream, 0, sizeof(d_stream)); + inflateInit(&d_stream); + + str->reset(); + d_stream.avail_in = 0; + status = Z_OK; + out_pos = 0; + out_buf_len = 0; +} + +int FlateStream::getRawChar() { + return doGetRawChar(); +} + +void FlateStream::getRawChars(int nChars, int *buffer) { + for (int i = 0; i < nChars; ++i) + buffer[i] = doGetRawChar(); +} + +int FlateStream::getChar() { + if (pred) + return pred->getChar(); + else + return getRawChar(); +} + +int FlateStream::lookChar() { + if (pred) + return pred->lookChar(); + + if (fill_buffer()) + return EOF; + + return out_buf[out_pos]; +} + +int FlateStream::fill_buffer() { + /* only fill the buffer if it has all been used */ + if (out_pos >= out_buf_len) { + /* check if the flatestream has been exhausted */ + if (status == Z_STREAM_END) { + return -1; + } + + /* set to the begining of out_buf */ + d_stream.avail_out = sizeof(out_buf); + d_stream.next_out = out_buf; + out_pos = 0; + + while (1) { + /* buffer is empty so we need to fill it */ + if (d_stream.avail_in == 0) { + int c; + /* read from the source stream */ + while (d_stream.avail_in < sizeof(in_buf) && (c = str->getChar()) != EOF) { + in_buf[d_stream.avail_in++] = c; + } + d_stream.next_in = in_buf; + } + + /* keep decompressing until we can't anymore */ + if (d_stream.avail_out == 0 || d_stream.avail_in == 0 || (status != Z_OK && status != Z_BUF_ERROR)) + break; + status = inflate(&d_stream, Z_SYNC_FLUSH); + } + + out_buf_len = sizeof(out_buf) - d_stream.avail_out; + if (status != Z_OK && status != Z_STREAM_END) + return -1; + if (!out_buf_len) + return -1; + } + + return 0; +} + +GooString *FlateStream::getPSFilter(int psLevel, char *indent) { + GooString *s; + + if (psLevel < 3 || pred) { + return NULL; + } + if (!(s = str->getPSFilter(psLevel, indent))) { + return NULL; + } + s->append(indent)->append("<< >> /FlateDecode filter\n"); + return s; +} + +GBool FlateStream::isBinary(GBool last) { + return str->isBinary(gTrue); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/FlateStream.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/FlateStream.h new file mode 100644 index 00000000000..dba00d0a89a --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/FlateStream.h @@ -0,0 +1,77 @@ +//======================================================================== +// +// FlateStream.h +// +// Copyright (C) 2005, Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2010, 2011, Albert Astals Cid <aacid@kde.org> +// +// This file is under the GPLv2 or later license +// +//======================================================================== + +#ifndef FLATESTREAM_H +#define FLATESTREAM_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include "poppler-config.h" +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#include <string.h> +#include <ctype.h> +#include "goo/gmem.h" +#include "goo/gfile.h" +#include "Error.h" +#include "Object.h" +#include "Decrypt.h" +#include "Stream.h" + +extern "C" { +#include <zlib.h> +} + +class FlateStream: public FilterStream { +public: + + FlateStream(Stream *strA, int predictor, int columns, int colors, int bits); + virtual ~FlateStream(); + virtual StreamKind getKind() { return strFlate; } + virtual void reset(); + virtual int getChar(); + virtual int lookChar(); + virtual int getRawChar(); + virtual void getRawChars(int nChars, int *buffer); + virtual GooString *getPSFilter(int psLevel, char *indent); + virtual GBool isBinary(GBool last = gTrue); + +private: + inline int doGetRawChar() { + if (fill_buffer()) + return EOF; + + return out_buf[out_pos++]; + } + + int fill_buffer(void); + z_stream d_stream; + StreamPredictor *pred; + int status; + /* in_buf currently needs to be 1 or we over read from EmbedStreams */ + unsigned char in_buf[1]; + unsigned char out_buf[4096]; + int out_pos; + int out_buf_len; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/FontEncodingTables.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/FontEncodingTables.cc new file mode 100644 index 00000000000..cd8d8926542 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/FontEncodingTables.cc @@ -0,0 +1,1824 @@ +//======================================================================== +// +// FontEncodingTables.cc +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#include <config.h> +#include <stdlib.h> +#include "FontEncodingTables.h" + +char *macRomanEncoding[256] = { + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quotesingle", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "grave", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + NULL, + "Adieresis", + "Aring", + "Ccedilla", + "Eacute", + "Ntilde", + "Odieresis", + "Udieresis", + "aacute", + "agrave", + "acircumflex", + "adieresis", + "atilde", + "aring", + "ccedilla", + "eacute", + "egrave", + "ecircumflex", + "edieresis", + "iacute", + "igrave", + "icircumflex", + "idieresis", + "ntilde", + "oacute", + "ograve", + "ocircumflex", + "odieresis", + "otilde", + "uacute", + "ugrave", + "ucircumflex", + "udieresis", + "dagger", + "degree", + "cent", + "sterling", + "section", + "bullet", + "paragraph", + "germandbls", + "registered", + "copyright", + "trademark", + "acute", + "dieresis", + "notequal", + "AE", + "Oslash", + "infinity", + "plusminus", + "lessequal", + "greaterequal", + "yen", + "mu", + "partialdiff", + "summation", + "product", + "pi", + "integral", + "ordfeminine", + "ordmasculine", + "Omega", + "ae", + "oslash", + "questiondown", + "exclamdown", + "logicalnot", + "radical", + "florin", + "approxequal", + "Delta", + "guillemotleft", + "guillemotright", + "ellipsis", + "space", + "Agrave", + "Atilde", + "Otilde", + "OE", + "oe", + "endash", + "emdash", + "quotedblleft", + "quotedblright", + "quoteleft", + "quoteright", + "divide", + "lozenge", + "ydieresis", + "Ydieresis", + "fraction", + "currency", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "daggerdbl", + "periodcentered", + "quotesinglbase", + "quotedblbase", + "perthousand", + "Acircumflex", + "Ecircumflex", + "Aacute", + "Edieresis", + "Egrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Igrave", + "Oacute", + "Ocircumflex", + "apple", + "Ograve", + "Uacute", + "Ucircumflex", + "Ugrave", + "dotlessi", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "ring", + "cedilla", + "hungarumlaut", + "ogonek", + "caron" +}; + +char *macExpertEncoding[256] = { + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "space", + "exclamsmall", + "Hungarumlautsmall", + "centoldstyle", + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "comma", + "hyphen", + "period", + "fraction", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "colon", + "semicolon", + NULL, + "threequartersemdash", + NULL, + "questionsmall", + NULL, + NULL, + NULL, + NULL, + "Ethsmall", + NULL, + NULL, + "onequarter", + "onehalf", + "threequarters", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "ff", + "fi", + "fl", + "ffi", + "ffl", + "parenleftinferior", + NULL, + "parenrightinferior", + "Circumflexsmall", + "hypheninferior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + NULL, + NULL, + "asuperior", + "centsuperior", + NULL, + NULL, + NULL, + NULL, + "Aacutesmall", + "Agravesmall", + "Acircumflexsmall", + "Adieresissmall", + "Atildesmall", + "Aringsmall", + "Ccedillasmall", + "Eacutesmall", + "Egravesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Iacutesmall", + "Igravesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ntildesmall", + "Oacutesmall", + "Ogravesmall", + "Ocircumflexsmall", + "Odieresissmall", + "Otildesmall", + "Uacutesmall", + "Ugravesmall", + "Ucircumflexsmall", + "Udieresissmall", + NULL, + "eightsuperior", + "fourinferior", + "threeinferior", + "sixinferior", + "eightinferior", + "seveninferior", + "Scaronsmall", + NULL, + "centinferior", + "twoinferior", + NULL, + "Dieresissmall", + NULL, + "Caronsmall", + "osuperior", + "fiveinferior", + NULL, + "commainferior", + "periodinferior", + "Yacutesmall", + NULL, + "dollarinferior", + NULL, + NULL, + "Thornsmall", + NULL, + "nineinferior", + "zeroinferior", + "Zcaronsmall", + "AEsmall", + "Oslashsmall", + "questiondownsmall", + "oneinferior", + "Lslashsmall", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "Cedillasmall", + NULL, + NULL, + NULL, + NULL, + NULL, + "OEsmall", + "figuredash", + "hyphensuperior", + NULL, + NULL, + NULL, + NULL, + "exclamdownsmall", + NULL, + "Ydieresissmall", + NULL, + "onesuperior", + "twosuperior", + "threesuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "ninesuperior", + "zerosuperior", + NULL, + "esuperior", + "rsuperior", + "tsuperior", + NULL, + NULL, + "isuperior", + "ssuperior", + "dsuperior", + NULL, + NULL, + NULL, + NULL, + NULL, + "lsuperior", + "Ogoneksmall", + "Brevesmall", + "Macronsmall", + "bsuperior", + "nsuperior", + "msuperior", + "commasuperior", + "periodsuperior", + "Dotaccentsmall", + "Ringsmall", + NULL, + NULL, + NULL, + NULL +}; + +char *winAnsiEncoding[256] = { + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quotesingle", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "grave", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "bullet", + "Euro", + "bullet", + "quotesinglbase", + "florin", + "quotedblbase", + "ellipsis", + "dagger", + "daggerdbl", + "circumflex", + "perthousand", + "Scaron", + "guilsinglleft", + "OE", + "bullet", + "Zcaron", + "bullet", + "bullet", + "quoteleft", + "quoteright", + "quotedblleft", + "quotedblright", + "bullet", + "endash", + "emdash", + "tilde", + "trademark", + "scaron", + "guilsinglright", + "oe", + "bullet", + "zcaron", + "Ydieresis", + "space", + "exclamdown", + "cent", + "sterling", + "currency", + "yen", + "brokenbar", + "section", + "dieresis", + "copyright", + "ordfeminine", + "guillemotleft", + "logicalnot", + "hyphen", + "registered", + "macron", + "degree", + "plusminus", + "twosuperior", + "threesuperior", + "acute", + "mu", + "paragraph", + "periodcentered", + "cedilla", + "onesuperior", + "ordmasculine", + "guillemotright", + "onequarter", + "onehalf", + "threequarters", + "questiondown", + "Agrave", + "Aacute", + "Acircumflex", + "Atilde", + "Adieresis", + "Aring", + "AE", + "Ccedilla", + "Egrave", + "Eacute", + "Ecircumflex", + "Edieresis", + "Igrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Eth", + "Ntilde", + "Ograve", + "Oacute", + "Ocircumflex", + "Otilde", + "Odieresis", + "multiply", + "Oslash", + "Ugrave", + "Uacute", + "Ucircumflex", + "Udieresis", + "Yacute", + "Thorn", + "germandbls", + "agrave", + "aacute", + "acircumflex", + "atilde", + "adieresis", + "aring", + "ae", + "ccedilla", + "egrave", + "eacute", + "ecircumflex", + "edieresis", + "igrave", + "iacute", + "icircumflex", + "idieresis", + "eth", + "ntilde", + "ograve", + "oacute", + "ocircumflex", + "otilde", + "odieresis", + "divide", + "oslash", + "ugrave", + "uacute", + "ucircumflex", + "udieresis", + "yacute", + "thorn", + "ydieresis" +}; + +char *standardEncoding[256] = { + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quoteright", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "quoteleft", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "exclamdown", + "cent", + "sterling", + "fraction", + "yen", + "florin", + "section", + "currency", + "quotesingle", + "quotedblleft", + "guillemotleft", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + NULL, + "endash", + "dagger", + "daggerdbl", + "periodcentered", + NULL, + "paragraph", + "bullet", + "quotesinglbase", + "quotedblbase", + "quotedblright", + "guillemotright", + "ellipsis", + "perthousand", + NULL, + "questiondown", + NULL, + "grave", + "acute", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "dieresis", + NULL, + "ring", + "cedilla", + NULL, + "hungarumlaut", + "ogonek", + "caron", + "emdash", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "AE", + NULL, + "ordfeminine", + NULL, + NULL, + NULL, + NULL, + "Lslash", + "Oslash", + "OE", + "ordmasculine", + NULL, + NULL, + NULL, + NULL, + NULL, + "ae", + NULL, + NULL, + NULL, + "dotlessi", + NULL, + NULL, + "lslash", + "oslash", + "oe", + "germandbls", + NULL, + NULL, + NULL, + NULL +}; + +char *expertEncoding[256] = { + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "space", + "exclamsmall", + "Hungarumlautsmall", + NULL, + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "comma", + "hyphen", + "period", + "fraction", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "colon", + "semicolon", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "questionsmall", + NULL, + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + NULL, + NULL, + NULL, + "isuperior", + NULL, + NULL, + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + NULL, + NULL, + "rsuperior", + "ssuperior", + "tsuperior", + NULL, + "ff", + "fi", + "fl", + "ffi", + "ffl", + "parenleftinferior", + NULL, + "parenrightinferior", + "Circumflexsmall", + "hyphensuperior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "exclamdownsmall", + "centoldstyle", + "Lslashsmall", + NULL, + NULL, + "Scaronsmall", + "Zcaronsmall", + "Dieresissmall", + "Brevesmall", + "Caronsmall", + NULL, + "Dotaccentsmall", + NULL, + NULL, + "Macronsmall", + NULL, + NULL, + "figuredash", + "hypheninferior", + NULL, + NULL, + "Ogoneksmall", + "Ringsmall", + "Cedillasmall", + NULL, + NULL, + NULL, + "onequarter", + "onehalf", + "threequarters", + "questiondownsmall", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + NULL, + NULL, + "zerosuperior", + "onesuperior", + "twosuperior", + "threesuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + "Agravesmall", + "Aacutesmall", + "Acircumflexsmall", + "Atildesmall", + "Adieresissmall", + "Aringsmall", + "AEsmall", + "Ccedillasmall", + "Egravesmall", + "Eacutesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Igravesmall", + "Iacutesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ethsmall", + "Ntildesmall", + "Ogravesmall", + "Oacutesmall", + "Ocircumflexsmall", + "Otildesmall", + "Odieresissmall", + "OEsmall", + "Oslashsmall", + "Ugravesmall", + "Uacutesmall", + "Ucircumflexsmall", + "Udieresissmall", + "Yacutesmall", + "Thornsmall", + "Ydieresissmall" +}; + +char *symbolEncoding[256] = { + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "space", + "exclam", + "universal", + "numbersign", + "existential", + "percent", + "ampersand", + "suchthat", + "parenleft", + "parenright", + "asteriskmath", + "plus", + "comma", + "minus", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "congruent", + "Alpha", + "Beta", + "Chi", + "Delta", + "Epsilon", + "Phi", + "Gamma", + "Eta", + "Iota", + "theta1", + "Kappa", + "Lambda", + "Mu", + "Nu", + "Omicron", + "Pi", + "Theta", + "Rho", + "Sigma", + "Tau", + "Upsilon", + "sigma1", + "Omega", + "Xi", + "Psi", + "Zeta", + "bracketleft", + "therefore", + "bracketright", + "perpendicular", + "underscore", + "radicalex", + "alpha", + "beta", + "chi", + "delta", + "epsilon", + "phi", + "gamma", + "eta", + "iota", + "phi1", + "kappa", + "lambda", + "mu", + "nu", + "omicron", + "pi", + "theta", + "rho", + "sigma", + "tau", + "upsilon", + "omega1", + "omega", + "xi", + "psi", + "zeta", + "braceleft", + "bar", + "braceright", + "similar", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "Upsilon1", + "minute", + "lessequal", + "fraction", + "infinity", + "florin", + "club", + "diamond", + "heart", + "spade", + "arrowboth", + "arrowleft", + "arrowup", + "arrowright", + "arrowdown", + "degree", + "plusminus", + "second", + "greaterequal", + "multiply", + "proportional", + "partialdiff", + "bullet", + "divide", + "notequal", + "equivalence", + "approxequal", + "ellipsis", + "arrowvertex", + "arrowhorizex", + "carriagereturn", + "aleph", + "Ifraktur", + "Rfraktur", + "weierstrass", + "circlemultiply", + "circleplus", + "emptyset", + "intersection", + "union", + "propersuperset", + "reflexsuperset", + "notsubset", + "propersubset", + "reflexsubset", + "element", + "notelement", + "angle", + "gradient", + "registerserif", + "copyrightserif", + "trademarkserif", + "product", + "radical", + "dotmath", + "logicalnot", + "logicaland", + "logicalor", + "arrowdblboth", + "arrowdblleft", + "arrowdblup", + "arrowdblright", + "arrowdbldown", + "lozenge", + "angleleft", + "registersans", + "copyrightsans", + "trademarksans", + "summation", + "parenlefttp", + "parenleftex", + "parenleftbt", + "bracketlefttp", + "bracketleftex", + "bracketleftbt", + "bracelefttp", + "braceleftmid", + "braceleftbt", + "braceex", + NULL, + "angleright", + "integral", + "integraltp", + "integralex", + "integralbt", + "parenrighttp", + "parenrightex", + "parenrightbt", + "bracketrighttp", + "bracketrightex", + "bracketrightbt", + "bracerighttp", + "bracerightmid", + "bracerightbt", + NULL +}; + +char *zapfDingbatsEncoding[256] = { + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "space", + "a1", + "a2", + "a202", + "a3", + "a4", + "a5", + "a119", + "a118", + "a117", + "a11", + "a12", + "a13", + "a14", + "a15", + "a16", + "a105", + "a17", + "a18", + "a19", + "a20", + "a21", + "a22", + "a23", + "a24", + "a25", + "a26", + "a27", + "a28", + "a6", + "a7", + "a8", + "a9", + "a10", + "a29", + "a30", + "a31", + "a32", + "a33", + "a34", + "a35", + "a36", + "a37", + "a38", + "a39", + "a40", + "a41", + "a42", + "a43", + "a44", + "a45", + "a46", + "a47", + "a48", + "a49", + "a50", + "a51", + "a52", + "a53", + "a54", + "a55", + "a56", + "a57", + "a58", + "a59", + "a60", + "a61", + "a62", + "a63", + "a64", + "a65", + "a66", + "a67", + "a68", + "a69", + "a70", + "a71", + "a72", + "a73", + "a74", + "a203", + "a75", + "a204", + "a76", + "a77", + "a78", + "a79", + "a81", + "a82", + "a83", + "a84", + "a97", + "a98", + "a99", + "a100", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "a101", + "a102", + "a103", + "a104", + "a106", + "a107", + "a108", + "a112", + "a111", + "a110", + "a109", + "a120", + "a121", + "a122", + "a123", + "a124", + "a125", + "a126", + "a127", + "a128", + "a129", + "a130", + "a131", + "a132", + "a133", + "a134", + "a135", + "a136", + "a137", + "a138", + "a139", + "a140", + "a141", + "a142", + "a143", + "a144", + "a145", + "a146", + "a147", + "a148", + "a149", + "a150", + "a151", + "a152", + "a153", + "a154", + "a155", + "a156", + "a157", + "a158", + "a159", + "a160", + "a161", + "a163", + "a164", + "a196", + "a165", + "a192", + "a166", + "a167", + "a168", + "a169", + "a170", + "a171", + "a172", + "a173", + "a162", + "a174", + "a175", + "a176", + "a177", + "a178", + "a179", + "a193", + "a180", + "a199", + "a181", + "a200", + "a182", + NULL, + "a201", + "a183", + "a184", + "a197", + "a185", + "a194", + "a198", + "a186", + "a195", + "a187", + "a188", + "a189", + "a190", + "a191", + NULL +}; diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/FontEncodingTables.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/FontEncodingTables.h new file mode 100644 index 00000000000..8b0a1e7e993 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/FontEncodingTables.h @@ -0,0 +1,20 @@ +//======================================================================== +// +// FontEncodingTables.h +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef FONTENCODINGTABLES_H +#define FONTENCODINGTABLES_H + +extern char *macRomanEncoding[]; +extern char *macExpertEncoding[]; +extern char *winAnsiEncoding[]; +extern char *standardEncoding[]; +extern char *expertEncoding[]; +extern char *symbolEncoding[]; +extern char *zapfDingbatsEncoding[]; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/FontInfo.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/FontInfo.cc new file mode 100644 index 00000000000..440e6f5aee9 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/FontInfo.cc @@ -0,0 +1,239 @@ +//======================================================================== +// +// FontInfo.cc +// +// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005-2008, 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> +// Copyright (C) 2006 Kouhei Sutou <kou@cozmixng.org> +// Copyright (C) 2009 Pino Toscano <pino@kde.org> +// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2010 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2010 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2011 Carlos Garcia Campos <carlosgc@gnome.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +//======================================================================== +// +// Based on code from pdffonts.cc +// +// Copyright 2001-2007 Glyph & Cog, LLC +// +//======================================================================== + +#include "config.h" +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#include <string.h> +#include <math.h> +#include "GlobalParams.h" +#include "Error.h" +#include "Object.h" +#include "Dict.h" +#include "GfxFont.h" +#include "Annot.h" +#include "PDFDoc.h" +#include "FontInfo.h" + +FontInfoScanner::FontInfoScanner(PDFDoc *docA, int firstPage) { + doc = docA; + currentPage = firstPage + 1; +} + +FontInfoScanner::~FontInfoScanner() { +} + +GooList *FontInfoScanner::scan(int nPages) { + GooList *result; + Page *page; + Dict *resDict; + Annots *annots; + Object obj1, obj2; + int lastPage; + + if (currentPage > doc->getNumPages()) { + return NULL; + } + + result = new GooList(); + + lastPage = currentPage + nPages; + if (lastPage > doc->getNumPages() + 1) { + lastPage = doc->getNumPages() + 1; + } + + for (int pg = currentPage; pg < lastPage; ++pg) { + page = doc->getPage(pg); + if (!page) continue; + + if ((resDict = page->getResourceDict())) { + scanFonts(resDict, result); + } + annots = page->getAnnots(doc->getCatalog()); + for (int i = 0; i < annots->getNumAnnots(); ++i) { + if (annots->getAnnot(i)->getAppearance(&obj1)->isStream()) { + obj1.streamGetDict()->lookup("Resources", &obj2); + if (obj2.isDict()) { + scanFonts(obj2.getDict(), result); + } + obj2.free(); + } + obj1.free(); + } + } + + currentPage = lastPage; + + return result; +} + +void FontInfoScanner::scanFonts(Dict *resDict, GooList *fontsList) { + Object obj1, obj2, objDict, resObj; + Ref r; + GfxFontDict *gfxFontDict; + GfxFont *font; + int i; + + // scan the fonts in this resource dictionary + gfxFontDict = NULL; + resDict->lookupNF("Font", &obj1); + if (obj1.isRef()) { + obj1.fetch(doc->getXRef(), &obj2); + if (obj2.isDict()) { + r = obj1.getRef(); + gfxFontDict = new GfxFontDict(doc->getXRef(), &r, obj2.getDict()); + } + obj2.free(); + } else if (obj1.isDict()) { + gfxFontDict = new GfxFontDict(doc->getXRef(), NULL, obj1.getDict()); + } + if (gfxFontDict) { + for (i = 0; i < gfxFontDict->getNumFonts(); ++i) { + if ((font = gfxFontDict->getFont(i))) { + Ref fontRef = *font->getID(); + + // add this font to the list if not already found + if (fonts.find(fontRef.num) == fonts.end()) { + fontsList->append(new FontInfo(font, doc)); + fonts.insert(fontRef.num); + } + } + } + delete gfxFontDict; + } + obj1.free(); + + // recursively scan any resource dictionaries in objects in this + // resource dictionary + char *resTypes[] = { "XObject", "Pattern" }; + for (Guint resType = 0; resType < sizeof(resTypes) / sizeof(resTypes[0]); ++resType) { + resDict->lookup(resTypes[resType], &objDict); + if (objDict.isDict()) { + for (i = 0; i < objDict.dictGetLength(); ++i) { + objDict.dictGetValNF(i, &obj1); + if (obj1.isRef()) { + // check for an already-seen object + const Ref r = obj1.getRef(); + if (visitedObjects.find(r.num) != visitedObjects.end()) { + obj1.free(); + continue; + } + + visitedObjects.insert(r.num); + } + + obj1.fetch(doc->getXRef(), &obj2); + + if (obj2.isStream()) { + obj2.streamGetDict()->lookup("Resources", &resObj); + if (resObj.isDict() && resObj.getDict() != resDict) { + scanFonts(resObj.getDict(), fontsList); + } + resObj.free(); + } + obj1.free(); + obj2.free(); + } + } + objDict.free(); + } +} + +FontInfo::FontInfo(GfxFont *font, PDFDoc *doc) { + GooString *origName; + Object fontObj, toUnicodeObj; + int i; + + fontRef = *font->getID(); + + // font name + origName = font->getOrigName(); + if (origName != NULL) { + name = font->getOrigName()->copy(); + } else { + name = NULL; + } + + // font type + type = (FontInfo::Type)font->getType(); + + // check for an embedded font + if (font->getType() == fontType3) { + emb = gTrue; + } else { + emb = font->getEmbeddedFontID(&embRef); + } + + if (!emb) + { + DisplayFontParam *dfp = globalParams->getDisplayFont(font); + if (dfp) + { + if (dfp->kind == displayFontT1) file = dfp->t1.fileName->copy(); + else file = dfp->tt.fileName->copy(); + } + else file = NULL; + } + else file = NULL; + + // look for a ToUnicode map + hasToUnicode = gFalse; + if (doc->getXRef()->fetch(fontRef.num, fontRef.gen, &fontObj)->isDict()) { + hasToUnicode = fontObj.dictLookup("ToUnicode", &toUnicodeObj)->isStream(); + toUnicodeObj.free(); + } + fontObj.free(); + + // check for a font subset name: capital letters followed by a '+' + // sign + subset = gFalse; + if (name) { + for (i = 0; i < name->getLength(); ++i) { + if (name->getChar(i) < 'A' || name->getChar(i) > 'Z') { + break; + } + } + subset = i > 0 && i < name->getLength() && name->getChar(i) == '+'; + } +} + +FontInfo::FontInfo(FontInfo& f) { + name = f.name ? f.name->copy() : NULL; + file = f.file ? f.file->copy() : NULL; + type = f.type; + emb = f.emb; + subset = f.subset; + hasToUnicode = f.hasToUnicode; + fontRef = f.fontRef; + embRef = f.embRef; +} + +FontInfo::~FontInfo() { + delete name; + delete file; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/FontInfo.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/FontInfo.h new file mode 100644 index 00000000000..733194db6a3 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/FontInfo.h @@ -0,0 +1,97 @@ +//======================================================================== +// +// FontInfo.h +// +// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005-2008, 2010, 2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> +// Copyright (C) 2009 Pino Toscano <pino@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +//======================================================================== +// +// Based on code from pdffonts.cc +// +// Copyright 2001-2007 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef FONT_INFO_H +#define FONT_INFO_H + +#include "Object.h" +#include "goo/gtypes.h" +#include "goo/GooList.h" + +class GfxFont; +class PDFDoc; + +class FontInfo { +public: + enum Type { + unknown, + Type1, + Type1C, + Type1COT, + Type3, + TrueType, + TrueTypeOT, + CIDType0, + CIDType0C, + CIDType0COT, + CIDTrueType, + CIDTrueTypeOT + }; + + // Constructor. + FontInfo(GfxFont *fontA, PDFDoc *doc); + // Copy constructor + FontInfo(FontInfo& f); + // Destructor. + ~FontInfo(); + + GooString *getName() { return name; }; + GooString *getFile() { return file; }; + Type getType() { return type; }; + GBool getEmbedded() { return emb; }; + GBool getSubset() { return subset; }; + GBool getToUnicode() { return hasToUnicode; }; + Ref getRef() { return fontRef; }; + Ref getEmbRef() { return embRef; }; + +private: + GooString *name; + GooString *file; + Type type; + GBool emb; + GBool subset; + GBool hasToUnicode; + Ref fontRef; + Ref embRef; +}; + +class FontInfoScanner { +public: + + // Constructor. + FontInfoScanner(PDFDoc *doc, int firstPage = 0); + // Destructor. + ~FontInfoScanner(); + + GooList *scan(int nPages); + +private: + + PDFDoc *doc; + int currentPage; + std::set<int> fonts; + std::set<int> visitedObjects; + + void scanFonts(Dict *resDict, GooList *fontsList); +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Form.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Form.cc new file mode 100644 index 00000000000..1f8b064b807 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Form.cc @@ -0,0 +1,1463 @@ +//======================================================================== +// +// Form.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2006-2008 Julien Rebetez <julienr@svn.gnome.org> +// Copyright 2007-2011 Albert Astals Cid <aacid@kde.org> +// Copyright 2007-2008, 2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright 2007 Adrian Johnson <ajohnson@redneon.com> +// Copyright 2007 Iñigo Martínez <inigomartinez@gmail.com> +// Copyright 2008, 2011 Pino Toscano <pino@kde.org> +// Copyright 2008 Michael Vrable <mvrable@cs.ucsd.edu> +// Copyright 2009 Matthias Drochner <M.Drochner@fz-juelich.de> +// Copyright 2009 KDAB via Guillermo Amaral <gamaral@amaral.com.mx> +// Copyright 2010 Mark Riedesel <mark@klowner.com> +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <set> +#include <stddef.h> +#include <string.h> +#include "goo/gmem.h" +#include "goo/GooString.h" +#include "Error.h" +#include "Object.h" +#include "Array.h" +#include "Dict.h" +#include "Gfx.h" +#include "Form.h" +#include "XRef.h" +#include "PDFDocEncoding.h" +#include "Annot.h" +#include "Catalog.h" +#include "Link.h" + +//return a newly allocated char* containing an UTF16BE string of size length +char* pdfDocEncodingToUTF16 (GooString* orig, int* length) +{ + //double size, a unicode char takes 2 char, add 2 for the unicode marker + *length = 2+2*orig->getLength(); + char *result = new char[(*length)]; + char *cstring = orig->getCString(); + //unicode marker + result[0] = 0xfe; + result[1] = 0xff; + //convert to utf16 + for(int i=2,j=0; i<(*length); i+=2,j++) { + Unicode u = pdfDocEncoding[(unsigned int)((unsigned char)cstring[j])]&0xffff; + result[i] = (u >> 8) & 0xff; + result[i+1] = u & 0xff; + } + return result; +} + + + +FormWidget::FormWidget(XRef *xrefA, Object *aobj, unsigned num, Ref aref, FormField *fieldA) +{ + ref = aref; + ID = 0; + childNum = num; + xref = xrefA; + aobj->copy(&obj); + type = formUndef; + field = fieldA; + widget = NULL; +} + +FormWidget::~FormWidget() +{ + if (widget) + widget->decRefCnt(); + obj.free (); +} + +#ifdef DEBUG_FORMS +void FormWidget::print(int indent) { + printf ("%*s+ (%d %d): [widget]\n", indent, "", ref.num, ref.gen); +} +#endif + +void FormWidget::createWidgetAnnotation(Catalog *catalog) { + if (widget) + return; + + Object obj1; + obj1.initRef(ref.num, ref.gen); + widget = new AnnotWidget(xref, obj.getDict(), catalog, &obj1, field); + obj1.free(); +} + +GBool FormWidget::inRect(double x, double y) const { + return widget ? widget->inRect(x, y) : gFalse; +} + +void FormWidget::getRect(double *x1, double *y1, double *x2, double *y2) const { + if (widget) + widget->getRect(x1, y1, x2, y2); +} + +double FormWidget::getFontSize() const { + return widget ? widget->getFontSize() : 0.; +} + +bool FormWidget::isReadOnly() const +{ + return field->isReadOnly(); +} + +GBool FormWidget::isModified() const { + return field->isModified(); +} + +int FormWidget::encodeID (unsigned pageNum, unsigned fieldNum) +{ + return (pageNum << 4*sizeof(unsigned)) + fieldNum; +} + +void FormWidget::decodeID (unsigned id, unsigned* pageNum, unsigned* fieldNum) +{ + *pageNum = id >> 4*sizeof(unsigned); + *fieldNum = (id << 4*sizeof(unsigned)) >> 4*sizeof(unsigned); +} + +GooString *FormWidget::getPartialName() const { + return field->getPartialName(); +} + +GooString *FormWidget::getAlternateUiName() const { + return field->getAlternateUiName(); +} + +GooString *FormWidget::getMappingName() const { + return field->getMappingName(); +} + +GooString *FormWidget::getFullyQualifiedName() { + return field->getFullyQualifiedName(); +} + +LinkAction *FormWidget::getActivationAction() { + return widget ? widget->getAction() : NULL; +} + +FormWidgetButton::FormWidgetButton (XRef *xrefA, Object *aobj, unsigned num, Ref ref, FormField *p) : + FormWidget(xrefA, aobj, num, ref, p) +{ + type = formButton; + parent = static_cast<FormFieldButton*>(field); + onStr = NULL; + siblingsID = NULL; + numSiblingsID = 0; + + Object obj1, obj2; + + // Find the name of the ON state in the AP dictionnary + // The reference say the Off state, if it existe, _must_ be stored in the AP dict under the name /Off + // The "on" state may be stored under any other name + if (obj.dictLookup("AP", &obj1)->isDict()) { + if (obj1.dictLookup("N", &obj2)->isDict()) { + for (int i = 0; i < obj2.dictGetLength(); i++) { + char *key = obj2.dictGetKey(i); + if (strcmp (key, "Off") != 0) { + onStr = new GooString (key); + break; + } + } + } + obj2.free(); + } + obj1.free(); +} + +char *FormWidgetButton::getOnStr() { + if (onStr) + return onStr->getCString(); + + // 12.7.4.2.3 Check Boxes + // Yes should be used as the name for the on state + return parent->getButtonType() == formButtonCheck ? (char *)"Yes" : NULL; +} + +FormWidgetButton::~FormWidgetButton () +{ + if (siblingsID) + gfree(siblingsID); + delete onStr; +} + +FormButtonType FormWidgetButton::getButtonType () const +{ + return parent->getButtonType (); +} + +void FormWidgetButton::setAppearanceState(char *state) { + if (!widget) + return; + widget->setAppearanceState(state); +} + +void FormWidgetButton::setState (GBool astate) +{ + //pushButtons don't have state + if (parent->getButtonType() == formButtonPush) + return; + + // Silently return if can't set ON state + if (astate && !onStr) + return; + + parent->setState(astate ? onStr->getCString() : (char *)"Off"); + // Parent will call setAppearanceState() +} + +GBool FormWidgetButton::getState () +{ + return onStr ? parent->getState(onStr->getCString()) : gFalse; +} + +void FormWidgetButton::setNumSiblingsID (int i) +{ + numSiblingsID = i; + siblingsID = (unsigned*)greallocn(siblingsID, numSiblingsID, sizeof(unsigned)); +} + + +FormWidgetText::FormWidgetText (XRef *xrefA, Object *aobj, unsigned num, Ref ref, FormField *p) : + FormWidget(xrefA, aobj, num, ref, p) +{ + type = formText; + parent = static_cast<FormFieldText*>(field); +} + +GooString* FormWidgetText::getContent () +{ + return parent->getContent(); +} + +GooString* FormWidgetText::getContentCopy () +{ + return parent->getContentCopy(); +} + +bool FormWidgetText::isMultiline () const +{ + return parent->isMultiline(); +} + +bool FormWidgetText::isPassword () const +{ + return parent->isPassword(); +} + +bool FormWidgetText::isFileSelect () const +{ + return parent->isFileSelect(); +} + +bool FormWidgetText::noSpellCheck () const +{ + return parent->noSpellCheck(); +} + +bool FormWidgetText::noScroll () const +{ + return parent->noScroll(); +} + +bool FormWidgetText::isComb () const +{ + return parent->isComb(); +} + +bool FormWidgetText::isRichText () const +{ + return parent->isRichText(); +} + +int FormWidgetText::getMaxLen () const +{ + return parent->getMaxLen (); +} + +void FormWidgetText::setContent(GooString* new_content) +{ + if (isReadOnly()) { + error(-1, "FormWidgetText::setContentCopy called on a read only field\n"); + return; + } + + parent->setContentCopy(new_content); +} + +FormWidgetChoice::FormWidgetChoice(XRef *xrefA, Object *aobj, unsigned num, Ref ref, FormField *p) : + FormWidget(xrefA, aobj, num, ref, p) +{ + type = formChoice; + parent = static_cast<FormFieldChoice*>(field); +} + +FormWidgetChoice::~FormWidgetChoice() +{ +} + +bool FormWidgetChoice::_checkRange (int i) +{ + if (i < 0 || i >= parent->getNumChoices()) { + error(-1, "FormWidgetChoice::_checkRange i out of range : %i", i); + return false; + } + return true; +} + +void FormWidgetChoice::select (int i) +{ + if (isReadOnly()) { + error(-1, "FormWidgetChoice::select called on a read only field\n"); + return; + } + if (!_checkRange(i)) return; + parent->select(i); +} + +void FormWidgetChoice::toggle (int i) +{ + if (isReadOnly()) { + error(-1, "FormWidgetChoice::toggle called on a read only field\n"); + return; + } + if (!_checkRange(i)) return; + parent->toggle(i); +} + +void FormWidgetChoice::deselectAll () +{ + if (isReadOnly()) { + error(-1, "FormWidgetChoice::deselectAll called on a read only field\n"); + return; + } + parent->deselectAll(); +} + +GooString* FormWidgetChoice::getEditChoice () +{ + if (!hasEdit()) { + error(-1, "FormFieldChoice::getEditChoice called on a non-editable choice\n"); + return NULL; + } + return parent->getEditChoice(); +} + +bool FormWidgetChoice::isSelected (int i) +{ + if (!_checkRange(i)) return false; + return parent->isSelected(i); +} + +void FormWidgetChoice::setEditChoice (GooString* new_content) +{ + if (isReadOnly()) { + error(-1, "FormWidgetText::setEditChoice called on a read only field\n"); + return; + } + if (!hasEdit()) { + error(-1, "FormFieldChoice::setEditChoice : trying to edit an non-editable choice\n"); + return; + } + + parent->setEditChoice(new_content); +} + +int FormWidgetChoice::getNumChoices() +{ + return parent->getNumChoices(); +} + +GooString* FormWidgetChoice::getChoice(int i) +{ + return parent->getChoice(i); +} + +bool FormWidgetChoice::isCombo () const +{ + return parent->isCombo(); +} + +bool FormWidgetChoice::hasEdit () const +{ + return parent->hasEdit(); +} + +bool FormWidgetChoice::isMultiSelect () const +{ + return parent->isMultiSelect(); +} + +bool FormWidgetChoice::noSpellCheck () const +{ + return parent->noSpellCheck(); +} + +bool FormWidgetChoice::commitOnSelChange () const +{ + return parent->commitOnSelChange(); +} + +bool FormWidgetChoice::isListBox () const +{ + return parent->isListBox(); +} + +FormWidgetSignature::FormWidgetSignature(XRef *xrefA, Object *aobj, unsigned num, Ref ref, FormField *p) : + FormWidget(xrefA, aobj, num, ref, p) +{ + type = formSignature; + parent = static_cast<FormFieldSignature*>(field); +} + + +//======================================================================== +// FormField +//======================================================================== + +FormField::FormField(XRef* xrefA, Object *aobj, const Ref& aref, FormField *parentA, std::set<int> *usedParents, FormFieldType ty) +{ + xref = xrefA; + aobj->copy(&obj); + Dict* dict = obj.getDict(); + ref.num = ref.gen = 0; + type = ty; + parent = parentA; + numChildren = 0; + children = NULL; + terminal = false; + widgets = NULL; + readOnly = false; + defaultAppearance = NULL; + fullyQualifiedName = NULL; + quadding = quaddingLeftJustified; + hasQuadding = gFalse; + modified = gFalse; + + ref = aref; + + Object obj1; + //childs + if (dict->lookup("Kids", &obj1)->isArray()) { + // Load children + for (int i = 0 ; i < obj1.arrayGetLength(); i++) { + Object childRef, childObj; + + if (!obj1.arrayGetNF(i, &childRef)->isRef()) { + error (-1, "Invalid form field renference"); + childRef.free(); + continue; + } + if (!obj1.arrayGet(i, &childObj)->isDict()) { + error (-1, "Form field child is not a dictionary"); + childObj.free(); + childRef.free(); + continue; + } + + const Ref ref = childRef.getRef(); + if (usedParents->find(ref.num) == usedParents->end()) { + Object obj2, obj3; + // Field child: it could be a form field or a widget or composed dict + if (childObj.dictLookupNF("Parent", &obj2)->isRef() || childObj.dictLookup("Parent", &obj3)->isDict()) { + // Child is a form field or composed dict + // We create the field, if it's composed + // it will create the widget as a child + std::set<int> usedParentsAux = *usedParents; + usedParentsAux.insert(ref.num); + obj2.free(); + obj3.free(); + + if (terminal) { + error(-1, "Field can't have both Widget AND Field as kids\n"); + continue; + } + + numChildren++; + children = (FormField**)greallocn(children, numChildren, sizeof(FormField*)); + children[numChildren - 1] = Form::createFieldFromDict(&childObj, xref, ref, this, &usedParentsAux); + } else if (childObj.dictLookup("Subtype", &obj2)->isName("Widget")) { + // Child is a widget annotation + if (!terminal && numChildren > 0) { + error(-1, "Field can't have both Widget AND Field as kids\n"); + obj2.free(); + obj3.free(); + continue; + } + _createWidget(&childObj, ref); + } + obj2.free(); + obj3.free(); + } + childObj.free(); + childRef.free(); + } + } else { + // No children, if it's a composed dict, create the child widget + obj1.free(); + if (dict->lookup("Subtype", &obj1)->isName("Widget")) + _createWidget(&obj, ref); + obj1.free(); + } + + //flags + if (Form::fieldLookup(dict, "Ff", &obj1)->isInt()) { + int flags = obj1.getInt(); + if (flags & 0x1) { // 1 -> ReadOnly + readOnly = true; + } + if (flags & 0x2) { // 2 -> Required + //TODO + } + if (flags & 0x4) { // 3 -> NoExport + //TODO + } + } + obj1.free(); + + // Variable Text + if (Form::fieldLookup(dict, "DA", &obj1)->isString()) + defaultAppearance = obj1.getString()->copy(); + obj1.free(); + + if (Form::fieldLookup(dict, "Q", &obj1)->isInt()) { + quadding = static_cast<VariableTextQuadding>(obj1.getInt()); + hasQuadding = gTrue; + } + obj1.free(); + + if (dict->lookup("T", &obj1)->isString()) { + partialName = obj1.getString()->copy(); + } else { + partialName = NULL; + } + obj1.free(); + + if (dict->lookup("TU", &obj1)->isString()) { + alternateUiName = obj1.getString()->copy(); + } else { + alternateUiName = NULL; + } + obj1.free(); + + if(dict->lookup("TM", &obj1)->isString()) { + mappingName = obj1.getString()->copy(); + } else { + mappingName = NULL; + } + obj1.free(); +} + +FormField::~FormField() +{ + if (!terminal) { + if(children) { + for (int i=0; i<numChildren; i++) + delete children[i]; + gfree(children); + } + } else { + for (int i = 0; i < numChildren; ++i) + delete widgets[i]; + gfree (widgets); + } + obj.free(); + + delete defaultAppearance; + delete partialName; + delete alternateUiName; + delete mappingName; + delete fullyQualifiedName; +} + +#ifdef DEBUG_FORMS +void FormField::print(int indent) +{ + printf ("%*s- (%d %d): [container] terminal: %s children: %d\n", indent, "", ref.num, ref.gen, + terminal ? "Yes" : "No", numChildren); +} + +void FormField::printTree(int indent) +{ + print(indent); + if (terminal) { + for (int i = 0; i < numChildren; i++) + widgets[i]->print(indent + 4); + } else { + for (int i = 0; i < numChildren; i++) + children[i]->printTree(indent + 4); + } +} +#endif + +void FormField::fillChildrenSiblingsID() +{ + if (terminal) + return; + for (int i = 0; i < numChildren; i++) { + children[i]->fillChildrenSiblingsID(); + } +} + +void FormField::createWidgetAnnotations(Catalog *catalog) { + if (terminal) { + for (int i = 0; i < numChildren; i++) + widgets[i]->createWidgetAnnotation(catalog); + } else { + for (int i = 0; i < numChildren; i++) + children[i]->createWidgetAnnotations(catalog); + } +} + +GBool FormField::isModified() const { + return modified ? gTrue : parent ? parent->isModified() : gFalse; +} + +void FormField::_createWidget (Object *obj, Ref aref) +{ + terminal = true; + numChildren++; + widgets = (FormWidget**)greallocn(widgets, numChildren, sizeof(FormWidget*)); + //ID = index in "widgets" table + switch (type) { + case formButton: + widgets[numChildren-1] = new FormWidgetButton(xref, obj, numChildren-1, aref, this); + break; + case formText: + widgets[numChildren-1] = new FormWidgetText(xref, obj, numChildren-1, aref, this); + break; + case formChoice: + widgets[numChildren-1] = new FormWidgetChoice(xref, obj, numChildren-1, aref, this); + break; + case formSignature: + widgets[numChildren-1] = new FormWidgetSignature(xref, obj, numChildren-1, aref, this); + break; + default: + error(-1, "SubType on non-terminal field, invalid document?"); + numChildren--; + terminal = false; + } +} + +FormWidget* FormField::findWidgetByRef (Ref aref) +{ + if (terminal) { + for(int i=0; i<numChildren; i++) { + if (widgets[i]->getRef().num == aref.num + && widgets[i]->getRef().gen == aref.gen) + return widgets[i]; + } + } else { + for(int i=0; i<numChildren; i++) { + FormWidget* result = children[i]->findWidgetByRef(aref); + if(result) return result; + } + } + return NULL; +} + +GooString* FormField::getFullyQualifiedName() { + Object obj1, obj2; + Object parent; + GooString *parent_name; + GooString *full_name; + + if (fullyQualifiedName) + return fullyQualifiedName; + + full_name = new GooString(); + + obj.copy(&obj1); + while (obj1.dictLookup("Parent", &parent)->isDict()) { + if (parent.dictLookup("T", &obj2)->isString()) { + parent_name = obj2.getString(); + + if (parent_name->hasUnicodeMarker()) { + parent_name->del(0, 2); // Remove the unicode BOM + full_name->insert(0, "\0.", 2); // 2-byte unicode period + } else { + full_name->insert(0, '.'); // 1-byte ascii period + } + + full_name->insert(0, parent_name); + obj2.free(); + } + obj1.free(); + parent.copy(&obj1); + parent.free(); + } + obj1.free(); + parent.free(); + + if (partialName) { + full_name->append(partialName); + } else { + int len = full_name->getLength(); + // Remove the last period + if (len > 0) + full_name->del(len - 1, 1); + } + + fullyQualifiedName = full_name; + return fullyQualifiedName; +} + +//------------------------------------------------------------------------ +// FormFieldButton +//------------------------------------------------------------------------ +FormFieldButton::FormFieldButton(XRef *xrefA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents) + : FormField(xrefA, aobj, ref, parent, usedParents, formButton) +{ + Dict* dict = obj.getDict(); + active_child = -1; + noAllOff = false; + appearanceState.initNull(); + + Object obj1; + btype = formButtonCheck; + if (Form::fieldLookup(dict, "Ff", &obj1)->isInt()) { + int flags = obj1.getInt(); + + if (flags & 0x10000) { // 17 -> push button + btype = formButtonPush; + } else if (flags & 0x8000) { // 16 -> radio button + btype = formButtonRadio; + if (flags & 0x4000) { // 15 -> noToggleToOff + noAllOff = true; + } + } + if (flags & 0x1000000) { // 26 -> radiosInUnison + error(-1, "FormFieldButton:: radiosInUnison flag unimplemented, please report a bug with a testcase\n"); + } + } + + if (btype != formButtonPush) { + // Even though V is inheritable we are interested in the value of this + // field, if not present it's probably because it's a button in a set. + dict->lookup("V", &appearanceState); + } +} + +#ifdef DEBUG_FORMS +static char *_getButtonType(FormButtonType type) +{ + switch (type) { + case formButtonPush: + return "push"; + case formButtonCheck: + return "check"; + case formButtonRadio: + return "radio"; + default: + break; + } + return "unknown"; +} + +void FormFieldButton::print(int indent) +{ + printf ("%*s- (%d %d): [%s] terminal: %s children: %d\n", indent, "", ref.num, ref.gen, + _getButtonType(btype), terminal ? "Yes" : "No", numChildren); +} +#endif + +void FormFieldButton::fillChildrenSiblingsID() +{ + if (!terminal) { + for(int i=0; i<numChildren; i++) { + children[i]->fillChildrenSiblingsID(); + } + } else { + for(int i=0; i<numChildren; i++) { + FormWidgetButton *btn = static_cast<FormWidgetButton*>(widgets[i]); + btn->setNumSiblingsID(numChildren-1); + for(int j=0, counter=0; j<numChildren; j++) { + if (i == j) continue; + btn->setSiblingsID(counter, widgets[j]->getID()); + counter++; + } + } + } +} + +GBool FormFieldButton::setState(char *state) +{ + if (readOnly) { + error(-1, "FormFieldButton::setState called on a readOnly field\n"); + return gFalse; + } + + // A check button could behave as a radio button + // when it's in a set of more than 1 buttons + if (btype != formButtonRadio && btype != formButtonCheck) + return gFalse; + + if (terminal && parent && parent->getType() == formButton && appearanceState.isNull()) { + // It's button in a set, set state on parent + if (static_cast<FormFieldButton*>(parent)->setState(state)) { + modified = gTrue; + return gTrue; + } + return gFalse; + } + + GBool isOn = strcmp(state, "Off") != 0; + + if (!isOn && noAllOff) + return gFalse; // Don't allow to set all radio to off + + char *current = getAppearanceState(); + GBool currentFound = gFalse, newFound = gFalse; + + for (int i = 0; i < numChildren; i++) { + FormWidgetButton *widget; + + // If radio button is a terminal field we want the widget at i, but + // if it's not terminal, the child widget is a composed dict, so + // we want the ony child widget of the children at i + if (terminal) + widget = static_cast<FormWidgetButton*>(widgets[i]); + else + widget = static_cast<FormWidgetButton*>(children[i]->getWidget(0)); + + if (!widget->getOnStr()) + continue; + + char *onStr = widget->getOnStr(); + if (current && strcmp(current, onStr) == 0) { + widget->setAppearanceState("Off"); + if (!isOn) + break; + currentFound = gTrue; + } + + if (isOn && strcmp(state, onStr) == 0) { + widget->setAppearanceState(state); + newFound = gTrue; + } + + if (currentFound && newFound) + break; + } + + updateState(state); + modified = gTrue; + + return gTrue; +} + +GBool FormFieldButton::getState(char *state) { + if (appearanceState.isName(state)) + return gTrue; + + return (parent && parent->getType() == formButton) ? static_cast<FormFieldButton*>(parent)->getState(state) : gFalse; +} + +void FormFieldButton::updateState(char *state) { + Object obj1; + + appearanceState.free(); + appearanceState.initName(state); + + appearanceState.copy(&obj1); + obj.getDict()->set("V", &obj1); + xref->setModifiedObject(&obj, ref); +} + +FormFieldButton::~FormFieldButton() +{ + appearanceState.free(); +} + +//------------------------------------------------------------------------ +// FormFieldText +//------------------------------------------------------------------------ +FormFieldText::FormFieldText(XRef *xrefA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents) + : FormField(xrefA, aobj, ref, parent, usedParents, formText) +{ + Dict* dict = obj.getDict(); + Object obj1; + content = NULL; + multiline = password = fileSelect = doNotSpellCheck = doNotScroll = comb = richText = false; + maxLen = 0; + + if (Form::fieldLookup(dict, "Ff", &obj1)->isInt()) { + int flags = obj1.getInt(); + if (flags & 0x1000) // 13 -> Multiline + multiline = true; + if (flags & 0x2000) // 14 -> Password + password = true; + if (flags & 0x100000) // 21 -> FileSelect + fileSelect = true; + if (flags & 0x400000)// 23 -> DoNotSpellCheck + doNotSpellCheck = true; + if (flags & 0x800000) // 24 -> DoNotScroll + doNotScroll = true; + if (flags & 0x1000000) // 25 -> Comb + comb = true; + if (flags & 0x2000000)// 26 -> RichText + richText = true; + } + obj1.free(); + + if (Form::fieldLookup(dict, "MaxLen", &obj1)->isInt()) { + maxLen = obj1.getInt(); + } + obj1.free(); + + if (Form::fieldLookup(dict, "V", &obj1)->isString()) { + if (obj1.getString()->hasUnicodeMarker()) { + if (obj1.getString()->getLength() > 2) + content = obj1.getString()->copy(); + } else if (obj1.getString()->getLength() > 0) { + //non-unicode string -- assume pdfDocEncoding and try to convert to UTF16BE + int tmp_length; + char* tmp_str = pdfDocEncodingToUTF16(obj1.getString(), &tmp_length); + content = new GooString(tmp_str, tmp_length); + delete [] tmp_str; + } + } + obj1.free(); +} + +#ifdef DEBUG_FORMS +void FormFieldText::print(int indent) +{ + printf ("%*s- (%d %d): [text] terminal: %s children: %d\n", indent, "", ref.num, ref.gen, + terminal ? "Yes" : "No", numChildren); +} +#endif + +GooString* FormFieldText::getContentCopy () +{ + if (!content) return NULL; + return new GooString(content); +} + +void FormFieldText::setContentCopy (GooString* new_content) +{ + delete content; + content = NULL; + + if (new_content) { + content = new_content->copy(); + + //append the unicode marker <FE FF> if needed + if (!content->hasUnicodeMarker()) { + content->insert(0, 0xff); + content->insert(0, 0xfe); + } + } + + Object obj1; + obj1.initString(content ? content->copy() : new GooString("")); + obj.getDict()->set("V", &obj1); + xref->setModifiedObject(&obj, ref); + modified = gTrue; +} + +FormFieldText::~FormFieldText() +{ + delete content; +} + + +//------------------------------------------------------------------------ +// FormFieldChoice +//------------------------------------------------------------------------ +FormFieldChoice::FormFieldChoice(XRef *xrefA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents) + : FormField(xrefA, aobj, ref, parent, usedParents, formChoice) +{ + numChoices = 0; + choices = NULL; + editedChoice = NULL; + topIdx = 0; + + Dict* dict = obj.getDict(); + Object obj1; + + combo = edit = multiselect = doNotSpellCheck = doCommitOnSelChange = false; + + if (Form::fieldLookup(dict, "Ff", &obj1)->isInt()) { + int flags = obj1.getInt(); + if (flags & 0x20000) // 18 -> Combo + combo = true; + if (flags & 0x40000) // 19 -> Edit + edit = true; + if (flags & 0x200000) // 22 -> MultiSelect + multiselect = true; + if (flags & 0x400000) // 23 -> DoNotSpellCheck + doNotSpellCheck = true; + if (flags & 0x4000000) // 27 -> CommitOnSelChange + doCommitOnSelChange = true; + } + obj1.free(); + + if (dict->lookup("TI", &obj1)->isInt()) + topIdx = obj1.getInt(); + obj1.free(); + + if (dict->lookup("Opt", &obj1)->isArray()) { + Object obj2; + + numChoices = obj1.arrayGetLength(); + choices = new ChoiceOpt[numChoices]; + memset(choices, 0, sizeof(ChoiceOpt) * numChoices); + + for (int i = 0; i < numChoices; i++) { + if (obj1.arrayGet(i, &obj2)->isString()) { + choices[i].optionName = obj2.getString()->copy(); + } else if (obj2.isArray()) { // [Export_value, Displayed_text] + Object obj3; + + if (obj2.arrayGetLength() < 2) { + error(-1, "FormWidgetChoice:: invalid Opt entry -- array's length < 2\n"); + continue; + } + if (obj2.arrayGet(0, &obj3)->isString()) + choices[i].exportVal = obj3.getString()->copy(); + else + error(-1, "FormWidgetChoice:: invalid Opt entry -- exported value not a string\n"); + obj3.free(); + + if (obj2.arrayGet(1, &obj3)->isString()) + choices[i].optionName = obj3.getString()->copy(); + else + error(-1, "FormWidgetChoice:: invalid Opt entry -- choice name not a string\n"); + obj3.free(); + } else { + error(-1, "FormWidgetChoice:: invalid %d Opt entry\n", i); + } + obj2.free(); + } + } else { + //empty choice + } + obj1.free(); + + // find selected items and convert choice's human readable strings to UTF16 + if (Form::fieldLookup(dict, "V", &obj1)->isString()) { + for (int i = 0; i < numChoices; i++) { + if (!choices[i].optionName) + continue; + + if (choices[i].optionName->cmp(obj1.getString()) == 0) + choices[i].selected = true; + + if (!choices[i].optionName->hasUnicodeMarker()) { + int len; + char* buffer = pdfDocEncodingToUTF16(choices[i].optionName, &len); + choices[i].optionName->Set(buffer, len); + delete [] buffer; + } + } + } else if (obj1.isArray()) { + for (int i = 0; i < numChoices; i++) { + if (!choices[i].optionName) + continue; + + for (int j = 0; j < obj1.arrayGetLength(); j++) { + Object obj2; + + obj1.arrayGet(i, &obj2); + if (choices[i].optionName->cmp(obj2.getString()) == 0) { + choices[i].selected = true; + obj2.free(); + break; + } + obj2.free(); + } + + if (!choices[i].optionName->hasUnicodeMarker()) { + int len; + char* buffer = pdfDocEncodingToUTF16(choices[i].optionName, &len); + choices[i].optionName->Set(buffer, len); + delete [] buffer; + } + } + } + obj1.free(); +} + +FormFieldChoice::~FormFieldChoice() +{ + for (int i = 0; i < numChoices; i++) { + delete choices[i].exportVal; + delete choices[i].optionName; + } + delete [] choices; + delete editedChoice; +} + +#ifdef DEBUG_FORMS +void FormFieldChoice::print(int indent) +{ + printf ("%*s- (%d %d): [choice] terminal: %s children: %d\n", indent, "", ref.num, ref.gen, + terminal ? "Yes" : "No", numChildren); +} +#endif + +void FormFieldChoice::updateSelection() { + Object obj1; + + //this is an editable combo-box with user-entered text + if (edit && editedChoice) { + obj1.initString(editedChoice->copy()); + } else { + int numSelected = getNumSelected(); + if (numSelected == 0) { + obj1.initString(new GooString("")); + } else if (numSelected == 1) { + for (int i = 0; numChoices; i++) { + if (choices[i].optionName && choices[i].selected) { + obj1.initString(choices[i].optionName->copy()); + break; + } + } + } else { + obj1.initArray(xref); + for (int i = 0; i < numChoices; i++) { + if (choices[i].optionName && choices[i].selected) { + Object obj2; + obj2.initString(choices[i].optionName->copy()); + obj1.arrayAdd(&obj2); + } + } + } + } + + obj.getDict()->set("V", &obj1); + xref->setModifiedObject(&obj, ref); + modified = gTrue; +} + +void FormFieldChoice::unselectAll () +{ + for (int i = 0; i < numChoices; i++) { + choices[i].selected = false; + } +} + +void FormFieldChoice::deselectAll () { + unselectAll(); + updateSelection(); +} + +void FormFieldChoice::toggle (int i) +{ + choices[i].selected = !choices[i].selected; + updateSelection(); +} + +void FormFieldChoice::select (int i) +{ + if (!multiselect) + unselectAll(); + choices[i].selected = true; + updateSelection(); +} + +void FormFieldChoice::setEditChoice (GooString* new_content) +{ + delete editedChoice; + editedChoice = NULL; + + unselectAll(); + + if (new_content) { + editedChoice = new_content->copy(); + + //append the unicode marker <FE FF> if needed + if (!editedChoice->hasUnicodeMarker()) { + editedChoice->insert(0, 0xff); + editedChoice->insert(0, 0xfe); + } + } + updateSelection(); +} + +GooString* FormFieldChoice::getEditChoice () +{ + return editedChoice; +} + +int FormFieldChoice::getNumSelected () +{ + int cnt = 0; + for(int i=0; i<numChoices; i++) { + if (choices[i].selected) + cnt++; + } + return cnt; +} + +GooString *FormFieldChoice::getSelectedChoice() { + if (edit && editedChoice) + return editedChoice; + + for (int i = 0; i < numChoices; i++) { + if (choices[i].optionName && choices[i].selected) + return choices[i].optionName; + } + + return NULL; +} + +//------------------------------------------------------------------------ +// FormFieldSignature +//------------------------------------------------------------------------ +FormFieldSignature::FormFieldSignature(XRef *xrefA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents) + : FormField(xrefA, dict, ref, parent, usedParents, formSignature) +{ +} + +FormFieldSignature::~FormFieldSignature() +{ + +} + +#ifdef DEBUG_FORMS +void FormFieldSignature::print(int indent) +{ + printf ("%*s- (%d %d): [signature] terminal: %s children: %d\n", indent, "", ref.num, ref.gen, + terminal ? "Yes" : "No", numChildren); +} +#endif + +//------------------------------------------------------------------------ +// Form +//------------------------------------------------------------------------ + +Form::Form(XRef *xrefA, Object* acroFormA) +{ + Object obj1; + + xref = xrefA; + acroForm = acroFormA; + + size = 0; + numFields = 0; + rootFields = NULL; + quadding = quaddingLeftJustified; + defaultAppearance = NULL; + defaultResources = NULL; + + acroForm->dictLookup("NeedAppearances", &obj1); + needAppearances = (obj1.isBool() && obj1.getBool()); + obj1.free(); + + if (acroForm->dictLookup("DA", &obj1)->isString()) + defaultAppearance = obj1.getString()->copy(); + obj1.free(); + + if (acroForm->dictLookup("Q", &obj1)->isInt()) + quadding = static_cast<VariableTextQuadding>(obj1.getInt()); + obj1.free(); + + acroForm->dictLookup("DR", &resDict); + if (resDict.isDict()) { + // At a minimum, this dictionary shall contain a Font entry + if (resDict.dictLookup("Font", &obj1)->isDict()) + defaultResources = new GfxResources(xref, resDict.getDict(), NULL); + obj1.free(); + } + if (!defaultResources) { + resDict.free(); + resDict.initNull(); + } + + acroForm->dictLookup("Fields", &obj1); + if (obj1.isArray()) { + Array *array = obj1.getArray(); + Object obj2; + + for(int i=0; i<array->getLength(); i++) { + Object oref; + array->get(i, &obj2); + array->getNF(i, &oref); + if (!oref.isRef()) { + error(-1, "Direct object in rootFields"); + obj2.free(); + oref.free(); + continue; + } + + if (!obj2.isDict()) { + error(-1, "Reference in Fields array to an invalid or non existant object"); + obj2.free(); + oref.free(); + continue; + } + + if (numFields >= size) { + size += 16; + rootFields = (FormField**)greallocn(rootFields,size,sizeof(FormField*)); + } + + std::set<int> usedParents; + rootFields[numFields++] = createFieldFromDict (&obj2, xrefA, oref.getRef(), NULL, &usedParents); + + obj2.free(); + oref.free(); + } + } else { + error(-1, "Can't get Fields array\n"); + } + obj1.free (); + +#ifdef DEBUG_FORMS + for (int i = 0; i < numFields; i++) + rootFields[i]->printTree(); +#endif +} + +Form::~Form() { + int i; + for(i = 0; i< numFields; ++i) + delete rootFields[i]; + gfree (rootFields); + delete defaultAppearance; + delete defaultResources; + resDict.free(); +} + +// Look up an inheritable field dictionary entry. +static Object *fieldLookup(Dict *field, char *key, Object *obj, std::set<int> *usedParents) { + Dict *dict; + Object parent; + + dict = field; + if (!dict->lookup(key, obj)->isNull()) { + return obj; + } + obj->free(); + dict->lookupNF("Parent", &parent); + if (parent.isRef()) { + const Ref ref = parent.getRef(); + if (usedParents->find(ref.num) == usedParents->end()) { + usedParents->insert(ref.num); + + Object obj2; + parent.fetch(dict->getXRef(), &obj2); + if (obj2.isDict()) { + fieldLookup(obj2.getDict(), key, obj, usedParents); + } else { + obj->initNull(); + } + obj2.free(); + } + } else if (parent.isDict()) { + fieldLookup(parent.getDict(), key, obj, usedParents); + } else { + obj->initNull(); + } + parent.free(); + return obj; +} + +Object *Form::fieldLookup(Dict *field, char *key, Object *obj) { + std::set<int> usedParents; + return ::fieldLookup(field, key, obj, &usedParents); +} + +FormField *Form::createFieldFromDict (Object* obj, XRef *xrefA, const Ref& pref, FormField *parent, std::set<int> *usedParents) +{ + Object obj2; + FormField *field; + + if (Form::fieldLookup(obj->getDict (), "FT", &obj2)->isName("Btn")) { + field = new FormFieldButton(xrefA, obj, pref, parent, usedParents); + } else if (obj2.isName("Tx")) { + field = new FormFieldText(xrefA, obj, pref, parent, usedParents); + } else if (obj2.isName("Ch")) { + field = new FormFieldChoice(xrefA, obj, pref, parent, usedParents); + } else if (obj2.isName("Sig")) { + field = new FormFieldSignature(xrefA, obj, pref, parent, usedParents); + } else { //we don't have an FT entry => non-terminal field + field = new FormField(xrefA, obj, pref, parent, usedParents); + } + obj2.free(); + + return field; +} + +void Form::postWidgetsLoad (Catalog *catalog) +{ + // We create the widget annotations associated to + // every form widget here, because the AnnotWidget constructor + // needs the form object that gets from the catalog. When constructing + // a FormWidget the Catalog is still creating the form object + for (int i = 0; i < numFields; i++) { + rootFields[i]->fillChildrenSiblingsID(); + rootFields[i]->createWidgetAnnotations(catalog); + } +} + +FormWidget* Form::findWidgetByRef (Ref aref) +{ + for(int i=0; i<numFields; i++) { + FormWidget *result = rootFields[i]->findWidgetByRef(aref); + if(result) return result; + } + return NULL; +} + +//------------------------------------------------------------------------ +// FormPageWidgets +//------------------------------------------------------------------------ + +FormPageWidgets::FormPageWidgets (Annots *annots, unsigned int page, Form *form) +{ + numWidgets = 0; + widgets = NULL; + + if (annots && annots->getNumAnnots() > 0 && form) { + size = annots->getNumAnnots(); + widgets = (FormWidget**)greallocn(widgets, size, sizeof(FormWidget*)); + + /* For each entry in the page 'Annots' dict, try to find + a matching form field */ + for (int i = 0; i < size; ++i) { + Annot *annot = annots->getAnnot(i); + + if (annot->getType() != Annot::typeWidget) + continue; + + if (!annot->getHasRef()) { + /* Since all entry in a form field's kid dict needs to be + indirect references, if this annot isn't indirect, it isn't + related to a form field */ + continue; + } + + Ref r = annot->getRef(); + + /* Try to find a form field which either has this Annot in its Kids entry + or is merged with this Annot */ + FormWidget* tmp = form->findWidgetByRef(r); + if (tmp) { + // We've found a corresponding form field, link it + tmp->setID(FormWidget::encodeID(page, numWidgets)); + widgets[numWidgets++] = tmp; + } + } + } +} + +FormPageWidgets::~FormPageWidgets() +{ + gfree (widgets); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Form.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Form.h new file mode 100644 index 00000000000..0cfc95bd722 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Form.h @@ -0,0 +1,549 @@ +//======================================================================== +// +// Form.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2006 Julien Rebetez <julienr@svn.gnome.org> +// Copyright 2007, 2008, 2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright 2007-2010 Albert Astals Cid <aacid@kde.org> +// Copyright 2010 Mark Riedesel <mark@klowner.com> +// Copyright 2011 Pino Toscano <pino@kde.org> +// +//======================================================================== + +#ifndef FORM_H +#define FORM_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "Object.h" + +#include <set> + +class GooString; +class Array; +class Dict; +class Annot; +class AnnotWidget; +class Annots; +class Catalog; +class LinkAction; +class GfxResources; + +enum FormFieldType { + formButton, + formText, + formChoice, + formSignature, + formUndef +}; + +enum FormButtonType { + formButtonCheck, + formButtonPush, + formButtonRadio +}; + +enum VariableTextQuadding { + quaddingLeftJustified, + quaddingCentered, + quaddingRightJustified +}; + +class Form; +class FormField; +class FormFieldButton; +class FormFieldText; +class FormFieldSignature; +class FormFieldChoice; + +//------------------------------------------------------------------------ +// FormWidget +// A FormWidget represents the graphical part of a field and is "attached" +// to a page. +//------------------------------------------------------------------------ + +class FormWidget { +public: + virtual ~FormWidget(); + + // Check if point is inside the field bounding rect + GBool inRect(double x, double y) const; + + // Get the field bounding rect + void getRect(double *x1, double *y1, double *x2, double *y2) const; + + unsigned getID () { return ID; } + void setID (unsigned int i) { ID=i; } + + FormField *getField () { return field; } + FormFieldType getType() { return type; } + + Object* getObj() { return &obj; } + Ref getRef() { return ref; } + + void setChildNum (unsigned i) { childNum = i; } + unsigned getChildNum () { return childNum; } + + double getFontSize() const; + + GooString *getPartialName() const; + GooString *getAlternateUiName() const; + GooString *getMappingName() const; + GooString *getFullyQualifiedName(); + + GBool isModified () const; + + bool isReadOnly() const; + + LinkAction *getActivationAction(); + + // return the unique ID corresponding to pageNum/fieldNum + static int encodeID (unsigned pageNum, unsigned fieldNum); + // decode id and retrieve pageNum and fieldNum + static void decodeID (unsigned id, unsigned* pageNum, unsigned* fieldNum); + + void createWidgetAnnotation(Catalog *catalog); + AnnotWidget *getWidgetAnnotation() const { return widget; } + +#ifdef DEBUG_FORMS + void print(int indent = 0); +#endif + +protected: + FormWidget(XRef *xrefA, Object *aobj, unsigned num, Ref aref, FormField *fieldA); + + AnnotWidget *widget; + FormField* field; + FormFieldType type; + Object obj; + Ref ref; + XRef *xref; + + //index of this field in the parent's child list + unsigned childNum; + + /* + Field ID is an (unsigned) integer, calculated as follow : + the first sizeof/2 bits are the field number, relative to the page + the last sizeof/2 bits are the page number + [page number | field number] + (encoding) id = (pageNum << 4*sizeof(unsigned)) + fieldNum; + (decoding) pageNum = id >> 4*sizeof(unsigned); fieldNum = (id << 4*sizeof(unsigned)) >> 4*sizeof(unsigned); + */ + unsigned ID; +}; + +//------------------------------------------------------------------------ +// FormWidgetButton +//------------------------------------------------------------------------ + +class FormWidgetButton: public FormWidget { +public: + FormWidgetButton(XRef *xrefA, Object *dict, unsigned num, Ref ref, FormField *p); + ~FormWidgetButton (); + + FormButtonType getButtonType() const; + + void setState (GBool state); + GBool getState (); + + char* getOnStr(); + void setAppearanceState(char *state); + + void setNumSiblingsID (int i); + void setSiblingsID (int i, unsigned id) { siblingsID[i] = id; } + + //For radio buttons, return the IDs of the other radio buttons in the same group + unsigned* getSiblingsID () const { return siblingsID; } + int getNumSiblingsID () const { return numSiblingsID; } + +protected: + unsigned* siblingsID; // IDs of dependent buttons (each button of a radio field has all the others buttons + // of the same field in this array) + int numSiblingsID; + GooString *onStr; + FormFieldButton *parent; +}; + +//------------------------------------------------------------------------ +// FormWidgetText +//------------------------------------------------------------------------ + +class FormWidgetText: public FormWidget { +public: + FormWidgetText(XRef *xrefA, Object *dict, unsigned num, Ref ref, FormField *p); + //return the field's content (UTF16BE) + GooString* getContent() ; + //return a copy of the field's content (UTF16BE) + GooString* getContentCopy(); + + //except a UTF16BE string + void setContent(GooString* new_content); + + bool isMultiline () const; + bool isPassword () const; + bool isFileSelect () const; + bool noSpellCheck () const; + bool noScroll () const; + bool isComb () const; + bool isRichText () const; + int getMaxLen () const; +protected: + FormFieldText *parent; +}; + +//------------------------------------------------------------------------ +// FormWidgetChoice +//------------------------------------------------------------------------ + +class FormWidgetChoice: public FormWidget { +public: + FormWidgetChoice(XRef *xrefA, Object *dict, unsigned num, Ref ref, FormField *p); + ~FormWidgetChoice(); + + int getNumChoices(); + //return the display name of the i-th choice (UTF16BE) + GooString* getChoice(int i); + //select the i-th choice + void select (int i); + + //toggle selection of the i-th choice + void toggle (int i); + + //deselect everything + void deselectAll (); + + //except a UTF16BE string + //only work for editable combo box, set the user-entered text as the current choice + void setEditChoice(GooString* new_content); + + GooString* getEditChoice (); + + bool isSelected (int i); + + bool isCombo () const; + bool hasEdit () const; + bool isMultiSelect () const; + bool noSpellCheck () const; + bool commitOnSelChange () const; + bool isListBox () const; +protected: + bool _checkRange (int i); + FormFieldChoice *parent; +}; + +//------------------------------------------------------------------------ +// FormWidgetSignature +//------------------------------------------------------------------------ + +class FormWidgetSignature: public FormWidget { +public: + FormWidgetSignature(XRef *xrefA, Object *dict, unsigned num, Ref ref, FormField *p); +protected: + FormFieldSignature *parent; +}; + +//------------------------------------------------------------------------ +// FormField +// A FormField implements the logical side of a field and is "attached" to +// the Catalog. This is an internal class and client applications should +// only interact with FormWidgets. +//------------------------------------------------------------------------ + +class FormField { +public: + FormField(XRef* xrefa, Object *aobj, const Ref& aref, FormField *parent, std::set<int> *usedParents, FormFieldType t=formUndef); + + virtual ~FormField(); + + // Accessors. + FormFieldType getType() { return type; } + Object* getObj() { return &obj; } + Ref getRef() { return ref; } + + void setReadOnly (bool b) { readOnly = b; } + bool isReadOnly () const { return readOnly; } + + GBool isModified () const; + + GooString* getDefaultAppearance() const { return defaultAppearance; } + GBool hasTextQuadding() const { return hasQuadding; } + VariableTextQuadding getTextQuadding() const { return quadding; } + + GooString *getPartialName() const { return partialName; } + GooString *getAlternateUiName() const { return alternateUiName; } + GooString *getMappingName() const { return mappingName; } + GooString *getFullyQualifiedName(); + + FormWidget* findWidgetByRef (Ref aref); + FormWidget *getWidget(int i) { return terminal ? widgets[i] : NULL; } + + // only implemented in FormFieldButton + virtual void fillChildrenSiblingsID (); + + void createWidgetAnnotations(Catalog *catalog); + +#ifdef DEBUG_FORMS + void printTree(int indent = 0); + virtual void print(int indent = 0); +#endif + + + protected: + void _createWidget (Object *obj, Ref aref); + void createChildren(std::set<int> *usedParents); + + FormFieldType type; // field type + Ref ref; + bool terminal; + Object obj; + XRef *xref; + FormField **children; + FormField *parent; + int numChildren; + FormWidget **widgets; + bool readOnly; + GBool modified; + + GooString *partialName; // T field + GooString *alternateUiName; // TU field + GooString *mappingName; // TM field + GooString *fullyQualifiedName; + + // Variable Text + GooString *defaultAppearance; + GBool hasQuadding; + VariableTextQuadding quadding; + +private: + FormField() {} +}; + + +//------------------------------------------------------------------------ +// FormFieldButton +//------------------------------------------------------------------------ + +class FormFieldButton: public FormField { +public: + FormFieldButton(XRef *xrefA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents); + + FormButtonType getButtonType () { return btype; } + + bool noToggleToOff () const { return noAllOff; } + + // returns gTrue if the state modification is accepted + GBool setState (char *state); + GBool getState(char *state); + + char *getAppearanceState() { return appearanceState.isName() ? appearanceState.getName() : NULL; } + + void fillChildrenSiblingsID (); + +#ifdef DEBUG_FORMS + void print(int indent = 0); +#endif + + virtual ~FormFieldButton(); +protected: + void updateState(char *state); + + FormButtonType btype; + int size; + int active_child; //only used for combo box + bool noAllOff; + Object appearanceState; // V +}; + +//------------------------------------------------------------------------ +// FormFieldText +//------------------------------------------------------------------------ + +class FormFieldText: public FormField { +public: + FormFieldText(XRef *xrefA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents); + + GooString* getContent () { return content; } + GooString* getContentCopy (); + void setContentCopy (GooString* new_content); + virtual ~FormFieldText(); + + bool isMultiline () const { return multiline; } + bool isPassword () const { return password; } + bool isFileSelect () const { return fileSelect; } + bool noSpellCheck () const { return doNotSpellCheck; } + bool noScroll () const { return doNotScroll; } + bool isComb () const { return comb; } + bool isRichText () const { return richText; } + + int getMaxLen () const { return maxLen; } + +#ifdef DEBUG_FORMS + void print(int indent = 0); +#endif +protected: + GooString* content; + bool multiline; + bool password; + bool fileSelect; + bool doNotSpellCheck; + bool doNotScroll; + bool comb; + bool richText; + int maxLen; +}; + +//------------------------------------------------------------------------ +// FormFieldChoice +//------------------------------------------------------------------------ + +class FormFieldChoice: public FormField { +public: + FormFieldChoice(XRef *xrefA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents); + + virtual ~FormFieldChoice(); + + int getNumChoices() { return numChoices; } + GooString* getChoice(int i) { return choices ? choices[i].optionName : NULL; } + GooString* getExportVal (int i) { return choices ? choices[i].exportVal : NULL; } + // For multi-select choices it returns the first one + GooString* getSelectedChoice(); + + //select the i-th choice + void select (int i); + + //toggle selection of the i-th choice + void toggle (int i); + + //deselect everything + void deselectAll (); + + //only work for editable combo box, set the user-entered text as the current choice + void setEditChoice(GooString* new_content); + + GooString* getEditChoice (); + + bool isSelected (int i) { return choices[i].selected; } + + int getNumSelected (); + + bool isCombo () const { return combo; } + bool hasEdit () const { return edit; } + bool isMultiSelect () const { return multiselect; } + bool noSpellCheck () const { return doNotSpellCheck; } + bool commitOnSelChange () const { return doCommitOnSelChange; } + bool isListBox () const { return !combo; } + + int getTopIndex() const { return topIdx; } + +#ifdef DEBUG_FORMS + void print(int indent = 0); +#endif + +protected: + void unselectAll(); + void updateSelection(); + + bool combo; + bool edit; + bool multiselect; + bool doNotSpellCheck; + bool doCommitOnSelChange; + + struct ChoiceOpt { + GooString* exportVal; //the export value ("internal" name) + GooString* optionName; //displayed name + bool selected; //if this choice is selected + }; + + int numChoices; + ChoiceOpt* choices; + GooString* editedChoice; + int topIdx; // TI +}; + +//------------------------------------------------------------------------ +// FormFieldSignature +//------------------------------------------------------------------------ + +class FormFieldSignature: public FormField { +public: + FormFieldSignature(XRef *xrefA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents); + + virtual ~FormFieldSignature(); + +#ifdef DEBUG_FORMS + void print(int indent = 0); +#endif +}; + +//------------------------------------------------------------------------ +// Form +// This class handle the document-wide part of Form (things in the acroForm +// Catalog entry). +//------------------------------------------------------------------------ + +class Form { +public: + Form(XRef *xrefA, Object* acroForm); + + ~Form(); + + // Look up an inheritable field dictionary entry. + static Object *fieldLookup(Dict *field, char *key, Object *obj); + + /* Creates a new Field of the type specified in obj's dict. + used in Form::Form and FormField::FormField */ + static FormField *createFieldFromDict (Object* obj, XRef *xref, const Ref& aref, FormField *parent, std::set<int> *usedParents); + + Object *getObj () const { return acroForm; } + GBool getNeedAppearances () const { return needAppearances; } + int getNumFields() const { return numFields; } + FormField* getRootField(int i) const { return rootFields[i]; } + GooString* getDefaultAppearance() const { return defaultAppearance; } + VariableTextQuadding getTextQuadding() const { return quadding; } + GfxResources* getDefaultResources() const { return defaultResources; } + Object* getDefaultResourcesObj() { return &resDict; } + + FormWidget* findWidgetByRef (Ref aref); + + void postWidgetsLoad(Catalog *catalog); +private: + FormField** rootFields; + int numFields; + int size; + XRef* xref; + Object *acroForm; + GBool needAppearances; + GfxResources *defaultResources; + Object resDict; + + // Variable Text + GooString *defaultAppearance; + VariableTextQuadding quadding; +}; + +//------------------------------------------------------------------------ +// FormPageWidgets +//------------------------------------------------------------------------ + +class FormPageWidgets { +public: + FormPageWidgets (Annots* annots, unsigned int page, Form *form); + ~FormPageWidgets(); + + int getNumWidgets() const { return numWidgets; } + FormWidget* getWidget(int i) const { return widgets[i]; } + +private: + FormWidget** widgets; + int numWidgets; + int size; +}; + +#endif + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Function.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Function.cc new file mode 100644 index 00000000000..b63ae8180a9 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Function.cc @@ -0,0 +1,1627 @@ +//======================================================================== +// +// Function.cc +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006, 2008-2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2006 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> +// Copyright (C) 2011 Andrea Canciani <ranma42@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <math.h> +#include "goo/gmem.h" +#include "goo/gstrtod.h" +#include "Object.h" +#include "Dict.h" +#include "Stream.h" +#include "Error.h" +#include "Function.h" + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +//------------------------------------------------------------------------ +// Function +//------------------------------------------------------------------------ + +Function::Function() { +} + +Function::~Function() { +} + +Function *Function::parse(Object *funcObj) { + std::set<int> usedParents; + return parse(funcObj, &usedParents); +} + +Function *Function::parse(Object *funcObj, std::set<int> *usedParents) { + Function *func; + Dict *dict; + int funcType; + Object obj1; + + if (funcObj->isStream()) { + dict = funcObj->streamGetDict(); + } else if (funcObj->isDict()) { + dict = funcObj->getDict(); + } else if (funcObj->isName("Identity")) { + return new IdentityFunction(); + } else { + error(-1, "Expected function dictionary or stream"); + return NULL; + } + + if (!dict->lookup("FunctionType", &obj1)->isInt()) { + error(-1, "Function type is missing or wrong type"); + obj1.free(); + return NULL; + } + funcType = obj1.getInt(); + obj1.free(); + + if (funcType == 0) { + func = new SampledFunction(funcObj, dict); + } else if (funcType == 2) { + func = new ExponentialFunction(funcObj, dict); + } else if (funcType == 3) { + func = new StitchingFunction(funcObj, dict, usedParents); + } else if (funcType == 4) { + func = new PostScriptFunction(funcObj, dict); + } else { + error(-1, "Unimplemented function type (%d)", funcType); + return NULL; + } + if (!func->isOk()) { + delete func; + return NULL; + } + + return func; +} + +GBool Function::init(Dict *dict) { + Object obj1, obj2; + int i; + + //----- Domain + if (!dict->lookup("Domain", &obj1)->isArray()) { + error(-1, "Function is missing domain"); + goto err2; + } + m = obj1.arrayGetLength() / 2; + if (m > funcMaxInputs) { + error(-1, "Functions with more than %d inputs are unsupported", + funcMaxInputs); + goto err2; + } + for (i = 0; i < m; ++i) { + obj1.arrayGet(2*i, &obj2); + if (!obj2.isNum()) { + error(-1, "Illegal value in function domain array"); + goto err1; + } + domain[i][0] = obj2.getNum(); + obj2.free(); + obj1.arrayGet(2*i+1, &obj2); + if (!obj2.isNum()) { + error(-1, "Illegal value in function domain array"); + goto err1; + } + domain[i][1] = obj2.getNum(); + obj2.free(); + } + obj1.free(); + + //----- Range + hasRange = gFalse; + n = 0; + if (dict->lookup("Range", &obj1)->isArray()) { + hasRange = gTrue; + n = obj1.arrayGetLength() / 2; + if (n > funcMaxOutputs) { + error(-1, "Functions with more than %d outputs are unsupported", + funcMaxOutputs); + goto err2; + } + for (i = 0; i < n; ++i) { + obj1.arrayGet(2*i, &obj2); + if (!obj2.isNum()) { + error(-1, "Illegal value in function range array"); + goto err1; + } + range[i][0] = obj2.getNum(); + obj2.free(); + obj1.arrayGet(2*i+1, &obj2); + if (!obj2.isNum()) { + error(-1, "Illegal value in function range array"); + goto err1; + } + range[i][1] = obj2.getNum(); + obj2.free(); + } + } + obj1.free(); + + return gTrue; + + err1: + obj2.free(); + err2: + obj1.free(); + return gFalse; +} + +//------------------------------------------------------------------------ +// IdentityFunction +//------------------------------------------------------------------------ + +IdentityFunction::IdentityFunction() { + int i; + + // fill these in with arbitrary values just in case they get used + // somewhere + m = funcMaxInputs; + n = funcMaxOutputs; + for (i = 0; i < funcMaxInputs; ++i) { + domain[i][0] = 0; + domain[i][1] = 1; + } + hasRange = gFalse; +} + +IdentityFunction::~IdentityFunction() { +} + +void IdentityFunction::transform(double *in, double *out) { + int i; + + for (i = 0; i < funcMaxOutputs; ++i) { + out[i] = in[i]; + } +} + +//------------------------------------------------------------------------ +// SampledFunction +//------------------------------------------------------------------------ + +SampledFunction::SampledFunction(Object *funcObj, Dict *dict) { + Stream *str; + int sampleBits; + double sampleMul; + Object obj1, obj2; + Guint buf, bitMask; + int bits; + Guint s; + int i; + + samples = NULL; + sBuf = NULL; + ok = gFalse; + + //----- initialize the generic stuff + if (!init(dict)) { + goto err1; + } + if (!hasRange) { + error(-1, "Type 0 function is missing range"); + goto err1; + } + if (m > sampledFuncMaxInputs) { + error(-1, "Sampled functions with more than %d inputs are unsupported", + sampledFuncMaxInputs); + goto err1; + } + + //----- buffer + sBuf = (double *)gmallocn(1 << m, sizeof(double)); + + //----- get the stream + if (!funcObj->isStream()) { + error(-1, "Type 0 function isn't a stream"); + goto err1; + } + str = funcObj->getStream(); + + //----- Size + if (!dict->lookup("Size", &obj1)->isArray() || + obj1.arrayGetLength() != m) { + error(-1, "Function has missing or invalid size array"); + goto err2; + } + for (i = 0; i < m; ++i) { + obj1.arrayGet(i, &obj2); + if (!obj2.isInt()) { + error(-1, "Illegal value in function size array"); + goto err3; + } + sampleSize[i] = obj2.getInt(); + obj2.free(); + } + obj1.free(); + idxMul[0] = n; + for (i = 1; i < m; ++i) { + idxMul[i] = idxMul[i-1] * sampleSize[i-1]; + } + + //----- BitsPerSample + if (!dict->lookup("BitsPerSample", &obj1)->isInt()) { + error(-1, "Function has missing or invalid BitsPerSample"); + goto err2; + } + sampleBits = obj1.getInt(); + sampleMul = 1.0 / (pow(2.0, (double)sampleBits) - 1); + obj1.free(); + + //----- Encode + if (dict->lookup("Encode", &obj1)->isArray() && + obj1.arrayGetLength() == 2*m) { + for (i = 0; i < m; ++i) { + obj1.arrayGet(2*i, &obj2); + if (!obj2.isNum()) { + error(-1, "Illegal value in function encode array"); + goto err3; + } + encode[i][0] = obj2.getNum(); + obj2.free(); + obj1.arrayGet(2*i+1, &obj2); + if (!obj2.isNum()) { + error(-1, "Illegal value in function encode array"); + goto err3; + } + encode[i][1] = obj2.getNum(); + obj2.free(); + } + } else { + for (i = 0; i < m; ++i) { + encode[i][0] = 0; + encode[i][1] = sampleSize[i] - 1; + } + } + obj1.free(); + for (i = 0; i < m; ++i) { + inputMul[i] = (encode[i][1] - encode[i][0]) / + (domain[i][1] - domain[i][0]); + } + + //----- Decode + if (dict->lookup("Decode", &obj1)->isArray() && + obj1.arrayGetLength() == 2*n) { + for (i = 0; i < n; ++i) { + obj1.arrayGet(2*i, &obj2); + if (!obj2.isNum()) { + error(-1, "Illegal value in function decode array"); + goto err3; + } + decode[i][0] = obj2.getNum(); + obj2.free(); + obj1.arrayGet(2*i+1, &obj2); + if (!obj2.isNum()) { + error(-1, "Illegal value in function decode array"); + goto err3; + } + decode[i][1] = obj2.getNum(); + obj2.free(); + } + } else { + for (i = 0; i < n; ++i) { + decode[i][0] = range[i][0]; + decode[i][1] = range[i][1]; + } + } + obj1.free(); + + //----- samples + nSamples = n; + for (i = 0; i < m; ++i) + nSamples *= sampleSize[i]; + samples = (double *)gmallocn(nSamples, sizeof(double)); + buf = 0; + bits = 0; + bitMask = (1 << sampleBits) - 1; + str->reset(); + for (i = 0; i < nSamples; ++i) { + if (sampleBits == 8) { + s = str->getChar(); + } else if (sampleBits == 16) { + s = str->getChar(); + s = (s << 8) + str->getChar(); + } else if (sampleBits == 32) { + s = str->getChar(); + s = (s << 8) + str->getChar(); + s = (s << 8) + str->getChar(); + s = (s << 8) + str->getChar(); + } else { + while (bits < sampleBits) { + buf = (buf << 8) | (str->getChar() & 0xff); + bits += 8; + } + s = (buf >> (bits - sampleBits)) & bitMask; + bits -= sampleBits; + } + samples[i] = (double)s * sampleMul; + } + str->close(); + + ok = gTrue; + return; + + err3: + obj2.free(); + err2: + obj1.free(); + err1: + return; +} + +SampledFunction::~SampledFunction() { + if (samples) { + gfree(samples); + } + if (sBuf) { + gfree(sBuf); + } +} + +SampledFunction::SampledFunction(SampledFunction *func) { + memcpy(this, func, sizeof(SampledFunction)); + samples = (double *)gmallocn(nSamples, sizeof(double)); + memcpy(samples, func->samples, nSamples * sizeof(double)); + sBuf = (double *)gmallocn(1 << m, sizeof(double)); +} + +void SampledFunction::transform(double *in, double *out) { + double x; + int e[funcMaxInputs][2]; + double efrac0[funcMaxInputs]; + double efrac1[funcMaxInputs]; + int i, j, k, idx, t; + + // map input values into sample array + for (i = 0; i < m; ++i) { + x = (in[i] - domain[i][0]) * inputMul[i] + encode[i][0]; + if (x < 0) { + x = 0; + } else if (x > sampleSize[i] - 1) { + x = sampleSize[i] - 1; + } + e[i][0] = (int)x; + if ((e[i][1] = e[i][0] + 1) >= sampleSize[i]) { + // this happens if in[i] = domain[i][1] + e[i][1] = e[i][0]; + } + efrac1[i] = x - e[i][0]; + efrac0[i] = 1 - efrac1[i]; + } + + // for each output, do m-linear interpolation + for (i = 0; i < n; ++i) { + + // pull 2^m values out of the sample array + for (j = 0; j < (1<<m); ++j) { + idx = i; + for (k = 0, t = j; k < m; ++k, t >>= 1) { + idx += idxMul[k] * (e[k][t & 1]); + } + if (likely(idx >= 0 && idx < nSamples)) { + sBuf[j] = samples[idx]; + } else { + sBuf[j] = 0; // TODO Investigate if this is what Adobe does + } + } + + // do m sets of interpolations + for (j = 0, t = (1<<m); j < m; ++j, t >>= 1) { + for (k = 0; k < t; k += 2) { + sBuf[k >> 1] = efrac0[j] * sBuf[k] + efrac1[j] * sBuf[k+1]; + } + } + + // map output value to range + out[i] = sBuf[0] * (decode[i][1] - decode[i][0]) + decode[i][0]; + if (out[i] < range[i][0]) { + out[i] = range[i][0]; + } else if (out[i] > range[i][1]) { + out[i] = range[i][1]; + } + } +} + +//------------------------------------------------------------------------ +// ExponentialFunction +//------------------------------------------------------------------------ + +ExponentialFunction::ExponentialFunction(Object *funcObj, Dict *dict) { + Object obj1, obj2; + int i; + + ok = gFalse; + + //----- initialize the generic stuff + if (!init(dict)) { + goto err1; + } + if (m != 1) { + error(-1, "Exponential function with more than one input"); + goto err1; + } + + //----- C0 + if (dict->lookup("C0", &obj1)->isArray()) { + if (hasRange && obj1.arrayGetLength() != n) { + error(-1, "Function's C0 array is wrong length"); + goto err2; + } + n = obj1.arrayGetLength(); + for (i = 0; i < n; ++i) { + obj1.arrayGet(i, &obj2); + if (!obj2.isNum()) { + error(-1, "Illegal value in function C0 array"); + goto err3; + } + c0[i] = obj2.getNum(); + obj2.free(); + } + } else { + if (hasRange && n != 1) { + error(-1, "Function's C0 array is wrong length"); + goto err2; + } + n = 1; + c0[0] = 0; + } + obj1.free(); + + //----- C1 + if (dict->lookup("C1", &obj1)->isArray()) { + if (obj1.arrayGetLength() != n) { + error(-1, "Function's C1 array is wrong length"); + goto err2; + } + for (i = 0; i < n; ++i) { + obj1.arrayGet(i, &obj2); + if (!obj2.isNum()) { + error(-1, "Illegal value in function C1 array"); + goto err3; + } + c1[i] = obj2.getNum(); + obj2.free(); + } + } else { + if (n != 1) { + error(-1, "Function's C1 array is wrong length"); + goto err2; + } + c1[0] = 1; + } + obj1.free(); + + //----- N (exponent) + if (!dict->lookup("N", &obj1)->isNum()) { + error(-1, "Function has missing or invalid N"); + goto err2; + } + e = obj1.getNum(); + obj1.free(); + + isLinear = fabs(e-1.) < 1e-10; + ok = gTrue; + return; + + err3: + obj2.free(); + err2: + obj1.free(); + err1: + return; +} + +ExponentialFunction::~ExponentialFunction() { +} + +ExponentialFunction::ExponentialFunction(ExponentialFunction *func) { + memcpy(this, func, sizeof(ExponentialFunction)); +} + +void ExponentialFunction::transform(double *in, double *out) { + double x; + int i; + + if (in[0] < domain[0][0]) { + x = domain[0][0]; + } else if (in[0] > domain[0][1]) { + x = domain[0][1]; + } else { + x = in[0]; + } + for (i = 0; i < n; ++i) { + out[i] = c0[i] + (isLinear ? x : pow(x, e)) * (c1[i] - c0[i]); + if (hasRange) { + if (out[i] < range[i][0]) { + out[i] = range[i][0]; + } else if (out[i] > range[i][1]) { + out[i] = range[i][1]; + } + } + } + return; +} + +//------------------------------------------------------------------------ +// StitchingFunction +//------------------------------------------------------------------------ + +StitchingFunction::StitchingFunction(Object *funcObj, Dict *dict, std::set<int> *usedParents) { + Object obj1, obj2; + int i; + + ok = gFalse; + funcs = NULL; + bounds = NULL; + encode = NULL; + scale = NULL; + + //----- initialize the generic stuff + if (!init(dict)) { + goto err1; + } + if (m != 1) { + error(-1, "Stitching function with more than one input"); + goto err1; + } + + //----- Functions + if (!dict->lookup("Functions", &obj1)->isArray()) { + error(-1, "Missing 'Functions' entry in stitching function"); + goto err1; + } + k = obj1.arrayGetLength(); + funcs = (Function **)gmallocn(k, sizeof(Function *)); + bounds = (double *)gmallocn(k + 1, sizeof(double)); + encode = (double *)gmallocn(2 * k, sizeof(double)); + scale = (double *)gmallocn(k, sizeof(double)); + for (i = 0; i < k; ++i) { + funcs[i] = NULL; + } + for (i = 0; i < k; ++i) { + std::set<int> usedParentsAux = *usedParents; + obj1.arrayGetNF(i, &obj2); + if (obj2.isRef()) { + const Ref ref = obj2.getRef(); + if (usedParentsAux.find(ref.num) == usedParentsAux.end()) { + usedParentsAux.insert(ref.num); + obj2.free(); + obj1.arrayGet(i, &obj2); + } else { + goto err2; + } + } + if (!(funcs[i] = Function::parse(&obj2, &usedParentsAux))) { + goto err2; + } + if (i > 0 && (funcs[i]->getInputSize() != 1 || + funcs[i]->getOutputSize() != funcs[0]->getOutputSize())) { + error(-1, "Incompatible subfunctions in stitching function"); + goto err2; + } + obj2.free(); + } + obj1.free(); + + //----- Bounds + if (!dict->lookup("Bounds", &obj1)->isArray() || + obj1.arrayGetLength() != k - 1) { + error(-1, "Missing or invalid 'Bounds' entry in stitching function"); + goto err1; + } + bounds[0] = domain[0][0]; + for (i = 1; i < k; ++i) { + if (!obj1.arrayGet(i - 1, &obj2)->isNum()) { + error(-1, "Invalid type in 'Bounds' array in stitching function"); + goto err2; + } + bounds[i] = obj2.getNum(); + obj2.free(); + } + bounds[k] = domain[0][1]; + obj1.free(); + + //----- Encode + if (!dict->lookup("Encode", &obj1)->isArray() || + obj1.arrayGetLength() != 2 * k) { + error(-1, "Missing or invalid 'Encode' entry in stitching function"); + goto err1; + } + for (i = 0; i < 2 * k; ++i) { + if (!obj1.arrayGet(i, &obj2)->isNum()) { + error(-1, "Invalid type in 'Encode' array in stitching function"); + goto err2; + } + encode[i] = obj2.getNum(); + obj2.free(); + } + obj1.free(); + + //----- pre-compute the scale factors + for (i = 0; i < k; ++i) { + if (bounds[i] == bounds[i+1]) { + // avoid a divide-by-zero -- in this situation, function i will + // never be used anyway + scale[i] = 0; + } else { + scale[i] = (encode[2*i+1] - encode[2*i]) / (bounds[i+1] - bounds[i]); + } + } + + n = funcs[0]->getOutputSize(); + ok = gTrue; + return; + + err2: + obj2.free(); + err1: + obj1.free(); +} + +StitchingFunction::StitchingFunction(StitchingFunction *func) { + int i; + + memcpy(this, func, sizeof(StitchingFunction)); + + k = func->k; + funcs = (Function **)gmallocn(k, sizeof(Function *)); + for (i = 0; i < k; ++i) { + funcs[i] = func->funcs[i]->copy(); + } + bounds = (double *)gmallocn(k + 1, sizeof(double)); + memcpy(bounds, func->bounds, (k + 1) * sizeof(double)); + encode = (double *)gmallocn(2 * k, sizeof(double)); + memcpy(encode, func->encode, 2 * k * sizeof(double)); + scale = (double *)gmallocn(k, sizeof(double)); + memcpy(scale, func->scale, k * sizeof(double)); + ok = gTrue; +} + +StitchingFunction::~StitchingFunction() { + int i; + + if (funcs) { + for (i = 0; i < k; ++i) { + if (funcs[i]) { + delete funcs[i]; + } + } + } + gfree(funcs); + gfree(bounds); + gfree(encode); + gfree(scale); +} + +void StitchingFunction::transform(double *in, double *out) { + double x; + int i; + + if (in[0] < domain[0][0]) { + x = domain[0][0]; + } else if (in[0] > domain[0][1]) { + x = domain[0][1]; + } else { + x = in[0]; + } + for (i = 0; i < k - 1; ++i) { + if (x < bounds[i+1]) { + break; + } + } + x = encode[2*i] + (x - bounds[i]) * scale[i]; + funcs[i]->transform(&x, out); +} + +//------------------------------------------------------------------------ +// PostScriptFunction +//------------------------------------------------------------------------ + +enum PSOp { + psOpAbs, + psOpAdd, + psOpAnd, + psOpAtan, + psOpBitshift, + psOpCeiling, + psOpCopy, + psOpCos, + psOpCvi, + psOpCvr, + psOpDiv, + psOpDup, + psOpEq, + psOpExch, + psOpExp, + psOpFalse, + psOpFloor, + psOpGe, + psOpGt, + psOpIdiv, + psOpIndex, + psOpLe, + psOpLn, + psOpLog, + psOpLt, + psOpMod, + psOpMul, + psOpNe, + psOpNeg, + psOpNot, + psOpOr, + psOpPop, + psOpRoll, + psOpRound, + psOpSin, + psOpSqrt, + psOpSub, + psOpTrue, + psOpTruncate, + psOpXor, + psOpIf, + psOpIfelse, + psOpReturn +}; + +// Note: 'if' and 'ifelse' are parsed separately. +// The rest are listed here in alphabetical order. +// The index in this table is equivalent to the entry in PSOp. +static const char *psOpNames[] = { + "abs", + "add", + "and", + "atan", + "bitshift", + "ceiling", + "copy", + "cos", + "cvi", + "cvr", + "div", + "dup", + "eq", + "exch", + "exp", + "false", + "floor", + "ge", + "gt", + "idiv", + "index", + "le", + "ln", + "log", + "lt", + "mod", + "mul", + "ne", + "neg", + "not", + "or", + "pop", + "roll", + "round", + "sin", + "sqrt", + "sub", + "true", + "truncate", + "xor" +}; + +#define nPSOps (sizeof(psOpNames) / sizeof(char *)) + +enum PSObjectType { + psBool, + psInt, + psReal, + psOperator, + psBlock +}; + +// In the code array, 'if'/'ifelse' operators take up three slots +// plus space for the code in the subclause(s). +// +// +---------------------------------+ +// | psOperator: psOpIf / psOpIfelse | +// +---------------------------------+ +// | psBlock: ptr=<A> | +// +---------------------------------+ +// | psBlock: ptr=<B> | +// +---------------------------------+ +// | if clause | +// | ... | +// | psOperator: psOpReturn | +// +---------------------------------+ +// <A> | else clause | +// | ... | +// | psOperator: psOpReturn | +// +---------------------------------+ +// <B> | ... | +// +// For 'if', pointer <A> is present in the code stream but unused. + +struct PSObject { + PSObjectType type; + union { + GBool booln; // boolean (stack only) + int intg; // integer (stack and code) + double real; // real (stack and code) + PSOp op; // operator (code only) + int blk; // if/ifelse block pointer (code only) + }; +}; + +#define psStackSize 100 + +class PSStack { +public: + + PSStack() {sp = psStackSize; } + void clear() { sp = psStackSize; } + void pushBool(GBool booln) + { + if (checkOverflow()) { + stack[--sp].type = psBool; + stack[sp].booln = booln; + } + } + void pushInt(int intg) + { + if (checkOverflow()) { + stack[--sp].type = psInt; + stack[sp].intg = intg; + } + } + void pushReal(double real) + { + if (checkOverflow()) { + stack[--sp].type = psReal; + stack[sp].real = real; + } + } + GBool popBool() + { + if (checkUnderflow() && checkType(psBool, psBool)) { + return stack[sp++].booln; + } + return gFalse; + } + int popInt() + { + if (checkUnderflow() && checkType(psInt, psInt)) { + return stack[sp++].intg; + } + return 0; + } + double popNum() + { + double ret; + + if (checkUnderflow() && checkType(psInt, psReal)) { + ret = (stack[sp].type == psInt) ? (double)stack[sp].intg : stack[sp].real; + ++sp; + return ret; + } + return 0; + } + GBool empty() { return sp == psStackSize; } + GBool topIsInt() { return sp < psStackSize && stack[sp].type == psInt; } + GBool topTwoAreInts() + { return sp < psStackSize - 1 && + stack[sp].type == psInt && + stack[sp+1].type == psInt; } + GBool topIsReal() { return sp < psStackSize && stack[sp].type == psReal; } + GBool topTwoAreNums() + { return sp < psStackSize - 1 && + (stack[sp].type == psInt || stack[sp].type == psReal) && + (stack[sp+1].type == psInt || stack[sp+1].type == psReal); } + void copy(int n); + void roll(int n, int j); + void index(int i) + { + if (!checkOverflow()) { + return; + } + --sp; + stack[sp] = stack[sp + 1 + i]; + } + void pop() + { + if (!checkUnderflow()) { + return; + } + ++sp; + } + +private: + + GBool checkOverflow(int n = 1) + { + if (sp - n < 0) { + error(-1, "Stack overflow in PostScript function"); + return gFalse; + } + return gTrue; + } + GBool checkUnderflow() + { + if (sp == psStackSize) { + error(-1, "Stack underflow in PostScript function"); + return gFalse; + } + return gTrue; + } + GBool checkType(PSObjectType t1, PSObjectType t2) + { + if (stack[sp].type != t1 && stack[sp].type != t2) { + error(-1, "Type mismatch in PostScript function"); + return gFalse; + } + return gTrue; + } + PSObject stack[psStackSize]; + int sp; +}; + + +void PSStack::copy(int n) { + int i; + + if (sp + n > psStackSize) { + error(-1, "Stack underflow in PostScript function"); + return; + } + if (!checkOverflow(n)) { + return; + } + for (i = sp + n - 1; i >= sp; --i) { + stack[i - n] = stack[i]; + } + sp -= n; +} + +void PSStack::roll(int n, int j) { + PSObject obj; + int i, k; + + if (unlikely(n == 0)) { + return; + } + if (j >= 0) { + j %= n; + } else { + j = -j % n; + if (j != 0) { + j = n - j; + } + } + if (n <= 0 || j == 0) { + return; + } + if (j <= n / 2) { + for (i = 0; i < j; ++i) { + obj = stack[sp]; + for (k = sp; k < sp + n - 1; ++k) { + stack[k] = stack[k+1]; + } + stack[sp + n - 1] = obj; + } + } else { + j = n - j; + for (i = 0; i < j; ++i) { + obj = stack[sp + n - 1]; + for (k = sp + n - 1; k > sp; --k) { + stack[k] = stack[k-1]; + } + stack[sp] = obj; + } + } +} + +PostScriptFunction::PostScriptFunction(Object *funcObj, Dict *dict) { + Stream *str; + int codePtr; + GooString *tok; + + code = NULL; + codeString = NULL; + codeSize = 0; + ok = gFalse; + + //----- initialize the generic stuff + if (!init(dict)) { + goto err1; + } + if (!hasRange) { + error(-1, "Type 4 function is missing range"); + goto err1; + } + + //----- get the stream + if (!funcObj->isStream()) { + error(-1, "Type 4 function isn't a stream"); + goto err1; + } + str = funcObj->getStream(); + + //----- parse the function + codeString = new GooString(); + str->reset(); + if (!(tok = getToken(str)) || tok->cmp("{")) { + error(-1, "Expected '{' at start of PostScript function"); + if (tok) { + delete tok; + } + goto err1; + } + delete tok; + codePtr = 0; + if (!parseCode(str, &codePtr)) { + goto err2; + } + str->close(); + + ok = gTrue; + + err2: + str->close(); + err1: + return; +} + +PostScriptFunction::PostScriptFunction(PostScriptFunction *func) { + memcpy(this, func, sizeof(PostScriptFunction)); + code = (PSObject *)gmallocn(codeSize, sizeof(PSObject)); + memcpy(code, func->code, codeSize * sizeof(PSObject)); + codeString = func->codeString->copy(); +} + +PostScriptFunction::~PostScriptFunction() { + gfree(code); + delete codeString; +} + +void PostScriptFunction::transform(double *in, double *out) { + PSStack stack; + int i; + + for (i = 0; i < m; ++i) { + //~ may need to check for integers here + stack.pushReal(in[i]); + } + exec(&stack, 0); + for (i = n - 1; i >= 0; --i) { + out[i] = stack.popNum(); + if (out[i] < range[i][0]) { + out[i] = range[i][0]; + } else if (out[i] > range[i][1]) { + out[i] = range[i][1]; + } + } + stack.clear(); + + // if (!stack.empty()) { + // error(-1, "Extra values on stack at end of PostScript function"); + // } +} + +GBool PostScriptFunction::parseCode(Stream *str, int *codePtr) { + GooString *tok; + char *p; + GBool isReal; + int opPtr, elsePtr; + int a, b, mid, cmp; + + while (1) { + if (!(tok = getToken(str))) { + error(-1, "Unexpected end of PostScript function stream"); + return gFalse; + } + p = tok->getCString(); + if (isdigit(*p) || *p == '.' || *p == '-') { + isReal = gFalse; + for (++p; *p; ++p) { + if (*p == '.') { + isReal = gTrue; + break; + } + } + resizeCode(*codePtr); + if (isReal) { + code[*codePtr].type = psReal; + code[*codePtr].real = gatof(tok->getCString()); + } else { + code[*codePtr].type = psInt; + code[*codePtr].intg = atoi(tok->getCString()); + } + ++*codePtr; + delete tok; + } else if (!tok->cmp("{")) { + delete tok; + opPtr = *codePtr; + *codePtr += 3; + resizeCode(opPtr + 2); + if (!parseCode(str, codePtr)) { + return gFalse; + } + if (!(tok = getToken(str))) { + error(-1, "Unexpected end of PostScript function stream"); + return gFalse; + } + if (!tok->cmp("{")) { + elsePtr = *codePtr; + if (!parseCode(str, codePtr)) { + return gFalse; + } + delete tok; + if (!(tok = getToken(str))) { + error(-1, "Unexpected end of PostScript function stream"); + return gFalse; + } + } else { + elsePtr = -1; + } + if (!tok->cmp("if")) { + if (elsePtr >= 0) { + error(-1, "Got 'if' operator with two blocks in PostScript function"); + return gFalse; + } + code[opPtr].type = psOperator; + code[opPtr].op = psOpIf; + code[opPtr+2].type = psBlock; + code[opPtr+2].blk = *codePtr; + } else if (!tok->cmp("ifelse")) { + if (elsePtr < 0) { + error(-1, "Got 'ifelse' operator with one blocks in PostScript function"); + return gFalse; + } + code[opPtr].type = psOperator; + code[opPtr].op = psOpIfelse; + code[opPtr+1].type = psBlock; + code[opPtr+1].blk = elsePtr; + code[opPtr+2].type = psBlock; + code[opPtr+2].blk = *codePtr; + } else { + error(-1, "Expected if/ifelse operator in PostScript function"); + delete tok; + return gFalse; + } + delete tok; + } else if (!tok->cmp("}")) { + delete tok; + resizeCode(*codePtr); + code[*codePtr].type = psOperator; + code[*codePtr].op = psOpReturn; + ++*codePtr; + break; + } else { + a = -1; + b = nPSOps; + // invariant: psOpNames[a] < tok < psOpNames[b] + while (b - a > 1) { + mid = (a + b) / 2; + cmp = tok->cmp(psOpNames[mid]); + if (cmp > 0) { + a = mid; + } else if (cmp < 0) { + b = mid; + } else { + a = b = mid; + } + } + if (cmp != 0) { + error(-1, "Unknown operator '%s' in PostScript function", + tok->getCString()); + delete tok; + return gFalse; + } + delete tok; + resizeCode(*codePtr); + code[*codePtr].type = psOperator; + code[*codePtr].op = (PSOp)a; + ++*codePtr; + } + } + return gTrue; +} + +GooString *PostScriptFunction::getToken(Stream *str) { + GooString *s; + int c; + GBool comment; + + s = new GooString(); + comment = gFalse; + while (1) { + if ((c = str->getChar()) == EOF) { + break; + } + codeString->append(c); + if (comment) { + if (c == '\x0a' || c == '\x0d') { + comment = gFalse; + } + } else if (c == '%') { + comment = gTrue; + } else if (!isspace(c)) { + break; + } + } + if (c == '{' || c == '}') { + s->append((char)c); + } else if (isdigit(c) || c == '.' || c == '-') { + while (1) { + s->append((char)c); + c = str->lookChar(); + if (c == EOF || !(isdigit(c) || c == '.' || c == '-')) { + break; + } + str->getChar(); + codeString->append(c); + } + } else { + while (1) { + s->append((char)c); + c = str->lookChar(); + if (c == EOF || !isalnum(c)) { + break; + } + str->getChar(); + codeString->append(c); + } + } + return s; +} + +void PostScriptFunction::resizeCode(int newSize) { + if (newSize >= codeSize) { + codeSize += 64; + code = (PSObject *)greallocn(code, codeSize, sizeof(PSObject)); + } +} + +void PostScriptFunction::exec(PSStack *stack, int codePtr) { + int i1, i2; + double r1, r2, result; + GBool b1, b2; + + while (1) { + switch (code[codePtr].type) { + case psInt: + stack->pushInt(code[codePtr++].intg); + break; + case psReal: + stack->pushReal(code[codePtr++].real); + break; + case psOperator: + switch (code[codePtr++].op) { + case psOpAbs: + if (stack->topIsInt()) { + stack->pushInt(abs(stack->popInt())); + } else { + stack->pushReal(fabs(stack->popNum())); + } + break; + case psOpAdd: + if (stack->topTwoAreInts()) { + i2 = stack->popInt(); + i1 = stack->popInt(); + stack->pushInt(i1 + i2); + } else { + r2 = stack->popNum(); + r1 = stack->popNum(); + stack->pushReal(r1 + r2); + } + break; + case psOpAnd: + if (stack->topTwoAreInts()) { + i2 = stack->popInt(); + i1 = stack->popInt(); + stack->pushInt(i1 & i2); + } else { + b2 = stack->popBool(); + b1 = stack->popBool(); + stack->pushBool(b1 && b2); + } + break; + case psOpAtan: + r2 = stack->popNum(); + r1 = stack->popNum(); + result = atan2(r1, r2) * 180.0 / M_PI; + if (result < 0) result += 360.0; + stack->pushReal(result); + break; + case psOpBitshift: + i2 = stack->popInt(); + i1 = stack->popInt(); + if (i2 > 0) { + stack->pushInt(i1 << i2); + } else if (i2 < 0) { + stack->pushInt((int)((Guint)i1 >> i2)); + } else { + stack->pushInt(i1); + } + break; + case psOpCeiling: + if (!stack->topIsInt()) { + stack->pushReal(ceil(stack->popNum())); + } + break; + case psOpCopy: + stack->copy(stack->popInt()); + break; + case psOpCos: + stack->pushReal(cos(stack->popNum() * M_PI / 180.0)); + break; + case psOpCvi: + if (!stack->topIsInt()) { + stack->pushInt((int)stack->popNum()); + } + break; + case psOpCvr: + if (!stack->topIsReal()) { + stack->pushReal(stack->popNum()); + } + break; + case psOpDiv: + r2 = stack->popNum(); + r1 = stack->popNum(); + stack->pushReal(r1 / r2); + break; + case psOpDup: + stack->copy(1); + break; + case psOpEq: + if (stack->topTwoAreInts()) { + i2 = stack->popInt(); + i1 = stack->popInt(); + stack->pushBool(i1 == i2); + } else if (stack->topTwoAreNums()) { + r2 = stack->popNum(); + r1 = stack->popNum(); + stack->pushBool(r1 == r2); + } else { + b2 = stack->popBool(); + b1 = stack->popBool(); + stack->pushBool(b1 == b2); + } + break; + case psOpExch: + stack->roll(2, 1); + break; + case psOpExp: + r2 = stack->popNum(); + r1 = stack->popNum(); + stack->pushReal(pow(r1, r2)); + break; + case psOpFalse: + stack->pushBool(gFalse); + break; + case psOpFloor: + if (!stack->topIsInt()) { + stack->pushReal(floor(stack->popNum())); + } + break; + case psOpGe: + if (stack->topTwoAreInts()) { + i2 = stack->popInt(); + i1 = stack->popInt(); + stack->pushBool(i1 >= i2); + } else { + r2 = stack->popNum(); + r1 = stack->popNum(); + stack->pushBool(r1 >= r2); + } + break; + case psOpGt: + if (stack->topTwoAreInts()) { + i2 = stack->popInt(); + i1 = stack->popInt(); + stack->pushBool(i1 > i2); + } else { + r2 = stack->popNum(); + r1 = stack->popNum(); + stack->pushBool(r1 > r2); + } + break; + case psOpIdiv: + i2 = stack->popInt(); + i1 = stack->popInt(); + stack->pushInt(i1 / i2); + break; + case psOpIndex: + stack->index(stack->popInt()); + break; + case psOpLe: + if (stack->topTwoAreInts()) { + i2 = stack->popInt(); + i1 = stack->popInt(); + stack->pushBool(i1 <= i2); + } else { + r2 = stack->popNum(); + r1 = stack->popNum(); + stack->pushBool(r1 <= r2); + } + break; + case psOpLn: + stack->pushReal(log(stack->popNum())); + break; + case psOpLog: + stack->pushReal(log10(stack->popNum())); + break; + case psOpLt: + if (stack->topTwoAreInts()) { + i2 = stack->popInt(); + i1 = stack->popInt(); + stack->pushBool(i1 < i2); + } else { + r2 = stack->popNum(); + r1 = stack->popNum(); + stack->pushBool(r1 < r2); + } + break; + case psOpMod: + i2 = stack->popInt(); + i1 = stack->popInt(); + stack->pushInt(i1 % i2); + break; + case psOpMul: + if (stack->topTwoAreInts()) { + i2 = stack->popInt(); + i1 = stack->popInt(); + //~ should check for out-of-range, and push a real instead + stack->pushInt(i1 * i2); + } else { + r2 = stack->popNum(); + r1 = stack->popNum(); + stack->pushReal(r1 * r2); + } + break; + case psOpNe: + if (stack->topTwoAreInts()) { + i2 = stack->popInt(); + i1 = stack->popInt(); + stack->pushBool(i1 != i2); + } else if (stack->topTwoAreNums()) { + r2 = stack->popNum(); + r1 = stack->popNum(); + stack->pushBool(r1 != r2); + } else { + b2 = stack->popBool(); + b1 = stack->popBool(); + stack->pushBool(b1 != b2); + } + break; + case psOpNeg: + if (stack->topIsInt()) { + stack->pushInt(-stack->popInt()); + } else { + stack->pushReal(-stack->popNum()); + } + break; + case psOpNot: + if (stack->topIsInt()) { + stack->pushInt(~stack->popInt()); + } else { + stack->pushBool(!stack->popBool()); + } + break; + case psOpOr: + if (stack->topTwoAreInts()) { + i2 = stack->popInt(); + i1 = stack->popInt(); + stack->pushInt(i1 | i2); + } else { + b2 = stack->popBool(); + b1 = stack->popBool(); + stack->pushBool(b1 || b2); + } + break; + case psOpPop: + stack->pop(); + break; + case psOpRoll: + i2 = stack->popInt(); + i1 = stack->popInt(); + stack->roll(i1, i2); + break; + case psOpRound: + if (!stack->topIsInt()) { + r1 = stack->popNum(); + stack->pushReal((r1 >= 0) ? floor(r1 + 0.5) : ceil(r1 - 0.5)); + } + break; + case psOpSin: + stack->pushReal(sin(stack->popNum() * M_PI / 180.0)); + break; + case psOpSqrt: + stack->pushReal(sqrt(stack->popNum())); + break; + case psOpSub: + if (stack->topTwoAreInts()) { + i2 = stack->popInt(); + i1 = stack->popInt(); + stack->pushInt(i1 - i2); + } else { + r2 = stack->popNum(); + r1 = stack->popNum(); + stack->pushReal(r1 - r2); + } + break; + case psOpTrue: + stack->pushBool(gTrue); + break; + case psOpTruncate: + if (!stack->topIsInt()) { + r1 = stack->popNum(); + stack->pushReal((r1 >= 0) ? floor(r1) : ceil(r1)); + } + break; + case psOpXor: + if (stack->topTwoAreInts()) { + i2 = stack->popInt(); + i1 = stack->popInt(); + stack->pushInt(i1 ^ i2); + } else { + b2 = stack->popBool(); + b1 = stack->popBool(); + stack->pushBool(b1 ^ b2); + } + break; + case psOpIf: + b1 = stack->popBool(); + if (b1) { + exec(stack, codePtr + 2); + } + codePtr = code[codePtr + 1].blk; + break; + case psOpIfelse: + b1 = stack->popBool(); + if (b1) { + exec(stack, codePtr + 2); + } else { + exec(stack, code[codePtr].blk); + } + codePtr = code[codePtr + 1].blk; + break; + case psOpReturn: + return; + } + break; + default: + error(-1, "Internal: bad object in PostScript function code"); + break; + } + } +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Function.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Function.h new file mode 100644 index 00000000000..d6ac893e494 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Function.h @@ -0,0 +1,247 @@ +//======================================================================== +// +// Function.h +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2009, 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> +// Copyright (C) 2011 Andrea Canciani <ranma42@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef FUNCTION_H +#define FUNCTION_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" +#include "Object.h" +#include <set> + +class Dict; +class Stream; +struct PSObject; +class PSStack; +class PopplerCache; + +//------------------------------------------------------------------------ +// Function +//------------------------------------------------------------------------ + +#define funcMaxInputs 32 +#define funcMaxOutputs 32 +#define sampledFuncMaxInputs 16 + +class Function { +public: + + Function(); + + virtual ~Function(); + + // Construct a function. Returns NULL if unsuccessful. + static Function *parse(Object *funcObj); + + // Initialize the entries common to all function types. + GBool init(Dict *dict); + + virtual Function *copy() = 0; + + // Return the function type: + // -1 : identity + // 0 : sampled + // 2 : exponential + // 3 : stitching + // 4 : PostScript + virtual int getType() = 0; + + // Return size of input and output tuples. + int getInputSize() { return m; } + int getOutputSize() { return n; } + + double getDomainMin(int i) { return domain[i][0]; } + double getDomainMax(int i) { return domain[i][1]; } + double getRangeMin(int i) { return range[i][0]; } + double getRangeMax(int i) { return range[i][1]; } + GBool getHasRange() { return hasRange; } + + // Transform an input tuple into an output tuple. + virtual void transform(double *in, double *out) = 0; + + virtual GBool isOk() = 0; + +protected: + static Function *parse(Object *funcObj, std::set<int> *usedParents); + + int m, n; // size of input and output tuples + double // min and max values for function domain + domain[funcMaxInputs][2]; + double // min and max values for function range + range[funcMaxOutputs][2]; + GBool hasRange; // set if range is defined +}; + +//------------------------------------------------------------------------ +// IdentityFunction +//------------------------------------------------------------------------ + +class IdentityFunction: public Function { +public: + + IdentityFunction(); + virtual ~IdentityFunction(); + virtual Function *copy() { return new IdentityFunction(); } + virtual int getType() { return -1; } + virtual void transform(double *in, double *out); + virtual GBool isOk() { return gTrue; } + +private: +}; + +//------------------------------------------------------------------------ +// SampledFunction +//------------------------------------------------------------------------ + +class SampledFunction: public Function { +public: + + SampledFunction(Object *funcObj, Dict *dict); + virtual ~SampledFunction(); + virtual Function *copy() { return new SampledFunction(this); } + virtual int getType() { return 0; } + virtual void transform(double *in, double *out); + virtual GBool isOk() { return ok; } + + int getSampleSize(int i) { return sampleSize[i]; } + double getEncodeMin(int i) { return encode[i][0]; } + double getEncodeMax(int i) { return encode[i][1]; } + double getDecodeMin(int i) { return decode[i][0]; } + double getDecodeMax(int i) { return decode[i][1]; } + double *getSamples() { return samples; } + +private: + + SampledFunction(SampledFunction *func); + + int // number of samples for each domain element + sampleSize[funcMaxInputs]; + double // min and max values for domain encoder + encode[funcMaxInputs][2]; + double // min and max values for range decoder + decode[funcMaxOutputs][2]; + double // input multipliers + inputMul[funcMaxInputs]; + int idxMul[funcMaxInputs]; // sample array index multipliers + double *samples; // the samples + int nSamples; // size of the samples array + double *sBuf; // buffer for the transform function + GBool ok; +}; + +//------------------------------------------------------------------------ +// ExponentialFunction +//------------------------------------------------------------------------ + +class ExponentialFunction: public Function { +public: + + ExponentialFunction(Object *funcObj, Dict *dict); + virtual ~ExponentialFunction(); + virtual Function *copy() { return new ExponentialFunction(this); } + virtual int getType() { return 2; } + virtual void transform(double *in, double *out); + virtual GBool isOk() { return ok; } + + double *getC0() { return c0; } + double *getC1() { return c1; } + double getE() { return e; } + +private: + + ExponentialFunction(ExponentialFunction *func); + + double c0[funcMaxOutputs]; + double c1[funcMaxOutputs]; + double e; + bool isLinear; + GBool ok; +}; + +//------------------------------------------------------------------------ +// StitchingFunction +//------------------------------------------------------------------------ + +class StitchingFunction: public Function { +public: + + StitchingFunction(Object *funcObj, Dict *dict, std::set<int> *usedParents); + virtual ~StitchingFunction(); + virtual Function *copy() { return new StitchingFunction(this); } + virtual int getType() { return 3; } + virtual void transform(double *in, double *out); + virtual GBool isOk() { return ok; } + + int getNumFuncs() { return k; } + Function *getFunc(int i) { return funcs[i]; } + double *getBounds() { return bounds; } + double *getEncode() { return encode; } + double *getScale() { return scale; } + +private: + + StitchingFunction(StitchingFunction *func); + + int k; + Function **funcs; + double *bounds; + double *encode; + double *scale; + GBool ok; +}; + +//------------------------------------------------------------------------ +// PostScriptFunction +//------------------------------------------------------------------------ + +class PostScriptFunction: public Function { +public: + + PostScriptFunction(Object *funcObj, Dict *dict); + virtual ~PostScriptFunction(); + virtual Function *copy() { return new PostScriptFunction(this); } + virtual int getType() { return 4; } + virtual void transform(double *in, double *out); + virtual GBool isOk() { return ok; } + + GooString *getCodeString() { return codeString; } + +private: + + PostScriptFunction(PostScriptFunction *func); + GBool parseCode(Stream *str, int *codePtr); + GooString *getToken(Stream *str); + void resizeCode(int newSize); + void exec(PSStack *stack, int codePtr); + + GooString *codeString; + PSObject *code; + int codeSize; + GBool ok; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Gfx.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Gfx.cc new file mode 100644 index 00000000000..1667460b2f0 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Gfx.cc @@ -0,0 +1,5094 @@ +//======================================================================== +// +// Gfx.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> +// Copyright (C) 2005-2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2006 Thorkild Stray <thorkild@ifi.uio.no> +// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2006-2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2006, 2007 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2007, 2008 Brad Hards <bradh@kde.org> +// Copyright (C) 2007, 2011 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2007, 2008 Iñigo Martínez <inigomartinez@gmail.com> +// Copyright (C) 2007 Koji Otani <sho@bbr.jp> +// Copyright (C) 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// Copyright (C) 2008 Pino Toscano <pino@kde.org> +// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> +// Copyright (C) 2008 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2009 M Joonas Pihlaja <jpihlaja@cc.helsinki.fi> +// Copyright (C) 2009-2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2009 William Bader <williambader@hotmail.com> +// Copyright (C) 2009, 2010 David Benjamin <davidben@mit.edu> +// Copyright (C) 2010 Nils Höglund <nils.hoglund@gmail.com> +// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> +// Copyright (C) 2011 Axel Strübing <axel.struebing@freenet.de> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include <stdio.h> +#include <stddef.h> +#include <string.h> +#include <math.h> +#include "goo/gmem.h" +#include "goo/GooTimer.h" +#include "goo/GooHash.h" +#include "GlobalParams.h" +#include "CharTypes.h" +#include "Object.h" +#include "Array.h" +#include "Dict.h" +#include "Stream.h" +#include "Lexer.h" +#include "Parser.h" +#include "GfxFont.h" +#include "GfxState.h" +#include "OutputDev.h" +#include "Page.h" +#include "Annot.h" +#include "Error.h" +#include "Gfx.h" +#include "ProfileData.h" +#include "Catalog.h" +#include "OptionalContent.h" + +// the MSVC math.h doesn't define this +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +//------------------------------------------------------------------------ +// constants +//------------------------------------------------------------------------ + +// Max recursive depth for a function shading fill. +#define functionMaxDepth 6 + +// Max delta allowed in any color component for a function shading fill. +#define functionColorDelta (dblToCol(1 / 256.0)) + +// Max number of splits along the t axis for an axial shading fill. +#define axialMaxSplits 256 + +// Max delta allowed in any color component for an axial shading fill. +#define axialColorDelta (dblToCol(1 / 256.0)) + +// Max number of splits along the t axis for a radial shading fill. +#define radialMaxSplits 256 + +// Max delta allowed in any color component for a radial shading fill. +#define radialColorDelta (dblToCol(1 / 256.0)) + +// Max recursive depth for a Gouraud triangle shading fill. +// +// Triangles will be split at most gouraudMaxDepth times (each time into 4 +// smaller ones). That makes pow(4,gouraudMaxDepth) many triangles for +// every triangle. +#define gouraudMaxDepth 6 + +// Max delta allowed in any color component for a Gouraud triangle +// shading fill. +#define gouraudColorDelta (dblToCol(3. / 256.0)) + +// Gouraud triangle: if the three color parameters differ by at more than this percend of +// the total color parameter range, the triangle will be refined +#define gouraudParameterizedColorDelta 5e-3 + +// Max recursive depth for a patch mesh shading fill. +#define patchMaxDepth 6 + +// Max delta allowed in any color component for a patch mesh shading +// fill. +#define patchColorDelta (dblToCol((3. / 256.0))) + +//------------------------------------------------------------------------ +// Operator table +//------------------------------------------------------------------------ + +#ifdef _MSC_VER // this works around a bug in the VC7 compiler +# pragma optimize("",off) +#endif + +Operator Gfx::opTab[] = { + {"\"", 3, {tchkNum, tchkNum, tchkString}, + &Gfx::opMoveSetShowText}, + {"'", 1, {tchkString}, + &Gfx::opMoveShowText}, + {"B", 0, {tchkNone}, + &Gfx::opFillStroke}, + {"B*", 0, {tchkNone}, + &Gfx::opEOFillStroke}, + {"BDC", 2, {tchkName, tchkProps}, + &Gfx::opBeginMarkedContent}, + {"BI", 0, {tchkNone}, + &Gfx::opBeginImage}, + {"BMC", 1, {tchkName}, + &Gfx::opBeginMarkedContent}, + {"BT", 0, {tchkNone}, + &Gfx::opBeginText}, + {"BX", 0, {tchkNone}, + &Gfx::opBeginIgnoreUndef}, + {"CS", 1, {tchkName}, + &Gfx::opSetStrokeColorSpace}, + {"DP", 2, {tchkName, tchkProps}, + &Gfx::opMarkPoint}, + {"Do", 1, {tchkName}, + &Gfx::opXObject}, + {"EI", 0, {tchkNone}, + &Gfx::opEndImage}, + {"EMC", 0, {tchkNone}, + &Gfx::opEndMarkedContent}, + {"ET", 0, {tchkNone}, + &Gfx::opEndText}, + {"EX", 0, {tchkNone}, + &Gfx::opEndIgnoreUndef}, + {"F", 0, {tchkNone}, + &Gfx::opFill}, + {"G", 1, {tchkNum}, + &Gfx::opSetStrokeGray}, + {"ID", 0, {tchkNone}, + &Gfx::opImageData}, + {"J", 1, {tchkInt}, + &Gfx::opSetLineCap}, + {"K", 4, {tchkNum, tchkNum, tchkNum, tchkNum}, + &Gfx::opSetStrokeCMYKColor}, + {"M", 1, {tchkNum}, + &Gfx::opSetMiterLimit}, + {"MP", 1, {tchkName}, + &Gfx::opMarkPoint}, + {"Q", 0, {tchkNone}, + &Gfx::opRestore}, + {"RG", 3, {tchkNum, tchkNum, tchkNum}, + &Gfx::opSetStrokeRGBColor}, + {"S", 0, {tchkNone}, + &Gfx::opStroke}, + {"SC", -4, {tchkNum, tchkNum, tchkNum, tchkNum}, + &Gfx::opSetStrokeColor}, + {"SCN", -33, {tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN}, + &Gfx::opSetStrokeColorN}, + {"T*", 0, {tchkNone}, + &Gfx::opTextNextLine}, + {"TD", 2, {tchkNum, tchkNum}, + &Gfx::opTextMoveSet}, + {"TJ", 1, {tchkArray}, + &Gfx::opShowSpaceText}, + {"TL", 1, {tchkNum}, + &Gfx::opSetTextLeading}, + {"Tc", 1, {tchkNum}, + &Gfx::opSetCharSpacing}, + {"Td", 2, {tchkNum, tchkNum}, + &Gfx::opTextMove}, + {"Tf", 2, {tchkName, tchkNum}, + &Gfx::opSetFont}, + {"Tj", 1, {tchkString}, + &Gfx::opShowText}, + {"Tm", 6, {tchkNum, tchkNum, tchkNum, tchkNum, + tchkNum, tchkNum}, + &Gfx::opSetTextMatrix}, + {"Tr", 1, {tchkInt}, + &Gfx::opSetTextRender}, + {"Ts", 1, {tchkNum}, + &Gfx::opSetTextRise}, + {"Tw", 1, {tchkNum}, + &Gfx::opSetWordSpacing}, + {"Tz", 1, {tchkNum}, + &Gfx::opSetHorizScaling}, + {"W", 0, {tchkNone}, + &Gfx::opClip}, + {"W*", 0, {tchkNone}, + &Gfx::opEOClip}, + {"b", 0, {tchkNone}, + &Gfx::opCloseFillStroke}, + {"b*", 0, {tchkNone}, + &Gfx::opCloseEOFillStroke}, + {"c", 6, {tchkNum, tchkNum, tchkNum, tchkNum, + tchkNum, tchkNum}, + &Gfx::opCurveTo}, + {"cm", 6, {tchkNum, tchkNum, tchkNum, tchkNum, + tchkNum, tchkNum}, + &Gfx::opConcat}, + {"cs", 1, {tchkName}, + &Gfx::opSetFillColorSpace}, + {"d", 2, {tchkArray, tchkNum}, + &Gfx::opSetDash}, + {"d0", 2, {tchkNum, tchkNum}, + &Gfx::opSetCharWidth}, + {"d1", 6, {tchkNum, tchkNum, tchkNum, tchkNum, + tchkNum, tchkNum}, + &Gfx::opSetCacheDevice}, + {"f", 0, {tchkNone}, + &Gfx::opFill}, + {"f*", 0, {tchkNone}, + &Gfx::opEOFill}, + {"g", 1, {tchkNum}, + &Gfx::opSetFillGray}, + {"gs", 1, {tchkName}, + &Gfx::opSetExtGState}, + {"h", 0, {tchkNone}, + &Gfx::opClosePath}, + {"i", 1, {tchkNum}, + &Gfx::opSetFlat}, + {"j", 1, {tchkInt}, + &Gfx::opSetLineJoin}, + {"k", 4, {tchkNum, tchkNum, tchkNum, tchkNum}, + &Gfx::opSetFillCMYKColor}, + {"l", 2, {tchkNum, tchkNum}, + &Gfx::opLineTo}, + {"m", 2, {tchkNum, tchkNum}, + &Gfx::opMoveTo}, + {"n", 0, {tchkNone}, + &Gfx::opEndPath}, + {"q", 0, {tchkNone}, + &Gfx::opSave}, + {"re", 4, {tchkNum, tchkNum, tchkNum, tchkNum}, + &Gfx::opRectangle}, + {"rg", 3, {tchkNum, tchkNum, tchkNum}, + &Gfx::opSetFillRGBColor}, + {"ri", 1, {tchkName}, + &Gfx::opSetRenderingIntent}, + {"s", 0, {tchkNone}, + &Gfx::opCloseStroke}, + {"sc", -4, {tchkNum, tchkNum, tchkNum, tchkNum}, + &Gfx::opSetFillColor}, + {"scn", -33, {tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN, tchkSCN, tchkSCN, tchkSCN, + tchkSCN}, + &Gfx::opSetFillColorN}, + {"sh", 1, {tchkName}, + &Gfx::opShFill}, + {"v", 4, {tchkNum, tchkNum, tchkNum, tchkNum}, + &Gfx::opCurveTo1}, + {"w", 1, {tchkNum}, + &Gfx::opSetLineWidth}, + {"y", 4, {tchkNum, tchkNum, tchkNum, tchkNum}, + &Gfx::opCurveTo2}, +}; + +#ifdef _MSC_VER // this works around a bug in the VC7 compiler +# pragma optimize("",on) +#endif + +#define numOps (sizeof(opTab) / sizeof(Operator)) + +static inline GBool isSameGfxColor(const GfxColor &colorA, const GfxColor &colorB, Guint nComps, double delta) { + for (Guint k = 0; k < nComps; ++k) { + if (abs(colorA.c[k] - colorB.c[k]) > delta) { + return false; + } + } + return true; +} + +//------------------------------------------------------------------------ +// GfxResources +//------------------------------------------------------------------------ + +GfxResources::GfxResources(XRef *xref, Dict *resDict, GfxResources *nextA) : + gStateCache(2, xref) { + Object obj1, obj2; + Ref r; + + if (resDict) { + + // build font dictionary + fonts = NULL; + resDict->lookupNF("Font", &obj1); + if (obj1.isRef()) { + obj1.fetch(xref, &obj2); + if (obj2.isDict()) { + r = obj1.getRef(); + fonts = new GfxFontDict(xref, &r, obj2.getDict()); + } + obj2.free(); + } else if (obj1.isDict()) { + fonts = new GfxFontDict(xref, NULL, obj1.getDict()); + } + obj1.free(); + + // get XObject dictionary + resDict->lookup("XObject", &xObjDict); + + // get color space dictionary + resDict->lookup("ColorSpace", &colorSpaceDict); + + // get pattern dictionary + resDict->lookup("Pattern", &patternDict); + + // get shading dictionary + resDict->lookup("Shading", &shadingDict); + + // get graphics state parameter dictionary + resDict->lookup("ExtGState", &gStateDict); + + // get properties dictionary + resDict->lookup("Properties", &propertiesDict); + + } else { + fonts = NULL; + xObjDict.initNull(); + colorSpaceDict.initNull(); + patternDict.initNull(); + shadingDict.initNull(); + gStateDict.initNull(); + propertiesDict.initNull(); + } + + next = nextA; +} + +GfxResources::~GfxResources() { + if (fonts) { + delete fonts; + } + xObjDict.free(); + colorSpaceDict.free(); + patternDict.free(); + shadingDict.free(); + gStateDict.free(); + propertiesDict.free(); +} + +GfxFont *GfxResources::lookupFont(char *name) { + GfxFont *font; + GfxResources *resPtr; + + for (resPtr = this; resPtr; resPtr = resPtr->next) { + if (resPtr->fonts) { + if ((font = resPtr->fonts->lookup(name))) + return font; + } + } + error(-1, "Unknown font tag '%s'", name); + return NULL; +} + +GBool GfxResources::lookupXObject(char *name, Object *obj) { + GfxResources *resPtr; + + for (resPtr = this; resPtr; resPtr = resPtr->next) { + if (resPtr->xObjDict.isDict()) { + if (!resPtr->xObjDict.dictLookup(name, obj)->isNull()) + return gTrue; + obj->free(); + } + } + error(-1, "XObject '%s' is unknown", name); + return gFalse; +} + +GBool GfxResources::lookupXObjectNF(char *name, Object *obj) { + GfxResources *resPtr; + + for (resPtr = this; resPtr; resPtr = resPtr->next) { + if (resPtr->xObjDict.isDict()) { + if (!resPtr->xObjDict.dictLookupNF(name, obj)->isNull()) + return gTrue; + obj->free(); + } + } + error(-1, "XObject '%s' is unknown", name); + return gFalse; +} + +GBool GfxResources::lookupMarkedContentNF(char *name, Object *obj) { + GfxResources *resPtr; + + for (resPtr = this; resPtr; resPtr = resPtr->next) { + if (resPtr->propertiesDict.isDict()) { + if (!resPtr->propertiesDict.dictLookupNF(name, obj)->isNull()) + return gTrue; + obj->free(); + } + } + error(-1, "Marked Content '%s' is unknown", name); + return gFalse; +} + +void GfxResources::lookupColorSpace(char *name, Object *obj) { + GfxResources *resPtr; + + for (resPtr = this; resPtr; resPtr = resPtr->next) { + if (resPtr->colorSpaceDict.isDict()) { + if (!resPtr->colorSpaceDict.dictLookup(name, obj)->isNull()) { + return; + } + obj->free(); + } + } + obj->initNull(); +} + +GfxPattern *GfxResources::lookupPattern(char *name, Gfx *gfx) { + GfxResources *resPtr; + GfxPattern *pattern; + Object obj; + + for (resPtr = this; resPtr; resPtr = resPtr->next) { + if (resPtr->patternDict.isDict()) { + if (!resPtr->patternDict.dictLookup(name, &obj)->isNull()) { + pattern = GfxPattern::parse(&obj, gfx); + obj.free(); + return pattern; + } + obj.free(); + } + } + error(-1, "Unknown pattern '%s'", name); + return NULL; +} + +GfxShading *GfxResources::lookupShading(char *name, Gfx *gfx) { + GfxResources *resPtr; + GfxShading *shading; + Object obj; + + for (resPtr = this; resPtr; resPtr = resPtr->next) { + if (resPtr->shadingDict.isDict()) { + if (!resPtr->shadingDict.dictLookup(name, &obj)->isNull()) { + shading = GfxShading::parse(&obj, gfx); + obj.free(); + return shading; + } + obj.free(); + } + } + error(-1, "Unknown shading '%s'", name); + return NULL; +} + +GBool GfxResources::lookupGState(char *name, Object *obj) { + if (!lookupGStateNF(name, obj)) + return gFalse; + + if (!obj->isRef()) + return gTrue; + + const Ref ref = obj->getRef(); + if (!gStateCache.lookup(ref, obj)->isNull()) + return gTrue; + obj->free(); + + gStateCache.put(ref)->copy(obj); + return gTrue; +} + +GBool GfxResources::lookupGStateNF(char *name, Object *obj) { + GfxResources *resPtr; + + for (resPtr = this; resPtr; resPtr = resPtr->next) { + if (resPtr->gStateDict.isDict()) { + if (!resPtr->gStateDict.dictLookupNF(name, obj)->isNull()) { + return gTrue; + } + obj->free(); + } + } + error(-1, "ExtGState '%s' is unknown", name); + return gFalse; +} + +//------------------------------------------------------------------------ +// Gfx +//------------------------------------------------------------------------ + +Gfx::Gfx(XRef *xrefA, OutputDev *outA, int pageNum, Dict *resDict, Catalog *catalogA, + double hDPI, double vDPI, PDFRectangle *box, + PDFRectangle *cropBox, int rotate, + GBool (*abortCheckCbkA)(void *data), + void *abortCheckCbkDataA) +#ifdef USE_CMS + : iccColorSpaceCache(5) +#endif +{ + int i; + + xref = xrefA; + catalog = catalogA; + subPage = gFalse; + printCommands = globalParams->getPrintCommands(); + profileCommands = globalParams->getProfileCommands(); + textHaveCSPattern = gFalse; + drawText = gFalse; + maskHaveCSPattern = gFalse; + mcStack = NULL; + parser = NULL; + + // start the resource stack + res = new GfxResources(xref, resDict, NULL); + + // initialize + out = outA; + state = new GfxState(hDPI, vDPI, box, rotate, out->upsideDown()); + stackHeight = 1; + pushStateGuard(); + fontChanged = gFalse; + clip = clipNone; + ignoreUndef = 0; + out->startPage(pageNum, state); + out->setDefaultCTM(state->getCTM()); + out->updateAll(state); + for (i = 0; i < 6; ++i) { + baseMatrix[i] = state->getCTM()[i]; + } + formDepth = 0; + abortCheckCbk = abortCheckCbkA; + abortCheckCbkData = abortCheckCbkDataA; + + // set crop box + if (cropBox) { + state->moveTo(cropBox->x1, cropBox->y1); + state->lineTo(cropBox->x2, cropBox->y1); + state->lineTo(cropBox->x2, cropBox->y2); + state->lineTo(cropBox->x1, cropBox->y2); + state->closePath(); + state->clip(); + out->clip(state); + state->clearPath(); + } +} + +Gfx::Gfx(XRef *xrefA, OutputDev *outA, Dict *resDict, Catalog *catalogA, + PDFRectangle *box, PDFRectangle *cropBox, + GBool (*abortCheckCbkA)(void *data), + void *abortCheckCbkDataA) + #ifdef USE_CMS + : iccColorSpaceCache(5) +#endif +{ + int i; + + xref = xrefA; + catalog = catalogA; + subPage = gTrue; + printCommands = globalParams->getPrintCommands(); + profileCommands = globalParams->getProfileCommands(); + textHaveCSPattern = gFalse; + drawText = gFalse; + maskHaveCSPattern = gFalse; + mcStack = NULL; + parser = NULL; + + // start the resource stack + res = new GfxResources(xref, resDict, NULL); + + // initialize + out = outA; + state = new GfxState(72, 72, box, 0, gFalse); + stackHeight = 1; + pushStateGuard(); + fontChanged = gFalse; + clip = clipNone; + ignoreUndef = 0; + for (i = 0; i < 6; ++i) { + baseMatrix[i] = state->getCTM()[i]; + } + formDepth = 0; + abortCheckCbk = abortCheckCbkA; + abortCheckCbkData = abortCheckCbkDataA; + + // set crop box + if (cropBox) { + state->moveTo(cropBox->x1, cropBox->y1); + state->lineTo(cropBox->x2, cropBox->y1); + state->lineTo(cropBox->x2, cropBox->y2); + state->lineTo(cropBox->x1, cropBox->y2); + state->closePath(); + state->clip(); + out->clip(state); + state->clearPath(); + } +} + +Gfx::~Gfx() { + while (stateGuards.size()) { + popStateGuard(); + } + // There shouldn't be more saves, but pop them if there were any + while (state->hasSaves()) { + error(-1, "Found state under last state guard. Popping."); + restoreState(); + } + if (!subPage) { + out->endPage(); + } + while (res) { + popResources(); + } + if (state) { + delete state; + } + while (mcStack) { + popMarkedContent(); + } +} + +void Gfx::display(Object *obj, GBool topLevel) { + Object obj2; + int i; + + if (obj->isArray()) { + for (i = 0; i < obj->arrayGetLength(); ++i) { + obj->arrayGet(i, &obj2); + if (!obj2.isStream()) { + error(-1, "Weird page contents"); + obj2.free(); + return; + } + obj2.free(); + } + } else if (!obj->isStream()) { + error(-1, "Weird page contents"); + return; + } + parser = new Parser(xref, new Lexer(xref, obj), gFalse); + go(topLevel); + delete parser; + parser = NULL; +} + +void Gfx::go(GBool topLevel) { + Object obj; + Object args[maxArgs]; + int numArgs, i; + int lastAbortCheck; + + // scan a sequence of objects + pushStateGuard(); + updateLevel = lastAbortCheck = 0; + numArgs = 0; + parser->getObj(&obj); + while (!obj.isEOF()) { + commandAborted = gFalse; + + // got a command - execute it + if (obj.isCmd()) { + if (printCommands) { + obj.print(stdout); + for (i = 0; i < numArgs; ++i) { + printf(" "); + args[i].print(stdout); + } + printf("\n"); + fflush(stdout); + } + GooTimer timer; + + // Run the operation + execOp(&obj, args, numArgs); + + // Update the profile information + if (profileCommands) { + GooHash *hash; + + hash = out->getProfileHash (); + if (hash) { + GooString *cmd_g; + ProfileData *data_p; + + cmd_g = new GooString (obj.getCmd()); + data_p = (ProfileData *)hash->lookup (cmd_g); + if (data_p == NULL) { + data_p = new ProfileData(); + hash->add (cmd_g, data_p); + } + + data_p->addElement(timer.getElapsed ()); + } + } + obj.free(); + for (i = 0; i < numArgs; ++i) + args[i].free(); + numArgs = 0; + + // periodically update display + if (++updateLevel >= 20000) { + out->dump(); + updateLevel = 0; + } + + // did the command throw an exception + if (commandAborted) { + // don't propogate; recursive drawing comes from Form XObjects which + // should probably be drawn in a separate context anyway for caching + commandAborted = gFalse; + break; + } + + // check for an abort + if (abortCheckCbk) { + if (updateLevel - lastAbortCheck > 10) { + if ((*abortCheckCbk)(abortCheckCbkData)) { + break; + } + lastAbortCheck = updateLevel; + } + } + + // got an argument - save it + } else if (numArgs < maxArgs) { + args[numArgs++] = obj; + + // too many arguments - something is wrong + } else { + error(getPos(), "Too many args in content stream"); + if (printCommands) { + printf("throwing away arg: "); + obj.print(stdout); + printf("\n"); + fflush(stdout); + } + obj.free(); + } + + // grab the next object + parser->getObj(&obj); + } + obj.free(); + + // args at end with no command + if (numArgs > 0) { + error(getPos(), "Leftover args in content stream"); + if (printCommands) { + printf("%d leftovers:", numArgs); + for (i = 0; i < numArgs; ++i) { + printf(" "); + args[i].print(stdout); + } + printf("\n"); + fflush(stdout); + } + for (i = 0; i < numArgs; ++i) + args[i].free(); + } + + popStateGuard(); + + // update display + if (topLevel && updateLevel > 0) { + out->dump(); + } +} + +void Gfx::execOp(Object *cmd, Object args[], int numArgs) { + Operator *op; + char *name; + Object *argPtr; + int i; + + // find operator + name = cmd->getCmd(); + if (!(op = findOp(name))) { + if (ignoreUndef == 0) + error(getPos(), "Unknown operator '%s'", name); + return; + } + + // type check args + argPtr = args; + if (op->numArgs >= 0) { + if (numArgs < op->numArgs) { + error(getPos(), "Too few (%d) args to '%s' operator", numArgs, name); + commandAborted = gTrue; + return; + } + if (numArgs > op->numArgs) { +#if 0 + error(getPos(), "Too many (%d) args to '%s' operator", numArgs, name); +#endif + argPtr += numArgs - op->numArgs; + numArgs = op->numArgs; + } + } else { + if (numArgs > -op->numArgs) { + error(getPos(), "Too many (%d) args to '%s' operator", + numArgs, name); + return; + } + } + for (i = 0; i < numArgs; ++i) { + if (!checkArg(&argPtr[i], op->tchk[i])) { + error(getPos(), "Arg #%d to '%s' operator is wrong type (%s)", + i, name, argPtr[i].getTypeName()); + return; + } + } + + // do it + (this->*op->func)(argPtr, numArgs); +} + +Operator *Gfx::findOp(char *name) { + int a, b, m, cmp; + + a = -1; + b = numOps; + // invariant: opTab[a] < name < opTab[b] + while (b - a > 1) { + m = (a + b) / 2; + cmp = strcmp(opTab[m].name, name); + if (cmp < 0) + a = m; + else if (cmp > 0) + b = m; + else + a = b = m; + } + if (cmp != 0) + return NULL; + return &opTab[a]; +} + +GBool Gfx::checkArg(Object *arg, TchkType type) { + switch (type) { + case tchkBool: return arg->isBool(); + case tchkInt: return arg->isInt(); + case tchkNum: return arg->isNum(); + case tchkString: return arg->isString(); + case tchkName: return arg->isName(); + case tchkArray: return arg->isArray(); + case tchkProps: return arg->isDict() || arg->isName(); + case tchkSCN: return arg->isNum() || arg->isName(); + case tchkNone: return gFalse; + } + return gFalse; +} + +int Gfx::getPos() { + return parser ? parser->getPos() : -1; +} + +//------------------------------------------------------------------------ +// graphics state operators +//------------------------------------------------------------------------ + +void Gfx::opSave(Object args[], int numArgs) { + saveState(); +} + +void Gfx::opRestore(Object args[], int numArgs) { + restoreState(); +} + +void Gfx::opConcat(Object args[], int numArgs) { + state->concatCTM(args[0].getNum(), args[1].getNum(), + args[2].getNum(), args[3].getNum(), + args[4].getNum(), args[5].getNum()); + out->updateCTM(state, args[0].getNum(), args[1].getNum(), + args[2].getNum(), args[3].getNum(), + args[4].getNum(), args[5].getNum()); + fontChanged = gTrue; +} + +void Gfx::opSetDash(Object args[], int numArgs) { + Array *a; + int length; + Object obj; + double *dash; + int i; + + a = args[0].getArray(); + length = a->getLength(); + if (length == 0) { + dash = NULL; + } else { + dash = (double *)gmallocn(length, sizeof(double)); + for (i = 0; i < length; ++i) { + dash[i] = a->get(i, &obj)->getNum(); + obj.free(); + } + } + state->setLineDash(dash, length, args[1].getNum()); + out->updateLineDash(state); +} + +void Gfx::opSetFlat(Object args[], int numArgs) { + state->setFlatness((int)args[0].getNum()); + out->updateFlatness(state); +} + +void Gfx::opSetLineJoin(Object args[], int numArgs) { + state->setLineJoin(args[0].getInt()); + out->updateLineJoin(state); +} + +void Gfx::opSetLineCap(Object args[], int numArgs) { + state->setLineCap(args[0].getInt()); + out->updateLineCap(state); +} + +void Gfx::opSetMiterLimit(Object args[], int numArgs) { + state->setMiterLimit(args[0].getNum()); + out->updateMiterLimit(state); +} + +void Gfx::opSetLineWidth(Object args[], int numArgs) { + state->setLineWidth(args[0].getNum()); + out->updateLineWidth(state); +} + +void Gfx::opSetExtGState(Object args[], int numArgs) { + Object obj1, obj2, obj3, obj4, obj5; + GfxBlendMode mode; + GBool haveFillOP; + Function *funcs[4]; + GfxColor backdropColor; + GBool haveBackdropColor; + GfxColorSpace *blendingColorSpace; + GBool alpha, isolated, knockout; + int i; + + if (!res->lookupGState(args[0].getName(), &obj1)) { + return; + } + if (!obj1.isDict()) { + error(getPos(), "ExtGState '%s' is wrong type", args[0].getName()); + obj1.free(); + return; + } + if (printCommands) { + printf(" gfx state dict: "); + obj1.print(); + printf("\n"); + } + + // transparency support: blend mode, fill/stroke opacity + if (!obj1.dictLookup("BM", &obj2)->isNull()) { + if (state->parseBlendMode(&obj2, &mode)) { + state->setBlendMode(mode); + out->updateBlendMode(state); + } else { + error(getPos(), "Invalid blend mode in ExtGState"); + } + } + obj2.free(); + if (obj1.dictLookup("ca", &obj2)->isNum()) { + state->setFillOpacity(obj2.getNum()); + out->updateFillOpacity(state); + } + obj2.free(); + if (obj1.dictLookup("CA", &obj2)->isNum()) { + state->setStrokeOpacity(obj2.getNum()); + out->updateStrokeOpacity(state); + } + obj2.free(); + + // fill/stroke overprint + if ((haveFillOP = (obj1.dictLookup("op", &obj2)->isBool()))) { + state->setFillOverprint(obj2.getBool()); + out->updateFillOverprint(state); + } + obj2.free(); + if (obj1.dictLookup("OP", &obj2)->isBool()) { + state->setStrokeOverprint(obj2.getBool()); + out->updateStrokeOverprint(state); + if (!haveFillOP) { + state->setFillOverprint(obj2.getBool()); + out->updateFillOverprint(state); + } + } + obj2.free(); + if (obj1.dictLookup("OPM", &obj2)->isInt()) { + state->setOverprintMode(obj2.getInt()); + out->updateOverprintMode(state); + } + obj2.free(); + + // stroke adjust + if (obj1.dictLookup("SA", &obj2)->isBool()) { + state->setStrokeAdjust(obj2.getBool()); + out->updateStrokeAdjust(state); + } + obj2.free(); + + // transfer function + if (obj1.dictLookup("TR2", &obj2)->isNull()) { + obj2.free(); + obj1.dictLookup("TR", &obj2); + } + if (obj2.isName("Default") || + obj2.isName("Identity")) { + funcs[0] = funcs[1] = funcs[2] = funcs[3] = NULL; + state->setTransfer(funcs); + out->updateTransfer(state); + } else if (obj2.isArray() && obj2.arrayGetLength() == 4) { + for (i = 0; i < 4; ++i) { + obj2.arrayGet(i, &obj3); + funcs[i] = Function::parse(&obj3); + obj3.free(); + if (!funcs[i]) { + break; + } + } + if (i == 4) { + state->setTransfer(funcs); + out->updateTransfer(state); + } + } else if (obj2.isName() || obj2.isDict() || obj2.isStream()) { + if ((funcs[0] = Function::parse(&obj2))) { + funcs[1] = funcs[2] = funcs[3] = NULL; + state->setTransfer(funcs); + out->updateTransfer(state); + } + } else if (!obj2.isNull()) { + error(getPos(), "Invalid transfer function in ExtGState"); + } + obj2.free(); + + // alpha is shape + if (obj1.dictLookup("AIS", &obj2)->isBool()) { + state->setAlphaIsShape(obj2.getBool()); + out->updateAlphaIsShape(state); + } + obj2.free(); + + // text knockout + if (obj1.dictLookup("TK", &obj2)->isBool()) { + state->setTextKnockout(obj2.getBool()); + out->updateTextKnockout(state); + } + obj2.free(); + + // soft mask + if (!obj1.dictLookup("SMask", &obj2)->isNull()) { + if (obj2.isName("None")) { + out->clearSoftMask(state); + } else if (obj2.isDict()) { + if (obj2.dictLookup("S", &obj3)->isName("Alpha")) { + alpha = gTrue; + } else { // "Luminosity" + alpha = gFalse; + } + obj3.free(); + funcs[0] = NULL; + if (!obj2.dictLookup("TR", &obj3)->isNull()) { + funcs[0] = Function::parse(&obj3); + if (funcs[0]->getInputSize() != 1 || + funcs[0]->getOutputSize() != 1) { + error(getPos(), + "Invalid transfer function in soft mask in ExtGState"); + delete funcs[0]; + funcs[0] = NULL; + } + } + obj3.free(); + if ((haveBackdropColor = obj2.dictLookup("BC", &obj3)->isArray())) { + for (i = 0; i < gfxColorMaxComps; ++i) { + backdropColor.c[i] = 0; + } + for (i = 0; i < obj3.arrayGetLength() && i < gfxColorMaxComps; ++i) { + obj3.arrayGet(i, &obj4); + if (obj4.isNum()) { + backdropColor.c[i] = dblToCol(obj4.getNum()); + } + obj4.free(); + } + } + obj3.free(); + if (obj2.dictLookup("G", &obj3)->isStream()) { + if (obj3.streamGetDict()->lookup("Group", &obj4)->isDict()) { + blendingColorSpace = NULL; + isolated = knockout = gFalse; + if (!obj4.dictLookup("CS", &obj5)->isNull()) { + blendingColorSpace = GfxColorSpace::parse(&obj5, this); + } + obj5.free(); + if (obj4.dictLookup("I", &obj5)->isBool()) { + isolated = obj5.getBool(); + } + obj5.free(); + if (obj4.dictLookup("K", &obj5)->isBool()) { + knockout = obj5.getBool(); + } + obj5.free(); + if (!haveBackdropColor) { + if (blendingColorSpace) { + blendingColorSpace->getDefaultColor(&backdropColor); + } else { + //~ need to get the parent or default color space (?) + for (i = 0; i < gfxColorMaxComps; ++i) { + backdropColor.c[i] = 0; + } + } + } + doSoftMask(&obj3, alpha, blendingColorSpace, + isolated, knockout, funcs[0], &backdropColor); + if (funcs[0]) { + delete funcs[0]; + } + } else { + error(getPos(), "Invalid soft mask in ExtGState - missing group"); + } + obj4.free(); + } else { + error(getPos(), "Invalid soft mask in ExtGState - missing group"); + } + obj3.free(); + } else if (!obj2.isNull()) { + error(getPos(), "Invalid soft mask in ExtGState"); + } + } + obj2.free(); + if (obj1.dictLookup("Font", &obj2)->isArray()) { + GfxFont *font; + if (obj2.arrayGetLength() == 2) { + Object fargs0, fargs1; + + obj2.arrayGetNF(0,&fargs0); + obj2.arrayGet(1,&fargs1); + if (fargs0.isRef() && fargs1.isNum()) { + Object fobj; + Ref r; + + fargs0.fetch(xref, &fobj); + if (fobj.isDict()) { + r = fargs0.getRef(); + font = GfxFont::makeFont(xref,args[0].getName(),r,fobj.getDict()); + state->setFont(font,fargs1.getNum()); + fontChanged = gTrue; + } + fobj.free(); + } + fargs0.free(); + fargs1.free(); + } else { + error(getPos(), "Number of args mismatch for /Font in ExtGState"); + } + } + obj2.free(); + if (obj1.dictLookup("LW", &obj2)->isNum()) { + opSetLineWidth(&obj2,1); + } + obj2.free(); + if (obj1.dictLookup("LC", &obj2)->isInt()) { + opSetLineCap(&obj2,1); + } + obj2.free(); + if (obj1.dictLookup("LJ", &obj2)->isInt()) { + opSetLineJoin(&obj2,1); + } + obj2.free(); + if (obj1.dictLookup("ML", &obj2)->isNum()) { + opSetMiterLimit(&obj2,1); + } + obj2.free(); + if (obj1.dictLookup("D", &obj2)->isArray()) { + if (obj2.arrayGetLength() == 2) { + Object dargs[2]; + + obj2.arrayGetNF(0,&dargs[0]); + obj2.arrayGet(1,&dargs[1]); + if (dargs[0].isArray() && dargs[1].isInt()) { + opSetDash(dargs,2); + } + dargs[0].free(); + dargs[1].free(); + } else { + error(getPos(), "Number of args mismatch for /D in ExtGState"); + } + } + obj2.free(); + if (obj1.dictLookup("RI", &obj2)->isName()) { + opSetRenderingIntent(&obj2,1); + } + obj2.free(); + if (obj1.dictLookup("FL", &obj2)->isNum()) { + opSetFlat(&obj2,1); + } + obj2.free(); + + obj1.free(); +} + +void Gfx::doSoftMask(Object *str, GBool alpha, + GfxColorSpace *blendingColorSpace, + GBool isolated, GBool knockout, + Function *transferFunc, GfxColor *backdropColor) { + Dict *dict, *resDict; + double m[6], bbox[4]; + Object obj1, obj2; + int i; + + // check for excessive recursion + if (formDepth > 20) { + return; + } + + // get stream dict + dict = str->streamGetDict(); + + // check form type + dict->lookup("FormType", &obj1); + if (!(obj1.isNull() || (obj1.isInt() && obj1.getInt() == 1))) { + error(getPos(), "Unknown form type"); + } + obj1.free(); + + // get bounding box + dict->lookup("BBox", &obj1); + if (!obj1.isArray()) { + obj1.free(); + error(getPos(), "Bad form bounding box"); + return; + } + for (i = 0; i < 4; ++i) { + obj1.arrayGet(i, &obj2); + if (likely(obj2.isNum())) bbox[i] = obj2.getNum(); + else { + obj2.free(); + obj1.free(); + error(getPos(), "Bad form bounding box (non number)"); + return; + } + obj2.free(); + } + obj1.free(); + + // get matrix + dict->lookup("Matrix", &obj1); + if (obj1.isArray()) { + for (i = 0; i < 6; ++i) { + obj1.arrayGet(i, &obj2); + if (likely(obj2.isNum())) m[i] = obj2.getNum(); + else m[i] = 0; + obj2.free(); + } + } else { + m[0] = 1; m[1] = 0; + m[2] = 0; m[3] = 1; + m[4] = 0; m[5] = 0; + } + obj1.free(); + + // get resources + dict->lookup("Resources", &obj1); + resDict = obj1.isDict() ? obj1.getDict() : (Dict *)NULL; + + // draw it + ++formDepth; + doForm1(str, resDict, m, bbox, gTrue, gTrue, + blendingColorSpace, isolated, knockout, + alpha, transferFunc, backdropColor); + --formDepth; + + if (blendingColorSpace) { + delete blendingColorSpace; + } + obj1.free(); +} + +void Gfx::opSetRenderingIntent(Object args[], int numArgs) { +} + +//------------------------------------------------------------------------ +// color operators +//------------------------------------------------------------------------ + +void Gfx::opSetFillGray(Object args[], int numArgs) { + GfxColor color; + GfxColorSpace *colorSpace = NULL; + Object obj; + + if (textHaveCSPattern && drawText) { + GBool needFill = out->deviceHasTextClip(state); + out->endTextObject(state); + if (needFill) { + doPatternFill(gTrue); + } + out->restoreState(state); + } + state->setFillPattern(NULL); + res->lookupColorSpace("DefaultGray", &obj); + if (!obj.isNull()) { + colorSpace = GfxColorSpace::parse(&obj, this); + } + if (colorSpace == NULL) { + colorSpace = new GfxDeviceGrayColorSpace(); + } + obj.free(); + state->setFillColorSpace(colorSpace); + out->updateFillColorSpace(state); + color.c[0] = dblToCol(args[0].getNum()); + state->setFillColor(&color); + out->updateFillColor(state); + if (textHaveCSPattern) { + out->beginTextObject(state); + out->updateRender(state); + out->updateTextMat(state); + out->updateTextPos(state); + textHaveCSPattern = gFalse; + } +} + +void Gfx::opSetStrokeGray(Object args[], int numArgs) { + GfxColor color; + GfxColorSpace *colorSpace = NULL; + Object obj; + + state->setStrokePattern(NULL); + res->lookupColorSpace("DefaultGray", &obj); + if (!obj.isNull()) { + colorSpace = GfxColorSpace::parse(&obj, this); + } + if (colorSpace == NULL) { + colorSpace = new GfxDeviceGrayColorSpace(); + } + obj.free(); + state->setStrokeColorSpace(colorSpace); + out->updateStrokeColorSpace(state); + color.c[0] = dblToCol(args[0].getNum()); + state->setStrokeColor(&color); + out->updateStrokeColor(state); +} + +void Gfx::opSetFillCMYKColor(Object args[], int numArgs) { + GfxColor color; + GfxColorSpace *colorSpace = NULL; + Object obj; + int i; + + if (textHaveCSPattern && drawText) { + GBool needFill = out->deviceHasTextClip(state); + out->endTextObject(state); + if (needFill) { + doPatternFill(gTrue); + } + out->restoreState(state); + } + res->lookupColorSpace("DefaultCMYK", &obj); + if (!obj.isNull()) { + colorSpace = GfxColorSpace::parse(&obj, this); + } + if (colorSpace == NULL) { + colorSpace = new GfxDeviceCMYKColorSpace(); + } + obj.free(); + state->setFillPattern(NULL); + state->setFillColorSpace(colorSpace); + out->updateFillColorSpace(state); + for (i = 0; i < 4; ++i) { + color.c[i] = dblToCol(args[i].getNum()); + } + state->setFillColor(&color); + out->updateFillColor(state); + if (textHaveCSPattern) { + out->beginTextObject(state); + out->updateRender(state); + out->updateTextMat(state); + out->updateTextPos(state); + textHaveCSPattern = gFalse; + } +} + +void Gfx::opSetStrokeCMYKColor(Object args[], int numArgs) { + GfxColor color; + GfxColorSpace *colorSpace = NULL; + Object obj; + int i; + + state->setStrokePattern(NULL); + res->lookupColorSpace("DefaultCMYK", &obj); + if (!obj.isNull()) { + colorSpace = GfxColorSpace::parse(&obj, this); + } + if (colorSpace == NULL) { + colorSpace = new GfxDeviceCMYKColorSpace(); + } + obj.free(); + state->setStrokeColorSpace(colorSpace); + out->updateStrokeColorSpace(state); + for (i = 0; i < 4; ++i) { + color.c[i] = dblToCol(args[i].getNum()); + } + state->setStrokeColor(&color); + out->updateStrokeColor(state); +} + +void Gfx::opSetFillRGBColor(Object args[], int numArgs) { + Object obj; + GfxColorSpace *colorSpace = NULL; + GfxColor color; + int i; + + if (textHaveCSPattern && drawText) { + GBool needFill = out->deviceHasTextClip(state); + out->endTextObject(state); + if (needFill) { + doPatternFill(gTrue); + } + out->restoreState(state); + } + state->setFillPattern(NULL); + res->lookupColorSpace("DefaultRGB", &obj); + if (!obj.isNull()) { + colorSpace = GfxColorSpace::parse(&obj, this); + } + if (colorSpace == NULL) { + colorSpace = new GfxDeviceRGBColorSpace(); + } + obj.free(); + state->setFillColorSpace(colorSpace); + out->updateFillColorSpace(state); + for (i = 0; i < 3; ++i) { + color.c[i] = dblToCol(args[i].getNum()); + } + state->setFillColor(&color); + out->updateFillColor(state); + if (textHaveCSPattern) { + out->beginTextObject(state); + out->updateRender(state); + out->updateTextMat(state); + out->updateTextPos(state); + textHaveCSPattern = gFalse; + } +} + +void Gfx::opSetStrokeRGBColor(Object args[], int numArgs) { + Object obj; + GfxColorSpace *colorSpace = NULL; + GfxColor color; + int i; + + state->setStrokePattern(NULL); + res->lookupColorSpace("DefaultRGB", &obj); + if (!obj.isNull()) { + colorSpace = GfxColorSpace::parse(&obj, this); + } + if (colorSpace == NULL) { + colorSpace = new GfxDeviceRGBColorSpace(); + } + obj.free(); + state->setStrokeColorSpace(colorSpace); + out->updateStrokeColorSpace(state); + for (i = 0; i < 3; ++i) { + color.c[i] = dblToCol(args[i].getNum()); + } + state->setStrokeColor(&color); + out->updateStrokeColor(state); +} + +void Gfx::opSetFillColorSpace(Object args[], int numArgs) { + Object obj; + GfxColorSpace *colorSpace; + GfxColor color; + + res->lookupColorSpace(args[0].getName(), &obj); + if (obj.isNull()) { + colorSpace = GfxColorSpace::parse(&args[0], this); + } else { + colorSpace = GfxColorSpace::parse(&obj, this); + } + obj.free(); + if (colorSpace) { + if (textHaveCSPattern && drawText) { + GBool needFill = out->deviceHasTextClip(state); + out->endTextObject(state); + if (needFill) { + doPatternFill(gTrue); + } + out->restoreState(state); + } + state->setFillPattern(NULL); + state->setFillColorSpace(colorSpace); + out->updateFillColorSpace(state); + colorSpace->getDefaultColor(&color); + state->setFillColor(&color); + out->updateFillColor(state); + if (textHaveCSPattern) { + out->beginTextObject(state); + out->updateRender(state); + out->updateTextMat(state); + out->updateTextPos(state); + textHaveCSPattern = colorSpace->getMode() == csPattern; + } else if (drawText && out->supportTextCSPattern(state)) { + out->beginTextObject(state); + textHaveCSPattern = gTrue; + } + } else { + error(getPos(), "Bad color space (fill)"); + } +} + +void Gfx::opSetStrokeColorSpace(Object args[], int numArgs) { + Object obj; + GfxColorSpace *colorSpace; + GfxColor color; + + state->setStrokePattern(NULL); + res->lookupColorSpace(args[0].getName(), &obj); + if (obj.isNull()) { + colorSpace = GfxColorSpace::parse(&args[0], this); + } else { + colorSpace = GfxColorSpace::parse(&obj, this); + } + obj.free(); + if (colorSpace) { + state->setStrokeColorSpace(colorSpace); + out->updateStrokeColorSpace(state); + colorSpace->getDefaultColor(&color); + state->setStrokeColor(&color); + out->updateStrokeColor(state); + } else { + error(getPos(), "Bad color space (stroke)"); + } +} + +void Gfx::opSetFillColor(Object args[], int numArgs) { + GfxColor color; + int i; + + if (numArgs != state->getFillColorSpace()->getNComps()) { + error(getPos(), "Incorrect number of arguments in 'sc' command"); + return; + } + state->setFillPattern(NULL); + for (i = 0; i < numArgs; ++i) { + color.c[i] = dblToCol(args[i].getNum()); + } + state->setFillColor(&color); + out->updateFillColor(state); +} + +void Gfx::opSetStrokeColor(Object args[], int numArgs) { + GfxColor color; + int i; + + if (numArgs != state->getStrokeColorSpace()->getNComps()) { + error(getPos(), "Incorrect number of arguments in 'SC' command"); + return; + } + state->setStrokePattern(NULL); + for (i = 0; i < numArgs; ++i) { + color.c[i] = dblToCol(args[i].getNum()); + } + state->setStrokeColor(&color); + out->updateStrokeColor(state); +} + +void Gfx::opSetFillColorN(Object args[], int numArgs) { + GfxColor color; + GfxPattern *pattern; + int i; + + if (state->getFillColorSpace()->getMode() == csPattern) { + if (numArgs > 1) { + if (!((GfxPatternColorSpace *)state->getFillColorSpace())->getUnder() || + numArgs - 1 != ((GfxPatternColorSpace *)state->getFillColorSpace()) + ->getUnder()->getNComps()) { + error(getPos(), "Incorrect number of arguments in 'scn' command"); + return; + } + for (i = 0; i < numArgs - 1 && i < gfxColorMaxComps; ++i) { + if (args[i].isNum()) { + color.c[i] = dblToCol(args[i].getNum()); + } else { + color.c[i] = 0; // TODO Investigate if this is what Adobe does + } + } + state->setFillColor(&color); + out->updateFillColor(state); + } + if (args[numArgs-1].isName() && + (pattern = res->lookupPattern(args[numArgs-1].getName(), this))) { + state->setFillPattern(pattern); + } + + } else { + if (numArgs != state->getFillColorSpace()->getNComps()) { + error(getPos(), "Incorrect number of arguments in 'scn' command"); + return; + } + state->setFillPattern(NULL); + for (i = 0; i < numArgs && i < gfxColorMaxComps; ++i) { + if (args[i].isNum()) { + color.c[i] = dblToCol(args[i].getNum()); + } else { + color.c[i] = 0; // TODO Investigate if this is what Adobe does + } + } + state->setFillColor(&color); + out->updateFillColor(state); + } +} + +void Gfx::opSetStrokeColorN(Object args[], int numArgs) { + GfxColor color; + GfxPattern *pattern; + int i; + + if (state->getStrokeColorSpace()->getMode() == csPattern) { + if (numArgs > 1) { + if (!((GfxPatternColorSpace *)state->getStrokeColorSpace()) + ->getUnder() || + numArgs - 1 != ((GfxPatternColorSpace *)state->getStrokeColorSpace()) + ->getUnder()->getNComps()) { + error(getPos(), "Incorrect number of arguments in 'SCN' command"); + return; + } + for (i = 0; i < numArgs - 1 && i < gfxColorMaxComps; ++i) { + if (args[i].isNum()) { + color.c[i] = dblToCol(args[i].getNum()); + } else { + color.c[i] = 0; // TODO Investigate if this is what Adobe does + } + } + state->setStrokeColor(&color); + out->updateStrokeColor(state); + } + if (args[numArgs-1].isName() && + (pattern = res->lookupPattern(args[numArgs-1].getName(), this))) { + state->setStrokePattern(pattern); + } + + } else { + if (numArgs != state->getStrokeColorSpace()->getNComps()) { + error(getPos(), "Incorrect number of arguments in 'SCN' command"); + return; + } + state->setStrokePattern(NULL); + for (i = 0; i < numArgs && i < gfxColorMaxComps; ++i) { + if (args[i].isNum()) { + color.c[i] = dblToCol(args[i].getNum()); + } else { + color.c[i] = 0; // TODO Investigate if this is what Adobe does + } + } + state->setStrokeColor(&color); + out->updateStrokeColor(state); + } +} + +//------------------------------------------------------------------------ +// path segment operators +//------------------------------------------------------------------------ + +void Gfx::opMoveTo(Object args[], int numArgs) { + state->moveTo(args[0].getNum(), args[1].getNum()); +} + +void Gfx::opLineTo(Object args[], int numArgs) { + if (!state->isCurPt()) { + error(getPos(), "No current point in lineto"); + return; + } + state->lineTo(args[0].getNum(), args[1].getNum()); +} + +void Gfx::opCurveTo(Object args[], int numArgs) { + double x1, y1, x2, y2, x3, y3; + + if (!state->isCurPt()) { + error(getPos(), "No current point in curveto"); + return; + } + x1 = args[0].getNum(); + y1 = args[1].getNum(); + x2 = args[2].getNum(); + y2 = args[3].getNum(); + x3 = args[4].getNum(); + y3 = args[5].getNum(); + state->curveTo(x1, y1, x2, y2, x3, y3); +} + +void Gfx::opCurveTo1(Object args[], int numArgs) { + double x1, y1, x2, y2, x3, y3; + + if (!state->isCurPt()) { + error(getPos(), "No current point in curveto1"); + return; + } + x1 = state->getCurX(); + y1 = state->getCurY(); + x2 = args[0].getNum(); + y2 = args[1].getNum(); + x3 = args[2].getNum(); + y3 = args[3].getNum(); + state->curveTo(x1, y1, x2, y2, x3, y3); +} + +void Gfx::opCurveTo2(Object args[], int numArgs) { + double x1, y1, x2, y2, x3, y3; + + if (!state->isCurPt()) { + error(getPos(), "No current point in curveto2"); + return; + } + x1 = args[0].getNum(); + y1 = args[1].getNum(); + x2 = args[2].getNum(); + y2 = args[3].getNum(); + x3 = x2; + y3 = y2; + state->curveTo(x1, y1, x2, y2, x3, y3); +} + +void Gfx::opRectangle(Object args[], int numArgs) { + double x, y, w, h; + + x = args[0].getNum(); + y = args[1].getNum(); + w = args[2].getNum(); + h = args[3].getNum(); + state->moveTo(x, y); + state->lineTo(x + w, y); + state->lineTo(x + w, y + h); + state->lineTo(x, y + h); + state->closePath(); +} + +void Gfx::opClosePath(Object args[], int numArgs) { + if (!state->isCurPt()) { + error(getPos(), "No current point in closepath"); + return; + } + state->closePath(); +} + +//------------------------------------------------------------------------ +// path painting operators +//------------------------------------------------------------------------ + +void Gfx::opEndPath(Object args[], int numArgs) { + doEndPath(); +} + +void Gfx::opStroke(Object args[], int numArgs) { + if (!state->isCurPt()) { + //error(getPos(), "No path in stroke"); + return; + } + if (state->isPath() && !contentIsHidden()) { + if (state->getStrokeColorSpace()->getMode() == csPattern) { + doPatternStroke(); + } else { + out->stroke(state); + } + } + doEndPath(); +} + +void Gfx::opCloseStroke(Object * /*args[]*/, int /*numArgs*/) { + if (!state->isCurPt()) { + //error(getPos(), "No path in closepath/stroke"); + return; + } + state->closePath(); + if (state->isPath() && !contentIsHidden()) { + if (state->getStrokeColorSpace()->getMode() == csPattern) { + doPatternStroke(); + } else { + out->stroke(state); + } + } + doEndPath(); +} + +void Gfx::opFill(Object args[], int numArgs) { + if (!state->isCurPt()) { + //error(getPos(), "No path in fill"); + return; + } + if (state->isPath() && !contentIsHidden()) { + if (state->getFillColorSpace()->getMode() == csPattern) { + doPatternFill(gFalse); + } else { + out->fill(state); + } + } + doEndPath(); +} + +void Gfx::opEOFill(Object args[], int numArgs) { + if (!state->isCurPt()) { + //error(getPos(), "No path in eofill"); + return; + } + if (state->isPath() && !contentIsHidden()) { + if (state->getFillColorSpace()->getMode() == csPattern) { + doPatternFill(gTrue); + } else { + out->eoFill(state); + } + } + doEndPath(); +} + +void Gfx::opFillStroke(Object args[], int numArgs) { + if (!state->isCurPt()) { + //error(getPos(), "No path in fill/stroke"); + return; + } + if (state->isPath() && !contentIsHidden()) { + if (state->getFillColorSpace()->getMode() == csPattern) { + doPatternFill(gFalse); + } else { + out->fill(state); + } + if (state->getStrokeColorSpace()->getMode() == csPattern) { + doPatternStroke(); + } else { + out->stroke(state); + } + } + doEndPath(); +} + +void Gfx::opCloseFillStroke(Object args[], int numArgs) { + if (!state->isCurPt()) { + //error(getPos(), "No path in closepath/fill/stroke"); + return; + } + if (state->isPath() && !contentIsHidden()) { + state->closePath(); + if (state->getFillColorSpace()->getMode() == csPattern) { + doPatternFill(gFalse); + } else { + out->fill(state); + } + if (state->getStrokeColorSpace()->getMode() == csPattern) { + doPatternStroke(); + } else { + out->stroke(state); + } + } + doEndPath(); +} + +void Gfx::opEOFillStroke(Object args[], int numArgs) { + if (!state->isCurPt()) { + //error(getPos(), "No path in eofill/stroke"); + return; + } + if (state->isPath() && !contentIsHidden()) { + if (state->getFillColorSpace()->getMode() == csPattern) { + doPatternFill(gTrue); + } else { + out->eoFill(state); + } + if (state->getStrokeColorSpace()->getMode() == csPattern) { + doPatternStroke(); + } else { + out->stroke(state); + } + } + doEndPath(); +} + +void Gfx::opCloseEOFillStroke(Object args[], int numArgs) { + if (!state->isCurPt()) { + //error(getPos(), "No path in closepath/eofill/stroke"); + return; + } + if (state->isPath() && !contentIsHidden()) { + state->closePath(); + if (state->getFillColorSpace()->getMode() == csPattern) { + doPatternFill(gTrue); + } else { + out->eoFill(state); + } + if (state->getStrokeColorSpace()->getMode() == csPattern) { + doPatternStroke(); + } else { + out->stroke(state); + } + } + doEndPath(); +} + +void Gfx::doPatternFill(GBool eoFill) { + GfxPattern *pattern; + + // this is a bit of a kludge -- patterns can be really slow, so we + // skip them if we're only doing text extraction, since they almost + // certainly don't contain any text + if (!out->needNonText()) { + return; + } + + if (!(pattern = state->getFillPattern())) { + return; + } + switch (pattern->getType()) { + case 1: + doTilingPatternFill((GfxTilingPattern *)pattern, gFalse, eoFill); + break; + case 2: + doShadingPatternFill((GfxShadingPattern *)pattern, gFalse, eoFill); + break; + default: + error(getPos(), "Unimplemented pattern type (%d) in fill", + pattern->getType()); + break; + } +} + +void Gfx::doPatternStroke() { + GfxPattern *pattern; + + // this is a bit of a kludge -- patterns can be really slow, so we + // skip them if we're only doing text extraction, since they almost + // certainly don't contain any text + if (!out->needNonText()) { + return; + } + + if (!(pattern = state->getStrokePattern())) { + return; + } + switch (pattern->getType()) { + case 1: + doTilingPatternFill((GfxTilingPattern *)pattern, gTrue, gFalse); + break; + case 2: + doShadingPatternFill((GfxShadingPattern *)pattern, gTrue, gFalse); + break; + default: + error(getPos(), "Unimplemented pattern type (%d) in stroke", + pattern->getType()); + break; + } +} + +void Gfx::doTilingPatternFill(GfxTilingPattern *tPat, + GBool stroke, GBool eoFill) { + GfxPatternColorSpace *patCS; + GfxColorSpace *cs; + GfxColor color; + GfxPath *savedPath; + double xMin, yMin, xMax, yMax, x, y, x1, y1; + double cxMin, cyMin, cxMax, cyMax; + int xi0, yi0, xi1, yi1, xi, yi; + double *ctm, *btm, *ptm; + double m[6], ictm[6], m1[6], imb[6]; + double det; + double xstep, ystep; + int i; + + // get color space + patCS = (GfxPatternColorSpace *)(stroke ? state->getStrokeColorSpace() + : state->getFillColorSpace()); + + // construct a (pattern space) -> (current space) transform matrix + ctm = state->getCTM(); + btm = baseMatrix; + ptm = tPat->getMatrix(); + // iCTM = invert CTM + det = 1 / (ctm[0] * ctm[3] - ctm[1] * ctm[2]); + ictm[0] = ctm[3] * det; + ictm[1] = -ctm[1] * det; + ictm[2] = -ctm[2] * det; + ictm[3] = ctm[0] * det; + ictm[4] = (ctm[2] * ctm[5] - ctm[3] * ctm[4]) * det; + ictm[5] = (ctm[1] * ctm[4] - ctm[0] * ctm[5]) * det; + // m1 = PTM * BTM = PTM * base transform matrix + m1[0] = ptm[0] * btm[0] + ptm[1] * btm[2]; + m1[1] = ptm[0] * btm[1] + ptm[1] * btm[3]; + m1[2] = ptm[2] * btm[0] + ptm[3] * btm[2]; + m1[3] = ptm[2] * btm[1] + ptm[3] * btm[3]; + m1[4] = ptm[4] * btm[0] + ptm[5] * btm[2] + btm[4]; + m1[5] = ptm[4] * btm[1] + ptm[5] * btm[3] + btm[5]; + // m = m1 * iCTM = (PTM * BTM) * (iCTM) + m[0] = m1[0] * ictm[0] + m1[1] * ictm[2]; + m[1] = m1[0] * ictm[1] + m1[1] * ictm[3]; + m[2] = m1[2] * ictm[0] + m1[3] * ictm[2]; + m[3] = m1[2] * ictm[1] + m1[3] * ictm[3]; + m[4] = m1[4] * ictm[0] + m1[5] * ictm[2] + ictm[4]; + m[5] = m1[4] * ictm[1] + m1[5] * ictm[3] + ictm[5]; + + // construct a (device space) -> (pattern space) transform matrix + det = 1 / (m1[0] * m1[3] - m1[1] * m1[2]); + imb[0] = m1[3] * det; + imb[1] = -m1[1] * det; + imb[2] = -m1[2] * det; + imb[3] = m1[0] * det; + imb[4] = (m1[2] * m1[5] - m1[3] * m1[4]) * det; + imb[5] = (m1[1] * m1[4] - m1[0] * m1[5]) * det; + + // save current graphics state + savedPath = state->getPath()->copy(); + saveState(); + + // set underlying color space (for uncolored tiling patterns); set + // various other parameters (stroke color, line width) to match + // Adobe's behavior + if (tPat->getPaintType() == 2 && (cs = patCS->getUnder())) { + state->setFillColorSpace(cs->copy()); + out->updateFillColorSpace(state); + state->setStrokeColorSpace(cs->copy()); + out->updateStrokeColorSpace(state); + if (stroke) { + state->setFillColor(state->getStrokeColor()); + } else { + state->setStrokeColor(state->getFillColor()); + } + } else { + cs = new GfxDeviceGrayColorSpace(); + state->setFillColorSpace(cs); + cs->getDefaultColor(&color); + state->setFillColor(&color); + out->updateFillColorSpace(state); + state->setStrokeColorSpace(new GfxDeviceGrayColorSpace()); + state->setStrokeColor(&color); + out->updateStrokeColorSpace(state); + } + state->setFillPattern(NULL); + out->updateFillColor(state); + state->setStrokePattern(NULL); + out->updateStrokeColor(state); + + // clip to current path + if (stroke) { + state->clipToStrokePath(); + out->clipToStrokePath(state); + } else if (!textHaveCSPattern && !maskHaveCSPattern) { + state->clip(); + if (eoFill) { + out->eoClip(state); + } else { + out->clip(state); + } + } + state->clearPath(); + state->setLineWidth(0); + out->updateLineWidth(state); + + // get the clip region, check for empty + state->getClipBBox(&cxMin, &cyMin, &cxMax, &cyMax); + if (cxMin > cxMax || cyMin > cyMax) { + goto restore; + } + + // transform clip region bbox to pattern space + xMin = xMax = cxMin * imb[0] + cyMin * imb[2] + imb[4]; + yMin = yMax = cxMin * imb[1] + cyMin * imb[3] + imb[5]; + x1 = cxMin * imb[0] + cyMax * imb[2] + imb[4]; + y1 = cxMin * imb[1] + cyMax * imb[3] + imb[5]; + if (x1 < xMin) { + xMin = x1; + } else if (x1 > xMax) { + xMax = x1; + } + if (y1 < yMin) { + yMin = y1; + } else if (y1 > yMax) { + yMax = y1; + } + x1 = cxMax * imb[0] + cyMin * imb[2] + imb[4]; + y1 = cxMax * imb[1] + cyMin * imb[3] + imb[5]; + if (x1 < xMin) { + xMin = x1; + } else if (x1 > xMax) { + xMax = x1; + } + if (y1 < yMin) { + yMin = y1; + } else if (y1 > yMax) { + yMax = y1; + } + x1 = cxMax * imb[0] + cyMax * imb[2] + imb[4]; + y1 = cxMax * imb[1] + cyMax * imb[3] + imb[5]; + if (x1 < xMin) { + xMin = x1; + } else if (x1 > xMax) { + xMax = x1; + } + if (y1 < yMin) { + yMin = y1; + } else if (y1 > yMax) { + yMax = y1; + } + + // draw the pattern + //~ this should treat negative steps differently -- start at right/top + //~ edge instead of left/bottom (?) + xstep = fabs(tPat->getXStep()); + ystep = fabs(tPat->getYStep()); + xi0 = (int)ceil((xMin - tPat->getBBox()[2]) / xstep); + xi1 = (int)floor((xMax - tPat->getBBox()[0]) / xstep) + 1; + yi0 = (int)ceil((yMin - tPat->getBBox()[3]) / ystep); + yi1 = (int)floor((yMax - tPat->getBBox()[1]) / ystep) + 1; + for (i = 0; i < 4; ++i) { + m1[i] = m[i]; + } + if (!contentIsHidden()) { + m1[4] = m[4]; + m1[5] = m[5]; + if (out->useTilingPatternFill() && + out->tilingPatternFill(state, catalog, tPat->getContentStream(), + tPat->getMatrix(), tPat->getPaintType(), tPat->getTilingType(), + tPat->getResDict(), m1, tPat->getBBox(), + xi0, yi0, xi1, yi1, xstep, ystep)) { + goto restore; + } else { + for (yi = yi0; yi < yi1; ++yi) { + for (xi = xi0; xi < xi1; ++xi) { + x = xi * xstep; + y = yi * ystep; + m1[4] = x * m[0] + y * m[2] + m[4]; + m1[5] = x * m[1] + y * m[3] + m[5]; + doForm1(tPat->getContentStream(), tPat->getResDict(), + m1, tPat->getBBox()); + } + } + } + } + + // restore graphics state + restore: + restoreState(); + state->setPath(savedPath); +} + +void Gfx::doShadingPatternFill(GfxShadingPattern *sPat, + GBool stroke, GBool eoFill) { + GfxShading *shading; + GfxPath *savedPath; + double *ctm, *btm, *ptm; + double m[6], ictm[6], m1[6]; + double xMin, yMin, xMax, yMax; + double det; + + shading = sPat->getShading(); + + // save current graphics state + savedPath = state->getPath()->copy(); + saveState(); + + // clip to bbox + if (shading->getHasBBox()) { + shading->getBBox(&xMin, &yMin, &xMax, &yMax); + state->moveTo(xMin, yMin); + state->lineTo(xMax, yMin); + state->lineTo(xMax, yMax); + state->lineTo(xMin, yMax); + state->closePath(); + state->clip(); + if (!textHaveCSPattern && !maskHaveCSPattern) + out->clip(state); + state->setPath(savedPath->copy()); + } + + // clip to current path + if (stroke) { + state->clipToStrokePath(); + out->clipToStrokePath(state); + } else if (!textHaveCSPattern && !maskHaveCSPattern) { + state->clip(); + if (eoFill) { + out->eoClip(state); + } else { + out->clip(state); + } + } + + // set the color space + state->setFillColorSpace(shading->getColorSpace()->copy()); + out->updateFillColorSpace(state); + + // background color fill + if (shading->getHasBackground()) { + state->setFillColor(shading->getBackground()); + out->updateFillColor(state); + if (!contentIsHidden()) + out->fill(state); + } + state->clearPath(); + + // construct a (pattern space) -> (current space) transform matrix + ctm = state->getCTM(); + btm = baseMatrix; + ptm = sPat->getMatrix(); + // iCTM = invert CTM + det = 1 / (ctm[0] * ctm[3] - ctm[1] * ctm[2]); + ictm[0] = ctm[3] * det; + ictm[1] = -ctm[1] * det; + ictm[2] = -ctm[2] * det; + ictm[3] = ctm[0] * det; + ictm[4] = (ctm[2] * ctm[5] - ctm[3] * ctm[4]) * det; + ictm[5] = (ctm[1] * ctm[4] - ctm[0] * ctm[5]) * det; + // m1 = PTM * BTM = PTM * base transform matrix + m1[0] = ptm[0] * btm[0] + ptm[1] * btm[2]; + m1[1] = ptm[0] * btm[1] + ptm[1] * btm[3]; + m1[2] = ptm[2] * btm[0] + ptm[3] * btm[2]; + m1[3] = ptm[2] * btm[1] + ptm[3] * btm[3]; + m1[4] = ptm[4] * btm[0] + ptm[5] * btm[2] + btm[4]; + m1[5] = ptm[4] * btm[1] + ptm[5] * btm[3] + btm[5]; + // m = m1 * iCTM = (PTM * BTM) * (iCTM) + m[0] = m1[0] * ictm[0] + m1[1] * ictm[2]; + m[1] = m1[0] * ictm[1] + m1[1] * ictm[3]; + m[2] = m1[2] * ictm[0] + m1[3] * ictm[2]; + m[3] = m1[2] * ictm[1] + m1[3] * ictm[3]; + m[4] = m1[4] * ictm[0] + m1[5] * ictm[2] + ictm[4]; + m[5] = m1[4] * ictm[1] + m1[5] * ictm[3] + ictm[5]; + + // set the new matrix + state->concatCTM(m[0], m[1], m[2], m[3], m[4], m[5]); + out->updateCTM(state, m[0], m[1], m[2], m[3], m[4], m[5]); + +#if 1 //~tmp: turn off anti-aliasing temporarily + GBool vaa = out->getVectorAntialias(); + if (vaa) { + out->setVectorAntialias(gFalse); + } +#endif + + // do shading type-specific operations + switch (shading->getType()) { + case 1: + doFunctionShFill((GfxFunctionShading *)shading); + break; + case 2: + doAxialShFill((GfxAxialShading *)shading); + break; + case 3: + doRadialShFill((GfxRadialShading *)shading); + break; + case 4: + case 5: + doGouraudTriangleShFill((GfxGouraudTriangleShading *)shading); + break; + case 6: + case 7: + doPatchMeshShFill((GfxPatchMeshShading *)shading); + break; + } + +#if 1 //~tmp: turn off anti-aliasing temporarily + if (vaa) { + out->setVectorAntialias(gTrue); + } +#endif + + // restore graphics state + restoreState(); + state->setPath(savedPath); +} + +void Gfx::opShFill(Object args[], int numArgs) { + GfxShading *shading; + GfxPath *savedPath; + double xMin, yMin, xMax, yMax; + + if (!(shading = res->lookupShading(args[0].getName(), this))) { + return; + } + + // save current graphics state + savedPath = state->getPath()->copy(); + saveState(); + + // clip to bbox + if (shading->getHasBBox()) { + shading->getBBox(&xMin, &yMin, &xMax, &yMax); + state->moveTo(xMin, yMin); + state->lineTo(xMax, yMin); + state->lineTo(xMax, yMax); + state->lineTo(xMin, yMax); + state->closePath(); + state->clip(); + out->clip(state); + state->clearPath(); + } + + // set the color space + state->setFillColorSpace(shading->getColorSpace()->copy()); + out->updateFillColorSpace(state); + +#if 1 //~tmp: turn off anti-aliasing temporarily + GBool vaa = out->getVectorAntialias(); + if (vaa) { + out->setVectorAntialias(gFalse); + } +#endif + + // do shading type-specific operations + switch (shading->getType()) { + case 1: + doFunctionShFill((GfxFunctionShading *)shading); + break; + case 2: + doAxialShFill((GfxAxialShading *)shading); + break; + case 3: + doRadialShFill((GfxRadialShading *)shading); + break; + case 4: + case 5: + doGouraudTriangleShFill((GfxGouraudTriangleShading *)shading); + break; + case 6: + case 7: + doPatchMeshShFill((GfxPatchMeshShading *)shading); + break; + } + +#if 1 //~tmp: turn off anti-aliasing temporarily + if (vaa) { + out->setVectorAntialias(gTrue); + } +#endif + + // restore graphics state + restoreState(); + state->setPath(savedPath); + + delete shading; +} + +void Gfx::doFunctionShFill(GfxFunctionShading *shading) { + double x0, y0, x1, y1; + GfxColor colors[4]; + + if (out->useShadedFills( shading->getType() ) && + out->functionShadedFill(state, shading)) { + return; + } + + shading->getDomain(&x0, &y0, &x1, &y1); + shading->getColor(x0, y0, &colors[0]); + shading->getColor(x0, y1, &colors[1]); + shading->getColor(x1, y0, &colors[2]); + shading->getColor(x1, y1, &colors[3]); + doFunctionShFill1(shading, x0, y0, x1, y1, colors, 0); +} + +void Gfx::doFunctionShFill1(GfxFunctionShading *shading, + double x0, double y0, + double x1, double y1, + GfxColor *colors, int depth) { + GfxColor fillColor; + GfxColor color0M, color1M, colorM0, colorM1, colorMM; + GfxColor colors2[4]; + double *matrix; + double xM, yM; + int nComps, i, j; + + nComps = shading->getColorSpace()->getNComps(); + matrix = shading->getMatrix(); + + // compare the four corner colors + for (i = 0; i < 4; ++i) { + for (j = 0; j < nComps; ++j) { + if (abs(colors[i].c[j] - colors[(i+1)&3].c[j]) > functionColorDelta) { + break; + } + } + if (j < nComps) { + break; + } + } + + // center of the rectangle + xM = 0.5 * (x0 + x1); + yM = 0.5 * (y0 + y1); + + // the four corner colors are close (or we hit the recursive limit) + // -- fill the rectangle; but require at least one subdivision + // (depth==0) to avoid problems when the four outer corners of the + // shaded region are the same color + if ((i == 4 && depth > 0) || depth == functionMaxDepth) { + + // use the center color + shading->getColor(xM, yM, &fillColor); + state->setFillColor(&fillColor); + out->updateFillColor(state); + + // fill the rectangle + state->moveTo(x0 * matrix[0] + y0 * matrix[2] + matrix[4], + x0 * matrix[1] + y0 * matrix[3] + matrix[5]); + state->lineTo(x1 * matrix[0] + y0 * matrix[2] + matrix[4], + x1 * matrix[1] + y0 * matrix[3] + matrix[5]); + state->lineTo(x1 * matrix[0] + y1 * matrix[2] + matrix[4], + x1 * matrix[1] + y1 * matrix[3] + matrix[5]); + state->lineTo(x0 * matrix[0] + y1 * matrix[2] + matrix[4], + x0 * matrix[1] + y1 * matrix[3] + matrix[5]); + state->closePath(); + if (!contentIsHidden()) + out->fill(state); + state->clearPath(); + + // the four corner colors are not close enough -- subdivide the + // rectangle + } else { + + // colors[0] colorM0 colors[2] + // (x0,y0) (xM,y0) (x1,y0) + // +----------+----------+ + // | | | + // | UL | UR | + // color0M | colorMM | color1M + // (x0,yM) +----------+----------+ (x1,yM) + // | (xM,yM) | + // | LL | LR | + // | | | + // +----------+----------+ + // colors[1] colorM1 colors[3] + // (x0,y1) (xM,y1) (x1,y1) + + shading->getColor(x0, yM, &color0M); + shading->getColor(x1, yM, &color1M); + shading->getColor(xM, y0, &colorM0); + shading->getColor(xM, y1, &colorM1); + shading->getColor(xM, yM, &colorMM); + + // upper-left sub-rectangle + colors2[0] = colors[0]; + colors2[1] = color0M; + colors2[2] = colorM0; + colors2[3] = colorMM; + doFunctionShFill1(shading, x0, y0, xM, yM, colors2, depth + 1); + + // lower-left sub-rectangle + colors2[0] = color0M; + colors2[1] = colors[1]; + colors2[2] = colorMM; + colors2[3] = colorM1; + doFunctionShFill1(shading, x0, yM, xM, y1, colors2, depth + 1); + + // upper-right sub-rectangle + colors2[0] = colorM0; + colors2[1] = colorMM; + colors2[2] = colors[2]; + colors2[3] = color1M; + doFunctionShFill1(shading, xM, y0, x1, yM, colors2, depth + 1); + + // lower-right sub-rectangle + colors2[0] = colorMM; + colors2[1] = colorM1; + colors2[2] = color1M; + colors2[3] = colors[3]; + doFunctionShFill1(shading, xM, yM, x1, y1, colors2, depth + 1); + } +} + +static void bubbleSort(double array[]) +{ + for (int j = 0; j < 3; ++j) { + int kk = j; + for (int k = j + 1; k < 4; ++k) { + if (array[k] < array[kk]) { + kk = k; + } + } + double tmp = array[j]; + array[j] = array[kk]; + array[kk] = tmp; + } +} + +void Gfx::doAxialShFill(GfxAxialShading *shading) { + double xMin, yMin, xMax, yMax; + double x0, y0, x1, y1; + double dx, dy, mul; + GBool dxZero, dyZero; + double bboxIntersections[4]; + double tMin, tMax, tx, ty; + double s[4], sMin, sMax, tmp; + double ux0, uy0, ux1, uy1, vx0, vy0, vx1, vy1; + double t0, t1, tt; + double ta[axialMaxSplits + 1]; + int next[axialMaxSplits + 1]; + GfxColor color0, color1; + int nComps; + int i, j, k; + GBool needExtend = gTrue; + + // get the clip region bbox + state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); + + // compute min and max t values, based on the four corners of the + // clip region bbox + shading->getCoords(&x0, &y0, &x1, &y1); + dx = x1 - x0; + dy = y1 - y0; + dxZero = fabs(dx) < 0.01; + dyZero = fabs(dy) < 0.01; + if (dxZero && dyZero) { + tMin = tMax = 0; + } else { + mul = 1 / (dx * dx + dy * dy); + bboxIntersections[0] = ((xMin - x0) * dx + (yMin - y0) * dy) * mul; + bboxIntersections[1] = ((xMin - x0) * dx + (yMax - y0) * dy) * mul; + bboxIntersections[2] = ((xMax - x0) * dx + (yMin - y0) * dy) * mul; + bboxIntersections[3] = ((xMax - x0) * dx + (yMax - y0) * dy) * mul; + bubbleSort(bboxIntersections); + tMin = bboxIntersections[0]; + tMax = bboxIntersections[3]; + if (tMin < 0 && !shading->getExtend0()) { + tMin = 0; + } + if (tMax > 1 && !shading->getExtend1()) { + tMax = 1; + } + } + + if (out->useShadedFills( shading->getType() ) && + out->axialShadedFill(state, shading, tMin, tMax)) { + return; + } + + // get the function domain + t0 = shading->getDomain0(); + t1 = shading->getDomain1(); + + // Traverse the t axis and do the shading. + // + // For each point (tx, ty) on the t axis, consider a line through + // that point perpendicular to the t axis: + // + // x(s) = tx + s * -dy --> s = (x - tx) / -dy + // y(s) = ty + s * dx --> s = (y - ty) / dx + // + // Then look at the intersection of this line with the bounding box + // (xMin, yMin, xMax, yMax). In the general case, there are four + // intersection points: + // + // s0 = (xMin - tx) / -dy + // s1 = (xMax - tx) / -dy + // s2 = (yMin - ty) / dx + // s3 = (yMax - ty) / dx + // + // and we want the middle two s values. + // + // In the case where dx = 0, take s0 and s1; in the case where dy = + // 0, take s2 and s3. + // + // Each filled polygon is bounded by two of these line segments + // perpdendicular to the t axis. + // + // The t axis is bisected into smaller regions until the color + // difference across a region is small enough, and then the region + // is painted with a single color. + + // set up: require at least one split to avoid problems when the two + // ends of the t axis have the same color + nComps = shading->getColorSpace()->getNComps(); + ta[0] = tMin; + next[0] = axialMaxSplits / 2; + ta[axialMaxSplits / 2] = 0.5 * (tMin + tMax); + next[axialMaxSplits / 2] = axialMaxSplits; + ta[axialMaxSplits] = tMax; + + // compute the color at t = tMin + if (tMin < 0) { + tt = t0; + } else if (tMin > 1) { + tt = t1; + } else { + tt = t0 + (t1 - t0) * tMin; + } + shading->getColor(tt, &color0); + + if (out->useFillColorStop()) { + // make sure we add stop color when t = tMin + state->setFillColor(&color0); + out->updateFillColorStop(state, 0); + } + + // compute the coordinates of the point on the t axis at t = tMin; + // then compute the intersection of the perpendicular line with the + // bounding box + tx = x0 + tMin * dx; + ty = y0 + tMin * dy; + if (dxZero && dyZero) { + sMin = sMax = 0; + } else if (dxZero) { + sMin = (xMin - tx) / -dy; + sMax = (xMax - tx) / -dy; + if (sMin > sMax) { tmp = sMin; sMin = sMax; sMax = tmp; } + } else if (dyZero) { + sMin = (yMin - ty) / dx; + sMax = (yMax - ty) / dx; + if (sMin > sMax) { tmp = sMin; sMin = sMax; sMax = tmp; } + } else { + s[0] = (yMin - ty) / dx; + s[1] = (yMax - ty) / dx; + s[2] = (xMin - tx) / -dy; + s[3] = (xMax - tx) / -dy; + bubbleSort(s); + sMin = s[1]; + sMax = s[2]; + } + ux0 = tx - sMin * dy; + uy0 = ty + sMin * dx; + vx0 = tx - sMax * dy; + vy0 = ty + sMax * dx; + + i = 0; + bool doneBBox1, doneBBox2; + if (dxZero && dyZero) { + doneBBox1 = doneBBox2 = true; + } else { + doneBBox1 = bboxIntersections[1] < tMin; + doneBBox2 = bboxIntersections[2] > tMax; + } + + // If output device doesn't support the extended mode required + // we have to do it here + needExtend = !out->axialShadedSupportExtend(state, shading); + + while (i < axialMaxSplits) { + + // bisect until color difference is small enough or we hit the + // bisection limit + j = next[i]; + while (j > i + 1) { + if (ta[j] < 0) { + tt = t0; + } else if (ta[j] > 1) { + tt = t1; + } else { + tt = t0 + (t1 - t0) * ta[j]; + } + shading->getColor(tt, &color1); + if (isSameGfxColor(color1, color0, nComps, axialColorDelta)) { + // in these two if what we guarantee is that if we are skipping lots of + // positions because the colors are the same, we still create a region + // with vertexs passing by bboxIntersections[1] and bboxIntersections[2] + // otherwise we can have empty regions that should really be painted + // like happened in bug 19896 + // What we do to ensure that we pass a line through this points + // is making sure use the exact bboxIntersections[] value as one of the used ta[] values + if (!doneBBox1 && ta[i] < bboxIntersections[1] && ta[j] > bboxIntersections[1]) { + int teoricalj = (int) ((bboxIntersections[1] - tMin) * axialMaxSplits / (tMax - tMin)); + if (teoricalj <= i) teoricalj = i + 1; + if (teoricalj < j) { + next[i] = teoricalj; + next[teoricalj] = j; + } + else { + teoricalj = j; + } + ta[teoricalj] = bboxIntersections[1]; + j = teoricalj; + doneBBox1 = true; + } + if (!doneBBox2 && ta[i] < bboxIntersections[2] && ta[j] > bboxIntersections[2]) { + int teoricalj = (int) ((bboxIntersections[2] - tMin) * axialMaxSplits / (tMax - tMin)); + if (teoricalj <= i) teoricalj = i + 1; + if (teoricalj < j) { + next[i] = teoricalj; + next[teoricalj] = j; + } + else { + teoricalj = j; + } + ta[teoricalj] = bboxIntersections[2]; + j = teoricalj; + doneBBox2 = true; + } + break; + } + k = (i + j) / 2; + ta[k] = 0.5 * (ta[i] + ta[j]); + next[i] = k; + next[k] = j; + j = k; + } + + // use the average of the colors of the two sides of the region + for (k = 0; k < nComps; ++k) { + color0.c[k] = (color0.c[k] + color1.c[k]) / 2; + } + + // compute the coordinates of the point on the t axis; then + // compute the intersection of the perpendicular line with the + // bounding box + tx = x0 + ta[j] * dx; + ty = y0 + ta[j] * dy; + if (dxZero && dyZero) { + sMin = sMax = 0; + } else if (dxZero) { + sMin = (xMin - tx) / -dy; + sMax = (xMax - tx) / -dy; + if (sMin > sMax) { tmp = sMin; sMin = sMax; sMax = tmp; } + } else if (dyZero) { + sMin = (yMin - ty) / dx; + sMax = (yMax - ty) / dx; + if (sMin > sMax) { tmp = sMin; sMin = sMax; sMax = tmp; } + } else { + s[0] = (yMin - ty) / dx; + s[1] = (yMax - ty) / dx; + s[2] = (xMin - tx) / -dy; + s[3] = (xMax - tx) / -dy; + bubbleSort(s); + sMin = s[1]; + sMax = s[2]; + } + ux1 = tx - sMin * dy; + uy1 = ty + sMin * dx; + vx1 = tx - sMax * dy; + vy1 = ty + sMax * dx; + + // set the color + state->setFillColor(&color0); + if (out->useFillColorStop()) + out->updateFillColorStop(state, (ta[j] - tMin)/(tMax - tMin)); + else + out->updateFillColor(state); + + if (needExtend) { + // fill the region + state->moveTo(ux0, uy0); + state->lineTo(vx0, vy0); + state->lineTo(vx1, vy1); + state->lineTo(ux1, uy1); + state->closePath(); + } + + if (!out->useFillColorStop()) { + if (!contentIsHidden()) + out->fill(state); + state->clearPath(); + } + + // set up for next region + ux0 = ux1; + uy0 = uy1; + vx0 = vx1; + vy0 = vy1; + color0 = color1; + i = next[i]; + } + + if (out->useFillColorStop()) { + if (!needExtend) { + state->moveTo(xMin, yMin); + state->lineTo(xMin, yMax); + state->lineTo(xMax, yMax); + state->lineTo(xMax, yMin); + state->closePath(); + } + if (!contentIsHidden()) + out->fill(state); + state->clearPath(); + } +} + +static inline void getShadingColorRadialHelper(double t0, double t1, double t, GfxRadialShading *shading, GfxColor *color) +{ + if (t0 < t1) { + if (t < t0) { + shading->getColor(t0, color); + } else if (t > t1) { + shading->getColor(t1, color); + } else { + shading->getColor(t, color); + } + } else { + if (t > t0) { + shading->getColor(t0, color); + } else if (t < t1) { + shading->getColor(t1, color); + } else { + shading->getColor(t, color); + } + } +} + +void Gfx::doRadialShFill(GfxRadialShading *shading) { + double xMin, yMin, xMax, yMax; + double x0, y0, r0, x1, y1, r1, t0, t1; + int nComps; + GfxColor colorA, colorB; + double xa, ya, xb, yb, ra, rb; + double ta, tb, sa, sb; + double sz, xz, yz, sMin, sMax; + GBool enclosed; + int ia, ib, k, n; + double *ctm; + double theta, alpha, angle, t; + GBool needExtend = gTrue; + + // get the shading info + shading->getCoords(&x0, &y0, &r0, &x1, &y1, &r1); + t0 = shading->getDomain0(); + t1 = shading->getDomain1(); + nComps = shading->getColorSpace()->getNComps(); + + // Compute the point at which r(s) = 0; check for the enclosed + // circles case; and compute the angles for the tangent lines. + if (x0 == x1 && y0 == y1) { + enclosed = gTrue; + theta = 0; // make gcc happy + sz = 0; // make gcc happy + } else if (r0 == r1) { + enclosed = gFalse; + theta = 0; + sz = 0; // make gcc happy + } else { + sz = (r1 > r0) ? -r0 / (r1 - r0) : -r1 / (r0 - r1); + xz = x0 + sz * (x1 - x0); + yz = y0 + sz * (y1 - y0); + enclosed = (xz - x0) * (xz - x0) + (yz - y0) * (yz - y0) <= r0 * r0; + theta = asin(r0 / sqrt((x0 - xz) * (x0 - xz) + (y0 - yz) * (y0 - yz))); + if (r0 > r1) { + theta = -theta; + } + } + if (enclosed) { + alpha = 0; + } else { + alpha = atan2(y1 - y0, x1 - x0); + } + + // compute the (possibly extended) s range + state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); + if (enclosed) { + sMin = 0; + sMax = 1; + } else { + sMin = 1; + sMax = 0; + // solve for x(s) + r(s) = xMin + if ((x1 + r1) - (x0 + r0) != 0) { + sa = (xMin - (x0 + r0)) / ((x1 + r1) - (x0 + r0)); + if (sa < sMin) { + sMin = sa; + } else if (sa > sMax) { + sMax = sa; + } + } + // solve for x(s) - r(s) = xMax + if ((x1 - r1) - (x0 - r0) != 0) { + sa = (xMax - (x0 - r0)) / ((x1 - r1) - (x0 - r0)); + if (sa < sMin) { + sMin = sa; + } else if (sa > sMax) { + sMax = sa; + } + } + // solve for y(s) + r(s) = yMin + if ((y1 + r1) - (y0 + r0) != 0) { + sa = (yMin - (y0 + r0)) / ((y1 + r1) - (y0 + r0)); + if (sa < sMin) { + sMin = sa; + } else if (sa > sMax) { + sMax = sa; + } + } + // solve for y(s) - r(s) = yMax + if ((y1 - r1) - (y0 - r0) != 0) { + sa = (yMax - (y0 - r0)) / ((y1 - r1) - (y0 - r0)); + if (sa < sMin) { + sMin = sa; + } else if (sa > sMax) { + sMax = sa; + } + } + // check against sz + if (r0 < r1) { + if (sMin < sz) { + sMin = sz; + } + } else if (r0 > r1) { + if (sMax > sz) { + sMax = sz; + } + } + // check the 'extend' flags + if (!shading->getExtend0() && sMin < 0) { + sMin = 0; + } + if (!shading->getExtend1() && sMax > 1) { + sMax = 1; + } + } + + if (out->useShadedFills( shading->getType() ) && + out->radialShadedFill(state, shading, sMin, sMax)) { + return; + } + + // compute the number of steps into which circles must be divided to + // achieve a curve flatness of 0.1 pixel in device space for the + // largest circle (note that "device space" is 72 dpi when generating + // PostScript, hence the relatively small 0.1 pixel accuracy) + ctm = state->getCTM(); + t = fabs(ctm[0]); + if (fabs(ctm[1]) > t) { + t = fabs(ctm[1]); + } + if (fabs(ctm[2]) > t) { + t = fabs(ctm[2]); + } + if (fabs(ctm[3]) > t) { + t = fabs(ctm[3]); + } + if (r0 > r1) { + t *= r0; + } else { + t *= r1; + } + if (t < 1) { + n = 3; + } else { + n = (int)(M_PI / acos(1 - 0.1 / t)); + if (n < 3) { + n = 3; + } else if (n > 200) { + n = 200; + } + } + + // setup for the start circle + ia = 0; + sa = sMin; + ta = t0 + sa * (t1 - t0); + xa = x0 + sa * (x1 - x0); + ya = y0 + sa * (y1 - y0); + ra = r0 + sa * (r1 - r0); + getShadingColorRadialHelper(t0, t1, ta, shading, &colorA); + + needExtend = !out->radialShadedSupportExtend(state, shading); + + // fill the circles + while (ia < radialMaxSplits) { + + // go as far along the t axis (toward t1) as we can, such that the + // color difference is within the tolerance (radialColorDelta) -- + // this uses bisection (between the current value, t, and t1), + // limited to radialMaxSplits points along the t axis; require at + // least one split to avoid problems when the innermost and + // outermost colors are the same + ib = radialMaxSplits; + sb = sMax; + tb = t0 + sb * (t1 - t0); + getShadingColorRadialHelper(t0, t1, tb, shading, &colorB); + while (ib - ia > 1) { + if (isSameGfxColor(colorB, colorA, nComps, radialColorDelta)) { + // The shading is not necessarily lineal so having two points with the + // same color does not mean all the areas in between have the same color too + int ic = ia + 1; + for (; ic <= ib; ic++) { + GfxColor colorC; + const double sc = sMin + ((double)ic / (double)radialMaxSplits) * (sMax - sMin); + const double tc = t0 + sc * (t1 - t0); + getShadingColorRadialHelper(t0, t1, tc, shading, &colorC); + if (!isSameGfxColor(colorC, colorA, nComps, radialColorDelta)) { + break; + } + } + ib = (ic > ia + 1) ? ic - 1 : ia + 1; + sb = sMin + ((double)ib / (double)radialMaxSplits) * (sMax - sMin); + tb = t0 + sb * (t1 - t0); + getShadingColorRadialHelper(t0, t1, tb, shading, &colorB); + break; + } + ib = (ia + ib) / 2; + sb = sMin + ((double)ib / (double)radialMaxSplits) * (sMax - sMin); + tb = t0 + sb * (t1 - t0); + getShadingColorRadialHelper(t0, t1, tb, shading, &colorB); + } + + // compute center and radius of the circle + xb = x0 + sb * (x1 - x0); + yb = y0 + sb * (y1 - y0); + rb = r0 + sb * (r1 - r0); + + // use the average of the colors at the two circles + for (k = 0; k < nComps; ++k) { + colorA.c[k] = (colorA.c[k] + colorB.c[k]) / 2; + } + state->setFillColor(&colorA); + if (out->useFillColorStop()) + out->updateFillColorStop(state, (sa - sMin)/(sMax - sMin)); + else + out->updateFillColor(state); + + if (needExtend) { + if (enclosed) { + // construct path for first circle (counterclockwise) + state->moveTo(xa + ra, ya); + for (k = 1; k < n; ++k) { + angle = ((double)k / (double)n) * 2 * M_PI; + state->lineTo(xa + ra * cos(angle), ya + ra * sin(angle)); + } + state->closePath(); + + // construct and append path for second circle (clockwise) + state->moveTo(xb + rb, yb); + for (k = 1; k < n; ++k) { + angle = -((double)k / (double)n) * 2 * M_PI; + state->lineTo(xb + rb * cos(angle), yb + rb * sin(angle)); + } + state->closePath(); + } else { + // construct the first subpath (clockwise) + state->moveTo(xa + ra * cos(alpha + theta + 0.5 * M_PI), + ya + ra * sin(alpha + theta + 0.5 * M_PI)); + for (k = 0; k < n; ++k) { + angle = alpha + theta + 0.5 * M_PI + - ((double)k / (double)n) * (2 * theta + M_PI); + state->lineTo(xb + rb * cos(angle), yb + rb * sin(angle)); + } + for (k = 0; k < n; ++k) { + angle = alpha - theta - 0.5 * M_PI + + ((double)k / (double)n) * (2 * theta - M_PI); + state->lineTo(xa + ra * cos(angle), ya + ra * sin(angle)); + } + state->closePath(); + + // construct the second subpath (counterclockwise) + state->moveTo(xa + ra * cos(alpha + theta + 0.5 * M_PI), + ya + ra * sin(alpha + theta + 0.5 * M_PI)); + for (k = 0; k < n; ++k) { + angle = alpha + theta + 0.5 * M_PI + + ((double)k / (double)n) * (-2 * theta + M_PI); + state->lineTo(xb + rb * cos(angle), yb + rb * sin(angle)); + } + for (k = 0; k < n; ++k) { + angle = alpha - theta - 0.5 * M_PI + + ((double)k / (double)n) * (2 * theta + M_PI); + state->lineTo(xa + ra * cos(angle), ya + ra * sin(angle)); + } + state->closePath(); + } + } + + if (!out->useFillColorStop()) { + // fill the path + if (!contentIsHidden()) + out->fill(state); + state->clearPath(); + } + + // step to the next value of t + ia = ib; + sa = sb; + ta = tb; + xa = xb; + ya = yb; + ra = rb; + colorA = colorB; + } + + if (out->useFillColorStop()) { + // make sure we add stop color when sb = sMax + state->setFillColor(&colorA); + out->updateFillColorStop(state, (sb - sMin)/(sMax - sMin)); + + // fill the path + state->moveTo(xMin, yMin); + state->lineTo(xMin, yMax); + state->lineTo(xMax, yMax); + state->lineTo(xMax, yMin); + state->closePath(); + + if (!contentIsHidden()) + out->fill(state); + state->clearPath(); + } + + if (!needExtend) + return; + + if (enclosed) { + // extend the smaller circle + if ((shading->getExtend0() && r0 <= r1) || + (shading->getExtend1() && r1 < r0)) { + if (r0 <= r1) { + ta = t0; + ra = r0; + xa = x0; + ya = y0; + } else { + ta = t1; + ra = r1; + xa = x1; + ya = y1; + } + shading->getColor(ta, &colorA); + state->setFillColor(&colorA); + out->updateFillColor(state); + state->moveTo(xa + ra, ya); + for (k = 1; k < n; ++k) { + angle = ((double)k / (double)n) * 2 * M_PI; + state->lineTo(xa + ra * cos(angle), ya + ra * sin(angle)); + } + state->closePath(); + if (!contentIsHidden()) + out->fill(state); + state->clearPath(); + } + + // extend the larger circle + if ((shading->getExtend0() && r0 > r1) || + (shading->getExtend1() && r1 >= r0)) { + if (r0 > r1) { + ta = t0; + ra = r0; + xa = x0; + ya = y0; + } else { + ta = t1; + ra = r1; + xa = x1; + ya = y1; + } + shading->getColor(ta, &colorA); + state->setFillColor(&colorA); + out->updateFillColor(state); + state->moveTo(xMin, yMin); + state->lineTo(xMin, yMax); + state->lineTo(xMax, yMax); + state->lineTo(xMax, yMin); + state->closePath(); + state->moveTo(xa + ra, ya); + for (k = 1; k < n; ++k) { + angle = ((double)k / (double)n) * 2 * M_PI; + state->lineTo(xa + ra * cos(angle), ya + ra * sin(angle)); + } + state->closePath(); + if (!contentIsHidden()) + out->fill(state); + state->clearPath(); + } + } +} + +void Gfx::doGouraudTriangleShFill(GfxGouraudTriangleShading *shading) { + double x0, y0, x1, y1, x2, y2; + int i; + + if (out->useShadedFills( shading->getType()) && !contentIsHidden()) { + if (out->gouraudTriangleShadedFill( state, shading)) + return; + } + + // preallocate a path (speed improvements) + state->moveTo(0., 0.); + state->lineTo(1., 0.); + state->lineTo(0., 1.); + state->closePath(); + + GfxState::ReusablePathIterator *reusablePath = state->getReusablePath(); + + if (shading->isParameterized()) { + // work with parameterized values: + double color0, color1, color2; + // a relative threshold: + const double refineColorThreshold = gouraudParameterizedColorDelta * + (shading->getParameterDomainMax() - shading->getParameterDomainMin()); + for (i = 0; i < shading->getNTriangles(); ++i) { + shading->getTriangle(i, &x0, &y0, &color0, + &x1, &y1, &color1, + &x2, &y2, &color2); + gouraudFillTriangle(x0, y0, color0, x1, y1, color1, x2, y2, color2, refineColorThreshold, 0, shading, reusablePath); + } + + } else { + // this always produces output -- even for parameterized ranges. + // But it ignores the parameterized color map (the function). + // + // Note that using this code in for parameterized shadings might be + // correct in circumstances (namely if the function is linear in the actual + // triangle), but in general, it will simply be wrong. + GfxColor color0, color1, color2; + for (i = 0; i < shading->getNTriangles(); ++i) { + shading->getTriangle(i, &x0, &y0, &color0, + &x1, &y1, &color1, + &x2, &y2, &color2); + gouraudFillTriangle(x0, y0, &color0, x1, y1, &color1, x2, y2, &color2, shading->getColorSpace()->getNComps(), 0, reusablePath); + } + } + + delete reusablePath; +} + +void Gfx::gouraudFillTriangle(double x0, double y0, GfxColor *color0, + double x1, double y1, GfxColor *color1, + double x2, double y2, GfxColor *color2, + int nComps, int depth, GfxState::ReusablePathIterator *path) { + double x01, y01, x12, y12, x20, y20; + GfxColor color01, color12, color20; + int i; + + for (i = 0; i < nComps; ++i) { + if (abs(color0->c[i] - color1->c[i]) > gouraudColorDelta || + abs(color1->c[i] - color2->c[i]) > gouraudColorDelta) { + break; + } + } + if (i == nComps || depth == gouraudMaxDepth) { + state->setFillColor(color0); + out->updateFillColor(state); + + path->reset(); assert(!path->isEnd()); + path->setCoord(x0,y0); path->next(); assert(!path->isEnd()); + path->setCoord(x1,y1); path->next(); assert(!path->isEnd()); + path->setCoord(x2,y2); path->next(); assert(!path->isEnd()); + path->setCoord(x0,y0); path->next(); assert( path->isEnd()); + + if (!contentIsHidden()) + out->fill(state); + } else { + x01 = 0.5 * (x0 + x1); + y01 = 0.5 * (y0 + y1); + x12 = 0.5 * (x1 + x2); + y12 = 0.5 * (y1 + y2); + x20 = 0.5 * (x2 + x0); + y20 = 0.5 * (y2 + y0); + for (i = 0; i < nComps; ++i) { + color01.c[i] = (color0->c[i] + color1->c[i]) / 2; + color12.c[i] = (color1->c[i] + color2->c[i]) / 2; + color20.c[i] = (color2->c[i] + color0->c[i]) / 2; + } + gouraudFillTriangle(x0, y0, color0, x01, y01, &color01, + x20, y20, &color20, nComps, depth + 1, path); + gouraudFillTriangle(x01, y01, &color01, x1, y1, color1, + x12, y12, &color12, nComps, depth + 1, path); + gouraudFillTriangle(x01, y01, &color01, x12, y12, &color12, + x20, y20, &color20, nComps, depth + 1, path); + gouraudFillTriangle(x20, y20, &color20, x12, y12, &color12, + x2, y2, color2, nComps, depth + 1, path); + } +} +void Gfx::gouraudFillTriangle(double x0, double y0, double color0, + double x1, double y1, double color1, + double x2, double y2, double color2, + double refineColorThreshold, int depth, GfxGouraudTriangleShading *shading, GfxState::ReusablePathIterator *path) { + const double meanColor = (color0 + color1 + color2) / 3; + + const bool isFineEnough = + fabs(color0 - meanColor) < refineColorThreshold && + fabs(color1 - meanColor) < refineColorThreshold && + fabs(color2 - meanColor) < refineColorThreshold; + + if (isFineEnough || depth == gouraudMaxDepth) { + GfxColor color; + + shading->getParameterizedColor(meanColor, &color); + state->setFillColor(&color); + out->updateFillColor(state); + + path->reset(); assert(!path->isEnd()); + path->setCoord(x0,y0); path->next(); assert(!path->isEnd()); + path->setCoord(x1,y1); path->next(); assert(!path->isEnd()); + path->setCoord(x2,y2); path->next(); assert(!path->isEnd()); + path->setCoord(x0,y0); path->next(); assert( path->isEnd()); + + if (!contentIsHidden()) + out->fill(state); + } else { + const double x01 = 0.5 * (x0 + x1); + const double y01 = 0.5 * (y0 + y1); + const double x12 = 0.5 * (x1 + x2); + const double y12 = 0.5 * (y1 + y2); + const double x20 = 0.5 * (x2 + x0); + const double y20 = 0.5 * (y2 + y0); + const double color01 = (color0 + color1) / 2.; + const double color12 = (color1 + color2) / 2.; + const double color20 = (color2 + color0) / 2.; + ++depth; + gouraudFillTriangle(x0, y0, color0, + x01, y01, color01, + x20, y20, color20, + refineColorThreshold, depth, shading, path); + gouraudFillTriangle(x01, y01, color01, + x1, y1, color1, + x12, y12, color12, + refineColorThreshold, depth, shading, path); + gouraudFillTriangle(x01, y01, color01, + x12, y12, color12, + x20, y20, color20, + refineColorThreshold, depth, shading, path); + gouraudFillTriangle(x20, y20, color20, + x12, y12, color12, + x2, y2, color2, + refineColorThreshold, depth, shading, path); + } +} + +void Gfx::doPatchMeshShFill(GfxPatchMeshShading *shading) { + int start, i; + + if (out->useShadedFills( shading->getType()) && !contentIsHidden()) { + if (out->patchMeshShadedFill( state, shading)) + return; + } + + if (shading->getNPatches() > 128) { + start = 3; + } else if (shading->getNPatches() > 64) { + start = 2; + } else if (shading->getNPatches() > 16) { + start = 1; + } else { + start = 0; + } + /* + * Parameterized shadings take one parameter [t_0,t_e] + * and map it into the color space. + * + * Consequently, all color values are stored as doubles. + * + * These color values are interpreted as parameters for parameterized + * shadings and as colorspace entities otherwise. + * + * The only difference is that color space entities are stored into + * DOUBLE arrays, not into arrays of type GfxColorComp. + */ + const int colorComps = shading->getColorSpace()->getNComps(); + double refineColorThreshold; + if( shading->isParameterized() ) { + refineColorThreshold = gouraudParameterizedColorDelta * + (shading->getParameterDomainMax() - shading->getParameterDomainMin()); + + } else { + refineColorThreshold = patchColorDelta; + } + + for (i = 0; i < shading->getNPatches(); ++i) { + fillPatch(shading->getPatch(i), + colorComps, + shading->isParameterized() ? 1 : colorComps, + refineColorThreshold, + start, + shading); + } +} + + +void Gfx::fillPatch(GfxPatch *patch, int colorComps, int patchColorComps, double refineColorThreshold, int depth, GfxPatchMeshShading *shading) { + GfxPatch patch00, patch01, patch10, patch11; + double xx[4][8], yy[4][8]; + double xxm, yym; + int i; + + for (i = 0; i < patchColorComps; ++i) { + // these comparisons are done in double arithmetics. + // + // For non-parameterized shadings, they are done in color space + // components. + if (fabs(patch->color[0][0].c[i] - patch->color[0][1].c[i]) > refineColorThreshold || + fabs(patch->color[0][1].c[i] - patch->color[1][1].c[i]) > refineColorThreshold || + fabs(patch->color[1][1].c[i] - patch->color[1][0].c[i]) > refineColorThreshold || + fabs(patch->color[1][0].c[i] - patch->color[0][0].c[i]) > refineColorThreshold) { + break; + } + } + if (i == patchColorComps || depth == patchMaxDepth) { + GfxColor flatColor; + if( shading->isParameterized() ) { + shading->getParameterizedColor( patch->color[0][0].c[0], &flatColor ); + } else { + for( i = 0; i<colorComps; ++i ) { + // simply cast to the desired type; that's all what is needed. + flatColor.c[i] = GfxColorComp(patch->color[0][0].c[i]); + } + } + state->setFillColor(&flatColor); + out->updateFillColor(state); + state->moveTo(patch->x[0][0], patch->y[0][0]); + state->curveTo(patch->x[0][1], patch->y[0][1], + patch->x[0][2], patch->y[0][2], + patch->x[0][3], patch->y[0][3]); + state->curveTo(patch->x[1][3], patch->y[1][3], + patch->x[2][3], patch->y[2][3], + patch->x[3][3], patch->y[3][3]); + state->curveTo(patch->x[3][2], patch->y[3][2], + patch->x[3][1], patch->y[3][1], + patch->x[3][0], patch->y[3][0]); + state->curveTo(patch->x[2][0], patch->y[2][0], + patch->x[1][0], patch->y[1][0], + patch->x[0][0], patch->y[0][0]); + state->closePath(); + if (!contentIsHidden()) + out->fill(state); + state->clearPath(); + } else { + for (i = 0; i < 4; ++i) { + xx[i][0] = patch->x[i][0]; + yy[i][0] = patch->y[i][0]; + xx[i][1] = 0.5 * (patch->x[i][0] + patch->x[i][1]); + yy[i][1] = 0.5 * (patch->y[i][0] + patch->y[i][1]); + xxm = 0.5 * (patch->x[i][1] + patch->x[i][2]); + yym = 0.5 * (patch->y[i][1] + patch->y[i][2]); + xx[i][6] = 0.5 * (patch->x[i][2] + patch->x[i][3]); + yy[i][6] = 0.5 * (patch->y[i][2] + patch->y[i][3]); + xx[i][2] = 0.5 * (xx[i][1] + xxm); + yy[i][2] = 0.5 * (yy[i][1] + yym); + xx[i][5] = 0.5 * (xxm + xx[i][6]); + yy[i][5] = 0.5 * (yym + yy[i][6]); + xx[i][3] = xx[i][4] = 0.5 * (xx[i][2] + xx[i][5]); + yy[i][3] = yy[i][4] = 0.5 * (yy[i][2] + yy[i][5]); + xx[i][7] = patch->x[i][3]; + yy[i][7] = patch->y[i][3]; + } + for (i = 0; i < 4; ++i) { + patch00.x[0][i] = xx[0][i]; + patch00.y[0][i] = yy[0][i]; + patch00.x[1][i] = 0.5 * (xx[0][i] + xx[1][i]); + patch00.y[1][i] = 0.5 * (yy[0][i] + yy[1][i]); + xxm = 0.5 * (xx[1][i] + xx[2][i]); + yym = 0.5 * (yy[1][i] + yy[2][i]); + patch10.x[2][i] = 0.5 * (xx[2][i] + xx[3][i]); + patch10.y[2][i] = 0.5 * (yy[2][i] + yy[3][i]); + patch00.x[2][i] = 0.5 * (patch00.x[1][i] + xxm); + patch00.y[2][i] = 0.5 * (patch00.y[1][i] + yym); + patch10.x[1][i] = 0.5 * (xxm + patch10.x[2][i]); + patch10.y[1][i] = 0.5 * (yym + patch10.y[2][i]); + patch00.x[3][i] = 0.5 * (patch00.x[2][i] + patch10.x[1][i]); + patch00.y[3][i] = 0.5 * (patch00.y[2][i] + patch10.y[1][i]); + patch10.x[0][i] = patch00.x[3][i]; + patch10.y[0][i] = patch00.y[3][i]; + patch10.x[3][i] = xx[3][i]; + patch10.y[3][i] = yy[3][i]; + } + for (i = 4; i < 8; ++i) { + patch01.x[0][i-4] = xx[0][i]; + patch01.y[0][i-4] = yy[0][i]; + patch01.x[1][i-4] = 0.5 * (xx[0][i] + xx[1][i]); + patch01.y[1][i-4] = 0.5 * (yy[0][i] + yy[1][i]); + xxm = 0.5 * (xx[1][i] + xx[2][i]); + yym = 0.5 * (yy[1][i] + yy[2][i]); + patch11.x[2][i-4] = 0.5 * (xx[2][i] + xx[3][i]); + patch11.y[2][i-4] = 0.5 * (yy[2][i] + yy[3][i]); + patch01.x[2][i-4] = 0.5 * (patch01.x[1][i-4] + xxm); + patch01.y[2][i-4] = 0.5 * (patch01.y[1][i-4] + yym); + patch11.x[1][i-4] = 0.5 * (xxm + patch11.x[2][i-4]); + patch11.y[1][i-4] = 0.5 * (yym + patch11.y[2][i-4]); + patch01.x[3][i-4] = 0.5 * (patch01.x[2][i-4] + patch11.x[1][i-4]); + patch01.y[3][i-4] = 0.5 * (patch01.y[2][i-4] + patch11.y[1][i-4]); + patch11.x[0][i-4] = patch01.x[3][i-4]; + patch11.y[0][i-4] = patch01.y[3][i-4]; + patch11.x[3][i-4] = xx[3][i]; + patch11.y[3][i-4] = yy[3][i]; + } + for (i = 0; i < patchColorComps; ++i) { + patch00.color[0][0].c[i] = patch->color[0][0].c[i]; + patch00.color[0][1].c[i] = (patch->color[0][0].c[i] + + patch->color[0][1].c[i]) / 2; + patch01.color[0][0].c[i] = patch00.color[0][1].c[i]; + patch01.color[0][1].c[i] = patch->color[0][1].c[i]; + patch01.color[1][1].c[i] = (patch->color[0][1].c[i] + + patch->color[1][1].c[i]) / 2; + patch11.color[0][1].c[i] = patch01.color[1][1].c[i]; + patch11.color[1][1].c[i] = patch->color[1][1].c[i]; + patch11.color[1][0].c[i] = (patch->color[1][1].c[i] + + patch->color[1][0].c[i]) / 2; + patch10.color[1][1].c[i] = patch11.color[1][0].c[i]; + patch10.color[1][0].c[i] = patch->color[1][0].c[i]; + patch10.color[0][0].c[i] = (patch->color[1][0].c[i] + + patch->color[0][0].c[i]) / 2; + patch00.color[1][0].c[i] = patch10.color[0][0].c[i]; + patch00.color[1][1].c[i] = (patch00.color[1][0].c[i] + + patch01.color[1][1].c[i]) / 2; + patch01.color[1][0].c[i] = patch00.color[1][1].c[i]; + patch11.color[0][0].c[i] = patch00.color[1][1].c[i]; + patch10.color[0][1].c[i] = patch00.color[1][1].c[i]; + } + fillPatch(&patch00, colorComps, patchColorComps, refineColorThreshold, depth + 1, shading); + fillPatch(&patch10, colorComps, patchColorComps, refineColorThreshold, depth + 1, shading); + fillPatch(&patch01, colorComps, patchColorComps, refineColorThreshold, depth + 1, shading); + fillPatch(&patch11, colorComps, patchColorComps, refineColorThreshold, depth + 1, shading); + } +} + +void Gfx::doEndPath() { + if (state->isCurPt() && clip != clipNone) { + state->clip(); + if (clip == clipNormal) { + out->clip(state); + } else { + out->eoClip(state); + } + } + clip = clipNone; + state->clearPath(); +} + +//------------------------------------------------------------------------ +// path clipping operators +//------------------------------------------------------------------------ + +void Gfx::opClip(Object args[], int numArgs) { + clip = clipNormal; +} + +void Gfx::opEOClip(Object args[], int numArgs) { + clip = clipEO; +} + +//------------------------------------------------------------------------ +// text object operators +//------------------------------------------------------------------------ + +void Gfx::opBeginText(Object args[], int numArgs) { + out->beginTextObject(state); + drawText = gTrue; + state->setTextMat(1, 0, 0, 1, 0, 0); + state->textMoveTo(0, 0); + out->updateTextMat(state); + out->updateTextPos(state); + fontChanged = gTrue; + if (!(state->getRender() & 4) && out->supportTextCSPattern(state)) { + textHaveCSPattern = gTrue; + } +} + +void Gfx::opEndText(Object args[], int numArgs) { + GBool needFill = out->deviceHasTextClip(state); + out->endTextObject(state); + drawText = gFalse; + if (textHaveCSPattern) { + if (needFill) { + doPatternFill(gTrue); + } + out->restoreState(state); + } + textHaveCSPattern = gFalse; +} + +//------------------------------------------------------------------------ +// text state operators +//------------------------------------------------------------------------ + +void Gfx::opSetCharSpacing(Object args[], int numArgs) { + state->setCharSpace(args[0].getNum()); + out->updateCharSpace(state); +} + +void Gfx::opSetFont(Object args[], int numArgs) { + GfxFont *font; + + if (!(font = res->lookupFont(args[0].getName()))) { + // unsetting the font (drawing no text) is better than using the + // previous one and drawing random glyphs from it + state->setFont(NULL, args[1].getNum()); + fontChanged = gTrue; + return; + } + if (printCommands) { + printf(" font: tag=%s name='%s' %g\n", + font->getTag()->getCString(), + font->getName() ? font->getName()->getCString() : "???", + args[1].getNum()); + fflush(stdout); + } + + font->incRefCnt(); + state->setFont(font, args[1].getNum()); + fontChanged = gTrue; +} + +void Gfx::opSetTextLeading(Object args[], int numArgs) { + state->setLeading(args[0].getNum()); +} + +void Gfx::opSetTextRender(Object args[], int numArgs) { + int rm = state->getRender(); + state->setRender(args[0].getInt()); + if ((args[0].getInt() & 4) && textHaveCSPattern && drawText) { + GBool needFill = out->deviceHasTextClip(state); + out->endTextObject(state); + if (needFill) { + doPatternFill(gTrue); + } + out->restoreState(state); + out->beginTextObject(state); + out->updateTextMat(state); + out->updateTextPos(state); + textHaveCSPattern = gFalse; + } else if ((rm & 4) && !(args[0].getInt() & 4) && out->supportTextCSPattern(state) && drawText) { + out->beginTextObject(state); + textHaveCSPattern = gTrue; + } + out->updateRender(state); +} + +void Gfx::opSetTextRise(Object args[], int numArgs) { + state->setRise(args[0].getNum()); + out->updateRise(state); +} + +void Gfx::opSetWordSpacing(Object args[], int numArgs) { + state->setWordSpace(args[0].getNum()); + out->updateWordSpace(state); +} + +void Gfx::opSetHorizScaling(Object args[], int numArgs) { + state->setHorizScaling(args[0].getNum()); + out->updateHorizScaling(state); + fontChanged = gTrue; +} + +//------------------------------------------------------------------------ +// text positioning operators +//------------------------------------------------------------------------ + +void Gfx::opTextMove(Object args[], int numArgs) { + double tx, ty; + + tx = state->getLineX() + args[0].getNum(); + ty = state->getLineY() + args[1].getNum(); + state->textMoveTo(tx, ty); + out->updateTextPos(state); +} + +void Gfx::opTextMoveSet(Object args[], int numArgs) { + double tx, ty; + + tx = state->getLineX() + args[0].getNum(); + ty = args[1].getNum(); + state->setLeading(-ty); + ty += state->getLineY(); + state->textMoveTo(tx, ty); + out->updateTextPos(state); +} + +void Gfx::opSetTextMatrix(Object args[], int numArgs) { + state->setTextMat(args[0].getNum(), args[1].getNum(), + args[2].getNum(), args[3].getNum(), + args[4].getNum(), args[5].getNum()); + state->textMoveTo(0, 0); + out->updateTextMat(state); + out->updateTextPos(state); + fontChanged = gTrue; +} + +void Gfx::opTextNextLine(Object args[], int numArgs) { + double tx, ty; + + tx = state->getLineX(); + ty = state->getLineY() - state->getLeading(); + state->textMoveTo(tx, ty); + out->updateTextPos(state); +} + +//------------------------------------------------------------------------ +// text string operators +//------------------------------------------------------------------------ + +void Gfx::opShowText(Object args[], int numArgs) { + if (!state->getFont()) { + error(getPos(), "No font in show"); + return; + } + if (fontChanged) { + out->updateFont(state); + fontChanged = gFalse; + } + out->beginStringOp(state); + doShowText(args[0].getString()); + out->endStringOp(state); +} + +void Gfx::opMoveShowText(Object args[], int numArgs) { + double tx, ty; + + if (!state->getFont()) { + error(getPos(), "No font in move/show"); + return; + } + if (fontChanged) { + out->updateFont(state); + fontChanged = gFalse; + } + tx = state->getLineX(); + ty = state->getLineY() - state->getLeading(); + state->textMoveTo(tx, ty); + out->updateTextPos(state); + out->beginStringOp(state); + doShowText(args[0].getString()); + out->endStringOp(state); +} + +void Gfx::opMoveSetShowText(Object args[], int numArgs) { + double tx, ty; + + if (!state->getFont()) { + error(getPos(), "No font in move/set/show"); + return; + } + if (fontChanged) { + out->updateFont(state); + fontChanged = gFalse; + } + state->setWordSpace(args[0].getNum()); + state->setCharSpace(args[1].getNum()); + tx = state->getLineX(); + ty = state->getLineY() - state->getLeading(); + state->textMoveTo(tx, ty); + out->updateWordSpace(state); + out->updateCharSpace(state); + out->updateTextPos(state); + out->beginStringOp(state); + doShowText(args[2].getString()); + out->endStringOp(state); +} + +void Gfx::opShowSpaceText(Object args[], int numArgs) { + Array *a; + Object obj; + int wMode; + int i; + + if (!state->getFont()) { + error(getPos(), "No font in show/space"); + return; + } + if (fontChanged) { + out->updateFont(state); + fontChanged = gFalse; + } + out->beginStringOp(state); + wMode = state->getFont()->getWMode(); + a = args[0].getArray(); + for (i = 0; i < a->getLength(); ++i) { + a->get(i, &obj); + if (obj.isNum()) { + // this uses the absolute value of the font size to match + // Acrobat's behavior + if (wMode) { + state->textShift(0, -obj.getNum() * 0.001 * + fabs(state->getFontSize())); + } else { + state->textShift(-obj.getNum() * 0.001 * + fabs(state->getFontSize()), 0); + } + out->updateTextShift(state, obj.getNum()); + } else if (obj.isString()) { + doShowText(obj.getString()); + } else { + error(getPos(), "Element of show/space array must be number or string"); + } + obj.free(); + } + out->endStringOp(state); +} + +void Gfx::doShowText(GooString *s) { + GfxFont *font; + int wMode; + double riseX, riseY; + CharCode code; + Unicode *u = NULL; + double x, y, dx, dy, dx2, dy2, curX, curY, tdx, tdy, lineX, lineY; + double originX, originY, tOriginX, tOriginY; + double oldCTM[6], newCTM[6]; + double *mat; + Object charProc; + Dict *resDict; + Parser *oldParser; + char *p; + int len, n, uLen, nChars, nSpaces, i; + + font = state->getFont(); + wMode = font->getWMode(); + + if (out->useDrawChar()) { + out->beginString(state, s); + } + + // handle a Type 3 char + if (font->getType() == fontType3 && out->interpretType3Chars()) { + mat = state->getCTM(); + for (i = 0; i < 6; ++i) { + oldCTM[i] = mat[i]; + } + mat = state->getTextMat(); + newCTM[0] = mat[0] * oldCTM[0] + mat[1] * oldCTM[2]; + newCTM[1] = mat[0] * oldCTM[1] + mat[1] * oldCTM[3]; + newCTM[2] = mat[2] * oldCTM[0] + mat[3] * oldCTM[2]; + newCTM[3] = mat[2] * oldCTM[1] + mat[3] * oldCTM[3]; + mat = font->getFontMatrix(); + newCTM[0] = mat[0] * newCTM[0] + mat[1] * newCTM[2]; + newCTM[1] = mat[0] * newCTM[1] + mat[1] * newCTM[3]; + newCTM[2] = mat[2] * newCTM[0] + mat[3] * newCTM[2]; + newCTM[3] = mat[2] * newCTM[1] + mat[3] * newCTM[3]; + newCTM[0] *= state->getFontSize(); + newCTM[1] *= state->getFontSize(); + newCTM[2] *= state->getFontSize(); + newCTM[3] *= state->getFontSize(); + newCTM[0] *= state->getHorizScaling(); + newCTM[2] *= state->getHorizScaling(); + state->textTransformDelta(0, state->getRise(), &riseX, &riseY); + curX = state->getCurX(); + curY = state->getCurY(); + lineX = state->getLineX(); + lineY = state->getLineY(); + oldParser = parser; + p = s->getCString(); + len = s->getLength(); + while (len > 0) { + n = font->getNextChar(p, len, &code, + &u, &uLen, + &dx, &dy, &originX, &originY); + dx = dx * state->getFontSize() + state->getCharSpace(); + if (n == 1 && *p == ' ') { + dx += state->getWordSpace(); + } + dx *= state->getHorizScaling(); + dy *= state->getFontSize(); + state->textTransformDelta(dx, dy, &tdx, &tdy); + state->transform(curX + riseX, curY + riseY, &x, &y); + saveState(); + state->setCTM(newCTM[0], newCTM[1], newCTM[2], newCTM[3], x, y); + //~ the CTM concat values here are wrong (but never used) + out->updateCTM(state, 1, 0, 0, 1, 0, 0); + if (!out->beginType3Char(state, curX + riseX, curY + riseY, tdx, tdy, + code, u, uLen)) { + ((Gfx8BitFont *)font)->getCharProc(code, &charProc); + if ((resDict = ((Gfx8BitFont *)font)->getResources())) { + pushResources(resDict); + } + if (charProc.isStream()) { + display(&charProc, gFalse); + } else { + error(getPos(), "Missing or bad Type3 CharProc entry"); + } + out->endType3Char(state); + if (resDict) { + popResources(); + } + charProc.free(); + } + restoreState(); + // GfxState::restore() does *not* restore the current position, + // so we deal with it here using (curX, curY) and (lineX, lineY) + curX += tdx; + curY += tdy; + state->moveTo(curX, curY); + state->textSetPos(lineX, lineY); + p += n; + len -= n; + } + parser = oldParser; + + } else if (out->useDrawChar()) { + state->textTransformDelta(0, state->getRise(), &riseX, &riseY); + p = s->getCString(); + len = s->getLength(); + while (len > 0) { + n = font->getNextChar(p, len, &code, + &u, &uLen, + &dx, &dy, &originX, &originY); + if (wMode) { + dx *= state->getFontSize(); + dy = dy * state->getFontSize() + state->getCharSpace(); + if (n == 1 && *p == ' ') { + dy += state->getWordSpace(); + } + } else { + dx = dx * state->getFontSize() + state->getCharSpace(); + if (n == 1 && *p == ' ') { + dx += state->getWordSpace(); + } + dx *= state->getHorizScaling(); + dy *= state->getFontSize(); + } + state->textTransformDelta(dx, dy, &tdx, &tdy); + originX *= state->getFontSize(); + originY *= state->getFontSize(); + state->textTransformDelta(originX, originY, &tOriginX, &tOriginY); + if (!contentIsHidden()) { + out->drawChar(state, state->getCurX() + riseX, state->getCurY() + riseY, + tdx, tdy, tOriginX, tOriginY, code, n, u, uLen); + } + state->shift(tdx, tdy); + p += n; + len -= n; + } + + } else { + dx = dy = 0; + p = s->getCString(); + len = s->getLength(); + nChars = nSpaces = 0; + while (len > 0) { + n = font->getNextChar(p, len, &code, + &u, &uLen, + &dx2, &dy2, &originX, &originY); + dx += dx2; + dy += dy2; + if (n == 1 && *p == ' ') { + ++nSpaces; + } + ++nChars; + p += n; + len -= n; + } + if (wMode) { + dx *= state->getFontSize(); + dy = dy * state->getFontSize() + + nChars * state->getCharSpace() + + nSpaces * state->getWordSpace(); + } else { + dx = dx * state->getFontSize() + + nChars * state->getCharSpace() + + nSpaces * state->getWordSpace(); + dx *= state->getHorizScaling(); + dy *= state->getFontSize(); + } + state->textTransformDelta(dx, dy, &tdx, &tdy); + if (!contentIsHidden()) + out->drawString(state, s); + state->shift(tdx, tdy); + } + + if (out->useDrawChar()) { + out->endString(state); + } + + updateLevel += 10 * s->getLength(); +} + +//------------------------------------------------------------------------ +// XObject operators +//------------------------------------------------------------------------ + +void Gfx::opXObject(Object args[], int numArgs) { + char *name; + Object obj1, obj2, obj3, refObj; +#if OPI_SUPPORT + Object opiDict; +#endif + + name = args[0].getName(); + if (!res->lookupXObject(name, &obj1)) { + return; + } + if (!obj1.isStream()) { + error(getPos(), "XObject '%s' is wrong type", name); + obj1.free(); + return; + } + + obj1.streamGetDict()->lookupNF("OC", &obj2); + if (obj2.isNull()) { + // No OC entry - so we proceed as normal + } else if (obj2.isRef()) { + if ( catalog->getOptContentConfig() && ! catalog->getOptContentConfig()->optContentIsVisible( &obj2 ) ) { + obj2.free(); + obj1.free(); + return; + } + } else { + error(getPos(), "XObject OC value not null or dict: %i", obj2.getType()); + } + obj2.free(); + +#if OPI_SUPPORT + obj1.streamGetDict()->lookup("OPI", &opiDict); + if (opiDict.isDict()) { + out->opiBegin(state, opiDict.getDict()); + } +#endif + obj1.streamGetDict()->lookup("Subtype", &obj2); + if (obj2.isName("Image")) { + if (out->needNonText()) { + res->lookupXObjectNF(name, &refObj); + doImage(&refObj, obj1.getStream(), gFalse); + refObj.free(); + } + } else if (obj2.isName("Form")) { + res->lookupXObjectNF(name, &refObj); + if (out->useDrawForm() && refObj.isRef()) { + out->drawForm(refObj.getRef()); + } else { + doForm(&obj1); + } + refObj.free(); + } else if (obj2.isName("PS")) { + obj1.streamGetDict()->lookup("Level1", &obj3); + out->psXObject(obj1.getStream(), + obj3.isStream() ? obj3.getStream() : (Stream *)NULL); + } else if (obj2.isName()) { + error(getPos(), "Unknown XObject subtype '%s'", obj2.getName()); + } else { + error(getPos(), "XObject subtype is missing or wrong type"); + } + obj2.free(); +#if OPI_SUPPORT + if (opiDict.isDict()) { + out->opiEnd(state, opiDict.getDict()); + } + opiDict.free(); +#endif + obj1.free(); +} + +void Gfx::doImage(Object *ref, Stream *str, GBool inlineImg) { + Dict *dict, *maskDict; + int width, height; + int bits, maskBits; + GBool interpolate; + StreamColorSpaceMode csMode; + GBool mask; + GBool invert; + GfxColorSpace *colorSpace, *maskColorSpace; + GfxImageColorMap *colorMap, *maskColorMap; + Object maskObj, smaskObj; + GBool haveColorKeyMask, haveExplicitMask, haveSoftMask; + int maskColors[2*gfxColorMaxComps]; + int maskWidth, maskHeight; + GBool maskInvert; + GBool maskInterpolate; + Stream *maskStr; + Object obj1, obj2; + int i; + + // get info from the stream + bits = 0; + csMode = streamCSNone; + str->getImageParams(&bits, &csMode); + + // get stream dict + dict = str->getDict(); + + // get size + dict->lookup("Width", &obj1); + if (obj1.isNull()) { + obj1.free(); + dict->lookup("W", &obj1); + } + if (obj1.isInt()) + width = obj1.getInt(); + else if (obj1.isReal()) + width = (int)obj1.getReal(); + else + goto err2; + obj1.free(); + dict->lookup("Height", &obj1); + if (obj1.isNull()) { + obj1.free(); + dict->lookup("H", &obj1); + } + if (obj1.isInt()) + height = obj1.getInt(); + else if (obj1.isReal()) + height = (int)obj1.getReal(); + else + goto err2; + obj1.free(); + + if (width < 1 || height < 1) + goto err1; + + // image interpolation + dict->lookup("Interpolate", &obj1); + if (obj1.isNull()) { + obj1.free(); + dict->lookup("I", &obj1); + } + if (obj1.isBool()) + interpolate = obj1.getBool(); + else + interpolate = gFalse; + obj1.free(); + maskInterpolate = gFalse; + + // image or mask? + dict->lookup("ImageMask", &obj1); + if (obj1.isNull()) { + obj1.free(); + dict->lookup("IM", &obj1); + } + mask = gFalse; + if (obj1.isBool()) + mask = obj1.getBool(); + else if (!obj1.isNull()) + goto err2; + obj1.free(); + + // bit depth + if (bits == 0) { + dict->lookup("BitsPerComponent", &obj1); + if (obj1.isNull()) { + obj1.free(); + dict->lookup("BPC", &obj1); + } + if (obj1.isInt()) { + bits = obj1.getInt(); + } else if (mask) { + bits = 1; + } else { + goto err2; + } + obj1.free(); + } + + // display a mask + if (mask) { + + // check for inverted mask + if (bits != 1) + goto err1; + invert = gFalse; + dict->lookup("Decode", &obj1); + if (obj1.isNull()) { + obj1.free(); + dict->lookup("D", &obj1); + } + if (obj1.isArray()) { + obj1.arrayGet(0, &obj2); + // Table 4.39 says /Decode must be [1 0] or [0 1]. Adobe + // accepts [1.0 0.0] as well. + if (obj2.isNum() && obj2.getNum() >= 0.9) + invert = gTrue; + obj2.free(); + } else if (!obj1.isNull()) { + goto err2; + } + obj1.free(); + + // draw it + if (!contentIsHidden()) { + out->drawImageMask(state, ref, str, width, height, invert, interpolate, inlineImg); + if (out->fillMaskCSPattern(state)) { + maskHaveCSPattern = gTrue; + doPatternFill(gTrue); + out->endMaskClip(state); + maskHaveCSPattern = gFalse; + } + } + } else { + + // get color space and color map + dict->lookup("ColorSpace", &obj1); + if (obj1.isNull()) { + obj1.free(); + dict->lookup("CS", &obj1); + } + if (obj1.isName() && inlineImg) { + res->lookupColorSpace(obj1.getName(), &obj2); + if (!obj2.isNull()) { + obj1.free(); + obj1 = obj2; + } else { + obj2.free(); + } + } + if (!obj1.isNull()) { + colorSpace = GfxColorSpace::parse(&obj1, this); + } else if (csMode == streamCSDeviceGray) { + Object objCS; + res->lookupColorSpace("DefaultGray", &objCS); + if (objCS.isNull()) { + colorSpace = new GfxDeviceGrayColorSpace(); + } else { + colorSpace = GfxColorSpace::parse(&objCS, this); + } + objCS.free(); + } else if (csMode == streamCSDeviceRGB) { + Object objCS; + res->lookupColorSpace("DefaultRGB", &objCS); + if (objCS.isNull()) { + colorSpace = new GfxDeviceRGBColorSpace(); + } else { + colorSpace = GfxColorSpace::parse(&objCS, this); + } + objCS.free(); + } else if (csMode == streamCSDeviceCMYK) { + Object objCS; + res->lookupColorSpace("DefaultCMYK", &objCS); + if (objCS.isNull()) { + colorSpace = new GfxDeviceCMYKColorSpace(); + } else { + colorSpace = GfxColorSpace::parse(&objCS, this); + } + objCS.free(); + } else { + colorSpace = NULL; + } + obj1.free(); + if (!colorSpace) { + goto err1; + } + dict->lookup("Decode", &obj1); + if (obj1.isNull()) { + obj1.free(); + dict->lookup("D", &obj1); + } + colorMap = new GfxImageColorMap(bits, &obj1, colorSpace); + obj1.free(); + if (!colorMap->isOk()) { + delete colorMap; + goto err1; + } + + // get the mask + haveColorKeyMask = haveExplicitMask = haveSoftMask = gFalse; + maskStr = NULL; // make gcc happy + maskWidth = maskHeight = 0; // make gcc happy + maskInvert = gFalse; // make gcc happy + maskColorMap = NULL; // make gcc happy + dict->lookup("Mask", &maskObj); + dict->lookup("SMask", &smaskObj); + if (smaskObj.isStream()) { + // soft mask + if (inlineImg) { + goto err1; + } + maskStr = smaskObj.getStream(); + maskDict = smaskObj.streamGetDict(); + maskDict->lookup("Width", &obj1); + if (obj1.isNull()) { + obj1.free(); + maskDict->lookup("W", &obj1); + } + if (!obj1.isInt()) { + goto err2; + } + maskWidth = obj1.getInt(); + obj1.free(); + maskDict->lookup("Height", &obj1); + if (obj1.isNull()) { + obj1.free(); + maskDict->lookup("H", &obj1); + } + if (!obj1.isInt()) { + goto err2; + } + maskHeight = obj1.getInt(); + obj1.free(); + maskDict->lookup("Interpolate", &obj1); + if (obj1.isNull()) { + obj1.free(); + maskDict->lookup("I", &obj1); + } + if (obj1.isBool()) + maskInterpolate = obj1.getBool(); + else + maskInterpolate = gFalse; + obj1.free(); + maskDict->lookup("BitsPerComponent", &obj1); + if (obj1.isNull()) { + obj1.free(); + maskDict->lookup("BPC", &obj1); + } + if (!obj1.isInt()) { + goto err2; + } + maskBits = obj1.getInt(); + obj1.free(); + maskDict->lookup("ColorSpace", &obj1); + if (obj1.isNull()) { + obj1.free(); + maskDict->lookup("CS", &obj1); + } + if (obj1.isName()) { + res->lookupColorSpace(obj1.getName(), &obj2); + if (!obj2.isNull()) { + obj1.free(); + obj1 = obj2; + } else { + obj2.free(); + } + } + maskColorSpace = GfxColorSpace::parse(&obj1, this); + obj1.free(); + if (!maskColorSpace || maskColorSpace->getMode() != csDeviceGray) { + goto err1; + } + maskDict->lookup("Decode", &obj1); + if (obj1.isNull()) { + obj1.free(); + maskDict->lookup("D", &obj1); + } + maskColorMap = new GfxImageColorMap(maskBits, &obj1, maskColorSpace); + obj1.free(); + if (!maskColorMap->isOk()) { + delete maskColorMap; + goto err1; + } + //~ handle the Matte entry + haveSoftMask = gTrue; + } else if (maskObj.isArray()) { + // color key mask + for (i = 0; + i < maskObj.arrayGetLength() && i < 2*gfxColorMaxComps; + ++i) { + maskObj.arrayGet(i, &obj1); + if (obj1.isInt()) { + maskColors[i] = obj1.getInt(); + } else if (obj1.isReal()) { + error(-1, "Mask entry should be an integer but it's a real, trying to use it"); + maskColors[i] = (int) obj1.getReal(); + } else { + error(-1, "Mask entry should be an integer but it's of type %d", obj1.getType()); + obj1.free(); + goto err1; + } + obj1.free(); + } + haveColorKeyMask = gTrue; + } else if (maskObj.isStream()) { + // explicit mask + if (inlineImg) { + goto err1; + } + maskStr = maskObj.getStream(); + maskDict = maskObj.streamGetDict(); + maskDict->lookup("Width", &obj1); + if (obj1.isNull()) { + obj1.free(); + maskDict->lookup("W", &obj1); + } + if (!obj1.isInt()) { + goto err2; + } + maskWidth = obj1.getInt(); + obj1.free(); + maskDict->lookup("Height", &obj1); + if (obj1.isNull()) { + obj1.free(); + maskDict->lookup("H", &obj1); + } + if (!obj1.isInt()) { + goto err2; + } + maskHeight = obj1.getInt(); + obj1.free(); + maskDict->lookup("Interpolate", &obj1); + if (obj1.isNull()) { + obj1.free(); + maskDict->lookup("I", &obj1); + } + if (obj1.isBool()) + maskInterpolate = obj1.getBool(); + else + maskInterpolate = gFalse; + obj1.free(); + maskDict->lookup("ImageMask", &obj1); + if (obj1.isNull()) { + obj1.free(); + maskDict->lookup("IM", &obj1); + } + if (!obj1.isBool() || !obj1.getBool()) { + goto err2; + } + obj1.free(); + maskInvert = gFalse; + maskDict->lookup("Decode", &obj1); + if (obj1.isNull()) { + obj1.free(); + maskDict->lookup("D", &obj1); + } + if (obj1.isArray()) { + obj1.arrayGet(0, &obj2); + // Table 4.39 says /Decode must be [1 0] or [0 1]. Adobe + // accepts [1.0 0.0] as well. + if (obj2.isNum() && obj2.getNum() >= 0.9) { + maskInvert = gTrue; + } + obj2.free(); + } else if (!obj1.isNull()) { + goto err2; + } + obj1.free(); + haveExplicitMask = gTrue; + } + + // draw it + if (haveSoftMask) { + if (!contentIsHidden()) { + out->drawSoftMaskedImage(state, ref, str, width, height, colorMap, interpolate, + maskStr, maskWidth, maskHeight, maskColorMap, maskInterpolate); + } + delete maskColorMap; + } else if (haveExplicitMask && !contentIsHidden ()) { + out->drawMaskedImage(state, ref, str, width, height, colorMap, interpolate, + maskStr, maskWidth, maskHeight, maskInvert, maskInterpolate); + } else if (!contentIsHidden()) { + out->drawImage(state, ref, str, width, height, colorMap, interpolate, + haveColorKeyMask ? maskColors : (int *)NULL, inlineImg); + } + delete colorMap; + + maskObj.free(); + smaskObj.free(); + } + + if ((i = width * height) > 1000) { + i = 1000; + } + updateLevel += i; + + return; + + err2: + obj1.free(); + err1: + error(getPos(), "Bad image parameters"); +} + +void Gfx::doForm(Object *str) { + Dict *dict; + GBool transpGroup, isolated, knockout; + GfxColorSpace *blendingColorSpace; + Object matrixObj, bboxObj; + double m[6], bbox[4]; + Object resObj; + Dict *resDict; + Object obj1, obj2, obj3; + int i; + + // check for excessive recursion + if (formDepth > 20) { + return; + } + + // get stream dict + dict = str->streamGetDict(); + + // check form type + dict->lookup("FormType", &obj1); + if (!(obj1.isNull() || (obj1.isInt() && obj1.getInt() == 1))) { + error(getPos(), "Unknown form type"); + } + obj1.free(); + + // get bounding box + dict->lookup("BBox", &bboxObj); + if (!bboxObj.isArray()) { + bboxObj.free(); + error(getPos(), "Bad form bounding box"); + return; + } + for (i = 0; i < 4; ++i) { + bboxObj.arrayGet(i, &obj1); + if (likely(obj1.isNum())) { + bbox[i] = obj1.getNum(); + obj1.free(); + } else { + obj1.free(); + error(getPos(), "Bad form bounding box value"); + return; + } + } + bboxObj.free(); + + // get matrix + dict->lookup("Matrix", &matrixObj); + if (matrixObj.isArray()) { + for (i = 0; i < 6; ++i) { + matrixObj.arrayGet(i, &obj1); + if (likely(obj1.isNum())) m[i] = obj1.getNum(); + else m[i] = 0; + obj1.free(); + } + } else { + m[0] = 1; m[1] = 0; + m[2] = 0; m[3] = 1; + m[4] = 0; m[5] = 0; + } + matrixObj.free(); + + // get resources + dict->lookup("Resources", &resObj); + resDict = resObj.isDict() ? resObj.getDict() : (Dict *)NULL; + + // check for a transparency group + transpGroup = isolated = knockout = gFalse; + blendingColorSpace = NULL; + if (dict->lookup("Group", &obj1)->isDict()) { + if (obj1.dictLookup("S", &obj2)->isName("Transparency")) { + transpGroup = gTrue; + if (!obj1.dictLookup("CS", &obj3)->isNull()) { + blendingColorSpace = GfxColorSpace::parse(&obj3, this); + } + obj3.free(); + if (obj1.dictLookup("I", &obj3)->isBool()) { + isolated = obj3.getBool(); + } + obj3.free(); + if (obj1.dictLookup("K", &obj3)->isBool()) { + knockout = obj3.getBool(); + } + obj3.free(); + } + obj2.free(); + } + obj1.free(); + + // draw it + ++formDepth; + doForm1(str, resDict, m, bbox, + transpGroup, gFalse, blendingColorSpace, isolated, knockout); + --formDepth; + + if (blendingColorSpace) { + delete blendingColorSpace; + } + resObj.free(); +} + +void Gfx::doForm1(Object *str, Dict *resDict, double *matrix, double *bbox, + GBool transpGroup, GBool softMask, + GfxColorSpace *blendingColorSpace, + GBool isolated, GBool knockout, + GBool alpha, Function *transferFunc, + GfxColor *backdropColor) { + Parser *oldParser; + double oldBaseMatrix[6]; + int i; + + // push new resources on stack + pushResources(resDict); + + // save current graphics state + saveState(); + + // kill any pre-existing path + state->clearPath(); + + // save current parser + oldParser = parser; + + // set form transformation matrix + state->concatCTM(matrix[0], matrix[1], matrix[2], + matrix[3], matrix[4], matrix[5]); + out->updateCTM(state, matrix[0], matrix[1], matrix[2], + matrix[3], matrix[4], matrix[5]); + + // set form bounding box + state->moveTo(bbox[0], bbox[1]); + state->lineTo(bbox[2], bbox[1]); + state->lineTo(bbox[2], bbox[3]); + state->lineTo(bbox[0], bbox[3]); + state->closePath(); + state->clip(); + out->clip(state); + state->clearPath(); + + if (softMask || transpGroup) { + if (state->getBlendMode() != gfxBlendNormal) { + state->setBlendMode(gfxBlendNormal); + out->updateBlendMode(state); + } + if (state->getFillOpacity() != 1) { + state->setFillOpacity(1); + out->updateFillOpacity(state); + } + if (state->getStrokeOpacity() != 1) { + state->setStrokeOpacity(1); + out->updateStrokeOpacity(state); + } + out->clearSoftMask(state); + out->beginTransparencyGroup(state, bbox, blendingColorSpace, + isolated, knockout, softMask); + } + + // set new base matrix + for (i = 0; i < 6; ++i) { + oldBaseMatrix[i] = baseMatrix[i]; + baseMatrix[i] = state->getCTM()[i]; + } + + GfxState *stateBefore = state; + + // draw the form + display(str, gFalse); + + if (stateBefore != state) { + if (state->isParentState(stateBefore)) { + error(-1, "There's a form with more q than Q, trying to fix"); + while (stateBefore != state) { + restoreState(); + } + } else { + error(-1, "There's a form with more Q than q"); + } + } + + if (softMask || transpGroup) { + out->endTransparencyGroup(state); + } + + // restore base matrix + for (i = 0; i < 6; ++i) { + baseMatrix[i] = oldBaseMatrix[i]; + } + + // restore parser + parser = oldParser; + + // restore graphics state + restoreState(); + + // pop resource stack + popResources(); + + if (softMask) { + out->setSoftMask(state, bbox, alpha, transferFunc, backdropColor); + } else if (transpGroup) { + out->paintTransparencyGroup(state, bbox); + } + + return; +} + +//------------------------------------------------------------------------ +// in-line image operators +//------------------------------------------------------------------------ + +void Gfx::opBeginImage(Object args[], int numArgs) { + Stream *str; + int c1, c2; + + // build dict/stream + str = buildImageStream(); + + // display the image + if (str) { + doImage(NULL, str, gTrue); + + // skip 'EI' tag + c1 = str->getUndecodedStream()->getChar(); + c2 = str->getUndecodedStream()->getChar(); + while (!(c1 == 'E' && c2 == 'I') && c2 != EOF) { + c1 = c2; + c2 = str->getUndecodedStream()->getChar(); + } + delete str; + } +} + +Stream *Gfx::buildImageStream() { + Object dict; + Object obj; + char *key; + Stream *str; + + // build dictionary + dict.initDict(xref); + parser->getObj(&obj); + while (!obj.isCmd("ID") && !obj.isEOF()) { + if (!obj.isName()) { + error(getPos(), "Inline image dictionary key must be a name object"); + obj.free(); + } else { + key = copyString(obj.getName()); + obj.free(); + parser->getObj(&obj); + if (obj.isEOF() || obj.isError()) { + gfree(key); + break; + } + dict.dictAdd(key, &obj); + } + parser->getObj(&obj); + } + if (obj.isEOF()) { + error(getPos(), "End of file in inline image"); + obj.free(); + dict.free(); + return NULL; + } + obj.free(); + + // make stream + if (parser->getStream()) { + str = new EmbedStream(parser->getStream(), &dict, gFalse, 0); + str = str->addFilters(&dict); + } else { + str = NULL; + dict.free(); + } + + return str; +} + +void Gfx::opImageData(Object args[], int numArgs) { + error(getPos(), "Internal: got 'ID' operator"); +} + +void Gfx::opEndImage(Object args[], int numArgs) { + error(getPos(), "Internal: got 'EI' operator"); +} + +//------------------------------------------------------------------------ +// type 3 font operators +//------------------------------------------------------------------------ + +void Gfx::opSetCharWidth(Object args[], int numArgs) { + out->type3D0(state, args[0].getNum(), args[1].getNum()); +} + +void Gfx::opSetCacheDevice(Object args[], int numArgs) { + out->type3D1(state, args[0].getNum(), args[1].getNum(), + args[2].getNum(), args[3].getNum(), + args[4].getNum(), args[5].getNum()); +} + +//------------------------------------------------------------------------ +// compatibility operators +//------------------------------------------------------------------------ + +void Gfx::opBeginIgnoreUndef(Object args[], int numArgs) { + ++ignoreUndef; +} + +void Gfx::opEndIgnoreUndef(Object args[], int numArgs) { + if (ignoreUndef > 0) + --ignoreUndef; +} + +//------------------------------------------------------------------------ +// marked content operators +//------------------------------------------------------------------------ + +struct MarkedContentStack { + GBool ocSuppressed; // are we ignoring content based on OptionalContent? + MarkedContentStack *next; // next object on stack +}; + +void Gfx::popMarkedContent() { + MarkedContentStack *mc = mcStack; + mcStack = mc->next; + delete mc; +} + +void Gfx::pushMarkedContent() { + MarkedContentStack *mc = new MarkedContentStack(); + mc->ocSuppressed = gFalse; + mc->next = mcStack; + mcStack = mc; +} + +GBool Gfx::contentIsHidden() { + MarkedContentStack *mc = mcStack; + bool hidden = mc && mc->ocSuppressed; + while (!hidden && mc && mc->next) { + mc = mc->next; + hidden = mc->ocSuppressed; + } + return hidden; +} + +void Gfx::opBeginMarkedContent(Object args[], int numArgs) { + // push a new stack entry + pushMarkedContent(); + + OCGs *contentConfig = catalog->getOptContentConfig(); + char* name0 = args[0].getName(); + if ( strncmp( name0, "OC", 2) == 0 && contentConfig) { + if ( numArgs >= 2 ) { + if (!args[1].isName()) { + error(getPos(), "Unexpected MC Type: %i", args[1].getType()); + } + char* name1 = args[1].getName(); + Object markedContent; + if ( res->lookupMarkedContentNF( name1, &markedContent ) ) { + if ( markedContent.isRef() ) { + bool visible = contentConfig->optContentIsVisible( &markedContent ); + MarkedContentStack *mc = mcStack; + mc->ocSuppressed = !(visible); + } + markedContent.free(); + } else { + error(getPos(), "DID NOT find %s", name1); + } + } else { + error(getPos(), "insufficient arguments for Marked Content"); + } + } + + if (printCommands) { + printf(" marked content: %s ", args[0].getName()); + if (numArgs == 2) + args[1].print(stdout); + printf("\n"); + fflush(stdout); + } + + if(numArgs == 2 && args[1].isDict ()) { + out->beginMarkedContent(args[0].getName(),args[1].getDict()); + } else if(numArgs == 1) { + out->beginMarkedContent(args[0].getName(),NULL); + } +} + +void Gfx::opEndMarkedContent(Object args[], int numArgs) { + // pop the stack + if (mcStack) + popMarkedContent(); + out->endMarkedContent(state); +} + +void Gfx::opMarkPoint(Object args[], int numArgs) { + if (printCommands) { + printf(" mark point: %s ", args[0].getName()); + if (numArgs == 2) + args[1].print(stdout); + printf("\n"); + fflush(stdout); + } + + if(numArgs == 2 && args[1].isDict()) { + out->markPoint(args[0].getName(),args[1].getDict()); + } else { + out->markPoint(args[0].getName()); + } + +} + +//------------------------------------------------------------------------ +// misc +//------------------------------------------------------------------------ + +void Gfx::drawAnnot(Object *str, AnnotBorder *border, AnnotColor *aColor, + double xMin, double yMin, double xMax, double yMax) { + Dict *dict, *resDict; + Object matrixObj, bboxObj, resObj; + Object obj1; + double m[6], bbox[4], ictm[6]; + double *ctm; + double formX0, formY0, formX1, formY1; + double annotX0, annotY0, annotX1, annotY1; + double det, x, y, sx, sy; + double r, g, b; + GfxColor color; + double *dash, *dash2; + int dashLength; + int i; + + //~ can we assume that we're in default user space? + //~ (i.e., baseMatrix = ctm) + + // transform the annotation bbox from default user space to user + // space: (bbox * baseMatrix) * iCTM + ctm = state->getCTM(); + det = 1 / (ctm[0] * ctm[3] - ctm[1] * ctm[2]); + ictm[0] = ctm[3] * det; + ictm[1] = -ctm[1] * det; + ictm[2] = -ctm[2] * det; + ictm[3] = ctm[0] * det; + ictm[4] = (ctm[2] * ctm[5] - ctm[3] * ctm[4]) * det; + ictm[5] = (ctm[1] * ctm[4] - ctm[0] * ctm[5]) * det; + x = baseMatrix[0] * xMin + baseMatrix[2] * yMin + baseMatrix[4]; + y = baseMatrix[1] * xMin + baseMatrix[3] * yMin + baseMatrix[5]; + annotX0 = ictm[0] * x + ictm[2] * y + ictm[4]; + annotY0 = ictm[1] * x + ictm[3] * y + ictm[5]; + x = baseMatrix[0] * xMax + baseMatrix[2] * yMax + baseMatrix[4]; + y = baseMatrix[1] * xMax + baseMatrix[3] * yMax + baseMatrix[5]; + annotX1 = ictm[0] * x + ictm[2] * y + ictm[4]; + annotY1 = ictm[1] * x + ictm[3] * y + ictm[5]; + if (annotX0 > annotX1) { + x = annotX0; annotX0 = annotX1; annotX1 = x; + } + if (annotY0 > annotY1) { + y = annotY0; annotY0 = annotY1; annotY1 = y; + } + + // draw the appearance stream (if there is one) + if (str->isStream()) { + + // get stream dict + dict = str->streamGetDict(); + + // get the form bounding box + dict->lookup("BBox", &bboxObj); + if (!bboxObj.isArray()) { + bboxObj.free(); + error(getPos(), "Bad form bounding box"); + return; + } + for (i = 0; i < 4; ++i) { + bboxObj.arrayGet(i, &obj1); + if (likely(obj1.isNum())) { + bbox[i] = obj1.getNum(); + obj1.free(); + } else { + obj1.free(); + error(getPos(), "Bad form bounding box value"); + return; + } + } + bboxObj.free(); + + // get the form matrix + dict->lookup("Matrix", &matrixObj); + if (matrixObj.isArray() && matrixObj.arrayGetLength() >= 6) { + for (i = 0; i < 6; ++i) { + matrixObj.arrayGet(i, &obj1); + m[i] = obj1.getNum(); + obj1.free(); + } + } else { + m[0] = 1; m[1] = 0; + m[2] = 0; m[3] = 1; + m[4] = 0; m[5] = 0; + } + matrixObj.free(); + + // transform the form bbox from form space to user space + formX0 = bbox[0] * m[0] + bbox[1] * m[2] + m[4]; + formY0 = bbox[0] * m[1] + bbox[1] * m[3] + m[5]; + formX1 = bbox[2] * m[0] + bbox[3] * m[2] + m[4]; + formY1 = bbox[2] * m[1] + bbox[3] * m[3] + m[5]; + if (formX0 > formX1) { + x = formX0; formX0 = formX1; formX1 = x; + } + if (formY0 > formY1) { + y = formY0; formY0 = formY1; formY1 = y; + } + + // scale the form to fit the annotation bbox + if (formX1 == formX0) { + // this shouldn't happen + sx = 1; + } else { + sx = (annotX1 - annotX0) / (formX1 - formX0); + } + if (formY1 == formY0) { + // this shouldn't happen + sy = 1; + } else { + sy = (annotY1 - annotY0) / (formY1 - formY0); + } + m[0] *= sx; + m[2] *= sx; + m[4] = (m[4] - formX0) * sx + annotX0; + m[1] *= sy; + m[3] *= sy; + m[5] = (m[5] - formY0) * sy + annotY0; + + // get resources + dict->lookup("Resources", &resObj); + resDict = resObj.isDict() ? resObj.getDict() : (Dict *)NULL; + + // draw it + doForm1(str, resDict, m, bbox); + + resObj.free(); + } + + // draw the border + if (border && border->getWidth() > 0) { + if (state->getStrokeColorSpace()->getMode() != csDeviceRGB) { + state->setStrokePattern(NULL); + state->setStrokeColorSpace(new GfxDeviceRGBColorSpace()); + out->updateStrokeColorSpace(state); + } + if (aColor && (aColor->getSpace() == AnnotColor::colorRGB)) { + const double *values = aColor->getValues(); + r = values[0]; + g = values[1]; + b = values[2]; + } else { + r = g = b = 0; + }; + color.c[0] = dblToCol(r); + color.c[1] = dblToCol(g); + color.c[2] = dblToCol(b); + state->setStrokeColor(&color); + out->updateStrokeColor(state); + // compute the width scale factor when going from default user + // space to user space + x = (baseMatrix[0] + baseMatrix[2]) * ictm[0] + + (baseMatrix[1] + baseMatrix[3]) * ictm[2]; + y = (baseMatrix[0] + baseMatrix[2]) * ictm[1] + + (baseMatrix[1] + baseMatrix[3]) * ictm[3]; + x = sqrt(0.5 * (x * x + y * y)); + state->setLineWidth(x * border->getWidth()); + out->updateLineWidth(state); + dashLength = border->getDashLength(); + dash = border->getDash(); + if (border->getStyle() == AnnotBorder::borderDashed && dashLength > 0) { + dash2 = (double *)gmallocn(dashLength, sizeof(double)); + for (i = 0; i < dashLength; ++i) { + dash2[i] = x * dash[i]; + } + state->setLineDash(dash2, dashLength, 0); + out->updateLineDash(state); + } + //~ this doesn't currently handle the beveled and engraved styles + state->clearPath(); + state->moveTo(annotX0, out->upsideDown() ? annotY0 : annotY1); + state->lineTo(annotX1, out->upsideDown() ? annotY0 : annotY1); + if (border->getStyle() != AnnotBorder::borderUnderlined) { + state->lineTo(annotX1, out->upsideDown() ? annotY1 : annotY0); + state->lineTo(annotX0, out->upsideDown() ? annotY1 : annotY0); + state->closePath(); + } + out->stroke(state); + } +} + +int Gfx::bottomGuard() { + return stateGuards[stateGuards.size()-1]; +} + +void Gfx::pushStateGuard() { + stateGuards.push_back(stackHeight); +} + +void Gfx::popStateGuard() { + while (stackHeight > bottomGuard() && state->hasSaves()) + restoreState(); + stateGuards.pop_back(); +} + +void Gfx::saveState() { + out->saveState(state); + state = state->save(); + stackHeight++; +} + +void Gfx::restoreState() { + if (stackHeight <= bottomGuard() || !state->hasSaves()) { + error(-1, "Restoring state when no valid states to pop"); + commandAborted = gTrue; + return; + } + state = state->restore(); + out->restoreState(state); + stackHeight--; +} + +void Gfx::pushResources(Dict *resDict) { + res = new GfxResources(xref, resDict, res); +} + +void Gfx::popResources() { + GfxResources *resPtr; + + resPtr = res->getNext(); + delete res; + res = resPtr; +} + +#ifdef USE_CMS +PopplerCache *Gfx::getIccColorSpaceCache() +{ + return &iccColorSpaceCache; +} +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Gfx.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Gfx.h new file mode 100644 index 00000000000..ce7b2d87260 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Gfx.h @@ -0,0 +1,378 @@ +//======================================================================== +// +// Gfx.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> +// Copyright (C) 2007 Iñigo Martínez <inigomartinez@gmail.com> +// Copyright (C) 2008 Brad Hards <bradh@kde.org> +// Copyright (C) 2008, 2010 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2009-2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009, 2010 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2010 David Benjamin <davidben@mit.edu> +// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef GFX_H +#define GFX_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "poppler-config.h" +#include "goo/gtypes.h" +#include "goo/GooList.h" +#include "GfxState.h" +#include "Object.h" +#include "PopplerCache.h" + +#include <vector> + +class GooString; +class XRef; +class Array; +class Stream; +class Parser; +class Dict; +class Function; +class OutputDev; +class GfxFontDict; +class GfxFont; +class GfxPattern; +class GfxTilingPattern; +class GfxShadingPattern; +class GfxShading; +class GfxFunctionShading; +class GfxAxialShading; +class GfxRadialShading; +class GfxGouraudTriangleShading; +class GfxPatchMeshShading; +struct GfxPatch; +class GfxState; +struct GfxColor; +class GfxColorSpace; +class Gfx; +class PDFRectangle; +class AnnotBorder; +class AnnotColor; +class Catalog; +struct MarkedContentStack; + +//------------------------------------------------------------------------ + +enum GfxClipType { + clipNone, + clipNormal, + clipEO +}; + +enum TchkType { + tchkBool, // boolean + tchkInt, // integer + tchkNum, // number (integer or real) + tchkString, // string + tchkName, // name + tchkArray, // array + tchkProps, // properties (dictionary or name) + tchkSCN, // scn/SCN args (number of name) + tchkNone // used to avoid empty initializer lists +}; + +#define maxArgs 33 + +struct Operator { + char name[4]; + int numArgs; + TchkType tchk[maxArgs]; + void (Gfx::*func)(Object args[], int numArgs); +}; + +//------------------------------------------------------------------------ + +class GfxResources { +public: + + GfxResources(XRef *xref, Dict *resDict, GfxResources *nextA); + ~GfxResources(); + + GfxFont *lookupFont(char *name); + GBool lookupXObject(char *name, Object *obj); + GBool lookupXObjectNF(char *name, Object *obj); + GBool lookupMarkedContentNF(char *name, Object *obj); + void lookupColorSpace(char *name, Object *obj); + GfxPattern *lookupPattern(char *name, Gfx *gfx); + GfxShading *lookupShading(char *name, Gfx *gfx); + GBool lookupGState(char *name, Object *obj); + GBool lookupGStateNF(char *name, Object *obj); + + GfxResources *getNext() { return next; } + +private: + + GfxFontDict *fonts; + Object xObjDict; + Object colorSpaceDict; + Object patternDict; + Object shadingDict; + Object gStateDict; + PopplerObjectCache gStateCache; + Object propertiesDict; + GfxResources *next; +}; + +//------------------------------------------------------------------------ +// Gfx +//------------------------------------------------------------------------ + +class Gfx { +public: + + // Constructor for regular output. + Gfx(XRef *xrefA, OutputDev *outA, int pageNum, Dict *resDict, Catalog *catalog, + double hDPI, double vDPI, PDFRectangle *box, + PDFRectangle *cropBox, int rotate, + GBool (*abortCheckCbkA)(void *data) = NULL, + void *abortCheckCbkDataA = NULL); + + // Constructor for a sub-page object. + Gfx(XRef *xrefA, OutputDev *outA, Dict *resDict, Catalog *catalog, + PDFRectangle *box, PDFRectangle *cropBox, + GBool (*abortCheckCbkA)(void *data) = NULL, + void *abortCheckCbkDataA = NULL); + + ~Gfx(); + + // Interpret a stream or array of streams. + void display(Object *obj, GBool topLevel = gTrue); + + // Display an annotation, given its appearance (a Form XObject), + // border style, and bounding box (in default user space). + void drawAnnot(Object *str, AnnotBorder *border, AnnotColor *aColor, + double xMin, double yMin, double xMax, double yMax); + + // Save graphics state. + void saveState(); + + // Push a new state guard + void pushStateGuard(); + + // Restore graphics state. + void restoreState(); + + // Pop to state guard and pop guard + void popStateGuard(); + + // Get the current graphics state object. + GfxState *getState() { return state; } + + void pushResources(Dict *resDict); + void popResources(); + +#ifdef USE_CMS + PopplerCache *getIccColorSpaceCache(); +#endif + +private: + + XRef *xref; // the xref table for this PDF file + Catalog *catalog; // the Catalog for this PDF file + OutputDev *out; // output device + GBool subPage; // is this a sub-page object? + GBool printCommands; // print the drawing commands (for debugging) + GBool profileCommands; // profile the drawing commands (for debugging) + GBool textHaveCSPattern; // in text drawing and text has pattern colorspace + GBool drawText; // in text drawing + GBool maskHaveCSPattern; // in mask drawing and mask has pattern colorspace + GBool commandAborted; // did the previous command abort the drawing? + GfxResources *res; // resource stack + int updateLevel; + + GfxState *state; // current graphics state + int stackHeight; // the height of the current graphics stack + std::vector<int> stateGuards; // a stack of state limits; to guard against unmatched pops + GBool fontChanged; // set if font or text matrix has changed + GfxClipType clip; // do a clip? + int ignoreUndef; // current BX/EX nesting level + double baseMatrix[6]; // default matrix for most recent + // page/form/pattern + int formDepth; + + MarkedContentStack *mcStack; // current BMC/EMC stack + + Parser *parser; // parser for page content stream(s) + +#ifdef USE_CMS + PopplerCache iccColorSpaceCache; +#endif + + GBool // callback to check for an abort + (*abortCheckCbk)(void *data); + void *abortCheckCbkData; + + static Operator opTab[]; // table of operators + + void go(GBool topLevel); + void execOp(Object *cmd, Object args[], int numArgs); + Operator *findOp(char *name); + GBool checkArg(Object *arg, TchkType type); + int getPos(); + + int bottomGuard(); + + // graphics state operators + void opSave(Object args[], int numArgs); + void opRestore(Object args[], int numArgs); + void opConcat(Object args[], int numArgs); + void opSetDash(Object args[], int numArgs); + void opSetFlat(Object args[], int numArgs); + void opSetLineJoin(Object args[], int numArgs); + void opSetLineCap(Object args[], int numArgs); + void opSetMiterLimit(Object args[], int numArgs); + void opSetLineWidth(Object args[], int numArgs); + void opSetExtGState(Object args[], int numArgs); + void doSoftMask(Object *str, GBool alpha, + GfxColorSpace *blendingColorSpace, + GBool isolated, GBool knockout, + Function *transferFunc, GfxColor *backdropColor); + void opSetRenderingIntent(Object args[], int numArgs); + + // color operators + void opSetFillGray(Object args[], int numArgs); + void opSetStrokeGray(Object args[], int numArgs); + void opSetFillCMYKColor(Object args[], int numArgs); + void opSetStrokeCMYKColor(Object args[], int numArgs); + void opSetFillRGBColor(Object args[], int numArgs); + void opSetStrokeRGBColor(Object args[], int numArgs); + void opSetFillColorSpace(Object args[], int numArgs); + void opSetStrokeColorSpace(Object args[], int numArgs); + void opSetFillColor(Object args[], int numArgs); + void opSetStrokeColor(Object args[], int numArgs); + void opSetFillColorN(Object args[], int numArgs); + void opSetStrokeColorN(Object args[], int numArgs); + + // path segment operators + void opMoveTo(Object args[], int numArgs); + void opLineTo(Object args[], int numArgs); + void opCurveTo(Object args[], int numArgs); + void opCurveTo1(Object args[], int numArgs); + void opCurveTo2(Object args[], int numArgs); + void opRectangle(Object args[], int numArgs); + void opClosePath(Object args[], int numArgs); + + // path painting operators + void opEndPath(Object args[], int numArgs); + void opStroke(Object args[], int numArgs); + void opCloseStroke(Object args[], int numArgs); + void opFill(Object args[], int numArgs); + void opEOFill(Object args[], int numArgs); + void opFillStroke(Object args[], int numArgs); + void opCloseFillStroke(Object args[], int numArgs); + void opEOFillStroke(Object args[], int numArgs); + void opCloseEOFillStroke(Object args[], int numArgs); + void doPatternFill(GBool eoFill); + void doPatternStroke(); + void doTilingPatternFill(GfxTilingPattern *tPat, + GBool stroke, GBool eoFill); + void doShadingPatternFill(GfxShadingPattern *sPat, + GBool stroke, GBool eoFill); + void opShFill(Object args[], int numArgs); + void doFunctionShFill(GfxFunctionShading *shading); + void doFunctionShFill1(GfxFunctionShading *shading, + double x0, double y0, + double x1, double y1, + GfxColor *colors, int depth); + void doAxialShFill(GfxAxialShading *shading); + void doRadialShFill(GfxRadialShading *shading); + void doGouraudTriangleShFill(GfxGouraudTriangleShading *shading); + void gouraudFillTriangle(double x0, double y0, GfxColor *color0, + double x1, double y1, GfxColor *color1, + double x2, double y2, GfxColor *color2, + int nComps, int depth, GfxState::ReusablePathIterator *path); + void gouraudFillTriangle(double x0, double y0, double color0, + double x1, double y1, double color1, + double x2, double y2, double color2, + double refineColorThreshold, int depth, GfxGouraudTriangleShading *shading, GfxState::ReusablePathIterator *path); + void doPatchMeshShFill(GfxPatchMeshShading *shading); + void fillPatch(GfxPatch *patch, int colorComps, int patchColorComps, double refineColorThreshold, int depth, GfxPatchMeshShading *shading); + void doEndPath(); + + // path clipping operators + void opClip(Object args[], int numArgs); + void opEOClip(Object args[], int numArgs); + + // text object operators + void opBeginText(Object args[], int numArgs); + void opEndText(Object args[], int numArgs); + + // text state operators + void opSetCharSpacing(Object args[], int numArgs); + void opSetFont(Object args[], int numArgs); + void opSetTextLeading(Object args[], int numArgs); + void opSetTextRender(Object args[], int numArgs); + void opSetTextRise(Object args[], int numArgs); + void opSetWordSpacing(Object args[], int numArgs); + void opSetHorizScaling(Object args[], int numArgs); + + // text positioning operators + void opTextMove(Object args[], int numArgs); + void opTextMoveSet(Object args[], int numArgs); + void opSetTextMatrix(Object args[], int numArgs); + void opTextNextLine(Object args[], int numArgs); + + // text string operators + void opShowText(Object args[], int numArgs); + void opMoveShowText(Object args[], int numArgs); + void opMoveSetShowText(Object args[], int numArgs); + void opShowSpaceText(Object args[], int numArgs); + void doShowText(GooString *s); + + // XObject operators + void opXObject(Object args[], int numArgs); + void doImage(Object *ref, Stream *str, GBool inlineImg); + void doForm(Object *str); + void doForm1(Object *str, Dict *resDict, double *matrix, double *bbox, + GBool transpGroup = gFalse, GBool softMask = gFalse, + GfxColorSpace *blendingColorSpace = NULL, + GBool isolated = gFalse, GBool knockout = gFalse, + GBool alpha = gFalse, Function *transferFunc = NULL, + GfxColor *backdropColor = NULL); + + // in-line image operators + void opBeginImage(Object args[], int numArgs); + Stream *buildImageStream(); + void opImageData(Object args[], int numArgs); + void opEndImage(Object args[], int numArgs); + + // type 3 font operators + void opSetCharWidth(Object args[], int numArgs); + void opSetCacheDevice(Object args[], int numArgs); + + // compatibility operators + void opBeginIgnoreUndef(Object args[], int numArgs); + void opEndIgnoreUndef(Object args[], int numArgs); + + // marked content operators + void opBeginMarkedContent(Object args[], int numArgs); + void opEndMarkedContent(Object args[], int numArgs); + void opMarkPoint(Object args[], int numArgs); + GBool contentIsHidden(); + void pushMarkedContent(); + void popMarkedContent(); +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxFont.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxFont.cc new file mode 100644 index 00000000000..33c894cad79 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxFont.cc @@ -0,0 +1,2144 @@ +//======================================================================== +// +// GfxFont.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005, 2006, 2008-2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> +// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2007 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2007 Koji Otani <sho@bbr.jp> +// Copyright (C) 2007 Ed Catmur <ed@catmur.co.uk> +// Copyright (C) 2008 Jonathan Kew <jonathan_kew@sil.org> +// Copyright (C) 2008 Ed Avis <eda@waniasset.com> +// Copyright (C) 2008, 2010 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2009 Peter Kerzum <kerzum@yandex-team.ru> +// Copyright (C) 2009, 2010 David Benjamin <davidben@mit.edu> +// Copyright (C) 2011 Axel Strübing <axel.struebing@freenet.de> +// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2012 Yi Yang <ahyangyi@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <algorithm> +#include "goo/gmem.h" +#include "Error.h" +#include "Object.h" +#include "Dict.h" +#include "GlobalParams.h" +#include "CMap.h" +#include "CharCodeToUnicode.h" +#include "FontEncodingTables.h" +#include "BuiltinFontTables.h" +#include <fofi/FoFiType1.h> +#include <fofi/FoFiType1C.h> +#include <fofi/FoFiTrueType.h> +#include "GfxFont.h" + +//------------------------------------------------------------------------ + +struct StdFontMapEntry { + char *altName; + char *properName; +}; + +// Acrobat 4.0 and earlier substituted Base14-compatible fonts without +// providing Widths and a FontDescriptor, so we munge the names into +// the proper Base14 names. This table is from implementation note 44 +// in the PDF 1.4 spec, with some additions based on empirical +// evidence. +static const StdFontMapEntry stdFontMap[] = { + { "Arial", "Helvetica" }, + { "Arial,Bold", "Helvetica-Bold" }, + { "Arial,BoldItalic", "Helvetica-BoldOblique" }, + { "Arial,Italic", "Helvetica-Oblique" }, + { "Arial-Bold", "Helvetica-Bold" }, + { "Arial-BoldItalic", "Helvetica-BoldOblique" }, + { "Arial-BoldItalicMT", "Helvetica-BoldOblique" }, + { "Arial-BoldMT", "Helvetica-Bold" }, + { "Arial-Italic", "Helvetica-Oblique" }, + { "Arial-ItalicMT", "Helvetica-Oblique" }, + { "ArialMT", "Helvetica" }, + { "Courier,Bold", "Courier-Bold" }, + { "Courier,BoldItalic", "Courier-BoldOblique" }, + { "Courier,Italic", "Courier-Oblique" }, + { "CourierNew", "Courier" }, + { "CourierNew,Bold", "Courier-Bold" }, + { "CourierNew,BoldItalic", "Courier-BoldOblique" }, + { "CourierNew,Italic", "Courier-Oblique" }, + { "CourierNew-Bold", "Courier-Bold" }, + { "CourierNew-BoldItalic", "Courier-BoldOblique" }, + { "CourierNew-Italic", "Courier-Oblique" }, + { "CourierNewPS-BoldItalicMT", "Courier-BoldOblique" }, + { "CourierNewPS-BoldMT", "Courier-Bold" }, + { "CourierNewPS-ItalicMT", "Courier-Oblique" }, + { "CourierNewPSMT", "Courier" }, + { "Helvetica,Bold", "Helvetica-Bold" }, + { "Helvetica,BoldItalic", "Helvetica-BoldOblique" }, + { "Helvetica,Italic", "Helvetica-Oblique" }, + { "Helvetica-BoldItalic", "Helvetica-BoldOblique" }, + { "Helvetica-Italic", "Helvetica-Oblique" }, + { "Symbol,Bold", "Symbol" }, + { "Symbol,BoldItalic", "Symbol" }, + { "Symbol,Italic", "Symbol" }, + { "TimesNewRoman", "Times-Roman" }, + { "TimesNewRoman,Bold", "Times-Bold" }, + { "TimesNewRoman,BoldItalic", "Times-BoldItalic" }, + { "TimesNewRoman,Italic", "Times-Italic" }, + { "TimesNewRoman-Bold", "Times-Bold" }, + { "TimesNewRoman-BoldItalic", "Times-BoldItalic" }, + { "TimesNewRoman-Italic", "Times-Italic" }, + { "TimesNewRomanPS", "Times-Roman" }, + { "TimesNewRomanPS-Bold", "Times-Bold" }, + { "TimesNewRomanPS-BoldItalic", "Times-BoldItalic" }, + { "TimesNewRomanPS-BoldItalicMT", "Times-BoldItalic" }, + { "TimesNewRomanPS-BoldMT", "Times-Bold" }, + { "TimesNewRomanPS-Italic", "Times-Italic" }, + { "TimesNewRomanPS-ItalicMT", "Times-Italic" }, + { "TimesNewRomanPSMT", "Times-Roman" }, + { "TimesNewRomanPSMT,Bold", "Times-Bold" }, + { "TimesNewRomanPSMT,BoldItalic", "Times-BoldItalic" }, + { "TimesNewRomanPSMT,Italic", "Times-Italic" } +}; + +static int parseCharName(char *charName, Unicode *uBuf, int uLen, + GBool names, GBool ligatures, + GBool numeric, GBool hex, GBool variants); + +//------------------------------------------------------------------------ +// GfxFont +//------------------------------------------------------------------------ + +GfxFont *GfxFont::makeFont(XRef *xref, char *tagA, Ref idA, Dict *fontDict) { + GooString *nameA; + GfxFont *font; + Object obj1; + + // get base font name + nameA = NULL; + fontDict->lookup("BaseFont", &obj1); + if (obj1.isName()) { + nameA = new GooString(obj1.getName()); + } + obj1.free(); + + // get font type + font = NULL; + fontDict->lookup("Subtype", &obj1); + if (obj1.isName("Type1") || obj1.isName("MMType1")) { + font = new Gfx8BitFont(xref, tagA, idA, nameA, fontType1, fontDict); + } else if (obj1.isName("Type1C")) { + font = new Gfx8BitFont(xref, tagA, idA, nameA, fontType1C, fontDict); + } else if (obj1.isName("Type3")) { + font = new Gfx8BitFont(xref, tagA, idA, nameA, fontType3, fontDict); + } else if (obj1.isName("TrueType")) { + font = new Gfx8BitFont(xref, tagA, idA, nameA, fontTrueType, fontDict); + } else if (obj1.isName("Type0")) { + font = new GfxCIDFont(xref, tagA, idA, nameA, fontDict); + } else { + error(-1, "Unknown font type: '%s'", + obj1.isName() ? obj1.getName() : "???"); + font = new Gfx8BitFont(xref, tagA, idA, nameA, fontUnknownType, fontDict); + } + obj1.free(); + + return font; +} + +GfxFont::GfxFont(char *tagA, Ref idA, GooString *nameA) { + ok = gFalse; + tag = new GooString(tagA); + id = idA; + name = nameA; + origName = nameA; + embFontName = NULL; + extFontFile = NULL; + family = NULL; + stretch = StretchNotDefined; + weight = WeightNotDefined; + refCnt = 1; + dfp = NULL; + hasToUnicode = gFalse; +} + +GfxFont::~GfxFont() { + delete tag; + delete family; + if (origName && origName != name) { + delete origName; + } + if (name) { + delete name; + } + if (embFontName) { + delete embFontName; + } + if (extFontFile) { + delete extFontFile; + } + delete dfp; +} + +void GfxFont::incRefCnt() { + refCnt++; +} + +void GfxFont::decRefCnt() { + if (--refCnt == 0) + delete this; +} + +void GfxFont::readFontDescriptor(XRef *xref, Dict *fontDict) { + Object obj1, obj2, obj3, obj4; + double t; + int i; + + // assume Times-Roman by default (for substitution purposes) + flags = fontSerif; + + embFontID.num = -1; + embFontID.gen = -1; + missingWidth = 0; + + if (fontDict->lookup("FontDescriptor", &obj1)->isDict()) { + + // get flags + if (obj1.dictLookup("Flags", &obj2)->isInt()) { + flags = obj2.getInt(); + } + obj2.free(); + + // get name + obj1.dictLookup("FontName", &obj2); + if (obj2.isName()) { + embFontName = new GooString(obj2.getName()); + } + obj2.free(); + if (embFontName == NULL) { + // get name with typo + obj1.dictLookup("Fontname", &obj2); + if (obj2.isName()) { + embFontName = new GooString(obj2.getName()); + error(-1, "The file uses Fontname instead of FontName please notify the creator that the file is broken"); + } + obj2.free(); + } + + // get family + obj1.dictLookup("FontFamily", &obj2); + if (obj2.isString()) family = new GooString(obj2.getString()); + obj2.free(); + + // get stretch + obj1.dictLookup("FontStretch", &obj2); + if (obj2.isName()) { + if (strcmp(obj2.getName(), "UltraCondensed") == 0) stretch = UltraCondensed; + else if (strcmp(obj2.getName(), "ExtraCondensed") == 0) stretch = ExtraCondensed; + else if (strcmp(obj2.getName(), "Condensed") == 0) stretch = Condensed; + else if (strcmp(obj2.getName(), "SemiCondensed") == 0) stretch = SemiCondensed; + else if (strcmp(obj2.getName(), "Normal") == 0) stretch = Normal; + else if (strcmp(obj2.getName(), "SemiExpanded") == 0) stretch = SemiExpanded; + else if (strcmp(obj2.getName(), "Expanded") == 0) stretch = Expanded; + else if (strcmp(obj2.getName(), "ExtraExpanded") == 0) stretch = ExtraExpanded; + else if (strcmp(obj2.getName(), "UltraExpanded") == 0) stretch = UltraExpanded; + else error(-1, "Invalid Font Stretch"); + } + obj2.free(); + + // get weight + obj1.dictLookup("FontWeight", &obj2); + if (obj2.isNum()) { + if (obj2.getNum() == 100) weight = W100; + else if (obj2.getNum() == 200) weight = W200; + else if (obj2.getNum() == 300) weight = W300; + else if (obj2.getNum() == 400) weight = W400; + else if (obj2.getNum() == 500) weight = W500; + else if (obj2.getNum() == 600) weight = W600; + else if (obj2.getNum() == 700) weight = W700; + else if (obj2.getNum() == 800) weight = W800; + else if (obj2.getNum() == 900) weight = W900; + else error(-1, "Invalid Font Weight"); + } + obj2.free(); + + // look for embedded font file + if (obj1.dictLookupNF("FontFile", &obj2)->isRef()) { + embFontID = obj2.getRef(); + if (type != fontType1) { + error(-1, "Mismatch between font type and embedded font file"); + if (isCIDFont()) { + error(-1, "CID font has FontFile attribute; assuming CIDType0"); + type = fontCIDType0; + } else { + type = fontType1; + } + } + } + obj2.free(); + if (embFontID.num == -1 && + obj1.dictLookupNF("FontFile2", &obj2)->isRef()) { + embFontID = obj2.getRef(); + if (type != fontTrueType && type != fontCIDType2) { + error(-1, "Mismatch between font type and embedded font file"); + type = isCIDFont() ? fontCIDType2 : fontTrueType; + } + } + obj2.free(); + if (embFontID.num == -1 && + obj1.dictLookupNF("FontFile3", &obj2)->isRef()) { + if (obj2.fetch(xref, &obj3)->isStream()) { + obj3.streamGetDict()->lookup("Subtype", &obj4); + if (obj4.isName("Type1")) { + embFontID = obj2.getRef(); + if (type != fontType1) { + error(-1, "Mismatch between font type and embedded font file"); + if (isCIDFont()) { + error(-1, "Embedded CID font has type Type1; assuming CIDType0"); + type = fontCIDType0; + } else { + type = fontType1; + } + } + } else if (obj4.isName("Type1C")) { + embFontID = obj2.getRef(); + if (type != fontType1 && type != fontType1C) { + error(-1, "Mismatch between font type and embedded font file"); + } + if (isCIDFont()) { + error(-1, "Embedded CID font has type Type1C; assuming CIDType0C"); + type = fontCIDType0C; + } else { + type = fontType1C; + } + } else if (obj4.isName("TrueType")) { + embFontID = obj2.getRef(); + if (type != fontTrueType) { + error(-1, "Mismatch between font type and embedded font file"); + if (isCIDFont()) { + error(-1, "Embedded CID font has type TrueType; assuming CIDType2"); + type = fontCIDType2; + } else { + type = fontTrueType; + } + } + } else if (obj4.isName("CIDFontType0C")) { + embFontID = obj2.getRef(); + if (type != fontCIDType0) { + error(-1, "Mismatch between font type and embedded font file"); + } + if (isCIDFont()) { + type = fontCIDType0C; + } else { + error(-1, "Embedded non-CID font has type CIDFontType0c; assuming Type1C"); + type = fontType1C; + } + } else if (obj4.isName("OpenType")) { + embFontID = obj2.getRef(); + if (type == fontTrueType) { + type = fontTrueTypeOT; + } else if (type == fontType1) { + type = fontType1COT; + } else if (type == fontCIDType0) { + type = fontCIDType0COT; + } else if (type == fontCIDType2) { + type = fontCIDType2OT; + } else { + error(-1, "Mismatch between font type and embedded font file"); + } + } else { + error(-1, "Unknown embedded font type '%s'", + obj4.isName() ? obj4.getName() : "???"); + } + obj4.free(); + } + obj3.free(); + } + obj2.free(); + + // look for MissingWidth + obj1.dictLookup("MissingWidth", &obj2); + if (obj2.isNum()) { + missingWidth = obj2.getNum(); + } + obj2.free(); + + // get Ascent and Descent + obj1.dictLookup("Ascent", &obj2); + if (obj2.isNum()) { + t = 0.001 * obj2.getNum(); + // some broken font descriptors set ascent and descent to 0 + if (t != 0) { + ascent = t; + } + } + obj2.free(); + obj1.dictLookup("Descent", &obj2); + if (obj2.isNum()) { + t = 0.001 * obj2.getNum(); + // some broken font descriptors set ascent and descent to 0 + if (t != 0) { + descent = t; + } + // some broken font descriptors specify a positive descent + if (descent > 0) { + descent = -descent; + } + } + obj2.free(); + + // font FontBBox + if (obj1.dictLookup("FontBBox", &obj2)->isArray()) { + for (i = 0; i < 4 && i < obj2.arrayGetLength(); ++i) { + if (obj2.arrayGet(i, &obj3)->isNum()) { + fontBBox[i] = 0.001 * obj3.getNum(); + } + obj3.free(); + } + } + obj2.free(); + + } + obj1.free(); +} + +CharCodeToUnicode *GfxFont::readToUnicodeCMap(Dict *fontDict, int nBits, + CharCodeToUnicode *ctu) { + GooString *buf; + Object obj1; + + if (!fontDict->lookup("ToUnicode", &obj1)->isStream()) { + obj1.free(); + return NULL; + } + buf = new GooString(); + obj1.getStream()->fillGooString(buf); + obj1.streamClose(); + obj1.free(); + if (ctu) { + ctu->mergeCMap(buf, nBits); + } else { + ctu = CharCodeToUnicode::parseCMap(buf, nBits); + } + hasToUnicode = gTrue; + delete buf; + return ctu; +} + +void GfxFont::findExtFontFile() { + static char *type1Exts[] = { ".pfa", ".pfb", ".ps", "", NULL }; + static char *ttExts[] = { ".ttf", ".ttc", ".otf", NULL }; + + if (name) { + if (type == fontType1) { + extFontFile = globalParams->findFontFile(name, type1Exts); + } else if (type == fontTrueType) { + extFontFile = globalParams->findFontFile(name, ttExts); + } + } +} + +char *GfxFont::readExtFontFile(int *len) { + FILE *f; + char *buf; + + if (!(f = fopen(extFontFile->getCString(), "rb"))) { + error(-1, "External font file '%s' vanished", extFontFile->getCString()); + return NULL; + } + if (fseek(f, 0, SEEK_END) != 0) { + error(-1, "Cannot seek to end of '%s'", extFontFile->getCString()); + fclose(f); + return NULL; + } + *len = (int)ftell(f); + if (fseek(f, 0, SEEK_SET) != 0) { + error(-1, "Cannot seek to start of '%s'", extFontFile->getCString()); + fclose(f); + return NULL; + } + buf = (char *)gmalloc(*len); + if ((int)fread(buf, 1, *len, f) != *len) { + error(-1, "Error reading external font file '%s'", + extFontFile->getCString()); + } + fclose(f); + return buf; +} + +char *GfxFont::readEmbFontFile(XRef *xref, int *len) { + char *buf; + Object obj1, obj2; + Stream *str; + + obj1.initRef(embFontID.num, embFontID.gen); + obj1.fetch(xref, &obj2); + if (!obj2.isStream()) { + error(-1, "Embedded font file is not a stream"); + obj2.free(); + obj1.free(); + embFontID.num = -1; + *len = 0; + return NULL; + } + str = obj2.getStream(); + + buf = (char*)str->toUnsignedChars(len); + str->close(); + + obj2.free(); + obj1.free(); + + return buf; +} + +//------------------------------------------------------------------------ +// Gfx8BitFont +//------------------------------------------------------------------------ + +Gfx8BitFont::Gfx8BitFont(XRef *xref, char *tagA, Ref idA, GooString *nameA, + GfxFontType typeA, Dict *fontDict): + GfxFont(tagA, idA, nameA) +{ + GooString *name2; + BuiltinFont *builtinFont; + char **baseEnc; + GBool baseEncFromFontFile; + char *buf; + int len; + FoFiType1 *ffT1; + FoFiType1C *ffT1C; + int code; + char *charName; + GBool missing, hex; + Unicode toUnicode[256]; + CharCodeToUnicode *utu, *ctu2; + Unicode uBuf[8]; + double mul; + int firstChar, lastChar; + Gushort w; + Object obj1, obj2, obj3; + int n, i, a, b, m; + + refCnt = 1; + type = typeA; + ctu = NULL; + + // do font name substitution for various aliases of the Base 14 font + // names + if (name) { + name2 = name->copy(); + i = 0; + while (i < name2->getLength()) { + if (name2->getChar(i) == ' ') { + name2->del(i); + } else { + ++i; + } + } + a = 0; + b = sizeof(stdFontMap) / sizeof(StdFontMapEntry); + // invariant: stdFontMap[a].altName <= name2 < stdFontMap[b].altName + while (b - a > 1) { + m = (a + b) / 2; + if (name2->cmp(stdFontMap[m].altName) >= 0) { + a = m; + } else { + b = m; + } + } + if (!name2->cmp(stdFontMap[a].altName)) { + name = new GooString(stdFontMap[a].properName); + } + delete name2; + } + + // is it a built-in font? + builtinFont = NULL; + if (name) { + for (i = 0; i < nBuiltinFonts; ++i) { + if (!name->cmp(builtinFonts[i].name)) { + builtinFont = &builtinFonts[i]; + break; + } + } + } + + // default ascent/descent values + if (builtinFont) { + ascent = 0.001 * builtinFont->ascent; + descent = 0.001 * builtinFont->descent; + fontBBox[0] = 0.001 * builtinFont->bbox[0]; + fontBBox[1] = 0.001 * builtinFont->bbox[1]; + fontBBox[2] = 0.001 * builtinFont->bbox[2]; + fontBBox[3] = 0.001 * builtinFont->bbox[3]; + } else { + ascent = 0.95; + descent = -0.35; + fontBBox[0] = fontBBox[1] = fontBBox[2] = fontBBox[3] = 0; + } + + // get info from font descriptor + readFontDescriptor(xref, fontDict); + + // for non-embedded fonts, don't trust the ascent/descent/bbox + // values from the font descriptor + if (builtinFont && embFontID.num < 0) { + ascent = 0.001 * builtinFont->ascent; + descent = 0.001 * builtinFont->descent; + fontBBox[0] = 0.001 * builtinFont->bbox[0]; + fontBBox[1] = 0.001 * builtinFont->bbox[1]; + fontBBox[2] = 0.001 * builtinFont->bbox[2]; + fontBBox[3] = 0.001 * builtinFont->bbox[3]; + } + + // look for an external font file + findExtFontFile(); + + // get font matrix + fontMat[0] = fontMat[3] = 1; + fontMat[1] = fontMat[2] = fontMat[4] = fontMat[5] = 0; + if (fontDict->lookup("FontMatrix", &obj1)->isArray()) { + for (i = 0; i < 6 && i < obj1.arrayGetLength(); ++i) { + if (obj1.arrayGet(i, &obj2)->isNum()) { + fontMat[i] = obj2.getNum(); + } + obj2.free(); + } + } + obj1.free(); + + // get Type 3 bounding box, font definition, and resources + if (type == fontType3) { + if (fontDict->lookup("FontBBox", &obj1)->isArray()) { + for (i = 0; i < 4 && i < obj1.arrayGetLength(); ++i) { + if (obj1.arrayGet(i, &obj2)->isNum()) { + fontBBox[i] = obj2.getNum(); + } + obj2.free(); + } + } + obj1.free(); + if (!fontDict->lookup("CharProcs", &charProcs)->isDict()) { + error(-1, "Missing or invalid CharProcs dictionary in Type 3 font"); + charProcs.free(); + } + if (!fontDict->lookup("Resources", &resources)->isDict()) { + resources.free(); + } + } + + //----- build the font encoding ----- + + // Encodings start with a base encoding, which can come from + // (in order of priority): + // 1. FontDict.Encoding or FontDict.Encoding.BaseEncoding + // - MacRoman / MacExpert / WinAnsi / Standard + // 2. embedded or external font file + // 3. default: + // - builtin --> builtin encoding + // - TrueType --> WinAnsiEncoding + // - others --> StandardEncoding + // and then add a list of differences (if any) from + // FontDict.Encoding.Differences. + + // check FontDict for base encoding + hasEncoding = gFalse; + usesMacRomanEnc = gFalse; + baseEnc = NULL; + baseEncFromFontFile = gFalse; + fontDict->lookup("Encoding", &obj1); + if (obj1.isDict()) { + obj1.dictLookup("BaseEncoding", &obj2); + if (obj2.isName("MacRomanEncoding")) { + hasEncoding = gTrue; + usesMacRomanEnc = gTrue; + baseEnc = macRomanEncoding; + } else if (obj2.isName("MacExpertEncoding")) { + hasEncoding = gTrue; + baseEnc = macExpertEncoding; + } else if (obj2.isName("WinAnsiEncoding")) { + hasEncoding = gTrue; + baseEnc = winAnsiEncoding; + } + obj2.free(); + } else if (obj1.isName("MacRomanEncoding")) { + hasEncoding = gTrue; + usesMacRomanEnc = gTrue; + baseEnc = macRomanEncoding; + } else if (obj1.isName("MacExpertEncoding")) { + hasEncoding = gTrue; + baseEnc = macExpertEncoding; + } else if (obj1.isName("WinAnsiEncoding")) { + hasEncoding = gTrue; + baseEnc = winAnsiEncoding; + } + + // check embedded or external font file for base encoding + // (only for Type 1 fonts - trying to get an encoding out of a + // TrueType font is a losing proposition) + ffT1 = NULL; + ffT1C = NULL; + buf = NULL; + if (type == fontType1 && (extFontFile || embFontID.num >= 0)) { + if (extFontFile) { + ffT1 = FoFiType1::load(extFontFile->getCString()); + } else { + buf = readEmbFontFile(xref, &len); + ffT1 = FoFiType1::make(buf, len); + } + if (ffT1) { + if (ffT1->getName()) { + if (embFontName) { + delete embFontName; + } + embFontName = new GooString(ffT1->getName()); + } + if (!baseEnc) { + baseEnc = ffT1->getEncoding(); + baseEncFromFontFile = gTrue; + } + } + } else if (type == fontType1C && (extFontFile || embFontID.num >= 0)) { + if (extFontFile) { + ffT1C = FoFiType1C::load(extFontFile->getCString()); + } else { + buf = readEmbFontFile(xref, &len); + ffT1C = FoFiType1C::make(buf, len); + } + if (ffT1C) { + if (ffT1C->getName()) { + if (embFontName) { + delete embFontName; + } + embFontName = new GooString(ffT1C->getName()); + } + if (!baseEnc) { + baseEnc = ffT1C->getEncoding(); + baseEncFromFontFile = gTrue; + } + } + } + if (buf) { + gfree(buf); + } + + // get default base encoding + if (!baseEnc) { + if (builtinFont && embFontID.num < 0) { + baseEnc = builtinFont->defaultBaseEnc; + hasEncoding = gTrue; + } else if (type == fontTrueType) { + baseEnc = winAnsiEncoding; + } else { + baseEnc = standardEncoding; + } + } + + // copy the base encoding + for (i = 0; i < 256; ++i) { + enc[i] = baseEnc[i]; + if ((encFree[i] = baseEncFromFontFile) && enc[i]) { + enc[i] = copyString(baseEnc[i]); + } + } + + // some Type 1C font files have empty encodings, which can break the + // T1C->T1 conversion (since the 'seac' operator depends on having + // the accents in the encoding), so we fill in any gaps from + // StandardEncoding + if (type == fontType1C && (extFontFile || embFontID.num >= 0) && + baseEncFromFontFile) { + for (i = 0; i < 256; ++i) { + if (!enc[i] && standardEncoding[i]) { + enc[i] = standardEncoding[i]; + encFree[i] = gFalse; + } + } + } + + // merge differences into encoding + if (obj1.isDict()) { + obj1.dictLookup("Differences", &obj2); + if (obj2.isArray()) { + hasEncoding = gTrue; + code = 0; + for (i = 0; i < obj2.arrayGetLength(); ++i) { + obj2.arrayGet(i, &obj3); + if (obj3.isInt()) { + code = obj3.getInt(); + } else if (obj3.isName()) { + if (code >= 0 && code < 256) { + if (encFree[code]) { + gfree(enc[code]); + } + enc[code] = copyString(obj3.getName()); + encFree[code] = gTrue; + } + ++code; + } else { + error(-1, "Wrong type in font encoding resource differences (%s)", + obj3.getTypeName()); + } + obj3.free(); + } + } + obj2.free(); + } + obj1.free(); + if (ffT1) { + delete ffT1; + } + if (ffT1C) { + delete ffT1C; + } + + //----- build the mapping to Unicode ----- + + // pass 1: use the name-to-Unicode mapping table + missing = hex = gFalse; + for (code = 0; code < 256; ++code) { + if ((charName = enc[code])) { + if (!(toUnicode[code] = globalParams->mapNameToUnicode(charName)) && + strcmp(charName, ".notdef")) { + // if it wasn't in the name-to-Unicode table, check for a + // name that looks like 'Axx' or 'xx', where 'A' is any letter + // and 'xx' is two hex digits + if ((strlen(charName) == 3 && + isalpha(charName[0]) && + isxdigit(charName[1]) && isxdigit(charName[2]) && + ((charName[1] >= 'a' && charName[1] <= 'f') || + (charName[1] >= 'A' && charName[1] <= 'F') || + (charName[2] >= 'a' && charName[2] <= 'f') || + (charName[2] >= 'A' && charName[2] <= 'F'))) || + (strlen(charName) == 2 && + isxdigit(charName[0]) && isxdigit(charName[1]) && + ((charName[0] >= 'a' && charName[0] <= 'f') || + (charName[0] >= 'A' && charName[0] <= 'F') || + (charName[1] >= 'a' && charName[1] <= 'f') || + (charName[1] >= 'A' && charName[1] <= 'F')))) { + hex = gTrue; + } + missing = gTrue; + } + } else { + toUnicode[code] = 0; + } + } + + // construct the char code -> Unicode mapping object + ctu = CharCodeToUnicode::make8BitToUnicode(toUnicode); + + // pass 2: try to fill in the missing chars, looking for ligatures, numeric + // references and variants + if (missing) { + for (code = 0; code < 256; ++code) { + if (!toUnicode[code]) { + if ((charName = enc[code]) && strcmp(charName, ".notdef") + && (n = parseCharName(charName, uBuf, sizeof(uBuf)/sizeof(*uBuf), + gFalse, // don't check simple names (pass 1) + gTrue, // do check ligatures + globalParams->getMapNumericCharNames(), + hex, + gTrue))) { // do check variants + ctu->setMapping((CharCode)code, uBuf, n); + } else if (globalParams->getMapUnknownCharNames()) { + // if the 'mapUnknownCharNames' flag is set, do a simple pass-through + // mapping for unknown character names + if (charName && charName[0]) { + for (n = 0; n < (int)(sizeof(uBuf)/sizeof(*uBuf)); ++n) + if (!(uBuf[n] = charName[n])) + break; + ctu->setMapping((CharCode)code, uBuf, n); + } else { + uBuf[0] = code; + ctu->setMapping((CharCode)code, uBuf, 1); + } + } + } + } + } + + // merge in a ToUnicode CMap, if there is one -- this overwrites + // existing entries in ctu, i.e., the ToUnicode CMap takes + // precedence, but the other encoding info is allowed to fill in any + // holes + readToUnicodeCMap(fontDict, 8, ctu); + + // look for a Unicode-to-Unicode mapping + if (name && (utu = globalParams->getUnicodeToUnicode(name))) { + Unicode *uAux; + for (i = 0; i < 256; ++i) { + toUnicode[i] = 0; + } + ctu2 = CharCodeToUnicode::make8BitToUnicode(toUnicode); + for (i = 0; i < 256; ++i) { + n = ctu->mapToUnicode((CharCode)i, &uAux); + if (n >= 1) { + n = utu->mapToUnicode((CharCode)uAux[0], &uAux); + if (n >= 1) { + ctu2->setMapping((CharCode)i, uAux, n); + } + } + } + utu->decRefCnt(); + delete ctu; + ctu = ctu2; + } + + //----- get the character widths ----- + + // initialize all widths + for (code = 0; code < 256; ++code) { + widths[code] = missingWidth * 0.001; + } + + // use widths from font dict, if present + fontDict->lookup("FirstChar", &obj1); + firstChar = obj1.isInt() ? obj1.getInt() : 0; + obj1.free(); + if (firstChar < 0 || firstChar > 255) { + firstChar = 0; + } + fontDict->lookup("LastChar", &obj1); + lastChar = obj1.isInt() ? obj1.getInt() : 255; + obj1.free(); + if (lastChar < 0 || lastChar > 255) { + lastChar = 255; + } + mul = (type == fontType3) ? fontMat[0] : 0.001; + fontDict->lookup("Widths", &obj1); + if (obj1.isArray()) { + flags |= fontFixedWidth; + if (obj1.arrayGetLength() < lastChar - firstChar + 1) { + lastChar = firstChar + obj1.arrayGetLength() - 1; + } + for (code = firstChar; code <= lastChar; ++code) { + obj1.arrayGet(code - firstChar, &obj2); + if (obj2.isNum()) { + widths[code] = obj2.getNum() * mul; + if (widths[code] != widths[firstChar]) { + flags &= ~fontFixedWidth; + } + } + obj2.free(); + } + + // use widths from built-in font + } else if (builtinFont) { + // this is a kludge for broken PDF files that encode char 32 + // as .notdef + if (builtinFont->widths->getWidth("space", &w)) { + widths[32] = 0.001 * w; + } + for (code = 0; code < 256; ++code) { + if (enc[code] && builtinFont->widths->getWidth(enc[code], &w)) { + widths[code] = 0.001 * w; + } + } + + // couldn't find widths -- use defaults + } else { + // this is technically an error -- the Widths entry is required + // for all but the Base-14 fonts -- but certain PDF generators + // apparently don't include widths for Arial and TimesNewRoman + if (isFixedWidth()) { + i = 0; + } else if (isSerif()) { + i = 8; + } else { + i = 4; + } + if (isBold()) { + i += 2; + } + if (isItalic()) { + i += 1; + } + builtinFont = builtinFontSubst[i]; + // this is a kludge for broken PDF files that encode char 32 + // as .notdef + if (builtinFont->widths->getWidth("space", &w)) { + widths[32] = 0.001 * w; + } + for (code = 0; code < 256; ++code) { + if (enc[code] && builtinFont->widths->getWidth(enc[code], &w)) { + widths[code] = 0.001 * w; + } + } + } + obj1.free(); + + ok = gTrue; +} + +Gfx8BitFont::~Gfx8BitFont() { + int i; + + for (i = 0; i < 256; ++i) { + if (encFree[i] && enc[i]) { + gfree(enc[i]); + } + } + ctu->decRefCnt(); + if (charProcs.isDict()) { + charProcs.free(); + } + if (resources.isDict()) { + resources.free(); + } +} + +// This function is in part a derived work of the Adobe Glyph Mapping +// Convention: http://www.adobe.com/devnet/opentype/archives/glyph.html +// Algorithmic comments are excerpted from that document to aid +// maintainability. +static int parseCharName(char *charName, Unicode *uBuf, int uLen, + GBool names, GBool ligatures, + GBool numeric, GBool hex, GBool variants) +{ + if (uLen <= 0) { + error(-1, "Zero-length output buffer (recursion overflow?) in " + "parseCharName, component \"%s\"", charName); + return 0; + } + // Step 1: drop all the characters from the glyph name starting with the + // first occurrence of a period (U+002E FULL STOP), if any. + if (variants) { + char *var_part = strchr(charName, '.'); + if (var_part == charName) { + return 0; // .notdef or similar + } else if (var_part != NULL) { + // parse names of the form 7.oldstyle, P.swash, s.sc, etc. + char *main_part = gstrndup(charName, var_part - charName); + GBool namesRecurse = gTrue, variantsRecurse = gFalse; + int n = parseCharName(main_part, uBuf, uLen, namesRecurse, ligatures, + numeric, hex, variantsRecurse); + gfree(main_part); + return n; + } + } + // Step 2: split the remaining string into a sequence of components, using + // underscore (U+005F LOW LINE) as the delimiter. + if (ligatures && strchr(charName, '_')) { + // parse names of the form A_a (e.g. f_i, T_h, l_quotesingle) + char *lig_part, *lig_end, *lig_copy; + int n = 0, m; + lig_part = lig_copy = copyString(charName); + do { + if ((lig_end = strchr(lig_part, '_'))) + *lig_end = '\0'; + if (lig_part[0] != '\0') { + GBool namesRecurse = gTrue, ligaturesRecurse = gFalse; + if ((m = parseCharName(lig_part, uBuf + n, uLen - n, namesRecurse, + ligaturesRecurse, numeric, hex, variants))) + n += m; + else + error(-1, "Could not parse ligature component \"%s\" of \"%s\" in " + "parseCharName", lig_part, charName); + } + lig_part = lig_end + 1; + } while (lig_end && n < uLen); + gfree(lig_copy); + return n; + } + // Step 3: map each component to a character string according to the + // procedure below, and concatenate those strings; the result is the + // character string to which the glyph name is mapped. + // 3.1. if the font is Zapf Dingbats (PostScript FontName ZapfDingbats), and + // the component is in the ZapfDingbats list, then map it to the + // corresponding character in that list. + // 3.2. otherwise, if the component is in the Adobe Glyph List, then map it + // to the corresponding character in that list. + if (names && (uBuf[0] = globalParams->mapNameToUnicode(charName))) { + return 1; + } + if (numeric) { + unsigned int n = strlen(charName); + // 3.3. otherwise, if the component is of the form "uni" (U+0075 U+006E + // U+0069) followed by a sequence of uppercase hexadecimal digits (0 .. 9, + // A .. F, i.e. U+0030 .. U+0039, U+0041 .. U+0046), the length of that + // sequence is a multiple of four, and each group of four digits represents + // a number in the set {0x0000 .. 0xD7FF, 0xE000 .. 0xFFFF}, then interpret + // each such number as a Unicode scalar value and map the component to the + // string made of those scalar values. Note that the range and digit length + // restrictions mean that the "uni" prefix can be used only with Unicode + // values from the Basic Multilingual Plane (BMP). + if (n >= 7 && (n % 4) == 3 && !strncmp(charName, "uni", 3)) { + int i; + unsigned int m; + for (i = 0, m = 3; i < uLen && m < n; m += 4) { + if (isxdigit(charName[m]) && isxdigit(charName[m + 1]) && + isxdigit(charName[m + 2]) && isxdigit(charName[m + 3])) { + unsigned int u; + sscanf(charName + m, "%4x", &u); + if (u <= 0xD7FF || (0xE000 <= u && u <= 0xFFFF)) { + uBuf[i++] = u; + } + } + } + return i; + } + // 3.4. otherwise, if the component is of the form "u" (U+0075) followed by + // a sequence of four to six uppercase hexadecimal digits {0 .. 9, A .. F} + // (U+0030 .. U+0039, U+0041 .. U+0046), and those digits represent a + // number in {0x0000 .. 0xD7FF, 0xE000 .. 0x10FFFF}, then interpret this + // number as a Unicode scalar value and map the component to the string + // made of this scalar value. + if (n >= 5 && n <= 7 && charName[0] == 'u' && isxdigit(charName[1]) && + isxdigit(charName[2]) && isxdigit(charName[3]) && isxdigit(charName[4]) + && (n <= 5 || isxdigit(charName[5])) + && (n <= 6 || isxdigit(charName[6]))) { + unsigned int u; + sscanf(charName + 1, "%x", &u); + if (u <= 0xD7FF || (0xE000 <= u && u <= 0x10FFFF)) { + uBuf[0] = u; + return 1; + } + } + // Not in Adobe Glyph Mapping convention: look for names of the form 'Axx', + // 'xx', 'Ann', 'ABnn', or 'nn', where 'A' and 'B' are any letters, 'xx' is + // two hex digits, and 'nn' is 2-4 decimal digits + if (hex && n == 3 && isalpha(charName[0]) && + isxdigit(charName[1]) && isxdigit(charName[2])) { + sscanf(charName+1, "%x", (unsigned int *)uBuf); + return 1; + } else if (hex && n == 2 && + isxdigit(charName[0]) && isxdigit(charName[1])) { + sscanf(charName, "%x", (unsigned int *)uBuf); + return 1; + } else if (!hex && n >= 2 && n <= 4 && + isdigit(charName[0]) && isdigit(charName[1])) { + uBuf[0] = (Unicode)atoi(charName); + return 1; + } else if (n >= 3 && n <= 5 && + isdigit(charName[1]) && isdigit(charName[2])) { + uBuf[0] = (Unicode)atoi(charName+1); + return 1; + } else if (n >= 4 && n <= 6 && + isdigit(charName[2]) && isdigit(charName[3])) { + uBuf[0] = (Unicode)atoi(charName+2); + return 1; + } + } + // 3.5. otherwise, map the component to the empty string + return 0; +} + +int Gfx8BitFont::getNextChar(char *s, int len, CharCode *code, + Unicode **u, int *uLen, + double *dx, double *dy, double *ox, double *oy) { + CharCode c; + + *code = c = (CharCode)(*s & 0xff); + *uLen = ctu->mapToUnicode(c, u); + *dx = widths[c]; + *dy = *ox = *oy = 0; + return 1; +} + +CharCodeToUnicode *Gfx8BitFont::getToUnicode() { + ctu->incRefCnt(); + return ctu; +} + +Gushort *Gfx8BitFont::getCodeToGIDMap(FoFiTrueType *ff) { + Gushort *map; + int cmapPlatform, cmapEncoding; + int unicodeCmap, macRomanCmap, msSymbolCmap, cmap; + GBool useMacRoman, useUnicode; + char *charName; + Unicode u; + int code, i, n; + + map = (Gushort *)gmallocn(256, sizeof(Gushort)); + for (i = 0; i < 256; ++i) { + map[i] = 0; + } + + // To match up with the Adobe-defined behaviour, we choose a cmap + // like this: + // 1. If the PDF font has an encoding: + // 1a. If the PDF font specified MacRomanEncoding and the + // TrueType font has a Macintosh Roman cmap, use it, and + // reverse map the char names through MacRomanEncoding to + // get char codes. + // 1b. If the TrueType font has a Microsoft Unicode cmap or a + // non-Microsoft Unicode cmap, use it, and use the Unicode + // indexes, not the char codes. + // 1c. If the PDF font is symbolic and the TrueType font has a + // Microsoft Symbol cmap, use it, and use char codes + // directly (possibly with an offset of 0xf000). + // 1d. If the TrueType font has a Macintosh Roman cmap, use it, + // as in case 1a. + // 2. If the PDF font does not have an encoding or the PDF font is + // symbolic: + // 2a. If the TrueType font has a Macintosh Roman cmap, use it, + // and use char codes directly (possibly with an offset of + // 0xf000). + // 2b. If the TrueType font has a Microsoft Symbol cmap, use it, + // and use char codes directly (possible with an offset of + // 0xf000). + // 3. If none of these rules apply, use the first cmap and hope for + // the best (this shouldn't happen). + unicodeCmap = macRomanCmap = msSymbolCmap = -1; + for (i = 0; i < ff->getNumCmaps(); ++i) { + cmapPlatform = ff->getCmapPlatform(i); + cmapEncoding = ff->getCmapEncoding(i); + if ((cmapPlatform == 3 && cmapEncoding == 1) || + cmapPlatform == 0) { + unicodeCmap = i; + } else if (cmapPlatform == 1 && cmapEncoding == 0) { + macRomanCmap = i; + } else if (cmapPlatform == 3 && cmapEncoding == 0) { + msSymbolCmap = i; + } + } + cmap = 0; + useMacRoman = gFalse; + useUnicode = gFalse; + if (hasEncoding || type == fontType1) { + if (usesMacRomanEnc && macRomanCmap >= 0) { + cmap = macRomanCmap; + useMacRoman = gTrue; + } else if (unicodeCmap >= 0) { + cmap = unicodeCmap; + useUnicode = gTrue; + } else if ((flags & fontSymbolic) && msSymbolCmap >= 0) { + cmap = msSymbolCmap; + } else if ((flags & fontSymbolic) && macRomanCmap >= 0) { + cmap = macRomanCmap; + } else if (macRomanCmap >= 0) { + cmap = macRomanCmap; + useMacRoman = gTrue; + } + } else { + if (msSymbolCmap >= 0) { + cmap = msSymbolCmap; + } else if (macRomanCmap >= 0) { + cmap = macRomanCmap; + } + } + + // reverse map the char names through MacRomanEncoding, then map the + // char codes through the cmap + if (useMacRoman) { + for (i = 0; i < 256; ++i) { + if ((charName = enc[i])) { + if ((code = globalParams->getMacRomanCharCode(charName))) { + map[i] = ff->mapCodeToGID(cmap, code); + } + } + } + + // map Unicode through the cmap + } else if (useUnicode) { + Unicode *uAux; + for (i = 0; i < 256; ++i) { + if (((charName = enc[i]) && (u = globalParams->mapNameToUnicode(charName)))) + map[i] = ff->mapCodeToGID(cmap, u); + else + { + n = ctu->mapToUnicode((CharCode)i, &uAux); + if (n > 0) map[i] = ff->mapCodeToGID(cmap, uAux[0]); + } + } + + // map the char codes through the cmap, possibly with an offset of + // 0xf000 + } else { + for (i = 0; i < 256; ++i) { + if (!(map[i] = ff->mapCodeToGID(cmap, i))) { + map[i] = ff->mapCodeToGID(cmap, 0xf000 + i); + } + } + } + + // try the TrueType 'post' table to handle any unmapped characters + for (i = 0; i < 256; ++i) { + if (!map[i] && (charName = enc[i])) { + map[i] = (Gushort)(int)ff->mapNameToGID(charName); + } + } + + return map; +} + +Dict *Gfx8BitFont::getCharProcs() { + return charProcs.isDict() ? charProcs.getDict() : (Dict *)NULL; +} + +Object *Gfx8BitFont::getCharProc(int code, Object *proc) { + if (enc[code] && charProcs.isDict()) { + charProcs.dictLookup(enc[code], proc); + } else { + proc->initNull(); + } + return proc; +} + +Dict *Gfx8BitFont::getResources() { + return resources.isDict() ? resources.getDict() : (Dict *)NULL; +} + +//------------------------------------------------------------------------ +// GfxCIDFont +//------------------------------------------------------------------------ + +static bool cmpWidthExcep(const GfxFontCIDWidthExcep &w1, const GfxFontCIDWidthExcep &w2) { + return w1.first < w2.first; +} + +static bool cmpWidthExcepV(const GfxFontCIDWidthExcepV &w1, const GfxFontCIDWidthExcepV &w2) { + return w1.first < w2.first; +} + +GfxCIDFont::GfxCIDFont(XRef *xref, char *tagA, Ref idA, GooString *nameA, + Dict *fontDict): + GfxFont(tagA, idA, nameA) +{ + Dict *desFontDict; + GooString *collection, *cMapName; + Object desFontDictObj; + Object obj1, obj2, obj3, obj4, obj5, obj6; + CharCodeToUnicode *utu; + CharCode c; + Unicode *uBuf; + int c1, c2; + int excepsSize, i, j, k, n; + + refCnt = 1; + ascent = 0.95; + descent = -0.35; + fontBBox[0] = fontBBox[1] = fontBBox[2] = fontBBox[3] = 0; + cMap = NULL; + cMapName = NULL; + ctu = NULL; + widths.defWidth = 1.0; + widths.defHeight = -1.0; + widths.defVY = 0.880; + widths.exceps = NULL; + widths.nExceps = 0; + widths.excepsV = NULL; + widths.nExcepsV = 0; + cidToGID = NULL; + cidToGIDLen = 0; + + // get the descendant font + if (!fontDict->lookup("DescendantFonts", &obj1)->isArray()) { + error(-1, "Missing DescendantFonts entry in Type 0 font"); + obj1.free(); + goto err1; + } + if (!obj1.arrayGet(0, &desFontDictObj)->isDict()) { + error(-1, "Bad descendant font in Type 0 font"); + goto err3; + } + obj1.free(); + desFontDict = desFontDictObj.getDict(); + + // font type + if (!desFontDict->lookup("Subtype", &obj1)) { + error(-1, "Missing Subtype entry in Type 0 descendant font"); + goto err3; + } + if (obj1.isName("CIDFontType0")) { + type = fontCIDType0; + } else if (obj1.isName("CIDFontType2")) { + type = fontCIDType2; + } else { + error(-1, "Unknown Type 0 descendant font type '%s'", + obj1.isName() ? obj1.getName() : "???"); + goto err3; + } + obj1.free(); + + // get info from font descriptor + readFontDescriptor(xref, desFontDict); + + // look for an external font file + findExtFontFile(); + + //----- encoding info ----- + + // char collection + if (!desFontDict->lookup("CIDSystemInfo", &obj1)->isDict()) { + error(-1, "Missing CIDSystemInfo dictionary in Type 0 descendant font"); + goto err3; + } + obj1.dictLookup("Registry", &obj2); + obj1.dictLookup("Ordering", &obj3); + if (!obj2.isString() || !obj3.isString()) { + error(-1, "Invalid CIDSystemInfo dictionary in Type 0 descendant font"); + goto err4; + } + collection = obj2.getString()->copy()->append('-')->append(obj3.getString()); + obj3.free(); + obj2.free(); + obj1.free(); + + // look for a ToUnicode CMap + if (!(ctu = readToUnicodeCMap(fontDict, 16, NULL))) { + + // the "Adobe-Identity" and "Adobe-UCS" collections don't have + // cidToUnicode files + if (collection->cmp("Adobe-Identity") && + collection->cmp("Adobe-UCS")) { + + // look for a user-supplied .cidToUnicode file + if (!(ctu = globalParams->getCIDToUnicode(collection))) { + // I'm not completely sure that this is the best thing to do + // but it seems to produce better results when the .cidToUnicode + // files from the poppler-data package are missing. At least + // we know that assuming the Identity mapping is definitely wrong. + // -- jrmuizel + static const char * knownCollections [] = { + "Adobe-CNS1", + "Adobe-GB1", + "Adobe-Japan1", + "Adobe-Japan2", + "Adobe-Korea1", + }; + for (size_t i = 0; i < sizeof(knownCollections)/sizeof(knownCollections[0]); i++) { + if (collection->cmp(knownCollections[i]) == 0) { + error(-1, "Missing language pack for '%s' mapping", collection->getCString()); + delete collection; + goto err2; + } + } + error(-1, "Unknown character collection '%s'", + collection->getCString()); + // fall-through, assuming the Identity mapping -- this appears + // to match Adobe's behavior + } + } + } + + // look for a Unicode-to-Unicode mapping + if (name && (utu = globalParams->getUnicodeToUnicode(name))) { + if (ctu) { + for (c = 0; c < ctu->getLength(); ++c) { + n = ctu->mapToUnicode(c, &uBuf); + if (n >= 1) { + n = utu->mapToUnicode((CharCode)uBuf[0], &uBuf); + if (n >= 1) { + ctu->setMapping(c, uBuf, n); + } + } + } + utu->decRefCnt(); + } else { + ctu = utu; + } + } + + // encoding (i.e., CMap) + //~ also need to deal with the UseCMap entry in the stream dict + if (!fontDict->lookup("Encoding", &obj1)->isName()) { + GBool success = gFalse; + if (obj1.isStream()) { + Object objName; + Stream *s = obj1.getStream(); + s->getDict()->lookup("CMapName", &objName); + if (objName.isName()) + { + cMapName = new GooString(objName.getName()); + cMap = globalParams->getCMap(collection, cMapName, s); + success = gTrue; + } + objName.free(); + } + + if (!success) { + error(-1, "Missing or invalid Encoding entry in Type 0 font"); + delete collection; + goto err3; + } + } else { + cMapName = new GooString(obj1.getName()); + cMap = globalParams->getCMap(collection, cMapName); + } + if (!cMap) { + error(-1, "Unknown CMap '%s' for character collection '%s'", + cMapName->getCString(), collection->getCString()); + delete collection; + delete cMapName; + goto err2; + } + delete collection; + delete cMapName; + obj1.free(); + + // CIDToGIDMap (for embedded TrueType fonts) + if (type == fontCIDType2 || type == fontCIDType2OT) { + desFontDict->lookup("CIDToGIDMap", &obj1); + if (obj1.isStream()) { + cidToGIDLen = 0; + i = 64; + cidToGID = (Gushort *)gmallocn(i, sizeof(Gushort)); + obj1.streamReset(); + while ((c1 = obj1.streamGetChar()) != EOF && + (c2 = obj1.streamGetChar()) != EOF) { + if (cidToGIDLen == i) { + i *= 2; + cidToGID = (Gushort *)greallocn(cidToGID, i, sizeof(Gushort)); + } + cidToGID[cidToGIDLen++] = (Gushort)((c1 << 8) + c2); + } + } else if (!obj1.isName("Identity") && !obj1.isNull()) { + error(-1, "Invalid CIDToGIDMap entry in CID font"); + } + obj1.free(); + } + + //----- character metrics ----- + + // default char width + if (desFontDict->lookup("DW", &obj1)->isInt()) { + widths.defWidth = obj1.getInt() * 0.001; + } + obj1.free(); + + // char width exceptions + if (desFontDict->lookup("W", &obj1)->isArray()) { + excepsSize = 0; + i = 0; + while (i + 1 < obj1.arrayGetLength()) { + obj1.arrayGet(i, &obj2); + obj1.arrayGet(i + 1, &obj3); + if (obj2.isInt() && obj3.isInt() && i + 2 < obj1.arrayGetLength()) { + if (obj1.arrayGet(i + 2, &obj4)->isNum()) { + if (widths.nExceps == excepsSize) { + excepsSize += 16; + widths.exceps = (GfxFontCIDWidthExcep *) + greallocn(widths.exceps, + excepsSize, sizeof(GfxFontCIDWidthExcep)); + } + widths.exceps[widths.nExceps].first = obj2.getInt(); + widths.exceps[widths.nExceps].last = obj3.getInt(); + widths.exceps[widths.nExceps].width = obj4.getNum() * 0.001; + ++widths.nExceps; + } else { + error(-1, "Bad widths array in Type 0 font"); + } + obj4.free(); + i += 3; + } else if (obj2.isInt() && obj3.isArray()) { + if (widths.nExceps + obj3.arrayGetLength() > excepsSize) { + excepsSize = (widths.nExceps + obj3.arrayGetLength() + 15) & ~15; + widths.exceps = (GfxFontCIDWidthExcep *) + greallocn(widths.exceps, + excepsSize, sizeof(GfxFontCIDWidthExcep)); + } + j = obj2.getInt(); + for (k = 0; k < obj3.arrayGetLength(); ++k) { + if (obj3.arrayGet(k, &obj4)->isNum()) { + widths.exceps[widths.nExceps].first = j; + widths.exceps[widths.nExceps].last = j; + widths.exceps[widths.nExceps].width = obj4.getNum() * 0.001; + ++j; + ++widths.nExceps; + } else { + error(-1, "Bad widths array in Type 0 font"); + } + obj4.free(); + } + i += 2; + } else { + error(-1, "Bad widths array in Type 0 font"); + ++i; + } + obj3.free(); + obj2.free(); + } + std::sort(widths.exceps, widths.exceps + widths.nExceps, &cmpWidthExcep); + } + obj1.free(); + + // default metrics for vertical font + if (desFontDict->lookup("DW2", &obj1)->isArray() && + obj1.arrayGetLength() == 2) { + if (obj1.arrayGet(0, &obj2)->isNum()) { + widths.defVY = obj2.getNum() * 0.001; + } + obj2.free(); + if (obj1.arrayGet(1, &obj2)->isNum()) { + widths.defHeight = obj2.getNum() * 0.001; + } + obj2.free(); + } + obj1.free(); + + // char metric exceptions for vertical font + if (desFontDict->lookup("W2", &obj1)->isArray()) { + excepsSize = 0; + i = 0; + while (i + 1 < obj1.arrayGetLength()) { + obj1.arrayGet(i, &obj2); + obj1.arrayGet(i+ 1, &obj3); + if (obj2.isInt() && obj3.isInt() && i + 4 < obj1.arrayGetLength()) { + if (obj1.arrayGet(i + 2, &obj4)->isNum() && + obj1.arrayGet(i + 3, &obj5)->isNum() && + obj1.arrayGet(i + 4, &obj6)->isNum()) { + if (widths.nExcepsV == excepsSize) { + excepsSize += 16; + widths.excepsV = (GfxFontCIDWidthExcepV *) + greallocn(widths.excepsV, + excepsSize, sizeof(GfxFontCIDWidthExcepV)); + } + widths.excepsV[widths.nExcepsV].first = obj2.getInt(); + widths.excepsV[widths.nExcepsV].last = obj3.getInt(); + widths.excepsV[widths.nExcepsV].height = obj4.getNum() * 0.001; + widths.excepsV[widths.nExcepsV].vx = obj5.getNum() * 0.001; + widths.excepsV[widths.nExcepsV].vy = obj6.getNum() * 0.001; + ++widths.nExcepsV; + } else { + error(-1, "Bad widths (W2) array in Type 0 font"); + } + obj6.free(); + obj5.free(); + obj4.free(); + i += 5; + } else if (obj2.isInt() && obj3.isArray()) { + if (widths.nExcepsV + obj3.arrayGetLength() / 3 > excepsSize) { + excepsSize = + (widths.nExcepsV + obj3.arrayGetLength() / 3 + 15) & ~15; + widths.excepsV = (GfxFontCIDWidthExcepV *) + greallocn(widths.excepsV, + excepsSize, sizeof(GfxFontCIDWidthExcepV)); + } + j = obj2.getInt(); + for (k = 0; k < obj3.arrayGetLength(); k += 3) { + if (obj3.arrayGet(k, &obj4)->isNum() && + obj3.arrayGet(k+1, &obj5)->isNum() && + obj3.arrayGet(k+2, &obj6)->isNum()) { + widths.excepsV[widths.nExcepsV].first = j; + widths.excepsV[widths.nExcepsV].last = j; + widths.excepsV[widths.nExcepsV].height = obj4.getNum() * 0.001; + widths.excepsV[widths.nExcepsV].vx = obj5.getNum() * 0.001; + widths.excepsV[widths.nExcepsV].vy = obj6.getNum() * 0.001; + ++j; + ++widths.nExcepsV; + } else { + error(-1, "Bad widths (W2) array in Type 0 font"); + } + obj6.free(); + obj5.free(); + obj4.free(); + } + i += 2; + } else { + error(-1, "Bad widths (W2) array in Type 0 font"); + ++i; + } + obj3.free(); + obj2.free(); + } + std::sort(widths.excepsV, widths.excepsV + widths.nExcepsV, &cmpWidthExcepV); + } + obj1.free(); + + desFontDictObj.free(); + ok = gTrue; + return; + + err4: + obj3.free(); + obj2.free(); + err3: + obj1.free(); + err2: + desFontDictObj.free(); + err1:; +} + +GfxCIDFont::~GfxCIDFont() { + if (cMap) { + cMap->decRefCnt(); + } + if (ctu) { + ctu->decRefCnt(); + } + gfree(widths.exceps); + gfree(widths.excepsV); + if (cidToGID) { + gfree(cidToGID); + } +} + +int GfxCIDFont::getNextChar(char *s, int len, CharCode *code, + Unicode **u, int *uLen, + double *dx, double *dy, double *ox, double *oy) { + CID cid; + double w, h, vx, vy; + int n, a, b, m; + + if (!cMap) { + *code = 0; + *uLen = 0; + *dx = *dy = 0; + return 1; + } + + *code = (CharCode)(cid = cMap->getCID(s, len, &n)); + if (ctu) { + if (hasToUnicode) { + int i = 0, c = 0; + while (i < n) { + c = (c << 8 ) + (s[i] & 0xff); + ++i; + } + *uLen = ctu->mapToUnicode(c, u); + } else { + *uLen = ctu->mapToUnicode(cid, u); + } + } else { + *uLen = 0; + } + + // horizontal + if (cMap->getWMode() == 0) { + w = widths.defWidth; + h = vx = vy = 0; + if (widths.nExceps > 0 && cid >= widths.exceps[0].first) { + a = 0; + b = widths.nExceps; + // invariant: widths.exceps[a].first <= cid < widths.exceps[b].first + while (b - a > 1) { + m = (a + b) / 2; + if (widths.exceps[m].first <= cid) { + a = m; + } else { + b = m; + } + } + if (cid <= widths.exceps[a].last) { + w = widths.exceps[a].width; + } + } + + // vertical + } else { + w = 0; + h = widths.defHeight; + vx = widths.defWidth / 2; + vy = widths.defVY; + if (widths.nExcepsV > 0 && cid >= widths.excepsV[0].first) { + a = 0; + b = widths.nExcepsV; + // invariant: widths.excepsV[a].first <= cid < widths.excepsV[b].first + while (b - a > 1) { + m = (a + b) / 2; + if (widths.excepsV[m].last <= cid) { + a = m; + } else { + b = m; + } + } + if (cid <= widths.excepsV[a].last) { + h = widths.excepsV[a].height; + vx = widths.excepsV[a].vx; + vy = widths.excepsV[a].vy; + } + } + } + + *dx = w; + *dy = h; + *ox = vx; + *oy = vy; + + return n; +} + +int GfxCIDFont::getWMode() { + return cMap ? cMap->getWMode() : 0; +} + +CharCodeToUnicode *GfxCIDFont::getToUnicode() { + if (ctu) { + ctu->incRefCnt(); + } + return ctu; +} + +GooString *GfxCIDFont::getCollection() { + return cMap ? cMap->getCollection() : (GooString *)NULL; +} + +Gushort GfxCIDFont::mapCodeToGID(FoFiTrueType *ff, int cmapi, + Unicode unicode, GBool wmode) { + Gushort gid = ff->mapCodeToGID(cmapi,unicode); + if (wmode) { + Gushort vgid = ff->mapToVertGID(gid); + if (vgid != 0) gid = vgid; + } + return gid; +} + +Gushort *GfxCIDFont::getCodeToGIDMap(FoFiTrueType *ff, int *mapsizep) { +#define N_UCS_CANDIDATES 2 + /* space characters */ + static const unsigned long spaces[] = { + 0x2000,0x2001,0x2002,0x2003,0x2004,0x2005,0x2006,0x2007, + 0x2008,0x2009,0x200A,0x00A0,0x200B,0x2060,0x3000,0xFEFF, + 0 + }; + static char *adobe_cns1_cmaps[] = { + "UniCNS-UTF32-V", + "UniCNS-UCS2-V", + "UniCNS-UTF32-H", + "UniCNS-UCS2-H", + 0 + }; + static char *adobe_gb1_cmaps[] = { + "UniGB-UTF32-V", + "UniGB-UCS2-V", + "UniGB-UTF32-H", + "UniGB-UCS2-H", + 0 + }; + static char *adobe_japan1_cmaps[] = { + "UniJIS-UTF32-V", + "UniJIS-UCS2-V", + "UniJIS-UTF32-H", + "UniJIS-UCS2-H", + 0 + }; + static char *adobe_japan2_cmaps[] = { + "UniHojo-UTF32-V", + "UniHojo-UCS2-V", + "UniHojo-UTF32-H", + "UniHojo-UCS2-H", + 0 + }; + static char *adobe_korea1_cmaps[] = { + "UniKS-UTF32-V", + "UniKS-UCS2-V", + "UniKS-UTF32-H", + "UniKS-UCS2-H", + 0 + }; + static struct CMapListEntry { + char *collection; + char *scriptTag; + char *toUnicodeMap; + char **CMaps; + } CMapList[] = { + { + "Adobe-CNS1", + "kana", + "Adobe-CNS1-UCS2", + adobe_cns1_cmaps, + }, + { + "Adobe-GB1", + "kana", + "Adobe-GB1-UCS2", + adobe_gb1_cmaps, + }, + { + "Adobe-Japan1", + "kana", + "Adobe-Japan1-UCS2", + adobe_japan1_cmaps, + }, + { + "Adobe-Japan2", + "kana", + "Adobe-Japan2-UCS2", + adobe_japan2_cmaps, + }, + { + "Adobe-Korea1", + "kana", + "Adobe-Korea1-UCS2", + adobe_korea1_cmaps, + }, + {0, 0, 0, 0} + }; + Unicode *humap = 0; + Unicode *vumap = 0; + Unicode *tumap = 0; + Gushort *codeToGID = 0; + unsigned long n; + int i; + unsigned long code; + int wmode; + char **cmapName; + CMap *cMap; + CMapListEntry *lp; + int cmap; + int cmapPlatform, cmapEncoding; + Ref embID; + + *mapsizep = 0; + if (!ctu) return NULL; + if (getCollection()->cmp("Adobe-Identity") == 0) return NULL; + if (getEmbeddedFontID(&embID)) { + /* if this font is embedded font, + * CIDToGIDMap should be embedded in PDF file + * and already set. So return it. + */ + *mapsizep = getCIDToGIDLen(); + return getCIDToGID(); + } + + /* we use only unicode cmap */ + cmap = -1; + for (i = 0; i < ff->getNumCmaps(); ++i) { + cmapPlatform = ff->getCmapPlatform(i); + cmapEncoding = ff->getCmapEncoding(i); + if (cmapPlatform == 3 && cmapEncoding == 10) { + /* UCS-4 */ + cmap = i; + /* use UCS-4 cmap */ + break; + } else if (cmapPlatform == 3 && cmapEncoding == 1) { + /* Unicode */ + cmap = i; + } else if (cmapPlatform == 0 && cmap < 0) { + cmap = i; + } + } + if (cmap < 0) + return NULL; + + wmode = getWMode(); + for (lp = CMapList;lp->collection != 0;lp++) { + if (strcmp(lp->collection,getCollection()->getCString()) == 0) { + break; + } + } + n = 65536; + tumap = new Unicode[n]; + humap = new Unicode[n*N_UCS_CANDIDATES]; + memset(humap,0,sizeof(Unicode)*n*N_UCS_CANDIDATES); + if (lp->collection != 0) { + CharCodeToUnicode *tctu; + GooString tname(lp->toUnicodeMap); + + if ((tctu = CharCodeToUnicode::parseCMapFromFile(&tname,16)) != 0) { + CharCode cid; + for (cid = 0;cid < n ;cid++) { + int len; + Unicode *ucodes; + + len = tctu->mapToUnicode(cid,&ucodes); + if (len == 1) { + tumap[cid] = ucodes[0]; + } else { + /* if not single character, ignore it */ + tumap[cid] = 0; + } + } + delete tctu; + } + vumap = new Unicode[n]; + memset(vumap,0,sizeof(Unicode)*n); + for (cmapName = lp->CMaps;*cmapName != 0;cmapName++) { + GooString cname(*cmapName); + + if ((cMap = globalParams->getCMap(getCollection(),&cname)) + != 0) { + if (cMap->getWMode()) { + cMap->setReverseMap(vumap,n,1); + } else { + cMap->setReverseMap(humap,n,N_UCS_CANDIDATES); + } + cMap->decRefCnt(); + } + } + ff->setupGSUB(lp->scriptTag); + } else { + error(-1,"Unknown character collection %s\n", + getCollection()->getCString()); + if ((ctu = getToUnicode()) != 0) { + CharCode cid; + for (cid = 0;cid < n ;cid++) { + Unicode *ucode; + + if (ctu->mapToUnicode(cid, &ucode)) + humap[cid*N_UCS_CANDIDATES] = ucode[0]; + else + humap[cid*N_UCS_CANDIDATES] = 0; + for (i = 1;i < N_UCS_CANDIDATES;i++) { + humap[cid*N_UCS_CANDIDATES+i] = 0; + } + } + ctu->decRefCnt(); + } + } + // map CID -> Unicode -> GID + codeToGID = (Gushort *)gmallocn(n, sizeof(Gushort)); + for (code = 0; code < n; ++code) { + Unicode unicode; + unsigned long gid; + + unicode = 0; + gid = 0; + if (humap != 0) { + for (i = 0;i < N_UCS_CANDIDATES + && gid == 0 && (unicode = humap[code*N_UCS_CANDIDATES+i]) != 0;i++) { + gid = mapCodeToGID(ff,cmap,unicode,gFalse); + } + } + if (gid == 0 && vumap != 0) { + unicode = vumap[code]; + if (unicode != 0) { + gid = mapCodeToGID(ff,cmap,unicode,gTrue); + if (gid == 0 && tumap != 0) { + if ((unicode = tumap[code]) != 0) { + gid = mapCodeToGID(ff,cmap,unicode,gTrue); + } + } + } + } + if (gid == 0 && tumap != 0) { + if ((unicode = tumap[code]) != 0) { + gid = mapCodeToGID(ff,cmap,unicode,gFalse); + } + } + if (gid == 0) { + /* special handling space characters */ + const unsigned long *p; + + if (humap != 0) unicode = humap[code]; + if (unicode != 0) { + /* check if code is space character , so map code to 0x0020 */ + for (p = spaces;*p != 0;p++) { + if (*p == unicode) { + unicode = 0x20; + gid = mapCodeToGID(ff,cmap,unicode,wmode); + break; + } + } + } + } + codeToGID[code] = gid; + } + *mapsizep = n; + if (humap != 0) delete[] humap; + if (tumap != 0) delete[] tumap; + if (vumap != 0) delete[] vumap; + return codeToGID; +} + +double GfxCIDFont::getWidth (char* s, int len) { + int nUsed; + double w; + int a, b, m; + + CID cid = cMap->getCID(s, len, &nUsed); + + w = widths.defWidth; + if (widths.nExceps > 0 && cid >= widths.exceps[0].first) { + a = 0; + b = widths.nExceps; + // invariant: widths.exceps[a].first <= cid < widths.exceps[b].first + while (b - a > 1) { + m = (a + b) / 2; + if (widths.exceps[m].first <= cid) { + a = m; + } else { + b = m; + } + } + if (cid <= widths.exceps[a].last) { + w = widths.exceps[a].width; + } + } + return w; +} + +//------------------------------------------------------------------------ +// GfxFontDict +//------------------------------------------------------------------------ + +GfxFontDict::GfxFontDict(XRef *xref, Ref *fontDictRef, Dict *fontDict) { + int i; + Object obj1, obj2; + Ref r; + + numFonts = fontDict->getLength(); + fonts = (GfxFont **)gmallocn(numFonts, sizeof(GfxFont *)); + for (i = 0; i < numFonts; ++i) { + fontDict->getValNF(i, &obj1); + obj1.fetch(xref, &obj2); + if (obj2.isDict()) { + if (obj1.isRef()) { + r = obj1.getRef(); + } else { + // no indirect reference for this font, so invent a unique one + // (legal generation numbers are five digits, so any 6-digit + // number would be safe) + r.num = i; + if (fontDictRef) { + r.gen = 100000 + fontDictRef->num; + } else { + r.gen = 999999; + } + } + fonts[i] = GfxFont::makeFont(xref, fontDict->getKey(i), + r, obj2.getDict()); + if (fonts[i] && !fonts[i]->isOk()) { + // XXX: it may be meaningful to distinguish between + // NULL and !isOk() so that when we do lookups + // we can tell the difference between a missing font + // and a font that is just !isOk() + fonts[i]->decRefCnt(); + fonts[i] = NULL; + } + } else { + error(-1, "font resource is not a dictionary"); + fonts[i] = NULL; + } + obj1.free(); + obj2.free(); + } +} + +GfxFontDict::~GfxFontDict() { + int i; + + for (i = 0; i < numFonts; ++i) { + if (fonts[i]) { + fonts[i]->decRefCnt(); + } + } + gfree(fonts); +} + +GfxFont *GfxFontDict::lookup(char *tag) { + int i; + + for (i = 0; i < numFonts; ++i) { + if (fonts[i] && fonts[i]->matches(tag)) { + return fonts[i]; + } + } + return NULL; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxFont.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxFont.h new file mode 100644 index 00000000000..fe4f7ea5027 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxFont.h @@ -0,0 +1,397 @@ +//======================================================================== +// +// GfxFont.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005, 2008 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> +// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2007 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2007 Koji Otani <sho@bbr.jp> +// Copyright (C) 2011 Axel Strübing <axel.struebing@freenet.de> +// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef GFXFONT_H +#define GFXFONT_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" +#include "goo/GooString.h" +#include "Object.h" +#include "CharTypes.h" + +class Dict; +class CMap; +class CharCodeToUnicode; +class FoFiTrueType; +class DisplayFontParam; +struct GfxFontCIDWidths; + +//------------------------------------------------------------------------ +// GfxFontType +//------------------------------------------------------------------------ + +enum GfxFontType { + //----- Gfx8BitFont + fontUnknownType, + fontType1, + fontType1C, + fontType1COT, + fontType3, + fontTrueType, + fontTrueTypeOT, + //----- GfxCIDFont + fontCIDType0, + fontCIDType0C, + fontCIDType0COT, + fontCIDType2, + fontCIDType2OT +}; + +//------------------------------------------------------------------------ +// GfxFontCIDWidths +//------------------------------------------------------------------------ + +struct GfxFontCIDWidthExcep { + CID first; // this record applies to + CID last; // CIDs <first>..<last> + double width; // char width +}; + +struct GfxFontCIDWidthExcepV { + CID first; // this record applies to + CID last; // CIDs <first>..<last> + double height; // char height + double vx, vy; // origin position +}; + +struct GfxFontCIDWidths { + double defWidth; // default char width + double defHeight; // default char height + double defVY; // default origin position + GfxFontCIDWidthExcep *exceps; // exceptions + int nExceps; // number of valid entries in exceps + GfxFontCIDWidthExcepV * // exceptions for vertical font + excepsV; + int nExcepsV; // number of valid entries in excepsV +}; + +//------------------------------------------------------------------------ +// GfxFont +//------------------------------------------------------------------------ + +#define fontFixedWidth (1 << 0) +#define fontSerif (1 << 1) +#define fontSymbolic (1 << 2) +#define fontItalic (1 << 6) +#define fontBold (1 << 18) + +class GfxFont { +public: + + enum Stretch { + StretchNotDefined, + UltraCondensed, + ExtraCondensed, + Condensed, + SemiCondensed, + Normal, + SemiExpanded, + Expanded, + ExtraExpanded, + UltraExpanded }; + + enum Weight { + WeightNotDefined, + W100, + W200, + W300, + W400, // Normal + W500, + W600, + W700, // Bold + W800, + W900 }; + + // Build a GfxFont object. + static GfxFont *makeFont(XRef *xref, char *tagA, Ref idA, Dict *fontDict); + + GfxFont(char *tagA, Ref idA, GooString *nameA); + + GBool isOk() { return ok; } + + void incRefCnt(); + void decRefCnt(); + + // Get font tag. + GooString *getTag() { return tag; } + + // Get font dictionary ID. + Ref *getID() { return &id; } + + // Does this font match the tag? + GBool matches(char *tagA) { return !tag->cmp(tagA); } + + // Get base font name. + GooString *getName() { return name; } + + // Get font family name. + GooString *getFamily() { return family; } + + // Get font stretch. + Stretch getStretch() { return stretch; } + + // Get font weight. + Weight getWeight() { return weight; } + + // Get the original font name (ignornig any munging that might have + // been done to map to a canonical Base-14 font name). + GooString *getOrigName() { return origName; } + + // Get font type. + GfxFontType getType() { return type; } + virtual GBool isCIDFont() { return gFalse; } + + // Get embedded font ID, i.e., a ref for the font file stream. + // Returns false if there is no embedded font. + GBool getEmbeddedFontID(Ref *embID) + { *embID = embFontID; return embFontID.num >= 0; } + + // Get the PostScript font name for the embedded font. Returns + // NULL if there is no embedded font. + GooString *getEmbeddedFontName() { return embFontName; } + + // Get the name of the external font file. Returns NULL if there + // is no external font file. + GooString *getExtFontFile() { return extFontFile; } + + // Get font descriptor flags. + int getFlags() { return flags; } + GBool isFixedWidth() { return flags & fontFixedWidth; } + GBool isSerif() { return flags & fontSerif; } + GBool isSymbolic() { return flags & fontSymbolic; } + GBool isItalic() { return flags & fontItalic; } + GBool isBold() { return flags & fontBold; } + + // Return the Unicode map. + virtual CharCodeToUnicode *getToUnicode() = 0; + + // Return the font matrix. + double *getFontMatrix() { return fontMat; } + + // Return the font bounding box. + double *getFontBBox() { return fontBBox; } + + // Return the ascent and descent values. + double getAscent() { return ascent; } + double getDescent() { return descent; } + + // Return the writing mode (0=horizontal, 1=vertical). + virtual int getWMode() { return 0; } + + // Read an external or embedded font file into a buffer. + char *readExtFontFile(int *len); + char *readEmbFontFile(XRef *xref, int *len); + + // Get the next char from a string <s> of <len> bytes, returning the + // char <code>, its Unicode mapping <u>, its displacement vector + // (<dx>, <dy>), and its origin offset vector (<ox>, <oy>). <uSize> + // is the number of entries available in <u>, and <uLen> is set to + // the number actually used. Returns the number of bytes used by + // the char code. + virtual int getNextChar(char *s, int len, CharCode *code, + Unicode **u, int *uLen, + double *dx, double *dy, double *ox, double *oy) = 0; + + // Does this font have a toUnicode map? + GBool hasToUnicodeCMap() { return hasToUnicode; } + + /* XXX: dfp shouldn't be public, however the font finding code is currently in + * GlobalParams. Instead it should be inside the GfxFont class. However, + * getDisplayFont currently uses FCcfg so moving it is not as simple. */ + /* XXX: related to this is the fact that all of the extFontFile stuff is dead */ + DisplayFontParam *dfp; +protected: + + virtual ~GfxFont(); + + void readFontDescriptor(XRef *xref, Dict *fontDict); + CharCodeToUnicode *readToUnicodeCMap(Dict *fontDict, int nBits, + CharCodeToUnicode *ctu); + void findExtFontFile(); + + GooString *tag; // PDF font tag + Ref id; // reference (used as unique ID) + GooString *name; // font name + GooString *family; // font family + Stretch stretch; // font stretch + Weight weight; // font weight + GooString *origName; // original font name + GfxFontType type; // type of font + int flags; // font descriptor flags + GooString *embFontName; // name of embedded font + Ref embFontID; // ref to embedded font file stream + GooString *extFontFile; // external font file name + double fontMat[6]; // font matrix (Type 3 only) + double fontBBox[4]; // font bounding box (Type 3 only) + double missingWidth; // "default" width + double ascent; // max height above baseline + double descent; // max depth below baseline + int refCnt; + GBool ok; + GBool hasToUnicode; +}; + +//------------------------------------------------------------------------ +// Gfx8BitFont +//------------------------------------------------------------------------ + +class Gfx8BitFont: public GfxFont { +public: + + Gfx8BitFont(XRef *xref, char *tagA, Ref idA, GooString *nameA, + GfxFontType typeA, Dict *fontDict); + + virtual int getNextChar(char *s, int len, CharCode *code, + Unicode **u, int *uLen, + double *dx, double *dy, double *ox, double *oy); + + // Return the encoding. + char **getEncoding() { return enc; } + + // Return the Unicode map. + CharCodeToUnicode *getToUnicode(); + + // Return the character name associated with <code>. + char *getCharName(int code) { return enc[code]; } + + // Returns true if the PDF font specified an encoding. + GBool getHasEncoding() { return hasEncoding; } + + // Returns true if the PDF font specified MacRomanEncoding. + GBool getUsesMacRomanEnc() { return usesMacRomanEnc; } + + // Get width of a character. + double getWidth(Guchar c) { return widths[c]; } + + // Return a char code-to-GID mapping for the provided font file. + // (This is only useful for TrueType fonts.) + Gushort *getCodeToGIDMap(FoFiTrueType *ff); + + // Return the Type 3 CharProc dictionary, or NULL if none. + Dict *getCharProcs(); + + // Return the Type 3 CharProc for the character associated with <code>. + Object *getCharProc(int code, Object *proc); + + // Return the Type 3 Resources dictionary, or NULL if none. + Dict *getResources(); + +private: + virtual ~Gfx8BitFont(); + + char *enc[256]; // char code --> char name + char encFree[256]; // boolean for each char name: if set, + // the string is malloc'ed + CharCodeToUnicode *ctu; // char code --> Unicode + GBool hasEncoding; + GBool usesMacRomanEnc; + double widths[256]; // character widths + Object charProcs; // Type 3 CharProcs dictionary + Object resources; // Type 3 Resources dictionary +}; + +//------------------------------------------------------------------------ +// GfxCIDFont +//------------------------------------------------------------------------ + +class GfxCIDFont: public GfxFont { +public: + + GfxCIDFont(XRef *xref, char *tagA, Ref idA, GooString *nameA, + Dict *fontDict); + + virtual GBool isCIDFont() { return gTrue; } + + virtual int getNextChar(char *s, int len, CharCode *code, + Unicode **u, int *uLen, + double *dx, double *dy, double *ox, double *oy); + + // Return the writing mode (0=horizontal, 1=vertical). + virtual int getWMode(); + + // Return the Unicode map. + CharCodeToUnicode *getToUnicode(); + + // Get the collection name (<registry>-<ordering>). + GooString *getCollection(); + + // Return the CID-to-GID mapping table. These should only be called + // if type is fontCIDType2. + Gushort *getCIDToGID() { return cidToGID; } + int getCIDToGIDLen() { return cidToGIDLen; } + + Gushort *getCodeToGIDMap(FoFiTrueType *ff, int *length); + + double getWidth(char* s, int len); + +private: + virtual ~GfxCIDFont(); + + Gushort mapCodeToGID(FoFiTrueType *ff, int cmapi, + Unicode unicode, GBool wmode); + + CMap *cMap; // char code --> CID + CharCodeToUnicode *ctu; // CID --> Unicode + GfxFontCIDWidths widths; // character widths + Gushort *cidToGID; // CID --> GID mapping (for embedded + // TrueType fonts) + int cidToGIDLen; +}; + +//------------------------------------------------------------------------ +// GfxFontDict +//------------------------------------------------------------------------ + +class GfxFontDict { +public: + + // Build the font dictionary, given the PDF font dictionary. + GfxFontDict(XRef *xref, Ref *fontDictRef, Dict *fontDict); + + // Destructor. + ~GfxFontDict(); + + // Get the specified font. + GfxFont *lookup(char *tag); + + // Iterative access. + int getNumFonts() { return numFonts; } + GfxFont *getFont(int i) { return fonts[i]; } + +private: + + GfxFont **fonts; // list of fonts + int numFonts; // number of fonts +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxState.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxState.cc new file mode 100644 index 00000000000..8efa62ea187 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxState.cc @@ -0,0 +1,5919 @@ +//======================================================================== +// +// GfxState.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2006, 2007 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2006, 2010 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2006-2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009 Koji Otani <sho@bbr.jp> +// Copyright (C) 2009, 2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2009 Christian Persch <chpe@gnome.org> +// Copyright (C) 2010 PaweÅ‚ Wiejacha <pawel.wiejacha@gmail.com> +// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> +// Copyright (C) 2011 Andrea Canciani <ranma42@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <algorithm> +#include <stddef.h> +#include <math.h> +#include <string.h> +#include "goo/gmem.h" +#include "Error.h" +#include "Object.h" +#include "Array.h" +#include "Page.h" +#include "Gfx.h" +#include "GfxState.h" +#include "GfxState_helpers.h" +#include "GfxFont.h" +#include "GlobalParams.h" +#include "PopplerCache.h" + +//------------------------------------------------------------------------ + +GBool Matrix::invertTo(Matrix *other) const +{ + double det; + + det = 1 / determinant(); + other->m[0] = m[3] * det; + other->m[1] = -m[1] * det; + other->m[2] = -m[2] * det; + other->m[3] = m[0] * det; + other->m[4] = (m[2] * m[5] - m[3] * m[4]) * det; + other->m[5] = (m[1] * m[4] - m[0] * m[5]) * det; + + return gTrue; +} + +void Matrix::transform(double x, double y, double *tx, double *ty) const +{ + double temp_x, temp_y; + + temp_x = m[0] * x + m[2] * y + m[4]; + temp_y = m[1] * x + m[3] * y + m[5]; + + *tx = temp_x; + *ty = temp_y; +} + +// Matrix norm, taken from _cairo_matrix_transformed_circle_major_axis +double Matrix::norm() const +{ + double f, g, h, i, j; + + i = m[0]*m[0] + m[1]*m[1]; + j = m[2]*m[2] + m[3]*m[3]; + + f = 0.5 * (i + j); + g = 0.5 * (i - j); + h = m[0]*m[2] + m[1]*m[3]; + + return sqrt (f + hypot (g, h)); +} + +//------------------------------------------------------------------------ + +struct GfxBlendModeInfo { + char *name; + GfxBlendMode mode; +}; + +static const GfxBlendModeInfo gfxBlendModeNames[] = { + { "Normal", gfxBlendNormal }, + { "Compatible", gfxBlendNormal }, + { "Multiply", gfxBlendMultiply }, + { "Screen", gfxBlendScreen }, + { "Overlay", gfxBlendOverlay }, + { "Darken", gfxBlendDarken }, + { "Lighten", gfxBlendLighten }, + { "ColorDodge", gfxBlendColorDodge }, + { "ColorBurn", gfxBlendColorBurn }, + { "HardLight", gfxBlendHardLight }, + { "SoftLight", gfxBlendSoftLight }, + { "Difference", gfxBlendDifference }, + { "Exclusion", gfxBlendExclusion }, + { "Hue", gfxBlendHue }, + { "Saturation", gfxBlendSaturation }, + { "Color", gfxBlendColor }, + { "Luminosity", gfxBlendLuminosity } +}; + +#define nGfxBlendModeNames \ + ((int)((sizeof(gfxBlendModeNames) / sizeof(GfxBlendModeInfo)))) + +//------------------------------------------------------------------------ +// +// NB: This must match the GfxColorSpaceMode enum defined in +// GfxState.h +static char *gfxColorSpaceModeNames[] = { + "DeviceGray", + "CalGray", + "DeviceRGB", + "CalRGB", + "DeviceCMYK", + "Lab", + "ICCBased", + "Indexed", + "Separation", + "DeviceN", + "Pattern" +}; + +#define nGfxColorSpaceModes ((sizeof(gfxColorSpaceModeNames) / sizeof(char *))) + +#ifdef USE_CMS + +#include <lcms.h> + +#define COLOR_PROFILE_DIR "/ColorProfiles/" +#define GLOBAL_COLOR_PROFILE_DIR POPPLER_DATADIR COLOR_PROFILE_DIR + +void GfxColorTransform::doTransform(void *in, void *out, unsigned int size) { + cmsDoTransform(transform, in, out, size); +} + +// transformA should be a cmsHTRANSFORM +GfxColorTransform::GfxColorTransform(void *transformA) { + transform = transformA; + refCount = 1; +} + +GfxColorTransform::~GfxColorTransform() { + cmsDeleteTransform(transform); +} + +void GfxColorTransform::ref() { + refCount++; +} + +unsigned int GfxColorTransform::unref() { + return --refCount; +} + +static cmsHPROFILE RGBProfile = NULL; +static GooString *displayProfileName = NULL; // display profile file Name +static cmsHPROFILE displayProfile = NULL; // display profile +static unsigned int displayPixelType = 0; +static GfxColorTransform *XYZ2DisplayTransform = NULL; + +// convert color space signature to cmsColor type +static unsigned int getCMSColorSpaceType(icColorSpaceSignature cs); +static unsigned int getCMSNChannels(icColorSpaceSignature cs); +static cmsHPROFILE loadColorProfile(const char *fileName); + +void GfxColorSpace::setDisplayProfile(void *displayProfileA) { + displayProfile = displayProfileA; +} + +void GfxColorSpace::setDisplayProfileName(GooString *name) { + displayProfileName = name->copy(); +} + +cmsHPROFILE GfxColorSpace::getRGBProfile() { + return RGBProfile; +} + +cmsHPROFILE GfxColorSpace::getDisplayProfile() { + return displayProfile; +} + +#endif + +//------------------------------------------------------------------------ +// GfxColorSpace +//------------------------------------------------------------------------ + +GfxColorSpace::GfxColorSpace() { +} + +GfxColorSpace::~GfxColorSpace() { +} + +GfxColorSpace *GfxColorSpace::parse(Object *csObj, Gfx *gfx) { + GfxColorSpace *cs; + Object obj1; + + cs = NULL; + if (csObj->isName()) { + if (csObj->isName("DeviceGray") || csObj->isName("G")) { + cs = new GfxDeviceGrayColorSpace(); + } else if (csObj->isName("DeviceRGB") || csObj->isName("RGB")) { + cs = new GfxDeviceRGBColorSpace(); + } else if (csObj->isName("DeviceCMYK") || csObj->isName("CMYK")) { + cs = new GfxDeviceCMYKColorSpace(); + } else if (csObj->isName("Pattern")) { + cs = new GfxPatternColorSpace(NULL); + } else { + error(-1, "Bad color space '%s'", csObj->getName()); + } + } else if (csObj->isArray()) { + csObj->arrayGet(0, &obj1); + if (obj1.isName("DeviceGray") || obj1.isName("G")) { + cs = new GfxDeviceGrayColorSpace(); + } else if (obj1.isName("DeviceRGB") || obj1.isName("RGB")) { + cs = new GfxDeviceRGBColorSpace(); + } else if (obj1.isName("DeviceCMYK") || obj1.isName("CMYK")) { + cs = new GfxDeviceCMYKColorSpace(); + } else if (obj1.isName("CalGray")) { + cs = GfxCalGrayColorSpace::parse(csObj->getArray()); + } else if (obj1.isName("CalRGB")) { + cs = GfxCalRGBColorSpace::parse(csObj->getArray()); + } else if (obj1.isName("Lab")) { + cs = GfxLabColorSpace::parse(csObj->getArray()); + } else if (obj1.isName("ICCBased")) { + cs = GfxICCBasedColorSpace::parse(csObj->getArray(), gfx); + } else if (obj1.isName("Indexed") || obj1.isName("I")) { + cs = GfxIndexedColorSpace::parse(csObj->getArray(), gfx); + } else if (obj1.isName("Separation")) { + cs = GfxSeparationColorSpace::parse(csObj->getArray(), gfx); + } else if (obj1.isName("DeviceN")) { + cs = GfxDeviceNColorSpace::parse(csObj->getArray(), gfx); + } else if (obj1.isName("Pattern")) { + cs = GfxPatternColorSpace::parse(csObj->getArray(), gfx); + } else { + error(-1, "Bad color space"); + } + obj1.free(); + } else if (csObj->isDict()) { + csObj->dictLookup("ColorSpace", &obj1); + if (obj1.isName("DeviceGray")) { + cs = new GfxDeviceGrayColorSpace(); + } else if (obj1.isName("DeviceRGB")) { + cs = new GfxDeviceRGBColorSpace(); + } else if (obj1.isName("DeviceCMYK")) { + cs = new GfxDeviceCMYKColorSpace(); + } else { + error(-1, "Bad color space '%s'", csObj->getName()); + } + obj1.free(); + } else { + error(-1, "Bad color space - expected name, array or dict"); + } + return cs; +} + +void GfxColorSpace::getDefaultRanges(double *decodeLow, double *decodeRange, + int maxImgPixel) { + int i; + + for (i = 0; i < getNComps(); ++i) { + decodeLow[i] = 0; + decodeRange[i] = 1; + } +} + +int GfxColorSpace::getNumColorSpaceModes() { + return nGfxColorSpaceModes; +} + +char *GfxColorSpace::getColorSpaceModeName(int idx) { + return gfxColorSpaceModeNames[idx]; +} + +#ifdef USE_CMS +cmsHPROFILE loadColorProfile(const char *fileName) +{ + cmsHPROFILE hp = NULL; + FILE *fp; + + if (fileName[0] == '/') { + // full path + // check if open the file + if ((fp = fopen(fileName,"r")) != NULL) { + fclose(fp); + hp = cmsOpenProfileFromFile(fileName,"r"); + } + return hp; + } + // try to load from user directory + GooString *path = globalParams->getBaseDir(); + path->append(COLOR_PROFILE_DIR); + path->append(fileName); + // check if open the file + if ((fp = fopen(path->getCString(),"r")) != NULL) { + fclose(fp); + hp = cmsOpenProfileFromFile(path->getCString(),"r"); + } + delete path; + if (hp == NULL) { + // load from global directory + path = new GooString(GLOBAL_COLOR_PROFILE_DIR); + path->append(fileName); + // check if open the file + if ((fp = fopen(path->getCString(),"r")) != NULL) { + fclose(fp); + hp = cmsOpenProfileFromFile(path->getCString(),"r"); + } + delete path; + } + return hp; +} + +static int CMSError(int ecode, const char *msg) +{ + error(-1, "%s", msg); + return 1; +} + +int GfxColorSpace::setupColorProfiles() +{ + static GBool initialized = gFalse; + cmsHTRANSFORM transform; + unsigned int nChannels; + + // do only once + if (initialized) return 0; + initialized = gTrue; + + // set error handlor + cmsSetErrorHandler(CMSError); + + if (displayProfile == NULL) { + // load display profile if it was not already loaded. + if (displayProfileName == NULL) { + displayProfile = loadColorProfile("display.icc"); + } else if (displayProfileName->getLength() > 0) { + displayProfile = loadColorProfile(displayProfileName->getCString()); + } + } + // load RGB profile + RGBProfile = loadColorProfile("RGB.icc"); + if (RGBProfile == NULL) { + /* use built in sRGB profile */ + RGBProfile = cmsCreate_sRGBProfile(); + } + // create transforms + if (displayProfile != NULL) { + displayPixelType = getCMSColorSpaceType(cmsGetColorSpace(displayProfile)); + nChannels = getCMSNChannels(cmsGetColorSpace(displayProfile)); + // create transform from XYZ + cmsHPROFILE XYZProfile = cmsCreateXYZProfile(); + if ((transform = cmsCreateTransform(XYZProfile, TYPE_XYZ_DBL, + displayProfile, + COLORSPACE_SH(displayPixelType) | + CHANNELS_SH(nChannels) | BYTES_SH(1), + INTENT_RELATIVE_COLORIMETRIC,0)) == 0) { + error(-1, "Can't create Lab transform"); + } else { + XYZ2DisplayTransform = new GfxColorTransform(transform); + } + cmsCloseProfile(XYZProfile); + } + return 0; +} + +unsigned int getCMSColorSpaceType(icColorSpaceSignature cs) +{ + switch (cs) { + case icSigXYZData: + return PT_XYZ; + break; + case icSigLabData: + return PT_Lab; + break; + case icSigLuvData: + return PT_YUV; + break; + case icSigYCbCrData: + return PT_YCbCr; + break; + case icSigYxyData: + return PT_Yxy; + break; + case icSigRgbData: + return PT_RGB; + break; + case icSigGrayData: + return PT_GRAY; + break; + case icSigHsvData: + return PT_HSV; + break; + case icSigHlsData: + return PT_HLS; + break; + case icSigCmykData: + return PT_CMYK; + break; + case icSigCmyData: + return PT_CMY; + break; + case icSig2colorData: + case icSig3colorData: + case icSig4colorData: + case icSig5colorData: + case icSig6colorData: + case icSig7colorData: + case icSig8colorData: + case icSig9colorData: + case icSig10colorData: + case icSig11colorData: + case icSig12colorData: + case icSig13colorData: + case icSig14colorData: + case icSig15colorData: + default: + break; + } + return PT_RGB; +} + +unsigned int getCMSNChannels(icColorSpaceSignature cs) +{ + switch (cs) { + case icSigXYZData: + case icSigLuvData: + case icSigLabData: + case icSigYCbCrData: + case icSigYxyData: + case icSigRgbData: + case icSigHsvData: + case icSigHlsData: + case icSigCmyData: + case icSig3colorData: + return 3; + break; + case icSigGrayData: + return 1; + break; + case icSigCmykData: + case icSig4colorData: + return 4; + break; + case icSig2colorData: + return 2; + break; + case icSig5colorData: + return 5; + break; + case icSig6colorData: + return 6; + break; + case icSig7colorData: + return 7; + break; + case icSig8colorData: + return 8; + break; + case icSig9colorData: + return 9; + break; + case icSig10colorData: + return 10; + break; + case icSig11colorData: + return 11; + break; + case icSig12colorData: + return 12; + break; + case icSig13colorData: + return 13; + break; + case icSig14colorData: + return 14; + break; + case icSig15colorData: + return 15; + default: + break; + } + return 3; +} + +#endif + +//------------------------------------------------------------------------ +// GfxDeviceGrayColorSpace +//------------------------------------------------------------------------ + +GfxDeviceGrayColorSpace::GfxDeviceGrayColorSpace() { +} + +GfxDeviceGrayColorSpace::~GfxDeviceGrayColorSpace() { +} + +GfxColorSpace *GfxDeviceGrayColorSpace::copy() { + return new GfxDeviceGrayColorSpace(); +} + +void GfxDeviceGrayColorSpace::getGray(GfxColor *color, GfxGray *gray) { + *gray = clip01(color->c[0]); +} + +void GfxDeviceGrayColorSpace::getGrayLine(Guchar *in, Guchar *out, int length) { + memcpy (out, in, length); +} + +void GfxDeviceGrayColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { + rgb->r = rgb->g = rgb->b = clip01(color->c[0]); +} + +void GfxDeviceGrayColorSpace::getRGBLine(Guchar *in, unsigned int *out, + int length) { + int i; + + for (i = 0; i < length; i++) + out[i] = (in[i] << 16) | (in[i] << 8) | (in[i] << 0); +} + +void GfxDeviceGrayColorSpace::getRGBLine(Guchar *in, Guchar *out, int length) { + for (int i = 0; i < length; i++) { + *out++ = in[i]; + *out++ = in[i]; + *out++ = in[i]; + } +} + +void GfxDeviceGrayColorSpace::getRGBXLine(Guchar *in, Guchar *out, int length) { + for (int i = 0; i < length; i++) { + *out++ = in[i]; + *out++ = in[i]; + *out++ = in[i]; + *out++ = 255; + } +} + +void GfxDeviceGrayColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { + cmyk->c = cmyk->m = cmyk->y = 0; + cmyk->k = clip01(gfxColorComp1 - color->c[0]); +} + +void GfxDeviceGrayColorSpace::getDefaultColor(GfxColor *color) { + color->c[0] = 0; +} + +//------------------------------------------------------------------------ +// GfxCalGrayColorSpace +//------------------------------------------------------------------------ + +GfxCalGrayColorSpace::GfxCalGrayColorSpace() { + whiteX = whiteY = whiteZ = 1; + blackX = blackY = blackZ = 0; + gamma = 1; +} + +GfxCalGrayColorSpace::~GfxCalGrayColorSpace() { +} + +GfxColorSpace *GfxCalGrayColorSpace::copy() { + GfxCalGrayColorSpace *cs; + + cs = new GfxCalGrayColorSpace(); + cs->whiteX = whiteX; + cs->whiteY = whiteY; + cs->whiteZ = whiteZ; + cs->blackX = blackX; + cs->blackY = blackY; + cs->blackZ = blackZ; + cs->gamma = gamma; + return cs; +} + +// This is the inverse of MatrixLMN in Example 4.10 from the PostScript +// Language Reference, Third Edition. +static const double xyzrgb[3][3] = { + { 3.240449, -1.537136, -0.498531 }, + { -0.969265, 1.876011, 0.041556 }, + { 0.055643, -0.204026, 1.057229 } +}; + +GfxColorSpace *GfxCalGrayColorSpace::parse(Array *arr) { + GfxCalGrayColorSpace *cs; + Object obj1, obj2, obj3; + + arr->get(1, &obj1); + if (!obj1.isDict()) { + error(-1, "Bad CalGray color space"); + obj1.free(); + return NULL; + } + cs = new GfxCalGrayColorSpace(); + if (obj1.dictLookup("WhitePoint", &obj2)->isArray() && + obj2.arrayGetLength() == 3) { + obj2.arrayGet(0, &obj3); + if (likely(obj3.isNum())) + cs->whiteX = obj3.getNum(); + obj3.free(); + obj2.arrayGet(1, &obj3); + if (likely(obj3.isNum())) + cs->whiteY = obj3.getNum(); + obj3.free(); + obj2.arrayGet(2, &obj3); + if (likely(obj3.isNum())) + cs->whiteZ = obj3.getNum(); + obj3.free(); + } + obj2.free(); + if (obj1.dictLookup("BlackPoint", &obj2)->isArray() && + obj2.arrayGetLength() == 3) { + obj2.arrayGet(0, &obj3); + if (likely(obj3.isNum())) + cs->blackX = obj3.getNum(); + obj3.free(); + obj2.arrayGet(1, &obj3); + if (likely(obj3.isNum())) + cs->blackY = obj3.getNum(); + obj3.free(); + obj2.arrayGet(2, &obj3); + if (likely(obj3.isNum())) + cs->blackZ = obj3.getNum(); + obj3.free(); + } + obj2.free(); + if (obj1.dictLookup("Gamma", &obj2)->isNum()) { + cs->gamma = obj2.getNum(); + } + obj2.free(); + obj1.free(); + + cs->kr = 1 / (xyzrgb[0][0] * cs->whiteX + + xyzrgb[0][1] * cs->whiteY + + xyzrgb[0][2] * cs->whiteZ); + cs->kg = 1 / (xyzrgb[1][0] * cs->whiteX + + xyzrgb[1][1] * cs->whiteY + + xyzrgb[1][2] * cs->whiteZ); + cs->kb = 1 / (xyzrgb[2][0] * cs->whiteX + + xyzrgb[2][1] * cs->whiteY + + xyzrgb[2][2] * cs->whiteZ); + + return cs; +} + +// convert CalGray to media XYZ color space +// (not multiply by the white point) +void GfxCalGrayColorSpace::getXYZ(GfxColor *color, + double *pX, double *pY, double *pZ) { + const double A = colToDbl(color->c[0]); + const double xyzColor = pow(A,gamma); + *pX = xyzColor; + *pY = xyzColor; + *pZ = xyzColor; +} + +void GfxCalGrayColorSpace::getGray(GfxColor *color, GfxGray *gray) { + GfxRGB rgb; + +#ifdef USE_CMS + if (XYZ2DisplayTransform != NULL && displayPixelType == PT_GRAY) { + Guchar out[gfxColorMaxComps]; + double in[gfxColorMaxComps]; + double X, Y, Z; + + getXYZ(color,&X,&Y,&Z); + in[0] = clip01(X); + in[1] = clip01(Y); + in[2] = clip01(Z); + XYZ2DisplayTransform->doTransform(in,out,1); + *gray = byteToCol(out[0]); + return; + } +#endif + getRGB(color, &rgb); + *gray = clip01((GfxColorComp)(0.299 * rgb.r + + 0.587 * rgb.g + + 0.114 * rgb.b + 0.5)); +} + +void GfxCalGrayColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { + double X, Y, Z; + double r, g, b; + + getXYZ(color,&X,&Y,&Z); +#ifdef USE_CMS + if (XYZ2DisplayTransform != NULL && displayPixelType == PT_RGB) { + Guchar out[gfxColorMaxComps]; + double in[gfxColorMaxComps]; + + in[0] = clip01(X); + in[1] = clip01(Y); + in[2] = clip01(Z); + XYZ2DisplayTransform->doTransform(in,out,1); + rgb->r = byteToCol(out[0]); + rgb->g = byteToCol(out[1]); + rgb->b = byteToCol(out[2]); + return; + } +#endif + X *= whiteX; + Y *= whiteY; + Z *= whiteZ; + // convert XYZ to RGB, including gamut mapping and gamma correction + r = xyzrgb[0][0] * X + xyzrgb[0][1] * Y + xyzrgb[0][2] * Z; + g = xyzrgb[1][0] * X + xyzrgb[1][1] * Y + xyzrgb[1][2] * Z; + b = xyzrgb[2][0] * X + xyzrgb[2][1] * Y + xyzrgb[2][2] * Z; + rgb->r = dblToCol(sqrt(clip01(r * kr))); + rgb->g = dblToCol(sqrt(clip01(g * kg))); + rgb->b = dblToCol(sqrt(clip01(b * kb))); +} + +void GfxCalGrayColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { + GfxRGB rgb; + GfxColorComp c, m, y, k; + +#ifdef USE_CMS + if (XYZ2DisplayTransform != NULL && displayPixelType == PT_CMYK) { + double in[gfxColorMaxComps]; + Guchar out[gfxColorMaxComps]; + double X, Y, Z; + + getXYZ(color,&X,&Y,&Z); + in[0] = clip01(X); + in[1] = clip01(Y); + in[2] = clip01(Z); + + XYZ2DisplayTransform->doTransform(in,out,1); + cmyk->c = byteToCol(out[0]); + cmyk->m = byteToCol(out[1]); + cmyk->y = byteToCol(out[2]); + cmyk->k = byteToCol(out[3]); + return; + } +#endif + getRGB(color, &rgb); + c = clip01(gfxColorComp1 - rgb.r); + m = clip01(gfxColorComp1 - rgb.g); + y = clip01(gfxColorComp1 - rgb.b); + k = c; + if (m < k) { + k = m; + } + if (y < k) { + k = y; + } + cmyk->c = c - k; + cmyk->m = m - k; + cmyk->y = y - k; + cmyk->k = k; +} + +void GfxCalGrayColorSpace::getDefaultColor(GfxColor *color) { + color->c[0] = 0; +} + +//------------------------------------------------------------------------ +// GfxDeviceRGBColorSpace +//------------------------------------------------------------------------ + +GfxDeviceRGBColorSpace::GfxDeviceRGBColorSpace() { +} + +GfxDeviceRGBColorSpace::~GfxDeviceRGBColorSpace() { +} + +GfxColorSpace *GfxDeviceRGBColorSpace::copy() { + return new GfxDeviceRGBColorSpace(); +} + +void GfxDeviceRGBColorSpace::getGray(GfxColor *color, GfxGray *gray) { + *gray = clip01((GfxColorComp)(0.3 * color->c[0] + + 0.59 * color->c[1] + + 0.11 * color->c[2] + 0.5)); +} + +void GfxDeviceRGBColorSpace::getGrayLine(Guchar *in, Guchar *out, int length) { + int i; + + for (i = 0; i < length; i++) { + out[i] = + (in[i * 3 + 0] * 19595 + + in[i * 3 + 1] * 38469 + + in[i * 3 + 2] * 7472) / 65536; + } +} + +void GfxDeviceRGBColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { + rgb->r = clip01(color->c[0]); + rgb->g = clip01(color->c[1]); + rgb->b = clip01(color->c[2]); +} + +void GfxDeviceRGBColorSpace::getRGBLine(Guchar *in, unsigned int *out, + int length) { + Guchar *p; + int i; + + for (i = 0, p = in; i < length; i++, p += 3) + out[i] = (p[0] << 16) | (p[1] << 8) | (p[2] << 0); +} + +void GfxDeviceRGBColorSpace::getRGBLine(Guchar *in, Guchar *out, int length) { + for (int i = 0; i < length; i++) { + *out++ = *in++; + *out++ = *in++; + *out++ = *in++; + } +} + +void GfxDeviceRGBColorSpace::getRGBXLine(Guchar *in, Guchar *out, int length) { + for (int i = 0; i < length; i++) { + *out++ = *in++; + *out++ = *in++; + *out++ = *in++; + *out++ = 255; + } +} +void GfxDeviceRGBColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { + GfxColorComp c, m, y, k; + + c = clip01(gfxColorComp1 - color->c[0]); + m = clip01(gfxColorComp1 - color->c[1]); + y = clip01(gfxColorComp1 - color->c[2]); + k = c; + if (m < k) { + k = m; + } + if (y < k) { + k = y; + } + cmyk->c = c - k; + cmyk->m = m - k; + cmyk->y = y - k; + cmyk->k = k; +} + +void GfxDeviceRGBColorSpace::getDefaultColor(GfxColor *color) { + color->c[0] = 0; + color->c[1] = 0; + color->c[2] = 0; +} + +//------------------------------------------------------------------------ +// GfxCalRGBColorSpace +//------------------------------------------------------------------------ + +GfxCalRGBColorSpace::GfxCalRGBColorSpace() { + whiteX = whiteY = whiteZ = 1; + blackX = blackY = blackZ = 0; + gammaR = gammaG = gammaB = 1; + mat[0] = 1; mat[1] = 0; mat[2] = 0; + mat[3] = 0; mat[4] = 1; mat[5] = 0; + mat[6] = 0; mat[7] = 0; mat[8] = 1; +} + +GfxCalRGBColorSpace::~GfxCalRGBColorSpace() { +} + +GfxColorSpace *GfxCalRGBColorSpace::copy() { + GfxCalRGBColorSpace *cs; + int i; + + cs = new GfxCalRGBColorSpace(); + cs->whiteX = whiteX; + cs->whiteY = whiteY; + cs->whiteZ = whiteZ; + cs->blackX = blackX; + cs->blackY = blackY; + cs->blackZ = blackZ; + cs->gammaR = gammaR; + cs->gammaG = gammaG; + cs->gammaB = gammaB; + for (i = 0; i < 9; ++i) { + cs->mat[i] = mat[i]; + } + return cs; +} + +GfxColorSpace *GfxCalRGBColorSpace::parse(Array *arr) { + GfxCalRGBColorSpace *cs; + Object obj1, obj2, obj3; + int i; + + arr->get(1, &obj1); + if (!obj1.isDict()) { + error(-1, "Bad CalRGB color space"); + obj1.free(); + return NULL; + } + cs = new GfxCalRGBColorSpace(); + if (obj1.dictLookup("WhitePoint", &obj2)->isArray() && + obj2.arrayGetLength() == 3) { + obj2.arrayGet(0, &obj3); + if (likely(obj3.isNum())) + cs->whiteX = obj3.getNum(); + obj3.free(); + obj2.arrayGet(1, &obj3); + if (likely(obj3.isNum())) + cs->whiteY = obj3.getNum(); + obj3.free(); + obj2.arrayGet(2, &obj3); + if (likely(obj3.isNum())) + cs->whiteZ = obj3.getNum(); + obj3.free(); + } + obj2.free(); + if (obj1.dictLookup("BlackPoint", &obj2)->isArray() && + obj2.arrayGetLength() == 3) { + obj2.arrayGet(0, &obj3); + if (likely(obj3.isNum())) + cs->blackX = obj3.getNum(); + obj3.free(); + obj2.arrayGet(1, &obj3); + if (likely(obj3.isNum())) + cs->blackY = obj3.getNum(); + obj3.free(); + obj2.arrayGet(2, &obj3); + if (likely(obj3.isNum())) + cs->blackZ = obj3.getNum(); + obj3.free(); + } + obj2.free(); + if (obj1.dictLookup("Gamma", &obj2)->isArray() && + obj2.arrayGetLength() == 3) { + obj2.arrayGet(0, &obj3); + if (likely(obj3.isNum())) + cs->gammaR = obj3.getNum(); + obj3.free(); + obj2.arrayGet(1, &obj3); + if (likely(obj3.isNum())) + cs->gammaG = obj3.getNum(); + obj3.free(); + obj2.arrayGet(2, &obj3); + if (likely(obj3.isNum())) + cs->gammaB = obj3.getNum(); + obj3.free(); + } + obj2.free(); + if (obj1.dictLookup("Matrix", &obj2)->isArray() && + obj2.arrayGetLength() == 9) { + for (i = 0; i < 9; ++i) { + obj2.arrayGet(i, &obj3); + if (likely(obj3.isNum())) + cs->mat[i] = obj3.getNum(); + obj3.free(); + } + } + obj2.free(); + obj1.free(); + + cs->kr = 1 / (xyzrgb[0][0] * cs->whiteX + + xyzrgb[0][1] * cs->whiteY + + xyzrgb[0][2] * cs->whiteZ); + cs->kg = 1 / (xyzrgb[1][0] * cs->whiteX + + xyzrgb[1][1] * cs->whiteY + + xyzrgb[1][2] * cs->whiteZ); + cs->kb = 1 / (xyzrgb[2][0] * cs->whiteX + + xyzrgb[2][1] * cs->whiteY + + xyzrgb[2][2] * cs->whiteZ); + + return cs; +} + +// convert CalRGB to XYZ color space +void GfxCalRGBColorSpace::getXYZ(GfxColor *color, + double *pX, double *pY, double *pZ) { + double A, B, C; + + A = pow(colToDbl(color->c[0]), gammaR); + B = pow(colToDbl(color->c[1]), gammaG); + C = pow(colToDbl(color->c[2]), gammaB); + *pX = mat[0] * A + mat[3] * B + mat[6] * C; + *pY = mat[1] * A + mat[4] * B + mat[7] * C; + *pZ = mat[2] * A + mat[5] * B + mat[8] * C; +} + +void GfxCalRGBColorSpace::getGray(GfxColor *color, GfxGray *gray) { + GfxRGB rgb; + +#ifdef USE_CMS + if (XYZ2DisplayTransform != NULL && displayPixelType == PT_GRAY) { + Guchar out[gfxColorMaxComps]; + double in[gfxColorMaxComps]; + double X, Y, Z; + + getXYZ(color,&X,&Y,&Z); + in[0] = clip01(X); + in[1] = clip01(Y); + in[2] = clip01(Z); + XYZ2DisplayTransform->doTransform(in,out,1); + *gray = byteToCol(out[0]); + return; + } +#endif + getRGB(color, &rgb); + *gray = clip01((GfxColorComp)(0.299 * rgb.r + + 0.587 * rgb.g + + 0.114 * rgb.b + 0.5)); +} + +void GfxCalRGBColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { + double X, Y, Z; + double r, g, b; + + getXYZ(color,&X,&Y,&Z); +#ifdef USE_CMS + if (XYZ2DisplayTransform != NULL && displayPixelType == PT_RGB) { + Guchar out[gfxColorMaxComps]; + double in[gfxColorMaxComps]; + + in[0] = clip01(X/whiteX); + in[1] = clip01(Y/whiteY); + in[2] = clip01(Z/whiteZ); + XYZ2DisplayTransform->doTransform(in,out,1); + rgb->r = byteToCol(out[0]); + rgb->g = byteToCol(out[1]); + rgb->b = byteToCol(out[2]); + return; + } +#endif + // convert XYZ to RGB, including gamut mapping and gamma correction + r = xyzrgb[0][0] * X + xyzrgb[0][1] * Y + xyzrgb[0][2] * Z; + g = xyzrgb[1][0] * X + xyzrgb[1][1] * Y + xyzrgb[1][2] * Z; + b = xyzrgb[2][0] * X + xyzrgb[2][1] * Y + xyzrgb[2][2] * Z; + rgb->r = dblToCol(sqrt(clip01(r))); + rgb->g = dblToCol(sqrt(clip01(g))); + rgb->b = dblToCol(sqrt(clip01(b))); +} + +void GfxCalRGBColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { + GfxRGB rgb; + GfxColorComp c, m, y, k; + +#ifdef USE_CMS + if (XYZ2DisplayTransform != NULL && displayPixelType == PT_CMYK) { + double in[gfxColorMaxComps]; + Guchar out[gfxColorMaxComps]; + double X, Y, Z; + + getXYZ(color,&X,&Y,&Z); + in[0] = clip01(X); + in[1] = clip01(Y); + in[2] = clip01(Z); + XYZ2DisplayTransform->doTransform(in,out,1); + cmyk->c = byteToCol(out[0]); + cmyk->m = byteToCol(out[1]); + cmyk->y = byteToCol(out[2]); + cmyk->k = byteToCol(out[3]); + return; + } +#endif + getRGB(color, &rgb); + c = clip01(gfxColorComp1 - rgb.r); + m = clip01(gfxColorComp1 - rgb.g); + y = clip01(gfxColorComp1 - rgb.b); + k = c; + if (m < k) { + k = m; + } + if (y < k) { + k = y; + } + cmyk->c = c - k; + cmyk->m = m - k; + cmyk->y = y - k; + cmyk->k = k; +} + +void GfxCalRGBColorSpace::getDefaultColor(GfxColor *color) { + color->c[0] = 0; + color->c[1] = 0; + color->c[2] = 0; +} + +//------------------------------------------------------------------------ +// GfxDeviceCMYKColorSpace +//------------------------------------------------------------------------ + +GfxDeviceCMYKColorSpace::GfxDeviceCMYKColorSpace() { +} + +GfxDeviceCMYKColorSpace::~GfxDeviceCMYKColorSpace() { +} + +GfxColorSpace *GfxDeviceCMYKColorSpace::copy() { + return new GfxDeviceCMYKColorSpace(); +} + +void GfxDeviceCMYKColorSpace::getGray(GfxColor *color, GfxGray *gray) { + *gray = clip01((GfxColorComp)(gfxColorComp1 - color->c[3] + - 0.3 * color->c[0] + - 0.59 * color->c[1] + - 0.11 * color->c[2] + 0.5)); +} + +void GfxDeviceCMYKColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { + double c, m, y, k, c1, m1, y1, k1, r, g, b; + + c = colToDbl(color->c[0]); + m = colToDbl(color->c[1]); + y = colToDbl(color->c[2]); + k = colToDbl(color->c[3]); + c1 = 1 - c; + m1 = 1 - m; + y1 = 1 - y; + k1 = 1 - k; + cmykToRGBMatrixMultiplication(c, m, y, k, c1, m1, y1, k1, r, g, b); + rgb->r = clip01(dblToCol(r)); + rgb->g = clip01(dblToCol(g)); + rgb->b = clip01(dblToCol(b)); +} + +static inline void GfxDeviceCMYKColorSpacegetRGBLineHelper(Guchar *&in, double &r, double &g, double &b) +{ + double c, m, y, k, c1, m1, y1, k1; + + c = byteToDbl(*in++); + m = byteToDbl(*in++); + y = byteToDbl(*in++); + k = byteToDbl(*in++); + c1 = 1 - c; + m1 = 1 - m; + y1 = 1 - y; + k1 = 1 - k; + cmykToRGBMatrixMultiplication(c, m, y, k, c1, m1, y1, k1, r, g, b); +} + +void GfxDeviceCMYKColorSpace::getRGBLine(Guchar *in, unsigned int *out, int length) +{ + double r, g, b; + for (int i = 0; i < length; i++) { + GfxDeviceCMYKColorSpacegetRGBLineHelper(in, r, g, b); + *out++ = (dblToByte(clip01(r)) << 16) | (dblToByte(clip01(g)) << 8) | dblToByte(clip01(b)); + } +} + +void GfxDeviceCMYKColorSpace::getRGBLine(Guchar *in, Guchar *out, int length) +{ + double r, g, b; + + for (int i = 0; i < length; i++) { + GfxDeviceCMYKColorSpacegetRGBLineHelper(in, r, g, b); + *out++ = dblToByte(clip01(r)); + *out++ = dblToByte(clip01(g)); + *out++ = dblToByte(clip01(b)); + } +} + +void GfxDeviceCMYKColorSpace::getRGBXLine(Guchar *in, Guchar *out, int length) +{ + double r, g, b; + + for (int i = 0; i < length; i++) { + GfxDeviceCMYKColorSpacegetRGBLineHelper(in, r, g, b); + *out++ = dblToByte(clip01(r)); + *out++ = dblToByte(clip01(g)); + *out++ = dblToByte(clip01(b)); + *out++ = 255; + } +} + +void GfxDeviceCMYKColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { + cmyk->c = clip01(color->c[0]); + cmyk->m = clip01(color->c[1]); + cmyk->y = clip01(color->c[2]); + cmyk->k = clip01(color->c[3]); +} + +void GfxDeviceCMYKColorSpace::getDefaultColor(GfxColor *color) { + color->c[0] = 0; + color->c[1] = 0; + color->c[2] = 0; + color->c[3] = gfxColorComp1; +} + +//------------------------------------------------------------------------ +// GfxLabColorSpace +//------------------------------------------------------------------------ + +GfxLabColorSpace::GfxLabColorSpace() { + whiteX = whiteY = whiteZ = 1; + blackX = blackY = blackZ = 0; + aMin = bMin = -100; + aMax = bMax = 100; +} + +GfxLabColorSpace::~GfxLabColorSpace() { +} + +GfxColorSpace *GfxLabColorSpace::copy() { + GfxLabColorSpace *cs; + + cs = new GfxLabColorSpace(); + cs->whiteX = whiteX; + cs->whiteY = whiteY; + cs->whiteZ = whiteZ; + cs->blackX = blackX; + cs->blackY = blackY; + cs->blackZ = blackZ; + cs->aMin = aMin; + cs->aMax = aMax; + cs->bMin = bMin; + cs->bMax = bMax; + cs->kr = kr; + cs->kg = kg; + cs->kb = kb; + return cs; +} + +GfxColorSpace *GfxLabColorSpace::parse(Array *arr) { + GfxLabColorSpace *cs; + Object obj1, obj2, obj3; + + arr->get(1, &obj1); + if (!obj1.isDict()) { + error(-1, "Bad Lab color space"); + obj1.free(); + return NULL; + } + cs = new GfxLabColorSpace(); + if (obj1.dictLookup("WhitePoint", &obj2)->isArray() && + obj2.arrayGetLength() == 3) { + obj2.arrayGet(0, &obj3); + cs->whiteX = obj3.getNum(); + obj3.free(); + obj2.arrayGet(1, &obj3); + cs->whiteY = obj3.getNum(); + obj3.free(); + obj2.arrayGet(2, &obj3); + cs->whiteZ = obj3.getNum(); + obj3.free(); + } + obj2.free(); + if (obj1.dictLookup("BlackPoint", &obj2)->isArray() && + obj2.arrayGetLength() == 3) { + obj2.arrayGet(0, &obj3); + cs->blackX = obj3.getNum(); + obj3.free(); + obj2.arrayGet(1, &obj3); + cs->blackY = obj3.getNum(); + obj3.free(); + obj2.arrayGet(2, &obj3); + cs->blackZ = obj3.getNum(); + obj3.free(); + } + obj2.free(); + if (obj1.dictLookup("Range", &obj2)->isArray() && + obj2.arrayGetLength() == 4) { + obj2.arrayGet(0, &obj3); + cs->aMin = obj3.getNum(); + obj3.free(); + obj2.arrayGet(1, &obj3); + cs->aMax = obj3.getNum(); + obj3.free(); + obj2.arrayGet(2, &obj3); + cs->bMin = obj3.getNum(); + obj3.free(); + obj2.arrayGet(3, &obj3); + cs->bMax = obj3.getNum(); + obj3.free(); + } + obj2.free(); + obj1.free(); + + cs->kr = 1 / (xyzrgb[0][0] * cs->whiteX + + xyzrgb[0][1] * cs->whiteY + + xyzrgb[0][2] * cs->whiteZ); + cs->kg = 1 / (xyzrgb[1][0] * cs->whiteX + + xyzrgb[1][1] * cs->whiteY + + xyzrgb[1][2] * cs->whiteZ); + cs->kb = 1 / (xyzrgb[2][0] * cs->whiteX + + xyzrgb[2][1] * cs->whiteY + + xyzrgb[2][2] * cs->whiteZ); + + return cs; +} + +void GfxLabColorSpace::getGray(GfxColor *color, GfxGray *gray) { + GfxRGB rgb; + +#ifdef USE_CMS + if (XYZ2DisplayTransform != NULL && displayPixelType == PT_GRAY) { + Guchar out[gfxColorMaxComps]; + double in[gfxColorMaxComps]; + + getXYZ(color, &in[0], &in[1], &in[2]); + XYZ2DisplayTransform->doTransform(in,out,1); + *gray = byteToCol(out[0]); + return; + } +#endif + getRGB(color, &rgb); + *gray = clip01((GfxColorComp)(0.299 * rgb.r + + 0.587 * rgb.g + + 0.114 * rgb.b + 0.5)); +} + +// convert L*a*b* to media XYZ color space +// (not multiply by the white point) +void GfxLabColorSpace::getXYZ(GfxColor *color, + double *pX, double *pY, double *pZ) { + double X, Y, Z; + double t1, t2; + + t1 = (colToDbl(color->c[0]) + 16) / 116; + t2 = t1 + colToDbl(color->c[1]) / 500; + if (t2 >= (6.0 / 29.0)) { + X = t2 * t2 * t2; + } else { + X = (108.0 / 841.0) * (t2 - (4.0 / 29.0)); + } + if (t1 >= (6.0 / 29.0)) { + Y = t1 * t1 * t1; + } else { + Y = (108.0 / 841.0) * (t1 - (4.0 / 29.0)); + } + t2 = t1 - colToDbl(color->c[2]) / 200; + if (t2 >= (6.0 / 29.0)) { + Z = t2 * t2 * t2; + } else { + Z = (108.0 / 841.0) * (t2 - (4.0 / 29.0)); + } + *pX = X; + *pY = Y; + *pZ = Z; +} + +void GfxLabColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { + double X, Y, Z; + double r, g, b; + + getXYZ(color, &X, &Y, &Z); +#ifdef USE_CMS + if (XYZ2DisplayTransform != NULL && displayPixelType == PT_RGB) { + Guchar out[gfxColorMaxComps]; + double in[gfxColorMaxComps]; + + in[0] = clip01(X); + in[1] = clip01(Y); + in[2] = clip01(Z); + XYZ2DisplayTransform->doTransform(in,out,1); + rgb->r = byteToCol(out[0]); + rgb->g = byteToCol(out[1]); + rgb->b = byteToCol(out[2]); + return; + } +#endif + X *= whiteX; + Y *= whiteY; + Z *= whiteZ; + // convert XYZ to RGB, including gamut mapping and gamma correction + r = xyzrgb[0][0] * X + xyzrgb[0][1] * Y + xyzrgb[0][2] * Z; + g = xyzrgb[1][0] * X + xyzrgb[1][1] * Y + xyzrgb[1][2] * Z; + b = xyzrgb[2][0] * X + xyzrgb[2][1] * Y + xyzrgb[2][2] * Z; + rgb->r = dblToCol(sqrt(clip01(r * kr))); + rgb->g = dblToCol(sqrt(clip01(g * kg))); + rgb->b = dblToCol(sqrt(clip01(b * kb))); +} + +void GfxLabColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { + GfxRGB rgb; + GfxColorComp c, m, y, k; + +#ifdef USE_CMS + if (XYZ2DisplayTransform != NULL && displayPixelType == PT_CMYK) { + double in[gfxColorMaxComps]; + Guchar out[gfxColorMaxComps]; + + getXYZ(color, &in[0], &in[1], &in[2]); + XYZ2DisplayTransform->doTransform(in,out,1); + cmyk->c = byteToCol(out[0]); + cmyk->m = byteToCol(out[1]); + cmyk->y = byteToCol(out[2]); + cmyk->k = byteToCol(out[3]); + return; + } +#endif + getRGB(color, &rgb); + c = clip01(gfxColorComp1 - rgb.r); + m = clip01(gfxColorComp1 - rgb.g); + y = clip01(gfxColorComp1 - rgb.b); + k = c; + if (m < k) { + k = m; + } + if (y < k) { + k = y; + } + cmyk->c = c - k; + cmyk->m = m - k; + cmyk->y = y - k; + cmyk->k = k; +} + +void GfxLabColorSpace::getDefaultColor(GfxColor *color) { + color->c[0] = 0; + if (aMin > 0) { + color->c[1] = dblToCol(aMin); + } else if (aMax < 0) { + color->c[1] = dblToCol(aMax); + } else { + color->c[1] = 0; + } + if (bMin > 0) { + color->c[2] = dblToCol(bMin); + } else if (bMax < 0) { + color->c[2] = dblToCol(bMax); + } else { + color->c[2] = 0; + } +} + +void GfxLabColorSpace::getDefaultRanges(double *decodeLow, double *decodeRange, + int maxImgPixel) { + decodeLow[0] = 0; + decodeRange[0] = 100; + decodeLow[1] = aMin; + decodeRange[1] = aMax - aMin; + decodeLow[2] = bMin; + decodeRange[2] = bMax - bMin; +} + +//------------------------------------------------------------------------ +// GfxICCBasedColorSpace +//------------------------------------------------------------------------ + +class GfxICCBasedColorSpaceKey : public PopplerCacheKey +{ + public: + GfxICCBasedColorSpaceKey(int numA, int genA) : num(numA), gen(genA) + { + } + + bool operator==(const PopplerCacheKey &key) const + { + const GfxICCBasedColorSpaceKey *k = static_cast<const GfxICCBasedColorSpaceKey*>(&key); + return k->num == num && k->gen == gen; + } + + int num, gen; +}; + +class GfxICCBasedColorSpaceItem : public PopplerCacheItem +{ + public: + GfxICCBasedColorSpaceItem(GfxICCBasedColorSpace *csA) + { + cs = static_cast<GfxICCBasedColorSpace*>(csA->copy()); + } + + ~GfxICCBasedColorSpaceItem() + { + delete cs; + } + + GfxICCBasedColorSpace *cs; +}; + +GfxICCBasedColorSpace::GfxICCBasedColorSpace(int nCompsA, GfxColorSpace *altA, + Ref *iccProfileStreamA) { + nComps = nCompsA; + alt = altA; + iccProfileStream = *iccProfileStreamA; + rangeMin[0] = rangeMin[1] = rangeMin[2] = rangeMin[3] = 0; + rangeMax[0] = rangeMax[1] = rangeMax[2] = rangeMax[3] = 1; +#ifdef USE_CMS + transform = NULL; + lineTransform = NULL; +#endif +} + +GfxICCBasedColorSpace::~GfxICCBasedColorSpace() { + delete alt; +#ifdef USE_CMS + if (transform != NULL) { + if (transform->unref() == 0) delete transform; + } + if (lineTransform != NULL) { + if (lineTransform->unref() == 0) delete lineTransform; + } +#endif +} + +GfxColorSpace *GfxICCBasedColorSpace::copy() { + GfxICCBasedColorSpace *cs; + int i; + + cs = new GfxICCBasedColorSpace(nComps, alt->copy(), &iccProfileStream); + for (i = 0; i < 4; ++i) { + cs->rangeMin[i] = rangeMin[i]; + cs->rangeMax[i] = rangeMax[i]; + } +#ifdef USE_CMS + cs->transform = transform; + if (transform != NULL) transform->ref(); + cs->lineTransform = lineTransform; + if (lineTransform != NULL) lineTransform->ref(); +#endif + return cs; +} + +GfxColorSpace *GfxICCBasedColorSpace::parse(Array *arr, Gfx *gfx) { + GfxICCBasedColorSpace *cs; + Ref iccProfileStreamA; + int nCompsA; + GfxColorSpace *altA; + Dict *dict; + Object obj1, obj2, obj3; + int i; + + arr->getNF(1, &obj1); + if (obj1.isRef()) { + iccProfileStreamA = obj1.getRef(); + } else { + iccProfileStreamA.num = 0; + iccProfileStreamA.gen = 0; + } + obj1.free(); +#ifdef USE_CMS + // check cache + if (gfx && iccProfileStreamA.num > 0) { + GfxICCBasedColorSpaceKey k(iccProfileStreamA.num, iccProfileStreamA.gen); + GfxICCBasedColorSpaceItem *item = static_cast<GfxICCBasedColorSpaceItem *>(gfx->getIccColorSpaceCache()->lookup(k)); + if (item != NULL) + { + cs = static_cast<GfxICCBasedColorSpace*>(item->cs->copy()); + return cs; + } + } +#endif + arr->get(1, &obj1); + if (!obj1.isStream()) { + error(-1, "Bad ICCBased color space (stream)"); + obj1.free(); + return NULL; + } + dict = obj1.streamGetDict(); + if (!dict->lookup("N", &obj2)->isInt()) { + error(-1, "Bad ICCBased color space (N)"); + obj2.free(); + obj1.free(); + return NULL; + } + nCompsA = obj2.getInt(); + obj2.free(); + if (nCompsA > gfxColorMaxComps) { + error(-1, "ICCBased color space with too many (%d > %d) components", + nCompsA, gfxColorMaxComps); + nCompsA = gfxColorMaxComps; + } + if (dict->lookup("Alternate", &obj2)->isNull() || + !(altA = GfxColorSpace::parse(&obj2, gfx))) { + switch (nCompsA) { + case 1: + altA = new GfxDeviceGrayColorSpace(); + break; + case 3: + altA = new GfxDeviceRGBColorSpace(); + break; + case 4: + altA = new GfxDeviceCMYKColorSpace(); + break; + default: + error(-1, "Bad ICCBased color space - invalid N"); + obj2.free(); + obj1.free(); + return NULL; + } + } + obj2.free(); + cs = new GfxICCBasedColorSpace(nCompsA, altA, &iccProfileStreamA); + if (dict->lookup("Range", &obj2)->isArray() && + obj2.arrayGetLength() == 2 * nCompsA) { + Object obj4; + for (i = 0; i < nCompsA; ++i) { + obj2.arrayGet(2*i, &obj3); + obj2.arrayGet(2*i+1, &obj4); + if (obj3.isNum() && obj4.isNum()) { + cs->rangeMin[i] = obj3.getNum(); + cs->rangeMax[i] = obj4.getNum(); + } + obj3.free(); + obj4.free(); + } + } + obj2.free(); + obj1.free(); + +#ifdef USE_CMS + arr->get(1, &obj1); + dict = obj1.streamGetDict(); + Guchar *profBuf; + Stream *iccStream = obj1.getStream(); + int length = 0; + + profBuf = iccStream->toUnsignedChars(&length, 65536, 65536); + cmsHPROFILE hp = cmsOpenProfileFromMem(profBuf,length); + gfree(profBuf); + if (hp == 0) { + error(-1, "read ICCBased color space profile error"); + } else { + cmsHPROFILE dhp = displayProfile; + if (dhp == NULL) dhp = RGBProfile; + unsigned int cst = getCMSColorSpaceType(cmsGetColorSpace(hp)); + unsigned int dNChannels = getCMSNChannels(cmsGetColorSpace(dhp)); + unsigned int dcst = getCMSColorSpaceType(cmsGetColorSpace(dhp)); + cmsHTRANSFORM transform; + if ((transform = cmsCreateTransform(hp, + COLORSPACE_SH(cst) |CHANNELS_SH(nCompsA) | BYTES_SH(1), + dhp, + COLORSPACE_SH(dcst) | + CHANNELS_SH(dNChannels) | BYTES_SH(1), + INTENT_RELATIVE_COLORIMETRIC,0)) == 0) { + error(-1, "Can't create transform"); + cs->transform = NULL; + } else { + cs->transform = new GfxColorTransform(transform); + } + if (dcst == PT_RGB) { + // create line transform only when the display is RGB type color space + if ((transform = cmsCreateTransform(hp, + CHANNELS_SH(nCompsA) | BYTES_SH(1),dhp, + TYPE_RGB_8,INTENT_RELATIVE_COLORIMETRIC,0)) == 0) { + error(-1, "Can't create transform"); + cs->lineTransform = NULL; + } else { + cs->lineTransform = new GfxColorTransform(transform); + } + } + cmsCloseProfile(hp); + } + obj1.free(); + // put this colorSpace into cache + if (gfx && iccProfileStreamA.num > 0) { + GfxICCBasedColorSpaceKey *k = new GfxICCBasedColorSpaceKey(iccProfileStreamA.num, iccProfileStreamA.gen); + GfxICCBasedColorSpaceItem *item = new GfxICCBasedColorSpaceItem(cs); + gfx->getIccColorSpaceCache()->put(k, item); + } +#endif + return cs; +} + +void GfxICCBasedColorSpace::getGray(GfxColor *color, GfxGray *gray) { +#ifdef USE_CMS + if (transform != 0 && displayPixelType == PT_GRAY) { + Guchar in[gfxColorMaxComps]; + Guchar out[gfxColorMaxComps]; + + for (int i = 0;i < nComps;i++) { + in[i] = colToByte(color->c[i]); + } + transform->doTransform(in,out,1); + *gray = byteToCol(out[0]); + } else { + GfxRGB rgb; + getRGB(color,&rgb); + *gray = clip01((GfxColorComp)(0.3 * rgb.r + + 0.59 * rgb.g + + 0.11 * rgb.b + 0.5)); + } +#else + alt->getGray(color, gray); +#endif +} + +void GfxICCBasedColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { +#ifdef USE_CMS + if (transform != 0 + && (displayProfile == NULL || displayPixelType == PT_RGB)) { + Guchar in[gfxColorMaxComps]; + Guchar out[gfxColorMaxComps]; + + for (int i = 0;i < nComps;i++) { + in[i] = colToByte(color->c[i]); + } + transform->doTransform(in,out,1); + rgb->r = byteToCol(out[0]); + rgb->g = byteToCol(out[1]); + rgb->b = byteToCol(out[2]); + } else { + alt->getRGB(color, rgb); + } +#else + alt->getRGB(color, rgb); +#endif +} + +void GfxICCBasedColorSpace::getRGBLine(Guchar *in, unsigned int *out, + int length) { +#ifdef USE_CMS + if (lineTransform != 0) { + Guchar* tmp = (Guchar *)gmallocn(3 * length, sizeof(Guchar)); + lineTransform->doTransform(in, tmp, length); + for (int i = 0; i < length; ++i) { + Guchar *current = tmp + (i * 3); + out[i] = (current[0] << 16) | (current[1] << 8) | current[2]; + } + gfree(tmp); + } else { + alt->getRGBLine(in, out, length); + } +#else + alt->getRGBLine(in, out, length); +#endif +} + +void GfxICCBasedColorSpace::getRGBLine(Guchar *in, Guchar *out, int length) { +#ifdef USE_CMS + if (lineTransform != 0) { + Guchar* tmp = (Guchar *)gmallocn(3 * length, sizeof(Guchar)); + lineTransform->doTransform(in, tmp, length); + Guchar *current = tmp; + for (int i = 0; i < length; ++i) { + *out++ = *current++; + *out++ = *current++; + *out++ = *current++; + } + gfree(tmp); + } else { + alt->getRGBLine(in, out, length); + } +#else + alt->getRGBLine(in, out, length); +#endif +} + +void GfxICCBasedColorSpace::getRGBXLine(Guchar *in, Guchar *out, int length) { +#ifdef USE_CMS + if (lineTransform != 0) { + Guchar* tmp = (Guchar *)gmallocn(3 * length, sizeof(Guchar)); + lineTransform->doTransform(in, tmp, length); + Guchar *current = tmp; + for (int i = 0; i < length; ++i) { + *out++ = *current++; + *out++ = *current++; + *out++ = *current++; + *out++ = 255; + } + gfree(tmp); + } else { + alt->getRGBXLine(in, out, length); + } +#else + alt->getRGBXLine(in, out, length); +#endif +} + +void GfxICCBasedColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { +#ifdef USE_CMS + if (transform != NULL && displayPixelType == PT_CMYK) { + Guchar in[gfxColorMaxComps]; + Guchar out[gfxColorMaxComps]; + + for (int i = 0;i < nComps;i++) { + in[i] = colToByte(color->c[i]); + } + transform->doTransform(in,out,1); + cmyk->c = byteToCol(out[0]); + cmyk->m = byteToCol(out[1]); + cmyk->y = byteToCol(out[2]); + cmyk->k = byteToCol(out[3]); + } else { + GfxRGB rgb; + GfxColorComp c, m, y, k; + + getRGB(color,&rgb); + c = clip01(gfxColorComp1 - rgb.r); + m = clip01(gfxColorComp1 - rgb.g); + y = clip01(gfxColorComp1 - rgb.b); + k = c; + if (m < k) { + k = m; + } + if (y < k) { + k = y; + } + cmyk->c = c - k; + cmyk->m = m - k; + cmyk->y = y - k; + cmyk->k = k; + } +#else + alt->getCMYK(color, cmyk); +#endif +} + +GBool GfxICCBasedColorSpace::useGetRGBLine() { +#ifdef USE_CMS + return lineTransform != NULL || alt->useGetRGBLine(); +#else + return alt->useGetRGBLine(); +#endif +} + +void GfxICCBasedColorSpace::getDefaultColor(GfxColor *color) { + int i; + + for (i = 0; i < nComps; ++i) { + if (rangeMin[i] > 0) { + color->c[i] = dblToCol(rangeMin[i]); + } else if (rangeMax[i] < 0) { + color->c[i] = dblToCol(rangeMax[i]); + } else { + color->c[i] = 0; + } + } +} + +void GfxICCBasedColorSpace::getDefaultRanges(double *decodeLow, + double *decodeRange, + int maxImgPixel) { + alt->getDefaultRanges(decodeLow, decodeRange, maxImgPixel); + +#if 0 + // this is nominally correct, but some PDF files don't set the + // correct ranges in the ICCBased dict + int i; + + for (i = 0; i < nComps; ++i) { + decodeLow[i] = rangeMin[i]; + decodeRange[i] = rangeMax[i] - rangeMin[i]; + } +#endif +} + +//------------------------------------------------------------------------ +// GfxIndexedColorSpace +//------------------------------------------------------------------------ + +GfxIndexedColorSpace::GfxIndexedColorSpace(GfxColorSpace *baseA, + int indexHighA) { + base = baseA; + indexHigh = indexHighA; + lookup = (Guchar *)gmallocn((indexHigh + 1) * base->getNComps(), + sizeof(Guchar)); +} + +GfxIndexedColorSpace::~GfxIndexedColorSpace() { + delete base; + gfree(lookup); +} + +GfxColorSpace *GfxIndexedColorSpace::copy() { + GfxIndexedColorSpace *cs; + + cs = new GfxIndexedColorSpace(base->copy(), indexHigh); + memcpy(cs->lookup, lookup, + (indexHigh + 1) * base->getNComps() * sizeof(Guchar)); + return cs; +} + +GfxColorSpace *GfxIndexedColorSpace::parse(Array *arr, Gfx *gfx) { + GfxIndexedColorSpace *cs; + GfxColorSpace *baseA; + int indexHighA; + Object obj1; + char *s; + int n, i, j; + + if (arr->getLength() != 4) { + error(-1, "Bad Indexed color space"); + goto err1; + } + arr->get(1, &obj1); + if (!(baseA = GfxColorSpace::parse(&obj1, gfx))) { + error(-1, "Bad Indexed color space (base color space)"); + goto err2; + } + obj1.free(); + if (!arr->get(2, &obj1)->isInt()) { + error(-1, "Bad Indexed color space (hival)"); + delete baseA; + goto err2; + } + indexHighA = obj1.getInt(); + if (indexHighA < 0 || indexHighA > 255) { + // the PDF spec requires indexHigh to be in [0,255] -- allowing + // values larger than 255 creates a security hole: if nComps * + // indexHigh is greater than 2^31, the loop below may overwrite + // past the end of the array + int previousValue = indexHighA; + if (indexHighA < 0) indexHighA = 0; + else indexHighA = 255; + error(-1, "Bad Indexed color space (invalid indexHigh value, was %d using %d to try to recover)", previousValue, indexHighA); + } + obj1.free(); + cs = new GfxIndexedColorSpace(baseA, indexHighA); + arr->get(3, &obj1); + n = baseA->getNComps(); + if (obj1.isStream()) { + obj1.streamReset(); + for (i = 0; i <= indexHighA; ++i) { + const int readChars = obj1.streamGetChars(n, &cs->lookup[i*n]); + for (j = readChars; j < n; ++j) { + error(-1, "Bad Indexed color space (lookup table stream too short) padding with zeroes"); + cs->lookup[i*n + j] = 0; + } + } + obj1.streamClose(); + } else if (obj1.isString()) { + if (obj1.getString()->getLength() < (indexHighA + 1) * n) { + error(-1, "Bad Indexed color space (lookup table string too short)"); + goto err3; + } + s = obj1.getString()->getCString(); + for (i = 0; i <= indexHighA; ++i) { + for (j = 0; j < n; ++j) { + cs->lookup[i*n + j] = (Guchar)*s++; + } + } + } else { + error(-1, "Bad Indexed color space (lookup table)"); + goto err3; + } + obj1.free(); + return cs; + + err3: + delete cs; + err2: + obj1.free(); + err1: + return NULL; +} + +GfxColor *GfxIndexedColorSpace::mapColorToBase(GfxColor *color, + GfxColor *baseColor) { + Guchar *p; + double low[gfxColorMaxComps], range[gfxColorMaxComps]; + int n, i; + + n = base->getNComps(); + base->getDefaultRanges(low, range, indexHigh); + p = &lookup[(int)(colToDbl(color->c[0]) + 0.5) * n]; + for (i = 0; i < n; ++i) { + baseColor->c[i] = dblToCol(low[i] + (p[i] / 255.0) * range[i]); + } + return baseColor; +} + +void GfxIndexedColorSpace::getGray(GfxColor *color, GfxGray *gray) { + GfxColor color2; + + base->getGray(mapColorToBase(color, &color2), gray); +} + +void GfxIndexedColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { + GfxColor color2; + + base->getRGB(mapColorToBase(color, &color2), rgb); +} + +void GfxIndexedColorSpace::getRGBLine(Guchar *in, unsigned int *out, int length) { + Guchar *line; + int i, j, n; + + n = base->getNComps(); + line = (Guchar *) gmallocn (length, n); + for (i = 0; i < length; i++) + for (j = 0; j < n; j++) + line[i * n + j] = lookup[in[i] * n + j]; + + base->getRGBLine(line, out, length); + + gfree (line); +} + +void GfxIndexedColorSpace::getRGBLine(Guchar *in, Guchar *out, int length) +{ + Guchar *line; + int i, j, n; + + n = base->getNComps(); + line = (Guchar *) gmallocn (length, n); + for (i = 0; i < length; i++) + for (j = 0; j < n; j++) + line[i * n + j] = lookup[in[i] * n + j]; + + base->getRGBLine(line, out, length); + + gfree (line); +} + +void GfxIndexedColorSpace::getRGBXLine(Guchar *in, Guchar *out, int length) +{ + Guchar *line; + int i, j, n; + + n = base->getNComps(); + line = (Guchar *) gmallocn (length, n); + for (i = 0; i < length; i++) + for (j = 0; j < n; j++) + line[i * n + j] = lookup[in[i] * n + j]; + + base->getRGBXLine(line, out, length); + + gfree (line); +} + +void GfxIndexedColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { + GfxColor color2; + + base->getCMYK(mapColorToBase(color, &color2), cmyk); +} + +void GfxIndexedColorSpace::getDefaultColor(GfxColor *color) { + color->c[0] = 0; +} + +void GfxIndexedColorSpace::getDefaultRanges(double *decodeLow, + double *decodeRange, + int maxImgPixel) { + decodeLow[0] = 0; + decodeRange[0] = maxImgPixel; +} + +//------------------------------------------------------------------------ +// GfxSeparationColorSpace +//------------------------------------------------------------------------ + +GfxSeparationColorSpace::GfxSeparationColorSpace(GooString *nameA, + GfxColorSpace *altA, + Function *funcA) { + name = nameA; + alt = altA; + func = funcA; + nonMarking = !name->cmp("None"); +} + +GfxSeparationColorSpace::~GfxSeparationColorSpace() { + delete name; + delete alt; + delete func; +} + +GfxColorSpace *GfxSeparationColorSpace::copy() { + return new GfxSeparationColorSpace(name->copy(), alt->copy(), func->copy()); +} + +//~ handle the 'All' and 'None' colorants +GfxColorSpace *GfxSeparationColorSpace::parse(Array *arr, Gfx *gfx) { + GfxSeparationColorSpace *cs; + GooString *nameA; + GfxColorSpace *altA; + Function *funcA; + Object obj1; + + if (arr->getLength() != 4) { + error(-1, "Bad Separation color space"); + goto err1; + } + if (!arr->get(1, &obj1)->isName()) { + error(-1, "Bad Separation color space (name)"); + goto err2; + } + nameA = new GooString(obj1.getName()); + obj1.free(); + arr->get(2, &obj1); + if (!(altA = GfxColorSpace::parse(&obj1, gfx))) { + error(-1, "Bad Separation color space (alternate color space)"); + goto err3; + } + obj1.free(); + arr->get(3, &obj1); + if (!(funcA = Function::parse(&obj1))) { + goto err4; + } + obj1.free(); + cs = new GfxSeparationColorSpace(nameA, altA, funcA); + return cs; + + err4: + delete altA; + err3: + delete nameA; + err2: + obj1.free(); + err1: + return NULL; +} + +void GfxSeparationColorSpace::getGray(GfxColor *color, GfxGray *gray) { + double x; + double c[gfxColorMaxComps]; + GfxColor color2; + int i; + + x = colToDbl(color->c[0]); + func->transform(&x, c); + for (i = 0; i < alt->getNComps(); ++i) { + color2.c[i] = dblToCol(c[i]); + } + alt->getGray(&color2, gray); +} + +void GfxSeparationColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { + double x; + double c[gfxColorMaxComps]; + GfxColor color2; + int i; + + x = colToDbl(color->c[0]); + func->transform(&x, c); + for (i = 0; i < alt->getNComps(); ++i) { + color2.c[i] = dblToCol(c[i]); + } + alt->getRGB(&color2, rgb); +} + +void GfxSeparationColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { + double x; + double c[gfxColorMaxComps]; + GfxColor color2; + int i; + + x = colToDbl(color->c[0]); + func->transform(&x, c); + for (i = 0; i < alt->getNComps(); ++i) { + color2.c[i] = dblToCol(c[i]); + } + alt->getCMYK(&color2, cmyk); +} + +void GfxSeparationColorSpace::getDefaultColor(GfxColor *color) { + color->c[0] = gfxColorComp1; +} + +//------------------------------------------------------------------------ +// GfxDeviceNColorSpace +//------------------------------------------------------------------------ + +GfxDeviceNColorSpace::GfxDeviceNColorSpace(int nCompsA, + GfxColorSpace *altA, + Function *funcA) { + nComps = nCompsA; + alt = altA; + func = funcA; + nonMarking = gFalse; +} + +GfxDeviceNColorSpace::~GfxDeviceNColorSpace() { + int i; + + for (i = 0; i < nComps; ++i) { + delete names[i]; + } + delete alt; + delete func; +} + +GfxColorSpace *GfxDeviceNColorSpace::copy() { + GfxDeviceNColorSpace *cs; + int i; + + cs = new GfxDeviceNColorSpace(nComps, alt->copy(), func->copy()); + for (i = 0; i < nComps; ++i) { + cs->names[i] = names[i]->copy(); + } + cs->nonMarking = nonMarking; + return cs; +} + +//~ handle the 'None' colorant +GfxColorSpace *GfxDeviceNColorSpace::parse(Array *arr, Gfx *gfx) { + GfxDeviceNColorSpace *cs; + int nCompsA; + GooString *namesA[gfxColorMaxComps]; + GfxColorSpace *altA; + Function *funcA; + Object obj1, obj2; + int i; + + if (arr->getLength() != 4 && arr->getLength() != 5) { + error(-1, "Bad DeviceN color space"); + goto err1; + } + if (!arr->get(1, &obj1)->isArray()) { + error(-1, "Bad DeviceN color space (names)"); + goto err2; + } + nCompsA = obj1.arrayGetLength(); + if (nCompsA > gfxColorMaxComps) { + error(-1, "DeviceN color space with too many (%d > %d) components", + nCompsA, gfxColorMaxComps); + nCompsA = gfxColorMaxComps; + } + for (i = 0; i < nCompsA; ++i) { + if (!obj1.arrayGet(i, &obj2)->isName()) { + error(-1, "Bad DeviceN color space (names)"); + obj2.free(); + goto err2; + } + namesA[i] = new GooString(obj2.getName()); + obj2.free(); + } + obj1.free(); + arr->get(2, &obj1); + if (!(altA = GfxColorSpace::parse(&obj1, gfx))) { + error(-1, "Bad DeviceN color space (alternate color space)"); + goto err3; + } + obj1.free(); + arr->get(3, &obj1); + if (!(funcA = Function::parse(&obj1))) { + goto err4; + } + obj1.free(); + cs = new GfxDeviceNColorSpace(nCompsA, altA, funcA); + cs->nonMarking = gTrue; + for (i = 0; i < nCompsA; ++i) { + cs->names[i] = namesA[i]; + if (namesA[i]->cmp("None")) { + cs->nonMarking = gFalse; + } + } + return cs; + + err4: + delete altA; + err3: + for (i = 0; i < nCompsA; ++i) { + delete namesA[i]; + } + err2: + obj1.free(); + err1: + return NULL; +} + +void GfxDeviceNColorSpace::getGray(GfxColor *color, GfxGray *gray) { + double x[gfxColorMaxComps], c[gfxColorMaxComps]; + GfxColor color2; + int i; + + for (i = 0; i < nComps; ++i) { + x[i] = colToDbl(color->c[i]); + } + func->transform(x, c); + for (i = 0; i < alt->getNComps(); ++i) { + color2.c[i] = dblToCol(c[i]); + } + alt->getGray(&color2, gray); +} + +void GfxDeviceNColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { + double x[gfxColorMaxComps], c[gfxColorMaxComps]; + GfxColor color2; + int i; + + for (i = 0; i < nComps; ++i) { + x[i] = colToDbl(color->c[i]); + } + func->transform(x, c); + for (i = 0; i < alt->getNComps(); ++i) { + color2.c[i] = dblToCol(c[i]); + } + alt->getRGB(&color2, rgb); +} + +void GfxDeviceNColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { + double x[gfxColorMaxComps], c[gfxColorMaxComps]; + GfxColor color2; + int i; + + for (i = 0; i < nComps; ++i) { + x[i] = colToDbl(color->c[i]); + } + func->transform(x, c); + for (i = 0; i < alt->getNComps(); ++i) { + color2.c[i] = dblToCol(c[i]); + } + alt->getCMYK(&color2, cmyk); +} + +void GfxDeviceNColorSpace::getDefaultColor(GfxColor *color) { + int i; + + for (i = 0; i < nComps; ++i) { + color->c[i] = gfxColorComp1; + } +} + +//------------------------------------------------------------------------ +// GfxPatternColorSpace +//------------------------------------------------------------------------ + +GfxPatternColorSpace::GfxPatternColorSpace(GfxColorSpace *underA) { + under = underA; +} + +GfxPatternColorSpace::~GfxPatternColorSpace() { + if (under) { + delete under; + } +} + +GfxColorSpace *GfxPatternColorSpace::copy() { + return new GfxPatternColorSpace(under ? under->copy() : + (GfxColorSpace *)NULL); +} + +GfxColorSpace *GfxPatternColorSpace::parse(Array *arr, Gfx *gfx) { + GfxPatternColorSpace *cs; + GfxColorSpace *underA; + Object obj1; + + if (arr->getLength() != 1 && arr->getLength() != 2) { + error(-1, "Bad Pattern color space"); + return NULL; + } + underA = NULL; + if (arr->getLength() == 2) { + arr->get(1, &obj1); + if (!(underA = GfxColorSpace::parse(&obj1, gfx))) { + error(-1, "Bad Pattern color space (underlying color space)"); + obj1.free(); + return NULL; + } + obj1.free(); + } + cs = new GfxPatternColorSpace(underA); + return cs; +} + +void GfxPatternColorSpace::getGray(GfxColor *color, GfxGray *gray) { + *gray = 0; +} + +void GfxPatternColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { + rgb->r = rgb->g = rgb->b = 0; +} + +void GfxPatternColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { + cmyk->c = cmyk->m = cmyk->y = 0; + cmyk->k = 1; +} + +void GfxPatternColorSpace::getDefaultColor(GfxColor *color) { + color->c[0]=0; +} + +//------------------------------------------------------------------------ +// Pattern +//------------------------------------------------------------------------ + +GfxPattern::GfxPattern(int typeA) { + type = typeA; +} + +GfxPattern::~GfxPattern() { +} + +GfxPattern *GfxPattern::parse(Object *obj, Gfx *gfx) { + GfxPattern *pattern; + Object obj1; + + if (obj->isDict()) { + obj->dictLookup("PatternType", &obj1); + } else if (obj->isStream()) { + obj->streamGetDict()->lookup("PatternType", &obj1); + } else { + return NULL; + } + pattern = NULL; + if (obj1.isInt() && obj1.getInt() == 1) { + pattern = GfxTilingPattern::parse(obj); + } else if (obj1.isInt() && obj1.getInt() == 2) { + pattern = GfxShadingPattern::parse(obj, gfx); + } + obj1.free(); + return pattern; +} + +//------------------------------------------------------------------------ +// GfxTilingPattern +//------------------------------------------------------------------------ + +GfxTilingPattern *GfxTilingPattern::parse(Object *patObj) { + GfxTilingPattern *pat; + Dict *dict; + int paintTypeA, tilingTypeA; + double bboxA[4], matrixA[6]; + double xStepA, yStepA; + Object resDictA; + Object obj1, obj2; + int i; + + if (!patObj->isStream()) { + return NULL; + } + dict = patObj->streamGetDict(); + + if (dict->lookup("PaintType", &obj1)->isInt()) { + paintTypeA = obj1.getInt(); + } else { + paintTypeA = 1; + error(-1, "Invalid or missing PaintType in pattern"); + } + obj1.free(); + if (dict->lookup("TilingType", &obj1)->isInt()) { + tilingTypeA = obj1.getInt(); + } else { + tilingTypeA = 1; + error(-1, "Invalid or missing TilingType in pattern"); + } + obj1.free(); + bboxA[0] = bboxA[1] = 0; + bboxA[2] = bboxA[3] = 1; + if (dict->lookup("BBox", &obj1)->isArray() && + obj1.arrayGetLength() == 4) { + for (i = 0; i < 4; ++i) { + if (obj1.arrayGet(i, &obj2)->isNum()) { + bboxA[i] = obj2.getNum(); + } + obj2.free(); + } + } else { + error(-1, "Invalid or missing BBox in pattern"); + } + obj1.free(); + if (dict->lookup("XStep", &obj1)->isNum()) { + xStepA = obj1.getNum(); + } else { + xStepA = 1; + error(-1, "Invalid or missing XStep in pattern"); + } + obj1.free(); + if (dict->lookup("YStep", &obj1)->isNum()) { + yStepA = obj1.getNum(); + } else { + yStepA = 1; + error(-1, "Invalid or missing YStep in pattern"); + } + obj1.free(); + if (!dict->lookup("Resources", &resDictA)->isDict()) { + resDictA.free(); + resDictA.initNull(); + error(-1, "Invalid or missing Resources in pattern"); + } + matrixA[0] = 1; matrixA[1] = 0; + matrixA[2] = 0; matrixA[3] = 1; + matrixA[4] = 0; matrixA[5] = 0; + if (dict->lookup("Matrix", &obj1)->isArray() && + obj1.arrayGetLength() == 6) { + for (i = 0; i < 6; ++i) { + if (obj1.arrayGet(i, &obj2)->isNum()) { + matrixA[i] = obj2.getNum(); + } + obj2.free(); + } + } + obj1.free(); + + pat = new GfxTilingPattern(paintTypeA, tilingTypeA, bboxA, xStepA, yStepA, + &resDictA, matrixA, patObj); + resDictA.free(); + return pat; +} + +GfxTilingPattern::GfxTilingPattern(int paintTypeA, int tilingTypeA, + double *bboxA, double xStepA, double yStepA, + Object *resDictA, double *matrixA, + Object *contentStreamA): + GfxPattern(1) +{ + int i; + + paintType = paintTypeA; + tilingType = tilingTypeA; + for (i = 0; i < 4; ++i) { + bbox[i] = bboxA[i]; + } + xStep = xStepA; + yStep = yStepA; + resDictA->copy(&resDict); + for (i = 0; i < 6; ++i) { + matrix[i] = matrixA[i]; + } + contentStreamA->copy(&contentStream); +} + +GfxTilingPattern::~GfxTilingPattern() { + resDict.free(); + contentStream.free(); +} + +GfxPattern *GfxTilingPattern::copy() { + return new GfxTilingPattern(paintType, tilingType, bbox, xStep, yStep, + &resDict, matrix, &contentStream); +} + +//------------------------------------------------------------------------ +// GfxShadingPattern +//------------------------------------------------------------------------ + +GfxShadingPattern *GfxShadingPattern::parse(Object *patObj, Gfx *gfx) { + Dict *dict; + GfxShading *shadingA; + double matrixA[6]; + Object obj1, obj2; + int i; + + if (!patObj->isDict()) { + return NULL; + } + dict = patObj->getDict(); + + dict->lookup("Shading", &obj1); + shadingA = GfxShading::parse(&obj1, gfx); + obj1.free(); + if (!shadingA) { + return NULL; + } + + matrixA[0] = 1; matrixA[1] = 0; + matrixA[2] = 0; matrixA[3] = 1; + matrixA[4] = 0; matrixA[5] = 0; + if (dict->lookup("Matrix", &obj1)->isArray() && + obj1.arrayGetLength() == 6) { + for (i = 0; i < 6; ++i) { + if (obj1.arrayGet(i, &obj2)->isNum()) { + matrixA[i] = obj2.getNum(); + } + obj2.free(); + } + } + obj1.free(); + + return new GfxShadingPattern(shadingA, matrixA); +} + +GfxShadingPattern::GfxShadingPattern(GfxShading *shadingA, double *matrixA): + GfxPattern(2) +{ + int i; + + shading = shadingA; + for (i = 0; i < 6; ++i) { + matrix[i] = matrixA[i]; + } +} + +GfxShadingPattern::~GfxShadingPattern() { + delete shading; +} + +GfxPattern *GfxShadingPattern::copy() { + return new GfxShadingPattern(shading->copy(), matrix); +} + +//------------------------------------------------------------------------ +// GfxShading +//------------------------------------------------------------------------ + +GfxShading::GfxShading(int typeA) { + type = typeA; + colorSpace = NULL; +} + +GfxShading::GfxShading(GfxShading *shading) { + int i; + + type = shading->type; + colorSpace = shading->colorSpace->copy(); + for (i = 0; i < gfxColorMaxComps; ++i) { + background.c[i] = shading->background.c[i]; + } + hasBackground = shading->hasBackground; + xMin = shading->xMin; + yMin = shading->yMin; + xMax = shading->xMax; + yMax = shading->yMax; + hasBBox = shading->hasBBox; +} + +GfxShading::~GfxShading() { + if (colorSpace) { + delete colorSpace; + } +} + +GfxShading *GfxShading::parse(Object *obj, Gfx *gfx) { + GfxShading *shading; + Dict *dict; + int typeA; + Object obj1; + + if (obj->isDict()) { + dict = obj->getDict(); + } else if (obj->isStream()) { + dict = obj->streamGetDict(); + } else { + return NULL; + } + + if (!dict->lookup("ShadingType", &obj1)->isInt()) { + error(-1, "Invalid ShadingType in shading dictionary"); + obj1.free(); + return NULL; + } + typeA = obj1.getInt(); + obj1.free(); + + switch (typeA) { + case 1: + shading = GfxFunctionShading::parse(dict, gfx); + break; + case 2: + shading = GfxAxialShading::parse(dict, gfx); + break; + case 3: + shading = GfxRadialShading::parse(dict, gfx); + break; + case 4: + if (obj->isStream()) { + shading = GfxGouraudTriangleShading::parse(4, dict, obj->getStream(), gfx); + } else { + error(-1, "Invalid Type 4 shading object"); + goto err1; + } + break; + case 5: + if (obj->isStream()) { + shading = GfxGouraudTriangleShading::parse(5, dict, obj->getStream(), gfx); + } else { + error(-1, "Invalid Type 5 shading object"); + goto err1; + } + break; + case 6: + if (obj->isStream()) { + shading = GfxPatchMeshShading::parse(6, dict, obj->getStream(), gfx); + } else { + error(-1, "Invalid Type 6 shading object"); + goto err1; + } + break; + case 7: + if (obj->isStream()) { + shading = GfxPatchMeshShading::parse(7, dict, obj->getStream(), gfx); + } else { + error(-1, "Invalid Type 7 shading object"); + goto err1; + } + break; + default: + error(-1, "Unimplemented shading type %d", typeA); + goto err1; + } + + return shading; + + err1: + return NULL; +} + +GBool GfxShading::init(Dict *dict, Gfx *gfx) { + Object obj1, obj2; + int i; + + dict->lookup("ColorSpace", &obj1); + if (!(colorSpace = GfxColorSpace::parse(&obj1, gfx))) { + error(-1, "Bad color space in shading dictionary"); + obj1.free(); + return gFalse; + } + obj1.free(); + + for (i = 0; i < gfxColorMaxComps; ++i) { + background.c[i] = 0; + } + hasBackground = gFalse; + if (dict->lookup("Background", &obj1)->isArray()) { + if (obj1.arrayGetLength() == colorSpace->getNComps()) { + hasBackground = gTrue; + for (i = 0; i < colorSpace->getNComps(); ++i) { + background.c[i] = dblToCol(obj1.arrayGet(i, &obj2)->getNum()); + obj2.free(); + } + } else { + error(-1, "Bad Background in shading dictionary"); + } + } + obj1.free(); + + xMin = yMin = xMax = yMax = 0; + hasBBox = gFalse; + if (dict->lookup("BBox", &obj1)->isArray()) { + if (obj1.arrayGetLength() == 4) { + Object obj3, obj4, obj5; + obj1.arrayGet(0, &obj2); + obj1.arrayGet(1, &obj3); + obj1.arrayGet(2, &obj4); + obj1.arrayGet(3, &obj5); + if (obj2.isNum() && obj3.isNum() && obj4.isNum() && obj5.isNum()) + { + hasBBox = gTrue; + xMin = obj2.getNum(); + yMin = obj3.getNum(); + xMax = obj4.getNum(); + yMax = obj5.getNum(); + } else { + error(-1, "Bad BBox in shading dictionary (Values not numbers)"); + } + obj2.free(); + obj3.free(); + obj4.free(); + obj5.free(); + } else { + error(-1, "Bad BBox in shading dictionary"); + } + } + obj1.free(); + + return gTrue; +} + +//------------------------------------------------------------------------ +// GfxFunctionShading +//------------------------------------------------------------------------ + +GfxFunctionShading::GfxFunctionShading(double x0A, double y0A, + double x1A, double y1A, + double *matrixA, + Function **funcsA, int nFuncsA): + GfxShading(1) +{ + int i; + + x0 = x0A; + y0 = y0A; + x1 = x1A; + y1 = y1A; + for (i = 0; i < 6; ++i) { + matrix[i] = matrixA[i]; + } + nFuncs = nFuncsA; + for (i = 0; i < nFuncs; ++i) { + funcs[i] = funcsA[i]; + } +} + +GfxFunctionShading::GfxFunctionShading(GfxFunctionShading *shading): + GfxShading(shading) +{ + int i; + + x0 = shading->x0; + y0 = shading->y0; + x1 = shading->x1; + y1 = shading->y1; + for (i = 0; i < 6; ++i) { + matrix[i] = shading->matrix[i]; + } + nFuncs = shading->nFuncs; + for (i = 0; i < nFuncs; ++i) { + funcs[i] = shading->funcs[i]->copy(); + } +} + +GfxFunctionShading::~GfxFunctionShading() { + int i; + + for (i = 0; i < nFuncs; ++i) { + delete funcs[i]; + } +} + +GfxFunctionShading *GfxFunctionShading::parse(Dict *dict, Gfx *gfx) { + GfxFunctionShading *shading; + double x0A, y0A, x1A, y1A; + double matrixA[6]; + Function *funcsA[gfxColorMaxComps]; + int nFuncsA; + Object obj1, obj2; + int i; + + x0A = y0A = 0; + x1A = y1A = 1; + if (dict->lookup("Domain", &obj1)->isArray() && + obj1.arrayGetLength() == 4) { + x0A = obj1.arrayGet(0, &obj2)->getNum(); + obj2.free(); + x1A = obj1.arrayGet(1, &obj2)->getNum(); + obj2.free(); + y0A = obj1.arrayGet(2, &obj2)->getNum(); + obj2.free(); + y1A = obj1.arrayGet(3, &obj2)->getNum(); + obj2.free(); + } + obj1.free(); + + matrixA[0] = 1; matrixA[1] = 0; + matrixA[2] = 0; matrixA[3] = 1; + matrixA[4] = 0; matrixA[5] = 0; + if (dict->lookup("Matrix", &obj1)->isArray() && + obj1.arrayGetLength() == 6) { + matrixA[0] = obj1.arrayGet(0, &obj2)->getNum(); + obj2.free(); + matrixA[1] = obj1.arrayGet(1, &obj2)->getNum(); + obj2.free(); + matrixA[2] = obj1.arrayGet(2, &obj2)->getNum(); + obj2.free(); + matrixA[3] = obj1.arrayGet(3, &obj2)->getNum(); + obj2.free(); + matrixA[4] = obj1.arrayGet(4, &obj2)->getNum(); + obj2.free(); + matrixA[5] = obj1.arrayGet(5, &obj2)->getNum(); + obj2.free(); + } + obj1.free(); + + dict->lookup("Function", &obj1); + if (obj1.isArray()) { + nFuncsA = obj1.arrayGetLength(); + if (nFuncsA > gfxColorMaxComps) { + error(-1, "Invalid Function array in shading dictionary"); + goto err1; + } + for (i = 0; i < nFuncsA; ++i) { + obj1.arrayGet(i, &obj2); + if (!(funcsA[i] = Function::parse(&obj2))) { + goto err2; + } + obj2.free(); + } + } else { + nFuncsA = 1; + if (!(funcsA[0] = Function::parse(&obj1))) { + goto err1; + } + } + obj1.free(); + + shading = new GfxFunctionShading(x0A, y0A, x1A, y1A, matrixA, + funcsA, nFuncsA); + if (!shading->init(dict, gfx)) { + delete shading; + return NULL; + } + return shading; + + err2: + obj2.free(); + err1: + obj1.free(); + return NULL; +} + +GfxShading *GfxFunctionShading::copy() { + return new GfxFunctionShading(this); +} + +void GfxFunctionShading::getColor(double x, double y, GfxColor *color) { + double in[2], out[gfxColorMaxComps]; + int i; + + // NB: there can be one function with n outputs or n functions with + // one output each (where n = number of color components) + for (i = 0; i < gfxColorMaxComps; ++i) { + out[i] = 0; + } + in[0] = x; + in[1] = y; + for (i = 0; i < nFuncs; ++i) { + funcs[i]->transform(in, &out[i]); + } + for (i = 0; i < gfxColorMaxComps; ++i) { + color->c[i] = dblToCol(out[i]); + } +} + +//------------------------------------------------------------------------ +// GfxUnivariateShading +//------------------------------------------------------------------------ + +GfxUnivariateShading::GfxUnivariateShading(int typeA, + double t0A, double t1A, + Function **funcsA, int nFuncsA, + GBool extend0A, GBool extend1A): + GfxShading(typeA) +{ + int i; + + t0 = t0A; + t1 = t1A; + nFuncs = nFuncsA; + for (i = 0; i < nFuncs; ++i) { + funcs[i] = funcsA[i]; + } + extend0 = extend0A; + extend1 = extend1A; + + cacheSize = 0; + lastMatch = 0; + cacheBounds = NULL; + cacheCoeff = NULL; + cacheValues = NULL; +} + +GfxUnivariateShading::GfxUnivariateShading(GfxUnivariateShading *shading): + GfxShading(shading) +{ + int i; + + t0 = shading->t0; + t1 = shading->t1; + nFuncs = shading->nFuncs; + for (i = 0; i < nFuncs; ++i) { + funcs[i] = shading->funcs[i]->copy(); + } + extend0 = shading->extend0; + extend1 = shading->extend1; + + cacheSize = 0; + lastMatch = 0; + cacheBounds = NULL; + cacheCoeff = NULL; + cacheValues = NULL; +} + +GfxUnivariateShading::~GfxUnivariateShading() { + int i; + + for (i = 0; i < nFuncs; ++i) { + delete funcs[i]; + } + + gfree (cacheBounds); +} + +void GfxUnivariateShading::getColor(double t, GfxColor *color) { + double out[gfxColorMaxComps]; + int i, nComps; + + // NB: there can be one function with n outputs or n functions with + // one output each (where n = number of color components) + nComps = nFuncs * funcs[0]->getOutputSize(); + + if (cacheSize > 0) { + double x, ix, *l, *u, *upper; + + if (cacheBounds[lastMatch - 1] >= t) { + upper = std::lower_bound (cacheBounds, cacheBounds + lastMatch - 1, t); + lastMatch = upper - cacheBounds; + lastMatch = std::min<int>(std::max<int>(1, lastMatch), cacheSize - 1); + } else if (cacheBounds[lastMatch] < t) { + upper = std::lower_bound (cacheBounds + lastMatch + 1, cacheBounds + cacheSize, t); + lastMatch = upper - cacheBounds; + lastMatch = std::min<int>(std::max<int>(1, lastMatch), cacheSize - 1); + } + + x = (t - cacheBounds[lastMatch-1]) * cacheCoeff[lastMatch]; + ix = 1.0 - x; + u = cacheValues + lastMatch * nComps; + l = u - nComps; + + for (i = 0; i < nComps; ++i) { + out[i] = ix * l[i] + x * u[i]; + } + } else { + for (i = 0; i < nComps; ++i) { + out[i] = 0; + } + for (i = 0; i < nFuncs; ++i) { + funcs[i]->transform(&t, &out[i]); + } + } + + for (i = 0; i < nComps; ++i) { + color->c[i] = dblToCol(out[i]); + } +} + +void GfxUnivariateShading::setupCache(const Matrix *ctm, + double xMin, double yMin, + double xMax, double yMax) { + double sMin, sMax, tMin, tMax, upperBound; + int i, j, nComps, maxSize; + + gfree (cacheBounds); + cacheBounds = NULL; + cacheSize = 0; + + // NB: there can be one function with n outputs or n functions with + // one output each (where n = number of color components) + nComps = nFuncs * funcs[0]->getOutputSize(); + + getParameterRange(&sMin, &sMax, xMin, yMin, xMax, yMax); + upperBound = ctm->norm() * getDistance(sMin, sMax); + maxSize = (int)ceil(upperBound); + maxSize = std::max<int>(maxSize, 2); + + { + double x[4], y[4]; + + ctm->transform(xMin, yMin, &x[0], &y[0]); + ctm->transform(xMax, yMin, &x[1], &y[1]); + ctm->transform(xMin, yMax, &x[2], &y[2]); + ctm->transform(xMax, yMax, &x[3], &y[3]); + + xMin = xMax = x[0]; + yMin = yMax = y[0]; + for (i = 1; i < 4; i++) { + xMin = std::min<double>(xMin, x[i]); + yMin = std::min<double>(yMin, y[i]); + xMax = std::max<double>(xMax, x[i]); + yMax = std::max<double>(yMax, y[i]); + } + } + + if (maxSize > (xMax-xMin) * (yMax-yMin)) { + return; + } + + if (t0 < t1) { + tMin = t0 + sMin * (t1 - t0); + tMax = t0 + sMax * (t1 - t0); + } else { + tMin = t0 + sMax * (t1 - t0); + tMax = t0 + sMin * (t1 - t0); + } + + cacheBounds = (double *)gmallocn(maxSize, sizeof(double) * (nComps + 2)); + cacheCoeff = cacheBounds + maxSize; + cacheValues = cacheCoeff + maxSize; + + if (cacheSize != 0) { + for (j = 0; j < cacheSize; ++j) { + cacheCoeff[j] = 1 / (cacheBounds[j+1] - cacheBounds[j]); + } + } else if (tMax != tMin) { + double step = (tMax - tMin) / (maxSize - 1); + double coeff = (maxSize - 1) / (tMax - tMin); + + cacheSize = maxSize; + + for (j = 0; j < cacheSize; ++j) { + cacheBounds[j] = tMin + j * step; + cacheCoeff[j] = coeff; + + for (i = 0; i < nComps; ++i) { + cacheValues[j*nComps + i] = 0; + } + for (i = 0; i < nFuncs; ++i) { + funcs[i]->transform(&cacheBounds[j], &cacheValues[j*nComps + i]); + } + } + } + + lastMatch = 1; +} + + +//------------------------------------------------------------------------ +// GfxAxialShading +//------------------------------------------------------------------------ + +GfxAxialShading::GfxAxialShading(double x0A, double y0A, + double x1A, double y1A, + double t0A, double t1A, + Function **funcsA, int nFuncsA, + GBool extend0A, GBool extend1A): + GfxUnivariateShading(2, t0A, t1A, funcsA, nFuncsA, extend0A, extend1A) +{ + x0 = x0A; + y0 = y0A; + x1 = x1A; + y1 = y1A; +} + +GfxAxialShading::GfxAxialShading(GfxAxialShading *shading): + GfxUnivariateShading(shading) +{ + x0 = shading->x0; + y0 = shading->y0; + x1 = shading->x1; + y1 = shading->y1; +} + +GfxAxialShading::~GfxAxialShading() { +} + +GfxAxialShading *GfxAxialShading::parse(Dict *dict, Gfx *gfx) { + GfxAxialShading *shading; + double x0A, y0A, x1A, y1A; + double t0A, t1A; + Function *funcsA[gfxColorMaxComps]; + int nFuncsA; + GBool extend0A, extend1A; + Object obj1, obj2; + int i; + + x0A = y0A = x1A = y1A = 0; + if (dict->lookup("Coords", &obj1)->isArray() && + obj1.arrayGetLength() == 4) { + Object obj3, obj4, obj5; + obj1.arrayGet(0, &obj2); + obj1.arrayGet(1, &obj3); + obj1.arrayGet(2, &obj4); + obj1.arrayGet(3, &obj5); + if (obj2.isNum() && obj3.isNum() && obj4.isNum() && obj5.isNum()) { + x0A = obj2.getNum(); + y0A = obj3.getNum(); + x1A = obj4.getNum(); + y1A = obj5.getNum(); + } + obj2.free(); + obj3.free(); + obj4.free(); + obj5.free(); + } else { + error(-1, "Missing or invalid Coords in shading dictionary"); + goto err1; + } + obj1.free(); + + t0A = 0; + t1A = 1; + if (dict->lookup("Domain", &obj1)->isArray() && + obj1.arrayGetLength() == 2) { + Object obj3; + obj1.arrayGet(0, &obj2); + obj1.arrayGet(1, &obj3); + if (obj2.isNum() && obj3.isNum()) { + t0A = obj2.getNum(); + t1A = obj3.getNum(); + } + obj2.free(); + obj3.free(); + } + obj1.free(); + + dict->lookup("Function", &obj1); + if (obj1.isArray()) { + nFuncsA = obj1.arrayGetLength(); + if (nFuncsA > gfxColorMaxComps) { + error(-1, "Invalid Function array in shading dictionary"); + goto err1; + } + for (i = 0; i < nFuncsA; ++i) { + obj1.arrayGet(i, &obj2); + if (!(funcsA[i] = Function::parse(&obj2))) { + obj1.free(); + obj2.free(); + goto err1; + } + obj2.free(); + } + } else { + nFuncsA = 1; + if (!(funcsA[0] = Function::parse(&obj1))) { + obj1.free(); + goto err1; + } + } + obj1.free(); + + extend0A = extend1A = gFalse; + if (dict->lookup("Extend", &obj1)->isArray() && + obj1.arrayGetLength() == 2) { + extend0A = obj1.arrayGet(0, &obj2)->getBool(); + obj2.free(); + extend1A = obj1.arrayGet(1, &obj2)->getBool(); + obj2.free(); + } + obj1.free(); + + shading = new GfxAxialShading(x0A, y0A, x1A, y1A, t0A, t1A, + funcsA, nFuncsA, extend0A, extend1A); + if (!shading->init(dict, gfx)) { + delete shading; + return NULL; + } + return shading; + + err1: + return NULL; +} + +GfxShading *GfxAxialShading::copy() { + return new GfxAxialShading(this); +} + +double GfxAxialShading::getDistance(double sMin, double sMax) { + double xMin, yMin, xMax, yMax; + + xMin = x0 + sMin * (x1 - x0); + yMin = y0 + sMin * (y1 - y0); + xMax = x0 + sMax * (x1 - x0); + yMax = y0 + sMax * (y1 - y0); + + return hypot(xMax-xMin, yMax-yMin); +} + +void GfxAxialShading::getParameterRange(double *lower, double *upper, + double xMin, double yMin, + double xMax, double yMax) { + double pdx, pdy, invsqnorm, tdx, tdy, t, range[2]; + + // Linear gradients are orthogonal to the line passing through their + // extremes. Because of convexity, the parameter range can be + // computed as the convex hull (one the real line) of the parameter + // values of the 4 corners of the box. + // + // The parameter value t for a point (x,y) can be computed as: + // + // t = (p2 - p1) . (x,y) / |p2 - p1|^2 + // + // t0 is the t value for the top left corner + // tdx is the difference between left and right corners + // tdy is the difference between top and bottom corners + + pdx = x1 - x0; + pdy = y1 - y0; + invsqnorm = 1.0 / (pdx * pdx + pdy * pdy); + pdx *= invsqnorm; + pdy *= invsqnorm; + + t = (xMin - x0) * pdx + (yMin - y0) * pdy; + tdx = (xMax - xMin) * pdx; + tdy = (yMax - yMin) * pdy; + + // Because of the linearity of the t value, tdx can simply be added + // the t0 to move along the top edge. After this, *lower and *upper + // represent the parameter range for the top edge, so extending it + // to include the whole box simply requires adding tdy to the + // correct extreme. + + range[0] = range[1] = t; + if (tdx < 0) + range[0] += tdx; + else + range[1] += tdx; + + if (tdy < 0) + range[0] += tdy; + else + range[1] += tdy; + + *lower = std::max<double>(0., std::min<double>(1., range[0])); + *upper = std::max<double>(0., std::min<double>(1., range[1])); +} + +//------------------------------------------------------------------------ +// GfxRadialShading +//------------------------------------------------------------------------ + +#ifndef RADIAL_EPSILON +#define RADIAL_EPSILON (1. / 1024 / 1024) +#endif + +GfxRadialShading::GfxRadialShading(double x0A, double y0A, double r0A, + double x1A, double y1A, double r1A, + double t0A, double t1A, + Function **funcsA, int nFuncsA, + GBool extend0A, GBool extend1A): + GfxUnivariateShading(3, t0A, t1A, funcsA, nFuncsA, extend0A, extend1A) +{ + x0 = x0A; + y0 = y0A; + r0 = r0A; + x1 = x1A; + y1 = y1A; + r1 = r1A; +} + +GfxRadialShading::GfxRadialShading(GfxRadialShading *shading): + GfxUnivariateShading(shading) +{ + x0 = shading->x0; + y0 = shading->y0; + r0 = shading->r0; + x1 = shading->x1; + y1 = shading->y1; + r1 = shading->r1; +} + +GfxRadialShading::~GfxRadialShading() { +} + +GfxRadialShading *GfxRadialShading::parse(Dict *dict, Gfx *gfx) { + GfxRadialShading *shading; + double x0A, y0A, r0A, x1A, y1A, r1A; + double t0A, t1A; + Function *funcsA[gfxColorMaxComps]; + int nFuncsA; + GBool extend0A, extend1A; + Object obj1, obj2; + int i; + + x0A = y0A = r0A = x1A = y1A = r1A = 0; + if (dict->lookup("Coords", &obj1)->isArray() && + obj1.arrayGetLength() == 6) { + x0A = obj1.arrayGet(0, &obj2)->getNum(); + obj2.free(); + y0A = obj1.arrayGet(1, &obj2)->getNum(); + obj2.free(); + r0A = obj1.arrayGet(2, &obj2)->getNum(); + obj2.free(); + x1A = obj1.arrayGet(3, &obj2)->getNum(); + obj2.free(); + y1A = obj1.arrayGet(4, &obj2)->getNum(); + obj2.free(); + r1A = obj1.arrayGet(5, &obj2)->getNum(); + obj2.free(); + } else { + error(-1, "Missing or invalid Coords in shading dictionary"); + goto err1; + } + obj1.free(); + + t0A = 0; + t1A = 1; + if (dict->lookup("Domain", &obj1)->isArray() && + obj1.arrayGetLength() == 2) { + t0A = obj1.arrayGet(0, &obj2)->getNum(); + obj2.free(); + t1A = obj1.arrayGet(1, &obj2)->getNum(); + obj2.free(); + } + obj1.free(); + + dict->lookup("Function", &obj1); + if (obj1.isArray()) { + nFuncsA = obj1.arrayGetLength(); + if (nFuncsA > gfxColorMaxComps) { + error(-1, "Invalid Function array in shading dictionary"); + goto err1; + } + for (i = 0; i < nFuncsA; ++i) { + obj1.arrayGet(i, &obj2); + if (!(funcsA[i] = Function::parse(&obj2))) { + obj1.free(); + obj2.free(); + goto err1; + } + obj2.free(); + } + } else { + nFuncsA = 1; + if (!(funcsA[0] = Function::parse(&obj1))) { + obj1.free(); + goto err1; + } + } + obj1.free(); + + extend0A = extend1A = gFalse; + if (dict->lookup("Extend", &obj1)->isArray() && + obj1.arrayGetLength() == 2) { + extend0A = obj1.arrayGet(0, &obj2)->getBool(); + obj2.free(); + extend1A = obj1.arrayGet(1, &obj2)->getBool(); + obj2.free(); + } + obj1.free(); + + shading = new GfxRadialShading(x0A, y0A, r0A, x1A, y1A, r1A, t0A, t1A, + funcsA, nFuncsA, extend0A, extend1A); + if (!shading->init(dict, gfx)) { + delete shading; + return NULL; + } + return shading; + + err1: + return NULL; +} + +GfxShading *GfxRadialShading::copy() { + return new GfxRadialShading(this); +} + +double GfxRadialShading::getDistance(double sMin, double sMax) { + double xMin, yMin, rMin, xMax, yMax, rMax; + + xMin = x0 + sMin * (x1 - x0); + yMin = y0 + sMin * (y1 - y0); + rMin = r0 + sMin * (r1 - r0); + + xMax = x0 + sMax * (x1 - x0); + yMax = y0 + sMax * (y1 - y0); + rMax = r0 + sMax * (r1 - r0); + + return hypot(xMax-xMin, yMax-yMin) + fabs(rMax-rMin); +} + +// extend range, adapted from cairo, radialExtendRange +static GBool +radialExtendRange (double range[2], double value, GBool valid) +{ + if (!valid) + range[0] = range[1] = value; + else if (value < range[0]) + range[0] = value; + else if (value > range[1]) + range[1] = value; + + return gTrue; +} + +inline void radialEdge(double num, double den, double delta, double lower, double upper, + double dr, double mindr, GBool &valid, double *range) +{ + if (fabs (den) >= RADIAL_EPSILON) { + double t_edge, v; + t_edge = (num) / (den); + v = t_edge * (delta); + if (t_edge * dr >= mindr && (lower) <= v && v <= (upper)) + valid = radialExtendRange (range, t_edge, valid); + } +} + +inline void radialCorner1(double x, double y, double &b, double dx, double dy, double cr, + double dr, double mindr, GBool &valid, double *range) +{ + b = (x) * dx + (y) * dy + cr * dr; + if (fabs (b) >= RADIAL_EPSILON) { + double t_corner; + double x2 = (x) * (x); + double y2 = (y) * (y); + double cr2 = (cr) * (cr); + double c = x2 + y2 - cr2; + + t_corner = 0.5 * c / b; + if (t_corner * dr >= mindr) + valid = radialExtendRange (range, t_corner, valid); + } +} + +inline void radialCorner2(double x, double y, double a, double &b, double &c, double &d, double dx, double dy, double cr, + double inva, double dr, double mindr, GBool &valid, double *range) +{ + b = (x) * dx + (y) * dy + cr * dr; + c = (x) * (x) + (y) * (y) - cr * cr; + d = b * b - a * c; + if (d >= 0) { + double t_corner; + + d = sqrt (d); + t_corner = (b + d) * inva; + if (t_corner * dr >= mindr) + valid = radialExtendRange (range, t_corner, valid); + t_corner = (b - d) * inva; + if (t_corner * dr >= mindr) + valid = radialExtendRange (range, t_corner, valid); + } +} +void GfxRadialShading::getParameterRange(double *lower, double *upper, + double xMin, double yMin, + double xMax, double yMax) { + double cx, cy, cr, dx, dy, dr; + double a, x_focus, y_focus; + double mindr, minx, miny, maxx, maxy; + double range[2]; + GBool valid; + + // A radial pattern is considered degenerate if it can be + // represented as a solid or clear pattern. This corresponds to one + // of the two cases: + // + // 1) The radii are both very small: + // |dr| < FLT_EPSILON && min (r0, r1) < FLT_EPSILON + // + // 2) The two circles have about the same radius and are very + // close to each other (approximately a cylinder gradient that + // doesn't move with the parameter): + // |dr| < FLT_EPSILON && max (|dx|, |dy|) < 2 * FLT_EPSILON + + if (xMin >= xMax || yMin >=yMax || + (fabs (r0 - r1) < RADIAL_EPSILON && + (std::min<double>(r0, r1) < RADIAL_EPSILON || + std::max<double>(fabs (x0 - x1), fabs (y0 - y1)) < 2 * RADIAL_EPSILON))) { + *lower = *upper = 0; + return; + } + + range[0] = range[1] = 0; + valid = gFalse; + + x_focus = y_focus = 0; // silence gcc + + cx = x0; + cy = y0; + cr = r0; + dx = x1 - cx; + dy = y1 - cy; + dr = r1 - cr; + + // translate by -(cx, cy) to simplify computations + xMin -= cx; + yMin -= cy; + xMax -= cx; + yMax -= cy; + + // enlarge boundaries slightly to avoid rounding problems in the + // parameter range computation + xMin -= RADIAL_EPSILON; + yMin -= RADIAL_EPSILON; + xMax += RADIAL_EPSILON; + yMax += RADIAL_EPSILON; + + // enlarge boundaries even more to avoid rounding problems when + // testing if a point belongs to the box + minx = xMin - RADIAL_EPSILON; + miny = yMin - RADIAL_EPSILON; + maxx = xMax + RADIAL_EPSILON; + maxy = yMax + RADIAL_EPSILON; + + // we dont' allow negative radiuses, so we will be checking that + // t*dr >= mindr to consider t valid + mindr = -(cr + RADIAL_EPSILON); + + // After the previous transformations, the start circle is centered + // in the origin and has radius cr. A 1-unit change in the t + // parameter corresponds to dx,dy,dr changes in the x,y,r of the + // circle (center coordinates, radius). + // + // To compute the minimum range needed to correctly draw the + // pattern, we start with an empty range and extend it to include + // the circles touching the bounding box or within it. + + // Focus, the point where the circle has radius == 0. + // + // r = cr + t * dr = 0 + // t = -cr / dr + // + // If the radius is constant (dr == 0) there is no focus (the + // gradient represents a cylinder instead of a cone). + if (fabs (dr) >= RADIAL_EPSILON) { + double t_focus; + + t_focus = -cr / dr; + x_focus = t_focus * dx; + y_focus = t_focus * dy; + if (minx <= x_focus && x_focus <= maxx && + miny <= y_focus && y_focus <= maxy) + { + valid = radialExtendRange (range, t_focus, valid); + } + } + + // Circles externally tangent to box edges. + // + // All circles have center in (dx, dy) * t + // + // If the circle is tangent to the line defined by the edge of the + // box, then at least one of the following holds true: + // + // (dx*t) + (cr + dr*t) == x0 (left edge) + // (dx*t) - (cr + dr*t) == x1 (right edge) + // (dy*t) + (cr + dr*t) == y0 (top edge) + // (dy*t) - (cr + dr*t) == y1 (bottom edge) + // + // The solution is only valid if the tangent point is actually on + // the edge, i.e. if its y coordinate is in [y0,y1] for left/right + // edges and if its x coordinate is in [x0,x1] for top/bottom edges. + // + // For the first equation: + // + // (dx + dr) * t = x0 - cr + // t = (x0 - cr) / (dx + dr) + // y = dy * t + // + // in the code this becomes: + // + // t_edge = (num) / (den) + // v = (delta) * t_edge + // + // If the denominator in t is 0, the pattern is tangent to a line + // parallel to the edge under examination. The corner-case where the + // boundary line is the same as the edge is handled by the focus + // point case and/or by the a==0 case. + + // circles tangent (externally) to left/right/top/bottom edge + radialEdge(xMin - cr, dx + dr, dy, miny, maxy, dr, mindr, valid, range); + radialEdge(xMax + cr, dx - dr, dy, miny, maxy, dr, mindr, valid, range); + radialEdge(yMin - cr, dy + dr, dx, minx, maxx, dr, mindr, valid, range); + radialEdge(yMax + cr, dy - dr, dx, minx, maxx, dr, mindr, valid, range); + + // Circles passing through a corner. + // + // A circle passing through the point (x,y) satisfies: + // + // (x-t*dx)^2 + (y-t*dy)^2 == (cr + t*dr)^2 + // + // If we set: + // a = dx^2 + dy^2 - dr^2 + // b = x*dx + y*dy + cr*dr + // c = x^2 + y^2 - cr^2 + // we have: + // a*t^2 - 2*b*t + c == 0 + + a = dx * dx + dy * dy - dr * dr; + if (fabs (a) < RADIAL_EPSILON * RADIAL_EPSILON) { + double b; + + // Ensure that gradients with both a and dr small are + // considered degenerate. + // The floating point version of the degeneracy test implemented + // in _radial_pattern_is_degenerate() is: + // + // 1) The circles are practically the same size: + // |dr| < RADIAL_EPSILON + // AND + // 2a) The circles are both very small: + // min (r0, r1) < RADIAL_EPSILON + // OR + // 2b) The circles are very close to each other: + // max (|dx|, |dy|) < 2 * RADIAL_EPSILON + // + // Assuming that the gradient is not degenerate, we want to + // show that |a| < RADIAL_EPSILON^2 implies |dr| >= RADIAL_EPSILON. + // + // If the gradient is not degenerate yet it has |dr| < + // RADIAL_EPSILON, (2b) is false, thus: + // + // max (|dx|, |dy|) >= 2*RADIAL_EPSILON + // which implies: + // 4*RADIAL_EPSILON^2 <= max (|dx|, |dy|)^2 <= dx^2 + dy^2 + // + // From the definition of a, we get: + // a = dx^2 + dy^2 - dr^2 < RADIAL_EPSILON^2 + // dx^2 + dy^2 - RADIAL_EPSILON^2 < dr^2 + // 3*RADIAL_EPSILON^2 < dr^2 + // + // which is inconsistent with the hypotheses, thus |dr| < + // RADIAL_EPSILON is false or the gradient is degenerate. + + assert (fabs (dr) >= RADIAL_EPSILON); + + // If a == 0, all the circles are tangent to a line in the + // focus point. If this line is within the box extents, we + // should add the circle with infinite radius, but this would + // make the range unbounded. We will be limiting the range to + // [0,1] anyway, so we simply add the biggest legitimate + // circle (it happens for 0 or for 1). + if (dr < 0) { + valid = radialExtendRange (range, 0, valid); + } else { + valid = radialExtendRange (range, 1, valid); + } + + // Nondegenerate, nonlimit circles passing through the corners. + // + // a == 0 && a*t^2 - 2*b*t + c == 0 + // + // t = c / (2*b) + // + // The b == 0 case has just been handled, so we only have to + // compute this if b != 0. + + // circles touching each corner + radialCorner1(xMin, yMin, b, dx, dy, cr, dr, mindr, valid, range); + radialCorner1(xMin, yMax, b, dx, dy, cr, dr, mindr, valid, range); + radialCorner1(xMax, yMin, b, dx, dy, cr, dr, mindr, valid, range); + radialCorner1(xMax, yMax, b, dx, dy, cr, dr, mindr, valid, range); + } else { + double inva, b, c, d; + + inva = 1 / a; + + // Nondegenerate, nonlimit circles passing through the corners. + // + // a != 0 && a*t^2 - 2*b*t + c == 0 + // + // t = (b +- sqrt (b*b - a*c)) / a + // + // If the argument of sqrt() is negative, then no circle + // passes through the corner. + + // circles touching each corner + radialCorner2(xMin, yMin, a, b, c, d, dx, dy, cr, inva, dr, mindr, valid, range); + radialCorner2(xMin, yMax, a, b, c, d, dx, dy, cr, inva, dr, mindr, valid, range); + radialCorner2(xMax, yMin, a, b, c, d, dx, dy, cr, inva, dr, mindr, valid, range); + radialCorner2(xMax, yMax, a, b, c, d, dx, dy, cr, inva, dr, mindr, valid, range); + } + + *lower = std::max<double>(0., std::min<double>(1., range[0])); + *upper = std::max<double>(0., std::min<double>(1., range[1])); +} + +//------------------------------------------------------------------------ +// GfxShadingBitBuf +//------------------------------------------------------------------------ + +class GfxShadingBitBuf { +public: + + GfxShadingBitBuf(Stream *strA); + ~GfxShadingBitBuf(); + GBool getBits(int n, Guint *val); + void flushBits(); + +private: + + Stream *str; + int bitBuf; + int nBits; +}; + +GfxShadingBitBuf::GfxShadingBitBuf(Stream *strA) { + str = strA; + str->reset(); + bitBuf = 0; + nBits = 0; +} + +GfxShadingBitBuf::~GfxShadingBitBuf() { + str->close(); +} + +GBool GfxShadingBitBuf::getBits(int n, Guint *val) { + int x; + + if (nBits >= n) { + x = (bitBuf >> (nBits - n)) & ((1 << n) - 1); + nBits -= n; + } else { + x = 0; + if (nBits > 0) { + x = bitBuf & ((1 << nBits) - 1); + n -= nBits; + nBits = 0; + } + while (n > 0) { + if ((bitBuf = str->getChar()) == EOF) { + nBits = 0; + return gFalse; + } + if (n >= 8) { + x = (x << 8) | bitBuf; + n -= 8; + } else { + x = (x << n) | (bitBuf >> (8 - n)); + nBits = 8 - n; + n = 0; + } + } + } + *val = x; + return gTrue; +} + +void GfxShadingBitBuf::flushBits() { + bitBuf = 0; + nBits = 0; +} + +//------------------------------------------------------------------------ +// GfxGouraudTriangleShading +//------------------------------------------------------------------------ + +GfxGouraudTriangleShading::GfxGouraudTriangleShading( + int typeA, + GfxGouraudVertex *verticesA, int nVerticesA, + int (*trianglesA)[3], int nTrianglesA, + Function **funcsA, int nFuncsA): + GfxShading(typeA) +{ + int i; + + vertices = verticesA; + nVertices = nVerticesA; + triangles = trianglesA; + nTriangles = nTrianglesA; + nFuncs = nFuncsA; + for (i = 0; i < nFuncs; ++i) { + funcs[i] = funcsA[i]; + } +} + +GfxGouraudTriangleShading::GfxGouraudTriangleShading( + GfxGouraudTriangleShading *shading): + GfxShading(shading) +{ + int i; + + nVertices = shading->nVertices; + vertices = (GfxGouraudVertex *)gmallocn(nVertices, sizeof(GfxGouraudVertex)); + memcpy(vertices, shading->vertices, nVertices * sizeof(GfxGouraudVertex)); + nTriangles = shading->nTriangles; + triangles = (int (*)[3])gmallocn(nTriangles * 3, sizeof(int)); + memcpy(triangles, shading->triangles, nTriangles * 3 * sizeof(int)); + nFuncs = shading->nFuncs; + for (i = 0; i < nFuncs; ++i) { + funcs[i] = shading->funcs[i]->copy(); + } +} + +GfxGouraudTriangleShading::~GfxGouraudTriangleShading() { + int i; + + gfree(vertices); + gfree(triangles); + for (i = 0; i < nFuncs; ++i) { + delete funcs[i]; + } +} + +GfxGouraudTriangleShading *GfxGouraudTriangleShading::parse(int typeA, + Dict *dict, + Stream *str, + Gfx *gfx) { + GfxGouraudTriangleShading *shading; + Function *funcsA[gfxColorMaxComps]; + int nFuncsA; + int coordBits, compBits, flagBits, vertsPerRow, nRows; + double xMin, xMax, yMin, yMax; + double cMin[gfxColorMaxComps], cMax[gfxColorMaxComps]; + double xMul, yMul; + double cMul[gfxColorMaxComps]; + GfxGouraudVertex *verticesA; + int (*trianglesA)[3]; + int nComps, nVerticesA, nTrianglesA, vertSize, triSize; + Guint x, y, flag; + Guint c[gfxColorMaxComps]; + GfxShadingBitBuf *bitBuf; + Object obj1, obj2; + int i, j, k, state; + + if (dict->lookup("BitsPerCoordinate", &obj1)->isInt()) { + coordBits = obj1.getInt(); + } else { + error(-1, "Missing or invalid BitsPerCoordinate in shading dictionary"); + goto err2; + } + obj1.free(); + if (dict->lookup("BitsPerComponent", &obj1)->isInt()) { + compBits = obj1.getInt(); + } else { + error(-1, "Missing or invalid BitsPerComponent in shading dictionary"); + goto err2; + } + obj1.free(); + flagBits = vertsPerRow = 0; // make gcc happy + if (typeA == 4) { + if (dict->lookup("BitsPerFlag", &obj1)->isInt()) { + flagBits = obj1.getInt(); + } else { + error(-1, "Missing or invalid BitsPerFlag in shading dictionary"); + goto err2; + } + obj1.free(); + } else { + if (dict->lookup("VerticesPerRow", &obj1)->isInt()) { + vertsPerRow = obj1.getInt(); + } else { + error(-1, "Missing or invalid VerticesPerRow in shading dictionary"); + goto err2; + } + obj1.free(); + } + if (dict->lookup("Decode", &obj1)->isArray() && + obj1.arrayGetLength() >= 6) { + xMin = obj1.arrayGet(0, &obj2)->getNum(); + obj2.free(); + xMax = obj1.arrayGet(1, &obj2)->getNum(); + obj2.free(); + xMul = (xMax - xMin) / (pow(2.0, coordBits) - 1); + yMin = obj1.arrayGet(2, &obj2)->getNum(); + obj2.free(); + yMax = obj1.arrayGet(3, &obj2)->getNum(); + obj2.free(); + yMul = (yMax - yMin) / (pow(2.0, coordBits) - 1); + for (i = 0; 5 + 2*i < obj1.arrayGetLength() && i < gfxColorMaxComps; ++i) { + cMin[i] = obj1.arrayGet(4 + 2*i, &obj2)->getNum(); + obj2.free(); + cMax[i] = obj1.arrayGet(5 + 2*i, &obj2)->getNum(); + obj2.free(); + cMul[i] = (cMax[i] - cMin[i]) / (double)((1 << compBits) - 1); + } + nComps = i; + } else { + error(-1, "Missing or invalid Decode array in shading dictionary"); + goto err2; + } + obj1.free(); + + if (!dict->lookup("Function", &obj1)->isNull()) { + if (obj1.isArray()) { + nFuncsA = obj1.arrayGetLength(); + if (nFuncsA > gfxColorMaxComps) { + error(-1, "Invalid Function array in shading dictionary"); + goto err1; + } + for (i = 0; i < nFuncsA; ++i) { + obj1.arrayGet(i, &obj2); + if (!(funcsA[i] = Function::parse(&obj2))) { + obj1.free(); + obj2.free(); + goto err1; + } + obj2.free(); + } + } else { + nFuncsA = 1; + if (!(funcsA[0] = Function::parse(&obj1))) { + obj1.free(); + goto err1; + } + } + } else { + nFuncsA = 0; + } + obj1.free(); + + nVerticesA = nTrianglesA = 0; + verticesA = NULL; + trianglesA = NULL; + vertSize = triSize = 0; + state = 0; + flag = 0; // make gcc happy + bitBuf = new GfxShadingBitBuf(str); + while (1) { + if (typeA == 4) { + if (!bitBuf->getBits(flagBits, &flag)) { + break; + } + } + if (!bitBuf->getBits(coordBits, &x) || + !bitBuf->getBits(coordBits, &y)) { + break; + } + for (i = 0; i < nComps; ++i) { + if (!bitBuf->getBits(compBits, &c[i])) { + break; + } + } + if (i < nComps) { + break; + } + if (nVerticesA == vertSize) { + int oldVertSize = vertSize; + vertSize = (vertSize == 0) ? 16 : 2 * vertSize; + verticesA = (GfxGouraudVertex *) + greallocn(verticesA, vertSize, sizeof(GfxGouraudVertex)); + memset(verticesA + oldVertSize, 0, (vertSize - oldVertSize) * sizeof(GfxGouraudVertex)); + } + verticesA[nVerticesA].x = xMin + xMul * (double)x; + verticesA[nVerticesA].y = yMin + yMul * (double)y; + for (i = 0; i < nComps; ++i) { + verticesA[nVerticesA].color.c[i] = + dblToCol(cMin[i] + cMul[i] * (double)c[i]); + } + ++nVerticesA; + bitBuf->flushBits(); + if (typeA == 4) { + if (state == 0 || state == 1) { + ++state; + } else if (state == 2 || flag > 0) { + if (nTrianglesA == triSize) { + triSize = (triSize == 0) ? 16 : 2 * triSize; + trianglesA = (int (*)[3]) + greallocn(trianglesA, triSize * 3, sizeof(int)); + } + if (state == 2) { + trianglesA[nTrianglesA][0] = nVerticesA - 3; + trianglesA[nTrianglesA][1] = nVerticesA - 2; + trianglesA[nTrianglesA][2] = nVerticesA - 1; + ++state; + } else if (flag == 1) { + trianglesA[nTrianglesA][0] = trianglesA[nTrianglesA - 1][1]; + trianglesA[nTrianglesA][1] = trianglesA[nTrianglesA - 1][2]; + trianglesA[nTrianglesA][2] = nVerticesA - 1; + } else { // flag == 2 + trianglesA[nTrianglesA][0] = trianglesA[nTrianglesA - 1][0]; + trianglesA[nTrianglesA][1] = trianglesA[nTrianglesA - 1][2]; + trianglesA[nTrianglesA][2] = nVerticesA - 1; + } + ++nTrianglesA; + } else { // state == 3 && flag == 0 + state = 1; + } + } + } + delete bitBuf; + if (typeA == 5) { + nRows = nVerticesA / vertsPerRow; + nTrianglesA = (nRows - 1) * 2 * (vertsPerRow - 1); + trianglesA = (int (*)[3])gmallocn(nTrianglesA * 3, sizeof(int)); + k = 0; + for (i = 0; i < nRows - 1; ++i) { + for (j = 0; j < vertsPerRow - 1; ++j) { + trianglesA[k][0] = i * vertsPerRow + j; + trianglesA[k][1] = i * vertsPerRow + j+1; + trianglesA[k][2] = (i+1) * vertsPerRow + j; + ++k; + trianglesA[k][0] = i * vertsPerRow + j+1; + trianglesA[k][1] = (i+1) * vertsPerRow + j; + trianglesA[k][2] = (i+1) * vertsPerRow + j+1; + ++k; + } + } + } + + shading = new GfxGouraudTriangleShading(typeA, verticesA, nVerticesA, + trianglesA, nTrianglesA, + funcsA, nFuncsA); + if (!shading->init(dict, gfx)) { + delete shading; + return NULL; + } + return shading; + + err2: + obj1.free(); + err1: + return NULL; +} + +GfxShading *GfxGouraudTriangleShading::copy() { + return new GfxGouraudTriangleShading(this); +} + +void GfxGouraudTriangleShading::getTriangle( + int i, + double *x0, double *y0, GfxColor *color0, + double *x1, double *y1, GfxColor *color1, + double *x2, double *y2, GfxColor *color2) { + double in; + double out[gfxColorMaxComps]; + int v, j; + + assert(!isParameterized()); + + v = triangles[i][0]; + *x0 = vertices[v].x; + *y0 = vertices[v].y; + if (nFuncs > 0) { + in = colToDbl(vertices[v].color.c[0]); + for (j = 0; j < nFuncs; ++j) { + funcs[j]->transform(&in, &out[j]); + } + for (j = 0; j < gfxColorMaxComps; ++j) { + color0->c[j] = dblToCol(out[j]); + } + } else { + *color0 = vertices[v].color; + } + v = triangles[i][1]; + *x1 = vertices[v].x; + *y1 = vertices[v].y; + if (nFuncs > 0) { + in = colToDbl(vertices[v].color.c[0]); + for (j = 0; j < nFuncs; ++j) { + funcs[j]->transform(&in, &out[j]); + } + for (j = 0; j < gfxColorMaxComps; ++j) { + color1->c[j] = dblToCol(out[j]); + } + } else { + *color1 = vertices[v].color; + } + v = triangles[i][2]; + *x2 = vertices[v].x; + *y2 = vertices[v].y; + if (nFuncs > 0) { + in = colToDbl(vertices[v].color.c[0]); + for (j = 0; j < nFuncs; ++j) { + funcs[j]->transform(&in, &out[j]); + } + for (j = 0; j < gfxColorMaxComps; ++j) { + color2->c[j] = dblToCol(out[j]); + } + } else { + *color2 = vertices[v].color; + } +} + +void GfxGouraudTriangleShading::getParameterizedColor(double t, GfxColor *color) { + double out[gfxColorMaxComps]; + + for (int j = 0; j < nFuncs; ++j) { + funcs[j]->transform(&t, &out[j]); + } + for (int j = 0; j < gfxColorMaxComps; ++j) { + color->c[j] = dblToCol(out[j]); + } +} + +void GfxGouraudTriangleShading::getTriangle(int i, + double *x0, double *y0, double *color0, + double *x1, double *y1, double *color1, + double *x2, double *y2, double *color2) { + int v; + + assert(isParameterized()); + + v = triangles[i][0]; + *x0 = vertices[v].x; + *y0 = vertices[v].y; + *color0 = colToDbl(vertices[v].color.c[0]); + v = triangles[i][1]; + *x1 = vertices[v].x; + *y1 = vertices[v].y; + *color1 = colToDbl(vertices[v].color.c[0]); + v = triangles[i][2]; + *x2 = vertices[v].x; + *y2 = vertices[v].y; + *color2 = colToDbl(vertices[v].color.c[0]); +} + +//------------------------------------------------------------------------ +// GfxPatchMeshShading +//------------------------------------------------------------------------ + +GfxPatchMeshShading::GfxPatchMeshShading(int typeA, + GfxPatch *patchesA, int nPatchesA, + Function **funcsA, int nFuncsA): + GfxShading(typeA) +{ + int i; + + patches = patchesA; + nPatches = nPatchesA; + nFuncs = nFuncsA; + for (i = 0; i < nFuncs; ++i) { + funcs[i] = funcsA[i]; + } +} + +GfxPatchMeshShading::GfxPatchMeshShading(GfxPatchMeshShading *shading): + GfxShading(shading) +{ + int i; + + nPatches = shading->nPatches; + patches = (GfxPatch *)gmallocn(nPatches, sizeof(GfxPatch)); + memcpy(patches, shading->patches, nPatches * sizeof(GfxPatch)); + nFuncs = shading->nFuncs; + for (i = 0; i < nFuncs; ++i) { + funcs[i] = shading->funcs[i]->copy(); + } +} + +GfxPatchMeshShading::~GfxPatchMeshShading() { + int i; + + gfree(patches); + for (i = 0; i < nFuncs; ++i) { + delete funcs[i]; + } +} + +GfxPatchMeshShading *GfxPatchMeshShading::parse(int typeA, Dict *dict, + Stream *str, Gfx *gfx) { + GfxPatchMeshShading *shading; + Function *funcsA[gfxColorMaxComps]; + int nFuncsA; + int coordBits, compBits, flagBits; + double xMin, xMax, yMin, yMax; + double cMin[gfxColorMaxComps], cMax[gfxColorMaxComps]; + double xMul, yMul; + double cMul[gfxColorMaxComps]; + GfxPatch *patchesA, *p; + int nComps, nPatchesA, patchesSize, nPts, nColors; + Guint flag; + double x[16], y[16]; + Guint xi, yi; + double c[4][gfxColorMaxComps]; + Guint ci[4]; + GfxShadingBitBuf *bitBuf; + Object obj1, obj2; + int i, j; + + if (dict->lookup("BitsPerCoordinate", &obj1)->isInt()) { + coordBits = obj1.getInt(); + } else { + error(-1, "Missing or invalid BitsPerCoordinate in shading dictionary"); + goto err2; + } + obj1.free(); + if (dict->lookup("BitsPerComponent", &obj1)->isInt()) { + compBits = obj1.getInt(); + } else { + error(-1, "Missing or invalid BitsPerComponent in shading dictionary"); + goto err2; + } + obj1.free(); + if (dict->lookup("BitsPerFlag", &obj1)->isInt()) { + flagBits = obj1.getInt(); + } else { + error(-1, "Missing or invalid BitsPerFlag in shading dictionary"); + goto err2; + } + obj1.free(); + if (dict->lookup("Decode", &obj1)->isArray() && + obj1.arrayGetLength() >= 6) { + xMin = obj1.arrayGet(0, &obj2)->getNum(); + obj2.free(); + xMax = obj1.arrayGet(1, &obj2)->getNum(); + obj2.free(); + xMul = (xMax - xMin) / (pow(2.0, coordBits) - 1); + yMin = obj1.arrayGet(2, &obj2)->getNum(); + obj2.free(); + yMax = obj1.arrayGet(3, &obj2)->getNum(); + obj2.free(); + yMul = (yMax - yMin) / (pow(2.0, coordBits) - 1); + for (i = 0; 5 + 2*i < obj1.arrayGetLength() && i < gfxColorMaxComps; ++i) { + cMin[i] = obj1.arrayGet(4 + 2*i, &obj2)->getNum(); + obj2.free(); + cMax[i] = obj1.arrayGet(5 + 2*i, &obj2)->getNum(); + obj2.free(); + cMul[i] = (cMax[i] - cMin[i]) / (double)((1 << compBits) - 1); + } + nComps = i; + } else { + error(-1, "Missing or invalid Decode array in shading dictionary"); + goto err2; + } + obj1.free(); + + if (!dict->lookup("Function", &obj1)->isNull()) { + if (obj1.isArray()) { + nFuncsA = obj1.arrayGetLength(); + if (nFuncsA > gfxColorMaxComps) { + error(-1, "Invalid Function array in shading dictionary"); + goto err1; + } + for (i = 0; i < nFuncsA; ++i) { + obj1.arrayGet(i, &obj2); + if (!(funcsA[i] = Function::parse(&obj2))) { + obj1.free(); + obj2.free(); + goto err1; + } + obj2.free(); + } + } else { + nFuncsA = 1; + if (!(funcsA[0] = Function::parse(&obj1))) { + obj1.free(); + goto err1; + } + } + } else { + nFuncsA = 0; + } + obj1.free(); + + nPatchesA = 0; + patchesA = NULL; + patchesSize = 0; + bitBuf = new GfxShadingBitBuf(str); + while (1) { + if (!bitBuf->getBits(flagBits, &flag)) { + break; + } + if (typeA == 6) { + switch (flag) { + case 0: nPts = 12; nColors = 4; break; + case 1: + case 2: + case 3: + default: nPts = 8; nColors = 2; break; + } + } else { + switch (flag) { + case 0: nPts = 16; nColors = 4; break; + case 1: + case 2: + case 3: + default: nPts = 12; nColors = 2; break; + } + } + for (i = 0; i < nPts; ++i) { + if (!bitBuf->getBits(coordBits, &xi) || + !bitBuf->getBits(coordBits, &yi)) { + break; + } + x[i] = xMin + xMul * (double)xi; + y[i] = yMin + yMul * (double)yi; + } + if (i < nPts) { + break; + } + for (i = 0; i < nColors; ++i) { + for (j = 0; j < nComps; ++j) { + if (!bitBuf->getBits(compBits, &ci[j])) { + break; + } + c[i][j] = cMin[j] + cMul[j] * (double)ci[j]; + if( nFuncsA == 0 ) { + // ... and colorspace values can also be stored into doubles. + // They will be casted later. + c[i][j] = dblToCol(c[i][j]); + } + } + if (j < nComps) { + break; + } + } + if (i < nColors) { + break; + } + if (nPatchesA == patchesSize) { + int oldPatchesSize = patchesSize; + patchesSize = (patchesSize == 0) ? 16 : 2 * patchesSize; + patchesA = (GfxPatch *)greallocn(patchesA, + patchesSize, sizeof(GfxPatch)); + memset(patchesA + oldPatchesSize, 0, (patchesSize - oldPatchesSize) * sizeof(GfxPatch)); + } + p = &patchesA[nPatchesA]; + if (typeA == 6) { + switch (flag) { + case 0: + p->x[0][0] = x[0]; + p->y[0][0] = y[0]; + p->x[0][1] = x[1]; + p->y[0][1] = y[1]; + p->x[0][2] = x[2]; + p->y[0][2] = y[2]; + p->x[0][3] = x[3]; + p->y[0][3] = y[3]; + p->x[1][3] = x[4]; + p->y[1][3] = y[4]; + p->x[2][3] = x[5]; + p->y[2][3] = y[5]; + p->x[3][3] = x[6]; + p->y[3][3] = y[6]; + p->x[3][2] = x[7]; + p->y[3][2] = y[7]; + p->x[3][1] = x[8]; + p->y[3][1] = y[8]; + p->x[3][0] = x[9]; + p->y[3][0] = y[9]; + p->x[2][0] = x[10]; + p->y[2][0] = y[10]; + p->x[1][0] = x[11]; + p->y[1][0] = y[11]; + for (j = 0; j < nComps; ++j) { + p->color[0][0].c[j] = c[0][j]; + p->color[0][1].c[j] = c[1][j]; + p->color[1][1].c[j] = c[2][j]; + p->color[1][0].c[j] = c[3][j]; + } + break; + case 1: + p->x[0][0] = patchesA[nPatchesA-1].x[0][3]; + p->y[0][0] = patchesA[nPatchesA-1].y[0][3]; + p->x[0][1] = patchesA[nPatchesA-1].x[1][3]; + p->y[0][1] = patchesA[nPatchesA-1].y[1][3]; + p->x[0][2] = patchesA[nPatchesA-1].x[2][3]; + p->y[0][2] = patchesA[nPatchesA-1].y[2][3]; + p->x[0][3] = patchesA[nPatchesA-1].x[3][3]; + p->y[0][3] = patchesA[nPatchesA-1].y[3][3]; + p->x[1][3] = x[0]; + p->y[1][3] = y[0]; + p->x[2][3] = x[1]; + p->y[2][3] = y[1]; + p->x[3][3] = x[2]; + p->y[3][3] = y[2]; + p->x[3][2] = x[3]; + p->y[3][2] = y[3]; + p->x[3][1] = x[4]; + p->y[3][1] = y[4]; + p->x[3][0] = x[5]; + p->y[3][0] = y[5]; + p->x[2][0] = x[6]; + p->y[2][0] = y[6]; + p->x[1][0] = x[7]; + p->y[1][0] = y[7]; + for (j = 0; j < nComps; ++j) { + p->color[0][0].c[j] = patchesA[nPatchesA-1].color[0][1].c[j]; + p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][1].c[j]; + p->color[1][1].c[j] = c[0][j]; + p->color[1][0].c[j] = c[1][j]; + } + break; + case 2: + p->x[0][0] = patchesA[nPatchesA-1].x[3][3]; + p->y[0][0] = patchesA[nPatchesA-1].y[3][3]; + p->x[0][1] = patchesA[nPatchesA-1].x[3][2]; + p->y[0][1] = patchesA[nPatchesA-1].y[3][2]; + p->x[0][2] = patchesA[nPatchesA-1].x[3][1]; + p->y[0][2] = patchesA[nPatchesA-1].y[3][1]; + p->x[0][3] = patchesA[nPatchesA-1].x[3][0]; + p->y[0][3] = patchesA[nPatchesA-1].y[3][0]; + p->x[1][3] = x[0]; + p->y[1][3] = y[0]; + p->x[2][3] = x[1]; + p->y[2][3] = y[1]; + p->x[3][3] = x[2]; + p->y[3][3] = y[2]; + p->x[3][2] = x[3]; + p->y[3][2] = y[3]; + p->x[3][1] = x[4]; + p->y[3][1] = y[4]; + p->x[3][0] = x[5]; + p->y[3][0] = y[5]; + p->x[2][0] = x[6]; + p->y[2][0] = y[6]; + p->x[1][0] = x[7]; + p->y[1][0] = y[7]; + for (j = 0; j < nComps; ++j) { + p->color[0][0].c[j] = patchesA[nPatchesA-1].color[1][1].c[j]; + p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][0].c[j]; + p->color[1][1].c[j] = c[0][j]; + p->color[1][0].c[j] = c[1][j]; + } + break; + case 3: + p->x[0][0] = patchesA[nPatchesA-1].x[3][0]; + p->y[0][0] = patchesA[nPatchesA-1].y[3][0]; + p->x[0][1] = patchesA[nPatchesA-1].x[2][0]; + p->y[0][1] = patchesA[nPatchesA-1].y[2][0]; + p->x[0][2] = patchesA[nPatchesA-1].x[1][0]; + p->y[0][2] = patchesA[nPatchesA-1].y[1][0]; + p->x[0][3] = patchesA[nPatchesA-1].x[0][0]; + p->y[0][3] = patchesA[nPatchesA-1].y[0][0]; + p->x[1][3] = x[0]; + p->y[1][3] = y[0]; + p->x[2][3] = x[1]; + p->y[2][3] = y[1]; + p->x[3][3] = x[2]; + p->y[3][3] = y[2]; + p->x[3][2] = x[3]; + p->y[3][2] = y[3]; + p->x[3][1] = x[4]; + p->y[3][1] = y[4]; + p->x[3][0] = x[5]; + p->y[3][0] = y[5]; + p->x[2][0] = x[6]; + p->y[2][0] = y[6]; + p->x[1][0] = x[7]; + p->y[1][0] = y[7]; + for (j = 0; j < nComps; ++j) { + p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][0].c[j]; + p->color[0][1].c[j] = patchesA[nPatchesA-1].color[0][0].c[j]; + p->color[1][1].c[j] = c[0][j]; + p->color[1][0].c[j] = c[1][j]; + } + break; + } + } else { + switch (flag) { + case 0: + p->x[0][0] = x[0]; + p->y[0][0] = y[0]; + p->x[0][1] = x[1]; + p->y[0][1] = y[1]; + p->x[0][2] = x[2]; + p->y[0][2] = y[2]; + p->x[0][3] = x[3]; + p->y[0][3] = y[3]; + p->x[1][3] = x[4]; + p->y[1][3] = y[4]; + p->x[2][3] = x[5]; + p->y[2][3] = y[5]; + p->x[3][3] = x[6]; + p->y[3][3] = y[6]; + p->x[3][2] = x[7]; + p->y[3][2] = y[7]; + p->x[3][1] = x[8]; + p->y[3][1] = y[8]; + p->x[3][0] = x[9]; + p->y[3][0] = y[9]; + p->x[2][0] = x[10]; + p->y[2][0] = y[10]; + p->x[1][0] = x[11]; + p->y[1][0] = y[11]; + p->x[1][1] = x[12]; + p->y[1][1] = y[12]; + p->x[1][2] = x[13]; + p->y[1][2] = y[13]; + p->x[2][2] = x[14]; + p->y[2][2] = y[14]; + p->x[2][1] = x[15]; + p->y[2][1] = y[15]; + for (j = 0; j < nComps; ++j) { + p->color[0][0].c[j] = c[0][j]; + p->color[0][1].c[j] = c[1][j]; + p->color[1][1].c[j] = c[2][j]; + p->color[1][0].c[j] = c[3][j]; + } + break; + case 1: + p->x[0][0] = patchesA[nPatchesA-1].x[0][3]; + p->y[0][0] = patchesA[nPatchesA-1].y[0][3]; + p->x[0][1] = patchesA[nPatchesA-1].x[1][3]; + p->y[0][1] = patchesA[nPatchesA-1].y[1][3]; + p->x[0][2] = patchesA[nPatchesA-1].x[2][3]; + p->y[0][2] = patchesA[nPatchesA-1].y[2][3]; + p->x[0][3] = patchesA[nPatchesA-1].x[3][3]; + p->y[0][3] = patchesA[nPatchesA-1].y[3][3]; + p->x[1][3] = x[0]; + p->y[1][3] = y[0]; + p->x[2][3] = x[1]; + p->y[2][3] = y[1]; + p->x[3][3] = x[2]; + p->y[3][3] = y[2]; + p->x[3][2] = x[3]; + p->y[3][2] = y[3]; + p->x[3][1] = x[4]; + p->y[3][1] = y[4]; + p->x[3][0] = x[5]; + p->y[3][0] = y[5]; + p->x[2][0] = x[6]; + p->y[2][0] = y[6]; + p->x[1][0] = x[7]; + p->y[1][0] = y[7]; + p->x[1][1] = x[8]; + p->y[1][1] = y[8]; + p->x[1][2] = x[9]; + p->y[1][2] = y[9]; + p->x[2][2] = x[10]; + p->y[2][2] = y[10]; + p->x[2][1] = x[11]; + p->y[2][1] = y[11]; + for (j = 0; j < nComps; ++j) { + p->color[0][0].c[j] = patchesA[nPatchesA-1].color[0][1].c[j]; + p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][1].c[j]; + p->color[1][1].c[j] = c[0][j]; + p->color[1][0].c[j] = c[1][j]; + } + break; + case 2: + p->x[0][0] = patchesA[nPatchesA-1].x[3][3]; + p->y[0][0] = patchesA[nPatchesA-1].y[3][3]; + p->x[0][1] = patchesA[nPatchesA-1].x[3][2]; + p->y[0][1] = patchesA[nPatchesA-1].y[3][2]; + p->x[0][2] = patchesA[nPatchesA-1].x[3][1]; + p->y[0][2] = patchesA[nPatchesA-1].y[3][1]; + p->x[0][3] = patchesA[nPatchesA-1].x[3][0]; + p->y[0][3] = patchesA[nPatchesA-1].y[3][0]; + p->x[1][3] = x[0]; + p->y[1][3] = y[0]; + p->x[2][3] = x[1]; + p->y[2][3] = y[1]; + p->x[3][3] = x[2]; + p->y[3][3] = y[2]; + p->x[3][2] = x[3]; + p->y[3][2] = y[3]; + p->x[3][1] = x[4]; + p->y[3][1] = y[4]; + p->x[3][0] = x[5]; + p->y[3][0] = y[5]; + p->x[2][0] = x[6]; + p->y[2][0] = y[6]; + p->x[1][0] = x[7]; + p->y[1][0] = y[7]; + p->x[1][1] = x[8]; + p->y[1][1] = y[8]; + p->x[1][2] = x[9]; + p->y[1][2] = y[9]; + p->x[2][2] = x[10]; + p->y[2][2] = y[10]; + p->x[2][1] = x[11]; + p->y[2][1] = y[11]; + for (j = 0; j < nComps; ++j) { + p->color[0][0].c[j] = patchesA[nPatchesA-1].color[1][1].c[j]; + p->color[0][1].c[j] = patchesA[nPatchesA-1].color[1][0].c[j]; + p->color[1][1].c[j] = c[0][j]; + p->color[1][0].c[j] = c[1][j]; + } + break; + case 3: + p->x[0][0] = patchesA[nPatchesA-1].x[3][0]; + p->y[0][0] = patchesA[nPatchesA-1].y[3][0]; + p->x[0][1] = patchesA[nPatchesA-1].x[2][0]; + p->y[0][1] = patchesA[nPatchesA-1].y[2][0]; + p->x[0][2] = patchesA[nPatchesA-1].x[1][0]; + p->y[0][2] = patchesA[nPatchesA-1].y[1][0]; + p->x[0][3] = patchesA[nPatchesA-1].x[0][0]; + p->y[0][3] = patchesA[nPatchesA-1].y[0][0]; + p->x[1][3] = x[0]; + p->y[1][3] = y[0]; + p->x[2][3] = x[1]; + p->y[2][3] = y[1]; + p->x[3][3] = x[2]; + p->y[3][3] = y[2]; + p->x[3][2] = x[3]; + p->y[3][2] = y[3]; + p->x[3][1] = x[4]; + p->y[3][1] = y[4]; + p->x[3][0] = x[5]; + p->y[3][0] = y[5]; + p->x[2][0] = x[6]; + p->y[2][0] = y[6]; + p->x[1][0] = x[7]; + p->y[1][0] = y[7]; + p->x[1][1] = x[8]; + p->y[1][1] = y[8]; + p->x[1][2] = x[9]; + p->y[1][2] = y[9]; + p->x[2][2] = x[10]; + p->y[2][2] = y[10]; + p->x[2][1] = x[11]; + p->y[2][1] = y[11]; + for (j = 0; j < nComps; ++j) { + p->color[0][0].c[j] = patchesA[nPatchesA-1].color[1][0].c[j]; + p->color[0][1].c[j] = patchesA[nPatchesA-1].color[0][0].c[j]; + p->color[1][1].c[j] = c[0][j]; + p->color[1][0].c[j] = c[1][j]; + } + break; + } + } + ++nPatchesA; + bitBuf->flushBits(); + } + delete bitBuf; + + if (typeA == 6) { + for (i = 0; i < nPatchesA; ++i) { + p = &patchesA[i]; + p->x[1][1] = (-4 * p->x[0][0] + +6 * (p->x[0][1] + p->x[1][0]) + -2 * (p->x[0][3] + p->x[3][0]) + +3 * (p->x[3][1] + p->x[1][3]) + - p->x[3][3]) / 9; + p->y[1][1] = (-4 * p->y[0][0] + +6 * (p->y[0][1] + p->y[1][0]) + -2 * (p->y[0][3] + p->y[3][0]) + +3 * (p->y[3][1] + p->y[1][3]) + - p->y[3][3]) / 9; + p->x[1][2] = (-4 * p->x[0][3] + +6 * (p->x[0][2] + p->x[1][3]) + -2 * (p->x[0][0] + p->x[3][3]) + +3 * (p->x[3][2] + p->x[1][0]) + - p->x[3][0]) / 9; + p->y[1][2] = (-4 * p->y[0][3] + +6 * (p->y[0][2] + p->y[1][3]) + -2 * (p->y[0][0] + p->y[3][3]) + +3 * (p->y[3][2] + p->y[1][0]) + - p->y[3][0]) / 9; + p->x[2][1] = (-4 * p->x[3][0] + +6 * (p->x[3][1] + p->x[2][0]) + -2 * (p->x[3][3] + p->x[0][0]) + +3 * (p->x[0][1] + p->x[2][3]) + - p->x[0][3]) / 9; + p->y[2][1] = (-4 * p->y[3][0] + +6 * (p->y[3][1] + p->y[2][0]) + -2 * (p->y[3][3] + p->y[0][0]) + +3 * (p->y[0][1] + p->y[2][3]) + - p->y[0][3]) / 9; + p->x[2][2] = (-4 * p->x[3][3] + +6 * (p->x[3][2] + p->x[2][3]) + -2 * (p->x[3][0] + p->x[0][3]) + +3 * (p->x[0][2] + p->x[2][0]) + - p->x[0][0]) / 9; + p->y[2][2] = (-4 * p->y[3][3] + +6 * (p->y[3][2] + p->y[2][3]) + -2 * (p->y[3][0] + p->y[0][3]) + +3 * (p->y[0][2] + p->y[2][0]) + - p->y[0][0]) / 9; + } + } + + shading = new GfxPatchMeshShading(typeA, patchesA, nPatchesA, + funcsA, nFuncsA); + if (!shading->init(dict, gfx)) { + delete shading; + return NULL; + } + return shading; + + err2: + obj1.free(); + err1: + return NULL; +} + +void GfxPatchMeshShading::getParameterizedColor(double t, GfxColor *color) { + double out[gfxColorMaxComps]; + + for (int j = 0; j < nFuncs; ++j) { + funcs[j]->transform(&t, &out[j]); + } + for (int j = 0; j < gfxColorMaxComps; ++j) { + color->c[j] = dblToCol(out[j]); + } +} + +GfxShading *GfxPatchMeshShading::copy() { + return new GfxPatchMeshShading(this); +} + +//------------------------------------------------------------------------ +// GfxImageColorMap +//------------------------------------------------------------------------ + +GfxImageColorMap::GfxImageColorMap(int bitsA, Object *decode, + GfxColorSpace *colorSpaceA) { + GfxIndexedColorSpace *indexedCS; + GfxSeparationColorSpace *sepCS; + int maxPixel, indexHigh; + Guchar *lookup2; + Function *sepFunc; + Object obj; + double x[gfxColorMaxComps]; + double y[gfxColorMaxComps]; + int i, j, k; + double mapped; + GBool useByteLookup; + + ok = gTrue; + + // bits per component and color space + bits = bitsA; + maxPixel = (1 << bits) - 1; + colorSpace = colorSpaceA; + + // this is a hack to support 16 bits images, everywhere + // we assume a component fits in 8 bits, with this hack + // we treat 16 bit images as 8 bit ones until it's fixed correctly. + // The hack has another part on ImageStream::getLine + if (maxPixel > 255) maxPixel = 255; + + // initialize + for (k = 0; k < gfxColorMaxComps; ++k) { + lookup[k] = NULL; + } + byte_lookup = NULL; + + // get decode map + if (decode->isNull()) { + nComps = colorSpace->getNComps(); + colorSpace->getDefaultRanges(decodeLow, decodeRange, maxPixel); + } else if (decode->isArray()) { + nComps = decode->arrayGetLength() / 2; + if (nComps != colorSpace->getNComps()) { + goto err1; + } + for (i = 0; i < nComps; ++i) { + decode->arrayGet(2*i, &obj); + if (!obj.isNum()) { + goto err2; + } + decodeLow[i] = obj.getNum(); + obj.free(); + decode->arrayGet(2*i+1, &obj); + if (!obj.isNum()) { + goto err2; + } + decodeRange[i] = obj.getNum() - decodeLow[i]; + obj.free(); + } + } else { + goto err1; + } + + // Construct a lookup table -- this stores pre-computed decoded + // values for each component, i.e., the result of applying the + // decode mapping to each possible image pixel component value. + // + // Optimization: for Indexed and Separation color spaces (which have + // only one component), we store color values in the lookup table + // rather than component values. + colorSpace2 = NULL; + nComps2 = 0; + useByteLookup = gFalse; + switch (colorSpace->getMode()) { + case csIndexed: + // Note that indexHigh may not be the same as maxPixel -- + // Distiller will remove unused palette entries, resulting in + // indexHigh < maxPixel. + indexedCS = (GfxIndexedColorSpace *)colorSpace; + colorSpace2 = indexedCS->getBase(); + indexHigh = indexedCS->getIndexHigh(); + nComps2 = colorSpace2->getNComps(); + lookup2 = indexedCS->getLookup(); + colorSpace2->getDefaultRanges(x, y, indexHigh); + if (colorSpace2->useGetGrayLine() || colorSpace2->useGetRGBLine()) { + byte_lookup = (Guchar *)gmallocn ((maxPixel + 1), nComps2); + useByteLookup = gTrue; + } + for (k = 0; k < nComps2; ++k) { + lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1, + sizeof(GfxColorComp)); + for (i = 0; i <= maxPixel; ++i) { + j = (int)(decodeLow[0] + (i * decodeRange[0]) / maxPixel + 0.5); + if (j < 0) { + j = 0; + } else if (j > indexHigh) { + j = indexHigh; + } + + mapped = x[k] + (lookup2[j*nComps2 + k] / 255.0) * y[k]; + lookup[k][i] = dblToCol(mapped); + if (useByteLookup) + byte_lookup[i * nComps2 + k] = (Guchar) (mapped * 255); + } + } + break; + case csSeparation: + sepCS = (GfxSeparationColorSpace *)colorSpace; + colorSpace2 = sepCS->getAlt(); + nComps2 = colorSpace2->getNComps(); + sepFunc = sepCS->getFunc(); + if (colorSpace2->useGetGrayLine() || colorSpace2->useGetRGBLine()) { + byte_lookup = (Guchar *)gmallocn ((maxPixel + 1), nComps2); + useByteLookup = gTrue; + } + for (k = 0; k < nComps2; ++k) { + lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1, + sizeof(GfxColorComp)); + for (i = 0; i <= maxPixel; ++i) { + x[0] = decodeLow[0] + (i * decodeRange[0]) / maxPixel; + sepFunc->transform(x, y); + lookup[k][i] = dblToCol(y[k]); + if (useByteLookup) + byte_lookup[i*nComps2 + k] = (Guchar) (y[k] * 255); + } + } + break; + default: + if (colorSpace->useGetGrayLine() || colorSpace->useGetRGBLine()) { + byte_lookup = (Guchar *)gmallocn ((maxPixel + 1), nComps); + useByteLookup = gTrue; + } + for (k = 0; k < nComps; ++k) { + lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1, + sizeof(GfxColorComp)); + for (i = 0; i <= maxPixel; ++i) { + mapped = decodeLow[k] + (i * decodeRange[k]) / maxPixel; + lookup[k][i] = dblToCol(mapped); + if (useByteLookup) { + int byte; + + byte = (int) (mapped * 255.0 + 0.5); + if (byte < 0) + byte = 0; + else if (byte > 255) + byte = 255; + byte_lookup[i * nComps + k] = byte; + } + } + } + } + + return; + + err2: + obj.free(); + err1: + ok = gFalse; +} + +GfxImageColorMap::GfxImageColorMap(GfxImageColorMap *colorMap) { + int n, i, k; + + colorSpace = colorMap->colorSpace->copy(); + bits = colorMap->bits; + nComps = colorMap->nComps; + nComps2 = colorMap->nComps2; + colorSpace2 = NULL; + for (k = 0; k < gfxColorMaxComps; ++k) { + lookup[k] = NULL; + } + n = 1 << bits; + if (colorSpace->getMode() == csIndexed) { + colorSpace2 = ((GfxIndexedColorSpace *)colorSpace)->getBase(); + for (k = 0; k < nComps2; ++k) { + lookup[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp)); + memcpy(lookup[k], colorMap->lookup[k], n * sizeof(GfxColorComp)); + } + } else if (colorSpace->getMode() == csSeparation) { + colorSpace2 = ((GfxSeparationColorSpace *)colorSpace)->getAlt(); + for (k = 0; k < nComps2; ++k) { + lookup[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp)); + memcpy(lookup[k], colorMap->lookup[k], n * sizeof(GfxColorComp)); + } + } else { + for (k = 0; k < nComps; ++k) { + lookup[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp)); + memcpy(lookup[k], colorMap->lookup[k], n * sizeof(GfxColorComp)); + } + } + if (colorMap->byte_lookup) { + int nc = colorSpace2 ? nComps2 : nComps; + + byte_lookup = (Guchar *)gmallocn (n, nc); + memcpy(byte_lookup, colorMap->byte_lookup, n * nc); + } + for (i = 0; i < nComps; ++i) { + decodeLow[i] = colorMap->decodeLow[i]; + decodeRange[i] = colorMap->decodeRange[i]; + } + ok = gTrue; +} + +GfxImageColorMap::~GfxImageColorMap() { + int i; + + delete colorSpace; + for (i = 0; i < gfxColorMaxComps; ++i) { + gfree(lookup[i]); + } + gfree(byte_lookup); +} + +void GfxImageColorMap::getGray(Guchar *x, GfxGray *gray) { + GfxColor color; + int i; + + if (colorSpace2) { + for (i = 0; i < nComps2; ++i) { + color.c[i] = lookup[i][x[0]]; + } + colorSpace2->getGray(&color, gray); + } else { + for (i = 0; i < nComps; ++i) { + color.c[i] = lookup[i][x[i]]; + } + colorSpace->getGray(&color, gray); + } +} + +void GfxImageColorMap::getRGB(Guchar *x, GfxRGB *rgb) { + GfxColor color; + int i; + + if (colorSpace2) { + for (i = 0; i < nComps2; ++i) { + color.c[i] = lookup[i][x[0]]; + } + colorSpace2->getRGB(&color, rgb); + } else { + for (i = 0; i < nComps; ++i) { + color.c[i] = lookup[i][x[i]]; + } + colorSpace->getRGB(&color, rgb); + } +} + +void GfxImageColorMap::getGrayLine(Guchar *in, Guchar *out, int length) { + int i, j; + Guchar *inp, *tmp_line; + + if ((colorSpace2 && !colorSpace2->useGetGrayLine ()) || + (!colorSpace2 && !colorSpace->useGetGrayLine ())) { + GfxGray gray; + + inp = in; + for (i = 0; i < length; i++) { + getGray (inp, &gray); + out[i] = colToByte(gray); + inp += nComps; + } + return; + } + + switch (colorSpace->getMode()) { + case csIndexed: + case csSeparation: + tmp_line = (Guchar *) gmallocn (length, nComps2); + for (i = 0; i < length; i++) { + for (j = 0; j < nComps2; j++) { + tmp_line[i * nComps2 + j] = byte_lookup[in[i] * nComps2 + j]; + } + } + colorSpace2->getGrayLine(tmp_line, out, length); + gfree (tmp_line); + break; + + default: + inp = in; + for (j = 0; j < length; j++) + for (i = 0; i < nComps; i++) { + *inp = byte_lookup[*inp * nComps + i]; + inp++; + } + colorSpace->getGrayLine(in, out, length); + break; + } + +} + +void GfxImageColorMap::getRGBLine(Guchar *in, unsigned int *out, int length) { + int i, j; + Guchar *inp, *tmp_line; + + if (!useRGBLine()) { + GfxRGB rgb; + + inp = in; + for (i = 0; i < length; i++) { + getRGB (inp, &rgb); + out[i] = + ((int) colToByte(rgb.r) << 16) | + ((int) colToByte(rgb.g) << 8) | + ((int) colToByte(rgb.b) << 0); + inp += nComps; + } + return; + } + + switch (colorSpace->getMode()) { + case csIndexed: + case csSeparation: + tmp_line = (Guchar *) gmallocn (length, nComps2); + for (i = 0; i < length; i++) { + for (j = 0; j < nComps2; j++) { + tmp_line[i * nComps2 + j] = byte_lookup[in[i] * nComps2 + j]; + } + } + colorSpace2->getRGBLine(tmp_line, out, length); + gfree (tmp_line); + break; + + default: + inp = in; + for (j = 0; j < length; j++) + for (i = 0; i < nComps; i++) { + *inp = byte_lookup[*inp * nComps + i]; + inp++; + } + colorSpace->getRGBLine(in, out, length); + break; + } + +} + +void GfxImageColorMap::getRGBLine(Guchar *in, Guchar *out, int length) { + int i, j; + Guchar *inp, *tmp_line; + + if (!useRGBLine()) { + GfxRGB rgb; + + inp = in; + for (i = 0; i < length; i++) { + getRGB (inp, &rgb); + *out++ = colToByte(rgb.r); + *out++ = colToByte(rgb.g); + *out++ = colToByte(rgb.b); + inp += nComps; + } + return; + } + + switch (colorSpace->getMode()) { + case csIndexed: + case csSeparation: + tmp_line = (Guchar *) gmallocn (length, nComps2); + for (i = 0; i < length; i++) { + for (j = 0; j < nComps2; j++) { + tmp_line[i * nComps2 + j] = byte_lookup[in[i] * nComps2 + j]; + } + } + colorSpace2->getRGBLine(tmp_line, out, length); + gfree (tmp_line); + break; + + default: + inp = in; + for (j = 0; j < length; j++) + for (i = 0; i < nComps; i++) { + *inp = byte_lookup[*inp * nComps + i]; + inp++; + } + colorSpace->getRGBLine(in, out, length); + break; + } + +} + +void GfxImageColorMap::getRGBXLine(Guchar *in, Guchar *out, int length) { + int i, j; + Guchar *inp, *tmp_line; + + if (!useRGBLine()) { + GfxRGB rgb; + + inp = in; + for (i = 0; i < length; i++) { + getRGB (inp, &rgb); + *out++ = colToByte(rgb.r); + *out++ = colToByte(rgb.g); + *out++ = colToByte(rgb.b); + *out++ = 255; + inp += nComps; + } + return; + } + + switch (colorSpace->getMode()) { + case csIndexed: + case csSeparation: + tmp_line = (Guchar *) gmallocn (length, nComps2); + for (i = 0; i < length; i++) { + for (j = 0; j < nComps2; j++) { + tmp_line[i * nComps2 + j] = byte_lookup[in[i] * nComps2 + j]; + } + } + colorSpace2->getRGBXLine(tmp_line, out, length); + gfree (tmp_line); + break; + + default: + inp = in; + for (j = 0; j < length; j++) + for (i = 0; i < nComps; i++) { + *inp = byte_lookup[*inp * nComps + i]; + inp++; + } + colorSpace->getRGBXLine(in, out, length); + break; + } + +} + +void GfxImageColorMap::getCMYK(Guchar *x, GfxCMYK *cmyk) { + GfxColor color; + int i; + + if (colorSpace2) { + for (i = 0; i < nComps2; ++i) { + color.c[i] = lookup[i][x[0]]; + } + colorSpace2->getCMYK(&color, cmyk); + } else { + for (i = 0; i < nComps; ++i) { + color.c[i] = lookup[i][x[i]]; + } + colorSpace->getCMYK(&color, cmyk); + } +} + +void GfxImageColorMap::getColor(Guchar *x, GfxColor *color) { + int maxPixel, i; + + maxPixel = (1 << bits) - 1; + for (i = 0; i < nComps; ++i) { + color->c[i] = dblToCol(decodeLow[i] + (x[i] * decodeRange[i]) / maxPixel); + } +} + +//------------------------------------------------------------------------ +// GfxSubpath and GfxPath +//------------------------------------------------------------------------ + +GfxSubpath::GfxSubpath(double x1, double y1) { + size = 16; + x = (double *)gmallocn(size, sizeof(double)); + y = (double *)gmallocn(size, sizeof(double)); + curve = (GBool *)gmallocn(size, sizeof(GBool)); + n = 1; + x[0] = x1; + y[0] = y1; + curve[0] = gFalse; + closed = gFalse; +} + +GfxSubpath::~GfxSubpath() { + gfree(x); + gfree(y); + gfree(curve); +} + +// Used for copy(). +GfxSubpath::GfxSubpath(GfxSubpath *subpath) { + size = subpath->size; + n = subpath->n; + x = (double *)gmallocn(size, sizeof(double)); + y = (double *)gmallocn(size, sizeof(double)); + curve = (GBool *)gmallocn(size, sizeof(GBool)); + memcpy(x, subpath->x, n * sizeof(double)); + memcpy(y, subpath->y, n * sizeof(double)); + memcpy(curve, subpath->curve, n * sizeof(GBool)); + closed = subpath->closed; +} + +void GfxSubpath::lineTo(double x1, double y1) { + if (n >= size) { + size += 16; + x = (double *)greallocn(x, size, sizeof(double)); + y = (double *)greallocn(y, size, sizeof(double)); + curve = (GBool *)greallocn(curve, size, sizeof(GBool)); + } + x[n] = x1; + y[n] = y1; + curve[n] = gFalse; + ++n; +} + +void GfxSubpath::curveTo(double x1, double y1, double x2, double y2, + double x3, double y3) { + if (n+3 > size) { + size += 16; + x = (double *)greallocn(x, size, sizeof(double)); + y = (double *)greallocn(y, size, sizeof(double)); + curve = (GBool *)greallocn(curve, size, sizeof(GBool)); + } + x[n] = x1; + y[n] = y1; + x[n+1] = x2; + y[n+1] = y2; + x[n+2] = x3; + y[n+2] = y3; + curve[n] = curve[n+1] = gTrue; + curve[n+2] = gFalse; + n += 3; +} + +void GfxSubpath::close() { + if (x[n-1] != x[0] || y[n-1] != y[0]) { + lineTo(x[0], y[0]); + } + closed = gTrue; +} + +void GfxSubpath::offset(double dx, double dy) { + int i; + + for (i = 0; i < n; ++i) { + x[i] += dx; + y[i] += dy; + } +} + +GfxPath::GfxPath() { + justMoved = gFalse; + size = 16; + n = 0; + firstX = firstY = 0; + subpaths = (GfxSubpath **)gmallocn(size, sizeof(GfxSubpath *)); +} + +GfxPath::~GfxPath() { + int i; + + for (i = 0; i < n; ++i) + delete subpaths[i]; + gfree(subpaths); +} + +// Used for copy(). +GfxPath::GfxPath(GBool justMoved1, double firstX1, double firstY1, + GfxSubpath **subpaths1, int n1, int size1) { + int i; + + justMoved = justMoved1; + firstX = firstX1; + firstY = firstY1; + size = size1; + n = n1; + subpaths = (GfxSubpath **)gmallocn(size, sizeof(GfxSubpath *)); + for (i = 0; i < n; ++i) + subpaths[i] = subpaths1[i]->copy(); +} + +void GfxPath::moveTo(double x, double y) { + justMoved = gTrue; + firstX = x; + firstY = y; +} + +void GfxPath::lineTo(double x, double y) { + if (justMoved) { + if (n >= size) { + size += 16; + subpaths = (GfxSubpath **) + greallocn(subpaths, size, sizeof(GfxSubpath *)); + } + subpaths[n] = new GfxSubpath(firstX, firstY); + ++n; + justMoved = gFalse; + } + subpaths[n-1]->lineTo(x, y); +} + +void GfxPath::curveTo(double x1, double y1, double x2, double y2, + double x3, double y3) { + if (justMoved) { + if (n >= size) { + size += 16; + subpaths = (GfxSubpath **) + greallocn(subpaths, size, sizeof(GfxSubpath *)); + } + subpaths[n] = new GfxSubpath(firstX, firstY); + ++n; + justMoved = gFalse; + } + subpaths[n-1]->curveTo(x1, y1, x2, y2, x3, y3); +} + +void GfxPath::close() { + // this is necessary to handle the pathological case of + // moveto/closepath/clip, which defines an empty clipping region + if (justMoved) { + if (n >= size) { + size += 16; + subpaths = (GfxSubpath **) + greallocn(subpaths, size, sizeof(GfxSubpath *)); + } + subpaths[n] = new GfxSubpath(firstX, firstY); + ++n; + justMoved = gFalse; + } + subpaths[n-1]->close(); +} + +void GfxPath::append(GfxPath *path) { + int i; + + if (n + path->n > size) { + size = n + path->n; + subpaths = (GfxSubpath **) + greallocn(subpaths, size, sizeof(GfxSubpath *)); + } + for (i = 0; i < path->n; ++i) { + subpaths[n++] = path->subpaths[i]->copy(); + } + justMoved = gFalse; +} + +void GfxPath::offset(double dx, double dy) { + int i; + + for (i = 0; i < n; ++i) { + subpaths[i]->offset(dx, dy); + } +} + +//------------------------------------------------------------------------ +// GfxState +//------------------------------------------------------------------------ +GfxState::ReusablePathIterator::ReusablePathIterator(GfxPath *path) + : path(path), + subPathOff(0), + coordOff(0), + numCoords(0), + curSubPath(NULL) +{ + if( path->getNumSubpaths() ) { + curSubPath = path->getSubpath(subPathOff); + numCoords = curSubPath->getNumPoints(); + } +} + +bool GfxState::ReusablePathIterator::isEnd() const { + return coordOff >= numCoords; +} + +void GfxState::ReusablePathIterator::next() { + ++coordOff; + if (coordOff == numCoords) { + ++subPathOff; + if (subPathOff < path->getNumSubpaths()) { + coordOff = 0; + curSubPath = path->getSubpath(subPathOff); + numCoords = curSubPath->getNumPoints(); + } + } +} + +void GfxState::ReusablePathIterator::setCoord(double x, double y) { + curSubPath->setX(coordOff, x); + curSubPath->setY(coordOff, y); +} + +void GfxState::ReusablePathIterator::reset() { + coordOff = 0; + subPathOff = 0; + curSubPath = path->getSubpath(0); + numCoords = curSubPath->getNumPoints(); +} + +GfxState::GfxState(double hDPIA, double vDPIA, PDFRectangle *pageBox, + int rotateA, GBool upsideDown) { + double kx, ky; + + hDPI = hDPIA; + vDPI = vDPIA; + rotate = rotateA; + px1 = pageBox->x1; + py1 = pageBox->y1; + px2 = pageBox->x2; + py2 = pageBox->y2; + kx = hDPI / 72.0; + ky = vDPI / 72.0; + if (rotate == 90) { + ctm[0] = 0; + ctm[1] = upsideDown ? ky : -ky; + ctm[2] = kx; + ctm[3] = 0; + ctm[4] = -kx * py1; + ctm[5] = ky * (upsideDown ? -px1 : px2); + pageWidth = kx * (py2 - py1); + pageHeight = ky * (px2 - px1); + } else if (rotate == 180) { + ctm[0] = -kx; + ctm[1] = 0; + ctm[2] = 0; + ctm[3] = upsideDown ? ky : -ky; + ctm[4] = kx * px2; + ctm[5] = ky * (upsideDown ? -py1 : py2); + pageWidth = kx * (px2 - px1); + pageHeight = ky * (py2 - py1); + } else if (rotate == 270) { + ctm[0] = 0; + ctm[1] = upsideDown ? -ky : ky; + ctm[2] = -kx; + ctm[3] = 0; + ctm[4] = kx * py2; + ctm[5] = ky * (upsideDown ? px2 : -px1); + pageWidth = kx * (py2 - py1); + pageHeight = ky * (px2 - px1); + } else { + ctm[0] = kx; + ctm[1] = 0; + ctm[2] = 0; + ctm[3] = upsideDown ? -ky : ky; + ctm[4] = -kx * px1; + ctm[5] = ky * (upsideDown ? py2 : -py1); + pageWidth = kx * (px2 - px1); + pageHeight = ky * (py2 - py1); + } + + fillColorSpace = new GfxDeviceGrayColorSpace(); + strokeColorSpace = new GfxDeviceGrayColorSpace(); + fillColor.c[0] = 0; + strokeColor.c[0] = 0; + fillPattern = NULL; + strokePattern = NULL; + blendMode = gfxBlendNormal; + fillOpacity = 1; + strokeOpacity = 1; + fillOverprint = gFalse; + strokeOverprint = gFalse; + overprintMode = 0; + transfer[0] = transfer[1] = transfer[2] = transfer[3] = NULL; + + lineWidth = 1; + lineDash = NULL; + lineDashLength = 0; + lineDashStart = 0; + flatness = 1; + lineJoin = 0; + lineCap = 0; + miterLimit = 10; + strokeAdjust = gFalse; + + font = NULL; + fontSize = 0; + textMat[0] = 1; textMat[1] = 0; + textMat[2] = 0; textMat[3] = 1; + textMat[4] = 0; textMat[5] = 0; + charSpace = 0; + wordSpace = 0; + horizScaling = 1; + leading = 0; + rise = 0; + render = 0; + + path = new GfxPath(); + curX = curY = 0; + lineX = lineY = 0; + + clipXMin = 0; + clipYMin = 0; + clipXMax = pageWidth; + clipYMax = pageHeight; + + saved = NULL; +#ifdef USE_CMS + GfxColorSpace::setupColorProfiles(); +#endif +} + +GfxState::~GfxState() { + int i; + + if (fillColorSpace) { + delete fillColorSpace; + } + if (strokeColorSpace) { + delete strokeColorSpace; + } + if (fillPattern) { + delete fillPattern; + } + if (strokePattern) { + delete strokePattern; + } + for (i = 0; i < 4; ++i) { + if (transfer[i]) { + delete transfer[i]; + } + } + gfree(lineDash); + if (path) { + // this gets set to NULL by restore() + delete path; + } + if (saved) { + delete saved; + } + if (font) { + font->decRefCnt(); + } +} + +// Used for copy(); +GfxState::GfxState(GfxState *state) { + int i; + + memcpy(this, state, sizeof(GfxState)); + if (fillColorSpace) { + fillColorSpace = state->fillColorSpace->copy(); + } + if (strokeColorSpace) { + strokeColorSpace = state->strokeColorSpace->copy(); + } + if (fillPattern) { + fillPattern = state->fillPattern->copy(); + } + if (strokePattern) { + strokePattern = state->strokePattern->copy(); + } + for (i = 0; i < 4; ++i) { + if (transfer[i]) { + transfer[i] = state->transfer[i]->copy(); + } + } + if (lineDashLength > 0) { + lineDash = (double *)gmallocn(lineDashLength, sizeof(double)); + memcpy(lineDash, state->lineDash, lineDashLength * sizeof(double)); + } + if (font) + font->incRefCnt(); + + saved = NULL; +} + +void GfxState::setPath(GfxPath *pathA) { + delete path; + path = pathA; +} + +void GfxState::getUserClipBBox(double *xMin, double *yMin, + double *xMax, double *yMax) { + double ictm[6]; + double xMin1, yMin1, xMax1, yMax1, det, tx, ty; + + // invert the CTM + det = 1 / (ctm[0] * ctm[3] - ctm[1] * ctm[2]); + ictm[0] = ctm[3] * det; + ictm[1] = -ctm[1] * det; + ictm[2] = -ctm[2] * det; + ictm[3] = ctm[0] * det; + ictm[4] = (ctm[2] * ctm[5] - ctm[3] * ctm[4]) * det; + ictm[5] = (ctm[1] * ctm[4] - ctm[0] * ctm[5]) * det; + + // transform all four corners of the clip bbox; find the min and max + // x and y values + xMin1 = xMax1 = clipXMin * ictm[0] + clipYMin * ictm[2] + ictm[4]; + yMin1 = yMax1 = clipXMin * ictm[1] + clipYMin * ictm[3] + ictm[5]; + tx = clipXMin * ictm[0] + clipYMax * ictm[2] + ictm[4]; + ty = clipXMin * ictm[1] + clipYMax * ictm[3] + ictm[5]; + if (tx < xMin1) { + xMin1 = tx; + } else if (tx > xMax1) { + xMax1 = tx; + } + if (ty < yMin1) { + yMin1 = ty; + } else if (ty > yMax1) { + yMax1 = ty; + } + tx = clipXMax * ictm[0] + clipYMin * ictm[2] + ictm[4]; + ty = clipXMax * ictm[1] + clipYMin * ictm[3] + ictm[5]; + if (tx < xMin1) { + xMin1 = tx; + } else if (tx > xMax1) { + xMax1 = tx; + } + if (ty < yMin1) { + yMin1 = ty; + } else if (ty > yMax1) { + yMax1 = ty; + } + tx = clipXMax * ictm[0] + clipYMax * ictm[2] + ictm[4]; + ty = clipXMax * ictm[1] + clipYMax * ictm[3] + ictm[5]; + if (tx < xMin1) { + xMin1 = tx; + } else if (tx > xMax1) { + xMax1 = tx; + } + if (ty < yMin1) { + yMin1 = ty; + } else if (ty > yMax1) { + yMax1 = ty; + } + + *xMin = xMin1; + *yMin = yMin1; + *xMax = xMax1; + *yMax = yMax1; +} + +double GfxState::transformWidth(double w) { + double x, y; + + x = ctm[0] + ctm[2]; + y = ctm[1] + ctm[3]; + return w * sqrt(0.5 * (x * x + y * y)); +} + +double GfxState::getTransformedFontSize() { + double x1, y1, x2, y2; + + x1 = textMat[2] * fontSize; + y1 = textMat[3] * fontSize; + x2 = ctm[0] * x1 + ctm[2] * y1; + y2 = ctm[1] * x1 + ctm[3] * y1; + return sqrt(x2 * x2 + y2 * y2); +} + +void GfxState::getFontTransMat(double *m11, double *m12, + double *m21, double *m22) { + *m11 = (textMat[0] * ctm[0] + textMat[1] * ctm[2]) * fontSize; + *m12 = (textMat[0] * ctm[1] + textMat[1] * ctm[3]) * fontSize; + *m21 = (textMat[2] * ctm[0] + textMat[3] * ctm[2]) * fontSize; + *m22 = (textMat[2] * ctm[1] + textMat[3] * ctm[3]) * fontSize; +} + +void GfxState::setCTM(double a, double b, double c, + double d, double e, double f) { + ctm[0] = a; + ctm[1] = b; + ctm[2] = c; + ctm[3] = d; + ctm[4] = e; + ctm[5] = f; +} + +void GfxState::concatCTM(double a, double b, double c, + double d, double e, double f) { + double a1 = ctm[0]; + double b1 = ctm[1]; + double c1 = ctm[2]; + double d1 = ctm[3]; + + ctm[0] = a * a1 + b * c1; + ctm[1] = a * b1 + b * d1; + ctm[2] = c * a1 + d * c1; + ctm[3] = c * b1 + d * d1; + ctm[4] = e * a1 + f * c1 + ctm[4]; + ctm[5] = e * b1 + f * d1 + ctm[5]; +} + +void GfxState::shiftCTM(double tx, double ty) { + ctm[4] += tx; + ctm[5] += ty; + clipXMin += tx; + clipYMin += ty; + clipXMax += tx; + clipYMax += ty; +} + +void GfxState::setFillColorSpace(GfxColorSpace *colorSpace) { + if (fillColorSpace) { + delete fillColorSpace; + } + fillColorSpace = colorSpace; +} + +void GfxState::setStrokeColorSpace(GfxColorSpace *colorSpace) { + if (strokeColorSpace) { + delete strokeColorSpace; + } + strokeColorSpace = colorSpace; +} + +void GfxState::setFillPattern(GfxPattern *pattern) { + if (fillPattern) { + delete fillPattern; + } + fillPattern = pattern; +} + +void GfxState::setStrokePattern(GfxPattern *pattern) { + if (strokePattern) { + delete strokePattern; + } + strokePattern = pattern; +} + +void GfxState::setFont(GfxFont *fontA, double fontSizeA) { + if (font) + font->decRefCnt(); + + font = fontA; + fontSize = fontSizeA; +} + +void GfxState::setTransfer(Function **funcs) { + int i; + + for (i = 0; i < 4; ++i) { + if (transfer[i]) { + delete transfer[i]; + } + transfer[i] = funcs[i]; + } +} + +void GfxState::setLineDash(double *dash, int length, double start) { + if (lineDash) + gfree(lineDash); + lineDash = dash; + lineDashLength = length; + lineDashStart = start; +} + +void GfxState::clearPath() { + delete path; + path = new GfxPath(); +} + +void GfxState::clip() { + double xMin, yMin, xMax, yMax, x, y; + GfxSubpath *subpath; + int i, j; + + xMin = xMax = yMin = yMax = 0; // make gcc happy + for (i = 0; i < path->getNumSubpaths(); ++i) { + subpath = path->getSubpath(i); + for (j = 0; j < subpath->getNumPoints(); ++j) { + transform(subpath->getX(j), subpath->getY(j), &x, &y); + if (i == 0 && j == 0) { + xMin = xMax = x; + yMin = yMax = y; + } else { + if (x < xMin) { + xMin = x; + } else if (x > xMax) { + xMax = x; + } + if (y < yMin) { + yMin = y; + } else if (y > yMax) { + yMax = y; + } + } + } + } + if (xMin > clipXMin) { + clipXMin = xMin; + } + if (yMin > clipYMin) { + clipYMin = yMin; + } + if (xMax < clipXMax) { + clipXMax = xMax; + } + if (yMax < clipYMax) { + clipYMax = yMax; + } +} + +void GfxState::clipToStrokePath() { + double xMin, yMin, xMax, yMax, x, y, t0, t1; + GfxSubpath *subpath; + int i, j; + + xMin = xMax = yMin = yMax = 0; // make gcc happy + for (i = 0; i < path->getNumSubpaths(); ++i) { + subpath = path->getSubpath(i); + for (j = 0; j < subpath->getNumPoints(); ++j) { + transform(subpath->getX(j), subpath->getY(j), &x, &y); + if (i == 0 && j == 0) { + xMin = xMax = x; + yMin = yMax = y; + } else { + if (x < xMin) { + xMin = x; + } else if (x > xMax) { + xMax = x; + } + if (y < yMin) { + yMin = y; + } else if (y > yMax) { + yMax = y; + } + } + } + } + + // allow for the line width + //~ miter joins can extend farther than this + t0 = fabs(ctm[0]); + t1 = fabs(ctm[2]); + if (t0 > t1) { + xMin -= 0.5 * lineWidth * t0; + xMax += 0.5 * lineWidth * t0; + } else { + xMin -= 0.5 * lineWidth * t1; + xMax += 0.5 * lineWidth * t1; + } + t0 = fabs(ctm[0]); + t1 = fabs(ctm[3]); + if (t0 > t1) { + yMin -= 0.5 * lineWidth * t0; + yMax += 0.5 * lineWidth * t0; + } else { + yMin -= 0.5 * lineWidth * t1; + yMax += 0.5 * lineWidth * t1; + } + + if (xMin > clipXMin) { + clipXMin = xMin; + } + if (yMin > clipYMin) { + clipYMin = yMin; + } + if (xMax < clipXMax) { + clipXMax = xMax; + } + if (yMax < clipYMax) { + clipYMax = yMax; + } +} + +void GfxState::textShift(double tx, double ty) { + double dx, dy; + + textTransformDelta(tx, ty, &dx, &dy); + curX += dx; + curY += dy; +} + +void GfxState::shift(double dx, double dy) { + curX += dx; + curY += dy; +} + +GfxState *GfxState::save() { + GfxState *newState; + + newState = copy(); + newState->saved = this; + return newState; +} + +GfxState *GfxState::restore() { + GfxState *oldState; + + if (saved) { + oldState = saved; + + // these attributes aren't saved/restored by the q/Q operators + oldState->path = path; + oldState->curX = curX; + oldState->curY = curY; + oldState->lineX = lineX; + oldState->lineY = lineY; + + path = NULL; + saved = NULL; + delete this; + + } else { + oldState = this; + } + + return oldState; +} + +GBool GfxState::parseBlendMode(Object *obj, GfxBlendMode *mode) { + Object obj2; + int i, j; + + if (obj->isName()) { + for (i = 0; i < nGfxBlendModeNames; ++i) { + if (!strcmp(obj->getName(), gfxBlendModeNames[i].name)) { + *mode = gfxBlendModeNames[i].mode; + return gTrue; + } + } + return gFalse; + } else if (obj->isArray()) { + for (i = 0; i < obj->arrayGetLength(); ++i) { + obj->arrayGet(i, &obj2); + if (!obj2.isName()) { + obj2.free(); + return gFalse; + } + for (j = 0; j < nGfxBlendModeNames; ++j) { + if (!strcmp(obj2.getName(), gfxBlendModeNames[j].name)) { + obj2.free(); + *mode = gfxBlendModeNames[j].mode; + return gTrue; + } + } + obj2.free(); + } + *mode = gfxBlendNormal; + return gTrue; + } else { + return gFalse; + } +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxState.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxState.h new file mode 100644 index 00000000000..d8f0972ef7b --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxState.h @@ -0,0 +1,1530 @@ +//======================================================================== +// +// GfxState.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2006, 2007 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2006 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2009 Koji Otani <sho@bbr.jp> +// Copyright (C) 2009-2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> +// Copyright (C) 2011 Andrea Canciani <ranma42@gmail.com> +// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef GFXSTATE_H +#define GFXSTATE_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "poppler-config.h" + +#include "goo/gtypes.h" +#include "Object.h" +#include "Function.h" + +#include <assert.h> + +class Array; +class Gfx; +class GfxFont; +class PDFRectangle; +class GfxShading; +class PopplerCache; + +class Matrix { +public: + double m[6]; + + GBool invertTo(Matrix *other) const; + void transform(double x, double y, double *tx, double *ty) const; + double determinant() const { return m[0] * m[3] - m[1] * m[2]; } + double norm() const; +}; + +//------------------------------------------------------------------------ +// GfxBlendMode +//------------------------------------------------------------------------ + +enum GfxBlendMode { + gfxBlendNormal, + gfxBlendMultiply, + gfxBlendScreen, + gfxBlendOverlay, + gfxBlendDarken, + gfxBlendLighten, + gfxBlendColorDodge, + gfxBlendColorBurn, + gfxBlendHardLight, + gfxBlendSoftLight, + gfxBlendDifference, + gfxBlendExclusion, + gfxBlendHue, + gfxBlendSaturation, + gfxBlendColor, + gfxBlendLuminosity +}; + +//------------------------------------------------------------------------ +// GfxColorComp +//------------------------------------------------------------------------ + +// 16.16 fixed point color component +typedef int GfxColorComp; + +#define gfxColorComp1 0x10000 + +static inline GfxColorComp dblToCol(double x) { + return (GfxColorComp)(x * gfxColorComp1); +} + +static inline double colToDbl(GfxColorComp x) { + return (double)x / (double)gfxColorComp1; +} + +static inline Guchar dblToByte(double x) { + return (Guchar)(x * 255.0); +} + +static inline double byteToDbl(Guchar x) { + return (double)x / (double)255.0; +} + +static inline GfxColorComp byteToCol(Guchar x) { + // (x / 255) << 16 = (0.0000000100000001... * x) << 16 + // = ((x << 8) + (x) + (x >> 8) + ...) << 16 + // = (x << 8) + (x) + (x >> 7) + // [for rounding] + return (GfxColorComp)((x << 8) + x + (x >> 7)); +} + +static inline Guchar colToByte(GfxColorComp x) { + // 255 * x + 0.5 = 256 * x - x + 0x8000 + return (Guchar)(((x << 8) - x + 0x8000) >> 16); +} + +//------------------------------------------------------------------------ +// GfxColor +//------------------------------------------------------------------------ + +#define gfxColorMaxComps funcMaxOutputs + +struct GfxColor { + GfxColorComp c[gfxColorMaxComps]; +}; + +//------------------------------------------------------------------------ +// GfxGray +//------------------------------------------------------------------------ + +typedef GfxColorComp GfxGray; + +//------------------------------------------------------------------------ +// GfxRGB +//------------------------------------------------------------------------ + +struct GfxRGB { + GfxColorComp r, g, b; +}; + +//------------------------------------------------------------------------ +// GfxCMYK +//------------------------------------------------------------------------ + +struct GfxCMYK { + GfxColorComp c, m, y, k; +}; + +//------------------------------------------------------------------------ +// GfxColorSpace +//------------------------------------------------------------------------ + +// NB: The nGfxColorSpaceModes constant and the gfxColorSpaceModeNames +// array defined in GfxState.cc must match this enum. +enum GfxColorSpaceMode { + csDeviceGray, + csCalGray, + csDeviceRGB, + csCalRGB, + csDeviceCMYK, + csLab, + csICCBased, + csIndexed, + csSeparation, + csDeviceN, + csPattern +}; + +// wrapper of cmsHTRANSFORM to copy +class GfxColorTransform { +public: + void doTransform(void *in, void *out, unsigned int size); + // transformA should be a cmsHTRANSFORM + GfxColorTransform(void *transformA); + ~GfxColorTransform(); + void ref(); + unsigned int unref(); +private: + GfxColorTransform() {} + void *transform; + unsigned int refCount; +}; + +class GfxColorSpace { +public: + + GfxColorSpace(); + virtual ~GfxColorSpace(); + virtual GfxColorSpace *copy() = 0; + virtual GfxColorSpaceMode getMode() = 0; + + // Construct a color space. Returns NULL if unsuccessful. + static GfxColorSpace *parse(Object *csObj, Gfx *gfx); + + // Convert to gray, RGB, or CMYK. + virtual void getGray(GfxColor *color, GfxGray *gray) = 0; + virtual void getRGB(GfxColor *color, GfxRGB *rgb) = 0; + virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk) = 0; + virtual void getGrayLine(Guchar * /*in*/, Guchar * /*out*/, int /*length*/) { error(-1, "GfxColorSpace::getGrayLine this should not happen"); } + virtual void getRGBLine(Guchar * /*in*/, unsigned int * /*out*/, int /*length*/) { error(-1, "GfxColorSpace::getRGBLine (first variant) this should not happen"); } + virtual void getRGBLine(Guchar * /*in*/, Guchar * /*out*/, int /*length*/) { error(-1, "GfxColorSpace::getRGBLine (second variant) this should not happen"); } + virtual void getRGBXLine(Guchar * /*in*/, Guchar * /*out*/, int /*length*/) { error(-1, "GfxColorSpace::getRGBXLine this should not happen"); } + + // Does this ColorSpace support getRGBLine? + virtual GBool useGetRGBLine() { return gFalse; } + // Does this ColorSpace support getGrayLine? + virtual GBool useGetGrayLine() { return gFalse; } + + // Return the number of color components. + virtual int getNComps() = 0; + + // Get this color space's default color. + virtual void getDefaultColor(GfxColor *color) = 0; + + // Return the default ranges for each component, assuming an image + // with a max pixel value of <maxImgPixel>. + virtual void getDefaultRanges(double *decodeLow, double *decodeRange, + int maxImgPixel); + + // Returns true if painting operations in this color space never + // mark the page (e.g., the "None" colorant). + virtual GBool isNonMarking() { return gFalse; } + + // Return the number of color space modes + static int getNumColorSpaceModes(); + + // Return the name of the <idx>th color space mode. + static char *getColorSpaceModeName(int idx); + +#ifdef USE_CMS + static int setupColorProfiles(); + // displayProfileA should be a cmsHPROFILE + static void setDisplayProfile(void *displayProfileA); + static void setDisplayProfileName(GooString *name); + // result will be a cmsHPROFILE + static void *getRGBProfile(); + // result will be a cmsHPROFILE + static void *getDisplayProfile(); +#endif +}; + +//------------------------------------------------------------------------ +// GfxDeviceGrayColorSpace +//------------------------------------------------------------------------ + +class GfxDeviceGrayColorSpace: public GfxColorSpace { +public: + + GfxDeviceGrayColorSpace(); + virtual ~GfxDeviceGrayColorSpace(); + virtual GfxColorSpace *copy(); + virtual GfxColorSpaceMode getMode() { return csDeviceGray; } + + virtual void getGray(GfxColor *color, GfxGray *gray); + virtual void getRGB(GfxColor *color, GfxRGB *rgb); + virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); + virtual void getGrayLine(Guchar *in, Guchar *out, int length); + virtual void getRGBLine(Guchar *in, unsigned int *out, int length); + virtual void getRGBLine(Guchar *in, Guchar *out, int length); + virtual void getRGBXLine(Guchar *in, Guchar *out, int length); + + virtual GBool useGetRGBLine() { return gTrue; } + virtual GBool useGetGrayLine() { return gTrue; } + + virtual int getNComps() { return 1; } + virtual void getDefaultColor(GfxColor *color); + +private: +}; + +//------------------------------------------------------------------------ +// GfxCalGrayColorSpace +//------------------------------------------------------------------------ + +class GfxCalGrayColorSpace: public GfxColorSpace { +public: + + GfxCalGrayColorSpace(); + virtual ~GfxCalGrayColorSpace(); + virtual GfxColorSpace *copy(); + virtual GfxColorSpaceMode getMode() { return csCalGray; } + + // Construct a CalGray color space. Returns NULL if unsuccessful. + static GfxColorSpace *parse(Array *arr); + + virtual void getGray(GfxColor *color, GfxGray *gray); + virtual void getRGB(GfxColor *color, GfxRGB *rgb); + virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); + + virtual int getNComps() { return 1; } + virtual void getDefaultColor(GfxColor *color); + + // CalGray-specific access. + double getWhiteX() { return whiteX; } + double getWhiteY() { return whiteY; } + double getWhiteZ() { return whiteZ; } + double getBlackX() { return blackX; } + double getBlackY() { return blackY; } + double getBlackZ() { return blackZ; } + double getGamma() { return gamma; } + +private: + + double whiteX, whiteY, whiteZ; // white point + double blackX, blackY, blackZ; // black point + double gamma; // gamma value + double kr, kg, kb; // gamut mapping mulitpliers + void getXYZ(GfxColor *color, double *pX, double *pY, double *pZ); +}; + +//------------------------------------------------------------------------ +// GfxDeviceRGBColorSpace +//------------------------------------------------------------------------ + +class GfxDeviceRGBColorSpace: public GfxColorSpace { +public: + + GfxDeviceRGBColorSpace(); + virtual ~GfxDeviceRGBColorSpace(); + virtual GfxColorSpace *copy(); + virtual GfxColorSpaceMode getMode() { return csDeviceRGB; } + + virtual void getGray(GfxColor *color, GfxGray *gray); + virtual void getRGB(GfxColor *color, GfxRGB *rgb); + virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); + virtual void getGrayLine(Guchar *in, Guchar *out, int length); + virtual void getRGBLine(Guchar *in, unsigned int *out, int length); + virtual void getRGBLine(Guchar *in, Guchar *out, int length); + virtual void getRGBXLine(Guchar *in, Guchar *out, int length); + + virtual GBool useGetRGBLine() { return gTrue; } + virtual GBool useGetGrayLine() { return gTrue; } + + virtual int getNComps() { return 3; } + virtual void getDefaultColor(GfxColor *color); + +private: +}; + +//------------------------------------------------------------------------ +// GfxCalRGBColorSpace +//------------------------------------------------------------------------ + +class GfxCalRGBColorSpace: public GfxColorSpace { +public: + + GfxCalRGBColorSpace(); + virtual ~GfxCalRGBColorSpace(); + virtual GfxColorSpace *copy(); + virtual GfxColorSpaceMode getMode() { return csCalRGB; } + + // Construct a CalRGB color space. Returns NULL if unsuccessful. + static GfxColorSpace *parse(Array *arr); + + virtual void getGray(GfxColor *color, GfxGray *gray); + virtual void getRGB(GfxColor *color, GfxRGB *rgb); + virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); + + virtual int getNComps() { return 3; } + virtual void getDefaultColor(GfxColor *color); + + // CalRGB-specific access. + double getWhiteX() { return whiteX; } + double getWhiteY() { return whiteY; } + double getWhiteZ() { return whiteZ; } + double getBlackX() { return blackX; } + double getBlackY() { return blackY; } + double getBlackZ() { return blackZ; } + double getGammaR() { return gammaR; } + double getGammaG() { return gammaG; } + double getGammaB() { return gammaB; } + double *getMatrix() { return mat; } + +private: + + double whiteX, whiteY, whiteZ; // white point + double blackX, blackY, blackZ; // black point + double gammaR, gammaG, gammaB; // gamma values + double mat[9]; // ABC -> XYZ transform matrix + double kr, kg, kb; // gamut mapping mulitpliers + void getXYZ(GfxColor *color, double *pX, double *pY, double *pZ); +}; + +//------------------------------------------------------------------------ +// GfxDeviceCMYKColorSpace +//------------------------------------------------------------------------ + +class GfxDeviceCMYKColorSpace: public GfxColorSpace { +public: + + GfxDeviceCMYKColorSpace(); + virtual ~GfxDeviceCMYKColorSpace(); + virtual GfxColorSpace *copy(); + virtual GfxColorSpaceMode getMode() { return csDeviceCMYK; } + + virtual void getGray(GfxColor *color, GfxGray *gray); + virtual void getRGB(GfxColor *color, GfxRGB *rgb); + virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); + virtual void getRGBLine(Guchar *in, unsigned int *out, int length); + virtual void getRGBLine(Guchar *, Guchar *out, int length); + virtual void getRGBXLine(Guchar *in, Guchar *out, int length); + virtual GBool useGetRGBLine() { return gTrue; } + + virtual int getNComps() { return 4; } + virtual void getDefaultColor(GfxColor *color); + +private: +}; + +//------------------------------------------------------------------------ +// GfxLabColorSpace +//------------------------------------------------------------------------ + +class GfxLabColorSpace: public GfxColorSpace { +public: + + GfxLabColorSpace(); + virtual ~GfxLabColorSpace(); + virtual GfxColorSpace *copy(); + virtual GfxColorSpaceMode getMode() { return csLab; } + + // Construct a Lab color space. Returns NULL if unsuccessful. + static GfxColorSpace *parse(Array *arr); + + virtual void getGray(GfxColor *color, GfxGray *gray); + virtual void getRGB(GfxColor *color, GfxRGB *rgb); + virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); + + virtual int getNComps() { return 3; } + virtual void getDefaultColor(GfxColor *color); + + virtual void getDefaultRanges(double *decodeLow, double *decodeRange, + int maxImgPixel); + + // Lab-specific access. + double getWhiteX() { return whiteX; } + double getWhiteY() { return whiteY; } + double getWhiteZ() { return whiteZ; } + double getBlackX() { return blackX; } + double getBlackY() { return blackY; } + double getBlackZ() { return blackZ; } + double getAMin() { return aMin; } + double getAMax() { return aMax; } + double getBMin() { return bMin; } + double getBMax() { return bMax; } + +private: + + double whiteX, whiteY, whiteZ; // white point + double blackX, blackY, blackZ; // black point + double aMin, aMax, bMin, bMax; // range for the a and b components + double kr, kg, kb; // gamut mapping mulitpliers + void getXYZ(GfxColor *color, double *pX, double *pY, double *pZ); +}; + +//------------------------------------------------------------------------ +// GfxICCBasedColorSpace +//------------------------------------------------------------------------ + +class GfxICCBasedColorSpace: public GfxColorSpace { +public: + + GfxICCBasedColorSpace(int nCompsA, GfxColorSpace *altA, + Ref *iccProfileStreamA); + virtual ~GfxICCBasedColorSpace(); + virtual GfxColorSpace *copy(); + virtual GfxColorSpaceMode getMode() { return csICCBased; } + + // Construct an ICCBased color space. Returns NULL if unsuccessful. + static GfxColorSpace *parse(Array *arr, Gfx *gfx); + + virtual void getGray(GfxColor *color, GfxGray *gray); + virtual void getRGB(GfxColor *color, GfxRGB *rgb); + virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); + virtual void getRGBLine(Guchar *in, unsigned int *out, int length); + virtual void getRGBLine(Guchar *in, Guchar *out, int length); + virtual void getRGBXLine(Guchar *in, Guchar *out, int length); + + virtual GBool useGetRGBLine(); + + virtual int getNComps() { return nComps; } + virtual void getDefaultColor(GfxColor *color); + + virtual void getDefaultRanges(double *decodeLow, double *decodeRange, + int maxImgPixel); + + // ICCBased-specific access. + GfxColorSpace *getAlt() { return alt; } + +private: + + int nComps; // number of color components (1, 3, or 4) + GfxColorSpace *alt; // alternate color space + double rangeMin[4]; // min values for each component + double rangeMax[4]; // max values for each component + Ref iccProfileStream; // the ICC profile +#ifdef USE_CMS + GfxColorTransform *transform; + GfxColorTransform *lineTransform; // color transform for line +#endif +}; +//------------------------------------------------------------------------ +// GfxIndexedColorSpace +//------------------------------------------------------------------------ + +class GfxIndexedColorSpace: public GfxColorSpace { +public: + + GfxIndexedColorSpace(GfxColorSpace *baseA, int indexHighA); + virtual ~GfxIndexedColorSpace(); + virtual GfxColorSpace *copy(); + virtual GfxColorSpaceMode getMode() { return csIndexed; } + + // Construct a Lab color space. Returns NULL if unsuccessful. + static GfxColorSpace *parse(Array *arr, Gfx *gfx); + + virtual void getGray(GfxColor *color, GfxGray *gray); + virtual void getRGB(GfxColor *color, GfxRGB *rgb); + virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); + virtual void getRGBLine(Guchar *in, unsigned int *out, int length); + virtual void getRGBLine(Guchar *in, Guchar *out, int length); + virtual void getRGBXLine(Guchar *in, Guchar *out, int length); + + virtual GBool useGetRGBLine() { return gTrue; } + + virtual int getNComps() { return 1; } + virtual void getDefaultColor(GfxColor *color); + + virtual void getDefaultRanges(double *decodeLow, double *decodeRange, + int maxImgPixel); + + // Indexed-specific access. + GfxColorSpace *getBase() { return base; } + int getIndexHigh() { return indexHigh; } + Guchar *getLookup() { return lookup; } + GfxColor *mapColorToBase(GfxColor *color, GfxColor *baseColor); + +private: + + GfxColorSpace *base; // base color space + int indexHigh; // max pixel value + Guchar *lookup; // lookup table +}; + +//------------------------------------------------------------------------ +// GfxSeparationColorSpace +//------------------------------------------------------------------------ + +class GfxSeparationColorSpace: public GfxColorSpace { +public: + + GfxSeparationColorSpace(GooString *nameA, GfxColorSpace *altA, + Function *funcA); + virtual ~GfxSeparationColorSpace(); + virtual GfxColorSpace *copy(); + virtual GfxColorSpaceMode getMode() { return csSeparation; } + + // Construct a Separation color space. Returns NULL if unsuccessful. + static GfxColorSpace *parse(Array *arr, Gfx *gfx); + + virtual void getGray(GfxColor *color, GfxGray *gray); + virtual void getRGB(GfxColor *color, GfxRGB *rgb); + virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); + + virtual int getNComps() { return 1; } + virtual void getDefaultColor(GfxColor *color); + + virtual GBool isNonMarking() { return nonMarking; } + + // Separation-specific access. + GooString *getName() { return name; } + GfxColorSpace *getAlt() { return alt; } + Function *getFunc() { return func; } + +private: + + GooString *name; // colorant name + GfxColorSpace *alt; // alternate color space + Function *func; // tint transform (into alternate color space) + GBool nonMarking; +}; + +//------------------------------------------------------------------------ +// GfxDeviceNColorSpace +//------------------------------------------------------------------------ + +class GfxDeviceNColorSpace: public GfxColorSpace { +public: + + GfxDeviceNColorSpace(int nCompsA, GfxColorSpace *alt, Function *func); + virtual ~GfxDeviceNColorSpace(); + virtual GfxColorSpace *copy(); + virtual GfxColorSpaceMode getMode() { return csDeviceN; } + + // Construct a DeviceN color space. Returns NULL if unsuccessful. + static GfxColorSpace *parse(Array *arr, Gfx *gfx); + + virtual void getGray(GfxColor *color, GfxGray *gray); + virtual void getRGB(GfxColor *color, GfxRGB *rgb); + virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); + + virtual int getNComps() { return nComps; } + virtual void getDefaultColor(GfxColor *color); + + virtual GBool isNonMarking() { return nonMarking; } + + // DeviceN-specific access. + GooString *getColorantName(int i) { return names[i]; } + GfxColorSpace *getAlt() { return alt; } + Function *getTintTransformFunc() { return func; } + +private: + + int nComps; // number of components + GooString // colorant names + *names[gfxColorMaxComps]; + GfxColorSpace *alt; // alternate color space + Function *func; // tint transform (into alternate color space) + GBool nonMarking; +}; + +//------------------------------------------------------------------------ +// GfxPatternColorSpace +//------------------------------------------------------------------------ + +class GfxPatternColorSpace: public GfxColorSpace { +public: + + GfxPatternColorSpace(GfxColorSpace *underA); + virtual ~GfxPatternColorSpace(); + virtual GfxColorSpace *copy(); + virtual GfxColorSpaceMode getMode() { return csPattern; } + + // Construct a Pattern color space. Returns NULL if unsuccessful. + static GfxColorSpace *parse(Array *arr, Gfx *gfx); + + virtual void getGray(GfxColor *color, GfxGray *gray); + virtual void getRGB(GfxColor *color, GfxRGB *rgb); + virtual void getCMYK(GfxColor *color, GfxCMYK *cmyk); + + virtual int getNComps() { return 0; } + virtual void getDefaultColor(GfxColor *color); + + // Pattern-specific access. + GfxColorSpace *getUnder() { return under; } + +private: + + GfxColorSpace *under; // underlying color space (for uncolored + // patterns) +}; + +//------------------------------------------------------------------------ +// GfxPattern +//------------------------------------------------------------------------ + +class GfxPattern { +public: + + GfxPattern(int typeA); + virtual ~GfxPattern(); + + static GfxPattern *parse(Object *obj, Gfx *gfx); + + virtual GfxPattern *copy() = 0; + + int getType() { return type; } + +private: + + int type; +}; + +//------------------------------------------------------------------------ +// GfxTilingPattern +//------------------------------------------------------------------------ + +class GfxTilingPattern: public GfxPattern { +public: + + static GfxTilingPattern *parse(Object *patObj); + virtual ~GfxTilingPattern(); + + virtual GfxPattern *copy(); + + int getPaintType() { return paintType; } + int getTilingType() { return tilingType; } + double *getBBox() { return bbox; } + double getXStep() { return xStep; } + double getYStep() { return yStep; } + Dict *getResDict() + { return resDict.isDict() ? resDict.getDict() : (Dict *)NULL; } + double *getMatrix() { return matrix; } + Object *getContentStream() { return &contentStream; } + +private: + + GfxTilingPattern(int paintTypeA, int tilingTypeA, + double *bboxA, double xStepA, double yStepA, + Object *resDictA, double *matrixA, + Object *contentStreamA); + + int paintType; + int tilingType; + double bbox[4]; + double xStep, yStep; + Object resDict; + double matrix[6]; + Object contentStream; +}; + +//------------------------------------------------------------------------ +// GfxShadingPattern +//------------------------------------------------------------------------ + +class GfxShadingPattern: public GfxPattern { +public: + + static GfxShadingPattern *parse(Object *patObj, Gfx *gfx); + virtual ~GfxShadingPattern(); + + virtual GfxPattern *copy(); + + GfxShading *getShading() { return shading; } + double *getMatrix() { return matrix; } + +private: + + GfxShadingPattern(GfxShading *shadingA, double *matrixA); + + GfxShading *shading; + double matrix[6]; +}; + +//------------------------------------------------------------------------ +// GfxShading +//------------------------------------------------------------------------ + +class GfxShading { +public: + + GfxShading(int typeA); + GfxShading(GfxShading *shading); + virtual ~GfxShading(); + + static GfxShading *parse(Object *obj, Gfx *gfx); + + virtual GfxShading *copy() = 0; + + int getType() { return type; } + GfxColorSpace *getColorSpace() { return colorSpace; } + GfxColor *getBackground() { return &background; } + GBool getHasBackground() { return hasBackground; } + void getBBox(double *xMinA, double *yMinA, double *xMaxA, double *yMaxA) + { *xMinA = xMin; *yMinA = yMin; *xMaxA = xMax; *yMaxA = yMax; } + GBool getHasBBox() { return hasBBox; } + +protected: + + GBool init(Dict *dict, Gfx *gfx); + + int type; + GfxColorSpace *colorSpace; + GfxColor background; + GBool hasBackground; + double xMin, yMin, xMax, yMax; + GBool hasBBox; +}; + +//------------------------------------------------------------------------ +// GfxUnivariateShading +//------------------------------------------------------------------------ + +class GfxUnivariateShading: public GfxShading { +public: + + GfxUnivariateShading(int typeA, + double t0A, double t1A, + Function **funcsA, int nFuncsA, + GBool extend0A, GBool extend1A); + GfxUnivariateShading(GfxUnivariateShading *shading); + virtual ~GfxUnivariateShading(); + + double getDomain0() { return t0; } + double getDomain1() { return t1; } + GBool getExtend0() { return extend0; } + GBool getExtend1() { return extend1; } + int getNFuncs() { return nFuncs; } + Function *getFunc(int i) { return funcs[i]; } + void getColor(double t, GfxColor *color); + + void setupCache(const Matrix *ctm, + double xMin, double yMin, + double xMax, double yMax); + + virtual void getParameterRange(double *lower, double *upper, + double xMin, double yMin, + double xMax, double yMax) = 0; + + virtual double getDistance(double tMin, double tMax) = 0; + +private: + + double t0, t1; + Function *funcs[gfxColorMaxComps]; + int nFuncs; + GBool extend0, extend1; + + int cacheSize, lastMatch; + double *cacheBounds; + double *cacheCoeff; + double *cacheValues; +}; + +//------------------------------------------------------------------------ +// GfxFunctionShading +//------------------------------------------------------------------------ + +class GfxFunctionShading: public GfxShading { +public: + + GfxFunctionShading(double x0A, double y0A, + double x1A, double y1A, + double *matrixA, + Function **funcsA, int nFuncsA); + GfxFunctionShading(GfxFunctionShading *shading); + virtual ~GfxFunctionShading(); + + static GfxFunctionShading *parse(Dict *dict, Gfx *gfx); + + virtual GfxShading *copy(); + + void getDomain(double *x0A, double *y0A, double *x1A, double *y1A) + { *x0A = x0; *y0A = y0; *x1A = x1; *y1A = y1; } + double *getMatrix() { return matrix; } + int getNFuncs() { return nFuncs; } + Function *getFunc(int i) { return funcs[i]; } + void getColor(double x, double y, GfxColor *color); + +private: + + double x0, y0, x1, y1; + double matrix[6]; + Function *funcs[gfxColorMaxComps]; + int nFuncs; +}; + +//------------------------------------------------------------------------ +// GfxAxialShading +//------------------------------------------------------------------------ + +class GfxAxialShading: public GfxUnivariateShading { +public: + + GfxAxialShading(double x0A, double y0A, + double x1A, double y1A, + double t0A, double t1A, + Function **funcsA, int nFuncsA, + GBool extend0A, GBool extend1A); + GfxAxialShading(GfxAxialShading *shading); + virtual ~GfxAxialShading(); + + static GfxAxialShading *parse(Dict *dict, Gfx *gfx); + + virtual GfxShading *copy(); + + void getCoords(double *x0A, double *y0A, double *x1A, double *y1A) + { *x0A = x0; *y0A = y0; *x1A = x1; *y1A = y1; } + + virtual void getParameterRange(double *lower, double *upper, + double xMin, double yMin, + double xMax, double yMax); + + virtual double getDistance(double tMin, double tMax); + +private: + + double x0, y0, x1, y1; +}; + +//------------------------------------------------------------------------ +// GfxRadialShading +//------------------------------------------------------------------------ + +class GfxRadialShading: public GfxUnivariateShading { +public: + + GfxRadialShading(double x0A, double y0A, double r0A, + double x1A, double y1A, double r1A, + double t0A, double t1A, + Function **funcsA, int nFuncsA, + GBool extend0A, GBool extend1A); + GfxRadialShading(GfxRadialShading *shading); + virtual ~GfxRadialShading(); + + static GfxRadialShading *parse(Dict *dict, Gfx *gfx); + + virtual GfxShading *copy(); + + void getCoords(double *x0A, double *y0A, double *r0A, + double *x1A, double *y1A, double *r1A) + { *x0A = x0; *y0A = y0; *r0A = r0; *x1A = x1; *y1A = y1; *r1A = r1; } + + virtual void getParameterRange(double *lower, double *upper, + double xMin, double yMin, + double xMax, double yMax); + + virtual double getDistance(double tMin, double tMax); + +private: + + double x0, y0, r0, x1, y1, r1; +}; + +//------------------------------------------------------------------------ +// GfxGouraudTriangleShading +//------------------------------------------------------------------------ + +struct GfxGouraudVertex { + double x, y; + GfxColor color; +}; + +class GfxGouraudTriangleShading: public GfxShading { +public: + + GfxGouraudTriangleShading(int typeA, + GfxGouraudVertex *verticesA, int nVerticesA, + int (*trianglesA)[3], int nTrianglesA, + Function **funcsA, int nFuncsA); + GfxGouraudTriangleShading(GfxGouraudTriangleShading *shading); + virtual ~GfxGouraudTriangleShading(); + + static GfxGouraudTriangleShading *parse(int typeA, Dict *dict, Stream *str, Gfx *gfx); + + virtual GfxShading *copy(); + + int getNTriangles() { return nTriangles; } + + bool isParameterized() const { return nFuncs > 0; } + + /** + * @precondition isParameterized() == true + */ + double getParameterDomainMin() const { assert(isParameterized()); return funcs[0]->getDomainMin(0); } + + /** + * @precondition isParameterized() == true + */ + double getParameterDomainMax() const { assert(isParameterized()); return funcs[0]->getDomainMax(0); } + + /** + * @precondition isParameterized() == false + */ + void getTriangle(int i, double *x0, double *y0, GfxColor *color0, + double *x1, double *y1, GfxColor *color1, + double *x2, double *y2, GfxColor *color2); + + /** + * Variant for functions. + * + * @precondition isParameterized() == true + */ + void getTriangle(int i, double *x0, double *y0, double *color0, + double *x1, double *y1, double *color1, + double *x2, double *y2, double *color2); + + void getParameterizedColor(double t, GfxColor *color); + +private: + + GfxGouraudVertex *vertices; + int nVertices; + int (*triangles)[3]; + int nTriangles; + Function *funcs[gfxColorMaxComps]; + int nFuncs; +}; + +//------------------------------------------------------------------------ +// GfxPatchMeshShading +//------------------------------------------------------------------------ + +/** + * A tensor product cubic bezier patch consisting of 4x4 points and 4 color + * values. + * + * See the Shading Type 7 specifications. Note that Shading Type 6 is also + * represented using GfxPatch. + */ +struct GfxPatch { + /** + * Represents a single color value for the patch. + */ + struct ColorValue { + /** + * For parameterized patches, only element 0 is valid; it contains + * the single parameter. + * + * For non-parameterized patches, c contains all color components + * as decoded from the input stream. In this case, you will need to + * use dblToCol() before assigning them to GfxColor. + */ + double c[gfxColorMaxComps]; + }; + + double x[4][4]; + double y[4][4]; + ColorValue color[2][2]; +}; + +class GfxPatchMeshShading: public GfxShading { +public: + + GfxPatchMeshShading(int typeA, GfxPatch *patchesA, int nPatchesA, + Function **funcsA, int nFuncsA); + GfxPatchMeshShading(GfxPatchMeshShading *shading); + virtual ~GfxPatchMeshShading(); + + static GfxPatchMeshShading *parse(int typeA, Dict *dict, Stream *str, Gfx *gfx); + + virtual GfxShading *copy(); + + int getNPatches() { return nPatches; } + GfxPatch *getPatch(int i) { return &patches[i]; } + + bool isParameterized() const { return nFuncs > 0; } + + /** + * @precondition isParameterized() == true + */ + double getParameterDomainMin() const { assert(isParameterized()); return funcs[0]->getDomainMin(0); } + + /** + * @precondition isParameterized() == true + */ + double getParameterDomainMax() const { assert(isParameterized()); return funcs[0]->getDomainMax(0); } + + void getParameterizedColor(double t, GfxColor *color); + +private: + + GfxPatch *patches; + int nPatches; + Function *funcs[gfxColorMaxComps]; + int nFuncs; +}; + +//------------------------------------------------------------------------ +// GfxImageColorMap +//------------------------------------------------------------------------ + +class GfxImageColorMap { +public: + + // Constructor. + GfxImageColorMap(int bitsA, Object *decode, GfxColorSpace *colorSpaceA); + + // Destructor. + ~GfxImageColorMap(); + + // Return a copy of this color map. + GfxImageColorMap *copy() { return new GfxImageColorMap(this); } + + // Is color map valid? + GBool isOk() { return ok; } + + // Get the color space. + GfxColorSpace *getColorSpace() { return colorSpace; } + + // Get stream decoding info. + int getNumPixelComps() { return nComps; } + int getBits() { return bits; } + + // Get decode table. + double getDecodeLow(int i) { return decodeLow[i]; } + double getDecodeHigh(int i) { return decodeLow[i] + decodeRange[i]; } + + bool useRGBLine() { return (colorSpace2 && colorSpace2->useGetRGBLine ()) || (!colorSpace2 && colorSpace->useGetRGBLine ()); } + + // Convert an image pixel to a color. + void getGray(Guchar *x, GfxGray *gray); + void getRGB(Guchar *x, GfxRGB *rgb); + void getRGBLine(Guchar *in, unsigned int *out, int length); + void getRGBLine(Guchar *in, Guchar *out, int length); + void getRGBXLine(Guchar *in, Guchar *out, int length); + void getGrayLine(Guchar *in, Guchar *out, int length); + void getCMYK(Guchar *x, GfxCMYK *cmyk); + void getColor(Guchar *x, GfxColor *color); + +private: + + GfxImageColorMap(GfxImageColorMap *colorMap); + + GfxColorSpace *colorSpace; // the image color space + int bits; // bits per component + int nComps; // number of components in a pixel + GfxColorSpace *colorSpace2; // secondary color space + int nComps2; // number of components in colorSpace2 + GfxColorComp * // lookup table + lookup[gfxColorMaxComps]; + Guchar *byte_lookup; + double // minimum values for each component + decodeLow[gfxColorMaxComps]; + double // max - min value for each component + decodeRange[gfxColorMaxComps]; + GBool ok; +}; + +//------------------------------------------------------------------------ +// GfxSubpath and GfxPath +//------------------------------------------------------------------------ + +class GfxSubpath { +public: + + // Constructor. + GfxSubpath(double x1, double y1); + + // Destructor. + ~GfxSubpath(); + + // Copy. + GfxSubpath *copy() { return new GfxSubpath(this); } + + // Get points. + int getNumPoints() { return n; } + double getX(int i) { return x[i]; } + double getY(int i) { return y[i]; } + GBool getCurve(int i) { return curve[i]; } + + void setX(int i, double a) { x[i] = a; } + void setY(int i, double a) { y[i] = a; } + + // Get last point. + double getLastX() { return x[n-1]; } + double getLastY() { return y[n-1]; } + + // Add a line segment. + void lineTo(double x1, double y1); + + // Add a Bezier curve. + void curveTo(double x1, double y1, double x2, double y2, + double x3, double y3); + + // Close the subpath. + void close(); + GBool isClosed() { return closed; } + + // Add (<dx>, <dy>) to each point in the subpath. + void offset(double dx, double dy); + +private: + + double *x, *y; // points + GBool *curve; // curve[i] => point i is a control point + // for a Bezier curve + int n; // number of points + int size; // size of x/y arrays + GBool closed; // set if path is closed + + GfxSubpath(GfxSubpath *subpath); +}; + +class GfxPath { +public: + + // Constructor. + GfxPath(); + + // Destructor. + ~GfxPath(); + + // Copy. + GfxPath *copy() + { return new GfxPath(justMoved, firstX, firstY, subpaths, n, size); } + + // Is there a current point? + GBool isCurPt() { return n > 0 || justMoved; } + + // Is the path non-empty, i.e., is there at least one segment? + GBool isPath() { return n > 0; } + + // Get subpaths. + int getNumSubpaths() { return n; } + GfxSubpath *getSubpath(int i) { return subpaths[i]; } + + // Get last point on last subpath. + double getLastX() { return subpaths[n-1]->getLastX(); } + double getLastY() { return subpaths[n-1]->getLastY(); } + + // Move the current point. + void moveTo(double x, double y); + + // Add a segment to the last subpath. + void lineTo(double x, double y); + + // Add a Bezier curve to the last subpath + void curveTo(double x1, double y1, double x2, double y2, + double x3, double y3); + + // Close the last subpath. + void close(); + + // Append <path> to <this>. + void append(GfxPath *path); + + // Add (<dx>, <dy>) to each point in the path. + void offset(double dx, double dy); + +private: + + GBool justMoved; // set if a new subpath was just started + double firstX, firstY; // first point in new subpath + GfxSubpath **subpaths; // subpaths + int n; // number of subpaths + int size; // size of subpaths array + + GfxPath(GBool justMoved1, double firstX1, double firstY1, + GfxSubpath **subpaths1, int n1, int size1); +}; + +//------------------------------------------------------------------------ +// GfxState +//------------------------------------------------------------------------ + +class GfxState { +public: + /** + * When GfxState::getReusablePath() is invoked, the currently active + * path is taken per reference and its coordinates can be re-edited. + * + * A ReusablePathIterator is intented to reduce overhead when the same + * path type is used a lot of times, only with different coordinates. It + * allows just to update the coordinates (occuring in the same order as + * in the original path). + */ + class ReusablePathIterator { + public: + /** + * Creates the ReusablePathIterator. This should only be done from + * GfxState::getReusablePath(). + * + * @param path the path as it is used so far. Changing this path, + * deleting it or starting a new path from scratch will most likely + * invalidate the iterator (and may cause serious problems). Make + * sure the path's memory structure is not changed during the + * lifetime of the ReusablePathIterator. + */ + ReusablePathIterator( GfxPath* path ); + + /** + * Returns true if and only if the current iterator position is + * beyond the last valid point. + * + * A call to setCoord() will be undefined. + */ + bool isEnd() const; + + /** + * Advances the iterator. + */ + void next(); + + /** + * Updates the coordinates associated to the current iterator + * position. + */ + void setCoord( double x, double y ); + + /** + * Resets the iterator. + */ + void reset(); + private: + GfxPath *path; + int subPathOff; + + int coordOff; + int numCoords; + + GfxSubpath *curSubPath; + }; + + // Construct a default GfxState, for a device with resolution <hDPI> + // x <vDPI>, page box <pageBox>, page rotation <rotateA>, and + // coordinate system specified by <upsideDown>. + GfxState(double hDPIA, double vDPIA, PDFRectangle *pageBox, + int rotateA, GBool upsideDown); + + // Destructor. + ~GfxState(); + + // Copy. + GfxState *copy() { return new GfxState(this); } + + // Accessors. + double getHDPI() { return hDPI; } + double getVDPI() { return vDPI; } + double *getCTM() { return ctm; } + void getCTM(Matrix *m) { memcpy (m->m, ctm, sizeof m->m); } + double getX1() { return px1; } + double getY1() { return py1; } + double getX2() { return px2; } + double getY2() { return py2; } + double getPageWidth() { return pageWidth; } + double getPageHeight() { return pageHeight; } + int getRotate() { return rotate; } + GfxColor *getFillColor() { return &fillColor; } + GfxColor *getStrokeColor() { return &strokeColor; } + void getFillGray(GfxGray *gray) + { fillColorSpace->getGray(&fillColor, gray); } + void getStrokeGray(GfxGray *gray) + { strokeColorSpace->getGray(&strokeColor, gray); } + void getFillRGB(GfxRGB *rgb) + { fillColorSpace->getRGB(&fillColor, rgb); } + void getStrokeRGB(GfxRGB *rgb) + { strokeColorSpace->getRGB(&strokeColor, rgb); } + void getFillCMYK(GfxCMYK *cmyk) + { fillColorSpace->getCMYK(&fillColor, cmyk); } + void getStrokeCMYK(GfxCMYK *cmyk) + { strokeColorSpace->getCMYK(&strokeColor, cmyk); } + GfxColorSpace *getFillColorSpace() { return fillColorSpace; } + GfxColorSpace *getStrokeColorSpace() { return strokeColorSpace; } + GfxPattern *getFillPattern() { return fillPattern; } + GfxPattern *getStrokePattern() { return strokePattern; } + GfxBlendMode getBlendMode() { return blendMode; } + double getFillOpacity() { return fillOpacity; } + double getStrokeOpacity() { return strokeOpacity; } + GBool getFillOverprint() { return fillOverprint; } + GBool getStrokeOverprint() { return strokeOverprint; } + int getOverprintMode() { return overprintMode; } + Function **getTransfer() { return transfer; } + double getLineWidth() { return lineWidth; } + void getLineDash(double **dash, int *length, double *start) + { *dash = lineDash; *length = lineDashLength; *start = lineDashStart; } + int getFlatness() { return flatness; } + int getLineJoin() { return lineJoin; } + int getLineCap() { return lineCap; } + double getMiterLimit() { return miterLimit; } + GBool getStrokeAdjust() { return strokeAdjust; } + GBool getAlphaIsShape() { return alphaIsShape; } + GBool getTextKnockout() { return textKnockout; } + GfxFont *getFont() { return font; } + double getFontSize() { return fontSize; } + double *getTextMat() { return textMat; } + double getCharSpace() { return charSpace; } + double getWordSpace() { return wordSpace; } + double getHorizScaling() { return horizScaling; } + double getLeading() { return leading; } + double getRise() { return rise; } + int getRender() { return render; } + GfxPath *getPath() { return path; } + void setPath(GfxPath *pathA); + double getCurX() { return curX; } + double getCurY() { return curY; } + void getClipBBox(double *xMin, double *yMin, double *xMax, double *yMax) + { *xMin = clipXMin; *yMin = clipYMin; *xMax = clipXMax; *yMax = clipYMax; } + void getUserClipBBox(double *xMin, double *yMin, double *xMax, double *yMax); + double getLineX() { return lineX; } + double getLineY() { return lineY; } + + // Is there a current point/path? + GBool isCurPt() { return path->isCurPt(); } + GBool isPath() { return path->isPath(); } + + // Transforms. + void transform(double x1, double y1, double *x2, double *y2) + { *x2 = ctm[0] * x1 + ctm[2] * y1 + ctm[4]; + *y2 = ctm[1] * x1 + ctm[3] * y1 + ctm[5]; } + void transformDelta(double x1, double y1, double *x2, double *y2) + { *x2 = ctm[0] * x1 + ctm[2] * y1; + *y2 = ctm[1] * x1 + ctm[3] * y1; } + void textTransform(double x1, double y1, double *x2, double *y2) + { *x2 = textMat[0] * x1 + textMat[2] * y1 + textMat[4]; + *y2 = textMat[1] * x1 + textMat[3] * y1 + textMat[5]; } + void textTransformDelta(double x1, double y1, double *x2, double *y2) + { *x2 = textMat[0] * x1 + textMat[2] * y1; + *y2 = textMat[1] * x1 + textMat[3] * y1; } + double transformWidth(double w); + double getTransformedLineWidth() + { return transformWidth(lineWidth); } + double getTransformedFontSize(); + void getFontTransMat(double *m11, double *m12, double *m21, double *m22); + + // Change state parameters. + void setCTM(double a, double b, double c, + double d, double e, double f); + void concatCTM(double a, double b, double c, + double d, double e, double f); + void shiftCTM(double tx, double ty); + void setFillColorSpace(GfxColorSpace *colorSpace); + void setStrokeColorSpace(GfxColorSpace *colorSpace); + void setFillColor(GfxColor *color) { fillColor = *color; } + void setStrokeColor(GfxColor *color) { strokeColor = *color; } + void setFillPattern(GfxPattern *pattern); + void setStrokePattern(GfxPattern *pattern); + void setBlendMode(GfxBlendMode mode) { blendMode = mode; } + void setFillOpacity(double opac) { fillOpacity = opac; } + void setStrokeOpacity(double opac) { strokeOpacity = opac; } + void setFillOverprint(GBool op) { fillOverprint = op; } + void setStrokeOverprint(GBool op) { strokeOverprint = op; } + void setOverprintMode(int op) { overprintMode = op; } + void setTransfer(Function **funcs); + void setLineWidth(double width) { lineWidth = width; } + void setLineDash(double *dash, int length, double start); + void setFlatness(int flatness1) { flatness = flatness1; } + void setLineJoin(int lineJoin1) { lineJoin = lineJoin1; } + void setLineCap(int lineCap1) { lineCap = lineCap1; } + void setMiterLimit(double limit) { miterLimit = limit; } + void setStrokeAdjust(GBool sa) { strokeAdjust = sa; } + void setAlphaIsShape(GBool ais) { alphaIsShape = ais; } + void setTextKnockout(GBool tk) { textKnockout = tk; } + void setFont(GfxFont *fontA, double fontSizeA); + void setTextMat(double a, double b, double c, + double d, double e, double f) + { textMat[0] = a; textMat[1] = b; textMat[2] = c; + textMat[3] = d; textMat[4] = e; textMat[5] = f; } + void setCharSpace(double space) + { charSpace = space; } + void setWordSpace(double space) + { wordSpace = space; } + void setHorizScaling(double scale) + { horizScaling = 0.01 * scale; } + void setLeading(double leadingA) + { leading = leadingA; } + void setRise(double riseA) + { rise = riseA; } + void setRender(int renderA) + { render = renderA; } + + // Add to path. + void moveTo(double x, double y) + { path->moveTo(curX = x, curY = y); } + void lineTo(double x, double y) + { path->lineTo(curX = x, curY = y); } + void curveTo(double x1, double y1, double x2, double y2, + double x3, double y3) + { path->curveTo(x1, y1, x2, y2, curX = x3, curY = y3); } + void closePath() + { path->close(); curX = path->getLastX(); curY = path->getLastY(); } + void clearPath(); + + // Update clip region. + void clip(); + void clipToStrokePath(); + + // Text position. + void textSetPos(double tx, double ty) { lineX = tx; lineY = ty; } + void textMoveTo(double tx, double ty) + { lineX = tx; lineY = ty; textTransform(tx, ty, &curX, &curY); } + void textShift(double tx, double ty); + void shift(double dx, double dy); + + // Push/pop GfxState on/off stack. + GfxState *save(); + GfxState *restore(); + GBool hasSaves() { return saved != NULL; } + GBool isParentState(GfxState *state) { return saved == state || (saved && saved->isParentState(state)); } + + // Misc + GBool parseBlendMode(Object *obj, GfxBlendMode *mode); + + ReusablePathIterator *getReusablePath() { return new ReusablePathIterator(path); } +private: + + double hDPI, vDPI; // resolution + double ctm[6]; // coord transform matrix + double px1, py1, px2, py2; // page corners (user coords) + double pageWidth, pageHeight; // page size (pixels) + int rotate; // page rotation angle + + GfxColorSpace *fillColorSpace; // fill color space + GfxColorSpace *strokeColorSpace; // stroke color space + GfxColor fillColor; // fill color + GfxColor strokeColor; // stroke color + GfxPattern *fillPattern; // fill pattern + GfxPattern *strokePattern; // stroke pattern + GfxBlendMode blendMode; // transparency blend mode + double fillOpacity; // fill opacity + double strokeOpacity; // stroke opacity + GBool fillOverprint; // fill overprint + GBool strokeOverprint; // stroke overprint + int overprintMode; // overprint mode + Function *transfer[4]; // transfer function (entries may be: all + // NULL = identity; last three NULL = + // single function; all four non-NULL = + // R,G,B,gray functions) + + double lineWidth; // line width + double *lineDash; // line dash + int lineDashLength; + double lineDashStart; + int flatness; // curve flatness + int lineJoin; // line join style + int lineCap; // line cap style + double miterLimit; // line miter limit + GBool strokeAdjust; // stroke adjustment + GBool alphaIsShape; // alpha is shape + GBool textKnockout; // text knockout + + GfxFont *font; // font + double fontSize; // font size + double textMat[6]; // text matrix + double charSpace; // character spacing + double wordSpace; // word spacing + double horizScaling; // horizontal scaling + double leading; // text leading + double rise; // text rise + int render; // text rendering mode + + GfxPath *path; // array of path elements + double curX, curY; // current point (user coords) + double lineX, lineY; // start of current text line (text coords) + + double clipXMin, clipYMin, // bounding box for clip region + clipXMax, clipYMax; + + GfxState *saved; // next GfxState on stack + + GfxState(GfxState *state); +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxState_helpers.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxState_helpers.h new file mode 100644 index 00000000000..bc0024edd79 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/GfxState_helpers.h @@ -0,0 +1,82 @@ +//======================================================================== +// +// GfxState.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2009, 2011 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include "GfxState.h" + +static inline GfxColorComp clip01(GfxColorComp x) { + return (x < 0) ? 0 : (x > gfxColorComp1) ? gfxColorComp1 : x; +} + +static inline double clip01(double x) { + return (x < 0) ? 0 : (x > 1) ? 1 : x; +} + +static inline void cmykToRGBMatrixMultiplication(const double &c, const double &m, const double &y, const double &k, const double &c1, const double &m1, const double &y1, const double &k1, double &r, double &g, double &b) +{ + double x; + // this is a matrix multiplication, unrolled for performance + // C M Y K + x = c1 * m1 * y1 * k1; // 0 0 0 0 + r = g = b = x; + x = c1 * m1 * y1 * k; // 0 0 0 1 + r += 0.1373 * x; + g += 0.1216 * x; + b += 0.1255 * x; + x = c1 * m1 * y * k1; // 0 0 1 0 + r += x; + g += 0.9490 * x; + x = c1 * m1 * y * k; // 0 0 1 1 + r += 0.1098 * x; + g += 0.1020 * x; + x = c1 * m * y1 * k1; // 0 1 0 0 + r += 0.9255 * x; + b += 0.5490 * x; + x = c1 * m * y1 * k; // 0 1 0 1 + r += 0.1412 * x; + x = c1 * m * y * k1; // 0 1 1 0 + r += 0.9294 * x; + g += 0.1098 * x; + b += 0.1412 * x; + x = c1 * m * y * k; // 0 1 1 1 + r += 0.1333 * x; + x = c * m1 * y1 * k1; // 1 0 0 0 + g += 0.6784 * x; + b += 0.9373 * x; + x = c * m1 * y1 * k; // 1 0 0 1 + g += 0.0588 * x; + b += 0.1412 * x; + x = c * m1 * y * k1; // 1 0 1 0 + g += 0.6510 * x; + b += 0.3137 * x; + x = c * m1 * y * k; // 1 0 1 1 + g += 0.0745 * x; + x = c * m * y1 * k1; // 1 1 0 0 + r += 0.1804 * x; + g += 0.1922 * x; + b += 0.5725 * x; + x = c * m * y1 * k; // 1 1 0 1 + b += 0.0078 * x; + x = c * m * y * k1; // 1 1 1 0 + r += 0.2118 * x; + g += 0.2119 * x; + b += 0.2235 * x; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/GlobalParams.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/GlobalParams.cc new file mode 100644 index 00000000000..687fd2508f8 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/GlobalParams.cc @@ -0,0 +1,2026 @@ +//======================================================================== +// +// GlobalParams.cc +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Martin Kretzschmar <martink@gnome.org> +// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005, 2007-2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> +// Copyright (C) 2006, 2007 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> +// Copyright (C) 2006 Ed Catmur <ed@catmur.co.uk> +// Copyright (C) 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// Copyright (C) 2007, 2009 Jonathan Kew <jonathan_kew@sil.org> +// Copyright (C) 2009 Petr Gajdos <pgajdos@novell.com> +// Copyright (C) 2009, 2011 William Bader <williambader@hotmail.com> +// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> +// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2010 Patrick Spendrin <ps_ml@gmx.de> +// Copyright (C) 2010 Jakub Wilk <ubanus@users.sf.net> +// Copyright (C) 2011 Pino Toscano <pino@kde.org> +// Copyright (C) 2011 Koji Otani <sho@bbr.jp> +// Copyright (C) 2012 Yi Yang <ahyangyi@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <string.h> +#include <stdio.h> +#include <ctype.h> +#ifdef ENABLE_PLUGINS +# ifndef _WIN32 +# include <dlfcn.h> +# endif +#endif +#ifdef _WIN32 +# include <shlobj.h> +# include <mbstring.h> +#endif +#include "goo/gmem.h" +#include "goo/GooString.h" +#include "goo/GooList.h" +#include "goo/GooHash.h" +#include "goo/gfile.h" +#include "Error.h" +#include "NameToCharCode.h" +#include "CharCodeToUnicode.h" +#include "UnicodeMap.h" +#include "CMap.h" +#include "BuiltinFontTables.h" +#include "FontEncodingTables.h" +#ifdef ENABLE_PLUGINS +# include "XpdfPluginAPI.h" +#endif +#include "GlobalParams.h" +#include "GfxFont.h" + +#if WITH_FONTCONFIGURATION_FONTCONFIG +#include <fontconfig/fontconfig.h> +#endif + +#ifdef _WIN32 +# define strcasecmp stricmp +#else +# include <strings.h> +#endif + +#if MULTITHREADED +# define lockGlobalParams gLockMutex(&mutex) +# define lockUnicodeMapCache gLockMutex(&unicodeMapCacheMutex) +# define lockCMapCache gLockMutex(&cMapCacheMutex) +# define unlockGlobalParams gUnlockMutex(&mutex) +# define unlockUnicodeMapCache gUnlockMutex(&unicodeMapCacheMutex) +# define unlockCMapCache gUnlockMutex(&cMapCacheMutex) +#else +# define lockGlobalParams +# define lockUnicodeMapCache +# define lockCMapCache +# define unlockGlobalParams +# define unlockUnicodeMapCache +# define unlockCMapCache +#endif + +#ifndef FC_WEIGHT_BOOK +#define FC_WEIGHT_BOOK 75 +#endif + +#include "NameToUnicodeTable.h" +#include "UnicodeMapTables.h" +#include "UTF8.h" + +#ifdef ENABLE_PLUGINS +# ifdef _WIN32 +extern XpdfPluginVecTable xpdfPluginVecTable; +# endif +#endif + +//------------------------------------------------------------------------ + +#define cidToUnicodeCacheSize 4 +#define unicodeToUnicodeCacheSize 4 + +//------------------------------------------------------------------------ + +GlobalParams *globalParams = NULL; + +//------------------------------------------------------------------------ +// DisplayFontParam +//------------------------------------------------------------------------ + +DisplayFontParam::DisplayFontParam(GooString *nameA, + DisplayFontParamKind kindA) { + name = nameA; + kind = kindA; + switch (kind) { + case displayFontT1: + t1.fileName = NULL; + break; + case displayFontTT: + tt.fileName = NULL; + break; + } +} + +DisplayFontParam::~DisplayFontParam() { + delete name; + switch (kind) { + case displayFontT1: + if (t1.fileName) { + delete t1.fileName; + } + break; + case displayFontTT: + if (tt.fileName) { + delete tt.fileName; + } + break; + } +} + +#if ENABLE_RELOCATABLE && defined(_WIN32) + +/* search for data relative to where we are installed */ + +static HMODULE hmodule; + +extern "C" { +BOOL WINAPI +DllMain (HINSTANCE hinstDLL, + DWORD fdwReason, + LPVOID lpvReserved) +{ + switch (fdwReason) + { + case DLL_PROCESS_ATTACH: + hmodule = hinstDLL; + break; + } + + return TRUE; +} +} + +static char * +get_poppler_datadir (void) +{ + static char retval[MAX_PATH]; + static int beenhere = 0; + + unsigned char *p; + + if (beenhere) + return retval; + + if (!GetModuleFileName (hmodule, (CHAR *) retval, sizeof(retval) - 20)) + return POPPLER_DATADIR; + + p = _mbsrchr ((unsigned char *) retval, '\\'); + *p = '\0'; + p = _mbsrchr ((unsigned char *) retval, '\\'); + if (p) { + if (stricmp ((const char *) (p+1), "bin") == 0) + *p = '\0'; + } + strcat (retval, "\\share\\poppler"); + + beenhere = 1; + + return retval; +} + +#undef POPPLER_DATADIR +#define POPPLER_DATADIR get_poppler_datadir () + +#endif + +#ifdef _WIN32 + +//------------------------------------------------------------------------ +// WinFontInfo +//------------------------------------------------------------------------ + +class WinFontInfo: public DisplayFontParam { +public: + + GBool bold, italic; + + static WinFontInfo *make(GooString *nameA, GBool boldA, GBool italicA, + HKEY regKey, char *winFontDir); + WinFontInfo(GooString *nameA, GBool boldA, GBool italicA, + GooString *fileNameA); + virtual ~WinFontInfo(); + GBool equals(WinFontInfo *fi); +}; + +WinFontInfo *WinFontInfo::make(GooString *nameA, GBool boldA, GBool italicA, + HKEY regKey, char *winFontDir) { + GooString *regName; + GooString *fileNameA; + char buf[MAX_PATH]; + DWORD n; + char c; + int i; + + //----- find the font file + fileNameA = NULL; + regName = nameA->copy(); + if (boldA) { + regName->append(" Bold"); + } + if (italicA) { + regName->append(" Italic"); + } + regName->append(" (TrueType)"); + n = sizeof(buf); + if (RegQueryValueEx(regKey, regName->getCString(), NULL, NULL, + (LPBYTE)buf, &n) == ERROR_SUCCESS) { + fileNameA = new GooString(winFontDir); + fileNameA->append('\\')->append(buf); + } + delete regName; + if (!fileNameA) { + delete nameA; + return NULL; + } + + //----- normalize the font name + i = 0; + while (i < nameA->getLength()) { + c = nameA->getChar(i); + if (c == ' ' || c == ',' || c == '-') { + nameA->del(i); + } else { + ++i; + } + } + + return new WinFontInfo(nameA, boldA, italicA, fileNameA); +} + +WinFontInfo::WinFontInfo(GooString *nameA, GBool boldA, GBool italicA, + GooString *fileNameA): + DisplayFontParam(nameA, displayFontTT) +{ + bold = boldA; + italic = italicA; + tt.fileName = fileNameA; +} + +WinFontInfo::~WinFontInfo() { +} + +GBool WinFontInfo::equals(WinFontInfo *fi) { + return !name->cmp(fi->name) && bold == fi->bold && italic == fi->italic; +} + +//------------------------------------------------------------------------ +// WinFontList +//------------------------------------------------------------------------ + +class WinFontList { +public: + + WinFontList(char *winFontDirA); + ~WinFontList(); + WinFontInfo *find(GooString *font); + +private: + + void add(WinFontInfo *fi); + static int CALLBACK enumFunc1(CONST LOGFONT *font, + CONST TEXTMETRIC *metrics, + DWORD type, LPARAM data); + static int CALLBACK enumFunc2(CONST LOGFONT *font, + CONST TEXTMETRIC *metrics, + DWORD type, LPARAM data); + + GooList *fonts; // [WinFontInfo] + HDC dc; // (only used during enumeration) + HKEY regKey; // (only used during enumeration) + char *winFontDir; // (only used during enumeration) +}; + +WinFontList::WinFontList(char *winFontDirA) { + OSVERSIONINFO version; + char *path; + + fonts = new GooList(); + dc = GetDC(NULL); + winFontDir = winFontDirA; + version.dwOSVersionInfoSize = sizeof(version); + GetVersionEx(&version); + if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) { + path = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts\\"; + } else { + path = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Fonts\\"; + } + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, path, 0, + KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS, + ®Key) == ERROR_SUCCESS) { + EnumFonts(dc, NULL, &WinFontList::enumFunc1, (LPARAM)this); + RegCloseKey(regKey); + } + ReleaseDC(NULL, dc); +} + +WinFontList::~WinFontList() { + deleteGooList(fonts, WinFontInfo); +} + +void WinFontList::add(WinFontInfo *fi) { + int i; + + for (i = 0; i < fonts->getLength(); ++i) { + if (((WinFontInfo *)fonts->get(i))->equals(fi)) { + delete fi; + return; + } + } + fonts->append(fi); +} + +WinFontInfo *WinFontList::find(GooString *font) { + GooString *name; + GBool bold, italic; + WinFontInfo *fi; + char c; + int n, i; + + name = font->copy(); + + // remove space, comma, dash chars + i = 0; + while (i < name->getLength()) { + c = name->getChar(i); + if (c == ' ' || c == ',' || c == '-') { + name->del(i); + } else { + ++i; + } + } + n = name->getLength(); + + // remove trailing "MT" (Foo-MT, Foo-BoldMT, etc.) + if (!strcmp(name->getCString() + n - 2, "MT")) { + name->del(n - 2, 2); + n -= 2; + } + + // look for "Italic" + if (!strcmp(name->getCString() + n - 6, "Italic")) { + name->del(n - 6, 6); + italic = gTrue; + n -= 6; + } else { + italic = gFalse; + } + + // look for "Bold" + if (!strcmp(name->getCString() + n - 4, "Bold")) { + name->del(n - 4, 4); + bold = gTrue; + n -= 4; + } else { + bold = gFalse; + } + + // remove trailing "MT" (FooMT-Bold, etc.) + if (!strcmp(name->getCString() + n - 2, "MT")) { + name->del(n - 2, 2); + n -= 2; + } + + // remove trailing "PS" + if (!strcmp(name->getCString() + n - 2, "PS")) { + name->del(n - 2, 2); + n -= 2; + } + + // search for the font + fi = NULL; + for (i = 0; i < fonts->getLength(); ++i) { + fi = (WinFontInfo *)fonts->get(i); + if (!fi->name->cmp(name) && fi->bold == bold && fi->italic == italic) { + break; + } + fi = NULL; + } + + delete name; + return fi; +} + +int CALLBACK WinFontList::enumFunc1(CONST LOGFONT *font, + CONST TEXTMETRIC *metrics, + DWORD type, LPARAM data) { + WinFontList *fl = (WinFontList *)data; + + EnumFonts(fl->dc, font->lfFaceName, &WinFontList::enumFunc2, (LPARAM)fl); + return 1; +} + +int CALLBACK WinFontList::enumFunc2(CONST LOGFONT *font, + CONST TEXTMETRIC *metrics, + DWORD type, LPARAM data) { + WinFontList *fl = (WinFontList *)data; + WinFontInfo *fi; + + if (type & TRUETYPE_FONTTYPE) { + if ((fi = WinFontInfo::make(new GooString(font->lfFaceName), + font->lfWeight >= 600, + font->lfItalic ? gTrue : gFalse, + fl->regKey, fl->winFontDir))) { + fl->add(fi); + } + } + return 1; +} + +#endif // _WIN32 + +//------------------------------------------------------------------------ +// PSFontParam +//------------------------------------------------------------------------ + +PSFontParam::PSFontParam(GooString *pdfFontNameA, int wModeA, + GooString *psFontNameA, GooString *encodingA) { + pdfFontName = pdfFontNameA; + wMode = wModeA; + psFontName = psFontNameA; + encoding = encodingA; +} + +PSFontParam::~PSFontParam() { + delete pdfFontName; + delete psFontName; + if (encoding) { + delete encoding; + } +} + +#ifdef ENABLE_PLUGINS +//------------------------------------------------------------------------ +// Plugin +//------------------------------------------------------------------------ + +class Plugin { +public: + + static Plugin *load(char *type, char *name); + ~Plugin(); + +private: + +#ifdef _WIN32 + Plugin(HMODULE libA); + HMODULE lib; +#else + Plugin(void *dlA); + void *dl; +#endif +}; + +Plugin *Plugin::load(char *type, char *name) { + GooString *path; + Plugin *plugin; + XpdfPluginVecTable *vt; + XpdfBool (*xpdfInitPlugin)(void); +#ifdef _WIN32 + HMODULE libA; +#else + void *dlA; +#endif + + path = globalParams->getBaseDir(); + appendToPath(path, "plugins"); + appendToPath(path, type); + appendToPath(path, name); + +#ifdef _WIN32 + path->append(".dll"); + if (!(libA = LoadLibrary(path->getCString()))) { + error(-1, "Failed to load plugin '%s'", + path->getCString()); + goto err1; + } + if (!(vt = (XpdfPluginVecTable *) + GetProcAddress(libA, "xpdfPluginVecTable"))) { + error(-1, "Failed to find xpdfPluginVecTable in plugin '%s'", + path->getCString()); + goto err2; + } +#else + //~ need to deal with other extensions here + path->append(".so"); + if (!(dlA = dlopen(path->getCString(), RTLD_NOW))) { + error(-1, "Failed to load plugin '%s': %s", + path->getCString(), dlerror()); + goto err1; + } + if (!(vt = (XpdfPluginVecTable *)dlsym(dlA, "xpdfPluginVecTable"))) { + error(-1, "Failed to find xpdfPluginVecTable in plugin '%s'", + path->getCString()); + goto err2; + } +#endif + + if (vt->version != xpdfPluginVecTable.version) { + error(-1, "Plugin '%s' is wrong version", path->getCString()); + goto err2; + } + memcpy(vt, &xpdfPluginVecTable, sizeof(xpdfPluginVecTable)); + +#ifdef _WIN32 + if (!(xpdfInitPlugin = (XpdfBool (*)(void)) + GetProcAddress(libA, "xpdfInitPlugin"))) { + error(-1, "Failed to find xpdfInitPlugin in plugin '%s'", + path->getCString()); + goto err2; + } +#else + if (!(xpdfInitPlugin = (XpdfBool (*)(void))dlsym(dlA, "xpdfInitPlugin"))) { + error(-1, "Failed to find xpdfInitPlugin in plugin '%s'", + path->getCString()); + goto err2; + } +#endif + + if (!(*xpdfInitPlugin)()) { + error(-1, "Initialization of plugin '%s' failed", + path->getCString()); + goto err2; + } + +#ifdef _WIN32 + plugin = new Plugin(libA); +#else + plugin = new Plugin(dlA); +#endif + + delete path; + return plugin; + + err2: +#ifdef _WIN32 + FreeLibrary(libA); +#else + dlclose(dlA); +#endif + err1: + delete path; + return NULL; +} + +#ifdef _WIN32 +Plugin::Plugin(HMODULE libA) { + lib = libA; +} +#else +Plugin::Plugin(void *dlA) { + dl = dlA; +} +#endif + +Plugin::~Plugin() { + void (*xpdfFreePlugin)(void); + +#ifdef _WIN32 + if ((xpdfFreePlugin = (void (*)(void)) + GetProcAddress(lib, "xpdfFreePlugin"))) { + (*xpdfFreePlugin)(); + } + FreeLibrary(lib); +#else + if ((xpdfFreePlugin = (void (*)(void))dlsym(dl, "xpdfFreePlugin"))) { + (*xpdfFreePlugin)(); + } + dlclose(dl); +#endif +} + +#endif // ENABLE_PLUGINS + +//------------------------------------------------------------------------ +// parsing +//------------------------------------------------------------------------ + +GlobalParams::GlobalParams(const char *customPopplerDataDir) + : popplerDataDir(customPopplerDataDir) +{ + UnicodeMap *map; + int i; + +#if MULTITHREADED + gInitMutex(&mutex); + gInitMutex(&unicodeMapCacheMutex); + gInitMutex(&cMapCacheMutex); +#endif + + initBuiltinFontTables(); + + // scan the encoding in reverse because we want the lowest-numbered + // index for each char name ('space' is encoded twice) + macRomanReverseMap = new NameToCharCode(); + for (i = 255; i >= 0; --i) { + if (macRomanEncoding[i]) { + macRomanReverseMap->add(macRomanEncoding[i], (CharCode)i); + } + } + +#ifdef _WIN32 + // baseDir will be set by a call to setBaseDir + baseDir = new GooString(); +#else + baseDir = appendToPath(getHomeDir(), ".xpdf"); +#endif + nameToUnicode = new NameToCharCode(); + cidToUnicodes = new GooHash(gTrue); + unicodeToUnicodes = new GooHash(gTrue); + residentUnicodeMaps = new GooHash(); + unicodeMaps = new GooHash(gTrue); + cMapDirs = new GooHash(gTrue); + toUnicodeDirs = new GooList(); + displayFonts = new GooHash(); + psExpandSmaller = gFalse; + psShrinkLarger = gTrue; + psCenter = gTrue; + psLevel = psLevel2; + psFonts = new GooHash(); + psNamedFonts16 = new GooList(); + psFonts16 = new GooList(); + psEmbedType1 = gTrue; + psEmbedTrueType = gTrue; + psEmbedCIDPostScript = gTrue; + psEmbedCIDTrueType = gTrue; + psSubstFonts = gTrue; + psPreload = gFalse; + psOPI = gFalse; + psASCIIHex = gFalse; + psBinary = gFalse; + textEncoding = new GooString("UTF-8"); +#if defined(_WIN32) + textEOL = eolDOS; +#elif defined(MACOS) + textEOL = eolMac; +#else + textEOL = eolUnix; +#endif + textPageBreaks = gTrue; + textKeepTinyChars = gFalse; + fontDirs = new GooList(); + enableFreeType = gTrue; + antialias = gTrue; + vectorAntialias = gTrue; + strokeAdjust = gTrue; + screenType = screenUnset; + screenSize = -1; + screenDotRadius = -1; + screenGamma = 1.0; + screenBlackThreshold = 0.0; + screenWhiteThreshold = 1.0; + mapNumericCharNames = gTrue; + mapUnknownCharNames = gFalse; + printCommands = gFalse; + profileCommands = gFalse; + errQuiet = gFalse; + splashResolution = 0.0; + + cidToUnicodeCache = new CharCodeToUnicodeCache(cidToUnicodeCacheSize); + unicodeToUnicodeCache = + new CharCodeToUnicodeCache(unicodeToUnicodeCacheSize); + unicodeMapCache = new UnicodeMapCache(); + cMapCache = new CMapCache(); + +#ifdef _WIN32 + baseFontsInitialized = gFalse; + winFontList = NULL; +#endif + +#ifdef ENABLE_PLUGINS + plugins = new GooList(); + securityHandlers = new GooList(); +#endif + + // set up the initial nameToUnicode table + for (i = 0; nameToUnicodeTab[i].name; ++i) { + nameToUnicode->add(nameToUnicodeTab[i].name, nameToUnicodeTab[i].u); + } + + // set up the residentUnicodeMaps table + map = new UnicodeMap("Latin1", gFalse, + latin1UnicodeMapRanges, latin1UnicodeMapLen); + residentUnicodeMaps->add(map->getEncodingName(), map); + map = new UnicodeMap("ASCII7", gFalse, + ascii7UnicodeMapRanges, ascii7UnicodeMapLen); + residentUnicodeMaps->add(map->getEncodingName(), map); + map = new UnicodeMap("Symbol", gFalse, + symbolUnicodeMapRanges, symbolUnicodeMapLen); + residentUnicodeMaps->add(map->getEncodingName(), map); + map = new UnicodeMap("ZapfDingbats", gFalse, zapfDingbatsUnicodeMapRanges, + zapfDingbatsUnicodeMapLen); + residentUnicodeMaps->add(map->getEncodingName(), map); + map = new UnicodeMap("UTF-8", gTrue, &mapUTF8); + residentUnicodeMaps->add(map->getEncodingName(), map); + map = new UnicodeMap("UCS-2", gTrue, &mapUCS2); + residentUnicodeMaps->add(map->getEncodingName(), map); + + scanEncodingDirs(); +} + +void GlobalParams::scanEncodingDirs() { + GDir *dir; + GDirEntry *entry; + const char *dataRoot = popplerDataDir ? popplerDataDir : POPPLER_DATADIR; + + // allocate buffer large enough to append "/nameToUnicode" + size_t bufSize = strlen(dataRoot) + strlen("/nameToUnicode") + 1; + char *dataPathBuffer = new char[bufSize]; + + snprintf(dataPathBuffer, bufSize, "%s/nameToUnicode", dataRoot); + dir = new GDir(dataPathBuffer, gTrue); + while (entry = dir->getNextEntry(), entry != NULL) { + if (!entry->isDir()) { + parseNameToUnicode(entry->getFullPath()); + } + delete entry; + } + delete dir; + + snprintf(dataPathBuffer, bufSize, "%s/cidToUnicode", dataRoot); + dir = new GDir(dataPathBuffer, gFalse); + while (entry = dir->getNextEntry(), entry != NULL) { + addCIDToUnicode(entry->getName(), entry->getFullPath()); + delete entry; + } + delete dir; + + snprintf(dataPathBuffer, bufSize, "%s/unicodeMap", dataRoot); + dir = new GDir(dataPathBuffer, gFalse); + while (entry = dir->getNextEntry(), entry != NULL) { + addUnicodeMap(entry->getName(), entry->getFullPath()); + delete entry; + } + delete dir; + + snprintf(dataPathBuffer, bufSize, "%s/cMap", dataRoot); + dir = new GDir(dataPathBuffer, gFalse); + while (entry = dir->getNextEntry(), entry != NULL) { + addCMapDir(entry->getName(), entry->getFullPath()); + toUnicodeDirs->append(entry->getFullPath()->copy()); + delete entry; + } + delete dir; + + delete[] dataPathBuffer; +} + +void GlobalParams::parseNameToUnicode(GooString *name) { + char *tok1, *tok2; + FILE *f; + char buf[256]; + int line; + Unicode u; + char *tokptr; + + if (!(f = fopen(name->getCString(), "r"))) { + error(-1, "Couldn't open 'nameToUnicode' file '%s'", + name->getCString()); + return; + } + line = 1; + while (getLine(buf, sizeof(buf), f)) { + tok1 = strtok_r(buf, " \t\r\n", &tokptr); + tok2 = strtok_r(NULL, " \t\r\n", &tokptr); + if (tok1 && tok2) { + sscanf(tok1, "%x", &u); + nameToUnicode->add(tok2, u); + } else { + error(-1, "Bad line in 'nameToUnicode' file (%s:%d)", + name->getCString(), line); + } + ++line; + } + fclose(f); +} + +void GlobalParams::addCIDToUnicode(GooString *collection, + GooString *fileName) { + GooString *old; + + if ((old = (GooString *)cidToUnicodes->remove(collection))) { + delete old; + } + cidToUnicodes->add(collection->copy(), fileName->copy()); +} + +void GlobalParams::addUnicodeMap(GooString *encodingName, GooString *fileName) +{ + GooString *old; + + if ((old = (GooString *)unicodeMaps->remove(encodingName))) { + delete old; + } + unicodeMaps->add(encodingName->copy(), fileName->copy()); +} + +void GlobalParams::addCMapDir(GooString *collection, GooString *dir) { + GooList *list; + + if (!(list = (GooList *)cMapDirs->lookup(collection))) { + list = new GooList(); + cMapDirs->add(collection->copy(), list); + } + list->append(dir->copy()); +} + +GBool GlobalParams::parseYesNo2(char *token, GBool *flag) { + if (!strcmp(token, "yes")) { + *flag = gTrue; + } else if (!strcmp(token, "no")) { + *flag = gFalse; + } else { + return gFalse; + } + return gTrue; +} + +GlobalParams::~GlobalParams() { + freeBuiltinFontTables(); + + delete macRomanReverseMap; + + delete baseDir; + delete nameToUnicode; + deleteGooHash(cidToUnicodes, GooString); + deleteGooHash(unicodeToUnicodes, GooString); + deleteGooHash(residentUnicodeMaps, UnicodeMap); + deleteGooHash(unicodeMaps, GooString); + deleteGooList(toUnicodeDirs, GooString); + deleteGooHash(displayFonts, DisplayFontParam); +#ifdef _WIN32 + delete winFontList; +#endif + deleteGooHash(psFonts, PSFontParam); + deleteGooList(psNamedFonts16, PSFontParam); + deleteGooList(psFonts16, PSFontParam); + delete textEncoding; + deleteGooList(fontDirs, GooString); + + GooHashIter *iter; + GooString *key; + cMapDirs->startIter(&iter); + void *val; + while (cMapDirs->getNext(&iter, &key, &val)) { + GooList* list = (GooList*)val; + deleteGooList(list, GooString); + } + delete cMapDirs; + + delete cidToUnicodeCache; + delete unicodeToUnicodeCache; + delete unicodeMapCache; + delete cMapCache; + +#ifdef ENABLE_PLUGINS + delete securityHandlers; + deleteGooList(plugins, Plugin); +#endif + +#if MULTITHREADED + gDestroyMutex(&mutex); + gDestroyMutex(&unicodeMapCacheMutex); + gDestroyMutex(&cMapCacheMutex); +#endif +} + +//------------------------------------------------------------------------ + +void GlobalParams::setBaseDir(char *dir) { + delete baseDir; + baseDir = new GooString(dir); +} + +//------------------------------------------------------------------------ +// accessors +//------------------------------------------------------------------------ + +CharCode GlobalParams::getMacRomanCharCode(char *charName) { + // no need to lock - macRomanReverseMap is constant + return macRomanReverseMap->lookup(charName); +} + +GooString *GlobalParams::getBaseDir() { + GooString *s; + + lockGlobalParams; + s = baseDir->copy(); + unlockGlobalParams; + return s; +} + +Unicode GlobalParams::mapNameToUnicode(char *charName) { + // no need to lock - nameToUnicode is constant + return nameToUnicode->lookup(charName); +} + +UnicodeMap *GlobalParams::getResidentUnicodeMap(GooString *encodingName) { + UnicodeMap *map; + + lockGlobalParams; + map = (UnicodeMap *)residentUnicodeMaps->lookup(encodingName); + unlockGlobalParams; + if (map) { + map->incRefCnt(); + } + return map; +} + +FILE *GlobalParams::getUnicodeMapFile(GooString *encodingName) { + GooString *fileName; + FILE *f; + + lockGlobalParams; + if ((fileName = (GooString *)unicodeMaps->lookup(encodingName))) { + f = fopen(fileName->getCString(), "r"); + } else { + f = NULL; + } + unlockGlobalParams; + return f; +} + +FILE *GlobalParams::findCMapFile(GooString *collection, GooString *cMapName) { + GooList *list; + GooString *dir; + GooString *fileName; + FILE *f; + int i; + + lockGlobalParams; + if (!(list = (GooList *)cMapDirs->lookup(collection))) { + unlockGlobalParams; + return NULL; + } + for (i = 0; i < list->getLength(); ++i) { + dir = (GooString *)list->get(i); + fileName = appendToPath(dir->copy(), cMapName->getCString()); + f = fopen(fileName->getCString(), "r"); + delete fileName; + if (f) { + unlockGlobalParams; + return f; + } + } + unlockGlobalParams; + return NULL; +} + +FILE *GlobalParams::findToUnicodeFile(GooString *name) { + GooString *dir, *fileName; + FILE *f; + int i; + + lockGlobalParams; + for (i = 0; i < toUnicodeDirs->getLength(); ++i) { + dir = (GooString *)toUnicodeDirs->get(i); + fileName = appendToPath(dir->copy(), name->getCString()); + f = fopen(fileName->getCString(), "r"); + delete fileName; + if (f) { + unlockGlobalParams; + return f; + } + } + unlockGlobalParams; + return NULL; +} + +#if WITH_FONTCONFIGURATION_FONTCONFIG +static GBool findModifier(const char *name, const char *modifier, const char **start) +{ + const char *match; + + if (name == NULL) + return gFalse; + + match = strstr(name, modifier); + if (match) { + if (*start == NULL || match < *start) + *start = match; + return gTrue; + } + else { + return gFalse; + } +} + +static char *getFontLang(GfxFont *font) +{ + char *lang; + + // find the language we want the font to support + if (font->isCIDFont()) + { + GooString *collection = ((GfxCIDFont *)font)->getCollection(); + if (collection) + { + if (strcmp(collection->getCString(), "Adobe-GB1") == 0) + lang = "zh-cn"; // Simplified Chinese + else if (strcmp(collection->getCString(), "Adobe-CNS1") == 0) + lang = "zh-tw"; // Traditional Chinese + else if (strcmp(collection->getCString(), "Adobe-Japan1") == 0) + lang = "ja"; // Japanese + else if (strcmp(collection->getCString(), "Adobe-Japan2") == 0) + lang = "ja"; // Japanese + else if (strcmp(collection->getCString(), "Adobe-Korea1") == 0) + lang = "ko"; // Korean + else if (strcmp(collection->getCString(), "Adobe-UCS") == 0) + lang = "xx"; + else if (strcmp(collection->getCString(), "Adobe-Identity") == 0) + lang = "xx"; + else + { + error(-1, "Unknown CID font collection, please report to poppler bugzilla."); + lang = "xx"; + } + } + else lang = "xx"; + } + else lang = "xx"; + return lang; +} + +static FcPattern *buildFcPattern(GfxFont *font) +{ + int weight = -1, + slant = -1, + width = -1, + spacing = -1; + bool deleteFamily = false; + char *family, *name, *lang, *modifiers; + const char *start; + FcPattern *p; + + // this is all heuristics will be overwritten if font had proper info + name = font->getName()->getCString(); + + modifiers = strchr (name, ','); + if (modifiers == NULL) + modifiers = strchr (name, '-'); + + // remove the - from the names, for some reason, Fontconfig does not + // understand "MS-Mincho" but does with "MS Mincho" + int len = strlen(name); + for (int i = 0; i < len; i++) + name[i] = (name[i] == '-' ? ' ' : name[i]); + + start = NULL; + findModifier(modifiers, "Regular", &start); + findModifier(modifiers, "Roman", &start); + + if (findModifier(modifiers, "Oblique", &start)) + slant = FC_SLANT_OBLIQUE; + if (findModifier(modifiers, "Italic", &start)) + slant = FC_SLANT_ITALIC; + if (findModifier(modifiers, "Bold", &start)) + weight = FC_WEIGHT_BOLD; + if (findModifier(modifiers, "Light", &start)) + weight = FC_WEIGHT_LIGHT; + if (findModifier(modifiers, "Medium", &start)) + weight = FC_WEIGHT_MEDIUM; + if (findModifier(modifiers, "Condensed", &start)) + width = FC_WIDTH_CONDENSED; + + if (start) { + // There have been "modifiers" in the name, crop them to obtain + // the family name + family = new char[len+1]; + strcpy(family, name); + int pos = (modifiers - name); + family[pos] = '\0'; + deleteFamily = true; + } + else { + family = name; + } + + // use font flags + if (font->isFixedWidth()) + spacing = FC_MONO; + if (font->isBold()) + weight = FC_WEIGHT_BOLD; + if (font->isItalic()) + slant = FC_SLANT_ITALIC; + + // if the FontDescriptor specified a family name use it + if (font->getFamily()) { + if (deleteFamily) { + delete[] family; + deleteFamily = false; + } + family = font->getFamily()->getCString(); + } + + // if the FontDescriptor specified a weight use it + switch (font -> getWeight()) + { + case GfxFont::W100: weight = FC_WEIGHT_EXTRALIGHT; break; + case GfxFont::W200: weight = FC_WEIGHT_LIGHT; break; + case GfxFont::W300: weight = FC_WEIGHT_BOOK; break; + case GfxFont::W400: weight = FC_WEIGHT_NORMAL; break; + case GfxFont::W500: weight = FC_WEIGHT_MEDIUM; break; + case GfxFont::W600: weight = FC_WEIGHT_DEMIBOLD; break; + case GfxFont::W700: weight = FC_WEIGHT_BOLD; break; + case GfxFont::W800: weight = FC_WEIGHT_EXTRABOLD; break; + case GfxFont::W900: weight = FC_WEIGHT_BLACK; break; + default: break; + } + + // if the FontDescriptor specified a width use it + switch (font -> getStretch()) + { + case GfxFont::UltraCondensed: width = FC_WIDTH_ULTRACONDENSED; break; + case GfxFont::ExtraCondensed: width = FC_WIDTH_EXTRACONDENSED; break; + case GfxFont::Condensed: width = FC_WIDTH_CONDENSED; break; + case GfxFont::SemiCondensed: width = FC_WIDTH_SEMICONDENSED; break; + case GfxFont::Normal: width = FC_WIDTH_NORMAL; break; + case GfxFont::SemiExpanded: width = FC_WIDTH_SEMIEXPANDED; break; + case GfxFont::Expanded: width = FC_WIDTH_EXPANDED; break; + case GfxFont::ExtraExpanded: width = FC_WIDTH_EXTRAEXPANDED; break; + case GfxFont::UltraExpanded: width = FC_WIDTH_ULTRAEXPANDED; break; + default: break; + } + + lang = getFontLang(font); + + p = FcPatternBuild(NULL, + FC_FAMILY, FcTypeString, family, + FC_LANG, FcTypeString, lang, + NULL); + if (slant != -1) FcPatternAddInteger(p, FC_SLANT, slant); + if (weight != -1) FcPatternAddInteger(p, FC_WEIGHT, weight); + if (width != -1) FcPatternAddInteger(p, FC_WIDTH, width); + if (spacing != -1) FcPatternAddInteger(p, FC_SPACING, spacing); + + if (deleteFamily) + delete[] family; + return p; +} +#endif + +/* if you can't or don't want to use Fontconfig, you need to implement + this function for your platform. For Windows, it's in GlobalParamsWin.cc +*/ +#if WITH_FONTCONFIGURATION_FONTCONFIG +DisplayFontParam *GlobalParams::getDisplayFont(GfxFont *font) { + DisplayFontParam *dfp; + FcPattern *p=0; + + GooString *fontName = font->getName(); + if (!fontName) return NULL; + + lockGlobalParams; + dfp = font->dfp; + if (!dfp) + { + FcChar8* s; + char * ext; + FcResult res; + FcFontSet *set; + int i; + FcLangSet *lb = NULL; + char *lang; + p = buildFcPattern(font); + + if (!p) + goto fin; + FcConfigSubstitute(NULL, p, FcMatchPattern); + FcDefaultSubstitute(p); + set = FcFontSort(NULL, p, FcFalse, NULL, &res); + if (!set) + goto fin; + + // find the language we want the font to support + lang = getFontLang(font); + if (strcmp(lang,"xx") != 0) { + lb = FcLangSetCreate(); + FcLangSetAdd(lb,(FcChar8 *)lang); + } + + /* + scan twice. + first: fonts support the language + second: all fonts (fall back) + */ + while (dfp == NULL) + { + for (i = 0; i < set->nfont; ++i) + { + res = FcPatternGetString(set->fonts[i], FC_FILE, 0, &s); + if (res != FcResultMatch || !s) + continue; + if (lb != NULL) { + FcLangSet *l; + res = FcPatternGetLangSet(set->fonts[i], FC_LANG, 0, &l); + if (res != FcResultMatch || !FcLangSetContains(l,lb)) { + continue; + } + } + ext = strrchr((char*)s,'.'); + if (!ext) + continue; + if (!strncasecmp(ext,".ttf",4) || !strncasecmp(ext, ".ttc", 4) || !strncasecmp(ext, ".otf", 4)) + { + dfp = new DisplayFontParam(fontName->copy(), displayFontTT); + dfp->tt.fileName = new GooString((char*)s); + FcPatternGetInteger(set->fonts[i], FC_INDEX, 0, &(dfp->tt.faceIndex)); + } + else if (!strncasecmp(ext,".pfa",4) || !strncasecmp(ext,".pfb",4)) + { + dfp = new DisplayFontParam(fontName->copy(), displayFontT1); + dfp->t1.fileName = new GooString((char*)s); + } + else + continue; + font->dfp = dfp; + break; + } + if (lb != NULL) { + FcLangSetDestroy(lb); + lb = NULL; + } else { + /* scan all fonts of the list */ + break; + } + } + FcFontSetDestroy(set); + } +fin: + if (p) + FcPatternDestroy(p); + + unlockGlobalParams; + return dfp; +} +#endif +#if WITH_FONTCONFIGURATION_WIN32 +#include "GlobalParamsWin.cc" +#endif + +GBool GlobalParams::getPSExpandSmaller() { + GBool f; + + lockGlobalParams; + f = psExpandSmaller; + unlockGlobalParams; + return f; +} + +GBool GlobalParams::getPSShrinkLarger() { + GBool f; + + lockGlobalParams; + f = psShrinkLarger; + unlockGlobalParams; + return f; +} + +GBool GlobalParams::getPSCenter() { + GBool f; + + lockGlobalParams; + f = psCenter; + unlockGlobalParams; + return f; +} + +PSLevel GlobalParams::getPSLevel() { + PSLevel level; + + lockGlobalParams; + level = psLevel; + unlockGlobalParams; + return level; +} + +PSFontParam *GlobalParams::getPSFont(GooString *fontName) { + PSFontParam *p; + + lockGlobalParams; + p = (PSFontParam *)psFonts->lookup(fontName); + unlockGlobalParams; + return p; +} + +PSFontParam *GlobalParams::getPSFont16(GooString *fontName, + GooString *collection, int wMode) { + PSFontParam *p; + int i; + + lockGlobalParams; + p = NULL; + if (fontName) { + for (i = 0; i < psNamedFonts16->getLength(); ++i) { + p = (PSFontParam *)psNamedFonts16->get(i); + if (!p->pdfFontName->cmp(fontName) && + p->wMode == wMode) { + break; + } + p = NULL; + } + } + if (!p && collection) { + for (i = 0; i < psFonts16->getLength(); ++i) { + p = (PSFontParam *)psFonts16->get(i); + if (!p->pdfFontName->cmp(collection) && + p->wMode == wMode) { + break; + } + p = NULL; + } + } + unlockGlobalParams; + return p; +} + +GBool GlobalParams::getPSEmbedType1() { + GBool e; + + lockGlobalParams; + e = psEmbedType1; + unlockGlobalParams; + return e; +} + +GBool GlobalParams::getPSEmbedTrueType() { + GBool e; + + lockGlobalParams; + e = psEmbedTrueType; + unlockGlobalParams; + return e; +} + +GBool GlobalParams::getPSEmbedCIDPostScript() { + GBool e; + + lockGlobalParams; + e = psEmbedCIDPostScript; + unlockGlobalParams; + return e; +} + +GBool GlobalParams::getPSEmbedCIDTrueType() { + GBool e; + + lockGlobalParams; + e = psEmbedCIDTrueType; + unlockGlobalParams; + return e; +} + +GBool GlobalParams::getPSSubstFonts() { + GBool e; + + lockGlobalParams; + e = psSubstFonts; + unlockGlobalParams; + return e; +} + +GBool GlobalParams::getPSPreload() { + GBool preload; + + lockGlobalParams; + preload = psPreload; + unlockGlobalParams; + return preload; +} + +GBool GlobalParams::getPSOPI() { + GBool opi; + + lockGlobalParams; + opi = psOPI; + unlockGlobalParams; + return opi; +} + +GBool GlobalParams::getPSASCIIHex() { + GBool ah; + + lockGlobalParams; + ah = psASCIIHex; + unlockGlobalParams; + return ah; +} + +GBool GlobalParams::getPSBinary() { + GBool binary; + + lockGlobalParams; + binary = psBinary; + unlockGlobalParams; + return binary; +} + +GooString *GlobalParams::getTextEncodingName() { + GooString *s; + + lockGlobalParams; + s = textEncoding->copy(); + unlockGlobalParams; + return s; +} + +EndOfLineKind GlobalParams::getTextEOL() { + EndOfLineKind eol; + + lockGlobalParams; + eol = textEOL; + unlockGlobalParams; + return eol; +} + +GBool GlobalParams::getTextPageBreaks() { + GBool pageBreaks; + + lockGlobalParams; + pageBreaks = textPageBreaks; + unlockGlobalParams; + return pageBreaks; +} + +GBool GlobalParams::getTextKeepTinyChars() { + GBool tiny; + + lockGlobalParams; + tiny = textKeepTinyChars; + unlockGlobalParams; + return tiny; +} + +GooString *GlobalParams::findFontFile(GooString *fontName, char **exts) { + GooString *dir, *fileName; + char **ext; + FILE *f; + int i; + + lockGlobalParams; + for (i = 0; i < fontDirs->getLength(); ++i) { + dir = (GooString *)fontDirs->get(i); + for (ext = exts; *ext; ++ext) { + fileName = appendToPath(dir->copy(), fontName->getCString()); + fileName->append(*ext); + if ((f = fopen(fileName->getCString(), "rb"))) { + fclose(f); + unlockGlobalParams; + return fileName; + } + delete fileName; + } + } + unlockGlobalParams; + return NULL; +} + +GBool GlobalParams::getEnableFreeType() { + GBool f; + + lockGlobalParams; + f = enableFreeType; + unlockGlobalParams; + return f; +} + + +GBool GlobalParams::getAntialias() { + GBool f; + + lockGlobalParams; + f = antialias; + unlockGlobalParams; + return f; +} + +GBool GlobalParams::getVectorAntialias() { + GBool f; + + lockGlobalParams; + f = vectorAntialias; + unlockGlobalParams; + return f; +} + +GBool GlobalParams::getStrokeAdjust() { + GBool f; + + lockGlobalParams; + f = strokeAdjust; + unlockGlobalParams; + return f; +} + +ScreenType GlobalParams::getScreenType() { + ScreenType t; + + lockGlobalParams; + t = screenType; + unlockGlobalParams; + return t; +} + +int GlobalParams::getScreenSize() { + int size; + + lockGlobalParams; + size = screenSize; + unlockGlobalParams; + return size; +} + +int GlobalParams::getScreenDotRadius() { + int r; + + lockGlobalParams; + r = screenDotRadius; + unlockGlobalParams; + return r; +} + +double GlobalParams::getScreenGamma() { + double gamma; + + lockGlobalParams; + gamma = screenGamma; + unlockGlobalParams; + return gamma; +} + +double GlobalParams::getScreenBlackThreshold() { + double thresh; + + lockGlobalParams; + thresh = screenBlackThreshold; + unlockGlobalParams; + return thresh; +} + +double GlobalParams::getScreenWhiteThreshold() { + double thresh; + + lockGlobalParams; + thresh = screenWhiteThreshold; + unlockGlobalParams; + return thresh; +} + +GBool GlobalParams::getMapNumericCharNames() { + GBool map; + + lockGlobalParams; + map = mapNumericCharNames; + unlockGlobalParams; + return map; +} + +GBool GlobalParams::getMapUnknownCharNames() { + GBool map; + + lockGlobalParams; + map = mapUnknownCharNames; + unlockGlobalParams; + return map; +} + +GBool GlobalParams::getPrintCommands() { + GBool p; + + lockGlobalParams; + p = printCommands; + unlockGlobalParams; + return p; +} + +GBool GlobalParams::getProfileCommands() { + GBool p; + + lockGlobalParams; + p = profileCommands; + unlockGlobalParams; + return p; +} + +GBool GlobalParams::getErrQuiet() { + // no locking -- this function may get called from inside a locked + // section + return errQuiet; +} + +double GlobalParams::getSplashResolution() { + double r; + lockGlobalParams; + r = splashResolution; + unlockGlobalParams; + return r; +} + +CharCodeToUnicode *GlobalParams::getCIDToUnicode(GooString *collection) { + GooString *fileName; + CharCodeToUnicode *ctu; + + lockGlobalParams; + if (!(ctu = cidToUnicodeCache->getCharCodeToUnicode(collection))) { + if ((fileName = (GooString *)cidToUnicodes->lookup(collection)) && + (ctu = CharCodeToUnicode::parseCIDToUnicode(fileName, collection))) { + cidToUnicodeCache->add(ctu); + } + } + unlockGlobalParams; + return ctu; +} + +CharCodeToUnicode *GlobalParams::getUnicodeToUnicode(GooString *fontName) { + lockGlobalParams; + GooHashIter *iter; + unicodeToUnicodes->startIter(&iter); + GooString *fileName = NULL; + GooString *fontPattern; + void *val; + while (!fileName && unicodeToUnicodes->getNext(&iter, &fontPattern, &val)) { + if (strstr(fontName->getCString(), fontPattern->getCString())) { + unicodeToUnicodes->killIter(&iter); + fileName = (GooString*)val; + } + } + CharCodeToUnicode *ctu = NULL; + if (fileName) { + ctu = unicodeToUnicodeCache->getCharCodeToUnicode(fileName); + if (!ctu) { + ctu = CharCodeToUnicode::parseUnicodeToUnicode(fileName); + if (ctu) + unicodeToUnicodeCache->add(ctu); + } + } + unlockGlobalParams; + return ctu; +} + +UnicodeMap *GlobalParams::getUnicodeMap(GooString *encodingName) { + return getUnicodeMap2(encodingName); +} + +UnicodeMap *GlobalParams::getUnicodeMap2(GooString *encodingName) { + UnicodeMap *map; + + if (!(map = getResidentUnicodeMap(encodingName))) { + lockUnicodeMapCache; + map = unicodeMapCache->getUnicodeMap(encodingName); + unlockUnicodeMapCache; + } + return map; +} + +CMap *GlobalParams::getCMap(GooString *collection, GooString *cMapName, Stream *stream) { + CMap *cMap; + + lockCMapCache; + cMap = cMapCache->getCMap(collection, cMapName, stream); + unlockCMapCache; + return cMap; +} + +UnicodeMap *GlobalParams::getTextEncoding() { + return getUnicodeMap2(textEncoding); +} + +GooList *GlobalParams::getEncodingNames() +{ + GooList *result = new GooList; + GooHashIter *iter; + GooString *key; + void *val; + residentUnicodeMaps->startIter(&iter); + while (residentUnicodeMaps->getNext(&iter, &key, &val)) { + result->append(key); + } + residentUnicodeMaps->killIter(&iter); + unicodeMaps->startIter(&iter); + while (unicodeMaps->getNext(&iter, &key, &val)) { + result->append(key); + } + unicodeMaps->killIter(&iter); + return result; +} + +//------------------------------------------------------------------------ +// functions to set parameters +//------------------------------------------------------------------------ + +void GlobalParams::setPSExpandSmaller(GBool expand) { + lockGlobalParams; + psExpandSmaller = expand; + unlockGlobalParams; +} + +void GlobalParams::setPSShrinkLarger(GBool shrink) { + lockGlobalParams; + psShrinkLarger = shrink; + unlockGlobalParams; +} + +void GlobalParams::setPSCenter(GBool center) { + lockGlobalParams; + psCenter = center; + unlockGlobalParams; +} + +void GlobalParams::setPSLevel(PSLevel level) { + lockGlobalParams; + psLevel = level; + unlockGlobalParams; +} + +void GlobalParams::setPSEmbedType1(GBool embed) { + lockGlobalParams; + psEmbedType1 = embed; + unlockGlobalParams; +} + +void GlobalParams::setPSEmbedTrueType(GBool embed) { + lockGlobalParams; + psEmbedTrueType = embed; + unlockGlobalParams; +} + +void GlobalParams::setPSEmbedCIDPostScript(GBool embed) { + lockGlobalParams; + psEmbedCIDPostScript = embed; + unlockGlobalParams; +} + +void GlobalParams::setPSEmbedCIDTrueType(GBool embed) { + lockGlobalParams; + psEmbedCIDTrueType = embed; + unlockGlobalParams; +} + +void GlobalParams::setPSSubstFonts(GBool substFonts) { + lockGlobalParams; + psSubstFonts = substFonts; + unlockGlobalParams; +} + +void GlobalParams::setPSPreload(GBool preload) { + lockGlobalParams; + psPreload = preload; + unlockGlobalParams; +} + +void GlobalParams::setPSOPI(GBool opi) { + lockGlobalParams; + psOPI = opi; + unlockGlobalParams; +} + +void GlobalParams::setPSASCIIHex(GBool hex) { + lockGlobalParams; + psASCIIHex = hex; + unlockGlobalParams; +} + +void GlobalParams::setPSBinary(GBool binary) { + lockGlobalParams; + psBinary = binary; + unlockGlobalParams; +} + +void GlobalParams::setTextEncoding(char *encodingName) { + lockGlobalParams; + delete textEncoding; + textEncoding = new GooString(encodingName); + unlockGlobalParams; +} + +GBool GlobalParams::setTextEOL(char *s) { + lockGlobalParams; + if (!strcmp(s, "unix")) { + textEOL = eolUnix; + } else if (!strcmp(s, "dos")) { + textEOL = eolDOS; + } else if (!strcmp(s, "mac")) { + textEOL = eolMac; + } else { + unlockGlobalParams; + return gFalse; + } + unlockGlobalParams; + return gTrue; +} + +void GlobalParams::setTextPageBreaks(GBool pageBreaks) { + lockGlobalParams; + textPageBreaks = pageBreaks; + unlockGlobalParams; +} + +void GlobalParams::setTextKeepTinyChars(GBool keep) { + lockGlobalParams; + textKeepTinyChars = keep; + unlockGlobalParams; +} + +GBool GlobalParams::setEnableFreeType(char *s) { + GBool ok; + + lockGlobalParams; + ok = parseYesNo2(s, &enableFreeType); + unlockGlobalParams; + return ok; +} + + +GBool GlobalParams::setAntialias(char *s) { + GBool ok; + + lockGlobalParams; + ok = parseYesNo2(s, &antialias); + unlockGlobalParams; + return ok; +} + +GBool GlobalParams::setVectorAntialias(char *s) { + GBool ok; + + lockGlobalParams; + ok = parseYesNo2(s, &vectorAntialias); + unlockGlobalParams; + return ok; +} + +void GlobalParams::setStrokeAdjust(GBool adjust) +{ + lockGlobalParams; + strokeAdjust = adjust; + unlockGlobalParams; +} + +void GlobalParams::setScreenType(ScreenType st) +{ + lockGlobalParams; + screenType = st; + unlockGlobalParams; +} + +void GlobalParams::setScreenSize(int size) +{ + lockGlobalParams; + screenSize = size; + unlockGlobalParams; +} + +void GlobalParams::setScreenDotRadius(int radius) +{ + lockGlobalParams; + screenDotRadius = radius; + unlockGlobalParams; +} + +void GlobalParams::setScreenGamma(double gamma) +{ + lockGlobalParams; + screenGamma = gamma; + unlockGlobalParams; +} + +void GlobalParams::setScreenBlackThreshold(double blackThreshold) +{ + lockGlobalParams; + screenBlackThreshold = blackThreshold; + unlockGlobalParams; +} + +void GlobalParams::setScreenWhiteThreshold(double whiteThreshold) +{ + lockGlobalParams; + screenWhiteThreshold = whiteThreshold; + unlockGlobalParams; +} + +void GlobalParams::setMapNumericCharNames(GBool map) { + lockGlobalParams; + mapNumericCharNames = map; + unlockGlobalParams; +} + +void GlobalParams::setMapUnknownCharNames(GBool map) { + lockGlobalParams; + mapUnknownCharNames = map; + unlockGlobalParams; +} + +void GlobalParams::setPrintCommands(GBool printCommandsA) { + lockGlobalParams; + printCommands = printCommandsA; + unlockGlobalParams; +} + +void GlobalParams::setProfileCommands(GBool profileCommandsA) { + lockGlobalParams; + profileCommands = profileCommandsA; + unlockGlobalParams; +} + +void GlobalParams::setErrQuiet(GBool errQuietA) { + lockGlobalParams; + errQuiet = errQuietA; + unlockGlobalParams; +} + +void GlobalParams::setSplashResolution(double SplashResolutionA) { + lockGlobalParams; + splashResolution = SplashResolutionA; + unlockGlobalParams; +} + +void GlobalParams::addSecurityHandler(XpdfSecurityHandler *handler) { +#ifdef ENABLE_PLUGINS + lockGlobalParams; + securityHandlers->append(handler); + unlockGlobalParams; +#endif +} + +XpdfSecurityHandler *GlobalParams::getSecurityHandler(char *name) { +#ifdef ENABLE_PLUGINS + XpdfSecurityHandler *hdlr; + int i; + + lockGlobalParams; + for (i = 0; i < securityHandlers->getLength(); ++i) { + hdlr = (XpdfSecurityHandler *)securityHandlers->get(i); + if (!strcasecmp(hdlr->name, name)) { + unlockGlobalParams; + return hdlr; + } + } + unlockGlobalParams; + + if (!loadPlugin("security", name)) { + return NULL; + } + deleteGooList(keyBindings, KeyBinding); + + lockGlobalParams; + for (i = 0; i < securityHandlers->getLength(); ++i) { + hdlr = (XpdfSecurityHandler *)securityHandlers->get(i); + if (!strcmp(hdlr->name, name)) { + unlockGlobalParams; + return hdlr; + } + } + unlockGlobalParams; +#else + (void)name; +#endif + + return NULL; +} + +#ifdef ENABLE_PLUGINS +//------------------------------------------------------------------------ +// plugins +//------------------------------------------------------------------------ + +GBool GlobalParams::loadPlugin(char *type, char *name) { + Plugin *plugin; + + if (!(plugin = Plugin::load(type, name))) { + return gFalse; + } + lockGlobalParams; + plugins->append(plugin); + unlockGlobalParams; + return gTrue; +} + +#endif // ENABLE_PLUGINS diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/GlobalParams.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/GlobalParams.h new file mode 100644 index 00000000000..5fff49d5553 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/GlobalParams.h @@ -0,0 +1,375 @@ +//======================================================================== +// +// GlobalParams.h +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005, 2007-2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> +// Copyright (C) 2006 Takashi Iwai <tiwai@suse.de> +// Copyright (C) 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// Copyright (C) 2009 Jonathan Kew <jonathan_kew@sil.org> +// Copyright (C) 2009 Petr Gajdos <pgajdos@novell.com> +// Copyright (C) 2009, 2011 William Bader <williambader@hotmail.com> +// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2011 Pino Toscano <pino@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef GLOBALPARAMS_H +#define GLOBALPARAMS_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include <assert.h> +#include "poppler-config.h" +#include <stdio.h> +#include "goo/gtypes.h" +#include "CharTypes.h" + +#if MULTITHREADED +#include "goo/GooMutex.h" +#endif + +class GooString; +class GooList; +class GooHash; +class NameToCharCode; +class CharCodeToUnicode; +class CharCodeToUnicodeCache; +class UnicodeMap; +class UnicodeMapCache; +class CMap; +class CMapCache; +struct XpdfSecurityHandler; +class GlobalParams; +class GfxFont; +class Stream; +#ifdef _WIN32 +class WinFontList; +#endif + +//------------------------------------------------------------------------ + +// The global parameters object. +extern GlobalParams *globalParams; + +//------------------------------------------------------------------------ + +enum DisplayFontParamKind { + displayFontT1, + displayFontTT +}; + +struct DisplayFontParamT1 { + GooString *fileName; +}; + +struct DisplayFontParamTT { + GooString *fileName; + int faceIndex; +}; + +class DisplayFontParam { +public: + + GooString *name; // font name for 8-bit fonts and named + // CID fonts; collection name for + // generic CID fonts + DisplayFontParamKind kind; + union { + DisplayFontParamT1 t1; + DisplayFontParamTT tt; + }; + + DisplayFontParam(GooString *nameA, DisplayFontParamKind kindA); + void setFileName(GooString *fileNameA) { + if (displayFontT1 == kind) + t1.fileName = fileNameA; + else { + assert(displayFontTT == kind); + tt.fileName = fileNameA; + } + } + virtual ~DisplayFontParam(); +}; + +//------------------------------------------------------------------------ + +class PSFontParam { +public: + + GooString *pdfFontName; // PDF font name for 8-bit fonts and + // named 16-bit fonts; char collection + // name for generic 16-bit fonts + int wMode; // writing mode (0=horiz, 1=vert) for + // 16-bit fonts + GooString *psFontName; // PostScript font name + GooString *encoding; // encoding, for 16-bit fonts only + + PSFontParam(GooString *pdfFontNameA, int wModeA, + GooString *psFontNameA, GooString *encodingA); + ~PSFontParam(); +}; + +//------------------------------------------------------------------------ + +enum PSLevel { + psLevel1, + psLevel1Sep, + psLevel2, + psLevel2Sep, + psLevel3, + psLevel3Sep +}; + +//------------------------------------------------------------------------ + +enum EndOfLineKind { + eolUnix, // LF + eolDOS, // CR+LF + eolMac // CR +}; + +//------------------------------------------------------------------------ + +enum ScreenType { + screenUnset, + screenDispersed, + screenClustered, + screenStochasticClustered +}; + +//------------------------------------------------------------------------ + +class GlobalParams { +public: + + // Initialize the global parameters by attempting to read a config + // file. + GlobalParams(const char *customPopplerDataDir = NULL); + + ~GlobalParams(); + + void setBaseDir(char *dir); + +#if WITH_FONTCONFIGURATION_WIN32 + void setupBaseFonts(char *dir); +#endif + + //----- accessors + + CharCode getMacRomanCharCode(char *charName); + + GooString *getBaseDir(); + Unicode mapNameToUnicode(char *charName); + UnicodeMap *getResidentUnicodeMap(GooString *encodingName); + FILE *getUnicodeMapFile(GooString *encodingName); + FILE *findCMapFile(GooString *collection, GooString *cMapName); + FILE *findToUnicodeFile(GooString *name); + DisplayFontParam *getDisplayFont(GfxFont *font); + GBool getPSExpandSmaller(); + GBool getPSShrinkLarger(); + GBool getPSCenter(); + PSLevel getPSLevel(); + PSFontParam *getPSFont(GooString *fontName); + PSFontParam *getPSFont16(GooString *fontName, GooString *collection, int wMode); + GBool getPSEmbedType1(); + GBool getPSEmbedTrueType(); + GBool getPSEmbedCIDPostScript(); + GBool getPSEmbedCIDTrueType(); + GBool getPSSubstFonts(); + GBool getPSPreload(); + GBool getPSOPI(); + GBool getPSASCIIHex(); + GBool getPSBinary(); + GooString *getTextEncodingName(); + EndOfLineKind getTextEOL(); + GBool getTextPageBreaks(); + GBool getTextKeepTinyChars(); + GooString *findFontFile(GooString *fontName, char **exts); + GBool getEnableFreeType(); + GBool getAntialias(); + GBool getVectorAntialias(); + GBool getStrokeAdjust(); + ScreenType getScreenType(); + int getScreenSize(); + int getScreenDotRadius(); + double getScreenGamma(); + double getScreenBlackThreshold(); + double getScreenWhiteThreshold(); + GBool getMapNumericCharNames(); + GBool getMapUnknownCharNames(); + GBool getPrintCommands(); + GBool getProfileCommands(); + GBool getErrQuiet(); + double getSplashResolution(); + + CharCodeToUnicode *getCIDToUnicode(GooString *collection); + CharCodeToUnicode *getUnicodeToUnicode(GooString *fontName); + UnicodeMap *getUnicodeMap(GooString *encodingName); + CMap *getCMap(GooString *collection, GooString *cMapName, Stream *stream = NULL); + UnicodeMap *getTextEncoding(); +#ifdef ENABLE_PLUGINS + GBool loadPlugin(char *type, char *name); +#endif + + GooList *getEncodingNames(); + + //----- functions to set parameters + void setPSExpandSmaller(GBool expand); + void setPSShrinkLarger(GBool shrink); + void setPSCenter(GBool center); + void setPSLevel(PSLevel level); + void setPSEmbedType1(GBool embed); + void setPSEmbedTrueType(GBool embed); + void setPSEmbedCIDPostScript(GBool embed); + void setPSEmbedCIDTrueType(GBool embed); + void setPSSubstFonts(GBool substFonts); + void setPSPreload(GBool preload); + void setPSOPI(GBool opi); + void setPSASCIIHex(GBool hex); + void setPSBinary(GBool binary); + void setTextEncoding(char *encodingName); + GBool setTextEOL(char *s); + void setTextPageBreaks(GBool pageBreaks); + void setTextKeepTinyChars(GBool keep); + GBool setEnableFreeType(char *s); + GBool setAntialias(char *s); + GBool setVectorAntialias(char *s); + void setStrokeAdjust(GBool strokeAdjust); + void setScreenType(ScreenType st); + void setScreenSize(int size); + void setScreenDotRadius(int radius); + void setScreenGamma(double gamma); + void setScreenBlackThreshold(double blackThreshold); + void setScreenWhiteThreshold(double whiteThreshold); + void setMapNumericCharNames(GBool map); + void setMapUnknownCharNames(GBool map); + void setPrintCommands(GBool printCommandsA); + void setProfileCommands(GBool profileCommandsA); + void setErrQuiet(GBool errQuietA); + void setSplashResolution(double splashResolutionA); + + //----- security handlers + + void addSecurityHandler(XpdfSecurityHandler *handler); + XpdfSecurityHandler *getSecurityHandler(char *name); + +private: + + void parseNameToUnicode(GooString *name); + GBool parseYesNo2(char *token, GBool *flag); + UnicodeMap *getUnicodeMap2(GooString *encodingName); + + void scanEncodingDirs(); + void addCIDToUnicode(GooString *collection, GooString *fileName); + void addUnicodeMap(GooString *encodingName, GooString *fileName); + void addCMapDir(GooString *collection, GooString *dir); + + //----- static tables + + NameToCharCode * // mapping from char name to + macRomanReverseMap; // MacRomanEncoding index + + //----- user-modifiable settings + + GooString *baseDir; // base directory - for plugins, etc. + NameToCharCode * // mapping from char name to Unicode + nameToUnicode; + GooHash *cidToUnicodes; // files for mappings from char collections + // to Unicode, indexed by collection name + // [GooString] + GooHash *unicodeToUnicodes; // files for Unicode-to-Unicode mappings, + // indexed by font name pattern [GooString] + GooHash *residentUnicodeMaps; // mappings from Unicode to char codes, + // indexed by encoding name [UnicodeMap] + GooHash *unicodeMaps; // files for mappings from Unicode to char + // codes, indexed by encoding name [GooString] + GooHash *cMapDirs; // list of CMap dirs, indexed by collection + // name [GooList[GooString]] + GooList *toUnicodeDirs; // list of ToUnicode CMap dirs [GooString] + GooHash *displayFonts; // display font info, indexed by font name + // [DisplayFontParam] +#ifdef _WIN32 + GBool baseFontsInitialized; + WinFontList *winFontList; // system TrueType fonts +#endif + GBool psExpandSmaller; // expand smaller pages to fill paper + GBool psShrinkLarger; // shrink larger pages to fit paper + GBool psCenter; // center pages on the paper + PSLevel psLevel; // PostScript level to generate + GooHash *psFonts; // PostScript font info, indexed by PDF + // font name [PSFontParam] + GooList *psNamedFonts16; // named 16-bit fonts [PSFontParam] + GooList *psFonts16; // generic 16-bit fonts [PSFontParam] + GBool psEmbedType1; // embed Type 1 fonts? + GBool psEmbedTrueType; // embed TrueType fonts? + GBool psEmbedCIDPostScript; // embed CID PostScript fonts? + GBool psEmbedCIDTrueType; // embed CID TrueType fonts? + GBool psSubstFonts; // substitute missing fonts? + GBool psPreload; // preload PostScript images and forms into + // memory + GBool psOPI; // generate PostScript OPI comments? + GBool psASCIIHex; // use ASCIIHex instead of ASCII85? + GBool psBinary; // use binary instead of hex + GooString *textEncoding; // encoding (unicodeMap) to use for text + // output + EndOfLineKind textEOL; // type of EOL marker to use for text + // output + GBool textPageBreaks; // insert end-of-page markers? + GBool textKeepTinyChars; // keep all characters in text output + GooList *fontDirs; // list of font dirs [GooString] + GBool enableFreeType; // FreeType enable flag + GBool antialias; // anti-aliasing enable flag + GBool vectorAntialias; // vector anti-aliasing enable flag + GBool strokeAdjust; // stroke adjustment enable flag + ScreenType screenType; // halftone screen type + int screenSize; // screen matrix size + int screenDotRadius; // screen dot radius + double screenGamma; // screen gamma correction + double screenBlackThreshold; // screen black clamping threshold + double screenWhiteThreshold; // screen white clamping threshold + GBool mapNumericCharNames; // map numeric char names (from font subsets)? + GBool mapUnknownCharNames; // map unknown char names? + GBool printCommands; // print the drawing commands + GBool profileCommands; // profile the drawing commands + GBool errQuiet; // suppress error messages? + double splashResolution; // resolution when rasterizing images + + CharCodeToUnicodeCache *cidToUnicodeCache; + CharCodeToUnicodeCache *unicodeToUnicodeCache; + UnicodeMapCache *unicodeMapCache; + CMapCache *cMapCache; + +#ifdef ENABLE_PLUGINS + GList *plugins; // list of plugins [Plugin] + GList *securityHandlers; // list of loaded security handlers + // [XpdfSecurityHandler] +#endif + +#if MULTITHREADED + GooMutex mutex; + GooMutex unicodeMapCacheMutex; + GooMutex cMapCacheMutex; +#endif + + const char *popplerDataDir; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/GlobalParamsWin.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/GlobalParamsWin.cc new file mode 100644 index 00000000000..f989fb89434 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/GlobalParamsWin.cc @@ -0,0 +1,291 @@ +/* Written by Krzysztof Kowalczyk (http://blog.kowalczyk.info) + but mostly based on xpdf code. + + // Copyright (C) 2010 Hib Eris <hib@hiberis.nl> + +TODO: instead of a fixed mapping defined in displayFontTab, it could +scan the whole fonts directory, parse TTF files and build font +description for all fonts available in Windows. That's how MuPDF works. +*/ + +#ifndef PACKAGE_NAME +#include <config.h> +#endif + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <windows.h> +#if !(_WIN32_IE >= 0x0500) +#error "_WIN32_IE must be defined >= 0x0500 for SHGFP_TYPE_CURRENT from shlobj.h" +#endif +#include <shlobj.h> +#include <string.h> +#include <stdio.h> +#include <ctype.h> +#include <assert.h> + +#include "goo/gmem.h" +#include "goo/GooString.h" +#include "goo/GooList.h" +#include "goo/GooHash.h" +#include "goo/gfile.h" +#include "Error.h" +#include "NameToCharCode.h" +#include "CharCodeToUnicode.h" +#include "UnicodeMap.h" +#include "CMap.h" +#include "BuiltinFontTables.h" +#include "FontEncodingTables.h" +#include "GlobalParams.h" +#include "GfxFont.h" + +#if MULTITHREADED +# define lockGlobalParams gLockMutex(&mutex) +# define lockUnicodeMapCache gLockMutex(&unicodeMapCacheMutex) +# define lockCMapCache gLockMutex(&cMapCacheMutex) +# define unlockGlobalParams gUnlockMutex(&mutex) +# define unlockUnicodeMapCache gUnlockMutex(&unicodeMapCacheMutex) +# define unlockCMapCache gUnlockMutex(&cMapCacheMutex) +#else +# define lockGlobalParams +# define lockUnicodeMapCache +# define lockCMapCache +# define unlockGlobalParams +# define unlockUnicodeMapCache +# define unlockCMapCache +#endif + +#define DEFAULT_SUBSTITUTE_FONT "Helvetica" + +static struct { + char *name; + char *t1FileName; + char *ttFileName; +} displayFontTab[] = { + {"Courier", "n022003l.pfb", "cour.ttf"}, + {"Courier-Bold", "n022004l.pfb", "courbd.ttf"}, + {"Courier-BoldOblique", "n022024l.pfb", "courbi.ttf"}, + {"Courier-Oblique", "n022023l.pfb", "couri.ttf"}, + {"Helvetica", "n019003l.pfb", "arial.ttf"}, + {"Helvetica-Bold", "n019004l.pfb", "arialbd.ttf"}, + {"Helvetica-BoldOblique", "n019024l.pfb", "arialbi.ttf"}, + {"Helvetica-Oblique", "n019023l.pfb", "ariali.ttf"}, + // TODO: not sure if "symbol.ttf" is right + {"Symbol", "s050000l.pfb", "symbol.ttf"}, + {"Times-Bold", "n021004l.pfb", "timesbd.ttf"}, + {"Times-BoldItalic", "n021024l.pfb", "timesbi.ttf"}, + {"Times-Italic", "n021023l.pfb", "timesi.ttf"}, + {"Times-Roman", "n021003l.pfb", "times.ttf"}, + // TODO: not sure if "wingding.ttf" is right + {"ZapfDingbats", "d050000l.pfb", "wingding.ttf"}, + + // those seem to be frequently accessed by PDF files and I kind of guess + // which font file do the refer to + {"Palatino", NULL, "pala.ttf"}, + {"Palatino-Roman", NULL, "pala.ttf"}, + {"Palatino-Bold", NULL, "palab.ttf"}, + {"Palatino-Italic", NULL, "palai.ttf"}, + {"Palatino,Italic", NULL, "palai.ttf"}, + {"Palatino-BoldItalic", NULL, "palabi.ttf"}, + + {"ArialBlack", NULL, "arialbd.ttf"}, + + {"ArialNarrow", NULL, "arialn.ttf"}, + {"ArialNarrow,Bold", NULL, "arialnb.ttf"}, + {"ArialNarrow,Italic", NULL, "arialni.ttf"}, + {"ArialNarrow,BoldItalic", NULL, "arialnbi.ttf"}, + {"ArialNarrow-Bold", NULL, "arialnb.ttf"}, + {"ArialNarrow-Italic", NULL, "arialni.ttf"}, + {"ArialNarrow-BoldItalic", NULL, "arialnbi.ttf"}, + + {"HelveticaNarrow", NULL, "arialn.ttf"}, + {"HelveticaNarrow,Bold", NULL, "arialnb.ttf"}, + {"HelveticaNarrow,Italic", NULL, "arialni.ttf"}, + {"HelveticaNarrow,BoldItalic", NULL, "arialnbi.ttf"}, + {"HelveticaNarrow-Bold", NULL, "arialnb.ttf"}, + {"HelveticaNarrow-Italic", NULL, "arialni.ttf"}, + {"HelveticaNarrow-BoldItalic", NULL, "arialnbi.ttf"}, + + {"BookAntiqua", NULL, "bkant.ttf"}, + {"BookAntiqua,Bold", NULL, "bkant.ttf"}, + {"BookAntiqua,Italic", NULL, "bkant.ttf"}, + {"BookAntiqua,BoldItalic", NULL, "bkant.ttf"}, + {"BookAntiqua-Bold", NULL, "bkant.ttf"}, + {"BookAntiqua-Italic", NULL, "bkant.ttf"}, + {"BookAntiqua-BoldItalic", NULL, "bkant.ttf"}, + + {"Verdana", NULL, "verdana.ttf"}, + {"Verdana,Bold", NULL, "verdanab.ttf"}, + {"Verdana,Italic", NULL, "verdanai.ttf"}, + {"Verdana,BoldItalic", NULL, "verdanaz.ttf"}, + {"Verdana-Bold", NULL, "verdanab.ttf"}, + {"Verdana-Italic", NULL, "verdanai.ttf"}, + {"Verdana-BoldItalic", NULL, "verdanaz.ttf"}, + + {"Tahoma", NULL, "tahoma.ttf"}, + {"Tahoma,Bold", NULL, "tahomabd.ttf"}, + {"Tahoma,Italic", NULL, "tahoma.ttf"}, + {"Tahoma,BoldItalic", NULL, "tahomabd.ttf"}, + {"Tahoma-Bold", NULL, "tahomabd.ttf"}, + {"Tahoma-Italic", NULL, "tahoma.ttf"}, + {"Tahoma-BoldItalic", NULL, "tahomabd.ttf"}, + + {"CCRIKH+Verdana", NULL, "verdana.ttf"}, + {"CCRIKH+Verdana,Bold", NULL, "verdanab.ttf"}, + {"CCRIKH+Verdana,Italic", NULL, "verdanai.ttf"}, + {"CCRIKH+Verdana,BoldItalic", NULL, "verdanaz.ttf"}, + {"CCRIKH+Verdana-Bold", NULL, "verdanab.ttf"}, + {"CCRIKH+Verdana-Italic", NULL, "verdanai.ttf"}, + {"CCRIKH+Verdana-BoldItalic", NULL, "verdanaz.ttf"}, + + {"Georgia", NULL, "georgia.ttf"}, + {"Georgia,Bold", NULL, "georgiab.ttf"}, + {"Georgia,Italic", NULL, "georgiai.ttf"}, + {"Georgia,BoldItalic", NULL, "georgiaz.ttf"}, + {"Georgia-Bold", NULL, "georgiab.ttf"}, + {"Georgia-Italic", NULL, "georgiai.ttf"}, + {"Georgia-BoldItalic", NULL, "georgiaz.ttf"}, + + {NULL} +}; + +#define FONTS_SUBDIR "\\fonts" + +static void GetWindowsFontDir(char *winFontDir, int cbWinFontDirLen) +{ + BOOL (__stdcall *SHGetSpecialFolderPathFunc)(HWND hwndOwner, + LPTSTR lpszPath, + int nFolder, + BOOL fCreate); + HRESULT (__stdcall *SHGetFolderPathFunc)(HWND hwndOwner, + int nFolder, + HANDLE hToken, + DWORD dwFlags, + LPTSTR pszPath); + + // SHGetSpecialFolderPath isn't available in older versions of shell32.dll (Win95 and + // WinNT4), so do a dynamic load of ANSI versions. + winFontDir[0] = '\0'; + + HMODULE hLib = LoadLibrary("shell32.dll"); + if (hLib) { + SHGetFolderPathFunc = (HRESULT (__stdcall *)(HWND, int, HANDLE, DWORD, LPTSTR)) + GetProcAddress(hLib, "SHGetFolderPathA"); + if (SHGetFolderPathFunc) + (*SHGetFolderPathFunc)(NULL, CSIDL_FONTS, NULL, SHGFP_TYPE_CURRENT, winFontDir); + + if (!winFontDir[0]) { + // Try an older function + SHGetSpecialFolderPathFunc = (BOOL (__stdcall *)(HWND, LPTSTR, int, BOOL)) + GetProcAddress(hLib, "SHGetSpecialFolderPathA"); + if (SHGetSpecialFolderPathFunc) + (*SHGetSpecialFolderPathFunc)(NULL, winFontDir, CSIDL_FONTS, FALSE); + } + FreeLibrary(hLib); + } + if (winFontDir[0]) + return; + + // Try older DLL + hLib = LoadLibrary("SHFolder.dll"); + if (hLib) { + SHGetFolderPathFunc = (HRESULT (__stdcall *)(HWND, int, HANDLE, DWORD, LPTSTR)) + GetProcAddress(hLib, "SHGetFolderPathA"); + if (SHGetFolderPathFunc) + (*SHGetFolderPathFunc)(NULL, CSIDL_FONTS, NULL, SHGFP_TYPE_CURRENT, winFontDir); + FreeLibrary(hLib); + } + if (winFontDir[0]) + return; + + // Everything else failed so the standard fonts directory. + GetWindowsDirectory(winFontDir, cbWinFontDirLen); + if (winFontDir[0]) { + strncat(winFontDir, FONTS_SUBDIR, cbWinFontDirLen); + winFontDir[cbWinFontDirLen-1] = 0; + } +} + +static bool FileExists(const char *path) +{ + FILE * f = fopen(path, "rb"); + if (f) { + fclose(f); + return true; + } + return false; +} + +static void AddFont(GooHash *displayFonts, char *fontName, GooString *fontPath, DisplayFontParamKind kind) +{ + DisplayFontParam *dfp = new DisplayFontParam(new GooString(fontName), kind); + dfp->setFileName(fontPath); + displayFonts->add(dfp->name, dfp); +} + +void GlobalParams::setupBaseFonts(char * dir) +{ + if (baseFontsInitialized) + return; + baseFontsInitialized = true; + + char winFontDir[MAX_PATH]; + GetWindowsFontDir(winFontDir, sizeof(winFontDir)); + + for (int i = 0; displayFontTab[i].name; ++i) { + char *fontName = displayFontTab[i].name; + if (displayFonts->lookup(fontName)) + continue; + + if (dir) { + GooString *fontPath = appendToPath(new GooString(dir), displayFontTab[i].t1FileName); + if (FileExists(fontPath->getCString())) { + AddFont(displayFonts, fontName, fontPath, displayFontT1); + continue; + } + delete fontPath; + } + + if (winFontDir[0] && displayFontTab[i].ttFileName) { + GooString *fontPath = appendToPath(new GooString(winFontDir), displayFontTab[i].ttFileName); + if (FileExists(fontPath->getCString())) { + AddFont(displayFonts, fontName, fontPath, displayFontTT); + continue; + } + delete fontPath; + } + + error(-1, "No display font for '%s'", fontName); + } +} + +static char *findSubstituteName(const char *origName) +{ + assert(origName); + if (!origName) return NULL; + /* TODO: try to at least guess bold/italic/bolditalic from the name */ + return DEFAULT_SUBSTITUTE_FONT; +} + +/* Windows implementation of external font matching code */ +DisplayFontParam *GlobalParams::getDisplayFont(GfxFont *font) { + DisplayFontParam * dfp; + GooString * fontName = font->getName(); + char * substFontName = NULL; + + if (!fontName) return NULL; + lockGlobalParams; + setupBaseFonts(NULL); + dfp = (DisplayFontParam *)displayFonts->lookup(fontName); + if (!dfp) { + substFontName = findSubstituteName(fontName->getCString()); + error(-1, "Couldn't find a font for '%s', subst is '%s'", fontName->getCString(), substFontName); + dfp = (DisplayFontParam *)displayFonts->lookup(substFontName); + assert(dfp); + } + unlockGlobalParams; + return dfp; +} + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Hints.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Hints.cc new file mode 100644 index 00000000000..7a1e4ee9968 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Hints.cc @@ -0,0 +1,442 @@ +//======================================================================== +// +// Hints.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010, 2011 Albert Astals Cid <aacid@kde.org> +// Copyright 2010 Pino Toscano <pino@kde.org> +// +//======================================================================== + +#include <config.h> + +#include "Hints.h" + +#include "Linearization.h" +#include "Object.h" +#include "Stream.h" +#include "XRef.h" +#include "Parser.h" +#include "Lexer.h" +#include "SecurityHandler.h" + +#include <limits.h> + +//------------------------------------------------------------------------ +// Hints +//------------------------------------------------------------------------ + +Hints::Hints(BaseStream *str, Linearization *linearization, XRef *xref, SecurityHandler *secHdlr) +{ + mainXRefEntriesOffset = linearization->getMainXRefEntriesOffset(); + nPages = linearization->getNumPages(); + pageFirst = linearization->getPageFirst(); + pageEndFirst = linearization->getEndFirst(); + pageObjectFirst = linearization->getObjectNumberFirst(); + if (pageObjectFirst < 0 || pageObjectFirst >= xref->getNumObjects()) { + error(-1, + "Invalid reference for first page object (%d) in linearization table ", + pageObjectFirst); + pageObjectFirst = 0; + } + pageOffsetFirst = xref->getEntry(pageObjectFirst)->offset; + + if (nPages >= INT_MAX / (int)sizeof(Guint)) { + error(-1, "Invalid number of pages (%d) for hints table", nPages); + nPages = 0; + } + nObjects = (Guint *) gmallocn_checkoverflow(nPages, sizeof(Guint)); + pageObjectNum = (int *) gmallocn_checkoverflow(nPages, sizeof(int)); + xRefOffset = (Guint *) gmallocn_checkoverflow(nPages, sizeof(Guint)); + pageLength = (Guint *) gmallocn_checkoverflow(nPages, sizeof(Guint)); + pageOffset = (Guint *) gmallocn_checkoverflow(nPages, sizeof(Guint)); + numSharedObject = (Guint *) gmallocn_checkoverflow(nPages, sizeof(Guint)); + sharedObjectId = (Guint **) gmallocn_checkoverflow(nPages, sizeof(Guint*)); + if (!nObjects || !pageObjectNum || !xRefOffset || !pageLength || !pageOffset || + !numSharedObject || !sharedObjectId) { + error(-1, "Failed to allocate memory for hints tabel"); + nPages = 0; + } + + memset(numSharedObject, 0, nPages * sizeof(Guint)); + memset(pageObjectNum, 0, nPages * sizeof(int)); + + nSharedGroups = 0; + groupLength = NULL; + groupOffset = NULL; + groupHasSignature = NULL; + groupNumObjects = NULL; + groupXRefOffset = NULL; + + readTables(str, linearization, xref, secHdlr); +} + +Hints::~Hints() +{ + gfree(nObjects); + gfree(pageObjectNum); + gfree(xRefOffset); + gfree(pageLength); + gfree(pageOffset); + for (int i=0; i< nPages; i++) { + if (numSharedObject[i]) { + gfree(sharedObjectId[i]); + } + } + gfree(sharedObjectId); + gfree(numSharedObject); + + gfree(groupLength); + gfree(groupOffset); + gfree(groupHasSignature); + gfree(groupNumObjects); + gfree(groupXRefOffset); +} + +void Hints::readTables(BaseStream *str, Linearization *linearization, XRef *xref, SecurityHandler *secHdlr) +{ + hintsOffset = linearization->getHintsOffset(); + hintsLength = linearization->getHintsLength(); + hintsOffset2 = linearization->getHintsOffset2(); + hintsLength2 = linearization->getHintsLength2(); + + Parser *parser; + Object obj; + + int bufLength = hintsLength + hintsLength2; + + std::vector<char> buf(bufLength); + char *p = &buf[0]; + + obj.initNull(); + Stream *s = str->makeSubStream(hintsOffset, gFalse, hintsLength, &obj); + s->reset(); + for (Guint i=0; i < hintsLength; i++) { *p++ = s->getChar(); } + delete s; + + if (hintsOffset2 && hintsLength2) { + obj.initNull(); + s = str->makeSubStream(hintsOffset2, gFalse, hintsLength2, &obj); + s->reset(); + for (Guint i=0; i < hintsLength2; i++) { *p++ = s->getChar(); } + delete s; + } + + obj.initNull(); + MemStream *memStream = new MemStream (&buf[0], 0, bufLength, &obj); + + obj.initNull(); + parser = new Parser(xref, new Lexer(xref, memStream), gTrue); + + int num, gen; + if (parser->getObj(&obj)->isInt() && + (num = obj.getInt(), obj.free(), parser->getObj(&obj)->isInt()) && + (gen = obj.getInt(), obj.free(), parser->getObj(&obj)->isCmd("obj")) && + (obj.free(), parser->getObj(&obj, + secHdlr ? secHdlr->getFileKey() : (Guchar *)NULL, + secHdlr ? secHdlr->getEncAlgorithm() : cryptRC4, + secHdlr ? secHdlr->getFileKeyLength() : 0, + num, gen)->isStream())) { + Stream *hintsStream = obj.getStream(); + Dict *hintsDict = obj.streamGetDict(); + + int sharedStreamOffset = 0; + if (hintsDict->lookupInt("S", NULL, &sharedStreamOffset) && + sharedStreamOffset > 0) { + + hintsStream->reset(); + readPageOffsetTable(hintsStream); + + hintsStream->reset(); + for (int i=0; i<sharedStreamOffset; i++) hintsStream->getChar(); + readSharedObjectsTable(hintsStream); + } else { + error(-1, "Invalid shared object hint table offset"); + } + } else { + error(-1, "Failed parsing hints table object"); + } + obj.free(); + + delete parser; +} + +void Hints::readPageOffsetTable(Stream *str) +{ + if (nPages < 1) { + error(-1, "Invalid number of pages reading page offset hints table"); + return; + } + + inputBits = 0; // reset on byte boundary. + + nObjectLeast = readBits(32, str); + + objectOffsetFirst = readBits(32, str); + if (objectOffsetFirst >= hintsOffset) objectOffsetFirst += hintsLength; + + nBitsDiffObjects = readBits(16, str); + + pageLengthLeast = readBits(32, str); + + nBitsDiffPageLength = readBits(16, str); + + OffsetStreamLeast = readBits(32, str); + + nBitsOffsetStream = readBits(16, str); + + lengthStreamLeast = readBits(32, str); + + nBitsLengthStream = readBits(16, str); + + nBitsNumShared = readBits(16, str); + + nBitsShared = readBits(16, str); + + nBitsNumerator = readBits(16, str); + + denominator = readBits(16, str); + + for (int i=0; i<nPages; i++) { + nObjects[i] = nObjectLeast + readBits(nBitsDiffObjects, str); + } + + nObjects[0] = 0; + xRefOffset[0] = mainXRefEntriesOffset + 20; + for (int i=1; i<nPages; i++) { + xRefOffset[i] = xRefOffset[i-1] + 20*nObjects[i-1]; + } + + pageObjectNum[0] = 1; + for (int i=1; i<nPages; i++) { + pageObjectNum[i] = pageObjectNum[i-1] + nObjects[i-1]; + } + pageObjectNum[0] = pageObjectFirst; + + inputBits = 0; // reset on byte boundary. Not in specs! + for (int i=0; i<nPages; i++) { + pageLength[i] = pageLengthLeast + readBits(nBitsDiffPageLength, str); + } + + inputBits = 0; // reset on byte boundary. Not in specs! + numSharedObject[0] = readBits(nBitsNumShared, str); + numSharedObject[0] = 0; // Do not trust the read value to be 0. + sharedObjectId[0] = NULL; + for (int i=1; i<nPages; i++) { + numSharedObject[i] = readBits(nBitsNumShared, str); + if (numSharedObject[i] >= INT_MAX / (int)sizeof(Guint)) { + error(-1, "Invalid number of shared objects"); + numSharedObject[i] = 0; + return; + } + sharedObjectId[i] = (Guint *) gmallocn_checkoverflow(numSharedObject[i], sizeof(Guint)); + if (numSharedObject[i] && !sharedObjectId[i]) { + error(-1, "Failed to allocate memory for shared object IDs"); + numSharedObject[i] = 0; + return; + } + } + + inputBits = 0; // reset on byte boundary. Not in specs! + for (int i=1; i<nPages; i++) { + for (Guint j=0; j < numSharedObject[i]; j++) { + sharedObjectId[i][j] = readBits(nBitsShared, str); + } + } + + pageOffset[0] = pageOffsetFirst; + // find pageOffsets. + for (int i=1; i<nPages; i++) { + pageOffset[i] = pageOffset[i-1] + pageLength[i-1]; + } + +} + +void Hints::readSharedObjectsTable(Stream *str) +{ + inputBits = 0; // reset on byte boundary. + + Guint firstSharedObjectNumber = readBits(32, str); + + Guint firstSharedObjectOffset = readBits(32, str); + firstSharedObjectOffset += hintsLength; + + Guint nSharedGroupsFirst = readBits(32, str); + + Guint nSharedGroups = readBits(32, str); + + Guint nBitsNumObjects = readBits(16, str); + + Guint groupLengthLeast = readBits(32, str); + + Guint nBitsDiffGroupLength = readBits(16, str); + + if ((!nSharedGroups) || (nSharedGroups >= INT_MAX / (int)sizeof(Guint))) { + error(-1, "Invalid number of shared object groups"); + nSharedGroups = 0; + return; + } + if ((!nSharedGroupsFirst) || (nSharedGroupsFirst > nSharedGroups)) { + error(-1, "Invalid number of first page shared object groups"); + nSharedGroupsFirst = nSharedGroups; + } + + groupLength = (Guint *) gmallocn_checkoverflow(nSharedGroups, sizeof(Guint)); + groupOffset = (Guint *) gmallocn_checkoverflow(nSharedGroups, sizeof(Guint)); + groupHasSignature = (Guint *) gmallocn_checkoverflow(nSharedGroups, sizeof(Guint)); + groupNumObjects = (Guint *) gmallocn_checkoverflow(nSharedGroups, sizeof(Guint)); + groupXRefOffset = (Guint *) gmallocn_checkoverflow(nSharedGroups, sizeof(Guint)); + if (!groupLength || !groupOffset || !groupHasSignature || + !groupNumObjects || !groupXRefOffset) { + error(-1, "Failed to allocate memory for shared object groups"); + nSharedGroups = 0; + return; + } + + inputBits = 0; // reset on byte boundary. Not in specs! + for (Guint i=0; i<nSharedGroups; i++) { + groupLength[i] = groupLengthLeast + readBits(nBitsDiffGroupLength, str); + } + + groupOffset[0] = objectOffsetFirst; + for (Guint i=1; i<nSharedGroupsFirst; i++) { + groupOffset[i] = groupOffset[i-1] + groupLength[i-1]; + } + if (nSharedGroups > nSharedGroupsFirst ) { + groupOffset[nSharedGroupsFirst] = firstSharedObjectOffset; + for (Guint i=nSharedGroupsFirst+1; i<nSharedGroups; i++) { + groupOffset[i] = groupOffset[i-1] + groupLength[i-1]; + } + } + + inputBits = 0; // reset on byte boundary. Not in specs! + for (Guint i=0; i<nSharedGroups; i++) { + groupHasSignature[i] = readBits(1, str); + } + + inputBits = 0; // reset on byte boundary. Not in specs! + for (Guint i=0; i<nSharedGroups; i++) { + if (groupHasSignature[i]) { + readBits(128, str); + } + } + + inputBits = 0; // reset on byte boundary. Not in specs! + for (Guint i=0; i<nSharedGroups; i++) { + groupNumObjects[i] = + nBitsNumObjects ? 1 + readBits(nBitsNumObjects, str) : 1; + } + + for (Guint i=0; i<nSharedGroupsFirst; i++) { + groupNumObjects[i] = 0; + groupXRefOffset[i] = 0; + } + if (nSharedGroups > nSharedGroupsFirst ) { + groupXRefOffset[nSharedGroupsFirst] = + mainXRefEntriesOffset + 20*firstSharedObjectNumber; + for (Guint i=nSharedGroupsFirst+1; i<nSharedGroups; i++) { + groupXRefOffset[i] = groupXRefOffset[i-1] + 20*groupNumObjects[i-1]; + } + } +} + +Guint Hints::getPageOffset(int page) +{ + if ((page < 1) || (page > nPages)) return 0; + + if (page-1 > pageFirst) + return pageOffset[page-1]; + else if (page-1 < pageFirst) + return pageOffset[page]; + else + return pageOffset[0]; +} + +std::vector<ByteRange>* Hints::getPageRanges(int page) +{ + if ((page < 1) || (page > nPages)) return NULL; + + int idx; + if (page-1 > pageFirst) + idx = page-1; + else if (page-1 < pageFirst) + idx = page; + else + idx = 0; + + ByteRange pageRange; + std::vector<ByteRange> *v = new std::vector<ByteRange>; + + pageRange.offset = pageOffset[idx]; + pageRange.length = pageLength[idx]; + v->push_back(pageRange); + + pageRange.offset = xRefOffset[idx]; + pageRange.length = 20*nObjects[idx]; + v->push_back(pageRange); + + for (Guint j=0; j<numSharedObject[idx]; j++) { + Guint k = sharedObjectId[idx][j]; + + pageRange.offset = groupOffset[k]; + pageRange.length = groupLength[k]; + v->push_back(pageRange); + + pageRange.offset = groupXRefOffset[k]; + pageRange.length = 20*groupNumObjects[k]; + v->push_back(pageRange); + } + + return v; +} + +Guint Hints::readBit(Stream *str) +{ + Guint bit; + int c; + + if (inputBits == 0) { + if ((c = str->getChar()) == EOF) { + return (Guint) -1; + } + bitsBuffer = c; + inputBits = 8; + } + bit = (bitsBuffer >> (inputBits - 1)) & 1; + --inputBits; + return bit; +} + +Guint Hints::readBits(int n, Stream *str) +{ + Guint bit, bits; + + if (n < 0) return (Guint)-1; + if (n == 0) return 0; + + if (n == 1) + return readBit(str); + + bit = (readBit(str) << (n-1)); + if (bit == (Guint) -1) + return (Guint)-1; + + bits = readBits(n-1, str); + if (bits == (Guint) -1) + return (Guint)-1; + + return bit | bits; +} + +int Hints::getPageObjectNum(int page) { + if ((page < 1) || (page > nPages)) return 0; + + if (page-1 > pageFirst) + return pageObjectNum[page-1]; + else if (page-1 < pageFirst) + return pageObjectNum[page]; + else + return pageObjectNum[0]; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Hints.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Hints.h new file mode 100644 index 00000000000..d598e796beb --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Hints.h @@ -0,0 +1,95 @@ +//======================================================================== +// +// Hints.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#ifndef HINTS_H +#define HINTS_H + +#include <string.h> +#include "goo/gtypes.h" +#include <vector> +#include "PDFDoc.h" + +class Stream; +class BaseStream; +class Linearization; +class XRef; + +//------------------------------------------------------------------------ +// Hints +//------------------------------------------------------------------------ + +class Hints { +public: + + Hints(BaseStream *str, Linearization *linearization, XRef *xref, SecurityHandler *secHdlr); + ~Hints(); + + int getPageObjectNum(int page); + Guint getPageOffset(int page); + std::vector<ByteRange>* getPageRanges(int page); + +private: + + void readTables(BaseStream *str, Linearization *linearization, XRef *xref, SecurityHandler *secHdlr); + void readPageOffsetTable(Stream *str); + void readSharedObjectsTable(Stream *str); + + Guint readBit(Stream *str); + Guint readBits(int n, Stream *str); + + Guint hintsOffset; + Guint hintsLength; + Guint hintsOffset2; + Guint hintsLength2; + Guint mainXRefEntriesOffset; + + int nPages; + int pageFirst; + int pageObjectFirst; + Guint pageOffsetFirst; + Guint pageEndFirst; + int objectNumberFirst; + + Guint nObjectLeast; + Guint objectOffsetFirst; + Guint nBitsDiffObjects; + Guint pageLengthLeast; + Guint nBitsDiffPageLength; + Guint OffsetStreamLeast; + Guint nBitsOffsetStream; + Guint lengthStreamLeast; + Guint nBitsLengthStream; + Guint nBitsNumShared; + Guint nBitsShared; + Guint nBitsNumerator; + Guint denominator; + + Guint *nObjects; + int *pageObjectNum; + Guint *xRefOffset; + Guint *pageLength; + Guint *pageOffset; + Guint *numSharedObject; + Guint **sharedObjectId; + + Guint nSharedGroups; + Guint *groupLength; + Guint *groupOffset; + Guint *groupHasSignature; + Guint *groupNumObjects; + Guint *groupXRefOffset; + + int inputBits; + char bitsBuffer; + +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/JArithmeticDecoder.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/JArithmeticDecoder.cc new file mode 100644 index 00000000000..ec0778e64f4 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/JArithmeticDecoder.cc @@ -0,0 +1,322 @@ +//======================================================================== +// +// JArithmeticDecoder.cc +// +// Copyright 2002-2004 Glyph & Cog, LLC +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include "Object.h" +#include "Stream.h" +#include "JArithmeticDecoder.h" + +//------------------------------------------------------------------------ +// JArithmeticDecoderStates +//------------------------------------------------------------------------ + +JArithmeticDecoderStats::JArithmeticDecoderStats(int contextSizeA) { + contextSize = contextSizeA; + cxTab = (Guchar *)gmallocn(contextSize, sizeof(Guchar)); + reset(); +} + +JArithmeticDecoderStats::~JArithmeticDecoderStats() { + gfree(cxTab); +} + +JArithmeticDecoderStats *JArithmeticDecoderStats::copy() { + JArithmeticDecoderStats *stats; + + stats = new JArithmeticDecoderStats(contextSize); + memcpy(stats->cxTab, cxTab, contextSize); + return stats; +} + +void JArithmeticDecoderStats::reset() { + memset(cxTab, 0, contextSize); +} + +void JArithmeticDecoderStats::copyFrom(JArithmeticDecoderStats *stats) { + memcpy(cxTab, stats->cxTab, contextSize); +} + +void JArithmeticDecoderStats::setEntry(Guint cx, int i, int mps) { + cxTab[cx] = (i << 1) + mps; +} + +//------------------------------------------------------------------------ +// JArithmeticDecoder +//------------------------------------------------------------------------ + +Guint JArithmeticDecoder::qeTab[47] = { + 0x56010000, 0x34010000, 0x18010000, 0x0AC10000, + 0x05210000, 0x02210000, 0x56010000, 0x54010000, + 0x48010000, 0x38010000, 0x30010000, 0x24010000, + 0x1C010000, 0x16010000, 0x56010000, 0x54010000, + 0x51010000, 0x48010000, 0x38010000, 0x34010000, + 0x30010000, 0x28010000, 0x24010000, 0x22010000, + 0x1C010000, 0x18010000, 0x16010000, 0x14010000, + 0x12010000, 0x11010000, 0x0AC10000, 0x09C10000, + 0x08A10000, 0x05210000, 0x04410000, 0x02A10000, + 0x02210000, 0x01410000, 0x01110000, 0x00850000, + 0x00490000, 0x00250000, 0x00150000, 0x00090000, + 0x00050000, 0x00010000, 0x56010000 +}; + +int JArithmeticDecoder::nmpsTab[47] = { + 1, 2, 3, 4, 5, 38, 7, 8, 9, 10, 11, 12, 13, 29, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 45, 46 +}; + +int JArithmeticDecoder::nlpsTab[47] = { + 1, 6, 9, 12, 29, 33, 6, 14, 14, 14, 17, 18, 20, 21, 14, 14, + 15, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 46 +}; + +int JArithmeticDecoder::switchTab[47] = { + 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +JArithmeticDecoder::JArithmeticDecoder() { + str = NULL; + dataLen = 0; + limitStream = gFalse; +} + +inline Guint JArithmeticDecoder::readByte() { + if (limitStream) { + --dataLen; + if (dataLen < 0) { + return 0xff; + } + } + return (Guint)str->getChar() & 0xff; +} + +JArithmeticDecoder::~JArithmeticDecoder() { + cleanup(); +} + +void JArithmeticDecoder::start() { + buf0 = readByte(); + buf1 = readByte(); + + // INITDEC + c = (buf0 ^ 0xff) << 16; + byteIn(); + c <<= 7; + ct -= 7; + a = 0x80000000; +} + +void JArithmeticDecoder::restart(int dataLenA) { + int oldDataLen; + + oldDataLen = dataLen; + dataLen = dataLenA; + if (oldDataLen == -1) { + buf1 = readByte(); + } else if (oldDataLen <= -2) { + buf0 = readByte(); + buf1 = readByte(); + } +} + +void JArithmeticDecoder::cleanup() { + if (limitStream) { + while (dataLen > 0) { + buf0 = buf1; + buf1 = readByte(); + } + } +} + +int JArithmeticDecoder::decodeBit(Guint context, + JArithmeticDecoderStats *stats) { + int bit; + Guint qe; + int iCX, mpsCX; + + iCX = stats->cxTab[context] >> 1; + mpsCX = stats->cxTab[context] & 1; + qe = qeTab[iCX]; + a -= qe; + if (c < a) { + if (a & 0x80000000) { + bit = mpsCX; + } else { + // MPS_EXCHANGE + if (a < qe) { + bit = 1 - mpsCX; + if (switchTab[iCX]) { + stats->cxTab[context] = (nlpsTab[iCX] << 1) | (1 - mpsCX); + } else { + stats->cxTab[context] = (nlpsTab[iCX] << 1) | mpsCX; + } + } else { + bit = mpsCX; + stats->cxTab[context] = (nmpsTab[iCX] << 1) | mpsCX; + } + // RENORMD + do { + if (ct == 0) { + byteIn(); + } + a <<= 1; + c <<= 1; + --ct; + } while (!(a & 0x80000000)); + } + } else { + c -= a; + // LPS_EXCHANGE + if (a < qe) { + bit = mpsCX; + stats->cxTab[context] = (nmpsTab[iCX] << 1) | mpsCX; + } else { + bit = 1 - mpsCX; + if (switchTab[iCX]) { + stats->cxTab[context] = (nlpsTab[iCX] << 1) | (1 - mpsCX); + } else { + stats->cxTab[context] = (nlpsTab[iCX] << 1) | mpsCX; + } + } + a = qe; + // RENORMD + do { + if (ct == 0) { + byteIn(); + } + a <<= 1; + c <<= 1; + --ct; + } while (!(a & 0x80000000)); + } + return bit; +} + +int JArithmeticDecoder::decodeByte(Guint context, + JArithmeticDecoderStats *stats) { + int byte; + int i; + + byte = 0; + for (i = 0; i < 8; ++i) { + byte = (byte << 1) | decodeBit(context, stats); + } + return byte; +} + +GBool JArithmeticDecoder::decodeInt(int *x, JArithmeticDecoderStats *stats) { + int s; + Guint v; + int i; + + prev = 1; + s = decodeIntBit(stats); + if (decodeIntBit(stats)) { + if (decodeIntBit(stats)) { + if (decodeIntBit(stats)) { + if (decodeIntBit(stats)) { + if (decodeIntBit(stats)) { + v = 0; + for (i = 0; i < 32; ++i) { + v = (v << 1) | decodeIntBit(stats); + } + v += 4436; + } else { + v = 0; + for (i = 0; i < 12; ++i) { + v = (v << 1) | decodeIntBit(stats); + } + v += 340; + } + } else { + v = 0; + for (i = 0; i < 8; ++i) { + v = (v << 1) | decodeIntBit(stats); + } + v += 84; + } + } else { + v = 0; + for (i = 0; i < 6; ++i) { + v = (v << 1) | decodeIntBit(stats); + } + v += 20; + } + } else { + v = decodeIntBit(stats); + v = (v << 1) | decodeIntBit(stats); + v = (v << 1) | decodeIntBit(stats); + v = (v << 1) | decodeIntBit(stats); + v += 4; + } + } else { + v = decodeIntBit(stats); + v = (v << 1) | decodeIntBit(stats); + } + + if (s) { + if (v == 0) { + return gFalse; + } + *x = -(int)v; + } else { + *x = (int)v; + } + return gTrue; +} + +int JArithmeticDecoder::decodeIntBit(JArithmeticDecoderStats *stats) { + int bit; + + bit = decodeBit(prev, stats); + if (prev < 0x100) { + prev = (prev << 1) | bit; + } else { + prev = (((prev << 1) | bit) & 0x1ff) | 0x100; + } + return bit; +} + +Guint JArithmeticDecoder::decodeIAID(Guint codeLen, + JArithmeticDecoderStats *stats) { + Guint i; + int bit; + + prev = 1; + for (i = 0; i < codeLen; ++i) { + bit = decodeBit(prev, stats); + prev = (prev << 1) | bit; + } + return prev - (1 << codeLen); +} + +void JArithmeticDecoder::byteIn() { + if (buf0 == 0xff) { + if (buf1 > 0x8f) { + ct = 8; + } else { + buf0 = buf1; + buf1 = readByte(); + c = c + 0xfe00 - (buf0 << 9); + ct = 7; + } + } else { + buf0 = buf1; + buf1 = readByte(); + c = c + 0xff00 - (buf0 << 8); + ct = 8; + } +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/JArithmeticDecoder.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/JArithmeticDecoder.h new file mode 100644 index 00000000000..0f091b7bd84 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/JArithmeticDecoder.h @@ -0,0 +1,107 @@ +//======================================================================== +// +// JArithmeticDecoder.h +// +// Arithmetic decoder used by the JBIG2 and JPEG2000 decoders. +// +// Copyright 2002-2004 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef JARITHMETICDECODER_H +#define JARITHMETICDECODER_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" + +class Stream; + +//------------------------------------------------------------------------ +// JArithmeticDecoderStats +//------------------------------------------------------------------------ + +class JArithmeticDecoderStats { +public: + + JArithmeticDecoderStats(int contextSizeA); + ~JArithmeticDecoderStats(); + JArithmeticDecoderStats *copy(); + void reset(); + int getContextSize() { return contextSize; } + void copyFrom(JArithmeticDecoderStats *stats); + void setEntry(Guint cx, int i, int mps); + +private: + + Guchar *cxTab; // cxTab[cx] = (i[cx] << 1) + mps[cx] + int contextSize; + + friend class JArithmeticDecoder; +}; + +//------------------------------------------------------------------------ +// JArithmeticDecoder +//------------------------------------------------------------------------ + +class JArithmeticDecoder { +public: + + JArithmeticDecoder(); + ~JArithmeticDecoder(); + + void setStream(Stream *strA) + { str = strA; dataLen = 0; limitStream = gFalse; } + void setStream(Stream *strA, int dataLenA) + { str = strA; dataLen = dataLenA; limitStream = gTrue; } + + // Start decoding on a new stream. This fills the byte buffers and + // runs INITDEC. + void start(); + + // Restart decoding on an interrupted stream. This refills the + // buffers if needed, but does not run INITDEC. (This is used in + // JPEG 2000 streams when codeblock data is split across multiple + // packets/layers.) + void restart(int dataLenA); + + // Read any leftover data in the stream. + void cleanup(); + + // Decode one bit. + int decodeBit(Guint context, JArithmeticDecoderStats *stats); + + // Decode eight bits. + int decodeByte(Guint context, JArithmeticDecoderStats *stats); + + // Returns false for OOB, otherwise sets *<x> and returns true. + GBool decodeInt(int *x, JArithmeticDecoderStats *stats); + + Guint decodeIAID(Guint codeLen, + JArithmeticDecoderStats *stats); + +private: + + Guint readByte(); + int decodeIntBit(JArithmeticDecoderStats *stats); + void byteIn(); + + static Guint qeTab[47]; + static int nmpsTab[47]; + static int nlpsTab[47]; + static int switchTab[47]; + + Guint buf0, buf1; + Guint c, a; + int ct; + + Guint prev; // for the integer decoder + + Stream *str; + int dataLen; + GBool limitStream; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/JBIG2Stream.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/JBIG2Stream.cc new file mode 100644 index 00000000000..bfb1994ed9d --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/JBIG2Stream.cc @@ -0,0 +1,3743 @@ +//======================================================================== +// +// JBIG2Stream.cc +// +// Copyright 2002-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006 Raj Kumar <rkumar@archive.org> +// Copyright (C) 2006 Paul Walmsley <paul@booyaka.com> +// Copyright (C) 2006-2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009 David Benjamin <davidben@mit.edu> +// Copyright (C) 2011 Edward Jiang <ejiang@google.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include <limits.h> +#include "goo/GooList.h" +#include "Error.h" +#include "JArithmeticDecoder.h" +#include "JBIG2Stream.h" + +//~ share these tables +#include "Stream-CCITT.h" + +//------------------------------------------------------------------------ + +static const int contextSize[4] = { 16, 13, 10, 10 }; +static const int refContextSize[2] = { 13, 10 }; + +//------------------------------------------------------------------------ +// JBIG2HuffmanTable +//------------------------------------------------------------------------ + +#define jbig2HuffmanLOW 0xfffffffd +#define jbig2HuffmanOOB 0xfffffffe +#define jbig2HuffmanEOT 0xffffffff + +struct JBIG2HuffmanTable { + int val; + Guint prefixLen; + Guint rangeLen; // can also be LOW, OOB, or EOT + Guint prefix; +}; + +static JBIG2HuffmanTable huffTableA[] = { + { 0, 1, 4, 0x000 }, + { 16, 2, 8, 0x002 }, + { 272, 3, 16, 0x006 }, + { 65808, 3, 32, 0x007 }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +static JBIG2HuffmanTable huffTableB[] = { + { 0, 1, 0, 0x000 }, + { 1, 2, 0, 0x002 }, + { 2, 3, 0, 0x006 }, + { 3, 4, 3, 0x00e }, + { 11, 5, 6, 0x01e }, + { 75, 6, 32, 0x03e }, + { 0, 6, jbig2HuffmanOOB, 0x03f }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +static JBIG2HuffmanTable huffTableC[] = { + { 0, 1, 0, 0x000 }, + { 1, 2, 0, 0x002 }, + { 2, 3, 0, 0x006 }, + { 3, 4, 3, 0x00e }, + { 11, 5, 6, 0x01e }, + { 0, 6, jbig2HuffmanOOB, 0x03e }, + { 75, 7, 32, 0x0fe }, + { -256, 8, 8, 0x0fe }, + { -257, 8, jbig2HuffmanLOW, 0x0ff }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +static JBIG2HuffmanTable huffTableD[] = { + { 1, 1, 0, 0x000 }, + { 2, 2, 0, 0x002 }, + { 3, 3, 0, 0x006 }, + { 4, 4, 3, 0x00e }, + { 12, 5, 6, 0x01e }, + { 76, 5, 32, 0x01f }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +static JBIG2HuffmanTable huffTableE[] = { + { 1, 1, 0, 0x000 }, + { 2, 2, 0, 0x002 }, + { 3, 3, 0, 0x006 }, + { 4, 4, 3, 0x00e }, + { 12, 5, 6, 0x01e }, + { 76, 6, 32, 0x03e }, + { -255, 7, 8, 0x07e }, + { -256, 7, jbig2HuffmanLOW, 0x07f }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +static JBIG2HuffmanTable huffTableF[] = { + { 0, 2, 7, 0x000 }, + { 128, 3, 7, 0x002 }, + { 256, 3, 8, 0x003 }, + { -1024, 4, 9, 0x008 }, + { -512, 4, 8, 0x009 }, + { -256, 4, 7, 0x00a }, + { -32, 4, 5, 0x00b }, + { 512, 4, 9, 0x00c }, + { 1024, 4, 10, 0x00d }, + { -2048, 5, 10, 0x01c }, + { -128, 5, 6, 0x01d }, + { -64, 5, 5, 0x01e }, + { -2049, 6, jbig2HuffmanLOW, 0x03e }, + { 2048, 6, 32, 0x03f }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +static JBIG2HuffmanTable huffTableG[] = { + { -512, 3, 8, 0x000 }, + { 256, 3, 8, 0x001 }, + { 512, 3, 9, 0x002 }, + { 1024, 3, 10, 0x003 }, + { -1024, 4, 9, 0x008 }, + { -256, 4, 7, 0x009 }, + { -32, 4, 5, 0x00a }, + { 0, 4, 5, 0x00b }, + { 128, 4, 7, 0x00c }, + { -128, 5, 6, 0x01a }, + { -64, 5, 5, 0x01b }, + { 32, 5, 5, 0x01c }, + { 64, 5, 6, 0x01d }, + { -1025, 5, jbig2HuffmanLOW, 0x01e }, + { 2048, 5, 32, 0x01f }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +static JBIG2HuffmanTable huffTableH[] = { + { 0, 2, 1, 0x000 }, + { 0, 2, jbig2HuffmanOOB, 0x001 }, + { 4, 3, 4, 0x004 }, + { -1, 4, 0, 0x00a }, + { 22, 4, 4, 0x00b }, + { 38, 4, 5, 0x00c }, + { 2, 5, 0, 0x01a }, + { 70, 5, 6, 0x01b }, + { 134, 5, 7, 0x01c }, + { 3, 6, 0, 0x03a }, + { 20, 6, 1, 0x03b }, + { 262, 6, 7, 0x03c }, + { 646, 6, 10, 0x03d }, + { -2, 7, 0, 0x07c }, + { 390, 7, 8, 0x07d }, + { -15, 8, 3, 0x0fc }, + { -5, 8, 1, 0x0fd }, + { -7, 9, 1, 0x1fc }, + { -3, 9, 0, 0x1fd }, + { -16, 9, jbig2HuffmanLOW, 0x1fe }, + { 1670, 9, 32, 0x1ff }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +static JBIG2HuffmanTable huffTableI[] = { + { 0, 2, jbig2HuffmanOOB, 0x000 }, + { -1, 3, 1, 0x002 }, + { 1, 3, 1, 0x003 }, + { 7, 3, 5, 0x004 }, + { -3, 4, 1, 0x00a }, + { 43, 4, 5, 0x00b }, + { 75, 4, 6, 0x00c }, + { 3, 5, 1, 0x01a }, + { 139, 5, 7, 0x01b }, + { 267, 5, 8, 0x01c }, + { 5, 6, 1, 0x03a }, + { 39, 6, 2, 0x03b }, + { 523, 6, 8, 0x03c }, + { 1291, 6, 11, 0x03d }, + { -5, 7, 1, 0x07c }, + { 779, 7, 9, 0x07d }, + { -31, 8, 4, 0x0fc }, + { -11, 8, 2, 0x0fd }, + { -15, 9, 2, 0x1fc }, + { -7, 9, 1, 0x1fd }, + { -32, 9, jbig2HuffmanLOW, 0x1fe }, + { 3339, 9, 32, 0x1ff }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +static JBIG2HuffmanTable huffTableJ[] = { + { -2, 2, 2, 0x000 }, + { 6, 2, 6, 0x001 }, + { 0, 2, jbig2HuffmanOOB, 0x002 }, + { -3, 5, 0, 0x018 }, + { 2, 5, 0, 0x019 }, + { 70, 5, 5, 0x01a }, + { 3, 6, 0, 0x036 }, + { 102, 6, 5, 0x037 }, + { 134, 6, 6, 0x038 }, + { 198, 6, 7, 0x039 }, + { 326, 6, 8, 0x03a }, + { 582, 6, 9, 0x03b }, + { 1094, 6, 10, 0x03c }, + { -21, 7, 4, 0x07a }, + { -4, 7, 0, 0x07b }, + { 4, 7, 0, 0x07c }, + { 2118, 7, 11, 0x07d }, + { -5, 8, 0, 0x0fc }, + { 5, 8, 0, 0x0fd }, + { -22, 8, jbig2HuffmanLOW, 0x0fe }, + { 4166, 8, 32, 0x0ff }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +static JBIG2HuffmanTable huffTableK[] = { + { 1, 1, 0, 0x000 }, + { 2, 2, 1, 0x002 }, + { 4, 4, 0, 0x00c }, + { 5, 4, 1, 0x00d }, + { 7, 5, 1, 0x01c }, + { 9, 5, 2, 0x01d }, + { 13, 6, 2, 0x03c }, + { 17, 7, 2, 0x07a }, + { 21, 7, 3, 0x07b }, + { 29, 7, 4, 0x07c }, + { 45, 7, 5, 0x07d }, + { 77, 7, 6, 0x07e }, + { 141, 7, 32, 0x07f }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +static JBIG2HuffmanTable huffTableL[] = { + { 1, 1, 0, 0x000 }, + { 2, 2, 0, 0x002 }, + { 3, 3, 1, 0x006 }, + { 5, 5, 0, 0x01c }, + { 6, 5, 1, 0x01d }, + { 8, 6, 1, 0x03c }, + { 10, 7, 0, 0x07a }, + { 11, 7, 1, 0x07b }, + { 13, 7, 2, 0x07c }, + { 17, 7, 3, 0x07d }, + { 25, 7, 4, 0x07e }, + { 41, 8, 5, 0x0fe }, + { 73, 8, 32, 0x0ff }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +static JBIG2HuffmanTable huffTableM[] = { + { 1, 1, 0, 0x000 }, + { 2, 3, 0, 0x004 }, + { 7, 3, 3, 0x005 }, + { 3, 4, 0, 0x00c }, + { 5, 4, 1, 0x00d }, + { 4, 5, 0, 0x01c }, + { 15, 6, 1, 0x03a }, + { 17, 6, 2, 0x03b }, + { 21, 6, 3, 0x03c }, + { 29, 6, 4, 0x03d }, + { 45, 6, 5, 0x03e }, + { 77, 7, 6, 0x07e }, + { 141, 7, 32, 0x07f }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +static JBIG2HuffmanTable huffTableN[] = { + { 0, 1, 0, 0x000 }, + { -2, 3, 0, 0x004 }, + { -1, 3, 0, 0x005 }, + { 1, 3, 0, 0x006 }, + { 2, 3, 0, 0x007 }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +static JBIG2HuffmanTable huffTableO[] = { + { 0, 1, 0, 0x000 }, + { -1, 3, 0, 0x004 }, + { 1, 3, 0, 0x005 }, + { -2, 4, 0, 0x00c }, + { 2, 4, 0, 0x00d }, + { -4, 5, 1, 0x01c }, + { 3, 5, 1, 0x01d }, + { -8, 6, 2, 0x03c }, + { 5, 6, 2, 0x03d }, + { -24, 7, 4, 0x07c }, + { 9, 7, 4, 0x07d }, + { -25, 7, jbig2HuffmanLOW, 0x07e }, + { 25, 7, 32, 0x07f }, + { 0, 0, jbig2HuffmanEOT, 0 } +}; + +//------------------------------------------------------------------------ +// JBIG2HuffmanDecoder +//------------------------------------------------------------------------ + +class JBIG2HuffmanDecoder { +public: + + JBIG2HuffmanDecoder(); + ~JBIG2HuffmanDecoder(); + void setStream(Stream *strA) { str = strA; } + + void reset(); + + // Returns false for OOB, otherwise sets *<x> and returns true. + GBool decodeInt(int *x, JBIG2HuffmanTable *table); + + Guint readBits(Guint n); + Guint readBit(); + + // Sort the table by prefix length and assign prefix values. + void buildTable(JBIG2HuffmanTable *table, Guint len); + +private: + + Stream *str; + Guint buf; + Guint bufLen; +}; + +JBIG2HuffmanDecoder::JBIG2HuffmanDecoder() { + str = NULL; + reset(); +} + +JBIG2HuffmanDecoder::~JBIG2HuffmanDecoder() { +} + +void JBIG2HuffmanDecoder::reset() { + buf = 0; + bufLen = 0; +} + +//~ optimize this +GBool JBIG2HuffmanDecoder::decodeInt(int *x, JBIG2HuffmanTable *table) { + Guint i, len, prefix; + + i = 0; + len = 0; + prefix = 0; + while (table[i].rangeLen != jbig2HuffmanEOT) { + while (len < table[i].prefixLen) { + prefix = (prefix << 1) | readBit(); + ++len; + } + if (prefix == table[i].prefix) { + if (table[i].rangeLen == jbig2HuffmanOOB) { + return gFalse; + } + if (table[i].rangeLen == jbig2HuffmanLOW) { + *x = table[i].val - readBits(32); + } else if (table[i].rangeLen > 0) { + *x = table[i].val + readBits(table[i].rangeLen); + } else { + *x = table[i].val; + } + return gTrue; + } + ++i; + } + return gFalse; +} + +Guint JBIG2HuffmanDecoder::readBits(Guint n) { + Guint x, mask, nLeft; + + mask = (n == 32) ? 0xffffffff : ((1 << n) - 1); + if (bufLen >= n) { + x = (buf >> (bufLen - n)) & mask; + bufLen -= n; + } else { + x = buf & ((1 << bufLen) - 1); + nLeft = n - bufLen; + bufLen = 0; + while (nLeft >= 8) { + x = (x << 8) | (str->getChar() & 0xff); + nLeft -= 8; + } + if (nLeft > 0) { + buf = str->getChar(); + bufLen = 8 - nLeft; + x = (x << nLeft) | ((buf >> bufLen) & ((1 << nLeft) - 1)); + } + } + return x; +} + +Guint JBIG2HuffmanDecoder::readBit() { + if (bufLen == 0) { + buf = str->getChar(); + bufLen = 8; + } + --bufLen; + return (buf >> bufLen) & 1; +} + +void JBIG2HuffmanDecoder::buildTable(JBIG2HuffmanTable *table, Guint len) { + Guint i, j, k, prefix; + JBIG2HuffmanTable tab; + + // stable selection sort: + // - entries with prefixLen > 0, in ascending prefixLen order + // - entry with prefixLen = 0, rangeLen = EOT + // - all other entries with prefixLen = 0 + // (on entry, table[len] has prefixLen = 0, rangeLen = EOT) + for (i = 0; i < len; ++i) { + for (j = i; j < len && table[j].prefixLen == 0; ++j) ; + if (j == len) { + break; + } + for (k = j + 1; k < len; ++k) { + if (table[k].prefixLen > 0 && + table[k].prefixLen < table[j].prefixLen) { + j = k; + } + } + if (j != i) { + tab = table[j]; + for (k = j; k > i; --k) { + table[k] = table[k - 1]; + } + table[i] = tab; + } + } + table[i] = table[len]; + + // assign prefixes + if (table[0].rangeLen != jbig2HuffmanEOT) { + i = 0; + prefix = 0; + table[i++].prefix = prefix++; + for (; table[i].rangeLen != jbig2HuffmanEOT; ++i) { + prefix <<= table[i].prefixLen - table[i-1].prefixLen; + table[i].prefix = prefix++; + } + } +} + +//------------------------------------------------------------------------ +// JBIG2MMRDecoder +//------------------------------------------------------------------------ + +class JBIG2MMRDecoder { +public: + + JBIG2MMRDecoder(); + ~JBIG2MMRDecoder(); + void setStream(Stream *strA) { str = strA; } + void reset(); + int get2DCode(); + int getBlackCode(); + int getWhiteCode(); + Guint get24Bits(); + void skipTo(Guint length); + +private: + + Stream *str; + Guint buf; + Guint bufLen; + Guint nBytesRead; +}; + +JBIG2MMRDecoder::JBIG2MMRDecoder() { + str = NULL; + reset(); +} + +JBIG2MMRDecoder::~JBIG2MMRDecoder() { +} + +void JBIG2MMRDecoder::reset() { + buf = 0; + bufLen = 0; + nBytesRead = 0; +} + +int JBIG2MMRDecoder::get2DCode() { + const CCITTCode *p; + + if (bufLen == 0) { + buf = str->getChar() & 0xff; + bufLen = 8; + ++nBytesRead; + p = &twoDimTab1[(buf >> 1) & 0x7f]; + } else if (bufLen == 8) { + p = &twoDimTab1[(buf >> 1) & 0x7f]; + } else { + p = &twoDimTab1[(buf << (7 - bufLen)) & 0x7f]; + if (p->bits < 0 || p->bits > (int)bufLen) { + buf = (buf << 8) | (str->getChar() & 0xff); + bufLen += 8; + ++nBytesRead; + p = &twoDimTab1[(buf >> (bufLen - 7)) & 0x7f]; + } + } + if (p->bits < 0) { + error(str->getPos(), "Bad two dim code in JBIG2 MMR stream"); + return EOF; + } + bufLen -= p->bits; + return p->n; +} + +int JBIG2MMRDecoder::getWhiteCode() { + const CCITTCode *p; + Guint code; + + if (bufLen == 0) { + buf = str->getChar() & 0xff; + bufLen = 8; + ++nBytesRead; + } + while (1) { + if (bufLen >= 11 && ((buf >> (bufLen - 7)) & 0x7f) == 0) { + if (bufLen <= 12) { + code = buf << (12 - bufLen); + } else { + code = buf >> (bufLen - 12); + } + p = &whiteTab1[code & 0x1f]; + } else { + if (bufLen <= 9) { + code = buf << (9 - bufLen); + } else { + code = buf >> (bufLen - 9); + } + p = &whiteTab2[code & 0x1ff]; + } + if (p->bits > 0 && p->bits <= (int)bufLen) { + bufLen -= p->bits; + return p->n; + } + if (bufLen >= 12) { + break; + } + buf = (buf << 8) | (str->getChar() & 0xff); + bufLen += 8; + ++nBytesRead; + } + error(str->getPos(), "Bad white code in JBIG2 MMR stream"); + // eat a bit and return a positive number so that the caller doesn't + // go into an infinite loop + --bufLen; + return 1; +} + +int JBIG2MMRDecoder::getBlackCode() { + const CCITTCode *p; + Guint code; + + if (bufLen == 0) { + buf = str->getChar() & 0xff; + bufLen = 8; + ++nBytesRead; + } + while (1) { + if (bufLen >= 10 && ((buf >> (bufLen - 6)) & 0x3f) == 0) { + if (bufLen <= 13) { + code = buf << (13 - bufLen); + } else { + code = buf >> (bufLen - 13); + } + p = &blackTab1[code & 0x7f]; + } else if (bufLen >= 7 && ((buf >> (bufLen - 4)) & 0x0f) == 0 && + ((buf >> (bufLen - 6)) & 0x03) != 0) { + if (bufLen <= 12) { + code = buf << (12 - bufLen); + } else { + code = buf >> (bufLen - 12); + } + p = &blackTab2[(code & 0xff) - 64]; + } else { + if (bufLen <= 6) { + code = buf << (6 - bufLen); + } else { + code = buf >> (bufLen - 6); + } + p = &blackTab3[code & 0x3f]; + } + if (p->bits > 0 && p->bits <= (int)bufLen) { + bufLen -= p->bits; + return p->n; + } + if (bufLen >= 13) { + break; + } + buf = (buf << 8) | (str->getChar() & 0xff); + bufLen += 8; + ++nBytesRead; + } + error(str->getPos(), "Bad black code in JBIG2 MMR stream"); + // eat a bit and return a positive number so that the caller doesn't + // go into an infinite loop + --bufLen; + return 1; +} + +Guint JBIG2MMRDecoder::get24Bits() { + while (bufLen < 24) { + buf = (buf << 8) | (str->getChar() & 0xff); + bufLen += 8; + ++nBytesRead; + } + return (buf >> (bufLen - 24)) & 0xffffff; +} + +void JBIG2MMRDecoder::skipTo(Guint length) { + while (nBytesRead < length) { + str->getChar(); + ++nBytesRead; + } +} + +//------------------------------------------------------------------------ +// JBIG2Segment +//------------------------------------------------------------------------ + +enum JBIG2SegmentType { + jbig2SegBitmap, + jbig2SegSymbolDict, + jbig2SegPatternDict, + jbig2SegCodeTable +}; + +class JBIG2Segment { +public: + + JBIG2Segment(Guint segNumA) { segNum = segNumA; } + virtual ~JBIG2Segment() {} + void setSegNum(Guint segNumA) { segNum = segNumA; } + Guint getSegNum() { return segNum; } + virtual JBIG2SegmentType getType() = 0; + +private: + + Guint segNum; +}; + +//------------------------------------------------------------------------ +// JBIG2Bitmap +//------------------------------------------------------------------------ + +struct JBIG2BitmapPtr { + Guchar *p; + int shift; + int x; +}; + +class JBIG2Bitmap: public JBIG2Segment { +public: + + JBIG2Bitmap(Guint segNumA, int wA, int hA); + virtual ~JBIG2Bitmap(); + virtual JBIG2SegmentType getType() { return jbig2SegBitmap; } + JBIG2Bitmap *copy() { return new JBIG2Bitmap(0, this); } + JBIG2Bitmap *getSlice(Guint x, Guint y, Guint wA, Guint hA); + void expand(int newH, Guint pixel); + void clearToZero(); + void clearToOne(); + int getWidth() { return w; } + int getHeight() { return h; } + int getPixel(int x, int y) + { return (x < 0 || x >= w || y < 0 || y >= h) ? 0 : + (data[y * line + (x >> 3)] >> (7 - (x & 7))) & 1; } + void setPixel(int x, int y) + { data[y * line + (x >> 3)] |= 1 << (7 - (x & 7)); } + void clearPixel(int x, int y) + { data[y * line + (x >> 3)] &= 0x7f7f >> (x & 7); } + void getPixelPtr(int x, int y, JBIG2BitmapPtr *ptr); + int nextPixel(JBIG2BitmapPtr *ptr); + void duplicateRow(int yDest, int ySrc); + void combine(JBIG2Bitmap *bitmap, int x, int y, Guint combOp); + Guchar *getDataPtr() { return data; } + int getDataSize() { return h * line; } + GBool isOk() { return data != NULL; } + +private: + + JBIG2Bitmap(Guint segNumA, JBIG2Bitmap *bitmap); + + int w, h, line; + Guchar *data; +}; + +JBIG2Bitmap::JBIG2Bitmap(Guint segNumA, int wA, int hA): + JBIG2Segment(segNumA) +{ + w = wA; + h = hA; + line = (wA + 7) >> 3; + + if (w <= 0 || h <= 0 || line <= 0 || h >= (INT_MAX - 1) / line) { + error(-1, "invalid width/height"); + data = NULL; + return; + } + // need to allocate one extra guard byte for use in combine() + data = (Guchar *)gmalloc(h * line + 1); + data[h * line] = 0; +} + +JBIG2Bitmap::JBIG2Bitmap(Guint segNumA, JBIG2Bitmap *bitmap): + JBIG2Segment(segNumA) +{ + w = bitmap->w; + h = bitmap->h; + line = bitmap->line; + + if (w <= 0 || h <= 0 || line <= 0 || h >= (INT_MAX - 1) / line) { + error(-1, "invalid width/height"); + data = NULL; + return; + } + // need to allocate one extra guard byte for use in combine() + data = (Guchar *)gmalloc(h * line + 1); + memcpy(data, bitmap->data, h * line); + data[h * line] = 0; +} + +JBIG2Bitmap::~JBIG2Bitmap() { + gfree(data); +} + +//~ optimize this +JBIG2Bitmap *JBIG2Bitmap::getSlice(Guint x, Guint y, Guint wA, Guint hA) { + JBIG2Bitmap *slice; + Guint xx, yy; + + slice = new JBIG2Bitmap(0, wA, hA); + if (slice->isOk()) { + slice->clearToZero(); + for (yy = 0; yy < hA; ++yy) { + for (xx = 0; xx < wA; ++xx) { + if (getPixel(x + xx, y + yy)) { + slice->setPixel(xx, yy); + } + } + } + } else { + delete slice; + slice = NULL; + } + return slice; +} + +void JBIG2Bitmap::expand(int newH, Guint pixel) { + if (newH <= h || line <= 0 || newH >= (INT_MAX - 1) / line) { + error(-1, "invalid width/height"); + gfree(data); + data = NULL; + return; + } + // need to allocate one extra guard byte for use in combine() + data = (Guchar *)grealloc(data, newH * line + 1); + if (pixel) { + memset(data + h * line, 0xff, (newH - h) * line); + } else { + memset(data + h * line, 0x00, (newH - h) * line); + } + h = newH; + data[h * line] = 0; +} + +void JBIG2Bitmap::clearToZero() { + memset(data, 0, h * line); +} + +void JBIG2Bitmap::clearToOne() { + memset(data, 0xff, h * line); +} + +inline void JBIG2Bitmap::getPixelPtr(int x, int y, JBIG2BitmapPtr *ptr) { + if (y < 0 || y >= h || x >= w) { + ptr->p = NULL; + ptr->shift = 0; // make gcc happy + ptr->x = 0; // make gcc happy + } else if (x < 0) { + ptr->p = &data[y * line]; + ptr->shift = 7; + ptr->x = x; + } else { + ptr->p = &data[y * line + (x >> 3)]; + ptr->shift = 7 - (x & 7); + ptr->x = x; + } +} + +inline int JBIG2Bitmap::nextPixel(JBIG2BitmapPtr *ptr) { + int pix; + + if (!ptr->p) { + pix = 0; + } else if (ptr->x < 0) { + ++ptr->x; + pix = 0; + } else { + pix = (*ptr->p >> ptr->shift) & 1; + if (++ptr->x == w) { + ptr->p = NULL; + } else if (ptr->shift == 0) { + ++ptr->p; + ptr->shift = 7; + } else { + --ptr->shift; + } + } + return pix; +} + +void JBIG2Bitmap::duplicateRow(int yDest, int ySrc) { + memcpy(data + yDest * line, data + ySrc * line, line); +} + +void JBIG2Bitmap::combine(JBIG2Bitmap *bitmap, int x, int y, + Guint combOp) { + int x0, x1, y0, y1, xx, yy; + Guchar *srcPtr, *destPtr; + Guint src0, src1, src, dest, s1, s2, m1, m2, m3; + GBool oneByte; + + // check for the pathological case where y = -2^31 + if (y < -0x7fffffff) { + return; + } + if (y < 0) { + y0 = -y; + } else { + y0 = 0; + } + if (y + bitmap->h > h) { + y1 = h - y; + } else { + y1 = bitmap->h; + } + if (y0 >= y1) { + return; + } + + if (x >= 0) { + x0 = x & ~7; + } else { + x0 = 0; + } + x1 = x + bitmap->w; + if (x1 > w) { + x1 = w; + } + if (x0 >= x1) { + return; + } + + s1 = x & 7; + s2 = 8 - s1; + m1 = 0xff >> (x1 & 7); + m2 = 0xff << (((x1 & 7) == 0) ? 0 : 8 - (x1 & 7)); + m3 = (0xff >> s1) & m2; + + oneByte = x0 == ((x1 - 1) & ~7); + + for (yy = y0; yy < y1; ++yy) { + + // one byte per line -- need to mask both left and right side + if (oneByte) { + if (x >= 0) { + destPtr = data + (y + yy) * line + (x >> 3); + srcPtr = bitmap->data + yy * bitmap->line; + dest = *destPtr; + src1 = *srcPtr; + switch (combOp) { + case 0: // or + dest |= (src1 >> s1) & m2; + break; + case 1: // and + dest &= ((0xff00 | src1) >> s1) | m1; + break; + case 2: // xor + dest ^= (src1 >> s1) & m2; + break; + case 3: // xnor + dest ^= ((src1 ^ 0xff) >> s1) & m2; + break; + case 4: // replace + dest = (dest & ~m3) | ((src1 >> s1) & m3); + break; + } + *destPtr = dest; + } else { + destPtr = data + (y + yy) * line; + srcPtr = bitmap->data + yy * bitmap->line + (-x >> 3); + dest = *destPtr; + src1 = *srcPtr; + switch (combOp) { + case 0: // or + dest |= src1 & m2; + break; + case 1: // and + dest &= src1 | m1; + break; + case 2: // xor + dest ^= src1 & m2; + break; + case 3: // xnor + dest ^= (src1 ^ 0xff) & m2; + break; + case 4: // replace + dest = (src1 & m2) | (dest & m1); + break; + } + *destPtr = dest; + } + + // multiple bytes per line -- need to mask left side of left-most + // byte and right side of right-most byte + } else { + + // left-most byte + if (x >= 0) { + destPtr = data + (y + yy) * line + (x >> 3); + srcPtr = bitmap->data + yy * bitmap->line; + src1 = *srcPtr++; + dest = *destPtr; + switch (combOp) { + case 0: // or + dest |= src1 >> s1; + break; + case 1: // and + dest &= (0xff00 | src1) >> s1; + break; + case 2: // xor + dest ^= src1 >> s1; + break; + case 3: // xnor + dest ^= (src1 ^ 0xff) >> s1; + break; + case 4: // replace + dest = (dest & (0xff << s2)) | (src1 >> s1); + break; + } + *destPtr++ = dest; + xx = x0 + 8; + } else { + destPtr = data + (y + yy) * line; + srcPtr = bitmap->data + yy * bitmap->line + (-x >> 3); + src1 = *srcPtr++; + xx = x0; + } + + // middle bytes + for (; xx < x1 - 8; xx += 8) { + dest = *destPtr; + src0 = src1; + src1 = *srcPtr++; + src = (((src0 << 8) | src1) >> s1) & 0xff; + switch (combOp) { + case 0: // or + dest |= src; + break; + case 1: // and + dest &= src; + break; + case 2: // xor + dest ^= src; + break; + case 3: // xnor + dest ^= src ^ 0xff; + break; + case 4: // replace + dest = src; + break; + } + *destPtr++ = dest; + } + + // right-most byte + // note: this last byte (src1) may not actually be used, depending + // on the values of s1, m1, and m2 - and in fact, it may be off + // the edge of the source bitmap, which means we need to allocate + // one extra guard byte at the end of each bitmap + dest = *destPtr; + src0 = src1; + src1 = *srcPtr++; + src = (((src0 << 8) | src1) >> s1) & 0xff; + switch (combOp) { + case 0: // or + dest |= src & m2; + break; + case 1: // and + dest &= src | m1; + break; + case 2: // xor + dest ^= src & m2; + break; + case 3: // xnor + dest ^= (src ^ 0xff) & m2; + break; + case 4: // replace + dest = (src & m2) | (dest & m1); + break; + } + *destPtr = dest; + } + } +} + +//------------------------------------------------------------------------ +// JBIG2SymbolDict +//------------------------------------------------------------------------ + +class JBIG2SymbolDict: public JBIG2Segment { +public: + + JBIG2SymbolDict(Guint segNumA, Guint sizeA); + virtual ~JBIG2SymbolDict(); + virtual JBIG2SegmentType getType() { return jbig2SegSymbolDict; } + Guint getSize() { return size; } + void setBitmap(Guint idx, JBIG2Bitmap *bitmap) { bitmaps[idx] = bitmap; } + JBIG2Bitmap *getBitmap(Guint idx) { return bitmaps[idx]; } + GBool isOk() { return bitmaps != NULL; } + void setGenericRegionStats(JArithmeticDecoderStats *stats) + { genericRegionStats = stats; } + void setRefinementRegionStats(JArithmeticDecoderStats *stats) + { refinementRegionStats = stats; } + JArithmeticDecoderStats *getGenericRegionStats() + { return genericRegionStats; } + JArithmeticDecoderStats *getRefinementRegionStats() + { return refinementRegionStats; } + +private: + + Guint size; + JBIG2Bitmap **bitmaps; + JArithmeticDecoderStats *genericRegionStats; + JArithmeticDecoderStats *refinementRegionStats; +}; + +JBIG2SymbolDict::JBIG2SymbolDict(Guint segNumA, Guint sizeA): + JBIG2Segment(segNumA) +{ + size = sizeA; + bitmaps = (JBIG2Bitmap **)gmallocn_checkoverflow(size, sizeof(JBIG2Bitmap *)); + if (!bitmaps) size = 0; + genericRegionStats = NULL; + refinementRegionStats = NULL; +} + +JBIG2SymbolDict::~JBIG2SymbolDict() { + Guint i; + + for (i = 0; i < size; ++i) { + delete bitmaps[i]; + } + gfree(bitmaps); + if (genericRegionStats) { + delete genericRegionStats; + } + if (refinementRegionStats) { + delete refinementRegionStats; + } +} + +//------------------------------------------------------------------------ +// JBIG2PatternDict +//------------------------------------------------------------------------ + +class JBIG2PatternDict: public JBIG2Segment { +public: + + JBIG2PatternDict(Guint segNumA, Guint sizeA); + virtual ~JBIG2PatternDict(); + virtual JBIG2SegmentType getType() { return jbig2SegPatternDict; } + Guint getSize() { return size; } + void setBitmap(Guint idx, JBIG2Bitmap *bitmap) { bitmaps[idx] = bitmap; } + JBIG2Bitmap *getBitmap(Guint idx) { return bitmaps[idx]; } + +private: + + Guint size; + JBIG2Bitmap **bitmaps; +}; + +JBIG2PatternDict::JBIG2PatternDict(Guint segNumA, Guint sizeA): + JBIG2Segment(segNumA) +{ + size = sizeA; + bitmaps = (JBIG2Bitmap **)gmallocn(size, sizeof(JBIG2Bitmap *)); +} + +JBIG2PatternDict::~JBIG2PatternDict() { + Guint i; + + for (i = 0; i < size; ++i) { + delete bitmaps[i]; + } + gfree(bitmaps); +} + +//------------------------------------------------------------------------ +// JBIG2CodeTable +//------------------------------------------------------------------------ + +class JBIG2CodeTable: public JBIG2Segment { +public: + + JBIG2CodeTable(Guint segNumA, JBIG2HuffmanTable *tableA); + virtual ~JBIG2CodeTable(); + virtual JBIG2SegmentType getType() { return jbig2SegCodeTable; } + JBIG2HuffmanTable *getHuffTable() { return table; } + +private: + + JBIG2HuffmanTable *table; +}; + +JBIG2CodeTable::JBIG2CodeTable(Guint segNumA, JBIG2HuffmanTable *tableA): + JBIG2Segment(segNumA) +{ + table = tableA; +} + +JBIG2CodeTable::~JBIG2CodeTable() { + gfree(table); +} + +//------------------------------------------------------------------------ +// JBIG2Stream +//------------------------------------------------------------------------ + +JBIG2Stream::JBIG2Stream(Stream *strA, Object *globalsStreamA): + FilterStream(strA) +{ + pageBitmap = NULL; + + arithDecoder = new JArithmeticDecoder(); + genericRegionStats = new JArithmeticDecoderStats(1 << 1); + refinementRegionStats = new JArithmeticDecoderStats(1 << 1); + iadhStats = new JArithmeticDecoderStats(1 << 9); + iadwStats = new JArithmeticDecoderStats(1 << 9); + iaexStats = new JArithmeticDecoderStats(1 << 9); + iaaiStats = new JArithmeticDecoderStats(1 << 9); + iadtStats = new JArithmeticDecoderStats(1 << 9); + iaitStats = new JArithmeticDecoderStats(1 << 9); + iafsStats = new JArithmeticDecoderStats(1 << 9); + iadsStats = new JArithmeticDecoderStats(1 << 9); + iardxStats = new JArithmeticDecoderStats(1 << 9); + iardyStats = new JArithmeticDecoderStats(1 << 9); + iardwStats = new JArithmeticDecoderStats(1 << 9); + iardhStats = new JArithmeticDecoderStats(1 << 9); + iariStats = new JArithmeticDecoderStats(1 << 9); + iaidStats = new JArithmeticDecoderStats(1 << 1); + huffDecoder = new JBIG2HuffmanDecoder(); + mmrDecoder = new JBIG2MMRDecoder(); + + globalsStreamA->copy(&globalsStream); + segments = globalSegments = NULL; + curStr = NULL; + dataPtr = dataEnd = NULL; +} + +JBIG2Stream::~JBIG2Stream() { + close(); + globalsStream.free(); + delete arithDecoder; + delete genericRegionStats; + delete refinementRegionStats; + delete iadhStats; + delete iadwStats; + delete iaexStats; + delete iaaiStats; + delete iadtStats; + delete iaitStats; + delete iafsStats; + delete iadsStats; + delete iardxStats; + delete iardyStats; + delete iardwStats; + delete iardhStats; + delete iariStats; + delete iaidStats; + delete huffDecoder; + delete mmrDecoder; + delete str; +} + +void JBIG2Stream::reset() { + // read the globals stream + globalSegments = new GooList(); + if (globalsStream.isStream()) { + segments = globalSegments; + curStr = globalsStream.getStream(); + curStr->reset(); + arithDecoder->setStream(curStr); + huffDecoder->setStream(curStr); + mmrDecoder->setStream(curStr); + readSegments(); + curStr->close(); + } + + // read the main stream + segments = new GooList(); + curStr = str; + curStr->reset(); + arithDecoder->setStream(curStr); + huffDecoder->setStream(curStr); + mmrDecoder->setStream(curStr); + readSegments(); + + if (pageBitmap) { + dataPtr = pageBitmap->getDataPtr(); + dataEnd = dataPtr + pageBitmap->getDataSize(); + } else { + dataPtr = dataEnd = NULL; + } +} + +void JBIG2Stream::close() { + if (pageBitmap) { + delete pageBitmap; + pageBitmap = NULL; + } + if (segments) { + deleteGooList(segments, JBIG2Segment); + segments = NULL; + } + if (globalSegments) { + deleteGooList(globalSegments, JBIG2Segment); + globalSegments = NULL; + } + dataPtr = dataEnd = NULL; + FilterStream::close(); +} + +int JBIG2Stream::getChar() { + if (dataPtr && dataPtr < dataEnd) { + return (*dataPtr++ ^ 0xff) & 0xff; + } + return EOF; +} + +int JBIG2Stream::lookChar() { + if (dataPtr && dataPtr < dataEnd) { + return (*dataPtr ^ 0xff) & 0xff; + } + return EOF; +} + +int JBIG2Stream::getPos() { + if (pageBitmap == NULL) { + return 0; + } + return dataPtr - pageBitmap->getDataPtr(); +} + +GooString *JBIG2Stream::getPSFilter(int psLevel, char *indent) { + return NULL; +} + +GBool JBIG2Stream::isBinary(GBool last) { + return str->isBinary(gTrue); +} + +void JBIG2Stream::readSegments() { + Guint segNum, segFlags, segType, page, segLength; + Guint refFlags, nRefSegs; + Guint *refSegs; + int segDataPos; + int c1, c2, c3; + Guint i; + + while (readULong(&segNum)) { + + // segment header flags + if (!readUByte(&segFlags)) { + goto eofError1; + } + segType = segFlags & 0x3f; + + // referred-to segment count and retention flags + if (!readUByte(&refFlags)) { + goto eofError1; + } + nRefSegs = refFlags >> 5; + if (nRefSegs == 7) { + if ((c1 = curStr->getChar()) == EOF || + (c2 = curStr->getChar()) == EOF || + (c3 = curStr->getChar()) == EOF) { + goto eofError1; + } + refFlags = (refFlags << 24) | (c1 << 16) | (c2 << 8) | c3; + nRefSegs = refFlags & 0x1fffffff; + for (i = 0; i < (nRefSegs + 9) >> 3; ++i) { + c1 = curStr->getChar(); + } + } + + // referred-to segment numbers + refSegs = (Guint *)gmallocn(nRefSegs, sizeof(Guint)); + if (segNum <= 256) { + for (i = 0; i < nRefSegs; ++i) { + if (!readUByte(&refSegs[i])) { + goto eofError2; + } + } + } else if (segNum <= 65536) { + for (i = 0; i < nRefSegs; ++i) { + if (!readUWord(&refSegs[i])) { + goto eofError2; + } + } + } else { + for (i = 0; i < nRefSegs; ++i) { + if (!readULong(&refSegs[i])) { + goto eofError2; + } + } + } + + // segment page association + if (segFlags & 0x40) { + if (!readULong(&page)) { + goto eofError2; + } + } else { + if (!readUByte(&page)) { + goto eofError2; + } + } + + // segment data length + if (!readULong(&segLength)) { + goto eofError2; + } + + // keep track of the start of the segment data + segDataPos = curStr->getPos(); + + // check for missing page information segment + if (!pageBitmap && ((segType >= 4 && segType <= 7) || + (segType >= 20 && segType <= 43))) { + error(curStr->getPos(), "First JBIG2 segment associated with a page must be a page information segment"); + goto syntaxError; + } + + // read the segment data + switch (segType) { + case 0: + if (!readSymbolDictSeg(segNum, segLength, refSegs, nRefSegs)) { + goto syntaxError; + } + break; + case 4: + readTextRegionSeg(segNum, gFalse, gFalse, segLength, refSegs, nRefSegs); + break; + case 6: + readTextRegionSeg(segNum, gTrue, gFalse, segLength, refSegs, nRefSegs); + break; + case 7: + readTextRegionSeg(segNum, gTrue, gTrue, segLength, refSegs, nRefSegs); + break; + case 16: + readPatternDictSeg(segNum, segLength); + break; + case 20: + readHalftoneRegionSeg(segNum, gFalse, gFalse, segLength, + refSegs, nRefSegs); + break; + case 22: + readHalftoneRegionSeg(segNum, gTrue, gFalse, segLength, + refSegs, nRefSegs); + break; + case 23: + readHalftoneRegionSeg(segNum, gTrue, gTrue, segLength, + refSegs, nRefSegs); + break; + case 36: + readGenericRegionSeg(segNum, gFalse, gFalse, segLength); + break; + case 38: + readGenericRegionSeg(segNum, gTrue, gFalse, segLength); + break; + case 39: + readGenericRegionSeg(segNum, gTrue, gTrue, segLength); + break; + case 40: + readGenericRefinementRegionSeg(segNum, gFalse, gFalse, segLength, + refSegs, nRefSegs); + break; + case 42: + readGenericRefinementRegionSeg(segNum, gTrue, gFalse, segLength, + refSegs, nRefSegs); + break; + case 43: + readGenericRefinementRegionSeg(segNum, gTrue, gTrue, segLength, + refSegs, nRefSegs); + break; + case 48: + readPageInfoSeg(segLength); + break; + case 50: + readEndOfStripeSeg(segLength); + break; + case 52: + readProfilesSeg(segLength); + break; + case 53: + readCodeTableSeg(segNum, segLength); + break; + case 62: + readExtensionSeg(segLength); + break; + default: + error(curStr->getPos(), "Unknown segment type in JBIG2 stream"); + for (i = 0; i < segLength; ++i) { + if ((c1 = curStr->getChar()) == EOF) { + goto eofError2; + } + } + break; + } + + // Make sure the segment handler read all of the bytes in the + // segment data, unless this segment is marked as having an + // unknown length (section 7.2.7 of the JBIG2 Final Committee Draft) + + if (segLength != 0xffffffff) { + + int segExtraBytes = segDataPos + segLength - curStr->getPos(); + if (segExtraBytes > 0) { + + // If we didn't read all of the bytes in the segment data, + // indicate an error, and throw away the rest of the data. + + // v.3.1.01.13 of the LuraTech PDF Compressor Server will + // sometimes generate an extraneous NULL byte at the end of + // arithmetic-coded symbol dictionary segments when numNewSyms + // == 0. Segments like this often occur for blank pages. + + error(curStr->getPos(), "%d extraneous byte%s after segment", + segExtraBytes, (segExtraBytes > 1) ? "s" : ""); + + // Burn through the remaining bytes -- inefficient, but + // hopefully we're not doing this much + + int trash; + for (int i = segExtraBytes; i > 0; i--) { + readByte(&trash); + } + + } else if (segExtraBytes < 0) { + + // If we read more bytes than we should have, according to the + // segment length field, note an error. + + error(curStr->getPos(), "Previous segment handler read too many bytes"); + + } + + } + + gfree(refSegs); + } + + return; + + syntaxError: + gfree(refSegs); + return; + + eofError2: + gfree(refSegs); + eofError1: + error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); +} + +GBool JBIG2Stream::readSymbolDictSeg(Guint segNum, Guint length, + Guint *refSegs, Guint nRefSegs) { + JBIG2SymbolDict *symbolDict; + JBIG2HuffmanTable *huffDHTable, *huffDWTable; + JBIG2HuffmanTable *huffBMSizeTable, *huffAggInstTable; + JBIG2Segment *seg; + GooList *codeTables; + JBIG2SymbolDict *inputSymbolDict; + Guint flags, sdTemplate, sdrTemplate, huff, refAgg; + Guint huffDH, huffDW, huffBMSize, huffAggInst; + Guint contextUsed, contextRetained; + int sdATX[4], sdATY[4], sdrATX[2], sdrATY[2]; + Guint numExSyms, numNewSyms, numInputSyms, symCodeLen; + JBIG2Bitmap **bitmaps; + JBIG2Bitmap *collBitmap, *refBitmap; + Guint *symWidths; + Guint symHeight, symWidth, totalWidth, x, symID; + int dh, dw, refAggNum, refDX, refDY, bmSize; + GBool ex; + int run, cnt; + Guint i, j, k; + Guchar *p; + + symWidths = NULL; + + // symbol dictionary flags + if (!readUWord(&flags)) { + goto eofError; + } + sdTemplate = (flags >> 10) & 3; + sdrTemplate = (flags >> 12) & 1; + huff = flags & 1; + refAgg = (flags >> 1) & 1; + huffDH = (flags >> 2) & 3; + huffDW = (flags >> 4) & 3; + huffBMSize = (flags >> 6) & 1; + huffAggInst = (flags >> 7) & 1; + contextUsed = (flags >> 8) & 1; + contextRetained = (flags >> 9) & 1; + + // symbol dictionary AT flags + if (!huff) { + if (sdTemplate == 0) { + if (!readByte(&sdATX[0]) || + !readByte(&sdATY[0]) || + !readByte(&sdATX[1]) || + !readByte(&sdATY[1]) || + !readByte(&sdATX[2]) || + !readByte(&sdATY[2]) || + !readByte(&sdATX[3]) || + !readByte(&sdATY[3])) { + goto eofError; + } + } else { + if (!readByte(&sdATX[0]) || + !readByte(&sdATY[0])) { + goto eofError; + } + } + } + + // symbol dictionary refinement AT flags + if (refAgg && !sdrTemplate) { + if (!readByte(&sdrATX[0]) || + !readByte(&sdrATY[0]) || + !readByte(&sdrATX[1]) || + !readByte(&sdrATY[1])) { + goto eofError; + } + } + + // SDNUMEXSYMS and SDNUMNEWSYMS + if (!readULong(&numExSyms) || !readULong(&numNewSyms)) { + goto eofError; + } + + // get referenced segments: input symbol dictionaries and code tables + codeTables = new GooList(); + numInputSyms = 0; + for (i = 0; i < nRefSegs; ++i) { + // This is need by bug 12014, returning gFalse makes it not crash + // but we end up with a empty page while acroread is able to render + // part of it + if ((seg = findSegment(refSegs[i]))) { + if (seg->getType() == jbig2SegSymbolDict) { + j = ((JBIG2SymbolDict *)seg)->getSize(); + if (numInputSyms > UINT_MAX - j) { + error(curStr->getPos(), "Too many input symbols in JBIG2 symbol dictionary"); + delete codeTables; + goto eofError; + } + numInputSyms += j; + } else if (seg->getType() == jbig2SegCodeTable) { + codeTables->append(seg); + } + } else { + delete codeTables; + return gFalse; + } + } + if (numInputSyms > UINT_MAX - numNewSyms) { + error(curStr->getPos(), "Too many input symbols in JBIG2 symbol dictionary"); + delete codeTables; + goto eofError; + } + + // compute symbol code length, per 6.5.8.2.3 + // symCodeLen = ceil( log2( numInputSyms + numNewSyms ) ) + symCodeLen = 1; + if (likely(numInputSyms + numNewSyms > 0)) { // don't fail too badly if the sum is 0 + i = (numInputSyms + numNewSyms - 1) >> 1; + while (i) { + ++symCodeLen; + i >>= 1; + } + } + + // get the input symbol bitmaps + bitmaps = (JBIG2Bitmap **)gmallocn(numInputSyms + numNewSyms, + sizeof(JBIG2Bitmap *)); + for (i = 0; i < numInputSyms + numNewSyms; ++i) { + bitmaps[i] = NULL; + } + k = 0; + inputSymbolDict = NULL; + for (i = 0; i < nRefSegs; ++i) { + seg = findSegment(refSegs[i]); + if (seg != NULL && seg->getType() == jbig2SegSymbolDict) { + inputSymbolDict = (JBIG2SymbolDict *)seg; + for (j = 0; j < inputSymbolDict->getSize(); ++j) { + bitmaps[k++] = inputSymbolDict->getBitmap(j); + } + } + } + + // get the Huffman tables + huffDHTable = huffDWTable = NULL; // make gcc happy + huffBMSizeTable = huffAggInstTable = NULL; // make gcc happy + i = 0; + if (huff) { + if (huffDH == 0) { + huffDHTable = huffTableD; + } else if (huffDH == 1) { + huffDHTable = huffTableE; + } else { + if (i >= (Guint)codeTables->getLength()) { + goto codeTableError; + } + huffDHTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); + } + if (huffDW == 0) { + huffDWTable = huffTableB; + } else if (huffDW == 1) { + huffDWTable = huffTableC; + } else { + if (i >= (Guint)codeTables->getLength()) { + goto codeTableError; + } + huffDWTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); + } + if (huffBMSize == 0) { + huffBMSizeTable = huffTableA; + } else { + if (i >= (Guint)codeTables->getLength()) { + goto codeTableError; + } + huffBMSizeTable = + ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); + } + if (huffAggInst == 0) { + huffAggInstTable = huffTableA; + } else { + if (i >= (Guint)codeTables->getLength()) { + goto codeTableError; + } + huffAggInstTable = + ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); + } + } + delete codeTables; + + // set up the Huffman decoder + if (huff) { + huffDecoder->reset(); + + // set up the arithmetic decoder + } else { + if (contextUsed && inputSymbolDict) { + resetGenericStats(sdTemplate, inputSymbolDict->getGenericRegionStats()); + } else { + resetGenericStats(sdTemplate, NULL); + } + resetIntStats(symCodeLen); + arithDecoder->start(); + } + + // set up the arithmetic decoder for refinement/aggregation + if (refAgg) { + if (contextUsed && inputSymbolDict) { + resetRefinementStats(sdrTemplate, + inputSymbolDict->getRefinementRegionStats()); + } else { + resetRefinementStats(sdrTemplate, NULL); + } + } + + // allocate symbol widths storage + if (huff && !refAgg) { + symWidths = (Guint *)gmallocn(numNewSyms, sizeof(Guint)); + } + + symHeight = 0; + i = 0; + while (i < numNewSyms) { + + // read the height class delta height + if (huff) { + huffDecoder->decodeInt(&dh, huffDHTable); + } else { + arithDecoder->decodeInt(&dh, iadhStats); + } + if (dh < 0 && (Guint)-dh >= symHeight) { + error(curStr->getPos(), "Bad delta-height value in JBIG2 symbol dictionary"); + goto syntaxError; + } + symHeight += dh; + symWidth = 0; + totalWidth = 0; + j = i; + + // read the symbols in this height class + while (1) { + + // read the delta width + if (huff) { + if (!huffDecoder->decodeInt(&dw, huffDWTable)) { + break; + } + } else { + if (!arithDecoder->decodeInt(&dw, iadwStats)) { + break; + } + } + if (dw < 0 && (Guint)-dw >= symWidth) { + error(curStr->getPos(), "Bad delta-height value in JBIG2 symbol dictionary"); + goto syntaxError; + } + symWidth += dw; + if (i >= numNewSyms) { + error(curStr->getPos(), "Too many symbols in JBIG2 symbol dictionary"); + goto syntaxError; + } + + // using a collective bitmap, so don't read a bitmap here + if (huff && !refAgg) { + symWidths[i] = symWidth; + totalWidth += symWidth; + + // refinement/aggregate coding + } else if (refAgg) { + if (huff) { + if (!huffDecoder->decodeInt(&refAggNum, huffAggInstTable)) { + break; + } + } else { + if (!arithDecoder->decodeInt(&refAggNum, iaaiStats)) { + break; + } + } +#if 0 //~ This special case was added about a year before the final draft + //~ of the JBIG2 spec was released. I have encountered some old + //~ JBIG2 images that predate it. + if (0) { +#else + if (refAggNum == 1) { +#endif + if (huff) { + symID = huffDecoder->readBits(symCodeLen); + huffDecoder->decodeInt(&refDX, huffTableO); + huffDecoder->decodeInt(&refDY, huffTableO); + huffDecoder->decodeInt(&bmSize, huffTableA); + huffDecoder->reset(); + arithDecoder->start(); + } else { + symID = arithDecoder->decodeIAID(symCodeLen, iaidStats); + arithDecoder->decodeInt(&refDX, iardxStats); + arithDecoder->decodeInt(&refDY, iardyStats); + } + if (symID >= numInputSyms + i) { + error(curStr->getPos(), "Invalid symbol ID in JBIG2 symbol dictionary"); + goto syntaxError; + } + refBitmap = bitmaps[symID]; + bitmaps[numInputSyms + i] = + readGenericRefinementRegion(symWidth, symHeight, + sdrTemplate, gFalse, + refBitmap, refDX, refDY, + sdrATX, sdrATY); + //~ do we need to use the bmSize value here (in Huffman mode)? + } else { + bitmaps[numInputSyms + i] = + readTextRegion(huff, gTrue, symWidth, symHeight, + refAggNum, 0, numInputSyms + i, NULL, + symCodeLen, bitmaps, 0, 0, 0, 1, 0, + huffTableF, huffTableH, huffTableK, huffTableO, + huffTableO, huffTableO, huffTableO, huffTableA, + sdrTemplate, sdrATX, sdrATY); + } + + // non-ref/agg coding + } else { + bitmaps[numInputSyms + i] = + readGenericBitmap(gFalse, symWidth, symHeight, + sdTemplate, gFalse, gFalse, NULL, + sdATX, sdATY, 0); + } + + ++i; + } + + // read the collective bitmap + if (huff && !refAgg) { + huffDecoder->decodeInt(&bmSize, huffBMSizeTable); + huffDecoder->reset(); + if (bmSize == 0) { + collBitmap = new JBIG2Bitmap(0, totalWidth, symHeight); + bmSize = symHeight * ((totalWidth + 7) >> 3); + p = collBitmap->getDataPtr(); + for (k = 0; k < (Guint)bmSize; ++k) { + *p++ = curStr->getChar(); + } + } else { + collBitmap = readGenericBitmap(gTrue, totalWidth, symHeight, + 0, gFalse, gFalse, NULL, NULL, NULL, + bmSize); + } + x = 0; + for (; j < i; ++j) { + bitmaps[numInputSyms + j] = + collBitmap->getSlice(x, 0, symWidths[j], symHeight); + x += symWidths[j]; + } + delete collBitmap; + } + } + + // create the symbol dict object + symbolDict = new JBIG2SymbolDict(segNum, numExSyms); + if (!symbolDict->isOk()) { + delete symbolDict; + goto syntaxError; + } + + // exported symbol list + i = j = 0; + ex = gFalse; + while (i < numInputSyms + numNewSyms) { + if (huff) { + huffDecoder->decodeInt(&run, huffTableA); + } else { + arithDecoder->decodeInt(&run, iaexStats); + } + if (i + run > numInputSyms + numNewSyms || + (ex && j + run > numExSyms)) { + error(curStr->getPos(), "Too many exported symbols in JBIG2 symbol dictionary"); + for ( ; j < numExSyms; ++j) symbolDict->setBitmap(j, NULL); + delete symbolDict; + goto syntaxError; + } + if (ex) { + for (cnt = 0; cnt < run; ++cnt) { + symbolDict->setBitmap(j++, bitmaps[i++]->copy()); + } + } else { + i += run; + } + ex = !ex; + } + if (j != numExSyms) { + error(curStr->getPos(), "Too few symbols in JBIG2 symbol dictionary"); + for ( ; j < numExSyms; ++j) symbolDict->setBitmap(j, NULL); + delete symbolDict; + goto syntaxError; + } + + for (i = 0; i < numNewSyms; ++i) { + delete bitmaps[numInputSyms + i]; + } + gfree(bitmaps); + if (symWidths) { + gfree(symWidths); + } + + // save the arithmetic decoder stats + if (!huff && contextRetained) { + symbolDict->setGenericRegionStats(genericRegionStats->copy()); + if (refAgg) { + symbolDict->setRefinementRegionStats(refinementRegionStats->copy()); + } + } + + // store the new symbol dict + segments->append(symbolDict); + + return gTrue; + + codeTableError: + error(curStr->getPos(), "Missing code table in JBIG2 symbol dictionary"); + delete codeTables; + + syntaxError: + for (i = 0; i < numNewSyms; ++i) { + if (bitmaps[numInputSyms + i]) { + delete bitmaps[numInputSyms + i]; + } + } + gfree(bitmaps); + if (symWidths) { + gfree(symWidths); + } + return gFalse; + + eofError: + error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); + return gFalse; +} + +void JBIG2Stream::readTextRegionSeg(Guint segNum, GBool imm, + GBool lossless, Guint length, + Guint *refSegs, Guint nRefSegs) { + JBIG2Bitmap *bitmap; + JBIG2HuffmanTable runLengthTab[36]; + JBIG2HuffmanTable *symCodeTab; + JBIG2HuffmanTable *huffFSTable, *huffDSTable, *huffDTTable; + JBIG2HuffmanTable *huffRDWTable, *huffRDHTable; + JBIG2HuffmanTable *huffRDXTable, *huffRDYTable, *huffRSizeTable; + JBIG2Segment *seg; + GooList *codeTables; + JBIG2SymbolDict *symbolDict; + JBIG2Bitmap **syms; + Guint w, h, x, y, segInfoFlags, extCombOp; + Guint flags, huff, refine, logStrips, refCorner, transposed; + Guint combOp, defPixel, templ; + int sOffset; + Guint huffFlags, huffFS, huffDS, huffDT; + Guint huffRDW, huffRDH, huffRDX, huffRDY, huffRSize; + Guint numInstances, numSyms, symCodeLen; + int atx[2], aty[2]; + Guint i, k, kk; + int j; + + // region segment info field + if (!readULong(&w) || !readULong(&h) || + !readULong(&x) || !readULong(&y) || + !readUByte(&segInfoFlags)) { + goto eofError; + } + extCombOp = segInfoFlags & 7; + + // rest of the text region header + if (!readUWord(&flags)) { + goto eofError; + } + huff = flags & 1; + refine = (flags >> 1) & 1; + logStrips = (flags >> 2) & 3; + refCorner = (flags >> 4) & 3; + transposed = (flags >> 6) & 1; + combOp = (flags >> 7) & 3; + defPixel = (flags >> 9) & 1; + sOffset = (flags >> 10) & 0x1f; + if (sOffset & 0x10) { + sOffset |= -1 - 0x0f; + } + templ = (flags >> 15) & 1; + huffFS = huffDS = huffDT = 0; // make gcc happy + huffRDW = huffRDH = huffRDX = huffRDY = huffRSize = 0; // make gcc happy + if (huff) { + if (!readUWord(&huffFlags)) { + goto eofError; + } + huffFS = huffFlags & 3; + huffDS = (huffFlags >> 2) & 3; + huffDT = (huffFlags >> 4) & 3; + huffRDW = (huffFlags >> 6) & 3; + huffRDH = (huffFlags >> 8) & 3; + huffRDX = (huffFlags >> 10) & 3; + huffRDY = (huffFlags >> 12) & 3; + huffRSize = (huffFlags >> 14) & 1; + } + if (refine && templ == 0) { + if (!readByte(&atx[0]) || !readByte(&aty[0]) || + !readByte(&atx[1]) || !readByte(&aty[1])) { + goto eofError; + } + } + if (!readULong(&numInstances)) { + goto eofError; + } + + // get symbol dictionaries and tables + codeTables = new GooList(); + numSyms = 0; + for (i = 0; i < nRefSegs; ++i) { + if ((seg = findSegment(refSegs[i]))) { + if (seg->getType() == jbig2SegSymbolDict) { + numSyms += ((JBIG2SymbolDict *)seg)->getSize(); + } else if (seg->getType() == jbig2SegCodeTable) { + codeTables->append(seg); + } + } else { + error(curStr->getPos(), "Invalid segment reference in JBIG2 text region"); + delete codeTables; + return; + } + } + symCodeLen = 0; + i = 1; + while (i < numSyms) { + ++symCodeLen; + i <<= 1; + } + + // get the symbol bitmaps + syms = (JBIG2Bitmap **)gmallocn(numSyms, sizeof(JBIG2Bitmap *)); + kk = 0; + for (i = 0; i < nRefSegs; ++i) { + if ((seg = findSegment(refSegs[i]))) { + if (seg->getType() == jbig2SegSymbolDict) { + symbolDict = (JBIG2SymbolDict *)seg; + for (k = 0; k < symbolDict->getSize(); ++k) { + syms[kk++] = symbolDict->getBitmap(k); + } + } + } + } + + // get the Huffman tables + huffFSTable = huffDSTable = huffDTTable = NULL; // make gcc happy + huffRDWTable = huffRDHTable = NULL; // make gcc happy + huffRDXTable = huffRDYTable = huffRSizeTable = NULL; // make gcc happy + i = 0; + if (huff) { + if (huffFS == 0) { + huffFSTable = huffTableF; + } else if (huffFS == 1) { + huffFSTable = huffTableG; + } else { + if (i >= (Guint)codeTables->getLength()) { + goto codeTableError; + } + huffFSTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); + } + if (huffDS == 0) { + huffDSTable = huffTableH; + } else if (huffDS == 1) { + huffDSTable = huffTableI; + } else if (huffDS == 2) { + huffDSTable = huffTableJ; + } else { + if (i >= (Guint)codeTables->getLength()) { + goto codeTableError; + } + huffDSTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); + } + if (huffDT == 0) { + huffDTTable = huffTableK; + } else if (huffDT == 1) { + huffDTTable = huffTableL; + } else if (huffDT == 2) { + huffDTTable = huffTableM; + } else { + if (i >= (Guint)codeTables->getLength()) { + goto codeTableError; + } + huffDTTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); + } + if (huffRDW == 0) { + huffRDWTable = huffTableN; + } else if (huffRDW == 1) { + huffRDWTable = huffTableO; + } else { + if (i >= (Guint)codeTables->getLength()) { + goto codeTableError; + } + huffRDWTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); + } + if (huffRDH == 0) { + huffRDHTable = huffTableN; + } else if (huffRDH == 1) { + huffRDHTable = huffTableO; + } else { + if (i >= (Guint)codeTables->getLength()) { + goto codeTableError; + } + huffRDHTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); + } + if (huffRDX == 0) { + huffRDXTable = huffTableN; + } else if (huffRDX == 1) { + huffRDXTable = huffTableO; + } else { + if (i >= (Guint)codeTables->getLength()) { + goto codeTableError; + } + huffRDXTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); + } + if (huffRDY == 0) { + huffRDYTable = huffTableN; + } else if (huffRDY == 1) { + huffRDYTable = huffTableO; + } else { + if (i >= (Guint)codeTables->getLength()) { + goto codeTableError; + } + huffRDYTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); + } + if (huffRSize == 0) { + huffRSizeTable = huffTableA; + } else { + if (i >= (Guint)codeTables->getLength()) { + goto codeTableError; + } + huffRSizeTable = + ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); + } + } + delete codeTables; + + // symbol ID Huffman decoding table + if (huff) { + huffDecoder->reset(); + for (i = 0; i < 32; ++i) { + runLengthTab[i].val = i; + runLengthTab[i].prefixLen = huffDecoder->readBits(4); + runLengthTab[i].rangeLen = 0; + } + runLengthTab[32].val = 0x103; + runLengthTab[32].prefixLen = huffDecoder->readBits(4); + runLengthTab[32].rangeLen = 2; + runLengthTab[33].val = 0x203; + runLengthTab[33].prefixLen = huffDecoder->readBits(4); + runLengthTab[33].rangeLen = 3; + runLengthTab[34].val = 0x20b; + runLengthTab[34].prefixLen = huffDecoder->readBits(4); + runLengthTab[34].rangeLen = 7; + runLengthTab[35].prefixLen = 0; + runLengthTab[35].rangeLen = jbig2HuffmanEOT; + huffDecoder->buildTable(runLengthTab, 35); + symCodeTab = (JBIG2HuffmanTable *)gmallocn(numSyms + 1, + sizeof(JBIG2HuffmanTable)); + for (i = 0; i < numSyms; ++i) { + symCodeTab[i].val = i; + symCodeTab[i].rangeLen = 0; + } + i = 0; + while (i < numSyms) { + huffDecoder->decodeInt(&j, runLengthTab); + if (j > 0x200) { + for (j -= 0x200; j && i < numSyms; --j) { + symCodeTab[i++].prefixLen = 0; + } + } else if (j > 0x100) { + for (j -= 0x100; j && i < numSyms; --j) { + symCodeTab[i].prefixLen = symCodeTab[i-1].prefixLen; + ++i; + } + } else { + symCodeTab[i++].prefixLen = j; + } + } + symCodeTab[numSyms].prefixLen = 0; + symCodeTab[numSyms].rangeLen = jbig2HuffmanEOT; + huffDecoder->buildTable(symCodeTab, numSyms); + huffDecoder->reset(); + + // set up the arithmetic decoder + } else { + symCodeTab = NULL; + resetIntStats(symCodeLen); + arithDecoder->start(); + } + if (refine) { + resetRefinementStats(templ, NULL); + } + + bitmap = readTextRegion(huff, refine, w, h, numInstances, + logStrips, numSyms, symCodeTab, symCodeLen, syms, + defPixel, combOp, transposed, refCorner, sOffset, + huffFSTable, huffDSTable, huffDTTable, + huffRDWTable, huffRDHTable, + huffRDXTable, huffRDYTable, huffRSizeTable, + templ, atx, aty); + + gfree(syms); + + if (bitmap) { + // combine the region bitmap into the page bitmap + if (imm) { + if (pageH == 0xffffffff && y + h > curPageH) { + pageBitmap->expand(y + h, pageDefPixel); + } + pageBitmap->combine(bitmap, x, y, extCombOp); + delete bitmap; + + // store the region bitmap + } else { + bitmap->setSegNum(segNum); + segments->append(bitmap); + } + } + + // clean up the Huffman decoder + if (huff) { + gfree(symCodeTab); + } + + return; + + codeTableError: + error(curStr->getPos(), "Missing code table in JBIG2 text region"); + gfree(codeTables); + delete syms; + return; + + eofError: + error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); + return; +} + +JBIG2Bitmap *JBIG2Stream::readTextRegion(GBool huff, GBool refine, + int w, int h, + Guint numInstances, + Guint logStrips, + int numSyms, + JBIG2HuffmanTable *symCodeTab, + Guint symCodeLen, + JBIG2Bitmap **syms, + Guint defPixel, Guint combOp, + Guint transposed, Guint refCorner, + int sOffset, + JBIG2HuffmanTable *huffFSTable, + JBIG2HuffmanTable *huffDSTable, + JBIG2HuffmanTable *huffDTTable, + JBIG2HuffmanTable *huffRDWTable, + JBIG2HuffmanTable *huffRDHTable, + JBIG2HuffmanTable *huffRDXTable, + JBIG2HuffmanTable *huffRDYTable, + JBIG2HuffmanTable *huffRSizeTable, + Guint templ, + int *atx, int *aty) { + JBIG2Bitmap *bitmap; + JBIG2Bitmap *symbolBitmap; + Guint strips; + int t, dt, tt, s, ds, sFirst, j; + int rdw, rdh, rdx, rdy, ri, refDX, refDY, bmSize; + Guint symID, inst, bw, bh; + + strips = 1 << logStrips; + + // allocate the bitmap + bitmap = new JBIG2Bitmap(0, w, h); + if (!bitmap->isOk()) { + delete bitmap; + return NULL; + } + if (defPixel) { + bitmap->clearToOne(); + } else { + bitmap->clearToZero(); + } + + // decode initial T value + if (huff) { + huffDecoder->decodeInt(&t, huffDTTable); + } else { + arithDecoder->decodeInt(&t, iadtStats); + } + t *= -(int)strips; + + inst = 0; + sFirst = 0; + while (inst < numInstances) { + + // decode delta-T + if (huff) { + huffDecoder->decodeInt(&dt, huffDTTable); + } else { + arithDecoder->decodeInt(&dt, iadtStats); + } + t += dt * strips; + + // first S value + if (huff) { + huffDecoder->decodeInt(&ds, huffFSTable); + } else { + arithDecoder->decodeInt(&ds, iafsStats); + } + sFirst += ds; + s = sFirst; + + // read the instances + while (inst < numInstances) { + + // T value + if (strips == 1) { + dt = 0; + } else if (huff) { + dt = huffDecoder->readBits(logStrips); + } else { + arithDecoder->decodeInt(&dt, iaitStats); + } + tt = t + dt; + + // symbol ID + if (huff) { + if (symCodeTab) { + huffDecoder->decodeInt(&j, symCodeTab); + symID = (Guint)j; + } else { + symID = huffDecoder->readBits(symCodeLen); + } + } else { + symID = arithDecoder->decodeIAID(symCodeLen, iaidStats); + } + + if (symID >= (Guint)numSyms) { + error(curStr->getPos(), "Invalid symbol number in JBIG2 text region"); + } else { + + // get the symbol bitmap + symbolBitmap = NULL; + if (refine) { + if (huff) { + ri = (int)huffDecoder->readBit(); + } else { + arithDecoder->decodeInt(&ri, iariStats); + } + } else { + ri = 0; + } + if (ri) { + GBool decodeSuccess; + if (huff) { + decodeSuccess = huffDecoder->decodeInt(&rdw, huffRDWTable); + decodeSuccess = decodeSuccess && huffDecoder->decodeInt(&rdh, huffRDHTable); + decodeSuccess = decodeSuccess && huffDecoder->decodeInt(&rdx, huffRDXTable); + decodeSuccess = decodeSuccess && huffDecoder->decodeInt(&rdy, huffRDYTable); + decodeSuccess = decodeSuccess && huffDecoder->decodeInt(&bmSize, huffRSizeTable); + huffDecoder->reset(); + arithDecoder->start(); + } else { + decodeSuccess = arithDecoder->decodeInt(&rdw, iardwStats); + decodeSuccess = decodeSuccess && arithDecoder->decodeInt(&rdh, iardhStats); + decodeSuccess = decodeSuccess && arithDecoder->decodeInt(&rdx, iardxStats); + decodeSuccess = decodeSuccess && arithDecoder->decodeInt(&rdy, iardyStats); + } + + if (decodeSuccess && syms[symID]) + { + refDX = ((rdw >= 0) ? rdw : rdw - 1) / 2 + rdx; + refDY = ((rdh >= 0) ? rdh : rdh - 1) / 2 + rdy; + + symbolBitmap = + readGenericRefinementRegion(rdw + syms[symID]->getWidth(), + rdh + syms[symID]->getHeight(), + templ, gFalse, syms[symID], + refDX, refDY, atx, aty); + } + //~ do we need to use the bmSize value here (in Huffman mode)? + } else { + symbolBitmap = syms[symID]; + } + + if (symbolBitmap) { + // combine the symbol bitmap into the region bitmap + //~ something is wrong here - refCorner shouldn't degenerate into + //~ two cases + bw = symbolBitmap->getWidth() - 1; + bh = symbolBitmap->getHeight() - 1; + if (transposed) { + switch (refCorner) { + case 0: // bottom left + bitmap->combine(symbolBitmap, tt, s, combOp); + break; + case 1: // top left + bitmap->combine(symbolBitmap, tt, s, combOp); + break; + case 2: // bottom right + bitmap->combine(symbolBitmap, tt - bw, s, combOp); + break; + case 3: // top right + bitmap->combine(symbolBitmap, tt - bw, s, combOp); + break; + } + s += bh; + } else { + switch (refCorner) { + case 0: // bottom left + bitmap->combine(symbolBitmap, s, tt - bh, combOp); + break; + case 1: // top left + bitmap->combine(symbolBitmap, s, tt, combOp); + break; + case 2: // bottom right + bitmap->combine(symbolBitmap, s, tt - bh, combOp); + break; + case 3: // top right + bitmap->combine(symbolBitmap, s, tt, combOp); + break; + } + s += bw; + } + if (ri) { + delete symbolBitmap; + } + } else { + // NULL symbolBitmap only happens on error + delete bitmap; + return NULL; + } + } + + // next instance + ++inst; + + // next S value + if (huff) { + if (!huffDecoder->decodeInt(&ds, huffDSTable)) { + break; + } + } else { + if (!arithDecoder->decodeInt(&ds, iadsStats)) { + break; + } + } + s += sOffset + ds; + } + } + + return bitmap; +} + +void JBIG2Stream::readPatternDictSeg(Guint segNum, Guint length) { + JBIG2PatternDict *patternDict; + JBIG2Bitmap *bitmap; + Guint flags, patternW, patternH, grayMax, templ, mmr; + int atx[4], aty[4]; + Guint i, x; + + // halftone dictionary flags, pattern width and height, max gray value + if (!readUByte(&flags) || + !readUByte(&patternW) || + !readUByte(&patternH) || + !readULong(&grayMax)) { + goto eofError; + } + templ = (flags >> 1) & 3; + mmr = flags & 1; + + // set up the arithmetic decoder + if (!mmr) { + resetGenericStats(templ, NULL); + arithDecoder->start(); + } + + // read the bitmap + atx[0] = -(int)patternW; aty[0] = 0; + atx[1] = -3; aty[1] = -1; + atx[2] = 2; aty[2] = -2; + atx[3] = -2; aty[3] = -2; + bitmap = readGenericBitmap(mmr, (grayMax + 1) * patternW, patternH, + templ, gFalse, gFalse, NULL, + atx, aty, length - 7); + + if (!bitmap) + return; + + // create the pattern dict object + patternDict = new JBIG2PatternDict(segNum, grayMax + 1); + + // split up the bitmap + x = 0; + for (i = 0; i <= grayMax; ++i) { + patternDict->setBitmap(i, bitmap->getSlice(x, 0, patternW, patternH)); + x += patternW; + } + + // free memory + delete bitmap; + + // store the new pattern dict + segments->append(patternDict); + + return; + + eofError: + error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); +} + +void JBIG2Stream::readHalftoneRegionSeg(Guint segNum, GBool imm, + GBool lossless, Guint length, + Guint *refSegs, Guint nRefSegs) { + JBIG2Bitmap *bitmap; + JBIG2Segment *seg; + JBIG2PatternDict *patternDict; + JBIG2Bitmap *skipBitmap; + Guint *grayImg; + JBIG2Bitmap *grayBitmap; + JBIG2Bitmap *patternBitmap; + Guint w, h, x, y, segInfoFlags, extCombOp; + Guint flags, mmr, templ, enableSkip, combOp; + Guint gridW, gridH, stepX, stepY, patW, patH; + int atx[4], aty[4]; + int gridX, gridY, xx, yy, bit, j; + Guint bpp, m, n, i; + + // region segment info field + if (!readULong(&w) || !readULong(&h) || + !readULong(&x) || !readULong(&y) || + !readUByte(&segInfoFlags)) { + goto eofError; + } + extCombOp = segInfoFlags & 7; + + // rest of the halftone region header + if (!readUByte(&flags)) { + goto eofError; + } + mmr = flags & 1; + templ = (flags >> 1) & 3; + enableSkip = (flags >> 3) & 1; + combOp = (flags >> 4) & 7; + if (!readULong(&gridW) || !readULong(&gridH) || + !readLong(&gridX) || !readLong(&gridY) || + !readUWord(&stepX) || !readUWord(&stepY)) { + goto eofError; + } + if (w == 0 || h == 0 || w >= INT_MAX / h) { + error(curStr->getPos(), "Bad bitmap size in JBIG2 halftone segment"); + return; + } + if (gridH == 0 || gridW >= INT_MAX / gridH) { + error(curStr->getPos(), "Bad grid size in JBIG2 halftone segment"); + return; + } + + // get pattern dictionary + if (nRefSegs != 1) { + error(curStr->getPos(), "Bad symbol dictionary reference in JBIG2 halftone segment"); + return; + } + seg = findSegment(refSegs[0]); + if (seg == NULL || seg->getType() != jbig2SegPatternDict) { + error(curStr->getPos(), "Bad symbol dictionary reference in JBIG2 halftone segment"); + return; + } + + patternDict = (JBIG2PatternDict *)seg; + bpp = 0; + i = 1; + while (i < patternDict->getSize()) { + ++bpp; + i <<= 1; + } + patW = patternDict->getBitmap(0)->getWidth(); + patH = patternDict->getBitmap(0)->getHeight(); + + // set up the arithmetic decoder + if (!mmr) { + resetGenericStats(templ, NULL); + arithDecoder->start(); + } + + // allocate the bitmap + bitmap = new JBIG2Bitmap(segNum, w, h); + if (flags & 0x80) { // HDEFPIXEL + bitmap->clearToOne(); + } else { + bitmap->clearToZero(); + } + + // compute the skip bitmap + skipBitmap = NULL; + if (enableSkip) { + skipBitmap = new JBIG2Bitmap(0, gridW, gridH); + skipBitmap->clearToZero(); + for (m = 0; m < gridH; ++m) { + for (n = 0; n < gridW; ++n) { + xx = gridX + m * stepY + n * stepX; + yy = gridY + m * stepX - n * stepY; + if (((xx + (int)patW) >> 8) <= 0 || (xx >> 8) >= (int)w || + ((yy + (int)patH) >> 8) <= 0 || (yy >> 8) >= (int)h) { + skipBitmap->setPixel(n, m); + } + } + } + } + + // read the gray-scale image + grayImg = (Guint *)gmallocn(gridW * gridH, sizeof(Guint)); + memset(grayImg, 0, gridW * gridH * sizeof(Guint)); + atx[0] = templ <= 1 ? 3 : 2; aty[0] = -1; + atx[1] = -3; aty[1] = -1; + atx[2] = 2; aty[2] = -2; + atx[3] = -2; aty[3] = -2; + for (j = bpp - 1; j >= 0; --j) { + grayBitmap = readGenericBitmap(mmr, gridW, gridH, templ, gFalse, + enableSkip, skipBitmap, atx, aty, -1); + i = 0; + for (m = 0; m < gridH; ++m) { + for (n = 0; n < gridW; ++n) { + bit = grayBitmap->getPixel(n, m) ^ (grayImg[i] & 1); + grayImg[i] = (grayImg[i] << 1) | bit; + ++i; + } + } + delete grayBitmap; + } + + // decode the image + i = 0; + for (m = 0; m < gridH; ++m) { + xx = gridX + m * stepY; + yy = gridY + m * stepX; + for (n = 0; n < gridW; ++n) { + if (!(enableSkip && skipBitmap->getPixel(n, m))) { + patternBitmap = patternDict->getBitmap(grayImg[i]); + bitmap->combine(patternBitmap, xx >> 8, yy >> 8, combOp); + } + xx += stepX; + yy -= stepY; + ++i; + } + } + + gfree(grayImg); + if (skipBitmap) { + delete skipBitmap; + } + + // combine the region bitmap into the page bitmap + if (imm) { + if (pageH == 0xffffffff && y + h > curPageH) { + pageBitmap->expand(y + h, pageDefPixel); + } + pageBitmap->combine(bitmap, x, y, extCombOp); + delete bitmap; + + // store the region bitmap + } else { + segments->append(bitmap); + } + + return; + + eofError: + error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); +} + +void JBIG2Stream::readGenericRegionSeg(Guint segNum, GBool imm, + GBool lossless, Guint length) { + JBIG2Bitmap *bitmap; + Guint w, h, x, y, segInfoFlags, extCombOp; + Guint flags, mmr, templ, tpgdOn; + int atx[4], aty[4]; + + // region segment info field + if (!readULong(&w) || !readULong(&h) || + !readULong(&x) || !readULong(&y) || + !readUByte(&segInfoFlags)) { + goto eofError; + } + extCombOp = segInfoFlags & 7; + + // rest of the generic region segment header + if (!readUByte(&flags)) { + goto eofError; + } + mmr = flags & 1; + templ = (flags >> 1) & 3; + tpgdOn = (flags >> 3) & 1; + + // AT flags + if (!mmr) { + if (templ == 0) { + if (!readByte(&atx[0]) || + !readByte(&aty[0]) || + !readByte(&atx[1]) || + !readByte(&aty[1]) || + !readByte(&atx[2]) || + !readByte(&aty[2]) || + !readByte(&atx[3]) || + !readByte(&aty[3])) { + goto eofError; + } + } else { + if (!readByte(&atx[0]) || + !readByte(&aty[0])) { + goto eofError; + } + } + } + + // set up the arithmetic decoder + if (!mmr) { + resetGenericStats(templ, NULL); + arithDecoder->start(); + } + + // read the bitmap + bitmap = readGenericBitmap(mmr, w, h, templ, tpgdOn, gFalse, + NULL, atx, aty, mmr ? length - 18 : 0); + if (!bitmap) + return; + + // combine the region bitmap into the page bitmap + if (imm) { + if (pageH == 0xffffffff && y + h > curPageH) { + pageBitmap->expand(y + h, pageDefPixel); + } + pageBitmap->combine(bitmap, x, y, extCombOp); + delete bitmap; + + // store the region bitmap + } else { + bitmap->setSegNum(segNum); + segments->append(bitmap); + } + + return; + + eofError: + error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); +} + +inline void JBIG2Stream::mmrAddPixels(int a1, int blackPixels, + int *codingLine, int *a0i, int w) { + if (a1 > codingLine[*a0i]) { + if (a1 > w) { + error(curStr->getPos(), "JBIG2 MMR row is wrong length (%d)", a1); + a1 = w; + } + if ((*a0i & 1) ^ blackPixels) { + ++*a0i; + } + codingLine[*a0i] = a1; + } +} + +inline void JBIG2Stream::mmrAddPixelsNeg(int a1, int blackPixels, + int *codingLine, int *a0i, int w) { + if (a1 > codingLine[*a0i]) { + if (a1 > w) { + error(curStr->getPos(), "JBIG2 MMR row is wrong length (%d)", a1); + a1 = w; + } + if ((*a0i & 1) ^ blackPixels) { + ++*a0i; + } + codingLine[*a0i] = a1; + } else if (a1 < codingLine[*a0i]) { + if (a1 < 0) { + error(curStr->getPos(), "Invalid JBIG2 MMR code"); + a1 = 0; + } + while (*a0i > 0 && a1 <= codingLine[*a0i - 1]) { + --*a0i; + } + codingLine[*a0i] = a1; + } +} + +JBIG2Bitmap *JBIG2Stream::readGenericBitmap(GBool mmr, int w, int h, + int templ, GBool tpgdOn, + GBool useSkip, JBIG2Bitmap *skip, + int *atx, int *aty, + int mmrDataLength) { + JBIG2Bitmap *bitmap; + GBool ltp; + Guint ltpCX, cx, cx0, cx1, cx2; + JBIG2BitmapPtr cxPtr0 = {0}, cxPtr1 = {0}; + JBIG2BitmapPtr atPtr0 = {0}, atPtr1 = {0}, atPtr2 = {0}, atPtr3 = {0}; + int *refLine, *codingLine; + int code1, code2, code3; + int x, y, a0i, b1i, blackPixels, pix, i; + + bitmap = new JBIG2Bitmap(0, w, h); + if (!bitmap->isOk()) { + delete bitmap; + return NULL; + } + bitmap->clearToZero(); + + //----- MMR decode + + if (mmr) { + + mmrDecoder->reset(); + if (w > INT_MAX - 2) { + error(curStr->getPos(), "Bad width in JBIG2 generic bitmap"); + // force a call to gmalloc(-1), which will throw an exception + w = -3; + } + // 0 <= codingLine[0] < codingLine[1] < ... < codingLine[n] = w + // ---> max codingLine size = w + 1 + // refLine has one extra guard entry at the end + // ---> max refLine size = w + 2 + codingLine = (int *)gmallocn(w + 1, sizeof(int)); + refLine = (int *)gmallocn(w + 2, sizeof(int)); + for (i = 0; i < w + 1; ++i) codingLine[i] = w; + + for (y = 0; y < h; ++y) { + + // copy coding line to ref line + for (i = 0; codingLine[i] < w; ++i) { + refLine[i] = codingLine[i]; + } + refLine[i++] = w; + refLine[i] = w; + + // decode a line + codingLine[0] = 0; + a0i = 0; + b1i = 0; + blackPixels = 0; + // invariant: + // refLine[b1i-1] <= codingLine[a0i] < refLine[b1i] < refLine[b1i+1] <= w + // exception at left edge: + // codingLine[a0i = 0] = refLine[b1i = 0] = 0 is possible + // exception at right edge: + // refLine[b1i] = refLine[b1i+1] = w is possible + while (codingLine[a0i] < w) { + code1 = mmrDecoder->get2DCode(); + switch (code1) { + case twoDimPass: + mmrAddPixels(refLine[b1i + 1], blackPixels, codingLine, &a0i, w); + if (refLine[b1i + 1] < w) { + b1i += 2; + } + break; + case twoDimHoriz: + code1 = code2 = 0; + if (blackPixels) { + do { + code1 += code3 = mmrDecoder->getBlackCode(); + } while (code3 >= 64); + do { + code2 += code3 = mmrDecoder->getWhiteCode(); + } while (code3 >= 64); + } else { + do { + code1 += code3 = mmrDecoder->getWhiteCode(); + } while (code3 >= 64); + do { + code2 += code3 = mmrDecoder->getBlackCode(); + } while (code3 >= 64); + } + mmrAddPixels(codingLine[a0i] + code1, blackPixels, + codingLine, &a0i, w); + if (codingLine[a0i] < w) { + mmrAddPixels(codingLine[a0i] + code2, blackPixels ^ 1, + codingLine, &a0i, w); + } + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { + b1i += 2; + } + break; + case twoDimVertR3: + mmrAddPixels(refLine[b1i] + 3, blackPixels, codingLine, &a0i, w); + blackPixels ^= 1; + if (codingLine[a0i] < w) { + ++b1i; + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { + b1i += 2; + } + } + break; + case twoDimVertR2: + mmrAddPixels(refLine[b1i] + 2, blackPixels, codingLine, &a0i, w); + blackPixels ^= 1; + if (codingLine[a0i] < w) { + ++b1i; + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { + b1i += 2; + } + } + break; + case twoDimVertR1: + mmrAddPixels(refLine[b1i] + 1, blackPixels, codingLine, &a0i, w); + blackPixels ^= 1; + if (codingLine[a0i] < w) { + ++b1i; + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { + b1i += 2; + } + } + break; + case twoDimVert0: + mmrAddPixels(refLine[b1i], blackPixels, codingLine, &a0i, w); + blackPixels ^= 1; + if (codingLine[a0i] < w) { + ++b1i; + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { + b1i += 2; + } + } + break; + case twoDimVertL3: + mmrAddPixelsNeg(refLine[b1i] - 3, blackPixels, codingLine, &a0i, w); + blackPixels ^= 1; + if (codingLine[a0i] < w) { + if (b1i > 0) { + --b1i; + } else { + ++b1i; + } + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { + b1i += 2; + } + } + break; + case twoDimVertL2: + mmrAddPixelsNeg(refLine[b1i] - 2, blackPixels, codingLine, &a0i, w); + blackPixels ^= 1; + if (codingLine[a0i] < w) { + if (b1i > 0) { + --b1i; + } else { + ++b1i; + } + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { + b1i += 2; + } + } + break; + case twoDimVertL1: + mmrAddPixelsNeg(refLine[b1i] - 1, blackPixels, codingLine, &a0i, w); + blackPixels ^= 1; + if (codingLine[a0i] < w) { + if (b1i > 0) { + --b1i; + } else { + ++b1i; + } + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { + b1i += 2; + } + } + break; + case EOF: + mmrAddPixels(w, 0, codingLine, &a0i, w); + break; + default: + error(curStr->getPos(), "Illegal code in JBIG2 MMR bitmap data"); + mmrAddPixels(w, 0, codingLine, &a0i, w); + break; + } + } + + // convert the run lengths to a bitmap line + i = 0; + while (1) { + for (x = codingLine[i]; x < codingLine[i+1]; ++x) { + bitmap->setPixel(x, y); + } + if (codingLine[i+1] >= w || codingLine[i+2] >= w) { + break; + } + i += 2; + } + } + + if (mmrDataLength >= 0) { + mmrDecoder->skipTo(mmrDataLength); + } else { + if (mmrDecoder->get24Bits() != 0x001001) { + error(curStr->getPos(), "Missing EOFB in JBIG2 MMR bitmap data"); + } + } + + gfree(refLine); + gfree(codingLine); + + //----- arithmetic decode + + } else { + // set up the typical row context + ltpCX = 0; // make gcc happy + if (tpgdOn) { + switch (templ) { + case 0: + ltpCX = 0x3953; // 001 11001 0101 0011 + break; + case 1: + ltpCX = 0x079a; // 0011 11001 101 0 + break; + case 2: + ltpCX = 0x0e3; // 001 1100 01 1 + break; + case 3: + ltpCX = 0x18a; // 01100 0101 1 + break; + } + } + + ltp = 0; + cx = cx0 = cx1 = cx2 = 0; // make gcc happy + for (y = 0; y < h; ++y) { + + // check for a "typical" (duplicate) row + if (tpgdOn) { + if (arithDecoder->decodeBit(ltpCX, genericRegionStats)) { + ltp = !ltp; + } + if (ltp) { + if (y > 0) { + bitmap->duplicateRow(y, y-1); + } + continue; + } + } + + switch (templ) { + case 0: + + // set up the context + bitmap->getPixelPtr(0, y-2, &cxPtr0); + cx0 = bitmap->nextPixel(&cxPtr0); + cx0 = (cx0 << 1) | bitmap->nextPixel(&cxPtr0); + bitmap->getPixelPtr(0, y-1, &cxPtr1); + cx1 = bitmap->nextPixel(&cxPtr1); + cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1); + cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1); + cx2 = 0; + bitmap->getPixelPtr(atx[0], y + aty[0], &atPtr0); + bitmap->getPixelPtr(atx[1], y + aty[1], &atPtr1); + bitmap->getPixelPtr(atx[2], y + aty[2], &atPtr2); + bitmap->getPixelPtr(atx[3], y + aty[3], &atPtr3); + + // decode the row + for (x = 0; x < w; ++x) { + + // build the context + cx = (cx0 << 13) | (cx1 << 8) | (cx2 << 4) | + (bitmap->nextPixel(&atPtr0) << 3) | + (bitmap->nextPixel(&atPtr1) << 2) | + (bitmap->nextPixel(&atPtr2) << 1) | + bitmap->nextPixel(&atPtr3); + + // check for a skipped pixel + if (useSkip && skip->getPixel(x, y)) { + pix = 0; + + // decode the pixel + } else if ((pix = arithDecoder->decodeBit(cx, genericRegionStats))) { + bitmap->setPixel(x, y); + } + + // update the context + cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 0x07; + cx1 = ((cx1 << 1) | bitmap->nextPixel(&cxPtr1)) & 0x1f; + cx2 = ((cx2 << 1) | pix) & 0x0f; + } + break; + + case 1: + + // set up the context + bitmap->getPixelPtr(0, y-2, &cxPtr0); + cx0 = bitmap->nextPixel(&cxPtr0); + cx0 = (cx0 << 1) | bitmap->nextPixel(&cxPtr0); + cx0 = (cx0 << 1) | bitmap->nextPixel(&cxPtr0); + bitmap->getPixelPtr(0, y-1, &cxPtr1); + cx1 = bitmap->nextPixel(&cxPtr1); + cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1); + cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1); + cx2 = 0; + bitmap->getPixelPtr(atx[0], y + aty[0], &atPtr0); + + // decode the row + for (x = 0; x < w; ++x) { + + // build the context + cx = (cx0 << 9) | (cx1 << 4) | (cx2 << 1) | + bitmap->nextPixel(&atPtr0); + + // check for a skipped pixel + if (useSkip && skip->getPixel(x, y)) { + pix = 0; + + // decode the pixel + } else if ((pix = arithDecoder->decodeBit(cx, genericRegionStats))) { + bitmap->setPixel(x, y); + } + + // update the context + cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 0x0f; + cx1 = ((cx1 << 1) | bitmap->nextPixel(&cxPtr1)) & 0x1f; + cx2 = ((cx2 << 1) | pix) & 0x07; + } + break; + + case 2: + + // set up the context + bitmap->getPixelPtr(0, y-2, &cxPtr0); + cx0 = bitmap->nextPixel(&cxPtr0); + cx0 = (cx0 << 1) | bitmap->nextPixel(&cxPtr0); + bitmap->getPixelPtr(0, y-1, &cxPtr1); + cx1 = bitmap->nextPixel(&cxPtr1); + cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1); + cx2 = 0; + bitmap->getPixelPtr(atx[0], y + aty[0], &atPtr0); + + // decode the row + for (x = 0; x < w; ++x) { + + // build the context + cx = (cx0 << 7) | (cx1 << 3) | (cx2 << 1) | + bitmap->nextPixel(&atPtr0); + + // check for a skipped pixel + if (useSkip && skip->getPixel(x, y)) { + pix = 0; + + // decode the pixel + } else if ((pix = arithDecoder->decodeBit(cx, genericRegionStats))) { + bitmap->setPixel(x, y); + } + + // update the context + cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 0x07; + cx1 = ((cx1 << 1) | bitmap->nextPixel(&cxPtr1)) & 0x0f; + cx2 = ((cx2 << 1) | pix) & 0x03; + } + break; + + case 3: + + // set up the context + bitmap->getPixelPtr(0, y-1, &cxPtr1); + cx1 = bitmap->nextPixel(&cxPtr1); + cx1 = (cx1 << 1) | bitmap->nextPixel(&cxPtr1); + cx2 = 0; + bitmap->getPixelPtr(atx[0], y + aty[0], &atPtr0); + + // decode the row + for (x = 0; x < w; ++x) { + + // build the context + cx = (cx1 << 5) | (cx2 << 1) | + bitmap->nextPixel(&atPtr0); + + // check for a skipped pixel + if (useSkip && skip->getPixel(x, y)) { + pix = 0; + + // decode the pixel + } else if ((pix = arithDecoder->decodeBit(cx, genericRegionStats))) { + bitmap->setPixel(x, y); + } + + // update the context + cx1 = ((cx1 << 1) | bitmap->nextPixel(&cxPtr1)) & 0x1f; + cx2 = ((cx2 << 1) | pix) & 0x0f; + } + break; + } + } + } + + return bitmap; +} + +void JBIG2Stream::readGenericRefinementRegionSeg(Guint segNum, GBool imm, + GBool lossless, Guint length, + Guint *refSegs, + Guint nRefSegs) { + JBIG2Bitmap *bitmap, *refBitmap; + Guint w, h, x, y, segInfoFlags, extCombOp; + Guint flags, templ, tpgrOn; + int atx[2], aty[2]; + JBIG2Segment *seg; + + // region segment info field + if (!readULong(&w) || !readULong(&h) || + !readULong(&x) || !readULong(&y) || + !readUByte(&segInfoFlags)) { + goto eofError; + } + extCombOp = segInfoFlags & 7; + + // rest of the generic refinement region segment header + if (!readUByte(&flags)) { + goto eofError; + } + templ = flags & 1; + tpgrOn = (flags >> 1) & 1; + + // AT flags + if (!templ) { + if (!readByte(&atx[0]) || !readByte(&aty[0]) || + !readByte(&atx[1]) || !readByte(&aty[1])) { + goto eofError; + } + } + + // resize the page bitmap if needed + if (nRefSegs == 0 || imm) { + if (pageH == 0xffffffff && y + h > curPageH) { + pageBitmap->expand(y + h, pageDefPixel); + } + } + + // get referenced bitmap + if (nRefSegs > 1) { + error(curStr->getPos(), "Bad reference in JBIG2 generic refinement segment"); + return; + } + if (nRefSegs == 1) { + seg = findSegment(refSegs[0]); + if (seg == NULL || seg->getType() != jbig2SegBitmap) { + error(curStr->getPos(), "Bad bitmap reference in JBIG2 generic refinement segment"); + return; + } + refBitmap = (JBIG2Bitmap *)seg; + } else { + refBitmap = pageBitmap->getSlice(x, y, w, h); + } + + // set up the arithmetic decoder + resetRefinementStats(templ, NULL); + arithDecoder->start(); + + // read + bitmap = readGenericRefinementRegion(w, h, templ, tpgrOn, + refBitmap, 0, 0, atx, aty); + + // combine the region bitmap into the page bitmap + if (imm) { + pageBitmap->combine(bitmap, x, y, extCombOp); + delete bitmap; + + // store the region bitmap + } else { + if (bitmap) { + bitmap->setSegNum(segNum); + segments->append(bitmap); + } else { + error(curStr->getPos(), "readGenericRefinementRegionSeg with null bitmap"); + } + } + + // delete the referenced bitmap + if (nRefSegs == 1) { + discardSegment(refSegs[0]); + } else { + delete refBitmap; + } + + return; + + eofError: + error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); +} + +JBIG2Bitmap *JBIG2Stream::readGenericRefinementRegion(int w, int h, + int templ, GBool tpgrOn, + JBIG2Bitmap *refBitmap, + int refDX, int refDY, + int *atx, int *aty) { + JBIG2Bitmap *bitmap; + GBool ltp; + Guint ltpCX, cx, cx0, cx2, cx3, cx4, tpgrCX0, tpgrCX1, tpgrCX2; + JBIG2BitmapPtr cxPtr0 = {0}; + JBIG2BitmapPtr cxPtr1 = {0}; + JBIG2BitmapPtr cxPtr2 = {0}; + JBIG2BitmapPtr cxPtr3 = {0}; + JBIG2BitmapPtr cxPtr4 = {0}; + JBIG2BitmapPtr cxPtr5 = {0}; + JBIG2BitmapPtr cxPtr6 = {0}; + JBIG2BitmapPtr tpgrCXPtr0 = {0}; + JBIG2BitmapPtr tpgrCXPtr1 = {0}; + JBIG2BitmapPtr tpgrCXPtr2 = {0}; + int x, y, pix; + + bitmap = new JBIG2Bitmap(0, w, h); + if (!bitmap->isOk()) + { + delete bitmap; + return NULL; + } + bitmap->clearToZero(); + + // set up the typical row context + if (templ) { + ltpCX = 0x008; + } else { + ltpCX = 0x0010; + } + + ltp = 0; + for (y = 0; y < h; ++y) { + + if (templ) { + + // set up the context + bitmap->getPixelPtr(0, y-1, &cxPtr0); + cx0 = bitmap->nextPixel(&cxPtr0); + bitmap->getPixelPtr(-1, y, &cxPtr1); + refBitmap->getPixelPtr(-refDX, y-1-refDY, &cxPtr2); + refBitmap->getPixelPtr(-1-refDX, y-refDY, &cxPtr3); + cx3 = refBitmap->nextPixel(&cxPtr3); + cx3 = (cx3 << 1) | refBitmap->nextPixel(&cxPtr3); + refBitmap->getPixelPtr(-refDX, y+1-refDY, &cxPtr4); + cx4 = refBitmap->nextPixel(&cxPtr4); + + // set up the typical prediction context + tpgrCX0 = tpgrCX1 = tpgrCX2 = 0; // make gcc happy + if (tpgrOn) { + refBitmap->getPixelPtr(-1-refDX, y-1-refDY, &tpgrCXPtr0); + tpgrCX0 = refBitmap->nextPixel(&tpgrCXPtr0); + tpgrCX0 = (tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0); + tpgrCX0 = (tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0); + refBitmap->getPixelPtr(-1-refDX, y-refDY, &tpgrCXPtr1); + tpgrCX1 = refBitmap->nextPixel(&tpgrCXPtr1); + tpgrCX1 = (tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1); + tpgrCX1 = (tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1); + refBitmap->getPixelPtr(-1-refDX, y+1-refDY, &tpgrCXPtr2); + tpgrCX2 = refBitmap->nextPixel(&tpgrCXPtr2); + tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); + tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); + } else { + tpgrCXPtr0.p = tpgrCXPtr1.p = tpgrCXPtr2.p = NULL; // make gcc happy + tpgrCXPtr0.shift = tpgrCXPtr1.shift = tpgrCXPtr2.shift = 0; + tpgrCXPtr0.x = tpgrCXPtr1.x = tpgrCXPtr2.x = 0; + } + + for (x = 0; x < w; ++x) { + + // update the context + cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 7; + cx3 = ((cx3 << 1) | refBitmap->nextPixel(&cxPtr3)) & 7; + cx4 = ((cx4 << 1) | refBitmap->nextPixel(&cxPtr4)) & 3; + + if (tpgrOn) { + // update the typical predictor context + tpgrCX0 = ((tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0)) & 7; + tpgrCX1 = ((tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1)) & 7; + tpgrCX2 = ((tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2)) & 7; + + // check for a "typical" pixel + if (arithDecoder->decodeBit(ltpCX, refinementRegionStats)) { + ltp = !ltp; + } + if (tpgrCX0 == 0 && tpgrCX1 == 0 && tpgrCX2 == 0) { + bitmap->clearPixel(x, y); + continue; + } else if (tpgrCX0 == 7 && tpgrCX1 == 7 && tpgrCX2 == 7) { + bitmap->setPixel(x, y); + continue; + } + } + + // build the context + cx = (cx0 << 7) | (bitmap->nextPixel(&cxPtr1) << 6) | + (refBitmap->nextPixel(&cxPtr2) << 5) | + (cx3 << 2) | cx4; + + // decode the pixel + if ((pix = arithDecoder->decodeBit(cx, refinementRegionStats))) { + bitmap->setPixel(x, y); + } + } + + } else { + + // set up the context + bitmap->getPixelPtr(0, y-1, &cxPtr0); + cx0 = bitmap->nextPixel(&cxPtr0); + bitmap->getPixelPtr(-1, y, &cxPtr1); + refBitmap->getPixelPtr(-refDX, y-1-refDY, &cxPtr2); + cx2 = refBitmap->nextPixel(&cxPtr2); + refBitmap->getPixelPtr(-1-refDX, y-refDY, &cxPtr3); + cx3 = refBitmap->nextPixel(&cxPtr3); + cx3 = (cx3 << 1) | refBitmap->nextPixel(&cxPtr3); + refBitmap->getPixelPtr(-1-refDX, y+1-refDY, &cxPtr4); + cx4 = refBitmap->nextPixel(&cxPtr4); + cx4 = (cx4 << 1) | refBitmap->nextPixel(&cxPtr4); + bitmap->getPixelPtr(atx[0], y+aty[0], &cxPtr5); + refBitmap->getPixelPtr(atx[1]-refDX, y+aty[1]-refDY, &cxPtr6); + + // set up the typical prediction context + tpgrCX0 = tpgrCX1 = tpgrCX2 = 0; // make gcc happy + if (tpgrOn) { + refBitmap->getPixelPtr(-1-refDX, y-1-refDY, &tpgrCXPtr0); + tpgrCX0 = refBitmap->nextPixel(&tpgrCXPtr0); + tpgrCX0 = (tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0); + tpgrCX0 = (tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0); + refBitmap->getPixelPtr(-1-refDX, y-refDY, &tpgrCXPtr1); + tpgrCX1 = refBitmap->nextPixel(&tpgrCXPtr1); + tpgrCX1 = (tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1); + tpgrCX1 = (tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1); + refBitmap->getPixelPtr(-1-refDX, y+1-refDY, &tpgrCXPtr2); + tpgrCX2 = refBitmap->nextPixel(&tpgrCXPtr2); + tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); + tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); + } else { + tpgrCXPtr0.p = tpgrCXPtr1.p = tpgrCXPtr2.p = NULL; // make gcc happy + tpgrCXPtr0.shift = tpgrCXPtr1.shift = tpgrCXPtr2.shift = 0; + tpgrCXPtr0.x = tpgrCXPtr1.x = tpgrCXPtr2.x = 0; + } + + for (x = 0; x < w; ++x) { + + // update the context + cx0 = ((cx0 << 1) | bitmap->nextPixel(&cxPtr0)) & 3; + cx2 = ((cx2 << 1) | refBitmap->nextPixel(&cxPtr2)) & 3; + cx3 = ((cx3 << 1) | refBitmap->nextPixel(&cxPtr3)) & 7; + cx4 = ((cx4 << 1) | refBitmap->nextPixel(&cxPtr4)) & 7; + + if (tpgrOn) { + // update the typical predictor context + tpgrCX0 = ((tpgrCX0 << 1) | refBitmap->nextPixel(&tpgrCXPtr0)) & 7; + tpgrCX1 = ((tpgrCX1 << 1) | refBitmap->nextPixel(&tpgrCXPtr1)) & 7; + tpgrCX2 = ((tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2)) & 7; + + // check for a "typical" pixel + if (arithDecoder->decodeBit(ltpCX, refinementRegionStats)) { + ltp = !ltp; + } + if (tpgrCX0 == 0 && tpgrCX1 == 0 && tpgrCX2 == 0) { + bitmap->clearPixel(x, y); + continue; + } else if (tpgrCX0 == 7 && tpgrCX1 == 7 && tpgrCX2 == 7) { + bitmap->setPixel(x, y); + continue; + } + } + + // build the context + cx = (cx0 << 11) | (bitmap->nextPixel(&cxPtr1) << 10) | + (cx2 << 8) | (cx3 << 5) | (cx4 << 2) | + (bitmap->nextPixel(&cxPtr5) << 1) | + refBitmap->nextPixel(&cxPtr6); + + // decode the pixel + if ((pix = arithDecoder->decodeBit(cx, refinementRegionStats))) { + bitmap->setPixel(x, y); + } + } + } + } + + return bitmap; +} + +void JBIG2Stream::readPageInfoSeg(Guint length) { + Guint xRes, yRes, flags, striping; + + if (!readULong(&pageW) || !readULong(&pageH) || + !readULong(&xRes) || !readULong(&yRes) || + !readUByte(&flags) || !readUWord(&striping)) { + goto eofError; + } + pageDefPixel = (flags >> 2) & 1; + defCombOp = (flags >> 3) & 3; + + // allocate the page bitmap + if (pageH == 0xffffffff) { + curPageH = striping & 0x7fff; + } else { + curPageH = pageH; + } + pageBitmap = new JBIG2Bitmap(0, pageW, curPageH); + + if (!pageBitmap->isOk()) { + delete pageBitmap; + pageBitmap = NULL; + return; + } + + // default pixel value + if (pageDefPixel) { + pageBitmap->clearToOne(); + } else { + pageBitmap->clearToZero(); + } + + return; + + eofError: + error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); +} + +void JBIG2Stream::readEndOfStripeSeg(Guint length) { + Guint i; + + // skip the segment + for (i = 0; i < length; ++i) { + curStr->getChar(); + } +} + +void JBIG2Stream::readProfilesSeg(Guint length) { + Guint i; + + // skip the segment + for (i = 0; i < length; ++i) { + curStr->getChar(); + } +} + +void JBIG2Stream::readCodeTableSeg(Guint segNum, Guint length) { + JBIG2HuffmanTable *huffTab; + Guint flags, oob, prefixBits, rangeBits; + int lowVal, highVal, val; + Guint huffTabSize, i; + + if (!readUByte(&flags) || !readLong(&lowVal) || !readLong(&highVal)) { + goto eofError; + } + oob = flags & 1; + prefixBits = ((flags >> 1) & 7) + 1; + rangeBits = ((flags >> 4) & 7) + 1; + + huffDecoder->reset(); + huffTabSize = 8; + huffTab = (JBIG2HuffmanTable *) + gmallocn(huffTabSize, sizeof(JBIG2HuffmanTable)); + i = 0; + val = lowVal; + while (val < highVal) { + if (i == huffTabSize) { + huffTabSize *= 2; + huffTab = (JBIG2HuffmanTable *) + greallocn(huffTab, huffTabSize, sizeof(JBIG2HuffmanTable)); + } + huffTab[i].val = val; + huffTab[i].prefixLen = huffDecoder->readBits(prefixBits); + huffTab[i].rangeLen = huffDecoder->readBits(rangeBits); + val += 1 << huffTab[i].rangeLen; + ++i; + } + if (i + oob + 3 > huffTabSize) { + huffTabSize = i + oob + 3; + huffTab = (JBIG2HuffmanTable *) + greallocn(huffTab, huffTabSize, sizeof(JBIG2HuffmanTable)); + } + huffTab[i].val = lowVal - 1; + huffTab[i].prefixLen = huffDecoder->readBits(prefixBits); + huffTab[i].rangeLen = jbig2HuffmanLOW; + ++i; + huffTab[i].val = highVal; + huffTab[i].prefixLen = huffDecoder->readBits(prefixBits); + huffTab[i].rangeLen = 32; + ++i; + if (oob) { + huffTab[i].val = 0; + huffTab[i].prefixLen = huffDecoder->readBits(prefixBits); + huffTab[i].rangeLen = jbig2HuffmanOOB; + ++i; + } + huffTab[i].val = 0; + huffTab[i].prefixLen = 0; + huffTab[i].rangeLen = jbig2HuffmanEOT; + huffDecoder->buildTable(huffTab, i); + + // create and store the new table segment + segments->append(new JBIG2CodeTable(segNum, huffTab)); + + return; + + eofError: + error(curStr->getPos(), "Unexpected EOF in JBIG2 stream"); +} + +void JBIG2Stream::readExtensionSeg(Guint length) { + Guint i; + + // skip the segment + for (i = 0; i < length; ++i) { + curStr->getChar(); + } +} + +JBIG2Segment *JBIG2Stream::findSegment(Guint segNum) { + JBIG2Segment *seg; + int i; + + for (i = 0; i < globalSegments->getLength(); ++i) { + seg = (JBIG2Segment *)globalSegments->get(i); + if (seg->getSegNum() == segNum) { + return seg; + } + } + for (i = 0; i < segments->getLength(); ++i) { + seg = (JBIG2Segment *)segments->get(i); + if (seg->getSegNum() == segNum) { + return seg; + } + } + return NULL; +} + +void JBIG2Stream::discardSegment(Guint segNum) { + JBIG2Segment *seg; + int i; + + for (i = 0; i < globalSegments->getLength(); ++i) { + seg = (JBIG2Segment *)globalSegments->get(i); + if (seg->getSegNum() == segNum) { + globalSegments->del(i); + return; + } + } + for (i = 0; i < segments->getLength(); ++i) { + seg = (JBIG2Segment *)segments->get(i); + if (seg->getSegNum() == segNum) { + segments->del(i); + return; + } + } +} + +void JBIG2Stream::resetGenericStats(Guint templ, + JArithmeticDecoderStats *prevStats) { + int size; + + size = contextSize[templ]; + if (prevStats && prevStats->getContextSize() == size) { + if (genericRegionStats->getContextSize() == size) { + genericRegionStats->copyFrom(prevStats); + } else { + delete genericRegionStats; + genericRegionStats = prevStats->copy(); + } + } else { + if (genericRegionStats->getContextSize() == size) { + genericRegionStats->reset(); + } else { + delete genericRegionStats; + genericRegionStats = new JArithmeticDecoderStats(1 << size); + } + } +} + +void JBIG2Stream::resetRefinementStats(Guint templ, + JArithmeticDecoderStats *prevStats) { + int size; + + size = refContextSize[templ]; + if (prevStats && prevStats->getContextSize() == size) { + if (refinementRegionStats->getContextSize() == size) { + refinementRegionStats->copyFrom(prevStats); + } else { + delete refinementRegionStats; + refinementRegionStats = prevStats->copy(); + } + } else { + if (refinementRegionStats->getContextSize() == size) { + refinementRegionStats->reset(); + } else { + delete refinementRegionStats; + refinementRegionStats = new JArithmeticDecoderStats(1 << size); + } + } +} + +void JBIG2Stream::resetIntStats(int symCodeLen) { + iadhStats->reset(); + iadwStats->reset(); + iaexStats->reset(); + iaaiStats->reset(); + iadtStats->reset(); + iaitStats->reset(); + iafsStats->reset(); + iadsStats->reset(); + iardxStats->reset(); + iardyStats->reset(); + iardwStats->reset(); + iardhStats->reset(); + iariStats->reset(); + if (iaidStats->getContextSize() == 1 << (symCodeLen + 1)) { + iaidStats->reset(); + } else { + delete iaidStats; + iaidStats = new JArithmeticDecoderStats(1 << (symCodeLen + 1)); + } +} + +GBool JBIG2Stream::readUByte(Guint *x) { + int c0; + + if ((c0 = curStr->getChar()) == EOF) { + return gFalse; + } + *x = (Guint)c0; + return gTrue; +} + +GBool JBIG2Stream::readByte(int *x) { + int c0; + + if ((c0 = curStr->getChar()) == EOF) { + return gFalse; + } + *x = c0; + if (c0 & 0x80) { + *x |= -1 - 0xff; + } + return gTrue; +} + +GBool JBIG2Stream::readUWord(Guint *x) { + int c0, c1; + + if ((c0 = curStr->getChar()) == EOF || + (c1 = curStr->getChar()) == EOF) { + return gFalse; + } + *x = (Guint)((c0 << 8) | c1); + return gTrue; +} + +GBool JBIG2Stream::readULong(Guint *x) { + int c0, c1, c2, c3; + + if ((c0 = curStr->getChar()) == EOF || + (c1 = curStr->getChar()) == EOF || + (c2 = curStr->getChar()) == EOF || + (c3 = curStr->getChar()) == EOF) { + return gFalse; + } + *x = (Guint)((c0 << 24) | (c1 << 16) | (c2 << 8) | c3); + return gTrue; +} + +GBool JBIG2Stream::readLong(int *x) { + int c0, c1, c2, c3; + + if ((c0 = curStr->getChar()) == EOF || + (c1 = curStr->getChar()) == EOF || + (c2 = curStr->getChar()) == EOF || + (c3 = curStr->getChar()) == EOF) { + return gFalse; + } + *x = ((c0 << 24) | (c1 << 16) | (c2 << 8) | c3); + if (c0 & 0x80) { + *x |= -1 - (int)0xffffffff; + } + return gTrue; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/JBIG2Stream.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/JBIG2Stream.h new file mode 100644 index 00000000000..23d3d92d961 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/JBIG2Stream.h @@ -0,0 +1,162 @@ +//======================================================================== +// +// JBIG2Stream.h +// +// Copyright 2002-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2009 David Benjamin <davidben@mit.edu> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef JBIG2STREAM_H +#define JBIG2STREAM_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" +#include "Object.h" +#include "Stream.h" + +class GooList; +class JBIG2Segment; +class JBIG2Bitmap; +class JArithmeticDecoder; +class JArithmeticDecoderStats; +class JBIG2HuffmanDecoder; +struct JBIG2HuffmanTable; +class JBIG2MMRDecoder; + +//------------------------------------------------------------------------ + +class JBIG2Stream: public FilterStream { +public: + + JBIG2Stream(Stream *strA, Object *globalsStreamA); + virtual ~JBIG2Stream(); + virtual StreamKind getKind() { return strJBIG2; } + virtual void reset(); + virtual void close(); + virtual int getPos(); + virtual int getChar(); + virtual int lookChar(); + virtual GooString *getPSFilter(int psLevel, char *indent); + virtual GBool isBinary(GBool last = gTrue); + +private: + + void readSegments(); + GBool readSymbolDictSeg(Guint segNum, Guint length, + Guint *refSegs, Guint nRefSegs); + void readTextRegionSeg(Guint segNum, GBool imm, + GBool lossless, Guint length, + Guint *refSegs, Guint nRefSegs); + JBIG2Bitmap *readTextRegion(GBool huff, GBool refine, + int w, int h, + Guint numInstances, + Guint logStrips, + int numSyms, + JBIG2HuffmanTable *symCodeTab, + Guint symCodeLen, + JBIG2Bitmap **syms, + Guint defPixel, Guint combOp, + Guint transposed, Guint refCorner, + int sOffset, + JBIG2HuffmanTable *huffFSTable, + JBIG2HuffmanTable *huffDSTable, + JBIG2HuffmanTable *huffDTTable, + JBIG2HuffmanTable *huffRDWTable, + JBIG2HuffmanTable *huffRDHTable, + JBIG2HuffmanTable *huffRDXTable, + JBIG2HuffmanTable *huffRDYTable, + JBIG2HuffmanTable *huffRSizeTable, + Guint templ, + int *atx, int *aty); + void readPatternDictSeg(Guint segNum, Guint length); + void readHalftoneRegionSeg(Guint segNum, GBool imm, + GBool lossless, Guint length, + Guint *refSegs, Guint nRefSegs); + void readGenericRegionSeg(Guint segNum, GBool imm, + GBool lossless, Guint length); + void mmrAddPixels(int a1, int blackPixels, + int *codingLine, int *a0i, int w); + void mmrAddPixelsNeg(int a1, int blackPixels, + int *codingLine, int *a0i, int w); + JBIG2Bitmap *readGenericBitmap(GBool mmr, int w, int h, + int templ, GBool tpgdOn, + GBool useSkip, JBIG2Bitmap *skip, + int *atx, int *aty, + int mmrDataLength); + void readGenericRefinementRegionSeg(Guint segNum, GBool imm, + GBool lossless, Guint length, + Guint *refSegs, + Guint nRefSegs); + JBIG2Bitmap *readGenericRefinementRegion(int w, int h, + int templ, GBool tpgrOn, + JBIG2Bitmap *refBitmap, + int refDX, int refDY, + int *atx, int *aty); + void readPageInfoSeg(Guint length); + void readEndOfStripeSeg(Guint length); + void readProfilesSeg(Guint length); + void readCodeTableSeg(Guint segNum, Guint length); + void readExtensionSeg(Guint length); + JBIG2Segment *findSegment(Guint segNum); + void discardSegment(Guint segNum); + void resetGenericStats(Guint templ, + JArithmeticDecoderStats *prevStats); + void resetRefinementStats(Guint templ, + JArithmeticDecoderStats *prevStats); + void resetIntStats(int symCodeLen); + GBool readUByte(Guint *x); + GBool readByte(int *x); + GBool readUWord(Guint *x); + GBool readULong(Guint *x); + GBool readLong(int *x); + + Object globalsStream; + Guint pageW, pageH, curPageH; + Guint pageDefPixel; + JBIG2Bitmap *pageBitmap; + Guint defCombOp; + GooList *segments; // [JBIG2Segment] + GooList *globalSegments; // [JBIG2Segment] + Stream *curStr; + Guchar *dataPtr; + Guchar *dataEnd; + + JArithmeticDecoder *arithDecoder; + JArithmeticDecoderStats *genericRegionStats; + JArithmeticDecoderStats *refinementRegionStats; + JArithmeticDecoderStats *iadhStats; + JArithmeticDecoderStats *iadwStats; + JArithmeticDecoderStats *iaexStats; + JArithmeticDecoderStats *iaaiStats; + JArithmeticDecoderStats *iadtStats; + JArithmeticDecoderStats *iaitStats; + JArithmeticDecoderStats *iafsStats; + JArithmeticDecoderStats *iadsStats; + JArithmeticDecoderStats *iardxStats; + JArithmeticDecoderStats *iardyStats; + JArithmeticDecoderStats *iardwStats; + JArithmeticDecoderStats *iardhStats; + JArithmeticDecoderStats *iariStats; + JArithmeticDecoderStats *iaidStats; + JBIG2HuffmanDecoder *huffDecoder; + JBIG2MMRDecoder *mmrDecoder; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/JPEG2000Stream.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/JPEG2000Stream.cc new file mode 100644 index 00000000000..5ea6406e2b9 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/JPEG2000Stream.cc @@ -0,0 +1,196 @@ +//======================================================================== +// +// JPEG2000Stream.cc +// +// A JPX stream decoder using OpenJPEG +// +// Copyright 2008-2010, 2012 Albert Astals Cid <aacid@kde.org> +// Copyright 2011 Daniel Glöckner <daniel-gl@gmx.net> +// +// Licensed under GPLv2 or later +// +//======================================================================== + +#include "JPEG2000Stream.h" + +#include "config.h" + +JPXStream::JPXStream(Stream *strA) : FilterStream(strA) +{ + inited = gFalse; + image = NULL; + dinfo = NULL; + npixels = 0; + ncomps = 0; +} + +JPXStream::~JPXStream() { + delete str; + close(); +} + +void JPXStream::reset() { + counter = 0; + ccounter = 0; +} + +void JPXStream::close() { + if (image != NULL) { + opj_image_destroy(image); + image = NULL; + npixels = 0; + } + if (dinfo != NULL) { + opj_destroy_decompress(dinfo); + dinfo = NULL; + } +} + +int JPXStream::getPos() { + return counter * ncomps + ccounter; +} + +int JPXStream::getChars(int nChars, Guchar *buffer) { + for (int i = 0; i < nChars; ++i) { + const int c = doGetChar(); + if (likely(c != EOF)) buffer[i] = c; + else return i; + } + return nChars; +} + +int JPXStream::getChar() { + return doGetChar(); +} + +#define BUFFER_INITIAL_SIZE 4096 + +void JPXStream::init() +{ + Object oLen; + if (getDict()) getDict()->lookup("Length", &oLen); + + int bufSize = BUFFER_INITIAL_SIZE; + if (oLen.isInt()) bufSize = oLen.getInt(); + oLen.free(); + + + int length = 0; + unsigned char *buf = str->toUnsignedChars(&length, bufSize); + init2(buf, length, CODEC_JP2); + free(buf); + + if (image) { + npixels = image->comps[0].w * image->comps[0].h; + ncomps = image->numcomps; + for (int component = 0; component < ncomps; component++) { + if (image->comps[component].data == NULL) { + close(); + break; + } + unsigned char *cdata = (unsigned char *)image->comps[component].data; + int adjust = 0; + if (image->comps[component].prec > 8) + adjust = image->comps[component].prec - 8; + int sgndcorr = 0; + if (image->comps[component].sgnd) + sgndcorr = 1 << (image->comps[0].prec - 1); + for (int i = 0; i < npixels; i++) { + int r = image->comps[component].data[i]; + r += sgndcorr; + if (adjust) { + r = (r >> adjust)+((r >> (adjust-1))%2); + if (unlikely(r > 255)) + r = 255; + } + *(cdata++) = r; + } + } + } else + npixels = 0; + + counter = 0; + ccounter = 0; + inited = gTrue; +} + +static void libopenjpeg_error_callback(const char *msg, void * /*client_data*/) { + error(-1, "%s", msg); +} + +static void libopenjpeg_warning_callback(const char *msg, void * /*client_data*/) { + error(-1, "%s", msg); +} + +void JPXStream::init2(unsigned char *buf, int bufLen, OPJ_CODEC_FORMAT format) +{ + opj_cio_t *cio = NULL; + + /* Use default decompression parameters */ + opj_dparameters_t parameters; + opj_set_default_decoder_parameters(¶meters); +#ifdef WITH_OPENJPEG_IGNORE_PCLR_CMAP_CDEF_FLAG + parameters.flags = OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG; +#endif + + /* Configure the event manager to receive errors and warnings */ + opj_event_mgr_t event_mgr; + memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); + event_mgr.error_handler = libopenjpeg_error_callback; + event_mgr.warning_handler = libopenjpeg_warning_callback; + + /* Get the decoder handle of the format */ + dinfo = opj_create_decompress(format); + if (dinfo == NULL) goto error; + + /* Catch events using our callbacks */ + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, NULL); + + /* Setup the decoder decoding parameters */ + opj_setup_decoder(dinfo, ¶meters); + + /* Open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, buf, bufLen); + if (cio == NULL) goto error; + + /* Decode the stream and fill the image structure */ + image = opj_decode(dinfo, cio); + + /* Close the byte stream */ + opj_cio_close(cio); + + if (image == NULL) goto error; + else return; + +error: + if (format == CODEC_JP2) { + error(-1, "Did no succeed opening JPX Stream as JP2, trying as J2K."); + init2(buf, bufLen, CODEC_J2K); + } else if (format == CODEC_J2K) { + error(-1, "Did no succeed opening JPX Stream as J2K, trying as JPT."); + init2(buf, bufLen, CODEC_JPT); + } else { + error(-1, "Did no succeed opening JPX Stream."); + } +} + +int JPXStream::lookChar() { + return doLookChar(); +} + +GooString *JPXStream::getPSFilter(int psLevel, char *indent) { + return NULL; +} + +GBool JPXStream::isBinary(GBool last) { + return str->isBinary(gTrue); +} + +void JPXStream::getImageParams(int *bitsPerComponent, StreamColorSpaceMode *csMode) { + if (inited == gFalse) init(); + + *bitsPerComponent = 8; + if (image && image->numcomps == 3) *csMode = streamCSDeviceRGB; + else *csMode = streamCSDeviceGray; +} + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/JPEG2000Stream.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/JPEG2000Stream.h new file mode 100644 index 00000000000..bb4085a63f7 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/JPEG2000Stream.h @@ -0,0 +1,72 @@ +//======================================================================== +// +// JPEG2000Stream.h +// +// A JPX stream decoder using OpenJPEG +// +// Copyright 2008, 2010 Albert Astals Cid <aacid@kde.org> +// Copyright 2011 Daniel Glöckner <daniel-gl@gmx.net> +// +// Licensed under GPLv2 or later +// +//======================================================================== + + +#ifndef JPEG2000STREAM_H +#define JPEG2000STREAM_H + +#include <openjpeg.h> + +#include "goo/gtypes.h" +#include "Object.h" +#include "Stream.h" + +class JPXStream: public FilterStream { +public: + + JPXStream(Stream *strA); + virtual ~JPXStream(); + virtual StreamKind getKind() { return strJPX; } + virtual void reset(); + virtual void close(); + virtual int getPos(); + virtual int getChar(); + virtual int lookChar(); + virtual GooString *getPSFilter(int psLevel, char *indent); + virtual GBool isBinary(GBool last = gTrue); + virtual void getImageParams(int *bitsPerComponent, StreamColorSpaceMode *csMode); + +private: + void init(); + void init2(unsigned char *buf, int bufLen, OPJ_CODEC_FORMAT format); + + virtual GBool hasGetChars() { return true; } + virtual int getChars(int nChars, Guchar *buffer); + + inline int doGetChar() { + int result = doLookChar(); + if (++ccounter == ncomps) { + ccounter = 0; + ++counter; + } + return result; + } + + inline int doLookChar() { + if (unlikely(inited == gFalse)) init(); + + if (unlikely(counter >= npixels)) return EOF; + + return ((unsigned char *)image->comps[ccounter].data)[counter]; + } + + opj_image_t *image; + opj_dinfo_t *dinfo; + int counter; + int ccounter; + int npixels; + int ncomps; + GBool inited; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/JPXStream.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/JPXStream.cc new file mode 100644 index 00000000000..3b8c05d27b0 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/JPXStream.cc @@ -0,0 +1,3158 @@ +//======================================================================== +// +// JPXStream.cc +// +// Copyright 2002-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> +#include <limits.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include "goo/gmem.h" +#include "Error.h" +#include "JArithmeticDecoder.h" +#include "JPXStream.h" + +//~ to do: +// - precincts +// - ROI +// - progression order changes +// - packed packet headers +// - support for palettes, channel maps, etc. +// - make sure all needed JP2/JPX subboxes are parsed (readBoxes) +// - can we assume that QCC segments must come after the QCD segment? +// - skip EPH markers (readTilePartData) +// - handle tilePartToEOC in readTilePartData +// - deal with multiple codeword segments (readTilePartData, +// readCodeBlockData) +// - progression orders 2, 3, and 4 +// - in coefficient decoding (readCodeBlockData): +// - termination pattern: terminate after every coding pass +// - error resilience segmentation symbol +// - selective arithmetic coding bypass +// - vertically causal context formation +// - coeffs longer than 31 bits (should just ignore the extra bits?) +// - handle boxes larger than 2^32 bytes +// - the fixed-point arithmetic won't handle 16-bit pixels + +//------------------------------------------------------------------------ + +// number of contexts for the arithmetic decoder +#define jpxNContexts 19 + +#define jpxContextSigProp 0 // 0 - 8: significance prop and cleanup +#define jpxContextSign 9 // 9 - 13: sign +#define jpxContextMagRef 14 // 14 -16: magnitude refinement +#define jpxContextRunLength 17 // cleanup: run length +#define jpxContextUniform 18 // cleanup: first signif coeff + +//------------------------------------------------------------------------ + +#define jpxPassSigProp 0 +#define jpxPassMagRef 1 +#define jpxPassCleanup 2 + +//------------------------------------------------------------------------ + +// arithmetic decoder context for the significance propagation and +// cleanup passes: +// [horiz][vert][diag][subband] +// where subband = 0 for HL +// = 1 for LH and LL +// = 2 for HH +static const Guint sigPropContext[3][3][5][3] = { + {{{ 0, 0, 0 }, // horiz=0, vert=0, diag=0 + { 1, 1, 3 }, // horiz=0, vert=0, diag=1 + { 2, 2, 6 }, // horiz=0, vert=0, diag=2 + { 2, 2, 8 }, // horiz=0, vert=0, diag=3 + { 2, 2, 8 }}, // horiz=0, vert=0, diag=4 + {{ 5, 3, 1 }, // horiz=0, vert=1, diag=0 + { 6, 3, 4 }, // horiz=0, vert=1, diag=1 + { 6, 3, 7 }, // horiz=0, vert=1, diag=2 + { 6, 3, 8 }, // horiz=0, vert=1, diag=3 + { 6, 3, 8 }}, // horiz=0, vert=1, diag=4 + {{ 8, 4, 2 }, // horiz=0, vert=2, diag=0 + { 8, 4, 5 }, // horiz=0, vert=2, diag=1 + { 8, 4, 7 }, // horiz=0, vert=2, diag=2 + { 8, 4, 8 }, // horiz=0, vert=2, diag=3 + { 8, 4, 8 }}}, // horiz=0, vert=2, diag=4 + {{{ 3, 5, 1 }, // horiz=1, vert=0, diag=0 + { 3, 6, 4 }, // horiz=1, vert=0, diag=1 + { 3, 6, 7 }, // horiz=1, vert=0, diag=2 + { 3, 6, 8 }, // horiz=1, vert=0, diag=3 + { 3, 6, 8 }}, // horiz=1, vert=0, diag=4 + {{ 7, 7, 2 }, // horiz=1, vert=1, diag=0 + { 7, 7, 5 }, // horiz=1, vert=1, diag=1 + { 7, 7, 7 }, // horiz=1, vert=1, diag=2 + { 7, 7, 8 }, // horiz=1, vert=1, diag=3 + { 7, 7, 8 }}, // horiz=1, vert=1, diag=4 + {{ 8, 7, 2 }, // horiz=1, vert=2, diag=0 + { 8, 7, 5 }, // horiz=1, vert=2, diag=1 + { 8, 7, 7 }, // horiz=1, vert=2, diag=2 + { 8, 7, 8 }, // horiz=1, vert=2, diag=3 + { 8, 7, 8 }}}, // horiz=1, vert=2, diag=4 + {{{ 4, 8, 2 }, // horiz=2, vert=0, diag=0 + { 4, 8, 5 }, // horiz=2, vert=0, diag=1 + { 4, 8, 7 }, // horiz=2, vert=0, diag=2 + { 4, 8, 8 }, // horiz=2, vert=0, diag=3 + { 4, 8, 8 }}, // horiz=2, vert=0, diag=4 + {{ 7, 8, 2 }, // horiz=2, vert=1, diag=0 + { 7, 8, 5 }, // horiz=2, vert=1, diag=1 + { 7, 8, 7 }, // horiz=2, vert=1, diag=2 + { 7, 8, 8 }, // horiz=2, vert=1, diag=3 + { 7, 8, 8 }}, // horiz=2, vert=1, diag=4 + {{ 8, 8, 2 }, // horiz=2, vert=2, diag=0 + { 8, 8, 5 }, // horiz=2, vert=2, diag=1 + { 8, 8, 7 }, // horiz=2, vert=2, diag=2 + { 8, 8, 8 }, // horiz=2, vert=2, diag=3 + { 8, 8, 8 }}} // horiz=2, vert=2, diag=4 +}; + +// arithmetic decoder context and xor bit for the sign bit in the +// significance propagation pass: +// [horiz][vert][k] +// where horiz/vert are offset by 2 (i.e., range is -2 .. 2) +// and k = 0 for the context +// = 1 for the xor bit +static const Guint signContext[5][5][2] = { + {{ 13, 1 }, // horiz=-2, vert=-2 + { 13, 1 }, // horiz=-2, vert=-1 + { 12, 1 }, // horiz=-2, vert= 0 + { 11, 1 }, // horiz=-2, vert=+1 + { 11, 1 }}, // horiz=-2, vert=+2 + {{ 13, 1 }, // horiz=-1, vert=-2 + { 13, 1 }, // horiz=-1, vert=-1 + { 12, 1 }, // horiz=-1, vert= 0 + { 11, 1 }, // horiz=-1, vert=+1 + { 11, 1 }}, // horiz=-1, vert=+2 + {{ 10, 1 }, // horiz= 0, vert=-2 + { 10, 1 }, // horiz= 0, vert=-1 + { 9, 0 }, // horiz= 0, vert= 0 + { 10, 0 }, // horiz= 0, vert=+1 + { 10, 0 }}, // horiz= 0, vert=+2 + {{ 11, 0 }, // horiz=+1, vert=-2 + { 11, 0 }, // horiz=+1, vert=-1 + { 12, 0 }, // horiz=+1, vert= 0 + { 13, 0 }, // horiz=+1, vert=+1 + { 13, 0 }}, // horiz=+1, vert=+2 + {{ 11, 0 }, // horiz=+2, vert=-2 + { 11, 0 }, // horiz=+2, vert=-1 + { 12, 0 }, // horiz=+2, vert= 0 + { 13, 0 }, // horiz=+2, vert=+1 + { 13, 0 }}, // horiz=+2, vert=+2 +}; + +//------------------------------------------------------------------------ + +// constants used in the IDWT +#define idwtAlpha -1.586134342059924 +#define idwtBeta -0.052980118572961 +#define idwtGamma 0.882911075530934 +#define idwtDelta 0.443506852043971 +#define idwtKappa 1.230174104914001 +#define idwtIKappa (1.0 / idwtKappa) + +// number of bits to the right of the decimal point for the fixed +// point arithmetic used in the IDWT +#define fracBits 16 + +//------------------------------------------------------------------------ + +// floor(x / y) +#define jpxFloorDiv(x, y) ((x) / (y)) + +// floor(x / 2^y) +#define jpxFloorDivPow2(x, y) ((x) >> (y)) + +// ceil(x / y) +#define jpxCeilDiv(x, y) (((x) + (y) - 1) / (y)) + +// ceil(x / 2^y) +#define jpxCeilDivPow2(x, y) (((x) + (1 << (y)) - 1) >> (y)) + +//------------------------------------------------------------------------ + +#if 1 //----- disable coverage tracking + +#define cover(idx) + +#else //----- enable coverage tracking + +class JPXCover { +public: + + JPXCover(int sizeA); + ~JPXCover(); + void incr(int idx); + +private: + + int size, used; + int *data; +}; + +JPXCover::JPXCover(int sizeA) { + size = sizeA; + used = -1; + data = (int *)gmallocn(size, sizeof(int)); + memset(data, 0, size * sizeof(int)); +} + +JPXCover::~JPXCover() { + int i; + + printf("JPX coverage:\n"); + for (i = 0; i <= used; ++i) { + printf(" %4d: %8d\n", i, data[i]); + } + gfree(data); +} + +void JPXCover::incr(int idx) { + if (idx < size) { + ++data[idx]; + if (idx > used) { + used = idx; + } + } +} + +JPXCover jpxCover(150); + +#define cover(idx) jpxCover.incr(idx) + +#endif //----- coverage tracking + +//------------------------------------------------------------------------ + +JPXStream::JPXStream(Stream *strA): + FilterStream(strA) +{ + nComps = 0; + bpc = NULL; + width = height = 0; + haveCS = gFalse; + havePalette = gFalse; + haveCompMap = gFalse; + haveChannelDefn = gFalse; + + img.tiles = NULL; + bitBuf = 0; + bitBufLen = 0; + bitBufSkip = gFalse; + byteCount = 0; +} + +JPXStream::~JPXStream() { + close(); + delete str; +} + +void JPXStream::reset() { + str->reset(); + if (readBoxes()) { + curY = img.yOffset; + } else { + // readBoxes reported an error, so we go immediately to EOF + curY = img.ySize; + } + curX = img.xOffset; + curComp = 0; + readBufLen = 0; +} + +void JPXStream::close() { + JPXTile *tile; + JPXTileComp *tileComp; + JPXResLevel *resLevel; + JPXPrecinct *precinct; + JPXSubband *subband; + JPXCodeBlock *cb; + Guint comp, i, k, r, pre, sb; + + gfree(bpc); + bpc = NULL; + if (havePalette) { + gfree(palette.bpc); + gfree(palette.c); + havePalette = gFalse; + } + if (haveCompMap) { + gfree(compMap.comp); + gfree(compMap.type); + gfree(compMap.pComp); + haveCompMap = gFalse; + } + if (haveChannelDefn) { + gfree(channelDefn.idx); + gfree(channelDefn.type); + gfree(channelDefn.assoc); + haveChannelDefn = gFalse; + } + + if (img.tiles) { + for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { + tile = &img.tiles[i]; + if (tile->tileComps) { + for (comp = 0; comp < img.nComps; ++comp) { + tileComp = &tile->tileComps[comp]; + gfree(tileComp->quantSteps); + gfree(tileComp->data); + gfree(tileComp->buf); + if (tileComp->resLevels) { + for (r = 0; r <= tileComp->nDecompLevels; ++r) { + resLevel = &tileComp->resLevels[r]; + if (resLevel->precincts) { + for (pre = 0; pre < 1; ++pre) { + precinct = &resLevel->precincts[pre]; + if (precinct->subbands) { + for (sb = 0; sb < (Guint)(r == 0 ? 1 : 3); ++sb) { + subband = &precinct->subbands[sb]; + gfree(subband->inclusion); + gfree(subband->zeroBitPlane); + if (subband->cbs) { + for (k = 0; k < subband->nXCBs * subband->nYCBs; ++k) { + cb = &subband->cbs[k]; + gfree(cb->coeffs); + if (cb->arithDecoder) { + delete cb->arithDecoder; + } + if (cb->stats) { + delete cb->stats; + } + } + gfree(subband->cbs); + } + } + gfree(precinct->subbands); + } + } + gfree(img.tiles[i].tileComps[comp].resLevels[r].precincts); + } + } + gfree(img.tiles[i].tileComps[comp].resLevels); + } + } + gfree(img.tiles[i].tileComps); + } + } + gfree(img.tiles); + img.tiles = NULL; + } + FilterStream::close(); +} + +int JPXStream::getChar() { + int c; + + if (readBufLen < 8) { + fillReadBuf(); + } + if (readBufLen == 8) { + c = readBuf & 0xff; + readBufLen = 0; + } else if (readBufLen > 8) { + c = (readBuf >> (readBufLen - 8)) & 0xff; + readBufLen -= 8; + } else if (readBufLen == 0) { + c = EOF; + } else { + c = (readBuf << (8 - readBufLen)) & 0xff; + readBufLen = 0; + } + return c; +} + +int JPXStream::lookChar() { + int c; + + if (readBufLen < 8) { + fillReadBuf(); + } + if (readBufLen == 8) { + c = readBuf & 0xff; + } else if (readBufLen > 8) { + c = (readBuf >> (readBufLen - 8)) & 0xff; + } else if (readBufLen == 0) { + c = EOF; + } else { + c = (readBuf << (8 - readBufLen)) & 0xff; + } + return c; +} + +void JPXStream::fillReadBuf() { + JPXTileComp *tileComp; + Guint tileIdx, tx, ty; + int pix, pixBits; + + do { + if (curY >= img.ySize) { + return; + } + tileIdx = ((curY - img.yTileOffset) / img.yTileSize) * img.nXTiles + + (curX - img.xTileOffset) / img.xTileSize; +#if 1 //~ ignore the palette, assume the PDF ColorSpace object is valid + tileComp = &img.tiles[tileIdx].tileComps[curComp]; +#else + tileComp = &img.tiles[tileIdx].tileComps[havePalette ? 0 : curComp]; +#endif + tx = jpxCeilDiv((curX - img.xTileOffset) % img.xTileSize, tileComp->hSep); + ty = jpxCeilDiv((curY - img.yTileOffset) % img.yTileSize, tileComp->vSep); + pix = (int)tileComp->data[ty * (tileComp->x1 - tileComp->x0) + tx]; + pixBits = tileComp->prec; +#if 1 //~ ignore the palette, assume the PDF ColorSpace object is valid + if (++curComp == img.nComps) { +#else + if (havePalette) { + if (pix >= 0 && pix < palette.nEntries) { + pix = palette.c[pix * palette.nComps + curComp]; + } else { + pix = + pixBits = palette.bpc[curComp]; + } + if (++curComp == (Guint)(havePalette ? palette.nComps : img.nComps)) { +#endif + curComp = 0; + if (++curX == img.xSize) { + curX = img.xOffset; + ++curY; + } + } + if (pixBits == 8) { + readBuf = (readBuf << 8) | (pix & 0xff); + } else { + readBuf = (readBuf << pixBits) | (pix & ((1 << pixBits) - 1)); + } + readBufLen += pixBits; + } while (readBufLen < 8); +} + +GooString *JPXStream::getPSFilter(int psLevel, char *indent) { + return NULL; +} + +GBool JPXStream::isBinary(GBool last) { + return str->isBinary(gTrue); +} + +void JPXStream::getImageParams(int *bitsPerComponent, + StreamColorSpaceMode *csMode) { + Guint boxType, boxLen, dataLen, csEnum; + Guint bpc1, dummy, i; + int csMeth, csPrec, csPrec1, dummy2; + StreamColorSpaceMode csMode1; + GBool haveBPC, haveCSMode; + + csPrec = 0; // make gcc happy + haveBPC = haveCSMode = gFalse; + str->reset(); + if (str->lookChar() == 0xff) { + getImageParams2(bitsPerComponent, csMode); + } else { + while (readBoxHdr(&boxType, &boxLen, &dataLen)) { + if (boxType == 0x6a703268) { // JP2 header + cover(0); + // skip the superbox + } else if (boxType == 0x69686472) { // image header + cover(1); + if (readULong(&dummy) && + readULong(&dummy) && + readUWord(&dummy) && + readUByte(&bpc1) && + readUByte(&dummy) && + readUByte(&dummy) && + readUByte(&dummy)) { + *bitsPerComponent = bpc1 + 1; + haveBPC = gTrue; + } + } else if (boxType == 0x636F6C72) { // color specification + cover(2); + if (readByte(&csMeth) && + readByte(&csPrec1) && + readByte(&dummy2)) { + if (csMeth == 1) { + if (readULong(&csEnum)) { + csMode1 = streamCSNone; + if (csEnum == jpxCSBiLevel || + csEnum == jpxCSGrayscale) { + csMode1 = streamCSDeviceGray; + } else if (csEnum == jpxCSCMYK) { + csMode1 = streamCSDeviceCMYK; + } else if (csEnum == jpxCSsRGB || + csEnum == jpxCSCISesRGB || + csEnum == jpxCSROMMRGB) { + csMode1 = streamCSDeviceRGB; + } + if (csMode1 != streamCSNone && + (!haveCSMode || csPrec1 > csPrec)) { + *csMode = csMode1; + csPrec = csPrec1; + haveCSMode = gTrue; + } + for (i = 0; i < dataLen - 7; ++i) { + str->getChar(); + } + } + } else { + for (i = 0; i < dataLen - 3; ++i) { + str->getChar(); + } + } + } + } else if (boxType == 0x6A703263) { // codestream + cover(3); + if (!(haveBPC && haveCSMode)) { + getImageParams2(bitsPerComponent, csMode); + } + break; + } else { + cover(4); + for (i = 0; i < dataLen; ++i) { + str->getChar(); + } + } + } + } + str->close(); +} + +// Get image parameters from the codestream. +void JPXStream::getImageParams2(int *bitsPerComponent, + StreamColorSpaceMode *csMode) { + int segType; + Guint segLen, nComps1, bpc1, dummy, i; + + while (readMarkerHdr(&segType, &segLen)) { + if (segType == 0x51) { // SIZ - image and tile size + cover(5); + if (readUWord(&dummy) && + readULong(&dummy) && + readULong(&dummy) && + readULong(&dummy) && + readULong(&dummy) && + readULong(&dummy) && + readULong(&dummy) && + readULong(&dummy) && + readULong(&dummy) && + readUWord(&nComps1) && + readUByte(&bpc1)) { + *bitsPerComponent = (bpc1 & 0x7f) + 1; + // if there's no color space info, take a guess + if (nComps1 == 1) { + *csMode = streamCSDeviceGray; + } else if (nComps1 == 3) { + *csMode = streamCSDeviceRGB; + } else if (nComps1 == 4) { + *csMode = streamCSDeviceCMYK; + } + } + break; + } else { + cover(6); + if (segLen > 2) { + for (i = 0; i < segLen - 2; ++i) { + str->getChar(); + } + } + } + } +} + +GBool JPXStream::readBoxes() { + Guint boxType, boxLen, dataLen; + Guint bpc1, compression, unknownColorspace, ipr; + Guint i, j; + + haveImgHdr = gFalse; + + // check for a naked JPEG 2000 codestream (without the JP2/JPX + // wrapper) -- this appears to be a violation of the PDF spec, but + // Acrobat allows it + if (str->lookChar() == 0xff) { + cover(7); + error(getPos(), "Naked JPEG 2000 codestream, missing JP2/JPX wrapper"); + readCodestream(0); + nComps = img.nComps; + bpc = (Guint *)gmallocn(nComps, sizeof(Guint)); + for (i = 0; i < nComps; ++i) { + bpc[i] = img.tiles[0].tileComps[i].prec; + } + width = img.xSize - img.xOffset; + height = img.ySize - img.yOffset; + return gTrue; + } + + while (readBoxHdr(&boxType, &boxLen, &dataLen)) { + switch (boxType) { + case 0x6a703268: // JP2 header + // this is a grouping box ('superbox') which has no real + // contents and doesn't appear to be used consistently, i.e., + // some things which should be subboxes of the JP2 header box + // show up outside of it - so we simply ignore the JP2 header + // box + cover(8); + break; + case 0x69686472: // image header + cover(9); + if (!readULong(&height) || + !readULong(&width) || + !readUWord(&nComps) || + !readUByte(&bpc1) || + !readUByte(&compression) || + !readUByte(&unknownColorspace) || + !readUByte(&ipr)) { + error(getPos(), "Unexpected EOF in JPX stream"); + return gFalse; + } + if (compression != 7) { + error(getPos(), "Unknown compression type in JPX stream"); + return gFalse; + } + bpc = (Guint *)gmallocn(nComps, sizeof(Guint)); + for (i = 0; i < nComps; ++i) { + bpc[i] = bpc1; + } + haveImgHdr = gTrue; + break; + case 0x62706363: // bits per component + cover(10); + if (!haveImgHdr) { + error(getPos(), "Found bits per component box before image header box in JPX stream"); + return gFalse; + } + if (dataLen != nComps) { + error(getPos(), "Invalid bits per component box in JPX stream"); + return gFalse; + } + for (i = 0; i < nComps; ++i) { + if (!readUByte(&bpc[i])) { + error(getPos(), "Unexpected EOF in JPX stream"); + return gFalse; + } + } + break; + case 0x636F6C72: // color specification + cover(11); + if (!readColorSpecBox(dataLen)) { + return gFalse; + } + break; + case 0x70636c72: // palette + cover(12); + if (!readUWord(&palette.nEntries) || + !readUByte(&palette.nComps)) { + error(getPos(), "Unexpected EOF in JPX stream"); + return gFalse; + } + palette.bpc = (Guint *)gmallocn(palette.nComps, sizeof(Guint)); + palette.c = + (int *)gmallocn(palette.nEntries * palette.nComps, sizeof(int)); + for (i = 0; i < palette.nComps; ++i) { + if (!readUByte(&palette.bpc[i])) { + error(getPos(), "Unexpected EOF in JPX stream"); + return gFalse; + } + ++palette.bpc[i]; + } + for (i = 0; i < palette.nEntries; ++i) { + for (j = 0; j < palette.nComps; ++j) { + if (!readNBytes(((palette.bpc[j] & 0x7f) + 7) >> 3, + (palette.bpc[j] & 0x80) ? gTrue : gFalse, + &palette.c[i * palette.nComps + j])) { + error(getPos(), "Unexpected EOF in JPX stream"); + return gFalse; + } + } + } + havePalette = gTrue; + break; + case 0x636d6170: // component mapping + cover(13); + compMap.nChannels = dataLen / 4; + compMap.comp = (Guint *)gmallocn(compMap.nChannels, sizeof(Guint)); + compMap.type = (Guint *)gmallocn(compMap.nChannels, sizeof(Guint)); + compMap.pComp = (Guint *)gmallocn(compMap.nChannels, sizeof(Guint)); + for (i = 0; i < compMap.nChannels; ++i) { + if (!readUWord(&compMap.comp[i]) || + !readUByte(&compMap.type[i]) || + !readUByte(&compMap.pComp[i])) { + error(getPos(), "Unexpected EOF in JPX stream"); + return gFalse; + } + } + haveCompMap = gTrue; + break; + case 0x63646566: // channel definition + cover(14); + if (!readUWord(&channelDefn.nChannels)) { + error(getPos(), "Unexpected EOF in JPX stream"); + return gFalse; + } + channelDefn.idx = + (Guint *)gmallocn(channelDefn.nChannels, sizeof(Guint)); + channelDefn.type = + (Guint *)gmallocn(channelDefn.nChannels, sizeof(Guint)); + channelDefn.assoc = + (Guint *)gmallocn(channelDefn.nChannels, sizeof(Guint)); + for (i = 0; i < channelDefn.nChannels; ++i) { + if (!readUWord(&channelDefn.idx[i]) || + !readUWord(&channelDefn.type[i]) || + !readUWord(&channelDefn.assoc[i])) { + error(getPos(), "Unexpected EOF in JPX stream"); + return gFalse; + } + } + haveChannelDefn = gTrue; + break; + case 0x6A703263: // contiguous codestream + cover(15); + if (!bpc) { + error(getPos(), "JPX stream is missing the image header box"); + } + if (!haveCS) { + error(getPos(), "JPX stream has no supported color spec"); + } + if (!readCodestream(dataLen)) { + return gFalse; + } + break; + default: + cover(16); + for (i = 0; i < dataLen; ++i) { + if (str->getChar() == EOF) { + error(getPos(), "Unexpected EOF in JPX stream"); + return gFalse; + } + } + break; + } + } + return gTrue; +} + +GBool JPXStream::readColorSpecBox(Guint dataLen) { + JPXColorSpec newCS; + Guint csApprox, csEnum; + Guint i; + GBool ok; + + ok = gFalse; + if (!readUByte(&newCS.meth) || + !readByte(&newCS.prec) || + !readUByte(&csApprox)) { + goto err; + } + switch (newCS.meth) { + case 1: // enumerated colorspace + cover(17); + if (!readULong(&csEnum)) { + goto err; + } + newCS.enumerated.type = (JPXColorSpaceType)csEnum; + switch (newCS.enumerated.type) { + case jpxCSBiLevel: + ok = gTrue; + break; + case jpxCSYCbCr1: + ok = gTrue; + break; + case jpxCSYCbCr2: + ok = gTrue; + break; + case jpxCSYCBCr3: + ok = gTrue; + break; + case jpxCSPhotoYCC: + ok = gTrue; + break; + case jpxCSCMY: + ok = gTrue; + break; + case jpxCSCMYK: + ok = gTrue; + break; + case jpxCSYCCK: + ok = gTrue; + break; + case jpxCSCIELab: + if (dataLen == 7 + 7*4) { + if (!readULong(&newCS.enumerated.cieLab.rl) || + !readULong(&newCS.enumerated.cieLab.ol) || + !readULong(&newCS.enumerated.cieLab.ra) || + !readULong(&newCS.enumerated.cieLab.oa) || + !readULong(&newCS.enumerated.cieLab.rb) || + !readULong(&newCS.enumerated.cieLab.ob) || + !readULong(&newCS.enumerated.cieLab.il)) { + goto err; + } + } else if (dataLen == 7) { + //~ this assumes the 8-bit case + cover(92); + newCS.enumerated.cieLab.rl = 100; + newCS.enumerated.cieLab.ol = 0; + newCS.enumerated.cieLab.ra = 255; + newCS.enumerated.cieLab.oa = 128; + newCS.enumerated.cieLab.rb = 255; + newCS.enumerated.cieLab.ob = 96; + newCS.enumerated.cieLab.il = 0x00443530; + } else { + goto err; + } + ok = gTrue; + break; + case jpxCSsRGB: + ok = gTrue; + break; + case jpxCSGrayscale: + ok = gTrue; + break; + case jpxCSBiLevel2: + ok = gTrue; + break; + case jpxCSCIEJab: + // not allowed in PDF + goto err; + case jpxCSCISesRGB: + ok = gTrue; + break; + case jpxCSROMMRGB: + ok = gTrue; + break; + case jpxCSsRGBYCbCr: + ok = gTrue; + break; + case jpxCSYPbPr1125: + ok = gTrue; + break; + case jpxCSYPbPr1250: + ok = gTrue; + break; + default: + goto err; + } + break; + case 2: // restricted ICC profile + case 3: // any ICC profile (JPX) + case 4: // vendor color (JPX) + cover(18); + for (i = 0; i < dataLen - 3; ++i) { + if (str->getChar() == EOF) { + goto err; + } + } + break; + } + + if (ok && (!haveCS || newCS.prec > cs.prec)) { + cs = newCS; + haveCS = gTrue; + } + + return gTrue; + + err: + error(getPos(), "Error in JPX color spec"); + return gFalse; +} + +GBool JPXStream::readCodestream(Guint len) { + JPXTile *tile; + JPXTileComp *tileComp; + int segType; + GBool haveSIZ, haveCOD, haveQCD, haveSOT; + Guint precinctSize, style; + Guint segLen, capabilities, comp, i, j, r; + + //----- main header + haveSIZ = haveCOD = haveQCD = haveSOT = gFalse; + do { + if (!readMarkerHdr(&segType, &segLen)) { + error(getPos(), "Error in JPX codestream"); + return gFalse; + } + switch (segType) { + case 0x4f: // SOC - start of codestream + // marker only + cover(19); + break; + case 0x51: // SIZ - image and tile size + cover(20); + if (!readUWord(&capabilities) || + !readULong(&img.xSize) || + !readULong(&img.ySize) || + !readULong(&img.xOffset) || + !readULong(&img.yOffset) || + !readULong(&img.xTileSize) || + !readULong(&img.yTileSize) || + !readULong(&img.xTileOffset) || + !readULong(&img.yTileOffset) || + !readUWord(&img.nComps)) { + error(getPos(), "Error in JPX SIZ marker segment"); + return gFalse; + } + if (haveImgHdr && img.nComps != nComps) { + error(getPos(), "Different number of components in JPX SIZ marker segment"); + return gFalse; + } + img.nXTiles = (img.xSize - img.xTileOffset + img.xTileSize - 1) + / img.xTileSize; + img.nYTiles = (img.ySize - img.yTileOffset + img.yTileSize - 1) + / img.yTileSize; + // check for overflow before allocating memory + if (img.nXTiles <= 0 || img.nYTiles <= 0 || + img.nXTiles >= INT_MAX / img.nYTiles) { + error(getPos(), "Bad tile count in JPX SIZ marker segment"); + return gFalse; + } + img.tiles = (JPXTile *)gmallocn(img.nXTiles * img.nYTiles, + sizeof(JPXTile)); + for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { + img.tiles[i].tileComps = (JPXTileComp *)gmallocn(img.nComps, + sizeof(JPXTileComp)); + for (comp = 0; comp < img.nComps; ++comp) { + img.tiles[i].tileComps[comp].quantSteps = NULL; + img.tiles[i].tileComps[comp].data = NULL; + img.tiles[i].tileComps[comp].buf = NULL; + img.tiles[i].tileComps[comp].resLevels = NULL; + } + } + for (comp = 0; comp < img.nComps; ++comp) { + if (!readUByte(&img.tiles[0].tileComps[comp].prec) || + !readUByte(&img.tiles[0].tileComps[comp].hSep) || + !readUByte(&img.tiles[0].tileComps[comp].vSep)) { + error(getPos(), "Error in JPX SIZ marker segment"); + return gFalse; + } + img.tiles[0].tileComps[comp].sgned = + (img.tiles[0].tileComps[comp].prec & 0x80) ? gTrue : gFalse; + img.tiles[0].tileComps[comp].prec = + (img.tiles[0].tileComps[comp].prec & 0x7f) + 1; + for (i = 1; i < img.nXTiles * img.nYTiles; ++i) { + img.tiles[i].tileComps[comp] = img.tiles[0].tileComps[comp]; + } + } + haveSIZ = gTrue; + break; + case 0x52: // COD - coding style default + cover(21); + if (!readUByte(&img.tiles[0].tileComps[0].style) || + !readUByte(&img.tiles[0].progOrder) || + !readUWord(&img.tiles[0].nLayers) || + !readUByte(&img.tiles[0].multiComp) || + !readUByte(&img.tiles[0].tileComps[0].nDecompLevels) || + !readUByte(&img.tiles[0].tileComps[0].codeBlockW) || + !readUByte(&img.tiles[0].tileComps[0].codeBlockH) || + !readUByte(&img.tiles[0].tileComps[0].codeBlockStyle) || + !readUByte(&img.tiles[0].tileComps[0].transform)) { + error(getPos(), "Error in JPX COD marker segment"); + return gFalse; + } + img.tiles[0].tileComps[0].codeBlockW += 2; + img.tiles[0].tileComps[0].codeBlockH += 2; + for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { + if (i != 0) { + img.tiles[i].progOrder = img.tiles[0].progOrder; + img.tiles[i].nLayers = img.tiles[0].nLayers; + img.tiles[i].multiComp = img.tiles[0].multiComp; + } + for (comp = 0; comp < img.nComps; ++comp) { + if (!(i == 0 && comp == 0)) { + img.tiles[i].tileComps[comp].style = + img.tiles[0].tileComps[0].style; + img.tiles[i].tileComps[comp].nDecompLevels = + img.tiles[0].tileComps[0].nDecompLevels; + img.tiles[i].tileComps[comp].codeBlockW = + img.tiles[0].tileComps[0].codeBlockW; + img.tiles[i].tileComps[comp].codeBlockH = + img.tiles[0].tileComps[0].codeBlockH; + img.tiles[i].tileComps[comp].codeBlockStyle = + img.tiles[0].tileComps[0].codeBlockStyle; + img.tiles[i].tileComps[comp].transform = + img.tiles[0].tileComps[0].transform; + } + img.tiles[i].tileComps[comp].resLevels = + (JPXResLevel *)gmallocn( + (img.tiles[i].tileComps[comp].nDecompLevels + 1), + sizeof(JPXResLevel)); + for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) { + img.tiles[i].tileComps[comp].resLevels[r].precincts = NULL; + } + } + } + for (r = 0; r <= img.tiles[0].tileComps[0].nDecompLevels; ++r) { + if (img.tiles[0].tileComps[0].style & 0x01) { + cover(91); + if (!readUByte(&precinctSize)) { + error(getPos(), "Error in JPX COD marker segment"); + return gFalse; + } + img.tiles[0].tileComps[0].resLevels[r].precinctWidth = + precinctSize & 0x0f; + img.tiles[0].tileComps[0].resLevels[r].precinctHeight = + (precinctSize >> 4) & 0x0f; + } else { + img.tiles[0].tileComps[0].resLevels[r].precinctWidth = 15; + img.tiles[0].tileComps[0].resLevels[r].precinctHeight = 15; + } + } + for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { + for (comp = 0; comp < img.nComps; ++comp) { + if (!(i == 0 && comp == 0)) { + for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) { + img.tiles[i].tileComps[comp].resLevels[r].precinctWidth = + img.tiles[0].tileComps[0].resLevels[r].precinctWidth; + img.tiles[i].tileComps[comp].resLevels[r].precinctHeight = + img.tiles[0].tileComps[0].resLevels[r].precinctHeight; + } + } + } + } + haveCOD = gTrue; + break; + case 0x53: // COC - coding style component + cover(22); + if (!haveCOD) { + error(getPos(), "JPX COC marker segment before COD segment"); + return gFalse; + } + if ((img.nComps > 256 && !readUWord(&comp)) || + (img.nComps <= 256 && !readUByte(&comp)) || + comp >= img.nComps || + !readUByte(&style) || + !readUByte(&img.tiles[0].tileComps[comp].nDecompLevels) || + !readUByte(&img.tiles[0].tileComps[comp].codeBlockW) || + !readUByte(&img.tiles[0].tileComps[comp].codeBlockH) || + !readUByte(&img.tiles[0].tileComps[comp].codeBlockStyle) || + !readUByte(&img.tiles[0].tileComps[comp].transform)) { + error(getPos(), "Error in JPX COC marker segment"); + return gFalse; + } + img.tiles[0].tileComps[comp].style = + (img.tiles[0].tileComps[comp].style & ~1) | (style & 1); + img.tiles[0].tileComps[comp].codeBlockW += 2; + img.tiles[0].tileComps[comp].codeBlockH += 2; + for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { + if (i != 0) { + img.tiles[i].tileComps[comp].style = + img.tiles[0].tileComps[comp].style; + img.tiles[i].tileComps[comp].nDecompLevels = + img.tiles[0].tileComps[comp].nDecompLevels; + img.tiles[i].tileComps[comp].codeBlockW = + img.tiles[0].tileComps[comp].codeBlockW; + img.tiles[i].tileComps[comp].codeBlockH = + img.tiles[0].tileComps[comp].codeBlockH; + img.tiles[i].tileComps[comp].codeBlockStyle = + img.tiles[0].tileComps[comp].codeBlockStyle; + img.tiles[i].tileComps[comp].transform = + img.tiles[0].tileComps[comp].transform; + } + img.tiles[i].tileComps[comp].resLevels = + (JPXResLevel *)greallocn( + img.tiles[i].tileComps[comp].resLevels, + (img.tiles[i].tileComps[comp].nDecompLevels + 1), + sizeof(JPXResLevel)); + for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) { + img.tiles[i].tileComps[comp].resLevels[r].precincts = NULL; + } + } + for (r = 0; r <= img.tiles[0].tileComps[comp].nDecompLevels; ++r) { + if (img.tiles[0].tileComps[comp].style & 0x01) { + if (!readUByte(&precinctSize)) { + error(getPos(), "Error in JPX COD marker segment"); + return gFalse; + } + img.tiles[0].tileComps[comp].resLevels[r].precinctWidth = + precinctSize & 0x0f; + img.tiles[0].tileComps[comp].resLevels[r].precinctHeight = + (precinctSize >> 4) & 0x0f; + } else { + img.tiles[0].tileComps[comp].resLevels[r].precinctWidth = 15; + img.tiles[0].tileComps[comp].resLevels[r].precinctHeight = 15; + } + } + for (i = 1; i < img.nXTiles * img.nYTiles; ++i) { + for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) { + img.tiles[i].tileComps[comp].resLevels[r].precinctWidth = + img.tiles[0].tileComps[comp].resLevels[r].precinctWidth; + img.tiles[i].tileComps[comp].resLevels[r].precinctHeight = + img.tiles[0].tileComps[comp].resLevels[r].precinctHeight; + } + } + break; + case 0x5c: // QCD - quantization default + cover(23); + if (!readUByte(&img.tiles[0].tileComps[0].quantStyle)) { + error(getPos(), "Error in JPX QCD marker segment"); + return gFalse; + } + if ((img.tiles[0].tileComps[0].quantStyle & 0x1f) == 0x00) { + img.tiles[0].tileComps[0].nQuantSteps = segLen - 3; + img.tiles[0].tileComps[0].quantSteps = + (Guint *)greallocn(img.tiles[0].tileComps[0].quantSteps, + img.tiles[0].tileComps[0].nQuantSteps, + sizeof(Guint)); + for (i = 0; i < img.tiles[0].tileComps[0].nQuantSteps; ++i) { + if (!readUByte(&img.tiles[0].tileComps[0].quantSteps[i])) { + error(getPos(), "Error in JPX QCD marker segment"); + return gFalse; + } + } + } else if ((img.tiles[0].tileComps[0].quantStyle & 0x1f) == 0x01) { + img.tiles[0].tileComps[0].nQuantSteps = 1; + img.tiles[0].tileComps[0].quantSteps = + (Guint *)greallocn(img.tiles[0].tileComps[0].quantSteps, + img.tiles[0].tileComps[0].nQuantSteps, + sizeof(Guint)); + if (!readUWord(&img.tiles[0].tileComps[0].quantSteps[0])) { + error(getPos(), "Error in JPX QCD marker segment"); + return gFalse; + } + } else if ((img.tiles[0].tileComps[0].quantStyle & 0x1f) == 0x02) { + img.tiles[0].tileComps[0].nQuantSteps = (segLen - 3) / 2; + img.tiles[0].tileComps[0].quantSteps = + (Guint *)greallocn(img.tiles[0].tileComps[0].quantSteps, + img.tiles[0].tileComps[0].nQuantSteps, + sizeof(Guint)); + for (i = 0; i < img.tiles[0].tileComps[0].nQuantSteps; ++i) { + if (!readUWord(&img.tiles[0].tileComps[0].quantSteps[i])) { + error(getPos(), "Error in JPX QCD marker segment"); + return gFalse; + } + } + } else { + error(getPos(), "Error in JPX QCD marker segment"); + return gFalse; + } + for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { + for (comp = 0; comp < img.nComps; ++comp) { + if (!(i == 0 && comp == 0)) { + img.tiles[i].tileComps[comp].quantStyle = + img.tiles[0].tileComps[0].quantStyle; + img.tiles[i].tileComps[comp].nQuantSteps = + img.tiles[0].tileComps[0].nQuantSteps; + img.tiles[i].tileComps[comp].quantSteps = + (Guint *)greallocn(img.tiles[i].tileComps[comp].quantSteps, + img.tiles[0].tileComps[0].nQuantSteps, + sizeof(Guint)); + for (j = 0; j < img.tiles[0].tileComps[0].nQuantSteps; ++j) { + img.tiles[i].tileComps[comp].quantSteps[j] = + img.tiles[0].tileComps[0].quantSteps[j]; + } + } + } + } + haveQCD = gTrue; + break; + case 0x5d: // QCC - quantization component + cover(24); + if (!haveQCD) { + error(getPos(), "JPX QCC marker segment before QCD segment"); + return gFalse; + } + if ((img.nComps > 256 && !readUWord(&comp)) || + (img.nComps <= 256 && !readUByte(&comp)) || + comp >= img.nComps || + !readUByte(&img.tiles[0].tileComps[comp].quantStyle)) { + error(getPos(), "Error in JPX QCC marker segment"); + return gFalse; + } + if ((img.tiles[0].tileComps[comp].quantStyle & 0x1f) == 0x00) { + img.tiles[0].tileComps[comp].nQuantSteps = + segLen - (img.nComps > 256 ? 5 : 4); + img.tiles[0].tileComps[comp].quantSteps = + (Guint *)greallocn(img.tiles[0].tileComps[comp].quantSteps, + img.tiles[0].tileComps[comp].nQuantSteps, + sizeof(Guint)); + for (i = 0; i < img.tiles[0].tileComps[comp].nQuantSteps; ++i) { + if (!readUByte(&img.tiles[0].tileComps[comp].quantSteps[i])) { + error(getPos(), "Error in JPX QCC marker segment"); + return gFalse; + } + } + } else if ((img.tiles[0].tileComps[comp].quantStyle & 0x1f) == 0x01) { + img.tiles[0].tileComps[comp].nQuantSteps = 1; + img.tiles[0].tileComps[comp].quantSteps = + (Guint *)greallocn(img.tiles[0].tileComps[comp].quantSteps, + img.tiles[0].tileComps[comp].nQuantSteps, + sizeof(Guint)); + if (!readUWord(&img.tiles[0].tileComps[comp].quantSteps[0])) { + error(getPos(), "Error in JPX QCC marker segment"); + return gFalse; + } + } else if ((img.tiles[0].tileComps[comp].quantStyle & 0x1f) == 0x02) { + img.tiles[0].tileComps[comp].nQuantSteps = + (segLen - (img.nComps > 256 ? 5 : 4)) / 2; + img.tiles[0].tileComps[comp].quantSteps = + (Guint *)greallocn(img.tiles[0].tileComps[comp].quantSteps, + img.tiles[0].tileComps[comp].nQuantSteps, + sizeof(Guint)); + for (i = 0; i < img.tiles[0].tileComps[comp].nQuantSteps; ++i) { + if (!readUWord(&img.tiles[0].tileComps[comp].quantSteps[i])) { + error(getPos(), "Error in JPX QCD marker segment"); + return gFalse; + } + } + } else { + error(getPos(), "Error in JPX QCC marker segment"); + return gFalse; + } + for (i = 1; i < img.nXTiles * img.nYTiles; ++i) { + img.tiles[i].tileComps[comp].quantStyle = + img.tiles[0].tileComps[comp].quantStyle; + img.tiles[i].tileComps[comp].nQuantSteps = + img.tiles[0].tileComps[comp].nQuantSteps; + img.tiles[i].tileComps[comp].quantSteps = + (Guint *)greallocn(img.tiles[i].tileComps[comp].quantSteps, + img.tiles[0].tileComps[comp].nQuantSteps, + sizeof(Guint)); + for (j = 0; j < img.tiles[0].tileComps[comp].nQuantSteps; ++j) { + img.tiles[i].tileComps[comp].quantSteps[j] = + img.tiles[0].tileComps[comp].quantSteps[j]; + } + } + break; + case 0x5e: // RGN - region of interest + cover(25); +#if 1 //~ ROI is unimplemented + fprintf(stderr, "RGN\n"); + for (i = 0; i < segLen - 2; ++i) { + if (str->getChar() == EOF) { + error(getPos(), "Error in JPX PPM marker segment"); + return gFalse; + } + } +#else + if ((img.nComps > 256 && !readUWord(&comp)) || + (img.nComps <= 256 && !readUByte(&comp)) || + comp >= img.nComps || + !readUByte(&compInfo[comp].defROI.style) || + !readUByte(&compInfo[comp].defROI.shift)) { + error(getPos(), "Error in JPX RGN marker segment"); + return gFalse; + } +#endif + break; + case 0x5f: // POC - progression order change + cover(26); +#if 1 //~ progression order changes are unimplemented + fprintf(stderr, "POC\n"); + for (i = 0; i < segLen - 2; ++i) { + if (str->getChar() == EOF) { + error(getPos(), "Error in JPX PPM marker segment"); + return gFalse; + } + } +#else + nProgs = (segLen - 2) / (img.nComps > 256 ? 9 : 7); + progs = (JPXProgOrder *)gmallocn(nProgs, sizeof(JPXProgOrder)); + for (i = 0; i < nProgs; ++i) { + if (!readUByte(&progs[i].startRes) || + !(img.nComps > 256 && readUWord(&progs[i].startComp)) || + !(img.nComps <= 256 && readUByte(&progs[i].startComp)) || + !readUWord(&progs[i].endLayer) || + !readUByte(&progs[i].endRes) || + !(img.nComps > 256 && readUWord(&progs[i].endComp)) || + !(img.nComps <= 256 && readUByte(&progs[i].endComp)) || + !readUByte(&progs[i].progOrder)) { + error(getPos(), "Error in JPX POC marker segment"); + return gFalse; + } + } +#endif + break; + case 0x60: // PPM - packed packet headers, main header + cover(27); +#if 1 //~ packed packet headers are unimplemented + fprintf(stderr, "PPM\n"); + for (i = 0; i < segLen - 2; ++i) { + if (str->getChar() == EOF) { + error(getPos(), "Error in JPX PPM marker segment"); + return gFalse; + } + } +#endif + break; + case 0x55: // TLM - tile-part lengths + // skipped + cover(28); + for (i = 0; i < segLen - 2; ++i) { + if (str->getChar() == EOF) { + error(getPos(), "Error in JPX TLM marker segment"); + return gFalse; + } + } + break; + case 0x57: // PLM - packet length, main header + // skipped + cover(29); + for (i = 0; i < segLen - 2; ++i) { + if (str->getChar() == EOF) { + error(getPos(), "Error in JPX PLM marker segment"); + return gFalse; + } + } + break; + case 0x63: // CRG - component registration + // skipped + cover(30); + for (i = 0; i < segLen - 2; ++i) { + if (str->getChar() == EOF) { + error(getPos(), "Error in JPX CRG marker segment"); + return gFalse; + } + } + break; + case 0x64: // COM - comment + // skipped + cover(31); + for (i = 0; i < segLen - 2; ++i) { + if (str->getChar() == EOF) { + error(getPos(), "Error in JPX COM marker segment"); + return gFalse; + } + } + break; + case 0x90: // SOT - start of tile + cover(32); + haveSOT = gTrue; + break; + default: + cover(33); + error(getPos(), "Unknown marker segment %02x in JPX stream", segType); + for (i = 0; i < segLen - 2; ++i) { + if (str->getChar() == EOF) { + break; + } + } + break; + } + } while (!haveSOT); + + if (!haveSIZ) { + error(getPos(), "Missing SIZ marker segment in JPX stream"); + return gFalse; + } + if (!haveCOD) { + error(getPos(), "Missing COD marker segment in JPX stream"); + return gFalse; + } + if (!haveQCD) { + error(getPos(), "Missing QCD marker segment in JPX stream"); + return gFalse; + } + + //----- read the tile-parts + while (1) { + if (!readTilePart()) { + return gFalse; + } + if (!readMarkerHdr(&segType, &segLen)) { + error(getPos(), "Error in JPX codestream"); + return gFalse; + } + if (segType != 0x90) { // SOT - start of tile + break; + } + } + + if (segType != 0xd9) { // EOC - end of codestream + error(getPos(), "Missing EOC marker in JPX codestream"); + return gFalse; + } + + //----- finish decoding the image + for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { + tile = &img.tiles[i]; + for (comp = 0; comp < img.nComps; ++comp) { + tileComp = &tile->tileComps[comp]; + inverseTransform(tileComp); + } + if (!inverseMultiCompAndDC(tile)) { + return gFalse; + } + } + + //~ can free memory below tileComps here, and also tileComp.buf + + return gTrue; +} + +GBool JPXStream::readTilePart() { + JPXTile *tile; + JPXTileComp *tileComp; + JPXResLevel *resLevel; + JPXPrecinct *precinct; + JPXSubband *subband; + JPXCodeBlock *cb; + GBool haveSOD; + Guint tileIdx, tilePartLen, tilePartIdx, nTileParts; + GBool tilePartToEOC; + Guint precinctSize, style; + Guint n, nSBs, nx, ny, sbx0, sby0, comp, segLen; + Guint i, j, k, cbX, cbY, r, pre, sb, cbi; + int segType, level; + + // process the SOT marker segment + if (!readUWord(&tileIdx) || + !readULong(&tilePartLen) || + !readUByte(&tilePartIdx) || + !readUByte(&nTileParts)) { + error(getPos(), "Error in JPX SOT marker segment"); + return gFalse; + } + + if (tileIdx >= img.nXTiles * img.nYTiles) { + error(getPos(), "Weird tile index in JPX stream"); + return gFalse; + } + + tilePartToEOC = tilePartLen == 0; + tilePartLen -= 12; // subtract size of SOT segment + + haveSOD = gFalse; + do { + if (!readMarkerHdr(&segType, &segLen)) { + error(getPos(), "Error in JPX tile-part codestream"); + return gFalse; + } + tilePartLen -= 2 + segLen; + switch (segType) { + case 0x52: // COD - coding style default + cover(34); + if (!readUByte(&img.tiles[tileIdx].tileComps[0].style) || + !readUByte(&img.tiles[tileIdx].progOrder) || + !readUWord(&img.tiles[tileIdx].nLayers) || + !readUByte(&img.tiles[tileIdx].multiComp) || + !readUByte(&img.tiles[tileIdx].tileComps[0].nDecompLevels) || + !readUByte(&img.tiles[tileIdx].tileComps[0].codeBlockW) || + !readUByte(&img.tiles[tileIdx].tileComps[0].codeBlockH) || + !readUByte(&img.tiles[tileIdx].tileComps[0].codeBlockStyle) || + !readUByte(&img.tiles[tileIdx].tileComps[0].transform)) { + error(getPos(), "Error in JPX COD marker segment"); + return gFalse; + } + img.tiles[tileIdx].tileComps[0].codeBlockW += 2; + img.tiles[tileIdx].tileComps[0].codeBlockH += 2; + for (comp = 0; comp < img.nComps; ++comp) { + if (comp != 0) { + img.tiles[tileIdx].tileComps[comp].style = + img.tiles[tileIdx].tileComps[0].style; + img.tiles[tileIdx].tileComps[comp].nDecompLevels = + img.tiles[tileIdx].tileComps[0].nDecompLevels; + img.tiles[tileIdx].tileComps[comp].codeBlockW = + img.tiles[tileIdx].tileComps[0].codeBlockW; + img.tiles[tileIdx].tileComps[comp].codeBlockH = + img.tiles[tileIdx].tileComps[0].codeBlockH; + img.tiles[tileIdx].tileComps[comp].codeBlockStyle = + img.tiles[tileIdx].tileComps[0].codeBlockStyle; + img.tiles[tileIdx].tileComps[comp].transform = + img.tiles[tileIdx].tileComps[0].transform; + } + img.tiles[tileIdx].tileComps[comp].resLevels = + (JPXResLevel *)greallocn( + img.tiles[tileIdx].tileComps[comp].resLevels, + (img.tiles[tileIdx].tileComps[comp].nDecompLevels + 1), + sizeof(JPXResLevel)); + for (r = 0; + r <= img.tiles[tileIdx].tileComps[comp].nDecompLevels; + ++r) { + img.tiles[tileIdx].tileComps[comp].resLevels[r].precincts = NULL; + } + } + for (r = 0; r <= img.tiles[tileIdx].tileComps[0].nDecompLevels; ++r) { + if (img.tiles[tileIdx].tileComps[0].style & 0x01) { + if (!readUByte(&precinctSize)) { + error(getPos(), "Error in JPX COD marker segment"); + return gFalse; + } + img.tiles[tileIdx].tileComps[0].resLevels[r].precinctWidth = + precinctSize & 0x0f; + img.tiles[tileIdx].tileComps[0].resLevels[r].precinctHeight = + (precinctSize >> 4) & 0x0f; + } else { + img.tiles[tileIdx].tileComps[0].resLevels[r].precinctWidth = 15; + img.tiles[tileIdx].tileComps[0].resLevels[r].precinctHeight = 15; + } + } + for (comp = 1; comp < img.nComps; ++comp) { + for (r = 0; + r <= img.tiles[tileIdx].tileComps[comp].nDecompLevels; + ++r) { + img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctWidth = + img.tiles[tileIdx].tileComps[0].resLevels[r].precinctWidth; + img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctHeight = + img.tiles[tileIdx].tileComps[0].resLevels[r].precinctHeight; + } + } + break; + case 0x53: // COC - coding style component + cover(35); + if ((img.nComps > 256 && !readUWord(&comp)) || + (img.nComps <= 256 && !readUByte(&comp)) || + comp >= img.nComps || + !readUByte(&style) || + !readUByte(&img.tiles[tileIdx].tileComps[comp].nDecompLevels) || + !readUByte(&img.tiles[tileIdx].tileComps[comp].codeBlockW) || + !readUByte(&img.tiles[tileIdx].tileComps[comp].codeBlockH) || + !readUByte(&img.tiles[tileIdx].tileComps[comp].codeBlockStyle) || + !readUByte(&img.tiles[tileIdx].tileComps[comp].transform)) { + error(getPos(), "Error in JPX COC marker segment"); + return gFalse; + } + img.tiles[tileIdx].tileComps[comp].style = + (img.tiles[tileIdx].tileComps[comp].style & ~1) | (style & 1); + img.tiles[tileIdx].tileComps[comp].codeBlockW += 2; + img.tiles[tileIdx].tileComps[comp].codeBlockH += 2; + img.tiles[tileIdx].tileComps[comp].resLevels = + (JPXResLevel *)greallocn( + img.tiles[tileIdx].tileComps[comp].resLevels, + (img.tiles[tileIdx].tileComps[comp].nDecompLevels + 1), + sizeof(JPXResLevel)); + for (r = 0; r <= img.tiles[tileIdx].tileComps[comp].nDecompLevels; ++r) { + img.tiles[tileIdx].tileComps[comp].resLevels[r].precincts = NULL; + } + for (r = 0; r <= img.tiles[tileIdx].tileComps[comp].nDecompLevels; ++r) { + if (img.tiles[tileIdx].tileComps[comp].style & 0x01) { + if (!readUByte(&precinctSize)) { + error(getPos(), "Error in JPX COD marker segment"); + return gFalse; + } + img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctWidth = + precinctSize & 0x0f; + img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctHeight = + (precinctSize >> 4) & 0x0f; + } else { + img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctWidth = 15; + img.tiles[tileIdx].tileComps[comp].resLevels[r].precinctHeight = 15; + } + } + break; + case 0x5c: // QCD - quantization default + cover(36); + if (!readUByte(&img.tiles[tileIdx].tileComps[0].quantStyle)) { + error(getPos(), "Error in JPX QCD marker segment"); + return gFalse; + } + if ((img.tiles[tileIdx].tileComps[0].quantStyle & 0x1f) == 0x00) { + img.tiles[tileIdx].tileComps[0].nQuantSteps = + segLen - 3; + img.tiles[tileIdx].tileComps[0].quantSteps = + (Guint *)greallocn(img.tiles[tileIdx].tileComps[0].quantSteps, + img.tiles[tileIdx].tileComps[0].nQuantSteps, + sizeof(Guint)); + for (i = 0; i < img.tiles[tileIdx].tileComps[0].nQuantSteps; ++i) { + if (!readUByte(&img.tiles[tileIdx].tileComps[0].quantSteps[i])) { + error(getPos(), "Error in JPX QCD marker segment"); + return gFalse; + } + } + } else if ((img.tiles[tileIdx].tileComps[0].quantStyle & 0x1f) == 0x01) { + img.tiles[tileIdx].tileComps[0].nQuantSteps = 1; + img.tiles[tileIdx].tileComps[0].quantSteps = + (Guint *)greallocn(img.tiles[tileIdx].tileComps[0].quantSteps, + img.tiles[tileIdx].tileComps[0].nQuantSteps, + sizeof(Guint)); + if (!readUWord(&img.tiles[tileIdx].tileComps[0].quantSteps[0])) { + error(getPos(), "Error in JPX QCD marker segment"); + return gFalse; + } + } else if ((img.tiles[tileIdx].tileComps[0].quantStyle & 0x1f) == 0x02) { + img.tiles[tileIdx].tileComps[0].nQuantSteps = (segLen - 3) / 2; + img.tiles[tileIdx].tileComps[0].quantSteps = + (Guint *)greallocn(img.tiles[tileIdx].tileComps[0].quantSteps, + img.tiles[tileIdx].tileComps[0].nQuantSteps, + sizeof(Guint)); + for (i = 0; i < img.tiles[tileIdx].tileComps[0].nQuantSteps; ++i) { + if (!readUWord(&img.tiles[tileIdx].tileComps[0].quantSteps[i])) { + error(getPos(), "Error in JPX QCD marker segment"); + return gFalse; + } + } + } else { + error(getPos(), "Error in JPX QCD marker segment"); + return gFalse; + } + for (comp = 1; comp < img.nComps; ++comp) { + img.tiles[tileIdx].tileComps[comp].quantStyle = + img.tiles[tileIdx].tileComps[0].quantStyle; + img.tiles[tileIdx].tileComps[comp].nQuantSteps = + img.tiles[tileIdx].tileComps[0].nQuantSteps; + img.tiles[tileIdx].tileComps[comp].quantSteps = + (Guint *)greallocn(img.tiles[tileIdx].tileComps[comp].quantSteps, + img.tiles[tileIdx].tileComps[0].nQuantSteps, + sizeof(Guint)); + for (j = 0; j < img.tiles[tileIdx].tileComps[0].nQuantSteps; ++j) { + img.tiles[tileIdx].tileComps[comp].quantSteps[j] = + img.tiles[tileIdx].tileComps[0].quantSteps[j]; + } + } + break; + case 0x5d: // QCC - quantization component + cover(37); + if ((img.nComps > 256 && !readUWord(&comp)) || + (img.nComps <= 256 && !readUByte(&comp)) || + comp >= img.nComps || + !readUByte(&img.tiles[tileIdx].tileComps[comp].quantStyle)) { + error(getPos(), "Error in JPX QCC marker segment"); + return gFalse; + } + if ((img.tiles[tileIdx].tileComps[comp].quantStyle & 0x1f) == 0x00) { + img.tiles[tileIdx].tileComps[comp].nQuantSteps = + segLen - (img.nComps > 256 ? 5 : 4); + img.tiles[tileIdx].tileComps[comp].quantSteps = + (Guint *)greallocn(img.tiles[tileIdx].tileComps[comp].quantSteps, + img.tiles[tileIdx].tileComps[comp].nQuantSteps, + sizeof(Guint)); + for (i = 0; i < img.tiles[tileIdx].tileComps[comp].nQuantSteps; ++i) { + if (!readUByte(&img.tiles[tileIdx].tileComps[comp].quantSteps[i])) { + error(getPos(), "Error in JPX QCC marker segment"); + return gFalse; + } + } + } else if ((img.tiles[tileIdx].tileComps[comp].quantStyle & 0x1f) + == 0x01) { + img.tiles[tileIdx].tileComps[comp].nQuantSteps = 1; + img.tiles[tileIdx].tileComps[comp].quantSteps = + (Guint *)greallocn(img.tiles[tileIdx].tileComps[comp].quantSteps, + img.tiles[tileIdx].tileComps[comp].nQuantSteps, + sizeof(Guint)); + if (!readUWord(&img.tiles[tileIdx].tileComps[comp].quantSteps[0])) { + error(getPos(), "Error in JPX QCC marker segment"); + return gFalse; + } + } else if ((img.tiles[tileIdx].tileComps[comp].quantStyle & 0x1f) + == 0x02) { + img.tiles[tileIdx].tileComps[comp].nQuantSteps = + (segLen - (img.nComps > 256 ? 5 : 4)) / 2; + img.tiles[tileIdx].tileComps[comp].quantSteps = + (Guint *)greallocn(img.tiles[tileIdx].tileComps[comp].quantSteps, + img.tiles[tileIdx].tileComps[comp].nQuantSteps, + sizeof(Guint)); + for (i = 0; i < img.tiles[tileIdx].tileComps[comp].nQuantSteps; ++i) { + if (!readUWord(&img.tiles[tileIdx].tileComps[comp].quantSteps[i])) { + error(getPos(), "Error in JPX QCD marker segment"); + return gFalse; + } + } + } else { + error(getPos(), "Error in JPX QCC marker segment"); + return gFalse; + } + break; + case 0x5e: // RGN - region of interest + cover(38); +#if 1 //~ ROI is unimplemented + fprintf(stderr, "RGN\n"); + for (i = 0; i < segLen - 2; ++i) { + if (str->getChar() == EOF) { + error(getPos(), "Error in JPX PPM marker segment"); + return gFalse; + } + } +#else + if ((img.nComps > 256 && !readUWord(&comp)) || + (img.nComps <= 256 && !readUByte(&comp)) || + comp >= img.nComps || + !readUByte(&compInfo[comp].roi.style) || + !readUByte(&compInfo[comp].roi.shift)) { + error(getPos(), "Error in JPX RGN marker segment"); + return gFalse; + } +#endif + break; + case 0x5f: // POC - progression order change + cover(39); +#if 1 //~ progression order changes are unimplemented + fprintf(stderr, "POC\n"); + for (i = 0; i < segLen - 2; ++i) { + if (str->getChar() == EOF) { + error(getPos(), "Error in JPX PPM marker segment"); + return gFalse; + } + } +#else + nTileProgs = (segLen - 2) / (img.nComps > 256 ? 9 : 7); + tileProgs = (JPXProgOrder *)gmallocn(nTileProgs, sizeof(JPXProgOrder)); + for (i = 0; i < nTileProgs; ++i) { + if (!readUByte(&tileProgs[i].startRes) || + !(img.nComps > 256 && readUWord(&tileProgs[i].startComp)) || + !(img.nComps <= 256 && readUByte(&tileProgs[i].startComp)) || + !readUWord(&tileProgs[i].endLayer) || + !readUByte(&tileProgs[i].endRes) || + !(img.nComps > 256 && readUWord(&tileProgs[i].endComp)) || + !(img.nComps <= 256 && readUByte(&tileProgs[i].endComp)) || + !readUByte(&tileProgs[i].progOrder)) { + error(getPos(), "Error in JPX POC marker segment"); + return gFalse; + } + } +#endif + break; + case 0x61: // PPT - packed packet headers, tile-part hdr + cover(40); +#if 1 //~ packed packet headers are unimplemented + fprintf(stderr, "PPT\n"); + for (i = 0; i < segLen - 2; ++i) { + if (str->getChar() == EOF) { + error(getPos(), "Error in JPX PPT marker segment"); + return gFalse; + } + } +#endif + case 0x58: // PLT - packet length, tile-part header + // skipped + cover(41); + for (i = 0; i < segLen - 2; ++i) { + if (str->getChar() == EOF) { + error(getPos(), "Error in JPX PLT marker segment"); + return gFalse; + } + } + break; + case 0x64: // COM - comment + // skipped + cover(42); + for (i = 0; i < segLen - 2; ++i) { + if (str->getChar() == EOF) { + error(getPos(), "Error in JPX COM marker segment"); + return gFalse; + } + } + break; + case 0x93: // SOD - start of data + cover(43); + haveSOD = gTrue; + break; + default: + cover(44); + error(getPos(), "Unknown marker segment %02x in JPX tile-part stream", + segType); + for (i = 0; i < segLen - 2; ++i) { + if (str->getChar() == EOF) { + break; + } + } + break; + } + } while (!haveSOD); + + //----- initialize the tile, precincts, and code-blocks + if (tilePartIdx == 0) { + tile = &img.tiles[tileIdx]; + i = tileIdx / img.nXTiles; + j = tileIdx % img.nXTiles; + if ((tile->x0 = img.xTileOffset + j * img.xTileSize) < img.xOffset) { + tile->x0 = img.xOffset; + } + if ((tile->y0 = img.yTileOffset + i * img.yTileSize) < img.yOffset) { + tile->y0 = img.yOffset; + } + if ((tile->x1 = img.xTileOffset + (j + 1) * img.xTileSize) > img.xSize) { + tile->x1 = img.xSize; + } + if ((tile->y1 = img.yTileOffset + (i + 1) * img.yTileSize) > img.ySize) { + tile->y1 = img.ySize; + } + tile->comp = 0; + tile->res = 0; + tile->precinct = 0; + tile->layer = 0; + tile->maxNDecompLevels = 0; + for (comp = 0; comp < img.nComps; ++comp) { + tileComp = &tile->tileComps[comp]; + if (tileComp->nDecompLevels > tile->maxNDecompLevels) { + tile->maxNDecompLevels = tileComp->nDecompLevels; + } + tileComp->x0 = jpxCeilDiv(tile->x0, tileComp->hSep); + tileComp->y0 = jpxCeilDiv(tile->y0, tileComp->hSep); + tileComp->x1 = jpxCeilDiv(tile->x1, tileComp->hSep); + tileComp->y1 = jpxCeilDiv(tile->y1, tileComp->hSep); + tileComp->cbW = 1 << tileComp->codeBlockW; + tileComp->cbH = 1 << tileComp->codeBlockH; + tileComp->data = (int *)gmallocn((tileComp->x1 - tileComp->x0) * + (tileComp->y1 - tileComp->y0), + sizeof(int)); + if (tileComp->x1 - tileComp->x0 > tileComp->y1 - tileComp->y0) { + n = tileComp->x1 - tileComp->x0; + } else { + n = tileComp->y1 - tileComp->y0; + } + tileComp->buf = (int *)gmallocn(n + 8, sizeof(int)); + for (r = 0; r <= tileComp->nDecompLevels; ++r) { + resLevel = &tileComp->resLevels[r]; + k = r == 0 ? tileComp->nDecompLevels + : tileComp->nDecompLevels - r + 1; + resLevel->x0 = jpxCeilDivPow2(tileComp->x0, k); + resLevel->y0 = jpxCeilDivPow2(tileComp->y0, k); + resLevel->x1 = jpxCeilDivPow2(tileComp->x1, k); + resLevel->y1 = jpxCeilDivPow2(tileComp->y1, k); + if (r == 0) { + resLevel->bx0[0] = resLevel->x0; + resLevel->by0[0] = resLevel->y0; + resLevel->bx1[0] = resLevel->x1; + resLevel->by1[0] = resLevel->y1; + } else { + resLevel->bx0[0] = jpxCeilDivPow2(tileComp->x0 - (1 << (k-1)), k); + resLevel->by0[0] = resLevel->y0; + resLevel->bx1[0] = jpxCeilDivPow2(tileComp->x1 - (1 << (k-1)), k); + resLevel->by1[0] = resLevel->y1; + resLevel->bx0[1] = resLevel->x0; + resLevel->by0[1] = jpxCeilDivPow2(tileComp->y0 - (1 << (k-1)), k); + resLevel->bx1[1] = resLevel->x1; + resLevel->by1[1] = jpxCeilDivPow2(tileComp->y1 - (1 << (k-1)), k); + resLevel->bx0[2] = jpxCeilDivPow2(tileComp->x0 - (1 << (k-1)), k); + resLevel->by0[2] = jpxCeilDivPow2(tileComp->y0 - (1 << (k-1)), k); + resLevel->bx1[2] = jpxCeilDivPow2(tileComp->x1 - (1 << (k-1)), k); + resLevel->by1[2] = jpxCeilDivPow2(tileComp->y1 - (1 << (k-1)), k); + } + resLevel->precincts = (JPXPrecinct *)gmallocn(1, sizeof(JPXPrecinct)); + for (pre = 0; pre < 1; ++pre) { + precinct = &resLevel->precincts[pre]; + precinct->x0 = resLevel->x0; + precinct->y0 = resLevel->y0; + precinct->x1 = resLevel->x1; + precinct->y1 = resLevel->y1; + nSBs = r == 0 ? 1 : 3; + precinct->subbands = + (JPXSubband *)gmallocn(nSBs, sizeof(JPXSubband)); + for (sb = 0; sb < nSBs; ++sb) { + subband = &precinct->subbands[sb]; + subband->x0 = resLevel->bx0[sb]; + subband->y0 = resLevel->by0[sb]; + subband->x1 = resLevel->bx1[sb]; + subband->y1 = resLevel->by1[sb]; + subband->nXCBs = jpxCeilDivPow2(subband->x1, + tileComp->codeBlockW) + - jpxFloorDivPow2(subband->x0, + tileComp->codeBlockW); + subband->nYCBs = jpxCeilDivPow2(subband->y1, + tileComp->codeBlockH) + - jpxFloorDivPow2(subband->y0, + tileComp->codeBlockH); + n = subband->nXCBs > subband->nYCBs ? subband->nXCBs + : subband->nYCBs; + for (subband->maxTTLevel = 0, --n; + n; + ++subband->maxTTLevel, n >>= 1) ; + n = 0; + for (level = subband->maxTTLevel; level >= 0; --level) { + nx = jpxCeilDivPow2(subband->nXCBs, level); + ny = jpxCeilDivPow2(subband->nYCBs, level); + n += nx * ny; + } + subband->inclusion = + (JPXTagTreeNode *)gmallocn(n, sizeof(JPXTagTreeNode)); + subband->zeroBitPlane = + (JPXTagTreeNode *)gmallocn(n, sizeof(JPXTagTreeNode)); + for (k = 0; k < n; ++k) { + subband->inclusion[k].finished = gFalse; + subband->inclusion[k].val = 0; + subband->zeroBitPlane[k].finished = gFalse; + subband->zeroBitPlane[k].val = 0; + } + subband->cbs = (JPXCodeBlock *)gmallocn(subband->nXCBs * + subband->nYCBs, + sizeof(JPXCodeBlock)); + sbx0 = jpxFloorDivPow2(subband->x0, tileComp->codeBlockW); + sby0 = jpxFloorDivPow2(subband->y0, tileComp->codeBlockH); + cb = subband->cbs; + for (cbY = 0; cbY < subband->nYCBs; ++cbY) { + for (cbX = 0; cbX < subband->nXCBs; ++cbX) { + cb->x0 = (sbx0 + cbX) << tileComp->codeBlockW; + cb->x1 = cb->x0 + tileComp->cbW; + if (subband->x0 > cb->x0) { + cb->x0 = subband->x0; + } + if (subband->x1 < cb->x1) { + cb->x1 = subband->x1; + } + cb->y0 = (sby0 + cbY) << tileComp->codeBlockH; + cb->y1 = cb->y0 + tileComp->cbH; + if (subband->y0 > cb->y0) { + cb->y0 = subband->y0; + } + if (subband->y1 < cb->y1) { + cb->y1 = subband->y1; + } + cb->seen = gFalse; + cb->lBlock = 3; + cb->nextPass = jpxPassCleanup; + cb->nZeroBitPlanes = 0; + cb->coeffs = + (JPXCoeff *)gmallocn((1 << (tileComp->codeBlockW + + tileComp->codeBlockH)), + sizeof(JPXCoeff)); + for (cbi = 0; + cbi < (Guint)(1 << (tileComp->codeBlockW + + tileComp->codeBlockH)); + ++cbi) { + cb->coeffs[cbi].flags = 0; + cb->coeffs[cbi].len = 0; + cb->coeffs[cbi].mag = 0; + } + cb->arithDecoder = NULL; + cb->stats = NULL; + ++cb; + } + } + } + } + } + } + } + + return readTilePartData(tileIdx, tilePartLen, tilePartToEOC); +} + +GBool JPXStream::readTilePartData(Guint tileIdx, + Guint tilePartLen, GBool tilePartToEOC) { + JPXTile *tile; + JPXTileComp *tileComp; + JPXResLevel *resLevel; + JPXPrecinct *precinct; + JPXSubband *subband; + JPXCodeBlock *cb; + Guint ttVal; + Guint bits, cbX, cbY, nx, ny, i, j, n, sb; + int level; + + tile = &img.tiles[tileIdx]; + + // read all packets from this tile-part + while (1) { + if (tilePartToEOC) { + //~ peek for an EOC marker + cover(93); + } else if (tilePartLen == 0) { + break; + } + + tileComp = &tile->tileComps[tile->comp]; + resLevel = &tileComp->resLevels[tile->res]; + precinct = &resLevel->precincts[tile->precinct]; + + //----- packet header + + // setup + startBitBuf(tilePartLen); + + // zero-length flag + if (!readBits(1, &bits)) { + goto err; + } + if (!bits) { + // packet is empty -- clear all code-block inclusion flags + cover(45); + for (sb = 0; sb < (Guint)(tile->res == 0 ? 1 : 3); ++sb) { + subband = &precinct->subbands[sb]; + for (cbY = 0; cbY < subband->nYCBs; ++cbY) { + for (cbX = 0; cbX < subband->nXCBs; ++cbX) { + cb = &subband->cbs[cbY * subband->nXCBs + cbX]; + cb->included = gFalse; + } + } + } + } else { + + for (sb = 0; sb < (Guint)(tile->res == 0 ? 1 : 3); ++sb) { + subband = &precinct->subbands[sb]; + for (cbY = 0; cbY < subband->nYCBs; ++cbY) { + for (cbX = 0; cbX < subband->nXCBs; ++cbX) { + cb = &subband->cbs[cbY * subband->nXCBs + cbX]; + + // skip code-blocks with no coefficients + if (cb->x0 >= cb->x1 || cb->y0 >= cb->y1) { + cover(46); + cb->included = gFalse; + continue; + } + + // code-block inclusion + if (cb->seen) { + cover(47); + if (!readBits(1, &cb->included)) { + goto err; + } + } else { + cover(48); + ttVal = 0; + i = 0; + for (level = subband->maxTTLevel; level >= 0; --level) { + nx = jpxCeilDivPow2(subband->nXCBs, level); + ny = jpxCeilDivPow2(subband->nYCBs, level); + j = i + (cbY >> level) * nx + (cbX >> level); + if (!subband->inclusion[j].finished && + !subband->inclusion[j].val) { + subband->inclusion[j].val = ttVal; + } else { + ttVal = subband->inclusion[j].val; + } + while (!subband->inclusion[j].finished && + ttVal <= tile->layer) { + if (!readBits(1, &bits)) { + goto err; + } + if (bits == 1) { + subband->inclusion[j].finished = gTrue; + } else { + ++ttVal; + } + } + subband->inclusion[j].val = ttVal; + if (ttVal > tile->layer) { + break; + } + i += nx * ny; + } + cb->included = level < 0; + } + + if (cb->included) { + cover(49); + + // zero bit-plane count + if (!cb->seen) { + cover(50); + ttVal = 0; + i = 0; + for (level = subband->maxTTLevel; level >= 0; --level) { + nx = jpxCeilDivPow2(subband->nXCBs, level); + ny = jpxCeilDivPow2(subband->nYCBs, level); + j = i + (cbY >> level) * nx + (cbX >> level); + if (!subband->zeroBitPlane[j].finished && + !subband->zeroBitPlane[j].val) { + subband->zeroBitPlane[j].val = ttVal; + } else { + ttVal = subband->zeroBitPlane[j].val; + } + while (!subband->zeroBitPlane[j].finished) { + if (!readBits(1, &bits)) { + goto err; + } + if (bits == 1) { + subband->zeroBitPlane[j].finished = gTrue; + } else { + ++ttVal; + } + } + subband->zeroBitPlane[j].val = ttVal; + i += nx * ny; + } + cb->nZeroBitPlanes = ttVal; + } + + // number of coding passes + if (!readBits(1, &bits)) { + goto err; + } + if (bits == 0) { + cover(51); + cb->nCodingPasses = 1; + } else { + if (!readBits(1, &bits)) { + goto err; + } + if (bits == 0) { + cover(52); + cb->nCodingPasses = 2; + } else { + cover(53); + if (!readBits(2, &bits)) { + goto err; + } + if (bits < 3) { + cover(54); + cb->nCodingPasses = 3 + bits; + } else { + cover(55); + if (!readBits(5, &bits)) { + goto err; + } + if (bits < 31) { + cover(56); + cb->nCodingPasses = 6 + bits; + } else { + cover(57); + if (!readBits(7, &bits)) { + goto err; + } + cb->nCodingPasses = 37 + bits; + } + } + } + } + + // update Lblock + while (1) { + if (!readBits(1, &bits)) { + goto err; + } + if (!bits) { + break; + } + ++cb->lBlock; + } + + // length of compressed data + //~ deal with multiple codeword segments + for (n = cb->lBlock, i = cb->nCodingPasses >> 1; + i; + ++n, i >>= 1) ; + if (!readBits(n, &cb->dataLen)) { + goto err; + } + } + } + } + } + } + tilePartLen = finishBitBuf(); + + //----- packet data + + for (sb = 0; sb < (Guint)(tile->res == 0 ? 1 : 3); ++sb) { + subband = &precinct->subbands[sb]; + for (cbY = 0; cbY < subband->nYCBs; ++cbY) { + for (cbX = 0; cbX < subband->nXCBs; ++cbX) { + cb = &subband->cbs[cbY * subband->nXCBs + cbX]; + if (cb->included) { + if (!readCodeBlockData(tileComp, resLevel, precinct, subband, + tile->res, sb, cb)) { + return gFalse; + } + tilePartLen -= cb->dataLen; + cb->seen = gTrue; + } + } + } + } + + //----- next packet + + switch (tile->progOrder) { + case 0: // layer, resolution level, component, precinct + cover(58); + if (++tile->comp == img.nComps) { + tile->comp = 0; + if (++tile->res == tile->maxNDecompLevels + 1) { + tile->res = 0; + if (++tile->layer == tile->nLayers) { + tile->layer = 0; + } + } + } + break; + case 1: // resolution level, layer, component, precinct + cover(59); + if (++tile->comp == img.nComps) { + tile->comp = 0; + if (++tile->layer == tile->nLayers) { + tile->layer = 0; + if (++tile->res == tile->maxNDecompLevels + 1) { + tile->res = 0; + } + } + } + break; + case 2: // resolution level, precinct, component, layer + //~ this isn't correct -- see B.12.1.3 + cover(60); + if (++tile->layer == tile->nLayers) { + tile->layer = 0; + if (++tile->comp == img.nComps) { + tile->comp = 0; + if (++tile->res == tile->maxNDecompLevels + 1) { + tile->res = 0; + } + } + } + break; + case 3: // precinct, component, resolution level, layer + //~ this isn't correct -- see B.12.1.4 + cover(61); + if (++tile->layer == tile->nLayers) { + tile->layer = 0; + if (++tile->res == tile->maxNDecompLevels + 1) { + tile->res = 0; + if (++tile->comp == img.nComps) { + tile->comp = 0; + } + } + } + break; + case 4: // component, precinct, resolution level, layer + //~ this isn't correct -- see B.12.1.5 + cover(62); + if (++tile->layer == tile->nLayers) { + tile->layer = 0; + if (++tile->res == tile->maxNDecompLevels + 1) { + tile->res = 0; + if (++tile->comp == img.nComps) { + tile->comp = 0; + } + } + } + break; + } + } + + return gTrue; + + err: + error(getPos(), "Error in JPX stream"); + return gFalse; +} + +GBool JPXStream::readCodeBlockData(JPXTileComp *tileComp, + JPXResLevel *resLevel, + JPXPrecinct *precinct, + JPXSubband *subband, + Guint res, Guint sb, + JPXCodeBlock *cb) { + JPXCoeff *coeff0, *coeff1, *coeff; + Guint horiz, vert, diag, all, cx, xorBit; + int horizSign, vertSign; + Guint i, x, y0, y1, y2; + + if (cb->arithDecoder) { + cover(63); + cb->arithDecoder->restart(cb->dataLen); + } else { + cover(64); + cb->arithDecoder = new JArithmeticDecoder(); + cb->arithDecoder->setStream(str, cb->dataLen); + cb->arithDecoder->start(); + cb->stats = new JArithmeticDecoderStats(jpxNContexts); + cb->stats->setEntry(jpxContextSigProp, 4, 0); + cb->stats->setEntry(jpxContextRunLength, 3, 0); + cb->stats->setEntry(jpxContextUniform, 46, 0); + } + + for (i = 0; i < cb->nCodingPasses; ++i) { + switch (cb->nextPass) { + + //----- significance propagation pass + case jpxPassSigProp: + cover(65); + for (y0 = cb->y0, coeff0 = cb->coeffs; + y0 < cb->y1; + y0 += 4, coeff0 += 4 << tileComp->codeBlockW) { + for (x = cb->x0, coeff1 = coeff0; + x < cb->x1; + ++x, ++coeff1) { + for (y1 = 0, coeff = coeff1; + y1 < 4 && y0+y1 < cb->y1; + ++y1, coeff += tileComp->cbW) { + if (!(coeff->flags & jpxCoeffSignificant)) { + horiz = vert = diag = 0; + horizSign = vertSign = 2; + if (x > cb->x0) { + if (coeff[-1].flags & jpxCoeffSignificant) { + ++horiz; + horizSign += (coeff[-1].flags & jpxCoeffSign) ? -1 : 1; + } + if (y0+y1 > cb->y0) { + diag += (coeff[-(int)tileComp->cbW - 1].flags + >> jpxCoeffSignificantB) & 1; + } + if (y0+y1 < cb->y1 - 1) { + diag += (coeff[tileComp->cbW - 1].flags + >> jpxCoeffSignificantB) & 1; + } + } + if (x < cb->x1 - 1) { + if (coeff[1].flags & jpxCoeffSignificant) { + ++horiz; + horizSign += (coeff[1].flags & jpxCoeffSign) ? -1 : 1; + } + if (y0+y1 > cb->y0) { + diag += (coeff[-(int)tileComp->cbW + 1].flags + >> jpxCoeffSignificantB) & 1; + } + if (y0+y1 < cb->y1 - 1) { + diag += (coeff[tileComp->cbW + 1].flags + >> jpxCoeffSignificantB) & 1; + } + } + if (y0+y1 > cb->y0) { + if (coeff[-(int)tileComp->cbW].flags & jpxCoeffSignificant) { + ++vert; + vertSign += (coeff[-(int)tileComp->cbW].flags & jpxCoeffSign) + ? -1 : 1; + } + } + if (y0+y1 < cb->y1 - 1) { + if (coeff[tileComp->cbW].flags & jpxCoeffSignificant) { + ++vert; + vertSign += (coeff[tileComp->cbW].flags & jpxCoeffSign) + ? -1 : 1; + } + } + cx = sigPropContext[horiz][vert][diag][res == 0 ? 1 : sb]; + if (cx != 0) { + if (cb->arithDecoder->decodeBit(cx, cb->stats)) { + coeff->flags |= jpxCoeffSignificant | jpxCoeffFirstMagRef; + coeff->mag = (coeff->mag << 1) | 1; + cx = signContext[horizSign][vertSign][0]; + xorBit = signContext[horizSign][vertSign][1]; + if (cb->arithDecoder->decodeBit(cx, cb->stats) ^ xorBit) { + coeff->flags |= jpxCoeffSign; + } + } + ++coeff->len; + coeff->flags |= jpxCoeffTouched; + } + } + } + } + } + ++cb->nextPass; + break; + + //----- magnitude refinement pass + case jpxPassMagRef: + cover(66); + for (y0 = cb->y0, coeff0 = cb->coeffs; + y0 < cb->y1; + y0 += 4, coeff0 += 4 << tileComp->codeBlockW) { + for (x = cb->x0, coeff1 = coeff0; + x < cb->x1; + ++x, ++coeff1) { + for (y1 = 0, coeff = coeff1; + y1 < 4 && y0+y1 < cb->y1; + ++y1, coeff += tileComp->cbW) { + if ((coeff->flags & jpxCoeffSignificant) && + !(coeff->flags & jpxCoeffTouched)) { + if (coeff->flags & jpxCoeffFirstMagRef) { + all = 0; + if (x > cb->x0) { + all += (coeff[-1].flags >> jpxCoeffSignificantB) & 1; + if (y0+y1 > cb->y0) { + all += (coeff[-(int)tileComp->cbW - 1].flags + >> jpxCoeffSignificantB) & 1; + } + if (y0+y1 < cb->y1 - 1) { + all += (coeff[tileComp->cbW - 1].flags + >> jpxCoeffSignificantB) & 1; + } + } + if (x < cb->x1 - 1) { + all += (coeff[1].flags >> jpxCoeffSignificantB) & 1; + if (y0+y1 > cb->y0) { + all += (coeff[-(int)tileComp->cbW + 1].flags + >> jpxCoeffSignificantB) & 1; + } + if (y0+y1 < cb->y1 - 1) { + all += (coeff[tileComp->cbW + 1].flags + >> jpxCoeffSignificantB) & 1; + } + } + if (y0+y1 > cb->y0) { + all += (coeff[-(int)tileComp->cbW].flags + >> jpxCoeffSignificantB) & 1; + } + if (y0+y1 < cb->y1 - 1) { + all += (coeff[tileComp->cbW].flags + >> jpxCoeffSignificantB) & 1; + } + cx = all ? 15 : 14; + } else { + cx = 16; + } + coeff->mag = (coeff->mag << 1) | + cb->arithDecoder->decodeBit(cx, cb->stats); + ++coeff->len; + coeff->flags |= jpxCoeffTouched; + coeff->flags &= ~jpxCoeffFirstMagRef; + } + } + } + } + ++cb->nextPass; + break; + + //----- cleanup pass + case jpxPassCleanup: + cover(67); + for (y0 = cb->y0, coeff0 = cb->coeffs; + y0 < cb->y1; + y0 += 4, coeff0 += 4 << tileComp->codeBlockW) { + for (x = cb->x0, coeff1 = coeff0; + x < cb->x1; + ++x, ++coeff1) { + y1 = 0; + if (y0 + 3 < cb->y1 && + !(coeff1->flags & jpxCoeffTouched) && + !(coeff1[tileComp->cbW].flags & jpxCoeffTouched) && + !(coeff1[2 * tileComp->cbW].flags & jpxCoeffTouched) && + !(coeff1[3 * tileComp->cbW].flags & jpxCoeffTouched) && + (x == cb->x0 || y0 == cb->y0 || + !(coeff1[-(int)tileComp->cbW - 1].flags + & jpxCoeffSignificant)) && + (y0 == cb->y0 || + !(coeff1[-(int)tileComp->cbW].flags + & jpxCoeffSignificant)) && + (x == cb->x1 - 1 || y0 == cb->y0 || + !(coeff1[-(int)tileComp->cbW + 1].flags + & jpxCoeffSignificant)) && + (x == cb->x0 || + (!(coeff1[-1].flags & jpxCoeffSignificant) && + !(coeff1[tileComp->cbW - 1].flags + & jpxCoeffSignificant) && + !(coeff1[2 * tileComp->cbW - 1].flags + & jpxCoeffSignificant) && + !(coeff1[3 * tileComp->cbW - 1].flags + & jpxCoeffSignificant))) && + (x == cb->x1 - 1 || + (!(coeff1[1].flags & jpxCoeffSignificant) && + !(coeff1[tileComp->cbW + 1].flags + & jpxCoeffSignificant) && + !(coeff1[2 * tileComp->cbW + 1].flags + & jpxCoeffSignificant) && + !(coeff1[3 * tileComp->cbW + 1].flags + & jpxCoeffSignificant))) && + (x == cb->x0 || y0+4 == cb->y1 || + !(coeff1[4 * tileComp->cbW - 1].flags & jpxCoeffSignificant)) && + (y0+4 == cb->y1 || + !(coeff1[4 * tileComp->cbW].flags & jpxCoeffSignificant)) && + (x == cb->x1 - 1 || y0+4 == cb->y1 || + !(coeff1[4 * tileComp->cbW + 1].flags + & jpxCoeffSignificant))) { + if (cb->arithDecoder->decodeBit(jpxContextRunLength, cb->stats)) { + y1 = cb->arithDecoder->decodeBit(jpxContextUniform, cb->stats); + y1 = (y1 << 1) | + cb->arithDecoder->decodeBit(jpxContextUniform, cb->stats); + for (y2 = 0, coeff = coeff1; + y2 < y1; + ++y2, coeff += tileComp->cbW) { + ++coeff->len; + } + coeff->flags |= jpxCoeffSignificant | jpxCoeffFirstMagRef; + coeff->mag = (coeff->mag << 1) | 1; + ++coeff->len; + cx = signContext[2][2][0]; + xorBit = signContext[2][2][1]; + if (cb->arithDecoder->decodeBit(cx, cb->stats) ^ xorBit) { + coeff->flags |= jpxCoeffSign; + } + ++y1; + } else { + for (y1 = 0, coeff = coeff1; + y1 < 4; + ++y1, coeff += tileComp->cbW) { + ++coeff->len; + } + y1 = 4; + } + } + for (coeff = &coeff1[y1 << tileComp->codeBlockW]; + y1 < 4 && y0 + y1 < cb->y1; + ++y1, coeff += tileComp->cbW) { + if (!(coeff->flags & jpxCoeffTouched)) { + horiz = vert = diag = 0; + horizSign = vertSign = 2; + if (x > cb->x0) { + if (coeff[-1].flags & jpxCoeffSignificant) { + ++horiz; + horizSign += (coeff[-1].flags & jpxCoeffSign) ? -1 : 1; + } + if (y0+y1 > cb->y0) { + diag += (coeff[-(int)tileComp->cbW - 1].flags + >> jpxCoeffSignificantB) & 1; + } + if (y0+y1 < cb->y1 - 1) { + diag += (coeff[tileComp->cbW - 1].flags + >> jpxCoeffSignificantB) & 1; + } + } + if (x < cb->x1 - 1) { + if (coeff[1].flags & jpxCoeffSignificant) { + ++horiz; + horizSign += (coeff[1].flags & jpxCoeffSign) ? -1 : 1; + } + if (y0+y1 > cb->y0) { + diag += (coeff[-(int)tileComp->cbW + 1].flags + >> jpxCoeffSignificantB) & 1; + } + if (y0+y1 < cb->y1 - 1) { + diag += (coeff[tileComp->cbW + 1].flags + >> jpxCoeffSignificantB) & 1; + } + } + if (y0+y1 > cb->y0) { + if (coeff[-(int)tileComp->cbW].flags & jpxCoeffSignificant) { + ++vert; + vertSign += (coeff[-(int)tileComp->cbW].flags & jpxCoeffSign) + ? -1 : 1; + } + } + if (y0+y1 < cb->y1 - 1) { + if (coeff[tileComp->cbW].flags & jpxCoeffSignificant) { + ++vert; + vertSign += (coeff[tileComp->cbW].flags & jpxCoeffSign) + ? -1 : 1; + } + } + cx = sigPropContext[horiz][vert][diag][res == 0 ? 1 : sb]; + if (cb->arithDecoder->decodeBit(cx, cb->stats)) { + coeff->flags |= jpxCoeffSignificant | jpxCoeffFirstMagRef; + coeff->mag = (coeff->mag << 1) | 1; + cx = signContext[horizSign][vertSign][0]; + xorBit = signContext[horizSign][vertSign][1]; + if (cb->arithDecoder->decodeBit(cx, cb->stats) ^ xorBit) { + coeff->flags |= jpxCoeffSign; + } + } + ++coeff->len; + } else { + coeff->flags &= ~jpxCoeffTouched; + } + } + } + } + cb->nextPass = jpxPassSigProp; + break; + } + } + + cb->arithDecoder->cleanup(); + return gTrue; +} + +// Inverse quantization, and wavelet transform (IDWT). This also does +// the initial shift to convert to fixed point format. +void JPXStream::inverseTransform(JPXTileComp *tileComp) { + JPXResLevel *resLevel; + JPXPrecinct *precinct; + JPXSubband *subband; + JPXCodeBlock *cb; + JPXCoeff *coeff0, *coeff; + Guint qStyle, guard, eps, shift; + int shift2; + double mu; + int val; + int *dataPtr; + Guint nx0, ny0, nx1, ny1; + Guint r, cbX, cbY, x, y; + + cover(68); + + //----- (NL)LL subband (resolution level 0) + + resLevel = &tileComp->resLevels[0]; + precinct = &resLevel->precincts[0]; + subband = &precinct->subbands[0]; + + // i-quant parameters + qStyle = tileComp->quantStyle & 0x1f; + guard = (tileComp->quantStyle >> 5) & 7; + if (qStyle == 0) { + cover(69); + eps = (tileComp->quantSteps[0] >> 3) & 0x1f; + shift = guard + eps - 1; + mu = 0; // make gcc happy + } else { + cover(70); + shift = guard - 1 + tileComp->prec; + mu = (double)(0x800 + (tileComp->quantSteps[0] & 0x7ff)) / 2048.0; + } + if (tileComp->transform == 0) { + cover(71); + shift += fracBits; + } + + // copy (NL)LL into the upper-left corner of the data array, doing + // the fixed point adjustment and dequantization along the way + cb = subband->cbs; + for (cbY = 0; cbY < subband->nYCBs; ++cbY) { + for (cbX = 0; cbX < subband->nXCBs; ++cbX) { + for (y = cb->y0, coeff0 = cb->coeffs; + y < cb->y1; + ++y, coeff0 += tileComp->cbW) { + dataPtr = &tileComp->data[(y - subband->y0) + * (tileComp->x1 - tileComp->x0) + + (cb->x0 - subband->x0)]; + for (x = cb->x0, coeff = coeff0; x < cb->x1; ++x, ++coeff) { + val = (int)coeff->mag; + if (val != 0) { + shift2 = shift - (cb->nZeroBitPlanes + coeff->len); + if (shift2 > 0) { + cover(94); + val = (val << shift2) + (1 << (shift2 - 1)); + } else { + cover(95); + val >>= -shift2; + } + if (qStyle == 0) { + cover(96); + if (tileComp->transform == 0) { + cover(97); + val &= -1 << fracBits; + } + } else { + cover(98); + val = (int)((double)val * mu); + } + if (coeff->flags & jpxCoeffSign) { + cover(99); + val = -val; + } + } + *dataPtr++ = val; + } + } + ++cb; + } + } + + //----- IDWT for each level + + for (r = 1; r <= tileComp->nDecompLevels; ++r) { + resLevel = &tileComp->resLevels[r]; + + // (n)LL is already in the upper-left corner of the + // tile-component data array -- interleave with (n)HL/LH/HH + // and inverse transform to get (n-1)LL, which will be stored + // in the upper-left corner of the tile-component data array + if (r == tileComp->nDecompLevels) { + cover(72); + nx0 = tileComp->x0; + ny0 = tileComp->y0; + nx1 = tileComp->x1; + ny1 = tileComp->y1; + } else { + cover(73); + nx0 = tileComp->resLevels[r+1].x0; + ny0 = tileComp->resLevels[r+1].y0; + nx1 = tileComp->resLevels[r+1].x1; + ny1 = tileComp->resLevels[r+1].y1; + } + inverseTransformLevel(tileComp, r, resLevel, nx0, ny0, nx1, ny1); + } +} + +// Do one level of the inverse transform: +// - take (n)LL from the tile-component data array +// - take (n)HL/LH/HH from <resLevel> +// - leave the resulting (n-1)LL in the tile-component data array +void JPXStream::inverseTransformLevel(JPXTileComp *tileComp, + Guint r, JPXResLevel *resLevel, + Guint nx0, Guint ny0, + Guint nx1, Guint ny1) { + JPXPrecinct *precinct; + JPXSubband *subband; + JPXCodeBlock *cb; + JPXCoeff *coeff0, *coeff; + Guint qStyle, guard, eps, shift, t; + int shift2; + double mu; + int val; + int *dataPtr; + Guint xo, yo; + Guint x, y, sb, cbX, cbY; + int xx, yy; + + //----- interleave + + // spread out LL + for (yy = resLevel->y1 - 1; yy >= (int)resLevel->y0; --yy) { + for (xx = resLevel->x1 - 1; xx >= (int)resLevel->x0; --xx) { + tileComp->data[(2 * yy - ny0) * (tileComp->x1 - tileComp->x0) + + (2 * xx - nx0)] = + tileComp->data[(yy - resLevel->y0) * (tileComp->x1 - tileComp->x0) + + (xx - resLevel->x0)]; + } + } + + // i-quant parameters + qStyle = tileComp->quantStyle & 0x1f; + guard = (tileComp->quantStyle >> 5) & 7; + + // interleave HL/LH/HH + precinct = &resLevel->precincts[0]; + for (sb = 0; sb < 3; ++sb) { + + // i-quant parameters + if (qStyle == 0) { + cover(100); + eps = (tileComp->quantSteps[3*r - 2 + sb] >> 3) & 0x1f; + shift = guard + eps - 1; + mu = 0; // make gcc happy + } else { + cover(101); + shift = guard + tileComp->prec; + if (sb == 2) { + cover(102); + ++shift; + } + t = tileComp->quantSteps[qStyle == 1 ? 0 : (3*r - 2 + sb)]; + mu = (double)(0x800 + (t & 0x7ff)) / 2048.0; + } + if (tileComp->transform == 0) { + cover(103); + shift += fracBits; + } + + // copy the subband coefficients into the data array, doing the + // fixed point adjustment and dequantization along the way + xo = (sb & 1) ? 0 : 1; + yo = (sb > 0) ? 1 : 0; + subband = &precinct->subbands[sb]; + cb = subband->cbs; + for (cbY = 0; cbY < subband->nYCBs; ++cbY) { + for (cbX = 0; cbX < subband->nXCBs; ++cbX) { + for (y = cb->y0, coeff0 = cb->coeffs; + y < cb->y1; + ++y, coeff0 += tileComp->cbW) { + dataPtr = &tileComp->data[(2 * y + yo - ny0) + * (tileComp->x1 - tileComp->x0) + + (2 * cb->x0 + xo - nx0)]; + for (x = cb->x0, coeff = coeff0; x < cb->x1; ++x, ++coeff) { + val = (int)coeff->mag; + if (val != 0) { + shift2 = shift - (cb->nZeroBitPlanes + coeff->len); + if (shift2 > 0) { + cover(74); + val = (val << shift2) + (1 << (shift2 - 1)); + } else { + cover(75); + val >>= -shift2; + } + if (qStyle == 0) { + cover(76); + if (tileComp->transform == 0) { + val &= -1 << fracBits; + } + } else { + cover(77); + val = (int)((double)val * mu); + } + if (coeff->flags & jpxCoeffSign) { + cover(78); + val = -val; + } + } + *dataPtr = val; + dataPtr += 2; + } + } + ++cb; + } + } + } + + //----- horizontal (row) transforms + dataPtr = tileComp->data; + for (y = 0; y < ny1 - ny0; ++y) { + inverseTransform1D(tileComp, dataPtr, 1, nx0, nx1); + dataPtr += tileComp->x1 - tileComp->x0; + } + + //----- vertical (column) transforms + dataPtr = tileComp->data; + for (x = 0; x < nx1 - nx0; ++x) { + inverseTransform1D(tileComp, dataPtr, + tileComp->x1 - tileComp->x0, ny0, ny1); + ++dataPtr; + } +} + +void JPXStream::inverseTransform1D(JPXTileComp *tileComp, + int *data, Guint stride, + Guint i0, Guint i1) { + int *buf; + Guint offset, end, i; + + //----- special case for length = 1 + if (i1 - i0 == 1) { + cover(79); + if (i0 & 1) { + cover(104); + *data >>= 1; + } + + } else { + cover(80); + + // choose an offset: this makes even buf[] indexes correspond to + // odd values of i, and vice versa + offset = 3 + (i0 & 1); + end = offset + i1 - i0; + + //----- gather + buf = tileComp->buf; + for (i = 0; i < i1 - i0; ++i) { + buf[offset + i] = data[i * stride]; + } + + //----- extend right + buf[end] = buf[end - 2]; + if (i1 - i0 == 2) { + cover(81); + buf[end+1] = buf[offset + 1]; + buf[end+2] = buf[offset]; + buf[end+3] = buf[offset + 1]; + } else { + cover(82); + buf[end+1] = buf[end - 3]; + if (i1 - i0 == 3) { + cover(105); + buf[end+2] = buf[offset + 1]; + buf[end+3] = buf[offset + 2]; + } else { + cover(106); + buf[end+2] = buf[end - 4]; + if (i1 - i0 == 4) { + cover(107); + buf[end+3] = buf[offset + 1]; + } else { + cover(108); + buf[end+3] = buf[end - 5]; + } + } + } + + //----- extend left + buf[offset - 1] = buf[offset + 1]; + buf[offset - 2] = buf[offset + 2]; + buf[offset - 3] = buf[offset + 3]; + if (offset == 4) { + cover(83); + buf[0] = buf[offset + 4]; + } + + //----- 9-7 irreversible filter + + if (tileComp->transform == 0) { + cover(84); + // step 1 (even) + for (i = 1; i <= end + 2; i += 2) { + buf[i] = (int)(idwtKappa * buf[i]); + } + // step 2 (odd) + for (i = 0; i <= end + 3; i += 2) { + buf[i] = (int)(idwtIKappa * buf[i]); + } + // step 3 (even) + for (i = 1; i <= end + 2; i += 2) { + buf[i] = (int)(buf[i] - idwtDelta * (buf[i-1] + buf[i+1])); + } + // step 4 (odd) + for (i = 2; i <= end + 1; i += 2) { + buf[i] = (int)(buf[i] - idwtGamma * (buf[i-1] + buf[i+1])); + } + // step 5 (even) + for (i = 3; i <= end; i += 2) { + buf[i] = (int)(buf[i] - idwtBeta * (buf[i-1] + buf[i+1])); + } + // step 6 (odd) + for (i = 4; i <= end - 1; i += 2) { + buf[i] = (int)(buf[i] - idwtAlpha * (buf[i-1] + buf[i+1])); + } + + //----- 5-3 reversible filter + + } else { + cover(85); + // step 1 (even) + for (i = 3; i <= end; i += 2) { + buf[i] -= (buf[i-1] + buf[i+1] + 2) >> 2; + } + // step 2 (odd) + for (i = 4; i < end; i += 2) { + buf[i] += (buf[i-1] + buf[i+1]) >> 1; + } + } + + //----- scatter + for (i = 0; i < i1 - i0; ++i) { + data[i * stride] = buf[offset + i]; + } + } +} + +// Inverse multi-component transform and DC level shift. This also +// converts fixed point samples back to integers. +GBool JPXStream::inverseMultiCompAndDC(JPXTile *tile) { + JPXTileComp *tileComp; + int coeff, d0, d1, d2, t, minVal, maxVal, zeroVal; + int *dataPtr; + Guint j, comp, x, y; + + //----- inverse multi-component transform + + if (tile->multiComp == 1) { + cover(86); + if (img.nComps < 3 || + tile->tileComps[0].hSep != tile->tileComps[1].hSep || + tile->tileComps[0].vSep != tile->tileComps[1].vSep || + tile->tileComps[1].hSep != tile->tileComps[2].hSep || + tile->tileComps[1].vSep != tile->tileComps[2].vSep) { + return gFalse; + } + + // inverse irreversible multiple component transform + if (tile->tileComps[0].transform == 0) { + cover(87); + j = 0; + for (y = 0; y < tile->tileComps[0].y1 - tile->tileComps[0].y0; ++y) { + for (x = 0; x < tile->tileComps[0].x1 - tile->tileComps[0].x0; ++x) { + d0 = tile->tileComps[0].data[j]; + d1 = tile->tileComps[1].data[j]; + d2 = tile->tileComps[2].data[j]; + tile->tileComps[0].data[j] = (int)(d0 + 1.402 * d2 + 0.5); + tile->tileComps[1].data[j] = + (int)(d0 - 0.34413 * d1 - 0.71414 * d2 + 0.5); + tile->tileComps[2].data[j] = (int)(d0 + 1.772 * d1 + 0.5); + ++j; + } + } + + // inverse reversible multiple component transform + } else { + cover(88); + j = 0; + for (y = 0; y < tile->tileComps[0].y1 - tile->tileComps[0].y0; ++y) { + for (x = 0; x < tile->tileComps[0].x1 - tile->tileComps[0].x0; ++x) { + d0 = tile->tileComps[0].data[j]; + d1 = tile->tileComps[1].data[j]; + d2 = tile->tileComps[2].data[j]; + tile->tileComps[1].data[j] = t = d0 - ((d2 + d1) >> 2); + tile->tileComps[0].data[j] = d2 + t; + tile->tileComps[2].data[j] = d1 + t; + ++j; + } + } + } + } + + //----- DC level shift + for (comp = 0; comp < img.nComps; ++comp) { + tileComp = &tile->tileComps[comp]; + + // signed: clip + if (tileComp->sgned) { + cover(89); + minVal = -(1 << (tileComp->prec - 1)); + maxVal = (1 << (tileComp->prec - 1)) - 1; + dataPtr = tileComp->data; + for (y = 0; y < tileComp->y1 - tileComp->y0; ++y) { + for (x = 0; x < tileComp->x1 - tileComp->x0; ++x) { + coeff = *dataPtr; + if (tileComp->transform == 0) { + cover(109); + coeff >>= fracBits; + } + if (coeff < minVal) { + cover(110); + coeff = minVal; + } else if (coeff > maxVal) { + cover(111); + coeff = maxVal; + } + *dataPtr++ = coeff; + } + } + + // unsigned: inverse DC level shift and clip + } else { + cover(90); + maxVal = (1 << tileComp->prec) - 1; + zeroVal = 1 << (tileComp->prec - 1); + dataPtr = tileComp->data; + for (y = 0; y < tileComp->y1 - tileComp->y0; ++y) { + for (x = 0; x < tileComp->x1 - tileComp->x0; ++x) { + coeff = *dataPtr; + if (tileComp->transform == 0) { + cover(112); + coeff >>= fracBits; + } + coeff += zeroVal; + if (coeff < 0) { + cover(113); + coeff = 0; + } else if (coeff > maxVal) { + cover(114); + coeff = maxVal; + } + *dataPtr++ = coeff; + } + } + } + } + + return gTrue; +} + +GBool JPXStream::readBoxHdr(Guint *boxType, Guint *boxLen, Guint *dataLen) { + Guint len, lenH; + + if (!readULong(&len) || + !readULong(boxType)) { + return gFalse; + } + if (len == 1) { + if (!readULong(&lenH) || !readULong(&len)) { + return gFalse; + } + if (lenH) { + error(getPos(), "JPX stream contains a box larger than 2^32 bytes"); + return gFalse; + } + *boxLen = len; + *dataLen = len - 16; + } else if (len == 0) { + *boxLen = 0; + *dataLen = 0; + } else { + *boxLen = len; + *dataLen = len - 8; + } + return gTrue; +} + +int JPXStream::readMarkerHdr(int *segType, Guint *segLen) { + int c; + + do { + do { + if ((c = str->getChar()) == EOF) { + return gFalse; + } + } while (c != 0xff); + do { + if ((c = str->getChar()) == EOF) { + return gFalse; + } + } while (c == 0xff); + } while (c == 0x00); + *segType = c; + if ((c >= 0x30 && c <= 0x3f) || + c == 0x4f || c == 0x92 || c == 0x93 || c == 0xd9) { + *segLen = 0; + return gTrue; + } + return readUWord(segLen); +} + +GBool JPXStream::readUByte(Guint *x) { + int c0; + + if ((c0 = str->getChar()) == EOF) { + return gFalse; + } + *x = (Guint)c0; + return gTrue; +} + +GBool JPXStream::readByte(int *x) { + int c0; + + if ((c0 = str->getChar()) == EOF) { + return gFalse; + } + *x = c0; + if (c0 & 0x80) { + *x |= -1 - 0xff; + } + return gTrue; +} + +GBool JPXStream::readUWord(Guint *x) { + int c0, c1; + + if ((c0 = str->getChar()) == EOF || + (c1 = str->getChar()) == EOF) { + return gFalse; + } + *x = (Guint)((c0 << 8) | c1); + return gTrue; +} + +GBool JPXStream::readULong(Guint *x) { + int c0, c1, c2, c3; + + if ((c0 = str->getChar()) == EOF || + (c1 = str->getChar()) == EOF || + (c2 = str->getChar()) == EOF || + (c3 = str->getChar()) == EOF) { + return gFalse; + } + *x = (Guint)((c0 << 24) | (c1 << 16) | (c2 << 8) | c3); + return gTrue; +} + +GBool JPXStream::readNBytes(int nBytes, GBool signd, int *x) { + int y, c, i; + + y = 0; + for (i = 0; i < nBytes; ++i) { + if ((c = str->getChar()) == EOF) { + return gFalse; + } + y = (y << 8) + c; + } + if (signd) { + if (y & (1 << (8 * nBytes - 1))) { + y |= -1 << (8 * nBytes); + } + } + *x = y; + return gTrue; +} + +GBool JPXStream::readBits(int nBits, Guint *x) { + int c; + + while (bitBufLen < nBits) { + if (byteCount == 0 || (c = str->getChar()) == EOF) { + return gFalse; + } + --byteCount; + if (bitBufSkip) { + bitBuf = (bitBuf << 7) | (c & 0x7f); + bitBufLen += 7; + } else { + bitBuf = (bitBuf << 8) | (c & 0xff); + bitBufLen += 8; + } + bitBufSkip = c == 0xff; + } + *x = (bitBuf >> (bitBufLen - nBits)) & ((1 << nBits) - 1); + bitBufLen -= nBits; + return gTrue; +} + +void JPXStream::startBitBuf(Guint byteCountA) { + bitBufLen = 0; + bitBufSkip = gFalse; + byteCount = byteCountA; +} + +Guint JPXStream::finishBitBuf() { + if (bitBufSkip) { + str->getChar(); + --byteCount; + } + return byteCount; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/JPXStream.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/JPXStream.h new file mode 100644 index 00000000000..2e0bda32eb3 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/JPXStream.h @@ -0,0 +1,349 @@ +//======================================================================== +// +// JPXStream.h +// +// Copyright 2002-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef JPXSTREAM_H +#define JPXSTREAM_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" +#include "Object.h" +#include "Stream.h" + +class JArithmeticDecoder; +class JArithmeticDecoderStats; + +//------------------------------------------------------------------------ + +enum JPXColorSpaceType { + jpxCSBiLevel = 0, + jpxCSYCbCr1 = 1, + jpxCSYCbCr2 = 3, + jpxCSYCBCr3 = 4, + jpxCSPhotoYCC = 9, + jpxCSCMY = 11, + jpxCSCMYK = 12, + jpxCSYCCK = 13, + jpxCSCIELab = 14, + jpxCSsRGB = 16, + jpxCSGrayscale = 17, + jpxCSBiLevel2 = 18, + jpxCSCIEJab = 19, + jpxCSCISesRGB = 20, + jpxCSROMMRGB = 21, + jpxCSsRGBYCbCr = 22, + jpxCSYPbPr1125 = 23, + jpxCSYPbPr1250 = 24 +}; + +struct JPXColorSpecCIELab { + Guint rl, ol, ra, oa, rb, ob, il; +}; + +struct JPXColorSpecEnumerated { + JPXColorSpaceType type; // color space type + union { + JPXColorSpecCIELab cieLab; + }; +}; + +struct JPXColorSpec { + Guint meth; // method + int prec; // precedence + union { + JPXColorSpecEnumerated enumerated; + }; +}; + +//------------------------------------------------------------------------ + +struct JPXPalette { + Guint nEntries; // number of entries in the palette + Guint nComps; // number of components in each entry + Guint *bpc; // bits per component, for each component + int *c; // color data: + // c[i*nComps+j] = entry i, component j +}; + +//------------------------------------------------------------------------ + +struct JPXCompMap { + Guint nChannels; // number of channels + Guint *comp; // codestream components mapped to each channel + Guint *type; // 0 for direct use, 1 for palette mapping + Guint *pComp; // palette components to use +}; + +//------------------------------------------------------------------------ + +struct JPXChannelDefn { + Guint nChannels; // number of channels + Guint *idx; // channel indexes + Guint *type; // channel types + Guint *assoc; // channel associations +}; + +//------------------------------------------------------------------------ + +struct JPXTagTreeNode { + GBool finished; // true if this node is finished + Guint val; // current value +}; + +//------------------------------------------------------------------------ + +struct JPXCoeff { + Gushort flags; // flag bits + Gushort len; // number of significant bits in mag + Guint mag; // magnitude value +}; + +// coefficient flags +#define jpxCoeffSignificantB 0 +#define jpxCoeffTouchedB 1 +#define jpxCoeffFirstMagRefB 2 +#define jpxCoeffSignB 7 +#define jpxCoeffSignificant (1 << jpxCoeffSignificantB) +#define jpxCoeffTouched (1 << jpxCoeffTouchedB) +#define jpxCoeffFirstMagRef (1 << jpxCoeffFirstMagRefB) +#define jpxCoeffSign (1 << jpxCoeffSignB) + +//------------------------------------------------------------------------ + +struct JPXCodeBlock { + //----- size + Guint x0, y0, x1, y1; // bounds + + //----- persistent state + GBool seen; // true if this code-block has already + // been seen + Guint lBlock; // base number of bits used for pkt data length + Guint nextPass; // next coding pass + + //---- info from first packet + Guint nZeroBitPlanes; // number of zero bit planes + + //----- info for the current packet + Guint included; // code-block inclusion in this packet: + // 0=not included, 1=included + Guint nCodingPasses; // number of coding passes in this pkt + Guint dataLen; // pkt data length + + //----- coefficient data + JPXCoeff *coeffs; // the coefficients + JArithmeticDecoder // arithmetic decoder + *arithDecoder; + JArithmeticDecoderStats // arithmetic decoder stats + *stats; +}; + +//------------------------------------------------------------------------ + +struct JPXSubband { + //----- computed + Guint x0, y0, x1, y1; // bounds + Guint nXCBs, nYCBs; // number of code-blocks in the x and y + // directions + + //----- tag trees + Guint maxTTLevel; // max tag tree level + JPXTagTreeNode *inclusion; // inclusion tag tree for each subband + JPXTagTreeNode *zeroBitPlane; // zero-bit plane tag tree for each + // subband + + //----- children + JPXCodeBlock *cbs; // the code-blocks (len = nXCBs * nYCBs) +}; + +//------------------------------------------------------------------------ + +struct JPXPrecinct { + //----- computed + Guint x0, y0, x1, y1; // bounds of the precinct + + //----- children + JPXSubband *subbands; // the subbands +}; + +//------------------------------------------------------------------------ + +struct JPXResLevel { + //----- from the COD and COC segments (main and tile) + Guint precinctWidth; // log2(precinct width) + Guint precinctHeight; // log2(precinct height) + + //----- computed + Guint x0, y0, x1, y1; // bounds of the tile-comp (for this res level) + Guint bx0[3], by0[3], // subband bounds + bx1[3], by1[3]; + + //---- children + JPXPrecinct *precincts; // the precincts +}; + +//------------------------------------------------------------------------ + +struct JPXTileComp { + //----- from the SIZ segment + GBool sgned; // 1 for signed, 0 for unsigned + Guint prec; // precision, in bits + Guint hSep; // horizontal separation of samples + Guint vSep; // vertical separation of samples + + //----- from the COD and COC segments (main and tile) + Guint style; // coding style parameter (Scod / Scoc) + Guint nDecompLevels; // number of decomposition levels + Guint codeBlockW; // log2(code-block width) + Guint codeBlockH; // log2(code-block height) + Guint codeBlockStyle; // code-block style + Guint transform; // wavelet transformation + + //----- from the QCD and QCC segments (main and tile) + Guint quantStyle; // quantization style + Guint *quantSteps; // quantization step size for each subband + Guint nQuantSteps; // number of entries in quantSteps + + //----- computed + Guint x0, y0, x1, y1; // bounds of the tile-comp, in ref coords + Guint cbW; // code-block width + Guint cbH; // code-block height + + //----- image data + int *data; // the decoded image data + int *buf; // intermediate buffer for the inverse + // transform + + //----- children + JPXResLevel *resLevels; // the resolution levels + // (len = nDecompLevels + 1) +}; + +//------------------------------------------------------------------------ + +struct JPXTile { + //----- from the COD segments (main and tile) + Guint progOrder; // progression order + Guint nLayers; // number of layers + Guint multiComp; // multiple component transformation + + //----- computed + Guint x0, y0, x1, y1; // bounds of the tile, in ref coords + Guint maxNDecompLevels; // max number of decomposition levels used + // in any component in this tile + + //----- progression order loop counters + Guint comp; // component + Guint res; // resolution level + Guint precinct; // precinct + Guint layer; // layer + + //----- children + JPXTileComp *tileComps; // the tile-components (len = JPXImage.nComps) +}; + +//------------------------------------------------------------------------ + +struct JPXImage { + //----- from the SIZ segment + Guint xSize, ySize; // size of reference grid + Guint xOffset, yOffset; // image offset + Guint xTileSize, yTileSize; // size of tiles + Guint xTileOffset, // offset of first tile + yTileOffset; + Guint nComps; // number of components + + //----- computed + Guint nXTiles; // number of tiles in x direction + Guint nYTiles; // number of tiles in y direction + + //----- children + JPXTile *tiles; // the tiles (len = nXTiles * nYTiles) +}; + +//------------------------------------------------------------------------ + +class JPXStream: public FilterStream { +public: + + JPXStream(Stream *strA); + virtual ~JPXStream(); + virtual StreamKind getKind() { return strJPX; } + virtual void reset(); + virtual void close(); + virtual int getChar(); + virtual int lookChar(); + virtual GooString *getPSFilter(int psLevel, char *indent); + virtual GBool isBinary(GBool last = gTrue); + virtual void getImageParams(int *bitsPerComponent, + StreamColorSpaceMode *csMode); + +private: + + void fillReadBuf(); + void getImageParams2(int *bitsPerComponent, StreamColorSpaceMode *csMode); + GBool readBoxes(); + GBool readColorSpecBox(Guint dataLen); + GBool readCodestream(Guint len); + GBool readTilePart(); + GBool readTilePartData(Guint tileIdx, + Guint tilePartLen, GBool tilePartToEOC); + GBool readCodeBlockData(JPXTileComp *tileComp, + JPXResLevel *resLevel, + JPXPrecinct *precinct, + JPXSubband *subband, + Guint res, Guint sb, + JPXCodeBlock *cb); + void inverseTransform(JPXTileComp *tileComp); + void inverseTransformLevel(JPXTileComp *tileComp, + Guint r, JPXResLevel *resLevel, + Guint nx0, Guint ny0, + Guint nx1, Guint ny1); + void inverseTransform1D(JPXTileComp *tileComp, + int *data, Guint stride, + Guint i0, Guint i1); + GBool inverseMultiCompAndDC(JPXTile *tile); + GBool readBoxHdr(Guint *boxType, Guint *boxLen, Guint *dataLen); + int readMarkerHdr(int *segType, Guint *segLen); + GBool readUByte(Guint *x); + GBool readByte(int *x); + GBool readUWord(Guint *x); + GBool readULong(Guint *x); + GBool readNBytes(int nBytes, GBool signd, int *x); + GBool readBits(int nBits, Guint *x); + void startBitBuf(Guint byteCountA); + Guint finishBitBuf(); + + Guint nComps; // number of components + Guint *bpc; // bits per component, for each component + Guint width, height; // image size + GBool haveImgHdr; // set if a JP2/JPX image header has been + // found + JPXColorSpec cs; // color specification + GBool haveCS; // set if a color spec has been found + JPXPalette palette; // the palette + GBool havePalette; // set if a palette has been found + JPXCompMap compMap; // the component mapping + GBool haveCompMap; // set if a component mapping has been found + JPXChannelDefn channelDefn; // channel definition + GBool haveChannelDefn; // set if a channel defn has been found + + JPXImage img; // JPEG2000 decoder data + Guint bitBuf; // buffer for bit reads + int bitBufLen; // number of bits in bitBuf + GBool bitBufSkip; // true if next bit should be skipped + // (for bit stuffing) + Guint byteCount; // number of available bytes left + + Guint curX, curY, curComp; // current position for lookChar/getChar + Guint readBuf; // read buffer + Guint readBufLen; // number of valid bits in readBuf +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Lexer.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Lexer.cc new file mode 100644 index 00000000000..880e066e20b --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Lexer.cc @@ -0,0 +1,600 @@ +//======================================================================== +// +// Lexer.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006-2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// Copyright (C) 2010 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2012 Adrian Johnson <ajohnson@redneon.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include <stddef.h> +#include <string.h> +#include <limits.h> +#include <ctype.h> +#include "Lexer.h" +#include "Error.h" +#include "XRef.h" + +//------------------------------------------------------------------------ + +// A '1' in this array means the character is white space. A '1' or +// '2' means the character ends a name or command. +static const char specialChars[256] = { + 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, // 0x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1x + 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, // 2x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, // 3x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 5x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 7x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ax + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // bx + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // cx + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // dx + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ex + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // fx +}; + +static const int IntegerSafeLimit = (INT_MAX - 9) / 10; + +//------------------------------------------------------------------------ +// Lexer +//------------------------------------------------------------------------ + +Lexer::Lexer(XRef *xrefA, Stream *str) { + Object obj; + + lookCharLastValueCached = LOOK_VALUE_NOT_CACHED; + xref = xrefA; + + curStr.initStream(str); + streams = new Array(xref); + streams->add(curStr.copy(&obj)); + strPtr = 0; + freeArray = gTrue; + curStr.streamReset(); +} + +Lexer::Lexer(XRef *xrefA, Object *obj) { + Object obj2; + + lookCharLastValueCached = LOOK_VALUE_NOT_CACHED; + xref = xrefA; + + if (obj->isStream()) { + streams = new Array(xref); + freeArray = gTrue; + streams->add(obj->copy(&obj2)); + } else { + streams = obj->getArray(); + freeArray = gFalse; + } + strPtr = 0; + if (streams->getLength() > 0) { + streams->get(strPtr, &curStr); + curStr.streamReset(); + } +} + +Lexer::~Lexer() { + if (!curStr.isNone()) { + curStr.streamClose(); + curStr.free(); + } + if (freeArray) { + delete streams; + } +} + +int Lexer::getChar(GBool comesFromLook) { + int c; + + if (LOOK_VALUE_NOT_CACHED != lookCharLastValueCached) { + c = lookCharLastValueCached; + lookCharLastValueCached = LOOK_VALUE_NOT_CACHED; + return c; + } + + c = EOF; + while (!curStr.isNone() && (c = curStr.streamGetChar()) == EOF) { + if (comesFromLook == gTrue) { + return EOF; + } else { + curStr.streamClose(); + curStr.free(); + ++strPtr; + if (strPtr < streams->getLength()) { + streams->get(strPtr, &curStr); + curStr.streamReset(); + } + } + } + return c; +} + +int Lexer::lookChar() { + + if (LOOK_VALUE_NOT_CACHED != lookCharLastValueCached) { + return lookCharLastValueCached; + } + lookCharLastValueCached = getChar(gTrue); + if (lookCharLastValueCached == EOF) { + lookCharLastValueCached = LOOK_VALUE_NOT_CACHED; + return EOF; + } else { + return lookCharLastValueCached; + } +} + +Object *Lexer::getObj(Object *obj, int objNum) { + char *p; + int c, c2; + GBool comment, neg, done, overflownInteger, overflownUnsignedInteger; + int numParen; + int xi; + unsigned int xui = 0; + double xf = 0, scale; + GooString *s; + int n, m; + + // skip whitespace and comments + comment = gFalse; + while (1) { + if ((c = getChar()) == EOF) { + return obj->initEOF(); + } + if (comment) { + if (c == '\r' || c == '\n') + comment = gFalse; + } else if (c == '%') { + comment = gTrue; + } else if (specialChars[c] != 1) { + break; + } + } + + // start reading token + switch (c) { + + // number + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case '+': case '-': case '.': + overflownInteger = gFalse; + overflownUnsignedInteger = gFalse; + neg = gFalse; + xi = 0; + if (c == '-') { + neg = gTrue; + } else if (c == '.') { + goto doReal; + } else if (c != '+') { + xi = c - '0'; + } + while (1) { + c = lookChar(); + if (isdigit(c)) { + getChar(); + if (unlikely(overflownInteger)) { + if (overflownUnsignedInteger) { + xf = xf * 10.0 + (c - '0'); + } else { + overflownUnsignedInteger = gTrue; + xf = xui * 10.0 + (c - '0'); + } + } else { + if (unlikely(xi > IntegerSafeLimit) && + (xi > (INT_MAX - (c - '0')) / 10.0)) { + overflownInteger = gTrue; + if (xi > (UINT_MAX - (c - '0')) / 10.0) { + overflownUnsignedInteger = gTrue; + xf = xi * 10.0 + (c - '0'); + } else { + xui = (unsigned int)(xi * 10.0 + (c - '0')); + } + } else { + xi = xi * 10 + (c - '0'); + } + } + } else if (c == '.') { + getChar(); + goto doReal; + } else { + break; + } + } + if (neg) { + xi = -xi; + xf = -xf; + } + if (unlikely(overflownInteger)) { + if (overflownUnsignedInteger) { + obj->initReal(xf); + } else { + obj->initUint(xui); + } + } else { + obj->initInt(xi); + } + break; + doReal: + if (likely(!overflownInteger)) { + xf = xi; + } else if (!overflownUnsignedInteger) { + xf = xui; + } + scale = 0.1; + while (1) { + c = lookChar(); + if (c == '-') { + // ignore minus signs in the middle of numbers to match + // Adobe's behavior + error(getPos(), "Badly formatted number"); + getChar(); + continue; + } + if (!isdigit(c)) { + break; + } + getChar(); + xf = xf + scale * (c - '0'); + scale *= 0.1; + } + if (neg) + xf = -xf; + obj->initReal(xf); + break; + + // string + case '(': + p = tokBuf; + n = 0; + numParen = 1; + done = gFalse; + s = NULL; + do { + c2 = EOF; + switch (c = getChar()) { + + case EOF: +#if 0 + // This breaks some PDF files, e.g., ones from Photoshop. + case '\r': + case '\n': +#endif + error(getPos(), "Unterminated string"); + done = gTrue; + break; + + case '(': + ++numParen; + c2 = c; + break; + + case ')': + if (--numParen == 0) { + done = gTrue; + } else { + c2 = c; + } + break; + + case '\\': + switch (c = getChar()) { + case 'n': + c2 = '\n'; + break; + case 'r': + c2 = '\r'; + break; + case 't': + c2 = '\t'; + break; + case 'b': + c2 = '\b'; + break; + case 'f': + c2 = '\f'; + break; + case '\\': + case '(': + case ')': + c2 = c; + break; + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + c2 = c - '0'; + c = lookChar(); + if (c >= '0' && c <= '7') { + getChar(); + c2 = (c2 << 3) + (c - '0'); + c = lookChar(); + if (c >= '0' && c <= '7') { + getChar(); + c2 = (c2 << 3) + (c - '0'); + } + } + break; + case '\r': + c = lookChar(); + if (c == '\n') { + getChar(); + } + break; + case '\n': + break; + case EOF: + error(getPos(), "Unterminated string"); + done = gTrue; + break; + default: + c2 = c; + break; + } + break; + + default: + c2 = c; + break; + } + + if (c2 != EOF) { + if (n == tokBufSize) { + if (!s) + s = new GooString(tokBuf, tokBufSize); + else + s->append(tokBuf, tokBufSize); + p = tokBuf; + n = 0; + + // we are growing see if the document is not malformed and we are growing too much + if (objNum > 0 && xref != NULL) + { + int newObjNum = xref->getNumEntry(curStr.streamGetPos()); + if (newObjNum != objNum) + { + error(getPos(), "Unterminated string"); + done = gTrue; + delete s; + n = -2; + } + } + } + *p++ = (char)c2; + ++n; + } + } while (!done); + if (n >= 0) { + if (!s) + s = new GooString(tokBuf, n); + else + s->append(tokBuf, n); + obj->initString(s); + } else { + obj->initEOF(); + } + break; + + // name + case '/': + p = tokBuf; + n = 0; + s = NULL; + while ((c = lookChar()) != EOF && !specialChars[c]) { + getChar(); + if (c == '#') { + c2 = lookChar(); + if (c2 >= '0' && c2 <= '9') { + c = c2 - '0'; + } else if (c2 >= 'A' && c2 <= 'F') { + c = c2 - 'A' + 10; + } else if (c2 >= 'a' && c2 <= 'f') { + c = c2 - 'a' + 10; + } else { + goto notEscChar; + } + getChar(); + c <<= 4; + c2 = getChar(); + if (c2 >= '0' && c2 <= '9') { + c += c2 - '0'; + } else if (c2 >= 'A' && c2 <= 'F') { + c += c2 - 'A' + 10; + } else if (c2 >= 'a' && c2 <= 'f') { + c += c2 - 'a' + 10; + } else { + error(getPos(), "Illegal digit in hex char in name"); + } + } + notEscChar: + if (n == tokBufSize) { + if (!s) + { + error(getPos(), "Warning: name token is longer than what the specification says it can be"); + s = new GooString(tokBuf, tokBufSize); + } + else + { + // the spec says 127 is the maximum, we are already at 256 so bail out + error(getPos(), "Name token too long"); + break; + } + p = tokBuf; + n = 0; + } + *p++ = c; + ++n; + } + *p = '\0'; + if (s) { + s->append(tokBuf, n); + obj->initName(s->getCString()); + delete s; + } else obj->initName(tokBuf); + break; + + // array punctuation + case '[': + case ']': + tokBuf[0] = c; + tokBuf[1] = '\0'; + obj->initCmd(tokBuf); + break; + + // hex string or dict punctuation + case '<': + c = lookChar(); + + // dict punctuation + if (c == '<') { + getChar(); + tokBuf[0] = tokBuf[1] = '<'; + tokBuf[2] = '\0'; + obj->initCmd(tokBuf); + + // hex string + } else { + p = tokBuf; + m = n = 0; + c2 = 0; + s = NULL; + while (1) { + c = getChar(); + if (c == '>') { + break; + } else if (c == EOF) { + error(getPos(), "Unterminated hex string"); + break; + } else if (specialChars[c] != 1) { + c2 = c2 << 4; + if (c >= '0' && c <= '9') + c2 += c - '0'; + else if (c >= 'A' && c <= 'F') + c2 += c - 'A' + 10; + else if (c >= 'a' && c <= 'f') + c2 += c - 'a' + 10; + else + error(getPos(), "Illegal character <%02x> in hex string", c); + if (++m == 2) { + if (n == tokBufSize) { + if (!s) + s = new GooString(tokBuf, tokBufSize); + else + s->append(tokBuf, tokBufSize); + p = tokBuf; + n = 0; + } + *p++ = (char)c2; + ++n; + c2 = 0; + m = 0; + } + } + } + if (!s) + s = new GooString(tokBuf, n); + else + s->append(tokBuf, n); + if (m == 1) + s->append((char)(c2 << 4)); + obj->initString(s); + } + break; + + // dict punctuation + case '>': + c = lookChar(); + if (c == '>') { + getChar(); + tokBuf[0] = tokBuf[1] = '>'; + tokBuf[2] = '\0'; + obj->initCmd(tokBuf); + } else { + error(getPos(), "Illegal character '>'"); + obj->initError(); + } + break; + + // error + case ')': + case '{': + case '}': + error(getPos(), "Illegal character '%c'", c); + obj->initError(); + break; + + // command + default: + p = tokBuf; + *p++ = c; + n = 1; + while ((c = lookChar()) != EOF && !specialChars[c]) { + getChar(); + if (++n == tokBufSize) { + error(getPos(), "Command token too long"); + break; + } + *p++ = c; + } + *p = '\0'; + if (tokBuf[0] == 't' && !strcmp(tokBuf, "true")) { + obj->initBool(gTrue); + } else if (tokBuf[0] == 'f' && !strcmp(tokBuf, "false")) { + obj->initBool(gFalse); + } else if (tokBuf[0] == 'n' && !strcmp(tokBuf, "null")) { + obj->initNull(); + } else { + obj->initCmd(tokBuf); + } + break; + } + + return obj; +} + +void Lexer::skipToNextLine() { + int c; + + while (1) { + c = getChar(); + if (c == EOF || c == '\n') { + return; + } + if (c == '\r') { + if ((c = lookChar()) == '\n') { + getChar(); + } + return; + } + } +} + +GBool Lexer::isSpace(int c) { + return c >= 0 && c <= 0xff && specialChars[c] == 1; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Lexer.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Lexer.h new file mode 100644 index 00000000000..284479dfbfa --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Lexer.h @@ -0,0 +1,105 @@ +//======================================================================== +// +// Lexer.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006, 2007, 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef LEXER_H +#define LEXER_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "Object.h" +#include "Stream.h" + +class XRef; + +#define tokBufSize 128 // size of token buffer + +//------------------------------------------------------------------------ +// Lexer +//------------------------------------------------------------------------ + +class Lexer { +public: + + // Construct a lexer for a single stream. Deletes the stream when + // lexer is deleted. + Lexer(XRef *xrefA, Stream *str); + + // Construct a lexer for a stream or array of streams (assumes obj + // is either a stream or array of streams). + Lexer(XRef *xrefA, Object *obj); + + // Destructor. + ~Lexer(); + + // Get the next object from the input stream. + Object *getObj(Object *obj, int objNum = -1); + + // Skip to the beginning of the next line in the input stream. + void skipToNextLine(); + + // Skip over one character. + void skipChar() { getChar(); } + + // Get stream. + Stream *getStream() + { return curStr.isStream() ? curStr.getStream() : (Stream *)NULL; } + + // Get current position in file. This is only used for error + // messages, so it returns an int instead of a Guint. + int getPos() + { return curStr.isStream() ? (int)curStr.streamGetPos() : -1; } + + // Set position in file. + void setPos(Guint pos, int dir = 0) + { if (curStr.isStream()) curStr.streamSetPos(pos, dir); } + + // Returns true if <c> is a whitespace character. + static GBool isSpace(int c); + + + // often (e.g. ~30% on PDF Refernce 1.6 pdf file from Adobe site) getChar + // is called right after lookChar. In order to avoid expensive re-doing + // getChar() of underlying stream, we cache the last value found by + // lookChar() in lookCharLastValueCached. A special value + // LOOK_VALUE_NOT_CACHED that should never be part of stream indicates + // that no value was cached + static const int LOOK_VALUE_NOT_CACHED = -3; + int lookCharLastValueCached; + +private: + + int getChar(GBool comesFromLook = gFalse); + int lookChar(); + + Array *streams; // array of input streams + int strPtr; // index of current stream + Object curStr; // current stream + GBool freeArray; // should lexer free the streams array? + char tokBuf[tokBufSize]; // temporary token buffer + + XRef *xref; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Linearization.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Linearization.cc new file mode 100644 index 00000000000..73dc5adc3b3 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Linearization.cc @@ -0,0 +1,222 @@ +//======================================================================== +// +// Linearization.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// +//======================================================================== + +#include "Linearization.h" +#include "Parser.h" +#include "Lexer.h" + +//------------------------------------------------------------------------ +// Linearization +//------------------------------------------------------------------------ + +Linearization::Linearization (BaseStream *str) +{ + Parser *parser; + Object obj1, obj2, obj3, obj5; + + linDict.initNull(); + + str->reset(); + obj1.initNull(); + parser = new Parser(NULL, + new Lexer(NULL, str->makeSubStream(str->getStart(), gFalse, 0, &obj1)), + gFalse); + parser->getObj(&obj1); + parser->getObj(&obj2); + parser->getObj(&obj3); + parser->getObj(&linDict); + if (obj1.isInt() && obj2.isInt() && obj3.isCmd("obj") && linDict.isDict()) { + linDict.dictLookup("Linearized", &obj5); + if (!(obj5.isNum() && obj5.getNum() > 0)) { + linDict.free(); + linDict.initNull(); + } + obj5.free(); + } + obj3.free(); + obj2.free(); + obj1.free(); + delete parser; +} + +Linearization:: ~Linearization() +{ + linDict.free(); +} + +Guint Linearization::getLength() +{ + if (!linDict.isDict()) return 0; + + int length; + if (linDict.getDict()->lookupInt("L", NULL, &length) && + length > 0) { + return length; + } else { + error(-1, "Length in linearization table is invalid"); + return 0; + } +} + +Guint Linearization::getHintsOffset() +{ + int hintsOffset; + + Object obj1, obj2; + if (linDict.isDict() && + linDict.dictLookup("H", &obj1)->isArray() && + obj1.arrayGetLength()>=2 && + obj1.arrayGet(0, &obj2)->isInt() && + obj2.getInt() > 0) { + hintsOffset = obj2.getInt(); + } else { + error(-1, "Hints table offset in linearization table is invalid"); + hintsOffset = 0; + } + obj2.free(); + obj1.free(); + + return hintsOffset; +} + +Guint Linearization::getHintsLength() +{ + int hintsLength; + + Object obj1, obj2; + if (linDict.isDict() && + linDict.dictLookup("H", &obj1)->isArray() && + obj1.arrayGetLength()>=2 && + obj1.arrayGet(1, &obj2)->isInt() && + obj2.getInt() > 0) { + hintsLength = obj2.getInt(); + } else { + error(-1, "Hints table length in linearization table is invalid"); + hintsLength = 0; + } + obj2.free(); + obj1.free(); + + return hintsLength; +} + +Guint Linearization::getHintsOffset2() +{ + int hintsOffset2 = 0; // default to 0 + + Object obj1, obj2; + if (linDict.isDict() && + linDict.dictLookup("H", &obj1)->isArray() && + obj1.arrayGetLength()>=4) { + if (obj1.arrayGet(2, &obj2)->isInt() && + obj2.getInt() > 0) { + hintsOffset2 = obj2.getInt(); + } else { + error(-1, "Second hints table offset in linearization table is invalid"); + hintsOffset2 = 0; + } + } + obj2.free(); + obj1.free(); + + return hintsOffset2; +} + +Guint Linearization::getHintsLength2() +{ + int hintsLength2 = 0; // default to 0 + + Object obj1, obj2; + if (linDict.isDict() && + linDict.dictLookup("H", &obj1)->isArray() && + obj1.arrayGetLength()>=4) { + if (obj1.arrayGet(3, &obj2)->isInt() && + obj2.getInt() > 0) { + hintsLength2 = obj2.getInt(); + } else { + error(-1, "Second hints table length in linearization table is invalid"); + hintsLength2 = 0; + } + } + obj2.free(); + obj1.free(); + + return hintsLength2; +} + +int Linearization::getObjectNumberFirst() +{ + int objectNumberFirst = 0; + if (linDict.isDict() && + linDict.getDict()->lookupInt("O", NULL, &objectNumberFirst) && + objectNumberFirst > 0) { + return objectNumberFirst; + } else { + error(-1, "Object number of first page in linearization table is invalid"); + return 0; + } +} + +Guint Linearization::getEndFirst() +{ + int pageEndFirst = 0; + if (linDict.isDict() && + linDict.getDict()->lookupInt("E", NULL, &pageEndFirst) && + pageEndFirst > 0) { + return pageEndFirst; + } else { + error(-1, "First page end offset in linearization table is invalid"); + return 0; + } +} + +int Linearization::getNumPages() +{ + int numPages = 0; + if (linDict.isDict() && + linDict.getDict()->lookupInt("N", NULL, &numPages) && + numPages > 0) { + return numPages; + } else { + error(-1, "Page count in linearization table is invalid"); + return 0; + } +} + +Guint Linearization::getMainXRefEntriesOffset() +{ + int mainXRefEntriesOffset = 0; + if (linDict.isDict() && + linDict.getDict()->lookupInt("T", NULL, &mainXRefEntriesOffset) && + mainXRefEntriesOffset > 0) { + return mainXRefEntriesOffset; + } else { + error(-1, "Main Xref offset in linearization table is invalid"); + return 0; + } +} + +int Linearization::getPageFirst() +{ + int pageFirst = 0; // Optional, defaults to 0. + + if (linDict.isDict()) { + linDict.getDict()->lookupInt("P", NULL, &pageFirst); + } + + if (pageFirst < 0) { + error(-1, "First page in linearization table is invalid"); + return 0; + } + + return pageFirst; +} + + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Linearization.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Linearization.h new file mode 100644 index 00000000000..6728a750aba --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Linearization.h @@ -0,0 +1,45 @@ +//======================================================================== +// +// Linearization.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// +//======================================================================== + +#ifndef LINEARIZATION_H +#define LINEARIZATION_H + +#include "goo/gtypes.h" +#include "Object.h" +class BaseStream; + +//------------------------------------------------------------------------ +// Linearization +//------------------------------------------------------------------------ + +class Linearization { +public: + + Linearization(BaseStream *str); + ~Linearization(); + + Guint getLength(); + Guint getHintsOffset(); + Guint getHintsLength(); + Guint getHintsOffset2(); + Guint getHintsLength2(); + int getObjectNumberFirst(); + Guint getEndFirst(); + int getNumPages(); + Guint getMainXRefEntriesOffset(); + int getPageFirst(); + +private: + + Object linDict; + +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Link.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Link.cc new file mode 100644 index 00000000000..971accf2810 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Link.cc @@ -0,0 +1,921 @@ +//======================================================================== +// +// Link.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006, 2008 Pino Toscano <pino@kde.org> +// Copyright (C) 2007, 2010, 2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2008 Hugo Mercier <hmercier31@gmail.com> +// Copyright (C) 2008-2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> +// Copyright (C) 2009 Ilya Gorenbein <igorenbein@finjan.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stddef.h> +#include <string.h> +#include "goo/gmem.h" +#include "goo/GooString.h" +#include "goo/GooList.h" +#include "Error.h" +#include "Object.h" +#include "Array.h" +#include "Dict.h" +#include "Link.h" +#include "Sound.h" +#include "FileSpec.h" +#include "Rendition.h" +#include "Annot.h" + +//------------------------------------------------------------------------ +// LinkAction +//------------------------------------------------------------------------ + +LinkAction *LinkAction::parseDest(Object *obj) { + LinkAction *action; + + action = new LinkGoTo(obj); + if (!action->isOk()) { + delete action; + return NULL; + } + return action; +} + +LinkAction *LinkAction::parseAction(Object *obj, GooString *baseURI) { + LinkAction *action; + Object obj2, obj3, obj4; + + if (!obj->isDict()) { + error(-1, "parseAction: Bad annotation action for URI '%s'", + baseURI ? baseURI->getCString() : "NULL"); + return NULL; + } + + obj->dictLookup("S", &obj2); + + // GoTo action + if (obj2.isName("GoTo")) { + obj->dictLookup("D", &obj3); + action = new LinkGoTo(&obj3); + obj3.free(); + + // GoToR action + } else if (obj2.isName("GoToR")) { + obj->dictLookup("F", &obj3); + obj->dictLookup("D", &obj4); + action = new LinkGoToR(&obj3, &obj4); + obj3.free(); + obj4.free(); + + // Launch action + } else if (obj2.isName("Launch")) { + action = new LinkLaunch(obj); + + // URI action + } else if (obj2.isName("URI")) { + obj->dictLookup("URI", &obj3); + action = new LinkURI(&obj3, baseURI); + obj3.free(); + + // Named action + } else if (obj2.isName("Named")) { + obj->dictLookup("N", &obj3); + action = new LinkNamed(&obj3); + obj3.free(); + + // Movie action + } else if (obj2.isName("Movie")) { + action = new LinkMovie(obj); + + // Rendition action + } else if (obj2.isName("Rendition")) { + action = new LinkRendition(obj); + + // Sound action + } else if (obj2.isName("Sound")) { + action = new LinkSound(obj); + + // JavaScript action + } else if (obj2.isName("JavaScript")) { + obj->dictLookup("JS", &obj3); + action = new LinkJavaScript(&obj3); + obj3.free(); + + // Set-OCG-State action + } else if (obj2.isName("SetOCGState")) { + action = new LinkOCGState(obj); + + // unknown action + } else if (obj2.isName()) { + action = new LinkUnknown(obj2.getName()); + + // action is missing or wrong type + } else { + error(-1, "parseAction: Unknown annotation action object: URI = '%s'", + baseURI ? baseURI->getCString() : "NULL"); + action = NULL; + } + + obj2.free(); + + if (action && !action->isOk()) { + delete action; + return NULL; + } + return action; +} + +//------------------------------------------------------------------------ +// LinkDest +//------------------------------------------------------------------------ + +LinkDest::LinkDest(Array *a) { + Object obj1, obj2; + + // initialize fields + left = bottom = right = top = zoom = 0; + changeLeft = changeTop = changeZoom = gFalse; + ok = gFalse; + + // get page + if (a->getLength() < 2) { + error(-1, "Annotation destination array is too short"); + return; + } + a->getNF(0, &obj1); + if (obj1.isInt()) { + pageNum = obj1.getInt() + 1; + pageIsRef = gFalse; + } else if (obj1.isRef()) { + pageRef.num = obj1.getRefNum(); + pageRef.gen = obj1.getRefGen(); + pageIsRef = gTrue; + } else { + error(-1, "Bad annotation destination"); + goto err2; + } + obj1.free(); + + // get destination type + a->get(1, &obj1); + + // XYZ link + if (obj1.isName("XYZ")) { + kind = destXYZ; + if (a->getLength() < 3) { + changeLeft = gFalse; + } else { + a->get(2, &obj2); + if (obj2.isNull()) { + changeLeft = gFalse; + } else if (obj2.isNum()) { + changeLeft = gTrue; + left = obj2.getNum(); + } else { + error(-1, "Bad annotation destination position"); + goto err1; + } + obj2.free(); + } + if (a->getLength() < 4) { + changeTop = gFalse; + } else { + a->get(3, &obj2); + if (obj2.isNull()) { + changeTop = gFalse; + } else if (obj2.isNum()) { + changeTop = gTrue; + top = obj2.getNum(); + } else { + error(-1, "Bad annotation destination position"); + goto err1; + } + obj2.free(); + } + if (a->getLength() < 5) { + changeZoom = gFalse; + } else { + a->get(4, &obj2); + if (obj2.isNull()) { + changeZoom = gFalse; + } else if (obj2.isNum()) { + changeZoom = gTrue; + zoom = obj2.getNum(); + } else { + error(-1, "Bad annotation destination position"); + goto err1; + } + obj2.free(); + } + + // Fit link + } else if (obj1.isName("Fit")) { + if (a->getLength() < 2) { + error(-1, "Annotation destination array is too short"); + goto err2; + } + kind = destFit; + + // FitH link + } else if (obj1.isName("FitH")) { + if (a->getLength() < 3) { + error(-1, "Annotation destination array is too short"); + goto err2; + } + kind = destFitH; + a->get(2, &obj2); + if (obj2.isNull()) { + changeTop = gFalse; + } else if (obj2.isNum()) { + changeTop = gTrue; + top = obj2.getNum(); + } else { + error(-1, "Bad annotation destination position"); + kind = destFit; + } + obj2.free(); + + // FitV link + } else if (obj1.isName("FitV")) { + if (a->getLength() < 3) { + error(-1, "Annotation destination array is too short"); + goto err2; + } + kind = destFitV; + a->get(2, &obj2); + if (obj2.isNull()) { + changeLeft = gFalse; + } else if (obj2.isNum()) { + changeLeft = gTrue; + left = obj2.getNum(); + } else { + error(-1, "Bad annotation destination position"); + kind = destFit; + } + obj2.free(); + + // FitR link + } else if (obj1.isName("FitR")) { + if (a->getLength() < 6) { + error(-1, "Annotation destination array is too short"); + goto err2; + } + kind = destFitR; + if (!a->get(2, &obj2)->isNum()) { + error(-1, "Bad annotation destination position"); + kind = destFit; + } + left = obj2.getNum(); + obj2.free(); + if (!a->get(3, &obj2)->isNum()) { + error(-1, "Bad annotation destination position"); + kind = destFit; + } + bottom = obj2.getNum(); + obj2.free(); + if (!a->get(4, &obj2)->isNum()) { + error(-1, "Bad annotation destination position"); + kind = destFit; + } + right = obj2.getNum(); + obj2.free(); + if (!a->get(5, &obj2)->isNum()) { + error(-1, "Bad annotation destination position"); + kind = destFit; + } + top = obj2.getNum(); + obj2.free(); + + // FitB link + } else if (obj1.isName("FitB")) { + if (a->getLength() < 2) { + error(-1, "Annotation destination array is too short"); + goto err2; + } + kind = destFitB; + + // FitBH link + } else if (obj1.isName("FitBH")) { + if (a->getLength() < 3) { + error(-1, "Annotation destination array is too short"); + goto err2; + } + kind = destFitBH; + a->get(2, &obj2); + if (obj2.isNull()) { + changeTop = gFalse; + } else if (obj2.isNum()) { + changeTop = gTrue; + top = obj2.getNum(); + } else { + error(-1, "Bad annotation destination position"); + kind = destFit; + } + obj2.free(); + + // FitBV link + } else if (obj1.isName("FitBV")) { + if (a->getLength() < 3) { + error(-1, "Annotation destination array is too short"); + goto err2; + } + kind = destFitBV; + a->get(2, &obj2); + if (obj2.isNull()) { + changeLeft = gFalse; + } else if (obj2.isNum()) { + changeLeft = gTrue; + left = obj2.getNum(); + } else { + error(-1, "Bad annotation destination position"); + kind = destFit; + } + obj2.free(); + + // unknown link kind + } else { + error(-1, "Unknown annotation destination type"); + goto err2; + } + + obj1.free(); + ok = gTrue; + return; + + err1: + obj2.free(); + err2: + obj1.free(); +} + +LinkDest::LinkDest(LinkDest *dest) { + kind = dest->kind; + pageIsRef = dest->pageIsRef; + if (pageIsRef) + pageRef = dest->pageRef; + else + pageNum = dest->pageNum; + left = dest->left; + bottom = dest->bottom; + right = dest->right; + top = dest->top; + zoom = dest->zoom; + changeLeft = dest->changeLeft; + changeTop = dest->changeTop; + changeZoom = dest->changeZoom; + ok = gTrue; +} + +//------------------------------------------------------------------------ +// LinkGoTo +//------------------------------------------------------------------------ + +LinkGoTo::LinkGoTo(Object *destObj) { + dest = NULL; + namedDest = NULL; + + // named destination + if (destObj->isName()) { + namedDest = new GooString(destObj->getName()); + } else if (destObj->isString()) { + namedDest = destObj->getString()->copy(); + + // destination dictionary + } else if (destObj->isArray()) { + dest = new LinkDest(destObj->getArray()); + if (!dest->isOk()) { + delete dest; + dest = NULL; + } + + // error + } else { + error(-1, "Illegal annotation destination"); + } +} + +LinkGoTo::~LinkGoTo() { + if (dest) + delete dest; + if (namedDest) + delete namedDest; +} + +//------------------------------------------------------------------------ +// LinkGoToR +//------------------------------------------------------------------------ + +LinkGoToR::LinkGoToR(Object *fileSpecObj, Object *destObj) { + fileName = NULL; + dest = NULL; + namedDest = NULL; + + // get file name + Object obj1; + if (getFileSpecNameForPlatform (fileSpecObj, &obj1)) { + fileName = obj1.getString()->copy(); + obj1.free(); + } + + // named destination + if (destObj->isName()) { + namedDest = new GooString(destObj->getName()); + } else if (destObj->isString()) { + namedDest = destObj->getString()->copy(); + + // destination dictionary + } else if (destObj->isArray()) { + dest = new LinkDest(destObj->getArray()); + if (!dest->isOk()) { + delete dest; + dest = NULL; + } + + // error + } else { + error(-1, "Illegal annotation destination"); + } +} + +LinkGoToR::~LinkGoToR() { + if (fileName) + delete fileName; + if (dest) + delete dest; + if (namedDest) + delete namedDest; +} + + +//------------------------------------------------------------------------ +// LinkLaunch +//------------------------------------------------------------------------ + +LinkLaunch::LinkLaunch(Object *actionObj) { + Object obj1, obj2, obj3; + + fileName = NULL; + params = NULL; + + if (actionObj->isDict()) { + if (!actionObj->dictLookup("F", &obj1)->isNull()) { + if (getFileSpecNameForPlatform (&obj1, &obj3)) { + fileName = obj3.getString()->copy(); + obj3.free(); + } + } else { + obj1.free(); +#ifdef _WIN32 + if (actionObj->dictLookup("Win", &obj1)->isDict()) { + obj1.dictLookup("F", &obj2); + if (getFileSpecNameForPlatform (&obj2, &obj3)) { + fileName = obj3.getString()->copy(); + obj3.free(); + } + obj2.free(); + if (obj1.dictLookup("P", &obj2)->isString()) { + params = obj2.getString()->copy(); + } + obj2.free(); + } else { + error(-1, "Bad launch-type link action"); + } +#else + //~ This hasn't been defined by Adobe yet, so assume it looks + //~ just like the Win dictionary until they say otherwise. + if (actionObj->dictLookup("Unix", &obj1)->isDict()) { + obj1.dictLookup("F", &obj2); + if (getFileSpecNameForPlatform (&obj2, &obj3)) { + fileName = obj3.getString()->copy(); + obj3.free(); + } + obj2.free(); + if (obj1.dictLookup("P", &obj2)->isString()) { + params = obj2.getString()->copy(); + } + obj2.free(); + } else { + error(-1, "Bad launch-type link action"); + } +#endif + } + obj1.free(); + } +} + +LinkLaunch::~LinkLaunch() { + if (fileName) + delete fileName; + if (params) + delete params; +} + +//------------------------------------------------------------------------ +// LinkURI +//------------------------------------------------------------------------ + +LinkURI::LinkURI(Object *uriObj, GooString *baseURI) { + GooString *uri2; + int n; + char c; + + uri = NULL; + if (uriObj->isString()) { + uri2 = uriObj->getString()->copy(); + if (baseURI && baseURI->getLength() > 0) { + n = strcspn(uri2->getCString(), "/:"); + if (n == uri2->getLength() || uri2->getChar(n) == '/') { + uri = baseURI->copy(); + c = uri->getChar(uri->getLength() - 1); + if (c == '/' || c == '?') { + if (uri2->getChar(0) == '/') { + uri2->del(0); + } + } else { + if (uri2->getChar(0) != '/') { + uri->append('/'); + } + } + uri->append(uri2); + delete uri2; + } else { + uri = uri2; + } + } else { + uri = uri2; + } + } else { + error(-1, "Illegal URI-type link"); + } +} + +LinkURI::~LinkURI() { + if (uri) + delete uri; +} + +//------------------------------------------------------------------------ +// LinkNamed +//------------------------------------------------------------------------ + +LinkNamed::LinkNamed(Object *nameObj) { + name = NULL; + if (nameObj->isName()) { + name = new GooString(nameObj->getName()); + } +} + +LinkNamed::~LinkNamed() { + if (name) { + delete name; + } +} + +//------------------------------------------------------------------------ +// LinkMovie +//------------------------------------------------------------------------ + +LinkMovie::LinkMovie(Object *obj) { + annotRef.num = -1; + annotTitle = NULL; + + Object tmp; + if (obj->dictLookupNF("Annotation", &tmp)->isRef()) { + annotRef = tmp.getRef(); + } + tmp.free(); + + if (obj->dictLookup("T", &tmp)->isString()) { + annotTitle = tmp.getString()->copy(); + } + tmp.free(); + + if ((annotTitle == NULL) && (annotRef.num == -1)) { + error(-1, "Movie action is missing both the Annot and T keys"); + } + + if (obj->dictLookup("Operation", &tmp)->isName()) { + char *name = tmp.getName(); + + if (!strcmp(name, "Play")) { + operation = operationTypePlay; + } + else if (!strcmp(name, "Stop")) { + operation = operationTypeStop; + } + else if (!strcmp(name, "Pause")) { + operation = operationTypePause; + } + else if (!strcmp(name, "Resume")) { + operation = operationTypeResume; + } + } + tmp.free(); +} + +LinkMovie::~LinkMovie() { + if (annotTitle) { + delete annotTitle; + } +} + +//------------------------------------------------------------------------ +// LinkSound +//------------------------------------------------------------------------ + +LinkSound::LinkSound(Object *soundObj) { + volume = 1.0; + sync = gFalse; + repeat = gFalse; + mix = gFalse; + sound = NULL; + if (soundObj->isDict()) + { + Object tmp; + // volume + soundObj->dictLookup("Volume", &tmp); + if (tmp.isNum()) { + volume = tmp.getNum(); + } + tmp.free(); + // sync + soundObj->dictLookup("Synchronous", &tmp); + if (tmp.isBool()) { + sync = tmp.getBool(); + } + tmp.free(); + // repeat + soundObj->dictLookup("Repeat", &tmp); + if (tmp.isBool()) { + repeat = tmp.getBool(); + } + tmp.free(); + // mix + soundObj->dictLookup("Mix", &tmp); + if (tmp.isBool()) { + mix = tmp.getBool(); + } + tmp.free(); + // 'Sound' object + soundObj->dictLookup("Sound", &tmp); + sound = Sound::parseSound(&tmp); + tmp.free(); + } +} + +LinkSound::~LinkSound() { + delete sound; +} + +//------------------------------------------------------------------------ +// LinkRendition +//------------------------------------------------------------------------ + +LinkRendition::LinkRendition(Object *obj) { + operation = -1; + media = NULL; + js = NULL; + + if (obj->isDict()) { + Object tmp; + + if (!obj->dictLookup("JS", &tmp)->isNull()) { + if (tmp.isString()) { + js = new GooString(tmp.getString()); + } else if (tmp.isStream()) { + Stream *stream = tmp.getStream(); + js = new GooString(); + stream->fillGooString(js); + } else { + error(-1, "Invalid Rendition Action: JS not string or stream"); + } + } + tmp.free(); + + if (obj->dictLookup("OP", &tmp)->isInt()) { + operation = tmp.getInt(); + if (!js && (operation < 0 || operation > 4)) { + error (-1, "Invalid Rendition Action: unrecognized operation valued: %d", operation); + } else { + Object obj1; + + // retrieve rendition object + if (obj->dictLookup("R", &renditionObj)->isDict()) { + media = new MediaRendition(&renditionObj); + } else if (operation == 0 || operation == 4) { + error (-1, "Invalid Rendition Action: no R field with op = %d", operation); + renditionObj.free(); + } + + if (!obj->dictLookupNF("AN", &screenRef)->isRef() && operation >= 0 && operation <= 4) { + error (-1, "Invalid Rendition Action: no AN field with op = %d", operation); + screenRef.free(); + } + } + } else if (!js) { + error(-1, "Invalid Rendition action: no OP or JS field defined"); + } + tmp.free(); + } +} + +LinkRendition::~LinkRendition() { + renditionObj.free(); + screenRef.free(); + + if (js) + delete js; + if (media) + delete media; +} + + +//------------------------------------------------------------------------ +// LinkJavaScript +//------------------------------------------------------------------------ + +LinkJavaScript::LinkJavaScript(Object *jsObj) { + js = NULL; + + if (jsObj->isString()) { + js = new GooString(jsObj->getString()); + } + else if (jsObj->isStream()) { + Stream *stream = jsObj->getStream(); + js = new GooString(); + stream->fillGooString(js); + } +} + +LinkJavaScript::~LinkJavaScript() { + if (js) { + delete js; + } +} + +//------------------------------------------------------------------------ +// LinkOCGState +//------------------------------------------------------------------------ +LinkOCGState::LinkOCGState(Object *obj) { + Object obj1; + + stateList = new GooList(); + preserveRB = gTrue; + + if (obj->dictLookup("State", &obj1)->isArray()) { + StateList *stList = NULL; + + for (int i = 0; i < obj1.arrayGetLength(); ++i) { + Object obj2; + + obj1.arrayGetNF(i, &obj2); + if (obj2.isName()) { + if (stList) + stateList->append(stList); + + char *name = obj2.getName(); + stList = new StateList(); + stList->list = new GooList(); + if (!strcmp (name, "ON")) { + stList->st = On; + } else if (!strcmp (name, "OFF")) { + stList->st = Off; + } else if (!strcmp (name, "Toggle")) { + stList->st = Toggle; + } else { + error (-1, "Invalid name '%s' in OCG Action state array", name); + delete stList; + stList = NULL; + } + } else if (obj2.isRef()) { + if (stList) { + Ref ocgRef = obj2.getRef(); + Ref *item = new Ref(); + item->num = ocgRef.num; + item->gen = ocgRef.gen; + stList->list->append(item); + } else { + error (-1, "Invalid OCG Action State array, expected name instead of ref"); + } + } else { + error (-1, "Invalid item in OCG Action State array"); + } + obj2.free(); + } + // Add the last group + if (stList) + stateList->append(stList); + } else { + error (-1, "Invalid OCGState action"); + delete stateList; + stateList = NULL; + } + obj1.free(); + + if (obj->dictLookup("PreserveRB", &obj1)->isBool()) { + preserveRB = obj1.getBool(); + } + obj1.free(); +} + +LinkOCGState::~LinkOCGState() { + if (stateList) + deleteGooList(stateList, StateList); +} + +LinkOCGState::StateList::~StateList() { + if (list) + deleteGooList(list, Ref); +} + +//------------------------------------------------------------------------ +// LinkUnknown +//------------------------------------------------------------------------ + +LinkUnknown::LinkUnknown(char *actionA) { + action = new GooString(actionA); +} + +LinkUnknown::~LinkUnknown() { + delete action; +} + +//------------------------------------------------------------------------ +// Links +//------------------------------------------------------------------------ + +Links::Links(Annots *annots) { + int size; + int i; + + links = NULL; + size = 0; + numLinks = 0; + + if (!annots) + return; + + for (i = 0; i < annots->getNumAnnots(); ++i) { + Annot *annot = annots->getAnnot(i); + + if (annot->getType() != Annot::typeLink) + continue; + + if (numLinks >= size) { + size += 16; + links = (AnnotLink **)greallocn(links, size, sizeof(AnnotLink *)); + } + annot->incRefCnt(); + links[numLinks++] = static_cast<AnnotLink *>(annot); + } +} + +Links::~Links() { + int i; + + for (i = 0; i < numLinks; ++i) + links[i]->decRefCnt(); + + gfree(links); +} + +LinkAction *Links::find(double x, double y) const { + int i; + + for (i = numLinks - 1; i >= 0; --i) { + if (links[i]->inRect(x, y)) { + return links[i]->getAction(); + } + } + return NULL; +} + +GBool Links::onLink(double x, double y) const { + int i; + + for (i = 0; i < numLinks; ++i) { + if (links[i]->inRect(x, y)) + return gTrue; + } + return gFalse; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Link.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Link.h new file mode 100644 index 00000000000..84e58018554 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Link.h @@ -0,0 +1,488 @@ +//======================================================================== +// +// Link.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006, 2008 Pino Toscano <pino@kde.org> +// Copyright (C) 2008 Hugo Mercier <hmercier31@gmail.com> +// Copyright (C) 2010, 2011 Carlos Garcia Campos <carlosgc@gnome.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef LINK_H +#define LINK_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "Object.h" + +class GooString; +class GooList; +class Array; +class Dict; +class Sound; +class MediaRendition; +class AnnotLink; +class Annots; + +//------------------------------------------------------------------------ +// LinkAction +//------------------------------------------------------------------------ + +enum LinkActionKind { + actionGoTo, // go to destination + actionGoToR, // go to destination in new file + actionLaunch, // launch app (or open document) + actionURI, // URI + actionNamed, // named action + actionMovie, // movie action + actionRendition, + actionSound, // sound action + actionJavaScript, // JavaScript action + actionOCGState, // Set-OCG-State action + actionUnknown // anything else +}; + +class LinkAction { +public: + + // Destructor. + virtual ~LinkAction() {} + + // Was the LinkAction created successfully? + virtual GBool isOk() = 0; + + // Check link action type. + virtual LinkActionKind getKind() = 0; + + // Parse a destination (old-style action) name, string, or array. + static LinkAction *parseDest(Object *obj); + + // Parse an action dictionary. + static LinkAction *parseAction(Object *obj, GooString *baseURI = NULL); +}; + +//------------------------------------------------------------------------ +// LinkDest +//------------------------------------------------------------------------ + +enum LinkDestKind { + destXYZ, + destFit, + destFitH, + destFitV, + destFitR, + destFitB, + destFitBH, + destFitBV +}; + +class LinkDest { +public: + + // Build a LinkDest from the array. + LinkDest(Array *a); + + // Copy a LinkDest. + LinkDest *copy() { return new LinkDest(this); } + + // Was the LinkDest created successfully? + GBool isOk() { return ok; } + + // Accessors. + LinkDestKind getKind() { return kind; } + GBool isPageRef() { return pageIsRef; } + int getPageNum() { return pageNum; } + Ref getPageRef() { return pageRef; } + double getLeft() { return left; } + double getBottom() { return bottom; } + double getRight() { return right; } + double getTop() { return top; } + double getZoom() { return zoom; } + GBool getChangeLeft() { return changeLeft; } + GBool getChangeTop() { return changeTop; } + GBool getChangeZoom() { return changeZoom; } + +private: + + LinkDestKind kind; // destination type + GBool pageIsRef; // is the page a reference or number? + union { + Ref pageRef; // reference to page + int pageNum; // one-relative page number + }; + double left, bottom; // position + double right, top; + double zoom; // zoom factor + GBool changeLeft, changeTop; // for destXYZ links, which position + GBool changeZoom; // components to change + GBool ok; // set if created successfully + + LinkDest(LinkDest *dest); +}; + +//------------------------------------------------------------------------ +// LinkGoTo +//------------------------------------------------------------------------ + +class LinkGoTo: public LinkAction { +public: + + // Build a LinkGoTo from a destination (dictionary, name, or string). + LinkGoTo(Object *destObj); + + // Destructor. + virtual ~LinkGoTo(); + + // Was the LinkGoTo created successfully? + virtual GBool isOk() { return dest || namedDest; } + + // Accessors. + virtual LinkActionKind getKind() { return actionGoTo; } + LinkDest *getDest() { return dest; } + GooString *getNamedDest() { return namedDest; } + +private: + + LinkDest *dest; // regular destination (NULL for remote + // link with bad destination) + GooString *namedDest; // named destination (only one of dest and + // and namedDest may be non-NULL) +}; + +//------------------------------------------------------------------------ +// LinkGoToR +//------------------------------------------------------------------------ + +class LinkGoToR: public LinkAction { +public: + + // Build a LinkGoToR from a file spec (dictionary) and destination + // (dictionary, name, or string). + LinkGoToR(Object *fileSpecObj, Object *destObj); + + // Destructor. + virtual ~LinkGoToR(); + + // Was the LinkGoToR created successfully? + virtual GBool isOk() { return fileName && (dest || namedDest); } + + // Accessors. + virtual LinkActionKind getKind() { return actionGoToR; } + GooString *getFileName() { return fileName; } + LinkDest *getDest() { return dest; } + GooString *getNamedDest() { return namedDest; } + +private: + + GooString *fileName; // file name + LinkDest *dest; // regular destination (NULL for remote + // link with bad destination) + GooString *namedDest; // named destination (only one of dest and + // and namedDest may be non-NULL) +}; + +//------------------------------------------------------------------------ +// LinkLaunch +//------------------------------------------------------------------------ + +class LinkLaunch: public LinkAction { +public: + + // Build a LinkLaunch from an action dictionary. + LinkLaunch(Object *actionObj); + + // Destructor. + virtual ~LinkLaunch(); + + // Was the LinkLaunch created successfully? + virtual GBool isOk() { return fileName != NULL; } + + // Accessors. + virtual LinkActionKind getKind() { return actionLaunch; } + GooString *getFileName() { return fileName; } + GooString *getParams() { return params; } + +private: + + GooString *fileName; // file name + GooString *params; // parameters +}; + +//------------------------------------------------------------------------ +// LinkURI +//------------------------------------------------------------------------ + +class LinkURI: public LinkAction { +public: + + // Build a LinkURI given the URI (string) and base URI. + LinkURI(Object *uriObj, GooString *baseURI); + + // Destructor. + virtual ~LinkURI(); + + // Was the LinkURI created successfully? + virtual GBool isOk() { return uri != NULL; } + + // Accessors. + virtual LinkActionKind getKind() { return actionURI; } + GooString *getURI() { return uri; } + +private: + + GooString *uri; // the URI +}; + +//------------------------------------------------------------------------ +// LinkNamed +//------------------------------------------------------------------------ + +class LinkNamed: public LinkAction { +public: + + // Build a LinkNamed given the action name. + LinkNamed(Object *nameObj); + + virtual ~LinkNamed(); + + virtual GBool isOk() { return name != NULL; } + + virtual LinkActionKind getKind() { return actionNamed; } + GooString *getName() { return name; } + +private: + + GooString *name; +}; + + +//------------------------------------------------------------------------ +// LinkMovie +//------------------------------------------------------------------------ + +class LinkMovie: public LinkAction { +public: + + enum OperationType { + operationTypePlay, + operationTypePause, + operationTypeResume, + operationTypeStop + }; + + LinkMovie(Object *obj); + virtual ~LinkMovie(); + + virtual GBool isOk() { return annotRef.num >= 0 || annotTitle != NULL; } + virtual LinkActionKind getKind() { return actionMovie; } + + // a movie action stores either an indirect reference to a movie annotation + // or the movie annotation title + + GBool hasAnnotRef() { return annotRef.num >= 0; } + GBool hasAnnotTitle() { return annotTitle != NULL; } + Ref *getAnnotRef() { return &annotRef; } + GooString *getAnnotTitle() { return annotTitle; } + + OperationType getOperation() { return operation; } + +private: + + Ref annotRef; // Annotation + GooString *annotTitle; // T + + OperationType operation; // Operation +}; + + +//------------------------------------------------------------------------ +// LinkRendition +//------------------------------------------------------------------------ + +class LinkRendition: public LinkAction { +public: + + LinkRendition(Object *Obj); + + virtual ~LinkRendition(); + + virtual GBool isOk() { return true; } + + virtual LinkActionKind getKind() { return actionRendition; } + + GBool hasRenditionObject() { return renditionObj.isDict(); } + Object* getRenditionObject() { return &renditionObj; } + + GBool hasScreenAnnot() { return screenRef.isRef(); } + Ref getScreenAnnot() { return screenRef.getRef(); } + + int getOperation() { return operation; } + + MediaRendition* getMedia() { return media; } + + GooString *getScript() { return js; } + +private: + + Object screenRef; + Object renditionObj; + int operation; + + MediaRendition* media; + + GooString *js; +}; + +//------------------------------------------------------------------------ +// LinkSound +//------------------------------------------------------------------------ + +class LinkSound: public LinkAction { +public: + + LinkSound(Object *soundObj); + + virtual ~LinkSound(); + + virtual GBool isOk() { return sound != NULL; } + + virtual LinkActionKind getKind() { return actionSound; } + + double getVolume() { return volume; } + GBool getSynchronous() { return sync; } + GBool getRepeat() { return repeat; } + GBool getMix() { return mix; } + Sound *getSound() { return sound; } + +private: + + double volume; + GBool sync; + GBool repeat; + GBool mix; + Sound *sound; +}; + +//------------------------------------------------------------------------ +// LinkJavaScript +//------------------------------------------------------------------------ + +class LinkJavaScript: public LinkAction { +public: + + // Build a LinkJavaScript given the action name. + LinkJavaScript(Object *jsObj); + + virtual ~LinkJavaScript(); + + virtual GBool isOk() { return js != NULL; } + + virtual LinkActionKind getKind() { return actionJavaScript; } + GooString *getScript() { return js; } + +private: + + GooString *js; +}; + +//------------------------------------------------------------------------ +// LinkOCGState +//------------------------------------------------------------------------ +class LinkOCGState: public LinkAction { +public: + LinkOCGState(Object *obj); + + virtual ~LinkOCGState(); + + virtual GBool isOk() { return stateList != NULL; } + + virtual LinkActionKind getKind() { return actionOCGState; } + + enum State { On, Off, Toggle}; + struct StateList { + StateList() { list = NULL; } + ~StateList(); + State st; + GooList *list; + }; + + GooList *getStateList() { return stateList; } + GBool getPreserveRB() { return preserveRB; } + +private: + GooList *stateList; + GBool preserveRB; +}; + +//------------------------------------------------------------------------ +// LinkUnknown +//------------------------------------------------------------------------ + +class LinkUnknown: public LinkAction { +public: + + // Build a LinkUnknown with the specified action type. + LinkUnknown(char *actionA); + + // Destructor. + virtual ~LinkUnknown(); + + // Was the LinkUnknown create successfully? + virtual GBool isOk() { return action != NULL; } + + // Accessors. + virtual LinkActionKind getKind() { return actionUnknown; } + GooString *getAction() { return action; } + +private: + + GooString *action; // action subtype +}; + +//------------------------------------------------------------------------ +// Links +//------------------------------------------------------------------------ + +class Links { +public: + + // Extract links from array of annotations. + Links(Annots *annots); + + // Destructor. + ~Links(); + + // Iterate through list of links. + int getNumLinks() const { return numLinks; } + AnnotLink *getLink(int i) const { return links[i]; } + + // If point <x>,<y> is in a link, return the associated action; + // else return NULL. + LinkAction *find(double x, double y) const; + + // Return true if <x>,<y> is in a link. + GBool onLink(double x, double y) const; + +private: + + AnnotLink **links; + int numLinks; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/LocalPDFDocBuilder.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/LocalPDFDocBuilder.cc new file mode 100644 index 00000000000..6f6f1fca9f7 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/LocalPDFDocBuilder.cc @@ -0,0 +1,46 @@ +//======================================================================== +// +// LocalPDFDocBuilder.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#include <config.h> + +#include "LocalPDFDocBuilder.h" + +//------------------------------------------------------------------------ +// LocalPDFDocBuilder +//------------------------------------------------------------------------ + +PDFDoc * +LocalPDFDocBuilder::buildPDFDoc( + const GooString &uri, GooString *ownerPassword, GooString + *userPassword, void *guiDataA) +{ + if (uri.cmpN("file://", 7) == 0) { + GooString *fileName = uri.copy(); + fileName->del(0, 7); + return new PDFDoc(fileName, ownerPassword, userPassword, guiDataA); + } else { + GooString *fileName = uri.copy(); + return new PDFDoc(fileName, ownerPassword, userPassword, guiDataA); + } +} + +GBool LocalPDFDocBuilder::supports(const GooString &uri) +{ + if (uri.cmpN("file://", 7) == 0) { + return gTrue; + } else if (!strstr(uri.getCString(), "://")) { + return gTrue; + } else { + return gFalse; + } +} + + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/LocalPDFDocBuilder.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/LocalPDFDocBuilder.h new file mode 100644 index 00000000000..c2b1d903885 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/LocalPDFDocBuilder.h @@ -0,0 +1,33 @@ +//======================================================================== +// +// LocalPDFDocBuilder.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#ifndef LOCALPDFDOCBUILDER_H +#define LOCALPDFDOCBUILDER_H + +#include "PDFDocBuilder.h" + +//------------------------------------------------------------------------ +// LocalPDFDocBuilder +// +// The LocalPDFDocBuilder implements a PDFDocBuilder for local files. +//------------------------------------------------------------------------ + +class LocalPDFDocBuilder : public PDFDocBuilder { + +public: + + PDFDoc *buildPDFDoc(const GooString &uri, GooString *ownerPassword = NULL, + GooString *userPassword = NULL, void *guiDataA = NULL); + GBool supports(const GooString &uri); + +}; + +#endif /* LOCALPDFDOCBUILDER_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Makefile.am b/Build/source/libs/poppler/poppler-0.18.4/poppler/Makefile.am new file mode 100644 index 00000000000..80cbf811e0f --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Makefile.am @@ -0,0 +1,325 @@ +if BUILD_SPLASH_OUTPUT + +splash_sources = \ + SplashOutputDev.cc + +splash_headers = \ + SplashOutputDev.h + +splash_includes = \ + $(SPLASH_CFLAGS) + +splash_libs = \ + $(SPLASH_LIBS) \ + $(top_builddir)/splash/libsplash.la + +endif + +if BUILD_POPPLER_QT4 + +poppler_arthur = libpoppler-arthur.la + +libpoppler_arthur_la_SOURCES = \ + ArthurOutputDev.h \ + ArthurOutputDev.cc + +arthur_includes = \ + $(POPPLER_QT4_CFLAGS) + +arthur_libs = \ + $(POPPLER_QT4_LIBS) + +endif + + + +if BUILD_CAIRO_OUTPUT + +poppler_cairo = libpoppler-cairo.la + +cairo_includes = \ + $(CAIRO_CFLAGS) + +cairo_libs = \ + $(CAIRO_LIBS) + +libpoppler_cairo_la_SOURCES = \ + CairoFontEngine.cc \ + CairoFontEngine.h \ + CairoOutputDev.cc \ + CairoOutputDev.h \ + CairoRescaleBox.cc \ + CairoRescaleBox.h + +endif + +if BUILD_LIBJPEG + +libjpeg_sources = \ + DCTStream.h \ + DCTStream.cc + +libjpeg_libs = \ + $(LIBJPEG_LIBS) + +endif + +if BUILD_LIBPNG + +libpng_libs = \ + $(LIBPNG_LIBS) +libpng_includes = \ + $(LIBPNG_CFLAGS) + +endif + +if BUILD_LIBTIFF + +libtiff_libs = \ + $(LIBTIFF_LIBS) +libtiff_includes = \ + $(LIBTIFF_CFLAGS) + +endif + +if BUILD_LIBOPENJPEG + +libjpeg2000_sources = \ + JPEG2000Stream.h \ + JPEG2000Stream.cc + +libjpeg2000_libs = \ + $(LIBOPENJPEG_LIBS) + +else + +libjpeg2000_sources = \ + JPXStream.h \ + JPXStream.cc + +endif + + +if BUILD_ZLIB + +zlib_sources = \ + FlateStream.h \ + FlateStream.cc + +zlib_libs = \ + $(ZLIB_LIBS) + +endif + +if BUILD_LIBCURL + +libcurl_libs = \ + $(LIBCURL_LIBS) + +libcurl_includes = \ + $(LIBCURL_CFLAGS) + +curl_headers = \ + CurlCachedFile.h \ + CurlPDFDocBuilder.h + +curl_sources = \ + CurlCachedFile.cc \ + CurlPDFDocBuilder.cc + +endif + +if USE_CMS +cms_includes = $(LCMS_CFLAGS) +cms_libs = $(LCMS_LIBS) +endif + +INCLUDES = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/goo \ + $(cms_includes) \ + $(splash_includes) \ + $(cairo_includes) \ + $(arthur_includes) \ + $(libtiff_includes) \ + $(libpng_includes) \ + $(libcurl_includes) \ + $(FREETYPE_CFLAGS) \ + $(FONTCONFIG_CFLAGS) + +lib_LTLIBRARIES = libpoppler.la + +noinst_LTLIBRARIES = $(poppler_cairo) \ + $(poppler_arthur) + +CFLAGS+=$(PTHREAD_CFLAGS) +CXXFLAGS+=$(PTHREAD_CFLAGS) + +libpoppler_la_LIBADD = \ + $(top_builddir)/goo/libgoo.la \ + $(top_builddir)/fofi/libfofi.la \ + $(cms_libs) \ + $(splash_libs) \ + $(libtiff_libs) \ + $(libjpeg_libs) \ + $(libpng_libs) \ + $(zlib_libs) \ + $(libcurl_libs) \ + $(libjpeg2000_libs) \ + $(FREETYPE_LIBS) \ + $(FONTCONFIG_LIBS) \ + $(PTHREAD_LIBS) \ + $(win32_libs) + +libpoppler_la_LDFLAGS = -version-info 19:0:0 @create_shared_lib@ @auto_import_flags@ + +if ENABLE_XPDF_HEADERS + +poppler_includedir = $(includedir)/poppler +poppler_include_HEADERS = \ + $(splash_headers) \ + $(curl_headers) \ + Annot.h \ + Array.h \ + BuiltinFont.h \ + BuiltinFontTables.h \ + CachedFile.h \ + Catalog.h \ + CharCodeToUnicode.h \ + CMap.h \ + DateInfo.h \ + Decrypt.h \ + Dict.h \ + Error.h \ + FileSpec.h \ + FontEncodingTables.h \ + FontInfo.h \ + Form.h \ + Function.h \ + Gfx.h \ + GfxFont.h \ + GfxState.h \ + GfxState_helpers.h \ + GlobalParams.h \ + Hints.h \ + JArithmeticDecoder.h \ + JBIG2Stream.h \ + Lexer.h \ + Linearization.h \ + Link.h \ + LocalPDFDocBuilder.h \ + Movie.h \ + NameToCharCode.h \ + Object.h \ + OptionalContent.h \ + Outline.h \ + OutputDev.h \ + Page.h \ + PageTransition.h \ + Parser.h \ + PDFDoc.h \ + PDFDocBuilder.h \ + PDFDocEncoding.h \ + PDFDocFactory.h \ + PopplerCache.h \ + ProfileData.h \ + PreScanOutputDev.h \ + PSTokenizer.h \ + Rendition.h \ + StdinCachedFile.h \ + StdinPDFDocBuilder.h \ + Stream-CCITT.h \ + Stream.h \ + UnicodeMap.h \ + UnicodeMapTables.h \ + UnicodeTypeTable.h \ + UnicodeCClassTables.h \ + UnicodeCompTables.h \ + UnicodeDecompTables.h \ + ViewerPreferences.h \ + XRef.h \ + CharTypes.h \ + CompactFontTables.h \ + ErrorCodes.h \ + NameToUnicodeTable.h \ + PSOutputDev.h \ + TextOutputDev.h \ + SecurityHandler.h \ + UTF8.h \ + XpdfPluginAPI.h \ + Sound.h +nodist_poppler_include_HEADERS = poppler-config.h + +endif + +libpoppler_la_SOURCES = \ + $(splash_sources) \ + $(cairo_sources) \ + $(arthur_sources) \ + $(libjpeg_sources) \ + $(zlib_sources) \ + $(libjpeg2000_sources) \ + $(curl_sources) \ + Annot.cc \ + Array.cc \ + BuiltinFont.cc \ + BuiltinFontTables.cc \ + CachedFile.cc \ + Catalog.cc \ + CharCodeToUnicode.cc \ + CMap.cc \ + DateInfo.cc \ + Decrypt.cc \ + Dict.cc \ + Error.cc \ + FileSpec.cc \ + FontEncodingTables.cc \ + Form.cc \ + FontInfo.cc \ + Function.cc \ + Gfx.cc \ + GfxFont.cc \ + GfxState.cc \ + GlobalParams.cc \ + Hints.cc \ + JArithmeticDecoder.cc \ + JBIG2Stream.cc \ + Lexer.cc \ + Linearization.cc \ + Link.cc \ + LocalPDFDocBuilder.cc \ + Movie.cc \ + NameToCharCode.cc \ + Object.cc \ + OptionalContent.cc \ + Outline.cc \ + OutputDev.cc \ + Page.cc \ + PageTransition.cc \ + Parser.cc \ + PDFDoc.cc \ + PDFDocEncoding.cc \ + PDFDocFactory.cc \ + PopplerCache.cc \ + ProfileData.cc \ + PreScanOutputDev.cc \ + PSTokenizer.cc \ + Rendition.cc \ + StdinCachedFile.cc \ + StdinPDFDocBuilder.cc \ + Stream.cc \ + strtok_r.cpp \ + UnicodeMap.cc \ + UnicodeTypeTable.cc \ + ViewerPreferences.cc \ + XRef.cc \ + PSOutputDev.cc \ + TextOutputDev.cc \ + PageLabelInfo.h \ + PageLabelInfo.cc \ + SecurityHandler.cc \ + Sound.cc \ + XpdfPluginAPI.cc + +EXTRA_DIST = gen-unicode-tables.py \ + GlobalParamsWin.cc diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Makefile.in b/Build/source/libs/poppler/poppler-0.18.4/poppler/Makefile.in new file mode 100644 index 00000000000..30166698dc5 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Makefile.in @@ -0,0 +1,1183 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = poppler +DIST_COMMON = $(am__poppler_include_HEADERS_DIST) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/poppler-config.h.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/define-dir.m4 $(top_srcdir)/m4/gtk-doc.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/introspection.m4 \ + $(top_srcdir)/m4/libjpeg.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h poppler-config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(libdir)" \ + "$(DESTDIR)$(poppler_includedir)" \ + "$(DESTDIR)$(poppler_includedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) +libpoppler_arthur_la_LIBADD = +am__libpoppler_arthur_la_SOURCES_DIST = ArthurOutputDev.h \ + ArthurOutputDev.cc +@BUILD_POPPLER_QT4_TRUE@am_libpoppler_arthur_la_OBJECTS = \ +@BUILD_POPPLER_QT4_TRUE@ ArthurOutputDev.lo +libpoppler_arthur_la_OBJECTS = $(am_libpoppler_arthur_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +@BUILD_POPPLER_QT4_TRUE@am_libpoppler_arthur_la_rpath = +libpoppler_cairo_la_LIBADD = +am__libpoppler_cairo_la_SOURCES_DIST = CairoFontEngine.cc \ + CairoFontEngine.h CairoOutputDev.cc CairoOutputDev.h \ + CairoRescaleBox.cc CairoRescaleBox.h +@BUILD_CAIRO_OUTPUT_TRUE@am_libpoppler_cairo_la_OBJECTS = \ +@BUILD_CAIRO_OUTPUT_TRUE@ CairoFontEngine.lo CairoOutputDev.lo \ +@BUILD_CAIRO_OUTPUT_TRUE@ CairoRescaleBox.lo +libpoppler_cairo_la_OBJECTS = $(am_libpoppler_cairo_la_OBJECTS) +@BUILD_CAIRO_OUTPUT_TRUE@am_libpoppler_cairo_la_rpath = +am__DEPENDENCIES_1 = +@USE_CMS_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +@BUILD_SPLASH_OUTPUT_TRUE@am__DEPENDENCIES_3 = \ +@BUILD_SPLASH_OUTPUT_TRUE@ $(top_builddir)/splash/libsplash.la +@BUILD_LIBTIFF_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) +@BUILD_LIBJPEG_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1) +@BUILD_LIBPNG_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1) +@BUILD_ZLIB_TRUE@am__DEPENDENCIES_7 = $(am__DEPENDENCIES_1) +@BUILD_LIBCURL_TRUE@am__DEPENDENCIES_8 = $(am__DEPENDENCIES_1) +@BUILD_LIBOPENJPEG_TRUE@am__DEPENDENCIES_9 = $(am__DEPENDENCIES_1) +libpoppler_la_DEPENDENCIES = $(top_builddir)/goo/libgoo.la \ + $(top_builddir)/fofi/libfofi.la $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ + $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_6) \ + $(am__DEPENDENCIES_7) $(am__DEPENDENCIES_8) \ + $(am__DEPENDENCIES_9) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am__libpoppler_la_SOURCES_DIST = SplashOutputDev.cc DCTStream.h \ + DCTStream.cc FlateStream.h FlateStream.cc JPXStream.h \ + JPXStream.cc JPEG2000Stream.h JPEG2000Stream.cc \ + CurlCachedFile.cc CurlPDFDocBuilder.cc Annot.cc Array.cc \ + BuiltinFont.cc BuiltinFontTables.cc CachedFile.cc Catalog.cc \ + CharCodeToUnicode.cc CMap.cc DateInfo.cc Decrypt.cc Dict.cc \ + Error.cc FileSpec.cc FontEncodingTables.cc Form.cc FontInfo.cc \ + Function.cc Gfx.cc GfxFont.cc GfxState.cc GlobalParams.cc \ + Hints.cc JArithmeticDecoder.cc JBIG2Stream.cc Lexer.cc \ + Linearization.cc Link.cc LocalPDFDocBuilder.cc Movie.cc \ + NameToCharCode.cc Object.cc OptionalContent.cc Outline.cc \ + OutputDev.cc Page.cc PageTransition.cc Parser.cc PDFDoc.cc \ + PDFDocEncoding.cc PDFDocFactory.cc PopplerCache.cc \ + ProfileData.cc PreScanOutputDev.cc PSTokenizer.cc Rendition.cc \ + StdinCachedFile.cc StdinPDFDocBuilder.cc Stream.cc \ + strtok_r.cpp UnicodeMap.cc UnicodeTypeTable.cc \ + ViewerPreferences.cc XRef.cc PSOutputDev.cc TextOutputDev.cc \ + PageLabelInfo.h PageLabelInfo.cc SecurityHandler.cc Sound.cc \ + XpdfPluginAPI.cc +@BUILD_SPLASH_OUTPUT_TRUE@am__objects_1 = SplashOutputDev.lo +@BUILD_LIBJPEG_TRUE@am__objects_2 = DCTStream.lo +@BUILD_ZLIB_TRUE@am__objects_3 = FlateStream.lo +@BUILD_LIBOPENJPEG_FALSE@am__objects_4 = JPXStream.lo +@BUILD_LIBOPENJPEG_TRUE@am__objects_4 = JPEG2000Stream.lo +@BUILD_LIBCURL_TRUE@am__objects_5 = CurlCachedFile.lo \ +@BUILD_LIBCURL_TRUE@ CurlPDFDocBuilder.lo +am_libpoppler_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ + $(am__objects_3) $(am__objects_4) $(am__objects_5) Annot.lo \ + Array.lo BuiltinFont.lo BuiltinFontTables.lo CachedFile.lo \ + Catalog.lo CharCodeToUnicode.lo CMap.lo DateInfo.lo Decrypt.lo \ + Dict.lo Error.lo FileSpec.lo FontEncodingTables.lo Form.lo \ + FontInfo.lo Function.lo Gfx.lo GfxFont.lo GfxState.lo \ + GlobalParams.lo Hints.lo JArithmeticDecoder.lo JBIG2Stream.lo \ + Lexer.lo Linearization.lo Link.lo LocalPDFDocBuilder.lo \ + Movie.lo NameToCharCode.lo Object.lo OptionalContent.lo \ + Outline.lo OutputDev.lo Page.lo PageTransition.lo Parser.lo \ + PDFDoc.lo PDFDocEncoding.lo PDFDocFactory.lo PopplerCache.lo \ + ProfileData.lo PreScanOutputDev.lo PSTokenizer.lo Rendition.lo \ + StdinCachedFile.lo StdinPDFDocBuilder.lo Stream.lo strtok_r.lo \ + UnicodeMap.lo UnicodeTypeTable.lo ViewerPreferences.lo XRef.lo \ + PSOutputDev.lo TextOutputDev.lo PageLabelInfo.lo \ + SecurityHandler.lo Sound.lo XpdfPluginAPI.lo +libpoppler_la_OBJECTS = $(am_libpoppler_la_OBJECTS) +libpoppler_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(AM_CXXFLAGS) $(CXXFLAGS) $(libpoppler_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_$(V)) +am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) +am__v_CXX_0 = @echo " CXX " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_$(V)) +am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CXXLD_0 = @echo " CXXLD " $@; +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libpoppler_arthur_la_SOURCES) \ + $(libpoppler_cairo_la_SOURCES) $(libpoppler_la_SOURCES) +DIST_SOURCES = $(am__libpoppler_arthur_la_SOURCES_DIST) \ + $(am__libpoppler_cairo_la_SOURCES_DIST) \ + $(am__libpoppler_la_SOURCES_DIST) +am__poppler_include_HEADERS_DIST = SplashOutputDev.h CurlCachedFile.h \ + CurlPDFDocBuilder.h Annot.h Array.h BuiltinFont.h \ + BuiltinFontTables.h CachedFile.h Catalog.h CharCodeToUnicode.h \ + CMap.h DateInfo.h Decrypt.h Dict.h Error.h FileSpec.h \ + FontEncodingTables.h FontInfo.h Form.h Function.h Gfx.h \ + GfxFont.h GfxState.h GfxState_helpers.h GlobalParams.h Hints.h \ + JArithmeticDecoder.h JBIG2Stream.h Lexer.h Linearization.h \ + Link.h LocalPDFDocBuilder.h Movie.h NameToCharCode.h Object.h \ + OptionalContent.h Outline.h OutputDev.h Page.h \ + PageTransition.h Parser.h PDFDoc.h PDFDocBuilder.h \ + PDFDocEncoding.h PDFDocFactory.h PopplerCache.h ProfileData.h \ + PreScanOutputDev.h PSTokenizer.h Rendition.h StdinCachedFile.h \ + StdinPDFDocBuilder.h Stream-CCITT.h Stream.h UnicodeMap.h \ + UnicodeMapTables.h UnicodeTypeTable.h UnicodeCClassTables.h \ + UnicodeCompTables.h UnicodeDecompTables.h ViewerPreferences.h \ + XRef.h CharTypes.h CompactFontTables.h ErrorCodes.h \ + NameToUnicodeTable.h PSOutputDev.h TextOutputDev.h \ + SecurityHandler.h UTF8.h XpdfPluginAPI.h Sound.h +HEADERS = $(nodist_poppler_include_HEADERS) $(poppler_include_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CAIRO_CFLAGS = @CAIRO_CFLAGS@ +CAIRO_FEATURE = @CAIRO_FEATURE@ +CAIRO_LIBS = @CAIRO_LIBS@ +CAIRO_REQ = @CAIRO_REQ@ +CAIRO_VERSION = @CAIRO_VERSION@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ $(PTHREAD_CFLAGS) +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ $(PTHREAD_CFLAGS) +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ +FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_CONFIG = @FREETYPE_CONFIG@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GLIB_REQ = @GLIB_REQ@ +GLIB_REQUIRED = @GLIB_REQUIRED@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +GTK_TEST_CFLAGS = @GTK_TEST_CFLAGS@ +GTK_TEST_LIBS = @GTK_TEST_LIBS@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ +INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ +INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ +INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ +INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ +INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ +INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ +LCMS_CFLAGS = @LCMS_CFLAGS@ +LCMS_LIBS = @LCMS_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBJPEG_LIBS = @LIBJPEG_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBOPENJPEG_LIBS = @LIBOPENJPEG_LIBS@ +LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ +LIBPNG_LIBS = @LIBPNG_LIBS@ +LIBS = @LIBS@ +LIBTIFF_LIBS = @LIBTIFF_LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MOCQT4 = @MOCQT4@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PC_REQUIRES = @PC_REQUIRES@ +PC_REQUIRES_PRIVATE = @PC_REQUIRES_PRIVATE@ +PDFTOCAIRO_CFLAGS = @PDFTOCAIRO_CFLAGS@ +PDFTOCAIRO_LIBS = @PDFTOCAIRO_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POPPLER_DATADIR = @POPPLER_DATADIR@ +POPPLER_GLIB_CFLAGS = @POPPLER_GLIB_CFLAGS@ +POPPLER_GLIB_DISABLE_DEPRECATED = @POPPLER_GLIB_DISABLE_DEPRECATED@ +POPPLER_GLIB_DISABLE_SINGLE_INCLUDES = @POPPLER_GLIB_DISABLE_SINGLE_INCLUDES@ +POPPLER_GLIB_LIBS = @POPPLER_GLIB_LIBS@ +POPPLER_MAJOR_VERSION = @POPPLER_MAJOR_VERSION@ +POPPLER_MICRO_VERSION = @POPPLER_MICRO_VERSION@ +POPPLER_MINOR_VERSION = @POPPLER_MINOR_VERSION@ +POPPLER_QT4_CFLAGS = @POPPLER_QT4_CFLAGS@ +POPPLER_QT4_CXXFLAGS = @POPPLER_QT4_CXXFLAGS@ +POPPLER_QT4_LIBS = @POPPLER_QT4_LIBS@ +POPPLER_QT4_TEST_CFLAGS = @POPPLER_QT4_TEST_CFLAGS@ +POPPLER_QT4_TEST_LIBS = @POPPLER_QT4_TEST_LIBS@ +POPPLER_VERSION = @POPPLER_VERSION@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +auto_import_flags = @auto_import_flags@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +create_shared_lib = @create_shared_lib@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +win32_libs = @win32_libs@ +@BUILD_SPLASH_OUTPUT_TRUE@splash_sources = \ +@BUILD_SPLASH_OUTPUT_TRUE@ SplashOutputDev.cc + +@BUILD_SPLASH_OUTPUT_TRUE@splash_headers = \ +@BUILD_SPLASH_OUTPUT_TRUE@ SplashOutputDev.h + +@BUILD_SPLASH_OUTPUT_TRUE@splash_includes = \ +@BUILD_SPLASH_OUTPUT_TRUE@ $(SPLASH_CFLAGS) + +@BUILD_SPLASH_OUTPUT_TRUE@splash_libs = \ +@BUILD_SPLASH_OUTPUT_TRUE@ $(SPLASH_LIBS) \ +@BUILD_SPLASH_OUTPUT_TRUE@ $(top_builddir)/splash/libsplash.la + +@BUILD_POPPLER_QT4_TRUE@poppler_arthur = libpoppler-arthur.la +@BUILD_POPPLER_QT4_TRUE@libpoppler_arthur_la_SOURCES = \ +@BUILD_POPPLER_QT4_TRUE@ ArthurOutputDev.h \ +@BUILD_POPPLER_QT4_TRUE@ ArthurOutputDev.cc + +@BUILD_POPPLER_QT4_TRUE@arthur_includes = \ +@BUILD_POPPLER_QT4_TRUE@ $(POPPLER_QT4_CFLAGS) + +@BUILD_POPPLER_QT4_TRUE@arthur_libs = \ +@BUILD_POPPLER_QT4_TRUE@ $(POPPLER_QT4_LIBS) + +@BUILD_CAIRO_OUTPUT_TRUE@poppler_cairo = libpoppler-cairo.la +@BUILD_CAIRO_OUTPUT_TRUE@cairo_includes = \ +@BUILD_CAIRO_OUTPUT_TRUE@ $(CAIRO_CFLAGS) + +@BUILD_CAIRO_OUTPUT_TRUE@cairo_libs = \ +@BUILD_CAIRO_OUTPUT_TRUE@ $(CAIRO_LIBS) + +@BUILD_CAIRO_OUTPUT_TRUE@libpoppler_cairo_la_SOURCES = \ +@BUILD_CAIRO_OUTPUT_TRUE@ CairoFontEngine.cc \ +@BUILD_CAIRO_OUTPUT_TRUE@ CairoFontEngine.h \ +@BUILD_CAIRO_OUTPUT_TRUE@ CairoOutputDev.cc \ +@BUILD_CAIRO_OUTPUT_TRUE@ CairoOutputDev.h \ +@BUILD_CAIRO_OUTPUT_TRUE@ CairoRescaleBox.cc \ +@BUILD_CAIRO_OUTPUT_TRUE@ CairoRescaleBox.h + +@BUILD_LIBJPEG_TRUE@libjpeg_sources = \ +@BUILD_LIBJPEG_TRUE@ DCTStream.h \ +@BUILD_LIBJPEG_TRUE@ DCTStream.cc + +@BUILD_LIBJPEG_TRUE@libjpeg_libs = \ +@BUILD_LIBJPEG_TRUE@ $(LIBJPEG_LIBS) + +@BUILD_LIBPNG_TRUE@libpng_libs = \ +@BUILD_LIBPNG_TRUE@ $(LIBPNG_LIBS) + +@BUILD_LIBPNG_TRUE@libpng_includes = \ +@BUILD_LIBPNG_TRUE@ $(LIBPNG_CFLAGS) + +@BUILD_LIBTIFF_TRUE@libtiff_libs = \ +@BUILD_LIBTIFF_TRUE@ $(LIBTIFF_LIBS) + +@BUILD_LIBTIFF_TRUE@libtiff_includes = \ +@BUILD_LIBTIFF_TRUE@ $(LIBTIFF_CFLAGS) + +@BUILD_LIBOPENJPEG_FALSE@libjpeg2000_sources = \ +@BUILD_LIBOPENJPEG_FALSE@ JPXStream.h \ +@BUILD_LIBOPENJPEG_FALSE@ JPXStream.cc + +@BUILD_LIBOPENJPEG_TRUE@libjpeg2000_sources = \ +@BUILD_LIBOPENJPEG_TRUE@ JPEG2000Stream.h \ +@BUILD_LIBOPENJPEG_TRUE@ JPEG2000Stream.cc + +@BUILD_LIBOPENJPEG_TRUE@libjpeg2000_libs = \ +@BUILD_LIBOPENJPEG_TRUE@ $(LIBOPENJPEG_LIBS) + +@BUILD_ZLIB_TRUE@zlib_sources = \ +@BUILD_ZLIB_TRUE@ FlateStream.h \ +@BUILD_ZLIB_TRUE@ FlateStream.cc + +@BUILD_ZLIB_TRUE@zlib_libs = \ +@BUILD_ZLIB_TRUE@ $(ZLIB_LIBS) + +@BUILD_LIBCURL_TRUE@libcurl_libs = \ +@BUILD_LIBCURL_TRUE@ $(LIBCURL_LIBS) + +@BUILD_LIBCURL_TRUE@libcurl_includes = \ +@BUILD_LIBCURL_TRUE@ $(LIBCURL_CFLAGS) + +@BUILD_LIBCURL_TRUE@curl_headers = \ +@BUILD_LIBCURL_TRUE@ CurlCachedFile.h \ +@BUILD_LIBCURL_TRUE@ CurlPDFDocBuilder.h + +@BUILD_LIBCURL_TRUE@curl_sources = \ +@BUILD_LIBCURL_TRUE@ CurlCachedFile.cc \ +@BUILD_LIBCURL_TRUE@ CurlPDFDocBuilder.cc + +@USE_CMS_TRUE@cms_includes = $(LCMS_CFLAGS) +@USE_CMS_TRUE@cms_libs = $(LCMS_LIBS) +INCLUDES = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/goo \ + $(cms_includes) \ + $(splash_includes) \ + $(cairo_includes) \ + $(arthur_includes) \ + $(libtiff_includes) \ + $(libpng_includes) \ + $(libcurl_includes) \ + $(FREETYPE_CFLAGS) \ + $(FONTCONFIG_CFLAGS) + +lib_LTLIBRARIES = libpoppler.la +noinst_LTLIBRARIES = $(poppler_cairo) \ + $(poppler_arthur) + +libpoppler_la_LIBADD = \ + $(top_builddir)/goo/libgoo.la \ + $(top_builddir)/fofi/libfofi.la \ + $(cms_libs) \ + $(splash_libs) \ + $(libtiff_libs) \ + $(libjpeg_libs) \ + $(libpng_libs) \ + $(zlib_libs) \ + $(libcurl_libs) \ + $(libjpeg2000_libs) \ + $(FREETYPE_LIBS) \ + $(FONTCONFIG_LIBS) \ + $(PTHREAD_LIBS) \ + $(win32_libs) + +libpoppler_la_LDFLAGS = -version-info 19:0:0 @create_shared_lib@ @auto_import_flags@ +@ENABLE_XPDF_HEADERS_TRUE@poppler_includedir = $(includedir)/poppler +@ENABLE_XPDF_HEADERS_TRUE@poppler_include_HEADERS = \ +@ENABLE_XPDF_HEADERS_TRUE@ $(splash_headers) \ +@ENABLE_XPDF_HEADERS_TRUE@ $(curl_headers) \ +@ENABLE_XPDF_HEADERS_TRUE@ Annot.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Array.h \ +@ENABLE_XPDF_HEADERS_TRUE@ BuiltinFont.h \ +@ENABLE_XPDF_HEADERS_TRUE@ BuiltinFontTables.h \ +@ENABLE_XPDF_HEADERS_TRUE@ CachedFile.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Catalog.h \ +@ENABLE_XPDF_HEADERS_TRUE@ CharCodeToUnicode.h \ +@ENABLE_XPDF_HEADERS_TRUE@ CMap.h \ +@ENABLE_XPDF_HEADERS_TRUE@ DateInfo.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Decrypt.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Dict.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Error.h \ +@ENABLE_XPDF_HEADERS_TRUE@ FileSpec.h \ +@ENABLE_XPDF_HEADERS_TRUE@ FontEncodingTables.h \ +@ENABLE_XPDF_HEADERS_TRUE@ FontInfo.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Form.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Function.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Gfx.h \ +@ENABLE_XPDF_HEADERS_TRUE@ GfxFont.h \ +@ENABLE_XPDF_HEADERS_TRUE@ GfxState.h \ +@ENABLE_XPDF_HEADERS_TRUE@ GfxState_helpers.h \ +@ENABLE_XPDF_HEADERS_TRUE@ GlobalParams.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Hints.h \ +@ENABLE_XPDF_HEADERS_TRUE@ JArithmeticDecoder.h \ +@ENABLE_XPDF_HEADERS_TRUE@ JBIG2Stream.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Lexer.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Linearization.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Link.h \ +@ENABLE_XPDF_HEADERS_TRUE@ LocalPDFDocBuilder.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Movie.h \ +@ENABLE_XPDF_HEADERS_TRUE@ NameToCharCode.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Object.h \ +@ENABLE_XPDF_HEADERS_TRUE@ OptionalContent.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Outline.h \ +@ENABLE_XPDF_HEADERS_TRUE@ OutputDev.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Page.h \ +@ENABLE_XPDF_HEADERS_TRUE@ PageTransition.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Parser.h \ +@ENABLE_XPDF_HEADERS_TRUE@ PDFDoc.h \ +@ENABLE_XPDF_HEADERS_TRUE@ PDFDocBuilder.h \ +@ENABLE_XPDF_HEADERS_TRUE@ PDFDocEncoding.h \ +@ENABLE_XPDF_HEADERS_TRUE@ PDFDocFactory.h \ +@ENABLE_XPDF_HEADERS_TRUE@ PopplerCache.h \ +@ENABLE_XPDF_HEADERS_TRUE@ ProfileData.h \ +@ENABLE_XPDF_HEADERS_TRUE@ PreScanOutputDev.h \ +@ENABLE_XPDF_HEADERS_TRUE@ PSTokenizer.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Rendition.h \ +@ENABLE_XPDF_HEADERS_TRUE@ StdinCachedFile.h \ +@ENABLE_XPDF_HEADERS_TRUE@ StdinPDFDocBuilder.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Stream-CCITT.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Stream.h \ +@ENABLE_XPDF_HEADERS_TRUE@ UnicodeMap.h \ +@ENABLE_XPDF_HEADERS_TRUE@ UnicodeMapTables.h \ +@ENABLE_XPDF_HEADERS_TRUE@ UnicodeTypeTable.h \ +@ENABLE_XPDF_HEADERS_TRUE@ UnicodeCClassTables.h \ +@ENABLE_XPDF_HEADERS_TRUE@ UnicodeCompTables.h \ +@ENABLE_XPDF_HEADERS_TRUE@ UnicodeDecompTables.h \ +@ENABLE_XPDF_HEADERS_TRUE@ ViewerPreferences.h \ +@ENABLE_XPDF_HEADERS_TRUE@ XRef.h \ +@ENABLE_XPDF_HEADERS_TRUE@ CharTypes.h \ +@ENABLE_XPDF_HEADERS_TRUE@ CompactFontTables.h \ +@ENABLE_XPDF_HEADERS_TRUE@ ErrorCodes.h \ +@ENABLE_XPDF_HEADERS_TRUE@ NameToUnicodeTable.h \ +@ENABLE_XPDF_HEADERS_TRUE@ PSOutputDev.h \ +@ENABLE_XPDF_HEADERS_TRUE@ TextOutputDev.h \ +@ENABLE_XPDF_HEADERS_TRUE@ SecurityHandler.h \ +@ENABLE_XPDF_HEADERS_TRUE@ UTF8.h \ +@ENABLE_XPDF_HEADERS_TRUE@ XpdfPluginAPI.h \ +@ENABLE_XPDF_HEADERS_TRUE@ Sound.h + +@ENABLE_XPDF_HEADERS_TRUE@nodist_poppler_include_HEADERS = poppler-config.h +libpoppler_la_SOURCES = \ + $(splash_sources) \ + $(cairo_sources) \ + $(arthur_sources) \ + $(libjpeg_sources) \ + $(zlib_sources) \ + $(libjpeg2000_sources) \ + $(curl_sources) \ + Annot.cc \ + Array.cc \ + BuiltinFont.cc \ + BuiltinFontTables.cc \ + CachedFile.cc \ + Catalog.cc \ + CharCodeToUnicode.cc \ + CMap.cc \ + DateInfo.cc \ + Decrypt.cc \ + Dict.cc \ + Error.cc \ + FileSpec.cc \ + FontEncodingTables.cc \ + Form.cc \ + FontInfo.cc \ + Function.cc \ + Gfx.cc \ + GfxFont.cc \ + GfxState.cc \ + GlobalParams.cc \ + Hints.cc \ + JArithmeticDecoder.cc \ + JBIG2Stream.cc \ + Lexer.cc \ + Linearization.cc \ + Link.cc \ + LocalPDFDocBuilder.cc \ + Movie.cc \ + NameToCharCode.cc \ + Object.cc \ + OptionalContent.cc \ + Outline.cc \ + OutputDev.cc \ + Page.cc \ + PageTransition.cc \ + Parser.cc \ + PDFDoc.cc \ + PDFDocEncoding.cc \ + PDFDocFactory.cc \ + PopplerCache.cc \ + ProfileData.cc \ + PreScanOutputDev.cc \ + PSTokenizer.cc \ + Rendition.cc \ + StdinCachedFile.cc \ + StdinPDFDocBuilder.cc \ + Stream.cc \ + strtok_r.cpp \ + UnicodeMap.cc \ + UnicodeTypeTable.cc \ + ViewerPreferences.cc \ + XRef.cc \ + PSOutputDev.cc \ + TextOutputDev.cc \ + PageLabelInfo.h \ + PageLabelInfo.cc \ + SecurityHandler.cc \ + Sound.cc \ + XpdfPluginAPI.cc + +EXTRA_DIST = gen-unicode-tables.py \ + GlobalParamsWin.cc + +all: poppler-config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .cc .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign poppler/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign poppler/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +poppler-config.h: stamp-h2 + @if test ! -f $@; then \ + rm -f stamp-h2; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h2; \ + else :; fi + +stamp-h2: $(srcdir)/poppler-config.h.in $(top_builddir)/config.status + @rm -f stamp-h2 + cd $(top_builddir) && $(SHELL) ./config.status poppler/poppler-config.h +$(srcdir)/poppler-config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h2 + touch $@ + +distclean-hdr: + -rm -f poppler-config.h stamp-h2 +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libpoppler-arthur.la: $(libpoppler_arthur_la_OBJECTS) $(libpoppler_arthur_la_DEPENDENCIES) + $(AM_V_CXXLD)$(CXXLINK) $(am_libpoppler_arthur_la_rpath) $(libpoppler_arthur_la_OBJECTS) $(libpoppler_arthur_la_LIBADD) $(LIBS) +libpoppler-cairo.la: $(libpoppler_cairo_la_OBJECTS) $(libpoppler_cairo_la_DEPENDENCIES) + $(AM_V_CXXLD)$(CXXLINK) $(am_libpoppler_cairo_la_rpath) $(libpoppler_cairo_la_OBJECTS) $(libpoppler_cairo_la_LIBADD) $(LIBS) +libpoppler.la: $(libpoppler_la_OBJECTS) $(libpoppler_la_DEPENDENCIES) + $(AM_V_CXXLD)$(libpoppler_la_LINK) -rpath $(libdir) $(libpoppler_la_OBJECTS) $(libpoppler_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Annot.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Array.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ArthurOutputDev.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BuiltinFont.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BuiltinFontTables.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMap.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CachedFile.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CairoFontEngine.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CairoOutputDev.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CairoRescaleBox.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Catalog.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CharCodeToUnicode.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CurlCachedFile.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CurlPDFDocBuilder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DCTStream.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DateInfo.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Decrypt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Dict.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Error.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileSpec.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FlateStream.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontEncodingTables.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontInfo.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Form.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Function.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Gfx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GfxFont.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GfxState.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GlobalParams.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Hints.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JArithmeticDecoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JBIG2Stream.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JPEG2000Stream.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JPXStream.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Lexer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Linearization.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Link.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LocalPDFDocBuilder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Movie.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NameToCharCode.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Object.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OptionalContent.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Outline.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OutputDev.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PDFDoc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PDFDocEncoding.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PDFDocFactory.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSOutputDev.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSTokenizer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Page.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PageLabelInfo.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PageTransition.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Parser.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PopplerCache.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreScanOutputDev.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProfileData.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Rendition.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SecurityHandler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Sound.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SplashOutputDev.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StdinCachedFile.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StdinPDFDocBuilder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Stream.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TextOutputDev.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnicodeMap.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnicodeTypeTable.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ViewerPreferences.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XRef.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XpdfPluginAPI.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtok_r.Plo@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +.cpp.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-nodist_poppler_includeHEADERS: $(nodist_poppler_include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(poppler_includedir)" || $(MKDIR_P) "$(DESTDIR)$(poppler_includedir)" + @list='$(nodist_poppler_include_HEADERS)'; test -n "$(poppler_includedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(poppler_includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(poppler_includedir)" || exit $$?; \ + done + +uninstall-nodist_poppler_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nodist_poppler_include_HEADERS)'; test -n "$(poppler_includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(poppler_includedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(poppler_includedir)" && rm -f $$files +install-poppler_includeHEADERS: $(poppler_include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(poppler_includedir)" || $(MKDIR_P) "$(DESTDIR)$(poppler_includedir)" + @list='$(poppler_include_HEADERS)'; test -n "$(poppler_includedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(poppler_includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(poppler_includedir)" || exit $$?; \ + done + +uninstall-poppler_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(poppler_include_HEADERS)'; test -n "$(poppler_includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(poppler_includedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(poppler_includedir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) poppler-config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) poppler-config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) poppler-config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) poppler-config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) poppler-config.h +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(poppler_includedir)" "$(DESTDIR)$(poppler_includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-noinstLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-nodist_poppler_includeHEADERS \ + install-poppler_includeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES \ + uninstall-nodist_poppler_includeHEADERS \ + uninstall-poppler_includeHEADERS + +.MAKE: all install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ + ctags distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-nodist_poppler_includeHEADERS install-pdf \ + install-pdf-am install-poppler_includeHEADERS install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-libLTLIBRARIES \ + uninstall-nodist_poppler_includeHEADERS \ + uninstall-poppler_includeHEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Movie.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Movie.cc new file mode 100644 index 00000000000..3e764ac1590 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Movie.cc @@ -0,0 +1,285 @@ +//********************************************************************************* +// Movie.cc +//--------------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------------- +// Hugo Mercier <hmercier31[at]gmail.com> (c) 2008 +// Pino Toscano <pino@kde.org> (c) 2008 +// Carlos Garcia Campos <carlosgc@gnome.org> (c) 2010 +// Albert Astals Cid <aacid@kde.org> (c) 2010 +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +//********************************************************************************* + +#include <math.h> +#include "Movie.h" +#include "FileSpec.h" + +MovieActivationParameters::MovieActivationParameters() { + // default values + floatingWindow = gFalse; + xPosition = 0.5; + yPosition = 0.5; + rate = 1.0; + volume = 100; + showControls = gFalse; + synchronousPlay = gFalse; + repeatMode = repeatModeOnce; + start.units = 0; + duration.units = 0; + znum = 1; + zdenum = 1; +} + +MovieActivationParameters::~MovieActivationParameters() { +} + +void MovieActivationParameters::parseMovieActivation(Object* aDict) { + Object obj1; + + if (!aDict->dictLookup("Start", &obj1)->isNull()) { + if (obj1.isInt()) { + // If it is representable as an integer (subject to the implementation limit for + // integers, as described in Appendix C), it should be specified as such. + + start.units = obj1.getInt(); + } else if (obj1.isString()) { + // If it is not representable as an integer, it should be specified as an 8-byte + // string representing a 64-bit twos-complement integer, most significant + // byte first. + + // UNSUPPORTED + } else if (obj1.isArray()) { + Array* a = obj1.getArray(); + + Object tmp; + a->get(0, &tmp); + if (tmp.isInt()) { + start.units = tmp.getInt(); + } + if (tmp.isString()) { + // UNSUPPORTED + } + tmp.free(); + + a->get(1, &tmp); + if (tmp.isInt()) { + start.units_per_second = tmp.getInt(); + } + tmp.free(); + } + } + obj1.free(); + + if (!aDict->dictLookup("Duration", &obj1)->isNull()) { + if (obj1.isInt()) { + duration.units = obj1.getInt(); + } else if (obj1.isString()) { + // UNSUPPORTED + } else if (obj1.isArray()) { + Array* a = obj1.getArray(); + + Object tmp; + a->get(0, &tmp); + if (tmp.isInt()) { + duration.units = tmp.getInt(); + } + if (tmp.isString()) { + // UNSUPPORTED + } + tmp.free(); + + a->get(1, &tmp); + if (tmp.isInt()) { + duration.units_per_second = tmp.getInt(); + } + tmp.free(); + } + } + obj1.free(); + + if (aDict->dictLookup("Rate", &obj1)->isNum()) { + rate = obj1.getNum(); + } + obj1.free(); + + if (aDict->dictLookup("Volume", &obj1)->isNum()) { + // convert volume to [0 100] + volume = int((obj1.getNum() + 1.0) * 50); + } + obj1.free(); + + if (aDict->dictLookup("ShowControls", &obj1)->isBool()) { + showControls = obj1.getBool(); + } + obj1.free(); + + if (aDict->dictLookup("Synchronous", &obj1)->isBool()) { + synchronousPlay = obj1.getBool(); + } + obj1.free(); + + if (aDict->dictLookup("Mode", &obj1)->isName()) { + char* name = obj1.getName(); + if (!strcmp(name, "Once")) { + repeatMode = repeatModeOnce; + } else if (!strcmp(name, "Open")) { + repeatMode = repeatModeOpen; + } else if (!strcmp(name, "Repeat")) { + repeatMode = repeatModeRepeat; + } else if (!strcmp(name,"Palindrome")) { + repeatMode = repeatModePalindrome; + } + } + obj1.free(); + + if (aDict->dictLookup("FWScale", &obj1)->isArray()) { + // the presence of that entry implies that the movie is to be played + // in a floating window + floatingWindow = gTrue; + + Array* scale = obj1.getArray(); + if (scale->getLength() >= 2) { + Object tmp; + if (scale->get(0, &tmp)->isInt()) { + znum = tmp.getInt(); + } + tmp.free(); + if (scale->get(1, &tmp)->isInt()) { + zdenum = tmp.getInt(); + } + tmp.free(); + } + } + obj1.free(); + + if (aDict->dictLookup("FWPosition", &obj1)->isArray()) { + Array* pos = obj1.getArray(); + if (pos->getLength() >= 2) { + Object tmp; + if (pos->get(0, &tmp)->isNum()) { + xPosition = tmp.getNum(); + } + tmp.free(); + if (pos->get(1, &tmp)->isNum()) { + yPosition = tmp.getNum(); + } + tmp.free(); + } + } + obj1.free(); +} + +void Movie::parseMovie (Object *movieDict) { + fileName = NULL; + rotationAngle = 0; + width = -1; + height = -1; + showPoster = gFalse; + + Object obj1, obj2; + if (getFileSpecNameForPlatform(movieDict->dictLookup("F", &obj1), &obj2)) { + fileName = obj2.getString()->copy(); + obj2.free(); + } else { + error (-1, "Invalid Movie"); + ok = gFalse; + obj1.free(); + return; + } + obj1.free(); + + if (movieDict->dictLookup("Aspect", &obj1)->isArray()) { + Array* aspect = obj1.getArray(); + if (aspect->getLength() >= 2) { + Object tmp; + if( aspect->get(0, &tmp)->isNum() ) { + width = (int)floor( aspect->get(0, &tmp)->getNum() + 0.5 ); + } + tmp.free(); + if( aspect->get(1, &tmp)->isNum() ) { + height = (int)floor( aspect->get(1, &tmp)->getNum() + 0.5 ); + } + tmp.free(); + } + } + obj1.free(); + + if (movieDict->dictLookup("Rotate", &obj1)->isInt()) { + // round up to 90° + rotationAngle = (((obj1.getInt() + 360) % 360) % 90) * 90; + } + obj1.free(); + + // + // movie poster + // + if (!movieDict->dictLookupNF("Poster", &poster)->isNull()) { + if (poster.isRef() || poster.isStream()) { + showPoster = gTrue; + } else if (poster.isBool()) { + showPoster = poster.getBool(); + poster.free(); + } else { + poster.free(); + } + } +} + +Movie::~Movie() { + if (fileName) + delete fileName; + poster.free(); +} + +Movie::Movie(Object *movieDict) { + ok = gTrue; + + if (movieDict->isDict()) + parseMovie(movieDict); + else + ok = gFalse; +} + +Movie::Movie(Object *movieDict, Object *aDict) { + ok = gTrue; + + if (movieDict->isDict()) { + parseMovie(movieDict); + if (aDict->isDict()) + MA.parseMovieActivation(aDict); + } else { + ok = gFalse; + } +} + +void Movie::getFloatingWindowSize(int *widthA, int *heightA) +{ + *widthA = int(width * double(MA.znum) / MA.zdenum); + *heightA = int(height * double(MA.znum) / MA.zdenum); +} + +Movie* Movie::copy() { + + // call default copy constructor + Movie* new_movie = new Movie(*this); + + if (fileName) + new_movie->fileName = fileName->copy(); + + poster.copy(&new_movie->poster); + + return new_movie; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Movie.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Movie.h new file mode 100644 index 00000000000..1a162659179 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Movie.h @@ -0,0 +1,110 @@ +//********************************************************************************* +// Movie.h +//--------------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------------- +// Hugo Mercier <hmercier31[at]gmail.com> (c) 2008 +// Carlos Garcia Campos <carlosgc@gnome.org> (c) 2010 +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +//********************************************************************************* + +#ifndef _MOVIE_H_ +#define _MOVIE_H_ + +#include "Object.h" + +struct MovieActivationParameters { + + MovieActivationParameters(); + ~MovieActivationParameters(); + + // parse from a "Movie Activation" dictionary + void parseMovieActivation(Object* actObj); + + enum MovieRepeatMode { + repeatModeOnce, + repeatModeOpen, + repeatModeRepeat, + repeatModePalindrome + }; + + struct MovieTime { + MovieTime() { units_per_second = 0; } + Gulong units; + int units_per_second; // 0 : defined by movie + }; + + MovieTime start; // 0 + MovieTime duration; // 0 + + double rate; // 1.0 + + int volume; // 100 + + GBool showControls; // false + + GBool synchronousPlay; // false + MovieRepeatMode repeatMode; // repeatModeOnce + + // floating window position + GBool floatingWindow; + double xPosition; // 0.5 + double yPosition; // 0.5 + int znum; // 1 + int zdenum; // 1 +}; + +class Movie { + public: + Movie(Object *objMovie, Object *objAct); + Movie(Object *objMovie); + ~Movie(); + + GBool isOk() { return ok; } + MovieActivationParameters* getActivationParameters() { return &MA; } + + GooString* getFileName() { return fileName; } + + Gushort getRotationAngle() { return rotationAngle; } + void getAspect (int *widthA, int *heightA) { *widthA = width; *heightA = height; } + + Object *getPoster(Object *obj) { return poster.copy(obj); } + GBool getShowPoster() { return showPoster; } + + GBool getUseFloatingWindow() { return MA.floatingWindow; } + void getFloatingWindowSize(int *width, int *height); + + Movie* copy(); + + private: + void parseMovie (Object *movieDict); + + GBool ok; + + Gushort rotationAngle; // 0 + int width; // Aspect + int height; // Aspect + + Object poster; + GBool showPoster; + + GooString* fileName; + + MovieActivationParameters MA; +}; + +#endif + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/NameToCharCode.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/NameToCharCode.cc new file mode 100644 index 00000000000..efe1c4de0bd --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/NameToCharCode.cc @@ -0,0 +1,116 @@ +//======================================================================== +// +// NameToCharCode.cc +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <string.h> +#include "goo/gmem.h" +#include "NameToCharCode.h" + +//------------------------------------------------------------------------ + +struct NameToCharCodeEntry { + char *name; + CharCode c; +}; + +//------------------------------------------------------------------------ + +NameToCharCode::NameToCharCode() { + int i; + + size = 31; + len = 0; + tab = (NameToCharCodeEntry *)gmallocn(size, sizeof(NameToCharCodeEntry)); + for (i = 0; i < size; ++i) { + tab[i].name = NULL; + } +} + +NameToCharCode::~NameToCharCode() { + int i; + + for (i = 0; i < size; ++i) { + if (tab[i].name) { + gfree(tab[i].name); + } + } + gfree(tab); +} + +void NameToCharCode::add(char *name, CharCode c) { + NameToCharCodeEntry *oldTab; + int h, i, oldSize; + + // expand the table if necessary + if (len >= size / 2) { + oldSize = size; + oldTab = tab; + size = 2*size + 1; + tab = (NameToCharCodeEntry *)gmallocn(size, sizeof(NameToCharCodeEntry)); + for (h = 0; h < size; ++h) { + tab[h].name = NULL; + } + for (i = 0; i < oldSize; ++i) { + if (oldTab[i].name) { + h = hash(oldTab[i].name); + while (tab[h].name) { + if (++h == size) { + h = 0; + } + } + tab[h] = oldTab[i]; + } + } + gfree(oldTab); + } + + // add the new name + h = hash(name); + while (tab[h].name && strcmp(tab[h].name, name)) { + if (++h == size) { + h = 0; + } + } + if (!tab[h].name) { + tab[h].name = copyString(name); + } + tab[h].c = c; + + ++len; +} + +CharCode NameToCharCode::lookup(char *name) { + int h; + + h = hash(name); + while (tab[h].name) { + if (!strcmp(tab[h].name, name)) { + return tab[h].c; + } + if (++h == size) { + h = 0; + } + } + return 0; +} + +int NameToCharCode::hash(char *name) { + char *p; + unsigned int h; + + h = 0; + for (p = name; *p; ++p) { + h = 17 * h + (int)(*p & 0xff); + } + return (int)(h % size); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/NameToCharCode.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/NameToCharCode.h new file mode 100644 index 00000000000..bc57c3736c1 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/NameToCharCode.h @@ -0,0 +1,40 @@ +//======================================================================== +// +// NameToCharCode.h +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef NAMETOCHARCODE_H +#define NAMETOCHARCODE_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "CharTypes.h" + +struct NameToCharCodeEntry; + +//------------------------------------------------------------------------ + +class NameToCharCode { +public: + + NameToCharCode(); + ~NameToCharCode(); + + void add(char *name, CharCode c); + CharCode lookup(char *name); + +private: + + int hash(char *name); + + NameToCharCodeEntry *tab; + int size; + int len; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/NameToUnicodeTable.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/NameToUnicodeTable.h new file mode 100644 index 00000000000..650f62ea88d --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/NameToUnicodeTable.h @@ -0,0 +1,1115 @@ +//======================================================================== +// +// NameToUnicodeTable.h +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2011 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include "CharTypes.h" + +#include <stddef.h> + +static struct { + Unicode u; + char *name; +} nameToUnicodeTab[] = { + {0x0021, "!"}, + {0x0023, "#"}, + {0x0024, "$"}, + {0x0025, "%"}, + {0x0026, "&"}, + {0x0027, "'"}, + {0x0028, "("}, + {0x0029, ")"}, + {0x002a, "*"}, + {0x002b, "+"}, + {0x002c, ","}, + {0x002d, "-"}, + {0x002e, "."}, + {0x002f, "/"}, + {0x0030, "0"}, + {0x0031, "1"}, + {0x0032, "2"}, + {0x0033, "3"}, + {0x0034, "4"}, + {0x0035, "5"}, + {0x0036, "6"}, + {0x0037, "7"}, + {0x0038, "8"}, + {0x0039, "9"}, + {0x003a, ":"}, + {0x003b, ";"}, + {0x003c, "<"}, + {0x003d, "="}, + {0x003e, ">"}, + {0x003f, "?"}, + {0x0040, "@"}, + {0x0041, "A"}, + {0x00c6, "AE"}, + {0x01fc, "AEacute"}, + {0xf7e6, "AEsmall"}, + {0x00c1, "Aacute"}, + {0xf7e1, "Aacutesmall"}, + {0x0102, "Abreve"}, + {0x00c2, "Acircumflex"}, + {0xf7e2, "Acircumflexsmall"}, + {0xf6c9, "Acute"}, + {0xf7b4, "Acutesmall"}, + {0x00c4, "Adieresis"}, + {0xf7e4, "Adieresissmall"}, + {0x00c0, "Agrave"}, + {0xf7e0, "Agravesmall"}, + {0x0391, "Alpha"}, + {0x0386, "Alphatonos"}, + {0x0100, "Amacron"}, + {0x0104, "Aogonek"}, + {0x00c5, "Aring"}, + {0x01fa, "Aringacute"}, + {0xf7e5, "Aringsmall"}, + {0xf761, "Asmall"}, + {0x00c3, "Atilde"}, + {0xf7e3, "Atildesmall"}, + {0x0042, "B"}, + {0x0392, "Beta"}, + {0xf6f4, "Brevesmall"}, + {0xf762, "Bsmall"}, + {0x0043, "C"}, + {0x0106, "Cacute"}, + {0xf6ca, "Caron"}, + {0xf6f5, "Caronsmall"}, + {0x010c, "Ccaron"}, + {0x00c7, "Ccedilla"}, + {0xf7e7, "Ccedillasmall"}, + {0x0108, "Ccircumflex"}, + {0x010a, "Cdotaccent"}, + {0xf7b8, "Cedillasmall"}, + {0x03a7, "Chi"}, + {0xf6f6, "Circumflexsmall"}, + {0xf763, "Csmall"}, + {0x0044, "D"}, + {0x010e, "Dcaron"}, + {0x0110, "Dcroat"}, + {0x2206, "Delta"}, + {0xf6cb, "Dieresis"}, + {0xf6cc, "DieresisAcute"}, + {0xf6cd, "DieresisGrave"}, + {0xf7a8, "Dieresissmall"}, + {0xf6f7, "Dotaccentsmall"}, + {0xf764, "Dsmall"}, + {0x0045, "E"}, + {0x00c9, "Eacute"}, + {0xf7e9, "Eacutesmall"}, + {0x0114, "Ebreve"}, + {0x011a, "Ecaron"}, + {0x00ca, "Ecircumflex"}, + {0xf7ea, "Ecircumflexsmall"}, + {0x00cb, "Edieresis"}, + {0xf7eb, "Edieresissmall"}, + {0x0116, "Edotaccent"}, + {0x00c8, "Egrave"}, + {0xf7e8, "Egravesmall"}, + {0x0112, "Emacron"}, + {0x014a, "Eng"}, + {0x0118, "Eogonek"}, + {0x0395, "Epsilon"}, + {0x0388, "Epsilontonos"}, + {0xf765, "Esmall"}, + {0x0397, "Eta"}, + {0x0389, "Etatonos"}, + {0x00d0, "Eth"}, + {0xf7f0, "Ethsmall"}, + {0x20ac, "Euro"}, + {0x0046, "F"}, + {0xf766, "Fsmall"}, + {0x0047, "G"}, + {0x0393, "Gamma"}, + {0x011e, "Gbreve"}, + {0x01e6, "Gcaron"}, + {0x011c, "Gcircumflex"}, + {0x0122, "Gcommaaccent"}, + {0x0120, "Gdotaccent"}, + {0xf6ce, "Grave"}, + {0xf760, "Gravesmall"}, + {0xf767, "Gsmall"}, + {0x0048, "H"}, + {0x25cf, "H18533"}, + {0x25aa, "H18543"}, + {0x25ab, "H18551"}, + {0x25a1, "H22073"}, + {0x0126, "Hbar"}, + {0x0124, "Hcircumflex"}, + {0xf768, "Hsmall"}, + {0xf6cf, "Hungarumlaut"}, + {0xf6f8, "Hungarumlautsmall"}, + {0x0049, "I"}, + {0x0132, "IJ"}, + {0x00cd, "Iacute"}, + {0xf7ed, "Iacutesmall"}, + {0x012c, "Ibreve"}, + {0x00ce, "Icircumflex"}, + {0xf7ee, "Icircumflexsmall"}, + {0x00cf, "Idieresis"}, + {0xf7ef, "Idieresissmall"}, + {0x0130, "Idotaccent"}, + {0x2111, "Ifraktur"}, + {0x00cc, "Igrave"}, + {0xf7ec, "Igravesmall"}, + {0x012a, "Imacron"}, + {0x012e, "Iogonek"}, + {0x0399, "Iota"}, + {0x03aa, "Iotadieresis"}, + {0x038a, "Iotatonos"}, + {0xf769, "Ismall"}, + {0x0128, "Itilde"}, + {0x004a, "J"}, + {0x0134, "Jcircumflex"}, + {0xf76a, "Jsmall"}, + {0x004b, "K"}, + {0x039a, "Kappa"}, + {0x0136, "Kcommaaccent"}, + {0xf76b, "Ksmall"}, + {0x004c, "L"}, + {0xf6bf, "LL"}, + {0x0139, "Lacute"}, + {0x039b, "Lambda"}, + {0x013d, "Lcaron"}, + {0x013b, "Lcommaaccent"}, + {0x013f, "Ldot"}, + {0x0141, "Lslash"}, + {0xf6f9, "Lslashsmall"}, + {0xf76c, "Lsmall"}, + {0x004d, "M"}, + {0xf6d0, "Macron"}, + {0xf7af, "Macronsmall"}, + {0xf76d, "Msmall"}, + {0x039c, "Mu"}, + {0x004e, "N"}, + {0x0143, "Nacute"}, + {0x0147, "Ncaron"}, + {0x0145, "Ncommaaccent"}, + {0xf76e, "Nsmall"}, + {0x00d1, "Ntilde"}, + {0xf7f1, "Ntildesmall"}, + {0x039d, "Nu"}, + {0x004f, "O"}, + {0x0152, "OE"}, + {0xf6fa, "OEsmall"}, + {0x00d3, "Oacute"}, + {0xf7f3, "Oacutesmall"}, + {0x014e, "Obreve"}, + {0x00d4, "Ocircumflex"}, + {0xf7f4, "Ocircumflexsmall"}, + {0x00d6, "Odieresis"}, + {0xf7f6, "Odieresissmall"}, + {0xf6fb, "Ogoneksmall"}, + {0x00d2, "Ograve"}, + {0xf7f2, "Ogravesmall"}, + {0x01a0, "Ohorn"}, + {0x0150, "Ohungarumlaut"}, + {0x014c, "Omacron"}, + {0x2126, "Omega"}, + {0x038f, "Omegatonos"}, + {0x039f, "Omicron"}, + {0x038c, "Omicrontonos"}, + {0x00d8, "Oslash"}, + {0x01fe, "Oslashacute"}, + {0xf7f8, "Oslashsmall"}, + {0xf76f, "Osmall"}, + {0x00d5, "Otilde"}, + {0xf7f5, "Otildesmall"}, + {0x0050, "P"}, + {0x03a6, "Phi"}, + {0x03a0, "Pi"}, + {0x03a8, "Psi"}, + {0xf770, "Psmall"}, + {0x0051, "Q"}, + {0xf771, "Qsmall"}, + {0x0052, "R"}, + {0x0154, "Racute"}, + {0x0158, "Rcaron"}, + {0x0156, "Rcommaaccent"}, + {0x211c, "Rfraktur"}, + {0x03a1, "Rho"}, + {0xf6fc, "Ringsmall"}, + {0xf772, "Rsmall"}, + {0x0053, "S"}, + {0x250c, "SF010000"}, + {0x2514, "SF020000"}, + {0x2510, "SF030000"}, + {0x2518, "SF040000"}, + {0x253c, "SF050000"}, + {0x252c, "SF060000"}, + {0x2534, "SF070000"}, + {0x251c, "SF080000"}, + {0x2524, "SF090000"}, + {0x2500, "SF100000"}, + {0x2502, "SF110000"}, + {0x2561, "SF190000"}, + {0x2562, "SF200000"}, + {0x2556, "SF210000"}, + {0x2555, "SF220000"}, + {0x2563, "SF230000"}, + {0x2551, "SF240000"}, + {0x2557, "SF250000"}, + {0x255d, "SF260000"}, + {0x255c, "SF270000"}, + {0x255b, "SF280000"}, + {0x255e, "SF360000"}, + {0x255f, "SF370000"}, + {0x255a, "SF380000"}, + {0x2554, "SF390000"}, + {0x2569, "SF400000"}, + {0x2566, "SF410000"}, + {0x2560, "SF420000"}, + {0x2550, "SF430000"}, + {0x256c, "SF440000"}, + {0x2567, "SF450000"}, + {0x2568, "SF460000"}, + {0x2564, "SF470000"}, + {0x2565, "SF480000"}, + {0x2559, "SF490000"}, + {0x2558, "SF500000"}, + {0x2552, "SF510000"}, + {0x2553, "SF520000"}, + {0x256b, "SF530000"}, + {0x256a, "SF540000"}, + {0x015a, "Sacute"}, + {0x0160, "Scaron"}, + {0xf6fd, "Scaronsmall"}, + {0x015e, "Scedilla"}, + {0x015c, "Scircumflex"}, + {0x0218, "Scommaaccent"}, + {0x03a3, "Sigma"}, + {0xf773, "Ssmall"}, + {0x0054, "T"}, + {0x03a4, "Tau"}, + {0x0166, "Tbar"}, + {0x0164, "Tcaron"}, + {0x0162, "Tcommaaccent"}, + {0x0398, "Theta"}, + {0x00de, "Thorn"}, + {0xf7fe, "Thornsmall"}, + {0xf6fe, "Tildesmall"}, + {0xf774, "Tsmall"}, + {0x0055, "U"}, + {0x00da, "Uacute"}, + {0xf7fa, "Uacutesmall"}, + {0x016c, "Ubreve"}, + {0x00db, "Ucircumflex"}, + {0xf7fb, "Ucircumflexsmall"}, + {0x00dc, "Udieresis"}, + {0xf7fc, "Udieresissmall"}, + {0x00d9, "Ugrave"}, + {0xf7f9, "Ugravesmall"}, + {0x01af, "Uhorn"}, + {0x0170, "Uhungarumlaut"}, + {0x016a, "Umacron"}, + {0x0172, "Uogonek"}, + {0x03a5, "Upsilon"}, + {0x03d2, "Upsilon1"}, + {0x03ab, "Upsilondieresis"}, + {0x038e, "Upsilontonos"}, + {0x016e, "Uring"}, + {0xf775, "Usmall"}, + {0x0168, "Utilde"}, + {0x0056, "V"}, + {0xf776, "Vsmall"}, + {0x0057, "W"}, + {0x1e82, "Wacute"}, + {0x0174, "Wcircumflex"}, + {0x1e84, "Wdieresis"}, + {0x1e80, "Wgrave"}, + {0xf777, "Wsmall"}, + {0x0058, "X"}, + {0x039e, "Xi"}, + {0xf778, "Xsmall"}, + {0x0059, "Y"}, + {0x00dd, "Yacute"}, + {0xf7fd, "Yacutesmall"}, + {0x0176, "Ycircumflex"}, + {0x0178, "Ydieresis"}, + {0xf7ff, "Ydieresissmall"}, + {0x1ef2, "Ygrave"}, + {0xf779, "Ysmall"}, + {0x005a, "Z"}, + {0x0179, "Zacute"}, + {0x017d, "Zcaron"}, + {0xf6ff, "Zcaronsmall"}, + {0x017b, "Zdotaccent"}, + {0x0396, "Zeta"}, + {0xf77a, "Zsmall"}, + {0x0022, "\""}, + {0x005c, "\\"}, + {0x005d, "]"}, + {0x005e, "^"}, + {0x005f, "_"}, + {0x0060, "`"}, + {0x0061, "a"}, + {0x00e1, "aacute"}, + {0x0103, "abreve"}, + {0x00e2, "acircumflex"}, + {0x00b4, "acute"}, + {0x0301, "acutecomb"}, + {0x00e4, "adieresis"}, + {0x00e6, "ae"}, + {0x01fd, "aeacute"}, + {0x2015, "afii00208"}, + {0x0410, "afii10017"}, + {0x0411, "afii10018"}, + {0x0412, "afii10019"}, + {0x0413, "afii10020"}, + {0x0414, "afii10021"}, + {0x0415, "afii10022"}, + {0x0401, "afii10023"}, + {0x0416, "afii10024"}, + {0x0417, "afii10025"}, + {0x0418, "afii10026"}, + {0x0419, "afii10027"}, + {0x041a, "afii10028"}, + {0x041b, "afii10029"}, + {0x041c, "afii10030"}, + {0x041d, "afii10031"}, + {0x041e, "afii10032"}, + {0x041f, "afii10033"}, + {0x0420, "afii10034"}, + {0x0421, "afii10035"}, + {0x0422, "afii10036"}, + {0x0423, "afii10037"}, + {0x0424, "afii10038"}, + {0x0425, "afii10039"}, + {0x0426, "afii10040"}, + {0x0427, "afii10041"}, + {0x0428, "afii10042"}, + {0x0429, "afii10043"}, + {0x042a, "afii10044"}, + {0x042b, "afii10045"}, + {0x042c, "afii10046"}, + {0x042d, "afii10047"}, + {0x042e, "afii10048"}, + {0x042f, "afii10049"}, + {0x0490, "afii10050"}, + {0x0402, "afii10051"}, + {0x0403, "afii10052"}, + {0x0404, "afii10053"}, + {0x0405, "afii10054"}, + {0x0406, "afii10055"}, + {0x0407, "afii10056"}, + {0x0408, "afii10057"}, + {0x0409, "afii10058"}, + {0x040a, "afii10059"}, + {0x040b, "afii10060"}, + {0x040c, "afii10061"}, + {0x040e, "afii10062"}, + {0xf6c4, "afii10063"}, + {0xf6c5, "afii10064"}, + {0x0430, "afii10065"}, + {0x0431, "afii10066"}, + {0x0432, "afii10067"}, + {0x0433, "afii10068"}, + {0x0434, "afii10069"}, + {0x0435, "afii10070"}, + {0x0451, "afii10071"}, + {0x0436, "afii10072"}, + {0x0437, "afii10073"}, + {0x0438, "afii10074"}, + {0x0439, "afii10075"}, + {0x043a, "afii10076"}, + {0x043b, "afii10077"}, + {0x043c, "afii10078"}, + {0x043d, "afii10079"}, + {0x043e, "afii10080"}, + {0x043f, "afii10081"}, + {0x0440, "afii10082"}, + {0x0441, "afii10083"}, + {0x0442, "afii10084"}, + {0x0443, "afii10085"}, + {0x0444, "afii10086"}, + {0x0445, "afii10087"}, + {0x0446, "afii10088"}, + {0x0447, "afii10089"}, + {0x0448, "afii10090"}, + {0x0449, "afii10091"}, + {0x044a, "afii10092"}, + {0x044b, "afii10093"}, + {0x044c, "afii10094"}, + {0x044d, "afii10095"}, + {0x044e, "afii10096"}, + {0x044f, "afii10097"}, + {0x0491, "afii10098"}, + {0x0452, "afii10099"}, + {0x0453, "afii10100"}, + {0x0454, "afii10101"}, + {0x0455, "afii10102"}, + {0x0456, "afii10103"}, + {0x0457, "afii10104"}, + {0x0458, "afii10105"}, + {0x0459, "afii10106"}, + {0x045a, "afii10107"}, + {0x045b, "afii10108"}, + {0x045c, "afii10109"}, + {0x045e, "afii10110"}, + {0x040f, "afii10145"}, + {0x0462, "afii10146"}, + {0x0472, "afii10147"}, + {0x0474, "afii10148"}, + {0xf6c6, "afii10192"}, + {0x045f, "afii10193"}, + {0x0463, "afii10194"}, + {0x0473, "afii10195"}, + {0x0475, "afii10196"}, + {0xf6c7, "afii10831"}, + {0xf6c8, "afii10832"}, + {0x04d9, "afii10846"}, + {0x200e, "afii299"}, + {0x200f, "afii300"}, + {0x200d, "afii301"}, + {0x066a, "afii57381"}, + {0x060c, "afii57388"}, + {0x0660, "afii57392"}, + {0x0661, "afii57393"}, + {0x0662, "afii57394"}, + {0x0663, "afii57395"}, + {0x0664, "afii57396"}, + {0x0665, "afii57397"}, + {0x0666, "afii57398"}, + {0x0667, "afii57399"}, + {0x0668, "afii57400"}, + {0x0669, "afii57401"}, + {0x061b, "afii57403"}, + {0x061f, "afii57407"}, + {0x0621, "afii57409"}, + {0x0622, "afii57410"}, + {0x0623, "afii57411"}, + {0x0624, "afii57412"}, + {0x0625, "afii57413"}, + {0x0626, "afii57414"}, + {0x0627, "afii57415"}, + {0x0628, "afii57416"}, + {0x0629, "afii57417"}, + {0x062a, "afii57418"}, + {0x062b, "afii57419"}, + {0x062c, "afii57420"}, + {0x062d, "afii57421"}, + {0x062e, "afii57422"}, + {0x062f, "afii57423"}, + {0x0630, "afii57424"}, + {0x0631, "afii57425"}, + {0x0632, "afii57426"}, + {0x0633, "afii57427"}, + {0x0634, "afii57428"}, + {0x0635, "afii57429"}, + {0x0636, "afii57430"}, + {0x0637, "afii57431"}, + {0x0638, "afii57432"}, + {0x0639, "afii57433"}, + {0x063a, "afii57434"}, + {0x0640, "afii57440"}, + {0x0641, "afii57441"}, + {0x0642, "afii57442"}, + {0x0643, "afii57443"}, + {0x0644, "afii57444"}, + {0x0645, "afii57445"}, + {0x0646, "afii57446"}, + {0x0648, "afii57448"}, + {0x0649, "afii57449"}, + {0x064a, "afii57450"}, + {0x064b, "afii57451"}, + {0x064c, "afii57452"}, + {0x064d, "afii57453"}, + {0x064e, "afii57454"}, + {0x064f, "afii57455"}, + {0x0650, "afii57456"}, + {0x0651, "afii57457"}, + {0x0652, "afii57458"}, + {0x0647, "afii57470"}, + {0x06a4, "afii57505"}, + {0x067e, "afii57506"}, + {0x0686, "afii57507"}, + {0x0698, "afii57508"}, + {0x06af, "afii57509"}, + {0x0679, "afii57511"}, + {0x0688, "afii57512"}, + {0x0691, "afii57513"}, + {0x06ba, "afii57514"}, + {0x06d2, "afii57519"}, + {0x06d5, "afii57534"}, + {0x20aa, "afii57636"}, + {0x05be, "afii57645"}, + {0x05c3, "afii57658"}, + {0x05d0, "afii57664"}, + {0x05d1, "afii57665"}, + {0x05d2, "afii57666"}, + {0x05d3, "afii57667"}, + {0x05d4, "afii57668"}, + {0x05d5, "afii57669"}, + {0x05d6, "afii57670"}, + {0x05d7, "afii57671"}, + {0x05d8, "afii57672"}, + {0x05d9, "afii57673"}, + {0x05da, "afii57674"}, + {0x05db, "afii57675"}, + {0x05dc, "afii57676"}, + {0x05dd, "afii57677"}, + {0x05de, "afii57678"}, + {0x05df, "afii57679"}, + {0x05e0, "afii57680"}, + {0x05e1, "afii57681"}, + {0x05e2, "afii57682"}, + {0x05e3, "afii57683"}, + {0x05e4, "afii57684"}, + {0x05e5, "afii57685"}, + {0x05e6, "afii57686"}, + {0x05e7, "afii57687"}, + {0x05e8, "afii57688"}, + {0x05e9, "afii57689"}, + {0x05ea, "afii57690"}, + {0xfb2a, "afii57694"}, + {0xfb2b, "afii57695"}, + {0xfb4b, "afii57700"}, + {0xfb1f, "afii57705"}, + {0x05f0, "afii57716"}, + {0x05f1, "afii57717"}, + {0x05f2, "afii57718"}, + {0xfb35, "afii57723"}, + {0x05b4, "afii57793"}, + {0x05b5, "afii57794"}, + {0x05b6, "afii57795"}, + {0x05bb, "afii57796"}, + {0x05b8, "afii57797"}, + {0x05b7, "afii57798"}, + {0x05b0, "afii57799"}, + {0x05b2, "afii57800"}, + {0x05b1, "afii57801"}, + {0x05b3, "afii57802"}, + {0x05c2, "afii57803"}, + {0x05c1, "afii57804"}, + {0x05b9, "afii57806"}, + {0x05bc, "afii57807"}, + {0x05bd, "afii57839"}, + {0x05bf, "afii57841"}, + {0x05c0, "afii57842"}, + {0x02bc, "afii57929"}, + {0x2105, "afii61248"}, + {0x2113, "afii61289"}, + {0x2116, "afii61352"}, + {0x202c, "afii61573"}, + {0x202d, "afii61574"}, + {0x202e, "afii61575"}, + {0x200c, "afii61664"}, + {0x066d, "afii63167"}, + {0x02bd, "afii64937"}, + {0x00e0, "agrave"}, + {0x2135, "aleph"}, + {0x03b1, "alpha"}, + {0x03ac, "alphatonos"}, + {0x0101, "amacron"}, + {0x0026, "ampersand"}, + {0xf726, "ampersandsmall"}, + {0x2220, "angle"}, + {0x2329, "angleleft"}, + {0x232a, "angleright"}, + {0x0387, "anoteleia"}, + {0x0105, "aogonek"}, + {0x2248, "approxequal"}, + {0x00e5, "aring"}, + {0x01fb, "aringacute"}, + {0x2194, "arrowboth"}, + {0x21d4, "arrowdblboth"}, + {0x21d3, "arrowdbldown"}, + {0x21d0, "arrowdblleft"}, + {0x21d2, "arrowdblright"}, + {0x21d1, "arrowdblup"}, + {0x2193, "arrowdown"}, + {0xf8e7, "arrowhorizex"}, + {0x2190, "arrowleft"}, + {0x2192, "arrowright"}, + {0x2191, "arrowup"}, + {0x2195, "arrowupdn"}, + {0x21a8, "arrowupdnbse"}, + {0xf8e6, "arrowvertex"}, + {0x005e, "asciicircum"}, + {0x007e, "asciitilde"}, + {0x002a, "asterisk"}, + {0x2217, "asteriskmath"}, + {0xf6e9, "asuperior"}, + {0x0040, "at"}, + {0x00e3, "atilde"}, + {0x0062, "b"}, + {0x005c, "backslash"}, + {0x007c, "bar"}, + {0x03b2, "beta"}, + {0x2588, "block"}, + {0xf8f4, "braceex"}, + {0x007b, "braceleft"}, + {0xf8f3, "braceleftbt"}, + {0xf8f2, "braceleftmid"}, + {0xf8f1, "bracelefttp"}, + {0x007d, "braceright"}, + {0xf8fe, "bracerightbt"}, + {0xf8fd, "bracerightmid"}, + {0xf8fc, "bracerighttp"}, + {0x005b, "bracketleft"}, + {0xf8f0, "bracketleftbt"}, + {0xf8ef, "bracketleftex"}, + {0xf8ee, "bracketlefttp"}, + {0x005d, "bracketright"}, + {0xf8fb, "bracketrightbt"}, + {0xf8fa, "bracketrightex"}, + {0xf8f9, "bracketrighttp"}, + {0x02d8, "breve"}, + {0x00a6, "brokenbar"}, + {0xf6ea, "bsuperior"}, + {0x2022, "bullet"}, + {0x0063, "c"}, + {0x0107, "cacute"}, + {0x02c7, "caron"}, + {0x21b5, "carriagereturn"}, + {0x010d, "ccaron"}, + {0x00e7, "ccedilla"}, + {0x0109, "ccircumflex"}, + {0x010b, "cdotaccent"}, + {0x00b8, "cedilla"}, + {0x00a2, "cent"}, + {0xf6df, "centinferior"}, + {0xf7a2, "centoldstyle"}, + {0xf6e0, "centsuperior"}, + {0x03c7, "chi"}, + {0x25cb, "circle"}, + {0x2297, "circlemultiply"}, + {0x2295, "circleplus"}, + {0x02c6, "circumflex"}, + {0x2663, "club"}, + {0x003a, "colon"}, + {0x20a1, "colonmonetary"}, + {0x002c, "comma"}, + {0xf6c3, "commaaccent"}, + {0xf6e1, "commainferior"}, + {0xf6e2, "commasuperior"}, + {0x2245, "congruent"}, + {0x00a9, "copyright"}, + {0x00a9, "copyrightsans"}, + {0x00a9, "copyrightserif"}, + {0x00a4, "currency"}, + {0xf6d1, "cyrBreve"}, + {0xf6d2, "cyrFlex"}, + {0xf6d4, "cyrbreve"}, + {0xf6d5, "cyrflex"}, + {0x0064, "d"}, + {0x2020, "dagger"}, + {0x2021, "daggerdbl"}, + {0xf6d3, "dblGrave"}, + {0xf6d6, "dblgrave"}, + {0x010f, "dcaron"}, + {0x0111, "dcroat"}, + {0x00b0, "degree"}, + {0x03b4, "delta"}, + {0x2666, "diamond"}, + {0x00a8, "dieresis"}, + {0xf6d7, "dieresisacute"}, + {0xf6d8, "dieresisgrave"}, + {0x0385, "dieresistonos"}, + {0x00f7, "divide"}, + {0x2593, "dkshade"}, + {0x2584, "dnblock"}, + {0x0024, "dollar"}, + {0xf6e3, "dollarinferior"}, + {0xf724, "dollaroldstyle"}, + {0xf6e4, "dollarsuperior"}, + {0x20ab, "dong"}, + {0x02d9, "dotaccent"}, + {0x0323, "dotbelowcomb"}, + {0x0131, "dotlessi"}, + {0xf6be, "dotlessj"}, + {0x22c5, "dotmath"}, + {0xf6eb, "dsuperior"}, + {0x0065, "e"}, + {0x00e9, "eacute"}, + {0x0115, "ebreve"}, + {0x011b, "ecaron"}, + {0x00ea, "ecircumflex"}, + {0x00eb, "edieresis"}, + {0x0117, "edotaccent"}, + {0x00e8, "egrave"}, + {0x0038, "eight"}, + {0x2088, "eightinferior"}, + {0xf738, "eightoldstyle"}, + {0x2078, "eightsuperior"}, + {0x2208, "element"}, + {0x2026, "ellipsis"}, + {0x0113, "emacron"}, + {0x2014, "emdash"}, + {0x2205, "emptyset"}, + {0x2013, "endash"}, + {0x014b, "eng"}, + {0x0119, "eogonek"}, + {0x03b5, "epsilon"}, + {0x03ad, "epsilontonos"}, + {0x003d, "equal"}, + {0x2261, "equivalence"}, + {0x212e, "estimated"}, + {0xf6ec, "esuperior"}, + {0x03b7, "eta"}, + {0x03ae, "etatonos"}, + {0x00f0, "eth"}, + {0x0021, "exclam"}, + {0x203c, "exclamdbl"}, + {0x00a1, "exclamdown"}, + {0xf7a1, "exclamdownsmall"}, + {0x0021, "exclamleft"}, + {0xf721, "exclamsmall"}, + {0x2203, "existential"}, + {0x0066, "f"}, + {0x2640, "female"}, + {0xfb00, "ff"}, + {0xfb03, "ffi"}, + {0xfb04, "ffl"}, + {0xfb01, "fi"}, + {0x2012, "figuredash"}, + {0x25a0, "filledbox"}, + {0x25ac, "filledrect"}, + {0x0035, "five"}, + {0x215d, "fiveeighths"}, + {0x2085, "fiveinferior"}, + {0xf735, "fiveoldstyle"}, + {0x2075, "fivesuperior"}, + {0xfb02, "fl"}, + {0x0192, "florin"}, + {0x0034, "four"}, + {0x2084, "fourinferior"}, + {0xf734, "fouroldstyle"}, + {0x2074, "foursuperior"}, + {0x2044, "fraction"}, + {0x20a3, "franc"}, + {0x0067, "g"}, + {0x03b3, "gamma"}, + {0x011f, "gbreve"}, + {0x01e7, "gcaron"}, + {0x011d, "gcircumflex"}, + {0x0123, "gcommaaccent"}, + {0x0121, "gdotaccent"}, + {0x00df, "germandbls"}, + {0x2207, "gradient"}, + {0x0060, "grave"}, + {0x0300, "gravecomb"}, + {0x003e, "greater"}, + {0x2265, "greaterequal"}, + {0x00ab, "guillemotleft"}, + {0x00bb, "guillemotright"}, + {0x2039, "guilsinglleft"}, + {0x203a, "guilsinglright"}, + {0x0068, "h"}, + {0x0127, "hbar"}, + {0x0125, "hcircumflex"}, + {0x2665, "heart"}, + {0x0309, "hookabovecomb"}, + {0x2302, "house"}, + {0x02dd, "hungarumlaut"}, + {0x002d, "hyphen"}, + {0xf6e5, "hypheninferior"}, + {0xf6e6, "hyphensuperior"}, + {0x0069, "i"}, + {0x00ed, "iacute"}, + {0x012d, "ibreve"}, + {0x00ee, "icircumflex"}, + {0x00ef, "idieresis"}, + {0x00ec, "igrave"}, + {0x0133, "ij"}, + {0x012b, "imacron"}, + {0x221e, "infinity"}, + {0x222b, "integral"}, + {0x2321, "integralbt"}, + {0xf8f5, "integralex"}, + {0x2320, "integraltp"}, + {0x2229, "intersection"}, + {0x25d8, "invbullet"}, + {0x25d9, "invcircle"}, + {0x263b, "invsmileface"}, + {0x012f, "iogonek"}, + {0x03b9, "iota"}, + {0x03ca, "iotadieresis"}, + {0x0390, "iotadieresistonos"}, + {0x03af, "iotatonos"}, + {0xf6ed, "isuperior"}, + {0x0129, "itilde"}, + {0x006a, "j"}, + {0x0135, "jcircumflex"}, + {0x006b, "k"}, + {0x03ba, "kappa"}, + {0x0137, "kcommaaccent"}, + {0x0138, "kgreenlandic"}, + {0x006c, "l"}, + {0x013a, "lacute"}, + {0x03bb, "lambda"}, + {0x013e, "lcaron"}, + {0x013c, "lcommaaccent"}, + {0x0140, "ldot"}, + {0x003c, "less"}, + {0x2264, "lessequal"}, + {0x258c, "lfblock"}, + {0x20a4, "lira"}, + {0xf6c0, "ll"}, + {0x2227, "logicaland"}, + {0x00ac, "logicalnot"}, + {0x2228, "logicalor"}, + {0x017f, "longs"}, + {0x25ca, "lozenge"}, + {0x0142, "lslash"}, + {0xf6ee, "lsuperior"}, + {0x2591, "ltshade"}, + {0x006d, "m"}, + {0x00af, "macron"}, + {0x2642, "male"}, + {0x2212, "minus"}, + {0x2032, "minute"}, + {0xf6ef, "msuperior"}, + {0x00b5, "mu"}, + {0x00d7, "multiply"}, + {0x266a, "musicalnote"}, + {0x266b, "musicalnotedbl"}, + {0x006e, "n"}, + {0x0144, "nacute"}, + {0x0149, "napostrophe"}, + {0x00a0, "nbspace"}, + {0x0148, "ncaron"}, + {0x0146, "ncommaaccent"}, + {0x0039, "nine"}, + {0x2089, "nineinferior"}, + {0xf739, "nineoldstyle"}, + {0x2079, "ninesuperior"}, + {0x00a0, "nonbreakingspace"}, + {0x2209, "notelement"}, + {0x2260, "notequal"}, + {0x2284, "notsubset"}, + {0x207f, "nsuperior"}, + {0x00f1, "ntilde"}, + {0x03bd, "nu"}, + {0x0023, "numbersign"}, + {0x006f, "o"}, + {0x00f3, "oacute"}, + {0x014f, "obreve"}, + {0x00f4, "ocircumflex"}, + {0x00f6, "odieresis"}, + {0x0153, "oe"}, + {0x02db, "ogonek"}, + {0x00f2, "ograve"}, + {0x01a1, "ohorn"}, + {0x0151, "ohungarumlaut"}, + {0x014d, "omacron"}, + {0x03c9, "omega"}, + {0x03d6, "omega1"}, + {0x03ce, "omegatonos"}, + {0x03bf, "omicron"}, + {0x03cc, "omicrontonos"}, + {0x0031, "one"}, + {0x2024, "onedotenleader"}, + {0x215b, "oneeighth"}, + {0xf6dc, "onefitted"}, + {0x00bd, "onehalf"}, + {0x2081, "oneinferior"}, + {0xf731, "oneoldstyle"}, + {0x00bc, "onequarter"}, + {0x00b9, "onesuperior"}, + {0x2153, "onethird"}, + {0x25e6, "openbullet"}, + {0x00aa, "ordfeminine"}, + {0x00ba, "ordmasculine"}, + {0x221f, "orthogonal"}, + {0x00f8, "oslash"}, + {0x01ff, "oslashacute"}, + {0xf6f0, "osuperior"}, + {0x00f5, "otilde"}, + {0x0070, "p"}, + {0x00b6, "paragraph"}, + {0x0028, "parenleft"}, + {0xf8ed, "parenleftbt"}, + {0xf8ec, "parenleftex"}, + {0x208d, "parenleftinferior"}, + {0x207d, "parenleftsuperior"}, + {0xf8eb, "parenlefttp"}, + {0x0029, "parenright"}, + {0xf8f8, "parenrightbt"}, + {0xf8f7, "parenrightex"}, + {0x208e, "parenrightinferior"}, + {0x207e, "parenrightsuperior"}, + {0xf8f6, "parenrighttp"}, + {0x2202, "partialdiff"}, + {0x0025, "percent"}, + {0x002e, "period"}, + {0x00b7, "periodcentered"}, + {0xf6e7, "periodinferior"}, + {0xf6e8, "periodsuperior"}, + {0x22a5, "perpendicular"}, + {0x2030, "perthousand"}, + {0x20a7, "peseta"}, + {0x03c6, "phi"}, + {0x03d5, "phi1"}, + {0x03c0, "pi"}, + {0x002b, "plus"}, + {0x00b1, "plusminus"}, + {0x211e, "prescription"}, + {0x220f, "product"}, + {0x2282, "propersubset"}, + {0x2283, "propersuperset"}, + {0x221d, "proportional"}, + {0x03c8, "psi"}, + {0x0071, "q"}, + {0x003f, "question"}, + {0x00bf, "questiondown"}, + {0xf7bf, "questiondownsmall"}, + {0xf73f, "questionsmall"}, + {0x0022, "quotedbl"}, + {0x201e, "quotedblbase"}, + {0x201c, "quotedblleft"}, + {0x201d, "quotedblright"}, + {0x2018, "quoteleft"}, + {0x201b, "quotereversed"}, + {0x2019, "quoteright"}, + {0x201a, "quotesinglbase"}, + {0x0027, "quotesingle"}, + {0x0072, "r"}, + {0x0155, "racute"}, + {0x221a, "radical"}, + {0xf8e5, "radicalex"}, + {0x0159, "rcaron"}, + {0x0157, "rcommaaccent"}, + {0x2286, "reflexsubset"}, + {0x2287, "reflexsuperset"}, + {0x00ae, "registered"}, + {0x00ae, "registersans"}, + {0x00ae, "registerserif"}, + {0x2310, "revlogicalnot"}, + {0x03c1, "rho"}, + {0x02da, "ring"}, + {0xf6f1, "rsuperior"}, + {0x2590, "rtblock"}, + {0xf6dd, "rupiah"}, + {0x0073, "s"}, + {0x015b, "sacute"}, + {0x0161, "scaron"}, + {0x015f, "scedilla"}, + {0x015d, "scircumflex"}, + {0x0219, "scommaaccent"}, + {0x2033, "second"}, + {0x00a7, "section"}, + {0x003b, "semicolon"}, + {0x0037, "seven"}, + {0x215e, "seveneighths"}, + {0x2087, "seveninferior"}, + {0xf737, "sevenoldstyle"}, + {0x2077, "sevensuperior"}, + {0x2592, "shade"}, + {0x03c3, "sigma"}, + {0x03c2, "sigma1"}, + {0x223c, "similar"}, + {0x0036, "six"}, + {0x2086, "sixinferior"}, + {0xf736, "sixoldstyle"}, + {0x2076, "sixsuperior"}, + {0x002f, "slash"}, + {0x263a, "smileface"}, + {0x0020, "space"}, + {0x2660, "spade"}, + {0xf6f2, "ssuperior"}, + {0x00a3, "sterling"}, + {0x220b, "suchthat"}, + {0x2211, "summation"}, + {0x263c, "sun"}, + {0x0074, "t"}, + {0x03c4, "tau"}, + {0x0167, "tbar"}, + {0x0165, "tcaron"}, + {0x0163, "tcommaaccent"}, + {0x2234, "therefore"}, + {0x03b8, "theta"}, + {0x03d1, "theta1"}, + {0x00fe, "thorn"}, + {0x0033, "three"}, + {0x215c, "threeeighths"}, + {0x2083, "threeinferior"}, + {0xf733, "threeoldstyle"}, + {0x00be, "threequarters"}, + {0xf6de, "threequartersemdash"}, + {0x00b3, "threesuperior"}, + {0x02dc, "tilde"}, + {0x0303, "tildecomb"}, + {0x0384, "tonos"}, + {0x2122, "trademark"}, + {0x2122, "trademarksans"}, + {0x2122, "trademarkserif"}, + {0x25bc, "triagdn"}, + {0x25c4, "triaglf"}, + {0x25ba, "triagrt"}, + {0x25b2, "triagup"}, + {0xf6f3, "tsuperior"}, + {0x0032, "two"}, + {0x2025, "twodotenleader"}, + {0x2082, "twoinferior"}, + {0xf732, "twooldstyle"}, + {0x00b2, "twosuperior"}, + {0x2154, "twothirds"}, + {0x0075, "u"}, + {0x00fa, "uacute"}, + {0x016d, "ubreve"}, + {0x00fb, "ucircumflex"}, + {0x00fc, "udieresis"}, + {0x00f9, "ugrave"}, + {0x01b0, "uhorn"}, + {0x0171, "uhungarumlaut"}, + {0x016b, "umacron"}, + {0x005f, "underscore"}, + {0x2017, "underscoredbl"}, + {0x222a, "union"}, + {0x2200, "universal"}, + {0x0173, "uogonek"}, + {0x2580, "upblock"}, + {0x03c5, "upsilon"}, + {0x03cb, "upsilondieresis"}, + {0x03b0, "upsilondieresistonos"}, + {0x03cd, "upsilontonos"}, + {0x016f, "uring"}, + {0x0169, "utilde"}, + {0x0076, "v"}, + {0x0077, "w"}, + {0x1e83, "wacute"}, + {0x0175, "wcircumflex"}, + {0x1e85, "wdieresis"}, + {0x2118, "weierstrass"}, + {0x1e81, "wgrave"}, + {0x0078, "x"}, + {0x03be, "xi"}, + {0x0079, "y"}, + {0x00fd, "yacute"}, + {0x0177, "ycircumflex"}, + {0x00ff, "ydieresis"}, + {0x00a5, "yen"}, + {0x1ef3, "ygrave"}, + {0x007a, "z"}, + {0x017a, "zacute"}, + {0x017e, "zcaron"}, + {0x017c, "zdotaccent"}, + {0x0030, "zero"}, + {0x2080, "zeroinferior"}, + {0xf730, "zerooldstyle"}, + {0x2070, "zerosuperior"}, + {0x03b6, "zeta"}, + {0x007b, "{"}, + {0x007c, "|"}, + {0x007d, "}"}, + {0x007e, "~"}, + { 0, NULL } +}; diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Object.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Object.cc new file mode 100644 index 00000000000..4f7da80ecac --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Object.cc @@ -0,0 +1,250 @@ +//======================================================================== +// +// Object.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2008, 2010 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stddef.h> +#include "Object.h" +#include "Array.h" +#include "Dict.h" +#include "Error.h" +#include "Stream.h" +#include "XRef.h" + +//------------------------------------------------------------------------ +// Object +//------------------------------------------------------------------------ + +static char *objTypeNames[numObjTypes] = { + "boolean", + "integer", + "real", + "string", + "name", + "null", + "array", + "dictionary", + "stream", + "ref", + "cmd", + "error", + "eof", + "none" +}; + +#ifdef DEBUG_MEM +int Object::numAlloc[numObjTypes] = + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +#endif + +Object *Object::initArray(XRef *xref) { + initObj(objArray); + array = new Array(xref); + return this; +} + +Object *Object::initDict(XRef *xref) { + initObj(objDict); + dict = new Dict(xref); + return this; +} + +Object *Object::initDict(Dict *dictA) { + initObj(objDict); + dict = dictA; + dict->incRef(); + return this; +} + +Object *Object::initStream(Stream *streamA) { + initObj(objStream); + stream = streamA; + return this; +} + +Object *Object::copy(Object *obj) { + *obj = *this; + switch (type) { + case objString: + obj->string = string->copy(); + break; + case objName: + obj->name = copyString(name); + break; + case objArray: + array->incRef(); + break; + case objDict: + dict->incRef(); + break; + case objStream: + stream->incRef(); + break; + case objCmd: + obj->cmd = copyString(cmd); + break; + default: + break; + } +#ifdef DEBUG_MEM + ++numAlloc[type]; +#endif + return obj; +} + +Object *Object::fetch(XRef *xref, Object *obj, std::set<int> *fetchOriginatorNums) { + return (type == objRef && xref) ? + xref->fetch(ref.num, ref.gen, obj, fetchOriginatorNums) : copy(obj); +} + +void Object::free() { + switch (type) { + case objString: + delete string; + break; + case objName: + gfree(name); + break; + case objArray: + if (!array->decRef()) { + delete array; + } + break; + case objDict: + if (!dict->decRef()) { + delete dict; + } + break; + case objStream: + if (!stream->decRef()) { + delete stream; + } + break; + case objCmd: + gfree(cmd); + break; + default: + break; + } +#ifdef DEBUG_MEM + --numAlloc[type]; +#endif + type = objNone; +} + +char *Object::getTypeName() { + return objTypeNames[type]; +} + +void Object::print(FILE *f) { + Object obj; + int i; + + switch (type) { + case objBool: + fprintf(f, "%s", booln ? "true" : "false"); + break; + case objInt: + fprintf(f, "%d", intg); + break; + case objReal: + fprintf(f, "%g", real); + break; + case objString: + fprintf(f, "("); + fwrite(string->getCString(), 1, string->getLength(), f); + fprintf(f, ")"); + break; + case objName: + fprintf(f, "/%s", name); + break; + case objNull: + fprintf(f, "null"); + break; + case objArray: + fprintf(f, "["); + for (i = 0; i < arrayGetLength(); ++i) { + if (i > 0) + fprintf(f, " "); + arrayGetNF(i, &obj); + obj.print(f); + obj.free(); + } + fprintf(f, "]"); + break; + case objDict: + fprintf(f, "<<"); + for (i = 0; i < dictGetLength(); ++i) { + fprintf(f, " /%s ", dictGetKey(i)); + dictGetValNF(i, &obj); + obj.print(f); + obj.free(); + } + fprintf(f, " >>"); + break; + case objStream: + fprintf(f, "<stream>"); + break; + case objRef: + fprintf(f, "%d %d R", ref.num, ref.gen); + break; + case objCmd: + fprintf(f, "%s", cmd); + break; + case objError: + fprintf(f, "<error>"); + break; + case objEOF: + fprintf(f, "<EOF>"); + break; + case objNone: + fprintf(f, "<none>"); + break; + case objUint: + fprintf(f, "%u", uintg); + break; + } +} + +void Object::memCheck(FILE *f) { +#ifdef DEBUG_MEM + int i; + int t; + + t = 0; + for (i = 0; i < numObjTypes; ++i) + t += numAlloc[i]; + if (t > 0) { + fprintf(f, "Allocated objects:\n"); + for (i = 0; i < numObjTypes; ++i) { + if (numAlloc[i] > 0) + fprintf(f, " %-20s: %6d\n", objTypeNames[i], numAlloc[i]); + } + } +#else + (void)f; +#endif +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Object.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Object.h new file mode 100644 index 00000000000..72ff667858b --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Object.h @@ -0,0 +1,357 @@ +//======================================================================== +// +// Object.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2008 Kees Cook <kees@outflux.net> +// Copyright (C) 2008, 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009 Jakub Wilk <ubanus@users.sf.net> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef OBJECT_H +#define OBJECT_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include <set> +#include <stdio.h> +#include <string.h> +#include "goo/gtypes.h" +#include "goo/gmem.h" +#include "goo/GooString.h" +#include "goo/GooLikely.h" +#include "Error.h" + +#define OBJECT_TYPE_CHECK(wanted_type) \ + if (unlikely(type != wanted_type)) { \ + error(0, (char *) "Call to Object where the object was type %d, " \ + "not the expected type %d", type, wanted_type); \ + abort(); \ + } + +#define OBJECT_2TYPES_CHECK(wanted_type1, wanted_type2) \ + if (unlikely(type != wanted_type1) && unlikely(type != wanted_type2)) { \ + error(0, (char *) "Call to Object where the object was type %d, " \ + "not the expected type %d or %d", type, wanted_type1, wanted_type2); \ + abort(); \ + } + +class XRef; +class Array; +class Dict; +class Stream; + +//------------------------------------------------------------------------ +// Ref +//------------------------------------------------------------------------ + +struct Ref { + int num; // object number + int gen; // generation number +}; + +//------------------------------------------------------------------------ +// object types +//------------------------------------------------------------------------ + +enum ObjType { + // simple objects + objBool, // boolean + objInt, // integer + objReal, // real + objString, // string + objName, // name + objNull, // null + + // complex objects + objArray, // array + objDict, // dictionary + objStream, // stream + objRef, // indirect reference + + // special objects + objCmd, // command name + objError, // error return from Lexer + objEOF, // end of file return from Lexer + objNone, // uninitialized object + + // poppler-only objects + objUint // overflown integer that still fits in a unsigned integer +}; + +#define numObjTypes 15 // total number of object types + +//------------------------------------------------------------------------ +// Object +//------------------------------------------------------------------------ + +#ifdef DEBUG_MEM +#define initObj(t) zeroUnion(); ++numAlloc[type = t] +#else +#define initObj(t) zeroUnion(); type = t +#endif + +class Object { +public: + // clear the anonymous union as best we can -- clear at least a pointer + void zeroUnion() { this->name = NULL; } + + // Default constructor. + Object(): + type(objNone) { zeroUnion(); } + + // Initialize an object. + Object *initBool(GBool boolnA) + { initObj(objBool); booln = boolnA; return this; } + Object *initInt(int intgA) + { initObj(objInt); intg = intgA; return this; } + Object *initReal(double realA) + { initObj(objReal); real = realA; return this; } + Object *initString(GooString *stringA) + { initObj(objString); string = stringA; return this; } + Object *initName(char *nameA) + { initObj(objName); name = copyString(nameA); return this; } + Object *initNull() + { initObj(objNull); return this; } + Object *initArray(XRef *xref); + Object *initDict(XRef *xref); + Object *initDict(Dict *dictA); + Object *initStream(Stream *streamA); + Object *initRef(int numA, int genA) + { initObj(objRef); ref.num = numA; ref.gen = genA; return this; } + Object *initCmd(char *cmdA) + { initObj(objCmd); cmd = copyString(cmdA); return this; } + Object *initError() + { initObj(objError); return this; } + Object *initEOF() + { initObj(objEOF); return this; } + Object *initUint(unsigned int uintgA) + { initObj(objUint); uintg = uintgA; return this; } + + // Copy an object. + Object *copy(Object *obj); + Object *shallowCopy(Object *obj) { + *obj = *this; + return obj; + } + + // If object is a Ref, fetch and return the referenced object. + // Otherwise, return a copy of the object. + Object *fetch(XRef *xref, Object *obj, std::set<int> *fetchOriginatorNums = NULL); + + // Free object contents. + void free(); + + // Type checking. + ObjType getType() { return type; } + GBool isBool() { return type == objBool; } + GBool isInt() { return type == objInt; } + GBool isReal() { return type == objReal; } + GBool isNum() { return type == objInt || type == objReal; } + GBool isString() { return type == objString; } + GBool isName() { return type == objName; } + GBool isNull() { return type == objNull; } + GBool isArray() { return type == objArray; } + GBool isDict() { return type == objDict; } + GBool isStream() { return type == objStream; } + GBool isRef() { return type == objRef; } + GBool isCmd() { return type == objCmd; } + GBool isError() { return type == objError; } + GBool isEOF() { return type == objEOF; } + GBool isNone() { return type == objNone; } + GBool isUint() { return type == objUint; } + + // Special type checking. + GBool isName(char *nameA) + { return type == objName && !strcmp(name, nameA); } + GBool isDict(char *dictType); + GBool isStream(char *dictType); + GBool isCmd(char *cmdA) + { return type == objCmd && !strcmp(cmd, cmdA); } + + // Accessors. + GBool getBool() { OBJECT_TYPE_CHECK(objBool); return booln; } + int getInt() { OBJECT_TYPE_CHECK(objInt); return intg; } + double getReal() { OBJECT_TYPE_CHECK(objReal); return real; } + double getNum() { OBJECT_2TYPES_CHECK(objInt, objReal); return type == objInt ? (double)intg : real; } + GooString *getString() { OBJECT_TYPE_CHECK(objString); return string; } + char *getName() { OBJECT_TYPE_CHECK(objName); return name; } + Array *getArray() { OBJECT_TYPE_CHECK(objArray); return array; } + Dict *getDict() { OBJECT_TYPE_CHECK(objDict); return dict; } + Stream *getStream() { OBJECT_TYPE_CHECK(objStream); return stream; } + Ref getRef() { OBJECT_TYPE_CHECK(objRef); return ref; } + int getRefNum() { OBJECT_TYPE_CHECK(objRef); return ref.num; } + int getRefGen() { OBJECT_TYPE_CHECK(objRef); return ref.gen; } + char *getCmd() { OBJECT_TYPE_CHECK(objCmd); return cmd; } + unsigned int getUint() { OBJECT_TYPE_CHECK(objUint); return uintg; } + + // Array accessors. + int arrayGetLength(); + void arrayAdd(Object *elem); + Object *arrayGet(int i, Object *obj); + Object *arrayGetNF(int i, Object *obj); + + // Dict accessors. + int dictGetLength(); + void dictAdd(char *key, Object *val); + void dictSet(char *key, Object *val); + GBool dictIs(char *dictType); + Object *dictLookup(char *key, Object *obj, std::set<int> *fetchOriginatorNums = NULL); + Object *dictLookupNF(char *key, Object *obj); + char *dictGetKey(int i); + Object *dictGetVal(int i, Object *obj); + Object *dictGetValNF(int i, Object *obj); + + // Stream accessors. + GBool streamIs(char *dictType); + void streamReset(); + void streamClose(); + int streamGetChar(); + int streamGetChars(int nChars, Guchar *buffer); + int streamLookChar(); + char *streamGetLine(char *buf, int size); + Guint streamGetPos(); + void streamSetPos(Guint pos, int dir = 0); + Dict *streamGetDict(); + + // Output. + char *getTypeName(); + void print(FILE *f = stdout); + + // Memory testing. + static void memCheck(FILE *f); + +private: + + ObjType type; // object type + union { // value for each type: + GBool booln; // boolean + int intg; // integer + unsigned int uintg; // unsigned integer + double real; // real + GooString *string; // string + char *name; // name + Array *array; // array + Dict *dict; // dictionary + Stream *stream; // stream + Ref ref; // indirect reference + char *cmd; // command + }; + +#ifdef DEBUG_MEM + static int // number of each type of object + numAlloc[numObjTypes]; // currently allocated +#endif +}; + +//------------------------------------------------------------------------ +// Array accessors. +//------------------------------------------------------------------------ + +#include "Array.h" + +inline int Object::arrayGetLength() + { OBJECT_TYPE_CHECK(objArray); return array->getLength(); } + +inline void Object::arrayAdd(Object *elem) + { OBJECT_TYPE_CHECK(objArray); array->add(elem); } + +inline Object *Object::arrayGet(int i, Object *obj) + { OBJECT_TYPE_CHECK(objArray); return array->get(i, obj); } + +inline Object *Object::arrayGetNF(int i, Object *obj) + { OBJECT_TYPE_CHECK(objArray); return array->getNF(i, obj); } + +//------------------------------------------------------------------------ +// Dict accessors. +//------------------------------------------------------------------------ + +#include "Dict.h" + +inline int Object::dictGetLength() + { OBJECT_TYPE_CHECK(objDict); return dict->getLength(); } + +inline void Object::dictAdd(char *key, Object *val) + { OBJECT_TYPE_CHECK(objDict); dict->add(key, val); } + +inline void Object::dictSet(char *key, Object *val) + { OBJECT_TYPE_CHECK(objDict); dict->set(key, val); } + +inline GBool Object::dictIs(char *dictType) + { OBJECT_TYPE_CHECK(objDict); return dict->is(dictType); } + +inline GBool Object::isDict(char *dictType) + { return type == objDict && dictIs(dictType); } + +inline Object *Object::dictLookup(char *key, Object *obj, std::set<int> *fetchOriginatorNums) + { OBJECT_TYPE_CHECK(objDict); return dict->lookup(key, obj, fetchOriginatorNums); } + +inline Object *Object::dictLookupNF(char *key, Object *obj) + { OBJECT_TYPE_CHECK(objDict); return dict->lookupNF(key, obj); } + +inline char *Object::dictGetKey(int i) + { OBJECT_TYPE_CHECK(objDict); return dict->getKey(i); } + +inline Object *Object::dictGetVal(int i, Object *obj) + { OBJECT_TYPE_CHECK(objDict); return dict->getVal(i, obj); } + +inline Object *Object::dictGetValNF(int i, Object *obj) + { OBJECT_TYPE_CHECK(objDict); return dict->getValNF(i, obj); } + +//------------------------------------------------------------------------ +// Stream accessors. +//------------------------------------------------------------------------ + +#include "Stream.h" + +inline GBool Object::streamIs(char *dictType) + { OBJECT_TYPE_CHECK(objStream); return stream->getDict()->is(dictType); } + +inline GBool Object::isStream(char *dictType) + { return type == objStream && streamIs(dictType); } + +inline void Object::streamReset() + { OBJECT_TYPE_CHECK(objStream); stream->reset(); } + +inline void Object::streamClose() + { OBJECT_TYPE_CHECK(objStream); stream->close(); } + +inline int Object::streamGetChar() + { OBJECT_TYPE_CHECK(objStream); return stream->getChar(); } + +inline int Object::streamGetChars(int nChars, Guchar *buffer) + { OBJECT_TYPE_CHECK(objStream); return stream->doGetChars(nChars, buffer); } + +inline int Object::streamLookChar() + { OBJECT_TYPE_CHECK(objStream); return stream->lookChar(); } + +inline char *Object::streamGetLine(char *buf, int size) + { OBJECT_TYPE_CHECK(objStream); return stream->getLine(buf, size); } + +inline Guint Object::streamGetPos() + { OBJECT_TYPE_CHECK(objStream); return stream->getPos(); } + +inline void Object::streamSetPos(Guint pos, int dir) + { OBJECT_TYPE_CHECK(objStream); stream->setPos(pos, dir); } + +inline Dict *Object::streamGetDict() + { OBJECT_TYPE_CHECK(objStream); return stream->getDict(); } + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/OptionalContent.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/OptionalContent.cc new file mode 100644 index 00000000000..c8b5c97222b --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/OptionalContent.cc @@ -0,0 +1,325 @@ +//======================================================================== +// +// OptionalContent.cc +// +// Copyright 2007 Brad Hards <bradh@kde.org> +// Copyright 2008 Pino Toscano <pino@kde.org> +// Copyright 2008, 2010 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright 2008, 2010, 2011 Albert Astals Cid <aacid@kde.org> +// Copyright 2008 Mark Kaplan <mkaplan@finjan.com> +// +// Released under the GPL (version 2, or later, at your option) +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include "goo/gmem.h" +#include "goo/GooString.h" +#include "goo/GooList.h" +#include "Error.h" +// #include "PDFDocEncoding.h" +#include "OptionalContent.h" + +//------------------------------------------------------------------------ + +OCGs::OCGs(Object *ocgObject, XRef *xref) : + m_xref(xref) +{ + // we need to parse the dictionary here, and build optionalContentGroups + ok = gTrue; + optionalContentGroups = new GooList(); + + Object ocgList; + ocgObject->dictLookup("OCGs", &ocgList); + if (!ocgList.isArray()) { + error(-1, "Expected the optional content group list, but wasn't able to find it, or it isn't an Array"); + ocgList.free(); + ok = gFalse; + return; + } + + // we now enumerate over the ocgList, and build up the optionalContentGroups list. + for(int i = 0; i < ocgList.arrayGetLength(); ++i) { + Object ocg; + ocgList.arrayGet(i, &ocg); + if (!ocg.isDict()) { + ocg.free(); + break; + } + OptionalContentGroup *thisOptionalContentGroup = new OptionalContentGroup(ocg.getDict()); + ocg.free(); + ocgList.arrayGetNF(i, &ocg); + // TODO: we should create a lookup map from Ref to the OptionalContentGroup + thisOptionalContentGroup->setRef( ocg.getRef() ); + ocg.free(); + // the default is ON - we change state later, depending on BaseState, ON and OFF + thisOptionalContentGroup->setState(OptionalContentGroup::On); + optionalContentGroups->append(thisOptionalContentGroup); + } + + Object defaultOcgConfig; + ocgObject->dictLookup("D", &defaultOcgConfig); + if (!defaultOcgConfig.isDict()) { + error(-1, "Expected the default config, but wasn't able to find it, or it isn't a Dictionary"); + defaultOcgConfig.free(); + ocgList.free(); + ok = gFalse; + return; + } + + Object baseState; + defaultOcgConfig.dictLookup("BaseState", &baseState); + if (baseState.isName("OFF")) { + for (int i = 0; i < optionalContentGroups->getLength(); ++i) { + OptionalContentGroup *group; + + group = (OptionalContentGroup *)optionalContentGroups->get(i); + group->setState(OptionalContentGroup::Off); + } + } + baseState.free(); + + Object on; + defaultOcgConfig.dictLookup("ON", &on); + if (on.isArray()) { + // ON is an optional element + for (int i = 0; i < on.arrayGetLength(); ++i) { + Object reference; + on.arrayGetNF(i, &reference); + if (!reference.isRef()) { + // there can be null entries + reference.free(); + break; + } + OptionalContentGroup *group = findOcgByRef( reference.getRef() ); + reference.free(); + if (!group) { + error(-1, "Couldn't find group for reference"); + break; + } + group->setState(OptionalContentGroup::On); + } + } + on.free(); + + Object off; + defaultOcgConfig.dictLookup("OFF", &off); + if (off.isArray()) { + // OFF is an optional element + for (int i = 0; i < off.arrayGetLength(); ++i) { + Object reference; + off.arrayGetNF(i, &reference); + if (!reference.isRef()) { + // there can be null entries + reference.free(); + break; + } + OptionalContentGroup *group = findOcgByRef( reference.getRef() ); + reference.free(); + if (!group) { + error(-1, "Couldn't find group for reference to set OFF"); + break; + } + group->setState(OptionalContentGroup::Off); + } + } + off.free(); + + defaultOcgConfig.dictLookup("Order", &order); + defaultOcgConfig.dictLookup("RBGroups", &rbgroups); + + ocgList.free(); + defaultOcgConfig.free(); +} + +OCGs::~OCGs() +{ + deleteGooList(optionalContentGroups, OptionalContentGroup); + order.free(); + rbgroups.free(); +} + + +bool OCGs::hasOCGs() +{ + return ( optionalContentGroups->getLength() > 0 ); +} + +OptionalContentGroup* OCGs::findOcgByRef( const Ref &ref) +{ + //TODO: make this more efficient + OptionalContentGroup *ocg = NULL; + for (int i=0; i < optionalContentGroups->getLength(); ++i) { + ocg = (OptionalContentGroup*)optionalContentGroups->get(i); + if ( (ocg->getRef().num == ref.num) && (ocg->getRef().gen == ref.gen) ) { + return ocg; + } + } + + error(-1, "Could not find a OCG with Ref (%d:%d)", ref.num, ref.gen); + + // not found + return NULL; +} + +bool OCGs::optContentIsVisible( Object *dictRef ) +{ + Object dictObj; + Dict *dict; + Object dictType; + Object ocg; + Object policy; + bool result = true; + dictRef->fetch( m_xref, &dictObj ); + if ( ! dictObj.isDict() ) { + error(-1, "Unexpected oc reference target: %i", dictObj.getType() ); + dictObj.free(); + return result; + } + dict = dictObj.getDict(); + // printf("checking if optContent is visible\n"); + dict->lookup("Type", &dictType); + if (dictType.isName("OCMD")) { + // If we supported Visibility Expressions, we'd check + // for a VE entry, and then call out to the parser here... + // printf("found OCMD dict\n"); + dict->lookup("P", &policy); + dict->lookupNF("OCGs", &ocg); + if (ocg.isArray()) { + if (policy.isName("AllOn")) { + result = allOn( ocg.getArray() ); + } else if (policy.isName("AllOff")) { + result = allOff( ocg.getArray() ); + } else if (policy.isName("AnyOff")) { + result = anyOff( ocg.getArray() ); + } else if ( (!policy.isName()) || (policy.isName("AnyOn") ) ) { + // this is the default + result = anyOn( ocg.getArray() ); + } + } else if (ocg.isRef()) { + OptionalContentGroup* oc = findOcgByRef( ocg.getRef() ); + if ( oc && oc->getState() == OptionalContentGroup::Off ) { + result = false; + } else { + result = true ; + } + } + ocg.free(); + policy.free(); + } else if ( dictType.isName("OCG") ) { + OptionalContentGroup* oc = findOcgByRef( dictRef->getRef() ); + if ( oc && oc->getState() == OptionalContentGroup::Off ) { + result=false; + } + } + dictType.free(); + dictObj.free(); + // printf("visibility: %s\n", result? "on" : "off"); + return result; +} + +bool OCGs::allOn( Array *ocgArray ) +{ + for (int i = 0; i < ocgArray->getLength(); ++i) { + Object ocgItem; + ocgArray->getNF(i, &ocgItem); + if (ocgItem.isRef()) { + OptionalContentGroup* oc = findOcgByRef( ocgItem.getRef() ); + if ( oc && oc->getState() == OptionalContentGroup::Off ) { + return false; + } + } + } + return true; +} + +bool OCGs::allOff( Array *ocgArray ) +{ + for (int i = 0; i < ocgArray->getLength(); ++i) { + Object ocgItem; + ocgArray->getNF(i, &ocgItem); + if (ocgItem.isRef()) { + OptionalContentGroup* oc = findOcgByRef( ocgItem.getRef() ); + if ( oc && oc->getState() == OptionalContentGroup::On ) { + return false; + } + } + } + return true; +} + +bool OCGs::anyOn( Array *ocgArray ) +{ + for (int i = 0; i < ocgArray->getLength(); ++i) { + Object ocgItem; + ocgArray->getNF(i, &ocgItem); + if (ocgItem.isRef()) { + OptionalContentGroup* oc = findOcgByRef( ocgItem.getRef() ); + if ( oc && oc->getState() == OptionalContentGroup::On ) { + return true; + } + } + } + return false; +} + +bool OCGs::anyOff( Array *ocgArray ) +{ + for (int i = 0; i < ocgArray->getLength(); ++i) { + Object ocgItem; + ocgArray->getNF(i, &ocgItem); + if (ocgItem.isRef()) { + OptionalContentGroup* oc = findOcgByRef( ocgItem.getRef() ); + if ( oc && oc->getState() == OptionalContentGroup::Off ) { + return true; + } + } + } + return false; +} + +//------------------------------------------------------------------------ + +OptionalContentGroup::OptionalContentGroup(Dict *ocgDict) : m_name(NULL) +{ + Object ocgName; + ocgDict->lookup("Name", &ocgName); + if (!ocgName.isString()) { + error(-1, "Expected the name of the OCG, but wasn't able to find it, or it isn't a String"); + } else { + m_name = new GooString( ocgName.getString() ); + } + ocgName.free(); +} + +OptionalContentGroup::OptionalContentGroup(GooString *label) +{ + m_name = label; + m_state = On; +} + +GooString* OptionalContentGroup::getName() const +{ + return m_name; +} + +void OptionalContentGroup::setRef(const Ref ref) +{ + m_ref = ref; +} + +Ref OptionalContentGroup::getRef() const +{ + return m_ref; +} + +OptionalContentGroup::~OptionalContentGroup() +{ + delete m_name; +} + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/OptionalContent.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/OptionalContent.h new file mode 100644 index 00000000000..7add4a3c11e --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/OptionalContent.h @@ -0,0 +1,93 @@ +//======================================================================== +// +// OptionalContent.h +// +// Copyright 2007 Brad Hards <bradh@kde.org> +// Copyright 2008 Carlos Garcia Campos <carlosgc@gnome.org> +// +// Released under the GPL (version 2, or later, at your option) +// +//======================================================================== + +#ifndef OPTIONALCONTENT_H +#define OPTIONALCONTENT_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "Object.h" +#include "CharTypes.h" + +class GooString; +class GooList; +class XRef; + +class OptionalContentGroup; + +//------------------------------------------------------------------------ + +class OCGs { +public: + + OCGs(Object *ocgObject, XRef *xref); + ~OCGs(); + + // Is OCGS valid? + GBool isOk() { return ok; } + + bool hasOCGs(); + GooList *getOCGs() const { return optionalContentGroups; } + + OptionalContentGroup* findOcgByRef( const Ref &ref); + + Array* getOrderArray() + { return (order.isArray() && order.arrayGetLength() > 0) ? order.getArray() : NULL; } + Array* getRBGroupsArray() + { return (rbgroups.isArray() && rbgroups.arrayGetLength()) ? rbgroups.getArray() : NULL; } + + bool optContentIsVisible( Object *dictRef ); + +private: + GBool ok; + + bool allOn( Array *ocgArray ); + bool allOff( Array *ocgArray ); + bool anyOn( Array *ocgArray ); + bool anyOff( Array *ocgArray ); + + GooList *optionalContentGroups; + + Object order; + Object rbgroups; + XRef *m_xref; +}; + +//------------------------------------------------------------------------ + +class OptionalContentGroup { +public: + enum State { On, Off }; + + OptionalContentGroup(Dict *dict); + + OptionalContentGroup(GooString *label); + + ~OptionalContentGroup(); + + GooString* getName() const; + + Ref getRef() const; + void setRef(const Ref ref); + + State getState() { return m_state; }; + void setState(State state) { m_state = state; }; + +private: + XRef *xref; + GooString *m_name; + Ref m_ref; + State m_state; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Outline.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Outline.cc new file mode 100644 index 00000000000..bd4e6d01b6d --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Outline.cc @@ -0,0 +1,188 @@ +//======================================================================== +// +// Outline.cc +// +// Copyright 2002-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Marco Pesenti Gritti <mpg@redhat.com> +// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009 Nick Jones <nick.jones@network-box.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include "goo/gmem.h" +#include "goo/GooString.h" +#include "goo/GooList.h" +#include "XRef.h" +#include "Link.h" +#include "PDFDocEncoding.h" +#include "Outline.h" + +//------------------------------------------------------------------------ + +Outline::Outline(Object *outlineObj, XRef *xref) { + Object first, last; + + items = NULL; + if (!outlineObj->isDict()) { + return; + } + items = OutlineItem::readItemList(outlineObj->dictLookupNF("First", &first), + outlineObj->dictLookupNF("Last", &last), + xref); + first.free(); + last.free(); +} + +Outline::~Outline() { + if (items) { + deleteGooList(items, OutlineItem); + } +} + +//------------------------------------------------------------------------ + +OutlineItem::OutlineItem(Dict *dict, XRef *xrefA) { + Object obj1; + GooString *s; + int i; + + xref = xrefA; + title = NULL; + action = NULL; + kids = NULL; + + if (dict->lookup("Title", &obj1)->isString()) { + s = obj1.getString(); + if ((s->getChar(0) & 0xff) == 0xfe && + (s->getChar(1) & 0xff) == 0xff) { + titleLen = (s->getLength() - 2) / 2; + title = (Unicode *)gmallocn(titleLen, sizeof(Unicode)); + for (i = 0; i < titleLen; ++i) { + title[i] = ((s->getChar(2 + 2*i) & 0xff) << 8) | + (s->getChar(3 + 2*i) & 0xff); + } + } else { + titleLen = s->getLength(); + title = (Unicode *)gmallocn(titleLen, sizeof(Unicode)); + for (i = 0; i < titleLen; ++i) { + title[i] = pdfDocEncoding[s->getChar(i) & 0xff]; + } + } + } else { + titleLen = 0; + } + obj1.free(); + + if (!dict->lookup("Dest", &obj1)->isNull()) { + action = LinkAction::parseDest(&obj1); + } else { + obj1.free(); + if (!dict->lookup("A", &obj1)->isNull()) { + action = LinkAction::parseAction(&obj1); + } + } + obj1.free(); + + dict->lookupNF("First", &firstRef); + dict->lookupNF("Last", &lastRef); + dict->lookupNF("Next", &nextRef); + + startsOpen = gFalse; + if (dict->lookup("Count", &obj1)->isInt()) { + if (obj1.getInt() > 0) { + startsOpen = gTrue; + } + } + obj1.free(); +} + +OutlineItem::~OutlineItem() { + close(); + if (title) { + gfree(title); + } + if (action) { + delete action; + } + firstRef.free(); + lastRef.free(); + nextRef.free(); +} + +GooList *OutlineItem::readItemList(Object *firstItemRef, Object *lastItemRef, + XRef *xrefA) { + GooList *items; + char* alreadyRead; + OutlineItem *item; + Object obj; + Object *p; + + if (!lastItemRef->isRef()) + return NULL; + + items = new GooList(); + + alreadyRead = (char *)gmalloc(xrefA->getNumObjects()); + memset(alreadyRead, 0, xrefA->getNumObjects()); + + p = firstItemRef; + while (p->isRef() && + (p->getRefNum() >= 0) && + (p->getRefNum() < xrefA->getNumObjects()) && + !alreadyRead[p->getRefNum()]) { + if (!p->fetch(xrefA, &obj)->isDict()) { + obj.free(); + break; + } + alreadyRead[p->getRefNum()] = 1; + item = new OutlineItem(obj.getDict(), xrefA); + obj.free(); + items->append(item); + if (p->getRef().num == lastItemRef->getRef().num && + p->getRef().gen == lastItemRef->getRef().gen) { + break; + } + p = &item->nextRef; + } + + gfree(alreadyRead); + + if (!items->getLength()) { + delete items; + items = NULL; + } + + return items; +} + +void OutlineItem::open() { + if (!kids) { + kids = readItemList(&firstRef, &lastRef, xref); + } +} + +void OutlineItem::close() { + if (kids) { + deleteGooList(kids, OutlineItem); + kids = NULL; + } +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Outline.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Outline.h new file mode 100644 index 00000000000..90190e69280 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Outline.h @@ -0,0 +1,89 @@ +//======================================================================== +// +// Outline.h +// +// Copyright 2002-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Marco Pesenti Gritti <mpg@redhat.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef OUTLINE_H +#define OUTLINE_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "Object.h" +#include "CharTypes.h" + +class GooString; +class GooList; +class XRef; +class LinkAction; + +//------------------------------------------------------------------------ + +class Outline { +public: + + Outline(Object *outlineObj, XRef *xref); + ~Outline(); + + GooList *getItems() { return items; } + +private: + + GooList *items; // NULL if document has no outline, + // otherwise, a list of OutlineItem +}; + +//------------------------------------------------------------------------ + +class OutlineItem { +public: + + OutlineItem(Dict *dict, XRef *xrefA); + ~OutlineItem(); + + static GooList *readItemList(Object *firstItemRef, Object *lastItemRef, + XRef *xrefA); + + void open(); + void close(); + + Unicode *getTitle() { return title; } + int getTitleLength() { return titleLen; } + LinkAction *getAction() { return action; } + GBool isOpen() { return startsOpen; } + GBool hasKids() { return firstRef.isRef(); } + GooList *getKids() { return kids; } + +private: + + XRef *xref; + Unicode *title; + int titleLen; + LinkAction *action; + Object firstRef; + Object lastRef; + Object nextRef; + GBool startsOpen; + GooList *kids; // NULL if this item is closed or has no kids, + // otherwise a list of OutlineItem +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/OutputDev.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/OutputDev.cc new file mode 100644 index 00000000000..5adc7b87c4c --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/OutputDev.cc @@ -0,0 +1,183 @@ +//======================================================================== +// +// OutputDev.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> +// Copyright (C) 2006 Thorkild Stray <thorkild@ifi.uio.no> +// Copyright (C) 2007 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2009 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stddef.h> +#include "Object.h" +#include "Stream.h" +#include "GfxState.h" +#include "OutputDev.h" +#include "goo/GooHash.h" + +//------------------------------------------------------------------------ +// OutputDev +//------------------------------------------------------------------------ + +void OutputDev::setDefaultCTM(double *ctm) { + int i; + double det; + + for (i = 0; i < 6; ++i) { + defCTM[i] = ctm[i]; + } + det = 1 / (defCTM[0] * defCTM[3] - defCTM[1] * defCTM[2]); + defICTM[0] = defCTM[3] * det; + defICTM[1] = -defCTM[1] * det; + defICTM[2] = -defCTM[2] * det; + defICTM[3] = defCTM[0] * det; + defICTM[4] = (defCTM[2] * defCTM[5] - defCTM[3] * defCTM[4]) * det; + defICTM[5] = (defCTM[1] * defCTM[4] - defCTM[0] * defCTM[5]) * det; +} + +void OutputDev::cvtDevToUser(double dx, double dy, double *ux, double *uy) { + *ux = defICTM[0] * dx + defICTM[2] * dy + defICTM[4]; + *uy = defICTM[1] * dx + defICTM[3] * dy + defICTM[5]; +} + +void OutputDev::cvtUserToDev(double ux, double uy, int *dx, int *dy) { + *dx = (int)(defCTM[0] * ux + defCTM[2] * uy + defCTM[4] + 0.5); + *dy = (int)(defCTM[1] * ux + defCTM[3] * uy + defCTM[5] + 0.5); +} + +void OutputDev::updateAll(GfxState *state) { + updateLineDash(state); + updateFlatness(state); + updateLineJoin(state); + updateLineCap(state); + updateMiterLimit(state); + updateLineWidth(state); + updateStrokeAdjust(state); + updateFillColorSpace(state); + updateFillColor(state); + updateStrokeColorSpace(state); + updateStrokeColor(state); + updateBlendMode(state); + updateFillOpacity(state); + updateStrokeOpacity(state); + updateFillOverprint(state); + updateStrokeOverprint(state); + updateTransfer(state); + updateFont(state); +} + +GBool OutputDev::beginType3Char(GfxState *state, double x, double y, + double dx, double dy, + CharCode code, Unicode *u, int uLen) { + return gFalse; +} + +void OutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool interpolate, GBool inlineImg) { + int i, j; + + if (inlineImg) { + str->reset(); + j = height * ((width + 7) / 8); + for (i = 0; i < j; ++i) + str->getChar(); + str->close(); + } +} + +void OutputDev::drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap *colorMap, + GBool interpolate, int *maskColors, GBool inlineImg) { + int i, j; + + if (inlineImg) { + str->reset(); + j = height * ((width * colorMap->getNumPixelComps() * + colorMap->getBits() + 7) / 8); + for (i = 0; i < j; ++i) + str->getChar(); + str->close(); + } +} + +void OutputDev::drawMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, + int maskWidth, int maskHeight, + GBool maskInvert, + GBool maskInterpolate) { + drawImage(state, ref, str, width, height, colorMap, interpolate, NULL, gFalse); +} + +void OutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, + int maskWidth, int maskHeight, + GfxImageColorMap *maskColorMap, + GBool maskInterpolate) { + drawImage(state, ref, str, width, height, colorMap, interpolate, NULL, gFalse); +} + +void OutputDev::endMarkedContent(GfxState *state) { +} + +void OutputDev::beginMarkedContent(char *name, Dict *properties) { +} + +void OutputDev::markPoint(char *name) { +} + +void OutputDev::markPoint(char *name, Dict *properties) { +} + + +#if OPI_SUPPORT +void OutputDev::opiBegin(GfxState *state, Dict *opiDict) { +} + +void OutputDev::opiEnd(GfxState *state, Dict *opiDict) { +} +#endif + +void OutputDev::startProfile() { + if (profileHash) + delete profileHash; + + profileHash = new GooHash (true); +} + +GooHash *OutputDev::endProfile() { + GooHash *profile = profileHash; + + profileHash = NULL; + + return profile; +} + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/OutputDev.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/OutputDev.h new file mode 100644 index 00000000000..bf984fc31ab --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/OutputDev.h @@ -0,0 +1,322 @@ +//======================================================================== +// +// OutputDev.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Jonathan Blandford <jrb@redhat.com> +// Copyright (C) 2006 Thorkild Stray <thorkild@ifi.uio.no> +// Copyright (C) 2007 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2007, 2011 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2009-2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2009, 2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2009 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef OUTPUTDEV_H +#define OUTPUTDEV_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "poppler-config.h" +#include "goo/gtypes.h" +#include "CharTypes.h" +#include "Object.h" + +class Dict; +class GooHash; +class GooString; +class GfxState; +struct GfxColor; +class GfxColorSpace; +class GfxImageColorMap; +class GfxFunctionShading; +class GfxAxialShading; +class GfxGouraudTriangleShading; +class GfxPatchMeshShading; +class GfxRadialShading; +class GfxGouraudTriangleShading; +class GfxPatchMeshShading; +class Stream; +class Links; +class AnnotLink; +class Catalog; +class Page; +class Function; + +//------------------------------------------------------------------------ +// OutputDev +//------------------------------------------------------------------------ + +class OutputDev { +public: + + // Constructor. + OutputDev() { profileHash = NULL; } + + // Destructor. + virtual ~OutputDev() {} + + //----- get info about output device + + // Does this device use upside-down coordinates? + // (Upside-down means (0,0) is the top left corner of the page.) + virtual GBool upsideDown() = 0; + + // Does this device use drawChar() or drawString()? + virtual GBool useDrawChar() = 0; + + // Does this device use tilingPatternFill()? If this returns false, + // tiling pattern fills will be reduced to a series of other drawing + // operations. + virtual GBool useTilingPatternFill() { return gFalse; } + + // Does this device support specific shading types? + // see gouraudTriangleShadedFill() and patchMeshShadedFill() + virtual GBool useShadedFills(int type) { return gFalse; } + + // Does this device use FillColorStop()? + virtual GBool useFillColorStop() { return gFalse; } + + // Does this device use drawForm()? If this returns false, + // form-type XObjects will be interpreted (i.e., unrolled). + virtual GBool useDrawForm() { return gFalse; } + + // Does this device use beginType3Char/endType3Char? Otherwise, + // text in Type 3 fonts will be drawn with drawChar/drawString. + virtual GBool interpretType3Chars() = 0; + + // Does this device need non-text content? + virtual GBool needNonText() { return gTrue; } + + // If current colorspace ist pattern, + // does this device support text in pattern colorspace? + // Default is false + virtual GBool supportTextCSPattern(GfxState * /*state*/) { return gFalse; } + + // If current colorspace ist pattern, + // need this device special handling for masks in pattern colorspace? + // Default is false + virtual GBool fillMaskCSPattern(GfxState * /*state*/) { return gFalse; } + virtual void endMaskClip(GfxState * /*state*/) {} + + //----- initialization and control + + // Set default transform matrix. + virtual void setDefaultCTM(double *ctm); + + // Check to see if a page slice should be displayed. If this + // returns false, the page display is aborted. Typically, an + // OutputDev will use some alternate means to display the page + // before returning false. + virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI, + int rotate, GBool useMediaBox, GBool crop, + int sliceX, int sliceY, int sliceW, int sliceH, + GBool printing, Catalog * catalog, + GBool (* abortCheckCbk)(void *data) = NULL, + void * abortCheckCbkData = NULL) + { return gTrue; } + + // Start a page. + virtual void startPage(int pageNum, GfxState *state) {} + + // End a page. + virtual void endPage() {} + + // Dump page contents to display. + virtual void dump() {} + + //----- coordinate conversion + + // Convert between device and user coordinates. + virtual void cvtDevToUser(double dx, double dy, double *ux, double *uy); + virtual void cvtUserToDev(double ux, double uy, int *dx, int *dy); + + double *getDefCTM() { return defCTM; } + double *getDefICTM() { return defICTM; } + + //----- save/restore graphics state + virtual void saveState(GfxState * /*state*/) {} + virtual void restoreState(GfxState * /*state*/) {} + + //----- update graphics state + virtual void updateAll(GfxState *state); + virtual void updateCTM(GfxState * /*state*/, double /*m11*/, double /*m12*/, + double /*m21*/, double /*m22*/, double /*m31*/, double /*m32*/) {} + virtual void updateLineDash(GfxState * /*state*/) {} + virtual void updateFlatness(GfxState * /*state*/) {} + virtual void updateLineJoin(GfxState * /*state*/) {} + virtual void updateLineCap(GfxState * /*state*/) {} + virtual void updateMiterLimit(GfxState * /*state*/) {} + virtual void updateLineWidth(GfxState * /*state*/) {} + virtual void updateStrokeAdjust(GfxState * /*state*/) {} + virtual void updateAlphaIsShape(GfxState * /*state*/) {} + virtual void updateTextKnockout(GfxState * /*state*/) {} + virtual void updateFillColorSpace(GfxState * /*state*/) {} + virtual void updateStrokeColorSpace(GfxState * /*state*/) {} + virtual void updateFillColor(GfxState * /*state*/) {} + virtual void updateStrokeColor(GfxState * /*state*/) {} + virtual void updateBlendMode(GfxState * /*state*/) {} + virtual void updateFillOpacity(GfxState * /*state*/) {} + virtual void updateStrokeOpacity(GfxState * /*state*/) {} + virtual void updateFillOverprint(GfxState * /*state*/) {} + virtual void updateStrokeOverprint(GfxState * /*state*/) {} + virtual void updateOverprintMode(GfxState * /*state*/) {} + virtual void updateTransfer(GfxState * /*state*/) {} + virtual void updateFillColorStop(GfxState * /*state*/, double /*offset*/) {} + + //----- update text state + virtual void updateFont(GfxState * /*state*/) {} + virtual void updateTextMat(GfxState * /*state*/) {} + virtual void updateCharSpace(GfxState * /*state*/) {} + virtual void updateRender(GfxState * /*state*/) {} + virtual void updateRise(GfxState * /*state*/) {} + virtual void updateWordSpace(GfxState * /*state*/) {} + virtual void updateHorizScaling(GfxState * /*state*/) {} + virtual void updateTextPos(GfxState * /*state*/) {} + virtual void updateTextShift(GfxState * /*state*/, double /*shift*/) {} + + //----- path painting + virtual void stroke(GfxState * /*state*/) {} + virtual void fill(GfxState * /*state*/) {} + virtual void eoFill(GfxState * /*state*/) {} + virtual GBool tilingPatternFill(GfxState * /*state*/, Catalog * /*cat*/, Object * /*str*/, + double * /*pmat*/, int /*paintType*/, int /*tilingType*/, Dict * /*resDict*/, + double * /*mat*/, double * /*bbox*/, + int /*x0*/, int /*y0*/, int /*x1*/, int /*y1*/, + double /*xStep*/, double /*yStep*/) + { return gFalse; } + virtual GBool functionShadedFill(GfxState * /*state*/, + GfxFunctionShading * /*shading*/) + { return gFalse; } + virtual GBool axialShadedFill(GfxState * /*state*/, GfxAxialShading * /*shading*/, double /*tMin*/, double /*tMax*/) + { return gFalse; } + virtual GBool axialShadedSupportExtend(GfxState * /*state*/, GfxAxialShading * /*shading*/) + { return gFalse; } + virtual GBool radialShadedFill(GfxState * /*state*/, GfxRadialShading * /*shading*/, double /*sMin*/, double /*sMax*/) + { return gFalse; } + virtual GBool radialShadedSupportExtend(GfxState * /*state*/, GfxRadialShading * /*shading*/) + { return gFalse; } + virtual GBool gouraudTriangleShadedFill(GfxState *state, GfxGouraudTriangleShading *shading) + { return gFalse; } + virtual GBool patchMeshShadedFill(GfxState *state, GfxPatchMeshShading *shading) + { return gFalse; } + + //----- path clipping + virtual void clip(GfxState * /*state*/) {} + virtual void eoClip(GfxState * /*state*/) {} + virtual void clipToStrokePath(GfxState * /*state*/) {} + + //----- text drawing + virtual void beginStringOp(GfxState * /*state*/) {} + virtual void endStringOp(GfxState * /*state*/) {} + virtual void beginString(GfxState * /*state*/, GooString * /*s*/) {} + virtual void endString(GfxState * /*state*/) {} + virtual void drawChar(GfxState * /*state*/, double /*x*/, double /*y*/, + double /*dx*/, double /*dy*/, + double /*originX*/, double /*originY*/, + CharCode /*code*/, int /*nBytes*/, Unicode * /*u*/, int /*uLen*/) {} + virtual void drawString(GfxState * /*state*/, GooString * /*s*/) {} + virtual GBool beginType3Char(GfxState * /*state*/, double /*x*/, double /*y*/, + double /*dx*/, double /*dy*/, + CharCode /*code*/, Unicode * /*u*/, int /*uLen*/); + virtual void endType3Char(GfxState * /*state*/) {} + virtual void beginTextObject(GfxState * /*state*/) {} + virtual GBool deviceHasTextClip(GfxState * /*state*/) { return gFalse; } + virtual void endTextObject(GfxState * /*state*/) {} + + //----- image drawing + virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, GBool interpolate, + GBool inlineImg); + virtual void drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap *colorMap, + GBool interpolate, int *maskColors, GBool inlineImg); + virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, GBool interpolate, + Stream *maskStr, int maskWidth, int maskHeight, + GBool maskInvert, GBool maskInterpolate); + virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, + int maskWidth, int maskHeight, + GfxImageColorMap *maskColorMap, + GBool maskInterpolate); + + //----- grouping operators + + virtual void endMarkedContent(GfxState *state); + virtual void beginMarkedContent(char *name, Dict *properties); + virtual void markPoint(char *name); + virtual void markPoint(char *name, Dict *properties); + + + +#if OPI_SUPPORT + //----- OPI functions + virtual void opiBegin(GfxState *state, Dict *opiDict); + virtual void opiEnd(GfxState *state, Dict *opiDict); +#endif + + //----- Type 3 font operators + virtual void type3D0(GfxState * /*state*/, double /*wx*/, double /*wy*/) {} + virtual void type3D1(GfxState * /*state*/, double /*wx*/, double /*wy*/, + double /*llx*/, double /*lly*/, double /*urx*/, double /*ury*/) {} + + //----- form XObjects + virtual void drawForm(Ref /*id*/) {} + + //----- PostScript XObjects + virtual void psXObject(Stream * /*psStream*/, Stream * /*level1Stream*/) {} + + //----- Profiling + virtual void startProfile(); + virtual GooHash *getProfileHash() {return profileHash; } + virtual GooHash *endProfile(); + + //----- transparency groups and soft masks + virtual void beginTransparencyGroup(GfxState * /*state*/, double * /*bbox*/, + GfxColorSpace * /*blendingColorSpace*/, + GBool /*isolated*/, GBool /*knockout*/, + GBool /*forSoftMask*/) {} + virtual void endTransparencyGroup(GfxState * /*state*/) {} + virtual void paintTransparencyGroup(GfxState * /*state*/, double * /*bbox*/) {} + virtual void setSoftMask(GfxState * /*state*/, double * /*bbox*/, GBool /*alpha*/, + Function * /*transferFunc*/, GfxColor * /*backdropColor*/) {} + virtual void clearSoftMask(GfxState * /*state*/) {} + + //----- links + virtual void processLink(AnnotLink * /*link*/, Catalog * /*catalog*/) {} + +#if 1 //~tmp: turn off anti-aliasing temporarily + virtual GBool getVectorAntialias() { return gFalse; } + virtual void setVectorAntialias(GBool /*vaa*/) {} +#endif + +private: + + double defCTM[6]; // default coordinate transform matrix + double defICTM[6]; // inverse of default CTM + GooHash *profileHash; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDoc.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDoc.cc new file mode 100644 index 00000000000..1c8538534d5 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDoc.cc @@ -0,0 +1,1534 @@ +//======================================================================== +// +// PDFDoc.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005, 2006, 2008 Brad Hards <bradh@frogmouth.net> +// Copyright (C) 2005, 2007-2009, 2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2008 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2008, 2010 Pino Toscano <pino@kde.org> +// Copyright (C) 2008, 2010, 2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2009 Eric Toombs <ewtoombs@uwaterloo.ca> +// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> +// Copyright (C) 2009, 2011 Axel Struebing <axel.struebing@freenet.de> +// Copyright (C) 2010, 2011 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2010 Jakub Wilk <ubanus@users.sf.net> +// Copyright (C) 2010 Ilya Gorenbein <igorenbein@finjan.com> +// Copyright (C) 2010 Srinivas Adicherla <srinivas.adicherla@geodesic.com> +// Copyright (C) 2010 Philip Lorenz <lorenzph+freedesktop@gmail.com> +// Copyright (C) 2011, 2012 Thomas Freitag <Thomas.Freitag@alfa.de> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <ctype.h> +#include <locale.h> +#include <stdio.h> +#include <errno.h> +#include <stdlib.h> +#include <stddef.h> +#include <string.h> +#include <time.h> +#ifdef _WIN32 +# include <windows.h> +#endif +#include <sys/stat.h> +#include "goo/gstrtod.h" +#include "goo/GooString.h" +#include "poppler-config.h" +#include "GlobalParams.h" +#include "Page.h" +#include "Catalog.h" +#include "Stream.h" +#include "XRef.h" +#include "Linearization.h" +#include "Link.h" +#include "OutputDev.h" +#include "Error.h" +#include "ErrorCodes.h" +#include "Lexer.h" +#include "Parser.h" +#include "SecurityHandler.h" +#include "Decrypt.h" +#ifndef DISABLE_OUTLINE +#include "Outline.h" +#endif +#include "PDFDoc.h" +#include "Hints.h" + +//------------------------------------------------------------------------ + +#define headerSearchSize 1024 // read this many bytes at beginning of + // file to look for '%PDF' +#define pdfIdLength 32 // PDF Document IDs (PermanentId, UpdateId) length + +#define linearizationSearchSize 1024 // read this many bytes at beginning of + // file to look for linearization + // dictionary + +#define xrefSearchSize 1024 // read this many bytes at end of file + // to look for 'startxref' + +//------------------------------------------------------------------------ +// PDFDoc +//------------------------------------------------------------------------ + +void PDFDoc::init() +{ + ok = gFalse; + errCode = errNone; + fileName = NULL; + file = NULL; + str = NULL; + xref = NULL; + linearization = NULL; + catalog = NULL; + hints = NULL; +#ifndef DISABLE_OUTLINE + outline = NULL; +#endif + startXRefPos = ~(Guint)0; + secHdlr = NULL; + pageCache = NULL; +} + +PDFDoc::PDFDoc() +{ + init(); +} + +PDFDoc::PDFDoc(GooString *fileNameA, GooString *ownerPassword, + GooString *userPassword, void *guiDataA) { + Object obj; + int size = 0; + + init(); + + fileName = fileNameA; + guiData = guiDataA; + + struct stat buf; + if (stat(fileName->getCString(), &buf) == 0) { + size = buf.st_size; + } + + // try to open file +#ifdef VMS + file = fopen(fileName->getCString(), "rb", "ctx=stm"); +#else + file = fopen(fileName->getCString(), "rb"); +#endif + if (file == NULL) { + // fopen() has failed. + // Keep a copy of the errno returned by fopen so that it can be + // referred to later. + fopenErrno = errno; + error(-1, "Couldn't open file '%s': %s.", fileName->getCString(), + strerror(errno)); + errCode = errOpenFile; + return; + } + + // create stream + obj.initNull(); + str = new FileStream(file, 0, gFalse, size, &obj); + + ok = setup(ownerPassword, userPassword); +} + +#ifdef _WIN32 +PDFDoc::PDFDoc(wchar_t *fileNameA, int fileNameLen, GooString *ownerPassword, + GooString *userPassword, void *guiDataA) { + OSVERSIONINFO version; + wchar_t fileName2[MAX_PATH + 1]; + Object obj; + int i; + + init(); + + guiData = guiDataA; + + //~ file name should be stored in Unicode (?) + fileName = new GooString(); + for (i = 0; i < fileNameLen; ++i) { + fileName->append((char)fileNameA[i]); + } + + // zero-terminate the file name string + for (i = 0; i < fileNameLen && i < MAX_PATH; ++i) { + fileName2[i] = fileNameA[i]; + } + fileName2[i] = 0; + + // try to open file + // NB: _wfopen is only available in NT + struct _stat buf; + int size; + version.dwOSVersionInfoSize = sizeof(version); + GetVersionEx(&version); + if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) { + if (_wstat(fileName2, &buf) == 0) { + size = buf.st_size; + } + file = _wfopen(fileName2, L"rb"); + } else { + if (_stat(fileName->getCString(), &buf) == 0) { + size = buf.st_size; + } + file = fopen(fileName->getCString(), "rb"); + } + if (!file) { + error(-1, "Couldn't open file '%s'", fileName->getCString()); + errCode = errOpenFile; + return; + } + + // create stream + obj.initNull(); + str = new FileStream(file, 0, gFalse, size, &obj); + + ok = setup(ownerPassword, userPassword); +} +#endif + +PDFDoc::PDFDoc(BaseStream *strA, GooString *ownerPassword, + GooString *userPassword, void *guiDataA) { + + init(); + guiData = guiDataA; + if (strA->getFileName()) { + fileName = strA->getFileName()->copy(); + } else { + fileName = NULL; + } + str = strA; + ok = setup(ownerPassword, userPassword); +} + +GBool PDFDoc::setup(GooString *ownerPassword, GooString *userPassword) { + str->setPos(0, -1); + if (str->getPos() < 0) + { + error(-1, "Document base stream is not seekable"); + return gFalse; + } + + str->reset(); + + // check footer + // Adobe does not seem to enforce %%EOF, so we do the same +// if (!checkFooter()) return gFalse; + + // check header + checkHeader(); + + GBool wasReconstructed = false; + + // read xref table + xref = new XRef(str, getStartXRef(), getMainXRefEntriesOffset(), &wasReconstructed); + if (!xref->isOk()) { + error(-1, "Couldn't read xref table"); + errCode = xref->getErrorCode(); + return gFalse; + } + + // check for encryption + if (!checkEncryption(ownerPassword, userPassword)) { + errCode = errEncrypted; + return gFalse; + } + + // read catalog + catalog = new Catalog(xref); + if (catalog && !catalog->isOk()) { + if (!wasReconstructed) + { + // try one more time to contruct the Catalog, maybe the problem is damaged XRef + delete catalog; + delete xref; + xref = new XRef(str, 0, 0, NULL, true); + catalog = new Catalog(xref); + } + + if (catalog && !catalog->isOk()) { + error(-1, "Couldn't read page catalog"); + errCode = errBadCatalog; + return gFalse; + } + } + + // done + return gTrue; +} + +PDFDoc::~PDFDoc() { + if (pageCache) { + for (int i = 0; i < getNumPages(); i++) { + if (pageCache[i]) { + delete pageCache[i]; + } + } + gfree(pageCache); + } + delete secHdlr; +#ifndef DISABLE_OUTLINE + if (outline) { + delete outline; + } +#endif + if (catalog) { + delete catalog; + } + if (xref) { + delete xref; + } + if (hints) { + delete hints; + } + if (linearization) { + delete linearization; + } + if (str) { + delete str; + } + if (file) { + fclose(file); + } + if (fileName) { + delete fileName; + } +} + + +// Check for a %%EOF at the end of this stream +GBool PDFDoc::checkFooter() { + // we look in the last 1024 chars because Adobe does the same + char *eof = new char[1025]; + int pos = str->getPos(); + str->setPos(1024, -1); + int i, ch; + for (i = 0; i < 1024; i++) + { + ch = str->getChar(); + if (ch == EOF) + break; + eof[i] = ch; + } + eof[i] = '\0'; + + bool found = false; + for (i = i - 5; i >= 0; i--) { + if (strncmp (&eof[i], "%%EOF", 5) == 0) { + found = true; + break; + } + } + if (!found) + { + error(-1, "Document has not the mandatory ending %%EOF"); + errCode = errDamaged; + delete[] eof; + return gFalse; + } + delete[] eof; + str->setPos(pos); + return gTrue; +} + +// Check for a PDF header on this stream. Skip past some garbage +// if necessary. +void PDFDoc::checkHeader() { + char hdrBuf[headerSearchSize+1]; + char *p; + char *tokptr; + int i; + + pdfMajorVersion = 0; + pdfMinorVersion = 0; + for (i = 0; i < headerSearchSize; ++i) { + hdrBuf[i] = str->getChar(); + } + hdrBuf[headerSearchSize] = '\0'; + for (i = 0; i < headerSearchSize - 5; ++i) { + if (!strncmp(&hdrBuf[i], "%PDF-", 5)) { + break; + } + } + if (i >= headerSearchSize - 5) { + error(-1, "May not be a PDF file (continuing anyway)"); + return; + } + str->moveStart(i); + if (!(p = strtok_r(&hdrBuf[i+5], " \t\n\r", &tokptr))) { + error(-1, "May not be a PDF file (continuing anyway)"); + return; + } + sscanf(p, "%d.%d", &pdfMajorVersion, &pdfMinorVersion); + // We don't do the version check. Don't add it back in. +} + +GBool PDFDoc::checkEncryption(GooString *ownerPassword, GooString *userPassword) { + Object encrypt; + GBool encrypted; + GBool ret; + + xref->getTrailerDict()->dictLookup("Encrypt", &encrypt); + if ((encrypted = encrypt.isDict())) { + if ((secHdlr = SecurityHandler::make(this, &encrypt))) { + if (secHdlr->checkEncryption(ownerPassword, userPassword)) { + // authorization succeeded + xref->setEncryption(secHdlr->getPermissionFlags(), + secHdlr->getOwnerPasswordOk(), + secHdlr->getFileKey(), + secHdlr->getFileKeyLength(), + secHdlr->getEncVersion(), + secHdlr->getEncRevision(), + secHdlr->getEncAlgorithm()); + ret = gTrue; + } else { + // authorization failed + ret = gFalse; + } + } else { + // couldn't find the matching security handler + ret = gFalse; + } + } else { + // document is not encrypted + ret = gTrue; + } + encrypt.free(); + return ret; +} + +void PDFDoc::displayPage(OutputDev *out, int page, + double hDPI, double vDPI, int rotate, + GBool useMediaBox, GBool crop, GBool printing, + GBool (*abortCheckCbk)(void *data), + void *abortCheckCbkData, + GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), + void *annotDisplayDecideCbkData) { + if (globalParams->getPrintCommands()) { + printf("***** page %d *****\n", page); + } + + if (getPage(page)) + getPage(page)->display(out, hDPI, vDPI, + rotate, useMediaBox, crop, printing, catalog, + abortCheckCbk, abortCheckCbkData, + annotDisplayDecideCbk, annotDisplayDecideCbkData); + +} + +void PDFDoc::displayPages(OutputDev *out, int firstPage, int lastPage, + double hDPI, double vDPI, int rotate, + GBool useMediaBox, GBool crop, GBool printing, + GBool (*abortCheckCbk)(void *data), + void *abortCheckCbkData, + GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), + void *annotDisplayDecideCbkData) { + int page; + + for (page = firstPage; page <= lastPage; ++page) { + displayPage(out, page, hDPI, vDPI, rotate, useMediaBox, crop, printing, + abortCheckCbk, abortCheckCbkData, + annotDisplayDecideCbk, annotDisplayDecideCbkData); + } +} + +void PDFDoc::displayPageSlice(OutputDev *out, int page, + double hDPI, double vDPI, int rotate, + GBool useMediaBox, GBool crop, GBool printing, + int sliceX, int sliceY, int sliceW, int sliceH, + GBool (*abortCheckCbk)(void *data), + void *abortCheckCbkData, + GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), + void *annotDisplayDecideCbkData) { + if (getPage(page)) + getPage(page)->displaySlice(out, hDPI, vDPI, + rotate, useMediaBox, crop, + sliceX, sliceY, sliceW, sliceH, + printing, catalog, + abortCheckCbk, abortCheckCbkData, + annotDisplayDecideCbk, annotDisplayDecideCbkData); +} + +Links *PDFDoc::getLinks(int page) { + Page *p = getPage(page); + if (!p) { + return new Links (NULL); + } + return p->getLinks(catalog); +} + +void PDFDoc::processLinks(OutputDev *out, int page) { + if (getPage(page)) + getPage(page)->processLinks(out, catalog); +} + +Linearization *PDFDoc::getLinearization() +{ + if (!linearization) { + linearization = new Linearization(str); + } + return linearization; +} + +GBool PDFDoc::isLinearized() { + if ((str->getLength()) && + (getLinearization()->getLength() == str->getLength())) + return gTrue; + else + return gFalse; +} + +static GBool +get_id (GooString *encodedidstring, GooString *id) { + const char *encodedid = encodedidstring->getCString(); + char pdfid[pdfIdLength + 1]; + int n; + + if (encodedidstring->getLength() != pdfIdLength / 2) + return gFalse; + + n = sprintf(pdfid, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + encodedid[0] & 0xff, encodedid[1] & 0xff, encodedid[2] & 0xff, encodedid[3] & 0xff, + encodedid[4] & 0xff, encodedid[5] & 0xff, encodedid[6] & 0xff, encodedid[7] & 0xff, + encodedid[8] & 0xff, encodedid[9] & 0xff, encodedid[10] & 0xff, encodedid[11] & 0xff, + encodedid[12] & 0xff, encodedid[13] & 0xff, encodedid[14] & 0xff, encodedid[15] & 0xff); + if (n != pdfIdLength) + return gFalse; + + id->Set(pdfid, pdfIdLength); + return gTrue; +} + +GBool PDFDoc::getID(GooString *permanent_id, GooString *update_id) { + Object obj; + xref->getTrailerDict()->dictLookup ("ID", &obj); + + if (obj.isArray() && obj.arrayGetLength() == 2) { + Object obj2; + + if (permanent_id) { + if (obj.arrayGet(0, &obj2)->isString()) { + if (!get_id (obj2.getString(), permanent_id)) { + obj2.free(); + return gFalse; + } + } else { + error(-1, "Invalid permanent ID"); + obj2.free(); + return gFalse; + } + obj2.free(); + } + + if (update_id) { + if (obj.arrayGet(1, &obj2)->isString()) { + if (!get_id (obj2.getString(), update_id)) { + obj2.free(); + return gFalse; + } + } else { + error(-1, "Invalid update ID"); + obj2.free(); + return gFalse; + } + obj2.free(); + } + + obj.free(); + + return gTrue; + } + obj.free(); + + return gFalse; +} + +Hints *PDFDoc::getHints() +{ + if (!hints && isLinearized()) { + hints = new Hints(str, getLinearization(), getXRef(), secHdlr); + } + + return hints; +} + +int PDFDoc::savePageAs(GooString *name, int pageNo) +{ + FILE *f; + OutStream *outStr; + XRef *yRef, *countRef; + int rootNum = getXRef()->getSize() + 1; + + if (pageNo < 1 || pageNo > getNumPages()) { + error(-1, "Illegal pageNo: %d(%d)", pageNo, getNumPages() ); + return errOpenFile; + } + PDFRectangle *cropBox = NULL; + if (getCatalog()->getPage(pageNo)->isCropped()) { + cropBox = getCatalog()->getPage(pageNo)->getCropBox(); + } + replacePageDict(pageNo, + getCatalog()->getPage(pageNo)->getRotate(), + getCatalog()->getPage(pageNo)->getMediaBox(), + cropBox, NULL); + Ref *refPage = getCatalog()->getPageRef(pageNo); + Object page; + getXRef()->fetch(refPage->num, refPage->gen, &page); + + if (!(f = fopen(name->getCString(), "wb"))) { + error(-1, "Couldn't open file '%s'", name->getCString()); + return errOpenFile; + } + outStr = new FileOutStream(f,0); + + yRef = new XRef(); + countRef = new XRef(); + yRef->add(0, 65535, 0, gFalse); + writeHeader(outStr, getPDFMajorVersion(), getPDFMinorVersion()); + + // get and mark optional content groups + OCGs *ocgs = getCatalog()->getOptContentConfig(); + if (ocgs != NULL) { + Object catDict, optContentProps; + getXRef()->getCatalog(&catDict); + catDict.dictLookup("OCProperties", &optContentProps); + Dict *pageDict = optContentProps.getDict(); + markPageObjects(pageDict, yRef, countRef, 0); + catDict.free(); + optContentProps.free(); + } + + Dict *pageDict = page.getDict(); + markPageObjects(pageDict, yRef, countRef, 0); + Guint objectsCount = writePageObjects(outStr, yRef, 0); + + yRef->add(rootNum,0,outStr->getPos(),gTrue); + outStr->printf("%d 0 obj\n", rootNum); + outStr->printf("<< /Type /Catalog /Pages %d 0 R", rootNum + 1); + if (ocgs != NULL) { + Object catDict, optContentProps; + getXRef()->getCatalog(&catDict); + catDict.dictLookup("OCProperties", &optContentProps); + outStr->printf(" /OCProperties <<"); + Dict *pageDict = optContentProps.getDict(); + for (int n = 0; n < pageDict->getLength(); n++) { + if (n > 0) outStr->printf(" "); + const char *key = pageDict->getKey(n); + Object value; pageDict->getValNF(n, &value); + outStr->printf("/%s ", key); + writeObject(&value, NULL, outStr, getXRef(), 0); + value.free(); + } + outStr->printf(" >> "); + catDict.free(); + optContentProps.free(); + } + outStr->printf(">>\nendobj\n"); + objectsCount++; + + yRef->add(rootNum + 1,0,outStr->getPos(),gTrue); + outStr->printf("%d 0 obj\n", rootNum + 1); + outStr->printf("<< /Type /Pages /Kids [ %d 0 R ] /Count 1 >>\n", rootNum + 2); + outStr->printf("endobj\n"); + objectsCount++; + + yRef->add(rootNum + 2,0,outStr->getPos(),gTrue); + outStr->printf("%d 0 obj\n", rootNum + 2); + outStr->printf("<< "); + for (int n = 0; n < pageDict->getLength(); n++) { + if (n > 0) outStr->printf(" "); + const char *key = pageDict->getKey(n); + Object value; pageDict->getValNF(n, &value); + if (strcmp(key, "Parent") == 0) { + outStr->printf("/Parent %d 0 R", rootNum + 1); + } else { + outStr->printf("/%s ", key); + writeObject(&value, NULL, outStr, getXRef(), 0); + } + value.free(); + } + outStr->printf(" >>\nendobj\n"); + objectsCount++; + page.free(); + + Guint uxrefOffset = outStr->getPos(); + yRef->writeToFile(outStr, gFalse /* do not write unnecessary entries */); + + Ref ref; + ref.num = rootNum; + ref.gen = 0; + writeTrailer(uxrefOffset, objectsCount, outStr, gFalse, 0, &ref, getXRef(), name->getCString(), outStr->getPos()); + + outStr->close(); + fclose(f); + delete yRef; + delete countRef; + + return errNone; +} + +int PDFDoc::saveAs(GooString *name, PDFWriteMode mode) { + FILE *f; + OutStream *outStr; + int res; + + if (!(f = fopen(name->getCString(), "wb"))) { + error(-1, "Couldn't open file '%s'", name->getCString()); + return errOpenFile; + } + outStr = new FileOutStream(f,0); + res = saveAs(outStr, mode); + delete outStr; + fclose(f); + return res; +} + +int PDFDoc::saveAs(OutStream *outStr, PDFWriteMode mode) { + + // find if we have updated objects + GBool updated = gFalse; + for(int i=0; i<xref->getNumObjects(); i++) { + if (xref->getEntry(i)->updated) { + updated = gTrue; + break; + } + } + + // we don't support rewriting files with Encrypt at the moment + Object obj; + xref->getTrailerDict()->getDict()->lookupNF("Encrypt", &obj); + if (!obj.isNull()) + { + obj.free(); + if (!updated && mode == writeStandard) { + // simply copy the original file + saveWithoutChangesAs (outStr); + } else { + return errEncrypted; + } + } + else + { + obj.free(); + + if (mode == writeForceRewrite) { + saveCompleteRewrite(outStr); + } else if (mode == writeForceIncremental) { + saveIncrementalUpdate(outStr); + } else { // let poppler decide + if(updated) { + saveIncrementalUpdate(outStr); + } else { + // simply copy the original file + saveWithoutChangesAs (outStr); + } + } + } + + return errNone; +} + +int PDFDoc::saveWithoutChangesAs(GooString *name) { + FILE *f; + OutStream *outStr; + int res; + + if (!(f = fopen(name->getCString(), "wb"))) { + error(-1, "Couldn't open file '%s'", name->getCString()); + return errOpenFile; + } + + outStr = new FileOutStream(f,0); + res = saveWithoutChangesAs(outStr); + delete outStr; + + fclose(f); + + return res; +} + +int PDFDoc::saveWithoutChangesAs(OutStream *outStr) { + int c; + + str->reset(); + while ((c = str->getChar()) != EOF) { + outStr->put(c); + } + str->close(); + + return errNone; +} + +void PDFDoc::saveIncrementalUpdate (OutStream* outStr) +{ + XRef *uxref; + int c; + //copy the original file + str->reset(); + while ((c = str->getChar()) != EOF) { + outStr->put(c); + } + str->close(); + + uxref = new XRef(); + uxref->add(0, 65535, 0, gFalse); + for(int i=0; i<xref->getNumObjects(); i++) { + if ((xref->getEntry(i)->type == xrefEntryFree) && + (xref->getEntry(i)->gen == 0)) //we skip the irrelevant free objects + continue; + + if (xref->getEntry(i)->updated) { //we have an updated object + Object obj1; + Ref ref; + ref.num = i; + ref.gen = xref->getEntry(i)->type == xrefEntryCompressed ? 0 : xref->getEntry(i)->gen; + xref->fetch(ref.num, ref.gen, &obj1); + Guint offset = writeObject(&obj1, &ref, outStr); + uxref->add(ref.num, ref.gen, offset, gTrue); + obj1.free(); + } + } + if (uxref->getSize() == 0) { //we have nothing to update + delete uxref; + return; + } + + Guint uxrefOffset = outStr->getPos(); + uxref->writeToFile(outStr, gFalse /* do not write unnecessary entries */); + + writeTrailer(uxrefOffset, xref->getSize(), outStr, gTrue); + + delete uxref; +} + +void PDFDoc::saveCompleteRewrite (OutStream* outStr) +{ + outStr->printf("%%PDF-%d.%d\r\n",pdfMajorVersion,pdfMinorVersion); + XRef *uxref = new XRef(); + uxref->add(0, 65535, 0, gFalse); + for(int i=0; i<xref->getNumObjects(); i++) { + Object obj1; + Ref ref; + XRefEntryType type = xref->getEntry(i)->type; + if (type == xrefEntryFree) { + ref.num = i; + ref.gen = xref->getEntry(i)->gen; + /* the XRef class adds a lot of irrelevant free entries, we only want the significant one + and we don't want the one with num=0 because it has already been added (gen = 65535)*/ + if (ref.gen > 0 && ref.num > 0) + uxref->add(ref.num, ref.gen, 0, gFalse); + } else if (type == xrefEntryUncompressed){ + ref.num = i; + ref.gen = xref->getEntry(i)->gen; + xref->fetch(ref.num, ref.gen, &obj1); + Guint offset = writeObject(&obj1, &ref, outStr); + uxref->add(ref.num, ref.gen, offset, gTrue); + obj1.free(); + } else if (type == xrefEntryCompressed) { + ref.num = i; + ref.gen = 0; //compressed entries have gen == 0 + xref->fetch(ref.num, ref.gen, &obj1); + Guint offset = writeObject(&obj1, &ref, outStr); + uxref->add(ref.num, ref.gen, offset, gTrue); + obj1.free(); + } + } + Guint uxrefOffset = outStr->getPos(); + uxref->writeToFile(outStr, gTrue /* write all entries */); + + writeTrailer(uxrefOffset, uxref->getSize(), outStr, gFalse); + + + delete uxref; + +} + +void PDFDoc::writeDictionnary (Dict* dict, OutStream* outStr, XRef *xRef, Guint numOffset) +{ + Object obj1; + outStr->printf("<<"); + for (int i=0; i<dict->getLength(); i++) { + GooString keyName(dict->getKey(i)); + GooString *keyNameToPrint = keyName.sanitizedName(gFalse /* non ps mode */); + outStr->printf("/%s ", keyNameToPrint->getCString()); + delete keyNameToPrint; + writeObject(dict->getValNF(i, &obj1), NULL, outStr, xRef, numOffset); + obj1.free(); + } + outStr->printf(">> "); +} + +void PDFDoc::writeStream (Stream* str, OutStream* outStr) +{ + outStr->printf("stream\r\n"); + str->reset(); + for (int c=str->getChar(); c!= EOF; c=str->getChar()) { + outStr->printf("%c", c); + } + outStr->printf("\r\nendstream\r\n"); +} + +void PDFDoc::writeRawStream (Stream* str, OutStream* outStr) +{ + Object obj1; + str->getDict()->lookup("Length", &obj1); + if (!obj1.isInt()) { + error (-1, "PDFDoc::writeRawStream, no Length in stream dict"); + return; + } + + const int length = obj1.getInt(); + obj1.free(); + + outStr->printf("stream\r\n"); + str->unfilteredReset(); + for (int i=0; i<length; i++) { + int c = str->getUnfilteredChar(); + outStr->printf("%c", c); + } + str->reset(); + outStr->printf("\r\nendstream\r\n"); +} + +void PDFDoc::writeString (GooString* s, OutStream* outStr) +{ + if (s->hasUnicodeMarker()) { + //unicode string don't necessary end with \0 + const char* c = s->getCString(); + outStr->printf("("); + for(int i=0; i<s->getLength(); i++) { + char unescaped = *(c+i)&0x000000ff; + //escape if needed + if (unescaped == '(' || unescaped == ')' || unescaped == '\\') + outStr->printf("%c", '\\'); + outStr->printf("%c", unescaped); + } + outStr->printf(") "); + } else { + const char* c = s->getCString(); + outStr->printf("("); + for(int i=0; i<s->getLength(); i++) { + char unescaped = *(c+i)&0x000000ff; + //escape if needed + if (unescaped == '\r') + outStr->printf("\\r"); + else if (unescaped == '\n') + outStr->printf("\\n"); + else { + if (unescaped == '(' || unescaped == ')' || unescaped == '\\') { + outStr->printf("%c", '\\'); + } + outStr->printf("%c", unescaped); + } + } + outStr->printf(") "); + } +} + +Guint PDFDoc::writeObject (Object* obj, Ref* ref, OutStream* outStr, XRef *xRef, Guint numOffset) +{ + Array *array; + Object obj1; + Guint offset = outStr->getPos(); + int tmp; + + if(ref) + outStr->printf("%i %i obj ", ref->num, ref->gen); + + switch (obj->getType()) { + case objBool: + outStr->printf("%s ", obj->getBool()?"true":"false"); + break; + case objInt: + outStr->printf("%i ", obj->getInt()); + break; + case objReal: + { + GooString s; + s.appendf("{0:.10g}", obj->getReal()); + outStr->printf("%s ", s.getCString()); + break; + } + case objString: + writeString(obj->getString(), outStr); + break; + case objName: + { + GooString name(obj->getName()); + GooString *nameToPrint = name.sanitizedName(gFalse /* non ps mode */); + outStr->printf("/%s ", nameToPrint->getCString()); + delete nameToPrint; + break; + } + case objNull: + outStr->printf( "null "); + break; + case objArray: + array = obj->getArray(); + outStr->printf("["); + for (int i=0; i<array->getLength(); i++) { + writeObject(array->getNF(i, &obj1), NULL,outStr, xRef, numOffset); + obj1.free(); + } + outStr->printf("] "); + break; + case objDict: + writeDictionnary (obj->getDict(),outStr, xRef, numOffset); + break; + case objStream: + { + //We can't modify stream with the current implementation (no write functions in Stream API) + // => the only type of streams which that have been modified are internal streams (=strWeird) + Stream *stream = obj->getStream(); + if (stream->getKind() == strWeird) { + //we write the stream unencoded => TODO: write stream encoder + stream->reset(); + //recalculate stream length + tmp = 0; + for (int c=stream->getChar(); c!=EOF; c=stream->getChar()) { + tmp++; + } + obj1.initInt(tmp); + stream->getDict()->set("Length", &obj1); + + //Remove Stream encoding + stream->getDict()->remove("Filter"); + stream->getDict()->remove("DecodeParms"); + + writeDictionnary (stream->getDict(),outStr, xRef, numOffset); + writeStream (stream,outStr); + obj1.free(); + } else { + //raw stream copy + FilterStream *fs = dynamic_cast<FilterStream*>(stream); + if (fs) { + BaseStream *bs = fs->getBaseStream(); + if (bs) { + Guint streamEnd; + if (xRef->getStreamEnd(bs->getStart(), &streamEnd)) { + Object val; + val.initInt(streamEnd - bs->getStart()); + stream->getDict()->set("Length", &val); + } + } + } + writeDictionnary (stream->getDict(), outStr, xRef, numOffset); + writeRawStream (stream, outStr); + } + break; + } + case objRef: + outStr->printf("%i %i R ", obj->getRef().num + numOffset, obj->getRef().gen); + break; + case objCmd: + outStr->printf("%s\n", obj->getCmd()); + break; + case objError: + outStr->printf("error\r\n"); + break; + case objEOF: + outStr->printf("eof\r\n"); + break; + case objNone: + outStr->printf("none\r\n"); + break; + default: + error(-1,"Unhandled objType : %i, please report a bug with a testcase\r\n", obj->getType()); + break; + } + if (ref) + outStr->printf("endobj\r\n"); + return offset; +} + +void PDFDoc::writeTrailer(Guint uxrefOffset, int uxrefSize, + OutStream* outStr, GBool incrUpdate, + Guint startxRef, Ref *root, XRef *xRef, const char *fileName, + Guint fileSize) +{ + Dict *trailerDict = new Dict(xRef); + Object obj1; + obj1.initInt(uxrefSize); + trailerDict->set("Size", &obj1); + obj1.free(); + + + //build a new ID, as recommended in the reference, uses: + // - current time + // - file name + // - file size + // - values of entry in information dictionnary + GooString message; + char buffer[256]; + sprintf(buffer, "%i", (int)time(NULL)); + message.append(buffer); + message.append(fileName); + + sprintf(buffer, "%i", fileSize); + message.append(buffer); + + //info dict -- only use text string + if (!xRef->getTrailerDict()->isNone() && xRef->getDocInfo(&obj1)->isDict()) { + for(int i=0; i<obj1.getDict()->getLength(); i++) { + Object obj2; + obj1.getDict()->getVal(i, &obj2); + if (obj2.isString()) { + message.append(obj2.getString()); + } + obj2.free(); + } + } + obj1.free(); + + //calculate md5 digest + Guchar digest[16]; + Decrypt::md5((Guchar*)message.getCString(), message.getLength(), digest); + obj1.initString(new GooString((const char*)digest, 16)); + + //create ID array + Object obj2,obj3,obj5; + obj2.initArray(xRef); + + if (incrUpdate) { + Object obj4; + //only update the second part of the array + xRef->getTrailerDict()->getDict()->lookup("ID", &obj4); + if (!obj4.isArray()) { + error(-1, "PDFDoc::writeTrailer original file's ID entry isn't an array. Trying to continue"); + } else { + //Get the first part of the ID + obj4.arrayGet(0,&obj3); + + obj2.arrayAdd(&obj3); + obj2.arrayAdd(&obj1); + trailerDict->set("ID", &obj2); + } + obj4.free(); + } else { + //new file => same values for the two identifiers + obj2.arrayAdd(&obj1); + obj1.initString(new GooString((const char*)digest, 16)); + obj2.arrayAdd(&obj1); + trailerDict->set("ID", &obj2); + } + + obj1.initRef(root->num, root->gen); + trailerDict->set("Root", &obj1); + + if (incrUpdate) { + obj1.initInt(startxRef); + trailerDict->set("Prev", &obj1); + } + + if (!xRef->getTrailerDict()->isNone()) { + xRef->getDocInfoNF(&obj5); + if (!obj5.isNull()) { + trailerDict->set("Info", &obj5); + } + } + + outStr->printf( "trailer\r\n"); + writeDictionnary(trailerDict, outStr, xRef, 0); + outStr->printf( "\r\nstartxref\r\n"); + outStr->printf( "%i\r\n", uxrefOffset); + outStr->printf( "%%%%EOF\r\n"); + + delete trailerDict; +} + +void PDFDoc::writeTrailer(Guint uxrefOffset, int uxrefSize, OutStream* outStr, GBool incrUpdate) +{ + char *fileNameA; + if (fileName) + fileNameA = fileName->getCString(); + else + fileNameA = "streamwithoutfilename.pdf"; + // file size + unsigned int fileSize = 0; + int c; + str->reset(); + while ((c = str->getChar()) != EOF) { + fileSize++; + } + str->close(); + Ref ref; + ref.num = getXRef()->getRootNum(); + ref.gen = getXRef()->getRootGen(); + writeTrailer(uxrefOffset, uxrefSize, outStr, incrUpdate, getStartXRef(), &ref, getXRef(), fileNameA, fileSize); +} + +void PDFDoc::writeHeader(OutStream *outStr, int major, int minor) +{ + outStr->printf("%%PDF-%d.%d\n", major, minor); + outStr->printf("%%\xE2\xE3\xCF\xD3\n"); +} + +void PDFDoc::markDictionnary (Dict* dict, XRef * xRef, XRef *countRef, Guint numOffset) +{ + Object obj1; + for (int i=0; i<dict->getLength(); i++) { + markObject(dict->getValNF(i, &obj1), xRef, countRef, numOffset); + obj1.free(); + } +} + +void PDFDoc::markObject (Object* obj, XRef *xRef, XRef *countRef, Guint numOffset) +{ + Array *array; + Object obj1; + + switch (obj->getType()) { + case objArray: + array = obj->getArray(); + for (int i=0; i<array->getLength(); i++) { + markObject(array->getNF(i, &obj1), xRef, countRef, numOffset); + obj1.free(); + } + break; + case objDict: + markDictionnary (obj->getDict(), xRef, countRef, numOffset); + break; + case objStream: + { + Stream *stream = obj->getStream(); + markDictionnary (stream->getDict(), xRef, countRef, numOffset); + } + break; + case objRef: + { + if (obj->getRef().num + (int) numOffset >= xRef->getNumObjects() || xRef->getEntry(obj->getRef().num + numOffset)->type == xrefEntryFree) { + if (getXRef()->getEntry(obj->getRef().num)->type == xrefEntryFree) { + return; // already marked as free => should be replaced + } + xRef->add(obj->getRef().num + numOffset, obj->getRef().gen, 0, gTrue); + if (getXRef()->getEntry(obj->getRef().num)->type == xrefEntryCompressed) { + xRef->getEntry(obj->getRef().num + numOffset)->type = xrefEntryCompressed; + } + } + if (obj->getRef().num + (int) numOffset >= countRef->getNumObjects() || + countRef->getEntry(obj->getRef().num + numOffset)->type == xrefEntryFree) + { + countRef->add(obj->getRef().num + numOffset, 1, 0, gTrue); + } else { + XRefEntry *entry = countRef->getEntry(obj->getRef().num + numOffset); + entry->gen++; + if (entry->gen > 9) + break; + } + Object obj1; + getXRef()->fetch(obj->getRef().num, obj->getRef().gen, &obj1); + markObject(&obj1, xRef, countRef, numOffset); + obj1.free(); + } + break; + default: + break; + } +} + +void PDFDoc::replacePageDict(int pageNo, int rotate, + PDFRectangle *mediaBox, + PDFRectangle *cropBox, Object *pageCTM) +{ + Ref *refPage = getCatalog()->getPageRef(pageNo); + Object page; + getXRef()->fetch(refPage->num, refPage->gen, &page); + Dict *pageDict = page.getDict(); + pageDict->remove("MediaBox"); + pageDict->remove("CropBox"); + pageDict->remove("ArtBox"); + pageDict->remove("BleedBox"); + pageDict->remove("TrimBox"); + pageDict->remove("Rotate"); + Object *mediaBoxObj = new Object(); + mediaBoxObj->initArray(getXRef()); + Object *murx = new Object(); + murx->initReal(mediaBox->x1); + Object *mury = new Object(); + mury->initReal(mediaBox->y1); + Object *mllx = new Object(); + mllx->initReal(mediaBox->x2); + Object *mlly = new Object(); + mlly->initReal(mediaBox->y2); + mediaBoxObj->arrayAdd(murx); + mediaBoxObj->arrayAdd(mury); + mediaBoxObj->arrayAdd(mllx); + mediaBoxObj->arrayAdd(mlly); + pageDict->add(copyString("MediaBox"), mediaBoxObj); + if (cropBox != NULL) { + Object *cropBoxObj = new Object(); + cropBoxObj->initArray(getXRef()); + Object *curx = new Object(); + curx->initReal(cropBox->x1); + Object *cury = new Object(); + cury->initReal(cropBox->y1); + Object *cllx = new Object(); + cllx->initReal(cropBox->x2); + Object *clly = new Object(); + clly->initReal(cropBox->y2); + cropBoxObj->arrayAdd(curx); + cropBoxObj->arrayAdd(cury); + cropBoxObj->arrayAdd(cllx); + cropBoxObj->arrayAdd(clly); + pageDict->add(copyString("CropBox"), cropBoxObj); + } + Object *rotateObj = new Object(); + rotateObj->initInt(rotate); + pageDict->add(copyString("Rotate"), rotateObj); + if (pageCTM != NULL) { + Object *contents = new Object(); + Ref cmRef = getXRef()->addIndirectObject(pageCTM); + Object *ref = new Object(); + ref->initRef(cmRef.num, cmRef.gen); + pageDict->lookupNF("Contents", contents); + Object *newContents = new Object(); + newContents->initArray(getXRef()); + if (contents->getType() == objRef) { + newContents->arrayAdd(ref); + newContents->arrayAdd(contents); + } else { + newContents->arrayAdd(ref); + for (int i = 0; i < contents->arrayGetLength(); i++) { + Object *contentEle = new Object(); + contents->arrayGetNF(i, contentEle); + newContents->arrayAdd(contentEle); + } + } + pageDict->remove("Contents"); + pageDict->add(copyString("Contents"), newContents); + } + getXRef()->setModifiedObject(&page, *refPage); + page.free(); +} + +void PDFDoc::markPageObjects(Dict *pageDict, XRef *xRef, XRef *countRef, Guint numOffset) +{ + for (int n = 0; n < pageDict->getLength(); n++) { + const char *key = pageDict->getKey(n); + Object value; pageDict->getValNF(n, &value); + if (strcmp(key, "Parent") != 0) { + markObject(&value, xRef, countRef, numOffset); + } + value.free(); + } +} + +Guint PDFDoc::writePageObjects(OutStream *outStr, XRef *xRef, Guint numOffset) +{ + Guint objectsCount = 0; //count the number of objects in the XRef(s) + + for (int n = numOffset; n < xRef->getNumObjects(); n++) { + if (xRef->getEntry(n)->type != xrefEntryFree) { + Object obj; + Ref ref; + ref.num = n; + ref.gen = xRef->getEntry(n)->gen; + objectsCount++; + getXRef()->fetch(ref.num - numOffset, ref.gen, &obj); + Guint offset = writeObject(&obj, &ref, outStr, xRef, numOffset); + xRef->add(ref.num, ref.gen, offset, gTrue); + obj.free(); + } + } + return objectsCount; +} + +#ifndef DISABLE_OUTLINE +Outline *PDFDoc::getOutline() +{ + if (!outline) { + // read outline + outline = new Outline(catalog->getOutline(), xref); + } + + return outline; +} +#endif + +PDFDoc *PDFDoc::ErrorPDFDoc(int errorCode, GooString *fileNameA) +{ + PDFDoc *doc = new PDFDoc(); + doc->errCode = errorCode; + doc->fileName = fileNameA; + + return doc; +} + +Guint PDFDoc::strToUnsigned(char *s) { + Guint x; + char *p; + int i; + + x = 0; + for (p = s, i = 0; *p && isdigit(*p) && i < 10; ++p, ++i) { + x = 10 * x + (*p - '0'); + } + return x; +} + +// Read the 'startxref' position. +Guint PDFDoc::getStartXRef() +{ + if (startXRefPos == ~(Guint)0) { + + if (isLinearized()) { + char buf[linearizationSearchSize+1]; + int c, n, i; + + str->setPos(0); + for (n = 0; n < linearizationSearchSize; ++n) { + if ((c = str->getChar()) == EOF) { + break; + } + buf[n] = c; + } + buf[n] = '\0'; + + // find end of first obj (linearization dictionary) + startXRefPos = 0; + for (i = 0; i < n; i++) { + if (!strncmp("endobj", &buf[i], 6)) { + i += 6; + //skip whitespace + while (buf[i] && Lexer::isSpace(buf[i])) ++i; + startXRefPos = i; + break; + } + } + } else { + char buf[xrefSearchSize+1]; + char *p; + int c, n, i; + + // read last xrefSearchSize bytes + str->setPos(xrefSearchSize, -1); + for (n = 0; n < xrefSearchSize; ++n) { + if ((c = str->getChar()) == EOF) { + break; + } + buf[n] = c; + } + buf[n] = '\0'; + + // find startxref + for (i = n - 9; i >= 0; --i) { + if (!strncmp(&buf[i], "startxref", 9)) { + break; + } + } + if (i < 0) { + startXRefPos = 0; + } else { + for (p = &buf[i+9]; isspace(*p); ++p) ; + startXRefPos = strToUnsigned(p); + } + } + + } + + return startXRefPos; +} + +Guint PDFDoc::getMainXRefEntriesOffset() +{ + Guint mainXRefEntriesOffset = 0; + + if (isLinearized()) { + mainXRefEntriesOffset = getLinearization()->getMainXRefEntriesOffset(); + } + + return mainXRefEntriesOffset; +} + +int PDFDoc::getNumPages() +{ + if (isLinearized()) { + int n; + if ((n = getLinearization()->getNumPages())) { + return n; + } + } + + return catalog->getNumPages(); +} + +Page *PDFDoc::parsePage(int page) +{ + Page *p = NULL; + Object obj; + Ref pageRef; + Dict *pageDict; + + pageRef.num = getHints()->getPageObjectNum(page); + if (!pageRef.num) { + error(-1, "Failed to get object num from hint tables for page %d", page); + return NULL; + } + + // check for bogus ref - this can happen in corrupted PDF files + if (pageRef.num < 0 || pageRef.num >= xref->getNumObjects()) { + error(-1, "Invalid object num (%d) for page %d", pageRef.num, page); + return NULL; + } + + pageRef.gen = xref->getEntry(pageRef.num)->gen; + xref->fetch(pageRef.num, pageRef.gen, &obj); + if (!obj.isDict("Page")) { + obj.free(); + error(-1, "Object (%d %d) is not a pageDict", pageRef.num, pageRef.gen); + return NULL; + } + pageDict = obj.getDict(); + + p = new Page(xref, page, pageDict, pageRef, + new PageAttrs(NULL, pageDict), catalog->getForm()); + obj.free(); + + return p; +} + +Page *PDFDoc::getPage(int page) +{ + if ((page < 1) || page > getNumPages()) return NULL; + + if (isLinearized()) { + if (!pageCache) { + pageCache = (Page **) gmallocn(getNumPages(), sizeof(Page *)); + for (int i = 0; i < getNumPages(); i++) { + pageCache[i] = NULL; + } + } + if (!pageCache[page-1]) { + pageCache[page-1] = parsePage(page); + } + if (pageCache[page-1]) { + return pageCache[page-1]; + } else { + error(-1, "Failed parsing page %d using hint tables", page); + } + } + + return catalog->getPage(page); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDoc.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDoc.h new file mode 100644 index 00000000000..92cee78c5f2 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDoc.h @@ -0,0 +1,308 @@ +//======================================================================== +// +// PDFDoc.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005, 2006, 2008 Brad Hards <bradh@frogmouth.net> +// Copyright (C) 2005, 2009 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2008 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2008 Pino Toscano <pino@kde.org> +// Copyright (C) 2008 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2009 Eric Toombs <ewtoombs@uwaterloo.ca> +// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> +// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2010 Srinivas Adicherla <srinivas.adicherla@geodesic.com> +// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef PDFDOC_H +#define PDFDOC_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include <stdio.h> +#include "XRef.h" +#include "Catalog.h" +#include "Page.h" +#include "Annot.h" +#include "OptionalContent.h" + +class GooString; +class BaseStream; +class OutputDev; +class Links; +class LinkAction; +class LinkDest; +class Outline; +class Linearization; +class SecurityHandler; +class Hints; + +enum PDFWriteMode { + writeStandard, + writeForceRewrite, + writeForceIncremental +}; + +//------------------------------------------------------------------------ +// PDFDoc +//------------------------------------------------------------------------ + +class PDFDoc { +public: + + PDFDoc(GooString *fileNameA, GooString *ownerPassword = NULL, + GooString *userPassword = NULL, void *guiDataA = NULL); + +#ifdef _WIN32 + PDFDoc(wchar_t *fileNameA, int fileNameLen, GooString *ownerPassword = NULL, + GooString *userPassword = NULL, void *guiDataA = NULL); +#endif + + PDFDoc(BaseStream *strA, GooString *ownerPassword = NULL, + GooString *userPassword = NULL, void *guiDataA = NULL); + ~PDFDoc(); + + static PDFDoc *ErrorPDFDoc(int errorCode, GooString *fileNameA = NULL); + + // Was PDF document successfully opened? + GBool isOk() { return ok; } + + // Get the error code (if isOk() returns false). + int getErrorCode() { return errCode; } + + // Get the error code returned by fopen() (if getErrorCode() == + // errOpenFile). + int getFopenErrno() { return fopenErrno; } + + // Get file name. + GooString *getFileName() { return fileName; } + + // Get the linearization table. + Linearization *getLinearization(); + + // Get the xref table. + XRef *getXRef() { return xref; } + + // Get catalog. + Catalog *getCatalog() { return catalog; } + + // Get optional content configuration + OCGs *getOptContentConfig() { return catalog->getOptContentConfig(); } + + // Get base stream. + BaseStream *getBaseStream() { return str; } + + // Get page parameters. + double getPageMediaWidth(int page) + { return getPage(page) ? getPage(page)->getMediaWidth() : 0.0 ; } + double getPageMediaHeight(int page) + { return getPage(page) ? getPage(page)->getMediaHeight() : 0.0 ; } + double getPageCropWidth(int page) + { return getPage(page) ? getPage(page)->getCropWidth() : 0.0 ; } + double getPageCropHeight(int page) + { return getPage(page) ? getPage(page)->getCropHeight() : 0.0 ; } + int getPageRotate(int page) + { return getPage(page) ? getPage(page)->getRotate() : 0 ; } + + // Get number of pages. + int getNumPages(); + + // Return the contents of the metadata stream, or NULL if there is + // no metadata. + GooString *readMetadata() { return catalog->readMetadata(); } + + // Return the structure tree root object. + Object *getStructTreeRoot() { return catalog->getStructTreeRoot(); } + + // Get page. + Page *getPage(int page); + + // Display a page. + void displayPage(OutputDev *out, int page, + double hDPI, double vDPI, int rotate, + GBool useMediaBox, GBool crop, GBool printing, + GBool (*abortCheckCbk)(void *data) = NULL, + void *abortCheckCbkData = NULL, + GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL, + void *annotDisplayDecideCbkData = NULL); + + // Display a range of pages. + void displayPages(OutputDev *out, int firstPage, int lastPage, + double hDPI, double vDPI, int rotate, + GBool useMediaBox, GBool crop, GBool printing, + GBool (*abortCheckCbk)(void *data) = NULL, + void *abortCheckCbkData = NULL, + GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL, + void *annotDisplayDecideCbkData = NULL); + + // Display part of a page. + void displayPageSlice(OutputDev *out, int page, + double hDPI, double vDPI, int rotate, + GBool useMediaBox, GBool crop, GBool printing, + int sliceX, int sliceY, int sliceW, int sliceH, + GBool (*abortCheckCbk)(void *data) = NULL, + void *abortCheckCbkData = NULL, + GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL, + void *annotDisplayDecideCbkData = NULL); + + // Find a page, given its object ID. Returns page number, or 0 if + // not found. + int findPage(int num, int gen) { return catalog->findPage(num, gen); } + + // Returns the links for the current page, transferring ownership to + // the caller. + Links *getLinks(int page); + + // Find a named destination. Returns the link destination, or + // NULL if <name> is not a destination. + LinkDest *findDest(GooString *name) + { return catalog->findDest(name); } + + // Process the links for a page. + void processLinks(OutputDev *out, int page); + + +#ifndef DISABLE_OUTLINE + // Return the outline object. + Outline *getOutline(); +#endif + + // Is the file encrypted? + GBool isEncrypted() { return xref->isEncrypted(); } + + // Check various permissions. + GBool okToPrint(GBool ignoreOwnerPW = gFalse) + { return xref->okToPrint(ignoreOwnerPW); } + GBool okToPrintHighRes(GBool ignoreOwnerPW = gFalse) + { return xref->okToPrintHighRes(ignoreOwnerPW); } + GBool okToChange(GBool ignoreOwnerPW = gFalse) + { return xref->okToChange(ignoreOwnerPW); } + GBool okToCopy(GBool ignoreOwnerPW = gFalse) + { return xref->okToCopy(ignoreOwnerPW); } + GBool okToAddNotes(GBool ignoreOwnerPW = gFalse) + { return xref->okToAddNotes(ignoreOwnerPW); } + GBool okToFillForm(GBool ignoreOwnerPW = gFalse) + { return xref->okToFillForm(ignoreOwnerPW); } + GBool okToAccessibility(GBool ignoreOwnerPW = gFalse) + { return xref->okToAccessibility(ignoreOwnerPW); } + GBool okToAssemble(GBool ignoreOwnerPW = gFalse) + { return xref->okToAssemble(ignoreOwnerPW); } + + + // Is this document linearized? + GBool isLinearized(); + + // Return the document's Info dictionary (if any). + Object *getDocInfo(Object *obj) { return xref->getDocInfo(obj); } + Object *getDocInfoNF(Object *obj) { return xref->getDocInfoNF(obj); } + + // Return the PDF version specified by the file. + int getPDFMajorVersion() { return pdfMajorVersion; } + int getPDFMinorVersion() { return pdfMinorVersion; } + + //Return the PDF ID in the trailer dictionary (if any). + GBool getID(GooString *permanent_id, GooString *update_id); + + // Save one page with another name. + int savePageAs(GooString *name, int pageNo); + // Save this file with another name. + int saveAs(GooString *name, PDFWriteMode mode=writeStandard); + // Save this file in the given output stream. + int saveAs(OutStream *outStr, PDFWriteMode mode=writeStandard); + // Save this file with another name without saving changes + int saveWithoutChangesAs(GooString *name); + // Save this file in the given output stream without saving changes + int saveWithoutChangesAs(OutStream *outStr); + + // Return a pointer to the GUI (XPDFCore or WinPDFCore object). + void *getGUIData() { return guiData; } + + // rewrite pageDict with MediaBox, CropBox and new page CTM + void replacePageDict(int pageNo, int rotate, PDFRectangle *mediaBox, PDFRectangle *cropBox, Object *pageCTM); + void markPageObjects(Dict *pageDict, XRef *xRef, XRef *countRef, Guint numOffset); + // write all objects used by pageDict to outStr + Guint writePageObjects(OutStream *outStr, XRef *xRef, Guint numOffset); + static Guint writeObject (Object *obj, Ref *ref, OutStream* outStr, XRef *xref, Guint numOffset); + static void writeHeader(OutStream *outStr, int major, int minor); + static void writeTrailer (Guint uxrefOffset, int uxrefSize, OutStream* outStr, GBool incrUpdate, + Guint startxRef, Ref *root, XRef *xRef, const char *fileName, Guint fileSize); + +private: + // insert referenced objects in XRef + void markDictionnary (Dict* dict, XRef *xRef, XRef *countRef, Guint numOffset); + void markObject (Object *obj, XRef *xRef, XRef *countRef, Guint numOffset); + static void writeDictionnary (Dict* dict, OutStream* outStr, XRef *xRef, Guint numOffset); + + // Add object to current file stream and return the offset of the beginning of the object + Guint writeObject (Object *obj, Ref *ref, OutStream* outStr) + { return writeObject(obj, ref, outStr, getXRef(), 0); } + void writeDictionnary (Dict* dict, OutStream* outStr) + { writeDictionnary(dict, outStr, getXRef(), 0); } + static void writeStream (Stream* str, OutStream* outStr); + static void writeRawStream (Stream* str, OutStream* outStr); + void writeTrailer (Guint uxrefOffset, int uxrefSize, OutStream* outStr, GBool incrUpdate); + static void writeString (GooString* s, OutStream* outStr); + void saveIncrementalUpdate (OutStream* outStr); + void saveCompleteRewrite (OutStream* outStr); + + Page *parsePage(int page); + + // Get hints. + Hints *getHints(); + + PDFDoc(); + void init(); + GBool setup(GooString *ownerPassword, GooString *userPassword); + GBool checkFooter(); + void checkHeader(); + GBool checkEncryption(GooString *ownerPassword, GooString *userPassword); + // Get the offset of the start xref table. + Guint getStartXRef(); + // Get the offset of the entries in the main XRef table of a + // linearized document (0 for non linearized documents). + Guint getMainXRefEntriesOffset(); + Guint strToUnsigned(char *s); + + GooString *fileName; + FILE *file; + BaseStream *str; + void *guiData; + int pdfMajorVersion; + int pdfMinorVersion; + Linearization *linearization; + XRef *xref; + SecurityHandler *secHdlr; + Catalog *catalog; + Hints *hints; +#ifndef DISABLE_OUTLINE + Outline *outline; +#endif + Page **pageCache; + + GBool ok; + int errCode; + //If there is an error opening the PDF file with fopen() in the constructor, + //then the POSIX errno will be here. + int fopenErrno; + + Guint startXRefPos; // offset of last xref table +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocBuilder.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocBuilder.h new file mode 100644 index 00000000000..d6eccf5487a --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocBuilder.h @@ -0,0 +1,42 @@ +//======================================================================== +// +// PDFDocBuilder.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#ifndef PDFDOCBUILDER_H +#define PDFDOCBUILDER_H + +#include "PDFDoc.h" +class GooString; + +//------------------------------------------------------------------------ +// PDFDocBuilder +// +// PDFDocBuilder is an abstract class that specifies the interface for +// constructing PDFDocs. +//------------------------------------------------------------------------ + +class PDFDocBuilder { + +public: + + virtual ~PDFDocBuilder() {}; + + // Builds a new PDFDoc. Returns a PDFDoc. You should check this PDFDoc + // with PDFDoc::isOk() for failures. + // The caller is responsible for deleting ownerPassword, userPassWord and guiData. + virtual PDFDoc *buildPDFDoc(const GooString &uri, GooString *ownerPassword = NULL, + GooString *userPassword = NULL, void *guiDataA = NULL) = 0; + + // Returns gTrue if the builder supports building a PDFDoc from the URI. + virtual GBool supports(const GooString &uri) = 0; + +}; + +#endif /* PDFDOCBUILDER_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocEncoding.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocEncoding.cc new file mode 100644 index 00000000000..628d3666d09 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocEncoding.cc @@ -0,0 +1,69 @@ +//======================================================================== +// +// PDFDocEncoding.cc +// +// Copyright 2002-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include "PDFDocEncoding.h" + +// Mapping of PDFDocEncoding (used to represent text values such as document +// metadata or annotation text) to Unicode codepoints. Not all 8-bit values in +// PDFDocEncoding are defined; undefined bytes are mapped to U+FFFD (Unicode +// replacement character). +// +// PDFDocEncoding is only directly defined for printable characters, but some +// control characters such as carriage return will still be used. We define +// mappings of the standard whitespace control characters (tabs, newlines) to +// the corresponding Unicode values. Other control characters are left +// undefined. + +Unicode pdfDocEncoding[256] = { + 0x0000, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, // 00 + 0xfffd, 0x0009, 0x000a, 0xfffd, 0x000c, 0x000d, 0xfffd, 0xfffd, + 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, // 10 + 0x02d8, 0x02c7, 0x02c6, 0x02d9, 0x02dd, 0x02db, 0x02da, 0x02dc, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, // 20 + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, // 30 + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, // 40 + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, // 50 + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, // 60 + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, // 70 + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0xfffd, + 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x0192, 0x2044, // 80 + 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, + 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x0141, 0x0152, 0x0160, // 90 + 0x0178, 0x017d, 0x0131, 0x0142, 0x0153, 0x0161, 0x017e, 0xfffd, + 0x20ac, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, // a0 + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0xfffd, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, // b0 + 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, // c0 + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, // d0 + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, // e0 + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, // f0 + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff +}; diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocEncoding.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocEncoding.h new file mode 100644 index 00000000000..4f0840bb28a --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocEncoding.h @@ -0,0 +1,34 @@ +//======================================================================== +// +// PDFDocEncoding.h +// +// Copyright 2002-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2007 Adrian Johnson <ajohnson@redneon.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef PDFDOCENCODING_H +#define PDFDOCENCODING_H + +#include "CharTypes.h" + +class GooString; + +extern Unicode pdfDocEncoding[256]; + +char* pdfDocEncodingToUTF16 (GooString* orig, int* length); + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocFactory.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocFactory.cc new file mode 100644 index 00000000000..7829b3e9958 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocFactory.cc @@ -0,0 +1,72 @@ +//======================================================================== +// +// PDFDocFactory.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#include <config.h> + +#include "PDFDocFactory.h" + +#include "goo/GooList.h" +#include "goo/GooString.h" +#include "PDFDoc.h" +#include "LocalPDFDocBuilder.h" +#include "StdinPDFDocBuilder.h" +#if ENABLE_LIBCURL +#include "CurlPDFDocBuilder.h" +#endif +#include "ErrorCodes.h" + +//------------------------------------------------------------------------ +// PDFDocFactory +//------------------------------------------------------------------------ + +PDFDocFactory::PDFDocFactory(GooList *pdfDocBuilders) +{ + if (pdfDocBuilders) { + builders = pdfDocBuilders; + } else { + builders = new GooList(); + } +#if ENABLE_LIBCURL + builders->insert(0, new CurlPDFDocBuilder()); +#endif + builders->insert(0, new StdinPDFDocBuilder()); + builders->insert(0, new LocalPDFDocBuilder()); +} + +PDFDocFactory::~PDFDocFactory() +{ + if (builders) { + deleteGooList(builders, PDFDocBuilder); + } +} + +PDFDoc * +PDFDocFactory::createPDFDoc(const GooString &uri, GooString *ownerPassword, + GooString *userPassword, void *guiDataA) +{ + for (int i = builders->getLength() - 1; i >= 0 ; i--) { + PDFDocBuilder *builder = (PDFDocBuilder *) builders->get(i); + if (builder->supports(uri)) { + return builder->buildPDFDoc(uri, ownerPassword, userPassword, guiDataA); + } + } + + error(-1, "Cannot handle URI '%s'.", uri.getCString()); + GooString *fileName = uri.copy(); + return PDFDoc::ErrorPDFDoc(errOpenFile, fileName); +} + +void PDFDocFactory::registerPDFDocBuilder(PDFDocBuilder *pdfDocBuilder) +{ + builders->append(pdfDocBuilder); +} + + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocFactory.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocFactory.h new file mode 100644 index 00000000000..dbceaa567ee --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PDFDocFactory.h @@ -0,0 +1,55 @@ +//======================================================================== +// +// PDFDocFactory.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#ifndef PDFDOCFACTORY_H +#define PDFDOCFACTORY_H + +#include "PDFDoc.h" + +class GooList; +class GooString; +class PDFDocBuilder; + +//------------------------------------------------------------------------ +// PDFDocFactory +// +// PDFDocFactory allows the construction of PDFDocs from different URIs. +// +// By default, it supports local files, 'file://' and 'fd:0' (stdin). When +// compiled with libcurl, it also supports 'http://' and 'https://'. +// +// You can extend the supported URIs by giving a list of PDFDocBuilders to +// the constructor, or by registering a new PDFDocBuilder afterwards. +//------------------------------------------------------------------------ + +class PDFDocFactory { + +public: + + PDFDocFactory(GooList *pdfDocBuilders = NULL); + ~PDFDocFactory(); + + // Create a PDFDoc. Returns a PDFDoc. You should check this PDFDoc + // with PDFDoc::isOk() for failures. + // The caller is responsible for deleting ownerPassword, userPassWord and guiData. + PDFDoc *createPDFDoc(const GooString &uri, GooString *ownerPassword = NULL, + GooString *userPassword = NULL, void *guiDataA = NULL); + + // Extend supported URIs with the ones from the PDFDocBuilder. + void registerPDFDocBuilder(PDFDocBuilder *pdfDocBuilder); + +private: + + GooList *builders; + +}; + +#endif /* PDFDOCFACTORY_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PSOutputDev.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/PSOutputDev.cc new file mode 100644 index 00000000000..8fd310734cd --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PSOutputDev.cc @@ -0,0 +1,7064 @@ +//======================================================================== +// +// PSOutputDev.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Martin Kretzschmar <martink@gnome.org> +// Copyright (C) 2005, 2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2006-2009, 2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2006 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2007, 2008 Brad Hards <bradh@kde.org> +// Copyright (C) 2008, 2009 Koji Otani <sho@bbr.jp> +// Copyright (C) 2008, 2010 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2009-2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2009 Till Kamppeter <till.kamppeter@gmail.com> +// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2009, 2011 William Bader <williambader@hotmail.com> +// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> +// Copyright (C) 2009-2011 Adrian Johnson <ajohnson@redneon.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdio.h> +#include <stddef.h> +#include <stdarg.h> +#include <signal.h> +#include <math.h> +#include <limits.h> +#include "goo/GooString.h" +#include "goo/GooList.h" +#include "poppler-config.h" +#include "GlobalParams.h" +#include "Object.h" +#include "Error.h" +#include "Function.h" +#include "Gfx.h" +#include "GfxState.h" +#include "GfxFont.h" +#include "UnicodeMap.h" +#include <fofi/FoFiType1C.h> +#include <fofi/FoFiTrueType.h> +#include "Catalog.h" +#include "Page.h" +#include "Stream.h" +#include "Annot.h" +#include "XRef.h" +#include "PreScanOutputDev.h" +#include "FileSpec.h" +#if HAVE_SPLASH +# include "splash/Splash.h" +# include "splash/SplashBitmap.h" +# include "SplashOutputDev.h" +#endif +#include "PSOutputDev.h" +#include "PDFDoc.h" + +#ifdef MACOS +// needed for setting type/creator of MacOS files +#include "ICSupport.h" +#endif + +// the MSVC math.h doesn't define this +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +//------------------------------------------------------------------------ + +// Resolution at which pages with transparency will be rasterized. +#define defaultSplashDPI 300 + +//------------------------------------------------------------------------ +// PostScript prolog and setup +//------------------------------------------------------------------------ + +// The '~' escapes mark prolog code that is emitted only in certain +// levels: +// +// ~[123][sn] +// ^ ^----- s=psLevel*Sep, n=psLevel* +// +----- 1=psLevel1*, 2=psLevel2*, 3=psLevel3* + +static char *prolog[] = { + "/xpdf 75 dict def xpdf begin", + "% PDF special state", + "/pdfDictSize 15 def", + "~1sn", + "/pdfStates 64 array def", + " 0 1 63 {", + " pdfStates exch pdfDictSize dict", + " dup /pdfStateIdx 3 index put", + " put", + " } for", + "~123sn", + "/pdfSetup {", + " 3 1 roll 2 array astore", + " /setpagedevice where {", + " pop 3 dict begin", + " /PageSize exch def", + " /ImagingBBox null def", + " /Policies 1 dict dup begin /PageSize 3 def end def", + " { /Duplex true def } if", + " currentdict end setpagedevice", + " } {", + " pop pop", + " } ifelse", + "} def", + "~1sn", + "/pdfOpNames [", + " /pdfFill /pdfStroke /pdfLastFill /pdfLastStroke", + " /pdfTextMat /pdfFontSize /pdfCharSpacing /pdfTextRender /pdfPatternCS", + " /pdfTextRise /pdfWordSpacing /pdfHorizScaling /pdfTextClipPath", + "] def", + "~123sn", + "/pdfStartPage {", + "~1sn", + " pdfStates 0 get begin", + "~23sn", + " pdfDictSize dict begin", + "~23n", + " /pdfFillCS [] def", + " /pdfFillXform {} def", + " /pdfStrokeCS [] def", + " /pdfStrokeXform {} def", + "~1n", + " /pdfFill 0 def", + " /pdfStroke 0 def", + "~1s", + " /pdfFill [0 0 0 1] def", + " /pdfStroke [0 0 0 1] def", + "~23sn", + " /pdfFill [0] def", + " /pdfStroke [0] def", + " /pdfFillOP false def", + " /pdfStrokeOP false def", + "~123sn", + " /pdfLastFill false def", + " /pdfLastStroke false def", + " /pdfTextMat [1 0 0 1 0 0] def", + " /pdfFontSize 0 def", + " /pdfCharSpacing 0 def", + " /pdfTextRender 0 def", + " /pdfPatternCS false def", + " /pdfTextRise 0 def", + " /pdfWordSpacing 0 def", + " /pdfHorizScaling 1 def", + " /pdfTextClipPath [] def", + "} def", + "/pdfEndPage { end } def", + "~23s", + "% separation convention operators", + "/findcmykcustomcolor where {", + " pop", + "}{", + " /findcmykcustomcolor { 5 array astore } def", + "} ifelse", + "/setcustomcolor where {", + " pop", + "}{", + " /setcustomcolor {", + " exch", + " [ exch /Separation exch dup 4 get exch /DeviceCMYK exch", + " 0 4 getinterval cvx", + " [ exch /dup load exch { mul exch dup } /forall load", + " /pop load dup ] cvx", + " ] setcolorspace setcolor", + " } def", + "} ifelse", + "/customcolorimage where {", + " pop", + "}{", + " /customcolorimage {", + " gsave", + " [ exch /Separation exch dup 4 get exch /DeviceCMYK exch", + " 0 4 getinterval", + " [ exch /dup load exch { mul exch dup } /forall load", + " /pop load dup ] cvx", + " ] setcolorspace", + " 10 dict begin", + " /ImageType 1 def", + " /DataSource exch def", + " /ImageMatrix exch def", + " /BitsPerComponent exch def", + " /Height exch def", + " /Width exch def", + " /Decode [1 0] def", + " currentdict end", + " image", + " grestore", + " } def", + "} ifelse", + "~123sn", + "% PDF color state", + "~1n", + "/g { dup /pdfFill exch def setgray", + " /pdfLastFill true def /pdfLastStroke false def } def", + "/G { dup /pdfStroke exch def setgray", + " /pdfLastStroke true def /pdfLastFill false def } def", + "/fCol {", + " pdfLastFill not {", + " pdfFill setgray", + " /pdfLastFill true def /pdfLastStroke false def", + " } if", + "} def", + "/sCol {", + " pdfLastStroke not {", + " pdfStroke setgray", + " /pdfLastStroke true def /pdfLastFill false def", + " } if", + "} def", + "~1s", + "/k { 4 copy 4 array astore /pdfFill exch def setcmykcolor", + " /pdfLastFill true def /pdfLastStroke false def } def", + "/K { 4 copy 4 array astore /pdfStroke exch def setcmykcolor", + " /pdfLastStroke true def /pdfLastFill false def } def", + "/fCol {", + " pdfLastFill not {", + " pdfFill aload pop setcmykcolor", + " /pdfLastFill true def /pdfLastStroke false def", + " } if", + "} def", + "/sCol {", + " pdfLastStroke not {", + " pdfStroke aload pop setcmykcolor", + " /pdfLastStroke true def /pdfLastFill false def", + " } if", + "} def", + "~23n", + "/cs { /pdfFillXform exch def dup /pdfFillCS exch def", + " setcolorspace } def", + "/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def", + " setcolorspace } def", + "/sc { pdfLastFill not { pdfFillCS setcolorspace } if", + " dup /pdfFill exch def aload pop pdfFillXform setcolor", + " /pdfLastFill true def /pdfLastStroke false def } def", + "/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if", + " dup /pdfStroke exch def aload pop pdfStrokeXform setcolor", + " /pdfLastStroke true def /pdfLastFill false def } def", + "/op { /pdfFillOP exch def", + " pdfLastFill { pdfFillOP setoverprint } if } def", + "/OP { /pdfStrokeOP exch def", + " pdfLastStroke { pdfStrokeOP setoverprint } if } def", + "/fCol {", + " pdfLastFill not {", + " pdfFillCS setcolorspace", + " pdfFill aload pop pdfFillXform setcolor", + " pdfFillOP setoverprint", + " /pdfLastFill true def /pdfLastStroke false def", + " } if", + "} def", + "/sCol {", + " pdfLastStroke not {", + " pdfStrokeCS setcolorspace", + " pdfStroke aload pop pdfStrokeXform setcolor", + " pdfStrokeOP setoverprint", + " /pdfLastStroke true def /pdfLastFill false def", + " } if", + "} def", + "~23s", + "/k { 4 copy 4 array astore /pdfFill exch def setcmykcolor", + " /pdfLastFill true def /pdfLastStroke false def } def", + "/K { 4 copy 4 array astore /pdfStroke exch def setcmykcolor", + " /pdfLastStroke true def /pdfLastFill false def } def", + "/ck { 6 copy 6 array astore /pdfFill exch def", + " findcmykcustomcolor exch setcustomcolor", + " /pdfLastFill true def /pdfLastStroke false def } def", + "/CK { 6 copy 6 array astore /pdfStroke exch def", + " findcmykcustomcolor exch setcustomcolor", + " /pdfLastStroke true def /pdfLastFill false def } def", + "/op { /pdfFillOP exch def", + " pdfLastFill { pdfFillOP setoverprint } if } def", + "/OP { /pdfStrokeOP exch def", + " pdfLastStroke { pdfStrokeOP setoverprint } if } def", + "/fCol {", + " pdfLastFill not {", + " pdfFill aload length 4 eq {", + " setcmykcolor", + " }{", + " findcmykcustomcolor exch setcustomcolor", + " } ifelse", + " pdfFillOP setoverprint", + " /pdfLastFill true def /pdfLastStroke false def", + " } if", + "} def", + "/sCol {", + " pdfLastStroke not {", + " pdfStroke aload length 4 eq {", + " setcmykcolor", + " }{", + " findcmykcustomcolor exch setcustomcolor", + " } ifelse", + " pdfStrokeOP setoverprint", + " /pdfLastStroke true def /pdfLastFill false def", + " } if", + "} def", + "~123sn", + "% build a font", + "/pdfMakeFont {", + " 4 3 roll findfont", + " 4 2 roll matrix scale makefont", + " dup length dict begin", + " { 1 index /FID ne { def } { pop pop } ifelse } forall", + " /Encoding exch def", + " currentdict", + " end", + " definefont pop", + "} def", + "/pdfMakeFont16 {", + " exch findfont", + " dup length dict begin", + " { 1 index /FID ne { def } { pop pop } ifelse } forall", + " /WMode exch def", + " currentdict", + " end", + " definefont pop", + "} def", + "~3sn", + "/pdfMakeFont16L3 {", + " 1 index /CIDFont resourcestatus {", + " pop pop 1 index /CIDFont findresource /CIDFontType known", + " } {", + " false", + " } ifelse", + " {", + " 0 eq { /Identity-H } { /Identity-V } ifelse", + " exch 1 array astore composefont pop", + " } {", + " pdfMakeFont16", + " } ifelse", + "} def", + "~123sn", + "% graphics state operators", + "~1sn", + "/q {", + " gsave", + " pdfOpNames length 1 sub -1 0 { pdfOpNames exch get load } for", + " pdfStates pdfStateIdx 1 add get begin", + " pdfOpNames { exch def } forall", + "} def", + "/Q { end grestore } def", + "~23sn", + "/q { gsave pdfDictSize dict begin } def", + "/Q {", + " end grestore", + " /pdfLastFill where {", + " pop", + " pdfLastFill {", + " pdfFillOP setoverprint", + " } {", + " pdfStrokeOP setoverprint", + " } ifelse", + " } if", + "} def", + "~123sn", + "/cm { concat } def", + "/d { setdash } def", + "/i { setflat } def", + "/j { setlinejoin } def", + "/J { setlinecap } def", + "/M { setmiterlimit } def", + "/w { setlinewidth } def", + "% path segment operators", + "/m { moveto } def", + "/l { lineto } def", + "/c { curveto } def", + "/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto", + " neg 0 rlineto closepath } def", + "/h { closepath } def", + "% path painting operators", + "/S { sCol stroke } def", + "/Sf { fCol stroke } def", + "/f { fCol fill } def", + "/f* { fCol eofill } def", + "% clipping operators", + "/W { clip newpath } def", + "/W* { eoclip newpath } def", + "/Ws { strokepath clip newpath } def", + "% text state operators", + "/Tc { /pdfCharSpacing exch def } def", + "/Tf { dup /pdfFontSize exch def", + " dup pdfHorizScaling mul exch matrix scale", + " pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put", + " exch findfont exch makefont setfont } def", + "/Tr { /pdfTextRender exch def } def", + "/Tp { /pdfPatternCS exch def } def", + "/Ts { /pdfTextRise exch def } def", + "/Tw { /pdfWordSpacing exch def } def", + "/Tz { /pdfHorizScaling exch def } def", + "% text positioning operators", + "/Td { pdfTextMat transform moveto } def", + "/Tm { /pdfTextMat exch def } def", + "% text string operators", + "/cshow where {", + " pop", + " /cshow2 {", + " dup {", + " pop pop", + " 1 string dup 0 3 index put 3 index exec", + " } exch cshow", + " pop pop", + " } def", + "}{", + " /cshow2 {", + " currentfont /FontType get 0 eq {", + " 0 2 2 index length 1 sub {", + " 2 copy get exch 1 add 2 index exch get", + " 2 copy exch 256 mul add", + " 2 string dup 0 6 5 roll put dup 1 5 4 roll put", + " 3 index exec", + " } for", + " } {", + " dup {", + " 1 string dup 0 3 index put 3 index exec", + " } forall", + " } ifelse", + " pop pop", + " } def", + "} ifelse", + "/awcp {", // awidthcharpath + " exch {", + " false charpath", + " 5 index 5 index rmoveto", + " 6 index eq { 7 index 7 index rmoveto } if", + " } exch cshow2", + " 6 {pop} repeat", + "} def", + "/Tj {", + " fCol", // because stringwidth has to draw Type 3 chars + " 1 index stringwidth pdfTextMat idtransform pop", + " sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse", + " pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32", + " 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0", + " pdfTextMat dtransform", + " 6 5 roll Tj1", + "} def", + "/Tj16 {", + " fCol", // because stringwidth has to draw Type 3 chars + " 2 index stringwidth pdfTextMat idtransform pop", + " sub exch div", + " pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32", + " 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0", + " pdfTextMat dtransform", + " 6 5 roll Tj1", + "} def", + "/Tj16V {", + " fCol", // because stringwidth has to draw Type 3 chars + " 2 index stringwidth pdfTextMat idtransform exch pop", + " sub exch div", + " 0 pdfWordSpacing pdfTextMat dtransform 32", + " 4 3 roll pdfCharSpacing add 0 exch", + " pdfTextMat dtransform", + " 6 5 roll Tj1", + "} def", + "/Tj1 {", + " 0 pdfTextRise pdfTextMat dtransform rmoveto", + " currentpoint 8 2 roll", + " pdfTextRender 1 and 0 eq pdfPatternCS not and {", + " 6 copy awidthshow", + " } if", + " pdfTextRender 3 and dup 1 eq exch 2 eq or {", + " 7 index 7 index moveto", + " 6 copy", + " currentfont /FontType get 3 eq { fCol } { sCol } ifelse", + " false awcp currentpoint stroke moveto", + " } if", + " pdfTextRender 4 and 0 ne pdfPatternCS or {", + " 8 6 roll moveto", + " false awcp", + " /pdfTextClipPath [ pdfTextClipPath aload pop", + " {/moveto cvx}", + " {/lineto cvx}", + " {/curveto cvx}", + " {/closepath cvx}", + " pathforall ] def", + " currentpoint newpath moveto", + " } {", + " 8 {pop} repeat", + " } ifelse", + " 0 pdfTextRise neg pdfTextMat dtransform rmoveto", + "} def", + "/TJm { pdfFontSize 0.001 mul mul neg 0", + " pdfTextMat dtransform rmoveto } def", + "/TJmV { pdfFontSize 0.001 mul mul neg 0 exch", + " pdfTextMat dtransform rmoveto } def", + "/Tclip { pdfTextClipPath cvx exec clip newpath", + " /pdfTextClipPath [] def } def", + "/Tclip* { pdfTextClipPath cvx exec eoclip newpath", + " /pdfTextClipPath [] def } def", + "~1ns", + "% Level 1 image operators", + "/pdfIm1 {", + " /pdfImBuf1 4 index string def", + " { currentfile pdfImBuf1 readhexstring pop } image", + "} def", + "/pdfIm1Bin {", + " /pdfImBuf1 4 index string def", + " { currentfile pdfImBuf1 readstring pop } image", + "} def", + "~1s", + "/pdfIm1Sep {", + " /pdfImBuf1 4 index string def", + " /pdfImBuf2 4 index string def", + " /pdfImBuf3 4 index string def", + " /pdfImBuf4 4 index string def", + " { currentfile pdfImBuf1 readhexstring pop }", + " { currentfile pdfImBuf2 readhexstring pop }", + " { currentfile pdfImBuf3 readhexstring pop }", + " { currentfile pdfImBuf4 readhexstring pop }", + " true 4 colorimage", + "} def", + "/pdfIm1SepBin {", + " /pdfImBuf1 4 index string def", + " /pdfImBuf2 4 index string def", + " /pdfImBuf3 4 index string def", + " /pdfImBuf4 4 index string def", + " { currentfile pdfImBuf1 readstring pop }", + " { currentfile pdfImBuf2 readstring pop }", + " { currentfile pdfImBuf3 readstring pop }", + " { currentfile pdfImBuf4 readstring pop }", + " true 4 colorimage", + "} def", + "~1ns", + "/pdfImM1 {", + " fCol /pdfImBuf1 4 index 7 add 8 idiv string def", + " { currentfile pdfImBuf1 readhexstring pop } imagemask", + "} def", + "/pdfImM1Bin {", + " fCol /pdfImBuf1 4 index 7 add 8 idiv string def", + " { currentfile pdfImBuf1 readstring pop } imagemask", + "} def", + "/pdfImM1a {", + " { 2 copy get exch 1 add exch } imagemask", + " pop pop", + "} def", + "~23sn", + "% Level 2 image operators", + "/pdfImBuf 100 string def", + "/pdfIm {", + " image", + " { currentfile pdfImBuf readline", + " not { pop exit } if", + " (%-EOD-) eq { exit } if } loop", + "} def", + "~23s", + "/pdfImSep {", + " findcmykcustomcolor exch", + " dup /Width get /pdfImBuf1 exch string def", + " dup /Decode get aload pop 1 index sub /pdfImDecodeRange exch def", + " /pdfImDecodeLow exch def", + " begin Width Height BitsPerComponent ImageMatrix DataSource end", + " /pdfImData exch def", + " { pdfImData pdfImBuf1 readstring pop", + " 0 1 2 index length 1 sub {", + " 1 index exch 2 copy get", + " pdfImDecodeRange mul 255 div pdfImDecodeLow add round cvi", + " 255 exch sub put", + " } for }", + " 6 5 roll customcolorimage", + " { currentfile pdfImBuf readline", + " not { pop exit } if", + " (%-EOD-) eq { exit } if } loop", + "} def", + "~23sn", + "/pdfImM {", + " fCol imagemask", + " { currentfile pdfImBuf readline", + " not { pop exit } if", + " (%-EOD-) eq { exit } if } loop", + "} def", + "~123sn", + "/pr { 2 index 2 index 3 2 roll putinterval 4 add } def", + "/pdfImClip {", + " gsave", + " 0 2 4 index length 1 sub {", + " dup 4 index exch 2 copy", + " get 5 index div put", + " 1 add 3 index exch 2 copy", + " get 3 index div put", + " } for", + " pop pop rectclip", + "} def", + "/pdfImClipEnd { grestore } def", + "~23sn", + "% shading operators", + "/colordelta {", + " false 0 1 3 index length 1 sub {", + " dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {", + " pop true", + " } if", + " } for", + " exch pop exch pop", + "} def", + "/funcCol { func n array astore } def", + "/funcSH {", + " dup 0 eq {", + " true", + " } {", + " dup 6 eq {", + " false", + " } {", + " 4 index 4 index funcCol dup", + " 6 index 4 index funcCol dup", + " 3 1 roll colordelta 3 1 roll", + " 5 index 5 index funcCol dup", + " 3 1 roll colordelta 3 1 roll", + " 6 index 8 index funcCol dup", + " 3 1 roll colordelta 3 1 roll", + " colordelta or or or", + " } ifelse", + " } ifelse", + " {", + " 1 add", + " 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch", + " 6 index 6 index 4 index 4 index 4 index funcSH", + " 2 index 6 index 6 index 4 index 4 index funcSH", + " 6 index 2 index 4 index 6 index 4 index funcSH", + " 5 3 roll 3 2 roll funcSH pop pop", + " } {", + " pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul", + "~23n", + " funcCol sc", + "~23s", + " funcCol aload pop k", + "~23sn", + " dup 4 index exch mat transform m", + " 3 index 3 index mat transform l", + " 1 index 3 index mat transform l", + " mat transform l pop pop h f*", + " } ifelse", + "} def", + "/axialCol {", + " dup 0 lt {", + " pop t0", + " } {", + " dup 1 gt {", + " pop t1", + " } {", + " dt mul t0 add", + " } ifelse", + " } ifelse", + " func n array astore", + "} def", + "/axialSH {", + " dup 0 eq {", + " true", + " } {", + " dup 8 eq {", + " false", + " } {", + " 2 index axialCol 2 index axialCol colordelta", + " } ifelse", + " } ifelse", + " {", + " 1 add 3 1 roll 2 copy add 0.5 mul", + " dup 4 3 roll exch 4 index axialSH", + " exch 3 2 roll axialSH", + " } {", + " pop 2 copy add 0.5 mul", + "~23n", + " axialCol sc", + "~23s", + " axialCol aload pop k", + "~23sn", + " exch dup dx mul x0 add exch dy mul y0 add", + " 3 2 roll dup dx mul x0 add exch dy mul y0 add", + " dx abs dy abs ge {", + " 2 copy yMin sub dy mul dx div add yMin m", + " yMax sub dy mul dx div add yMax l", + " 2 copy yMax sub dy mul dx div add yMax l", + " yMin sub dy mul dx div add yMin l", + " h f*", + " } {", + " exch 2 copy xMin sub dx mul dy div add xMin exch m", + " xMax sub dx mul dy div add xMax exch l", + " exch 2 copy xMax sub dx mul dy div add xMax exch l", + " xMin sub dx mul dy div add xMin exch l", + " h f*", + " } ifelse", + " } ifelse", + "} def", + "/radialCol {", + " dup t0 lt {", + " pop t0", + " } {", + " dup t1 gt {", + " pop t1", + " } if", + " } ifelse", + " func n array astore", + "} def", + "/radialSH {", + " dup 0 eq {", + " true", + " } {", + " dup 8 eq {", + " false", + " } {", + " 2 index dt mul t0 add radialCol", + " 2 index dt mul t0 add radialCol colordelta", + " } ifelse", + " } ifelse", + " {", + " 1 add 3 1 roll 2 copy add 0.5 mul", + " dup 4 3 roll exch 4 index radialSH", + " exch 3 2 roll radialSH", + " } {", + " pop 2 copy add 0.5 mul dt mul t0 add", + "~23n", + " radialCol sc", + "~23s", + " radialCol aload pop k", + "~23sn", + " encl {", + " exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add", + " 0 360 arc h", + " dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add", + " 360 0 arcn h f", + " } {", + " 2 copy", + " dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add", + " a1 a2 arcn", + " dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add", + " a2 a1 arcn h", + " dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add", + " a1 a2 arc", + " dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add", + " a2 a1 arc h f", + " } ifelse", + " } ifelse", + "} def", + "~123sn", + "end", + NULL +}; + +static char *cmapProlog[] = { + "/CIDInit /ProcSet findresource begin", + "10 dict begin", + " begincmap", + " /CMapType 1 def", + " /CMapName /Identity-H def", + " /CIDSystemInfo 3 dict dup begin", + " /Registry (Adobe) def", + " /Ordering (Identity) def", + " /Supplement 0 def", + " end def", + " 1 begincodespacerange", + " <0000> <ffff>", + " endcodespacerange", + " 0 usefont", + " 1 begincidrange", + " <0000> <ffff> 0", + " endcidrange", + " endcmap", + " currentdict CMapName exch /CMap defineresource pop", + "end", + "10 dict begin", + " begincmap", + " /CMapType 1 def", + " /CMapName /Identity-V def", + " /CIDSystemInfo 3 dict dup begin", + " /Registry (Adobe) def", + " /Ordering (Identity) def", + " /Supplement 0 def", + " end def", + " /WMode 1 def", + " 1 begincodespacerange", + " <0000> <ffff>", + " endcodespacerange", + " 0 usefont", + " 1 begincidrange", + " <0000> <ffff> 0", + " endcidrange", + " endcmap", + " currentdict CMapName exch /CMap defineresource pop", + "end", + "end", + NULL +}; + +//------------------------------------------------------------------------ +// Fonts +//------------------------------------------------------------------------ + +struct PSSubstFont { + char *psName; // PostScript name + double mWidth; // width of 'm' character +}; + +static const char *psFonts[] = { + "Courier", + "Courier-Bold", + "Courier-Oblique", + "Courier-BoldOblique", + "Helvetica", + "Helvetica-Bold", + "Helvetica-Oblique", + "Helvetica-BoldOblique", + "Symbol", + "Times-Roman", + "Times-Bold", + "Times-Italic", + "Times-BoldItalic", + "ZapfDingbats", + NULL +}; + +static const PSSubstFont psSubstFonts[] = { + {"Helvetica", 0.833}, + {"Helvetica-Oblique", 0.833}, + {"Helvetica-Bold", 0.889}, + {"Helvetica-BoldOblique", 0.889}, + {"Times-Roman", 0.788}, + {"Times-Italic", 0.722}, + {"Times-Bold", 0.833}, + {"Times-BoldItalic", 0.778}, + {"Courier", 0.600}, + {"Courier-Oblique", 0.600}, + {"Courier-Bold", 0.600}, + {"Courier-BoldOblique", 0.600} +}; + +// Info for 8-bit fonts +struct PSFont8Info { + Ref fontID; + Gushort *codeToGID; // code-to-GID mapping for TrueType fonts +}; + +// Encoding info for substitute 16-bit font +struct PSFont16Enc { + Ref fontID; + GooString *enc; +}; + +//------------------------------------------------------------------------ +// process colors +//------------------------------------------------------------------------ + +#define psProcessCyan 1 +#define psProcessMagenta 2 +#define psProcessYellow 4 +#define psProcessBlack 8 +#define psProcessCMYK 15 + +//------------------------------------------------------------------------ +// PSOutCustomColor +//------------------------------------------------------------------------ + +class PSOutCustomColor { +public: + + PSOutCustomColor(double cA, double mA, + double yA, double kA, GooString *nameA); + ~PSOutCustomColor(); + + double c, m, y, k; + GooString *name; + PSOutCustomColor *next; +}; + +PSOutCustomColor::PSOutCustomColor(double cA, double mA, + double yA, double kA, GooString *nameA) { + c = cA; + m = mA; + y = yA; + k = kA; + name = nameA; + next = NULL; +} + +PSOutCustomColor::~PSOutCustomColor() { + delete name; +} + +//------------------------------------------------------------------------ + +struct PSOutImgClipRect { + int x0, x1, y0, y1; +}; + +//------------------------------------------------------------------------ +// DeviceNRecoder +//------------------------------------------------------------------------ + +class DeviceNRecoder: public FilterStream { +public: + + DeviceNRecoder(Stream *strA, int widthA, int heightA, + GfxImageColorMap *colorMapA); + virtual ~DeviceNRecoder(); + virtual StreamKind getKind() { return strWeird; } + virtual void reset(); + virtual int getChar() + { return (bufIdx >= bufSize && !fillBuf()) ? EOF : buf[bufIdx++]; } + virtual int lookChar() + { return (bufIdx >= bufSize && !fillBuf()) ? EOF : buf[bufIdx]; } + virtual GooString *getPSFilter(int psLevel, char *indent) { return NULL; } + virtual GBool isBinary(GBool last = gTrue) { return gTrue; } + virtual GBool isEncoder() { return gTrue; } + +private: + + GBool fillBuf(); + + int width, height; + GfxImageColorMap *colorMap; + Function *func; + ImageStream *imgStr; + int buf[gfxColorMaxComps]; + int pixelIdx; + int bufIdx; + int bufSize; +}; + +DeviceNRecoder::DeviceNRecoder(Stream *strA, int widthA, int heightA, + GfxImageColorMap *colorMapA): + FilterStream(strA) { + width = widthA; + height = heightA; + colorMap = colorMapA; + imgStr = NULL; + pixelIdx = 0; + bufIdx = gfxColorMaxComps; + bufSize = ((GfxDeviceNColorSpace *)colorMap->getColorSpace())-> + getAlt()->getNComps(); + func = ((GfxDeviceNColorSpace *)colorMap->getColorSpace())-> + getTintTransformFunc(); +} + +DeviceNRecoder::~DeviceNRecoder() { + if (imgStr) { + delete imgStr; + } +} + +void DeviceNRecoder::reset() { + imgStr = new ImageStream(str, width, colorMap->getNumPixelComps(), + colorMap->getBits()); + imgStr->reset(); +} + +GBool DeviceNRecoder::fillBuf() { + Guchar pixBuf[gfxColorMaxComps]; + GfxColor color; + double x[gfxColorMaxComps], y[gfxColorMaxComps]; + int i; + + if (pixelIdx >= width * height) { + return gFalse; + } + imgStr->getPixel(pixBuf); + colorMap->getColor(pixBuf, &color); + for (i = 0; + i < ((GfxDeviceNColorSpace *)colorMap->getColorSpace())->getNComps(); + ++i) { + x[i] = colToDbl(color.c[i]); + } + func->transform(x, y); + for (i = 0; i < bufSize; ++i) { + buf[i] = (int)(y[i] * 255 + 0.5); + } + bufIdx = 0; + ++pixelIdx; + return gTrue; +} + +//------------------------------------------------------------------------ +// PSOutputDev +//------------------------------------------------------------------------ + +extern "C" { +typedef void (*SignalFunc)(int); +} + +static void outputToFile(void *stream, char *data, int len) { + fwrite(data, 1, len, (FILE *)stream); +} + +PSOutputDev::PSOutputDev(const char *fileName, PDFDoc *doc, XRef *xrefA, Catalog *catalog, + char *psTitle, + int firstPage, int lastPage, PSOutMode modeA, + int paperWidthA, int paperHeightA, GBool duplexA, + int imgLLXA, int imgLLYA, int imgURXA, int imgURYA, + GBool forceRasterizeA, + GBool manualCtrlA) { + FILE *f; + PSFileType fileTypeA; + + underlayCbk = NULL; + underlayCbkData = NULL; + overlayCbk = NULL; + overlayCbkData = NULL; + + fontIDs = NULL; + fontFileIDs = NULL; + fontFileNames = NULL; + font8Info = NULL; + font16Enc = NULL; + imgIDs = NULL; + formIDs = NULL; + xobjStack = NULL; + embFontList = NULL; + customColors = NULL; + haveTextClip = gFalse; + haveCSPattern = gFalse; + t3String = NULL; + + forceRasterize = forceRasterizeA; + + // open file or pipe + if (!strcmp(fileName, "-")) { + fileTypeA = psStdout; + f = stdout; + } else if (fileName[0] == '|') { + fileTypeA = psPipe; +#ifdef HAVE_POPEN +#ifndef _WIN32 + signal(SIGPIPE, (SignalFunc)SIG_IGN); +#endif + if (!(f = popen(fileName + 1, "w"))) { + error(-1, "Couldn't run print command '%s'", fileName); + ok = gFalse; + return; + } +#else + error(-1, "Print commands are not supported ('%s')", fileName); + ok = gFalse; + return; +#endif + } else { + fileTypeA = psFile; + if (!(f = fopen(fileName, "w"))) { + error(-1, "Couldn't open PostScript file '%s'", fileName); + ok = gFalse; + return; + } + } + + init(outputToFile, f, fileTypeA, psTitle, + doc, xrefA, catalog, firstPage, lastPage, modeA, + imgLLXA, imgLLYA, imgURXA, imgURYA, manualCtrlA, + paperWidthA, paperHeightA, duplexA); +} + +PSOutputDev::PSOutputDev(PSOutputFunc outputFuncA, void *outputStreamA, + char *psTitle, + PDFDoc *doc, + XRef *xrefA, Catalog *catalog, + int firstPage, int lastPage, PSOutMode modeA, + int paperWidthA, int paperHeightA, GBool duplexA, + int imgLLXA, int imgLLYA, int imgURXA, int imgURYA, + GBool forceRasterizeA, + GBool manualCtrlA) { + underlayCbk = NULL; + underlayCbkData = NULL; + overlayCbk = NULL; + overlayCbkData = NULL; + + fontIDs = NULL; + fontFileIDs = NULL; + fontFileNames = NULL; + font8Info = NULL; + font16Enc = NULL; + imgIDs = NULL; + formIDs = NULL; + xobjStack = NULL; + embFontList = NULL; + customColors = NULL; + haveTextClip = gFalse; + haveCSPattern = gFalse; + t3String = NULL; + + forceRasterize = forceRasterizeA; + + init(outputFuncA, outputStreamA, psGeneric, psTitle, + doc, xrefA, catalog, firstPage, lastPage, modeA, + imgLLXA, imgLLYA, imgURXA, imgURYA, manualCtrlA, + paperWidthA, paperHeightA, duplexA); +} + +void PSOutputDev::init(PSOutputFunc outputFuncA, void *outputStreamA, + PSFileType fileTypeA, char *pstitle, PDFDoc *doc, XRef *xrefA, Catalog *catalog, + int firstPage, int lastPage, PSOutMode modeA, + int imgLLXA, int imgLLYA, int imgURXA, int imgURYA, + GBool manualCtrlA, int paperWidthA, int paperHeightA, + GBool duplexA) { + PDFRectangle *box; + + // initialize + displayText = gTrue; + ok = gTrue; + outputFunc = outputFuncA; + outputStream = outputStreamA; + fileType = fileTypeA; + m_catalog = catalog; + xref = xrefA; + level = globalParams->getPSLevel(); + mode = modeA; + paperWidth = paperWidthA; + paperHeight = paperHeightA; + imgLLX = imgLLXA; + imgLLY = imgLLYA; + imgURX = imgURXA; + imgURY = imgURYA; + if (paperWidth < 0 || paperHeight < 0) { + Page *page; + if ((page = doc->getPage(firstPage))) { + paperWidth = (int)ceil(page->getMediaWidth()); + paperHeight = (int)ceil(page->getMediaHeight()); + } else { + error(-1, "Invalid page %d", firstPage); + paperWidth = 1; + paperHeight = 1; + } + } + substFonts = globalParams->getPSSubstFonts(); + preload = globalParams->getPSPreload(); + if (imgLLX == 0 && imgURX == 0 && imgLLY == 0 && imgURY == 0) { + imgLLX = imgLLY = 0; + imgURX = paperWidth; + imgURY = paperHeight; + } + if (imgLLX == 0 && imgURX == 0 && imgLLY == 0 && imgURY == 0) { + imgLLX = imgLLY = 0; + imgURX = paperWidth; + imgURY = paperHeight; + } + manualCtrl = manualCtrlA; + if (mode == psModeForm) { + lastPage = firstPage; + } + processColors = 0; + inType3Char = gFalse; + inUncoloredPattern = gFalse; + +#if OPI_SUPPORT + // initialize OPI nesting levels + opi13Nest = 0; + opi20Nest = 0; +#endif + + tx0 = ty0 = -1; + xScale0 = yScale0 = 0; + rotate0 = -1; + clipLLX0 = clipLLY0 = 0; + clipURX0 = clipURY0 = -1; + + // initialize fontIDs, fontFileIDs, and fontFileNames lists + fontIDSize = 64; + fontIDLen = 0; + fontIDs = (Ref *)gmallocn(fontIDSize, sizeof(Ref)); + fontFileIDSize = 64; + fontFileIDLen = 0; + fontFileIDs = (Ref *)gmallocn(fontFileIDSize, sizeof(Ref)); + fontFileNameSize = 64; + fontFileNameLen = 0; + fontFileNames = (GooString **)gmallocn(fontFileNameSize, sizeof(GooString *)); + psFileNames = (GooString **)gmallocn(fontFileNameSize, sizeof(GooString *)); + nextTrueTypeNum = 0; + font8InfoLen = 0; + font8InfoSize = 0; + font16EncLen = 0; + font16EncSize = 0; + imgIDLen = 0; + imgIDSize = 0; + formIDLen = 0; + formIDSize = 0; + + xobjStack = new GooList(); + numSaves = 0; + numTilingPatterns = 0; + nextFunc = 0; + + // initialize embedded font resource comment list + embFontList = new GooString(); + + if (!manualCtrl) { + Page *page; + // this check is needed in case the document has zero pages + if ((page = doc->getPage(firstPage))) { + writeHeader(firstPage, lastPage, + page->getMediaBox(), + page->getCropBox(), + page->getRotate(), + pstitle); + } else { + error(-1, "Invalid page %d", firstPage); + box = new PDFRectangle(0, 0, 1, 1); + writeHeader(firstPage, lastPage, box, box, 0, pstitle); + delete box; + } + if (mode != psModeForm) { + writePS("%%BeginProlog\n"); + } + writeXpdfProcset(); + if (mode != psModeForm) { + writePS("%%EndProlog\n"); + writePS("%%BeginSetup\n"); + } + writeDocSetup(doc, catalog, firstPage, lastPage, duplexA); + if (mode != psModeForm) { + writePS("%%EndSetup\n"); + } + } + + // initialize sequential page number + seqPage = 1; +} + +PSOutputDev::~PSOutputDev() { + PSOutCustomColor *cc; + int i; + + if (ok) { + if (!manualCtrl) { + writePS("%%Trailer\n"); + writeTrailer(); + if (mode != psModeForm) { + writePS("%%EOF\n"); + } + } + if (fileType == psFile) { +#ifdef MACOS + ICS_MapRefNumAndAssign((short)((FILE *)outputStream)->handle); +#endif + fclose((FILE *)outputStream); + } +#ifdef HAVE_POPEN + else if (fileType == psPipe) { + pclose((FILE *)outputStream); +#ifndef _WIN32 + signal(SIGPIPE, (SignalFunc)SIG_DFL); +#endif + } +#endif + } + if (embFontList) { + delete embFontList; + } + if (fontIDs) { + gfree(fontIDs); + } + if (fontFileIDs) { + gfree(fontFileIDs); + } + if (fontFileNames) { + for (i = 0; i < fontFileNameLen; ++i) { + delete fontFileNames[i]; + } + gfree(fontFileNames); + } + if (font8Info) { + for (i = 0; i < font8InfoLen; ++i) { + gfree(font8Info[i].codeToGID); + } + gfree(font8Info); + } + if (psFileNames) { + for (i = 0; i < fontFileNameLen; ++i) { + if (psFileNames[i]) + delete psFileNames[i]; + } + gfree(psFileNames); + } + if (font16Enc) { + for (i = 0; i < font16EncLen; ++i) { + delete font16Enc[i].enc; + } + gfree(font16Enc); + } + gfree(imgIDs); + gfree(formIDs); + if (xobjStack) { + delete xobjStack; + } + while (customColors) { + cc = customColors; + customColors = cc->next; + delete cc; + } +} + +void PSOutputDev::writeHeader(int firstPage, int lastPage, + PDFRectangle *mediaBox, PDFRectangle *cropBox, + int pageRotate, char *psTitle) { + double x1, y1, x2, y2; + Object info, obj1; + + switch (mode) { + case psModePSOrigPageSizes: + case psModePS: + writePS("%!PS-Adobe-3.0\n"); + break; + case psModeEPS: + writePS("%!PS-Adobe-3.0 EPSF-3.0\n"); + break; + case psModeForm: + writePS("%!PS-Adobe-3.0 Resource-Form\n"); + break; + } + writePSFmt("%Produced by poppler pdftops version: {0:s} (http://poppler.freedesktop.org)\n", PACKAGE_VERSION); + xref->getDocInfo(&info); + if (info.isDict() && info.dictLookup("Creator", &obj1)->isString()) { + writePS("%%Creator: "); + writePSTextLine(obj1.getString()); + } + obj1.free(); + info.free(); + if(psTitle) { + writePSFmt("%%Title: {0:s}\n", psTitle); + } + writePSFmt("%%LanguageLevel: {0:d}\n", + (level == psLevel1 || level == psLevel1Sep) ? 1 : + (level == psLevel2 || level == psLevel2Sep) ? 2 : 3); + if (level == psLevel1Sep || level == psLevel2Sep || level == psLevel3Sep) { + writePS("%%DocumentProcessColors: (atend)\n"); + writePS("%%DocumentCustomColors: (atend)\n"); + } + writePS("%%DocumentSuppliedResources: (atend)\n"); + if ((level == psLevel1 || level == psLevel1Sep) && globalParams->getPSBinary()) { + writePS("%%DocumentData: Binary\n"); + } + + switch (mode) { + case psModePSOrigPageSizes: + prevWidth = 0; + prevHeight = 0; + case psModePS: + writePSFmt("%%DocumentMedia: plain {0:d} {1:d} 0 () ()\n", + paperWidth, paperHeight); + writePSFmt("%%BoundingBox: 0 0 {0:d} {1:d}\n", paperWidth, paperHeight); + writePSFmt("%%Pages: {0:d}\n", lastPage - firstPage + 1); + writePS("%%EndComments\n"); + writePS("%%BeginDefaults\n"); + writePS("%%PageMedia: plain\n"); + writePS("%%EndDefaults\n"); + break; + case psModeEPS: + epsX1 = cropBox->x1; + epsY1 = cropBox->y1; + epsX2 = cropBox->x2; + epsY2 = cropBox->y2; + if (pageRotate == 0 || pageRotate == 180) { + x1 = epsX1; + y1 = epsY1; + x2 = epsX2; + y2 = epsY2; + } else { // pageRotate == 90 || pageRotate == 270 + x1 = 0; + y1 = 0; + x2 = epsY2 - epsY1; + y2 = epsX2 - epsX1; + } + writePSFmt("%%BoundingBox: {0:d} {1:d} {2:d} {3:d}\n", + (int)floor(x1), (int)floor(y1), (int)ceil(x2), (int)ceil(y2)); + if (floor(x1) != ceil(x1) || floor(y1) != ceil(y1) || + floor(x2) != ceil(x2) || floor(y2) != ceil(y2)) { + writePSFmt("%%HiResBoundingBox: {0:.6g} {1:.6g} {2:.6g} {3:.6g}\n", + x1, y1, x2, y2); + } + writePS("%%DocumentSuppliedResources: (atend)\n"); + writePS("%%EndComments\n"); + break; + case psModeForm: + writePS("%%EndComments\n"); + writePS("32 dict dup begin\n"); + writePSFmt("/BBox [{0:d} {1:d} {2:d} {3:d}] def\n", + (int)floor(mediaBox->x1), (int)floor(mediaBox->y1), + (int)ceil(mediaBox->x2), (int)ceil(mediaBox->y2)); + writePS("/FormType 1 def\n"); + writePS("/Matrix [1 0 0 1 0 0] def\n"); + break; + } +} + +void PSOutputDev::writeXpdfProcset() { + GBool lev1, lev2, lev3, sep, nonSep; + char **p; + char *q; + + writePSFmt("%%BeginResource: procset xpdf {0:s} 0\n", "3.00"); + writePSFmt("%%Copyright: {0:s}\n", xpdfCopyright); + lev1 = lev2 = lev3 = sep = nonSep = gTrue; + for (p = prolog; *p; ++p) { + if ((*p)[0] == '~') { + lev1 = lev2 = lev3 = sep = nonSep = gFalse; + for (q = *p + 1; *q; ++q) { + switch (*q) { + case '1': lev1 = gTrue; break; + case '2': lev2 = gTrue; break; + case '3': lev3 = gTrue; break; + case 's': sep = gTrue; break; + case 'n': nonSep = gTrue; break; + } + } + } else if ((level == psLevel1 && lev1 && nonSep) || + (level == psLevel1Sep && lev1 && sep) || + (level == psLevel2 && lev2 && nonSep) || + (level == psLevel2Sep && lev2 && sep) || + (level == psLevel3 && lev3 && nonSep) || + (level == psLevel3Sep && lev3 && sep)) { + writePSFmt("{0:s}\n", *p); + } + } + writePS("%%EndResource\n"); + + if (level >= psLevel3) { + for (p = cmapProlog; *p; ++p) { + writePSFmt("{0:s}\n", *p); + } + } +} + +void PSOutputDev::writeDocSetup(PDFDoc *doc, Catalog *catalog, + int firstPage, int lastPage, + GBool duplexA) { + Page *page; + Dict *resDict; + Annots *annots; + Object obj1, obj2; + int pg, i; + + if (mode == psModeForm) { + // swap the form and xpdf dicts + writePS("xpdf end begin dup begin\n"); + } else { + writePS("xpdf begin\n"); + } + for (pg = firstPage; pg <= lastPage; ++pg) { + page = doc->getPage(pg); + if (!page) { + error(-1, "Failed writing resources for page %d", pg); + continue; + } + if ((resDict = page->getResourceDict())) { + setupResources(resDict); + } + annots = new Annots(xref, catalog, page->getAnnots(&obj1)); + obj1.free(); + for (i = 0; i < annots->getNumAnnots(); ++i) { + if (annots->getAnnot(i)->getAppearance(&obj1)->isStream()) { + obj1.streamGetDict()->lookup("Resources", &obj2); + if (obj2.isDict()) { + setupResources(obj2.getDict()); + } + obj2.free(); + } + obj1.free(); + } + delete annots; + } + if (mode != psModeForm) { + if (mode != psModeEPS && !manualCtrl) { + writePSFmt("{0:d} {1:d} {2:s} pdfSetup\n", + paperWidth, paperHeight, duplexA ? "true" : "false"); + } +#if OPI_SUPPORT + if (globalParams->getPSOPI()) { + writePS("/opiMatrix matrix currentmatrix def\n"); + } +#endif + } +} + +void PSOutputDev::writePageTrailer() { + if (mode != psModeForm) { + writePS("pdfEndPage\n"); + } +} + +void PSOutputDev::writeTrailer() { + PSOutCustomColor *cc; + + if (mode == psModeForm) { + writePS("/Foo exch /Form defineresource pop\n"); + } else { + writePS("end\n"); + writePS("%%DocumentSuppliedResources:\n"); + writePS(embFontList->getCString()); + if (level == psLevel1Sep || level == psLevel2Sep || + level == psLevel3Sep) { + writePS("%%DocumentProcessColors:"); + if (processColors & psProcessCyan) { + writePS(" Cyan"); + } + if (processColors & psProcessMagenta) { + writePS(" Magenta"); + } + if (processColors & psProcessYellow) { + writePS(" Yellow"); + } + if (processColors & psProcessBlack) { + writePS(" Black"); + } + writePS("\n"); + writePS("%%DocumentCustomColors:"); + for (cc = customColors; cc; cc = cc->next) { + writePSFmt(" ({0:s})", cc->name->getCString()); + } + writePS("\n"); + writePS("%%CMYKCustomColor:\n"); + for (cc = customColors; cc; cc = cc->next) { + writePSFmt("%%+ {0:.4g} {1:.4g} {2:.4g} {3:.4g} ({4:t})\n", + cc->c, cc->m, cc->y, cc->k, cc->name); + } + } + } +} + +void PSOutputDev::setupResources(Dict *resDict) { + Object xObjDict, xObjRef, xObj, patDict, patRef, pat, resObj; + Ref ref0, ref1; + GBool skip; + int i, j; + + setupFonts(resDict); + setupImages(resDict); + setupForms(resDict); + + //----- recursively scan XObjects + resDict->lookup("XObject", &xObjDict); + if (xObjDict.isDict()) { + for (i = 0; i < xObjDict.dictGetLength(); ++i) { + + // avoid infinite recursion on XObjects + skip = gFalse; + if ((xObjDict.dictGetValNF(i, &xObjRef)->isRef())) { + ref0 = xObjRef.getRef(); + for (j = 0; j < xobjStack->getLength(); ++j) { + ref1 = *(Ref *)xobjStack->get(j); + if (ref1.num == ref0.num && ref1.gen == ref0.gen) { + skip = gTrue; + break; + } + } + if (!skip) { + xobjStack->append(&ref0); + } + } + if (!skip) { + + // process the XObject's resource dictionary + xObjDict.dictGetVal(i, &xObj); + if (xObj.isStream()) { + xObj.streamGetDict()->lookup("Resources", &resObj); + if (resObj.isDict()) { + setupResources(resObj.getDict()); + } + resObj.free(); + } + xObj.free(); + } + + if (xObjRef.isRef() && !skip) { + xobjStack->del(xobjStack->getLength() - 1); + } + xObjRef.free(); + } + } + xObjDict.free(); + + //----- recursively scan Patterns + resDict->lookup("Pattern", &patDict); + if (patDict.isDict()) { + inType3Char = gTrue; + for (i = 0; i < patDict.dictGetLength(); ++i) { + + // avoid infinite recursion on Patterns + skip = gFalse; + if ((patDict.dictGetValNF(i, &patRef)->isRef())) { + ref0 = patRef.getRef(); + for (j = 0; j < xobjStack->getLength(); ++j) { + ref1 = *(Ref *)xobjStack->get(j); + if (ref1.num == ref0.num && ref1.gen == ref0.gen) { + skip = gTrue; + break; + } + } + if (!skip) { + xobjStack->append(&ref0); + } + } + if (!skip) { + + // process the Pattern's resource dictionary + patDict.dictGetVal(i, &pat); + if (pat.isStream()) { + pat.streamGetDict()->lookup("Resources", &resObj); + if (resObj.isDict()) { + setupResources(resObj.getDict()); + } + resObj.free(); + } + pat.free(); + } + + if (patRef.isRef() && !skip) { + xobjStack->del(xobjStack->getLength() - 1); + } + patRef.free(); + } + inType3Char = gFalse; + } + patDict.free(); +} + +void PSOutputDev::setupFonts(Dict *resDict) { + Object obj1, obj2; + Ref r; + GfxFontDict *gfxFontDict; + GfxFont *font; + int i; + + if (forceRasterize) return; + + gfxFontDict = NULL; + resDict->lookupNF("Font", &obj1); + if (obj1.isRef()) { + obj1.fetch(xref, &obj2); + if (obj2.isDict()) { + r = obj1.getRef(); + gfxFontDict = new GfxFontDict(xref, &r, obj2.getDict()); + } + obj2.free(); + } else if (obj1.isDict()) { + gfxFontDict = new GfxFontDict(xref, NULL, obj1.getDict()); + } + if (gfxFontDict) { + for (i = 0; i < gfxFontDict->getNumFonts(); ++i) { + if ((font = gfxFontDict->getFont(i))) { + setupFont(font, resDict); + } + } + delete gfxFontDict; + } + obj1.free(); +} + +void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) { + Ref fontFileID; + GooString *name; + PSFontParam *fontParam; + GooString *psName; + char buf[16]; + GBool subst; + UnicodeMap *uMap; + char *charName; + double xs, ys; + int code; + double w1, w2; + double *fm; + int i, j; + DisplayFontParam *dfp; + + // check if font is already set up + for (i = 0; i < fontIDLen; ++i) { + if (fontIDs[i].num == font->getID()->num && + fontIDs[i].gen == font->getID()->gen) { + return; + } + } + + // add entry to fontIDs list + if (fontIDLen >= fontIDSize) { + fontIDSize += 64; + fontIDs = (Ref *)greallocn(fontIDs, fontIDSize, sizeof(Ref)); + } + fontIDs[fontIDLen++] = *font->getID(); + + xs = ys = 1; + subst = gFalse; + + // check for resident 8-bit font + if (font->getName() && + (fontParam = globalParams->getPSFont(font->getName()))) { + psName = new GooString(fontParam->psFontName->getCString()); + + // check for embedded Type 1 font + } else if (globalParams->getPSEmbedType1() && + font->getType() == fontType1 && + font->getEmbeddedFontID(&fontFileID) && + font->getEmbeddedFontName()) { + psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); + setupEmbeddedType1Font(&fontFileID, psName); + + // check for embedded Type 1C font + } else if (globalParams->getPSEmbedType1() && + font->getType() == fontType1C && + font->getEmbeddedFontID(&fontFileID) && + font->getOrigName()) { + // use the PDF font name because the embedded font name might + // not include the subset prefix + psName = font->getOrigName()->sanitizedName(gTrue /* ps mode */); + setupEmbeddedType1CFont(font, &fontFileID, psName); + + // check for embedded OpenType - Type 1C font + } else if (globalParams->getPSEmbedType1() && + font->getType() == fontType1COT && + font->getEmbeddedFontID(&fontFileID) && + font->getOrigName()) { + // use the PDF font name because the embedded font name might + // not include the subset prefix + psName = font->getOrigName()->sanitizedName(gTrue /* ps mode */); + setupEmbeddedOpenTypeT1CFont(font, &fontFileID, psName); + + // check for external Type 1 font file + } else if (globalParams->getPSEmbedType1() && + font->getType() == fontType1 && + font->getExtFontFile() && + font->getName()) { + // this assumes that the PS font name matches the PDF font name + psName = font->getName()->copy(); + setupExternalType1Font(font->getExtFontFile(), psName); + + // check for embedded TrueType font + } else if (globalParams->getPSEmbedTrueType() && + (font->getType() == fontTrueType || + font->getType() == fontTrueTypeOT) && + font->getEmbeddedFontID(&fontFileID) && + font->getEmbeddedFontName()) { + psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); + setupEmbeddedTrueTypeFont(font, &fontFileID, psName); + + // check for external TrueType font file + } else if (globalParams->getPSEmbedTrueType() && + font->getType() == fontTrueType && + font->getExtFontFile()) { + psName = setupExternalTrueTypeFont(font); + + // check for embedded CID PostScript font + } else if (globalParams->getPSEmbedCIDPostScript() && + font->getType() == fontCIDType0C && + font->getEmbeddedFontID(&fontFileID) && + font->getEmbeddedFontName()) { + psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); + setupEmbeddedCIDType0Font(font, &fontFileID, psName); + + // check for embedded CID TrueType font + } else if (globalParams->getPSEmbedCIDTrueType() && + (font->getType() == fontCIDType2 || + font->getType() == fontCIDType2OT) && + font->getEmbeddedFontID(&fontFileID) && + font->getEmbeddedFontName()) { + psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); + setupEmbeddedCIDTrueTypeFont(font, &fontFileID, psName, gTrue); + + // check for embedded OpenType - CID CFF font + } else if (globalParams->getPSEmbedCIDPostScript() && + font->getType() == fontCIDType0COT && + font->getEmbeddedFontID(&fontFileID) && + font->getEmbeddedFontName()) { + psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); + setupEmbeddedOpenTypeCFFFont(font, &fontFileID, psName); + + // check for Type 3 font + } else if (font->getType() == fontType3) { + psName = GooString::format("T3_{0:d}_{1:d}", + font->getID()->num, font->getID()->gen); + setupType3Font(font, psName, parentResDict); + + // check for external CID TrueType font file + } else if (globalParams->getPSEmbedCIDTrueType() && + font->getType() == fontCIDType2 && + font->getExtFontFile()) { + psName = setupExternalCIDTrueTypeFont(font, font->getExtFontFile()); + + // do 8-bit font substitution + } else if (!font->isCIDFont()) { + subst = gTrue; + name = font->getName(); + psName = NULL; + if (name) { + for (i = 0; psFonts[i]; ++i) { + if (name->cmp(psFonts[i]) == 0) { + psName = new GooString(psFonts[i]); + break; + } + } + } + if (!psName) { + if (substFonts) { + if (font->isFixedWidth()) { + i = 8; + } else if (font->isSerif()) { + i = 4; + } else { + i = 0; + } + if (font->isBold()) { + i += 2; + } + if (font->isItalic()) { + i += 1; + } + psName = new GooString(psSubstFonts[i].psName); + for (code = 0; code < 256; ++code) { + if ((charName = ((Gfx8BitFont *)font)->getCharName(code)) && + charName[0] == 'm' && charName[1] == '\0') { + break; + } + } + if (code < 256) { + w1 = ((Gfx8BitFont *)font)->getWidth(code); + } else { + w1 = 0; + } + w2 = psSubstFonts[i].mWidth; + xs = w1 / w2; + if (xs < 0.1) { + xs = 1; + } + } else { + psName = new GooString(name); + xs = 1; + } + if (font->getType() == fontType3) { + // This is a hack which makes it possible to substitute for some + // Type 3 fonts. The problem is that it's impossible to know what + // the base coordinate system used in the font is without actually + // rendering the font. + ys = xs; + fm = font->getFontMatrix(); + if (fm[0] != 0) { + ys *= fm[3] / fm[0]; + } + } else { + ys = 1; + } + } + + // do 16-bit font substitution + } else if ((fontParam = globalParams-> + getPSFont16(font->getName(), + ((GfxCIDFont *)font)->getCollection(), + font->getWMode()))) { + subst = gTrue; + psName = fontParam->psFontName->copy(); + if (font16EncLen >= font16EncSize) { + font16EncSize += 16; + font16Enc = (PSFont16Enc *)greallocn(font16Enc, + font16EncSize, sizeof(PSFont16Enc)); + } + font16Enc[font16EncLen].fontID = *font->getID(); + font16Enc[font16EncLen].enc = fontParam->encoding->copy(); + if ((uMap = globalParams->getUnicodeMap(font16Enc[font16EncLen].enc))) { + uMap->decRefCnt(); + ++font16EncLen; + } else { + error(-1, "Couldn't find Unicode map for 16-bit font encoding '%s'", + font16Enc[font16EncLen].enc->getCString()); + } + + // try the display font for embedding + } else if (globalParams->getPSEmbedCIDTrueType() && + ((GfxCIDFont *)font)->getCollection() && + (dfp = globalParams-> + getDisplayFont(font)) && + dfp->kind == displayFontTT) { + psName = setupExternalCIDTrueTypeFont(font, dfp->tt.fileName, dfp->tt.faceIndex); + + // give up - can't do anything with this font + } else { + error(-1, "Couldn't find a font to substitute for '%s' ('%s' character collection)", + font->getName() ? font->getName()->getCString() : "(unnamed)", + ((GfxCIDFont *)font)->getCollection() + ? ((GfxCIDFont *)font)->getCollection()->getCString() + : "(unknown)"); + return; + } + + // generate PostScript code to set up the font + if (font->isCIDFont()) { + if (level == psLevel3 || level == psLevel3Sep) { + writePSFmt("/F{0:d}_{1:d} /{2:t} {3:d} pdfMakeFont16L3\n", + font->getID()->num, font->getID()->gen, psName, + font->getWMode()); + } else { + writePSFmt("/F{0:d}_{1:d} /{2:t} {3:d} pdfMakeFont16\n", + font->getID()->num, font->getID()->gen, psName, + font->getWMode()); + } + } else { + writePSFmt("/F{0:d}_{1:d} /{2:t} {3:.6g} {4:.6g}\n", + font->getID()->num, font->getID()->gen, psName, xs, ys); + for (i = 0; i < 256; i += 8) { + writePS((char *)((i == 0) ? "[ " : " ")); + for (j = 0; j < 8; ++j) { + if (font->getType() == fontTrueType && + !subst && + !((Gfx8BitFont *)font)->getHasEncoding()) { + sprintf(buf, "c%02x", i+j); + charName = buf; + } else { + charName = ((Gfx8BitFont *)font)->getCharName(i+j); + // this is a kludge for broken PDF files that encode char 32 + // as .notdef + if (i+j == 32 && charName && !strcmp(charName, ".notdef")) { + charName = "space"; + } + } + writePS("/"); + writePSName(charName ? charName : (char *)".notdef"); + // the empty name is legal in PDF and PostScript, but PostScript + // uses a double-slash (//...) for "immediately evaluated names", + // so we need to add a space character here + if (charName && !charName[0]) { + writePS(" "); + } + } + writePS((i == 256-8) ? (char *)"]\n" : (char *)"\n"); + } + writePS("pdfMakeFont\n"); + } + + delete psName; +} + +void PSOutputDev::setupEmbeddedType1Font(Ref *id, GooString *psName) { + static const char hexChar[17] = "0123456789abcdef"; + Object refObj, strObj, obj1, obj2, obj3; + Dict *dict; + int length1, length2, length3; + int c; + int start[4]; + GBool binMode; + GBool writePadding = gTrue; + int i; + + // check if font is already embedded + for (i = 0; i < fontFileIDLen; ++i) { + if (fontFileIDs[i].num == id->num && + fontFileIDs[i].gen == id->gen) + return; + } + + // add entry to fontFileIDs list + if (fontFileIDLen >= fontFileIDSize) { + fontFileIDSize += 64; + fontFileIDs = (Ref *)greallocn(fontFileIDs, fontFileIDSize, sizeof(Ref)); + } + fontFileIDs[fontFileIDLen++] = *id; + + // get the font stream and info + refObj.initRef(id->num, id->gen); + refObj.fetch(xref, &strObj); + refObj.free(); + if (!strObj.isStream()) { + error(-1, "Embedded font file object is not a stream"); + goto err1; + } + if (!(dict = strObj.streamGetDict())) { + error(-1, "Embedded font stream is missing its dictionary"); + goto err1; + } + dict->lookup("Length1", &obj1); + dict->lookup("Length2", &obj2); + dict->lookup("Length3", &obj3); + if (!obj1.isInt() || !obj2.isInt() || !obj3.isInt()) { + error(-1, "Missing length fields in embedded font stream dictionary"); + obj1.free(); + obj2.free(); + obj3.free(); + goto err1; + } + length1 = obj1.getInt(); + length2 = obj2.getInt(); + length3 = obj3.getInt(); + obj1.free(); + obj2.free(); + obj3.free(); + + // beginning comment + writePSFmt("%%BeginResource: font {0:t}\n", psName); + embFontList->append("%%+ font "); + embFontList->append(psName->getCString()); + embFontList->append("\n"); + + // copy ASCII portion of font + strObj.streamReset(); + for (i = 0; i < length1 && (c = strObj.streamGetChar()) != EOF; ++i) { + writePSChar(c); + } + + // figure out if encrypted portion is binary or ASCII + binMode = gFalse; + for (i = 0; i < 4; ++i) { + start[i] = strObj.streamGetChar(); + if (start[i] == EOF) { + error(-1, "Unexpected end of file in embedded font stream"); + goto err1; + } + if (!((start[i] >= '0' && start[i] <= '9') || + (start[i] >= 'A' && start[i] <= 'F') || + (start[i] >= 'a' && start[i] <= 'f'))) + binMode = gTrue; + } + + if (length2 == 0) + { + // length2 == 0 is an error + // trying to solve it by just piping all + // the stream data + error(-1, "Font has length2 as 0, trying to overcome the problem reading the stream until the end"); + length2 = INT_MAX; + writePadding = gFalse; + } + + + // convert binary data to ASCII + if (binMode) { + for (i = 0; i < 4; ++i) { + writePSChar(hexChar[(start[i] >> 4) & 0x0f]); + writePSChar(hexChar[start[i] & 0x0f]); + } +#if 0 // this causes trouble for various PostScript printers + // if Length2 is incorrect (too small), font data gets chopped, so + // we take a few extra characters from the trailer just in case + length2 += length3 >= 8 ? 8 : length3; +#endif + while (i < length2) { + if ((c = strObj.streamGetChar()) == EOF) { + break; + } + writePSChar(hexChar[(c >> 4) & 0x0f]); + writePSChar(hexChar[c & 0x0f]); + if (++i % 32 == 0) { + writePSChar('\n'); + } + } + if (i % 32 > 0) { + writePSChar('\n'); + } + + // already in ASCII format -- just copy it + } else { + for (i = 0; i < 4; ++i) { + writePSChar(start[i]); + } + for (i = 4; i < length2; ++i) { + if ((c = strObj.streamGetChar()) == EOF) { + break; + } + writePSChar(c); + } + } + + if (writePadding) + { + if (length3 > 0) { + // write fixed-content portion + while ((c = strObj.streamGetChar()) != EOF) { + writePSChar(c); + } + } else { + // write padding and "cleartomark" + for (i = 0; i < 8; ++i) { + writePS("00000000000000000000000000000000" + "00000000000000000000000000000000\n"); + } + writePS("cleartomark\n"); + } + } + + // ending comment + writePS("%%EndResource\n"); + + err1: + strObj.streamClose(); + strObj.free(); +} + +//~ This doesn't handle .pfb files or binary eexec data (which only +//~ happens in pfb files?). +void PSOutputDev::setupExternalType1Font(GooString *fileName, GooString *psName) { + FILE *fontFile; + int c; + int i; + + // check if font is already embedded + for (i = 0; i < fontFileNameLen; ++i) { + if (!fontFileNames[i]->cmp(fileName)) { + return; + } + } + + // add entry to fontFileNames list + if (fontFileNameLen >= fontFileNameSize) { + fontFileNameSize += 64; + fontFileNames = (GooString **)greallocn(fontFileNames, + fontFileNameSize, sizeof(GooString *)); + psFileNames = (GooString **)greallocn(psFileNames, + fontFileNameSize, sizeof(GooString *)); + } + fontFileNames[fontFileNameLen] = fileName->copy(); + psFileNames[fontFileNameLen] = psName->copy(); + fontFileNameLen++; + + // beginning comment + writePSFmt("%%BeginResource: font {0:t}\n", psName); + embFontList->append("%%+ font "); + embFontList->append(psName->getCString()); + embFontList->append("\n"); + + // copy the font file + if (!(fontFile = fopen(fileName->getCString(), "rb"))) { + error(-1, "Couldn't open external font file"); + return; + } + while ((c = fgetc(fontFile)) != EOF) { + writePSChar(c); + } + fclose(fontFile); + + // ending comment + writePS("%%EndResource\n"); +} + +void PSOutputDev::setupEmbeddedType1CFont(GfxFont *font, Ref *id, + GooString *psName) { + char *fontBuf; + int fontLen; + FoFiType1C *ffT1C; + int i; + + // check if font is already embedded + for (i = 0; i < fontFileIDLen; ++i) { + if (fontFileIDs[i].num == id->num && + fontFileIDs[i].gen == id->gen) + return; + } + + // add entry to fontFileIDs list + if (fontFileIDLen >= fontFileIDSize) { + fontFileIDSize += 64; + fontFileIDs = (Ref *)greallocn(fontFileIDs, fontFileIDSize, sizeof(Ref)); + } + fontFileIDs[fontFileIDLen++] = *id; + + // beginning comment + writePSFmt("%%BeginResource: font {0:t}\n", psName); + embFontList->append("%%+ font "); + embFontList->append(psName->getCString()); + embFontList->append("\n"); + + // convert it to a Type 1 font + fontBuf = font->readEmbFontFile(xref, &fontLen); + if ((ffT1C = FoFiType1C::make(fontBuf, fontLen))) { + ffT1C->convertToType1(psName->getCString(), NULL, gTrue, + outputFunc, outputStream); + delete ffT1C; + } + gfree(fontBuf); + + // ending comment + writePS("%%EndResource\n"); +} + +void PSOutputDev::setupEmbeddedOpenTypeT1CFont(GfxFont *font, Ref *id, + GooString *psName) { + char *fontBuf; + int fontLen; + FoFiTrueType *ffTT; + int i; + + // check if font is already embedded + for (i = 0; i < fontFileIDLen; ++i) { + if (fontFileIDs[i].num == id->num && + fontFileIDs[i].gen == id->gen) + return; + } + + // add entry to fontFileIDs list + if (fontFileIDLen >= fontFileIDSize) { + fontFileIDSize += 64; + fontFileIDs = (Ref *)greallocn(fontFileIDs, fontFileIDSize, sizeof(Ref)); + } + fontFileIDs[fontFileIDLen++] = *id; + + // beginning comment + writePSFmt("%%BeginResource: font {0:t}\n", psName); + embFontList->append("%%+ font "); + embFontList->append(psName->getCString()); + embFontList->append("\n"); + + // convert it to a Type 1 font + fontBuf = font->readEmbFontFile(xref, &fontLen); + if ((ffTT = FoFiTrueType::make(fontBuf, fontLen))) { + if (ffTT->isOpenTypeCFF()) { + ffTT->convertToType1(psName->getCString(), NULL, gTrue, + outputFunc, outputStream); + } + delete ffTT; + } + gfree(fontBuf); + + // ending comment + writePS("%%EndResource\n"); +} + +void PSOutputDev::setupEmbeddedTrueTypeFont(GfxFont *font, Ref *id, + GooString *psName) { + char *fontBuf; + int fontLen; + FoFiTrueType *ffTT; + Gushort *codeToGID; + int i; + + // check if font is already embedded + for (i = 0; i < fontFileIDLen; ++i) { + if (fontFileIDs[i].num == id->num && + fontFileIDs[i].gen == id->gen) { + psName->appendf("_{0:d}", nextTrueTypeNum++); + break; + } + } + + // add entry to fontFileIDs list + if (i == fontFileIDLen) { + if (fontFileIDLen >= fontFileIDSize) { + fontFileIDSize += 64; + fontFileIDs = (Ref *)greallocn(fontFileIDs, fontFileIDSize, sizeof(Ref)); + } + fontFileIDs[fontFileIDLen++] = *id; + } + + // beginning comment + writePSFmt("%%BeginResource: font {0:t}\n", psName); + embFontList->append("%%+ font "); + embFontList->append(psName->getCString()); + embFontList->append("\n"); + + // convert it to a Type 42 font + fontBuf = font->readEmbFontFile(xref, &fontLen); + if ((ffTT = FoFiTrueType::make(fontBuf, fontLen))) { + codeToGID = ((Gfx8BitFont *)font)->getCodeToGIDMap(ffTT); + ffTT->convertToType42(psName->getCString(), + ((Gfx8BitFont *)font)->getHasEncoding() + ? ((Gfx8BitFont *)font)->getEncoding() + : (char **)NULL, + codeToGID, outputFunc, outputStream); + if (codeToGID) { + if (font8InfoLen >= font8InfoSize) { + font8InfoSize += 16; + font8Info = (PSFont8Info *)greallocn(font8Info, + font8InfoSize, + sizeof(PSFont8Info)); + } + font8Info[font8InfoLen].fontID = *font->getID(); + font8Info[font8InfoLen].codeToGID = codeToGID; + ++font8InfoLen; + } + delete ffTT; + } + gfree(fontBuf); + + // ending comment + writePS("%%EndResource\n"); +} + +GooString *PSOutputDev::setupExternalTrueTypeFont(GfxFont *font) { + GooString *fileName; + char *fontBuf; + int fontLen; + FoFiTrueType *ffTT; + Gushort *codeToGID; + GooString *psName; + int i; + + // check if font is already embedded + fileName = font->getExtFontFile(); + for (i = 0; i < fontFileNameLen; ++i) { + if (!fontFileNames[i]->cmp(fileName)) { + return psFileNames[i]->copy(); + } + } + + psName = font->getName()->sanitizedName(gTrue /* ps mode */); + // add entry to fontFileNames list + if (i == fontFileNameLen) { + if (fontFileNameLen >= fontFileNameSize) { + fontFileNameSize += 64; + fontFileNames = + (GooString **)greallocn(fontFileNames, + fontFileNameSize, sizeof(GooString *)); + psFileNames = + (GooString **)greallocn(psFileNames, + fontFileNameSize, sizeof(GooString *)); + } + fontFileNames[fontFileNameLen] = fileName->copy(); + psFileNames[fontFileNameLen] = psName->copy(); + fontFileNameLen++; + } + + // beginning comment + writePSFmt("%%BeginResource: font {0:t}\n", psName); + embFontList->append("%%+ font "); + embFontList->append(psName->getCString()); + embFontList->append("\n"); + + // convert it to a Type 42 font + fontBuf = font->readExtFontFile(&fontLen); + if ((ffTT = FoFiTrueType::make(fontBuf, fontLen))) { + codeToGID = ((Gfx8BitFont *)font)->getCodeToGIDMap(ffTT); + ffTT->convertToType42(psName->getCString(), + ((Gfx8BitFont *)font)->getHasEncoding() + ? ((Gfx8BitFont *)font)->getEncoding() + : (char **)NULL, + codeToGID, outputFunc, outputStream); + if (codeToGID) { + if (font8InfoLen >= font8InfoSize) { + font8InfoSize += 16; + font8Info = (PSFont8Info *)greallocn(font8Info, + font8InfoSize, + sizeof(PSFont8Info)); + } + font8Info[font8InfoLen].fontID = *font->getID(); + font8Info[font8InfoLen].codeToGID = codeToGID; + ++font8InfoLen; + } + delete ffTT; + } + gfree(fontBuf); + + // ending comment + writePS("%%EndResource\n"); + return psName; +} + +GooString *PSOutputDev::setupExternalCIDTrueTypeFont(GfxFont *font, GooString *fileName, int faceIndex) { + FoFiTrueType *ffTT; + Gushort *codeToGID; + GooString *psName; + int i; + GooString *myFileName; + + myFileName = fileName->copy(); + if (faceIndex > 0) { + char tmp[32]; + sprintf(tmp, ",%d", faceIndex); + myFileName->append(tmp); + } + // check if font is already embedded + for (i = 0; i < fontFileNameLen; ++i) { + if (!fontFileNames[i]->cmp(myFileName)) { + delete myFileName; + return psFileNames[i]->copy(); + } + } + + psName = font->getName()->sanitizedName(gTrue /* ps mode */); + // add entry to fontFileNames list + if (i == fontFileNameLen) { + if (fontFileNameLen >= fontFileNameSize) { + fontFileNameSize += 64; + fontFileNames = + (GooString **)grealloc(fontFileNames, + fontFileNameSize * sizeof(GooString *)); + psFileNames = + (GooString **)grealloc(psFileNames, + fontFileNameSize * sizeof(GooString *)); + } + } + fontFileNames[fontFileNameLen] = myFileName; + psFileNames[fontFileNameLen] = psName->copy(); + fontFileNameLen++; + + // beginning comment + writePSFmt("%%BeginResource: font {0:t}\n", psName); + embFontList->append("%%+ font "); + embFontList->append(psName->getCString()); + embFontList->append("\n"); + + // convert it to a CID type2 font + if ((ffTT = FoFiTrueType::load(fileName->getCString(), faceIndex))) { + int n = ((GfxCIDFont *)font)->getCIDToGIDLen(); + if (n) { + codeToGID = (Gushort *)gmallocn(n, sizeof(Gushort)); + memcpy(codeToGID, ((GfxCIDFont *)font)->getCIDToGID(), n * sizeof(Gushort)); + } else { + codeToGID = ((GfxCIDFont *)font)->getCodeToGIDMap(ffTT, &n); + } + if (globalParams->getPSLevel() >= psLevel3) { + // Level 3: use a CID font + ffTT->convertToCIDType2(psName->getCString(), + codeToGID, n, gTrue, + outputFunc, outputStream); + } else { + // otherwise: use a non-CID composite font + ffTT->convertToType0(psName->getCString(), + codeToGID, n, gTrue, + outputFunc, outputStream); + } + gfree(codeToGID); + delete ffTT; + } + + // ending comment + writePS("%%EndResource\n"); + return psName; +} + +void PSOutputDev::setupEmbeddedCIDType0Font(GfxFont *font, Ref *id, + GooString *psName) { + char *fontBuf; + int fontLen; + FoFiType1C *ffT1C; + int i; + + // check if font is already embedded + for (i = 0; i < fontFileIDLen; ++i) { + if (fontFileIDs[i].num == id->num && + fontFileIDs[i].gen == id->gen) + return; + } + + // add entry to fontFileIDs list + if (fontFileIDLen >= fontFileIDSize) { + fontFileIDSize += 64; + fontFileIDs = (Ref *)greallocn(fontFileIDs, fontFileIDSize, sizeof(Ref)); + } + fontFileIDs[fontFileIDLen++] = *id; + + // beginning comment + writePSFmt("%%BeginResource: font {0:t}\n", psName); + embFontList->append("%%+ font "); + embFontList->append(psName->getCString()); + embFontList->append("\n"); + + // convert it to a Type 0 font + fontBuf = font->readEmbFontFile(xref, &fontLen); + if ((ffT1C = FoFiType1C::make(fontBuf, fontLen))) { + if (globalParams->getPSLevel() >= psLevel3) { + // Level 3: use a CID font + ffT1C->convertToCIDType0(psName->getCString(), outputFunc, outputStream); + } else { + // otherwise: use a non-CID composite font + ffT1C->convertToType0(psName->getCString(), outputFunc, outputStream); + } + delete ffT1C; + } + gfree(fontBuf); + + // ending comment + writePS("%%EndResource\n"); +} + +void PSOutputDev::setupEmbeddedCIDTrueTypeFont(GfxFont *font, Ref *id, + GooString *psName, + GBool needVerticalMetrics) { + char *fontBuf; + int fontLen; + FoFiTrueType *ffTT; + int i; + + // check if font is already embedded + for (i = 0; i < fontFileIDLen; ++i) { + if (fontFileIDs[i].num == id->num && + fontFileIDs[i].gen == id->gen) { + psName->appendf("_{0:d}", nextTrueTypeNum++); + break; + } + } + + // add entry to fontFileIDs list + if (fontFileIDLen >= fontFileIDSize) { + fontFileIDSize += 64; + fontFileIDs = (Ref *)greallocn(fontFileIDs, fontFileIDSize, sizeof(Ref)); + } + fontFileIDs[fontFileIDLen++] = *id; + + // beginning comment + writePSFmt("%%BeginResource: font {0:t}\n", psName); + embFontList->append("%%+ font "); + embFontList->append(psName->getCString()); + embFontList->append("\n"); + + // convert it to a Type 0 font + fontBuf = font->readEmbFontFile(xref, &fontLen); + if ((ffTT = FoFiTrueType::make(fontBuf, fontLen))) { + if (globalParams->getPSLevel() >= psLevel3) { + // Level 3: use a CID font + ffTT->convertToCIDType2(psName->getCString(), + ((GfxCIDFont *)font)->getCIDToGID(), + ((GfxCIDFont *)font)->getCIDToGIDLen(), + needVerticalMetrics, + outputFunc, outputStream); + } else { + // otherwise: use a non-CID composite font + ffTT->convertToType0(psName->getCString(), + ((GfxCIDFont *)font)->getCIDToGID(), + ((GfxCIDFont *)font)->getCIDToGIDLen(), + needVerticalMetrics, + outputFunc, outputStream); + } + delete ffTT; + } + gfree(fontBuf); + + // ending comment + writePS("%%EndResource\n"); +} + +void PSOutputDev::setupEmbeddedOpenTypeCFFFont(GfxFont *font, Ref *id, + GooString *psName) { + char *fontBuf; + int fontLen; + FoFiTrueType *ffTT; + int i; + + // check if font is already embedded + for (i = 0; i < fontFileIDLen; ++i) { + if (fontFileIDs[i].num == id->num && + fontFileIDs[i].gen == id->gen) + return; + } + + // add entry to fontFileIDs list + if (fontFileIDLen >= fontFileIDSize) { + fontFileIDSize += 64; + fontFileIDs = (Ref *)greallocn(fontFileIDs, fontFileIDSize, sizeof(Ref)); + } + fontFileIDs[fontFileIDLen++] = *id; + + // beginning comment + writePSFmt("%%BeginResource: font {0:t}\n", psName); + embFontList->append("%%+ font "); + embFontList->append(psName->getCString()); + embFontList->append("\n"); + + // convert it to a Type 0 font + fontBuf = font->readEmbFontFile(xref, &fontLen); + if ((ffTT = FoFiTrueType::make(fontBuf, fontLen))) { + if (ffTT->isOpenTypeCFF()) { + if (globalParams->getPSLevel() >= psLevel3) { + // Level 3: use a CID font + ffTT->convertToCIDType0(psName->getCString(), + outputFunc, outputStream); + } else { + // otherwise: use a non-CID composite font + ffTT->convertToType0(psName->getCString(), outputFunc, outputStream); + } + } + delete ffTT; + } + gfree(fontBuf); + + // ending comment + writePS("%%EndResource\n"); +} + +void PSOutputDev::setupType3Font(GfxFont *font, GooString *psName, + Dict *parentResDict) { + Dict *resDict; + Dict *charProcs; + Object charProc; + Gfx *gfx; + PDFRectangle box; + double *m; + GooString *buf; + int i; + + // set up resources used by font + if ((resDict = ((Gfx8BitFont *)font)->getResources())) { + inType3Char = gTrue; + setupResources(resDict); + inType3Char = gFalse; + } else { + resDict = parentResDict; + } + + // beginning comment + writePSFmt("%%BeginResource: font {0:t}\n", psName); + embFontList->append("%%+ font "); + embFontList->append(psName->getCString()); + embFontList->append("\n"); + + // font dictionary + writePS("8 dict begin\n"); + writePS("/FontType 3 def\n"); + m = font->getFontMatrix(); + writePSFmt("/FontMatrix [{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] def\n", + m[0], m[1], m[2], m[3], m[4], m[5]); + m = font->getFontBBox(); + writePSFmt("/FontBBox [{0:.6g} {1:.6g} {2:.6g} {3:.6g}] def\n", + m[0], m[1], m[2], m[3]); + writePS("/Encoding 256 array def\n"); + writePS(" 0 1 255 { Encoding exch /.notdef put } for\n"); + writePS("/BuildGlyph {\n"); + writePS(" exch /CharProcs get exch\n"); + writePS(" 2 copy known not { pop /.notdef } if\n"); + writePS(" get exec\n"); + writePS("} bind def\n"); + writePS("/BuildChar {\n"); + writePS(" 1 index /Encoding get exch get\n"); + writePS(" 1 index /BuildGlyph get exec\n"); + writePS("} bind def\n"); + if ((charProcs = ((Gfx8BitFont *)font)->getCharProcs())) { + writePSFmt("/CharProcs {0:d} dict def\n", charProcs->getLength()); + writePS("CharProcs begin\n"); + box.x1 = m[0]; + box.y1 = m[1]; + box.x2 = m[2]; + box.y2 = m[3]; + gfx = new Gfx(xref, this, resDict, m_catalog, &box, NULL); + inType3Char = gTrue; + for (i = 0; i < charProcs->getLength(); ++i) { + t3Cacheable = gFalse; + t3NeedsRestore = gFalse; + writePS("/"); + writePSName(charProcs->getKey(i)); + writePS(" {\n"); + gfx->display(charProcs->getVal(i, &charProc)); + charProc.free(); + if (t3String) { + if (t3Cacheable) { + buf = GooString::format("{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g} setcachedevice\n", + t3WX, t3WY, t3LLX, t3LLY, t3URX, t3URY); + } else { + buf = GooString::format("{0:.6g} {1:.6g} setcharwidth\n", t3WX, t3WY); + } + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + (*outputFunc)(outputStream, t3String->getCString(), + t3String->getLength()); + delete t3String; + t3String = NULL; + } + if (t3NeedsRestore) { + (*outputFunc)(outputStream, "Q\n", 2); + } + writePS("} def\n"); + } + inType3Char = gFalse; + delete gfx; + writePS("end\n"); + } + writePS("currentdict end\n"); + writePSFmt("/{0:t} exch definefont pop\n", psName); + + // ending comment + writePS("%%EndResource\n"); +} + +void PSOutputDev::setupImages(Dict *resDict) { + Object xObjDict, xObj, xObjRef, subtypeObj; + int i; + + if (!(mode == psModeForm || inType3Char || preload)) { + return; + } + + //----- recursively scan XObjects + resDict->lookup("XObject", &xObjDict); + if (xObjDict.isDict()) { + for (i = 0; i < xObjDict.dictGetLength(); ++i) { + xObjDict.dictGetValNF(i, &xObjRef); + xObjDict.dictGetVal(i, &xObj); + if (xObj.isStream()) { + xObj.streamGetDict()->lookup("Subtype", &subtypeObj); + if (subtypeObj.isName("Image")) { + if (xObjRef.isRef()) { + setupImage(xObjRef.getRef(), xObj.getStream()); + } else { + error(-1, "Image in resource dict is not an indirect reference"); + } + } + subtypeObj.free(); + } + xObj.free(); + xObjRef.free(); + } + } + xObjDict.free(); +} + +void PSOutputDev::setupImage(Ref id, Stream *str) { + GBool useRLE, useCompressed, useASCIIHex; + GooString *s; + int c; + int size, line, col, i; + int outerSize, outer; + + // check if image is already setup + for (i = 0; i < imgIDLen; ++i) { + if (imgIDs[i].num == id.num && imgIDs[i].gen == id.gen) { + return; + } + } + + // add entry to imgIDs list + if (imgIDLen >= imgIDSize) { + if (imgIDSize == 0) { + imgIDSize = 64; + } else { + imgIDSize *= 2; + } + imgIDs = (Ref *)greallocn(imgIDs, imgIDSize, sizeof(Ref)); + } + imgIDs[imgIDLen++] = id; + + // filters + //~ this does not correctly handle the DeviceN color space + //~ -- need to use DeviceNRecoder + if (level < psLevel2) { + useRLE = gFalse; + useCompressed = gFalse; + useASCIIHex = gTrue; + } else { + s = str->getPSFilter(level < psLevel3 ? 2 : 3, ""); + if (s) { + useRLE = gFalse; + useCompressed = gTrue; + delete s; + } else { + useRLE = gTrue; + useCompressed = gFalse; + } + useASCIIHex = level == psLevel1 || level == psLevel1Sep || + globalParams->getPSASCIIHex(); + } + if (useCompressed) { + str = str->getUndecodedStream(); + } + if (useRLE) { + str = new RunLengthEncoder(str); + } + if (useASCIIHex) { + str = new ASCIIHexEncoder(str); + } else { + str = new ASCII85Encoder(str); + } + + // compute image data size + str->reset(); + col = size = 0; + do { + do { + c = str->getChar(); + } while (c == '\n' || c == '\r'); + if (c == (useASCIIHex ? '>' : '~') || c == EOF) { + break; + } + if (c == 'z') { + ++col; + } else { + ++col; + for (i = 1; i <= (useASCIIHex ? 1 : 4); ++i) { + do { + c = str->getChar(); + } while (c == '\n' || c == '\r'); + if (c == (useASCIIHex ? '>' : '~') || c == EOF) { + break; + } + ++col; + } + if (c == (useASCIIHex ? '>' : '~') || c == EOF) { + break; + } + } + if (col > 225) { + ++size; + col = 0; + } + } while (c != (useASCIIHex ? '>' : '~') && c != EOF); + // add one entry for the final line of data; add another entry + // because the RunLengthDecode filter may read past the end + ++size; + if (useRLE) { + ++size; + } + outerSize = size/65535 + 1; + + writePSFmt("{0:d} array dup /ImData_{1:d}_{2:d} exch def\n", + outerSize, id.num, id.gen); + str->close(); + + // write the data into the array + str->reset(); + for (outer = 0;outer < outerSize;outer++) { + int innerSize = size > 65535 ? 65535 : size; + + // put the inner array into the outer array + writePSFmt("{0:d} array 1 index {1:d} 2 index put\n", + innerSize, outer); + line = col = 0; + writePS((char *)(useASCIIHex ? "dup 0 <" : "dup 0 <~")); + for (;;) { + do { + c = str->getChar(); + } while (c == '\n' || c == '\r'); + if (c == (useASCIIHex ? '>' : '~') || c == EOF) { + break; + } + if (c == 'z') { + writePSChar(c); + ++col; + } else { + writePSChar(c); + ++col; + for (i = 1; i <= (useASCIIHex ? 1 : 4); ++i) { + do { + c = str->getChar(); + } while (c == '\n' || c == '\r'); + if (c == (useASCIIHex ? '>' : '~') || c == EOF) { + break; + } + writePSChar(c); + ++col; + } + } + if (c == (useASCIIHex ? '>' : '~') || c == EOF) { + break; + } + // each line is: "dup nnnnn <~...data...~> put<eol>" + // so max data length = 255 - 20 = 235 + // chunks are 1 or 4 bytes each, so we have to stop at 232 + // but make it 225 just to be safe + if (col > 225) { + writePS((char *)(useASCIIHex ? "> put\n" : "~> put\n")); + ++line; + if (line >= innerSize) break; + writePSFmt((char *)(useASCIIHex ? "dup {0:d} <" : "dup {0:d} <~"), line); + col = 0; + } + } + if (c == (useASCIIHex ? '>' : '~') || c == EOF) { + writePS((char *)(useASCIIHex ? "> put\n" : "~> put\n")); + if (useRLE) { + ++line; + writePSFmt("{0:d} <> put\n", line); + } else { + writePS("pop\n"); + } + break; + } + writePS("pop\n"); + size -= innerSize; + } + writePS("pop\n"); + str->close(); + + delete str; +} + +void PSOutputDev::setupForms(Dict *resDict) { + Object xObjDict, xObj, xObjRef, subtypeObj; + int i; + + if (!preload) { + return; + } + + resDict->lookup("XObject", &xObjDict); + if (xObjDict.isDict()) { + for (i = 0; i < xObjDict.dictGetLength(); ++i) { + xObjDict.dictGetValNF(i, &xObjRef); + xObjDict.dictGetVal(i, &xObj); + if (xObj.isStream()) { + xObj.streamGetDict()->lookup("Subtype", &subtypeObj); + if (subtypeObj.isName("Form")) { + if (xObjRef.isRef()) { + setupForm(xObjRef.getRef(), &xObj); + } else { + error(-1, "Form in resource dict is not an indirect reference"); + } + } + subtypeObj.free(); + } + xObj.free(); + xObjRef.free(); + } + } + xObjDict.free(); +} + +void PSOutputDev::setupForm(Ref id, Object *strObj) { + Dict *dict, *resDict; + Object matrixObj, bboxObj, resObj, obj1; + double m[6], bbox[4]; + PDFRectangle box; + Gfx *gfx; + int i; + + // check if form is already defined + for (i = 0; i < formIDLen; ++i) { + if (formIDs[i].num == id.num && formIDs[i].gen == id.gen) { + return; + } + } + + // add entry to formIDs list + if (formIDLen >= formIDSize) { + if (formIDSize == 0) { + formIDSize = 64; + } else { + formIDSize *= 2; + } + formIDs = (Ref *)greallocn(formIDs, formIDSize, sizeof(Ref)); + } + formIDs[formIDLen++] = id; + + dict = strObj->streamGetDict(); + + // get bounding box + dict->lookup("BBox", &bboxObj); + if (!bboxObj.isArray()) { + bboxObj.free(); + error(-1, "Bad form bounding box"); + return; + } + for (i = 0; i < 4; ++i) { + bboxObj.arrayGet(i, &obj1); + bbox[i] = obj1.getNum(); + obj1.free(); + } + bboxObj.free(); + + // get matrix + dict->lookup("Matrix", &matrixObj); + if (matrixObj.isArray()) { + for (i = 0; i < 6; ++i) { + matrixObj.arrayGet(i, &obj1); + m[i] = obj1.getNum(); + obj1.free(); + } + } else { + m[0] = 1; m[1] = 0; + m[2] = 0; m[3] = 1; + m[4] = 0; m[5] = 0; + } + matrixObj.free(); + + // get resources + dict->lookup("Resources", &resObj); + resDict = resObj.isDict() ? resObj.getDict() : (Dict *)NULL; + + writePSFmt("/f_{0:d}_{1:d} {{\n", id.num, id.gen); + writePS("q\n"); + writePSFmt("[{0:.6gs} {1:.6gs} {2:.6gs} {3:.6gs} {4:.6gs} {5:.6gs}] cm\n", + m[0], m[1], m[2], m[3], m[4], m[5]); + + box.x1 = bbox[0]; + box.y1 = bbox[1]; + box.x2 = bbox[2]; + box.y2 = bbox[3]; + gfx = new Gfx(xref, this, resDict, m_catalog, &box, &box); + gfx->display(strObj); + delete gfx; + + writePS("Q\n"); + writePS("} def\n"); + + resObj.free(); +} + +GBool PSOutputDev::checkPageSlice(Page *page, double /*hDPI*/, double /*vDPI*/, + int rotateA, GBool useMediaBox, GBool crop, + int sliceX, int sliceY, + int sliceW, int sliceH, + GBool printing, Catalog *catalog, + GBool (*abortCheckCbk)(void *data), + void *abortCheckCbkData) { +#if HAVE_SPLASH + PreScanOutputDev *scan; + GBool rasterize; + SplashOutputDev *splashOut; + SplashColor paperColor; + PDFRectangle box; + GfxState *state; + SplashBitmap *bitmap; + Stream *str0, *str; + Object obj; + Guchar *p; + Guchar col[4]; + double m0, m1, m2, m3, m4, m5; + int c, w, h, x, y, comp, i; + double splashDPI; + char hexBuf[32*2 + 2]; // 32 values X 2 chars/value + line ending + null + Guchar digit; + GBool useBinary; + GBool isGray; + int compCyan; + + if (!forceRasterize) { + scan = new PreScanOutputDev(xref); + page->displaySlice(scan, 72, 72, rotateA, useMediaBox, crop, + sliceX, sliceY, sliceW, sliceH, + printing, catalog, abortCheckCbk, abortCheckCbkData); + rasterize = scan->usesTransparency() || scan->hasLevel1PSBug(); + delete scan; + } else { + rasterize = gTrue; + } + if (!rasterize) { + return gTrue; + } + + // rasterize the page + if (level == psLevel1) { + paperColor[0] = 0xff; + splashOut = new SplashOutputDev(splashModeMono8, 1, gFalse, + paperColor, gTrue, gFalse); +#if SPLASH_CMYK + } else if (level == psLevel1Sep || level == psLevel2Sep || level == psLevel3Sep) { + paperColor[0] = paperColor[1] = paperColor[2] = paperColor[3] = 0; + splashOut = new SplashOutputDev(splashModeCMYK8, 1, gFalse, + paperColor, gTrue, gFalse); +#else + } else if (level == psLevel1Sep || level == psLevel2Sep || level == psLevel3Sep) { + error(-1, "pdftops was built without CMYK support, levelnsep needs it to work in this file"); + return gFalse; +#endif + } else { + paperColor[0] = paperColor[1] = paperColor[2] = 0xff; + splashOut = new SplashOutputDev(splashModeRGB8, 1, gFalse, + paperColor, gTrue, gFalse); + } + splashOut->startDoc(xref); + splashDPI = globalParams->getSplashResolution(); + if (splashDPI < 1.0) { + splashDPI = defaultSplashDPI; + } + page->displaySlice(splashOut, splashDPI, splashDPI, rotateA, + useMediaBox, crop, + sliceX, sliceY, sliceW, sliceH, + printing, catalog, abortCheckCbk, abortCheckCbkData); + + // start the PS page + page->makeBox(splashDPI, splashDPI, rotateA, useMediaBox, gFalse, + sliceX, sliceY, sliceW, sliceH, &box, &crop); + rotateA += page->getRotate(); + if (rotateA >= 360) { + rotateA -= 360; + } else if (rotateA < 0) { + rotateA += 360; + } + state = new GfxState(splashDPI, splashDPI, &box, rotateA, gFalse); + startPage(page->getNum(), state); + delete state; + switch (rotateA) { + case 0: + default: // this should never happen + m0 = box.x2 - box.x1; + m1 = 0; + m2 = 0; + m3 = box.y2 - box.y1; + m4 = box.x1; + m5 = box.y1; + break; + case 90: + m0 = 0; + m1 = box.y2 - box.y1; + m2 = -(box.x2 - box.x1); + m3 = 0; + m4 = box.x2; + m5 = box.y1; + break; + case 180: + m0 = -(box.x2 - box.x1); + m1 = 0; + m2 = 0; + m3 = -(box.y2 - box.y1); + m4 = box.x2; + m5 = box.y2; + break; + case 270: + m0 = 0; + m1 = -(box.y2 - box.y1); + m2 = box.x2 - box.x1; + m3 = 0; + m4 = box.x1; + m5 = box.y2; + break; + } + + //~ need to add the process colors + + // draw the rasterized image + bitmap = splashOut->getBitmap(); + w = bitmap->getWidth(); + h = bitmap->getHeight(); + writePS("gsave\n"); + writePSFmt("[{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] concat\n", + m0, m1, m2, m3, m4, m5); + switch (level) { + case psLevel1: + useBinary = globalParams->getPSBinary(); + writePSFmt("{0:d} {1:d} 8 [{2:d} 0 0 {3:d} 0 {4:d}] pdfIm1{5:s}\n", + w, h, w, -h, h, + useBinary ? "Bin" : ""); + p = bitmap->getDataPtr(); + i = 0; + if (useBinary) { + for (y = 0; y < h; ++y) { + for (x = 0; x < w; ++x) { + hexBuf[i++] = *p++; + if (i >= 64) { + writePSBuf(hexBuf, i); + i = 0; + } + } + } + } else { + for (y = 0; y < h; ++y) { + for (x = 0; x < w; ++x) { + digit = *p / 16; + hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); + digit = *p++ % 16; + hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); + if (i >= 64) { + hexBuf[i++] = '\n'; + writePSBuf(hexBuf, i); + i = 0; + } + } + } + } + if (i != 0) { + if (!useBinary) { + hexBuf[i++] = '\n'; + } + writePSBuf(hexBuf, i); + } + break; + case psLevel1Sep: + useBinary = globalParams->getPSBinary(); + p = bitmap->getDataPtr(); + isGray = gTrue; + for (y = 0; y < h; ++y) { + for (x = 0; x < w; ++x) { + if (p[4*x] != p[4*x + 1] || p[4*x] != p[4*x + 2]) { + isGray = gFalse; + y = h; + break; + } + } + p += bitmap->getRowSize(); + } + writePSFmt("{0:d} {1:d} 8 [{2:d} 0 0 {3:d} 0 {4:d}] pdfIm1{5:s}{6:s}\n", + w, h, w, -h, h, + isGray ? "" : "Sep", + useBinary ? "Bin" : ""); + p = bitmap->getDataPtr(); + i = 0; + col[0] = col[1] = col[2] = col[3] = 0; + if (isGray) { + int g; + if ((psProcessBlack & processColors) == 0) { + for (y = 0; y < h; ++y) { + for (x = 0; x < w; ++x) { + if (p[4*x] > 0 || p[4*x + 3] > 0) { + col[3] = 1; + y = h; + break; + } + } + p += bitmap->getRowSize(); + } + p = bitmap->getDataPtr(); + } + for (y = 0; y < h; ++y) { + if (useBinary) { + for (x = 0; x < w; ++x) { + g = p[4*x] + p[4*x + 3]; + g = 255 - g; + if (g < 0) g = 0; + hexBuf[i++] = (Guchar) g; + if (i >= 64) { + writePSBuf(hexBuf, i); + i = 0; + } + } + } else { + for (x = 0; x < w; ++x) { + g = p[4*x] + p[4*x + 3]; + g = 255 - g; + if (g < 0) g = 0; + digit = g / 16; + hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); + digit = g % 16; + hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); + if (i >= 64) { + hexBuf[i++] = '\n'; + writePSBuf(hexBuf, i); + i = 0; + } + } + } + p += bitmap->getRowSize(); + } + } else if (((psProcessCyan | psProcessMagenta | psProcessYellow | psProcessBlack) & ~processColors) != 0) { + for (y = 0; y < h; ++y) { + for (comp = 0; comp < 4; ++comp) { + if (useBinary) { + for (x = 0; x < w; ++x) { + col[comp] |= p[4*x + comp]; + hexBuf[i++] = p[4*x + comp]; + if (i >= 64) { + writePSBuf(hexBuf, i); + i = 0; + } + } + } else { + for (x = 0; x < w; ++x) { + col[comp] |= p[4*x + comp]; + digit = p[4*x + comp] / 16; + hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); + digit = p[4*x + comp] % 16; + hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); + if (i >= 64) { + hexBuf[i++] = '\n'; + writePSBuf(hexBuf, i); + i = 0; + } + } + } + } + p += bitmap->getRowSize(); + } + } else { + for (y = 0; y < h; ++y) { + for (comp = 0; comp < 4; ++comp) { + if (useBinary) { + for (x = 0; x < w; ++x) { + hexBuf[i++] = p[4*x + comp]; + if (i >= 64) { + writePSBuf(hexBuf, i); + i = 0; + } + } + } else { + for (x = 0; x < w; ++x) { + digit = p[4*x + comp] / 16; + hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); + digit = p[4*x + comp] % 16; + hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); + if (i >= 64) { + hexBuf[i++] = '\n'; + writePSBuf(hexBuf, i); + i = 0; + } + } + } + } + p += bitmap->getRowSize(); + } + } + if (i != 0) { + if (!useBinary) { + hexBuf[i++] = '\n'; + } + writePSBuf(hexBuf, i); + } + if (col[0]) { + processColors |= psProcessCyan; + } + if (col[1]) { + processColors |= psProcessMagenta; + } + if (col[2]) { + processColors |= psProcessYellow; + } + if (col[3]) { + processColors |= psProcessBlack; + } + break; + case psLevel2Sep: + case psLevel3Sep: + obj.initNull(); + str0 = new MemStream((char *)bitmap->getDataPtr(), 0, w * h * 4, &obj); + isGray = gTrue; + while ((compCyan = str0->getChar()) != EOF) { + if (str0->getChar() != compCyan || + str0->getChar() != compCyan) { + isGray = gFalse; + break; + } + str0->getChar(); + } + str0->reset(); + if (isGray) { + writePS("/DeviceGray setcolorspace\n"); + str = new RunLengthEncoder(new CMKYGrayEncoder(str0)); + } else { + processColors |= psProcessCMYK; + writePS("/DeviceCMYK setcolorspace\n"); + str = new RunLengthEncoder(str0); + } + writePS("<<\n /ImageType 1\n"); + writePSFmt(" /Width {0:d}\n", bitmap->getWidth()); + writePSFmt(" /Height {0:d}\n", bitmap->getHeight()); + writePSFmt(" /ImageMatrix [{0:d} 0 0 {1:d} 0 {2:d}]\n", w, -h, h); + writePS(" /BitsPerComponent 8\n"); + if (isGray) { + writePS(" /Decode [1 0]\n"); + } else { + writePS(" /Decode [0 1 0 1 0 1 0 1]\n"); + } + writePS(" /DataSource currentfile\n"); + useBinary = globalParams->getPSBinary(); + if (useBinary) { + /* nothing to do */; + } else if (globalParams->getPSASCIIHex()) { + writePS(" /ASCIIHexDecode filter\n"); + } else { + writePS(" /ASCII85Decode filter\n"); + } + writePS(" /RunLengthDecode filter\n"); + writePS(">>\n"); + if (useBinary) { + /* nothing to do */; + } else if (globalParams->getPSASCIIHex()) { + str = new ASCIIHexEncoder(str); + } else { + str = new ASCII85Encoder(str); + } + str->reset(); + if (useBinary) { + int len = 0; + while (str->getChar() != EOF) { + len++; + } + str->reset(); + writePSFmt("%%BeginData: {0:d} Binary Bytes\n", len+6+1); + } + writePS("image\n"); + while ((c = str->getChar()) != EOF) { + writePSChar(c); + } + if (useBinary) { + writePS("\n%%EndData\n"); + } else if (isGray) { + writePSChar('\n'); + } + str->close(); + delete str; + delete str0; + break; + case psLevel2: + case psLevel3: + writePS("/DeviceRGB setcolorspace\n"); + writePS("<<\n /ImageType 1\n"); + writePSFmt(" /Width {0:d}\n", bitmap->getWidth()); + writePSFmt(" /Height {0:d}\n", bitmap->getHeight()); + writePSFmt(" /ImageMatrix [{0:d} 0 0 {1:d} 0 {2:d}]\n", w, -h, h); + writePS(" /BitsPerComponent 8\n"); + writePS(" /Decode [0 1 0 1 0 1]\n"); + writePS(" /DataSource currentfile\n"); + if (globalParams->getPSASCIIHex()) { + writePS(" /ASCIIHexDecode filter\n"); + } else { + writePS(" /ASCII85Decode filter\n"); + } + writePS(" /RunLengthDecode filter\n"); + writePS(">>\n"); + writePS("image\n"); + obj.initNull(); + str0 = new MemStream((char *)bitmap->getDataPtr(), 0, w * h * 3, &obj); + str = new RunLengthEncoder(str0); + if (globalParams->getPSASCIIHex()) { + str = new ASCIIHexEncoder(str); + } else { + str = new ASCII85Encoder(str); + } + str->reset(); + while ((c = str->getChar()) != EOF) { + writePSChar(c); + } + str->close(); + delete str; + delete str0; + processColors |= psProcessCMYK; + break; + } + delete splashOut; + writePS("grestore\n"); + + // finish the PS page + endPage(); + + return gFalse; +#else + return gTrue; +#endif +} + +void PSOutputDev::startPage(int pageNum, GfxState *state) { + int x1, y1, x2, y2, width, height; + int imgWidth, imgHeight, imgWidth2, imgHeight2; + GBool landscape; + + + if (mode == psModePS || mode == psModePSOrigPageSizes) { + GooString pageLabel; + const GBool gotLabel = m_catalog->indexToLabel(pageNum -1, &pageLabel); + if (gotLabel) { + // See bug13338 for why we try to avoid parentheses... + GBool needParens; + GooString *filteredString = filterPSLabel(&pageLabel, &needParens); + if (needParens) { + writePSFmt("%%Page: ({0:t}) {1:d}\n", filteredString, seqPage); + } else { + writePSFmt("%%Page: {0:t} {1:d}\n", filteredString, seqPage); + } + delete filteredString; + } else { + writePSFmt("%%Page: {0:d} {1:d}\n", pageNum, seqPage); + } + if (mode != psModePSOrigPageSizes) + writePS("%%BeginPageSetup\n"); + } + + // underlays + if (underlayCbk) { + (*underlayCbk)(this, underlayCbkData); + } + if (overlayCbk) { + saveState(NULL); + } + + switch (mode) { + + case psModePSOrigPageSizes: + x1 = (int)floor(state->getX1()); + y1 = (int)floor(state->getY1()); + x2 = (int)ceil(state->getX2()); + y2 = (int)ceil(state->getY2()); + width = x2 - x1; + height = y2 - y1; + if (width > height) { + landscape = gTrue; + } else { + landscape = gFalse; + } + writePSFmt("%%PageBoundingBox: {0:d} {1:d} {2:d} {3:d}\n", x1, y1, x2 - x1, y2 - y1); + writePS("%%BeginPageSetup\n"); + writePSFmt("%%PageOrientation: {0:s}\n", + landscape ? "Landscape" : "Portrait"); + if ((width != prevWidth) || (height != prevHeight)) { + // Set page size only when it actually changes, as otherwise Duplex + // printing does not work + writePSFmt("<</PageSize [{0:d} {1:d}]>> setpagedevice\n", width, height); + prevWidth = width; + prevHeight = height; + } + writePS("pdfStartPage\n"); + writePSFmt("{0:d} {1:d} {2:d} {3:d} re W\n", x1, y1, x2 - x1, y2 - y1); + writePS("%%EndPageSetup\n"); + ++seqPage; + break; + + case psModePS: + // rotate, translate, and scale page + imgWidth = imgURX - imgLLX; + imgHeight = imgURY - imgLLY; + x1 = (int)floor(state->getX1()); + y1 = (int)floor(state->getY1()); + x2 = (int)ceil(state->getX2()); + y2 = (int)ceil(state->getY2()); + width = x2 - x1; + height = y2 - y1; + tx = ty = 0; + // rotation and portrait/landscape mode + if (rotate0 >= 0) { + rotate = (360 - rotate0) % 360; + landscape = gFalse; + } else { + rotate = (360 - state->getRotate()) % 360; + if (rotate == 0 || rotate == 180) { + if (width > height && width > imgWidth) { + rotate += 90; + landscape = gTrue; + } else { + landscape = gFalse; + } + } else { // rotate == 90 || rotate == 270 + if (height > width && height > imgWidth) { + rotate = 270 - rotate; + landscape = gTrue; + } else { + landscape = gFalse; + } + } + } + writePSFmt("%%PageOrientation: {0:s}\n", + landscape ? "Landscape" : "Portrait"); + writePS("pdfStartPage\n"); + if (rotate == 0) { + imgWidth2 = imgWidth; + imgHeight2 = imgHeight; + } else if (rotate == 90) { + writePS("90 rotate\n"); + ty = -imgWidth; + imgWidth2 = imgHeight; + imgHeight2 = imgWidth; + } else if (rotate == 180) { + writePS("180 rotate\n"); + imgWidth2 = imgWidth; + imgHeight2 = imgHeight; + tx = -imgWidth; + ty = -imgHeight; + } else { // rotate == 270 + writePS("270 rotate\n"); + tx = -imgHeight; + imgWidth2 = imgHeight; + imgHeight2 = imgWidth; + } + // shrink or expand + if (xScale0 > 0 && yScale0 > 0) { + xScale = xScale0; + yScale = yScale0; + } else if ((globalParams->getPSShrinkLarger() && + (width > imgWidth2 || height > imgHeight2)) || + (globalParams->getPSExpandSmaller() && + (width < imgWidth2 && height < imgHeight2))) { + xScale = (double)imgWidth2 / (double)width; + yScale = (double)imgHeight2 / (double)height; + if (yScale < xScale) { + xScale = yScale; + } else { + yScale = xScale; + } + } else { + xScale = yScale = 1; + } + // deal with odd bounding boxes or clipping + if (clipLLX0 < clipURX0 && clipLLY0 < clipURY0) { + tx -= xScale * clipLLX0; + ty -= yScale * clipLLY0; + } else { + tx -= xScale * x1; + ty -= yScale * y1; + } + // center + if (tx0 >= 0 && ty0 >= 0) { + tx += rotate == 0 ? tx0 : ty0; + ty += rotate == 0 ? ty0 : -tx0; + } else if (globalParams->getPSCenter()) { + if (clipLLX0 < clipURX0 && clipLLY0 < clipURY0) { + tx += (imgWidth2 - xScale * (clipURX0 - clipLLX0)) / 2; + ty += (imgHeight2 - yScale * (clipURY0 - clipLLY0)) / 2; + } else { + tx += (imgWidth2 - xScale * width) / 2; + ty += (imgHeight2 - yScale * height) / 2; + } + } + tx += rotate == 0 ? imgLLX : imgLLY; + ty += rotate == 0 ? imgLLY : -imgLLX; + if (tx != 0 || ty != 0) { + writePSFmt("{0:.6g} {1:.6g} translate\n", tx, ty); + } + if (xScale != 1 || yScale != 1) { + writePSFmt("{0:.6f} {1:.6f} scale\n", xScale, yScale); + } + if (clipLLX0 < clipURX0 && clipLLY0 < clipURY0) { + writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re W\n", + clipLLX0, clipLLY0, clipURX0 - clipLLX0, clipURY0 - clipLLY0); + } else { + writePSFmt("{0:d} {1:d} {2:d} {3:d} re W\n", x1, y1, x2 - x1, y2 - y1); + } + + writePS("%%EndPageSetup\n"); + ++seqPage; + break; + + case psModeEPS: + writePS("pdfStartPage\n"); + tx = ty = 0; + rotate = (360 - state->getRotate()) % 360; + if (rotate == 0) { + } else if (rotate == 90) { + writePS("90 rotate\n"); + tx = -epsX1; + ty = -epsY2; + } else if (rotate == 180) { + writePS("180 rotate\n"); + tx = -(epsX1 + epsX2); + ty = -(epsY1 + epsY2); + } else { // rotate == 270 + writePS("270 rotate\n"); + tx = -epsX2; + ty = -epsY1; + } + if (tx != 0 || ty != 0) { + writePSFmt("{0:.6g} {1:.6g} translate\n", tx, ty); + } + xScale = yScale = 1; + break; + + case psModeForm: + writePS("/PaintProc {\n"); + writePS("begin xpdf begin\n"); + writePS("pdfStartPage\n"); + tx = ty = 0; + xScale = yScale = 1; + rotate = 0; + break; + } +} + +void PSOutputDev::endPage() { + if (overlayCbk) { + restoreState(NULL); + (*overlayCbk)(this, overlayCbkData); + } + + + if (mode == psModeForm) { + writePS("pdfEndPage\n"); + writePS("end end\n"); + writePS("} def\n"); + writePS("end end\n"); + } else { + if (!manualCtrl) { + writePS("showpage\n"); + } + writePS("%%PageTrailer\n"); + writePageTrailer(); + } +} + +void PSOutputDev::saveState(GfxState *state) { + writePS("q\n"); + ++numSaves; +} + +void PSOutputDev::restoreState(GfxState *state) { + writePS("Q\n"); + --numSaves; +} + +void PSOutputDev::updateCTM(GfxState *state, double m11, double m12, + double m21, double m22, double m31, double m32) { + writePSFmt("[{0:.6gs} {1:.6gs} {2:.6gs} {3:.6gs} {4:.6gs} {5:.6gs}] cm\n", + m11, m12, m21, m22, m31, m32); +} + +void PSOutputDev::updateLineDash(GfxState *state) { + double *dash; + double start; + int length, i; + + state->getLineDash(&dash, &length, &start); + writePS("["); + for (i = 0; i < length; ++i) { + writePSFmt("{0:.6g}{1:w}", + dash[i] < 0 ? 0 : dash[i], + (i == length-1) ? 0 : 1); + } + writePSFmt("] {0:.6g} d\n", start); +} + +void PSOutputDev::updateFlatness(GfxState *state) { + writePSFmt("{0:d} i\n", state->getFlatness()); +} + +void PSOutputDev::updateLineJoin(GfxState *state) { + writePSFmt("{0:d} j\n", state->getLineJoin()); +} + +void PSOutputDev::updateLineCap(GfxState *state) { + writePSFmt("{0:d} J\n", state->getLineCap()); +} + +void PSOutputDev::updateMiterLimit(GfxState *state) { + writePSFmt("{0:.6g} M\n", state->getMiterLimit()); +} + +void PSOutputDev::updateLineWidth(GfxState *state) { + writePSFmt("{0:.6g} w\n", state->getLineWidth()); +} + +void PSOutputDev::updateFillColorSpace(GfxState *state) { + if (inUncoloredPattern) { + return; + } + switch (level) { + case psLevel1: + case psLevel1Sep: + break; + case psLevel2: + case psLevel3: + if (state->getFillColorSpace()->getMode() != csPattern) { + dumpColorSpaceL2(state->getFillColorSpace(), gTrue, gFalse, gFalse); + writePS(" cs\n"); + } + break; + case psLevel2Sep: + case psLevel3Sep: + break; + } +} + +void PSOutputDev::updateStrokeColorSpace(GfxState *state) { + if (inUncoloredPattern) { + return; + } + switch (level) { + case psLevel1: + case psLevel1Sep: + break; + case psLevel2: + case psLevel3: + if (state->getStrokeColorSpace()->getMode() != csPattern) { + dumpColorSpaceL2(state->getStrokeColorSpace(), gTrue, gFalse, gFalse); + writePS(" CS\n"); + } + break; + case psLevel2Sep: + case psLevel3Sep: + break; + } +} + +void PSOutputDev::updateFillColor(GfxState *state) { + GfxColor color; + GfxColor *colorPtr; + GfxGray gray; + GfxCMYK cmyk; + GfxSeparationColorSpace *sepCS; + double c, m, y, k; + int i; + + if (inUncoloredPattern) { + return; + } + switch (level) { + case psLevel1: + state->getFillGray(&gray); + writePSFmt("{0:.4g} g\n", colToDbl(gray)); + break; + case psLevel1Sep: + state->getFillCMYK(&cmyk); + c = colToDbl(cmyk.c); + m = colToDbl(cmyk.m); + y = colToDbl(cmyk.y); + k = colToDbl(cmyk.k); + writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} k\n", c, m, y, k); + addProcessColor(c, m, y, k); + break; + case psLevel2: + case psLevel3: + if (state->getFillColorSpace()->getMode() != csPattern) { + colorPtr = state->getFillColor(); + writePS("["); + for (i = 0; i < state->getFillColorSpace()->getNComps(); ++i) { + if (i > 0) { + writePS(" "); + } + writePSFmt("{0:.4g}", colToDbl(colorPtr->c[i])); + } + writePS("] sc\n"); + } + break; + case psLevel2Sep: + case psLevel3Sep: + if (state->getFillColorSpace()->getMode() == csSeparation) { + sepCS = (GfxSeparationColorSpace *)state->getFillColorSpace(); + color.c[0] = gfxColorComp1; + sepCS->getCMYK(&color, &cmyk); + writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} {4:.4g} ({5:t}) ck\n", + colToDbl(state->getFillColor()->c[0]), + colToDbl(cmyk.c), colToDbl(cmyk.m), + colToDbl(cmyk.y), colToDbl(cmyk.k), + sepCS->getName()); + addCustomColor(sepCS); + } else { + state->getFillCMYK(&cmyk); + c = colToDbl(cmyk.c); + m = colToDbl(cmyk.m); + y = colToDbl(cmyk.y); + k = colToDbl(cmyk.k); + writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} k\n", c, m, y, k); + addProcessColor(c, m, y, k); + } + break; + } + t3Cacheable = gFalse; +} + +void PSOutputDev::updateStrokeColor(GfxState *state) { + GfxColor color; + GfxColor *colorPtr; + GfxGray gray; + GfxCMYK cmyk; + GfxSeparationColorSpace *sepCS; + double c, m, y, k; + int i; + + if (inUncoloredPattern) { + return; + } + switch (level) { + case psLevel1: + state->getStrokeGray(&gray); + writePSFmt("{0:.4g} G\n", colToDbl(gray)); + break; + case psLevel1Sep: + state->getStrokeCMYK(&cmyk); + c = colToDbl(cmyk.c); + m = colToDbl(cmyk.m); + y = colToDbl(cmyk.y); + k = colToDbl(cmyk.k); + writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} K\n", c, m, y, k); + addProcessColor(c, m, y, k); + break; + case psLevel2: + case psLevel3: + if (state->getStrokeColorSpace()->getMode() != csPattern) { + colorPtr = state->getStrokeColor(); + writePS("["); + for (i = 0; i < state->getStrokeColorSpace()->getNComps(); ++i) { + if (i > 0) { + writePS(" "); + } + writePSFmt("{0:.4g}", colToDbl(colorPtr->c[i])); + } + writePS("] SC\n"); + } + break; + case psLevel2Sep: + case psLevel3Sep: + if (state->getStrokeColorSpace()->getMode() == csSeparation) { + sepCS = (GfxSeparationColorSpace *)state->getStrokeColorSpace(); + color.c[0] = gfxColorComp1; + sepCS->getCMYK(&color, &cmyk); + writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} {4:.4g} ({5:t}) CK\n", + colToDbl(state->getStrokeColor()->c[0]), + colToDbl(cmyk.c), colToDbl(cmyk.m), + colToDbl(cmyk.y), colToDbl(cmyk.k), + sepCS->getName()); + addCustomColor(sepCS); + } else { + state->getStrokeCMYK(&cmyk); + c = colToDbl(cmyk.c); + m = colToDbl(cmyk.m); + y = colToDbl(cmyk.y); + k = colToDbl(cmyk.k); + writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} K\n", c, m, y, k); + addProcessColor(c, m, y, k); + } + break; + } + t3Cacheable = gFalse; +} + +void PSOutputDev::addProcessColor(double c, double m, double y, double k) { + if (c > 0) { + processColors |= psProcessCyan; + } + if (m > 0) { + processColors |= psProcessMagenta; + } + if (y > 0) { + processColors |= psProcessYellow; + } + if (k > 0) { + processColors |= psProcessBlack; + } +} + +void PSOutputDev::addCustomColor(GfxSeparationColorSpace *sepCS) { + PSOutCustomColor *cc; + GfxColor color; + GfxCMYK cmyk; + + for (cc = customColors; cc; cc = cc->next) { + if (!cc->name->cmp(sepCS->getName())) { + return; + } + } + color.c[0] = gfxColorComp1; + sepCS->getCMYK(&color, &cmyk); + cc = new PSOutCustomColor(colToDbl(cmyk.c), colToDbl(cmyk.m), + colToDbl(cmyk.y), colToDbl(cmyk.k), + sepCS->getName()->copy()); + cc->next = customColors; + customColors = cc; +} + +void PSOutputDev::updateFillOverprint(GfxState *state) { + if (level >= psLevel2) { + writePSFmt("{0:s} op\n", state->getFillOverprint() ? "true" : "false"); + } +} + +void PSOutputDev::updateStrokeOverprint(GfxState *state) { + if (level >= psLevel2) { + writePSFmt("{0:s} OP\n", state->getStrokeOverprint() ? "true" : "false"); + } +} + +void PSOutputDev::updateTransfer(GfxState *state) { + Function **funcs; + int i; + + funcs = state->getTransfer(); + if (funcs[0] && funcs[1] && funcs[2] && funcs[3]) { + if (level >= psLevel2) { + for (i = 0; i < 4; ++i) { + cvtFunction(funcs[i]); + } + writePS("setcolortransfer\n"); + } else { + cvtFunction(funcs[3]); + writePS("settransfer\n"); + } + } else if (funcs[0]) { + cvtFunction(funcs[0]); + writePS("settransfer\n"); + } else { + writePS("{} settransfer\n"); + } +} + +void PSOutputDev::updateFont(GfxState *state) { + if (state->getFont()) { + writePSFmt("/F{0:d}_{1:d} {2:.6g} Tf\n", + state->getFont()->getID()->num, state->getFont()->getID()->gen, + fabs(state->getFontSize()) < 0.00001 ? 0.00001 + : state->getFontSize()); + } +} + +void PSOutputDev::updateTextMat(GfxState *state) { + double *mat; + + mat = state->getTextMat(); + if (fabs(mat[0] * mat[3] - mat[1] * mat[2]) < 0.00001) { + // avoid a singular (or close-to-singular) matrix + writePSFmt("[0.00001 0 0 0.00001 {0:.6g} {1:.6g}] Tm\n", mat[4], mat[5]); + } else { + writePSFmt("[{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] Tm\n", + mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]); + } +} + +void PSOutputDev::updateCharSpace(GfxState *state) { + writePSFmt("{0:.6g} Tc\n", state->getCharSpace()); +} + +void PSOutputDev::updateRender(GfxState *state) { + int rm; + + rm = state->getRender(); + writePSFmt("{0:d} Tr\n", rm); + rm &= 3; + if (rm != 0 && rm != 3) { + t3Cacheable = gFalse; + } +} + +void PSOutputDev::updateRise(GfxState *state) { + writePSFmt("{0:.6g} Ts\n", state->getRise()); +} + +void PSOutputDev::updateWordSpace(GfxState *state) { + writePSFmt("{0:.6g} Tw\n", state->getWordSpace()); +} + +void PSOutputDev::updateHorizScaling(GfxState *state) { + double h; + + h = state->getHorizScaling(); + if (fabs(h) < 0.01) { + h = 0.01; + } + writePSFmt("{0:.6g} Tz\n", h); +} + +void PSOutputDev::updateTextPos(GfxState *state) { + writePSFmt("{0:.6g} {1:.6g} Td\n", state->getLineX(), state->getLineY()); +} + +void PSOutputDev::updateTextShift(GfxState *state, double shift) { + if (state->getFont()->getWMode()) { + writePSFmt("{0:.6g} TJmV\n", shift); + } else { + writePSFmt("{0:.6g} TJm\n", shift); + } +} + +void PSOutputDev::stroke(GfxState *state) { + doPath(state->getPath()); + if (t3String) { + // if we're construct a cacheable Type 3 glyph, we need to do + // everything in the fill color + writePS("Sf\n"); + } else { + writePS("S\n"); + } +} + +void PSOutputDev::fill(GfxState *state) { + doPath(state->getPath()); + writePS("f\n"); +} + +void PSOutputDev::eoFill(GfxState *state) { + doPath(state->getPath()); + writePS("f*\n"); +} + +GBool PSOutputDev::tilingPatternFillL1(GfxState *state, Catalog *cat, Object *str, + double *pmat, int paintType, int tilingType, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep) { + PDFRectangle box; + Gfx *gfx; + + // define a Type 3 font + writePS("8 dict begin\n"); + writePS("/FontType 3 def\n"); + writePS("/FontMatrix [1 0 0 1 0 0] def\n"); + writePSFmt("/FontBBox [{0:.6g} {1:.6g} {2:.6g} {3:.6g}] def\n", + bbox[0], bbox[1], bbox[2], bbox[3]); + writePS("/Encoding 256 array def\n"); + writePS(" 0 1 255 { Encoding exch /.notdef put } for\n"); + writePS(" Encoding 120 /x put\n"); + writePS("/BuildGlyph {\n"); + writePS(" exch /CharProcs get exch\n"); + writePS(" 2 copy known not { pop /.notdef } if\n"); + writePS(" get exec\n"); + writePS("} bind def\n"); + writePS("/BuildChar {\n"); + writePS(" 1 index /Encoding get exch get\n"); + writePS(" 1 index /BuildGlyph get exec\n"); + writePS("} bind def\n"); + writePS("/CharProcs 1 dict def\n"); + writePS("CharProcs begin\n"); + box.x1 = bbox[0]; + box.y1 = bbox[1]; + box.x2 = bbox[2]; + box.y2 = bbox[3]; + gfx = new Gfx(xref, this, resDict, m_catalog, &box, NULL); + writePS("/x {\n"); + if (paintType == 2) { + writePSFmt("{0:.6g} 0 {1:.6g} {2:.6g} {3:.6g} {4:.6g} setcachedevice\n", + xStep, bbox[0], bbox[1], bbox[2], bbox[3]); + } else + { + if (x1 - 1 <= x0) { + writePS("1 0 setcharwidth\n"); + } else { + writePSFmt("{0:.6g} 0 setcharwidth\n", xStep); + } + } + inType3Char = gTrue; + if (paintType == 2) { + inUncoloredPattern = gTrue; + // ensure any PS procedures that contain sCol or fCol do not change the color + writePS("/pdfLastFill true def\n"); + writePS("/pdfLastStroke true def\n"); + } + ++numTilingPatterns; + gfx->display(str); + --numTilingPatterns; + if (paintType == 2) { + inUncoloredPattern = gFalse; + // ensure the next PS procedures that uses sCol or fCol will update the color + writePS("/pdfLastFill false def\n"); + writePS("/pdfLastStroke false def\n"); + } + inType3Char = gFalse; + writePS("} def\n"); + delete gfx; + writePS("end\n"); + writePS("currentdict end\n"); + writePSFmt("/xpdfTile{0:d} exch definefont pop\n", numTilingPatterns); + + // draw the tiles + writePSFmt("/xpdfTile{0:d} findfont setfont\n", numTilingPatterns); + writePSFmt("gsave [{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] concat\n", + mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]); + writePSFmt("{0:d} 1 {1:d} {{ {2:.6g} exch {3:.6g} mul m {4:d} 1 {5:d} {{ pop (x) show }} for }} for\n", + y0, y1 - 1, x0 * xStep, yStep, x0, x1 - 1); + writePS("grestore\n"); + + return gTrue; +} + +GBool PSOutputDev::tilingPatternFillL2(GfxState *state, Catalog *cat, Object *str, + double *pmat, int paintType, int tilingType, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep) { + PDFRectangle box; + Gfx *gfx; + + if (paintType == 2) { + // setpattern with PaintType 2 needs the paint color + writePS("currentcolor\n"); + } + writePS("<<\n /PatternType 1\n"); + writePSFmt(" /PaintType {0:d}\n", paintType); + writePSFmt(" /TilingType {0:d}\n", tilingType); + writePSFmt(" /BBox [{0:.6g} {1:.6g} {2:.6g} {3:.6g}]\n", bbox[0], bbox[1], bbox[2], bbox[3]); + writePSFmt(" /XStep {0:.6g}\n", xStep); + writePSFmt(" /YStep {0:.6g}\n", yStep); + writePS(" /PaintProc { \n"); + box.x1 = bbox[0]; + box.y1 = bbox[1]; + box.x2 = bbox[2]; + box.y2 = bbox[3]; + gfx = new Gfx(xref, this, resDict, m_catalog, &box, NULL); + inType3Char = gTrue; + if (paintType == 2) { + inUncoloredPattern = gTrue; + // ensure any PS procedures that contain sCol or fCol do not change the color + writePS("/pdfLastFill true def\n"); + writePS("/pdfLastStroke true def\n"); + } + gfx->display(str); + if (paintType == 2) { + inUncoloredPattern = gFalse; + // ensure the next PS procedures that uses sCol or fCol will update the color + writePS("/pdfLastFill false def\n"); + writePS("/pdfLastStroke false def\n"); + } + inType3Char = gFalse; + delete gfx; + writePS(" }\n"); + writePS(">>\n"); + writePSFmt("[{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}]\n", mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]); + writePS("makepattern setpattern\n"); + writePS("clippath fill\n"); // Gfx sets up a clip before calling out->tilingPatternFill() + + return gTrue; +} + +GBool PSOutputDev::tilingPatternFill(GfxState *state, Catalog *cat, Object *str, + double *pmat, int paintType, int tilingType, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep) { + if (x1 - x0 == 1 && y1 - y0 == 1) { + // Don't need to use patterns if only one instance of the pattern is used + PDFRectangle box; + Gfx *gfx; + double x, y, tx, ty; + + x = x0 * xStep; + y = y0 * yStep; + tx = x * mat[0] + y * mat[2] + mat[4]; + ty = x * mat[1] + y * mat[3] + mat[5]; + box.x1 = bbox[0]; + box.y1 = bbox[1]; + box.x2 = bbox[2]; + box.y2 = bbox[3]; + gfx = new Gfx(xref, this, resDict, m_catalog, &box, NULL); + writePSFmt("[{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] cm\n", mat[0], mat[1], mat[2], mat[3], tx, ty); + inType3Char = gTrue; + gfx->display(str); + inType3Char = gFalse; + delete gfx; + return gTrue; + } + + if (level == psLevel1 || level == psLevel1Sep) { + return tilingPatternFillL1(state, cat, str, pmat, paintType, tilingType, resDict, + mat, bbox, x0, y0, x1, y1, xStep, yStep); + } else { + return tilingPatternFillL2(state, cat, str, pmat, paintType, tilingType, resDict, + mat, bbox, x0, y0, x1, y1, xStep, yStep); + } +} + +GBool PSOutputDev::functionShadedFill(GfxState *state, + GfxFunctionShading *shading) { + double x0, y0, x1, y1; + double *mat; + int i; + + if (level == psLevel2Sep || level == psLevel3Sep) { + if (shading->getColorSpace()->getMode() != csDeviceCMYK) { + return gFalse; + } + processColors |= psProcessCMYK; + } + + shading->getDomain(&x0, &y0, &x1, &y1); + mat = shading->getMatrix(); + writePSFmt("/mat [{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] def\n", + mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]); + writePSFmt("/n {0:d} def\n", shading->getColorSpace()->getNComps()); + if (shading->getNFuncs() == 1) { + writePS("/func "); + cvtFunction(shading->getFunc(0)); + writePS("def\n"); + } else { + writePS("/func {\n"); + for (i = 0; i < shading->getNFuncs(); ++i) { + if (i < shading->getNFuncs() - 1) { + writePS("2 copy\n"); + } + cvtFunction(shading->getFunc(i)); + writePS("exec\n"); + if (i < shading->getNFuncs() - 1) { + writePS("3 1 roll\n"); + } + } + writePS("} def\n"); + } + writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} 0 funcSH\n", x0, y0, x1, y1); + + return gTrue; +} + +GBool PSOutputDev::axialShadedFill(GfxState *state, GfxAxialShading *shading, double /*tMin*/, double /*tMax*/) { + double xMin, yMin, xMax, yMax; + double x0, y0, x1, y1, dx, dy, mul; + double tMin, tMax, t, t0, t1; + int i; + + if (level == psLevel2Sep || level == psLevel3Sep) { + if (shading->getColorSpace()->getMode() != csDeviceCMYK) { + return gFalse; + } + processColors |= psProcessCMYK; + } + + // get the clip region bbox + state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); + + // compute min and max t values, based on the four corners of the + // clip region bbox + shading->getCoords(&x0, &y0, &x1, &y1); + dx = x1 - x0; + dy = y1 - y0; + if (fabs(dx) < 0.01 && fabs(dy) < 0.01) { + return gTrue; + } else { + mul = 1 / (dx * dx + dy * dy); + tMin = tMax = ((xMin - x0) * dx + (yMin - y0) * dy) * mul; + t = ((xMin - x0) * dx + (yMax - y0) * dy) * mul; + if (t < tMin) { + tMin = t; + } else if (t > tMax) { + tMax = t; + } + t = ((xMax - x0) * dx + (yMin - y0) * dy) * mul; + if (t < tMin) { + tMin = t; + } else if (t > tMax) { + tMax = t; + } + t = ((xMax - x0) * dx + (yMax - y0) * dy) * mul; + if (t < tMin) { + tMin = t; + } else if (t > tMax) { + tMax = t; + } + if (tMin < 0 && !shading->getExtend0()) { + tMin = 0; + } + if (tMax > 1 && !shading->getExtend1()) { + tMax = 1; + } + } + + // get the function domain + t0 = shading->getDomain0(); + t1 = shading->getDomain1(); + + // generate the PS code + writePSFmt("/t0 {0:.6g} def\n", t0); + writePSFmt("/t1 {0:.6g} def\n", t1); + writePSFmt("/dt {0:.6g} def\n", t1 - t0); + writePSFmt("/x0 {0:.6g} def\n", x0); + writePSFmt("/y0 {0:.6g} def\n", y0); + writePSFmt("/dx {0:.6g} def\n", x1 - x0); + writePSFmt("/x1 {0:.6g} def\n", x1); + writePSFmt("/y1 {0:.6g} def\n", y1); + writePSFmt("/dy {0:.6g} def\n", y1 - y0); + writePSFmt("/xMin {0:.6g} def\n", xMin); + writePSFmt("/yMin {0:.6g} def\n", yMin); + writePSFmt("/xMax {0:.6g} def\n", xMax); + writePSFmt("/yMax {0:.6g} def\n", yMax); + writePSFmt("/n {0:d} def\n", shading->getColorSpace()->getNComps()); + if (shading->getNFuncs() == 1) { + writePS("/func "); + cvtFunction(shading->getFunc(0)); + writePS("def\n"); + } else { + writePS("/func {\n"); + for (i = 0; i < shading->getNFuncs(); ++i) { + if (i < shading->getNFuncs() - 1) { + writePS("dup\n"); + } + cvtFunction(shading->getFunc(i)); + writePS("exec\n"); + if (i < shading->getNFuncs() - 1) { + writePS("exch\n"); + } + } + writePS("} def\n"); + } + writePSFmt("{0:.6g} {1:.6g} 0 axialSH\n", tMin, tMax); + + return gTrue; +} + +GBool PSOutputDev::radialShadedFill(GfxState *state, GfxRadialShading *shading, double /*sMin*/, double /*sMax*/) { + double xMin, yMin, xMax, yMax; + double x0, y0, r0, x1, y1, r1, t0, t1; + double xa, ya, ra; + double sz, xz, yz, sMin, sMax, sa, ta; + double theta, alpha, a1, a2; + GBool enclosed; + int i; + + if (level == psLevel2Sep || level == psLevel3Sep) { + if (shading->getColorSpace()->getMode() != csDeviceCMYK) { + return gFalse; + } + processColors |= psProcessCMYK; + } + + // get the shading info + shading->getCoords(&x0, &y0, &r0, &x1, &y1, &r1); + t0 = shading->getDomain0(); + t1 = shading->getDomain1(); + + // Compute the point at which r(s) = 0; check for the enclosed + // circles case; and compute the angles for the tangent lines. + if (r0 == r1) { + enclosed = x0 == x1 && y0 == y1; + theta = 0; + sz = 0; // make gcc happy + } else { + sz = -r0 / (r1 - r0); + xz = x0 + sz * (x1 - x0); + yz = y0 + sz * (y1 - y0); + enclosed = (xz - x0) * (xz - x0) + (yz - y0) * (yz - y0) <= r0 * r0; + theta = asin(r0 / sqrt((x0 - xz) * (x0 - xz) + (y0 - yz) * (y0 - yz))); + if (r0 > r1) { + theta = -theta; + } + } + if (enclosed) { + a1 = 0; + a2 = 360; + } else { + alpha = atan2(y1 - y0, x1 - x0); + a1 = (180 / M_PI) * (alpha + theta) + 90; + a2 = (180 / M_PI) * (alpha - theta) - 90; + while (a2 < a1) { + a2 += 360; + } + } + + // compute the (possibly extended) s range + state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); + if (enclosed) { + sMin = 0; + sMax = 1; + } else { + sMin = 1; + sMax = 0; + // solve for x(s) + r(s) = xMin + if ((x1 + r1) - (x0 + r0) != 0) { + sa = (xMin - (x0 + r0)) / ((x1 + r1) - (x0 + r0)); + if (sa < sMin) { + sMin = sa; + } else if (sa > sMax) { + sMax = sa; + } + } + // solve for x(s) - r(s) = xMax + if ((x1 - r1) - (x0 - r0) != 0) { + sa = (xMax - (x0 - r0)) / ((x1 - r1) - (x0 - r0)); + if (sa < sMin) { + sMin = sa; + } else if (sa > sMax) { + sMax = sa; + } + } + // solve for y(s) + r(s) = yMin + if ((y1 + r1) - (y0 + r0) != 0) { + sa = (yMin - (y0 + r0)) / ((y1 + r1) - (y0 + r0)); + if (sa < sMin) { + sMin = sa; + } else if (sa > sMax) { + sMax = sa; + } + } + // solve for y(s) - r(s) = yMax + if ((y1 - r1) - (y0 - r0) != 0) { + sa = (yMax - (y0 - r0)) / ((y1 - r1) - (y0 - r0)); + if (sa < sMin) { + sMin = sa; + } else if (sa > sMax) { + sMax = sa; + } + } + // check against sz + if (r0 < r1) { + if (sMin < sz) { + sMin = sz; + } + } else if (r0 > r1) { + if (sMax > sz) { + sMax = sz; + } + } + // check the 'extend' flags + if (!shading->getExtend0() && sMin < 0) { + sMin = 0; + } + if (!shading->getExtend1() && sMax > 1) { + sMax = 1; + } + } + + // generate the PS code + writePSFmt("/x0 {0:.6g} def\n", x0); + writePSFmt("/x1 {0:.6g} def\n", x1); + writePSFmt("/dx {0:.6g} def\n", x1 - x0); + writePSFmt("/y0 {0:.6g} def\n", y0); + writePSFmt("/y1 {0:.6g} def\n", y1); + writePSFmt("/dy {0:.6g} def\n", y1 - y0); + writePSFmt("/r0 {0:.6g} def\n", r0); + writePSFmt("/r1 {0:.6g} def\n", r1); + writePSFmt("/dr {0:.6g} def\n", r1 - r0); + writePSFmt("/t0 {0:.6g} def\n", t0); + writePSFmt("/t1 {0:.6g} def\n", t1); + writePSFmt("/dt {0:.6g} def\n", t1 - t0); + writePSFmt("/n {0:d} def\n", shading->getColorSpace()->getNComps()); + writePSFmt("/encl {0:s} def\n", enclosed ? "true" : "false"); + writePSFmt("/a1 {0:.6g} def\n", a1); + writePSFmt("/a2 {0:.6g} def\n", a2); + if (shading->getNFuncs() == 1) { + writePS("/func "); + cvtFunction(shading->getFunc(0)); + writePS("def\n"); + } else { + writePS("/func {\n"); + for (i = 0; i < shading->getNFuncs(); ++i) { + if (i < shading->getNFuncs() - 1) { + writePS("dup\n"); + } + cvtFunction(shading->getFunc(i)); + writePS("exec\n"); + if (i < shading->getNFuncs() - 1) { + writePS("exch\n"); + } + } + writePS("} def\n"); + } + writePSFmt("{0:.6g} {1:.6g} 0 radialSH\n", sMin, sMax); + + // extend the 'enclosed' case + if (enclosed) { + // extend the smaller circle + if ((shading->getExtend0() && r0 <= r1) || + (shading->getExtend1() && r1 < r0)) { + if (r0 <= r1) { + ta = t0; + ra = r0; + xa = x0; + ya = y0; + } else { + ta = t1; + ra = r1; + xa = x1; + ya = y1; + } + if (level == psLevel2Sep || level == psLevel3Sep) { + writePSFmt("{0:.6g} radialCol aload pop k\n", ta); + } else { + writePSFmt("{0:.6g} radialCol sc\n", ta); + } + writePSFmt("{0:.6g} {1:.6g} {2:.6g} 0 360 arc h f*\n", xa, ya, ra); + } + + // extend the larger circle + if ((shading->getExtend0() && r0 > r1) || + (shading->getExtend1() && r1 >= r0)) { + if (r0 > r1) { + ta = t0; + ra = r0; + xa = x0; + ya = y0; + } else { + ta = t1; + ra = r1; + xa = x1; + ya = y1; + } + if (level == psLevel2Sep || level == psLevel3Sep) { + writePSFmt("{0:.6g} radialCol aload pop k\n", ta); + } else { + writePSFmt("{0:.6g} radialCol sc\n", ta); + } + writePSFmt("{0:.6g} {1:.6g} {2:.6g} 0 360 arc h\n", xa, ya, ra); + writePSFmt("{0:.6g} {1:.6g} m {2:.6g} {3:.6g} l {4:.6g} {5:.6g} l {6:.6g} {7:.6g} l h f*\n", + xMin, yMin, xMin, yMax, xMax, yMax, xMax, yMin); + } + } + + return gTrue; +} + +void PSOutputDev::clip(GfxState *state) { + doPath(state->getPath()); + writePS("W\n"); +} + +void PSOutputDev::eoClip(GfxState *state) { + doPath(state->getPath()); + writePS("W*\n"); +} + +void PSOutputDev::clipToStrokePath(GfxState *state) { + doPath(state->getPath()); + writePS("Ws\n"); +} + +void PSOutputDev::doPath(GfxPath *path) { + GfxSubpath *subpath; + double x0, y0, x1, y1, x2, y2, x3, y3, x4, y4; + int n, m, i, j; + + n = path->getNumSubpaths(); + + if (n == 1 && path->getSubpath(0)->getNumPoints() == 5) { + subpath = path->getSubpath(0); + x0 = subpath->getX(0); + y0 = subpath->getY(0); + x4 = subpath->getX(4); + y4 = subpath->getY(4); + if (x4 == x0 && y4 == y0) { + x1 = subpath->getX(1); + y1 = subpath->getY(1); + x2 = subpath->getX(2); + y2 = subpath->getY(2); + x3 = subpath->getX(3); + y3 = subpath->getY(3); + if (x0 == x1 && x2 == x3 && y0 == y3 && y1 == y2) { + writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n", + x0 < x2 ? x0 : x2, y0 < y1 ? y0 : y1, + fabs(x2 - x0), fabs(y1 - y0)); + return; + } else if (x0 == x3 && x1 == x2 && y0 == y1 && y2 == y3) { + writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n", + x0 < x1 ? x0 : x1, y0 < y2 ? y0 : y2, + fabs(x1 - x0), fabs(y2 - y0)); + return; + } + } + } + + for (i = 0; i < n; ++i) { + subpath = path->getSubpath(i); + m = subpath->getNumPoints(); + writePSFmt("{0:.6g} {1:.6g} m\n", subpath->getX(0), subpath->getY(0)); + j = 1; + while (j < m) { + if (subpath->getCurve(j)) { + writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g} c\n", + subpath->getX(j), subpath->getY(j), + subpath->getX(j+1), subpath->getY(j+1), + subpath->getX(j+2), subpath->getY(j+2)); + j += 3; + } else { + writePSFmt("{0:.6g} {1:.6g} l\n", subpath->getX(j), subpath->getY(j)); + ++j; + } + } + if (subpath->isClosed()) { + writePS("h\n"); + } + } +} + +void PSOutputDev::drawString(GfxState *state, GooString *s) { + GfxFont *font; + int wMode; + Gushort *codeToGID; + GooString *s2; + double dx, dy, dx2, dy2, originX, originY; + char *p; + UnicodeMap *uMap; + CharCode code; + Unicode *u; + char buf[8]; + int len, nChars, uLen, n, m, i, j; + + // for pdftohtml, output PS without text + if( displayText == gFalse ) + return; + + // check for invisible text -- this is used by Acrobat Capture + if (state->getRender() == 3) { + return; + } + + // ignore empty strings + if (s->getLength() == 0) { + return; + } + + // get the font + if (!(font = state->getFont())) { + return; + } + wMode = font->getWMode(); + + // check for a subtitute 16-bit font + uMap = NULL; + codeToGID = NULL; + if (font->isCIDFont()) { + for (i = 0; i < font16EncLen; ++i) { + if (font->getID()->num == font16Enc[i].fontID.num && + font->getID()->gen == font16Enc[i].fontID.gen) { + uMap = globalParams->getUnicodeMap(font16Enc[i].enc); + break; + } + } + + // check for a code-to-GID map + } else { + for (i = 0; i < font8InfoLen; ++i) { + if (font->getID()->num == font8Info[i].fontID.num && + font->getID()->gen == font8Info[i].fontID.gen) { + codeToGID = font8Info[i].codeToGID; + break; + } + } + } + + // compute width of chars in string, ignoring char spacing and word + // spacing -- the Tj operator will adjust for the metrics of the + // font that's actually used + dx = dy = 0; + nChars = 0; + p = s->getCString(); + len = s->getLength(); + s2 = new GooString(); + while (len > 0) { + n = font->getNextChar(p, len, &code, + &u, &uLen, + &dx2, &dy2, &originX, &originY); + if (font->isCIDFont()) { + if (uMap) { + for (i = 0; i < uLen; ++i) { + m = uMap->mapUnicode(u[i], buf, (int)sizeof(buf)); + for (j = 0; j < m; ++j) { + s2->append(buf[j]); + } + } + //~ this really needs to get the number of chars in the target + //~ encoding - which may be more than the number of Unicode + //~ chars + nChars += uLen; + } else { + s2->append((char)((code >> 8) & 0xff)); + s2->append((char)(code & 0xff)); + ++nChars; + } + } else { + if (!codeToGID || codeToGID[code]) { + s2->append((char)code); + } + } + dx += dx2; + dy += dy2; + p += n; + len -= n; + } + dx *= state->getFontSize() * state->getHorizScaling(); + dy *= state->getFontSize(); + if (uMap) { + uMap->decRefCnt(); + } + + if (s2->getLength() > 0) { + writePSString(s2); + if (font->isCIDFont()) { + if (wMode) { + writePSFmt(" {0:d} {1:.6g} Tj16V\n", nChars, dy); + } else { + writePSFmt(" {0:d} {1:.6g} Tj16\n", nChars, dx); + } + } else { + writePSFmt(" {0:.6g} Tj\n", dx); + } + } + delete s2; + + if (state->getRender() & 4 || haveCSPattern) { + haveTextClip = gTrue; + } +} + +void PSOutputDev::beginTextObject(GfxState *state) { + if (state->getFillColorSpace()->getMode() == csPattern) { + saveState(state); + haveCSPattern = gTrue; + writePS("true Tp\n"); + } +} + +void PSOutputDev::endTextObject(GfxState *state) { + if (haveCSPattern) { + if (haveTextClip) { + writePS("Tclip*\n"); + haveTextClip = gFalse; + if (state->getFillColorSpace()->getMode() != csPattern) { + double cxMin, cyMin, cxMax, cyMax; + state->getClipBBox(&cxMin, &cyMin, &cxMax, &cyMax); + writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n", + cxMin, cyMin, + cxMax, cyMax); + writePS("f*\n"); + restoreState(state); + updateFillColor(state); + } + } + haveCSPattern = gFalse; + } else if (haveTextClip) { + writePS("Tclip\n"); + haveTextClip = gFalse; + } +} + +void PSOutputDev::endMaskClip(GfxState * state) { + writePS("pdfImClipEnd\n"); +} + +void PSOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool interpolate, GBool inlineImg) { + int len; + + len = height * ((width + 7) / 8); + if (state->getFillColorSpace()->getMode() == csPattern && (level != psLevel1 && level != psLevel1Sep)) { + maskToClippingPath(str, width, height, invert); + } else { + switch (level) { + case psLevel1: + case psLevel1Sep: + doImageL1(ref, NULL, invert, inlineImg, str, width, height, len, + NULL, NULL, 0, 0, gFalse); + break; + case psLevel2: + case psLevel2Sep: + doImageL2(ref, NULL, invert, inlineImg, str, width, height, len, + NULL, NULL, 0, 0, gFalse); + break; + case psLevel3: + case psLevel3Sep: + doImageL3(ref, NULL, invert, inlineImg, str, width, height, len, + NULL, NULL, 0, 0, gFalse); + break; + } + } +} + +void PSOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap *colorMap, + GBool interpolate, int *maskColors, GBool inlineImg) { + int len; + + len = height * ((width * colorMap->getNumPixelComps() * + colorMap->getBits() + 7) / 8); + switch (level) { + case psLevel1: + doImageL1(ref, colorMap, gFalse, inlineImg, str, + width, height, len, maskColors, NULL, 0, 0, gFalse); + break; + case psLevel1Sep: + //~ handle indexed, separation, ... color spaces + doImageL1Sep(ref, colorMap, gFalse, inlineImg, str, + width, height, len, maskColors, NULL, 0, 0, gFalse); + break; + case psLevel2: + case psLevel2Sep: + doImageL2(ref, colorMap, gFalse, inlineImg, str, + width, height, len, maskColors, NULL, 0, 0, gFalse); + break; + case psLevel3: + case psLevel3Sep: + doImageL3(ref, colorMap, gFalse, inlineImg, str, + width, height, len, maskColors, NULL, 0, 0, gFalse); + break; + } + t3Cacheable = gFalse; +} + +void PSOutputDev::drawMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, + int maskWidth, int maskHeight, + GBool maskInvert, GBool maskInterpolate) { + int len; + + len = height * ((width * colorMap->getNumPixelComps() * + colorMap->getBits() + 7) / 8); + switch (level) { + case psLevel1: + doImageL1(ref, colorMap, gFalse, gFalse, str, width, height, len, + NULL, maskStr, maskWidth, maskHeight, maskInvert); + break; + case psLevel1Sep: + //~ handle indexed, separation, ... color spaces + doImageL1Sep(ref, colorMap, gFalse, gFalse, str, width, height, len, + NULL, maskStr, maskWidth, maskHeight, maskInvert); + break; + case psLevel2: + case psLevel2Sep: + doImageL2(ref, colorMap, gFalse, gFalse, str, width, height, len, + NULL, maskStr, maskWidth, maskHeight, maskInvert); + break; + case psLevel3: + case psLevel3Sep: + doImageL3(ref, colorMap, gFalse, gFalse, str, width, height, len, + NULL, maskStr, maskWidth, maskHeight, maskInvert); + break; + } + t3Cacheable = gFalse; +} + +void PSOutputDev::doImageL1(Object *ref, GfxImageColorMap *colorMap, + GBool invert, GBool inlineImg, + Stream *str, int width, int height, int len, + int *maskColors, Stream *maskStr, + int maskWidth, int maskHeight, GBool maskInvert) { + ImageStream *imgStr; + Guchar pixBuf[gfxColorMaxComps]; + GfxGray gray; + int col, x, y, c, i; + char hexBuf[32*2 + 2]; // 32 values X 2 chars/value + line ending + null + Guchar digit, grayValue; + const GBool useBinary = globalParams->getPSBinary(); + + // explicit masking + if (maskStr && !(maskColors && colorMap)) { + maskToClippingPath(maskStr, maskWidth, maskHeight, maskInvert); + } + + if ((inType3Char || preload) && !colorMap) { + if (inlineImg) { + // create an array + str = new FixedLengthEncoder(str, len); + str = new ASCIIHexEncoder(str); + str->reset(); + col = 0; + writePS("[<"); + do { + do { + c = str->getChar(); + } while (c == '\n' || c == '\r'); + if (c == '>' || c == EOF) { + break; + } + writePSChar(c); + ++col; + // each line is: "<...data...><eol>" + // so max data length = 255 - 4 = 251 + // but make it 240 just to be safe + // chunks are 2 bytes each, so we need to stop on an even col number + if (col == 240) { + writePS(">\n<"); + col = 0; + } + } while (c != '>' && c != EOF); + writePS(">]\n"); + writePS("0\n"); + str->close(); + delete str; + } else { + // make sure the image is setup, it sometimes is not like on bug #17645 + setupImage(ref->getRef(), str); + // set up to use the array already created by setupImages() + writePSFmt("ImData_{0:d}_{1:d} 0 0\n", ref->getRefNum(), ref->getRefGen()); + } + } + + // image/imagemask command + if ((inType3Char || preload) && !colorMap) { + writePSFmt("{0:d} {1:d} {2:s} [{3:d} 0 0 {4:d} 0 {5:d}] pdfImM1a\n", + width, height, invert ? "true" : "false", + width, -height, height); + } else if (colorMap) { + writePSFmt("{0:d} {1:d} 8 [{2:d} 0 0 {3:d} 0 {4:d}] pdfIm1{5:s}\n", + width, height, + width, -height, height, + useBinary ? "Bin" : ""); + } else { + writePSFmt("{0:d} {1:d} {2:s} [{3:d} 0 0 {4:d} 0 {5:d}] pdfImM1{6:s}\n", + width, height, invert ? "true" : "false", + width, -height, height, + useBinary ? "Bin" : ""); + } + + // image data + if (!((inType3Char || preload) && !colorMap)) { + + if (colorMap) { + + // set up to process the data stream + imgStr = new ImageStream(str, width, colorMap->getNumPixelComps(), + colorMap->getBits()); + imgStr->reset(); + + // process the data stream + i = 0; + for (y = 0; y < height; ++y) { + + // write the line + for (x = 0; x < width; ++x) { + imgStr->getPixel(pixBuf); + colorMap->getGray(pixBuf, &gray); + grayValue = colToByte(gray); + if (useBinary) { + hexBuf[i++] = grayValue; + } else { + digit = grayValue / 16; + hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); + digit = grayValue % 16; + hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); + } + if (i >= 64) { + if (!useBinary) { + hexBuf[i++] = '\n'; + } + writePSBuf(hexBuf, i); + i = 0; + } + } + } + if (i != 0) { + if (!useBinary) { + hexBuf[i++] = '\n'; + } + writePSBuf(hexBuf, i); + } + str->close(); + delete imgStr; + + // imagemask + } else { + str->reset(); + i = 0; + for (y = 0; y < height; ++y) { + for (x = 0; x < width; x += 8) { + grayValue = str->getChar(); + if (useBinary) { + hexBuf[i++] = grayValue; + } else { + digit = grayValue / 16; + hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); + digit = grayValue % 16; + hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0'); + } + if (i >= 64) { + if (!useBinary) { + hexBuf[i++] = '\n'; + } + writePSBuf(hexBuf, i); + i = 0; + } + } + } + if (i != 0) { + if (!useBinary) { + hexBuf[i++] = '\n'; + } + writePSBuf(hexBuf, i); + } + str->close(); + } + } + + if (maskStr && !(maskColors && colorMap)) { + writePS("pdfImClipEnd\n"); + } +} + +void PSOutputDev::doImageL1Sep(Object *ref, GfxImageColorMap *colorMap, + GBool invert, GBool inlineImg, + Stream *str, int width, int height, int len, + int *maskColors, Stream *maskStr, + int maskWidth, int maskHeight, GBool maskInvert) { + ImageStream *imgStr; + Guchar *lineBuf; + Guchar pixBuf[gfxColorMaxComps]; + GfxCMYK cmyk; + int x, y, i, comp; + GBool checkProcessColor; + char hexBuf[32*2 + 2]; // 32 values X 2 chars/value + line ending + null + Guchar digit; + const GBool useBinary = globalParams->getPSBinary(); + + // explicit masking + if (maskStr && !(maskColors && colorMap)) { + maskToClippingPath(maskStr, maskWidth, maskHeight, maskInvert); + } + + // width, height, matrix, bits per component + writePSFmt("{0:d} {1:d} 8 [{2:d} 0 0 {3:d} 0 {4:d}] pdfIm1Sep{5:s}\n", + width, height, + width, -height, height, + useBinary ? "Bin" : ""); + + // allocate a line buffer + lineBuf = (Guchar *)gmallocn(width, 4); + + // set up to process the data stream + imgStr = new ImageStream(str, width, colorMap->getNumPixelComps(), + colorMap->getBits()); + imgStr->reset(); + + // process the data stream + checkProcessColor = gTrue; + i = 0; + for (y = 0; y < height; ++y) { + + // read the line + if (checkProcessColor) { + checkProcessColor = (((psProcessCyan | psProcessMagenta | psProcessYellow | psProcessBlack) & ~processColors) != 0); + } + if (checkProcessColor) { + for (x = 0; x < width; ++x) { + imgStr->getPixel(pixBuf); + colorMap->getCMYK(pixBuf, &cmyk); + lineBuf[4*x+0] = colToByte(cmyk.c); + lineBuf[4*x+1] = colToByte(cmyk.m); + lineBuf[4*x+2] = colToByte(cmyk.y); + lineBuf[4*x+3] = colToByte(cmyk.k); + addProcessColor(colToDbl(cmyk.c), colToDbl(cmyk.m), + colToDbl(cmyk.y), colToDbl(cmyk.k)); + } + } else { + for (x = 0; x < width; ++x) { + imgStr->getPixel(pixBuf); + colorMap->getCMYK(pixBuf, &cmyk); + lineBuf[4*x+0] = colToByte(cmyk.c); + lineBuf[4*x+1] = colToByte(cmyk.m); + lineBuf[4*x+2] = colToByte(cmyk.y); + lineBuf[4*x+3] = colToByte(cmyk.k); + } + } + + // write one line of each color component + if (useBinary) { + for (comp = 0; comp < 4; ++comp) { + for (x = 0; x < width; ++x) { + hexBuf[i++] = lineBuf[4*x + comp]; + if (i >= 64) { + writePSBuf(hexBuf, i); + i = 0; + } + } + } + } else { + for (comp = 0; comp < 4; ++comp) { + for (x = 0; x < width; ++x) { + digit = lineBuf[4*x + comp] / 16; + hexBuf[i++] = digit + ((digit >= 10)? 'a'-10: '0'); + digit = lineBuf[4*x + comp] % 16; + hexBuf[i++] = digit + ((digit >= 10)? 'a'-10: '0'); + if (i >= 64) { + hexBuf[i++] = '\n'; + writePSBuf(hexBuf, i); + i = 0; + } + } + } + } + } + + if (i != 0) { + if (!useBinary) { + hexBuf[i++] = '\n'; + } + writePSBuf(hexBuf, i); + } + + str->close(); + delete imgStr; + gfree(lineBuf); + + if (maskStr && !(maskColors && colorMap)) { + writePS("pdfImClipEnd\n"); + } +} + +void PSOutputDev::maskToClippingPath(Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert) { + ImageStream *imgStr; + Guchar *line; + PSOutImgClipRect *rects0, *rects1, *rectsTmp, *rectsOut; + int rects0Len, rects1Len, rectsSize, rectsOutLen, rectsOutSize; + GBool emitRect, addRect, extendRect; + int i, x0, x1, y, maskXor; + + imgStr = new ImageStream(maskStr, maskWidth, 1, 1); + imgStr->reset(); + rects0Len = rects1Len = rectsOutLen = 0; + rectsSize = rectsOutSize = 64; + rects0 = (PSOutImgClipRect *)gmallocn(rectsSize, sizeof(PSOutImgClipRect)); + rects1 = (PSOutImgClipRect *)gmallocn(rectsSize, sizeof(PSOutImgClipRect)); + rectsOut = (PSOutImgClipRect *)gmallocn(rectsOutSize, sizeof(PSOutImgClipRect)); + maskXor = maskInvert ? 1 : 0; + for (y = 0; y < maskHeight; ++y) { + if (!(line = imgStr->getLine())) { + break; + } + i = 0; + rects1Len = 0; + for (x0 = 0; x0 < maskWidth && (line[x0] ^ maskXor); ++x0) ; + for (x1 = x0; x1 < maskWidth && !(line[x1] ^ maskXor); ++x1) ; + while (x0 < maskWidth || i < rects0Len) { + emitRect = addRect = extendRect = gFalse; + if (x0 >= maskWidth) { + emitRect = gTrue; + } else if (i >= rects0Len) { + addRect = gTrue; + } else if (rects0[i].x0 < x0) { + emitRect = gTrue; + } else if (x0 < rects0[i].x0) { + addRect = gTrue; + } else if (rects0[i].x1 == x1) { + extendRect = gTrue; + } else { + emitRect = addRect = gTrue; + } + if (emitRect) { + if (rectsOutLen == rectsOutSize) { + rectsOutSize *= 2; + rectsOut = (PSOutImgClipRect *)greallocn(rectsOut, rectsOutSize, sizeof(PSOutImgClipRect)); + } + rectsOut[rectsOutLen].x0 = rects0[i].x0; + rectsOut[rectsOutLen].x1 = rects0[i].x1; + rectsOut[rectsOutLen].y0 = maskHeight - y - 1; + rectsOut[rectsOutLen].y1 = maskHeight - rects0[i].y0 - 1; + ++rectsOutLen; + ++i; + } + if (addRect || extendRect) { + if (rects1Len == rectsSize) { + rectsSize *= 2; + rects0 = (PSOutImgClipRect *)greallocn(rects0, rectsSize, sizeof(PSOutImgClipRect)); + rects1 = (PSOutImgClipRect *)greallocn(rects1, rectsSize, sizeof(PSOutImgClipRect)); + } + rects1[rects1Len].x0 = x0; + rects1[rects1Len].x1 = x1; + if (addRect) { + rects1[rects1Len].y0 = y; + } + if (extendRect) { + rects1[rects1Len].y0 = rects0[i].y0; + ++i; + } + ++rects1Len; + for (x0 = x1; x0 < maskWidth && (line[x0] ^ maskXor); ++x0) ; + for (x1 = x0; x1 < maskWidth && !(line[x1] ^ maskXor); ++x1) ; + } + } + rectsTmp = rects0; + rects0 = rects1; + rects1 = rectsTmp; + i = rects0Len; + rects0Len = rects1Len; + rects1Len = i; + } + for (i = 0; i < rects0Len; ++i) { + if (rectsOutLen == rectsOutSize) { + rectsOutSize *= 2; + rectsOut = (PSOutImgClipRect *)greallocn(rectsOut, rectsOutSize, sizeof(PSOutImgClipRect)); + } + rectsOut[rectsOutLen].x0 = rects0[i].x0; + rectsOut[rectsOutLen].x1 = rects0[i].x1; + rectsOut[rectsOutLen].y0 = maskHeight - y - 1; + rectsOut[rectsOutLen].y1 = maskHeight - rects0[i].y0 - 1; + ++rectsOutLen; + } + if (rectsOutLen < 65536/4) { + writePSFmt("{0:d} array 0\n", rectsOutLen * 4); + for (i = 0; i < rectsOutLen; ++i) { + writePSFmt("[{0:d} {1:d} {2:d} {3:d}] pr\n", + rectsOut[i].x0, rectsOut[i].y0, + rectsOut[i].x1 - rectsOut[i].x0, + rectsOut[i].y1 - rectsOut[i].y0); + } + writePSFmt("pop {0:d} {1:d} pdfImClip\n", maskWidth, maskHeight); + } else { + // would be over the limit of array size. + // make each rectangle path and clip. + writePS("gsave newpath\n"); + for (i = 0; i < rectsOutLen; ++i) { + writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n", + ((double)rectsOut[i].x0)/maskWidth, + ((double)rectsOut[i].y0)/maskHeight, + ((double)(rectsOut[i].x1 - rectsOut[i].x0))/maskWidth, + ((double)(rectsOut[i].y1 - rectsOut[i].y0))/maskHeight); + } + writePS("clip\n"); + } + gfree(rectsOut); + gfree(rects0); + gfree(rects1); + delete imgStr; + maskStr->close(); +} + +void PSOutputDev::doImageL2(Object *ref, GfxImageColorMap *colorMap, + GBool invert, GBool inlineImg, + Stream *str, int width, int height, int len, + int *maskColors, Stream *maskStr, + int maskWidth, int maskHeight, GBool maskInvert) { + Stream *str2; + ImageStream *imgStr; + Guchar *line; + PSOutImgClipRect *rects0, *rects1, *rectsTmp, *rectsOut; + int rects0Len, rects1Len, rectsSize, rectsOutLen, rectsOutSize; + GBool emitRect, addRect, extendRect; + GooString *s; + int n, numComps; + GBool useRLE, useASCII, useASCIIHex, useCompressed; + GfxSeparationColorSpace *sepCS; + GfxColor color; + GfxCMYK cmyk; + int c; + int col, i, j, x0, x1, y; + char dataBuf[4096]; + + rectsOutLen = 0; + + // color key masking + if (maskColors && colorMap && !inlineImg) { + // can't read the stream twice for inline images -- but masking + // isn't allowed with inline images anyway + numComps = colorMap->getNumPixelComps(); + imgStr = new ImageStream(str, width, numComps, colorMap->getBits()); + imgStr->reset(); + rects0Len = rects1Len = 0; + rectsSize = rectsOutSize = 64; + rects0 = (PSOutImgClipRect *)gmallocn(rectsSize, sizeof(PSOutImgClipRect)); + rects1 = (PSOutImgClipRect *)gmallocn(rectsSize, sizeof(PSOutImgClipRect)); + rectsOut = (PSOutImgClipRect *)gmallocn(rectsOutSize, + sizeof(PSOutImgClipRect)); + for (y = 0; y < height; ++y) { + if (!(line = imgStr->getLine())) { + break; + } + i = 0; + rects1Len = 0; + for (x0 = 0; x0 < width; ++x0) { + for (j = 0; j < numComps; ++j) { + if (line[x0*numComps+j] < maskColors[2*j] || + line[x0*numComps+j] > maskColors[2*j+1]) { + break; + } + } + if (j < numComps) { + break; + } + } + for (x1 = x0; x1 < width; ++x1) { + for (j = 0; j < numComps; ++j) { + if (line[x1*numComps+j] < maskColors[2*j] || + line[x1*numComps+j] > maskColors[2*j+1]) { + break; + } + } + if (j == numComps) { + break; + } + } + while (x0 < width || i < rects0Len) { + emitRect = addRect = extendRect = gFalse; + if (x0 >= width) { + emitRect = gTrue; + } else if (i >= rects0Len) { + addRect = gTrue; + } else if (rects0[i].x0 < x0) { + emitRect = gTrue; + } else if (x0 < rects0[i].x0) { + addRect = gTrue; + } else if (rects0[i].x1 == x1) { + extendRect = gTrue; + } else { + emitRect = addRect = gTrue; + } + if (emitRect) { + if (rectsOutLen == rectsOutSize) { + rectsOutSize *= 2; + rectsOut = (PSOutImgClipRect *)greallocn(rectsOut, rectsOutSize, + sizeof(PSOutImgClipRect)); + } + rectsOut[rectsOutLen].x0 = rects0[i].x0; + rectsOut[rectsOutLen].x1 = rects0[i].x1; + rectsOut[rectsOutLen].y0 = height - y - 1; + rectsOut[rectsOutLen].y1 = height - rects0[i].y0 - 1; + ++rectsOutLen; + ++i; + } + if (addRect || extendRect) { + if (rects1Len == rectsSize) { + rectsSize *= 2; + rects0 = (PSOutImgClipRect *)greallocn(rects0, rectsSize, + sizeof(PSOutImgClipRect)); + rects1 = (PSOutImgClipRect *)greallocn(rects1, rectsSize, + sizeof(PSOutImgClipRect)); + } + rects1[rects1Len].x0 = x0; + rects1[rects1Len].x1 = x1; + if (addRect) { + rects1[rects1Len].y0 = y; + } + if (extendRect) { + rects1[rects1Len].y0 = rects0[i].y0; + ++i; + } + ++rects1Len; + for (x0 = x1; x0 < width; ++x0) { + for (j = 0; j < numComps; ++j) { + if (line[x0*numComps+j] < maskColors[2*j] || + line[x0*numComps+j] > maskColors[2*j+1]) { + break; + } + } + if (j < numComps) { + break; + } + } + for (x1 = x0; x1 < width; ++x1) { + for (j = 0; j < numComps; ++j) { + if (line[x1*numComps+j] < maskColors[2*j] || + line[x1*numComps+j] > maskColors[2*j+1]) { + break; + } + } + if (j == numComps) { + break; + } + } + } + } + rectsTmp = rects0; + rects0 = rects1; + rects1 = rectsTmp; + i = rects0Len; + rects0Len = rects1Len; + rects1Len = i; + } + for (i = 0; i < rects0Len; ++i) { + if (rectsOutLen == rectsOutSize) { + rectsOutSize *= 2; + rectsOut = (PSOutImgClipRect *)greallocn(rectsOut, rectsOutSize, + sizeof(PSOutImgClipRect)); + } + rectsOut[rectsOutLen].x0 = rects0[i].x0; + rectsOut[rectsOutLen].x1 = rects0[i].x1; + rectsOut[rectsOutLen].y0 = height - y - 1; + rectsOut[rectsOutLen].y1 = height - rects0[i].y0 - 1; + ++rectsOutLen; + } + if (rectsOutLen < 65536/4) { + writePSFmt("{0:d} array 0\n", rectsOutLen * 4); + for (i = 0; i < rectsOutLen; ++i) { + writePSFmt("[{0:d} {1:d} {2:d} {3:d}] pr\n", + rectsOut[i].x0, rectsOut[i].y0, + rectsOut[i].x1 - rectsOut[i].x0, + rectsOut[i].y1 - rectsOut[i].y0); + } + writePSFmt("pop {0:d} {1:d} pdfImClip\n", width, height); + } else { + // would be over the limit of array size. + // make each rectangle path and clip. + writePS("gsave newpath\n"); + for (i = 0; i < rectsOutLen; ++i) { + writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n", + ((double)rectsOut[i].x0)/width, + ((double)rectsOut[i].y0)/height, + ((double)(rectsOut[i].x1 - rectsOut[i].x0))/width, + ((double)(rectsOut[i].y1 - rectsOut[i].y0))/height); + } + writePS("clip\n"); + } + gfree(rectsOut); + gfree(rects0); + gfree(rects1); + delete imgStr; + str->close(); + + // explicit masking + } else if (maskStr) { + maskToClippingPath(maskStr, maskWidth, maskHeight, maskInvert); + } + + // color space + if (colorMap) { + dumpColorSpaceL2(colorMap->getColorSpace(), gFalse, gTrue, gFalse); + writePS(" setcolorspace\n"); + } + + useASCIIHex = globalParams->getPSASCIIHex(); + + // set up the image data + if (mode == psModeForm || inType3Char || preload) { + if (inlineImg) { + // create an array + str2 = new FixedLengthEncoder(str, len); + str2 = new RunLengthEncoder(str2); + if (useASCIIHex) { + str2 = new ASCIIHexEncoder(str2); + } else { + str2 = new ASCII85Encoder(str2); + } + str2->reset(); + col = 0; + writePS((char *)(useASCIIHex ? "[<" : "[<~")); + do { + do { + c = str2->getChar(); + } while (c == '\n' || c == '\r'); + if (c == (useASCIIHex ? '>' : '~') || c == EOF) { + break; + } + if (c == 'z') { + writePSChar(c); + ++col; + } else { + writePSChar(c); + ++col; + for (i = 1; i <= (useASCIIHex ? 1 : 4); ++i) { + do { + c = str2->getChar(); + } while (c == '\n' || c == '\r'); + if (c == (useASCIIHex ? '>' : '~') || c == EOF) { + break; + } + writePSChar(c); + ++col; + } + } + // each line is: "<~...data...~><eol>" + // so max data length = 255 - 6 = 249 + // chunks are 1 or 5 bytes each, so we have to stop at 245 + // but make it 240 just to be safe + if (col > 240) { + writePS((char *)(useASCIIHex ? ">\n<" : "~>\n<~")); + col = 0; + } + } while (c != (useASCIIHex ? '>' : '~') && c != EOF); + writePS((char *)(useASCIIHex ? ">\n" : "~>\n")); + // add an extra entry because the RunLengthDecode filter may + // read past the end + writePS("<>]\n"); + writePS("0\n"); + str2->close(); + delete str2; + } else { + // make sure the image is setup, it sometimes is not like on bug #17645 + setupImage(ref->getRef(), str); + // set up to use the array already created by setupImages() + writePSFmt("ImData_{0:d}_{1:d} 0 0\n",ref->getRefNum(), ref->getRefGen()); + } + } + + // image dictionary + writePS("<<\n /ImageType 1\n"); + + // width, height, matrix, bits per component + writePSFmt(" /Width {0:d}\n", width); + writePSFmt(" /Height {0:d}\n", height); + writePSFmt(" /ImageMatrix [{0:d} 0 0 {1:d} 0 {2:d}]\n", + width, -height, height); + if (colorMap && colorMap->getColorSpace()->getMode() == csDeviceN) { + writePS(" /BitsPerComponent 8\n"); + } else { + writePSFmt(" /BitsPerComponent {0:d}\n", + colorMap ? colorMap->getBits() : 1); + } + + // decode + if (colorMap) { + writePS(" /Decode ["); + if ((level == psLevel2Sep || level == psLevel3Sep) && + colorMap->getColorSpace()->getMode() == csSeparation) { + // this matches up with the code in the pdfImSep operator + n = (1 << colorMap->getBits()) - 1; + writePSFmt("{0:.4g} {1:.4g}", colorMap->getDecodeLow(0) * n, + colorMap->getDecodeHigh(0) * n); + } else if (colorMap->getColorSpace()->getMode() == csDeviceN) { + numComps = ((GfxDeviceNColorSpace *)colorMap->getColorSpace())-> + getAlt()->getNComps(); + for (i = 0; i < numComps; ++i) { + if (i > 0) { + writePS(" "); + } + writePS("0 1"); + } + } else { + numComps = colorMap->getNumPixelComps(); + for (i = 0; i < numComps; ++i) { + if (i > 0) { + writePS(" "); + } + writePSFmt("{0:.4g} {1:.4g}", + colorMap->getDecodeLow(i), colorMap->getDecodeHigh(i)); + } + } + writePS("]\n"); + } else { + writePSFmt(" /Decode [{0:d} {1:d}]\n", invert ? 1 : 0, invert ? 0 : 1); + } + + // data source + if (mode == psModeForm || inType3Char || preload) { + if (inlineImg) { + writePS(" /DataSource { 2 copy get exch 1 add exch }\n"); + } else { + writePS(" /DataSource { dup 65535 ge { pop 1 add 0 } if 2 index 2" + " index get 1 index get exch 1 add exch }\n"); + } + } else { + writePS(" /DataSource currentfile\n"); + } + + // filters + s = str->getPSFilter(level < psLevel2 ? 1 : level < psLevel3 ? 2 : 3, + " "); + if ((colorMap && colorMap->getColorSpace()->getMode() == csDeviceN) || + inlineImg || !s) { + useRLE = gTrue; + useASCII = !(mode == psModeForm || inType3Char || preload); + useCompressed = gFalse; + } else { + useRLE = gFalse; + useASCII = str->isBinary() && + !(mode == psModeForm || inType3Char || preload); + useCompressed = gTrue; + } + if (useASCII) { + writePSFmt(" /ASCII{0:s}Decode filter\n", + useASCIIHex ? "Hex" : "85"); + } + if (useRLE) { + writePS(" /RunLengthDecode filter\n"); + } + if (useCompressed) { + writePS(s->getCString()); + } + if (s) { + delete s; + } + + if (mode == psModeForm || inType3Char || preload) { + + // end of image dictionary + writePSFmt(">>\n{0:s}\n", colorMap ? "image" : "imagemask"); + + // get rid of the array and index + if (!inlineImg) writePS("pop "); + writePS("pop pop\n"); + + } else { + + // cut off inline image streams at appropriate length + if (inlineImg) { + str = new FixedLengthEncoder(str, len); + } else if (useCompressed) { + str = str->getUndecodedStream(); + } + + // recode DeviceN data + if (colorMap && colorMap->getColorSpace()->getMode() == csDeviceN) { + str = new DeviceNRecoder(str, width, height, colorMap); + } + + // add RunLengthEncode and ASCIIHex/85 encode filters + if (useRLE) { + str = new RunLengthEncoder(str); + } + if (useASCII) { + if (useASCIIHex) { + str = new ASCIIHexEncoder(str); + } else { + str = new ASCII85Encoder(str); + } + } + + // end of image dictionary + writePS(">>\n"); +#if OPI_SUPPORT + if (opi13Nest) { + if (inlineImg) { + // this can't happen -- OPI dictionaries are in XObjects + error(-1, "Internal: OPI in inline image"); + n = 0; + } else { + // need to read the stream to count characters -- the length + // is data-dependent (because of ASCII and RLE filters) + str->reset(); + n = 0; + while ((c = str->getChar()) != EOF) { + ++n; + } + str->close(); + } + // +6/7 for "pdfIm\n" / "pdfImM\n" + // +8 for newline + trailer + n += colorMap ? 14 : 15; + writePSFmt("%%BeginData: {0:d} Hex Bytes\n", n); + } +#endif + if ((level == psLevel2Sep || level == psLevel3Sep) && colorMap && + colorMap->getColorSpace()->getMode() == csSeparation) { + color.c[0] = gfxColorComp1; + sepCS = (GfxSeparationColorSpace *)colorMap->getColorSpace(); + sepCS->getCMYK(&color, &cmyk); + writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} ({4:t}) pdfImSep\n", + colToDbl(cmyk.c), colToDbl(cmyk.m), + colToDbl(cmyk.y), colToDbl(cmyk.k), + sepCS->getName()); + } else { + writePSFmt("{0:s}\n", colorMap ? "pdfIm" : "pdfImM"); + } + + // copy the stream data + str->reset(); + i = 0; + while ((c = str->getChar()) != EOF) { + dataBuf[i++] = c; + if (i >= (int)sizeof(dataBuf)) { + writePSBuf(dataBuf, i); + i = 0; + } + } + if (i > 0) { + writePSBuf(dataBuf, i); + } + str->close(); + + // add newline and trailer to the end + writePSChar('\n'); + writePS("%-EOD-\n"); +#if OPI_SUPPORT + if (opi13Nest) { + writePS("%%EndData\n"); + } +#endif + + // delete encoders + if (useRLE || useASCII || inlineImg) { + delete str; + } + } + + if ((maskColors && colorMap && !inlineImg) || maskStr) { + if (rectsOutLen < 65536/4) { + writePS("pdfImClipEnd\n"); + } else { + writePS("grestore\n"); + } + } +} + +//~ this doesn't currently support OPI +void PSOutputDev::doImageL3(Object *ref, GfxImageColorMap *colorMap, + GBool invert, GBool inlineImg, + Stream *str, int width, int height, int len, + int *maskColors, Stream *maskStr, + int maskWidth, int maskHeight, GBool maskInvert) { + Stream *str2; + GooString *s; + int n, numComps; + GBool useRLE, useASCII, useASCIIHex, useCompressed; + GBool maskUseRLE, maskUseASCII, maskUseCompressed; + GfxSeparationColorSpace *sepCS; + GfxColor color; + GfxCMYK cmyk; + int c; + int col, i; + + useASCIIHex = globalParams->getPSASCIIHex(); + useRLE = useASCII = useCompressed = gFalse; // make gcc happy + maskUseRLE = maskUseASCII = maskUseCompressed = gFalse; // make gcc happy + + // color space + if (colorMap) { + dumpColorSpaceL2(colorMap->getColorSpace(), gFalse, gTrue, gFalse); + writePS(" setcolorspace\n"); + } + + // set up the image data + if (mode == psModeForm || inType3Char || preload) { + if (inlineImg) { + // create an array + str2 = new FixedLengthEncoder(str, len); + str2 = new RunLengthEncoder(str2); + if (useASCIIHex) { + str2 = new ASCIIHexEncoder(str2); + } else { + str2 = new ASCII85Encoder(str2); + } + str2->reset(); + col = 0; + writePS((char *)(useASCIIHex ? "[<" : "[<~")); + do { + do { + c = str2->getChar(); + } while (c == '\n' || c == '\r'); + if (c == (useASCIIHex ? '>' : '~') || c == EOF) { + break; + } + if (c == 'z') { + writePSChar(c); + ++col; + } else { + writePSChar(c); + ++col; + for (i = 1; i <= (useASCIIHex ? 1 : 4); ++i) { + do { + c = str2->getChar(); + } while (c == '\n' || c == '\r'); + if (c == (useASCIIHex ? '>' : '~') || c == EOF) { + break; + } + writePSChar(c); + ++col; + } + } + // each line is: "<~...data...~><eol>" + // so max data length = 255 - 6 = 249 + // chunks are 1 or 5 bytes each, so we have to stop at 245 + // but make it 240 just to be safe + if (col > 240) { + writePS((char *)(useASCIIHex ? ">\n<" : "~>\n<~")); + col = 0; + } + } while (c != (useASCIIHex ? '>' : '~') && c != EOF); + writePS((char *)(useASCIIHex ? ">\n" : "~>\n")); + // add an extra entry because the RunLengthDecode filter may + // read past the end + writePS("<>]\n"); + writePS("0\n"); + str2->close(); + delete str2; + } else { + // make sure the image is setup, it sometimes is not like on bug #17645 + setupImage(ref->getRef(), str); + // set up to use the array already created by setupImages() + writePSFmt("ImData_{0:d}_{1:d} 0 0\n", ref->getRefNum(), ref->getRefGen()); + } + } + + // explicit masking + if (maskStr) { + writePS("<<\n /ImageType 3\n"); + writePS(" /InterleaveType 3\n"); + writePS(" /DataDict\n"); + } + + // image (data) dictionary + writePSFmt("<<\n /ImageType {0:d}\n", (maskColors && colorMap) ? 4 : 1); + + // color key masking + if (maskColors && colorMap) { + writePS(" /MaskColor [\n"); + numComps = colorMap->getNumPixelComps(); + for (i = 0; i < 2 * numComps; i += 2) { + writePSFmt(" {0:d} {1:d}\n", maskColors[i], maskColors[i+1]); + } + writePS(" ]\n"); + } + + // width, height, matrix, bits per component + writePSFmt(" /Width {0:d}\n", width); + writePSFmt(" /Height {0:d}\n", height); + writePSFmt(" /ImageMatrix [{0:d} 0 0 {1:d} 0 {2:d}]\n", + width, -height, height); + if (colorMap && colorMap->getColorSpace()->getMode() == csDeviceN) { + writePS(" /BitsPerComponent 8\n"); + } else { + writePSFmt(" /BitsPerComponent {0:d}\n", + colorMap ? colorMap->getBits() : 1); + } + + // decode + if (colorMap) { + writePS(" /Decode ["); + if ((level == psLevel2Sep || level == psLevel3Sep) && + colorMap->getColorSpace()->getMode() == csSeparation) { + // this matches up with the code in the pdfImSep operator + n = (1 << colorMap->getBits()) - 1; + writePSFmt("{0:.4g} {1:.4g}", colorMap->getDecodeLow(0) * n, + colorMap->getDecodeHigh(0) * n); + } else if (colorMap->getColorSpace()->getMode() == csDeviceN) { + numComps = ((GfxDeviceNColorSpace *)colorMap->getColorSpace())-> + getAlt()->getNComps(); + for (i = 0; i < numComps; ++i) { + if (i > 0) { + writePS(" "); + } + writePS("0 1"); + } + } else { + numComps = colorMap->getNumPixelComps(); + for (i = 0; i < numComps; ++i) { + if (i > 0) { + writePS(" "); + } + writePSFmt("{0:.4g} {1:.4g}", colorMap->getDecodeLow(i), + colorMap->getDecodeHigh(i)); + } + } + writePS("]\n"); + } else { + writePSFmt(" /Decode [{0:d} {1:d}]\n", invert ? 1 : 0, invert ? 0 : 1); + } + + // data source + if (mode == psModeForm || inType3Char || preload) { + if (inlineImg) { + writePS(" /DataSource { 2 copy get exch 1 add exch }\n"); + } else { + writePS(" /DataSource { dup 65535 ge { pop 1 add 0 } if 2 index 2" + " index get 1 index get exch 1 add exch }\n"); + } + } else { + writePS(" /DataSource currentfile\n"); + } + + // filters + s = str->getPSFilter(level < psLevel2 ? 1 : level < psLevel3 ? 2 : 3, + " "); + if ((colorMap && colorMap->getColorSpace()->getMode() == csDeviceN) || + inlineImg || !s) { + useRLE = gTrue; + useASCII = !(mode == psModeForm || inType3Char || preload); + useCompressed = gFalse; + } else { + useRLE = gFalse; + useASCII = str->isBinary() && + !(mode == psModeForm || inType3Char || preload); + useCompressed = gTrue; + } + if (useASCII) { + writePSFmt(" /ASCII{0:s}Decode filter\n", + useASCIIHex ? "Hex" : "85"); + } + if (useRLE) { + writePS(" /RunLengthDecode filter\n"); + } + if (useCompressed) { + writePS(s->getCString()); + } + if (s) { + delete s; + } + + // end of image (data) dictionary + writePS(">>\n"); + + // explicit masking + if (maskStr) { + writePS(" /MaskDict\n"); + writePS("<<\n"); + writePS(" /ImageType 1\n"); + writePSFmt(" /Width {0:d}\n", maskWidth); + writePSFmt(" /Height {0:d}\n", maskHeight); + writePSFmt(" /ImageMatrix [{0:d} 0 0 {1:d} 0 {2:d}]\n", + maskWidth, -maskHeight, maskHeight); + writePS(" /BitsPerComponent 1\n"); + writePSFmt(" /Decode [{0:d} {1:d}]\n", + maskInvert ? 1 : 0, maskInvert ? 0 : 1); + + // mask data source + writePS(" /DataSource currentfile\n"); + s = maskStr->getPSFilter(3, " "); + if (!s) { + maskUseRLE = gTrue; + maskUseASCII = gTrue; + maskUseCompressed = gFalse; + } else { + maskUseRLE = gFalse; + maskUseASCII = maskStr->isBinary(); + maskUseCompressed = gTrue; + } + if (maskUseASCII) { + writePSFmt(" /ASCII{0:s}Decode filter\n", + useASCIIHex ? "Hex" : "85"); + } + if (maskUseRLE) { + writePS(" /RunLengthDecode filter\n"); + } + if (maskUseCompressed) { + writePS(s->getCString()); + } + if (s) { + delete s; + } + + writePS(">>\n"); + writePS(">>\n"); + } + + if (mode == psModeForm || inType3Char || preload) { + + // image command + writePSFmt("{0:s}\n", colorMap ? "image" : "imagemask"); + + } else { + + if ((level == psLevel2Sep || level == psLevel3Sep) && colorMap && + colorMap->getColorSpace()->getMode() == csSeparation) { + color.c[0] = gfxColorComp1; + sepCS = (GfxSeparationColorSpace *)colorMap->getColorSpace(); + sepCS->getCMYK(&color, &cmyk); + writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} ({4:t}) pdfImSep\n", + colToDbl(cmyk.c), colToDbl(cmyk.m), + colToDbl(cmyk.y), colToDbl(cmyk.k), + sepCS->getName()); + } else { + writePSFmt("{0:s}\n", colorMap ? "pdfIm" : "pdfImM"); + } + + } + + // explicit masking + if (maskStr) { + + if (maskUseCompressed) { + maskStr = maskStr->getUndecodedStream(); + } + + // add RunLengthEncode and ASCIIHex/85 encode filters + if (maskUseRLE) { + maskStr = new RunLengthEncoder(maskStr); + } + if (maskUseASCII) { + if (useASCIIHex) { + maskStr = new ASCIIHexEncoder(maskStr); + } else { + maskStr = new ASCII85Encoder(maskStr); + } + } + + // copy the stream data + maskStr->reset(); + while ((c = maskStr->getChar()) != EOF) { + writePSChar(c); + } + maskStr->close(); + writePSChar('\n'); + + // delete encoders + if (maskUseRLE || maskUseASCII) { + delete maskStr; + } + } + + // get rid of the array and index + if (mode == psModeForm || inType3Char || preload) { + if (!inlineImg) writePS("pop "); + writePS("pop pop\n"); + + // image data + } else { + + // cut off inline image streams at appropriate length + if (inlineImg) { + str = new FixedLengthEncoder(str, len); + } else if (useCompressed) { + str = str->getUndecodedStream(); + } + + // recode DeviceN data + if (colorMap && colorMap->getColorSpace()->getMode() == csDeviceN) { + str = new DeviceNRecoder(str, width, height, colorMap); + } + + // add RunLengthEncode and ASCIIHex/85 encode filters + if (useRLE) { + str = new RunLengthEncoder(str); + } + if (useASCII) { + if (useASCIIHex) { + str = new ASCIIHexEncoder(str); + } else { + str = new ASCII85Encoder(str); + } + } + + // copy the stream data + str->reset(); + while ((c = str->getChar()) != EOF) { + writePSChar(c); + } + str->close(); + + // add newline and trailer to the end + writePSChar('\n'); + writePS("%-EOD-\n"); + + // delete encoders + if (useRLE || useASCII || inlineImg) { + delete str; + } + } +} + +void PSOutputDev::dumpColorSpaceL2(GfxColorSpace *colorSpace, + GBool genXform, GBool updateColors, + GBool map01) { + GfxCalGrayColorSpace *calGrayCS; + GfxCalRGBColorSpace *calRGBCS; + GfxLabColorSpace *labCS; + GfxIndexedColorSpace *indexedCS; + GfxSeparationColorSpace *separationCS; + GfxDeviceNColorSpace *deviceNCS; + GfxColorSpace *baseCS; + Guchar *lookup, *p; + double x[gfxColorMaxComps], y[gfxColorMaxComps]; + double low[gfxColorMaxComps], range[gfxColorMaxComps]; + GfxColor color; + GfxCMYK cmyk; + Function *func; + int n, numComps, numAltComps; + int byte; + int i, j, k; + + switch (colorSpace->getMode()) { + + case csDeviceGray: + writePS("/DeviceGray"); + if (genXform) { + writePS(" {}"); + } + if (updateColors) { + processColors |= psProcessBlack; + } + break; + + case csCalGray: + calGrayCS = (GfxCalGrayColorSpace *)colorSpace; + writePS("[/CIEBasedA <<\n"); + writePSFmt(" /DecodeA {{{0:.4g} exp}} bind\n", calGrayCS->getGamma()); + writePSFmt(" /MatrixA [{0:.4g} {1:.4g} {2:.4g}]\n", + calGrayCS->getWhiteX(), calGrayCS->getWhiteY(), + calGrayCS->getWhiteZ()); + writePSFmt(" /WhitePoint [{0:.4g} {1:.4g} {2:.4g}]\n", + calGrayCS->getWhiteX(), calGrayCS->getWhiteY(), + calGrayCS->getWhiteZ()); + writePSFmt(" /BlackPoint [{0:.4g} {1:.4g} {2:.4g}]\n", + calGrayCS->getBlackX(), calGrayCS->getBlackY(), + calGrayCS->getBlackZ()); + writePS(">>]"); + if (genXform) { + writePS(" {}"); + } + if (updateColors) { + processColors |= psProcessBlack; + } + break; + + case csDeviceRGB: + writePS("/DeviceRGB"); + if (genXform) { + writePS(" {}"); + } + if (updateColors) { + processColors |= psProcessCMYK; + } + break; + + case csCalRGB: + calRGBCS = (GfxCalRGBColorSpace *)colorSpace; + writePS("[/CIEBasedABC <<\n"); + writePSFmt(" /DecodeABC [{{{0:.4g} exp}} bind {{{1:.4g} exp}} bind {{{2:.4g} exp}} bind]\n", + calRGBCS->getGammaR(), calRGBCS->getGammaG(), + calRGBCS->getGammaB()); + writePSFmt(" /MatrixABC [{0:.4g} {1:.4g} {2:.4g} {3:.4g} {4:.4g} {5:.4g} {6:.4g} {7:.4g} {8:.4g}]\n", + calRGBCS->getMatrix()[0], calRGBCS->getMatrix()[1], + calRGBCS->getMatrix()[2], calRGBCS->getMatrix()[3], + calRGBCS->getMatrix()[4], calRGBCS->getMatrix()[5], + calRGBCS->getMatrix()[6], calRGBCS->getMatrix()[7], + calRGBCS->getMatrix()[8]); + writePSFmt(" /WhitePoint [{0:.4g} {1:.4g} {2:.4g}]\n", + calRGBCS->getWhiteX(), calRGBCS->getWhiteY(), + calRGBCS->getWhiteZ()); + writePSFmt(" /BlackPoint [{0:.4g} {1:.4g} {2:.4g}]\n", + calRGBCS->getBlackX(), calRGBCS->getBlackY(), + calRGBCS->getBlackZ()); + writePS(">>]"); + if (genXform) { + writePS(" {}"); + } + if (updateColors) { + processColors |= psProcessCMYK; + } + break; + + case csDeviceCMYK: + writePS("/DeviceCMYK"); + if (genXform) { + writePS(" {}"); + } + if (updateColors) { + processColors |= psProcessCMYK; + } + break; + + case csLab: + labCS = (GfxLabColorSpace *)colorSpace; + writePS("[/CIEBasedABC <<\n"); + if (map01) { + writePS(" /RangeABC [0 1 0 1 0 1]\n"); + writePSFmt(" /DecodeABC [{{100 mul 16 add 116 div}} bind {{{0:.4g} mul {1:.4g} add}} bind {{{2:.4g} mul {3:.4g} add}} bind]\n", + (labCS->getAMax() - labCS->getAMin()) / 500.0, + labCS->getAMin() / 500.0, + (labCS->getBMax() - labCS->getBMin()) / 200.0, + labCS->getBMin() / 200.0); + } else { + writePSFmt(" /RangeABC [0 100 {0:.4g} {1:.4g} {2:.4g} {3:.4g}]\n", + labCS->getAMin(), labCS->getAMax(), + labCS->getBMin(), labCS->getBMax()); + writePS(" /DecodeABC [{16 add 116 div} bind {500 div} bind {200 div} bind]\n"); + } + writePS(" /MatrixABC [1 1 1 1 0 0 0 0 -1]\n"); + writePS(" /DecodeLMN\n"); + writePS(" [{dup 6 29 div ge {dup dup mul mul}\n"); + writePSFmt(" {{4 29 div sub 108 841 div mul }} ifelse {0:.4g} mul}} bind\n", + labCS->getWhiteX()); + writePS(" {dup 6 29 div ge {dup dup mul mul}\n"); + writePSFmt(" {{4 29 div sub 108 841 div mul }} ifelse {0:.4g} mul}} bind\n", + labCS->getWhiteY()); + writePS(" {dup 6 29 div ge {dup dup mul mul}\n"); + writePSFmt(" {{4 29 div sub 108 841 div mul }} ifelse {0:.4g} mul}} bind]\n", + labCS->getWhiteZ()); + writePSFmt(" /WhitePoint [{0:.4g} {1:.4g} {2:.4g}]\n", + labCS->getWhiteX(), labCS->getWhiteY(), labCS->getWhiteZ()); + writePSFmt(" /BlackPoint [{0:.4g} {1:.4g} {2:.4g}]\n", + labCS->getBlackX(), labCS->getBlackY(), labCS->getBlackZ()); + writePS(">>]"); + if (genXform) { + writePS(" {}"); + } + if (updateColors) { + processColors |= psProcessCMYK; + } + break; + + case csICCBased: + // there is no transform function to the alternate color space, so + // we can use it directly + dumpColorSpaceL2(((GfxICCBasedColorSpace *)colorSpace)->getAlt(), + genXform, updateColors, gFalse); + break; + + case csIndexed: + indexedCS = (GfxIndexedColorSpace *)colorSpace; + baseCS = indexedCS->getBase(); + writePS("[/Indexed "); + dumpColorSpaceL2(baseCS, gFalse, gFalse, gTrue); + n = indexedCS->getIndexHigh(); + numComps = baseCS->getNComps(); + lookup = indexedCS->getLookup(); + writePSFmt(" {0:d} <\n", n); + if (baseCS->getMode() == csDeviceN) { + func = ((GfxDeviceNColorSpace *)baseCS)->getTintTransformFunc(); + baseCS->getDefaultRanges(low, range, indexedCS->getIndexHigh()); + if (((GfxDeviceNColorSpace *)baseCS)->getAlt()->getMode() == csLab) { + labCS = (GfxLabColorSpace *)((GfxDeviceNColorSpace *)baseCS)->getAlt(); + } else { + labCS = NULL; + } + numAltComps = ((GfxDeviceNColorSpace *)baseCS)->getAlt()->getNComps(); + p = lookup; + for (i = 0; i <= n; i += 8) { + writePS(" "); + for (j = i; j < i+8 && j <= n; ++j) { + for (k = 0; k < numComps; ++k) { + x[k] = low[k] + (*p++ / 255.0) * range[k]; + } + func->transform(x, y); + if (labCS) { + y[0] /= 100.0; + y[1] = (y[1] - labCS->getAMin()) / + (labCS->getAMax() - labCS->getAMin()); + y[2] = (y[2] - labCS->getBMin()) / + (labCS->getBMax() - labCS->getBMin()); + } + for (k = 0; k < numAltComps; ++k) { + byte = (int)(y[k] * 255 + 0.5); + if (byte < 0) { + byte = 0; + } else if (byte > 255) { + byte = 255; + } + writePSFmt("{0:02x}", byte); + } + if (updateColors) { + color.c[0] = dblToCol(j); + indexedCS->getCMYK(&color, &cmyk); + addProcessColor(colToDbl(cmyk.c), colToDbl(cmyk.m), + colToDbl(cmyk.y), colToDbl(cmyk.k)); + } + } + writePS("\n"); + } + } else { + for (i = 0; i <= n; i += 8) { + writePS(" "); + for (j = i; j < i+8 && j <= n; ++j) { + for (k = 0; k < numComps; ++k) { + writePSFmt("{0:02x}", lookup[j * numComps + k]); + } + if (updateColors) { + color.c[0] = dblToCol(j); + indexedCS->getCMYK(&color, &cmyk); + addProcessColor(colToDbl(cmyk.c), colToDbl(cmyk.m), + colToDbl(cmyk.y), colToDbl(cmyk.k)); + } + } + writePS("\n"); + } + } + writePS(">]"); + if (genXform) { + writePS(" {}"); + } + break; + + case csSeparation: + separationCS = (GfxSeparationColorSpace *)colorSpace; + writePS("[/Separation "); + writePSString(separationCS->getName()); + writePS(" "); + dumpColorSpaceL2(separationCS->getAlt(), gFalse, gFalse, gFalse); + writePS("\n"); + cvtFunction(separationCS->getFunc()); + writePS("]"); + if (genXform) { + writePS(" {}"); + } + if (updateColors) { + addCustomColor(separationCS); + } + break; + + case csDeviceN: + // DeviceN color spaces are a Level 3 PostScript feature. + deviceNCS = (GfxDeviceNColorSpace *)colorSpace; + dumpColorSpaceL2(deviceNCS->getAlt(), gFalse, updateColors, map01); + if (genXform) { + writePS(" "); + cvtFunction(deviceNCS->getTintTransformFunc()); + } + break; + + case csPattern: + //~ unimplemented + break; + } +} + +#if OPI_SUPPORT +void PSOutputDev::opiBegin(GfxState *state, Dict *opiDict) { + Object dict; + + if (globalParams->getPSOPI()) { + opiDict->lookup("2.0", &dict); + if (dict.isDict()) { + opiBegin20(state, dict.getDict()); + dict.free(); + } else { + dict.free(); + opiDict->lookup("1.3", &dict); + if (dict.isDict()) { + opiBegin13(state, dict.getDict()); + } + dict.free(); + } + } +} + +void PSOutputDev::opiBegin20(GfxState *state, Dict *dict) { + Object obj1, obj2, obj3, obj4; + double width, height, left, right, top, bottom; + int w, h; + int i; + + writePS("%%BeginOPI: 2.0\n"); + writePS("%%Distilled\n"); + + dict->lookup("F", &obj1); + if (getFileSpecName(&obj1, &obj2)) { + writePSFmt("%%ImageFileName: {0:t}\n", obj2.getString()); + obj2.free(); + } + obj1.free(); + + dict->lookup("MainImage", &obj1); + if (obj1.isString()) { + writePSFmt("%%MainImage: {0:t}\n", obj1.getString()); + } + obj1.free(); + + //~ ignoring 'Tags' entry + //~ need to use writePSString() and deal with >255-char lines + + dict->lookup("Size", &obj1); + if (obj1.isArray() && obj1.arrayGetLength() == 2) { + obj1.arrayGet(0, &obj2); + width = obj2.getNum(); + obj2.free(); + obj1.arrayGet(1, &obj2); + height = obj2.getNum(); + obj2.free(); + writePSFmt("%%ImageDimensions: {0:.6g} {1:.6g}\n", width, height); + } + obj1.free(); + + dict->lookup("CropRect", &obj1); + if (obj1.isArray() && obj1.arrayGetLength() == 4) { + obj1.arrayGet(0, &obj2); + left = obj2.getNum(); + obj2.free(); + obj1.arrayGet(1, &obj2); + top = obj2.getNum(); + obj2.free(); + obj1.arrayGet(2, &obj2); + right = obj2.getNum(); + obj2.free(); + obj1.arrayGet(3, &obj2); + bottom = obj2.getNum(); + obj2.free(); + writePSFmt("%%ImageCropRect: {0:.6g} {1:.6g} {2:.6g} {3:.6g}\n", + left, top, right, bottom); + } + obj1.free(); + + dict->lookup("Overprint", &obj1); + if (obj1.isBool()) { + writePSFmt("%%ImageOverprint: {0:s}\n", obj1.getBool() ? "true" : "false"); + } + obj1.free(); + + dict->lookup("Inks", &obj1); + if (obj1.isName()) { + writePSFmt("%%ImageInks: {0:s}\n", obj1.getName()); + } else if (obj1.isArray() && obj1.arrayGetLength() >= 1) { + obj1.arrayGet(0, &obj2); + if (obj2.isName()) { + writePSFmt("%%ImageInks: {0:s} {1:d}", + obj2.getName(), (obj1.arrayGetLength() - 1) / 2); + for (i = 1; i+1 < obj1.arrayGetLength(); i += 2) { + obj1.arrayGet(i, &obj3); + obj1.arrayGet(i+1, &obj4); + if (obj3.isString() && obj4.isNum()) { + writePS(" "); + writePSString(obj3.getString()); + writePSFmt(" {0:.6g}", obj4.getNum()); + } + obj3.free(); + obj4.free(); + } + writePS("\n"); + } + obj2.free(); + } + obj1.free(); + + writePS("gsave\n"); + + writePS("%%BeginIncludedImage\n"); + + dict->lookup("IncludedImageDimensions", &obj1); + if (obj1.isArray() && obj1.arrayGetLength() == 2) { + obj1.arrayGet(0, &obj2); + w = obj2.getInt(); + obj2.free(); + obj1.arrayGet(1, &obj2); + h = obj2.getInt(); + obj2.free(); + writePSFmt("%%IncludedImageDimensions: {0:d} {1:d}\n", w, h); + } + obj1.free(); + + dict->lookup("IncludedImageQuality", &obj1); + if (obj1.isNum()) { + writePSFmt("%%IncludedImageQuality: {0:.6g}\n", obj1.getNum()); + } + obj1.free(); + + ++opi20Nest; +} + +void PSOutputDev::opiBegin13(GfxState *state, Dict *dict) { + Object obj1, obj2; + int left, right, top, bottom, samples, bits, width, height; + double c, m, y, k; + double llx, lly, ulx, uly, urx, ury, lrx, lry; + double tllx, tlly, tulx, tuly, turx, tury, tlrx, tlry; + double horiz, vert; + int i, j; + + writePS("save\n"); + writePS("/opiMatrix2 matrix currentmatrix def\n"); + writePS("opiMatrix setmatrix\n"); + + dict->lookup("F", &obj1); + if (getFileSpecName(&obj1, &obj2)) { + writePSFmt("%ALDImageFileName: {0:t}\n", obj2.getString()); + obj2.free(); + } + obj1.free(); + + dict->lookup("CropRect", &obj1); + if (obj1.isArray() && obj1.arrayGetLength() == 4) { + obj1.arrayGet(0, &obj2); + left = obj2.getInt(); + obj2.free(); + obj1.arrayGet(1, &obj2); + top = obj2.getInt(); + obj2.free(); + obj1.arrayGet(2, &obj2); + right = obj2.getInt(); + obj2.free(); + obj1.arrayGet(3, &obj2); + bottom = obj2.getInt(); + obj2.free(); + writePSFmt("%ALDImageCropRect: {0:d} {1:d} {2:d} {3:d}\n", + left, top, right, bottom); + } + obj1.free(); + + dict->lookup("Color", &obj1); + if (obj1.isArray() && obj1.arrayGetLength() == 5) { + obj1.arrayGet(0, &obj2); + c = obj2.getNum(); + obj2.free(); + obj1.arrayGet(1, &obj2); + m = obj2.getNum(); + obj2.free(); + obj1.arrayGet(2, &obj2); + y = obj2.getNum(); + obj2.free(); + obj1.arrayGet(3, &obj2); + k = obj2.getNum(); + obj2.free(); + obj1.arrayGet(4, &obj2); + if (obj2.isString()) { + writePSFmt("%ALDImageColor: {0:.4g} {1:.4g} {2:.4g} {3:.4g} ", + c, m, y, k); + writePSString(obj2.getString()); + writePS("\n"); + } + obj2.free(); + } + obj1.free(); + + dict->lookup("ColorType", &obj1); + if (obj1.isName()) { + writePSFmt("%ALDImageColorType: {0:s}\n", obj1.getName()); + } + obj1.free(); + + //~ ignores 'Comments' entry + //~ need to handle multiple lines + + dict->lookup("CropFixed", &obj1); + if (obj1.isArray()) { + obj1.arrayGet(0, &obj2); + ulx = obj2.getNum(); + obj2.free(); + obj1.arrayGet(1, &obj2); + uly = obj2.getNum(); + obj2.free(); + obj1.arrayGet(2, &obj2); + lrx = obj2.getNum(); + obj2.free(); + obj1.arrayGet(3, &obj2); + lry = obj2.getNum(); + obj2.free(); + writePSFmt("%ALDImageCropFixed: {0:.6g} {1:.6g} {2:.6g} {3:.6g}\n", + ulx, uly, lrx, lry); + } + obj1.free(); + + dict->lookup("GrayMap", &obj1); + if (obj1.isArray()) { + writePS("%ALDImageGrayMap:"); + for (i = 0; i < obj1.arrayGetLength(); i += 16) { + if (i > 0) { + writePS("\n%%+"); + } + for (j = 0; j < 16 && i+j < obj1.arrayGetLength(); ++j) { + obj1.arrayGet(i+j, &obj2); + writePSFmt(" {0:d}", obj2.getInt()); + obj2.free(); + } + } + writePS("\n"); + } + obj1.free(); + + dict->lookup("ID", &obj1); + if (obj1.isString()) { + writePSFmt("%ALDImageID: {0:t}\n", obj1.getString()); + } + obj1.free(); + + dict->lookup("ImageType", &obj1); + if (obj1.isArray() && obj1.arrayGetLength() == 2) { + obj1.arrayGet(0, &obj2); + samples = obj2.getInt(); + obj2.free(); + obj1.arrayGet(1, &obj2); + bits = obj2.getInt(); + obj2.free(); + writePSFmt("%ALDImageType: {0:d} {1:d}\n", samples, bits); + } + obj1.free(); + + dict->lookup("Overprint", &obj1); + if (obj1.isBool()) { + writePSFmt("%ALDImageOverprint: {0:s}\n", + obj1.getBool() ? "true" : "false"); + } + obj1.free(); + + dict->lookup("Position", &obj1); + if (obj1.isArray() && obj1.arrayGetLength() == 8) { + obj1.arrayGet(0, &obj2); + llx = obj2.getNum(); + obj2.free(); + obj1.arrayGet(1, &obj2); + lly = obj2.getNum(); + obj2.free(); + obj1.arrayGet(2, &obj2); + ulx = obj2.getNum(); + obj2.free(); + obj1.arrayGet(3, &obj2); + uly = obj2.getNum(); + obj2.free(); + obj1.arrayGet(4, &obj2); + urx = obj2.getNum(); + obj2.free(); + obj1.arrayGet(5, &obj2); + ury = obj2.getNum(); + obj2.free(); + obj1.arrayGet(6, &obj2); + lrx = obj2.getNum(); + obj2.free(); + obj1.arrayGet(7, &obj2); + lry = obj2.getNum(); + obj2.free(); + opiTransform(state, llx, lly, &tllx, &tlly); + opiTransform(state, ulx, uly, &tulx, &tuly); + opiTransform(state, urx, ury, &turx, &tury); + opiTransform(state, lrx, lry, &tlrx, &tlry); + writePSFmt("%ALDImagePosition: {0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g} {6:.6g} {7:.6g}\n", + tllx, tlly, tulx, tuly, turx, tury, tlrx, tlry); + obj2.free(); + } + obj1.free(); + + dict->lookup("Resolution", &obj1); + if (obj1.isArray() && obj1.arrayGetLength() == 2) { + obj1.arrayGet(0, &obj2); + horiz = obj2.getNum(); + obj2.free(); + obj1.arrayGet(1, &obj2); + vert = obj2.getNum(); + obj2.free(); + writePSFmt("%ALDImageResoution: {0:.6g} {1:.6g}\n", horiz, vert); + obj2.free(); + } + obj1.free(); + + dict->lookup("Size", &obj1); + if (obj1.isArray() && obj1.arrayGetLength() == 2) { + obj1.arrayGet(0, &obj2); + width = obj2.getInt(); + obj2.free(); + obj1.arrayGet(1, &obj2); + height = obj2.getInt(); + obj2.free(); + writePSFmt("%ALDImageDimensions: {0:d} {1:d}\n", width, height); + } + obj1.free(); + + //~ ignoring 'Tags' entry + //~ need to use writePSString() and deal with >255-char lines + + dict->lookup("Tint", &obj1); + if (obj1.isNum()) { + writePSFmt("%ALDImageTint: {0:.6g}\n", obj1.getNum()); + } + obj1.free(); + + dict->lookup("Transparency", &obj1); + if (obj1.isBool()) { + writePSFmt("%ALDImageTransparency: {0:s}\n", + obj1.getBool() ? "true" : "false"); + } + obj1.free(); + + writePS("%%BeginObject: image\n"); + writePS("opiMatrix2 setmatrix\n"); + ++opi13Nest; +} + +// Convert PDF user space coordinates to PostScript default user space +// coordinates. This has to account for both the PDF CTM and the +// PSOutputDev page-fitting transform. +void PSOutputDev::opiTransform(GfxState *state, double x0, double y0, + double *x1, double *y1) { + double t; + + state->transform(x0, y0, x1, y1); + *x1 += tx; + *y1 += ty; + if (rotate == 90) { + t = *x1; + *x1 = -*y1; + *y1 = t; + } else if (rotate == 180) { + *x1 = -*x1; + *y1 = -*y1; + } else if (rotate == 270) { + t = *x1; + *x1 = *y1; + *y1 = -t; + } + *x1 *= xScale; + *y1 *= yScale; +} + +void PSOutputDev::opiEnd(GfxState *state, Dict *opiDict) { + Object dict; + + if (globalParams->getPSOPI()) { + opiDict->lookup("2.0", &dict); + if (dict.isDict()) { + writePS("%%EndIncludedImage\n"); + writePS("%%EndOPI\n"); + writePS("grestore\n"); + --opi20Nest; + dict.free(); + } else { + dict.free(); + opiDict->lookup("1.3", &dict); + if (dict.isDict()) { + writePS("%%EndObject\n"); + writePS("restore\n"); + --opi13Nest; + } + dict.free(); + } + } +} +#endif // OPI_SUPPORT + +void PSOutputDev::type3D0(GfxState *state, double wx, double wy) { + writePSFmt("{0:.6g} {1:.6g} setcharwidth\n", wx, wy); + writePS("q\n"); + t3NeedsRestore = gTrue; +} + +void PSOutputDev::type3D1(GfxState *state, double wx, double wy, + double llx, double lly, double urx, double ury) { + t3WX = wx; + t3WY = wy; + t3LLX = llx; + t3LLY = lly; + t3URX = urx; + t3URY = ury; + t3String = new GooString(); + writePS("q\n"); + t3Cacheable = gTrue; + t3NeedsRestore = gTrue; +} + +void PSOutputDev::drawForm(Ref id) { + writePSFmt("f_{0:d}_{1:d}\n", id.num, id.gen); +} + +void PSOutputDev::psXObject(Stream *psStream, Stream *level1Stream) { + Stream *str; + int c; + + if ((level == psLevel1 || level == psLevel1Sep) && level1Stream) { + str = level1Stream; + } else { + str = psStream; + } + str->reset(); + while ((c = str->getChar()) != EOF) { + writePSChar(c); + } + str->close(); +} + +//~ can nextFunc be reset to 0 -- maybe at the start of each page? +//~ or maybe at the start of each color space / pattern? +void PSOutputDev::cvtFunction(Function *func) { + SampledFunction *func0; + ExponentialFunction *func2; + StitchingFunction *func3; + PostScriptFunction *func4; + int thisFunc, m, n, nSamples, i, j, k; + + switch (func->getType()) { + + case -1: // identity + writePS("{}\n"); + break; + + case 0: // sampled + func0 = (SampledFunction *)func; + thisFunc = nextFunc++; + m = func0->getInputSize(); + n = func0->getOutputSize(); + nSamples = n; + for (i = 0; i < m; ++i) { + nSamples *= func0->getSampleSize(i); + } + writePSFmt("/xpdfSamples{0:d} [\n", thisFunc); + for (i = 0; i < nSamples; ++i) { + writePSFmt("{0:.6g}\n", func0->getSamples()[i]); + } + writePS("] def\n"); + writePSFmt("{{ {0:d} array {1:d} array {2:d} 2 roll\n", 2*m, m, m+2); + // [e01] [efrac] x0 x1 ... xm-1 + for (i = m-1; i >= 0; --i) { + // [e01] [efrac] x0 x1 ... xi + writePSFmt("{0:.6g} sub {1:.6g} mul {2:.6g} add\n", + func0->getDomainMin(i), + (func0->getEncodeMax(i) - func0->getEncodeMin(i)) / + (func0->getDomainMax(i) - func0->getDomainMin(i)), + func0->getEncodeMin(i)); + // [e01] [efrac] x0 x1 ... xi-1 xi' + writePSFmt("dup 0 lt {{ pop 0 }} {{ dup {0:d} gt {{ pop {1:d} }} if }} ifelse\n", + func0->getSampleSize(i) - 1, func0->getSampleSize(i) - 1); + // [e01] [efrac] x0 x1 ... xi-1 xi' + writePS("dup floor cvi exch dup ceiling cvi exch 2 index sub\n"); + // [e01] [efrac] x0 x1 ... xi-1 floor(xi') ceiling(xi') xi'-floor(xi') + writePSFmt("{0:d} index {1:d} 3 2 roll put\n", i+3, i); + // [e01] [efrac] x0 x1 ... xi-1 floor(xi') ceiling(xi') + writePSFmt("{0:d} index {1:d} 3 2 roll put\n", i+3, 2*i+1); + // [e01] [efrac] x0 x1 ... xi-1 floor(xi') + writePSFmt("{0:d} index {1:d} 3 2 roll put\n", i+2, 2*i); + // [e01] [efrac] x0 x1 ... xi-1 + } + // [e01] [efrac] + for (i = 0; i < n; ++i) { + // [e01] [efrac] y(0) ... y(i-1) + for (j = 0; j < (1<<m); ++j) { + // [e01] [efrac] y(0) ... y(i-1) s(0) s(1) ... s(j-1) + writePSFmt("xpdfSamples{0:d}\n", thisFunc); + k = m - 1; + writePSFmt("{0:d} index {1:d} get\n", i+j+2, 2 * k + ((j >> k) & 1)); + for (k = m - 2; k >= 0; --k) { + writePSFmt("{0:d} mul {1:d} index {2:d} get add\n", + func0->getSampleSize(k), + i + j + 3, + 2 * k + ((j >> k) & 1)); + } + if (n > 1) { + writePSFmt("{0:d} mul {1:d} add ", n, i); + } + writePS("get\n"); + } + // [e01] [efrac] y(0) ... y(i-1) s(0) s(1) ... s(2^m-1) + for (j = 0; j < m; ++j) { + // [e01] [efrac] y(0) ... y(i-1) s(0) s(1) ... s(2^(m-j)-1) + for (k = 0; k < (1 << (m - j)); k += 2) { + // [e01] [efrac] y(0) ... y(i-1) <k/2 s' values> <2^(m-j)-k s values> + writePSFmt("{0:d} index {1:d} get dup\n", + i + k/2 + (1 << (m-j)) - k, j); + writePS("3 2 roll mul exch 1 exch sub 3 2 roll mul add\n"); + writePSFmt("{0:d} 1 roll\n", k/2 + (1 << (m-j)) - k - 1); + } + // [e01] [efrac] s'(0) s'(1) ... s(2^(m-j-1)-1) + } + // [e01] [efrac] y(0) ... y(i-1) s + writePSFmt("{0:.6g} mul {1:.6g} add\n", + func0->getDecodeMax(i) - func0->getDecodeMin(i), + func0->getDecodeMin(i)); + writePSFmt("dup {0:.6g} lt {{ pop {1:.6g} }} {{ dup {2:.6g} gt {{ pop {3:.6g} }} if }} ifelse\n", + func0->getRangeMin(i), func0->getRangeMin(i), + func0->getRangeMax(i), func0->getRangeMax(i)); + // [e01] [efrac] y(0) ... y(i-1) y(i) + } + // [e01] [efrac] y(0) ... y(n-1) + writePSFmt("{0:d} {1:d} roll pop pop }}\n", n+2, n); + break; + + case 2: // exponential + func2 = (ExponentialFunction *)func; + n = func2->getOutputSize(); + writePSFmt("{{ dup {0:.6g} lt {{ pop {1:.6g} }} {{ dup {2:.6g} gt {{ pop {3:.6g} }} if }} ifelse\n", + func2->getDomainMin(0), func2->getDomainMin(0), + func2->getDomainMax(0), func2->getDomainMax(0)); + // x + for (i = 0; i < n; ++i) { + // x y(0) .. y(i-1) + writePSFmt("{0:d} index {1:.6g} exp {2:.6g} mul {3:.6g} add\n", + i, func2->getE(), func2->getC1()[i] - func2->getC0()[i], + func2->getC0()[i]); + if (func2->getHasRange()) { + writePSFmt("dup {0:.6g} lt {{ pop {1:.6g} }} {{ dup {2:.6g} gt {{ pop {3:.6g} }} if }} ifelse\n", + func2->getRangeMin(i), func2->getRangeMin(i), + func2->getRangeMax(i), func2->getRangeMax(i)); + } + } + // x y(0) .. y(n-1) + writePSFmt("{0:d} {1:d} roll pop }}\n", n+1, n); + break; + + case 3: // stitching + func3 = (StitchingFunction *)func; + thisFunc = nextFunc++; + for (i = 0; i < func3->getNumFuncs(); ++i) { + cvtFunction(func3->getFunc(i)); + writePSFmt("/xpdfFunc{0:d}_{1:d} exch def\n", thisFunc, i); + } + writePSFmt("{{ dup {0:.6g} lt {{ pop {1:.6g} }} {{ dup {2:.6g} gt {{ pop {3:.6g} }} if }} ifelse\n", + func3->getDomainMin(0), func3->getDomainMin(0), + func3->getDomainMax(0), func3->getDomainMax(0)); + for (i = 0; i < func3->getNumFuncs() - 1; ++i) { + writePSFmt("dup {0:.6g} lt {{ {1:.6g} sub {2:.6g} mul {3:.6g} add xpdfFunc{4:d}_{5:d} }} {{\n", + func3->getBounds()[i+1], + func3->getBounds()[i], + func3->getScale()[i], + func3->getEncode()[2*i], + thisFunc, i); + } + writePSFmt("{0:.6g} sub {1:.6g} mul {2:.6g} add xpdfFunc{3:d}_{4:d}\n", + func3->getBounds()[i], + func3->getScale()[i], + func3->getEncode()[2*i], + thisFunc, i); + for (i = 0; i < func3->getNumFuncs() - 1; ++i) { + writePS("} ifelse\n"); + } + writePS("}\n"); + break; + + case 4: // PostScript + func4 = (PostScriptFunction *)func; + writePS(func4->getCodeString()->getCString()); + writePS("\n"); + break; + } +} + +void PSOutputDev::writePSChar(char c) { + if (t3String) { + t3String->append(c); + } else { + (*outputFunc)(outputStream, &c, 1); + } +} + +void PSOutputDev::writePS(char *s) { + if (t3String) { + t3String->append(s); + } else { + (*outputFunc)(outputStream, s, strlen(s)); + } +} + +void PSOutputDev::writePSBuf(char *s, int len) { + if (t3String) { + for (int i = 0; i < len; i++) { + t3String->append(s[i]); + } + } else { + (*outputFunc)(outputStream, s, len); + } +} + +void PSOutputDev::writePSFmt(const char *fmt, ...) { + va_list args; + GooString *buf; + + va_start(args, fmt); + if (t3String) { + t3String->appendfv((char *)fmt, args); + } else { + buf = GooString::formatv((char *)fmt, args); + (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); + delete buf; + } + va_end(args); +} + +void PSOutputDev::writePSString(GooString *s) { + Guchar *p; + int n, line; + char buf[8]; + + writePSChar('('); + line = 1; + for (p = (Guchar *)s->getCString(), n = s->getLength(); n; ++p, --n) { + if (line >= 64) { + writePSChar('\\'); + writePSChar('\n'); + line = 0; + } + if (*p == '(' || *p == ')' || *p == '\\') { + writePSChar('\\'); + writePSChar((char)*p); + line += 2; + } else if (*p < 0x20 || *p >= 0x80) { + sprintf(buf, "\\%03o", *p); + writePS(buf); + line += 4; + } else { + writePSChar((char)*p); + ++line; + } + } + writePSChar(')'); +} + +void PSOutputDev::writePSName(char *s) { + char *p; + char c; + + p = s; + while ((c = *p++)) { + if (c <= (char)0x20 || c >= (char)0x7f || + c == '(' || c == ')' || c == '<' || c == '>' || + c == '[' || c == ']' || c == '{' || c == '}' || + c == '/' || c == '%' || c == '\\') { + writePSFmt("#{0:02x}", c & 0xff); + } else { + writePSChar(c); + } + } +} + +// Convert GooString to GooString, with appropriate escaping +// of things that can't appear in a label +// This is heavily based on the writePSTextLine() method +GooString* PSOutputDev::filterPSLabel(GooString *label, GBool *needParens) { + int i, step; + GBool isNumeric; + + // - DSC comments must be printable ASCII; control chars and + // backslashes have to be escaped (we do cheap UCS2-to-ASCII + // conversion by simply ignoring the high byte) + // - parentheses are escaped. this isn't strictly necessary for matched + // parentheses, but shouldn't be a problem + // - lines are limited to 255 chars (we limit to 200 here to allow + // for the keyword, which was emitted by the caller) + + GooString *label2 = new GooString(); + int labelLength = label->getLength(); + + if (labelLength == 0) { + isNumeric = false; + } else { + // this gets changed later if we find a non-numeric character + isNumeric = true; + } + + if ( (labelLength >= 2) && + ( (label->getChar(0) & 0xff) == 0xfe) && + ( (label->getChar(1) & 0xff) == 0xff) ) { + // UCS2 mode + i = 3; + step = 2; + if ( (label->getChar(labelLength-1) == 0) ) { + // prune the trailing null (0x000 for UCS2) + labelLength -= 2; + } + } else { + i = 0; + step = 1; + } + for (int j = 0; i < labelLength && j < 200; i += step) { + char c = label->getChar(i); + if ( (c < '0') || (c > '9') ) { + isNumeric = false; + } + if (c == '\\') { + label2->append("\\\\"); + j += 2; + } else if (c == ')') { + label2->append("\\)"); + } else if (c == '(') { + label2->append("\\("); + } else if (c < 0x20 || c > 0x7e) { + label2->append(GooString::format("\\{0:03o}", c)); + j += 4; + } else { + label2->append(c); + ++j; + } + } + if (needParens) { + *needParens = !(isNumeric); + } + return label2; +} + +// Write a DSC-compliant <textline>. +void PSOutputDev::writePSTextLine(GooString *s) { + int i, j, step; + int c; + + // - DSC comments must be printable ASCII; control chars and + // backslashes have to be escaped (we do cheap Unicode-to-ASCII + // conversion by simply ignoring the high byte) + // - lines are limited to 255 chars (we limit to 200 here to allow + // for the keyword, which was emitted by the caller) + // - lines that start with a left paren are treated as <text> + // instead of <textline>, so we escape a leading paren + if (s->getLength() >= 2 && + (s->getChar(0) & 0xff) == 0xfe && + (s->getChar(1) & 0xff) == 0xff) { + i = 3; + step = 2; + } else { + i = 0; + step = 1; + } + for (j = 0; i < s->getLength() && j < 200; i += step) { + c = s->getChar(i) & 0xff; + if (c == '\\') { + writePS("\\\\"); + j += 2; + } else if (c < 0x20 || c > 0x7e || (j == 0 && c == '(')) { + writePSFmt("\\{0:03o}", c); + j += 4; + } else { + writePSChar(c); + ++j; + } + } + writePS("\n"); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PSOutputDev.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/PSOutputDev.h new file mode 100644 index 00000000000..8112bc4e73d --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PSOutputDev.h @@ -0,0 +1,473 @@ +//======================================================================== +// +// PSOutputDev.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Martin Kretzschmar <martink@gnome.org> +// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2006-2008 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2007 Brad Hards <bradh@kde.org> +// Copyright (C) 2009-2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2009 Till Kamppeter <till.kamppeter@gmail.com> +// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2009, 2011 William Bader <williambader@hotmail.com> +// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef PSOUTPUTDEV_H +#define PSOUTPUTDEV_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "poppler-config.h" +#include <stddef.h> +#include "Object.h" +#include "GfxState.h" +#include "GlobalParams.h" +#include "OutputDev.h" + +class GfxPath; +class GfxFont; +class GfxColorSpace; +class GfxSeparationColorSpace; +class PDFRectangle; +struct PSFont8Info; +struct PSFont16Enc; +class PSOutCustomColor; +class Function; +class PDFDoc; + +//------------------------------------------------------------------------ +// PSOutputDev +//------------------------------------------------------------------------ + +enum PSOutMode { + psModePS, + psModeEPS, + psModeForm, + psModePSOrigPageSizes +}; + +enum PSFileType { + psFile, // write to file + psPipe, // write to pipe + psStdout, // write to stdout + psGeneric // write to a generic stream +}; + +typedef void (*PSOutputFunc)(void *stream, char *data, int len); + +class PSOutputDev: public OutputDev { +public: + + // Open a PostScript output file, and write the prolog. + PSOutputDev(const char *fileName, PDFDoc *doc, XRef *xrefA, Catalog *catalog, + char *psTitle, + int firstPage, int lastPage, PSOutMode modeA, + int paperWidthA = -1, int paperHeightA = -1, + GBool duplexA = gTrue, + int imgLLXA = 0, int imgLLYA = 0, + int imgURXA = 0, int imgURYA = 0, + GBool forceRasterizeA = gFalse, + GBool manualCtrlA = gFalse); + + // Open a PSOutputDev that will write to a generic stream. + PSOutputDev(PSOutputFunc outputFuncA, void *outputStreamA, + char *psTitle, + PDFDoc *doc, + XRef *xrefA, Catalog *catalog, + int firstPage, int lastPage, PSOutMode modeA, + int paperWidthA = -1, int paperHeightA = -1, + GBool duplexA = gTrue, + int imgLLXA = 0, int imgLLYA = 0, + int imgURXA = 0, int imgURYA = 0, + GBool forceRasterizeA = gFalse, + GBool manualCtrlA = gFalse); + + // Destructor -- writes the trailer and closes the file. + virtual ~PSOutputDev(); + + // Check if file was successfully created. + virtual GBool isOk() { return ok; } + + //---- get info about output device + + // Does this device use upside-down coordinates? + // (Upside-down means (0,0) is the top left corner of the page.) + virtual GBool upsideDown() { return gFalse; } + + // Does this device use drawChar() or drawString()? + virtual GBool useDrawChar() { return gFalse; } + + // Does this device use tilingPatternFill()? If this returns false, + // tiling pattern fills will be reduced to a series of other drawing + // operations. + virtual GBool useTilingPatternFill() { return gTrue; } + + // Does this device use functionShadedFill(), axialShadedFill(), and + // radialShadedFill()? If this returns false, these shaded fills + // will be reduced to a series of other drawing operations. + virtual GBool useShadedFills(int type) + { return type < 4 && level >= psLevel2; } + + // Does this device use drawForm()? If this returns false, + // form-type XObjects will be interpreted (i.e., unrolled). + virtual GBool useDrawForm() { return preload; } + + // Does this device use beginType3Char/endType3Char? Otherwise, + // text in Type 3 fonts will be drawn with drawChar/drawString. + virtual GBool interpretType3Chars() { return gFalse; } + + // This device now supports text in pattern colorspace! + virtual GBool supportTextCSPattern(GfxState *state) + { return state->getFillColorSpace()->getMode() == csPattern; } + + //----- header/trailer (used only if manualCtrl is true) + + // Write the document-level header. + void writeHeader(int firstPage, int lastPage, + PDFRectangle *mediaBox, PDFRectangle *cropBox, + int pageRotate, char *pstitle); + + // Write the Xpdf procset. + void writeXpdfProcset(); + + // Write the trailer for the current page. + void writePageTrailer(); + + // Write the document trailer. + void writeTrailer(); + + //----- initialization and control + + // Check to see if a page slice should be displayed. If this + // returns false, the page display is aborted. Typically, an + // OutputDev will use some alternate means to display the page + // before returning false. + virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI, + int rotate, GBool useMediaBox, GBool crop, + int sliceX, int sliceY, int sliceW, int sliceH, + GBool printing, Catalog *catalog, + GBool (*abortCheckCbk)(void *data) = NULL, + void *abortCheckCbkData = NULL); + + // Start a page. + virtual void startPage(int pageNum, GfxState *state); + + // End a page. + virtual void endPage(); + + //----- save/restore graphics state + virtual void saveState(GfxState *state); + virtual void restoreState(GfxState *state); + + //----- update graphics state + virtual void updateCTM(GfxState *state, double m11, double m12, + double m21, double m22, double m31, double m32); + virtual void updateLineDash(GfxState *state); + virtual void updateFlatness(GfxState *state); + virtual void updateLineJoin(GfxState *state); + virtual void updateLineCap(GfxState *state); + virtual void updateMiterLimit(GfxState *state); + virtual void updateLineWidth(GfxState *state); + virtual void updateFillColorSpace(GfxState *state); + virtual void updateStrokeColorSpace(GfxState *state); + virtual void updateFillColor(GfxState *state); + virtual void updateStrokeColor(GfxState *state); + virtual void updateFillOverprint(GfxState *state); + virtual void updateStrokeOverprint(GfxState *state); + virtual void updateTransfer(GfxState *state); + + //----- update text state + virtual void updateFont(GfxState *state); + virtual void updateTextMat(GfxState *state); + virtual void updateCharSpace(GfxState *state); + virtual void updateRender(GfxState *state); + virtual void updateRise(GfxState *state); + virtual void updateWordSpace(GfxState *state); + virtual void updateHorizScaling(GfxState *state); + virtual void updateTextPos(GfxState *state); + virtual void updateTextShift(GfxState *state, double shift); + + //----- path painting + virtual void stroke(GfxState *state); + virtual void fill(GfxState *state); + virtual void eoFill(GfxState *state); + virtual GBool tilingPatternFill(GfxState *state, Catalog *cat, Object *str, + double *pmat, int paintType, int tilingType, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep); + virtual GBool functionShadedFill(GfxState *state, + GfxFunctionShading *shading); + virtual GBool axialShadedFill(GfxState *state, GfxAxialShading *shading, double /*tMin*/, double /*tMax*/); + virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *shading, double /*sMin*/, double /*sMax*/); + + //----- path clipping + virtual void clip(GfxState *state); + virtual void eoClip(GfxState *state); + virtual void clipToStrokePath(GfxState *state); + + //----- text drawing + virtual void drawString(GfxState *state, GooString *s); + virtual void beginTextObject(GfxState *state); + virtual GBool deviceHasTextClip(GfxState *state) { return haveTextClip && haveCSPattern; } + virtual void endTextObject(GfxState *state); + + //----- image drawing + virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool interpolate, GBool inlineImg); + virtual void drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap *colorMap, + GBool interpolate, int *maskColors, GBool inlineImg); + virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, int maskWidth, int maskHeight, + GBool maskInvert, GBool maskInterpolate); + // If current colorspace ist pattern, + // need this device special handling for masks in pattern colorspace? + // Default is false + virtual GBool fillMaskCSPattern(GfxState * state) + { return state->getFillColorSpace()->getMode() == csPattern && (level != psLevel1 && level != psLevel1Sep); } + virtual void endMaskClip(GfxState * /*state*/); + +#if OPI_SUPPORT + //----- OPI functions + virtual void opiBegin(GfxState *state, Dict *opiDict); + virtual void opiEnd(GfxState *state, Dict *opiDict); +#endif + + //----- Type 3 font operators + virtual void type3D0(GfxState *state, double wx, double wy); + virtual void type3D1(GfxState *state, double wx, double wy, + double llx, double lly, double urx, double ury); + + //----- form XObjects + virtual void drawForm(Ref ref); + + //----- PostScript XObjects + virtual void psXObject(Stream *psStream, Stream *level1Stream); + + //----- miscellaneous + void setOffset(double x, double y) + { tx0 = x; ty0 = y; } + void setScale(double x, double y) + { xScale0 = x; yScale0 = y; } + void setRotate(int rotateA) + { rotate0 = rotateA; } + void setClip(double llx, double lly, double urx, double ury) + { clipLLX0 = llx; clipLLY0 = lly; clipURX0 = urx; clipURY0 = ury; } + void setUnderlayCbk(void (*cbk)(PSOutputDev *psOut, void *data), + void *data) + { underlayCbk = cbk; underlayCbkData = data; } + void setOverlayCbk(void (*cbk)(PSOutputDev *psOut, void *data), + void *data) + { overlayCbk = cbk; overlayCbkData = data; } + void setDisplayText(GBool display) { displayText = display; } + +private: + + void init(PSOutputFunc outputFuncA, void *outputStreamA, + PSFileType fileTypeA, char *pstitle, PDFDoc *doc, XRef *xrefA, Catalog *catalog, + int firstPage, int lastPage, PSOutMode modeA, + int imgLLXA, int imgLLYA, int imgURXA, int imgURYA, + GBool manualCtrlA, int paperWidthA, int paperHeightA, + GBool duplexA); + void setupResources(Dict *resDict); + void setupFonts(Dict *resDict); + void setupFont(GfxFont *font, Dict *parentResDict); + void setupEmbeddedType1Font(Ref *id, GooString *psName); + void setupExternalType1Font(GooString *fileName, GooString *psName); + void setupEmbeddedType1CFont(GfxFont *font, Ref *id, GooString *psName); + void setupEmbeddedOpenTypeT1CFont(GfxFont *font, Ref *id, GooString *psName); + void setupEmbeddedTrueTypeFont(GfxFont *font, Ref *id, GooString *psName); + GooString *setupExternalTrueTypeFont(GfxFont *font); + void setupEmbeddedCIDType0Font(GfxFont *font, Ref *id, GooString *psName); + void setupEmbeddedCIDTrueTypeFont(GfxFont *font, Ref *id, GooString *psName, + GBool needVerticalMetrics); + void setupEmbeddedOpenTypeCFFFont(GfxFont *font, Ref *id, GooString *psName); + GooString *setupExternalCIDTrueTypeFont(GfxFont *font, GooString *fileName, int faceIndex = 0); + void setupType3Font(GfxFont *font, GooString *psName, Dict *parentResDict); + void setupImages(Dict *resDict); + void setupImage(Ref id, Stream *str); + void setupForms(Dict *resDict); + void setupForm(Ref id, Object *strObj); + void addProcessColor(double c, double m, double y, double k); + void addCustomColor(GfxSeparationColorSpace *sepCS); + void doPath(GfxPath *path); + void maskToClippingPath(Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert); + void doImageL1(Object *ref, GfxImageColorMap *colorMap, + GBool invert, GBool inlineImg, + Stream *str, int width, int height, int len, + int *maskColors, Stream *maskStr, + int maskWidth, int maskHeight, GBool maskInvert); + void doImageL1Sep(Object *ref, GfxImageColorMap *colorMap, + GBool invert, GBool inlineImg, + Stream *str, int width, int height, int len, + int *maskColors, Stream *maskStr, + int maskWidth, int maskHeight, GBool maskInvert); + void doImageL2(Object *ref, GfxImageColorMap *colorMap, + GBool invert, GBool inlineImg, + Stream *str, int width, int height, int len, + int *maskColors, Stream *maskStr, + int maskWidth, int maskHeight, GBool maskInvert); + void doImageL3(Object *ref, GfxImageColorMap *colorMap, + GBool invert, GBool inlineImg, + Stream *str, int width, int height, int len, + int *maskColors, Stream *maskStr, + int maskWidth, int maskHeight, GBool maskInvert); + void dumpColorSpaceL2(GfxColorSpace *colorSpace, + GBool genXform, GBool updateColors, + GBool map01); + GBool tilingPatternFillL1(GfxState *state, Catalog *cat, Object *str, + double *pmat, int paintType, int tilingType, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep); + GBool tilingPatternFillL2(GfxState *state, Catalog *cat, Object *str, + double *pmat, int paintType, int tilingType, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep); + +#if OPI_SUPPORT + void opiBegin20(GfxState *state, Dict *dict); + void opiBegin13(GfxState *state, Dict *dict); + void opiTransform(GfxState *state, double x0, double y0, + double *x1, double *y1); +#endif + void cvtFunction(Function *func); + + // Write the document-level setup. + void writeDocSetup(PDFDoc *doc, Catalog *catalog, int firstPage, int lastPage, GBool duplexA); + + void writePSChar(char c); + void writePS(char *s); + void writePSBuf(char *s, int len); + void writePSFmt(const char *fmt, ...); + void writePSString(GooString *s); + void writePSName(char *s); + GooString *filterPSLabel(GooString *label, GBool *needParens=0); + void writePSTextLine(GooString *s); + + PSLevel level; // PostScript level (1, 2, separation) + PSOutMode mode; // PostScript mode (PS, EPS, form) + int paperWidth; // width of paper, in pts + int paperHeight; // height of paper, in pts + int prevWidth; // width of previous page + // (only psModePSOrigPageSizes output mode) + int prevHeight; // height of previous page + // (only psModePSOrigPageSizes output mode) + int imgLLX, imgLLY, // imageable area, in pts + imgURX, imgURY; + GBool substFonts; // substitute missing fonts + GBool preload; // load all images into memory, and + // predefine forms + + PSOutputFunc outputFunc; + void *outputStream; + PSFileType fileType; // file / pipe / stdout + GBool manualCtrl; + int seqPage; // current sequential page number + void (*underlayCbk)(PSOutputDev *psOut, void *data); + void *underlayCbkData; + void (*overlayCbk)(PSOutputDev *psOut, void *data); + void *overlayCbkData; + + XRef *xref; // the xref table for this PDF file + Catalog *m_catalog; // the catalog for this PDF file + + Ref *fontIDs; // list of object IDs of all used fonts + int fontIDLen; // number of entries in fontIDs array + int fontIDSize; // size of fontIDs array + Ref *fontFileIDs; // list of object IDs of all embedded fonts + int fontFileIDLen; // number of entries in fontFileIDs array + int fontFileIDSize; // size of fontFileIDs array + GooString **fontFileNames; // list of names of all embedded external fonts + GooString **psFileNames; // list of names of all embedded external fonts + int fontFileNameLen; // number of entries in fontFileNames array + int fontFileNameSize; // size of fontFileNames array + int nextTrueTypeNum; // next unique number to append to a TrueType + // font name + PSFont8Info *font8Info; // info for 8-bit fonts + int font8InfoLen; // number of entries in font8Info array + int font8InfoSize; // size of font8Info array + PSFont16Enc *font16Enc; // encodings for substitute 16-bit fonts + int font16EncLen; // number of entries in font16Enc array + int font16EncSize; // size of font16Enc array + Ref *imgIDs; // list of image IDs for in-memory images + int imgIDLen; // number of entries in imgIDs array + int imgIDSize; // size of imgIDs array + Ref *formIDs; // list of IDs for predefined forms + int formIDLen; // number of entries in formIDs array + int formIDSize; // size of formIDs array + GooList *xobjStack; // stack of XObject dicts currently being + // processed + int numSaves; // current number of gsaves + int numTilingPatterns; // current number of nested tiling patterns + int nextFunc; // next unique number to use for a function + + double tx0, ty0; // global translation + double xScale0, yScale0; // global scaling + int rotate0; // rotation angle (0, 90, 180, 270) + double clipLLX0, clipLLY0, + clipURX0, clipURY0; + double tx, ty; // global translation for current page + double xScale, yScale; // global scaling for current page + int rotate; // rotation angle for current page + double epsX1, epsY1, // EPS bounding box (unrotated) + epsX2, epsY2; + + GooString *embFontList; // resource comments for embedded fonts + + int processColors; // used process colors + PSOutCustomColor // used custom colors + *customColors; + + GBool haveTextClip; // set if text has been drawn with a + // clipping render mode + GBool haveCSPattern; // set if text has been drawn with a + // clipping render mode because of pattern colorspace + + GBool inType3Char; // inside a Type 3 CharProc + GBool inUncoloredPattern; // inside a uncolored pattern (PaintType = 2) + GooString *t3String; // Type 3 content string + double t3WX, t3WY, // Type 3 character parameters + t3LLX, t3LLY, t3URX, t3URY; + GBool t3Cacheable; // cleared if char is not cacheable + GBool t3NeedsRestore; // set if a 'q' operator was issued + GBool forceRasterize; // forces the page to be rasterized into a image before printing + GBool displayText; // displayText + +#if OPI_SUPPORT + int opi13Nest; // nesting level of OPI 1.3 objects + int opi20Nest; // nesting level of OPI 2.0 objects +#endif + + GBool ok; // set up ok? + + + friend class WinPDFPrinter; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PSTokenizer.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/PSTokenizer.cc new file mode 100644 index 00000000000..05127f0d03c --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PSTokenizer.cc @@ -0,0 +1,159 @@ +//======================================================================== +// +// PSTokenizer.cc +// +// Copyright 2002-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006 Scott Turner <scotty1024@mac.com> +// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdio.h> +#include <stdlib.h> +#include "PSTokenizer.h" + +//------------------------------------------------------------------------ + +// A '1' in this array means the character is white space. A '1' or +// '2' means the character ends a name or command. +static const char specialChars[256] = { + 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, // 0x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1x + 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, // 2x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, // 3x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 5x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 7x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ax + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // bx + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // cx + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // dx + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ex + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // fx +}; + +//------------------------------------------------------------------------ + +PSTokenizer::PSTokenizer(int (*getCharFuncA)(void *), void *dataA) { + getCharFunc = getCharFuncA; + data = dataA; + charBuf = -1; +} + +PSTokenizer::~PSTokenizer() { +} + +GBool PSTokenizer::getToken(char *buf, int size, int *length) { + GBool comment, backslash; + int c; + int i; + + // skip leading whitespace and comments + comment = gFalse; + while (1) { + if ((c = getChar()) == EOF) { + buf[0] = '\0'; + *length = 0; + return gFalse; + } + if (comment) { + if (c == '\x0a' || c == '\x0d') { + comment = gFalse; + } + } else if (c == '%') { + comment = gTrue; + } else if (specialChars[c] != 1) { + break; + } + } + + // Reserve room for terminating '\0' + size--; + + // read a token + i = 0; + buf[i++] = c; + if (c == '(') { + backslash = gFalse; + while ((c = lookChar()) != EOF) { + consumeChar(); + if (i < size) { + buf[i++] = c; + } + if (c == '\\') { + backslash = gTrue; + } else if (!backslash && c == ')') { + break; + } else { + backslash = gFalse; + } + } + } else if (c == '<') { + while ((c = lookChar()) != EOF) { + consumeChar(); + if (i < size && specialChars[c] != 1) { + buf[i++] = c; + } + if (c == '>') { + break; + } + } + } else if (c != '[' && c != ']') { + while ((c = lookChar()) != EOF && !specialChars[c]) { + consumeChar(); + if (i < size) { + buf[i++] = c; + } + } + } + // Zero terminate token string + buf[i] = '\0'; + // Return length of token + *length = i; + + return gTrue; +} + +int PSTokenizer::lookChar() { + if (charBuf < 0) { + charBuf = (*getCharFunc)(data); + } + return charBuf; +} + +void PSTokenizer::consumeChar() { + charBuf = -1; +} + +int PSTokenizer::getChar() { + int c = charBuf; + + if (c < 0) { + c = (*getCharFunc)(data); + } else { + charBuf = -1; + } + return c; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PSTokenizer.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/PSTokenizer.h new file mode 100644 index 00000000000..fc2f053d3f2 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PSTokenizer.h @@ -0,0 +1,54 @@ +//======================================================================== +// +// PSTokenizer.h +// +// Copyright 2002-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006 Scott Turner <scotty1024@mac.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef PSTOKENIZER_H +#define PSTOKENIZER_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" + +//------------------------------------------------------------------------ + +class PSTokenizer { +public: + + PSTokenizer(int (*getCharFuncA)(void *), void *dataA); + ~PSTokenizer(); + + // Get the next PostScript token. Returns false at end-of-stream. + GBool getToken(char *buf, int size, int *length); + +private: + + int lookChar(); + void consumeChar(); + int getChar(); + + int (*getCharFunc)(void *); + void *data; + int charBuf; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Page.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Page.cc new file mode 100644 index 00000000000..9bae123dd38 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Page.cc @@ -0,0 +1,715 @@ +//======================================================================== +// +// Page.cc +// +// Copyright 1996-2007 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2005-2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2006-2008 Pino Toscano <pino@kde.org> +// Copyright (C) 2006 Nickolay V. Shmyrev <nshmyrev@yandex.ru> +// Copyright (C) 2006 Scott Turner <scotty1024@mac.com> +// Copyright (C) 2006-2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2008 Iñigo Martínez <inigomartinez@gmail.com> +// Copyright (C) 2008 Brad Hards <bradh@kde.org> +// Copyright (C) 2008 Ilya Gorenbein <igorenbein@finjan.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stddef.h> +#include <limits.h> +#include "GlobalParams.h" +#include "Object.h" +#include "Array.h" +#include "Dict.h" +#include "XRef.h" +#include "Link.h" +#include "OutputDev.h" +#include "Gfx.h" +#include "GfxState.h" +#include "Annot.h" +#include "TextOutputDev.h" +#include "Form.h" +#include "Error.h" +#include "Page.h" +#include "Catalog.h" +#include "Form.h" + +//------------------------------------------------------------------------ +// PDFRectangle +//------------------------------------------------------------------------ + +void PDFRectangle::clipTo(PDFRectangle *rect) { + if (x1 < rect->x1) { + x1 = rect->x1; + } else if (x1 > rect->x2) { + x1 = rect->x2; + } + if (x2 < rect->x1) { + x2 = rect->x1; + } else if (x2 > rect->x2) { + x2 = rect->x2; + } + if (y1 < rect->y1) { + y1 = rect->y1; + } else if (y1 > rect->y2) { + y1 = rect->y2; + } + if (y2 < rect->y1) { + y2 = rect->y1; + } else if (y2 > rect->y2) { + y2 = rect->y2; + } +} + +//------------------------------------------------------------------------ +// PageAttrs +//------------------------------------------------------------------------ + +PageAttrs::PageAttrs(PageAttrs *attrs, Dict *dict) { + Object obj1; + PDFRectangle mBox; + const GBool isPage = dict->is("Page"); + + // get old/default values + if (attrs) { + mediaBox = attrs->mediaBox; + cropBox = attrs->cropBox; + haveCropBox = attrs->haveCropBox; + rotate = attrs->rotate; + attrs->resources.copy(&resources); + } else { + // set default MediaBox to 8.5" x 11" -- this shouldn't be necessary + // but some (non-compliant) PDF files don't specify a MediaBox + mediaBox.x1 = 0; + mediaBox.y1 = 0; + mediaBox.x2 = 612; + mediaBox.y2 = 792; + cropBox.x1 = cropBox.y1 = cropBox.x2 = cropBox.y2 = 0; + haveCropBox = gFalse; + rotate = 0; + resources.initNull(); + } + + // media box + if (readBox(dict, "MediaBox", &mBox)) { + mediaBox = mBox; + } + + // crop box + if (readBox(dict, "CropBox", &cropBox)) { + haveCropBox = gTrue; + } + if (!haveCropBox) { + cropBox = mediaBox; + } + + if (isPage) { + // cropBox can not be bigger than mediaBox + if (cropBox.x2 - cropBox.x1 > mediaBox.x2 - mediaBox.x1) + { + cropBox.x1 = mediaBox.x1; + cropBox.x2 = mediaBox.x2; + } + if (cropBox.y2 - cropBox.y1 > mediaBox.y2 - mediaBox.y1) + { + cropBox.y1 = mediaBox.y1; + cropBox.y2 = mediaBox.y2; + } + } + + // other boxes + bleedBox = cropBox; + readBox(dict, "BleedBox", &bleedBox); + trimBox = cropBox; + readBox(dict, "TrimBox", &trimBox); + artBox = cropBox; + readBox(dict, "ArtBox", &artBox); + + if (isPage) { + // clip all other boxes to the media box + cropBox.clipTo(&mediaBox); + bleedBox.clipTo(&mediaBox); + trimBox.clipTo(&mediaBox); + artBox.clipTo(&mediaBox); + } + + // rotate + dict->lookup("Rotate", &obj1); + if (obj1.isInt()) { + rotate = obj1.getInt(); + } + obj1.free(); + while (rotate < 0) { + rotate += 360; + } + while (rotate >= 360) { + rotate -= 360; + } + + // misc attributes + dict->lookup("LastModified", &lastModified); + dict->lookup("BoxColorInfo", &boxColorInfo); + dict->lookup("Group", &group); + dict->lookup("Metadata", &metadata); + dict->lookup("PieceInfo", &pieceInfo); + dict->lookup("SeparationInfo", &separationInfo); + + // resource dictionary + dict->lookup("Resources", &obj1); + if (obj1.isDict()) { + resources.free(); + obj1.copy(&resources); + } + obj1.free(); +} + +PageAttrs::~PageAttrs() { + lastModified.free(); + boxColorInfo.free(); + group.free(); + metadata.free(); + pieceInfo.free(); + separationInfo.free(); + resources.free(); +} + +GBool PageAttrs::readBox(Dict *dict, char *key, PDFRectangle *box) { + PDFRectangle tmp; + double t; + Object obj1, obj2; + GBool ok; + + dict->lookup(key, &obj1); + if (obj1.isArray() && obj1.arrayGetLength() == 4) { + ok = gTrue; + obj1.arrayGet(0, &obj2); + if (obj2.isNum()) { + tmp.x1 = obj2.getNum(); + } else { + ok = gFalse; + } + obj2.free(); + obj1.arrayGet(1, &obj2); + if (obj2.isNum()) { + tmp.y1 = obj2.getNum(); + } else { + ok = gFalse; + } + obj2.free(); + obj1.arrayGet(2, &obj2); + if (obj2.isNum()) { + tmp.x2 = obj2.getNum(); + } else { + ok = gFalse; + } + obj2.free(); + obj1.arrayGet(3, &obj2); + if (obj2.isNum()) { + tmp.y2 = obj2.getNum(); + } else { + ok = gFalse; + } + obj2.free(); + if (tmp.x1 == 0 && tmp.x2 == 0 && tmp.y1 == 0 && tmp.y2 == 0) + ok = gFalse; + if (ok) { + if (tmp.x1 > tmp.x2) { + t = tmp.x1; tmp.x1 = tmp.x2; tmp.x2 = t; + } + if (tmp.y1 > tmp.y2) { + t = tmp.y1; tmp.y1 = tmp.y2; tmp.y2 = t; + } + *box = tmp; + } + } else { + ok = gFalse; + } + obj1.free(); + return ok; +} + +//------------------------------------------------------------------------ +// Page +//------------------------------------------------------------------------ + +Page::Page(XRef *xrefA, int numA, Dict *pageDict, Ref pageRefA, PageAttrs *attrsA, Form *form) { + Object tmp; + + ok = gTrue; + xref = xrefA; + num = numA; + duration = -1; + annots = NULL; + + pageObj.initDict(pageDict); + pageRef = pageRefA; + + // get attributes + attrs = attrsA; + + // transtion + pageDict->lookupNF("Trans", &trans); + if (!(trans.isRef() || trans.isDict() || trans.isNull())) { + error(-1, "Page transition object (page %d) is wrong type (%s)", + num, trans.getTypeName()); + trans.free(); + } + + // duration + pageDict->lookupNF("Dur", &tmp); + if (!(tmp.isNum() || tmp.isNull())) { + error(-1, "Page duration object (page %d) is wrong type (%s)", + num, tmp.getTypeName()); + } else if (tmp.isNum()) { + duration = tmp.getNum(); + } + tmp.free(); + + // annotations + pageDict->lookupNF("Annots", &annotsObj); + if (!(annotsObj.isRef() || annotsObj.isArray() || annotsObj.isNull())) { + error(-1, "Page annotations object (page %d) is wrong type (%s)", + num, annotsObj.getTypeName()); + annotsObj.free(); + goto err2; + } + + // contents + pageDict->lookupNF("Contents", &contents); + if (!(contents.isRef() || contents.isArray() || + contents.isNull())) { + error(-1, "Page contents object (page %d) is wrong type (%s)", + num, contents.getTypeName()); + contents.free(); + goto err1; + } + + // thumb + pageDict->lookupNF("Thumb", &thumb); + if (!(thumb.isStream() || thumb.isNull() || thumb.isRef())) { + error(-1, "Page thumb object (page %d) is wrong type (%s)", + num, thumb.getTypeName()); + thumb.initNull(); + } + + // actions + pageDict->lookupNF("AA", &actions); + if (!(actions.isDict() || actions.isNull())) { + error(-1, "Page additional action object (page %d) is wrong type (%s)", + num, actions.getTypeName()); + actions.initNull(); + } + + return; + + trans.initNull(); + err2: + annotsObj.initNull(); + err1: + contents.initNull(); + ok = gFalse; +} + +Page::~Page() { + delete attrs; + delete annots; + pageObj.free(); + annotsObj.free(); + contents.free(); + trans.free(); + thumb.free(); + actions.free(); +} + +Annots *Page::getAnnots(Catalog *catalog) { + if (!annots) { + Object obj; + annots = new Annots(xref, catalog, getAnnots(&obj)); + obj.free(); + } + + return annots; +} + +void Page::addAnnot(Annot *annot, Catalog *catalog) { + Object obj1; + Object tmp; + Ref annotRef = annot->getRef (); + + // Make sure we have annots before adding the new one + // even if it's an empty list so that we can safely + // call annots->appendAnnot(annot) + getAnnots(catalog); + + if (annotsObj.isNull()) { + Ref annotsRef; + // page doesn't have annots array, + // we have to create it + + obj1.initArray(xref); + obj1.arrayAdd(tmp.initRef (annotRef.num, annotRef.gen)); + tmp.free(); + + annotsRef = xref->addIndirectObject (&obj1); + annotsObj.initRef(annotsRef.num, annotsRef.gen); + pageObj.dictSet ("Annots", &annotsObj); + xref->setModifiedObject (&pageObj, pageRef); + } else { + getAnnots(&obj1); + if (obj1.isArray()) { + obj1.arrayAdd (tmp.initRef (annotRef.num, annotRef.gen)); + if (annotsObj.isRef()) + xref->setModifiedObject (&obj1, annotsObj.getRef()); + else + xref->setModifiedObject (&pageObj, pageRef); + } + obj1.free(); + } + + annots->appendAnnot(annot); + + annot->setPage(&pageRef, num); +} + +Links *Page::getLinks(Catalog *catalog) { + return new Links(getAnnots(catalog)); +} + +FormPageWidgets *Page::getFormWidgets(Catalog *catalog) { + return new FormPageWidgets(getAnnots(catalog), num, catalog->getForm()); +} + +void Page::display(OutputDev *out, double hDPI, double vDPI, + int rotate, GBool useMediaBox, GBool crop, + GBool printing, Catalog *catalog, + GBool (*abortCheckCbk)(void *data), + void *abortCheckCbkData, + GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), + void *annotDisplayDecideCbkData) { + displaySlice(out, hDPI, vDPI, rotate, useMediaBox, crop, -1, -1, -1, -1, printing, catalog, + abortCheckCbk, abortCheckCbkData, + annotDisplayDecideCbk, annotDisplayDecideCbkData); +} + +Gfx *Page::createGfx(OutputDev *out, double hDPI, double vDPI, + int rotate, GBool useMediaBox, GBool crop, + int sliceX, int sliceY, int sliceW, int sliceH, + GBool printing, Catalog *catalog, + GBool (*abortCheckCbk)(void *data), + void *abortCheckCbkData, + GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), + void *annotDisplayDecideCbkData) { + PDFRectangle *mediaBox, *cropBox; + PDFRectangle box; + Gfx *gfx; + + rotate += getRotate(); + if (rotate >= 360) { + rotate -= 360; + } else if (rotate < 0) { + rotate += 360; + } + + makeBox(hDPI, vDPI, rotate, useMediaBox, out->upsideDown(), + sliceX, sliceY, sliceW, sliceH, &box, &crop); + cropBox = getCropBox(); + mediaBox = getMediaBox(); + + if (globalParams->getPrintCommands()) { + printf("***** MediaBox = ll:%g,%g ur:%g,%g\n", + mediaBox->x1, mediaBox->y1, mediaBox->x2, mediaBox->y2); + printf("***** CropBox = ll:%g,%g ur:%g,%g\n", + cropBox->x1, cropBox->y1, cropBox->x2, cropBox->y2); + printf("***** Rotate = %d\n", attrs->getRotate()); + } + + gfx = new Gfx(xref, out, num, attrs->getResourceDict(), catalog, + hDPI, vDPI, &box, crop ? cropBox : (PDFRectangle *)NULL, + rotate, abortCheckCbk, abortCheckCbkData); + + return gfx; +} + +void Page::displaySlice(OutputDev *out, double hDPI, double vDPI, + int rotate, GBool useMediaBox, GBool crop, + int sliceX, int sliceY, int sliceW, int sliceH, + GBool printing, Catalog *catalog, + GBool (*abortCheckCbk)(void *data), + void *abortCheckCbkData, + GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), + void *annotDisplayDecideCbkData) { + Gfx *gfx; + Object obj; + Annots *annotList; + int i; + + if (!out->checkPageSlice(this, hDPI, vDPI, rotate, useMediaBox, crop, + sliceX, sliceY, sliceW, sliceH, + printing, catalog, + abortCheckCbk, abortCheckCbkData)) { + return; + } + + gfx = createGfx(out, hDPI, vDPI, rotate, useMediaBox, crop, + sliceX, sliceY, sliceW, sliceH, + printing, catalog, + abortCheckCbk, abortCheckCbkData, + annotDisplayDecideCbk, annotDisplayDecideCbkData); + + contents.fetch(xref, &obj); + if (!obj.isNull()) { + gfx->saveState(); + gfx->display(&obj); + gfx->restoreState(); + } + obj.free(); + + // draw annotations + annotList = getAnnots(catalog); + + if (annotList->getNumAnnots() > 0) { + if (globalParams->getPrintCommands()) { + printf("***** Annotations\n"); + } + for (i = 0; i < annotList->getNumAnnots(); ++i) { + Annot *annot = annotList->getAnnot(i); + if ((annotDisplayDecideCbk && + (*annotDisplayDecideCbk)(annot, annotDisplayDecideCbkData)) || + !annotDisplayDecideCbk) { + annotList->getAnnot(i)->draw(gfx, printing); + } + } + out->dump(); + } + + delete gfx; +} + +void Page::display(Gfx *gfx) { + Object obj; + + contents.fetch(xref, &obj); + if (!obj.isNull()) { + gfx->saveState(); + gfx->display(&obj); + gfx->restoreState(); + } + obj.free(); +} + +GBool Page::loadThumb(unsigned char **data_out, + int *width_out, int *height_out, + int *rowstride_out) +{ + unsigned int pixbufdatasize; + int width, height, bits; + Object obj1, fetched_thumb; + Dict *dict; + GfxColorSpace *colorSpace; + GBool success = gFalse; + Stream *str; + GfxImageColorMap *colorMap; + + /* Get stream dict */ + thumb.fetch(xref, &fetched_thumb); + if (!fetched_thumb.isStream()) { + fetched_thumb.free(); + return gFalse; + } + + dict = fetched_thumb.streamGetDict(); + str = fetched_thumb.getStream(); + + if (!dict->lookupInt("Width", "W", &width)) + goto fail1; + if (!dict->lookupInt("Height", "H", &height)) + goto fail1; + if (!dict->lookupInt("BitsPerComponent", "BPC", &bits)) + goto fail1; + + /* Check for invalid dimensions and integer overflow. */ + if (width <= 0 || height <= 0) + goto fail1; + if (width > INT_MAX / 3 / height) + goto fail1; + pixbufdatasize = width * height * 3; + + /* Get color space */ + dict->lookup ("ColorSpace", &obj1); + if (obj1.isNull ()) { + obj1.free (); + dict->lookup ("CS", &obj1); + } + colorSpace = GfxColorSpace::parse(&obj1, NULL); + obj1.free(); + if (!colorSpace) { + fprintf (stderr, "Error: Cannot parse color space\n"); + goto fail1; + } + + dict->lookup("Decode", &obj1); + if (obj1.isNull()) { + obj1.free(); + dict->lookup("D", &obj1); + } + colorMap = new GfxImageColorMap(bits, &obj1, colorSpace); + obj1.free(); + if (!colorMap->isOk()) { + fprintf (stderr, "Error: invalid colormap\n"); + delete colorMap; + goto fail1; + } + + if (data_out) { + unsigned char *pixbufdata = (unsigned char *) gmalloc(pixbufdatasize); + unsigned char *p = pixbufdata; + ImageStream *imgstr = new ImageStream(str, width, + colorMap->getNumPixelComps(), + colorMap->getBits()); + imgstr->reset(); + for (int row = 0; row < height; ++row) { + for (int col = 0; col < width; ++col) { + Guchar pix[gfxColorMaxComps]; + GfxRGB rgb; + + imgstr->getPixel(pix); + colorMap->getRGB(pix, &rgb); + + *p++ = colToByte(rgb.r); + *p++ = colToByte(rgb.g); + *p++ = colToByte(rgb.b); + } + } + *data_out = pixbufdata; + imgstr->close(); + delete imgstr; + } + + success = gTrue; + + if (width_out) + *width_out = width; + if (height_out) + *height_out = height; + if (rowstride_out) + *rowstride_out = width * 3; + + delete colorMap; + fail1: + fetched_thumb.free(); + + return success; +} + +void Page::makeBox(double hDPI, double vDPI, int rotate, + GBool useMediaBox, GBool upsideDown, + double sliceX, double sliceY, double sliceW, double sliceH, + PDFRectangle *box, GBool *crop) { + PDFRectangle *mediaBox, *cropBox, *baseBox; + double kx, ky; + + mediaBox = getMediaBox(); + cropBox = getCropBox(); + if (sliceW >= 0 && sliceH >= 0) { + baseBox = useMediaBox ? mediaBox : cropBox; + kx = 72.0 / hDPI; + ky = 72.0 / vDPI; + if (rotate == 90) { + if (upsideDown) { + box->x1 = baseBox->x1 + ky * sliceY; + box->x2 = baseBox->x1 + ky * (sliceY + sliceH); + } else { + box->x1 = baseBox->x2 - ky * (sliceY + sliceH); + box->x2 = baseBox->x2 - ky * sliceY; + } + box->y1 = baseBox->y1 + kx * sliceX; + box->y2 = baseBox->y1 + kx * (sliceX + sliceW); + } else if (rotate == 180) { + box->x1 = baseBox->x2 - kx * (sliceX + sliceW); + box->x2 = baseBox->x2 - kx * sliceX; + if (upsideDown) { + box->y1 = baseBox->y1 + ky * sliceY; + box->y2 = baseBox->y1 + ky * (sliceY + sliceH); + } else { + box->y1 = baseBox->y2 - ky * (sliceY + sliceH); + box->y2 = baseBox->y2 - ky * sliceY; + } + } else if (rotate == 270) { + if (upsideDown) { + box->x1 = baseBox->x2 - ky * (sliceY + sliceH); + box->x2 = baseBox->x2 - ky * sliceY; + } else { + box->x1 = baseBox->x1 + ky * sliceY; + box->x2 = baseBox->x1 + ky * (sliceY + sliceH); + } + box->y1 = baseBox->y2 - kx * (sliceX + sliceW); + box->y2 = baseBox->y2 - kx * sliceX; + } else { + box->x1 = baseBox->x1 + kx * sliceX; + box->x2 = baseBox->x1 + kx * (sliceX + sliceW); + if (upsideDown) { + box->y1 = baseBox->y2 - ky * (sliceY + sliceH); + box->y2 = baseBox->y2 - ky * sliceY; + } else { + box->y1 = baseBox->y1 + ky * sliceY; + box->y2 = baseBox->y1 + ky * (sliceY + sliceH); + } + } + } else if (useMediaBox) { + *box = *mediaBox; + } else { + *box = *cropBox; + *crop = gFalse; + } +} + +void Page::processLinks(OutputDev *out, Catalog *catalog) { + Links *links; + int i; + + links = getLinks(catalog); + for (i = 0; i < links->getNumLinks(); ++i) { + out->processLink(links->getLink(i), catalog); + } + delete links; +} + +void Page::getDefaultCTM(double *ctm, double hDPI, double vDPI, + int rotate, GBool useMediaBox, GBool upsideDown) { + GfxState *state; + int i; + rotate += getRotate(); + if (rotate >= 360) { + rotate -= 360; + } else if (rotate < 0) { + rotate += 360; + } + state = new GfxState(hDPI, vDPI, + useMediaBox ? getMediaBox() : getCropBox(), + rotate, upsideDown); + for (i = 0; i < 6; ++i) { + ctm[i] = state->getCTM()[i]; + } + delete state; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Page.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Page.h new file mode 100644 index 00000000000..1ab69f396f0 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Page.h @@ -0,0 +1,255 @@ +//======================================================================== +// +// Page.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2006 Pino Toscano <pino@kde.org> +// Copyright (C) 2006, 2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2008 Iñigo Martínez <inigomartinez@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef PAGE_H +#define PAGE_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "Object.h" + +class Dict; +class XRef; +class OutputDev; +class Links; +class Catalog; +class Annots; +class Annot; +class Gfx; +class FormPageWidgets; +class Form; + +//------------------------------------------------------------------------ + +class PDFRectangle { +public: + double x1, y1, x2, y2; + + PDFRectangle() { x1 = y1 = x2 = y2 = 0; } + PDFRectangle(double x1A, double y1A, double x2A, double y2A) + { x1 = x1A; y1 = y1A; x2 = x2A; y2 = y2A; } + GBool isValid() { return x1 != 0 || y1 != 0 || x2 != 0 || y2 != 0; } + GBool contains(double x, double y) { return x1 <= x && x <= x2 && y1 <= y && y <= y2; } + void clipTo(PDFRectangle *rect); +}; + +//------------------------------------------------------------------------ +// PageAttrs +//------------------------------------------------------------------------ + +class PageAttrs { +public: + + // Construct a new PageAttrs object by merging a dictionary + // (of type Pages or Page) into another PageAttrs object. If + // <attrs> is NULL, uses defaults. + PageAttrs(PageAttrs *attrs, Dict *dict); + + // Destructor. + ~PageAttrs(); + + // Accessors. + PDFRectangle *getMediaBox() { return &mediaBox; } + PDFRectangle *getCropBox() { return &cropBox; } + GBool isCropped() { return haveCropBox; } + PDFRectangle *getBleedBox() { return &bleedBox; } + PDFRectangle *getTrimBox() { return &trimBox; } + PDFRectangle *getArtBox() { return &artBox; } + int getRotate() { return rotate; } + GooString *getLastModified() + { return lastModified.isString() + ? lastModified.getString() : (GooString *)NULL; } + Dict *getBoxColorInfo() + { return boxColorInfo.isDict() ? boxColorInfo.getDict() : (Dict *)NULL; } + Dict *getGroup() + { return group.isDict() ? group.getDict() : (Dict *)NULL; } + Stream *getMetadata() + { return metadata.isStream() ? metadata.getStream() : (Stream *)NULL; } + Dict *getPieceInfo() + { return pieceInfo.isDict() ? pieceInfo.getDict() : (Dict *)NULL; } + Dict *getSeparationInfo() + { return separationInfo.isDict() + ? separationInfo.getDict() : (Dict *)NULL; } + Dict *getResourceDict() + { return resources.isDict() ? resources.getDict() : (Dict *)NULL; } + +private: + + GBool readBox(Dict *dict, char *key, PDFRectangle *box); + + PDFRectangle mediaBox; + PDFRectangle cropBox; + GBool haveCropBox; + PDFRectangle bleedBox; + PDFRectangle trimBox; + PDFRectangle artBox; + int rotate; + Object lastModified; + Object boxColorInfo; + Object group; + Object metadata; + Object pieceInfo; + Object separationInfo; + Object resources; +}; + +//------------------------------------------------------------------------ +// Page +//------------------------------------------------------------------------ + +class Page { +public: + + // Constructor. + Page(XRef *xrefA, int numA, Dict *pageDict, Ref pageRefA, PageAttrs *attrsA, Form *form); + + // Destructor. + ~Page(); + + // Is page valid? + GBool isOk() { return ok; } + + // Get page parameters. + int getNum() { return num; } + PDFRectangle *getMediaBox() { return attrs->getMediaBox(); } + PDFRectangle *getCropBox() { return attrs->getCropBox(); } + GBool isCropped() { return attrs->isCropped(); } + double getMediaWidth() + { return attrs->getMediaBox()->x2 - attrs->getMediaBox()->x1; } + double getMediaHeight() + { return attrs->getMediaBox()->y2 - attrs->getMediaBox()->y1; } + double getCropWidth() + { return attrs->getCropBox()->x2 - attrs->getCropBox()->x1; } + double getCropHeight() + { return attrs->getCropBox()->y2 - attrs->getCropBox()->y1; } + PDFRectangle *getBleedBox() { return attrs->getBleedBox(); } + PDFRectangle *getTrimBox() { return attrs->getTrimBox(); } + PDFRectangle *getArtBox() { return attrs->getArtBox(); } + int getRotate() { return attrs->getRotate(); } + GooString *getLastModified() { return attrs->getLastModified(); } + Dict *getBoxColorInfo() { return attrs->getBoxColorInfo(); } + Dict *getGroup() { return attrs->getGroup(); } + Stream *getMetadata() { return attrs->getMetadata(); } + Dict *getPieceInfo() { return attrs->getPieceInfo(); } + Dict *getSeparationInfo() { return attrs->getSeparationInfo(); } + + // Get resource dictionary. + Dict *getResourceDict() { return attrs->getResourceDict(); } + + // Get annotations array. + Object *getAnnots(Object *obj) { return annotsObj.fetch(xref, obj); } + // Add a new annotation to the page + void addAnnot(Annot *annot, Catalog *catalog); + + // Return a list of links. + Links *getLinks(Catalog *catalog); + + // Return a list of annots. Ownership is transferred to the caller. + Annots *getAnnots(Catalog *catalog); + + // Get contents. + Object *getContents(Object *obj) { return contents.fetch(xref, obj); } + + // Get thumb. + Object *getThumb(Object *obj) { return thumb.fetch(xref, obj); } + GBool loadThumb(unsigned char **data, int *width, int *height, int *rowstride); + + // Get transition. + Object *getTrans(Object *obj) { return trans.fetch(xref, obj); } + + // Get form. + FormPageWidgets *getFormWidgets(Catalog *catalog); + + // Get duration, the maximum length of time, in seconds, + // that the page is displayed before the presentation automatically + // advances to the next page + double getDuration() { return duration; } + + // Get actions + Object *getActions(Object *obj) { return actions.fetch(xref, obj); } + + Gfx *createGfx(OutputDev *out, double hDPI, double vDPI, + int rotate, GBool useMediaBox, GBool crop, + int sliceX, int sliceY, int sliceW, int sliceH, + GBool printing, Catalog *catalog, + GBool (*abortCheckCbk)(void *data), + void *abortCheckCbkData, + GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), + void *annotDisplayDecideCbkData); + + // Display a page. + void display(OutputDev *out, double hDPI, double vDPI, + int rotate, GBool useMediaBox, GBool crop, + GBool printing, Catalog *catalog, + GBool (*abortCheckCbk)(void *data) = NULL, + void *abortCheckCbkData = NULL, + GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL, + void *annotDisplayDecideCbkData = NULL); + + // Display part of a page. + void displaySlice(OutputDev *out, double hDPI, double vDPI, + int rotate, GBool useMediaBox, GBool crop, + int sliceX, int sliceY, int sliceW, int sliceH, + GBool printing, Catalog *catalog, + GBool (*abortCheckCbk)(void *data) = NULL, + void *abortCheckCbkData = NULL, + GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL, + void *annotDisplayDecideCbkData = NULL); + + void display(Gfx *gfx); + + void makeBox(double hDPI, double vDPI, int rotate, + GBool useMediaBox, GBool upsideDown, + double sliceX, double sliceY, double sliceW, double sliceH, + PDFRectangle *box, GBool *crop); + + void processLinks(OutputDev *out, Catalog *catalog); + + // Get the page's default CTM. + void getDefaultCTM(double *ctm, double hDPI, double vDPI, + int rotate, GBool useMediaBox, GBool upsideDown); + +private: + + XRef *xref; // the xref table for this PDF file + Object pageObj; // page dictionary + Ref pageRef; // page reference + int num; // page number + PageAttrs *attrs; // page attributes + Annots *annots; // annotations + Object annotsObj; // annotations array + Object contents; // page contents + Object thumb; // page thumbnail + Object trans; // page transition + Object actions; // page addiction actions + double duration; // page duration + GBool ok; // true if page is valid +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PageLabelInfo.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/PageLabelInfo.cc new file mode 100644 index 00000000000..1330988ccf0 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PageLabelInfo.cc @@ -0,0 +1,389 @@ +//======================================================================== +// +// This file is under the GPLv2 or later license +// +// Copyright (C) 2005-2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005, 2009 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2011 Simon Kellner <kellner@kit.edu> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> +#include <limits.h> +#include <stdlib.h> +#include <stdio.h> +#include <assert.h> + +#include "PageLabelInfo.h" + +/* http://mathworld.wolfram.com/RomanNumerals.html */ + +static int fromRoman(const char *buffer) { + int digit_value, prev_digit_value, value; + int i; + + prev_digit_value = INT_MAX; + value = 0; + for (i = 0; buffer[i] != '\0'; i++) { + switch (buffer[i]) { + case 'm': + case 'M': + digit_value = 1000; + break; + case 'd': + case 'D': + digit_value = 500; + break; + case 'c': + case 'C': + digit_value = 100; + break; + case 'l': + case 'L': + digit_value = 50; + break; + case 'x': + case 'X': + digit_value = 10; + break; + case 'v': + case 'V': + digit_value = 5; + break; + case 'i': + case 'I': + digit_value = 1; + break; + default: + return -1; + } + + if (digit_value <= prev_digit_value) + value += digit_value; + else + value += digit_value - prev_digit_value * 2; + prev_digit_value = digit_value; + } + + return value; +} + +static void toRoman(int number, GooString *str, GBool uppercase) { + static const char uppercaseNumerals[] = "IVXLCDM"; + static const char lowercaseNumerals[] = "ivxlcdm"; + int divisor; + int i, j, k; + const char *wh; + + if (uppercase) + wh = uppercaseNumerals; + else + wh = lowercaseNumerals; + + divisor = 1000; + for (k = 3; k >= 0; k--) { + i = number / divisor; + number = number % divisor; + + switch (i) { + case 0: + break; + case 5: + str->append(wh[2 * k + 1]); + break; + case 9: + str->append(wh[2 * k + 0]); + str->append(wh[ 2 * k + 2]); + break; + case 4: + str->append(wh[2 * k + 0]); + str->append(wh[2 * k + 1]); + break; + default: + if (i > 5) { + str->append(wh[2 * k + 1]); + i -= 5; + } + for (j = 0; j < i; j++) { + str->append(wh[2 * k + 0]); + } + } + + divisor = divisor / 10; + } +} + +static int fromLatin(const char *buffer) +{ + int count; + const char *p; + + for (p = buffer; *p; p++) { + if (*p != buffer[0]) + return -1; + } + + count = p - buffer; + if (buffer[0] >= 'a' && buffer[0] <= 'z') + return 26 * (count - 1) + buffer[0] - 'a' + 1; + if (buffer[0] >= 'A' && buffer[0] <= 'Z') + return 26 * (count - 1) + buffer[0] - 'A' + 1; + + return -1; +} + +#ifdef TEST +static void toLatin(int number, GooString *str, GBool uppercase) { + char base, letter; + int i, count; + + if (uppercase) + base = 'A'; + else + base = 'a'; + + count = (number - 1) / 26 + 1; + letter = base + (number - 1) % 26; + + for (i = 0; i < count; i++) + str->append(letter); +} +#endif + +PageLabelInfo::Interval::Interval(Object *dict, int baseA) { + Object obj; + + style = None; + if (dict->dictLookup("S", &obj)->isName()) { + if (obj.isName("D")) { + style = Arabic; + } else if (obj.isName("R")) { + style = UppercaseRoman; + } else if (obj.isName("r")) { + style = LowercaseRoman; + } else if (obj.isName("A")) { + style = UppercaseLatin; + } else if (obj.isName("a")) { + style = LowercaseLatin; + } + } + obj.free(); + + if (dict->dictLookup("P", &obj)->isString()) + prefix = obj.getString()->copy(); + else + prefix = new GooString(""); + obj.free(); + + if (dict->dictLookup("St", &obj)->isInt()) + first = obj.getInt(); + else + first = 1; + obj.free(); + + base = baseA; +} + +PageLabelInfo::Interval::~Interval() { + delete prefix; +} + +PageLabelInfo::PageLabelInfo(Object *tree, int numPages) { + int i; + Interval *interval, *next; + + parse(tree); + + for (i = 0; i < intervals.getLength(); i++) { + interval = (Interval *) intervals.get(i); + + if (i + 1 < intervals.getLength()) { + next = (Interval *) intervals.get(i + 1); + interval->length = next->base - interval->base; + } else { + interval->length = numPages - interval->base; + } + if (interval->length < 0) interval->length = 0; + } +} + +PageLabelInfo::~PageLabelInfo() { + int i; + for (i = 0; i < intervals.getLength(); ++i) { + delete (Interval*)intervals.get(i); + } +} + +void PageLabelInfo::parse(Object *tree) { + Object nums, obj; + Object kids, kid, limits, low, high; + int i, base; + Interval *interval; + + // leaf node + if (tree->dictLookup("Nums", &nums)->isArray()) { + for (i = 0; i < nums.arrayGetLength(); i += 2) { + if (!nums.arrayGet(i, &obj)->isInt()) { + obj.free(); + continue; + } + base = obj.getInt(); + obj.free(); + if (!nums.arrayGet(i + 1, &obj)->isDict()) { + obj.free(); + continue; + } + + interval = new Interval(&obj, base); + obj.free(); + intervals.append(interval); + } + } + nums.free(); + + if (tree->dictLookup("Kids", &kids)->isArray()) { + for (i = 0; i < kids.arrayGetLength(); ++i) { + if (kids.arrayGet(i, &kid)->isDict()) + parse(&kid); + kid.free(); + } + } + kids.free(); +} + +GBool PageLabelInfo::labelToIndex(GooString *label, int *index) +{ + Interval *interval; + char *str = label->getCString(), *end; + int prefixLength; + int i, number; + + for (i = 0; i < intervals.getLength(); i++) { + interval = (Interval *) intervals.get(i); + const int base = interval->base; + prefixLength = interval->prefix->getLength(); + if (label->cmpN(interval->prefix, prefixLength) != 0) + continue; + + switch (interval->style) { + case Interval::Arabic: + number = strtol(str + prefixLength, &end, 10); + if (*end == '\0' && number - interval->first < interval->length) { + *index = base + number - interval->first; + return gTrue; + } + break; + case Interval::LowercaseRoman: + case Interval::UppercaseRoman: + number = fromRoman(str + prefixLength); + if (number >= 0 && number - interval->first < interval->length) { + *index = base + number - interval->first; + return gTrue; + } + break; + case Interval::UppercaseLatin: + case Interval::LowercaseLatin: + number = fromLatin(str + prefixLength); + if (number >= 0 && number - interval->first < interval->length) { + *index = base + number - interval->first; + return gTrue; + } + break; + case Interval::None: + break; + } + } + + return gFalse; +} + +GBool PageLabelInfo::indexToLabel(int index, GooString *label) +{ + char buffer[32]; + int i, base, number; + Interval *interval; + GooString number_string; + + base = 0; + interval = NULL; + for (i = 0; i < intervals.getLength(); i++) { + interval = (Interval *) intervals.get(i); + if (base <= index && index < base + interval->length) + break; + base += interval->length; + } + + if (i == intervals.getLength()) + return gFalse; + + number = index - base + interval->first; + switch (interval->style) { + case Interval::Arabic: + snprintf (buffer, sizeof(buffer), "%d", number); + number_string.append(buffer); + break; + case Interval::LowercaseRoman: + toRoman(number, &number_string, gFalse); + break; + case Interval::UppercaseRoman: + toRoman(number, &number_string, gTrue); + break; + case Interval::UppercaseLatin: + case Interval::LowercaseLatin: + number = 0; + break; + case Interval::None: + break; + } + + label->clear(); + label->append(interval->prefix); + if (label->hasUnicodeMarker()) { + int i, len; + char ucs2_char[2]; + + /* Convert the ascii number string to ucs2 and append. */ + len = number_string.getLength (); + ucs2_char[0] = 0; + for (i = 0; i < len; ++i) { + ucs2_char[1] = number_string.getChar(i); + label->append(ucs2_char, 2); + } + ucs2_char[1] = 0; + label->append(ucs2_char, 2); + } else { + label->append(&number_string); + } + + return gTrue; +} + +#ifdef TEST +int main(int argc, char *argv[]) +{ + { + GooString str; + toRoman(177, &str, gFalse); + assert (str.cmp("clxxvii") == 0); + } + + { + GooString roman("clxxvii"); + assert (fromRoman(roman.getCString()) == 177); + } + + { + GooString str; + toLatin(54, &str, gFalse); + assert (str.cmp("bbb") == 0); + } + + { + GooString latin("ddd"); + assert (fromLatin(latin.getCString()) == 56); + } +} +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PageLabelInfo.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/PageLabelInfo.h new file mode 100644 index 00000000000..960e710069d --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PageLabelInfo.h @@ -0,0 +1,51 @@ +//======================================================================== +// +// This file is under the GPLv2 or later license +// +// Copyright (C) 2005-2006 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <limits.h> +#include <stdlib.h> +#include <stdio.h> +#include <ctype.h> +#include <assert.h> + +#include "goo/gtypes.h" +#include "goo/GooList.h" +#include "goo/GooString.h" +#include "Object.h" + +class PageLabelInfo { +public: + PageLabelInfo(Object *tree, int numPages); + ~PageLabelInfo(); + GBool labelToIndex(GooString *label, int *index); + GBool indexToLabel(int index, GooString *label); + +private: + void parse(Object *tree); + +private: + struct Interval { + Interval(Object *dict, int baseA); + ~Interval(); + GooString *prefix; + enum NumberStyle { + None, + Arabic, + LowercaseRoman, + UppercaseRoman, + UppercaseLatin, + LowercaseLatin + } style; + int first, base, length; + }; + + GooList intervals; +}; diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PageTransition.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/PageTransition.cc new file mode 100644 index 00000000000..3fbd0de2802 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PageTransition.cc @@ -0,0 +1,137 @@ +/* PageTransition.cc + * Copyright (C) 2005, Net Integration Technologies, Inc. + * Copyright (C) 2010, Albert Astals Cid <aacid@kde.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include "PageTransition.h" + +//------------------------------------------------------------------------ +// PageTransition +//------------------------------------------------------------------------ + +PageTransition::PageTransition (Object *trans) { + Object obj; + Dict *dict; + + type = transitionReplace; + duration = 1; + alignment = transitionHorizontal; + direction = transitionInward; + angle = 0; + scale = 1.0; + rectangular = gFalse; + ok = gTrue; + + if (!trans || !trans->isDict ()) { + ok = gFalse; + return; + } + + dict = trans->getDict(); + + // get type + if (dict->lookup("S", &obj)->isName()) { + const char *s = obj.getName(); + + if (strcmp("R", s) == 0) + type = transitionReplace; + else if (strcmp("Split", s) == 0) + type = transitionSplit; + else if (strcmp("Blinds", s) == 0) + type = transitionBlinds; + else if (strcmp("Box", s) == 0) + type = transitionBox; + else if (strcmp("Wipe", s) == 0) + type = transitionWipe; + else if (strcmp("Dissolve", s) == 0) + type = transitionDissolve; + else if (strcmp("Glitter", s) == 0) + type = transitionGlitter; + else if (strcmp("Fly", s) == 0) + type = transitionFly; + else if (strcmp("Push", s) == 0) + type = transitionPush; + else if (strcmp("Cover", s) == 0) + type = transitionCover; + else if (strcmp("Uncover", s) == 0) + type = transitionUncover; + else if (strcmp("Fade", s) == 0) + type = transitionFade; + } + obj.free(); + + // get duration + if (dict->lookup("D", &obj)->isInt()) { + duration = obj.getInt(); + } + obj.free(); + + // get alignment + if (dict->lookup("Dm", &obj)->isName()) { + const char *dm = obj.getName(); + + if (strcmp("H", dm) == 0) + alignment = transitionHorizontal; + else if (strcmp("V", dm) == 0) + alignment = transitionVertical; + } + obj.free(); + + // get direction + if (dict->lookup("M", &obj)->isName()) { + const char *m = obj.getName(); + + if (strcmp("I", m) == 0) + direction = transitionInward; + else if (strcmp("O", m) == 0) + direction = transitionOutward; + } + obj.free(); + + // get angle + if (dict->lookup("Di", &obj)->isInt()) { + angle = obj.getInt(); + } + obj.free(); + + if (dict->lookup("Di", &obj)->isName()) { + if (strcmp("None", obj.getName()) == 0) + angle = 0; + } + obj.free(); + + // get sacle + if (dict->lookup("SS", &obj)->isReal()) { + scale = obj.getReal(); + } + obj.free(); + + // get rectangular + if (dict->lookup("B", &obj)->isBool()) { + rectangular = obj.getBool(); + } + obj.free(); +} + +PageTransition::~PageTransition() +{ +} + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PageTransition.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/PageTransition.h new file mode 100644 index 00000000000..e892c6c5051 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PageTransition.h @@ -0,0 +1,104 @@ +/* PageTransition.cc + * Copyright (C) 2005, Net Integration Technologies, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef PAGE_TRANSITION_H +#define PAGE_TRANSITION_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "Object.h" + +//------------------------------------------------------------------------ +// PageTransition +//------------------------------------------------------------------------ + +// if changed remember to keep in sync with frontend enums +enum PageTransitionType { + transitionReplace = 0, + transitionSplit, + transitionBlinds, + transitionBox, + transitionWipe, + transitionDissolve, + transitionGlitter, + transitionFly, + transitionPush, + transitionCover, + transitionUncover, + transitionFade +}; + +// if changed remember to keep in sync with frontend enums +enum PageTransitionAlignment { + transitionHorizontal = 0, + transitionVertical +}; + +// if changed remember to keep in sync with frontend enums +enum PageTransitionDirection { + transitionInward = 0, + transitionOutward +}; + +class PageTransition { +public: + // Construct a Page Transition. + PageTransition (Object *trans); + + // Destructor. + ~PageTransition (); + + // Was the Page Transition created successfully? + GBool isOk() { return ok; } + + // Get type + PageTransitionType getType() { return type; } + + // Get duration + int getDuration() { return duration;} + + // Get alignment + PageTransitionAlignment getAlignment() { return alignment; } + + // Get direction + PageTransitionDirection getDirection() { return direction; } + + // Get angle + int getAngle() { return angle; } + + // Get scale + double getScale() { return scale; } + + // Is rectangular? + GBool isRectangular() { return rectangular; } + +private: + + PageTransitionType type; // transition style + int duration; // duration of the effect in seconds + PageTransitionAlignment alignment; // dimension of the effect + PageTransitionDirection direction; // direction of motion + int angle; // direction in degrees + double scale; // scale + GBool rectangular; // is the area to be flown in rectangular? + GBool ok; // set if created successfully +}; + +#endif /* PAGE_TRANSITION_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Parser.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Parser.cc new file mode 100644 index 00000000000..34a828653e8 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Parser.cc @@ -0,0 +1,278 @@ +//======================================================================== +// +// Parser.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006, 2009, 201, 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// Copyright (C) 2009 Ilya Gorenbein <igorenbein@finjan.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stddef.h> +#include "Object.h" +#include "Array.h" +#include "Dict.h" +#include "Decrypt.h" +#include "Parser.h" +#include "XRef.h" +#include "Error.h" + +Parser::Parser(XRef *xrefA, Lexer *lexerA, GBool allowStreamsA) { + xref = xrefA; + lexer = lexerA; + inlineImg = 0; + allowStreams = allowStreamsA; + lexer->getObj(&buf1); + lexer->getObj(&buf2); +} + +Parser::~Parser() { + buf1.free(); + buf2.free(); + delete lexer; +} + +Object *Parser::getObj(Object *obj, Guchar *fileKey, + CryptAlgorithm encAlgorithm, int keyLength, + int objNum, int objGen) { + std::set<int> fetchOriginatorNums; + return getObj(obj, fileKey, encAlgorithm, keyLength, objNum, objGen, &fetchOriginatorNums); +} + +Object *Parser::getObj(Object *obj, std::set<int> *fetchOriginatorNums) +{ + return getObj(obj, NULL, cryptRC4, 0, 0, 0, fetchOriginatorNums); +} + +Object *Parser::getObj(Object *obj, Guchar *fileKey, + CryptAlgorithm encAlgorithm, int keyLength, + int objNum, int objGen, std::set<int> *fetchOriginatorNums) { + char *key; + Stream *str; + Object obj2; + int num; + DecryptStream *decrypt; + GooString *s, *s2; + int c; + + // refill buffer after inline image data + if (inlineImg == 2) { + buf1.free(); + buf2.free(); + lexer->getObj(&buf1); + lexer->getObj(&buf2); + inlineImg = 0; + } + + // array + if (buf1.isCmd("[")) { + shift(); + obj->initArray(xref); + while (!buf1.isCmd("]") && !buf1.isEOF()) + obj->arrayAdd(getObj(&obj2, fileKey, encAlgorithm, keyLength, + objNum, objGen, fetchOriginatorNums)); + if (buf1.isEOF()) + error(getPos(), "End of file inside array"); + shift(); + + // dictionary or stream + } else if (buf1.isCmd("<<")) { + shift(objNum); + obj->initDict(xref); + while (!buf1.isCmd(">>") && !buf1.isEOF()) { + if (!buf1.isName()) { + error(getPos(), "Dictionary key must be a name object"); + shift(); + } else { + // buf1 might go away in shift(), so construct the key + key = copyString(buf1.getName()); + shift(); + if (buf1.isEOF() || buf1.isError()) { + gfree(key); + break; + } + obj->dictAdd(key, getObj(&obj2, fileKey, encAlgorithm, keyLength, objNum, objGen, fetchOriginatorNums)); + } + } + if (buf1.isEOF()) + error(getPos(), "End of file inside dictionary"); + // stream objects are not allowed inside content streams or + // object streams + if (allowStreams && buf2.isCmd("stream")) { + if ((str = makeStream(obj, fileKey, encAlgorithm, keyLength, + objNum, objGen, fetchOriginatorNums))) { + obj->initStream(str); + } else { + obj->free(); + obj->initError(); + } + } else { + shift(); + } + + // indirect reference or integer + } else if (buf1.isInt()) { + num = buf1.getInt(); + shift(); + if (buf1.isInt() && buf2.isCmd("R")) { + obj->initRef(num, buf1.getInt()); + shift(); + shift(); + } else { + obj->initInt(num); + } + + // string + } else if (buf1.isString() && fileKey) { + s = buf1.getString(); + s2 = new GooString(); + obj2.initNull(); + decrypt = new DecryptStream(new MemStream(s->getCString(), 0, + s->getLength(), &obj2), + fileKey, encAlgorithm, keyLength, + objNum, objGen); + decrypt->reset(); + while ((c = decrypt->getChar()) != EOF) { + s2->append((char)c); + } + delete decrypt; + obj->initString(s2); + shift(); + + // simple object + } else { + // avoid re-allocating memory for complex objects like strings by + // shallow copy of <buf1> to <obj> and nulling <buf1> so that + // subsequent buf1.free() won't free this memory + buf1.shallowCopy(obj); + buf1.initNull(); + shift(); + } + + return obj; +} + +Stream *Parser::makeStream(Object *dict, Guchar *fileKey, + CryptAlgorithm encAlgorithm, int keyLength, + int objNum, int objGen, std::set<int> *fetchOriginatorNums) { + Object obj; + BaseStream *baseStr; + Stream *str; + Guint pos, endPos, length; + + // get stream start position + lexer->skipToNextLine(); + pos = lexer->getPos(); + + // get length + dict->dictLookup("Length", &obj, fetchOriginatorNums); + if (obj.isInt()) { + length = (Guint)obj.getInt(); + obj.free(); + } else { + error(getPos(), "Bad 'Length' attribute in stream"); + obj.free(); + length = 0; + } + + // check for length in damaged file + if (xref && xref->getStreamEnd(pos, &endPos)) { + length = endPos - pos; + } + + // in badly damaged PDF files, we can run off the end of the input + // stream immediately after the "stream" token + if (!lexer->getStream()) { + return NULL; + } + baseStr = lexer->getStream()->getBaseStream(); + + // skip over stream data + if (Lexer::LOOK_VALUE_NOT_CACHED != lexer->lookCharLastValueCached) { + // take into account the fact that we've cached one value + pos = pos - 1; + lexer->lookCharLastValueCached = Lexer::LOOK_VALUE_NOT_CACHED; + } + lexer->setPos(pos + length); + + // refill token buffers and check for 'endstream' + shift(); // kill '>>' + shift(); // kill 'stream' + if (buf1.isCmd("endstream")) { + shift(); + } else { + error(getPos(), "Missing 'endstream'"); + if (xref) { + // shift until we find the proper endstream or we change to another object or reach eof + while (!buf1.isCmd("endstream") && xref->getNumEntry(lexer->getPos()) == objNum && !buf1.isEOF()) { + shift(); + } + length = lexer->getPos() - pos; + if (buf1.isCmd("endstream")) { + obj.initInt(length); + dict->dictSet("Length", &obj); + obj.free(); + } + } else { + // When building the xref we can't use it so use this + // kludge for broken PDF files: just add 5k to the length, and + // hope its enough + length += 5000; + } + } + + // make base stream + str = baseStr->makeSubStream(pos, gTrue, length, dict); + + // handle decryption + if (fileKey) { + str = new DecryptStream(str, fileKey, encAlgorithm, keyLength, + objNum, objGen); + } + + // get filters + str = str->addFilters(dict); + + return str; +} + +void Parser::shift(int objNum) { + if (inlineImg > 0) { + if (inlineImg < 2) { + ++inlineImg; + } else { + // in a damaged content stream, if 'ID' shows up in the middle + // of a dictionary, we need to reset + inlineImg = 0; + } + } else if (buf2.isCmd("ID")) { + lexer->skipChar(); // skip char after 'ID' command + inlineImg = 1; + } + buf1.free(); + buf2.shallowCopy(&buf1); + if (inlineImg > 0) // don't buffer inline image data + buf2.initNull(); + else + lexer->getObj(&buf2, objNum); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Parser.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Parser.h new file mode 100644 index 00000000000..3d8a831f9d2 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Parser.h @@ -0,0 +1,77 @@ +//======================================================================== +// +// Parser.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006, 2010 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef PARSER_H +#define PARSER_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "Lexer.h" + +//------------------------------------------------------------------------ +// Parser +//------------------------------------------------------------------------ + +class Parser { +public: + + // Constructor. + Parser(XRef *xrefA, Lexer *lexerA, GBool allowStreamsA); + + // Destructor. + ~Parser(); + + // Get the next object from the input stream. + Object *getObj(Object *obj, Guchar *fileKey = NULL, + CryptAlgorithm encAlgorithm = cryptRC4, int keyLength = 0, + int objNum = 0, int objGen = 0); + + Object *getObj(Object *obj, Guchar *fileKey, + CryptAlgorithm encAlgorithm, int keyLength, + int objNum, int objGen, std::set<int> *fetchOriginatorNums); + + Object *getObj(Object *obj, std::set<int> *fetchOriginatorNums); + + // Get stream. + Stream *getStream() { return lexer->getStream(); } + + // Get current position in file. + int getPos() { return lexer->getPos(); } + +private: + + XRef *xref; // the xref table for this PDF file + Lexer *lexer; // input stream + GBool allowStreams; // parse stream objects? + Object buf1, buf2; // next two tokens + int inlineImg; // set when inline image data is encountered + + Stream *makeStream(Object *dict, Guchar *fileKey, + CryptAlgorithm encAlgorithm, int keyLength, + int objNum, int objGen, std::set<int> *fetchOriginatorNums); + void shift(int objNum = -1); +}; + +#endif + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PopplerCache.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/PopplerCache.cc new file mode 100644 index 00000000000..6018a77b70f --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PopplerCache.cc @@ -0,0 +1,163 @@ +//======================================================================== +// +// PopplerCache.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright (C) 2009 Koji Otani <sho@bbr.jp> +// Copyright (C) 2009, 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2010 Carlos Garcia Campos <carlosgc@gnome.org> +// +//======================================================================== + +#include "PopplerCache.h" + +#include "XRef.h" + +PopplerCacheKey::~PopplerCacheKey() +{ +} + +PopplerCacheItem::~PopplerCacheItem() +{ +} + +PopplerCache::PopplerCache(int cacheSizeA) +{ + cacheSize = cacheSizeA; + keys = new PopplerCacheKey*[cacheSize]; + items = new PopplerCacheItem*[cacheSize]; + lastValidCacheIndex = -1; +} + +PopplerCache::~PopplerCache() +{ + for (int i = 0; i <= lastValidCacheIndex; ++i) { + delete keys[i]; + delete items[i]; + } + delete[] keys; + delete[] items; +} + +PopplerCacheItem *PopplerCache::lookup(const PopplerCacheKey &key) +{ + if (lastValidCacheIndex < 0) + return 0; + + if (*keys[0] == key) { + return items[0]; + } + for (int i = 1; i <= lastValidCacheIndex; i++) { + if (*keys[i] == key) { + PopplerCacheKey *keyHit = keys[i]; + PopplerCacheItem *itemHit = items[i]; + + for (int j = i; j > 0; j--) { + keys[j] = keys[j - 1]; + items[j] = items[j - 1]; + } + + keys[0] = keyHit; + items[0] = itemHit; + return itemHit; + } + } + return 0; +} + +void PopplerCache::put(PopplerCacheKey *key, PopplerCacheItem *item) +{ + int movingStartIndex = lastValidCacheIndex + 1; + if (lastValidCacheIndex == cacheSize - 1) { + delete keys[lastValidCacheIndex]; + delete items[lastValidCacheIndex]; + movingStartIndex = cacheSize - 1; + } else { + lastValidCacheIndex++; + } + for (int i = movingStartIndex; i > 0; i--) { + keys[i] = keys[i - 1]; + items[i] = items[i - 1]; + } + keys[0] = key; + items[0] = item; +} + +int PopplerCache::size() +{ + return cacheSize; +} + +int PopplerCache::numberOfItems() +{ + return lastValidCacheIndex + 1; +} + +PopplerCacheItem *PopplerCache::item(int index) +{ + return items[index]; +} + +PopplerCacheKey *PopplerCache::key(int index) +{ + return keys[index]; +} + +class ObjectKey : public PopplerCacheKey { + public: + ObjectKey(int numA, int genA) : num(numA), gen(genA) + { + } + + bool operator==(const PopplerCacheKey &key) const + { + const ObjectKey *k = static_cast<const ObjectKey*>(&key); + return k->num == num && k->gen == gen; + } + + int num, gen; +}; + +class ObjectItem : public PopplerCacheItem { + public: + ObjectItem(Object *obj) + { + obj->copy(&item); + } + + ~ObjectItem() + { + item.free(); + } + + Object item; +}; + +PopplerObjectCache::PopplerObjectCache(int cacheSize, XRef *xrefA) { + cache = new PopplerCache (cacheSize); + xref = xrefA; +} + +PopplerObjectCache::~PopplerObjectCache() { + delete cache; +} + +Object *PopplerObjectCache::put(const Ref &ref) { + Object obj; + xref->fetch(ref.num, ref.gen, &obj); + + ObjectKey *key = new ObjectKey(ref.num, ref.gen); + ObjectItem *item = new ObjectItem(&obj); + cache->put(key, item); + obj.free(); + + return &item->item; +} + +Object *PopplerObjectCache::lookup(const Ref &ref, Object *obj) { + ObjectKey key(ref.num, ref.gen); + ObjectItem *item = static_cast<ObjectItem *>(cache->lookup(key)); + + return item ? item->item.copy(obj) : obj->initNull(); +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PopplerCache.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/PopplerCache.h new file mode 100644 index 00000000000..74010a2fa6b --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PopplerCache.h @@ -0,0 +1,78 @@ +//======================================================================== +// +// PopplerCache.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright (C) 2009 Koji Otani <sho@bbr.jp> +// Copyright (C) 2009, 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2010 Carlos Garcia Campos <carlosgc@gnome.org> +// +//======================================================================== + +#ifndef POPPLER_CACHE_H +#define POPPLER_CACHE_H + +#include "Object.h" + +class PopplerCacheItem +{ + public: + virtual ~PopplerCacheItem(); +}; + +class PopplerCacheKey +{ + public: + virtual ~PopplerCacheKey(); + virtual bool operator==(const PopplerCacheKey &key) const = 0; +}; + +class PopplerCache +{ + public: + PopplerCache(int cacheSizeA); + ~PopplerCache(); + + /* The item returned is owned by the cache */ + PopplerCacheItem *lookup(const PopplerCacheKey &key); + + /* The key and item pointers ownership is taken by the cache */ + void put(PopplerCacheKey *key, PopplerCacheItem *item); + + /* The max size of the cache */ + int size(); + + /* The number of items in the cache */ + int numberOfItems(); + + /* The n-th item in the cache */ + PopplerCacheItem *item(int index); + + /* The n-th key in the cache */ + PopplerCacheKey *key(int index); + + private: + PopplerCache(const PopplerCache &cache); // not allowed + + PopplerCacheKey **keys; + PopplerCacheItem **items; + int lastValidCacheIndex; + int cacheSize; +}; + +class PopplerObjectCache +{ + public: + PopplerObjectCache (int cacheSizeA, XRef *xrefA); + ~PopplerObjectCache(); + + Object *put(const Ref &ref); + Object *lookup(const Ref &ref, Object *obj); + + private: + XRef *xref; + PopplerCache *cache; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PreScanOutputDev.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/PreScanOutputDev.cc new file mode 100644 index 00000000000..f8df6a1d34a --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PreScanOutputDev.cc @@ -0,0 +1,314 @@ +//======================================================================== +// +// PreScanOutputDev.cc +// +// Copyright 2005 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2010, 2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2011 William Bader <williambader@hotmail.com> +// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <math.h> +#include "GlobalParams.h" +#include "Gfx.h" +#include "GfxFont.h" +#include "Link.h" +#include "Catalog.h" +#include "Page.h" +#include "PreScanOutputDev.h" + +//------------------------------------------------------------------------ +// PreScanOutputDev +//------------------------------------------------------------------------ + +PreScanOutputDev::PreScanOutputDev(XRef *xrefA) { + level = globalParams->getPSLevel(); + xref = xrefA; + clearStats(); +} + +PreScanOutputDev::~PreScanOutputDev() { +} + +void PreScanOutputDev::startPage(int /*pageNum*/, GfxState * /*state*/) { +} + +void PreScanOutputDev::endPage() { +} + +void PreScanOutputDev::stroke(GfxState *state) { + double *dash; + int dashLen; + double dashStart; + + check(state->getStrokeColorSpace(), state->getStrokeColor(), + state->getStrokeOpacity(), state->getBlendMode()); + state->getLineDash(&dash, &dashLen, &dashStart); + if (dashLen != 0) { + gdi = gFalse; + } +} + +void PreScanOutputDev::fill(GfxState *state) { + check(state->getFillColorSpace(), state->getFillColor(), + state->getFillOpacity(), state->getBlendMode()); +} + +void PreScanOutputDev::eoFill(GfxState *state) { + check(state->getFillColorSpace(), state->getFillColor(), + state->getFillOpacity(), state->getBlendMode()); +} + +GBool PreScanOutputDev::tilingPatternFill(GfxState *state, Catalog *catalog, Object *str, + double *pmat, int paintType, int /*tilingType*/, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep) { + PDFRectangle box; + Gfx *gfx; + box.x1 = bbox[0]; box.y1 = bbox[1]; + box.x2 = bbox[2]; box.y2 = bbox[3]; + gfx = new Gfx(xref, this, resDict, catalog, &box, NULL); + gfx->display(str); + delete gfx; + return gTrue; +} + +void PreScanOutputDev::clip(GfxState * /*state*/) { + //~ check for a rectangle "near" the edge of the page; + //~ else set gdi to false +} + +void PreScanOutputDev::eoClip(GfxState * /*state*/) { + //~ see clip() +} + +void PreScanOutputDev::beginStringOp(GfxState *state) { + int render; + GfxFont *font; + double m11, m12, m21, m22; + Ref embRef; + DisplayFontParam *dfp; + GBool simpleTTF; + + render = state->getRender(); + if (!(render & 1)) { + check(state->getFillColorSpace(), state->getFillColor(), + state->getFillOpacity(), state->getBlendMode()); + } + if ((render & 3) == 1 || (render & 3) == 2) { + check(state->getStrokeColorSpace(), state->getStrokeColor(), + state->getStrokeOpacity(), state->getBlendMode()); + } + + font = state->getFont(); + state->getFontTransMat(&m11, &m12, &m21, &m22); + simpleTTF = fabs(m11 + m22) < 0.01 && + m11 > 0 && + fabs(m12) < 0.01 && + fabs(m21) < 0.01 && + fabs(state->getHorizScaling() - 1) < 0.001 && + (font->getType() == fontTrueType || + font->getType() == fontTrueTypeOT) && + (font->getEmbeddedFontID(&embRef) || + font->getExtFontFile() || + (font->getName() && + (dfp = globalParams->getDisplayFont(font)) && + dfp->kind == displayFontTT)); + if (simpleTTF) { + //~ need to create a FoFiTrueType object, and check for a Unicode cmap + } + if (state->getRender() != 0 || !simpleTTF) { + gdi = gFalse; + } +} + +void PreScanOutputDev::endStringOp(GfxState * /*state*/) { +} + +GBool PreScanOutputDev::beginType3Char(GfxState * /*state*/, double /*x*/, double /*y*/, + double /*dx*/, double /*dy*/, + CharCode /*code*/, Unicode * /*u*/, int /*uLen*/) { + // return false so all Type 3 chars get rendered (no caching) + return gFalse; +} + +void PreScanOutputDev::endType3Char(GfxState * /*state*/) { +} + +void PreScanOutputDev::drawImageMask(GfxState *state, Object * /*ref*/, Stream *str, + int width, int height, GBool /*invert*/, + GBool /*interpolate*/, GBool inlineImg) { + int i, j; + + check(state->getFillColorSpace(), state->getFillColor(), + state->getFillOpacity(), state->getBlendMode()); + gdi = gFalse; + if ((level == psLevel1 || level == psLevel1Sep) && + state->getFillColorSpace()->getMode() == csPattern) { + level1PSBug = gTrue; + } + + if (inlineImg) { + str->reset(); + j = height * ((width + 7) / 8); + for (i = 0; i < j; ++i) + str->getChar(); + str->close(); + } +} + +void PreScanOutputDev::drawImage(GfxState *state, Object * /*ref*/, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool /*interpolate*/, int * /*maskColors*/, GBool inlineImg) { + GfxColorSpace *colorSpace; + int i, j; + + colorSpace = colorMap->getColorSpace(); + if (colorSpace->getMode() == csIndexed) { + colorSpace = ((GfxIndexedColorSpace *)colorSpace)->getBase(); + } + if (colorSpace->getMode() != csDeviceGray && + colorSpace->getMode() != csCalGray) { + gray = gFalse; + } + mono = gFalse; + if (state->getBlendMode() != gfxBlendNormal) { + transparency = gTrue; + } + gdi = gFalse; + + if (inlineImg) { + str->reset(); + j = height * ((width * colorMap->getNumPixelComps() * + colorMap->getBits() + 7) / 8); + for (i = 0; i < j; ++i) + str->getChar(); + str->close(); + } +} + +void PreScanOutputDev::drawMaskedImage(GfxState *state, Object * /*ref*/, + Stream * /*str*/, + int /*width*/, int /*height*/, + GfxImageColorMap *colorMap, + GBool /*interpolate*/, + Stream * /*maskStr*/, + int /*maskWidth*/, int /*maskHeight*/, + GBool /*maskInvert*/, GBool /*maskInterpolate*/) { + GfxColorSpace *colorSpace; + + colorSpace = colorMap->getColorSpace(); + if (colorSpace->getMode() == csIndexed) { + colorSpace = ((GfxIndexedColorSpace *)colorSpace)->getBase(); + } + if (colorSpace->getMode() != csDeviceGray && + colorSpace->getMode() != csCalGray) { + gray = gFalse; + } + mono = gFalse; + if (state->getBlendMode() != gfxBlendNormal) { + transparency = gTrue; + } + gdi = gFalse; +} + +void PreScanOutputDev::drawSoftMaskedImage(GfxState * /*state*/, Object * /*ref*/, + Stream * /*str*/, + int /*width*/, int /*height*/, + GfxImageColorMap *colorMap, + GBool /*interpolate*/, + Stream * /*maskStr*/, + int /*maskWidth*/, int /*maskHeight*/, + GfxImageColorMap * /*maskColorMap*/, + GBool /*maskInterpolate*/) { + GfxColorSpace *colorSpace; + + colorSpace = colorMap->getColorSpace(); + if (colorSpace->getMode() == csIndexed) { + colorSpace = ((GfxIndexedColorSpace *)colorSpace)->getBase(); + } + if (colorSpace->getMode() != csDeviceGray && + colorSpace->getMode() != csCalGray) { + gray = gFalse; + } + mono = gFalse; + transparency = gTrue; + gdi = gFalse; +} + +void PreScanOutputDev::beginTransparencyGroup( + GfxState * /*state*/, double * /*bbox*/, + GfxColorSpace * /*blendingColorSpace*/, + GBool /*isolated*/, GBool /*knockout*/, + GBool /*forSoftMask*/) { + gdi = gFalse; +} + +void PreScanOutputDev::paintTransparencyGroup(GfxState *state, double * /*bbox*/) +{ + check(state->getFillColorSpace(), state->getFillColor(), + state->getFillOpacity(), state->getBlendMode()); +} + +void PreScanOutputDev::setSoftMask(GfxState * /*state*/, double * /*bbox*/, GBool /*alpha*/, + Function * /*transferFunc*/, GfxColor * /*backdropColor*/) +{ + transparency = gTrue; +} + +void PreScanOutputDev::check(GfxColorSpace *colorSpace, GfxColor *color, + double opacity, GfxBlendMode blendMode) { + GfxRGB rgb; + + if (colorSpace->getMode() == csPattern) { + mono = gFalse; + gray = gFalse; + gdi = gFalse; + } else { + colorSpace->getRGB(color, &rgb); + if (rgb.r != rgb.g || rgb.g != rgb.b || rgb.b != rgb.r) { + mono = gFalse; + gray = gFalse; + } else if (!((rgb.r == 0 && rgb.g == 0 && rgb.b == 0) || + (rgb.r == gfxColorComp1 && + rgb.g == gfxColorComp1 && + rgb.b == gfxColorComp1))) { + mono = gFalse; + } + } + if (opacity != 1 || blendMode != gfxBlendNormal) { + transparency = gTrue; + } +} + +void PreScanOutputDev::clearStats() { + mono = gTrue; + gray = gTrue; + transparency = gFalse; + gdi = gTrue; + level1PSBug = gFalse; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/PreScanOutputDev.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/PreScanOutputDev.h new file mode 100644 index 00000000000..464fbbf26a2 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/PreScanOutputDev.h @@ -0,0 +1,171 @@ +//======================================================================== +// +// PreScanOutputDev.h +// +// Copyright 2005 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2011 William Bader <williambader@hotmail.com> +// Copyright (C) 2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef PRESCANOUTPUTDEV_H +#define PRESCANOUTPUTDEV_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" +#include "Object.h" +#include "GfxState.h" +#include "GlobalParams.h" +#include "OutputDev.h" + +//------------------------------------------------------------------------ +// PreScanOutputDev +//------------------------------------------------------------------------ + +class PreScanOutputDev: public OutputDev { +public: + + // Constructor. + PreScanOutputDev(XRef *xrefA); + + // Destructor. + virtual ~PreScanOutputDev(); + + //----- get info about output device + + // Does this device use upside-down coordinates? + // (Upside-down means (0,0) is the top left corner of the page.) + virtual GBool upsideDown() { return gTrue; } + + // Does this device use drawChar() or drawString()? + virtual GBool useDrawChar() { return gTrue; } + + // Does this device use tilingPatternFill()? If this returns false, + // tiling pattern fills will be reduced to a series of other drawing + // operations. + virtual GBool useTilingPatternFill() { return gTrue; } + + // Does this device use beginType3Char/endType3Char? Otherwise, + // text in Type 3 fonts will be drawn with drawChar/drawString. + virtual GBool interpretType3Chars() { return gTrue; } + + //----- initialization and control + + // Start a page. + virtual void startPage(int pageNum, GfxState *state); + + // End a page. + virtual void endPage(); + + //----- path painting + virtual void stroke(GfxState *state); + virtual void fill(GfxState *state); + virtual void eoFill(GfxState *state); + virtual GBool tilingPatternFill(GfxState *state, Catalog *cat, Object *str, + double *pmat, int paintType, int tilingType, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep); + + //----- path clipping + virtual void clip(GfxState *state); + virtual void eoClip(GfxState *state); + + //----- text drawing + virtual void beginStringOp(GfxState *state); + virtual void endStringOp(GfxState *state); + virtual GBool beginType3Char(GfxState *state, double x, double y, + double dx, double dy, + CharCode code, Unicode *u, int uLen); + virtual void endType3Char(GfxState *state); + + //----- image drawing + virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool interpolate, GBool inlineImg); + virtual void drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap *colorMap, + GBool interpolate, int *maskColors, GBool inlineImg); + virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, int maskWidth, int maskHeight, + GBool maskInvert, GBool maskInterpolate); + virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, + int maskWidth, int maskHeight, + GfxImageColorMap *maskColorMap, + GBool maskInterpolate); + + //----- transparency groups and soft masks + virtual void beginTransparencyGroup(GfxState *state, double *bbox, + GfxColorSpace *blendingColorSpace, + GBool isolated, GBool knockout, + GBool forSoftMask); + virtual void paintTransparencyGroup(GfxState *state, double *bbox); + virtual void setSoftMask(GfxState *state, double *bbox, GBool alpha, + Function *transferFunc, GfxColor *backdropColor); + + //----- special access + + // Returns true if the operations performed since the last call to + // clearStats() are all monochrome (black or white). + GBool isMonochrome() { return mono; } + + // Returns true if the operations performed since the last call to + // clearStats() are all gray. + GBool isGray() { return gray; } + + // Returns true if the operations performed since the last call to + // clearStats() included any transparency. + GBool usesTransparency() { return transparency; } + + // Returns true if the operations performed since the last call to + // clearStats() are all rasterizable by GDI calls in GDIOutputDev. + GBool isAllGDI() { return gdi; } + + // Returns true if the operations performed since the last call to + // clearStats() processed a feature that PSOutputDev does not implement. + GBool hasLevel1PSBug() { return level1PSBug; } + + // Clear the stats used by the above functions. + void clearStats(); + +private: + + void check(GfxColorSpace *colorSpace, GfxColor *color, + double opacity, GfxBlendMode blendMode); + + XRef *xref; + GBool mono; + GBool gray; + GBool transparency; + GBool gdi; + PSLevel level; // PostScript level (1, 2, separation) + GBool level1PSBug; // gTrue if it uses a feature not supported in PSOutputDev +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/ProfileData.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/ProfileData.cc new file mode 100644 index 00000000000..a0c44747a56 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/ProfileData.cc @@ -0,0 +1,44 @@ +//======================================================================== +// +// ProfileData.cc +// +// Copyright 2005 Jonathan Blandford <jrb@gnome.org> +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include <stddef.h> +#include "ProfileData.h" + +//------------------------------------------------------------------------ +// ProfileData +//------------------------------------------------------------------------ + +ProfileData::ProfileData() { + count = 0; + total = 0.0; + min = 0.0; + max = 0.0; +} + +void +ProfileData::addElement (double elapsed) { + if (count == 0) { + min = elapsed; + max = elapsed; + } else { + if (elapsed < min) + min = elapsed; + if (elapsed > max) + max = elapsed; + } + total += elapsed; + count ++; +} + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/ProfileData.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/ProfileData.h new file mode 100644 index 00000000000..418ee010755 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/ProfileData.h @@ -0,0 +1,41 @@ +//======================================================================== +// +// ProfileData.h +// +// Copyright 2005 Jonathan Blandford <jrb@gnome.org> +// +//======================================================================== + +#ifndef PROFILE_DATA_H +#define PROFILE_DATA_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +//------------------------------------------------------------------------ +// ProfileData +//------------------------------------------------------------------------ + +class ProfileData { +public: + + // Constructor. + ProfileData (); + + // Destructor. + ~ProfileData() {} + + void addElement (double elapsed); + int getCount () { return count; } + double getTotal () { return total; } + double getMin () { return max; } + double getMax () { return max; } +private: + int count; // size of <elems> array + double total; // number of elements in array + double min; // reference count + double max; // reference count +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Rendition.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Rendition.cc new file mode 100644 index 00000000000..b81e169ea21 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Rendition.cc @@ -0,0 +1,400 @@ +//********************************************************************************* +// Rendition.cc +//--------------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------------- +// Hugo Mercier <hmercier31[at]gmail.com> (c) 2008 +// Pino Toscano <pino@kde.org> (c) 2008 +// Carlos Garcia Campos <carlosgc@gnome.org> (c) 2010 +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +//********************************************************************************* + +#include <math.h> +#include "Rendition.h" +#include "FileSpec.h" + +MediaWindowParameters::MediaWindowParameters() { + // default values + type = windowEmbedded; + width = -1; + height = -1; + relativeTo = windowRelativeToDocument; + XPosition = 0.5; + YPosition = 0.5; + hasTitleBar = gTrue; + hasCloseButton = gTrue; + isResizeable = gTrue; +} + +MediaWindowParameters::~MediaWindowParameters() { +} + +void MediaWindowParameters::parseFWParams(Object* obj) { + Object tmp; + + if (obj->dictLookup("D", &tmp)->isArray()) { + Array * dim = tmp.getArray(); + + if (dim->getLength() >= 2) { + Object dd; + if (dim->get(0, &dd)->isInt()) { + width = dd.getInt(); + } + dd.free(); + if (dim->get(1, &dd)->isInt()) { + height = dd.getInt(); + } + dd.free(); + } + } + tmp.free(); + + if (obj->dictLookup("RT", &tmp)->isInt()) { + int t = tmp.getInt(); + switch(t) { + case 0: relativeTo = windowRelativeToDocument; break; + case 1: relativeTo = windowRelativeToApplication; break; + case 2: relativeTo = windowRelativeToDesktop; break; + } + } + tmp.free(); + + if (obj->dictLookup("P",&tmp)->isInt()) { + int t = tmp.getInt(); + + switch(t) { + case 0: // Upper left + XPosition = 0.0; + YPosition = 0.0; + break; + case 1: // Upper Center + XPosition = 0.5; + YPosition = 0.0; + break; + case 2: // Upper Right + XPosition = 1.0; + YPosition = 0.0; + break; + case 3: // Center Left + XPosition = 0.0; + YPosition = 0.5; + break; + case 4: // Center + XPosition = 0.5; + YPosition = 0.5; + break; + case 5: // Center Right + XPosition = 1.0; + YPosition = 0.5; + break; + case 6: // Lower Left + XPosition = 0.0; + YPosition = 1.0; + break; + case 7: // Lower Center + XPosition = 0.5; + YPosition = 1.0; + break; + case 8: // Lower Right + XPosition = 1.0; + YPosition = 1.0; + break; + } + } + tmp.free(); + + if (obj->dictLookup("T", &tmp)->isBool()) { + hasTitleBar = tmp.getBool(); + } + tmp.free(); + if (obj->dictLookup("UC", &tmp)->isBool()) { + hasCloseButton = tmp.getBool(); + } + tmp.free(); + if (obj->dictLookup("R", &tmp)->isInt()) { + isResizeable = (tmp.getInt() != 0); + } + tmp.free(); + +} + +MediaParameters::MediaParameters() { + // instanciate to default values + + volume = 100; + fittingPolicy = fittingUndefined; + autoPlay = gTrue; + repeatCount = 1.0; + opacity = 1.0; + showControls = gFalse; + duration = 0; +} + +MediaParameters::~MediaParameters() { +} + +void MediaParameters::parseMediaPlayParameters(Object* obj) { + + Object tmp; + + if (obj->dictLookup("V", &tmp)->isInt()) { + volume = tmp.getInt(); + } + tmp.free(); + + if (obj->dictLookup("C", &tmp)->isBool()) { + showControls = tmp.getBool(); + } + tmp.free(); + + if (obj->dictLookup("F", &tmp)->isInt()) { + int t = tmp.getInt(); + + switch(t) { + case 0: fittingPolicy = fittingMeet; break; + case 1: fittingPolicy = fittingSlice; break; + case 2: fittingPolicy = fittingFill; break; + case 3: fittingPolicy = fittingScroll; break; + case 4: fittingPolicy = fittingHidden; break; + case 5: fittingPolicy = fittingUndefined; break; + } + } + tmp.free(); + + // duration parsing + // duration's default value is set to 0, which means : intrinsinc media duration + if (obj->dictLookup("D", &tmp)->isDict()) { + Object oname, ddict, tmp2; + if (tmp.dictLookup("S", &oname)->isName()) { + char* name = oname.getName(); + if (!strcmp(name, "F")) + duration = -1; // infinity + else if (!strcmp(name, "T")) { + if (tmp.dictLookup("T", &ddict)->isDict()) { + if (ddict.dictLookup("V", &tmp2)->isNum()) { + duration = Gulong(tmp2.getNum()); + } + tmp2.free(); + } + ddict.free(); + } + } + oname.free(); + } + tmp.free(); + + + if (obj->dictLookup("A", &tmp)->isBool()) { + autoPlay = tmp.getBool(); + } + tmp.free(); + + if (obj->dictLookup("RC", &tmp)->isNum()) { + repeatCount = tmp.getNum(); + } + tmp.free(); + +} + +void MediaParameters::parseMediaScreenParameters(Object* obj) { + Object tmp; + + if (obj->dictLookup("W", &tmp)->isInt()) { + int t = tmp.getInt(); + + switch(t) { + case 0: windowParams.type = MediaWindowParameters::windowFloating; break; + case 1: windowParams.type = MediaWindowParameters::windowFullscreen; break; + case 2: windowParams.type = MediaWindowParameters::windowHidden; break; + case 3: windowParams.type = MediaWindowParameters::windowEmbedded; break; + } + } + tmp.free(); + + // background color + if (obj->dictLookup("B", &tmp)->isArray()) { + Array* color = tmp.getArray(); + + Object component; + + color->get(0, &component); + bgColor.r = component.getNum(); + component.free(); + + color->get(1, &component); + bgColor.g = component.getNum(); + component.free(); + + color->get(2, &component); + bgColor.b = component.getNum(); + component.free(); + } + tmp.free(); + + + // opacity + if (obj->dictLookup("O", &tmp)->isNum()) { + opacity = tmp.getNum(); + } + tmp.free(); + + if (windowParams.type == MediaWindowParameters::windowFloating) { + Object winDict; + if (obj->dictLookup("F",&winDict)->isDict()) { + windowParams.parseFWParams(&winDict); + } + winDict.free(); + } +} + +MediaRendition::~MediaRendition() { + if (fileName) + delete fileName; + if (contentType) + delete contentType; + + if (embeddedStream && (!embeddedStream->decRef())) { + delete embeddedStream; + } +} + +MediaRendition::MediaRendition(Object* obj) { + Object tmp, tmp2; + GBool hasClip = gFalse; + + ok = gTrue; + fileName = NULL; + contentType = NULL; + isEmbedded = gFalse; + embeddedStream = NULL; + + // + // Parse media clip data + // + if (obj->dictLookup("C", &tmp2)->isDict()) { // media clip + hasClip = gTrue; + if (tmp2.dictLookup("S", &tmp)->isName()) { + if (!strcmp(tmp.getName(), "MCD")) { // media clip data + Object obj1, obj2; + if (tmp2.dictLookup("D", &obj1)->isDict()) { + if (obj1.dictLookup("F", &obj2)->isString()) { + fileName = obj2.getString()->copy(); + } + obj2.free(); + if (obj1.dictLookup("EF", &obj2)->isDict()) { + Object embedded; + if (obj2.dictLookup("F", &embedded)->isStream()) { + isEmbedded = gTrue; + embeddedStream = embedded.getStream(); + // "copy" stream + embeddedStream->incRef(); + } + embedded.free(); + } + obj2.free(); + + // TODO: D might be a form XObject too + } else { + error (-1, "Invalid Media Clip Data"); + ok = gFalse; + } + obj1.free(); + + // FIXME: ignore CT if D is a form XObject + if (tmp2.dictLookup("CT", &obj1)->isString()) { + contentType = obj1.getString()->copy(); + } + obj1.free(); + } else if (!strcmp(tmp.getName(), "MCS")) { // media clip data + // TODO + } + } else { + error (-1, "Invalid Media Clip"); + ok = gFalse; + } + tmp.free(); + } + tmp2.free(); + + if (!ok) + return; + + // + // parse Media Play Parameters + if (obj->dictLookup("P", &tmp2)->isDict()) { // media play parameters + Object params; + if (tmp2.dictLookup("MH", ¶ms)->isDict()) { + MH.parseMediaPlayParameters(¶ms); + } + params.free(); + if (tmp2.dictLookup("BE", ¶ms)->isDict()) { + BE.parseMediaPlayParameters(¶ms); + } + params.free(); + } else if (hasClip) { + error (-1, "Invalid Media Rendition"); + ok = gFalse; + } + tmp2.free(); + + // + // parse Media Screen Parameters + if (obj->dictLookup("SP", &tmp2)->isDict()) { // media screen parameters + Object params; + if (tmp2.dictLookup("MH", ¶ms)->isDict()) { + MH.parseMediaScreenParameters(¶ms); + } + params.free(); + if (tmp2.dictLookup("BE", ¶ms)->isDict()) { + BE.parseMediaScreenParameters(¶ms); + } + params.free(); + } + tmp2.free(); +} + +void MediaRendition::outputToFile(FILE* fp) { + if (!isEmbedded) + return; + + embeddedStream->reset(); + + while (1) { + int c = embeddedStream->getChar(); + if (c == EOF) + break; + + fwrite(&c, 1, 1, fp); + } + +} + +MediaRendition *MediaRendition::copy() { + // call default copy constructor + MediaRendition* new_media = new MediaRendition(*this); + + if (contentType) + new_media->contentType = contentType->copy(); + if (fileName) + new_media->fileName = fileName->copy(); + + if (new_media->embeddedStream) + new_media->embeddedStream->incRef(); + + return new_media; +} + +// TODO: SelectorRendition diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Rendition.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Rendition.h new file mode 100644 index 00000000000..75bfeff32c9 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Rendition.h @@ -0,0 +1,157 @@ +//********************************************************************************* +// Rendition.h +//--------------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------------- +// Hugo Mercier <hmercier31[at]gmail.com> (c) 2008 +// Carlos Garcia Campos <carlosgc@gnome.org> (c) 2010 +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +//********************************************************************************* + +#ifndef _RENDITION_H_ +#define _RENDITION_H_ + +#include "Object.h" + +struct MediaWindowParameters { + + MediaWindowParameters(); + ~MediaWindowParameters(); + + // parse from a floating window parameters dictionary + void parseFWParams(Object* obj); + + enum MediaWindowType { + windowFloating = 0, + windowFullscreen, + windowHidden, + windowEmbedded + }; + + enum MediaWindowRelativeTo { + windowRelativeToDocument = 0, + windowRelativeToApplication, + windowRelativeToDesktop + }; + + + // DEFAULT VALUE + + MediaWindowType type; // movieWindowEmbedded + + + int width; // -1 + int height; // -1 + + // floating window position + MediaWindowRelativeTo relativeTo; // windowRelativeToDocument (or to desktop) + double XPosition; // 0.5 + double YPosition; // 0.5 + + GBool hasTitleBar; // true + GBool hasCloseButton; // true + GBool isResizeable; // true +}; + + +struct MediaParameters { + + MediaParameters(); + ~MediaParameters(); + + // parse from a "Media Play Parameters" dictionary + void parseMediaPlayParameters(Object* playObj); + // parse from a "Media Screen Parameters" dictionary + void parseMediaScreenParameters(Object* screenObj); + + enum MediaFittingPolicy { + fittingMeet = 0, + fittingSlice, + fittingFill, + fittingScroll, + fittingHidden, + fittingUndefined + }; + + struct Color { + double r, g, b; + }; + + int duration; // 0 + + int volume; // 100 + + // defined in media play parameters, p 770 + // correspond to 'fit' SMIL's attribute + MediaFittingPolicy fittingPolicy; // fittingUndefined + + GBool autoPlay; // true + + // repeat count, can be real values, 0 means forever + double repeatCount; // 1.0 + + // background color // black = (0.0 0.0 0.0) + Color bgColor; + + // opacity in [0.0 1.0] + double opacity; // 1.0 + + + GBool showControls; // false + + MediaWindowParameters windowParams; +}; + +class MediaRendition { + public: + MediaRendition(Object *obj); + ~MediaRendition(); + + GBool isOk () { return ok; } + + MediaParameters* getMHParameters() { return &MH; } + MediaParameters* getBEParameters() { return &BE; } + + GooString* getContentType() { return contentType; } + GooString* getFileName() { return fileName; } + + GBool getIsEmbedded() { return isEmbedded; } + Stream* getEmbbededStream() { return embeddedStream; } + // write embedded stream to file + void outputToFile(FILE*); + + MediaRendition* copy(); + + private: + GBool ok; + + // "Must Honor" parameters + MediaParameters MH; + // "Best Effort" parameters + MediaParameters BE; + + GBool isEmbedded; + + GooString* contentType; + + // if it's embedded + Stream* embeddedStream; + + // if it's not embedded + GooString* fileName; +}; + +#endif /* _RENDITION_H_ */ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/SecurityHandler.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/SecurityHandler.cc new file mode 100644 index 00000000000..630c753691c --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/SecurityHandler.cc @@ -0,0 +1,412 @@ +//======================================================================== +// +// SecurityHandler.cc +// +// Copyright 2004 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2010 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include "GooString.h" +#include "PDFDoc.h" +#include "Decrypt.h" +#include "Error.h" +#include "GlobalParams.h" +#if HAVE_XPDFCORE +# include "XPDFCore.h" +#elif HAVE_WINPDFCORE +# include "WinPDFCore.h" +#endif +#ifdef ENABLE_PLUGINS +# include "XpdfPluginAPI.h" +#endif +#include "SecurityHandler.h" + +#include <limits.h> + +//------------------------------------------------------------------------ +// SecurityHandler +//------------------------------------------------------------------------ + +SecurityHandler *SecurityHandler::make(PDFDoc *docA, Object *encryptDictA) { + Object filterObj; + SecurityHandler *secHdlr; +#ifdef ENABLE_PLUGINS + XpdfSecurityHandler *xsh; +#endif + + encryptDictA->dictLookup("Filter", &filterObj); + if (filterObj.isName("Standard")) { + secHdlr = new StandardSecurityHandler(docA, encryptDictA); + } else if (filterObj.isName()) { +#ifdef ENABLE_PLUGINS + if ((xsh = globalParams->getSecurityHandler(filterObj.getName()))) { + secHdlr = new ExternalSecurityHandler(docA, encryptDictA, xsh); + } else { +#endif + error(-1, "Couldn't find the '%s' security handler", + filterObj.getName()); + secHdlr = NULL; +#ifdef ENABLE_PLUGINS + } +#endif + } else { + error(-1, "Missing or invalid 'Filter' entry in encryption dictionary"); + secHdlr = NULL; + } + filterObj.free(); + return secHdlr; +} + +SecurityHandler::SecurityHandler(PDFDoc *docA) { + doc = docA; +} + +SecurityHandler::~SecurityHandler() { +} + +GBool SecurityHandler::checkEncryption(GooString *ownerPassword, + GooString *userPassword) { + void *authData; + GBool ok; + int i; + + if (ownerPassword || userPassword) { + authData = makeAuthData(ownerPassword, userPassword); + } else { + authData = NULL; + } + ok = authorize(authData); + if (authData) { + freeAuthData(authData); + } + for (i = 0; !ok && i < 3; ++i) { + if (!(authData = getAuthData())) { + break; + } + ok = authorize(authData); + if (authData) { + freeAuthData(authData); + } + } + if (!ok) { + error(-1, "Incorrect password"); + } + return ok; +} + +//------------------------------------------------------------------------ +// StandardSecurityHandler +//------------------------------------------------------------------------ + +class StandardAuthData { +public: + + StandardAuthData(GooString *ownerPasswordA, GooString *userPasswordA) { + ownerPassword = ownerPasswordA; + userPassword = userPasswordA; + } + + ~StandardAuthData() { + if (ownerPassword) { + delete ownerPassword; + } + if (userPassword) { + delete userPassword; + } + } + + GooString *ownerPassword; + GooString *userPassword; +}; + +StandardSecurityHandler::StandardSecurityHandler(PDFDoc *docA, + Object *encryptDictA): + SecurityHandler(docA) +{ + Object versionObj, revisionObj, lengthObj; + Object ownerKeyObj, userKeyObj, permObj, fileIDObj; + Object fileIDObj1; + Object cryptFiltersObj, streamFilterObj, stringFilterObj; + Object cryptFilterObj, cfmObj, cfLengthObj; + Object encryptMetadataObj; + + ok = gFalse; + fileID = NULL; + ownerKey = NULL; + userKey = NULL; + + encryptDictA->dictLookup("V", &versionObj); + encryptDictA->dictLookup("R", &revisionObj); + encryptDictA->dictLookup("Length", &lengthObj); + encryptDictA->dictLookup("O", &ownerKeyObj); + encryptDictA->dictLookup("U", &userKeyObj); + encryptDictA->dictLookup("P", &permObj); + if (permObj.isUint()) { + unsigned int permUint = permObj.getUint(); + int perms = permUint - UINT_MAX - 1; + permObj.free(); + permObj.initInt(perms); + } + doc->getXRef()->getTrailerDict()->dictLookup("ID", &fileIDObj); + if (versionObj.isInt() && + revisionObj.isInt() && + ownerKeyObj.isString() && ownerKeyObj.getString()->getLength() == 32 && + userKeyObj.isString() && userKeyObj.getString()->getLength() == 32 && + permObj.isInt()) { + encVersion = versionObj.getInt(); + encRevision = revisionObj.getInt(); + encAlgorithm = cryptRC4; + // revision 2 forces a 40-bit key - some buggy PDF generators + // set the Length value incorrectly + if (encRevision == 2 || !lengthObj.isInt()) { + fileKeyLength = 5; + } else { + fileKeyLength = lengthObj.getInt() / 8; + } + encryptMetadata = gTrue; + //~ this currently only handles a subset of crypt filter functionality + if (encVersion == 4 && encRevision == 4) { + encryptDictA->dictLookup("CF", &cryptFiltersObj); + encryptDictA->dictLookup("StmF", &streamFilterObj); + encryptDictA->dictLookup("StrF", &stringFilterObj); + if (cryptFiltersObj.isDict() && + streamFilterObj.isName() && + stringFilterObj.isName() && + !strcmp(streamFilterObj.getName(), stringFilterObj.getName())) { + if (cryptFiltersObj.dictLookup(streamFilterObj.getName(), + &cryptFilterObj)->isDict()) { + cryptFilterObj.dictLookup("CFM", &cfmObj); + if (cfmObj.isName("V2")) { + encVersion = 2; + encRevision = 3; + if (cryptFilterObj.dictLookup("Length", &cfLengthObj)->isInt()) { + //~ according to the spec, this should be cfLengthObj / 8 + fileKeyLength = cfLengthObj.getInt(); + } + cfLengthObj.free(); + } else if (cfmObj.isName("AESV2")) { + encVersion = 2; + encRevision = 3; + encAlgorithm = cryptAES; + if (cryptFilterObj.dictLookup("Length", &cfLengthObj)->isInt()) { + //~ according to the spec, this should be cfLengthObj / 8 + fileKeyLength = cfLengthObj.getInt(); + } + cfLengthObj.free(); + } + cfmObj.free(); + } + cryptFilterObj.free(); + } + stringFilterObj.free(); + streamFilterObj.free(); + cryptFiltersObj.free(); + if (encryptDictA->dictLookup("EncryptMetadata", + &encryptMetadataObj)->isBool()) { + encryptMetadata = encryptMetadataObj.getBool(); + } + encryptMetadataObj.free(); + } + permFlags = permObj.getInt(); + ownerKey = ownerKeyObj.getString()->copy(); + userKey = userKeyObj.getString()->copy(); + if (encVersion >= 1 && encVersion <= 2 && + encRevision >= 2 && encRevision <= 3) { + if (fileIDObj.isArray()) { + if (fileIDObj.arrayGet(0, &fileIDObj1)->isString()) { + fileID = fileIDObj1.getString()->copy(); + } else { + fileID = new GooString(); + } + fileIDObj1.free(); + } else { + fileID = new GooString(); + } + ok = gTrue; + } else { + error(-1, "Unsupported version/revision (%d/%d) of Standard security handler", + encVersion, encRevision); + } + } else { + error(-1, "Weird encryption info"); + } + if (fileKeyLength > 16) { + fileKeyLength = 16; + } + fileIDObj.free(); + permObj.free(); + userKeyObj.free(); + ownerKeyObj.free(); + lengthObj.free(); + revisionObj.free(); + versionObj.free(); +} + +StandardSecurityHandler::~StandardSecurityHandler() { + if (fileID) { + delete fileID; + } + if (ownerKey) { + delete ownerKey; + } + if (userKey) { + delete userKey; + } +} + +void *StandardSecurityHandler::makeAuthData(GooString *ownerPassword, + GooString *userPassword) { + return new StandardAuthData(ownerPassword ? ownerPassword->copy() + : (GooString *)NULL, + userPassword ? userPassword->copy() + : (GooString *)NULL); +} + +void *StandardSecurityHandler::getAuthData() { +#if HAVE_XPDFCORE + XPDFCore *core; + GooString *password; + + if (!(core = (XPDFCore *)doc->getGUIData()) || + !(password = core->getPassword())) { + return NULL; + } + return new StandardAuthData(password, password->copy()); +#elif HAVE_WINPDFCORE + WinPDFCore *core; + GooString *password; + + if (!(core = (WinPDFCore *)doc->getGUIData()) || + !(password = core->getPassword())) { + return NULL; + } + return new StandardAuthData(password, password->copy()); +#else + return NULL; +#endif +} + +void StandardSecurityHandler::freeAuthData(void *authData) { + delete (StandardAuthData *)authData; +} + +GBool StandardSecurityHandler::authorize(void *authData) { + GooString *ownerPassword, *userPassword; + + if (!ok) { + return gFalse; + } + if (authData) { + ownerPassword = ((StandardAuthData *)authData)->ownerPassword; + userPassword = ((StandardAuthData *)authData)->userPassword; + } else { + ownerPassword = NULL; + userPassword = NULL; + } + if (!Decrypt::makeFileKey(encVersion, encRevision, fileKeyLength, + ownerKey, userKey, permFlags, fileID, + ownerPassword, userPassword, fileKey, + encryptMetadata, &ownerPasswordOk)) { + return gFalse; + } + return gTrue; +} + +#ifdef ENABLE_PLUGINS + +//------------------------------------------------------------------------ +// ExternalSecurityHandler +//------------------------------------------------------------------------ + +ExternalSecurityHandler::ExternalSecurityHandler(PDFDoc *docA, + Object *encryptDictA, + XpdfSecurityHandler *xshA): + SecurityHandler(docA) +{ + encryptDictA->copy(&encryptDict); + xsh = xshA; + encAlgorithm = cryptRC4; //~ this should be obtained via getKey + ok = gFalse; + + if (!(*xsh->newDoc)(xsh->handlerData, (XpdfDoc)docA, + (XpdfObject)encryptDictA, &docData)) { + return; + } + + ok = gTrue; +} + +ExternalSecurityHandler::~ExternalSecurityHandler() { + (*xsh->freeDoc)(xsh->handlerData, docData); + encryptDict.free(); +} + +void *ExternalSecurityHandler::makeAuthData(GooString *ownerPassword, + GooString *userPassword) { + char *opw, *upw; + void *authData; + + opw = ownerPassword ? ownerPassword->getCString() : (char *)NULL; + upw = userPassword ? userPassword->getCString() : (char *)NULL; + if (!(*xsh->makeAuthData)(xsh->handlerData, docData, opw, upw, &authData)) { + return NULL; + } + return authData; +} + +void *ExternalSecurityHandler::getAuthData() { + void *authData; + + if (!(*xsh->getAuthData)(xsh->handlerData, docData, &authData)) { + return NULL; + } + return authData; +} + +void ExternalSecurityHandler::freeAuthData(void *authData) { + (*xsh->freeAuthData)(xsh->handlerData, docData, authData); +} + +GBool ExternalSecurityHandler::authorize(void *authData) { + char *key; + int length; + + if (!ok) { + return gFalse; + } + permFlags = (*xsh->authorize)(xsh->handlerData, docData, authData); + if (!(permFlags & xpdfPermissionOpen)) { + return gFalse; + } + if (!(*xsh->getKey)(xsh->handlerData, docData, &key, &length, &encVersion)) { + return gFalse; + } + if ((fileKeyLength = length) > 16) { + fileKeyLength = 16; + } + memcpy(fileKey, key, fileKeyLength); + (*xsh->freeKey)(xsh->handlerData, docData, key, length); + return gTrue; +} + +#endif // ENABLE_PLUGINS diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/SecurityHandler.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/SecurityHandler.h new file mode 100644 index 00000000000..5278a6cf10d --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/SecurityHandler.h @@ -0,0 +1,162 @@ +//======================================================================== +// +// SecurityHandler.h +// +// Copyright 2004 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef SECURITYHANDLER_H +#define SECURITYHANDLER_H + +#include "poppler-config.h" + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" +#include "Object.h" + +class GooString; +class PDFDoc; +struct XpdfSecurityHandler; + +//------------------------------------------------------------------------ +// SecurityHandler +//------------------------------------------------------------------------ + +class SecurityHandler { +public: + + static SecurityHandler *make(PDFDoc *docA, Object *encryptDictA); + + SecurityHandler(PDFDoc *docA); + virtual ~SecurityHandler(); + + // Check the document's encryption. If the document is encrypted, + // this will first try <ownerPassword> and <userPassword> (in + // "batch" mode), and if those fail, it will attempt to request a + // password from the user. This is the high-level function that + // calls the lower level functions for the specific security handler + // (requesting a password three times, etc.). Returns true if the + // document can be opened (if it's unencrypted, or if a correct + // password is obtained); false otherwise (encrypted and no correct + // password). + GBool checkEncryption(GooString *ownerPassword, + GooString *userPassword); + + // Create authorization data for the specified owner and user + // passwords. If the security handler doesn't support "batch" mode, + // this function should return NULL. + virtual void *makeAuthData(GooString *ownerPassword, + GooString *userPassword) = 0; + + // Construct authorization data, typically by prompting the user for + // a password. Returns an authorization data object, or NULL to + // cancel. + virtual void *getAuthData() = 0; + + // Free the authorization data returned by makeAuthData or + // getAuthData. + virtual void freeAuthData(void *authData) = 0; + + // Attempt to authorize the document, using the supplied + // authorization data (which may be NULL). Returns true if + // successful (i.e., if at least the right to open the document was + // granted). + virtual GBool authorize(void *authData) = 0; + + // Return the various authorization parameters. These are only + // valid after authorize has returned true. + virtual int getPermissionFlags() = 0; + virtual GBool getOwnerPasswordOk() = 0; + virtual Guchar *getFileKey() = 0; + virtual int getFileKeyLength() = 0; + virtual int getEncVersion() = 0; + virtual int getEncRevision() = 0; + virtual CryptAlgorithm getEncAlgorithm() = 0; + +protected: + + PDFDoc *doc; +}; + +//------------------------------------------------------------------------ +// StandardSecurityHandler +//------------------------------------------------------------------------ + +class StandardSecurityHandler: public SecurityHandler { +public: + + StandardSecurityHandler(PDFDoc *docA, Object *encryptDictA); + virtual ~StandardSecurityHandler(); + + virtual void *makeAuthData(GooString *ownerPassword, + GooString *userPassword); + virtual void *getAuthData(); + virtual void freeAuthData(void *authData); + virtual GBool authorize(void *authData); + virtual int getPermissionFlags() { return permFlags; } + virtual GBool getOwnerPasswordOk() { return ownerPasswordOk; } + virtual Guchar *getFileKey() { return fileKey; } + virtual int getFileKeyLength() { return fileKeyLength; } + virtual int getEncVersion() { return encVersion; } + virtual int getEncRevision() { return encRevision; } + virtual CryptAlgorithm getEncAlgorithm() { return encAlgorithm; } + +private: + + int permFlags; + GBool ownerPasswordOk; + Guchar fileKey[16]; + int fileKeyLength; + int encVersion; + int encRevision; + GBool encryptMetadata; + CryptAlgorithm encAlgorithm; + + GooString *ownerKey, *userKey; + GooString *fileID; + GBool ok; +}; + +#ifdef ENABLE_PLUGINS +//------------------------------------------------------------------------ +// ExternalSecurityHandler +//------------------------------------------------------------------------ + +class ExternalSecurityHandler: public SecurityHandler { +public: + + ExternalSecurityHandler(PDFDoc *docA, Object *encryptDictA, + XpdfSecurityHandler *xshA); + virtual ~ExternalSecurityHandler(); + + virtual void *makeAuthData(GooString *ownerPassword, + GooString *userPassword); + virtual void *getAuthData(); + virtual void freeAuthData(void *authData); + virtual GBool authorize(void *authData); + virtual int getPermissionFlags() { return permFlags; } + virtual GBool getOwnerPasswordOk() { return gFalse; } + virtual Guchar *getFileKey() { return fileKey; } + virtual int getFileKeyLength() { return fileKeyLength; } + virtual int getEncVersion() { return encVersion; } + virtual CryptAlgorithm getEncAlgorithm() { return encAlgorithm; } + +private: + + Object encryptDict; + XpdfSecurityHandler *xsh; + void *docData; + int permFlags; + Guchar fileKey[16]; + int fileKeyLength; + int encVersion; + CryptAlgorithm encAlgorithm; + GBool ok; +}; +#endif // ENABLE_PLUGINS + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Sound.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Sound.cc new file mode 100644 index 00000000000..6129fdcb47d --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Sound.cc @@ -0,0 +1,145 @@ +/* Sound.cc - an object that holds the sound structure + * Copyright (C) 2006-2007, Pino Toscano <pino@kde.org> + * Copyright (C) 2009, Albert Astals Cid <aacid@kde.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "GooString.h" +#include "Object.h" +#include "Sound.h" +#include "Stream.h" +#include "FileSpec.h" + +Sound *Sound::parseSound(Object *obj) +{ + // let's try to see if this Object is a Sound, according to the PDF specs + // (section 9.2) + Stream *str = NULL; + // the Object must be a Stream + if (obj->isStream()) { + str = obj->getStream(); + } else { + return NULL; + } + // the Stream must have a Dict + Dict *dict = str->getDict(); + if (dict == NULL) + return NULL; + Object tmp; + // the Dict must have the 'R' key of type num + dict->lookup("R", &tmp); + if (tmp.isNum()) { + return new Sound(obj); + } else { + return NULL; + } +} + +Sound::Sound(Object *obj, bool readAttrs) +{ + streamObj = new Object(); + streamObj->initNull(); + obj->copy(streamObj); + + fileName = NULL; + samplingRate = 0.0; + channels = 1; + bitsPerSample = 8; + encoding = soundRaw; + + if (readAttrs) + { + Object tmp; + Dict *dict = streamObj->getStream()->getDict(); + dict->lookup("F", &tmp); + if (!tmp.isNull()) { + Object obj1; + // valid 'F' key -> external file + kind = soundExternal; + if (getFileSpecNameForPlatform (&tmp, &obj1)) { + fileName = obj1.getString()->copy(); + obj1.free(); + } + } else { + // no file specification, then the sound data have to be + // extracted from the stream + kind = soundEmbedded; + } + tmp.free(); + // sampling rate + dict->lookup("R", &tmp); + if (tmp.isNum()) { + samplingRate = tmp.getNum(); + } + tmp.free(); + // sound channels + dict->lookup("C", &tmp); + if (tmp.isInt()) { + channels = tmp.getInt(); + } + tmp.free(); + // bits per sample + dict->lookup("B", &tmp); + if (tmp.isInt()) { + bitsPerSample = tmp.getInt(); + } + tmp.free(); + // encoding format + dict->lookup("E", &tmp); + if (tmp.isName()) + { + const char *enc = tmp.getName(); + if (strcmp("Raw", enc) == 0) { + encoding = soundRaw; + } else if (strcmp("Signed", enc) == 0) { + encoding = soundSigned; + } else if (strcmp("muLaw", enc) == 0) { + encoding = soundMuLaw; + } else if (strcmp("ALaw", enc) == 0) { + encoding = soundALaw; + } + } + tmp.free(); + } +} + +Sound::~Sound() +{ + delete fileName; + streamObj->free(); + delete streamObj; +} + +Stream *Sound::getStream() +{ + return streamObj->getStream(); +} + +Sound *Sound::copy() +{ + Sound *newsound = new Sound(streamObj, false); + + newsound->kind = kind; + if (fileName) { + newsound->fileName = fileName->copy(); + } + newsound->samplingRate = samplingRate; + newsound->channels = channels; + newsound->bitsPerSample = bitsPerSample; + newsound->encoding = encoding; + + return newsound; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Sound.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Sound.h new file mode 100644 index 00000000000..acb0f8d9acd --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Sound.h @@ -0,0 +1,74 @@ +/* Sound.h - an object that holds the sound structure + * Copyright (C) 2006-2007, Pino Toscano <pino@kde.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef Sound_H +#define Sound_H + +class GooString; +class Object; +class Stream; + +//------------------------------------------------------------------------ + +enum SoundKind { + soundEmbedded, // embedded sound + soundExternal // external sound +}; + +enum SoundEncoding { + soundRaw, // raw encoding + soundSigned, // twos-complement values + soundMuLaw, // mu-law-encoded samples + soundALaw // A-law-encoded samples +}; + +class Sound +{ +public: + // Try to parse the Object s + static Sound *parseSound(Object *s); + + // Destructor + ~Sound(); + + Object *getObject() { return streamObj; } + Stream *getStream(); + + SoundKind getSoundKind() { return kind; } + GooString *getFileName() { return fileName; } + double getSamplingRate() { return samplingRate; } + int getChannels() { return channels; } + int getBitsPerSample() { return bitsPerSample; } + SoundEncoding getEncoding() { return encoding; } + + Sound *copy(); + +private: + // Create a sound. The Object obj is ensured to be a Stream with a Dict + Sound(Object *obj, bool readAttrs = true); + + Object *streamObj; + SoundKind kind; + GooString *fileName; + double samplingRate; + int channels; + int bitsPerSample; + SoundEncoding encoding; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/SplashOutputDev.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/SplashOutputDev.cc new file mode 100644 index 00000000000..7bacdba7ed9 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/SplashOutputDev.cc @@ -0,0 +1,4048 @@ +//======================================================================== +// +// SplashOutputDev.cc +// +// Copyright 2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Takashi Iwai <tiwai@suse.de> +// Copyright (C) 2006 Stefan Schweizer <genstef@gentoo.org> +// Copyright (C) 2006-2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2006 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// Copyright (C) 2006 Scott Turner <scotty1024@mac.com> +// Copyright (C) 2007 Koji Otani <sho@bbr.jp> +// Copyright (C) 2009 Petr Gajdos <pgajdos@novell.com> +// Copyright (C) 2009-2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2009 William Bader <williambader@hotmail.com> +// Copyright (C) 2010 Patrick Spendrin <ps_ml@gmx.de> +// Copyright (C) 2010 Brian Cameron <brian.cameron@oracle.com> +// Copyright (C) 2010 PaweÅ‚ Wiejacha <pawel.wiejacha@gmail.com> +// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> +// Copyright (C) 2011 Andreas Hartmetz <ahartmetz@gmail.com> +// Copyright (C) 2011 Andrea Canciani <ranma42@gmail.com> +// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <string.h> +#include <math.h> +#include "goo/gfile.h" +#include "GlobalParams.h" +#include "Error.h" +#include "Object.h" +#include "Gfx.h" +#include "GfxFont.h" +#include "Page.h" +#include "Link.h" +#include "CharCodeToUnicode.h" +#include "FontEncodingTables.h" +#include "fofi/FoFiTrueType.h" +#include "splash/SplashBitmap.h" +#include "splash/SplashGlyphBitmap.h" +#include "splash/SplashPattern.h" +#include "splash/SplashScreen.h" +#include "splash/SplashPath.h" +#include "splash/SplashState.h" +#include "splash/SplashErrorCodes.h" +#include "splash/SplashFontEngine.h" +#include "splash/SplashFont.h" +#include "splash/SplashFontFile.h" +#include "splash/SplashFontFileID.h" +#include "splash/Splash.h" +#include "SplashOutputDev.h" + +#ifdef VMS +#if (__VMS_VER < 70000000) +extern "C" int unlink(char *filename); +#endif +#endif + +#ifdef _MSC_VER +#include <float.h> +#define isfinite(x) _finite(x) +#endif + +#ifdef __sun +#include <ieeefp.h> +#define isfinite(x) finite(x) +#endif + +static inline void convertGfxColor(SplashColorPtr dest, + SplashColorMode colorMode, + GfxColorSpace *colorSpace, + GfxColor *src) { + SplashColor color; + GfxGray gray; + GfxRGB rgb; +#if SPLASH_CMYK + GfxCMYK cmyk; +#endif + + // make gcc happy + color[0] = color[1] = color[2] = 0; +#if SPLASH_CMYK + color[3] = 0; +#endif + switch (colorMode) { + case splashModeMono1: + case splashModeMono8: + colorSpace->getGray(src, &gray); + color[0] = colToByte(gray); + break; + case splashModeXBGR8: + color[3] = 255; + case splashModeBGR8: + case splashModeRGB8: + colorSpace->getRGB(src, &rgb); + color[0] = colToByte(rgb.r); + color[1] = colToByte(rgb.g); + color[2] = colToByte(rgb.b); + break; +#if SPLASH_CMYK + case splashModeCMYK8: + colorSpace->getCMYK(src, &cmyk); + color[0] = colToByte(cmyk.c); + color[1] = colToByte(cmyk.m); + color[2] = colToByte(cmyk.y); + color[3] = colToByte(cmyk.k); + break; +#endif + } + splashColorCopy(dest, color); +} + +static inline SplashPattern *createOverprintPattern(GfxColorSpace *colorSpace, SplashColorPtr color, GBool image, Guchar tolerance = 0x01) { + switch (colorSpace->getMode()) { + case csDeviceCMYK: + if (image) { + return new SplashSolidColor(color); + } + case csSeparation: + case csDeviceN: + if (image && colorSpace->getMode() == csDeviceN) { + GfxDeviceNColorSpace *deviceNSpace = (GfxDeviceNColorSpace *) colorSpace; + GBool hasSpot = gFalse; + GBool hasProcess = gFalse; + for (int i = 0; i < deviceNSpace->getNComps(); i++) { + GooString *name = deviceNSpace->getColorantName(i)->upperCase(); + if (name->cmp("CYAN") != 0 && + name->cmp("MAGENTA") != 0 && + name->cmp("YELLOW") != 0 && + name->cmp("BLACK") != 0 && + name->cmp("NONE") != 0) { + hasSpot = gTrue; + } else { + hasProcess = gTrue; + } + } + if (hasSpot && hasProcess) + return new SplashSolidColor(color); + } + return new SplashOverprintColor(colorSpace, color, tolerance); + case csIndexed: + return createOverprintPattern(((GfxIndexedColorSpace *) colorSpace)->getBase(), color, image); + case csICCBased: + if (image) { + return createOverprintPattern(((GfxICCBasedColorSpace *) colorSpace)->getAlt(), color, gFalse, 0x05); + } + case csDeviceGray: + if (image) { + return new SplashOverprintColor(colorSpace, color, tolerance); + } + default: // knockout + return new SplashSolidColor(color); + } +} + + +//------------------------------------------------------------------------ +// SplashOverprintColor +//------------------------------------------------------------------------ + +SplashOverprintColor::SplashOverprintColor(GfxColorSpace *colorSpaceA, SplashColorPtr colorA, Guchar toleranceA) { + splashColorCopy(color, colorA); + colorSpace = colorSpaceA; + tolerance = toleranceA; +} + +SplashOverprintColor::~SplashOverprintColor() { +} + +GBool SplashOverprintColor::getColor(int x, int y, SplashColorPtr c) { + splashColorCopy(c, color); + return gTrue; +} + +void SplashOverprintColor::overprint(GBool op, Guchar aSrc, SplashColorPtr cSrc, + Guchar aDest, SplashColorPtr cDest, + SplashColorPtr colorResult) { + switch(colorSpace->getMode()) { + case csDeviceGray: // only in case of grayscale images + colorResult[0] = cDest[0]; + colorResult[1] = cDest[1]; + colorResult[2] = cDest[2]; + colorResult[3] = (Guchar)(((aDest - aSrc) * cDest[3] + + aSrc * cSrc[3]) / aDest); + break; + case csDeviceCMYK: + colorResult[0] = (cSrc[0] < tolerance && op) ? + cDest[0] : + (Guchar)(((aDest - aSrc) * cDest[0] + aSrc * cSrc[0]) / aDest); + colorResult[1] = (cSrc[1] < tolerance && op) ? + cDest[1] : + (Guchar)(((aDest - aSrc) * cDest[1] + aSrc * cSrc[1]) / aDest); + colorResult[2] = (cSrc[2] < tolerance && op) ? + cDest[2] : + (Guchar)(((aDest - aSrc) * cDest[2] + aSrc * cSrc[2]) / aDest); + colorResult[3] = (cSrc[3] < tolerance && op) ? + cDest[3] : + (Guchar)(((aDest - aSrc) * cDest[3] + aSrc * cSrc[3]) / aDest); + break; + + case csSeparation: + { + GfxSeparationColorSpace *sepSpace = (GfxSeparationColorSpace *) colorSpace; + GooString *name = sepSpace->getName()->upperCase(); + if (name->cmp("CYAN") == 0) { + colorResult[0] = (Guchar)(((aDest - aSrc) * cDest[0] + + aSrc * cSrc[0]) / aDest); + colorResult[1] = cDest[1]; + colorResult[2] = cDest[2]; + colorResult[3] = cDest[3]; + } else if (name->cmp("MAGENTA") == 0) { + colorResult[0] = cDest[0]; + colorResult[1] = (Guchar)(((aDest - aSrc) * cDest[1] + + aSrc * cSrc[1]) / aDest); + colorResult[2] = cDest[2]; + colorResult[3] = cDest[3]; + } else if (name->cmp("YELLOW") == 0) { + colorResult[0] = cDest[0]; + colorResult[1] = cDest[1]; + colorResult[2] = (Guchar)(((aDest - aSrc) * cDest[2] + + aSrc * cSrc[2]) / aDest); + colorResult[3] = cDest[3]; + } else if (name->cmp("BLACK") == 0) { + colorResult[0] = cDest[0]; + colorResult[1] = cDest[1]; + colorResult[2] = cDest[2]; + colorResult[3] = (Guchar)(((aDest - aSrc) * cDest[3] + + aSrc * cSrc[3]) / aDest); + } else { + colorResult[0] = ((int) cDest[0] + cSrc[0]) > 0xff ? 0xff : cDest[0] + cSrc[0]; + colorResult[1] = ((int) cDest[1] + cSrc[1]) > 0xff ? 0xff : cDest[1] + cSrc[1]; + colorResult[2] = ((int) cDest[2] + cSrc[2]) > 0xff ? 0xff : cDest[2] + cSrc[2]; + colorResult[3] = ((int) cDest[3] + cSrc[3]) > 0xff ? 0xff : cDest[3] + cSrc[3]; + } + } + break; + case csDeviceN: + { + GfxDeviceNColorSpace *deviceNSpace = (GfxDeviceNColorSpace *) colorSpace; + colorResult[0] = cDest[0]; + colorResult[1] = cDest[1]; + colorResult[2] = cDest[2]; + colorResult[3] = cDest[3]; + for (int i = 0; i < deviceNSpace->getNComps(); i++) { + GooString *name = deviceNSpace->getColorantName(i)->upperCase(); + if (name->cmp("CYAN") == 0) { + colorResult[0] = (Guchar)(((aDest - aSrc) * cDest[0] + + aSrc * cSrc[0]) / aDest); + } else if (name->cmp("MAGENTA") == 0) { + colorResult[1] = (Guchar)(((aDest - aSrc) * cDest[1] + + aSrc * cSrc[1]) / aDest); + } else if (name->cmp("YELLOW") == 0) { + colorResult[2] = (Guchar)(((aDest - aSrc) * cDest[2] + + aSrc * cSrc[2]) / aDest); + } else if (name->cmp("BLACK") == 0) { + colorResult[3] = (Guchar)(((aDest - aSrc) * cDest[3] + + aSrc * cSrc[3]) / aDest); + } else if (name->cmp("NONE") != 0) { + colorResult[0] = (cSrc[0] < tolerance && op) ? + cDest[0] : + (Guchar)(((aDest - aSrc) * cDest[0] + aSrc * cSrc[0]) / aDest); + colorResult[1] = (cSrc[1] < tolerance && op) ? + cDest[1] : + (Guchar)(((aDest - aSrc) * cDest[1] + aSrc * cSrc[1]) / aDest); + colorResult[2] = (cSrc[2] < tolerance && op) ? + cDest[2] : + (Guchar)(((aDest - aSrc) * cDest[2] + aSrc * cSrc[2]) / aDest); + colorResult[3] = (cSrc[3] < tolerance && op) ? + cDest[3] : + (Guchar)(((aDest - aSrc) * cDest[3] + aSrc * cSrc[3]) / aDest); + break; + } + } + } + break; + default: + // default for overprint is knockout: + colorResult[0] = (Guchar)(((aDest - aSrc) * cDest[0] + + aSrc * cSrc[0]) / aDest); + colorResult[1] = (Guchar)(((aDest - aSrc) * cDest[1] + + aSrc * cSrc[1]) / aDest); + colorResult[2] = (Guchar)(((aDest - aSrc) * cDest[2] + + aSrc * cSrc[2]) / aDest); + colorResult[3] = (Guchar)(((aDest - aSrc) * cDest[3] + + aSrc * cSrc[3]) / aDest); + } +} + +//------------------------------------------------------------------------ +// SplashGouraudPattern +//------------------------------------------------------------------------ +SplashGouraudPattern::SplashGouraudPattern(GBool bDirectColorTranslationA, + GfxState *stateA, GfxGouraudTriangleShading *shadingA, SplashColorMode modeA) { + SplashColor defaultColor; + GfxColor srcColor; + state = stateA; + shading = shadingA; + mode = modeA; + bDirectColorTranslation = bDirectColorTranslationA; + shadingA->getColorSpace()->getDefaultColor(&srcColor); + convertGfxColor(defaultColor, mode, shadingA->getColorSpace(), &srcColor); + opPattern = new SplashOverprintColor(shadingA->getColorSpace(), defaultColor, 0x01); +} + +SplashGouraudPattern::~SplashGouraudPattern() { + delete opPattern; +} + +void SplashGouraudPattern::getParameterizedColor(double colorinterp, SplashColorMode mode, SplashColorPtr dest) { + GfxColor src; + GfxColorSpace* srcColorSpace = shading->getColorSpace(); + int colorComps = 3; +#if SPLASH_CMYK + if (mode == splashModeCMYK8) + colorComps=4; +#endif + + shading->getParameterizedColor(colorinterp, &src); + + if (bDirectColorTranslation) { + for (int m = 0; m < colorComps; ++m) + dest[m] = colToByte(src.c[m]); + } else { + convertGfxColor(dest, mode, srcColorSpace, &src); + } +} + +void SplashGouraudPattern::overprint(GBool op, Guchar aSrc, SplashColorPtr cSrc, + Guchar aDest, SplashColorPtr cDest, + SplashColorPtr colorResult) { + opPattern->overprint(op, aSrc, cSrc, aDest, cDest, colorResult); +} +//------------------------------------------------------------------------ +// SplashUnivariatePattern +//------------------------------------------------------------------------ + +SplashUnivariatePattern::SplashUnivariatePattern(SplashColorMode colorModeA, GfxState *stateA, GfxUnivariateShading *shadingA) { + Matrix ctm; + double xMin, yMin, xMax, yMax; + + shading = shadingA; + state = stateA; + colorMode = colorModeA; + + state->getCTM(&ctm); + ctm.invertTo(&ictm); + + // get the function domain + t0 = shading->getDomain0(); + t1 = shading->getDomain1(); + dt = t1 - t0; + + stateA->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); + shadingA->setupCache(&ctm, xMin, yMin, xMax, yMax); +} + +SplashUnivariatePattern::~SplashUnivariatePattern() { +} + +GBool SplashUnivariatePattern::getColor(int x, int y, SplashColorPtr c) { + GfxColor gfxColor; + double xc, yc, t; + + ictm.transform(x, y, &xc, &yc); + if (! getParameter (xc, yc, &t)) + return gFalse; + + shading->getColor(t, &gfxColor); + convertGfxColor(c, colorMode, shading->getColorSpace(), &gfxColor); + return gTrue; +} + +GBool SplashUnivariatePattern::testPosition(int x, int y) { + double xc, yc, t; + + ictm.transform(x, y, &xc, &yc); + if (! getParameter (xc, yc, &t)) + return gFalse; + return (t0 < t1) ? (t > t0 && t < t1) : (t > t1 && t < t0); +} + + +//------------------------------------------------------------------------ +// SplashRadialPattern +//------------------------------------------------------------------------ +#define RADIAL_EPSILON (1. / 1024 / 1024) + +SplashRadialPattern::SplashRadialPattern(SplashColorMode colorModeA, GfxState *stateA, GfxRadialShading *shadingA): + SplashUnivariatePattern(colorModeA, stateA, shadingA) +{ + SplashColor defaultColor; + GfxColor srcColor; + + shadingA->getCoords(&x0, &y0, &r0, &dx, &dy, &dr); + dx -= x0; + dy -= y0; + dr -= r0; + a = dx*dx + dy*dy - dr*dr; + if (fabs(a) > RADIAL_EPSILON) + inva = 1.0 / a; + shadingA->getColorSpace()->getDefaultColor(&srcColor); + convertGfxColor(defaultColor, colorModeA, shadingA->getColorSpace(), &srcColor); + opPattern = new SplashOverprintColor(shadingA->getColorSpace(), defaultColor, 0x01); +} + +SplashRadialPattern::~SplashRadialPattern() { + delete opPattern; +} + +GBool SplashRadialPattern::getParameter(double xs, double ys, double *t) { + double b, c, s0, s1; + + // We want to solve this system of equations: + // + // 1. (x - xc(s))^2 + (y -yc(s))^2 = rc(s)^2 + // 2. xc(s) = x0 + s * (x1 - xo) + // 3. yc(s) = y0 + s * (y1 - yo) + // 4. rc(s) = r0 + s * (r1 - ro) + // + // To simplify the system a little, we translate + // our coordinates to have the origin in (x0,y0) + + xs -= x0; + ys -= y0; + + // Then we have to solve the equation: + // A*s^2 - 2*B*s + C = 0 + // where + // A = dx^2 + dy^2 - dr^2 + // B = xs*dx + ys*dy + r0*dr + // C = xs^2 + ys^2 - r0^2 + + b = xs*dx + ys*dy + r0*dr; + c = xs*xs + ys*ys - r0*r0; + + if (fabs(a) <= RADIAL_EPSILON) { + // A is 0, thus the equation simplifies to: + // -2*B*s + C = 0 + // If B is 0, we can either have no solution or an indeterminate + // equation, thus we behave as if we had an invalid solution + if (fabs(b) <= RADIAL_EPSILON) + return gFalse; + + s0 = s1 = 0.5 * c / b; + } else { + double d; + + d = b*b - a*c; + if (d < 0) + return gFalse; + + d = sqrt (d); + s0 = b + d; + s1 = b - d; + + // If A < 0, one of the two solutions will have negative radius, + // thus it will be ignored. Otherwise we know that s1 <= s0 + // (because d >=0 implies b - d <= b + d), so if both are valid it + // will be the true solution. + s0 *= inva; + s1 *= inva; + } + + if (r0 + s0 * dr >= 0) { + if (0 <= s0 && s0 <= 1) { + *t = t0 + dt * s0; + return gTrue; + } else if (s0 < 0 && shading->getExtend0()) { + *t = t0; + return gTrue; + } else if (s0 > 1 && shading->getExtend1()) { + *t = t1; + return gTrue; + } + } + + if (r0 + s1 * dr >= 0) { + if (0 <= s1 && s1 <= 1) { + *t = t0 + dt * s1; + return gTrue; + } else if (s1 < 0 && shading->getExtend0()) { + *t = t0; + return gTrue; + } else if (s1 > 1 && shading->getExtend1()) { + *t = t1; + return gTrue; + } + } + + return gFalse; +} + +void SplashRadialPattern::overprint(GBool op, Guchar aSrc, SplashColorPtr cSrc, + Guchar aDest, SplashColorPtr cDest, + SplashColorPtr colorResult) { + opPattern->overprint(op, aSrc, cSrc, aDest, cDest, colorResult); +} + +#undef RADIAL_EPSILON + +//------------------------------------------------------------------------ +// SplashAxialPattern +//------------------------------------------------------------------------ + +SplashAxialPattern::SplashAxialPattern(SplashColorMode colorModeA, GfxState *stateA, GfxAxialShading *shadingA): + SplashUnivariatePattern(colorModeA, stateA, shadingA) +{ + SplashColor defaultColor; + GfxColor srcColor; + + shadingA->getCoords(&x0, &y0, &x1, &y1); + dx = x1 - x0; + dy = y1 - y0; + mul = 1 / (dx * dx + dy * dy); + shadingA->getColorSpace()->getDefaultColor(&srcColor); + convertGfxColor(defaultColor, colorModeA, shadingA->getColorSpace(), &srcColor); + opPattern = new SplashOverprintColor(shadingA->getColorSpace(), defaultColor, 0x01); +} + +SplashAxialPattern::~SplashAxialPattern() { + delete opPattern; +} + +GBool SplashAxialPattern::getParameter(double xc, double yc, double *t) { + double s; + + xc -= x0; + yc -= y0; + + s = (xc * dx + yc * dy) * mul; + if (0 <= s && s <= 1) { + *t = t0 + dt * s; + } else if (s < 0 && shading->getExtend0()) { + *t = t0; + } else if (s > 1 && shading->getExtend1()) { + *t = t1; + } else { + return gFalse; + } + + return gTrue; +} + +void SplashAxialPattern::overprint(GBool op, Guchar aSrc, SplashColorPtr cSrc, + Guchar aDest, SplashColorPtr cDest, + SplashColorPtr colorResult) { + opPattern->overprint(op, aSrc, cSrc, aDest, cDest, colorResult); +} + +//------------------------------------------------------------------------ + +// Divide a 16-bit value (in [0, 255*255]) by 255, returning an 8-bit result. +static inline Guchar div255(int x) { + return (Guchar)((x + (x >> 8) + 0x80) >> 8); +} + +#if SPLASH_CMYK + +#include "GfxState_helpers.h" + +//------------------------------------------------------------------------- +// helper for Blend functions (convert CMYK to RGB, do blend, convert back) +//------------------------------------------------------------------------- + +// based in GfxState.cc + +static void cmykToRGB(SplashColorPtr cmyk, SplashColor rgb) { + double c, m, y, k, c1, m1, y1, k1, r, g, b; + + c = colToDbl(byteToCol(cmyk[0])); + m = colToDbl(byteToCol(cmyk[1])); + y = colToDbl(byteToCol(cmyk[2])); + k = colToDbl(byteToCol(cmyk[3])); + c1 = 1 - c; + m1 = 1 - m; + y1 = 1 - y; + k1 = 1 - k; + cmykToRGBMatrixMultiplication(c, m, y, k, c1, m1, y1, k1, r, g, b); + rgb[0] = colToByte(clip01(dblToCol(r))); + rgb[1] = colToByte(clip01(dblToCol(g))); + rgb[2] = colToByte(clip01(dblToCol(b))); +} + +static void rgbToCMYK(SplashColor rgb, SplashColorPtr cmyk) { + GfxColorComp c, m, y, k; + + c = clip01(gfxColorComp1 - byteToCol(rgb[0])); + m = clip01(gfxColorComp1 - byteToCol(rgb[1])); + y = clip01(gfxColorComp1 - byteToCol(rgb[2])); + k = c; + if (m < k) { + k = m; + } + if (y < k) { + k = y; + } + cmyk[0] = colToByte(c - k); + cmyk[1] = colToByte(m - k); + cmyk[2] = colToByte(y - k); + cmyk[3] = colToByte(k); +} + +#endif + +//------------------------------------------------------------------------ +// Blend functions +//------------------------------------------------------------------------ + +static void splashOutBlendMultiply(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, SplashColorMode cm) { + int i; + +#if SPLASH_CMYK + if (cm == splashModeCMYK8) { + SplashColor rgbSrc; + SplashColor rgbDest; + SplashColor rgbBlend; + cmykToRGB(src, rgbSrc); + cmykToRGB(dest, rgbDest); + for (i = 0; i < 3; ++i) { + rgbBlend[i] = (rgbDest[i] * rgbSrc[i]) / 255; + } + rgbToCMYK(rgbBlend, blend); + } else +#endif + { + for (i = 0; i < splashColorModeNComps[cm]; ++i) { + blend[i] = (dest[i] * src[i]) / 255; + } + } +} + +static void splashOutBlendScreen(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, SplashColorMode cm) { + int i; + +#if SPLASH_CMYK + if (cm == splashModeCMYK8) { + SplashColor rgbSrc; + SplashColor rgbDest; + SplashColor rgbBlend; + cmykToRGB(src, rgbSrc); + cmykToRGB(dest, rgbDest); + for (i = 0; i < 3; ++i) { + rgbBlend[i] = rgbDest[i] + rgbSrc[i] - (rgbDest[i] * rgbSrc[i]) / 255; + } + rgbToCMYK(rgbBlend, blend); + } else +#endif + { + for (i = 0; i < splashColorModeNComps[cm]; ++i) { + blend[i] = dest[i] + src[i] - (dest[i] * src[i]) / 255; + } + } +} + +static void splashOutBlendOverlay(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, SplashColorMode cm) { + int i; + +#if SPLASH_CMYK + if (cm == splashModeCMYK8) { + SplashColor rgbSrc; + SplashColor rgbDest; + SplashColor rgbBlend; + cmykToRGB(src, rgbSrc); + cmykToRGB(dest, rgbDest); + for (i = 0; i < 3; ++i) { + rgbBlend[i] = rgbDest[i] < 0x80 + ? (rgbSrc[i] * 2 * rgbDest[i]) / 255 + : 255 - 2 * ((255 - rgbSrc[i]) * (255 - rgbDest[i])) / 255; + } + rgbToCMYK(rgbBlend, blend); + } else +#endif + { + for (i = 0; i < splashColorModeNComps[cm]; ++i) { + blend[i] = dest[i] < 0x80 + ? (src[i] * 2 * dest[i]) / 255 + : 255 - 2 * ((255 - src[i]) * (255 - dest[i])) / 255; + } + } +} + +static void splashOutBlendDarken(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, SplashColorMode cm) { + int i; + +#if SPLASH_CMYK + if (cm == splashModeCMYK8) { + SplashColor rgbSrc; + SplashColor rgbDest; + SplashColor rgbBlend; + cmykToRGB(src, rgbSrc); + cmykToRGB(dest, rgbDest); + for (i = 0; i < 3; ++i) { + rgbBlend[i] = rgbDest[i] < rgbSrc[i] ? rgbDest[i] : rgbSrc[i]; + } + rgbToCMYK(rgbBlend, blend); + } else +#endif + { + for (i = 0; i < splashColorModeNComps[cm]; ++i) { + blend[i] = dest[i] < src[i] ? dest[i] : src[i]; + } + } +} + +static void splashOutBlendLighten(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, SplashColorMode cm) { + int i; + +#if SPLASH_CMYK + if (cm == splashModeCMYK8) { + SplashColor rgbSrc; + SplashColor rgbDest; + SplashColor rgbBlend; + cmykToRGB(src, rgbSrc); + cmykToRGB(dest, rgbDest); + for (i = 0; i < 3; ++i) { + rgbBlend[i] = rgbDest[i] > rgbSrc[i] ? rgbDest[i] : rgbSrc[i]; + } + rgbToCMYK(rgbBlend, blend); + } else +#endif + { + for (i = 0; i < splashColorModeNComps[cm]; ++i) { + blend[i] = dest[i] > src[i] ? dest[i] : src[i]; + } + } +} + +static void splashOutBlendColorDodge(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, + SplashColorMode cm) { + int i, x; + +#if SPLASH_CMYK + if (cm == splashModeCMYK8) { + SplashColor rgbSrc; + SplashColor rgbDest; + SplashColor rgbBlend; + cmykToRGB(src, rgbSrc); + cmykToRGB(dest, rgbDest); + for (i = 0; i < 3; ++i) { + if (rgbSrc[i] == 255) { + rgbBlend[i] = 255; + } else { + x = (rgbDest[i] * 255) / (255 - rgbSrc[i]); + rgbBlend[i] = x <= 255 ? x : 255; + } + } + rgbToCMYK(rgbBlend, blend); + } else +#endif + { + for (i = 0; i < splashColorModeNComps[cm]; ++i) { + if (src[i] == 255) { + blend[i] = 255; + } else { + x = (dest[i] * 255) / (255 - src[i]); + blend[i] = x <= 255 ? x : 255; + } + } + } +} + +static void splashOutBlendColorBurn(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, SplashColorMode cm) { + int i, x; + +#if SPLASH_CMYK + if (cm == splashModeCMYK8) { + SplashColor rgbSrc; + SplashColor rgbDest; + SplashColor rgbBlend; + cmykToRGB(src, rgbSrc); + cmykToRGB(dest, rgbDest); + for (i = 0; i < 3; ++i) { + if (rgbSrc[i] == 0) { + rgbBlend[i] = 0; + } else { + x = ((255 - rgbDest[i]) * 255) / rgbSrc[i]; + rgbBlend[i] = x <= 255 ? 255 - x : 0; + } + } + rgbToCMYK(rgbBlend, blend); + } else +#endif + { + for (i = 0; i < splashColorModeNComps[cm]; ++i) { + if (src[i] == 0) { + blend[i] = 0; + } else { + x = ((255 - dest[i]) * 255) / src[i]; + blend[i] = x <= 255 ? 255 - x : 0; + } + } + } +} + +static void splashOutBlendHardLight(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, SplashColorMode cm) { + int i; + +#if SPLASH_CMYK + if (cm == splashModeCMYK8) { + SplashColor rgbSrc; + SplashColor rgbDest; + SplashColor rgbBlend; + cmykToRGB(src, rgbSrc); + cmykToRGB(dest, rgbDest); + for (i = 0; i < 3; ++i) { + rgbBlend[i] = rgbSrc[i] < 0x80 + ? (rgbDest[i] * 2 * rgbSrc[i]) / 255 + : 255 - 2 * ((255 - rgbDest[i]) * (255 - rgbSrc[i])) / 255; + } + rgbToCMYK(rgbBlend, blend); + } else +#endif + { + for (i = 0; i < splashColorModeNComps[cm]; ++i) { + blend[i] = src[i] < 0x80 + ? (dest[i] * 2 * src[i]) / 255 + : 255 - 2 * ((255 - dest[i]) * (255 - src[i])) / 255; + } + } +} + +static void splashOutBlendSoftLight(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, SplashColorMode cm) { + int i, x; + +#if SPLASH_CMYK + if (cm == splashModeCMYK8) { + SplashColor rgbSrc; + SplashColor rgbDest; + SplashColor rgbBlend; + cmykToRGB(src, rgbSrc); + cmykToRGB(dest, rgbDest); + for (i = 0; i < 3; ++i) { + if (rgbSrc[i] < 0x80) { + rgbBlend[i] = rgbDest[i] - (255 - 2 * rgbSrc[i]) * rgbDest[i] * (255 - rgbDest[i]) / (255 * 255); + } else { + if (rgbDest[i] < 0x40) { + x = (((((16 * rgbDest[i] - 12 * 255) * rgbDest[i]) / 255) + 4 * 255) * rgbDest[i]) / 255; + } else { + x = (int)sqrt(255.0 * rgbDest[i]); + } + rgbBlend[i] = rgbDest[i] + (2 * rgbSrc[i] - 255) * (x - rgbDest[i]) / 255; + } + } + rgbToCMYK(rgbBlend, blend); + } else +#endif + { + for (i = 0; i < splashColorModeNComps[cm]; ++i) { + if (src[i] < 0x80) { + blend[i] = dest[i] - (255 - 2 * src[i]) * dest[i] * (255 - dest[i]) / (255 * 255); + } else { + if (dest[i] < 0x40) { + x = (((((16 * dest[i] - 12 * 255) * dest[i]) / 255) + 4 * 255) * dest[i]) / 255; + } else { + x = (int)sqrt(255.0 * dest[i]); + } + blend[i] = dest[i] + (2 * src[i] - 255) * (x - dest[i]) / 255; + } + } + } +} + +static void splashOutBlendDifference(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, + SplashColorMode cm) { + int i; + + for (i = 0; i < splashColorModeNComps[cm]; ++i) { +#if SPLASH_CMYK + if (cm == splashModeCMYK8) + { + blend[i] = dest[i] < src[i] ? 255 - (src[i] - dest[i]) : 255 - (dest[i] - src[i]); + } + else +#endif + { + blend[i] = dest[i] < src[i] ? src[i] - dest[i] : dest[i] - src[i]; + } + } +} + +static void splashOutBlendExclusion(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, SplashColorMode cm) { + int i; + +#if SPLASH_CMYK + if (cm == splashModeCMYK8) { + SplashColor rgbSrc; + SplashColor rgbDest; + SplashColor rgbBlend; + cmykToRGB(src, rgbSrc); + cmykToRGB(dest, rgbDest); + for (i = 0; i < 3; ++i) { + rgbBlend[i] = rgbDest[i] + rgbSrc[i] - (2 * rgbDest[i] * rgbSrc[i]) / 255; + } + rgbToCMYK(rgbBlend, blend); + } else +#endif + { + for (i = 0; i < splashColorModeNComps[cm]; ++i) { + blend[i] = dest[i] + src[i] - (2 * dest[i] * src[i]) / 255; + } + } +} + +static void cvtRGBToHSV(Guchar r, Guchar g, Guchar b, int *h, int *s, int *v) { + int cmax, cmid, cmin, x; + + if (r >= g) { + if (g >= b) { x = 0; cmax = r; cmid = g; cmin = b; } + else if (b >= r) { x = 4; cmax = b; cmid = r; cmin = g; } + else { x = 5; cmax = r; cmid = b; cmin = g; } + } else { + if (r >= b) { x = 1; cmax = g; cmid = r; cmin = b; } + else if (g >= b) { x = 2; cmax = g; cmid = b; cmin = r; } + else { x = 3; cmax = b; cmid = g; cmin = r; } + } + if (cmax == cmin) { + *h = *s = 0; + } else { + *h = x * 60; + if (x & 1) { + *h += ((cmax - cmid) * 60) / (cmax - cmin); + } else { + *h += ((cmid - cmin) * 60) / (cmax - cmin); + } + *s = (255 * (cmax - cmin)) / cmax; + } + *v = cmax; +} + +static void cvtHSVToRGB(int h, int s, int v, Guchar *r, Guchar *g, Guchar *b) { + int x, f, cmax, cmid, cmin; + + if (s == 0) { + *r = *g = *b = v; + } else { + x = h / 60; + f = h % 60; + cmax = v; + if (x & 1) { + cmid = div255(v * 255 - ((s * f) / 60)); + } else { + cmid = div255(v * (255 - ((s * (60 - f)) / 60))); + } + cmin = div255(v * (255 - s)); + switch (x) { + case 0: *r = cmax; *g = cmid; *b = cmin; break; + case 1: *g = cmax; *r = cmid; *b = cmin; break; + case 2: *g = cmax; *b = cmid; *r = cmin; break; + case 3: *b = cmax; *g = cmid; *r = cmin; break; + case 4: *b = cmax; *r = cmid; *g = cmin; break; + case 5: *r = cmax; *b = cmid; *g = cmin; break; + } + } +} + +static void splashOutBlendHue(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, SplashColorMode cm) { + int hs, ss, vs, hd, sd, vd; +#if SPLASH_CMYK + Guchar r, g, b; +#endif + + switch (cm) { + case splashModeMono1: + case splashModeMono8: + blend[0] = dest[0]; + break; + case splashModeXBGR8: + src[3] = 255; + case splashModeRGB8: + case splashModeBGR8: + cvtRGBToHSV(src[0], src[1], src[2], &hs, &ss, &vs); + cvtRGBToHSV(dest[0], dest[1], dest[2], &hd, &sd, &vd); + cvtHSVToRGB(hs, sd, vd, &blend[0], &blend[1], &blend[2]); + break; +#if SPLASH_CMYK + case splashModeCMYK8: + //~ (0xff - ...) should be clipped + cvtRGBToHSV(0xff - (src[0] + src[3]), + 0xff - (src[1] + src[3]), + 0xff - (src[2] + src[3]), &hs, &ss, &vs); + cvtRGBToHSV(0xff - (dest[0] + dest[3]), + 0xff - (dest[1] + dest[3]), + 0xff - (dest[2] + dest[3]), &hd, &sd, &vd); + cvtHSVToRGB(hs, sd, vd, &r, &g, &b); + //~ should do black generation + blend[0] = 0xff - r; + blend[1] = 0xff - g; + blend[2] = 0xff - b; + blend[3] = 0; + break; +#endif + } +} + +static void splashOutBlendSaturation(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, + SplashColorMode cm) { + int hs, ss, vs, hd, sd, vd; +#if SPLASH_CMYK + Guchar r, g, b; +#endif + + switch (cm) { + case splashModeMono1: + case splashModeMono8: + blend[0] = dest[0]; + break; + case splashModeXBGR8: + src[3] = 255; + case splashModeRGB8: + case splashModeBGR8: + cvtRGBToHSV(src[0], src[1], src[2], &hs, &ss, &vs); + cvtRGBToHSV(dest[0], dest[1], dest[2], &hd, &sd, &vd); + cvtHSVToRGB(hd, ss, vd, &blend[0], &blend[1], &blend[2]); + break; +#if SPLASH_CMYK + case splashModeCMYK8: + //~ (0xff - ...) should be clipped + cvtRGBToHSV(0xff - (src[0] + src[3]), + 0xff - (src[1] + src[3]), + 0xff - (src[2] + src[3]), &hs, &ss, &vs); + cvtRGBToHSV(0xff - (dest[0] + dest[3]), + 0xff - (dest[1] + dest[3]), + 0xff - (dest[2] + dest[3]), &hd, &sd, &vd); + cvtHSVToRGB(hd, ss, vd, &r, &g, &b); + //~ should do black generation + blend[0] = 0xff - r; + blend[1] = 0xff - g; + blend[2] = 0xff - b; + blend[3] = 0; + break; +#endif + } +} + +static void splashOutBlendColor(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, SplashColorMode cm) { + int hs, ss, vs, hd, sd, vd; + + switch (cm) { + case splashModeMono1: + case splashModeMono8: + blend[0] = dest[0]; + break; + case splashModeXBGR8: + src[3] = 255; + case splashModeRGB8: + case splashModeBGR8: + cvtRGBToHSV(src[0], src[1], src[2], &hs, &ss, &vs); + cvtRGBToHSV(dest[0], dest[1], dest[2], &hd, &sd, &vd); + cvtHSVToRGB(hs, ss, vd, &blend[0], &blend[1], &blend[2]); + break; +#if SPLASH_CMYK + case splashModeCMYK8: + SplashColor rgbSrc; + SplashColor rgbDest; + SplashColor rgbBlend; + cmykToRGB(src, rgbSrc); + cmykToRGB(dest, rgbDest); + cvtRGBToHSV(rgbSrc[0], rgbSrc[1], rgbSrc[2], &hs, &ss, &vs); + cvtRGBToHSV(rgbDest[0], rgbDest[1], rgbDest[2], &hd, &sd, &vd); + cvtHSVToRGB(hs, ss, vd, &rgbBlend[0], &rgbBlend[1], &rgbBlend[2]); + rgbToCMYK(rgbBlend, blend); + break; +#endif + } +} + +static void splashOutBlendLuminosity(SplashColorPtr src, SplashColorPtr dest, + SplashColorPtr blend, + SplashColorMode cm) { + int hs, ss, vs, hd, sd, vd; +#if SPLASH_CMYK + Guchar r, g, b; +#endif + + switch (cm) { + case splashModeMono1: + case splashModeMono8: + blend[0] = dest[0]; + break; + case splashModeXBGR8: + src[3] = 255; + case splashModeRGB8: + case splashModeBGR8: + cvtRGBToHSV(src[0], src[1], src[2], &hs, &ss, &vs); + cvtRGBToHSV(dest[0], dest[1], dest[2], &hd, &sd, &vd); + cvtHSVToRGB(hd, sd, vs, &blend[0], &blend[1], &blend[2]); + break; +#if SPLASH_CMYK + case splashModeCMYK8: + //~ (0xff - ...) should be clipped + cvtRGBToHSV(0xff - (src[0] + src[3]), + 0xff - (src[1] + src[3]), + 0xff - (src[2] + src[3]), &hs, &ss, &vs); + cvtRGBToHSV(0xff - (dest[0] + dest[3]), + 0xff - (dest[1] + dest[3]), + 0xff - (dest[2] + dest[3]), &hd, &sd, &vd); + cvtHSVToRGB(hd, sd, vs, &r, &g, &b); + //~ should do black generation + blend[0] = 0xff - r; + blend[1] = 0xff - g; + blend[2] = 0xff - b; + blend[3] = 0; + break; +#endif + } +} + +// NB: This must match the GfxBlendMode enum defined in GfxState.h. +static const SplashBlendFunc splashOutBlendFuncs[] = { + NULL, + &splashOutBlendMultiply, + &splashOutBlendScreen, + &splashOutBlendOverlay, + &splashOutBlendDarken, + &splashOutBlendLighten, + &splashOutBlendColorDodge, + &splashOutBlendColorBurn, + &splashOutBlendHardLight, + &splashOutBlendSoftLight, + &splashOutBlendDifference, + &splashOutBlendExclusion, + &splashOutBlendHue, + &splashOutBlendSaturation, + &splashOutBlendColor, + &splashOutBlendLuminosity +}; + +//------------------------------------------------------------------------ +// SplashOutFontFileID +//------------------------------------------------------------------------ + +class SplashOutFontFileID: public SplashFontFileID { +public: + + SplashOutFontFileID(Ref *rA) { r = *rA; } + + ~SplashOutFontFileID() {} + + GBool matches(SplashFontFileID *id) { + return ((SplashOutFontFileID *)id)->r.num == r.num && + ((SplashOutFontFileID *)id)->r.gen == r.gen; + } + +private: + + Ref r; +}; + +//------------------------------------------------------------------------ +// T3FontCache +//------------------------------------------------------------------------ + +struct T3FontCacheTag { + Gushort code; + Gushort mru; // valid bit (0x8000) and MRU index +}; + +class T3FontCache { +public: + + T3FontCache(Ref *fontID, double m11A, double m12A, + double m21A, double m22A, + int glyphXA, int glyphYA, int glyphWA, int glyphHA, + GBool aa, GBool validBBoxA); + ~T3FontCache(); + GBool matches(Ref *idA, double m11A, double m12A, + double m21A, double m22A) + { return fontID.num == idA->num && fontID.gen == idA->gen && + m11 == m11A && m12 == m12A && m21 == m21A && m22 == m22A; } + + Ref fontID; // PDF font ID + double m11, m12, m21, m22; // transform matrix + int glyphX, glyphY; // pixel offset of glyph bitmaps + int glyphW, glyphH; // size of glyph bitmaps, in pixels + GBool validBBox; // false if the bbox was [0 0 0 0] + int glyphSize; // size of glyph bitmaps, in bytes + int cacheSets; // number of sets in cache + int cacheAssoc; // cache associativity (glyphs per set) + Guchar *cacheData; // glyph pixmap cache + T3FontCacheTag *cacheTags; // cache tags, i.e., char codes +}; + +T3FontCache::T3FontCache(Ref *fontIDA, double m11A, double m12A, + double m21A, double m22A, + int glyphXA, int glyphYA, int glyphWA, int glyphHA, + GBool validBBoxA, GBool aa) { + int i; + + fontID = *fontIDA; + m11 = m11A; + m12 = m12A; + m21 = m21A; + m22 = m22A; + glyphX = glyphXA; + glyphY = glyphYA; + glyphW = glyphWA; + glyphH = glyphHA; + validBBox = validBBoxA; + if (aa) { + glyphSize = glyphW * glyphH; + } else { + glyphSize = ((glyphW + 7) >> 3) * glyphH; + } + cacheAssoc = 8; + if (glyphSize <= 256) { + cacheSets = 8; + } else if (glyphSize <= 512) { + cacheSets = 4; + } else if (glyphSize <= 1024) { + cacheSets = 2; + } else if (glyphSize <= 2048) { + cacheSets = 1; + cacheAssoc = 4; + } else if (glyphSize <= 4096) { + cacheSets = 1; + cacheAssoc = 2; + } else { + cacheSets = 1; + cacheAssoc = 1; + } + if (glyphSize < 10485760 / cacheAssoc / cacheSets) { + cacheData = (Guchar *)gmallocn_checkoverflow(cacheSets * cacheAssoc, glyphSize); + } else { + error(-1, "Not creating cacheData for T3FontCache, it asked for too much memory.\n" + " This could teoretically result in wrong rendering,\n" + " but most probably the document is bogus.\n" + " Please report a bug if you think the rendering may be wrong because of this."); + cacheData = NULL; + } + if (cacheData != NULL) + { + cacheTags = (T3FontCacheTag *)gmallocn(cacheSets * cacheAssoc, + sizeof(T3FontCacheTag)); + for (i = 0; i < cacheSets * cacheAssoc; ++i) { + cacheTags[i].mru = i & (cacheAssoc - 1); + } + } + else + { + cacheTags = NULL; + } +} + +T3FontCache::~T3FontCache() { + gfree(cacheData); + gfree(cacheTags); +} + +struct T3GlyphStack { + Gushort code; // character code + + //----- cache info + T3FontCache *cache; // font cache for the current font + T3FontCacheTag *cacheTag; // pointer to cache tag for the glyph + Guchar *cacheData; // pointer to cache data for the glyph + + //----- saved state + SplashBitmap *origBitmap; + Splash *origSplash; + double origCTM4, origCTM5; + + T3GlyphStack *next; // next object on stack +}; + +//------------------------------------------------------------------------ +// SplashTransparencyGroup +//------------------------------------------------------------------------ + +struct SplashTransparencyGroup { + int tx, ty; // translation coordinates + SplashBitmap *tBitmap; // bitmap for transparency group + GfxColorSpace *blendingColorSpace; + GBool isolated; + + //----- saved state + SplashBitmap *origBitmap; + Splash *origSplash; + + SplashTransparencyGroup *next; +}; + +//------------------------------------------------------------------------ +// SplashOutputDev +//------------------------------------------------------------------------ + +SplashOutputDev::SplashOutputDev(SplashColorMode colorModeA, + int bitmapRowPadA, + GBool reverseVideoA, + SplashColorPtr paperColorA, + GBool bitmapTopDownA, + GBool allowAntialiasA) { + colorMode = colorModeA; + bitmapRowPad = bitmapRowPadA; + bitmapTopDown = bitmapTopDownA; + allowAntialias = allowAntialiasA; + vectorAntialias = allowAntialias && + globalParams->getVectorAntialias() && + colorMode != splashModeMono1; + enableFreeTypeHinting = gFalse; + enableSlightHinting = gFalse; + setupScreenParams(72.0, 72.0); + reverseVideo = reverseVideoA; + if (paperColorA != NULL) { + splashColorCopy(paperColor, paperColorA); + } else { + splashClearColor(paperColor); + } + keepAlphaChannel = paperColorA == NULL; + + xref = NULL; + + bitmap = new SplashBitmap(1, 1, bitmapRowPad, colorMode, + colorMode != splashModeMono1, bitmapTopDown); + splash = new Splash(bitmap, vectorAntialias, &screenParams); + splash->clear(paperColor, 0); + + fontEngine = NULL; + + nT3Fonts = 0; + t3GlyphStack = NULL; + + font = NULL; + needFontUpdate = gFalse; + textClipPath = NULL; + haveCSPattern = gFalse; + transpGroupStack = NULL; +} + +void SplashOutputDev::setupScreenParams(double hDPI, double vDPI) { + screenParams.size = globalParams->getScreenSize(); + screenParams.dotRadius = globalParams->getScreenDotRadius(); + screenParams.gamma = (SplashCoord)globalParams->getScreenGamma(); + screenParams.blackThreshold = + (SplashCoord)globalParams->getScreenBlackThreshold(); + screenParams.whiteThreshold = + (SplashCoord)globalParams->getScreenWhiteThreshold(); + switch (globalParams->getScreenType()) { + case screenDispersed: + screenParams.type = splashScreenDispersed; + if (screenParams.size < 0) { + screenParams.size = 4; + } + break; + case screenClustered: + screenParams.type = splashScreenClustered; + if (screenParams.size < 0) { + screenParams.size = 10; + } + break; + case screenStochasticClustered: + screenParams.type = splashScreenStochasticClustered; + if (screenParams.size < 0) { + screenParams.size = 100; + } + if (screenParams.dotRadius < 0) { + screenParams.dotRadius = 2; + } + break; + case screenUnset: + default: + // use clustered dithering for resolution >= 300 dpi + // (compare to 299.9 to avoid floating point issues) + if (hDPI > 299.9 && vDPI > 299.9) { + screenParams.type = splashScreenStochasticClustered; + if (screenParams.size < 0) { + screenParams.size = 100; + } + if (screenParams.dotRadius < 0) { + screenParams.dotRadius = 2; + } + } else { + screenParams.type = splashScreenDispersed; + if (screenParams.size < 0) { + screenParams.size = 4; + } + } + } +} + +SplashOutputDev::~SplashOutputDev() { + int i; + + for (i = 0; i < nT3Fonts; ++i) { + delete t3FontCache[i]; + } + if (fontEngine) { + delete fontEngine; + } + if (splash) { + delete splash; + } + if (bitmap) { + delete bitmap; + } +} + +void SplashOutputDev::startDoc(XRef *xrefA) { + int i; + + xref = xrefA; + if (fontEngine) { + delete fontEngine; + } + fontEngine = new SplashFontEngine( +#if HAVE_T1LIB_H + globalParams->getEnableT1lib(), +#endif +#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H + globalParams->getEnableFreeType(), + enableFreeTypeHinting, + enableSlightHinting, +#endif + allowAntialias && + globalParams->getAntialias() && + colorMode != splashModeMono1); + for (i = 0; i < nT3Fonts; ++i) { + delete t3FontCache[i]; + } + nT3Fonts = 0; +} + +void SplashOutputDev::startPage(int pageNum, GfxState *state) { + int w, h; + double *ctm; + SplashCoord mat[6]; + SplashColor color; + + if (state) { + setupScreenParams(state->getHDPI(), state->getVDPI()); + w = (int)(state->getPageWidth() + 0.5); + if (w <= 0) { + w = 1; + } + h = (int)(state->getPageHeight() + 0.5); + if (h <= 0) { + h = 1; + } + } else { + w = h = 1; + } + if (splash) { + delete splash; + } + if (!bitmap || w != bitmap->getWidth() || h != bitmap->getHeight()) { + if (bitmap) { + delete bitmap; + } + bitmap = new SplashBitmap(w, h, bitmapRowPad, colorMode, + colorMode != splashModeMono1, bitmapTopDown); + } + splash = new Splash(bitmap, vectorAntialias, &screenParams); + if (state) { + ctm = state->getCTM(); + mat[0] = (SplashCoord)ctm[0]; + mat[1] = (SplashCoord)ctm[1]; + mat[2] = (SplashCoord)ctm[2]; + mat[3] = (SplashCoord)ctm[3]; + mat[4] = (SplashCoord)ctm[4]; + mat[5] = (SplashCoord)ctm[5]; + splash->setMatrix(mat); + } + switch (colorMode) { + case splashModeMono1: + case splashModeMono8: + color[0] = 0; + break; + case splashModeXBGR8: + color[3] = 255; + case splashModeRGB8: + case splashModeBGR8: + color[0] = color[1] = color[2] = 0; + break; +#if SPLASH_CMYK + case splashModeCMYK8: + color[0] = color[1] = color[2] = color[3] = 0; + break; +#endif + } + splash->setStrokePattern(new SplashSolidColor(color)); + splash->setFillPattern(new SplashSolidColor(color)); + splash->setLineCap(splashLineCapButt); + splash->setLineJoin(splashLineJoinMiter); + splash->setLineDash(NULL, 0, 0); + splash->setMiterLimit(10); + splash->setFlatness(1); + // the SA parameter supposedly defaults to false, but Acrobat + // apparently hardwires it to true + splash->setStrokeAdjust(globalParams->getStrokeAdjust()); + splash->clear(paperColor, 0); +} + +void SplashOutputDev::endPage() { + if (colorMode != splashModeMono1 && !keepAlphaChannel) { + splash->compositeBackground(paperColor); + } +} + +void SplashOutputDev::saveState(GfxState *state) { + splash->saveState(); +} + +void SplashOutputDev::restoreState(GfxState *state) { + splash->restoreState(); + needFontUpdate = gTrue; +} + +void SplashOutputDev::updateAll(GfxState *state) { + updateLineDash(state); + updateLineJoin(state); + updateLineCap(state); + updateLineWidth(state); + updateFlatness(state); + updateMiterLimit(state); + updateStrokeAdjust(state); + updateFillColor(state); + updateStrokeColor(state); + needFontUpdate = gTrue; +} + +void SplashOutputDev::updateCTM(GfxState *state, double m11, double m12, + double m21, double m22, + double m31, double m32) { + double *ctm; + SplashCoord mat[6]; + + ctm = state->getCTM(); + mat[0] = (SplashCoord)ctm[0]; + mat[1] = (SplashCoord)ctm[1]; + mat[2] = (SplashCoord)ctm[2]; + mat[3] = (SplashCoord)ctm[3]; + mat[4] = (SplashCoord)ctm[4]; + mat[5] = (SplashCoord)ctm[5]; + splash->setMatrix(mat); +} + +void SplashOutputDev::updateLineDash(GfxState *state) { + double *dashPattern; + int dashLength; + double dashStart; + SplashCoord dash[20]; + int i; + + state->getLineDash(&dashPattern, &dashLength, &dashStart); + if (dashLength > 20) { + dashLength = 20; + } + for (i = 0; i < dashLength; ++i) { + dash[i] = (SplashCoord)dashPattern[i]; + if (dash[i] < 0) { + dash[i] = 0; + } + } + splash->setLineDash(dash, dashLength, (SplashCoord)dashStart); +} + +void SplashOutputDev::updateFlatness(GfxState *state) { + splash->setFlatness(state->getFlatness()); +} + +void SplashOutputDev::updateLineJoin(GfxState *state) { + splash->setLineJoin(state->getLineJoin()); +} + +void SplashOutputDev::updateLineCap(GfxState *state) { + splash->setLineCap(state->getLineCap()); +} + +void SplashOutputDev::updateMiterLimit(GfxState *state) { + splash->setMiterLimit(state->getMiterLimit()); +} + +void SplashOutputDev::updateLineWidth(GfxState *state) { + splash->setLineWidth(state->getLineWidth()); +} + +void SplashOutputDev::updateStrokeAdjust(GfxState * /*state*/) { +#if 0 // the SA parameter supposedly defaults to false, but Acrobat + // apparently hardwires it to true + splash->setStrokeAdjust(state->getStrokeAdjust()); +#endif +} + +void SplashOutputDev::updateFillColor(GfxState *state) { + GfxGray gray; + GfxRGB rgb; +#if SPLASH_CMYK + GfxCMYK cmyk; +#endif + + state->getFillGray(&gray); + state->getFillRGB(&rgb); +#if SPLASH_CMYK + state->getFillCMYK(&cmyk); + splash->setFillPattern(getColor(state->getFillColorSpace(), gray, &rgb, &cmyk)); +#else + splash->setFillPattern(getColor(gray, &rgb)); +#endif +} + +void SplashOutputDev::updateStrokeColor(GfxState *state) { + GfxGray gray; + GfxRGB rgb; +#if SPLASH_CMYK + GfxCMYK cmyk; +#endif + + state->getStrokeGray(&gray); + state->getStrokeRGB(&rgb); +#if SPLASH_CMYK + state->getStrokeCMYK(&cmyk); + splash->setStrokePattern(getColor(state->getStrokeColorSpace(), gray, &rgb, &cmyk)); +#else + splash->setStrokePattern(getColor(gray, &rgb)); +#endif +} + +#if SPLASH_CMYK +SplashPattern *SplashOutputDev::getColor(GfxColorSpace *colorSpace, GfxGray gray, GfxRGB *rgb, + GfxCMYK *cmyk) { +#else +SplashPattern *SplashOutputDev::getColor(GfxGray gray, GfxRGB *rgb) { +#endif + SplashPattern *pattern; + SplashColor color; + GfxColorComp r, g, b; + + if (reverseVideo) { + gray = gfxColorComp1 - gray; + r = gfxColorComp1 - rgb->r; + g = gfxColorComp1 - rgb->g; + b = gfxColorComp1 - rgb->b; + } else { + r = rgb->r; + g = rgb->g; + b = rgb->b; + } + + pattern = NULL; // make gcc happy + switch (colorMode) { + case splashModeMono1: + case splashModeMono8: + color[0] = colToByte(gray); + pattern = new SplashSolidColor(color); + break; + case splashModeXBGR8: + color[3] = 255; + case splashModeRGB8: + case splashModeBGR8: + color[0] = colToByte(r); + color[1] = colToByte(g); + color[2] = colToByte(b); + pattern = new SplashSolidColor(color); + break; +#if SPLASH_CMYK + case splashModeCMYK8: + color[0] = colToByte(cmyk->c); + color[1] = colToByte(cmyk->m); + color[2] = colToByte(cmyk->y); + color[3] = colToByte(cmyk->k); + pattern = createOverprintPattern(colorSpace, color, gFalse); + break; +#endif + } + + return pattern; +} + +void SplashOutputDev::updateBlendMode(GfxState *state) { + splash->setBlendFunc(splashOutBlendFuncs[state->getBlendMode()]); +} + +void SplashOutputDev::updateFillOpacity(GfxState *state) { + splash->setFillAlpha((SplashCoord)state->getFillOpacity()); +} + +void SplashOutputDev::updateStrokeOpacity(GfxState *state) { + splash->setStrokeAlpha((SplashCoord)state->getStrokeOpacity()); +} + +void SplashOutputDev::updateFillOverprint(GfxState *state) { + splash->setFillOverprint(state->getFillOverprint()); +} + +void SplashOutputDev::updateStrokeOverprint(GfxState *state) { + splash->setStrokeOverprint(state->getStrokeOverprint()); +} + +void SplashOutputDev::updateOverprintMode(GfxState *state) { + splash->setOverprintMode(state->getOverprintMode()); +} + +void SplashOutputDev::updateFont(GfxState * /*state*/) { + needFontUpdate = gTrue; +} + +void SplashOutputDev::doUpdateFont(GfxState *state) { + GfxFont *gfxFont; + GfxFontType fontType; + SplashOutFontFileID *id; + SplashFontFile *fontFile; + SplashFontSrc *fontsrc = NULL; + FoFiTrueType *ff; + Ref embRef; + Object refObj, strObj; + GooString *fileName; + char *tmpBuf; + int tmpBufLen; + Gushort *codeToGID; + DisplayFontParam *dfp; + double *textMat; + double m11, m12, m21, m22, fontSize; + SplashCoord mat[4]; + int n; + int faceIndex = 0; + GBool recreateFont = gFalse; + GBool doAdjustFontMatrix = gFalse; + + needFontUpdate = gFalse; + font = NULL; + fileName = NULL; + tmpBuf = NULL; + dfp = NULL; + + if (!(gfxFont = state->getFont())) { + goto err1; + } + fontType = gfxFont->getType(); + if (fontType == fontType3) { + goto err1; + } + + // check the font file cache + id = new SplashOutFontFileID(gfxFont->getID()); + if ((fontFile = fontEngine->getFontFile(id))) { + delete id; + + } else { + + // if there is an embedded font, write it to disk + if (gfxFont->getEmbeddedFontID(&embRef)) { + tmpBuf = gfxFont->readEmbFontFile(xref, &tmpBufLen); + if (! tmpBuf) + goto err2; + + // if there is an external font file, use it + } else if (!(fileName = gfxFont->getExtFontFile())) { + + // look for a display font mapping or a substitute font + dfp = NULL; + if (gfxFont->getName()) { + dfp = globalParams->getDisplayFont(gfxFont); + } + if (!dfp) { + error(-1, "Couldn't find a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + switch (dfp->kind) { + case displayFontT1: + fileName = dfp->t1.fileName; + fontType = gfxFont->isCIDFont() ? fontCIDType0 : fontType1; + break; + case displayFontTT: + fileName = dfp->tt.fileName; + fontType = gfxFont->isCIDFont() ? fontCIDType2 : fontTrueType; + faceIndex = dfp->tt.faceIndex; + break; + } + doAdjustFontMatrix = gTrue; + } + + fontsrc = new SplashFontSrc; + if (fileName) + fontsrc->setFile(fileName, gFalse); + else + fontsrc->setBuf(tmpBuf, tmpBufLen, gTrue); + + // load the font file + switch (fontType) { + case fontType1: + if (!(fontFile = fontEngine->loadType1Font( + id, + fontsrc, + ((Gfx8BitFont *)gfxFont)->getEncoding()))) { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + break; + case fontType1C: + if (!(fontFile = fontEngine->loadType1CFont( + id, + fontsrc, + ((Gfx8BitFont *)gfxFont)->getEncoding()))) { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + break; + case fontType1COT: + if (!(fontFile = fontEngine->loadOpenTypeT1CFont( + id, + fontsrc, + ((Gfx8BitFont *)gfxFont)->getEncoding()))) { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + break; + case fontTrueType: + case fontTrueTypeOT: + if (fileName) + ff = FoFiTrueType::load(fileName->getCString()); + else + ff = FoFiTrueType::make(tmpBuf, tmpBufLen); + if (ff) { + codeToGID = ((Gfx8BitFont *)gfxFont)->getCodeToGIDMap(ff); + n = 256; + delete ff; + } else { + codeToGID = NULL; + n = 0; + } + if (!(fontFile = fontEngine->loadTrueTypeFont( + id, + fontsrc, + codeToGID, n))) { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + break; + case fontCIDType0: + case fontCIDType0C: + if (!(fontFile = fontEngine->loadCIDFont( + id, + fontsrc))) { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + break; + case fontCIDType0COT: + if (!(fontFile = fontEngine->loadOpenTypeCFFFont( + id, + fontsrc))) { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + break; + case fontCIDType2: + case fontCIDType2OT: + codeToGID = NULL; + n = 0; + if (((GfxCIDFont *)gfxFont)->getCIDToGID()) { + n = ((GfxCIDFont *)gfxFont)->getCIDToGIDLen(); + if (n) { + codeToGID = (Gushort *)gmallocn(n, sizeof(Gushort)); + memcpy(codeToGID, ((GfxCIDFont *)gfxFont)->getCIDToGID(), + n * sizeof(Gushort)); + } + } else { + if (fileName) + ff = FoFiTrueType::load(fileName->getCString()); + else + ff = FoFiTrueType::make(tmpBuf, tmpBufLen); + if (! ff) + { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + codeToGID = ((GfxCIDFont *)gfxFont)->getCodeToGIDMap(ff, &n); + delete ff; + } + if (!(fontFile = fontEngine->loadTrueTypeFont( + id, + fontsrc, + codeToGID, n, faceIndex))) { + error(-1, "Couldn't create a font for '%s'", + gfxFont->getName() ? gfxFont->getName()->getCString() + : "(unnamed)"); + goto err2; + } + break; + default: + // this shouldn't happen + goto err2; + } + fontFile->doAdjustMatrix = doAdjustFontMatrix; + } + + // get the font matrix + textMat = state->getTextMat(); + fontSize = state->getFontSize(); + m11 = textMat[0] * fontSize * state->getHorizScaling(); + m12 = textMat[1] * fontSize * state->getHorizScaling(); + m21 = textMat[2] * fontSize; + m22 = textMat[3] * fontSize; + + // create the scaled font + mat[0] = m11; mat[1] = m12; + mat[2] = m21; mat[3] = m22; + font = fontEngine->getFont(fontFile, mat, splash->getMatrix()); + + // for substituted fonts: adjust the font matrix -- compare the + // width of 'm' in the original font and the substituted font + if (fontFile->doAdjustMatrix && !gfxFont->isCIDFont()) { + double w1, w2; + CharCode code; + char *name; + for (code = 0; code < 256; ++code) { + if ((name = ((Gfx8BitFont *)gfxFont)->getCharName(code)) && + name[0] == 'm' && name[1] == '\0') { + break; + } + } + if (code < 256) { + w1 = ((Gfx8BitFont *)gfxFont)->getWidth(code); + w2 = font->getGlyphAdvance(code); + if (!gfxFont->isSymbolic() && w2 > 0) { + // if real font is substantially narrower than substituted + // font, reduce the font size accordingly + if (w1 > 0.01 && w1 < 0.9 * w2) { + w1 /= w2; + m11 *= w1; + m21 *= w1; + recreateFont = gTrue; + } + } + } + } + + if (recreateFont) + { + mat[0] = m11; mat[1] = m12; + mat[2] = m21; mat[3] = m22; + font = fontEngine->getFont(fontFile, mat, splash->getMatrix()); + } + + if (fontsrc && !fontsrc->isFile) + fontsrc->unref(); + return; + + err2: + delete id; + err1: + if (fontsrc && !fontsrc->isFile) + fontsrc->unref(); + return; +} + +void SplashOutputDev::stroke(GfxState *state) { + SplashPath *path; + + if (state->getStrokeColorSpace()->isNonMarking()) { + return; + } + path = convertPath(state, state->getPath()); + splash->stroke(path); + delete path; +} + +void SplashOutputDev::fill(GfxState *state) { + SplashPath *path; + + if (state->getFillColorSpace()->isNonMarking()) { + return; + } + path = convertPath(state, state->getPath()); + splash->fill(path, gFalse); + delete path; +} + +void SplashOutputDev::eoFill(GfxState *state) { + SplashPath *path; + + if (state->getFillColorSpace()->isNonMarking()) { + return; + } + path = convertPath(state, state->getPath()); + splash->fill(path, gTrue); + delete path; +} + +void SplashOutputDev::clip(GfxState *state) { + SplashPath *path; + + path = convertPath(state, state->getPath()); + splash->clipToPath(path, gFalse); + delete path; +} + +void SplashOutputDev::eoClip(GfxState *state) { + SplashPath *path; + + path = convertPath(state, state->getPath()); + splash->clipToPath(path, gTrue); + delete path; +} + +void SplashOutputDev::clipToStrokePath(GfxState *state) { + SplashPath *path, *path2; + + path = convertPath(state, state->getPath()); + path2 = splash->makeStrokePath(path); + delete path; + splash->clipToPath(path2, gFalse); + delete path2; +} + +SplashPath *SplashOutputDev::convertPath(GfxState * /*state*/, GfxPath *path) { + SplashPath *sPath; + GfxSubpath *subpath; + int i, j; + + sPath = new SplashPath(); + for (i = 0; i < path->getNumSubpaths(); ++i) { + subpath = path->getSubpath(i); + if (subpath->getNumPoints() > 0) { + sPath->moveTo((SplashCoord)subpath->getX(0), + (SplashCoord)subpath->getY(0)); + j = 1; + while (j < subpath->getNumPoints()) { + if (subpath->getCurve(j)) { + sPath->curveTo((SplashCoord)subpath->getX(j), + (SplashCoord)subpath->getY(j), + (SplashCoord)subpath->getX(j+1), + (SplashCoord)subpath->getY(j+1), + (SplashCoord)subpath->getX(j+2), + (SplashCoord)subpath->getY(j+2)); + j += 3; + } else { + sPath->lineTo((SplashCoord)subpath->getX(j), + (SplashCoord)subpath->getY(j)); + ++j; + } + } + if (subpath->isClosed()) { + sPath->close(); + } + } + } + return sPath; +} + +void SplashOutputDev::drawChar(GfxState *state, double x, double y, + double dx, double dy, + double originX, double originY, + CharCode code, int nBytes, + Unicode *u, int uLen) { + SplashPath *path; + int render; + + // check for invisible text -- this is used by Acrobat Capture + render = state->getRender(); + if (render == 3) { + return; + } + + if (needFontUpdate) { + doUpdateFont(state); + } + if (!font) { + return; + } + + x -= originX; + y -= originY; + + // fill + if (!(render & 1)) { + if (!haveCSPattern && !state->getFillColorSpace()->isNonMarking()) { + splash->fillChar((SplashCoord)x, (SplashCoord)y, code, font); + } + } + + // stroke + if ((render & 3) == 1 || (render & 3) == 2) { + if (!state->getStrokeColorSpace()->isNonMarking()) { + if ((path = font->getGlyphPath(code))) { + path->offset((SplashCoord)x, (SplashCoord)y); + splash->stroke(path); + delete path; + } + } + } + + // clip + if (haveCSPattern || (render & 4)) { + if ((path = font->getGlyphPath(code))) { + path->offset((SplashCoord)x, (SplashCoord)y); + if (textClipPath) { + textClipPath->append(path); + delete path; + } else { + textClipPath = path; + } + } + } +} + +GBool SplashOutputDev::beginType3Char(GfxState *state, double x, double y, + double dx, double dy, + CharCode code, Unicode *u, int uLen) { + GfxFont *gfxFont; + Ref *fontID; + double *ctm, *bbox; + T3FontCache *t3Font; + T3GlyphStack *t3gs; + GBool validBBox; + double x1, y1, xMin, yMin, xMax, yMax, xt, yt; + int i, j; + + if (!(gfxFont = state->getFont())) { + return gFalse; + } + fontID = gfxFont->getID(); + ctm = state->getCTM(); + state->transform(0, 0, &xt, &yt); + + // is it the first (MRU) font in the cache? + if (!(nT3Fonts > 0 && + t3FontCache[0]->matches(fontID, ctm[0], ctm[1], ctm[2], ctm[3]))) { + + // is the font elsewhere in the cache? + for (i = 1; i < nT3Fonts; ++i) { + if (t3FontCache[i]->matches(fontID, ctm[0], ctm[1], ctm[2], ctm[3])) { + t3Font = t3FontCache[i]; + for (j = i; j > 0; --j) { + t3FontCache[j] = t3FontCache[j - 1]; + } + t3FontCache[0] = t3Font; + break; + } + } + if (i >= nT3Fonts) { + + // create new entry in the font cache + if (nT3Fonts == splashOutT3FontCacheSize) { + delete t3FontCache[nT3Fonts - 1]; + --nT3Fonts; + } + for (j = nT3Fonts; j > 0; --j) { + t3FontCache[j] = t3FontCache[j - 1]; + } + ++nT3Fonts; + bbox = gfxFont->getFontBBox(); + if (bbox[0] == 0 && bbox[1] == 0 && bbox[2] == 0 && bbox[3] == 0) { + // unspecified bounding box -- just take a guess + xMin = xt - 5; + xMax = xMin + 30; + yMax = yt + 15; + yMin = yMax - 45; + validBBox = gFalse; + } else { + state->transform(bbox[0], bbox[1], &x1, &y1); + xMin = xMax = x1; + yMin = yMax = y1; + state->transform(bbox[0], bbox[3], &x1, &y1); + if (x1 < xMin) { + xMin = x1; + } else if (x1 > xMax) { + xMax = x1; + } + if (y1 < yMin) { + yMin = y1; + } else if (y1 > yMax) { + yMax = y1; + } + state->transform(bbox[2], bbox[1], &x1, &y1); + if (x1 < xMin) { + xMin = x1; + } else if (x1 > xMax) { + xMax = x1; + } + if (y1 < yMin) { + yMin = y1; + } else if (y1 > yMax) { + yMax = y1; + } + state->transform(bbox[2], bbox[3], &x1, &y1); + if (x1 < xMin) { + xMin = x1; + } else if (x1 > xMax) { + xMax = x1; + } + if (y1 < yMin) { + yMin = y1; + } else if (y1 > yMax) { + yMax = y1; + } + validBBox = gTrue; + } + t3FontCache[0] = new T3FontCache(fontID, ctm[0], ctm[1], ctm[2], ctm[3], + (int)floor(xMin - xt), + (int)floor(yMin - yt), + (int)ceil(xMax) - (int)floor(xMin) + 3, + (int)ceil(yMax) - (int)floor(yMin) + 3, + validBBox, + colorMode != splashModeMono1); + } + } + t3Font = t3FontCache[0]; + + // is the glyph in the cache? + i = (code & (t3Font->cacheSets - 1)) * t3Font->cacheAssoc; + for (j = 0; j < t3Font->cacheAssoc; ++j) { + if (t3Font->cacheTags != NULL) { + if ((t3Font->cacheTags[i+j].mru & 0x8000) && + t3Font->cacheTags[i+j].code == code) { + drawType3Glyph(t3Font, &t3Font->cacheTags[i+j], + t3Font->cacheData + (i+j) * t3Font->glyphSize); + return gTrue; + } + } + } + + // push a new Type 3 glyph record + t3gs = new T3GlyphStack(); + t3gs->next = t3GlyphStack; + t3GlyphStack = t3gs; + t3GlyphStack->code = code; + t3GlyphStack->cache = t3Font; + t3GlyphStack->cacheTag = NULL; + t3GlyphStack->cacheData = NULL; + + return gFalse; +} + +void SplashOutputDev::endType3Char(GfxState *state) { + T3GlyphStack *t3gs; + double *ctm; + + if (t3GlyphStack->cacheTag) { + memcpy(t3GlyphStack->cacheData, bitmap->getDataPtr(), + t3GlyphStack->cache->glyphSize); + delete bitmap; + delete splash; + bitmap = t3GlyphStack->origBitmap; + splash = t3GlyphStack->origSplash; + ctm = state->getCTM(); + state->setCTM(ctm[0], ctm[1], ctm[2], ctm[3], + t3GlyphStack->origCTM4, t3GlyphStack->origCTM5); + updateCTM(state, 0, 0, 0, 0, 0, 0); + drawType3Glyph(t3GlyphStack->cache, + t3GlyphStack->cacheTag, t3GlyphStack->cacheData); + } + t3gs = t3GlyphStack; + t3GlyphStack = t3gs->next; + delete t3gs; +} + +void SplashOutputDev::type3D0(GfxState *state, double wx, double wy) { +} + +void SplashOutputDev::type3D1(GfxState *state, double wx, double wy, + double llx, double lly, double urx, double ury) { + double *ctm; + T3FontCache *t3Font; + SplashColor color; + double xt, yt, xMin, xMax, yMin, yMax, x1, y1; + int i, j; + + if (unlikely(t3GlyphStack == NULL)) { + error(-1, "t3GlyphStack was null in SplashOutputDev::type3D1"); + return; + } + + if (unlikely(t3GlyphStack->origBitmap != NULL)) { + error(-1, "t3GlyphStack origBitmap was not null in SplashOutputDev::type3D1"); + return; + } + + if (unlikely(t3GlyphStack->origSplash != NULL)) { + error(-1, "t3GlyphStack origSplash was not null in SplashOutputDev::type3D1"); + return; + } + + t3Font = t3GlyphStack->cache; + + // check for a valid bbox + state->transform(0, 0, &xt, &yt); + state->transform(llx, lly, &x1, &y1); + xMin = xMax = x1; + yMin = yMax = y1; + state->transform(llx, ury, &x1, &y1); + if (x1 < xMin) { + xMin = x1; + } else if (x1 > xMax) { + xMax = x1; + } + if (y1 < yMin) { + yMin = y1; + } else if (y1 > yMax) { + yMax = y1; + } + state->transform(urx, lly, &x1, &y1); + if (x1 < xMin) { + xMin = x1; + } else if (x1 > xMax) { + xMax = x1; + } + if (y1 < yMin) { + yMin = y1; + } else if (y1 > yMax) { + yMax = y1; + } + state->transform(urx, ury, &x1, &y1); + if (x1 < xMin) { + xMin = x1; + } else if (x1 > xMax) { + xMax = x1; + } + if (y1 < yMin) { + yMin = y1; + } else if (y1 > yMax) { + yMax = y1; + } + if (xMin - xt < t3Font->glyphX || + yMin - yt < t3Font->glyphY || + xMax - xt > t3Font->glyphX + t3Font->glyphW || + yMax - yt > t3Font->glyphY + t3Font->glyphH) { + if (t3Font->validBBox) { + error(-1, "Bad bounding box in Type 3 glyph"); + } + return; + } + + if (t3Font->cacheTags == NULL) + return; + + // allocate a cache entry + i = (t3GlyphStack->code & (t3Font->cacheSets - 1)) * t3Font->cacheAssoc; + for (j = 0; j < t3Font->cacheAssoc; ++j) { + if ((t3Font->cacheTags[i+j].mru & 0x7fff) == t3Font->cacheAssoc - 1) { + t3Font->cacheTags[i+j].mru = 0x8000; + t3Font->cacheTags[i+j].code = t3GlyphStack->code; + t3GlyphStack->cacheTag = &t3Font->cacheTags[i+j]; + t3GlyphStack->cacheData = t3Font->cacheData + (i+j) * t3Font->glyphSize; + } else { + ++t3Font->cacheTags[i+j].mru; + } + } + + // save state + t3GlyphStack->origBitmap = bitmap; + t3GlyphStack->origSplash = splash; + ctm = state->getCTM(); + t3GlyphStack->origCTM4 = ctm[4]; + t3GlyphStack->origCTM5 = ctm[5]; + + // create the temporary bitmap + if (colorMode == splashModeMono1) { + bitmap = new SplashBitmap(t3Font->glyphW, t3Font->glyphH, 1, + splashModeMono1, gFalse); + splash = new Splash(bitmap, gFalse, + t3GlyphStack->origSplash->getScreen()); + color[0] = 0; + splash->clear(color); + color[0] = 1; + } else { + bitmap = new SplashBitmap(t3Font->glyphW, t3Font->glyphH, 1, + splashModeMono8, gFalse); + splash = new Splash(bitmap, vectorAntialias, + t3GlyphStack->origSplash->getScreen()); + color[0] = 0x00; + splash->clear(color); + color[0] = 0xff; + } + splash->setFillPattern(new SplashSolidColor(color)); + splash->setStrokePattern(new SplashSolidColor(color)); + //~ this should copy other state from t3GlyphStack->origSplash? + state->setCTM(ctm[0], ctm[1], ctm[2], ctm[3], + -t3Font->glyphX, -t3Font->glyphY); + updateCTM(state, 0, 0, 0, 0, 0, 0); +} + +void SplashOutputDev::drawType3Glyph(T3FontCache *t3Font, + T3FontCacheTag * /*tag*/, Guchar *data) { + SplashGlyphBitmap glyph; + + glyph.x = -t3Font->glyphX; + glyph.y = -t3Font->glyphY; + glyph.w = t3Font->glyphW; + glyph.h = t3Font->glyphH; + glyph.aa = colorMode != splashModeMono1; + glyph.data = data; + glyph.freeData = gFalse; + splash->fillGlyph(0, 0, &glyph); +} + +void SplashOutputDev::beginTextObject(GfxState *state) { + if (!(state->getRender() & 4) && state->getFillColorSpace()->getMode() == csPattern) { + haveCSPattern = gTrue; + saveState(state); + } +} + +void SplashOutputDev::endTextObject(GfxState *state) { + if (haveCSPattern) { + haveCSPattern = gFalse; + if (state->getFillColorSpace()->getMode() != csPattern) { + if (textClipPath) { + splash->fill(textClipPath, gTrue); + delete textClipPath; + textClipPath = NULL; + } + restoreState(state); + updateFillColor(state); + } + } + if (textClipPath) { + splash->clipToPath(textClipPath, gFalse); + delete textClipPath; + textClipPath = NULL; + } +} + +struct SplashOutImageMaskData { + ImageStream *imgStr; + GBool invert; + int width, height, y; +}; + +GBool SplashOutputDev::imageMaskSrc(void *data, SplashColorPtr line) { + SplashOutImageMaskData *imgMaskData = (SplashOutImageMaskData *)data; + Guchar *p; + SplashColorPtr q; + int x; + + if (imgMaskData->y == imgMaskData->height) { + return gFalse; + } + for (x = 0, p = imgMaskData->imgStr->getLine(), q = line; + x < imgMaskData->width; + ++x) { + *q++ = *p++ ^ imgMaskData->invert; + } + ++imgMaskData->y; + return gTrue; +} + +void SplashOutputDev::endMaskClip(GfxState * state) { + double bbox[4] = {0,0,1,1}; // dummy + /* transfer mask to alpha channel! */ + // memcpy(maskBitmap->getAlphaPtr(), maskBitmap->getDataPtr(), bitmap->getRowSize() * bitmap->getHeight()); + // memset(maskBitmap->getDataPtr(), 0, bitmap->getRowSize() * bitmap->getHeight()); + int c; + Guchar *dest = bitmap->getAlphaPtr(); + Guchar *src = maskBitmap->getDataPtr(); + for (c= 0; c < maskBitmap->getRowSize() * maskBitmap->getHeight(); c++) { + dest[c] = src[c]; + } + delete maskBitmap; + maskBitmap = NULL; + endTransparencyGroup(state); + paintTransparencyGroup(state, bbox); +} + +void SplashOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool interpolate, GBool inlineImg) { + double *ctm; + SplashCoord mat[6]; + SplashOutImageMaskData imgMaskData; + + if (state->getFillColorSpace()->isNonMarking()) { + return; + } + + ctm = state->getCTM(); + for (int i = 0; i < 6; ++i) { + if (!isfinite(ctm[i])) return; + } + mat[0] = ctm[0]; + mat[1] = ctm[1]; + mat[2] = -ctm[2]; + mat[3] = -ctm[3]; + mat[4] = ctm[2] + ctm[4]; + mat[5] = ctm[3] + ctm[5]; + + imgMaskData.imgStr = new ImageStream(str, width, 1, 1); + imgMaskData.imgStr->reset(); + imgMaskData.invert = invert ? 0 : 1; + imgMaskData.width = width; + imgMaskData.height = height; + imgMaskData.y = 0; + + if (state->getFillColorSpace()->getMode() == csPattern) { + Splash *maskSplash; + SplashColor maskColor; + + /* from beginTransparencyGroup: */ + // push a new stack entry + SplashTransparencyGroup *transpGroup = new SplashTransparencyGroup(); + transpGroup->tx = 0; + transpGroup->ty = 0; + transpGroup->blendingColorSpace = NULL; + transpGroup->isolated = gFalse; + transpGroup->next = transpGroupStack; + transpGroupStack = transpGroup; + // save state + transpGroup->origBitmap = bitmap; + transpGroup->origSplash = splash; + //~ this ignores the blendingColorSpace arg + // create the temporary bitmap + bitmap = new SplashBitmap(bitmap->getWidth(), bitmap->getHeight(), bitmapRowPad, colorMode, gTrue, + bitmapTopDown); + splash = new Splash(bitmap, vectorAntialias, + transpGroup->origSplash->getScreen()); + splash->blitTransparent(transpGroup->origBitmap, 0, 0, 0, 0, bitmap->getWidth(), bitmap->getHeight()); + splash->setInNonIsolatedGroup(transpGroup->origBitmap, 0, 0); + transpGroup->tBitmap = bitmap; + + maskBitmap = new SplashBitmap(bitmap->getWidth(), bitmap->getHeight(), 1, splashModeMono8, gFalse); + maskSplash = new Splash(maskBitmap, vectorAntialias); + maskColor[0] = 0; + maskSplash->clear(maskColor); + maskColor[0] = 0xff; + maskSplash->setFillPattern(new SplashSolidColor(maskColor)); + maskSplash->fillImageMask(&imageMaskSrc, &imgMaskData, width, height, mat, t3GlyphStack != NULL); + delete maskSplash; + } else { + splash->fillImageMask(&imageMaskSrc, &imgMaskData, width, height, mat, t3GlyphStack != NULL); + if (inlineImg) { + while (imgMaskData.y < height) { + imgMaskData.imgStr->getLine(); + ++imgMaskData.y; + } + } + } + + delete imgMaskData.imgStr; + str->close(); +} + +struct SplashOutImageData { + ImageStream *imgStr; + GfxImageColorMap *colorMap; + SplashColorPtr lookup; + int *maskColors; + SplashColorMode colorMode; + int width, height, y; +}; + +GBool SplashOutputDev::imageSrc(void *data, SplashColorPtr colorLine, + Guchar * /*alphaLine*/) { + SplashOutImageData *imgData = (SplashOutImageData *)data; + Guchar *p; + SplashColorPtr q, col; + GfxGray gray; +#if SPLASH_CMYK + GfxCMYK cmyk; +#endif + int nComps, x; + + if (imgData->y == imgData->height) { + return gFalse; + } + + nComps = imgData->colorMap->getNumPixelComps(); + + if (imgData->lookup) { + switch (imgData->colorMode) { + case splashModeMono1: + case splashModeMono8: + for (x = 0, p = imgData->imgStr->getLine(), q = colorLine; + x < imgData->width; + ++x, ++p) { + *q++ = imgData->lookup[*p]; + } + break; + case splashModeRGB8: + case splashModeBGR8: + for (x = 0, p = imgData->imgStr->getLine(), q = colorLine; + x < imgData->width; + ++x, ++p) { + col = &imgData->lookup[3 * *p]; + *q++ = col[0]; + *q++ = col[1]; + *q++ = col[2]; + } + break; + case splashModeXBGR8: + for (x = 0, p = imgData->imgStr->getLine(), q = colorLine; + x < imgData->width; + ++x, ++p) { + col = &imgData->lookup[4 * *p]; + *q++ = col[0]; + *q++ = col[1]; + *q++ = col[2]; + *q++ = col[3]; + } + break; +#if SPLASH_CMYK + case splashModeCMYK8: + for (x = 0, p = imgData->imgStr->getLine(), q = colorLine; + x < imgData->width; + ++x, ++p) { + col = &imgData->lookup[4 * *p]; + *q++ = col[0]; + *q++ = col[1]; + *q++ = col[2]; + *q++ = col[3]; + } + break; +#endif + } + } else { + switch (imgData->colorMode) { + case splashModeMono1: + case splashModeMono8: + for (x = 0, p = imgData->imgStr->getLine(), q = colorLine; + x < imgData->width; + ++x, p += nComps) { + imgData->colorMap->getGray(p, &gray); + *q++ = colToByte(gray); + } + break; + case splashModeRGB8: + case splashModeBGR8: + p = imgData->imgStr->getLine(); + q = colorLine; + + imgData->colorMap->getRGBLine(p, colorLine, imgData->width); + break; + case splashModeXBGR8: + p = imgData->imgStr->getLine(); + q = colorLine; + + imgData->colorMap->getRGBXLine(p, colorLine, imgData->width); + break; +#if SPLASH_CMYK + case splashModeCMYK8: + for (x = 0, p = imgData->imgStr->getLine(), q = colorLine; + x < imgData->width; + ++x, p += nComps) { + imgData->colorMap->getCMYK(p, &cmyk); + *q++ = colToByte(cmyk.c); + *q++ = colToByte(cmyk.m); + *q++ = colToByte(cmyk.y); + *q++ = colToByte(cmyk.k); + } + break; +#endif + } + } + + ++imgData->y; + return gTrue; +} + +GBool SplashOutputDev::alphaImageSrc(void *data, SplashColorPtr colorLine, + Guchar *alphaLine) { + SplashOutImageData *imgData = (SplashOutImageData *)data; + Guchar *p, *aq; + SplashColorPtr q, col; + GfxRGB rgb; + GfxGray gray; +#if SPLASH_CMYK + GfxCMYK cmyk; +#endif + Guchar alpha; + int nComps, x, i; + + if (imgData->y == imgData->height) { + return gFalse; + } + + nComps = imgData->colorMap->getNumPixelComps(); + + for (x = 0, p = imgData->imgStr->getLine(), q = colorLine, aq = alphaLine; + x < imgData->width; + ++x, p += nComps) { + alpha = 0; + for (i = 0; i < nComps; ++i) { + if (p[i] < imgData->maskColors[2*i] || + p[i] > imgData->maskColors[2*i+1]) { + alpha = 0xff; + break; + } + } + if (imgData->lookup) { + switch (imgData->colorMode) { + case splashModeMono1: + case splashModeMono8: + *q++ = imgData->lookup[*p]; + *aq++ = alpha; + break; + case splashModeRGB8: + case splashModeBGR8: + col = &imgData->lookup[3 * *p]; + *q++ = col[0]; + *q++ = col[1]; + *q++ = col[2]; + *aq++ = alpha; + break; + case splashModeXBGR8: + col = &imgData->lookup[4 * *p]; + *q++ = col[0]; + *q++ = col[1]; + *q++ = col[2]; + *q++ = 255; + *aq++ = alpha; + break; +#if SPLASH_CMYK + case splashModeCMYK8: + col = &imgData->lookup[4 * *p]; + *q++ = col[0]; + *q++ = col[1]; + *q++ = col[2]; + *q++ = col[3]; + *aq++ = alpha; + break; +#endif + } + } else { + switch (imgData->colorMode) { + case splashModeMono1: + case splashModeMono8: + imgData->colorMap->getGray(p, &gray); + *q++ = colToByte(gray); + *aq++ = alpha; + break; + case splashModeXBGR8: + case splashModeRGB8: + case splashModeBGR8: + imgData->colorMap->getRGB(p, &rgb); + *q++ = colToByte(rgb.r); + *q++ = colToByte(rgb.g); + *q++ = colToByte(rgb.b); + if (imgData->colorMode == splashModeXBGR8) *q++ = 255; + *aq++ = alpha; + break; +#if SPLASH_CMYK + case splashModeCMYK8: + imgData->colorMap->getCMYK(p, &cmyk); + *q++ = colToByte(cmyk.c); + *q++ = colToByte(cmyk.m); + *q++ = colToByte(cmyk.y); + *q++ = colToByte(cmyk.k); + *aq++ = alpha; + break; +#endif + } + } + } + + ++imgData->y; + return gTrue; +} + +struct TilingSplashOutBitmap { + SplashBitmap *bitmap; + SplashPattern *pattern; + SplashColorMode colorMode; + int paintType; + int repeatX; + int repeatY; + int y; +}; + +GBool SplashOutputDev::tilingBitmapSrc(void *data, SplashColorPtr colorLine, + Guchar *alphaLine) { + TilingSplashOutBitmap *imgData = (TilingSplashOutBitmap *)data; + + if (imgData->y == imgData->bitmap->getHeight()) { + imgData->repeatY--; + if (imgData->repeatY == 0) + return gFalse; + imgData->y = 0; + } + + if (imgData->paintType == 1) { + const SplashColorMode cMode = imgData->bitmap->getMode(); + SplashColorPtr q = colorLine; + // For splashModeBGR8 and splashModeXBGR8 we need to use getPixel + // for the others we can use raw access + if (cMode == splashModeBGR8 || cMode == splashModeXBGR8) { + for (int m = 0; m < imgData->repeatX; m++) { + for (int x = 0; x < imgData->bitmap->getWidth(); x++) { + imgData->bitmap->getPixel(x, imgData->y, q); + q += splashColorModeNComps[cMode]; + } + } + } else { + const int n = imgData->bitmap->getRowSize(); + SplashColorPtr p; + for (int m = 0; m < imgData->repeatX; m++) { + p = imgData->bitmap->getDataPtr() + imgData->y * imgData->bitmap->getRowSize(); + for (int x = 0; x < n; ++x) { + *q++ = *p++; + } + } + } + if (alphaLine != NULL) { + SplashColorPtr aq = alphaLine; + SplashColorPtr p; + const int n = imgData->bitmap->getWidth() - 1; + for (int m = 0; m < imgData->repeatX; m++) { + p = imgData->bitmap->getAlphaPtr() + imgData->y * imgData->bitmap->getWidth(); + for (int x = 0; x < n; ++x) { + *aq++ = *p++; + } + // This is a hack, because of how Splash antialias works if we overwrite the + // last alpha pixel of the tile most/all of the files look much better + *aq++ = (n == 0) ? *p : *(p - 1); + } + } + } else { + SplashColor col, pat; + SplashColorPtr dest = colorLine; + for (int m = 0; m < imgData->repeatX; m++) { + for (int x = 0; x < imgData->bitmap->getWidth(); x++) { + imgData->bitmap->getPixel(x, imgData->y, col); + imgData->pattern->getColor(x, imgData->y, pat); + for (int i = 0; i < splashColorModeNComps[imgData->colorMode]; ++i) { +#if SPLASH_CMYK + if (imgData->colorMode == splashModeCMYK8) + dest[i] = div255(pat[i] * (255 - col[0])); + else +#endif + dest[i] = 255 - div255((255 - pat[i]) * (255 - col[0])); + } + dest += splashColorModeNComps[imgData->colorMode]; + } + } + if (alphaLine != NULL) { + const int y = (imgData->y == imgData->bitmap->getHeight() - 1 && imgData->y > 50) ? imgData->y - 1 : imgData->y; + SplashColorPtr aq = alphaLine; + SplashColorPtr p; + const int n = imgData->bitmap->getWidth(); + for (int m = 0; m < imgData->repeatX; m++) { + p = imgData->bitmap->getAlphaPtr() + y * imgData->bitmap->getWidth(); + for (int x = 0; x < n; ++x) { + *aq++ = *p++; + } + } + } + } + ++imgData->y; + return gTrue; +} + +void SplashOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + int *maskColors, GBool inlineImg) { + double *ctm; + SplashCoord mat[6]; + SplashOutImageData imgData; + SplashColorMode srcMode; + SplashColor defaultColor; + GfxColor srcColor; + SplashImageSource src; + GfxGray gray; + GfxRGB rgb; +#if SPLASH_CMYK + GfxCMYK cmyk; +#endif + GBool grayIndexed = gFalse; + Guchar pix; + int n, i; + + ctm = state->getCTM(); + for (i = 0; i < 6; ++i) { + if (!isfinite(ctm[i])) return; + } + mat[0] = ctm[0]; + mat[1] = ctm[1]; + mat[2] = -ctm[2]; + mat[3] = -ctm[3]; + mat[4] = ctm[2] + ctm[4]; + mat[5] = ctm[3] + ctm[5]; + + imgData.imgStr = new ImageStream(str, width, + colorMap->getNumPixelComps(), + colorMap->getBits()); + imgData.imgStr->reset(); + imgData.colorMap = colorMap; + imgData.maskColors = maskColors; + imgData.colorMode = colorMode; + imgData.width = width; + imgData.height = height; + imgData.y = 0; + + // special case for one-channel (monochrome/gray/separation) images: + // build a lookup table here + imgData.lookup = NULL; + if (colorMap->getNumPixelComps() == 1) { + n = 1 << colorMap->getBits(); + switch (colorMode) { + case splashModeMono1: + case splashModeMono8: + imgData.lookup = (SplashColorPtr)gmalloc(n); + for (i = 0; i < n; ++i) { + pix = (Guchar)i; + colorMap->getGray(&pix, &gray); + imgData.lookup[i] = colToByte(gray); + } + break; + case splashModeRGB8: + case splashModeBGR8: + imgData.lookup = (SplashColorPtr)gmallocn(n, 3); + for (i = 0; i < n; ++i) { + pix = (Guchar)i; + colorMap->getRGB(&pix, &rgb); + imgData.lookup[3*i] = colToByte(rgb.r); + imgData.lookup[3*i+1] = colToByte(rgb.g); + imgData.lookup[3*i+2] = colToByte(rgb.b); + } + break; + case splashModeXBGR8: + imgData.lookup = (SplashColorPtr)gmallocn(n, 4); + for (i = 0; i < n; ++i) { + pix = (Guchar)i; + colorMap->getRGB(&pix, &rgb); + imgData.lookup[4*i] = colToByte(rgb.r); + imgData.lookup[4*i+1] = colToByte(rgb.g); + imgData.lookup[4*i+2] = colToByte(rgb.b); + imgData.lookup[4*i+3] = 255; + } + break; +#if SPLASH_CMYK + case splashModeCMYK8: + grayIndexed = colorMap->getColorSpace()->getMode() != csDeviceGray; + imgData.lookup = (SplashColorPtr)gmallocn(n, 4); + for (i = 0; i < n; ++i) { + pix = (Guchar)i; + colorMap->getCMYK(&pix, &cmyk); + if (cmyk.c != 0 || cmyk.m != 0 || cmyk.y != 0) { + grayIndexed = gFalse; + } + imgData.lookup[4*i] = colToByte(cmyk.c); + imgData.lookup[4*i+1] = colToByte(cmyk.m); + imgData.lookup[4*i+2] = colToByte(cmyk.y); + imgData.lookup[4*i+3] = colToByte(cmyk.k); + } +#ifndef USE_CMS + if (colorMap->getColorSpace()->getMode() == csIndexed) { + if (((GfxIndexedColorSpace *) colorMap->getColorSpace())->getBase()->getMode() == csICCBased) + grayIndexed = gFalse; + } +#endif + break; +#endif + break; + } + } + + if (colorMode == splashModeMono1) { + srcMode = splashModeMono8; + } else { + srcMode = colorMode; + } + src = maskColors ? &alphaImageSrc : &imageSrc; + colorMap->getColorSpace()->getDefaultColor(&srcColor); + convertGfxColor(defaultColor, srcMode, colorMap->getColorSpace(), &srcColor); + SplashPattern *pattern = createOverprintPattern(colorMap->getColorSpace(), defaultColor, !grayIndexed); + splash->drawImage(src, &imgData, srcMode, maskColors ? gTrue : gFalse, + width, height, mat, pattern); + delete pattern; + if (inlineImg) { + while (imgData.y < height) { + imgData.imgStr->getLine(); + ++imgData.y; + } + } + + gfree(imgData.lookup); + delete imgData.imgStr; + str->close(); +} + +struct SplashOutMaskedImageData { + ImageStream *imgStr; + GfxImageColorMap *colorMap; + SplashBitmap *mask; + SplashColorPtr lookup; + SplashColorMode colorMode; + int width, height, y; +}; + +GBool SplashOutputDev::maskedImageSrc(void *data, SplashColorPtr colorLine, + Guchar *alphaLine) { + SplashOutMaskedImageData *imgData = (SplashOutMaskedImageData *)data; + Guchar *p, *aq; + SplashColor maskColor; + SplashColorPtr q, col; + GfxRGB rgb; + GfxGray gray; +#if SPLASH_CMYK + GfxCMYK cmyk; +#endif + Guchar alpha; + int nComps, x; + + if (imgData->y == imgData->height) { + return gFalse; + } + + nComps = imgData->colorMap->getNumPixelComps(); + + for (x = 0, p = imgData->imgStr->getLine(), q = colorLine, aq = alphaLine; + x < imgData->width; + ++x, p += nComps) { + imgData->mask->getPixel(x, imgData->y, maskColor); + alpha = maskColor[0] ? 0xff : 0x00; + if (imgData->lookup) { + switch (imgData->colorMode) { + case splashModeMono1: + case splashModeMono8: + *q++ = imgData->lookup[*p]; + *aq++ = alpha; + break; + case splashModeRGB8: + case splashModeBGR8: + col = &imgData->lookup[3 * *p]; + *q++ = col[0]; + *q++ = col[1]; + *q++ = col[2]; + *aq++ = alpha; + break; + case splashModeXBGR8: + col = &imgData->lookup[4 * *p]; + *q++ = col[0]; + *q++ = col[1]; + *q++ = col[2]; + *q++ = 255; + *aq++ = alpha; + break; +#if SPLASH_CMYK + case splashModeCMYK8: + col = &imgData->lookup[4 * *p]; + *q++ = col[0]; + *q++ = col[1]; + *q++ = col[2]; + *q++ = col[3]; + *aq++ = alpha; + break; +#endif + } + } else { + switch (imgData->colorMode) { + case splashModeMono1: + case splashModeMono8: + imgData->colorMap->getGray(p, &gray); + *q++ = colToByte(gray); + *aq++ = alpha; + break; + case splashModeXBGR8: + case splashModeRGB8: + case splashModeBGR8: + imgData->colorMap->getRGB(p, &rgb); + *q++ = colToByte(rgb.r); + *q++ = colToByte(rgb.g); + *q++ = colToByte(rgb.b); + if (imgData->colorMode == splashModeXBGR8) *q++ = 255; + *aq++ = alpha; + break; +#if SPLASH_CMYK + case splashModeCMYK8: + imgData->colorMap->getCMYK(p, &cmyk); + *q++ = colToByte(cmyk.c); + *q++ = colToByte(cmyk.m); + *q++ = colToByte(cmyk.y); + *q++ = colToByte(cmyk.k); + *aq++ = alpha; + break; +#endif + } + } + } + + ++imgData->y; + return gTrue; +} + +void SplashOutputDev::drawMaskedImage(GfxState *state, Object *ref, + Stream *str, int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, int maskWidth, + int maskHeight, GBool maskInvert, + GBool maskInterpolate) { + GfxImageColorMap *maskColorMap; + Object maskDecode, decodeLow, decodeHigh; + double *ctm; + SplashCoord mat[6]; + SplashOutMaskedImageData imgData; + SplashOutImageMaskData imgMaskData; + SplashColorMode srcMode; + SplashBitmap *maskBitmap; + Splash *maskSplash; + SplashColor maskColor; + GfxGray gray; + GfxRGB rgb; +#if SPLASH_CMYK + GfxCMYK cmyk; +#endif + Guchar pix; + int n, i; + + // If the mask is higher resolution than the image, use + // drawSoftMaskedImage() instead. + if (maskWidth > width || maskHeight > height) { + decodeLow.initInt(maskInvert ? 0 : 1); + decodeHigh.initInt(maskInvert ? 1 : 0); + maskDecode.initArray(xref); + maskDecode.arrayAdd(&decodeLow); + maskDecode.arrayAdd(&decodeHigh); + maskColorMap = new GfxImageColorMap(1, &maskDecode, + new GfxDeviceGrayColorSpace()); + maskDecode.free(); + drawSoftMaskedImage(state, ref, str, width, height, colorMap, interpolate, + maskStr, maskWidth, maskHeight, maskColorMap, maskInterpolate); + delete maskColorMap; + + } else { + SplashColor defaultColor; + GfxColor srcColor; + + //----- scale the mask image to the same size as the source image + + mat[0] = (SplashCoord)width; + mat[1] = 0; + mat[2] = 0; + mat[3] = (SplashCoord)height; + mat[4] = 0; + mat[5] = 0; + imgMaskData.imgStr = new ImageStream(maskStr, maskWidth, 1, 1); + imgMaskData.imgStr->reset(); + imgMaskData.invert = maskInvert ? 0 : 1; + imgMaskData.width = maskWidth; + imgMaskData.height = maskHeight; + imgMaskData.y = 0; + maskBitmap = new SplashBitmap(width, height, 1, splashModeMono1, gFalse); + maskSplash = new Splash(maskBitmap, gFalse); + maskColor[0] = 0; + maskSplash->clear(maskColor); + maskColor[0] = 0xff; + maskSplash->setFillPattern(new SplashSolidColor(maskColor)); + maskSplash->fillImageMask(&imageMaskSrc, &imgMaskData, + maskWidth, maskHeight, mat, gFalse); + delete imgMaskData.imgStr; + maskStr->close(); + delete maskSplash; + + //----- draw the source image + + ctm = state->getCTM(); + for (i = 0; i < 6; ++i) { + if (!isfinite(ctm[i])) { + delete maskBitmap; + return; + } + } + mat[0] = ctm[0]; + mat[1] = ctm[1]; + mat[2] = -ctm[2]; + mat[3] = -ctm[3]; + mat[4] = ctm[2] + ctm[4]; + mat[5] = ctm[3] + ctm[5]; + + imgData.imgStr = new ImageStream(str, width, + colorMap->getNumPixelComps(), + colorMap->getBits()); + imgData.imgStr->reset(); + imgData.colorMap = colorMap; + imgData.mask = maskBitmap; + imgData.colorMode = colorMode; + imgData.width = width; + imgData.height = height; + imgData.y = 0; + + // special case for one-channel (monochrome/gray/separation) images: + // build a lookup table here + imgData.lookup = NULL; + if (colorMap->getNumPixelComps() == 1) { + n = 1 << colorMap->getBits(); + switch (colorMode) { + case splashModeMono1: + case splashModeMono8: + imgData.lookup = (SplashColorPtr)gmalloc(n); + for (i = 0; i < n; ++i) { + pix = (Guchar)i; + colorMap->getGray(&pix, &gray); + imgData.lookup[i] = colToByte(gray); + } + break; + case splashModeRGB8: + case splashModeBGR8: + imgData.lookup = (SplashColorPtr)gmallocn(n, 3); + for (i = 0; i < n; ++i) { + pix = (Guchar)i; + colorMap->getRGB(&pix, &rgb); + imgData.lookup[3*i] = colToByte(rgb.r); + imgData.lookup[3*i+1] = colToByte(rgb.g); + imgData.lookup[3*i+2] = colToByte(rgb.b); + } + break; + case splashModeXBGR8: + imgData.lookup = (SplashColorPtr)gmallocn(n, 4); + for (i = 0; i < n; ++i) { + pix = (Guchar)i; + colorMap->getRGB(&pix, &rgb); + imgData.lookup[4*i] = colToByte(rgb.r); + imgData.lookup[4*i+1] = colToByte(rgb.g); + imgData.lookup[4*i+2] = colToByte(rgb.b); + imgData.lookup[4*i+3] = 255; + } + break; +#if SPLASH_CMYK + case splashModeCMYK8: + imgData.lookup = (SplashColorPtr)gmallocn(n, 4); + for (i = 0; i < n; ++i) { + pix = (Guchar)i; + colorMap->getCMYK(&pix, &cmyk); + imgData.lookup[4*i] = colToByte(cmyk.c); + imgData.lookup[4*i+1] = colToByte(cmyk.m); + imgData.lookup[4*i+2] = colToByte(cmyk.y); + imgData.lookup[4*i+3] = colToByte(cmyk.k); + } + break; +#endif + } + } + + if (colorMode == splashModeMono1) { + srcMode = splashModeMono8; + } else { + srcMode = colorMode; + } + colorMap->getColorSpace()->getDefaultColor(&srcColor); + convertGfxColor(defaultColor, srcMode, colorMap->getColorSpace(), &srcColor); + SplashPattern *pattern = createOverprintPattern(colorMap->getColorSpace(), defaultColor, gTrue); + splash->drawImage(&maskedImageSrc, &imgData, srcMode, gTrue, + width, height, mat, pattern); + delete pattern; + delete maskBitmap; + gfree(imgData.lookup); + delete imgData.imgStr; + str->close(); + } +} + +void SplashOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, + Stream *str, int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, + int maskWidth, int maskHeight, + GfxImageColorMap *maskColorMap, + GBool maskInterpolate) { + double *ctm; + SplashCoord mat[6]; + SplashOutImageData imgData; + SplashOutImageData imgMaskData; + SplashColorMode srcMode; + SplashBitmap *maskBitmap; + Splash *maskSplash; + SplashColor maskColor; + SplashColor defaultColor; + GfxColor srcColor; + GfxGray gray; + GfxRGB rgb; +#if SPLASH_CMYK + GfxCMYK cmyk; +#endif + Guchar pix; + int n, i; + + ctm = state->getCTM(); + for (i = 0; i < 6; ++i) { + if (!isfinite(ctm[i])) return; + } + mat[0] = ctm[0]; + mat[1] = ctm[1]; + mat[2] = -ctm[2]; + mat[3] = -ctm[3]; + mat[4] = ctm[2] + ctm[4]; + mat[5] = ctm[3] + ctm[5]; + + //----- set up the soft mask + + imgMaskData.imgStr = new ImageStream(maskStr, maskWidth, + maskColorMap->getNumPixelComps(), + maskColorMap->getBits()); + imgMaskData.imgStr->reset(); + imgMaskData.colorMap = maskColorMap; + imgMaskData.maskColors = NULL; + imgMaskData.colorMode = splashModeMono8; + imgMaskData.width = maskWidth; + imgMaskData.height = maskHeight; + imgMaskData.y = 0; + n = 1 << maskColorMap->getBits(); + imgMaskData.lookup = (SplashColorPtr)gmalloc(n); + for (i = 0; i < n; ++i) { + pix = (Guchar)i; + maskColorMap->getGray(&pix, &gray); + imgMaskData.lookup[i] = colToByte(gray); + } + maskBitmap = new SplashBitmap(bitmap->getWidth(), bitmap->getHeight(), + 1, splashModeMono8, gFalse); + maskSplash = new Splash(maskBitmap, vectorAntialias); + maskColor[0] = 0; + maskSplash->clear(maskColor); + maskSplash->drawImage(&imageSrc, &imgMaskData, splashModeMono8, gFalse, + maskWidth, maskHeight, mat); + delete imgMaskData.imgStr; + maskStr->close(); + gfree(imgMaskData.lookup); + delete maskSplash; + splash->setSoftMask(maskBitmap); + + //----- draw the source image + + imgData.imgStr = new ImageStream(str, width, + colorMap->getNumPixelComps(), + colorMap->getBits()); + imgData.imgStr->reset(); + imgData.colorMap = colorMap; + imgData.maskColors = NULL; + imgData.colorMode = colorMode; + imgData.width = width; + imgData.height = height; + imgData.y = 0; + + // special case for one-channel (monochrome/gray/separation) images: + // build a lookup table here + imgData.lookup = NULL; + if (colorMap->getNumPixelComps() == 1) { + n = 1 << colorMap->getBits(); + switch (colorMode) { + case splashModeMono1: + case splashModeMono8: + imgData.lookup = (SplashColorPtr)gmalloc(n); + for (i = 0; i < n; ++i) { + pix = (Guchar)i; + colorMap->getGray(&pix, &gray); + imgData.lookup[i] = colToByte(gray); + } + break; + case splashModeRGB8: + case splashModeBGR8: + imgData.lookup = (SplashColorPtr)gmallocn(n, 3); + for (i = 0; i < n; ++i) { + pix = (Guchar)i; + colorMap->getRGB(&pix, &rgb); + imgData.lookup[3*i] = colToByte(rgb.r); + imgData.lookup[3*i+1] = colToByte(rgb.g); + imgData.lookup[3*i+2] = colToByte(rgb.b); + } + break; + case splashModeXBGR8: + imgData.lookup = (SplashColorPtr)gmallocn(n, 4); + for (i = 0; i < n; ++i) { + pix = (Guchar)i; + colorMap->getRGB(&pix, &rgb); + imgData.lookup[4*i] = colToByte(rgb.r); + imgData.lookup[4*i+1] = colToByte(rgb.g); + imgData.lookup[4*i+2] = colToByte(rgb.b); + imgData.lookup[4*i+3] = 255; + } + break; +#if SPLASH_CMYK + case splashModeCMYK8: + imgData.lookup = (SplashColorPtr)gmallocn(n, 4); + for (i = 0; i < n; ++i) { + pix = (Guchar)i; + colorMap->getCMYK(&pix, &cmyk); + imgData.lookup[4*i] = colToByte(cmyk.c); + imgData.lookup[4*i+1] = colToByte(cmyk.m); + imgData.lookup[4*i+2] = colToByte(cmyk.y); + imgData.lookup[4*i+3] = colToByte(cmyk.k); + } + break; +#endif + } + } + + if (colorMode == splashModeMono1) { + srcMode = splashModeMono8; + } else { + srcMode = colorMode; + } + + colorMap->getColorSpace()->getDefaultColor(&srcColor); + convertGfxColor(defaultColor, srcMode, colorMap->getColorSpace(), &srcColor); + SplashPattern *pattern = createOverprintPattern(colorMap->getColorSpace(), defaultColor, gTrue); + splash->drawImage(&imageSrc, &imgData, srcMode, gFalse, width, height, mat, pattern); + delete pattern; + splash->setSoftMask(NULL); + gfree(imgData.lookup); + delete imgData.imgStr; + str->close(); +} + +void SplashOutputDev::beginTransparencyGroup(GfxState *state, double *bbox, + GfxColorSpace *blendingColorSpace, + GBool isolated, GBool /*knockout*/, + GBool /*forSoftMask*/) { + SplashTransparencyGroup *transpGroup; + SplashColor color; + double xMin, yMin, xMax, yMax, x, y; + int tx, ty, w, h; + + // transform the bbox + state->transform(bbox[0], bbox[1], &x, &y); + xMin = xMax = x; + yMin = yMax = y; + state->transform(bbox[0], bbox[3], &x, &y); + if (x < xMin) { + xMin = x; + } else if (x > xMax) { + xMax = x; + } + if (y < yMin) { + yMin = y; + } else if (y > yMax) { + yMax = y; + } + state->transform(bbox[2], bbox[1], &x, &y); + if (x < xMin) { + xMin = x; + } else if (x > xMax) { + xMax = x; + } + if (y < yMin) { + yMin = y; + } else if (y > yMax) { + yMax = y; + } + state->transform(bbox[2], bbox[3], &x, &y); + if (x < xMin) { + xMin = x; + } else if (x > xMax) { + xMax = x; + } + if (y < yMin) { + yMin = y; + } else if (y > yMax) { + yMax = y; + } + tx = (int)floor(xMin); + if (tx < 0) { + tx = 0; + } else if (tx >= bitmap->getWidth()) { + tx = bitmap->getWidth() - 1; + } + ty = (int)floor(yMin); + if (ty < 0) { + ty = 0; + } else if (ty >= bitmap->getHeight()) { + ty = bitmap->getHeight() - 1; + } + w = (int)ceil(xMax) - tx + 1; + if (tx + w > bitmap->getWidth()) { + w = bitmap->getWidth() - tx; + } + if (w < 1) { + w = 1; + } + h = (int)ceil(yMax) - ty + 1; + if (ty + h > bitmap->getHeight()) { + h = bitmap->getHeight() - ty; + } + if (h < 1) { + h = 1; + } + + // push a new stack entry + transpGroup = new SplashTransparencyGroup(); + transpGroup->tx = tx; + transpGroup->ty = ty; + transpGroup->blendingColorSpace = blendingColorSpace; + transpGroup->isolated = isolated; + transpGroup->next = transpGroupStack; + transpGroupStack = transpGroup; + + // save state + transpGroup->origBitmap = bitmap; + transpGroup->origSplash = splash; + + //~ this ignores the blendingColorSpace arg + + // create the temporary bitmap + bitmap = new SplashBitmap(w, h, bitmapRowPad, colorMode, gTrue, + bitmapTopDown); + splash = new Splash(bitmap, vectorAntialias, + transpGroup->origSplash->getScreen()); + if (isolated) { + switch (colorMode) { + case splashModeMono1: + case splashModeMono8: + color[0] = 0; + break; + case splashModeXBGR8: + color[3] = 255; + case splashModeRGB8: + case splashModeBGR8: + color[0] = color[1] = color[2] = 0; + break; +#if SPLASH_CMYK + case splashModeCMYK8: + color[0] = color[1] = color[2] = color[3] = 0; + break; +#endif + default: + // make gcc happy + break; + } + splash->clear(color, 0); + } else { + splash->blitTransparent(transpGroup->origBitmap, tx, ty, 0, 0, w, h); + splash->setInNonIsolatedGroup(transpGroup->origBitmap, tx, ty); + } + transpGroup->tBitmap = bitmap; + state->shiftCTM(-tx, -ty); + updateCTM(state, 0, 0, 0, 0, 0, 0); +} + +void SplashOutputDev::endTransparencyGroup(GfxState *state) { + // restore state + delete splash; + bitmap = transpGroupStack->origBitmap; + splash = transpGroupStack->origSplash; + state->shiftCTM(transpGroupStack->tx, transpGroupStack->ty); + updateCTM(state, 0, 0, 0, 0, 0, 0); +} + +void SplashOutputDev::paintTransparencyGroup(GfxState * /*state*/, double * /*bbox*/) { + SplashBitmap *tBitmap; + SplashTransparencyGroup *transpGroup; + GBool isolated; + int tx, ty; + + tx = transpGroupStack->tx; + ty = transpGroupStack->ty; + tBitmap = transpGroupStack->tBitmap; + isolated = transpGroupStack->isolated; + + // paint the transparency group onto the parent bitmap + // - the clip path was set in the parent's state) + splash->composite(tBitmap, 0, 0, tx, ty, + tBitmap->getWidth(), tBitmap->getHeight(), + gFalse, !isolated); + + // pop the stack + transpGroup = transpGroupStack; + transpGroupStack = transpGroup->next; + delete transpGroup; + + delete tBitmap; +} + +void SplashOutputDev::setSoftMask(GfxState * /*state*/, double * /*bbox*/, + GBool alpha, Function *transferFunc, + GfxColor *backdropColor) { + SplashBitmap *softMask, *tBitmap; + Splash *tSplash; + SplashTransparencyGroup *transpGroup; + SplashColor color; + SplashColorPtr p; + GfxGray gray; + GfxRGB rgb; +#if SPLASH_CMYK + GfxCMYK cmyk; +#endif + double lum, lum2; + int tx, ty, x, y; + + tx = transpGroupStack->tx; + ty = transpGroupStack->ty; + tBitmap = transpGroupStack->tBitmap; + + // composite with backdrop color + if (!alpha && colorMode != splashModeMono1) { + //~ need to correctly handle the case where no blending color + //~ space is given + if (transpGroupStack->blendingColorSpace) { + tSplash = new Splash(tBitmap, vectorAntialias, + transpGroupStack->origSplash->getScreen()); + switch (colorMode) { + case splashModeMono1: + // transparency is not supported in mono1 mode + break; + case splashModeMono8: + transpGroupStack->blendingColorSpace->getGray(backdropColor, &gray); + color[0] = colToByte(gray); + tSplash->compositeBackground(color); + break; + case splashModeXBGR8: + color[3] = 255; + case splashModeRGB8: + case splashModeBGR8: + transpGroupStack->blendingColorSpace->getRGB(backdropColor, &rgb); + color[0] = colToByte(rgb.r); + color[1] = colToByte(rgb.g); + color[2] = colToByte(rgb.b); + tSplash->compositeBackground(color); + break; +#if SPLASH_CMYK + case splashModeCMYK8: + transpGroupStack->blendingColorSpace->getCMYK(backdropColor, &cmyk); + color[0] = colToByte(cmyk.c); + color[1] = colToByte(cmyk.m); + color[2] = colToByte(cmyk.y); + color[3] = colToByte(cmyk.k); + tSplash->compositeBackground(color); + break; +#endif + } + delete tSplash; + } + } + + softMask = new SplashBitmap(bitmap->getWidth(), bitmap->getHeight(), + 1, splashModeMono8, gFalse); + unsigned char fill = 0; + if (transpGroupStack->blendingColorSpace) { + transpGroupStack->blendingColorSpace->getGray(backdropColor, &gray); + fill = colToByte(gray); + } + memset(softMask->getDataPtr(), fill, + softMask->getRowSize() * softMask->getHeight()); + p = softMask->getDataPtr() + ty * softMask->getRowSize() + tx; + int xMax = tBitmap->getWidth(); + int yMax = tBitmap->getHeight(); + if (xMax + tx > bitmap->getWidth()) xMax = bitmap->getWidth() - tx; + if (yMax + ty > bitmap->getHeight()) yMax = bitmap->getHeight() - ty; + for (y = 0; y < yMax; ++y) { + for (x = 0; x < xMax; ++x) { + if (alpha) { + p[x] = tBitmap->getAlpha(x, y); + } else { + tBitmap->getPixel(x, y, color); + // convert to luminosity + switch (colorMode) { + case splashModeMono1: + case splashModeMono8: + lum = color[0] / 255.0; + break; + case splashModeXBGR8: + case splashModeRGB8: + case splashModeBGR8: + lum = (0.3 / 255.0) * color[0] + + (0.59 / 255.0) * color[1] + + (0.11 / 255.0) * color[2]; + break; +#if SPLASH_CMYK + case splashModeCMYK8: + lum = (1 - color[3] / 255.0) + - (0.3 / 255.0) * color[0] + - (0.59 / 255.0) * color[1] + - (0.11 / 255.0) * color[2]; + if (lum < 0) { + lum = 0; + } + break; +#endif + } + if (transferFunc) { + transferFunc->transform(&lum, &lum2); + } else { + lum2 = lum; + } + p[x] = (int)(lum2 * 255.0 + 0.5); + } + } + p += softMask->getRowSize(); + } + splash->setSoftMask(softMask); + + // pop the stack + transpGroup = transpGroupStack; + transpGroupStack = transpGroup->next; + delete transpGroup; + + delete tBitmap; +} + +void SplashOutputDev::clearSoftMask(GfxState * /*state*/) { + splash->setSoftMask(NULL); +} + +void SplashOutputDev::setPaperColor(SplashColorPtr paperColorA) { + splashColorCopy(paperColor, paperColorA); +} + +int SplashOutputDev::getBitmapWidth() { + return bitmap->getWidth(); +} + +int SplashOutputDev::getBitmapHeight() { + return bitmap->getHeight(); +} + +SplashBitmap *SplashOutputDev::takeBitmap() { + SplashBitmap *ret; + + ret = bitmap; + bitmap = new SplashBitmap(1, 1, bitmapRowPad, colorMode, + colorMode != splashModeMono1, bitmapTopDown); + return ret; +} + +void SplashOutputDev::getModRegion(int *xMin, int *yMin, + int *xMax, int *yMax) { + splash->getModRegion(xMin, yMin, xMax, yMax); +} + +void SplashOutputDev::clearModRegion() { + splash->clearModRegion(); +} + +#if 1 //~tmp: turn off anti-aliasing temporarily +GBool SplashOutputDev::getVectorAntialias() { + return splash->getVectorAntialias(); +} + +void SplashOutputDev::setVectorAntialias(GBool vaa) { + vectorAntialias = vaa; + splash->setVectorAntialias(vaa); +} +#endif + +void SplashOutputDev::setFreeTypeHinting(GBool enable, GBool enableSlightHintingA) +{ + enableFreeTypeHinting = enable; + enableSlightHinting = enableSlightHintingA; +} + +GBool SplashOutputDev::tilingPatternFill(GfxState *state, Catalog *catalog, Object *str, + double *ptm, int paintType, int /*tilingType*/, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep) +{ + PDFRectangle box; + Gfx *gfx; + Splash *formerSplash = splash; + SplashBitmap *formerBitmap = bitmap; + double width, height; + int surface_width, surface_height, result_width, result_height, i; + int repeatX, repeatY; + SplashCoord matc[6]; + Matrix m1; + double *ctm, savedCTM[6]; + double kx, ky, sx, sy; + + width = bbox[2] - bbox[0]; + height = bbox[3] - bbox[1]; + + if (xStep != width || yStep != height) + return gFalse; + + // calculate offsets + ctm = state->getCTM(); + for (i = 0; i < 6; ++i) { + savedCTM[i] = ctm[i]; + } + state->concatCTM(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]); + state->concatCTM(1, 0, 0, 1, bbox[0], bbox[1]); + ctm = state->getCTM(); + for (i = 0; i < 6; ++i) { + if (!isfinite(ctm[i])) + return gFalse; + } + matc[4] = x0 * xStep * ctm[0] + y0 * yStep * ctm[2] + ctm[4]; + matc[5] = x0 * xStep * ctm[1] + y0 * yStep * ctm[3] + ctm[5]; + if (splashAbs(ctm[1]) > splashAbs(ctm[0])) { + kx = -ctm[1]; + ky = ctm[2] - (ctm[0] * ctm[3]) / ctm[1]; + } else { + kx = ctm[0]; + ky = ctm[3] - (ctm[1] * ctm[2]) / ctm[0]; + } + result_width = (int) ceil(fabs(kx * width * (x1 - x0))); + result_height = (int) ceil(fabs(ky * height * (y1 - y0))); + kx = state->getHDPI() / 72.0; + ky = state->getVDPI() / 72.0; + m1.m[0] = (ptm[0] == 0) ? fabs(ptm[2]) * kx : fabs(ptm[0]) * kx; + m1.m[1] = 0; + m1.m[2] = 0; + m1.m[3] = (ptm[3] == 0) ? fabs(ptm[1]) * ky : fabs(ptm[3]) * ky; + m1.m[4] = 0; + m1.m[5] = 0; + m1.transform(width, height, &kx, &ky); + surface_width = (int) ceil (fabs(kx)); + surface_height = (int) ceil (fabs(ky)); + + sx = (double) result_width / (surface_width * (x1 - x0)); + sy = (double) result_height / (surface_height * (y1 - y0)); + m1.m[0] *= sx; + m1.m[3] *= sy; + m1.transform(width, height, &kx, &ky); + + if(fabs(kx) < 1 && fabs(ky) < 1) { + kx = std::min<double>(kx, ky); + ky = 2 / kx; + m1.m[0] *= ky; + m1.m[3] *= ky; + m1.transform(width, height, &kx, &ky); + surface_width = (int) ceil (fabs(kx)); + surface_height = (int) ceil (fabs(ky)); + repeatX = x1 - x0; + repeatY = y1 - y0; + } else { + while(fabs(kx) > 16384 || fabs(ky) > 16384) { + // limit pattern bitmap size + m1.m[0] /= 2; + m1.m[3] /= 2; + m1.transform(width, height, &kx, &ky); + } + surface_width = (int) ceil (fabs(kx)); + surface_height = (int) ceil (fabs(ky)); + // adjust repeat values to completely fill region + repeatX = result_width / surface_width; + repeatY = result_height / surface_height; + if (surface_width * repeatX < result_width) + repeatX++; + if (surface_height * repeatY < result_height) + repeatY++; + if (x1 - x0 > repeatX) + repeatX = x1 - x0; + if (y1 - y0 > repeatY) + repeatY = y1 - y0; + } + // restore CTM and calculate rotate and scale with rounded matric + state->setCTM(savedCTM[0], savedCTM[1], savedCTM[2], savedCTM[3], savedCTM[4], savedCTM[5]); + state->concatCTM(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]); + state->concatCTM(width * repeatX, 0, 0, height * repeatY, bbox[0], bbox[1]); + ctm = state->getCTM(); + matc[0] = ctm[0]; + matc[1] = ctm[1]; + matc[2] = ctm[2]; + matc[3] = ctm[3]; + + if (surface_width == 0 || surface_height == 0) + return gFalse; + m1.transform(bbox[0], bbox[1], &kx, &ky); + m1.m[4] = -kx; + m1.m[5] = -ky; + + bitmap = new SplashBitmap(surface_width, surface_height, colorMode != splashModeMono1, + (paintType == 1) ? colorMode : splashModeMono8, gTrue); + memset(bitmap->getAlphaPtr(), 0, bitmap->getWidth() * bitmap->getHeight()); + if (paintType == 2) { +#if SPLASH_CMYK + memset(bitmap->getDataPtr(), (colorMode == splashModeCMYK8) ? 0x00 : 0xFF, bitmap->getRowSize() * bitmap->getHeight()); +#else + memset(bitmap->getDataPtr(), 0xFF, bitmap->getRowSize() * bitmap->getHeight()); +#endif + } + splash = new Splash(bitmap, gTrue); + + box.x1 = bbox[0]; box.y1 = bbox[1]; + box.x2 = bbox[2]; box.y2 = bbox[3]; + gfx = new Gfx(xref, this, resDict, catalog, &box, NULL); + // set pattern transformation matrix + gfx->getState()->setCTM(m1.m[0], m1.m[1], m1.m[2], m1.m[3], m1.m[4], m1.m[5]); + updateCTM(gfx->getState(), m1.m[0], m1.m[1], m1.m[2], m1.m[3], m1.m[4], m1.m[5]); + gfx->display(str); + splash = formerSplash; + TilingSplashOutBitmap imgData; + imgData.bitmap = bitmap; + imgData.paintType = paintType; + imgData.pattern = splash->getFillPattern(); + imgData.colorMode = colorMode; + imgData.y = 0; + imgData.repeatX = repeatX; + imgData.repeatY = repeatY; + SplashBitmap *tBitmap = bitmap; + bitmap = formerBitmap; + result_width = tBitmap->getWidth() * imgData.repeatX; + result_height = tBitmap->getHeight() * imgData.repeatY; + + if (splashAbs(matc[1]) > splashAbs(matc[0])) { + kx = -matc[1]; + ky = matc[2] - (matc[0] * matc[3]) / matc[1]; + } else { + kx = matc[0]; + ky = matc[3] - (matc[1] * matc[2]) / matc[0]; + } + kx = result_width / (fabs(kx) + 1); + ky = result_height / (fabs(ky) + 1); + state->concatCTM(kx, 0, 0, ky, 0, 0); + ctm = state->getCTM(); + matc[0] = ctm[0]; + matc[1] = ctm[1]; + matc[2] = ctm[2]; + matc[3] = ctm[3]; + splash->drawImage(&tilingBitmapSrc, &imgData, colorMode, gTrue, result_width, result_height, matc); + delete tBitmap; + delete gfx; + return gTrue; +} + +GBool SplashOutputDev::gouraudTriangleShadedFill(GfxState *state, GfxGouraudTriangleShading *shading) +{ + GfxColorSpaceMode shadingMode = shading->getColorSpace()->getMode(); + GBool bDirectColorTranslation = gFalse; // triggers an optimization. + switch (colorMode) { + case splashModeRGB8: + bDirectColorTranslation = (shadingMode == csDeviceRGB); + break; +#if SPLASH_CMYK + case splashModeCMYK8: + bDirectColorTranslation = (shadingMode == csDeviceCMYK); + break; +#endif + default: + break; + } + SplashGouraudColor *splashShading = new SplashGouraudPattern(bDirectColorTranslation, state, shading, colorMode); + // restore vector antialias because we support it here + if (shading->isParameterized()) { + GBool vaa = getVectorAntialias(); + GBool retVal = gFalse; + setVectorAntialias(gTrue); + retVal = splash->gouraudTriangleShadedFill(splashShading); + setVectorAntialias(vaa); + return retVal; + } + return gFalse; +} + +GBool SplashOutputDev::univariateShadedFill(GfxState *state, SplashUnivariatePattern *pattern, double tMin, double tMax) { + double xMin, yMin, xMax, yMax; + SplashPath *path; + GBool vaa = getVectorAntialias(); + // restore vector antialias because we support it here + setVectorAntialias(gTrue); + + GBool retVal = gFalse; + // get the clip region bbox + if (pattern->getShading()->getHasBBox()) { + pattern->getShading()->getBBox(&xMin, &yMin, &xMax, &yMax); + } else { + state->getClipBBox(&xMin, &yMin, &xMax, &yMax); + + xMin = floor (xMin); + yMin = floor (yMin); + xMax = ceil (xMax); + yMax = ceil (yMax); + + { + Matrix ctm, ictm; + double x[4], y[4]; + int i; + + state->getCTM(&ctm); + ctm.invertTo(&ictm); + + ictm.transform(xMin, yMin, &x[0], &y[0]); + ictm.transform(xMax, yMin, &x[1], &y[1]); + ictm.transform(xMin, yMax, &x[2], &y[2]); + ictm.transform(xMax, yMax, &x[3], &y[3]); + + xMin = xMax = x[0]; + yMin = yMax = y[0]; + for (i = 1; i < 4; i++) { + xMin = std::min<double>(xMin, x[i]); + yMin = std::min<double>(yMin, y[i]); + xMax = std::max<double>(xMax, x[i]); + yMax = std::max<double>(yMax, y[i]); + } + } + } + + // fill the region + state->moveTo(xMin, yMin); + state->lineTo(xMax, yMin); + state->lineTo(xMax, yMax); + state->lineTo(xMin, yMax); + state->closePath(); + path = convertPath(state, state->getPath()); + + retVal = (splash->shadedFill(path, pattern->getShading()->getHasBBox(), pattern) == splashOk); + state->clearPath(); + setVectorAntialias(vaa); + delete path; + + return retVal; +} + +GBool SplashOutputDev::axialShadedFill(GfxState *state, GfxAxialShading *shading, double tMin, double tMax) { + SplashAxialPattern *pattern = new SplashAxialPattern(colorMode, state, shading); + GBool retVal = univariateShadedFill(state, pattern, tMin, tMax); + + delete pattern; + + return retVal; +} + +GBool SplashOutputDev::radialShadedFill(GfxState *state, GfxRadialShading *shading, double tMin, double tMax) { + SplashRadialPattern *pattern = new SplashRadialPattern(colorMode, state, shading); + GBool retVal = univariateShadedFill(state, pattern, tMin, tMax); + + delete pattern; + + return retVal; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/SplashOutputDev.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/SplashOutputDev.h new file mode 100644 index 00000000000..f19c5425874 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/SplashOutputDev.h @@ -0,0 +1,440 @@ +//======================================================================== +// +// SplashOutputDev.h +// +// Copyright 2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Takashi Iwai <tiwai@suse.de> +// Copyright (C) 2009-2011 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2010 Christian Feuersänger <cfeuersaenger@googlemail.com> +// Copyright (C) 2011 Andreas Hartmetz <ahartmetz@gmail.com> +// Copyright (C) 2011 Andrea Canciani <ranma42@gmail.com> +// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef SPLASHOUTPUTDEV_H +#define SPLASHOUTPUTDEV_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" +#include "splash/SplashTypes.h" +#include "splash/SplashPattern.h" +#include "poppler-config.h" +#include "OutputDev.h" +#include "GfxState.h" + +class Gfx8BitFont; +class SplashBitmap; +class Splash; +class SplashPath; +class SplashFontEngine; +class SplashFont; +class T3FontCache; +struct T3FontCacheTag; +struct T3GlyphStack; +struct SplashTransparencyGroup; + +//------------------------------------------------------------------------ +// SplashOverprintColor +//------------------------------------------------------------------------ + +class SplashOverprintColor: public SplashPattern { +public: + SplashOverprintColor(GfxColorSpace *colorSpace, SplashColorPtr colorA, Guchar tolerance); + + virtual SplashPattern *copy() { return new SplashOverprintColor(colorSpace, color, tolerance); } + + virtual ~SplashOverprintColor(); + + virtual GBool getColor(int x, int y, SplashColorPtr c); + + virtual GBool testPosition(int x, int y) { return gFalse; } + + virtual GBool isStatic() { return gTrue; } + + virtual void overprint(GBool op, Guchar alphaSrc, SplashColorPtr colorSrc, + Guchar alphaDest, SplashColorPtr colorDest, SplashColorPtr colorResult); + +private: + GfxColorSpace *colorSpace; + SplashColor color; + Guchar tolerance; +}; + +//------------------------------------------------------------------------ +// Splash dynamic pattern +//------------------------------------------------------------------------ + +class SplashUnivariatePattern: public SplashPattern { +public: + + SplashUnivariatePattern(SplashColorMode colorMode, GfxState *state, GfxUnivariateShading *shading); + + virtual ~SplashUnivariatePattern(); + + virtual GBool getColor(int x, int y, SplashColorPtr c); + + virtual GBool testPosition(int x, int y); + + virtual GBool isStatic() { return gFalse; } + + virtual GBool getParameter(double xs, double ys, double *t) = 0; + + virtual GfxUnivariateShading *getShading() { return shading; } + +protected: + Matrix ictm; + double t0, t1, dt; + GfxUnivariateShading *shading; + GfxState *state; + SplashColorMode colorMode; +}; + +class SplashAxialPattern: public SplashUnivariatePattern { +public: + + SplashAxialPattern(SplashColorMode colorMode, GfxState *state, GfxAxialShading *shading); + + virtual SplashPattern *copy() { return new SplashAxialPattern(colorMode, state, (GfxAxialShading *) shading); } + + virtual ~SplashAxialPattern(); + + virtual GBool getParameter(double xs, double ys, double *t); + + virtual void overprint(GBool op, Guchar alphaSrc, SplashColorPtr colorSrc, + Guchar alphaDest, SplashColorPtr colorDest, SplashColorPtr colorResult); + +private: + double x0, y0, x1, y1; + double dx, dy, mul; + SplashOverprintColor *opPattern; +}; + +// see GfxState.h, GfxGouraudTriangleShading +class SplashGouraudPattern: public SplashGouraudColor { +public: + + SplashGouraudPattern(GBool bDirectColorTranslation, GfxState *state, GfxGouraudTriangleShading *shading, SplashColorMode mode); + + virtual SplashPattern *copy() { return new SplashGouraudPattern(bDirectColorTranslation, state, shading, mode); } + + virtual ~SplashGouraudPattern(); + + virtual GBool getColor(int x, int y, SplashColorPtr c) { return gFalse; } + + virtual GBool testPosition(int x, int y) { return gFalse; } + + virtual GBool isStatic() { return gFalse; } + + virtual GBool isParameterized() { return shading->isParameterized(); } + virtual int getNTriangles() { return shading->getNTriangles(); } + virtual void getTriangle(int i, double *x0, double *y0, double *color0, + double *x1, double *y1, double *color1, + double *x2, double *y2, double *color2) + { return shading->getTriangle(i, x0, y0, color0, x1, y1, color1, x2, y2, color2); } + + virtual void getParameterizedColor(double t, SplashColorMode mode, SplashColorPtr c); + + virtual void overprint(GBool op, Guchar alphaSrc, SplashColorPtr colorSrc, + Guchar alphaDest, SplashColorPtr colorDest, SplashColorPtr colorResult); +private: + GfxGouraudTriangleShading *shading; + GfxState *state; + GBool bDirectColorTranslation; + SplashOverprintColor *opPattern; + SplashColorMode mode; +}; + +// see GfxState.h, GfxRadialShading +class SplashRadialPattern: public SplashUnivariatePattern { +public: + + SplashRadialPattern(SplashColorMode colorMode, GfxState *state, GfxRadialShading *shading); + + virtual SplashPattern *copy() { return new SplashRadialPattern(colorMode, state, (GfxRadialShading *) shading); } + + virtual ~SplashRadialPattern(); + + virtual GBool getParameter(double xs, double ys, double *t); + + virtual void overprint(GBool op, Guchar alphaSrc, SplashColorPtr colorSrc, + Guchar alphaDest, SplashColorPtr colorDest, SplashColorPtr colorResult); + +private: + double x0, y0, r0, dx, dy, dr; + double a, inva; + SplashOverprintColor *opPattern; +}; + +//------------------------------------------------------------------------ + +// number of Type 3 fonts to cache +#define splashOutT3FontCacheSize 8 + +//------------------------------------------------------------------------ +// SplashOutputDev +//------------------------------------------------------------------------ + +class SplashOutputDev: public OutputDev { +public: + + // Constructor. + SplashOutputDev(SplashColorMode colorModeA, int bitmapRowPadA, + GBool reverseVideoA, SplashColorPtr paperColorA, + GBool bitmapTopDownA = gTrue, + GBool allowAntialiasA = gTrue); + + // Destructor. + virtual ~SplashOutputDev(); + + //----- get info about output device + + // Does this device use tilingPatternFill()? If this returns false, + // tiling pattern fills will be reduced to a series of other drawing + // operations. + virtual GBool useTilingPatternFill() { return gTrue; } + + // Does this device use functionShadedFill(), axialShadedFill(), and + // radialShadedFill()? If this returns false, these shaded fills + // will be reduced to a series of other drawing operations. + virtual GBool useShadedFills(int type) + { return (type >= 2 && type <= 5) ? gTrue : gFalse; } + + // Does this device use upside-down coordinates? + // (Upside-down means (0,0) is the top left corner of the page.) + virtual GBool upsideDown() { return gTrue; } + + // Does this device use drawChar() or drawString()? + virtual GBool useDrawChar() { return gTrue; } + + // Does this device use beginType3Char/endType3Char? Otherwise, + // text in Type 3 fonts will be drawn with drawChar/drawString. + virtual GBool interpretType3Chars() { return gTrue; } + + // This device now supports text in pattern colorspace! + virtual GBool supportTextCSPattern(GfxState *state) + { return state->getFillColorSpace()->getMode() == csPattern; } + + //----- initialization and control + + // Start a page. + virtual void startPage(int pageNum, GfxState *state); + + // End a page. + virtual void endPage(); + + //----- save/restore graphics state + virtual void saveState(GfxState *state); + virtual void restoreState(GfxState *state); + + //----- update graphics state + virtual void updateAll(GfxState *state); + virtual void updateCTM(GfxState *state, double m11, double m12, + double m21, double m22, double m31, double m32); + virtual void updateLineDash(GfxState *state); + virtual void updateFlatness(GfxState *state); + virtual void updateLineJoin(GfxState *state); + virtual void updateLineCap(GfxState *state); + virtual void updateMiterLimit(GfxState *state); + virtual void updateLineWidth(GfxState *state); + virtual void updateStrokeAdjust(GfxState *state); + virtual void updateFillColor(GfxState *state); + virtual void updateStrokeColor(GfxState *state); + virtual void updateBlendMode(GfxState *state); + virtual void updateFillOpacity(GfxState *state); + virtual void updateStrokeOpacity(GfxState *state); + virtual void updateFillOverprint(GfxState *state); + virtual void updateStrokeOverprint(GfxState *state); + virtual void updateOverprintMode(GfxState *state); + + //----- update text state + virtual void updateFont(GfxState *state); + + //----- path painting + virtual void stroke(GfxState *state); + virtual void fill(GfxState *state); + virtual void eoFill(GfxState *state); + virtual GBool tilingPatternFill(GfxState *state, Catalog *catalog, Object *str, + double *pmat, int paintType, int tilingType, Dict *resDict, + double *mat, double *bbox, + int x0, int y0, int x1, int y1, + double xStep, double yStep); + virtual GBool axialShadedFill(GfxState *state, GfxAxialShading *shading, double tMin, double tMax); + virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *shading, double tMin, double tMax); + virtual GBool gouraudTriangleShadedFill(GfxState *state, GfxGouraudTriangleShading *shading); + + //----- path clipping + virtual void clip(GfxState *state); + virtual void eoClip(GfxState *state); + virtual void clipToStrokePath(GfxState *state); + + //----- text drawing + virtual void drawChar(GfxState *state, double x, double y, + double dx, double dy, + double originX, double originY, + CharCode code, int nBytes, Unicode *u, int uLen); + virtual GBool beginType3Char(GfxState *state, double x, double y, + double dx, double dy, + CharCode code, Unicode *u, int uLen); + virtual void endType3Char(GfxState *state); + virtual void beginTextObject(GfxState *state); + virtual GBool deviceHasTextClip(GfxState *state) { return textClipPath && haveCSPattern; } + virtual void endTextObject(GfxState *state); + + //----- image drawing + virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, + int width, int height, GBool invert, + GBool interpolate, GBool inlineImg); + virtual void drawImage(GfxState *state, Object *ref, Stream *str, + int width, int height, GfxImageColorMap *colorMap, + GBool interpolate, int *maskColors, GBool inlineImg); + virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, int maskWidth, int maskHeight, + GBool maskInvert, GBool maskInterpolate); + virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, + int width, int height, + GfxImageColorMap *colorMap, + GBool interpolate, + Stream *maskStr, + int maskWidth, int maskHeight, + GfxImageColorMap *maskColorMap, + GBool maskInterpolate); + // If current colorspace ist pattern, + // need this device special handling for masks in pattern colorspace? + // Default is false + virtual GBool fillMaskCSPattern(GfxState * state) + { return state->getFillColorSpace()->getMode() == csPattern; } + virtual void endMaskClip(GfxState * /*state*/); + + //----- Type 3 font operators + virtual void type3D0(GfxState *state, double wx, double wy); + virtual void type3D1(GfxState *state, double wx, double wy, + double llx, double lly, double urx, double ury); + + //----- transparency groups and soft masks + virtual void beginTransparencyGroup(GfxState *state, double *bbox, + GfxColorSpace *blendingColorSpace, + GBool isolated, GBool knockout, + GBool forSoftMask); + virtual void endTransparencyGroup(GfxState *state); + virtual void paintTransparencyGroup(GfxState *state, double *bbox); + virtual void setSoftMask(GfxState *state, double *bbox, GBool alpha, + Function *transferFunc, GfxColor *backdropColor); + virtual void clearSoftMask(GfxState *state); + + //----- special access + + // Called to indicate that a new PDF document has been loaded. + void startDoc(XRef *xrefA); + + void setPaperColor(SplashColorPtr paperColorA); + + GBool isReverseVideo() { return reverseVideo; } + void setReverseVideo(GBool reverseVideoA) { reverseVideo = reverseVideoA; } + + // Get the bitmap and its size. + SplashBitmap *getBitmap() { return bitmap; } + int getBitmapWidth(); + int getBitmapHeight(); + + // Returns the last rasterized bitmap, transferring ownership to the + // caller. + SplashBitmap *takeBitmap(); + + // Get the Splash object. + Splash *getSplash() { return splash; } + + // Get the modified region. + void getModRegion(int *xMin, int *yMin, int *xMax, int *yMax); + + // Clear the modified region. + void clearModRegion(); + + SplashFont *getCurrentFont() { return font; } + +#if 1 //~tmp: turn off anti-aliasing temporarily + virtual GBool getVectorAntialias(); + virtual void setVectorAntialias(GBool vaa); +#endif + + void setFreeTypeHinting(GBool enable, GBool enableSlightHinting); + +private: + GBool univariateShadedFill(GfxState *state, SplashUnivariatePattern *pattern, double tMin, double tMax); + + void setupScreenParams(double hDPI, double vDPI); +#if SPLASH_CMYK + SplashPattern *getColor(GfxColorSpace *colorSpace, GfxGray gray, GfxRGB *rgb, GfxCMYK *cmyk); +#else + SplashPattern *getColor(GfxGray gray, GfxRGB *rgb); +#endif + SplashPath *convertPath(GfxState *state, GfxPath *path); + void doUpdateFont(GfxState *state); + void drawType3Glyph(T3FontCache *t3Font, + T3FontCacheTag *tag, Guchar *data); + static GBool imageMaskSrc(void *data, SplashColorPtr line); + static GBool imageSrc(void *data, SplashColorPtr colorLine, + Guchar *alphaLine); + static GBool alphaImageSrc(void *data, SplashColorPtr line, + Guchar *alphaLine); + static GBool maskedImageSrc(void *data, SplashColorPtr line, + Guchar *alphaLine); + static GBool tilingBitmapSrc(void *data, SplashColorPtr line, + Guchar *alphaLine); + + GBool haveCSPattern; // set if text has been drawn with a + // clipping render mode because of pattern colorspace + GBool keepAlphaChannel; // don't fill with paper color, keep alpha channel + + SplashColorMode colorMode; + int bitmapRowPad; + GBool bitmapTopDown; + GBool allowAntialias; + GBool vectorAntialias; + GBool enableFreeTypeHinting; + GBool enableSlightHinting; + GBool reverseVideo; // reverse video mode + SplashColor paperColor; // paper color + SplashScreenParams screenParams; + + XRef *xref; // xref table for current document + + SplashBitmap *bitmap; + Splash *splash; + SplashFontEngine *fontEngine; + + T3FontCache * // Type 3 font cache + t3FontCache[splashOutT3FontCacheSize]; + int nT3Fonts; // number of valid entries in t3FontCache + T3GlyphStack *t3GlyphStack; // Type 3 glyph context stack + + SplashFont *font; // current font + GBool needFontUpdate; // set when the font needs to be updated + SplashPath *textClipPath; // clipping path built with text object + + SplashTransparencyGroup * // transparency group stack + transpGroupStack; + SplashBitmap *maskBitmap; // for image masks in pattern colorspace +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/StdinCachedFile.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/StdinCachedFile.cc new file mode 100644 index 00000000000..db966377bb0 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/StdinCachedFile.cc @@ -0,0 +1,47 @@ +//======================================================================== +// +// StdinCachedFile.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// Copyright 2010 Jonathan Liu <net147@gmail.com> +// +//======================================================================== + +#include <config.h> + +#include "StdinCachedFile.h" + +#ifdef _WIN32 +#include <fcntl.h> // for O_BINARY +#include <io.h> // for setmode +#endif +#include <stdio.h> + +size_t StdinCacheLoader::init(GooString *dummy, CachedFile *cachedFile) +{ + size_t read, size = 0; + char buf[CachedFileChunkSize]; + +#ifdef _WIN32 + setmode(fileno(stdin), O_BINARY); +#endif + + CachedFileWriter writer = CachedFileWriter (cachedFile, NULL); + do { + read = fread(buf, 1, CachedFileChunkSize, stdin); + (writer.write) (buf, CachedFileChunkSize); + size += read; + } + while (read == CachedFileChunkSize); + + return size; +} + +int StdinCacheLoader::load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer) +{ + return 0; +} + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/StdinCachedFile.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/StdinCachedFile.h new file mode 100644 index 00000000000..5be6fa841a3 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/StdinCachedFile.h @@ -0,0 +1,27 @@ +//======================================================================== +// +// StdinCachedFile.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#ifndef STDINCACHELOADER_H +#define STDINCACHELOADER_H + +#include "CachedFile.h" + +class StdinCacheLoader : public CachedFileLoader { + +public: + + size_t init(GooString *dummy, CachedFile* cachedFile); + int load(const std::vector<ByteRange> &ranges, CachedFileWriter *writer); + +}; + +#endif + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/StdinPDFDocBuilder.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/StdinPDFDocBuilder.cc new file mode 100644 index 00000000000..571ee46d7f6 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/StdinPDFDocBuilder.cc @@ -0,0 +1,43 @@ +//======================================================================== +// +// StdinPDFDocBuilder.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#include <config.h> + +#include "StdinPDFDocBuilder.h" +#include "CachedFile.h" +#include "StdinCachedFile.h" + +//------------------------------------------------------------------------ +// StdinPDFDocBuilder +//------------------------------------------------------------------------ + +PDFDoc * +StdinPDFDocBuilder::buildPDFDoc(const GooString &uri, GooString *ownerPassword, + GooString *userPassword, void *guiDataA) +{ + Object obj; + + obj.initNull(); + CachedFile *cachedFile = new CachedFile(new StdinCacheLoader(), NULL); + return new PDFDoc(new CachedFileStream(cachedFile, 0, gFalse, + cachedFile->getLength(), &obj), + ownerPassword, userPassword); +} + +GBool StdinPDFDocBuilder::supports(const GooString &uri) +{ + if (uri.cmpN("fd://0", 6) == 0) { + return gTrue; + } else { + return gFalse; + } +} + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/StdinPDFDocBuilder.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/StdinPDFDocBuilder.h new file mode 100644 index 00000000000..e9b2f47f636 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/StdinPDFDocBuilder.h @@ -0,0 +1,33 @@ +//======================================================================== +// +// StdinPDFDocBuilder.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// Copyright 2010 Albert Astals Cid <aacid@kde.org> +// +//======================================================================== + +#ifndef STDINPDFDOCBUILDER_H +#define STDINPDFDOCBUILDER_H + +#include "PDFDocBuilder.h" + +//------------------------------------------------------------------------ +// StdinPDFDocBuilder +// +// The StdinPDFDocBuilder implements a PDFDocBuilder that read from stdin. +//------------------------------------------------------------------------ + +class StdinPDFDocBuilder : public PDFDocBuilder { + +public: + + PDFDoc *buildPDFDoc(const GooString &uri, GooString *ownerPassword = NULL, + GooString *userPassword = NULL, void *guiDataA = NULL); + GBool supports(const GooString &uri); + +}; + +#endif /* STDINPDFDOCBUILDER_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Stream-CCITT.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Stream-CCITT.h new file mode 100644 index 00000000000..43405b67751 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Stream-CCITT.h @@ -0,0 +1,473 @@ +//======================================================================== +// +// Stream-CCITT.h +// +// Tables for CCITT Fax decoding. +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +struct CCITTCode { + short bits; + short n; +}; + +#define ccittEOL -2 + +//------------------------------------------------------------------------ +// 2D codes +//------------------------------------------------------------------------ + +#define twoDimPass 0 +#define twoDimHoriz 1 +#define twoDimVert0 2 +#define twoDimVertR1 3 +#define twoDimVertL1 4 +#define twoDimVertR2 5 +#define twoDimVertL2 6 +#define twoDimVertR3 7 +#define twoDimVertL3 8 + +// 1-7 bit codes +static const CCITTCode twoDimTab1[128] = { + {-1, -1}, {-1, -1}, // 000000x + {7, twoDimVertL3}, // 0000010 + {7, twoDimVertR3}, // 0000011 + {6, twoDimVertL2}, {6, twoDimVertL2}, // 000010x + {6, twoDimVertR2}, {6, twoDimVertR2}, // 000011x + {4, twoDimPass}, {4, twoDimPass}, // 0001xxx + {4, twoDimPass}, {4, twoDimPass}, + {4, twoDimPass}, {4, twoDimPass}, + {4, twoDimPass}, {4, twoDimPass}, + {3, twoDimHoriz}, {3, twoDimHoriz}, // 001xxxx + {3, twoDimHoriz}, {3, twoDimHoriz}, + {3, twoDimHoriz}, {3, twoDimHoriz}, + {3, twoDimHoriz}, {3, twoDimHoriz}, + {3, twoDimHoriz}, {3, twoDimHoriz}, + {3, twoDimHoriz}, {3, twoDimHoriz}, + {3, twoDimHoriz}, {3, twoDimHoriz}, + {3, twoDimHoriz}, {3, twoDimHoriz}, + {3, twoDimVertL1}, {3, twoDimVertL1}, // 010xxxx + {3, twoDimVertL1}, {3, twoDimVertL1}, + {3, twoDimVertL1}, {3, twoDimVertL1}, + {3, twoDimVertL1}, {3, twoDimVertL1}, + {3, twoDimVertL1}, {3, twoDimVertL1}, + {3, twoDimVertL1}, {3, twoDimVertL1}, + {3, twoDimVertL1}, {3, twoDimVertL1}, + {3, twoDimVertL1}, {3, twoDimVertL1}, + {3, twoDimVertR1}, {3, twoDimVertR1}, // 011xxxx + {3, twoDimVertR1}, {3, twoDimVertR1}, + {3, twoDimVertR1}, {3, twoDimVertR1}, + {3, twoDimVertR1}, {3, twoDimVertR1}, + {3, twoDimVertR1}, {3, twoDimVertR1}, + {3, twoDimVertR1}, {3, twoDimVertR1}, + {3, twoDimVertR1}, {3, twoDimVertR1}, + {3, twoDimVertR1}, {3, twoDimVertR1}, + {1, twoDimVert0}, {1, twoDimVert0}, // 1xxxxxx + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0}, + {1, twoDimVert0}, {1, twoDimVert0} +}; + +//------------------------------------------------------------------------ +// white run lengths +//------------------------------------------------------------------------ + +// 11-12 bit codes (upper 7 bits are 0) +static const CCITTCode whiteTab1[32] = { + {-1, -1}, // 00000 + {12, ccittEOL}, // 00001 + {-1, -1}, {-1, -1}, // 0001x + {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 001xx + {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 010xx + {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 011xx + {11, 1792}, {11, 1792}, // 1000x + {12, 1984}, // 10010 + {12, 2048}, // 10011 + {12, 2112}, // 10100 + {12, 2176}, // 10101 + {12, 2240}, // 10110 + {12, 2304}, // 10111 + {11, 1856}, {11, 1856}, // 1100x + {11, 1920}, {11, 1920}, // 1101x + {12, 2368}, // 11100 + {12, 2432}, // 11101 + {12, 2496}, // 11110 + {12, 2560} // 11111 +}; + +// 1-9 bit codes +static const CCITTCode whiteTab2[512] = { + {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 0000000xx + {8, 29}, {8, 29}, // 00000010x + {8, 30}, {8, 30}, // 00000011x + {8, 45}, {8, 45}, // 00000100x + {8, 46}, {8, 46}, // 00000101x + {7, 22}, {7, 22}, {7, 22}, {7, 22}, // 0000011xx + {7, 23}, {7, 23}, {7, 23}, {7, 23}, // 0000100xx + {8, 47}, {8, 47}, // 00001010x + {8, 48}, {8, 48}, // 00001011x + {6, 13}, {6, 13}, {6, 13}, {6, 13}, // 000011xxx + {6, 13}, {6, 13}, {6, 13}, {6, 13}, + {7, 20}, {7, 20}, {7, 20}, {7, 20}, // 0001000xx + {8, 33}, {8, 33}, // 00010010x + {8, 34}, {8, 34}, // 00010011x + {8, 35}, {8, 35}, // 00010100x + {8, 36}, {8, 36}, // 00010101x + {8, 37}, {8, 37}, // 00010110x + {8, 38}, {8, 38}, // 00010111x + {7, 19}, {7, 19}, {7, 19}, {7, 19}, // 0001100xx + {8, 31}, {8, 31}, // 00011010x + {8, 32}, {8, 32}, // 00011011x + {6, 1}, {6, 1}, {6, 1}, {6, 1}, // 000111xxx + {6, 1}, {6, 1}, {6, 1}, {6, 1}, + {6, 12}, {6, 12}, {6, 12}, {6, 12}, // 001000xxx + {6, 12}, {6, 12}, {6, 12}, {6, 12}, + {8, 53}, {8, 53}, // 00100100x + {8, 54}, {8, 54}, // 00100101x + {7, 26}, {7, 26}, {7, 26}, {7, 26}, // 0010011xx + {8, 39}, {8, 39}, // 00101000x + {8, 40}, {8, 40}, // 00101001x + {8, 41}, {8, 41}, // 00101010x + {8, 42}, {8, 42}, // 00101011x + {8, 43}, {8, 43}, // 00101100x + {8, 44}, {8, 44}, // 00101101x + {7, 21}, {7, 21}, {7, 21}, {7, 21}, // 0010111xx + {7, 28}, {7, 28}, {7, 28}, {7, 28}, // 0011000xx + {8, 61}, {8, 61}, // 00110010x + {8, 62}, {8, 62}, // 00110011x + {8, 63}, {8, 63}, // 00110100x + {8, 0}, {8, 0}, // 00110101x + {8, 320}, {8, 320}, // 00110110x + {8, 384}, {8, 384}, // 00110111x + {5, 10}, {5, 10}, {5, 10}, {5, 10}, // 00111xxxx + {5, 10}, {5, 10}, {5, 10}, {5, 10}, + {5, 10}, {5, 10}, {5, 10}, {5, 10}, + {5, 10}, {5, 10}, {5, 10}, {5, 10}, + {5, 11}, {5, 11}, {5, 11}, {5, 11}, // 01000xxxx + {5, 11}, {5, 11}, {5, 11}, {5, 11}, + {5, 11}, {5, 11}, {5, 11}, {5, 11}, + {5, 11}, {5, 11}, {5, 11}, {5, 11}, + {7, 27}, {7, 27}, {7, 27}, {7, 27}, // 0100100xx + {8, 59}, {8, 59}, // 01001010x + {8, 60}, {8, 60}, // 01001011x + {9, 1472}, // 010011000 + {9, 1536}, // 010011001 + {9, 1600}, // 010011010 + {9, 1728}, // 010011011 + {7, 18}, {7, 18}, {7, 18}, {7, 18}, // 0100111xx + {7, 24}, {7, 24}, {7, 24}, {7, 24}, // 0101000xx + {8, 49}, {8, 49}, // 01010010x + {8, 50}, {8, 50}, // 01010011x + {8, 51}, {8, 51}, // 01010100x + {8, 52}, {8, 52}, // 01010101x + {7, 25}, {7, 25}, {7, 25}, {7, 25}, // 0101011xx + {8, 55}, {8, 55}, // 01011000x + {8, 56}, {8, 56}, // 01011001x + {8, 57}, {8, 57}, // 01011010x + {8, 58}, {8, 58}, // 01011011x + {6, 192}, {6, 192}, {6, 192}, {6, 192}, // 010111xxx + {6, 192}, {6, 192}, {6, 192}, {6, 192}, + {6, 1664}, {6, 1664}, {6, 1664}, {6, 1664}, // 011000xxx + {6, 1664}, {6, 1664}, {6, 1664}, {6, 1664}, + {8, 448}, {8, 448}, // 01100100x + {8, 512}, {8, 512}, // 01100101x + {9, 704}, // 011001100 + {9, 768}, // 011001101 + {8, 640}, {8, 640}, // 01100111x + {8, 576}, {8, 576}, // 01101000x + {9, 832}, // 011010010 + {9, 896}, // 011010011 + {9, 960}, // 011010100 + {9, 1024}, // 011010101 + {9, 1088}, // 011010110 + {9, 1152}, // 011010111 + {9, 1216}, // 011011000 + {9, 1280}, // 011011001 + {9, 1344}, // 011011010 + {9, 1408}, // 011011011 + {7, 256}, {7, 256}, {7, 256}, {7, 256}, // 0110111xx + {4, 2}, {4, 2}, {4, 2}, {4, 2}, // 0111xxxxx + {4, 2}, {4, 2}, {4, 2}, {4, 2}, + {4, 2}, {4, 2}, {4, 2}, {4, 2}, + {4, 2}, {4, 2}, {4, 2}, {4, 2}, + {4, 2}, {4, 2}, {4, 2}, {4, 2}, + {4, 2}, {4, 2}, {4, 2}, {4, 2}, + {4, 2}, {4, 2}, {4, 2}, {4, 2}, + {4, 2}, {4, 2}, {4, 2}, {4, 2}, + {4, 3}, {4, 3}, {4, 3}, {4, 3}, // 1000xxxxx + {4, 3}, {4, 3}, {4, 3}, {4, 3}, + {4, 3}, {4, 3}, {4, 3}, {4, 3}, + {4, 3}, {4, 3}, {4, 3}, {4, 3}, + {4, 3}, {4, 3}, {4, 3}, {4, 3}, + {4, 3}, {4, 3}, {4, 3}, {4, 3}, + {4, 3}, {4, 3}, {4, 3}, {4, 3}, + {4, 3}, {4, 3}, {4, 3}, {4, 3}, + {5, 128}, {5, 128}, {5, 128}, {5, 128}, // 10010xxxx + {5, 128}, {5, 128}, {5, 128}, {5, 128}, + {5, 128}, {5, 128}, {5, 128}, {5, 128}, + {5, 128}, {5, 128}, {5, 128}, {5, 128}, + {5, 8}, {5, 8}, {5, 8}, {5, 8}, // 10011xxxx + {5, 8}, {5, 8}, {5, 8}, {5, 8}, + {5, 8}, {5, 8}, {5, 8}, {5, 8}, + {5, 8}, {5, 8}, {5, 8}, {5, 8}, + {5, 9}, {5, 9}, {5, 9}, {5, 9}, // 10100xxxx + {5, 9}, {5, 9}, {5, 9}, {5, 9}, + {5, 9}, {5, 9}, {5, 9}, {5, 9}, + {5, 9}, {5, 9}, {5, 9}, {5, 9}, + {6, 16}, {6, 16}, {6, 16}, {6, 16}, // 101010xxx + {6, 16}, {6, 16}, {6, 16}, {6, 16}, + {6, 17}, {6, 17}, {6, 17}, {6, 17}, // 101011xxx + {6, 17}, {6, 17}, {6, 17}, {6, 17}, + {4, 4}, {4, 4}, {4, 4}, {4, 4}, // 1011xxxxx + {4, 4}, {4, 4}, {4, 4}, {4, 4}, + {4, 4}, {4, 4}, {4, 4}, {4, 4}, + {4, 4}, {4, 4}, {4, 4}, {4, 4}, + {4, 4}, {4, 4}, {4, 4}, {4, 4}, + {4, 4}, {4, 4}, {4, 4}, {4, 4}, + {4, 4}, {4, 4}, {4, 4}, {4, 4}, + {4, 4}, {4, 4}, {4, 4}, {4, 4}, + {4, 5}, {4, 5}, {4, 5}, {4, 5}, // 1100xxxxx + {4, 5}, {4, 5}, {4, 5}, {4, 5}, + {4, 5}, {4, 5}, {4, 5}, {4, 5}, + {4, 5}, {4, 5}, {4, 5}, {4, 5}, + {4, 5}, {4, 5}, {4, 5}, {4, 5}, + {4, 5}, {4, 5}, {4, 5}, {4, 5}, + {4, 5}, {4, 5}, {4, 5}, {4, 5}, + {4, 5}, {4, 5}, {4, 5}, {4, 5}, + {6, 14}, {6, 14}, {6, 14}, {6, 14}, // 110100xxx + {6, 14}, {6, 14}, {6, 14}, {6, 14}, + {6, 15}, {6, 15}, {6, 15}, {6, 15}, // 110101xxx + {6, 15}, {6, 15}, {6, 15}, {6, 15}, + {5, 64}, {5, 64}, {5, 64}, {5, 64}, // 11011xxxx + {5, 64}, {5, 64}, {5, 64}, {5, 64}, + {5, 64}, {5, 64}, {5, 64}, {5, 64}, + {5, 64}, {5, 64}, {5, 64}, {5, 64}, + {4, 6}, {4, 6}, {4, 6}, {4, 6}, // 1110xxxxx + {4, 6}, {4, 6}, {4, 6}, {4, 6}, + {4, 6}, {4, 6}, {4, 6}, {4, 6}, + {4, 6}, {4, 6}, {4, 6}, {4, 6}, + {4, 6}, {4, 6}, {4, 6}, {4, 6}, + {4, 6}, {4, 6}, {4, 6}, {4, 6}, + {4, 6}, {4, 6}, {4, 6}, {4, 6}, + {4, 6}, {4, 6}, {4, 6}, {4, 6}, + {4, 7}, {4, 7}, {4, 7}, {4, 7}, // 1111xxxxx + {4, 7}, {4, 7}, {4, 7}, {4, 7}, + {4, 7}, {4, 7}, {4, 7}, {4, 7}, + {4, 7}, {4, 7}, {4, 7}, {4, 7}, + {4, 7}, {4, 7}, {4, 7}, {4, 7}, + {4, 7}, {4, 7}, {4, 7}, {4, 7}, + {4, 7}, {4, 7}, {4, 7}, {4, 7}, + {4, 7}, {4, 7}, {4, 7}, {4, 7} +}; + +//------------------------------------------------------------------------ +// black run lengths +//------------------------------------------------------------------------ + +// 10-13 bit codes (upper 6 bits are 0) +static const CCITTCode blackTab1[128] = { + {-1, -1}, {-1, -1}, // 000000000000x + {12, ccittEOL}, {12, ccittEOL}, // 000000000001x + {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000001xx + {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000010xx + {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000011xx + {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000100xx + {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000101xx + {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000110xx + {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 00000000111xx + {11, 1792}, {11, 1792}, {11, 1792}, {11, 1792}, // 00000001000xx + {12, 1984}, {12, 1984}, // 000000010010x + {12, 2048}, {12, 2048}, // 000000010011x + {12, 2112}, {12, 2112}, // 000000010100x + {12, 2176}, {12, 2176}, // 000000010101x + {12, 2240}, {12, 2240}, // 000000010110x + {12, 2304}, {12, 2304}, // 000000010111x + {11, 1856}, {11, 1856}, {11, 1856}, {11, 1856}, // 00000001100xx + {11, 1920}, {11, 1920}, {11, 1920}, {11, 1920}, // 00000001101xx + {12, 2368}, {12, 2368}, // 000000011100x + {12, 2432}, {12, 2432}, // 000000011101x + {12, 2496}, {12, 2496}, // 000000011110x + {12, 2560}, {12, 2560}, // 000000011111x + {10, 18}, {10, 18}, {10, 18}, {10, 18}, // 0000001000xxx + {10, 18}, {10, 18}, {10, 18}, {10, 18}, + {12, 52}, {12, 52}, // 000000100100x + {13, 640}, // 0000001001010 + {13, 704}, // 0000001001011 + {13, 768}, // 0000001001100 + {13, 832}, // 0000001001101 + {12, 55}, {12, 55}, // 000000100111x + {12, 56}, {12, 56}, // 000000101000x + {13, 1280}, // 0000001010010 + {13, 1344}, // 0000001010011 + {13, 1408}, // 0000001010100 + {13, 1472}, // 0000001010101 + {12, 59}, {12, 59}, // 000000101011x + {12, 60}, {12, 60}, // 000000101100x + {13, 1536}, // 0000001011010 + {13, 1600}, // 0000001011011 + {11, 24}, {11, 24}, {11, 24}, {11, 24}, // 00000010111xx + {11, 25}, {11, 25}, {11, 25}, {11, 25}, // 00000011000xx + {13, 1664}, // 0000001100100 + {13, 1728}, // 0000001100101 + {12, 320}, {12, 320}, // 000000110011x + {12, 384}, {12, 384}, // 000000110100x + {12, 448}, {12, 448}, // 000000110101x + {13, 512}, // 0000001101100 + {13, 576}, // 0000001101101 + {12, 53}, {12, 53}, // 000000110111x + {12, 54}, {12, 54}, // 000000111000x + {13, 896}, // 0000001110010 + {13, 960}, // 0000001110011 + {13, 1024}, // 0000001110100 + {13, 1088}, // 0000001110101 + {13, 1152}, // 0000001110110 + {13, 1216}, // 0000001110111 + {10, 64}, {10, 64}, {10, 64}, {10, 64}, // 0000001111xxx + {10, 64}, {10, 64}, {10, 64}, {10, 64} +}; + +// 7-12 bit codes (upper 4 bits are 0) +static const CCITTCode blackTab2[192] = { + {8, 13}, {8, 13}, {8, 13}, {8, 13}, // 00000100xxxx + {8, 13}, {8, 13}, {8, 13}, {8, 13}, + {8, 13}, {8, 13}, {8, 13}, {8, 13}, + {8, 13}, {8, 13}, {8, 13}, {8, 13}, + {11, 23}, {11, 23}, // 00000101000x + {12, 50}, // 000001010010 + {12, 51}, // 000001010011 + {12, 44}, // 000001010100 + {12, 45}, // 000001010101 + {12, 46}, // 000001010110 + {12, 47}, // 000001010111 + {12, 57}, // 000001011000 + {12, 58}, // 000001011001 + {12, 61}, // 000001011010 + {12, 256}, // 000001011011 + {10, 16}, {10, 16}, {10, 16}, {10, 16}, // 0000010111xx + {10, 17}, {10, 17}, {10, 17}, {10, 17}, // 0000011000xx + {12, 48}, // 000001100100 + {12, 49}, // 000001100101 + {12, 62}, // 000001100110 + {12, 63}, // 000001100111 + {12, 30}, // 000001101000 + {12, 31}, // 000001101001 + {12, 32}, // 000001101010 + {12, 33}, // 000001101011 + {12, 40}, // 000001101100 + {12, 41}, // 000001101101 + {11, 22}, {11, 22}, // 00000110111x + {8, 14}, {8, 14}, {8, 14}, {8, 14}, // 00000111xxxx + {8, 14}, {8, 14}, {8, 14}, {8, 14}, + {8, 14}, {8, 14}, {8, 14}, {8, 14}, + {8, 14}, {8, 14}, {8, 14}, {8, 14}, + {7, 10}, {7, 10}, {7, 10}, {7, 10}, // 0000100xxxxx + {7, 10}, {7, 10}, {7, 10}, {7, 10}, + {7, 10}, {7, 10}, {7, 10}, {7, 10}, + {7, 10}, {7, 10}, {7, 10}, {7, 10}, + {7, 10}, {7, 10}, {7, 10}, {7, 10}, + {7, 10}, {7, 10}, {7, 10}, {7, 10}, + {7, 10}, {7, 10}, {7, 10}, {7, 10}, + {7, 10}, {7, 10}, {7, 10}, {7, 10}, + {7, 11}, {7, 11}, {7, 11}, {7, 11}, // 0000101xxxxx + {7, 11}, {7, 11}, {7, 11}, {7, 11}, + {7, 11}, {7, 11}, {7, 11}, {7, 11}, + {7, 11}, {7, 11}, {7, 11}, {7, 11}, + {7, 11}, {7, 11}, {7, 11}, {7, 11}, + {7, 11}, {7, 11}, {7, 11}, {7, 11}, + {7, 11}, {7, 11}, {7, 11}, {7, 11}, + {7, 11}, {7, 11}, {7, 11}, {7, 11}, + {9, 15}, {9, 15}, {9, 15}, {9, 15}, // 000011000xxx + {9, 15}, {9, 15}, {9, 15}, {9, 15}, + {12, 128}, // 000011001000 + {12, 192}, // 000011001001 + {12, 26}, // 000011001010 + {12, 27}, // 000011001011 + {12, 28}, // 000011001100 + {12, 29}, // 000011001101 + {11, 19}, {11, 19}, // 00001100111x + {11, 20}, {11, 20}, // 00001101000x + {12, 34}, // 000011010010 + {12, 35}, // 000011010011 + {12, 36}, // 000011010100 + {12, 37}, // 000011010101 + {12, 38}, // 000011010110 + {12, 39}, // 000011010111 + {11, 21}, {11, 21}, // 00001101100x + {12, 42}, // 000011011010 + {12, 43}, // 000011011011 + {10, 0}, {10, 0}, {10, 0}, {10, 0}, // 0000110111xx + {7, 12}, {7, 12}, {7, 12}, {7, 12}, // 0000111xxxxx + {7, 12}, {7, 12}, {7, 12}, {7, 12}, + {7, 12}, {7, 12}, {7, 12}, {7, 12}, + {7, 12}, {7, 12}, {7, 12}, {7, 12}, + {7, 12}, {7, 12}, {7, 12}, {7, 12}, + {7, 12}, {7, 12}, {7, 12}, {7, 12}, + {7, 12}, {7, 12}, {7, 12}, {7, 12}, + {7, 12}, {7, 12}, {7, 12}, {7, 12} +}; + +// 2-6 bit codes +static const CCITTCode blackTab3[64] = { + {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, // 0000xx + {6, 9}, // 000100 + {6, 8}, // 000101 + {5, 7}, {5, 7}, // 00011x + {4, 6}, {4, 6}, {4, 6}, {4, 6}, // 0010xx + {4, 5}, {4, 5}, {4, 5}, {4, 5}, // 0011xx + {3, 1}, {3, 1}, {3, 1}, {3, 1}, // 010xxx + {3, 1}, {3, 1}, {3, 1}, {3, 1}, + {3, 4}, {3, 4}, {3, 4}, {3, 4}, // 011xxx + {3, 4}, {3, 4}, {3, 4}, {3, 4}, + {2, 3}, {2, 3}, {2, 3}, {2, 3}, // 10xxxx + {2, 3}, {2, 3}, {2, 3}, {2, 3}, + {2, 3}, {2, 3}, {2, 3}, {2, 3}, + {2, 3}, {2, 3}, {2, 3}, {2, 3}, + {2, 2}, {2, 2}, {2, 2}, {2, 2}, // 11xxxx + {2, 2}, {2, 2}, {2, 2}, {2, 2}, + {2, 2}, {2, 2}, {2, 2}, {2, 2}, + {2, 2}, {2, 2}, {2, 2}, {2, 2} +}; diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Stream.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/Stream.cc new file mode 100644 index 00000000000..376f617a597 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Stream.cc @@ -0,0 +1,4969 @@ +//======================================================================== +// +// Stream.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2006-2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com> +// Copyright (C) 2008 Julien Rebetez <julien@fhtagn.net> +// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2009 Glenn Ganz <glenn.ganz@uptime.ch> +// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> +// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2010 Tomas Hoger <thoger@redhat.com> +// Copyright (C) 2011 William Bader <williambader@hotmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#include <limits.h> +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#include <string.h> +#include <ctype.h> +#include "goo/gmem.h" +#include "goo/gfile.h" +#include "poppler-config.h" +#include "Error.h" +#include "Object.h" +#include "Lexer.h" +#include "GfxState.h" +#include "Stream.h" +#include "JBIG2Stream.h" +#include "Stream-CCITT.h" +#include "CachedFile.h" + +#ifdef ENABLE_LIBJPEG +#include "DCTStream.h" +#endif + +#ifdef ENABLE_ZLIB +#include "FlateStream.h" +#endif + +#ifdef ENABLE_LIBOPENJPEG +#include "JPEG2000Stream.h" +#else +#include "JPXStream.h" +#endif + +#ifdef __DJGPP__ +static GBool setDJSYSFLAGS = gFalse; +#endif + +#ifdef VMS +#ifdef __GNUC__ +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 +#endif +#endif + +//------------------------------------------------------------------------ +// Stream (base class) +//------------------------------------------------------------------------ + +Stream::Stream() { + ref = 1; +} + +Stream::~Stream() { +} + +void Stream::close() { +} + +int Stream::getRawChar() { + error(-1, "Internal: called getRawChar() on non-predictor stream"); + return EOF; +} + +int Stream::getChars(int nChars, Guchar *buffer) { + error(-1, "Internal: called getChars() on non-predictor stream"); + return 0; +} + +void Stream::getRawChars(int nChars, int *buffer) { + error(-1, "Internal: called getRawChars() on non-predictor stream"); +} + +char *Stream::getLine(char *buf, int size) { + int i; + int c; + + if (lookChar() == EOF) + return NULL; + for (i = 0; i < size - 1; ++i) { + c = getChar(); + if (c == EOF || c == '\n') + break; + if (c == '\r') { + if ((c = lookChar()) == '\n') + getChar(); + break; + } + buf[i] = c; + } + buf[i] = '\0'; + return buf; +} + +GooString *Stream::getPSFilter(int psLevel, char *indent) { + return new GooString(); +} + +Stream *Stream::addFilters(Object *dict) { + Object obj, obj2; + Object params, params2; + Stream *str; + int i; + + str = this; + dict->dictLookup("Filter", &obj); + if (obj.isNull()) { + obj.free(); + dict->dictLookup("F", &obj); + } + dict->dictLookup("DecodeParms", ¶ms); + if (params.isNull()) { + params.free(); + dict->dictLookup("DP", ¶ms); + } + if (obj.isName()) { + str = makeFilter(obj.getName(), str, ¶ms); + } else if (obj.isArray()) { + for (i = 0; i < obj.arrayGetLength(); ++i) { + obj.arrayGet(i, &obj2); + if (params.isArray()) + params.arrayGet(i, ¶ms2); + else + params2.initNull(); + if (obj2.isName()) { + str = makeFilter(obj2.getName(), str, ¶ms2); + } else { + error(getPos(), "Bad filter name"); + str = new EOFStream(str); + } + obj2.free(); + params2.free(); + } + } else if (!obj.isNull()) { + error(getPos(), "Bad 'Filter' attribute in stream"); + } + obj.free(); + params.free(); + + return str; +} + +Stream *Stream::makeFilter(char *name, Stream *str, Object *params) { + int pred; // parameters + int colors; + int bits; + int early; + int encoding; + GBool endOfLine, byteAlign, endOfBlock, black; + int columns, rows; + int colorXform; + Object globals, obj; + + if (!strcmp(name, "ASCIIHexDecode") || !strcmp(name, "AHx")) { + str = new ASCIIHexStream(str); + } else if (!strcmp(name, "ASCII85Decode") || !strcmp(name, "A85")) { + str = new ASCII85Stream(str); + } else if (!strcmp(name, "LZWDecode") || !strcmp(name, "LZW")) { + pred = 1; + columns = 1; + colors = 1; + bits = 8; + early = 1; + if (params->isDict()) { + params->dictLookup("Predictor", &obj); + if (obj.isInt()) + pred = obj.getInt(); + obj.free(); + params->dictLookup("Columns", &obj); + if (obj.isInt()) + columns = obj.getInt(); + obj.free(); + params->dictLookup("Colors", &obj); + if (obj.isInt()) + colors = obj.getInt(); + obj.free(); + params->dictLookup("BitsPerComponent", &obj); + if (obj.isInt()) + bits = obj.getInt(); + obj.free(); + params->dictLookup("EarlyChange", &obj); + if (obj.isInt()) + early = obj.getInt(); + obj.free(); + } + str = new LZWStream(str, pred, columns, colors, bits, early); + } else if (!strcmp(name, "RunLengthDecode") || !strcmp(name, "RL")) { + str = new RunLengthStream(str); + } else if (!strcmp(name, "CCITTFaxDecode") || !strcmp(name, "CCF")) { + encoding = 0; + endOfLine = gFalse; + byteAlign = gFalse; + columns = 1728; + rows = 0; + endOfBlock = gTrue; + black = gFalse; + if (params->isDict()) { + params->dictLookup("K", &obj); + if (obj.isInt()) { + encoding = obj.getInt(); + } + obj.free(); + params->dictLookup("EndOfLine", &obj); + if (obj.isBool()) { + endOfLine = obj.getBool(); + } + obj.free(); + params->dictLookup("EncodedByteAlign", &obj); + if (obj.isBool()) { + byteAlign = obj.getBool(); + } + obj.free(); + params->dictLookup("Columns", &obj); + if (obj.isInt()) { + columns = obj.getInt(); + } + obj.free(); + params->dictLookup("Rows", &obj); + if (obj.isInt()) { + rows = obj.getInt(); + } + obj.free(); + params->dictLookup("EndOfBlock", &obj); + if (obj.isBool()) { + endOfBlock = obj.getBool(); + } + obj.free(); + params->dictLookup("BlackIs1", &obj); + if (obj.isBool()) { + black = obj.getBool(); + } + obj.free(); + } + str = new CCITTFaxStream(str, encoding, endOfLine, byteAlign, + columns, rows, endOfBlock, black); + } else if (!strcmp(name, "DCTDecode") || !strcmp(name, "DCT")) { + colorXform = -1; + if (params->isDict()) { + if (params->dictLookup("ColorTransform", &obj)->isInt()) { + colorXform = obj.getInt(); + } + obj.free(); + } + str = new DCTStream(str, colorXform); + } else if (!strcmp(name, "FlateDecode") || !strcmp(name, "Fl")) { + pred = 1; + columns = 1; + colors = 1; + bits = 8; + if (params->isDict()) { + params->dictLookup("Predictor", &obj); + if (obj.isInt()) + pred = obj.getInt(); + obj.free(); + params->dictLookup("Columns", &obj); + if (obj.isInt()) + columns = obj.getInt(); + obj.free(); + params->dictLookup("Colors", &obj); + if (obj.isInt()) + colors = obj.getInt(); + obj.free(); + params->dictLookup("BitsPerComponent", &obj); + if (obj.isInt()) + bits = obj.getInt(); + obj.free(); + } + str = new FlateStream(str, pred, columns, colors, bits); + } else if (!strcmp(name, "JBIG2Decode")) { + if (params->isDict()) { + params->dictLookup("JBIG2Globals", &globals); + } + str = new JBIG2Stream(str, &globals); + globals.free(); + } else if (!strcmp(name, "JPXDecode")) { + str = new JPXStream(str); + } else { + error(getPos(), "Unknown filter '%s'", name); + str = new EOFStream(str); + } + return str; +} + +//------------------------------------------------------------------------ +// OutStream +//------------------------------------------------------------------------ +OutStream::OutStream () +{ + ref = 1; +} + +OutStream::~OutStream () +{ +} + +//------------------------------------------------------------------------ +// FileOutStream +//------------------------------------------------------------------------ +FileOutStream::FileOutStream (FILE* fa, Guint startA) +{ + f = fa; + start = startA; +} + +FileOutStream::~FileOutStream () +{ + close (); +} + +void FileOutStream::close () +{ + +} + +int FileOutStream::getPos () +{ + return ftell(f); +} + +void FileOutStream::put (char c) +{ + fputc(c,f); +} + +void FileOutStream::printf(const char *format, ...) +{ + va_list argptr; + va_start (argptr, format); + vfprintf(f, format, argptr); + va_end (argptr); +} + + +//------------------------------------------------------------------------ +// BaseStream +//------------------------------------------------------------------------ + +BaseStream::BaseStream(Object *dictA, Guint lengthA) { + dict = *dictA; + length = lengthA; +} + +BaseStream::~BaseStream() { + dict.free(); +} + +//------------------------------------------------------------------------ +// FilterStream +//------------------------------------------------------------------------ + +FilterStream::FilterStream(Stream *strA) { + str = strA; +} + +FilterStream::~FilterStream() { +} + +void FilterStream::close() { + str->close(); +} + +void FilterStream::setPos(Guint pos, int dir) { + error(-1, "Internal: called setPos() on FilterStream"); +} + +//------------------------------------------------------------------------ +// ImageStream +//------------------------------------------------------------------------ + +ImageStream::ImageStream(Stream *strA, int widthA, int nCompsA, int nBitsA) { + int imgLineSize; + + str = strA; + width = widthA; + nComps = nCompsA; + nBits = nBitsA; + + nVals = width * nComps; + if (nBits == 1) { + imgLineSize = (nVals + 7) & ~7; + } else { + imgLineSize = nVals; + } + if (width > INT_MAX / nComps) { + // force a call to gmallocn(-1,...), which will throw an exception + imgLineSize = -1; + } + imgLine = (Guchar *)gmallocn(imgLineSize, sizeof(Guchar)); + imgIdx = nVals; +} + +ImageStream::~ImageStream() { + gfree(imgLine); +} + +void ImageStream::reset() { + str->reset(); +} + +void ImageStream::close() { + str->close(); +} + +GBool ImageStream::getPixel(Guchar *pix) { + int i; + + if (imgIdx >= nVals) { + getLine(); + imgIdx = 0; + } + for (i = 0; i < nComps; ++i) { + pix[i] = imgLine[imgIdx++]; + } + return gTrue; +} + +Guchar *ImageStream::getLine() { + Gulong buf, bitMask; + int bits; + int c; + int i; + + if (nBits == 1) { + for (i = 0; i < nVals; i += 8) { + c = str->getChar(); + imgLine[i+0] = (Guchar)((c >> 7) & 1); + imgLine[i+1] = (Guchar)((c >> 6) & 1); + imgLine[i+2] = (Guchar)((c >> 5) & 1); + imgLine[i+3] = (Guchar)((c >> 4) & 1); + imgLine[i+4] = (Guchar)((c >> 3) & 1); + imgLine[i+5] = (Guchar)((c >> 2) & 1); + imgLine[i+6] = (Guchar)((c >> 1) & 1); + imgLine[i+7] = (Guchar)(c & 1); + } + } else if (nBits == 8) { + Guchar *line = imgLine; + int readChars = str->doGetChars(nVals, line); + for ( ; readChars < nVals; readChars++) line[readChars] = (Guchar)EOF; + } else if (nBits == 16) { + // this is a hack to support 16 bits images, everywhere + // we assume a component fits in 8 bits, with this hack + // we treat 16 bit images as 8 bit ones until it's fixed correctly. + // The hack has another part on GfxImageColorMap::GfxImageColorMap + for (i = 0; i < nVals; ++i) { + imgLine[i] = str->getChar(); + str->getChar(); + } + } else { + bitMask = (1 << nBits) - 1; + buf = 0; + bits = 0; + for (i = 0; i < nVals; ++i) { + if (bits < nBits) { + buf = (buf << 8) | (str->getChar() & 0xff); + bits += 8; + } + imgLine[i] = (Guchar)((buf >> (bits - nBits)) & bitMask); + bits -= nBits; + } + } + return imgLine; +} + +void ImageStream::skipLine() { + int n, i; + + n = (nVals * nBits + 7) >> 3; + for (i = 0; i < n; ++i) { + str->getChar(); + } +} + +//------------------------------------------------------------------------ +// StreamPredictor +//------------------------------------------------------------------------ + +StreamPredictor::StreamPredictor(Stream *strA, int predictorA, + int widthA, int nCompsA, int nBitsA) { + str = strA; + predictor = predictorA; + width = widthA; + nComps = nCompsA; + nBits = nBitsA; + predLine = NULL; + ok = gFalse; + + nVals = width * nComps; + pixBytes = (nComps * nBits + 7) >> 3; + rowBytes = ((nVals * nBits + 7) >> 3) + pixBytes; + if (width <= 0 || nComps <= 0 || nBits <= 0 || + nComps > gfxColorMaxComps || + nBits > 16 || + width >= INT_MAX / nComps || // check for overflow in nVals + nVals >= (INT_MAX - 7) / nBits) { // check for overflow in rowBytes + return; + } + predLine = (Guchar *)gmalloc(rowBytes); + memset(predLine, 0, rowBytes); + predIdx = rowBytes; + + ok = gTrue; +} + +StreamPredictor::~StreamPredictor() { + gfree(predLine); +} + +int StreamPredictor::lookChar() { + if (predIdx >= rowBytes) { + if (!getNextLine()) { + return EOF; + } + } + return predLine[predIdx]; +} + +int StreamPredictor::getChar() { + return doGetChar(); +} + +int StreamPredictor::getChars(int nChars, Guchar *buffer) +{ + for (int i = 0; i < nChars; ++i) { + const int c = doGetChar(); + if (likely(c != EOF)) buffer[i] = c; + else return i; + } + return nChars; +} + +GBool StreamPredictor::getNextLine() { + int curPred; + Guchar upLeftBuf[gfxColorMaxComps * 2 + 1]; + int left, up, upLeft, p, pa, pb, pc; + int c; + Gulong inBuf, outBuf, bitMask; + int inBits, outBits; + int i, j, k, kk; + + // get PNG optimum predictor number + if (predictor >= 10) { + if ((curPred = str->getRawChar()) == EOF) { + return gFalse; + } + curPred += 10; + } else { + curPred = predictor; + } + + // read the raw line, apply PNG (byte) predictor + int *rawCharLine = new int[rowBytes - pixBytes]; + str->getRawChars(rowBytes - pixBytes, rawCharLine); + memset(upLeftBuf, 0, pixBytes + 1); + for (i = pixBytes; i < rowBytes; ++i) { + for (j = pixBytes; j > 0; --j) { + upLeftBuf[j] = upLeftBuf[j-1]; + } + upLeftBuf[0] = predLine[i]; + if ((c = rawCharLine[i - pixBytes]) == EOF) { + if (i > pixBytes) { + // this ought to return false, but some (broken) PDF files + // contain truncated image data, and Adobe apparently reads the + // last partial line + break; + } + delete[] rawCharLine; + return gFalse; + } + switch (curPred) { + case 11: // PNG sub + predLine[i] = predLine[i - pixBytes] + (Guchar)c; + break; + case 12: // PNG up + predLine[i] = predLine[i] + (Guchar)c; + break; + case 13: // PNG average + predLine[i] = ((predLine[i - pixBytes] + predLine[i]) >> 1) + + (Guchar)c; + break; + case 14: // PNG Paeth + left = predLine[i - pixBytes]; + up = predLine[i]; + upLeft = upLeftBuf[pixBytes]; + p = left + up - upLeft; + if ((pa = p - left) < 0) + pa = -pa; + if ((pb = p - up) < 0) + pb = -pb; + if ((pc = p - upLeft) < 0) + pc = -pc; + if (pa <= pb && pa <= pc) + predLine[i] = left + (Guchar)c; + else if (pb <= pc) + predLine[i] = up + (Guchar)c; + else + predLine[i] = upLeft + (Guchar)c; + break; + case 10: // PNG none + default: // no predictor or TIFF predictor + predLine[i] = (Guchar)c; + break; + } + } + delete[] rawCharLine; + + // apply TIFF (component) predictor + if (predictor == 2) { + if (nBits == 1) { + inBuf = predLine[pixBytes - 1]; + for (i = pixBytes; i < rowBytes; i += 8) { + // 1-bit add is just xor + inBuf = (inBuf << 8) | predLine[i]; + predLine[i] ^= inBuf >> nComps; + } + } else if (nBits == 8) { + for (i = pixBytes; i < rowBytes; ++i) { + predLine[i] += predLine[i - nComps]; + } + } else { + memset(upLeftBuf, 0, nComps + 1); + bitMask = (1 << nBits) - 1; + inBuf = outBuf = 0; + inBits = outBits = 0; + j = k = pixBytes; + for (i = 0; i < width; ++i) { + for (kk = 0; kk < nComps; ++kk) { + if (inBits < nBits) { + inBuf = (inBuf << 8) | (predLine[j++] & 0xff); + inBits += 8; + } + upLeftBuf[kk] = (Guchar)((upLeftBuf[kk] + + (inBuf >> (inBits - nBits))) & bitMask); + inBits -= nBits; + outBuf = (outBuf << nBits) | upLeftBuf[kk]; + outBits += nBits; + if (outBits >= 8) { + predLine[k++] = (Guchar)(outBuf >> (outBits - 8)); + outBits -= 8; + } + } + } + if (outBits > 0) { + predLine[k++] = (Guchar)((outBuf << (8 - outBits)) + + (inBuf & ((1 << (8 - outBits)) - 1))); + } + } + } + + // reset to start of line + predIdx = pixBytes; + + return gTrue; +} + +//------------------------------------------------------------------------ +// FileStream +//------------------------------------------------------------------------ + +FileStream::FileStream(FILE *fA, Guint startA, GBool limitedA, + Guint lengthA, Object *dictA): + BaseStream(dictA, lengthA) { + f = fA; + start = startA; + limited = limitedA; + length = lengthA; + bufPtr = bufEnd = buf; + bufPos = start; + savePos = 0; + saved = gFalse; +} + +FileStream::~FileStream() { + close(); +} + +Stream *FileStream::makeSubStream(Guint startA, GBool limitedA, + Guint lengthA, Object *dictA) { + return new FileStream(f, startA, limitedA, lengthA, dictA); +} + +void FileStream::reset() { +#if HAVE_FSEEKO + savePos = (Guint)ftello(f); + fseeko(f, start, SEEK_SET); +#elif HAVE_FSEEK64 + savePos = (Guint)ftell64(f); + fseek64(f, start, SEEK_SET); +#else + savePos = (Guint)ftell(f); + fseek(f, start, SEEK_SET); +#endif + saved = gTrue; + bufPtr = bufEnd = buf; + bufPos = start; +} + +void FileStream::close() { + if (saved) { +#if HAVE_FSEEKO + fseeko(f, savePos, SEEK_SET); +#elif HAVE_FSEEK64 + fseek64(f, savePos, SEEK_SET); +#else + fseek(f, savePos, SEEK_SET); +#endif + saved = gFalse; + } +} + +GBool FileStream::fillBuf() { + int n; + + bufPos += bufEnd - buf; + bufPtr = bufEnd = buf; + if (limited && bufPos >= start + length) { + return gFalse; + } + if (limited && bufPos + fileStreamBufSize > start + length) { + n = start + length - bufPos; + } else { + n = fileStreamBufSize; + } + n = fread(buf, 1, n, f); + bufEnd = buf + n; + if (bufPtr >= bufEnd) { + return gFalse; + } + return gTrue; +} + +void FileStream::setPos(Guint pos, int dir) { + Guint size; + + if (dir >= 0) { +#if HAVE_FSEEKO + fseeko(f, pos, SEEK_SET); +#elif HAVE_FSEEK64 + fseek64(f, pos, SEEK_SET); +#else + fseek(f, pos, SEEK_SET); +#endif + bufPos = pos; + } else { +#if HAVE_FSEEKO + fseeko(f, 0, SEEK_END); + size = (Guint)ftello(f); +#elif HAVE_FSEEK64 + fseek64(f, 0, SEEK_END); + size = (Guint)ftell64(f); +#else + fseek(f, 0, SEEK_END); + size = (Guint)ftell(f); +#endif + if (pos > size) + pos = (Guint)size; +#ifdef __CYGWIN32__ + //~ work around a bug in cygwin's implementation of fseek + rewind(f); +#endif +#if HAVE_FSEEKO + fseeko(f, -(int)pos, SEEK_END); + bufPos = (Guint)ftello(f); +#elif HAVE_FSEEK64 + fseek64(f, -(int)pos, SEEK_END); + bufPos = (Guint)ftell64(f); +#else + fseek(f, -(int)pos, SEEK_END); + bufPos = (Guint)ftell(f); +#endif + } + bufPtr = bufEnd = buf; +} + +void FileStream::moveStart(int delta) { + start += delta; + bufPtr = bufEnd = buf; + bufPos = start; +} + +//------------------------------------------------------------------------ +// CachedFileStream +//------------------------------------------------------------------------ + +CachedFileStream::CachedFileStream(CachedFile *ccA, Guint startA, + GBool limitedA, Guint lengthA, Object *dictA) + : BaseStream(dictA, lengthA) +{ + cc = ccA; + start = startA; + limited = limitedA; + length = lengthA; + bufPtr = bufEnd = buf; + bufPos = start; + savePos = 0; + saved = gFalse; +} + +CachedFileStream::~CachedFileStream() +{ + close(); + cc->decRefCnt(); +} + +Stream *CachedFileStream::makeSubStream(Guint startA, GBool limitedA, + Guint lengthA, Object *dictA) +{ + cc->incRefCnt(); + return new CachedFileStream(cc, startA, limitedA, lengthA, dictA); +} + +void CachedFileStream::reset() +{ + savePos = (Guint)cc->tell(); + cc->seek(start, SEEK_SET); + + saved = gTrue; + bufPtr = bufEnd = buf; + bufPos = start; +} + +void CachedFileStream::close() +{ + if (saved) { + cc->seek(savePos, SEEK_SET); + saved = gFalse; + } +} + +GBool CachedFileStream::fillBuf() +{ + int n; + + bufPos += bufEnd - buf; + bufPtr = bufEnd = buf; + if (limited && bufPos >= start + length) { + return gFalse; + } + if (limited && bufPos + cachedStreamBufSize > start + length) { + n = start + length - bufPos; + } else { + n = cachedStreamBufSize - (bufPos % cachedStreamBufSize); + } + cc->read(buf, 1, n); + bufEnd = buf + n; + if (bufPtr >= bufEnd) { + return gFalse; + } + return gTrue; +} + +void CachedFileStream::setPos(Guint pos, int dir) +{ + Guint size; + + if (dir >= 0) { + cc->seek(pos, SEEK_SET); + bufPos = pos; + } else { + cc->seek(0, SEEK_END); + size = (Guint)cc->tell(); + + if (pos > size) + pos = (Guint)size; + + cc->seek(-(int)pos, SEEK_END); + bufPos = (Guint)cc->tell(); + } + + bufPtr = bufEnd = buf; +} + +void CachedFileStream::moveStart(int delta) +{ + start += delta; + bufPtr = bufEnd = buf; + bufPos = start; +} + +//------------------------------------------------------------------------ +// MemStream +//------------------------------------------------------------------------ + +MemStream::MemStream(char *bufA, Guint startA, Guint lengthA, Object *dictA): + BaseStream(dictA, lengthA) { + buf = bufA; + start = startA; + length = lengthA; + bufEnd = buf + start + length; + bufPtr = buf + start; + needFree = gFalse; +} + +MemStream::~MemStream() { + if (needFree) { + gfree(buf); + } +} + +Stream *MemStream::makeSubStream(Guint startA, GBool limited, + Guint lengthA, Object *dictA) { + MemStream *subStr; + Guint newLength; + + if (!limited || startA + lengthA > start + length) { + newLength = start + length - startA; + } else { + newLength = lengthA; + } + subStr = new MemStream(buf, startA, newLength, dictA); + return subStr; +} + +void MemStream::reset() { + bufPtr = buf + start; +} + +void MemStream::close() { +} + +void MemStream::setPos(Guint pos, int dir) { + Guint i; + + if (dir >= 0) { + i = pos; + } else { + i = start + length - pos; + } + if (i < start) { + i = start; + } else if (i > start + length) { + i = start + length; + } + bufPtr = buf + i; +} + +void MemStream::moveStart(int delta) { + start += delta; + length -= delta; + bufPtr = buf + start; +} + +//------------------------------------------------------------------------ +// EmbedStream +//------------------------------------------------------------------------ + +EmbedStream::EmbedStream(Stream *strA, Object *dictA, + GBool limitedA, Guint lengthA): + BaseStream(dictA, lengthA) { + str = strA; + limited = limitedA; + length = lengthA; +} + +EmbedStream::~EmbedStream() { +} + +Stream *EmbedStream::makeSubStream(Guint start, GBool limitedA, + Guint lengthA, Object *dictA) { + error(-1, "Internal: called makeSubStream() on EmbedStream"); + return NULL; +} + +int EmbedStream::getChar() { + if (limited && !length) { + return EOF; + } + --length; + return str->getChar(); +} + +int EmbedStream::lookChar() { + if (limited && !length) { + return EOF; + } + return str->lookChar(); +} + +void EmbedStream::setPos(Guint pos, int dir) { + error(-1, "Internal: called setPos() on EmbedStream"); +} + +Guint EmbedStream::getStart() { + error(-1, "Internal: called getStart() on EmbedStream"); + return 0; +} + +void EmbedStream::moveStart(int delta) { + error(-1, "Internal: called moveStart() on EmbedStream"); +} + +//------------------------------------------------------------------------ +// ASCIIHexStream +//------------------------------------------------------------------------ + +ASCIIHexStream::ASCIIHexStream(Stream *strA): + FilterStream(strA) { + buf = EOF; + eof = gFalse; +} + +ASCIIHexStream::~ASCIIHexStream() { + delete str; +} + +void ASCIIHexStream::reset() { + str->reset(); + buf = EOF; + eof = gFalse; +} + +int ASCIIHexStream::lookChar() { + int c1, c2, x; + + if (buf != EOF) + return buf; + if (eof) { + buf = EOF; + return EOF; + } + do { + c1 = str->getChar(); + } while (isspace(c1)); + if (c1 == '>') { + eof = gTrue; + buf = EOF; + return buf; + } + do { + c2 = str->getChar(); + } while (isspace(c2)); + if (c2 == '>') { + eof = gTrue; + c2 = '0'; + } + if (c1 >= '0' && c1 <= '9') { + x = (c1 - '0') << 4; + } else if (c1 >= 'A' && c1 <= 'F') { + x = (c1 - 'A' + 10) << 4; + } else if (c1 >= 'a' && c1 <= 'f') { + x = (c1 - 'a' + 10) << 4; + } else if (c1 == EOF) { + eof = gTrue; + x = 0; + } else { + error(getPos(), "Illegal character <%02x> in ASCIIHex stream", c1); + x = 0; + } + if (c2 >= '0' && c2 <= '9') { + x += c2 - '0'; + } else if (c2 >= 'A' && c2 <= 'F') { + x += c2 - 'A' + 10; + } else if (c2 >= 'a' && c2 <= 'f') { + x += c2 - 'a' + 10; + } else if (c2 == EOF) { + eof = gTrue; + x = 0; + } else { + error(getPos(), "Illegal character <%02x> in ASCIIHex stream", c2); + } + buf = x & 0xff; + return buf; +} + +GooString *ASCIIHexStream::getPSFilter(int psLevel, char *indent) { + GooString *s; + + if (psLevel < 2) { + return NULL; + } + if (!(s = str->getPSFilter(psLevel, indent))) { + return NULL; + } + s->append(indent)->append("/ASCIIHexDecode filter\n"); + return s; +} + +GBool ASCIIHexStream::isBinary(GBool last) { + return str->isBinary(gFalse); +} + +//------------------------------------------------------------------------ +// ASCII85Stream +//------------------------------------------------------------------------ + +ASCII85Stream::ASCII85Stream(Stream *strA): + FilterStream(strA) { + index = n = 0; + eof = gFalse; +} + +ASCII85Stream::~ASCII85Stream() { + delete str; +} + +void ASCII85Stream::reset() { + str->reset(); + index = n = 0; + eof = gFalse; +} + +int ASCII85Stream::lookChar() { + int k; + Gulong t; + + if (index >= n) { + if (eof) + return EOF; + index = 0; + do { + c[0] = str->getChar(); + } while (Lexer::isSpace(c[0])); + if (c[0] == '~' || c[0] == EOF) { + eof = gTrue; + n = 0; + return EOF; + } else if (c[0] == 'z') { + b[0] = b[1] = b[2] = b[3] = 0; + n = 4; + } else { + for (k = 1; k < 5; ++k) { + do { + c[k] = str->getChar(); + } while (Lexer::isSpace(c[k])); + if (c[k] == '~' || c[k] == EOF) + break; + } + n = k - 1; + if (k < 5 && (c[k] == '~' || c[k] == EOF)) { + for (++k; k < 5; ++k) + c[k] = 0x21 + 84; + eof = gTrue; + } + t = 0; + for (k = 0; k < 5; ++k) + t = t * 85 + (c[k] - 0x21); + for (k = 3; k >= 0; --k) { + b[k] = (int)(t & 0xff); + t >>= 8; + } + } + } + return b[index]; +} + +GooString *ASCII85Stream::getPSFilter(int psLevel, char *indent) { + GooString *s; + + if (psLevel < 2) { + return NULL; + } + if (!(s = str->getPSFilter(psLevel, indent))) { + return NULL; + } + s->append(indent)->append("/ASCII85Decode filter\n"); + return s; +} + +GBool ASCII85Stream::isBinary(GBool last) { + return str->isBinary(gFalse); +} + +//------------------------------------------------------------------------ +// LZWStream +//------------------------------------------------------------------------ + +LZWStream::LZWStream(Stream *strA, int predictor, int columns, int colors, + int bits, int earlyA): + FilterStream(strA) { + if (predictor != 1) { + pred = new StreamPredictor(this, predictor, columns, colors, bits); + if (!pred->isOk()) { + delete pred; + pred = NULL; + } + } else { + pred = NULL; + } + early = earlyA; + eof = gFalse; + inputBits = 0; + clearTable(); +} + +LZWStream::~LZWStream() { + if (pred) { + delete pred; + } + delete str; +} + +int LZWStream::getChar() { + if (pred) { + return pred->getChar(); + } + if (eof) { + return EOF; + } + if (seqIndex >= seqLength) { + if (!processNextCode()) { + return EOF; + } + } + return seqBuf[seqIndex++]; +} + +int LZWStream::lookChar() { + if (pred) { + return pred->lookChar(); + } + if (eof) { + return EOF; + } + if (seqIndex >= seqLength) { + if (!processNextCode()) { + return EOF; + } + } + return seqBuf[seqIndex]; +} + +void LZWStream::getRawChars(int nChars, int *buffer) { + for (int i = 0; i < nChars; ++i) + buffer[i] = doGetRawChar(); +} + +int LZWStream::getRawChar() { + return doGetRawChar(); +} + +void LZWStream::reset() { + str->reset(); + eof = gFalse; + inputBits = 0; + clearTable(); +} + +GBool LZWStream::processNextCode() { + int code; + int nextLength; + int i, j; + + // check for EOF + if (eof) { + return gFalse; + } + + // check for eod and clear-table codes + start: + code = getCode(); + if (code == EOF || code == 257) { + eof = gTrue; + return gFalse; + } + if (code == 256) { + clearTable(); + goto start; + } + if (nextCode >= 4097) { + error(getPos(), "Bad LZW stream - expected clear-table code"); + clearTable(); + } + + // process the next code + nextLength = seqLength + 1; + if (code < 256) { + seqBuf[0] = code; + seqLength = 1; + } else if (code < nextCode) { + seqLength = table[code].length; + for (i = seqLength - 1, j = code; i > 0; --i) { + seqBuf[i] = table[j].tail; + j = table[j].head; + } + seqBuf[0] = j; + } else if (code == nextCode) { + seqBuf[seqLength] = newChar; + ++seqLength; + } else { + error(getPos(), "Bad LZW stream - unexpected code"); + eof = gTrue; + return gFalse; + } + newChar = seqBuf[0]; + if (first) { + first = gFalse; + } else { + table[nextCode].length = nextLength; + table[nextCode].head = prevCode; + table[nextCode].tail = newChar; + ++nextCode; + if (nextCode + early == 512) + nextBits = 10; + else if (nextCode + early == 1024) + nextBits = 11; + else if (nextCode + early == 2048) + nextBits = 12; + } + prevCode = code; + + // reset buffer + seqIndex = 0; + + return gTrue; +} + +void LZWStream::clearTable() { + nextCode = 258; + nextBits = 9; + seqIndex = seqLength = 0; + first = gTrue; +} + +int LZWStream::getCode() { + int c; + int code; + + while (inputBits < nextBits) { + if ((c = str->getChar()) == EOF) + return EOF; + inputBuf = (inputBuf << 8) | (c & 0xff); + inputBits += 8; + } + code = (inputBuf >> (inputBits - nextBits)) & ((1 << nextBits) - 1); + inputBits -= nextBits; + return code; +} + +GooString *LZWStream::getPSFilter(int psLevel, char *indent) { + GooString *s; + + if (psLevel < 2 || pred) { + return NULL; + } + if (!(s = str->getPSFilter(psLevel, indent))) { + return NULL; + } + s->append(indent)->append("<< "); + if (!early) { + s->append("/EarlyChange 0 "); + } + s->append(">> /LZWDecode filter\n"); + return s; +} + +GBool LZWStream::isBinary(GBool last) { + return str->isBinary(gTrue); +} + +//------------------------------------------------------------------------ +// RunLengthStream +//------------------------------------------------------------------------ + +RunLengthStream::RunLengthStream(Stream *strA): + FilterStream(strA) { + bufPtr = bufEnd = buf; + eof = gFalse; +} + +RunLengthStream::~RunLengthStream() { + delete str; +} + +void RunLengthStream::reset() { + str->reset(); + bufPtr = bufEnd = buf; + eof = gFalse; +} + +GooString *RunLengthStream::getPSFilter(int psLevel, char *indent) { + GooString *s; + + if (psLevel < 2) { + return NULL; + } + if (!(s = str->getPSFilter(psLevel, indent))) { + return NULL; + } + s->append(indent)->append("/RunLengthDecode filter\n"); + return s; +} + +GBool RunLengthStream::isBinary(GBool last) { + return str->isBinary(gTrue); +} + +GBool RunLengthStream::fillBuf() { + int c; + int n, i; + + if (eof) + return gFalse; + c = str->getChar(); + if (c == 0x80 || c == EOF) { + eof = gTrue; + return gFalse; + } + if (c < 0x80) { + n = c + 1; + for (i = 0; i < n; ++i) + buf[i] = (char)str->getChar(); + } else { + n = 0x101 - c; + c = str->getChar(); + for (i = 0; i < n; ++i) + buf[i] = (char)c; + } + bufPtr = buf; + bufEnd = buf + n; + return gTrue; +} + +//------------------------------------------------------------------------ +// CCITTFaxStream +//------------------------------------------------------------------------ + +CCITTFaxStream::CCITTFaxStream(Stream *strA, int encodingA, GBool endOfLineA, + GBool byteAlignA, int columnsA, int rowsA, + GBool endOfBlockA, GBool blackA): + FilterStream(strA) { + encoding = encodingA; + endOfLine = endOfLineA; + byteAlign = byteAlignA; + columns = columnsA; + if (columns < 1) { + columns = 1; + } else if (columns > INT_MAX - 2) { + columns = INT_MAX - 2; + } + rows = rowsA; + endOfBlock = endOfBlockA; + black = blackA; + // 0 <= codingLine[0] < codingLine[1] < ... < codingLine[n] = columns + // ---> max codingLine size = columns + 1 + // refLine has one extra guard entry at the end + // ---> max refLine size = columns + 2 + codingLine = (int *)gmallocn_checkoverflow(columns + 1, sizeof(int)); + refLine = (int *)gmallocn_checkoverflow(columns + 2, sizeof(int)); + + if (codingLine != NULL && refLine != NULL) { + eof = gFalse; + codingLine[0] = columns; + } else { + eof = gTrue; + } + row = 0; + nextLine2D = encoding < 0; + inputBits = 0; + a0i = 0; + outputBits = 0; + + buf = EOF; +} + +CCITTFaxStream::~CCITTFaxStream() { + delete str; + gfree(refLine); + gfree(codingLine); +} + +void CCITTFaxStream::unfilteredReset () { + str->reset(); + + row = 0; + nextLine2D = encoding < 0; + inputBits = 0; + a0i = 0; + outputBits = 0; + buf = EOF; +} + +void CCITTFaxStream::reset() { + short code1; + + unfilteredReset(); + + if (codingLine != NULL && refLine != NULL) { + eof = gFalse; + codingLine[0] = columns; + } else { + eof = gTrue; + } + + // skip any initial zero bits and end-of-line marker, and get the 2D + // encoding tag + while ((code1 = lookBits(12)) == 0) { + eatBits(1); + } + if (code1 == 0x001) { + eatBits(12); + } + if (encoding > 0) { + nextLine2D = !lookBits(1); + eatBits(1); + } +} + +inline void CCITTFaxStream::addPixels(int a1, int blackPixels) { + if (a1 > codingLine[a0i]) { + if (a1 > columns) { + error(getPos(), "CCITTFax row is wrong length (%d)", a1); + err = gTrue; + a1 = columns; + } + if ((a0i & 1) ^ blackPixels) { + ++a0i; + } + codingLine[a0i] = a1; + } +} + +inline void CCITTFaxStream::addPixelsNeg(int a1, int blackPixels) { + if (a1 > codingLine[a0i]) { + if (a1 > columns) { + error(getPos(), "CCITTFax row is wrong length (%d)", a1); + err = gTrue; + a1 = columns; + } + if ((a0i & 1) ^ blackPixels) { + ++a0i; + } + codingLine[a0i] = a1; + } else if (a1 < codingLine[a0i]) { + if (a1 < 0) { + error(getPos(), "Invalid CCITTFax code"); + err = gTrue; + a1 = 0; + } + while (a0i > 0 && a1 <= codingLine[a0i - 1]) { + --a0i; + } + codingLine[a0i] = a1; + } +} + +int CCITTFaxStream::lookChar() { + short code1, code2, code3; + int b1i, blackPixels, i, bits; + GBool gotEOL; + + if (buf != EOF) { + return buf; + } + + // read the next row + if (outputBits == 0) { + + // if at eof just return EOF + if (eof) { + return EOF; + } + + err = gFalse; + + // 2-D encoding + if (nextLine2D) { + for (i = 0; codingLine[i] < columns; ++i) { + refLine[i] = codingLine[i]; + } + refLine[i++] = columns; + refLine[i] = columns; + codingLine[0] = 0; + a0i = 0; + b1i = 0; + blackPixels = 0; + // invariant: + // refLine[b1i-1] <= codingLine[a0i] < refLine[b1i] < refLine[b1i+1] + // <= columns + // exception at left edge: + // codingLine[a0i = 0] = refLine[b1i = 0] = 0 is possible + // exception at right edge: + // refLine[b1i] = refLine[b1i+1] = columns is possible + while (codingLine[a0i] < columns) { + code1 = getTwoDimCode(); + switch (code1) { + case twoDimPass: + addPixels(refLine[b1i + 1], blackPixels); + if (refLine[b1i + 1] < columns) { + b1i += 2; + } + break; + case twoDimHoriz: + code1 = code2 = 0; + if (blackPixels) { + do { + code1 += code3 = getBlackCode(); + } while (code3 >= 64); + do { + code2 += code3 = getWhiteCode(); + } while (code3 >= 64); + } else { + do { + code1 += code3 = getWhiteCode(); + } while (code3 >= 64); + do { + code2 += code3 = getBlackCode(); + } while (code3 >= 64); + } + addPixels(codingLine[a0i] + code1, blackPixels); + if (codingLine[a0i] < columns) { + addPixels(codingLine[a0i] + code2, blackPixels ^ 1); + } + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { + b1i += 2; + } + break; + case twoDimVertR3: + addPixels(refLine[b1i] + 3, blackPixels); + blackPixels ^= 1; + if (codingLine[a0i] < columns) { + ++b1i; + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { + b1i += 2; + } + } + break; + case twoDimVertR2: + addPixels(refLine[b1i] + 2, blackPixels); + blackPixels ^= 1; + if (codingLine[a0i] < columns) { + ++b1i; + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { + b1i += 2; + } + } + break; + case twoDimVertR1: + addPixels(refLine[b1i] + 1, blackPixels); + blackPixels ^= 1; + if (codingLine[a0i] < columns) { + ++b1i; + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { + b1i += 2; + } + } + break; + case twoDimVert0: + addPixels(refLine[b1i], blackPixels); + blackPixels ^= 1; + if (codingLine[a0i] < columns) { + ++b1i; + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { + b1i += 2; + } + } + break; + case twoDimVertL3: + addPixelsNeg(refLine[b1i] - 3, blackPixels); + blackPixels ^= 1; + if (codingLine[a0i] < columns) { + if (b1i > 0) { + --b1i; + } else { + ++b1i; + } + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { + b1i += 2; + } + } + break; + case twoDimVertL2: + addPixelsNeg(refLine[b1i] - 2, blackPixels); + blackPixels ^= 1; + if (codingLine[a0i] < columns) { + if (b1i > 0) { + --b1i; + } else { + ++b1i; + } + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { + b1i += 2; + } + } + break; + case twoDimVertL1: + addPixelsNeg(refLine[b1i] - 1, blackPixels); + blackPixels ^= 1; + if (codingLine[a0i] < columns) { + if (b1i > 0) { + --b1i; + } else { + ++b1i; + } + while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { + b1i += 2; + } + } + break; + case EOF: + addPixels(columns, 0); + eof = gTrue; + break; + default: + error(getPos(), "Bad 2D code %04x in CCITTFax stream", code1); + addPixels(columns, 0); + err = gTrue; + break; + } + } + + // 1-D encoding + } else { + codingLine[0] = 0; + a0i = 0; + blackPixels = 0; + while (codingLine[a0i] < columns) { + code1 = 0; + if (blackPixels) { + do { + code1 += code3 = getBlackCode(); + } while (code3 >= 64); + } else { + do { + code1 += code3 = getWhiteCode(); + } while (code3 >= 64); + } + addPixels(codingLine[a0i] + code1, blackPixels); + blackPixels ^= 1; + } + } + + // byte-align the row + if (byteAlign) { + inputBits &= ~7; + } + + // check for end-of-line marker, skipping over any extra zero bits + gotEOL = gFalse; + if (!endOfBlock && row == rows - 1) { + eof = gTrue; + } else { + code1 = lookBits(12); + while (code1 == 0) { + eatBits(1); + code1 = lookBits(12); + } + if (code1 == 0x001) { + eatBits(12); + gotEOL = gTrue; + } else if (code1 == EOF) { + eof = gTrue; + } + } + + // get 2D encoding tag + if (!eof && encoding > 0) { + nextLine2D = !lookBits(1); + eatBits(1); + } + + // check for end-of-block marker + if (endOfBlock && gotEOL) { + code1 = lookBits(12); + if (code1 == 0x001) { + eatBits(12); + if (encoding > 0) { + lookBits(1); + eatBits(1); + } + if (encoding >= 0) { + for (i = 0; i < 4; ++i) { + code1 = lookBits(12); + if (code1 != 0x001) { + error(getPos(), "Bad RTC code in CCITTFax stream"); + } + eatBits(12); + if (encoding > 0) { + lookBits(1); + eatBits(1); + } + } + } + eof = gTrue; + } + + // look for an end-of-line marker after an error -- we only do + // this if we know the stream contains end-of-line markers because + // the "just plow on" technique tends to work better otherwise + } else if (err && endOfLine) { + while (1) { + code1 = lookBits(13); + if (code1 == EOF) { + eof = gTrue; + return EOF; + } + if ((code1 >> 1) == 0x001) { + break; + } + eatBits(1); + } + eatBits(12); + if (encoding > 0) { + eatBits(1); + nextLine2D = !(code1 & 1); + } + } + + // set up for output + if (codingLine[0] > 0) { + outputBits = codingLine[a0i = 0]; + } else { + outputBits = codingLine[a0i = 1]; + } + + ++row; + } + + // get a byte + if (outputBits >= 8) { + buf = (a0i & 1) ? 0x00 : 0xff; + outputBits -= 8; + if (outputBits == 0 && codingLine[a0i] < columns) { + ++a0i; + outputBits = codingLine[a0i] - codingLine[a0i - 1]; + } + } else { + bits = 8; + buf = 0; + do { + if (outputBits > bits) { + buf <<= bits; + if (!(a0i & 1)) { + buf |= 0xff >> (8 - bits); + } + outputBits -= bits; + bits = 0; + } else { + buf <<= outputBits; + if (!(a0i & 1)) { + buf |= 0xff >> (8 - outputBits); + } + bits -= outputBits; + outputBits = 0; + if (codingLine[a0i] < columns) { + ++a0i; + outputBits = codingLine[a0i] - codingLine[a0i - 1]; + } else if (bits > 0) { + buf <<= bits; + bits = 0; + } + } + } while (bits); + } + if (black) { + buf ^= 0xff; + } + return buf; +} + +short CCITTFaxStream::getTwoDimCode() { + short code; + const CCITTCode *p; + int n; + + code = 0; // make gcc happy + if (endOfBlock) { + code = lookBits(7); + p = &twoDimTab1[code]; + if (p->bits > 0) { + eatBits(p->bits); + return p->n; + } + } else { + for (n = 1; n <= 7; ++n) { + code = lookBits(n); + if (n < 7) { + code <<= 7 - n; + } + p = &twoDimTab1[code]; + if (p->bits == n) { + eatBits(n); + return p->n; + } + } + } + error(getPos(), "Bad two dim code (%04x) in CCITTFax stream", code); + return EOF; +} + +short CCITTFaxStream::getWhiteCode() { + short code; + const CCITTCode *p; + int n; + + code = 0; // make gcc happy + if (endOfBlock) { + code = lookBits(12); + if (code == EOF) { + return 1; + } + if ((code >> 5) == 0) { + p = &whiteTab1[code]; + } else { + p = &whiteTab2[code >> 3]; + } + if (p->bits > 0) { + eatBits(p->bits); + return p->n; + } + } else { + for (n = 1; n <= 9; ++n) { + code = lookBits(n); + if (code == EOF) { + return 1; + } + if (n < 9) { + code <<= 9 - n; + } + p = &whiteTab2[code]; + if (p->bits == n) { + eatBits(n); + return p->n; + } + } + for (n = 11; n <= 12; ++n) { + code = lookBits(n); + if (code == EOF) { + return 1; + } + if (n < 12) { + code <<= 12 - n; + } + p = &whiteTab1[code]; + if (p->bits == n) { + eatBits(n); + return p->n; + } + } + } + error(getPos(), "Bad white code (%04x) in CCITTFax stream", code); + // eat a bit and return a positive number so that the caller doesn't + // go into an infinite loop + eatBits(1); + return 1; +} + +short CCITTFaxStream::getBlackCode() { + short code; + const CCITTCode *p; + int n; + + code = 0; // make gcc happy + if (endOfBlock) { + code = lookBits(13); + if (code == EOF) { + return 1; + } + if ((code >> 7) == 0) { + p = &blackTab1[code]; + } else if ((code >> 9) == 0 && (code >> 7) != 0) { + p = &blackTab2[(code >> 1) - 64]; + } else { + p = &blackTab3[code >> 7]; + } + if (p->bits > 0) { + eatBits(p->bits); + return p->n; + } + } else { + for (n = 2; n <= 6; ++n) { + code = lookBits(n); + if (code == EOF) { + return 1; + } + if (n < 6) { + code <<= 6 - n; + } + p = &blackTab3[code]; + if (p->bits == n) { + eatBits(n); + return p->n; + } + } + for (n = 7; n <= 12; ++n) { + code = lookBits(n); + if (code == EOF) { + return 1; + } + if (n < 12) { + code <<= 12 - n; + } + if (code >= 64) { + p = &blackTab2[code - 64]; + if (p->bits == n) { + eatBits(n); + return p->n; + } + } + } + for (n = 10; n <= 13; ++n) { + code = lookBits(n); + if (code == EOF) { + return 1; + } + if (n < 13) { + code <<= 13 - n; + } + p = &blackTab1[code]; + if (p->bits == n) { + eatBits(n); + return p->n; + } + } + } + error(getPos(), "Bad black code (%04x) in CCITTFax stream", code); + // eat a bit and return a positive number so that the caller doesn't + // go into an infinite loop + eatBits(1); + return 1; +} + +short CCITTFaxStream::lookBits(int n) { + int c; + + while (inputBits < n) { + if ((c = str->getChar()) == EOF) { + if (inputBits == 0) { + return EOF; + } + // near the end of the stream, the caller may ask for more bits + // than are available, but there may still be a valid code in + // however many bits are available -- we need to return correct + // data in this case + return (inputBuf << (n - inputBits)) & (0xffff >> (16 - n)); + } + inputBuf = (inputBuf << 8) + c; + inputBits += 8; + } + return (inputBuf >> (inputBits - n)) & (0xffff >> (16 - n)); +} + +GooString *CCITTFaxStream::getPSFilter(int psLevel, char *indent) { + GooString *s; + char s1[50]; + + if (psLevel < 2) { + return NULL; + } + if (!(s = str->getPSFilter(psLevel, indent))) { + return NULL; + } + s->append(indent)->append("<< "); + if (encoding != 0) { + sprintf(s1, "/K %d ", encoding); + s->append(s1); + } + if (endOfLine) { + s->append("/EndOfLine true "); + } + if (byteAlign) { + s->append("/EncodedByteAlign true "); + } + sprintf(s1, "/Columns %d ", columns); + s->append(s1); + if (rows != 0) { + sprintf(s1, "/Rows %d ", rows); + s->append(s1); + } + if (!endOfBlock) { + s->append("/EndOfBlock false "); + } + if (black) { + s->append("/BlackIs1 true "); + } + s->append(">> /CCITTFaxDecode filter\n"); + return s; +} + +GBool CCITTFaxStream::isBinary(GBool last) { + return str->isBinary(gTrue); +} + +#ifndef ENABLE_LIBJPEG + +//------------------------------------------------------------------------ +// DCTStream +//------------------------------------------------------------------------ + +// IDCT constants (20.12 fixed point format) +#define dctCos1 4017 // cos(pi/16) +#define dctSin1 799 // sin(pi/16) +#define dctCos3 3406 // cos(3*pi/16) +#define dctSin3 2276 // sin(3*pi/16) +#define dctCos6 1567 // cos(6*pi/16) +#define dctSin6 3784 // sin(6*pi/16) +#define dctSqrt2 5793 // sqrt(2) +#define dctSqrt1d2 2896 // sqrt(2) / 2 + +// color conversion parameters (16.16 fixed point format) +#define dctCrToR 91881 // 1.4020 +#define dctCbToG -22553 // -0.3441363 +#define dctCrToG -46802 // -0.71413636 +#define dctCbToB 116130 // 1.772 + +// clip [-256,511] --> [0,255] +#define dctClipOffset 256 +static Guchar dctClip[768]; +static int dctClipInit = 0; + +// zig zag decode map +static const int dctZigZag[64] = { + 0, + 1, 8, + 16, 9, 2, + 3, 10, 17, 24, + 32, 25, 18, 11, 4, + 5, 12, 19, 26, 33, 40, + 48, 41, 34, 27, 20, 13, 6, + 7, 14, 21, 28, 35, 42, 49, 56, + 57, 50, 43, 36, 29, 22, 15, + 23, 30, 37, 44, 51, 58, + 59, 52, 45, 38, 31, + 39, 46, 53, 60, + 61, 54, 47, + 55, 62, + 63 +}; + +DCTStream::DCTStream(Stream *strA, int colorXformA): + FilterStream(strA) { + int i, j; + + colorXform = colorXformA; + progressive = interleaved = gFalse; + width = height = 0; + mcuWidth = mcuHeight = 0; + numComps = 0; + comp = 0; + x = y = dy = 0; + for (i = 0; i < 4; ++i) { + for (j = 0; j < 32; ++j) { + rowBuf[i][j] = NULL; + } + frameBuf[i] = NULL; + } + + if (!dctClipInit) { + for (i = -256; i < 0; ++i) + dctClip[dctClipOffset + i] = 0; + for (i = 0; i < 256; ++i) + dctClip[dctClipOffset + i] = i; + for (i = 256; i < 512; ++i) + dctClip[dctClipOffset + i] = 255; + dctClipInit = 1; + } +} + +DCTStream::~DCTStream() { + close(); + delete str; +} + +void DCTStream::unfilteredReset() { + str->reset(); + + progressive = interleaved = gFalse; + width = height = 0; + numComps = 0; + numQuantTables = 0; + numDCHuffTables = 0; + numACHuffTables = 0; + gotJFIFMarker = gFalse; + gotAdobeMarker = gFalse; + restartInterval = 0; +} + + +void DCTStream::reset() { + int i, j; + + unfilteredReset(); + + if (!readHeader()) { + y = height; + return; + } + + // compute MCU size + if (numComps == 1) { + compInfo[0].hSample = compInfo[0].vSample = 1; + } + mcuWidth = compInfo[0].hSample; + mcuHeight = compInfo[0].vSample; + for (i = 1; i < numComps; ++i) { + if (compInfo[i].hSample > mcuWidth) { + mcuWidth = compInfo[i].hSample; + } + if (compInfo[i].vSample > mcuHeight) { + mcuHeight = compInfo[i].vSample; + } + } + mcuWidth *= 8; + mcuHeight *= 8; + + // figure out color transform + if (colorXform == -1) { + if (numComps == 3) { + if (gotJFIFMarker) { + colorXform = 1; + } else if (compInfo[0].id == 82 && compInfo[1].id == 71 && + compInfo[2].id == 66) { // ASCII "RGB" + colorXform = 0; + } else { + colorXform = 1; + } + } else { + colorXform = 0; + } + } + + if (progressive || !interleaved) { + + // allocate a buffer for the whole image + bufWidth = ((width + mcuWidth - 1) / mcuWidth) * mcuWidth; + bufHeight = ((height + mcuHeight - 1) / mcuHeight) * mcuHeight; + if (bufWidth <= 0 || bufHeight <= 0 || + bufWidth > INT_MAX / bufWidth / (int)sizeof(int)) { + error(getPos(), "Invalid image size in DCT stream"); + y = height; + return; + } + for (i = 0; i < numComps; ++i) { + frameBuf[i] = (int *)gmallocn(bufWidth * bufHeight, sizeof(int)); + memset(frameBuf[i], 0, bufWidth * bufHeight * sizeof(int)); + } + + // read the image data + do { + restartMarker = 0xd0; + restart(); + readScan(); + } while (readHeader()); + + // decode + decodeImage(); + + // initialize counters + comp = 0; + x = 0; + y = 0; + + } else { + + // allocate a buffer for one row of MCUs + bufWidth = ((width + mcuWidth - 1) / mcuWidth) * mcuWidth; + for (i = 0; i < numComps; ++i) { + for (j = 0; j < mcuHeight; ++j) { + rowBuf[i][j] = (Guchar *)gmallocn(bufWidth, sizeof(Guchar)); + } + } + + // initialize counters + comp = 0; + x = 0; + y = 0; + dy = mcuHeight; + + restartMarker = 0xd0; + restart(); + } +} + +void DCTStream::close() { + int i, j; + + for (i = 0; i < 4; ++i) { + for (j = 0; j < 32; ++j) { + gfree(rowBuf[i][j]); + rowBuf[i][j] = NULL; + } + gfree(frameBuf[i]); + frameBuf[i] = NULL; + } + FilterStream::close(); +} + +int DCTStream::getChar() { + int c; + + if (y >= height) { + return EOF; + } + if (progressive || !interleaved) { + c = frameBuf[comp][y * bufWidth + x]; + if (++comp == numComps) { + comp = 0; + if (++x == width) { + x = 0; + ++y; + } + } + } else { + if (dy >= mcuHeight) { + if (!readMCURow()) { + y = height; + return EOF; + } + comp = 0; + x = 0; + dy = 0; + } + c = rowBuf[comp][dy][x]; + if (++comp == numComps) { + comp = 0; + if (++x == width) { + x = 0; + ++y; + ++dy; + if (y == height) { + readTrailer(); + } + } + } + } + return c; +} + +int DCTStream::lookChar() { + if (y >= height) { + return EOF; + } + if (progressive || !interleaved) { + return frameBuf[comp][y * bufWidth + x]; + } else { + if (dy >= mcuHeight) { + if (!readMCURow()) { + y = height; + return EOF; + } + comp = 0; + x = 0; + dy = 0; + } + return rowBuf[comp][dy][x]; + } +} + +void DCTStream::restart() { + int i; + + inputBits = 0; + restartCtr = restartInterval; + for (i = 0; i < numComps; ++i) { + compInfo[i].prevDC = 0; + } + eobRun = 0; +} + +// Read one row of MCUs from a sequential JPEG stream. +GBool DCTStream::readMCURow() { + int data1[64]; + Guchar data2[64]; + Guchar *p1, *p2; + int pY, pCb, pCr, pR, pG, pB; + int h, v, horiz, vert, hSub, vSub; + int x1, x2, y2, x3, y3, x4, y4, x5, y5, cc, i; + int c; + + for (x1 = 0; x1 < width; x1 += mcuWidth) { + + // deal with restart marker + if (restartInterval > 0 && restartCtr == 0) { + c = readMarker(); + if (c != restartMarker) { + error(getPos(), "Bad DCT data: incorrect restart marker"); + return gFalse; + } + if (++restartMarker == 0xd8) + restartMarker = 0xd0; + restart(); + } + + // read one MCU + for (cc = 0; cc < numComps; ++cc) { + h = compInfo[cc].hSample; + v = compInfo[cc].vSample; + horiz = mcuWidth / h; + vert = mcuHeight / v; + hSub = horiz / 8; + vSub = vert / 8; + for (y2 = 0; y2 < mcuHeight; y2 += vert) { + for (x2 = 0; x2 < mcuWidth; x2 += horiz) { + if (!readDataUnit(&dcHuffTables[scanInfo.dcHuffTable[cc]], + &acHuffTables[scanInfo.acHuffTable[cc]], + &compInfo[cc].prevDC, + data1)) { + return gFalse; + } + transformDataUnit(quantTables[compInfo[cc].quantTable], + data1, data2); + if (hSub == 1 && vSub == 1) { + for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) { + p1 = &rowBuf[cc][y2+y3][x1+x2]; + p1[0] = data2[i]; + p1[1] = data2[i+1]; + p1[2] = data2[i+2]; + p1[3] = data2[i+3]; + p1[4] = data2[i+4]; + p1[5] = data2[i+5]; + p1[6] = data2[i+6]; + p1[7] = data2[i+7]; + } + } else if (hSub == 2 && vSub == 2) { + for (y3 = 0, i = 0; y3 < 16; y3 += 2, i += 8) { + p1 = &rowBuf[cc][y2+y3][x1+x2]; + p2 = &rowBuf[cc][y2+y3+1][x1+x2]; + p1[0] = p1[1] = p2[0] = p2[1] = data2[i]; + p1[2] = p1[3] = p2[2] = p2[3] = data2[i+1]; + p1[4] = p1[5] = p2[4] = p2[5] = data2[i+2]; + p1[6] = p1[7] = p2[6] = p2[7] = data2[i+3]; + p1[8] = p1[9] = p2[8] = p2[9] = data2[i+4]; + p1[10] = p1[11] = p2[10] = p2[11] = data2[i+5]; + p1[12] = p1[13] = p2[12] = p2[13] = data2[i+6]; + p1[14] = p1[15] = p2[14] = p2[15] = data2[i+7]; + } + } else { + i = 0; + for (y3 = 0, y4 = 0; y3 < 8; ++y3, y4 += vSub) { + for (x3 = 0, x4 = 0; x3 < 8; ++x3, x4 += hSub) { + for (y5 = 0; y5 < vSub; ++y5) + for (x5 = 0; x5 < hSub; ++x5) + rowBuf[cc][y2+y4+y5][x1+x2+x4+x5] = data2[i]; + ++i; + } + } + } + } + } + } + --restartCtr; + + // color space conversion + if (colorXform) { + // convert YCbCr to RGB + if (numComps == 3) { + for (y2 = 0; y2 < mcuHeight; ++y2) { + for (x2 = 0; x2 < mcuWidth; ++x2) { + pY = rowBuf[0][y2][x1+x2]; + pCb = rowBuf[1][y2][x1+x2] - 128; + pCr = rowBuf[2][y2][x1+x2] - 128; + pR = ((pY << 16) + dctCrToR * pCr + 32768) >> 16; + rowBuf[0][y2][x1+x2] = dctClip[dctClipOffset + pR]; + pG = ((pY << 16) + dctCbToG * pCb + dctCrToG * pCr + 32768) >> 16; + rowBuf[1][y2][x1+x2] = dctClip[dctClipOffset + pG]; + pB = ((pY << 16) + dctCbToB * pCb + 32768) >> 16; + rowBuf[2][y2][x1+x2] = dctClip[dctClipOffset + pB]; + } + } + // convert YCbCrK to CMYK (K is passed through unchanged) + } else if (numComps == 4) { + for (y2 = 0; y2 < mcuHeight; ++y2) { + for (x2 = 0; x2 < mcuWidth; ++x2) { + pY = rowBuf[0][y2][x1+x2]; + pCb = rowBuf[1][y2][x1+x2] - 128; + pCr = rowBuf[2][y2][x1+x2] - 128; + pR = ((pY << 16) + dctCrToR * pCr + 32768) >> 16; + rowBuf[0][y2][x1+x2] = 255 - dctClip[dctClipOffset + pR]; + pG = ((pY << 16) + dctCbToG * pCb + dctCrToG * pCr + 32768) >> 16; + rowBuf[1][y2][x1+x2] = 255 - dctClip[dctClipOffset + pG]; + pB = ((pY << 16) + dctCbToB * pCb + 32768) >> 16; + rowBuf[2][y2][x1+x2] = 255 - dctClip[dctClipOffset + pB]; + } + } + } + } + } + return gTrue; +} + +// Read one scan from a progressive or non-interleaved JPEG stream. +void DCTStream::readScan() { + int data[64]; + int x1, y1, dx1, dy1, x2, y2, y3, cc, i; + int h, v, horiz, vert, vSub; + int *p1; + int c; + + if (scanInfo.numComps == 1) { + for (cc = 0; cc < numComps; ++cc) { + if (scanInfo.comp[cc]) { + break; + } + } + dx1 = mcuWidth / compInfo[cc].hSample; + dy1 = mcuHeight / compInfo[cc].vSample; + } else { + dx1 = mcuWidth; + dy1 = mcuHeight; + } + + for (y1 = 0; y1 < height; y1 += dy1) { + for (x1 = 0; x1 < width; x1 += dx1) { + + // deal with restart marker + if (restartInterval > 0 && restartCtr == 0) { + c = readMarker(); + if (c != restartMarker) { + error(getPos(), "Bad DCT data: incorrect restart marker"); + return; + } + if (++restartMarker == 0xd8) { + restartMarker = 0xd0; + } + restart(); + } + + // read one MCU + for (cc = 0; cc < numComps; ++cc) { + if (!scanInfo.comp[cc]) { + continue; + } + + h = compInfo[cc].hSample; + v = compInfo[cc].vSample; + horiz = mcuWidth / h; + vert = mcuHeight / v; + vSub = vert / 8; + for (y2 = 0; y2 < dy1; y2 += vert) { + for (x2 = 0; x2 < dx1; x2 += horiz) { + + // pull out the current values + p1 = &frameBuf[cc][(y1+y2) * bufWidth + (x1+x2)]; + for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) { + data[i] = p1[0]; + data[i+1] = p1[1]; + data[i+2] = p1[2]; + data[i+3] = p1[3]; + data[i+4] = p1[4]; + data[i+5] = p1[5]; + data[i+6] = p1[6]; + data[i+7] = p1[7]; + p1 += bufWidth * vSub; + } + + // read one data unit + if (progressive) { + if (!readProgressiveDataUnit( + &dcHuffTables[scanInfo.dcHuffTable[cc]], + &acHuffTables[scanInfo.acHuffTable[cc]], + &compInfo[cc].prevDC, + data)) { + return; + } + } else { + if (!readDataUnit(&dcHuffTables[scanInfo.dcHuffTable[cc]], + &acHuffTables[scanInfo.acHuffTable[cc]], + &compInfo[cc].prevDC, + data)) { + return; + } + } + + // add the data unit into frameBuf + p1 = &frameBuf[cc][(y1+y2) * bufWidth + (x1+x2)]; + for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) { + p1[0] = data[i]; + p1[1] = data[i+1]; + p1[2] = data[i+2]; + p1[3] = data[i+3]; + p1[4] = data[i+4]; + p1[5] = data[i+5]; + p1[6] = data[i+6]; + p1[7] = data[i+7]; + p1 += bufWidth * vSub; + } + } + } + } + --restartCtr; + } + } +} + +// Read one data unit from a sequential JPEG stream. +GBool DCTStream::readDataUnit(DCTHuffTable *dcHuffTable, + DCTHuffTable *acHuffTable, + int *prevDC, int data[64]) { + int run, size, amp; + int c; + int i, j; + + if ((size = readHuffSym(dcHuffTable)) == 9999) { + return gFalse; + } + if (size > 0) { + if ((amp = readAmp(size)) == 9999) { + return gFalse; + } + } else { + amp = 0; + } + data[0] = *prevDC += amp; + for (i = 1; i < 64; ++i) { + data[i] = 0; + } + i = 1; + while (i < 64) { + run = 0; + while ((c = readHuffSym(acHuffTable)) == 0xf0 && run < 0x30) { + run += 0x10; + } + if (c == 9999) { + return gFalse; + } + if (c == 0x00) { + break; + } else { + run += (c >> 4) & 0x0f; + size = c & 0x0f; + amp = readAmp(size); + if (amp == 9999) { + return gFalse; + } + i += run; + if (i < 64) { + j = dctZigZag[i++]; + data[j] = amp; + } + } + } + return gTrue; +} + +// Read one data unit from a sequential JPEG stream. +GBool DCTStream::readProgressiveDataUnit(DCTHuffTable *dcHuffTable, + DCTHuffTable *acHuffTable, + int *prevDC, int data[64]) { + int run, size, amp, bit, c; + int i, j, k; + + // get the DC coefficient + i = scanInfo.firstCoeff; + if (i == 0) { + if (scanInfo.ah == 0) { + if ((size = readHuffSym(dcHuffTable)) == 9999) { + return gFalse; + } + if (size > 0) { + if ((amp = readAmp(size)) == 9999) { + return gFalse; + } + } else { + amp = 0; + } + data[0] += (*prevDC += amp) << scanInfo.al; + } else { + if ((bit = readBit()) == 9999) { + return gFalse; + } + data[0] += bit << scanInfo.al; + } + ++i; + } + if (scanInfo.lastCoeff == 0) { + return gTrue; + } + + // check for an EOB run + if (eobRun > 0) { + while (i <= scanInfo.lastCoeff) { + j = dctZigZag[i++]; + if (data[j] != 0) { + if ((bit = readBit()) == EOF) { + return gFalse; + } + if (bit) { + data[j] += 1 << scanInfo.al; + } + } + } + --eobRun; + return gTrue; + } + + // read the AC coefficients + while (i <= scanInfo.lastCoeff) { + if ((c = readHuffSym(acHuffTable)) == 9999) { + return gFalse; + } + + // ZRL + if (c == 0xf0) { + k = 0; + while (k < 16) { + j = dctZigZag[i++]; + if (data[j] == 0) { + ++k; + } else { + if ((bit = readBit()) == EOF) { + return gFalse; + } + if (bit) { + data[j] += 1 << scanInfo.al; + } + } + } + + // EOB run + } else if ((c & 0x0f) == 0x00) { + j = c >> 4; + eobRun = 0; + for (k = 0; k < j; ++k) { + if ((bit = readBit()) == EOF) { + return gFalse; + } + eobRun = (eobRun << 1) | bit; + } + eobRun += 1 << j; + while (i <= scanInfo.lastCoeff) { + j = dctZigZag[i++]; + if (data[j] != 0) { + if ((bit = readBit()) == EOF) { + return gFalse; + } + if (bit) { + data[j] += 1 << scanInfo.al; + } + } + } + --eobRun; + break; + + // zero run and one AC coefficient + } else { + run = (c >> 4) & 0x0f; + size = c & 0x0f; + if ((amp = readAmp(size)) == 9999) { + return gFalse; + } + k = 0; + do { + j = dctZigZag[i++]; + while (data[j] != 0) { + if ((bit = readBit()) == EOF) { + return gFalse; + } + if (bit) { + data[j] += 1 << scanInfo.al; + } + j = dctZigZag[i++]; + } + ++k; + } while (k <= run); + data[j] = amp << scanInfo.al; + } + } + + return gTrue; +} + +// Decode a progressive JPEG image. +void DCTStream::decodeImage() { + int dataIn[64]; + Guchar dataOut[64]; + Gushort *quantTable; + int pY, pCb, pCr, pR, pG, pB; + int x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, cc, i; + int h, v, horiz, vert, hSub, vSub; + int *p0, *p1, *p2; + + for (y1 = 0; y1 < bufHeight; y1 += mcuHeight) { + for (x1 = 0; x1 < bufWidth; x1 += mcuWidth) { + for (cc = 0; cc < numComps; ++cc) { + quantTable = quantTables[compInfo[cc].quantTable]; + h = compInfo[cc].hSample; + v = compInfo[cc].vSample; + horiz = mcuWidth / h; + vert = mcuHeight / v; + hSub = horiz / 8; + vSub = vert / 8; + for (y2 = 0; y2 < mcuHeight; y2 += vert) { + for (x2 = 0; x2 < mcuWidth; x2 += horiz) { + + // pull out the coded data unit + p1 = &frameBuf[cc][(y1+y2) * bufWidth + (x1+x2)]; + for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) { + dataIn[i] = p1[0]; + dataIn[i+1] = p1[1]; + dataIn[i+2] = p1[2]; + dataIn[i+3] = p1[3]; + dataIn[i+4] = p1[4]; + dataIn[i+5] = p1[5]; + dataIn[i+6] = p1[6]; + dataIn[i+7] = p1[7]; + p1 += bufWidth * vSub; + } + + // transform + transformDataUnit(quantTable, dataIn, dataOut); + + // store back into frameBuf, doing replication for + // subsampled components + p1 = &frameBuf[cc][(y1+y2) * bufWidth + (x1+x2)]; + if (hSub == 1 && vSub == 1) { + for (y3 = 0, i = 0; y3 < 8; ++y3, i += 8) { + p1[0] = dataOut[i] & 0xff; + p1[1] = dataOut[i+1] & 0xff; + p1[2] = dataOut[i+2] & 0xff; + p1[3] = dataOut[i+3] & 0xff; + p1[4] = dataOut[i+4] & 0xff; + p1[5] = dataOut[i+5] & 0xff; + p1[6] = dataOut[i+6] & 0xff; + p1[7] = dataOut[i+7] & 0xff; + p1 += bufWidth; + } + } else if (hSub == 2 && vSub == 2) { + p2 = p1 + bufWidth; + for (y3 = 0, i = 0; y3 < 16; y3 += 2, i += 8) { + p1[0] = p1[1] = p2[0] = p2[1] = dataOut[i] & 0xff; + p1[2] = p1[3] = p2[2] = p2[3] = dataOut[i+1] & 0xff; + p1[4] = p1[5] = p2[4] = p2[5] = dataOut[i+2] & 0xff; + p1[6] = p1[7] = p2[6] = p2[7] = dataOut[i+3] & 0xff; + p1[8] = p1[9] = p2[8] = p2[9] = dataOut[i+4] & 0xff; + p1[10] = p1[11] = p2[10] = p2[11] = dataOut[i+5] & 0xff; + p1[12] = p1[13] = p2[12] = p2[13] = dataOut[i+6] & 0xff; + p1[14] = p1[15] = p2[14] = p2[15] = dataOut[i+7] & 0xff; + p1 += bufWidth * 2; + p2 += bufWidth * 2; + } + } else { + i = 0; + for (y3 = 0, y4 = 0; y3 < 8; ++y3, y4 += vSub) { + for (x3 = 0, x4 = 0; x3 < 8; ++x3, x4 += hSub) { + p2 = p1 + x4; + for (y5 = 0; y5 < vSub; ++y5) { + for (x5 = 0; x5 < hSub; ++x5) { + p2[x5] = dataOut[i] & 0xff; + } + p2 += bufWidth; + } + ++i; + } + p1 += bufWidth * vSub; + } + } + } + } + } + + // color space conversion + if (colorXform) { + // convert YCbCr to RGB + if (numComps == 3) { + for (y2 = 0; y2 < mcuHeight; ++y2) { + p0 = &frameBuf[0][(y1+y2) * bufWidth + x1]; + p1 = &frameBuf[1][(y1+y2) * bufWidth + x1]; + p2 = &frameBuf[2][(y1+y2) * bufWidth + x1]; + for (x2 = 0; x2 < mcuWidth; ++x2) { + pY = *p0; + pCb = *p1 - 128; + pCr = *p2 - 128; + pR = ((pY << 16) + dctCrToR * pCr + 32768) >> 16; + *p0++ = dctClip[dctClipOffset + pR]; + pG = ((pY << 16) + dctCbToG * pCb + dctCrToG * pCr + + 32768) >> 16; + *p1++ = dctClip[dctClipOffset + pG]; + pB = ((pY << 16) + dctCbToB * pCb + 32768) >> 16; + *p2++ = dctClip[dctClipOffset + pB]; + } + } + // convert YCbCrK to CMYK (K is passed through unchanged) + } else if (numComps == 4) { + for (y2 = 0; y2 < mcuHeight; ++y2) { + p0 = &frameBuf[0][(y1+y2) * bufWidth + x1]; + p1 = &frameBuf[1][(y1+y2) * bufWidth + x1]; + p2 = &frameBuf[2][(y1+y2) * bufWidth + x1]; + for (x2 = 0; x2 < mcuWidth; ++x2) { + pY = *p0; + pCb = *p1 - 128; + pCr = *p2 - 128; + pR = ((pY << 16) + dctCrToR * pCr + 32768) >> 16; + *p0++ = 255 - dctClip[dctClipOffset + pR]; + pG = ((pY << 16) + dctCbToG * pCb + dctCrToG * pCr + + 32768) >> 16; + *p1++ = 255 - dctClip[dctClipOffset + pG]; + pB = ((pY << 16) + dctCbToB * pCb + 32768) >> 16; + *p2++ = 255 - dctClip[dctClipOffset + pB]; + } + } + } + } + } + } +} + +// Transform one data unit -- this performs the dequantization and +// IDCT steps. This IDCT algorithm is taken from: +// Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz, +// "Practical Fast 1-D DCT Algorithms with 11 Multiplications", +// IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989, +// 988-991. +// The stage numbers mentioned in the comments refer to Figure 1 in this +// paper. +void DCTStream::transformDataUnit(Gushort *quantTable, + int dataIn[64], Guchar dataOut[64]) { + int v0, v1, v2, v3, v4, v5, v6, v7, t; + int *p; + int i; + + // dequant + for (i = 0; i < 64; ++i) { + dataIn[i] *= quantTable[i]; + } + + // inverse DCT on rows + for (i = 0; i < 64; i += 8) { + p = dataIn + i; + + // check for all-zero AC coefficients + if (p[1] == 0 && p[2] == 0 && p[3] == 0 && + p[4] == 0 && p[5] == 0 && p[6] == 0 && p[7] == 0) { + t = (dctSqrt2 * p[0] + 512) >> 10; + p[0] = t; + p[1] = t; + p[2] = t; + p[3] = t; + p[4] = t; + p[5] = t; + p[6] = t; + p[7] = t; + continue; + } + + // stage 4 + v0 = (dctSqrt2 * p[0] + 128) >> 8; + v1 = (dctSqrt2 * p[4] + 128) >> 8; + v2 = p[2]; + v3 = p[6]; + v4 = (dctSqrt1d2 * (p[1] - p[7]) + 128) >> 8; + v7 = (dctSqrt1d2 * (p[1] + p[7]) + 128) >> 8; + v5 = p[3] << 4; + v6 = p[5] << 4; + + // stage 3 + t = (v0 - v1+ 1) >> 1; + v0 = (v0 + v1 + 1) >> 1; + v1 = t; + t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8; + v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8; + v3 = t; + t = (v4 - v6 + 1) >> 1; + v4 = (v4 + v6 + 1) >> 1; + v6 = t; + t = (v7 + v5 + 1) >> 1; + v5 = (v7 - v5 + 1) >> 1; + v7 = t; + + // stage 2 + t = (v0 - v3 + 1) >> 1; + v0 = (v0 + v3 + 1) >> 1; + v3 = t; + t = (v1 - v2 + 1) >> 1; + v1 = (v1 + v2 + 1) >> 1; + v2 = t; + t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12; + v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12; + v7 = t; + t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12; + v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12; + v6 = t; + + // stage 1 + p[0] = v0 + v7; + p[7] = v0 - v7; + p[1] = v1 + v6; + p[6] = v1 - v6; + p[2] = v2 + v5; + p[5] = v2 - v5; + p[3] = v3 + v4; + p[4] = v3 - v4; + } + + // inverse DCT on columns + for (i = 0; i < 8; ++i) { + p = dataIn + i; + + // check for all-zero AC coefficients + if (p[1*8] == 0 && p[2*8] == 0 && p[3*8] == 0 && + p[4*8] == 0 && p[5*8] == 0 && p[6*8] == 0 && p[7*8] == 0) { + t = (dctSqrt2 * dataIn[i+0] + 8192) >> 14; + p[0*8] = t; + p[1*8] = t; + p[2*8] = t; + p[3*8] = t; + p[4*8] = t; + p[5*8] = t; + p[6*8] = t; + p[7*8] = t; + continue; + } + + // stage 4 + v0 = (dctSqrt2 * p[0*8] + 2048) >> 12; + v1 = (dctSqrt2 * p[4*8] + 2048) >> 12; + v2 = p[2*8]; + v3 = p[6*8]; + v4 = (dctSqrt1d2 * (p[1*8] - p[7*8]) + 2048) >> 12; + v7 = (dctSqrt1d2 * (p[1*8] + p[7*8]) + 2048) >> 12; + v5 = p[3*8]; + v6 = p[5*8]; + + // stage 3 + t = (v0 - v1 + 1) >> 1; + v0 = (v0 + v1 + 1) >> 1; + v1 = t; + t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12; + v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12; + v3 = t; + t = (v4 - v6 + 1) >> 1; + v4 = (v4 + v6 + 1) >> 1; + v6 = t; + t = (v7 + v5 + 1) >> 1; + v5 = (v7 - v5 + 1) >> 1; + v7 = t; + + // stage 2 + t = (v0 - v3 + 1) >> 1; + v0 = (v0 + v3 + 1) >> 1; + v3 = t; + t = (v1 - v2 + 1) >> 1; + v1 = (v1 + v2 + 1) >> 1; + v2 = t; + t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12; + v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12; + v7 = t; + t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12; + v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12; + v6 = t; + + // stage 1 + p[0*8] = v0 + v7; + p[7*8] = v0 - v7; + p[1*8] = v1 + v6; + p[6*8] = v1 - v6; + p[2*8] = v2 + v5; + p[5*8] = v2 - v5; + p[3*8] = v3 + v4; + p[4*8] = v3 - v4; + } + + // convert to 8-bit integers + for (i = 0; i < 64; ++i) { + dataOut[i] = dctClip[dctClipOffset + 128 + ((dataIn[i] + 8) >> 4)]; + } +} + +int DCTStream::readHuffSym(DCTHuffTable *table) { + Gushort code; + int bit; + int codeBits; + + code = 0; + codeBits = 0; + do { + // add a bit to the code + if ((bit = readBit()) == EOF) + return 9999; + code = (code << 1) + bit; + ++codeBits; + + // look up code + if (code - table->firstCode[codeBits] < table->numCodes[codeBits]) { + code -= table->firstCode[codeBits]; + return table->sym[table->firstSym[codeBits] + code]; + } + } while (codeBits < 16); + + error(getPos(), "Bad Huffman code in DCT stream"); + return 9999; +} + +int DCTStream::readAmp(int size) { + int amp, bit; + int bits; + + amp = 0; + for (bits = 0; bits < size; ++bits) { + if ((bit = readBit()) == EOF) + return 9999; + amp = (amp << 1) + bit; + } + if (amp < (1 << (size - 1))) + amp -= (1 << size) - 1; + return amp; +} + +int DCTStream::readBit() { + int bit; + int c, c2; + + if (inputBits == 0) { + if ((c = str->getChar()) == EOF) + return EOF; + if (c == 0xff) { + do { + c2 = str->getChar(); + } while (c2 == 0xff); + if (c2 != 0x00) { + error(getPos(), "Bad DCT data: missing 00 after ff"); + return EOF; + } + } + inputBuf = c; + inputBits = 8; + } + bit = (inputBuf >> (inputBits - 1)) & 1; + --inputBits; + return bit; +} + +GBool DCTStream::readHeader() { + GBool doScan; + int n; + int c = 0; + int i; + + // read headers + doScan = gFalse; + while (!doScan) { + c = readMarker(); + switch (c) { + case 0xc0: // SOF0 (sequential) + case 0xc1: // SOF1 (extended sequential) + if (!readBaselineSOF()) { + return gFalse; + } + break; + case 0xc2: // SOF2 (progressive) + if (!readProgressiveSOF()) { + return gFalse; + } + break; + case 0xc4: // DHT + if (!readHuffmanTables()) { + return gFalse; + } + break; + case 0xd8: // SOI + break; + case 0xd9: // EOI + return gFalse; + case 0xda: // SOS + if (!readScanInfo()) { + return gFalse; + } + doScan = gTrue; + break; + case 0xdb: // DQT + if (!readQuantTables()) { + return gFalse; + } + break; + case 0xdd: // DRI + if (!readRestartInterval()) { + return gFalse; + } + break; + case 0xe0: // APP0 + if (!readJFIFMarker()) { + return gFalse; + } + break; + case 0xee: // APP14 + if (!readAdobeMarker()) { + return gFalse; + } + break; + case EOF: + error(getPos(), "Bad DCT header"); + return gFalse; + default: + // skip APPn / COM / etc. + if (c >= 0xe0) { + n = read16() - 2; + for (i = 0; i < n; ++i) { + str->getChar(); + } + } else { + error(getPos(), "Unknown DCT marker <%02x>", c); + return gFalse; + } + break; + } + } + + return gTrue; +} + +GBool DCTStream::readBaselineSOF() { + int length; + int prec; + int i; + int c; + + length = read16(); + prec = str->getChar(); + height = read16(); + width = read16(); + numComps = str->getChar(); + if (numComps <= 0 || numComps > 4) { + error(getPos(), "Bad number of components in DCT stream"); + numComps = 0; + return gFalse; + } + if (prec != 8) { + error(getPos(), "Bad DCT precision %d", prec); + return gFalse; + } + for (i = 0; i < numComps; ++i) { + compInfo[i].id = str->getChar(); + c = str->getChar(); + compInfo[i].hSample = (c >> 4) & 0x0f; + compInfo[i].vSample = c & 0x0f; + compInfo[i].quantTable = str->getChar(); + } + progressive = gFalse; + return gTrue; +} + +GBool DCTStream::readProgressiveSOF() { + int length; + int prec; + int i; + int c; + + length = read16(); + prec = str->getChar(); + height = read16(); + width = read16(); + numComps = str->getChar(); + if (prec != 8) { + error(getPos(), "Bad DCT precision %d", prec); + return gFalse; + } + for (i = 0; i < numComps; ++i) { + compInfo[i].id = str->getChar(); + c = str->getChar(); + compInfo[i].hSample = (c >> 4) & 0x0f; + compInfo[i].vSample = c & 0x0f; + compInfo[i].quantTable = str->getChar(); + } + progressive = gTrue; + return gTrue; +} + +GBool DCTStream::readScanInfo() { + int length; + int id, c; + int i, j; + + length = read16() - 2; + scanInfo.numComps = str->getChar(); + if (scanInfo.numComps <= 0 || scanInfo.numComps > 4) { + error(getPos(), "Bad number of components in DCT stream"); + scanInfo.numComps = 0; + return gFalse; + } + --length; + if (length != 2 * scanInfo.numComps + 3) { + error(getPos(), "Bad DCT scan info block"); + return gFalse; + } + interleaved = scanInfo.numComps == numComps; + for (j = 0; j < numComps; ++j) { + scanInfo.comp[j] = gFalse; + scanInfo.dcHuffTable[j] = 0; + scanInfo.acHuffTable[j] = 0; + } + for (i = 0; i < scanInfo.numComps; ++i) { + id = str->getChar(); + // some (broken) DCT streams reuse ID numbers, but at least they + // keep the components in order, so we check compInfo[i] first to + // work around the problem + if (id == compInfo[i].id) { + j = i; + } else { + for (j = 0; j < numComps; ++j) { + if (id == compInfo[j].id) { + break; + } + } + if (j == numComps) { + error(getPos(), "Bad DCT component ID in scan info block"); + return gFalse; + } + } + scanInfo.comp[j] = gTrue; + c = str->getChar(); + scanInfo.dcHuffTable[j] = (c >> 4) & 0x0f; + scanInfo.acHuffTable[j] = c & 0x0f; + } + scanInfo.firstCoeff = str->getChar(); + scanInfo.lastCoeff = str->getChar(); + if (scanInfo.firstCoeff < 0 || scanInfo.lastCoeff > 63 || + scanInfo.firstCoeff > scanInfo.lastCoeff) { + error(getPos(), "Bad DCT coefficient numbers in scan info block"); + return gFalse; + } + c = str->getChar(); + scanInfo.ah = (c >> 4) & 0x0f; + scanInfo.al = c & 0x0f; + return gTrue; +} + +GBool DCTStream::readQuantTables() { + int length, prec, i, index; + + length = read16() - 2; + while (length > 0) { + index = str->getChar(); + prec = (index >> 4) & 0x0f; + index &= 0x0f; + if (prec > 1 || index >= 4) { + error(getPos(), "Bad DCT quantization table"); + return gFalse; + } + if (index == numQuantTables) { + numQuantTables = index + 1; + } + for (i = 0; i < 64; ++i) { + if (prec) { + quantTables[index][dctZigZag[i]] = read16(); + } else { + quantTables[index][dctZigZag[i]] = str->getChar(); + } + } + if (prec) { + length -= 129; + } else { + length -= 65; + } + } + return gTrue; +} + +GBool DCTStream::readHuffmanTables() { + DCTHuffTable *tbl; + int length; + int index; + Gushort code; + Guchar sym; + int i; + int c; + + length = read16() - 2; + while (length > 0) { + index = str->getChar(); + --length; + if ((index & 0x0f) >= 4) { + error(getPos(), "Bad DCT Huffman table"); + return gFalse; + } + if (index & 0x10) { + index &= 0x0f; + if (index >= numACHuffTables) + numACHuffTables = index+1; + tbl = &acHuffTables[index]; + } else { + index &= 0x0f; + if (index >= numDCHuffTables) + numDCHuffTables = index+1; + tbl = &dcHuffTables[index]; + } + sym = 0; + code = 0; + for (i = 1; i <= 16; ++i) { + c = str->getChar(); + tbl->firstSym[i] = sym; + tbl->firstCode[i] = code; + tbl->numCodes[i] = c; + sym += c; + code = (code + c) << 1; + } + length -= 16; + for (i = 0; i < sym; ++i) + tbl->sym[i] = str->getChar(); + length -= sym; + } + return gTrue; +} + +GBool DCTStream::readRestartInterval() { + int length; + + length = read16(); + if (length != 4) { + error(getPos(), "Bad DCT restart interval"); + return gFalse; + } + restartInterval = read16(); + return gTrue; +} + +GBool DCTStream::readJFIFMarker() { + int length, i; + char buf[5]; + int c; + + length = read16(); + length -= 2; + if (length >= 5) { + for (i = 0; i < 5; ++i) { + if ((c = str->getChar()) == EOF) { + error(getPos(), "Bad DCT APP0 marker"); + return gFalse; + } + buf[i] = c; + } + length -= 5; + if (!memcmp(buf, "JFIF\0", 5)) { + gotJFIFMarker = gTrue; + } + } + while (length > 0) { + if (str->getChar() == EOF) { + error(getPos(), "Bad DCT APP0 marker"); + return gFalse; + } + --length; + } + return gTrue; +} + +GBool DCTStream::readAdobeMarker() { + int length, i; + char buf[12]; + int c; + + length = read16(); + if (length < 14) { + goto err; + } + for (i = 0; i < 12; ++i) { + if ((c = str->getChar()) == EOF) { + goto err; + } + buf[i] = c; + } + if (strncmp(buf, "Adobe", 5)) { + goto err; + } + colorXform = buf[11]; + gotAdobeMarker = gTrue; + for (i = 14; i < length; ++i) { + if (str->getChar() == EOF) { + goto err; + } + } + return gTrue; + + err: + error(getPos(), "Bad DCT Adobe APP14 marker"); + return gFalse; +} + +GBool DCTStream::readTrailer() { + int c; + + c = readMarker(); + if (c != 0xd9) { // EOI + error(getPos(), "Bad DCT trailer"); + return gFalse; + } + return gTrue; +} + +int DCTStream::readMarker() { + int c; + + do { + do { + c = str->getChar(); + } while (c != 0xff && c != EOF); + while (c == 0xff) { + c = str->getChar(); + } + } while (c == 0x00); + return c; +} + +int DCTStream::read16() { + int c1, c2; + + if ((c1 = str->getChar()) == EOF) + return EOF; + if ((c2 = str->getChar()) == EOF) + return EOF; + return (c1 << 8) + c2; +} + +GooString *DCTStream::getPSFilter(int psLevel, char *indent) { + GooString *s; + + if (psLevel < 2) { + return NULL; + } + if (!(s = str->getPSFilter(psLevel, indent))) { + return NULL; + } + s->append(indent)->append("<< >> /DCTDecode filter\n"); + return s; +} + +GBool DCTStream::isBinary(GBool last) { + return str->isBinary(gTrue); +} + +#endif + +#ifndef ENABLE_ZLIB +//------------------------------------------------------------------------ +// FlateStream +//------------------------------------------------------------------------ + +int FlateStream::codeLenCodeMap[flateMaxCodeLenCodes] = { + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 +}; + +FlateDecode FlateStream::lengthDecode[flateMaxLitCodes-257] = { + {0, 3}, + {0, 4}, + {0, 5}, + {0, 6}, + {0, 7}, + {0, 8}, + {0, 9}, + {0, 10}, + {1, 11}, + {1, 13}, + {1, 15}, + {1, 17}, + {2, 19}, + {2, 23}, + {2, 27}, + {2, 31}, + {3, 35}, + {3, 43}, + {3, 51}, + {3, 59}, + {4, 67}, + {4, 83}, + {4, 99}, + {4, 115}, + {5, 131}, + {5, 163}, + {5, 195}, + {5, 227}, + {0, 258}, + {0, 258}, + {0, 258} +}; + +FlateDecode FlateStream::distDecode[flateMaxDistCodes] = { + { 0, 1}, + { 0, 2}, + { 0, 3}, + { 0, 4}, + { 1, 5}, + { 1, 7}, + { 2, 9}, + { 2, 13}, + { 3, 17}, + { 3, 25}, + { 4, 33}, + { 4, 49}, + { 5, 65}, + { 5, 97}, + { 6, 129}, + { 6, 193}, + { 7, 257}, + { 7, 385}, + { 8, 513}, + { 8, 769}, + { 9, 1025}, + { 9, 1537}, + {10, 2049}, + {10, 3073}, + {11, 4097}, + {11, 6145}, + {12, 8193}, + {12, 12289}, + {13, 16385}, + {13, 24577} +}; + +static FlateCode flateFixedLitCodeTabCodes[512] = { + {7, 0x0100}, + {8, 0x0050}, + {8, 0x0010}, + {8, 0x0118}, + {7, 0x0110}, + {8, 0x0070}, + {8, 0x0030}, + {9, 0x00c0}, + {7, 0x0108}, + {8, 0x0060}, + {8, 0x0020}, + {9, 0x00a0}, + {8, 0x0000}, + {8, 0x0080}, + {8, 0x0040}, + {9, 0x00e0}, + {7, 0x0104}, + {8, 0x0058}, + {8, 0x0018}, + {9, 0x0090}, + {7, 0x0114}, + {8, 0x0078}, + {8, 0x0038}, + {9, 0x00d0}, + {7, 0x010c}, + {8, 0x0068}, + {8, 0x0028}, + {9, 0x00b0}, + {8, 0x0008}, + {8, 0x0088}, + {8, 0x0048}, + {9, 0x00f0}, + {7, 0x0102}, + {8, 0x0054}, + {8, 0x0014}, + {8, 0x011c}, + {7, 0x0112}, + {8, 0x0074}, + {8, 0x0034}, + {9, 0x00c8}, + {7, 0x010a}, + {8, 0x0064}, + {8, 0x0024}, + {9, 0x00a8}, + {8, 0x0004}, + {8, 0x0084}, + {8, 0x0044}, + {9, 0x00e8}, + {7, 0x0106}, + {8, 0x005c}, + {8, 0x001c}, + {9, 0x0098}, + {7, 0x0116}, + {8, 0x007c}, + {8, 0x003c}, + {9, 0x00d8}, + {7, 0x010e}, + {8, 0x006c}, + {8, 0x002c}, + {9, 0x00b8}, + {8, 0x000c}, + {8, 0x008c}, + {8, 0x004c}, + {9, 0x00f8}, + {7, 0x0101}, + {8, 0x0052}, + {8, 0x0012}, + {8, 0x011a}, + {7, 0x0111}, + {8, 0x0072}, + {8, 0x0032}, + {9, 0x00c4}, + {7, 0x0109}, + {8, 0x0062}, + {8, 0x0022}, + {9, 0x00a4}, + {8, 0x0002}, + {8, 0x0082}, + {8, 0x0042}, + {9, 0x00e4}, + {7, 0x0105}, + {8, 0x005a}, + {8, 0x001a}, + {9, 0x0094}, + {7, 0x0115}, + {8, 0x007a}, + {8, 0x003a}, + {9, 0x00d4}, + {7, 0x010d}, + {8, 0x006a}, + {8, 0x002a}, + {9, 0x00b4}, + {8, 0x000a}, + {8, 0x008a}, + {8, 0x004a}, + {9, 0x00f4}, + {7, 0x0103}, + {8, 0x0056}, + {8, 0x0016}, + {8, 0x011e}, + {7, 0x0113}, + {8, 0x0076}, + {8, 0x0036}, + {9, 0x00cc}, + {7, 0x010b}, + {8, 0x0066}, + {8, 0x0026}, + {9, 0x00ac}, + {8, 0x0006}, + {8, 0x0086}, + {8, 0x0046}, + {9, 0x00ec}, + {7, 0x0107}, + {8, 0x005e}, + {8, 0x001e}, + {9, 0x009c}, + {7, 0x0117}, + {8, 0x007e}, + {8, 0x003e}, + {9, 0x00dc}, + {7, 0x010f}, + {8, 0x006e}, + {8, 0x002e}, + {9, 0x00bc}, + {8, 0x000e}, + {8, 0x008e}, + {8, 0x004e}, + {9, 0x00fc}, + {7, 0x0100}, + {8, 0x0051}, + {8, 0x0011}, + {8, 0x0119}, + {7, 0x0110}, + {8, 0x0071}, + {8, 0x0031}, + {9, 0x00c2}, + {7, 0x0108}, + {8, 0x0061}, + {8, 0x0021}, + {9, 0x00a2}, + {8, 0x0001}, + {8, 0x0081}, + {8, 0x0041}, + {9, 0x00e2}, + {7, 0x0104}, + {8, 0x0059}, + {8, 0x0019}, + {9, 0x0092}, + {7, 0x0114}, + {8, 0x0079}, + {8, 0x0039}, + {9, 0x00d2}, + {7, 0x010c}, + {8, 0x0069}, + {8, 0x0029}, + {9, 0x00b2}, + {8, 0x0009}, + {8, 0x0089}, + {8, 0x0049}, + {9, 0x00f2}, + {7, 0x0102}, + {8, 0x0055}, + {8, 0x0015}, + {8, 0x011d}, + {7, 0x0112}, + {8, 0x0075}, + {8, 0x0035}, + {9, 0x00ca}, + {7, 0x010a}, + {8, 0x0065}, + {8, 0x0025}, + {9, 0x00aa}, + {8, 0x0005}, + {8, 0x0085}, + {8, 0x0045}, + {9, 0x00ea}, + {7, 0x0106}, + {8, 0x005d}, + {8, 0x001d}, + {9, 0x009a}, + {7, 0x0116}, + {8, 0x007d}, + {8, 0x003d}, + {9, 0x00da}, + {7, 0x010e}, + {8, 0x006d}, + {8, 0x002d}, + {9, 0x00ba}, + {8, 0x000d}, + {8, 0x008d}, + {8, 0x004d}, + {9, 0x00fa}, + {7, 0x0101}, + {8, 0x0053}, + {8, 0x0013}, + {8, 0x011b}, + {7, 0x0111}, + {8, 0x0073}, + {8, 0x0033}, + {9, 0x00c6}, + {7, 0x0109}, + {8, 0x0063}, + {8, 0x0023}, + {9, 0x00a6}, + {8, 0x0003}, + {8, 0x0083}, + {8, 0x0043}, + {9, 0x00e6}, + {7, 0x0105}, + {8, 0x005b}, + {8, 0x001b}, + {9, 0x0096}, + {7, 0x0115}, + {8, 0x007b}, + {8, 0x003b}, + {9, 0x00d6}, + {7, 0x010d}, + {8, 0x006b}, + {8, 0x002b}, + {9, 0x00b6}, + {8, 0x000b}, + {8, 0x008b}, + {8, 0x004b}, + {9, 0x00f6}, + {7, 0x0103}, + {8, 0x0057}, + {8, 0x0017}, + {8, 0x011f}, + {7, 0x0113}, + {8, 0x0077}, + {8, 0x0037}, + {9, 0x00ce}, + {7, 0x010b}, + {8, 0x0067}, + {8, 0x0027}, + {9, 0x00ae}, + {8, 0x0007}, + {8, 0x0087}, + {8, 0x0047}, + {9, 0x00ee}, + {7, 0x0107}, + {8, 0x005f}, + {8, 0x001f}, + {9, 0x009e}, + {7, 0x0117}, + {8, 0x007f}, + {8, 0x003f}, + {9, 0x00de}, + {7, 0x010f}, + {8, 0x006f}, + {8, 0x002f}, + {9, 0x00be}, + {8, 0x000f}, + {8, 0x008f}, + {8, 0x004f}, + {9, 0x00fe}, + {7, 0x0100}, + {8, 0x0050}, + {8, 0x0010}, + {8, 0x0118}, + {7, 0x0110}, + {8, 0x0070}, + {8, 0x0030}, + {9, 0x00c1}, + {7, 0x0108}, + {8, 0x0060}, + {8, 0x0020}, + {9, 0x00a1}, + {8, 0x0000}, + {8, 0x0080}, + {8, 0x0040}, + {9, 0x00e1}, + {7, 0x0104}, + {8, 0x0058}, + {8, 0x0018}, + {9, 0x0091}, + {7, 0x0114}, + {8, 0x0078}, + {8, 0x0038}, + {9, 0x00d1}, + {7, 0x010c}, + {8, 0x0068}, + {8, 0x0028}, + {9, 0x00b1}, + {8, 0x0008}, + {8, 0x0088}, + {8, 0x0048}, + {9, 0x00f1}, + {7, 0x0102}, + {8, 0x0054}, + {8, 0x0014}, + {8, 0x011c}, + {7, 0x0112}, + {8, 0x0074}, + {8, 0x0034}, + {9, 0x00c9}, + {7, 0x010a}, + {8, 0x0064}, + {8, 0x0024}, + {9, 0x00a9}, + {8, 0x0004}, + {8, 0x0084}, + {8, 0x0044}, + {9, 0x00e9}, + {7, 0x0106}, + {8, 0x005c}, + {8, 0x001c}, + {9, 0x0099}, + {7, 0x0116}, + {8, 0x007c}, + {8, 0x003c}, + {9, 0x00d9}, + {7, 0x010e}, + {8, 0x006c}, + {8, 0x002c}, + {9, 0x00b9}, + {8, 0x000c}, + {8, 0x008c}, + {8, 0x004c}, + {9, 0x00f9}, + {7, 0x0101}, + {8, 0x0052}, + {8, 0x0012}, + {8, 0x011a}, + {7, 0x0111}, + {8, 0x0072}, + {8, 0x0032}, + {9, 0x00c5}, + {7, 0x0109}, + {8, 0x0062}, + {8, 0x0022}, + {9, 0x00a5}, + {8, 0x0002}, + {8, 0x0082}, + {8, 0x0042}, + {9, 0x00e5}, + {7, 0x0105}, + {8, 0x005a}, + {8, 0x001a}, + {9, 0x0095}, + {7, 0x0115}, + {8, 0x007a}, + {8, 0x003a}, + {9, 0x00d5}, + {7, 0x010d}, + {8, 0x006a}, + {8, 0x002a}, + {9, 0x00b5}, + {8, 0x000a}, + {8, 0x008a}, + {8, 0x004a}, + {9, 0x00f5}, + {7, 0x0103}, + {8, 0x0056}, + {8, 0x0016}, + {8, 0x011e}, + {7, 0x0113}, + {8, 0x0076}, + {8, 0x0036}, + {9, 0x00cd}, + {7, 0x010b}, + {8, 0x0066}, + {8, 0x0026}, + {9, 0x00ad}, + {8, 0x0006}, + {8, 0x0086}, + {8, 0x0046}, + {9, 0x00ed}, + {7, 0x0107}, + {8, 0x005e}, + {8, 0x001e}, + {9, 0x009d}, + {7, 0x0117}, + {8, 0x007e}, + {8, 0x003e}, + {9, 0x00dd}, + {7, 0x010f}, + {8, 0x006e}, + {8, 0x002e}, + {9, 0x00bd}, + {8, 0x000e}, + {8, 0x008e}, + {8, 0x004e}, + {9, 0x00fd}, + {7, 0x0100}, + {8, 0x0051}, + {8, 0x0011}, + {8, 0x0119}, + {7, 0x0110}, + {8, 0x0071}, + {8, 0x0031}, + {9, 0x00c3}, + {7, 0x0108}, + {8, 0x0061}, + {8, 0x0021}, + {9, 0x00a3}, + {8, 0x0001}, + {8, 0x0081}, + {8, 0x0041}, + {9, 0x00e3}, + {7, 0x0104}, + {8, 0x0059}, + {8, 0x0019}, + {9, 0x0093}, + {7, 0x0114}, + {8, 0x0079}, + {8, 0x0039}, + {9, 0x00d3}, + {7, 0x010c}, + {8, 0x0069}, + {8, 0x0029}, + {9, 0x00b3}, + {8, 0x0009}, + {8, 0x0089}, + {8, 0x0049}, + {9, 0x00f3}, + {7, 0x0102}, + {8, 0x0055}, + {8, 0x0015}, + {8, 0x011d}, + {7, 0x0112}, + {8, 0x0075}, + {8, 0x0035}, + {9, 0x00cb}, + {7, 0x010a}, + {8, 0x0065}, + {8, 0x0025}, + {9, 0x00ab}, + {8, 0x0005}, + {8, 0x0085}, + {8, 0x0045}, + {9, 0x00eb}, + {7, 0x0106}, + {8, 0x005d}, + {8, 0x001d}, + {9, 0x009b}, + {7, 0x0116}, + {8, 0x007d}, + {8, 0x003d}, + {9, 0x00db}, + {7, 0x010e}, + {8, 0x006d}, + {8, 0x002d}, + {9, 0x00bb}, + {8, 0x000d}, + {8, 0x008d}, + {8, 0x004d}, + {9, 0x00fb}, + {7, 0x0101}, + {8, 0x0053}, + {8, 0x0013}, + {8, 0x011b}, + {7, 0x0111}, + {8, 0x0073}, + {8, 0x0033}, + {9, 0x00c7}, + {7, 0x0109}, + {8, 0x0063}, + {8, 0x0023}, + {9, 0x00a7}, + {8, 0x0003}, + {8, 0x0083}, + {8, 0x0043}, + {9, 0x00e7}, + {7, 0x0105}, + {8, 0x005b}, + {8, 0x001b}, + {9, 0x0097}, + {7, 0x0115}, + {8, 0x007b}, + {8, 0x003b}, + {9, 0x00d7}, + {7, 0x010d}, + {8, 0x006b}, + {8, 0x002b}, + {9, 0x00b7}, + {8, 0x000b}, + {8, 0x008b}, + {8, 0x004b}, + {9, 0x00f7}, + {7, 0x0103}, + {8, 0x0057}, + {8, 0x0017}, + {8, 0x011f}, + {7, 0x0113}, + {8, 0x0077}, + {8, 0x0037}, + {9, 0x00cf}, + {7, 0x010b}, + {8, 0x0067}, + {8, 0x0027}, + {9, 0x00af}, + {8, 0x0007}, + {8, 0x0087}, + {8, 0x0047}, + {9, 0x00ef}, + {7, 0x0107}, + {8, 0x005f}, + {8, 0x001f}, + {9, 0x009f}, + {7, 0x0117}, + {8, 0x007f}, + {8, 0x003f}, + {9, 0x00df}, + {7, 0x010f}, + {8, 0x006f}, + {8, 0x002f}, + {9, 0x00bf}, + {8, 0x000f}, + {8, 0x008f}, + {8, 0x004f}, + {9, 0x00ff} +}; + +FlateHuffmanTab FlateStream::fixedLitCodeTab = { + flateFixedLitCodeTabCodes, 9 +}; + +static FlateCode flateFixedDistCodeTabCodes[32] = { + {5, 0x0000}, + {5, 0x0010}, + {5, 0x0008}, + {5, 0x0018}, + {5, 0x0004}, + {5, 0x0014}, + {5, 0x000c}, + {5, 0x001c}, + {5, 0x0002}, + {5, 0x0012}, + {5, 0x000a}, + {5, 0x001a}, + {5, 0x0006}, + {5, 0x0016}, + {5, 0x000e}, + {0, 0x0000}, + {5, 0x0001}, + {5, 0x0011}, + {5, 0x0009}, + {5, 0x0019}, + {5, 0x0005}, + {5, 0x0015}, + {5, 0x000d}, + {5, 0x001d}, + {5, 0x0003}, + {5, 0x0013}, + {5, 0x000b}, + {5, 0x001b}, + {5, 0x0007}, + {5, 0x0017}, + {5, 0x000f}, + {0, 0x0000} +}; + +FlateHuffmanTab FlateStream::fixedDistCodeTab = { + flateFixedDistCodeTabCodes, 5 +}; + +FlateStream::FlateStream(Stream *strA, int predictor, int columns, + int colors, int bits): + FilterStream(strA) { + if (predictor != 1) { + pred = new StreamPredictor(this, predictor, columns, colors, bits); + if (!pred->isOk()) { + delete pred; + pred = NULL; + } + } else { + pred = NULL; + } + litCodeTab.codes = NULL; + distCodeTab.codes = NULL; + memset(buf, 0, flateWindow); +} + +FlateStream::~FlateStream() { + if (litCodeTab.codes != fixedLitCodeTab.codes) { + gfree(litCodeTab.codes); + } + if (distCodeTab.codes != fixedDistCodeTab.codes) { + gfree(distCodeTab.codes); + } + if (pred) { + delete pred; + } + delete str; +} + +void FlateStream::unfilteredReset() { + index = 0; + remain = 0; + codeBuf = 0; + codeSize = 0; + compressedBlock = gFalse; + endOfBlock = gTrue; + eof = gTrue; + + str->reset(); +} + +void FlateStream::reset() { + int cmf, flg; + + unfilteredReset(); + + // read header + //~ need to look at window size? + endOfBlock = eof = gTrue; + cmf = str->getChar(); + flg = str->getChar(); + if (cmf == EOF || flg == EOF) + return; + if ((cmf & 0x0f) != 0x08) { + error(getPos(), "Unknown compression method in flate stream"); + return; + } + if ((((cmf << 8) + flg) % 31) != 0) { + error(getPos(), "Bad FCHECK in flate stream"); + return; + } + if (flg & 0x20) { + error(getPos(), "FDICT bit set in flate stream"); + return; + } + + eof = gFalse; +} + +int FlateStream::getChar() { + return doGetChar(); +} + +int FlateStream::getChars(int nChars, Guchar *buffer) { + if (pred) { + return pred->getChars(nChars, buffer); + } else { + for (int i = 0; i < nChars; ++i) { + const int c = doGetChar(); + if (likely(c != EOF)) buffer[i] = c; + else return i; + } + return nChars; + } +} + +int FlateStream::lookChar() { + int c; + + if (pred) { + return pred->lookChar(); + } + while (remain == 0) { + if (endOfBlock && eof) + return EOF; + readSome(); + } + c = buf[index]; + return c; +} + +void FlateStream::getRawChars(int nChars, int *buffer) { + for (int i = 0; i < nChars; ++i) + buffer[i] = doGetRawChar(); +} + +int FlateStream::getRawChar() { + return doGetRawChar(); +} + +GooString *FlateStream::getPSFilter(int psLevel, char *indent) { + GooString *s; + + if (psLevel < 3 || pred) { + return NULL; + } + if (!(s = str->getPSFilter(psLevel, indent))) { + return NULL; + } + s->append(indent)->append("<< >> /FlateDecode filter\n"); + return s; +} + +GBool FlateStream::isBinary(GBool last) { + return str->isBinary(gTrue); +} + +void FlateStream::readSome() { + int code1, code2; + int len, dist; + int i, j, k; + int c; + + if (endOfBlock) { + if (!startBlock()) + return; + } + + if (compressedBlock) { + if ((code1 = getHuffmanCodeWord(&litCodeTab)) == EOF) + goto err; + if (code1 < 256) { + buf[index] = code1; + remain = 1; + } else if (code1 == 256) { + endOfBlock = gTrue; + remain = 0; + } else { + code1 -= 257; + code2 = lengthDecode[code1].bits; + if (code2 > 0 && (code2 = getCodeWord(code2)) == EOF) + goto err; + len = lengthDecode[code1].first + code2; + if ((code1 = getHuffmanCodeWord(&distCodeTab)) == EOF) + goto err; + code2 = distDecode[code1].bits; + if (code2 > 0 && (code2 = getCodeWord(code2)) == EOF) + goto err; + dist = distDecode[code1].first + code2; + i = index; + j = (index - dist) & flateMask; + for (k = 0; k < len; ++k) { + buf[i] = buf[j]; + i = (i + 1) & flateMask; + j = (j + 1) & flateMask; + } + remain = len; + } + + } else { + len = (blockLen < flateWindow) ? blockLen : flateWindow; + for (i = 0, j = index; i < len; ++i, j = (j + 1) & flateMask) { + if ((c = str->getChar()) == EOF) { + endOfBlock = eof = gTrue; + break; + } + buf[j] = c & 0xff; + } + remain = i; + blockLen -= len; + if (blockLen == 0) + endOfBlock = gTrue; + } + + return; + +err: + error(getPos(), "Unexpected end of file in flate stream"); + endOfBlock = eof = gTrue; + remain = 0; +} + +GBool FlateStream::startBlock() { + int blockHdr; + int c; + int check; + + // free the code tables from the previous block + if (litCodeTab.codes != fixedLitCodeTab.codes) { + gfree(litCodeTab.codes); + } + litCodeTab.codes = NULL; + if (distCodeTab.codes != fixedDistCodeTab.codes) { + gfree(distCodeTab.codes); + } + distCodeTab.codes = NULL; + + // read block header + blockHdr = getCodeWord(3); + if (blockHdr & 1) + eof = gTrue; + blockHdr >>= 1; + + // uncompressed block + if (blockHdr == 0) { + compressedBlock = gFalse; + if ((c = str->getChar()) == EOF) + goto err; + blockLen = c & 0xff; + if ((c = str->getChar()) == EOF) + goto err; + blockLen |= (c & 0xff) << 8; + if ((c = str->getChar()) == EOF) + goto err; + check = c & 0xff; + if ((c = str->getChar()) == EOF) + goto err; + check |= (c & 0xff) << 8; + if (check != (~blockLen & 0xffff)) + error(getPos(), "Bad uncompressed block length in flate stream"); + codeBuf = 0; + codeSize = 0; + + // compressed block with fixed codes + } else if (blockHdr == 1) { + compressedBlock = gTrue; + loadFixedCodes(); + + // compressed block with dynamic codes + } else if (blockHdr == 2) { + compressedBlock = gTrue; + if (!readDynamicCodes()) { + goto err; + } + + // unknown block type + } else { + goto err; + } + + endOfBlock = gFalse; + return gTrue; + +err: + error(getPos(), "Bad block header in flate stream"); + endOfBlock = eof = gTrue; + return gFalse; +} + +void FlateStream::loadFixedCodes() { + litCodeTab.codes = fixedLitCodeTab.codes; + litCodeTab.maxLen = fixedLitCodeTab.maxLen; + distCodeTab.codes = fixedDistCodeTab.codes; + distCodeTab.maxLen = fixedDistCodeTab.maxLen; +} + +GBool FlateStream::readDynamicCodes() { + int numCodeLenCodes; + int numLitCodes; + int numDistCodes; + int codeLenCodeLengths[flateMaxCodeLenCodes]; + FlateHuffmanTab codeLenCodeTab; + int len, repeat, code; + int i; + + codeLenCodeTab.codes = NULL; + + // read lengths + if ((numLitCodes = getCodeWord(5)) == EOF) { + goto err; + } + numLitCodes += 257; + if ((numDistCodes = getCodeWord(5)) == EOF) { + goto err; + } + numDistCodes += 1; + if ((numCodeLenCodes = getCodeWord(4)) == EOF) { + goto err; + } + numCodeLenCodes += 4; + if (numLitCodes > flateMaxLitCodes || + numDistCodes > flateMaxDistCodes || + numCodeLenCodes > flateMaxCodeLenCodes) { + goto err; + } + + // build the code length code table + for (i = 0; i < flateMaxCodeLenCodes; ++i) { + codeLenCodeLengths[i] = 0; + } + for (i = 0; i < numCodeLenCodes; ++i) { + if ((codeLenCodeLengths[codeLenCodeMap[i]] = getCodeWord(3)) == -1) { + goto err; + } + } + compHuffmanCodes(codeLenCodeLengths, flateMaxCodeLenCodes, &codeLenCodeTab); + + // build the literal and distance code tables + len = 0; + repeat = 0; + i = 0; + while (i < numLitCodes + numDistCodes) { + if ((code = getHuffmanCodeWord(&codeLenCodeTab)) == EOF) { + goto err; + } + if (code == 16) { + if ((repeat = getCodeWord(2)) == EOF) { + goto err; + } + repeat += 3; + if (i + repeat > numLitCodes + numDistCodes) { + goto err; + } + for (; repeat > 0; --repeat) { + codeLengths[i++] = len; + } + } else if (code == 17) { + if ((repeat = getCodeWord(3)) == EOF) { + goto err; + } + repeat += 3; + if (i + repeat > numLitCodes + numDistCodes) { + goto err; + } + len = 0; + for (; repeat > 0; --repeat) { + codeLengths[i++] = 0; + } + } else if (code == 18) { + if ((repeat = getCodeWord(7)) == EOF) { + goto err; + } + repeat += 11; + if (i + repeat > numLitCodes + numDistCodes) { + goto err; + } + len = 0; + for (; repeat > 0; --repeat) { + codeLengths[i++] = 0; + } + } else { + codeLengths[i++] = len = code; + } + } + compHuffmanCodes(codeLengths, numLitCodes, &litCodeTab); + compHuffmanCodes(codeLengths + numLitCodes, numDistCodes, &distCodeTab); + + gfree(codeLenCodeTab.codes); + return gTrue; + +err: + error(getPos(), "Bad dynamic code table in flate stream"); + gfree(codeLenCodeTab.codes); + return gFalse; +} + +// Convert an array <lengths> of <n> lengths, in value order, into a +// Huffman code lookup table. +void FlateStream::compHuffmanCodes(int *lengths, int n, FlateHuffmanTab *tab) { + int tabSize, len, code, code2, skip, val, i, t; + + // find max code length + tab->maxLen = 0; + for (val = 0; val < n; ++val) { + if (lengths[val] > tab->maxLen) { + tab->maxLen = lengths[val]; + } + } + + // allocate the table + tabSize = 1 << tab->maxLen; + tab->codes = (FlateCode *)gmallocn(tabSize, sizeof(FlateCode)); + + // clear the table + for (i = 0; i < tabSize; ++i) { + tab->codes[i].len = 0; + tab->codes[i].val = 0; + } + + // build the table + for (len = 1, code = 0, skip = 2; + len <= tab->maxLen; + ++len, code <<= 1, skip <<= 1) { + for (val = 0; val < n; ++val) { + if (lengths[val] == len) { + + // bit-reverse the code + code2 = 0; + t = code; + for (i = 0; i < len; ++i) { + code2 = (code2 << 1) | (t & 1); + t >>= 1; + } + + // fill in the table entries + for (i = code2; i < tabSize; i += skip) { + tab->codes[i].len = (Gushort)len; + tab->codes[i].val = (Gushort)val; + } + + ++code; + } + } + } +} + +int FlateStream::getHuffmanCodeWord(FlateHuffmanTab *tab) { + FlateCode *code; + int c; + + while (codeSize < tab->maxLen) { + if ((c = str->getChar()) == EOF) { + break; + } + codeBuf |= (c & 0xff) << codeSize; + codeSize += 8; + } + code = &tab->codes[codeBuf & ((1 << tab->maxLen) - 1)]; + if (codeSize == 0 || codeSize < code->len || code->len == 0) { + return EOF; + } + codeBuf >>= code->len; + codeSize -= code->len; + return (int)code->val; +} + +int FlateStream::getCodeWord(int bits) { + int c; + + while (codeSize < bits) { + if ((c = str->getChar()) == EOF) + return EOF; + codeBuf |= (c & 0xff) << codeSize; + codeSize += 8; + } + c = codeBuf & ((1 << bits) - 1); + codeBuf >>= bits; + codeSize -= bits; + return c; +} +#endif + +//------------------------------------------------------------------------ +// EOFStream +//------------------------------------------------------------------------ + +EOFStream::EOFStream(Stream *strA): + FilterStream(strA) { +} + +EOFStream::~EOFStream() { + delete str; +} + +//------------------------------------------------------------------------ +// FixedLengthEncoder +//------------------------------------------------------------------------ + +FixedLengthEncoder::FixedLengthEncoder(Stream *strA, int lengthA): + FilterStream(strA) { + length = lengthA; + count = 0; +} + +FixedLengthEncoder::~FixedLengthEncoder() { + if (str->isEncoder()) + delete str; +} + +void FixedLengthEncoder::reset() { + str->reset(); + count = 0; +} + +int FixedLengthEncoder::getChar() { + if (length >= 0 && count >= length) + return EOF; + ++count; + return str->getChar(); +} + +int FixedLengthEncoder::lookChar() { + if (length >= 0 && count >= length) + return EOF; + return str->getChar(); +} + +GBool FixedLengthEncoder::isBinary(GBool last) { + return str->isBinary(gTrue); +} + +//------------------------------------------------------------------------ +// ASCIIHexEncoder +//------------------------------------------------------------------------ + +ASCIIHexEncoder::ASCIIHexEncoder(Stream *strA): + FilterStream(strA) { + bufPtr = bufEnd = buf; + lineLen = 0; + eof = gFalse; +} + +ASCIIHexEncoder::~ASCIIHexEncoder() { + if (str->isEncoder()) { + delete str; + } +} + +void ASCIIHexEncoder::reset() { + str->reset(); + bufPtr = bufEnd = buf; + lineLen = 0; + eof = gFalse; +} + +GBool ASCIIHexEncoder::fillBuf() { + static const char *hex = "0123456789abcdef"; + int c; + + if (eof) { + return gFalse; + } + bufPtr = bufEnd = buf; + if ((c = str->getChar()) == EOF) { + *bufEnd++ = '>'; + eof = gTrue; + } else { + if (lineLen >= 64) { + *bufEnd++ = '\n'; + lineLen = 0; + } + *bufEnd++ = hex[(c >> 4) & 0x0f]; + *bufEnd++ = hex[c & 0x0f]; + lineLen += 2; + } + return gTrue; +} + +//------------------------------------------------------------------------ +// ASCII85Encoder +//------------------------------------------------------------------------ + +ASCII85Encoder::ASCII85Encoder(Stream *strA): + FilterStream(strA) { + bufPtr = bufEnd = buf; + lineLen = 0; + eof = gFalse; +} + +ASCII85Encoder::~ASCII85Encoder() { + if (str->isEncoder()) + delete str; +} + +void ASCII85Encoder::reset() { + str->reset(); + bufPtr = bufEnd = buf; + lineLen = 0; + eof = gFalse; +} + +GBool ASCII85Encoder::fillBuf() { + Guint t; + char buf1[5]; + int c0, c1, c2, c3; + int n, i; + + if (eof) { + return gFalse; + } + c0 = str->getChar(); + c1 = str->getChar(); + c2 = str->getChar(); + c3 = str->getChar(); + bufPtr = bufEnd = buf; + if (c3 == EOF) { + if (c0 == EOF) { + n = 0; + t = 0; + } else { + if (c1 == EOF) { + n = 1; + t = c0 << 24; + } else if (c2 == EOF) { + n = 2; + t = (c0 << 24) | (c1 << 16); + } else { + n = 3; + t = (c0 << 24) | (c1 << 16) | (c2 << 8); + } + for (i = 4; i >= 0; --i) { + buf1[i] = (char)(t % 85 + 0x21); + t /= 85; + } + for (i = 0; i <= n; ++i) { + *bufEnd++ = buf1[i]; + if (++lineLen == 65) { + *bufEnd++ = '\n'; + lineLen = 0; + } + } + } + *bufEnd++ = '~'; + *bufEnd++ = '>'; + eof = gTrue; + } else { + t = (c0 << 24) | (c1 << 16) | (c2 << 8) | c3; + if (t == 0) { + *bufEnd++ = 'z'; + if (++lineLen == 65) { + *bufEnd++ = '\n'; + lineLen = 0; + } + } else { + for (i = 4; i >= 0; --i) { + buf1[i] = (char)(t % 85 + 0x21); + t /= 85; + } + for (i = 0; i <= 4; ++i) { + *bufEnd++ = buf1[i]; + if (++lineLen == 65) { + *bufEnd++ = '\n'; + lineLen = 0; + } + } + } + } + return gTrue; +} + +//------------------------------------------------------------------------ +// RunLengthEncoder +//------------------------------------------------------------------------ + +RunLengthEncoder::RunLengthEncoder(Stream *strA): + FilterStream(strA) { + bufPtr = bufEnd = nextEnd = buf; + eof = gFalse; +} + +RunLengthEncoder::~RunLengthEncoder() { + if (str->isEncoder()) + delete str; +} + +void RunLengthEncoder::reset() { + str->reset(); + bufPtr = bufEnd = nextEnd = buf; + eof = gFalse; +} + +// +// When fillBuf finishes, buf[] looks like this: +// +-----+--------------+-----------------+-- +// + tag | ... data ... | next 0, 1, or 2 | +// +-----+--------------+-----------------+-- +// ^ ^ ^ +// bufPtr bufEnd nextEnd +// +GBool RunLengthEncoder::fillBuf() { + int c, c1, c2; + int n; + + // already hit EOF? + if (eof) + return gFalse; + + // grab two bytes + if (nextEnd < bufEnd + 1) { + if ((c1 = str->getChar()) == EOF) { + eof = gTrue; + return gFalse; + } + } else { + c1 = bufEnd[0] & 0xff; + } + if (nextEnd < bufEnd + 2) { + if ((c2 = str->getChar()) == EOF) { + eof = gTrue; + buf[0] = 0; + buf[1] = c1; + bufPtr = buf; + bufEnd = &buf[2]; + return gTrue; + } + } else { + c2 = bufEnd[1] & 0xff; + } + + // check for repeat + c = 0; // make gcc happy + if (c1 == c2) { + n = 2; + while (n < 128 && (c = str->getChar()) == c1) + ++n; + buf[0] = (char)(257 - n); + buf[1] = c1; + bufEnd = &buf[2]; + if (c == EOF) { + eof = gTrue; + } else if (n < 128) { + buf[2] = c; + nextEnd = &buf[3]; + } else { + nextEnd = bufEnd; + } + + // get up to 128 chars + } else { + buf[1] = c1; + buf[2] = c2; + n = 2; + while (n < 128) { + if ((c = str->getChar()) == EOF) { + eof = gTrue; + break; + } + ++n; + buf[n] = c; + if (buf[n] == buf[n-1]) + break; + } + if (buf[n] == buf[n-1]) { + buf[0] = (char)(n-2-1); + bufEnd = &buf[n-1]; + nextEnd = &buf[n+1]; + } else { + buf[0] = (char)(n-1); + bufEnd = nextEnd = &buf[n+1]; + } + } + bufPtr = buf; + return gTrue; +} + +//------------------------------------------------------------------------ +// CMKYGrayEncoder +//------------------------------------------------------------------------ + +CMKYGrayEncoder::CMKYGrayEncoder(Stream *strA): + FilterStream(strA) { + bufPtr = bufEnd = buf; + eof = gFalse; +} + +CMKYGrayEncoder::~CMKYGrayEncoder() { + if (str->isEncoder()) + delete str; +} + +void CMKYGrayEncoder::reset() { + str->reset(); + bufPtr = bufEnd = buf; + eof = gFalse; +} + +GBool CMKYGrayEncoder::fillBuf() { + int c0, c1, c2, c3; + int i; + + if (eof) { + return gFalse; + } + c0 = str->getChar(); + c1 = str->getChar(); + c2 = str->getChar(); + c3 = str->getChar(); + if (c3 == EOF) { + eof = gTrue; + return gFalse; + } + i = (3 * c0 + 6 * c1 + c2) / 10 + c3; + if (i > 255) i = 255; + bufPtr = bufEnd = buf; + *bufEnd++ = (char) i; + return gTrue; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/Stream.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/Stream.h new file mode 100644 index 00000000000..cb08e3ad3fc --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/Stream.h @@ -0,0 +1,1174 @@ +//======================================================================== +// +// Stream.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2008 Julien Rebetez <julien@fhtagn.net> +// Copyright (C) 2008, 2010, 2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com> +// Copyright (C) 2010 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2011 William Bader <williambader@hotmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef STREAM_H +#define STREAM_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "poppler-config.h" +#include <stdio.h> +#include "goo/gtypes.h" +#include "Object.h" + +class BaseStream; +class CachedFile; + +//------------------------------------------------------------------------ + +enum StreamKind { + strFile, + strCachedFile, + strASCIIHex, + strASCII85, + strLZW, + strRunLength, + strCCITTFax, + strDCT, + strFlate, + strJBIG2, + strJPX, + strWeird // internal-use stream types +}; + +enum StreamColorSpaceMode { + streamCSNone, + streamCSDeviceGray, + streamCSDeviceRGB, + streamCSDeviceCMYK +}; + +//------------------------------------------------------------------------ + +// This is in Stream.h instead of Decrypt.h to avoid really annoying +// include file dependency loops. +enum CryptAlgorithm { + cryptRC4, + cryptAES +}; + +//------------------------------------------------------------------------ + +typedef struct _ByteRange { + Guint offset; + Guint length; +} ByteRange; + +//------------------------------------------------------------------------ +// Stream (base class) +//------------------------------------------------------------------------ + +class Stream { +public: + + // Constructor. + Stream(); + + // Destructor. + virtual ~Stream(); + + // Reference counting. + int incRef() { return ++ref; } + int decRef() { return --ref; } + + // Get kind of stream. + virtual StreamKind getKind() = 0; + + // Reset stream to beginning. + virtual void reset() = 0; + + // Close down the stream. + virtual void close(); + + inline int doGetChars(int nChars, Guchar *buffer) + { + if (hasGetChars()) { + return getChars(nChars, buffer); + } else { + for (int i = 0; i < nChars; ++i) { + const int c = getChar(); + if (likely(c != EOF)) buffer[i] = c; + else return i; + } + return nChars; + } + } + + inline void fillGooString(GooString *s) + { + Guchar readBuf[4096]; + int readChars; + reset(); + while ((readChars = doGetChars(4096, readBuf)) != 0) { + s->append((const char *)readBuf, readChars); + } + } + + inline Guchar *toUnsignedChars(int *length, int initialSize = 4096, int sizeIncrement = 4096) + { + int readChars; + Guchar *buf = (Guchar *)gmalloc(initialSize); + int size = initialSize; + *length = 0; + int charsToRead = initialSize; + bool continueReading = true; + reset(); + while (continueReading && (readChars = doGetChars(charsToRead, &buf[*length])) != 0) { + *length += readChars; + if (readChars == charsToRead) { + if (lookChar() != EOF) { + size += sizeIncrement; + charsToRead = sizeIncrement; + buf = (Guchar *)grealloc(buf, size); + } else { + continueReading = false; + } + } else { + continueReading = false; + } + } + return buf; + } + + // Get next char from stream. + virtual int getChar() = 0; + + // Peek at next char in stream. + virtual int lookChar() = 0; + + // Get next char from stream without using the predictor. + // This is only used by StreamPredictor. + virtual int getRawChar(); + virtual void getRawChars(int nChars, int *buffer); + + // Get next char directly from stream source, without filtering it + virtual int getUnfilteredChar () = 0; + + // Resets the stream without reading anything (even not the headers) + // WARNING: Reading the stream with something else than getUnfilteredChar + // may lead to unexcepted behaviour until you call reset () + virtual void unfilteredReset () = 0; + + // Get next line from stream. + virtual char *getLine(char *buf, int size); + + // Get current position in file. + virtual int getPos() = 0; + + // Go to a position in the stream. If <dir> is negative, the + // position is from the end of the file; otherwise the position is + // from the start of the file. + virtual void setPos(Guint pos, int dir = 0) = 0; + + // Get PostScript command for the filter(s). + virtual GooString *getPSFilter(int psLevel, char *indent); + + // Does this stream type potentially contain non-printable chars? + virtual GBool isBinary(GBool last = gTrue) = 0; + + // Get the BaseStream of this stream. + virtual BaseStream *getBaseStream() = 0; + + // Get the stream after the last decoder (this may be a BaseStream + // or a DecryptStream). + virtual Stream *getUndecodedStream() = 0; + + // Get the dictionary associated with this stream. + virtual Dict *getDict() = 0; + + // Is this an encoding filter? + virtual GBool isEncoder() { return gFalse; } + + // Get image parameters which are defined by the stream contents. + virtual void getImageParams(int * /*bitsPerComponent*/, + StreamColorSpaceMode * /*csMode*/) {} + + // Return the next stream in the "stack". + virtual Stream *getNextStream() { return NULL; } + + // Add filters to this stream according to the parameters in <dict>. + // Returns the new stream. + Stream *addFilters(Object *dict); + +private: + virtual GBool hasGetChars() { return false; } + virtual int getChars(int nChars, Guchar *buffer); + + Stream *makeFilter(char *name, Stream *str, Object *params); + + int ref; // reference count +}; + + + //------------------------------------------------------------------------ +// OutStream +// +// This is the base class for all streams that output to a file +//------------------------------------------------------------------------ +class OutStream { +public: + // Constructor. + OutStream (); + + // Desctructor. + virtual ~OutStream (); + + // Reference counting. + int incRef() { return ++ref; } + int decRef() { return --ref; } + + // Close the stream + virtual void close() = 0; + + // Return position in stream + virtual int getPos() = 0; + + // Put a char in the stream + virtual void put (char c) = 0; + + //FIXME + // Printf-like function 2,3 because the first arg is class instance ? + virtual void printf (const char *format, ...) = 0 ; //__attribute__((format(printf, 2,3))) = 0; + +private: + int ref; // reference count + +}; + +//------------------------------------------------------------------------ +// FileOutStream +//------------------------------------------------------------------------ +class FileOutStream : public OutStream { +public: + FileOutStream (FILE* fa, Guint startA); + + virtual ~FileOutStream (); + + virtual void close(); + + virtual int getPos(); + + virtual void put (char c); + + virtual void printf (const char *format, ...); +private: + FILE *f; + Guint start; + +}; + + +//------------------------------------------------------------------------ +// BaseStream +// +// This is the base class for all streams that read directly from a file. +//------------------------------------------------------------------------ + +class BaseStream: public Stream { +public: + + BaseStream(Object *dictA, Guint lengthA); + virtual ~BaseStream(); + virtual Stream *makeSubStream(Guint start, GBool limited, + Guint length, Object *dict) = 0; + virtual void setPos(Guint pos, int dir = 0) = 0; + virtual GBool isBinary(GBool last = gTrue) { return last; } + virtual BaseStream *getBaseStream() { return this; } + virtual Stream *getUndecodedStream() { return this; } + virtual Dict *getDict() { return dict.getDict(); } + virtual GooString *getFileName() { return NULL; } + virtual Guint getLength() { return length; } + + // Get/set position of first byte of stream within the file. + virtual Guint getStart() = 0; + virtual void moveStart(int delta) = 0; + +protected: + + Guint length; + +private: + + Object dict; +}; + +//------------------------------------------------------------------------ +// FilterStream +// +// This is the base class for all streams that filter another stream. +//------------------------------------------------------------------------ + +class FilterStream: public Stream { +public: + + FilterStream(Stream *strA); + virtual ~FilterStream(); + virtual void close(); + virtual int getPos() { return str->getPos(); } + virtual void setPos(Guint pos, int dir = 0); + virtual BaseStream *getBaseStream() { return str->getBaseStream(); } + virtual Stream *getUndecodedStream() { return str->getUndecodedStream(); } + virtual Dict *getDict() { return str->getDict(); } + virtual Stream *getNextStream() { return str; } + + virtual int getUnfilteredChar () { return str->getUnfilteredChar(); } + virtual void unfilteredReset () { str->unfilteredReset(); } + +protected: + + Stream *str; +}; + +//------------------------------------------------------------------------ +// ImageStream +//------------------------------------------------------------------------ + +class ImageStream { +public: + + // Create an image stream object for an image with the specified + // parameters. Note that these are the actual image parameters, + // which may be different from the predictor parameters. + ImageStream(Stream *strA, int widthA, int nCompsA, int nBitsA); + + ~ImageStream(); + + // Reset the stream. + void reset(); + + // Close the stream previously reset + void close(); + + // Gets the next pixel from the stream. <pix> should be able to hold + // at least nComps elements. Returns false at end of file. + GBool getPixel(Guchar *pix); + + // Returns a pointer to the next line of pixels. Returns NULL at + // end of file. + Guchar *getLine(); + + // Skip an entire line from the image. + void skipLine(); + +private: + + Stream *str; // base stream + int width; // pixels per line + int nComps; // components per pixel + int nBits; // bits per component + int nVals; // components per line + Guchar *imgLine; // line buffer + int imgIdx; // current index in imgLine +}; + +//------------------------------------------------------------------------ +// StreamPredictor +//------------------------------------------------------------------------ + +class StreamPredictor { +public: + + // Create a predictor object. Note that the parameters are for the + // predictor, and may not match the actual image parameters. + StreamPredictor(Stream *strA, int predictorA, + int widthA, int nCompsA, int nBitsA); + + ~StreamPredictor(); + + GBool isOk() { return ok; } + + int lookChar(); + int getChar(); + int getChars(int nChars, Guchar *buffer); + +private: + + GBool getNextLine(); + + inline int doGetChar() { + if (predIdx >= rowBytes) { + if (!getNextLine()) { + return EOF; + } + } + return predLine[predIdx++]; + } + + Stream *str; // base stream + int predictor; // predictor + int width; // pixels per line + int nComps; // components per pixel + int nBits; // bits per component + int nVals; // components per line + int pixBytes; // bytes per pixel + int rowBytes; // bytes per line + Guchar *predLine; // line buffer + int predIdx; // current index in predLine + GBool ok; +}; + +//------------------------------------------------------------------------ +// FileStream +//------------------------------------------------------------------------ + +#define fileStreamBufSize 256 + +class FileStream: public BaseStream { +public: + + FileStream(FILE *fA, Guint startA, GBool limitedA, + Guint lengthA, Object *dictA); + virtual ~FileStream(); + virtual Stream *makeSubStream(Guint startA, GBool limitedA, + Guint lengthA, Object *dictA); + virtual StreamKind getKind() { return strFile; } + virtual void reset(); + virtual void close(); + virtual int getChar() + { return doGetChar(); } + virtual int lookChar() + { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); } + virtual int getPos() { return bufPos + (bufPtr - buf); } + virtual void setPos(Guint pos, int dir = 0); + virtual Guint getStart() { return start; } + virtual void moveStart(int delta); + + virtual int getUnfilteredChar () { return getChar(); } + virtual void unfilteredReset () { reset(); } + +private: + + GBool fillBuf(); + + inline int doGetChar() + { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); } + + virtual GBool hasGetChars() { return true; } + virtual int getChars(int nChars, Guchar *buffer) + { + for (int i = 0; i < nChars; ++i) { + const int c = doGetChar(); + if (likely(c != EOF)) buffer[i] = c; + else return i; + } + return nChars; + } + + FILE *f; + Guint start; + GBool limited; + char buf[fileStreamBufSize]; + char *bufPtr; + char *bufEnd; + Guint bufPos; + int savePos; + GBool saved; +}; + +//------------------------------------------------------------------------ +// CachedFileStream +//------------------------------------------------------------------------ + +#define cachedStreamBufSize 1024 + +class CachedFileStream: public BaseStream { +public: + + CachedFileStream(CachedFile *ccA, Guint startA, GBool limitedA, + Guint lengthA, Object *dictA); + virtual ~CachedFileStream(); + virtual Stream *makeSubStream(Guint startA, GBool limitedA, + Guint lengthA, Object *dictA); + virtual StreamKind getKind() { return strCachedFile; } + virtual void reset(); + virtual void close(); + virtual int getChar() + { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); } + virtual int lookChar() + { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); } + virtual int getPos() { return bufPos + (bufPtr - buf); } + virtual void setPos(Guint pos, int dir = 0); + virtual Guint getStart() { return start; } + virtual void moveStart(int delta); + + virtual int getUnfilteredChar () { return getChar(); } + virtual void unfilteredReset () { reset(); } + +private: + + GBool fillBuf(); + + CachedFile *cc; + Guint start; + GBool limited; + char buf[cachedStreamBufSize]; + char *bufPtr; + char *bufEnd; + Guint bufPos; + int savePos; + GBool saved; +}; + + +//------------------------------------------------------------------------ +// MemStream +//------------------------------------------------------------------------ + +class MemStream: public BaseStream { +public: + + MemStream(char *bufA, Guint startA, Guint lengthA, Object *dictA); + virtual ~MemStream(); + virtual Stream *makeSubStream(Guint start, GBool limited, + Guint lengthA, Object *dictA); + virtual StreamKind getKind() { return strWeird; } + virtual void reset(); + virtual void close(); + virtual int getChar() + { return (bufPtr < bufEnd) ? (*bufPtr++ & 0xff) : EOF; } + virtual int lookChar() + { return (bufPtr < bufEnd) ? (*bufPtr & 0xff) : EOF; } + virtual int getPos() { return (int)(bufPtr - buf); } + virtual void setPos(Guint pos, int dir = 0); + virtual Guint getStart() { return start; } + virtual void moveStart(int delta); + + //if needFree = true, the stream will delete buf when it is destroyed + //otherwise it will not touch it. Default value is false + virtual void setNeedFree (GBool val) { needFree = val; } + + virtual int getUnfilteredChar () { return getChar(); } + virtual void unfilteredReset () { reset (); } + +private: + + char *buf; + Guint start; + char *bufEnd; + char *bufPtr; + GBool needFree; +}; + +//------------------------------------------------------------------------ +// EmbedStream +// +// This is a special stream type used for embedded streams (inline +// images). It reads directly from the base stream -- after the +// EmbedStream is deleted, reads from the base stream will proceed where +// the BaseStream left off. Note that this is very different behavior +// that creating a new FileStream (using makeSubStream). +//------------------------------------------------------------------------ + +class EmbedStream: public BaseStream { +public: + + EmbedStream(Stream *strA, Object *dictA, GBool limitedA, Guint lengthA); + virtual ~EmbedStream(); + virtual Stream *makeSubStream(Guint start, GBool limitedA, + Guint lengthA, Object *dictA); + virtual StreamKind getKind() { return str->getKind(); } + virtual void reset() {} + virtual int getChar(); + virtual int lookChar(); + virtual int getPos() { return str->getPos(); } + virtual void setPos(Guint pos, int dir = 0); + virtual Guint getStart(); + virtual void moveStart(int delta); + + virtual int getUnfilteredChar () { return str->getUnfilteredChar(); } + virtual void unfilteredReset () { str->unfilteredReset(); } + + +private: + + Stream *str; + GBool limited; +}; + +//------------------------------------------------------------------------ +// ASCIIHexStream +//------------------------------------------------------------------------ + +class ASCIIHexStream: public FilterStream { +public: + + ASCIIHexStream(Stream *strA); + virtual ~ASCIIHexStream(); + virtual StreamKind getKind() { return strASCIIHex; } + virtual void reset(); + virtual int getChar() + { int c = lookChar(); buf = EOF; return c; } + virtual int lookChar(); + virtual GooString *getPSFilter(int psLevel, char *indent); + virtual GBool isBinary(GBool last = gTrue); + +private: + + int buf; + GBool eof; +}; + +//------------------------------------------------------------------------ +// ASCII85Stream +//------------------------------------------------------------------------ + +class ASCII85Stream: public FilterStream { +public: + + ASCII85Stream(Stream *strA); + virtual ~ASCII85Stream(); + virtual StreamKind getKind() { return strASCII85; } + virtual void reset(); + virtual int getChar() + { int ch = lookChar(); ++index; return ch; } + virtual int lookChar(); + virtual GooString *getPSFilter(int psLevel, char *indent); + virtual GBool isBinary(GBool last = gTrue); + +private: + + int c[5]; + int b[4]; + int index, n; + GBool eof; +}; + +//------------------------------------------------------------------------ +// LZWStream +//------------------------------------------------------------------------ + +class LZWStream: public FilterStream { +public: + + LZWStream(Stream *strA, int predictor, int columns, int colors, + int bits, int earlyA); + virtual ~LZWStream(); + virtual StreamKind getKind() { return strLZW; } + virtual void reset(); + virtual int getChar(); + virtual int lookChar(); + virtual int getRawChar(); + virtual void getRawChars(int nChars, int *buffer); + virtual GooString *getPSFilter(int psLevel, char *indent); + virtual GBool isBinary(GBool last = gTrue); + +private: + + inline int doGetRawChar() { + if (eof) { + return EOF; + } + if (seqIndex >= seqLength) { + if (!processNextCode()) { + return EOF; + } + } + return seqBuf[seqIndex++]; + } + + StreamPredictor *pred; // predictor + int early; // early parameter + GBool eof; // true if at eof + int inputBuf; // input buffer + int inputBits; // number of bits in input buffer + struct { // decoding table + int length; + int head; + Guchar tail; + } table[4097]; + int nextCode; // next code to be used + int nextBits; // number of bits in next code word + int prevCode; // previous code used in stream + int newChar; // next char to be added to table + Guchar seqBuf[4097]; // buffer for current sequence + int seqLength; // length of current sequence + int seqIndex; // index into current sequence + GBool first; // first code after a table clear + + GBool processNextCode(); + void clearTable(); + int getCode(); +}; + +//------------------------------------------------------------------------ +// RunLengthStream +//------------------------------------------------------------------------ + +class RunLengthStream: public FilterStream { +public: + + RunLengthStream(Stream *strA); + virtual ~RunLengthStream(); + virtual StreamKind getKind() { return strRunLength; } + virtual void reset(); + virtual int getChar() + { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); } + virtual int lookChar() + { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); } + virtual GooString *getPSFilter(int psLevel, char *indent); + virtual GBool isBinary(GBool last = gTrue); + +private: + + char buf[128]; // buffer + char *bufPtr; // next char to read + char *bufEnd; // end of buffer + GBool eof; + + GBool fillBuf(); +}; + +//------------------------------------------------------------------------ +// CCITTFaxStream +//------------------------------------------------------------------------ + +struct CCITTCodeTable; + +class CCITTFaxStream: public FilterStream { +public: + + CCITTFaxStream(Stream *strA, int encodingA, GBool endOfLineA, + GBool byteAlignA, int columnsA, int rowsA, + GBool endOfBlockA, GBool blackA); + virtual ~CCITTFaxStream(); + virtual StreamKind getKind() { return strCCITTFax; } + virtual void reset(); + virtual int getChar() + { int c = lookChar(); buf = EOF; return c; } + virtual int lookChar(); + virtual GooString *getPSFilter(int psLevel, char *indent); + virtual GBool isBinary(GBool last = gTrue); + + virtual void unfilteredReset (); + +private: + + int encoding; // 'K' parameter + GBool endOfLine; // 'EndOfLine' parameter + GBool byteAlign; // 'EncodedByteAlign' parameter + int columns; // 'Columns' parameter + int rows; // 'Rows' parameter + GBool endOfBlock; // 'EndOfBlock' parameter + GBool black; // 'BlackIs1' parameter + GBool eof; // true if at eof + GBool nextLine2D; // true if next line uses 2D encoding + int row; // current row + int inputBuf; // input buffer + int inputBits; // number of bits in input buffer + int *codingLine; // coding line changing elements + int *refLine; // reference line changing elements + int a0i; // index into codingLine + GBool err; // error on current line + int outputBits; // remaining ouput bits + int buf; // character buffer + + void addPixels(int a1, int black); + void addPixelsNeg(int a1, int black); + short getTwoDimCode(); + short getWhiteCode(); + short getBlackCode(); + short lookBits(int n); + void eatBits(int n) { if ((inputBits -= n) < 0) inputBits = 0; } +}; + +#ifndef ENABLE_LIBJPEG +//------------------------------------------------------------------------ +// DCTStream +//------------------------------------------------------------------------ + +// DCT component info +struct DCTCompInfo { + int id; // component ID + int hSample, vSample; // horiz/vert sampling resolutions + int quantTable; // quantization table number + int prevDC; // DC coefficient accumulator +}; + +struct DCTScanInfo { + GBool comp[4]; // comp[i] is set if component i is + // included in this scan + int numComps; // number of components in the scan + int dcHuffTable[4]; // DC Huffman table numbers + int acHuffTable[4]; // AC Huffman table numbers + int firstCoeff, lastCoeff; // first and last DCT coefficient + int ah, al; // successive approximation parameters +}; + +// DCT Huffman decoding table +struct DCTHuffTable { + Guchar firstSym[17]; // first symbol for this bit length + Gushort firstCode[17]; // first code for this bit length + Gushort numCodes[17]; // number of codes of this bit length + Guchar sym[256]; // symbols +}; + +class DCTStream: public FilterStream { +public: + + DCTStream(Stream *strA, int colorXformA); + virtual ~DCTStream(); + virtual StreamKind getKind() { return strDCT; } + virtual void reset(); + virtual void close(); + virtual int getChar(); + virtual int lookChar(); + virtual GooString *getPSFilter(int psLevel, char *indent); + virtual GBool isBinary(GBool last = gTrue); + + virtual void unfilteredReset(); + +private: + + GBool progressive; // set if in progressive mode + GBool interleaved; // set if in interleaved mode + int width, height; // image size + int mcuWidth, mcuHeight; // size of min coding unit, in data units + int bufWidth, bufHeight; // frameBuf size + DCTCompInfo compInfo[4]; // info for each component + DCTScanInfo scanInfo; // info for the current scan + int numComps; // number of components in image + int colorXform; // color transform: -1 = unspecified + // 0 = none + // 1 = YUV/YUVK -> RGB/CMYK + GBool gotJFIFMarker; // set if APP0 JFIF marker was present + GBool gotAdobeMarker; // set if APP14 Adobe marker was present + int restartInterval; // restart interval, in MCUs + Gushort quantTables[4][64]; // quantization tables + int numQuantTables; // number of quantization tables + DCTHuffTable dcHuffTables[4]; // DC Huffman tables + DCTHuffTable acHuffTables[4]; // AC Huffman tables + int numDCHuffTables; // number of DC Huffman tables + int numACHuffTables; // number of AC Huffman tables + Guchar *rowBuf[4][32]; // buffer for one MCU (non-progressive mode) + int *frameBuf[4]; // buffer for frame (progressive mode) + int comp, x, y, dy; // current position within image/MCU + int restartCtr; // MCUs left until restart + int restartMarker; // next restart marker + int eobRun; // number of EOBs left in the current run + int inputBuf; // input buffer for variable length codes + int inputBits; // number of valid bits in input buffer + + void restart(); + GBool readMCURow(); + void readScan(); + GBool readDataUnit(DCTHuffTable *dcHuffTable, + DCTHuffTable *acHuffTable, + int *prevDC, int data[64]); + GBool readProgressiveDataUnit(DCTHuffTable *dcHuffTable, + DCTHuffTable *acHuffTable, + int *prevDC, int data[64]); + void decodeImage(); + void transformDataUnit(Gushort *quantTable, + int dataIn[64], Guchar dataOut[64]); + int readHuffSym(DCTHuffTable *table); + int readAmp(int size); + int readBit(); + GBool readHeader(); + GBool readBaselineSOF(); + GBool readProgressiveSOF(); + GBool readScanInfo(); + GBool readQuantTables(); + GBool readHuffmanTables(); + GBool readRestartInterval(); + GBool readJFIFMarker(); + GBool readAdobeMarker(); + GBool readTrailer(); + int readMarker(); + int read16(); +}; + +#endif + +#ifndef ENABLE_ZLIB +//------------------------------------------------------------------------ +// FlateStream +//------------------------------------------------------------------------ + +#define flateWindow 32768 // buffer size +#define flateMask (flateWindow-1) +#define flateMaxHuffman 15 // max Huffman code length +#define flateMaxCodeLenCodes 19 // max # code length codes +#define flateMaxLitCodes 288 // max # literal codes +#define flateMaxDistCodes 30 // max # distance codes + +// Huffman code table entry +struct FlateCode { + Gushort len; // code length, in bits + Gushort val; // value represented by this code +}; + +struct FlateHuffmanTab { + FlateCode *codes; + int maxLen; +}; + +// Decoding info for length and distance code words +struct FlateDecode { + int bits; // # extra bits + int first; // first length/distance +}; + +class FlateStream: public FilterStream { +public: + + FlateStream(Stream *strA, int predictor, int columns, + int colors, int bits); + virtual ~FlateStream(); + virtual StreamKind getKind() { return strFlate; } + virtual void reset(); + virtual int getChar(); + virtual int lookChar(); + virtual int getRawChar(); + virtual void getRawChars(int nChars, int *buffer); + virtual GooString *getPSFilter(int psLevel, char *indent); + virtual GBool isBinary(GBool last = gTrue); + virtual void unfilteredReset (); + +private: + inline int doGetRawChar() { + int c; + + while (remain == 0) { + if (endOfBlock && eof) + return EOF; + readSome(); + } + c = buf[index]; + index = (index + 1) & flateMask; + --remain; + return c; + } + + inline int doGetChar() { + if (pred) { + return pred->getChar(); + } + return doGetRawChar(); + } + + virtual GBool hasGetChars() { return true; } + virtual int getChars(int nChars, Guchar *buffer); + + StreamPredictor *pred; // predictor + Guchar buf[flateWindow]; // output data buffer + int index; // current index into output buffer + int remain; // number valid bytes in output buffer + int codeBuf; // input buffer + int codeSize; // number of bits in input buffer + int // literal and distance code lengths + codeLengths[flateMaxLitCodes + flateMaxDistCodes]; + FlateHuffmanTab litCodeTab; // literal code table + FlateHuffmanTab distCodeTab; // distance code table + GBool compressedBlock; // set if reading a compressed block + int blockLen; // remaining length of uncompressed block + GBool endOfBlock; // set when end of block is reached + GBool eof; // set when end of stream is reached + + static int // code length code reordering + codeLenCodeMap[flateMaxCodeLenCodes]; + static FlateDecode // length decoding info + lengthDecode[flateMaxLitCodes-257]; + static FlateDecode // distance decoding info + distDecode[flateMaxDistCodes]; + static FlateHuffmanTab // fixed literal code table + fixedLitCodeTab; + static FlateHuffmanTab // fixed distance code table + fixedDistCodeTab; + + void readSome(); + GBool startBlock(); + void loadFixedCodes(); + GBool readDynamicCodes(); + void compHuffmanCodes(int *lengths, int n, FlateHuffmanTab *tab); + int getHuffmanCodeWord(FlateHuffmanTab *tab); + int getCodeWord(int bits); +}; +#endif + +//------------------------------------------------------------------------ +// EOFStream +//------------------------------------------------------------------------ + +class EOFStream: public FilterStream { +public: + + EOFStream(Stream *strA); + virtual ~EOFStream(); + virtual StreamKind getKind() { return strWeird; } + virtual void reset() {} + virtual int getChar() { return EOF; } + virtual int lookChar() { return EOF; } + virtual GooString *getPSFilter(int /*psLevel*/, char * /*indent*/) { return NULL; } + virtual GBool isBinary(GBool /*last = gTrue*/) { return gFalse; } +}; + +//------------------------------------------------------------------------ +// FixedLengthEncoder +//------------------------------------------------------------------------ + +class FixedLengthEncoder: public FilterStream { +public: + + FixedLengthEncoder(Stream *strA, int lengthA); + ~FixedLengthEncoder(); + virtual StreamKind getKind() { return strWeird; } + virtual void reset(); + virtual int getChar(); + virtual int lookChar(); + virtual GooString *getPSFilter(int /*psLevel*/, char * /*indent*/) { return NULL; } + virtual GBool isBinary(GBool /*last = gTrue*/); + virtual GBool isEncoder() { return gTrue; } + +private: + + int length; + int count; +}; + +//------------------------------------------------------------------------ +// ASCIIHexEncoder +//------------------------------------------------------------------------ + +class ASCIIHexEncoder: public FilterStream { +public: + + ASCIIHexEncoder(Stream *strA); + virtual ~ASCIIHexEncoder(); + virtual StreamKind getKind() { return strWeird; } + virtual void reset(); + virtual int getChar() + { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); } + virtual int lookChar() + { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); } + virtual GooString *getPSFilter(int /*psLevel*/, char * /*indent*/) { return NULL; } + virtual GBool isBinary(GBool /*last = gTrue*/) { return gFalse; } + virtual GBool isEncoder() { return gTrue; } + +private: + + char buf[4]; + char *bufPtr; + char *bufEnd; + int lineLen; + GBool eof; + + GBool fillBuf(); +}; + +//------------------------------------------------------------------------ +// ASCII85Encoder +//------------------------------------------------------------------------ + +class ASCII85Encoder: public FilterStream { +public: + + ASCII85Encoder(Stream *strA); + virtual ~ASCII85Encoder(); + virtual StreamKind getKind() { return strWeird; } + virtual void reset(); + virtual int getChar() + { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); } + virtual int lookChar() + { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); } + virtual GooString *getPSFilter(int /*psLevel*/, char * /*indent*/) { return NULL; } + virtual GBool isBinary(GBool /*last = gTrue*/) { return gFalse; } + virtual GBool isEncoder() { return gTrue; } + +private: + + char buf[8]; + char *bufPtr; + char *bufEnd; + int lineLen; + GBool eof; + + GBool fillBuf(); +}; + +//------------------------------------------------------------------------ +// RunLengthEncoder +//------------------------------------------------------------------------ + +class RunLengthEncoder: public FilterStream { +public: + + RunLengthEncoder(Stream *strA); + virtual ~RunLengthEncoder(); + virtual StreamKind getKind() { return strWeird; } + virtual void reset(); + virtual int getChar() + { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); } + virtual int lookChar() + { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); } + virtual GooString *getPSFilter(int /*psLevel*/, char * /*indent*/) { return NULL; } + virtual GBool isBinary(GBool /*last = gTrue*/) { return gTrue; } + virtual GBool isEncoder() { return gTrue; } + +private: + + char buf[131]; + char *bufPtr; + char *bufEnd; + char *nextEnd; + GBool eof; + + GBool fillBuf(); +}; + +//------------------------------------------------------------------------ +// CMKYGrayEncoder +//------------------------------------------------------------------------ + +class CMKYGrayEncoder: public FilterStream { +public: + + CMKYGrayEncoder(Stream *strA); + virtual ~CMKYGrayEncoder(); + virtual StreamKind getKind() { return strWeird; } + virtual void reset(); + virtual int getChar() + { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); } + virtual int lookChar() + { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); } + virtual GooString *getPSFilter(int /*psLevel*/, char * /*indent*/) { return NULL; } + virtual GBool isBinary(GBool /*last = gTrue*/) { return gFalse; } + virtual GBool isEncoder() { return gTrue; } + +private: + + char buf[2]; + char *bufPtr; + char *bufEnd; + GBool eof; + + GBool fillBuf(); +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/TextOutputDev.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/TextOutputDev.cc new file mode 100644 index 00000000000..3d7ba6de0c1 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/TextOutputDev.cc @@ -0,0 +1,5456 @@ +//======================================================================== +// +// TextOutputDev.cc +// +// Copyright 1997-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005-2007 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2005 Nickolay V. Shmyrev <nshmyrev@yandex.ru> +// Copyright (C) 2006-2008, 2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2006, 2007 Ed Catmur <ed@catmur.co.uk> +// Copyright (C) 2006 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2007, 2008 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2008 Koji Otani <sho@bbr.jp> +// Copyright (C) 2008, 2010, 2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2008 Pino Toscano <pino@kde.org> +// Copyright (C) 2008, 2010 Hib Eris <hib@hiberis.nl> +// Copyright (C) 2009 Ross Moore <ross@maths.mq.edu.au> +// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> +// Copyright (C) 2010 Brian Ewins <brian.ewins@gmail.com> +// Copyright (C) 2010 Suzuki Toshiya <mpsuzuki@hiroshima-u.ac.jp> +// Copyright (C) 2011 Sam Liao <phyomh@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#include <math.h> +#include <float.h> +#include <ctype.h> +#ifdef _WIN32 +#include <fcntl.h> // for O_BINARY +#include <io.h> // for setmode +#endif +#include "goo/gmem.h" +#include "goo/GooString.h" +#include "goo/GooList.h" +#include "poppler-config.h" +#include "Error.h" +#include "GlobalParams.h" +#include "UnicodeMap.h" +#include "UnicodeTypeTable.h" +#include "Link.h" +#include "TextOutputDev.h" +#include "Page.h" +#include "Annot.h" +#include "PDFDocEncoding.h" + +#ifdef MACOS +// needed for setting type/creator of MacOS files +#include "ICSupport.h" +#endif + +//------------------------------------------------------------------------ +// parameters +//------------------------------------------------------------------------ + +// Each bucket in a text pool includes baselines within a range of +// this many points. +#define textPoolStep 4 + +// Inter-character space width which will cause addChar to start a new +// word. +#define minWordBreakSpace 0.1 + +// Negative inter-character space width, i.e., overlap, which will +// cause addChar to start a new word. +#define minDupBreakOverlap 0.2 + +// Max distance between baselines of two lines within a block, as a +// fraction of the font size. +#define maxLineSpacingDelta 1.5 + +// Max difference in primary font sizes on two lines in the same +// block. Delta1 is used when examining new lines above and below the +// current block; delta2 is used when examining text that overlaps the +// current block; delta3 is used when examining text to the left and +// right of the current block. +#define maxBlockFontSizeDelta1 0.05 +#define maxBlockFontSizeDelta2 0.6 +#define maxBlockFontSizeDelta3 0.2 + +// Max difference in font sizes inside a word. +#define maxWordFontSizeDelta 0.05 + +// Maximum distance between baselines of two words on the same line, +// e.g., distance between subscript or superscript and the primary +// baseline, as a fraction of the font size. +#define maxIntraLineDelta 0.5 + +// Minimum inter-word spacing, as a fraction of the font size. (Only +// used for raw ordering.) +#define minWordSpacing 0.15 + +// Maximum inter-word spacing, as a fraction of the font size. +#define maxWordSpacing 1.5 + +// Maximum horizontal spacing which will allow a word to be pulled +// into a block. +#define minColSpacing1 0.3 + +// Minimum spacing between columns, as a fraction of the font size. +#define minColSpacing2 1.0 + +// Maximum vertical spacing between blocks within a flow, as a +// multiple of the font size. +#define maxBlockSpacing 2.5 + +// Minimum spacing between characters within a word, as a fraction of +// the font size. +#define minCharSpacing -0.2 + +// Maximum spacing between characters within a word, as a fraction of +// the font size, when there is no obvious extra-wide character +// spacing. +#define maxCharSpacing 0.03 + +// When extra-wide character spacing is detected, the inter-character +// space threshold is set to the minimum inter-character space +// multiplied by this constant. +#define maxWideCharSpacingMul 1.3 + +// Upper limit on spacing between characters in a word. +#define maxWideCharSpacing 0.4 + +// Max difference in primary,secondary coordinates (as a fraction of +// the font size) allowed for duplicated text (fake boldface, drop +// shadows) which is to be discarded. +#define dupMaxPriDelta 0.1 +#define dupMaxSecDelta 0.2 + +// Max width of underlines (in points). +#define maxUnderlineWidth 3 + +// Min distance between baseline and underline (in points). +//~ this should be font-size-dependent +#define minUnderlineGap -2 + +// Max distance between baseline and underline (in points). +//~ this should be font-size-dependent +#define maxUnderlineGap 4 + +// Max horizontal distance between edge of word and start of underline +// (in points). +//~ this should be font-size-dependent +#define underlineSlack 1 + +// Max distance between edge of text and edge of link border +#define hyperlinkSlack 2 + +//------------------------------------------------------------------------ +// TextUnderline +//------------------------------------------------------------------------ + +class TextUnderline { +public: + + TextUnderline(double x0A, double y0A, double x1A, double y1A) + { x0 = x0A; y0 = y0A; x1 = x1A; y1 = y1A; horiz = y0 == y1; } + ~TextUnderline() {} + + double x0, y0, x1, y1; + GBool horiz; +}; + +//------------------------------------------------------------------------ +// TextLink +//------------------------------------------------------------------------ + +class TextLink { +public: + + TextLink(int xMinA, int yMinA, int xMaxA, int yMaxA, AnnotLink *linkA) + { xMin = xMinA; yMin = yMinA; xMax = xMaxA; yMax = yMaxA; link = linkA; } + ~TextLink() {} + + int xMin, yMin, xMax, yMax; + AnnotLink *link; +}; + +//------------------------------------------------------------------------ +// TextFontInfo +//------------------------------------------------------------------------ + +TextFontInfo::TextFontInfo(GfxState *state) { + gfxFont = state->getFont(); + if (gfxFont) + gfxFont->incRefCnt(); +#if TEXTOUT_WORD_LIST + fontName = (gfxFont && gfxFont->getOrigName()) + ? gfxFont->getOrigName()->copy() + : (GooString *)NULL; + flags = gfxFont ? gfxFont->getFlags() : 0; +#endif +} + +TextFontInfo::~TextFontInfo() { + if (gfxFont) + gfxFont->decRefCnt(); +#if TEXTOUT_WORD_LIST + if (fontName) { + delete fontName; + } +#endif +} + +GBool TextFontInfo::matches(GfxState *state) { + return state->getFont() == gfxFont; +} + +GBool TextFontInfo::matches(TextFontInfo *fontInfo) { + return gfxFont == fontInfo->gfxFont; +} + +//------------------------------------------------------------------------ +// TextWord +//------------------------------------------------------------------------ + +TextWord::TextWord(GfxState *state, int rotA, double x0, double y0, + int charPosA, TextFontInfo *fontA, double fontSizeA) { + GfxFont *gfxFont; + double x, y, ascent, descent; + + rot = rotA; + charPos = charPosA; + charLen = 0; + font = fontA; + fontSize = fontSizeA; + state->transform(x0, y0, &x, &y); + if ((gfxFont = font->gfxFont)) { + ascent = gfxFont->getAscent() * fontSize; + descent = gfxFont->getDescent() * fontSize; + } else { + // this means that the PDF file draws text without a current font, + // which should never happen + ascent = 0.95 * fontSize; + descent = -0.35 * fontSize; + } + switch (rot) { + case 0: + yMin = y - ascent; + yMax = y - descent; + if (yMin == yMax) { + // this is a sanity check for a case that shouldn't happen -- but + // if it does happen, we want to avoid dividing by zero later + yMin = y; + yMax = y + 1; + } + base = y; + break; + case 1: + xMin = x + descent; + xMax = x + ascent; + if (xMin == xMax) { + // this is a sanity check for a case that shouldn't happen -- but + // if it does happen, we want to avoid dividing by zero later + xMin = x; + xMax = x + 1; + } + base = x; + break; + case 2: + yMin = y + descent; + yMax = y + ascent; + if (yMin == yMax) { + // this is a sanity check for a case that shouldn't happen -- but + // if it does happen, we want to avoid dividing by zero later + yMin = y; + yMax = y + 1; + } + base = y; + break; + case 3: + xMin = x - ascent; + xMax = x - descent; + if (xMin == xMax) { + // this is a sanity check for a case that shouldn't happen -- but + // if it does happen, we want to avoid dividing by zero later + xMin = x; + xMax = x + 1; + } + base = x; + break; + } + text = NULL; + charcode = NULL; + edge = NULL; + len = size = 0; + spaceAfter = gFalse; + next = NULL; + +#if TEXTOUT_WORD_LIST + GfxRGB rgb; + + if ((state->getRender() & 3) == 1) { + state->getStrokeRGB(&rgb); + } else { + state->getFillRGB(&rgb); + } + colorR = colToDbl(rgb.r); + colorG = colToDbl(rgb.g); + colorB = colToDbl(rgb.b); +#endif + + underlined = gFalse; + link = NULL; +} + +TextWord::~TextWord() { + gfree(text); + gfree(charcode); + gfree(edge); +} + +void TextWord::addChar(GfxState *state, double x, double y, + double dx, double dy, CharCode c, Unicode u) { + if (len == size) { + size += 16; + text = (Unicode *)greallocn(text, size, sizeof(Unicode)); + charcode = (Unicode *)greallocn(charcode, size, sizeof(CharCode)); + edge = (double *)greallocn(edge, (size + 1), sizeof(double)); + } + text[len] = u; + charcode[len] = c; + switch (rot) { + case 0: + if (len == 0) { + xMin = x; + } + edge[len] = x; + xMax = edge[len+1] = x + dx; + break; + case 1: + if (len == 0) { + yMin = y; + } + edge[len] = y; + yMax = edge[len+1] = y + dy; + break; + case 2: + if (len == 0) { + xMax = x; + } + edge[len] = x; + xMin = edge[len+1] = x + dx; + break; + case 3: + if (len == 0) { + yMax = y; + } + edge[len] = y; + yMin = edge[len+1] = y + dy; + break; + } + ++len; +} + +void TextWord::merge(TextWord *word) { + int i; + + if (word->xMin < xMin) { + xMin = word->xMin; + } + if (word->yMin < yMin) { + yMin = word->yMin; + } + if (word->xMax > xMax) { + xMax = word->xMax; + } + if (word->yMax > yMax) { + yMax = word->yMax; + } + if (len + word->len > size) { + size = len + word->len; + text = (Unicode *)greallocn(text, size, sizeof(Unicode)); + charcode = (CharCode *)greallocn(charcode, (size + 1), sizeof(CharCode)); + edge = (double *)greallocn(edge, (size + 1), sizeof(double)); + } + for (i = 0; i < word->len; ++i) { + text[len + i] = word->text[i]; + charcode[len + i] = word->charcode[i]; + edge[len + i] = word->edge[i]; + } + edge[len + word->len] = word->edge[word->len]; + len += word->len; + charLen += word->charLen; +} + +inline int TextWord::primaryCmp(TextWord *word) { + double cmp; + + cmp = 0; // make gcc happy + switch (rot) { + case 0: + cmp = xMin - word->xMin; + break; + case 1: + cmp = yMin - word->yMin; + break; + case 2: + cmp = word->xMax - xMax; + break; + case 3: + cmp = word->yMax - yMax; + break; + } + return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; +} + +double TextWord::primaryDelta(TextWord *word) { + double delta; + + delta = 0; // make gcc happy + switch (rot) { + case 0: + delta = word->xMin - xMax; + break; + case 1: + delta = word->yMin - yMax; + break; + case 2: + delta = xMin - word->xMax; + break; + case 3: + delta = yMin - word->yMax; + break; + } + return delta; +} + +int TextWord::cmpYX(const void *p1, const void *p2) { + TextWord *word1 = *(TextWord **)p1; + TextWord *word2 = *(TextWord **)p2; + double cmp; + + cmp = word1->yMin - word2->yMin; + if (cmp == 0) { + cmp = word1->xMin - word2->xMin; + } + return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; +} + +#if TEXTOUT_WORD_LIST + +GooString *TextWord::getText() { + GooString *s; + UnicodeMap *uMap; + char buf[8]; + int n, i; + + s = new GooString(); + if (!(uMap = globalParams->getTextEncoding())) { + return s; + } + for (i = 0; i < len; ++i) { + n = uMap->mapUnicode(text[i], buf, sizeof(buf)); + s->append(buf, n); + } + uMap->decRefCnt(); + return s; +} + +void TextWord::getCharBBox(int charIdx, double *xMinA, double *yMinA, + double *xMaxA, double *yMaxA) { + if (charIdx < 0 || charIdx >= len) { + return; + } + switch (rot) { + case 0: + *xMinA = edge[charIdx]; + *xMaxA = edge[charIdx + 1]; + *yMinA = yMin; + *yMaxA = yMax; + break; + case 1: + *xMinA = xMin; + *xMaxA = xMax; + *yMinA = edge[charIdx]; + *yMaxA = edge[charIdx + 1]; + break; + case 2: + *xMinA = edge[charIdx + 1]; + *xMaxA = edge[charIdx]; + *yMinA = yMin; + *yMaxA = yMax; + break; + case 3: + *xMinA = xMin; + *xMaxA = xMax; + *yMinA = edge[charIdx + 1]; + *yMaxA = edge[charIdx]; + break; + } +} + +#endif // TEXTOUT_WORD_LIST + +//------------------------------------------------------------------------ +// TextPool +//------------------------------------------------------------------------ + +TextPool::TextPool() { + minBaseIdx = 0; + maxBaseIdx = -1; + pool = NULL; + cursor = NULL; + cursorBaseIdx = -1; +} + +TextPool::~TextPool() { + int baseIdx; + TextWord *word, *word2; + + for (baseIdx = minBaseIdx; baseIdx <= maxBaseIdx; ++baseIdx) { + for (word = pool[baseIdx - minBaseIdx]; word; word = word2) { + word2 = word->next; + delete word; + } + } + gfree(pool); +} + +int TextPool::getBaseIdx(double base) { + int baseIdx; + + baseIdx = (int)(base / textPoolStep); + if (baseIdx < minBaseIdx) { + return minBaseIdx; + } + if (baseIdx > maxBaseIdx) { + return maxBaseIdx; + } + return baseIdx; +} + +void TextPool::addWord(TextWord *word) { + TextWord **newPool; + int wordBaseIdx, newMinBaseIdx, newMaxBaseIdx, baseIdx; + TextWord *w0, *w1; + + // expand the array if needed + wordBaseIdx = (int)(word->base / textPoolStep); + if (minBaseIdx > maxBaseIdx) { + minBaseIdx = wordBaseIdx - 128; + maxBaseIdx = wordBaseIdx + 128; + pool = (TextWord **)gmallocn(maxBaseIdx - minBaseIdx + 1, + sizeof(TextWord *)); + for (baseIdx = minBaseIdx; baseIdx <= maxBaseIdx; ++baseIdx) { + pool[baseIdx - minBaseIdx] = NULL; + } + } else if (wordBaseIdx < minBaseIdx) { + newMinBaseIdx = wordBaseIdx - 128; + newPool = (TextWord **)gmallocn(maxBaseIdx - newMinBaseIdx + 1, + sizeof(TextWord *)); + for (baseIdx = newMinBaseIdx; baseIdx < minBaseIdx; ++baseIdx) { + newPool[baseIdx - newMinBaseIdx] = NULL; + } + memcpy(&newPool[minBaseIdx - newMinBaseIdx], pool, + (maxBaseIdx - minBaseIdx + 1) * sizeof(TextWord *)); + gfree(pool); + pool = newPool; + minBaseIdx = newMinBaseIdx; + } else if (wordBaseIdx > maxBaseIdx) { + newMaxBaseIdx = wordBaseIdx + 128; + pool = (TextWord **)greallocn(pool, newMaxBaseIdx - minBaseIdx + 1, + sizeof(TextWord *)); + for (baseIdx = maxBaseIdx + 1; baseIdx <= newMaxBaseIdx; ++baseIdx) { + pool[baseIdx - minBaseIdx] = NULL; + } + maxBaseIdx = newMaxBaseIdx; + } + + // insert the new word + if (cursor && wordBaseIdx == cursorBaseIdx && + word->primaryCmp(cursor) > 0) { + w0 = cursor; + w1 = cursor->next; + } else { + w0 = NULL; + w1 = pool[wordBaseIdx - minBaseIdx]; + } + for (; w1 && word->primaryCmp(w1) > 0; w0 = w1, w1 = w1->next) ; + word->next = w1; + if (w0) { + w0->next = word; + } else { + pool[wordBaseIdx - minBaseIdx] = word; + } + cursor = word; + cursorBaseIdx = wordBaseIdx; +} + +//------------------------------------------------------------------------ +// TextLine +//------------------------------------------------------------------------ + +TextLine::TextLine(TextBlock *blkA, int rotA, double baseA) { + blk = blkA; + rot = rotA; + base = baseA; + words = lastWord = NULL; + text = NULL; + edge = NULL; + col = NULL; + len = 0; + convertedLen = 0; + hyphenated = gFalse; + next = NULL; + xMin = yMin = 0; + xMax = yMax = -1; + normalized = NULL; + normalized_len = 0; + normalized_idx = NULL; +} + +TextLine::~TextLine() { + TextWord *word; + + while (words) { + word = words; + words = words->next; + delete word; + } + gfree(text); + gfree(edge); + gfree(col); + if (normalized) { + gfree(normalized); + gfree(normalized_idx); + } +} + +void TextLine::addWord(TextWord *word) { + if (lastWord) { + lastWord->next = word; + } else { + words = word; + } + lastWord = word; + + if (xMin > xMax) { + xMin = word->xMin; + xMax = word->xMax; + yMin = word->yMin; + yMax = word->yMax; + } else { + if (word->xMin < xMin) { + xMin = word->xMin; + } + if (word->xMax > xMax) { + xMax = word->xMax; + } + if (word->yMin < yMin) { + yMin = word->yMin; + } + if (word->yMax > yMax) { + yMax = word->yMax; + } + } +} + +double TextLine::primaryDelta(TextLine *line) { + double delta; + + delta = 0; // make gcc happy + switch (rot) { + case 0: + delta = line->xMin - xMax; + break; + case 1: + delta = line->yMin - yMax; + break; + case 2: + delta = xMin - line->xMax; + break; + case 3: + delta = yMin - line->yMax; + break; + } + return delta; +} + +int TextLine::primaryCmp(TextLine *line) { + double cmp; + + cmp = 0; // make gcc happy + switch (rot) { + case 0: + cmp = xMin - line->xMin; + break; + case 1: + cmp = yMin - line->yMin; + break; + case 2: + cmp = line->xMax - xMax; + break; + case 3: + cmp = line->yMax - yMax; + break; + } + return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; +} + +int TextLine::secondaryCmp(TextLine *line) { + double cmp; + + cmp = (rot == 0 || rot == 3) ? base - line->base : line->base - base; + return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; +} + +int TextLine::cmpYX(TextLine *line) { + int cmp; + + if ((cmp = secondaryCmp(line))) { + return cmp; + } + return primaryCmp(line); +} + +int TextLine::cmpXY(const void *p1, const void *p2) { + TextLine *line1 = *(TextLine **)p1; + TextLine *line2 = *(TextLine **)p2; + int cmp; + + if ((cmp = line1->primaryCmp(line2))) { + return cmp; + } + return line1->secondaryCmp(line2); +} + +void TextLine::coalesce(UnicodeMap *uMap) { + TextWord *word0, *word1; + double space, delta, minSpace; + GBool isUnicode; + char buf[8]; + int i, j; + + if (words->next) { + + // compute the inter-word space threshold + if (words->len > 1 || words->next->len > 1) { + minSpace = 0; + } else { + minSpace = words->primaryDelta(words->next); + for (word0 = words->next, word1 = word0->next; + word1 && minSpace > 0; + word0 = word1, word1 = word0->next) { + if (word1->len > 1) { + minSpace = 0; + } + delta = word0->primaryDelta(word1); + if (delta < minSpace) { + minSpace = delta; + } + } + } + if (minSpace <= 0) { + space = maxCharSpacing * words->fontSize; + } else { + space = maxWideCharSpacingMul * minSpace; + if (space > maxWideCharSpacing * words->fontSize) { + space = maxWideCharSpacing * words->fontSize; + } + } + + // merge words + word0 = words; + word1 = words->next; + while (word1) { + if (word0->primaryDelta(word1) >= space) { + word0->spaceAfter = gTrue; + word0 = word1; + word1 = word1->next; + } else if (word0->font == word1->font && + word0->underlined == word1->underlined && + fabs(word0->fontSize - word1->fontSize) < + maxWordFontSizeDelta * words->fontSize && + word1->charPos == word0->charPos + word0->charLen) { + word0->merge(word1); + word0->next = word1->next; + delete word1; + word1 = word0->next; + } else { + word0 = word1; + word1 = word1->next; + } + } + } + + // build the line text + isUnicode = uMap ? uMap->isUnicode() : gFalse; + len = 0; + for (word1 = words; word1; word1 = word1->next) { + len += word1->len; + if (word1->spaceAfter) { + ++len; + } + } + text = (Unicode *)gmallocn(len, sizeof(Unicode)); + edge = (double *)gmallocn(len + 1, sizeof(double)); + i = 0; + for (word1 = words; word1; word1 = word1->next) { + for (j = 0; j < word1->len; ++j) { + text[i] = word1->text[j]; + edge[i] = word1->edge[j]; + ++i; + } + edge[i] = word1->edge[word1->len]; + if (word1->spaceAfter) { + text[i] = (Unicode)0x0020; + ++i; + } + } + + // compute convertedLen and set up the col array + col = (int *)gmallocn(len + 1, sizeof(int)); + convertedLen = 0; + for (i = 0; i < len; ++i) { + col[i] = convertedLen; + if (isUnicode) { + ++convertedLen; + } else if (uMap) { + convertedLen += uMap->mapUnicode(text[i], buf, sizeof(buf)); + } + } + col[len] = convertedLen; + + // check for hyphen at end of line + //~ need to check for other chars used as hyphens + hyphenated = text[len - 1] == (Unicode)'-'; +} + +//------------------------------------------------------------------------ +// TextLineFrag +//------------------------------------------------------------------------ + +class TextLineFrag { +public: + + TextLine *line; // the line object + int start, len; // offset and length of this fragment + // (in Unicode chars) + double xMin, xMax; // bounding box coordinates + double yMin, yMax; + double base; // baseline virtual coordinate + int col; // first column + + void init(TextLine *lineA, int startA, int lenA); + void computeCoords(GBool oneRot); + + static int cmpYXPrimaryRot(const void *p1, const void *p2); + static int cmpYXLineRot(const void *p1, const void *p2); + static int cmpXYLineRot(const void *p1, const void *p2); + static int cmpXYColumnPrimaryRot(const void *p1, const void *p2); + static int cmpXYColumnLineRot(const void *p1, const void *p2); +}; + +void TextLineFrag::init(TextLine *lineA, int startA, int lenA) { + line = lineA; + start = startA; + len = lenA; + col = line->col[start]; +} + +void TextLineFrag::computeCoords(GBool oneRot) { + TextBlock *blk; + double d0, d1, d2, d3, d4; + + if (oneRot) { + + switch (line->rot) { + case 0: + xMin = line->edge[start]; + xMax = line->edge[start + len]; + yMin = line->yMin; + yMax = line->yMax; + break; + case 1: + xMin = line->xMin; + xMax = line->xMax; + yMin = line->edge[start]; + yMax = line->edge[start + len]; + break; + case 2: + xMin = line->edge[start + len]; + xMax = line->edge[start]; + yMin = line->yMin; + yMax = line->yMax; + break; + case 3: + xMin = line->xMin; + xMax = line->xMax; + yMin = line->edge[start + len]; + yMax = line->edge[start]; + break; + } + base = line->base; + + } else { + + if (line->rot == 0 && line->blk->page->primaryRot == 0) { + + xMin = line->edge[start]; + xMax = line->edge[start + len]; + yMin = line->yMin; + yMax = line->yMax; + base = line->base; + + } else { + + blk = line->blk; + d0 = line->edge[start]; + d1 = line->edge[start + len]; + d2 = d3 = d4 = 0; // make gcc happy + + switch (line->rot) { + case 0: + d2 = line->yMin; + d3 = line->yMax; + d4 = line->base; + d0 = (d0 - blk->xMin) / (blk->xMax - blk->xMin); + d1 = (d1 - blk->xMin) / (blk->xMax - blk->xMin); + d2 = (d2 - blk->yMin) / (blk->yMax - blk->yMin); + d3 = (d3 - blk->yMin) / (blk->yMax - blk->yMin); + d4 = (d4 - blk->yMin) / (blk->yMax - blk->yMin); + break; + case 1: + d2 = line->xMax; + d3 = line->xMin; + d4 = line->base; + d0 = (d0 - blk->yMin) / (blk->yMax - blk->yMin); + d1 = (d1 - blk->yMin) / (blk->yMax - blk->yMin); + d2 = (blk->xMax - d2) / (blk->xMax - blk->xMin); + d3 = (blk->xMax - d3) / (blk->xMax - blk->xMin); + d4 = (blk->xMax - d4) / (blk->xMax - blk->xMin); + break; + case 2: + d2 = line->yMax; + d3 = line->yMin; + d4 = line->base; + d0 = (blk->xMax - d0) / (blk->xMax - blk->xMin); + d1 = (blk->xMax - d1) / (blk->xMax - blk->xMin); + d2 = (blk->yMax - d2) / (blk->yMax - blk->yMin); + d3 = (blk->yMax - d3) / (blk->yMax - blk->yMin); + d4 = (blk->yMax - d4) / (blk->yMax - blk->yMin); + break; + case 3: + d2 = line->xMin; + d3 = line->xMax; + d4 = line->base; + d0 = (blk->yMax - d0) / (blk->yMax - blk->yMin); + d1 = (blk->yMax - d1) / (blk->yMax - blk->yMin); + d2 = (d2 - blk->xMin) / (blk->xMax - blk->xMin); + d3 = (d3 - blk->xMin) / (blk->xMax - blk->xMin); + d4 = (d4 - blk->xMin) / (blk->xMax - blk->xMin); + break; + } + + switch (line->blk->page->primaryRot) { + case 0: + xMin = blk->xMin + d0 * (blk->xMax - blk->xMin); + xMax = blk->xMin + d1 * (blk->xMax - blk->xMin); + yMin = blk->yMin + d2 * (blk->yMax - blk->yMin); + yMax = blk->yMin + d3 * (blk->yMax - blk->yMin); + base = blk->yMin + base * (blk->yMax - blk->yMin); + break; + case 1: + xMin = blk->xMax - d3 * (blk->xMax - blk->xMin); + xMax = blk->xMax - d2 * (blk->xMax - blk->xMin); + yMin = blk->yMin + d0 * (blk->yMax - blk->yMin); + yMax = blk->yMin + d1 * (blk->yMax - blk->yMin); + base = blk->xMax - d4 * (blk->xMax - blk->xMin); + break; + case 2: + xMin = blk->xMax - d1 * (blk->xMax - blk->xMin); + xMax = blk->xMax - d0 * (blk->xMax - blk->xMin); + yMin = blk->yMax - d3 * (blk->yMax - blk->yMin); + yMax = blk->yMax - d2 * (blk->yMax - blk->yMin); + base = blk->yMax - d4 * (blk->yMax - blk->yMin); + break; + case 3: + xMin = blk->xMin + d2 * (blk->xMax - blk->xMin); + xMax = blk->xMin + d3 * (blk->xMax - blk->xMin); + yMin = blk->yMax - d1 * (blk->yMax - blk->yMin); + yMax = blk->yMax - d0 * (blk->yMax - blk->yMin); + base = blk->xMin + d4 * (blk->xMax - blk->xMin); + break; + } + + } + } +} + +int TextLineFrag::cmpYXPrimaryRot(const void *p1, const void *p2) { + TextLineFrag *frag1 = (TextLineFrag *)p1; + TextLineFrag *frag2 = (TextLineFrag *)p2; + double cmp; + + cmp = 0; // make gcc happy + switch (frag1->line->blk->page->primaryRot) { + case 0: + if (fabs(cmp = frag1->yMin - frag2->yMin) < 0.01) { + cmp = frag1->xMin - frag2->xMin; + } + break; + case 1: + if (fabs(cmp = frag2->xMax - frag1->xMax) < 0.01) { + cmp = frag1->yMin - frag2->yMin; + } + break; + case 2: + if (fabs(cmp = frag2->yMin - frag1->yMin) < 0.01) { + cmp = frag2->xMax - frag1->xMax; + } + break; + case 3: + if (fabs(cmp = frag1->xMax - frag2->xMax) < 0.01) { + cmp = frag2->yMax - frag1->yMax; + } + break; + } + return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; +} + +int TextLineFrag::cmpYXLineRot(const void *p1, const void *p2) { + TextLineFrag *frag1 = (TextLineFrag *)p1; + TextLineFrag *frag2 = (TextLineFrag *)p2; + double cmp; + + cmp = 0; // make gcc happy + switch (frag1->line->rot) { + case 0: + if ((cmp = frag1->yMin - frag2->yMin) == 0) { + cmp = frag1->xMin - frag2->xMin; + } + break; + case 1: + if ((cmp = frag2->xMax - frag1->xMax) == 0) { + cmp = frag1->yMin - frag2->yMin; + } + break; + case 2: + if ((cmp = frag2->yMin - frag1->yMin) == 0) { + cmp = frag2->xMax - frag1->xMax; + } + break; + case 3: + if ((cmp = frag1->xMax - frag2->xMax) == 0) { + cmp = frag2->yMax - frag1->yMax; + } + break; + } + return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; +} + +int TextLineFrag::cmpXYLineRot(const void *p1, const void *p2) { + TextLineFrag *frag1 = (TextLineFrag *)p1; + TextLineFrag *frag2 = (TextLineFrag *)p2; + double cmp; + + cmp = 0; // make gcc happy + switch (frag1->line->rot) { + case 0: + if ((cmp = frag1->xMin - frag2->xMin) == 0) { + cmp = frag1->yMin - frag2->yMin; + } + break; + case 1: + if ((cmp = frag1->yMin - frag2->yMin) == 0) { + cmp = frag2->xMax - frag1->xMax; + } + break; + case 2: + if ((cmp = frag2->xMax - frag1->xMax) == 0) { + cmp = frag2->yMin - frag1->yMin; + } + break; + case 3: + if ((cmp = frag2->yMax - frag1->yMax) == 0) { + cmp = frag1->xMax - frag2->xMax; + } + break; + } + return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; +} + +int TextLineFrag::cmpXYColumnPrimaryRot(const void *p1, const void *p2) { + TextLineFrag *frag1 = (TextLineFrag *)p1; + TextLineFrag *frag2 = (TextLineFrag *)p2; + double cmp; + + // if columns overlap, compare y values + if (frag1->col < frag2->col + (frag2->line->col[frag2->start + frag2->len] - + frag2->line->col[frag2->start]) && + frag2->col < frag1->col + (frag1->line->col[frag1->start + frag1->len] - + frag1->line->col[frag1->start])) { + cmp = 0; // make gcc happy + switch (frag1->line->blk->page->primaryRot) { + case 0: cmp = frag1->yMin - frag2->yMin; break; + case 1: cmp = frag2->xMax - frag1->xMax; break; + case 2: cmp = frag2->yMin - frag1->yMin; break; + case 3: cmp = frag1->xMax - frag2->xMax; break; + } + return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; + } + + // otherwise, compare starting column + return frag1->col - frag2->col; +} + +int TextLineFrag::cmpXYColumnLineRot(const void *p1, const void *p2) { + TextLineFrag *frag1 = (TextLineFrag *)p1; + TextLineFrag *frag2 = (TextLineFrag *)p2; + double cmp; + + // if columns overlap, compare y values + if (frag1->col < frag2->col + (frag2->line->col[frag2->start + frag2->len] - + frag2->line->col[frag2->start]) && + frag2->col < frag1->col + (frag1->line->col[frag1->start + frag1->len] - + frag1->line->col[frag1->start])) { + cmp = 0; // make gcc happy + switch (frag1->line->rot) { + case 0: cmp = frag1->yMin - frag2->yMin; break; + case 1: cmp = frag2->xMax - frag1->xMax; break; + case 2: cmp = frag2->yMin - frag1->yMin; break; + case 3: cmp = frag1->xMax - frag2->xMax; break; + } + return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; + } + + // otherwise, compare starting column + return frag1->col - frag2->col; +} + +//------------------------------------------------------------------------ +// TextBlock +//------------------------------------------------------------------------ + +TextBlock::TextBlock(TextPage *pageA, int rotA) { + page = pageA; + rot = rotA; + xMin = yMin = 0; + xMax = yMax = -1; + priMin = 0; + priMax = page->pageWidth; + pool = new TextPool(); + lines = NULL; + curLine = NULL; + next = NULL; + stackNext = NULL; + tableId = -1; + tableEnd = gFalse; +} + +TextBlock::~TextBlock() { + TextLine *line; + + delete pool; + while (lines) { + line = lines; + lines = lines->next; + delete line; + } +} + +void TextBlock::addWord(TextWord *word) { + pool->addWord(word); + if (xMin > xMax) { + xMin = word->xMin; + xMax = word->xMax; + yMin = word->yMin; + yMax = word->yMax; + } else { + if (word->xMin < xMin) { + xMin = word->xMin; + } + if (word->xMax > xMax) { + xMax = word->xMax; + } + if (word->yMin < yMin) { + yMin = word->yMin; + } + if (word->yMax > yMax) { + yMax = word->yMax; + } + } +} + +void TextBlock::coalesce(UnicodeMap *uMap) { + TextWord *word0, *word1, *word2, *bestWord0, *bestWord1, *lastWord; + TextLine *line, *line0, *line1; + int poolMinBaseIdx, startBaseIdx, minBaseIdx, maxBaseIdx; + int baseIdx, bestWordBaseIdx, idx0, idx1; + double minBase, maxBase; + double fontSize, delta, priDelta, secDelta; + TextLine **lineArray; + GBool found; + int col1, col2; + int i, j, k; + + // discard duplicated text (fake boldface, drop shadows) + for (idx0 = pool->minBaseIdx; idx0 <= pool->maxBaseIdx; ++idx0) { + word0 = pool->getPool(idx0); + while (word0) { + priDelta = dupMaxPriDelta * word0->fontSize; + secDelta = dupMaxSecDelta * word0->fontSize; + if (rot == 0 || rot == 3) { + maxBaseIdx = pool->getBaseIdx(word0->base + secDelta); + } else { + maxBaseIdx = pool->getBaseIdx(word0->base - secDelta); + } + found = gFalse; + word1 = word2 = NULL; // make gcc happy + for (idx1 = idx0; idx1 <= maxBaseIdx; ++idx1) { + if (idx1 == idx0) { + word1 = word0; + word2 = word0->next; + } else { + word1 = NULL; + word2 = pool->getPool(idx1); + } + for (; word2; word1 = word2, word2 = word2->next) { + if (word2->len == word0->len && + !memcmp(word2->text, word0->text, + word0->len * sizeof(Unicode))) { + switch (rot) { + case 0: + case 2: + found = fabs(word0->xMin - word2->xMin) < priDelta && + fabs(word0->xMax - word2->xMax) < priDelta && + fabs(word0->yMin - word2->yMin) < secDelta && + fabs(word0->yMax - word2->yMax) < secDelta; + break; + case 1: + case 3: + found = fabs(word0->xMin - word2->xMin) < secDelta && + fabs(word0->xMax - word2->xMax) < secDelta && + fabs(word0->yMin - word2->yMin) < priDelta && + fabs(word0->yMax - word2->yMax) < priDelta; + break; + } + } + if (found) { + break; + } + } + if (found) { + break; + } + } + if (found) { + if (word1) { + word1->next = word2->next; + } else { + pool->setPool(idx1, word2->next); + } + delete word2; + } else { + word0 = word0->next; + } + } + } + + // build the lines + curLine = NULL; + poolMinBaseIdx = pool->minBaseIdx; + charCount = 0; + nLines = 0; + while (1) { + + // find the first non-empty line in the pool + for (; + poolMinBaseIdx <= pool->maxBaseIdx && !pool->getPool(poolMinBaseIdx); + ++poolMinBaseIdx) ; + if (poolMinBaseIdx > pool->maxBaseIdx) { + break; + } + + // look for the left-most word in the first four lines of the + // pool -- this avoids starting with a superscript word + startBaseIdx = poolMinBaseIdx; + for (baseIdx = poolMinBaseIdx + 1; + baseIdx < poolMinBaseIdx + 4 && baseIdx <= pool->maxBaseIdx; + ++baseIdx) { + if (!pool->getPool(baseIdx)) { + continue; + } + if (pool->getPool(baseIdx)->primaryCmp(pool->getPool(startBaseIdx)) + < 0) { + startBaseIdx = baseIdx; + } + } + + // create a new line + word0 = pool->getPool(startBaseIdx); + pool->setPool(startBaseIdx, word0->next); + word0->next = NULL; + line = new TextLine(this, word0->rot, word0->base); + line->addWord(word0); + lastWord = word0; + + // compute the search range + fontSize = word0->fontSize; + minBase = word0->base - maxIntraLineDelta * fontSize; + maxBase = word0->base + maxIntraLineDelta * fontSize; + minBaseIdx = pool->getBaseIdx(minBase); + maxBaseIdx = pool->getBaseIdx(maxBase); + + // find the rest of the words in this line + while (1) { + + // find the left-most word whose baseline is in the range for + // this line + bestWordBaseIdx = 0; + bestWord0 = bestWord1 = NULL; + for (baseIdx = minBaseIdx; baseIdx <= maxBaseIdx; ++baseIdx) { + for (word0 = NULL, word1 = pool->getPool(baseIdx); + word1; + word0 = word1, word1 = word1->next) { + if (word1->base >= minBase && + word1->base <= maxBase && + (delta = lastWord->primaryDelta(word1)) >= + minCharSpacing * fontSize) { + if (delta < maxWordSpacing * fontSize && + (!bestWord1 || word1->primaryCmp(bestWord1) < 0)) { + bestWordBaseIdx = baseIdx; + bestWord0 = word0; + bestWord1 = word1; + } + break; + } + } + } + if (!bestWord1) { + break; + } + + // remove it from the pool, and add it to the line + if (bestWord0) { + bestWord0->next = bestWord1->next; + } else { + pool->setPool(bestWordBaseIdx, bestWord1->next); + } + bestWord1->next = NULL; + line->addWord(bestWord1); + lastWord = bestWord1; + } + + // add the line + if (curLine && line->cmpYX(curLine) > 0) { + line0 = curLine; + line1 = curLine->next; + } else { + line0 = NULL; + line1 = lines; + } + for (; + line1 && line->cmpYX(line1) > 0; + line0 = line1, line1 = line1->next) ; + if (line0) { + line0->next = line; + } else { + lines = line; + } + line->next = line1; + curLine = line; + line->coalesce(uMap); + charCount += line->len; + ++nLines; + } + + // sort lines into xy order for column assignment + lineArray = (TextLine **)gmallocn(nLines, sizeof(TextLine *)); + for (line = lines, i = 0; line; line = line->next, ++i) { + lineArray[i] = line; + } + qsort(lineArray, nLines, sizeof(TextLine *), &TextLine::cmpXY); + + // column assignment + nColumns = 0; + for (i = 0; i < nLines; ++i) { + line0 = lineArray[i]; + col1 = 0; + for (j = 0; j < i; ++j) { + line1 = lineArray[j]; + if (line1->primaryDelta(line0) >= 0) { + col2 = line1->col[line1->len] + 1; + } else { + k = 0; // make gcc happy + switch (rot) { + case 0: + for (k = 0; + k < line1->len && + line0->xMin >= 0.5 * (line1->edge[k] + line1->edge[k+1]); + ++k) ; + break; + case 1: + for (k = 0; + k < line1->len && + line0->yMin >= 0.5 * (line1->edge[k] + line1->edge[k+1]); + ++k) ; + break; + case 2: + for (k = 0; + k < line1->len && + line0->xMax <= 0.5 * (line1->edge[k] + line1->edge[k+1]); + ++k) ; + break; + case 3: + for (k = 0; + k < line1->len && + line0->yMax <= 0.5 * (line1->edge[k] + line1->edge[k+1]); + ++k) ; + break; + } + col2 = line1->col[k]; + } + if (col2 > col1) { + col1 = col2; + } + } + for (k = 0; k <= line0->len; ++k) { + line0->col[k] += col1; + } + if (line0->col[line0->len] > nColumns) { + nColumns = line0->col[line0->len]; + } + } + gfree(lineArray); +} + +void TextBlock::updatePriMinMax(TextBlock *blk) { + double newPriMin, newPriMax; + GBool gotPriMin, gotPriMax; + + gotPriMin = gotPriMax = gFalse; + newPriMin = newPriMax = 0; // make gcc happy + switch (page->primaryRot) { + case 0: + case 2: + if (blk->yMin < yMax && blk->yMax > yMin) { + if (blk->xMin < xMin) { + newPriMin = blk->xMax; + gotPriMin = gTrue; + } + if (blk->xMax > xMax) { + newPriMax = blk->xMin; + gotPriMax = gTrue; + } + } + break; + case 1: + case 3: + if (blk->xMin < xMax && blk->xMax > xMin) { + if (blk->yMin < yMin) { + newPriMin = blk->yMax; + gotPriMin = gTrue; + } + if (blk->yMax > yMax) { + newPriMax = blk->yMin; + gotPriMax = gTrue; + } + } + break; + } + if (gotPriMin) { + if (newPriMin > xMin) { + newPriMin = xMin; + } + if (newPriMin > priMin) { + priMin = newPriMin; + } + } + if (gotPriMax) { + if (newPriMax < xMax) { + newPriMax = xMax; + } + if (newPriMax < priMax) { + priMax = newPriMax; + } + } +} + +int TextBlock::cmpXYPrimaryRot(const void *p1, const void *p2) { + TextBlock *blk1 = *(TextBlock **)p1; + TextBlock *blk2 = *(TextBlock **)p2; + double cmp; + + cmp = 0; // make gcc happy + switch (blk1->page->primaryRot) { + case 0: + if ((cmp = blk1->xMin - blk2->xMin) == 0) { + cmp = blk1->yMin - blk2->yMin; + } + break; + case 1: + if ((cmp = blk1->yMin - blk2->yMin) == 0) { + cmp = blk2->xMax - blk1->xMax; + } + break; + case 2: + if ((cmp = blk2->xMax - blk1->xMax) == 0) { + cmp = blk2->yMin - blk1->yMin; + } + break; + case 3: + if ((cmp = blk2->yMax - blk1->yMax) == 0) { + cmp = blk1->xMax - blk2->xMax; + } + break; + } + return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; +} + +int TextBlock::cmpYXPrimaryRot(const void *p1, const void *p2) { + TextBlock *blk1 = *(TextBlock **)p1; + TextBlock *blk2 = *(TextBlock **)p2; + double cmp; + + cmp = 0; // make gcc happy + switch (blk1->page->primaryRot) { + case 0: + if ((cmp = blk1->yMin - blk2->yMin) == 0) { + cmp = blk1->xMin - blk2->xMin; + } + break; + case 1: + if ((cmp = blk2->xMax - blk1->xMax) == 0) { + cmp = blk1->yMin - blk2->yMin; + } + break; + case 2: + if ((cmp = blk2->yMin - blk1->yMin) == 0) { + cmp = blk2->xMax - blk1->xMax; + } + break; + case 3: + if ((cmp = blk1->xMax - blk2->xMax) == 0) { + cmp = blk2->yMax - blk1->yMax; + } + break; + } + return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; +} + +int TextBlock::primaryCmp(TextBlock *blk) { + double cmp; + + cmp = 0; // make gcc happy + switch (rot) { + case 0: + cmp = xMin - blk->xMin; + break; + case 1: + cmp = yMin - blk->yMin; + break; + case 2: + cmp = blk->xMax - xMax; + break; + case 3: + cmp = blk->yMax - yMax; + break; + } + return cmp < 0 ? -1 : cmp > 0 ? 1 : 0; +} + +double TextBlock::secondaryDelta(TextBlock *blk) { + double delta; + + delta = 0; // make gcc happy + switch (rot) { + case 0: + delta = blk->yMin - yMax; + break; + case 1: + delta = xMin - blk->xMax; + break; + case 2: + delta = yMin - blk->yMax; + break; + case 3: + delta = blk->xMin - xMax; + break; + } + return delta; +} + +GBool TextBlock::isBelow(TextBlock *blk) { + GBool below; + + below = gFalse; // make gcc happy + switch (page->primaryRot) { + case 0: + below = xMin >= blk->priMin && xMax <= blk->priMax && + yMin > blk->yMin; + break; + case 1: + below = yMin >= blk->priMin && yMax <= blk->priMax && + xMax < blk->xMax; + break; + case 2: + below = xMin >= blk->priMin && xMax <= blk->priMax && + yMax < blk->yMax; + break; + case 3: + below = yMin >= blk->priMin && yMax <= blk->priMax && + xMin > blk->xMin; + break; + } + + return below; +} + +GBool TextBlock::isBeforeByRule1(TextBlock *blk1) { + GBool before = gFalse; + GBool overlap = gFalse; + + switch (this->page->primaryRot) { + case 0: + case 2: + overlap = ((this->ExMin <= blk1->ExMin) && + (blk1->ExMin <= this->ExMax)) || + ((blk1->ExMin <= this->ExMin) && + (this->ExMin <= blk1->ExMax)); + break; + case 1: + case 3: + overlap = ((this->EyMin <= blk1->EyMin) && + (blk1->EyMin <= this->EyMax)) || + ((blk1->EyMin <= this->EyMin) && + (this->EyMin <= blk1->EyMax)); + break; + } + switch (this->page->primaryRot) { + case 0: + before = overlap && this->EyMin < blk1->EyMin; + break; + case 1: + before = overlap && this->ExMax > blk1->ExMax; + break; + case 2: + before = overlap && this->EyMax > blk1->EyMax; + break; + case 3: + before = overlap && this->ExMin < blk1->ExMin; + break; + } + return before; +} + +GBool TextBlock::isBeforeByRule2(TextBlock *blk1) { + double cmp = 0; + int rotLR = rot; + + if (!page->primaryLR) { + rotLR = (rotLR + 2) % 4; + } + + switch (rotLR) { + case 0: + cmp = ExMax - blk1->ExMin; + break; + case 1: + cmp = EyMin - blk1->EyMax; + break; + case 2: + cmp = blk1->ExMax - ExMin; + break; + case 3: + cmp = blk1->EyMin - EyMax; + break; + } + return cmp <= 0; +} + +// Sort into reading order by performing a topological sort using the rules +// given in "High Performance Document Layout Analysis", T.M. Breuel, 2003. +// See http://pubs.iupr.org/#2003-breuel-sdiut +// Topological sort is done by depth first search, see +// http://en.wikipedia.org/wiki/Topological_sorting +int TextBlock::visitDepthFirst(TextBlock *blkList, int pos1, + TextBlock **sorted, int sortPos, + GBool* visited) { + int pos2; + TextBlock *blk1, *blk2, *blk3; + GBool before; + + if (visited[pos1]) { + return sortPos; + } + + blk1 = this; + +#if 0 // for debugging + printf("visited: %d %.2f..%.2f %.2f..%.2f\n", + sortPos, blk1->ExMin, blk1->ExMax, blk1->EyMin, blk1->EyMax); +#endif + visited[pos1] = gTrue; + pos2 = -1; + for (blk2 = blkList; blk2; blk2 = blk2->next) { + pos2++; + if (visited[pos2]) { + // skip visited nodes + continue; + } + before = gFalse; + + // is blk2 before blk1? (for table entries) + if (blk1->tableId >= 0 && blk1->tableId == blk2->tableId) { + if (page->primaryLR) { + if (blk2->xMax <= blk1->xMin && + blk2->yMin <= blk1->yMax && + blk2->yMax >= blk1->yMin) + before = gTrue; + } else { + if (blk2->xMin >= blk1->xMax && + blk2->yMin <= blk1->yMax && + blk2->yMax >= blk1->yMin) + before = gTrue; + } + + if (blk2->yMax <= blk1->yMin) + before = gTrue; + } else { + if (blk2->isBeforeByRule1(blk1)) { + // Rule (1) blk1 and blk2 overlap, and blk2 is above blk1. + before = gTrue; +#if 0 // for debugging + printf("rule1: %.2f..%.2f %.2f..%.2f %.2f..%.2f %.2f..%.2f\n", + blk2->ExMin, blk2->ExMax, blk2->EyMin, blk2->EyMax, + blk1->ExMin, blk1->ExMax, blk1->EyMin, blk1->EyMax); +#endif + } else if (blk2->isBeforeByRule2(blk1)) { + // Rule (2) blk2 left of blk1, and no intervening blk3 + // such that blk1 is before blk3 by rule 1, + // and blk3 is before blk2 by rule 1. + before = gTrue; + for (blk3 = blkList; blk3; blk3 = blk3->next) { + if (blk3 == blk2 || blk3 == blk1) { + continue; + } + if (blk1->isBeforeByRule1(blk3) && + blk3->isBeforeByRule1(blk2)) { + before = gFalse; + break; + } + } +#if 0 // for debugging + if (before) { + printf("rule2: %.2f..%.2f %.2f..%.2f %.2f..%.2f %.2f..%.2f\n", + blk1->ExMin, blk1->ExMax, blk1->EyMin, blk1->EyMax, + blk2->ExMin, blk2->ExMax, blk2->EyMin, blk2->EyMax); + } +#endif + } + } + if (before) { + // blk2 is before blk1, so it needs to be visited + // before we can add blk1 to the sorted list. + sortPos = blk2->visitDepthFirst(blkList, pos2, sorted, sortPos, visited); + } + } +#if 0 // for debugging + printf("sorted: %d %.2f..%.2f %.2f..%.2f\n", + sortPos, blk1->ExMin, blk1->ExMax, blk1->EyMin, blk1->EyMax); +#endif + sorted[sortPos++] = blk1; + return sortPos; +} + +//------------------------------------------------------------------------ +// TextFlow +//------------------------------------------------------------------------ + +TextFlow::TextFlow(TextPage *pageA, TextBlock *blk) { + page = pageA; + xMin = blk->xMin; + xMax = blk->xMax; + yMin = blk->yMin; + yMax = blk->yMax; + priMin = blk->priMin; + priMax = blk->priMax; + blocks = lastBlk = blk; + next = NULL; +} + +TextFlow::~TextFlow() { + TextBlock *blk; + + while (blocks) { + blk = blocks; + blocks = blocks->next; + delete blk; + } +} + +void TextFlow::addBlock(TextBlock *blk) { + if (lastBlk) { + lastBlk->next = blk; + } else { + blocks = blk; + } + lastBlk = blk; + if (blk->xMin < xMin) { + xMin = blk->xMin; + } + if (blk->xMax > xMax) { + xMax = blk->xMax; + } + if (blk->yMin < yMin) { + yMin = blk->yMin; + } + if (blk->yMax > yMax) { + yMax = blk->yMax; + } +} + +GBool TextFlow::blockFits(TextBlock *blk, TextBlock *prevBlk) { + GBool fits; + + // lower blocks must use smaller fonts + if (blk->lines->words->fontSize > lastBlk->lines->words->fontSize) { + return gFalse; + } + + fits = gFalse; // make gcc happy + switch (page->primaryRot) { + case 0: + fits = blk->xMin >= priMin && blk->xMax <= priMax; + break; + case 1: + fits = blk->yMin >= priMin && blk->yMax <= priMax; + break; + case 2: + fits = blk->xMin >= priMin && blk->xMax <= priMax; + break; + case 3: + fits = blk->yMin >= priMin && blk->yMax <= priMax; + break; + } + return fits; +} + +#if TEXTOUT_WORD_LIST + +//------------------------------------------------------------------------ +// TextWordList +//------------------------------------------------------------------------ + +TextWordList::TextWordList(TextPage *text, GBool physLayout) { + TextFlow *flow; + TextBlock *blk; + TextLine *line; + TextWord *word; + TextWord **wordArray; + int nWords, i; + + words = new GooList(); + + if (text->rawOrder) { + for (word = text->rawWords; word; word = word->next) { + words->append(word); + } + + } else if (physLayout) { + // this is inefficient, but it's also the least useful of these + // three cases + nWords = 0; + for (flow = text->flows; flow; flow = flow->next) { + for (blk = flow->blocks; blk; blk = blk->next) { + for (line = blk->lines; line; line = line->next) { + for (word = line->words; word; word = word->next) { + ++nWords; + } + } + } + } + wordArray = (TextWord **)gmallocn(nWords, sizeof(TextWord *)); + i = 0; + for (flow = text->flows; flow; flow = flow->next) { + for (blk = flow->blocks; blk; blk = blk->next) { + for (line = blk->lines; line; line = line->next) { + for (word = line->words; word; word = word->next) { + wordArray[i++] = word; + } + } + } + } + qsort(wordArray, nWords, sizeof(TextWord *), &TextWord::cmpYX); + for (i = 0; i < nWords; ++i) { + words->append(wordArray[i]); + } + gfree(wordArray); + + } else { + for (flow = text->flows; flow; flow = flow->next) { + for (blk = flow->blocks; blk; blk = blk->next) { + for (line = blk->lines; line; line = line->next) { + for (word = line->words; word; word = word->next) { + words->append(word); + } + } + } + } + } +} + +TextWordList::~TextWordList() { + delete words; +} + +int TextWordList::getLength() { + return words->getLength(); +} + +TextWord *TextWordList::get(int idx) { + if (idx < 0 || idx >= words->getLength()) { + return NULL; + } + return (TextWord *)words->get(idx); +} + +#endif // TEXTOUT_WORD_LIST + +//------------------------------------------------------------------------ +// TextPage +//------------------------------------------------------------------------ + +TextPage::TextPage(GBool rawOrderA) { + int rot; + + refCnt = 1; + rawOrder = rawOrderA; + curWord = NULL; + charPos = 0; + curFont = NULL; + curFontSize = 0; + nest = 0; + nTinyChars = 0; + lastCharOverlap = gFalse; + if (!rawOrder) { + for (rot = 0; rot < 4; ++rot) { + pools[rot] = new TextPool(); + } + } + flows = NULL; + blocks = NULL; + rawWords = NULL; + rawLastWord = NULL; + fonts = new GooList(); + lastFindXMin = lastFindYMin = 0; + haveLastFind = gFalse; + underlines = new GooList(); + links = new GooList(); +} + +TextPage::~TextPage() { + int rot; + + clear(); + if (!rawOrder) { + for (rot = 0; rot < 4; ++rot) { + delete pools[rot]; + } + } + delete fonts; + deleteGooList(underlines, TextUnderline); + deleteGooList(links, TextLink); +} + +void TextPage::incRefCnt() { + refCnt++; +} + +void TextPage::decRefCnt() { + if (--refCnt == 0) + delete this; +} + +void TextPage::startPage(GfxState *state) { + clear(); + if (state) { + pageWidth = state->getPageWidth(); + pageHeight = state->getPageHeight(); + } else { + pageWidth = pageHeight = 0; + } +} + +void TextPage::endPage() { + if (curWord) { + endWord(); + } +} + +void TextPage::clear() { + int rot; + TextFlow *flow; + TextWord *word; + + if (curWord) { + delete curWord; + curWord = NULL; + } + if (rawOrder) { + while (rawWords) { + word = rawWords; + rawWords = rawWords->next; + delete word; + } + } else { + for (rot = 0; rot < 4; ++rot) { + delete pools[rot]; + } + while (flows) { + flow = flows; + flows = flows->next; + delete flow; + } + gfree(blocks); + } + deleteGooList(fonts, TextFontInfo); + + curWord = NULL; + charPos = 0; + curFont = NULL; + curFontSize = 0; + nest = 0; + nTinyChars = 0; + if (!rawOrder) { + for (rot = 0; rot < 4; ++rot) { + pools[rot] = new TextPool(); + } + } + flows = NULL; + blocks = NULL; + rawWords = NULL; + rawLastWord = NULL; + fonts = new GooList(); +} + +void TextPage::updateFont(GfxState *state) { + GfxFont *gfxFont; + double *fm; + char *name; + int code, mCode, letterCode, anyCode; + double w; + int i; + + // get the font info object + curFont = NULL; + for (i = 0; i < fonts->getLength(); ++i) { + curFont = (TextFontInfo *)fonts->get(i); + if (curFont->matches(state)) { + break; + } + curFont = NULL; + } + if (!curFont) { + curFont = new TextFontInfo(state); + fonts->append(curFont); + } + + // adjust the font size + gfxFont = state->getFont(); + curFontSize = state->getTransformedFontSize(); + if (gfxFont && gfxFont->getType() == fontType3) { + // This is a hack which makes it possible to deal with some Type 3 + // fonts. The problem is that it's impossible to know what the + // base coordinate system used in the font is without actually + // rendering the font. This code tries to guess by looking at the + // width of the character 'm' (which breaks if the font is a + // subset that doesn't contain 'm'). + mCode = letterCode = anyCode = -1; + for (code = 0; code < 256; ++code) { + name = ((Gfx8BitFont *)gfxFont)->getCharName(code); + if (name && name[0] == 'm' && name[1] == '\0') { + mCode = code; + } + if (letterCode < 0 && name && name[1] == '\0' && + ((name[0] >= 'A' && name[0] <= 'Z') || + (name[0] >= 'a' && name[0] <= 'z'))) { + letterCode = code; + } + if (anyCode < 0 && name && + ((Gfx8BitFont *)gfxFont)->getWidth(code) > 0) { + anyCode = code; + } + } + if (mCode >= 0 && + (w = ((Gfx8BitFont *)gfxFont)->getWidth(mCode)) > 0) { + // 0.6 is a generic average 'm' width -- yes, this is a hack + curFontSize *= w / 0.6; + } else if (letterCode >= 0 && + (w = ((Gfx8BitFont *)gfxFont)->getWidth(letterCode)) > 0) { + // even more of a hack: 0.5 is a generic letter width + curFontSize *= w / 0.5; + } else if (anyCode >= 0 && + (w = ((Gfx8BitFont *)gfxFont)->getWidth(anyCode)) > 0) { + // better than nothing: 0.5 is a generic character width + curFontSize *= w / 0.5; + } + fm = gfxFont->getFontMatrix(); + if (fm[0] != 0) { + curFontSize *= fabs(fm[3] / fm[0]); + } + } +} + +void TextPage::beginWord(GfxState *state, double x0, double y0) { + GfxFont *gfxFont; + double *fontm; + double m[4], m2[4]; + int rot; + + // This check is needed because Type 3 characters can contain + // text-drawing operations (when TextPage is being used via + // {X,Win}SplashOutputDev rather than TextOutputDev). + if (curWord) { + ++nest; + return; + } + + // compute the rotation + state->getFontTransMat(&m[0], &m[1], &m[2], &m[3]); + gfxFont = state->getFont(); + if (gfxFont && gfxFont->getType() == fontType3) { + fontm = state->getFont()->getFontMatrix(); + m2[0] = fontm[0] * m[0] + fontm[1] * m[2]; + m2[1] = fontm[0] * m[1] + fontm[1] * m[3]; + m2[2] = fontm[2] * m[0] + fontm[3] * m[2]; + m2[3] = fontm[2] * m[1] + fontm[3] * m[3]; + m[0] = m2[0]; + m[1] = m2[1]; + m[2] = m2[2]; + m[3] = m2[3]; + } + if (fabs(m[0] * m[3]) > fabs(m[1] * m[2])) { + rot = (m[3] < 0) ? 0 : 2; + } else { + rot = (m[2] > 0) ? 1 : 3; + } + + curWord = new TextWord(state, rot, x0, y0, charPos, curFont, curFontSize); +} + +void TextPage::addChar(GfxState *state, double x, double y, + double dx, double dy, + CharCode c, int nBytes, Unicode *u, int uLen) { + double x1, y1, w1, h1, dx2, dy2, base, sp, delta; + GBool overlap; + int i; + + // subtract char and word spacing from the dx,dy values + sp = state->getCharSpace(); + if (c == (CharCode)0x20) { + sp += state->getWordSpace(); + } + state->textTransformDelta(sp * state->getHorizScaling(), 0, &dx2, &dy2); + dx -= dx2; + dy -= dy2; + state->transformDelta(dx, dy, &w1, &h1); + + // throw away chars that aren't inside the page bounds + // (and also do a sanity check on the character size) + state->transform(x, y, &x1, &y1); + if (x1 + w1 < 0 || x1 > pageWidth || + y1 + h1 < 0 || y1 > pageHeight || + w1 > pageWidth || h1 > pageHeight) { + charPos += nBytes; + return; + } + + // check the tiny chars limit + if (!globalParams->getTextKeepTinyChars() && + fabs(w1) < 3 && fabs(h1) < 3) { + if (++nTinyChars > 50000) { + charPos += nBytes; + return; + } + } + + // break words at space character + if (uLen == 1 && u[0] == (Unicode)0x20) { + if (curWord) { + ++curWord->charLen; + } + charPos += nBytes; + endWord(); + return; + } + + // start a new word if: + // (1) this character doesn't fall in the right place relative to + // the end of the previous word (this places upper and lower + // constraints on the position deltas along both the primary + // and secondary axes), or + // (2) this character overlaps the previous one (duplicated text), or + // (3) the previous character was an overlap (we want each duplicated + // character to be in a word by itself at this stage), + // (4) the font size has changed + if (curWord && curWord->len > 0) { + base = sp = delta = 0; // make gcc happy + switch (curWord->rot) { + case 0: + base = y1; + sp = x1 - curWord->xMax; + delta = x1 - curWord->edge[curWord->len - 1]; + break; + case 1: + base = x1; + sp = y1 - curWord->yMax; + delta = y1 - curWord->edge[curWord->len - 1]; + break; + case 2: + base = y1; + sp = curWord->xMin - x1; + delta = curWord->edge[curWord->len - 1] - x1; + break; + case 3: + base = x1; + sp = curWord->yMin - y1; + delta = curWord->edge[curWord->len - 1] - y1; + break; + } + overlap = fabs(delta) < dupMaxPriDelta * curWord->fontSize && + fabs(base - curWord->base) < dupMaxSecDelta * curWord->fontSize; + if (overlap || lastCharOverlap || + sp < -minDupBreakOverlap * curWord->fontSize || + sp > minWordBreakSpace * curWord->fontSize || + fabs(base - curWord->base) > 0.5 || + curFontSize != curWord->fontSize) { + endWord(); + } + lastCharOverlap = overlap; + } else { + lastCharOverlap = gFalse; + } + + if (uLen != 0) { + // start a new word if needed + if (!curWord) { + beginWord(state, x, y); + } + + // page rotation and/or transform matrices can cause text to be + // drawn in reverse order -- in this case, swap the begin/end + // coordinates and break text into individual chars + if ((curWord->rot == 0 && w1 < 0) || + (curWord->rot == 1 && h1 < 0) || + (curWord->rot == 2 && w1 > 0) || + (curWord->rot == 3 && h1 > 0)) { + endWord(); + beginWord(state, x + dx, y + dy); + x1 += w1; + y1 += h1; + w1 = -w1; + h1 = -h1; + } + + // add the characters to the current word + w1 /= uLen; + h1 /= uLen; + for (i = 0; i < uLen; ++i) { + if (u[i] >= 0xd800 && u[i] < 0xdc00) { /* surrogate pair */ + if (i + 1 < uLen && u[i+1] >= 0xdc00 && u[i+1] < 0xe000) { + /* next code is a low surrogate */ + Unicode uu = (((u[i] & 0x3ff) << 10) | (u[i+1] & 0x3ff)) + 0x10000; + i++; + curWord->addChar(state, x1 + i*w1, y1 + i*h1, w1, h1, c, uu); + } else { + /* missing low surrogate + replace it with REPLACEMENT CHARACTER (U+FFFD) */ + curWord->addChar(state, x1 + i*w1, y1 + i*h1, w1, h1, c, 0xfffd); + } + } else if (u[i] >= 0xdc00 && u[i] < 0xe000) { + /* invalid low surrogate + replace it with REPLACEMENT CHARACTER (U+FFFD) */ + curWord->addChar(state, x1 + i*w1, y1 + i*h1, w1, h1, c, 0xfffd); + } else { + curWord->addChar(state, x1 + i*w1, y1 + i*h1, w1, h1, c, u[i]); + } + } + } + if (curWord) { + curWord->charLen += nBytes; + } + charPos += nBytes; +} + +void TextPage::endWord() { + // This check is needed because Type 3 characters can contain + // text-drawing operations (when TextPage is being used via + // {X,Win}SplashOutputDev rather than TextOutputDev). + if (nest > 0) { + --nest; + return; + } + + if (curWord) { + addWord(curWord); + curWord = NULL; + } +} + +void TextPage::addWord(TextWord *word) { + // throw away zero-length words -- they don't have valid xMin/xMax + // values, and they're useless anyway + if (word->len == 0) { + delete word; + return; + } + + if (rawOrder) { + if (rawLastWord) { + rawLastWord->next = word; + } else { + rawWords = word; + } + rawLastWord = word; + } else { + pools[word->rot]->addWord(word); + } +} + +void TextPage::addUnderline(double x0, double y0, double x1, double y1) { + underlines->append(new TextUnderline(x0, y0, x1, y1)); +} + +void TextPage::addLink(int xMin, int yMin, int xMax, int yMax, AnnotLink *link) { + links->append(new TextLink(xMin, yMin, xMax, yMax, link)); +} + +void TextPage::coalesce(GBool physLayout, GBool doHTML) { + UnicodeMap *uMap; + TextPool *pool; + TextWord *word0, *word1, *word2; + TextLine *line; + TextBlock *blkList, *blk, *lastBlk, *blk0, *blk1, *blk2; + TextFlow *flow, *lastFlow; + TextUnderline *underline; + TextLink *link; + int rot, poolMinBaseIdx, baseIdx, startBaseIdx, endBaseIdx; + double minBase, maxBase, newMinBase, newMaxBase; + double fontSize, colSpace1, colSpace2, lineSpace, intraLineSpace, blkSpace; + GBool found; + int count[4]; + int lrCount; + int col1, col2; + int i, j, n; + + if (rawOrder) { + primaryRot = 0; + primaryLR = gTrue; + return; + } + + uMap = globalParams->getTextEncoding(); + blkList = NULL; + lastBlk = NULL; + nBlocks = 0; + primaryRot = -1; + +#if 0 // for debugging + printf("*** initial words ***\n"); + for (rot = 0; rot < 4; ++rot) { + pool = pools[rot]; + for (baseIdx = pool->minBaseIdx; baseIdx <= pool->maxBaseIdx; ++baseIdx) { + for (word0 = pool->getPool(baseIdx); word0; word0 = word0->next) { + printf(" word: x=%.2f..%.2f y=%.2f..%.2f base=%.2f fontSize=%.2f rot=%d link=%p '", + word0->xMin, word0->xMax, word0->yMin, word0->yMax, + word0->base, word0->fontSize, rot*90, word0->link); + for (i = 0; i < word0->len; ++i) { + fputc(word0->text[i] & 0xff, stdout); + } + printf("'\n"); + } + } + } + printf("\n"); +#endif + +#if 0 //~ for debugging + for (i = 0; i < underlines->getLength(); ++i) { + underline = (TextUnderline *)underlines->get(i); + printf("underline: x=%g..%g y=%g..%g horiz=%d\n", + underline->x0, underline->x1, underline->y0, underline->y1, + underline->horiz); + } +#endif + + if (doHTML) { + + //----- handle underlining + for (i = 0; i < underlines->getLength(); ++i) { + underline = (TextUnderline *)underlines->get(i); + if (underline->horiz) { + // rot = 0 + if (pools[0]->minBaseIdx <= pools[0]->maxBaseIdx) { + startBaseIdx = pools[0]->getBaseIdx(underline->y0 + minUnderlineGap); + endBaseIdx = pools[0]->getBaseIdx(underline->y0 + maxUnderlineGap); + for (j = startBaseIdx; j <= endBaseIdx; ++j) { + for (word0 = pools[0]->getPool(j); word0; word0 = word0->next) { + //~ need to check the y value against the word baseline + if (underline->x0 < word0->xMin + underlineSlack && + word0->xMax - underlineSlack < underline->x1) { + word0->underlined = gTrue; + } + } + } + } + + // rot = 2 + if (pools[2]->minBaseIdx <= pools[2]->maxBaseIdx) { + startBaseIdx = pools[2]->getBaseIdx(underline->y0 - maxUnderlineGap); + endBaseIdx = pools[2]->getBaseIdx(underline->y0 - minUnderlineGap); + for (j = startBaseIdx; j <= endBaseIdx; ++j) { + for (word0 = pools[2]->getPool(j); word0; word0 = word0->next) { + if (underline->x0 < word0->xMin + underlineSlack && + word0->xMax - underlineSlack < underline->x1) { + word0->underlined = gTrue; + } + } + } + } + } else { + // rot = 1 + if (pools[1]->minBaseIdx <= pools[1]->maxBaseIdx) { + startBaseIdx = pools[1]->getBaseIdx(underline->x0 - maxUnderlineGap); + endBaseIdx = pools[1]->getBaseIdx(underline->x0 - minUnderlineGap); + for (j = startBaseIdx; j <= endBaseIdx; ++j) { + for (word0 = pools[1]->getPool(j); word0; word0 = word0->next) { + if (underline->y0 < word0->yMin + underlineSlack && + word0->yMax - underlineSlack < underline->y1) { + word0->underlined = gTrue; + } + } + } + } + + // rot = 3 + if (pools[3]->minBaseIdx <= pools[3]->maxBaseIdx) { + startBaseIdx = pools[3]->getBaseIdx(underline->x0 + minUnderlineGap); + endBaseIdx = pools[3]->getBaseIdx(underline->x0 + maxUnderlineGap); + for (j = startBaseIdx; j <= endBaseIdx; ++j) { + for (word0 = pools[3]->getPool(j); word0; word0 = word0->next) { + if (underline->y0 < word0->yMin + underlineSlack && + word0->yMax - underlineSlack < underline->y1) { + word0->underlined = gTrue; + } + } + } + } + } + } + + //----- handle links + for (i = 0; i < links->getLength(); ++i) { + link = (TextLink *)links->get(i); + + // rot = 0 + if (pools[0]->minBaseIdx <= pools[0]->maxBaseIdx) { + startBaseIdx = pools[0]->getBaseIdx(link->yMin); + endBaseIdx = pools[0]->getBaseIdx(link->yMax); + for (j = startBaseIdx; j <= endBaseIdx; ++j) { + for (word0 = pools[0]->getPool(j); word0; word0 = word0->next) { + if (link->xMin < word0->xMin + hyperlinkSlack && + word0->xMax - hyperlinkSlack < link->xMax && + link->yMin < word0->yMin + hyperlinkSlack && + word0->yMax - hyperlinkSlack < link->yMax) { + word0->link = link->link; + } + } + } + } + + // rot = 2 + if (pools[2]->minBaseIdx <= pools[2]->maxBaseIdx) { + startBaseIdx = pools[2]->getBaseIdx(link->yMin); + endBaseIdx = pools[2]->getBaseIdx(link->yMax); + for (j = startBaseIdx; j <= endBaseIdx; ++j) { + for (word0 = pools[2]->getPool(j); word0; word0 = word0->next) { + if (link->xMin < word0->xMin + hyperlinkSlack && + word0->xMax - hyperlinkSlack < link->xMax && + link->yMin < word0->yMin + hyperlinkSlack && + word0->yMax - hyperlinkSlack < link->yMax) { + word0->link = link->link; + } + } + } + } + + // rot = 1 + if (pools[1]->minBaseIdx <= pools[1]->maxBaseIdx) { + startBaseIdx = pools[1]->getBaseIdx(link->xMin); + endBaseIdx = pools[1]->getBaseIdx(link->xMax); + for (j = startBaseIdx; j <= endBaseIdx; ++j) { + for (word0 = pools[1]->getPool(j); word0; word0 = word0->next) { + if (link->yMin < word0->yMin + hyperlinkSlack && + word0->yMax - hyperlinkSlack < link->yMax && + link->xMin < word0->xMin + hyperlinkSlack && + word0->xMax - hyperlinkSlack < link->xMax) { + word0->link = link->link; + } + } + } + } + + // rot = 3 + if (pools[3]->minBaseIdx <= pools[3]->maxBaseIdx) { + startBaseIdx = pools[3]->getBaseIdx(link->xMin); + endBaseIdx = pools[3]->getBaseIdx(link->xMax); + for (j = startBaseIdx; j <= endBaseIdx; ++j) { + for (word0 = pools[3]->getPool(j); word0; word0 = word0->next) { + if (link->yMin < word0->yMin + hyperlinkSlack && + word0->yMax - hyperlinkSlack < link->yMax && + link->xMin < word0->xMin + hyperlinkSlack && + word0->xMax - hyperlinkSlack < link->xMax) { + word0->link = link->link; + } + } + } + } + } + } + + //----- assemble the blocks + + //~ add an outer loop for writing mode (vertical text) + + // build blocks for each rotation value + for (rot = 0; rot < 4; ++rot) { + pool = pools[rot]; + poolMinBaseIdx = pool->minBaseIdx; + count[rot] = 0; + + // add blocks until no more words are left + while (1) { + + // find the first non-empty line in the pool + for (; + poolMinBaseIdx <= pool->maxBaseIdx && + !pool->getPool(poolMinBaseIdx); + ++poolMinBaseIdx) ; + if (poolMinBaseIdx > pool->maxBaseIdx) { + break; + } + + // look for the left-most word in the first four lines of the + // pool -- this avoids starting with a superscript word + startBaseIdx = poolMinBaseIdx; + for (baseIdx = poolMinBaseIdx + 1; + baseIdx < poolMinBaseIdx + 4 && baseIdx <= pool->maxBaseIdx; + ++baseIdx) { + if (!pool->getPool(baseIdx)) { + continue; + } + if (pool->getPool(baseIdx)->primaryCmp(pool->getPool(startBaseIdx)) + < 0) { + startBaseIdx = baseIdx; + } + } + + // create a new block + word0 = pool->getPool(startBaseIdx); + pool->setPool(startBaseIdx, word0->next); + word0->next = NULL; + blk = new TextBlock(this, rot); + blk->addWord(word0); + + fontSize = word0->fontSize; + minBase = maxBase = word0->base; + colSpace1 = minColSpacing1 * fontSize; + colSpace2 = minColSpacing2 * fontSize; + lineSpace = maxLineSpacingDelta * fontSize; + intraLineSpace = maxIntraLineDelta * fontSize; + + // add words to the block + do { + found = gFalse; + + // look for words on the line above the current top edge of + // the block + newMinBase = minBase; + for (baseIdx = pool->getBaseIdx(minBase); + baseIdx >= pool->getBaseIdx(minBase - lineSpace); + --baseIdx) { + word0 = NULL; + word1 = pool->getPool(baseIdx); + while (word1) { + if (word1->base < minBase && + word1->base >= minBase - lineSpace && + ((rot == 0 || rot == 2) + ? (word1->xMin < blk->xMax && word1->xMax > blk->xMin) + : (word1->yMin < blk->yMax && word1->yMax > blk->yMin)) && + fabs(word1->fontSize - fontSize) < + maxBlockFontSizeDelta1 * fontSize) { + word2 = word1; + if (word0) { + word0->next = word1->next; + } else { + pool->setPool(baseIdx, word1->next); + } + word1 = word1->next; + word2->next = NULL; + blk->addWord(word2); + found = gTrue; + newMinBase = word2->base; + } else { + word0 = word1; + word1 = word1->next; + } + } + } + minBase = newMinBase; + + // look for words on the line below the current bottom edge of + // the block + newMaxBase = maxBase; + for (baseIdx = pool->getBaseIdx(maxBase); + baseIdx <= pool->getBaseIdx(maxBase + lineSpace); + ++baseIdx) { + word0 = NULL; + word1 = pool->getPool(baseIdx); + while (word1) { + if (word1->base > maxBase && + word1->base <= maxBase + lineSpace && + ((rot == 0 || rot == 2) + ? (word1->xMin < blk->xMax && word1->xMax > blk->xMin) + : (word1->yMin < blk->yMax && word1->yMax > blk->yMin)) && + fabs(word1->fontSize - fontSize) < + maxBlockFontSizeDelta1 * fontSize) { + word2 = word1; + if (word0) { + word0->next = word1->next; + } else { + pool->setPool(baseIdx, word1->next); + } + word1 = word1->next; + word2->next = NULL; + blk->addWord(word2); + found = gTrue; + newMaxBase = word2->base; + } else { + word0 = word1; + word1 = word1->next; + } + } + } + maxBase = newMaxBase; + + // look for words that are on lines already in the block, and + // that overlap the block horizontally + for (baseIdx = pool->getBaseIdx(minBase - intraLineSpace); + baseIdx <= pool->getBaseIdx(maxBase + intraLineSpace); + ++baseIdx) { + word0 = NULL; + word1 = pool->getPool(baseIdx); + while (word1) { + if (word1->base >= minBase - intraLineSpace && + word1->base <= maxBase + intraLineSpace && + ((rot == 0 || rot == 2) + ? (word1->xMin < blk->xMax + colSpace1 && + word1->xMax > blk->xMin - colSpace1) + : (word1->yMin < blk->yMax + colSpace1 && + word1->yMax > blk->yMin - colSpace1)) && + fabs(word1->fontSize - fontSize) < + maxBlockFontSizeDelta2 * fontSize) { + word2 = word1; + if (word0) { + word0->next = word1->next; + } else { + pool->setPool(baseIdx, word1->next); + } + word1 = word1->next; + word2->next = NULL; + blk->addWord(word2); + found = gTrue; + } else { + word0 = word1; + word1 = word1->next; + } + } + } + + // only check for outlying words (the next two chunks of code) + // if we didn't find anything else + if (found) { + continue; + } + + // scan down the left side of the block, looking for words + // that are near (but not overlapping) the block; if there are + // three or fewer, add them to the block + n = 0; + for (baseIdx = pool->getBaseIdx(minBase - intraLineSpace); + baseIdx <= pool->getBaseIdx(maxBase + intraLineSpace); + ++baseIdx) { + word1 = pool->getPool(baseIdx); + while (word1) { + if (word1->base >= minBase - intraLineSpace && + word1->base <= maxBase + intraLineSpace && + ((rot == 0 || rot == 2) + ? (word1->xMax <= blk->xMin && + word1->xMax > blk->xMin - colSpace2) + : (word1->yMax <= blk->yMin && + word1->yMax > blk->yMin - colSpace2)) && + fabs(word1->fontSize - fontSize) < + maxBlockFontSizeDelta3 * fontSize) { + ++n; + break; + } + word1 = word1->next; + } + } + if (n > 0 && n <= 3) { + for (baseIdx = pool->getBaseIdx(minBase - intraLineSpace); + baseIdx <= pool->getBaseIdx(maxBase + intraLineSpace); + ++baseIdx) { + word0 = NULL; + word1 = pool->getPool(baseIdx); + while (word1) { + if (word1->base >= minBase - intraLineSpace && + word1->base <= maxBase + intraLineSpace && + ((rot == 0 || rot == 2) + ? (word1->xMax <= blk->xMin && + word1->xMax > blk->xMin - colSpace2) + : (word1->yMax <= blk->yMin && + word1->yMax > blk->yMin - colSpace2)) && + fabs(word1->fontSize - fontSize) < + maxBlockFontSizeDelta3 * fontSize) { + word2 = word1; + if (word0) { + word0->next = word1->next; + } else { + pool->setPool(baseIdx, word1->next); + } + word1 = word1->next; + word2->next = NULL; + blk->addWord(word2); + if (word2->base < minBase) { + minBase = word2->base; + } else if (word2->base > maxBase) { + maxBase = word2->base; + } + found = gTrue; + break; + } else { + word0 = word1; + word1 = word1->next; + } + } + } + } + + // scan down the right side of the block, looking for words + // that are near (but not overlapping) the block; if there are + // three or fewer, add them to the block + n = 0; + for (baseIdx = pool->getBaseIdx(minBase - intraLineSpace); + baseIdx <= pool->getBaseIdx(maxBase + intraLineSpace); + ++baseIdx) { + word1 = pool->getPool(baseIdx); + while (word1) { + if (word1->base >= minBase - intraLineSpace && + word1->base <= maxBase + intraLineSpace && + ((rot == 0 || rot == 2) + ? (word1->xMin >= blk->xMax && + word1->xMin < blk->xMax + colSpace2) + : (word1->yMin >= blk->yMax && + word1->yMin < blk->yMax + colSpace2)) && + fabs(word1->fontSize - fontSize) < + maxBlockFontSizeDelta3 * fontSize) { + ++n; + break; + } + word1 = word1->next; + } + } + if (n > 0 && n <= 3) { + for (baseIdx = pool->getBaseIdx(minBase - intraLineSpace); + baseIdx <= pool->getBaseIdx(maxBase + intraLineSpace); + ++baseIdx) { + word0 = NULL; + word1 = pool->getPool(baseIdx); + while (word1) { + if (word1->base >= minBase - intraLineSpace && + word1->base <= maxBase + intraLineSpace && + ((rot == 0 || rot == 2) + ? (word1->xMin >= blk->xMax && + word1->xMin < blk->xMax + colSpace2) + : (word1->yMin >= blk->yMax && + word1->yMin < blk->yMax + colSpace2)) && + fabs(word1->fontSize - fontSize) < + maxBlockFontSizeDelta3 * fontSize) { + word2 = word1; + if (word0) { + word0->next = word1->next; + } else { + pool->setPool(baseIdx, word1->next); + } + word1 = word1->next; + word2->next = NULL; + blk->addWord(word2); + if (word2->base < minBase) { + minBase = word2->base; + } else if (word2->base > maxBase) { + maxBase = word2->base; + } + found = gTrue; + break; + } else { + word0 = word1; + word1 = word1->next; + } + } + } + } + + } while (found); + + //~ need to compute the primary writing mode (horiz/vert) in + //~ addition to primary rotation + + // coalesce the block, and add it to the list + blk->coalesce(uMap); + if (lastBlk) { + lastBlk->next = blk; + } else { + blkList = blk; + } + lastBlk = blk; + count[rot] += blk->charCount; + if (primaryRot < 0 || count[rot] > count[primaryRot]) { + primaryRot = rot; + } + ++nBlocks; + } + } + +#if 0 // for debugging + printf("*** rotation ***\n"); + for (rot = 0; rot < 4; ++rot) { + printf(" %d: %6d\n", rot, count[rot]); + } + printf(" primary rot = %d\n", primaryRot); + printf("\n"); +#endif + +#if 0 // for debugging + printf("*** blocks ***\n"); + for (blk = blkList; blk; blk = blk->next) { + printf("block: rot=%d x=%.2f..%.2f y=%.2f..%.2f\n", + blk->rot, blk->xMin, blk->xMax, blk->yMin, blk->yMax); + for (line = blk->lines; line; line = line->next) { + printf(" line: x=%.2f..%.2f y=%.2f..%.2f base=%.2f\n", + line->xMin, line->xMax, line->yMin, line->yMax, line->base); + for (word0 = line->words; word0; word0 = word0->next) { + printf(" word: x=%.2f..%.2f y=%.2f..%.2f base=%.2f fontSize=%.2f space=%d: '", + word0->xMin, word0->xMax, word0->yMin, word0->yMax, + word0->base, word0->fontSize, word0->spaceAfter); + for (i = 0; i < word0->len; ++i) { + fputc(word0->text[i] & 0xff, stdout); + } + printf("'\n"); + } + } + } + printf("\n"); +#endif + + // determine the primary direction + lrCount = 0; + for (blk = blkList; blk; blk = blk->next) { + for (line = blk->lines; line; line = line->next) { + for (word0 = line->words; word0; word0 = word0->next) { + for (i = 0; i < word0->len; ++i) { + if (unicodeTypeL(word0->text[i])) { + ++lrCount; + } else if (unicodeTypeR(word0->text[i])) { + --lrCount; + } + } + } + } + } + primaryLR = lrCount >= 0; + +#if 0 // for debugging + printf("*** direction ***\n"); + printf("lrCount = %d\n", lrCount); + printf("primaryLR = %d\n", primaryLR); +#endif + + //----- column assignment + + // sort blocks into xy order for column assignment + if (blocks) + gfree (blocks); + blocks = (TextBlock **)gmallocn(nBlocks, sizeof(TextBlock *)); + for (blk = blkList, i = 0; blk; blk = blk->next, ++i) { + blocks[i] = blk; + } + qsort(blocks, nBlocks, sizeof(TextBlock *), &TextBlock::cmpXYPrimaryRot); + + // column assignment + for (i = 0; i < nBlocks; ++i) { + blk0 = blocks[i]; + col1 = 0; + for (j = 0; j < i; ++j) { + blk1 = blocks[j]; + col2 = 0; // make gcc happy + switch (primaryRot) { + case 0: + if (blk0->xMin > blk1->xMax) { + col2 = blk1->col + blk1->nColumns + 3; + } else if (blk1->xMax == blk1->xMin) { + col2 = blk1->col; + } else { + col2 = blk1->col + (int)(((blk0->xMin - blk1->xMin) / + (blk1->xMax - blk1->xMin)) * + blk1->nColumns); + } + break; + case 1: + if (blk0->yMin > blk1->yMax) { + col2 = blk1->col + blk1->nColumns + 3; + } else if (blk1->yMax == blk1->yMin) { + col2 = blk1->col; + } else { + col2 = blk1->col + (int)(((blk0->yMin - blk1->yMin) / + (blk1->yMax - blk1->yMin)) * + blk1->nColumns); + } + break; + case 2: + if (blk0->xMax < blk1->xMin) { + col2 = blk1->col + blk1->nColumns + 3; + } else if (blk1->xMin == blk1->xMax) { + col2 = blk1->col; + } else { + col2 = blk1->col + (int)(((blk0->xMax - blk1->xMax) / + (blk1->xMin - blk1->xMax)) * + blk1->nColumns); + } + break; + case 3: + if (blk0->yMax < blk1->yMin) { + col2 = blk1->col + blk1->nColumns + 3; + } else if (blk1->yMin == blk1->yMax) { + col2 = blk1->col; + } else { + col2 = blk1->col + (int)(((blk0->yMax - blk1->yMax) / + (blk1->yMin - blk1->yMax)) * + blk1->nColumns); + } + break; + } + if (col2 > col1) { + col1 = col2; + } + } + blk0->col = col1; + for (line = blk0->lines; line; line = line->next) { + for (j = 0; j <= line->len; ++j) { + line->col[j] += col1; + } + } + } + +#if 0 // for debugging + printf("*** blocks, after column assignment ***\n"); + for (blk = blkList; blk; blk = blk->next) { + printf("block: rot=%d x=%.2f..%.2f y=%.2f..%.2f col=%d nCols=%d\n", + blk->rot, blk->xMin, blk->xMax, blk->yMin, blk->yMax, blk->col, + blk->nColumns); + for (line = blk->lines; line; line = line->next) { + printf(" line:\n"); + for (word0 = line->words; word0; word0 = word0->next) { + printf(" word: x=%.2f..%.2f y=%.2f..%.2f base=%.2f fontSize=%.2f space=%d: '", + word0->xMin, word0->xMax, word0->yMin, word0->yMax, + word0->base, word0->fontSize, word0->spaceAfter); + for (i = 0; i < word0->len; ++i) { + fputc(word0->text[i] & 0xff, stdout); + } + printf("'\n"); + } + } + } + printf("\n"); +#endif + + //----- reading order sort + + // compute space on left and right sides of each block + for (i = 0; i < nBlocks; ++i) { + blk0 = blocks[i]; + for (j = 0; j < nBlocks; ++j) { + blk1 = blocks[j]; + if (blk1 != blk0) { + blk0->updatePriMinMax(blk1); + } + } + } + +#if 0 // for debugging + printf("PAGE\n"); +#endif + + int sortPos = 0; + GBool *visited = (GBool *)gmallocn(nBlocks, sizeof(GBool)); + for (i = 0; i < nBlocks; i++) { + visited[i] = gFalse; + } + + double bxMin0, byMin0, bxMin1, byMin1; + int numTables = 0; + int tableId = -1; + int correspondenceX, correspondenceY; + double xCentre1, yCentre1, xCentre2, yCentre2; + double xCentre3, yCentre3, xCentre4, yCentre4; + double deltaX, deltaY; + TextBlock *fblk2 = NULL, *fblk3 = NULL, *fblk4 = NULL; + + for (blk1 = blkList; blk1; blk1 = blk1->next) { + blk1->ExMin = blk1->xMin; + blk1->ExMax = blk1->xMax; + blk1->EyMin = blk1->yMin; + blk1->EyMax = blk1->yMax; + + bxMin0 = DBL_MAX; + byMin0 = DBL_MAX; + bxMin1 = DBL_MAX; + byMin1 = DBL_MAX; + + fblk2 = NULL; + fblk3 = NULL; + fblk4 = NULL; + + /* find fblk2, fblk3 and fblk4 so that + * fblk2 is on the right of blk1 and overlap with blk1 in y axis + * fblk3 is under blk1 and overlap with blk1 in x axis + * fblk4 is under blk1 and on the right of blk1 + * and they are closest to blk1 + */ + for (blk2 = blkList; blk2; blk2 = blk2->next) { + if (blk2 != blk1) { + if (blk2->yMin <= blk1->yMax && + blk2->yMax >= blk1->yMin && + blk2->xMin > blk1->xMax && + blk2->xMin < bxMin0) { + bxMin0 = blk2->xMin; + fblk2 = blk2; + } else if (blk2->xMin <= blk1->xMax && + blk2->xMax >= blk1->xMin && + blk2->yMin > blk1->yMax && + blk2->yMin < byMin0) { + byMin0 = blk2->yMin; + fblk3 = blk2; + } else if (blk2->xMin > blk1->xMax && + blk2->xMin < bxMin1 && + blk2->yMin > blk1->yMax && + blk2->yMin < byMin1) { + bxMin1 = blk2->xMin; + byMin1 = blk2->yMin; + fblk4 = blk2; + } + } + } + + /* fblk4 can not overlap with fblk3 in x and with fblk2 in y + * fblk2 can not overlap with fblk3 in x and y + * fblk4 has to overlap with fblk3 in y and with fblk2 in x + */ + if (fblk2 != NULL && + fblk3 != NULL && + fblk4 != NULL) { + if (((fblk3->xMin <= fblk4->xMax && fblk3->xMax >= fblk4->xMin) || + (fblk2->yMin <= fblk4->yMax && fblk2->yMax >= fblk4->yMin) || + (fblk2->xMin <= fblk3->xMax && fblk2->xMax >= fblk3->xMin) || + (fblk2->yMin <= fblk3->yMax && fblk2->yMax >= fblk3->yMin)) || + !(fblk4->xMin <= fblk2->xMax && fblk4->xMax >= fblk2->xMin && + fblk4->yMin <= fblk3->yMax && fblk4->yMax >= fblk3->yMin)) { + fblk2 = NULL; + fblk3 = NULL; + fblk4 = NULL; + } + } + + // if we found any then look whether they form a table + if (fblk2 != NULL && + fblk3 != NULL && + fblk4 != NULL) { + tableId = -1; + correspondenceX = 0; + correspondenceY = 0; + deltaX = 0.0; + deltaY = 0.0; + + if (blk1->lines && blk1->lines->words) + deltaX = blk1->lines->words->getFontSize(); + if (fblk2->lines && fblk2->lines->words) + deltaX = deltaX < fblk2->lines->words->getFontSize() ? + deltaX : fblk2->lines->words->getFontSize(); + if (fblk3->lines && fblk3->lines->words) + deltaX = deltaX < fblk3->lines->words->getFontSize() ? + deltaX : fblk3->lines->words->getFontSize(); + if (fblk4->lines && fblk4->lines->words) + deltaX = deltaX < fblk4->lines->words->getFontSize() ? + deltaX : fblk4->lines->words->getFontSize(); + + deltaY = deltaX; + + deltaX *= minColSpacing1; + deltaY *= maxIntraLineDelta; + + xCentre1 = (blk1->xMax + blk1->xMin) / 2.0; + yCentre1 = (blk1->yMax + blk1->yMin) / 2.0; + xCentre2 = (fblk2->xMax + fblk2->xMin) / 2.0; + yCentre2 = (fblk2->yMax + fblk2->yMin) / 2.0; + xCentre3 = (fblk3->xMax + fblk3->xMin) / 2.0; + yCentre3 = (fblk3->yMax + fblk3->yMin) / 2.0; + xCentre4 = (fblk4->xMax + fblk4->xMin) / 2.0; + yCentre4 = (fblk4->yMax + fblk4->yMin) / 2.0; + + // are blocks centrally aligned in x ? + if (fabs (xCentre1 - xCentre3) <= deltaX && + fabs (xCentre2 - xCentre4) <= deltaX) + correspondenceX++; + + // are blocks centrally aligned in y ? + if (fabs (yCentre1 - yCentre2) <= deltaY && + fabs (yCentre3 - yCentre4) <= deltaY) + correspondenceY++; + + // are blocks aligned to the left ? + if (fabs (blk1->xMin - fblk3->xMin) <= deltaX && + fabs (fblk2->xMin - fblk4->xMin) <= deltaX) + correspondenceX++; + + // are blocks aligned to the right ? + if (fabs (blk1->xMax - fblk3->xMax) <= deltaX && + fabs (fblk2->xMax - fblk4->xMax) <= deltaX) + correspondenceX++; + + // are blocks aligned to the top ? + if (fabs (blk1->yMin - fblk2->yMin) <= deltaY && + fabs (fblk3->yMin - fblk4->yMin) <= deltaY) + correspondenceY++; + + // are blocks aligned to the bottom ? + if (fabs (blk1->yMax - fblk2->yMax) <= deltaY && + fabs (fblk3->yMax - fblk4->yMax) <= deltaY) + correspondenceY++; + + // are blocks aligned in x and y ? + if (correspondenceX > 0 && + correspondenceY > 0) { + + // find maximal tableId + tableId = tableId < fblk4->tableId ? fblk4->tableId : tableId; + tableId = tableId < fblk3->tableId ? fblk3->tableId : tableId; + tableId = tableId < fblk2->tableId ? fblk2->tableId : tableId; + tableId = tableId < blk1->tableId ? blk1->tableId : tableId; + + // if the tableId is -1, then we found new table + if (tableId < 0) { + tableId = numTables; + numTables++; + } + + blk1->tableId = tableId; + fblk2->tableId = tableId; + fblk3->tableId = tableId; + fblk4->tableId = tableId; + } + } + } + + /* set extended bounding boxes of all table entries + * so that they contain whole table + * (we need to process whole table size when comparing it + * with regular text blocks) + */ + PDFRectangle *envelopes = new PDFRectangle [numTables]; + TextBlock **ending_blocks = new TextBlock* [numTables]; + + for (i = 0; i < numTables; i++) { + envelopes[i].x1 = DBL_MAX; + envelopes[i].x2 = DBL_MIN; + envelopes[i].y1 = DBL_MAX; + envelopes[i].y2 = DBL_MIN; + } + + for (blk1 = blkList; blk1; blk1 = blk1->next) { + if (blk1->tableId >= 0) { + if (blk1->ExMin < envelopes[blk1->tableId].x1) { + envelopes[blk1->tableId].x1 = blk1->ExMin; + if (!blk1->page->primaryLR) + ending_blocks[blk1->tableId] = blk1; + } + + if (blk1->ExMax > envelopes[blk1->tableId].x2) { + envelopes[blk1->tableId].x2 = blk1->ExMax; + if (blk1->page->primaryLR) + ending_blocks[blk1->tableId] = blk1; + } + + envelopes[blk1->tableId].y1 = blk1->EyMin < envelopes[blk1->tableId].y1 ? + blk1->EyMin : envelopes[blk1->tableId].y1; + envelopes[blk1->tableId].y2 = blk1->EyMax > envelopes[blk1->tableId].y2 ? + blk1->EyMax : envelopes[blk1->tableId].y2; + } + } + + for (blk1 = blkList; blk1; blk1 = blk1->next) { + if (blk1->tableId >= 0 && + blk1->xMin <= ending_blocks[blk1->tableId]->xMax && + blk1->xMax >= ending_blocks[blk1->tableId]->xMin) { + blk1->tableEnd = gTrue; + } + } + + for (blk1 = blkList; blk1; blk1 = blk1->next) { + if (blk1->tableId >= 0) { + blk1->ExMin = envelopes[blk1->tableId].x1; + blk1->ExMax = envelopes[blk1->tableId].x2; + blk1->EyMin = envelopes[blk1->tableId].y1; + blk1->EyMax = envelopes[blk1->tableId].y2; + } + } + delete[] envelopes; + delete[] ending_blocks; + + + /* set extended bounding boxes of all other blocks + * so that they extend in x without hitting neighbours + */ + for (blk1 = blkList; blk1; blk1 = blk1->next) { + if (!blk1->tableId >= 0) { + double xMax = DBL_MAX; + double xMin = DBL_MIN; + + for (blk2 = blkList; blk2; blk2 = blk2->next) { + if (blk2 == blk1) + continue; + + if (blk1->yMin <= blk2->yMax && blk1->yMax >= blk2->yMin) { + if (blk2->xMin < xMax && blk2->xMin > blk1->xMax) + xMax = blk2->xMin; + + if (blk2->xMax > xMin && blk2->xMax < blk1->xMin) + xMin = blk2->xMax; + } + } + + for (blk2 = blkList; blk2; blk2 = blk2->next) { + if (blk2 == blk1) + continue; + + if (blk2->xMax > blk1->ExMax && + blk2->xMax <= xMax && + blk2->yMin >= blk1->yMax) { + blk1->ExMax = blk2->xMax; + } + + if (blk2->xMin < blk1->ExMin && + blk2->xMin >= xMin && + blk2->yMin >= blk1->yMax) + blk1->ExMin = blk2->xMin; + } + } + } + + i = -1; + for (blk1 = blkList; blk1; blk1 = blk1->next) { + i++; + sortPos = blk1->visitDepthFirst(blkList, i, blocks, sortPos, visited); + } + if (visited) { + gfree(visited); + } + +#if 0 // for debugging + printf("*** blocks, after ro sort ***\n"); + for (i = 0; i < nBlocks; ++i) { + blk = blocks[i]; + printf("block: rot=%d x=%.2f..%.2f y=%.2f..%.2f space=%.2f..%.2f\n", + blk->rot, blk->xMin, blk->xMax, blk->yMin, blk->yMax, + blk->priMin, blk->priMax); + for (line = blk->lines; line; line = line->next) { + printf(" line:\n"); + for (word0 = line->words; word0; word0 = word0->next) { + printf(" word: x=%.2f..%.2f y=%.2f..%.2f base=%.2f fontSize=%.2f space=%d: '", + word0->xMin, word0->xMax, word0->yMin, word0->yMax, + word0->base, word0->fontSize, word0->spaceAfter); + for (j = 0; j < word0->len; ++j) { + fputc(word0->text[j] & 0xff, stdout); + } + printf("'\n"); + } + } + } + printf("\n"); + fflush(stdout); +#endif + + // build the flows + //~ this needs to be adjusted for writing mode (vertical text) + //~ this also needs to account for right-to-left column ordering + flow = NULL; + while (flows) { + flow = flows; + flows = flows->next; + delete flow; + } + flows = lastFlow = NULL; + // assume blocks are already in reading order, + // and construct flows accordingly. + for (i = 0; i < nBlocks; i++) { + blk = blocks[i]; + blk->next = NULL; + if (flow) { + blk1 = blocks[i - 1]; + blkSpace = maxBlockSpacing * blk1->lines->words->fontSize; + if (blk1->secondaryDelta(blk) <= blkSpace && + blk->isBelow(blk1) && + flow->blockFits(blk, blk1)) { + flow->addBlock(blk); + continue; + } + } + flow = new TextFlow(this, blk); + if (lastFlow) { + lastFlow->next = flow; + } else { + flows = flow; + } + lastFlow = flow; + } + +#if 0 // for debugging + printf("*** flows ***\n"); + for (flow = flows; flow; flow = flow->next) { + printf("flow: x=%.2f..%.2f y=%.2f..%.2f pri:%.2f..%.2f\n", + flow->xMin, flow->xMax, flow->yMin, flow->yMax, + flow->priMin, flow->priMax); + for (blk = flow->blocks; blk; blk = blk->next) { + printf(" block: rot=%d x=%.2f..%.2f y=%.2f..%.2f pri=%.2f..%.2f\n", + blk->rot, blk->ExMin, blk->ExMax, blk->EyMin, blk->EyMax, + blk->priMin, blk->priMax); + for (line = blk->lines; line; line = line->next) { + printf(" line:\n"); + for (word0 = line->words; word0; word0 = word0->next) { + printf(" word: x=%.2f..%.2f y=%.2f..%.2f base=%.2f fontSize=%.2f space=%d: '", + word0->xMin, word0->xMax, word0->yMin, word0->yMax, + word0->base, word0->fontSize, word0->spaceAfter); + for (i = 0; i < word0->len; ++i) { + fputc(word0->text[i] & 0xff, stdout); + } + printf("'\n"); + } + } + } + } + printf("\n"); +#endif + + if (uMap) { + uMap->decRefCnt(); + } +} + +GBool TextPage::findText(Unicode *s, int len, + GBool startAtTop, GBool stopAtBottom, + GBool startAtLast, GBool stopAtLast, + GBool caseSensitive, GBool backward, + double *xMin, double *yMin, + double *xMax, double *yMax) { + TextBlock *blk; + TextLine *line; + Unicode *s2, *txt; + Unicode *p; + int txtSize, m, i, j, k; + double xStart, yStart, xStop, yStop; + double xMin0, yMin0, xMax0, yMax0; + double xMin1, yMin1, xMax1, yMax1; + GBool found; + + //~ needs to handle right-to-left text + + if (rawOrder) { + return gFalse; + } + + // convert the search string to uppercase + if (!caseSensitive) { + s2 = unicodeNormalizeNFKC(s, len, &len, NULL); + for (i = 0; i < len; ++i) { + s2[i] = unicodeToUpper(s2[i]); + } + } else { + s2 = unicodeNormalizeNFKC(s, len, &len, NULL); + } + + txt = NULL; + txtSize = 0; + + xStart = yStart = xStop = yStop = 0; + if (startAtLast && haveLastFind) { + xStart = lastFindXMin; + yStart = lastFindYMin; + } else if (!startAtTop) { + xStart = *xMin; + yStart = *yMin; + } + if (stopAtLast && haveLastFind) { + xStop = lastFindXMin; + yStop = lastFindYMin; + } else if (!stopAtBottom) { + xStop = *xMax; + yStop = *yMax; + } + + found = gFalse; + xMin0 = xMax0 = yMin0 = yMax0 = 0; // make gcc happy + xMin1 = xMax1 = yMin1 = yMax1 = 0; // make gcc happy + + for (i = backward ? nBlocks - 1 : 0; + backward ? i >= 0 : i < nBlocks; + i += backward ? -1 : 1) { + blk = blocks[i]; + + // check: is the block above the top limit? + if (!startAtTop && (backward ? blk->yMin > yStart : blk->yMax < yStart)) { + continue; + } + + // check: is the block below the bottom limit? + if (!stopAtBottom && (backward ? blk->yMax < yStop : blk->yMin > yStop)) { + break; + } + + for (line = blk->lines; line; line = line->next) { + + // check: is the line above the top limit? + if (!startAtTop && + (backward ? line->yMin > yStart : line->yMin < yStart)) { + continue; + } + + // check: is the line below the bottom limit? + if (!stopAtBottom && + (backward ? line->yMin < yStop : line->yMin > yStop)) { + continue; + } + + if (!line->normalized) + line->normalized = unicodeNormalizeNFKC(line->text, line->len, + &line->normalized_len, + &line->normalized_idx); + // convert the line to uppercase + m = line->normalized_len; + if (!caseSensitive) { + if (m > txtSize) { + txt = (Unicode *)greallocn(txt, m, sizeof(Unicode)); + txtSize = m; + } + for (k = 0; k < m; ++k) { + txt[k] = unicodeToUpper(line->normalized[k]); + } + } else { + txt = line->normalized; + } + + // search each position in this line + j = backward ? m - len : 0; + p = txt + j; + while (backward ? j >= 0 : j <= m - len) { + + // compare the strings + for (k = 0; k < len; ++k) { + if (p[k] != s2[k]) { + break; + } + } + + // found it + if (k == len) { + // where s2 matches a subsequence of a compatibility equivalence + // decomposition, highlight the entire glyph, since we don't know + // the internal layout of subglyph components + int normStart = line->normalized_idx[j]; + int normAfterEnd = line->normalized_idx[j + len - 1] + 1; + switch (line->rot) { + case 0: + xMin1 = line->edge[normStart]; + xMax1 = line->edge[normAfterEnd]; + yMin1 = line->yMin; + yMax1 = line->yMax; + break; + case 1: + xMin1 = line->xMin; + xMax1 = line->xMax; + yMin1 = line->edge[normStart]; + yMax1 = line->edge[normAfterEnd]; + break; + case 2: + xMin1 = line->edge[normAfterEnd]; + xMax1 = line->edge[normStart]; + yMin1 = line->yMin; + yMax1 = line->yMax; + break; + case 3: + xMin1 = line->xMin; + xMax1 = line->xMax; + yMin1 = line->edge[normAfterEnd]; + yMax1 = line->edge[normStart]; + break; + } + if (backward) { + if ((startAtTop || + yMin1 < yStart || (yMin1 == yStart && xMin1 < xStart)) && + (stopAtBottom || + yMin1 > yStop || (yMin1 == yStop && xMin1 > xStop))) { + if (!found || + yMin1 > yMin0 || (yMin1 == yMin0 && xMin1 > xMin0)) { + xMin0 = xMin1; + xMax0 = xMax1; + yMin0 = yMin1; + yMax0 = yMax1; + found = gTrue; + } + } + } else { + if ((startAtTop || + yMin1 > yStart || (yMin1 == yStart && xMin1 > xStart)) && + (stopAtBottom || + yMin1 < yStop || (yMin1 == yStop && xMin1 < xStop))) { + if (!found || + yMin1 < yMin0 || (yMin1 == yMin0 && xMin1 < xMin0)) { + xMin0 = xMin1; + xMax0 = xMax1; + yMin0 = yMin1; + yMax0 = yMax1; + found = gTrue; + } + } + } + } + if (backward) { + --j; + --p; + } else { + ++j; + ++p; + } + } + } + } + + gfree(s2); + if (!caseSensitive) { + gfree(txt); + } + + if (found) { + *xMin = xMin0; + *xMax = xMax0; + *yMin = yMin0; + *yMax = yMax0; + lastFindXMin = xMin0; + lastFindYMin = yMin0; + haveLastFind = gTrue; + return gTrue; + } + + return gFalse; +} + +GooString *TextPage::getText(double xMin, double yMin, + double xMax, double yMax) { + GooString *s; + UnicodeMap *uMap; + TextBlock *blk; + TextLine *line; + TextLineFrag *frags; + int nFrags, fragsSize; + TextLineFrag *frag; + char space[8], eol[16]; + int spaceLen, eolLen; + int lastRot; + double x, y, delta; + int col, idx0, idx1, i, j; + GBool multiLine, oneRot; + + s = new GooString(); + + // get the output encoding + if (!(uMap = globalParams->getTextEncoding())) { + return s; + } + + if (rawOrder) { + TextWord* word; + char mbc[16]; + int mbc_len; + + for (word = rawWords; word && word <= rawLastWord; word = word->next) { + for (j = 0; j < word->getLength(); ++j) { + double gXMin, gXMax, gYMin, gYMax; + word->getCharBBox(j, &gXMin, &gYMin, &gXMax, &gYMax); + if (xMin <= gXMin && gXMax <= xMax && yMin <= gYMin && gYMax <= yMax) + { + mbc_len = uMap->mapUnicode( *(word->getChar(j)), mbc, sizeof(mbc) ); + s->append(mbc, mbc_len); + } + } + } + return s; + } + + spaceLen = uMap->mapUnicode(0x20, space, sizeof(space)); + eolLen = 0; // make gcc happy + switch (globalParams->getTextEOL()) { + case eolUnix: + eolLen = uMap->mapUnicode(0x0a, eol, sizeof(eol)); + break; + case eolDOS: + eolLen = uMap->mapUnicode(0x0d, eol, sizeof(eol)); + eolLen += uMap->mapUnicode(0x0a, eol + eolLen, sizeof(eol) - eolLen); + break; + case eolMac: + eolLen = uMap->mapUnicode(0x0d, eol, sizeof(eol)); + break; + } + + //~ writing mode (horiz/vert) + + // collect the line fragments that are in the rectangle + fragsSize = 256; + frags = (TextLineFrag *)gmallocn(fragsSize, sizeof(TextLineFrag)); + nFrags = 0; + lastRot = -1; + oneRot = gTrue; + for (i = 0; i < nBlocks; ++i) { + blk = blocks[i]; + if (xMin < blk->xMax && blk->xMin < xMax && + yMin < blk->yMax && blk->yMin < yMax) { + for (line = blk->lines; line; line = line->next) { + if (xMin < line->xMax && line->xMin < xMax && + yMin < line->yMax && line->yMin < yMax) { + idx0 = idx1 = -1; + switch (line->rot) { + case 0: + y = 0.5 * (line->yMin + line->yMax); + if (yMin < y && y < yMax) { + j = 0; + while (j < line->len) { + if (0.5 * (line->edge[j] + line->edge[j+1]) > xMin) { + idx0 = j; + break; + } + ++j; + } + j = line->len - 1; + while (j >= 0) { + if (0.5 * (line->edge[j] + line->edge[j+1]) < xMax) { + idx1 = j; + break; + } + --j; + } + } + break; + case 1: + x = 0.5 * (line->xMin + line->xMax); + if (xMin < x && x < xMax) { + j = 0; + while (j < line->len) { + if (0.5 * (line->edge[j] + line->edge[j+1]) > yMin) { + idx0 = j; + break; + } + ++j; + } + j = line->len - 1; + while (j >= 0) { + if (0.5 * (line->edge[j] + line->edge[j+1]) < yMax) { + idx1 = j; + break; + } + --j; + } + } + break; + case 2: + y = 0.5 * (line->yMin + line->yMax); + if (yMin < y && y < yMax) { + j = 0; + while (j < line->len) { + if (0.5 * (line->edge[j] + line->edge[j+1]) < xMax) { + idx0 = j; + break; + } + ++j; + } + j = line->len - 1; + while (j >= 0) { + if (0.5 * (line->edge[j] + line->edge[j+1]) > xMin) { + idx1 = j; + break; + } + --j; + } + } + break; + case 3: + x = 0.5 * (line->xMin + line->xMax); + if (xMin < x && x < xMax) { + j = 0; + while (j < line->len) { + if (0.5 * (line->edge[j] + line->edge[j+1]) < yMax) { + idx0 = j; + break; + } + ++j; + } + j = line->len - 1; + while (j >= 0) { + if (0.5 * (line->edge[j] + line->edge[j+1]) > yMin) { + idx1 = j; + break; + } + --j; + } + } + break; + } + if (idx0 >= 0 && idx1 >= 0) { + if (nFrags == fragsSize) { + fragsSize *= 2; + frags = (TextLineFrag *) + greallocn(frags, fragsSize, sizeof(TextLineFrag)); + } + frags[nFrags].init(line, idx0, idx1 - idx0 + 1); + ++nFrags; + if (lastRot >= 0 && line->rot != lastRot) { + oneRot = gFalse; + } + lastRot = line->rot; + } + } + } + } + } + + // sort the fragments and generate the string + if (nFrags > 0) { + + for (i = 0; i < nFrags; ++i) { + frags[i].computeCoords(oneRot); + } + assignColumns(frags, nFrags, oneRot); + + // if all lines in the region have the same rotation, use it; + // otherwise, use the page's primary rotation + if (oneRot) { + qsort(frags, nFrags, sizeof(TextLineFrag), + &TextLineFrag::cmpYXLineRot); + } else { + qsort(frags, nFrags, sizeof(TextLineFrag), + &TextLineFrag::cmpYXPrimaryRot); + } + i = 0; + while (i < nFrags) { + delta = maxIntraLineDelta * frags[i].line->words->fontSize; + for (j = i+1; + j < nFrags && fabs(frags[j].base - frags[i].base) < delta; + ++j) ; + qsort(frags + i, j - i, sizeof(TextLineFrag), + oneRot ? &TextLineFrag::cmpXYColumnLineRot + : &TextLineFrag::cmpXYColumnPrimaryRot); + i = j; + } + + col = 0; + multiLine = gFalse; + for (i = 0; i < nFrags; ++i) { + frag = &frags[i]; + + // insert a return + if (frag->col < col || + (i > 0 && fabs(frag->base - frags[i-1].base) > + maxIntraLineDelta * frags[i-1].line->words->fontSize)) { + s->append(eol, eolLen); + col = 0; + multiLine = gTrue; + } + + // column alignment + for (; col < frag->col; ++col) { + s->append(space, spaceLen); + } + + // get the fragment text + col += dumpFragment(frag->line->text + frag->start, frag->len, uMap, s); + } + + if (multiLine) { + s->append(eol, eolLen); + } + } + + gfree(frags); + uMap->decRefCnt(); + + return s; +} + +class TextSelectionVisitor { +public: + TextSelectionVisitor (TextPage *page); + virtual ~TextSelectionVisitor () { } + virtual void visitBlock (TextBlock *block, + TextLine *begin, + TextLine *end, + PDFRectangle *selection) = 0; + virtual void visitLine (TextLine *line, + TextWord *begin, + TextWord *end, + int edge_begin, + int edge_end, + PDFRectangle *selection) = 0; + virtual void visitWord (TextWord *word, int begin, int end, + PDFRectangle *selection) = 0; + +protected: + TextPage *page; +}; + +TextSelectionVisitor::TextSelectionVisitor (TextPage *page) + : page(page) +{ +} + + +class TextSelectionDumper : public TextSelectionVisitor { +public: + TextSelectionDumper(TextPage *page); + virtual ~TextSelectionDumper(); + + virtual void visitBlock (TextBlock *block, + TextLine *begin, + TextLine *end, + PDFRectangle *selection) { }; + virtual void visitLine (TextLine *line, + TextWord *begin, + TextWord *end, + int edge_begin, + int edge_end, + PDFRectangle *selection); + virtual void visitWord (TextWord *word, int begin, int end, + PDFRectangle *selection) { }; + + GooString *getText(void); + +private: + TextLineFrag *frags; + int nFrags, fragsSize; +}; + +TextSelectionDumper::TextSelectionDumper(TextPage *page) + : TextSelectionVisitor(page) +{ + fragsSize = 256; + frags = (TextLineFrag *)gmallocn(fragsSize, sizeof(TextLineFrag)); + nFrags = 0; +} + +TextSelectionDumper::~TextSelectionDumper() +{ + gfree(frags); +} + +void TextSelectionDumper::visitLine (TextLine *line, + TextWord *begin, + TextWord *end, + int edge_begin, + int edge_end, + PDFRectangle *selection) +{ + if (nFrags == fragsSize) { + fragsSize *= 2; + frags = (TextLineFrag *) grealloc(frags, fragsSize * sizeof(TextLineFrag)); + } + + frags[nFrags].init(line, edge_begin, edge_end - edge_begin); + ++nFrags; + +} + +GooString *TextSelectionDumper::getText (void) +{ + GooString *s; + TextLineFrag *frag; + int i, j; + UnicodeMap *uMap; + char space[8], eol[16]; + int spaceLen, eolLen; + GooList *strings = NULL; + int actual_table = -1; + int actual_line = -1; + int last_length = 0; + TextBlock *actual_block = NULL; + + s = new GooString(); + + uMap = globalParams->getTextEncoding(); + + if (uMap == NULL) + return s; + + spaceLen = uMap->mapUnicode(0x20, space, sizeof(space)); + eolLen = uMap->mapUnicode(0x0a, eol, sizeof(eol)); + + if (nFrags > 0) { + for (i = 0; i < nFrags; ++i) { + frag = &frags[i]; + + if (actual_table >= 0 && frag->line->blk->tableId < 0) { + for (j = 0; j < strings->getLength (); j++) { + s->append ((GooString*) strings->get (j)); + s->append (eol, eolLen); + delete ((GooString*) strings->get (j)); + } + delete strings; + strings = NULL; + actual_table = -1; + actual_line = -1; + actual_block = NULL; + } + + // a table + if (frag->line->blk->tableId >= 0) { + if (actual_table == -1) { + strings = new GooList(); + actual_table = frag->line->blk->tableId; + actual_block = frag->line->blk; + actual_line = -1; + } + + // the same block + if (actual_block == frag->line->blk) { + actual_line++; + if (actual_line >= strings->getLength ()) { + GooString *t = new GooString (); + // add some spaces to have this block correctly aligned + if (actual_line > 0) + for (j = 0; j < ((GooString*) (strings->get (actual_line - 1)))->getLength() - last_length - 1; j++) + t->append (space, spaceLen); + strings->append (t); + } + } + // another block + else { + // previous block ended its row + if (actual_block->tableEnd) { + for (j = 0; j < strings->getLength (); j++) { + s->append ((GooString*) strings->get (j)); + s->append (eol, eolLen); + delete ((GooString*) strings->get (j)); + } + delete strings; + + strings = new GooList(); + GooString *t = new GooString (); + strings->append (t); + } + actual_block = frag->line->blk; + actual_line = 0; + } + + page->dumpFragment(frag->line->text + frag->start, frag->len, uMap, ((GooString*) strings->get (actual_line))); + last_length = frag->len; + + if (!frag->line->blk->tableEnd) { + ((GooString*) strings->get (actual_line))->append (space, spaceLen); + } + } + // not a table + else { + page->dumpFragment (frag->line->text + frag->start, frag->len, uMap, s); + s->append (eol, eolLen); + } + } + + if (strings != NULL) { + for (j = 0; j < strings->getLength (); j++) { + s->append((GooString*) strings->get (j)); + s->append(eol, eolLen); + delete ((GooString*) strings->get (j)); + } + delete strings; + strings = NULL; + actual_table = -1; + actual_line = -1; + actual_block = NULL; + } + } + + uMap->decRefCnt(); + + return s; +} + +class TextSelectionSizer : public TextSelectionVisitor { +public: + TextSelectionSizer(TextPage *page, double scale); + ~TextSelectionSizer() { } + + virtual void visitBlock (TextBlock *block, + TextLine *begin, + TextLine *end, + PDFRectangle *selection) { }; + virtual void visitLine (TextLine *line, + TextWord *begin, + TextWord *end, + int edge_begin, + int edge_end, + PDFRectangle *selection); + virtual void visitWord (TextWord *word, int begin, int end, + PDFRectangle *selection) { }; + + GooList *getRegion () { return list; } + +private: + GooList *list; + double scale; +}; + +TextSelectionSizer::TextSelectionSizer(TextPage *page, double scale) + : TextSelectionVisitor(page), + scale(scale) +{ + list = new GooList(); +} + +void TextSelectionSizer::visitLine (TextLine *line, + TextWord *begin, + TextWord *end, + int edge_begin, + int edge_end, + PDFRectangle *selection) +{ + PDFRectangle *rect; + double x1, y1, x2, y2, margin; + + margin = (line->yMax - line->yMin) / 8; + x1 = line->edge[edge_begin]; + y1 = line->yMin - margin; + x2 = line->edge[edge_end]; + y2 = line->yMax + margin; + + rect = new PDFRectangle (floor (x1 * scale), + floor (y1 * scale), + ceil (x2 * scale), + ceil (y2 * scale)); + list->append (rect); +} + + +class TextSelectionPainter : public TextSelectionVisitor { +public: + TextSelectionPainter(TextPage *page, + double scale, + int rotation, + OutputDev *out, + GfxColor *box_color, + GfxColor *glyph_color); + ~TextSelectionPainter(); + + virtual void visitBlock (TextBlock *block, + TextLine *begin, + TextLine *end, + PDFRectangle *selection) { }; + virtual void visitLine (TextLine *line, + TextWord *begin, + TextWord *end, + int edge_begin, + int edge_end, + PDFRectangle *selection); + virtual void visitWord (TextWord *word, int begin, int end, + PDFRectangle *selection); + +private: + OutputDev *out; + GfxColor *box_color, *glyph_color; + GfxState *state; +}; + +TextSelectionPainter::TextSelectionPainter(TextPage *page, + double scale, + int rotation, + OutputDev *out, + GfxColor *box_color, + GfxColor *glyph_color) + : TextSelectionVisitor(page), + out(out), + box_color(box_color), + glyph_color(glyph_color) +{ + PDFRectangle box(0, 0, page->pageWidth, page->pageHeight); + + state = new GfxState(72 * scale, 72 * scale, &box, rotation, gFalse); + + out->startPage (0, state); + out->setDefaultCTM (state->getCTM()); + + state->setTextMat(1, 0, 0, -1, 0, 0); + state->setFillColorSpace(new GfxDeviceRGBColorSpace()); + +} + +TextSelectionPainter::~TextSelectionPainter() +{ + out->endPage (); + + delete state; +} + +void TextSelectionPainter::visitLine (TextLine *line, + TextWord *begin, + TextWord *end, + int edge_begin, + int edge_end, + PDFRectangle *selection) +{ + double x1, y1, x2, y2, margin; + Matrix ctm, ictm; + + state->setFillColor(box_color); + out->updateFillColor(state); + + margin = (line->yMax - line->yMin) / 8; + x1 = floor (line->edge[edge_begin]); + y1 = floor (line->yMin - margin); + x2 = ceil (line->edge[edge_end]); + y2 = ceil (line->yMax + margin); + + state->getCTM (&ctm); + ctm.transform(line->edge[edge_begin], line->yMin - margin, &x1, &y1); + ctm.transform(line->edge[edge_end], line->yMax + margin, &x2, &y2); + + x1 = floor (x1); + y1 = floor (y1); + x2 = ceil (x2); + y2 = ceil (y2); + + ctm.invertTo (&ictm); + ictm.transform(x1, y1, &x1, &y1); + ictm.transform(x2, y2, &x2, &y2); + + state->moveTo(x1, y1); + state->lineTo(x2, y1); + state->lineTo(x2, y2); + state->lineTo(x1, y2); + state->closePath(); + + out->fill(state); + state->clearPath(); +} + +void TextSelectionPainter::visitWord (TextWord *word, int begin, int end, + PDFRectangle *selection) +{ + GooString *string; + int i; + + state->setFillColor(glyph_color); + out->updateFillColor(state); + word->font->gfxFont->incRefCnt(); + state->setFont(word->font->gfxFont, word->fontSize); + out->updateFont(state); + + /* The only purpose of this string is to let the output device query + * it's length. Might want to change this interface later. */ + + string = new GooString ((char *) word->charcode, end - begin); + + out->beginString(state, string); + + for (i = begin; i < end; i++) + out->drawChar(state, word->edge[i], word->base, 0, 0, 0, 0, + word->charcode[i], 1, NULL, 0); + + out->endString(state); + + delete string; +} + +void TextWord::visitSelection(TextSelectionVisitor *visitor, + PDFRectangle *selection, + SelectionStyle style) +{ + int i, begin, end; + double mid; + + begin = len; + end = 0; + for (i = 0; i < len; i++) { + mid = (edge[i] + edge[i + 1]) / 2; + if (selection->x1 < mid || selection->x2 < mid) + if (i < begin) + begin = i; + if (mid < selection->x1 || mid < selection->x2) + end = i + 1; + } + + /* Skip empty selection. */ + if (end <= begin) + return; + + visitor->visitWord (this, begin, end, selection); +} + +void TextLine::visitSelection(TextSelectionVisitor *visitor, + PDFRectangle *selection, + SelectionStyle style) { + TextWord *p, *begin, *end, *current; + int i, edge_begin, edge_end; + PDFRectangle child_selection; + + begin = NULL; + end = NULL; + current = NULL; + for (p = words; p != NULL; p = p->next) { + if (blk->page->primaryLR) { + if ((selection->x1 < p->xMax) || + (selection->x2 < p->xMax)) + if (begin == NULL) + begin = p; + + if (((selection->x1 > p->xMin) || + (selection->x2 > p->xMin)) && (begin != NULL)) { + end = p->next; + current = p; + } + } else { + if ((selection->x1 > p->xMin) || + (selection->x2 > p->xMin)) + if (begin == NULL) + begin = p; + + if (((selection->x1 < p->xMax) || + (selection->x2 < p->xMax)) && (begin != NULL)) { + end = p->next; + current = p; + } + } + } + + if (!current) + current = begin; + + child_selection = *selection; + if (style == selectionStyleWord) { + child_selection.x1 = begin ? begin->xMin : xMin; + if (end && end->xMax != -1) { + child_selection.x2 = current->xMax; + } else { + child_selection.x2 = xMax; + } + } + + edge_begin = len; + edge_end = 0; + for (i = 0; i < len; i++) { + double mid = (edge[i] + edge[i + 1]) / 2; + if (child_selection.x1 < mid || child_selection.x2 < mid) + if (i < edge_begin) + edge_begin = i; + if (mid < child_selection.x2 || mid < child_selection.x1) + edge_end = i + 1; + } + + /* Skip empty selection. */ + if (edge_end <= edge_begin) + return; + + visitor->visitLine (this, begin, end, edge_begin, edge_end, + &child_selection); + + for (p = begin; p != end; p = p->next) + p->visitSelection (visitor, &child_selection, style); +} + +void TextBlock::visitSelection(TextSelectionVisitor *visitor, + PDFRectangle *selection, + SelectionStyle style) { + PDFRectangle child_selection; + double x[2], y[2], d, best_d[2]; + TextLine *p, *best_line[2]; + int i, count = 0, best_count[2], start, stop; + GBool all[2]; + + x[0] = selection->x1; + y[0] = selection->y1; + x[1] = selection->x2; + y[1] = selection->y2; + + for (i = 0; i < 2; i++) { + // the first/last lines are often not nearest + // the corners, so we have to force them to be + // selected when the selection runs outside this + // block. + if (page->primaryLR) { + all[i] = x[i] >= this->xMax && y[i] >= this->yMax; + if (x[i] <= this->xMin && y[i] <= this->yMin) { + best_line[i] = this->lines; + best_count[i] = 1; + } else { + best_line[i] = NULL; + best_count[i] = 0; + } + } else { + all[i] = x[i] <= this->xMin && y[i] >= this->yMax; + if (x[i] >= this->xMax && y[i] <= this->yMin) { + best_line[i] = this->lines; + best_count[i] = 1; + } else { + best_line[i] = NULL; + best_count[i] = 0; + } + } + best_d[i] = 0; + } + + // find the nearest line to the selection points + // using the manhattan distance. + for (p = this->lines; p; p = p->next) { + count++; + for (i = 0; i < 2; i++) { + d = fmax(p->xMin - x[i], 0.0) + + fmax(x[i] - p->xMax, 0.0) + + fmax(p->yMin - y[i], 0.0) + + fmax(y[i] - p->yMax, 0.0); + if (!best_line[i] || all[i] || + d < best_d[i]) { + best_line[i] = p; + best_count[i] = count; + best_d[i] = d; + } + } + } + // assert: best is always set. + if (!best_line[0] || !best_line[1]) { + return; + } + + // Now decide which point was first. + if (best_count[0] < best_count[1] || + (best_count[0] == best_count[1] && + y[0] < y[1])) { + start = 0; + stop = 1; + } else { + start = 1; + stop = 0; + } + + visitor->visitBlock(this, best_line[start], best_line[stop], selection); + + for (p = best_line[start]; p; p = p->next) { + if (page->primaryLR) { + child_selection.x1 = p->xMin; + child_selection.x2 = p->xMax; + } else { + child_selection.x1 = p->xMax; + child_selection.x2 = p->xMin; + } + child_selection.y1 = p->yMin; + child_selection.y2 = p->yMax; + if (style == selectionStyleLine) { + if (p == best_line[start]) { + child_selection.x1 = 0; + child_selection.y1 = 0; + } + if (p == best_line[stop]) { + child_selection.x2 = page->pageWidth; + child_selection.y2 = page->pageHeight; + } + } else { + if (p == best_line[start]) { + child_selection.x1 = fmax(p->xMin, fmin(p->xMax, x[start])); + child_selection.y1 = fmax(p->yMin, fmin(p->yMax, y[start])); + } + if (p == best_line[stop]) { + child_selection.x2 = fmax(p->xMin, fmin(p->xMax, x[stop])); + child_selection.y2 = fmax(p->yMin, fmin(p->yMax, y[stop])); + } + } + p->visitSelection(visitor, &child_selection, style); + if (p == best_line[stop]) { + return; + } + } +} + +void TextPage::visitSelection(TextSelectionVisitor *visitor, + PDFRectangle *selection, + SelectionStyle style) +{ + PDFRectangle child_selection; + double x[2], y[2], d, best_d[2]; + double xMin, yMin, xMax, yMax; + TextFlow *flow, *best_flow[2]; + TextBlock *blk, *best_block[2]; + int i, count = 0, best_count[2], start, stop; + + if (!flows) + return; + + x[0] = selection->x1; + y[0] = selection->y1; + x[1] = selection->x2; + y[1] = selection->y2; + + xMin = pageWidth; + yMin = pageHeight; + xMax = 0.0; + yMax = 0.0; + + for (i = 0; i < 2; i++) { + best_block[i] = NULL; + best_flow[i] = NULL; + best_count[i] = 0; + best_d[i] = 0; + } + + // find the nearest blocks to the selection points + // using the manhattan distance. + for (flow = flows; flow; flow = flow->next) { + for (blk = flow->blocks; blk; blk = blk->next) { + count++; + // the first/last blocks in reading order are + // often not the closest to the page corners; + // track the corners, force those blocks to + // be selected if the selection runs across + // multiple pages. + xMin = fmin(xMin, blk->xMin); + yMin = fmin(yMin, blk->yMin); + xMax = fmax(xMax, blk->xMax); + yMax = fmax(yMax, blk->yMax); + for (i = 0; i < 2; i++) { + d = fmax(blk->xMin - x[i], 0.0) + + fmax(x[i] - blk->xMax, 0.0) + + fmax(blk->yMin - y[i], 0.0) + + fmax(y[i] - blk->yMax, 0.0); + if (!best_block[i] || + d < best_d[i] || + (!blk->next && !flow->next && + x[i] > xMax && y[i] > yMax)) { + best_block[i] = blk; + best_flow[i] = flow; + best_count[i] = count; + best_d[i] = d; + } + } + } + } + for (i = 0; i < 2; i++) { + if (primaryLR) { + if (x[i] < xMin && y[i] < yMin) { + best_block[i] = flows->blocks; + best_flow[i] = flows; + best_count[i] = 1; + } + } else { + if (x[i] > xMax && y[i] < yMin) { + best_block[i] = flows->blocks; + best_flow[i] = flows; + best_count[i] = 1; + } + } + } + // assert: best is always set. + if (!best_block[0] || !best_block[1]) { + return; + } + + // Now decide which point was first. + if (best_count[0] < best_count[1] || + (best_count[0] == best_count[1] && y[0] < y[1])) { + start = 0; + stop = 1; + } else { + start = 1; + stop = 0; + } + + for (flow = best_flow[start]; flow; flow = flow->next) { + if (flow == best_flow[start]) { + blk = best_block[start]; + } else { + blk = flow->blocks; + } + for (; blk; blk = blk->next) { + if (primaryLR) { + child_selection.x1 = blk->xMin; + child_selection.x2 = blk->xMax; + } else { + child_selection.x1 = blk->xMax; + child_selection.x2 = blk->xMin; + } + child_selection.y1 = blk->yMin; + child_selection.y2 = blk->yMax; + if (blk == best_block[start]) { + child_selection.x1 = fmax(blk->xMin, fmin(blk->xMax, x[start])); + child_selection.y1 = fmax(blk->yMin, fmin(blk->yMax, y[start])); + } + if (blk == best_block[stop]) { + child_selection.x2 = fmax(blk->xMin, fmin(blk->xMax, x[stop])); + child_selection.y2 = fmax(blk->yMin, fmin(blk->yMax, y[stop])); + blk->visitSelection(visitor, &child_selection, style); + return; + } + blk->visitSelection(visitor, &child_selection, style); + } + } +} + +void TextPage::drawSelection(OutputDev *out, + double scale, + int rotation, + PDFRectangle *selection, + SelectionStyle style, + GfxColor *glyph_color, GfxColor *box_color) +{ + TextSelectionPainter painter(this, scale, rotation, + out, box_color, glyph_color); + + visitSelection(&painter, selection, style); +} + +GooList *TextPage::getSelectionRegion(PDFRectangle *selection, + SelectionStyle style, + double scale) { + TextSelectionSizer sizer(this, scale); + + visitSelection(&sizer, selection, style); + + return sizer.getRegion(); +} + +GooString *TextPage::getSelectionText(PDFRectangle *selection, + SelectionStyle style) +{ + TextSelectionDumper dumper(this); + + visitSelection(&dumper, selection, style); + + return dumper.getText(); +} + +GBool TextPage::findCharRange(int pos, int length, + double *xMin, double *yMin, + double *xMax, double *yMax) { + TextBlock *blk; + TextLine *line; + TextWord *word; + double xMin0, xMax0, yMin0, yMax0; + double xMin1, xMax1, yMin1, yMax1; + GBool first; + int i, j0, j1; + + if (rawOrder) { + return gFalse; + } + + //~ this doesn't correctly handle: + //~ - ranges split across multiple lines (the highlighted region + //~ is the bounding box of all the parts of the range) + //~ - cases where characters don't convert one-to-one into Unicode + first = gTrue; + xMin0 = xMax0 = yMin0 = yMax0 = 0; // make gcc happy + xMin1 = xMax1 = yMin1 = yMax1 = 0; // make gcc happy + for (i = 0; i < nBlocks; ++i) { + blk = blocks[i]; + for (line = blk->lines; line; line = line->next) { + for (word = line->words; word; word = word->next) { + if (pos < word->charPos + word->charLen && + word->charPos < pos + length) { + j0 = pos - word->charPos; + if (j0 < 0) { + j0 = 0; + } + j1 = pos + length - 1 - word->charPos; + if (j1 >= word->len) { + j1 = word->len - 1; + } + switch (line->rot) { + case 0: + xMin1 = word->edge[j0]; + xMax1 = word->edge[j1 + 1]; + yMin1 = word->yMin; + yMax1 = word->yMax; + break; + case 1: + xMin1 = word->xMin; + xMax1 = word->xMax; + yMin1 = word->edge[j0]; + yMax1 = word->edge[j1 + 1]; + break; + case 2: + xMin1 = word->edge[j1 + 1]; + xMax1 = word->edge[j0]; + yMin1 = word->yMin; + yMax1 = word->yMax; + break; + case 3: + xMin1 = word->xMin; + xMax1 = word->xMax; + yMin1 = word->edge[j1 + 1]; + yMax1 = word->edge[j0]; + break; + } + if (first || xMin1 < xMin0) { + xMin0 = xMin1; + } + if (first || xMax1 > xMax0) { + xMax0 = xMax1; + } + if (first || yMin1 < yMin0) { + yMin0 = yMin1; + } + if (first || yMax1 > yMax0) { + yMax0 = yMax1; + } + first = gFalse; + } + } + } + } + if (!first) { + *xMin = xMin0; + *xMax = xMax0; + *yMin = yMin0; + *yMax = yMax0; + return gTrue; + } + return gFalse; +} + +void TextPage::dump(void *outputStream, TextOutputFunc outputFunc, + GBool physLayout) { + UnicodeMap *uMap; + TextFlow *flow; + TextBlock *blk; + TextLine *line; + TextLineFrag *frags; + TextWord *word; + int nFrags, fragsSize; + TextLineFrag *frag; + char space[8], eol[16], eop[8]; + int spaceLen, eolLen, eopLen; + GBool pageBreaks; + GooString *s; + double delta; + int col, i, j, d, n; + + // get the output encoding + if (!(uMap = globalParams->getTextEncoding())) { + return; + } + spaceLen = uMap->mapUnicode(0x20, space, sizeof(space)); + eolLen = 0; // make gcc happy + switch (globalParams->getTextEOL()) { + case eolUnix: + eolLen = uMap->mapUnicode(0x0a, eol, sizeof(eol)); + break; + case eolDOS: + eolLen = uMap->mapUnicode(0x0d, eol, sizeof(eol)); + eolLen += uMap->mapUnicode(0x0a, eol + eolLen, sizeof(eol) - eolLen); + break; + case eolMac: + eolLen = uMap->mapUnicode(0x0d, eol, sizeof(eol)); + break; + } + eopLen = uMap->mapUnicode(0x0c, eop, sizeof(eop)); + pageBreaks = globalParams->getTextPageBreaks(); + + //~ writing mode (horiz/vert) + + // output the page in raw (content stream) order + if (rawOrder) { + + for (word = rawWords; word; word = word->next) { + s = new GooString(); + dumpFragment(word->text, word->len, uMap, s); + (*outputFunc)(outputStream, s->getCString(), s->getLength()); + delete s; + if (word->next && + fabs(word->next->base - word->base) < + maxIntraLineDelta * word->fontSize) { + if (word->next->xMin > word->xMax + minWordSpacing * word->fontSize) { + (*outputFunc)(outputStream, space, spaceLen); + } + } else { + (*outputFunc)(outputStream, eol, eolLen); + } + } + + // output the page, maintaining the original physical layout + } else if (physLayout) { + + // collect the line fragments for the page and sort them + fragsSize = 256; + frags = (TextLineFrag *)gmallocn(fragsSize, sizeof(TextLineFrag)); + nFrags = 0; + for (i = 0; i < nBlocks; ++i) { + blk = blocks[i]; + for (line = blk->lines; line; line = line->next) { + if (nFrags == fragsSize) { + fragsSize *= 2; + frags = (TextLineFrag *)greallocn(frags, + fragsSize, sizeof(TextLineFrag)); + } + frags[nFrags].init(line, 0, line->len); + frags[nFrags].computeCoords(gTrue); + ++nFrags; + } + } + qsort(frags, nFrags, sizeof(TextLineFrag), &TextLineFrag::cmpYXPrimaryRot); + i = 0; + while (i < nFrags) { + delta = maxIntraLineDelta * frags[i].line->words->fontSize; + for (j = i+1; + j < nFrags && fabs(frags[j].base - frags[i].base) < delta; + ++j) ; + qsort(frags + i, j - i, sizeof(TextLineFrag), + &TextLineFrag::cmpXYColumnPrimaryRot); + i = j; + } + +#if 0 // for debugging + printf("*** line fragments ***\n"); + for (i = 0; i < nFrags; ++i) { + frag = &frags[i]; + printf("frag: x=%.2f..%.2f y=%.2f..%.2f base=%.2f '", + frag->xMin, frag->xMax, frag->yMin, frag->yMax, frag->base); + for (n = 0; n < frag->len; ++n) { + fputc(frag->line->text[frag->start + n] & 0xff, stdout); + } + printf("'\n"); + } + printf("\n"); +#endif + + // generate output + col = 0; + for (i = 0; i < nFrags; ++i) { + frag = &frags[i]; + + // column alignment + for (; col < frag->col; ++col) { + (*outputFunc)(outputStream, space, spaceLen); + } + + // print the line + s = new GooString(); + col += dumpFragment(frag->line->text + frag->start, frag->len, uMap, s); + (*outputFunc)(outputStream, s->getCString(), s->getLength()); + delete s; + + // print one or more returns if necessary + if (i == nFrags - 1 || + frags[i+1].col < col || + fabs(frags[i+1].base - frag->base) > + maxIntraLineDelta * frag->line->words->fontSize) { + if (i < nFrags - 1) { + d = (int)((frags[i+1].base - frag->base) / + frag->line->words->fontSize); + if (d < 1) { + d = 1; + } else if (d > 5) { + d = 5; + } + } else { + d = 1; + } + for (; d > 0; --d) { + (*outputFunc)(outputStream, eol, eolLen); + } + col = 0; + } + } + + gfree(frags); + + // output the page, "undoing" the layout + } else { + for (flow = flows; flow; flow = flow->next) { + for (blk = flow->blocks; blk; blk = blk->next) { + for (line = blk->lines; line; line = line->next) { + n = line->len; + if (line->hyphenated && (line->next || blk->next)) { + --n; + } + s = new GooString(); + dumpFragment(line->text, n, uMap, s); + (*outputFunc)(outputStream, s->getCString(), s->getLength()); + delete s; + // output a newline when a hyphen is not suppressed + if (n == line->len) { + (*outputFunc)(outputStream, eol, eolLen); + } + } + } + (*outputFunc)(outputStream, eol, eolLen); + } + } + + // end of page + if (pageBreaks) { + (*outputFunc)(outputStream, eop, eopLen); + } + + uMap->decRefCnt(); +} + +void TextPage::assignColumns(TextLineFrag *frags, int nFrags, GBool oneRot) { + TextLineFrag *frag0, *frag1; + int rot, col1, col2, i, j, k; + + // all text in the region has the same rotation -- recompute the + // column numbers based only on the text in the region + if (oneRot) { + qsort(frags, nFrags, sizeof(TextLineFrag), &TextLineFrag::cmpXYLineRot); + rot = frags[0].line->rot; + for (i = 0; i < nFrags; ++i) { + frag0 = &frags[i]; + col1 = 0; + for (j = 0; j < i; ++j) { + frag1 = &frags[j]; + col2 = 0; // make gcc happy + switch (rot) { + case 0: + if (frag0->xMin >= frag1->xMax) { + col2 = frag1->col + (frag1->line->col[frag1->start + frag1->len] - + frag1->line->col[frag1->start]) + 1; + } else { + for (k = frag1->start; + k < frag1->start + frag1->len && + frag0->xMin >= 0.5 * (frag1->line->edge[k] + + frag1->line->edge[k+1]); + ++k) ; + col2 = frag1->col + + frag1->line->col[k] - frag1->line->col[frag1->start]; + } + break; + case 1: + if (frag0->yMin >= frag1->yMax) { + col2 = frag1->col + (frag1->line->col[frag1->start + frag1->len] - + frag1->line->col[frag1->start]) + 1; + } else { + for (k = frag1->start; + k < frag1->start + frag1->len && + frag0->yMin >= 0.5 * (frag1->line->edge[k] + + frag1->line->edge[k+1]); + ++k) ; + col2 = frag1->col + + frag1->line->col[k] - frag1->line->col[frag1->start]; + } + break; + case 2: + if (frag0->xMax <= frag1->xMin) { + col2 = frag1->col + (frag1->line->col[frag1->start + frag1->len] - + frag1->line->col[frag1->start]) + 1; + } else { + for (k = frag1->start; + k < frag1->start + frag1->len && + frag0->xMax <= 0.5 * (frag1->line->edge[k] + + frag1->line->edge[k+1]); + ++k) ; + col2 = frag1->col + + frag1->line->col[k] - frag1->line->col[frag1->start]; + } + break; + case 3: + if (frag0->yMax <= frag1->yMin) { + col2 = frag1->col + (frag1->line->col[frag1->start + frag1->len] - + frag1->line->col[frag1->start]) + 1; + } else { + for (k = frag1->start; + k < frag1->start + frag1->len && + frag0->yMax <= 0.5 * (frag1->line->edge[k] + + frag1->line->edge[k+1]); + ++k) ; + col2 = frag1->col + + frag1->line->col[k] - frag1->line->col[frag1->start]; + } + break; + } + if (col2 > col1) { + col1 = col2; + } + } + frag0->col = col1; + } + + // the region includes text at different rotations -- use the + // globally assigned column numbers, offset by the minimum column + // number (i.e., shift everything over to column 0) + } else { + col1 = frags[0].col; + for (i = 1; i < nFrags; ++i) { + if (frags[i].col < col1) { + col1 = frags[i].col; + } + } + for (i = 0; i < nFrags; ++i) { + frags[i].col -= col1; + } + } +} + +int TextPage::dumpFragment(Unicode *text, int len, UnicodeMap *uMap, + GooString *s) { + char lre[8], rle[8], popdf[8], buf[8]; + int lreLen, rleLen, popdfLen, n; + int nCols, i, j, k; + + nCols = 0; + + if (uMap->isUnicode()) { + + lreLen = uMap->mapUnicode(0x202a, lre, sizeof(lre)); + rleLen = uMap->mapUnicode(0x202b, rle, sizeof(rle)); + popdfLen = uMap->mapUnicode(0x202c, popdf, sizeof(popdf)); + + if (primaryLR) { + + i = 0; + while (i < len) { + // output a left-to-right section + for (j = i; j < len && !unicodeTypeR(text[j]); ++j) ; + for (k = i; k < j; ++k) { + n = uMap->mapUnicode(text[k], buf, sizeof(buf)); + s->append(buf, n); + ++nCols; + } + i = j; + // output a right-to-left section + for (j = i; j < len && !unicodeTypeL(text[j]); ++j) ; + if (j > i) { + s->append(rle, rleLen); + for (k = j - 1; k >= i; --k) { + n = uMap->mapUnicode(text[k], buf, sizeof(buf)); + s->append(buf, n); + ++nCols; + } + s->append(popdf, popdfLen); + i = j; + } + } + + } else { + + s->append(rle, rleLen); + i = len - 1; + while (i >= 0) { + // output a right-to-left section + for (j = i; j >= 0 && !unicodeTypeL(text[j]); --j) ; + for (k = i; k > j; --k) { + n = uMap->mapUnicode(text[k], buf, sizeof(buf)); + s->append(buf, n); + ++nCols; + } + i = j; + // output a left-to-right section + for (j = i; j >= 0 && !unicodeTypeR(text[j]); --j) ; + if (j < i) { + s->append(lre, lreLen); + for (k = j + 1; k <= i; ++k) { + n = uMap->mapUnicode(text[k], buf, sizeof(buf)); + s->append(buf, n); + ++nCols; + } + s->append(popdf, popdfLen); + i = j; + } + } + s->append(popdf, popdfLen); + + } + + } else { + for (i = 0; i < len; ++i) { + n = uMap->mapUnicode(text[i], buf, sizeof(buf)); + s->append(buf, n); + nCols += n; + } + } + + return nCols; +} + +#if TEXTOUT_WORD_LIST +TextWordList *TextPage::makeWordList(GBool physLayout) { + return new TextWordList(this, physLayout); +} +#endif + +//------------------------------------------------------------------------ +// ActualText +//------------------------------------------------------------------------ +ActualText::ActualText(TextPage *out) { + out->incRefCnt(); + text = out; + actualText = NULL; + actualTextBMCLevel = 0; +} + +ActualText::~ActualText() { + if (actualText) + delete actualText; + text->decRefCnt(); +} + +void ActualText::addChar(GfxState *state, double x, double y, + double dx, double dy, + CharCode c, int nBytes, Unicode *u, int uLen) { + if (actualTextBMCLevel == 0) { + text->addChar(state, x, y, dx, dy, c, nBytes, u, uLen); + } else { + // Inside ActualText span. + if (newActualTextSpan) { + actualText_x = x; + actualText_y = y; + actualText_dx = dx; + actualText_dy = dy; + newActualTextSpan = gFalse; + } else { + if (x < actualText_x) + actualText_x = x; + if (y < actualText_y) + actualText_y = y; + if (x + dx > actualText_x + actualText_dx) + actualText_dx = x + dx - actualText_x; + if (y + dy > actualText_y + actualText_dy) + actualText_dy = y + dy - actualText_y; + } + } +} + +void ActualText::beginMC(Dict *properties) { + if (actualTextBMCLevel > 0) { + // Already inside a ActualText span. + actualTextBMCLevel++; + return; + } + + Object obj; + if (properties && properties->lookup("ActualText", &obj)) { + if (obj.isString()) { + actualText = obj.getString(); + actualTextBMCLevel = 1; + newActualTextSpan = gTrue; + } + } +} + +void ActualText::endMC(GfxState *state) { + char *uniString = NULL; + Unicode *uni; + int length, i; + + if (actualTextBMCLevel > 0) { + actualTextBMCLevel--; + if (actualTextBMCLevel == 0) { + // ActualText span closed. Output the span text and the + // extents of all the glyphs inside the span + + if (newActualTextSpan) { + // No content inside span. + actualText_x = state->getCurX(); + actualText_y = state->getCurY(); + actualText_dx = 0; + actualText_dy = 0; + } + + if (!actualText->hasUnicodeMarker()) { + if (actualText->getLength() > 0) { + //non-unicode string -- assume pdfDocEncoding and + //try to convert to UTF16BE + uniString = pdfDocEncodingToUTF16(actualText, &length); + } else { + length = 0; + } + } else { + uniString = actualText->getCString(); + length = actualText->getLength(); + } + + if (length < 3) + length = 0; + else + length = length/2 - 1; + uni = new Unicode[length]; + for (i = 0 ; i < length; i++) + uni[i] = ((uniString[2 + i*2] & 0xff)<<8)|(uniString[3 + i*2] & 0xff); + + text->addChar(state, + actualText_x, actualText_y, + actualText_dx, actualText_dy, + 0, 1, uni, length); + + delete [] uni; + if (!actualText->hasUnicodeMarker()) + delete [] uniString; + delete actualText; + actualText = NULL; + } + } +} + +//------------------------------------------------------------------------ +// TextOutputDev +//------------------------------------------------------------------------ + +static void TextOutputDev_outputToFile(void *stream, char *text, int len) { + fwrite(text, 1, len, (FILE *)stream); +} + +TextOutputDev::TextOutputDev(char *fileName, GBool physLayoutA, + GBool rawOrderA, GBool append) { + text = NULL; + physLayout = physLayoutA; + rawOrder = rawOrderA; + doHTML = gFalse; + ok = gTrue; + + // open file + needClose = gFalse; + if (fileName) { + if (!strcmp(fileName, "-")) { + outputStream = stdout; +#ifdef _WIN32 + // keep DOS from munging the end-of-line characters + setmode(fileno(stdout), O_BINARY); +#endif + } else if ((outputStream = fopen(fileName, append ? "ab" : "wb"))) { + needClose = gTrue; + } else { + error(-1, "Couldn't open text file '%s'", fileName); + ok = gFalse; + actualText = NULL; + return; + } + outputFunc = &TextOutputDev_outputToFile; + } else { + outputStream = NULL; + } + + // set up text object + text = new TextPage(rawOrderA); + actualText = new ActualText(text); +} + +TextOutputDev::TextOutputDev(TextOutputFunc func, void *stream, + GBool physLayoutA, GBool rawOrderA) { + outputFunc = func; + outputStream = stream; + needClose = gFalse; + physLayout = physLayoutA; + rawOrder = rawOrderA; + doHTML = gFalse; + text = new TextPage(rawOrderA); + actualText = new ActualText(text); + ok = gTrue; +} + +TextOutputDev::~TextOutputDev() { + if (needClose) { +#ifdef MACOS + ICS_MapRefNumAndAssign((short)((FILE *)outputStream)->handle); +#endif + fclose((FILE *)outputStream); + } + if (text) { + text->decRefCnt(); + } + delete actualText; +} + +void TextOutputDev::startPage(int pageNum, GfxState *state) { + text->startPage(state); +} + +void TextOutputDev::endPage() { + text->endPage(); + text->coalesce(physLayout, doHTML); + if (outputStream) { + text->dump(outputStream, outputFunc, physLayout); + } +} + +void TextOutputDev::updateFont(GfxState *state) { + text->updateFont(state); +} + +void TextOutputDev::beginString(GfxState *state, GooString *s) { +} + +void TextOutputDev::endString(GfxState *state) { +} + +void TextOutputDev::drawChar(GfxState *state, double x, double y, + double dx, double dy, + double originX, double originY, + CharCode c, int nBytes, Unicode *u, int uLen) { + actualText->addChar(state, x, y, dx, dy, c, nBytes, u, uLen); +} + +void TextOutputDev::beginMarkedContent(char *name, Dict *properties) +{ + actualText->beginMC(properties); +} + +void TextOutputDev::endMarkedContent(GfxState *state) +{ + actualText->endMC(state); +} + +void TextOutputDev::stroke(GfxState *state) { + GfxPath *path; + GfxSubpath *subpath; + double x[2], y[2]; + + if (!doHTML) { + return; + } + path = state->getPath(); + if (path->getNumSubpaths() != 1) { + return; + } + subpath = path->getSubpath(0); + if (subpath->getNumPoints() != 2) { + return; + } + state->transform(subpath->getX(0), subpath->getY(0), &x[0], &y[0]); + state->transform(subpath->getX(1), subpath->getY(1), &x[1], &y[1]); + + // look for a vertical or horizontal line + if (x[0] == x[1] || y[0] == y[1]) { + text->addUnderline(x[0], y[0], x[1], y[1]); + } +} + +void TextOutputDev::fill(GfxState *state) { + GfxPath *path; + GfxSubpath *subpath; + double x[5], y[5]; + double rx0, ry0, rx1, ry1, t; + int i; + + if (!doHTML) { + return; + } + path = state->getPath(); + if (path->getNumSubpaths() != 1) { + return; + } + subpath = path->getSubpath(0); + if (subpath->getNumPoints() != 5) { + return; + } + for (i = 0; i < 5; ++i) { + if (subpath->getCurve(i)) { + return; + } + state->transform(subpath->getX(i), subpath->getY(i), &x[i], &y[i]); + } + + // look for a rectangle + if (x[0] == x[1] && y[1] == y[2] && x[2] == x[3] && y[3] == y[4] && + x[0] == x[4] && y[0] == y[4]) { + rx0 = x[0]; + ry0 = y[0]; + rx1 = x[2]; + ry1 = y[1]; + } else if (y[0] == y[1] && x[1] == x[2] && y[2] == y[3] && x[3] == x[4] && + x[0] == x[4] && y[0] == y[4]) { + rx0 = x[0]; + ry0 = y[0]; + rx1 = x[1]; + ry1 = y[2]; + } else { + return; + } + if (rx1 < rx0) { + t = rx0; + rx0 = rx1; + rx1 = t; + } + if (ry1 < ry0) { + t = ry0; + ry0 = ry1; + ry1 = t; + } + + // skinny horizontal rectangle + if (ry1 - ry0 < rx1 - rx0) { + if (ry1 - ry0 < maxUnderlineWidth) { + ry0 = 0.5 * (ry0 + ry1); + text->addUnderline(rx0, ry0, rx1, ry0); + } + + // skinny vertical rectangle + } else { + if (rx1 - rx0 < maxUnderlineWidth) { + rx0 = 0.5 * (rx0 + rx1); + text->addUnderline(rx0, ry0, rx0, ry1); + } + } +} + +void TextOutputDev::eoFill(GfxState *state) { + if (!doHTML) { + return; + } + fill(state); +} + +void TextOutputDev::processLink(AnnotLink *link, Catalog * /*catalog*/) { + double x1, y1, x2, y2; + int xMin, yMin, xMax, yMax, x, y; + + if (!doHTML) { + return; + } + link->getRect(&x1, &y1, &x2, &y2); + cvtUserToDev(x1, y1, &x, &y); + xMin = xMax = x; + yMin = yMax = y; + cvtUserToDev(x1, y2, &x, &y); + if (x < xMin) { + xMin = x; + } else if (x > xMax) { + xMax = x; + } + if (y < yMin) { + yMin = y; + } else if (y > yMax) { + yMax = y; + } + cvtUserToDev(x2, y1, &x, &y); + if (x < xMin) { + xMin = x; + } else if (x > xMax) { + xMax = x; + } + if (y < yMin) { + yMin = y; + } else if (y > yMax) { + yMax = y; + } + cvtUserToDev(x2, y2, &x, &y); + if (x < xMin) { + xMin = x; + } else if (x > xMax) { + xMax = x; + } + if (y < yMin) { + yMin = y; + } else if (y > yMax) { + yMax = y; + } + text->addLink(xMin, yMin, xMax, yMax, link); +} + +GBool TextOutputDev::findText(Unicode *s, int len, + GBool startAtTop, GBool stopAtBottom, + GBool startAtLast, GBool stopAtLast, + GBool caseSensitive, GBool backward, + double *xMin, double *yMin, + double *xMax, double *yMax) { + return text->findText(s, len, startAtTop, stopAtBottom, + startAtLast, stopAtLast, caseSensitive, backward, + xMin, yMin, xMax, yMax); +} + +GooString *TextOutputDev::getText(double xMin, double yMin, + double xMax, double yMax) { + return text->getText(xMin, yMin, xMax, yMax); +} + +void TextOutputDev::drawSelection(OutputDev *out, + double scale, + int rotation, + PDFRectangle *selection, + SelectionStyle style, + GfxColor *glyph_color, GfxColor *box_color) { + text->drawSelection(out, scale, rotation, selection, style, glyph_color, box_color); +} + +GooList *TextOutputDev::getSelectionRegion(PDFRectangle *selection, + SelectionStyle style, + double scale) { + return text->getSelectionRegion(selection, style, scale); +} + +GooString *TextOutputDev::getSelectionText(PDFRectangle *selection, + SelectionStyle style) +{ + return text->getSelectionText(selection, style); +} + +GBool TextOutputDev::findCharRange(int pos, int length, + double *xMin, double *yMin, + double *xMax, double *yMax) { + return text->findCharRange(pos, length, xMin, yMin, xMax, yMax); +} + +#if TEXTOUT_WORD_LIST +TextWordList *TextOutputDev::makeWordList() { + return text->makeWordList(physLayout); +} +#endif + +TextPage *TextOutputDev::takeText() { + TextPage *ret; + + ret = text; + text = new TextPage(rawOrder); + return ret; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/TextOutputDev.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/TextOutputDev.h new file mode 100644 index 00000000000..63f3670e427 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/TextOutputDev.h @@ -0,0 +1,806 @@ +//======================================================================== +// +// TextOutputDev.h +// +// Copyright 1997-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005-2007 Kristian Høgsberg <krh@redhat.com> +// Copyright (C) 2006 Ed Catmur <ed@catmur.co.uk> +// Copyright (C) 2007, 2008, 2011 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2007 Adrian Johnson <ajohnson@redneon.com> +// Copyright (C) 2008, 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2010 Brian Ewins <brian.ewins@gmail.com> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef TEXTOUTPUTDEV_H +#define TEXTOUTPUTDEV_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "poppler-config.h" +#include <stdio.h> +#include "goo/gtypes.h" +#include "GfxFont.h" +#include "GfxState.h" +#include "OutputDev.h" + +class GooString; +class GooList; +class Gfx; +class GfxFont; +class GfxState; +class UnicodeMap; +class AnnotLink; + +class TextWord; +class TextPool; +class TextLine; +class TextLineFrag; +class TextBlock; +class TextFlow; +class TextWordList; +class TextPage; +class TextSelectionVisitor; + +//------------------------------------------------------------------------ + +typedef void (*TextOutputFunc)(void *stream, char *text, int len); + +enum SelectionStyle { + selectionStyleGlyph, + selectionStyleWord, + selectionStyleLine +}; + +//------------------------------------------------------------------------ +// TextFontInfo +//------------------------------------------------------------------------ + +class TextFontInfo { +public: + + TextFontInfo(GfxState *state); + ~TextFontInfo(); + + GBool matches(GfxState *state); + GBool matches(TextFontInfo *fontInfo); + +#if TEXTOUT_WORD_LIST + // Get the font name (which may be NULL). + GooString *getFontName() { return fontName; } + + // Get font descriptor flags. + GBool isFixedWidth() { return flags & fontFixedWidth; } + GBool isSerif() { return flags & fontSerif; } + GBool isSymbolic() { return flags & fontSymbolic; } + GBool isItalic() { return flags & fontItalic; } + GBool isBold() { return flags & fontBold; } +#endif + +private: + + GfxFont *gfxFont; +#if TEXTOUT_WORD_LIST + GooString *fontName; + int flags; +#endif + + friend class TextWord; + friend class TextPage; + friend class TextSelectionPainter; +}; + +//------------------------------------------------------------------------ +// TextWord +//------------------------------------------------------------------------ + +class TextWord { +public: + + // Constructor. + TextWord(GfxState *state, int rotA, double x0, double y0, + int charPosA, TextFontInfo *fontA, double fontSize); + + // Destructor. + ~TextWord(); + + // Add a character to the word. + void addChar(GfxState *state, double x, double y, + double dx, double dy, CharCode c, Unicode u); + + // Merge <word> onto the end of <this>. + void merge(TextWord *word); + + // Compares <this> to <word>, returning -1 (<), 0 (=), or +1 (>), + // based on a primary-axis comparison, e.g., x ordering if rot=0. + int primaryCmp(TextWord *word); + + // Return the distance along the primary axis between <this> and + // <word>. + double primaryDelta(TextWord *word); + + static int cmpYX(const void *p1, const void *p2); + + void visitSelection(TextSelectionVisitor *visitor, + PDFRectangle *selection, + SelectionStyle style); + + // Get the TextFontInfo object associated with this word. + TextFontInfo *getFontInfo() { return font; } + + // Get the next TextWord on the linked list. + TextWord *getNext() { return next; } + +#if TEXTOUT_WORD_LIST + int getLength() { return len; } + const Unicode *getChar(int idx) { return &text[idx]; } + GooString *getText(); + GooString *getFontName() { return font->fontName; } + void getColor(double *r, double *g, double *b) + { *r = colorR; *g = colorG; *b = colorB; } + void getBBox(double *xMinA, double *yMinA, double *xMaxA, double *yMaxA) + { *xMinA = xMin; *yMinA = yMin; *xMaxA = xMax; *yMaxA = yMax; } + void getCharBBox(int charIdx, double *xMinA, double *yMinA, + double *xMaxA, double *yMaxA); + double getFontSize() { return fontSize; } + int getRotation() { return rot; } + int getCharPos() { return charPos; } + int getCharLen() { return charLen; } + GBool getSpaceAfter() { return spaceAfter; } +#endif + GBool isUnderlined() { return underlined; } + AnnotLink *getLink() { return link; } + double getEdge(int i) { return edge[i]; } + double getBaseline () { return base; } + GBool hasSpaceAfter () { return spaceAfter; } + TextWord* nextWord () { return next; }; +private: + + int rot; // rotation, multiple of 90 degrees + // (0, 1, 2, or 3) + double xMin, xMax; // bounding box x coordinates + double yMin, yMax; // bounding box y coordinates + double base; // baseline x or y coordinate + Unicode *text; // the text + CharCode *charcode; // glyph indices + double *edge; // "near" edge x or y coord of each char + // (plus one extra entry for the last char) + int len; // length of text and edge arrays + int size; // size of text and edge arrays + int charPos; // character position (within content stream) + int charLen; // number of content stream characters in + // this word + TextFontInfo *font; // font information + double fontSize; // font size + GBool spaceAfter; // set if there is a space between this + // word and the next word on the line + TextWord *next; // next word in line + +#if TEXTOUT_WORD_LIST + double colorR, // word color + colorG, + colorB; +#endif + + GBool underlined; + AnnotLink *link; + + friend class TextPool; + friend class TextLine; + friend class TextBlock; + friend class TextFlow; + friend class TextWordList; + friend class TextPage; + + friend class TextSelectionPainter; + friend class TextSelectionDumper; +}; + +//------------------------------------------------------------------------ +// TextPool +//------------------------------------------------------------------------ + +class TextPool { +public: + + TextPool(); + ~TextPool(); + + TextWord *getPool(int baseIdx) { return pool[baseIdx - minBaseIdx]; } + void setPool(int baseIdx, TextWord *p) { pool[baseIdx - minBaseIdx] = p; } + + int getBaseIdx(double base); + + void addWord(TextWord *word); + +private: + + int minBaseIdx; // min baseline bucket index + int maxBaseIdx; // max baseline bucket index + TextWord **pool; // array of linked lists, one for each + // baseline value (multiple of 4 pts) + TextWord *cursor; // pointer to last-accessed word + int cursorBaseIdx; // baseline bucket index of last-accessed word + + friend class TextBlock; + friend class TextPage; +}; + +struct TextFlowData; + +//------------------------------------------------------------------------ +// TextLine +//------------------------------------------------------------------------ + +class TextLine { +public: + + TextLine(TextBlock *blkA, int rotA, double baseA); + ~TextLine(); + + void addWord(TextWord *word); + + // Return the distance along the primary axis between <this> and + // <line>. + double primaryDelta(TextLine *line); + + // Compares <this> to <line>, returning -1 (<), 0 (=), or +1 (>), + // based on a primary-axis comparison, e.g., x ordering if rot=0. + int primaryCmp(TextLine *line); + + // Compares <this> to <line>, returning -1 (<), 0 (=), or +1 (>), + // based on a secondary-axis comparison of the baselines, e.g., y + // ordering if rot=0. + int secondaryCmp(TextLine *line); + + int cmpYX(TextLine *line); + + static int cmpXY(const void *p1, const void *p2); + + void coalesce(UnicodeMap *uMap); + + void visitSelection(TextSelectionVisitor *visitor, + PDFRectangle *selection, + SelectionStyle style); + + // Get the head of the linked list of TextWords. + TextWord *getWords() { return words; } + + // Get the next TextLine on the linked list. + TextLine *getNext() { return next; } + + // Returns true if the last char of the line is a hyphen. + GBool isHyphenated() { return hyphenated; } + +private: + + TextBlock *blk; // parent block + int rot; // text rotation + double xMin, xMax; // bounding box x coordinates + double yMin, yMax; // bounding box y coordinates + double base; // baseline x or y coordinate + TextWord *words; // words in this line + TextWord *lastWord; // last word in this line + Unicode *text; // Unicode text of the line, including + // spaces between words + double *edge; // "near" edge x or y coord of each char + // (plus one extra entry for the last char) + int *col; // starting column number of each Unicode char + int len; // number of Unicode chars + int convertedLen; // total number of converted characters + GBool hyphenated; // set if last char is a hyphen + TextLine *next; // next line in block + Unicode *normalized; // normalized form of Unicode text + int normalized_len; // number of normalized Unicode chars + int *normalized_idx; // indices of normalized chars into Unicode text + + friend class TextLineFrag; + friend class TextBlock; + friend class TextFlow; + friend class TextWordList; + friend class TextPage; + + friend class TextSelectionPainter; + friend class TextSelectionSizer; + friend class TextSelectionDumper; +}; + +//------------------------------------------------------------------------ +// TextBlock +//------------------------------------------------------------------------ + +class TextBlock { +public: + + TextBlock(TextPage *pageA, int rotA); + ~TextBlock(); + + void addWord(TextWord *word); + + void coalesce(UnicodeMap *uMap); + + // Update this block's priMin and priMax values, looking at <blk>. + void updatePriMinMax(TextBlock *blk); + + static int cmpXYPrimaryRot(const void *p1, const void *p2); + + static int cmpYXPrimaryRot(const void *p1, const void *p2); + + int primaryCmp(TextBlock *blk); + + double secondaryDelta(TextBlock *blk); + + // Returns true if <this> is below <blk>, relative to the page's + // primary rotation. + GBool isBelow(TextBlock *blk); + + void visitSelection(TextSelectionVisitor *visitor, + PDFRectangle *selection, + SelectionStyle style); + + // Get the head of the linked list of TextLines. + TextLine *getLines() { return lines; } + + // Get the next TextBlock on the linked list. + TextBlock *getNext() { return next; } + + void getBBox(double *xMinA, double *yMinA, double *xMaxA, double *yMaxA) + { *xMinA = xMin; *yMinA = yMin; *xMaxA = xMax; *yMaxA = yMax; } + + int getLineCount() { return nLines; } + +private: + + GBool isBeforeByRule1(TextBlock *blk1); + GBool isBeforeByRepeatedRule1(TextBlock *blkList, TextBlock *blk1); + GBool isBeforeByRule2(TextBlock *blk1); + + int visitDepthFirst(TextBlock *blkList, int pos1, + TextBlock **sorted, int sortPos, + GBool* visited); + + TextPage *page; // the parent page + int rot; // text rotation + double xMin, xMax; // bounding box x coordinates + double yMin, yMax; // bounding box y coordinates + double priMin, priMax; // whitespace bounding box along primary axis + double ExMin, ExMax; // extended bounding box x coordinates + double EyMin, EyMax; // extended bounding box y coordinates + int tableId; // id of table to which this block belongs + GBool tableEnd; // is this block at end of line of actual table + + TextPool *pool; // pool of words (used only until lines + // are built) + TextLine *lines; // linked list of lines + TextLine *curLine; // most recently added line + int nLines; // number of lines + int charCount; // number of characters in the block + int col; // starting column + int nColumns; // number of columns in the block + + TextBlock *next; + TextBlock *stackNext; + + friend class TextLine; + friend class TextLineFrag; + friend class TextFlow; + friend class TextWordList; + friend class TextPage; + friend class TextSelectionPainter; + friend class TextSelectionDumper; +}; + +//------------------------------------------------------------------------ +// TextFlow +//------------------------------------------------------------------------ + +class TextFlow { +public: + + TextFlow(TextPage *pageA, TextBlock *blk); + ~TextFlow(); + + // Add a block to the end of this flow. + void addBlock(TextBlock *blk); + + // Returns true if <blk> fits below <prevBlk> in the flow, i.e., (1) + // it uses a font no larger than the last block added to the flow, + // and (2) it fits within the flow's [priMin, priMax] along the + // primary axis. + GBool blockFits(TextBlock *blk, TextBlock *prevBlk); + + // Get the head of the linked list of TextBlocks. + TextBlock *getBlocks() { return blocks; } + + // Get the next TextFlow on the linked list. + TextFlow *getNext() { return next; } + +private: + + TextPage *page; // the parent page + double xMin, xMax; // bounding box x coordinates + double yMin, yMax; // bounding box y coordinates + double priMin, priMax; // whitespace bounding box along primary axis + TextBlock *blocks; // blocks in flow + TextBlock *lastBlk; // last block in this flow + TextFlow *next; + + friend class TextWordList; + friend class TextPage; +}; + +#if TEXTOUT_WORD_LIST + +//------------------------------------------------------------------------ +// TextWordList +//------------------------------------------------------------------------ + +class TextWordList { +public: + + // Build a flat word list, in content stream order (if + // text->rawOrder is true), physical layout order (if <physLayout> + // is true and text->rawOrder is false), or reading order (if both + // flags are false). + TextWordList(TextPage *text, GBool physLayout); + + ~TextWordList(); + + // Return the number of words on the list. + int getLength(); + + // Return the <idx>th word from the list. + TextWord *get(int idx); + +private: + + GooList *words; // [TextWord] +}; + +#endif // TEXTOUT_WORD_LIST + +//------------------------------------------------------------------------ +// TextPage +//------------------------------------------------------------------------ + +class TextPage { +public: + + // Constructor. + TextPage(GBool rawOrderA); + + void incRefCnt(); + void decRefCnt(); + + // Start a new page. + void startPage(GfxState *state); + + // End the current page. + void endPage(); + + // Update the current font. + void updateFont(GfxState *state); + + // Begin a new word. + void beginWord(GfxState *state, double x0, double y0); + + // Add a character to the current word. + void addChar(GfxState *state, double x, double y, + double dx, double dy, + CharCode c, int nBytes, Unicode *u, int uLen); + + // End the current word, sorting it into the list of words. + void endWord(); + + // Add a word, sorting it into the list of words. + void addWord(TextWord *word); + + // Add a (potential) underline. + void addUnderline(double x0, double y0, double x1, double y1); + + // Add a hyperlink. + void addLink(int xMin, int yMin, int xMax, int yMax, AnnotLink *link); + + // Coalesce strings that look like parts of the same line. + void coalesce(GBool physLayout, GBool doHTML); + + // Find a string. If <startAtTop> is true, starts looking at the + // top of the page; else if <startAtLast> is true, starts looking + // immediately after the last find result; else starts looking at + // <xMin>,<yMin>. If <stopAtBottom> is true, stops looking at the + // bottom of the page; else if <stopAtLast> is true, stops looking + // just before the last find result; else stops looking at + // <xMax>,<yMax>. + GBool findText(Unicode *s, int len, + GBool startAtTop, GBool stopAtBottom, + GBool startAtLast, GBool stopAtLast, + GBool caseSensitive, GBool backward, + double *xMin, double *yMin, + double *xMax, double *yMax); + + // Get the text which is inside the specified rectangle. + GooString *getText(double xMin, double yMin, + double xMax, double yMax); + + void visitSelection(TextSelectionVisitor *visitor, + PDFRectangle *selection, + SelectionStyle style); + + void drawSelection(OutputDev *out, + double scale, + int rotation, + PDFRectangle *selection, + SelectionStyle style, + GfxColor *glyph_color, GfxColor *box_color); + + GooList *getSelectionRegion(PDFRectangle *selection, + SelectionStyle style, + double scale); + + GooString *getSelectionText(PDFRectangle *selection, + SelectionStyle style); + + // Find a string by character position and length. If found, sets + // the text bounding rectangle and returns true; otherwise returns + // false. + GBool findCharRange(int pos, int length, + double *xMin, double *yMin, + double *xMax, double *yMax); + + // Dump contents of page to a file. + void dump(void *outputStream, TextOutputFunc outputFunc, + GBool physLayout); + + // Get the head of the linked list of TextFlows. + TextFlow *getFlows() { return flows; } + +#if TEXTOUT_WORD_LIST + // Build a flat word list, in content stream order (if + // this->rawOrder is true), physical layout order (if <physLayout> + // is true and this->rawOrder is false), or reading order (if both + // flags are false). + TextWordList *makeWordList(GBool physLayout); +#endif + +private: + + // Destructor. + ~TextPage(); + + void clear(); + void assignColumns(TextLineFrag *frags, int nFrags, GBool rot); + int dumpFragment(Unicode *text, int len, UnicodeMap *uMap, GooString *s); + + GBool rawOrder; // keep text in content stream order + + double pageWidth, pageHeight; // width and height of current page + TextWord *curWord; // currently active string + int charPos; // next character position (within content + // stream) + TextFontInfo *curFont; // current font + double curFontSize; // current font size + int nest; // current nesting level (for Type 3 fonts) + int nTinyChars; // number of "tiny" chars seen so far + GBool lastCharOverlap; // set if the last added char overlapped the + // previous char + + TextPool *pools[4]; // a "pool" of TextWords for each rotation + TextFlow *flows; // linked list of flows + TextBlock **blocks; // array of blocks, in yx order + int nBlocks; // number of blocks + int primaryRot; // primary rotation + GBool primaryLR; // primary direction (true means L-to-R, + // false means R-to-L) + TextWord *rawWords; // list of words, in raw order (only if + // rawOrder is set) + TextWord *rawLastWord; // last word on rawWords list + + GooList *fonts; // all font info objects used on this + // page [TextFontInfo] + + double lastFindXMin, // coordinates of the last "find" result + lastFindYMin; + GBool haveLastFind; + + GooList *underlines; // [TextUnderline] + GooList *links; // [TextLink] + + int refCnt; + + friend class TextLine; + friend class TextLineFrag; + friend class TextBlock; + friend class TextFlow; + friend class TextWordList; + friend class TextSelectionPainter; + friend class TextSelectionDumper; +}; + +//------------------------------------------------------------------------ +// ActualText +//------------------------------------------------------------------------ + +class ActualText { +public: + // Create an ActualText + ActualText(TextPage *out); + ~ActualText(); + + void addChar(GfxState *state, double x, double y, + double dx, double dy, + CharCode c, int nBytes, Unicode *u, int uLen); + void beginMC(Dict *properties); + void endMC(GfxState *state); + +private: + TextPage *text; + int actualTextBMCLevel; // > 0 when inside ActualText span. Incremented + // for each nested BMC inside the span. + GooString *actualText; // replacement text for the span + GBool newActualTextSpan; // true at start of span. used to init the extent + double actualText_x, actualText_y; // extent of the text inside the span + double actualText_dx, actualText_dy; +}; + + +//------------------------------------------------------------------------ +// TextOutputDev +//------------------------------------------------------------------------ + +class TextOutputDev: public OutputDev { +public: + + // Open a text output file. If <fileName> is NULL, no file is + // written (this is useful, e.g., for searching text). If + // <physLayoutA> is true, the original physical layout of the text + // is maintained. If <rawOrder> is true, the text is kept in + // content stream order. + TextOutputDev(char *fileName, GBool physLayoutA, + GBool rawOrderA, GBool append); + + // Create a TextOutputDev which will write to a generic stream. If + // <physLayoutA> is true, the original physical layout of the text + // is maintained. If <rawOrder> is true, the text is kept in + // content stream order. + TextOutputDev(TextOutputFunc func, void *stream, + GBool physLayoutA, GBool rawOrderA); + + // Destructor. + virtual ~TextOutputDev(); + + // Check if file was successfully created. + virtual GBool isOk() { return ok; } + + //---- get info about output device + + // Does this device use upside-down coordinates? + // (Upside-down means (0,0) is the top left corner of the page.) + virtual GBool upsideDown() { return gTrue; } + + // Does this device use drawChar() or drawString()? + virtual GBool useDrawChar() { return gTrue; } + + // Does this device use beginType3Char/endType3Char? Otherwise, + // text in Type 3 fonts will be drawn with drawChar/drawString. + virtual GBool interpretType3Chars() { return gFalse; } + + // Does this device need non-text content? + virtual GBool needNonText() { return gFalse; } + + //----- initialization and control + + // Start a page. + virtual void startPage(int pageNum, GfxState *state); + + // End a page. + virtual void endPage(); + + //----- update text state + virtual void updateFont(GfxState *state); + + //----- text drawing + virtual void beginString(GfxState *state, GooString *s); + virtual void endString(GfxState *state); + virtual void drawChar(GfxState *state, double x, double y, + double dx, double dy, + double originX, double originY, + CharCode c, int nBytes, Unicode *u, int uLen); + + //----- grouping operators + virtual void beginMarkedContent(char *name, Dict *properties); + virtual void endMarkedContent(GfxState *state); + + //----- path painting + virtual void stroke(GfxState *state); + virtual void fill(GfxState *state); + virtual void eoFill(GfxState *state); + + //----- link borders + virtual void processLink(AnnotLink *link, Catalog *catalog); + + //----- special access + + // Find a string. If <startAtTop> is true, starts looking at the + // top of the page; else if <startAtLast> is true, starts looking + // immediately after the last find result; else starts looking at + // <xMin>,<yMin>. If <stopAtBottom> is true, stops looking at the + // bottom of the page; else if <stopAtLast> is true, stops looking + // just before the last find result; else stops looking at + // <xMax>,<yMax>. + GBool findText(Unicode *s, int len, + GBool startAtTop, GBool stopAtBottom, + GBool startAtLast, GBool stopAtLast, + GBool caseSensitive, GBool backward, + double *xMin, double *yMin, + double *xMax, double *yMax); + + // Get the text which is inside the specified rectangle. + GooString *getText(double xMin, double yMin, + double xMax, double yMax); + + // Find a string by character position and length. If found, sets + // the text bounding rectangle and returns true; otherwise returns + // false. + GBool findCharRange(int pos, int length, + double *xMin, double *yMin, + double *xMax, double *yMax); + + void drawSelection(OutputDev *out, double scale, int rotation, + PDFRectangle *selection, + SelectionStyle style, + GfxColor *glyph_color, GfxColor *box_color); + + GooList *getSelectionRegion(PDFRectangle *selection, + SelectionStyle style, + double scale); + + GooString *getSelectionText(PDFRectangle *selection, + SelectionStyle style); + +#if TEXTOUT_WORD_LIST + // Build a flat word list, in content stream order (if + // this->rawOrder is true), physical layout order (if + // this->physLayout is true and this->rawOrder is false), or reading + // order (if both flags are false). + TextWordList *makeWordList(); +#endif + + // Returns the TextPage object for the last rasterized page, + // transferring ownership to the caller. + TextPage *takeText(); + + // Turn extra processing for HTML conversion on or off. + void enableHTMLExtras(GBool doHTMLA) { doHTML = doHTMLA; } + +private: + + TextOutputFunc outputFunc; // output function + void *outputStream; // output stream + GBool needClose; // need to close the output file? + // (only if outputStream is a FILE*) + TextPage *text; // text for the current page + GBool physLayout; // maintain original physical layout when + // dumping text + GBool rawOrder; // keep text in content stream order + GBool doHTML; // extra processing for HTML conversion + GBool ok; // set up ok? + + ActualText *actualText; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/UTF8.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/UTF8.h new file mode 100644 index 00000000000..34a07d4082f --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/UTF8.h @@ -0,0 +1,84 @@ +//======================================================================== +// +// UTF8.h +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2008 Koji Otani <sho@bbr.jp> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +static int mapUTF8(Unicode u, char *buf, int bufSize) { + if (u <= 0x0000007f) { + if (bufSize < 1) { + return 0; + } + buf[0] = (char)u; + return 1; + } else if (u <= 0x000007ff) { + if (bufSize < 2) { + return 0; + } + buf[0] = (char)(0xc0 + (u >> 6)); + buf[1] = (char)(0x80 + (u & 0x3f)); + return 2; + } else if (u <= 0x0000ffff) { + if (bufSize < 3) { + return 0; + } + buf[0] = (char)(0xe0 + (u >> 12)); + buf[1] = (char)(0x80 + ((u >> 6) & 0x3f)); + buf[2] = (char)(0x80 + (u & 0x3f)); + return 3; + } else if (u <= 0x0010ffff) { + if (bufSize < 4) { + return 0; + } + buf[0] = (char)(0xf0 + (u >> 18)); + buf[1] = (char)(0x80 + ((u >> 12) & 0x3f)); + buf[2] = (char)(0x80 + ((u >> 6) & 0x3f)); + buf[3] = (char)(0x80 + (u & 0x3f)); + return 4; + } else { + return 0; + } +} + +static int mapUCS2(Unicode u, char *buf, int bufSize) { + if (u <= 0xffff) { + if (bufSize < 2) { + return 0; + } + buf[0] = (char)((u >> 8) & 0xff); + buf[1] = (char)(u & 0xff); + return 2; + } else if (u < 0x110000) { + Unicode uu; + + /* using surrogate pair */ + if (bufSize < 4) { + return 0; + } + uu = ((u - 0x10000) >> 10) + 0xd800; + buf[0] = (char)((uu >> 8) & 0xff); + buf[1] = (char)(uu & 0xff); + uu = (u & 0x3ff)+0xdc00; + buf[2] = (char)((uu >> 8) & 0xff); + buf[3] = (char)(uu & 0xff); + return 4; + } else { + return 0; + } +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeCClassTables.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeCClassTables.h new file mode 100644 index 00000000000..62f9ecc3657 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeCClassTables.h @@ -0,0 +1,1827 @@ +// Copied from gunidecomp.h in GLib: +// s/[G]_UNICODE_MAX_TABLE_INDEX/UNICODE_MAX_TABLE_INDEX/g +// s/[g]uchar/Unicode/g +// s/[g]int16/short/g +// Can be regenerated from gen-unicode-tables.pl, also in GLib, with relevant +// Unicode data tables from ftp.unicode.org. + +static const Unicode cclass_data[][256] = { + { /* page 3, index 0 */ + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 232, 220, 220, 220, 220, 232, 216, + 220, 220, 220, 220, 220, 202, 202, 220, 220, 220, 220, 202, 202, 220, + 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1, 1, 1, 1, 220, + 220, 220, 220, 230, 230, 230, 230, 230, 230, 230, 230, 240, 230, 220, + 220, 220, 230, 230, 230, 220, 220, 0, 230, 230, 230, 220, 220, 220, 220, + 230, 0, 0, 0, 0, 0, 234, 234, 233, 234, 234, 233, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 4, index 1 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 5, index 2 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 220, 230, 230, 230, 230, 220, 230, 230, 230, 222, 220, 230, 230, 230, + 230, 230, 230, 0, 220, 220, 220, 220, 220, 230, 230, 220, 230, 230, 222, + 228, 230, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 20, 21, 22, 0, 23, + 0, 24, 25, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 6, index 3 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34, 230, 230, 220, 220, + 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 0, 0, 230, + 230, 230, 230, 220, 230, 0, 0, 230, 230, 0, 220, 230, 230, 220, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 7, index 4 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 230, 220, 230, 230, 220, 230, 230, 220, 220, 220, 230, 220, 220, 230, + 220, 230, 230, 230, 220, 230, 220, 230, 220, 230, 220, 230, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 9, index 5 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 230, 220, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 10, index 6 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 11, index 7 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 12, index 8 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 84, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 13, index 9 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 14, index 10 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 15, index 11 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 220, 0, 220, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 0, + 132, 0, 0, 0, 0, 0, 130, 130, 130, 130, 0, 0, 130, 0, 230, 230, 9, 0, + 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0 + }, + { /* page 16, index 12 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 23, index 13 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 24, index 14 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 25, index 15 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 32, index 16 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 1, 1, 230, 230, + 230, 230, 1, 1, 1, 230, 230, 0, 0, 0, 0, 230, 0, 0, 0, 1, 1, 230, 220, + 230, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 48, index 17 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 228, 232, 222, + 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 251, index 18 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 254, index 19 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 465, index 20 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 216, 216, 1, 1, 1, 0, 0, 0, 226, 216, 216, 216, 216, 216, + 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 220, 220, 220, 220, 220, 0, 0, + 230, 230, 230, 230, 230, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0 + } +}; + +static const short combining_class_table_part1[763] = { + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 /* page 3 */, + 1 /* page 4 */, + 2 /* page 5 */, + 3 /* page 6 */, + 4 /* page 7 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 5 /* page 9 */, + 6 /* page 10 */, + 7 /* page 11 */, + 8 /* page 12 */, + 9 /* page 13 */, + 10 /* page 14 */, + 11 /* page 15 */, + 12 /* page 16 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 13 /* page 23 */, + 14 /* page 24 */, + 15 /* page 25 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 16 /* page 32 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 17 /* page 48 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 18 /* page 251 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 19 /* page 254 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 20 /* page 465 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX +}; + +static const short combining_class_table_part2[768] = { + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX +}; diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeCompTables.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeCompTables.h new file mode 100644 index 00000000000..68e2f86aee9 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeCompTables.h @@ -0,0 +1,665 @@ +// Copied from gunicomp.h in GLib: +// s/[G]_UNICODE_MAX_TABLE_INDEX/UNICODE_MAX_TABLE_INDEX/g +// s/[g]uint16/unsigned short/g +// s/[g]int16/short/g +// Can be regenerated from gen-unicode-tables.pl, also in GLib, with relevant +// Unicode data tables from ftp.unicode.org. + +#define COMPOSE_FIRST_START 1 +#define COMPOSE_FIRST_SINGLE_START 147 +#define COMPOSE_SECOND_START 357 +#define COMPOSE_SECOND_SINGLE_START 388 + +#define COMPOSE_TABLE_LAST 48 + +static const unsigned short compose_data[][256] = { + { /* page 0, index 0 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 148, 149, 0, 0, 1, 2, 3, 4, 5, + 150, 6, 7, 8, 151, 9, 10, 11, 12, 13, 14, 0, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 152, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 0, 39, 40, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 153, 154, + 50, 155, 0, 0, 51, 0, 0, 0, 0, 156, 0, 0, 0, 0, 52, 53, 157, 0, 158, 0, + 0, 0, 54, 0, 0, 0, 0, 0, 55, 0, 159, 160, 56, 161, 0, 0, 57, 0, 0, 0, 0, + 162, 0, 0, 0, 0, 58, 59, 163, 0, 164, 0, 0, 0, 60, 0, 0, 0 + }, + { /* page 1, index 1 */ + 0, 0, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 166, 0, + 0, 0, 0, 167, 168, 0, 0, 0, 0, 0, 0, 169, 170, 171, 172, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, + 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 70, 0, 0, 0, 0, 0, 0, 174, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 175, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0 + }, + { /* page 2, index 2 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 178, 179, 180, 0, 0, 0, 0, + 181, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 3, index 3 */ + 357, 358, 359, 360, 361, 0, 362, 363, 364, 365, 366, 367, 368, 0, 0, 369, + 0, 370, 0, 371, 372, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 374, + 375, 376, 377, 378, 379, 0, 0, 0, 0, 380, 381, 0, 382, 383, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, + 72, 0, 73, 0, 74, 0, 0, 0, 0, 0, 75, 0, 184, 0, 0, 0, 76, 0, 0, 0, 77, 0, + 0, 185, 0, 186, 0, 0, 78, 0, 0, 0, 79, 0, 80, 0, 81, 0, 0, 0, 0, 0, 82, + 0, 83, 0, 0, 0, 84, 0, 0, 0, 85, 86, 87, 0, 0, 187, 0, 0, 0, 88, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 4, index 4 */ + 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 189, 0, 90, + 91, 190, 92, 0, 191, 0, 0, 0, 192, 0, 0, 0, 0, 93, 0, 0, 0, 193, 0, 0, 0, + 194, 0, 195, 0, 0, 94, 0, 0, 196, 0, 95, 96, 197, 97, 0, 198, 0, 0, 0, + 199, 0, 0, 0, 0, 98, 0, 0, 0, 200, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, + 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 207, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 208, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 6, index 5 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 210, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 388, 389, 390, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, + 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 9, index 6 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, + 216, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, + 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 11, index 7 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, + 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 395, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 396, 0, 0, 0, 0, 0, 0, 0, 102, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 12, index 8 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, + 0, 0, 398, 0, 0, 0, 103, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, + 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 13, index 9 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 104, + 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 105, 0, 0, 224, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 16, index 10 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 30, index 11 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 226, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 229, 0, 0, + 0, 0, 0, 0, 230, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 107, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 233, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 235, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 31, index 12 */ + 108, 109, 236, 237, 238, 239, 240, 241, 110, 111, 242, 243, 244, 245, + 246, 247, 112, 113, 0, 0, 0, 0, 0, 0, 114, 115, 0, 0, 0, 0, 0, 0, 116, + 117, 248, 249, 250, 251, 252, 253, 118, 119, 254, 255, 256, 257, 258, + 259, 120, 121, 0, 0, 0, 0, 0, 0, 122, 123, 0, 0, 0, 0, 0, 0, 124, 125, 0, + 0, 0, 0, 0, 0, 126, 127, 0, 0, 0, 0, 0, 0, 128, 129, 0, 0, 0, 0, 0, 0, 0, + 130, 0, 0, 0, 0, 0, 0, 131, 132, 260, 261, 262, 263, 264, 265, 133, 134, + 266, 267, 268, 269, 270, 271, 272, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, + 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 136, 0 + }, + { /* page 33, index 13 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 278, 0, 279, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 282, 0, + 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 34, index 14 */ + 0, 0, 0, 284, 0, 0, 0, 0, 285, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 288, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 290, + 0, 291, 0, 0, 292, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 295, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 297, 298, 0, 0, 299, 300, 0, 0, 301, 302, 303, 304, 0, 0, 0, 0, + 305, 306, 0, 0, 307, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 310, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 312, 313, 0, 314, + 0, 0, 0, 0, 0, 0, 315, 316, 317, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { /* page 48, index 15 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, + 0, 0, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, + 328, 0, 329, 0, 330, 0, 331, 0, 0, 332, 0, 333, 0, 334, 0, 0, 0, 0, 0, 0, + 137, 0, 0, 138, 0, 0, 139, 0, 0, 140, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 387, + 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 337, 0, 338, 0, 339, + 0, 340, 0, 341, 0, 342, 0, 343, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, + 0, 0, 349, 0, 350, 0, 351, 0, 0, 0, 0, 0, 0, 142, 0, 0, 143, 0, 0, 144, + 0, 0, 145, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 352, 353, 354, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0 + } +}; + +static const short compose_table[COMPOSE_TABLE_LAST + 1] = { + 0 /* page 0 */, + 1 /* page 1 */, + 2 /* page 2 */, + 3 /* page 3 */, + 4 /* page 4 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 5 /* page 6 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 6 /* page 9 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 7 /* page 11 */, + 8 /* page 12 */, + 9 /* page 13 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 10 /* page 16 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 11 /* page 30 */, + 12 /* page 31 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 13 /* page 33 */, + 14 /* page 34 */, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 0 + UNICODE_MAX_TABLE_INDEX, + 15 /* page 48 */ +}; + +static const unsigned short compose_first_single[][2] = { + { 0x0338, 0x226e }, + { 0x0338, 0x2260 }, + { 0x0338, 0x226f }, + { 0x0307, 0x1e1e }, + { 0x0302, 0x0134 }, + { 0x0307, 0x1e1f }, + { 0x0304, 0x01de }, + { 0x0301, 0x01fa }, + { 0x0301, 0x1e08 }, + { 0x0301, 0x1e2e }, + { 0x0304, 0x022a }, + { 0x0301, 0x01fe }, + { 0x0304, 0x01df }, + { 0x0301, 0x01fb }, + { 0x0301, 0x1e09 }, + { 0x0301, 0x1e2f }, + { 0x0304, 0x022b }, + { 0x0301, 0x01ff }, + { 0x0307, 0x1e64 }, + { 0x0307, 0x1e65 }, + { 0x0307, 0x1e66 }, + { 0x0307, 0x1e67 }, + { 0x0301, 0x1e78 }, + { 0x0301, 0x1e79 }, + { 0x0308, 0x1e7a }, + { 0x0308, 0x1e7b }, + { 0x0307, 0x1e9b }, + { 0x030c, 0x01ee }, + { 0x0304, 0x01ec }, + { 0x0304, 0x01ed }, + { 0x0304, 0x01e0 }, + { 0x0304, 0x01e1 }, + { 0x0306, 0x1e1c }, + { 0x0306, 0x1e1d }, + { 0x0304, 0x0230 }, + { 0x0304, 0x0231 }, + { 0x030c, 0x01ef }, + { 0x0314, 0x1fec }, + { 0x0345, 0x1fb4 }, + { 0x0345, 0x1fc4 }, + { 0x0345, 0x1ff4 }, + { 0x0308, 0x0407 }, + { 0x0301, 0x0403 }, + { 0x0308, 0x04de }, + { 0x0301, 0x040c }, + { 0x0308, 0x04e6 }, + { 0x0308, 0x04f4 }, + { 0x0308, 0x04f8 }, + { 0x0308, 0x04ec }, + { 0x0301, 0x0453 }, + { 0x0308, 0x04df }, + { 0x0301, 0x045c }, + { 0x0308, 0x04e7 }, + { 0x0308, 0x04f5 }, + { 0x0308, 0x04f9 }, + { 0x0308, 0x04ed }, + { 0x0308, 0x0457 }, + { 0x030f, 0x0476 }, + { 0x030f, 0x0477 }, + { 0x0308, 0x04da }, + { 0x0308, 0x04db }, + { 0x0308, 0x04ea }, + { 0x0308, 0x04eb }, + { 0x0654, 0x0624 }, + { 0x0654, 0x0626 }, + { 0x0654, 0x06c2 }, + { 0x0654, 0x06d3 }, + { 0x0654, 0x06c0 }, + { 0x093c, 0x0929 }, + { 0x093c, 0x0931 }, + { 0x093c, 0x0934 }, + { 0x0bd7, 0x0b94 }, + { 0x0bbe, 0x0bcb }, + { 0x0c56, 0x0c48 }, + { 0x0cd5, 0x0cc0 }, + { 0x0cd5, 0x0ccb }, + { 0x0d3e, 0x0d4b }, + { 0x0dca, 0x0ddd }, + { 0x102e, 0x1026 }, + { 0x0304, 0x1e38 }, + { 0x0304, 0x1e39 }, + { 0x0304, 0x1e5c }, + { 0x0304, 0x1e5d }, + { 0x0307, 0x1e68 }, + { 0x0307, 0x1e69 }, + { 0x0302, 0x1ec6 }, + { 0x0302, 0x1ec7 }, + { 0x0302, 0x1ed8 }, + { 0x0302, 0x1ed9 }, + { 0x0345, 0x1f82 }, + { 0x0345, 0x1f83 }, + { 0x0345, 0x1f84 }, + { 0x0345, 0x1f85 }, + { 0x0345, 0x1f86 }, + { 0x0345, 0x1f87 }, + { 0x0345, 0x1f8a }, + { 0x0345, 0x1f8b }, + { 0x0345, 0x1f8c }, + { 0x0345, 0x1f8d }, + { 0x0345, 0x1f8e }, + { 0x0345, 0x1f8f }, + { 0x0345, 0x1f92 }, + { 0x0345, 0x1f93 }, + { 0x0345, 0x1f94 }, + { 0x0345, 0x1f95 }, + { 0x0345, 0x1f96 }, + { 0x0345, 0x1f97 }, + { 0x0345, 0x1f9a }, + { 0x0345, 0x1f9b }, + { 0x0345, 0x1f9c }, + { 0x0345, 0x1f9d }, + { 0x0345, 0x1f9e }, + { 0x0345, 0x1f9f }, + { 0x0345, 0x1fa2 }, + { 0x0345, 0x1fa3 }, + { 0x0345, 0x1fa4 }, + { 0x0345, 0x1fa5 }, + { 0x0345, 0x1fa6 }, + { 0x0345, 0x1fa7 }, + { 0x0345, 0x1faa }, + { 0x0345, 0x1fab }, + { 0x0345, 0x1fac }, + { 0x0345, 0x1fad }, + { 0x0345, 0x1fae }, + { 0x0345, 0x1faf }, + { 0x0345, 0x1fb2 }, + { 0x0345, 0x1fc2 }, + { 0x0345, 0x1ff2 }, + { 0x0345, 0x1fb7 }, + { 0x0345, 0x1fc7 }, + { 0x0345, 0x1ff7 }, + { 0x0338, 0x219a }, + { 0x0338, 0x219b }, + { 0x0338, 0x21ae }, + { 0x0338, 0x21cd }, + { 0x0338, 0x21cf }, + { 0x0338, 0x21ce }, + { 0x0338, 0x2204 }, + { 0x0338, 0x2209 }, + { 0x0338, 0x220c }, + { 0x0338, 0x2224 }, + { 0x0338, 0x2226 }, + { 0x0338, 0x2241 }, + { 0x0338, 0x2244 }, + { 0x0338, 0x2247 }, + { 0x0338, 0x2249 }, + { 0x0338, 0x226d }, + { 0x0338, 0x2262 }, + { 0x0338, 0x2270 }, + { 0x0338, 0x2271 }, + { 0x0338, 0x2274 }, + { 0x0338, 0x2275 }, + { 0x0338, 0x2278 }, + { 0x0338, 0x2279 }, + { 0x0338, 0x2280 }, + { 0x0338, 0x2281 }, + { 0x0338, 0x22e0 }, + { 0x0338, 0x22e1 }, + { 0x0338, 0x2284 }, + { 0x0338, 0x2285 }, + { 0x0338, 0x2288 }, + { 0x0338, 0x2289 }, + { 0x0338, 0x22e2 }, + { 0x0338, 0x22e3 }, + { 0x0338, 0x22ac }, + { 0x0338, 0x22ad }, + { 0x0338, 0x22ae }, + { 0x0338, 0x22af }, + { 0x0338, 0x22ea }, + { 0x0338, 0x22eb }, + { 0x0338, 0x22ec }, + { 0x0338, 0x22ed }, + { 0x3099, 0x3094 }, + { 0x3099, 0x304c }, + { 0x3099, 0x304e }, + { 0x3099, 0x3050 }, + { 0x3099, 0x3052 }, + { 0x3099, 0x3054 }, + { 0x3099, 0x3056 }, + { 0x3099, 0x3058 }, + { 0x3099, 0x305a }, + { 0x3099, 0x305c }, + { 0x3099, 0x305e }, + { 0x3099, 0x3060 }, + { 0x3099, 0x3062 }, + { 0x3099, 0x3065 }, + { 0x3099, 0x3067 }, + { 0x3099, 0x3069 }, + { 0x3099, 0x309e }, + { 0x3099, 0x30f4 }, + { 0x3099, 0x30ac }, + { 0x3099, 0x30ae }, + { 0x3099, 0x30b0 }, + { 0x3099, 0x30b2 }, + { 0x3099, 0x30b4 }, + { 0x3099, 0x30b6 }, + { 0x3099, 0x30b8 }, + { 0x3099, 0x30ba }, + { 0x3099, 0x30bc }, + { 0x3099, 0x30be }, + { 0x3099, 0x30c0 }, + { 0x3099, 0x30c2 }, + { 0x3099, 0x30c5 }, + { 0x3099, 0x30c7 }, + { 0x3099, 0x30c9 }, + { 0x3099, 0x30f7 }, + { 0x3099, 0x30f8 }, + { 0x3099, 0x30f9 }, + { 0x3099, 0x30fa }, + { 0x3099, 0x30fe } +}; +static const unsigned short compose_second_single[][2] = { + { 0x0627, 0x0622 }, + { 0x0627, 0x0623 }, + { 0x0627, 0x0625 }, + { 0x09c7, 0x09cb }, + { 0x09c7, 0x09cc }, + { 0x0b47, 0x0b4b }, + { 0x0b47, 0x0b48 }, + { 0x0b47, 0x0b4c }, + { 0x0bc6, 0x0bca }, + { 0x0bc6, 0x0bcc }, + { 0x0cc6, 0x0cca }, + { 0x0cc6, 0x0cc7 }, + { 0x0cc6, 0x0cc8 }, + { 0x0d46, 0x0d4a }, + { 0x0d46, 0x0d4c }, + { 0x0dd9, 0x0dda }, + { 0x0dd9, 0x0ddc }, + { 0x0dd9, 0x0dde } +}; +static const unsigned short compose_array[146][31] = { + { 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x0100, 0x0102, 0x0226, 0x00c4, 0x1ea2, 0x00c5, 0, 0x01cd, 0x0200, 0x0202, 0, 0, 0, 0x1ea0, 0, 0x1e00, 0, 0, 0x0104, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0x1e02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e04, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e06, 0, 0, 0, 0 }, + { 0, 0x0106, 0x0108, 0, 0, 0, 0x010a, 0, 0, 0, 0, 0x010c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00c7, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0x1e0a, 0, 0, 0, 0, 0x010e, 0, 0, 0, 0, 0, 0x1e0c, 0, 0, 0, 0x1e10, 0, 0x1e12, 0, 0, 0x1e0e, 0, 0, 0, 0 }, + { 0x00c8, 0x00c9, 0x00ca, 0x1ebc, 0x0112, 0x0114, 0x0116, 0x00cb, 0x1eba, 0, 0, 0x011a, 0x0204, 0x0206, 0, 0, 0, 0x1eb8, 0, 0, 0, 0x0228, 0x0118, 0x1e18, 0, 0x1e1a, 0, 0, 0, 0, 0 }, + { 0, 0x01f4, 0x011c, 0, 0x1e20, 0x011e, 0x0120, 0, 0, 0, 0, 0x01e6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0122, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0x0124, 0, 0, 0, 0x1e22, 0x1e26, 0, 0, 0, 0x021e, 0, 0, 0, 0, 0, 0x1e24, 0, 0, 0, 0x1e28, 0, 0, 0x1e2a, 0, 0, 0, 0, 0, 0 }, + { 0x00cc, 0x00cd, 0x00ce, 0x0128, 0x012a, 0x012c, 0x0130, 0x00cf, 0x1ec8, 0, 0, 0x01cf, 0x0208, 0x020a, 0, 0, 0, 0x1eca, 0, 0, 0, 0, 0x012e, 0, 0, 0x1e2c, 0, 0, 0, 0, 0 }, + { 0, 0x1e30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01e8, 0, 0, 0, 0, 0, 0x1e32, 0, 0, 0, 0x0136, 0, 0, 0, 0, 0x1e34, 0, 0, 0, 0 }, + { 0, 0x0139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x013d, 0, 0, 0, 0, 0, 0x1e36, 0, 0, 0, 0x013b, 0, 0x1e3c, 0, 0, 0x1e3a, 0, 0, 0, 0 }, + { 0, 0x1e3e, 0, 0, 0, 0, 0x1e40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x01f8, 0x0143, 0, 0x00d1, 0, 0, 0x1e44, 0, 0, 0, 0, 0x0147, 0, 0, 0, 0, 0, 0x1e46, 0, 0, 0, 0x0145, 0, 0x1e4a, 0, 0, 0x1e48, 0, 0, 0, 0 }, + { 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x014c, 0x014e, 0x022e, 0x00d6, 0x1ece, 0, 0x0150, 0x01d1, 0x020c, 0x020e, 0, 0, 0x01a0, 0x1ecc, 0, 0, 0, 0, 0x01ea, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0x1e54, 0, 0, 0, 0, 0x1e56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0x0154, 0, 0, 0, 0, 0x1e58, 0, 0, 0, 0, 0x0158, 0x0210, 0x0212, 0, 0, 0, 0x1e5a, 0, 0, 0, 0x0156, 0, 0, 0, 0, 0x1e5e, 0, 0, 0, 0 }, + { 0, 0x015a, 0x015c, 0, 0, 0, 0x1e60, 0, 0, 0, 0, 0x0160, 0, 0, 0, 0, 0, 0x1e62, 0, 0, 0x0218, 0x015e, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0x1e6a, 0, 0, 0, 0, 0x0164, 0, 0, 0, 0, 0, 0x1e6c, 0, 0, 0x021a, 0x0162, 0, 0x1e70, 0, 0, 0x1e6e, 0, 0, 0, 0 }, + { 0x00d9, 0x00da, 0x00db, 0x0168, 0x016a, 0x016c, 0, 0x00dc, 0x1ee6, 0x016e, 0x0170, 0x01d3, 0x0214, 0x0216, 0, 0, 0x01af, 0x1ee4, 0x1e72, 0, 0, 0, 0x0172, 0x1e76, 0, 0x1e74, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0x1e7c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e7e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1e80, 0x1e82, 0x0174, 0, 0, 0, 0x1e86, 0x1e84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0x1e8a, 0x1e8c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1ef2, 0x00dd, 0x0176, 0x1ef8, 0x0232, 0, 0x1e8e, 0x0178, 0x1ef6, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ef4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0x0179, 0x1e90, 0, 0, 0, 0x017b, 0, 0, 0, 0, 0x017d, 0, 0, 0, 0, 0, 0x1e92, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e94, 0, 0, 0, 0 }, + { 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x0101, 0x0103, 0x0227, 0x00e4, 0x1ea3, 0x00e5, 0, 0x01ce, 0x0201, 0x0203, 0, 0, 0, 0x1ea1, 0, 0x1e01, 0, 0, 0x0105, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0x1e03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e05, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e07, 0, 0, 0, 0 }, + { 0, 0x0107, 0x0109, 0, 0, 0, 0x010b, 0, 0, 0, 0, 0x010d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00e7, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0x1e0b, 0, 0, 0, 0, 0x010f, 0, 0, 0, 0, 0, 0x1e0d, 0, 0, 0, 0x1e11, 0, 0x1e13, 0, 0, 0x1e0f, 0, 0, 0, 0 }, + { 0x00e8, 0x00e9, 0x00ea, 0x1ebd, 0x0113, 0x0115, 0x0117, 0x00eb, 0x1ebb, 0, 0, 0x011b, 0x0205, 0x0207, 0, 0, 0, 0x1eb9, 0, 0, 0, 0x0229, 0x0119, 0x1e19, 0, 0x1e1b, 0, 0, 0, 0, 0 }, + { 0, 0x01f5, 0x011d, 0, 0x1e21, 0x011f, 0x0121, 0, 0, 0, 0, 0x01e7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0123, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0x0125, 0, 0, 0, 0x1e23, 0x1e27, 0, 0, 0, 0x021f, 0, 0, 0, 0, 0, 0x1e25, 0, 0, 0, 0x1e29, 0, 0, 0x1e2b, 0, 0x1e96, 0, 0, 0, 0 }, + { 0x00ec, 0x00ed, 0x00ee, 0x0129, 0x012b, 0x012d, 0, 0x00ef, 0x1ec9, 0, 0, 0x01d0, 0x0209, 0x020b, 0, 0, 0, 0x1ecb, 0, 0, 0, 0, 0x012f, 0, 0, 0x1e2d, 0, 0, 0, 0, 0 }, + { 0, 0, 0x0135, 0, 0, 0, 0, 0, 0, 0, 0, 0x01f0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0x1e31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01e9, 0, 0, 0, 0, 0, 0x1e33, 0, 0, 0, 0x0137, 0, 0, 0, 0, 0x1e35, 0, 0, 0, 0 }, + { 0, 0x013a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x013e, 0, 0, 0, 0, 0, 0x1e37, 0, 0, 0, 0x013c, 0, 0x1e3d, 0, 0, 0x1e3b, 0, 0, 0, 0 }, + { 0, 0x1e3f, 0, 0, 0, 0, 0x1e41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x01f9, 0x0144, 0, 0x00f1, 0, 0, 0x1e45, 0, 0, 0, 0, 0x0148, 0, 0, 0, 0, 0, 0x1e47, 0, 0, 0, 0x0146, 0, 0x1e4b, 0, 0, 0x1e49, 0, 0, 0, 0 }, + { 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x014d, 0x014f, 0x022f, 0x00f6, 0x1ecf, 0, 0x0151, 0x01d2, 0x020d, 0x020f, 0, 0, 0x01a1, 0x1ecd, 0, 0, 0, 0, 0x01eb, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0x1e55, 0, 0, 0, 0, 0x1e57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0x0155, 0, 0, 0, 0, 0x1e59, 0, 0, 0, 0, 0x0159, 0x0211, 0x0213, 0, 0, 0, 0x1e5b, 0, 0, 0, 0x0157, 0, 0, 0, 0, 0x1e5f, 0, 0, 0, 0 }, + { 0, 0x015b, 0x015d, 0, 0, 0, 0x1e61, 0, 0, 0, 0, 0x0161, 0, 0, 0, 0, 0, 0x1e63, 0, 0, 0x0219, 0x015f, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0x1e6b, 0x1e97, 0, 0, 0, 0x0165, 0, 0, 0, 0, 0, 0x1e6d, 0, 0, 0x021b, 0x0163, 0, 0x1e71, 0, 0, 0x1e6f, 0, 0, 0, 0 }, + { 0x00f9, 0x00fa, 0x00fb, 0x0169, 0x016b, 0x016d, 0, 0x00fc, 0x1ee7, 0x016f, 0x0171, 0x01d4, 0x0215, 0x0217, 0, 0, 0x01b0, 0x1ee5, 0x1e73, 0, 0, 0, 0x0173, 0x1e77, 0, 0x1e75, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0x1e7d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e7f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1e81, 0x1e83, 0x0175, 0, 0, 0, 0x1e87, 0x1e85, 0, 0x1e98, 0, 0, 0, 0, 0, 0, 0, 0x1e89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0x1e8b, 0x1e8d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1ef3, 0x00fd, 0x0177, 0x1ef9, 0x0233, 0, 0x1e8f, 0x00ff, 0x1ef7, 0x1e99, 0, 0, 0, 0, 0, 0, 0, 0x1ef5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0x017a, 0x1e91, 0, 0, 0, 0x017c, 0, 0, 0, 0, 0x017e, 0, 0, 0, 0, 0, 0x1e93, 0, 0, 0, 0, 0, 0, 0, 0, 0x1e95, 0, 0, 0, 0 }, + { 0x1fed, 0x0385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fc1, 0, 0, 0 }, + { 0x1ea6, 0x1ea4, 0, 0x1eaa, 0, 0, 0, 0, 0x1ea8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0x01fc, 0, 0, 0x01e2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1ec0, 0x1ebe, 0, 0x1ec4, 0, 0, 0, 0, 0x1ec2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1ed2, 0x1ed0, 0, 0x1ed6, 0, 0, 0, 0, 0x1ed4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0x1e4c, 0, 0, 0x022c, 0, 0, 0x1e4e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x01db, 0x01d7, 0, 0, 0x01d5, 0, 0, 0, 0, 0, 0, 0x01d9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1ea7, 0x1ea5, 0, 0x1eab, 0, 0, 0, 0, 0x1ea9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0x01fd, 0, 0, 0x01e3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1ec1, 0x1ebf, 0, 0x1ec5, 0, 0, 0, 0, 0x1ec3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1ed3, 0x1ed1, 0, 0x1ed7, 0, 0, 0, 0, 0x1ed5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0x1e4d, 0, 0, 0x022d, 0, 0, 0x1e4f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x01dc, 0x01d8, 0, 0, 0x01d6, 0, 0, 0, 0, 0, 0, 0x01da, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1eb0, 0x1eae, 0, 0x1eb4, 0, 0, 0, 0, 0x1eb2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1eb1, 0x1eaf, 0, 0x1eb5, 0, 0, 0, 0, 0x1eb3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1e14, 0x1e16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1e15, 0x1e17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1e50, 0x1e52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1e51, 0x1e53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1edc, 0x1eda, 0, 0x1ee0, 0, 0, 0, 0, 0x1ede, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ee2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1edd, 0x1edb, 0, 0x1ee1, 0, 0, 0, 0, 0x1edf, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ee3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1eea, 0x1ee8, 0, 0x1eee, 0, 0, 0, 0, 0x1eec, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ef0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1eeb, 0x1ee9, 0, 0x1eef, 0, 0, 0, 0, 0x1eed, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ef1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1fba, 0x0386, 0, 0, 0x1fb9, 0x1fb8, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f08, 0x1f09, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fbc, 0, 0 }, + { 0x1fc8, 0x0388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f18, 0x1f19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1fca, 0x0389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f28, 0x1f29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fcc, 0, 0 }, + { 0x1fda, 0x038a, 0, 0, 0x1fd9, 0x1fd8, 0, 0x03aa, 0, 0, 0, 0, 0, 0, 0x1f38, 0x1f39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1ff8, 0x038c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f48, 0x1f49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1fea, 0x038e, 0, 0, 0x1fe9, 0x1fe8, 0, 0x03ab, 0, 0, 0, 0, 0, 0, 0, 0x1f59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1ffa, 0x038f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f68, 0x1f69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ffc, 0, 0 }, + { 0x1f70, 0x03ac, 0, 0, 0x1fb1, 0x1fb0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f00, 0x1f01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fb6, 0x1fb3, 0, 0 }, + { 0x1f72, 0x03ad, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f10, 0x1f11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1f74, 0x03ae, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f20, 0x1f21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fc6, 0x1fc3, 0, 0 }, + { 0x1f76, 0x03af, 0, 0, 0x1fd1, 0x1fd0, 0, 0x03ca, 0, 0, 0, 0, 0, 0, 0x1f30, 0x1f31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fd6, 0, 0, 0 }, + { 0x1f78, 0x03cc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f40, 0x1f41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fe4, 0x1fe5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1f7a, 0x03cd, 0, 0, 0x1fe1, 0x1fe0, 0, 0x03cb, 0, 0, 0, 0, 0, 0, 0x1f50, 0x1f51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fe6, 0, 0, 0 }, + { 0x1f7c, 0x03ce, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f60, 0x1f61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1ff6, 0x1ff3, 0, 0 }, + { 0x1fd2, 0x0390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fd7, 0, 0, 0 }, + { 0x1fe2, 0x03b0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fe7, 0, 0, 0 }, + { 0, 0x03d3, 0, 0, 0, 0, 0, 0x03d4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0x04d0, 0, 0x04d2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x0400, 0, 0, 0, 0, 0x04d6, 0, 0x0401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0x04c1, 0, 0x04dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x040d, 0, 0, 0, 0x04e2, 0x0419, 0, 0x04e4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0x04ee, 0x040e, 0, 0x04f0, 0, 0, 0x04f2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0x04d1, 0, 0x04d3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x0450, 0, 0, 0, 0, 0x04d7, 0, 0x0451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0x04c2, 0, 0x04dd, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x045d, 0, 0, 0, 0x04e3, 0x0439, 0, 0x04e5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0x04ef, 0x045e, 0, 0x04f1, 0, 0, 0x04f3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0x1eac, 0, 0, 0x1eb6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0x1ead, 0, 0, 0x1eb7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1f02, 0x1f04, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f06, 0x1f80, 0, 0 }, + { 0x1f03, 0x1f05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f07, 0x1f81, 0, 0 }, + { 0x1f0a, 0x1f0c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f0e, 0x1f88, 0, 0 }, + { 0x1f0b, 0x1f0d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f0f, 0x1f89, 0, 0 }, + { 0x1f12, 0x1f14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1f13, 0x1f15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1f1a, 0x1f1c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1f1b, 0x1f1d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1f22, 0x1f24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f26, 0x1f90, 0, 0 }, + { 0x1f23, 0x1f25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f27, 0x1f91, 0, 0 }, + { 0x1f2a, 0x1f2c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f2e, 0x1f98, 0, 0 }, + { 0x1f2b, 0x1f2d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f2f, 0x1f99, 0, 0 }, + { 0x1f32, 0x1f34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f36, 0, 0, 0 }, + { 0x1f33, 0x1f35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f37, 0, 0, 0 }, + { 0x1f3a, 0x1f3c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f3e, 0, 0, 0 }, + { 0x1f3b, 0x1f3d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f3f, 0, 0, 0 }, + { 0x1f42, 0x1f44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1f43, 0x1f45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1f4a, 0x1f4c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1f4b, 0x1f4d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0x1f52, 0x1f54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f56, 0, 0, 0 }, + { 0x1f53, 0x1f55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f57, 0, 0, 0 }, + { 0x1f5b, 0x1f5d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f5f, 0, 0, 0 }, + { 0x1f62, 0x1f64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f66, 0x1fa0, 0, 0 }, + { 0x1f63, 0x1f65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f67, 0x1fa1, 0, 0 }, + { 0x1f6a, 0x1f6c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f6e, 0x1fa8, 0, 0 }, + { 0x1f6b, 0x1f6d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1f6f, 0x1fa9, 0, 0 }, + { 0x1fcd, 0x1fce, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fcf, 0, 0, 0 }, + { 0x1fdd, 0x1fde, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1fdf, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3070, 0x3071 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3073, 0x3074 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3076, 0x3077 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3079, 0x307a }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x307c, 0x307d }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30d0, 0x30d1 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30d3, 0x30d4 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30d6, 0x30d7 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30d9, 0x30da }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x30dc, 0x30dd } +}; diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeDecompTables.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeDecompTables.h new file mode 100644 index 00000000000..4bc34b18d99 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeDecompTables.h @@ -0,0 +1,8526 @@ +// Generated by gen-unicode-tables.py + +typedef struct { + Unicode character; + int length; + int offset; +} decomposition; + +#define DECOMP_TABLE_LENGTH 5143 + +static const decomposition decomp_table[] = { + { 0xa0, 1, 0 }, + { 0xa8, 2, 1 }, + { 0xaa, 1, 3 }, + { 0xaf, 2, 4 }, + { 0xb2, 1, 6 }, + { 0xb3, 1, 7 }, + { 0xb4, 2, 8 }, + { 0xb5, 1, 10 }, + { 0xb8, 2, 11 }, + { 0xb9, 1, 13 }, + { 0xba, 1, 14 }, + { 0xbc, 3, 15 }, + { 0xbd, 3, 18 }, + { 0xbe, 3, 21 }, + { 0xc0, 2, 24 }, + { 0xc1, 2, 26 }, + { 0xc2, 2, 28 }, + { 0xc3, 2, 30 }, + { 0xc4, 2, 32 }, + { 0xc5, 2, 34 }, + { 0xc7, 2, 36 }, + { 0xc8, 2, 38 }, + { 0xc9, 2, 40 }, + { 0xca, 2, 42 }, + { 0xcb, 2, 44 }, + { 0xcc, 2, 46 }, + { 0xcd, 2, 48 }, + { 0xce, 2, 50 }, + { 0xcf, 2, 52 }, + { 0xd1, 2, 54 }, + { 0xd2, 2, 56 }, + { 0xd3, 2, 58 }, + { 0xd4, 2, 60 }, + { 0xd5, 2, 62 }, + { 0xd6, 2, 64 }, + { 0xd9, 2, 66 }, + { 0xda, 2, 68 }, + { 0xdb, 2, 70 }, + { 0xdc, 2, 72 }, + { 0xdd, 2, 74 }, + { 0xe0, 2, 76 }, + { 0xe1, 2, 78 }, + { 0xe2, 2, 80 }, + { 0xe3, 2, 82 }, + { 0xe4, 2, 84 }, + { 0xe5, 2, 86 }, + { 0xe7, 2, 88 }, + { 0xe8, 2, 90 }, + { 0xe9, 2, 92 }, + { 0xea, 2, 94 }, + { 0xeb, 2, 96 }, + { 0xec, 2, 98 }, + { 0xed, 2, 100 }, + { 0xee, 2, 102 }, + { 0xef, 2, 104 }, + { 0xf1, 2, 106 }, + { 0xf2, 2, 108 }, + { 0xf3, 2, 110 }, + { 0xf4, 2, 112 }, + { 0xf5, 2, 114 }, + { 0xf6, 2, 116 }, + { 0xf9, 2, 118 }, + { 0xfa, 2, 120 }, + { 0xfb, 2, 122 }, + { 0xfc, 2, 124 }, + { 0xfd, 2, 126 }, + { 0xff, 2, 128 }, + { 0x100, 2, 130 }, + { 0x101, 2, 132 }, + { 0x102, 2, 134 }, + { 0x103, 2, 136 }, + { 0x104, 2, 138 }, + { 0x105, 2, 140 }, + { 0x106, 2, 142 }, + { 0x107, 2, 144 }, + { 0x108, 2, 146 }, + { 0x109, 2, 148 }, + { 0x10a, 2, 150 }, + { 0x10b, 2, 152 }, + { 0x10c, 2, 154 }, + { 0x10d, 2, 156 }, + { 0x10e, 2, 158 }, + { 0x10f, 2, 160 }, + { 0x112, 2, 162 }, + { 0x113, 2, 164 }, + { 0x114, 2, 166 }, + { 0x115, 2, 168 }, + { 0x116, 2, 170 }, + { 0x117, 2, 172 }, + { 0x118, 2, 174 }, + { 0x119, 2, 176 }, + { 0x11a, 2, 178 }, + { 0x11b, 2, 180 }, + { 0x11c, 2, 182 }, + { 0x11d, 2, 184 }, + { 0x11e, 2, 186 }, + { 0x11f, 2, 188 }, + { 0x120, 2, 190 }, + { 0x121, 2, 192 }, + { 0x122, 2, 194 }, + { 0x123, 2, 196 }, + { 0x124, 2, 198 }, + { 0x125, 2, 200 }, + { 0x128, 2, 202 }, + { 0x129, 2, 204 }, + { 0x12a, 2, 206 }, + { 0x12b, 2, 208 }, + { 0x12c, 2, 210 }, + { 0x12d, 2, 212 }, + { 0x12e, 2, 214 }, + { 0x12f, 2, 216 }, + { 0x130, 2, 218 }, + { 0x132, 2, 220 }, + { 0x133, 2, 222 }, + { 0x134, 2, 224 }, + { 0x135, 2, 226 }, + { 0x136, 2, 228 }, + { 0x137, 2, 230 }, + { 0x139, 2, 232 }, + { 0x13a, 2, 234 }, + { 0x13b, 2, 236 }, + { 0x13c, 2, 238 }, + { 0x13d, 2, 240 }, + { 0x13e, 2, 242 }, + { 0x13f, 2, 244 }, + { 0x140, 2, 246 }, + { 0x143, 2, 248 }, + { 0x144, 2, 250 }, + { 0x145, 2, 252 }, + { 0x146, 2, 254 }, + { 0x147, 2, 256 }, + { 0x148, 2, 258 }, + { 0x149, 2, 260 }, + { 0x14c, 2, 262 }, + { 0x14d, 2, 264 }, + { 0x14e, 2, 266 }, + { 0x14f, 2, 268 }, + { 0x150, 2, 270 }, + { 0x151, 2, 272 }, + { 0x154, 2, 274 }, + { 0x155, 2, 276 }, + { 0x156, 2, 278 }, + { 0x157, 2, 280 }, + { 0x158, 2, 282 }, + { 0x159, 2, 284 }, + { 0x15a, 2, 286 }, + { 0x15b, 2, 288 }, + { 0x15c, 2, 290 }, + { 0x15d, 2, 292 }, + { 0x15e, 2, 294 }, + { 0x15f, 2, 296 }, + { 0x160, 2, 298 }, + { 0x161, 2, 300 }, + { 0x162, 2, 302 }, + { 0x163, 2, 304 }, + { 0x164, 2, 306 }, + { 0x165, 2, 308 }, + { 0x168, 2, 310 }, + { 0x169, 2, 312 }, + { 0x16a, 2, 314 }, + { 0x16b, 2, 316 }, + { 0x16c, 2, 318 }, + { 0x16d, 2, 320 }, + { 0x16e, 2, 322 }, + { 0x16f, 2, 324 }, + { 0x170, 2, 326 }, + { 0x171, 2, 328 }, + { 0x172, 2, 330 }, + { 0x173, 2, 332 }, + { 0x174, 2, 334 }, + { 0x175, 2, 336 }, + { 0x176, 2, 338 }, + { 0x177, 2, 340 }, + { 0x178, 2, 342 }, + { 0x179, 2, 344 }, + { 0x17a, 2, 346 }, + { 0x17b, 2, 348 }, + { 0x17c, 2, 350 }, + { 0x17d, 2, 352 }, + { 0x17e, 2, 354 }, + { 0x17f, 1, 356 }, + { 0x1a0, 2, 357 }, + { 0x1a1, 2, 359 }, + { 0x1af, 2, 361 }, + { 0x1b0, 2, 363 }, + { 0x1c4, 3, 365 }, + { 0x1c5, 3, 368 }, + { 0x1c6, 3, 371 }, + { 0x1c7, 2, 374 }, + { 0x1c8, 2, 376 }, + { 0x1c9, 2, 378 }, + { 0x1ca, 2, 380 }, + { 0x1cb, 2, 382 }, + { 0x1cc, 2, 384 }, + { 0x1cd, 2, 386 }, + { 0x1ce, 2, 388 }, + { 0x1cf, 2, 390 }, + { 0x1d0, 2, 392 }, + { 0x1d1, 2, 394 }, + { 0x1d2, 2, 396 }, + { 0x1d3, 2, 398 }, + { 0x1d4, 2, 400 }, + { 0x1d5, 3, 402 }, + { 0x1d6, 3, 405 }, + { 0x1d7, 3, 408 }, + { 0x1d8, 3, 411 }, + { 0x1d9, 3, 414 }, + { 0x1da, 3, 417 }, + { 0x1db, 3, 420 }, + { 0x1dc, 3, 423 }, + { 0x1de, 3, 426 }, + { 0x1df, 3, 429 }, + { 0x1e0, 3, 432 }, + { 0x1e1, 3, 435 }, + { 0x1e2, 2, 438 }, + { 0x1e3, 2, 440 }, + { 0x1e6, 2, 442 }, + { 0x1e7, 2, 444 }, + { 0x1e8, 2, 446 }, + { 0x1e9, 2, 448 }, + { 0x1ea, 2, 450 }, + { 0x1eb, 2, 452 }, + { 0x1ec, 3, 454 }, + { 0x1ed, 3, 457 }, + { 0x1ee, 2, 460 }, + { 0x1ef, 2, 462 }, + { 0x1f0, 2, 464 }, + { 0x1f1, 2, 466 }, + { 0x1f2, 2, 468 }, + { 0x1f3, 2, 470 }, + { 0x1f4, 2, 472 }, + { 0x1f5, 2, 474 }, + { 0x1f8, 2, 476 }, + { 0x1f9, 2, 478 }, + { 0x1fa, 3, 480 }, + { 0x1fb, 3, 483 }, + { 0x1fc, 2, 486 }, + { 0x1fd, 2, 488 }, + { 0x1fe, 2, 490 }, + { 0x1ff, 2, 492 }, + { 0x200, 2, 494 }, + { 0x201, 2, 496 }, + { 0x202, 2, 498 }, + { 0x203, 2, 500 }, + { 0x204, 2, 502 }, + { 0x205, 2, 504 }, + { 0x206, 2, 506 }, + { 0x207, 2, 508 }, + { 0x208, 2, 510 }, + { 0x209, 2, 512 }, + { 0x20a, 2, 514 }, + { 0x20b, 2, 516 }, + { 0x20c, 2, 518 }, + { 0x20d, 2, 520 }, + { 0x20e, 2, 522 }, + { 0x20f, 2, 524 }, + { 0x210, 2, 526 }, + { 0x211, 2, 528 }, + { 0x212, 2, 530 }, + { 0x213, 2, 532 }, + { 0x214, 2, 534 }, + { 0x215, 2, 536 }, + { 0x216, 2, 538 }, + { 0x217, 2, 540 }, + { 0x218, 2, 542 }, + { 0x219, 2, 544 }, + { 0x21a, 2, 546 }, + { 0x21b, 2, 548 }, + { 0x21e, 2, 550 }, + { 0x21f, 2, 552 }, + { 0x226, 2, 554 }, + { 0x227, 2, 556 }, + { 0x228, 2, 558 }, + { 0x229, 2, 560 }, + { 0x22a, 3, 562 }, + { 0x22b, 3, 565 }, + { 0x22c, 3, 568 }, + { 0x22d, 3, 571 }, + { 0x22e, 2, 574 }, + { 0x22f, 2, 576 }, + { 0x230, 3, 578 }, + { 0x231, 3, 581 }, + { 0x232, 2, 584 }, + { 0x233, 2, 586 }, + { 0x2b0, 1, 588 }, + { 0x2b1, 1, 589 }, + { 0x2b2, 1, 590 }, + { 0x2b3, 1, 591 }, + { 0x2b4, 1, 592 }, + { 0x2b5, 1, 593 }, + { 0x2b6, 1, 594 }, + { 0x2b7, 1, 595 }, + { 0x2b8, 1, 596 }, + { 0x2d8, 2, 597 }, + { 0x2d9, 2, 599 }, + { 0x2da, 2, 601 }, + { 0x2db, 2, 603 }, + { 0x2dc, 2, 605 }, + { 0x2dd, 2, 607 }, + { 0x2e0, 1, 609 }, + { 0x2e1, 1, 610 }, + { 0x2e2, 1, 356 }, + { 0x2e3, 1, 611 }, + { 0x2e4, 1, 612 }, + { 0x340, 1, 613 }, + { 0x341, 1, 614 }, + { 0x343, 1, 615 }, + { 0x344, 2, 616 }, + { 0x374, 1, 618 }, + { 0x37a, 2, 619 }, + { 0x37e, 1, 621 }, + { 0x384, 2, 8 }, + { 0x385, 3, 622 }, + { 0x386, 2, 625 }, + { 0x387, 1, 627 }, + { 0x388, 2, 628 }, + { 0x389, 2, 630 }, + { 0x38a, 2, 632 }, + { 0x38c, 2, 634 }, + { 0x38e, 2, 636 }, + { 0x38f, 2, 638 }, + { 0x390, 3, 640 }, + { 0x3aa, 2, 643 }, + { 0x3ab, 2, 645 }, + { 0x3ac, 2, 647 }, + { 0x3ad, 2, 649 }, + { 0x3ae, 2, 651 }, + { 0x3af, 2, 653 }, + { 0x3b0, 3, 655 }, + { 0x3ca, 2, 658 }, + { 0x3cb, 2, 660 }, + { 0x3cc, 2, 662 }, + { 0x3cd, 2, 664 }, + { 0x3ce, 2, 666 }, + { 0x3d0, 1, 668 }, + { 0x3d1, 1, 669 }, + { 0x3d2, 1, 670 }, + { 0x3d3, 2, 636 }, + { 0x3d4, 2, 645 }, + { 0x3d5, 1, 671 }, + { 0x3d6, 1, 672 }, + { 0x3f0, 1, 673 }, + { 0x3f1, 1, 674 }, + { 0x3f2, 1, 675 }, + { 0x3f4, 1, 676 }, + { 0x3f5, 1, 677 }, + { 0x400, 2, 678 }, + { 0x401, 2, 680 }, + { 0x403, 2, 682 }, + { 0x407, 2, 684 }, + { 0x40c, 2, 686 }, + { 0x40d, 2, 688 }, + { 0x40e, 2, 690 }, + { 0x419, 2, 692 }, + { 0x439, 2, 694 }, + { 0x450, 2, 696 }, + { 0x451, 2, 698 }, + { 0x453, 2, 700 }, + { 0x457, 2, 702 }, + { 0x45c, 2, 704 }, + { 0x45d, 2, 706 }, + { 0x45e, 2, 708 }, + { 0x476, 2, 710 }, + { 0x477, 2, 712 }, + { 0x4c1, 2, 714 }, + { 0x4c2, 2, 716 }, + { 0x4d0, 2, 718 }, + { 0x4d1, 2, 720 }, + { 0x4d2, 2, 722 }, + { 0x4d3, 2, 724 }, + { 0x4d6, 2, 726 }, + { 0x4d7, 2, 728 }, + { 0x4da, 2, 730 }, + { 0x4db, 2, 732 }, + { 0x4dc, 2, 734 }, + { 0x4dd, 2, 736 }, + { 0x4de, 2, 738 }, + { 0x4df, 2, 740 }, + { 0x4e2, 2, 742 }, + { 0x4e3, 2, 744 }, + { 0x4e4, 2, 746 }, + { 0x4e5, 2, 748 }, + { 0x4e6, 2, 750 }, + { 0x4e7, 2, 752 }, + { 0x4ea, 2, 754 }, + { 0x4eb, 2, 756 }, + { 0x4ec, 2, 758 }, + { 0x4ed, 2, 760 }, + { 0x4ee, 2, 762 }, + { 0x4ef, 2, 764 }, + { 0x4f0, 2, 766 }, + { 0x4f1, 2, 768 }, + { 0x4f2, 2, 770 }, + { 0x4f3, 2, 772 }, + { 0x4f4, 2, 774 }, + { 0x4f5, 2, 776 }, + { 0x4f8, 2, 778 }, + { 0x4f9, 2, 780 }, + { 0x587, 2, 782 }, + { 0x622, 2, 784 }, + { 0x623, 2, 786 }, + { 0x624, 2, 788 }, + { 0x625, 2, 790 }, + { 0x626, 2, 792 }, + { 0x675, 2, 794 }, + { 0x676, 2, 796 }, + { 0x677, 2, 798 }, + { 0x678, 2, 800 }, + { 0x6c0, 2, 802 }, + { 0x6c2, 2, 804 }, + { 0x6d3, 2, 806 }, + { 0x929, 2, 808 }, + { 0x931, 2, 810 }, + { 0x934, 2, 812 }, + { 0x958, 2, 814 }, + { 0x959, 2, 816 }, + { 0x95a, 2, 818 }, + { 0x95b, 2, 820 }, + { 0x95c, 2, 822 }, + { 0x95d, 2, 824 }, + { 0x95e, 2, 826 }, + { 0x95f, 2, 828 }, + { 0x9cb, 2, 830 }, + { 0x9cc, 2, 832 }, + { 0x9dc, 2, 834 }, + { 0x9dd, 2, 836 }, + { 0x9df, 2, 838 }, + { 0xa33, 2, 840 }, + { 0xa36, 2, 842 }, + { 0xa59, 2, 844 }, + { 0xa5a, 2, 846 }, + { 0xa5b, 2, 848 }, + { 0xa5e, 2, 850 }, + { 0xb48, 2, 852 }, + { 0xb4b, 2, 854 }, + { 0xb4c, 2, 856 }, + { 0xb5c, 2, 858 }, + { 0xb5d, 2, 860 }, + { 0xb94, 2, 862 }, + { 0xbca, 2, 864 }, + { 0xbcb, 2, 866 }, + { 0xbcc, 2, 868 }, + { 0xc48, 2, 870 }, + { 0xcc0, 2, 872 }, + { 0xcc7, 2, 874 }, + { 0xcc8, 2, 876 }, + { 0xcca, 2, 878 }, + { 0xccb, 3, 880 }, + { 0xd4a, 2, 883 }, + { 0xd4b, 2, 885 }, + { 0xd4c, 2, 887 }, + { 0xdda, 2, 889 }, + { 0xddc, 2, 891 }, + { 0xddd, 3, 893 }, + { 0xdde, 2, 896 }, + { 0xe33, 2, 898 }, + { 0xeb3, 2, 900 }, + { 0xedc, 2, 902 }, + { 0xedd, 2, 904 }, + { 0xf0c, 1, 906 }, + { 0xf43, 2, 907 }, + { 0xf4d, 2, 909 }, + { 0xf52, 2, 911 }, + { 0xf57, 2, 913 }, + { 0xf5c, 2, 915 }, + { 0xf69, 2, 917 }, + { 0xf73, 2, 919 }, + { 0xf75, 2, 921 }, + { 0xf76, 2, 923 }, + { 0xf77, 3, 925 }, + { 0xf78, 2, 928 }, + { 0xf79, 3, 930 }, + { 0xf81, 2, 933 }, + { 0xf93, 2, 935 }, + { 0xf9d, 2, 937 }, + { 0xfa2, 2, 939 }, + { 0xfa7, 2, 941 }, + { 0xfac, 2, 943 }, + { 0xfb9, 2, 945 }, + { 0x1026, 2, 947 }, + { 0x1e00, 2, 949 }, + { 0x1e01, 2, 951 }, + { 0x1e02, 2, 953 }, + { 0x1e03, 2, 955 }, + { 0x1e04, 2, 957 }, + { 0x1e05, 2, 959 }, + { 0x1e06, 2, 961 }, + { 0x1e07, 2, 963 }, + { 0x1e08, 3, 965 }, + { 0x1e09, 3, 968 }, + { 0x1e0a, 2, 971 }, + { 0x1e0b, 2, 973 }, + { 0x1e0c, 2, 975 }, + { 0x1e0d, 2, 977 }, + { 0x1e0e, 2, 979 }, + { 0x1e0f, 2, 981 }, + { 0x1e10, 2, 983 }, + { 0x1e11, 2, 985 }, + { 0x1e12, 2, 987 }, + { 0x1e13, 2, 989 }, + { 0x1e14, 3, 991 }, + { 0x1e15, 3, 994 }, + { 0x1e16, 3, 997 }, + { 0x1e17, 3, 1000 }, + { 0x1e18, 2, 1003 }, + { 0x1e19, 2, 1005 }, + { 0x1e1a, 2, 1007 }, + { 0x1e1b, 2, 1009 }, + { 0x1e1c, 3, 1011 }, + { 0x1e1d, 3, 1014 }, + { 0x1e1e, 2, 1017 }, + { 0x1e1f, 2, 1019 }, + { 0x1e20, 2, 1021 }, + { 0x1e21, 2, 1023 }, + { 0x1e22, 2, 1025 }, + { 0x1e23, 2, 1027 }, + { 0x1e24, 2, 1029 }, + { 0x1e25, 2, 1031 }, + { 0x1e26, 2, 1033 }, + { 0x1e27, 2, 1035 }, + { 0x1e28, 2, 1037 }, + { 0x1e29, 2, 1039 }, + { 0x1e2a, 2, 1041 }, + { 0x1e2b, 2, 1043 }, + { 0x1e2c, 2, 1045 }, + { 0x1e2d, 2, 1047 }, + { 0x1e2e, 3, 1049 }, + { 0x1e2f, 3, 1052 }, + { 0x1e30, 2, 1055 }, + { 0x1e31, 2, 1057 }, + { 0x1e32, 2, 1059 }, + { 0x1e33, 2, 1061 }, + { 0x1e34, 2, 1063 }, + { 0x1e35, 2, 1065 }, + { 0x1e36, 2, 1067 }, + { 0x1e37, 2, 1069 }, + { 0x1e38, 3, 1071 }, + { 0x1e39, 3, 1074 }, + { 0x1e3a, 2, 1077 }, + { 0x1e3b, 2, 1079 }, + { 0x1e3c, 2, 1081 }, + { 0x1e3d, 2, 1083 }, + { 0x1e3e, 2, 1085 }, + { 0x1e3f, 2, 1087 }, + { 0x1e40, 2, 1089 }, + { 0x1e41, 2, 1091 }, + { 0x1e42, 2, 1093 }, + { 0x1e43, 2, 1095 }, + { 0x1e44, 2, 1097 }, + { 0x1e45, 2, 1099 }, + { 0x1e46, 2, 1101 }, + { 0x1e47, 2, 1103 }, + { 0x1e48, 2, 1105 }, + { 0x1e49, 2, 1107 }, + { 0x1e4a, 2, 1109 }, + { 0x1e4b, 2, 1111 }, + { 0x1e4c, 3, 1113 }, + { 0x1e4d, 3, 1116 }, + { 0x1e4e, 3, 1119 }, + { 0x1e4f, 3, 1122 }, + { 0x1e50, 3, 1125 }, + { 0x1e51, 3, 1128 }, + { 0x1e52, 3, 1131 }, + { 0x1e53, 3, 1134 }, + { 0x1e54, 2, 1137 }, + { 0x1e55, 2, 1139 }, + { 0x1e56, 2, 1141 }, + { 0x1e57, 2, 1143 }, + { 0x1e58, 2, 1145 }, + { 0x1e59, 2, 1147 }, + { 0x1e5a, 2, 1149 }, + { 0x1e5b, 2, 1151 }, + { 0x1e5c, 3, 1153 }, + { 0x1e5d, 3, 1156 }, + { 0x1e5e, 2, 1159 }, + { 0x1e5f, 2, 1161 }, + { 0x1e60, 2, 1163 }, + { 0x1e61, 2, 1165 }, + { 0x1e62, 2, 1167 }, + { 0x1e63, 2, 1169 }, + { 0x1e64, 3, 1171 }, + { 0x1e65, 3, 1174 }, + { 0x1e66, 3, 1177 }, + { 0x1e67, 3, 1180 }, + { 0x1e68, 3, 1183 }, + { 0x1e69, 3, 1186 }, + { 0x1e6a, 2, 1189 }, + { 0x1e6b, 2, 1191 }, + { 0x1e6c, 2, 1193 }, + { 0x1e6d, 2, 1195 }, + { 0x1e6e, 2, 1197 }, + { 0x1e6f, 2, 1199 }, + { 0x1e70, 2, 1201 }, + { 0x1e71, 2, 1203 }, + { 0x1e72, 2, 1205 }, + { 0x1e73, 2, 1207 }, + { 0x1e74, 2, 1209 }, + { 0x1e75, 2, 1211 }, + { 0x1e76, 2, 1213 }, + { 0x1e77, 2, 1215 }, + { 0x1e78, 3, 1217 }, + { 0x1e79, 3, 1220 }, + { 0x1e7a, 3, 1223 }, + { 0x1e7b, 3, 1226 }, + { 0x1e7c, 2, 1229 }, + { 0x1e7d, 2, 1231 }, + { 0x1e7e, 2, 1233 }, + { 0x1e7f, 2, 1235 }, + { 0x1e80, 2, 1237 }, + { 0x1e81, 2, 1239 }, + { 0x1e82, 2, 1241 }, + { 0x1e83, 2, 1243 }, + { 0x1e84, 2, 1245 }, + { 0x1e85, 2, 1247 }, + { 0x1e86, 2, 1249 }, + { 0x1e87, 2, 1251 }, + { 0x1e88, 2, 1253 }, + { 0x1e89, 2, 1255 }, + { 0x1e8a, 2, 1257 }, + { 0x1e8b, 2, 1259 }, + { 0x1e8c, 2, 1261 }, + { 0x1e8d, 2, 1263 }, + { 0x1e8e, 2, 1265 }, + { 0x1e8f, 2, 1267 }, + { 0x1e90, 2, 1269 }, + { 0x1e91, 2, 1271 }, + { 0x1e92, 2, 1273 }, + { 0x1e93, 2, 1275 }, + { 0x1e94, 2, 1277 }, + { 0x1e95, 2, 1279 }, + { 0x1e96, 2, 1281 }, + { 0x1e97, 2, 1283 }, + { 0x1e98, 2, 1285 }, + { 0x1e99, 2, 1287 }, + { 0x1e9a, 2, 1289 }, + { 0x1e9b, 2, 1165 }, + { 0x1ea0, 2, 1291 }, + { 0x1ea1, 2, 1293 }, + { 0x1ea2, 2, 1295 }, + { 0x1ea3, 2, 1297 }, + { 0x1ea4, 3, 1299 }, + { 0x1ea5, 3, 1302 }, + { 0x1ea6, 3, 1305 }, + { 0x1ea7, 3, 1308 }, + { 0x1ea8, 3, 1311 }, + { 0x1ea9, 3, 1314 }, + { 0x1eaa, 3, 1317 }, + { 0x1eab, 3, 1320 }, + { 0x1eac, 3, 1323 }, + { 0x1ead, 3, 1326 }, + { 0x1eae, 3, 1329 }, + { 0x1eaf, 3, 1332 }, + { 0x1eb0, 3, 1335 }, + { 0x1eb1, 3, 1338 }, + { 0x1eb2, 3, 1341 }, + { 0x1eb3, 3, 1344 }, + { 0x1eb4, 3, 1347 }, + { 0x1eb5, 3, 1350 }, + { 0x1eb6, 3, 1353 }, + { 0x1eb7, 3, 1356 }, + { 0x1eb8, 2, 1359 }, + { 0x1eb9, 2, 1361 }, + { 0x1eba, 2, 1363 }, + { 0x1ebb, 2, 1365 }, + { 0x1ebc, 2, 1367 }, + { 0x1ebd, 2, 1369 }, + { 0x1ebe, 3, 1371 }, + { 0x1ebf, 3, 1374 }, + { 0x1ec0, 3, 1377 }, + { 0x1ec1, 3, 1380 }, + { 0x1ec2, 3, 1383 }, + { 0x1ec3, 3, 1386 }, + { 0x1ec4, 3, 1389 }, + { 0x1ec5, 3, 1392 }, + { 0x1ec6, 3, 1395 }, + { 0x1ec7, 3, 1398 }, + { 0x1ec8, 2, 1401 }, + { 0x1ec9, 2, 1403 }, + { 0x1eca, 2, 1405 }, + { 0x1ecb, 2, 1407 }, + { 0x1ecc, 2, 1409 }, + { 0x1ecd, 2, 1411 }, + { 0x1ece, 2, 1413 }, + { 0x1ecf, 2, 1415 }, + { 0x1ed0, 3, 1417 }, + { 0x1ed1, 3, 1420 }, + { 0x1ed2, 3, 1423 }, + { 0x1ed3, 3, 1426 }, + { 0x1ed4, 3, 1429 }, + { 0x1ed5, 3, 1432 }, + { 0x1ed6, 3, 1435 }, + { 0x1ed7, 3, 1438 }, + { 0x1ed8, 3, 1441 }, + { 0x1ed9, 3, 1444 }, + { 0x1eda, 3, 1447 }, + { 0x1edb, 3, 1450 }, + { 0x1edc, 3, 1453 }, + { 0x1edd, 3, 1456 }, + { 0x1ede, 3, 1459 }, + { 0x1edf, 3, 1462 }, + { 0x1ee0, 3, 1465 }, + { 0x1ee1, 3, 1468 }, + { 0x1ee2, 3, 1471 }, + { 0x1ee3, 3, 1474 }, + { 0x1ee4, 2, 1477 }, + { 0x1ee5, 2, 1479 }, + { 0x1ee6, 2, 1481 }, + { 0x1ee7, 2, 1483 }, + { 0x1ee8, 3, 1485 }, + { 0x1ee9, 3, 1488 }, + { 0x1eea, 3, 1491 }, + { 0x1eeb, 3, 1494 }, + { 0x1eec, 3, 1497 }, + { 0x1eed, 3, 1500 }, + { 0x1eee, 3, 1503 }, + { 0x1eef, 3, 1506 }, + { 0x1ef0, 3, 1509 }, + { 0x1ef1, 3, 1512 }, + { 0x1ef2, 2, 1515 }, + { 0x1ef3, 2, 1517 }, + { 0x1ef4, 2, 1519 }, + { 0x1ef5, 2, 1521 }, + { 0x1ef6, 2, 1523 }, + { 0x1ef7, 2, 1525 }, + { 0x1ef8, 2, 1527 }, + { 0x1ef9, 2, 1529 }, + { 0x1f00, 2, 1531 }, + { 0x1f01, 2, 1533 }, + { 0x1f02, 3, 1535 }, + { 0x1f03, 3, 1538 }, + { 0x1f04, 3, 1541 }, + { 0x1f05, 3, 1544 }, + { 0x1f06, 3, 1547 }, + { 0x1f07, 3, 1550 }, + { 0x1f08, 2, 1553 }, + { 0x1f09, 2, 1555 }, + { 0x1f0a, 3, 1557 }, + { 0x1f0b, 3, 1560 }, + { 0x1f0c, 3, 1563 }, + { 0x1f0d, 3, 1566 }, + { 0x1f0e, 3, 1569 }, + { 0x1f0f, 3, 1572 }, + { 0x1f10, 2, 1575 }, + { 0x1f11, 2, 1577 }, + { 0x1f12, 3, 1579 }, + { 0x1f13, 3, 1582 }, + { 0x1f14, 3, 1585 }, + { 0x1f15, 3, 1588 }, + { 0x1f18, 2, 1591 }, + { 0x1f19, 2, 1593 }, + { 0x1f1a, 3, 1595 }, + { 0x1f1b, 3, 1598 }, + { 0x1f1c, 3, 1601 }, + { 0x1f1d, 3, 1604 }, + { 0x1f20, 2, 1607 }, + { 0x1f21, 2, 1609 }, + { 0x1f22, 3, 1611 }, + { 0x1f23, 3, 1614 }, + { 0x1f24, 3, 1617 }, + { 0x1f25, 3, 1620 }, + { 0x1f26, 3, 1623 }, + { 0x1f27, 3, 1626 }, + { 0x1f28, 2, 1629 }, + { 0x1f29, 2, 1631 }, + { 0x1f2a, 3, 1633 }, + { 0x1f2b, 3, 1636 }, + { 0x1f2c, 3, 1639 }, + { 0x1f2d, 3, 1642 }, + { 0x1f2e, 3, 1645 }, + { 0x1f2f, 3, 1648 }, + { 0x1f30, 2, 1651 }, + { 0x1f31, 2, 1653 }, + { 0x1f32, 3, 1655 }, + { 0x1f33, 3, 1658 }, + { 0x1f34, 3, 1661 }, + { 0x1f35, 3, 1664 }, + { 0x1f36, 3, 1667 }, + { 0x1f37, 3, 1670 }, + { 0x1f38, 2, 1673 }, + { 0x1f39, 2, 1675 }, + { 0x1f3a, 3, 1677 }, + { 0x1f3b, 3, 1680 }, + { 0x1f3c, 3, 1683 }, + { 0x1f3d, 3, 1686 }, + { 0x1f3e, 3, 1689 }, + { 0x1f3f, 3, 1692 }, + { 0x1f40, 2, 1695 }, + { 0x1f41, 2, 1697 }, + { 0x1f42, 3, 1699 }, + { 0x1f43, 3, 1702 }, + { 0x1f44, 3, 1705 }, + { 0x1f45, 3, 1708 }, + { 0x1f48, 2, 1711 }, + { 0x1f49, 2, 1713 }, + { 0x1f4a, 3, 1715 }, + { 0x1f4b, 3, 1718 }, + { 0x1f4c, 3, 1721 }, + { 0x1f4d, 3, 1724 }, + { 0x1f50, 2, 1727 }, + { 0x1f51, 2, 1729 }, + { 0x1f52, 3, 1731 }, + { 0x1f53, 3, 1734 }, + { 0x1f54, 3, 1737 }, + { 0x1f55, 3, 1740 }, + { 0x1f56, 3, 1743 }, + { 0x1f57, 3, 1746 }, + { 0x1f59, 2, 1749 }, + { 0x1f5b, 3, 1751 }, + { 0x1f5d, 3, 1754 }, + { 0x1f5f, 3, 1757 }, + { 0x1f60, 2, 1760 }, + { 0x1f61, 2, 1762 }, + { 0x1f62, 3, 1764 }, + { 0x1f63, 3, 1767 }, + { 0x1f64, 3, 1770 }, + { 0x1f65, 3, 1773 }, + { 0x1f66, 3, 1776 }, + { 0x1f67, 3, 1779 }, + { 0x1f68, 2, 1782 }, + { 0x1f69, 2, 1784 }, + { 0x1f6a, 3, 1786 }, + { 0x1f6b, 3, 1789 }, + { 0x1f6c, 3, 1792 }, + { 0x1f6d, 3, 1795 }, + { 0x1f6e, 3, 1798 }, + { 0x1f6f, 3, 1801 }, + { 0x1f70, 2, 1804 }, + { 0x1f71, 2, 647 }, + { 0x1f72, 2, 1806 }, + { 0x1f73, 2, 649 }, + { 0x1f74, 2, 1808 }, + { 0x1f75, 2, 651 }, + { 0x1f76, 2, 1810 }, + { 0x1f77, 2, 653 }, + { 0x1f78, 2, 1812 }, + { 0x1f79, 2, 662 }, + { 0x1f7a, 2, 1814 }, + { 0x1f7b, 2, 664 }, + { 0x1f7c, 2, 1816 }, + { 0x1f7d, 2, 666 }, + { 0x1f80, 3, 1818 }, + { 0x1f81, 3, 1821 }, + { 0x1f82, 4, 1824 }, + { 0x1f83, 4, 1828 }, + { 0x1f84, 4, 1832 }, + { 0x1f85, 4, 1836 }, + { 0x1f86, 4, 1840 }, + { 0x1f87, 4, 1844 }, + { 0x1f88, 3, 1848 }, + { 0x1f89, 3, 1851 }, + { 0x1f8a, 4, 1854 }, + { 0x1f8b, 4, 1858 }, + { 0x1f8c, 4, 1862 }, + { 0x1f8d, 4, 1866 }, + { 0x1f8e, 4, 1870 }, + { 0x1f8f, 4, 1874 }, + { 0x1f90, 3, 1878 }, + { 0x1f91, 3, 1881 }, + { 0x1f92, 4, 1884 }, + { 0x1f93, 4, 1888 }, + { 0x1f94, 4, 1892 }, + { 0x1f95, 4, 1896 }, + { 0x1f96, 4, 1900 }, + { 0x1f97, 4, 1904 }, + { 0x1f98, 3, 1908 }, + { 0x1f99, 3, 1911 }, + { 0x1f9a, 4, 1914 }, + { 0x1f9b, 4, 1918 }, + { 0x1f9c, 4, 1922 }, + { 0x1f9d, 4, 1926 }, + { 0x1f9e, 4, 1930 }, + { 0x1f9f, 4, 1934 }, + { 0x1fa0, 3, 1938 }, + { 0x1fa1, 3, 1941 }, + { 0x1fa2, 4, 1944 }, + { 0x1fa3, 4, 1948 }, + { 0x1fa4, 4, 1952 }, + { 0x1fa5, 4, 1956 }, + { 0x1fa6, 4, 1960 }, + { 0x1fa7, 4, 1964 }, + { 0x1fa8, 3, 1968 }, + { 0x1fa9, 3, 1971 }, + { 0x1faa, 4, 1974 }, + { 0x1fab, 4, 1978 }, + { 0x1fac, 4, 1982 }, + { 0x1fad, 4, 1986 }, + { 0x1fae, 4, 1990 }, + { 0x1faf, 4, 1994 }, + { 0x1fb0, 2, 1998 }, + { 0x1fb1, 2, 2000 }, + { 0x1fb2, 3, 2002 }, + { 0x1fb3, 2, 2005 }, + { 0x1fb4, 3, 2007 }, + { 0x1fb6, 2, 2010 }, + { 0x1fb7, 3, 2012 }, + { 0x1fb8, 2, 2015 }, + { 0x1fb9, 2, 2017 }, + { 0x1fba, 2, 2019 }, + { 0x1fbb, 2, 625 }, + { 0x1fbc, 2, 2021 }, + { 0x1fbd, 2, 2023 }, + { 0x1fbe, 1, 2025 }, + { 0x1fbf, 2, 2023 }, + { 0x1fc0, 2, 2026 }, + { 0x1fc1, 3, 2028 }, + { 0x1fc2, 3, 2031 }, + { 0x1fc3, 2, 2034 }, + { 0x1fc4, 3, 2036 }, + { 0x1fc6, 2, 2039 }, + { 0x1fc7, 3, 2041 }, + { 0x1fc8, 2, 2044 }, + { 0x1fc9, 2, 628 }, + { 0x1fca, 2, 2046 }, + { 0x1fcb, 2, 630 }, + { 0x1fcc, 2, 2048 }, + { 0x1fcd, 3, 2050 }, + { 0x1fce, 3, 2053 }, + { 0x1fcf, 3, 2056 }, + { 0x1fd0, 2, 2059 }, + { 0x1fd1, 2, 2061 }, + { 0x1fd2, 3, 2063 }, + { 0x1fd3, 3, 640 }, + { 0x1fd6, 2, 2066 }, + { 0x1fd7, 3, 2068 }, + { 0x1fd8, 2, 2071 }, + { 0x1fd9, 2, 2073 }, + { 0x1fda, 2, 2075 }, + { 0x1fdb, 2, 632 }, + { 0x1fdd, 3, 2077 }, + { 0x1fde, 3, 2080 }, + { 0x1fdf, 3, 2083 }, + { 0x1fe0, 2, 2086 }, + { 0x1fe1, 2, 2088 }, + { 0x1fe2, 3, 2090 }, + { 0x1fe3, 3, 655 }, + { 0x1fe4, 2, 2093 }, + { 0x1fe5, 2, 2095 }, + { 0x1fe6, 2, 2097 }, + { 0x1fe7, 3, 2099 }, + { 0x1fe8, 2, 2102 }, + { 0x1fe9, 2, 2104 }, + { 0x1fea, 2, 2106 }, + { 0x1feb, 2, 636 }, + { 0x1fec, 2, 2108 }, + { 0x1fed, 3, 2110 }, + { 0x1fee, 3, 622 }, + { 0x1fef, 1, 2113 }, + { 0x1ff2, 3, 2114 }, + { 0x1ff3, 2, 2117 }, + { 0x1ff4, 3, 2119 }, + { 0x1ff6, 2, 2122 }, + { 0x1ff7, 3, 2124 }, + { 0x1ff8, 2, 2127 }, + { 0x1ff9, 2, 634 }, + { 0x1ffa, 2, 2129 }, + { 0x1ffb, 2, 638 }, + { 0x1ffc, 2, 2131 }, + { 0x1ffd, 2, 8 }, + { 0x1ffe, 2, 2133 }, + { 0x2000, 1, 0 }, + { 0x2001, 1, 0 }, + { 0x2002, 1, 0 }, + { 0x2003, 1, 0 }, + { 0x2004, 1, 0 }, + { 0x2005, 1, 0 }, + { 0x2006, 1, 0 }, + { 0x2007, 1, 0 }, + { 0x2008, 1, 0 }, + { 0x2009, 1, 0 }, + { 0x200a, 1, 0 }, + { 0x2011, 1, 2135 }, + { 0x2017, 2, 2136 }, + { 0x2024, 1, 2138 }, + { 0x2025, 2, 2139 }, + { 0x2026, 3, 2141 }, + { 0x202f, 1, 0 }, + { 0x2033, 2, 2144 }, + { 0x2034, 3, 2146 }, + { 0x2036, 2, 2149 }, + { 0x2037, 3, 2151 }, + { 0x203c, 2, 2154 }, + { 0x203e, 2, 2156 }, + { 0x2047, 2, 2158 }, + { 0x2048, 2, 2160 }, + { 0x2049, 2, 2162 }, + { 0x2057, 4, 2164 }, + { 0x205f, 1, 0 }, + { 0x2070, 1, 2168 }, + { 0x2071, 1, 2169 }, + { 0x2074, 1, 2170 }, + { 0x2075, 1, 2171 }, + { 0x2076, 1, 2172 }, + { 0x2077, 1, 2173 }, + { 0x2078, 1, 2174 }, + { 0x2079, 1, 2175 }, + { 0x207a, 1, 2176 }, + { 0x207b, 1, 2177 }, + { 0x207c, 1, 2178 }, + { 0x207d, 1, 2179 }, + { 0x207e, 1, 2180 }, + { 0x207f, 1, 2181 }, + { 0x2080, 1, 2168 }, + { 0x2081, 1, 13 }, + { 0x2082, 1, 6 }, + { 0x2083, 1, 7 }, + { 0x2084, 1, 2170 }, + { 0x2085, 1, 2171 }, + { 0x2086, 1, 2172 }, + { 0x2087, 1, 2173 }, + { 0x2088, 1, 2174 }, + { 0x2089, 1, 2175 }, + { 0x208a, 1, 2176 }, + { 0x208b, 1, 2177 }, + { 0x208c, 1, 2178 }, + { 0x208d, 1, 2179 }, + { 0x208e, 1, 2180 }, + { 0x20a8, 2, 2182 }, + { 0x2100, 3, 2184 }, + { 0x2101, 3, 2187 }, + { 0x2102, 1, 2190 }, + { 0x2103, 2, 2191 }, + { 0x2105, 3, 2193 }, + { 0x2106, 3, 2196 }, + { 0x2107, 1, 2199 }, + { 0x2109, 2, 2200 }, + { 0x210a, 1, 2202 }, + { 0x210b, 1, 2203 }, + { 0x210c, 1, 2203 }, + { 0x210d, 1, 2203 }, + { 0x210e, 1, 588 }, + { 0x210f, 1, 2204 }, + { 0x2110, 1, 2205 }, + { 0x2111, 1, 2205 }, + { 0x2112, 1, 2206 }, + { 0x2113, 1, 610 }, + { 0x2115, 1, 2207 }, + { 0x2116, 2, 2208 }, + { 0x2119, 1, 2210 }, + { 0x211a, 1, 2211 }, + { 0x211b, 1, 2212 }, + { 0x211c, 1, 2212 }, + { 0x211d, 1, 2212 }, + { 0x2120, 2, 2213 }, + { 0x2121, 3, 2215 }, + { 0x2122, 2, 2218 }, + { 0x2124, 1, 2220 }, + { 0x2126, 1, 2221 }, + { 0x2128, 1, 2220 }, + { 0x212a, 1, 2222 }, + { 0x212b, 2, 34 }, + { 0x212c, 1, 2223 }, + { 0x212d, 1, 2190 }, + { 0x212f, 1, 2224 }, + { 0x2130, 1, 2225 }, + { 0x2131, 1, 2226 }, + { 0x2133, 1, 2227 }, + { 0x2134, 1, 14 }, + { 0x2135, 1, 2228 }, + { 0x2136, 1, 2229 }, + { 0x2137, 1, 2230 }, + { 0x2138, 1, 2231 }, + { 0x2139, 1, 2169 }, + { 0x213d, 1, 2232 }, + { 0x213e, 1, 2233 }, + { 0x213f, 1, 2234 }, + { 0x2140, 1, 2235 }, + { 0x2145, 1, 2236 }, + { 0x2146, 1, 2237 }, + { 0x2147, 1, 2224 }, + { 0x2148, 1, 2169 }, + { 0x2149, 1, 590 }, + { 0x2153, 3, 2238 }, + { 0x2154, 3, 2241 }, + { 0x2155, 3, 2244 }, + { 0x2156, 3, 2247 }, + { 0x2157, 3, 2250 }, + { 0x2158, 3, 2253 }, + { 0x2159, 3, 2256 }, + { 0x215a, 3, 2259 }, + { 0x215b, 3, 2262 }, + { 0x215c, 3, 2265 }, + { 0x215d, 3, 2268 }, + { 0x215e, 3, 2271 }, + { 0x215f, 2, 2274 }, + { 0x2160, 1, 2205 }, + { 0x2161, 2, 2276 }, + { 0x2162, 3, 2278 }, + { 0x2163, 2, 2281 }, + { 0x2164, 1, 2283 }, + { 0x2165, 2, 2284 }, + { 0x2166, 3, 2286 }, + { 0x2167, 4, 2289 }, + { 0x2168, 2, 2293 }, + { 0x2169, 1, 2295 }, + { 0x216a, 2, 2296 }, + { 0x216b, 3, 2298 }, + { 0x216c, 1, 2206 }, + { 0x216d, 1, 2190 }, + { 0x216e, 1, 2236 }, + { 0x216f, 1, 2227 }, + { 0x2170, 1, 2169 }, + { 0x2171, 2, 2301 }, + { 0x2172, 3, 2303 }, + { 0x2173, 2, 2306 }, + { 0x2174, 1, 2308 }, + { 0x2175, 2, 2309 }, + { 0x2176, 3, 2311 }, + { 0x2177, 4, 2314 }, + { 0x2178, 2, 2318 }, + { 0x2179, 1, 611 }, + { 0x217a, 2, 2320 }, + { 0x217b, 3, 2322 }, + { 0x217c, 1, 610 }, + { 0x217d, 1, 2325 }, + { 0x217e, 1, 2237 }, + { 0x217f, 1, 2326 }, + { 0x219a, 2, 2327 }, + { 0x219b, 2, 2329 }, + { 0x21ae, 2, 2331 }, + { 0x21cd, 2, 2333 }, + { 0x21ce, 2, 2335 }, + { 0x21cf, 2, 2337 }, + { 0x2204, 2, 2339 }, + { 0x2209, 2, 2341 }, + { 0x220c, 2, 2343 }, + { 0x2224, 2, 2345 }, + { 0x2226, 2, 2347 }, + { 0x222c, 2, 2349 }, + { 0x222d, 3, 2351 }, + { 0x222f, 2, 2354 }, + { 0x2230, 3, 2356 }, + { 0x2241, 2, 2359 }, + { 0x2244, 2, 2361 }, + { 0x2247, 2, 2363 }, + { 0x2249, 2, 2365 }, + { 0x2260, 2, 2367 }, + { 0x2262, 2, 2369 }, + { 0x226d, 2, 2371 }, + { 0x226e, 2, 2373 }, + { 0x226f, 2, 2375 }, + { 0x2270, 2, 2377 }, + { 0x2271, 2, 2379 }, + { 0x2274, 2, 2381 }, + { 0x2275, 2, 2383 }, + { 0x2278, 2, 2385 }, + { 0x2279, 2, 2387 }, + { 0x2280, 2, 2389 }, + { 0x2281, 2, 2391 }, + { 0x2284, 2, 2393 }, + { 0x2285, 2, 2395 }, + { 0x2288, 2, 2397 }, + { 0x2289, 2, 2399 }, + { 0x22ac, 2, 2401 }, + { 0x22ad, 2, 2403 }, + { 0x22ae, 2, 2405 }, + { 0x22af, 2, 2407 }, + { 0x22e0, 2, 2409 }, + { 0x22e1, 2, 2411 }, + { 0x22e2, 2, 2413 }, + { 0x22e3, 2, 2415 }, + { 0x22ea, 2, 2417 }, + { 0x22eb, 2, 2419 }, + { 0x22ec, 2, 2421 }, + { 0x22ed, 2, 2423 }, + { 0x2329, 1, 2425 }, + { 0x232a, 1, 2426 }, + { 0x2460, 1, 13 }, + { 0x2461, 1, 6 }, + { 0x2462, 1, 7 }, + { 0x2463, 1, 2170 }, + { 0x2464, 1, 2171 }, + { 0x2465, 1, 2172 }, + { 0x2466, 1, 2173 }, + { 0x2467, 1, 2174 }, + { 0x2468, 1, 2175 }, + { 0x2469, 2, 2427 }, + { 0x246a, 2, 2429 }, + { 0x246b, 2, 2431 }, + { 0x246c, 2, 2433 }, + { 0x246d, 2, 2435 }, + { 0x246e, 2, 2437 }, + { 0x246f, 2, 2439 }, + { 0x2470, 2, 2441 }, + { 0x2471, 2, 2443 }, + { 0x2472, 2, 2445 }, + { 0x2473, 2, 2447 }, + { 0x2474, 3, 2449 }, + { 0x2475, 3, 2452 }, + { 0x2476, 3, 2455 }, + { 0x2477, 3, 2458 }, + { 0x2478, 3, 2461 }, + { 0x2479, 3, 2464 }, + { 0x247a, 3, 2467 }, + { 0x247b, 3, 2470 }, + { 0x247c, 3, 2473 }, + { 0x247d, 4, 2476 }, + { 0x247e, 4, 2480 }, + { 0x247f, 4, 2484 }, + { 0x2480, 4, 2488 }, + { 0x2481, 4, 2492 }, + { 0x2482, 4, 2496 }, + { 0x2483, 4, 2500 }, + { 0x2484, 4, 2504 }, + { 0x2485, 4, 2508 }, + { 0x2486, 4, 2512 }, + { 0x2487, 4, 2516 }, + { 0x2488, 2, 2520 }, + { 0x2489, 2, 2522 }, + { 0x248a, 2, 2524 }, + { 0x248b, 2, 2526 }, + { 0x248c, 2, 2528 }, + { 0x248d, 2, 2530 }, + { 0x248e, 2, 2532 }, + { 0x248f, 2, 2534 }, + { 0x2490, 2, 2536 }, + { 0x2491, 3, 2538 }, + { 0x2492, 3, 2541 }, + { 0x2493, 3, 2544 }, + { 0x2494, 3, 2547 }, + { 0x2495, 3, 2550 }, + { 0x2496, 3, 2553 }, + { 0x2497, 3, 2556 }, + { 0x2498, 3, 2559 }, + { 0x2499, 3, 2562 }, + { 0x249a, 3, 2565 }, + { 0x249b, 3, 2568 }, + { 0x249c, 3, 2571 }, + { 0x249d, 3, 2574 }, + { 0x249e, 3, 2577 }, + { 0x249f, 3, 2580 }, + { 0x24a0, 3, 2583 }, + { 0x24a1, 3, 2586 }, + { 0x24a2, 3, 2589 }, + { 0x24a3, 3, 2592 }, + { 0x24a4, 3, 2595 }, + { 0x24a5, 3, 2598 }, + { 0x24a6, 3, 2601 }, + { 0x24a7, 3, 2604 }, + { 0x24a8, 3, 2607 }, + { 0x24a9, 3, 2610 }, + { 0x24aa, 3, 2613 }, + { 0x24ab, 3, 2616 }, + { 0x24ac, 3, 2619 }, + { 0x24ad, 3, 2622 }, + { 0x24ae, 3, 2625 }, + { 0x24af, 3, 2628 }, + { 0x24b0, 3, 2631 }, + { 0x24b1, 3, 2634 }, + { 0x24b2, 3, 2637 }, + { 0x24b3, 3, 2640 }, + { 0x24b4, 3, 2643 }, + { 0x24b5, 3, 2646 }, + { 0x24b6, 1, 2649 }, + { 0x24b7, 1, 2223 }, + { 0x24b8, 1, 2190 }, + { 0x24b9, 1, 2236 }, + { 0x24ba, 1, 2225 }, + { 0x24bb, 1, 2226 }, + { 0x24bc, 1, 2650 }, + { 0x24bd, 1, 2203 }, + { 0x24be, 1, 2205 }, + { 0x24bf, 1, 2651 }, + { 0x24c0, 1, 2222 }, + { 0x24c1, 1, 2206 }, + { 0x24c2, 1, 2227 }, + { 0x24c3, 1, 2207 }, + { 0x24c4, 1, 2652 }, + { 0x24c5, 1, 2210 }, + { 0x24c6, 1, 2211 }, + { 0x24c7, 1, 2212 }, + { 0x24c8, 1, 2653 }, + { 0x24c9, 1, 2654 }, + { 0x24ca, 1, 2655 }, + { 0x24cb, 1, 2283 }, + { 0x24cc, 1, 2656 }, + { 0x24cd, 1, 2295 }, + { 0x24ce, 1, 2657 }, + { 0x24cf, 1, 2220 }, + { 0x24d0, 1, 3 }, + { 0x24d1, 1, 2658 }, + { 0x24d2, 1, 2325 }, + { 0x24d3, 1, 2237 }, + { 0x24d4, 1, 2224 }, + { 0x24d5, 1, 2659 }, + { 0x24d6, 1, 2202 }, + { 0x24d7, 1, 588 }, + { 0x24d8, 1, 2169 }, + { 0x24d9, 1, 590 }, + { 0x24da, 1, 2660 }, + { 0x24db, 1, 610 }, + { 0x24dc, 1, 2326 }, + { 0x24dd, 1, 2181 }, + { 0x24de, 1, 14 }, + { 0x24df, 1, 2661 }, + { 0x24e0, 1, 2662 }, + { 0x24e1, 1, 591 }, + { 0x24e2, 1, 356 }, + { 0x24e3, 1, 2663 }, + { 0x24e4, 1, 2664 }, + { 0x24e5, 1, 2308 }, + { 0x24e6, 1, 595 }, + { 0x24e7, 1, 611 }, + { 0x24e8, 1, 596 }, + { 0x24e9, 1, 2665 }, + { 0x24ea, 1, 2168 }, + { 0x2a0c, 4, 2666 }, + { 0x2a74, 3, 2670 }, + { 0x2a75, 2, 2673 }, + { 0x2a76, 3, 2675 }, + { 0x2adc, 2, 2678 }, + { 0x2e9f, 1, 2680 }, + { 0x2ef3, 1, 2681 }, + { 0x2f00, 1, 2682 }, + { 0x2f01, 1, 2683 }, + { 0x2f02, 1, 2684 }, + { 0x2f03, 1, 2685 }, + { 0x2f04, 1, 2686 }, + { 0x2f05, 1, 2687 }, + { 0x2f06, 1, 2688 }, + { 0x2f07, 1, 2689 }, + { 0x2f08, 1, 2690 }, + { 0x2f09, 1, 2691 }, + { 0x2f0a, 1, 2692 }, + { 0x2f0b, 1, 2693 }, + { 0x2f0c, 1, 2694 }, + { 0x2f0d, 1, 2695 }, + { 0x2f0e, 1, 2696 }, + { 0x2f0f, 1, 2697 }, + { 0x2f10, 1, 2698 }, + { 0x2f11, 1, 2699 }, + { 0x2f12, 1, 2700 }, + { 0x2f13, 1, 2701 }, + { 0x2f14, 1, 2702 }, + { 0x2f15, 1, 2703 }, + { 0x2f16, 1, 2704 }, + { 0x2f17, 1, 2705 }, + { 0x2f18, 1, 2706 }, + { 0x2f19, 1, 2707 }, + { 0x2f1a, 1, 2708 }, + { 0x2f1b, 1, 2709 }, + { 0x2f1c, 1, 2710 }, + { 0x2f1d, 1, 2711 }, + { 0x2f1e, 1, 2712 }, + { 0x2f1f, 1, 2713 }, + { 0x2f20, 1, 2714 }, + { 0x2f21, 1, 2715 }, + { 0x2f22, 1, 2716 }, + { 0x2f23, 1, 2717 }, + { 0x2f24, 1, 2718 }, + { 0x2f25, 1, 2719 }, + { 0x2f26, 1, 2720 }, + { 0x2f27, 1, 2721 }, + { 0x2f28, 1, 2722 }, + { 0x2f29, 1, 2723 }, + { 0x2f2a, 1, 2724 }, + { 0x2f2b, 1, 2725 }, + { 0x2f2c, 1, 2726 }, + { 0x2f2d, 1, 2727 }, + { 0x2f2e, 1, 2728 }, + { 0x2f2f, 1, 2729 }, + { 0x2f30, 1, 2730 }, + { 0x2f31, 1, 2731 }, + { 0x2f32, 1, 2732 }, + { 0x2f33, 1, 2733 }, + { 0x2f34, 1, 2734 }, + { 0x2f35, 1, 2735 }, + { 0x2f36, 1, 2736 }, + { 0x2f37, 1, 2737 }, + { 0x2f38, 1, 2738 }, + { 0x2f39, 1, 2739 }, + { 0x2f3a, 1, 2740 }, + { 0x2f3b, 1, 2741 }, + { 0x2f3c, 1, 2742 }, + { 0x2f3d, 1, 2743 }, + { 0x2f3e, 1, 2744 }, + { 0x2f3f, 1, 2745 }, + { 0x2f40, 1, 2746 }, + { 0x2f41, 1, 2747 }, + { 0x2f42, 1, 2748 }, + { 0x2f43, 1, 2749 }, + { 0x2f44, 1, 2750 }, + { 0x2f45, 1, 2751 }, + { 0x2f46, 1, 2752 }, + { 0x2f47, 1, 2753 }, + { 0x2f48, 1, 2754 }, + { 0x2f49, 1, 2755 }, + { 0x2f4a, 1, 2756 }, + { 0x2f4b, 1, 2757 }, + { 0x2f4c, 1, 2758 }, + { 0x2f4d, 1, 2759 }, + { 0x2f4e, 1, 2760 }, + { 0x2f4f, 1, 2761 }, + { 0x2f50, 1, 2762 }, + { 0x2f51, 1, 2763 }, + { 0x2f52, 1, 2764 }, + { 0x2f53, 1, 2765 }, + { 0x2f54, 1, 2766 }, + { 0x2f55, 1, 2767 }, + { 0x2f56, 1, 2768 }, + { 0x2f57, 1, 2769 }, + { 0x2f58, 1, 2770 }, + { 0x2f59, 1, 2771 }, + { 0x2f5a, 1, 2772 }, + { 0x2f5b, 1, 2773 }, + { 0x2f5c, 1, 2774 }, + { 0x2f5d, 1, 2775 }, + { 0x2f5e, 1, 2776 }, + { 0x2f5f, 1, 2777 }, + { 0x2f60, 1, 2778 }, + { 0x2f61, 1, 2779 }, + { 0x2f62, 1, 2780 }, + { 0x2f63, 1, 2781 }, + { 0x2f64, 1, 2782 }, + { 0x2f65, 1, 2783 }, + { 0x2f66, 1, 2784 }, + { 0x2f67, 1, 2785 }, + { 0x2f68, 1, 2786 }, + { 0x2f69, 1, 2787 }, + { 0x2f6a, 1, 2788 }, + { 0x2f6b, 1, 2789 }, + { 0x2f6c, 1, 2790 }, + { 0x2f6d, 1, 2791 }, + { 0x2f6e, 1, 2792 }, + { 0x2f6f, 1, 2793 }, + { 0x2f70, 1, 2794 }, + { 0x2f71, 1, 2795 }, + { 0x2f72, 1, 2796 }, + { 0x2f73, 1, 2797 }, + { 0x2f74, 1, 2798 }, + { 0x2f75, 1, 2799 }, + { 0x2f76, 1, 2800 }, + { 0x2f77, 1, 2801 }, + { 0x2f78, 1, 2802 }, + { 0x2f79, 1, 2803 }, + { 0x2f7a, 1, 2804 }, + { 0x2f7b, 1, 2805 }, + { 0x2f7c, 1, 2806 }, + { 0x2f7d, 1, 2807 }, + { 0x2f7e, 1, 2808 }, + { 0x2f7f, 1, 2809 }, + { 0x2f80, 1, 2810 }, + { 0x2f81, 1, 2811 }, + { 0x2f82, 1, 2812 }, + { 0x2f83, 1, 2813 }, + { 0x2f84, 1, 2814 }, + { 0x2f85, 1, 2815 }, + { 0x2f86, 1, 2816 }, + { 0x2f87, 1, 2817 }, + { 0x2f88, 1, 2818 }, + { 0x2f89, 1, 2819 }, + { 0x2f8a, 1, 2820 }, + { 0x2f8b, 1, 2821 }, + { 0x2f8c, 1, 2822 }, + { 0x2f8d, 1, 2823 }, + { 0x2f8e, 1, 2824 }, + { 0x2f8f, 1, 2825 }, + { 0x2f90, 1, 2826 }, + { 0x2f91, 1, 2827 }, + { 0x2f92, 1, 2828 }, + { 0x2f93, 1, 2829 }, + { 0x2f94, 1, 2830 }, + { 0x2f95, 1, 2831 }, + { 0x2f96, 1, 2832 }, + { 0x2f97, 1, 2833 }, + { 0x2f98, 1, 2834 }, + { 0x2f99, 1, 2835 }, + { 0x2f9a, 1, 2836 }, + { 0x2f9b, 1, 2837 }, + { 0x2f9c, 1, 2838 }, + { 0x2f9d, 1, 2839 }, + { 0x2f9e, 1, 2840 }, + { 0x2f9f, 1, 2841 }, + { 0x2fa0, 1, 2842 }, + { 0x2fa1, 1, 2843 }, + { 0x2fa2, 1, 2844 }, + { 0x2fa3, 1, 2845 }, + { 0x2fa4, 1, 2846 }, + { 0x2fa5, 1, 2847 }, + { 0x2fa6, 1, 2848 }, + { 0x2fa7, 1, 2849 }, + { 0x2fa8, 1, 2850 }, + { 0x2fa9, 1, 2851 }, + { 0x2faa, 1, 2852 }, + { 0x2fab, 1, 2853 }, + { 0x2fac, 1, 2854 }, + { 0x2fad, 1, 2855 }, + { 0x2fae, 1, 2856 }, + { 0x2faf, 1, 2857 }, + { 0x2fb0, 1, 2858 }, + { 0x2fb1, 1, 2859 }, + { 0x2fb2, 1, 2860 }, + { 0x2fb3, 1, 2861 }, + { 0x2fb4, 1, 2862 }, + { 0x2fb5, 1, 2863 }, + { 0x2fb6, 1, 2864 }, + { 0x2fb7, 1, 2865 }, + { 0x2fb8, 1, 2866 }, + { 0x2fb9, 1, 2867 }, + { 0x2fba, 1, 2868 }, + { 0x2fbb, 1, 2869 }, + { 0x2fbc, 1, 2870 }, + { 0x2fbd, 1, 2871 }, + { 0x2fbe, 1, 2872 }, + { 0x2fbf, 1, 2873 }, + { 0x2fc0, 1, 2874 }, + { 0x2fc1, 1, 2875 }, + { 0x2fc2, 1, 2876 }, + { 0x2fc3, 1, 2877 }, + { 0x2fc4, 1, 2878 }, + { 0x2fc5, 1, 2879 }, + { 0x2fc6, 1, 2880 }, + { 0x2fc7, 1, 2881 }, + { 0x2fc8, 1, 2882 }, + { 0x2fc9, 1, 2883 }, + { 0x2fca, 1, 2884 }, + { 0x2fcb, 1, 2885 }, + { 0x2fcc, 1, 2886 }, + { 0x2fcd, 1, 2887 }, + { 0x2fce, 1, 2888 }, + { 0x2fcf, 1, 2889 }, + { 0x2fd0, 1, 2890 }, + { 0x2fd1, 1, 2891 }, + { 0x2fd2, 1, 2892 }, + { 0x2fd3, 1, 2893 }, + { 0x2fd4, 1, 2894 }, + { 0x2fd5, 1, 2895 }, + { 0x3000, 1, 0 }, + { 0x3036, 1, 2896 }, + { 0x3038, 1, 2705 }, + { 0x3039, 1, 2897 }, + { 0x303a, 1, 2898 }, + { 0x304c, 2, 2899 }, + { 0x304e, 2, 2901 }, + { 0x3050, 2, 2903 }, + { 0x3052, 2, 2905 }, + { 0x3054, 2, 2907 }, + { 0x3056, 2, 2909 }, + { 0x3058, 2, 2911 }, + { 0x305a, 2, 2913 }, + { 0x305c, 2, 2915 }, + { 0x305e, 2, 2917 }, + { 0x3060, 2, 2919 }, + { 0x3062, 2, 2921 }, + { 0x3065, 2, 2923 }, + { 0x3067, 2, 2925 }, + { 0x3069, 2, 2927 }, + { 0x3070, 2, 2929 }, + { 0x3071, 2, 2931 }, + { 0x3073, 2, 2933 }, + { 0x3074, 2, 2935 }, + { 0x3076, 2, 2937 }, + { 0x3077, 2, 2939 }, + { 0x3079, 2, 2941 }, + { 0x307a, 2, 2943 }, + { 0x307c, 2, 2945 }, + { 0x307d, 2, 2947 }, + { 0x3094, 2, 2949 }, + { 0x309b, 2, 2951 }, + { 0x309c, 2, 2953 }, + { 0x309e, 2, 2955 }, + { 0x309f, 2, 2957 }, + { 0x30ac, 2, 2959 }, + { 0x30ae, 2, 2961 }, + { 0x30b0, 2, 2963 }, + { 0x30b2, 2, 2965 }, + { 0x30b4, 2, 2967 }, + { 0x30b6, 2, 2969 }, + { 0x30b8, 2, 2971 }, + { 0x30ba, 2, 2973 }, + { 0x30bc, 2, 2975 }, + { 0x30be, 2, 2977 }, + { 0x30c0, 2, 2979 }, + { 0x30c2, 2, 2981 }, + { 0x30c5, 2, 2983 }, + { 0x30c7, 2, 2985 }, + { 0x30c9, 2, 2987 }, + { 0x30d0, 2, 2989 }, + { 0x30d1, 2, 2991 }, + { 0x30d3, 2, 2993 }, + { 0x30d4, 2, 2995 }, + { 0x30d6, 2, 2997 }, + { 0x30d7, 2, 2999 }, + { 0x30d9, 2, 3001 }, + { 0x30da, 2, 3003 }, + { 0x30dc, 2, 3005 }, + { 0x30dd, 2, 3007 }, + { 0x30f4, 2, 3009 }, + { 0x30f7, 2, 3011 }, + { 0x30f8, 2, 3013 }, + { 0x30f9, 2, 3015 }, + { 0x30fa, 2, 3017 }, + { 0x30fe, 2, 3019 }, + { 0x30ff, 2, 3021 }, + { 0x3131, 1, 3023 }, + { 0x3132, 1, 3024 }, + { 0x3133, 1, 3025 }, + { 0x3134, 1, 3026 }, + { 0x3135, 1, 3027 }, + { 0x3136, 1, 3028 }, + { 0x3137, 1, 3029 }, + { 0x3138, 1, 3030 }, + { 0x3139, 1, 3031 }, + { 0x313a, 1, 3032 }, + { 0x313b, 1, 3033 }, + { 0x313c, 1, 3034 }, + { 0x313d, 1, 3035 }, + { 0x313e, 1, 3036 }, + { 0x313f, 1, 3037 }, + { 0x3140, 1, 3038 }, + { 0x3141, 1, 3039 }, + { 0x3142, 1, 3040 }, + { 0x3143, 1, 3041 }, + { 0x3144, 1, 3042 }, + { 0x3145, 1, 3043 }, + { 0x3146, 1, 3044 }, + { 0x3147, 1, 3045 }, + { 0x3148, 1, 3046 }, + { 0x3149, 1, 3047 }, + { 0x314a, 1, 3048 }, + { 0x314b, 1, 3049 }, + { 0x314c, 1, 3050 }, + { 0x314d, 1, 3051 }, + { 0x314e, 1, 3052 }, + { 0x314f, 1, 3053 }, + { 0x3150, 1, 3054 }, + { 0x3151, 1, 3055 }, + { 0x3152, 1, 3056 }, + { 0x3153, 1, 3057 }, + { 0x3154, 1, 3058 }, + { 0x3155, 1, 3059 }, + { 0x3156, 1, 3060 }, + { 0x3157, 1, 3061 }, + { 0x3158, 1, 3062 }, + { 0x3159, 1, 3063 }, + { 0x315a, 1, 3064 }, + { 0x315b, 1, 3065 }, + { 0x315c, 1, 3066 }, + { 0x315d, 1, 3067 }, + { 0x315e, 1, 3068 }, + { 0x315f, 1, 3069 }, + { 0x3160, 1, 3070 }, + { 0x3161, 1, 3071 }, + { 0x3162, 1, 3072 }, + { 0x3163, 1, 3073 }, + { 0x3164, 1, 3074 }, + { 0x3165, 1, 3075 }, + { 0x3166, 1, 3076 }, + { 0x3167, 1, 3077 }, + { 0x3168, 1, 3078 }, + { 0x3169, 1, 3079 }, + { 0x316a, 1, 3080 }, + { 0x316b, 1, 3081 }, + { 0x316c, 1, 3082 }, + { 0x316d, 1, 3083 }, + { 0x316e, 1, 3084 }, + { 0x316f, 1, 3085 }, + { 0x3170, 1, 3086 }, + { 0x3171, 1, 3087 }, + { 0x3172, 1, 3088 }, + { 0x3173, 1, 3089 }, + { 0x3174, 1, 3090 }, + { 0x3175, 1, 3091 }, + { 0x3176, 1, 3092 }, + { 0x3177, 1, 3093 }, + { 0x3178, 1, 3094 }, + { 0x3179, 1, 3095 }, + { 0x317a, 1, 3096 }, + { 0x317b, 1, 3097 }, + { 0x317c, 1, 3098 }, + { 0x317d, 1, 3099 }, + { 0x317e, 1, 3100 }, + { 0x317f, 1, 3101 }, + { 0x3180, 1, 3102 }, + { 0x3181, 1, 3103 }, + { 0x3182, 1, 3104 }, + { 0x3183, 1, 3105 }, + { 0x3184, 1, 3106 }, + { 0x3185, 1, 3107 }, + { 0x3186, 1, 3108 }, + { 0x3187, 1, 3109 }, + { 0x3188, 1, 3110 }, + { 0x3189, 1, 3111 }, + { 0x318a, 1, 3112 }, + { 0x318b, 1, 3113 }, + { 0x318c, 1, 3114 }, + { 0x318d, 1, 3115 }, + { 0x318e, 1, 3116 }, + { 0x3192, 1, 2682 }, + { 0x3193, 1, 2688 }, + { 0x3194, 1, 3117 }, + { 0x3195, 1, 3118 }, + { 0x3196, 1, 3119 }, + { 0x3197, 1, 3120 }, + { 0x3198, 1, 3121 }, + { 0x3199, 1, 3122 }, + { 0x319a, 1, 2686 }, + { 0x319b, 1, 3123 }, + { 0x319c, 1, 3124 }, + { 0x319d, 1, 3125 }, + { 0x319e, 1, 3126 }, + { 0x319f, 1, 2690 }, + { 0x3200, 3, 3127 }, + { 0x3201, 3, 3130 }, + { 0x3202, 3, 3133 }, + { 0x3203, 3, 3136 }, + { 0x3204, 3, 3139 }, + { 0x3205, 3, 3142 }, + { 0x3206, 3, 3145 }, + { 0x3207, 3, 3148 }, + { 0x3208, 3, 3151 }, + { 0x3209, 3, 3154 }, + { 0x320a, 3, 3157 }, + { 0x320b, 3, 3160 }, + { 0x320c, 3, 3163 }, + { 0x320d, 3, 3166 }, + { 0x320e, 4, 3169 }, + { 0x320f, 4, 3173 }, + { 0x3210, 4, 3177 }, + { 0x3211, 4, 3181 }, + { 0x3212, 4, 3185 }, + { 0x3213, 4, 3189 }, + { 0x3214, 4, 3193 }, + { 0x3215, 4, 3197 }, + { 0x3216, 4, 3201 }, + { 0x3217, 4, 3205 }, + { 0x3218, 4, 3209 }, + { 0x3219, 4, 3213 }, + { 0x321a, 4, 3217 }, + { 0x321b, 4, 3221 }, + { 0x321c, 4, 3225 }, + { 0x3220, 3, 3229 }, + { 0x3221, 3, 3232 }, + { 0x3222, 3, 3235 }, + { 0x3223, 3, 3238 }, + { 0x3224, 3, 3241 }, + { 0x3225, 3, 3244 }, + { 0x3226, 3, 3247 }, + { 0x3227, 3, 3250 }, + { 0x3228, 3, 3253 }, + { 0x3229, 3, 3256 }, + { 0x322a, 3, 3259 }, + { 0x322b, 3, 3262 }, + { 0x322c, 3, 3265 }, + { 0x322d, 3, 3268 }, + { 0x322e, 3, 3271 }, + { 0x322f, 3, 3274 }, + { 0x3230, 3, 3277 }, + { 0x3231, 3, 3280 }, + { 0x3232, 3, 3283 }, + { 0x3233, 3, 3286 }, + { 0x3234, 3, 3289 }, + { 0x3235, 3, 3292 }, + { 0x3236, 3, 3295 }, + { 0x3237, 3, 3298 }, + { 0x3238, 3, 3301 }, + { 0x3239, 3, 3304 }, + { 0x323a, 3, 3307 }, + { 0x323b, 3, 3310 }, + { 0x323c, 3, 3313 }, + { 0x323d, 3, 3316 }, + { 0x323e, 3, 3319 }, + { 0x323f, 3, 3322 }, + { 0x3240, 3, 3325 }, + { 0x3241, 3, 3328 }, + { 0x3242, 3, 3331 }, + { 0x3243, 3, 3334 }, + { 0x3251, 2, 3337 }, + { 0x3252, 2, 3339 }, + { 0x3253, 2, 3341 }, + { 0x3254, 2, 3343 }, + { 0x3255, 2, 3345 }, + { 0x3256, 2, 3347 }, + { 0x3257, 2, 3349 }, + { 0x3258, 2, 3351 }, + { 0x3259, 2, 3353 }, + { 0x325a, 2, 3355 }, + { 0x325b, 2, 3357 }, + { 0x325c, 2, 3359 }, + { 0x325d, 2, 3361 }, + { 0x325e, 2, 3363 }, + { 0x325f, 2, 3365 }, + { 0x3260, 1, 3023 }, + { 0x3261, 1, 3026 }, + { 0x3262, 1, 3029 }, + { 0x3263, 1, 3031 }, + { 0x3264, 1, 3039 }, + { 0x3265, 1, 3040 }, + { 0x3266, 1, 3043 }, + { 0x3267, 1, 3045 }, + { 0x3268, 1, 3046 }, + { 0x3269, 1, 3048 }, + { 0x326a, 1, 3049 }, + { 0x326b, 1, 3050 }, + { 0x326c, 1, 3051 }, + { 0x326d, 1, 3052 }, + { 0x326e, 2, 3367 }, + { 0x326f, 2, 3369 }, + { 0x3270, 2, 3371 }, + { 0x3271, 2, 3373 }, + { 0x3272, 2, 3375 }, + { 0x3273, 2, 3377 }, + { 0x3274, 2, 3379 }, + { 0x3275, 2, 3381 }, + { 0x3276, 2, 3383 }, + { 0x3277, 2, 3385 }, + { 0x3278, 2, 3387 }, + { 0x3279, 2, 3389 }, + { 0x327a, 2, 3391 }, + { 0x327b, 2, 3393 }, + { 0x3280, 1, 2682 }, + { 0x3281, 1, 2688 }, + { 0x3282, 1, 3117 }, + { 0x3283, 1, 3118 }, + { 0x3284, 1, 3395 }, + { 0x3285, 1, 3396 }, + { 0x3286, 1, 3397 }, + { 0x3287, 1, 2693 }, + { 0x3288, 1, 3398 }, + { 0x3289, 1, 2705 }, + { 0x328a, 1, 2755 }, + { 0x328b, 1, 2767 }, + { 0x328c, 1, 2766 }, + { 0x328d, 1, 2756 }, + { 0x328e, 1, 2848 }, + { 0x328f, 1, 2713 }, + { 0x3290, 1, 2753 }, + { 0x3291, 1, 3399 }, + { 0x3292, 1, 3400 }, + { 0x3293, 1, 3401 }, + { 0x3294, 1, 3402 }, + { 0x3295, 1, 3403 }, + { 0x3296, 1, 3404 }, + { 0x3297, 1, 3405 }, + { 0x3298, 1, 3406 }, + { 0x3299, 1, 3407 }, + { 0x329a, 1, 3408 }, + { 0x329b, 1, 2719 }, + { 0x329c, 1, 3409 }, + { 0x329d, 1, 3410 }, + { 0x329e, 1, 3411 }, + { 0x329f, 1, 3412 }, + { 0x32a0, 1, 3413 }, + { 0x32a1, 1, 3414 }, + { 0x32a2, 1, 3415 }, + { 0x32a3, 1, 3416 }, + { 0x32a4, 1, 3119 }, + { 0x32a5, 1, 3120 }, + { 0x32a6, 1, 3121 }, + { 0x32a7, 1, 3417 }, + { 0x32a8, 1, 3418 }, + { 0x32a9, 1, 3419 }, + { 0x32aa, 1, 3420 }, + { 0x32ab, 1, 3421 }, + { 0x32ac, 1, 3422 }, + { 0x32ad, 1, 3423 }, + { 0x32ae, 1, 3424 }, + { 0x32af, 1, 3425 }, + { 0x32b0, 1, 3426 }, + { 0x32b1, 2, 3427 }, + { 0x32b2, 2, 3429 }, + { 0x32b3, 2, 3431 }, + { 0x32b4, 2, 3433 }, + { 0x32b5, 2, 3435 }, + { 0x32b6, 2, 3437 }, + { 0x32b7, 2, 3439 }, + { 0x32b8, 2, 3441 }, + { 0x32b9, 2, 3443 }, + { 0x32ba, 2, 3445 }, + { 0x32bb, 2, 3447 }, + { 0x32bc, 2, 3449 }, + { 0x32bd, 2, 3451 }, + { 0x32be, 2, 3453 }, + { 0x32bf, 2, 3455 }, + { 0x32c0, 2, 3457 }, + { 0x32c1, 2, 3459 }, + { 0x32c2, 2, 3461 }, + { 0x32c3, 2, 3463 }, + { 0x32c4, 2, 3465 }, + { 0x32c5, 2, 3467 }, + { 0x32c6, 2, 3469 }, + { 0x32c7, 2, 3471 }, + { 0x32c8, 2, 3473 }, + { 0x32c9, 3, 3475 }, + { 0x32ca, 3, 3478 }, + { 0x32cb, 3, 3481 }, + { 0x32d0, 1, 3484 }, + { 0x32d1, 1, 3485 }, + { 0x32d2, 1, 3486 }, + { 0x32d3, 1, 3487 }, + { 0x32d4, 1, 3488 }, + { 0x32d5, 1, 3489 }, + { 0x32d6, 1, 3490 }, + { 0x32d7, 1, 3491 }, + { 0x32d8, 1, 3492 }, + { 0x32d9, 1, 3493 }, + { 0x32da, 1, 3494 }, + { 0x32db, 1, 3495 }, + { 0x32dc, 1, 3496 }, + { 0x32dd, 1, 3497 }, + { 0x32de, 1, 3498 }, + { 0x32df, 1, 3499 }, + { 0x32e0, 1, 3500 }, + { 0x32e1, 1, 3501 }, + { 0x32e2, 1, 3502 }, + { 0x32e3, 1, 3503 }, + { 0x32e4, 1, 3504 }, + { 0x32e5, 1, 3505 }, + { 0x32e6, 1, 3506 }, + { 0x32e7, 1, 3507 }, + { 0x32e8, 1, 3508 }, + { 0x32e9, 1, 3509 }, + { 0x32ea, 1, 3510 }, + { 0x32eb, 1, 3511 }, + { 0x32ec, 1, 3512 }, + { 0x32ed, 1, 3513 }, + { 0x32ee, 1, 3514 }, + { 0x32ef, 1, 3515 }, + { 0x32f0, 1, 3516 }, + { 0x32f1, 1, 3517 }, + { 0x32f2, 1, 3518 }, + { 0x32f3, 1, 3519 }, + { 0x32f4, 1, 3520 }, + { 0x32f5, 1, 3521 }, + { 0x32f6, 1, 3522 }, + { 0x32f7, 1, 3523 }, + { 0x32f8, 1, 3524 }, + { 0x32f9, 1, 3525 }, + { 0x32fa, 1, 3526 }, + { 0x32fb, 1, 3527 }, + { 0x32fc, 1, 3528 }, + { 0x32fd, 1, 3529 }, + { 0x32fe, 1, 3530 }, + { 0x3300, 5, 3531 }, + { 0x3301, 4, 3536 }, + { 0x3302, 5, 3540 }, + { 0x3303, 3, 3545 }, + { 0x3304, 5, 3548 }, + { 0x3305, 3, 3553 }, + { 0x3306, 3, 3556 }, + { 0x3307, 6, 3559 }, + { 0x3308, 4, 3565 }, + { 0x3309, 3, 3569 }, + { 0x330a, 3, 3572 }, + { 0x330b, 3, 3575 }, + { 0x330c, 4, 3578 }, + { 0x330d, 4, 3582 }, + { 0x330e, 4, 3586 }, + { 0x330f, 4, 3590 }, + { 0x3310, 4, 3594 }, + { 0x3311, 4, 3598 }, + { 0x3312, 4, 3602 }, + { 0x3313, 6, 3606 }, + { 0x3314, 2, 3612 }, + { 0x3315, 6, 3614 }, + { 0x3316, 6, 3620 }, + { 0x3317, 5, 3626 }, + { 0x3318, 4, 3631 }, + { 0x3319, 6, 3635 }, + { 0x331a, 6, 3641 }, + { 0x331b, 4, 3647 }, + { 0x331c, 3, 3651 }, + { 0x331d, 3, 3654 }, + { 0x331e, 4, 3657 }, + { 0x331f, 4, 3661 }, + { 0x3320, 5, 3665 }, + { 0x3321, 5, 3670 }, + { 0x3322, 3, 3675 }, + { 0x3323, 3, 3678 }, + { 0x3324, 4, 3681 }, + { 0x3325, 3, 3685 }, + { 0x3326, 3, 3688 }, + { 0x3327, 2, 3691 }, + { 0x3328, 2, 3693 }, + { 0x3329, 3, 3695 }, + { 0x332a, 3, 3698 }, + { 0x332b, 6, 3701 }, + { 0x332c, 4, 3707 }, + { 0x332d, 5, 3711 }, + { 0x332e, 6, 3716 }, + { 0x332f, 4, 3722 }, + { 0x3330, 3, 3726 }, + { 0x3331, 3, 3729 }, + { 0x3332, 6, 3732 }, + { 0x3333, 4, 3738 }, + { 0x3334, 6, 3742 }, + { 0x3335, 3, 3748 }, + { 0x3336, 5, 3751 }, + { 0x3337, 3, 3756 }, + { 0x3338, 4, 3759 }, + { 0x3339, 3, 3763 }, + { 0x333a, 4, 3766 }, + { 0x333b, 5, 3770 }, + { 0x333c, 4, 3775 }, + { 0x333d, 5, 3779 }, + { 0x333e, 4, 3784 }, + { 0x333f, 2, 3788 }, + { 0x3340, 5, 3790 }, + { 0x3341, 3, 3795 }, + { 0x3342, 3, 3798 }, + { 0x3343, 4, 3801 }, + { 0x3344, 3, 3805 }, + { 0x3345, 3, 3808 }, + { 0x3346, 3, 3811 }, + { 0x3347, 5, 3814 }, + { 0x3348, 4, 3819 }, + { 0x3349, 2, 3823 }, + { 0x334a, 6, 3825 }, + { 0x334b, 3, 3831 }, + { 0x334c, 5, 3834 }, + { 0x334d, 4, 3839 }, + { 0x334e, 4, 3843 }, + { 0x334f, 3, 3847 }, + { 0x3350, 3, 3850 }, + { 0x3351, 4, 3853 }, + { 0x3352, 2, 3857 }, + { 0x3353, 4, 3859 }, + { 0x3354, 5, 3863 }, + { 0x3355, 2, 3868 }, + { 0x3356, 6, 3870 }, + { 0x3357, 3, 3876 }, + { 0x3358, 2, 3879 }, + { 0x3359, 2, 3881 }, + { 0x335a, 2, 3883 }, + { 0x335b, 2, 3885 }, + { 0x335c, 2, 3887 }, + { 0x335d, 2, 3889 }, + { 0x335e, 2, 3891 }, + { 0x335f, 2, 3893 }, + { 0x3360, 2, 3895 }, + { 0x3361, 2, 3897 }, + { 0x3362, 3, 3899 }, + { 0x3363, 3, 3902 }, + { 0x3364, 3, 3905 }, + { 0x3365, 3, 3908 }, + { 0x3366, 3, 3911 }, + { 0x3367, 3, 3914 }, + { 0x3368, 3, 3917 }, + { 0x3369, 3, 3920 }, + { 0x336a, 3, 3923 }, + { 0x336b, 3, 3926 }, + { 0x336c, 3, 3929 }, + { 0x336d, 3, 3932 }, + { 0x336e, 3, 3935 }, + { 0x336f, 3, 3938 }, + { 0x3370, 3, 3941 }, + { 0x3371, 3, 3944 }, + { 0x3372, 2, 3947 }, + { 0x3373, 2, 3949 }, + { 0x3374, 3, 3951 }, + { 0x3375, 2, 3954 }, + { 0x3376, 2, 3956 }, + { 0x337b, 2, 3958 }, + { 0x337c, 2, 3960 }, + { 0x337d, 2, 3962 }, + { 0x337e, 2, 3964 }, + { 0x337f, 4, 3966 }, + { 0x3380, 2, 3970 }, + { 0x3381, 2, 3972 }, + { 0x3382, 2, 3974 }, + { 0x3383, 2, 3976 }, + { 0x3384, 2, 3978 }, + { 0x3385, 2, 3980 }, + { 0x3386, 2, 3982 }, + { 0x3387, 2, 3984 }, + { 0x3388, 3, 3986 }, + { 0x3389, 4, 3989 }, + { 0x338a, 2, 3993 }, + { 0x338b, 2, 3995 }, + { 0x338c, 2, 3997 }, + { 0x338d, 2, 3999 }, + { 0x338e, 2, 4001 }, + { 0x338f, 2, 4003 }, + { 0x3390, 2, 4005 }, + { 0x3391, 3, 4007 }, + { 0x3392, 3, 4010 }, + { 0x3393, 3, 4013 }, + { 0x3394, 3, 4016 }, + { 0x3395, 2, 4019 }, + { 0x3396, 2, 4021 }, + { 0x3397, 2, 4023 }, + { 0x3398, 2, 4025 }, + { 0x3399, 2, 4027 }, + { 0x339a, 2, 4029 }, + { 0x339b, 2, 4031 }, + { 0x339c, 2, 4033 }, + { 0x339d, 2, 4035 }, + { 0x339e, 2, 4037 }, + { 0x339f, 3, 4039 }, + { 0x33a0, 3, 4042 }, + { 0x33a1, 2, 4045 }, + { 0x33a2, 3, 4047 }, + { 0x33a3, 3, 4050 }, + { 0x33a4, 3, 4053 }, + { 0x33a5, 2, 4056 }, + { 0x33a6, 3, 4058 }, + { 0x33a7, 3, 4061 }, + { 0x33a8, 4, 4064 }, + { 0x33a9, 2, 4068 }, + { 0x33aa, 3, 4070 }, + { 0x33ab, 3, 4073 }, + { 0x33ac, 3, 4076 }, + { 0x33ad, 3, 4079 }, + { 0x33ae, 5, 4082 }, + { 0x33af, 6, 4087 }, + { 0x33b0, 2, 4093 }, + { 0x33b1, 2, 4095 }, + { 0x33b2, 2, 4097 }, + { 0x33b3, 2, 4099 }, + { 0x33b4, 2, 4101 }, + { 0x33b5, 2, 4103 }, + { 0x33b6, 2, 4105 }, + { 0x33b7, 2, 4107 }, + { 0x33b8, 2, 4109 }, + { 0x33b9, 2, 4111 }, + { 0x33ba, 2, 4113 }, + { 0x33bb, 2, 4115 }, + { 0x33bc, 2, 4117 }, + { 0x33bd, 2, 4119 }, + { 0x33be, 2, 4121 }, + { 0x33bf, 2, 4123 }, + { 0x33c0, 2, 4125 }, + { 0x33c1, 2, 4127 }, + { 0x33c2, 4, 4129 }, + { 0x33c3, 2, 4133 }, + { 0x33c4, 2, 4135 }, + { 0x33c5, 2, 4137 }, + { 0x33c6, 4, 4139 }, + { 0x33c7, 3, 4143 }, + { 0x33c8, 2, 4146 }, + { 0x33c9, 2, 4148 }, + { 0x33ca, 2, 4150 }, + { 0x33cb, 2, 4152 }, + { 0x33cc, 2, 4154 }, + { 0x33cd, 2, 4156 }, + { 0x33ce, 2, 4158 }, + { 0x33cf, 2, 4160 }, + { 0x33d0, 2, 4162 }, + { 0x33d1, 2, 4164 }, + { 0x33d2, 3, 4166 }, + { 0x33d3, 2, 4169 }, + { 0x33d4, 2, 4171 }, + { 0x33d5, 3, 4173 }, + { 0x33d6, 3, 4176 }, + { 0x33d7, 2, 4179 }, + { 0x33d8, 4, 4181 }, + { 0x33d9, 3, 4185 }, + { 0x33da, 2, 4188 }, + { 0x33db, 2, 4190 }, + { 0x33dc, 2, 4192 }, + { 0x33dd, 2, 4194 }, + { 0x33e0, 2, 4196 }, + { 0x33e1, 2, 4198 }, + { 0x33e2, 2, 4200 }, + { 0x33e3, 2, 4202 }, + { 0x33e4, 2, 4204 }, + { 0x33e5, 2, 4206 }, + { 0x33e6, 2, 4208 }, + { 0x33e7, 2, 4210 }, + { 0x33e8, 2, 4212 }, + { 0x33e9, 3, 4214 }, + { 0x33ea, 3, 4217 }, + { 0x33eb, 3, 4220 }, + { 0x33ec, 3, 4223 }, + { 0x33ed, 3, 4226 }, + { 0x33ee, 3, 4229 }, + { 0x33ef, 3, 4232 }, + { 0x33f0, 3, 4235 }, + { 0x33f1, 3, 4238 }, + { 0x33f2, 3, 4241 }, + { 0x33f3, 3, 4244 }, + { 0x33f4, 3, 4247 }, + { 0x33f5, 3, 4250 }, + { 0x33f6, 3, 4253 }, + { 0x33f7, 3, 4256 }, + { 0x33f8, 3, 4259 }, + { 0x33f9, 3, 4262 }, + { 0x33fa, 3, 4265 }, + { 0x33fb, 3, 4268 }, + { 0x33fc, 3, 4271 }, + { 0x33fd, 3, 4274 }, + { 0x33fe, 3, 4277 }, + { 0xf900, 1, 4280 }, + { 0xf901, 1, 4281 }, + { 0xf902, 1, 2840 }, + { 0xf903, 1, 4282 }, + { 0xf904, 1, 4283 }, + { 0xf905, 1, 4284 }, + { 0xf906, 1, 4285 }, + { 0xf907, 1, 2894 }, + { 0xf908, 1, 2894 }, + { 0xf909, 1, 4286 }, + { 0xf90a, 1, 2848 }, + { 0xf90b, 1, 4287 }, + { 0xf90c, 1, 4288 }, + { 0xf90d, 1, 4289 }, + { 0xf90e, 1, 4290 }, + { 0xf90f, 1, 4291 }, + { 0xf910, 1, 4292 }, + { 0xf911, 1, 4293 }, + { 0xf912, 1, 4294 }, + { 0xf913, 1, 4295 }, + { 0xf914, 1, 4296 }, + { 0xf915, 1, 4297 }, + { 0xf916, 1, 4298 }, + { 0xf917, 1, 4299 }, + { 0xf918, 1, 4300 }, + { 0xf919, 1, 4301 }, + { 0xf91a, 1, 4302 }, + { 0xf91b, 1, 4303 }, + { 0xf91c, 1, 4304 }, + { 0xf91d, 1, 4305 }, + { 0xf91e, 1, 4306 }, + { 0xf91f, 1, 4307 }, + { 0xf920, 1, 4308 }, + { 0xf921, 1, 4309 }, + { 0xf922, 1, 4310 }, + { 0xf923, 1, 4311 }, + { 0xf924, 1, 4312 }, + { 0xf925, 1, 4313 }, + { 0xf926, 1, 4314 }, + { 0xf927, 1, 4315 }, + { 0xf928, 1, 4316 }, + { 0xf929, 1, 4317 }, + { 0xf92a, 1, 4318 }, + { 0xf92b, 1, 4319 }, + { 0xf92c, 1, 4320 }, + { 0xf92d, 1, 4321 }, + { 0xf92e, 1, 4322 }, + { 0xf92f, 1, 4323 }, + { 0xf930, 1, 4324 }, + { 0xf931, 1, 4325 }, + { 0xf932, 1, 4326 }, + { 0xf933, 1, 4327 }, + { 0xf934, 1, 2806 }, + { 0xf935, 1, 4328 }, + { 0xf936, 1, 4329 }, + { 0xf937, 1, 4330 }, + { 0xf938, 1, 4331 }, + { 0xf939, 1, 4332 }, + { 0xf93a, 1, 4333 }, + { 0xf93b, 1, 4334 }, + { 0xf93c, 1, 4335 }, + { 0xf93d, 1, 4336 }, + { 0xf93e, 1, 4337 }, + { 0xf93f, 1, 4338 }, + { 0xf940, 1, 2879 }, + { 0xf941, 1, 4339 }, + { 0xf942, 1, 4340 }, + { 0xf943, 1, 4341 }, + { 0xf944, 1, 4342 }, + { 0xf945, 1, 4343 }, + { 0xf946, 1, 4344 }, + { 0xf947, 1, 4345 }, + { 0xf948, 1, 4346 }, + { 0xf949, 1, 4347 }, + { 0xf94a, 1, 4348 }, + { 0xf94b, 1, 4349 }, + { 0xf94c, 1, 4350 }, + { 0xf94d, 1, 4351 }, + { 0xf94e, 1, 4352 }, + { 0xf94f, 1, 4353 }, + { 0xf950, 1, 4354 }, + { 0xf951, 1, 4355 }, + { 0xf952, 1, 4356 }, + { 0xf953, 1, 4357 }, + { 0xf954, 1, 4358 }, + { 0xf955, 1, 4359 }, + { 0xf956, 1, 4360 }, + { 0xf957, 1, 4361 }, + { 0xf958, 1, 4362 }, + { 0xf959, 1, 4363 }, + { 0xf95a, 1, 4364 }, + { 0xf95b, 1, 4365 }, + { 0xf95c, 1, 4296 }, + { 0xf95d, 1, 4366 }, + { 0xf95e, 1, 4367 }, + { 0xf95f, 1, 4368 }, + { 0xf960, 1, 4369 }, + { 0xf961, 1, 4370 }, + { 0xf962, 1, 4371 }, + { 0xf963, 1, 4372 }, + { 0xf964, 1, 4373 }, + { 0xf965, 1, 4374 }, + { 0xf966, 1, 4375 }, + { 0xf967, 1, 4376 }, + { 0xf968, 1, 4377 }, + { 0xf969, 1, 4378 }, + { 0xf96a, 1, 4379 }, + { 0xf96b, 1, 4380 }, + { 0xf96c, 1, 4381 }, + { 0xf96d, 1, 4382 }, + { 0xf96e, 1, 4383 }, + { 0xf96f, 1, 4384 }, + { 0xf970, 1, 4385 }, + { 0xf971, 1, 2842 }, + { 0xf972, 1, 4386 }, + { 0xf973, 1, 4387 }, + { 0xf974, 1, 4388 }, + { 0xf975, 1, 4389 }, + { 0xf976, 1, 4390 }, + { 0xf977, 1, 4391 }, + { 0xf978, 1, 4392 }, + { 0xf979, 1, 4393 }, + { 0xf97a, 1, 4394 }, + { 0xf97b, 1, 4395 }, + { 0xf97c, 1, 4396 }, + { 0xf97d, 1, 4397 }, + { 0xf97e, 1, 4398 }, + { 0xf97f, 1, 4399 }, + { 0xf980, 1, 4400 }, + { 0xf981, 1, 2719 }, + { 0xf982, 1, 4401 }, + { 0xf983, 1, 4402 }, + { 0xf984, 1, 4403 }, + { 0xf985, 1, 4404 }, + { 0xf986, 1, 4405 }, + { 0xf987, 1, 4406 }, + { 0xf988, 1, 4407 }, + { 0xf989, 1, 4408 }, + { 0xf98a, 1, 2700 }, + { 0xf98b, 1, 4409 }, + { 0xf98c, 1, 4410 }, + { 0xf98d, 1, 4411 }, + { 0xf98e, 1, 4412 }, + { 0xf98f, 1, 4413 }, + { 0xf990, 1, 4414 }, + { 0xf991, 1, 4415 }, + { 0xf992, 1, 4416 }, + { 0xf993, 1, 4417 }, + { 0xf994, 1, 4418 }, + { 0xf995, 1, 4419 }, + { 0xf996, 1, 4420 }, + { 0xf997, 1, 4421 }, + { 0xf998, 1, 4422 }, + { 0xf999, 1, 4423 }, + { 0xf99a, 1, 4424 }, + { 0xf99b, 1, 4425 }, + { 0xf99c, 1, 4426 }, + { 0xf99d, 1, 4427 }, + { 0xf99e, 1, 4428 }, + { 0xf99f, 1, 4429 }, + { 0xf9a0, 1, 4430 }, + { 0xf9a1, 1, 4384 }, + { 0xf9a2, 1, 4431 }, + { 0xf9a3, 1, 4432 }, + { 0xf9a4, 1, 4433 }, + { 0xf9a5, 1, 4434 }, + { 0xf9a6, 1, 4435 }, + { 0xf9a7, 1, 4436 }, + { 0xf9a8, 1, 4437 }, + { 0xf9a9, 1, 4438 }, + { 0xf9aa, 1, 4368 }, + { 0xf9ab, 1, 4439 }, + { 0xf9ac, 1, 4440 }, + { 0xf9ad, 1, 4441 }, + { 0xf9ae, 1, 4442 }, + { 0xf9af, 1, 4443 }, + { 0xf9b0, 1, 4444 }, + { 0xf9b1, 1, 4445 }, + { 0xf9b2, 1, 4446 }, + { 0xf9b3, 1, 4447 }, + { 0xf9b4, 1, 4448 }, + { 0xf9b5, 1, 4449 }, + { 0xf9b6, 1, 4450 }, + { 0xf9b7, 1, 4451 }, + { 0xf9b8, 1, 4452 }, + { 0xf9b9, 1, 4453 }, + { 0xf9ba, 1, 4454 }, + { 0xf9bb, 1, 4455 }, + { 0xf9bc, 1, 4456 }, + { 0xf9bd, 1, 4457 }, + { 0xf9be, 1, 4458 }, + { 0xf9bf, 1, 4296 }, + { 0xf9c0, 1, 4459 }, + { 0xf9c1, 1, 4460 }, + { 0xf9c2, 1, 4461 }, + { 0xf9c3, 1, 4462 }, + { 0xf9c4, 1, 2893 }, + { 0xf9c5, 1, 4463 }, + { 0xf9c6, 1, 4464 }, + { 0xf9c7, 1, 4465 }, + { 0xf9c8, 1, 4466 }, + { 0xf9c9, 1, 4467 }, + { 0xf9ca, 1, 4468 }, + { 0xf9cb, 1, 4469 }, + { 0xf9cc, 1, 4470 }, + { 0xf9cd, 1, 4471 }, + { 0xf9ce, 1, 4472 }, + { 0xf9cf, 1, 4473 }, + { 0xf9d0, 1, 4474 }, + { 0xf9d1, 1, 3396 }, + { 0xf9d2, 1, 4475 }, + { 0xf9d3, 1, 4476 }, + { 0xf9d4, 1, 4477 }, + { 0xf9d5, 1, 4478 }, + { 0xf9d6, 1, 4479 }, + { 0xf9d7, 1, 4480 }, + { 0xf9d8, 1, 4481 }, + { 0xf9d9, 1, 4482 }, + { 0xf9da, 1, 4483 }, + { 0xf9db, 1, 4370 }, + { 0xf9dc, 1, 4484 }, + { 0xf9dd, 1, 4485 }, + { 0xf9de, 1, 4486 }, + { 0xf9df, 1, 4487 }, + { 0xf9e0, 1, 4488 }, + { 0xf9e1, 1, 4489 }, + { 0xf9e2, 1, 4490 }, + { 0xf9e3, 1, 4491 }, + { 0xf9e4, 1, 4492 }, + { 0xf9e5, 1, 4493 }, + { 0xf9e6, 1, 4494 }, + { 0xf9e7, 1, 4495 }, + { 0xf9e8, 1, 4496 }, + { 0xf9e9, 1, 2847 }, + { 0xf9ea, 1, 4497 }, + { 0xf9eb, 1, 4498 }, + { 0xf9ec, 1, 4499 }, + { 0xf9ed, 1, 4500 }, + { 0xf9ee, 1, 4501 }, + { 0xf9ef, 1, 4502 }, + { 0xf9f0, 1, 4503 }, + { 0xf9f1, 1, 4504 }, + { 0xf9f2, 1, 4505 }, + { 0xf9f3, 1, 4506 }, + { 0xf9f4, 1, 4507 }, + { 0xf9f5, 1, 4508 }, + { 0xf9f6, 1, 4509 }, + { 0xf9f7, 1, 2798 }, + { 0xf9f8, 1, 4510 }, + { 0xf9f9, 1, 4511 }, + { 0xf9fa, 1, 4512 }, + { 0xf9fb, 1, 4513 }, + { 0xf9fc, 1, 4514 }, + { 0xf9fd, 1, 4515 }, + { 0xf9fe, 1, 4516 }, + { 0xf9ff, 1, 4517 }, + { 0xfa00, 1, 4518 }, + { 0xfa01, 1, 4519 }, + { 0xfa02, 1, 4520 }, + { 0xfa03, 1, 4521 }, + { 0xfa04, 1, 4522 }, + { 0xfa05, 1, 4523 }, + { 0xfa06, 1, 4524 }, + { 0xfa07, 1, 4525 }, + { 0xfa08, 1, 2825 }, + { 0xfa09, 1, 4526 }, + { 0xfa0a, 1, 2828 }, + { 0xfa0b, 1, 4527 }, + { 0xfa0c, 1, 4528 }, + { 0xfa0d, 1, 4529 }, + { 0xfa10, 1, 4530 }, + { 0xfa12, 1, 4531 }, + { 0xfa15, 1, 4532 }, + { 0xfa16, 1, 4533 }, + { 0xfa17, 1, 4534 }, + { 0xfa18, 1, 4535 }, + { 0xfa19, 1, 4536 }, + { 0xfa1a, 1, 4537 }, + { 0xfa1b, 1, 4538 }, + { 0xfa1c, 1, 4539 }, + { 0xfa1d, 1, 4540 }, + { 0xfa1e, 1, 2805 }, + { 0xfa20, 1, 4541 }, + { 0xfa22, 1, 4542 }, + { 0xfa25, 1, 4543 }, + { 0xfa26, 1, 4544 }, + { 0xfa2a, 1, 4545 }, + { 0xfa2b, 1, 4546 }, + { 0xfa2c, 1, 4547 }, + { 0xfa2d, 1, 4548 }, + { 0xfa30, 1, 4549 }, + { 0xfa31, 1, 4550 }, + { 0xfa32, 1, 4551 }, + { 0xfa33, 1, 4552 }, + { 0xfa34, 1, 4553 }, + { 0xfa35, 1, 4554 }, + { 0xfa36, 1, 4555 }, + { 0xfa37, 1, 4556 }, + { 0xfa38, 1, 4557 }, + { 0xfa39, 1, 4558 }, + { 0xfa3a, 1, 4559 }, + { 0xfa3b, 1, 4560 }, + { 0xfa3c, 1, 2726 }, + { 0xfa3d, 1, 4561 }, + { 0xfa3e, 1, 4562 }, + { 0xfa3f, 1, 4563 }, + { 0xfa40, 1, 4564 }, + { 0xfa41, 1, 4565 }, + { 0xfa42, 1, 4566 }, + { 0xfa43, 1, 4567 }, + { 0xfa44, 1, 4568 }, + { 0xfa45, 1, 4569 }, + { 0xfa46, 1, 4570 }, + { 0xfa47, 1, 4571 }, + { 0xfa48, 1, 4572 }, + { 0xfa49, 1, 4573 }, + { 0xfa4a, 1, 4574 }, + { 0xfa4b, 1, 4575 }, + { 0xfa4c, 1, 3401 }, + { 0xfa4d, 1, 4576 }, + { 0xfa4e, 1, 4577 }, + { 0xfa4f, 1, 4578 }, + { 0xfa50, 1, 4579 }, + { 0xfa51, 1, 3405 }, + { 0xfa52, 1, 4580 }, + { 0xfa53, 1, 4581 }, + { 0xfa54, 1, 4582 }, + { 0xfa55, 1, 4583 }, + { 0xfa56, 1, 4584 }, + { 0xfa57, 1, 4420 }, + { 0xfa58, 1, 4585 }, + { 0xfa59, 1, 4586 }, + { 0xfa5a, 1, 4587 }, + { 0xfa5b, 1, 4588 }, + { 0xfa5c, 1, 4589 }, + { 0xfa5d, 1, 4590 }, + { 0xfa5e, 1, 4590 }, + { 0xfa5f, 1, 4591 }, + { 0xfa60, 1, 4592 }, + { 0xfa61, 1, 4593 }, + { 0xfa62, 1, 4594 }, + { 0xfa63, 1, 4595 }, + { 0xfa64, 1, 4596 }, + { 0xfa65, 1, 4597 }, + { 0xfa66, 1, 4598 }, + { 0xfa67, 1, 4543 }, + { 0xfa68, 1, 4599 }, + { 0xfa69, 1, 4600 }, + { 0xfa6a, 1, 4601 }, + { 0xfb00, 2, 4602 }, + { 0xfb01, 2, 4604 }, + { 0xfb02, 2, 4606 }, + { 0xfb03, 3, 4608 }, + { 0xfb04, 3, 4611 }, + { 0xfb05, 2, 4614 }, + { 0xfb06, 2, 4614 }, + { 0xfb13, 2, 4616 }, + { 0xfb14, 2, 4618 }, + { 0xfb15, 2, 4620 }, + { 0xfb16, 2, 4622 }, + { 0xfb17, 2, 4624 }, + { 0xfb1d, 2, 4626 }, + { 0xfb1f, 2, 4628 }, + { 0xfb20, 1, 4630 }, + { 0xfb21, 1, 2228 }, + { 0xfb22, 1, 2231 }, + { 0xfb23, 1, 4631 }, + { 0xfb24, 1, 4632 }, + { 0xfb25, 1, 4633 }, + { 0xfb26, 1, 4634 }, + { 0xfb27, 1, 4635 }, + { 0xfb28, 1, 4636 }, + { 0xfb29, 1, 2176 }, + { 0xfb2a, 2, 4637 }, + { 0xfb2b, 2, 4639 }, + { 0xfb2c, 3, 4641 }, + { 0xfb2d, 3, 4644 }, + { 0xfb2e, 2, 4647 }, + { 0xfb2f, 2, 4649 }, + { 0xfb30, 2, 4651 }, + { 0xfb31, 2, 4653 }, + { 0xfb32, 2, 4655 }, + { 0xfb33, 2, 4657 }, + { 0xfb34, 2, 4659 }, + { 0xfb35, 2, 4661 }, + { 0xfb36, 2, 4663 }, + { 0xfb38, 2, 4665 }, + { 0xfb39, 2, 4667 }, + { 0xfb3a, 2, 4669 }, + { 0xfb3b, 2, 4671 }, + { 0xfb3c, 2, 4673 }, + { 0xfb3e, 2, 4675 }, + { 0xfb40, 2, 4677 }, + { 0xfb41, 2, 4679 }, + { 0xfb43, 2, 4681 }, + { 0xfb44, 2, 4683 }, + { 0xfb46, 2, 4685 }, + { 0xfb47, 2, 4687 }, + { 0xfb48, 2, 4689 }, + { 0xfb49, 2, 4691 }, + { 0xfb4a, 2, 4693 }, + { 0xfb4b, 2, 4695 }, + { 0xfb4c, 2, 4697 }, + { 0xfb4d, 2, 4699 }, + { 0xfb4e, 2, 4701 }, + { 0xfb4f, 2, 4703 }, + { 0xfb50, 1, 4705 }, + { 0xfb51, 1, 4705 }, + { 0xfb52, 1, 4706 }, + { 0xfb53, 1, 4706 }, + { 0xfb54, 1, 4706 }, + { 0xfb55, 1, 4706 }, + { 0xfb56, 1, 4707 }, + { 0xfb57, 1, 4707 }, + { 0xfb58, 1, 4707 }, + { 0xfb59, 1, 4707 }, + { 0xfb5a, 1, 4708 }, + { 0xfb5b, 1, 4708 }, + { 0xfb5c, 1, 4708 }, + { 0xfb5d, 1, 4708 }, + { 0xfb5e, 1, 4709 }, + { 0xfb5f, 1, 4709 }, + { 0xfb60, 1, 4709 }, + { 0xfb61, 1, 4709 }, + { 0xfb62, 1, 4710 }, + { 0xfb63, 1, 4710 }, + { 0xfb64, 1, 4710 }, + { 0xfb65, 1, 4710 }, + { 0xfb66, 1, 4711 }, + { 0xfb67, 1, 4711 }, + { 0xfb68, 1, 4711 }, + { 0xfb69, 1, 4711 }, + { 0xfb6a, 1, 4712 }, + { 0xfb6b, 1, 4712 }, + { 0xfb6c, 1, 4712 }, + { 0xfb6d, 1, 4712 }, + { 0xfb6e, 1, 4713 }, + { 0xfb6f, 1, 4713 }, + { 0xfb70, 1, 4713 }, + { 0xfb71, 1, 4713 }, + { 0xfb72, 1, 4714 }, + { 0xfb73, 1, 4714 }, + { 0xfb74, 1, 4714 }, + { 0xfb75, 1, 4714 }, + { 0xfb76, 1, 4715 }, + { 0xfb77, 1, 4715 }, + { 0xfb78, 1, 4715 }, + { 0xfb79, 1, 4715 }, + { 0xfb7a, 1, 4716 }, + { 0xfb7b, 1, 4716 }, + { 0xfb7c, 1, 4716 }, + { 0xfb7d, 1, 4716 }, + { 0xfb7e, 1, 4717 }, + { 0xfb7f, 1, 4717 }, + { 0xfb80, 1, 4717 }, + { 0xfb81, 1, 4717 }, + { 0xfb82, 1, 4718 }, + { 0xfb83, 1, 4718 }, + { 0xfb84, 1, 4719 }, + { 0xfb85, 1, 4719 }, + { 0xfb86, 1, 4720 }, + { 0xfb87, 1, 4720 }, + { 0xfb88, 1, 4721 }, + { 0xfb89, 1, 4721 }, + { 0xfb8a, 1, 4722 }, + { 0xfb8b, 1, 4722 }, + { 0xfb8c, 1, 4723 }, + { 0xfb8d, 1, 4723 }, + { 0xfb8e, 1, 4724 }, + { 0xfb8f, 1, 4724 }, + { 0xfb90, 1, 4724 }, + { 0xfb91, 1, 4724 }, + { 0xfb92, 1, 4725 }, + { 0xfb93, 1, 4725 }, + { 0xfb94, 1, 4725 }, + { 0xfb95, 1, 4725 }, + { 0xfb96, 1, 4726 }, + { 0xfb97, 1, 4726 }, + { 0xfb98, 1, 4726 }, + { 0xfb99, 1, 4726 }, + { 0xfb9a, 1, 4727 }, + { 0xfb9b, 1, 4727 }, + { 0xfb9c, 1, 4727 }, + { 0xfb9d, 1, 4727 }, + { 0xfb9e, 1, 4728 }, + { 0xfb9f, 1, 4728 }, + { 0xfba0, 1, 4729 }, + { 0xfba1, 1, 4729 }, + { 0xfba2, 1, 4729 }, + { 0xfba3, 1, 4729 }, + { 0xfba4, 2, 802 }, + { 0xfba5, 2, 802 }, + { 0xfba6, 1, 4730 }, + { 0xfba7, 1, 4730 }, + { 0xfba8, 1, 4730 }, + { 0xfba9, 1, 4730 }, + { 0xfbaa, 1, 4731 }, + { 0xfbab, 1, 4731 }, + { 0xfbac, 1, 4731 }, + { 0xfbad, 1, 4731 }, + { 0xfbae, 1, 4732 }, + { 0xfbaf, 1, 4732 }, + { 0xfbb0, 2, 806 }, + { 0xfbb1, 2, 806 }, + { 0xfbd3, 1, 4733 }, + { 0xfbd4, 1, 4733 }, + { 0xfbd5, 1, 4733 }, + { 0xfbd6, 1, 4733 }, + { 0xfbd7, 1, 4734 }, + { 0xfbd8, 1, 4734 }, + { 0xfbd9, 1, 4735 }, + { 0xfbda, 1, 4735 }, + { 0xfbdb, 1, 4736 }, + { 0xfbdc, 1, 4736 }, + { 0xfbdd, 2, 798 }, + { 0xfbde, 1, 4737 }, + { 0xfbdf, 1, 4737 }, + { 0xfbe0, 1, 4738 }, + { 0xfbe1, 1, 4738 }, + { 0xfbe2, 1, 4739 }, + { 0xfbe3, 1, 4739 }, + { 0xfbe4, 1, 4740 }, + { 0xfbe5, 1, 4740 }, + { 0xfbe6, 1, 4740 }, + { 0xfbe7, 1, 4740 }, + { 0xfbe8, 1, 4741 }, + { 0xfbe9, 1, 4741 }, + { 0xfbea, 3, 4742 }, + { 0xfbeb, 3, 4742 }, + { 0xfbec, 3, 4745 }, + { 0xfbed, 3, 4745 }, + { 0xfbee, 3, 4748 }, + { 0xfbef, 3, 4748 }, + { 0xfbf0, 3, 4751 }, + { 0xfbf1, 3, 4751 }, + { 0xfbf2, 3, 4754 }, + { 0xfbf3, 3, 4754 }, + { 0xfbf4, 3, 4757 }, + { 0xfbf5, 3, 4757 }, + { 0xfbf6, 3, 4760 }, + { 0xfbf7, 3, 4760 }, + { 0xfbf8, 3, 4760 }, + { 0xfbf9, 3, 4763 }, + { 0xfbfa, 3, 4763 }, + { 0xfbfb, 3, 4763 }, + { 0xfbfc, 1, 4766 }, + { 0xfbfd, 1, 4766 }, + { 0xfbfe, 1, 4766 }, + { 0xfbff, 1, 4766 }, + { 0xfc00, 3, 4767 }, + { 0xfc01, 3, 4770 }, + { 0xfc02, 3, 4773 }, + { 0xfc03, 3, 4763 }, + { 0xfc04, 3, 4776 }, + { 0xfc05, 2, 4779 }, + { 0xfc06, 2, 4781 }, + { 0xfc07, 2, 4783 }, + { 0xfc08, 2, 4785 }, + { 0xfc09, 2, 4787 }, + { 0xfc0a, 2, 4789 }, + { 0xfc0b, 2, 4791 }, + { 0xfc0c, 2, 4793 }, + { 0xfc0d, 2, 4795 }, + { 0xfc0e, 2, 4797 }, + { 0xfc0f, 2, 4799 }, + { 0xfc10, 2, 4801 }, + { 0xfc11, 2, 4803 }, + { 0xfc12, 2, 4805 }, + { 0xfc13, 2, 4807 }, + { 0xfc14, 2, 4809 }, + { 0xfc15, 2, 4811 }, + { 0xfc16, 2, 4813 }, + { 0xfc17, 2, 4815 }, + { 0xfc18, 2, 4817 }, + { 0xfc19, 2, 4819 }, + { 0xfc1a, 2, 4821 }, + { 0xfc1b, 2, 4823 }, + { 0xfc1c, 2, 4825 }, + { 0xfc1d, 2, 4827 }, + { 0xfc1e, 2, 4829 }, + { 0xfc1f, 2, 4831 }, + { 0xfc20, 2, 4833 }, + { 0xfc21, 2, 4835 }, + { 0xfc22, 2, 4837 }, + { 0xfc23, 2, 4839 }, + { 0xfc24, 2, 4841 }, + { 0xfc25, 2, 4843 }, + { 0xfc26, 2, 4845 }, + { 0xfc27, 2, 4847 }, + { 0xfc28, 2, 4849 }, + { 0xfc29, 2, 4851 }, + { 0xfc2a, 2, 4853 }, + { 0xfc2b, 2, 4855 }, + { 0xfc2c, 2, 4857 }, + { 0xfc2d, 2, 4859 }, + { 0xfc2e, 2, 4861 }, + { 0xfc2f, 2, 4863 }, + { 0xfc30, 2, 4865 }, + { 0xfc31, 2, 4867 }, + { 0xfc32, 2, 4869 }, + { 0xfc33, 2, 4871 }, + { 0xfc34, 2, 4873 }, + { 0xfc35, 2, 4875 }, + { 0xfc36, 2, 4877 }, + { 0xfc37, 2, 4879 }, + { 0xfc38, 2, 4881 }, + { 0xfc39, 2, 4883 }, + { 0xfc3a, 2, 4885 }, + { 0xfc3b, 2, 4887 }, + { 0xfc3c, 2, 4889 }, + { 0xfc3d, 2, 4891 }, + { 0xfc3e, 2, 4893 }, + { 0xfc3f, 2, 4895 }, + { 0xfc40, 2, 4897 }, + { 0xfc41, 2, 4899 }, + { 0xfc42, 2, 4901 }, + { 0xfc43, 2, 4903 }, + { 0xfc44, 2, 4905 }, + { 0xfc45, 2, 4907 }, + { 0xfc46, 2, 4909 }, + { 0xfc47, 2, 4911 }, + { 0xfc48, 2, 4913 }, + { 0xfc49, 2, 4915 }, + { 0xfc4a, 2, 4917 }, + { 0xfc4b, 2, 4919 }, + { 0xfc4c, 2, 4921 }, + { 0xfc4d, 2, 4923 }, + { 0xfc4e, 2, 4925 }, + { 0xfc4f, 2, 4927 }, + { 0xfc50, 2, 4929 }, + { 0xfc51, 2, 4931 }, + { 0xfc52, 2, 4933 }, + { 0xfc53, 2, 4935 }, + { 0xfc54, 2, 4937 }, + { 0xfc55, 2, 4939 }, + { 0xfc56, 2, 4941 }, + { 0xfc57, 2, 4943 }, + { 0xfc58, 2, 4945 }, + { 0xfc59, 2, 4947 }, + { 0xfc5a, 2, 4949 }, + { 0xfc5b, 2, 4951 }, + { 0xfc5c, 2, 4953 }, + { 0xfc5d, 2, 4955 }, + { 0xfc5e, 3, 4957 }, + { 0xfc5f, 3, 4960 }, + { 0xfc60, 3, 4963 }, + { 0xfc61, 3, 4966 }, + { 0xfc62, 3, 4969 }, + { 0xfc63, 3, 4972 }, + { 0xfc64, 3, 4975 }, + { 0xfc65, 3, 4978 }, + { 0xfc66, 3, 4773 }, + { 0xfc67, 3, 4981 }, + { 0xfc68, 3, 4763 }, + { 0xfc69, 3, 4776 }, + { 0xfc6a, 2, 4984 }, + { 0xfc6b, 2, 4986 }, + { 0xfc6c, 2, 4785 }, + { 0xfc6d, 2, 4988 }, + { 0xfc6e, 2, 4787 }, + { 0xfc6f, 2, 4789 }, + { 0xfc70, 2, 4990 }, + { 0xfc71, 2, 4992 }, + { 0xfc72, 2, 4797 }, + { 0xfc73, 2, 4994 }, + { 0xfc74, 2, 4799 }, + { 0xfc75, 2, 4801 }, + { 0xfc76, 2, 4996 }, + { 0xfc77, 2, 4998 }, + { 0xfc78, 2, 4805 }, + { 0xfc79, 2, 5000 }, + { 0xfc7a, 2, 4807 }, + { 0xfc7b, 2, 4809 }, + { 0xfc7c, 2, 4867 }, + { 0xfc7d, 2, 4869 }, + { 0xfc7e, 2, 4875 }, + { 0xfc7f, 2, 4877 }, + { 0xfc80, 2, 4879 }, + { 0xfc81, 2, 4887 }, + { 0xfc82, 2, 4889 }, + { 0xfc83, 2, 4891 }, + { 0xfc84, 2, 4893 }, + { 0xfc85, 2, 4901 }, + { 0xfc86, 2, 4903 }, + { 0xfc87, 2, 4905 }, + { 0xfc88, 2, 5002 }, + { 0xfc89, 2, 4913 }, + { 0xfc8a, 2, 5004 }, + { 0xfc8b, 2, 5006 }, + { 0xfc8c, 2, 4925 }, + { 0xfc8d, 2, 5008 }, + { 0xfc8e, 2, 4927 }, + { 0xfc8f, 2, 4929 }, + { 0xfc90, 2, 4955 }, + { 0xfc91, 2, 5010 }, + { 0xfc92, 2, 5012 }, + { 0xfc93, 2, 4945 }, + { 0xfc94, 2, 5014 }, + { 0xfc95, 2, 4947 }, + { 0xfc96, 2, 4949 }, + { 0xfc97, 3, 4767 }, + { 0xfc98, 3, 4770 }, + { 0xfc99, 3, 5016 }, + { 0xfc9a, 3, 4773 }, + { 0xfc9b, 3, 5019 }, + { 0xfc9c, 2, 4779 }, + { 0xfc9d, 2, 4781 }, + { 0xfc9e, 2, 4783 }, + { 0xfc9f, 2, 4785 }, + { 0xfca0, 2, 5022 }, + { 0xfca1, 2, 4791 }, + { 0xfca2, 2, 4793 }, + { 0xfca3, 2, 4795 }, + { 0xfca4, 2, 4797 }, + { 0xfca5, 2, 5024 }, + { 0xfca6, 2, 4805 }, + { 0xfca7, 2, 4811 }, + { 0xfca8, 2, 4813 }, + { 0xfca9, 2, 4815 }, + { 0xfcaa, 2, 4817 }, + { 0xfcab, 2, 4819 }, + { 0xfcac, 2, 4823 }, + { 0xfcad, 2, 4825 }, + { 0xfcae, 2, 4827 }, + { 0xfcaf, 2, 4829 }, + { 0xfcb0, 2, 4831 }, + { 0xfcb1, 2, 4833 }, + { 0xfcb2, 2, 5026 }, + { 0xfcb3, 2, 4835 }, + { 0xfcb4, 2, 4837 }, + { 0xfcb5, 2, 4839 }, + { 0xfcb6, 2, 4841 }, + { 0xfcb7, 2, 4843 }, + { 0xfcb8, 2, 4845 }, + { 0xfcb9, 2, 4849 }, + { 0xfcba, 2, 4851 }, + { 0xfcbb, 2, 4853 }, + { 0xfcbc, 2, 4855 }, + { 0xfcbd, 2, 4857 }, + { 0xfcbe, 2, 4859 }, + { 0xfcbf, 2, 4861 }, + { 0xfcc0, 2, 4863 }, + { 0xfcc1, 2, 4865 }, + { 0xfcc2, 2, 4871 }, + { 0xfcc3, 2, 4873 }, + { 0xfcc4, 2, 4881 }, + { 0xfcc5, 2, 4883 }, + { 0xfcc6, 2, 4885 }, + { 0xfcc7, 2, 4887 }, + { 0xfcc8, 2, 4889 }, + { 0xfcc9, 2, 4895 }, + { 0xfcca, 2, 4897 }, + { 0xfccb, 2, 4899 }, + { 0xfccc, 2, 4901 }, + { 0xfccd, 2, 5028 }, + { 0xfcce, 2, 4907 }, + { 0xfccf, 2, 4909 }, + { 0xfcd0, 2, 4911 }, + { 0xfcd1, 2, 4913 }, + { 0xfcd2, 2, 4919 }, + { 0xfcd3, 2, 4921 }, + { 0xfcd4, 2, 4923 }, + { 0xfcd5, 2, 4925 }, + { 0xfcd6, 2, 5030 }, + { 0xfcd7, 2, 4931 }, + { 0xfcd8, 2, 4933 }, + { 0xfcd9, 2, 5032 }, + { 0xfcda, 2, 4939 }, + { 0xfcdb, 2, 4941 }, + { 0xfcdc, 2, 4943 }, + { 0xfcdd, 2, 4945 }, + { 0xfcde, 2, 5034 }, + { 0xfcdf, 3, 4773 }, + { 0xfce0, 3, 5019 }, + { 0xfce1, 2, 4785 }, + { 0xfce2, 2, 5022 }, + { 0xfce3, 2, 4797 }, + { 0xfce4, 2, 5024 }, + { 0xfce5, 2, 4805 }, + { 0xfce6, 2, 5036 }, + { 0xfce7, 2, 4831 }, + { 0xfce8, 2, 5038 }, + { 0xfce9, 2, 5040 }, + { 0xfcea, 2, 5042 }, + { 0xfceb, 2, 4887 }, + { 0xfcec, 2, 4889 }, + { 0xfced, 2, 4901 }, + { 0xfcee, 2, 4925 }, + { 0xfcef, 2, 5030 }, + { 0xfcf0, 2, 4945 }, + { 0xfcf1, 2, 5034 }, + { 0xfcf2, 3, 5044 }, + { 0xfcf3, 3, 5047 }, + { 0xfcf4, 3, 5050 }, + { 0xfcf5, 2, 5053 }, + { 0xfcf6, 2, 5055 }, + { 0xfcf7, 2, 5057 }, + { 0xfcf8, 2, 5059 }, + { 0xfcf9, 2, 5061 }, + { 0xfcfa, 2, 5063 }, + { 0xfcfb, 2, 5065 }, + { 0xfcfc, 2, 5067 }, + { 0xfcfd, 2, 5069 }, + { 0xfcfe, 2, 5071 }, + { 0xfcff, 2, 5073 }, + { 0xfd00, 2, 5075 }, + { 0xfd01, 2, 5077 }, + { 0xfd02, 2, 5079 }, + { 0xfd03, 2, 5081 }, + { 0xfd04, 2, 5083 }, + { 0xfd05, 2, 5085 }, + { 0xfd06, 2, 5087 }, + { 0xfd07, 2, 5089 }, + { 0xfd08, 2, 5091 }, + { 0xfd09, 2, 5093 }, + { 0xfd0a, 2, 5095 }, + { 0xfd0b, 2, 5097 }, + { 0xfd0c, 2, 5040 }, + { 0xfd0d, 2, 5099 }, + { 0xfd0e, 2, 5101 }, + { 0xfd0f, 2, 5103 }, + { 0xfd10, 2, 5105 }, + { 0xfd11, 2, 5053 }, + { 0xfd12, 2, 5055 }, + { 0xfd13, 2, 5057 }, + { 0xfd14, 2, 5059 }, + { 0xfd15, 2, 5061 }, + { 0xfd16, 2, 5063 }, + { 0xfd17, 2, 5065 }, + { 0xfd18, 2, 5067 }, + { 0xfd19, 2, 5069 }, + { 0xfd1a, 2, 5071 }, + { 0xfd1b, 2, 5073 }, + { 0xfd1c, 2, 5075 }, + { 0xfd1d, 2, 5077 }, + { 0xfd1e, 2, 5079 }, + { 0xfd1f, 2, 5081 }, + { 0xfd20, 2, 5083 }, + { 0xfd21, 2, 5085 }, + { 0xfd22, 2, 5087 }, + { 0xfd23, 2, 5089 }, + { 0xfd24, 2, 5091 }, + { 0xfd25, 2, 5093 }, + { 0xfd26, 2, 5095 }, + { 0xfd27, 2, 5097 }, + { 0xfd28, 2, 5040 }, + { 0xfd29, 2, 5099 }, + { 0xfd2a, 2, 5101 }, + { 0xfd2b, 2, 5103 }, + { 0xfd2c, 2, 5105 }, + { 0xfd2d, 2, 5093 }, + { 0xfd2e, 2, 5095 }, + { 0xfd2f, 2, 5097 }, + { 0xfd30, 2, 5040 }, + { 0xfd31, 2, 5038 }, + { 0xfd32, 2, 5042 }, + { 0xfd33, 2, 4847 }, + { 0xfd34, 2, 4825 }, + { 0xfd35, 2, 4827 }, + { 0xfd36, 2, 4829 }, + { 0xfd37, 2, 5093 }, + { 0xfd38, 2, 5095 }, + { 0xfd39, 2, 5097 }, + { 0xfd3a, 2, 4847 }, + { 0xfd3b, 2, 4849 }, + { 0xfd3c, 2, 5107 }, + { 0xfd3d, 2, 5107 }, + { 0xfd50, 3, 5109 }, + { 0xfd51, 3, 5112 }, + { 0xfd52, 3, 5112 }, + { 0xfd53, 3, 5115 }, + { 0xfd54, 3, 5118 }, + { 0xfd55, 3, 5121 }, + { 0xfd56, 3, 5124 }, + { 0xfd57, 3, 5127 }, + { 0xfd58, 3, 5130 }, + { 0xfd59, 3, 5130 }, + { 0xfd5a, 3, 5133 }, + { 0xfd5b, 3, 5136 }, + { 0xfd5c, 3, 5139 }, + { 0xfd5d, 3, 5142 }, + { 0xfd5e, 3, 5145 }, + { 0xfd5f, 3, 5148 }, + { 0xfd60, 3, 5148 }, + { 0xfd61, 3, 5151 }, + { 0xfd62, 3, 5154 }, + { 0xfd63, 3, 5154 }, + { 0xfd64, 3, 5157 }, + { 0xfd65, 3, 5157 }, + { 0xfd66, 3, 5160 }, + { 0xfd67, 3, 5163 }, + { 0xfd68, 3, 5163 }, + { 0xfd69, 3, 5166 }, + { 0xfd6a, 3, 5169 }, + { 0xfd6b, 3, 5169 }, + { 0xfd6c, 3, 5172 }, + { 0xfd6d, 3, 5172 }, + { 0xfd6e, 3, 5175 }, + { 0xfd6f, 3, 5178 }, + { 0xfd70, 3, 5178 }, + { 0xfd71, 3, 5181 }, + { 0xfd72, 3, 5181 }, + { 0xfd73, 3, 5184 }, + { 0xfd74, 3, 5187 }, + { 0xfd75, 3, 5190 }, + { 0xfd76, 3, 5193 }, + { 0xfd77, 3, 5193 }, + { 0xfd78, 3, 5196 }, + { 0xfd79, 3, 5199 }, + { 0xfd7a, 3, 5202 }, + { 0xfd7b, 3, 5205 }, + { 0xfd7c, 3, 5208 }, + { 0xfd7d, 3, 5208 }, + { 0xfd7e, 3, 5211 }, + { 0xfd7f, 3, 5214 }, + { 0xfd80, 3, 5217 }, + { 0xfd81, 3, 5220 }, + { 0xfd82, 3, 5223 }, + { 0xfd83, 3, 5226 }, + { 0xfd84, 3, 5226 }, + { 0xfd85, 3, 5229 }, + { 0xfd86, 3, 5229 }, + { 0xfd87, 3, 5232 }, + { 0xfd88, 3, 5232 }, + { 0xfd89, 3, 5235 }, + { 0xfd8a, 3, 5238 }, + { 0xfd8b, 3, 5241 }, + { 0xfd8c, 3, 5244 }, + { 0xfd8d, 3, 5247 }, + { 0xfd8e, 3, 5250 }, + { 0xfd8f, 3, 5253 }, + { 0xfd92, 3, 5256 }, + { 0xfd93, 3, 5259 }, + { 0xfd94, 3, 5262 }, + { 0xfd95, 3, 5265 }, + { 0xfd96, 3, 5268 }, + { 0xfd97, 3, 5271 }, + { 0xfd98, 3, 5271 }, + { 0xfd99, 3, 5274 }, + { 0xfd9a, 3, 5277 }, + { 0xfd9b, 3, 5280 }, + { 0xfd9c, 3, 5283 }, + { 0xfd9d, 3, 5283 }, + { 0xfd9e, 3, 5286 }, + { 0xfd9f, 3, 5289 }, + { 0xfda0, 3, 5292 }, + { 0xfda1, 3, 5295 }, + { 0xfda2, 3, 5298 }, + { 0xfda3, 3, 5301 }, + { 0xfda4, 3, 5304 }, + { 0xfda5, 3, 5307 }, + { 0xfda6, 3, 5310 }, + { 0xfda7, 3, 5313 }, + { 0xfda8, 3, 5316 }, + { 0xfda9, 3, 5319 }, + { 0xfdaa, 3, 5322 }, + { 0xfdab, 3, 5325 }, + { 0xfdac, 3, 5328 }, + { 0xfdad, 3, 5331 }, + { 0xfdae, 3, 5334 }, + { 0xfdaf, 3, 5337 }, + { 0xfdb0, 3, 5340 }, + { 0xfdb1, 3, 5343 }, + { 0xfdb2, 3, 5346 }, + { 0xfdb3, 3, 5349 }, + { 0xfdb4, 3, 5211 }, + { 0xfdb5, 3, 5217 }, + { 0xfdb6, 3, 5352 }, + { 0xfdb7, 3, 5355 }, + { 0xfdb8, 3, 5358 }, + { 0xfdb9, 3, 5361 }, + { 0xfdba, 3, 5364 }, + { 0xfdbb, 3, 5367 }, + { 0xfdbc, 3, 5364 }, + { 0xfdbd, 3, 5358 }, + { 0xfdbe, 3, 5370 }, + { 0xfdbf, 3, 5373 }, + { 0xfdc0, 3, 5376 }, + { 0xfdc1, 3, 5379 }, + { 0xfdc2, 3, 5382 }, + { 0xfdc3, 3, 5367 }, + { 0xfdc4, 3, 5190 }, + { 0xfdc5, 3, 5160 }, + { 0xfdc6, 3, 5385 }, + { 0xfdc7, 3, 5388 }, + { 0xfdf0, 3, 5391 }, + { 0xfdf1, 3, 5394 }, + { 0xfdf2, 4, 5397 }, + { 0xfdf3, 4, 5401 }, + { 0xfdf4, 4, 5405 }, + { 0xfdf5, 4, 5409 }, + { 0xfdf6, 4, 5413 }, + { 0xfdf7, 4, 5417 }, + { 0xfdf8, 4, 5421 }, + { 0xfdf9, 3, 5425 }, + { 0xfdfa, 18, 5428 }, + { 0xfdfb, 8, 5446 }, + { 0xfdfc, 4, 5454 }, + { 0xfe30, 2, 2139 }, + { 0xfe31, 1, 5458 }, + { 0xfe32, 1, 5459 }, + { 0xfe33, 1, 5460 }, + { 0xfe34, 1, 5460 }, + { 0xfe35, 1, 2179 }, + { 0xfe36, 1, 2180 }, + { 0xfe37, 1, 5461 }, + { 0xfe38, 1, 5462 }, + { 0xfe39, 1, 5463 }, + { 0xfe3a, 1, 5464 }, + { 0xfe3b, 1, 5465 }, + { 0xfe3c, 1, 5466 }, + { 0xfe3d, 1, 5467 }, + { 0xfe3e, 1, 5468 }, + { 0xfe3f, 1, 2425 }, + { 0xfe40, 1, 2426 }, + { 0xfe41, 1, 5469 }, + { 0xfe42, 1, 5470 }, + { 0xfe43, 1, 5471 }, + { 0xfe44, 1, 5472 }, + { 0xfe49, 2, 2156 }, + { 0xfe4a, 2, 2156 }, + { 0xfe4b, 2, 2156 }, + { 0xfe4c, 2, 2156 }, + { 0xfe4d, 1, 5460 }, + { 0xfe4e, 1, 5460 }, + { 0xfe4f, 1, 5460 }, + { 0xfe50, 1, 5473 }, + { 0xfe51, 1, 5474 }, + { 0xfe52, 1, 2138 }, + { 0xfe54, 1, 621 }, + { 0xfe55, 1, 5475 }, + { 0xfe56, 1, 5476 }, + { 0xfe57, 1, 5477 }, + { 0xfe58, 1, 5458 }, + { 0xfe59, 1, 2179 }, + { 0xfe5a, 1, 2180 }, + { 0xfe5b, 1, 5461 }, + { 0xfe5c, 1, 5462 }, + { 0xfe5d, 1, 5463 }, + { 0xfe5e, 1, 5464 }, + { 0xfe5f, 1, 5478 }, + { 0xfe60, 1, 5479 }, + { 0xfe61, 1, 5480 }, + { 0xfe62, 1, 2176 }, + { 0xfe63, 1, 5481 }, + { 0xfe64, 1, 5482 }, + { 0xfe65, 1, 5483 }, + { 0xfe66, 1, 2178 }, + { 0xfe68, 1, 5484 }, + { 0xfe69, 1, 5485 }, + { 0xfe6a, 1, 5486 }, + { 0xfe6b, 1, 5487 }, + { 0xfe70, 2, 5488 }, + { 0xfe71, 2, 5490 }, + { 0xfe72, 2, 5492 }, + { 0xfe74, 2, 5494 }, + { 0xfe76, 2, 5496 }, + { 0xfe77, 2, 5498 }, + { 0xfe78, 2, 5500 }, + { 0xfe79, 2, 5502 }, + { 0xfe7a, 2, 5504 }, + { 0xfe7b, 2, 5506 }, + { 0xfe7c, 2, 5508 }, + { 0xfe7d, 2, 5510 }, + { 0xfe7e, 2, 5512 }, + { 0xfe7f, 2, 5514 }, + { 0xfe80, 1, 5516 }, + { 0xfe81, 2, 784 }, + { 0xfe82, 2, 784 }, + { 0xfe83, 2, 786 }, + { 0xfe84, 2, 786 }, + { 0xfe85, 2, 788 }, + { 0xfe86, 2, 788 }, + { 0xfe87, 2, 790 }, + { 0xfe88, 2, 790 }, + { 0xfe89, 2, 792 }, + { 0xfe8a, 2, 792 }, + { 0xfe8b, 2, 792 }, + { 0xfe8c, 2, 792 }, + { 0xfe8d, 1, 5517 }, + { 0xfe8e, 1, 5517 }, + { 0xfe8f, 1, 5518 }, + { 0xfe90, 1, 5518 }, + { 0xfe91, 1, 5518 }, + { 0xfe92, 1, 5518 }, + { 0xfe93, 1, 5519 }, + { 0xfe94, 1, 5519 }, + { 0xfe95, 1, 5520 }, + { 0xfe96, 1, 5520 }, + { 0xfe97, 1, 5520 }, + { 0xfe98, 1, 5520 }, + { 0xfe99, 1, 5521 }, + { 0xfe9a, 1, 5521 }, + { 0xfe9b, 1, 5521 }, + { 0xfe9c, 1, 5521 }, + { 0xfe9d, 1, 5522 }, + { 0xfe9e, 1, 5522 }, + { 0xfe9f, 1, 5522 }, + { 0xfea0, 1, 5522 }, + { 0xfea1, 1, 5523 }, + { 0xfea2, 1, 5523 }, + { 0xfea3, 1, 5523 }, + { 0xfea4, 1, 5523 }, + { 0xfea5, 1, 5524 }, + { 0xfea6, 1, 5524 }, + { 0xfea7, 1, 5524 }, + { 0xfea8, 1, 5524 }, + { 0xfea9, 1, 5525 }, + { 0xfeaa, 1, 5525 }, + { 0xfeab, 1, 5526 }, + { 0xfeac, 1, 5526 }, + { 0xfead, 1, 5527 }, + { 0xfeae, 1, 5527 }, + { 0xfeaf, 1, 5528 }, + { 0xfeb0, 1, 5528 }, + { 0xfeb1, 1, 5529 }, + { 0xfeb2, 1, 5529 }, + { 0xfeb3, 1, 5529 }, + { 0xfeb4, 1, 5529 }, + { 0xfeb5, 1, 5530 }, + { 0xfeb6, 1, 5530 }, + { 0xfeb7, 1, 5530 }, + { 0xfeb8, 1, 5530 }, + { 0xfeb9, 1, 5531 }, + { 0xfeba, 1, 5531 }, + { 0xfebb, 1, 5531 }, + { 0xfebc, 1, 5531 }, + { 0xfebd, 1, 5532 }, + { 0xfebe, 1, 5532 }, + { 0xfebf, 1, 5532 }, + { 0xfec0, 1, 5532 }, + { 0xfec1, 1, 5533 }, + { 0xfec2, 1, 5533 }, + { 0xfec3, 1, 5533 }, + { 0xfec4, 1, 5533 }, + { 0xfec5, 1, 5534 }, + { 0xfec6, 1, 5534 }, + { 0xfec7, 1, 5534 }, + { 0xfec8, 1, 5534 }, + { 0xfec9, 1, 5535 }, + { 0xfeca, 1, 5535 }, + { 0xfecb, 1, 5535 }, + { 0xfecc, 1, 5535 }, + { 0xfecd, 1, 5536 }, + { 0xfece, 1, 5536 }, + { 0xfecf, 1, 5536 }, + { 0xfed0, 1, 5536 }, + { 0xfed1, 1, 5537 }, + { 0xfed2, 1, 5537 }, + { 0xfed3, 1, 5537 }, + { 0xfed4, 1, 5537 }, + { 0xfed5, 1, 5538 }, + { 0xfed6, 1, 5538 }, + { 0xfed7, 1, 5538 }, + { 0xfed8, 1, 5538 }, + { 0xfed9, 1, 5539 }, + { 0xfeda, 1, 5539 }, + { 0xfedb, 1, 5539 }, + { 0xfedc, 1, 5539 }, + { 0xfedd, 1, 5540 }, + { 0xfede, 1, 5540 }, + { 0xfedf, 1, 5540 }, + { 0xfee0, 1, 5540 }, + { 0xfee1, 1, 5541 }, + { 0xfee2, 1, 5541 }, + { 0xfee3, 1, 5541 }, + { 0xfee4, 1, 5541 }, + { 0xfee5, 1, 5542 }, + { 0xfee6, 1, 5542 }, + { 0xfee7, 1, 5542 }, + { 0xfee8, 1, 5542 }, + { 0xfee9, 1, 5543 }, + { 0xfeea, 1, 5543 }, + { 0xfeeb, 1, 5543 }, + { 0xfeec, 1, 5543 }, + { 0xfeed, 1, 5544 }, + { 0xfeee, 1, 5544 }, + { 0xfeef, 1, 4741 }, + { 0xfef0, 1, 4741 }, + { 0xfef1, 1, 5545 }, + { 0xfef2, 1, 5545 }, + { 0xfef3, 1, 5545 }, + { 0xfef4, 1, 5545 }, + { 0xfef5, 3, 5546 }, + { 0xfef6, 3, 5546 }, + { 0xfef7, 3, 5549 }, + { 0xfef8, 3, 5549 }, + { 0xfef9, 3, 5552 }, + { 0xfefa, 3, 5552 }, + { 0xfefb, 2, 5555 }, + { 0xfefc, 2, 5555 }, + { 0xff01, 1, 5477 }, + { 0xff02, 1, 5557 }, + { 0xff03, 1, 5478 }, + { 0xff04, 1, 5485 }, + { 0xff05, 1, 5486 }, + { 0xff06, 1, 5479 }, + { 0xff07, 1, 5558 }, + { 0xff08, 1, 2179 }, + { 0xff09, 1, 2180 }, + { 0xff0a, 1, 5480 }, + { 0xff0b, 1, 2176 }, + { 0xff0c, 1, 5473 }, + { 0xff0d, 1, 5481 }, + { 0xff0e, 1, 2138 }, + { 0xff0f, 1, 5559 }, + { 0xff10, 1, 2168 }, + { 0xff11, 1, 13 }, + { 0xff12, 1, 6 }, + { 0xff13, 1, 7 }, + { 0xff14, 1, 2170 }, + { 0xff15, 1, 2171 }, + { 0xff16, 1, 2172 }, + { 0xff17, 1, 2173 }, + { 0xff18, 1, 2174 }, + { 0xff19, 1, 2175 }, + { 0xff1a, 1, 5475 }, + { 0xff1b, 1, 621 }, + { 0xff1c, 1, 5482 }, + { 0xff1d, 1, 2178 }, + { 0xff1e, 1, 5483 }, + { 0xff1f, 1, 5476 }, + { 0xff20, 1, 5487 }, + { 0xff21, 1, 2649 }, + { 0xff22, 1, 2223 }, + { 0xff23, 1, 2190 }, + { 0xff24, 1, 2236 }, + { 0xff25, 1, 2225 }, + { 0xff26, 1, 2226 }, + { 0xff27, 1, 2650 }, + { 0xff28, 1, 2203 }, + { 0xff29, 1, 2205 }, + { 0xff2a, 1, 2651 }, + { 0xff2b, 1, 2222 }, + { 0xff2c, 1, 2206 }, + { 0xff2d, 1, 2227 }, + { 0xff2e, 1, 2207 }, + { 0xff2f, 1, 2652 }, + { 0xff30, 1, 2210 }, + { 0xff31, 1, 2211 }, + { 0xff32, 1, 2212 }, + { 0xff33, 1, 2653 }, + { 0xff34, 1, 2654 }, + { 0xff35, 1, 2655 }, + { 0xff36, 1, 2283 }, + { 0xff37, 1, 2656 }, + { 0xff38, 1, 2295 }, + { 0xff39, 1, 2657 }, + { 0xff3a, 1, 2220 }, + { 0xff3b, 1, 5560 }, + { 0xff3c, 1, 5484 }, + { 0xff3d, 1, 5561 }, + { 0xff3e, 1, 5562 }, + { 0xff3f, 1, 5460 }, + { 0xff40, 1, 2113 }, + { 0xff41, 1, 3 }, + { 0xff42, 1, 2658 }, + { 0xff43, 1, 2325 }, + { 0xff44, 1, 2237 }, + { 0xff45, 1, 2224 }, + { 0xff46, 1, 2659 }, + { 0xff47, 1, 2202 }, + { 0xff48, 1, 588 }, + { 0xff49, 1, 2169 }, + { 0xff4a, 1, 590 }, + { 0xff4b, 1, 2660 }, + { 0xff4c, 1, 610 }, + { 0xff4d, 1, 2326 }, + { 0xff4e, 1, 2181 }, + { 0xff4f, 1, 14 }, + { 0xff50, 1, 2661 }, + { 0xff51, 1, 2662 }, + { 0xff52, 1, 591 }, + { 0xff53, 1, 356 }, + { 0xff54, 1, 2663 }, + { 0xff55, 1, 2664 }, + { 0xff56, 1, 2308 }, + { 0xff57, 1, 595 }, + { 0xff58, 1, 611 }, + { 0xff59, 1, 596 }, + { 0xff5a, 1, 2665 }, + { 0xff5b, 1, 5461 }, + { 0xff5c, 1, 5563 }, + { 0xff5d, 1, 5462 }, + { 0xff5e, 1, 5564 }, + { 0xff5f, 1, 5565 }, + { 0xff60, 1, 5566 }, + { 0xff61, 1, 5567 }, + { 0xff62, 1, 5469 }, + { 0xff63, 1, 5470 }, + { 0xff64, 1, 5474 }, + { 0xff65, 1, 5568 }, + { 0xff66, 1, 3530 }, + { 0xff67, 1, 5569 }, + { 0xff68, 1, 5570 }, + { 0xff69, 1, 5571 }, + { 0xff6a, 1, 5572 }, + { 0xff6b, 1, 5573 }, + { 0xff6c, 1, 5574 }, + { 0xff6d, 1, 5575 }, + { 0xff6e, 1, 5576 }, + { 0xff6f, 1, 5577 }, + { 0xff70, 1, 5578 }, + { 0xff71, 1, 3484 }, + { 0xff72, 1, 3485 }, + { 0xff73, 1, 3486 }, + { 0xff74, 1, 3487 }, + { 0xff75, 1, 3488 }, + { 0xff76, 1, 3489 }, + { 0xff77, 1, 3490 }, + { 0xff78, 1, 3491 }, + { 0xff79, 1, 3492 }, + { 0xff7a, 1, 3493 }, + { 0xff7b, 1, 3494 }, + { 0xff7c, 1, 3495 }, + { 0xff7d, 1, 3496 }, + { 0xff7e, 1, 3497 }, + { 0xff7f, 1, 3498 }, + { 0xff80, 1, 3499 }, + { 0xff81, 1, 3500 }, + { 0xff82, 1, 3501 }, + { 0xff83, 1, 3502 }, + { 0xff84, 1, 3503 }, + { 0xff85, 1, 3504 }, + { 0xff86, 1, 3505 }, + { 0xff87, 1, 3506 }, + { 0xff88, 1, 3507 }, + { 0xff89, 1, 3508 }, + { 0xff8a, 1, 3509 }, + { 0xff8b, 1, 3510 }, + { 0xff8c, 1, 3511 }, + { 0xff8d, 1, 3512 }, + { 0xff8e, 1, 3513 }, + { 0xff8f, 1, 3514 }, + { 0xff90, 1, 3515 }, + { 0xff91, 1, 3516 }, + { 0xff92, 1, 3517 }, + { 0xff93, 1, 3518 }, + { 0xff94, 1, 3519 }, + { 0xff95, 1, 3520 }, + { 0xff96, 1, 3521 }, + { 0xff97, 1, 3522 }, + { 0xff98, 1, 3523 }, + { 0xff99, 1, 3524 }, + { 0xff9a, 1, 3525 }, + { 0xff9b, 1, 3526 }, + { 0xff9c, 1, 3527 }, + { 0xff9d, 1, 5579 }, + { 0xff9e, 1, 5580 }, + { 0xff9f, 1, 5581 }, + { 0xffa0, 1, 3074 }, + { 0xffa1, 1, 3023 }, + { 0xffa2, 1, 3024 }, + { 0xffa3, 1, 3025 }, + { 0xffa4, 1, 3026 }, + { 0xffa5, 1, 3027 }, + { 0xffa6, 1, 3028 }, + { 0xffa7, 1, 3029 }, + { 0xffa8, 1, 3030 }, + { 0xffa9, 1, 3031 }, + { 0xffaa, 1, 3032 }, + { 0xffab, 1, 3033 }, + { 0xffac, 1, 3034 }, + { 0xffad, 1, 3035 }, + { 0xffae, 1, 3036 }, + { 0xffaf, 1, 3037 }, + { 0xffb0, 1, 3038 }, + { 0xffb1, 1, 3039 }, + { 0xffb2, 1, 3040 }, + { 0xffb3, 1, 3041 }, + { 0xffb4, 1, 3042 }, + { 0xffb5, 1, 3043 }, + { 0xffb6, 1, 3044 }, + { 0xffb7, 1, 3045 }, + { 0xffb8, 1, 3046 }, + { 0xffb9, 1, 3047 }, + { 0xffba, 1, 3048 }, + { 0xffbb, 1, 3049 }, + { 0xffbc, 1, 3050 }, + { 0xffbd, 1, 3051 }, + { 0xffbe, 1, 3052 }, + { 0xffc2, 1, 3053 }, + { 0xffc3, 1, 3054 }, + { 0xffc4, 1, 3055 }, + { 0xffc5, 1, 3056 }, + { 0xffc6, 1, 3057 }, + { 0xffc7, 1, 3058 }, + { 0xffca, 1, 3059 }, + { 0xffcb, 1, 3060 }, + { 0xffcc, 1, 3061 }, + { 0xffcd, 1, 3062 }, + { 0xffce, 1, 3063 }, + { 0xffcf, 1, 3064 }, + { 0xffd2, 1, 3065 }, + { 0xffd3, 1, 3066 }, + { 0xffd4, 1, 3067 }, + { 0xffd5, 1, 3068 }, + { 0xffd6, 1, 3069 }, + { 0xffd7, 1, 3070 }, + { 0xffda, 1, 3071 }, + { 0xffdb, 1, 3072 }, + { 0xffdc, 1, 3073 }, + { 0xffe0, 1, 5582 }, + { 0xffe1, 1, 5583 }, + { 0xffe2, 1, 5584 }, + { 0xffe3, 2, 4 }, + { 0xffe4, 1, 5585 }, + { 0xffe5, 1, 5586 }, + { 0xffe6, 1, 5587 }, + { 0xffe8, 1, 5588 }, + { 0xffe9, 1, 5589 }, + { 0xffea, 1, 5590 }, + { 0xffeb, 1, 5591 }, + { 0xffec, 1, 5592 }, + { 0xffed, 1, 5593 }, + { 0xffee, 1, 5594 }, + { 0x1d15e, 2, 5595 }, + { 0x1d15f, 2, 5597 }, + { 0x1d160, 3, 5599 }, + { 0x1d161, 3, 5602 }, + { 0x1d162, 3, 5605 }, + { 0x1d163, 3, 5608 }, + { 0x1d164, 3, 5611 }, + { 0x1d1bb, 2, 5614 }, + { 0x1d1bc, 2, 5616 }, + { 0x1d1bd, 3, 5618 }, + { 0x1d1be, 3, 5621 }, + { 0x1d1bf, 3, 5624 }, + { 0x1d1c0, 3, 5627 }, + { 0x1d400, 1, 2649 }, + { 0x1d401, 1, 2223 }, + { 0x1d402, 1, 2190 }, + { 0x1d403, 1, 2236 }, + { 0x1d404, 1, 2225 }, + { 0x1d405, 1, 2226 }, + { 0x1d406, 1, 2650 }, + { 0x1d407, 1, 2203 }, + { 0x1d408, 1, 2205 }, + { 0x1d409, 1, 2651 }, + { 0x1d40a, 1, 2222 }, + { 0x1d40b, 1, 2206 }, + { 0x1d40c, 1, 2227 }, + { 0x1d40d, 1, 2207 }, + { 0x1d40e, 1, 2652 }, + { 0x1d40f, 1, 2210 }, + { 0x1d410, 1, 2211 }, + { 0x1d411, 1, 2212 }, + { 0x1d412, 1, 2653 }, + { 0x1d413, 1, 2654 }, + { 0x1d414, 1, 2655 }, + { 0x1d415, 1, 2283 }, + { 0x1d416, 1, 2656 }, + { 0x1d417, 1, 2295 }, + { 0x1d418, 1, 2657 }, + { 0x1d419, 1, 2220 }, + { 0x1d41a, 1, 3 }, + { 0x1d41b, 1, 2658 }, + { 0x1d41c, 1, 2325 }, + { 0x1d41d, 1, 2237 }, + { 0x1d41e, 1, 2224 }, + { 0x1d41f, 1, 2659 }, + { 0x1d420, 1, 2202 }, + { 0x1d421, 1, 588 }, + { 0x1d422, 1, 2169 }, + { 0x1d423, 1, 590 }, + { 0x1d424, 1, 2660 }, + { 0x1d425, 1, 610 }, + { 0x1d426, 1, 2326 }, + { 0x1d427, 1, 2181 }, + { 0x1d428, 1, 14 }, + { 0x1d429, 1, 2661 }, + { 0x1d42a, 1, 2662 }, + { 0x1d42b, 1, 591 }, + { 0x1d42c, 1, 356 }, + { 0x1d42d, 1, 2663 }, + { 0x1d42e, 1, 2664 }, + { 0x1d42f, 1, 2308 }, + { 0x1d430, 1, 595 }, + { 0x1d431, 1, 611 }, + { 0x1d432, 1, 596 }, + { 0x1d433, 1, 2665 }, + { 0x1d434, 1, 2649 }, + { 0x1d435, 1, 2223 }, + { 0x1d436, 1, 2190 }, + { 0x1d437, 1, 2236 }, + { 0x1d438, 1, 2225 }, + { 0x1d439, 1, 2226 }, + { 0x1d43a, 1, 2650 }, + { 0x1d43b, 1, 2203 }, + { 0x1d43c, 1, 2205 }, + { 0x1d43d, 1, 2651 }, + { 0x1d43e, 1, 2222 }, + { 0x1d43f, 1, 2206 }, + { 0x1d440, 1, 2227 }, + { 0x1d441, 1, 2207 }, + { 0x1d442, 1, 2652 }, + { 0x1d443, 1, 2210 }, + { 0x1d444, 1, 2211 }, + { 0x1d445, 1, 2212 }, + { 0x1d446, 1, 2653 }, + { 0x1d447, 1, 2654 }, + { 0x1d448, 1, 2655 }, + { 0x1d449, 1, 2283 }, + { 0x1d44a, 1, 2656 }, + { 0x1d44b, 1, 2295 }, + { 0x1d44c, 1, 2657 }, + { 0x1d44d, 1, 2220 }, + { 0x1d44e, 1, 3 }, + { 0x1d44f, 1, 2658 }, + { 0x1d450, 1, 2325 }, + { 0x1d451, 1, 2237 }, + { 0x1d452, 1, 2224 }, + { 0x1d453, 1, 2659 }, + { 0x1d454, 1, 2202 }, + { 0x1d456, 1, 2169 }, + { 0x1d457, 1, 590 }, + { 0x1d458, 1, 2660 }, + { 0x1d459, 1, 610 }, + { 0x1d45a, 1, 2326 }, + { 0x1d45b, 1, 2181 }, + { 0x1d45c, 1, 14 }, + { 0x1d45d, 1, 2661 }, + { 0x1d45e, 1, 2662 }, + { 0x1d45f, 1, 591 }, + { 0x1d460, 1, 356 }, + { 0x1d461, 1, 2663 }, + { 0x1d462, 1, 2664 }, + { 0x1d463, 1, 2308 }, + { 0x1d464, 1, 595 }, + { 0x1d465, 1, 611 }, + { 0x1d466, 1, 596 }, + { 0x1d467, 1, 2665 }, + { 0x1d468, 1, 2649 }, + { 0x1d469, 1, 2223 }, + { 0x1d46a, 1, 2190 }, + { 0x1d46b, 1, 2236 }, + { 0x1d46c, 1, 2225 }, + { 0x1d46d, 1, 2226 }, + { 0x1d46e, 1, 2650 }, + { 0x1d46f, 1, 2203 }, + { 0x1d470, 1, 2205 }, + { 0x1d471, 1, 2651 }, + { 0x1d472, 1, 2222 }, + { 0x1d473, 1, 2206 }, + { 0x1d474, 1, 2227 }, + { 0x1d475, 1, 2207 }, + { 0x1d476, 1, 2652 }, + { 0x1d477, 1, 2210 }, + { 0x1d478, 1, 2211 }, + { 0x1d479, 1, 2212 }, + { 0x1d47a, 1, 2653 }, + { 0x1d47b, 1, 2654 }, + { 0x1d47c, 1, 2655 }, + { 0x1d47d, 1, 2283 }, + { 0x1d47e, 1, 2656 }, + { 0x1d47f, 1, 2295 }, + { 0x1d480, 1, 2657 }, + { 0x1d481, 1, 2220 }, + { 0x1d482, 1, 3 }, + { 0x1d483, 1, 2658 }, + { 0x1d484, 1, 2325 }, + { 0x1d485, 1, 2237 }, + { 0x1d486, 1, 2224 }, + { 0x1d487, 1, 2659 }, + { 0x1d488, 1, 2202 }, + { 0x1d489, 1, 588 }, + { 0x1d48a, 1, 2169 }, + { 0x1d48b, 1, 590 }, + { 0x1d48c, 1, 2660 }, + { 0x1d48d, 1, 610 }, + { 0x1d48e, 1, 2326 }, + { 0x1d48f, 1, 2181 }, + { 0x1d490, 1, 14 }, + { 0x1d491, 1, 2661 }, + { 0x1d492, 1, 2662 }, + { 0x1d493, 1, 591 }, + { 0x1d494, 1, 356 }, + { 0x1d495, 1, 2663 }, + { 0x1d496, 1, 2664 }, + { 0x1d497, 1, 2308 }, + { 0x1d498, 1, 595 }, + { 0x1d499, 1, 611 }, + { 0x1d49a, 1, 596 }, + { 0x1d49b, 1, 2665 }, + { 0x1d49c, 1, 2649 }, + { 0x1d49e, 1, 2190 }, + { 0x1d49f, 1, 2236 }, + { 0x1d4a2, 1, 2650 }, + { 0x1d4a5, 1, 2651 }, + { 0x1d4a6, 1, 2222 }, + { 0x1d4a9, 1, 2207 }, + { 0x1d4aa, 1, 2652 }, + { 0x1d4ab, 1, 2210 }, + { 0x1d4ac, 1, 2211 }, + { 0x1d4ae, 1, 2653 }, + { 0x1d4af, 1, 2654 }, + { 0x1d4b0, 1, 2655 }, + { 0x1d4b1, 1, 2283 }, + { 0x1d4b2, 1, 2656 }, + { 0x1d4b3, 1, 2295 }, + { 0x1d4b4, 1, 2657 }, + { 0x1d4b5, 1, 2220 }, + { 0x1d4b6, 1, 3 }, + { 0x1d4b7, 1, 2658 }, + { 0x1d4b8, 1, 2325 }, + { 0x1d4b9, 1, 2237 }, + { 0x1d4bb, 1, 2659 }, + { 0x1d4bd, 1, 588 }, + { 0x1d4be, 1, 2169 }, + { 0x1d4bf, 1, 590 }, + { 0x1d4c0, 1, 2660 }, + { 0x1d4c2, 1, 2326 }, + { 0x1d4c3, 1, 2181 }, + { 0x1d4c5, 1, 2661 }, + { 0x1d4c6, 1, 2662 }, + { 0x1d4c7, 1, 591 }, + { 0x1d4c8, 1, 356 }, + { 0x1d4c9, 1, 2663 }, + { 0x1d4ca, 1, 2664 }, + { 0x1d4cb, 1, 2308 }, + { 0x1d4cc, 1, 595 }, + { 0x1d4cd, 1, 611 }, + { 0x1d4ce, 1, 596 }, + { 0x1d4cf, 1, 2665 }, + { 0x1d4d0, 1, 2649 }, + { 0x1d4d1, 1, 2223 }, + { 0x1d4d2, 1, 2190 }, + { 0x1d4d3, 1, 2236 }, + { 0x1d4d4, 1, 2225 }, + { 0x1d4d5, 1, 2226 }, + { 0x1d4d6, 1, 2650 }, + { 0x1d4d7, 1, 2203 }, + { 0x1d4d8, 1, 2205 }, + { 0x1d4d9, 1, 2651 }, + { 0x1d4da, 1, 2222 }, + { 0x1d4db, 1, 2206 }, + { 0x1d4dc, 1, 2227 }, + { 0x1d4dd, 1, 2207 }, + { 0x1d4de, 1, 2652 }, + { 0x1d4df, 1, 2210 }, + { 0x1d4e0, 1, 2211 }, + { 0x1d4e1, 1, 2212 }, + { 0x1d4e2, 1, 2653 }, + { 0x1d4e3, 1, 2654 }, + { 0x1d4e4, 1, 2655 }, + { 0x1d4e5, 1, 2283 }, + { 0x1d4e6, 1, 2656 }, + { 0x1d4e7, 1, 2295 }, + { 0x1d4e8, 1, 2657 }, + { 0x1d4e9, 1, 2220 }, + { 0x1d4ea, 1, 3 }, + { 0x1d4eb, 1, 2658 }, + { 0x1d4ec, 1, 2325 }, + { 0x1d4ed, 1, 2237 }, + { 0x1d4ee, 1, 2224 }, + { 0x1d4ef, 1, 2659 }, + { 0x1d4f0, 1, 2202 }, + { 0x1d4f1, 1, 588 }, + { 0x1d4f2, 1, 2169 }, + { 0x1d4f3, 1, 590 }, + { 0x1d4f4, 1, 2660 }, + { 0x1d4f5, 1, 610 }, + { 0x1d4f6, 1, 2326 }, + { 0x1d4f7, 1, 2181 }, + { 0x1d4f8, 1, 14 }, + { 0x1d4f9, 1, 2661 }, + { 0x1d4fa, 1, 2662 }, + { 0x1d4fb, 1, 591 }, + { 0x1d4fc, 1, 356 }, + { 0x1d4fd, 1, 2663 }, + { 0x1d4fe, 1, 2664 }, + { 0x1d4ff, 1, 2308 }, + { 0x1d500, 1, 595 }, + { 0x1d501, 1, 611 }, + { 0x1d502, 1, 596 }, + { 0x1d503, 1, 2665 }, + { 0x1d504, 1, 2649 }, + { 0x1d505, 1, 2223 }, + { 0x1d507, 1, 2236 }, + { 0x1d508, 1, 2225 }, + { 0x1d509, 1, 2226 }, + { 0x1d50a, 1, 2650 }, + { 0x1d50d, 1, 2651 }, + { 0x1d50e, 1, 2222 }, + { 0x1d50f, 1, 2206 }, + { 0x1d510, 1, 2227 }, + { 0x1d511, 1, 2207 }, + { 0x1d512, 1, 2652 }, + { 0x1d513, 1, 2210 }, + { 0x1d514, 1, 2211 }, + { 0x1d516, 1, 2653 }, + { 0x1d517, 1, 2654 }, + { 0x1d518, 1, 2655 }, + { 0x1d519, 1, 2283 }, + { 0x1d51a, 1, 2656 }, + { 0x1d51b, 1, 2295 }, + { 0x1d51c, 1, 2657 }, + { 0x1d51e, 1, 3 }, + { 0x1d51f, 1, 2658 }, + { 0x1d520, 1, 2325 }, + { 0x1d521, 1, 2237 }, + { 0x1d522, 1, 2224 }, + { 0x1d523, 1, 2659 }, + { 0x1d524, 1, 2202 }, + { 0x1d525, 1, 588 }, + { 0x1d526, 1, 2169 }, + { 0x1d527, 1, 590 }, + { 0x1d528, 1, 2660 }, + { 0x1d529, 1, 610 }, + { 0x1d52a, 1, 2326 }, + { 0x1d52b, 1, 2181 }, + { 0x1d52c, 1, 14 }, + { 0x1d52d, 1, 2661 }, + { 0x1d52e, 1, 2662 }, + { 0x1d52f, 1, 591 }, + { 0x1d530, 1, 356 }, + { 0x1d531, 1, 2663 }, + { 0x1d532, 1, 2664 }, + { 0x1d533, 1, 2308 }, + { 0x1d534, 1, 595 }, + { 0x1d535, 1, 611 }, + { 0x1d536, 1, 596 }, + { 0x1d537, 1, 2665 }, + { 0x1d538, 1, 2649 }, + { 0x1d539, 1, 2223 }, + { 0x1d53b, 1, 2236 }, + { 0x1d53c, 1, 2225 }, + { 0x1d53d, 1, 2226 }, + { 0x1d53e, 1, 2650 }, + { 0x1d540, 1, 2205 }, + { 0x1d541, 1, 2651 }, + { 0x1d542, 1, 2222 }, + { 0x1d543, 1, 2206 }, + { 0x1d544, 1, 2227 }, + { 0x1d546, 1, 2652 }, + { 0x1d54a, 1, 2653 }, + { 0x1d54b, 1, 2654 }, + { 0x1d54c, 1, 2655 }, + { 0x1d54d, 1, 2283 }, + { 0x1d54e, 1, 2656 }, + { 0x1d54f, 1, 2295 }, + { 0x1d550, 1, 2657 }, + { 0x1d552, 1, 3 }, + { 0x1d553, 1, 2658 }, + { 0x1d554, 1, 2325 }, + { 0x1d555, 1, 2237 }, + { 0x1d556, 1, 2224 }, + { 0x1d557, 1, 2659 }, + { 0x1d558, 1, 2202 }, + { 0x1d559, 1, 588 }, + { 0x1d55a, 1, 2169 }, + { 0x1d55b, 1, 590 }, + { 0x1d55c, 1, 2660 }, + { 0x1d55d, 1, 610 }, + { 0x1d55e, 1, 2326 }, + { 0x1d55f, 1, 2181 }, + { 0x1d560, 1, 14 }, + { 0x1d561, 1, 2661 }, + { 0x1d562, 1, 2662 }, + { 0x1d563, 1, 591 }, + { 0x1d564, 1, 356 }, + { 0x1d565, 1, 2663 }, + { 0x1d566, 1, 2664 }, + { 0x1d567, 1, 2308 }, + { 0x1d568, 1, 595 }, + { 0x1d569, 1, 611 }, + { 0x1d56a, 1, 596 }, + { 0x1d56b, 1, 2665 }, + { 0x1d56c, 1, 2649 }, + { 0x1d56d, 1, 2223 }, + { 0x1d56e, 1, 2190 }, + { 0x1d56f, 1, 2236 }, + { 0x1d570, 1, 2225 }, + { 0x1d571, 1, 2226 }, + { 0x1d572, 1, 2650 }, + { 0x1d573, 1, 2203 }, + { 0x1d574, 1, 2205 }, + { 0x1d575, 1, 2651 }, + { 0x1d576, 1, 2222 }, + { 0x1d577, 1, 2206 }, + { 0x1d578, 1, 2227 }, + { 0x1d579, 1, 2207 }, + { 0x1d57a, 1, 2652 }, + { 0x1d57b, 1, 2210 }, + { 0x1d57c, 1, 2211 }, + { 0x1d57d, 1, 2212 }, + { 0x1d57e, 1, 2653 }, + { 0x1d57f, 1, 2654 }, + { 0x1d580, 1, 2655 }, + { 0x1d581, 1, 2283 }, + { 0x1d582, 1, 2656 }, + { 0x1d583, 1, 2295 }, + { 0x1d584, 1, 2657 }, + { 0x1d585, 1, 2220 }, + { 0x1d586, 1, 3 }, + { 0x1d587, 1, 2658 }, + { 0x1d588, 1, 2325 }, + { 0x1d589, 1, 2237 }, + { 0x1d58a, 1, 2224 }, + { 0x1d58b, 1, 2659 }, + { 0x1d58c, 1, 2202 }, + { 0x1d58d, 1, 588 }, + { 0x1d58e, 1, 2169 }, + { 0x1d58f, 1, 590 }, + { 0x1d590, 1, 2660 }, + { 0x1d591, 1, 610 }, + { 0x1d592, 1, 2326 }, + { 0x1d593, 1, 2181 }, + { 0x1d594, 1, 14 }, + { 0x1d595, 1, 2661 }, + { 0x1d596, 1, 2662 }, + { 0x1d597, 1, 591 }, + { 0x1d598, 1, 356 }, + { 0x1d599, 1, 2663 }, + { 0x1d59a, 1, 2664 }, + { 0x1d59b, 1, 2308 }, + { 0x1d59c, 1, 595 }, + { 0x1d59d, 1, 611 }, + { 0x1d59e, 1, 596 }, + { 0x1d59f, 1, 2665 }, + { 0x1d5a0, 1, 2649 }, + { 0x1d5a1, 1, 2223 }, + { 0x1d5a2, 1, 2190 }, + { 0x1d5a3, 1, 2236 }, + { 0x1d5a4, 1, 2225 }, + { 0x1d5a5, 1, 2226 }, + { 0x1d5a6, 1, 2650 }, + { 0x1d5a7, 1, 2203 }, + { 0x1d5a8, 1, 2205 }, + { 0x1d5a9, 1, 2651 }, + { 0x1d5aa, 1, 2222 }, + { 0x1d5ab, 1, 2206 }, + { 0x1d5ac, 1, 2227 }, + { 0x1d5ad, 1, 2207 }, + { 0x1d5ae, 1, 2652 }, + { 0x1d5af, 1, 2210 }, + { 0x1d5b0, 1, 2211 }, + { 0x1d5b1, 1, 2212 }, + { 0x1d5b2, 1, 2653 }, + { 0x1d5b3, 1, 2654 }, + { 0x1d5b4, 1, 2655 }, + { 0x1d5b5, 1, 2283 }, + { 0x1d5b6, 1, 2656 }, + { 0x1d5b7, 1, 2295 }, + { 0x1d5b8, 1, 2657 }, + { 0x1d5b9, 1, 2220 }, + { 0x1d5ba, 1, 3 }, + { 0x1d5bb, 1, 2658 }, + { 0x1d5bc, 1, 2325 }, + { 0x1d5bd, 1, 2237 }, + { 0x1d5be, 1, 2224 }, + { 0x1d5bf, 1, 2659 }, + { 0x1d5c0, 1, 2202 }, + { 0x1d5c1, 1, 588 }, + { 0x1d5c2, 1, 2169 }, + { 0x1d5c3, 1, 590 }, + { 0x1d5c4, 1, 2660 }, + { 0x1d5c5, 1, 610 }, + { 0x1d5c6, 1, 2326 }, + { 0x1d5c7, 1, 2181 }, + { 0x1d5c8, 1, 14 }, + { 0x1d5c9, 1, 2661 }, + { 0x1d5ca, 1, 2662 }, + { 0x1d5cb, 1, 591 }, + { 0x1d5cc, 1, 356 }, + { 0x1d5cd, 1, 2663 }, + { 0x1d5ce, 1, 2664 }, + { 0x1d5cf, 1, 2308 }, + { 0x1d5d0, 1, 595 }, + { 0x1d5d1, 1, 611 }, + { 0x1d5d2, 1, 596 }, + { 0x1d5d3, 1, 2665 }, + { 0x1d5d4, 1, 2649 }, + { 0x1d5d5, 1, 2223 }, + { 0x1d5d6, 1, 2190 }, + { 0x1d5d7, 1, 2236 }, + { 0x1d5d8, 1, 2225 }, + { 0x1d5d9, 1, 2226 }, + { 0x1d5da, 1, 2650 }, + { 0x1d5db, 1, 2203 }, + { 0x1d5dc, 1, 2205 }, + { 0x1d5dd, 1, 2651 }, + { 0x1d5de, 1, 2222 }, + { 0x1d5df, 1, 2206 }, + { 0x1d5e0, 1, 2227 }, + { 0x1d5e1, 1, 2207 }, + { 0x1d5e2, 1, 2652 }, + { 0x1d5e3, 1, 2210 }, + { 0x1d5e4, 1, 2211 }, + { 0x1d5e5, 1, 2212 }, + { 0x1d5e6, 1, 2653 }, + { 0x1d5e7, 1, 2654 }, + { 0x1d5e8, 1, 2655 }, + { 0x1d5e9, 1, 2283 }, + { 0x1d5ea, 1, 2656 }, + { 0x1d5eb, 1, 2295 }, + { 0x1d5ec, 1, 2657 }, + { 0x1d5ed, 1, 2220 }, + { 0x1d5ee, 1, 3 }, + { 0x1d5ef, 1, 2658 }, + { 0x1d5f0, 1, 2325 }, + { 0x1d5f1, 1, 2237 }, + { 0x1d5f2, 1, 2224 }, + { 0x1d5f3, 1, 2659 }, + { 0x1d5f4, 1, 2202 }, + { 0x1d5f5, 1, 588 }, + { 0x1d5f6, 1, 2169 }, + { 0x1d5f7, 1, 590 }, + { 0x1d5f8, 1, 2660 }, + { 0x1d5f9, 1, 610 }, + { 0x1d5fa, 1, 2326 }, + { 0x1d5fb, 1, 2181 }, + { 0x1d5fc, 1, 14 }, + { 0x1d5fd, 1, 2661 }, + { 0x1d5fe, 1, 2662 }, + { 0x1d5ff, 1, 591 }, + { 0x1d600, 1, 356 }, + { 0x1d601, 1, 2663 }, + { 0x1d602, 1, 2664 }, + { 0x1d603, 1, 2308 }, + { 0x1d604, 1, 595 }, + { 0x1d605, 1, 611 }, + { 0x1d606, 1, 596 }, + { 0x1d607, 1, 2665 }, + { 0x1d608, 1, 2649 }, + { 0x1d609, 1, 2223 }, + { 0x1d60a, 1, 2190 }, + { 0x1d60b, 1, 2236 }, + { 0x1d60c, 1, 2225 }, + { 0x1d60d, 1, 2226 }, + { 0x1d60e, 1, 2650 }, + { 0x1d60f, 1, 2203 }, + { 0x1d610, 1, 2205 }, + { 0x1d611, 1, 2651 }, + { 0x1d612, 1, 2222 }, + { 0x1d613, 1, 2206 }, + { 0x1d614, 1, 2227 }, + { 0x1d615, 1, 2207 }, + { 0x1d616, 1, 2652 }, + { 0x1d617, 1, 2210 }, + { 0x1d618, 1, 2211 }, + { 0x1d619, 1, 2212 }, + { 0x1d61a, 1, 2653 }, + { 0x1d61b, 1, 2654 }, + { 0x1d61c, 1, 2655 }, + { 0x1d61d, 1, 2283 }, + { 0x1d61e, 1, 2656 }, + { 0x1d61f, 1, 2295 }, + { 0x1d620, 1, 2657 }, + { 0x1d621, 1, 2220 }, + { 0x1d622, 1, 3 }, + { 0x1d623, 1, 2658 }, + { 0x1d624, 1, 2325 }, + { 0x1d625, 1, 2237 }, + { 0x1d626, 1, 2224 }, + { 0x1d627, 1, 2659 }, + { 0x1d628, 1, 2202 }, + { 0x1d629, 1, 588 }, + { 0x1d62a, 1, 2169 }, + { 0x1d62b, 1, 590 }, + { 0x1d62c, 1, 2660 }, + { 0x1d62d, 1, 610 }, + { 0x1d62e, 1, 2326 }, + { 0x1d62f, 1, 2181 }, + { 0x1d630, 1, 14 }, + { 0x1d631, 1, 2661 }, + { 0x1d632, 1, 2662 }, + { 0x1d633, 1, 591 }, + { 0x1d634, 1, 356 }, + { 0x1d635, 1, 2663 }, + { 0x1d636, 1, 2664 }, + { 0x1d637, 1, 2308 }, + { 0x1d638, 1, 595 }, + { 0x1d639, 1, 611 }, + { 0x1d63a, 1, 596 }, + { 0x1d63b, 1, 2665 }, + { 0x1d63c, 1, 2649 }, + { 0x1d63d, 1, 2223 }, + { 0x1d63e, 1, 2190 }, + { 0x1d63f, 1, 2236 }, + { 0x1d640, 1, 2225 }, + { 0x1d641, 1, 2226 }, + { 0x1d642, 1, 2650 }, + { 0x1d643, 1, 2203 }, + { 0x1d644, 1, 2205 }, + { 0x1d645, 1, 2651 }, + { 0x1d646, 1, 2222 }, + { 0x1d647, 1, 2206 }, + { 0x1d648, 1, 2227 }, + { 0x1d649, 1, 2207 }, + { 0x1d64a, 1, 2652 }, + { 0x1d64b, 1, 2210 }, + { 0x1d64c, 1, 2211 }, + { 0x1d64d, 1, 2212 }, + { 0x1d64e, 1, 2653 }, + { 0x1d64f, 1, 2654 }, + { 0x1d650, 1, 2655 }, + { 0x1d651, 1, 2283 }, + { 0x1d652, 1, 2656 }, + { 0x1d653, 1, 2295 }, + { 0x1d654, 1, 2657 }, + { 0x1d655, 1, 2220 }, + { 0x1d656, 1, 3 }, + { 0x1d657, 1, 2658 }, + { 0x1d658, 1, 2325 }, + { 0x1d659, 1, 2237 }, + { 0x1d65a, 1, 2224 }, + { 0x1d65b, 1, 2659 }, + { 0x1d65c, 1, 2202 }, + { 0x1d65d, 1, 588 }, + { 0x1d65e, 1, 2169 }, + { 0x1d65f, 1, 590 }, + { 0x1d660, 1, 2660 }, + { 0x1d661, 1, 610 }, + { 0x1d662, 1, 2326 }, + { 0x1d663, 1, 2181 }, + { 0x1d664, 1, 14 }, + { 0x1d665, 1, 2661 }, + { 0x1d666, 1, 2662 }, + { 0x1d667, 1, 591 }, + { 0x1d668, 1, 356 }, + { 0x1d669, 1, 2663 }, + { 0x1d66a, 1, 2664 }, + { 0x1d66b, 1, 2308 }, + { 0x1d66c, 1, 595 }, + { 0x1d66d, 1, 611 }, + { 0x1d66e, 1, 596 }, + { 0x1d66f, 1, 2665 }, + { 0x1d670, 1, 2649 }, + { 0x1d671, 1, 2223 }, + { 0x1d672, 1, 2190 }, + { 0x1d673, 1, 2236 }, + { 0x1d674, 1, 2225 }, + { 0x1d675, 1, 2226 }, + { 0x1d676, 1, 2650 }, + { 0x1d677, 1, 2203 }, + { 0x1d678, 1, 2205 }, + { 0x1d679, 1, 2651 }, + { 0x1d67a, 1, 2222 }, + { 0x1d67b, 1, 2206 }, + { 0x1d67c, 1, 2227 }, + { 0x1d67d, 1, 2207 }, + { 0x1d67e, 1, 2652 }, + { 0x1d67f, 1, 2210 }, + { 0x1d680, 1, 2211 }, + { 0x1d681, 1, 2212 }, + { 0x1d682, 1, 2653 }, + { 0x1d683, 1, 2654 }, + { 0x1d684, 1, 2655 }, + { 0x1d685, 1, 2283 }, + { 0x1d686, 1, 2656 }, + { 0x1d687, 1, 2295 }, + { 0x1d688, 1, 2657 }, + { 0x1d689, 1, 2220 }, + { 0x1d68a, 1, 3 }, + { 0x1d68b, 1, 2658 }, + { 0x1d68c, 1, 2325 }, + { 0x1d68d, 1, 2237 }, + { 0x1d68e, 1, 2224 }, + { 0x1d68f, 1, 2659 }, + { 0x1d690, 1, 2202 }, + { 0x1d691, 1, 588 }, + { 0x1d692, 1, 2169 }, + { 0x1d693, 1, 590 }, + { 0x1d694, 1, 2660 }, + { 0x1d695, 1, 610 }, + { 0x1d696, 1, 2326 }, + { 0x1d697, 1, 2181 }, + { 0x1d698, 1, 14 }, + { 0x1d699, 1, 2661 }, + { 0x1d69a, 1, 2662 }, + { 0x1d69b, 1, 591 }, + { 0x1d69c, 1, 356 }, + { 0x1d69d, 1, 2663 }, + { 0x1d69e, 1, 2664 }, + { 0x1d69f, 1, 2308 }, + { 0x1d6a0, 1, 595 }, + { 0x1d6a1, 1, 611 }, + { 0x1d6a2, 1, 596 }, + { 0x1d6a3, 1, 2665 }, + { 0x1d6a8, 1, 5630 }, + { 0x1d6a9, 1, 5631 }, + { 0x1d6aa, 1, 2233 }, + { 0x1d6ab, 1, 5632 }, + { 0x1d6ac, 1, 5633 }, + { 0x1d6ad, 1, 5634 }, + { 0x1d6ae, 1, 5635 }, + { 0x1d6af, 1, 676 }, + { 0x1d6b0, 1, 5636 }, + { 0x1d6b1, 1, 5637 }, + { 0x1d6b2, 1, 5638 }, + { 0x1d6b3, 1, 5639 }, + { 0x1d6b4, 1, 5640 }, + { 0x1d6b5, 1, 5641 }, + { 0x1d6b6, 1, 5642 }, + { 0x1d6b7, 1, 2234 }, + { 0x1d6b8, 1, 5643 }, + { 0x1d6b9, 1, 676 }, + { 0x1d6ba, 1, 5644 }, + { 0x1d6bb, 1, 5645 }, + { 0x1d6bc, 1, 670 }, + { 0x1d6bd, 1, 5646 }, + { 0x1d6be, 1, 5647 }, + { 0x1d6bf, 1, 5648 }, + { 0x1d6c0, 1, 2221 }, + { 0x1d6c1, 1, 5649 }, + { 0x1d6c2, 1, 5650 }, + { 0x1d6c3, 1, 668 }, + { 0x1d6c4, 1, 2232 }, + { 0x1d6c5, 1, 5651 }, + { 0x1d6c6, 1, 677 }, + { 0x1d6c7, 1, 5652 }, + { 0x1d6c8, 1, 5653 }, + { 0x1d6c9, 1, 669 }, + { 0x1d6ca, 1, 2025 }, + { 0x1d6cb, 1, 673 }, + { 0x1d6cc, 1, 5654 }, + { 0x1d6cd, 1, 10 }, + { 0x1d6ce, 1, 5655 }, + { 0x1d6cf, 1, 5656 }, + { 0x1d6d0, 1, 5657 }, + { 0x1d6d1, 1, 672 }, + { 0x1d6d2, 1, 674 }, + { 0x1d6d3, 1, 675 }, + { 0x1d6d4, 1, 5658 }, + { 0x1d6d5, 1, 5659 }, + { 0x1d6d6, 1, 5660 }, + { 0x1d6d7, 1, 671 }, + { 0x1d6d8, 1, 5661 }, + { 0x1d6d9, 1, 5662 }, + { 0x1d6da, 1, 5663 }, + { 0x1d6db, 1, 5664 }, + { 0x1d6dc, 1, 677 }, + { 0x1d6dd, 1, 669 }, + { 0x1d6de, 1, 673 }, + { 0x1d6df, 1, 671 }, + { 0x1d6e0, 1, 674 }, + { 0x1d6e1, 1, 672 }, + { 0x1d6e2, 1, 5630 }, + { 0x1d6e3, 1, 5631 }, + { 0x1d6e4, 1, 2233 }, + { 0x1d6e5, 1, 5632 }, + { 0x1d6e6, 1, 5633 }, + { 0x1d6e7, 1, 5634 }, + { 0x1d6e8, 1, 5635 }, + { 0x1d6e9, 1, 676 }, + { 0x1d6ea, 1, 5636 }, + { 0x1d6eb, 1, 5637 }, + { 0x1d6ec, 1, 5638 }, + { 0x1d6ed, 1, 5639 }, + { 0x1d6ee, 1, 5640 }, + { 0x1d6ef, 1, 5641 }, + { 0x1d6f0, 1, 5642 }, + { 0x1d6f1, 1, 2234 }, + { 0x1d6f2, 1, 5643 }, + { 0x1d6f3, 1, 676 }, + { 0x1d6f4, 1, 5644 }, + { 0x1d6f5, 1, 5645 }, + { 0x1d6f6, 1, 670 }, + { 0x1d6f7, 1, 5646 }, + { 0x1d6f8, 1, 5647 }, + { 0x1d6f9, 1, 5648 }, + { 0x1d6fa, 1, 2221 }, + { 0x1d6fb, 1, 5649 }, + { 0x1d6fc, 1, 5650 }, + { 0x1d6fd, 1, 668 }, + { 0x1d6fe, 1, 2232 }, + { 0x1d6ff, 1, 5651 }, + { 0x1d700, 1, 677 }, + { 0x1d701, 1, 5652 }, + { 0x1d702, 1, 5653 }, + { 0x1d703, 1, 669 }, + { 0x1d704, 1, 2025 }, + { 0x1d705, 1, 673 }, + { 0x1d706, 1, 5654 }, + { 0x1d707, 1, 10 }, + { 0x1d708, 1, 5655 }, + { 0x1d709, 1, 5656 }, + { 0x1d70a, 1, 5657 }, + { 0x1d70b, 1, 672 }, + { 0x1d70c, 1, 674 }, + { 0x1d70d, 1, 675 }, + { 0x1d70e, 1, 5658 }, + { 0x1d70f, 1, 5659 }, + { 0x1d710, 1, 5660 }, + { 0x1d711, 1, 671 }, + { 0x1d712, 1, 5661 }, + { 0x1d713, 1, 5662 }, + { 0x1d714, 1, 5663 }, + { 0x1d715, 1, 5664 }, + { 0x1d716, 1, 677 }, + { 0x1d717, 1, 669 }, + { 0x1d718, 1, 673 }, + { 0x1d719, 1, 671 }, + { 0x1d71a, 1, 674 }, + { 0x1d71b, 1, 672 }, + { 0x1d71c, 1, 5630 }, + { 0x1d71d, 1, 5631 }, + { 0x1d71e, 1, 2233 }, + { 0x1d71f, 1, 5632 }, + { 0x1d720, 1, 5633 }, + { 0x1d721, 1, 5634 }, + { 0x1d722, 1, 5635 }, + { 0x1d723, 1, 676 }, + { 0x1d724, 1, 5636 }, + { 0x1d725, 1, 5637 }, + { 0x1d726, 1, 5638 }, + { 0x1d727, 1, 5639 }, + { 0x1d728, 1, 5640 }, + { 0x1d729, 1, 5641 }, + { 0x1d72a, 1, 5642 }, + { 0x1d72b, 1, 2234 }, + { 0x1d72c, 1, 5643 }, + { 0x1d72d, 1, 676 }, + { 0x1d72e, 1, 5644 }, + { 0x1d72f, 1, 5645 }, + { 0x1d730, 1, 670 }, + { 0x1d731, 1, 5646 }, + { 0x1d732, 1, 5647 }, + { 0x1d733, 1, 5648 }, + { 0x1d734, 1, 2221 }, + { 0x1d735, 1, 5649 }, + { 0x1d736, 1, 5650 }, + { 0x1d737, 1, 668 }, + { 0x1d738, 1, 2232 }, + { 0x1d739, 1, 5651 }, + { 0x1d73a, 1, 677 }, + { 0x1d73b, 1, 5652 }, + { 0x1d73c, 1, 5653 }, + { 0x1d73d, 1, 669 }, + { 0x1d73e, 1, 2025 }, + { 0x1d73f, 1, 673 }, + { 0x1d740, 1, 5654 }, + { 0x1d741, 1, 10 }, + { 0x1d742, 1, 5655 }, + { 0x1d743, 1, 5656 }, + { 0x1d744, 1, 5657 }, + { 0x1d745, 1, 672 }, + { 0x1d746, 1, 674 }, + { 0x1d747, 1, 675 }, + { 0x1d748, 1, 5658 }, + { 0x1d749, 1, 5659 }, + { 0x1d74a, 1, 5660 }, + { 0x1d74b, 1, 671 }, + { 0x1d74c, 1, 5661 }, + { 0x1d74d, 1, 5662 }, + { 0x1d74e, 1, 5663 }, + { 0x1d74f, 1, 5664 }, + { 0x1d750, 1, 677 }, + { 0x1d751, 1, 669 }, + { 0x1d752, 1, 673 }, + { 0x1d753, 1, 671 }, + { 0x1d754, 1, 674 }, + { 0x1d755, 1, 672 }, + { 0x1d756, 1, 5630 }, + { 0x1d757, 1, 5631 }, + { 0x1d758, 1, 2233 }, + { 0x1d759, 1, 5632 }, + { 0x1d75a, 1, 5633 }, + { 0x1d75b, 1, 5634 }, + { 0x1d75c, 1, 5635 }, + { 0x1d75d, 1, 676 }, + { 0x1d75e, 1, 5636 }, + { 0x1d75f, 1, 5637 }, + { 0x1d760, 1, 5638 }, + { 0x1d761, 1, 5639 }, + { 0x1d762, 1, 5640 }, + { 0x1d763, 1, 5641 }, + { 0x1d764, 1, 5642 }, + { 0x1d765, 1, 2234 }, + { 0x1d766, 1, 5643 }, + { 0x1d767, 1, 676 }, + { 0x1d768, 1, 5644 }, + { 0x1d769, 1, 5645 }, + { 0x1d76a, 1, 670 }, + { 0x1d76b, 1, 5646 }, + { 0x1d76c, 1, 5647 }, + { 0x1d76d, 1, 5648 }, + { 0x1d76e, 1, 2221 }, + { 0x1d76f, 1, 5649 }, + { 0x1d770, 1, 5650 }, + { 0x1d771, 1, 668 }, + { 0x1d772, 1, 2232 }, + { 0x1d773, 1, 5651 }, + { 0x1d774, 1, 677 }, + { 0x1d775, 1, 5652 }, + { 0x1d776, 1, 5653 }, + { 0x1d777, 1, 669 }, + { 0x1d778, 1, 2025 }, + { 0x1d779, 1, 673 }, + { 0x1d77a, 1, 5654 }, + { 0x1d77b, 1, 10 }, + { 0x1d77c, 1, 5655 }, + { 0x1d77d, 1, 5656 }, + { 0x1d77e, 1, 5657 }, + { 0x1d77f, 1, 672 }, + { 0x1d780, 1, 674 }, + { 0x1d781, 1, 675 }, + { 0x1d782, 1, 5658 }, + { 0x1d783, 1, 5659 }, + { 0x1d784, 1, 5660 }, + { 0x1d785, 1, 671 }, + { 0x1d786, 1, 5661 }, + { 0x1d787, 1, 5662 }, + { 0x1d788, 1, 5663 }, + { 0x1d789, 1, 5664 }, + { 0x1d78a, 1, 677 }, + { 0x1d78b, 1, 669 }, + { 0x1d78c, 1, 673 }, + { 0x1d78d, 1, 671 }, + { 0x1d78e, 1, 674 }, + { 0x1d78f, 1, 672 }, + { 0x1d790, 1, 5630 }, + { 0x1d791, 1, 5631 }, + { 0x1d792, 1, 2233 }, + { 0x1d793, 1, 5632 }, + { 0x1d794, 1, 5633 }, + { 0x1d795, 1, 5634 }, + { 0x1d796, 1, 5635 }, + { 0x1d797, 1, 676 }, + { 0x1d798, 1, 5636 }, + { 0x1d799, 1, 5637 }, + { 0x1d79a, 1, 5638 }, + { 0x1d79b, 1, 5639 }, + { 0x1d79c, 1, 5640 }, + { 0x1d79d, 1, 5641 }, + { 0x1d79e, 1, 5642 }, + { 0x1d79f, 1, 2234 }, + { 0x1d7a0, 1, 5643 }, + { 0x1d7a1, 1, 676 }, + { 0x1d7a2, 1, 5644 }, + { 0x1d7a3, 1, 5645 }, + { 0x1d7a4, 1, 670 }, + { 0x1d7a5, 1, 5646 }, + { 0x1d7a6, 1, 5647 }, + { 0x1d7a7, 1, 5648 }, + { 0x1d7a8, 1, 2221 }, + { 0x1d7a9, 1, 5649 }, + { 0x1d7aa, 1, 5650 }, + { 0x1d7ab, 1, 668 }, + { 0x1d7ac, 1, 2232 }, + { 0x1d7ad, 1, 5651 }, + { 0x1d7ae, 1, 677 }, + { 0x1d7af, 1, 5652 }, + { 0x1d7b0, 1, 5653 }, + { 0x1d7b1, 1, 669 }, + { 0x1d7b2, 1, 2025 }, + { 0x1d7b3, 1, 673 }, + { 0x1d7b4, 1, 5654 }, + { 0x1d7b5, 1, 10 }, + { 0x1d7b6, 1, 5655 }, + { 0x1d7b7, 1, 5656 }, + { 0x1d7b8, 1, 5657 }, + { 0x1d7b9, 1, 672 }, + { 0x1d7ba, 1, 674 }, + { 0x1d7bb, 1, 675 }, + { 0x1d7bc, 1, 5658 }, + { 0x1d7bd, 1, 5659 }, + { 0x1d7be, 1, 5660 }, + { 0x1d7bf, 1, 671 }, + { 0x1d7c0, 1, 5661 }, + { 0x1d7c1, 1, 5662 }, + { 0x1d7c2, 1, 5663 }, + { 0x1d7c3, 1, 5664 }, + { 0x1d7c4, 1, 677 }, + { 0x1d7c5, 1, 669 }, + { 0x1d7c6, 1, 673 }, + { 0x1d7c7, 1, 671 }, + { 0x1d7c8, 1, 674 }, + { 0x1d7c9, 1, 672 }, + { 0x1d7ce, 1, 2168 }, + { 0x1d7cf, 1, 13 }, + { 0x1d7d0, 1, 6 }, + { 0x1d7d1, 1, 7 }, + { 0x1d7d2, 1, 2170 }, + { 0x1d7d3, 1, 2171 }, + { 0x1d7d4, 1, 2172 }, + { 0x1d7d5, 1, 2173 }, + { 0x1d7d6, 1, 2174 }, + { 0x1d7d7, 1, 2175 }, + { 0x1d7d8, 1, 2168 }, + { 0x1d7d9, 1, 13 }, + { 0x1d7da, 1, 6 }, + { 0x1d7db, 1, 7 }, + { 0x1d7dc, 1, 2170 }, + { 0x1d7dd, 1, 2171 }, + { 0x1d7de, 1, 2172 }, + { 0x1d7df, 1, 2173 }, + { 0x1d7e0, 1, 2174 }, + { 0x1d7e1, 1, 2175 }, + { 0x1d7e2, 1, 2168 }, + { 0x1d7e3, 1, 13 }, + { 0x1d7e4, 1, 6 }, + { 0x1d7e5, 1, 7 }, + { 0x1d7e6, 1, 2170 }, + { 0x1d7e7, 1, 2171 }, + { 0x1d7e8, 1, 2172 }, + { 0x1d7e9, 1, 2173 }, + { 0x1d7ea, 1, 2174 }, + { 0x1d7eb, 1, 2175 }, + { 0x1d7ec, 1, 2168 }, + { 0x1d7ed, 1, 13 }, + { 0x1d7ee, 1, 6 }, + { 0x1d7ef, 1, 7 }, + { 0x1d7f0, 1, 2170 }, + { 0x1d7f1, 1, 2171 }, + { 0x1d7f2, 1, 2172 }, + { 0x1d7f3, 1, 2173 }, + { 0x1d7f4, 1, 2174 }, + { 0x1d7f5, 1, 2175 }, + { 0x1d7f6, 1, 2168 }, + { 0x1d7f7, 1, 13 }, + { 0x1d7f8, 1, 6 }, + { 0x1d7f9, 1, 7 }, + { 0x1d7fa, 1, 2170 }, + { 0x1d7fb, 1, 2171 }, + { 0x1d7fc, 1, 2172 }, + { 0x1d7fd, 1, 2173 }, + { 0x1d7fe, 1, 2174 }, + { 0x1d7ff, 1, 2175 }, + { 0x2f800, 1, 5665 }, + { 0x2f801, 1, 5666 }, + { 0x2f802, 1, 5667 }, + { 0x2f803, 1, 5668 }, + { 0x2f804, 1, 5669 }, + { 0x2f805, 1, 4549 }, + { 0x2f806, 1, 5670 }, + { 0x2f807, 1, 5671 }, + { 0x2f808, 1, 5672 }, + { 0x2f809, 1, 5673 }, + { 0x2f80a, 1, 4550 }, + { 0x2f80b, 1, 5674 }, + { 0x2f80c, 1, 5675 }, + { 0x2f80d, 1, 5676 }, + { 0x2f80e, 1, 4551 }, + { 0x2f80f, 1, 5677 }, + { 0x2f810, 1, 5678 }, + { 0x2f811, 1, 5679 }, + { 0x2f812, 1, 5680 }, + { 0x2f813, 1, 5681 }, + { 0x2f814, 1, 5682 }, + { 0x2f815, 1, 5683 }, + { 0x2f816, 1, 5684 }, + { 0x2f817, 1, 5685 }, + { 0x2f818, 1, 5686 }, + { 0x2f819, 1, 5687 }, + { 0x2f81a, 1, 5688 }, + { 0x2f81b, 1, 5689 }, + { 0x2f81c, 1, 5690 }, + { 0x2f81d, 1, 2698 }, + { 0x2f81e, 1, 5691 }, + { 0x2f81f, 1, 5692 }, + { 0x2f820, 1, 5693 }, + { 0x2f821, 1, 5694 }, + { 0x2f822, 1, 5695 }, + { 0x2f823, 1, 5696 }, + { 0x2f824, 1, 5697 }, + { 0x2f825, 1, 5698 }, + { 0x2f826, 1, 4552 }, + { 0x2f827, 1, 4553 }, + { 0x2f828, 1, 5699 }, + { 0x2f829, 1, 5700 }, + { 0x2f82a, 1, 5701 }, + { 0x2f82b, 1, 4372 }, + { 0x2f82c, 1, 5702 }, + { 0x2f82d, 1, 4554 }, + { 0x2f82e, 1, 5703 }, + { 0x2f82f, 1, 5704 }, + { 0x2f830, 1, 5705 }, + { 0x2f831, 1, 5706 }, + { 0x2f832, 1, 5706 }, + { 0x2f833, 1, 5706 }, + { 0x2f834, 1, 5707 }, + { 0x2f835, 1, 5708 }, + { 0x2f836, 1, 5709 }, + { 0x2f837, 1, 5710 }, + { 0x2f838, 1, 5711 }, + { 0x2f839, 1, 5712 }, + { 0x2f83a, 1, 5713 }, + { 0x2f83b, 1, 5714 }, + { 0x2f83c, 1, 5715 }, + { 0x2f83d, 1, 5716 }, + { 0x2f83e, 1, 5717 }, + { 0x2f83f, 1, 5718 }, + { 0x2f840, 1, 5719 }, + { 0x2f841, 1, 5720 }, + { 0x2f842, 1, 5721 }, + { 0x2f843, 1, 5722 }, + { 0x2f844, 1, 5723 }, + { 0x2f845, 1, 5724 }, + { 0x2f846, 1, 5724 }, + { 0x2f847, 1, 5725 }, + { 0x2f848, 1, 5726 }, + { 0x2f849, 1, 5727 }, + { 0x2f84a, 1, 5728 }, + { 0x2f84b, 1, 5729 }, + { 0x2f84c, 1, 4556 }, + { 0x2f84d, 1, 5730 }, + { 0x2f84e, 1, 5731 }, + { 0x2f84f, 1, 5732 }, + { 0x2f850, 1, 4518 }, + { 0x2f851, 1, 5733 }, + { 0x2f852, 1, 5734 }, + { 0x2f853, 1, 5735 }, + { 0x2f854, 1, 5736 }, + { 0x2f855, 1, 5737 }, + { 0x2f856, 1, 5738 }, + { 0x2f857, 1, 5739 }, + { 0x2f858, 1, 5740 }, + { 0x2f859, 1, 5741 }, + { 0x2f85a, 1, 5742 }, + { 0x2f85b, 1, 5743 }, + { 0x2f85c, 1, 5744 }, + { 0x2f85d, 1, 5745 }, + { 0x2f85e, 1, 5746 }, + { 0x2f85f, 1, 5747 }, + { 0x2f860, 1, 5748 }, + { 0x2f861, 1, 5749 }, + { 0x2f862, 1, 5750 }, + { 0x2f863, 1, 5751 }, + { 0x2f864, 1, 5752 }, + { 0x2f865, 1, 5753 }, + { 0x2f866, 1, 5754 }, + { 0x2f867, 1, 5755 }, + { 0x2f868, 1, 5756 }, + { 0x2f869, 1, 5757 }, + { 0x2f86a, 1, 5758 }, + { 0x2f86b, 1, 5758 }, + { 0x2f86c, 1, 5759 }, + { 0x2f86d, 1, 5760 }, + { 0x2f86e, 1, 5761 }, + { 0x2f86f, 1, 4368 }, + { 0x2f870, 1, 5762 }, + { 0x2f871, 1, 5763 }, + { 0x2f872, 1, 5764 }, + { 0x2f873, 1, 5765 }, + { 0x2f874, 1, 5766 }, + { 0x2f875, 1, 2724 }, + { 0x2f876, 1, 5767 }, + { 0x2f877, 1, 5768 }, + { 0x2f878, 1, 2726 }, + { 0x2f879, 1, 5769 }, + { 0x2f87a, 1, 5770 }, + { 0x2f87b, 1, 5771 }, + { 0x2f87c, 1, 5772 }, + { 0x2f87d, 1, 5773 }, + { 0x2f87e, 1, 5774 }, + { 0x2f87f, 1, 5775 }, + { 0x2f880, 1, 5776 }, + { 0x2f881, 1, 5777 }, + { 0x2f882, 1, 5778 }, + { 0x2f883, 1, 5779 }, + { 0x2f884, 1, 5780 }, + { 0x2f885, 1, 5781 }, + { 0x2f886, 1, 5782 }, + { 0x2f887, 1, 5783 }, + { 0x2f888, 1, 5784 }, + { 0x2f889, 1, 5785 }, + { 0x2f88a, 1, 5786 }, + { 0x2f88b, 1, 5787 }, + { 0x2f88c, 1, 5788 }, + { 0x2f88d, 1, 5789 }, + { 0x2f88e, 1, 4316 }, + { 0x2f88f, 1, 5790 }, + { 0x2f890, 1, 2736 }, + { 0x2f891, 1, 5791 }, + { 0x2f892, 1, 5791 }, + { 0x2f893, 1, 5792 }, + { 0x2f894, 1, 5793 }, + { 0x2f895, 1, 5793 }, + { 0x2f896, 1, 5794 }, + { 0x2f897, 1, 5795 }, + { 0x2f898, 1, 5796 }, + { 0x2f899, 1, 5797 }, + { 0x2f89a, 1, 5798 }, + { 0x2f89b, 1, 5799 }, + { 0x2f89c, 1, 5800 }, + { 0x2f89d, 1, 5801 }, + { 0x2f89e, 1, 5802 }, + { 0x2f89f, 1, 5803 }, + { 0x2f8a0, 1, 5804 }, + { 0x2f8a1, 1, 5805 }, + { 0x2f8a2, 1, 5806 }, + { 0x2f8a3, 1, 4561 }, + { 0x2f8a4, 1, 5807 }, + { 0x2f8a5, 1, 5808 }, + { 0x2f8a6, 1, 5809 }, + { 0x2f8a7, 1, 5810 }, + { 0x2f8a8, 1, 5811 }, + { 0x2f8a9, 1, 5810 }, + { 0x2f8aa, 1, 5812 }, + { 0x2f8ab, 1, 4563 }, + { 0x2f8ac, 1, 5813 }, + { 0x2f8ad, 1, 5814 }, + { 0x2f8ae, 1, 5815 }, + { 0x2f8af, 1, 5816 }, + { 0x2f8b0, 1, 4564 }, + { 0x2f8b1, 1, 4289 }, + { 0x2f8b2, 1, 5817 }, + { 0x2f8b3, 1, 5818 }, + { 0x2f8b4, 1, 5819 }, + { 0x2f8b5, 1, 5820 }, + { 0x2f8b6, 1, 5821 }, + { 0x2f8b7, 1, 5822 }, + { 0x2f8b8, 1, 5823 }, + { 0x2f8b9, 1, 5824 }, + { 0x2f8ba, 1, 5825 }, + { 0x2f8bb, 1, 5826 }, + { 0x2f8bc, 1, 5827 }, + { 0x2f8bd, 1, 5828 }, + { 0x2f8be, 1, 5829 }, + { 0x2f8bf, 1, 5830 }, + { 0x2f8c0, 1, 5831 }, + { 0x2f8c1, 1, 5832 }, + { 0x2f8c2, 1, 5833 }, + { 0x2f8c3, 1, 5834 }, + { 0x2f8c4, 1, 5835 }, + { 0x2f8c5, 1, 5836 }, + { 0x2f8c6, 1, 5837 }, + { 0x2f8c7, 1, 5838 }, + { 0x2f8c8, 1, 4565 }, + { 0x2f8c9, 1, 5839 }, + { 0x2f8ca, 1, 5840 }, + { 0x2f8cb, 1, 5841 }, + { 0x2f8cc, 1, 5842 }, + { 0x2f8cd, 1, 5843 }, + { 0x2f8ce, 1, 5844 }, + { 0x2f8cf, 1, 4567 }, + { 0x2f8d0, 1, 5845 }, + { 0x2f8d1, 1, 5846 }, + { 0x2f8d2, 1, 5847 }, + { 0x2f8d3, 1, 5848 }, + { 0x2f8d4, 1, 5849 }, + { 0x2f8d5, 1, 5850 }, + { 0x2f8d6, 1, 5851 }, + { 0x2f8d7, 1, 5852 }, + { 0x2f8d8, 1, 4317 }, + { 0x2f8d9, 1, 5853 }, + { 0x2f8da, 1, 5854 }, + { 0x2f8db, 1, 5855 }, + { 0x2f8dc, 1, 5856 }, + { 0x2f8dd, 1, 5857 }, + { 0x2f8de, 1, 5858 }, + { 0x2f8df, 1, 5859 }, + { 0x2f8e0, 1, 5860 }, + { 0x2f8e1, 1, 5861 }, + { 0x2f8e2, 1, 4568 }, + { 0x2f8e3, 1, 5862 }, + { 0x2f8e4, 1, 5863 }, + { 0x2f8e5, 1, 5864 }, + { 0x2f8e6, 1, 5865 }, + { 0x2f8e7, 1, 5866 }, + { 0x2f8e8, 1, 5867 }, + { 0x2f8e9, 1, 5868 }, + { 0x2f8ea, 1, 5869 }, + { 0x2f8eb, 1, 5870 }, + { 0x2f8ec, 1, 5871 }, + { 0x2f8ed, 1, 5872 }, + { 0x2f8ee, 1, 5873 }, + { 0x2f8ef, 1, 5874 }, + { 0x2f8f0, 1, 5875 }, + { 0x2f8f1, 1, 5876 }, + { 0x2f8f2, 1, 5877 }, + { 0x2f8f3, 1, 5878 }, + { 0x2f8f4, 1, 5879 }, + { 0x2f8f5, 1, 4385 }, + { 0x2f8f6, 1, 5880 }, + { 0x2f8f7, 1, 5881 }, + { 0x2f8f8, 1, 5882 }, + { 0x2f8f9, 1, 5883 }, + { 0x2f8fa, 1, 5884 }, + { 0x2f8fb, 1, 5885 }, + { 0x2f8fc, 1, 5886 }, + { 0x2f8fd, 1, 5887 }, + { 0x2f8fe, 1, 5888 }, + { 0x2f8ff, 1, 5889 }, + { 0x2f900, 1, 5890 }, + { 0x2f901, 1, 4569 }, + { 0x2f902, 1, 4468 }, + { 0x2f903, 1, 5891 }, + { 0x2f904, 1, 5892 }, + { 0x2f905, 1, 5893 }, + { 0x2f906, 1, 5894 }, + { 0x2f907, 1, 5895 }, + { 0x2f908, 1, 5896 }, + { 0x2f909, 1, 5897 }, + { 0x2f90a, 1, 5898 }, + { 0x2f90b, 1, 5899 }, + { 0x2f90c, 1, 5900 }, + { 0x2f90d, 1, 5901 }, + { 0x2f90e, 1, 5902 }, + { 0x2f90f, 1, 5903 }, + { 0x2f910, 1, 5904 }, + { 0x2f911, 1, 5905 }, + { 0x2f912, 1, 5906 }, + { 0x2f913, 1, 5907 }, + { 0x2f914, 1, 5908 }, + { 0x2f915, 1, 5909 }, + { 0x2f916, 1, 5910 }, + { 0x2f917, 1, 5911 }, + { 0x2f918, 1, 5912 }, + { 0x2f919, 1, 5913 }, + { 0x2f91a, 1, 5914 }, + { 0x2f91b, 1, 5915 }, + { 0x2f91c, 1, 5916 }, + { 0x2f91d, 1, 5917 }, + { 0x2f91e, 1, 5918 }, + { 0x2f91f, 1, 5919 }, + { 0x2f920, 1, 5920 }, + { 0x2f921, 1, 5921 }, + { 0x2f922, 1, 5922 }, + { 0x2f923, 1, 5923 }, + { 0x2f924, 1, 5924 }, + { 0x2f925, 1, 5925 }, + { 0x2f926, 1, 5926 }, + { 0x2f927, 1, 5927 }, + { 0x2f928, 1, 5928 }, + { 0x2f929, 1, 5929 }, + { 0x2f92a, 1, 5930 }, + { 0x2f92b, 1, 5931 }, + { 0x2f92c, 1, 5932 }, + { 0x2f92d, 1, 5932 }, + { 0x2f92e, 1, 5933 }, + { 0x2f92f, 1, 5934 }, + { 0x2f930, 1, 5935 }, + { 0x2f931, 1, 5936 }, + { 0x2f932, 1, 5937 }, + { 0x2f933, 1, 5938 }, + { 0x2f934, 1, 5939 }, + { 0x2f935, 1, 5940 }, + { 0x2f936, 1, 5941 }, + { 0x2f937, 1, 5942 }, + { 0x2f938, 1, 4371 }, + { 0x2f939, 1, 5943 }, + { 0x2f93a, 1, 5944 }, + { 0x2f93b, 1, 5945 }, + { 0x2f93c, 1, 5946 }, + { 0x2f93d, 1, 5947 }, + { 0x2f93e, 1, 5948 }, + { 0x2f93f, 1, 5949 }, + { 0x2f940, 1, 5950 }, + { 0x2f941, 1, 5951 }, + { 0x2f942, 1, 5952 }, + { 0x2f943, 1, 5953 }, + { 0x2f944, 1, 5954 }, + { 0x2f945, 1, 5955 }, + { 0x2f946, 1, 5956 }, + { 0x2f947, 1, 5956 }, + { 0x2f948, 1, 5957 }, + { 0x2f949, 1, 5958 }, + { 0x2f94a, 1, 5959 }, + { 0x2f94b, 1, 5960 }, + { 0x2f94c, 1, 5961 }, + { 0x2f94d, 1, 5962 }, + { 0x2f94e, 1, 5963 }, + { 0x2f94f, 1, 4334 }, + { 0x2f950, 1, 5964 }, + { 0x2f951, 1, 5965 }, + { 0x2f952, 1, 5966 }, + { 0x2f953, 1, 4579 }, + { 0x2f954, 1, 5967 }, + { 0x2f955, 1, 5968 }, + { 0x2f956, 1, 4538 }, + { 0x2f957, 1, 5969 }, + { 0x2f958, 1, 5970 }, + { 0x2f959, 1, 4582 }, + { 0x2f95a, 1, 5971 }, + { 0x2f95b, 1, 5972 }, + { 0x2f95c, 1, 5973 }, + { 0x2f95d, 1, 5974 }, + { 0x2f95e, 1, 5974 }, + { 0x2f95f, 1, 5975 }, + { 0x2f960, 1, 5976 }, + { 0x2f961, 1, 5977 }, + { 0x2f962, 1, 5978 }, + { 0x2f963, 1, 5979 }, + { 0x2f964, 1, 5980 }, + { 0x2f965, 1, 5981 }, + { 0x2f966, 1, 5982 }, + { 0x2f967, 1, 5983 }, + { 0x2f968, 1, 5984 }, + { 0x2f969, 1, 5985 }, + { 0x2f96a, 1, 5986 }, + { 0x2f96b, 1, 5987 }, + { 0x2f96c, 1, 5988 }, + { 0x2f96d, 1, 5989 }, + { 0x2f96e, 1, 5990 }, + { 0x2f96f, 1, 5991 }, + { 0x2f970, 1, 5992 }, + { 0x2f971, 1, 5993 }, + { 0x2f972, 1, 5994 }, + { 0x2f973, 1, 5995 }, + { 0x2f974, 1, 5996 }, + { 0x2f975, 1, 5997 }, + { 0x2f976, 1, 5998 }, + { 0x2f977, 1, 5999 }, + { 0x2f978, 1, 6000 }, + { 0x2f979, 1, 6001 }, + { 0x2f97a, 1, 4588 }, + { 0x2f97b, 1, 6002 }, + { 0x2f97c, 1, 6003 }, + { 0x2f97d, 1, 6004 }, + { 0x2f97e, 1, 6005 }, + { 0x2f97f, 1, 6006 }, + { 0x2f980, 1, 6007 }, + { 0x2f981, 1, 6008 }, + { 0x2f982, 1, 6009 }, + { 0x2f983, 1, 6010 }, + { 0x2f984, 1, 6011 }, + { 0x2f985, 1, 6012 }, + { 0x2f986, 1, 6013 }, + { 0x2f987, 1, 6014 }, + { 0x2f988, 1, 6015 }, + { 0x2f989, 1, 6016 }, + { 0x2f98a, 1, 6017 }, + { 0x2f98b, 1, 5792 }, + { 0x2f98c, 1, 6018 }, + { 0x2f98d, 1, 6019 }, + { 0x2f98e, 1, 6020 }, + { 0x2f98f, 1, 6021 }, + { 0x2f990, 1, 6022 }, + { 0x2f991, 1, 6023 }, + { 0x2f992, 1, 6024 }, + { 0x2f993, 1, 6025 }, + { 0x2f994, 1, 6026 }, + { 0x2f995, 1, 6027 }, + { 0x2f996, 1, 6028 }, + { 0x2f997, 1, 6029 }, + { 0x2f998, 1, 4388 }, + { 0x2f999, 1, 6030 }, + { 0x2f99a, 1, 6031 }, + { 0x2f99b, 1, 6032 }, + { 0x2f99c, 1, 6033 }, + { 0x2f99d, 1, 6034 }, + { 0x2f99e, 1, 6035 }, + { 0x2f99f, 1, 4591 }, + { 0x2f9a0, 1, 6036 }, + { 0x2f9a1, 1, 6037 }, + { 0x2f9a2, 1, 6038 }, + { 0x2f9a3, 1, 6039 }, + { 0x2f9a4, 1, 6040 }, + { 0x2f9a5, 1, 6041 }, + { 0x2f9a6, 1, 6042 }, + { 0x2f9a7, 1, 6043 }, + { 0x2f9a8, 1, 6044 }, + { 0x2f9a9, 1, 6045 }, + { 0x2f9aa, 1, 6046 }, + { 0x2f9ab, 1, 6047 }, + { 0x2f9ac, 1, 6048 }, + { 0x2f9ad, 1, 6049 }, + { 0x2f9ae, 1, 6050 }, + { 0x2f9af, 1, 6051 }, + { 0x2f9b0, 1, 6052 }, + { 0x2f9b1, 1, 6053 }, + { 0x2f9b2, 1, 6054 }, + { 0x2f9b3, 1, 6055 }, + { 0x2f9b4, 1, 4329 }, + { 0x2f9b5, 1, 6056 }, + { 0x2f9b6, 1, 6057 }, + { 0x2f9b7, 1, 6058 }, + { 0x2f9b8, 1, 6059 }, + { 0x2f9b9, 1, 6060 }, + { 0x2f9ba, 1, 6061 }, + { 0x2f9bb, 1, 6062 }, + { 0x2f9bc, 1, 6063 }, + { 0x2f9bd, 1, 6064 }, + { 0x2f9be, 1, 6065 }, + { 0x2f9bf, 1, 6066 }, + { 0x2f9c0, 1, 6067 }, + { 0x2f9c1, 1, 6068 }, + { 0x2f9c2, 1, 6069 }, + { 0x2f9c3, 1, 6070 }, + { 0x2f9c4, 1, 2826 }, + { 0x2f9c5, 1, 6071 }, + { 0x2f9c6, 1, 6072 }, + { 0x2f9c7, 1, 6073 }, + { 0x2f9c8, 1, 6074 }, + { 0x2f9c9, 1, 6075 }, + { 0x2f9ca, 1, 6076 }, + { 0x2f9cb, 1, 6077 }, + { 0x2f9cc, 1, 6078 }, + { 0x2f9cd, 1, 6079 }, + { 0x2f9ce, 1, 6080 }, + { 0x2f9cf, 1, 6081 }, + { 0x2f9d0, 1, 6082 }, + { 0x2f9d1, 1, 6083 }, + { 0x2f9d2, 1, 2833 }, + { 0x2f9d3, 1, 6084 }, + { 0x2f9d4, 1, 6085 }, + { 0x2f9d5, 1, 6086 }, + { 0x2f9d6, 1, 6087 }, + { 0x2f9d7, 1, 6088 }, + { 0x2f9d8, 1, 6089 }, + { 0x2f9d9, 1, 6090 }, + { 0x2f9da, 1, 6091 }, + { 0x2f9db, 1, 6092 }, + { 0x2f9dc, 1, 6093 }, + { 0x2f9dd, 1, 6094 }, + { 0x2f9de, 1, 6095 }, + { 0x2f9df, 1, 6096 }, + { 0x2f9e0, 1, 6097 }, + { 0x2f9e1, 1, 6098 }, + { 0x2f9e2, 1, 6099 }, + { 0x2f9e3, 1, 6100 }, + { 0x2f9e4, 1, 6101 }, + { 0x2f9e5, 1, 6102 }, + { 0x2f9e6, 1, 6103 }, + { 0x2f9e7, 1, 6104 }, + { 0x2f9e8, 1, 6105 }, + { 0x2f9e9, 1, 6106 }, + { 0x2f9ea, 1, 6107 }, + { 0x2f9eb, 1, 6108 }, + { 0x2f9ec, 1, 6109 }, + { 0x2f9ed, 1, 6110 }, + { 0x2f9ee, 1, 6111 }, + { 0x2f9ef, 1, 6112 }, + { 0x2f9f0, 1, 6113 }, + { 0x2f9f1, 1, 6114 }, + { 0x2f9f2, 1, 6115 }, + { 0x2f9f3, 1, 6116 }, + { 0x2f9f4, 1, 6117 }, + { 0x2f9f5, 1, 6118 }, + { 0x2f9f6, 1, 6119 }, + { 0x2f9f7, 1, 6120 }, + { 0x2f9f8, 1, 6121 }, + { 0x2f9f9, 1, 6122 }, + { 0x2f9fa, 1, 6123 }, + { 0x2f9fb, 1, 6124 }, + { 0x2f9fc, 1, 6125 }, + { 0x2f9fd, 1, 6126 }, + { 0x2f9fe, 1, 6127 }, + { 0x2f9ff, 1, 6127 }, + { 0x2fa00, 1, 6128 }, + { 0x2fa01, 1, 6129 }, + { 0x2fa02, 1, 6130 }, + { 0x2fa03, 1, 6131 }, + { 0x2fa04, 1, 6132 }, + { 0x2fa05, 1, 6133 }, + { 0x2fa06, 1, 6134 }, + { 0x2fa07, 1, 6135 }, + { 0x2fa08, 1, 6136 }, + { 0x2fa09, 1, 6137 }, + { 0x2fa0a, 1, 6138 }, + { 0x2fa0b, 1, 6139 }, + { 0x2fa0c, 1, 6140 }, + { 0x2fa0d, 1, 6141 }, + { 0x2fa0e, 1, 6142 }, + { 0x2fa0f, 1, 6143 }, + { 0x2fa10, 1, 6144 }, + { 0x2fa11, 1, 6145 }, + { 0x2fa12, 1, 6146 }, + { 0x2fa13, 1, 6147 }, + { 0x2fa14, 1, 6148 }, + { 0x2fa15, 1, 2881 }, + { 0x2fa16, 1, 6149 }, + { 0x2fa17, 1, 2885 }, + { 0x2fa18, 1, 6150 }, + { 0x2fa19, 1, 6151 }, + { 0x2fa1a, 1, 6152 }, + { 0x2fa1b, 1, 6153 }, + { 0x2fa1c, 1, 2890 }, + { 0x2fa1d, 1, 6154 } +}; + +static const Unicode decomp_expansion[] = { + 0x20 /* offset 0 */ , + 0x20, 0x308 /* offset 1 */ , + 0x61 /* offset 3 */ , + 0x20, 0x304 /* offset 4 */ , + 0x32 /* offset 6 */ , + 0x33 /* offset 7 */ , + 0x20, 0x301 /* offset 8 */ , + 0x3bc /* offset 10 */ , + 0x20, 0x327 /* offset 11 */ , + 0x31 /* offset 13 */ , + 0x6f /* offset 14 */ , + 0x31, 0x2044, 0x34 /* offset 15 */ , + 0x31, 0x2044, 0x32 /* offset 18 */ , + 0x33, 0x2044, 0x34 /* offset 21 */ , + 0x41, 0x300 /* offset 24 */ , + 0x41, 0x301 /* offset 26 */ , + 0x41, 0x302 /* offset 28 */ , + 0x41, 0x303 /* offset 30 */ , + 0x41, 0x308 /* offset 32 */ , + 0x41, 0x30a /* offset 34 */ , + 0x43, 0x327 /* offset 36 */ , + 0x45, 0x300 /* offset 38 */ , + 0x45, 0x301 /* offset 40 */ , + 0x45, 0x302 /* offset 42 */ , + 0x45, 0x308 /* offset 44 */ , + 0x49, 0x300 /* offset 46 */ , + 0x49, 0x301 /* offset 48 */ , + 0x49, 0x302 /* offset 50 */ , + 0x49, 0x308 /* offset 52 */ , + 0x4e, 0x303 /* offset 54 */ , + 0x4f, 0x300 /* offset 56 */ , + 0x4f, 0x301 /* offset 58 */ , + 0x4f, 0x302 /* offset 60 */ , + 0x4f, 0x303 /* offset 62 */ , + 0x4f, 0x308 /* offset 64 */ , + 0x55, 0x300 /* offset 66 */ , + 0x55, 0x301 /* offset 68 */ , + 0x55, 0x302 /* offset 70 */ , + 0x55, 0x308 /* offset 72 */ , + 0x59, 0x301 /* offset 74 */ , + 0x61, 0x300 /* offset 76 */ , + 0x61, 0x301 /* offset 78 */ , + 0x61, 0x302 /* offset 80 */ , + 0x61, 0x303 /* offset 82 */ , + 0x61, 0x308 /* offset 84 */ , + 0x61, 0x30a /* offset 86 */ , + 0x63, 0x327 /* offset 88 */ , + 0x65, 0x300 /* offset 90 */ , + 0x65, 0x301 /* offset 92 */ , + 0x65, 0x302 /* offset 94 */ , + 0x65, 0x308 /* offset 96 */ , + 0x69, 0x300 /* offset 98 */ , + 0x69, 0x301 /* offset 100 */ , + 0x69, 0x302 /* offset 102 */ , + 0x69, 0x308 /* offset 104 */ , + 0x6e, 0x303 /* offset 106 */ , + 0x6f, 0x300 /* offset 108 */ , + 0x6f, 0x301 /* offset 110 */ , + 0x6f, 0x302 /* offset 112 */ , + 0x6f, 0x303 /* offset 114 */ , + 0x6f, 0x308 /* offset 116 */ , + 0x75, 0x300 /* offset 118 */ , + 0x75, 0x301 /* offset 120 */ , + 0x75, 0x302 /* offset 122 */ , + 0x75, 0x308 /* offset 124 */ , + 0x79, 0x301 /* offset 126 */ , + 0x79, 0x308 /* offset 128 */ , + 0x41, 0x304 /* offset 130 */ , + 0x61, 0x304 /* offset 132 */ , + 0x41, 0x306 /* offset 134 */ , + 0x61, 0x306 /* offset 136 */ , + 0x41, 0x328 /* offset 138 */ , + 0x61, 0x328 /* offset 140 */ , + 0x43, 0x301 /* offset 142 */ , + 0x63, 0x301 /* offset 144 */ , + 0x43, 0x302 /* offset 146 */ , + 0x63, 0x302 /* offset 148 */ , + 0x43, 0x307 /* offset 150 */ , + 0x63, 0x307 /* offset 152 */ , + 0x43, 0x30c /* offset 154 */ , + 0x63, 0x30c /* offset 156 */ , + 0x44, 0x30c /* offset 158 */ , + 0x64, 0x30c /* offset 160 */ , + 0x45, 0x304 /* offset 162 */ , + 0x65, 0x304 /* offset 164 */ , + 0x45, 0x306 /* offset 166 */ , + 0x65, 0x306 /* offset 168 */ , + 0x45, 0x307 /* offset 170 */ , + 0x65, 0x307 /* offset 172 */ , + 0x45, 0x328 /* offset 174 */ , + 0x65, 0x328 /* offset 176 */ , + 0x45, 0x30c /* offset 178 */ , + 0x65, 0x30c /* offset 180 */ , + 0x47, 0x302 /* offset 182 */ , + 0x67, 0x302 /* offset 184 */ , + 0x47, 0x306 /* offset 186 */ , + 0x67, 0x306 /* offset 188 */ , + 0x47, 0x307 /* offset 190 */ , + 0x67, 0x307 /* offset 192 */ , + 0x47, 0x327 /* offset 194 */ , + 0x67, 0x327 /* offset 196 */ , + 0x48, 0x302 /* offset 198 */ , + 0x68, 0x302 /* offset 200 */ , + 0x49, 0x303 /* offset 202 */ , + 0x69, 0x303 /* offset 204 */ , + 0x49, 0x304 /* offset 206 */ , + 0x69, 0x304 /* offset 208 */ , + 0x49, 0x306 /* offset 210 */ , + 0x69, 0x306 /* offset 212 */ , + 0x49, 0x328 /* offset 214 */ , + 0x69, 0x328 /* offset 216 */ , + 0x49, 0x307 /* offset 218 */ , + 0x49, 0x4a /* offset 220 */ , + 0x69, 0x6a /* offset 222 */ , + 0x4a, 0x302 /* offset 224 */ , + 0x6a, 0x302 /* offset 226 */ , + 0x4b, 0x327 /* offset 228 */ , + 0x6b, 0x327 /* offset 230 */ , + 0x4c, 0x301 /* offset 232 */ , + 0x6c, 0x301 /* offset 234 */ , + 0x4c, 0x327 /* offset 236 */ , + 0x6c, 0x327 /* offset 238 */ , + 0x4c, 0x30c /* offset 240 */ , + 0x6c, 0x30c /* offset 242 */ , + 0x4c, 0xb7 /* offset 244 */ , + 0x6c, 0xb7 /* offset 246 */ , + 0x4e, 0x301 /* offset 248 */ , + 0x6e, 0x301 /* offset 250 */ , + 0x4e, 0x327 /* offset 252 */ , + 0x6e, 0x327 /* offset 254 */ , + 0x4e, 0x30c /* offset 256 */ , + 0x6e, 0x30c /* offset 258 */ , + 0x2bc, 0x6e /* offset 260 */ , + 0x4f, 0x304 /* offset 262 */ , + 0x6f, 0x304 /* offset 264 */ , + 0x4f, 0x306 /* offset 266 */ , + 0x6f, 0x306 /* offset 268 */ , + 0x4f, 0x30b /* offset 270 */ , + 0x6f, 0x30b /* offset 272 */ , + 0x52, 0x301 /* offset 274 */ , + 0x72, 0x301 /* offset 276 */ , + 0x52, 0x327 /* offset 278 */ , + 0x72, 0x327 /* offset 280 */ , + 0x52, 0x30c /* offset 282 */ , + 0x72, 0x30c /* offset 284 */ , + 0x53, 0x301 /* offset 286 */ , + 0x73, 0x301 /* offset 288 */ , + 0x53, 0x302 /* offset 290 */ , + 0x73, 0x302 /* offset 292 */ , + 0x53, 0x327 /* offset 294 */ , + 0x73, 0x327 /* offset 296 */ , + 0x53, 0x30c /* offset 298 */ , + 0x73, 0x30c /* offset 300 */ , + 0x54, 0x327 /* offset 302 */ , + 0x74, 0x327 /* offset 304 */ , + 0x54, 0x30c /* offset 306 */ , + 0x74, 0x30c /* offset 308 */ , + 0x55, 0x303 /* offset 310 */ , + 0x75, 0x303 /* offset 312 */ , + 0x55, 0x304 /* offset 314 */ , + 0x75, 0x304 /* offset 316 */ , + 0x55, 0x306 /* offset 318 */ , + 0x75, 0x306 /* offset 320 */ , + 0x55, 0x30a /* offset 322 */ , + 0x75, 0x30a /* offset 324 */ , + 0x55, 0x30b /* offset 326 */ , + 0x75, 0x30b /* offset 328 */ , + 0x55, 0x328 /* offset 330 */ , + 0x75, 0x328 /* offset 332 */ , + 0x57, 0x302 /* offset 334 */ , + 0x77, 0x302 /* offset 336 */ , + 0x59, 0x302 /* offset 338 */ , + 0x79, 0x302 /* offset 340 */ , + 0x59, 0x308 /* offset 342 */ , + 0x5a, 0x301 /* offset 344 */ , + 0x7a, 0x301 /* offset 346 */ , + 0x5a, 0x307 /* offset 348 */ , + 0x7a, 0x307 /* offset 350 */ , + 0x5a, 0x30c /* offset 352 */ , + 0x7a, 0x30c /* offset 354 */ , + 0x73 /* offset 356 */ , + 0x4f, 0x31b /* offset 357 */ , + 0x6f, 0x31b /* offset 359 */ , + 0x55, 0x31b /* offset 361 */ , + 0x75, 0x31b /* offset 363 */ , + 0x44, 0x5a, 0x30c /* offset 365 */ , + 0x44, 0x7a, 0x30c /* offset 368 */ , + 0x64, 0x7a, 0x30c /* offset 371 */ , + 0x4c, 0x4a /* offset 374 */ , + 0x4c, 0x6a /* offset 376 */ , + 0x6c, 0x6a /* offset 378 */ , + 0x4e, 0x4a /* offset 380 */ , + 0x4e, 0x6a /* offset 382 */ , + 0x6e, 0x6a /* offset 384 */ , + 0x41, 0x30c /* offset 386 */ , + 0x61, 0x30c /* offset 388 */ , + 0x49, 0x30c /* offset 390 */ , + 0x69, 0x30c /* offset 392 */ , + 0x4f, 0x30c /* offset 394 */ , + 0x6f, 0x30c /* offset 396 */ , + 0x55, 0x30c /* offset 398 */ , + 0x75, 0x30c /* offset 400 */ , + 0x55, 0x308, 0x304 /* offset 402 */ , + 0x75, 0x308, 0x304 /* offset 405 */ , + 0x55, 0x308, 0x301 /* offset 408 */ , + 0x75, 0x308, 0x301 /* offset 411 */ , + 0x55, 0x308, 0x30c /* offset 414 */ , + 0x75, 0x308, 0x30c /* offset 417 */ , + 0x55, 0x308, 0x300 /* offset 420 */ , + 0x75, 0x308, 0x300 /* offset 423 */ , + 0x41, 0x308, 0x304 /* offset 426 */ , + 0x61, 0x308, 0x304 /* offset 429 */ , + 0x41, 0x307, 0x304 /* offset 432 */ , + 0x61, 0x307, 0x304 /* offset 435 */ , + 0xc6, 0x304 /* offset 438 */ , + 0xe6, 0x304 /* offset 440 */ , + 0x47, 0x30c /* offset 442 */ , + 0x67, 0x30c /* offset 444 */ , + 0x4b, 0x30c /* offset 446 */ , + 0x6b, 0x30c /* offset 448 */ , + 0x4f, 0x328 /* offset 450 */ , + 0x6f, 0x328 /* offset 452 */ , + 0x4f, 0x328, 0x304 /* offset 454 */ , + 0x6f, 0x328, 0x304 /* offset 457 */ , + 0x1b7, 0x30c /* offset 460 */ , + 0x292, 0x30c /* offset 462 */ , + 0x6a, 0x30c /* offset 464 */ , + 0x44, 0x5a /* offset 466 */ , + 0x44, 0x7a /* offset 468 */ , + 0x64, 0x7a /* offset 470 */ , + 0x47, 0x301 /* offset 472 */ , + 0x67, 0x301 /* offset 474 */ , + 0x4e, 0x300 /* offset 476 */ , + 0x6e, 0x300 /* offset 478 */ , + 0x41, 0x30a, 0x301 /* offset 480 */ , + 0x61, 0x30a, 0x301 /* offset 483 */ , + 0xc6, 0x301 /* offset 486 */ , + 0xe6, 0x301 /* offset 488 */ , + 0xd8, 0x301 /* offset 490 */ , + 0xf8, 0x301 /* offset 492 */ , + 0x41, 0x30f /* offset 494 */ , + 0x61, 0x30f /* offset 496 */ , + 0x41, 0x311 /* offset 498 */ , + 0x61, 0x311 /* offset 500 */ , + 0x45, 0x30f /* offset 502 */ , + 0x65, 0x30f /* offset 504 */ , + 0x45, 0x311 /* offset 506 */ , + 0x65, 0x311 /* offset 508 */ , + 0x49, 0x30f /* offset 510 */ , + 0x69, 0x30f /* offset 512 */ , + 0x49, 0x311 /* offset 514 */ , + 0x69, 0x311 /* offset 516 */ , + 0x4f, 0x30f /* offset 518 */ , + 0x6f, 0x30f /* offset 520 */ , + 0x4f, 0x311 /* offset 522 */ , + 0x6f, 0x311 /* offset 524 */ , + 0x52, 0x30f /* offset 526 */ , + 0x72, 0x30f /* offset 528 */ , + 0x52, 0x311 /* offset 530 */ , + 0x72, 0x311 /* offset 532 */ , + 0x55, 0x30f /* offset 534 */ , + 0x75, 0x30f /* offset 536 */ , + 0x55, 0x311 /* offset 538 */ , + 0x75, 0x311 /* offset 540 */ , + 0x53, 0x326 /* offset 542 */ , + 0x73, 0x326 /* offset 544 */ , + 0x54, 0x326 /* offset 546 */ , + 0x74, 0x326 /* offset 548 */ , + 0x48, 0x30c /* offset 550 */ , + 0x68, 0x30c /* offset 552 */ , + 0x41, 0x307 /* offset 554 */ , + 0x61, 0x307 /* offset 556 */ , + 0x45, 0x327 /* offset 558 */ , + 0x65, 0x327 /* offset 560 */ , + 0x4f, 0x308, 0x304 /* offset 562 */ , + 0x6f, 0x308, 0x304 /* offset 565 */ , + 0x4f, 0x303, 0x304 /* offset 568 */ , + 0x6f, 0x303, 0x304 /* offset 571 */ , + 0x4f, 0x307 /* offset 574 */ , + 0x6f, 0x307 /* offset 576 */ , + 0x4f, 0x307, 0x304 /* offset 578 */ , + 0x6f, 0x307, 0x304 /* offset 581 */ , + 0x59, 0x304 /* offset 584 */ , + 0x79, 0x304 /* offset 586 */ , + 0x68 /* offset 588 */ , + 0x266 /* offset 589 */ , + 0x6a /* offset 590 */ , + 0x72 /* offset 591 */ , + 0x279 /* offset 592 */ , + 0x27b /* offset 593 */ , + 0x281 /* offset 594 */ , + 0x77 /* offset 595 */ , + 0x79 /* offset 596 */ , + 0x20, 0x306 /* offset 597 */ , + 0x20, 0x307 /* offset 599 */ , + 0x20, 0x30a /* offset 601 */ , + 0x20, 0x328 /* offset 603 */ , + 0x20, 0x303 /* offset 605 */ , + 0x20, 0x30b /* offset 607 */ , + 0x263 /* offset 609 */ , + 0x6c /* offset 610 */ , + 0x78 /* offset 611 */ , + 0x295 /* offset 612 */ , + 0x300 /* offset 613 */ , + 0x301 /* offset 614 */ , + 0x313 /* offset 615 */ , + 0x308, 0x301 /* offset 616 */ , + 0x2b9 /* offset 618 */ , + 0x20, 0x345 /* offset 619 */ , + 0x3b /* offset 621 */ , + 0x20, 0x308, 0x301 /* offset 622 */ , + 0x391, 0x301 /* offset 625 */ , + 0xb7 /* offset 627 */ , + 0x395, 0x301 /* offset 628 */ , + 0x397, 0x301 /* offset 630 */ , + 0x399, 0x301 /* offset 632 */ , + 0x39f, 0x301 /* offset 634 */ , + 0x3a5, 0x301 /* offset 636 */ , + 0x3a9, 0x301 /* offset 638 */ , + 0x3b9, 0x308, 0x301 /* offset 640 */ , + 0x399, 0x308 /* offset 643 */ , + 0x3a5, 0x308 /* offset 645 */ , + 0x3b1, 0x301 /* offset 647 */ , + 0x3b5, 0x301 /* offset 649 */ , + 0x3b7, 0x301 /* offset 651 */ , + 0x3b9, 0x301 /* offset 653 */ , + 0x3c5, 0x308, 0x301 /* offset 655 */ , + 0x3b9, 0x308 /* offset 658 */ , + 0x3c5, 0x308 /* offset 660 */ , + 0x3bf, 0x301 /* offset 662 */ , + 0x3c5, 0x301 /* offset 664 */ , + 0x3c9, 0x301 /* offset 666 */ , + 0x3b2 /* offset 668 */ , + 0x3b8 /* offset 669 */ , + 0x3a5 /* offset 670 */ , + 0x3c6 /* offset 671 */ , + 0x3c0 /* offset 672 */ , + 0x3ba /* offset 673 */ , + 0x3c1 /* offset 674 */ , + 0x3c2 /* offset 675 */ , + 0x398 /* offset 676 */ , + 0x3b5 /* offset 677 */ , + 0x415, 0x300 /* offset 678 */ , + 0x415, 0x308 /* offset 680 */ , + 0x413, 0x301 /* offset 682 */ , + 0x406, 0x308 /* offset 684 */ , + 0x41a, 0x301 /* offset 686 */ , + 0x418, 0x300 /* offset 688 */ , + 0x423, 0x306 /* offset 690 */ , + 0x418, 0x306 /* offset 692 */ , + 0x438, 0x306 /* offset 694 */ , + 0x435, 0x300 /* offset 696 */ , + 0x435, 0x308 /* offset 698 */ , + 0x433, 0x301 /* offset 700 */ , + 0x456, 0x308 /* offset 702 */ , + 0x43a, 0x301 /* offset 704 */ , + 0x438, 0x300 /* offset 706 */ , + 0x443, 0x306 /* offset 708 */ , + 0x474, 0x30f /* offset 710 */ , + 0x475, 0x30f /* offset 712 */ , + 0x416, 0x306 /* offset 714 */ , + 0x436, 0x306 /* offset 716 */ , + 0x410, 0x306 /* offset 718 */ , + 0x430, 0x306 /* offset 720 */ , + 0x410, 0x308 /* offset 722 */ , + 0x430, 0x308 /* offset 724 */ , + 0x415, 0x306 /* offset 726 */ , + 0x435, 0x306 /* offset 728 */ , + 0x4d8, 0x308 /* offset 730 */ , + 0x4d9, 0x308 /* offset 732 */ , + 0x416, 0x308 /* offset 734 */ , + 0x436, 0x308 /* offset 736 */ , + 0x417, 0x308 /* offset 738 */ , + 0x437, 0x308 /* offset 740 */ , + 0x418, 0x304 /* offset 742 */ , + 0x438, 0x304 /* offset 744 */ , + 0x418, 0x308 /* offset 746 */ , + 0x438, 0x308 /* offset 748 */ , + 0x41e, 0x308 /* offset 750 */ , + 0x43e, 0x308 /* offset 752 */ , + 0x4e8, 0x308 /* offset 754 */ , + 0x4e9, 0x308 /* offset 756 */ , + 0x42d, 0x308 /* offset 758 */ , + 0x44d, 0x308 /* offset 760 */ , + 0x423, 0x304 /* offset 762 */ , + 0x443, 0x304 /* offset 764 */ , + 0x423, 0x308 /* offset 766 */ , + 0x443, 0x308 /* offset 768 */ , + 0x423, 0x30b /* offset 770 */ , + 0x443, 0x30b /* offset 772 */ , + 0x427, 0x308 /* offset 774 */ , + 0x447, 0x308 /* offset 776 */ , + 0x42b, 0x308 /* offset 778 */ , + 0x44b, 0x308 /* offset 780 */ , + 0x565, 0x582 /* offset 782 */ , + 0x627, 0x653 /* offset 784 */ , + 0x627, 0x654 /* offset 786 */ , + 0x648, 0x654 /* offset 788 */ , + 0x627, 0x655 /* offset 790 */ , + 0x64a, 0x654 /* offset 792 */ , + 0x627, 0x674 /* offset 794 */ , + 0x648, 0x674 /* offset 796 */ , + 0x6c7, 0x674 /* offset 798 */ , + 0x64a, 0x674 /* offset 800 */ , + 0x6d5, 0x654 /* offset 802 */ , + 0x6c1, 0x654 /* offset 804 */ , + 0x6d2, 0x654 /* offset 806 */ , + 0x928, 0x93c /* offset 808 */ , + 0x930, 0x93c /* offset 810 */ , + 0x933, 0x93c /* offset 812 */ , + 0x915, 0x93c /* offset 814 */ , + 0x916, 0x93c /* offset 816 */ , + 0x917, 0x93c /* offset 818 */ , + 0x91c, 0x93c /* offset 820 */ , + 0x921, 0x93c /* offset 822 */ , + 0x922, 0x93c /* offset 824 */ , + 0x92b, 0x93c /* offset 826 */ , + 0x92f, 0x93c /* offset 828 */ , + 0x9c7, 0x9be /* offset 830 */ , + 0x9c7, 0x9d7 /* offset 832 */ , + 0x9a1, 0x9bc /* offset 834 */ , + 0x9a2, 0x9bc /* offset 836 */ , + 0x9af, 0x9bc /* offset 838 */ , + 0xa32, 0xa3c /* offset 840 */ , + 0xa38, 0xa3c /* offset 842 */ , + 0xa16, 0xa3c /* offset 844 */ , + 0xa17, 0xa3c /* offset 846 */ , + 0xa1c, 0xa3c /* offset 848 */ , + 0xa2b, 0xa3c /* offset 850 */ , + 0xb47, 0xb56 /* offset 852 */ , + 0xb47, 0xb3e /* offset 854 */ , + 0xb47, 0xb57 /* offset 856 */ , + 0xb21, 0xb3c /* offset 858 */ , + 0xb22, 0xb3c /* offset 860 */ , + 0xb92, 0xbd7 /* offset 862 */ , + 0xbc6, 0xbbe /* offset 864 */ , + 0xbc7, 0xbbe /* offset 866 */ , + 0xbc6, 0xbd7 /* offset 868 */ , + 0xc46, 0xc56 /* offset 870 */ , + 0xcbf, 0xcd5 /* offset 872 */ , + 0xcc6, 0xcd5 /* offset 874 */ , + 0xcc6, 0xcd6 /* offset 876 */ , + 0xcc6, 0xcc2 /* offset 878 */ , + 0xcc6, 0xcc2, 0xcd5 /* offset 880 */ , + 0xd46, 0xd3e /* offset 883 */ , + 0xd47, 0xd3e /* offset 885 */ , + 0xd46, 0xd57 /* offset 887 */ , + 0xdd9, 0xdca /* offset 889 */ , + 0xdd9, 0xdcf /* offset 891 */ , + 0xdd9, 0xdcf, 0xdca /* offset 893 */ , + 0xdd9, 0xddf /* offset 896 */ , + 0xe4d, 0xe32 /* offset 898 */ , + 0xecd, 0xeb2 /* offset 900 */ , + 0xeab, 0xe99 /* offset 902 */ , + 0xeab, 0xea1 /* offset 904 */ , + 0xf0b /* offset 906 */ , + 0xf42, 0xfb7 /* offset 907 */ , + 0xf4c, 0xfb7 /* offset 909 */ , + 0xf51, 0xfb7 /* offset 911 */ , + 0xf56, 0xfb7 /* offset 913 */ , + 0xf5b, 0xfb7 /* offset 915 */ , + 0xf40, 0xfb5 /* offset 917 */ , + 0xf71, 0xf72 /* offset 919 */ , + 0xf71, 0xf74 /* offset 921 */ , + 0xfb2, 0xf80 /* offset 923 */ , + 0xfb2, 0xf71, 0xf80 /* offset 925 */ , + 0xfb3, 0xf80 /* offset 928 */ , + 0xfb3, 0xf71, 0xf80 /* offset 930 */ , + 0xf71, 0xf80 /* offset 933 */ , + 0xf92, 0xfb7 /* offset 935 */ , + 0xf9c, 0xfb7 /* offset 937 */ , + 0xfa1, 0xfb7 /* offset 939 */ , + 0xfa6, 0xfb7 /* offset 941 */ , + 0xfab, 0xfb7 /* offset 943 */ , + 0xf90, 0xfb5 /* offset 945 */ , + 0x1025, 0x102e /* offset 947 */ , + 0x41, 0x325 /* offset 949 */ , + 0x61, 0x325 /* offset 951 */ , + 0x42, 0x307 /* offset 953 */ , + 0x62, 0x307 /* offset 955 */ , + 0x42, 0x323 /* offset 957 */ , + 0x62, 0x323 /* offset 959 */ , + 0x42, 0x331 /* offset 961 */ , + 0x62, 0x331 /* offset 963 */ , + 0x43, 0x327, 0x301 /* offset 965 */ , + 0x63, 0x327, 0x301 /* offset 968 */ , + 0x44, 0x307 /* offset 971 */ , + 0x64, 0x307 /* offset 973 */ , + 0x44, 0x323 /* offset 975 */ , + 0x64, 0x323 /* offset 977 */ , + 0x44, 0x331 /* offset 979 */ , + 0x64, 0x331 /* offset 981 */ , + 0x44, 0x327 /* offset 983 */ , + 0x64, 0x327 /* offset 985 */ , + 0x44, 0x32d /* offset 987 */ , + 0x64, 0x32d /* offset 989 */ , + 0x45, 0x304, 0x300 /* offset 991 */ , + 0x65, 0x304, 0x300 /* offset 994 */ , + 0x45, 0x304, 0x301 /* offset 997 */ , + 0x65, 0x304, 0x301 /* offset 1000 */ , + 0x45, 0x32d /* offset 1003 */ , + 0x65, 0x32d /* offset 1005 */ , + 0x45, 0x330 /* offset 1007 */ , + 0x65, 0x330 /* offset 1009 */ , + 0x45, 0x327, 0x306 /* offset 1011 */ , + 0x65, 0x327, 0x306 /* offset 1014 */ , + 0x46, 0x307 /* offset 1017 */ , + 0x66, 0x307 /* offset 1019 */ , + 0x47, 0x304 /* offset 1021 */ , + 0x67, 0x304 /* offset 1023 */ , + 0x48, 0x307 /* offset 1025 */ , + 0x68, 0x307 /* offset 1027 */ , + 0x48, 0x323 /* offset 1029 */ , + 0x68, 0x323 /* offset 1031 */ , + 0x48, 0x308 /* offset 1033 */ , + 0x68, 0x308 /* offset 1035 */ , + 0x48, 0x327 /* offset 1037 */ , + 0x68, 0x327 /* offset 1039 */ , + 0x48, 0x32e /* offset 1041 */ , + 0x68, 0x32e /* offset 1043 */ , + 0x49, 0x330 /* offset 1045 */ , + 0x69, 0x330 /* offset 1047 */ , + 0x49, 0x308, 0x301 /* offset 1049 */ , + 0x69, 0x308, 0x301 /* offset 1052 */ , + 0x4b, 0x301 /* offset 1055 */ , + 0x6b, 0x301 /* offset 1057 */ , + 0x4b, 0x323 /* offset 1059 */ , + 0x6b, 0x323 /* offset 1061 */ , + 0x4b, 0x331 /* offset 1063 */ , + 0x6b, 0x331 /* offset 1065 */ , + 0x4c, 0x323 /* offset 1067 */ , + 0x6c, 0x323 /* offset 1069 */ , + 0x4c, 0x323, 0x304 /* offset 1071 */ , + 0x6c, 0x323, 0x304 /* offset 1074 */ , + 0x4c, 0x331 /* offset 1077 */ , + 0x6c, 0x331 /* offset 1079 */ , + 0x4c, 0x32d /* offset 1081 */ , + 0x6c, 0x32d /* offset 1083 */ , + 0x4d, 0x301 /* offset 1085 */ , + 0x6d, 0x301 /* offset 1087 */ , + 0x4d, 0x307 /* offset 1089 */ , + 0x6d, 0x307 /* offset 1091 */ , + 0x4d, 0x323 /* offset 1093 */ , + 0x6d, 0x323 /* offset 1095 */ , + 0x4e, 0x307 /* offset 1097 */ , + 0x6e, 0x307 /* offset 1099 */ , + 0x4e, 0x323 /* offset 1101 */ , + 0x6e, 0x323 /* offset 1103 */ , + 0x4e, 0x331 /* offset 1105 */ , + 0x6e, 0x331 /* offset 1107 */ , + 0x4e, 0x32d /* offset 1109 */ , + 0x6e, 0x32d /* offset 1111 */ , + 0x4f, 0x303, 0x301 /* offset 1113 */ , + 0x6f, 0x303, 0x301 /* offset 1116 */ , + 0x4f, 0x303, 0x308 /* offset 1119 */ , + 0x6f, 0x303, 0x308 /* offset 1122 */ , + 0x4f, 0x304, 0x300 /* offset 1125 */ , + 0x6f, 0x304, 0x300 /* offset 1128 */ , + 0x4f, 0x304, 0x301 /* offset 1131 */ , + 0x6f, 0x304, 0x301 /* offset 1134 */ , + 0x50, 0x301 /* offset 1137 */ , + 0x70, 0x301 /* offset 1139 */ , + 0x50, 0x307 /* offset 1141 */ , + 0x70, 0x307 /* offset 1143 */ , + 0x52, 0x307 /* offset 1145 */ , + 0x72, 0x307 /* offset 1147 */ , + 0x52, 0x323 /* offset 1149 */ , + 0x72, 0x323 /* offset 1151 */ , + 0x52, 0x323, 0x304 /* offset 1153 */ , + 0x72, 0x323, 0x304 /* offset 1156 */ , + 0x52, 0x331 /* offset 1159 */ , + 0x72, 0x331 /* offset 1161 */ , + 0x53, 0x307 /* offset 1163 */ , + 0x73, 0x307 /* offset 1165 */ , + 0x53, 0x323 /* offset 1167 */ , + 0x73, 0x323 /* offset 1169 */ , + 0x53, 0x301, 0x307 /* offset 1171 */ , + 0x73, 0x301, 0x307 /* offset 1174 */ , + 0x53, 0x30c, 0x307 /* offset 1177 */ , + 0x73, 0x30c, 0x307 /* offset 1180 */ , + 0x53, 0x323, 0x307 /* offset 1183 */ , + 0x73, 0x323, 0x307 /* offset 1186 */ , + 0x54, 0x307 /* offset 1189 */ , + 0x74, 0x307 /* offset 1191 */ , + 0x54, 0x323 /* offset 1193 */ , + 0x74, 0x323 /* offset 1195 */ , + 0x54, 0x331 /* offset 1197 */ , + 0x74, 0x331 /* offset 1199 */ , + 0x54, 0x32d /* offset 1201 */ , + 0x74, 0x32d /* offset 1203 */ , + 0x55, 0x324 /* offset 1205 */ , + 0x75, 0x324 /* offset 1207 */ , + 0x55, 0x330 /* offset 1209 */ , + 0x75, 0x330 /* offset 1211 */ , + 0x55, 0x32d /* offset 1213 */ , + 0x75, 0x32d /* offset 1215 */ , + 0x55, 0x303, 0x301 /* offset 1217 */ , + 0x75, 0x303, 0x301 /* offset 1220 */ , + 0x55, 0x304, 0x308 /* offset 1223 */ , + 0x75, 0x304, 0x308 /* offset 1226 */ , + 0x56, 0x303 /* offset 1229 */ , + 0x76, 0x303 /* offset 1231 */ , + 0x56, 0x323 /* offset 1233 */ , + 0x76, 0x323 /* offset 1235 */ , + 0x57, 0x300 /* offset 1237 */ , + 0x77, 0x300 /* offset 1239 */ , + 0x57, 0x301 /* offset 1241 */ , + 0x77, 0x301 /* offset 1243 */ , + 0x57, 0x308 /* offset 1245 */ , + 0x77, 0x308 /* offset 1247 */ , + 0x57, 0x307 /* offset 1249 */ , + 0x77, 0x307 /* offset 1251 */ , + 0x57, 0x323 /* offset 1253 */ , + 0x77, 0x323 /* offset 1255 */ , + 0x58, 0x307 /* offset 1257 */ , + 0x78, 0x307 /* offset 1259 */ , + 0x58, 0x308 /* offset 1261 */ , + 0x78, 0x308 /* offset 1263 */ , + 0x59, 0x307 /* offset 1265 */ , + 0x79, 0x307 /* offset 1267 */ , + 0x5a, 0x302 /* offset 1269 */ , + 0x7a, 0x302 /* offset 1271 */ , + 0x5a, 0x323 /* offset 1273 */ , + 0x7a, 0x323 /* offset 1275 */ , + 0x5a, 0x331 /* offset 1277 */ , + 0x7a, 0x331 /* offset 1279 */ , + 0x68, 0x331 /* offset 1281 */ , + 0x74, 0x308 /* offset 1283 */ , + 0x77, 0x30a /* offset 1285 */ , + 0x79, 0x30a /* offset 1287 */ , + 0x61, 0x2be /* offset 1289 */ , + 0x41, 0x323 /* offset 1291 */ , + 0x61, 0x323 /* offset 1293 */ , + 0x41, 0x309 /* offset 1295 */ , + 0x61, 0x309 /* offset 1297 */ , + 0x41, 0x302, 0x301 /* offset 1299 */ , + 0x61, 0x302, 0x301 /* offset 1302 */ , + 0x41, 0x302, 0x300 /* offset 1305 */ , + 0x61, 0x302, 0x300 /* offset 1308 */ , + 0x41, 0x302, 0x309 /* offset 1311 */ , + 0x61, 0x302, 0x309 /* offset 1314 */ , + 0x41, 0x302, 0x303 /* offset 1317 */ , + 0x61, 0x302, 0x303 /* offset 1320 */ , + 0x41, 0x323, 0x302 /* offset 1323 */ , + 0x61, 0x323, 0x302 /* offset 1326 */ , + 0x41, 0x306, 0x301 /* offset 1329 */ , + 0x61, 0x306, 0x301 /* offset 1332 */ , + 0x41, 0x306, 0x300 /* offset 1335 */ , + 0x61, 0x306, 0x300 /* offset 1338 */ , + 0x41, 0x306, 0x309 /* offset 1341 */ , + 0x61, 0x306, 0x309 /* offset 1344 */ , + 0x41, 0x306, 0x303 /* offset 1347 */ , + 0x61, 0x306, 0x303 /* offset 1350 */ , + 0x41, 0x323, 0x306 /* offset 1353 */ , + 0x61, 0x323, 0x306 /* offset 1356 */ , + 0x45, 0x323 /* offset 1359 */ , + 0x65, 0x323 /* offset 1361 */ , + 0x45, 0x309 /* offset 1363 */ , + 0x65, 0x309 /* offset 1365 */ , + 0x45, 0x303 /* offset 1367 */ , + 0x65, 0x303 /* offset 1369 */ , + 0x45, 0x302, 0x301 /* offset 1371 */ , + 0x65, 0x302, 0x301 /* offset 1374 */ , + 0x45, 0x302, 0x300 /* offset 1377 */ , + 0x65, 0x302, 0x300 /* offset 1380 */ , + 0x45, 0x302, 0x309 /* offset 1383 */ , + 0x65, 0x302, 0x309 /* offset 1386 */ , + 0x45, 0x302, 0x303 /* offset 1389 */ , + 0x65, 0x302, 0x303 /* offset 1392 */ , + 0x45, 0x323, 0x302 /* offset 1395 */ , + 0x65, 0x323, 0x302 /* offset 1398 */ , + 0x49, 0x309 /* offset 1401 */ , + 0x69, 0x309 /* offset 1403 */ , + 0x49, 0x323 /* offset 1405 */ , + 0x69, 0x323 /* offset 1407 */ , + 0x4f, 0x323 /* offset 1409 */ , + 0x6f, 0x323 /* offset 1411 */ , + 0x4f, 0x309 /* offset 1413 */ , + 0x6f, 0x309 /* offset 1415 */ , + 0x4f, 0x302, 0x301 /* offset 1417 */ , + 0x6f, 0x302, 0x301 /* offset 1420 */ , + 0x4f, 0x302, 0x300 /* offset 1423 */ , + 0x6f, 0x302, 0x300 /* offset 1426 */ , + 0x4f, 0x302, 0x309 /* offset 1429 */ , + 0x6f, 0x302, 0x309 /* offset 1432 */ , + 0x4f, 0x302, 0x303 /* offset 1435 */ , + 0x6f, 0x302, 0x303 /* offset 1438 */ , + 0x4f, 0x323, 0x302 /* offset 1441 */ , + 0x6f, 0x323, 0x302 /* offset 1444 */ , + 0x4f, 0x31b, 0x301 /* offset 1447 */ , + 0x6f, 0x31b, 0x301 /* offset 1450 */ , + 0x4f, 0x31b, 0x300 /* offset 1453 */ , + 0x6f, 0x31b, 0x300 /* offset 1456 */ , + 0x4f, 0x31b, 0x309 /* offset 1459 */ , + 0x6f, 0x31b, 0x309 /* offset 1462 */ , + 0x4f, 0x31b, 0x303 /* offset 1465 */ , + 0x6f, 0x31b, 0x303 /* offset 1468 */ , + 0x4f, 0x31b, 0x323 /* offset 1471 */ , + 0x6f, 0x31b, 0x323 /* offset 1474 */ , + 0x55, 0x323 /* offset 1477 */ , + 0x75, 0x323 /* offset 1479 */ , + 0x55, 0x309 /* offset 1481 */ , + 0x75, 0x309 /* offset 1483 */ , + 0x55, 0x31b, 0x301 /* offset 1485 */ , + 0x75, 0x31b, 0x301 /* offset 1488 */ , + 0x55, 0x31b, 0x300 /* offset 1491 */ , + 0x75, 0x31b, 0x300 /* offset 1494 */ , + 0x55, 0x31b, 0x309 /* offset 1497 */ , + 0x75, 0x31b, 0x309 /* offset 1500 */ , + 0x55, 0x31b, 0x303 /* offset 1503 */ , + 0x75, 0x31b, 0x303 /* offset 1506 */ , + 0x55, 0x31b, 0x323 /* offset 1509 */ , + 0x75, 0x31b, 0x323 /* offset 1512 */ , + 0x59, 0x300 /* offset 1515 */ , + 0x79, 0x300 /* offset 1517 */ , + 0x59, 0x323 /* offset 1519 */ , + 0x79, 0x323 /* offset 1521 */ , + 0x59, 0x309 /* offset 1523 */ , + 0x79, 0x309 /* offset 1525 */ , + 0x59, 0x303 /* offset 1527 */ , + 0x79, 0x303 /* offset 1529 */ , + 0x3b1, 0x313 /* offset 1531 */ , + 0x3b1, 0x314 /* offset 1533 */ , + 0x3b1, 0x313, 0x300 /* offset 1535 */ , + 0x3b1, 0x314, 0x300 /* offset 1538 */ , + 0x3b1, 0x313, 0x301 /* offset 1541 */ , + 0x3b1, 0x314, 0x301 /* offset 1544 */ , + 0x3b1, 0x313, 0x342 /* offset 1547 */ , + 0x3b1, 0x314, 0x342 /* offset 1550 */ , + 0x391, 0x313 /* offset 1553 */ , + 0x391, 0x314 /* offset 1555 */ , + 0x391, 0x313, 0x300 /* offset 1557 */ , + 0x391, 0x314, 0x300 /* offset 1560 */ , + 0x391, 0x313, 0x301 /* offset 1563 */ , + 0x391, 0x314, 0x301 /* offset 1566 */ , + 0x391, 0x313, 0x342 /* offset 1569 */ , + 0x391, 0x314, 0x342 /* offset 1572 */ , + 0x3b5, 0x313 /* offset 1575 */ , + 0x3b5, 0x314 /* offset 1577 */ , + 0x3b5, 0x313, 0x300 /* offset 1579 */ , + 0x3b5, 0x314, 0x300 /* offset 1582 */ , + 0x3b5, 0x313, 0x301 /* offset 1585 */ , + 0x3b5, 0x314, 0x301 /* offset 1588 */ , + 0x395, 0x313 /* offset 1591 */ , + 0x395, 0x314 /* offset 1593 */ , + 0x395, 0x313, 0x300 /* offset 1595 */ , + 0x395, 0x314, 0x300 /* offset 1598 */ , + 0x395, 0x313, 0x301 /* offset 1601 */ , + 0x395, 0x314, 0x301 /* offset 1604 */ , + 0x3b7, 0x313 /* offset 1607 */ , + 0x3b7, 0x314 /* offset 1609 */ , + 0x3b7, 0x313, 0x300 /* offset 1611 */ , + 0x3b7, 0x314, 0x300 /* offset 1614 */ , + 0x3b7, 0x313, 0x301 /* offset 1617 */ , + 0x3b7, 0x314, 0x301 /* offset 1620 */ , + 0x3b7, 0x313, 0x342 /* offset 1623 */ , + 0x3b7, 0x314, 0x342 /* offset 1626 */ , + 0x397, 0x313 /* offset 1629 */ , + 0x397, 0x314 /* offset 1631 */ , + 0x397, 0x313, 0x300 /* offset 1633 */ , + 0x397, 0x314, 0x300 /* offset 1636 */ , + 0x397, 0x313, 0x301 /* offset 1639 */ , + 0x397, 0x314, 0x301 /* offset 1642 */ , + 0x397, 0x313, 0x342 /* offset 1645 */ , + 0x397, 0x314, 0x342 /* offset 1648 */ , + 0x3b9, 0x313 /* offset 1651 */ , + 0x3b9, 0x314 /* offset 1653 */ , + 0x3b9, 0x313, 0x300 /* offset 1655 */ , + 0x3b9, 0x314, 0x300 /* offset 1658 */ , + 0x3b9, 0x313, 0x301 /* offset 1661 */ , + 0x3b9, 0x314, 0x301 /* offset 1664 */ , + 0x3b9, 0x313, 0x342 /* offset 1667 */ , + 0x3b9, 0x314, 0x342 /* offset 1670 */ , + 0x399, 0x313 /* offset 1673 */ , + 0x399, 0x314 /* offset 1675 */ , + 0x399, 0x313, 0x300 /* offset 1677 */ , + 0x399, 0x314, 0x300 /* offset 1680 */ , + 0x399, 0x313, 0x301 /* offset 1683 */ , + 0x399, 0x314, 0x301 /* offset 1686 */ , + 0x399, 0x313, 0x342 /* offset 1689 */ , + 0x399, 0x314, 0x342 /* offset 1692 */ , + 0x3bf, 0x313 /* offset 1695 */ , + 0x3bf, 0x314 /* offset 1697 */ , + 0x3bf, 0x313, 0x300 /* offset 1699 */ , + 0x3bf, 0x314, 0x300 /* offset 1702 */ , + 0x3bf, 0x313, 0x301 /* offset 1705 */ , + 0x3bf, 0x314, 0x301 /* offset 1708 */ , + 0x39f, 0x313 /* offset 1711 */ , + 0x39f, 0x314 /* offset 1713 */ , + 0x39f, 0x313, 0x300 /* offset 1715 */ , + 0x39f, 0x314, 0x300 /* offset 1718 */ , + 0x39f, 0x313, 0x301 /* offset 1721 */ , + 0x39f, 0x314, 0x301 /* offset 1724 */ , + 0x3c5, 0x313 /* offset 1727 */ , + 0x3c5, 0x314 /* offset 1729 */ , + 0x3c5, 0x313, 0x300 /* offset 1731 */ , + 0x3c5, 0x314, 0x300 /* offset 1734 */ , + 0x3c5, 0x313, 0x301 /* offset 1737 */ , + 0x3c5, 0x314, 0x301 /* offset 1740 */ , + 0x3c5, 0x313, 0x342 /* offset 1743 */ , + 0x3c5, 0x314, 0x342 /* offset 1746 */ , + 0x3a5, 0x314 /* offset 1749 */ , + 0x3a5, 0x314, 0x300 /* offset 1751 */ , + 0x3a5, 0x314, 0x301 /* offset 1754 */ , + 0x3a5, 0x314, 0x342 /* offset 1757 */ , + 0x3c9, 0x313 /* offset 1760 */ , + 0x3c9, 0x314 /* offset 1762 */ , + 0x3c9, 0x313, 0x300 /* offset 1764 */ , + 0x3c9, 0x314, 0x300 /* offset 1767 */ , + 0x3c9, 0x313, 0x301 /* offset 1770 */ , + 0x3c9, 0x314, 0x301 /* offset 1773 */ , + 0x3c9, 0x313, 0x342 /* offset 1776 */ , + 0x3c9, 0x314, 0x342 /* offset 1779 */ , + 0x3a9, 0x313 /* offset 1782 */ , + 0x3a9, 0x314 /* offset 1784 */ , + 0x3a9, 0x313, 0x300 /* offset 1786 */ , + 0x3a9, 0x314, 0x300 /* offset 1789 */ , + 0x3a9, 0x313, 0x301 /* offset 1792 */ , + 0x3a9, 0x314, 0x301 /* offset 1795 */ , + 0x3a9, 0x313, 0x342 /* offset 1798 */ , + 0x3a9, 0x314, 0x342 /* offset 1801 */ , + 0x3b1, 0x300 /* offset 1804 */ , + 0x3b5, 0x300 /* offset 1806 */ , + 0x3b7, 0x300 /* offset 1808 */ , + 0x3b9, 0x300 /* offset 1810 */ , + 0x3bf, 0x300 /* offset 1812 */ , + 0x3c5, 0x300 /* offset 1814 */ , + 0x3c9, 0x300 /* offset 1816 */ , + 0x3b1, 0x313, 0x345 /* offset 1818 */ , + 0x3b1, 0x314, 0x345 /* offset 1821 */ , + 0x3b1, 0x313, 0x300, 0x345 /* offset 1824 */ , + 0x3b1, 0x314, 0x300, 0x345 /* offset 1828 */ , + 0x3b1, 0x313, 0x301, 0x345 /* offset 1832 */ , + 0x3b1, 0x314, 0x301, 0x345 /* offset 1836 */ , + 0x3b1, 0x313, 0x342, 0x345 /* offset 1840 */ , + 0x3b1, 0x314, 0x342, 0x345 /* offset 1844 */ , + 0x391, 0x313, 0x345 /* offset 1848 */ , + 0x391, 0x314, 0x345 /* offset 1851 */ , + 0x391, 0x313, 0x300, 0x345 /* offset 1854 */ , + 0x391, 0x314, 0x300, 0x345 /* offset 1858 */ , + 0x391, 0x313, 0x301, 0x345 /* offset 1862 */ , + 0x391, 0x314, 0x301, 0x345 /* offset 1866 */ , + 0x391, 0x313, 0x342, 0x345 /* offset 1870 */ , + 0x391, 0x314, 0x342, 0x345 /* offset 1874 */ , + 0x3b7, 0x313, 0x345 /* offset 1878 */ , + 0x3b7, 0x314, 0x345 /* offset 1881 */ , + 0x3b7, 0x313, 0x300, 0x345 /* offset 1884 */ , + 0x3b7, 0x314, 0x300, 0x345 /* offset 1888 */ , + 0x3b7, 0x313, 0x301, 0x345 /* offset 1892 */ , + 0x3b7, 0x314, 0x301, 0x345 /* offset 1896 */ , + 0x3b7, 0x313, 0x342, 0x345 /* offset 1900 */ , + 0x3b7, 0x314, 0x342, 0x345 /* offset 1904 */ , + 0x397, 0x313, 0x345 /* offset 1908 */ , + 0x397, 0x314, 0x345 /* offset 1911 */ , + 0x397, 0x313, 0x300, 0x345 /* offset 1914 */ , + 0x397, 0x314, 0x300, 0x345 /* offset 1918 */ , + 0x397, 0x313, 0x301, 0x345 /* offset 1922 */ , + 0x397, 0x314, 0x301, 0x345 /* offset 1926 */ , + 0x397, 0x313, 0x342, 0x345 /* offset 1930 */ , + 0x397, 0x314, 0x342, 0x345 /* offset 1934 */ , + 0x3c9, 0x313, 0x345 /* offset 1938 */ , + 0x3c9, 0x314, 0x345 /* offset 1941 */ , + 0x3c9, 0x313, 0x300, 0x345 /* offset 1944 */ , + 0x3c9, 0x314, 0x300, 0x345 /* offset 1948 */ , + 0x3c9, 0x313, 0x301, 0x345 /* offset 1952 */ , + 0x3c9, 0x314, 0x301, 0x345 /* offset 1956 */ , + 0x3c9, 0x313, 0x342, 0x345 /* offset 1960 */ , + 0x3c9, 0x314, 0x342, 0x345 /* offset 1964 */ , + 0x3a9, 0x313, 0x345 /* offset 1968 */ , + 0x3a9, 0x314, 0x345 /* offset 1971 */ , + 0x3a9, 0x313, 0x300, 0x345 /* offset 1974 */ , + 0x3a9, 0x314, 0x300, 0x345 /* offset 1978 */ , + 0x3a9, 0x313, 0x301, 0x345 /* offset 1982 */ , + 0x3a9, 0x314, 0x301, 0x345 /* offset 1986 */ , + 0x3a9, 0x313, 0x342, 0x345 /* offset 1990 */ , + 0x3a9, 0x314, 0x342, 0x345 /* offset 1994 */ , + 0x3b1, 0x306 /* offset 1998 */ , + 0x3b1, 0x304 /* offset 2000 */ , + 0x3b1, 0x300, 0x345 /* offset 2002 */ , + 0x3b1, 0x345 /* offset 2005 */ , + 0x3b1, 0x301, 0x345 /* offset 2007 */ , + 0x3b1, 0x342 /* offset 2010 */ , + 0x3b1, 0x342, 0x345 /* offset 2012 */ , + 0x391, 0x306 /* offset 2015 */ , + 0x391, 0x304 /* offset 2017 */ , + 0x391, 0x300 /* offset 2019 */ , + 0x391, 0x345 /* offset 2021 */ , + 0x20, 0x313 /* offset 2023 */ , + 0x3b9 /* offset 2025 */ , + 0x20, 0x342 /* offset 2026 */ , + 0x20, 0x308, 0x342 /* offset 2028 */ , + 0x3b7, 0x300, 0x345 /* offset 2031 */ , + 0x3b7, 0x345 /* offset 2034 */ , + 0x3b7, 0x301, 0x345 /* offset 2036 */ , + 0x3b7, 0x342 /* offset 2039 */ , + 0x3b7, 0x342, 0x345 /* offset 2041 */ , + 0x395, 0x300 /* offset 2044 */ , + 0x397, 0x300 /* offset 2046 */ , + 0x397, 0x345 /* offset 2048 */ , + 0x20, 0x313, 0x300 /* offset 2050 */ , + 0x20, 0x313, 0x301 /* offset 2053 */ , + 0x20, 0x313, 0x342 /* offset 2056 */ , + 0x3b9, 0x306 /* offset 2059 */ , + 0x3b9, 0x304 /* offset 2061 */ , + 0x3b9, 0x308, 0x300 /* offset 2063 */ , + 0x3b9, 0x342 /* offset 2066 */ , + 0x3b9, 0x308, 0x342 /* offset 2068 */ , + 0x399, 0x306 /* offset 2071 */ , + 0x399, 0x304 /* offset 2073 */ , + 0x399, 0x300 /* offset 2075 */ , + 0x20, 0x314, 0x300 /* offset 2077 */ , + 0x20, 0x314, 0x301 /* offset 2080 */ , + 0x20, 0x314, 0x342 /* offset 2083 */ , + 0x3c5, 0x306 /* offset 2086 */ , + 0x3c5, 0x304 /* offset 2088 */ , + 0x3c5, 0x308, 0x300 /* offset 2090 */ , + 0x3c1, 0x313 /* offset 2093 */ , + 0x3c1, 0x314 /* offset 2095 */ , + 0x3c5, 0x342 /* offset 2097 */ , + 0x3c5, 0x308, 0x342 /* offset 2099 */ , + 0x3a5, 0x306 /* offset 2102 */ , + 0x3a5, 0x304 /* offset 2104 */ , + 0x3a5, 0x300 /* offset 2106 */ , + 0x3a1, 0x314 /* offset 2108 */ , + 0x20, 0x308, 0x300 /* offset 2110 */ , + 0x60 /* offset 2113 */ , + 0x3c9, 0x300, 0x345 /* offset 2114 */ , + 0x3c9, 0x345 /* offset 2117 */ , + 0x3c9, 0x301, 0x345 /* offset 2119 */ , + 0x3c9, 0x342 /* offset 2122 */ , + 0x3c9, 0x342, 0x345 /* offset 2124 */ , + 0x39f, 0x300 /* offset 2127 */ , + 0x3a9, 0x300 /* offset 2129 */ , + 0x3a9, 0x345 /* offset 2131 */ , + 0x20, 0x314 /* offset 2133 */ , + 0x2010 /* offset 2135 */ , + 0x20, 0x333 /* offset 2136 */ , + 0x2e /* offset 2138 */ , + 0x2e, 0x2e /* offset 2139 */ , + 0x2e, 0x2e, 0x2e /* offset 2141 */ , + 0x2032, 0x2032 /* offset 2144 */ , + 0x2032, 0x2032, 0x2032 /* offset 2146 */ , + 0x2035, 0x2035 /* offset 2149 */ , + 0x2035, 0x2035, 0x2035 /* offset 2151 */ , + 0x21, 0x21 /* offset 2154 */ , + 0x20, 0x305 /* offset 2156 */ , + 0x3f, 0x3f /* offset 2158 */ , + 0x3f, 0x21 /* offset 2160 */ , + 0x21, 0x3f /* offset 2162 */ , + 0x2032, 0x2032, 0x2032, 0x2032 /* offset 2164 */ , + 0x30 /* offset 2168 */ , + 0x69 /* offset 2169 */ , + 0x34 /* offset 2170 */ , + 0x35 /* offset 2171 */ , + 0x36 /* offset 2172 */ , + 0x37 /* offset 2173 */ , + 0x38 /* offset 2174 */ , + 0x39 /* offset 2175 */ , + 0x2b /* offset 2176 */ , + 0x2212 /* offset 2177 */ , + 0x3d /* offset 2178 */ , + 0x28 /* offset 2179 */ , + 0x29 /* offset 2180 */ , + 0x6e /* offset 2181 */ , + 0x52, 0x73 /* offset 2182 */ , + 0x61, 0x2f, 0x63 /* offset 2184 */ , + 0x61, 0x2f, 0x73 /* offset 2187 */ , + 0x43 /* offset 2190 */ , + 0xb0, 0x43 /* offset 2191 */ , + 0x63, 0x2f, 0x6f /* offset 2193 */ , + 0x63, 0x2f, 0x75 /* offset 2196 */ , + 0x190 /* offset 2199 */ , + 0xb0, 0x46 /* offset 2200 */ , + 0x67 /* offset 2202 */ , + 0x48 /* offset 2203 */ , + 0x127 /* offset 2204 */ , + 0x49 /* offset 2205 */ , + 0x4c /* offset 2206 */ , + 0x4e /* offset 2207 */ , + 0x4e, 0x6f /* offset 2208 */ , + 0x50 /* offset 2210 */ , + 0x51 /* offset 2211 */ , + 0x52 /* offset 2212 */ , + 0x53, 0x4d /* offset 2213 */ , + 0x54, 0x45, 0x4c /* offset 2215 */ , + 0x54, 0x4d /* offset 2218 */ , + 0x5a /* offset 2220 */ , + 0x3a9 /* offset 2221 */ , + 0x4b /* offset 2222 */ , + 0x42 /* offset 2223 */ , + 0x65 /* offset 2224 */ , + 0x45 /* offset 2225 */ , + 0x46 /* offset 2226 */ , + 0x4d /* offset 2227 */ , + 0x5d0 /* offset 2228 */ , + 0x5d1 /* offset 2229 */ , + 0x5d2 /* offset 2230 */ , + 0x5d3 /* offset 2231 */ , + 0x3b3 /* offset 2232 */ , + 0x393 /* offset 2233 */ , + 0x3a0 /* offset 2234 */ , + 0x2211 /* offset 2235 */ , + 0x44 /* offset 2236 */ , + 0x64 /* offset 2237 */ , + 0x31, 0x2044, 0x33 /* offset 2238 */ , + 0x32, 0x2044, 0x33 /* offset 2241 */ , + 0x31, 0x2044, 0x35 /* offset 2244 */ , + 0x32, 0x2044, 0x35 /* offset 2247 */ , + 0x33, 0x2044, 0x35 /* offset 2250 */ , + 0x34, 0x2044, 0x35 /* offset 2253 */ , + 0x31, 0x2044, 0x36 /* offset 2256 */ , + 0x35, 0x2044, 0x36 /* offset 2259 */ , + 0x31, 0x2044, 0x38 /* offset 2262 */ , + 0x33, 0x2044, 0x38 /* offset 2265 */ , + 0x35, 0x2044, 0x38 /* offset 2268 */ , + 0x37, 0x2044, 0x38 /* offset 2271 */ , + 0x31, 0x2044 /* offset 2274 */ , + 0x49, 0x49 /* offset 2276 */ , + 0x49, 0x49, 0x49 /* offset 2278 */ , + 0x49, 0x56 /* offset 2281 */ , + 0x56 /* offset 2283 */ , + 0x56, 0x49 /* offset 2284 */ , + 0x56, 0x49, 0x49 /* offset 2286 */ , + 0x56, 0x49, 0x49, 0x49 /* offset 2289 */ , + 0x49, 0x58 /* offset 2293 */ , + 0x58 /* offset 2295 */ , + 0x58, 0x49 /* offset 2296 */ , + 0x58, 0x49, 0x49 /* offset 2298 */ , + 0x69, 0x69 /* offset 2301 */ , + 0x69, 0x69, 0x69 /* offset 2303 */ , + 0x69, 0x76 /* offset 2306 */ , + 0x76 /* offset 2308 */ , + 0x76, 0x69 /* offset 2309 */ , + 0x76, 0x69, 0x69 /* offset 2311 */ , + 0x76, 0x69, 0x69, 0x69 /* offset 2314 */ , + 0x69, 0x78 /* offset 2318 */ , + 0x78, 0x69 /* offset 2320 */ , + 0x78, 0x69, 0x69 /* offset 2322 */ , + 0x63 /* offset 2325 */ , + 0x6d /* offset 2326 */ , + 0x2190, 0x338 /* offset 2327 */ , + 0x2192, 0x338 /* offset 2329 */ , + 0x2194, 0x338 /* offset 2331 */ , + 0x21d0, 0x338 /* offset 2333 */ , + 0x21d4, 0x338 /* offset 2335 */ , + 0x21d2, 0x338 /* offset 2337 */ , + 0x2203, 0x338 /* offset 2339 */ , + 0x2208, 0x338 /* offset 2341 */ , + 0x220b, 0x338 /* offset 2343 */ , + 0x2223, 0x338 /* offset 2345 */ , + 0x2225, 0x338 /* offset 2347 */ , + 0x222b, 0x222b /* offset 2349 */ , + 0x222b, 0x222b, 0x222b /* offset 2351 */ , + 0x222e, 0x222e /* offset 2354 */ , + 0x222e, 0x222e, 0x222e /* offset 2356 */ , + 0x223c, 0x338 /* offset 2359 */ , + 0x2243, 0x338 /* offset 2361 */ , + 0x2245, 0x338 /* offset 2363 */ , + 0x2248, 0x338 /* offset 2365 */ , + 0x3d, 0x338 /* offset 2367 */ , + 0x2261, 0x338 /* offset 2369 */ , + 0x224d, 0x338 /* offset 2371 */ , + 0x3c, 0x338 /* offset 2373 */ , + 0x3e, 0x338 /* offset 2375 */ , + 0x2264, 0x338 /* offset 2377 */ , + 0x2265, 0x338 /* offset 2379 */ , + 0x2272, 0x338 /* offset 2381 */ , + 0x2273, 0x338 /* offset 2383 */ , + 0x2276, 0x338 /* offset 2385 */ , + 0x2277, 0x338 /* offset 2387 */ , + 0x227a, 0x338 /* offset 2389 */ , + 0x227b, 0x338 /* offset 2391 */ , + 0x2282, 0x338 /* offset 2393 */ , + 0x2283, 0x338 /* offset 2395 */ , + 0x2286, 0x338 /* offset 2397 */ , + 0x2287, 0x338 /* offset 2399 */ , + 0x22a2, 0x338 /* offset 2401 */ , + 0x22a8, 0x338 /* offset 2403 */ , + 0x22a9, 0x338 /* offset 2405 */ , + 0x22ab, 0x338 /* offset 2407 */ , + 0x227c, 0x338 /* offset 2409 */ , + 0x227d, 0x338 /* offset 2411 */ , + 0x2291, 0x338 /* offset 2413 */ , + 0x2292, 0x338 /* offset 2415 */ , + 0x22b2, 0x338 /* offset 2417 */ , + 0x22b3, 0x338 /* offset 2419 */ , + 0x22b4, 0x338 /* offset 2421 */ , + 0x22b5, 0x338 /* offset 2423 */ , + 0x3008 /* offset 2425 */ , + 0x3009 /* offset 2426 */ , + 0x31, 0x30 /* offset 2427 */ , + 0x31, 0x31 /* offset 2429 */ , + 0x31, 0x32 /* offset 2431 */ , + 0x31, 0x33 /* offset 2433 */ , + 0x31, 0x34 /* offset 2435 */ , + 0x31, 0x35 /* offset 2437 */ , + 0x31, 0x36 /* offset 2439 */ , + 0x31, 0x37 /* offset 2441 */ , + 0x31, 0x38 /* offset 2443 */ , + 0x31, 0x39 /* offset 2445 */ , + 0x32, 0x30 /* offset 2447 */ , + 0x28, 0x31, 0x29 /* offset 2449 */ , + 0x28, 0x32, 0x29 /* offset 2452 */ , + 0x28, 0x33, 0x29 /* offset 2455 */ , + 0x28, 0x34, 0x29 /* offset 2458 */ , + 0x28, 0x35, 0x29 /* offset 2461 */ , + 0x28, 0x36, 0x29 /* offset 2464 */ , + 0x28, 0x37, 0x29 /* offset 2467 */ , + 0x28, 0x38, 0x29 /* offset 2470 */ , + 0x28, 0x39, 0x29 /* offset 2473 */ , + 0x28, 0x31, 0x30, 0x29 /* offset 2476 */ , + 0x28, 0x31, 0x31, 0x29 /* offset 2480 */ , + 0x28, 0x31, 0x32, 0x29 /* offset 2484 */ , + 0x28, 0x31, 0x33, 0x29 /* offset 2488 */ , + 0x28, 0x31, 0x34, 0x29 /* offset 2492 */ , + 0x28, 0x31, 0x35, 0x29 /* offset 2496 */ , + 0x28, 0x31, 0x36, 0x29 /* offset 2500 */ , + 0x28, 0x31, 0x37, 0x29 /* offset 2504 */ , + 0x28, 0x31, 0x38, 0x29 /* offset 2508 */ , + 0x28, 0x31, 0x39, 0x29 /* offset 2512 */ , + 0x28, 0x32, 0x30, 0x29 /* offset 2516 */ , + 0x31, 0x2e /* offset 2520 */ , + 0x32, 0x2e /* offset 2522 */ , + 0x33, 0x2e /* offset 2524 */ , + 0x34, 0x2e /* offset 2526 */ , + 0x35, 0x2e /* offset 2528 */ , + 0x36, 0x2e /* offset 2530 */ , + 0x37, 0x2e /* offset 2532 */ , + 0x38, 0x2e /* offset 2534 */ , + 0x39, 0x2e /* offset 2536 */ , + 0x31, 0x30, 0x2e /* offset 2538 */ , + 0x31, 0x31, 0x2e /* offset 2541 */ , + 0x31, 0x32, 0x2e /* offset 2544 */ , + 0x31, 0x33, 0x2e /* offset 2547 */ , + 0x31, 0x34, 0x2e /* offset 2550 */ , + 0x31, 0x35, 0x2e /* offset 2553 */ , + 0x31, 0x36, 0x2e /* offset 2556 */ , + 0x31, 0x37, 0x2e /* offset 2559 */ , + 0x31, 0x38, 0x2e /* offset 2562 */ , + 0x31, 0x39, 0x2e /* offset 2565 */ , + 0x32, 0x30, 0x2e /* offset 2568 */ , + 0x28, 0x61, 0x29 /* offset 2571 */ , + 0x28, 0x62, 0x29 /* offset 2574 */ , + 0x28, 0x63, 0x29 /* offset 2577 */ , + 0x28, 0x64, 0x29 /* offset 2580 */ , + 0x28, 0x65, 0x29 /* offset 2583 */ , + 0x28, 0x66, 0x29 /* offset 2586 */ , + 0x28, 0x67, 0x29 /* offset 2589 */ , + 0x28, 0x68, 0x29 /* offset 2592 */ , + 0x28, 0x69, 0x29 /* offset 2595 */ , + 0x28, 0x6a, 0x29 /* offset 2598 */ , + 0x28, 0x6b, 0x29 /* offset 2601 */ , + 0x28, 0x6c, 0x29 /* offset 2604 */ , + 0x28, 0x6d, 0x29 /* offset 2607 */ , + 0x28, 0x6e, 0x29 /* offset 2610 */ , + 0x28, 0x6f, 0x29 /* offset 2613 */ , + 0x28, 0x70, 0x29 /* offset 2616 */ , + 0x28, 0x71, 0x29 /* offset 2619 */ , + 0x28, 0x72, 0x29 /* offset 2622 */ , + 0x28, 0x73, 0x29 /* offset 2625 */ , + 0x28, 0x74, 0x29 /* offset 2628 */ , + 0x28, 0x75, 0x29 /* offset 2631 */ , + 0x28, 0x76, 0x29 /* offset 2634 */ , + 0x28, 0x77, 0x29 /* offset 2637 */ , + 0x28, 0x78, 0x29 /* offset 2640 */ , + 0x28, 0x79, 0x29 /* offset 2643 */ , + 0x28, 0x7a, 0x29 /* offset 2646 */ , + 0x41 /* offset 2649 */ , + 0x47 /* offset 2650 */ , + 0x4a /* offset 2651 */ , + 0x4f /* offset 2652 */ , + 0x53 /* offset 2653 */ , + 0x54 /* offset 2654 */ , + 0x55 /* offset 2655 */ , + 0x57 /* offset 2656 */ , + 0x59 /* offset 2657 */ , + 0x62 /* offset 2658 */ , + 0x66 /* offset 2659 */ , + 0x6b /* offset 2660 */ , + 0x70 /* offset 2661 */ , + 0x71 /* offset 2662 */ , + 0x74 /* offset 2663 */ , + 0x75 /* offset 2664 */ , + 0x7a /* offset 2665 */ , + 0x222b, 0x222b, 0x222b, 0x222b /* offset 2666 */ , + 0x3a, 0x3a, 0x3d /* offset 2670 */ , + 0x3d, 0x3d /* offset 2673 */ , + 0x3d, 0x3d, 0x3d /* offset 2675 */ , + 0x2add, 0x338 /* offset 2678 */ , + 0x6bcd /* offset 2680 */ , + 0x9f9f /* offset 2681 */ , + 0x4e00 /* offset 2682 */ , + 0x4e28 /* offset 2683 */ , + 0x4e36 /* offset 2684 */ , + 0x4e3f /* offset 2685 */ , + 0x4e59 /* offset 2686 */ , + 0x4e85 /* offset 2687 */ , + 0x4e8c /* offset 2688 */ , + 0x4ea0 /* offset 2689 */ , + 0x4eba /* offset 2690 */ , + 0x513f /* offset 2691 */ , + 0x5165 /* offset 2692 */ , + 0x516b /* offset 2693 */ , + 0x5182 /* offset 2694 */ , + 0x5196 /* offset 2695 */ , + 0x51ab /* offset 2696 */ , + 0x51e0 /* offset 2697 */ , + 0x51f5 /* offset 2698 */ , + 0x5200 /* offset 2699 */ , + 0x529b /* offset 2700 */ , + 0x52f9 /* offset 2701 */ , + 0x5315 /* offset 2702 */ , + 0x531a /* offset 2703 */ , + 0x5338 /* offset 2704 */ , + 0x5341 /* offset 2705 */ , + 0x535c /* offset 2706 */ , + 0x5369 /* offset 2707 */ , + 0x5382 /* offset 2708 */ , + 0x53b6 /* offset 2709 */ , + 0x53c8 /* offset 2710 */ , + 0x53e3 /* offset 2711 */ , + 0x56d7 /* offset 2712 */ , + 0x571f /* offset 2713 */ , + 0x58eb /* offset 2714 */ , + 0x5902 /* offset 2715 */ , + 0x590a /* offset 2716 */ , + 0x5915 /* offset 2717 */ , + 0x5927 /* offset 2718 */ , + 0x5973 /* offset 2719 */ , + 0x5b50 /* offset 2720 */ , + 0x5b80 /* offset 2721 */ , + 0x5bf8 /* offset 2722 */ , + 0x5c0f /* offset 2723 */ , + 0x5c22 /* offset 2724 */ , + 0x5c38 /* offset 2725 */ , + 0x5c6e /* offset 2726 */ , + 0x5c71 /* offset 2727 */ , + 0x5ddb /* offset 2728 */ , + 0x5de5 /* offset 2729 */ , + 0x5df1 /* offset 2730 */ , + 0x5dfe /* offset 2731 */ , + 0x5e72 /* offset 2732 */ , + 0x5e7a /* offset 2733 */ , + 0x5e7f /* offset 2734 */ , + 0x5ef4 /* offset 2735 */ , + 0x5efe /* offset 2736 */ , + 0x5f0b /* offset 2737 */ , + 0x5f13 /* offset 2738 */ , + 0x5f50 /* offset 2739 */ , + 0x5f61 /* offset 2740 */ , + 0x5f73 /* offset 2741 */ , + 0x5fc3 /* offset 2742 */ , + 0x6208 /* offset 2743 */ , + 0x6236 /* offset 2744 */ , + 0x624b /* offset 2745 */ , + 0x652f /* offset 2746 */ , + 0x6534 /* offset 2747 */ , + 0x6587 /* offset 2748 */ , + 0x6597 /* offset 2749 */ , + 0x65a4 /* offset 2750 */ , + 0x65b9 /* offset 2751 */ , + 0x65e0 /* offset 2752 */ , + 0x65e5 /* offset 2753 */ , + 0x66f0 /* offset 2754 */ , + 0x6708 /* offset 2755 */ , + 0x6728 /* offset 2756 */ , + 0x6b20 /* offset 2757 */ , + 0x6b62 /* offset 2758 */ , + 0x6b79 /* offset 2759 */ , + 0x6bb3 /* offset 2760 */ , + 0x6bcb /* offset 2761 */ , + 0x6bd4 /* offset 2762 */ , + 0x6bdb /* offset 2763 */ , + 0x6c0f /* offset 2764 */ , + 0x6c14 /* offset 2765 */ , + 0x6c34 /* offset 2766 */ , + 0x706b /* offset 2767 */ , + 0x722a /* offset 2768 */ , + 0x7236 /* offset 2769 */ , + 0x723b /* offset 2770 */ , + 0x723f /* offset 2771 */ , + 0x7247 /* offset 2772 */ , + 0x7259 /* offset 2773 */ , + 0x725b /* offset 2774 */ , + 0x72ac /* offset 2775 */ , + 0x7384 /* offset 2776 */ , + 0x7389 /* offset 2777 */ , + 0x74dc /* offset 2778 */ , + 0x74e6 /* offset 2779 */ , + 0x7518 /* offset 2780 */ , + 0x751f /* offset 2781 */ , + 0x7528 /* offset 2782 */ , + 0x7530 /* offset 2783 */ , + 0x758b /* offset 2784 */ , + 0x7592 /* offset 2785 */ , + 0x7676 /* offset 2786 */ , + 0x767d /* offset 2787 */ , + 0x76ae /* offset 2788 */ , + 0x76bf /* offset 2789 */ , + 0x76ee /* offset 2790 */ , + 0x77db /* offset 2791 */ , + 0x77e2 /* offset 2792 */ , + 0x77f3 /* offset 2793 */ , + 0x793a /* offset 2794 */ , + 0x79b8 /* offset 2795 */ , + 0x79be /* offset 2796 */ , + 0x7a74 /* offset 2797 */ , + 0x7acb /* offset 2798 */ , + 0x7af9 /* offset 2799 */ , + 0x7c73 /* offset 2800 */ , + 0x7cf8 /* offset 2801 */ , + 0x7f36 /* offset 2802 */ , + 0x7f51 /* offset 2803 */ , + 0x7f8a /* offset 2804 */ , + 0x7fbd /* offset 2805 */ , + 0x8001 /* offset 2806 */ , + 0x800c /* offset 2807 */ , + 0x8012 /* offset 2808 */ , + 0x8033 /* offset 2809 */ , + 0x807f /* offset 2810 */ , + 0x8089 /* offset 2811 */ , + 0x81e3 /* offset 2812 */ , + 0x81ea /* offset 2813 */ , + 0x81f3 /* offset 2814 */ , + 0x81fc /* offset 2815 */ , + 0x820c /* offset 2816 */ , + 0x821b /* offset 2817 */ , + 0x821f /* offset 2818 */ , + 0x826e /* offset 2819 */ , + 0x8272 /* offset 2820 */ , + 0x8278 /* offset 2821 */ , + 0x864d /* offset 2822 */ , + 0x866b /* offset 2823 */ , + 0x8840 /* offset 2824 */ , + 0x884c /* offset 2825 */ , + 0x8863 /* offset 2826 */ , + 0x897e /* offset 2827 */ , + 0x898b /* offset 2828 */ , + 0x89d2 /* offset 2829 */ , + 0x8a00 /* offset 2830 */ , + 0x8c37 /* offset 2831 */ , + 0x8c46 /* offset 2832 */ , + 0x8c55 /* offset 2833 */ , + 0x8c78 /* offset 2834 */ , + 0x8c9d /* offset 2835 */ , + 0x8d64 /* offset 2836 */ , + 0x8d70 /* offset 2837 */ , + 0x8db3 /* offset 2838 */ , + 0x8eab /* offset 2839 */ , + 0x8eca /* offset 2840 */ , + 0x8f9b /* offset 2841 */ , + 0x8fb0 /* offset 2842 */ , + 0x8fb5 /* offset 2843 */ , + 0x9091 /* offset 2844 */ , + 0x9149 /* offset 2845 */ , + 0x91c6 /* offset 2846 */ , + 0x91cc /* offset 2847 */ , + 0x91d1 /* offset 2848 */ , + 0x9577 /* offset 2849 */ , + 0x9580 /* offset 2850 */ , + 0x961c /* offset 2851 */ , + 0x96b6 /* offset 2852 */ , + 0x96b9 /* offset 2853 */ , + 0x96e8 /* offset 2854 */ , + 0x9751 /* offset 2855 */ , + 0x975e /* offset 2856 */ , + 0x9762 /* offset 2857 */ , + 0x9769 /* offset 2858 */ , + 0x97cb /* offset 2859 */ , + 0x97ed /* offset 2860 */ , + 0x97f3 /* offset 2861 */ , + 0x9801 /* offset 2862 */ , + 0x98a8 /* offset 2863 */ , + 0x98db /* offset 2864 */ , + 0x98df /* offset 2865 */ , + 0x9996 /* offset 2866 */ , + 0x9999 /* offset 2867 */ , + 0x99ac /* offset 2868 */ , + 0x9aa8 /* offset 2869 */ , + 0x9ad8 /* offset 2870 */ , + 0x9adf /* offset 2871 */ , + 0x9b25 /* offset 2872 */ , + 0x9b2f /* offset 2873 */ , + 0x9b32 /* offset 2874 */ , + 0x9b3c /* offset 2875 */ , + 0x9b5a /* offset 2876 */ , + 0x9ce5 /* offset 2877 */ , + 0x9e75 /* offset 2878 */ , + 0x9e7f /* offset 2879 */ , + 0x9ea5 /* offset 2880 */ , + 0x9ebb /* offset 2881 */ , + 0x9ec3 /* offset 2882 */ , + 0x9ecd /* offset 2883 */ , + 0x9ed1 /* offset 2884 */ , + 0x9ef9 /* offset 2885 */ , + 0x9efd /* offset 2886 */ , + 0x9f0e /* offset 2887 */ , + 0x9f13 /* offset 2888 */ , + 0x9f20 /* offset 2889 */ , + 0x9f3b /* offset 2890 */ , + 0x9f4a /* offset 2891 */ , + 0x9f52 /* offset 2892 */ , + 0x9f8d /* offset 2893 */ , + 0x9f9c /* offset 2894 */ , + 0x9fa0 /* offset 2895 */ , + 0x3012 /* offset 2896 */ , + 0x5344 /* offset 2897 */ , + 0x5345 /* offset 2898 */ , + 0x304b, 0x3099 /* offset 2899 */ , + 0x304d, 0x3099 /* offset 2901 */ , + 0x304f, 0x3099 /* offset 2903 */ , + 0x3051, 0x3099 /* offset 2905 */ , + 0x3053, 0x3099 /* offset 2907 */ , + 0x3055, 0x3099 /* offset 2909 */ , + 0x3057, 0x3099 /* offset 2911 */ , + 0x3059, 0x3099 /* offset 2913 */ , + 0x305b, 0x3099 /* offset 2915 */ , + 0x305d, 0x3099 /* offset 2917 */ , + 0x305f, 0x3099 /* offset 2919 */ , + 0x3061, 0x3099 /* offset 2921 */ , + 0x3064, 0x3099 /* offset 2923 */ , + 0x3066, 0x3099 /* offset 2925 */ , + 0x3068, 0x3099 /* offset 2927 */ , + 0x306f, 0x3099 /* offset 2929 */ , + 0x306f, 0x309a /* offset 2931 */ , + 0x3072, 0x3099 /* offset 2933 */ , + 0x3072, 0x309a /* offset 2935 */ , + 0x3075, 0x3099 /* offset 2937 */ , + 0x3075, 0x309a /* offset 2939 */ , + 0x3078, 0x3099 /* offset 2941 */ , + 0x3078, 0x309a /* offset 2943 */ , + 0x307b, 0x3099 /* offset 2945 */ , + 0x307b, 0x309a /* offset 2947 */ , + 0x3046, 0x3099 /* offset 2949 */ , + 0x20, 0x3099 /* offset 2951 */ , + 0x20, 0x309a /* offset 2953 */ , + 0x309d, 0x3099 /* offset 2955 */ , + 0x3088, 0x308a /* offset 2957 */ , + 0x30ab, 0x3099 /* offset 2959 */ , + 0x30ad, 0x3099 /* offset 2961 */ , + 0x30af, 0x3099 /* offset 2963 */ , + 0x30b1, 0x3099 /* offset 2965 */ , + 0x30b3, 0x3099 /* offset 2967 */ , + 0x30b5, 0x3099 /* offset 2969 */ , + 0x30b7, 0x3099 /* offset 2971 */ , + 0x30b9, 0x3099 /* offset 2973 */ , + 0x30bb, 0x3099 /* offset 2975 */ , + 0x30bd, 0x3099 /* offset 2977 */ , + 0x30bf, 0x3099 /* offset 2979 */ , + 0x30c1, 0x3099 /* offset 2981 */ , + 0x30c4, 0x3099 /* offset 2983 */ , + 0x30c6, 0x3099 /* offset 2985 */ , + 0x30c8, 0x3099 /* offset 2987 */ , + 0x30cf, 0x3099 /* offset 2989 */ , + 0x30cf, 0x309a /* offset 2991 */ , + 0x30d2, 0x3099 /* offset 2993 */ , + 0x30d2, 0x309a /* offset 2995 */ , + 0x30d5, 0x3099 /* offset 2997 */ , + 0x30d5, 0x309a /* offset 2999 */ , + 0x30d8, 0x3099 /* offset 3001 */ , + 0x30d8, 0x309a /* offset 3003 */ , + 0x30db, 0x3099 /* offset 3005 */ , + 0x30db, 0x309a /* offset 3007 */ , + 0x30a6, 0x3099 /* offset 3009 */ , + 0x30ef, 0x3099 /* offset 3011 */ , + 0x30f0, 0x3099 /* offset 3013 */ , + 0x30f1, 0x3099 /* offset 3015 */ , + 0x30f2, 0x3099 /* offset 3017 */ , + 0x30fd, 0x3099 /* offset 3019 */ , + 0x30b3, 0x30c8 /* offset 3021 */ , + 0x1100 /* offset 3023 */ , + 0x1101 /* offset 3024 */ , + 0x11aa /* offset 3025 */ , + 0x1102 /* offset 3026 */ , + 0x11ac /* offset 3027 */ , + 0x11ad /* offset 3028 */ , + 0x1103 /* offset 3029 */ , + 0x1104 /* offset 3030 */ , + 0x1105 /* offset 3031 */ , + 0x11b0 /* offset 3032 */ , + 0x11b1 /* offset 3033 */ , + 0x11b2 /* offset 3034 */ , + 0x11b3 /* offset 3035 */ , + 0x11b4 /* offset 3036 */ , + 0x11b5 /* offset 3037 */ , + 0x111a /* offset 3038 */ , + 0x1106 /* offset 3039 */ , + 0x1107 /* offset 3040 */ , + 0x1108 /* offset 3041 */ , + 0x1121 /* offset 3042 */ , + 0x1109 /* offset 3043 */ , + 0x110a /* offset 3044 */ , + 0x110b /* offset 3045 */ , + 0x110c /* offset 3046 */ , + 0x110d /* offset 3047 */ , + 0x110e /* offset 3048 */ , + 0x110f /* offset 3049 */ , + 0x1110 /* offset 3050 */ , + 0x1111 /* offset 3051 */ , + 0x1112 /* offset 3052 */ , + 0x1161 /* offset 3053 */ , + 0x1162 /* offset 3054 */ , + 0x1163 /* offset 3055 */ , + 0x1164 /* offset 3056 */ , + 0x1165 /* offset 3057 */ , + 0x1166 /* offset 3058 */ , + 0x1167 /* offset 3059 */ , + 0x1168 /* offset 3060 */ , + 0x1169 /* offset 3061 */ , + 0x116a /* offset 3062 */ , + 0x116b /* offset 3063 */ , + 0x116c /* offset 3064 */ , + 0x116d /* offset 3065 */ , + 0x116e /* offset 3066 */ , + 0x116f /* offset 3067 */ , + 0x1170 /* offset 3068 */ , + 0x1171 /* offset 3069 */ , + 0x1172 /* offset 3070 */ , + 0x1173 /* offset 3071 */ , + 0x1174 /* offset 3072 */ , + 0x1175 /* offset 3073 */ , + 0x1160 /* offset 3074 */ , + 0x1114 /* offset 3075 */ , + 0x1115 /* offset 3076 */ , + 0x11c7 /* offset 3077 */ , + 0x11c8 /* offset 3078 */ , + 0x11cc /* offset 3079 */ , + 0x11ce /* offset 3080 */ , + 0x11d3 /* offset 3081 */ , + 0x11d7 /* offset 3082 */ , + 0x11d9 /* offset 3083 */ , + 0x111c /* offset 3084 */ , + 0x11dd /* offset 3085 */ , + 0x11df /* offset 3086 */ , + 0x111d /* offset 3087 */ , + 0x111e /* offset 3088 */ , + 0x1120 /* offset 3089 */ , + 0x1122 /* offset 3090 */ , + 0x1123 /* offset 3091 */ , + 0x1127 /* offset 3092 */ , + 0x1129 /* offset 3093 */ , + 0x112b /* offset 3094 */ , + 0x112c /* offset 3095 */ , + 0x112d /* offset 3096 */ , + 0x112e /* offset 3097 */ , + 0x112f /* offset 3098 */ , + 0x1132 /* offset 3099 */ , + 0x1136 /* offset 3100 */ , + 0x1140 /* offset 3101 */ , + 0x1147 /* offset 3102 */ , + 0x114c /* offset 3103 */ , + 0x11f1 /* offset 3104 */ , + 0x11f2 /* offset 3105 */ , + 0x1157 /* offset 3106 */ , + 0x1158 /* offset 3107 */ , + 0x1159 /* offset 3108 */ , + 0x1184 /* offset 3109 */ , + 0x1185 /* offset 3110 */ , + 0x1188 /* offset 3111 */ , + 0x1191 /* offset 3112 */ , + 0x1192 /* offset 3113 */ , + 0x1194 /* offset 3114 */ , + 0x119e /* offset 3115 */ , + 0x11a1 /* offset 3116 */ , + 0x4e09 /* offset 3117 */ , + 0x56db /* offset 3118 */ , + 0x4e0a /* offset 3119 */ , + 0x4e2d /* offset 3120 */ , + 0x4e0b /* offset 3121 */ , + 0x7532 /* offset 3122 */ , + 0x4e19 /* offset 3123 */ , + 0x4e01 /* offset 3124 */ , + 0x5929 /* offset 3125 */ , + 0x5730 /* offset 3126 */ , + 0x28, 0x1100, 0x29 /* offset 3127 */ , + 0x28, 0x1102, 0x29 /* offset 3130 */ , + 0x28, 0x1103, 0x29 /* offset 3133 */ , + 0x28, 0x1105, 0x29 /* offset 3136 */ , + 0x28, 0x1106, 0x29 /* offset 3139 */ , + 0x28, 0x1107, 0x29 /* offset 3142 */ , + 0x28, 0x1109, 0x29 /* offset 3145 */ , + 0x28, 0x110b, 0x29 /* offset 3148 */ , + 0x28, 0x110c, 0x29 /* offset 3151 */ , + 0x28, 0x110e, 0x29 /* offset 3154 */ , + 0x28, 0x110f, 0x29 /* offset 3157 */ , + 0x28, 0x1110, 0x29 /* offset 3160 */ , + 0x28, 0x1111, 0x29 /* offset 3163 */ , + 0x28, 0x1112, 0x29 /* offset 3166 */ , + 0x28, 0x1100, 0x1161, 0x29 /* offset 3169 */ , + 0x28, 0x1102, 0x1161, 0x29 /* offset 3173 */ , + 0x28, 0x1103, 0x1161, 0x29 /* offset 3177 */ , + 0x28, 0x1105, 0x1161, 0x29 /* offset 3181 */ , + 0x28, 0x1106, 0x1161, 0x29 /* offset 3185 */ , + 0x28, 0x1107, 0x1161, 0x29 /* offset 3189 */ , + 0x28, 0x1109, 0x1161, 0x29 /* offset 3193 */ , + 0x28, 0x110b, 0x1161, 0x29 /* offset 3197 */ , + 0x28, 0x110c, 0x1161, 0x29 /* offset 3201 */ , + 0x28, 0x110e, 0x1161, 0x29 /* offset 3205 */ , + 0x28, 0x110f, 0x1161, 0x29 /* offset 3209 */ , + 0x28, 0x1110, 0x1161, 0x29 /* offset 3213 */ , + 0x28, 0x1111, 0x1161, 0x29 /* offset 3217 */ , + 0x28, 0x1112, 0x1161, 0x29 /* offset 3221 */ , + 0x28, 0x110c, 0x116e, 0x29 /* offset 3225 */ , + 0x28, 0x4e00, 0x29 /* offset 3229 */ , + 0x28, 0x4e8c, 0x29 /* offset 3232 */ , + 0x28, 0x4e09, 0x29 /* offset 3235 */ , + 0x28, 0x56db, 0x29 /* offset 3238 */ , + 0x28, 0x4e94, 0x29 /* offset 3241 */ , + 0x28, 0x516d, 0x29 /* offset 3244 */ , + 0x28, 0x4e03, 0x29 /* offset 3247 */ , + 0x28, 0x516b, 0x29 /* offset 3250 */ , + 0x28, 0x4e5d, 0x29 /* offset 3253 */ , + 0x28, 0x5341, 0x29 /* offset 3256 */ , + 0x28, 0x6708, 0x29 /* offset 3259 */ , + 0x28, 0x706b, 0x29 /* offset 3262 */ , + 0x28, 0x6c34, 0x29 /* offset 3265 */ , + 0x28, 0x6728, 0x29 /* offset 3268 */ , + 0x28, 0x91d1, 0x29 /* offset 3271 */ , + 0x28, 0x571f, 0x29 /* offset 3274 */ , + 0x28, 0x65e5, 0x29 /* offset 3277 */ , + 0x28, 0x682a, 0x29 /* offset 3280 */ , + 0x28, 0x6709, 0x29 /* offset 3283 */ , + 0x28, 0x793e, 0x29 /* offset 3286 */ , + 0x28, 0x540d, 0x29 /* offset 3289 */ , + 0x28, 0x7279, 0x29 /* offset 3292 */ , + 0x28, 0x8ca1, 0x29 /* offset 3295 */ , + 0x28, 0x795d, 0x29 /* offset 3298 */ , + 0x28, 0x52b4, 0x29 /* offset 3301 */ , + 0x28, 0x4ee3, 0x29 /* offset 3304 */ , + 0x28, 0x547c, 0x29 /* offset 3307 */ , + 0x28, 0x5b66, 0x29 /* offset 3310 */ , + 0x28, 0x76e3, 0x29 /* offset 3313 */ , + 0x28, 0x4f01, 0x29 /* offset 3316 */ , + 0x28, 0x8cc7, 0x29 /* offset 3319 */ , + 0x28, 0x5354, 0x29 /* offset 3322 */ , + 0x28, 0x796d, 0x29 /* offset 3325 */ , + 0x28, 0x4f11, 0x29 /* offset 3328 */ , + 0x28, 0x81ea, 0x29 /* offset 3331 */ , + 0x28, 0x81f3, 0x29 /* offset 3334 */ , + 0x32, 0x31 /* offset 3337 */ , + 0x32, 0x32 /* offset 3339 */ , + 0x32, 0x33 /* offset 3341 */ , + 0x32, 0x34 /* offset 3343 */ , + 0x32, 0x35 /* offset 3345 */ , + 0x32, 0x36 /* offset 3347 */ , + 0x32, 0x37 /* offset 3349 */ , + 0x32, 0x38 /* offset 3351 */ , + 0x32, 0x39 /* offset 3353 */ , + 0x33, 0x30 /* offset 3355 */ , + 0x33, 0x31 /* offset 3357 */ , + 0x33, 0x32 /* offset 3359 */ , + 0x33, 0x33 /* offset 3361 */ , + 0x33, 0x34 /* offset 3363 */ , + 0x33, 0x35 /* offset 3365 */ , + 0x1100, 0x1161 /* offset 3367 */ , + 0x1102, 0x1161 /* offset 3369 */ , + 0x1103, 0x1161 /* offset 3371 */ , + 0x1105, 0x1161 /* offset 3373 */ , + 0x1106, 0x1161 /* offset 3375 */ , + 0x1107, 0x1161 /* offset 3377 */ , + 0x1109, 0x1161 /* offset 3379 */ , + 0x110b, 0x1161 /* offset 3381 */ , + 0x110c, 0x1161 /* offset 3383 */ , + 0x110e, 0x1161 /* offset 3385 */ , + 0x110f, 0x1161 /* offset 3387 */ , + 0x1110, 0x1161 /* offset 3389 */ , + 0x1111, 0x1161 /* offset 3391 */ , + 0x1112, 0x1161 /* offset 3393 */ , + 0x4e94 /* offset 3395 */ , + 0x516d /* offset 3396 */ , + 0x4e03 /* offset 3397 */ , + 0x4e5d /* offset 3398 */ , + 0x682a /* offset 3399 */ , + 0x6709 /* offset 3400 */ , + 0x793e /* offset 3401 */ , + 0x540d /* offset 3402 */ , + 0x7279 /* offset 3403 */ , + 0x8ca1 /* offset 3404 */ , + 0x795d /* offset 3405 */ , + 0x52b4 /* offset 3406 */ , + 0x79d8 /* offset 3407 */ , + 0x7537 /* offset 3408 */ , + 0x9069 /* offset 3409 */ , + 0x512a /* offset 3410 */ , + 0x5370 /* offset 3411 */ , + 0x6ce8 /* offset 3412 */ , + 0x9805 /* offset 3413 */ , + 0x4f11 /* offset 3414 */ , + 0x5199 /* offset 3415 */ , + 0x6b63 /* offset 3416 */ , + 0x5de6 /* offset 3417 */ , + 0x53f3 /* offset 3418 */ , + 0x533b /* offset 3419 */ , + 0x5b97 /* offset 3420 */ , + 0x5b66 /* offset 3421 */ , + 0x76e3 /* offset 3422 */ , + 0x4f01 /* offset 3423 */ , + 0x8cc7 /* offset 3424 */ , + 0x5354 /* offset 3425 */ , + 0x591c /* offset 3426 */ , + 0x33, 0x36 /* offset 3427 */ , + 0x33, 0x37 /* offset 3429 */ , + 0x33, 0x38 /* offset 3431 */ , + 0x33, 0x39 /* offset 3433 */ , + 0x34, 0x30 /* offset 3435 */ , + 0x34, 0x31 /* offset 3437 */ , + 0x34, 0x32 /* offset 3439 */ , + 0x34, 0x33 /* offset 3441 */ , + 0x34, 0x34 /* offset 3443 */ , + 0x34, 0x35 /* offset 3445 */ , + 0x34, 0x36 /* offset 3447 */ , + 0x34, 0x37 /* offset 3449 */ , + 0x34, 0x38 /* offset 3451 */ , + 0x34, 0x39 /* offset 3453 */ , + 0x35, 0x30 /* offset 3455 */ , + 0x31, 0x6708 /* offset 3457 */ , + 0x32, 0x6708 /* offset 3459 */ , + 0x33, 0x6708 /* offset 3461 */ , + 0x34, 0x6708 /* offset 3463 */ , + 0x35, 0x6708 /* offset 3465 */ , + 0x36, 0x6708 /* offset 3467 */ , + 0x37, 0x6708 /* offset 3469 */ , + 0x38, 0x6708 /* offset 3471 */ , + 0x39, 0x6708 /* offset 3473 */ , + 0x31, 0x30, 0x6708 /* offset 3475 */ , + 0x31, 0x31, 0x6708 /* offset 3478 */ , + 0x31, 0x32, 0x6708 /* offset 3481 */ , + 0x30a2 /* offset 3484 */ , + 0x30a4 /* offset 3485 */ , + 0x30a6 /* offset 3486 */ , + 0x30a8 /* offset 3487 */ , + 0x30aa /* offset 3488 */ , + 0x30ab /* offset 3489 */ , + 0x30ad /* offset 3490 */ , + 0x30af /* offset 3491 */ , + 0x30b1 /* offset 3492 */ , + 0x30b3 /* offset 3493 */ , + 0x30b5 /* offset 3494 */ , + 0x30b7 /* offset 3495 */ , + 0x30b9 /* offset 3496 */ , + 0x30bb /* offset 3497 */ , + 0x30bd /* offset 3498 */ , + 0x30bf /* offset 3499 */ , + 0x30c1 /* offset 3500 */ , + 0x30c4 /* offset 3501 */ , + 0x30c6 /* offset 3502 */ , + 0x30c8 /* offset 3503 */ , + 0x30ca /* offset 3504 */ , + 0x30cb /* offset 3505 */ , + 0x30cc /* offset 3506 */ , + 0x30cd /* offset 3507 */ , + 0x30ce /* offset 3508 */ , + 0x30cf /* offset 3509 */ , + 0x30d2 /* offset 3510 */ , + 0x30d5 /* offset 3511 */ , + 0x30d8 /* offset 3512 */ , + 0x30db /* offset 3513 */ , + 0x30de /* offset 3514 */ , + 0x30df /* offset 3515 */ , + 0x30e0 /* offset 3516 */ , + 0x30e1 /* offset 3517 */ , + 0x30e2 /* offset 3518 */ , + 0x30e4 /* offset 3519 */ , + 0x30e6 /* offset 3520 */ , + 0x30e8 /* offset 3521 */ , + 0x30e9 /* offset 3522 */ , + 0x30ea /* offset 3523 */ , + 0x30eb /* offset 3524 */ , + 0x30ec /* offset 3525 */ , + 0x30ed /* offset 3526 */ , + 0x30ef /* offset 3527 */ , + 0x30f0 /* offset 3528 */ , + 0x30f1 /* offset 3529 */ , + 0x30f2 /* offset 3530 */ , + 0x30a2, 0x30cf, 0x309a, 0x30fc, 0x30c8 /* offset 3531 */ , + 0x30a2, 0x30eb, 0x30d5, 0x30a1 /* offset 3536 */ , + 0x30a2, 0x30f3, 0x30d8, 0x309a, 0x30a2 /* offset 3540 */ , + 0x30a2, 0x30fc, 0x30eb /* offset 3545 */ , + 0x30a4, 0x30cb, 0x30f3, 0x30af, 0x3099 /* offset 3548 */ , + 0x30a4, 0x30f3, 0x30c1 /* offset 3553 */ , + 0x30a6, 0x30a9, 0x30f3 /* offset 3556 */ , + 0x30a8, 0x30b9, 0x30af, 0x30fc, 0x30c8, 0x3099 /* offset 3559 */ , + 0x30a8, 0x30fc, 0x30ab, 0x30fc /* offset 3565 */ , + 0x30aa, 0x30f3, 0x30b9 /* offset 3569 */ , + 0x30aa, 0x30fc, 0x30e0 /* offset 3572 */ , + 0x30ab, 0x30a4, 0x30ea /* offset 3575 */ , + 0x30ab, 0x30e9, 0x30c3, 0x30c8 /* offset 3578 */ , + 0x30ab, 0x30ed, 0x30ea, 0x30fc /* offset 3582 */ , + 0x30ab, 0x3099, 0x30ed, 0x30f3 /* offset 3586 */ , + 0x30ab, 0x3099, 0x30f3, 0x30de /* offset 3590 */ , + 0x30ad, 0x3099, 0x30ab, 0x3099 /* offset 3594 */ , + 0x30ad, 0x3099, 0x30cb, 0x30fc /* offset 3598 */ , + 0x30ad, 0x30e5, 0x30ea, 0x30fc /* offset 3602 */ , + 0x30ad, 0x3099, 0x30eb, 0x30bf, 0x3099, 0x30fc /* offset 3606 */ , + 0x30ad, 0x30ed /* offset 3612 */ , + 0x30ad, 0x30ed, 0x30af, 0x3099, 0x30e9, 0x30e0 /* offset 3614 */ , + 0x30ad, 0x30ed, 0x30e1, 0x30fc, 0x30c8, 0x30eb /* offset 3620 */ , + 0x30ad, 0x30ed, 0x30ef, 0x30c3, 0x30c8 /* offset 3626 */ , + 0x30af, 0x3099, 0x30e9, 0x30e0 /* offset 3631 */ , + 0x30af, 0x3099, 0x30e9, 0x30e0, 0x30c8, 0x30f3 /* offset 3635 */ , + 0x30af, 0x30eb, 0x30bb, 0x3099, 0x30a4, 0x30ed /* offset 3641 */ , + 0x30af, 0x30ed, 0x30fc, 0x30cd /* offset 3647 */ , + 0x30b1, 0x30fc, 0x30b9 /* offset 3651 */ , + 0x30b3, 0x30eb, 0x30ca /* offset 3654 */ , + 0x30b3, 0x30fc, 0x30db, 0x309a /* offset 3657 */ , + 0x30b5, 0x30a4, 0x30af, 0x30eb /* offset 3661 */ , + 0x30b5, 0x30f3, 0x30c1, 0x30fc, 0x30e0 /* offset 3665 */ , + 0x30b7, 0x30ea, 0x30f3, 0x30af, 0x3099 /* offset 3670 */ , + 0x30bb, 0x30f3, 0x30c1 /* offset 3675 */ , + 0x30bb, 0x30f3, 0x30c8 /* offset 3678 */ , + 0x30bf, 0x3099, 0x30fc, 0x30b9 /* offset 3681 */ , + 0x30c6, 0x3099, 0x30b7 /* offset 3685 */ , + 0x30c8, 0x3099, 0x30eb /* offset 3688 */ , + 0x30c8, 0x30f3 /* offset 3691 */ , + 0x30ca, 0x30ce /* offset 3693 */ , + 0x30ce, 0x30c3, 0x30c8 /* offset 3695 */ , + 0x30cf, 0x30a4, 0x30c4 /* offset 3698 */ , + 0x30cf, 0x309a, 0x30fc, 0x30bb, 0x30f3, 0x30c8 /* offset 3701 */ , + 0x30cf, 0x309a, 0x30fc, 0x30c4 /* offset 3707 */ , + 0x30cf, 0x3099, 0x30fc, 0x30ec, 0x30eb /* offset 3711 */ , + 0x30d2, 0x309a, 0x30a2, 0x30b9, 0x30c8, 0x30eb /* offset 3716 */ , + 0x30d2, 0x309a, 0x30af, 0x30eb /* offset 3722 */ , + 0x30d2, 0x309a, 0x30b3 /* offset 3726 */ , + 0x30d2, 0x3099, 0x30eb /* offset 3729 */ , + 0x30d5, 0x30a1, 0x30e9, 0x30c3, 0x30c8, 0x3099 /* offset 3732 */ , + 0x30d5, 0x30a3, 0x30fc, 0x30c8 /* offset 3738 */ , + 0x30d5, 0x3099, 0x30c3, 0x30b7, 0x30a7, 0x30eb /* offset 3742 */ , + 0x30d5, 0x30e9, 0x30f3 /* offset 3748 */ , + 0x30d8, 0x30af, 0x30bf, 0x30fc, 0x30eb /* offset 3751 */ , + 0x30d8, 0x309a, 0x30bd /* offset 3756 */ , + 0x30d8, 0x309a, 0x30cb, 0x30d2 /* offset 3759 */ , + 0x30d8, 0x30eb, 0x30c4 /* offset 3763 */ , + 0x30d8, 0x309a, 0x30f3, 0x30b9 /* offset 3766 */ , + 0x30d8, 0x309a, 0x30fc, 0x30b7, 0x3099 /* offset 3770 */ , + 0x30d8, 0x3099, 0x30fc, 0x30bf /* offset 3775 */ , + 0x30db, 0x309a, 0x30a4, 0x30f3, 0x30c8 /* offset 3779 */ , + 0x30db, 0x3099, 0x30eb, 0x30c8 /* offset 3784 */ , + 0x30db, 0x30f3 /* offset 3788 */ , + 0x30db, 0x309a, 0x30f3, 0x30c8, 0x3099 /* offset 3790 */ , + 0x30db, 0x30fc, 0x30eb /* offset 3795 */ , + 0x30db, 0x30fc, 0x30f3 /* offset 3798 */ , + 0x30de, 0x30a4, 0x30af, 0x30ed /* offset 3801 */ , + 0x30de, 0x30a4, 0x30eb /* offset 3805 */ , + 0x30de, 0x30c3, 0x30cf /* offset 3808 */ , + 0x30de, 0x30eb, 0x30af /* offset 3811 */ , + 0x30de, 0x30f3, 0x30b7, 0x30e7, 0x30f3 /* offset 3814 */ , + 0x30df, 0x30af, 0x30ed, 0x30f3 /* offset 3819 */ , + 0x30df, 0x30ea /* offset 3823 */ , + 0x30df, 0x30ea, 0x30cf, 0x3099, 0x30fc, 0x30eb /* offset 3825 */ , + 0x30e1, 0x30ab, 0x3099 /* offset 3831 */ , + 0x30e1, 0x30ab, 0x3099, 0x30c8, 0x30f3 /* offset 3834 */ , + 0x30e1, 0x30fc, 0x30c8, 0x30eb /* offset 3839 */ , + 0x30e4, 0x30fc, 0x30c8, 0x3099 /* offset 3843 */ , + 0x30e4, 0x30fc, 0x30eb /* offset 3847 */ , + 0x30e6, 0x30a2, 0x30f3 /* offset 3850 */ , + 0x30ea, 0x30c3, 0x30c8, 0x30eb /* offset 3853 */ , + 0x30ea, 0x30e9 /* offset 3857 */ , + 0x30eb, 0x30d2, 0x309a, 0x30fc /* offset 3859 */ , + 0x30eb, 0x30fc, 0x30d5, 0x3099, 0x30eb /* offset 3863 */ , + 0x30ec, 0x30e0 /* offset 3868 */ , + 0x30ec, 0x30f3, 0x30c8, 0x30b1, 0x3099, 0x30f3 /* offset 3870 */ , + 0x30ef, 0x30c3, 0x30c8 /* offset 3876 */ , + 0x30, 0x70b9 /* offset 3879 */ , + 0x31, 0x70b9 /* offset 3881 */ , + 0x32, 0x70b9 /* offset 3883 */ , + 0x33, 0x70b9 /* offset 3885 */ , + 0x34, 0x70b9 /* offset 3887 */ , + 0x35, 0x70b9 /* offset 3889 */ , + 0x36, 0x70b9 /* offset 3891 */ , + 0x37, 0x70b9 /* offset 3893 */ , + 0x38, 0x70b9 /* offset 3895 */ , + 0x39, 0x70b9 /* offset 3897 */ , + 0x31, 0x30, 0x70b9 /* offset 3899 */ , + 0x31, 0x31, 0x70b9 /* offset 3902 */ , + 0x31, 0x32, 0x70b9 /* offset 3905 */ , + 0x31, 0x33, 0x70b9 /* offset 3908 */ , + 0x31, 0x34, 0x70b9 /* offset 3911 */ , + 0x31, 0x35, 0x70b9 /* offset 3914 */ , + 0x31, 0x36, 0x70b9 /* offset 3917 */ , + 0x31, 0x37, 0x70b9 /* offset 3920 */ , + 0x31, 0x38, 0x70b9 /* offset 3923 */ , + 0x31, 0x39, 0x70b9 /* offset 3926 */ , + 0x32, 0x30, 0x70b9 /* offset 3929 */ , + 0x32, 0x31, 0x70b9 /* offset 3932 */ , + 0x32, 0x32, 0x70b9 /* offset 3935 */ , + 0x32, 0x33, 0x70b9 /* offset 3938 */ , + 0x32, 0x34, 0x70b9 /* offset 3941 */ , + 0x68, 0x50, 0x61 /* offset 3944 */ , + 0x64, 0x61 /* offset 3947 */ , + 0x41, 0x55 /* offset 3949 */ , + 0x62, 0x61, 0x72 /* offset 3951 */ , + 0x6f, 0x56 /* offset 3954 */ , + 0x70, 0x63 /* offset 3956 */ , + 0x5e73, 0x6210 /* offset 3958 */ , + 0x662d, 0x548c /* offset 3960 */ , + 0x5927, 0x6b63 /* offset 3962 */ , + 0x660e, 0x6cbb /* offset 3964 */ , + 0x682a, 0x5f0f, 0x4f1a, 0x793e /* offset 3966 */ , + 0x70, 0x41 /* offset 3970 */ , + 0x6e, 0x41 /* offset 3972 */ , + 0x3bc, 0x41 /* offset 3974 */ , + 0x6d, 0x41 /* offset 3976 */ , + 0x6b, 0x41 /* offset 3978 */ , + 0x4b, 0x42 /* offset 3980 */ , + 0x4d, 0x42 /* offset 3982 */ , + 0x47, 0x42 /* offset 3984 */ , + 0x63, 0x61, 0x6c /* offset 3986 */ , + 0x6b, 0x63, 0x61, 0x6c /* offset 3989 */ , + 0x70, 0x46 /* offset 3993 */ , + 0x6e, 0x46 /* offset 3995 */ , + 0x3bc, 0x46 /* offset 3997 */ , + 0x3bc, 0x67 /* offset 3999 */ , + 0x6d, 0x67 /* offset 4001 */ , + 0x6b, 0x67 /* offset 4003 */ , + 0x48, 0x7a /* offset 4005 */ , + 0x6b, 0x48, 0x7a /* offset 4007 */ , + 0x4d, 0x48, 0x7a /* offset 4010 */ , + 0x47, 0x48, 0x7a /* offset 4013 */ , + 0x54, 0x48, 0x7a /* offset 4016 */ , + 0x3bc, 0x6c /* offset 4019 */ , + 0x6d, 0x6c /* offset 4021 */ , + 0x64, 0x6c /* offset 4023 */ , + 0x6b, 0x6c /* offset 4025 */ , + 0x66, 0x6d /* offset 4027 */ , + 0x6e, 0x6d /* offset 4029 */ , + 0x3bc, 0x6d /* offset 4031 */ , + 0x6d, 0x6d /* offset 4033 */ , + 0x63, 0x6d /* offset 4035 */ , + 0x6b, 0x6d /* offset 4037 */ , + 0x6d, 0x6d, 0x32 /* offset 4039 */ , + 0x63, 0x6d, 0x32 /* offset 4042 */ , + 0x6d, 0x32 /* offset 4045 */ , + 0x6b, 0x6d, 0x32 /* offset 4047 */ , + 0x6d, 0x6d, 0x33 /* offset 4050 */ , + 0x63, 0x6d, 0x33 /* offset 4053 */ , + 0x6d, 0x33 /* offset 4056 */ , + 0x6b, 0x6d, 0x33 /* offset 4058 */ , + 0x6d, 0x2215, 0x73 /* offset 4061 */ , + 0x6d, 0x2215, 0x73, 0x32 /* offset 4064 */ , + 0x50, 0x61 /* offset 4068 */ , + 0x6b, 0x50, 0x61 /* offset 4070 */ , + 0x4d, 0x50, 0x61 /* offset 4073 */ , + 0x47, 0x50, 0x61 /* offset 4076 */ , + 0x72, 0x61, 0x64 /* offset 4079 */ , + 0x72, 0x61, 0x64, 0x2215, 0x73 /* offset 4082 */ , + 0x72, 0x61, 0x64, 0x2215, 0x73, 0x32 /* offset 4087 */ , + 0x70, 0x73 /* offset 4093 */ , + 0x6e, 0x73 /* offset 4095 */ , + 0x3bc, 0x73 /* offset 4097 */ , + 0x6d, 0x73 /* offset 4099 */ , + 0x70, 0x56 /* offset 4101 */ , + 0x6e, 0x56 /* offset 4103 */ , + 0x3bc, 0x56 /* offset 4105 */ , + 0x6d, 0x56 /* offset 4107 */ , + 0x6b, 0x56 /* offset 4109 */ , + 0x4d, 0x56 /* offset 4111 */ , + 0x70, 0x57 /* offset 4113 */ , + 0x6e, 0x57 /* offset 4115 */ , + 0x3bc, 0x57 /* offset 4117 */ , + 0x6d, 0x57 /* offset 4119 */ , + 0x6b, 0x57 /* offset 4121 */ , + 0x4d, 0x57 /* offset 4123 */ , + 0x6b, 0x3a9 /* offset 4125 */ , + 0x4d, 0x3a9 /* offset 4127 */ , + 0x61, 0x2e, 0x6d, 0x2e /* offset 4129 */ , + 0x42, 0x71 /* offset 4133 */ , + 0x63, 0x63 /* offset 4135 */ , + 0x63, 0x64 /* offset 4137 */ , + 0x43, 0x2215, 0x6b, 0x67 /* offset 4139 */ , + 0x43, 0x6f, 0x2e /* offset 4143 */ , + 0x64, 0x42 /* offset 4146 */ , + 0x47, 0x79 /* offset 4148 */ , + 0x68, 0x61 /* offset 4150 */ , + 0x48, 0x50 /* offset 4152 */ , + 0x69, 0x6e /* offset 4154 */ , + 0x4b, 0x4b /* offset 4156 */ , + 0x4b, 0x4d /* offset 4158 */ , + 0x6b, 0x74 /* offset 4160 */ , + 0x6c, 0x6d /* offset 4162 */ , + 0x6c, 0x6e /* offset 4164 */ , + 0x6c, 0x6f, 0x67 /* offset 4166 */ , + 0x6c, 0x78 /* offset 4169 */ , + 0x6d, 0x62 /* offset 4171 */ , + 0x6d, 0x69, 0x6c /* offset 4173 */ , + 0x6d, 0x6f, 0x6c /* offset 4176 */ , + 0x50, 0x48 /* offset 4179 */ , + 0x70, 0x2e, 0x6d, 0x2e /* offset 4181 */ , + 0x50, 0x50, 0x4d /* offset 4185 */ , + 0x50, 0x52 /* offset 4188 */ , + 0x73, 0x72 /* offset 4190 */ , + 0x53, 0x76 /* offset 4192 */ , + 0x57, 0x62 /* offset 4194 */ , + 0x31, 0x65e5 /* offset 4196 */ , + 0x32, 0x65e5 /* offset 4198 */ , + 0x33, 0x65e5 /* offset 4200 */ , + 0x34, 0x65e5 /* offset 4202 */ , + 0x35, 0x65e5 /* offset 4204 */ , + 0x36, 0x65e5 /* offset 4206 */ , + 0x37, 0x65e5 /* offset 4208 */ , + 0x38, 0x65e5 /* offset 4210 */ , + 0x39, 0x65e5 /* offset 4212 */ , + 0x31, 0x30, 0x65e5 /* offset 4214 */ , + 0x31, 0x31, 0x65e5 /* offset 4217 */ , + 0x31, 0x32, 0x65e5 /* offset 4220 */ , + 0x31, 0x33, 0x65e5 /* offset 4223 */ , + 0x31, 0x34, 0x65e5 /* offset 4226 */ , + 0x31, 0x35, 0x65e5 /* offset 4229 */ , + 0x31, 0x36, 0x65e5 /* offset 4232 */ , + 0x31, 0x37, 0x65e5 /* offset 4235 */ , + 0x31, 0x38, 0x65e5 /* offset 4238 */ , + 0x31, 0x39, 0x65e5 /* offset 4241 */ , + 0x32, 0x30, 0x65e5 /* offset 4244 */ , + 0x32, 0x31, 0x65e5 /* offset 4247 */ , + 0x32, 0x32, 0x65e5 /* offset 4250 */ , + 0x32, 0x33, 0x65e5 /* offset 4253 */ , + 0x32, 0x34, 0x65e5 /* offset 4256 */ , + 0x32, 0x35, 0x65e5 /* offset 4259 */ , + 0x32, 0x36, 0x65e5 /* offset 4262 */ , + 0x32, 0x37, 0x65e5 /* offset 4265 */ , + 0x32, 0x38, 0x65e5 /* offset 4268 */ , + 0x32, 0x39, 0x65e5 /* offset 4271 */ , + 0x33, 0x30, 0x65e5 /* offset 4274 */ , + 0x33, 0x31, 0x65e5 /* offset 4277 */ , + 0x8c48 /* offset 4280 */ , + 0x66f4 /* offset 4281 */ , + 0x8cc8 /* offset 4282 */ , + 0x6ed1 /* offset 4283 */ , + 0x4e32 /* offset 4284 */ , + 0x53e5 /* offset 4285 */ , + 0x5951 /* offset 4286 */ , + 0x5587 /* offset 4287 */ , + 0x5948 /* offset 4288 */ , + 0x61f6 /* offset 4289 */ , + 0x7669 /* offset 4290 */ , + 0x7f85 /* offset 4291 */ , + 0x863f /* offset 4292 */ , + 0x87ba /* offset 4293 */ , + 0x88f8 /* offset 4294 */ , + 0x908f /* offset 4295 */ , + 0x6a02 /* offset 4296 */ , + 0x6d1b /* offset 4297 */ , + 0x70d9 /* offset 4298 */ , + 0x73de /* offset 4299 */ , + 0x843d /* offset 4300 */ , + 0x916a /* offset 4301 */ , + 0x99f1 /* offset 4302 */ , + 0x4e82 /* offset 4303 */ , + 0x5375 /* offset 4304 */ , + 0x6b04 /* offset 4305 */ , + 0x721b /* offset 4306 */ , + 0x862d /* offset 4307 */ , + 0x9e1e /* offset 4308 */ , + 0x5d50 /* offset 4309 */ , + 0x6feb /* offset 4310 */ , + 0x85cd /* offset 4311 */ , + 0x8964 /* offset 4312 */ , + 0x62c9 /* offset 4313 */ , + 0x81d8 /* offset 4314 */ , + 0x881f /* offset 4315 */ , + 0x5eca /* offset 4316 */ , + 0x6717 /* offset 4317 */ , + 0x6d6a /* offset 4318 */ , + 0x72fc /* offset 4319 */ , + 0x90ce /* offset 4320 */ , + 0x4f86 /* offset 4321 */ , + 0x51b7 /* offset 4322 */ , + 0x52de /* offset 4323 */ , + 0x64c4 /* offset 4324 */ , + 0x6ad3 /* offset 4325 */ , + 0x7210 /* offset 4326 */ , + 0x76e7 /* offset 4327 */ , + 0x8606 /* offset 4328 */ , + 0x865c /* offset 4329 */ , + 0x8def /* offset 4330 */ , + 0x9732 /* offset 4331 */ , + 0x9b6f /* offset 4332 */ , + 0x9dfa /* offset 4333 */ , + 0x788c /* offset 4334 */ , + 0x797f /* offset 4335 */ , + 0x7da0 /* offset 4336 */ , + 0x83c9 /* offset 4337 */ , + 0x9304 /* offset 4338 */ , + 0x8ad6 /* offset 4339 */ , + 0x58df /* offset 4340 */ , + 0x5f04 /* offset 4341 */ , + 0x7c60 /* offset 4342 */ , + 0x807e /* offset 4343 */ , + 0x7262 /* offset 4344 */ , + 0x78ca /* offset 4345 */ , + 0x8cc2 /* offset 4346 */ , + 0x96f7 /* offset 4347 */ , + 0x58d8 /* offset 4348 */ , + 0x5c62 /* offset 4349 */ , + 0x6a13 /* offset 4350 */ , + 0x6dda /* offset 4351 */ , + 0x6f0f /* offset 4352 */ , + 0x7d2f /* offset 4353 */ , + 0x7e37 /* offset 4354 */ , + 0x964b /* offset 4355 */ , + 0x52d2 /* offset 4356 */ , + 0x808b /* offset 4357 */ , + 0x51dc /* offset 4358 */ , + 0x51cc /* offset 4359 */ , + 0x7a1c /* offset 4360 */ , + 0x7dbe /* offset 4361 */ , + 0x83f1 /* offset 4362 */ , + 0x9675 /* offset 4363 */ , + 0x8b80 /* offset 4364 */ , + 0x62cf /* offset 4365 */ , + 0x8afe /* offset 4366 */ , + 0x4e39 /* offset 4367 */ , + 0x5be7 /* offset 4368 */ , + 0x6012 /* offset 4369 */ , + 0x7387 /* offset 4370 */ , + 0x7570 /* offset 4371 */ , + 0x5317 /* offset 4372 */ , + 0x78fb /* offset 4373 */ , + 0x4fbf /* offset 4374 */ , + 0x5fa9 /* offset 4375 */ , + 0x4e0d /* offset 4376 */ , + 0x6ccc /* offset 4377 */ , + 0x6578 /* offset 4378 */ , + 0x7d22 /* offset 4379 */ , + 0x53c3 /* offset 4380 */ , + 0x585e /* offset 4381 */ , + 0x7701 /* offset 4382 */ , + 0x8449 /* offset 4383 */ , + 0x8aaa /* offset 4384 */ , + 0x6bba /* offset 4385 */ , + 0x6c88 /* offset 4386 */ , + 0x62fe /* offset 4387 */ , + 0x82e5 /* offset 4388 */ , + 0x63a0 /* offset 4389 */ , + 0x7565 /* offset 4390 */ , + 0x4eae /* offset 4391 */ , + 0x5169 /* offset 4392 */ , + 0x51c9 /* offset 4393 */ , + 0x6881 /* offset 4394 */ , + 0x7ce7 /* offset 4395 */ , + 0x826f /* offset 4396 */ , + 0x8ad2 /* offset 4397 */ , + 0x91cf /* offset 4398 */ , + 0x52f5 /* offset 4399 */ , + 0x5442 /* offset 4400 */ , + 0x5eec /* offset 4401 */ , + 0x65c5 /* offset 4402 */ , + 0x6ffe /* offset 4403 */ , + 0x792a /* offset 4404 */ , + 0x95ad /* offset 4405 */ , + 0x9a6a /* offset 4406 */ , + 0x9e97 /* offset 4407 */ , + 0x9ece /* offset 4408 */ , + 0x66c6 /* offset 4409 */ , + 0x6b77 /* offset 4410 */ , + 0x8f62 /* offset 4411 */ , + 0x5e74 /* offset 4412 */ , + 0x6190 /* offset 4413 */ , + 0x6200 /* offset 4414 */ , + 0x649a /* offset 4415 */ , + 0x6f23 /* offset 4416 */ , + 0x7149 /* offset 4417 */ , + 0x7489 /* offset 4418 */ , + 0x79ca /* offset 4419 */ , + 0x7df4 /* offset 4420 */ , + 0x806f /* offset 4421 */ , + 0x8f26 /* offset 4422 */ , + 0x84ee /* offset 4423 */ , + 0x9023 /* offset 4424 */ , + 0x934a /* offset 4425 */ , + 0x5217 /* offset 4426 */ , + 0x52a3 /* offset 4427 */ , + 0x54bd /* offset 4428 */ , + 0x70c8 /* offset 4429 */ , + 0x88c2 /* offset 4430 */ , + 0x5ec9 /* offset 4431 */ , + 0x5ff5 /* offset 4432 */ , + 0x637b /* offset 4433 */ , + 0x6bae /* offset 4434 */ , + 0x7c3e /* offset 4435 */ , + 0x7375 /* offset 4436 */ , + 0x4ee4 /* offset 4437 */ , + 0x56f9 /* offset 4438 */ , + 0x5dba /* offset 4439 */ , + 0x601c /* offset 4440 */ , + 0x73b2 /* offset 4441 */ , + 0x7469 /* offset 4442 */ , + 0x7f9a /* offset 4443 */ , + 0x8046 /* offset 4444 */ , + 0x9234 /* offset 4445 */ , + 0x96f6 /* offset 4446 */ , + 0x9748 /* offset 4447 */ , + 0x9818 /* offset 4448 */ , + 0x4f8b /* offset 4449 */ , + 0x79ae /* offset 4450 */ , + 0x91b4 /* offset 4451 */ , + 0x96b8 /* offset 4452 */ , + 0x60e1 /* offset 4453 */ , + 0x4e86 /* offset 4454 */ , + 0x50da /* offset 4455 */ , + 0x5bee /* offset 4456 */ , + 0x5c3f /* offset 4457 */ , + 0x6599 /* offset 4458 */ , + 0x71ce /* offset 4459 */ , + 0x7642 /* offset 4460 */ , + 0x84fc /* offset 4461 */ , + 0x907c /* offset 4462 */ , + 0x6688 /* offset 4463 */ , + 0x962e /* offset 4464 */ , + 0x5289 /* offset 4465 */ , + 0x677b /* offset 4466 */ , + 0x67f3 /* offset 4467 */ , + 0x6d41 /* offset 4468 */ , + 0x6e9c /* offset 4469 */ , + 0x7409 /* offset 4470 */ , + 0x7559 /* offset 4471 */ , + 0x786b /* offset 4472 */ , + 0x7d10 /* offset 4473 */ , + 0x985e /* offset 4474 */ , + 0x622e /* offset 4475 */ , + 0x9678 /* offset 4476 */ , + 0x502b /* offset 4477 */ , + 0x5d19 /* offset 4478 */ , + 0x6dea /* offset 4479 */ , + 0x8f2a /* offset 4480 */ , + 0x5f8b /* offset 4481 */ , + 0x6144 /* offset 4482 */ , + 0x6817 /* offset 4483 */ , + 0x9686 /* offset 4484 */ , + 0x5229 /* offset 4485 */ , + 0x540f /* offset 4486 */ , + 0x5c65 /* offset 4487 */ , + 0x6613 /* offset 4488 */ , + 0x674e /* offset 4489 */ , + 0x68a8 /* offset 4490 */ , + 0x6ce5 /* offset 4491 */ , + 0x7406 /* offset 4492 */ , + 0x75e2 /* offset 4493 */ , + 0x7f79 /* offset 4494 */ , + 0x88cf /* offset 4495 */ , + 0x88e1 /* offset 4496 */ , + 0x96e2 /* offset 4497 */ , + 0x533f /* offset 4498 */ , + 0x6eba /* offset 4499 */ , + 0x541d /* offset 4500 */ , + 0x71d0 /* offset 4501 */ , + 0x7498 /* offset 4502 */ , + 0x85fa /* offset 4503 */ , + 0x96a3 /* offset 4504 */ , + 0x9c57 /* offset 4505 */ , + 0x9e9f /* offset 4506 */ , + 0x6797 /* offset 4507 */ , + 0x6dcb /* offset 4508 */ , + 0x81e8 /* offset 4509 */ , + 0x7b20 /* offset 4510 */ , + 0x7c92 /* offset 4511 */ , + 0x72c0 /* offset 4512 */ , + 0x7099 /* offset 4513 */ , + 0x8b58 /* offset 4514 */ , + 0x4ec0 /* offset 4515 */ , + 0x8336 /* offset 4516 */ , + 0x523a /* offset 4517 */ , + 0x5207 /* offset 4518 */ , + 0x5ea6 /* offset 4519 */ , + 0x62d3 /* offset 4520 */ , + 0x7cd6 /* offset 4521 */ , + 0x5b85 /* offset 4522 */ , + 0x6d1e /* offset 4523 */ , + 0x66b4 /* offset 4524 */ , + 0x8f3b /* offset 4525 */ , + 0x964d /* offset 4526 */ , + 0x5ed3 /* offset 4527 */ , + 0x5140 /* offset 4528 */ , + 0x55c0 /* offset 4529 */ , + 0x585a /* offset 4530 */ , + 0x6674 /* offset 4531 */ , + 0x51de /* offset 4532 */ , + 0x732a /* offset 4533 */ , + 0x76ca /* offset 4534 */ , + 0x793c /* offset 4535 */ , + 0x795e /* offset 4536 */ , + 0x7965 /* offset 4537 */ , + 0x798f /* offset 4538 */ , + 0x9756 /* offset 4539 */ , + 0x7cbe /* offset 4540 */ , + 0x8612 /* offset 4541 */ , + 0x8af8 /* offset 4542 */ , + 0x9038 /* offset 4543 */ , + 0x90fd /* offset 4544 */ , + 0x98ef /* offset 4545 */ , + 0x98fc /* offset 4546 */ , + 0x9928 /* offset 4547 */ , + 0x9db4 /* offset 4548 */ , + 0x4fae /* offset 4549 */ , + 0x50e7 /* offset 4550 */ , + 0x514d /* offset 4551 */ , + 0x52c9 /* offset 4552 */ , + 0x52e4 /* offset 4553 */ , + 0x5351 /* offset 4554 */ , + 0x559d /* offset 4555 */ , + 0x5606 /* offset 4556 */ , + 0x5668 /* offset 4557 */ , + 0x5840 /* offset 4558 */ , + 0x58a8 /* offset 4559 */ , + 0x5c64 /* offset 4560 */ , + 0x6094 /* offset 4561 */ , + 0x6168 /* offset 4562 */ , + 0x618e /* offset 4563 */ , + 0x61f2 /* offset 4564 */ , + 0x654f /* offset 4565 */ , + 0x65e2 /* offset 4566 */ , + 0x6691 /* offset 4567 */ , + 0x6885 /* offset 4568 */ , + 0x6d77 /* offset 4569 */ , + 0x6e1a /* offset 4570 */ , + 0x6f22 /* offset 4571 */ , + 0x716e /* offset 4572 */ , + 0x722b /* offset 4573 */ , + 0x7422 /* offset 4574 */ , + 0x7891 /* offset 4575 */ , + 0x7949 /* offset 4576 */ , + 0x7948 /* offset 4577 */ , + 0x7950 /* offset 4578 */ , + 0x7956 /* offset 4579 */ , + 0x798d /* offset 4580 */ , + 0x798e /* offset 4581 */ , + 0x7a40 /* offset 4582 */ , + 0x7a81 /* offset 4583 */ , + 0x7bc0 /* offset 4584 */ , + 0x7e09 /* offset 4585 */ , + 0x7e41 /* offset 4586 */ , + 0x7f72 /* offset 4587 */ , + 0x8005 /* offset 4588 */ , + 0x81ed /* offset 4589 */ , + 0x8279 /* offset 4590 */ , + 0x8457 /* offset 4591 */ , + 0x8910 /* offset 4592 */ , + 0x8996 /* offset 4593 */ , + 0x8b01 /* offset 4594 */ , + 0x8b39 /* offset 4595 */ , + 0x8cd3 /* offset 4596 */ , + 0x8d08 /* offset 4597 */ , + 0x8fb6 /* offset 4598 */ , + 0x96e3 /* offset 4599 */ , + 0x97ff /* offset 4600 */ , + 0x983b /* offset 4601 */ , + 0x66, 0x66 /* offset 4602 */ , + 0x66, 0x69 /* offset 4604 */ , + 0x66, 0x6c /* offset 4606 */ , + 0x66, 0x66, 0x69 /* offset 4608 */ , + 0x66, 0x66, 0x6c /* offset 4611 */ , + 0x73, 0x74 /* offset 4614 */ , + 0x574, 0x576 /* offset 4616 */ , + 0x574, 0x565 /* offset 4618 */ , + 0x574, 0x56b /* offset 4620 */ , + 0x57e, 0x576 /* offset 4622 */ , + 0x574, 0x56d /* offset 4624 */ , + 0x5d9, 0x5b4 /* offset 4626 */ , + 0x5f2, 0x5b7 /* offset 4628 */ , + 0x5e2 /* offset 4630 */ , + 0x5d4 /* offset 4631 */ , + 0x5db /* offset 4632 */ , + 0x5dc /* offset 4633 */ , + 0x5dd /* offset 4634 */ , + 0x5e8 /* offset 4635 */ , + 0x5ea /* offset 4636 */ , + 0x5e9, 0x5c1 /* offset 4637 */ , + 0x5e9, 0x5c2 /* offset 4639 */ , + 0x5e9, 0x5bc, 0x5c1 /* offset 4641 */ , + 0x5e9, 0x5bc, 0x5c2 /* offset 4644 */ , + 0x5d0, 0x5b7 /* offset 4647 */ , + 0x5d0, 0x5b8 /* offset 4649 */ , + 0x5d0, 0x5bc /* offset 4651 */ , + 0x5d1, 0x5bc /* offset 4653 */ , + 0x5d2, 0x5bc /* offset 4655 */ , + 0x5d3, 0x5bc /* offset 4657 */ , + 0x5d4, 0x5bc /* offset 4659 */ , + 0x5d5, 0x5bc /* offset 4661 */ , + 0x5d6, 0x5bc /* offset 4663 */ , + 0x5d8, 0x5bc /* offset 4665 */ , + 0x5d9, 0x5bc /* offset 4667 */ , + 0x5da, 0x5bc /* offset 4669 */ , + 0x5db, 0x5bc /* offset 4671 */ , + 0x5dc, 0x5bc /* offset 4673 */ , + 0x5de, 0x5bc /* offset 4675 */ , + 0x5e0, 0x5bc /* offset 4677 */ , + 0x5e1, 0x5bc /* offset 4679 */ , + 0x5e3, 0x5bc /* offset 4681 */ , + 0x5e4, 0x5bc /* offset 4683 */ , + 0x5e6, 0x5bc /* offset 4685 */ , + 0x5e7, 0x5bc /* offset 4687 */ , + 0x5e8, 0x5bc /* offset 4689 */ , + 0x5e9, 0x5bc /* offset 4691 */ , + 0x5ea, 0x5bc /* offset 4693 */ , + 0x5d5, 0x5b9 /* offset 4695 */ , + 0x5d1, 0x5bf /* offset 4697 */ , + 0x5db, 0x5bf /* offset 4699 */ , + 0x5e4, 0x5bf /* offset 4701 */ , + 0x5d0, 0x5dc /* offset 4703 */ , + 0x671 /* offset 4705 */ , + 0x67b /* offset 4706 */ , + 0x67e /* offset 4707 */ , + 0x680 /* offset 4708 */ , + 0x67a /* offset 4709 */ , + 0x67f /* offset 4710 */ , + 0x679 /* offset 4711 */ , + 0x6a4 /* offset 4712 */ , + 0x6a6 /* offset 4713 */ , + 0x684 /* offset 4714 */ , + 0x683 /* offset 4715 */ , + 0x686 /* offset 4716 */ , + 0x687 /* offset 4717 */ , + 0x68d /* offset 4718 */ , + 0x68c /* offset 4719 */ , + 0x68e /* offset 4720 */ , + 0x688 /* offset 4721 */ , + 0x698 /* offset 4722 */ , + 0x691 /* offset 4723 */ , + 0x6a9 /* offset 4724 */ , + 0x6af /* offset 4725 */ , + 0x6b3 /* offset 4726 */ , + 0x6b1 /* offset 4727 */ , + 0x6ba /* offset 4728 */ , + 0x6bb /* offset 4729 */ , + 0x6c1 /* offset 4730 */ , + 0x6be /* offset 4731 */ , + 0x6d2 /* offset 4732 */ , + 0x6ad /* offset 4733 */ , + 0x6c7 /* offset 4734 */ , + 0x6c6 /* offset 4735 */ , + 0x6c8 /* offset 4736 */ , + 0x6cb /* offset 4737 */ , + 0x6c5 /* offset 4738 */ , + 0x6c9 /* offset 4739 */ , + 0x6d0 /* offset 4740 */ , + 0x649 /* offset 4741 */ , + 0x64a, 0x654, 0x627 /* offset 4742 */ , + 0x64a, 0x654, 0x6d5 /* offset 4745 */ , + 0x64a, 0x654, 0x648 /* offset 4748 */ , + 0x64a, 0x654, 0x6c7 /* offset 4751 */ , + 0x64a, 0x654, 0x6c6 /* offset 4754 */ , + 0x64a, 0x654, 0x6c8 /* offset 4757 */ , + 0x64a, 0x654, 0x6d0 /* offset 4760 */ , + 0x64a, 0x654, 0x649 /* offset 4763 */ , + 0x6cc /* offset 4766 */ , + 0x64a, 0x654, 0x62c /* offset 4767 */ , + 0x64a, 0x654, 0x62d /* offset 4770 */ , + 0x64a, 0x654, 0x645 /* offset 4773 */ , + 0x64a, 0x654, 0x64a /* offset 4776 */ , + 0x628, 0x62c /* offset 4779 */ , + 0x628, 0x62d /* offset 4781 */ , + 0x628, 0x62e /* offset 4783 */ , + 0x628, 0x645 /* offset 4785 */ , + 0x628, 0x649 /* offset 4787 */ , + 0x628, 0x64a /* offset 4789 */ , + 0x62a, 0x62c /* offset 4791 */ , + 0x62a, 0x62d /* offset 4793 */ , + 0x62a, 0x62e /* offset 4795 */ , + 0x62a, 0x645 /* offset 4797 */ , + 0x62a, 0x649 /* offset 4799 */ , + 0x62a, 0x64a /* offset 4801 */ , + 0x62b, 0x62c /* offset 4803 */ , + 0x62b, 0x645 /* offset 4805 */ , + 0x62b, 0x649 /* offset 4807 */ , + 0x62b, 0x64a /* offset 4809 */ , + 0x62c, 0x62d /* offset 4811 */ , + 0x62c, 0x645 /* offset 4813 */ , + 0x62d, 0x62c /* offset 4815 */ , + 0x62d, 0x645 /* offset 4817 */ , + 0x62e, 0x62c /* offset 4819 */ , + 0x62e, 0x62d /* offset 4821 */ , + 0x62e, 0x645 /* offset 4823 */ , + 0x633, 0x62c /* offset 4825 */ , + 0x633, 0x62d /* offset 4827 */ , + 0x633, 0x62e /* offset 4829 */ , + 0x633, 0x645 /* offset 4831 */ , + 0x635, 0x62d /* offset 4833 */ , + 0x635, 0x645 /* offset 4835 */ , + 0x636, 0x62c /* offset 4837 */ , + 0x636, 0x62d /* offset 4839 */ , + 0x636, 0x62e /* offset 4841 */ , + 0x636, 0x645 /* offset 4843 */ , + 0x637, 0x62d /* offset 4845 */ , + 0x637, 0x645 /* offset 4847 */ , + 0x638, 0x645 /* offset 4849 */ , + 0x639, 0x62c /* offset 4851 */ , + 0x639, 0x645 /* offset 4853 */ , + 0x63a, 0x62c /* offset 4855 */ , + 0x63a, 0x645 /* offset 4857 */ , + 0x641, 0x62c /* offset 4859 */ , + 0x641, 0x62d /* offset 4861 */ , + 0x641, 0x62e /* offset 4863 */ , + 0x641, 0x645 /* offset 4865 */ , + 0x641, 0x649 /* offset 4867 */ , + 0x641, 0x64a /* offset 4869 */ , + 0x642, 0x62d /* offset 4871 */ , + 0x642, 0x645 /* offset 4873 */ , + 0x642, 0x649 /* offset 4875 */ , + 0x642, 0x64a /* offset 4877 */ , + 0x643, 0x627 /* offset 4879 */ , + 0x643, 0x62c /* offset 4881 */ , + 0x643, 0x62d /* offset 4883 */ , + 0x643, 0x62e /* offset 4885 */ , + 0x643, 0x644 /* offset 4887 */ , + 0x643, 0x645 /* offset 4889 */ , + 0x643, 0x649 /* offset 4891 */ , + 0x643, 0x64a /* offset 4893 */ , + 0x644, 0x62c /* offset 4895 */ , + 0x644, 0x62d /* offset 4897 */ , + 0x644, 0x62e /* offset 4899 */ , + 0x644, 0x645 /* offset 4901 */ , + 0x644, 0x649 /* offset 4903 */ , + 0x644, 0x64a /* offset 4905 */ , + 0x645, 0x62c /* offset 4907 */ , + 0x645, 0x62d /* offset 4909 */ , + 0x645, 0x62e /* offset 4911 */ , + 0x645, 0x645 /* offset 4913 */ , + 0x645, 0x649 /* offset 4915 */ , + 0x645, 0x64a /* offset 4917 */ , + 0x646, 0x62c /* offset 4919 */ , + 0x646, 0x62d /* offset 4921 */ , + 0x646, 0x62e /* offset 4923 */ , + 0x646, 0x645 /* offset 4925 */ , + 0x646, 0x649 /* offset 4927 */ , + 0x646, 0x64a /* offset 4929 */ , + 0x647, 0x62c /* offset 4931 */ , + 0x647, 0x645 /* offset 4933 */ , + 0x647, 0x649 /* offset 4935 */ , + 0x647, 0x64a /* offset 4937 */ , + 0x64a, 0x62c /* offset 4939 */ , + 0x64a, 0x62d /* offset 4941 */ , + 0x64a, 0x62e /* offset 4943 */ , + 0x64a, 0x645 /* offset 4945 */ , + 0x64a, 0x649 /* offset 4947 */ , + 0x64a, 0x64a /* offset 4949 */ , + 0x630, 0x670 /* offset 4951 */ , + 0x631, 0x670 /* offset 4953 */ , + 0x649, 0x670 /* offset 4955 */ , + 0x20, 0x64c, 0x651 /* offset 4957 */ , + 0x20, 0x64d, 0x651 /* offset 4960 */ , + 0x20, 0x64e, 0x651 /* offset 4963 */ , + 0x20, 0x64f, 0x651 /* offset 4966 */ , + 0x20, 0x650, 0x651 /* offset 4969 */ , + 0x20, 0x651, 0x670 /* offset 4972 */ , + 0x64a, 0x654, 0x631 /* offset 4975 */ , + 0x64a, 0x654, 0x632 /* offset 4978 */ , + 0x64a, 0x654, 0x646 /* offset 4981 */ , + 0x628, 0x631 /* offset 4984 */ , + 0x628, 0x632 /* offset 4986 */ , + 0x628, 0x646 /* offset 4988 */ , + 0x62a, 0x631 /* offset 4990 */ , + 0x62a, 0x632 /* offset 4992 */ , + 0x62a, 0x646 /* offset 4994 */ , + 0x62b, 0x631 /* offset 4996 */ , + 0x62b, 0x632 /* offset 4998 */ , + 0x62b, 0x646 /* offset 5000 */ , + 0x645, 0x627 /* offset 5002 */ , + 0x646, 0x631 /* offset 5004 */ , + 0x646, 0x632 /* offset 5006 */ , + 0x646, 0x646 /* offset 5008 */ , + 0x64a, 0x631 /* offset 5010 */ , + 0x64a, 0x632 /* offset 5012 */ , + 0x64a, 0x646 /* offset 5014 */ , + 0x64a, 0x654, 0x62e /* offset 5016 */ , + 0x64a, 0x654, 0x647 /* offset 5019 */ , + 0x628, 0x647 /* offset 5022 */ , + 0x62a, 0x647 /* offset 5024 */ , + 0x635, 0x62e /* offset 5026 */ , + 0x644, 0x647 /* offset 5028 */ , + 0x646, 0x647 /* offset 5030 */ , + 0x647, 0x670 /* offset 5032 */ , + 0x64a, 0x647 /* offset 5034 */ , + 0x62b, 0x647 /* offset 5036 */ , + 0x633, 0x647 /* offset 5038 */ , + 0x634, 0x645 /* offset 5040 */ , + 0x634, 0x647 /* offset 5042 */ , + 0x640, 0x64e, 0x651 /* offset 5044 */ , + 0x640, 0x64f, 0x651 /* offset 5047 */ , + 0x640, 0x650, 0x651 /* offset 5050 */ , + 0x637, 0x649 /* offset 5053 */ , + 0x637, 0x64a /* offset 5055 */ , + 0x639, 0x649 /* offset 5057 */ , + 0x639, 0x64a /* offset 5059 */ , + 0x63a, 0x649 /* offset 5061 */ , + 0x63a, 0x64a /* offset 5063 */ , + 0x633, 0x649 /* offset 5065 */ , + 0x633, 0x64a /* offset 5067 */ , + 0x634, 0x649 /* offset 5069 */ , + 0x634, 0x64a /* offset 5071 */ , + 0x62d, 0x649 /* offset 5073 */ , + 0x62d, 0x64a /* offset 5075 */ , + 0x62c, 0x649 /* offset 5077 */ , + 0x62c, 0x64a /* offset 5079 */ , + 0x62e, 0x649 /* offset 5081 */ , + 0x62e, 0x64a /* offset 5083 */ , + 0x635, 0x649 /* offset 5085 */ , + 0x635, 0x64a /* offset 5087 */ , + 0x636, 0x649 /* offset 5089 */ , + 0x636, 0x64a /* offset 5091 */ , + 0x634, 0x62c /* offset 5093 */ , + 0x634, 0x62d /* offset 5095 */ , + 0x634, 0x62e /* offset 5097 */ , + 0x634, 0x631 /* offset 5099 */ , + 0x633, 0x631 /* offset 5101 */ , + 0x635, 0x631 /* offset 5103 */ , + 0x636, 0x631 /* offset 5105 */ , + 0x627, 0x64b /* offset 5107 */ , + 0x62a, 0x62c, 0x645 /* offset 5109 */ , + 0x62a, 0x62d, 0x62c /* offset 5112 */ , + 0x62a, 0x62d, 0x645 /* offset 5115 */ , + 0x62a, 0x62e, 0x645 /* offset 5118 */ , + 0x62a, 0x645, 0x62c /* offset 5121 */ , + 0x62a, 0x645, 0x62d /* offset 5124 */ , + 0x62a, 0x645, 0x62e /* offset 5127 */ , + 0x62c, 0x645, 0x62d /* offset 5130 */ , + 0x62d, 0x645, 0x64a /* offset 5133 */ , + 0x62d, 0x645, 0x649 /* offset 5136 */ , + 0x633, 0x62d, 0x62c /* offset 5139 */ , + 0x633, 0x62c, 0x62d /* offset 5142 */ , + 0x633, 0x62c, 0x649 /* offset 5145 */ , + 0x633, 0x645, 0x62d /* offset 5148 */ , + 0x633, 0x645, 0x62c /* offset 5151 */ , + 0x633, 0x645, 0x645 /* offset 5154 */ , + 0x635, 0x62d, 0x62d /* offset 5157 */ , + 0x635, 0x645, 0x645 /* offset 5160 */ , + 0x634, 0x62d, 0x645 /* offset 5163 */ , + 0x634, 0x62c, 0x64a /* offset 5166 */ , + 0x634, 0x645, 0x62e /* offset 5169 */ , + 0x634, 0x645, 0x645 /* offset 5172 */ , + 0x636, 0x62d, 0x649 /* offset 5175 */ , + 0x636, 0x62e, 0x645 /* offset 5178 */ , + 0x637, 0x645, 0x62d /* offset 5181 */ , + 0x637, 0x645, 0x645 /* offset 5184 */ , + 0x637, 0x645, 0x64a /* offset 5187 */ , + 0x639, 0x62c, 0x645 /* offset 5190 */ , + 0x639, 0x645, 0x645 /* offset 5193 */ , + 0x639, 0x645, 0x649 /* offset 5196 */ , + 0x63a, 0x645, 0x645 /* offset 5199 */ , + 0x63a, 0x645, 0x64a /* offset 5202 */ , + 0x63a, 0x645, 0x649 /* offset 5205 */ , + 0x641, 0x62e, 0x645 /* offset 5208 */ , + 0x642, 0x645, 0x62d /* offset 5211 */ , + 0x642, 0x645, 0x645 /* offset 5214 */ , + 0x644, 0x62d, 0x645 /* offset 5217 */ , + 0x644, 0x62d, 0x64a /* offset 5220 */ , + 0x644, 0x62d, 0x649 /* offset 5223 */ , + 0x644, 0x62c, 0x62c /* offset 5226 */ , + 0x644, 0x62e, 0x645 /* offset 5229 */ , + 0x644, 0x645, 0x62d /* offset 5232 */ , + 0x645, 0x62d, 0x62c /* offset 5235 */ , + 0x645, 0x62d, 0x645 /* offset 5238 */ , + 0x645, 0x62d, 0x64a /* offset 5241 */ , + 0x645, 0x62c, 0x62d /* offset 5244 */ , + 0x645, 0x62c, 0x645 /* offset 5247 */ , + 0x645, 0x62e, 0x62c /* offset 5250 */ , + 0x645, 0x62e, 0x645 /* offset 5253 */ , + 0x645, 0x62c, 0x62e /* offset 5256 */ , + 0x647, 0x645, 0x62c /* offset 5259 */ , + 0x647, 0x645, 0x645 /* offset 5262 */ , + 0x646, 0x62d, 0x645 /* offset 5265 */ , + 0x646, 0x62d, 0x649 /* offset 5268 */ , + 0x646, 0x62c, 0x645 /* offset 5271 */ , + 0x646, 0x62c, 0x649 /* offset 5274 */ , + 0x646, 0x645, 0x64a /* offset 5277 */ , + 0x646, 0x645, 0x649 /* offset 5280 */ , + 0x64a, 0x645, 0x645 /* offset 5283 */ , + 0x628, 0x62e, 0x64a /* offset 5286 */ , + 0x62a, 0x62c, 0x64a /* offset 5289 */ , + 0x62a, 0x62c, 0x649 /* offset 5292 */ , + 0x62a, 0x62e, 0x64a /* offset 5295 */ , + 0x62a, 0x62e, 0x649 /* offset 5298 */ , + 0x62a, 0x645, 0x64a /* offset 5301 */ , + 0x62a, 0x645, 0x649 /* offset 5304 */ , + 0x62c, 0x645, 0x64a /* offset 5307 */ , + 0x62c, 0x62d, 0x649 /* offset 5310 */ , + 0x62c, 0x645, 0x649 /* offset 5313 */ , + 0x633, 0x62e, 0x649 /* offset 5316 */ , + 0x635, 0x62d, 0x64a /* offset 5319 */ , + 0x634, 0x62d, 0x64a /* offset 5322 */ , + 0x636, 0x62d, 0x64a /* offset 5325 */ , + 0x644, 0x62c, 0x64a /* offset 5328 */ , + 0x644, 0x645, 0x64a /* offset 5331 */ , + 0x64a, 0x62d, 0x64a /* offset 5334 */ , + 0x64a, 0x62c, 0x64a /* offset 5337 */ , + 0x64a, 0x645, 0x64a /* offset 5340 */ , + 0x645, 0x645, 0x64a /* offset 5343 */ , + 0x642, 0x645, 0x64a /* offset 5346 */ , + 0x646, 0x62d, 0x64a /* offset 5349 */ , + 0x639, 0x645, 0x64a /* offset 5352 */ , + 0x643, 0x645, 0x64a /* offset 5355 */ , + 0x646, 0x62c, 0x62d /* offset 5358 */ , + 0x645, 0x62e, 0x64a /* offset 5361 */ , + 0x644, 0x62c, 0x645 /* offset 5364 */ , + 0x643, 0x645, 0x645 /* offset 5367 */ , + 0x62c, 0x62d, 0x64a /* offset 5370 */ , + 0x62d, 0x62c, 0x64a /* offset 5373 */ , + 0x645, 0x62c, 0x64a /* offset 5376 */ , + 0x641, 0x645, 0x64a /* offset 5379 */ , + 0x628, 0x62d, 0x64a /* offset 5382 */ , + 0x633, 0x62e, 0x64a /* offset 5385 */ , + 0x646, 0x62c, 0x64a /* offset 5388 */ , + 0x635, 0x644, 0x6d2 /* offset 5391 */ , + 0x642, 0x644, 0x6d2 /* offset 5394 */ , + 0x627, 0x644, 0x644, 0x647 /* offset 5397 */ , + 0x627, 0x643, 0x628, 0x631 /* offset 5401 */ , + 0x645, 0x62d, 0x645, 0x62f /* offset 5405 */ , + 0x635, 0x644, 0x639, 0x645 /* offset 5409 */ , + 0x631, 0x633, 0x648, 0x644 /* offset 5413 */ , + 0x639, 0x644, 0x64a, 0x647 /* offset 5417 */ , + 0x648, 0x633, 0x644, 0x645 /* offset 5421 */ , + 0x635, 0x644, 0x649 /* offset 5425 */ , + 0x635, 0x644, 0x649, 0x20, 0x627, 0x644, 0x644, 0x647, 0x20, 0x639, 0x644, 0x64a, 0x647, 0x20, 0x648, 0x633, 0x644, 0x645 /* offset 5428 */ , + 0x62c, 0x644, 0x20, 0x62c, 0x644, 0x627, 0x644, 0x647 /* offset 5446 */ , + 0x631, 0x6cc, 0x627, 0x644 /* offset 5454 */ , + 0x2014 /* offset 5458 */ , + 0x2013 /* offset 5459 */ , + 0x5f /* offset 5460 */ , + 0x7b /* offset 5461 */ , + 0x7d /* offset 5462 */ , + 0x3014 /* offset 5463 */ , + 0x3015 /* offset 5464 */ , + 0x3010 /* offset 5465 */ , + 0x3011 /* offset 5466 */ , + 0x300a /* offset 5467 */ , + 0x300b /* offset 5468 */ , + 0x300c /* offset 5469 */ , + 0x300d /* offset 5470 */ , + 0x300e /* offset 5471 */ , + 0x300f /* offset 5472 */ , + 0x2c /* offset 5473 */ , + 0x3001 /* offset 5474 */ , + 0x3a /* offset 5475 */ , + 0x3f /* offset 5476 */ , + 0x21 /* offset 5477 */ , + 0x23 /* offset 5478 */ , + 0x26 /* offset 5479 */ , + 0x2a /* offset 5480 */ , + 0x2d /* offset 5481 */ , + 0x3c /* offset 5482 */ , + 0x3e /* offset 5483 */ , + 0x5c /* offset 5484 */ , + 0x24 /* offset 5485 */ , + 0x25 /* offset 5486 */ , + 0x40 /* offset 5487 */ , + 0x20, 0x64b /* offset 5488 */ , + 0x640, 0x64b /* offset 5490 */ , + 0x20, 0x64c /* offset 5492 */ , + 0x20, 0x64d /* offset 5494 */ , + 0x20, 0x64e /* offset 5496 */ , + 0x640, 0x64e /* offset 5498 */ , + 0x20, 0x64f /* offset 5500 */ , + 0x640, 0x64f /* offset 5502 */ , + 0x20, 0x650 /* offset 5504 */ , + 0x640, 0x650 /* offset 5506 */ , + 0x20, 0x651 /* offset 5508 */ , + 0x640, 0x651 /* offset 5510 */ , + 0x20, 0x652 /* offset 5512 */ , + 0x640, 0x652 /* offset 5514 */ , + 0x621 /* offset 5516 */ , + 0x627 /* offset 5517 */ , + 0x628 /* offset 5518 */ , + 0x629 /* offset 5519 */ , + 0x62a /* offset 5520 */ , + 0x62b /* offset 5521 */ , + 0x62c /* offset 5522 */ , + 0x62d /* offset 5523 */ , + 0x62e /* offset 5524 */ , + 0x62f /* offset 5525 */ , + 0x630 /* offset 5526 */ , + 0x631 /* offset 5527 */ , + 0x632 /* offset 5528 */ , + 0x633 /* offset 5529 */ , + 0x634 /* offset 5530 */ , + 0x635 /* offset 5531 */ , + 0x636 /* offset 5532 */ , + 0x637 /* offset 5533 */ , + 0x638 /* offset 5534 */ , + 0x639 /* offset 5535 */ , + 0x63a /* offset 5536 */ , + 0x641 /* offset 5537 */ , + 0x642 /* offset 5538 */ , + 0x643 /* offset 5539 */ , + 0x644 /* offset 5540 */ , + 0x645 /* offset 5541 */ , + 0x646 /* offset 5542 */ , + 0x647 /* offset 5543 */ , + 0x648 /* offset 5544 */ , + 0x64a /* offset 5545 */ , + 0x644, 0x627, 0x653 /* offset 5546 */ , + 0x644, 0x627, 0x654 /* offset 5549 */ , + 0x644, 0x627, 0x655 /* offset 5552 */ , + 0x644, 0x627 /* offset 5555 */ , + 0x22 /* offset 5557 */ , + 0x27 /* offset 5558 */ , + 0x2f /* offset 5559 */ , + 0x5b /* offset 5560 */ , + 0x5d /* offset 5561 */ , + 0x5e /* offset 5562 */ , + 0x7c /* offset 5563 */ , + 0x7e /* offset 5564 */ , + 0x2985 /* offset 5565 */ , + 0x2986 /* offset 5566 */ , + 0x3002 /* offset 5567 */ , + 0x30fb /* offset 5568 */ , + 0x30a1 /* offset 5569 */ , + 0x30a3 /* offset 5570 */ , + 0x30a5 /* offset 5571 */ , + 0x30a7 /* offset 5572 */ , + 0x30a9 /* offset 5573 */ , + 0x30e3 /* offset 5574 */ , + 0x30e5 /* offset 5575 */ , + 0x30e7 /* offset 5576 */ , + 0x30c3 /* offset 5577 */ , + 0x30fc /* offset 5578 */ , + 0x30f3 /* offset 5579 */ , + 0x3099 /* offset 5580 */ , + 0x309a /* offset 5581 */ , + 0xa2 /* offset 5582 */ , + 0xa3 /* offset 5583 */ , + 0xac /* offset 5584 */ , + 0xa6 /* offset 5585 */ , + 0xa5 /* offset 5586 */ , + 0x20a9 /* offset 5587 */ , + 0x2502 /* offset 5588 */ , + 0x2190 /* offset 5589 */ , + 0x2191 /* offset 5590 */ , + 0x2192 /* offset 5591 */ , + 0x2193 /* offset 5592 */ , + 0x25a0 /* offset 5593 */ , + 0x25cb /* offset 5594 */ , + 0x1d157, 0x1d165 /* offset 5595 */ , + 0x1d158, 0x1d165 /* offset 5597 */ , + 0x1d158, 0x1d165, 0x1d16e /* offset 5599 */ , + 0x1d158, 0x1d165, 0x1d16f /* offset 5602 */ , + 0x1d158, 0x1d165, 0x1d170 /* offset 5605 */ , + 0x1d158, 0x1d165, 0x1d171 /* offset 5608 */ , + 0x1d158, 0x1d165, 0x1d172 /* offset 5611 */ , + 0x1d1b9, 0x1d165 /* offset 5614 */ , + 0x1d1ba, 0x1d165 /* offset 5616 */ , + 0x1d1b9, 0x1d165, 0x1d16e /* offset 5618 */ , + 0x1d1ba, 0x1d165, 0x1d16e /* offset 5621 */ , + 0x1d1b9, 0x1d165, 0x1d16f /* offset 5624 */ , + 0x1d1ba, 0x1d165, 0x1d16f /* offset 5627 */ , + 0x391 /* offset 5630 */ , + 0x392 /* offset 5631 */ , + 0x394 /* offset 5632 */ , + 0x395 /* offset 5633 */ , + 0x396 /* offset 5634 */ , + 0x397 /* offset 5635 */ , + 0x399 /* offset 5636 */ , + 0x39a /* offset 5637 */ , + 0x39b /* offset 5638 */ , + 0x39c /* offset 5639 */ , + 0x39d /* offset 5640 */ , + 0x39e /* offset 5641 */ , + 0x39f /* offset 5642 */ , + 0x3a1 /* offset 5643 */ , + 0x3a3 /* offset 5644 */ , + 0x3a4 /* offset 5645 */ , + 0x3a6 /* offset 5646 */ , + 0x3a7 /* offset 5647 */ , + 0x3a8 /* offset 5648 */ , + 0x2207 /* offset 5649 */ , + 0x3b1 /* offset 5650 */ , + 0x3b4 /* offset 5651 */ , + 0x3b6 /* offset 5652 */ , + 0x3b7 /* offset 5653 */ , + 0x3bb /* offset 5654 */ , + 0x3bd /* offset 5655 */ , + 0x3be /* offset 5656 */ , + 0x3bf /* offset 5657 */ , + 0x3c3 /* offset 5658 */ , + 0x3c4 /* offset 5659 */ , + 0x3c5 /* offset 5660 */ , + 0x3c7 /* offset 5661 */ , + 0x3c8 /* offset 5662 */ , + 0x3c9 /* offset 5663 */ , + 0x2202 /* offset 5664 */ , + 0x4e3d /* offset 5665 */ , + 0x4e38 /* offset 5666 */ , + 0x4e41 /* offset 5667 */ , + 0x20122 /* offset 5668 */ , + 0x4f60 /* offset 5669 */ , + 0x4fbb /* offset 5670 */ , + 0x5002 /* offset 5671 */ , + 0x507a /* offset 5672 */ , + 0x5099 /* offset 5673 */ , + 0x50cf /* offset 5674 */ , + 0x349e /* offset 5675 */ , + 0x2063a /* offset 5676 */ , + 0x5154 /* offset 5677 */ , + 0x5164 /* offset 5678 */ , + 0x5177 /* offset 5679 */ , + 0x2051c /* offset 5680 */ , + 0x34b9 /* offset 5681 */ , + 0x5167 /* offset 5682 */ , + 0x518d /* offset 5683 */ , + 0x2054b /* offset 5684 */ , + 0x5197 /* offset 5685 */ , + 0x51a4 /* offset 5686 */ , + 0x4ecc /* offset 5687 */ , + 0x51ac /* offset 5688 */ , + 0x51b5 /* offset 5689 */ , + 0x291df /* offset 5690 */ , + 0x5203 /* offset 5691 */ , + 0x34df /* offset 5692 */ , + 0x523b /* offset 5693 */ , + 0x5246 /* offset 5694 */ , + 0x5272 /* offset 5695 */ , + 0x5277 /* offset 5696 */ , + 0x3515 /* offset 5697 */ , + 0x52c7 /* offset 5698 */ , + 0x52fa /* offset 5699 */ , + 0x5305 /* offset 5700 */ , + 0x5306 /* offset 5701 */ , + 0x5349 /* offset 5702 */ , + 0x535a /* offset 5703 */ , + 0x5373 /* offset 5704 */ , + 0x537d /* offset 5705 */ , + 0x537f /* offset 5706 */ , + 0x20a2c /* offset 5707 */ , + 0x7070 /* offset 5708 */ , + 0x53ca /* offset 5709 */ , + 0x53df /* offset 5710 */ , + 0x20b63 /* offset 5711 */ , + 0x53eb /* offset 5712 */ , + 0x53f1 /* offset 5713 */ , + 0x5406 /* offset 5714 */ , + 0x549e /* offset 5715 */ , + 0x5438 /* offset 5716 */ , + 0x5448 /* offset 5717 */ , + 0x5468 /* offset 5718 */ , + 0x54a2 /* offset 5719 */ , + 0x54f6 /* offset 5720 */ , + 0x5510 /* offset 5721 */ , + 0x5553 /* offset 5722 */ , + 0x5563 /* offset 5723 */ , + 0x5584 /* offset 5724 */ , + 0x5599 /* offset 5725 */ , + 0x55ab /* offset 5726 */ , + 0x55b3 /* offset 5727 */ , + 0x55c2 /* offset 5728 */ , + 0x5716 /* offset 5729 */ , + 0x5717 /* offset 5730 */ , + 0x5651 /* offset 5731 */ , + 0x5674 /* offset 5732 */ , + 0x58ee /* offset 5733 */ , + 0x57ce /* offset 5734 */ , + 0x57f4 /* offset 5735 */ , + 0x580d /* offset 5736 */ , + 0x578b /* offset 5737 */ , + 0x5832 /* offset 5738 */ , + 0x5831 /* offset 5739 */ , + 0x58ac /* offset 5740 */ , + 0x214e4 /* offset 5741 */ , + 0x58f2 /* offset 5742 */ , + 0x58f7 /* offset 5743 */ , + 0x5906 /* offset 5744 */ , + 0x591a /* offset 5745 */ , + 0x5922 /* offset 5746 */ , + 0x5962 /* offset 5747 */ , + 0x216a8 /* offset 5748 */ , + 0x216ea /* offset 5749 */ , + 0x59ec /* offset 5750 */ , + 0x5a1b /* offset 5751 */ , + 0x5a27 /* offset 5752 */ , + 0x59d8 /* offset 5753 */ , + 0x5a66 /* offset 5754 */ , + 0x36ee /* offset 5755 */ , + 0x2136a /* offset 5756 */ , + 0x5b08 /* offset 5757 */ , + 0x5b3e /* offset 5758 */ , + 0x219c8 /* offset 5759 */ , + 0x5bc3 /* offset 5760 */ , + 0x5bd8 /* offset 5761 */ , + 0x5bf3 /* offset 5762 */ , + 0x21b18 /* offset 5763 */ , + 0x5bff /* offset 5764 */ , + 0x5c06 /* offset 5765 */ , + 0x5f33 /* offset 5766 */ , + 0x3781 /* offset 5767 */ , + 0x5c60 /* offset 5768 */ , + 0x5cc0 /* offset 5769 */ , + 0x5c8d /* offset 5770 */ , + 0x21de4 /* offset 5771 */ , + 0x5d43 /* offset 5772 */ , + 0x21de6 /* offset 5773 */ , + 0x5d6e /* offset 5774 */ , + 0x5d6b /* offset 5775 */ , + 0x5d7c /* offset 5776 */ , + 0x5de1 /* offset 5777 */ , + 0x5de2 /* offset 5778 */ , + 0x382f /* offset 5779 */ , + 0x5dfd /* offset 5780 */ , + 0x5e28 /* offset 5781 */ , + 0x5e3d /* offset 5782 */ , + 0x5e69 /* offset 5783 */ , + 0x3862 /* offset 5784 */ , + 0x22183 /* offset 5785 */ , + 0x387c /* offset 5786 */ , + 0x5eb0 /* offset 5787 */ , + 0x5eb3 /* offset 5788 */ , + 0x5eb6 /* offset 5789 */ , + 0x2a392 /* offset 5790 */ , + 0x22331 /* offset 5791 */ , + 0x8201 /* offset 5792 */ , + 0x5f22 /* offset 5793 */ , + 0x38c7 /* offset 5794 */ , + 0x232b8 /* offset 5795 */ , + 0x261da /* offset 5796 */ , + 0x5f62 /* offset 5797 */ , + 0x5f6b /* offset 5798 */ , + 0x38e3 /* offset 5799 */ , + 0x5f9a /* offset 5800 */ , + 0x5fcd /* offset 5801 */ , + 0x5fd7 /* offset 5802 */ , + 0x5ff9 /* offset 5803 */ , + 0x6081 /* offset 5804 */ , + 0x393a /* offset 5805 */ , + 0x391c /* offset 5806 */ , + 0x226d4 /* offset 5807 */ , + 0x60c7 /* offset 5808 */ , + 0x6148 /* offset 5809 */ , + 0x614c /* offset 5810 */ , + 0x614e /* offset 5811 */ , + 0x617a /* offset 5812 */ , + 0x61b2 /* offset 5813 */ , + 0x61a4 /* offset 5814 */ , + 0x61af /* offset 5815 */ , + 0x61de /* offset 5816 */ , + 0x6210 /* offset 5817 */ , + 0x621b /* offset 5818 */ , + 0x625d /* offset 5819 */ , + 0x62b1 /* offset 5820 */ , + 0x62d4 /* offset 5821 */ , + 0x6350 /* offset 5822 */ , + 0x22b0c /* offset 5823 */ , + 0x633d /* offset 5824 */ , + 0x62fc /* offset 5825 */ , + 0x6368 /* offset 5826 */ , + 0x6383 /* offset 5827 */ , + 0x63e4 /* offset 5828 */ , + 0x22bf1 /* offset 5829 */ , + 0x6422 /* offset 5830 */ , + 0x63c5 /* offset 5831 */ , + 0x63a9 /* offset 5832 */ , + 0x3a2e /* offset 5833 */ , + 0x6469 /* offset 5834 */ , + 0x647e /* offset 5835 */ , + 0x649d /* offset 5836 */ , + 0x6477 /* offset 5837 */ , + 0x3a6c /* offset 5838 */ , + 0x656c /* offset 5839 */ , + 0x2300a /* offset 5840 */ , + 0x65e3 /* offset 5841 */ , + 0x66f8 /* offset 5842 */ , + 0x6649 /* offset 5843 */ , + 0x3b19 /* offset 5844 */ , + 0x3b08 /* offset 5845 */ , + 0x3ae4 /* offset 5846 */ , + 0x5192 /* offset 5847 */ , + 0x5195 /* offset 5848 */ , + 0x6700 /* offset 5849 */ , + 0x669c /* offset 5850 */ , + 0x80ad /* offset 5851 */ , + 0x43d9 /* offset 5852 */ , + 0x671b /* offset 5853 */ , + 0x6721 /* offset 5854 */ , + 0x675e /* offset 5855 */ , + 0x6753 /* offset 5856 */ , + 0x233c3 /* offset 5857 */ , + 0x3b49 /* offset 5858 */ , + 0x67fa /* offset 5859 */ , + 0x6785 /* offset 5860 */ , + 0x6852 /* offset 5861 */ , + 0x2346d /* offset 5862 */ , + 0x688e /* offset 5863 */ , + 0x681f /* offset 5864 */ , + 0x6914 /* offset 5865 */ , + 0x3b9d /* offset 5866 */ , + 0x6942 /* offset 5867 */ , + 0x69a3 /* offset 5868 */ , + 0x69ea /* offset 5869 */ , + 0x6aa8 /* offset 5870 */ , + 0x236a3 /* offset 5871 */ , + 0x6adb /* offset 5872 */ , + 0x3c18 /* offset 5873 */ , + 0x6b21 /* offset 5874 */ , + 0x238a7 /* offset 5875 */ , + 0x6b54 /* offset 5876 */ , + 0x3c4e /* offset 5877 */ , + 0x6b72 /* offset 5878 */ , + 0x6b9f /* offset 5879 */ , + 0x6bbb /* offset 5880 */ , + 0x23a8d /* offset 5881 */ , + 0x21d0b /* offset 5882 */ , + 0x23afa /* offset 5883 */ , + 0x6c4e /* offset 5884 */ , + 0x23cbc /* offset 5885 */ , + 0x6cbf /* offset 5886 */ , + 0x6ccd /* offset 5887 */ , + 0x6c67 /* offset 5888 */ , + 0x6d16 /* offset 5889 */ , + 0x6d3e /* offset 5890 */ , + 0x6d69 /* offset 5891 */ , + 0x6d78 /* offset 5892 */ , + 0x6d85 /* offset 5893 */ , + 0x23d1e /* offset 5894 */ , + 0x6d34 /* offset 5895 */ , + 0x6e2f /* offset 5896 */ , + 0x6e6e /* offset 5897 */ , + 0x3d33 /* offset 5898 */ , + 0x6ecb /* offset 5899 */ , + 0x6ec7 /* offset 5900 */ , + 0x23ed1 /* offset 5901 */ , + 0x6df9 /* offset 5902 */ , + 0x6f6e /* offset 5903 */ , + 0x23f5e /* offset 5904 */ , + 0x23f8e /* offset 5905 */ , + 0x6fc6 /* offset 5906 */ , + 0x7039 /* offset 5907 */ , + 0x701e /* offset 5908 */ , + 0x701b /* offset 5909 */ , + 0x3d96 /* offset 5910 */ , + 0x704a /* offset 5911 */ , + 0x707d /* offset 5912 */ , + 0x7077 /* offset 5913 */ , + 0x70ad /* offset 5914 */ , + 0x20525 /* offset 5915 */ , + 0x7145 /* offset 5916 */ , + 0x24263 /* offset 5917 */ , + 0x719c /* offset 5918 */ , + 0x43ab /* offset 5919 */ , + 0x7228 /* offset 5920 */ , + 0x7235 /* offset 5921 */ , + 0x7250 /* offset 5922 */ , + 0x24608 /* offset 5923 */ , + 0x7280 /* offset 5924 */ , + 0x7295 /* offset 5925 */ , + 0x24735 /* offset 5926 */ , + 0x24814 /* offset 5927 */ , + 0x737a /* offset 5928 */ , + 0x738b /* offset 5929 */ , + 0x3eac /* offset 5930 */ , + 0x73a5 /* offset 5931 */ , + 0x3eb8 /* offset 5932 */ , + 0x7447 /* offset 5933 */ , + 0x745c /* offset 5934 */ , + 0x7471 /* offset 5935 */ , + 0x7485 /* offset 5936 */ , + 0x74ca /* offset 5937 */ , + 0x3f1b /* offset 5938 */ , + 0x7524 /* offset 5939 */ , + 0x24c36 /* offset 5940 */ , + 0x753e /* offset 5941 */ , + 0x24c92 /* offset 5942 */ , + 0x2219f /* offset 5943 */ , + 0x7610 /* offset 5944 */ , + 0x24fa1 /* offset 5945 */ , + 0x24fb8 /* offset 5946 */ , + 0x25044 /* offset 5947 */ , + 0x3ffc /* offset 5948 */ , + 0x4008 /* offset 5949 */ , + 0x76f4 /* offset 5950 */ , + 0x250f3 /* offset 5951 */ , + 0x250f2 /* offset 5952 */ , + 0x25119 /* offset 5953 */ , + 0x25133 /* offset 5954 */ , + 0x771e /* offset 5955 */ , + 0x771f /* offset 5956 */ , + 0x774a /* offset 5957 */ , + 0x4039 /* offset 5958 */ , + 0x778b /* offset 5959 */ , + 0x4046 /* offset 5960 */ , + 0x4096 /* offset 5961 */ , + 0x2541d /* offset 5962 */ , + 0x784e /* offset 5963 */ , + 0x78cc /* offset 5964 */ , + 0x40e3 /* offset 5965 */ , + 0x25626 /* offset 5966 */ , + 0x2569a /* offset 5967 */ , + 0x256c5 /* offset 5968 */ , + 0x79eb /* offset 5969 */ , + 0x412f /* offset 5970 */ , + 0x7a4a /* offset 5971 */ , + 0x7a4f /* offset 5972 */ , + 0x2597c /* offset 5973 */ , + 0x25aa7 /* offset 5974 */ , + 0x7aae /* offset 5975 */ , + 0x4202 /* offset 5976 */ , + 0x25bab /* offset 5977 */ , + 0x7bc6 /* offset 5978 */ , + 0x7bc9 /* offset 5979 */ , + 0x4227 /* offset 5980 */ , + 0x25c80 /* offset 5981 */ , + 0x7cd2 /* offset 5982 */ , + 0x42a0 /* offset 5983 */ , + 0x7ce8 /* offset 5984 */ , + 0x7ce3 /* offset 5985 */ , + 0x7d00 /* offset 5986 */ , + 0x25f86 /* offset 5987 */ , + 0x7d63 /* offset 5988 */ , + 0x4301 /* offset 5989 */ , + 0x7dc7 /* offset 5990 */ , + 0x7e02 /* offset 5991 */ , + 0x7e45 /* offset 5992 */ , + 0x4334 /* offset 5993 */ , + 0x26228 /* offset 5994 */ , + 0x26247 /* offset 5995 */ , + 0x4359 /* offset 5996 */ , + 0x262d9 /* offset 5997 */ , + 0x7f7a /* offset 5998 */ , + 0x2633e /* offset 5999 */ , + 0x7f95 /* offset 6000 */ , + 0x7ffa /* offset 6001 */ , + 0x264da /* offset 6002 */ , + 0x26523 /* offset 6003 */ , + 0x8060 /* offset 6004 */ , + 0x265a8 /* offset 6005 */ , + 0x8070 /* offset 6006 */ , + 0x2335f /* offset 6007 */ , + 0x43d5 /* offset 6008 */ , + 0x80b2 /* offset 6009 */ , + 0x8103 /* offset 6010 */ , + 0x440b /* offset 6011 */ , + 0x813e /* offset 6012 */ , + 0x5ab5 /* offset 6013 */ , + 0x267a7 /* offset 6014 */ , + 0x267b5 /* offset 6015 */ , + 0x23393 /* offset 6016 */ , + 0x2339c /* offset 6017 */ , + 0x8204 /* offset 6018 */ , + 0x8f9e /* offset 6019 */ , + 0x446b /* offset 6020 */ , + 0x8291 /* offset 6021 */ , + 0x828b /* offset 6022 */ , + 0x829d /* offset 6023 */ , + 0x52b3 /* offset 6024 */ , + 0x82b1 /* offset 6025 */ , + 0x82b3 /* offset 6026 */ , + 0x82bd /* offset 6027 */ , + 0x82e6 /* offset 6028 */ , + 0x26b3c /* offset 6029 */ , + 0x831d /* offset 6030 */ , + 0x8363 /* offset 6031 */ , + 0x83ad /* offset 6032 */ , + 0x8323 /* offset 6033 */ , + 0x83bd /* offset 6034 */ , + 0x83e7 /* offset 6035 */ , + 0x8353 /* offset 6036 */ , + 0x83ca /* offset 6037 */ , + 0x83cc /* offset 6038 */ , + 0x83dc /* offset 6039 */ , + 0x26c36 /* offset 6040 */ , + 0x26d6b /* offset 6041 */ , + 0x26cd5 /* offset 6042 */ , + 0x452b /* offset 6043 */ , + 0x84f1 /* offset 6044 */ , + 0x84f3 /* offset 6045 */ , + 0x8516 /* offset 6046 */ , + 0x273ca /* offset 6047 */ , + 0x8564 /* offset 6048 */ , + 0x26f2c /* offset 6049 */ , + 0x455d /* offset 6050 */ , + 0x4561 /* offset 6051 */ , + 0x26fb1 /* offset 6052 */ , + 0x270d2 /* offset 6053 */ , + 0x456b /* offset 6054 */ , + 0x8650 /* offset 6055 */ , + 0x8667 /* offset 6056 */ , + 0x8669 /* offset 6057 */ , + 0x86a9 /* offset 6058 */ , + 0x8688 /* offset 6059 */ , + 0x870e /* offset 6060 */ , + 0x86e2 /* offset 6061 */ , + 0x8779 /* offset 6062 */ , + 0x8728 /* offset 6063 */ , + 0x876b /* offset 6064 */ , + 0x8786 /* offset 6065 */ , + 0x4d57 /* offset 6066 */ , + 0x87e1 /* offset 6067 */ , + 0x8801 /* offset 6068 */ , + 0x45f9 /* offset 6069 */ , + 0x8860 /* offset 6070 */ , + 0x27667 /* offset 6071 */ , + 0x88d7 /* offset 6072 */ , + 0x88de /* offset 6073 */ , + 0x4635 /* offset 6074 */ , + 0x88fa /* offset 6075 */ , + 0x34bb /* offset 6076 */ , + 0x278ae /* offset 6077 */ , + 0x27966 /* offset 6078 */ , + 0x46be /* offset 6079 */ , + 0x46c7 /* offset 6080 */ , + 0x8aa0 /* offset 6081 */ , + 0x8aed /* offset 6082 */ , + 0x8b8a /* offset 6083 */ , + 0x27ca8 /* offset 6084 */ , + 0x8cab /* offset 6085 */ , + 0x8cc1 /* offset 6086 */ , + 0x8d1b /* offset 6087 */ , + 0x8d77 /* offset 6088 */ , + 0x27f2f /* offset 6089 */ , + 0x20804 /* offset 6090 */ , + 0x8dcb /* offset 6091 */ , + 0x8dbc /* offset 6092 */ , + 0x8df0 /* offset 6093 */ , + 0x208de /* offset 6094 */ , + 0x8ed4 /* offset 6095 */ , + 0x8f38 /* offset 6096 */ , + 0x285d2 /* offset 6097 */ , + 0x285ed /* offset 6098 */ , + 0x9094 /* offset 6099 */ , + 0x90f1 /* offset 6100 */ , + 0x9111 /* offset 6101 */ , + 0x2872e /* offset 6102 */ , + 0x911b /* offset 6103 */ , + 0x9238 /* offset 6104 */ , + 0x92d7 /* offset 6105 */ , + 0x92d8 /* offset 6106 */ , + 0x927c /* offset 6107 */ , + 0x93f9 /* offset 6108 */ , + 0x9415 /* offset 6109 */ , + 0x28bfa /* offset 6110 */ , + 0x958b /* offset 6111 */ , + 0x4995 /* offset 6112 */ , + 0x95b7 /* offset 6113 */ , + 0x28d77 /* offset 6114 */ , + 0x49e6 /* offset 6115 */ , + 0x96c3 /* offset 6116 */ , + 0x5db2 /* offset 6117 */ , + 0x9723 /* offset 6118 */ , + 0x29145 /* offset 6119 */ , + 0x2921a /* offset 6120 */ , + 0x4a6e /* offset 6121 */ , + 0x4a76 /* offset 6122 */ , + 0x97e0 /* offset 6123 */ , + 0x2940a /* offset 6124 */ , + 0x4ab2 /* offset 6125 */ , + 0x29496 /* offset 6126 */ , + 0x980b /* offset 6127 */ , + 0x9829 /* offset 6128 */ , + 0x295b6 /* offset 6129 */ , + 0x98e2 /* offset 6130 */ , + 0x4b33 /* offset 6131 */ , + 0x9929 /* offset 6132 */ , + 0x99a7 /* offset 6133 */ , + 0x99c2 /* offset 6134 */ , + 0x99fe /* offset 6135 */ , + 0x4bce /* offset 6136 */ , + 0x29b30 /* offset 6137 */ , + 0x9b12 /* offset 6138 */ , + 0x9c40 /* offset 6139 */ , + 0x9cfd /* offset 6140 */ , + 0x4cce /* offset 6141 */ , + 0x4ced /* offset 6142 */ , + 0x9d67 /* offset 6143 */ , + 0x2a0ce /* offset 6144 */ , + 0x4cf8 /* offset 6145 */ , + 0x2a105 /* offset 6146 */ , + 0x2a20e /* offset 6147 */ , + 0x2a291 /* offset 6148 */ , + 0x4d56 /* offset 6149 */ , + 0x9efe /* offset 6150 */ , + 0x9f05 /* offset 6151 */ , + 0x9f0f /* offset 6152 */ , + 0x9f16 /* offset 6153 */ , + 0x2a600 /* offset 6154 */ +}; + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeMap.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeMap.cc new file mode 100644 index 00000000000..fda0758bc00 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeMap.cc @@ -0,0 +1,308 @@ +//======================================================================== +// +// UnicodeMap.cc +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2010 Jakub Wilk <ubanus@users.sf.net> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdio.h> +#include <string.h> +#include "goo/gmem.h" +#include "goo/gfile.h" +#include "goo/GooString.h" +#include "goo/GooList.h" +#include "Error.h" +#include "GlobalParams.h" +#include "UnicodeMap.h" + +//------------------------------------------------------------------------ + +#define maxExtCode 16 + +struct UnicodeMapExt { + Unicode u; // Unicode char + char code[maxExtCode]; + Guint nBytes; +}; + +//------------------------------------------------------------------------ + +UnicodeMap *UnicodeMap::parse(GooString *encodingNameA) { + FILE *f; + UnicodeMap *map; + UnicodeMapRange *range; + UnicodeMapExt *eMap; + int size, eMapsSize; + char buf[256]; + int line, nBytes, i, x; + char *tok1, *tok2, *tok3; + char *tokptr; + + if (!(f = globalParams->getUnicodeMapFile(encodingNameA))) { + error(-1, "Couldn't find unicodeMap file for the '%s' encoding", + encodingNameA->getCString()); + return NULL; + } + + map = new UnicodeMap(encodingNameA->copy()); + + size = 8; + map->ranges = (UnicodeMapRange *)gmallocn(size, sizeof(UnicodeMapRange)); + eMapsSize = 0; + + line = 1; + while (getLine(buf, sizeof(buf), f)) { + if ((tok1 = strtok_r(buf, " \t\r\n", &tokptr)) && + (tok2 = strtok_r(NULL, " \t\r\n", &tokptr))) { + if (!(tok3 = strtok_r(NULL, " \t\r\n", &tokptr))) { + tok3 = tok2; + tok2 = tok1; + } + nBytes = strlen(tok3) / 2; + if (nBytes <= 4) { + if (map->len == size) { + size *= 2; + map->ranges = (UnicodeMapRange *) + greallocn(map->ranges, size, sizeof(UnicodeMapRange)); + } + range = &map->ranges[map->len]; + sscanf(tok1, "%x", &range->start); + sscanf(tok2, "%x", &range->end); + sscanf(tok3, "%x", &range->code); + range->nBytes = nBytes; + ++map->len; + } else if (tok2 == tok1) { + if (map->eMapsLen == eMapsSize) { + eMapsSize += 16; + map->eMaps = (UnicodeMapExt *) + greallocn(map->eMaps, eMapsSize, sizeof(UnicodeMapExt)); + } + eMap = &map->eMaps[map->eMapsLen]; + sscanf(tok1, "%x", &eMap->u); + for (i = 0; i < nBytes; ++i) { + sscanf(tok3 + i*2, "%2x", &x); + eMap->code[i] = (char)x; + } + eMap->nBytes = nBytes; + ++map->eMapsLen; + } else { + error(-1, "Bad line (%d) in unicodeMap file for the '%s' encoding", + line, encodingNameA->getCString()); + } + } else { + error(-1, "Bad line (%d) in unicodeMap file for the '%s' encoding", + line, encodingNameA->getCString()); + } + ++line; + } + + fclose(f); + + return map; +} + +UnicodeMap::UnicodeMap(GooString *encodingNameA) { + encodingName = encodingNameA; + unicodeOut = gFalse; + kind = unicodeMapUser; + ranges = NULL; + len = 0; + eMaps = NULL; + eMapsLen = 0; + refCnt = 1; +#if MULTITHREADED + gInitMutex(&mutex); +#endif +} + +UnicodeMap::UnicodeMap(char *encodingNameA, GBool unicodeOutA, + UnicodeMapRange *rangesA, int lenA) { + encodingName = new GooString(encodingNameA); + unicodeOut = unicodeOutA; + kind = unicodeMapResident; + ranges = rangesA; + len = lenA; + eMaps = NULL; + eMapsLen = 0; + refCnt = 1; +#if MULTITHREADED + gInitMutex(&mutex); +#endif +} + +UnicodeMap::UnicodeMap(char *encodingNameA, GBool unicodeOutA, + UnicodeMapFunc funcA) { + encodingName = new GooString(encodingNameA); + unicodeOut = unicodeOutA; + kind = unicodeMapFunc; + func = funcA; + eMaps = NULL; + eMapsLen = 0; + refCnt = 1; +#if MULTITHREADED + gInitMutex(&mutex); +#endif +} + +UnicodeMap::~UnicodeMap() { + delete encodingName; + if (kind == unicodeMapUser && ranges) { + gfree(ranges); + } + if (eMaps) { + gfree(eMaps); + } +#if MULTITHREADED + gDestroyMutex(&mutex); +#endif +} + +void UnicodeMap::incRefCnt() { +#if MULTITHREADED + gLockMutex(&mutex); +#endif + ++refCnt; +#if MULTITHREADED + gUnlockMutex(&mutex); +#endif +} + +void UnicodeMap::decRefCnt() { + GBool done; + +#if MULTITHREADED + gLockMutex(&mutex); +#endif + done = --refCnt == 0; +#if MULTITHREADED + gUnlockMutex(&mutex); +#endif + if (done) { + delete this; + } +} + +GBool UnicodeMap::match(GooString *encodingNameA) { + return !encodingName->cmp(encodingNameA); +} + +int UnicodeMap::mapUnicode(Unicode u, char *buf, int bufSize) { + int a, b, m, n, i, j; + Guint code; + + if (kind == unicodeMapFunc) { + return (*func)(u, buf, bufSize); + } + + a = 0; + b = len; + if (u >= ranges[a].start) { + // invariant: ranges[a].start <= u < ranges[b].start + while (b - a > 1) { + m = (a + b) / 2; + if (u >= ranges[m].start) { + a = m; + } else if (u < ranges[m].start) { + b = m; + } + } + if (u <= ranges[a].end) { + n = ranges[a].nBytes; + if (n > bufSize) { + return 0; + } + code = ranges[a].code + (u - ranges[a].start); + for (i = n - 1; i >= 0; --i) { + buf[i] = (char)(code & 0xff); + code >>= 8; + } + return n; + } + } + + for (i = 0; i < eMapsLen; ++i) { + if (eMaps[i].u == u) { + n = eMaps[i].nBytes; + for (j = 0; j < n; ++j) { + buf[j] = eMaps[i].code[j]; + } + return n; + } + } + + return 0; +} + +//------------------------------------------------------------------------ + +UnicodeMapCache::UnicodeMapCache() { + int i; + + for (i = 0; i < unicodeMapCacheSize; ++i) { + cache[i] = NULL; + } +} + +UnicodeMapCache::~UnicodeMapCache() { + int i; + + for (i = 0; i < unicodeMapCacheSize; ++i) { + if (cache[i]) { + cache[i]->decRefCnt(); + } + } +} + +UnicodeMap *UnicodeMapCache::getUnicodeMap(GooString *encodingName) { + UnicodeMap *map; + int i, j; + + if (cache[0] && cache[0]->match(encodingName)) { + cache[0]->incRefCnt(); + return cache[0]; + } + for (i = 1; i < unicodeMapCacheSize; ++i) { + if (cache[i] && cache[i]->match(encodingName)) { + map = cache[i]; + for (j = i; j >= 1; --j) { + cache[j] = cache[j - 1]; + } + cache[0] = map; + map->incRefCnt(); + return map; + } + } + if ((map = UnicodeMap::parse(encodingName))) { + if (cache[unicodeMapCacheSize - 1]) { + cache[unicodeMapCacheSize - 1]->decRefCnt(); + } + for (j = unicodeMapCacheSize - 1; j >= 1; --j) { + cache[j] = cache[j - 1]; + } + cache[0] = map; + map->incRefCnt(); + return map; + } + return NULL; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeMap.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeMap.h new file mode 100644 index 00000000000..6f031634e03 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeMap.h @@ -0,0 +1,122 @@ +//======================================================================== +// +// UnicodeMap.h +// +// Mapping from Unicode to an encoding. +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef UNICODEMAP_H +#define UNICODEMAP_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "poppler-config.h" +#include "goo/gtypes.h" +#include "CharTypes.h" + +#if MULTITHREADED +#include "goo/GooMutex.h" +#endif + +class GooString; + +//------------------------------------------------------------------------ + +enum UnicodeMapKind { + unicodeMapUser, // read from a file + unicodeMapResident, // static list of ranges + unicodeMapFunc // function pointer +}; + +typedef int (*UnicodeMapFunc)(Unicode u, char *buf, int bufSize); + +struct UnicodeMapRange { + Unicode start, end; // range of Unicode chars + Guint code, nBytes; // first output code +}; + +struct UnicodeMapExt; + +//------------------------------------------------------------------------ + +class UnicodeMap { +public: + + // Create the UnicodeMap specified by <encodingName>. Sets the + // initial reference count to 1. Returns NULL on failure. + static UnicodeMap *parse(GooString *encodingNameA); + + // Create a resident UnicodeMap. + UnicodeMap(char *encodingNameA, GBool unicodeOutA, + UnicodeMapRange *rangesA, int lenA); + + // Create a resident UnicodeMap that uses a function instead of a + // list of ranges. + UnicodeMap(char *encodingNameA, GBool unicodeOutA, + UnicodeMapFunc funcA); + + ~UnicodeMap(); + + void incRefCnt(); + void decRefCnt(); + + GooString *getEncodingName() { return encodingName; } + + GBool isUnicode() { return unicodeOut; } + + // Return true if this UnicodeMap matches the specified + // <encodingNameA>. + GBool match(GooString *encodingNameA); + + // Map Unicode to the target encoding. Fills in <buf> with the + // output and returns the number of bytes used. Output will be + // truncated at <bufSize> bytes. No string terminator is written. + // Returns 0 if no mapping is found. + int mapUnicode(Unicode u, char *buf, int bufSize); + +private: + + UnicodeMap(GooString *encodingNameA); + + GooString *encodingName; + UnicodeMapKind kind; + GBool unicodeOut; + union { + UnicodeMapRange *ranges; // (user, resident) + UnicodeMapFunc func; // (func) + }; + int len; // (user, resident) + UnicodeMapExt *eMaps; // (user) + int eMapsLen; // (user) + int refCnt; +#if MULTITHREADED + GooMutex mutex; +#endif +}; + +//------------------------------------------------------------------------ + +#define unicodeMapCacheSize 4 + +class UnicodeMapCache { +public: + + UnicodeMapCache(); + ~UnicodeMapCache(); + + // Get the UnicodeMap for <encodingName>. Increments its reference + // count; there will be one reference for the cache plus one for the + // caller of this function. Returns NULL on failure. + UnicodeMap *getUnicodeMap(GooString *encodingName); + +private: + + UnicodeMap *cache[unicodeMapCacheSize]; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeMapTables.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeMapTables.h new file mode 100644 index 00000000000..9c510346164 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeMapTables.h @@ -0,0 +1,361 @@ +//======================================================================== +// +// UnicodeMapTables.h +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +static UnicodeMapRange latin1UnicodeMapRanges[] = { + { 0x000a, 0x000a, 0x0a, 1 }, + { 0x000c, 0x000d, 0x0c, 1 }, + { 0x0020, 0x007e, 0x20, 1 }, + { 0x00a0, 0x00a0, 0x20, 1 }, + { 0x00a1, 0x00ac, 0xa1, 1 }, + { 0x00ae, 0x00ff, 0xae, 1 }, + { 0x010c, 0x010c, 0x43, 1 }, + { 0x010d, 0x010d, 0x63, 1 }, + { 0x0131, 0x0131, 0x69, 1 }, + { 0x0141, 0x0141, 0x4c, 1 }, + { 0x0142, 0x0142, 0x6c, 1 }, + { 0x0152, 0x0152, 0x4f45, 2 }, + { 0x0153, 0x0153, 0x6f65, 2 }, + { 0x0160, 0x0160, 0x53, 1 }, + { 0x0161, 0x0161, 0x73, 1 }, + { 0x0178, 0x0178, 0x59, 1 }, + { 0x017d, 0x017d, 0x5a, 1 }, + { 0x017e, 0x017e, 0x7a, 1 }, + { 0x02c6, 0x02c6, 0x5e, 1 }, + { 0x02da, 0x02da, 0xb0, 1 }, + { 0x02dc, 0x02dc, 0x7e, 1 }, + { 0x2013, 0x2013, 0xad, 1 }, + { 0x2014, 0x2014, 0x2d2d, 2 }, + { 0x2018, 0x2018, 0x60, 1 }, + { 0x2019, 0x2019, 0x27, 1 }, + { 0x201a, 0x201a, 0x2c, 1 }, + { 0x201c, 0x201c, 0x22, 1 }, + { 0x201d, 0x201d, 0x22, 1 }, + { 0x201e, 0x201e, 0x2c2c, 2 }, + { 0x2022, 0x2022, 0xb7, 1 }, + { 0x2026, 0x2026, 0x2e2e2e, 3 }, + { 0x2039, 0x2039, 0x3c, 1 }, + { 0x203a, 0x203a, 0x3e, 1 }, + { 0x2044, 0x2044, 0x2f, 1 }, + { 0x2122, 0x2122, 0x544d, 2 }, + { 0x2212, 0x2212, 0x2d, 1 }, + { 0xf6f9, 0xf6f9, 0x4c, 1 }, + { 0xf6fa, 0xf6fa, 0x4f45, 2 }, + { 0xf6fc, 0xf6fc, 0xb0, 1 }, + { 0xf6fd, 0xf6fd, 0x53, 1 }, + { 0xf6fe, 0xf6fe, 0x7e, 1 }, + { 0xf6ff, 0xf6ff, 0x5a, 1 }, + { 0xf721, 0xf721, 0x21, 1 }, + { 0xf724, 0xf724, 0x24, 1 }, + { 0xf726, 0xf726, 0x26, 1 }, + { 0xf730, 0xf739, 0x30, 1 }, + { 0xf73f, 0xf73f, 0x3f, 1 }, + { 0xf761, 0xf77a, 0x41, 1 }, + { 0xf7a1, 0xf7a2, 0xa1, 1 }, + { 0xf7bf, 0xf7bf, 0xbf, 1 }, + { 0xf7e0, 0xf7f6, 0xc0, 1 }, + { 0xf7f8, 0xf7fe, 0xd8, 1 }, + { 0xf7ff, 0xf7ff, 0x59, 1 }, + { 0xfb00, 0xfb00, 0x6666, 2 }, + { 0xfb01, 0xfb01, 0x6669, 2 }, + { 0xfb02, 0xfb02, 0x666c, 2 }, + { 0xfb03, 0xfb03, 0x666669, 3 }, + { 0xfb04, 0xfb04, 0x66666c, 3 } +}; +#define latin1UnicodeMapLen (sizeof(latin1UnicodeMapRanges) / sizeof(UnicodeMapRange)) + +static UnicodeMapRange ascii7UnicodeMapRanges[] = { + { 0x000a, 0x000a, 0x0a, 1 }, + { 0x000c, 0x000d, 0x0c, 1 }, + { 0x0020, 0x005f, 0x20, 1 }, + { 0x0061, 0x007e, 0x61, 1 }, + { 0x00a6, 0x00a6, 0x7c, 1 }, + { 0x00a9, 0x00a9, 0x286329, 3 }, + { 0x00ae, 0x00ae, 0x285229, 3 }, + { 0x00b7, 0x00b7, 0x2a, 1 }, + { 0x00bc, 0x00bc, 0x312f34, 3 }, + { 0x00bd, 0x00bd, 0x312f32, 3 }, + { 0x00be, 0x00be, 0x332f34, 3 }, + { 0x00c0, 0x00c0, 0x41, 1 }, + { 0x00c1, 0x00c1, 0x41, 1 }, + { 0x00c2, 0x00c2, 0x41, 1 }, + { 0x00c3, 0x00c3, 0x41, 1 }, + { 0x00c4, 0x00c4, 0x41, 1 }, + { 0x00c5, 0x00c5, 0x41, 1 }, + { 0x00c6, 0x00c6, 0x4145, 2 }, + { 0x00c7, 0x00c7, 0x43, 1 }, + { 0x00c8, 0x00c8, 0x45, 1 }, + { 0x00c9, 0x00c9, 0x45, 1 }, + { 0x00ca, 0x00ca, 0x45, 1 }, + { 0x00cb, 0x00cb, 0x45, 1 }, + { 0x00cc, 0x00cc, 0x49, 1 }, + { 0x00cd, 0x00cd, 0x49, 1 }, + { 0x00ce, 0x00ce, 0x49, 1 }, + { 0x00cf, 0x00cf, 0x49, 1 }, + { 0x00d1, 0x00d2, 0x4e, 1 }, + { 0x00d3, 0x00d3, 0x4f, 1 }, + { 0x00d4, 0x00d4, 0x4f, 1 }, + { 0x00d5, 0x00d5, 0x4f, 1 }, + { 0x00d6, 0x00d6, 0x4f, 1 }, + { 0x00d7, 0x00d7, 0x78, 1 }, + { 0x00d8, 0x00d8, 0x4f, 1 }, + { 0x00d9, 0x00d9, 0x55, 1 }, + { 0x00da, 0x00da, 0x55, 1 }, + { 0x00db, 0x00db, 0x55, 1 }, + { 0x00dc, 0x00dc, 0x55, 1 }, + { 0x00dd, 0x00dd, 0x59, 1 }, + { 0x00e0, 0x00e0, 0x61, 1 }, + { 0x00e1, 0x00e1, 0x61, 1 }, + { 0x00e2, 0x00e2, 0x61, 1 }, + { 0x00e3, 0x00e3, 0x61, 1 }, + { 0x00e4, 0x00e4, 0x61, 1 }, + { 0x00e5, 0x00e5, 0x61, 1 }, + { 0x00e6, 0x00e6, 0x6165, 2 }, + { 0x00e7, 0x00e7, 0x63, 1 }, + { 0x00e8, 0x00e8, 0x65, 1 }, + { 0x00e9, 0x00e9, 0x65, 1 }, + { 0x00ea, 0x00ea, 0x65, 1 }, + { 0x00eb, 0x00eb, 0x65, 1 }, + { 0x00ec, 0x00ec, 0x69, 1 }, + { 0x00ed, 0x00ed, 0x69, 1 }, + { 0x00ee, 0x00ee, 0x69, 1 }, + { 0x00ef, 0x00ef, 0x69, 1 }, + { 0x00f1, 0x00f2, 0x6e, 1 }, + { 0x00f3, 0x00f3, 0x6f, 1 }, + { 0x00f4, 0x00f4, 0x6f, 1 }, + { 0x00f5, 0x00f5, 0x6f, 1 }, + { 0x00f6, 0x00f6, 0x6f, 1 }, + { 0x00f7, 0x00f7, 0x2f, 1 }, + { 0x00f8, 0x00f8, 0x6f, 1 }, + { 0x00f9, 0x00f9, 0x75, 1 }, + { 0x00fa, 0x00fa, 0x75, 1 }, + { 0x00fb, 0x00fb, 0x75, 1 }, + { 0x00fc, 0x00fc, 0x75, 1 }, + { 0x00fd, 0x00fd, 0x79, 1 }, + { 0x00ff, 0x00ff, 0x79, 1 }, + { 0x0131, 0x0131, 0x69, 1 }, + { 0x0141, 0x0141, 0x4c, 1 }, + { 0x0152, 0x0152, 0x4f45, 2 }, + { 0x0153, 0x0153, 0x6f65, 2 }, + { 0x0160, 0x0160, 0x53, 1 }, + { 0x0178, 0x0178, 0x59, 1 }, + { 0x017d, 0x017d, 0x5a, 1 }, + { 0x2013, 0x2013, 0x2d, 1 }, + { 0x2014, 0x2014, 0x2d2d, 2 }, + { 0x2018, 0x2018, 0x60, 1 }, + { 0x2019, 0x2019, 0x27, 1 }, + { 0x201c, 0x201c, 0x22, 1 }, + { 0x201d, 0x201d, 0x22, 1 }, + { 0x2022, 0x2022, 0x2a, 1 }, + { 0x2026, 0x2026, 0x2e2e2e, 3 }, + { 0x2122, 0x2122, 0x544d, 2 }, + { 0x2212, 0x2212, 0x2d, 1 }, + { 0xf6f9, 0xf6f9, 0x4c, 1 }, + { 0xf6fa, 0xf6fa, 0x4f45, 2 }, + { 0xf6fd, 0xf6fd, 0x53, 1 }, + { 0xf6fe, 0xf6fe, 0x7e, 1 }, + { 0xf6ff, 0xf6ff, 0x5a, 1 }, + { 0xf721, 0xf721, 0x21, 1 }, + { 0xf724, 0xf724, 0x24, 1 }, + { 0xf726, 0xf726, 0x26, 1 }, + { 0xf730, 0xf739, 0x30, 1 }, + { 0xf73f, 0xf73f, 0x3f, 1 }, + { 0xf761, 0xf77a, 0x41, 1 }, + { 0xf7e0, 0xf7e0, 0x41, 1 }, + { 0xf7e1, 0xf7e1, 0x41, 1 }, + { 0xf7e2, 0xf7e2, 0x41, 1 }, + { 0xf7e3, 0xf7e3, 0x41, 1 }, + { 0xf7e4, 0xf7e4, 0x41, 1 }, + { 0xf7e5, 0xf7e5, 0x41, 1 }, + { 0xf7e6, 0xf7e6, 0x4145, 2 }, + { 0xf7e7, 0xf7e7, 0x43, 1 }, + { 0xf7e8, 0xf7e8, 0x45, 1 }, + { 0xf7e9, 0xf7e9, 0x45, 1 }, + { 0xf7ea, 0xf7ea, 0x45, 1 }, + { 0xf7eb, 0xf7eb, 0x45, 1 }, + { 0xf7ec, 0xf7ec, 0x49, 1 }, + { 0xf7ed, 0xf7ed, 0x49, 1 }, + { 0xf7ee, 0xf7ee, 0x49, 1 }, + { 0xf7ef, 0xf7ef, 0x49, 1 }, + { 0xf7f1, 0xf7f2, 0x4e, 1 }, + { 0xf7f3, 0xf7f3, 0x4f, 1 }, + { 0xf7f4, 0xf7f4, 0x4f, 1 }, + { 0xf7f5, 0xf7f5, 0x4f, 1 }, + { 0xf7f6, 0xf7f6, 0x4f, 1 }, + { 0xf7f8, 0xf7f8, 0x4f, 1 }, + { 0xf7f9, 0xf7f9, 0x55, 1 }, + { 0xf7fa, 0xf7fa, 0x55, 1 }, + { 0xf7fb, 0xf7fb, 0x55, 1 }, + { 0xf7fc, 0xf7fc, 0x55, 1 }, + { 0xf7fd, 0xf7fd, 0x59, 1 }, + { 0xf7ff, 0xf7ff, 0x59, 1 }, + { 0xfb00, 0xfb00, 0x6666, 2 }, + { 0xfb01, 0xfb01, 0x6669, 2 }, + { 0xfb02, 0xfb02, 0x666c, 2 }, + { 0xfb03, 0xfb03, 0x666669, 3 }, + { 0xfb04, 0xfb04, 0x66666c, 3 } +}; +#define ascii7UnicodeMapLen (sizeof(ascii7UnicodeMapRanges) / sizeof(UnicodeMapRange)) + +static UnicodeMapRange symbolUnicodeMapRanges[] = { + { 0x0020, 0x0021, 0x20, 1 }, + { 0x0023, 0x0023, 0x23, 1 }, + { 0x0025, 0x0026, 0x25, 1 }, + { 0x0028, 0x0029, 0x28, 1 }, + { 0x002b, 0x002c, 0x2b, 1 }, + { 0x002e, 0x003f, 0x2e, 1 }, + { 0x005b, 0x005b, 0x5b, 1 }, + { 0x005d, 0x005d, 0x5d, 1 }, + { 0x005f, 0x005f, 0x5f, 1 }, + { 0x007b, 0x007d, 0x7b, 1 }, + { 0x00ac, 0x00ac, 0xd8, 1 }, + { 0x00b0, 0x00b1, 0xb0, 1 }, + { 0x00b5, 0x00b5, 0x6d, 1 }, + { 0x00d7, 0x00d7, 0xb4, 1 }, + { 0x00f7, 0x00f7, 0xb8, 1 }, + { 0x0192, 0x0192, 0xa6, 1 }, + { 0x0391, 0x0392, 0x41, 1 }, + { 0x0393, 0x0393, 0x47, 1 }, + { 0x0395, 0x0395, 0x45, 1 }, + { 0x0396, 0x0396, 0x5a, 1 }, + { 0x0397, 0x0397, 0x48, 1 }, + { 0x0398, 0x0398, 0x51, 1 }, + { 0x0399, 0x0399, 0x49, 1 }, + { 0x039a, 0x039d, 0x4b, 1 }, + { 0x039e, 0x039e, 0x58, 1 }, + { 0x039f, 0x03a0, 0x4f, 1 }, + { 0x03a1, 0x03a1, 0x52, 1 }, + { 0x03a3, 0x03a5, 0x53, 1 }, + { 0x03a6, 0x03a6, 0x46, 1 }, + { 0x03a7, 0x03a7, 0x43, 1 }, + { 0x03a8, 0x03a8, 0x59, 1 }, + { 0x03b1, 0x03b2, 0x61, 1 }, + { 0x03b3, 0x03b3, 0x67, 1 }, + { 0x03b4, 0x03b5, 0x64, 1 }, + { 0x03b6, 0x03b6, 0x7a, 1 }, + { 0x03b7, 0x03b7, 0x68, 1 }, + { 0x03b8, 0x03b8, 0x71, 1 }, + { 0x03b9, 0x03b9, 0x69, 1 }, + { 0x03ba, 0x03bb, 0x6b, 1 }, + { 0x03bd, 0x03bd, 0x6e, 1 }, + { 0x03be, 0x03be, 0x78, 1 }, + { 0x03bf, 0x03c0, 0x6f, 1 }, + { 0x03c1, 0x03c1, 0x72, 1 }, + { 0x03c2, 0x03c2, 0x56, 1 }, + { 0x03c3, 0x03c5, 0x73, 1 }, + { 0x03c6, 0x03c6, 0x66, 1 }, + { 0x03c7, 0x03c7, 0x63, 1 }, + { 0x03c8, 0x03c8, 0x79, 1 }, + { 0x03c9, 0x03c9, 0x77, 1 }, + { 0x03d1, 0x03d1, 0x4a, 1 }, + { 0x03d2, 0x03d2, 0xa1, 1 }, + { 0x03d5, 0x03d5, 0x6a, 1 }, + { 0x03d6, 0x03d6, 0x76, 1 }, + { 0x2022, 0x2022, 0xb7, 1 }, + { 0x2026, 0x2026, 0xbc, 1 }, + { 0x2032, 0x2032, 0xa2, 1 }, + { 0x2033, 0x2033, 0xb2, 1 }, + { 0x2044, 0x2044, 0xa4, 1 }, + { 0x2111, 0x2111, 0xc1, 1 }, + { 0x2118, 0x2118, 0xc3, 1 }, + { 0x211c, 0x211c, 0xc2, 1 }, + { 0x2126, 0x2126, 0x57, 1 }, + { 0x2135, 0x2135, 0xc0, 1 }, + { 0x2190, 0x2193, 0xac, 1 }, + { 0x2194, 0x2194, 0xab, 1 }, + { 0x21b5, 0x21b5, 0xbf, 1 }, + { 0x21d0, 0x21d3, 0xdc, 1 }, + { 0x21d4, 0x21d4, 0xdb, 1 }, + { 0x2200, 0x2200, 0x22, 1 }, + { 0x2202, 0x2202, 0xb6, 1 }, + { 0x2203, 0x2203, 0x24, 1 }, + { 0x2205, 0x2205, 0xc6, 1 }, + { 0x2206, 0x2206, 0x44, 1 }, + { 0x2207, 0x2207, 0xd1, 1 }, + { 0x2208, 0x2209, 0xce, 1 }, + { 0x220b, 0x220b, 0x27, 1 }, + { 0x220f, 0x220f, 0xd5, 1 }, + { 0x2211, 0x2211, 0xe5, 1 }, + { 0x2212, 0x2212, 0x2d, 1 }, + { 0x2217, 0x2217, 0x2a, 1 }, + { 0x221a, 0x221a, 0xd6, 1 }, + { 0x221d, 0x221d, 0xb5, 1 }, + { 0x221e, 0x221e, 0xa5, 1 }, + { 0x2220, 0x2220, 0xd0, 1 }, + { 0x2227, 0x2228, 0xd9, 1 }, + { 0x2229, 0x222a, 0xc7, 1 }, + { 0x222b, 0x222b, 0xf2, 1 }, + { 0x2234, 0x2234, 0x5c, 1 }, + { 0x223c, 0x223c, 0x7e, 1 }, + { 0x2245, 0x2245, 0x40, 1 }, + { 0x2248, 0x2248, 0xbb, 1 }, + { 0x2260, 0x2261, 0xb9, 1 }, + { 0x2264, 0x2264, 0xa3, 1 }, + { 0x2265, 0x2265, 0xb3, 1 }, + { 0x2282, 0x2282, 0xcc, 1 }, + { 0x2283, 0x2283, 0xc9, 1 }, + { 0x2284, 0x2284, 0xcb, 1 }, + { 0x2286, 0x2286, 0xcd, 1 }, + { 0x2287, 0x2287, 0xca, 1 }, + { 0x2295, 0x2295, 0xc5, 1 }, + { 0x2297, 0x2297, 0xc4, 1 }, + { 0x22a5, 0x22a5, 0x5e, 1 }, + { 0x22c5, 0x22c5, 0xd7, 1 }, + { 0x2320, 0x2320, 0xf3, 1 }, + { 0x2321, 0x2321, 0xf5, 1 }, + { 0x2329, 0x2329, 0xe1, 1 }, + { 0x232a, 0x232a, 0xf1, 1 }, + { 0x25ca, 0x25ca, 0xe0, 1 }, + { 0x2660, 0x2660, 0xaa, 1 }, + { 0x2663, 0x2663, 0xa7, 1 }, + { 0x2665, 0x2665, 0xa9, 1 }, + { 0x2666, 0x2666, 0xa8, 1 }, + { 0xf6d9, 0xf6d9, 0xd3, 1 }, + { 0xf6da, 0xf6da, 0xd2, 1 }, + { 0xf6db, 0xf6db, 0xd4, 1 }, + { 0xf8e5, 0xf8e5, 0x60, 1 }, + { 0xf8e6, 0xf8e7, 0xbd, 1 }, + { 0xf8e8, 0xf8ea, 0xe2, 1 }, + { 0xf8eb, 0xf8f4, 0xe6, 1 }, + { 0xf8f5, 0xf8f5, 0xf4, 1 }, + { 0xf8f6, 0xf8fe, 0xf6, 1 } +}; +#define symbolUnicodeMapLen (sizeof(symbolUnicodeMapRanges) / sizeof(UnicodeMapRange)) + +static UnicodeMapRange zapfDingbatsUnicodeMapRanges[] = { + { 0x0020, 0x0020, 0x20, 1 }, + { 0x2192, 0x2192, 0xd5, 1 }, + { 0x2194, 0x2195, 0xd6, 1 }, + { 0x2460, 0x2469, 0xac, 1 }, + { 0x25a0, 0x25a0, 0x6e, 1 }, + { 0x25b2, 0x25b2, 0x73, 1 }, + { 0x25bc, 0x25bc, 0x74, 1 }, + { 0x25c6, 0x25c6, 0x75, 1 }, + { 0x25cf, 0x25cf, 0x6c, 1 }, + { 0x25d7, 0x25d7, 0x77, 1 }, + { 0x2605, 0x2605, 0x48, 1 }, + { 0x260e, 0x260e, 0x25, 1 }, + { 0x261b, 0x261b, 0x2a, 1 }, + { 0x261e, 0x261e, 0x2b, 1 }, + { 0x2660, 0x2660, 0xab, 1 }, + { 0x2663, 0x2663, 0xa8, 1 }, + { 0x2665, 0x2665, 0xaa, 1 }, + { 0x2666, 0x2666, 0xa9, 1 }, + { 0x2701, 0x2704, 0x21, 1 }, + { 0x2706, 0x2709, 0x26, 1 }, + { 0x270c, 0x2727, 0x2c, 1 }, + { 0x2729, 0x274b, 0x49, 1 }, + { 0x274d, 0x274d, 0x6d, 1 }, + { 0x274f, 0x2752, 0x6f, 1 }, + { 0x2756, 0x2756, 0x76, 1 }, + { 0x2758, 0x275e, 0x78, 1 }, + { 0x2761, 0x2767, 0xa1, 1 }, + { 0x2776, 0x2794, 0xb6, 1 }, + { 0x2798, 0x27af, 0xd8, 1 }, + { 0x27b1, 0x27be, 0xf1, 1 } +}; +#define zapfDingbatsUnicodeMapLen (sizeof(zapfDingbatsUnicodeMapRanges) / sizeof(UnicodeMapRange)) diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeTypeTable.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeTypeTable.cc new file mode 100644 index 00000000000..f18930f38de --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeTypeTable.cc @@ -0,0 +1,1203 @@ +//======================================================================== +// +// UnicodeTypeTable.cc +// +// Copyright 2004 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006, 2007 Ed Catmur <ed@catmur.co.uk> +// Copyright (C) 2007 Jeff Muizelaar <jeff@infidigm.net> +// Copyright (C) 2008 Albert Astals Cid <aacid@kde.org> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <stdlib.h> +#include "CharTypes.h" +#include "UnicodeTypeTable.h" +#include "goo/gmem.h" + +struct UnicodeMapTableEntry { + char *vector; + char type; +}; + +struct UnicodeCaseTableVector { + Unicode codes[256]; +}; + +static const UnicodeMapTableEntry typeTable[256] = { + { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLNNNNNNNNNNLNNNNLNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLL", 'X' }, + { NULL, 'L' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLNNNNNNNNNNNNNNLLNNNNNNNNNNNNNNLLLLLNNNNNNNNNLNNNNNNNNNNNNNNNNN", 'X' }, + { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLNNNNNNNNNNNLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLL", 'X' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNRNRNNRNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR", 'X' }, + { "RRRRNNNNNNNNNRNNNNNNNNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNRRRNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNRNNNNNNNRRNNNNNNNRRNNNNNNNNNNRRRRRR", 'X' }, + { "RRRRRRRRRRRRRRNNRNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNNNNNNNNNNNNNNNNNNNNNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNNNNNRNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, + { NULL, 'N' }, + { "NNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNNNNNLLLLNLLLNNNNLLLLLLLLLLLLLNNLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNLLLLLLLLNLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLNNLLLLLLLNNNNN", 'X' }, + { "NNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNNNNNLLLLNLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLNNNNNNNNNNNNNNNN", 'X' }, + { "NNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLNLNNNLLLLLLLLLNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNLLLLL", 'X' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNLLLLNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNLLLLLLLNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLNNNNNNNNNNNNLLLLLLLNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLNNNNNNNNNLLLLLLLLLLNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLNLNLNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNLNNNNNLNNLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNLNNNNNNLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, + { "LLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNLLLLLLLLNLLNNNNNNNNNNNLLLLLLLNLNLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNN", 'X' }, + { "NNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLNNNNNLLLLLLNLLLLLLNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLNNNLLLLLLLLLLLNNNLLLLLLLLLLLLNNNNLLLLLLLLLLLLLNNNLLLLLLLLLLLLLNNN", 'X' }, + { "NNNNNNNNNNNNNNLRNNNNNNNNNNNNNNNNNNNNNNNNNNLRNLRNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLNNNNNNNNNNNNNLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, + { "NNLNNNNLNNLLLLLLLLLLNLNNNLLLLLNNNNNNLNLNLNLLLLNLLLNLLLLLLLNNLLLLNNNNNLLLLLNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, + { NULL, 'N' }, + { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, + { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNN", 'X' }, + { NULL, 'N' }, + { NULL, 'N' }, + { NULL, 'N' }, + { NULL, 'L' }, + { NULL, 'N' }, + { NULL, 'N' }, + { NULL, 'N' }, + { NULL, 'N' }, + { NULL, 'N' }, + { NULL, 'N' }, + { NULL, 'N' }, + { "NNNNNLLLNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLNNNNNNNLLLLLNNLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLL", 'X' }, + { NULL, 'L' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNLLLLLLLLLLLLNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN", 'X' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { NULL, 'L' }, + { "LLLLLLLLLLLLLLLLLLLLLLLLRRRRRRNRRRRRRRRRRNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR", 'X' }, + { NULL, 'R' }, + { "RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNN", 'X' }, + { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNN", 'X' }, + { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLL", 'X' } +}; + +static const UnicodeCaseTableVector caseTable00 = {{ + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x03bc, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00d7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff +}}; +static const UnicodeCaseTableVector caseTable01 = {{ + 0x0101, 0x0101, 0x0103, 0x0103, 0x0105, 0x0105, 0x0107, 0x0107, + 0x0109, 0x0109, 0x010b, 0x010b, 0x010d, 0x010d, 0x010f, 0x010f, + 0x0111, 0x0111, 0x0113, 0x0113, 0x0115, 0x0115, 0x0117, 0x0117, + 0x0119, 0x0119, 0x011b, 0x011b, 0x011d, 0x011d, 0x011f, 0x011f, + 0x0121, 0x0121, 0x0123, 0x0123, 0x0125, 0x0125, 0x0127, 0x0127, + 0x0129, 0x0129, 0x012b, 0x012b, 0x012d, 0x012d, 0x012f, 0x012f, + 0x0130, 0x0131, 0x0133, 0x0133, 0x0135, 0x0135, 0x0137, 0x0137, + 0x0138, 0x013a, 0x013a, 0x013c, 0x013c, 0x013e, 0x013e, 0x0140, + 0x0140, 0x0142, 0x0142, 0x0144, 0x0144, 0x0146, 0x0146, 0x0148, + 0x0148, 0x0149, 0x014b, 0x014b, 0x014d, 0x014d, 0x014f, 0x014f, + 0x0151, 0x0151, 0x0153, 0x0153, 0x0155, 0x0155, 0x0157, 0x0157, + 0x0159, 0x0159, 0x015b, 0x015b, 0x015d, 0x015d, 0x015f, 0x015f, + 0x0161, 0x0161, 0x0163, 0x0163, 0x0165, 0x0165, 0x0167, 0x0167, + 0x0169, 0x0169, 0x016b, 0x016b, 0x016d, 0x016d, 0x016f, 0x016f, + 0x0171, 0x0171, 0x0173, 0x0173, 0x0175, 0x0175, 0x0177, 0x0177, + 0x00ff, 0x017a, 0x017a, 0x017c, 0x017c, 0x017e, 0x017e, 0x0073, + 0x0180, 0x0253, 0x0183, 0x0183, 0x0185, 0x0185, 0x0254, 0x0188, + 0x0188, 0x0256, 0x0257, 0x018c, 0x018c, 0x018d, 0x01dd, 0x0259, + 0x025b, 0x0192, 0x0192, 0x0260, 0x0263, 0x0195, 0x0269, 0x0268, + 0x0199, 0x0199, 0x019a, 0x019b, 0x026f, 0x0272, 0x019e, 0x0275, + 0x01a1, 0x01a1, 0x01a3, 0x01a3, 0x01a5, 0x01a5, 0x0280, 0x01a8, + 0x01a8, 0x0283, 0x01aa, 0x01ab, 0x01ad, 0x01ad, 0x0288, 0x01b0, + 0x01b0, 0x028a, 0x028b, 0x01b4, 0x01b4, 0x01b6, 0x01b6, 0x0292, + 0x01b9, 0x01b9, 0x01ba, 0x01bb, 0x01bd, 0x01bd, 0x01be, 0x01bf, + 0x01c0, 0x01c1, 0x01c2, 0x01c3, 0x01c6, 0x01c6, 0x01c6, 0x01c9, + 0x01c9, 0x01c9, 0x01cc, 0x01cc, 0x01cc, 0x01ce, 0x01ce, 0x01d0, + 0x01d0, 0x01d2, 0x01d2, 0x01d4, 0x01d4, 0x01d6, 0x01d6, 0x01d8, + 0x01d8, 0x01da, 0x01da, 0x01dc, 0x01dc, 0x01dd, 0x01df, 0x01df, + 0x01e1, 0x01e1, 0x01e3, 0x01e3, 0x01e5, 0x01e5, 0x01e7, 0x01e7, + 0x01e9, 0x01e9, 0x01eb, 0x01eb, 0x01ed, 0x01ed, 0x01ef, 0x01ef, + 0x01f0, 0x01f3, 0x01f3, 0x01f3, 0x01f5, 0x01f5, 0x0195, 0x01bf, + 0x01f9, 0x01f9, 0x01fb, 0x01fb, 0x01fd, 0x01fd, 0x01ff, 0x01ff +}}; +static const UnicodeCaseTableVector caseTable02 = {{ + 0x0201, 0x0201, 0x0203, 0x0203, 0x0205, 0x0205, 0x0207, 0x0207, + 0x0209, 0x0209, 0x020b, 0x020b, 0x020d, 0x020d, 0x020f, 0x020f, + 0x0211, 0x0211, 0x0213, 0x0213, 0x0215, 0x0215, 0x0217, 0x0217, + 0x0219, 0x0219, 0x021b, 0x021b, 0x021d, 0x021d, 0x021f, 0x021f, + 0x019e, 0x0221, 0x0223, 0x0223, 0x0225, 0x0225, 0x0227, 0x0227, + 0x0229, 0x0229, 0x022b, 0x022b, 0x022d, 0x022d, 0x022f, 0x022f, + 0x0231, 0x0231, 0x0233, 0x0233, 0x0234, 0x0235, 0x0236, 0x0237, + 0x0238, 0x0239, 0x023a, 0x023b, 0x023c, 0x023d, 0x023e, 0x023f, + 0x0240, 0x0241, 0x0242, 0x0243, 0x0244, 0x0245, 0x0246, 0x0247, + 0x0248, 0x0249, 0x024a, 0x024b, 0x024c, 0x024d, 0x024e, 0x024f, + 0x0250, 0x0251, 0x0252, 0x0253, 0x0254, 0x0255, 0x0256, 0x0257, + 0x0258, 0x0259, 0x025a, 0x025b, 0x025c, 0x025d, 0x025e, 0x025f, + 0x0260, 0x0261, 0x0262, 0x0263, 0x0264, 0x0265, 0x0266, 0x0267, + 0x0268, 0x0269, 0x026a, 0x026b, 0x026c, 0x026d, 0x026e, 0x026f, + 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275, 0x0276, 0x0277, + 0x0278, 0x0279, 0x027a, 0x027b, 0x027c, 0x027d, 0x027e, 0x027f, + 0x0280, 0x0281, 0x0282, 0x0283, 0x0284, 0x0285, 0x0286, 0x0287, + 0x0288, 0x0289, 0x028a, 0x028b, 0x028c, 0x028d, 0x028e, 0x028f, + 0x0290, 0x0291, 0x0292, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, + 0x0298, 0x0299, 0x029a, 0x029b, 0x029c, 0x029d, 0x029e, 0x029f, + 0x02a0, 0x02a1, 0x02a2, 0x02a3, 0x02a4, 0x02a5, 0x02a6, 0x02a7, + 0x02a8, 0x02a9, 0x02aa, 0x02ab, 0x02ac, 0x02ad, 0x02ae, 0x02af, + 0x02b0, 0x02b1, 0x02b2, 0x02b3, 0x02b4, 0x02b5, 0x02b6, 0x02b7, + 0x02b8, 0x02b9, 0x02ba, 0x02bb, 0x02bc, 0x02bd, 0x02be, 0x02bf, + 0x02c0, 0x02c1, 0x02c2, 0x02c3, 0x02c4, 0x02c5, 0x02c6, 0x02c7, + 0x02c8, 0x02c9, 0x02ca, 0x02cb, 0x02cc, 0x02cd, 0x02ce, 0x02cf, + 0x02d0, 0x02d1, 0x02d2, 0x02d3, 0x02d4, 0x02d5, 0x02d6, 0x02d7, + 0x02d8, 0x02d9, 0x02da, 0x02db, 0x02dc, 0x02dd, 0x02de, 0x02df, + 0x02e0, 0x02e1, 0x02e2, 0x02e3, 0x02e4, 0x02e5, 0x02e6, 0x02e7, + 0x02e8, 0x02e9, 0x02ea, 0x02eb, 0x02ec, 0x02ed, 0x02ee, 0x02ef, + 0x02f0, 0x02f1, 0x02f2, 0x02f3, 0x02f4, 0x02f5, 0x02f6, 0x02f7, + 0x02f8, 0x02f9, 0x02fa, 0x02fb, 0x02fc, 0x02fd, 0x02fe, 0x02ff +}}; +static const UnicodeCaseTableVector caseTable03 = {{ + 0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0305, 0x0306, 0x0307, + 0x0308, 0x0309, 0x030a, 0x030b, 0x030c, 0x030d, 0x030e, 0x030f, + 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, + 0x0318, 0x0319, 0x031a, 0x031b, 0x031c, 0x031d, 0x031e, 0x031f, + 0x0320, 0x0321, 0x0322, 0x0323, 0x0324, 0x0325, 0x0326, 0x0327, + 0x0328, 0x0329, 0x032a, 0x032b, 0x032c, 0x032d, 0x032e, 0x032f, + 0x0330, 0x0331, 0x0332, 0x0333, 0x0334, 0x0335, 0x0336, 0x0337, + 0x0338, 0x0339, 0x033a, 0x033b, 0x033c, 0x033d, 0x033e, 0x033f, + 0x0340, 0x0341, 0x0342, 0x0343, 0x0344, 0x03b9, 0x0346, 0x0347, + 0x0348, 0x0349, 0x034a, 0x034b, 0x034c, 0x034d, 0x034e, 0x034f, + 0x0350, 0x0351, 0x0352, 0x0353, 0x0354, 0x0355, 0x0356, 0x0357, + 0x0358, 0x0359, 0x035a, 0x035b, 0x035c, 0x035d, 0x035e, 0x035f, + 0x0360, 0x0361, 0x0362, 0x0363, 0x0364, 0x0365, 0x0366, 0x0367, + 0x0368, 0x0369, 0x036a, 0x036b, 0x036c, 0x036d, 0x036e, 0x036f, + 0x0370, 0x0371, 0x0372, 0x0373, 0x0374, 0x0375, 0x0376, 0x0377, + 0x0378, 0x0379, 0x037a, 0x037b, 0x037c, 0x037d, 0x037e, 0x037f, + 0x0380, 0x0381, 0x0382, 0x0383, 0x0384, 0x0385, 0x03ac, 0x0387, + 0x03ad, 0x03ae, 0x03af, 0x038b, 0x03cc, 0x038d, 0x03cd, 0x03ce, + 0x0390, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, + 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, + 0x03c0, 0x03c1, 0x03a2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, + 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03ac, 0x03ad, 0x03ae, 0x03af, + 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, + 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, + 0x03c0, 0x03c1, 0x03c3, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, + 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x03cf, + 0x03b2, 0x03b8, 0x03d2, 0x03d3, 0x03d4, 0x03c6, 0x03c0, 0x03d7, + 0x03d9, 0x03d9, 0x03db, 0x03db, 0x03dd, 0x03dd, 0x03df, 0x03df, + 0x03e1, 0x03e1, 0x03e3, 0x03e3, 0x03e5, 0x03e5, 0x03e7, 0x03e7, + 0x03e9, 0x03e9, 0x03eb, 0x03eb, 0x03ed, 0x03ed, 0x03ef, 0x03ef, + 0x03ba, 0x03c1, 0x03f2, 0x03f3, 0x03b8, 0x03b5, 0x03f6, 0x03f8, + 0x03f8, 0x03f2, 0x03fb, 0x03fb, 0x03fc, 0x03fd, 0x03fe, 0x03ff +}}; +static const UnicodeCaseTableVector caseTable04 = {{ + 0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, + 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, + 0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, + 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f, + 0x0461, 0x0461, 0x0463, 0x0463, 0x0465, 0x0465, 0x0467, 0x0467, + 0x0469, 0x0469, 0x046b, 0x046b, 0x046d, 0x046d, 0x046f, 0x046f, + 0x0471, 0x0471, 0x0473, 0x0473, 0x0475, 0x0475, 0x0477, 0x0477, + 0x0479, 0x0479, 0x047b, 0x047b, 0x047d, 0x047d, 0x047f, 0x047f, + 0x0481, 0x0481, 0x0482, 0x0483, 0x0484, 0x0485, 0x0486, 0x0487, + 0x0488, 0x0489, 0x048b, 0x048b, 0x048d, 0x048d, 0x048f, 0x048f, + 0x0491, 0x0491, 0x0493, 0x0493, 0x0495, 0x0495, 0x0497, 0x0497, + 0x0499, 0x0499, 0x049b, 0x049b, 0x049d, 0x049d, 0x049f, 0x049f, + 0x04a1, 0x04a1, 0x04a3, 0x04a3, 0x04a5, 0x04a5, 0x04a7, 0x04a7, + 0x04a9, 0x04a9, 0x04ab, 0x04ab, 0x04ad, 0x04ad, 0x04af, 0x04af, + 0x04b1, 0x04b1, 0x04b3, 0x04b3, 0x04b5, 0x04b5, 0x04b7, 0x04b7, + 0x04b9, 0x04b9, 0x04bb, 0x04bb, 0x04bd, 0x04bd, 0x04bf, 0x04bf, + 0x04c0, 0x04c2, 0x04c2, 0x04c4, 0x04c4, 0x04c6, 0x04c6, 0x04c8, + 0x04c8, 0x04ca, 0x04ca, 0x04cc, 0x04cc, 0x04ce, 0x04ce, 0x04cf, + 0x04d1, 0x04d1, 0x04d3, 0x04d3, 0x04d5, 0x04d5, 0x04d7, 0x04d7, + 0x04d9, 0x04d9, 0x04db, 0x04db, 0x04dd, 0x04dd, 0x04df, 0x04df, + 0x04e1, 0x04e1, 0x04e3, 0x04e3, 0x04e5, 0x04e5, 0x04e7, 0x04e7, + 0x04e9, 0x04e9, 0x04eb, 0x04eb, 0x04ed, 0x04ed, 0x04ef, 0x04ef, + 0x04f1, 0x04f1, 0x04f3, 0x04f3, 0x04f5, 0x04f5, 0x04f6, 0x04f7, + 0x04f9, 0x04f9, 0x04fa, 0x04fb, 0x04fc, 0x04fd, 0x04fe, 0x04ff +}}; +static const UnicodeCaseTableVector caseTable05 = {{ + 0x0501, 0x0501, 0x0503, 0x0503, 0x0505, 0x0505, 0x0507, 0x0507, + 0x0509, 0x0509, 0x050b, 0x050b, 0x050d, 0x050d, 0x050f, 0x050f, + 0x0510, 0x0511, 0x0512, 0x0513, 0x0514, 0x0515, 0x0516, 0x0517, + 0x0518, 0x0519, 0x051a, 0x051b, 0x051c, 0x051d, 0x051e, 0x051f, + 0x0520, 0x0521, 0x0522, 0x0523, 0x0524, 0x0525, 0x0526, 0x0527, + 0x0528, 0x0529, 0x052a, 0x052b, 0x052c, 0x052d, 0x052e, 0x052f, + 0x0530, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, 0x0566, 0x0567, + 0x0568, 0x0569, 0x056a, 0x056b, 0x056c, 0x056d, 0x056e, 0x056f, + 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577, + 0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f, + 0x0580, 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0557, + 0x0558, 0x0559, 0x055a, 0x055b, 0x055c, 0x055d, 0x055e, 0x055f, + 0x0560, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, 0x0566, 0x0567, + 0x0568, 0x0569, 0x056a, 0x056b, 0x056c, 0x056d, 0x056e, 0x056f, + 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577, + 0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f, + 0x0580, 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0587, + 0x0588, 0x0589, 0x058a, 0x058b, 0x058c, 0x058d, 0x058e, 0x058f, + 0x0590, 0x0591, 0x0592, 0x0593, 0x0594, 0x0595, 0x0596, 0x0597, + 0x0598, 0x0599, 0x059a, 0x059b, 0x059c, 0x059d, 0x059e, 0x059f, + 0x05a0, 0x05a1, 0x05a2, 0x05a3, 0x05a4, 0x05a5, 0x05a6, 0x05a7, + 0x05a8, 0x05a9, 0x05aa, 0x05ab, 0x05ac, 0x05ad, 0x05ae, 0x05af, + 0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7, + 0x05b8, 0x05b9, 0x05ba, 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf, + 0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05c4, 0x05c5, 0x05c6, 0x05c7, + 0x05c8, 0x05c9, 0x05ca, 0x05cb, 0x05cc, 0x05cd, 0x05ce, 0x05cf, + 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, + 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, + 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, + 0x05e8, 0x05e9, 0x05ea, 0x05eb, 0x05ec, 0x05ed, 0x05ee, 0x05ef, + 0x05f0, 0x05f1, 0x05f2, 0x05f3, 0x05f4, 0x05f5, 0x05f6, 0x05f7, + 0x05f8, 0x05f9, 0x05fa, 0x05fb, 0x05fc, 0x05fd, 0x05fe, 0x05ff +}}; +static const UnicodeCaseTableVector caseTable1e = {{ + 0x1e01, 0x1e01, 0x1e03, 0x1e03, 0x1e05, 0x1e05, 0x1e07, 0x1e07, + 0x1e09, 0x1e09, 0x1e0b, 0x1e0b, 0x1e0d, 0x1e0d, 0x1e0f, 0x1e0f, + 0x1e11, 0x1e11, 0x1e13, 0x1e13, 0x1e15, 0x1e15, 0x1e17, 0x1e17, + 0x1e19, 0x1e19, 0x1e1b, 0x1e1b, 0x1e1d, 0x1e1d, 0x1e1f, 0x1e1f, + 0x1e21, 0x1e21, 0x1e23, 0x1e23, 0x1e25, 0x1e25, 0x1e27, 0x1e27, + 0x1e29, 0x1e29, 0x1e2b, 0x1e2b, 0x1e2d, 0x1e2d, 0x1e2f, 0x1e2f, + 0x1e31, 0x1e31, 0x1e33, 0x1e33, 0x1e35, 0x1e35, 0x1e37, 0x1e37, + 0x1e39, 0x1e39, 0x1e3b, 0x1e3b, 0x1e3d, 0x1e3d, 0x1e3f, 0x1e3f, + 0x1e41, 0x1e41, 0x1e43, 0x1e43, 0x1e45, 0x1e45, 0x1e47, 0x1e47, + 0x1e49, 0x1e49, 0x1e4b, 0x1e4b, 0x1e4d, 0x1e4d, 0x1e4f, 0x1e4f, + 0x1e51, 0x1e51, 0x1e53, 0x1e53, 0x1e55, 0x1e55, 0x1e57, 0x1e57, + 0x1e59, 0x1e59, 0x1e5b, 0x1e5b, 0x1e5d, 0x1e5d, 0x1e5f, 0x1e5f, + 0x1e61, 0x1e61, 0x1e63, 0x1e63, 0x1e65, 0x1e65, 0x1e67, 0x1e67, + 0x1e69, 0x1e69, 0x1e6b, 0x1e6b, 0x1e6d, 0x1e6d, 0x1e6f, 0x1e6f, + 0x1e71, 0x1e71, 0x1e73, 0x1e73, 0x1e75, 0x1e75, 0x1e77, 0x1e77, + 0x1e79, 0x1e79, 0x1e7b, 0x1e7b, 0x1e7d, 0x1e7d, 0x1e7f, 0x1e7f, + 0x1e81, 0x1e81, 0x1e83, 0x1e83, 0x1e85, 0x1e85, 0x1e87, 0x1e87, + 0x1e89, 0x1e89, 0x1e8b, 0x1e8b, 0x1e8d, 0x1e8d, 0x1e8f, 0x1e8f, + 0x1e91, 0x1e91, 0x1e93, 0x1e93, 0x1e95, 0x1e95, 0x1e96, 0x1e97, + 0x1e98, 0x1e99, 0x1e9a, 0x1e61, 0x1e9c, 0x1e9d, 0x1e9e, 0x1e9f, + 0x1ea1, 0x1ea1, 0x1ea3, 0x1ea3, 0x1ea5, 0x1ea5, 0x1ea7, 0x1ea7, + 0x1ea9, 0x1ea9, 0x1eab, 0x1eab, 0x1ead, 0x1ead, 0x1eaf, 0x1eaf, + 0x1eb1, 0x1eb1, 0x1eb3, 0x1eb3, 0x1eb5, 0x1eb5, 0x1eb7, 0x1eb7, + 0x1eb9, 0x1eb9, 0x1ebb, 0x1ebb, 0x1ebd, 0x1ebd, 0x1ebf, 0x1ebf, + 0x1ec1, 0x1ec1, 0x1ec3, 0x1ec3, 0x1ec5, 0x1ec5, 0x1ec7, 0x1ec7, + 0x1ec9, 0x1ec9, 0x1ecb, 0x1ecb, 0x1ecd, 0x1ecd, 0x1ecf, 0x1ecf, + 0x1ed1, 0x1ed1, 0x1ed3, 0x1ed3, 0x1ed5, 0x1ed5, 0x1ed7, 0x1ed7, + 0x1ed9, 0x1ed9, 0x1edb, 0x1edb, 0x1edd, 0x1edd, 0x1edf, 0x1edf, + 0x1ee1, 0x1ee1, 0x1ee3, 0x1ee3, 0x1ee5, 0x1ee5, 0x1ee7, 0x1ee7, + 0x1ee9, 0x1ee9, 0x1eeb, 0x1eeb, 0x1eed, 0x1eed, 0x1eef, 0x1eef, + 0x1ef1, 0x1ef1, 0x1ef3, 0x1ef3, 0x1ef5, 0x1ef5, 0x1ef7, 0x1ef7, + 0x1ef9, 0x1ef9, 0x1efa, 0x1efb, 0x1efc, 0x1efd, 0x1efe, 0x1eff +}}; +static const UnicodeCaseTableVector caseTable1f = {{ + 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, + 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, + 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15, 0x1f16, 0x1f17, + 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15, 0x1f1e, 0x1f1f, + 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27, + 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27, + 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 0x1f37, + 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 0x1f37, + 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x1f46, 0x1f47, + 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x1f4e, 0x1f4f, + 0x1f50, 0x1f51, 0x1f52, 0x1f53, 0x1f54, 0x1f55, 0x1f56, 0x1f57, + 0x1f58, 0x1f51, 0x1f5a, 0x1f53, 0x1f5c, 0x1f55, 0x1f5e, 0x1f57, + 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, + 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, + 0x1f70, 0x1f71, 0x1f72, 0x1f73, 0x1f74, 0x1f75, 0x1f76, 0x1f77, + 0x1f78, 0x1f79, 0x1f7a, 0x1f7b, 0x1f7c, 0x1f7d, 0x1f7e, 0x1f7f, + 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87, + 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87, + 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97, + 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97, + 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7, + 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7, + 0x1fb0, 0x1fb1, 0x1fb2, 0x1fb3, 0x1fb4, 0x1fb5, 0x1fb6, 0x1fb7, + 0x1fb0, 0x1fb1, 0x1f70, 0x1f71, 0x1fb3, 0x1fbd, 0x03b9, 0x1fbf, + 0x1fc0, 0x1fc1, 0x1fc2, 0x1fc3, 0x1fc4, 0x1fc5, 0x1fc6, 0x1fc7, + 0x1f72, 0x1f73, 0x1f74, 0x1f75, 0x1fc3, 0x1fcd, 0x1fce, 0x1fcf, + 0x1fd0, 0x1fd1, 0x1fd2, 0x1fd3, 0x1fd4, 0x1fd5, 0x1fd6, 0x1fd7, + 0x1fd0, 0x1fd1, 0x1f76, 0x1f77, 0x1fdc, 0x1fdd, 0x1fde, 0x1fdf, + 0x1fe0, 0x1fe1, 0x1fe2, 0x1fe3, 0x1fe4, 0x1fe5, 0x1fe6, 0x1fe7, + 0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b, 0x1fe5, 0x1fed, 0x1fee, 0x1fef, + 0x1ff0, 0x1ff1, 0x1ff2, 0x1ff3, 0x1ff4, 0x1ff5, 0x1ff6, 0x1ff7, + 0x1f78, 0x1f79, 0x1f7c, 0x1f7d, 0x1ff3, 0x1ffd, 0x1ffe, 0x1fff +}}; +static const UnicodeCaseTableVector caseTable21 = {{ + 0x2100, 0x2101, 0x2102, 0x2103, 0x2104, 0x2105, 0x2106, 0x2107, + 0x2108, 0x2109, 0x210a, 0x210b, 0x210c, 0x210d, 0x210e, 0x210f, + 0x2110, 0x2111, 0x2112, 0x2113, 0x2114, 0x2115, 0x2116, 0x2117, + 0x2118, 0x2119, 0x211a, 0x211b, 0x211c, 0x211d, 0x211e, 0x211f, + 0x2120, 0x2121, 0x2122, 0x2123, 0x2124, 0x2125, 0x03c9, 0x2127, + 0x2128, 0x2129, 0x006b, 0x00e5, 0x212c, 0x212d, 0x212e, 0x212f, + 0x2130, 0x2131, 0x2132, 0x2133, 0x2134, 0x2135, 0x2136, 0x2137, + 0x2138, 0x2139, 0x213a, 0x213b, 0x213c, 0x213d, 0x213e, 0x213f, + 0x2140, 0x2141, 0x2142, 0x2143, 0x2144, 0x2145, 0x2146, 0x2147, + 0x2148, 0x2149, 0x214a, 0x214b, 0x214c, 0x214d, 0x214e, 0x214f, + 0x2150, 0x2151, 0x2152, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, + 0x2158, 0x2159, 0x215a, 0x215b, 0x215c, 0x215d, 0x215e, 0x215f, + 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, + 0x2178, 0x2179, 0x217a, 0x217b, 0x217c, 0x217d, 0x217e, 0x217f, + 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, + 0x2178, 0x2179, 0x217a, 0x217b, 0x217c, 0x217d, 0x217e, 0x217f, + 0x2180, 0x2181, 0x2182, 0x2183, 0x2184, 0x2185, 0x2186, 0x2187, + 0x2188, 0x2189, 0x218a, 0x218b, 0x218c, 0x218d, 0x218e, 0x218f, + 0x2190, 0x2191, 0x2192, 0x2193, 0x2194, 0x2195, 0x2196, 0x2197, + 0x2198, 0x2199, 0x219a, 0x219b, 0x219c, 0x219d, 0x219e, 0x219f, + 0x21a0, 0x21a1, 0x21a2, 0x21a3, 0x21a4, 0x21a5, 0x21a6, 0x21a7, + 0x21a8, 0x21a9, 0x21aa, 0x21ab, 0x21ac, 0x21ad, 0x21ae, 0x21af, + 0x21b0, 0x21b1, 0x21b2, 0x21b3, 0x21b4, 0x21b5, 0x21b6, 0x21b7, + 0x21b8, 0x21b9, 0x21ba, 0x21bb, 0x21bc, 0x21bd, 0x21be, 0x21bf, + 0x21c0, 0x21c1, 0x21c2, 0x21c3, 0x21c4, 0x21c5, 0x21c6, 0x21c7, + 0x21c8, 0x21c9, 0x21ca, 0x21cb, 0x21cc, 0x21cd, 0x21ce, 0x21cf, + 0x21d0, 0x21d1, 0x21d2, 0x21d3, 0x21d4, 0x21d5, 0x21d6, 0x21d7, + 0x21d8, 0x21d9, 0x21da, 0x21db, 0x21dc, 0x21dd, 0x21de, 0x21df, + 0x21e0, 0x21e1, 0x21e2, 0x21e3, 0x21e4, 0x21e5, 0x21e6, 0x21e7, + 0x21e8, 0x21e9, 0x21ea, 0x21eb, 0x21ec, 0x21ed, 0x21ee, 0x21ef, + 0x21f0, 0x21f1, 0x21f2, 0x21f3, 0x21f4, 0x21f5, 0x21f6, 0x21f7, + 0x21f8, 0x21f9, 0x21fa, 0x21fb, 0x21fc, 0x21fd, 0x21fe, 0x21ff +}}; +static const UnicodeCaseTableVector caseTable24 = {{ + 0x2400, 0x2401, 0x2402, 0x2403, 0x2404, 0x2405, 0x2406, 0x2407, + 0x2408, 0x2409, 0x240a, 0x240b, 0x240c, 0x240d, 0x240e, 0x240f, + 0x2410, 0x2411, 0x2412, 0x2413, 0x2414, 0x2415, 0x2416, 0x2417, + 0x2418, 0x2419, 0x241a, 0x241b, 0x241c, 0x241d, 0x241e, 0x241f, + 0x2420, 0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, + 0x2428, 0x2429, 0x242a, 0x242b, 0x242c, 0x242d, 0x242e, 0x242f, + 0x2430, 0x2431, 0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, + 0x2438, 0x2439, 0x243a, 0x243b, 0x243c, 0x243d, 0x243e, 0x243f, + 0x2440, 0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, + 0x2448, 0x2449, 0x244a, 0x244b, 0x244c, 0x244d, 0x244e, 0x244f, + 0x2450, 0x2451, 0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, + 0x2458, 0x2459, 0x245a, 0x245b, 0x245c, 0x245d, 0x245e, 0x245f, + 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, + 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, + 0x2470, 0x2471, 0x2472, 0x2473, 0x2474, 0x2475, 0x2476, 0x2477, + 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f, + 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487, + 0x2488, 0x2489, 0x248a, 0x248b, 0x248c, 0x248d, 0x248e, 0x248f, + 0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, 0x2497, + 0x2498, 0x2499, 0x249a, 0x249b, 0x249c, 0x249d, 0x249e, 0x249f, + 0x24a0, 0x24a1, 0x24a2, 0x24a3, 0x24a4, 0x24a5, 0x24a6, 0x24a7, + 0x24a8, 0x24a9, 0x24aa, 0x24ab, 0x24ac, 0x24ad, 0x24ae, 0x24af, + 0x24b0, 0x24b1, 0x24b2, 0x24b3, 0x24b4, 0x24b5, 0x24d0, 0x24d1, + 0x24d2, 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9, + 0x24da, 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, + 0x24e2, 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, + 0x24d0, 0x24d1, 0x24d2, 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, + 0x24d8, 0x24d9, 0x24da, 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, + 0x24e0, 0x24e1, 0x24e2, 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7, + 0x24e8, 0x24e9, 0x24ea, 0x24eb, 0x24ec, 0x24ed, 0x24ee, 0x24ef, + 0x24f0, 0x24f1, 0x24f2, 0x24f3, 0x24f4, 0x24f5, 0x24f6, 0x24f7, + 0x24f8, 0x24f9, 0x24fa, 0x24fb, 0x24fc, 0x24fd, 0x24fe, 0x24ff +}}; +static const UnicodeCaseTableVector caseTableff = {{ + 0xff00, 0xff01, 0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07, + 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, + 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, + 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, + 0xff20, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, + 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, + 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, + 0xff58, 0xff59, 0xff5a, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f, + 0xff40, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, + 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, + 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, + 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xff5e, 0xff5f, + 0xff60, 0xff61, 0xff62, 0xff63, 0xff64, 0xff65, 0xff66, 0xff67, + 0xff68, 0xff69, 0xff6a, 0xff6b, 0xff6c, 0xff6d, 0xff6e, 0xff6f, + 0xff70, 0xff71, 0xff72, 0xff73, 0xff74, 0xff75, 0xff76, 0xff77, + 0xff78, 0xff79, 0xff7a, 0xff7b, 0xff7c, 0xff7d, 0xff7e, 0xff7f, + 0xff80, 0xff81, 0xff82, 0xff83, 0xff84, 0xff85, 0xff86, 0xff87, + 0xff88, 0xff89, 0xff8a, 0xff8b, 0xff8c, 0xff8d, 0xff8e, 0xff8f, + 0xff90, 0xff91, 0xff92, 0xff93, 0xff94, 0xff95, 0xff96, 0xff97, + 0xff98, 0xff99, 0xff9a, 0xff9b, 0xff9c, 0xff9d, 0xff9e, 0xff9f, + 0xffa0, 0xffa1, 0xffa2, 0xffa3, 0xffa4, 0xffa5, 0xffa6, 0xffa7, + 0xffa8, 0xffa9, 0xffaa, 0xffab, 0xffac, 0xffad, 0xffae, 0xffaf, + 0xffb0, 0xffb1, 0xffb2, 0xffb3, 0xffb4, 0xffb5, 0xffb6, 0xffb7, + 0xffb8, 0xffb9, 0xffba, 0xffbb, 0xffbc, 0xffbd, 0xffbe, 0xffbf, + 0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc4, 0xffc5, 0xffc6, 0xffc7, + 0xffc8, 0xffc9, 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf, + 0xffd0, 0xffd1, 0xffd2, 0xffd3, 0xffd4, 0xffd5, 0xffd6, 0xffd7, + 0xffd8, 0xffd9, 0xffda, 0xffdb, 0xffdc, 0xffdd, 0xffde, 0xffdf, + 0xffe0, 0xffe1, 0xffe2, 0xffe3, 0xffe4, 0xffe5, 0xffe6, 0xffe7, + 0xffe8, 0xffe9, 0xffea, 0xffeb, 0xffec, 0xffed, 0xffee, 0xffef, + 0xfff0, 0xfff1, 0xfff2, 0xfff3, 0xfff4, 0xfff5, 0xfff6, 0xfff7, + 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc, 0xfffd, 0xfffe, 0xffff +}}; +static const UnicodeCaseTableVector *caseTable[256] = { + &caseTable00, + &caseTable01, + &caseTable02, + &caseTable03, + &caseTable04, + &caseTable05, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + &caseTable1e, + &caseTable1f, + NULL, + &caseTable21, + NULL, + NULL, + &caseTable24, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + &caseTableff +}; + +static inline char getType(Unicode c) { + int i; + char type; + + if (c > 0xffff) { + type = 'X'; + } else { + i = (c >> 8) & 0xff; + if ((type = typeTable[i].type) == 'X') { + type = typeTable[i].vector[c & 0xff]; + } + } + return type; +} + +GBool unicodeTypeL(Unicode c) { + return getType(c) == 'L'; +} + +GBool unicodeTypeR(Unicode c) { + return getType(c) == 'R'; +} + +Unicode unicodeToUpper(Unicode c) { + int i; + + if (c > 0xffff) { + return c; + } + i = (c >> 8) & 0xff; + if (caseTable[i]) { + return caseTable[i]->codes[c & 0xff]; + } + return c; +} + +#define UNICODE_LAST_CHAR 0x10FFFF +#define UNICODE_MAX_TABLE_INDEX (UNICODE_LAST_CHAR / 256 + 1) +// large empty block between U+2FA1D and U+E0001 +#define UNICODE_LAST_CHAR_PART1 0x2FAFF +#define UNICODE_LAST_PAGE_PART1 (UNICODE_LAST_CHAR_PART1 / 256) +#define UNICODE_PART2_START 0xE0000 + +#include "UnicodeCClassTables.h" +#include "UnicodeCompTables.h" +#include "UnicodeDecompTables.h" + +#define CC_PART1(Page, Char) \ + ((combining_class_table_part1[Page] >= UNICODE_MAX_TABLE_INDEX) \ + ? (combining_class_table_part1[Page] - UNICODE_MAX_TABLE_INDEX) \ + : (cclass_data[combining_class_table_part1[Page]][Char])) + +#define CC_PART2(Page, Char) \ + ((combining_class_table_part2[Page] >= UNICODE_MAX_TABLE_INDEX) \ + ? (combining_class_table_part2[Page] - UNICODE_MAX_TABLE_INDEX) \ + : (cclass_data[combining_class_table_part2[Page]][Char])) + +#define COMBINING_CLASS(u) (((u) <= UNICODE_LAST_CHAR_PART1) \ + ? CC_PART1((u) / 256, (u) % 256) \ + : (((u) >= UNICODE_PART2_START && (u) <= UNICODE_LAST_CHAR) \ + ? CC_PART2(((u) - UNICODE_PART2_START) / 256, (u) % 256) \ + : 0)) + +// Write the compatibility decomposition of @u into @buf, returning the number +// of characters written. @buf may be NULL, in which case the length of the +// decomposition is returned but nothing is written. If @u is its own +// decomposition, write @u into @buf and return 1. +static int decomp_compat(Unicode u, Unicode *buf) { + // decomposition tables stored as lists {character, decomp_length, offset} + // so we do a binary search + int start = 0, end = DECOMP_TABLE_LENGTH; + if (u >= decomp_table[start].character + && u <= decomp_table[end - 1].character) + while (gTrue) { + int midpoint = (start + end) / 2; + if (u == decomp_table[midpoint].character) { + int offset = decomp_table[midpoint].offset; + if (offset == -1) + break; + else { + int length = decomp_table[midpoint].length, i; + if (buf) + for (i = 0; i < length; ++i) + buf[i] = decomp_expansion[offset + i]; + return length; + } + } else if (midpoint == start) + break; + else if (u > decomp_table[midpoint].character) + start = midpoint; + else + end = midpoint; + } + if (buf) + *buf = u; + return 1; +} + +#define CI(Page, Char) \ + ((compose_table[Page] >= UNICODE_MAX_TABLE_INDEX) \ + ? (compose_table[Page] - UNICODE_MAX_TABLE_INDEX) \ + : (compose_data[compose_table[Page]][Char])) + +#define COMPOSE_INDEX(u) \ + ((((u) / 256) > (COMPOSE_TABLE_LAST)) ? 0 : CI((u) / 256, (u) % 256)) + +// If @add combines with @base, write the combination to @out and return +// gTrue. Otherwise return gFalse. +static GBool combine(Unicode base, Unicode add, Unicode *out) { + unsigned short idx_base, idx_add; + + idx_base = COMPOSE_INDEX(base); + if (idx_base >= COMPOSE_FIRST_SINGLE_START + && idx_base < COMPOSE_SECOND_START) { + if (compose_first_single[idx_base - COMPOSE_FIRST_SINGLE_START][0] + == add) { + *out = compose_first_single[idx_base - COMPOSE_FIRST_SINGLE_START][1]; + return gTrue; + } else + return gFalse; + } + + idx_add = COMPOSE_INDEX(add); + if (idx_add >= COMPOSE_SECOND_SINGLE_START) { + if (compose_second_single[idx_add - COMPOSE_SECOND_SINGLE_START][0] + == base) { + *out = compose_second_single[idx_add - COMPOSE_SECOND_SINGLE_START][1]; + return gTrue; + } else + return gFalse; + } + + if (idx_base >= COMPOSE_FIRST_START && idx_base < COMPOSE_FIRST_SINGLE_START + && idx_add >= COMPOSE_SECOND_START + && idx_add < COMPOSE_SECOND_SINGLE_START) { + Unicode o = compose_array[idx_base - COMPOSE_FIRST_START] + [idx_add - COMPOSE_SECOND_START]; + if (o) { + *out = o; + return gTrue; + } + } + + return gFalse; +} + +#define HANGUL_S_BASE 0xAC00 +#define HANGUL_L_BASE 0x1100 +#define HANGUL_V_BASE 0x1161 +#define HANGUL_T_BASE 0x11A7 +#define HANGUL_L_COUNT 19 +#define HANGUL_V_COUNT 21 +#define HANGUL_T_COUNT 28 +#define HANGUL_S_COUNT (HANGUL_L_COUNT * HANGUL_V_COUNT * HANGUL_T_COUNT) +#define HANGUL_N_COUNT (HANGUL_V_COUNT * HANGUL_T_COUNT) +#define HANGUL_IS_L(u) (((u) >= HANGUL_L_BASE) \ + && ((u) < HANGUL_L_BASE + HANGUL_L_COUNT)) +#define HANGUL_IS_V(u) (((u) >= HANGUL_V_BASE) \ + && ((u) < HANGUL_V_BASE + HANGUL_V_COUNT)) +#define HANGUL_IS_T(u) (((u) >= HANGUL_T_BASE) \ + && ((u) < HANGUL_T_BASE + HANGUL_T_COUNT)) +#define HANGUL_IS_SYLLABLE(u) (((u) >= HANGUL_S_BASE) \ + && ((u) < HANGUL_S_BASE + HANGUL_S_COUNT)) +#define HANGUL_SYLLABLE_IS_LV(u) (((u) - HANGUL_S_BASE) % HANGUL_T_COUNT == 0) +#define IS_HANGUL(u) (HANGUL_IS_L(u) || HANGUL_IS_V(u) || HANGUL_IS_T(u) \ + || HANGUL_IS_SYLLABLE(u)) +#define HANGUL_COMPOSE_L_V(l, v) (HANGUL_S_BASE + (HANGUL_T_COUNT * \ + (((v) - HANGUL_V_BASE) + (HANGUL_V_COUNT * ((l) - HANGUL_L_BASE))))) +#define HANGUL_COMPOSE_LV_T(lv, t) ((lv) + ((t) - HANGUL_T_BASE)) + +// Converts Unicode string @in of length @len to its normalization in form +// NFKC (compatibility decomposition + canonical composition). The length of +// the resulting Unicode string is returned in @out_len. If non-NULL, @indices +// is assigned the location of a newly-allocated array of length @out_len + 1, +// for each character in the normalized string giving the index in @in of the +// corresponding unnormalized character. @indices is not guaranteed monotone or +// onto. +Unicode *unicodeNormalizeNFKC(Unicode *in, int len, + int *out_len, int **indices) { + Unicode *out; + int i, o, *classes, *idx = NULL; + + for (i = 0, o = 0; i < len; ++i) { + if (HANGUL_IS_L(in[i]) || HANGUL_IS_SYLLABLE(in[i])) { + o += 1; + } else + o += decomp_compat(in[i], NULL); + } + + out = (Unicode *) gmallocn(o, sizeof(Unicode)); + classes = (int *) gmallocn(o, sizeof(int)); + if (indices) + idx = (int *) gmallocn(o + 1, sizeof(int)); + + for (i = 0, o = 0; i < len; ) { + Unicode u = in[i]; + if (IS_HANGUL(u)) { + if (HANGUL_IS_L(u)) { + Unicode l = u; + if (i+1 < len && HANGUL_IS_V(in[i+1])) { + Unicode lv = HANGUL_COMPOSE_L_V(l, in[++i]); + if (i+1 < len && HANGUL_IS_T(in[i+1])) + out[o] = HANGUL_COMPOSE_LV_T(lv, in[++i]); + else + out[o] = lv; + } else + out[o] = l; + } else if (HANGUL_SYLLABLE_IS_LV(u)) { + Unicode lv = u; + if (i+1 < len && HANGUL_IS_T(in[i+1])) + out[o] = HANGUL_COMPOSE_LV_T(lv, in[++i]); + else + out[o] = lv; + } else + out[o] = u; + if (indices) + idx[o] = i; + ++i; ++o; + } else { + int j, p, q, r, s, dlen; + // write compatibility decompositions into out (we have enough space) + // chomp in until a starter is reached + for (j = i, p = o; j < len; ++j) { + u = in[j]; + if (j != i && COMBINING_CLASS(u) == 0) + break; + dlen = decomp_compat(u, out + p); + for (q = p; q < p + dlen; ++q) { + classes[q] = COMBINING_CLASS(out[q]); + if (indices) + idx[q] = j; + } + p += dlen; + } + // put out[o, p) in canonical ordering + for (q = o + 1; q < p; ++q) + for (r = q; r > o + 1; --r) { // FIXME worth using a better sort? + int swap; + if (classes[r] >= classes[r-1]) + break; + u = out[r]; out[r] = out[r - 1]; out[r - 1] = u; + swap = classes[r]; classes[r] = classes[r - 1]; classes[r - 1] = swap; + if (indices) { + swap = idx[r]; + idx[r] = idx[r - 1]; + idx[r - 1] = swap; + } + } + // canonical compose out[o, p) + for (q = o + 1; q < p; ++q) + if (!combine(out[o], out[q], &out[o])) + break; + // move out[q, p) back to [o+1, ?) + if (q != o + 1) + for (r = q, s = o + 1; r < p; ++r, ++s) { + out[s] = out[r]; + if (indices) + idx[s] = idx[r]; + } + else + s = p; + i = j; o = s; + } + } + + *out_len = o; + gfree(classes); + if (indices) { + idx[o] = len; + *indices = idx; + } + return out; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeTypeTable.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeTypeTable.h new file mode 100644 index 00000000000..19cd75d17f2 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/UnicodeTypeTable.h @@ -0,0 +1,37 @@ +//======================================================================== +// +// UnicodeTypeTable.h +// +// Copyright 2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2006 Ed Catmur <ed@catmur.co.uk> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef UNICODETYPETABLE_H +#define UNICODETYPETABLE_H + +#include "goo/gtypes.h" + +extern GBool unicodeTypeL(Unicode c); + +extern GBool unicodeTypeR(Unicode c); + +extern Unicode unicodeToUpper(Unicode c); + +extern Unicode *unicodeNormalizeNFKC(Unicode *in, int len, + int *out_len, int **offsets); + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/ViewerPreferences.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/ViewerPreferences.cc new file mode 100644 index 00000000000..cba8d0ac512 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/ViewerPreferences.cc @@ -0,0 +1,117 @@ +//======================================================================== +// +// ViewerPreferences.cc +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2011 Pino Toscano <pino@kde.org> +// +//======================================================================== + +#include <config.h> + +#include "ViewerPreferences.h" + +#include "Object.h" +#include "Dict.h" + +ViewerPreferences::ViewerPreferences(Dict *prefDict) +{ + init(); + + Object obj; + + if (prefDict->lookup("HideToolbar", &obj)->isBool()) { + hideToolbar = obj.getBool(); + } + obj.free(); + + if (prefDict->lookup("HideMenubar", &obj)->isBool()) { + hideMenubar = obj.getBool(); + } + obj.free(); + + if (prefDict->lookup("HideWindowUI", &obj)->isBool()) { + hideWindowUI = obj.getBool(); + } + obj.free(); + + if (prefDict->lookup("FitWindow", &obj)->isBool()) { + fitWindow = obj.getBool(); + } + obj.free(); + + if (prefDict->lookup("CenterWindow", &obj)->isBool()) { + centerWindow = obj.getBool(); + } + obj.free(); + + if (prefDict->lookup("DisplayDocTitle", &obj)->isBool()) { + displayDocTitle = obj.getBool(); + } + obj.free(); + + if (prefDict->lookup("NonFullScreenPageMode", &obj)->isName()) { + const char *mode = obj.getName(); + if (!strcmp(mode, "UseNone")) { + nonFullScreenPageMode = nfpmUseNone; + } else if (!strcmp(mode, "UseOutlines")) { + nonFullScreenPageMode = nfpmUseOutlines; + } else if (!strcmp(mode, "UseThumbs")) { + nonFullScreenPageMode = nfpmUseThumbs; + } else if (!strcmp(mode, "UseOC")) { + nonFullScreenPageMode = nfpmUseOC; + } + } + obj.free(); + + if (prefDict->lookup("Direction", &obj)->isName()) { + const char *dir = obj.getName(); + if (!strcmp(dir, "L2R")) { + direction = directionL2R; + } else if (!strcmp(dir, "R2L")) { + direction = directionR2L; + } + } + obj.free(); + + if (prefDict->lookup("PrintScaling", &obj)->isName()) { + const char *ps = obj.getName(); + if (!strcmp(ps, "None")) { + printScaling = printScalingNone; + } else if (!strcmp(ps, "AppDefault")) { + printScaling = printScalingAppDefault; + } + } + obj.free(); + + if (prefDict->lookup("Duplex", &obj)->isName()) { + const char *d = obj.getName(); + if (!strcmp(d, "Simplex")) { + duplex = duplexSimplex; + } else if (!strcmp(d, "DuplexFlipShortEdge")) { + duplex = duplexDuplexFlipShortEdge; + } else if (!strcmp(d, "DuplexFlipLongEdge")) { + duplex = duplexDuplexFlipLongEdge; + } + } + obj.free(); +} + +ViewerPreferences::~ViewerPreferences() +{ +} + +void ViewerPreferences::init() +{ + hideToolbar = gFalse; + hideMenubar = gFalse; + hideWindowUI = gFalse; + fitWindow = gFalse; + centerWindow = gFalse; + displayDocTitle = gFalse; + nonFullScreenPageMode = nfpmUseNone; + direction = directionL2R; + printScaling = printScalingAppDefault; + duplex = duplexNone; +} diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/ViewerPreferences.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/ViewerPreferences.h new file mode 100644 index 00000000000..8cdc4d40a73 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/ViewerPreferences.h @@ -0,0 +1,76 @@ +//======================================================================== +// +// ViewerPreferences.h +// +// This file is licensed under the GPLv2 or later +// +// Copyright 2011 Pino Toscano <pino@kde.org> +// +//======================================================================== + +#ifndef VIEWERPREFERENCES_H +#define VIEWERPREFERENCES_H + +#include "goo/gtypes.h" + +class Dict; + +//------------------------------------------------------------------------ +// ViewerPreferences +//------------------------------------------------------------------------ + +class ViewerPreferences { +public: + + enum NonFullScreenPageMode { + nfpmUseNone, + nfpmUseOutlines, + nfpmUseThumbs, + nfpmUseOC + }; + enum Direction { + directionL2R, + directionR2L + }; + enum PrintScaling { + printScalingNone, + printScalingAppDefault + }; + enum Duplex { + duplexNone, + duplexSimplex, + duplexDuplexFlipShortEdge, + duplexDuplexFlipLongEdge + }; + + ViewerPreferences(Dict *prefDict); + ~ViewerPreferences(); + + GBool getHideToolbar() const { return hideToolbar; } + GBool getHideMenubar() const { return hideMenubar; } + GBool getHideWindowUI() const { return hideWindowUI; } + GBool getFitWindow() const { return fitWindow; } + GBool getCenterWindow() const { return centerWindow; } + GBool getDisplayDocTitle() const { return displayDocTitle; } + NonFullScreenPageMode getNonFullScreenPageMode() const { return nonFullScreenPageMode; } + Direction getDirection() const { return direction; } + PrintScaling getPrintScaling() const { return printScaling; } + Duplex getDuplex() const { return duplex; } + +private: + + void init(); + + GBool hideToolbar; + GBool hideMenubar; + GBool hideWindowUI; + GBool fitWindow; + GBool centerWindow; + GBool displayDocTitle; + NonFullScreenPageMode nonFullScreenPageMode; + Direction direction; + PrintScaling printScaling; + Duplex duplex; +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/XRef.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/XRef.cc new file mode 100644 index 00000000000..970a00bf25a --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/XRef.cc @@ -0,0 +1,1351 @@ +//======================================================================== +// +// XRef.cc +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Dan Sheridan <dan.sheridan@postman.org.uk> +// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> +// Copyright (C) 2006, 2008, 2010 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2007-2008 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2007 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2009, 2010 Ilya Gorenbein <igorenbein@finjan.com> +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include <config.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include <stdlib.h> +#include <stddef.h> +#include <string.h> +#include <ctype.h> +#include <limits.h> +#include "goo/gmem.h" +#include "Object.h" +#include "Stream.h" +#include "Lexer.h" +#include "Parser.h" +#include "Dict.h" +#include "Error.h" +#include "ErrorCodes.h" +#include "XRef.h" +#include "PopplerCache.h" + +//------------------------------------------------------------------------ +// Permission bits +// Note that the PDF spec uses 1 base (eg bit 3 is 1<<2) +//------------------------------------------------------------------------ + +#define permPrint (1<<2) // bit 3 +#define permChange (1<<3) // bit 4 +#define permCopy (1<<4) // bit 5 +#define permNotes (1<<5) // bit 6 +#define permFillForm (1<<8) // bit 9 +#define permAccessibility (1<<9) // bit 10 +#define permAssemble (1<<10) // bit 11 +#define permHighResPrint (1<<11) // bit 12 +#define defPermFlags 0xfffc + +//------------------------------------------------------------------------ +// ObjectStream +//------------------------------------------------------------------------ + +class ObjectStream { +public: + + // Create an object stream, using object number <objStrNum>, + // generation 0. + ObjectStream(XRef *xref, int objStrNumA); + + GBool isOk() { return ok; } + + ~ObjectStream(); + + // Return the object number of this object stream. + int getObjStrNum() { return objStrNum; } + + // Get the <objIdx>th object from this stream, which should be + // object number <objNum>, generation 0. + Object *getObject(int objIdx, int objNum, Object *obj); + +private: + + int objStrNum; // object number of the object stream + int nObjects; // number of objects in the stream + Object *objs; // the objects (length = nObjects) + int *objNums; // the object numbers (length = nObjects) + GBool ok; +}; + +class ObjectStreamKey : public PopplerCacheKey +{ + public: + ObjectStreamKey(int num) : objStrNum(num) + { + } + + bool operator==(const PopplerCacheKey &key) const + { + const ObjectStreamKey *k = static_cast<const ObjectStreamKey*>(&key); + return objStrNum == k->objStrNum; + } + + const int objStrNum; +}; + +class ObjectStreamItem : public PopplerCacheItem +{ + public: + ObjectStreamItem(ObjectStream *objStr) : objStream(objStr) + { + } + + ~ObjectStreamItem() + { + delete objStream; + } + + ObjectStream *objStream; +}; + +ObjectStream::ObjectStream(XRef *xref, int objStrNumA) { + Stream *str; + Parser *parser; + int *offsets; + Object objStr, obj1, obj2; + int first, i; + + objStrNum = objStrNumA; + nObjects = 0; + objs = NULL; + objNums = NULL; + ok = gFalse; + + if (!xref->fetch(objStrNum, 0, &objStr)->isStream()) { + goto err1; + } + + if (!objStr.streamGetDict()->lookup("N", &obj1)->isInt()) { + obj1.free(); + goto err1; + } + nObjects = obj1.getInt(); + obj1.free(); + if (nObjects <= 0) { + goto err1; + } + + if (!objStr.streamGetDict()->lookup("First", &obj1)->isInt()) { + obj1.free(); + goto err1; + } + first = obj1.getInt(); + obj1.free(); + if (first < 0) { + goto err1; + } + + // this is an arbitrary limit to avoid integer overflow problems + // in the 'new Object[nObjects]' call (Acrobat apparently limits + // object streams to 100-200 objects) + if (nObjects > 1000000) { + error(-1, "Too many objects in an object stream"); + goto err1; + } + objs = new Object[nObjects]; + objNums = (int *)gmallocn(nObjects, sizeof(int)); + offsets = (int *)gmallocn(nObjects, sizeof(int)); + + // parse the header: object numbers and offsets + objStr.streamReset(); + obj1.initNull(); + str = new EmbedStream(objStr.getStream(), &obj1, gTrue, first); + parser = new Parser(xref, new Lexer(xref, str), gFalse); + for (i = 0; i < nObjects; ++i) { + parser->getObj(&obj1); + parser->getObj(&obj2); + if (!obj1.isInt() || !obj2.isInt()) { + obj1.free(); + obj2.free(); + delete parser; + gfree(offsets); + goto err1; + } + objNums[i] = obj1.getInt(); + offsets[i] = obj2.getInt(); + obj1.free(); + obj2.free(); + if (objNums[i] < 0 || offsets[i] < 0 || + (i > 0 && offsets[i] < offsets[i-1])) { + delete parser; + gfree(offsets); + goto err1; + } + } + while (str->getChar() != EOF) ; + delete parser; + + // skip to the first object - this shouldn't be necessary because + // the First key is supposed to be equal to offsets[0], but just in + // case... + for (i = first; i < offsets[0]; ++i) { + objStr.getStream()->getChar(); + } + + // parse the objects + for (i = 0; i < nObjects; ++i) { + obj1.initNull(); + if (i == nObjects - 1) { + str = new EmbedStream(objStr.getStream(), &obj1, gFalse, 0); + } else { + str = new EmbedStream(objStr.getStream(), &obj1, gTrue, + offsets[i+1] - offsets[i]); + } + parser = new Parser(xref, new Lexer(xref, str), gFalse); + parser->getObj(&objs[i]); + while (str->getChar() != EOF) ; + delete parser; + } + + gfree(offsets); + ok = gTrue; + + err1: + objStr.free(); +} + +ObjectStream::~ObjectStream() { + int i; + + if (objs) { + for (i = 0; i < nObjects; ++i) { + objs[i].free(); + } + delete[] objs; + } + gfree(objNums); +} + +Object *ObjectStream::getObject(int objIdx, int objNum, Object *obj) { + if (objIdx < 0 || objIdx >= nObjects || objNum != objNums[objIdx]) { + return obj->initNull(); + } + return objs[objIdx].copy(obj); +} + +//------------------------------------------------------------------------ +// XRef +//------------------------------------------------------------------------ + +void XRef::init() { + ok = gTrue; + errCode = errNone; + entries = NULL; + capacity = 0; + size = 0; + streamEnds = NULL; + streamEndsLen = 0; + objStrs = new PopplerCache(5); + mainXRefEntriesOffset = 0; + xRefStream = gFalse; +} + +XRef::XRef() { + init(); +} + +XRef::XRef(BaseStream *strA, Guint pos, Guint mainXRefEntriesOffsetA, GBool *wasReconstructed, GBool reconstruct) { + Object obj; + + init(); + mainXRefEntriesOffset = mainXRefEntriesOffsetA; + + encrypted = gFalse; + permFlags = defPermFlags; + ownerPasswordOk = gFalse; + + // read the trailer + str = strA; + start = str->getStart(); + prevXRefOffset = pos; + + if (reconstruct && !(ok = constructXRef(wasReconstructed))) + { + errCode = errDamaged; + return; + } + else + { + // if there was a problem with the 'startxref' position, try to + // reconstruct the xref table + if (prevXRefOffset == 0) { + if (!(ok = constructXRef(wasReconstructed))) { + errCode = errDamaged; + return; + } + + // read the xref table + } else { + std::vector<Guint> followedXRefStm; + readXRef(&prevXRefOffset, &followedXRefStm); + + // if there was a problem with the xref table, + // try to reconstruct it + if (!ok) { + if (!(ok = constructXRef(wasReconstructed))) { + errCode = errDamaged; + return; + } + } + } + + // set size to (at least) the size specified in trailer dict + trailerDict.dictLookupNF("Size", &obj); + if (!obj.isInt()) { + error(-1, "No valid XRef size in trailer"); + } else { + if (obj.getInt() > size) { + if (resize(obj.getInt()) != obj.getInt()) { + if (!(ok = constructXRef(wasReconstructed))) { + obj.free(); + errCode = errDamaged; + return; + } + } + } + } + obj.free(); + + // get the root dictionary (catalog) object + trailerDict.dictLookupNF("Root", &obj); + if (obj.isRef()) { + rootNum = obj.getRefNum(); + rootGen = obj.getRefGen(); + obj.free(); + } else { + obj.free(); + if (!(ok = constructXRef(wasReconstructed))) { + errCode = errDamaged; + return; + } + } + } + // now set the trailer dictionary's xref pointer so we can fetch + // indirect objects from it + trailerDict.getDict()->setXRef(this); +} + +XRef::~XRef() { + for(int i=0; i<size; i++) { + entries[i].obj.free (); + } + gfree(entries); + + trailerDict.free(); + if (streamEnds) { + gfree(streamEnds); + } + if (objStrs) { + delete objStrs; + } +} + +int XRef::reserve(int newSize) +{ + if (newSize > capacity) { + + int realNewSize; + for (realNewSize = capacity ? 2 * capacity : 1024; + newSize > realNewSize && realNewSize > 0; + realNewSize <<= 1) ; + if ((realNewSize < 0) || + (realNewSize >= INT_MAX / (int)sizeof(XRefEntry))) { + return 0; + } + + void *p = greallocn_checkoverflow(entries, realNewSize, sizeof(XRefEntry)); + if (p == NULL) { + return 0; + } + + entries = (XRefEntry *) p; + capacity = realNewSize; + + } + + return capacity; +} + +int XRef::resize(int newSize) +{ + if (newSize > size) { + + if (reserve(newSize) < newSize) return size; + + for (int i = size; i < newSize; ++i) { + entries[i].offset = 0xffffffff; + entries[i].type = xrefEntryNone; + entries[i].obj.initNull (); + entries[i].updated = false; + entries[i].gen = 0; + } + } else { + for (int i = newSize; i < size; i++) { + entries[i].obj.free (); + } + } + + size = newSize; + + return size; +} + +// Read one xref table section. Also reads the associated trailer +// dictionary, and returns the prev pointer (if any). +GBool XRef::readXRef(Guint *pos, std::vector<Guint> *followedXRefStm) { + Parser *parser; + Object obj; + GBool more; + + // start up a parser, parse one token + obj.initNull(); + parser = new Parser(NULL, + new Lexer(NULL, + str->makeSubStream(start + *pos, gFalse, 0, &obj)), + gTrue); + parser->getObj(&obj); + + // parse an old-style xref table + if (obj.isCmd("xref")) { + obj.free(); + more = readXRefTable(parser, pos, followedXRefStm); + + // parse an xref stream + } else if (obj.isInt()) { + obj.free(); + if (!parser->getObj(&obj)->isInt()) { + goto err1; + } + obj.free(); + if (!parser->getObj(&obj)->isCmd("obj")) { + goto err1; + } + obj.free(); + if (!parser->getObj(&obj)->isStream()) { + goto err1; + } + if (trailerDict.isNone()) { + xRefStream = gTrue; + } + more = readXRefStream(obj.getStream(), pos); + obj.free(); + + } else { + goto err1; + } + + delete parser; + return more; + + err1: + obj.free(); + delete parser; + ok = gFalse; + return gFalse; +} + +GBool XRef::readXRefTable(Parser *parser, Guint *pos, std::vector<Guint> *followedXRefStm) { + XRefEntry entry; + GBool more; + Object obj, obj2; + Guint pos2; + int first, n, i; + + while (1) { + parser->getObj(&obj); + if (obj.isCmd("trailer")) { + obj.free(); + break; + } + if (!obj.isInt()) { + goto err1; + } + first = obj.getInt(); + obj.free(); + if (!parser->getObj(&obj)->isInt()) { + goto err1; + } + n = obj.getInt(); + obj.free(); + if (first < 0 || n < 0 || first + n < 0) { + goto err0; + } + if (first + n > size) { + if (resize(first + n) != first + n) { + error(-1, "Invalid 'obj' parameters'"); + goto err0; + } + } + for (i = first; i < first + n; ++i) { + if (!parser->getObj(&obj)->isInt()) { + goto err1; + } + entry.offset = (Guint)obj.getInt(); + obj.free(); + if (!parser->getObj(&obj)->isInt()) { + goto err1; + } + entry.gen = obj.getInt(); + entry.obj.initNull (); + entry.updated = false; + obj.free(); + parser->getObj(&obj); + if (obj.isCmd("n")) { + entry.type = xrefEntryUncompressed; + } else if (obj.isCmd("f")) { + entry.type = xrefEntryFree; + } else { + goto err1; + } + obj.free(); + if (entries[i].offset == 0xffffffff) { + entries[i] = entry; + // PDF files of patents from the IBM Intellectual Property + // Network have a bug: the xref table claims to start at 1 + // instead of 0. + if (i == 1 && first == 1 && + entries[1].offset == 0 && entries[1].gen == 65535 && + entries[1].type == xrefEntryFree) { + i = first = 0; + entries[0] = entries[1]; + entries[1].offset = 0xffffffff; + } + } + } + } + + // read the trailer dictionary + if (!parser->getObj(&obj)->isDict()) { + goto err1; + } + + // get the 'Prev' pointer + obj.getDict()->lookupNF("Prev", &obj2); + if (obj2.isInt()) { + *pos = (Guint)obj2.getInt(); + more = gTrue; + } else if (obj2.isRef()) { + // certain buggy PDF generators generate "/Prev NNN 0 R" instead + // of "/Prev NNN" + *pos = (Guint)obj2.getRefNum(); + more = gTrue; + } else { + more = gFalse; + } + obj2.free(); + + // save the first trailer dictionary + if (trailerDict.isNone()) { + obj.copy(&trailerDict); + } + + // check for an 'XRefStm' key + if (obj.getDict()->lookup("XRefStm", &obj2)->isInt()) { + pos2 = (Guint)obj2.getInt(); + for (size_t i = 0; ok == gTrue && i < followedXRefStm->size(); ++i) { + if (followedXRefStm->at(i) == pos2) { + ok = gFalse; + } + } + if (ok) { + followedXRefStm->push_back(pos2); + readXRef(&pos2, followedXRefStm); + } + if (!ok) { + obj2.free(); + goto err1; + } + } + obj2.free(); + + obj.free(); + return more; + + err1: + obj.free(); + err0: + ok = gFalse; + return gFalse; +} + +GBool XRef::readXRefStream(Stream *xrefStr, Guint *pos) { + Dict *dict; + int w[3]; + GBool more; + Object obj, obj2, idx; + int newSize, first, n, i; + + dict = xrefStr->getDict(); + + if (!dict->lookupNF("Size", &obj)->isInt()) { + goto err1; + } + newSize = obj.getInt(); + obj.free(); + if (newSize < 0) { + goto err1; + } + if (newSize > size) { + if (resize(newSize) != newSize) { + error(-1, "Invalid 'size' parameter"); + goto err0; + } + } + + if (!dict->lookupNF("W", &obj)->isArray() || + obj.arrayGetLength() < 3) { + goto err1; + } + for (i = 0; i < 3; ++i) { + if (!obj.arrayGet(i, &obj2)->isInt()) { + obj2.free(); + goto err1; + } + w[i] = obj2.getInt(); + obj2.free(); + if (w[i] < 0 || w[i] > 4) { + goto err1; + } + } + obj.free(); + + xrefStr->reset(); + dict->lookupNF("Index", &idx); + if (idx.isArray()) { + for (i = 0; i+1 < idx.arrayGetLength(); i += 2) { + if (!idx.arrayGet(i, &obj)->isInt()) { + idx.free(); + goto err1; + } + first = obj.getInt(); + obj.free(); + if (!idx.arrayGet(i+1, &obj)->isInt()) { + idx.free(); + goto err1; + } + n = obj.getInt(); + obj.free(); + if (first < 0 || n < 0 || + !readXRefStreamSection(xrefStr, w, first, n)) { + idx.free(); + goto err0; + } + } + } else { + if (!readXRefStreamSection(xrefStr, w, 0, newSize)) { + idx.free(); + goto err0; + } + } + idx.free(); + + dict->lookupNF("Prev", &obj); + if (obj.isInt()) { + *pos = (Guint)obj.getInt(); + more = gTrue; + } else { + more = gFalse; + } + obj.free(); + if (trailerDict.isNone()) { + trailerDict.initDict(dict); + } + + return more; + + err1: + obj.free(); + err0: + ok = gFalse; + return gFalse; +} + +GBool XRef::readXRefStreamSection(Stream *xrefStr, int *w, int first, int n) { + Guint offset; + int type, gen, c, i, j; + + if (first + n < 0) { + return gFalse; + } + if (first + n > size) { + if (resize(first + n) != size) { + error(-1, "Invalid 'size' inside xref table"); + return gFalse; + } + } + for (i = first; i < first + n; ++i) { + if (w[0] == 0) { + type = 1; + } else { + for (type = 0, j = 0; j < w[0]; ++j) { + if ((c = xrefStr->getChar()) == EOF) { + return gFalse; + } + type = (type << 8) + c; + } + } + for (offset = 0, j = 0; j < w[1]; ++j) { + if ((c = xrefStr->getChar()) == EOF) { + return gFalse; + } + offset = (offset << 8) + c; + } + for (gen = 0, j = 0; j < w[2]; ++j) { + if ((c = xrefStr->getChar()) == EOF) { + return gFalse; + } + gen = (gen << 8) + c; + } + if (entries[i].offset == 0xffffffff) { + switch (type) { + case 0: + entries[i].offset = offset; + entries[i].gen = gen; + entries[i].type = xrefEntryFree; + break; + case 1: + entries[i].offset = offset; + entries[i].gen = gen; + entries[i].type = xrefEntryUncompressed; + break; + case 2: + entries[i].offset = offset; + entries[i].gen = gen; + entries[i].type = xrefEntryCompressed; + break; + default: + return gFalse; + } + } + } + + return gTrue; +} + +// Attempt to construct an xref table for a damaged file. +GBool XRef::constructXRef(GBool *wasReconstructed) { + Parser *parser; + Object newTrailerDict, obj; + char buf[256]; + Guint pos; + int num, gen; + int newSize; + int streamEndsSize; + char *p; + GBool gotRoot; + char* token = NULL; + bool oneCycle = true; + int offset = 0; + + gfree(entries); + capacity = 0; + size = 0; + entries = NULL; + + error(-1, "PDF file is damaged - attempting to reconstruct xref table..."); + gotRoot = gFalse; + streamEndsLen = streamEndsSize = 0; + + if (wasReconstructed) + { + *wasReconstructed = true; + } + + str->reset(); + while (1) { + pos = str->getPos(); + if (!str->getLine(buf, 256)) { + break; + } + p = buf; + + // skip whitespace + while (*p && Lexer::isSpace(*p & 0xff)) ++p; + + oneCycle = true; + offset = 0; + + while( ( token = strstr( p, "endobj" ) ) || oneCycle ) { + oneCycle = false; + + if( token ) { + oneCycle = true; + token[0] = '\0'; + offset = token - p; + } + + // got trailer dictionary + if (!strncmp(p, "trailer", 7)) { + obj.initNull(); + parser = new Parser(NULL, + new Lexer(NULL, + str->makeSubStream(pos + 7, gFalse, 0, &obj)), + gFalse); + parser->getObj(&newTrailerDict); + if (newTrailerDict.isDict()) { + newTrailerDict.dictLookupNF("Root", &obj); + if (obj.isRef()) { + rootNum = obj.getRefNum(); + rootGen = obj.getRefGen(); + if (!trailerDict.isNone()) { + trailerDict.free(); + } + newTrailerDict.copy(&trailerDict); + gotRoot = gTrue; + } + obj.free(); + } + newTrailerDict.free(); + delete parser; + + // look for object + } else if (isdigit(*p)) { + num = atoi(p); + if (num > 0) { + do { + ++p; + } while (*p && isdigit(*p)); + if (isspace(*p)) { + do { + ++p; + } while (*p && isspace(*p)); + if (isdigit(*p)) { + gen = atoi(p); + do { + ++p; + } while (*p && isdigit(*p)); + if (isspace(*p)) { + do { + ++p; + } while (*p && isspace(*p)); + if (!strncmp(p, "obj", 3)) { + if (num >= size) { + newSize = (num + 1 + 255) & ~255; + if (newSize < 0) { + error(-1, "Bad object number"); + return gFalse; + } + if (resize(newSize) != newSize) { + error(-1, "Invalid 'obj' parameters"); + return gFalse; + } + } + if (entries[num].type == xrefEntryFree || + gen >= entries[num].gen) { + entries[num].offset = pos - start; + entries[num].gen = gen; + entries[num].type = xrefEntryUncompressed; + } + } + } + } + } + } + + } else if (!strncmp(p, "endstream", 9)) { + if (streamEndsLen == streamEndsSize) { + streamEndsSize += 64; + if (streamEndsSize >= INT_MAX / (int)sizeof(int)) { + error(-1, "Invalid 'endstream' parameter."); + return gFalse; + } + streamEnds = (Guint *)greallocn(streamEnds, + streamEndsSize, sizeof(int)); + } + streamEnds[streamEndsLen++] = pos; + } + if( token ) { + p = token + 6;// strlen( "endobj" ) = 6 + pos += offset + 6;// strlen( "endobj" ) = 6 + while (*p && Lexer::isSpace(*p & 0xff)) { + ++p; + ++pos; + } + } + } + } + + if (gotRoot) + return gTrue; + + error(-1, "Couldn't find trailer dictionary"); + return gFalse; +} + +void XRef::setEncryption(int permFlagsA, GBool ownerPasswordOkA, + Guchar *fileKeyA, int keyLengthA, + int encVersionA, int encRevisionA, + CryptAlgorithm encAlgorithmA) { + int i; + + encrypted = gTrue; + permFlags = permFlagsA; + ownerPasswordOk = ownerPasswordOkA; + if (keyLengthA <= 16) { + keyLength = keyLengthA; + } else { + keyLength = 16; + } + for (i = 0; i < keyLength; ++i) { + fileKey[i] = fileKeyA[i]; + } + encVersion = encVersionA; + encRevision = encRevisionA; + encAlgorithm = encAlgorithmA; +} + +GBool XRef::okToPrint(GBool ignoreOwnerPW) { + return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permPrint); +} + +// we can print at high res if we are only doing security handler revision +// 2 (and we are allowed to print at all), or with security handler rev +// 3 and we are allowed to print, and bit 12 is set. +GBool XRef::okToPrintHighRes(GBool ignoreOwnerPW) { + if (encrypted) { + if (2 == encRevision) { + return (okToPrint(ignoreOwnerPW)); + } else if (encRevision >= 3) { + return (okToPrint(ignoreOwnerPW) && (permFlags & permHighResPrint)); + } else { + // something weird - unknown security handler version + return gFalse; + } + } else { + return gTrue; + } +} + +GBool XRef::okToChange(GBool ignoreOwnerPW) { + return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permChange); +} + +GBool XRef::okToCopy(GBool ignoreOwnerPW) { + return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permCopy); +} + +GBool XRef::okToAddNotes(GBool ignoreOwnerPW) { + return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permNotes); +} + +GBool XRef::okToFillForm(GBool ignoreOwnerPW) { + return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permFillForm); +} + +GBool XRef::okToAccessibility(GBool ignoreOwnerPW) { + return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permAccessibility); +} + +GBool XRef::okToAssemble(GBool ignoreOwnerPW) { + return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permAssemble); +} + +Object *XRef::fetch(int num, int gen, Object *obj, std::set<int> *fetchOriginatorNums) { + XRefEntry *e; + Parser *parser; + Object obj1, obj2, obj3; + bool deleteFetchOriginatorNums = false; + std::pair<std::set<int>::iterator, bool> fetchInsertResult; + + // check for bogus ref - this can happen in corrupted PDF files + if (num < 0 || num >= size || (fetchOriginatorNums != NULL && fetchOriginatorNums->find(num) != fetchOriginatorNums->end())) { + goto err2; + } + + e = getEntry(num); + if(!e->obj.isNull ()) { //check for updated object + obj = e->obj.copy(obj); + return obj; + } + + if (fetchOriginatorNums == NULL) { + fetchOriginatorNums = new std::set<int>(); + deleteFetchOriginatorNums = true; + } + fetchInsertResult = fetchOriginatorNums->insert(num); + + switch (e->type) { + + case xrefEntryUncompressed: + if (e->gen != gen) { + goto err; + } + obj1.initNull(); + parser = new Parser(this, + new Lexer(this, + str->makeSubStream(start + e->offset, gFalse, 0, &obj1)), + gTrue); + parser->getObj(&obj1, fetchOriginatorNums); + parser->getObj(&obj2, fetchOriginatorNums); + parser->getObj(&obj3, fetchOriginatorNums); + if (!obj1.isInt() || obj1.getInt() != num || + !obj2.isInt() || obj2.getInt() != gen || + !obj3.isCmd("obj")) { + // some buggy pdf have obj1234 for ints that represent 1234 + // try to recover here + if (obj1.isInt() && obj1.getInt() == num && + obj2.isInt() && obj2.getInt() == gen && + obj3.isCmd()) { + char *cmd = obj3.getCmd(); + if (strlen(cmd) > 3 && + cmd[0] == 'o' && + cmd[1] == 'b' && + cmd[2] == 'j') { + char *end_ptr; + long longNumber = strtol(cmd + 3, &end_ptr, 0); + if (longNumber <= INT_MAX && longNumber >= INT_MIN && *end_ptr == '\0') { + int number = longNumber; + error(-1, "Cmd was not obj but %s, assuming the creator meant obj %d", cmd, number); + obj->initInt(number); + obj1.free(); + obj2.free(); + obj3.free(); + delete parser; + break; + } + } + } + obj1.free(); + obj2.free(); + obj3.free(); + delete parser; + goto err; + } + parser->getObj(obj, encrypted ? fileKey : (Guchar *)NULL, + encAlgorithm, keyLength, num, gen, fetchOriginatorNums); + obj1.free(); + obj2.free(); + obj3.free(); + delete parser; + break; + + case xrefEntryCompressed: + { + if (gen != 0) { + goto err; + } + + ObjectStream *objStr = NULL; + ObjectStreamKey key(e->offset); + PopplerCacheItem *item = objStrs->lookup(key); + if (item) { + ObjectStreamItem *it = static_cast<ObjectStreamItem *>(item); + objStr = it->objStream; + } + + if (!objStr) { + objStr = new ObjectStream(this, e->offset); + if (!objStr->isOk()) { + delete objStr; + objStr = NULL; + goto err; + } else { + ObjectStreamKey *newkey = new ObjectStreamKey(e->offset); + ObjectStreamItem *newitem = new ObjectStreamItem(objStr); + objStrs->put(newkey, newitem); + } + } + objStr->getObject(e->gen, num, obj); + } + break; + + default: + goto err; + } + + if (deleteFetchOriginatorNums) { + delete fetchOriginatorNums; + } else { + fetchOriginatorNums->erase(fetchInsertResult.first); + } + return obj; + + err: + if (deleteFetchOriginatorNums) { + delete fetchOriginatorNums; + } else { + fetchOriginatorNums->erase(fetchInsertResult.first); + } + err2: + return obj->initNull(); +} + +Object *XRef::getDocInfo(Object *obj) { + return trailerDict.dictLookup("Info", obj); +} + +// Added for the pdftex project. +Object *XRef::getDocInfoNF(Object *obj) { + return trailerDict.dictLookupNF("Info", obj); +} + +GBool XRef::getStreamEnd(Guint streamStart, Guint *streamEnd) { + int a, b, m; + + if (streamEndsLen == 0 || + streamStart > streamEnds[streamEndsLen - 1]) { + return gFalse; + } + + a = -1; + b = streamEndsLen - 1; + // invariant: streamEnds[a] < streamStart <= streamEnds[b] + while (b - a > 1) { + m = (a + b) / 2; + if (streamStart <= streamEnds[m]) { + b = m; + } else { + a = m; + } + } + *streamEnd = streamEnds[b]; + return gTrue; +} + +int XRef::getNumEntry(Guint offset) +{ + if (size > 0) + { + int res = 0; + Guint resOffset = getEntry(0)->offset; + XRefEntry *e; + for (int i = 1; i < size; ++i) + { + e = getEntry(i); + if (e->offset < offset && e->offset >= resOffset) + { + res = i; + resOffset = e->offset; + } + } + return res; + } + else return -1; +} + +void XRef::add(int num, int gen, Guint offs, GBool used) { + if (num >= size) { + if (num >= capacity) { + entries = (XRefEntry *)greallocn(entries, num + 1, sizeof(XRefEntry)); + capacity = num + 1; + } + for (int i = size; i < num + 1; ++i) { + entries[i].offset = 0xffffffff; + entries[i].type = xrefEntryFree; + entries[i].obj.initNull (); + entries[i].updated = false; + entries[i].gen = 0; + } + size = num + 1; + } + XRefEntry *e = getEntry(num); + e->gen = gen; + e->obj.initNull (); + e->updated = false; + if (used) { + e->type = xrefEntryUncompressed; + e->offset = offs; + } else { + e->type = xrefEntryFree; + e->offset = 0; + } +} + +void XRef::setModifiedObject (Object* o, Ref r) { + if (r.num < 0 || r.num >= size) { + error(-1,"XRef::setModifiedObject on unknown ref: %i, %i\n", r.num, r.gen); + return; + } + XRefEntry *e = getEntry(r.num); + e->obj.free(); + o->copy(&(e->obj)); + e->updated = true; +} + +Ref XRef::addIndirectObject (Object* o) { + int entryIndexToUse = -1; + for (int i = 1; entryIndexToUse == -1 && i < size; ++i) { + if (getEntry(i)->type == xrefEntryFree) entryIndexToUse = i; + } + + XRefEntry *e; + if (entryIndexToUse == -1) { + entryIndexToUse = size; + add(entryIndexToUse, 0, 0, gFalse); + e = getEntry(entryIndexToUse); + } else { + //reuse a free entry + e = getEntry(entryIndexToUse); + //we don't touch gen number, because it should have been + //incremented when the object was deleted + } + e->type = xrefEntryUncompressed; + o->copy(&e->obj); + e->updated = true; + + Ref r; + r.num = entryIndexToUse; + r.gen = e->gen; + return r; +} + +void XRef::writeToFile(OutStream* outStr, GBool writeAllEntries) { + //create free entries linked-list + if (getEntry(0)->gen != 65535) { + error(-1, "XRef::writeToFile, entry 0 of the XRef is invalid (gen != 65535)\n"); + } + int lastFreeEntry = 0; + for (int i=0; i<size; i++) { + if (getEntry(i)->type == xrefEntryFree) { + getEntry(lastFreeEntry)->offset = i; + lastFreeEntry = i; + } + } + + if (writeAllEntries) { + //write the new xref + outStr->printf("xref\r\n"); + outStr->printf("%i %i\r\n", 0, size); + for (int i=0; i<size; i++) { + XRefEntry *e = getEntry(i); + + if(e->gen > 65535) e->gen = 65535; //cap generation number to 65535 (required by PDFReference) + outStr->printf("%010i %05i %c\r\n", e->offset, e->gen, (e->type==xrefEntryFree)?'f':'n'); + } + } else { + //write the new xref + outStr->printf("xref\r\n"); + int i = 0; + while (i < size) { + int j; + for(j=i; j<size; j++) { //look for consecutive entries + if ((getEntry(j)->type == xrefEntryFree) && (getEntry(j)->gen == 0)) + break; + } + if (j-i != 0) + { + outStr->printf("%i %i\r\n", i, j-i); + for (int k=i; k<j; k++) { + XRefEntry *e = getEntry(k); + if(e->gen > 65535) e->gen = 65535; //cap generation number to 65535 (required by PDFReference) + outStr->printf("%010i %05i %c\r\n", e->offset, e->gen, (e->type==xrefEntryFree)?'f':'n'); + } + i = j; + } + else ++i; + } + } +} + +GBool XRef::parseEntry(Guint offset, XRefEntry *entry) +{ + GBool r; + + Object obj; + obj.initNull(); + Parser parser = Parser(NULL, new Lexer(NULL, + str->makeSubStream(offset, gFalse, 20, &obj)), gTrue); + + Object obj1, obj2, obj3; + if ((parser.getObj(&obj1)->isInt()) && + (parser.getObj(&obj2)->isInt()) && + (parser.getObj(&obj3)->isCmd("n") || obj3.isCmd("f"))) { + entry->offset = (Guint) obj1.getInt(); + entry->gen = obj2.getInt(); + entry->type = obj3.isCmd("n") ? xrefEntryUncompressed : xrefEntryFree; + entry->obj.initNull (); + entry->updated = false; + r = gTrue; + } else { + r = gFalse; + } + obj1.free(); + obj2.free(); + obj3.free(); + + return r; +} + +XRefEntry *XRef::getEntry(int i) +{ + if (entries[i].type == xrefEntryNone) { + + if ((!xRefStream) && mainXRefEntriesOffset) { + if (!parseEntry(mainXRefEntriesOffset + 20*i, &entries[i])) { + error(-1, "Failed to parse XRef entry [%d].", i); + } + } else { + std::vector<Guint> followedPrev; + while (prevXRefOffset && entries[i].type == xrefEntryNone) { + bool followed = false; + for (size_t j = 0; j < followedPrev.size(); j++) { + if (followedPrev.at(j) == prevXRefOffset) { + followed = true; + break; + } + } + if (followed) { + error(-1, "Circular XRef"); + if (!(ok = constructXRef(NULL))) { + errCode = errDamaged; + } + break; + } + + followedPrev.push_back (prevXRefOffset); + + std::vector<Guint> followedXRefStm; + if (!readXRef(&prevXRefOffset, &followedXRefStm)) { + prevXRefOffset = 0; + } + + // if there was a problem with the xref table, + // try to reconstruct it + if (!ok) { + GBool wasReconstructed = false; + if (!(ok = constructXRef(&wasReconstructed))) { + errCode = errDamaged; + break; + } + break; + } + } + + if (entries[i].type == xrefEntryNone) { + error(-1, "Invalid XRef entry"); + entries[i].type = xrefEntryFree; + } + } + } + + return &entries[i]; +} + + diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/XRef.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/XRef.h new file mode 100644 index 00000000000..8b77b6c0be1 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/XRef.h @@ -0,0 +1,176 @@ +//======================================================================== +// +// XRef.h +// +// Copyright 1996-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2005 Brad Hards <bradh@frogmouth.net> +// Copyright (C) 2006, 2008, 2010, 2011 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2007-2008 Julien Rebetez <julienr@svn.gnome.org> +// Copyright (C) 2007 Carlos Garcia Campos <carlosgc@gnome.org> +// Copyright (C) 2010 Ilya Gorenbein <igorenbein@finjan.com> +// Copyright 2010 Hib Eris <hib@hiberis.nl> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef XREF_H +#define XREF_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "goo/gtypes.h" +#include "Object.h" + +#include <vector> + +class Dict; +class Stream; +class Parser; +class PopplerCache; + +//------------------------------------------------------------------------ +// XRef +//------------------------------------------------------------------------ + +enum XRefEntryType { + xrefEntryFree, + xrefEntryUncompressed, + xrefEntryCompressed, + xrefEntryNone +}; + +struct XRefEntry { + Guint offset; + int gen; + XRefEntryType type; + bool updated; + Object obj; //if this entry was updated, obj will contains the updated object +}; + +class XRef { +public: + + // Constructor, create an empty XRef, used for PDF writing + XRef(); + // Constructor. Read xref table from stream. + XRef(BaseStream *strA, Guint pos, Guint mainXRefEntriesOffsetA = 0, GBool *wasReconstructed = NULL, GBool reconstruct = false); + + // Destructor. + ~XRef(); + + // Is xref table valid? + GBool isOk() { return ok; } + + // Get the error code (if isOk() returns false). + int getErrorCode() { return errCode; } + + // Set the encryption parameters. + void setEncryption(int permFlagsA, GBool ownerPasswordOkA, + Guchar *fileKeyA, int keyLengthA, + int encVersionA, int encRevisionA, + CryptAlgorithm encAlgorithmA); + + // Is the file encrypted? + GBool isEncrypted() { return encrypted; } + + // Check various permissions. + GBool okToPrint(GBool ignoreOwnerPW = gFalse); + GBool okToPrintHighRes(GBool ignoreOwnerPW = gFalse); + GBool okToChange(GBool ignoreOwnerPW = gFalse); + GBool okToCopy(GBool ignoreOwnerPW = gFalse); + GBool okToAddNotes(GBool ignoreOwnerPW = gFalse); + GBool okToFillForm(GBool ignoreOwnerPW = gFalse); + GBool okToAccessibility(GBool ignoreOwnerPW = gFalse); + GBool okToAssemble(GBool ignoreOwnerPW = gFalse); + + // Get catalog object. + Object *getCatalog(Object *obj) { return fetch(rootNum, rootGen, obj); } + + // Fetch an indirect reference. + Object *fetch(int num, int gen, Object *obj, std::set<int> *fetchOriginatorNums = NULL); + + // Return the document's Info dictionary (if any). + Object *getDocInfo(Object *obj); + Object *getDocInfoNF(Object *obj); + + // Return the number of objects in the xref table. + int getNumObjects() { return size; } + + // Return the catalog object reference. + int getRootNum() { return rootNum; } + int getRootGen() { return rootGen; } + + // Get end position for a stream in a damaged file. + // Returns false if unknown or file is not damaged. + GBool getStreamEnd(Guint streamStart, Guint *streamEnd); + + // Retuns the entry that belongs to the offset + int getNumEntry(Guint offset); + + // Direct access. + int getSize() { return size; } + XRefEntry *getEntry(int i); + Object *getTrailerDict() { return &trailerDict; } + + // Write access + void setModifiedObject(Object* o, Ref r); + Ref addIndirectObject (Object* o); + void add(int num, int gen, Guint offs, GBool used); + void writeToFile(OutStream* outStr, GBool writeAllEntries); + +private: + + BaseStream *str; // input stream + Guint start; // offset in file (to allow for garbage + // at beginning of file) + XRefEntry *entries; // xref entries + int capacity; // size of <entries> array + int size; // number of entries + int rootNum, rootGen; // catalog dict + GBool ok; // true if xref table is valid + int errCode; // error code (if <ok> is false) + Object trailerDict; // trailer dictionary + Guint *streamEnds; // 'endstream' positions - only used in + // damaged files + int streamEndsLen; // number of valid entries in streamEnds + PopplerCache *objStrs; // cached object streams + GBool encrypted; // true if file is encrypted + int encRevision; + int encVersion; // encryption algorithm + CryptAlgorithm encAlgorithm; // encryption algorithm + int keyLength; // length of key, in bytes + int permFlags; // permission bits + Guchar fileKey[16]; // file decryption key + GBool ownerPasswordOk; // true if owner password is correct + Guint prevXRefOffset; // position of prev XRef section (= next to read) + Guint mainXRefEntriesOffset; // offset of entries in main XRef table + GBool xRefStream; // true if last XRef section is a stream + + void init(); + int reserve(int newSize); + int resize(int newSize); + Guint getStartXref(); + GBool readXRef(Guint *pos, std::vector<Guint> *followedXRefStm); + GBool readXRefTable(Parser *parser, Guint *pos, std::vector<Guint> *followedXRefStm); + GBool readXRefStreamSection(Stream *xrefStr, int *w, int first, int n); + GBool readXRefStream(Stream *xrefStr, Guint *pos); + GBool constructXRef(GBool *wasReconstructed); + GBool parseEntry(Guint offset, XRefEntry *entry); + +}; + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/XpdfPluginAPI.cc b/Build/source/libs/poppler/poppler-0.18.4/poppler/XpdfPluginAPI.cc new file mode 100644 index 00000000000..a4e0f0e7799 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/XpdfPluginAPI.cc @@ -0,0 +1,276 @@ +//======================================================================== +// +// XpdfPluginAPI.cc +// +// Copyright 2004 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#include "config.h" + +#ifdef ENABLE_PLUGINS + +#include "gmem.h" +#include "GlobalParams.h" +#include "Object.h" +#include "PDFDoc.h" +#ifdef _WIN32 +#include "WinPDFCore.h" +#else +#include "XPDFCore.h" +#endif +#include "XpdfPluginAPI.h" + +//------------------------------------------------------------------------ + +//~ This should use a pool of Objects; change xpdfFreeObj to match. +static Object *allocObj() { + return (Object *)gmalloc(sizeof(Object)); +} + +//------------------------------------------------------------------------ +// Document access functions +//------------------------------------------------------------------------ + +XpdfObject _xpdfGetInfoDict(XpdfDoc doc) { + Object *obj; + + obj = allocObj(); + return (XpdfObject)((PDFDoc *)doc)->getDocInfo(obj); +} + +XpdfObject _xpdfGetCatalog(XpdfDoc doc) { + Object *obj; + + obj = allocObj(); + return (XpdfObject)((PDFDoc *)doc)->getXRef()->getCatalog(obj); +} + +#ifdef _WIN32 + +HWND _xpdfWin32GetWindow(XpdfDoc doc) { + WinPDFCore *core; + + if (!(core = (WinPDFCore *)((PDFDoc *)doc)->getGUIData())) { + return NULL; + } + return core->getDrawFrame(); +} + +#else + +Widget _xpdfXGetWindow(XpdfDoc doc) { + XPDFCore *core; + + if (!(core = (XPDFCore *)((PDFDoc *)doc)->getGUIData())) { + return NULL; + } + return core->getWidget(); +} + +#endif + +//------------------------------------------------------------------------ +// Object access functions. +//------------------------------------------------------------------------ + +XpdfBool _xpdfObjIsBool(XpdfObject obj) { + return (XpdfBool)((Object *)obj)->isBool(); +} + +XpdfBool _xpdfObjIsInt(XpdfObject obj) { + return (XpdfBool)((Object *)obj)->isInt(); +} + +XpdfBool _xpdfObjIsReal(XpdfObject obj) { + return (XpdfBool)((Object *)obj)->isReal(); +} + +XpdfBool _xpdfObjIsNumber(XpdfObject obj) { + return (XpdfBool)((Object *)obj)->isNum(); +} + +XpdfBool _xpdfObjIsString(XpdfObject obj) { + return (XpdfBool)((Object *)obj)->isString(); +} + +XpdfBool _xpdfObjIsName(XpdfObject obj) { + return (XpdfBool)((Object *)obj)->isName(); +} + +XpdfBool _xpdfObjIsNull(XpdfObject obj) { + return (XpdfBool)((Object *)obj)->isNull(); +} + +XpdfBool _xpdfObjIsArray(XpdfObject obj) { + return (XpdfBool)((Object *)obj)->isArray(); +} + +XpdfBool _xpdfObjIsDict(XpdfObject obj) { + return (XpdfBool)((Object *)obj)->isDict(); +} + +XpdfBool _xpdfObjIsStream(XpdfObject obj) { + return (XpdfBool)((Object *)obj)->isStream(); +} + +XpdfBool _xpdfObjIsRef(XpdfObject obj) { + return (XpdfBool)((Object *)obj)->isRef(); +} + +XpdfBool _xpdfBoolValue(XpdfObject obj) { + return (XpdfBool)((Object *)obj)->getBool(); +} + +int _xpdfIntValue(XpdfObject obj) { + if (!((Object *)obj)->isInt()) { + return 0; + } + return ((Object *)obj)->getInt(); +} + +double _xpdfRealValue(XpdfObject obj) { + if (!((Object *)obj)->isReal()) { + return 0; + } + return ((Object *)obj)->getReal(); +} + +double _xpdfNumberValue(XpdfObject obj) { + if (!((Object *)obj)->isNum()) { + return 0; + } + return ((Object *)obj)->getNum(); +} + +int _xpdfStringLength(XpdfObject obj) { + if (!((Object *)obj)->isString()) { + return 0; + } + return ((Object *)obj)->getString()->getLength(); +} + +char *_xpdfStringValue(XpdfObject obj) { + if (!((Object *)obj)->isString()) { + return 0; + } + return ((Object *)obj)->getString()->getCString(); +} + +char *_xpdfNameValue(XpdfObject obj) { + if (!((Object *)obj)->isName()) { + return NULL; + } + return ((Object *)obj)->getName(); +} + +int _xpdfArrayLength(XpdfObject obj) { + if (!((Object *)obj)->isArray()) { + return 0; + } + return ((Object *)obj)->arrayGetLength(); +} + +XpdfObject _xpdfArrayGet(XpdfObject obj, int idx) { + Object *elem; + + elem = allocObj(); + if (!((Object *)obj)->isArray()) { + return (XpdfObject)elem->initNull(); + } + return (XpdfObject)((Object *)obj)->arrayGet(idx, elem); +} + +XpdfObject _xpdfDictGet(XpdfObject obj, char *key) { + Object *elem; + + elem = allocObj(); + if (!((Object *)obj)->isDict()) { + return (XpdfObject)elem->initNull(); + } + return (XpdfObject)((Object *)obj)->dictLookup(key, elem); +} + +void _xpdfFreeObj(XpdfObject obj) { + ((Object *)obj)->free(); + gfree(obj); +} + +//------------------------------------------------------------------------ +// Memory allocation functions +//------------------------------------------------------------------------ + +void *_xpdfMalloc(int size) { + return gmalloc(size); +} + +void *_xpdfRealloc(void *p, int size) { + return grealloc(p, size); +} + +void _xpdfFree(void *p) { + gfree(p); +} + +//------------------------------------------------------------------------ +// Security handlers +//------------------------------------------------------------------------ + +void _xpdfRegisterSecurityHandler(XpdfSecurityHandler *handler) { + if (handler->version <= xpdfPluginAPIVersion) { + globalParams->addSecurityHandler(handler); + } +} + +//------------------------------------------------------------------------ + +XpdfPluginVecTable xpdfPluginVecTable = { + xpdfPluginAPIVersion, + &_xpdfGetInfoDict, + &_xpdfGetCatalog, +#ifdef _WIN32 + &_xpdfWin32GetWindow, +#else + &_xpdfXGetWindow, +#endif + &_xpdfObjIsBool, + &_xpdfObjIsInt, + &_xpdfObjIsReal, + &_xpdfObjIsString, + &_xpdfObjIsName, + &_xpdfObjIsNull, + &_xpdfObjIsArray, + &_xpdfObjIsDict, + &_xpdfObjIsStream, + &_xpdfObjIsRef, + &_xpdfBoolValue, + &_xpdfIntValue, + &_xpdfRealValue, + &_xpdfStringLength, + &_xpdfStringValue, + &_xpdfNameValue, + &_xpdfArrayLength, + &_xpdfArrayGet, + &_xpdfDictGet, + &_xpdfFreeObj, + &_xpdfMalloc, + &_xpdfRealloc, + &_xpdfFree, + &_xpdfRegisterSecurityHandler, +}; + +#endif // ENABLE_PLUGINS diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/XpdfPluginAPI.h b/Build/source/libs/poppler/poppler-0.18.4/poppler/XpdfPluginAPI.h new file mode 100644 index 00000000000..22540f728bd --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/XpdfPluginAPI.h @@ -0,0 +1,341 @@ +/* + * XpdfPluginAPI.h + * + * Copyright 2004 Glyph & Cog, LLC + */ + +#ifndef XPDFPLUGINAPI_H +#define XPDFPLUGINAPI_H + +#ifdef _WIN32 +#include <windows.h> +#else +#define Object XtObject +#include <X11/Intrinsic.h> +#undef Object +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/*------------------------------------------------------------------------ + * Macros + *------------------------------------------------------------------------*/ + +/* + * The current API version. + */ +#define xpdfPluginAPIVersion 1 + +#ifdef _WIN32 +# ifdef __cplusplus +# define PLUGINFUNC(retType) extern "C" __declspec(dllexport) retType +# else +# define PLUGINFUNC(retType) extern __declspec(dllexport) retType +# endif +#else +# ifdef __cplusplus +# define PLUGINFUNC(retType) extern "C" retType +# else +# define PLUGINFUNC(retType) extern retType +# endif +#endif + +/*------------------------------------------------------------------------ + * Plugin setup/cleanup + *------------------------------------------------------------------------*/ + +/* + * All plugins are required to implement two functions: + * + * -- Initialize the plugin. Returns non-zero if successful. + * PLUGINFUNC(XpdfBool) xpdfInitPlugin(void); + * + * -- Free the plugin. + * PLUGINFUNC(void) xpdfFreePlugin(void); + */ + +/*------------------------------------------------------------------------ + * Types + *------------------------------------------------------------------------*/ + +/* + * Standard C boolean -- zero = false, non-zero = true. + */ +typedef int XpdfBool; +#define xpdfTrue 1 +#define xpdfFalse 0 + +/* + * PDF document handle. + */ +typedef struct _XpdfDoc *XpdfDoc; + +/* + * PDF object handle. + */ +typedef struct _XpdfObject *XpdfObject; + +/* + * Document access permissions. Any of these can be bitwise 'or'ed + * together. If xpdfPermissionOpen is not included, the document + * cannot be opened at all, and the other bits are ignored. + */ +typedef unsigned int XpdfPermission; +#define xpdfPermissionOpen (1 << 0) +#define xpdfPermissionPrint (1 << 2) +#define xpdfPermissionChange (1 << 3) +#define xpdfPermissionCopy (1 << 4) +#define xpdfPermissionNotes (1 << 5) + +/*------------------------------------------------------------------------ + * Security handler + *------------------------------------------------------------------------*/ + +/* + * XpdfSecurityHandler - a security handler plugin should create one + * of these and pass it to xpdfRegisterSecurityHandler. + */ +#ifdef __cplusplus +struct XpdfSecurityHandler { +#else +typedef struct { +#endif + + /* + * Version of the security handler spec (this document) -- use + * xpdfPluginAPIVersion. + */ + int version; + + /* + * Security handler name. + */ + char *name; + + /* + * Any global data the security handler needs. XpdfViewer will pass + * this pointer to all handler functions as the <handlerData> + * argument. + */ + void *handlerData; + + /* + * Allocate and initialize data for a new document. XpdfViewer will + * pass the returned pointer to all other handler functions as the + * <docData> argument. Returns non-zero if successful. + */ + XpdfBool (*newDoc)(void *handlerData, XpdfDoc doc, + XpdfObject encryptDict, void **docData); + + /* + * Free the data allocated by newDoc. + */ + void (*freeDoc)(void *handlerData, void *docData); + + /* + * Construct authorization data based on the supplied owner and user + * passwords (either or both of which may be NULL). This function + * is called in "batch" mode, i.e., if the password was supplied on + * the command line or via an Xpdf library API. It should not + * generate any user interaction (e.g., a password dialog). It is + * not required to support this function: the makeAuthData function + * pointer can be set to NULL. Returns non-zero if successful. + */ + XpdfBool (*makeAuthData)(void *handlerData, void *docData, + char *ownerPassword, char *userPassword, + void **authData); + + /* + * Request any needed information (e.g., a password) from the user, + * and construct an authorization data object. Returns non-zero if + * successful. + */ + XpdfBool (*getAuthData)(void *handlerData, void *docData, + void **authData); + + /* + * Free the data allocated by getAuthData. + */ + void (*freeAuthData)(void *handlerData, void *docData, + void *authData); + + /* + * Request permission to access the document. This returns all + * permissions granted by authData. + */ + XpdfPermission (*authorize)(void *handlerData, void *docData, + void *authData); + + /* + * Get the decryption key and algorithm version associated with the + * document. Returns non-zero if successful. + */ + XpdfBool (*getKey)(void *handlerData, void *docData, + char **key, int *keyLen, int *cryptVersion); + + /* + * Free the data allocated by getKey. + */ + void (*freeKey)(void *handlerData, void *docData, + char *key, int keyLen); + +#ifdef __cplusplus +}; +#else +} XpdfSecurityHandler; +#endif + +/*------------------------------------------------------------------------*/ + +typedef struct { + int version; + +/*------------------------------------------------------------------------ + * Document access functions + *------------------------------------------------------------------------*/ + +/* + * Get a document's info dictionary. (The returned object must be + * freed with xpdfFreeObj.) + */ +XpdfObject (*_xpdfGetInfoDict)(XpdfDoc doc); + +/* + * Get a document's catalog ("root") dictionary. (The returned object + * must be freed with xpdfFreeObj.) + */ +XpdfObject (*_xpdfGetCatalog)(XpdfDoc doc); + +#ifdef _WIN32 + +/* + * Get the handle for the viewer window associated with the specified + * document. [Win32 only] + */ +HWND (*_xpdfWin32GetWindow)(XpdfDoc doc); + +#else + +/* + * Get the Motif widget for the viewer window associated with the + * specified document. [X only] + */ +Widget (*_xpdfXGetWindow)(XpdfDoc doc); + +#endif + +/*------------------------------------------------------------------------ + * Object access functions + *------------------------------------------------------------------------*/ + +/* + * Check an object's type. + */ +XpdfBool (*_xpdfObjIsBool)(XpdfObject obj); +XpdfBool (*_xpdfObjIsInt)(XpdfObject obj); +XpdfBool (*_xpdfObjIsReal)(XpdfObject obj); +XpdfBool (*_xpdfObjIsString)(XpdfObject obj); +XpdfBool (*_xpdfObjIsName)(XpdfObject obj); +XpdfBool (*_xpdfObjIsNull)(XpdfObject obj); +XpdfBool (*_xpdfObjIsArray)(XpdfObject obj); +XpdfBool (*_xpdfObjIsDict)(XpdfObject obj); +XpdfBool (*_xpdfObjIsStream)(XpdfObject obj); +XpdfBool (*_xpdfObjIsRef)(XpdfObject obj); + +/* + * Value access. + * (Objects returned by xpdfArrayGet and xpdfDictGet must be freed + * with xpdfFreeObj.) + */ +XpdfBool (*_xpdfBoolValue)(XpdfObject obj); +int (*_xpdfIntValue)(XpdfObject obj); +double (*_xpdfRealValue)(XpdfObject obj); +int (*_xpdfStringLength)(XpdfObject obj); +char *(*_xpdfStringValue)(XpdfObject obj); +char *(*_xpdfNameValue)(XpdfObject obj); +int (*_xpdfArrayLength)(XpdfObject obj); +XpdfObject (*_xpdfArrayGet)(XpdfObject obj, int idx); +XpdfObject (*_xpdfDictGet)(XpdfObject obj, char *key); + +/* + * Object destruction. NB: *all* objects must be freed after use. + */ +void (*_xpdfFreeObj)(XpdfObject obj); + +/*------------------------------------------------------------------------ + * Memory allocation functions + *------------------------------------------------------------------------*/ + +void *(*_xpdfMalloc)(int size); +void *(*_xpdfRealloc)(void *p, int size); +void (*_xpdfFree)(void *p); + +/*------------------------------------------------------------------------ + * Security handler functions + *------------------------------------------------------------------------*/ + +/* + * Register a new security handler. + */ +void (*_xpdfRegisterSecurityHandler)(XpdfSecurityHandler *handler); + +/*------------------------------------------------------------------------*/ + +} XpdfPluginVecTable; + +#ifdef _WIN32 + +extern __declspec(dllexport) XpdfPluginVecTable xpdfPluginVecTable; + +#define xpdfPluginSetup \ + extern __declspec(dllexport) \ + XpdfPluginVecTable xpdfPluginVecTable = {xpdfPluginAPIVersion}; + +#else + +extern XpdfPluginVecTable xpdfPluginVecTable; + +#define xpdfPluginSetup \ + XpdfPluginVecTable xpdfPluginVecTable = {xpdfPluginAPIVersion}; + +#endif + +#define xpdfGetInfoDict (*xpdfPluginVecTable._xpdfGetInfoDict) +#define xpdfGetCatalog (*xpdfPluginVecTable._xpdfGetCatalog) +#ifdef _WIN32 +#define xpdfWin32GetWindow (*xpdfPluginVecTable._xpdfWin32GetWindow) +#else +#define xpdfXGetWindow (*xpdfPluginVecTable._xpdfXGetWindow) +#endif +#define xpdfObjIsBool (*xpdfPluginVecTable._xpdfObjIsBool) +#define xpdfObjIsInt (*xpdfPluginVecTable._xpdfObjIsInt) +#define xpdfObjIsReal (*xpdfPluginVecTable._xpdfObjIsReal) +#define xpdfObjIsString (*xpdfPluginVecTable._xpdfObjIsString) +#define xpdfObjIsName (*xpdfPluginVecTable._xpdfObjIsName) +#define xpdfObjIsNull (*xpdfPluginVecTable._xpdfObjIsNull) +#define xpdfObjIsArray (*xpdfPluginVecTable._xpdfObjIsArray) +#define xpdfObjIsDict (*xpdfPluginVecTable._xpdfObjIsDict) +#define xpdfObjIsStream (*xpdfPluginVecTable._xpdfObjIsStream) +#define xpdfObjIsRef (*xpdfPluginVecTable._xpdfObjIsRef) +#define xpdfBoolValue (*xpdfPluginVecTable._xpdfBoolValue) +#define xpdfIntValue (*xpdfPluginVecTable._xpdfIntValue) +#define xpdfRealValue (*xpdfPluginVecTable._xpdfRealValue) +#define xpdfStringLength (*xpdfPluginVecTable._xpdfStringLength) +#define xpdfStringValue (*xpdfPluginVecTable._xpdfStringValue) +#define xpdfNameValue (*xpdfPluginVecTable._xpdfNameValue) +#define xpdfArrayLength (*xpdfPluginVecTable._xpdfArrayLength) +#define xpdfArrayGet (*xpdfPluginVecTable._xpdfArrayGet) +#define xpdfDictGet (*xpdfPluginVecTable._xpdfDictGet) +#define xpdfFreeObj (*xpdfPluginVecTable._xpdfFreeObj) +#define xpdfMalloc (*xpdfPluginVecTable._xpdfMalloc) +#define xpdfRealloc (*xpdfPluginVecTable._xpdfRealloc) +#define xpdfFree (*xpdfPluginVecTable._xpdfFree) +#define xpdfRegisterSecurityHandler (*xpdfPluginVecTable._xpdfRegisterSecurityHandler) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/gen-unicode-tables.py b/Build/source/libs/poppler/poppler-0.18.4/poppler/gen-unicode-tables.py new file mode 100644 index 00000000000..282f6e52518 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/gen-unicode-tables.py @@ -0,0 +1,38 @@ +UNICODE_LAST_CHAR_PART1 = 0x2FAFF +HANGUL_S_BASE = 0xAC00 +HANGUL_S_COUNT = 19 * 21 * 28 +import unicodedata + +print """// Generated by gen-unicode-tables.py + +typedef struct { + Unicode character; + int length; + int offset; +} decomposition; +""" + +decomp_table = [] +max_index = 0 +decomp_expansion_index = {} +decomp_expansion = [] +for u in xrange(0, UNICODE_LAST_CHAR_PART1): + if (u >= HANGUL_S_BASE and u < HANGUL_S_BASE + HANGUL_S_COUNT): + continue + norm = tuple(map(ord, unicodedata.normalize("NFKD", unichr(u)))) + if norm != (u,): + try: + i = decomp_expansion_index[norm] + decomp_table.append((u, len(norm), i)) + except KeyError: + decomp_table.append((u, len(norm), max_index)) + decomp_expansion_index[norm] = max_index + decomp_expansion.append((norm, max_index)) + max_index += len(norm) +print "#define DECOMP_TABLE_LENGTH %d\n" % len(decomp_table) +print "static const decomposition decomp_table[] = {\n%s\n};\n" % ", \n".join( + " { 0x%x, %d, %d }" % (character, length, offset) + for character, length, offset in decomp_table) +print "static const Unicode decomp_expansion[] = {\n%s\n};\n" % ", \n".join( + " %s /* offset %d */ " % (", ".join("0x%x" % u for u in norm), + index) for norm, index in decomp_expansion) diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/poppler-config.h.cmake b/Build/source/libs/poppler/poppler-0.18.4/poppler/poppler-config.h.cmake new file mode 100644 index 00000000000..ca4de776a33 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/poppler-config.h.cmake @@ -0,0 +1,178 @@ +//================================================= -*- mode: c++ -*- ==== +// +// poppler-config.h +// +// Copyright 1996-2004 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef POPPLER_CONFIG_H +#define POPPLER_CONFIG_H + +// We duplicate some of the config.h #define's here since they are +// used in some of the header files we install. The #ifndef/#endif +// around #undef look odd, but it's to silence warnings about +// redefining those symbols. + +/* Enable multithreading support. */ +#ifndef MULTITHREADED +#cmakedefine MULTITHREADED 1 +#endif + +/* Use fixedpoint. */ +#ifndef USE_FIXEDPOINT +#cmakedefine USE_FIXEDPOINT 1 +#endif + +/* Use single precision arithmetic in the Splash backend */ +#ifndef USE_FLOAT +#cmakedefine USE_FLOAT 1 +#endif + +/* Include support for OPI comments. */ +#ifndef OPI_SUPPORT +#cmakedefine OPI_SUPPORT 1 +#endif + +/* Enable word list support. */ +#ifndef TEXTOUT_WORD_LIST +#cmakedefine TEXTOUT_WORD_LIST 1 +#endif + +/* Use fontconfig font configuration backend */ +#ifndef WITH_FONTCONFIGURATION_FONTCONFIG +#cmakedefine WITH_FONTCONFIGURATION_FONTCONFIG 1 +#endif + +/* Use win32 font configuration backend */ +#ifndef WITH_FONTCONFIGURATION_WIN32 +#cmakedefine WITH_FONTCONFIGURATION_WIN32 1 +#endif + +/* Support for curl is compiled in. */ +#ifndef POPPLER_HAS_CURL_SUPPORT +#cmakedefine POPPLER_HAS_CURL_SUPPORT 1 +#endif + +/* Use libjpeg instead of builtin jpeg decoder. */ +#ifndef ENABLE_LIBJPEG +#cmakedefine ENABLE_LIBJPEG 1 +#endif + +/* Build against libtiff. */ +#ifndef ENABLE_LIBTIFF +#cmakedefine ENABLE_LIBTIFF 1 +#endif + +/* Build against libpng. */ +#ifndef ENABLE_LIBPNG +#cmakedefine ENABLE_LIBPNG 1 +#endif + +/* Use zlib instead of builtin zlib decoder. */ +#ifndef ENABLE_ZLIB +#cmakedefine ENABLE_ZLIB 1 +#endif + +/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. + */ +#ifndef HAVE_DIRENT_H +#cmakedefine HAVE_DIRENT_H 1 +#endif + +/* Defines if gettimeofday is available on your system */ +#ifndef HAVE_GETTIMEOFDAY +#cmakedefine HAVE_GETTIMEOFDAY 1 +#endif + +/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ +#ifndef HAVE_NDIR_H +#cmakedefine HAVE_NDIR_H 1 +#endif + +/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'. + */ +#ifndef HAVE_SYS_DIR_H +#cmakedefine HAVE_SYS_DIR_H 1 +#endif + +/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'. + */ +#ifndef HAVE_SYS_NDIR_H +#cmakedefine HAVE_SYS_NDIR_H 1 +#endif + +/* Have FreeType2 include files */ +#ifndef HAVE_FREETYPE_H +#cmakedefine HAVE_FREETYPE_H 1 +#endif + +/* Defines if use cms */ +#ifndef USE_CMS +#cmakedefine USE_CMS 1 +#endif + +// Also, there are preprocessor symbols in the header files +// that are used but never defined when building poppler using configure +// or cmake: DISABLE_OUTLINE, DEBUG_MEM, SPLASH_CMYK, HAVE_T1LIB_H, +// ENABLE_PLUGINS, DEBUG_FORMS, HAVE_FREETYPE_FREETYPE_H + +//------------------------------------------------------------------------ +// version +//------------------------------------------------------------------------ + +// copyright notice +#define popplerCopyright "Copyright 2005-2011 The Poppler Developers - http://poppler.freedesktop.org" +#define xpdfCopyright "Copyright 1996-2004 Glyph & Cog, LLC" + +//------------------------------------------------------------------------ +// popen +//------------------------------------------------------------------------ + +#if defined(_MSC_VER) || defined(__BORLANDC__) +#define popen _popen +#define pclose _pclose +#endif + +#if defined(VMS) || defined(VMCMS) || defined(DOS) || defined(OS2) || defined(__EMX__) || defined(_WIN32) || defined(__DJGPP__) || defined(MACOS) +#define POPEN_READ_MODE "rb" +#else +#define POPEN_READ_MODE "r" +#endif + +//------------------------------------------------------------------------ +// Win32 stuff +//------------------------------------------------------------------------ + +#if defined(_WIN32) && !defined(_MSC_VER) +#include <windef.h> +#else +#define CDECL +#endif + +#if defined(_WIN32) +#ifdef _MSC_VER +#define strtok_r strtok_s +#elif __MINGW32__ +char * strtok_r (char *s, const char *delim, char **save_ptr); +#endif +#endif + +//------------------------------------------------------------------------ +// Compiler +//------------------------------------------------------------------------ + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) +#define GCC_PRINTF_FORMAT(fmt_index, va_index) \ + __attribute__((__format__(__printf__, fmt_index, va_index))) +#else +#define GCC_PRINTF_FORMAT(fmt_index, va_index) +#endif + +#if defined(_MSC_VER) +#define fmax(a, b) max(a, b) +#define fmin(a, b) min(a, b) +#endif + + +#endif /* POPPLER_CONFIG_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/poppler-config.h.in b/Build/source/libs/poppler/poppler-0.18.4/poppler/poppler-config.h.in new file mode 100644 index 00000000000..071d2fcc5ac --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/poppler-config.h.in @@ -0,0 +1,183 @@ +//================================================= -*- mode: c++ -*- ==== +// +// poppler-config.h +// +// Copyright 1996-2004 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef POPPLER_CONFIG_H +#define POPPLER_CONFIG_H + +// We duplicate some of the config.h #define's here since they are +// used in some of the header files we install. The #ifndef/#endif +// around #undef look odd, but it's to silence warnings about +// redefining those symbols. + +/* Define to the poppler version. */ +#ifndef POPPLER_VERSION +#undef POPPLER_VERSION +#endif + +/* Enable multithreading support. */ +#ifndef MULTITHREADED +#undef MULTITHREADED +#endif + +/* Use fixedpoint. */ +#ifndef USE_FIXEDPOINT +#undef USE_FIXEDPOINT +#endif + +/* Use single precision arithmetic in the Splash backend */ +#ifndef USE_FLOAT +#undef USE_FLOAT +#endif + +/* Include support for OPI comments. */ +#ifndef OPI_SUPPORT +#undef OPI_SUPPORT +#endif + +/* Enable word list support. */ +#ifndef TEXTOUT_WORD_LIST +#undef TEXTOUT_WORD_LIST +#endif + +/* Use fontconfig font configuration backend */ +#ifndef WITH_FONTCONFIGURATION_FONTCONFIG +#undef WITH_FONTCONFIGURATION_FONTCONFIG +#endif + +/* Use win32 font configuration backend */ +#ifndef WITH_FONTCONFIGURATION_WIN32 +#undef WITH_FONTCONFIGURATION_WIN32 +#endif + +/* Support for curl is compiled in. */ +#ifndef POPPLER_HAS_CURL_SUPPORT +#undef POPPLER_HAS_CURL_SUPPORT +#endif + +/* Use libjpeg instead of builtin jpeg decoder. */ +#ifndef ENABLE_LIBJPEG +#undef ENABLE_LIBJPEG +#endif + +/* Build against libtiff. */ +#ifndef ENABLE_LIBTIFF +#undef ENABLE_LIBTIFF +#endif + +/* Build against libpng. */ +#ifndef ENABLE_LIBPNG +#undef ENABLE_LIBPNG +#endif + +/* Use zlib instead of builtin zlib decoder. */ +#ifndef ENABLE_ZLIB +#undef ENABLE_ZLIB +#endif + +/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. + */ +#ifndef HAVE_DIRENT_H +#undef HAVE_DIRENT_H +#endif + +/* Defines if gettimeofday is available on your system */ +#ifndef HAVE_GETTIMEOFDAY +#undef HAVE_GETTIMEOFDAY +#endif + +/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ +#ifndef HAVE_NDIR_H +#undef HAVE_NDIR_H +#endif + +/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'. + */ +#ifndef HAVE_SYS_DIR_H +#undef HAVE_SYS_DIR_H +#endif + +/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'. + */ +#ifndef HAVE_SYS_NDIR_H +#undef HAVE_SYS_NDIR_H +#endif + +/* Have FreeType2 include files */ +#ifndef HAVE_FREETYPE_H +#undef HAVE_FREETYPE_H +#endif + +/* Defines if use cms */ +#ifndef USE_CMS +#undef USE_CMS +#endif + +// Also, there are preprocessor symbols in the header files +// that are used but never defined when building poppler using configure +// or cmake: DISABLE_OUTLINE, DEBUG_MEM, SPLASH_CMYK, HAVE_T1LIB_H, +// ENABLE_PLUGINS, DEBUG_FORMS, HAVE_FREETYPE_FREETYPE_H + +//------------------------------------------------------------------------ +// version +//------------------------------------------------------------------------ + +// copyright notice +#define popplerCopyright "Copyright 2005-2011 The Poppler Developers - http://poppler.freedesktop.org" +#define xpdfCopyright "Copyright 1996-2004 Glyph & Cog, LLC" + +//------------------------------------------------------------------------ +// popen +//------------------------------------------------------------------------ + +#if defined(_MSC_VER) || defined(__BORLANDC__) +#define popen _popen +#define pclose _pclose +#endif + +#if defined(VMS) || defined(VMCMS) || defined(DOS) || defined(OS2) || defined(__EMX__) || defined(_WIN32) || defined(__DJGPP__) || defined(MACOS) +#define POPEN_READ_MODE "rb" +#else +#define POPEN_READ_MODE "r" +#endif + +//------------------------------------------------------------------------ +// Win32 stuff +//------------------------------------------------------------------------ + +#if defined(_WIN32) && !defined(_MSC_VER) +#include <windef.h> +#else +#define CDECL +#endif + +#if defined(_WIN32) +#ifdef _MSC_VER +#define strtok_r strtok_s +#elif __MINGW32__ +char * strtok_r (char *s, const char *delim, char **save_ptr); +#endif +#endif + +//------------------------------------------------------------------------ +// Compiler +//------------------------------------------------------------------------ + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) +#define GCC_PRINTF_FORMAT(fmt_index, va_index) \ + __attribute__((__format__(__printf__, fmt_index, va_index))) +#else +#define GCC_PRINTF_FORMAT(fmt_index, va_index) +#endif + +#if defined(_MSC_VER) +#define fmax(a, b) max(a, b) +#define fmin(a, b) min(a, b) +#endif + + +#endif /* POPPLER_CONFIG_H */ diff --git a/Build/source/libs/poppler/poppler-0.18.4/poppler/strtok_r.cpp b/Build/source/libs/poppler/poppler-0.18.4/poppler/strtok_r.cpp new file mode 100644 index 00000000000..30e2196aa13 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.18.4/poppler/strtok_r.cpp @@ -0,0 +1,77 @@ +/* Reentrant string tokenizer. Generic version. + Copyright (C) 1991,1996-1999,2001,2004 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* Copyright (C) 1991,93,96,97,99,2000,2002 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Based on strlen implementation by Torbjorn Granlund (tege@sics.se), + with help from Dan Sahlin (dan@sics.se) and + commentary by Jim Blandy (jimb@ai.mit.edu); + adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), + and implemented by Roland McGrath (roland@ai.mit.edu). + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifdef __MINGW32__ +#include <string.h> + +#define __rawmemchr strchr + +char * strtok_r (char *s, const char *delim, char **save_ptr) +{ + char *token; + + if (s == NULL) + s = *save_ptr; + + /* Scan leading delimiters. */ + s += strspn (s, delim); + if (*s == '\0') + { + *save_ptr = s; + return NULL; + } + + /* Find the end of the token. */ + token = s; + s = strpbrk (token, delim); + if (s == NULL) + /* This token finishes the string. */ + *save_ptr = __rawmemchr (token, '\0'); + else + { + /* Terminate the token and make *SAVE_PTR point past it. */ + *s = '\0'; + *save_ptr = s + 1; + } + return token; +} +#endif diff --git a/Build/source/libs/poppler/poppler/Makefile.in b/Build/source/libs/poppler/poppler/Makefile.in index d24f692b0b3..e2ee66df7a9 100644 --- a/Build/source/libs/poppler/poppler/Makefile.in +++ b/Build/source/libs/poppler/poppler/Makefile.in @@ -33,7 +33,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/hdrs.am \ - $(top_srcdir)/poppler-0.18.0/poppler/poppler-config.h.in + $(top_srcdir)/poppler-0.18.4/poppler/poppler-config.h.in subdir = poppler ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../../m4/kpse-common.m4 \ @@ -190,10 +190,10 @@ poppler-config.h: stamp-h2 @if test ! -f $@; then rm -f stamp-h2; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h2; else :; fi -stamp-h2: $(top_srcdir)/poppler-0.18.0/poppler/poppler-config.h.in $(top_builddir)/config.status +stamp-h2: $(top_srcdir)/poppler-0.18.4/poppler/poppler-config.h.in $(top_builddir)/config.status @rm -f stamp-h2 cd $(top_builddir) && $(SHELL) ./config.status poppler/poppler-config.h -$(top_srcdir)/poppler-0.18.0/poppler/poppler-config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +$(top_srcdir)/poppler-0.18.4/poppler/poppler-config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h2 touch $@ diff --git a/Build/source/libs/poppler/version.ac b/Build/source/libs/poppler/version.ac index 77978a97930..13cf3eb675e 100644 --- a/Build/source/libs/poppler/version.ac +++ b/Build/source/libs/poppler/version.ac @@ -1,5 +1,5 @@ dnl -dnl Copyright (C) 2011 Peter Breitenlohner <tex-live@tug.org> +dnl Copyright (C) 2011-2012 Peter Breitenlohner <tex-live@tug.org> dnl dnl This file is free software; the copyright holder dnl gives unlimited permission to copy and/or distribute it, @@ -8,4 +8,4 @@ dnl dnl -------------------------------------------------------- dnl dnl m4-include this file to define the current poppler version -m4_define([poppler_version], [0.18.0]) +m4_define([poppler_version], [0.18.4]) -- cgit v1.2.3